]> git.openstreetmap.org Git - rails.git/commitdiff
Update to iD v2.2.2
authorBryan Housel <bryan@mapbox.com>
Mon, 12 Jun 2017 15:24:59 +0000 (11:24 -0400)
committerBryan Housel <bryan@mapbox.com>
Mon, 12 Jun 2017 15:24:59 +0000 (11:24 -0400)
123 files changed:
vendor/assets/iD/iD.css.erb
vendor/assets/iD/iD.js
vendor/assets/iD/iD/img/iD-sprite.svg
vendor/assets/iD/iD/img/maki-sprite.svg
vendor/assets/iD/iD/img/traffic-signs/traffic-signs.json [new file with mode: 0644]
vendor/assets/iD/iD/img/traffic-signs/traffic-signs.png [new file with mode: 0644]
vendor/assets/iD/iD/locales/ar.json
vendor/assets/iD/iD/locales/ast.json
vendor/assets/iD/iD/locales/ca.json
vendor/assets/iD/iD/locales/cs.json
vendor/assets/iD/iD/locales/da.json
vendor/assets/iD/iD/locales/de.json
vendor/assets/iD/iD/locales/en-GB.json
vendor/assets/iD/iD/locales/en.json
vendor/assets/iD/iD/locales/eo.json
vendor/assets/iD/iD/locales/es.json
vendor/assets/iD/iD/locales/et.json
vendor/assets/iD/iD/locales/fa.json
vendor/assets/iD/iD/locales/fi.json
vendor/assets/iD/iD/locales/fr.json
vendor/assets/iD/iD/locales/gl.json
vendor/assets/iD/iD/locales/hr.json
vendor/assets/iD/iD/locales/hu.json
vendor/assets/iD/iD/locales/hy.json
vendor/assets/iD/iD/locales/id.json
vendor/assets/iD/iD/locales/it.json
vendor/assets/iD/iD/locales/ja.json
vendor/assets/iD/iD/locales/kn.json
vendor/assets/iD/iD/locales/ko.json
vendor/assets/iD/iD/locales/mk.json
vendor/assets/iD/iD/locales/ml.json
vendor/assets/iD/iD/locales/ms.json
vendor/assets/iD/iD/locales/nl.json
vendor/assets/iD/iD/locales/pl.json
vendor/assets/iD/iD/locales/pt-BR.json
vendor/assets/iD/iD/locales/pt.json
vendor/assets/iD/iD/locales/ro.json
vendor/assets/iD/iD/locales/ru.json
vendor/assets/iD/iD/locales/sk.json
vendor/assets/iD/iD/locales/sl.json
vendor/assets/iD/iD/locales/sv.json
vendor/assets/iD/iD/locales/tr.json
vendor/assets/iD/iD/locales/uk.json
vendor/assets/iD/iD/locales/vi.json
vendor/assets/iD/iD/locales/yue.json
vendor/assets/iD/iD/locales/zh-CN.json
vendor/assets/iD/iD/locales/zh-HK.json
vendor/assets/iD/iD/locales/zh-TW.json
vendor/assets/iD/iD/mapillary-js/mapillary.js
vendor/assets/iD/iD/mapillary-js/mapillary.js.map
vendor/assets/iD/iD/mapillary-js/mapillary.min.js
vendor/assets/iD/iD/traffico/LICENSE [deleted file]
vendor/assets/iD/iD/traffico/README.md [deleted file]
vendor/assets/iD/iD/traffico/bower.json [deleted file]
vendor/assets/iD/iD/traffico/fonts/traffico-preview.html [deleted file]
vendor/assets/iD/iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.eot [deleted file]
vendor/assets/iD/iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.svg [deleted file]
vendor/assets/iD/iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.ttf [deleted file]
vendor/assets/iD/iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.woff [deleted file]
vendor/assets/iD/iD/traffico/global.json [deleted file]
vendor/assets/iD/iD/traffico/glyphs.json [deleted file]
vendor/assets/iD/iD/traffico/mapillary-mappings/au.json [deleted file]
vendor/assets/iD/iD/traffico/mapillary-mappings/br.json [deleted file]
vendor/assets/iD/iD/traffico/mapillary-mappings/ca.json [deleted file]
vendor/assets/iD/iD/traffico/mapillary-mappings/eu.json [deleted file]
vendor/assets/iD/iD/traffico/mapillary-mappings/us.json [deleted file]
vendor/assets/iD/iD/traffico/signs/at.json [deleted file]
vendor/assets/iD/iD/traffico/signs/au.json [deleted file]
vendor/assets/iD/iD/traffico/signs/be.json [deleted file]
vendor/assets/iD/iD/traffico/signs/br.json [deleted file]
vendor/assets/iD/iD/traffico/signs/ca.json [deleted file]
vendor/assets/iD/iD/traffico/signs/ch.json [deleted file]
vendor/assets/iD/iD/traffico/signs/cz.json [deleted file]
vendor/assets/iD/iD/traffico/signs/de.json [deleted file]
vendor/assets/iD/iD/traffico/signs/dk.json [deleted file]
vendor/assets/iD/iD/traffico/signs/ee.json [deleted file]
vendor/assets/iD/iD/traffico/signs/es.json [deleted file]
vendor/assets/iD/iD/traffico/signs/fi.json [deleted file]
vendor/assets/iD/iD/traffico/signs/fr.json [deleted file]
vendor/assets/iD/iD/traffico/signs/gr.json [deleted file]
vendor/assets/iD/iD/traffico/signs/hu.json [deleted file]
vendor/assets/iD/iD/traffico/signs/it.json [deleted file]
vendor/assets/iD/iD/traffico/signs/lt.json [deleted file]
vendor/assets/iD/iD/traffico/signs/lu.json [deleted file]
vendor/assets/iD/iD/traffico/signs/lv.json [deleted file]
vendor/assets/iD/iD/traffico/signs/nl.json [deleted file]
vendor/assets/iD/iD/traffico/signs/no.json [deleted file]
vendor/assets/iD/iD/traffico/signs/pl.json [deleted file]
vendor/assets/iD/iD/traffico/signs/se.json [deleted file]
vendor/assets/iD/iD/traffico/signs/si.json [deleted file]
vendor/assets/iD/iD/traffico/signs/sk.json [deleted file]
vendor/assets/iD/iD/traffico/signs/uk.json [deleted file]
vendor/assets/iD/iD/traffico/signs/us.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/at-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/au-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/be-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/br-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/ca-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/ch-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/cz-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/de-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/dk-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/ee-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/es-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/fi-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/fr-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/gr-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/hu-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/it-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/lt-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/lu-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/lv-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/nl-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/no-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/pl-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/se-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/si-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/sk-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/uk-map.json [deleted file]
vendor/assets/iD/iD/traffico/string-maps/us-map.json [deleted file]
vendor/assets/iD/iD/traffico/stylesheets/examples.css [deleted file]
vendor/assets/iD/iD/traffico/stylesheets/traffico.css.erb [deleted file]
vendor/assets/iD/iD/traffico/transformations.json [deleted file]

index 797ec6189d977656f040440bea3dd13fbe779674..a63a0fc1f052da2f1bfb32d235356c409c572bc6 100644 (file)
@@ -2247,7 +2247,7 @@ a:visited, a {
 }
 
 a:hover {
 }
 
 a:hover {
-    color:#597be7;
+    color: #597be7;
 }
 
 /* Forms
 }
 
 /* Forms
@@ -2721,7 +2721,7 @@ button.save.has-count .count::before {
     position: absolute;
     right: 0;
     top: 0;
     position: absolute;
     right: 0;
     top: 0;
-    height: 59px;
+    height: 60px;
     z-index: 50;
 }
 
     z-index: 50;
 }
 
@@ -2732,6 +2732,7 @@ button.save.has-count .count::before {
     border-top: 1px solid #ccc;
     background-color: #fafafa;
     width: 100%;
     border-top: 1px solid #ccc;
     background-color: #fafafa;
     width: 100%;
+    z-index: 1;
 }
 
 .sidebar-component .body {
 }
 
 .sidebar-component .body {
@@ -4492,16 +4493,20 @@ div.full-screen > button:hover {
     border-radius: 4px 4px 0 0;
 }
 
     border-radius: 4px 4px 0 0;
 }
 
-.help-wrap .toc li:nth-last-child(2) a {
+.help-wrap .toc li:nth-last-child(3) a {
     border-bottom: 1px solid #CCC;
     border-radius: 0 0 4px 4px
 }
 
     border-bottom: 1px solid #CCC;
     border-radius: 0 0 4px 4px
 }
 
+.help-wrap .toc li.shortcuts a,
 .help-wrap .toc li.walkthrough a {
     overflow: hidden;
     margin-top: 10px;
     border-bottom: 1px solid #ccc;
     border-radius: 4px;
 .help-wrap .toc li.walkthrough a {
     overflow: hidden;
     margin-top: 10px;
     border-bottom: 1px solid #ccc;
     border-radius: 4px;
+}
+
+.help-wrap .toc li.walkthrough a {
     text-align: center;
 }
 
     text-align: center;
 }
 
@@ -5157,6 +5162,101 @@ img.tile-removing {
 }
 
 
 }
 
 
+/* Shortcuts Modal
+------------------------------------------------------- */
+.modal-shortcuts {
+    width: 90%;
+    max-width: 950px;
+}
+
+.modal-shortcuts .modal-section:last-child {
+    padding-top: 10px;
+}
+
+.modal-shortcuts .tabs-bar {
+    text-align: center;
+    padding-bottom: 5px;
+    font-size: 16px;
+    font-weight: bold;
+}
+
+.modal-shortcuts .tab {
+    display: inline-block;
+    padding: 5px 10px;
+    margin: 0 5px;
+    cursor: pointer;
+    color: #666;
+}
+.modal-shortcuts .tab.active {
+    color: #7092ff;
+}
+.modal-shortcuts .tab:hover {
+    color: #597be7;
+    background-color: #efefef;
+}
+
+.modal-shortcuts .shortcut-tab {
+    display: flex;
+    flex-flow: row wrap;
+}
+
+.modal-shortcuts .shortcut-column {
+    flex: 1 1 50%;
+    width: 50%;
+}
+
+.modal-shortcuts td {
+    padding-bottom: 5px;
+}
+
+.modal-shortcuts .shortcut-section {
+    padding: 20px 0 10px 0;
+}
+
+.modal-shortcuts .shortcut-keys {
+    padding-right: 10px;
+    color: #767676;
+    text-align: right;
+}
+[dir='rtl'] .modal-shortcuts .shortcut-keys {
+    padding-right: auto;
+    padding-left: 10px;
+    text-align: left;
+}
+
+.modal-shortcuts .shortcut-keys kbd {
+    display: inline-block;
+    text-align: center;
+    padding: 3px 5px;
+    font-size: 11px;
+    line-height: 12px;
+    min-width: 12px;
+    color: #555;
+    vertical-align: baseline;
+    background-color: #fcfcfc;
+    border: solid 1px #ccc;
+    margin: 0 2px;
+    border-bottom-color: #bbb;
+    border-radius: 3px;
+    box-shadow: inset 0 -1px 0 #bbb;
+}
+
+.modal-shortcuts .shortcut-keys svg.mouseclick use.left {
+    fill: rgba(112, 146, 255, 1);
+    color: rgba(112, 146, 255, 0);
+}
+.modal-shortcuts .shortcut-keys svg.mouseclick use.right {
+    fill: rgba(112, 146, 255, 0);
+    color: rgba(112, 146, 255, 1);
+}
+
+.modal-shortcuts .shortcut-keys .gesture {
+    color: #333;
+    padding: 3px;
+}
+
+
+
 /* Save Mode
 ------------------------------------------------------- */
 .mode-save a.user-info {
 /* Save Mode
 ------------------------------------------------------- */
 .mode-save a.user-info {
@@ -5512,6 +5612,9 @@ img.tile-removing {
 .map-control .tooltip {
     min-width: 160px;
 }
 .map-control .tooltip {
     min-width: 160px;
 }
+.map-control .shortcuts .tooltip {
+    max-width: 160px;
+}
 
 /* Move over tooltips that are near the edge of screen */
 .add-point .tooltip {
 
 /* Move over tooltips that are near the edge of screen */
 .add-point .tooltip {
@@ -6090,3 +6193,11 @@ li.hide + li.version .badge .tooltip .tooltip-arrow {
 [dir='rtl'] .spin-control button.increment{
   border-bottom-left-radius: 3px;
 }
 [dir='rtl'] .spin-control button.increment{
   border-bottom-left-radius: 3px;
 }
+/* modal */
+[dir='rtl'] .modal > button {
+    position: absolute;
+    left: 0;
+    right: unset;
+    top: 0;
+}
+
index 7aff0071b278fe1572e048bc66993887bcdb3614..a4e9ee923a7138e4d4bf9e36e4e68055e7f918a9 100644 (file)
@@ -18606,6 +18606,8 @@ var dataLocales = {"af":{"rtl":false},"ar":{"rtl":true},"ar-AA":{"rtl":true},"as
 
 var dataPhoneFormats = {"us":"+1-202-555-1234","ca":"+1-226-555-1234","bs":"+1-242-555-1234","bb":"+1-246-555-1234","ai":"+1-264-555-1234","ag":"+1-268-555-1234","vg":"+1-284-555-1234","vi":"+1-340-555-1234","ky":"+1-345-555-1234","bm":"+1-441-555-1234","gd":"+1-473-555-1234","tc":"+1-649-555-1234","ms":"+1-664-555-1234","mp":"+1-670-555-1234","gu":"+1-671-555-1234","as":"+1-684-555-1234","sx":"+1-721-555-1234","lc":"+1-758-555-1234","dm":"+1-767-555-1234","vc":"+1-784-555-1234","pr":"+1-787-555-1234","do":"+1-809-555-1234","tt":"+1-868-555-1234","kn":"+1-869-555-1234","jm":"+1-876-555-1234","za":"+27 11 907 1111","nl":"+31 42 123 4567","fr":"+33 1 23 45 67 89","es":"+34 989 12 34 56","pt":"+351 211 123456","ie":"+353 20 912 3456","fi":"+358 40 123 4567","hu":"+36 1 123 45 67","hr":"+385 01 123 4567","si":"+386 31 123 4567","it":"+39 01 123 456","va":"+39 01 123 456","gb":"+44 1632 961234","gg":"+44 1632 961234","im":"+44 1632 961234","je":"+44 1632 961234","se":"+46 31 123 4567","no":"+47 22 12 34 56","sj":"+47 22 12 34 56","pl":"+48 42 123 4567","de":"+49 89 1234567","br":"+55 11 0982 1098","ru":"+7 495 1234567","kz":"+7 495 1234567","vn":"+84 1 234 5678","hk":"+852 1234 5678","cn":"+86 10 12345678","tw":"+886 1 2345 6789","tr":"+90 312 123 4567","ua":"+380 44 123 4567"};
 
 
 var dataPhoneFormats = {"us":"+1-202-555-1234","ca":"+1-226-555-1234","bs":"+1-242-555-1234","bb":"+1-246-555-1234","ai":"+1-264-555-1234","ag":"+1-268-555-1234","vg":"+1-284-555-1234","vi":"+1-340-555-1234","ky":"+1-345-555-1234","bm":"+1-441-555-1234","gd":"+1-473-555-1234","tc":"+1-649-555-1234","ms":"+1-664-555-1234","mp":"+1-670-555-1234","gu":"+1-671-555-1234","as":"+1-684-555-1234","sx":"+1-721-555-1234","lc":"+1-758-555-1234","dm":"+1-767-555-1234","vc":"+1-784-555-1234","pr":"+1-787-555-1234","do":"+1-809-555-1234","tt":"+1-868-555-1234","kn":"+1-869-555-1234","jm":"+1-876-555-1234","za":"+27 11 907 1111","nl":"+31 42 123 4567","fr":"+33 1 23 45 67 89","es":"+34 989 12 34 56","pt":"+351 211 123456","ie":"+353 20 912 3456","fi":"+358 40 123 4567","hu":"+36 1 123 45 67","hr":"+385 01 123 4567","si":"+386 31 123 4567","it":"+39 01 123 456","va":"+39 01 123 456","gb":"+44 1632 961234","gg":"+44 1632 961234","im":"+44 1632 961234","je":"+44 1632 961234","se":"+46 31 123 4567","no":"+47 22 12 34 56","sj":"+47 22 12 34 56","pl":"+48 42 123 4567","de":"+49 89 1234567","br":"+55 11 0982 1098","ru":"+7 495 1234567","kz":"+7 495 1234567","vn":"+84 1 234 5678","hk":"+852 1234 5678","cn":"+86 10 12345678","tw":"+886 1 2345 6789","tr":"+90 312 123 4567","ua":"+380 44 123 4567"};
 
+var dataShortcuts = [{"tab":"browsing","text":"shortcuts.browsing.title","columns":[{"rows":[{"section":"navigation","text":"shortcuts.browsing.navigation.title"},{"shortcuts":["↓","↑","←","→"],"text":"shortcuts.browsing.navigation.pan","separator":","},{"modifiers":["⌘"],"shortcuts":["↓","↑","←","→"],"text":"shortcuts.browsing.navigation.pan_more","separator":","},{"shortcuts":["+","-"],"text":"shortcuts.browsing.navigation.zoom","separator":","},{"modifiers":["⌘"],"shortcuts":["+","-"],"text":"shortcuts.browsing.navigation.zoom_more","separator":","},{"section":"help","text":"shortcuts.browsing.help.title"},{"shortcuts":["H"],"text":"shortcuts.browsing.help.help"},{"shortcuts":["?"],"text":"shortcuts.browsing.help.keyboard"},{"section":"display_options","text":"shortcuts.browsing.display_options.title"},{"shortcuts":["B"],"text":"shortcuts.browsing.display_options.background"},{"modifiers":["⌘"],"shortcuts":["B"],"text":"shortcuts.browsing.display_options.background_switch"},{"shortcuts":["F"],"text":"shortcuts.browsing.display_options.map_data"},{"modifiers":["⌃","⌘"],"shortcuts":["F","F11"],"text":"shortcuts.browsing.display_options.fullscreen"},{"shortcuts":["W"],"text":"shortcuts.browsing.display_options.wireframe"},{"shortcuts":["/"],"text":"shortcuts.browsing.display_options.minimap"}]},{"rows":[{"section":"selecting","text":"shortcuts.browsing.selecting.title"},{"shortcuts":["Left-click"],"text":"shortcuts.browsing.selecting.select_one"},{"modifiers":["⇧"],"shortcuts":["Left-click"],"text":"shortcuts.browsing.selecting.select_multi"},{"modifiers":["⇧"],"shortcuts":["Left-click"],"gesture":"shortcuts.gesture.drag","text":"shortcuts.browsing.selecting.lasso"},{"shortcuts":[],"text":""},{"section":"with_selected","text":"shortcuts.browsing.with_selected.title"},{"shortcuts":["Right-click","shortcuts.key.space"],"text":"shortcuts.browsing.with_selected.edit_menu"},{"modifiers":["⌘"],"shortcuts":["I"],"text":"shortcuts.browsing.with_selected.infobox"},{"section":"vertex_selected","text":"shortcuts.browsing.vertex_selected.title"},{"shortcuts":["[","↖"],"text":"shortcuts.browsing.vertex_selected.previous"},{"shortcuts":["]","↘"],"text":"shortcuts.browsing.vertex_selected.next"},{"shortcuts":["{","⇞"],"text":"shortcuts.browsing.vertex_selected.first"},{"shortcuts":["}","⇟"],"text":"shortcuts.browsing.vertex_selected.last"},{"shortcuts":["\\","shortcuts.key.pause"],"text":"shortcuts.browsing.vertex_selected.change_parent"}]}]},{"tab":"editing","text":"shortcuts.editing.title","columns":[{"rows":[{"section":"drawing","text":"shortcuts.editing.drawing.title"},{"shortcuts":["1"],"text":"shortcuts.editing.drawing.add_point"},{"shortcuts":["2"],"text":"shortcuts.editing.drawing.add_line"},{"shortcuts":["3"],"text":"shortcuts.editing.drawing.add_area"},{"shortcuts":["shortcuts.key.space"],"text":"shortcuts.editing.drawing.place_point"},{"shortcuts":["⌥"],"text":"shortcuts.editing.drawing.disable_snap"},{"shortcuts":["↵","⎋"],"text":"shortcuts.editing.drawing.stop_line"},{"section":"commands","text":"shortcuts.editing.commands.title"},{"modifiers":["⌘"],"shortcuts":["C"],"text":"shortcuts.editing.commands.copy"},{"modifiers":["⌘"],"shortcuts":["V"],"text":"shortcuts.editing.commands.paste"},{"modifiers":["⌘"],"shortcuts":["Z"],"text":"shortcuts.editing.commands.undo"},{"modifiers":["⌘","⇧"],"shortcuts":["Z"],"text":"shortcuts.editing.commands.redo"},{"modifiers":["⌘"],"shortcuts":["S"],"text":"shortcuts.editing.commands.save"}]},{"rows":[{"section":"operations","text":"shortcuts.editing.operations.title"},{"shortcuts":["operations.continue.key"],"text":"shortcuts.editing.operations.continue_line"},{"shortcuts":["operations.merge.key"],"text":"shortcuts.editing.operations.merge"},{"shortcuts":["operations.disconnect.key"],"text":"shortcuts.editing.operations.disconnect"},{"shortcuts":["operations.split.key"],"text":"shortcuts.editing.operations.split"},{"shortcuts":["operations.reverse.key"],"text":"shortcuts.editing.operations.reverse"},{"shortcuts":["operations.move.key"],"text":"shortcuts.editing.operations.move"},{"shortcuts":["operations.rotate.key"],"text":"shortcuts.editing.operations.rotate"},{"shortcuts":["operations.orthogonalize.key"],"text":"shortcuts.editing.operations.orthogonalize"},{"shortcuts":["operations.circularize.key"],"text":"shortcuts.editing.operations.circularize"},{"shortcuts":["operations.reflect.key.long"],"text":"shortcuts.editing.operations.reflect_long"},{"shortcuts":["operations.reflect.key.short"],"text":"shortcuts.editing.operations.reflect_short"},{"modifiers":["⌘"],"shortcuts":["⌫"],"text":"shortcuts.editing.operations.delete"}]}]}];
+
 var type = "FeatureCollection";
 var features = [{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[1.97754,51.13111],[1.8457,63.45051],[-10.45898,57.01681],[-6.82251,55.26503],[-7.25583,55.06525],[-7.26546,55.0665],[-7.26992,55.06419],[-7.2725,55.06346],[-7.27818,55.05362],[-7.2893,55.04735],[-7.29939,55.0561],[-7.31835,55.04475],[-7.3447,55.05079],[-7.38831,55.02389],[-7.40547,55.00292],[-7.39157,54.99507],[-7.40075,54.98892],[-7.40706,54.98291],[-7.40363,54.97963],[-7.40633,54.97813],[-7.39835,54.97013],[-7.40745,54.96357],[-7.40178,54.95961],[-7.40727,54.95515],[-7.3944,54.94376],[-7.44444,54.93858],[-7.45216,54.89793],[-7.44204,54.87532],[-7.4713,54.83431],[-7.48092,54.83093],[-7.49216,54.82185],[-7.55121,54.79054],[-7.5443,54.78609],[-7.54958,54.75653],[-7.5349,54.74917],[-7.54881,54.74068],[-7.55941,54.74556],[-7.57894,54.74221],[-7.57507,54.7494],[-7.58606,54.75039],[-7.58872,54.74377],[-7.60031,54.74603],[-7.60632,54.74405],[-7.61662,54.74459],[-7.63593,54.75108],[-7.68854,54.72968],[-7.72064,54.72155],[-7.75094,54.70469],[-7.79094,54.71942],[-7.8051,54.71932],[-7.83497,54.73632],[-7.85419,54.72745],[-7.91496,54.67582],[-7.90174,54.66182],[-7.83832,54.63401],[-7.7433,54.6188],[-7.70863,54.63485],[-7.70682,54.6189],[-7.69386,54.6188],[-7.69631,54.61125],[-7.75845,54.59509],[-7.78708,54.58],[-7.79446,54.58141],[-7.79969,54.57704],[-7.79673,54.56915],[-7.8184,54.56315],[-7.83334,54.55227],[-7.82737,54.54299],[-7.85007,54.53363],[-7.90741,54.53722],[-7.93213,54.53388],[-8.00487,54.54568],[-8.03727,54.51162],[-8.04285,54.48759],[-8.08027,54.48829],[-8.09988,54.48395],[-8.09126,54.4765],[-8.111,54.47807],[-8.11512,54.46904],[-8.16542,54.46914],[-8.1776,54.46485],[-8.14293,54.45003],[-8.16284,54.4413],[-8.08731,54.4002],[-8.06062,54.37051],[-8.03289,54.35711],[-8.00054,54.34835],[-7.93333,54.30561],[-7.85849,54.29151],[-7.87067,54.28794],[-7.87265,54.26648],[-7.86123,54.25931],[-7.85917,54.21256],[-7.71043,54.20307],[-7.70193,54.20776],[-7.68828,54.202],[-7.67644,54.18906],[-7.66082,54.1871],[-7.62554,54.16545],[-7.62541,54.15319],[-7.61026,54.14353],[-7.57421,54.14142],[-7.57181,54.13287],[-7.56228,54.12704],[-7.51379,54.12998],[-7.47944,54.122],[-7.47169,54.12665],[-7.47075,54.13318],[-7.44684,54.15168],[-7.40792,54.156],[-7.42579,54.14092],[-7.41903,54.13629],[-7.3744,54.14172],[-7.37234,54.13881],[-7.39509,54.12624],[-7.39182,54.12017],[-7.36341,54.13157],[-7.34518,54.11577],[-7.32471,54.12123],[-7.32003,54.11379],[-7.3078,54.11718],[-7.30548,54.12347],[-7.31591,54.12697],[-7.31213,54.13162],[-7.3187,54.13411],[-7.31857,54.13745],[-7.32222,54.13836],[-7.32737,54.13544],[-7.3399,54.14585],[-7.30827,54.16716],[-7.30024,54.16625],[-7.29029,54.1715],[-7.28158,54.16839],[-7.2863,54.14919],[-7.29874,54.14904],[-7.30162,54.14411],[-7.28411,54.13971],[-7.29192,54.13071],[-7.29737,54.133],[-7.30883,54.13242],[-7.30333,54.12251],[-7.29218,54.11929],[-7.27844,54.12282],[-7.27707,54.12986],[-7.26613,54.13624],[-7.2566,54.16354],[-7.24015,54.17125],[-7.2575,54.17678],[-7.2581,54.19257],[-7.25179,54.19403],[-7.23608,54.1935],[-7.23338,54.19792],[-7.24317,54.20076],[-7.24892,54.1977],[-7.25183,54.20201],[-7.24119,54.20623],[-7.23094,54.20578],[-7.23269,54.20912],[-7.22188,54.21607],[-7.20643,54.2117],[-7.18506,54.22485],[-7.17055,54.21742],[-7.14721,54.22488],[-7.14633,54.23008],[-7.15051,54.23165],[-7.14613,54.23983],[-7.15802,54.24434],[-7.13985,54.25298],[-7.15255,54.26235],[-7.16064,54.27405],[-7.17991,54.27144],[-7.17201,54.28627],[-7.21252,54.2985],[-7.19888,54.31117],[-7.17918,54.30946],[-7.1812,54.3397],[-7.15339,54.33514],[-7.10253,54.35811],[-7.10811,54.36677],[-7.06927,54.3899],[-7.05593,54.41056],[-7.02898,54.42135],[-7.00198,54.40832],[-6.98683,54.40829],[-6.97562,54.40014],[-6.96774,54.40145],[-6.90682,54.36966],[-6.89772,54.35075],[-6.87527,54.33853],[-6.86512,54.32568],[-6.85163,54.29137],[-6.87452,54.28677],[-6.87791,54.27918],[-6.86673,54.27522],[-6.85177,54.26489],[-6.83693,54.26658],[-6.82165,54.24346],[-6.81633,54.22299],[-6.80045,54.22108],[-6.80122,54.21338],[-6.77599,54.19965],[-6.75573,54.1987],[-6.74316,54.18258],[-6.73406,54.18566],[-6.72445,54.18127],[-6.70295,54.20036],[-6.69166,54.20018],[-6.68673,54.19398],[-6.669,54.19584],[-6.65248,54.18102],[-6.6433,54.17801],[-6.63467,54.16449],[-6.63179,54.14766],[-6.64081,54.14238],[-6.63935,54.13599],[-6.66149,54.1205],[-6.6481,54.10153],[-6.66119,54.0934],[-6.66458,54.06629],[-6.64681,54.05873],[-6.62501,54.03737],[-6.59291,54.04755],[-6.58905,54.05808],[-6.5597,54.0481],[-6.52897,54.05888],[-6.50442,54.05566],[-6.47824,54.07004],[-6.47919,54.07762],[-6.43601,54.05959],[-6.36314,54.07057],[-6.36589,54.09338],[-6.36293,54.09758],[-6.37104,54.11497],[-6.3522,54.11084],[-6.34242,54.1114],[-6.33589,54.10833],[-6.33636,54.09469],[-6.31808,54.09096],[-6.30903,54.10463],[-6.29165,54.11235],[-6.28246,54.11145],[-6.26272,54.09786],[-5.35583,53.72597],[-7.0752,49.23912],[-1.83472,49.02346],[-2.12036,49.94415],[1.97754,51.13111]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.2,18.7],[-65,16.3],[-63.7,19.2],[-65.2,18.7]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-63,-50.5],[-55,-51],[-60,-54],[-63,-50.5]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-139.19952,60.08402],[-141,60.30621],[-141,76],[-169,68.63655],[-169,65.20147],[-180,61],[-180,-4],[-154,9],[-133.76404,54.54021],[-130.73868,54.71986],[-129.96277,55.29163],[-130.15228,55.7758],[-130.01787,55.90688],[-130.00362,56.00798],[-130.10284,56.12336],[-130.24498,56.09656],[-130.42625,56.14249],[-131.87439,56.79787],[-135.02884,59.56285],[-135.11759,59.62306],[-135.15827,59.6261],[-135.47928,59.79822],[-136.28677,59.57955],[-136.30531,59.46462],[-136.36836,59.44898],[-136.47697,59.46558],[-137.19727,59.01935],[-139.19952,60.08402]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.96064,48.99841],[-121.22623,49.00049],[-122.26513,49.00246],[-122.7565,49.00208],[-123.32218,49.00218],[-122.97821,48.76524],[-123.2666,48.69821],[-123.21991,48.21186],[-125.80444,48.60749],[-124.32129,31.54109],[-117.125,32.53429],[-116.82417,32.55996],[-115.88036,32.63735],[-115.49738,32.66486],[-114.71984,32.71877],[-114.7649,32.64602],[-114.80885,32.60959],[-114.81481,32.49451],[-112.81743,31.88004],[-111.07481,31.33224],[-109.56051,31.33402],[-108.20847,31.33384],[-108.20838,31.78363],[-106.52847,31.78391],[-106.52781,31.78086],[-106.52249,31.77501],[-106.51249,31.76933],[-106.50988,31.7612],[-106.50709,31.76123],[-106.48896,31.74806],[-106.48473,31.74769],[-106.4719,31.75101],[-106.46816,31.75897],[-106.45434,31.76466],[-106.45035,31.76426],[-106.43516,31.75492],[-106.41484,31.75101],[-106.37864,31.73021],[-106.37225,31.71174],[-106.34924,31.69633],[-106.33289,31.66178],[-106.3068,31.62459],[-106.28079,31.56179],[-106.24775,31.54226],[-106.2329,31.49982],[-106.2105,31.46857],[-106.08201,31.39863],[-106.00554,31.39233],[-105.76401,31.17051],[-105.58548,31.06117],[-105.56419,30.98526],[-104.99153,30.6639],[-104.97162,30.60896],[-104.90639,30.57822],[-104.83772,30.38117],[-104.70177,30.20567],[-104.68048,29.92399],[-104.57611,29.77838],[-104.51157,29.63674],[-104.39758,29.57047],[-104.39278,29.55293],[-104.05769,29.32173],[-103.79883,29.2581],[-103.78196,29.26555],[-103.76759,29.22799],[-103.14102,28.93666],[-102.86087,29.2217],[-102.65076,29.79418],[-101.41068,29.73457],[-101.26511,29.51372],[-101.05997,29.452],[-101.04083,29.38038],[-100.96303,29.34735],[-100.94406,29.34369],[-100.94071,29.33351],[-100.92775,29.32663],[-100.89814,29.30957],[-100.87818,29.28086],[-100.80076,29.2238],[-100.76437,29.15981],[-100.67047,29.08663],[-100.6412,28.91299],[-100.63236,28.90255],[-100.61296,28.89939],[-100.534,28.75622],[-100.51495,28.74531],[-100.50705,28.7143],[-100.51203,28.70666],[-100.51014,28.69127],[-100.50048,28.66186],[-100.45547,28.6381],[-100.44697,28.60743],[-100.35599,28.45239],[-100.34946,28.39653],[-100.29488,28.31315],[-100.29591,28.27324],[-100.17197,28.17493],[-99.93645,27.9568],[-99.87722,27.80173],[-99.79671,27.73338],[-99.772,27.72532],[-99.74556,27.69979],[-99.71947,27.65981],[-99.5957,27.59974],[-99.54094,27.60537],[-99.53055,27.57973],[-99.52034,27.55782],[-99.52802,27.49773],[-99.50141,27.49986],[-99.48755,27.49518],[-99.47897,27.48421],[-99.48661,27.46453],[-99.49534,27.44861],[-99.48927,27.40941],[-99.53957,27.31565],[-99.43588,27.19678],[-99.46404,27.01968],[-99.16698,26.56039],[-99.17474,26.53939],[-99.12698,26.51958],[-99.1135,26.42954],[-99.08355,26.39625],[-99.06007,26.39737],[-99.03634,26.41255],[-99.02042,26.40598],[-99.01291,26.39364],[-98.95686,26.38641],[-98.9566,26.37365],[-98.94523,26.36949],[-98.90013,26.36419],[-98.89905,26.35454],[-98.80305,26.36626],[-98.78254,26.30511],[-98.66667,26.23457],[-98.58496,26.24647],[-98.57951,26.23434],[-98.56519,26.23987],[-98.56294,26.22464],[-98.50599,26.20858],[-98.44806,26.21236],[-98.38617,26.15721],[-98.34176,26.15278],[-98.33579,26.1388],[-98.30626,26.10003],[-98.28841,26.10512],[-98.26524,26.0914],[-98.19898,26.06411],[-98.09577,26.05698],[-98.07568,26.06667],[-98.08302,26.03396],[-97.9771,26.04136],[-97.9532,26.06179],[-97.81643,26.04475],[-97.77017,26.02439],[-97.73884,26.02902],[-97.5289,25.90648],[-97.52151,25.88625],[-97.50615,25.89031],[-97.49851,25.89903],[-97.49637,25.89641],[-97.49748,25.88008],[-97.49422,25.87981],[-97.48847,25.88564],[-97.46409,25.88174],[-97.42607,25.842],[-97.36856,25.8396],[-97.26231,25.94724],[-80.81543,24.00633],[-66.87378,44.77794],[-67.16148,45.16715],[-67.2286,45.16739],[-67.26246,45.18797],[-67.28311,45.19175],[-67.28959,45.18784],[-67.29332,45.17568],[-67.29049,45.17317],[-67.3001,45.16776],[-67.3025,45.16122],[-67.29761,45.14766],[-67.33975,45.1255],[-67.40524,45.16122],[-67.40387,45.17139],[-67.4818,45.27682],[-67.42172,45.38543],[-67.45262,45.41008],[-67.50498,45.4889],[-67.41623,45.50105],[-67.42219,45.55661],[-67.42902,45.56833],[-67.42331,45.57154],[-67.42498,45.57836],[-67.45193,45.60323],[-67.77981,45.6738],[-67.79019,47.06776],[-67.88006,47.1067],[-67.91319,47.14793],[-67.92598,47.15418],[-67.95181,47.1875],[-68.02374,47.23915],[-68.13017,47.29309],[-68.17669,47.32893],[-68.24046,47.35354],[-68.32809,47.36005],[-68.36363,47.35476],[-68.38054,47.34167],[-68.38509,47.30321],[-68.37367,47.28796],[-68.4377,47.28232],[-68.47916,47.29623],[-68.51074,47.29885],[-68.54593,47.28441],[-68.58408,47.28482],[-68.59777,47.27134],[-68.59271,47.25762],[-68.61889,47.24148],[-68.68936,47.24125],[-68.71768,47.23676],[-68.80128,47.21423],[-68.89629,47.17676],[-69.05354,47.24847],[-69.04924,47.41798],[-69.22425,47.45961],[-69.99729,46.69558],[-70.0569,46.4149],[-70.25551,46.10871],[-70.29001,46.09431],[-70.39919,45.80667],[-70.83229,45.40062],[-70.80794,45.37878],[-70.82663,45.2367],[-70.87538,45.23453],[-70.92138,45.28099],[-70.90645,45.30918],[-71.0109,45.34798],[-71.08429,45.30556],[-71.1454,45.24226],[-71.20525,45.25278],[-71.28925,45.30097],[-71.41405,45.23513],[-71.43044,45.12381],[-71.49692,45.06991],[-71.50623,45.04878],[-71.49284,45.03629],[-71.50027,45.01372],[-71.79359,45.01075],[-72.08774,45.00581],[-72.14155,45.00568],[-72.15282,45.00609],[-72.17142,45.00584],[-72.25847,45.00436],[-72.38795,45.00626],[-72.4496,45.00863],[-72.5356,45.00936],[-72.66257,45.01523],[-72.82537,45.01642],[-73.08466,45.01561],[-73.45219,45.00875],[-74.14699,44.99145],[-74.33753,44.9923],[-74.50786,44.99798],[-74.66158,44.99949],[-74.71244,44.99734],[-74.75887,44.98708],[-74.76368,45.00632],[-74.78977,45.00365],[-74.82376,45.01773],[-74.94186,44.98229],[-75.30098,44.83883],[-75.30304,44.82836],[-75.59418,44.6457],[-75.97269,44.33502],[-75.97295,44.34595],[-76.00059,44.34797],[-76.17645,44.2865],[-76.18744,44.22158],[-76.88782,43.82759],[-79.16851,43.32168],[-79.05487,43.25371],[-79.05092,43.169],[-79.04603,43.16093],[-79.04208,43.13942],[-79.07002,43.12038],[-79.06015,43.114],[-79.0568,43.10474],[-79.0774,43.07861],[-78.9996,43.05484],[-79.02311,43.02071],[-79.02552,42.99473],[-78.96235,42.9573],[-78.91188,42.9426],[-78.90398,42.89181],[-82.42767,41.47978],[-83.14316,42.03807],[-83.12805,42.23843],[-83.09715,42.29052],[-83.07252,42.31515],[-82.94575,42.34332],[-82.59676,42.5479],[-82.51368,42.61785],[-82.5108,42.66464],[-82.4675,42.76415],[-82.48055,42.80573],[-82.45497,42.9284],[-82.41334,42.97099],[-82.42596,42.99536],[-82.15851,43.39507],[-83.53729,46.098],[-83.96301,46.05036],[-84.11021,46.23851],[-84.09794,46.25656],[-84.11613,46.26878],[-84.11905,46.31516],[-84.10721,46.3218],[-84.14394,46.41076],[-84.11682,46.51576],[-84.13536,46.53218],[-84.16162,46.5284],[-84.21621,46.53891],[-84.26994,46.49189],[-84.36092,46.50997],[-84.55284,46.4407],[-84.95178,46.77185],[-89.59179,48.00307],[-89.67547,48.00371],[-90.87204,48.25943],[-91.41312,48.06753],[-92.99377,48.62474],[-93.34877,48.62604],[-93.35529,48.61124],[-93.37074,48.60584],[-93.39812,48.60369],[-93.40542,48.61089],[-93.43846,48.59478],[-93.46859,48.59205],[-93.45735,48.56667],[-93.46533,48.54593],[-93.64763,48.51751],[-93.80625,48.51888],[-93.80642,48.58047],[-93.83328,48.62582],[-93.84865,48.63064],[-93.93388,48.6326],[-94.01327,48.64471],[-94.16176,48.64697],[-94.25025,48.65463],[-94.24931,48.67827],[-94.26046,48.69816],[-94.30578,48.71073],[-94.32758,48.70433],[-94.36123,48.70478],[-94.38406,48.71135],[-94.41629,48.71067],[-94.44294,48.69266],[-94.53615,48.7024],[-94.55031,48.71419],[-94.58894,48.71928],[-94.69425,48.77938],[-94.70129,48.83376],[-94.68996,48.83953],[-94.68395,48.99914],[-111.96064,48.99841]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[180,55],[170,53],[180,49],[180,55]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[143,22],[147,22],[147,12],[143,12],[143,22]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-171.5,-10],[-171,-15],[-167,-15],[-171.5,-10]]]}}];
 var dataImperial = {
 var type = "FeatureCollection";
 var features = [{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[1.97754,51.13111],[1.8457,63.45051],[-10.45898,57.01681],[-6.82251,55.26503],[-7.25583,55.06525],[-7.26546,55.0665],[-7.26992,55.06419],[-7.2725,55.06346],[-7.27818,55.05362],[-7.2893,55.04735],[-7.29939,55.0561],[-7.31835,55.04475],[-7.3447,55.05079],[-7.38831,55.02389],[-7.40547,55.00292],[-7.39157,54.99507],[-7.40075,54.98892],[-7.40706,54.98291],[-7.40363,54.97963],[-7.40633,54.97813],[-7.39835,54.97013],[-7.40745,54.96357],[-7.40178,54.95961],[-7.40727,54.95515],[-7.3944,54.94376],[-7.44444,54.93858],[-7.45216,54.89793],[-7.44204,54.87532],[-7.4713,54.83431],[-7.48092,54.83093],[-7.49216,54.82185],[-7.55121,54.79054],[-7.5443,54.78609],[-7.54958,54.75653],[-7.5349,54.74917],[-7.54881,54.74068],[-7.55941,54.74556],[-7.57894,54.74221],[-7.57507,54.7494],[-7.58606,54.75039],[-7.58872,54.74377],[-7.60031,54.74603],[-7.60632,54.74405],[-7.61662,54.74459],[-7.63593,54.75108],[-7.68854,54.72968],[-7.72064,54.72155],[-7.75094,54.70469],[-7.79094,54.71942],[-7.8051,54.71932],[-7.83497,54.73632],[-7.85419,54.72745],[-7.91496,54.67582],[-7.90174,54.66182],[-7.83832,54.63401],[-7.7433,54.6188],[-7.70863,54.63485],[-7.70682,54.6189],[-7.69386,54.6188],[-7.69631,54.61125],[-7.75845,54.59509],[-7.78708,54.58],[-7.79446,54.58141],[-7.79969,54.57704],[-7.79673,54.56915],[-7.8184,54.56315],[-7.83334,54.55227],[-7.82737,54.54299],[-7.85007,54.53363],[-7.90741,54.53722],[-7.93213,54.53388],[-8.00487,54.54568],[-8.03727,54.51162],[-8.04285,54.48759],[-8.08027,54.48829],[-8.09988,54.48395],[-8.09126,54.4765],[-8.111,54.47807],[-8.11512,54.46904],[-8.16542,54.46914],[-8.1776,54.46485],[-8.14293,54.45003],[-8.16284,54.4413],[-8.08731,54.4002],[-8.06062,54.37051],[-8.03289,54.35711],[-8.00054,54.34835],[-7.93333,54.30561],[-7.85849,54.29151],[-7.87067,54.28794],[-7.87265,54.26648],[-7.86123,54.25931],[-7.85917,54.21256],[-7.71043,54.20307],[-7.70193,54.20776],[-7.68828,54.202],[-7.67644,54.18906],[-7.66082,54.1871],[-7.62554,54.16545],[-7.62541,54.15319],[-7.61026,54.14353],[-7.57421,54.14142],[-7.57181,54.13287],[-7.56228,54.12704],[-7.51379,54.12998],[-7.47944,54.122],[-7.47169,54.12665],[-7.47075,54.13318],[-7.44684,54.15168],[-7.40792,54.156],[-7.42579,54.14092],[-7.41903,54.13629],[-7.3744,54.14172],[-7.37234,54.13881],[-7.39509,54.12624],[-7.39182,54.12017],[-7.36341,54.13157],[-7.34518,54.11577],[-7.32471,54.12123],[-7.32003,54.11379],[-7.3078,54.11718],[-7.30548,54.12347],[-7.31591,54.12697],[-7.31213,54.13162],[-7.3187,54.13411],[-7.31857,54.13745],[-7.32222,54.13836],[-7.32737,54.13544],[-7.3399,54.14585],[-7.30827,54.16716],[-7.30024,54.16625],[-7.29029,54.1715],[-7.28158,54.16839],[-7.2863,54.14919],[-7.29874,54.14904],[-7.30162,54.14411],[-7.28411,54.13971],[-7.29192,54.13071],[-7.29737,54.133],[-7.30883,54.13242],[-7.30333,54.12251],[-7.29218,54.11929],[-7.27844,54.12282],[-7.27707,54.12986],[-7.26613,54.13624],[-7.2566,54.16354],[-7.24015,54.17125],[-7.2575,54.17678],[-7.2581,54.19257],[-7.25179,54.19403],[-7.23608,54.1935],[-7.23338,54.19792],[-7.24317,54.20076],[-7.24892,54.1977],[-7.25183,54.20201],[-7.24119,54.20623],[-7.23094,54.20578],[-7.23269,54.20912],[-7.22188,54.21607],[-7.20643,54.2117],[-7.18506,54.22485],[-7.17055,54.21742],[-7.14721,54.22488],[-7.14633,54.23008],[-7.15051,54.23165],[-7.14613,54.23983],[-7.15802,54.24434],[-7.13985,54.25298],[-7.15255,54.26235],[-7.16064,54.27405],[-7.17991,54.27144],[-7.17201,54.28627],[-7.21252,54.2985],[-7.19888,54.31117],[-7.17918,54.30946],[-7.1812,54.3397],[-7.15339,54.33514],[-7.10253,54.35811],[-7.10811,54.36677],[-7.06927,54.3899],[-7.05593,54.41056],[-7.02898,54.42135],[-7.00198,54.40832],[-6.98683,54.40829],[-6.97562,54.40014],[-6.96774,54.40145],[-6.90682,54.36966],[-6.89772,54.35075],[-6.87527,54.33853],[-6.86512,54.32568],[-6.85163,54.29137],[-6.87452,54.28677],[-6.87791,54.27918],[-6.86673,54.27522],[-6.85177,54.26489],[-6.83693,54.26658],[-6.82165,54.24346],[-6.81633,54.22299],[-6.80045,54.22108],[-6.80122,54.21338],[-6.77599,54.19965],[-6.75573,54.1987],[-6.74316,54.18258],[-6.73406,54.18566],[-6.72445,54.18127],[-6.70295,54.20036],[-6.69166,54.20018],[-6.68673,54.19398],[-6.669,54.19584],[-6.65248,54.18102],[-6.6433,54.17801],[-6.63467,54.16449],[-6.63179,54.14766],[-6.64081,54.14238],[-6.63935,54.13599],[-6.66149,54.1205],[-6.6481,54.10153],[-6.66119,54.0934],[-6.66458,54.06629],[-6.64681,54.05873],[-6.62501,54.03737],[-6.59291,54.04755],[-6.58905,54.05808],[-6.5597,54.0481],[-6.52897,54.05888],[-6.50442,54.05566],[-6.47824,54.07004],[-6.47919,54.07762],[-6.43601,54.05959],[-6.36314,54.07057],[-6.36589,54.09338],[-6.36293,54.09758],[-6.37104,54.11497],[-6.3522,54.11084],[-6.34242,54.1114],[-6.33589,54.10833],[-6.33636,54.09469],[-6.31808,54.09096],[-6.30903,54.10463],[-6.29165,54.11235],[-6.28246,54.11145],[-6.26272,54.09786],[-5.35583,53.72597],[-7.0752,49.23912],[-1.83472,49.02346],[-2.12036,49.94415],[1.97754,51.13111]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-65.2,18.7],[-65,16.3],[-63.7,19.2],[-65.2,18.7]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-63,-50.5],[-55,-51],[-60,-54],[-63,-50.5]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-139.19952,60.08402],[-141,60.30621],[-141,76],[-169,68.63655],[-169,65.20147],[-180,61],[-180,-4],[-154,9],[-133.76404,54.54021],[-130.73868,54.71986],[-129.96277,55.29163],[-130.15228,55.7758],[-130.01787,55.90688],[-130.00362,56.00798],[-130.10284,56.12336],[-130.24498,56.09656],[-130.42625,56.14249],[-131.87439,56.79787],[-135.02884,59.56285],[-135.11759,59.62306],[-135.15827,59.6261],[-135.47928,59.79822],[-136.28677,59.57955],[-136.30531,59.46462],[-136.36836,59.44898],[-136.47697,59.46558],[-137.19727,59.01935],[-139.19952,60.08402]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-111.96064,48.99841],[-121.22623,49.00049],[-122.26513,49.00246],[-122.7565,49.00208],[-123.32218,49.00218],[-122.97821,48.76524],[-123.2666,48.69821],[-123.21991,48.21186],[-125.80444,48.60749],[-124.32129,31.54109],[-117.125,32.53429],[-116.82417,32.55996],[-115.88036,32.63735],[-115.49738,32.66486],[-114.71984,32.71877],[-114.7649,32.64602],[-114.80885,32.60959],[-114.81481,32.49451],[-112.81743,31.88004],[-111.07481,31.33224],[-109.56051,31.33402],[-108.20847,31.33384],[-108.20838,31.78363],[-106.52847,31.78391],[-106.52781,31.78086],[-106.52249,31.77501],[-106.51249,31.76933],[-106.50988,31.7612],[-106.50709,31.76123],[-106.48896,31.74806],[-106.48473,31.74769],[-106.4719,31.75101],[-106.46816,31.75897],[-106.45434,31.76466],[-106.45035,31.76426],[-106.43516,31.75492],[-106.41484,31.75101],[-106.37864,31.73021],[-106.37225,31.71174],[-106.34924,31.69633],[-106.33289,31.66178],[-106.3068,31.62459],[-106.28079,31.56179],[-106.24775,31.54226],[-106.2329,31.49982],[-106.2105,31.46857],[-106.08201,31.39863],[-106.00554,31.39233],[-105.76401,31.17051],[-105.58548,31.06117],[-105.56419,30.98526],[-104.99153,30.6639],[-104.97162,30.60896],[-104.90639,30.57822],[-104.83772,30.38117],[-104.70177,30.20567],[-104.68048,29.92399],[-104.57611,29.77838],[-104.51157,29.63674],[-104.39758,29.57047],[-104.39278,29.55293],[-104.05769,29.32173],[-103.79883,29.2581],[-103.78196,29.26555],[-103.76759,29.22799],[-103.14102,28.93666],[-102.86087,29.2217],[-102.65076,29.79418],[-101.41068,29.73457],[-101.26511,29.51372],[-101.05997,29.452],[-101.04083,29.38038],[-100.96303,29.34735],[-100.94406,29.34369],[-100.94071,29.33351],[-100.92775,29.32663],[-100.89814,29.30957],[-100.87818,29.28086],[-100.80076,29.2238],[-100.76437,29.15981],[-100.67047,29.08663],[-100.6412,28.91299],[-100.63236,28.90255],[-100.61296,28.89939],[-100.534,28.75622],[-100.51495,28.74531],[-100.50705,28.7143],[-100.51203,28.70666],[-100.51014,28.69127],[-100.50048,28.66186],[-100.45547,28.6381],[-100.44697,28.60743],[-100.35599,28.45239],[-100.34946,28.39653],[-100.29488,28.31315],[-100.29591,28.27324],[-100.17197,28.17493],[-99.93645,27.9568],[-99.87722,27.80173],[-99.79671,27.73338],[-99.772,27.72532],[-99.74556,27.69979],[-99.71947,27.65981],[-99.5957,27.59974],[-99.54094,27.60537],[-99.53055,27.57973],[-99.52034,27.55782],[-99.52802,27.49773],[-99.50141,27.49986],[-99.48755,27.49518],[-99.47897,27.48421],[-99.48661,27.46453],[-99.49534,27.44861],[-99.48927,27.40941],[-99.53957,27.31565],[-99.43588,27.19678],[-99.46404,27.01968],[-99.16698,26.56039],[-99.17474,26.53939],[-99.12698,26.51958],[-99.1135,26.42954],[-99.08355,26.39625],[-99.06007,26.39737],[-99.03634,26.41255],[-99.02042,26.40598],[-99.01291,26.39364],[-98.95686,26.38641],[-98.9566,26.37365],[-98.94523,26.36949],[-98.90013,26.36419],[-98.89905,26.35454],[-98.80305,26.36626],[-98.78254,26.30511],[-98.66667,26.23457],[-98.58496,26.24647],[-98.57951,26.23434],[-98.56519,26.23987],[-98.56294,26.22464],[-98.50599,26.20858],[-98.44806,26.21236],[-98.38617,26.15721],[-98.34176,26.15278],[-98.33579,26.1388],[-98.30626,26.10003],[-98.28841,26.10512],[-98.26524,26.0914],[-98.19898,26.06411],[-98.09577,26.05698],[-98.07568,26.06667],[-98.08302,26.03396],[-97.9771,26.04136],[-97.9532,26.06179],[-97.81643,26.04475],[-97.77017,26.02439],[-97.73884,26.02902],[-97.5289,25.90648],[-97.52151,25.88625],[-97.50615,25.89031],[-97.49851,25.89903],[-97.49637,25.89641],[-97.49748,25.88008],[-97.49422,25.87981],[-97.48847,25.88564],[-97.46409,25.88174],[-97.42607,25.842],[-97.36856,25.8396],[-97.26231,25.94724],[-80.81543,24.00633],[-66.87378,44.77794],[-67.16148,45.16715],[-67.2286,45.16739],[-67.26246,45.18797],[-67.28311,45.19175],[-67.28959,45.18784],[-67.29332,45.17568],[-67.29049,45.17317],[-67.3001,45.16776],[-67.3025,45.16122],[-67.29761,45.14766],[-67.33975,45.1255],[-67.40524,45.16122],[-67.40387,45.17139],[-67.4818,45.27682],[-67.42172,45.38543],[-67.45262,45.41008],[-67.50498,45.4889],[-67.41623,45.50105],[-67.42219,45.55661],[-67.42902,45.56833],[-67.42331,45.57154],[-67.42498,45.57836],[-67.45193,45.60323],[-67.77981,45.6738],[-67.79019,47.06776],[-67.88006,47.1067],[-67.91319,47.14793],[-67.92598,47.15418],[-67.95181,47.1875],[-68.02374,47.23915],[-68.13017,47.29309],[-68.17669,47.32893],[-68.24046,47.35354],[-68.32809,47.36005],[-68.36363,47.35476],[-68.38054,47.34167],[-68.38509,47.30321],[-68.37367,47.28796],[-68.4377,47.28232],[-68.47916,47.29623],[-68.51074,47.29885],[-68.54593,47.28441],[-68.58408,47.28482],[-68.59777,47.27134],[-68.59271,47.25762],[-68.61889,47.24148],[-68.68936,47.24125],[-68.71768,47.23676],[-68.80128,47.21423],[-68.89629,47.17676],[-69.05354,47.24847],[-69.04924,47.41798],[-69.22425,47.45961],[-69.99729,46.69558],[-70.0569,46.4149],[-70.25551,46.10871],[-70.29001,46.09431],[-70.39919,45.80667],[-70.83229,45.40062],[-70.80794,45.37878],[-70.82663,45.2367],[-70.87538,45.23453],[-70.92138,45.28099],[-70.90645,45.30918],[-71.0109,45.34798],[-71.08429,45.30556],[-71.1454,45.24226],[-71.20525,45.25278],[-71.28925,45.30097],[-71.41405,45.23513],[-71.43044,45.12381],[-71.49692,45.06991],[-71.50623,45.04878],[-71.49284,45.03629],[-71.50027,45.01372],[-71.79359,45.01075],[-72.08774,45.00581],[-72.14155,45.00568],[-72.15282,45.00609],[-72.17142,45.00584],[-72.25847,45.00436],[-72.38795,45.00626],[-72.4496,45.00863],[-72.5356,45.00936],[-72.66257,45.01523],[-72.82537,45.01642],[-73.08466,45.01561],[-73.45219,45.00875],[-74.14699,44.99145],[-74.33753,44.9923],[-74.50786,44.99798],[-74.66158,44.99949],[-74.71244,44.99734],[-74.75887,44.98708],[-74.76368,45.00632],[-74.78977,45.00365],[-74.82376,45.01773],[-74.94186,44.98229],[-75.30098,44.83883],[-75.30304,44.82836],[-75.59418,44.6457],[-75.97269,44.33502],[-75.97295,44.34595],[-76.00059,44.34797],[-76.17645,44.2865],[-76.18744,44.22158],[-76.88782,43.82759],[-79.16851,43.32168],[-79.05487,43.25371],[-79.05092,43.169],[-79.04603,43.16093],[-79.04208,43.13942],[-79.07002,43.12038],[-79.06015,43.114],[-79.0568,43.10474],[-79.0774,43.07861],[-78.9996,43.05484],[-79.02311,43.02071],[-79.02552,42.99473],[-78.96235,42.9573],[-78.91188,42.9426],[-78.90398,42.89181],[-82.42767,41.47978],[-83.14316,42.03807],[-83.12805,42.23843],[-83.09715,42.29052],[-83.07252,42.31515],[-82.94575,42.34332],[-82.59676,42.5479],[-82.51368,42.61785],[-82.5108,42.66464],[-82.4675,42.76415],[-82.48055,42.80573],[-82.45497,42.9284],[-82.41334,42.97099],[-82.42596,42.99536],[-82.15851,43.39507],[-83.53729,46.098],[-83.96301,46.05036],[-84.11021,46.23851],[-84.09794,46.25656],[-84.11613,46.26878],[-84.11905,46.31516],[-84.10721,46.3218],[-84.14394,46.41076],[-84.11682,46.51576],[-84.13536,46.53218],[-84.16162,46.5284],[-84.21621,46.53891],[-84.26994,46.49189],[-84.36092,46.50997],[-84.55284,46.4407],[-84.95178,46.77185],[-89.59179,48.00307],[-89.67547,48.00371],[-90.87204,48.25943],[-91.41312,48.06753],[-92.99377,48.62474],[-93.34877,48.62604],[-93.35529,48.61124],[-93.37074,48.60584],[-93.39812,48.60369],[-93.40542,48.61089],[-93.43846,48.59478],[-93.46859,48.59205],[-93.45735,48.56667],[-93.46533,48.54593],[-93.64763,48.51751],[-93.80625,48.51888],[-93.80642,48.58047],[-93.83328,48.62582],[-93.84865,48.63064],[-93.93388,48.6326],[-94.01327,48.64471],[-94.16176,48.64697],[-94.25025,48.65463],[-94.24931,48.67827],[-94.26046,48.69816],[-94.30578,48.71073],[-94.32758,48.70433],[-94.36123,48.70478],[-94.38406,48.71135],[-94.41629,48.71067],[-94.44294,48.69266],[-94.53615,48.7024],[-94.55031,48.71419],[-94.58894,48.71928],[-94.69425,48.77938],[-94.70129,48.83376],[-94.68996,48.83953],[-94.68395,48.99914],[-111.96064,48.99841]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[180,55],[170,53],[180,49],[180,55]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[143,22],[147,22],[147,12],[143,12],[143,22]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[-171.5,-10],[-171,-15],[-167,-15],[-171.5,-10]]]}}];
 var dataImperial = {
@@ -18620,17 +18622,17 @@ var dataDriveLeft = {
        features: features$1
 };
 
        features: features$1
 };
 
-var en = {"modes":{"add_area":{"title":"Area","description":"Add parks, buildings, lakes or other areas to the map.","tail":"Click on the map to start drawing an area, like a park, lake, or building."},"add_line":{"title":"Line","description":"Add highways, streets, pedestrian paths, canals or other lines to the map.","tail":"Click on the map to start drawing a road, path, or route."},"add_point":{"title":"Point","description":"Add restaurants, monuments, postal boxes or other points to the map.","tail":"Click on the map to add a point."},"browse":{"title":"Browse","description":"Pan and zoom the map."},"draw_area":{"tail":"Click to add nodes to your area. Click the first node to finish the area."},"draw_line":{"tail":"Click to add more nodes to the line. Click on other lines to connect to them, and double-click to end the line."}},"operations":{"add":{"annotation":{"point":"Added a point.","vertex":"Added a node to a way.","relation":"Added a relation."}},"start":{"annotation":{"line":"Started a line.","area":"Started an area."}},"continue":{"key":"A","title":"Continue","description":"Continue this line.","not_eligible":"No line can be continued here.","multiple":"Several lines can be continued here. To choose a line, press the Shift key and click on it to select it.","annotation":{"line":"Continued a line.","area":"Continued an area."}},"cancel_draw":{"annotation":"Canceled drawing."},"change_role":{"annotation":"Changed the role of a relation member."},"change_tags":{"annotation":"Changed tags."},"circularize":{"title":"Circularize","description":{"line":"Make this line circular.","area":"Make this area circular."},"key":"O","annotation":{"line":"Made a line circular.","area":"Made an area circular."},"not_closed":"This can't be made circular because it's not a loop.","too_large":"This can't be made circular because not enough of it is currently visible.","connected_to_hidden":"This can't be made circular because it is connected to a hidden feature."},"orthogonalize":{"title":"Square","description":{"line":"Square the corners of this line.","area":"Square the corners of this area."},"key":"S","annotation":{"line":"Squared the corners of a line.","area":"Squared the corners of an area."},"not_squarish":"This can't be made square because it is not squarish.","too_large":"This can't be made square because not enough of it is currently visible.","connected_to_hidden":"This can't be made square because it is connected to a hidden feature."},"straighten":{"title":"Straighten","description":"Straighten this line.","key":"S","annotation":"Straightened a line.","too_bendy":"This can't be straightened because it bends too much.","connected_to_hidden":"This line can't be straightened because it is connected to a hidden feature."},"delete":{"title":"Delete","description":{"single":"Delete this feature permanently.","multiple":"Delete these features permanently."},"annotation":{"point":"Deleted a point.","vertex":"Deleted a node from a way.","line":"Deleted a line.","area":"Deleted an area.","relation":"Deleted a relation.","multiple":"Deleted {n} features."},"too_large":{"single":"This feature can't be deleted because not enough of it is currently visible.","multiple":"These features can't be deleted because not enough of them are currently visible."},"incomplete_relation":{"single":"This feature can't be deleted because it hasn't been fully downloaded.","multiple":"These features can't be deleted because they haven't been fully downloaded."},"part_of_relation":{"single":"This feature can't be deleted because it is part of a larger relation. You must remove it from the relation first.","multiple":"These features can't be deleted because they are part of larger relations. You must remove them from the relations first."},"connected_to_hidden":{"single":"This feature can't be deleted because it is connected to a hidden feature.","multiple":"These features can't be deleted because some are connected to hidden features."}},"add_member":{"annotation":"Added a member to a relation."},"delete_member":{"annotation":"Removed a member from a relation."},"connect":{"annotation":{"point":"Connected a way to a point.","vertex":"Connected a way to another.","line":"Connected a way to a line.","area":"Connected a way to an area."}},"disconnect":{"title":"Disconnect","description":"Disconnect these lines/areas from each other.","key":"D","annotation":"Disconnected lines/areas.","not_connected":"There aren't enough lines/areas here to disconnect.","connected_to_hidden":"This can't be disconnected because it is connected to a hidden feature.","relation":"This can't be disconnected because it connects members of a relation."},"merge":{"title":"Merge","description":"Merge these features.","key":"C","annotation":"Merged {n} features.","not_eligible":"These features can't be merged.","not_adjacent":"These features can't be merged because their endpoints aren't connected.","restriction":"These features can't be merged because at least one is a member of a \"{relation}\" relation.","incomplete_relation":"These features can't be merged because at least one hasn't been fully downloaded.","conflicting_tags":"These features can't be merged because some of their tags have conflicting values."},"move":{"title":"Move","description":{"single":"Move this feature to a different location.","multiple":"Move these features to a different location."},"key":"M","annotation":{"point":"Moved a point.","vertex":"Moved a node in a way.","line":"Moved a line.","area":"Moved an area.","multiple":"Moved multiple features."},"incomplete_relation":{"single":"This feature can't be moved because it hasn't been fully downloaded.","multiple":"These features can't be moved because they haven't been fully downloaded."},"too_large":{"single":"This feature can't be moved because not enough of it is currently visible.","multiple":"These features can't be moved because not enough of them are currently visible."},"connected_to_hidden":{"single":"This feature can't be moved because it is connected to a hidden feature.","multiple":"These features can't be moved because some are connected to hidden features."}},"reflect":{"title":{"long":"Reflect Long","short":"Reflect Short"},"description":{"long":{"single":"Reflect this feature across its long axis.","multiple":"Reflect these features across their long axis."},"short":{"single":"Reflect this feature across its short axis.","multiple":"Reflect these features across their short axis."}},"key":{"long":"T","short":"Y"},"annotation":{"long":{"single":"Reflected a feature across its long axis.","multiple":"Reflected multiple features across their long axis."},"short":{"single":"Reflected a feature across its short axis.","multiple":"Reflected multiple features across their short axis."}},"incomplete_relation":{"single":"This feature can't be reflected because it hasn't been fully downloaded.","multiple":"These features can't be reflected because they haven't been fully downloaded."},"too_large":{"single":"This feature can't be reflected because not enough of it is currently visible.","multiple":"These features can't be reflected because not enough of them are currently visible."},"connected_to_hidden":{"single":"This feature can't be reflected because it is connected to a hidden feature.","multiple":"These features can't be reflected because some are connected to hidden features."}},"rotate":{"title":"Rotate","description":{"single":"Rotate this feature around its center point.","multiple":"Rotate these features around their center point."},"key":"R","annotation":{"line":"Rotated a line.","area":"Rotated an area.","multiple":"Rotated multiple features."},"incomplete_relation":{"single":"This feature can't be rotated because it hasn't been fully downloaded.","multiple":"These features can't be rotated because they haven't been fully downloaded."},"too_large":{"single":"This feature can't be rotated because not enough of it is currently visible.","multiple":"These features can't be rotated because not enough of them are currently visible."},"connected_to_hidden":{"single":"This feature can't be rotated because it is connected to a hidden feature.","multiple":"These features can't be rotated because some are connected to hidden features."}},"reverse":{"title":"Reverse","description":"Make this line go in the opposite direction.","key":"V","annotation":"Reversed a line."},"split":{"title":"Split","description":{"line":"Split this line into two at this node.","area":"Split the boundary of this area into two.","multiple":"Split the lines/area boundaries at this node into two."},"key":"X","annotation":{"line":"Split a line.","area":"Split an area boundary.","multiple":"Split {n} lines/area boundaries."},"not_eligible":"Lines can't be split at their beginning or end.","multiple_ways":"There are too many lines here to split.","connected_to_hidden":"This can't be split because it is connected to a hidden feature."},"restriction":{"help":{"select":"Click to select a road segment.","toggle":"Click to toggle turn restrictions.","toggle_on":"Click to add a \"{restriction}\" restriction.","toggle_off":"Click to remove the \"{restriction}\" restriction."},"annotation":{"create":"Added a turn restriction","delete":"Deleted a turn restriction"}}},"undo":{"tooltip":"Undo: {action}","nothing":"Nothing to undo."},"redo":{"tooltip":"Redo: {action}","nothing":"Nothing to redo."},"tooltip_keyhint":"Shortcut:","browser_notice":"This editor is supported in Firefox, Chrome, Safari, Opera, and Internet Explorer 11 and above. Please upgrade your browser or use Potlatch 2 to edit the map.","translate":{"translate":"Translate","localized_translation_label":"Multilingual name","localized_translation_language":"Choose language","localized_translation_name":"Name"},"zoom_in_edit":"Zoom in to Edit","login":"login","logout":"logout","loading_auth":"Connecting to OpenStreetMap...","report_a_bug":"Report a bug","help_translate":"Help translate","feature_info":{"hidden_warning":"{count} hidden features","hidden_details":"These features are currently hidden: {details}"},"status":{"error":"Unable to connect to API.","offline":"The API is offline. Please try editing later.","readonly":"The API is read-only. You will need to wait to save your changes.","rateLimit":"The API is limiting anonymous connections.  You can fix this by logging in."},"commit":{"title":"Upload to OpenStreetMap","description_placeholder":"Brief description of your contributions (required)","message_label":"Changeset Comment","upload_explanation":"The changes you upload will be visible on all maps that use OpenStreetMap data.","upload_explanation_with_user":"The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.","save":"Upload","cancel":"Cancel","changes":"{count} Changes","warnings":"Warnings","modified":"Modified","deleted":"Deleted","created":"Created","about_changeset_comments":"About changeset comments","about_changeset_comments_link":"//wiki.openstreetmap.org/wiki/Good_changeset_comments","google_warning":"You mentioned Google in this comment: remember that copying from Google Maps is strictly forbidden.","google_warning_link":"http://www.openstreetmap.org/copyright"},"contributors":{"list":"Edits by {users}","truncated_list":"Edits by {users} and {count} others"},"infobox":{"selected":"{n} selected","geometry":"Geometry","closed":"closed","center":"Center","perimeter":"Perimeter","length":"Length","area":"Area","centroid":"Centroid","location":"Location","metric":"Metric","imperial":"Imperial"},"geometry":{"point":"point","vertex":"vertex","line":"line","area":"area","relation":"relation"},"geocoder":{"search":"Search worldwide...","no_results_visible":"No results in visible map area","no_results_worldwide":"No results found"},"geolocate":{"title":"Show My Location","locating":"Locating, please wait..."},"inspector":{"no_documentation_combination":"There is no documentation available for this tag combination","no_documentation_key":"There is no documentation available for this key","documentation_redirect":"This documentation has been redirected to a new page","show_more":"Show More","view_on_osm":"View on openstreetmap.org","all_fields":"All fields","all_tags":"All tags","all_members":"All members","all_relations":"All relations","new_relation":"New relation...","role":"Role","choose":"Select feature type","results":"{n} results for {search}","reference":"View on OpenStreetMap Wiki","back_tooltip":"Change feature","remove":"Remove","search":"Search","multiselect":"Selected features","unknown":"Unknown","incomplete":"<not downloaded>","feature_list":"Search features","edit":"Edit feature","check":{"yes":"Yes","no":"No","reverser":"Change Direction"},"radio":{"structure":{"type":"Type","default":"Default","layer":"Layer"}},"add":"Add","none":"None","node":"Node","way":"Way","relation":"Relation","location":"Location","add_fields":"Add field:"},"background":{"title":"Background","description":"Background settings","percent_brightness":"{opacity}% brightness","none":"None","best_imagery":"Best known imagery source for this location","switch":"Switch back to this background","custom":"Custom","custom_button":"Edit custom background","custom_prompt":"Enter a tile URL template. Valid tokens are {zoom}, {x}, {y} for Z/X/Y scheme and {u} for quadtile scheme.","fix_misalignment":"Adjust imagery offset","imagery_source_faq":"Where does this imagery come from?","reset":"reset","offset":"Drag anywhere in the gray area below to adjust the imagery offset, or enter the offset values in meters.","minimap":{"description":"Minimap","tooltip":"Show a zoomed out map to help locate the area currently displayed."}},"map_data":{"title":"Map Data","description":"Map Data","data_layers":"Data Layers","fill_area":"Fill Areas","map_features":"Map Features","autohidden":"These features have been automatically hidden because too many would be shown on the screen.  You can zoom in to edit them."},"feature":{"points":{"description":"Points","tooltip":"Points of Interest"},"traffic_roads":{"description":"Traffic Roads","tooltip":"Highways, Streets, etc."},"service_roads":{"description":"Service Roads","tooltip":"Service Roads, Parking Aisles, Tracks, etc."},"paths":{"description":"Paths","tooltip":"Sidewalks, Foot Paths, Cycle Paths, etc."},"buildings":{"description":"Buildings","tooltip":"Buildings, Shelters, Garages, etc."},"landuse":{"description":"Landuse Features","tooltip":"Forests, Farmland, Parks, Residential, Commercial, etc."},"boundaries":{"description":"Boundaries","tooltip":"Administrative Boundaries"},"water":{"description":"Water Features","tooltip":"Rivers, Lakes, Ponds, Basins, etc."},"rail":{"description":"Rail Features","tooltip":"Railways"},"power":{"description":"Power Features","tooltip":"Power Lines, Power Plants, Substations, etc."},"past_future":{"description":"Past/Future","tooltip":"Proposed, Construction, Abandoned, Demolished, etc."},"others":{"description":"Others","tooltip":"Everything Else"}},"area_fill":{"wireframe":{"description":"No Fill (Wireframe)","tooltip":"Enabling wireframe mode makes it easy to see the background imagery."},"partial":{"description":"Partial Fill","tooltip":"Areas are drawn with fill only around their inner edges. (Recommended for beginner mappers)"},"full":{"description":"Full Fill","tooltip":"Areas are drawn fully filled."}},"restore":{"heading":"You have unsaved changes","description":"Do you wish to restore unsaved changes from a previous editing session?","restore":"Restore","reset":"Reset"},"save":{"title":"Save","help":"Review your changes and upload them to OpenStreetMap, making them visible to other users.","no_changes":"No changes to save.","error":"Errors occurred while trying to save","status_code":"Server returned status code {code}","unknown_error_details":"Please ensure you are connected to the internet.","uploading":"Uploading changes to OpenStreetMap...","unsaved_changes":"You have unsaved changes","conflict":{"header":"Resolve conflicting edits","count":"Conflict {num} of {total}","previous":"< Previous","next":"Next >","keep_local":"Keep mine","keep_remote":"Use theirs","restore":"Restore","delete":"Leave Deleted","download_changes":"Or download your changes.","done":"All conflicts resolved!","help":"Another user changed some of the same map features you changed.\nClick on each feature below for more details about the conflict, and choose whether to keep\nyour changes or the other user's changes.\n"}},"merge_remote_changes":{"conflict":{"deleted":"This feature has been deleted by {user}.","location":"This feature was moved by both you and {user}.","nodelist":"Nodes were changed by both you and {user}.","memberlist":"Relation members were changed by both you and {user}.","tags":"You changed the <b>{tag}</b> tag to \"{local}\" and {user} changed it to \"{remote}\"."}},"success":{"edited_osm":"Edited OSM!","just_edited":"You just edited OpenStreetMap!","view_on_osm":"View on OSM","facebook":"Share on Facebook","twitter":"Share on Twitter","google":"Share on Google+","help_html":"Your changes should appear in the \"Standard\" layer in a few minutes. Other layers, and certain features, may take longer.","help_link_text":"Details","help_link_url":"https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F"},"confirm":{"okay":"OK","cancel":"Cancel"},"splash":{"welcome":"Welcome to the iD OpenStreetMap editor","text":"iD is a friendly but powerful tool for contributing to the world's best free world map. This is version {version}. For more information see {website} and report bugs at {github}.","walkthrough":"Start the Walkthrough","start":"Edit Now"},"source_switch":{"live":"live","lose_changes":"You have unsaved changes. Switching the map server will discard them. Are you sure you want to switch servers?","dev":"dev"},"version":{"whats_new":"What's new in iD {version}"},"tag_reference":{"description":"Description","on_wiki":"{tag} on wiki.osm.org","used_with":"used with {type}"},"validations":{"disconnected_highway":"Disconnected highway","disconnected_highway_tooltip":"Roads should be connected to other roads or building entrances.","old_multipolygon":"Multipolygon tags on outer way","old_multipolygon_tooltip":"This style of multipolygon is deprecated. Please assign the tags to the parent multipolygon instead of the outer way.","untagged_point":"Untagged point","untagged_point_tooltip":"Select a feature type that describes what this point is.","untagged_line":"Untagged line","untagged_line_tooltip":"Select a feature type that describes what this line is.","untagged_area":"Untagged area","untagged_area_tooltip":"Select a feature type that describes what this area is.","untagged_relation":"Untagged relation","untagged_relation_tooltip":"Select a feature type that describes what this relation is.","many_deletions":"You're deleting {n} features. Are you sure you want to do this? This will delete them from the map that everyone else sees on openstreetmap.org.","tag_suggests_area":"The tag {tag} suggests line should be area, but it is not an area","deprecated_tags":"Deprecated tags: {tags}"},"zoom":{"in":"Zoom In","out":"Zoom Out"},"cannot_zoom":"Cannot zoom out further in current mode.","full_screen":"Toggle Full Screen","gpx":{"local_layer":"Local file","drag_drop":"Drag and drop a .gpx, .geojson or .kml file on the page, or click the button to the right to browse","zoom":"Zoom to layer","browse":"Browse for a file"},"mapillary_images":{"tooltip":"Street-level photos from Mapillary","title":"Photo Overlay (Mapillary)"},"mapillary_signs":{"tooltip":"Traffic signs from Mapillary (must enable Photo Overlay)","title":"Traffic Sign Overlay (Mapillary)"},"mapillary":{"view_on_mapillary":"View this image on Mapillary"},"help":{"title":"Help","help":"# Help\n\nThis is an editor for [OpenStreetMap](http://www.openstreetmap.org/), the\nfree and editable map of the world. You can use it to add and update\ndata in your area, making an open-source and open-data map of the world\nbetter for everyone.\n\nEdits that you make on this map will be visible to everyone who uses\nOpenStreetMap. In order to make an edit, you'll need to\n[log in](https://www.openstreetmap.org/login).\n\nThe [iD editor](http://ideditor.com/) is a collaborative project with [source\ncode available on GitHub](https://github.com/openstreetmap/iD).\n","editing_saving":"# Editing & Saving\n\nThis editor is designed to work primarily online, and you're accessing\nit through a website right now.\n\n### Selecting Features\n\nTo select a map feature, like a road or point of interest, click\non it on the map. This will highlight the selected feature, open a panel with\ndetails about it, and show a menu of things you can do with the feature.\n\nTo select multiple features, hold down the 'Shift' key. Then either click\non the features you want to select, or drag on the map to draw a rectangle.\nThis will draw a box and select all the points within it.\n\n### Saving Edits\n\nWhen you make changes like editing roads, buildings, and places, these are\nstored locally until you save them to the server. Don't worry if you make\na mistake - you can undo changes by clicking the undo button, and redo\nchanges by clicking the redo button.\n\nClick 'Save' to finish a group of edits - for instance, if you've completed\nan area of town and would like to start on a new area. You'll have a chance\nto review what you've done, and the editor supplies helpful suggestions\nand warnings if something doesn't seem right about the changes.\n\nIf everything looks good, you can enter a short comment explaining the change\nyou made, and click 'Save' again to post the changes\nto [OpenStreetMap.org](http://www.openstreetmap.org/), where they are visible\nto all other users and available for others to build and improve upon.\n\nIf you can't finish your edits in one sitting, you can leave the editor\nwindow and come back (on the same browser and computer), and the\neditor application will offer to restore your work.\n\n### Using the editor\n\nA list of available keyboard shortcuts can be found [here](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n","roads":"# Roads\n\nYou can create, fix, and delete roads with this editor. Roads can be all\nkinds: paths, highways, trails, cycleways, and more - any often-crossed\nsegment should be mappable.\n\n### Selecting\n\nClick on a road to select it. An outline should become visible, along\nwith a small tools menu on the map and a sidebar showing more information\nabout the road.\n\n### Modifying\n\nOften you'll see roads that aren't aligned to the imagery behind them\nor to a GPS track. You can adjust these roads so they are in the correct\nplace.\n\nFirst click on the road you want to change. This will highlight it and show\ncontrol points along it that you can drag to better locations. If\nyou want to add new control points for more detail, double-click a part\nof the road without a node, and one will be added.\n\nIf the road connects to another road, but doesn't properly connect on\nthe map, you can drag one of its control points onto the other road in\norder to join them. Having roads connect is important for the map\nand essential for providing driving directions.\n\nYou can also click the 'Move' tool or press the `M` shortcut key to move the entire road at\none time, and then click again to save that movement.\n\n### Deleting\n\nIf a road is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.\n\nYou can delete a road by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.\n\n### Creating\n\nFound somewhere there should be a road but there isn't? Click the 'Line'\nicon in the top-left of the editor or press the shortcut key `2` to start drawing\na line.\n\nClick on the start of the road on the map to start drawing. If the road\nbranches off from an existing road, start by clicking on the place where they connect.\n\nThen click on points along the road so that it follows the right path, according\nto satellite imagery or GPS. If the road you are drawing crosses another road, connect\nit by clicking on the intersection point. When you're done drawing, double-click\nor press 'Return' or 'Enter' on your keyboard.\n","gps":"# GPS\n\nCollected GPS traces are one valuable source of data for OpenStreetMap. This editor\nsupports local traces - `.gpx` files on your local computer. You can collect\nthis kind of GPS trace with a number of smartphone applications as well as\npersonal GPS hardware.\n\nFor information on how to perform a GPS survey, read\n[Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).\n\nTo use a GPX track for mapping, drag and drop the GPX file onto the map\neditor. If it's recognized, it will be added to the map as a bright purple\nline. Click on the 'Map Data' menu on the right side to enable,\ndisable, or zoom to this new GPX-powered layer.\n\nThe GPX track isn't directly uploaded to OpenStreetMap - the best way to\nuse it is to draw on the map, using it as a guide for the new features that\nyou add, and also to [upload it to OpenStreetMap](http://www.openstreetmap.org/trace/create)\nfor other users to use.\n","imagery":"# Imagery\n\nAerial imagery is an important resource for mapping. A combination of\nairplane flyovers, satellite views, and freely-compiled sources are available\nin the editor under the 'Background Settings' menu on the right.\n\nBy default a [Bing Maps](http://www.bing.com/maps/) satellite layer is\npresented in the editor, but as you pan and zoom the map to new geographical\nareas, new sources will become available. Some countries, like the United\nStates, France, and Denmark have very high-quality imagery available for some areas.\n\nImagery is sometimes offset from the map data because of a mistake on the\nimagery provider's side. If you see a lot of roads shifted from the background,\ndon't immediately move them all to match the background. Instead you can adjust\nthe imagery so that it matches the existing data by clicking 'Fix alignment' at\nthe bottom of the Background Settings UI.\n","addresses":"# Addresses\n\nAddresses are some of the most useful information for the map.\n\nAlthough addresses are often represented as parts of streets, in OpenStreetMap\nthey're recorded as attributes of buildings and places along streets.\n\nYou can add address information to places mapped as building outlines\nas well as those mapped as single points. The optimal source of address\ndata is from an on-the-ground survey or personal knowledge - as with any\nother feature, copying from commercial sources like Google Maps is strictly\nforbidden.\n","inspector":"# Using the Inspector\n\nThe inspector is the section on the left side of the page that allows you to\nedit the details of the selected feature.\n\n### Selecting a Feature Type\n\nAfter you add a point, line, or area, you can choose what type of feature it\nis, like whether it's a highway or residential road, supermarket or cafe.\nThe inspector will display buttons for common feature types, and you can\nfind others by typing what you're looking for in the search box.\n\nClick the 'i' in the bottom-right-hand corner of a feature type button to\nlearn more about it. Click a button to choose that type.\n\n### Using Forms and Editing Tags\n\nAfter you choose a feature type, or when you select a feature that already\nhas a type assigned, the inspector will display fields with details about\nthe feature like its name and address.\n\nBelow the fields you see, you can click the 'Add field' dropdown to add\nother details, like a Wikipedia link, wheelchair access, and more.\n\nAt the bottom of the inspector, click 'Additional tags' to add arbitrary\nother tags to the element. [Taginfo](http://taginfo.openstreetmap.org/) is a\ngreat resource for learn more about popular tag combinations.\n\nChanges you make in the inspector are automatically applied to the map.\nYou can undo them at any time by clicking the 'Undo' button.\n","buildings":"# Buildings\n\nOpenStreetMap is the world's largest database of buildings. You can create\nand improve this database.\n\n### Selecting\n\nYou can select a building by clicking on its border. This will highlight the\nbuilding and open a small tools menu and a sidebar showing more information\nabout the building.\n\n### Modifying\n\nSometimes buildings are incorrectly placed or have incorrect tags.\n\nTo move an entire building, select it, then click the 'Move' tool. Move your\nmouse to shift the building, and click when it's correctly placed.\n\nTo fix the specific shape of a building, click and drag the nodes that form\nits border into better places.\n\n### Creating\n\nOne of the main questions around adding buildings to the map is that\nOpenStreetMap records buildings both as shapes and points. The rule of thumb\nis to _map a building as a shape whenever possible_, and map companies, homes,\namenities, and other things that operate out of buildings as points placed\nwithin the building shape.\n\nStart drawing a building as a shape by clicking the 'Area' button in the top\nleft of the interface, and end it either by pressing 'Return' on your keyboard\nor clicking on the first node drawn to close the shape.\n\n### Deleting\n\nIf a building is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the building could simply be newly built.\n\nYou can delete a building by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.\n","relations":"# Relations\n\nA relation is a special type of feature in OpenStreetMap that groups together\nother features. For example, two common types of relations are *route relations*,\nwhich group together sections of road that belong to a specific freeway or\nhighway, and *multipolygons*, which group together several lines that define\na complex area (one with several pieces or holes in it like a donut).\n\nThe group of features in a relation are called *members*. In the sidebar, you can\nsee which relations a feature is a member of, and click on a relation there\nto select the it. When the relation is selected, you can see all of its\nmembers listed in the sidebar and highlighted on the map.\n\nFor the most part, iD will take care of maintaining relations automatically\nwhile you edit. The main thing you should be aware of is that if you delete a\nsection of road to redraw it more accurately, you should make sure that the\nnew section is a member of the same relations as the original.\n\n## Editing Relations\n\nIf you want to edit relations, here are the basics.\n\nTo add a feature to a relation, select the feature, click the \"+\" button in the\n\"All relations\" section of the sidebar, and select or type the name of the relation.\n\nTo create a new relation, select the first feature that should be a member,\nclick the \"+\" button in the \"All relations\" section, and select \"New relation...\".\n\nTo remove a feature from a relation, select the feature and click the trash\nbutton next to the relation you want to remove it from.\n\nYou can create multipolygons with holes using the \"Merge\" tool. Draw two areas (inner\nand outer), hold the Shift key and click on each of them to select them both, and then\nclick the \"Merge\" (+) button.\n"},"intro":{"done":"done","ok":"OK","graph":{"block_number":"<value for addr:block_number>","city":"Three Rivers","county":"<value for addr:county>","district":"<value for addr:district>","hamlet":"<value for addr:hamlet>","neighbourhood":"<value for addr:neighbourhood>","postcode":"49093","province":"<value for addr:province>","quarter":"<value for addr:quarter>","state":"MI","subdistrict":"<value for addr:subdistrict>","suburb":"<value for addr:suburb>","countrycode":"us","name":{"1st-avenue":"1st Avenue","2nd-avenue":"2nd Avenue","4th-avenue":"4th Avenue","5th-avenue":"5th Avenue","6th-avenue":"6th Avenue","6th-street":"6th Street","7th-avenue":"7th Avenue","8th-avenue":"8th Avenue","9th-avenue":"9th Avenue","10th-avenue":"10th Avenue","11th-avenue":"11th Avenue","12th-avenue":"12th Avenue","access-point-employment":"Access Point Employment","adams-street":"Adams Street","andrews-elementary-school":"Andrews Elementary School","andrews-street":"Andrews Street","armitage-street":"Armitage Street","barrows-school":"Barrows School","battle-street":"Battle Street","bennett-street":"Bennett Street","bowman-park":"Bowman Park","collins-drive":"Collins Drive","conrail-railroad":"Conrail Railroad","conservation-park":"Conservation Park","constantine-street":"Constantine Street","cushman-street":"Cushman Street","dollar-tree":"Dollar Tree","douglas-avenue":"Douglas Avenue","east-street":"East Street","elm-street":"Elm Street","flower-street":"Flower Street","foster-street":"Foster Street","french-street":"French Street","garden-street":"Garden Street","gem-pawnbroker":"Gem Pawnbroker","golden-finch-framing":"Golden Finch Framing","grant-avenue":"Grant Avenue","hoffman-pond":"Hoffman Pond","hoffman-street":"Hoffman Street","hook-avenue":"Hook Avenue","jefferson-street":"Jefferson Street","kelsey-street":"Kelsey Street","lafayette-park":"LaFayette Park","las-coffee-cafe":"L.A.'s Coffee Cafe","lincoln-avenue":"Lincoln Avenue","lowrys-books":"Lowry's Books","lynns-garage":"Lynn's Garage","main-street-barbell":"Main Street Barbell","main-street-cafe":"Main Street Cafe","main-street-fitness":"Main Street Fitness","main-street":"Main Street","maple-street":"Maple Street","marina-park":"Marina Park","market-street":"Market Street","memory-isle-park":"Memory Isle Park","memory-isle":"Memory Isle","michigan-avenue":"Michigan Avenue","middle-street":"Middle Street","millard-street":"Millard Street","moore-street":"Moore Street","morris-avenue":"Morris Avenue","mural-mall":"Mural Mall","paisanos-bar-and-grill":"Paisano's Bar and Grill","paisley-emporium":"Paisley Emporium","paparazzi-tattoo":"Paparazzi Tattoo","pealer-street":"Pealer Street","pine-street":"Pine Street","pizza-hut":"Pizza Hut","portage-avenue":"Portage Avenue","portage-river":"Portage River","preferred-insurance-services":"Preferred Insurance Services","railroad-drive":"Railroad Drive","river-city-appliance":"River City Appliance","river-drive":"River Drive","river-road":"River Road","river-street":"River Street","riverside-cemetery":"Riverside Cemetery","riverwalk-trail":"Riverwalk Trail","riviera-theatre":"Riviera Theatre","rocky-river":"Rocky River","saint-joseph-river":"Saint Joseph River","scidmore-park-petting-zoo":"Scidmore Park Petting Zoo","scidmore-park":"Scidmore Park","scouter-park":"Scouter Park","sherwin-williams":"Sherwin-Williams","south-street":"South Street","southern-michigan-bank":"Southern Michigan Bank","spring-street":"Spring Street","sturgeon-river-road":"Sturgeon River Road","three-rivers-city-hall":"Three Rivers City Hall","three-rivers-elementary-school":"Three Rivers Elementary School","three-rivers-fire-department":"Three Rivers Fire Department","three-rivers-high-school":"Three Rivers High School","three-rivers-middle-school":"Three Rivers Middle School","three-rivers-municipal-airport":"Three Rivers Municipal Airport","three-rivers-post-office":"Three Rivers Post Office","three-rivers-public-library":"Three Rivers Public Library","three-rivers":"Three Rivers","unique-jewelry":"Unique Jewelry","walnut-street":"Walnut Street","washington-street":"Washington Street","water-street":"Water Street","west-street":"West Street","wheeler-street":"Wheeler Street","william-towing":"William Towing","willow-drive":"Willow Drive","wood-street":"Wood Street","world-fare":"World Fare"}},"welcome":{"title":"Welcome","welcome":"Welcome! This walkthrough will teach you the basics of editing on OpenStreetMap.","practice":"All of the data in this walkthrough is just for practicing, and any edits that you make in the walkthrough will not be saved.","words":"This walkthrough will introduce some new words and concepts. When we introduce a new word, we'll use *italics*.","mouse":"You can use any input device to edit the map, but this walkthrough assumes you have a mouse with left and right buttons. **If you want to attach a mouse, do so now, then click OK.**","leftclick":"When this tutorial asks you to click or double-click, we mean with the left button. On a trackpad it might be a single-click or single-finger tap. **Left-click {num} times.**","rightclick":"Sometimes we'll also ask you to right-click. This might be the same as control-click, or two-finger tap on a trackpad. Your keyboard might even have a 'menu' key that works like right-click. **Right-click {num} times.**","chapters":"So far, so good! You can use the buttons below to skip chapters at any time or to restart a chapter if you get stuck. Let's begin! **Click '{next}' to continue.**"},"navigation":{"title":"Navigation","drag":"The main map area shows OpenStreetMap data on top of a background.{br}You can drag the map by pressing and holding the left mouse button while moving the mouse around. You can also use the arrow keys on your keyboard. **Drag the map!**","zoom":"You can zoom in or out by scrolling with the mouse wheel or trackpad, or by clicking the {plus} / {minus} buttons. **Zoom the map!**","features":"We use the word *features* to describe the things that appear on the map. Anything in the real world can be mapped as a feature on OpenStreetMap.","points_lines_areas":"Map features are represented using *points, lines, or areas.*","nodes_ways":"In OpenStreetMap, points are sometimes called *nodes*, and lines and areas are sometimes called *ways*.","click_townhall":"All features on the map can be selected by clicking on them. **Click on the point to select it.**","selected_townhall":"Great! The point is now selected. Selected features are drawn with a pulsing glow.","editor_townhall":"When a feature is selected, the *feature editor* is displayed alongside the map.","preset_townhall":"The top part of the feature editor shows the feature's type. This point is a {preset}.","fields_townhall":"The middle part of the feature editor contains *fields* showing the feature's attributes, such as its name and address.","close_townhall":"**Close the feature editor by hitting escape or pressing the {button} button in the upper corner.**","search_street":"You can also search for features in the current view, or worldwide. **Search for '{name}'.**","choose_street":"**Choose {name} from the list to select it.**","selected_street":"Great! {name} is now selected.","editor_street":"The fields shown for a street are different than the fields that were shown for the town hall.{br}For this selected street, the feature editor shows fields like '{field1}' and '{field2}'. **Close the feature editor by hitting escape or pressing the {button} button.**","play":"Try moving the map and clicking on some other features to see what kinds of things can be added to OpenStreetMap. **When you are ready to continue to the next chapter, click '{next}'.**"},"points":{"title":"Points","add_point":"*Points* can be used to represent features such as shops, restaurants, and monuments.{br}They mark a specific location, and describe what's there. **Click the {button} Point button to add a new point.**","place_point":"To place the new point on the map, position your mouse cursor where the point should go, then left-click or press the spacebar. **Move the mouse pointer over this building, then left-click or press the spacebar.**","search_cafe":"There are many different features that can be represented by points. The point you just added is a cafe. **Search for '{preset}'.**","choose_cafe":"**Choose {preset} from the list.**","feature_editor":"The point is now marked as a cafe. Using the feature editor, we can add more information about the cafe.","add_name":"In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.{br}Let's pretend that you have local knowledge of this cafe, and you know its name. **Add a name for the cafe.**","add_close":"The feature editor will remember all of your changes automatically. **When you are finished adding the name, hit escape, enter, or click the {button} button to close the feature editor.**","reselect":"Often points will already exist, but have mistakes or be incomplete. We can edit existing points. **Click to select the cafe you just created.**","update":"Let's fill in some more details for this cafe. You can change its name, add a cuisine, or add an address. **Change the cafe details.**","update_close":"**When you are finished updating the cafe, hit escape, enter, or click the {button} button to close the feature editor.**","rightclick":"You can right-click on any feature to see the *edit menu*, which shows a list of editing operations that can be performed. **Right-click to select the point you created and show the edit menu.**","delete":"It's OK to delete features that don't exist in the real world.{br}Deleting a feature from OpenStreetMap removes it from the map that everyone uses, so you should make sure a feature is really gone before you delete it. **Click on the {button} button to delete the point.**","undo":"You can always undo any changes up until you save your edits to OpenStreetMap. **Click on the {button} button to undo the delete and get the point back.**","play":"Now that you know how to create and edit points, try creating a few more points for practice! **When you are ready to continue to the next chapter, click '{next}'.**"},"areas":{"title":"Areas","add_playground":"*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas.{br}They can be also be used for more detailed mapping of many features you might normally map as points. **Click the {button} Area button to add a new area.**","start_playground":"Let's add this playground to the map by drawing an area. Areas are drawn by placing *nodes* along the outer edge of the feature. **Click or press spacebar to place a starting node on one of the corners of the playground.**","continue_playground":"Continue drawing the area by placing more nodes along the playground's edge. It is OK to connect the area to the existing walking paths.{br}Tip: You can hold down the Alt key to prevent nodes from connecting to other features. **Continue drawing an area for the playground.**","finish_playground":"Finish the area by pressing enter, or clicking again on either the first or last node. **Finish drawing an area for the playground.**","search_playground":"**Search for '{preset}'.**","choose_playground":"**Choose {preset} from the list.**","add_field":"This playground doesn't have an official name, so we won't add anything in the Name field.{br}Instead let's add some additional details about the playground to the Description field. **Open the Add Field list.**","choose_field":"**Choose {field} from the list.**","retry_add_field":"You didn't select the {field} field. Let's try again.","describe_playground":"**Add a description, then click the {button} button to close the feature editor.**","play":"Good job! Try drawing a few more areas, and see what other kinds of area features you can add to OpenStreetMap. **When you are ready to continue to the next chapter, click '{next}'.**"},"lines":{"title":"Lines","add_line":"*Lines* are used to represent features such as roads, railroads, and rivers. **Click the {button} Line button to add a new line.**","start_line":"Here is a road that is missing. Let's add it!{br}In OpenStreetMap, lines should be drawn down the center of the road. You can drag and zoom the map while drawing if necessary. **Start a new line by clicking at the top end of this missing road.**","intersect":"Click or press spacebar to add more nodes to the line.{br}Roads, and many other types of lines, are part of a larger network. It is important for these lines to be connected properly in order for routing applications to work. **Click on {name} to create an intersection connecting the two lines.**","retry_intersect":"The road needs to intersect {name}. Let's try again!","continue_line":"Continue drawing the line for the new road. Remember that you can drag and zoom the map if needed.{br}When you are finished drawing, click on the last node again. **Finish drawing the road.**","choose_category_road":"**Select {category} from the list.**","choose_preset_residential":"There are many different types of roads, but this one is a residential road. **Choose the {preset} type.**","retry_preset_residential":"You didn't select the {preset} type. **Click here to choose again.**","name_road":"**Give this road a name, then hit escape, enter, or click the {button} button to close the feature editor.**","did_name_road":"Looks good! Next we will learn how to update the shape of a line.","update_line":"Sometimes you will need to change the shape of an existing line. Here is a road that doesn't look quite right.","add_node":"We can add some nodes to this line to improve its shape. One way to add a node is to double-click the line where you want to add a node. **Double-click on the line to create a new node.**","start_drag_endpoint":"When a line is selected, you can drag any of its nodes by clicking and holding down the left mouse button while you drag. **Drag the endpoint to the place where these roads should intersect.**","finish_drag_endpoint":"This spot looks good. **Release the left mouse button to finish dragging.**","start_drag_midpoint":"Small triangles are drawn at the *midpoints* between nodes. Another way to create a new node is to drag a midpoint to a new location. **Drag the midpoint triangle to create a new node along the curve of the road.**","continue_drag_midpoint":"This line is looking much better! Continue to adjust this line by double-clicking or dragging midpoints until the curve matches the road shape. **When you're happy with how the line looks, click OK.**","delete_lines":"It's OK to delete lines for roads that don't exist in the real world.{br}Here's an example where the city planned a {street} but never built it. We can improve this part of the map by deleting the extra lines.","rightclick_intersection":"The last real street is {street1}, so we will *split* {street2} at this intersection and remove everything above it. **Right click on the intersection node.**","split_intersection":"**Click on the {button} button to split {street}.**","retry_split":"You didn't click the Split button. Try again.","did_split_multi":"Good Job! {street1} is now split into two pieces. The top part can be removed. **Click the top part of {street2} to select it.**","did_split_single":"**Click the top part of {street2} to select it.**","multi_select":"{selected} is now selected. Let's also select {other1}. You can shift-click to select multiple things. **Shift-click on {other2}.**","multi_rightclick":"Good! Both lines to delete are now selected. **Right-click on one of the lines to show the edit menu.**","multi_delete":"**Click on the {button} button to delete the extra lines.**","retry_delete":"You didn't click the Delete button. Try again.","play":"Great! Use the skills that you've learned in this chapter to practice editing some more lines. **When you are ready to continue to the next chapter, click '{next}'.**"},"buildings":{"title":"Buildings","add_building":"OpenStreetMap is the world's largest database of buildings.{br}You can help improve this database by tracing buildings that aren't already mapped. **Click the {button} Area button to add a new area.**","start_building":"Let's add this house to the map by tracing its outline.{br}Buildings should be traced around their footprint as accurately as possible. **Click or press spacebar to place a starting node on one of the corners of the building.**","continue_building":"Continue adding more nodes to trace the outline of the building. Remember that you can zoom in if you want to add more details.{br}Finish the building by pressing enter, or clicking again on either the first or last node. **Finish tracing the building.**","retry_building":"It looks like you had some trouble placing the nodes at the building corners. Try again!","choose_category_building":"**Choose {category} from the list.**","choose_preset_house":"There are many different types of buildings, but this one is clearly a house.{br}If you're not sure of the type, it's OK to just choose the generic Building type. **Choose the {preset} type.**","close":"**Hit escape or click the {button} button to close the feature editor.**","rightclick_building":"**Right-click to select the building you created and show the edit menu.**","square_building":"The house that you just added will look even better with perfectly square corners. **Click on the {button} button to square the building shape.**","retry_square":"You didn't click the Square button. Try again.","done_square":"See how the corners of the building moved into place? Let's learn another useful trick.","add_tank":"Next we'll trace this circular storage tank. **Click the {button} Area button to add a new area.**","start_tank":"Don't worry, you won't need to draw a perfect circle. Just draw an area inside the tank that touches its edge. **Click or press spacebar to place a starting node on the edge of the tank.**","continue_tank":"Add a few more nodes around the edge. The circle will be created outside the nodes that you draw.{br}Finish the area by pressing enter, or clicking again on either the first or last node. **Finish tracing the tank.**","search_tank":"**Search for '{preset}'.**","choose_tank":"**Choose {preset} from the list.**","rightclick_tank":"**Right-click to select the storage tank you created and show the edit menu.**","circle_tank":"**Click on the {button} button to make the tank a circle.**","retry_circle":"You didn't click the Circularize button. Try again.","play":"Great Job! Practice tracing a few more buildings, and try some of the other commands on the edit menu. **When you are ready to continue to the next chapter, click '{next}'.**"},"startediting":{"title":"Start Editing","help":"You're now ready to edit OpenStreetMap!{br}You can replay this walkthrough anytime or view more documentation by clicking the {button} Help button.","save":"Don't forget to regularly save your changes!","start":"Start mapping!"}},"presets":{"categories":{"category-barrier":{"name":"Barrier Features"},"category-building":{"name":"Building Features"},"category-golf":{"name":"Golf Features"},"category-landuse":{"name":"Land Use Features"},"category-natural-area":{"name":"Natural Features"},"category-natural-line":{"name":"Natural Features"},"category-natural-point":{"name":"Natural Features"},"category-path":{"name":"Path Features"},"category-rail":{"name":"Rail Features"},"category-restriction":{"name":"Restriction Features"},"category-road":{"name":"Road Features"},"category-route":{"name":"Route Features"},"category-water-area":{"name":"Water Features"},"category-water-line":{"name":"Water Features"}},"fields":{"access_simple":{"label":"Allowed Access"},"access_toilets":{"label":"Access"},"access":{"label":"Allowed Access","placeholder":"Not Specified","types":{"access":"All","foot":"Foot","motor_vehicle":"Motor Vehicles","bicycle":"Bicycles","horse":"Horses"},"options":{"yes":{"title":"Allowed","description":"Access permitted by law; a right of way"},"no":{"title":"Prohibited","description":"Access not permitted to the general public"},"permissive":{"title":"Permissive","description":"Access permitted until such time as the owner revokes the permission"},"private":{"title":"Private","description":"Access permitted only with permission of the owner on an individual basis"},"designated":{"title":"Designated","description":"Access permitted according to signs or specific local laws"},"destination":{"title":"Destination","description":"Access permitted only to reach a destination"},"dismount":{"title":"Dismount","description":"Access permitted but rider must dismount"}}},"address":{"label":"Address","placeholders":{"block_number":"Block Number","block_number!jp":"Block No.","city":"City","city!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town","conscriptionnumber":"123","country":"Country","county":"County","county!jp":"District","district":"District","district!vn":"Arrondissement/Town/District","floor":"Floor","hamlet":"Hamlet","housename":"Housename","housenumber":"123","housenumber!jp":"Building No./Lot No.","neighbourhood":"Neighbourhood","neighbourhood!jp":"Chōme/Aza/Koaza","place":"Place","postcode":"Postcode","province":"Province","province!jp":"Prefecture","quarter":"Quarter","quarter!jp":"Ōaza/Machi","state":"State","street":"Street","subdistrict":"Subdistrict","subdistrict!vn":"Ward/Commune/Townlet","suburb":"Suburb","suburb!jp":"Ward"}},"admin_level":{"label":"Admin Level"},"aerialway":{"label":"Type"},"aerialway/access":{"label":"Access","options":{"entry":"Entry","exit":"Exit","both":"Both"}},"aerialway/bubble":{"label":"Bubble"},"aerialway/capacity":{"label":"Capacity (per hour)","placeholder":"500, 2500, 5000..."},"aerialway/duration":{"label":"Duration (minutes)","placeholder":"1, 2, 3..."},"aerialway/heating":{"label":"Heated"},"aerialway/occupancy":{"label":"Occupancy","placeholder":"2, 4, 8..."},"aerialway/summer/access":{"label":"Access (summer)","options":{"entry":"Entry","exit":"Exit","both":"Both"}},"aeroway":{"label":"Type"},"amenity":{"label":"Type"},"animal_boarding":{"label":"For Animals"},"animal_breeding":{"label":"For Animals"},"animal_shelter":{"label":"For Animals"},"area/highway":{"label":"Type"},"artist":{"label":"Artist"},"artwork_type":{"label":"Type"},"atm":{"label":"ATM"},"backrest":{"label":"Backrest"},"barrier":{"label":"Type"},"bath/open_air":{"label":"Open Air"},"bath/sand_bath":{"label":"Sand Bath"},"bath/type":{"label":"Specialty","options":{"onsen":"Japanese Onsen","foot_bath":"Foot Bath","hot_spring":"Hot Spring"}},"beauty":{"label":"Shop Type"},"bench":{"label":"Bench"},"bicycle_parking":{"label":"Type"},"bin":{"label":"Waste Bin"},"blood_components":{"label":"Blood Components","options":{"whole":"whole blood","plasma":"plasma","platelets":"platelets","stemcells":"stem cell samples"}},"board_type":{"label":"Type"},"boundary":{"label":"Type"},"brand":{"label":"Brand"},"building_area":{"label":"Building"},"building":{"label":"Building"},"bunker_type":{"label":"Type"},"camera/direction":{"label":"Direction (Degrees Clockwise)","placeholder":"45, 90, 180, 270"},"camera/mount":{"label":"Camera Mount"},"camera/type":{"label":"Camera Type","options":{"fixed":"Fixed","panning":"Panning","dome":"Dome"}},"capacity":{"label":"Capacity","placeholder":"50, 100, 200..."},"cardinal_direction":{"label":"Direction","options":{"N":"North","E":"East","S":"South","W":"West","NE":"Northeast","SE":"Southeast","SW":"Southwest","NW":"Northwest","NNE":"North-northeast","ENE":"East-northeast","ESE":"East-southeast","SSE":"South-southeast","SSW":"South-southwest","WSW":"West-southwest","WNW":"West-northwest","NNW":"North-northwest"}},"castle_type":{"label":"Type"},"clock_direction":{"label":"Direction","options":{"clockwise":"Clockwise","anticlockwise":"Counterclockwise"}},"club":{"label":"Type"},"collection_times":{"label":"Collection Times"},"communication_multi":{"label":"Communication Types"},"construction":{"label":"Type"},"contact/webcam":{"label":"Webcam URL","placeholder":"http://example.com/"},"content":{"label":"Contents"},"country":{"label":"Country"},"covered":{"label":"Covered"},"craft":{"label":"Type"},"crop":{"label":"Crops"},"crossing":{"label":"Type"},"cuisine":{"label":"Cuisines"},"currency_multi":{"label":"Currency Types"},"cycle_network":{"label":"Network"},"cycleway":{"label":"Bike Lanes","placeholder":"none","types":{"cycleway:left":"Left side","cycleway:right":"Right side"},"options":{"none":{"title":"None","description":"No bike lane"},"lane":{"title":"Standard bike lane","description":"A bike lane separated from auto traffic by a painted line"},"shared_lane":{"title":"Shared bike lane","description":"A bike lane with no separation from auto traffic"},"track":{"title":"Bike track","description":"A bike lane separated from traffic by a physical barrier"},"share_busway":{"title":"Bike lane shared with bus","description":"A bike lane shared with a bus lane"},"opposite_lane":{"title":"Opposite bike lane","description":"A bike lane that travels in the opposite direction of traffic"},"opposite":{"title":"Contraflow bike lane","description":"A bike lane that travels in both directions on a one-way street"}}},"date":{"label":"Date"},"delivery":{"label":"Delivery"},"denomination":{"label":"Denomination"},"denotation":{"label":"Denotation"},"description":{"label":"Description"},"diaper":{"label":"Diaper Changing Available"},"display":{"label":"Display"},"dock":{"label":"Type"},"drive_through":{"label":"Drive-Through"},"electrified":{"label":"Electrification","placeholder":"Contact Line, Electrified Rail...","options":{"contact_line":"Contact Line","rail":"Electrified Rail","yes":"Yes (unspecified)","no":"No"}},"elevation":{"label":"Elevation"},"email":{"label":"Email","placeholder":"example@example.com"},"emergency":{"label":"Emergency"},"entrance":{"label":"Type"},"except":{"label":"Exceptions"},"fax":{"label":"Fax","placeholder":"+31 42 123 4567"},"fee":{"label":"Fee"},"fence_type":{"label":"Type"},"fire_hydrant/position":{"label":"Position","options":{"lane":"Lane","parking_lot":"Parking Lot","sidewalk":"Sidewalk","green":"Green"}},"fire_hydrant/type":{"label":"Type","options":{"pillar":"Pillar/Aboveground","underground":"Underground","wall":"Wall","pond":"Pond"}},"fixme":{"label":"Fix Me"},"fuel_multi":{"label":"Fuel Types"},"fuel":{"label":"Fuel"},"gauge":{"label":"Gauge"},"gender":{"label":"Gender","placeholder":"Unknown","options":{"male":"Male","female":"Female","unisex":"Unisex"}},"generator/method":{"label":"Method"},"generator/source":{"label":"Source"},"generator/type":{"label":"Type"},"golf_hole":{"label":"Reference","placeholder":"Hole number (1-18)"},"grape_variety":{"label":"Grape Varieties"},"handicap":{"label":"Handicap","placeholder":"1-18"},"handrail":{"label":"Handrail"},"height":{"label":"Height (Meters)"},"highway":{"label":"Type"},"historic":{"label":"Type"},"historic/civilization":{"label":"Historic Civilization"},"hoops":{"label":"Hoops","placeholder":"1, 2, 4..."},"iata":{"label":"IATA"},"icao":{"label":"ICAO"},"incline_steps":{"label":"Incline","options":{"up":"Up","down":"Down"}},"incline":{"label":"Incline"},"indoor":{"label":"Indoor"},"information":{"label":"Type"},"inscription":{"label":"Inscription"},"internet_access":{"label":"Internet Access","options":{"yes":"Yes","no":"No","wlan":"Wifi","wired":"Wired","terminal":"Terminal"}},"internet_access/fee":{"label":"Internet Access Fee"},"internet_access/ssid":{"label":"SSID (Network Name)"},"kerb":{"label":"Curb Ramp"},"lamp_type":{"label":"Type"},"landuse":{"label":"Type"},"lanes":{"label":"Lanes","placeholder":"1, 2, 3..."},"layer":{"label":"Layer"},"leaf_cycle_singular":{"label":"Leaf Cycle","options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous"}},"leaf_cycle":{"label":"Leaf Cycle","options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous","mixed":"Mixed"}},"leaf_type_singular":{"label":"Leaf Type","options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","leafless":"Leafless"}},"leaf_type":{"label":"Leaf Type","options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","mixed":"Mixed","leafless":"Leafless"}},"leisure":{"label":"Type"},"length":{"label":"Length (Meters)"},"level":{"label":"Level"},"levels":{"label":"Levels","placeholder":"2, 4, 6..."},"lit":{"label":"Lit"},"location":{"label":"Location"},"man_made":{"label":"Type"},"map_size":{"label":"Coverage"},"map_type":{"label":"Type"},"maxheight":{"label":"Max Height","placeholder":"4, 4.5, 5, 14'0\", 14'6\", 15'0\""},"maxspeed":{"label":"Speed Limit","placeholder":"40, 50, 60..."},"maxstay":{"label":"Max Stay"},"mtb/scale":{"label":"Mountain Biking Difficulty","placeholder":"0, 1, 2, 3...","options":{"0":"0: Solid gravel/packed earth, no obstacles, wide curves","1":"1: Some loose surface, small obstacles, wide curves","2":"2: Much loose surface, large obstacles, easy hairpins","3":"3: Slippery surface, large obstacles, tight hairpins","4":"4: Loose surface or boulders, dangerous hairpins","5":"5: Maximum difficulty, boulder fields, landslides","6":"6: Not rideable except by the very best mountain bikers"}},"mtb/scale/imba":{"label":"IMBA Trail Difficulty","placeholder":"Easy, Medium, Difficult...","options":{"0":"Easiest (white circle)","1":"Easy (green circle)","2":"Medium (blue square)","3":"Difficult (black diamond)","4":"Extremely Difficult (double black diamond)"}},"mtb/scale/uphill":{"label":"Mountain Biking Uphill Difficulty","placeholder":"0, 1, 2, 3...","options":{"0":"0: Avg. incline <10%, gravel/packed earth, no obstacles","1":"1: Avg. incline <15%, gravel/packed earth, few small objects","2":"2: Avg. incline <20%, stable surface, fistsize rocks/roots","3":"3: Avg. incline <25%, variable surface, fistsize rocks/branches","4":"4: Avg. incline <30%, poor condition, big rocks/branches","5":"5: Very steep, bike generally needs to be pushed or carried"}},"name":{"label":"Name","placeholder":"Common name (if any)"},"natural":{"label":"Natural"},"network_bicycle":{"label":"Network Type","placeholder":"Local, Regional, National, International","options":{"lcn":"Local","rcn":"Regional","ncn":"National","icn":"International"}},"network_foot":{"label":"Network Type","placeholder":"Local, Regional, National, International","options":{"lwn":"Local","rwn":"Regional","nwn":"National","iwn":"International"}},"network_horse":{"label":"Network Type","placeholder":"Local, Regional, National, International","options":{"lhn":"Local","rhn":"Regional","nhn":"National","ihn":"International"}},"network_road":{"label":"Network"},"network":{"label":"Network"},"note":{"label":"Note"},"office":{"label":"Type"},"oneway_yes":{"label":"One Way","options":{"undefined":"Assumed to be Yes","yes":"Yes","no":"No"}},"oneway":{"label":"One Way","options":{"undefined":"Assumed to be No","yes":"Yes","no":"No"}},"opening_hours":{"label":"Hours"},"operator":{"label":"Operator"},"outdoor_seating":{"label":"Outdoor Seating"},"par":{"label":"Par","placeholder":"3, 4, 5..."},"parallel_direction":{"label":"Direction","options":{"forward":"Forward","backward":"Backward"}},"park_ride":{"label":"Park and Ride"},"parking":{"label":"Type","options":{"surface":"Surface","multi-storey":"Multilevel","underground":"Underground","sheds":"Sheds","carports":"Carports","garage_boxes":"Garage Boxes","lane":"Roadside Lane"}},"payment_multi":{"label":"Payment Types"},"phone":{"label":"Phone","placeholder":"+31 42 123 4567"},"piste/difficulty":{"label":"Difficulty","placeholder":"Easy, Intermediate, Advanced...","options":{"novice":"Novice (instructional)","easy":"Easy (green circle)","intermediate":"Intermediate (blue square)","advanced":"Advanced (black diamond)","expert":"Expert (double black diamond)","freeride":"Freeride (off-piste)","extreme":"Extreme (climbing equipment required)"}},"piste/grooming":{"label":"Grooming","options":{"classic":"Classic","mogul":"Mogul","backcountry":"Backcountry","classic+skating":"Classic and Skating","scooter":"Scooter/Snowmobile","skating":"Skating"}},"piste/type":{"label":"Type","options":{"downhill":"Downhill","nordic":"Nordic","skitour":"Skitour","sled":"Sled","hike":"Hike","sleigh":"Sleigh","ice_skate":"Ice Skate","snow_park":"Snow Park","playground":"Playground"}},"place":{"label":"Type"},"plant":{"label":"Plant"},"population":{"label":"Population"},"power_supply":{"label":"Power Supply"},"power":{"label":"Type"},"produce":{"label":"Produce"},"product":{"label":"Products"},"railway":{"label":"Type"},"recycling_accepts":{"label":"Accepts"},"recycling_type":{"label":"Recycling Type","options":{"container":"Container","centre":"Recycling Center"}},"ref":{"label":"Reference"},"relation":{"label":"Type"},"religion":{"label":"Religion"},"restriction":{"label":"Type"},"restrictions":{"label":"Turn Restrictions"},"rooms":{"label":"Rooms"},"route_master":{"label":"Type"},"route":{"label":"Type"},"sac_scale":{"label":"Hiking Difficulty","placeholder":"Mountain Hiking, Alpine Hiking...","options":{"hiking":"T1: Hiking","mountain_hiking":"T2: Mountain Hiking","demanding_mountain_hiking":"T3: Demanding Mountain Hiking","alpine_hiking":"T4: Alpine Hiking","demanding_alpine_hiking":"T5: Demanding Alpine Hiking","difficult_alpine_hiking":"T6: Difficult Alpine Hiking"}},"sanitary_dump_station":{"label":"Toilet Disposal"},"seasonal":{"label":"Seasonal"},"second_hand":{"label":"Sells Used","placeholder":"Yes, No, Only","options":{"yes":"Yes","no":"No","only":"Only"}},"service_rail":{"label":"Service Type","options":{"spur":"Spur","yard":"Yard","siding":"Siding","crossover":"Crossover"}},"service_times":{"label":"Service Times"},"service":{"label":"Type"},"service/bicycle":{"label":"Services"},"service/vehicle":{"label":"Services"},"shelter_type":{"label":"Type"},"shelter":{"label":"Shelter"},"shop":{"label":"Type"},"site":{"label":"Type"},"smoking":{"label":"Smoking","placeholder":"No, Separated, Yes...","options":{"no":"No smoking anywhere","separated":"In smoking areas, not physically isolated","isolated":"In smoking areas, physically isolated","outside":"Allowed outside","yes":"Allowed everywhere","dedicated":"Dedicated to smokers (e.g. smokers' club)"}},"smoothness":{"label":"Smoothness","placeholder":"Thin Rollers, Wheels, Off-Road...","options":{"excellent":"Thin Rollers: rollerblade, skateboard","good":"Thin Wheels: racing bike","intermediate":"Wheels: city bike, wheelchair, scooter","bad":"Robust Wheels: trekking bike, car, rickshaw","very_bad":"High Clearance: light duty off-road vehicle","horrible":"Off-Road: heavy duty off-road vehicle","very_horrible":"Specialized off-road: tractor, ATV","impassable":"Impassable / No wheeled vehicle"}},"social_facility_for":{"label":"People Served"},"social_facility":{"label":"Type"},"source":{"label":"Source"},"sport_ice":{"label":"Sports"},"sport_racing_motor":{"label":"Sports"},"sport_racing_nonmotor":{"label":"Sports"},"sport":{"label":"Sports"},"stars":{"label":"Stars"},"start_date":{"label":"Start Date"},"step_count":{"label":"Number of Steps"},"stop":{"label":"Stop Type","options":{"all":"All Ways","minor":"Minor Road"}},"structure":{"label":"Structure","placeholder":"Unknown","options":{"bridge":"Bridge","tunnel":"Tunnel","embankment":"Embankment","cutting":"Cutting","ford":"Ford"}},"studio":{"label":"Type"},"substation":{"label":"Type"},"supervised":{"label":"Supervised"},"support":{"label":"Support"},"surface":{"label":"Surface"},"surveillance":{"label":"Surveillance Kind"},"surveillance/type":{"label":"Surveillance Type","options":{"camera":"Camera","guard":"Guard","ALPR":"Automatic License Plate Reader"}},"surveillance/zone":{"label":"Surveillance Zone"},"tactile_paving":{"label":"Tactile Paving"},"takeaway":{"label":"Takeaway","placeholder":"Yes, No, Takeaway Only...","options":{"yes":"Yes","no":"No","only":"Takeaway Only"}},"toilets/disposal":{"label":"Disposal","options":{"flush":"Flush","pitlatrine":"Pit/Latrine","chemical":"Chemical","bucket":"Bucket"}},"toll":{"label":"Toll"},"tomb":{"label":"Type"},"tourism":{"label":"Type"},"tower/construction":{"label":"Construction","placeholder":"Guyed, Lattice, Concealed, ..."},"tower/type":{"label":"Type"},"tracktype":{"label":"Track Type","placeholder":"Solid, Mostly Solid, Soft...","options":{"grade1":"Solid: paved or heavily compacted hardcore surface","grade2":"Mostly Solid: gravel/rock with some soft material mixed in","grade3":"Even mixture of hard and soft materials","grade4":"Mostly Soft: soil/sand/grass with some hard material mixed in","grade5":"Soft: soil/sand/grass"}},"traffic_calming":{"label":"Type"},"traffic_signals":{"label":"Type"},"trail_visibility":{"label":"Trail Visibility","placeholder":"Excellent, Good, Bad...","options":{"excellent":"Excellent: unambiguous path or markers everywhere","good":"Good: markers visible, sometimes require searching","intermediate":"Intermediate: few markers, path mostly visible","bad":"Bad: no markers, path sometimes invisible/pathless","horrible":"Horrible: often pathless, some orientation skills required","no":"No: pathless, excellent orientation skills required"}},"trees":{"label":"Trees"},"tunnel":{"label":"Tunnel"},"vending":{"label":"Type of Goods"},"visibility":{"label":"Visibility","options":{"house":"Up to 5m (16ft)","street":"5 to 20m (16 to 65ft)","area":"Over 20m (65ft)"}},"wall":{"label":"Type"},"water_point":{"label":"Water Point"},"water":{"label":"Type"},"waterway":{"label":"Type"},"website":{"label":"Website","placeholder":"http://example.com/"},"wetland":{"label":"Type"},"wheelchair":{"label":"Wheelchair Access"},"width":{"label":"Width (Meters)"},"wikipedia":{"label":"Wikipedia"}},"presets":{"aerialway":{"name":"Aerialway","terms":"ski lift,funifor,funitel"},"aeroway":{"name":"Aeroway","terms":""},"amenity":{"name":"Amenity","terms":""},"highway":{"name":"Highway","terms":""},"place":{"name":"Place","terms":""},"power":{"name":"Power","terms":""},"railway":{"name":"Railway","terms":""},"roundabout":{"name":"Roundabout","terms":""},"waterway":{"name":"Waterway","terms":""},"address":{"name":"Address","terms":""},"advertising/billboard":{"name":"Billboard","terms":""},"aerialway/cable_car":{"name":"Cable Car","terms":"tramway,ropeway"},"aerialway/chair_lift":{"name":"Chair Lift","terms":""},"aerialway/drag_lift":{"name":"Drag Lift","terms":""},"aerialway/gondola":{"name":"Gondola","terms":""},"aerialway/goods":{"name":"Goods Aerialway","terms":""},"aerialway/magic_carpet":{"name":"Magic Carpet Lift","terms":""},"aerialway/mixed_lift":{"name":"Mixed Lift","terms":""},"aerialway/platter":{"name":"Platter Lift","terms":"button lift,poma lift"},"aerialway/pylon":{"name":"Aerialway Pylon","terms":""},"aerialway/rope_tow":{"name":"Rope Tow Lift","terms":"handle tow,bugel lift"},"aerialway/station":{"name":"Aerialway Station","terms":""},"aerialway/t-bar":{"name":"T-bar Lift","terms":""},"aeroway/aerodrome":{"name":"Airport","terms":"airplane,airport,aerodrome"},"aeroway/apron":{"name":"Apron","terms":"ramp"},"aeroway/gate":{"name":"Airport Gate","terms":""},"aeroway/hangar":{"name":"Hangar","terms":""},"aeroway/helipad":{"name":"Helipad","terms":"helicopter,helipad,heliport"},"aeroway/runway":{"name":"Runway","terms":"landing strip"},"aeroway/taxiway":{"name":"Taxiway","terms":""},"aeroway/terminal":{"name":"Airport Terminal","terms":"airport,aerodrome"},"amenity/coworking_space":{"name":"Coworking Space","terms":""},"amenity/nursing_home":{"name":"Nursing Home","terms":""},"amenity/register_office":{"name":"Register Office","terms":""},"amenity/swimming_pool":{"name":"Swimming Pool","terms":""},"amenity/animal_boarding":{"name":"Animal Boarding Facility","terms":"boarding,cat,dog,horse,kitten,pet boarding,pet care,pet hotel,puppy,reptile"},"amenity/animal_breeding":{"name":"Animal Breeding Facility","terms":"breeding,bull,cat,cow,dog,horse,husbandry,kitten,livestock,pet breeding,puppy,reptile"},"amenity/animal_shelter":{"name":"Animal Shelter","terms":"adoption,aspca,cat,dog,horse,kitten,pet care,pet rescue,puppy,raptor,reptile,rescue,spca"},"amenity/arts_centre":{"name":"Arts Center","terms":""},"amenity/atm":{"name":"ATM","terms":"money,cash,machine"},"amenity/bank":{"name":"Bank","terms":"credit union,check,deposit,fund,investment,repository,reserve,safe,savings,stock,treasury,trust,vault"},"amenity/bar":{"name":"Bar","terms":"dive,beer,bier,booze"},"amenity/bbq":{"name":"Barbecue/Grill","terms":"bbq,grill"},"amenity/bench":{"name":"Bench","terms":"seat"},"amenity/bicycle_parking":{"name":"Bicycle Parking","terms":"bike"},"amenity/bicycle_rental":{"name":"Bicycle Rental","terms":"bike"},"amenity/bicycle_repair_station":{"name":"Bicycle Repair Tool Stand","terms":"bike,repair,chain,pump"},"amenity/biergarten":{"name":"Beer Garden","terms":"beer,bier,booze"},"amenity/boat_rental":{"name":"Boat Rental","terms":""},"amenity/bureau_de_change":{"name":"Currency Exchange","terms":"bureau de change,money changer"},"amenity/bus_station":{"name":"Bus Station","terms":""},"amenity/cafe":{"name":"Cafe","terms":"bistro,coffee,tea"},"amenity/car_rental":{"name":"Car Rental","terms":""},"amenity/car_sharing":{"name":"Car Sharing","terms":""},"amenity/car_wash":{"name":"Car Wash","terms":""},"amenity/casino":{"name":"Casino","terms":"gambling,roulette,craps,poker,blackjack"},"amenity/charging_station":{"name":"Charging Station","terms":"EV,Electric Vehicle,Supercharger"},"amenity/childcare":{"name":"Nursery/Childcare","terms":"daycare,orphanage,playgroup"},"amenity/cinema":{"name":"Cinema","terms":"drive-in,film,flick,movie,theater,picture,show,screen"},"amenity/clinic":{"name":"Clinic","terms":"medical,urgentcare"},"amenity/clock":{"name":"Clock","terms":""},"amenity/college":{"name":"College Grounds","terms":"university"},"amenity/community_centre":{"name":"Community Center","terms":"event,hall"},"amenity/compressed_air":{"name":"Compressed Air","terms":""},"amenity/courthouse":{"name":"Courthouse","terms":""},"amenity/crematorium":{"name":"Crematorium","terms":"cemetery,funeral"},"amenity/dentist":{"name":"Dentist","terms":"tooth,teeth"},"amenity/doctors":{"name":"Doctor","terms":"medic*"},"amenity/dojo":{"name":"Dojo / Martial Arts Academy","terms":"martial arts,dojang"},"amenity/drinking_water":{"name":"Drinking Water","terms":"fountain,potable"},"amenity/driving_school":{"name":"Driving School","terms":""},"amenity/embassy":{"name":"Embassy","terms":""},"amenity/fast_food":{"name":"Fast Food","terms":"restaurant,takeaway"},"amenity/ferry_terminal":{"name":"Ferry Terminal","terms":""},"amenity/fire_station":{"name":"Fire Station","terms":""},"amenity/food_court":{"name":"Food Court","terms":"fast food,restaurant,food"},"amenity/fountain":{"name":"Fountain","terms":""},"amenity/fuel":{"name":"Gas Station","terms":"petrol,fuel,gasoline,propane,diesel,lng,cng,biodiesel"},"amenity/grave_yard":{"name":"Graveyard","terms":""},"amenity/grit_bin":{"name":"Grit Bin","terms":"salt,sand"},"amenity/hospital":{"name":"Hospital Grounds","terms":"clinic,doctor,emergency room,health,infirmary,institution,sanatorium,sanitarium,sick,surgery,ward"},"amenity/hunting_stand":{"name":"Hunting Stand","terms":"game,gun,lookout,rifle,shoot*,wild,watch"},"amenity/ice_cream":{"name":"Ice Cream Shop","terms":"gelato,sorbet,sherbet,frozen,yogurt"},"amenity/internet_cafe":{"name":"Internet Cafe","terms":"cybercafe,taxiphone,teleboutique,coffee,cafe,net,lanhouse"},"amenity/kindergarten":{"name":"Preschool/Kindergarten Grounds","terms":"kindergarden,pre-school"},"amenity/library":{"name":"Library","terms":"book"},"amenity/marketplace":{"name":"Marketplace","terms":""},"amenity/motorcycle_parking":{"name":"Motorcycle Parking","terms":""},"amenity/nightclub":{"name":"Nightclub","terms":"disco*,night club,dancing,dance club"},"amenity/parking_entrance":{"name":"Parking Garage Entrance/Exit","terms":""},"amenity/parking_space":{"name":"Parking Space","terms":""},"amenity/parking":{"name":"Car Parking","terms":""},"amenity/pavilion":{"name":"Pavilion","terms":""},"amenity/pharmacy":{"name":"Pharmacy","terms":"drug*,med*,prescription"},"amenity/place_of_worship":{"name":"Place of Worship","terms":"abbey,basilica,bethel,cathedral,chancel,chantry,chapel,church,fold,house of God,house of prayer,house of worship,minster,mission,mosque,oratory,parish,sacellum,sanctuary,shrine,synagogue,tabernacle,temple"},"amenity/place_of_worship/buddhist":{"name":"Buddhist Temple","terms":"stupa,vihara,monastery,temple,pagoda,zendo,dojo"},"amenity/place_of_worship/christian":{"name":"Church","terms":"christian,abbey,basilica,bethel,cathedral,chancel,chantry,chapel,fold,house of God,house of prayer,house of worship,minster,mission,oratory,parish,sacellum,sanctuary,shrine,tabernacle,temple"},"amenity/place_of_worship/jewish":{"name":"Synagogue","terms":"jewish"},"amenity/place_of_worship/muslim":{"name":"Mosque","terms":"muslim"},"amenity/planetarium":{"name":"Planetarium","terms":"museum,astronomy,observatory"},"amenity/police":{"name":"Police","terms":"badge,constable,constabulary,cop,detective,fed,law,enforcement,officer,patrol"},"amenity/post_box":{"name":"Mailbox","terms":"letter,post"},"amenity/post_office":{"name":"Post Office","terms":"letter,mail"},"amenity/prison":{"name":"Prison Grounds","terms":"cell,jail"},"amenity/pub":{"name":"Pub","terms":"alcohol,drink,dive,beer,bier,booze"},"amenity/public_bath":{"name":"Public Bath","terms":"onsen,foot bath,hot springs"},"amenity/public_bookcase":{"name":"Public Bookcase","terms":"library,bookcrossing"},"amenity/ranger_station":{"name":"Ranger Station","terms":"visitor center,visitor centre,permit center,permit centre,backcountry office,warden office,warden center"},"amenity/recycling_centre":{"name":"Recycling Center","terms":"bottle,can,dump,glass,garbage,rubbish,scrap,trash"},"amenity/recycling":{"name":"Recycling","terms":"bin,can,bottle,glass,garbage,rubbish,scrap,trash"},"amenity/restaurant":{"name":"Restaurant","terms":"bar,breakfast,cafe,café,canteen,coffee,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/sanitary_dump_station":{"name":"RV Toilet Disposal","terms":"Motor Home,Camper,Sanitary,Dump Station,Elsan,CDP,CTDP,Chemical Toilet"},"amenity/school":{"name":"School Grounds","terms":"academy,elementary school,middle school,high school"},"amenity/shelter":{"name":"Shelter","terms":"lean-to,gazebo,picnic"},"amenity/social_facility":{"name":"Social Facility","terms":""},"amenity/social_facility/food_bank":{"name":"Food Bank","terms":""},"amenity/social_facility/group_home":{"name":"Elderly Group Home","terms":"old,senior,living"},"amenity/social_facility/homeless_shelter":{"name":"Homeless Shelter","terms":"houseless,unhoused,displaced"},"amenity/social_facility/nursing_home":{"name":"Nursing Home","terms":"elderly,living,nursing,old,senior"},"amenity/studio":{"name":"Studio","terms":"recording,radio,television"},"amenity/taxi":{"name":"Taxi Stand","terms":"cab"},"amenity/telephone":{"name":"Telephone","terms":"phone"},"amenity/theatre":{"name":"Theater","terms":"theatre,performance,play,musical"},"amenity/toilets":{"name":"Toilets","terms":"bathroom,restroom,outhouse,privy,head,lavatory,latrine,water closet,WC,W.C."},"amenity/townhall":{"name":"Town Hall","terms":"village,city,government,courthouse,municipal"},"amenity/university":{"name":"University Grounds","terms":"college"},"amenity/vending_machine":{"name":"Vending Machine","terms":""},"amenity/vending_machine/news_papers":{"name":"Newspaper Vending Machine","terms":"newspaper"},"amenity/vending_machine/cigarettes":{"name":"Cigarette Vending Machine","terms":"cigarette"},"amenity/vending_machine/condoms":{"name":"Condom Vending Machine","terms":"condom"},"amenity/vending_machine/drinks":{"name":"Drink Vending Machine","terms":"drink,soda,beverage,juice,pop"},"amenity/vending_machine/excrement_bags":{"name":"Excrement Bag Vending Machine","terms":"excrement bags,poop,dog,animal"},"amenity/vending_machine/newspapers":{"name":"Newspaper Vending Machine","terms":"newspaper"},"amenity/vending_machine/parcel_pickup_dropoff":{"name":"Parcel Pickup/Dropoff Vending Machine","terms":"parcel,mail,pickup"},"amenity/vending_machine/parking_tickets":{"name":"Parking Ticket Vending Machine","terms":"parking,ticket"},"amenity/vending_machine/public_transport_tickets":{"name":"Transit Ticket Vending Machine","terms":"bus,train,ferry,rail,ticket,transportation"},"amenity/vending_machine/sweets":{"name":"Snack Vending Machine","terms":"candy,gum,chip,pretzel,cookie,cracker"},"amenity/veterinary":{"name":"Veterinary","terms":"pet clinic,veterinarian,animal hospital,pet doctor"},"amenity/waste_basket":{"name":"Waste Basket","terms":"bin,garbage,rubbish,litter,trash"},"amenity/waste_disposal":{"name":"Garbage Dumpster","terms":"garbage,rubbish,litter,trash"},"amenity/waste_transfer_station":{"name":"Waste Transfer Station","terms":"dump,garbage,recycling,rubbish,scrap,trash"},"amenity/water_point":{"name":"RV Drinking Water","terms":""},"amenity/watering_place":{"name":"Animal Watering Place","terms":""},"area":{"name":"Area","terms":""},"area/highway":{"name":"Road Surface","terms":""},"barrier":{"name":"Barrier","terms":""},"barrier/entrance":{"name":"Entrance","terms":""},"barrier/block":{"name":"Block","terms":""},"barrier/bollard":{"name":"Bollard","terms":""},"barrier/border_control":{"name":"Border Control","terms":""},"barrier/cattle_grid":{"name":"Cattle Grid","terms":""},"barrier/city_wall":{"name":"City Wall","terms":""},"barrier/cycle_barrier":{"name":"Cycle Barrier","terms":""},"barrier/ditch":{"name":"Trench","terms":""},"barrier/fence":{"name":"Fence","terms":""},"barrier/gate":{"name":"Gate","terms":""},"barrier/hedge":{"name":"Hedge","terms":""},"barrier/kissing_gate":{"name":"Kissing Gate","terms":""},"barrier/lift_gate":{"name":"Lift Gate","terms":""},"barrier/retaining_wall":{"name":"Retaining Wall","terms":""},"barrier/stile":{"name":"Stile","terms":""},"barrier/toll_booth":{"name":"Toll Booth","terms":""},"barrier/wall":{"name":"Wall","terms":""},"boundary/administrative":{"name":"Administrative Boundary","terms":""},"building":{"name":"Building","terms":""},"building/bunker":{"name":"Bunker","terms":""},"building/entrance":{"name":"Entrance/Exit","terms":""},"building/train_station":{"name":"Train Station","terms":""},"building/apartments":{"name":"Apartments","terms":""},"building/barn":{"name":"Barn","terms":""},"building/cabin":{"name":"Cabin","terms":""},"building/cathedral":{"name":"Cathedral Building","terms":""},"building/chapel":{"name":"Chapel Building","terms":""},"building/church":{"name":"Church Building","terms":""},"building/college":{"name":"College Building","terms":"university"},"building/commercial":{"name":"Commercial Building","terms":""},"building/construction":{"name":"Building Under Construction","terms":""},"building/detached":{"name":"Detached House","terms":"home,single,family,residence,dwelling"},"building/dormitory":{"name":"Dormitory","terms":""},"building/garage":{"name":"Garage","terms":""},"building/garages":{"name":"Garages","terms":""},"building/greenhouse":{"name":"Greenhouse","terms":""},"building/hospital":{"name":"Hospital Building","terms":""},"building/hotel":{"name":"Hotel Building","terms":""},"building/house":{"name":"House","terms":"home,family,residence,dwelling"},"building/hut":{"name":"Hut","terms":""},"building/industrial":{"name":"Industrial Building","terms":""},"building/kindergarten":{"name":"Preschool/Kindergarten Building","terms":"kindergarden,pre-school"},"building/public":{"name":"Public Building","terms":""},"building/residential":{"name":"Residential Building","terms":""},"building/retail":{"name":"Retail Building","terms":""},"building/roof":{"name":"Roof","terms":""},"building/school":{"name":"School Building","terms":"academy,elementary school,middle school,high school"},"building/semidetached_house":{"name":"Semi-Detached House","terms":"home,double,duplex,twin,family,residence,dwelling"},"building/shed":{"name":"Shed","terms":""},"building/stable":{"name":"Stable","terms":""},"building/static_caravan":{"name":"Static Mobile Home","terms":""},"building/terrace":{"name":"Row Houses","terms":"home,terrace,brownstone,family,residence,dwelling"},"building/university":{"name":"University Building","terms":"college"},"building/warehouse":{"name":"Warehouse","terms":""},"camp_site/camp_pitch":{"name":"Camp Pitch","terms":"tent,rv"},"club":{"name":"Club","terms":"social"},"craft":{"name":"Craft","terms":""},"craft/jeweler":{"name":"Jeweler","terms":""},"craft/locksmith":{"name":"Locksmith","terms":""},"craft/optician":{"name":"Optician","terms":""},"craft/tailor":{"name":"Tailor","terms":"clothes,suit"},"craft/basket_maker":{"name":"Basket Maker","terms":""},"craft/beekeeper":{"name":"Beekeeper","terms":""},"craft/blacksmith":{"name":"Blacksmith","terms":""},"craft/boatbuilder":{"name":"Boat Builder","terms":""},"craft/bookbinder":{"name":"Bookbinder","terms":"book repair"},"craft/brewery":{"name":"Brewery","terms":"beer,bier"},"craft/carpenter":{"name":"Carpenter","terms":"woodworker"},"craft/carpet_layer":{"name":"Carpet Layer","terms":""},"craft/caterer":{"name":"Caterer","terms":""},"craft/clockmaker":{"name":"Clockmaker","terms":""},"craft/confectionery":{"name":"Confectionery","terms":"sweets,candy"},"craft/dressmaker":{"name":"Dressmaker","terms":"seamstress"},"craft/electrician":{"name":"Electrician","terms":"power,wire"},"craft/gardener":{"name":"Gardener","terms":"landscaper,grounds keeper"},"craft/glaziery":{"name":"Glaziery","terms":"glass,stained-glass,window"},"craft/handicraft":{"name":"Handicraft","terms":""},"craft/hvac":{"name":"HVAC","terms":"heat*,vent*,air conditioning"},"craft/insulator":{"name":"Insulator","terms":""},"craft/key_cutter":{"name":"Key Cutter","terms":""},"craft/metal_construction":{"name":"Metal Construction","terms":""},"craft/painter":{"name":"Painter","terms":""},"craft/photographer":{"name":"Photographer","terms":""},"craft/photographic_laboratory":{"name":"Photographic Laboratory","terms":"film"},"craft/plasterer":{"name":"Plasterer","terms":""},"craft/plumber":{"name":"Plumber","terms":"pipe"},"craft/pottery":{"name":"Pottery","terms":"ceramic"},"craft/rigger":{"name":"Rigger","terms":""},"craft/roofer":{"name":"Roofer","terms":""},"craft/saddler":{"name":"Saddler","terms":""},"craft/sailmaker":{"name":"Sailmaker","terms":""},"craft/sawmill":{"name":"Sawmill","terms":"lumber"},"craft/scaffolder":{"name":"Scaffolder","terms":""},"craft/sculpter":{"name":"Sculpter","terms":""},"craft/shoemaker":{"name":"Shoemaker","terms":"cobbler"},"craft/stonemason":{"name":"Stonemason","terms":"masonry"},"craft/sweep":{"name":"Chimney Sweep","terms":""},"craft/tiler":{"name":"Tiler","terms":""},"craft/tinsmith":{"name":"Tinsmith","terms":""},"craft/upholsterer":{"name":"Upholsterer","terms":""},"craft/watchmaker":{"name":"Watchmaker","terms":""},"craft/window_construction":{"name":"Window Construction","terms":"glass"},"craft/winery":{"name":"Winery","terms":""},"embankment":{"name":"Embankment","terms":""},"emergency/designated":{"name":"Emergency Access Designated","terms":""},"emergency/destination":{"name":"Emergency Access Destination","terms":""},"emergency/no":{"name":"Emergency Access No","terms":""},"emergency/official":{"name":"Emergency Access Official","terms":""},"emergency/private":{"name":"Emergency Access Private","terms":""},"emergency/yes":{"name":"Emergency Access Yes","terms":""},"emergency/ambulance_station":{"name":"Ambulance Station","terms":"EMS,EMT,rescue"},"emergency/defibrillator":{"name":"Defibrillator","terms":"AED"},"emergency/fire_hydrant":{"name":"Fire Hydrant","terms":"fire plug"},"emergency/phone":{"name":"Emergency Phone","terms":""},"entrance":{"name":"Entrance/Exit","terms":""},"footway/crossing":{"name":"Street Crossing","terms":""},"footway/crosswalk":{"name":"Pedestrian Crosswalk","terms":"zebra crossing"},"footway/sidewalk":{"name":"Sidewalk","terms":""},"ford":{"name":"Ford","terms":""},"golf/bunker":{"name":"Sand Trap","terms":"hazard,bunker"},"golf/fairway":{"name":"Fairway","terms":""},"golf/green":{"name":"Putting Green","terms":""},"golf/hole":{"name":"Golf Hole","terms":""},"golf/lateral_water_hazard_area":{"name":"Lateral Water Hazard","terms":""},"golf/lateral_water_hazard_line":{"name":"Lateral Water Hazard","terms":""},"golf/rough":{"name":"Rough","terms":""},"golf/tee":{"name":"Tee Box","terms":"teeing ground"},"golf/water_hazard_area":{"name":"Water Hazard","terms":""},"golf/water_hazard_line":{"name":"Water Hazard","terms":""},"healthcare/blood_donation":{"name":"Blood Donor Center","terms":"blood bank,blood donation,blood transfusion,apheresis,plasmapheresis,plateletpheresis,stem cell donation"},"highway/bridleway":{"name":"Bridle Path","terms":"bridleway,equestrian,horse"},"highway/bus_stop":{"name":"Bus Stop","terms":""},"highway/corridor":{"name":"Indoor Corridor","terms":"gallery,hall,hallway,indoor,passage,passageway"},"highway/crossing":{"name":"Street Crossing","terms":""},"highway/crosswalk":{"name":"Pedestrian Crosswalk","terms":"zebra crossing"},"highway/cycleway":{"name":"Cycle Path","terms":"bike"},"highway/footway":{"name":"Foot Path","terms":"hike,hiking,trackway,trail,walk"},"highway/give_way":{"name":"Yield Sign","terms":"give way,yield,sign"},"highway/living_street":{"name":"Living Street","terms":""},"highway/mini_roundabout":{"name":"Mini-Roundabout","terms":""},"highway/motorway_junction":{"name":"Motorway Junction / Exit","terms":""},"highway/motorway_link":{"name":"Motorway Link","terms":"ramp,on ramp,off ramp"},"highway/motorway":{"name":"Motorway","terms":"autobahn,expressway,freeway,highway,interstate,parkway,thruway,turnpike"},"highway/path":{"name":"Path","terms":"hike,hiking,trackway,trail,walk"},"highway/pedestrian":{"name":"Pedestrian Street","terms":""},"highway/primary_link":{"name":"Primary Link","terms":"ramp,on ramp,off ramp"},"highway/primary":{"name":"Primary Road","terms":""},"highway/raceway":{"name":"Racetrack (Motorsport)","terms":"auto*,formula one,kart,motocross,nascar,race*,track"},"highway/residential":{"name":"Residential Road","terms":""},"highway/rest_area":{"name":"Rest Area","terms":"rest stop"},"highway/road":{"name":"Unknown Road","terms":""},"highway/secondary_link":{"name":"Secondary Link","terms":"ramp,on ramp,off ramp"},"highway/secondary":{"name":"Secondary Road","terms":""},"highway/service":{"name":"Service Road","terms":""},"highway/service/alley":{"name":"Alley","terms":""},"highway/service/drive-through":{"name":"Drive-Through","terms":""},"highway/service/driveway":{"name":"Driveway","terms":""},"highway/service/emergency_access":{"name":"Emergency Access","terms":""},"highway/service/parking_aisle":{"name":"Parking Aisle","terms":""},"highway/services":{"name":"Service Area","terms":"services,travel plaza,service station"},"highway/speed_camera":{"name":"Speed Camera","terms":""},"highway/steps":{"name":"Steps","terms":"stairs,staircase"},"highway/stop":{"name":"Stop Sign","terms":"stop,halt,sign"},"highway/street_lamp":{"name":"Street Lamp","terms":"streetlight,street light,lamp,light,gaslight"},"highway/tertiary_link":{"name":"Tertiary Link","terms":"ramp,on ramp,off ramp"},"highway/tertiary":{"name":"Tertiary Road","terms":""},"highway/track":{"name":"Unmaintained Track Road","terms":"woods road,forest road,logging road,fire road,farm road,agricultural road,ranch road,carriage road,primitive,unmaintained,rut,offroad,4wd,4x4,four wheel drive,atv,quad,jeep,double track,two track"},"highway/traffic_mirror":{"name":"Traffic Mirror","terms":"blind spot,convex,corner,curved,roadside,round,safety,sphere,visibility"},"highway/traffic_signals":{"name":"Traffic Signals","terms":"light,stoplight,traffic light"},"highway/trunk_link":{"name":"Trunk Link","terms":"ramp,on ramp,off ramp"},"highway/trunk":{"name":"Trunk Road","terms":""},"highway/turning_circle":{"name":"Turning Circle","terms":"cul-de-sac"},"highway/turning_loop":{"name":"Turning Loop (Island)","terms":"cul-de-sac"},"highway/unclassified":{"name":"Minor/Unclassified Road","terms":""},"historic":{"name":"Historic Site","terms":""},"historic/archaeological_site":{"name":"Archaeological Site","terms":""},"historic/boundary_stone":{"name":"Boundary Stone","terms":""},"historic/castle":{"name":"Castle","terms":""},"historic/memorial":{"name":"Memorial","terms":""},"historic/monument":{"name":"Monument","terms":""},"historic/ruins":{"name":"Ruins","terms":""},"historic/tomb":{"name":"Tomb","terms":""},"historic/wayside_cross":{"name":"Wayside Cross","terms":""},"historic/wayside_shrine":{"name":"Wayside Shrine","terms":""},"junction":{"name":"Junction","terms":""},"landuse":{"name":"Land Use","terms":""},"landuse/farm":{"name":"Farmland","terms":""},"landuse/allotments":{"name":"Community Garden","terms":"allotment,garden"},"landuse/aquaculture":{"name":"Aquaculture","terms":"fish farm,crustacean,algae,aquafarming,shrimp farm,oyster farm,mariculture,algaculture"},"landuse/basin":{"name":"Basin","terms":""},"landuse/cemetery":{"name":"Cemetery","terms":""},"landuse/churchyard":{"name":"Churchyard","terms":""},"landuse/commercial":{"name":"Commercial Area","terms":""},"landuse/construction":{"name":"Construction","terms":""},"landuse/farmland":{"name":"Farmland","terms":"crop,grow,plant"},"landuse/farmyard":{"name":"Farmyard","terms":"crop,grow,plant"},"landuse/forest":{"name":"Forest","terms":"tree"},"landuse/garages":{"name":"Garages","terms":""},"landuse/grass":{"name":"Grass","terms":""},"landuse/harbour":{"name":"Harbor","terms":"boat"},"landuse/industrial":{"name":"Industrial Area","terms":""},"landuse/landfill":{"name":"Landfill","terms":"dump"},"landuse/meadow":{"name":"Meadow","terms":""},"landuse/military":{"name":"Military Area","terms":""},"landuse/military/airfield":{"name":"Military Airfield","terms":"air force,army,base,bomb,fight,force,guard,heli*,jet,marine,navy,plane,troop,war"},"landuse/military/barracks":{"name":"Barracks","terms":"air force,army,base,fight,force,guard,marine,navy,troop,war"},"landuse/military/bunker":{"name":"Military Bunker","terms":"air force,army,base,fight,force,guard,marine,navy,troop,war"},"landuse/military/checkpoint":{"name":"Checkpoint","terms":"air force,army,base,force,guard,marine,navy,troop,war"},"landuse/military/danger_area":{"name":"Danger Area","terms":"air force,army,base,blast,bomb,explo*,force,guard,mine,marine,navy,troop,war"},"landuse/military/naval_base":{"name":"Naval Base","terms":"base,fight,force,guard,marine,navy,ship,sub,troop,war"},"landuse/military/nuclear_explosion_site":{"name":"Nuclear Explosion Site","terms":"atom,blast,bomb,detonat*,nuke,site,test"},"landuse/military/obstacle_course":{"name":"Obstacle Course","terms":"army,base,force,guard,marine,navy,troop,war"},"landuse/military/office":{"name":"Military Office","terms":"air force,army,base,enlist,fight,force,guard,marine,navy,recruit,troop,war"},"landuse/military/range":{"name":"Military Range","terms":"air force,army,base,fight,fire,force,guard,gun,marine,navy,rifle,shoot*,snip*,train,troop,war"},"landuse/military/training_area":{"name":"Training Area","terms":"air force,army,base,fight,fire,force,guard,gun,marine,navy,rifle,shoot*,snip*,train,troop,war"},"landuse/orchard":{"name":"Orchard","terms":"fruit"},"landuse/plant_nursery":{"name":"Plant Nursery","terms":"flower,garden,grow,vivero"},"landuse/quarry":{"name":"Quarry","terms":""},"landuse/railway":{"name":"Railway Corridor","terms":"rail,train,track"},"landuse/recreation_ground":{"name":"Recreation Ground","terms":"playing fields"},"landuse/residential":{"name":"Residential Area","terms":""},"landuse/retail":{"name":"Retail Area","terms":""},"landuse/vineyard":{"name":"Vineyard","terms":"grape,wine"},"leisure":{"name":"Leisure","terms":""},"leisure/adult_gaming_centre":{"name":"Adult Gaming Center","terms":"gambling,slot machine"},"leisure/bird_hide":{"name":"Bird Hide","terms":"machan,ornithology"},"leisure/bowling_alley":{"name":"Bowling Alley","terms":""},"leisure/common":{"name":"Common","terms":"open space"},"leisure/dance":{"name":"Dance Hall","terms":"ballroom,jive,swing,tango,waltz"},"leisure/dog_park":{"name":"Dog Park","terms":""},"leisure/firepit":{"name":"Firepit","terms":"fireplace,campfire"},"leisure/fitness_centre":{"name":"Gym / Fitness Center","terms":"health,gym,leisure,studio"},"leisure/fitness_centre/yoga":{"name":"Yoga Studio","terms":"studio"},"leisure/fitness_station":{"name":"Outdoor Fitness Station","terms":"fitness,gym"},"leisure/garden":{"name":"Garden","terms":""},"leisure/golf_course":{"name":"Golf Course","terms":"links"},"leisure/horse_riding":{"name":"Horseback Riding Facility","terms":"equestrian,stable"},"leisure/ice_rink":{"name":"Ice Rink","terms":"hockey,skating,curling"},"leisure/marina":{"name":"Marina","terms":"boat"},"leisure/miniature_golf":{"name":"Miniature Golf","terms":"crazy golf,mini golf,putt-putt"},"leisure/nature_reserve":{"name":"Nature Reserve","terms":"protected,wildlife"},"leisure/park":{"name":"Park","terms":"esplanade,estate,forest,garden,grass,green,grounds,lawn,lot,meadow,parkland,place,playground,plaza,pleasure garden,recreation area,square,tract,village green,woodland"},"leisure/picnic_table":{"name":"Picnic Table","terms":"bench"},"leisure/pitch":{"name":"Sport Pitch","terms":"field"},"leisure/pitch/american_football":{"name":"American Football Field","terms":""},"leisure/pitch/baseball":{"name":"Baseball Diamond","terms":""},"leisure/pitch/basketball":{"name":"Basketball Court","terms":""},"leisure/pitch/beachvolleyball":{"name":"Beach Volleyball Court","terms":"volleyball"},"leisure/pitch/bowls":{"name":"Bowling Green","terms":""},"leisure/pitch/cricket":{"name":"Cricket Field","terms":""},"leisure/pitch/equestrian":{"name":"Riding Arena","terms":"dressage,equestrian,horse,horseback,riding"},"leisure/pitch/rugby_league":{"name":"Rugby League Field","terms":""},"leisure/pitch/rugby_union":{"name":"Rugby Union Field","terms":""},"leisure/pitch/skateboard":{"name":"Skate Park","terms":""},"leisure/pitch/soccer":{"name":"Soccer Field","terms":""},"leisure/pitch/table_tennis":{"name":"Ping Pong Table","terms":"table tennis,ping pong"},"leisure/pitch/tennis":{"name":"Tennis Court","terms":""},"leisure/pitch/volleyball":{"name":"Volleyball Court","terms":""},"leisure/playground":{"name":"Playground","terms":"jungle gym,play area"},"leisure/resort":{"name":"Resort","terms":""},"leisure/running_track":{"name":"Racetrack (Running)","terms":"race*,running,sprint,track"},"leisure/slipway":{"name":"Slipway","terms":"boat launch,boat ramp"},"leisure/sports_centre":{"name":"Sports Center / Complex","terms":""},"leisure/sports_centre/swimming":{"name":"Swimming Pool Facility","terms":"dive,water"},"leisure/stadium":{"name":"Stadium","terms":""},"leisure/swimming_pool":{"name":"Swimming Pool","terms":"dive,water"},"leisure/track":{"name":"Racetrack (Non-Motorsport)","terms":"cycle,dog,greyhound,horse,race*,track"},"leisure/water_park":{"name":"Water Park","terms":"swim,pool,dive"},"line":{"name":"Line","terms":""},"man_made":{"name":"Man Made","terms":""},"man_made/embankment":{"name":"Embankment","terms":""},"man_made/adit":{"name":"Adit","terms":"entrance,underground,mine,cave"},"man_made/breakwater":{"name":"Breakwater","terms":""},"man_made/bridge":{"name":"Bridge","terms":""},"man_made/chimney":{"name":"Chimney","terms":""},"man_made/cutline":{"name":"Cut line","terms":""},"man_made/flagpole":{"name":"Flagpole","terms":""},"man_made/gasometer":{"name":"Gasometer","terms":"gas holder"},"man_made/groyne":{"name":"Groyne","terms":""},"man_made/lighthouse":{"name":"Lighthouse","terms":""},"man_made/mast":{"name":"Mast","terms":"antenna,broadcast tower,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,radio mast,radio tower,television tower,transmission mast,transmission tower,tv tower"},"man_made/observation":{"name":"Observation Tower","terms":"lookout tower,fire tower"},"man_made/petroleum_well":{"name":"Oil Well","terms":"drilling rig,oil derrick,oil drill,oil horse,oil rig,oil pump,petroleum well,pumpjack"},"man_made/pier":{"name":"Pier","terms":"dock"},"man_made/pipeline":{"name":"Pipeline","terms":""},"man_made/pumping_station":{"name":"Pumping Station","terms":""},"man_made/silo":{"name":"Silo","terms":"grain,corn,wheat"},"man_made/storage_tank":{"name":"Storage Tank","terms":"water,oil,gas,petrol"},"man_made/surveillance_camera":{"name":"Surveillance Camera","terms":"anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam"},"man_made/surveillance":{"name":"Surveillance","terms":"anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam"},"man_made/survey_point":{"name":"Survey Point","terms":""},"man_made/tower":{"name":"Tower","terms":""},"man_made/wastewater_plant":{"name":"Wastewater Plant","terms":"sewage*,water treatment plant,reclamation plant"},"man_made/water_tower":{"name":"Water Tower","terms":""},"man_made/water_well":{"name":"Water Well","terms":""},"man_made/water_works":{"name":"Water Works","terms":""},"man_made/works":{"name":"Factory","terms":"assembly,build,brewery,car,plant,plastic,processing,manufacture,refinery"},"natural":{"name":"Natural","terms":""},"natural/bare_rock":{"name":"Bare Rock","terms":"rock"},"natural/bay":{"name":"Bay","terms":""},"natural/beach":{"name":"Beach","terms":"shore"},"natural/cave_entrance":{"name":"Cave Entrance","terms":"cavern,hollow,grotto,shelter,cavity"},"natural/cliff":{"name":"Cliff","terms":"escarpment"},"natural/coastline":{"name":"Coastline","terms":"shore"},"natural/fell":{"name":"Fell","terms":""},"natural/glacier":{"name":"Glacier","terms":""},"natural/grassland":{"name":"Grassland","terms":"prairie,savanna"},"natural/heath":{"name":"Heath","terms":""},"natural/peak":{"name":"Peak","terms":"acme,aiguille,alp,climax,crest,crown,hill,mount,mountain,pinnacle,summit,tip,top"},"natural/ridge":{"name":"Ridge","terms":"crest"},"natural/saddle":{"name":"Saddle","terms":"pass,mountain pass,top"},"natural/sand":{"name":"Sand","terms":"desert"},"natural/scree":{"name":"Scree","terms":"loose rocks"},"natural/scrub":{"name":"Scrub","terms":"bush,shrubs"},"natural/spring":{"name":"Spring","terms":""},"natural/tree_row":{"name":"Tree row","terms":""},"natural/tree":{"name":"Tree","terms":""},"natural/volcano":{"name":"Volcano","terms":"mountain,crater"},"natural/water":{"name":"Water","terms":""},"natural/water/lake":{"name":"Lake","terms":"lakelet,loch,mere"},"natural/water/pond":{"name":"Pond","terms":"lakelet,millpond,tarn,pool,mere"},"natural/water/reservoir":{"name":"Reservoir","terms":""},"natural/wetland":{"name":"Wetland","terms":""},"natural/wood":{"name":"Wood","terms":"tree"},"noexit/yes":{"name":"No Exit","terms":"no exit,road end,dead end"},"office":{"name":"Office","terms":""},"office/travel_agent":{"name":"Travel Agency","terms":""},"office/accountant":{"name":"Accountant","terms":""},"office/administrative":{"name":"Administrative Office","terms":""},"office/architect":{"name":"Architect","terms":""},"office/company":{"name":"Company Office","terms":""},"office/coworking":{"name":"Coworking Space","terms":"coworking,office"},"office/educational_institution":{"name":"Educational Institution","terms":""},"office/employment_agency":{"name":"Employment Agency","terms":"job"},"office/estate_agent":{"name":"Real Estate Office","terms":""},"office/financial":{"name":"Financial Office","terms":""},"office/government":{"name":"Government Office","terms":""},"office/government/register_office":{"name":"Register Office","terms":"clerk,marriage,death,birth,certificate"},"office/insurance":{"name":"Insurance Office","terms":""},"office/it":{"name":"IT Office","terms":""},"office/lawyer":{"name":"Law Office","terms":""},"office/lawyer/notary":{"name":"Notary Office","terms":"clerk,signature,wills,deeds,estate"},"office/newspaper":{"name":"Newspaper","terms":""},"office/ngo":{"name":"NGO Office","terms":""},"office/physician":{"name":"Physician","terms":""},"office/political_party":{"name":"Political Party","terms":""},"office/research":{"name":"Research Office","terms":""},"office/telecommunication":{"name":"Telecom Office","terms":""},"office/therapist":{"name":"Therapist","terms":""},"piste":{"name":"Piste/Ski Trail","terms":"ski,sled,sleigh,snowboard,nordic,downhill,snowmobile"},"place/farm":{"name":"Farm","terms":""},"place/city":{"name":"City","terms":""},"place/hamlet":{"name":"Hamlet","terms":""},"place/island":{"name":"Island","terms":"archipelago,atoll,bar,cay,isle,islet,key,reef"},"place/isolated_dwelling":{"name":"Isolated Dwelling","terms":""},"place/locality":{"name":"Locality","terms":""},"place/neighbourhood":{"name":"Neighborhood","terms":"neighbourhood"},"place/quarter":{"name":"Sub-Borough / Quarter","terms":"boro,borough,quarter"},"place/square":{"name":"Square","terms":""},"place/suburb":{"name":"Borough / Suburb","terms":"boro,borough,quarter"},"place/town":{"name":"Town","terms":""},"place/village":{"name":"Village","terms":""},"point":{"name":"Point","terms":""},"power/sub_station":{"name":"Substation","terms":""},"power/generator":{"name":"Power Generator","terms":""},"power/line":{"name":"Power Line","terms":""},"power/minor_line":{"name":"Minor Power Line","terms":""},"power/plant":{"name":"Power Station Grounds","terms":"coal,gas,generat*,hydro,nuclear,power,station"},"power/pole":{"name":"Power Pole","terms":""},"power/substation":{"name":"Substation","terms":""},"power/tower":{"name":"High-Voltage Tower","terms":""},"power/transformer":{"name":"Transformer","terms":""},"public_transport/platform":{"name":"Platform","terms":""},"public_transport/stop_position":{"name":"Stop Position","terms":""},"railway/abandoned":{"name":"Abandoned Railway","terms":""},"railway/crossing":{"name":"Railway Crossing (Path)","terms":"crossing,pedestrian crossing,railroad crossing,level crossing,grade crossing,path through railroad,train crossing"},"railway/disused":{"name":"Disused Railway","terms":""},"railway/funicular":{"name":"Funicular","terms":"venicular,cliff railway,cable car,cable railway,funicular railway"},"railway/halt":{"name":"Railway Halt","terms":"break,interrupt,rest,wait,interruption"},"railway/level_crossing":{"name":"Railway Crossing (Road)","terms":"crossing,railroad crossing,level crossing,grade crossing,road through railroad,train crossing"},"railway/monorail":{"name":"Monorail","terms":""},"railway/narrow_gauge":{"name":"Narrow Gauge Rail","terms":"narrow gauge railway,narrow gauge railroad"},"railway/platform":{"name":"Railway Platform","terms":""},"railway/rail":{"name":"Rail","terms":""},"railway/station":{"name":"Railway Station","terms":"train station,station"},"railway/subway_entrance":{"name":"Subway Entrance","terms":""},"railway/subway":{"name":"Subway","terms":""},"railway/tram_stop":{"name":"Tram Stop","terms":"light rail,streetcar,tram,trolley"},"railway/tram":{"name":"Tram","terms":"light rail,streetcar,tram,trolley"},"relation":{"name":"Relation","terms":""},"route/ferry":{"name":"Ferry Route","terms":""},"shop":{"name":"Shop","terms":""},"shop/fishmonger":{"name":"Fishmonger","terms":""},"shop/vacant":{"name":"Vacant Shop","terms":""},"shop/alcohol":{"name":"Liquor Store","terms":"alcohol,beer,booze,wine"},"shop/anime":{"name":"Anime Shop","terms":"manga,japan,cosplay,figurine,dakimakura"},"shop/antiques":{"name":"Antiques Shop","terms":""},"shop/art":{"name":"Art Store","terms":"art*,exhibit*,gallery"},"shop/baby_goods":{"name":"Baby Goods Store","terms":""},"shop/bag":{"name":"Bag/Luggage Store","terms":"handbag,purse"},"shop/bakery":{"name":"Bakery","terms":""},"shop/bathroom_furnishing":{"name":"Bathroom Furnishing Store","terms":""},"shop/beauty":{"name":"Beauty Shop","terms":"spa,salon,tanning"},"shop/beauty/nails":{"name":"Nail Salon","terms":"manicure,pedicure"},"shop/beauty/tanning":{"name":"Tanning Salon","terms":""},"shop/bed":{"name":"Bedding/Mattress Store","terms":""},"shop/beverages":{"name":"Beverage Store","terms":""},"shop/bicycle":{"name":"Bicycle Shop","terms":"bike,repair"},"shop/bookmaker":{"name":"Bookmaker","terms":"betting"},"shop/books":{"name":"Book Store","terms":""},"shop/boutique":{"name":"Boutique","terms":""},"shop/butcher":{"name":"Butcher","terms":"meat"},"shop/candles":{"name":"Candle Shop","terms":""},"shop/car_parts":{"name":"Car Parts Store","terms":"auto"},"shop/car_repair":{"name":"Car Repair Shop","terms":"auto,garage,service"},"shop/car":{"name":"Car Dealership","terms":"auto"},"shop/carpet":{"name":"Carpet Store","terms":"rug"},"shop/charity":{"name":"Charity Store","terms":"thrift,op shop,nonprofit"},"shop/cheese":{"name":"Cheese Store","terms":""},"shop/chemist":{"name":"Drugstore","terms":"med*,drug*,gift"},"shop/chocolate":{"name":"Chocolate Store","terms":""},"shop/clothes":{"name":"Clothing Store","terms":""},"shop/coffee":{"name":"Coffee Store","terms":""},"shop/computer":{"name":"Computer Store","terms":""},"shop/confectionery":{"name":"Candy Store","terms":""},"shop/convenience":{"name":"Convenience Store","terms":""},"shop/copyshop":{"name":"Copy Store","terms":""},"shop/cosmetics":{"name":"Cosmetics Store","terms":""},"shop/craft":{"name":"Arts and Crafts Store","terms":"art*,paint*,frame"},"shop/curtain":{"name":"Curtain Store","terms":"drape*,window"},"shop/dairy":{"name":"Dairy Store","terms":"milk,egg,cheese"},"shop/deli":{"name":"Deli","terms":"lunch,meat,sandwich"},"shop/department_store":{"name":"Department Store","terms":""},"shop/doityourself":{"name":"DIY Store","terms":""},"shop/dry_cleaning":{"name":"Dry Cleaner","terms":""},"shop/e-cigarette":{"name":"E-Cigarette Shop","terms":"electronic,vapor"},"shop/electronics":{"name":"Electronics Store","terms":"appliance,audio,computer,tv"},"shop/erotic":{"name":"Erotic Store","terms":"sex,porn"},"shop/fabric":{"name":"Fabric Store","terms":"sew"},"shop/farm":{"name":"Produce Stand","terms":"farm shop,farm stand"},"shop/fashion":{"name":"Fashion Store","terms":""},"shop/florist":{"name":"Florist","terms":"flower"},"shop/frame":{"name":"Framing Shop","terms":"art*,paint*,photo*,frame"},"shop/funeral_directors":{"name":"Funeral Home","terms":"undertaker,memorial home"},"shop/furnace":{"name":"Furnace Store","terms":"oven,stove"},"shop/furniture":{"name":"Furniture Store","terms":"chair,sofa,table"},"shop/garden_centre":{"name":"Garden Center","terms":"landscape,mulch,shrub,tree"},"shop/gas":{"name":"Bottled Gas Shop","terms":"cng,lpg,natural gas,propane,refill,tank"},"shop/gift":{"name":"Gift Shop","terms":"souvenir"},"shop/greengrocer":{"name":"Greengrocer","terms":"fruit,vegetable"},"shop/hairdresser":{"name":"Hairdresser","terms":"barber"},"shop/hardware":{"name":"Hardware Store","terms":""},"shop/hearing_aids":{"name":"Hearing Aids Store","terms":""},"shop/herbalist":{"name":"Herbalist","terms":""},"shop/hifi":{"name":"Hifi Store","terms":"stereo,video"},"shop/houseware":{"name":"Houseware Store","terms":"home,household"},"shop/interior_decoration":{"name":"Interior Decoration Store","terms":""},"shop/jewelry":{"name":"Jeweler","terms":"diamond,gem,ring"},"shop/kiosk":{"name":"News Kiosk","terms":""},"shop/kitchen":{"name":"Kitchen Design Store","terms":""},"shop/laundry":{"name":"Laundry","terms":""},"shop/leather":{"name":"Leather Store","terms":""},"shop/locksmith":{"name":"Locksmith","terms":"key,lockpick"},"shop/lottery":{"name":"Lottery Shop","terms":""},"shop/mall":{"name":"Mall","terms":"shopping"},"shop/massage":{"name":"Massage Shop","terms":""},"shop/medical_supply":{"name":"Medical Supply Store","terms":""},"shop/mobile_phone":{"name":"Mobile Phone Store","terms":""},"shop/money_lender":{"name":"Money Lender","terms":""},"shop/motorcycle":{"name":"Motorcycle Dealership","terms":"bike"},"shop/music":{"name":"Music Store","terms":"CD,vinyl"},"shop/musical_instrument":{"name":"Musical Instrument Store","terms":"guitar"},"shop/newsagent":{"name":"Newspaper/Magazine Shop","terms":""},"shop/nutrition_supplements":{"name":"Nutrition Supplements Store","terms":""},"shop/optician":{"name":"Optician","terms":"eye,glasses"},"shop/organic":{"name":"Organic Goods Store","terms":""},"shop/outdoor":{"name":"Outdoors Store","terms":"camping,climbing,hiking"},"shop/paint":{"name":"Paint Store","terms":""},"shop/pastry":{"name":"Pastry Shop","terms":"patisserie,cake shop,cakery"},"shop/pawnbroker":{"name":"Pawn Shop","terms":""},"shop/perfumery":{"name":"Perfume Store","terms":""},"shop/pet":{"name":"Pet Store","terms":"animal,cat,dog,fish,kitten,puppy,reptile"},"shop/photo":{"name":"Photography Store","terms":"camera,film"},"shop/pyrotechnics":{"name":"Fireworks Store","terms":""},"shop/radiotechnics":{"name":"Radio/Electronic Component Store","terms":""},"shop/religion":{"name":"Religious Store","terms":""},"shop/scuba_diving":{"name":"Scuba Diving Shop","terms":""},"shop/seafood":{"name":"Seafood Shop","terms":"fishmonger"},"shop/second_hand":{"name":"Consignment/Thrift Store","terms":"secondhand,second hand,resale,thrift,used"},"shop/shoes":{"name":"Shoe Store","terms":""},"shop/sports":{"name":"Sporting Goods Store","terms":""},"shop/stationery":{"name":"Stationery Store","terms":"card,paper"},"shop/storage_rental":{"name":"Storage Rental","terms":""},"shop/supermarket":{"name":"Supermarket","terms":"grocery,store,shop"},"shop/tailor":{"name":"Tailor","terms":"clothes,suit"},"shop/tattoo":{"name":"Tattoo Parlor","terms":""},"shop/tea":{"name":"Tea Store","terms":""},"shop/ticket":{"name":"Ticket Seller","terms":""},"shop/tobacco":{"name":"Tobacco Shop","terms":""},"shop/toys":{"name":"Toy Store","terms":""},"shop/travel_agency":{"name":"Travel Agency","terms":""},"shop/tyres":{"name":"Tire Store","terms":""},"shop/vacuum_cleaner":{"name":"Vacuum Cleaner Store","terms":""},"shop/variety_store":{"name":"Variety Store","terms":""},"shop/video_games":{"name":"Video Game Store","terms":""},"shop/video":{"name":"Video Store","terms":"DVD"},"shop/watches":{"name":"Watches Shop","terms":""},"shop/water_sports":{"name":"Watersport/Swim Shop","terms":""},"shop/weapons":{"name":"Weapon Shop","terms":"ammo,gun,knife,knives"},"shop/window_blind":{"name":"Window Blind Store","terms":""},"shop/wine":{"name":"Wine Shop","terms":""},"tourism":{"name":"Tourism","terms":""},"tourism/alpine_hut":{"name":"Alpine Hut","terms":""},"tourism/apartment":{"name":"Guest Apartment / Condo","terms":""},"tourism/aquarium":{"name":"Aquarium","terms":"fish,sea,water"},"tourism/artwork":{"name":"Artwork","terms":"mural,sculpture,statue"},"tourism/attraction":{"name":"Tourist Attraction","terms":""},"tourism/camp_site":{"name":"Campground","terms":"tent,rv"},"tourism/caravan_site":{"name":"RV Park","terms":"Motor Home,Camper"},"tourism/chalet":{"name":"Chalet","terms":""},"tourism/gallery":{"name":"Art Gallery","terms":"art*,exhibit*,paint*,photo*,sculpt*"},"tourism/guest_house":{"name":"Guest House","terms":"B&B,Bed and Breakfast"},"tourism/hostel":{"name":"Hostel","terms":""},"tourism/hotel":{"name":"Hotel","terms":""},"tourism/information":{"name":"Information","terms":""},"tourism/information/board":{"name":"Information Board","terms":""},"tourism/information/guidepost":{"name":"Guidepost","terms":""},"tourism/information/map":{"name":"Map","terms":""},"tourism/information/office":{"name":"Tourist Information Office","terms":""},"tourism/motel":{"name":"Motel","terms":""},"tourism/museum":{"name":"Museum","terms":"art*,exhibit*,gallery,foundation,hall,institution,paint*,photo*,sculpt*"},"tourism/picnic_site":{"name":"Picnic Site","terms":"camp"},"tourism/theme_park":{"name":"Theme Park","terms":""},"tourism/viewpoint":{"name":"Viewpoint","terms":""},"tourism/zoo":{"name":"Zoo","terms":"animal"},"traffic_calming":{"name":"Traffic Calming","terms":"bump,hump,slow,speed"},"traffic_calming/bump":{"name":"Speed Bump","terms":"hump,speed,slow"},"traffic_calming/chicane":{"name":"Traffic Chicane","terms":"driveway link,speed,slow"},"traffic_calming/choker":{"name":"Traffic Choker","terms":"speed,slow"},"traffic_calming/cushion":{"name":"Speed Cushion","terms":"bump,hump,speed,slow"},"traffic_calming/dip":{"name":"Dip","terms":"speed,slow"},"traffic_calming/hump":{"name":"Speed Hump","terms":"bump,speed,slow"},"traffic_calming/island":{"name":"Traffic Island","terms":"circle,roundabout,slow"},"traffic_calming/rumble_strip":{"name":"Rumble Strip","terms":"audible lines,sleeper lines,growlers"},"traffic_calming/table":{"name":"Raised Pedestrian Crossing","terms":"flat top,hump,speed,slow"},"type/multipolygon":{"name":"Multipolygon","terms":""},"type/boundary":{"name":"Boundary","terms":""},"type/boundary/administrative":{"name":"Administrative Boundary","terms":""},"type/restriction":{"name":"Restriction","terms":""},"type/restriction/no_left_turn":{"name":"No Left Turn","terms":""},"type/restriction/no_right_turn":{"name":"No Right Turn","terms":""},"type/restriction/no_straight_on":{"name":"No Straight On","terms":""},"type/restriction/no_u_turn":{"name":"No U-turn","terms":""},"type/restriction/only_left_turn":{"name":"Left Turn Only","terms":""},"type/restriction/only_right_turn":{"name":"Right Turn Only","terms":""},"type/restriction/only_straight_on":{"name":"No Turns","terms":""},"type/route_master":{"name":"Route Master","terms":""},"type/route":{"name":"Route","terms":""},"type/route/bicycle":{"name":"Cycle Route","terms":""},"type/route/bus":{"name":"Bus Route","terms":""},"type/route/detour":{"name":"Detour Route","terms":""},"type/route/ferry":{"name":"Ferry Route","terms":""},"type/route/foot":{"name":"Foot Route","terms":""},"type/route/hiking":{"name":"Hiking Route","terms":""},"type/route/horse":{"name":"Riding Route","terms":""},"type/route/pipeline":{"name":"Pipeline Route","terms":""},"type/route/power":{"name":"Power Route","terms":""},"type/route/road":{"name":"Road Route","terms":""},"type/route/train":{"name":"Train Route","terms":""},"type/route/tram":{"name":"Tram Route","terms":""},"type/site":{"name":"Site","terms":""},"vertex":{"name":"Other","terms":""},"waterway/boatyard":{"name":"Boatyard","terms":""},"waterway/canal":{"name":"Canal","terms":""},"waterway/dam":{"name":"Dam","terms":""},"waterway/ditch":{"name":"Ditch","terms":""},"waterway/dock":{"name":"Wet Dock / Dry Dock","terms":"boat,ship,vessel,marine"},"waterway/drain":{"name":"Drain","terms":""},"waterway/fuel":{"name":"Marine Fuel Station","terms":"petrol,gas,diesel,boat"},"waterway/river":{"name":"River","terms":"beck,branch,brook,course,creek,estuary,rill,rivulet,run,runnel,stream,tributary,watercourse"},"waterway/riverbank":{"name":"Riverbank","terms":""},"waterway/sanitary_dump_station":{"name":"Marine Toilet Disposal","terms":"Boat,Watercraft,Sanitary,Dump Station,Pumpout,Pump out,Elsan,CDP,CTDP,Chemical Toilet"},"waterway/stream":{"name":"Stream","terms":"beck,branch,brook,burn,course,creek,current,drift,flood,flow,freshet,race,rill,rindle,rivulet,run,runnel,rush,spate,spritz,surge,tide,torrent,tributary,watercourse"},"waterway/water_point":{"name":"Marine Drinking Water","terms":""},"waterway/waterfall":{"name":"Waterfall","terms":"fall"},"waterway/weir":{"name":"Weir","terms":""}}}};
+var en = {"modes":{"add_area":{"title":"Area","description":"Add parks, buildings, lakes or other areas to the map.","tail":"Click on the map to start drawing an area, like a park, lake, or building."},"add_line":{"title":"Line","description":"Add highways, streets, pedestrian paths, canals or other lines to the map.","tail":"Click on the map to start drawing a road, path, or route."},"add_point":{"title":"Point","description":"Add restaurants, monuments, postal boxes or other points to the map.","tail":"Click on the map to add a point."},"browse":{"title":"Browse","description":"Pan and zoom the map."},"draw_area":{"tail":"Click to add nodes to your area. Click the first node to finish the area."},"draw_line":{"tail":"Click to add more nodes to the line. Click on other lines to connect to them, and double-click to end the line."}},"operations":{"add":{"annotation":{"point":"Added a point.","vertex":"Added a node to a way.","relation":"Added a relation."}},"start":{"annotation":{"line":"Started a line.","area":"Started an area."}},"continue":{"key":"A","title":"Continue","description":"Continue this line.","not_eligible":"No line can be continued here.","multiple":"Several lines can be continued here. To choose a line, press the Shift key and click on it to select it.","annotation":{"line":"Continued a line.","area":"Continued an area."}},"cancel_draw":{"annotation":"Canceled drawing."},"change_role":{"annotation":"Changed the role of a relation member."},"change_tags":{"annotation":"Changed tags."},"circularize":{"title":"Circularize","description":{"line":"Make this line circular.","area":"Make this area circular."},"key":"O","annotation":{"line":"Made a line circular.","area":"Made an area circular."},"not_closed":"This can't be made circular because it's not a loop.","too_large":"This can't be made circular because not enough of it is currently visible.","connected_to_hidden":"This can't be made circular because it is connected to a hidden feature."},"orthogonalize":{"title":"Square","description":{"line":"Square the corners of this line.","area":"Square the corners of this area."},"key":"S","annotation":{"line":"Squared the corners of a line.","area":"Squared the corners of an area."},"not_squarish":"This can't be made square because it is not squarish.","too_large":"This can't be made square because not enough of it is currently visible.","connected_to_hidden":"This can't be made square because it is connected to a hidden feature."},"straighten":{"title":"Straighten","description":"Straighten this line.","key":"S","annotation":"Straightened a line.","too_bendy":"This can't be straightened because it bends too much.","connected_to_hidden":"This line can't be straightened because it is connected to a hidden feature."},"delete":{"title":"Delete","description":{"single":"Delete this feature permanently.","multiple":"Delete these features permanently."},"annotation":{"point":"Deleted a point.","vertex":"Deleted a node from a way.","line":"Deleted a line.","area":"Deleted an area.","relation":"Deleted a relation.","multiple":"Deleted {n} features."},"too_large":{"single":"This feature can't be deleted because not enough of it is currently visible.","multiple":"These features can't be deleted because not enough of them are currently visible."},"incomplete_relation":{"single":"This feature can't be deleted because it hasn't been fully downloaded.","multiple":"These features can't be deleted because they haven't been fully downloaded."},"part_of_relation":{"single":"This feature can't be deleted because it is part of a larger relation. You must remove it from the relation first.","multiple":"These features can't be deleted because they are part of larger relations. You must remove them from the relations first."},"connected_to_hidden":{"single":"This feature can't be deleted because it is connected to a hidden feature.","multiple":"These features can't be deleted because some are connected to hidden features."}},"add_member":{"annotation":"Added a member to a relation."},"delete_member":{"annotation":"Removed a member from a relation."},"connect":{"annotation":{"point":"Connected a way to a point.","vertex":"Connected a way to another.","line":"Connected a way to a line.","area":"Connected a way to an area."}},"disconnect":{"title":"Disconnect","description":"Disconnect these lines/areas from each other.","key":"D","annotation":"Disconnected lines/areas.","not_connected":"There aren't enough lines/areas here to disconnect.","connected_to_hidden":"This can't be disconnected because it is connected to a hidden feature.","relation":"This can't be disconnected because it connects members of a relation."},"merge":{"title":"Merge","description":"Merge these features.","key":"C","annotation":"Merged {n} features.","not_eligible":"These features can't be merged.","not_adjacent":"These features can't be merged because their endpoints aren't connected.","restriction":"These features can't be merged because at least one is a member of a \"{relation}\" relation.","incomplete_relation":"These features can't be merged because at least one hasn't been fully downloaded.","conflicting_tags":"These features can't be merged because some of their tags have conflicting values."},"move":{"title":"Move","description":{"single":"Move this feature to a different location.","multiple":"Move these features to a different location."},"key":"M","annotation":{"point":"Moved a point.","vertex":"Moved a node in a way.","line":"Moved a line.","area":"Moved an area.","multiple":"Moved multiple features."},"incomplete_relation":{"single":"This feature can't be moved because it hasn't been fully downloaded.","multiple":"These features can't be moved because they haven't been fully downloaded."},"too_large":{"single":"This feature can't be moved because not enough of it is currently visible.","multiple":"These features can't be moved because not enough of them are currently visible."},"connected_to_hidden":{"single":"This feature can't be moved because it is connected to a hidden feature.","multiple":"These features can't be moved because some are connected to hidden features."}},"reflect":{"title":{"long":"Reflect Long","short":"Reflect Short"},"description":{"long":{"single":"Reflect this feature across its long axis.","multiple":"Reflect these features across their long axis."},"short":{"single":"Reflect this feature across its short axis.","multiple":"Reflect these features across their short axis."}},"key":{"long":"T","short":"Y"},"annotation":{"long":{"single":"Reflected a feature across its long axis.","multiple":"Reflected multiple features across their long axis."},"short":{"single":"Reflected a feature across its short axis.","multiple":"Reflected multiple features across their short axis."}},"incomplete_relation":{"single":"This feature can't be reflected because it hasn't been fully downloaded.","multiple":"These features can't be reflected because they haven't been fully downloaded."},"too_large":{"single":"This feature can't be reflected because not enough of it is currently visible.","multiple":"These features can't be reflected because not enough of them are currently visible."},"connected_to_hidden":{"single":"This feature can't be reflected because it is connected to a hidden feature.","multiple":"These features can't be reflected because some are connected to hidden features."}},"rotate":{"title":"Rotate","description":{"single":"Rotate this feature around its center point.","multiple":"Rotate these features around their center point."},"key":"R","annotation":{"line":"Rotated a line.","area":"Rotated an area.","multiple":"Rotated multiple features."},"incomplete_relation":{"single":"This feature can't be rotated because it hasn't been fully downloaded.","multiple":"These features can't be rotated because they haven't been fully downloaded."},"too_large":{"single":"This feature can't be rotated because not enough of it is currently visible.","multiple":"These features can't be rotated because not enough of them are currently visible."},"connected_to_hidden":{"single":"This feature can't be rotated because it is connected to a hidden feature.","multiple":"These features can't be rotated because some are connected to hidden features."}},"reverse":{"title":"Reverse","description":"Make this line go in the opposite direction.","key":"V","annotation":"Reversed a line."},"split":{"title":"Split","description":{"line":"Split this line into two at this node.","area":"Split the boundary of this area into two.","multiple":"Split the lines/area boundaries at this node into two."},"key":"X","annotation":{"line":"Split a line.","area":"Split an area boundary.","multiple":"Split {n} lines/area boundaries."},"not_eligible":"Lines can't be split at their beginning or end.","multiple_ways":"There are too many lines here to split.","connected_to_hidden":"This can't be split because it is connected to a hidden feature."},"restriction":{"help":{"select":"Click to select a road segment.","toggle":"Click to toggle turn restrictions.","toggle_on":"Click to add a \"{restriction}\" restriction.","toggle_off":"Click to remove the \"{restriction}\" restriction."},"annotation":{"create":"Added a turn restriction","delete":"Deleted a turn restriction"}}},"undo":{"tooltip":"Undo: {action}","nothing":"Nothing to undo."},"redo":{"tooltip":"Redo: {action}","nothing":"Nothing to redo."},"tooltip_keyhint":"Shortcut:","browser_notice":"This editor is supported in Firefox, Chrome, Safari, Opera, and Internet Explorer 11 and above. Please upgrade your browser or use Potlatch 2 to edit the map.","translate":{"translate":"Translate","localized_translation_label":"Multilingual name","localized_translation_language":"Choose language","localized_translation_name":"Name"},"zoom_in_edit":"Zoom in to Edit","login":"login","logout":"logout","loading_auth":"Connecting to OpenStreetMap...","report_a_bug":"Report a bug","help_translate":"Help translate","feature_info":{"hidden_warning":"{count} hidden features","hidden_details":"These features are currently hidden: {details}"},"status":{"error":"Unable to connect to API.","offline":"The API is offline. Please try editing later.","readonly":"The API is read-only. You will need to wait to save your changes.","rateLimit":"The API is limiting anonymous connections.  You can fix this by logging in."},"commit":{"title":"Upload to OpenStreetMap","description_placeholder":"Brief description of your contributions (required)","message_label":"Changeset Comment","upload_explanation":"The changes you upload will be visible on all maps that use OpenStreetMap data.","upload_explanation_with_user":"The changes you upload as {user} will be visible on all maps that use OpenStreetMap data.","save":"Upload","cancel":"Cancel","changes":"{count} Changes","warnings":"Warnings","modified":"Modified","deleted":"Deleted","created":"Created","about_changeset_comments":"About changeset comments","about_changeset_comments_link":"//wiki.openstreetmap.org/wiki/Good_changeset_comments","google_warning":"You mentioned Google in this comment: remember that copying from Google Maps is strictly forbidden.","google_warning_link":"http://www.openstreetmap.org/copyright"},"contributors":{"list":"Edits by {users}","truncated_list":"Edits by {users} and {count} others"},"infobox":{"selected":"{n} selected","geometry":"Geometry","closed":"closed","center":"Center","perimeter":"Perimeter","length":"Length","area":"Area","centroid":"Centroid","location":"Location","metric":"Metric","imperial":"Imperial"},"geometry":{"point":"point","vertex":"vertex","line":"line","area":"area","relation":"relation"},"geocoder":{"search":"Search worldwide...","no_results_visible":"No results in visible map area","no_results_worldwide":"No results found"},"geolocate":{"title":"Show My Location","locating":"Locating, please wait..."},"inspector":{"no_documentation_combination":"There is no documentation available for this tag combination","no_documentation_key":"There is no documentation available for this key","documentation_redirect":"This documentation has been redirected to a new page","show_more":"Show More","view_on_osm":"View on openstreetmap.org","all_fields":"All fields","all_tags":"All tags","all_members":"All members","all_relations":"All relations","new_relation":"New relation...","role":"Role","choose":"Select feature type","results":"{n} results for {search}","reference":"View on OpenStreetMap Wiki","back_tooltip":"Change feature","remove":"Remove","search":"Search","multiselect":"Selected features","unknown":"Unknown","incomplete":"<not downloaded>","feature_list":"Search features","edit":"Edit feature","check":{"yes":"Yes","no":"No","reverser":"Change Direction"},"radio":{"structure":{"type":"Type","default":"Default","layer":"Layer"}},"add":"Add","none":"None","node":"Node","way":"Way","relation":"Relation","location":"Location","add_fields":"Add field:"},"background":{"title":"Background","description":"Background settings","percent_brightness":"{opacity}% brightness","none":"None","best_imagery":"Best known imagery source for this location","switch":"Switch back to this background","custom":"Custom","custom_button":"Edit custom background","custom_prompt":"Enter a tile URL template. Valid tokens are {zoom}, {x}, {y} for Z/X/Y scheme and {u} for quadtile scheme.","fix_misalignment":"Adjust imagery offset","imagery_source_faq":"Where does this imagery come from?","reset":"reset","offset":"Drag anywhere in the gray area below to adjust the imagery offset, or enter the offset values in meters.","minimap":{"description":"Minimap","tooltip":"Show a zoomed out map to help locate the area currently displayed."}},"map_data":{"title":"Map Data","description":"Map Data","data_layers":"Data Layers","fill_area":"Fill Areas","map_features":"Map Features","autohidden":"These features have been automatically hidden because too many would be shown on the screen.  You can zoom in to edit them."},"feature":{"points":{"description":"Points","tooltip":"Points of Interest"},"traffic_roads":{"description":"Traffic Roads","tooltip":"Highways, Streets, etc."},"service_roads":{"description":"Service Roads","tooltip":"Service Roads, Parking Aisles, Tracks, etc."},"paths":{"description":"Paths","tooltip":"Sidewalks, Foot Paths, Cycle Paths, etc."},"buildings":{"description":"Buildings","tooltip":"Buildings, Shelters, Garages, etc."},"landuse":{"description":"Landuse Features","tooltip":"Forests, Farmland, Parks, Residential, Commercial, etc."},"boundaries":{"description":"Boundaries","tooltip":"Administrative Boundaries"},"water":{"description":"Water Features","tooltip":"Rivers, Lakes, Ponds, Basins, etc."},"rail":{"description":"Rail Features","tooltip":"Railways"},"power":{"description":"Power Features","tooltip":"Power Lines, Power Plants, Substations, etc."},"past_future":{"description":"Past/Future","tooltip":"Proposed, Construction, Abandoned, Demolished, etc."},"others":{"description":"Others","tooltip":"Everything Else"}},"area_fill":{"wireframe":{"description":"No Fill (Wireframe)","tooltip":"Enabling wireframe mode makes it easy to see the background imagery."},"partial":{"description":"Partial Fill","tooltip":"Areas are drawn with fill only around their inner edges. (Recommended for beginner mappers)"},"full":{"description":"Full Fill","tooltip":"Areas are drawn fully filled."}},"restore":{"heading":"You have unsaved changes","description":"Do you wish to restore unsaved changes from a previous editing session?","restore":"Restore","reset":"Reset"},"save":{"title":"Save","help":"Review your changes and upload them to OpenStreetMap, making them visible to other users.","no_changes":"No changes to save.","error":"Errors occurred while trying to save","status_code":"Server returned status code {code}","unknown_error_details":"Please ensure you are connected to the internet.","uploading":"Uploading changes to OpenStreetMap...","unsaved_changes":"You have unsaved changes","conflict":{"header":"Resolve conflicting edits","count":"Conflict {num} of {total}","previous":"< Previous","next":"Next >","keep_local":"Keep mine","keep_remote":"Use theirs","restore":"Restore","delete":"Leave Deleted","download_changes":"Or download your changes.","done":"All conflicts resolved!","help":"Another user changed some of the same map features you changed.\nClick on each feature below for more details about the conflict, and choose whether to keep\nyour changes or the other user's changes.\n"}},"merge_remote_changes":{"conflict":{"deleted":"This feature has been deleted by {user}.","location":"This feature was moved by both you and {user}.","nodelist":"Nodes were changed by both you and {user}.","memberlist":"Relation members were changed by both you and {user}.","tags":"You changed the <b>{tag}</b> tag to \"{local}\" and {user} changed it to \"{remote}\"."}},"success":{"edited_osm":"Edited OSM!","just_edited":"You just edited OpenStreetMap!","view_on_osm":"View on OSM","facebook":"Share on Facebook","twitter":"Share on Twitter","google":"Share on Google+","help_html":"Your changes should appear in the \"Standard\" layer in a few minutes. Other layers, and certain features, may take longer.","help_link_text":"Details","help_link_url":"https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F"},"confirm":{"okay":"OK","cancel":"Cancel"},"splash":{"welcome":"Welcome to the iD OpenStreetMap editor","text":"iD is a friendly but powerful tool for contributing to the world's best free world map. This is version {version}. For more information see {website} and report bugs at {github}.","walkthrough":"Start the Walkthrough","start":"Edit Now"},"source_switch":{"live":"live","lose_changes":"You have unsaved changes. Switching the map server will discard them. Are you sure you want to switch servers?","dev":"dev"},"version":{"whats_new":"What's new in iD {version}"},"tag_reference":{"description":"Description","on_wiki":"{tag} on wiki.osm.org","used_with":"used with {type}"},"validations":{"disconnected_highway":"Disconnected highway","disconnected_highway_tooltip":"Roads should be connected to other roads or building entrances.","old_multipolygon":"Multipolygon tags on outer way","old_multipolygon_tooltip":"This style of multipolygon is deprecated. Please assign the tags to the parent multipolygon instead of the outer way.","untagged_point":"Untagged point","untagged_point_tooltip":"Select a feature type that describes what this point is.","untagged_line":"Untagged line","untagged_line_tooltip":"Select a feature type that describes what this line is.","untagged_area":"Untagged area","untagged_area_tooltip":"Select a feature type that describes what this area is.","untagged_relation":"Untagged relation","untagged_relation_tooltip":"Select a feature type that describes what this relation is.","many_deletions":"You're deleting {n} features. Are you sure you want to do this? This will delete them from the map that everyone else sees on openstreetmap.org.","tag_suggests_area":"The tag {tag} suggests line should be area, but it is not an area","deprecated_tags":"Deprecated tags: {tags}"},"zoom":{"in":"Zoom In","out":"Zoom Out"},"cannot_zoom":"Cannot zoom out further in current mode.","full_screen":"Toggle Full Screen","gpx":{"local_layer":"Local file","drag_drop":"Drag and drop a .gpx, .geojson or .kml file on the page, or click the button to the right to browse","zoom":"Zoom to layer","browse":"Browse for a file"},"mapillary_images":{"tooltip":"Street-level photos from Mapillary","title":"Photo Overlay (Mapillary)"},"mapillary_signs":{"tooltip":"Traffic signs from Mapillary (must enable Photo Overlay)","title":"Traffic Sign Overlay (Mapillary)"},"mapillary":{"view_on_mapillary":"View this image on Mapillary"},"help":{"title":"Help","help":"# Help\n\nThis is an editor for [OpenStreetMap](http://www.openstreetmap.org/), the\nfree and editable map of the world. You can use it to add and update\ndata in your area, making an open-source and open-data map of the world\nbetter for everyone.\n\nEdits that you make on this map will be visible to everyone who uses\nOpenStreetMap. In order to make an edit, you'll need to\n[log in](https://www.openstreetmap.org/login).\n\nThe [iD editor](http://ideditor.com/) is a collaborative project with [source\ncode available on GitHub](https://github.com/openstreetmap/iD).\n","editing_saving":"# Editing & Saving\n\nThis editor is designed to work primarily online, and you're accessing\nit through a website right now.\n\n### Selecting Features\n\nTo select a map feature, like a road or point of interest, click\non it on the map. This will highlight the selected feature, open a panel with\ndetails about it, and show a menu of things you can do with the feature.\n\nTo select multiple features, hold down the 'Shift' key. Then either click\non the features you want to select, or drag on the map to draw a rectangle.\nThis will draw a box and select all the points within it.\n\n### Saving Edits\n\nWhen you make changes like editing roads, buildings, and places, these are\nstored locally until you save them to the server. Don't worry if you make\na mistake - you can undo changes by clicking the undo button, and redo\nchanges by clicking the redo button.\n\nClick 'Save' to finish a group of edits - for instance, if you've completed\nan area of town and would like to start on a new area. You'll have a chance\nto review what you've done, and the editor supplies helpful suggestions\nand warnings if something doesn't seem right about the changes.\n\nIf everything looks good, you can enter a short comment explaining the change\nyou made, and click 'Save' again to post the changes\nto [OpenStreetMap.org](http://www.openstreetmap.org/), where they are visible\nto all other users and available for others to build and improve upon.\n\nIf you can't finish your edits in one sitting, you can leave the editor\nwindow and come back (on the same browser and computer), and the\neditor application will offer to restore your work.\n\n### Using the editor\n\nYou can view a list of keyboard shortcuts by pressing the `?` key.\n","roads":"# Roads\n\nYou can create, fix, and delete roads with this editor. Roads can be all\nkinds: paths, highways, trails, cycleways, and more - any often-crossed\nsegment should be mappable.\n\n### Selecting\n\nClick on a road to select it. An outline should become visible, along\nwith a small tools menu on the map and a sidebar showing more information\nabout the road.\n\n### Modifying\n\nOften you'll see roads that aren't aligned to the imagery behind them\nor to a GPS track. You can adjust these roads so they are in the correct\nplace.\n\nFirst click on the road you want to change. This will highlight it and show\ncontrol points along it that you can drag to better locations. If\nyou want to add new control points for more detail, double-click a part\nof the road without a node, and one will be added.\n\nIf the road connects to another road, but doesn't properly connect on\nthe map, you can drag one of its control points onto the other road in\norder to join them. Having roads connect is important for the map\nand essential for providing driving directions.\n\nYou can also click the 'Move' tool or press the `M` shortcut key to move the entire road at\none time, and then click again to save that movement.\n\n### Deleting\n\nIf a road is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.\n\nYou can delete a road by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.\n\n### Creating\n\nFound somewhere there should be a road but there isn't? Click the 'Line'\nicon in the top-left of the editor or press the shortcut key `2` to start drawing\na line.\n\nClick on the start of the road on the map to start drawing. If the road\nbranches off from an existing road, start by clicking on the place where they connect.\n\nThen click on points along the road so that it follows the right path, according\nto satellite imagery or GPS. If the road you are drawing crosses another road, connect\nit by clicking on the intersection point. When you're done drawing, double-click\nor press 'Return' or 'Enter' on your keyboard.\n","gps":"# GPS\n\nCollected GPS traces are one valuable source of data for OpenStreetMap. This editor\nsupports local traces - `.gpx` files on your local computer. You can collect\nthis kind of GPS trace with a number of smartphone applications as well as\npersonal GPS hardware.\n\nFor information on how to perform a GPS survey, read\n[Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).\n\nTo use a GPX track for mapping, drag and drop the GPX file onto the map\neditor. If it's recognized, it will be added to the map as a bright purple\nline. Click on the 'Map Data' menu on the right side to enable,\ndisable, or zoom to this new GPX-powered layer.\n\nThe GPX track isn't directly uploaded to OpenStreetMap - the best way to\nuse it is to draw on the map, using it as a guide for the new features that\nyou add, and also to [upload it to OpenStreetMap](http://www.openstreetmap.org/trace/create)\nfor other users to use.\n","imagery":"# Imagery\n\nAerial imagery is an important resource for mapping. A combination of\nairplane flyovers, satellite views, and freely-compiled sources are available\nin the editor under the 'Background Settings' menu on the right.\n\nBy default a [Bing Maps](http://www.bing.com/maps/) satellite layer is\npresented in the editor, but as you pan and zoom the map to new geographical\nareas, new sources will become available. Some countries, like the United\nStates, France, and Denmark have very high-quality imagery available for some areas.\n\nImagery is sometimes offset from the map data because of a mistake on the\nimagery provider's side. If you see a lot of roads shifted from the background,\ndon't immediately move them all to match the background. Instead you can adjust\nthe imagery so that it matches the existing data by clicking 'Fix alignment' at\nthe bottom of the Background Settings UI.\n","addresses":"# Addresses\n\nAddresses are some of the most useful information for the map.\n\nAlthough addresses are often represented as parts of streets, in OpenStreetMap\nthey're recorded as attributes of buildings and places along streets.\n\nYou can add address information to places mapped as building outlines\nas well as those mapped as single points. The optimal source of address\ndata is from an on-the-ground survey or personal knowledge - as with any\nother feature, copying from commercial sources like Google Maps is strictly\nforbidden.\n","inspector":"# Using the Inspector\n\nThe inspector is the section on the left side of the page that allows you to\nedit the details of the selected feature.\n\n### Selecting a Feature Type\n\nAfter you add a point, line, or area, you can choose what type of feature it\nis, like whether it's a highway or residential road, supermarket or cafe.\nThe inspector will display buttons for common feature types, and you can\nfind others by typing what you're looking for in the search box.\n\nClick the 'i' in the bottom-right-hand corner of a feature type button to\nlearn more about it. Click a button to choose that type.\n\n### Using Forms and Editing Tags\n\nAfter you choose a feature type, or when you select a feature that already\nhas a type assigned, the inspector will display fields with details about\nthe feature like its name and address.\n\nBelow the fields you see, you can click the 'Add field' dropdown to add\nother details, like a Wikipedia link, wheelchair access, and more.\n\nAt the bottom of the inspector, click 'Additional tags' to add arbitrary\nother tags to the element. [Taginfo](http://taginfo.openstreetmap.org/) is a\ngreat resource for learn more about popular tag combinations.\n\nChanges you make in the inspector are automatically applied to the map.\nYou can undo them at any time by clicking the 'Undo' button.\n","buildings":"# Buildings\n\nOpenStreetMap is the world's largest database of buildings. You can create\nand improve this database.\n\n### Selecting\n\nYou can select a building by clicking on its border. This will highlight the\nbuilding and open a small tools menu and a sidebar showing more information\nabout the building.\n\n### Modifying\n\nSometimes buildings are incorrectly placed or have incorrect tags.\n\nTo move an entire building, select it, then click the 'Move' tool. Move your\nmouse to shift the building, and click when it's correctly placed.\n\nTo fix the specific shape of a building, click and drag the nodes that form\nits border into better places.\n\n### Creating\n\nOne of the main questions around adding buildings to the map is that\nOpenStreetMap records buildings both as shapes and points. The rule of thumb\nis to _map a building as a shape whenever possible_, and map companies, homes,\namenities, and other things that operate out of buildings as points placed\nwithin the building shape.\n\nStart drawing a building as a shape by clicking the 'Area' button in the top\nleft of the interface, and end it either by pressing 'Return' on your keyboard\nor clicking on the first node drawn to close the shape.\n\n### Deleting\n\nIf a building is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the building could simply be newly built.\n\nYou can delete a building by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.\n","relations":"# Relations\n\nA relation is a special type of feature in OpenStreetMap that groups together\nother features. For example, two common types of relations are *route relations*,\nwhich group together sections of road that belong to a specific freeway or\nhighway, and *multipolygons*, which group together several lines that define\na complex area (one with several pieces or holes in it like a donut).\n\nThe group of features in a relation are called *members*. In the sidebar, you can\nsee which relations a feature is a member of, and click on a relation there\nto select the it. When the relation is selected, you can see all of its\nmembers listed in the sidebar and highlighted on the map.\n\nFor the most part, iD will take care of maintaining relations automatically\nwhile you edit. The main thing you should be aware of is that if you delete a\nsection of road to redraw it more accurately, you should make sure that the\nnew section is a member of the same relations as the original.\n\n## Editing Relations\n\nIf you want to edit relations, here are the basics.\n\nTo add a feature to a relation, select the feature, click the \"+\" button in the\n\"All relations\" section of the sidebar, and select or type the name of the relation.\n\nTo create a new relation, select the first feature that should be a member,\nclick the \"+\" button in the \"All relations\" section, and select \"New relation...\".\n\nTo remove a feature from a relation, select the feature and click the trash\nbutton next to the relation you want to remove it from.\n\nYou can create multipolygons with holes using the \"Merge\" tool. Draw two areas (inner\nand outer), hold the Shift key and click on each of them to select them both, and then\nclick the \"Merge\" (+) button.\n"},"intro":{"done":"done","ok":"OK","graph":{"block_number":"<value for addr:block_number>","city":"Three Rivers","county":"<value for addr:county>","district":"<value for addr:district>","hamlet":"<value for addr:hamlet>","neighbourhood":"<value for addr:neighbourhood>","postcode":"49093","province":"<value for addr:province>","quarter":"<value for addr:quarter>","state":"MI","subdistrict":"<value for addr:subdistrict>","suburb":"<value for addr:suburb>","countrycode":"us","name":{"1st-avenue":"1st Avenue","2nd-avenue":"2nd Avenue","4th-avenue":"4th Avenue","5th-avenue":"5th Avenue","6th-avenue":"6th Avenue","6th-street":"6th Street","7th-avenue":"7th Avenue","8th-avenue":"8th Avenue","9th-avenue":"9th Avenue","10th-avenue":"10th Avenue","11th-avenue":"11th Avenue","12th-avenue":"12th Avenue","access-point-employment":"Access Point Employment","adams-street":"Adams Street","andrews-elementary-school":"Andrews Elementary School","andrews-street":"Andrews Street","armitage-street":"Armitage Street","barrows-school":"Barrows School","battle-street":"Battle Street","bennett-street":"Bennett Street","bowman-park":"Bowman Park","collins-drive":"Collins Drive","conrail-railroad":"Conrail Railroad","conservation-park":"Conservation Park","constantine-street":"Constantine Street","cushman-street":"Cushman Street","dollar-tree":"Dollar Tree","douglas-avenue":"Douglas Avenue","east-street":"East Street","elm-street":"Elm Street","flower-street":"Flower Street","foster-street":"Foster Street","french-street":"French Street","garden-street":"Garden Street","gem-pawnbroker":"Gem Pawnbroker","golden-finch-framing":"Golden Finch Framing","grant-avenue":"Grant Avenue","hoffman-pond":"Hoffman Pond","hoffman-street":"Hoffman Street","hook-avenue":"Hook Avenue","jefferson-street":"Jefferson Street","kelsey-street":"Kelsey Street","lafayette-park":"LaFayette Park","las-coffee-cafe":"L.A.'s Coffee Cafe","lincoln-avenue":"Lincoln Avenue","lowrys-books":"Lowry's Books","lynns-garage":"Lynn's Garage","main-street-barbell":"Main Street Barbell","main-street-cafe":"Main Street Cafe","main-street-fitness":"Main Street Fitness","main-street":"Main Street","maple-street":"Maple Street","marina-park":"Marina Park","market-street":"Market Street","memory-isle-park":"Memory Isle Park","memory-isle":"Memory Isle","michigan-avenue":"Michigan Avenue","middle-street":"Middle Street","millard-street":"Millard Street","moore-street":"Moore Street","morris-avenue":"Morris Avenue","mural-mall":"Mural Mall","paisanos-bar-and-grill":"Paisano's Bar and Grill","paisley-emporium":"Paisley Emporium","paparazzi-tattoo":"Paparazzi Tattoo","pealer-street":"Pealer Street","pine-street":"Pine Street","pizza-hut":"Pizza Hut","portage-avenue":"Portage Avenue","portage-river":"Portage River","preferred-insurance-services":"Preferred Insurance Services","railroad-drive":"Railroad Drive","river-city-appliance":"River City Appliance","river-drive":"River Drive","river-road":"River Road","river-street":"River Street","riverside-cemetery":"Riverside Cemetery","riverwalk-trail":"Riverwalk Trail","riviera-theatre":"Riviera Theatre","rocky-river":"Rocky River","saint-joseph-river":"Saint Joseph River","scidmore-park-petting-zoo":"Scidmore Park Petting Zoo","scidmore-park":"Scidmore Park","scouter-park":"Scouter Park","sherwin-williams":"Sherwin-Williams","south-street":"South Street","southern-michigan-bank":"Southern Michigan Bank","spring-street":"Spring Street","sturgeon-river-road":"Sturgeon River Road","three-rivers-city-hall":"Three Rivers City Hall","three-rivers-elementary-school":"Three Rivers Elementary School","three-rivers-fire-department":"Three Rivers Fire Department","three-rivers-high-school":"Three Rivers High School","three-rivers-middle-school":"Three Rivers Middle School","three-rivers-municipal-airport":"Three Rivers Municipal Airport","three-rivers-post-office":"Three Rivers Post Office","three-rivers-public-library":"Three Rivers Public Library","three-rivers":"Three Rivers","unique-jewelry":"Unique Jewelry","walnut-street":"Walnut Street","washington-street":"Washington Street","water-street":"Water Street","west-street":"West Street","wheeler-street":"Wheeler Street","william-towing":"William Towing","willow-drive":"Willow Drive","wood-street":"Wood Street","world-fare":"World Fare"}},"welcome":{"title":"Welcome","welcome":"Welcome! This walkthrough will teach you the basics of editing on OpenStreetMap.","practice":"All of the data in this walkthrough is just for practicing, and any edits that you make in the walkthrough will not be saved.","words":"This walkthrough will introduce some new words and concepts. When we introduce a new word, we'll use *italics*.","mouse":"You can use any input device to edit the map, but this walkthrough assumes you have a mouse with left and right buttons. **If you want to attach a mouse, do so now, then click OK.**","leftclick":"When this tutorial asks you to click or double-click, we mean with the left button. On a trackpad it might be a single-click or single-finger tap. **Left-click {num} times.**","rightclick":"Sometimes we'll also ask you to right-click. This might be the same as control-click, or two-finger tap on a trackpad. Your keyboard might even have a 'menu' key that works like right-click. **Right-click {num} times.**","chapters":"So far, so good! You can use the buttons below to skip chapters at any time or to restart a chapter if you get stuck. Let's begin! **Click '{next}' to continue.**"},"navigation":{"title":"Navigation","drag":"The main map area shows OpenStreetMap data on top of a background.{br}You can drag the map by pressing and holding the left mouse button while moving the mouse around. You can also use the arrow keys on your keyboard. **Drag the map!**","zoom":"You can zoom in or out by scrolling with the mouse wheel or trackpad, or by clicking the {plus} / {minus} buttons. **Zoom the map!**","features":"We use the word *features* to describe the things that appear on the map. Anything in the real world can be mapped as a feature on OpenStreetMap.","points_lines_areas":"Map features are represented using *points, lines, or areas.*","nodes_ways":"In OpenStreetMap, points are sometimes called *nodes*, and lines and areas are sometimes called *ways*.","click_townhall":"All features on the map can be selected by clicking on them. **Click on the point to select it.**","selected_townhall":"Great! The point is now selected. Selected features are drawn with a pulsing glow.","editor_townhall":"When a feature is selected, the *feature editor* is displayed alongside the map.","preset_townhall":"The top part of the feature editor shows the feature's type. This point is a {preset}.","fields_townhall":"The middle part of the feature editor contains *fields* showing the feature's attributes, such as its name and address.","close_townhall":"**Close the feature editor by hitting escape or pressing the {button} button in the upper corner.**","search_street":"You can also search for features in the current view, or worldwide. **Search for '{name}'.**","choose_street":"**Choose {name} from the list to select it.**","selected_street":"Great! {name} is now selected.","editor_street":"The fields shown for a street are different than the fields that were shown for the town hall.{br}For this selected street, the feature editor shows fields like '{field1}' and '{field2}'. **Close the feature editor by hitting escape or pressing the {button} button.**","play":"Try moving the map and clicking on some other features to see what kinds of things can be added to OpenStreetMap. **When you are ready to continue to the next chapter, click '{next}'.**"},"points":{"title":"Points","add_point":"*Points* can be used to represent features such as shops, restaurants, and monuments.{br}They mark a specific location, and describe what's there. **Click the {button} Point button to add a new point.**","place_point":"To place the new point on the map, position your mouse cursor where the point should go, then left-click or press the spacebar. **Move the mouse pointer over this building, then left-click or press the spacebar.**","search_cafe":"There are many different features that can be represented by points. The point you just added is a cafe. **Search for '{preset}'.**","choose_cafe":"**Choose {preset} from the list.**","feature_editor":"The point is now marked as a cafe. Using the feature editor, we can add more information about the cafe.","add_name":"In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.{br}Let's pretend that you have local knowledge of this cafe, and you know its name. **Add a name for the cafe.**","add_close":"The feature editor will remember all of your changes automatically. **When you are finished adding the name, hit escape, enter, or click the {button} button to close the feature editor.**","reselect":"Often points will already exist, but have mistakes or be incomplete. We can edit existing points. **Click to select the cafe you just created.**","update":"Let's fill in some more details for this cafe. You can change its name, add a cuisine, or add an address. **Change the cafe details.**","update_close":"**When you are finished updating the cafe, hit escape, enter, or click the {button} button to close the feature editor.**","rightclick":"You can right-click on any feature to see the *edit menu*, which shows a list of editing operations that can be performed. **Right-click to select the point you created and show the edit menu.**","delete":"It's OK to delete features that don't exist in the real world.{br}Deleting a feature from OpenStreetMap removes it from the map that everyone uses, so you should make sure a feature is really gone before you delete it. **Click on the {button} button to delete the point.**","undo":"You can always undo any changes up until you save your edits to OpenStreetMap. **Click on the {button} button to undo the delete and get the point back.**","play":"Now that you know how to create and edit points, try creating a few more points for practice! **When you are ready to continue to the next chapter, click '{next}'.**"},"areas":{"title":"Areas","add_playground":"*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas.{br}They can be also be used for more detailed mapping of many features you might normally map as points. **Click the {button} Area button to add a new area.**","start_playground":"Let's add this playground to the map by drawing an area. Areas are drawn by placing *nodes* along the outer edge of the feature. **Click or press spacebar to place a starting node on one of the corners of the playground.**","continue_playground":"Continue drawing the area by placing more nodes along the playground's edge. It is OK to connect the area to the existing walking paths.{br}Tip: You can hold down the Alt key to prevent nodes from connecting to other features. **Continue drawing an area for the playground.**","finish_playground":"Finish the area by pressing enter, or clicking again on either the first or last node. **Finish drawing an area for the playground.**","search_playground":"**Search for '{preset}'.**","choose_playground":"**Choose {preset} from the list.**","add_field":"This playground doesn't have an official name, so we won't add anything in the Name field.{br}Instead let's add some additional details about the playground to the Description field. **Open the Add Field list.**","choose_field":"**Choose {field} from the list.**","retry_add_field":"You didn't select the {field} field. Let's try again.","describe_playground":"**Add a description, then click the {button} button to close the feature editor.**","play":"Good job! Try drawing a few more areas, and see what other kinds of area features you can add to OpenStreetMap. **When you are ready to continue to the next chapter, click '{next}'.**"},"lines":{"title":"Lines","add_line":"*Lines* are used to represent features such as roads, railroads, and rivers. **Click the {button} Line button to add a new line.**","start_line":"Here is a road that is missing. Let's add it!{br}In OpenStreetMap, lines should be drawn down the center of the road. You can drag and zoom the map while drawing if necessary. **Start a new line by clicking at the top end of this missing road.**","intersect":"Click or press spacebar to add more nodes to the line.{br}Roads, and many other types of lines, are part of a larger network. It is important for these lines to be connected properly in order for routing applications to work. **Click on {name} to create an intersection connecting the two lines.**","retry_intersect":"The road needs to intersect {name}. Let's try again!","continue_line":"Continue drawing the line for the new road. Remember that you can drag and zoom the map if needed.{br}When you are finished drawing, click on the last node again. **Finish drawing the road.**","choose_category_road":"**Select {category} from the list.**","choose_preset_residential":"There are many different types of roads, but this one is a residential road. **Choose the {preset} type.**","retry_preset_residential":"You didn't select the {preset} type. **Click here to choose again.**","name_road":"**Give this road a name, then hit escape, enter, or click the {button} button to close the feature editor.**","did_name_road":"Looks good! Next we will learn how to update the shape of a line.","update_line":"Sometimes you will need to change the shape of an existing line. Here is a road that doesn't look quite right.","add_node":"We can add some nodes to this line to improve its shape. One way to add a node is to double-click the line where you want to add a node. **Double-click on the line to create a new node.**","start_drag_endpoint":"When a line is selected, you can drag any of its nodes by clicking and holding down the left mouse button while you drag. **Drag the endpoint to the place where these roads should intersect.**","finish_drag_endpoint":"This spot looks good. **Release the left mouse button to finish dragging.**","start_drag_midpoint":"Small triangles are drawn at the *midpoints* between nodes. Another way to create a new node is to drag a midpoint to a new location. **Drag the midpoint triangle to create a new node along the curve of the road.**","continue_drag_midpoint":"This line is looking much better! Continue to adjust this line by double-clicking or dragging midpoints until the curve matches the road shape. **When you're happy with how the line looks, click OK.**","delete_lines":"It's OK to delete lines for roads that don't exist in the real world.{br}Here's an example where the city planned a {street} but never built it. We can improve this part of the map by deleting the extra lines.","rightclick_intersection":"The last real street is {street1}, so we will *split* {street2} at this intersection and remove everything above it. **Right click on the intersection node.**","split_intersection":"**Click on the {button} button to split {street}.**","retry_split":"You didn't click the Split button. Try again.","did_split_multi":"Good job! {street1} is now split into two pieces. The top part can be removed. **Click the top part of {street2} to select it.**","did_split_single":"**Click the top part of {street2} to select it.**","multi_select":"{selected} is now selected. Let's also select {other1}. You can shift-click to select multiple things. **Shift-click on {other2}.**","multi_rightclick":"Good! Both lines to delete are now selected. **Right-click on one of the lines to show the edit menu.**","multi_delete":"**Click on the {button} button to delete the extra lines.**","retry_delete":"You didn't click the Delete button. Try again.","play":"Great! Use the skills that you've learned in this chapter to practice editing some more lines. **When you are ready to continue to the next chapter, click '{next}'.**"},"buildings":{"title":"Buildings","add_building":"OpenStreetMap is the world's largest database of buildings.{br}You can help improve this database by tracing buildings that aren't already mapped. **Click the {button} Area button to add a new area.**","start_building":"Let's add this house to the map by tracing its outline.{br}Buildings should be traced around their footprint as accurately as possible. **Click or press spacebar to place a starting node on one of the corners of the building.**","continue_building":"Continue adding more nodes to trace the outline of the building. Remember that you can zoom in if you want to add more details.{br}Finish the building by pressing enter, or clicking again on either the first or last node. **Finish tracing the building.**","retry_building":"It looks like you had some trouble placing the nodes at the building corners. Try again!","choose_category_building":"**Choose {category} from the list.**","choose_preset_house":"There are many different types of buildings, but this one is clearly a house.{br}If you're not sure of the type, it's OK to just choose the generic Building type. **Choose the {preset} type.**","close":"**Hit escape or click the {button} button to close the feature editor.**","rightclick_building":"**Right-click to select the building you created and show the edit menu.**","square_building":"The house that you just added will look even better with perfectly square corners. **Click on the {button} button to square the building shape.**","retry_square":"You didn't click the Square button. Try again.","done_square":"See how the corners of the building moved into place? Let's learn another useful trick.","add_tank":"Next we'll trace this circular storage tank. **Click the {button} Area button to add a new area.**","start_tank":"Don't worry, you won't need to draw a perfect circle. Just draw an area inside the tank that touches its edge. **Click or press spacebar to place a starting node on the edge of the tank.**","continue_tank":"Add a few more nodes around the edge. The circle will be created outside the nodes that you draw.{br}Finish the area by pressing enter, or clicking again on either the first or last node. **Finish tracing the tank.**","search_tank":"**Search for '{preset}'.**","choose_tank":"**Choose {preset} from the list.**","rightclick_tank":"**Right-click to select the storage tank you created and show the edit menu.**","circle_tank":"**Click on the {button} button to make the tank a circle.**","retry_circle":"You didn't click the Circularize button. Try again.","play":"Great Job! Practice tracing a few more buildings, and try some of the other commands on the edit menu. **When you are ready to continue to the next chapter, click '{next}'.**"},"startediting":{"title":"Start Editing","help":"You're now ready to edit OpenStreetMap!{br}You can replay this walkthrough anytime or view more documentation by clicking the {button} Help button.","save":"Don't forget to regularly save your changes!","start":"Start mapping!"}},"shortcuts":{"title":"Keyboard shortcuts","tooltip":"Show the keyboard shortcuts screen.","key":{"alt":"Alt","backspace":"Backspace","cmd":"Cmd","ctrl":"Ctrl","delete":"Delete","del":"Del","end":"End","enter":"Enter","esc":"Esc","home":"Home","option":"Option","pause":"Pause","pgdn":"PgDn","pgup":"PgUp","return":"Return","shift":"Shift","space":"Space"},"gesture":{"drag":"drag"},"or":"-or-","browsing":{"title":"Browsing","navigation":{"title":"Navigation","pan":"Pan map","pan_more":"Pan map by one screenful","zoom":"Zoom in / Zoom out","zoom_more":"Zoom in / Zoom out by a lot"},"help":{"title":"Help","help":"Show help/documentation","keyboard":"Show keyboard shortcuts"},"display_options":{"title":"Display options","background":"Show background options","background_switch":"Switch back to last background","map_data":"Show map data options","fullscreen":"Enter full screen mode","wireframe":"Toggle wireframe mode","minimap":"Toggle minimap"},"selecting":{"title":"Selecting features","select_one":"Select a single feature","select_multi":"Select multiple features","lasso":"Draw a selection lasso around features"},"with_selected":{"title":"With feature selected","infobox":"Toggle info / measurement box","edit_menu":"Toggle edit menu"},"vertex_selected":{"title":"With node selected","previous":"Jump to previous node","next":"Jump to next node","first":"Jump to first node","last":"Jump to last node","change_parent":"Switch parent way"}},"editing":{"title":"Editing","drawing":{"title":"Drawing","add_point":"'Add point' mode","add_line":"'Add line' mode","add_area":"'Add area' mode","place_point":"Place a point","disable_snap":"Hold to disable point snapping","stop_line":"Finish drawing a line or area"},"operations":{"title":"Operations","continue_line":"Continue a line at the selected node","merge":"Combine (merge) selected features","disconnect":"Disconnect features at the selected node","split":"Split a line into two at the selected node","reverse":"Reverse a line","move":"Move selected features","rotate":"Rotate selected features","orthogonalize":"Straighten line / Square area corners","circularize":"Circularize a closed line or area","reflect_long":"Reflect features across the longer axis","reflect_short":"Reflect features across the shorter axis","delete":"Delete selected features"},"commands":{"title":"Commands","copy":"Copy selected features","paste":"Paste copied features","undo":"Undo last action","redo":"Redo last action","save":"Save changes"}}},"presets":{"categories":{"category-barrier":{"name":"Barrier Features"},"category-building":{"name":"Building Features"},"category-golf":{"name":"Golf Features"},"category-landuse":{"name":"Land Use Features"},"category-natural-area":{"name":"Natural Features"},"category-natural-line":{"name":"Natural Features"},"category-natural-point":{"name":"Natural Features"},"category-path":{"name":"Path Features"},"category-rail":{"name":"Rail Features"},"category-restriction":{"name":"Restriction Features"},"category-road":{"name":"Road Features"},"category-route":{"name":"Route Features"},"category-water-area":{"name":"Water Features"},"category-water-line":{"name":"Water Features"}},"fields":{"access_simple":{"label":"Allowed Access"},"access_toilets":{"label":"Access"},"access":{"label":"Allowed Access","placeholder":"Not Specified","types":{"access":"All","foot":"Foot","motor_vehicle":"Motor Vehicles","bicycle":"Bicycles","horse":"Horses"},"options":{"yes":{"title":"Allowed","description":"Access permitted by law; a right of way"},"no":{"title":"Prohibited","description":"Access not permitted to the general public"},"permissive":{"title":"Permissive","description":"Access permitted until such time as the owner revokes the permission"},"private":{"title":"Private","description":"Access permitted only with permission of the owner on an individual basis"},"designated":{"title":"Designated","description":"Access permitted according to signs or specific local laws"},"destination":{"title":"Destination","description":"Access permitted only to reach a destination"},"dismount":{"title":"Dismount","description":"Access permitted but rider must dismount"}}},"address":{"label":"Address","placeholders":{"block_number":"Block Number","block_number!jp":"Block No.","city":"City","city!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town","conscriptionnumber":"123","country":"Country","county":"County","county!jp":"District","district":"District","district!vn":"Arrondissement/Town/District","floor":"Floor","hamlet":"Hamlet","housename":"Housename","housenumber":"123","housenumber!jp":"Building No./Lot No.","neighbourhood":"Neighbourhood","neighbourhood!jp":"Chōme/Aza/Koaza","place":"Place","postcode":"Postcode","province":"Province","province!jp":"Prefecture","quarter":"Quarter","quarter!jp":"Ōaza/Machi","state":"State","street":"Street","subdistrict":"Subdistrict","subdistrict!vn":"Ward/Commune/Townlet","suburb":"Suburb","suburb!jp":"Ward"}},"admin_level":{"label":"Admin Level"},"aerialway":{"label":"Type"},"aerialway/access":{"label":"Access","options":{"entry":"Entry","exit":"Exit","both":"Both"}},"aerialway/bubble":{"label":"Bubble"},"aerialway/capacity":{"label":"Capacity (per hour)","placeholder":"500, 2500, 5000..."},"aerialway/duration":{"label":"Duration (minutes)","placeholder":"1, 2, 3..."},"aerialway/heating":{"label":"Heated"},"aerialway/occupancy":{"label":"Occupancy","placeholder":"2, 4, 8..."},"aerialway/summer/access":{"label":"Access (summer)","options":{"entry":"Entry","exit":"Exit","both":"Both"}},"aeroway":{"label":"Type"},"amenity":{"label":"Type"},"animal_boarding":{"label":"For Animals"},"animal_breeding":{"label":"For Animals"},"animal_shelter":{"label":"For Animals"},"area/highway":{"label":"Type"},"artist":{"label":"Artist"},"artwork_type":{"label":"Type"},"atm":{"label":"ATM"},"backrest":{"label":"Backrest"},"barrier":{"label":"Type"},"bath/open_air":{"label":"Open Air"},"bath/sand_bath":{"label":"Sand Bath"},"bath/type":{"label":"Specialty","options":{"onsen":"Japanese Onsen","foot_bath":"Foot Bath","hot_spring":"Hot Spring"}},"beauty":{"label":"Shop Type"},"bench":{"label":"Bench"},"bicycle_parking":{"label":"Type"},"bin":{"label":"Waste Bin"},"blood_components":{"label":"Blood Components","options":{"whole":"whole blood","plasma":"plasma","platelets":"platelets","stemcells":"stem cell samples"}},"board_type":{"label":"Type"},"boundary":{"label":"Type"},"brand":{"label":"Brand"},"building_area":{"label":"Building"},"building":{"label":"Building"},"bunker_type":{"label":"Type"},"camera/direction":{"label":"Direction (Degrees Clockwise)","placeholder":"45, 90, 180, 270"},"camera/mount":{"label":"Camera Mount"},"camera/type":{"label":"Camera Type","options":{"fixed":"Fixed","panning":"Panning","dome":"Dome"}},"capacity":{"label":"Capacity","placeholder":"50, 100, 200..."},"cardinal_direction":{"label":"Direction","options":{"N":"North","E":"East","S":"South","W":"West","NE":"Northeast","SE":"Southeast","SW":"Southwest","NW":"Northwest","NNE":"North-northeast","ENE":"East-northeast","ESE":"East-southeast","SSE":"South-southeast","SSW":"South-southwest","WSW":"West-southwest","WNW":"West-northwest","NNW":"North-northwest"}},"castle_type":{"label":"Type"},"clock_direction":{"label":"Direction","options":{"clockwise":"Clockwise","anticlockwise":"Counterclockwise"}},"club":{"label":"Type"},"collection_times":{"label":"Collection Times"},"communication_multi":{"label":"Communication Types"},"construction":{"label":"Type"},"contact/webcam":{"label":"Webcam URL","placeholder":"http://example.com/"},"content":{"label":"Contents"},"country":{"label":"Country"},"covered":{"label":"Covered"},"craft":{"label":"Type"},"crop":{"label":"Crops"},"crossing":{"label":"Type"},"cuisine":{"label":"Cuisines"},"currency_multi":{"label":"Currency Types"},"cycle_network":{"label":"Network"},"cycleway":{"label":"Bike Lanes","placeholder":"none","types":{"cycleway:left":"Left side","cycleway:right":"Right side"},"options":{"none":{"title":"None","description":"No bike lane"},"lane":{"title":"Standard bike lane","description":"A bike lane separated from auto traffic by a painted line"},"shared_lane":{"title":"Shared bike lane","description":"A bike lane with no separation from auto traffic"},"track":{"title":"Bike track","description":"A bike lane separated from traffic by a physical barrier"},"share_busway":{"title":"Bike lane shared with bus","description":"A bike lane shared with a bus lane"},"opposite_lane":{"title":"Opposite bike lane","description":"A bike lane that travels in the opposite direction of traffic"},"opposite":{"title":"Contraflow bike lane","description":"A bike lane that travels in both directions on a one-way street"}}},"date":{"label":"Date"},"delivery":{"label":"Delivery"},"denomination":{"label":"Denomination"},"denotation":{"label":"Denotation"},"description":{"label":"Description"},"diaper":{"label":"Diaper Changing Available"},"display":{"label":"Display"},"dock":{"label":"Type"},"drive_through":{"label":"Drive-Through"},"electrified":{"label":"Electrification","placeholder":"Contact Line, Electrified Rail...","options":{"contact_line":"Contact Line","rail":"Electrified Rail","yes":"Yes (unspecified)","no":"No"}},"elevation":{"label":"Elevation"},"email":{"label":"Email","placeholder":"example@example.com"},"emergency":{"label":"Emergency"},"entrance":{"label":"Type"},"except":{"label":"Exceptions"},"fax":{"label":"Fax","placeholder":"+31 42 123 4567"},"fee":{"label":"Fee"},"fence_type":{"label":"Type"},"fire_hydrant/position":{"label":"Position","options":{"lane":"Lane","parking_lot":"Parking Lot","sidewalk":"Sidewalk","green":"Green"}},"fire_hydrant/type":{"label":"Type","options":{"pillar":"Pillar/Aboveground","underground":"Underground","wall":"Wall","pond":"Pond"}},"fixme":{"label":"Fix Me"},"fuel_multi":{"label":"Fuel Types"},"fuel":{"label":"Fuel"},"gauge":{"label":"Gauge"},"gender":{"label":"Gender","placeholder":"Unknown","options":{"male":"Male","female":"Female","unisex":"Unisex"}},"generator/method":{"label":"Method"},"generator/source":{"label":"Source"},"generator/type":{"label":"Type"},"golf_hole":{"label":"Reference","placeholder":"Hole number (1-18)"},"grape_variety":{"label":"Grape Varieties"},"handicap":{"label":"Handicap","placeholder":"1-18"},"handrail":{"label":"Handrail"},"height":{"label":"Height (Meters)"},"highway":{"label":"Type"},"historic":{"label":"Type"},"historic/civilization":{"label":"Historic Civilization"},"hoops":{"label":"Hoops","placeholder":"1, 2, 4..."},"iata":{"label":"IATA"},"icao":{"label":"ICAO"},"incline_steps":{"label":"Incline","options":{"up":"Up","down":"Down"}},"incline":{"label":"Incline"},"indoor":{"label":"Indoor"},"information":{"label":"Type"},"inscription":{"label":"Inscription"},"internet_access":{"label":"Internet Access","options":{"yes":"Yes","no":"No","wlan":"Wifi","wired":"Wired","terminal":"Terminal"}},"internet_access/fee":{"label":"Internet Access Fee"},"internet_access/ssid":{"label":"SSID (Network Name)"},"kerb":{"label":"Curb"},"lamp_type":{"label":"Type"},"landuse":{"label":"Type"},"lanes":{"label":"Lanes","placeholder":"1, 2, 3..."},"layer":{"label":"Layer"},"leaf_cycle_singular":{"label":"Leaf Cycle","options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous"}},"leaf_cycle":{"label":"Leaf Cycle","options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous","mixed":"Mixed"}},"leaf_type_singular":{"label":"Leaf Type","options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","leafless":"Leafless"}},"leaf_type":{"label":"Leaf Type","options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","mixed":"Mixed","leafless":"Leafless"}},"leisure":{"label":"Type"},"length":{"label":"Length (Meters)"},"level":{"label":"Level"},"levels":{"label":"Levels","placeholder":"2, 4, 6..."},"lit":{"label":"Lit"},"location":{"label":"Location"},"man_made":{"label":"Type"},"map_size":{"label":"Coverage"},"map_type":{"label":"Type"},"maxheight":{"label":"Max Height","placeholder":"4, 4.5, 5, 14'0\", 14'6\", 15'0\""},"maxspeed":{"label":"Speed Limit","placeholder":"40, 50, 60..."},"maxstay":{"label":"Max Stay"},"maxweight":{"label":"Max Weight"},"mtb/scale":{"label":"Mountain Biking Difficulty","placeholder":"0, 1, 2, 3...","options":{"0":"0: Solid gravel/packed earth, no obstacles, wide curves","1":"1: Some loose surface, small obstacles, wide curves","2":"2: Much loose surface, large obstacles, easy hairpins","3":"3: Slippery surface, large obstacles, tight hairpins","4":"4: Loose surface or boulders, dangerous hairpins","5":"5: Maximum difficulty, boulder fields, landslides","6":"6: Not rideable except by the very best mountain bikers"}},"mtb/scale/imba":{"label":"IMBA Trail Difficulty","placeholder":"Easy, Medium, Difficult...","options":{"0":"Easiest (white circle)","1":"Easy (green circle)","2":"Medium (blue square)","3":"Difficult (black diamond)","4":"Extremely Difficult (double black diamond)"}},"mtb/scale/uphill":{"label":"Mountain Biking Uphill Difficulty","placeholder":"0, 1, 2, 3...","options":{"0":"0: Avg. incline <10%, gravel/packed earth, no obstacles","1":"1: Avg. incline <15%, gravel/packed earth, few small objects","2":"2: Avg. incline <20%, stable surface, fistsize rocks/roots","3":"3: Avg. incline <25%, variable surface, fistsize rocks/branches","4":"4: Avg. incline <30%, poor condition, big rocks/branches","5":"5: Very steep, bike generally needs to be pushed or carried"}},"name":{"label":"Name","placeholder":"Common name (if any)"},"natural":{"label":"Natural"},"network_bicycle":{"label":"Network Type","placeholder":"Local, Regional, National, International","options":{"lcn":"Local","rcn":"Regional","ncn":"National","icn":"International"}},"network_foot":{"label":"Network Type","placeholder":"Local, Regional, National, International","options":{"lwn":"Local","rwn":"Regional","nwn":"National","iwn":"International"}},"network_horse":{"label":"Network Type","placeholder":"Local, Regional, National, International","options":{"lhn":"Local","rhn":"Regional","nhn":"National","ihn":"International"}},"network_road":{"label":"Network"},"network":{"label":"Network"},"note":{"label":"Note"},"office":{"label":"Type"},"oneway_yes":{"label":"One Way","options":{"undefined":"Assumed to be Yes","yes":"Yes","no":"No"}},"oneway":{"label":"One Way","options":{"undefined":"Assumed to be No","yes":"Yes","no":"No"}},"opening_hours":{"label":"Hours"},"operator":{"label":"Operator"},"outdoor_seating":{"label":"Outdoor Seating"},"par":{"label":"Par","placeholder":"3, 4, 5..."},"parallel_direction":{"label":"Direction","options":{"forward":"Forward","backward":"Backward"}},"park_ride":{"label":"Park and Ride"},"parking":{"label":"Type","options":{"surface":"Surface","multi-storey":"Multilevel","underground":"Underground","sheds":"Sheds","carports":"Carports","garage_boxes":"Garage Boxes","lane":"Roadside Lane"}},"payment_multi":{"label":"Payment Types"},"phone":{"label":"Phone","placeholder":"+31 42 123 4567"},"piste/difficulty":{"label":"Difficulty","placeholder":"Easy, Intermediate, Advanced...","options":{"novice":"Novice (instructional)","easy":"Easy (green circle)","intermediate":"Intermediate (blue square)","advanced":"Advanced (black diamond)","expert":"Expert (double black diamond)","freeride":"Freeride (off-piste)","extreme":"Extreme (climbing equipment required)"}},"piste/grooming":{"label":"Grooming","options":{"classic":"Classic","mogul":"Mogul","backcountry":"Backcountry","classic+skating":"Classic and Skating","scooter":"Scooter/Snowmobile","skating":"Skating"}},"piste/type":{"label":"Type","options":{"downhill":"Downhill","nordic":"Nordic","skitour":"Skitour","sled":"Sled","hike":"Hike","sleigh":"Sleigh","ice_skate":"Ice Skate","snow_park":"Snow Park","playground":"Playground"}},"place":{"label":"Type"},"plant":{"label":"Plant"},"population":{"label":"Population"},"power_supply":{"label":"Power Supply"},"power":{"label":"Type"},"produce":{"label":"Produce"},"product":{"label":"Products"},"railway":{"label":"Type"},"recycling_accepts":{"label":"Accepts"},"recycling_type":{"label":"Recycling Type","options":{"container":"Container","centre":"Recycling Center"}},"ref":{"label":"Reference"},"relation":{"label":"Type"},"religion":{"label":"Religion"},"restriction":{"label":"Type"},"restrictions":{"label":"Turn Restrictions"},"rooms":{"label":"Rooms"},"route_master":{"label":"Type"},"route":{"label":"Type"},"sac_scale":{"label":"Hiking Difficulty","placeholder":"Mountain Hiking, Alpine Hiking...","options":{"hiking":"T1: Hiking","mountain_hiking":"T2: Mountain Hiking","demanding_mountain_hiking":"T3: Demanding Mountain Hiking","alpine_hiking":"T4: Alpine Hiking","demanding_alpine_hiking":"T5: Demanding Alpine Hiking","difficult_alpine_hiking":"T6: Difficult Alpine Hiking"}},"sanitary_dump_station":{"label":"Toilet Disposal"},"seasonal":{"label":"Seasonal"},"second_hand":{"label":"Sells Used","placeholder":"Yes, No, Only","options":{"yes":"Yes","no":"No","only":"Only"}},"service_rail":{"label":"Service Type","options":{"spur":"Spur","yard":"Yard","siding":"Siding","crossover":"Crossover"}},"service_times":{"label":"Service Times"},"service":{"label":"Type"},"service/bicycle":{"label":"Services"},"service/vehicle":{"label":"Services"},"shelter_type":{"label":"Type"},"shelter":{"label":"Shelter"},"shop":{"label":"Type"},"site":{"label":"Type"},"smoking":{"label":"Smoking","placeholder":"No, Separated, Yes...","options":{"no":"No smoking anywhere","separated":"In smoking areas, not physically isolated","isolated":"In smoking areas, physically isolated","outside":"Allowed outside","yes":"Allowed everywhere","dedicated":"Dedicated to smokers (e.g. smokers' club)"}},"smoothness":{"label":"Smoothness","placeholder":"Thin Rollers, Wheels, Off-Road...","options":{"excellent":"Thin Rollers: rollerblade, skateboard","good":"Thin Wheels: racing bike","intermediate":"Wheels: city bike, wheelchair, scooter","bad":"Robust Wheels: trekking bike, car, rickshaw","very_bad":"High Clearance: light duty off-road vehicle","horrible":"Off-Road: heavy duty off-road vehicle","very_horrible":"Specialized off-road: tractor, ATV","impassable":"Impassable / No wheeled vehicle"}},"social_facility_for":{"label":"People Served"},"social_facility":{"label":"Type"},"source":{"label":"Source"},"sport_ice":{"label":"Sports"},"sport_racing_motor":{"label":"Sports"},"sport_racing_nonmotor":{"label":"Sports"},"sport":{"label":"Sports"},"stars":{"label":"Stars"},"start_date":{"label":"Start Date"},"step_count":{"label":"Number of Steps"},"stop":{"label":"Stop Type","options":{"all":"All Ways","minor":"Minor Road"}},"structure":{"label":"Structure","placeholder":"Unknown","options":{"bridge":"Bridge","tunnel":"Tunnel","embankment":"Embankment","cutting":"Cutting","ford":"Ford"}},"studio":{"label":"Type"},"substation":{"label":"Type"},"supervised":{"label":"Supervised"},"support":{"label":"Support"},"surface":{"label":"Surface"},"surveillance":{"label":"Surveillance Kind"},"surveillance/type":{"label":"Surveillance Type","options":{"camera":"Camera","guard":"Guard","ALPR":"Automatic License Plate Reader"}},"surveillance/zone":{"label":"Surveillance Zone"},"tactile_paving":{"label":"Tactile Paving"},"takeaway":{"label":"Takeaway","placeholder":"Yes, No, Takeaway Only...","options":{"yes":"Yes","no":"No","only":"Takeaway Only"}},"toilets/disposal":{"label":"Disposal","options":{"flush":"Flush","pitlatrine":"Pit/Latrine","chemical":"Chemical","bucket":"Bucket"}},"toll":{"label":"Toll"},"tomb":{"label":"Type"},"tourism":{"label":"Type"},"tower/construction":{"label":"Construction","placeholder":"Guyed, Lattice, Concealed, ..."},"tower/type":{"label":"Type"},"tracktype":{"label":"Track Type","placeholder":"Solid, Mostly Solid, Soft...","options":{"grade1":"Solid: paved or heavily compacted hardcore surface","grade2":"Mostly Solid: gravel/rock with some soft material mixed in","grade3":"Even mixture of hard and soft materials","grade4":"Mostly Soft: soil/sand/grass with some hard material mixed in","grade5":"Soft: soil/sand/grass"}},"traffic_calming":{"label":"Type"},"traffic_signals":{"label":"Type"},"trail_visibility":{"label":"Trail Visibility","placeholder":"Excellent, Good, Bad...","options":{"excellent":"Excellent: unambiguous path or markers everywhere","good":"Good: markers visible, sometimes require searching","intermediate":"Intermediate: few markers, path mostly visible","bad":"Bad: no markers, path sometimes invisible/pathless","horrible":"Horrible: often pathless, some orientation skills required","no":"No: pathless, excellent orientation skills required"}},"trees":{"label":"Trees"},"tunnel":{"label":"Tunnel"},"vending":{"label":"Type of Goods"},"visibility":{"label":"Visibility","options":{"house":"Up to 5m (16ft)","street":"5 to 20m (16 to 65ft)","area":"Over 20m (65ft)"}},"wall":{"label":"Type"},"water_point":{"label":"Water Point"},"water":{"label":"Type"},"waterway":{"label":"Type"},"website":{"label":"Website","placeholder":"http://example.com/"},"wetland":{"label":"Type"},"wheelchair":{"label":"Wheelchair Access"},"width":{"label":"Width (Meters)"},"wikipedia":{"label":"Wikipedia"}},"presets":{"aerialway":{"name":"Aerialway","terms":"ski lift,funifor,funitel"},"aeroway":{"name":"Aeroway","terms":""},"amenity":{"name":"Amenity","terms":""},"highway":{"name":"Highway","terms":""},"place":{"name":"Place","terms":""},"power":{"name":"Power","terms":""},"railway":{"name":"Railway","terms":""},"roundabout":{"name":"Roundabout","terms":""},"waterway":{"name":"Waterway","terms":""},"address":{"name":"Address","terms":""},"advertising/billboard":{"name":"Billboard","terms":""},"aerialway/cable_car":{"name":"Cable Car","terms":"tramway,ropeway"},"aerialway/chair_lift":{"name":"Chair Lift","terms":""},"aerialway/drag_lift":{"name":"Drag Lift","terms":""},"aerialway/gondola":{"name":"Gondola","terms":""},"aerialway/goods":{"name":"Goods Aerialway","terms":""},"aerialway/magic_carpet":{"name":"Magic Carpet Lift","terms":""},"aerialway/mixed_lift":{"name":"Mixed Lift","terms":""},"aerialway/platter":{"name":"Platter Lift","terms":"button lift,poma lift"},"aerialway/pylon":{"name":"Aerialway Pylon","terms":""},"aerialway/rope_tow":{"name":"Rope Tow Lift","terms":"handle tow,bugel lift"},"aerialway/station":{"name":"Aerialway Station","terms":""},"aerialway/t-bar":{"name":"T-bar Lift","terms":""},"aeroway/aerodrome":{"name":"Airport","terms":"airplane,airport,aerodrome"},"aeroway/apron":{"name":"Apron","terms":"ramp"},"aeroway/gate":{"name":"Airport Gate","terms":""},"aeroway/hangar":{"name":"Hangar","terms":""},"aeroway/helipad":{"name":"Helipad","terms":"helicopter,helipad,heliport"},"aeroway/runway":{"name":"Runway","terms":"landing strip"},"aeroway/taxiway":{"name":"Taxiway","terms":""},"aeroway/terminal":{"name":"Airport Terminal","terms":"airport,aerodrome"},"amenity/coworking_space":{"name":"Coworking Space","terms":""},"amenity/nursing_home":{"name":"Nursing Home","terms":""},"amenity/register_office":{"name":"Register Office","terms":""},"amenity/swimming_pool":{"name":"Swimming Pool","terms":""},"amenity/animal_boarding":{"name":"Animal Boarding Facility","terms":"boarding,cat,dog,horse,kitten,pet boarding,pet care,pet hotel,puppy,reptile"},"amenity/animal_breeding":{"name":"Animal Breeding Facility","terms":"breeding,bull,cat,cow,dog,horse,husbandry,kitten,livestock,pet breeding,puppy,reptile"},"amenity/animal_shelter":{"name":"Animal Shelter","terms":"adoption,aspca,cat,dog,horse,kitten,pet care,pet rescue,puppy,raptor,reptile,rescue,spca"},"amenity/arts_centre":{"name":"Arts Center","terms":""},"amenity/atm":{"name":"ATM","terms":"money,cash,machine"},"amenity/bank":{"name":"Bank","terms":"credit union,check,deposit,fund,investment,repository,reserve,safe,savings,stock,treasury,trust,vault"},"amenity/bar":{"name":"Bar","terms":"dive,beer,bier,booze"},"amenity/bbq":{"name":"Barbecue/Grill","terms":"bbq,grill"},"amenity/bench":{"name":"Bench","terms":"seat"},"amenity/bicycle_parking":{"name":"Bicycle Parking","terms":"bike"},"amenity/bicycle_rental":{"name":"Bicycle Rental","terms":"bike"},"amenity/bicycle_repair_station":{"name":"Bicycle Repair Tool Stand","terms":"bike,repair,chain,pump"},"amenity/biergarten":{"name":"Beer Garden","terms":"beer,bier,booze"},"amenity/boat_rental":{"name":"Boat Rental","terms":""},"amenity/bureau_de_change":{"name":"Currency Exchange","terms":"bureau de change,money changer"},"amenity/bus_station":{"name":"Bus Station","terms":""},"amenity/cafe":{"name":"Cafe","terms":"bistro,coffee,tea"},"amenity/car_rental":{"name":"Car Rental","terms":""},"amenity/car_sharing":{"name":"Car Sharing","terms":""},"amenity/car_wash":{"name":"Car Wash","terms":""},"amenity/casino":{"name":"Casino","terms":"gambling,roulette,craps,poker,blackjack"},"amenity/charging_station":{"name":"Charging Station","terms":"EV,Electric Vehicle,Supercharger"},"amenity/childcare":{"name":"Nursery/Childcare","terms":"daycare,orphanage,playgroup"},"amenity/cinema":{"name":"Cinema","terms":"drive-in,film,flick,movie,theater,picture,show,screen"},"amenity/clinic":{"name":"Clinic","terms":"medical,urgentcare"},"amenity/clock":{"name":"Clock","terms":""},"amenity/college":{"name":"College Grounds","terms":"university"},"amenity/community_centre":{"name":"Community Center","terms":"event,hall"},"amenity/compressed_air":{"name":"Compressed Air","terms":""},"amenity/courthouse":{"name":"Courthouse","terms":""},"amenity/crematorium":{"name":"Crematorium","terms":"cemetery,funeral"},"amenity/dentist":{"name":"Dentist","terms":"tooth,teeth"},"amenity/doctors":{"name":"Doctor","terms":"medic*"},"amenity/dojo":{"name":"Dojo / Martial Arts Academy","terms":"martial arts,dojang"},"amenity/drinking_water":{"name":"Drinking Water","terms":"fountain,potable"},"amenity/driving_school":{"name":"Driving School","terms":""},"amenity/embassy":{"name":"Embassy","terms":""},"amenity/fast_food":{"name":"Fast Food","terms":"restaurant,takeaway"},"amenity/ferry_terminal":{"name":"Ferry Terminal","terms":""},"amenity/fire_station":{"name":"Fire Station","terms":""},"amenity/food_court":{"name":"Food Court","terms":"fast food,restaurant,food"},"amenity/fountain":{"name":"Fountain","terms":""},"amenity/fuel":{"name":"Gas Station","terms":"petrol,fuel,gasoline,propane,diesel,lng,cng,biodiesel"},"amenity/grave_yard":{"name":"Graveyard","terms":""},"amenity/grit_bin":{"name":"Grit Bin","terms":"salt,sand"},"amenity/hospital":{"name":"Hospital Grounds","terms":"clinic,doctor,emergency room,health,infirmary,institution,sanatorium,sanitarium,sick,surgery,ward"},"amenity/hunting_stand":{"name":"Hunting Stand","terms":"game,gun,lookout,rifle,shoot*,wild,watch"},"amenity/ice_cream":{"name":"Ice Cream Shop","terms":"gelato,sorbet,sherbet,frozen,yogurt"},"amenity/internet_cafe":{"name":"Internet Cafe","terms":"cybercafe,taxiphone,teleboutique,coffee,cafe,net,lanhouse"},"amenity/kindergarten":{"name":"Preschool/Kindergarten Grounds","terms":"kindergarden,pre-school"},"amenity/library":{"name":"Library","terms":"book"},"amenity/marketplace":{"name":"Marketplace","terms":""},"amenity/motorcycle_parking":{"name":"Motorcycle Parking","terms":""},"amenity/nightclub":{"name":"Nightclub","terms":"disco*,night club,dancing,dance club"},"amenity/parking_entrance":{"name":"Parking Garage Entrance/Exit","terms":""},"amenity/parking_space":{"name":"Parking Space","terms":""},"amenity/parking":{"name":"Car Parking","terms":""},"amenity/pavilion":{"name":"Pavilion","terms":""},"amenity/pharmacy":{"name":"Pharmacy","terms":"drug*,med*,prescription"},"amenity/place_of_worship":{"name":"Place of Worship","terms":"abbey,basilica,bethel,cathedral,chancel,chantry,chapel,church,fold,house of God,house of prayer,house of worship,minster,mission,mosque,oratory,parish,sacellum,sanctuary,shrine,synagogue,tabernacle,temple"},"amenity/place_of_worship/buddhist":{"name":"Buddhist Temple","terms":"stupa,vihara,monastery,temple,pagoda,zendo,dojo"},"amenity/place_of_worship/christian":{"name":"Church","terms":"christian,abbey,basilica,bethel,cathedral,chancel,chantry,chapel,fold,house of God,house of prayer,house of worship,minster,mission,oratory,parish,sacellum,sanctuary,shrine,tabernacle,temple"},"amenity/place_of_worship/jewish":{"name":"Synagogue","terms":"jewish"},"amenity/place_of_worship/muslim":{"name":"Mosque","terms":"muslim"},"amenity/planetarium":{"name":"Planetarium","terms":"museum,astronomy,observatory"},"amenity/police":{"name":"Police","terms":"badge,constable,constabulary,cop,detective,fed,law,enforcement,officer,patrol"},"amenity/post_box":{"name":"Mailbox","terms":"letter,post"},"amenity/post_office":{"name":"Post Office","terms":"letter,mail"},"amenity/prison":{"name":"Prison Grounds","terms":"cell,jail"},"amenity/pub":{"name":"Pub","terms":"alcohol,drink,dive,beer,bier,booze"},"amenity/public_bath":{"name":"Public Bath","terms":"onsen,foot bath,hot springs"},"amenity/public_bookcase":{"name":"Public Bookcase","terms":"library,bookcrossing"},"amenity/ranger_station":{"name":"Ranger Station","terms":"visitor center,visitor centre,permit center,permit centre,backcountry office,warden office,warden center"},"amenity/recycling_centre":{"name":"Recycling Center","terms":"bottle,can,dump,glass,garbage,rubbish,scrap,trash"},"amenity/recycling":{"name":"Recycling","terms":"bin,can,bottle,glass,garbage,rubbish,scrap,trash"},"amenity/restaurant":{"name":"Restaurant","terms":"bar,breakfast,cafe,café,canteen,coffee,dine,dining,dinner,drive-in,eat,grill,lunch,table"},"amenity/sanitary_dump_station":{"name":"RV Toilet Disposal","terms":"Motor Home,Camper,Sanitary,Dump Station,Elsan,CDP,CTDP,Chemical Toilet"},"amenity/school":{"name":"School Grounds","terms":"academy,elementary school,middle school,high school"},"amenity/shelter":{"name":"Shelter","terms":"lean-to,gazebo,picnic"},"amenity/social_facility":{"name":"Social Facility","terms":""},"amenity/social_facility/food_bank":{"name":"Food Bank","terms":""},"amenity/social_facility/group_home":{"name":"Elderly Group Home","terms":"old,senior,living"},"amenity/social_facility/homeless_shelter":{"name":"Homeless Shelter","terms":"houseless,unhoused,displaced"},"amenity/social_facility/nursing_home":{"name":"Nursing Home","terms":"elderly,living,nursing,old,senior"},"amenity/studio":{"name":"Studio","terms":"recording,radio,television"},"amenity/taxi":{"name":"Taxi Stand","terms":"cab"},"amenity/telephone":{"name":"Telephone","terms":"phone"},"amenity/theatre":{"name":"Theater","terms":"theatre,performance,play,musical"},"amenity/toilets":{"name":"Toilets","terms":"bathroom,restroom,outhouse,privy,head,lavatory,latrine,water closet,WC,W.C."},"amenity/townhall":{"name":"Town Hall","terms":"village,city,government,courthouse,municipal"},"amenity/university":{"name":"University Grounds","terms":"college"},"amenity/vending_machine":{"name":"Vending Machine","terms":""},"amenity/vending_machine/news_papers":{"name":"Newspaper Vending Machine","terms":"newspaper"},"amenity/vending_machine/cigarettes":{"name":"Cigarette Vending Machine","terms":"cigarette"},"amenity/vending_machine/condoms":{"name":"Condom Vending Machine","terms":"condom"},"amenity/vending_machine/drinks":{"name":"Drink Vending Machine","terms":"drink,soda,beverage,juice,pop"},"amenity/vending_machine/excrement_bags":{"name":"Excrement Bag Vending Machine","terms":"excrement bags,poop,dog,animal"},"amenity/vending_machine/newspapers":{"name":"Newspaper Vending Machine","terms":"newspaper"},"amenity/vending_machine/parcel_pickup_dropoff":{"name":"Parcel Pickup/Dropoff Vending Machine","terms":"parcel,mail,pickup"},"amenity/vending_machine/parking_tickets":{"name":"Parking Ticket Vending Machine","terms":"parking,ticket"},"amenity/vending_machine/public_transport_tickets":{"name":"Transit Ticket Vending Machine","terms":"bus,train,ferry,rail,ticket,transportation"},"amenity/vending_machine/sweets":{"name":"Snack Vending Machine","terms":"candy,gum,chip,pretzel,cookie,cracker"},"amenity/veterinary":{"name":"Veterinary","terms":"pet clinic,veterinarian,animal hospital,pet doctor"},"amenity/waste_basket":{"name":"Waste Basket","terms":"bin,garbage,rubbish,litter,trash"},"amenity/waste_disposal":{"name":"Garbage Dumpster","terms":"garbage,rubbish,litter,trash"},"amenity/waste_transfer_station":{"name":"Waste Transfer Station","terms":"dump,garbage,recycling,rubbish,scrap,trash"},"amenity/water_point":{"name":"RV Drinking Water","terms":""},"amenity/watering_place":{"name":"Animal Watering Place","terms":""},"area":{"name":"Area","terms":""},"area/highway":{"name":"Road Surface","terms":""},"barrier":{"name":"Barrier","terms":""},"barrier/entrance":{"name":"Entrance","terms":""},"barrier/block":{"name":"Block","terms":""},"barrier/bollard":{"name":"Bollard","terms":""},"barrier/border_control":{"name":"Border Control","terms":""},"barrier/cattle_grid":{"name":"Cattle Grid","terms":""},"barrier/city_wall":{"name":"City Wall","terms":""},"barrier/cycle_barrier":{"name":"Cycle Barrier","terms":""},"barrier/ditch":{"name":"Trench","terms":""},"barrier/fence":{"name":"Fence","terms":""},"barrier/gate":{"name":"Gate","terms":""},"barrier/hedge":{"name":"Hedge","terms":""},"barrier/kissing_gate":{"name":"Kissing Gate","terms":""},"barrier/lift_gate":{"name":"Lift Gate","terms":""},"barrier/retaining_wall":{"name":"Retaining Wall","terms":""},"barrier/stile":{"name":"Stile","terms":""},"barrier/toll_booth":{"name":"Toll Booth","terms":""},"barrier/wall":{"name":"Wall","terms":""},"boundary/administrative":{"name":"Administrative Boundary","terms":""},"building":{"name":"Building","terms":""},"building/bunker":{"name":"Bunker","terms":""},"building/entrance":{"name":"Entrance/Exit","terms":""},"building/train_station":{"name":"Train Station","terms":""},"building/apartments":{"name":"Apartments","terms":""},"building/barn":{"name":"Barn","terms":""},"building/cabin":{"name":"Cabin","terms":""},"building/cathedral":{"name":"Cathedral Building","terms":""},"building/chapel":{"name":"Chapel Building","terms":""},"building/church":{"name":"Church Building","terms":""},"building/college":{"name":"College Building","terms":"university"},"building/commercial":{"name":"Commercial Building","terms":""},"building/construction":{"name":"Building Under Construction","terms":""},"building/detached":{"name":"Detached House","terms":"home,single,family,residence,dwelling"},"building/dormitory":{"name":"Dormitory","terms":""},"building/garage":{"name":"Garage","terms":""},"building/garages":{"name":"Garages","terms":""},"building/greenhouse":{"name":"Greenhouse","terms":""},"building/hospital":{"name":"Hospital Building","terms":""},"building/hotel":{"name":"Hotel Building","terms":""},"building/house":{"name":"House","terms":"home,family,residence,dwelling"},"building/hut":{"name":"Hut","terms":""},"building/industrial":{"name":"Industrial Building","terms":""},"building/kindergarten":{"name":"Preschool/Kindergarten Building","terms":"kindergarden,pre-school"},"building/public":{"name":"Public Building","terms":""},"building/residential":{"name":"Residential Building","terms":""},"building/retail":{"name":"Retail Building","terms":""},"building/roof":{"name":"Roof","terms":""},"building/school":{"name":"School Building","terms":"academy,elementary school,middle school,high school"},"building/semidetached_house":{"name":"Semi-Detached House","terms":"home,double,duplex,twin,family,residence,dwelling"},"building/shed":{"name":"Shed","terms":""},"building/stable":{"name":"Stable","terms":""},"building/static_caravan":{"name":"Static Mobile Home","terms":""},"building/terrace":{"name":"Row Houses","terms":"home,terrace,brownstone,family,residence,dwelling"},"building/university":{"name":"University Building","terms":"college"},"building/warehouse":{"name":"Warehouse","terms":""},"camp_site/camp_pitch":{"name":"Camp Pitch","terms":"tent,rv"},"club":{"name":"Club","terms":"social"},"craft":{"name":"Craft","terms":""},"craft/jeweler":{"name":"Jeweler","terms":""},"craft/locksmith":{"name":"Locksmith","terms":""},"craft/optician":{"name":"Optician","terms":""},"craft/tailor":{"name":"Tailor","terms":"clothes,suit"},"craft/basket_maker":{"name":"Basket Maker","terms":""},"craft/beekeeper":{"name":"Beekeeper","terms":""},"craft/blacksmith":{"name":"Blacksmith","terms":""},"craft/boatbuilder":{"name":"Boat Builder","terms":""},"craft/bookbinder":{"name":"Bookbinder","terms":"book repair"},"craft/brewery":{"name":"Brewery","terms":"alcohol,beer,beverage,bier,booze,cider"},"craft/carpenter":{"name":"Carpenter","terms":"woodworker"},"craft/carpet_layer":{"name":"Carpet Layer","terms":""},"craft/caterer":{"name":"Caterer","terms":""},"craft/clockmaker":{"name":"Clockmaker","terms":""},"craft/confectionery":{"name":"Confectionery","terms":"sweets,candy"},"craft/distillery":{"name":"Distillery","terms":"alcohol,beverage,bourbon,booze,brandy,gin,hooch,liquor,mezcal,moonshine,rum,scotch,spirits,still,tequila,vodka,whiskey,whisky"},"craft/dressmaker":{"name":"Dressmaker","terms":"seamstress"},"craft/electrician":{"name":"Electrician","terms":"power,wire"},"craft/electronics_repair":{"name":"Electronics Repair Shop","terms":""},"craft/gardener":{"name":"Gardener","terms":"landscaper,grounds keeper"},"craft/glaziery":{"name":"Glaziery","terms":"glass,stained-glass,window"},"craft/handicraft":{"name":"Handicraft","terms":""},"craft/hvac":{"name":"HVAC","terms":"heat*,vent*,air conditioning"},"craft/insulator":{"name":"Insulator","terms":""},"craft/key_cutter":{"name":"Key Cutter","terms":""},"craft/metal_construction":{"name":"Metal Construction","terms":""},"craft/painter":{"name":"Painter","terms":""},"craft/photographer":{"name":"Photographer","terms":""},"craft/photographic_laboratory":{"name":"Photographic Laboratory","terms":"film"},"craft/plasterer":{"name":"Plasterer","terms":""},"craft/plumber":{"name":"Plumber","terms":"pipe"},"craft/pottery":{"name":"Pottery","terms":"ceramic"},"craft/rigger":{"name":"Rigger","terms":""},"craft/roofer":{"name":"Roofer","terms":""},"craft/saddler":{"name":"Saddler","terms":""},"craft/sailmaker":{"name":"Sailmaker","terms":""},"craft/sawmill":{"name":"Sawmill","terms":"lumber"},"craft/scaffolder":{"name":"Scaffolder","terms":""},"craft/sculpter":{"name":"Sculpter","terms":""},"craft/shoemaker":{"name":"Shoemaker","terms":"cobbler"},"craft/stonemason":{"name":"Stonemason","terms":"masonry"},"craft/sweep":{"name":"Chimney Sweep","terms":""},"craft/tiler":{"name":"Tiler","terms":""},"craft/tinsmith":{"name":"Tinsmith","terms":""},"craft/upholsterer":{"name":"Upholsterer","terms":""},"craft/watchmaker":{"name":"Watchmaker","terms":""},"craft/window_construction":{"name":"Window Construction","terms":"glass"},"craft/winery":{"name":"Winery","terms":""},"embankment":{"name":"Embankment","terms":""},"emergency/designated":{"name":"Emergency Access Designated","terms":""},"emergency/destination":{"name":"Emergency Access Destination","terms":""},"emergency/no":{"name":"Emergency Access No","terms":""},"emergency/official":{"name":"Emergency Access Official","terms":""},"emergency/private":{"name":"Emergency Access Private","terms":""},"emergency/yes":{"name":"Emergency Access Yes","terms":""},"emergency/ambulance_station":{"name":"Ambulance Station","terms":"EMS,EMT,rescue"},"emergency/defibrillator":{"name":"Defibrillator","terms":"AED"},"emergency/fire_hydrant":{"name":"Fire Hydrant","terms":"fire plug"},"emergency/phone":{"name":"Emergency Phone","terms":""},"entrance":{"name":"Entrance/Exit","terms":""},"footway/crossing":{"name":"Street Crossing","terms":""},"footway/crosswalk":{"name":"Pedestrian Crosswalk","terms":"zebra crossing"},"footway/sidewalk":{"name":"Sidewalk","terms":""},"ford":{"name":"Ford","terms":""},"golf/bunker":{"name":"Sand Trap","terms":"hazard,bunker"},"golf/fairway":{"name":"Fairway","terms":""},"golf/green":{"name":"Putting Green","terms":""},"golf/hole":{"name":"Golf Hole","terms":""},"golf/lateral_water_hazard_area":{"name":"Lateral Water Hazard","terms":""},"golf/lateral_water_hazard_line":{"name":"Lateral Water Hazard","terms":""},"golf/rough":{"name":"Rough","terms":""},"golf/tee":{"name":"Tee Box","terms":"teeing ground"},"golf/water_hazard_area":{"name":"Water Hazard","terms":""},"golf/water_hazard_line":{"name":"Water Hazard","terms":""},"healthcare/blood_donation":{"name":"Blood Donor Center","terms":"blood bank,blood donation,blood transfusion,apheresis,plasmapheresis,plateletpheresis,stem cell donation"},"highway/bridleway":{"name":"Bridle Path","terms":"bridleway,equestrian,horse"},"highway/bus_stop":{"name":"Bus Stop","terms":""},"highway/corridor":{"name":"Indoor Corridor","terms":"gallery,hall,hallway,indoor,passage,passageway"},"highway/crossing":{"name":"Street Crossing","terms":""},"highway/crosswalk":{"name":"Pedestrian Crosswalk","terms":"zebra crossing"},"highway/cycleway":{"name":"Cycle Path","terms":"bike"},"highway/elevator":{"name":"Elevator","terms":"lift"},"highway/footway":{"name":"Foot Path","terms":"hike,hiking,trackway,trail,walk"},"highway/give_way":{"name":"Yield Sign","terms":"give way,yield,sign"},"highway/living_street":{"name":"Living Street","terms":""},"highway/mini_roundabout":{"name":"Mini-Roundabout","terms":""},"highway/motorway_junction":{"name":"Motorway Junction / Exit","terms":""},"highway/motorway_link":{"name":"Motorway Link","terms":"ramp,on ramp,off ramp"},"highway/motorway":{"name":"Motorway","terms":"autobahn,expressway,freeway,highway,interstate,parkway,thruway,turnpike"},"highway/path":{"name":"Path","terms":"hike,hiking,trackway,trail,walk"},"highway/pedestrian":{"name":"Pedestrian Street","terms":""},"highway/primary_link":{"name":"Primary Link","terms":"ramp,on ramp,off ramp"},"highway/primary":{"name":"Primary Road","terms":""},"highway/raceway":{"name":"Racetrack (Motorsport)","terms":"auto*,formula one,kart,motocross,nascar,race*,track"},"highway/residential":{"name":"Residential Road","terms":""},"highway/rest_area":{"name":"Rest Area","terms":"rest stop"},"highway/road":{"name":"Unknown Road","terms":""},"highway/secondary_link":{"name":"Secondary Link","terms":"ramp,on ramp,off ramp"},"highway/secondary":{"name":"Secondary Road","terms":""},"highway/service":{"name":"Service Road","terms":""},"highway/service/alley":{"name":"Alley","terms":""},"highway/service/drive-through":{"name":"Drive-Through","terms":""},"highway/service/driveway":{"name":"Driveway","terms":""},"highway/service/emergency_access":{"name":"Emergency Access","terms":""},"highway/service/parking_aisle":{"name":"Parking Aisle","terms":""},"highway/services":{"name":"Service Area","terms":"services,travel plaza,service station"},"highway/speed_camera":{"name":"Speed Camera","terms":""},"highway/steps":{"name":"Steps","terms":"stairs,staircase"},"highway/stop":{"name":"Stop Sign","terms":"stop,halt,sign"},"highway/street_lamp":{"name":"Street Lamp","terms":"streetlight,street light,lamp,light,gaslight"},"highway/tertiary_link":{"name":"Tertiary Link","terms":"ramp,on ramp,off ramp"},"highway/tertiary":{"name":"Tertiary Road","terms":""},"highway/track":{"name":"Unmaintained Track Road","terms":"woods road,forest road,logging road,fire road,farm road,agricultural road,ranch road,carriage road,primitive,unmaintained,rut,offroad,4wd,4x4,four wheel drive,atv,quad,jeep,double track,two track"},"highway/traffic_mirror":{"name":"Traffic Mirror","terms":"blind spot,convex,corner,curved,roadside,round,safety,sphere,visibility"},"highway/traffic_signals":{"name":"Traffic Signals","terms":"light,stoplight,traffic light"},"highway/trunk_link":{"name":"Trunk Link","terms":"ramp,on ramp,off ramp"},"highway/trunk":{"name":"Trunk Road","terms":""},"highway/turning_circle":{"name":"Turning Circle","terms":"cul-de-sac"},"highway/turning_loop":{"name":"Turning Loop (Island)","terms":"cul-de-sac"},"highway/unclassified":{"name":"Minor/Unclassified Road","terms":""},"historic":{"name":"Historic Site","terms":""},"historic/archaeological_site":{"name":"Archaeological Site","terms":""},"historic/boundary_stone":{"name":"Boundary Stone","terms":""},"historic/castle":{"name":"Castle","terms":""},"historic/memorial":{"name":"Memorial","terms":""},"historic/monument":{"name":"Monument","terms":""},"historic/ruins":{"name":"Ruins","terms":""},"historic/tomb":{"name":"Tomb","terms":""},"historic/wayside_cross":{"name":"Wayside Cross","terms":""},"historic/wayside_shrine":{"name":"Wayside Shrine","terms":""},"junction":{"name":"Junction","terms":""},"landuse":{"name":"Land Use","terms":""},"landuse/farm":{"name":"Farmland","terms":""},"landuse/allotments":{"name":"Community Garden","terms":"allotment,garden"},"landuse/aquaculture":{"name":"Aquaculture","terms":"fish farm,crustacean,algae,aquafarming,shrimp farm,oyster farm,mariculture,algaculture"},"landuse/basin":{"name":"Basin","terms":""},"landuse/cemetery":{"name":"Cemetery","terms":""},"landuse/churchyard":{"name":"Churchyard","terms":""},"landuse/commercial":{"name":"Commercial Area","terms":""},"landuse/construction":{"name":"Construction","terms":""},"landuse/farmland":{"name":"Farmland","terms":"crop,grow,plant"},"landuse/farmyard":{"name":"Farmyard","terms":"crop,grow,plant"},"landuse/forest":{"name":"Forest","terms":"tree"},"landuse/garages":{"name":"Garages","terms":""},"landuse/grass":{"name":"Grass","terms":""},"landuse/harbour":{"name":"Harbor","terms":"boat"},"landuse/industrial":{"name":"Industrial Area","terms":""},"landuse/landfill":{"name":"Landfill","terms":"dump"},"landuse/meadow":{"name":"Meadow","terms":""},"landuse/military":{"name":"Military Area","terms":""},"landuse/military/airfield":{"name":"Military Airfield","terms":"air force,army,base,bomb,fight,force,guard,heli*,jet,marine,navy,plane,troop,war"},"landuse/military/barracks":{"name":"Barracks","terms":"air force,army,base,fight,force,guard,marine,navy,troop,war"},"landuse/military/bunker":{"name":"Military Bunker","terms":"air force,army,base,fight,force,guard,marine,navy,troop,war"},"landuse/military/checkpoint":{"name":"Checkpoint","terms":"air force,army,base,force,guard,marine,navy,troop,war"},"landuse/military/danger_area":{"name":"Danger Area","terms":"air force,army,base,blast,bomb,explo*,force,guard,mine,marine,navy,troop,war"},"landuse/military/naval_base":{"name":"Naval Base","terms":"base,fight,force,guard,marine,navy,ship,sub,troop,war"},"landuse/military/nuclear_explosion_site":{"name":"Nuclear Explosion Site","terms":"atom,blast,bomb,detonat*,nuke,site,test"},"landuse/military/obstacle_course":{"name":"Obstacle Course","terms":"army,base,force,guard,marine,navy,troop,war"},"landuse/military/office":{"name":"Military Office","terms":"air force,army,base,enlist,fight,force,guard,marine,navy,recruit,troop,war"},"landuse/military/range":{"name":"Military Range","terms":"air force,army,base,fight,fire,force,guard,gun,marine,navy,rifle,shoot*,snip*,train,troop,war"},"landuse/military/training_area":{"name":"Training Area","terms":"air force,army,base,fight,fire,force,guard,gun,marine,navy,rifle,shoot*,snip*,train,troop,war"},"landuse/orchard":{"name":"Orchard","terms":"fruit"},"landuse/plant_nursery":{"name":"Plant Nursery","terms":"flower,garden,grow,vivero"},"landuse/quarry":{"name":"Quarry","terms":""},"landuse/railway":{"name":"Railway Corridor","terms":"rail,train,track"},"landuse/recreation_ground":{"name":"Recreation Ground","terms":"playing fields"},"landuse/residential":{"name":"Residential Area","terms":""},"landuse/retail":{"name":"Retail Area","terms":""},"landuse/vineyard":{"name":"Vineyard","terms":"grape,wine"},"leisure":{"name":"Leisure","terms":""},"leisure/adult_gaming_centre":{"name":"Adult Gaming Center","terms":"gambling,slot machine"},"leisure/bird_hide":{"name":"Bird Hide","terms":"machan,ornithology"},"leisure/bowling_alley":{"name":"Bowling Alley","terms":""},"leisure/common":{"name":"Common","terms":"open space"},"leisure/dance":{"name":"Dance Hall","terms":"ballroom,jive,swing,tango,waltz"},"leisure/dog_park":{"name":"Dog Park","terms":""},"leisure/firepit":{"name":"Firepit","terms":"fireplace,campfire"},"leisure/fitness_centre":{"name":"Gym / Fitness Center","terms":"health,gym,leisure,studio"},"leisure/fitness_centre/yoga":{"name":"Yoga Studio","terms":"studio"},"leisure/fitness_station":{"name":"Outdoor Fitness Station","terms":"fitness,gym"},"leisure/garden":{"name":"Garden","terms":""},"leisure/golf_course":{"name":"Golf Course","terms":"links"},"leisure/horse_riding":{"name":"Horseback Riding Facility","terms":"equestrian,stable"},"leisure/ice_rink":{"name":"Ice Rink","terms":"hockey,skating,curling"},"leisure/marina":{"name":"Marina","terms":"boat"},"leisure/miniature_golf":{"name":"Miniature Golf","terms":"crazy golf,mini golf,putt-putt"},"leisure/nature_reserve":{"name":"Nature Reserve","terms":"protected,wildlife"},"leisure/park":{"name":"Park","terms":"esplanade,estate,forest,garden,grass,green,grounds,lawn,lot,meadow,parkland,place,playground,plaza,pleasure garden,recreation area,square,tract,village green,woodland"},"leisure/picnic_table":{"name":"Picnic Table","terms":"bench"},"leisure/pitch":{"name":"Sport Pitch","terms":"field"},"leisure/pitch/american_football":{"name":"American Football Field","terms":""},"leisure/pitch/baseball":{"name":"Baseball Diamond","terms":""},"leisure/pitch/basketball":{"name":"Basketball Court","terms":""},"leisure/pitch/beachvolleyball":{"name":"Beach Volleyball Court","terms":"volleyball"},"leisure/pitch/bowls":{"name":"Bowling Green","terms":""},"leisure/pitch/cricket":{"name":"Cricket Field","terms":""},"leisure/pitch/equestrian":{"name":"Riding Arena","terms":"dressage,equestrian,horse,horseback,riding"},"leisure/pitch/rugby_league":{"name":"Rugby League Field","terms":""},"leisure/pitch/rugby_union":{"name":"Rugby Union Field","terms":""},"leisure/pitch/skateboard":{"name":"Skate Park","terms":""},"leisure/pitch/soccer":{"name":"Soccer Field","terms":"football"},"leisure/pitch/table_tennis":{"name":"Ping Pong Table","terms":"table tennis,ping pong"},"leisure/pitch/tennis":{"name":"Tennis Court","terms":""},"leisure/pitch/volleyball":{"name":"Volleyball Court","terms":""},"leisure/playground":{"name":"Playground","terms":"jungle gym,play area"},"leisure/resort":{"name":"Resort","terms":""},"leisure/running_track":{"name":"Racetrack (Running)","terms":"race*,running,sprint,track"},"leisure/slipway":{"name":"Slipway","terms":"boat launch,boat ramp"},"leisure/sports_centre":{"name":"Sports Center / Complex","terms":""},"leisure/sports_centre/swimming":{"name":"Swimming Pool Facility","terms":"dive,water"},"leisure/stadium":{"name":"Stadium","terms":""},"leisure/swimming_pool":{"name":"Swimming Pool","terms":"dive,water"},"leisure/track":{"name":"Racetrack (Non-Motorsport)","terms":"cycle,dog,greyhound,horse,race*,track"},"leisure/water_park":{"name":"Water Park","terms":"swim,pool,dive"},"line":{"name":"Line","terms":""},"man_made":{"name":"Man Made","terms":""},"man_made/embankment":{"name":"Embankment","terms":""},"man_made/adit":{"name":"Adit","terms":"entrance,underground,mine,cave"},"man_made/breakwater":{"name":"Breakwater","terms":""},"man_made/bridge":{"name":"Bridge","terms":""},"man_made/chimney":{"name":"Chimney","terms":""},"man_made/cutline":{"name":"Cut line","terms":""},"man_made/flagpole":{"name":"Flagpole","terms":""},"man_made/gasometer":{"name":"Gasometer","terms":"gas holder"},"man_made/groyne":{"name":"Groyne","terms":""},"man_made/lighthouse":{"name":"Lighthouse","terms":""},"man_made/mast":{"name":"Mast","terms":"antenna,broadcast tower,cell phone tower,cell tower,communication mast,communication tower,guyed tower,mobile phone tower,radio mast,radio tower,television tower,transmission mast,transmission tower,tv tower"},"man_made/observation":{"name":"Observation Tower","terms":"lookout tower,fire tower"},"man_made/petroleum_well":{"name":"Oil Well","terms":"drilling rig,oil derrick,oil drill,oil horse,oil rig,oil pump,petroleum well,pumpjack"},"man_made/pier":{"name":"Pier","terms":"dock"},"man_made/pipeline":{"name":"Pipeline","terms":""},"man_made/pumping_station":{"name":"Pumping Station","terms":""},"man_made/silo":{"name":"Silo","terms":"grain,corn,wheat"},"man_made/storage_tank":{"name":"Storage Tank","terms":"water,oil,gas,petrol"},"man_made/surveillance_camera":{"name":"Surveillance Camera","terms":"anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam"},"man_made/surveillance":{"name":"Surveillance","terms":"anpr,alpr,camera,car plate recognition,cctv,guard,license plate recognition,monitoring,number plate recognition,security,video,webcam"},"man_made/survey_point":{"name":"Survey Point","terms":""},"man_made/tower":{"name":"Tower","terms":""},"man_made/wastewater_plant":{"name":"Wastewater Plant","terms":"sewage*,water treatment plant,reclamation plant"},"man_made/water_tower":{"name":"Water Tower","terms":""},"man_made/water_well":{"name":"Water Well","terms":""},"man_made/water_works":{"name":"Water Works","terms":""},"man_made/works":{"name":"Factory","terms":"assembly,build,brewery,car,plant,plastic,processing,manufacture,refinery"},"natural":{"name":"Natural","terms":""},"natural/bare_rock":{"name":"Bare Rock","terms":"rock"},"natural/bay":{"name":"Bay","terms":""},"natural/beach":{"name":"Beach","terms":"shore"},"natural/cave_entrance":{"name":"Cave Entrance","terms":"cavern,hollow,grotto,shelter,cavity"},"natural/cliff":{"name":"Cliff","terms":"escarpment"},"natural/coastline":{"name":"Coastline","terms":"shore"},"natural/fell":{"name":"Fell","terms":""},"natural/glacier":{"name":"Glacier","terms":""},"natural/grassland":{"name":"Grassland","terms":"prairie,savanna"},"natural/heath":{"name":"Heath","terms":""},"natural/peak":{"name":"Peak","terms":"acme,aiguille,alp,climax,crest,crown,hill,mount,mountain,pinnacle,summit,tip,top"},"natural/ridge":{"name":"Ridge","terms":"crest"},"natural/saddle":{"name":"Saddle","terms":"pass,mountain pass,top"},"natural/sand":{"name":"Sand","terms":"desert"},"natural/scree":{"name":"Scree","terms":"loose rocks"},"natural/scrub":{"name":"Scrub","terms":"bush,shrubs"},"natural/spring":{"name":"Spring","terms":""},"natural/tree_row":{"name":"Tree row","terms":""},"natural/tree":{"name":"Tree","terms":""},"natural/volcano":{"name":"Volcano","terms":"mountain,crater"},"natural/water":{"name":"Water","terms":""},"natural/water/lake":{"name":"Lake","terms":"lakelet,loch,mere"},"natural/water/pond":{"name":"Pond","terms":"lakelet,millpond,tarn,pool,mere"},"natural/water/reservoir":{"name":"Reservoir","terms":""},"natural/wetland":{"name":"Wetland","terms":""},"natural/wood":{"name":"Wood","terms":"tree"},"noexit/yes":{"name":"No Exit","terms":"no exit,road end,dead end"},"office":{"name":"Office","terms":""},"office/travel_agent":{"name":"Travel Agency","terms":""},"office/accountant":{"name":"Accountant","terms":""},"office/administrative":{"name":"Administrative Office","terms":""},"office/architect":{"name":"Architect","terms":""},"office/company":{"name":"Company Office","terms":""},"office/coworking":{"name":"Coworking Space","terms":"coworking,office"},"office/educational_institution":{"name":"Educational Institution","terms":""},"office/employment_agency":{"name":"Employment Agency","terms":"job"},"office/estate_agent":{"name":"Real Estate Office","terms":""},"office/financial":{"name":"Financial Office","terms":""},"office/government":{"name":"Government Office","terms":""},"office/government/register_office":{"name":"Register Office","terms":"clerk,marriage,death,birth,certificate"},"office/insurance":{"name":"Insurance Office","terms":""},"office/it":{"name":"IT Office","terms":""},"office/lawyer":{"name":"Law Office","terms":""},"office/lawyer/notary":{"name":"Notary Office","terms":"clerk,signature,wills,deeds,estate"},"office/newspaper":{"name":"Newspaper","terms":""},"office/ngo":{"name":"NGO Office","terms":""},"office/physician":{"name":"Physician","terms":""},"office/political_party":{"name":"Political Party","terms":""},"office/research":{"name":"Research Office","terms":""},"office/telecommunication":{"name":"Telecom Office","terms":""},"office/therapist":{"name":"Therapist","terms":""},"piste":{"name":"Piste/Ski Trail","terms":"ski,sled,sleigh,snowboard,nordic,downhill,snowmobile"},"place/farm":{"name":"Farm","terms":""},"place/city":{"name":"City","terms":""},"place/hamlet":{"name":"Hamlet","terms":""},"place/island":{"name":"Island","terms":"archipelago,atoll,bar,cay,isle,islet,key,reef"},"place/isolated_dwelling":{"name":"Isolated Dwelling","terms":""},"place/locality":{"name":"Locality","terms":""},"place/neighbourhood":{"name":"Neighborhood","terms":"neighbourhood"},"place/quarter":{"name":"Sub-Borough / Quarter","terms":"boro,borough,quarter"},"place/square":{"name":"Square","terms":""},"place/suburb":{"name":"Borough / Suburb","terms":"boro,borough,quarter"},"place/town":{"name":"Town","terms":""},"place/village":{"name":"Village","terms":""},"point":{"name":"Point","terms":""},"power/sub_station":{"name":"Substation","terms":""},"power/generator":{"name":"Power Generator","terms":""},"power/line":{"name":"Power Line","terms":""},"power/minor_line":{"name":"Minor Power Line","terms":""},"power/plant":{"name":"Power Station Grounds","terms":"coal,gas,generat*,hydro,nuclear,power,station"},"power/pole":{"name":"Power Pole","terms":""},"power/substation":{"name":"Substation","terms":""},"power/tower":{"name":"High-Voltage Tower","terms":""},"power/transformer":{"name":"Transformer","terms":""},"public_transport/platform":{"name":"Platform","terms":""},"public_transport/stop_position":{"name":"Stop Position","terms":""},"railway/abandoned":{"name":"Abandoned Railway","terms":""},"railway/crossing":{"name":"Railway Crossing (Path)","terms":"crossing,pedestrian crossing,railroad crossing,level crossing,grade crossing,path through railroad,train crossing"},"railway/disused":{"name":"Disused Railway","terms":""},"railway/funicular":{"name":"Funicular","terms":"venicular,cliff railway,cable car,cable railway,funicular railway"},"railway/halt":{"name":"Railway Halt","terms":"break,interrupt,rest,wait,interruption"},"railway/level_crossing":{"name":"Railway Crossing (Road)","terms":"crossing,railroad crossing,level crossing,grade crossing,road through railroad,train crossing"},"railway/monorail":{"name":"Monorail","terms":""},"railway/narrow_gauge":{"name":"Narrow Gauge Rail","terms":"narrow gauge railway,narrow gauge railroad"},"railway/platform":{"name":"Railway Platform","terms":""},"railway/rail":{"name":"Rail","terms":""},"railway/station":{"name":"Railway Station","terms":"train station,station"},"railway/subway_entrance":{"name":"Subway Entrance","terms":""},"railway/subway":{"name":"Subway","terms":""},"railway/tram_stop":{"name":"Tram Stop","terms":"light rail,streetcar,tram,trolley"},"railway/tram":{"name":"Tram","terms":"light rail,streetcar,tram,trolley"},"relation":{"name":"Relation","terms":""},"route/ferry":{"name":"Ferry Route","terms":""},"shop":{"name":"Shop","terms":""},"shop/fishmonger":{"name":"Fishmonger","terms":""},"shop/vacant":{"name":"Vacant Shop","terms":""},"shop/alcohol":{"name":"Liquor Store","terms":"alcohol,beer,booze,wine"},"shop/anime":{"name":"Anime Shop","terms":"manga,japan,cosplay,figurine,dakimakura"},"shop/antiques":{"name":"Antiques Shop","terms":""},"shop/appliance":{"name":"Appliance Store","terms":"air conditioner,appliance,dishwasher,dryer,freezer,fridge,grill,kitchen,oven,refrigerator,stove,washer,washing machine"},"shop/art":{"name":"Art Store","terms":"art*,exhibit*,gallery"},"shop/baby_goods":{"name":"Baby Goods Store","terms":""},"shop/bag":{"name":"Bag/Luggage Store","terms":"handbag,purse"},"shop/bakery":{"name":"Bakery","terms":""},"shop/bathroom_furnishing":{"name":"Bathroom Furnishing Store","terms":""},"shop/beauty":{"name":"Beauty Shop","terms":"spa,salon,tanning"},"shop/beauty/nails":{"name":"Nail Salon","terms":"manicure,pedicure"},"shop/beauty/tanning":{"name":"Tanning Salon","terms":""},"shop/bed":{"name":"Bedding/Mattress Store","terms":""},"shop/beverages":{"name":"Beverage Store","terms":""},"shop/bicycle":{"name":"Bicycle Shop","terms":"bike,repair"},"shop/bookmaker":{"name":"Bookmaker","terms":"betting"},"shop/books":{"name":"Book Store","terms":""},"shop/boutique":{"name":"Boutique","terms":""},"shop/butcher":{"name":"Butcher","terms":"meat"},"shop/candles":{"name":"Candle Shop","terms":""},"shop/car_parts":{"name":"Car Parts Store","terms":"auto"},"shop/car_repair":{"name":"Car Repair Shop","terms":"auto,garage,service"},"shop/car":{"name":"Car Dealership","terms":"auto"},"shop/carpet":{"name":"Carpet Store","terms":"rug"},"shop/charity":{"name":"Charity Store","terms":"thrift,op shop,nonprofit"},"shop/cheese":{"name":"Cheese Store","terms":""},"shop/chemist":{"name":"Drugstore","terms":"med*,drug*,gift"},"shop/chocolate":{"name":"Chocolate Store","terms":""},"shop/clothes":{"name":"Clothing Store","terms":""},"shop/coffee":{"name":"Coffee Store","terms":""},"shop/computer":{"name":"Computer Store","terms":""},"shop/confectionery":{"name":"Candy Store","terms":""},"shop/convenience":{"name":"Convenience Store","terms":""},"shop/copyshop":{"name":"Copy Store","terms":""},"shop/cosmetics":{"name":"Cosmetics Store","terms":""},"shop/craft":{"name":"Arts and Crafts Store","terms":"art*,paint*,frame"},"shop/curtain":{"name":"Curtain Store","terms":"drape*,window"},"shop/dairy":{"name":"Dairy Store","terms":"milk,egg,cheese"},"shop/deli":{"name":"Deli","terms":"lunch,meat,sandwich"},"shop/department_store":{"name":"Department Store","terms":""},"shop/doityourself":{"name":"DIY Store","terms":""},"shop/dry_cleaning":{"name":"Dry Cleaner","terms":""},"shop/e-cigarette":{"name":"E-Cigarette Shop","terms":"electronic,vapor"},"shop/electronics":{"name":"Electronics Store","terms":"appliance,audio,blueray,camera,computer,dvd,home theater,radio,speaker,tv,video"},"shop/erotic":{"name":"Erotic Store","terms":"sex,porn"},"shop/fabric":{"name":"Fabric Store","terms":"sew"},"shop/farm":{"name":"Produce Stand","terms":"farm shop,farm stand"},"shop/fashion":{"name":"Fashion Store","terms":""},"shop/florist":{"name":"Florist","terms":"flower"},"shop/frame":{"name":"Framing Shop","terms":"art*,paint*,photo*,frame"},"shop/funeral_directors":{"name":"Funeral Home","terms":"undertaker,memorial home"},"shop/furnace":{"name":"Furnace Store","terms":"oven,stove"},"shop/furniture":{"name":"Furniture Store","terms":"chair,sofa,table"},"shop/garden_centre":{"name":"Garden Center","terms":"landscape,mulch,shrub,tree"},"shop/gas":{"name":"Bottled Gas Shop","terms":"cng,lpg,natural gas,propane,refill,tank"},"shop/gift":{"name":"Gift Shop","terms":"souvenir"},"shop/greengrocer":{"name":"Greengrocer","terms":"fruit,vegetable"},"shop/hairdresser":{"name":"Hairdresser","terms":"barber"},"shop/hardware":{"name":"Hardware Store","terms":""},"shop/hearing_aids":{"name":"Hearing Aids Store","terms":""},"shop/herbalist":{"name":"Herbalist","terms":""},"shop/hifi":{"name":"Hifi Store","terms":"stereo,video"},"shop/houseware":{"name":"Houseware Store","terms":"home,household"},"shop/interior_decoration":{"name":"Interior Decoration Store","terms":""},"shop/jewelry":{"name":"Jeweler","terms":"diamond,gem,ring"},"shop/kiosk":{"name":"News Kiosk","terms":""},"shop/kitchen":{"name":"Kitchen Design Store","terms":""},"shop/laundry":{"name":"Laundry","terms":""},"shop/leather":{"name":"Leather Store","terms":""},"shop/locksmith":{"name":"Locksmith","terms":"key,lockpick"},"shop/lottery":{"name":"Lottery Shop","terms":""},"shop/mall":{"name":"Mall","terms":"shopping"},"shop/massage":{"name":"Massage Shop","terms":""},"shop/medical_supply":{"name":"Medical Supply Store","terms":""},"shop/mobile_phone":{"name":"Mobile Phone Store","terms":""},"shop/money_lender":{"name":"Money Lender","terms":""},"shop/motorcycle":{"name":"Motorcycle Dealership","terms":"bike"},"shop/music":{"name":"Music Store","terms":"CD,vinyl"},"shop/musical_instrument":{"name":"Musical Instrument Store","terms":"guitar"},"shop/newsagent":{"name":"Newspaper/Magazine Shop","terms":""},"shop/nutrition_supplements":{"name":"Nutrition Supplements Store","terms":""},"shop/optician":{"name":"Optician","terms":"eye,glasses"},"shop/organic":{"name":"Organic Goods Store","terms":""},"shop/outdoor":{"name":"Outdoors Store","terms":"camping,climbing,hiking"},"shop/paint":{"name":"Paint Store","terms":""},"shop/pastry":{"name":"Pastry Shop","terms":"patisserie,cake shop,cakery"},"shop/pawnbroker":{"name":"Pawn Shop","terms":""},"shop/perfumery":{"name":"Perfume Store","terms":""},"shop/pet":{"name":"Pet Store","terms":"animal,cat,dog,fish,kitten,puppy,reptile"},"shop/photo":{"name":"Photography Store","terms":"camera,film"},"shop/pyrotechnics":{"name":"Fireworks Store","terms":""},"shop/radiotechnics":{"name":"Radio/Electronic Component Store","terms":""},"shop/religion":{"name":"Religious Store","terms":""},"shop/scuba_diving":{"name":"Scuba Diving Shop","terms":""},"shop/seafood":{"name":"Seafood Shop","terms":"fishmonger"},"shop/second_hand":{"name":"Consignment/Thrift Store","terms":"secondhand,second hand,resale,thrift,used"},"shop/shoes":{"name":"Shoe Store","terms":""},"shop/sports":{"name":"Sporting Goods Store","terms":""},"shop/stationery":{"name":"Stationery Store","terms":"card,paper"},"shop/storage_rental":{"name":"Storage Rental","terms":""},"shop/supermarket":{"name":"Supermarket","terms":"grocery,store,shop"},"shop/tailor":{"name":"Tailor","terms":"clothes,suit"},"shop/tattoo":{"name":"Tattoo Parlor","terms":""},"shop/tea":{"name":"Tea Store","terms":""},"shop/ticket":{"name":"Ticket Seller","terms":""},"shop/tobacco":{"name":"Tobacco Shop","terms":""},"shop/toys":{"name":"Toy Store","terms":""},"shop/travel_agency":{"name":"Travel Agency","terms":""},"shop/tyres":{"name":"Tire Store","terms":""},"shop/vacuum_cleaner":{"name":"Vacuum Cleaner Store","terms":""},"shop/variety_store":{"name":"Variety Store","terms":""},"shop/video_games":{"name":"Video Game Store","terms":""},"shop/video":{"name":"Video Store","terms":"DVD"},"shop/watches":{"name":"Watches Shop","terms":""},"shop/water_sports":{"name":"Watersport/Swim Shop","terms":""},"shop/weapons":{"name":"Weapon Shop","terms":"ammo,gun,knife,knives"},"shop/window_blind":{"name":"Window Blind Store","terms":""},"shop/wine":{"name":"Wine Shop","terms":""},"tourism":{"name":"Tourism","terms":""},"tourism/alpine_hut":{"name":"Alpine Hut","terms":""},"tourism/apartment":{"name":"Guest Apartment / Condo","terms":""},"tourism/aquarium":{"name":"Aquarium","terms":"fish,sea,water"},"tourism/artwork":{"name":"Artwork","terms":"mural,sculpture,statue"},"tourism/attraction":{"name":"Tourist Attraction","terms":""},"tourism/camp_site":{"name":"Campground","terms":"tent,rv"},"tourism/caravan_site":{"name":"RV Park","terms":"Motor Home,Camper"},"tourism/chalet":{"name":"Chalet","terms":""},"tourism/gallery":{"name":"Art Gallery","terms":"art*,exhibit*,paint*,photo*,sculpt*"},"tourism/guest_house":{"name":"Guest House","terms":"B&B,Bed and Breakfast"},"tourism/hostel":{"name":"Hostel","terms":""},"tourism/hotel":{"name":"Hotel","terms":""},"tourism/information":{"name":"Information","terms":""},"tourism/information/board":{"name":"Information Board","terms":""},"tourism/information/guidepost":{"name":"Guidepost","terms":""},"tourism/information/map":{"name":"Map","terms":""},"tourism/information/office":{"name":"Tourist Information Office","terms":""},"tourism/motel":{"name":"Motel","terms":""},"tourism/museum":{"name":"Museum","terms":"art*,exhibit*,gallery,foundation,hall,institution,paint*,photo*,sculpt*"},"tourism/picnic_site":{"name":"Picnic Site","terms":"camp"},"tourism/theme_park":{"name":"Theme Park","terms":""},"tourism/viewpoint":{"name":"Viewpoint","terms":""},"tourism/zoo":{"name":"Zoo","terms":"animal"},"traffic_calming":{"name":"Traffic Calming","terms":"bump,hump,slow,speed"},"traffic_calming/bump":{"name":"Speed Bump","terms":"hump,speed,slow"},"traffic_calming/chicane":{"name":"Traffic Chicane","terms":"driveway link,speed,slow"},"traffic_calming/choker":{"name":"Traffic Choker","terms":"speed,slow"},"traffic_calming/cushion":{"name":"Speed Cushion","terms":"bump,hump,speed,slow"},"traffic_calming/dip":{"name":"Dip","terms":"speed,slow"},"traffic_calming/hump":{"name":"Speed Hump","terms":"bump,speed,slow"},"traffic_calming/island":{"name":"Traffic Island","terms":"circle,roundabout,slow"},"traffic_calming/rumble_strip":{"name":"Rumble Strip","terms":"audible lines,sleeper lines,growlers"},"traffic_calming/table":{"name":"Raised Pedestrian Crossing","terms":"flat top,hump,speed,slow"},"type/multipolygon":{"name":"Multipolygon","terms":""},"type/boundary":{"name":"Boundary","terms":""},"type/boundary/administrative":{"name":"Administrative Boundary","terms":""},"type/restriction":{"name":"Restriction","terms":""},"type/restriction/no_left_turn":{"name":"No Left Turn","terms":""},"type/restriction/no_right_turn":{"name":"No Right Turn","terms":""},"type/restriction/no_straight_on":{"name":"No Straight On","terms":""},"type/restriction/no_u_turn":{"name":"No U-turn","terms":""},"type/restriction/only_left_turn":{"name":"Left Turn Only","terms":""},"type/restriction/only_right_turn":{"name":"Right Turn Only","terms":""},"type/restriction/only_straight_on":{"name":"No Turns","terms":""},"type/route_master":{"name":"Route Master","terms":""},"type/route":{"name":"Route","terms":""},"type/route/bicycle":{"name":"Cycle Route","terms":""},"type/route/bus":{"name":"Bus Route","terms":""},"type/route/detour":{"name":"Detour Route","terms":""},"type/route/ferry":{"name":"Ferry Route","terms":""},"type/route/foot":{"name":"Foot Route","terms":""},"type/route/hiking":{"name":"Hiking Route","terms":""},"type/route/horse":{"name":"Riding Route","terms":""},"type/route/pipeline":{"name":"Pipeline Route","terms":""},"type/route/power":{"name":"Power Route","terms":""},"type/route/road":{"name":"Road Route","terms":""},"type/route/train":{"name":"Train Route","terms":""},"type/route/tram":{"name":"Tram Route","terms":""},"type/site":{"name":"Site","terms":""},"vertex":{"name":"Other","terms":""},"waterway/boatyard":{"name":"Boatyard","terms":""},"waterway/canal":{"name":"Canal","terms":""},"waterway/dam":{"name":"Dam","terms":""},"waterway/ditch":{"name":"Ditch","terms":""},"waterway/dock":{"name":"Wet Dock / Dry Dock","terms":"boat,ship,vessel,marine"},"waterway/drain":{"name":"Drain","terms":""},"waterway/fuel":{"name":"Marine Fuel Station","terms":"petrol,gas,diesel,boat"},"waterway/river":{"name":"River","terms":"beck,branch,brook,course,creek,estuary,rill,rivulet,run,runnel,stream,tributary,watercourse"},"waterway/riverbank":{"name":"Riverbank","terms":""},"waterway/sanitary_dump_station":{"name":"Marine Toilet Disposal","terms":"Boat,Watercraft,Sanitary,Dump Station,Pumpout,Pump out,Elsan,CDP,CTDP,Chemical Toilet"},"waterway/stream":{"name":"Stream","terms":"beck,branch,brook,burn,course,creek,current,drift,flood,flow,freshet,race,rill,rindle,rivulet,run,runnel,rush,spate,spritz,surge,tide,torrent,tributary,watercourse"},"waterway/water_point":{"name":"Marine Drinking Water","terms":""},"waterway/waterfall":{"name":"Waterfall","terms":"fall"},"waterway/weir":{"name":"Weir","terms":""}}}};
 
 
-var dataImagery = [{"id":"sjcgis.org-Aerials_2013_WM","name":"2013 aerial imagery for San Juan County WA","type":"tms","template":"http://sjcgis.org/arcgis/rest/services/Basemaps/Aerials_2013_WM/MapServer/tile/{zoom}/{y}/{x}","description":"Public domain aerial imagery taken in May/June 2013 from San Juan County, WA. Resolution is 9 inch.","scaleExtent":[0,19],"polygon":[[[-123.02167396992,48.44667085335],[-122.9466579482,48.44780949945],[-122.90151100606,48.41306930778],[-122.80263405293,48.40771378918],[-122.79199104756,48.44279926564],[-122.8088138625,48.47865708877],[-122.73911934346,48.49572334021],[-122.78546791524,48.62160819278],[-122.73087959737,48.6361306644],[-122.75559883565,48.71207854113],[-122.95747261494,48.71592956034],[-122.97086220235,48.695765074],[-122.99970131367,48.69780454658],[-123.00347786397,48.73427448605],[-123.04330330342,48.74310484148],[-123.0762622878,48.70528190578],[-123.08484535664,48.66334903433],[-123.12844734639,48.66380254936],[-123.22698097676,48.70301615666],[-123.24655037373,48.68352650341],[-123.17445259541,48.64701977542],[-123.21513634175,48.60106537642],[-123.21393471211,48.57335906966],[-123.18080406636,48.56574853208],[-123.16621284932,48.52006125122],[-123.10235481709,48.47683634964],[-123.02167396992,48.44667085335]],[[-122.98339348286,48.78214357977],[-122.93498497456,48.76653172572],[-122.91181068867,48.73857664785],[-122.80229073018,48.73982194177],[-122.81945686787,48.75498940888],[-122.93429832906,48.79571515892],[-122.98373680562,48.79435816618],[-122.98339348286,48.78214357977]]]},{"id":"sjcgis.org-Aerials_2016_WM","name":"2016 aerial imagery for San Juan County WA","type":"tms","template":"http://sjcgis.org/arcgis/rest/services/Basemaps/Aerials_2016_WM/MapServer/tile/{zoom}/{y}/{x}","description":"Public domain aerial imagery taken in May, June, and July from San Juan County, WA. Resolution is 6 inch countywide.","scaleExtent":[0,19],"polygon":[[[-123.02167396992,48.44667085335],[-122.9466579482,48.44780949945],[-122.90151100606,48.41306930778],[-122.80263405293,48.40771378918],[-122.79199104756,48.44279926564],[-122.8088138625,48.47865708877],[-122.73911934346,48.49572334021],[-122.78546791524,48.62160819278],[-122.73087959737,48.6361306644],[-122.75559883565,48.71207854113],[-122.95747261494,48.71592956034],[-122.97086220235,48.695765074],[-122.99970131367,48.69780454658],[-123.00347786397,48.73427448605],[-123.04330330342,48.74310484148],[-123.0762622878,48.70528190578],[-123.08484535664,48.66334903433],[-123.12844734639,48.66380254936],[-123.22698097676,48.70301615666],[-123.24655037373,48.68352650341],[-123.17445259541,48.64701977542],[-123.21513634175,48.60106537642],[-123.21393471211,48.57335906966],[-123.18080406636,48.56574853208],[-123.16621284932,48.52006125122],[-123.10235481709,48.47683634964],[-123.02167396992,48.44667085335]],[[-122.98339348286,48.78214357977],[-122.93498497456,48.76653172572],[-122.91181068867,48.73857664785],[-122.80229073018,48.73982194177],[-122.81945686787,48.75498940888],[-122.93429832906,48.79571515892],[-122.98373680562,48.79435816618],[-122.98339348286,48.78214357977]]],"best":true},{"id":"OS7","name":"7th Series (OS7)","type":"tms","template":"http://ooc.openstreetmap.org/os7/{zoom}/{x}/{y}.jpg","polygon":[[[-6.4585407,49.9044128],[-6.3872009,49.9841116],[-6.2296827,49.9896159],[-6.2171269,49.8680087],[-6.4551164,49.8591793],[-6.4585407,49.9044128]],[[-1.4495137,60.8634056],[-0.7167114,60.8545122],[-0.7349744,60.4359756],[-0.6938826,60.4168218],[-0.7258429,60.3942735],[-0.7395401,60.0484714],[-0.9267357,60.0461918],[-0.9381501,59.8266157],[-1.4586452,59.831205],[-1.4455187,60.0535999],[-1.463211,60.0535999],[-1.4643524,60.0630002],[-1.5716475,60.0638546],[-1.5693646,60.1790005],[-1.643558,60.1807033],[-1.643558,60.1892162],[-1.8216221,60.1894999],[-1.8204807,60.3615507],[-1.8415973,60.3697345],[-1.8216221,60.3832755],[-1.8179852,60.5934321],[-1.453168,60.5934321],[-1.4495137,60.8634056]],[[-4.9089213,54.4242078],[-4.282598,54.4429861],[-4.2535417,54.029769],[-4.8766366,54.0221831],[-4.9089213,54.4242078]],[[-5.8667408,59.1444603],[-5.7759966,59.1470945],[-5.7720016,59.1014052],[-5.8621751,59.0990605],[-5.8667408,59.1444603]],[[-1.7065887,59.5703599],[-1.5579165,59.5693481],[-1.5564897,59.4965695],[-1.7054472,59.4975834],[-1.7065887,59.5703599]],[[-7.6865827,58.2940975],[-7.5330594,58.3006957],[-7.5256401,58.2646905],[-7.6797341,58.2577853],[-7.6865827,58.2940975]],[[-4.5338281,59.0359871],[-4.481322,59.0371616],[-4.4796099,59.0186583],[-4.5332574,59.0180707],[-4.5338281,59.0359871]],[[-8.6710698,57.8769896],[-8.4673234,57.8897332],[-8.4467775,57.7907],[-8.6510947,57.7779213],[-8.6710698,57.8769896]],[[-5.2395519,50.3530581],[-5.7920073,50.3384899],[-5.760047,49.9317027],[-4.6551363,49.9581461],[-4.677965,50.2860073],[-4.244219,50.2801723],[-4.2487848,50.2042525],[-3.3812929,50.2042525],[-3.4223846,50.5188201],[-3.1164796,50.5246258],[-3.1210453,50.6579592],[-2.6736357,50.6619495],[-2.5953453,50.6394325],[-2.5905026,50.5728419],[-2.4791203,50.5733545],[-2.4758919,50.5066704],[-2.3967943,50.5056438],[-2.401637,50.5723293],[-1.0400296,50.5718167],[-1.0335726,50.7059289],[-0.549302,50.7038843],[-0.5460736,50.7886618],[-0.0924734,50.7856002],[-0.0876307,50.7181949],[0.4789659,50.7120623],[0.487037,50.8182467],[0.9761503,50.8049868],[0.9922927,51.0126311],[1.4491213,51.0004424],[1.4781775,51.4090372],[1.0229632,51.4271576],[1.035877,51.7640881],[1.6105448,51.7500992],[1.646058,52.1560003],[1.7267698,52.1540195],[1.749369,52.4481811],[1.7870672,52.4811624],[1.759102,52.522505],[1.7933451,52.9602749],[0.3798147,52.9958468],[0.3895238,53.2511239],[0.3478614,53.2511239],[0.3238912,53.282186],[0.3461492,53.6538501],[0.128487,53.6575466],[0.116582,53.6674703],[0.1350586,54.0655731],[-0.0609831,54.065908],[-0.0414249,54.4709448],[-0.5662701,54.4771794],[-0.5592078,54.6565127],[-1.1665638,54.6623485],[-1.1637389,54.842611],[-1.3316194,54.843909],[-1.3257065,55.2470842],[-1.529453,55.2487108],[-1.524178,55.6540122],[-1.7638798,55.6540122],[-1.7733693,55.9719116],[-2.1607858,55.9682981],[-2.1543289,56.0621387],[-2.4578051,56.0585337],[-2.4190635,56.641717],[-2.0962164,56.641717],[-2.0833025,57.0021322],[-1.9283359,57.0126802],[-1.9180966,57.3590895],[-1.7502161,57.3625721],[-1.7695869,57.7608634],[-3.6937554,57.7574187],[-3.7066693,57.9806386],[-3.5969013,57.9772149],[-3.6033582,58.1207277],[-3.0222335,58.1309566],[-3.0286905,58.5410788],[-2.8478961,58.530968],[-2.86081,58.8430508],[-2.679624,58.8414991],[-2.6841897,58.885175],[-2.6339665,58.9052239],[-2.679624,58.9335083],[-2.6887555,59.0229231],[-2.3668703,59.0229231],[-2.3702946,59.2652861],[-2.3429001,59.2821989],[-2.3714361,59.2996861],[-2.3737189,59.3707083],[-2.3429001,59.385825],[-2.3725775,59.400354],[-2.3714361,59.4259098],[-3.0734196,59.4230067],[-3.0711368,59.3433649],[-3.103097,59.3311405],[-3.0745611,59.3136695],[-3.0722782,59.232603],[-3.3850319,59.1484167],[-3.3747589,58.9352753],[-3.5653789,58.9323303],[-3.554829,58.69759],[-5.2808579,58.6667732],[-5.2534159,58.3514125],[-5.5068508,58.3437887],[-5.4761804,58.0323557],[-5.8974958,58.0212436],[-5.8522972,57.6171758],[-6.1396311,57.6137174],[-6.1541592,57.7423183],[-6.2913692,57.7380102],[-6.3365678,58.1398784],[-6.1121891,58.1466944],[-6.1473778,58.5106285],[-6.2934817,58.5416182],[-6.8413713,58.2977321],[-7.0057382,58.2929331],[-7.1016189,58.2064403],[-7.2573132,58.1793148],[-7.2531092,58.1004928],[-7.4070698,58.0905566],[-7.391347,57.7911354],[-7.790991,57.7733151],[-7.7624215,57.5444165],[-7.698501,57.1453194],[-7.7943817,57.1304547],[-7.716764,56.7368628],[-7.0122067,56.7654359],[-6.979922,56.5453858],[-7.0638622,56.5453858],[-7.0444914,56.3562587],[-6.500676,56.3812917],[-6.4491433,55.9793649],[-6.563287,55.9691456],[-6.5393742,55.7030135],[-6.5595521,55.6907321],[-6.5345315,55.6761713],[-6.5216176,55.5704434],[-5.8912587,55.5923416],[-5.8560127,55.2320733],[-5.2293639,55.2515958],[-5.1837064,54.6254139],[-3.6655956,54.6518373],[-3.6496155,54.4320023],[-3.5400375,54.4306744],[-3.530906,54.0290181],[-3.0697656,54.030359],[-3.0675737,53.8221388],[-3.0804876,53.7739911],[-3.0619239,53.7477488],[-3.0611168,53.6737049],[-3.2144691,53.6708361],[-3.2057699,53.4226163],[-3.2799632,53.355224],[-3.2896655,53.3608441],[-3.3327547,53.364931],[-3.3761293,53.3540318],[-4.0888976,53.3433102],[-4.0945474,53.4612036],[-4.697412,53.4448624],[-4.6882805,53.3318598],[-4.7202407,53.2895771],[-4.6837148,53.2486184],[-4.6768661,53.1542644],[-4.8480816,53.1446807],[-4.8178336,52.7440299],[-4.2545751,52.7558939],[-4.228876,52.254876],[-4.2607571,52.2536408],[-4.2724603,52.2432637],[-4.8136263,52.230095],[-4.8079191,52.1138892],[-5.3889104,52.0991668],[-5.3717888,51.9129667],[-5.4208706,51.9101502],[-5.414022,51.8453218],[-5.3683645,51.8474373],[-5.3466772,51.5595332],[-4.773676,51.5758518],[-4.7656859,51.4885146],[-4.1915432,51.4970427],[-4.1869775,51.4344663],[-3.6151177,51.4444274],[-3.6105519,51.3746543],[-3.1494115,51.3789292],[-3.1494115,51.2919281],[-4.3038735,51.2745907],[-4.2861169,51.0508721],[-4.8543277,51.0366633],[-4.8372201,50.7212787],[-5.2618345,50.7082694],[-5.2395519,50.3530581]],[[-2.1502671,60.171318],[-2.0030218,60.1696146],[-2.0013096,60.0997023],[-2.148555,60.1011247],[-2.1502671,60.171318]],[[-6.2086011,59.1163488],[-6.1229934,59.1166418],[-6.121852,59.0714985],[-6.2097426,59.0714985],[-6.2086011,59.1163488]],[[-4.4159559,59.0889036],[-4.4212022,59.0770848],[-4.3971904,59.0779143],[-4.3913388,59.0897328],[-4.4159559,59.0889036]]]},{"id":"AGRI-black_and_white-2.5m","name":"AGRI black-and-white 2.5m","type":"tms","template":"http://agri.openstreetmap.org/{zoom}/{x}/{y}.png","polygon":[[[112.28778,-28.784589],[112.71488,-31.13894],[114.11263,-34.178287],[113.60788,-37.39012],[117.17992,-37.451794],[119.31538,-37.42096],[121.72262,-36.708394],[123.81925,-35.76893],[125.9547,-34.3066],[127.97368,-33.727398],[130.07031,-33.24166],[130.10913,-33.888704],[131.00214,-34.049705],[131.0798,-34.72257],[132.28342,-35.39],[134.18591,-35.61126],[133.8753,-37.1119],[134.8459,-37.6365],[139.7769,-37.82075],[139.93223,-39.4283],[141.6017,-39.8767],[142.3783,-39.368294],[142.3783,-40.64702],[142.49478,-42.074874],[144.009,-44.060127],[147.23161,-44.03222],[149.05645,-42.534313],[149.52237,-40.99959],[149.9494,-40.852921],[150.8036,-38.09627],[151.81313,-38.12682],[156.20052,-22.667706],[156.20052,-20.10109],[156.62761,-17.417627],[155.26869,-17.19521],[154.14272,-19.51662],[153.5215,-18.34139],[153.05558,-16.5636],[152.78379,-15.256768],[152.27905,-13.4135],[151.3472,-12.391767],[149.48354,-12.05024],[146.9598,-9.992408],[135.9719,-9.992408],[130.3032,-10.33636],[128.09016,-12.164136],[125.91588,-12.315912],[124.3239,-11.860326],[122.03323,-11.974295],[118.26706,-16.9353],[115.93747,-19.11357],[114.0738,-21.11863],[113.49141,-22.596033],[112.28778,-28.784589]]],"terms_text":"AGRI"},{"id":"lu.geoportail.opendata.basemap","name":"Basemap geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/basemap/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/carte-de-base-webservices-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie"},{"id":"basemap.at","name":"basemap.at","type":"tms","template":"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/geolandbasemap/normal/google3857/{zoom}/{y}/{x}.png","description":"Basemap of Austria, based on goverment data.","scaleExtent":[0,19],"polygon":[[[16.5073284,46.9929304],[16.283417,46.9929304],[16.135839,46.8713046],[15.9831722,46.8190947],[16.0493278,46.655175],[15.8610387,46.7180116],[15.7592608,46.6900933],[15.5607938,46.6796202],[15.5760605,46.6342132],[15.4793715,46.6027553],[15.4335715,46.6516819],[15.2249267,46.6342132],[15.0468154,46.6481886],[14.9908376,46.5887681],[14.9603042,46.6237293],[14.8534374,46.6027553],[14.8330818,46.5012666],[14.7516595,46.4977636],[14.6804149,46.4381781],[14.6142593,46.4381781],[14.578637,46.3785275],[14.4412369,46.4311638],[14.1613476,46.4276563],[14.1257253,46.4767409],[14.0188585,46.4767409],[13.9119917,46.5257813],[13.8254805,46.5047694],[13.4438134,46.560783],[13.3064132,46.5502848],[13.1283019,46.5887681],[12.8433237,46.6132433],[12.7262791,46.6412014],[12.5125455,46.6656529],[12.3598787,46.7040543],[12.3649676,46.7703197],[12.2886341,46.7772902],[12.2733674,46.8852187],[12.2072118,46.8747835],[12.1308784,46.9026062],[12.1156117,46.9998721],[12.2530119,47.0657733],[12.2123007,47.0934969],[11.9833004,47.0449712],[11.7339445,46.9616816],[11.6321666,47.010283],[11.5405665,46.9755722],[11.4998553,47.0068129],[11.418433,46.9651546],[11.2555884,46.9755722],[11.1130993,46.913036],[11.0418548,46.7633482],[10.8891879,46.7598621],[10.7416099,46.7842599],[10.7059877,46.8643462],[10.5787653,46.8399847],[10.4566318,46.8504267],[10.4769874,46.9269392],[10.3853873,46.9894592],[10.2327204,46.8643462],[10.1207647,46.8330223],[9.8663199,46.9408389],[9.9019422,47.0033426],[9.6831197,47.0588402],[9.6118752,47.0380354],[9.6322307,47.128131],[9.5813418,47.1662025],[9.5406306,47.2664422],[9.6067863,47.3492559],[9.6729419,47.369939],[9.6424085,47.4457079],[9.5660751,47.4801122],[9.7136531,47.5282405],[9.7848976,47.5969187],[9.8357866,47.5454185],[9.9477423,47.538548],[10.0902313,47.4491493],[10.1105869,47.3664924],[10.2428982,47.3871688],[10.1869203,47.2698953],[10.3243205,47.2975125],[10.4820763,47.4491493],[10.4311873,47.4869904],[10.4413651,47.5900549],[10.4871652,47.5522881],[10.5482319,47.5351124],[10.5991209,47.5660246],[10.7568766,47.5316766],[10.8891879,47.5454185],[10.9400769,47.4869904],[10.9960547,47.3906141],[11.2352328,47.4422662],[11.2810328,47.3975039],[11.4235219,47.5144941],[11.5761888,47.5076195],[11.6067221,47.5900549],[11.8357224,47.5866227],[12.003656,47.6243647],[12.2072118,47.6037815],[12.1614117,47.6963421],[12.2581008,47.7442718],[12.2530119,47.6792136],[12.4311232,47.7100408],[12.4921899,47.631224],[12.5685234,47.6277944],[12.6295901,47.6894913],[12.7720792,47.6689338],[12.8331459,47.5419833],[12.975635,47.4732332],[13.0417906,47.4938677],[13.0367017,47.5557226],[13.0977685,47.6415112],[13.0316128,47.7100408],[12.9043905,47.7203125],[13.0061684,47.84683],[12.9451016,47.9355501],[12.8636793,47.9594103],[12.8636793,48.0036929],[12.7517236,48.0989418],[12.8738571,48.2109733],[12.9603683,48.2109733],[13.0417906,48.2652035],[13.1842797,48.2990682],[13.2606131,48.2922971],[13.3980133,48.3565867],[13.4438134,48.417418],[13.4387245,48.5523383],[13.509969,48.5860123],[13.6117469,48.5725454],[13.7287915,48.5118999],[13.7847694,48.5725454],[13.8203916,48.6263915],[13.7949471,48.7171267],[13.850925,48.7741724],[14.0595697,48.6633774],[14.0137696,48.6331182],[14.0748364,48.5927444],[14.2173255,48.5961101],[14.3649034,48.5489696],[14.4666813,48.6499311],[14.5582815,48.5961101],[14.5989926,48.6263915],[14.7211261,48.5759124],[14.7211261,48.6868997],[14.822904,48.7271983],[14.8178151,48.777526],[14.9647227,48.7851754],[14.9893637,49.0126611],[15.1485933,48.9950306],[15.1943934,48.9315502],[15.3063491,48.9850128],[15.3928603,48.9850128],[15.4844604,48.9282069],[15.749083,48.8545973],[15.8406831,48.8880697],[16.0086166,48.7808794],[16.2070835,48.7339115],[16.3953727,48.7372678],[16.4920617,48.8110498],[16.6905286,48.7741724],[16.7057953,48.7339115],[16.8991733,48.713769],[16.9755067,48.515271],[16.8482844,48.4511817],[16.8533733,48.3464411],[16.9551512,48.2516513],[16.9907734,48.1498955],[17.0925513,48.1397088],[17.0823736,48.0241182],[17.1739737,48.0207146],[17.0823736,47.8741447],[16.9856845,47.8673174],[17.0823736,47.8092489],[17.0925513,47.7031919],[16.7414176,47.6792136],[16.7057953,47.7511153],[16.5378617,47.7545368],[16.5480395,47.7066164],[16.4208172,47.6689338],[16.573484,47.6175045],[16.670173,47.631224],[16.7108842,47.538548],[16.6599952,47.4491493],[16.5429506,47.3940591],[16.4615283,47.3940591],[16.4920617,47.276801],[16.425906,47.1973317],[16.4717061,47.1489007],[16.5480395,47.1489007],[16.476795,47.0796369],[16.527684,47.0588402],[16.5073284,46.9929304]]],"terms_text":"basemap.at"},{"id":"basemap.at-orthofoto","name":"basemap.at Orthofoto","type":"tms","template":"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/bmaporthofoto30cm/normal/google3857/{zoom}/{y}/{x}.jpeg","description":"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery.","scaleExtent":[0,19],"polygon":[[[16.5073284,46.9929304],[16.283417,46.9929304],[16.135839,46.8713046],[15.9831722,46.8190947],[16.0493278,46.655175],[15.8610387,46.7180116],[15.7592608,46.6900933],[15.5607938,46.6796202],[15.5760605,46.6342132],[15.4793715,46.6027553],[15.4335715,46.6516819],[15.2249267,46.6342132],[15.0468154,46.6481886],[14.9908376,46.5887681],[14.9603042,46.6237293],[14.8534374,46.6027553],[14.8330818,46.5012666],[14.7516595,46.4977636],[14.6804149,46.4381781],[14.6142593,46.4381781],[14.578637,46.3785275],[14.4412369,46.4311638],[14.1613476,46.4276563],[14.1257253,46.4767409],[14.0188585,46.4767409],[13.9119917,46.5257813],[13.8254805,46.5047694],[13.4438134,46.560783],[13.3064132,46.5502848],[13.1283019,46.5887681],[12.8433237,46.6132433],[12.7262791,46.6412014],[12.5125455,46.6656529],[12.3598787,46.7040543],[12.3649676,46.7703197],[12.2886341,46.7772902],[12.2733674,46.8852187],[12.2072118,46.8747835],[12.1308784,46.9026062],[12.1156117,46.9998721],[12.2530119,47.0657733],[12.2123007,47.0934969],[11.9833004,47.0449712],[11.7339445,46.9616816],[11.6321666,47.010283],[11.5405665,46.9755722],[11.4998553,47.0068129],[11.418433,46.9651546],[11.2555884,46.9755722],[11.1130993,46.913036],[11.0418548,46.7633482],[10.8891879,46.7598621],[10.7416099,46.7842599],[10.7059877,46.8643462],[10.5787653,46.8399847],[10.4566318,46.8504267],[10.4769874,46.9269392],[10.3853873,46.9894592],[10.2327204,46.8643462],[10.1207647,46.8330223],[9.8663199,46.9408389],[9.9019422,47.0033426],[9.6831197,47.0588402],[9.6118752,47.0380354],[9.6322307,47.128131],[9.5813418,47.1662025],[9.5406306,47.2664422],[9.6067863,47.3492559],[9.6729419,47.369939],[9.6424085,47.4457079],[9.5660751,47.4801122],[9.7136531,47.5282405],[9.7848976,47.5969187],[9.8357866,47.5454185],[9.9477423,47.538548],[10.0902313,47.4491493],[10.1105869,47.3664924],[10.2428982,47.3871688],[10.1869203,47.2698953],[10.3243205,47.2975125],[10.4820763,47.4491493],[10.4311873,47.4869904],[10.4413651,47.5900549],[10.4871652,47.5522881],[10.5482319,47.5351124],[10.5991209,47.5660246],[10.7568766,47.5316766],[10.8891879,47.5454185],[10.9400769,47.4869904],[10.9960547,47.3906141],[11.2352328,47.4422662],[11.2810328,47.3975039],[11.4235219,47.5144941],[11.5761888,47.5076195],[11.6067221,47.5900549],[11.8357224,47.5866227],[12.003656,47.6243647],[12.2072118,47.6037815],[12.1614117,47.6963421],[12.2581008,47.7442718],[12.2530119,47.6792136],[12.4311232,47.7100408],[12.4921899,47.631224],[12.5685234,47.6277944],[12.6295901,47.6894913],[12.7720792,47.6689338],[12.8331459,47.5419833],[12.975635,47.4732332],[13.0417906,47.4938677],[13.0367017,47.5557226],[13.0977685,47.6415112],[13.0316128,47.7100408],[12.9043905,47.7203125],[13.0061684,47.84683],[12.9451016,47.9355501],[12.8636793,47.9594103],[12.8636793,48.0036929],[12.7517236,48.0989418],[12.8738571,48.2109733],[12.9603683,48.2109733],[13.0417906,48.2652035],[13.1842797,48.2990682],[13.2606131,48.2922971],[13.3980133,48.3565867],[13.4438134,48.417418],[13.4387245,48.5523383],[13.509969,48.5860123],[13.6117469,48.5725454],[13.7287915,48.5118999],[13.7847694,48.5725454],[13.8203916,48.6263915],[13.7949471,48.7171267],[13.850925,48.7741724],[14.0595697,48.6633774],[14.0137696,48.6331182],[14.0748364,48.5927444],[14.2173255,48.5961101],[14.3649034,48.5489696],[14.4666813,48.6499311],[14.5582815,48.5961101],[14.5989926,48.6263915],[14.7211261,48.5759124],[14.7211261,48.6868997],[14.822904,48.7271983],[14.8178151,48.777526],[14.9647227,48.7851754],[14.9893637,49.0126611],[15.1485933,48.9950306],[15.1943934,48.9315502],[15.3063491,48.9850128],[15.3928603,48.9850128],[15.4844604,48.9282069],[15.749083,48.8545973],[15.8406831,48.8880697],[16.0086166,48.7808794],[16.2070835,48.7339115],[16.3953727,48.7372678],[16.4920617,48.8110498],[16.6905286,48.7741724],[16.7057953,48.7339115],[16.8991733,48.713769],[16.9755067,48.515271],[16.8482844,48.4511817],[16.8533733,48.3464411],[16.9551512,48.2516513],[16.9907734,48.1498955],[17.0925513,48.1397088],[17.0823736,48.0241182],[17.1739737,48.0207146],[17.0823736,47.8741447],[16.9856845,47.8673174],[17.0823736,47.8092489],[17.0925513,47.7031919],[16.7414176,47.6792136],[16.7057953,47.7511153],[16.5378617,47.7545368],[16.5480395,47.7066164],[16.4208172,47.6689338],[16.573484,47.6175045],[16.670173,47.631224],[16.7108842,47.538548],[16.6599952,47.4491493],[16.5429506,47.3940591],[16.4615283,47.3940591],[16.4920617,47.276801],[16.425906,47.1973317],[16.4717061,47.1489007],[16.5480395,47.1489007],[16.476795,47.0796369],[16.527684,47.0588402],[16.5073284,46.9929304]]],"terms_text":"basemap.at","best":true},{"id":"bavaria-DOP80","name":"Bavaria DOP 80cm","type":"tms","template":"http://mapproxy.osm.ch:8080/tiles/BAYERNDOP80/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[0,18],"polygon":[[[10.1235886,50.568462],[10.1428576,50.5507804],[10.2028056,50.5574195],[10.2520485,50.5179575],[10.3269835,50.4934473],[10.4104825,50.4184762],[10.6031724,50.3310874],[10.6224414,50.2271041],[10.7252093,50.2106649],[10.7294913,50.2476451],[10.8515282,50.2435376],[10.7187863,50.3201525],[10.7123633,50.3652428],[10.8558102,50.3966441],[10.9371682,50.3966441],[10.9906932,50.3666085],[11.1277171,50.3666085],[11.1791011,50.3133169],[11.1619731,50.294172],[11.24119,50.2928042],[11.249754,50.3734364],[11.24119,50.479825],[11.358945,50.5234025],[11.4381619,50.5097889],[11.4424439,50.4893611],[11.425316,50.4771001],[11.425316,50.4416618],[11.4895459,50.4225686],[11.4916869,50.3980089],[11.5195199,50.3980089],[11.5259429,50.3761673],[11.5987369,50.4034677],[11.6372748,50.3884544],[11.7935678,50.4212045],[11.8363877,50.3925494],[11.9220277,50.4280246],[11.9862577,50.3870894],[11.9841167,50.3570478],[12.0483466,50.3310874],[12.0933076,50.3297207],[12.1297046,50.2982751],[12.1404096,50.2722826],[12.1061536,50.255859],[12.1125766,50.2353216],[12.1489736,50.236691],[12.1982166,50.2010728],[12.2239086,50.1640565],[12.2046396,50.1434795],[12.2067806,50.1077916],[12.2431775,50.0995522],[12.2774335,50.0720772],[12.4936744,49.985428],[12.4979564,49.9413559],[12.5557634,49.9220616],[12.5493404,49.8682726],[12.4808284,49.7881677],[12.4101755,49.7577484],[12.4615594,49.7065456],[12.5471994,49.6802313],[12.5878784,49.552613],[12.6542493,49.534553],[12.6628133,49.4330153],[12.7527353,49.4107323],[12.7976963,49.3466124],[12.9047462,49.3563752],[12.9968092,49.3368477],[13.0546161,49.2754251],[13.1316921,49.2195199],[13.1916401,49.1439475],[13.236601,49.1215335],[13.296549,49.1229347],[13.371484,49.0808823],[13.414304,49.0289687],[13.414304,48.9798112],[13.5791609,48.9699739],[13.6348268,48.9432629],[13.6776468,48.8869823],[13.7375948,48.8926132],[13.7846968,48.8334571],[13.8403627,48.774231],[13.8168118,48.7064584],[13.8446447,48.7008065],[13.8425037,48.6003807],[13.7654278,48.5422972],[13.7525818,48.5040106],[13.6712238,48.5054291],[13.6433908,48.5437146],[13.4571239,48.5508013],[13.4571239,48.4159838],[13.40574,48.3605338],[13.283703,48.2751083],[13.0931541,48.2694081],[12.9582712,48.1909669],[12.8769132,48.1852574],[12.7720043,48.0938188],[12.8640672,48.0136764],[12.8983232,47.9549216],[12.9454252,47.9563555],[12.9968092,47.8846147],[13.0139372,47.834337],[12.9347202,47.7321953],[13.0588981,47.7249947],[13.1188461,47.6385093],[13.0653211,47.5692178],[13.0567571,47.473792],[13.0032322,47.4520801],[12.7677223,47.5504355],[12.7698633,47.6327385],[12.7398893,47.6731207],[12.6670953,47.6702373],[12.5750324,47.621195],[12.4808284,47.6197519],[12.4144575,47.6702373],[12.2431775,47.6774455],[12.2132036,47.6918589],[12.1917936,47.6817699],[12.2132036,47.6659119],[12.2110626,47.603875],[12.1746656,47.5952129],[12.1382686,47.603875],[11.8920537,47.603875],[11.8513747,47.5793285],[11.6394158,47.5822169],[11.5944549,47.5489905],[11.5901729,47.5128508],[11.5173789,47.498388],[11.4403029,47.5041736],[11.395342,47.4752392],[11.427457,47.4448409],[11.346099,47.4433929],[11.279728,47.3955873],[11.2133571,47.3883402],[11.247613,47.4318076],[11.1020251,47.3926886],[10.9650012,47.3897897],[10.9778472,47.4361524],[10.9178992,47.4752392],[10.8707972,47.4752392],[10.8558102,47.4940484],[10.9007712,47.5142969],[10.8729382,47.5359831],[10.8108493,47.5128508],[10.6438513,47.5489905],[10.5946084,47.5547705],[10.5796214,47.5287553],[10.4618664,47.5403192],[10.4661484,47.4839212],[10.4875584,47.4781333],[10.4875584,47.4129762],[10.4597254,47.4028333],[10.4597254,47.375293],[10.4104825,47.3738431],[10.4083415,47.3433862],[10.3205605,47.2867768],[10.2820225,47.2780622],[10.2841635,47.2620819],[10.1471396,47.2620819],[10.1921006,47.3027497],[10.1942416,47.3738431],[10.1664086,47.3738431],[10.1664086,47.3462876],[10.1000376,47.3433862],[10.0614996,47.3636928],[10.0679226,47.4187712],[10.0936146,47.426014],[10.0957556,47.4419449],[9.9780007,47.485368],[9.9565907,47.5273097],[9.8945017,47.5287553],[9.8559637,47.5085124],[9.8174258,47.544655],[9.8217078,47.5764399],[9.7746058,47.5822169],[9.7382088,47.525864],[9.6739788,47.5345376],[9.5840569,47.564884],[9.6397228,47.6053186],[9.7167988,47.603875],[9.8559637,47.6760039],[9.9780007,47.6558179],[10.0293846,47.6817699],[10.1000376,47.6673537],[10.1321526,47.6760039],[10.1428576,47.7019459],[10.0614996,47.7725005],[10.1128836,47.8098988],[10.0829096,47.8530173],[10.1086016,47.9090177],[10.0764866,47.9649577],[10.1300116,48.020837],[10.1342936,48.1066872],[10.1000376,48.1281274],[10.0550766,48.2622821],[9.9694367,48.3676462],[10.0315256,48.4259299],[10.0293846,48.461436],[10.1235886,48.4770509],[10.1535626,48.4514968],[10.2349205,48.5125212],[10.3162785,48.516776],[10.2991505,48.6187835],[10.2456255,48.6682961],[10.2734585,48.7064584],[10.3698035,48.6838472],[10.4318924,48.6993935],[10.4511614,48.7276471],[10.4019185,48.7460035],[10.4404564,48.8489571],[10.4340334,48.9587289],[10.3376885,49.0205451],[10.2499075,49.0359872],[10.2499075,49.0738701],[10.2006646,49.1033147],[10.2520485,49.1327418],[10.1235886,49.1971401],[10.1193066,49.2628519],[10.1514216,49.2893915],[10.1043196,49.3452175],[10.1407166,49.3940134],[10.1086016,49.445545],[10.1107426,49.5053651],[10.0722046,49.5331635],[10.0165387,49.4761598],[9.9266167,49.478942],[9.9244757,49.5567797],[9.8987837,49.5817727],[9.8559637,49.5387213],[9.8067208,49.5567797],[9.8666687,49.6067529],[9.8538227,49.6441991],[9.8174258,49.6608327],[9.8345537,49.6899277],[9.7960158,49.7203895],[9.7574778,49.7079302],[9.7403498,49.6857723],[9.7060938,49.7162368],[9.6782608,49.7162368],[9.6825428,49.6885426],[9.6204539,49.6913127],[9.6461458,49.78955],[9.5583649,49.7743431],[9.5712109,49.7356133],[9.5069809,49.7522156],[9.4919939,49.7798735],[9.4684429,49.7605146],[9.425623,49.7784909],[9.404213,49.7646636],[9.33356,49.770195],[9.329278,49.7342295],[9.408495,49.725926],[9.427764,49.6982374],[9.414918,49.6441991],[9.380662,49.6386533],[9.359252,49.6497443],[9.339983,49.6372668],[9.31215,49.648358],[9.277894,49.626173],[9.284317,49.6081403],[9.241497,49.5748315],[9.0980501,49.5720547],[9.0659351,49.6081403],[9.1001911,49.6511305],[9.0916271,49.6926978],[9.1301651,49.7120837],[9.1387291,49.7425316],[9.1087551,49.7563653],[9.1365881,49.7909322],[9.1001911,49.78955],[9.0723581,49.8282367],[9.0359611,49.8351418],[9.0166922,50.0267091],[8.9631672,50.0308352],[8.9567442,50.0597083],[9.0017052,50.0707031],[9.0209742,50.1105378],[9.1216011,50.1228936],[9.1558571,50.1132838],[9.1965361,50.1187753],[9.1858311,50.1352462],[9.235074,50.1475956],[9.37638,50.1270115],[9.408495,50.0816953],[9.5219679,50.095432],[9.5048399,50.1421073],[9.5326729,50.1640565],[9.4898529,50.1695422],[9.4941349,50.2435376],[9.6140309,50.221625],[9.6654148,50.2353216],[9.6354408,50.2490142],[9.6675558,50.2722826],[9.7424908,50.3092151],[9.7296448,50.3584137],[9.7703238,50.4293885],[9.8688097,50.4007384],[9.9180527,50.4089259],[10.0358076,50.479825],[10.0379486,50.5111504],[10.1235886,50.568462]]]},{"id":"GRB","name":"Belgium AGIV GRB Flanders","type":"tms","template":"http://tile.informatievlaanderen.be/ws/raadpleegdiensten/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=grb_bsk&STYLE=&FORMAT=image/png&tileMatrixSet=GoogleMapsVL&tileMatrix={zoom}&tileRow={y}&tileCol={x}","scaleExtent":[0,21],"polygon":[[[2.522393220658428,51.101723961331],[3.1260610915867457,51.34117672029327],[3.174929443042849,51.382459567439525],[3.3761520666856217,51.38784154353026],[3.410647373595811,51.33040116175589],[3.4020235468682634,51.28547573497245],[3.4911364230529203,51.256700377228974],[3.4825125963253734,51.30345118353617],[3.5773746903283947,51.323216048914524],[3.813092620881357,51.27288873325703],[3.8217164476089045,51.236906864834886],[3.9309515861578386,51.236906864834886],[4.054559769252684,51.27468708752057],[4.20116482362099,51.35194974615148],[4.169544125619984,51.38066543475199],[4.342020660170932,51.395016527087456],[4.3650175314443915,51.46491366130351],[4.5374940659953396,51.50071687469512],[4.571989372905529,51.479238319799464],[4.560490937268798,51.44879304380801],[4.638105377816725,51.45058450468522],[4.750215125274841,51.5239738914927],[4.8364533925503155,51.507874144493115],[5.080795149830825,51.49892738159079],[5.135412719105292,51.447001512638565],[5.106666630013469,51.391429175957505],[5.264770120018504,51.31782647548482],[5.264770120018504,51.28727359653538],[5.4085005654776275,51.292666758936925],[5.486115006025553,51.325012432665545],[5.5809771000285755,51.28367780302667],[5.583851708937758,51.23510703218069],[5.767826679125435,51.20449910348059],[5.8770618176743685,51.161253258857485],[5.704585283123422,50.80292546633848],[5.905807906766195,50.7865720955422],[5.9374286047672005,50.732019528192964],[5.902933297857012,50.70107817444857],[5.8138204216723555,50.69379488717487],[5.615472406938765,50.761122144578216],[5.500488050571466,50.71200098472672],[5.204403332925673,50.70289881954383],[5.164158808197117,50.67558172042608],[5.037676016193088,50.70107817444857],[4.988807664736986,50.750210783384084],[4.916942442007425,50.72656077355532],[4.790459650003396,50.766576871275696],[4.681224511454462,50.77021300246129],[4.6697260758177315,50.73565834458533],[4.287403090896464,50.67922491935501],[3.91082932379356,50.677403355240585],[3.718230526878334,50.752029520237265],[3.6549891308763196,50.71200098472672],[3.5342555566906557,50.710180693059606],[3.514133294326379,50.741116039142966],[3.45664111614273,50.74384464791457],[3.373277457776438,50.69561581502901],[3.310036061774423,50.70745012302645],[3.2899137994101473,50.7365680045137],[3.1648683118607086,50.742935129324266],[3.1318103094051106,50.77203096207303],[3.080067349039826,50.76021296163662],[2.8745328120332805,50.73929687829333],[2.8960923788521487,50.71109084772858],[2.8745328120332805,50.69561581502901],[2.796918371485353,50.70289881954383],[2.699181668573149,50.80020030189157],[2.6201299235706315,50.79747497850781],[2.5698242676599374,50.85830267681076],[2.5669496587507554,50.923581424665855],[2.6028822701155367,50.94984841176044],[2.549702005295661,50.996006093918574],[2.522393220658428,51.101723961331]]],"terms_text":"GRB Flanders (c) AGIV"},{"id":"AGIV","name":"Belgium AGIV Orthophoto Flanders","type":"tms","template":"http://tile.informatievlaanderen.be/ws/raadpleegdiensten/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=omwrgbmrvl&STYLE=&FORMAT=image/png&tileMatrixSet=GoogleMapsVL&tileMatrix={zoom}&tileRow={y}&tileCol={x}","scaleExtent":[0,21],"polygon":[[[2.522393220658428,51.101723961331],[3.1260610915867457,51.34117672029327],[3.174929443042849,51.382459567439525],[3.3761520666856217,51.38784154353026],[3.410647373595811,51.33040116175589],[3.4020235468682634,51.28547573497245],[3.4911364230529203,51.256700377228974],[3.4825125963253734,51.30345118353617],[3.5773746903283947,51.323216048914524],[3.813092620881357,51.27288873325703],[3.8217164476089045,51.236906864834886],[3.9309515861578386,51.236906864834886],[4.054559769252684,51.27468708752057],[4.20116482362099,51.35194974615148],[4.169544125619984,51.38066543475199],[4.342020660170932,51.395016527087456],[4.3650175314443915,51.46491366130351],[4.5374940659953396,51.50071687469512],[4.571989372905529,51.479238319799464],[4.560490937268798,51.44879304380801],[4.638105377816725,51.45058450468522],[4.750215125274841,51.5239738914927],[4.8364533925503155,51.507874144493115],[5.080795149830825,51.49892738159079],[5.135412719105292,51.447001512638565],[5.106666630013469,51.391429175957505],[5.264770120018504,51.31782647548482],[5.264770120018504,51.28727359653538],[5.4085005654776275,51.292666758936925],[5.486115006025553,51.325012432665545],[5.5809771000285755,51.28367780302667],[5.583851708937758,51.23510703218069],[5.767826679125435,51.20449910348059],[5.8770618176743685,51.161253258857485],[5.704585283123422,50.80292546633848],[5.905807906766195,50.7865720955422],[5.9374286047672005,50.732019528192964],[5.902933297857012,50.70107817444857],[5.8138204216723555,50.69379488717487],[5.615472406938765,50.761122144578216],[5.500488050571466,50.71200098472672],[5.204403332925673,50.70289881954383],[5.164158808197117,50.67558172042608],[5.037676016193088,50.70107817444857],[4.988807664736986,50.750210783384084],[4.916942442007425,50.72656077355532],[4.790459650003396,50.766576871275696],[4.681224511454462,50.77021300246129],[4.6697260758177315,50.73565834458533],[4.287403090896464,50.67922491935501],[3.91082932379356,50.677403355240585],[3.718230526878334,50.752029520237265],[3.6549891308763196,50.71200098472672],[3.5342555566906557,50.710180693059606],[3.514133294326379,50.741116039142966],[3.45664111614273,50.74384464791457],[3.373277457776438,50.69561581502901],[3.310036061774423,50.70745012302645],[3.2899137994101473,50.7365680045137],[3.1648683118607086,50.742935129324266],[3.1318103094051106,50.77203096207303],[3.080067349039826,50.76021296163662],[2.8745328120332805,50.73929687829333],[2.8960923788521487,50.71109084772858],[2.8745328120332805,50.69561581502901],[2.796918371485353,50.70289881954383],[2.699181668573149,50.80020030189157],[2.6201299235706315,50.79747497850781],[2.5698242676599374,50.85830267681076],[2.5669496587507554,50.923581424665855],[2.6028822701155367,50.94984841176044],[2.549702005295661,50.996006093918574],[2.522393220658428,51.101723961331]]],"terms_text":"Orthophoto Flanders most recent (c) AGIV","best":true},{"id":"Benin_cotonou_pleiade_2016","name":"Benin: Cotonou Pleiade 2016","type":"tms","template":"http://geoxxx.agrocampus-ouest.fr/owsifl/gwc/service/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=Benin:cotonou_pleiade_2016&STYLE=&FORMAT=image/jpeg&tileMatrixSet=EPSG:3857&tileMatrix=EPSG:3857:{zoom}&tileRow={y}&tileCol={x}","scaleExtent":[0,21],"polygon":[[[2.31953818544,6.55745092536],[2.33645249928,6.56023631702],[2.36377172444,6.56211241002],[2.36737717181,6.56067658005],[2.37777373205,6.54939665325],[2.3777926612,6.53484752744],[2.36994151563,6.4933195729],[2.37038356708,6.45527010853],[2.36958186167,6.45269435578],[2.36188103586,6.44177160245],[2.35391742884,6.40545220189],[2.3674929737,6.40149524022],[2.39525870424,6.40071623744],[2.40128040262,6.40374371884],[2.40587684694,6.40340733291],[2.42045897749,6.39382909301],[2.42485054154,6.3979366042],[2.42949152505,6.39887495342],[2.43625257397,6.39628121034],[2.43958410532,6.40041525877],[2.44439433776,6.40189359345],[2.45375647532,6.39899446003],[2.47144744127,6.3963166199],[2.48162019208,6.3910582748],[2.49453210303,6.38739776192],[2.50893162289,6.38888498676],[2.50719014059,6.39228876781],[2.50120407357,6.39162040687],[2.4963025358,6.39521449649],[2.49509997769,6.40123077776],[2.49543290813,6.40400928653],[2.49830345887,6.41022131795],[2.50191336015,6.41281720321],[2.5108701911,6.41321333458],[2.52218648559,6.40849403999],[2.53352059576,6.4051656109],[2.53809922441,6.40960941297],[2.5411100736,6.41090182623],[2.54650822333,6.41099034757],[2.54654385468,6.40651114868],[2.57638511144,6.40723702943],[2.57642074279,6.41176933466],[2.58575615684,6.41196408125],[2.58867792765,6.41095493903],[2.60877400982,6.39413560832],[2.62569890171,6.39487921149],[2.64554556441,6.39728706193],[2.65039142819,6.39339200408],[2.6536650586,6.36823275735],[2.6431181786,6.3665949733],[2.61251084779,6.3628944474],[2.56867983171,6.3607044406],[2.54682890549,6.36055393954],[2.54687344468,6.35546343647],[2.50206702036,6.35461353888],[2.47064016846,6.35595920942],[2.46777184468,6.35202842507],[2.46422652522,6.35020467258],[2.45253944198,6.35006302163],[2.4511320036,6.34813302357],[2.44737289603,6.34629155079],[2.43757427441,6.34653944174],[2.43297783009,6.33841209773],[2.43016295333,6.33706638135],[2.42244876576,6.33706638135],[2.39236031651,6.34114999999],[2.39315311407,6.34114999999],[2.3652849434,6.34445228474],[2.35386064137,6.34529777247],[2.34377474198,6.34457844399],[2.34093759563,6.34533982549],[2.31086028117,6.36567095094],[2.28434610184,6.37465215648],[2.28146887022,6.37761782314],[2.27599054995,6.39517244756],[2.27611525968,6.39819996182],[2.31528747657,6.4926104105],[2.31579967725,6.5530659484],[2.31953818544,6.55745092536]],[[1.69563043958,6.25076170066],[1.70009994721,6.24711901182],[1.70417862346,6.24697179839],[1.75874803806,6.25835802546],[1.77079143482,6.25995187823],[1.81712109941,6.27161341959],[1.84456614779,6.27656750346],[1.85767848509,6.27944518918],[1.88843363033,6.28325588467],[1.90481876292,6.28594870029],[1.90617692982,6.29435189983],[1.90083111364,6.29721233234],[1.89880903445,6.29953873942],[1.89404334121,6.30085024405],[1.89047742238,6.29969866569],[1.88747882146,6.29636150888],[1.88344050885,6.29622344016],[1.86969682855,6.29226563906],[1.8564007671,6.29198230539],[1.85206654725,6.28674503171],[1.84991419093,6.28906373821],[1.84691224958,6.29202989661],[1.8435272712,6.29332703219],[1.84040507404,6.29315437611],[1.83626738336,6.29129499924],[1.83409832485,6.28733273348],[1.83416513363,6.2851988527],[1.83229560117,6.28456355663],[1.82785949792,6.28644177291],[1.82182443779,6.2908379014],[1.81562903657,6.28997904337],[1.81211044063,6.29143113241],[1.80757635117,6.29570768815],[1.80471693522,6.29692955475],[1.80073513171,6.29709778253],[1.79775991387,6.29612383144],[1.79625448928,6.29491967121],[1.79490049792,6.28965143736],[1.79641483036,6.28608317469],[1.80097564333,6.28338261222],[1.79566657198,6.28013306439],[1.79156005874,6.28174455931],[1.78498607441,6.28122215216],[1.78092410036,6.27752986974],[1.77588226414,6.27550220232],[1.76744654171,6.27696318619],[1.75653444036,6.27496207997],[1.74833032171,6.27238985028],[1.74761769468,6.27726423691],[1.74572477914,6.27938486862],[1.73948038482,6.27984972411],[1.73680357955,6.27761398678],[1.73572127725,6.27891558552],[1.72901812928,6.27911038233],[1.72435487617,6.27422273126],[1.72449294765,6.2678607472],[1.72555966124,6.26683029328],[1.69933944056,6.26159387355],[1.69572953928,6.25725948175],[1.69563043958,6.25076170066]]],"best":true},{"id":"Bing","name":"Bing aerial imagery","type":"bing","template":"http://www.bing.com/maps/","description":"Satellite and aerial imagery.","scaleExtent":[0,22],"default":true},{"id":"British_Columbia_Mosaic","name":"British Columbia Mosaic","type":"tms","template":"http://{switch:a,b,c,d}.imagery.paulnorman.ca/tiles/bc_mosaic/{zoom}/{x}/{y}.png","scaleExtent":[9,20],"polygon":[[[-123.3176032,49.3272567],[-123.4405258,49.3268222],[-123.440717,49.3384429],[-123.4398375,49.3430357],[-123.4401258,49.3435398],[-123.4401106,49.3439946],[-123.4406265,49.3444493],[-123.4404747,49.3455762],[-123.4397768,49.3460606],[-123.4389726,49.3461298],[-123.4372904,49.3567236],[-123.4374774,49.3710843],[-123.4335292,49.3709446],[-123.4330357,49.373725],[-123.4332717,49.3751221],[-123.4322847,49.3761001],[-123.4317482,49.3791736],[-123.4314264,49.3795927],[-123.4307826,49.3823866],[-123.4313405,49.3827358],[-123.4312118,49.3838533],[-123.4300415,49.3845883],[-123.4189858,49.3847087],[-123.4192235,49.4135198],[-123.3972532,49.4135691],[-123.3972758,49.4243473],[-123.4006929,49.4243314],[-123.4007741,49.5703491],[-123.4000812,49.570345],[-123.4010761,49.5933838],[-123.3760399,49.5932848],[-123.3769811,49.6756063],[-123.3507288,49.6756396],[-123.3507969,49.7086751],[-123.332887,49.708722],[-123.3327888,49.7256288],[-123.3007111,49.7255625],[-123.3009164,49.7375384],[-123.2885986,49.737638],[-123.2887823,49.8249207],[-123.2997955,49.8249207],[-123.3011721,49.8497814],[-123.3218218,49.850669],[-123.3273284,49.8577696],[-123.3276726,49.9758852],[-123.3008279,49.9752212],[-123.3007204,50.0997002],[-123.2501716,50.100735],[-123.25091,50.2754901],[-123.0224338,50.2755598],[-123.0224879,50.3254853],[-123.0009318,50.3254689],[-123.0007778,50.3423899],[-122.9775023,50.3423408],[-122.9774766,50.3504306],[-122.9508137,50.3504961],[-122.950795,50.3711984],[-122.9325221,50.3711521],[-122.9321048,50.399793],[-122.8874234,50.3999748],[-122.8873385,50.4256108],[-122.6620152,50.4256959],[-122.6623083,50.3994506],[-122.5990316,50.3992413],[-122.5988274,50.3755206],[-122.5724832,50.3753706],[-122.5735621,50.2493891],[-122.5990415,50.2494643],[-122.5991504,50.2265663],[-122.6185016,50.2266359],[-122.6185741,50.2244081],[-122.6490609,50.2245126],[-122.6492181,50.1993528],[-122.7308575,50.1993758],[-122.7311583,50.1244287],[-122.7490352,50.1245109],[-122.7490541,50.0903032],[-122.7687806,50.0903435],[-122.7689801,49.9494546],[-122.999047,49.9494706],[-122.9991199,49.8754553],[-122.9775894,49.8754553],[-122.9778145,49.6995098],[-122.9992362,49.6994781],[-122.9992524,49.6516526],[-123.0221525,49.6516526],[-123.0221162,49.5995096],[-123.0491898,49.5994625],[-123.0491898,49.5940523],[-123.0664647,49.5940405],[-123.0663594,49.5451868],[-123.0699906,49.5451202],[-123.0699008,49.5413153],[-123.0706835,49.5392837],[-123.0708888,49.5379931],[-123.0711454,49.5368773],[-123.0711069,49.5358115],[-123.0713764,49.532822],[-123.0716458,49.5321141],[-123.07171,49.5313896],[-123.0720308,49.5304153],[-123.0739554,49.5303486],[-123.0748023,49.5294992],[-123.0748151,49.5288079],[-123.0743403,49.5280584],[-123.073532,49.5274588],[-123.0733652,49.5270423],[-123.0732882,49.5255932],[-123.0737116,49.5249602],[-123.0736218,49.5244938],[-123.0992583,49.5244854],[-123.0991649,49.4754502],[-123.071052,49.4755252],[-123.071088,49.4663034],[-123.0739204,49.4663054],[-123.07422,49.4505028],[-123.0746319,49.4500858],[-123.074651,49.449329],[-123.0745999,49.449018],[-123.0744619,49.4486927],[-123.0743336,49.4479899],[-123.0742427,49.4477688],[-123.0743061,49.4447473],[-123.0747103,49.4447556],[-123.0746384,49.4377306],[-122.9996506,49.4377363],[-122.9996506,49.4369214],[-122.8606163,49.4415314],[-122.8102616,49.4423972],[-122.8098984,49.3766739],[-122.4036093,49.3766617],[-122.4036341,49.3771944],[-122.264739,49.3773028],[-122.263542,49.2360088],[-122.2155742,49.236139],[-122.0580956,49.235878],[-121.9538274,49.2966525],[-121.9400911,49.3045389],[-121.9235761,49.3142257],[-121.8990871,49.3225436],[-121.8883447,49.3259752],[-121.8552982,49.3363575],[-121.832697,49.3441519],[-121.7671336,49.3654361],[-121.6736683,49.3654589],[-121.6404153,49.3743775],[-121.5961976,49.3860493],[-121.5861178,49.3879193],[-121.5213684,49.3994649],[-121.5117375,49.4038378],[-121.4679302,49.4229024],[-121.4416803,49.4345607],[-121.422429,49.4345788],[-121.3462885,49.3932312],[-121.3480144,49.3412388],[-121.5135035,49.320577],[-121.6031683,49.2771727],[-121.6584065,49.1856125],[-121.679953,49.1654109],[-121.7815793,49.0702559],[-121.8076228,49.0622471],[-121.9393997,49.0636219],[-121.9725524,49.0424179],[-121.9921394,49.0332869],[-122.0035289,49.0273413],[-122.0178564,49.0241067],[-122.1108634,48.9992786],[-122.1493067,48.9995305],[-122.1492705,48.9991498],[-122.1991447,48.9996019],[-122.199181,48.9991974],[-122.234365,48.9994829],[-122.234365,49.000173],[-122.3994722,49.0012385],[-122.4521338,49.0016326],[-122.4521338,49.000883],[-122.4584089,49.0009306],[-122.4584814,48.9993124],[-122.4992458,48.9995022],[-122.4992458,48.9992906],[-122.5492618,48.9995107],[-122.5492564,48.9993206],[-122.6580785,48.9994212],[-122.6581061,48.9954007],[-122.7067604,48.9955344],[-122.7519761,48.9956392],[-122.7922063,48.9957204],[-122.7921907,48.9994331],[-123.0350417,48.9995724],[-123.0350437,49.0000958],[-123.0397091,49.0000536],[-123.0397444,49.0001812],[-123.0485506,49.0001348],[-123.0485329,49.0004712],[-123.0557122,49.000448],[-123.0556324,49.0002284],[-123.0641365,49.0001293],[-123.064158,48.9999421],[-123.074899,48.9996928],[-123.0750717,49.0006218],[-123.0899573,49.0003726],[-123.109229,48.9999421],[-123.1271193,49.0003046],[-123.1359953,48.9998741],[-123.1362716,49.0005765],[-123.153851,48.9998061],[-123.1540533,49.0006806],[-123.1710015,49.0001274],[-123.2000916,48.9996849],[-123.2003446,49.0497785],[-123.2108845,49.0497232],[-123.2112218,49.051989],[-123.2070479,49.0520857],[-123.2078911,49.0607884],[-123.2191688,49.0600978],[-123.218958,49.0612719],[-123.2251766,49.0612719],[-123.2253874,49.0622388],[-123.2297088,49.0620316],[-123.2298142,49.068592],[-123.2331869,49.0687301],[-123.2335031,49.0705945],[-123.249313,49.0702493],[-123.2497346,49.0802606],[-123.2751358,49.0803986],[-123.2751358,49.0870947],[-123.299483,49.0873018],[-123.29944,49.080253],[-123.3254508,49.0803944],[-123.3254353,49.1154662],[-123.2750966,49.1503341],[-123.275181,49.1873267],[-123.2788067,49.1871063],[-123.278891,49.1910741],[-123.3004767,49.1910741],[-123.3004186,49.2622933],[-123.3126185,49.2622416],[-123.3125958,49.2714948],[-123.3154251,49.2714727],[-123.3156628,49.2818906],[-123.3174735,49.2818832],[-123.3174961,49.2918488],[-123.3190353,49.2918488],[-123.3190692,49.298602],[-123.3202349,49.2985651],[-123.3202786,49.3019749],[-123.3222679,49.3019605],[-123.3223943,49.3118263],[-123.3254002,49.3118086],[-123.3253898,49.3201721],[-123.3192695,49.3201957],[-123.3192242,49.3246748],[-123.3179437,49.3246596],[-123.3179861,49.3254065],[-123.3176032,49.3272567]]],"terms_url":"http://imagery.paulnorman.ca/tiles/about.html","terms_text":"Copyright Province of British Columbia, City of Surrey"},{"id":"lu.geoportail.opendata.cadastre","name":"Cadastre geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/cadastre/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/plan-cadastral-numerise-pcn-webservices-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie"},{"id":"osm-cambodia_laos_thailand_vietnam-bilingual","name":"Cambodia, Laos, Thailand, Vietnam, Myanmar bilingual","type":"tms","template":"http://{switch:a,b,c,d}.tile.osm-tools.org/osm_then/{zoom}/{x}/{y}.png","scaleExtent":[0,19],"polygon":[[[92.1023798,20.8135629],[93.5690546,24.0975527],[94.1733026,23.9269484],[95.1950312,26.707274],[96.7550898,27.5286657],[97.5845575,28.5805966],[98.738122,27.514051],[98.7436151,25.8799151],[97.6779413,24.7577376],[97.9635858,24.042382],[98.8205194,24.1627239],[99.5236444,22.9593356],[100.3695917,21.5051376],[101.7923212,22.4830518],[105.3628778,23.3331079],[106.8185663,22.8480137],[108.1973505,21.3619661],[107.4389505,18.8539792],[117.1453714,7.4656173],[119.6172953,5.2875389],[118.1231546,4.0502277],[117.2552347,4.3624942],[115.8654642,4.3460623],[115.5084085,3.0249771],[114.552598,1.5100953],[113.5418558,1.2574836],[112.9650736,1.5704982],[112.2454691,1.5100953],[111.67418,1.0158321],[110.4546976,0.9004918],[109.4988871,1.9218969],[103.2256937,1.1256762],[100.4626322,3.2388904],[97.6721048,8.0588831],[93.892808,15.9398659],[92.1023798,20.8135629]]],"terms_url":"http://www.osm-tools.org/","terms_text":"© osm-tools.org & OpenStreetMap contributors, CC-BY-SA"},{"id":"South_Africa-CapeTown-Aerial-2013","name":"City of Cape Town 2013 Aerial","type":"tms","template":"http://{switch:a,b,c}.coct.aerial.openstreetmap.org.za/layer/za_coct_aerial_2013/{zoom}/{x}/{y}.jpg","description":"OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the municipal area. 12cm ground sample distance","scaleExtent":[1,21],"polygon":[[[18.4486565,-33.893623],[18.4485868,-33.902644],[18.4702,-33.9027665],[18.4813902,-33.8472383],[18.4492466,-33.801069],[18.4281537,-33.7356408],[18.43914,-33.7177232],[18.4071895,-33.6589917],[18.3322379,-33.5775191],[18.3324525,-33.5504487],[18.353996,-33.5505918],[18.3542535,-33.5236025],[18.3652398,-33.5236561],[18.3650252,-33.5148009],[18.3760115,-33.5147652],[18.3760545,-33.5058017],[18.4296557,-33.5059449],[18.4296986,-33.4878541],[18.4404919,-33.4878899],[18.4405991,-33.4698849],[18.4943721,-33.4700997],[18.4943292,-33.4791564],[18.5158297,-33.4791743],[18.5157439,-33.4881941],[18.5264727,-33.4883015],[18.5263225,-33.5243538],[18.5479304,-33.5244253],[18.5479519,-33.5153913],[18.5693666,-33.5154987],[18.5693666,-33.524479],[18.5801169,-33.5245327],[18.580074,-33.5425978],[18.5907814,-33.5425978],[18.5907385,-33.5606413],[18.5799453,-33.5605341],[18.5798809,-33.569617],[18.5906956,-33.569617],[18.5906526,-33.5786811],[18.6230108,-33.5787347],[18.622925,-33.5877264],[18.6659691,-33.5878872],[18.6659262,-33.614928],[18.6767194,-33.6149726],[18.6765772,-33.6510279],[18.687298,-33.6510167],[18.6873409,-33.6600365],[18.6980697,-33.6600901],[18.6980697,-33.6690733],[18.7520358,-33.6692519],[18.7520787,-33.6421924],[18.7736437,-33.642246],[18.773708,-33.6331886],[18.8274595,-33.6332958],[18.8275239,-33.6603044],[18.8166663,-33.6602866],[18.8166019,-33.6783233],[18.8058087,-33.6783055],[18.8058087,-33.7053892],[18.8273951,-33.7054428],[18.8273308,-33.7234701],[18.838124,-33.7234344],[18.8380381,-33.7413865],[18.8165161,-33.7413687],[18.8163659,-33.7955057],[18.8055941,-33.7955057],[18.8055083,-33.8135675],[18.794758,-33.8135497],[18.7947151,-33.8315364],[18.7731072,-33.8315186],[18.7731287,-33.8405194],[18.7623569,-33.8405194],[18.7622711,-33.903588],[18.7514564,-33.9035167],[18.7510809,-33.9847823],[18.7619063,-33.9848001],[18.7617776,-34.0298785],[18.772603,-34.0298963],[18.7725815,-34.0389073],[18.7940338,-34.0389406],[18.7938756,-34.0406987],[18.7984461,-34.0411855],[18.8032445,-34.0411788],[18.8034055,-34.0389206],[18.8159367,-34.038974],[18.8163444,-34.0299318],[18.8379845,-34.0316479],[18.8380006,-34.030003],[18.8484183,-34.0300074],[18.8484666,-34.0218491],[18.859925,-34.0234675],[18.8598606,-34.0210132],[18.868272,-34.0220803],[18.8681862,-34.0211733],[18.8854596,-34.0234319],[18.8851806,-34.0213156],[18.9025184,-34.021031],[18.9025828,-34.0119958],[18.9134189,-34.0119958],[18.9134833,-33.9939582],[18.9458844,-33.9940294],[18.9458629,-34.003102],[18.9674279,-34.0029953],[18.9674708,-34.0120848],[18.9782211,-34.0120848],[18.9783284,-34.0211377],[18.9891431,-34.0211377],[18.9891645,-34.039134],[19.0000167,-34.0391251],[19.0000221,-34.0571798],[19.0108368,-34.0572509],[19.0107939,-34.0841436],[19.0000007,-34.0841258],[19.0000221,-34.0931977],[18.9891538,-34.0931711],[18.9891753,-34.1021976],[18.9783177,-34.1021798],[18.9783177,-34.111232],[18.967503,-34.1112143],[18.9674923,-34.1292536],[18.9566025,-34.1292358],[18.9565596,-34.1382408],[18.9674172,-34.1383118],[18.9674172,-34.1473157],[18.9891753,-34.147298],[18.9891753,-34.165303],[18.9782748,-34.1652852],[18.9783177,-34.1742863],[18.9674172,-34.1742685],[18.9674601,-34.1833042],[18.9565596,-34.1833219],[18.9565596,-34.1923565],[18.9457449,-34.192321],[18.945702,-34.2013192],[18.9348659,-34.2013725],[18.9348873,-34.2193305],[18.9023575,-34.2193482],[18.9017567,-34.2362557],[18.8878414,-34.2373467],[18.8894185,-34.2554123],[18.8805887,-34.2553414],[18.8792744,-34.2644348],[18.8696882,-34.2644126],[18.8697097,-34.2734386],[18.8371369,-34.2734208],[18.8371155,-34.2643771],[18.848016,-34.2644037],[18.8480267,-34.237391],[18.8154861,-34.210281],[18.8156471,-34.1741265],[18.8548824,-34.1562743],[18.7617561,-34.0840547],[18.6533734,-34.077479],[18.4797433,-34.1101217],[18.4463713,-34.1342269],[18.4444508,-34.1640868],[18.4359965,-34.1640513],[18.435975,-34.1820172],[18.4468111,-34.182106],[18.4467253,-34.1911052],[18.4659299,-34.1912117],[18.4866151,-34.2453911],[18.4788904,-34.2543659],[18.4860036,-34.2543748],[18.4677109,-34.2994116],[18.4892222,-34.3445792],[18.500112,-34.3445837],[18.4999189,-34.3626174],[18.467432,-34.3625111],[18.4673676,-34.3534947],[18.3916005,-34.3170651],[18.3917722,-34.2900161],[18.3701643,-34.2808678],[18.370682,-34.2178866],[18.3492324,-34.1816178],[18.3274743,-34.1814936],[18.3276674,-34.1634565],[18.3118746,-34.1543832],[18.3114025,-34.1435331],[18.3236656,-34.1346886],[18.3499297,-34.1042053],[18.3393189,-34.0882843],[18.3612487,-34.0597219],[18.3550474,-34.0553843],[18.3427522,-34.064326],[18.3199963,-34.0644326],[18.296071,-34.045126],[18.3068213,-34.0252637],[18.3287725,-34.0191992],[18.3289227,-34.001252],[18.3397374,-34.0012698],[18.3398017,-33.9866282],[18.3628687,-33.9735145],[18.3638129,-33.9292474],[18.3726212,-33.9292741],[18.3728358,-33.917763],[18.3977267,-33.8933469],[18.4486565,-33.893623]]],"terms_url":"https://www.capetown.gov.za","terms_text":"City of Cape Town Aerial - OPENSTREETMAP USE ONLY"},{"id":"South_Africa-CapeTown-Aerial","name":"City of Cape Town 2015 Aerial","type":"tms","template":"http://{switch:a,b,c}.coct.aerial.openstreetmap.org.za/layer/za_coct_aerial_2015/{zoom}/{x}/{y}.jpg","description":"OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the municipal area. 8cm ground sample distance","scaleExtent":[1,21],"polygon":[[[18.4486565,-33.893623],[18.4485868,-33.902644],[18.4702,-33.9027665],[18.4813902,-33.8472383],[18.4492466,-33.801069],[18.4281537,-33.7356408],[18.43914,-33.7177232],[18.4071895,-33.6589917],[18.3322379,-33.5775191],[18.3324525,-33.5504487],[18.353996,-33.5505918],[18.3542535,-33.5236025],[18.3652398,-33.5236561],[18.3650252,-33.5148009],[18.3760115,-33.5147652],[18.3760545,-33.5058017],[18.4296557,-33.5059449],[18.4296986,-33.4878541],[18.4404919,-33.4878899],[18.4405991,-33.4698849],[18.4943721,-33.4700997],[18.4943292,-33.4791564],[18.5158297,-33.4791743],[18.5157439,-33.4881941],[18.5264727,-33.4883015],[18.5263225,-33.5243538],[18.5479304,-33.5244253],[18.5479519,-33.5153913],[18.5693666,-33.5154987],[18.5693666,-33.524479],[18.5801169,-33.5245327],[18.580074,-33.5425978],[18.5907814,-33.5425978],[18.5907385,-33.5606413],[18.5799453,-33.5605341],[18.5798809,-33.569617],[18.5906956,-33.569617],[18.5906526,-33.5786811],[18.6230108,-33.5787347],[18.622925,-33.5877264],[18.6659691,-33.5878872],[18.6659262,-33.614928],[18.6767194,-33.6149726],[18.6765772,-33.6510279],[18.687298,-33.6510167],[18.6873409,-33.6600365],[18.6980697,-33.6600901],[18.6980697,-33.6690733],[18.7520358,-33.6692519],[18.7520787,-33.6421924],[18.7736437,-33.642246],[18.773708,-33.6331886],[18.8274595,-33.6332958],[18.8275239,-33.6603044],[18.8166663,-33.6602866],[18.8166019,-33.6783233],[18.8058087,-33.6783055],[18.8058087,-33.7053892],[18.8273951,-33.7054428],[18.8273308,-33.7234701],[18.838124,-33.7234344],[18.8380381,-33.7413865],[18.8165161,-33.7413687],[18.8163659,-33.7955057],[18.8055941,-33.7955057],[18.8055083,-33.8135675],[18.794758,-33.8135497],[18.7947151,-33.8315364],[18.7731072,-33.8315186],[18.7731287,-33.8405194],[18.7623569,-33.8405194],[18.7622711,-33.903588],[18.7514564,-33.9035167],[18.7510809,-33.9847823],[18.7619063,-33.9848001],[18.7617776,-34.0298785],[18.772603,-34.0298963],[18.7725815,-34.0389073],[18.7940338,-34.0389406],[18.7938756,-34.0406987],[18.7984461,-34.0411855],[18.8032445,-34.0411788],[18.8034055,-34.0389206],[18.8159367,-34.038974],[18.8163444,-34.0299318],[18.8379845,-34.0316479],[18.8380006,-34.030003],[18.8484183,-34.0300074],[18.8484666,-34.0218491],[18.859925,-34.0234675],[18.8598606,-34.0210132],[18.868272,-34.0220803],[18.8681862,-34.0211733],[18.8854596,-34.0234319],[18.8851806,-34.0213156],[18.9025184,-34.021031],[18.9025828,-34.0119958],[18.9134189,-34.0119958],[18.9134833,-33.9939582],[18.9458844,-33.9940294],[18.9458629,-34.003102],[18.9674279,-34.0029953],[18.9674708,-34.0120848],[18.9782211,-34.0120848],[18.9783284,-34.0211377],[18.9891431,-34.0211377],[18.9891645,-34.039134],[19.0000167,-34.0391251],[19.0000221,-34.0571798],[19.0108368,-34.0572509],[19.0107939,-34.0841436],[19.0000007,-34.0841258],[19.0000221,-34.0931977],[18.9891538,-34.0931711],[18.9891753,-34.1021976],[18.9783177,-34.1021798],[18.9783177,-34.111232],[18.967503,-34.1112143],[18.9674923,-34.1292536],[18.9566025,-34.1292358],[18.9565596,-34.1382408],[18.9674172,-34.1383118],[18.9674172,-34.1473157],[18.9891753,-34.147298],[18.9891753,-34.165303],[18.9782748,-34.1652852],[18.9783177,-34.1742863],[18.9674172,-34.1742685],[18.9674601,-34.1833042],[18.9565596,-34.1833219],[18.9565596,-34.1923565],[18.9457449,-34.192321],[18.945702,-34.2013192],[18.9348659,-34.2013725],[18.9348873,-34.2193305],[18.9023575,-34.2193482],[18.9017567,-34.2362557],[18.8878414,-34.2373467],[18.8894185,-34.2554123],[18.8805887,-34.2553414],[18.8792744,-34.2644348],[18.8696882,-34.2644126],[18.8697097,-34.2734386],[18.8371369,-34.2734208],[18.8371155,-34.2643771],[18.848016,-34.2644037],[18.8480267,-34.237391],[18.8154861,-34.210281],[18.8156471,-34.1741265],[18.8548824,-34.1562743],[18.7617561,-34.0840547],[18.6533734,-34.077479],[18.4797433,-34.1101217],[18.4463713,-34.1342269],[18.4444508,-34.1640868],[18.4359965,-34.1640513],[18.435975,-34.1820172],[18.4468111,-34.182106],[18.4467253,-34.1911052],[18.4659299,-34.1912117],[18.4866151,-34.2453911],[18.4788904,-34.2543659],[18.4860036,-34.2543748],[18.4677109,-34.2994116],[18.4892222,-34.3445792],[18.500112,-34.3445837],[18.4999189,-34.3626174],[18.467432,-34.3625111],[18.4673676,-34.3534947],[18.3916005,-34.3170651],[18.3917722,-34.2900161],[18.3701643,-34.2808678],[18.370682,-34.2178866],[18.3492324,-34.1816178],[18.3274743,-34.1814936],[18.3276674,-34.1634565],[18.3118746,-34.1543832],[18.3114025,-34.1435331],[18.3236656,-34.1346886],[18.3499297,-34.1042053],[18.3393189,-34.0882843],[18.3612487,-34.0597219],[18.3550474,-34.0553843],[18.3427522,-34.064326],[18.3199963,-34.0644326],[18.296071,-34.045126],[18.3068213,-34.0252637],[18.3287725,-34.0191992],[18.3289227,-34.001252],[18.3397374,-34.0012698],[18.3398017,-33.9866282],[18.3628687,-33.9735145],[18.3638129,-33.9292474],[18.3726212,-33.9292741],[18.3728358,-33.917763],[18.3977267,-33.8933469],[18.4486565,-33.893623]]],"terms_url":"https://www.capetown.gov.za","terms_text":"City of Cape Town Aerial - OPENSTREETMAP USE ONLY","best":true},{"id":"CRAIG-Auvergne-2013","name":"CRAIG - Auvergne 2013 - 25 cm","type":"tms","template":"http://tiles.craig.fr/osm/tms/1.0.0/ortho_2013/webmercator/{zoom-1}/{x}/{-y}.jpeg","polygon":[[[2.9401192,44.6338837],[2.9971896,44.633931],[2.9971676,44.6473385],[3.0159744,44.6473541],[3.0159305,44.6741168],[3.0349486,44.6741326],[3.0349036,44.7015216],[3.0536338,44.7015371],[3.0535675,44.7418954],[3.0723301,44.741911],[3.0722196,44.8091687],[3.0921583,44.8091852],[3.092137,44.8221252],[3.1301398,44.8221567],[3.1300495,44.8770722],[3.1485587,44.8770875],[3.1485807,44.8636964],[3.1682313,44.8637126],[3.1682538,44.8500261],[3.2064,44.8500576],[3.2063789,44.8628393],[3.2439492,44.8628704],[3.2439263,44.8767893],[3.2631452,44.8768052],[3.2630782,44.9175197],[3.3200437,44.9175667],[3.3200227,44.9303336],[3.3390815,44.9303493],[3.3390586,44.9441978],[3.3769989,44.9442292],[3.3770218,44.9302879],[3.396031,44.9303036],[3.39612,44.8762713],[3.4148252,44.8762867],[3.4148923,44.8355255],[3.4333371,44.8355408],[3.4333819,44.8082784],[3.4525549,44.8082943],[3.4525774,44.7946344],[3.5089262,44.7946811],[3.508904,44.8081469],[3.604265,44.8082258],[3.6042213,44.8348239],[3.6236136,44.83484],[3.6235695,44.8616583],[3.6424823,44.8616739],[3.642549,44.821102],[3.6610055,44.8211172],[3.6610275,44.8077696],[3.6992999,44.8078013],[3.6992782,44.820994],[3.7361139,44.8210245],[3.7361819,44.7797075],[3.7751058,44.7797397],[3.775151,44.7522344],[3.8118352,44.7522648],[3.8118567,44.7392021],[3.8311822,44.7392181],[3.8312061,44.7246766],[3.887824,44.7247235],[3.8878019,44.7381833],[3.925626,44.7382146],[3.9256039,44.7516682],[3.9454097,44.7516846],[3.9453656,44.7784691],[3.9643737,44.7784848],[3.9643516,44.7919273],[4.0033183,44.7919596],[4.0032964,44.8052575],[4.0216937,44.8052727],[4.0216718,44.8185687],[4.0596515,44.8186001],[4.0596082,44.8449216],[4.0798132,44.8449383],[4.0797928,44.8573502],[4.173882,44.857428],[4.1738604,44.8705468],[4.1932576,44.8705628],[4.193235,44.8842744],[4.2140385,44.8842916],[4.2139961,44.9100242],[4.2324138,44.9100394],[4.2323689,44.9373093],[4.2715486,44.9373416],[4.2715273,44.9502971],[4.3288672,44.9503445],[4.3287793,45.0036659],[4.3489259,45.0036825],[4.3489038,45.0170656],[4.4060793,45.0171127],[4.4059904,45.0710024],[4.3884707,45.0709879],[4.3884482,45.0845976],[4.407943,45.0846137],[4.4079231,45.09663],[4.4843608,45.0966929],[4.4842941,45.1370472],[4.4663631,45.1370324],[4.4663413,45.1502035],[4.4864469,45.15022],[4.4864022,45.1772415],[4.5065524,45.177258],[4.5064402,45.2450058],[4.4881342,45.2449908],[4.4881106,45.2592077],[4.4698588,45.2591927],[4.469836,45.2729835],[4.4508849,45.2729679],[4.4508626,45.2864203],[4.3936753,45.2863733],[4.3936303,45.3135182],[4.3750893,45.3135029],[4.3750662,45.3274054],[4.3950734,45.3274218],[4.3950283,45.3545849],[4.3767871,45.35457],[4.3767639,45.3685486],[4.3576564,45.3685329],[4.3576335,45.3823359],[4.2814576,45.3822734],[4.2814334,45.3968834],[4.2444556,45.3968531],[4.2444325,45.4107893],[4.1481178,45.4107104],[4.1481388,45.3980659],[4.1291913,45.3980504],[4.1292145,45.3840899],[4.0902138,45.3840579],[4.0902351,45.3712093],[4.0135507,45.3711464],[4.0135259,45.3860975],[3.9170932,45.3860185],[3.9170704,45.3997355],[3.9375703,45.3997523],[3.9375481,45.4131142],[3.975277,45.4131451],[3.9752552,45.4262061],[3.9953725,45.4262226],[3.9956999,45.5209568],[3.9777821,45.5209421],[3.977693,45.5743873],[3.9581755,45.5743714],[3.9581522,45.5883658],[3.9396019,45.5883506],[3.9395781,45.6026212],[3.9202279,45.6026054],[3.9202048,45.6164603],[3.8818916,45.616429],[3.8818468,45.643276],[3.8441329,45.6432453],[3.8441098,45.6570896],[3.8261689,45.657075],[3.8261241,45.6838865],[3.8072175,45.6838711],[3.8071277,45.7375802],[3.7882101,45.7375648],[3.7881863,45.7517966],[3.7688482,45.7517809],[3.7688028,45.7789651],[3.750719,45.7789504],[3.7505822,45.8606554],[3.7696692,45.8606709],[3.7695793,45.914333],[3.751661,45.9143185],[3.7516379,45.9280879],[3.7328974,45.9280727],[3.7328527,45.9547155],[3.8101795,45.9547782],[3.8101569,45.9682278],[3.8495994,45.9682598],[3.8495098,46.0216192],[3.8318849,46.0216049],[3.8317936,46.0759058],[3.8505037,46.0759209],[3.8504583,46.1029545],[3.8324727,46.10294],[3.8323353,46.1845598],[3.8142194,46.1845452],[3.8141522,46.2244234],[3.8336864,46.2244392],[3.8336634,46.2381001],[3.8528929,46.2381156],[3.8528703,46.2514729],[3.8931424,46.2515054],[3.8931205,46.2644677],[3.9130562,46.2644838],[3.9130335,46.2779317],[3.9518926,46.2779631],[3.9518709,46.2908227],[3.971523,46.2908386],[3.9715012,46.3036947],[4.0105021,46.3037261],[4.0104784,46.3177638],[4.0298278,46.3177794],[4.029783,46.3442827],[4.0116018,46.344268],[4.0114647,46.4253437],[4.031532,46.4253598],[4.0314635,46.4657978],[4.0132435,46.4657832],[4.0132204,46.479378],[3.9943703,46.4793629],[3.9943461,46.4936113],[3.9745971,46.4935955],[3.9745735,46.5075278],[3.8775423,46.5074499],[3.8774959,46.5347758],[3.8583577,46.5347605],[3.8583347,46.5483156],[3.8186897,46.5482838],[3.8187114,46.5355316],[3.7992386,46.535516],[3.7992156,46.5490706],[3.7610377,46.5490399],[3.7609226,46.6168059],[3.7423295,46.616791],[3.7422834,46.6439624],[3.7228558,46.6439468],[3.7228098,46.6710357],[3.7038706,46.6710206],[3.7038474,46.6846709],[3.6841096,46.6846551],[3.6840631,46.711998],[3.6648359,46.7119826],[3.6647898,46.7390375],[3.6457623,46.7390222],[3.6457158,46.7663375],[3.6257542,46.7663216],[3.6257314,46.7797093],[3.5672301,46.7796626],[3.5672528,46.7663082],[3.5471462,46.7662922],[3.5471922,46.7392824],[3.5271621,46.7392664],[3.5272308,46.6988967],[3.4877399,46.6988651],[3.4877618,46.685943],[3.4679636,46.6859272],[3.4679407,46.6994059],[3.4679179,46.7127907],[3.4486497,46.7127753],[3.4486258,46.7267878],[3.350433,46.7267092],[3.3504786,46.6999004],[3.3303913,46.6998843],[3.3303448,46.7271984],[3.2327174,46.7271203],[3.2327406,46.7135148],[3.2129042,46.7134989],[3.212927,46.7001302],[3.1735446,46.7000987],[3.173498,46.7275094],[3.1541227,46.7274939],[3.1541002,46.7407271],[3.1147772,46.7406957],[3.114754,46.7542756],[3.0753432,46.7542441],[3.0752971,46.7813548],[3.05597,46.7813394],[3.055924,46.8083069],[2.99704,46.8082598],[2.9970166,46.8219593],[2.9379443,46.8219121],[2.9379675,46.8082604],[2.8986634,46.808229],[2.8986872,46.7942392],[2.878991,46.7942234],[2.8790134,46.7810427],[2.8594188,46.781027],[2.8594415,46.7677056],[2.8400446,46.7676901],[2.8400671,46.754466],[2.7414032,46.7543871],[2.741382,46.7668245],[2.7023351,46.7667932],[2.7023571,46.7538869],[2.6826621,46.7538711],[2.6826849,46.7404752],[2.6634875,46.7404599],[2.6635123,46.7258966],[2.6434164,46.7258805],[2.6434382,46.7130938],[2.6241432,46.7130784],[2.6241658,46.6998093],[2.6039699,46.6997931],[2.6039936,46.6858433],[2.5651245,46.6858122],[2.5651469,46.6726126],[2.5459278,46.6725972],[2.5459966,46.6321534],[2.5659222,46.6321694],[2.565946,46.6181104],[2.5456397,46.6180941],[2.5456862,46.5907192],[2.5664225,46.5907358],[2.5664449,46.5775417],[2.5854963,46.577557],[2.5855181,46.5647199],[2.5661318,46.5647044],[2.5661557,46.5506246],[2.468279,46.5505461],[2.4683039,46.5358205],[2.3321246,46.5357112],[2.3321701,46.5088566],[2.3126474,46.5088409],[2.3126703,46.4953444],[2.2928767,46.4953285],[2.2928996,46.4818182],[2.2748687,46.4818037],[2.2749151,46.4544154],[2.2553921,46.4543997],[2.255529,46.3734888],[2.275948,46.3735052],[2.276037,46.3208741],[2.3145615,46.3209052],[2.3145849,46.3070421],[2.3537075,46.3070737],[2.3537313,46.2929669],[2.3938428,46.2929992],[2.3938862,46.2672854],[2.4515727,46.267332],[2.451596,46.2534921],[2.4709353,46.2535077],[2.4709807,46.2265552],[2.4915062,46.2265718],[2.4915521,46.199329],[2.5108806,46.1993446],[2.5109254,46.1727799],[2.5311728,46.1727963],[2.5313772,46.051352],[2.5516349,46.0513684],[2.5516577,46.0377665],[2.5705635,46.0377818],[2.5706774,45.9699434],[2.5514356,45.9699278],[2.551458,45.9566151],[2.5322621,45.9565995],[2.5322849,45.9430066],[2.5130653,45.942991],[2.513134,45.9020279],[2.4749412,45.9019969],[2.4749633,45.8888235],[2.4361947,45.888792],[2.4362172,45.8753288],[2.417209,45.8753133],[2.4172548,45.8479368],[2.3784736,45.8479053],[2.378497,45.8339746],[2.3595157,45.8339592],[2.3595606,45.8070849],[2.3787254,45.8071005],[2.3787481,45.7935783],[2.3986981,45.7935945],[2.3987203,45.7803477],[2.4182486,45.7803636],[2.4183161,45.7400007],[2.4572171,45.7400324],[2.4572394,45.7266956],[2.4758919,45.7267107],[2.4759144,45.7132391],[2.49533,45.7132549],[2.4954204,45.6591268],[2.4576942,45.659096],[2.4577622,45.618343],[2.4391188,45.6183278],[2.4391866,45.5776619],[2.4585044,45.5776777],[2.4585496,45.5505348],[2.4780887,45.5505508],[2.4781108,45.5372464],[2.4975506,45.5372623],[2.4975949,45.5106757],[2.4785536,45.5106601],[2.4786444,45.4561337],[2.4597798,45.4561183],[2.4598701,45.401757],[2.4224876,45.4017264],[2.4224651,45.4152816],[2.4023154,45.4152651],[2.4022929,45.4288193],[2.3256006,45.4287565],[2.3256684,45.3879609],[2.3456182,45.3879773],[2.3456629,45.3611091],[2.326256,45.3610932],[2.326279,45.3472146],[2.3073819,45.3471991],[2.3074045,45.3335972],[2.2881095,45.3335813],[2.2881307,45.3208191],[2.2696332,45.3208039],[2.2696574,45.306212],[2.2506602,45.3061964],[2.2506828,45.2925147],[2.2316866,45.2924992],[2.2317086,45.2792355],[2.2130009,45.2792202],[2.213046,45.2520355],[2.1937387,45.2520197],[2.1937617,45.2381134],[2.1756091,45.2380985],[2.1757423,45.1576822],[2.1573543,45.157667],[2.1574448,45.1029478],[2.1202408,45.1029172],[2.1202629,45.0895468],[2.1006669,45.0895306],[2.1006902,45.0754441],[2.0824591,45.0754291],[2.082548,45.0215961],[2.1025534,45.0216126],[2.1025982,44.994453],[2.0457406,44.9944061],[2.0458508,44.9275321],[2.0657794,44.9275486],[2.0658912,44.8596881],[2.0856964,44.8597044],[2.0857193,44.8458126],[2.1055593,44.8458291],[2.1056029,44.8193264],[2.124743,44.8193422],[2.1247657,44.805512],[2.1435067,44.8055275],[2.143551,44.778597],[2.1256091,44.7785822],[2.1256984,44.7242739],[2.1066459,44.7242581],[2.1067116,44.6842263],[2.1263414,44.6842426],[2.1263635,44.670735],[2.14598,44.6707513],[2.146069,44.6164441],[2.1839622,44.6164756],[2.183983,44.6037819],[2.2404173,44.6038288],[2.2403728,44.6309515],[2.25948,44.6309674],[2.2594571,44.644934],[2.316678,44.6449815],[2.3167011,44.6308801],[2.3361516,44.6308963],[2.3361734,44.6175824],[2.3724238,44.6176125],[2.3724009,44.6315823],[2.4110495,44.6316144],[2.4110701,44.6190741],[2.4492173,44.6191058],[2.4491956,44.6323197],[2.5048575,44.6323659],[2.5048126,44.6597555],[2.5246119,44.6597719],[2.524567,44.6871739],[2.5422544,44.6871886],[2.5422313,44.70122],[2.5807101,44.701252],[2.5805999,44.7683374],[2.61769,44.7683681],[2.6176235,44.808838],[2.6367564,44.8088539],[2.6366899,44.8492948],[2.6733105,44.8493251],[2.6732888,44.8625164],[2.6933766,44.862533],[2.6933323,44.8894303],[2.7305201,44.8894611],[2.7304757,44.9164461],[2.7499202,44.9164622],[2.7500519,44.8364688],[2.8073346,44.8365162],[2.8073139,44.8491017],[2.8263796,44.8491175],[2.8264007,44.8362845],[2.8457039,44.8363004],[2.8457707,44.7957107],[2.8642166,44.795726],[2.8642611,44.7686452],[2.8839885,44.7686615],[2.8840323,44.7419697],[2.9020315,44.7419846],[2.9021426,44.6743192],[2.9219777,44.6743357],[2.9220221,44.6472986],[2.9400972,44.6473136],[2.9401192,44.6338837]]],"terms_url":"http://wiki.openstreetmap.org/wiki/WikiProject_France/CRAIG","terms_text":"Orthophotographie CRAIG/Sintegra/IGN 2013"},{"id":"Czech_CUZK-KM-tms","name":"Czech CUZK:KM tiles proxy","type":"tms","template":"http://osm-{switch:a,b,c}.zby.cz/tiles_cuzk.php/{zoom}/{x}/{y}.png","scaleExtent":[13,18],"polygon":[[[15.0063684,49.0177392],[15.1559854,49.0013828],[15.190896,48.9424551],[15.3105895,48.9882938],[15.4053469,48.9752013],[15.5400022,48.9162426],[15.7145553,48.8670572],[15.8342488,48.880178],[15.968904,48.8178233],[16.0885976,48.7455261],[16.3978059,48.7455261],[16.4875761,48.8145394],[16.6721036,48.7784014],[16.6820781,48.7356594],[16.9015163,48.7126294],[16.9464014,48.6237005],[17.1159672,48.8375227],[17.2107246,48.880178],[17.4052266,48.8178233],[17.4800351,48.8539329],[17.5299074,48.8178233],[17.7044605,48.8670572],[17.8141796,48.9359033],[17.8840008,48.9359033],[17.9438476,49.0210099],[18.0635412,49.0340903],[18.1184007,49.0994409],[18.1981964,49.3047337],[18.3877112,49.3339917],[18.577226,49.5091747],[18.7567663,49.4994587],[18.8465365,49.5253637],[18.8764598,49.5706645],[18.7966641,49.693412],[18.64206,49.7095399],[18.5872004,49.8351543],[18.6121366,49.8833809],[18.5622643,49.9347695],[18.512392,49.9058702],[18.362775,49.9540261],[18.3278644,49.9219275],[18.2630304,49.9732751],[18.1184007,50.0053395],[18.0635412,50.075806],[17.9139242,49.9796897],[17.779269,50.0309757],[17.714435,50.1237921],[17.6047159,50.1653411],[17.7593201,50.21962],[17.7343839,50.3439092],[17.6396265,50.2802117],[17.3802905,50.2802117],[17.3503671,50.3439092],[17.2805459,50.3375433],[17.1857885,50.4075214],[16.9015163,50.4615247],[16.8666057,50.4138779],[16.9663503,50.3184404],[17.0361715,50.2323826],[16.8366823,50.21962],[16.7120015,50.1046034],[16.5823335,50.1589513],[16.5623846,50.2387626],[16.4327166,50.3375433],[16.3529209,50.3916263],[16.2781124,50.3916263],[16.2082911,50.4456477],[16.3978059,50.5344899],[16.4476782,50.5978464],[16.3529209,50.670601],[16.2382145,50.6769221],[16.2182656,50.6326561],[16.1284954,50.6832425],[16.0486997,50.6073425],[15.988853,50.7021983],[15.8741467,50.6832425],[15.8292616,50.7653291],[15.729517,50.743243],[15.450232,50.8157725],[15.3903852,50.7747914],[15.3804108,50.8598659],[15.2956278,50.8850434],[15.2956278,50.9887568],[15.1709471,51.0201394],[14.9914067,51.0013124],[15.0063684,50.8881896],[14.8417898,50.8756034],[14.7969047,50.8252246],[14.6323261,50.8567177],[14.6622495,50.9353576],[14.5724793,50.9227841],[14.6123772,50.9856174],[14.4976708,51.0483657],[14.4178751,51.0232765],[14.3081561,51.0671736],[14.2532965,51.0044508],[14.4029134,50.9322145],[14.3729901,50.897627],[14.2433221,50.9070625],[14.2084114,50.844123],[14.0338583,50.8126214],[13.9789988,50.8252246],[13.9041903,50.7968626],[13.8742669,50.740087],[13.5351352,50.7243038],[13.530148,50.6579561],[13.4703012,50.6136722],[13.3905055,50.664279],[13.3256715,50.5883483],[13.250863,50.6105074],[13.1960035,50.5059517],[13.0513738,50.5218084],[12.9665909,50.4106997],[12.8269484,50.4710483],[12.7022676,50.4138779],[12.5077656,50.401164],[12.343187,50.2547088],[12.323238,50.1845054],[12.2484296,50.2738373],[12.1736211,50.3311765],[12.0988126,50.33436],[12.1187616,50.25152],[12.2234934,50.1653411],[12.2035445,50.1237921],[12.5027784,49.9732751],[12.4778422,49.9379795],[12.5476634,49.9155052],[12.4678677,49.8029766],[12.408021,49.7611134],[12.4828294,49.6869593],[12.5327017,49.6869593],[12.5177401,49.6288466],[12.6075102,49.5415474],[12.6723442,49.4378793],[12.8119867,49.3469896],[12.9466419,49.3437405],[13.2309141,49.1288206],[13.3256715,49.1059712],[13.4353906,49.0438984],[13.4154417,48.9948387],[13.5002246,48.949006],[13.5650586,48.9882938],[13.6847522,48.8834577],[13.7445989,48.9031312],[13.8243946,48.7751149],[13.8992031,48.7751149],[14.0587945,48.676418],[14.0438328,48.6302932],[14.1435774,48.5907241],[14.3729901,48.5610269],[14.4827091,48.6500662],[14.5774665,48.607215],[14.6273389,48.6335892],[14.7071346,48.5808269],[14.7470324,48.7027561],[14.8118664,48.7389485],[14.8168536,48.794831],[14.9864195,48.7652539],[15.0063684,49.0177392]]],"overlay":true},{"id":"Czech_RUIAN-budovy","name":"Czech RUIAN budovy","type":"tms","template":"http://tile.poloha.net/budovy/{zoom}/{x}/{y}.png","scaleExtent":[12,20],"polygon":[[[15.0063684,49.0177392],[15.1559854,49.0013828],[15.190896,48.9424551],[15.3105895,48.9882938],[15.4053469,48.9752013],[15.5400022,48.9162426],[15.7145553,48.8670572],[15.8342488,48.880178],[15.968904,48.8178233],[16.0885976,48.7455261],[16.3978059,48.7455261],[16.4875761,48.8145394],[16.6721036,48.7784014],[16.6820781,48.7356594],[16.9015163,48.7126294],[16.9464014,48.6237005],[17.1159672,48.8375227],[17.2107246,48.880178],[17.4052266,48.8178233],[17.4800351,48.8539329],[17.5299074,48.8178233],[17.7044605,48.8670572],[17.8141796,48.9359033],[17.8840008,48.9359033],[17.9438476,49.0210099],[18.0635412,49.0340903],[18.1184007,49.0994409],[18.1981964,49.3047337],[18.3877112,49.3339917],[18.577226,49.5091747],[18.7567663,49.4994587],[18.8465365,49.5253637],[18.8764598,49.5706645],[18.7966641,49.693412],[18.64206,49.7095399],[18.5872004,49.8351543],[18.6121366,49.8833809],[18.5622643,49.9347695],[18.512392,49.9058702],[18.362775,49.9540261],[18.3278644,49.9219275],[18.2630304,49.9732751],[18.1184007,50.0053395],[18.0635412,50.075806],[17.9139242,49.9796897],[17.779269,50.0309757],[17.714435,50.1237921],[17.6047159,50.1653411],[17.7593201,50.21962],[17.7343839,50.3439092],[17.6396265,50.2802117],[17.3802905,50.2802117],[17.3503671,50.3439092],[17.2805459,50.3375433],[17.1857885,50.4075214],[16.9015163,50.4615247],[16.8666057,50.4138779],[16.9663503,50.3184404],[17.0361715,50.2323826],[16.8366823,50.21962],[16.7120015,50.1046034],[16.5823335,50.1589513],[16.5623846,50.2387626],[16.4327166,50.3375433],[16.3529209,50.3916263],[16.2781124,50.3916263],[16.2082911,50.4456477],[16.3978059,50.5344899],[16.4476782,50.5978464],[16.3529209,50.670601],[16.2382145,50.6769221],[16.2182656,50.6326561],[16.1284954,50.6832425],[16.0486997,50.6073425],[15.988853,50.7021983],[15.8741467,50.6832425],[15.8292616,50.7653291],[15.729517,50.743243],[15.450232,50.8157725],[15.3903852,50.7747914],[15.3804108,50.8598659],[15.2956278,50.8850434],[15.2956278,50.9887568],[15.1709471,51.0201394],[14.9914067,51.0013124],[15.0063684,50.8881896],[14.8417898,50.8756034],[14.7969047,50.8252246],[14.6323261,50.8567177],[14.6622495,50.9353576],[14.5724793,50.9227841],[14.6123772,50.9856174],[14.4976708,51.0483657],[14.4178751,51.0232765],[14.3081561,51.0671736],[14.2532965,51.0044508],[14.4029134,50.9322145],[14.3729901,50.897627],[14.2433221,50.9070625],[14.2084114,50.844123],[14.0338583,50.8126214],[13.9789988,50.8252246],[13.9041903,50.7968626],[13.8742669,50.740087],[13.5351352,50.7243038],[13.530148,50.6579561],[13.4703012,50.6136722],[13.3905055,50.664279],[13.3256715,50.5883483],[13.250863,50.6105074],[13.1960035,50.5059517],[13.0513738,50.5218084],[12.9665909,50.4106997],[12.8269484,50.4710483],[12.7022676,50.4138779],[12.5077656,50.401164],[12.343187,50.2547088],[12.323238,50.1845054],[12.2484296,50.2738373],[12.1736211,50.3311765],[12.0988126,50.33436],[12.1187616,50.25152],[12.2234934,50.1653411],[12.2035445,50.1237921],[12.5027784,49.9732751],[12.4778422,49.9379795],[12.5476634,49.9155052],[12.4678677,49.8029766],[12.408021,49.7611134],[12.4828294,49.6869593],[12.5327017,49.6869593],[12.5177401,49.6288466],[12.6075102,49.5415474],[12.6723442,49.4378793],[12.8119867,49.3469896],[12.9466419,49.3437405],[13.2309141,49.1288206],[13.3256715,49.1059712],[13.4353906,49.0438984],[13.4154417,48.9948387],[13.5002246,48.949006],[13.5650586,48.9882938],[13.6847522,48.8834577],[13.7445989,48.9031312],[13.8243946,48.7751149],[13.8992031,48.7751149],[14.0587945,48.676418],[14.0438328,48.6302932],[14.1435774,48.5907241],[14.3729901,48.5610269],[14.4827091,48.6500662],[14.5774665,48.607215],[14.6273389,48.6335892],[14.7071346,48.5808269],[14.7470324,48.7027561],[14.8118664,48.7389485],[14.8168536,48.794831],[14.9864195,48.7652539],[15.0063684,49.0177392]]],"terms_url":"http://poloha.net/"},{"id":"Czech_RUIAN-parcely","name":"Czech RUIAN parcely","type":"tms","template":"http://tile.poloha.net/parcely/{zoom}/{x}/{y}.png","scaleExtent":[12,20],"polygon":[[[15.0063684,49.0177392],[15.1559854,49.0013828],[15.190896,48.9424551],[15.3105895,48.9882938],[15.4053469,48.9752013],[15.5400022,48.9162426],[15.7145553,48.8670572],[15.8342488,48.880178],[15.968904,48.8178233],[16.0885976,48.7455261],[16.3978059,48.7455261],[16.4875761,48.8145394],[16.6721036,48.7784014],[16.6820781,48.7356594],[16.9015163,48.7126294],[16.9464014,48.6237005],[17.1159672,48.8375227],[17.2107246,48.880178],[17.4052266,48.8178233],[17.4800351,48.8539329],[17.5299074,48.8178233],[17.7044605,48.8670572],[17.8141796,48.9359033],[17.8840008,48.9359033],[17.9438476,49.0210099],[18.0635412,49.0340903],[18.1184007,49.0994409],[18.1981964,49.3047337],[18.3877112,49.3339917],[18.577226,49.5091747],[18.7567663,49.4994587],[18.8465365,49.5253637],[18.8764598,49.5706645],[18.7966641,49.693412],[18.64206,49.7095399],[18.5872004,49.8351543],[18.6121366,49.8833809],[18.5622643,49.9347695],[18.512392,49.9058702],[18.362775,49.9540261],[18.3278644,49.9219275],[18.2630304,49.9732751],[18.1184007,50.0053395],[18.0635412,50.075806],[17.9139242,49.9796897],[17.779269,50.0309757],[17.714435,50.1237921],[17.6047159,50.1653411],[17.7593201,50.21962],[17.7343839,50.3439092],[17.6396265,50.2802117],[17.3802905,50.2802117],[17.3503671,50.3439092],[17.2805459,50.3375433],[17.1857885,50.4075214],[16.9015163,50.4615247],[16.8666057,50.4138779],[16.9663503,50.3184404],[17.0361715,50.2323826],[16.8366823,50.21962],[16.7120015,50.1046034],[16.5823335,50.1589513],[16.5623846,50.2387626],[16.4327166,50.3375433],[16.3529209,50.3916263],[16.2781124,50.3916263],[16.2082911,50.4456477],[16.3978059,50.5344899],[16.4476782,50.5978464],[16.3529209,50.670601],[16.2382145,50.6769221],[16.2182656,50.6326561],[16.1284954,50.6832425],[16.0486997,50.6073425],[15.988853,50.7021983],[15.8741467,50.6832425],[15.8292616,50.7653291],[15.729517,50.743243],[15.450232,50.8157725],[15.3903852,50.7747914],[15.3804108,50.8598659],[15.2956278,50.8850434],[15.2956278,50.9887568],[15.1709471,51.0201394],[14.9914067,51.0013124],[15.0063684,50.8881896],[14.8417898,50.8756034],[14.7969047,50.8252246],[14.6323261,50.8567177],[14.6622495,50.9353576],[14.5724793,50.9227841],[14.6123772,50.9856174],[14.4976708,51.0483657],[14.4178751,51.0232765],[14.3081561,51.0671736],[14.2532965,51.0044508],[14.4029134,50.9322145],[14.3729901,50.897627],[14.2433221,50.9070625],[14.2084114,50.844123],[14.0338583,50.8126214],[13.9789988,50.8252246],[13.9041903,50.7968626],[13.8742669,50.740087],[13.5351352,50.7243038],[13.530148,50.6579561],[13.4703012,50.6136722],[13.3905055,50.664279],[13.3256715,50.5883483],[13.250863,50.6105074],[13.1960035,50.5059517],[13.0513738,50.5218084],[12.9665909,50.4106997],[12.8269484,50.4710483],[12.7022676,50.4138779],[12.5077656,50.401164],[12.343187,50.2547088],[12.323238,50.1845054],[12.2484296,50.2738373],[12.1736211,50.3311765],[12.0988126,50.33436],[12.1187616,50.25152],[12.2234934,50.1653411],[12.2035445,50.1237921],[12.5027784,49.9732751],[12.4778422,49.9379795],[12.5476634,49.9155052],[12.4678677,49.8029766],[12.408021,49.7611134],[12.4828294,49.6869593],[12.5327017,49.6869593],[12.5177401,49.6288466],[12.6075102,49.5415474],[12.6723442,49.4378793],[12.8119867,49.3469896],[12.9466419,49.3437405],[13.2309141,49.1288206],[13.3256715,49.1059712],[13.4353906,49.0438984],[13.4154417,48.9948387],[13.5002246,48.949006],[13.5650586,48.9882938],[13.6847522,48.8834577],[13.7445989,48.9031312],[13.8243946,48.7751149],[13.8992031,48.7751149],[14.0587945,48.676418],[14.0438328,48.6302932],[14.1435774,48.5907241],[14.3729901,48.5610269],[14.4827091,48.6500662],[14.5774665,48.607215],[14.6273389,48.6335892],[14.7071346,48.5808269],[14.7470324,48.7027561],[14.8118664,48.7389485],[14.8168536,48.794831],[14.9864195,48.7652539],[15.0063684,49.0177392]]],"terms_url":"http://poloha.net/"},{"id":"Duna_2013","name":"Danube flood orthophoto 2013","type":"tms","template":"http://e.tile.openstreetmap.hu/dunai-arviz-2013/{zoom}/{x}/{y}.jpg","scaleExtent":[10,20],"polygon":[[[19.0773152,47.6959718],[19.0779881,47.6959835],[19.0946205,47.6944562],[19.0805603,47.595874],[19.0743376,47.5890907],[19.0795196,47.5888284],[19.07717,47.5724109],[19.0577884,47.5720924],[19.0773152,47.6959718]]],"terms_url":"http://fototerkep.hu/","terms_text":"Fotótérkép.hu"},{"id":"Delaware2012Orthophotography","name":"Delaware 2012 Orthophotography","type":"tms","template":"http://whoots.mapwarper.net/tms/{zoom}/{x}/{y}/0/https://firstmap.delaware.gov/arcgis/services/DE_Imagery/DE_Imagery_2012/ImageServer/WMSServer","description":"This data set consists of 0.3-meter pixel resolution (approximately 1-foot), 4-band true color and near infrared (R, G, B, IR) orthoimages covering New Castle, Kent and Sussex Counties in Delaware.","polygon":[[[-75.01770587603,38.45188674427],[-75.74173524589,38.4499581145],[-75.80699639658,39.73907123636],[-75.75558784863,39.80106251053],[-75.64692187603,39.8563815616],[-75.47114773904,39.84645578141],[-75.37725787603,39.81477822231],[-75.48746302671,39.6718115509],[-75.50901151986,39.43446011595],[-75.39326532808,39.27784018498],[-75.30707135548,39.01666513594],[-75.1931721774,38.82218696272],[-75.05341480753,38.80875503297],[-75.01770587603,38.45188674427]]],"terms_url":"https://firstmap.delaware.gov/arcgis/rest/services/DE_Imagery/DE_Imagery_2012/ImageServer","terms_text":"Digital Aerial Solutions, LLC"},{"id":"DigitalGlobe-Premium","name":"DigitalGlobe Premium Imagery","type":"tms","template":"http://{switch:a,b,c}.tiles.mapbox.com/v4/digitalglobe.316c9a2e/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqMmFxdGp5aTAwOWIzM3M1NDZ2eGU1a2QifQ.JN5adNxCwK_oprEwFEtjjg","scaleExtent":[0,19],"terms_url":"https://wiki.openstreetmap.org/wiki/DigitalGlobe","terms_text":"Terms & Feedback","default":true},{"id":"DigitalGlobe-Standard","name":"DigitalGlobe Standard Imagery","type":"tms","template":"http://{switch:a,b,c}.tiles.mapbox.com/v4/digitalglobe.0a8e44ba/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqMmFxcGJ2MjAwOHEzMm9nZmF2c3luZWkifQ.HsF19zOlj8PeOxo5BhNqyQ","scaleExtent":[0,19],"terms_url":"https://wiki.openstreetmap.org/wiki/DigitalGlobe","terms_text":"Terms & Feedback","default":true},{"id":"maaamet.ee-orto","name":"Estonia Ortho (Maaamet)","type":"tms","template":"http://kaart.maakaart.ee/orto/{zoom}/{x}/{y}.jpeg","scaleExtent":[14,20],"polygon":[[[21.6940073,57.5025466],[21.6940073,59.8274564],[28.2110546,59.8274564],[28.2110546,57.5025466],[21.6940073,57.5025466]]],"terms_text":"Maa-Ameti ortofoto"},{"id":"FOMI_2000","name":"FÖMI orthophoto 2000","type":"tms","template":"http://e.tile.openstreetmap.hu/ortofoto2000/{zoom}/{x}/{y}.jpg","scaleExtent":[0,17],"polygon":[[[16.1139147,46.8691038],[16.1789749,46.90662],[16.2000429,46.9415079],[16.2217547,46.9355441],[16.2462784,46.9463851],[16.2553226,46.9642125],[16.2764694,46.9626082],[16.290583,47.0139849],[16.3016199,46.9992329],[16.3414618,46.9965225],[16.3505162,47.0106313],[16.3734016,46.9985929],[16.412765,47.00475],[16.4332705,46.9927417],[16.4478119,47.003893],[16.479997,46.9941169],[16.5121988,47.0011695],[16.4635584,47.0322699],[16.4478586,47.0227481],[16.439123,47.029663],[16.445673,47.038872],[16.520323,47.056103],[16.473213,47.0736169],[16.4637199,47.09392],[16.500798,47.110058],[16.500035,47.123295],[16.5295349,47.1287419],[16.5171609,47.1496938],[16.454951,47.1425878],[16.4648728,47.1683349],[16.4555643,47.1875584],[16.4305559,47.1847022],[16.4195013,47.1949147],[16.4189215,47.2107114],[16.4371293,47.2097043],[16.4426335,47.2337117],[16.4313127,47.2527554],[16.4671512,47.2531652],[16.4892319,47.2798885],[16.4646338,47.3338455],[16.4337002,47.3528101],[16.458513,47.3670496],[16.4454619,47.4070195],[16.4831657,47.4093628],[16.4963821,47.3892659],[16.5170941,47.4100218],[16.5749054,47.4054243],[16.5807291,47.4191699],[16.661847,47.455595],[16.6706419,47.47422],[16.6523395,47.500342],[16.6895619,47.510161],[16.7147797,47.540199],[16.663545,47.567733],[16.673199,47.6049544],[16.6595343,47.6061018],[16.652758,47.622852],[16.6314207,47.6283176],[16.5739108,47.619667],[16.5147382,47.6461964],[16.4967504,47.6393149],[16.425464,47.6621679],[16.4437449,47.674205],[16.4480507,47.6964725],[16.4746984,47.6811576],[16.4872245,47.6979767],[16.5521729,47.7225519],[16.5363779,47.736785],[16.5479799,47.751544],[16.6095193,47.7603722],[16.6344148,47.7590843],[16.65729,47.7414879],[16.7209405,47.7353565],[16.7534062,47.6828165],[16.8301587,47.681058],[16.8394284,47.7045139],[16.8668943,47.7211462],[16.876679,47.6876452],[17.0937421,47.7077706],[17.0706562,47.7285366],[17.0516019,47.7938499],[17.0749479,47.8084997],[17.047139,47.8285635],[17.0519452,47.8377691],[17.0105513,47.8581765],[17.0163878,47.8673325],[17.0857537,47.8746239],[17.113171,47.9271605],[17.0917133,47.9342916],[17.1183782,47.9601083],[17.094657,47.9708775],[17.2010289,48.019992],[17.241769,48.0224651],[17.257955,47.998655],[17.334651,47.993125],[17.4029929,47.947849],[17.4539199,47.8852579],[17.5267369,47.865509],[17.5675779,47.8151289],[17.608402,47.8218859],[17.7085789,47.756678],[17.7798739,47.739487],[17.8660959,47.74575],[17.9001292,47.7392633],[17.946867,47.744668],[17.9708709,47.7578392],[18.0044103,47.7463402],[18.0380583,47.7576812],[18.2958774,47.7314616],[18.4540681,47.7651226],[18.4931553,47.7527552],[18.5590761,47.7659963],[18.6460866,47.7590921],[18.7260691,47.7890411],[18.7411784,47.8138245],[18.7920013,47.8230869],[18.8485417,47.8167221],[18.855876,47.826077],[18.828014,47.834291],[18.8135749,47.85555],[18.76353,47.8716049],[18.756858,47.896838],[18.776746,47.955092],[18.7552499,47.9763469],[18.8157429,47.993442],[18.819998,48.039676],[18.833268,48.048239],[18.8749364,48.0470707],[18.886674,48.058682],[18.9089819,48.051139],[18.9439039,48.058865],[18.9816099,48.0536009],[19.0148639,48.078179],[19.0585249,48.0573529],[19.0843619,48.072781],[19.107402,48.065596],[19.1352889,48.074146],[19.2413679,48.0536529],[19.2557819,48.0715559],[19.3031119,48.088711],[19.3865969,48.091914],[19.400018,48.082304],[19.454053,48.101436],[19.467354,48.083933],[19.4944199,48.109906],[19.492377,48.1396639],[19.5128219,48.154663],[19.504518,48.173443],[19.528967,48.190358],[19.526044,48.20313],[19.577502,48.2160149],[19.6308263,48.2500725],[19.6445239,48.2391719],[19.669857,48.239212],[19.691219,48.203894],[19.721125,48.201473],[19.74618,48.2165119],[19.7871629,48.19253],[19.7987329,48.19482],[19.8052829,48.183733],[19.782415,48.165039],[19.794812,48.153529],[19.821331,48.169081],[19.8452819,48.162742],[19.8551729,48.178431],[19.8601309,48.169409],[19.898745,48.1663119],[19.9145359,48.146863],[19.898298,48.1249019],[19.937383,48.131118],[19.9743939,48.1660049],[19.988706,48.1621679],[20.029038,48.1776849],[20.049449,48.1671999],[20.0729859,48.179606],[20.0700369,48.1917019],[20.1340909,48.225182],[20.1331879,48.253982],[20.206162,48.250979],[20.2038299,48.261906],[20.228466,48.262779],[20.2349469,48.279933],[20.286858,48.26164],[20.3257109,48.272794],[20.3374649,48.301667],[20.3656579,48.316606],[20.384077,48.3511809],[20.4098349,48.365857],[20.402532,48.382565],[20.4205349,48.403858],[20.416228,48.418536],[20.507929,48.489363],[20.5065069,48.534415],[20.537471,48.527878],[20.5464939,48.544292],[20.586595,48.535759],[20.6538739,48.561413],[20.836359,48.58284],[20.8378,48.57421],[20.8504359,48.5816329],[20.8453301,48.5665046],[20.8681549,48.551818],[20.922323,48.559453],[20.9346349,48.538341],[20.955882,48.533963],[20.9561979,48.521666],[20.9815849,48.5177669],[21.0151139,48.532313],[21.0663209,48.525894],[21.1174479,48.4910549],[21.1608749,48.521499],[21.179634,48.518232],[21.221061,48.537497],[21.305488,48.5222489],[21.313377,48.550841],[21.326875,48.554129],[21.319384,48.561201],[21.4154499,48.558951],[21.4226649,48.578821],[21.4406099,48.585104],[21.514091,48.551065],[21.5420199,48.508395],[21.6139329,48.509416],[21.6201879,48.469826],[21.663549,48.417961],[21.6645609,48.392164],[21.7017409,48.380695],[21.711871,48.357617],[21.8174139,48.332787],[21.8352029,48.3346409],[21.837213,48.363253],[21.8842979,48.356047],[21.8848429,48.367539],[21.897883,48.36256],[21.8997959,48.3702229],[21.9281859,48.3615969],[21.9268059,48.370899],[21.949198,48.378728],[21.994463,48.377323],[22.0213259,48.392749],[22.0546049,48.377528],[22.0764859,48.387241],[22.086743,48.371564],[22.1359089,48.380519],[22.131056,48.3912329],[22.152768,48.3962409],[22.1561913,48.4093076],[22.2125722,48.4256468],[22.2371405,48.4100396],[22.2654858,48.4098675],[22.2398761,48.3870055],[22.2675722,48.3611612],[22.3178106,48.3545437],[22.3132861,48.3250712],[22.3372944,48.3079113],[22.3384267,48.2792074],[22.3847547,48.2339632],[22.4006407,48.249198],[22.4328384,48.2525166],[22.456386,48.2423109],[22.4899029,48.2534237],[22.4972201,48.2395546],[22.5161491,48.237965],[22.5311088,48.2094282],[22.5711442,48.1961428],[22.5616362,48.1816066],[22.5982449,48.144756],[22.5902763,48.1073414],[22.6754492,48.091997],[22.7347192,48.119848],[22.7576242,48.1200599],[22.7703914,48.1090162],[22.772319,48.1218742],[22.8027688,48.1221112],[22.8025285,48.1070813],[22.8254256,48.1175119],[22.8364365,48.080249],[22.8611284,48.0750312],[22.8677955,48.0524256],[22.8820424,48.0548053],[22.8659692,48.0113165],[22.835562,47.9905988],[22.8407599,47.9813636],[22.8725729,47.9752683],[22.8697274,47.9659593],[22.8915652,47.9672446],[22.897435,47.9540629],[22.8473299,47.9077579],[22.7928135,47.8908586],[22.7586924,47.8941446],[22.77775,47.8422508],[22.7136344,47.8360928],[22.6801938,47.7877527],[22.6111171,47.7717455],[22.5490018,47.7722246],[22.4812121,47.8108886],[22.4513078,47.803389],[22.4313319,47.7398119],[22.3566167,47.7486206],[22.3177714,47.7660887],[22.3176236,47.7433657],[22.2851369,47.7292757],[22.264325,47.7310675],[22.2589955,47.6979057],[22.2306796,47.693196],[22.1796501,47.5916115],[22.1289245,47.5978984],[22.0942787,47.5583628],[22.0782587,47.5621299],[22.0534529,47.5474795],[22.0712176,47.5380742],[22.0617872,47.5288029],[22.0451278,47.5398919],[22.0367222,47.5326653],[22.0071886,47.48362],[22.0327909,47.4508372],[22.0238835,47.3908631],[22.0119849,47.3758016],[21.9627373,47.381053],[21.9382461,47.3725317],[21.8777922,47.2857763],[21.8872845,47.2730473],[21.8534909,47.2397622],[21.8580662,47.1873597],[21.8124804,47.1667511],[21.7924092,47.1059751],[21.7268258,47.0983882],[21.6976037,47.057915],[21.6504151,47.0408303],[21.6888701,47.0019977],[21.6678744,46.9712337],[21.6814917,46.9652089],[21.6381964,46.9330487],[21.5984455,46.9274708],[21.6142857,46.8867275],[21.6016694,46.8668202],[21.520328,46.8373749],[21.5186086,46.8000703],[21.4831761,46.7650246],[21.5263389,46.7393249],[21.529369,46.7209721],[21.4923253,46.6859652],[21.4728438,46.6959075],[21.4299047,46.693937],[21.4309553,46.6781367],[21.4546661,46.660863],[21.4162375,46.6426231],[21.4097959,46.6218052],[21.3657038,46.6379501],[21.3300499,46.6318155],[21.3139733,46.617666],[21.3012351,46.5908672],[21.3207905,46.5828562],[21.2743045,46.5407362],[21.2600254,46.5021583],[21.2744188,46.4767333],[21.2964506,46.4762973],[21.3174343,46.4507288],[21.2895176,46.4154784],[21.2963256,46.4069601],[21.2250116,46.4136899],[21.2064214,46.4033825],[21.1992563,46.3479034],[21.1762269,46.3357664],[21.180497,46.3044494],[21.1155437,46.3018529],[21.1030549,46.2624637],[21.0708792,46.2539014],[21.0660827,46.2429394],[21.0366237,46.2480392],[21.0246723,46.2665329],[20.960817,46.2623039],[20.9465849,46.2793024],[20.9250701,46.2766191],[20.9218133,46.2618129],[20.8732713,46.2877555],[20.7756538,46.2759602],[20.7490474,46.2508489],[20.7618619,46.204563],[20.727401,46.2077485],[20.7341052,46.1939355],[20.7140487,46.1660531],[20.6843592,46.1447802],[20.6549178,46.1497739],[20.6394471,46.1267602],[20.5450486,46.1790935],[20.5014839,46.190334],[20.4949436,46.1709908],[20.4592293,46.1428837],[20.3975133,46.1574709],[20.3685325,46.1528554],[20.3557074,46.1696256],[20.2968136,46.1521542],[20.2549024,46.1158522],[20.2484757,46.1300956],[20.2330132,46.1241668],[20.1817362,46.1601137],[20.1364966,46.1449476],[20.1009667,46.1772756],[20.0636156,46.1437275],[20.0346142,46.1458888],[20.0158072,46.1768354],[19.9354075,46.1764243],[19.8533469,46.1500005],[19.8179747,46.1281652],[19.7585403,46.1479754],[19.6982054,46.1879317],[19.6827672,46.1800388],[19.661508,46.1904394],[19.6317396,46.1692993],[19.5676482,46.179106],[19.5604013,46.1665762],[19.5026585,46.1424492],[19.5271208,46.1210269],[19.4645033,46.0953827],[19.4665828,46.0820437],[19.4160037,46.0460453],[19.3803957,46.0358749],[19.3640923,46.0522965],[19.2819012,46.0148048],[19.2965348,45.9881173],[19.2856472,45.9968981],[19.1479857,45.9963445],[19.1338422,46.0370993],[19.104873,46.0401673],[19.0660427,46.0001999],[19.0796791,45.9636376],[19.0059803,45.9590674],[19.0092745,45.9236559],[18.9061334,45.9353801],[18.8794572,45.9166827],[18.8647137,45.9208493],[18.8685629,45.9113361],[18.8276792,45.9051714],[18.8220041,45.9145893],[18.8075092,45.9036055],[18.809247,45.8796189],[18.7956242,45.8784488],[18.7048857,45.9181883],[18.6700246,45.9108439],[18.6596602,45.9168934],[18.6651348,45.899279],[18.6412808,45.8890396],[18.6550179,45.8742393],[18.6277704,45.8733782],[18.6148449,45.8531438],[18.6236656,45.8398531],[18.5732391,45.8137578],[18.5749849,45.8004344],[18.559716,45.8037961],[18.5223504,45.7826858],[18.4906706,45.7947167],[18.4821905,45.7655032],[18.4562828,45.7695229],[18.4450763,45.7605195],[18.446853,45.737128],[18.40763,45.7397119],[18.3918949,45.7616983],[18.3642257,45.7729364],[18.3394214,45.7471605],[18.2968157,45.7612196],[18.2440473,45.7612305],[18.2307311,45.7790328],[18.1908702,45.7878759],[18.1681939,45.7762712],[18.1246514,45.7896277],[18.1068067,45.7708256],[18.0818922,45.7645205],[17.9958808,45.7957311],[17.9302095,45.7863301],[17.9066757,45.7925692],[17.8653145,45.7670064],[17.8262748,45.8099957],[17.8089784,45.8040989],[17.7809054,45.8174884],[17.7603399,45.811923],[17.7408624,45.8295975],[17.6632915,45.8381849],[17.6276211,45.8979446],[17.5700676,45.9358204],[17.4378254,45.9503823],[17.4258964,45.9272681],[17.4108059,45.9399665],[17.392149,45.9302149],[17.3828713,45.9475733],[17.3476208,45.9423413],[17.3438769,45.9605329],[17.3537711,45.9525011],[17.3905375,45.9581914],[17.387423,45.9661823],[17.3583539,45.9642737],[17.3754852,45.9686921],[17.3751895,45.9881054],[17.3635685,45.9915442],[17.3567202,45.9735836],[17.3339583,45.9960781],[17.3319847,45.9728948],[17.3129974,45.9665347],[17.323647,45.9887776],[17.2987653,45.9838652],[17.3041996,46.0021128],[17.2579726,46.0110256],[17.29632,46.0285169],[17.2541514,46.030005],[17.270955,46.0567055],[17.2324767,46.0592034],[17.2525145,46.0664725],[17.2313144,46.0790345],[17.2019916,46.0765488],[17.2331299,46.0989644],[17.2104017,46.1001693],[17.2129734,46.113855],[17.175927,46.1084583],[17.1743424,46.1287608],[17.1865197,46.1332308],[17.1810983,46.1505485],[17.1562307,46.1585819],[17.1592857,46.1696818],[17.1261012,46.1684495],[17.1227409,46.1789791],[17.0752482,46.1889531],[17.0661614,46.2022984],[16.9735401,46.2251982],[16.973954,46.2431113],[16.9504085,46.2415285],[16.8862356,46.2814598],[16.8713682,46.3252767],[16.8802109,46.3356966],[16.8615374,46.3452401],[16.8656232,46.3556489],[16.8521959,46.3517189],[16.8498589,46.3626245],[16.8352859,46.3638195],[16.8376499,46.3748032],[16.8261732,46.3670994],[16.7933444,46.387385],[16.7592072,46.3776563],[16.7298672,46.40149],[16.7182119,46.3898704],[16.6772872,46.4494536],[16.6631785,46.4486958],[16.6663732,46.4582995],[16.6187915,46.4619875],[16.604468,46.4760773],[16.5235997,46.5053761],[16.5325768,46.5314027],[16.5176728,46.5363516],[16.5084107,46.5652692],[16.4829969,46.5660383],[16.4834008,46.5786011],[16.4455713,46.610952],[16.4248583,46.6131645],[16.385941,46.6442485],[16.3915424,46.6637257],[16.4198454,46.6584771],[16.4286335,46.6939737],[16.3689211,46.7040082],[16.3798266,46.7153869],[16.3710856,46.7222945],[16.3570587,46.7142387],[16.3185954,46.7541449],[16.3305417,46.7752119],[16.3121626,46.7780033],[16.3127666,46.797314],[16.3406373,46.8051851],[16.3508404,46.8300552],[16.3403309,46.8468762],[16.3015007,46.8595142],[16.2913867,46.8728341],[16.2332296,46.8766702],[16.1560866,46.8537074],[16.126571,46.8569079],[16.1139147,46.8691038]]],"terms_url":"http://www.fomi.hu/","terms_text":"Földmérési és Távérzékelési Intézet"},{"id":"FOMI_2005","name":"FÖMI orthophoto 2005","type":"tms","template":"http://e.tile.openstreetmap.hu/ortofoto2005/{zoom}/{x}/{y}.jpg","scaleExtent":[0,17],"polygon":[[[16.1139147,46.8691038],[16.1789749,46.90662],[16.2000429,46.9415079],[16.2217547,46.9355441],[16.2462784,46.9463851],[16.2553226,46.9642125],[16.2764694,46.9626082],[16.290583,47.0139849],[16.3016199,46.9992329],[16.3414618,46.9965225],[16.3505162,47.0106313],[16.3734016,46.9985929],[16.412765,47.00475],[16.4332705,46.9927417],[16.4478119,47.003893],[16.479997,46.9941169],[16.5121988,47.0011695],[16.4635584,47.0322699],[16.4478586,47.0227481],[16.439123,47.029663],[16.445673,47.038872],[16.520323,47.056103],[16.473213,47.0736169],[16.4637199,47.09392],[16.500798,47.110058],[16.500035,47.123295],[16.5295349,47.1287419],[16.5171609,47.1496938],[16.454951,47.1425878],[16.4648728,47.1683349],[16.4555643,47.1875584],[16.4305559,47.1847022],[16.4195013,47.1949147],[16.4189215,47.2107114],[16.4371293,47.2097043],[16.4426335,47.2337117],[16.4313127,47.2527554],[16.4671512,47.2531652],[16.4892319,47.2798885],[16.4646338,47.3338455],[16.4337002,47.3528101],[16.458513,47.3670496],[16.4454619,47.4070195],[16.4831657,47.4093628],[16.4963821,47.3892659],[16.5170941,47.4100218],[16.5749054,47.4054243],[16.5807291,47.4191699],[16.661847,47.455595],[16.6706419,47.47422],[16.6523395,47.500342],[16.6895619,47.510161],[16.7147797,47.540199],[16.663545,47.567733],[16.673199,47.6049544],[16.6595343,47.6061018],[16.652758,47.622852],[16.6314207,47.6283176],[16.5739108,47.619667],[16.5147382,47.6461964],[16.4967504,47.6393149],[16.425464,47.6621679],[16.4437449,47.674205],[16.4480507,47.6964725],[16.4746984,47.6811576],[16.4872245,47.6979767],[16.5521729,47.7225519],[16.5363779,47.736785],[16.5479799,47.751544],[16.6095193,47.7603722],[16.6344148,47.7590843],[16.65729,47.7414879],[16.7209405,47.7353565],[16.7534062,47.6828165],[16.8301587,47.681058],[16.8394284,47.7045139],[16.8668943,47.7211462],[16.876679,47.6876452],[17.0937421,47.7077706],[17.0706562,47.7285366],[17.0516019,47.7938499],[17.0749479,47.8084997],[17.047139,47.8285635],[17.0519452,47.8377691],[17.0105513,47.8581765],[17.0163878,47.8673325],[17.0857537,47.8746239],[17.113171,47.9271605],[17.0917133,47.9342916],[17.1183782,47.9601083],[17.094657,47.9708775],[17.2010289,48.019992],[17.241769,48.0224651],[17.257955,47.998655],[17.334651,47.993125],[17.4029929,47.947849],[17.4539199,47.8852579],[17.5267369,47.865509],[17.5675779,47.8151289],[17.608402,47.8218859],[17.7085789,47.756678],[17.7798739,47.739487],[17.8660959,47.74575],[17.9001292,47.7392633],[17.946867,47.744668],[17.9708709,47.7578392],[18.0044103,47.7463402],[18.0380583,47.7576812],[18.2958774,47.7314616],[18.4540681,47.7651226],[18.4931553,47.7527552],[18.5590761,47.7659963],[18.6460866,47.7590921],[18.7260691,47.7890411],[18.7411784,47.8138245],[18.7920013,47.8230869],[18.8485417,47.8167221],[18.855876,47.826077],[18.828014,47.834291],[18.8135749,47.85555],[18.76353,47.8716049],[18.756858,47.896838],[18.776746,47.955092],[18.7552499,47.9763469],[18.8157429,47.993442],[18.819998,48.039676],[18.833268,48.048239],[18.8749364,48.0470707],[18.886674,48.058682],[18.9089819,48.051139],[18.9439039,48.058865],[18.9816099,48.0536009],[19.0148639,48.078179],[19.0585249,48.0573529],[19.0843619,48.072781],[19.107402,48.065596],[19.1352889,48.074146],[19.2413679,48.0536529],[19.2557819,48.0715559],[19.3031119,48.088711],[19.3865969,48.091914],[19.400018,48.082304],[19.454053,48.101436],[19.467354,48.083933],[19.4944199,48.109906],[19.492377,48.1396639],[19.5128219,48.154663],[19.504518,48.173443],[19.528967,48.190358],[19.526044,48.20313],[19.577502,48.2160149],[19.6308263,48.2500725],[19.6445239,48.2391719],[19.669857,48.239212],[19.691219,48.203894],[19.721125,48.201473],[19.74618,48.2165119],[19.7871629,48.19253],[19.7987329,48.19482],[19.8052829,48.183733],[19.782415,48.165039],[19.794812,48.153529],[19.821331,48.169081],[19.8452819,48.162742],[19.8551729,48.178431],[19.8601309,48.169409],[19.898745,48.1663119],[19.9145359,48.146863],[19.898298,48.1249019],[19.937383,48.131118],[19.9743939,48.1660049],[19.988706,48.1621679],[20.029038,48.1776849],[20.049449,48.1671999],[20.0729859,48.179606],[20.0700369,48.1917019],[20.1340909,48.225182],[20.1331879,48.253982],[20.206162,48.250979],[20.2038299,48.261906],[20.228466,48.262779],[20.2349469,48.279933],[20.286858,48.26164],[20.3257109,48.272794],[20.3374649,48.301667],[20.3656579,48.316606],[20.384077,48.3511809],[20.4098349,48.365857],[20.402532,48.382565],[20.4205349,48.403858],[20.416228,48.418536],[20.507929,48.489363],[20.5065069,48.534415],[20.537471,48.527878],[20.5464939,48.544292],[20.586595,48.535759],[20.6538739,48.561413],[20.836359,48.58284],[20.8378,48.57421],[20.8504359,48.5816329],[20.8453301,48.5665046],[20.8681549,48.551818],[20.922323,48.559453],[20.9346349,48.538341],[20.955882,48.533963],[20.9561979,48.521666],[20.9815849,48.5177669],[21.0151139,48.532313],[21.0663209,48.525894],[21.1174479,48.4910549],[21.1608749,48.521499],[21.179634,48.518232],[21.221061,48.537497],[21.305488,48.5222489],[21.313377,48.550841],[21.326875,48.554129],[21.319384,48.561201],[21.4154499,48.558951],[21.4226649,48.578821],[21.4406099,48.585104],[21.514091,48.551065],[21.5420199,48.508395],[21.6139329,48.509416],[21.6201879,48.469826],[21.663549,48.417961],[21.6645609,48.392164],[21.7017409,48.380695],[21.711871,48.357617],[21.8174139,48.332787],[21.8352029,48.3346409],[21.837213,48.363253],[21.8842979,48.356047],[21.8848429,48.367539],[21.897883,48.36256],[21.8997959,48.3702229],[21.9281859,48.3615969],[21.9268059,48.370899],[21.949198,48.378728],[21.994463,48.377323],[22.0213259,48.392749],[22.0546049,48.377528],[22.0764859,48.387241],[22.086743,48.371564],[22.1359089,48.380519],[22.131056,48.3912329],[22.152768,48.3962409],[22.1561913,48.4093076],[22.2125722,48.4256468],[22.2371405,48.4100396],[22.2654858,48.4098675],[22.2398761,48.3870055],[22.2675722,48.3611612],[22.3178106,48.3545437],[22.3132861,48.3250712],[22.3372944,48.3079113],[22.3384267,48.2792074],[22.3847547,48.2339632],[22.4006407,48.249198],[22.4328384,48.2525166],[22.456386,48.2423109],[22.4899029,48.2534237],[22.4972201,48.2395546],[22.5161491,48.237965],[22.5311088,48.2094282],[22.5711442,48.1961428],[22.5616362,48.1816066],[22.5982449,48.144756],[22.5902763,48.1073414],[22.6754492,48.091997],[22.7347192,48.119848],[22.7576242,48.1200599],[22.7703914,48.1090162],[22.772319,48.1218742],[22.8027688,48.1221112],[22.8025285,48.1070813],[22.8254256,48.1175119],[22.8364365,48.080249],[22.8611284,48.0750312],[22.8677955,48.0524256],[22.8820424,48.0548053],[22.8659692,48.0113165],[22.835562,47.9905988],[22.8407599,47.9813636],[22.8725729,47.9752683],[22.8697274,47.9659593],[22.8915652,47.9672446],[22.897435,47.9540629],[22.8473299,47.9077579],[22.7928135,47.8908586],[22.7586924,47.8941446],[22.77775,47.8422508],[22.7136344,47.8360928],[22.6801938,47.7877527],[22.6111171,47.7717455],[22.5490018,47.7722246],[22.4812121,47.8108886],[22.4513078,47.803389],[22.4313319,47.7398119],[22.3566167,47.7486206],[22.3177714,47.7660887],[22.3176236,47.7433657],[22.2851369,47.7292757],[22.264325,47.7310675],[22.2589955,47.6979057],[22.2306796,47.693196],[22.1796501,47.5916115],[22.1289245,47.5978984],[22.0942787,47.5583628],[22.0782587,47.5621299],[22.0534529,47.5474795],[22.0712176,47.5380742],[22.0617872,47.5288029],[22.0451278,47.5398919],[22.0367222,47.5326653],[22.0071886,47.48362],[22.0327909,47.4508372],[22.0238835,47.3908631],[22.0119849,47.3758016],[21.9627373,47.381053],[21.9382461,47.3725317],[21.8777922,47.2857763],[21.8872845,47.2730473],[21.8534909,47.2397622],[21.8580662,47.1873597],[21.8124804,47.1667511],[21.7924092,47.1059751],[21.7268258,47.0983882],[21.6976037,47.057915],[21.6504151,47.0408303],[21.6888701,47.0019977],[21.6678744,46.9712337],[21.6814917,46.9652089],[21.6381964,46.9330487],[21.5984455,46.9274708],[21.6142857,46.8867275],[21.6016694,46.8668202],[21.520328,46.8373749],[21.5186086,46.8000703],[21.4831761,46.7650246],[21.5263389,46.7393249],[21.529369,46.7209721],[21.4923253,46.6859652],[21.4728438,46.6959075],[21.4299047,46.693937],[21.4309553,46.6781367],[21.4546661,46.660863],[21.4162375,46.6426231],[21.4097959,46.6218052],[21.3657038,46.6379501],[21.3300499,46.6318155],[21.3139733,46.617666],[21.3012351,46.5908672],[21.3207905,46.5828562],[21.2743045,46.5407362],[21.2600254,46.5021583],[21.2744188,46.4767333],[21.2964506,46.4762973],[21.3174343,46.4507288],[21.2895176,46.4154784],[21.2963256,46.4069601],[21.2250116,46.4136899],[21.2064214,46.4033825],[21.1992563,46.3479034],[21.1762269,46.3357664],[21.180497,46.3044494],[21.1155437,46.3018529],[21.1030549,46.2624637],[21.0708792,46.2539014],[21.0660827,46.2429394],[21.0366237,46.2480392],[21.0246723,46.2665329],[20.960817,46.2623039],[20.9465849,46.2793024],[20.9250701,46.2766191],[20.9218133,46.2618129],[20.8732713,46.2877555],[20.7756538,46.2759602],[20.7490474,46.2508489],[20.7618619,46.204563],[20.727401,46.2077485],[20.7341052,46.1939355],[20.7140487,46.1660531],[20.6843592,46.1447802],[20.6549178,46.1497739],[20.6394471,46.1267602],[20.5450486,46.1790935],[20.5014839,46.190334],[20.4949436,46.1709908],[20.4592293,46.1428837],[20.3975133,46.1574709],[20.3685325,46.1528554],[20.3557074,46.1696256],[20.2968136,46.1521542],[20.2549024,46.1158522],[20.2484757,46.1300956],[20.2330132,46.1241668],[20.1817362,46.1601137],[20.1364966,46.1449476],[20.1009667,46.1772756],[20.0636156,46.1437275],[20.0346142,46.1458888],[20.0158072,46.1768354],[19.9354075,46.1764243],[19.8533469,46.1500005],[19.8179747,46.1281652],[19.7585403,46.1479754],[19.6982054,46.1879317],[19.6827672,46.1800388],[19.661508,46.1904394],[19.6317396,46.1692993],[19.5676482,46.179106],[19.5604013,46.1665762],[19.5026585,46.1424492],[19.5271208,46.1210269],[19.4645033,46.0953827],[19.4665828,46.0820437],[19.4160037,46.0460453],[19.3803957,46.0358749],[19.3640923,46.0522965],[19.2819012,46.0148048],[19.2965348,45.9881173],[19.2856472,45.9968981],[19.1479857,45.9963445],[19.1338422,46.0370993],[19.104873,46.0401673],[19.0660427,46.0001999],[19.0796791,45.9636376],[19.0059803,45.9590674],[19.0092745,45.9236559],[18.9061334,45.9353801],[18.8794572,45.9166827],[18.8647137,45.9208493],[18.8685629,45.9113361],[18.8276792,45.9051714],[18.8220041,45.9145893],[18.8075092,45.9036055],[18.809247,45.8796189],[18.7956242,45.8784488],[18.7048857,45.9181883],[18.6700246,45.9108439],[18.6596602,45.9168934],[18.6651348,45.899279],[18.6412808,45.8890396],[18.6550179,45.8742393],[18.6277704,45.8733782],[18.6148449,45.8531438],[18.6236656,45.8398531],[18.5732391,45.8137578],[18.5749849,45.8004344],[18.559716,45.8037961],[18.5223504,45.7826858],[18.4906706,45.7947167],[18.4821905,45.7655032],[18.4562828,45.7695229],[18.4450763,45.7605195],[18.446853,45.737128],[18.40763,45.7397119],[18.3918949,45.7616983],[18.3642257,45.7729364],[18.3394214,45.7471605],[18.2968157,45.7612196],[18.2440473,45.7612305],[18.2307311,45.7790328],[18.1908702,45.7878759],[18.1681939,45.7762712],[18.1246514,45.7896277],[18.1068067,45.7708256],[18.0818922,45.7645205],[17.9958808,45.7957311],[17.9302095,45.7863301],[17.9066757,45.7925692],[17.8653145,45.7670064],[17.8262748,45.8099957],[17.8089784,45.8040989],[17.7809054,45.8174884],[17.7603399,45.811923],[17.7408624,45.8295975],[17.6632915,45.8381849],[17.6276211,45.8979446],[17.5700676,45.9358204],[17.4378254,45.9503823],[17.4258964,45.9272681],[17.4108059,45.9399665],[17.392149,45.9302149],[17.3828713,45.9475733],[17.3476208,45.9423413],[17.3438769,45.9605329],[17.3537711,45.9525011],[17.3905375,45.9581914],[17.387423,45.9661823],[17.3583539,45.9642737],[17.3754852,45.9686921],[17.3751895,45.9881054],[17.3635685,45.9915442],[17.3567202,45.9735836],[17.3339583,45.9960781],[17.3319847,45.9728948],[17.3129974,45.9665347],[17.323647,45.9887776],[17.2987653,45.9838652],[17.3041996,46.0021128],[17.2579726,46.0110256],[17.29632,46.0285169],[17.2541514,46.030005],[17.270955,46.0567055],[17.2324767,46.0592034],[17.2525145,46.0664725],[17.2313144,46.0790345],[17.2019916,46.0765488],[17.2331299,46.0989644],[17.2104017,46.1001693],[17.2129734,46.113855],[17.175927,46.1084583],[17.1743424,46.1287608],[17.1865197,46.1332308],[17.1810983,46.1505485],[17.1562307,46.1585819],[17.1592857,46.1696818],[17.1261012,46.1684495],[17.1227409,46.1789791],[17.0752482,46.1889531],[17.0661614,46.2022984],[16.9735401,46.2251982],[16.973954,46.2431113],[16.9504085,46.2415285],[16.8862356,46.2814598],[16.8713682,46.3252767],[16.8802109,46.3356966],[16.8615374,46.3452401],[16.8656232,46.3556489],[16.8521959,46.3517189],[16.8498589,46.3626245],[16.8352859,46.3638195],[16.8376499,46.3748032],[16.8261732,46.3670994],[16.7933444,46.387385],[16.7592072,46.3776563],[16.7298672,46.40149],[16.7182119,46.3898704],[16.6772872,46.4494536],[16.6631785,46.4486958],[16.6663732,46.4582995],[16.6187915,46.4619875],[16.604468,46.4760773],[16.5235997,46.5053761],[16.5325768,46.5314027],[16.5176728,46.5363516],[16.5084107,46.5652692],[16.4829969,46.5660383],[16.4834008,46.5786011],[16.4455713,46.610952],[16.4248583,46.6131645],[16.385941,46.6442485],[16.3915424,46.6637257],[16.4198454,46.6584771],[16.4286335,46.6939737],[16.3689211,46.7040082],[16.3798266,46.7153869],[16.3710856,46.7222945],[16.3570587,46.7142387],[16.3185954,46.7541449],[16.3305417,46.7752119],[16.3121626,46.7780033],[16.3127666,46.797314],[16.3406373,46.8051851],[16.3508404,46.8300552],[16.3403309,46.8468762],[16.3015007,46.8595142],[16.2913867,46.8728341],[16.2332296,46.8766702],[16.1560866,46.8537074],[16.126571,46.8569079],[16.1139147,46.8691038]]],"terms_url":"http://www.fomi.hu/","terms_text":"Földmérési és Távérzékelési Intézet"},{"id":"FR-BAN","name":"FR-BAN","type":"tms","template":"http://{switch:a,b,c}.layers.openstreetmap.fr/bano/{zoom}/{x}/{y}.png","description":"French address registry or Base Adresses Nationale","scaleExtent":[12,20],"polygon":[[[8.3247852,49.0891892],[6.1566882,49.6167369],[4.8666714,50.2126152],[2.4937064,51.1761675],[1.3121526,50.9324682],[1.2659981,50.1877492],[0.1121369,49.8258592],[-0.3494075,49.4312336],[-1.0232625,49.4852345],[-1.3278818,49.7901162],[-2.1032765,49.7901162],[-1.6232703,48.7420657],[-3.1002126,48.9728514],[-5.1125465,48.6811558],[-5.3525496,48.4367783],[-4.5984193,47.7194959],[-2.555398,47.0232784],[-2.4738077,46.6638823],[-1.6676954,46.1055717],[-1.334807,45.5141125],[-1.4914604,44.1627003],[-1.9940567,43.3708146],[-0.956228,42.7364747],[2.2029487,42.2841894],[3.2342502,42.5444129],[3.2407774,43.1140543],[4.0436261,43.3280964],[6.4325902,42.808345],[7.6270723,43.5934102],[7.8163619,44.1720643],[7.0396221,44.41967],[7.268075,45.4958141],[7.1244761,46.2140775],[6.5631347,46.771283],[7.6571492,47.59128],[7.6527839,47.5941813],[7.6224698,47.5776739],[7.6047297,47.578221],[7.5877054,47.5901532],[7.521558,47.65161],[7.503992,47.70235],[7.520958,47.77685],[7.557124,47.84839],[7.549463,47.879205],[7.574615,47.93028],[7.613179,47.96804],[7.611904,47.9871],[7.5612401,48.0383618],[7.574915,48.1258],[7.595338,48.15977],[7.633047,48.19717],[7.662748,48.22473],[7.684659,48.30305],[7.763463,48.49158],[7.8004602,48.5125977],[7.799582,48.5878],[7.834088,48.64439],[7.9121073,48.6889897],[7.9672295,48.7571585],[8.020692,48.78879],[8.043024,48.7956],[8.0864658,48.8130551],[8.1364418,48.8978239],[8.1970586,48.96021],[8.2816129,48.9948995],[8.2996723,49.025966],[8.3124269,49.0599642],[8.3247852,49.0891892]],[[9.3609615,43.1345098],[8.4393174,42.48439],[8.4836272,41.8175373],[8.8469677,41.3768281],[9.2058772,41.3136241],[9.48946,41.5461776],[9.6356823,42.1994563],[9.6046655,42.901254],[9.3609615,43.1345098]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_France/WikiProject_Base_Adresses_Nationale_Ouverte_(BANO)","terms_text":"Tiles © cquest@Openstreetmap France, data © OpenStreetMap contributors, ODBL"},{"id":"FR-Cadastre","name":"FR-Cadastre","type":"tms","template":"http://tms.cadastre.openstreetmap.fr/*/tout/{zoom}/{x}/{y}.png","description":"French land registry","scaleExtent":[12,20],"polygon":[[[8.3247852,49.0891892],[6.1566882,49.6167369],[4.8666714,50.2126152],[2.4937064,51.1761675],[1.3121526,50.9324682],[1.2659981,50.1877492],[0.1121369,49.8258592],[-0.3494075,49.4312336],[-1.0232625,49.4852345],[-1.3278818,49.7901162],[-2.1032765,49.7901162],[-1.6232703,48.7420657],[-3.1002126,48.9728514],[-5.1125465,48.6811558],[-5.3525496,48.4367783],[-4.5984193,47.7194959],[-2.555398,47.0232784],[-2.4738077,46.6638823],[-1.6676954,46.1055717],[-1.334807,45.5141125],[-1.4914604,44.1627003],[-1.9940567,43.3708146],[-0.956228,42.7364747],[2.2029487,42.2841894],[3.2342502,42.5444129],[3.2407774,43.1140543],[4.0436261,43.3280964],[6.4325902,42.808345],[7.6270723,43.5934102],[7.8163619,44.1720643],[7.0396221,44.41967],[7.268075,45.4958141],[7.1244761,46.2140775],[6.5631347,46.771283],[7.6571492,47.59128],[7.6527839,47.5941813],[7.6224698,47.5776739],[7.6047297,47.578221],[7.5877054,47.5901532],[7.521558,47.65161],[7.503992,47.70235],[7.520958,47.77685],[7.557124,47.84839],[7.549463,47.879205],[7.574615,47.93028],[7.613179,47.96804],[7.611904,47.9871],[7.5612401,48.0383618],[7.574915,48.1258],[7.595338,48.15977],[7.633047,48.19717],[7.662748,48.22473],[7.684659,48.30305],[7.763463,48.49158],[7.8004602,48.5125977],[7.799582,48.5878],[7.834088,48.64439],[7.9121073,48.6889897],[7.9672295,48.7571585],[8.020692,48.78879],[8.043024,48.7956],[8.0864658,48.8130551],[8.1364418,48.8978239],[8.1970586,48.96021],[8.2816129,48.9948995],[8.2996723,49.025966],[8.3124269,49.0599642],[8.3247852,49.0891892]],[[9.3609615,43.1345098],[8.4393174,42.48439],[8.4836272,41.8175373],[8.8469677,41.3768281],[9.2058772,41.3136241],[9.48946,41.5461776],[9.6356823,42.1994563],[9.6046655,42.901254],[9.3609615,43.1345098]]],"terms_url":"http://wiki.openstreetmap.org/wiki/WikiProject_Cadastre_Fran%C3%A7ais/Conditions_d%27utilisation","terms_text":"cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2015"},{"id":"Freemap.sk-Car","name":"Freemap.sk Car","type":"tms","template":"http://t{switch:1,2,3,4}.freemap.sk/A/{zoom}/{x}/{y}.jpeg","scaleExtent":[8,16],"polygon":[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],"terms_text":"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved."},{"id":"Freemap.sk-Cyclo","name":"Freemap.sk Cyclo","type":"tms","template":"http://t{switch:1,2,3,4}.freemap.sk/C/{zoom}/{x}/{y}.jpeg","scaleExtent":[8,16],"polygon":[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],"terms_text":"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved."},{"id":"Freemap.sk-Hiking","name":"Freemap.sk Hiking","type":"tms","template":"http://t{switch:1,2,3,4}.freemap.sk/T/{zoom}/{x}/{y}.jpeg","scaleExtent":[8,16],"polygon":[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],"terms_text":"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved."},{"id":"Freemap.sk-Ski","name":"Freemap.sk Ski","type":"tms","template":"http://t{switch:1,2,3,4}.freemap.sk/K/{zoom}/{x}/{y}.jpeg","scaleExtent":[8,16],"polygon":[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],"terms_text":"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved."},{"id":"Geodatastyrelsen_Denmark","name":"Geodatastyrelsen (Denmark)","type":"tms","template":"http://osmtools.septima.dk/mapproxy/tiles/1.0.0/kortforsyningen_ortoforaar/EPSG3857/{zoom}/{x}/{y}.jpeg","scaleExtent":[0,21],"polygon":[[[8.3743941,54.9551655],[8.3683809,55.4042149],[8.2103997,55.4039795],[8.2087314,55.4937345],[8.0502655,55.4924731],[8.0185123,56.7501399],[8.1819161,56.7509948],[8.1763274,57.0208898],[8.3413329,57.0219872],[8.3392467,57.1119574],[8.5054433,57.1123212],[8.5033923,57.2020499],[9.3316304,57.2027636],[9.3319079,57.2924835],[9.4978864,57.2919578],[9.4988593,57.3820608],[9.6649749,57.3811615],[9.6687295,57.5605591],[9.8351961,57.5596265],[9.8374896,57.6493322],[10.1725726,57.6462818],[10.1754245,57.7367768],[10.5118282,57.7330269],[10.5152095,57.8228945],[10.6834853,57.8207722],[10.6751613,57.6412021],[10.5077045,57.6433097],[10.5039992,57.5535088],[10.671038,57.5514113],[10.6507805,57.1024538],[10.4857673,57.1045138],[10.4786236,56.9249051],[10.3143981,56.9267573],[10.3112341,56.8369269],[10.4750295,56.83509],[10.4649016,56.5656681],[10.9524239,56.5589761],[10.9479249,56.4692243],[11.1099335,56.4664675],[11.1052639,56.376833],[10.9429901,56.3795284],[10.9341235,56.1994768],[10.7719685,56.2020244],[10.7694751,56.1120103],[10.6079695,56.1150259],[10.4466742,56.116717],[10.2865948,56.118675],[10.2831527,56.0281851],[10.4439274,56.0270388],[10.4417713,55.7579243],[10.4334961,55.6693533],[10.743814,55.6646861],[10.743814,55.5712253],[10.8969041,55.5712253],[10.9051793,55.3953852],[11.0613726,55.3812841],[11.0593038,55.1124061],[11.0458567,55.0318621],[11.2030844,55.0247474],[11.2030844,55.117139],[11.0593038,55.1124061],[11.0613726,55.3812841],[11.0789572,55.5712253],[10.8969041,55.5712253],[10.9258671,55.6670198],[10.743814,55.6646861],[10.7562267,55.7579243],[10.4417713,55.7579243],[10.4439274,56.0270388],[10.4466742,56.116717],[10.6079695,56.1150259],[10.6052053,56.0247462],[10.9258671,56.0201215],[10.9197132,55.9309388],[11.0802782,55.92792],[11.0858066,56.0178284],[11.7265047,56.005058],[11.7319981,56.0952142],[12.0540333,56.0871256],[12.0608477,56.1762576],[12.7023469,56.1594405],[12.6611131,55.7114318],[12.9792318,55.7014026],[12.9612912,55.5217294],[12.3268659,55.5412096],[12.3206071,55.4513655],[12.4778226,55.447067],[12.4702432,55.3570479],[12.6269738,55.3523837],[12.6200898,55.2632576],[12.4627339,55.26722],[12.4552949,55.1778223],[12.2987046,55.1822303],[12.2897344,55.0923641],[12.6048608,55.0832904],[12.5872011,54.9036285],[12.2766618,54.9119031],[12.2610181,54.7331602],[12.1070691,54.7378161],[12.0858621,54.4681655],[11.7794953,54.4753579],[11.7837381,54.5654783],[11.1658525,54.5782155],[11.1706443,54.6686508],[10.8617173,54.6733956],[10.8651245,54.7634667],[10.7713646,54.7643888],[10.7707276,54.7372807],[10.7551428,54.7375776],[10.7544039,54.7195666],[10.7389074,54.7197588],[10.7384368,54.7108482],[10.7074486,54.7113045],[10.7041094,54.6756741],[10.5510973,54.6781698],[10.5547184,54.7670245],[10.2423994,54.7705935],[10.2459845,54.8604673],[10.0902268,54.8622134],[10.0873731,54.7723851],[9.1555798,54.7769557],[9.1562752,54.8675369],[8.5321973,54.8663765],[8.531432,54.95516],[8.3743941,54.9551655]],[[11.4577738,56.819554],[11.7849181,56.8127385],[11.7716715,56.6332796],[11.4459621,56.6401087],[11.4577738,56.819554]],[[11.3274736,57.3612962],[11.3161808,57.1818004],[11.1508692,57.1847276],[11.1456628,57.094962],[10.8157703,57.1001693],[10.8290599,57.3695272],[11.3274736,57.3612962]],[[11.5843266,56.2777928],[11.5782882,56.1880397],[11.7392309,56.1845765],[11.7456428,56.2743186],[11.5843266,56.2777928]],[[14.6825922,55.3639405],[14.8395247,55.3565231],[14.8263755,55.2671261],[15.1393406,55.2517359],[15.1532015,55.3410836],[15.309925,55.3330556],[15.295719,55.2437356],[15.1393406,55.2517359],[15.1255631,55.1623802],[15.2815819,55.1544167],[15.2535578,54.9757646],[14.6317464,55.0062496],[14.6825922,55.3639405]]],"terms_url":"http://download.kortforsyningen.dk/content/vilkaar-og-betingelser","terms_text":"Geodatastyrelsen og Danske Kommuner","best":true},{"id":"Geoportal-PL-aerial_image","name":"Geoportal.gov.pl (Orthophotomap)","type":"tms","template":"http://wms.misek.pl/geoportal.orto/tms/{zoom}/{x}/{y}","scaleExtent":[6,24],"polygon":[[[15.9751041,54.3709213],[16.311164,54.5561775],[17.1391878,54.7845723],[18.3448458,54.9022727],[19.6613689,54.4737213],[20.2815206,54.4213456],[21.4663914,54.3406369],[22.7759855,54.3769755],[22.8625989,54.4233613],[23.2956657,54.2678633],[23.5347186,54.0955258],[23.5208604,53.9775182],[23.7183389,53.4629603],[23.9296755,53.1856735],[23.9296755,52.6887269],[23.732197,52.6067497],[23.5658994,52.5878101],[23.2090523,52.3302642],[23.1951942,52.2370089],[23.5035377,52.1860596],[23.6906226,52.0030113],[23.5970802,51.739903],[23.6629063,51.3888562],[23.9366046,50.9827781],[24.1687284,50.8604752],[24.0197534,50.8035823],[24.1098313,50.6610467],[24.0578633,50.4188439],[23.6178674,50.3083403],[22.6824431,49.5163532],[22.7378756,49.2094935],[22.9041733,49.0780441],[22.8625989,48.9940062],[22.6096878,49.0371785],[22.0761495,49.2004392],[21.8474902,49.3721872],[21.3763135,49.4488281],[21.1026153,49.3721872],[20.9120659,49.3022043],[20.6452967,49.3902311],[20.1845136,49.3315641],[20.1186875,49.2004392],[19.9419962,49.1302123],[19.765305,49.2117568],[19.7479823,49.3992506],[19.6024718,49.4150307],[19.5089294,49.5815389],[19.4292451,49.5905232],[19.2317666,49.4150307],[18.9961783,49.387976],[18.9338167,49.4916048],[18.8368097,49.4938552],[18.8021643,49.6623381],[18.6427958,49.7094091],[18.521537,49.8994693],[18.0815412,50.0109209],[17.8875272,49.9886512],[17.7385522,50.0687739],[17.6068999,50.1709584],[17.7454813,50.2153184],[17.710836,50.3017019],[17.4163505,50.2640668],[16.9486384,50.4453265],[16.8932058,50.4033889],[17.0006064,50.3105529],[17.017929,50.2241854],[16.8135215,50.186489],[16.6402948,50.0976742],[16.4324227,50.2862087],[16.1968344,50.4276731],[16.4220291,50.5885165],[16.3388803,50.6632429],[16.2280152,50.6368824],[16.0547884,50.6127057],[15.5732181,50.7641544],[15.2683391,50.8976368],[15.2440873,50.980597],[15.0292862,51.0133036],[15.0015699,50.8582883],[14.8110205,50.8735944],[14.956531,51.0721176],[15.0188926,51.2914636],[14.9392083,51.4601459],[14.7209426,51.5571799],[14.7521234,51.6260562],[14.5996839,51.8427626],[14.70362,52.0733396],[14.5581095,52.2497371],[14.5165351,52.425436],[14.6031485,52.5878101],[14.1146491,52.8208272],[14.152759,52.9733951],[14.3502374,53.0734212],[14.4229927,53.2665624],[14.1977979,53.8734759],[14.2220497,53.9958517],[15.9751041,54.3709213]]],"terms_text":"Copyright © Główny Urząd Geodezji i Kartografii.","best":true},{"id":"IBGE_DF_Addresses","name":"IBGE Distrito Federal","type":"tms","template":"https://api.mapbox.com/styles/v1/wille/cirnnxni1000jg8nfppc8g7pm/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoid2lsbGUiLCJhIjoicFNVWk5VWSJ9.hluCd0YGvYHNlFi_utWe2g","description":"Addresses data from IBGE","scaleExtent":[0,19],"polygon":[[[-48.2444,-16.0508],[-48.2444,-15.5005],[-47.5695,-15.5005],[-47.5695,-16.0508],[-48.2444,-16.0508]]],"overlay":true},{"id":"IBGE_Setores_Rurais","name":"IBGE Mapa de Setores Rurais","type":"tms","template":"http://{switch:a,b,c}.tiles.mapbox.com/v4/tmpsantos.i00mo1kj/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJncjlmd0t3In0.DmZsIeOW-3x-C5eX-wAqTw","scaleExtent":[0,14],"polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]]},{"id":"IBGE_Setores_Urbanos","name":"IBGE Mapa de Setores Urbanos","type":"tms","template":"http://{switch:a,b,c}.tiles.mapbox.com/v4/tmpsantos.hgda0m6h/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJncjlmd0t3In0.DmZsIeOW-3x-C5eX-wAqTw","scaleExtent":[0,19],"polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]]},{"id":"Haiti-Drone","name":"Imagerie Drone (Haiti)","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/iomhaiti/{zoom}/{x}/{y}","polygon":[[[-72.1547401,19.6878969],[-72.162234,19.689011],[-72.164995,19.6932445],[-72.1657838,19.6979977],[-72.161603,19.7035677],[-72.1487449,19.7028993],[-72.1477194,19.7026765],[-72.1485082,19.7001514],[-72.1436963,19.7011169],[-72.1410143,19.7000029],[-72.139476,19.6973664],[-72.1382533,19.6927617],[-72.1386872,19.6923161],[-72.1380561,19.6896423],[-72.1385294,19.6894938],[-72.1388055,19.6901251],[-72.1388844,19.6876741],[-72.1378195,19.6872656],[-72.13778,19.6850003],[-72.1369517,19.6855945],[-72.136794,19.6840719],[-72.135729,19.6835148],[-72.1355713,19.6740817],[-72.1366362,19.6708133],[-72.1487843,19.6710733],[-72.1534779,19.6763843],[-72.1530835,19.6769414],[-72.1533251,19.6769768],[-72.1532807,19.6796525],[-72.1523834,19.6797175],[-72.1522749,19.6803488],[-72.1519101,19.6803395],[-72.1518608,19.6805067],[-72.1528173,19.6806552],[-72.1522299,19.6833011],[-72.1507801,19.6831499],[-72.1504457,19.6847862],[-72.1508591,19.6843492],[-72.1530087,19.6849898],[-72.1546258,19.6854354],[-72.1543103,19.6870694],[-72.1547244,19.6868466],[-72.1548501,19.6877564],[-72.1545814,19.6877982],[-72.1547401,19.6878969]],[[-72.1310601,19.6718929],[-72.1259842,19.6772765],[-72.1255379,19.6776179],[-72.1216891,19.6776442],[-72.1149677,19.672602],[-72.1152745,19.6687152],[-72.1198205,19.6627535],[-72.1227768,19.6625696],[-72.1248965,19.662701],[-72.1285779,19.6645394],[-72.1308091,19.6661677],[-72.1316737,19.668794],[-72.1315621,19.671],[-72.1310601,19.6718929]],[[-71.845795,19.6709758],[-71.8429354,19.6759525],[-71.8410027,19.6759525],[-71.8380249,19.6755254],[-71.8378671,19.6745041],[-71.8390504,19.6743927],[-71.8390109,19.6741141],[-71.8398392,19.673947],[-71.8389123,19.6736127],[-71.8380249,19.67209],[-71.8380052,19.6726285],[-71.8376699,19.6727214],[-71.8376305,19.672545],[-71.8354414,19.6732135],[-71.835333,19.6729999],[-71.8331242,19.6734642],[-71.8326706,19.6716815],[-71.8321579,19.67209],[-71.8307183,19.6694902],[-71.8306009,19.6697594],[-71.8302174,19.6698907],[-71.8291833,19.6672095],[-71.8290749,19.6672095],[-71.8289122,19.6667916],[-71.8289516,19.6666199],[-71.8288333,19.6663506],[-71.8285572,19.6664759],[-71.8288678,19.6672466],[-71.8287593,19.6674138],[-71.8277979,19.6678177],[-71.8277112,19.6678586],[-71.8278263,19.6679637],[-71.8271831,19.6681212],[-71.8271761,19.6680917],[-71.8264405,19.6683921],[-71.8264074,19.6683231],[-71.8261954,19.6684253],[-71.8261806,19.6683556],[-71.8258946,19.6684206],[-71.8258897,19.6686574],[-71.8251551,19.6687549],[-71.8254509,19.6691588],[-71.8229332,19.6695739],[-71.822713,19.6696658],[-71.8227688,19.6697577],[-71.8201751,19.6709855],[-71.8198474,19.6704537],[-71.8197985,19.6706014],[-71.8194674,19.6707557],[-71.8182472,19.6713433],[-71.8181426,19.6711431],[-71.8175813,19.6714254],[-71.816959,19.6707672],[-71.8176388,19.6718965],[-71.8171403,19.6720376],[-71.8158225,19.6718045],[-71.8138354,19.6711874],[-71.8123259,19.6706982],[-71.8121759,19.6704258],[-71.8124304,19.6701467],[-71.8119184,19.6700141],[-71.8118765,19.6705828],[-71.811169,19.6703483],[-71.8095938,19.6698516],[-71.8077992,19.6692829],[-71.8056028,19.668612],[-71.8051443,19.6668942],[-71.8051196,19.6652322],[-71.8052315,19.661979],[-71.8065603,19.6523921],[-71.8073412,19.6482946],[-71.8099686,19.6468292],[-71.8147517,19.6454502],[-71.8147726,19.6455619],[-71.8150027,19.6455093],[-71.8149469,19.6453846],[-71.8159928,19.6450234],[-71.8158882,19.6448855],[-71.8165854,19.6446097],[-71.8190119,19.643802],[-71.8211524,19.643454],[-71.8221564,19.6433292],[-71.8269046,19.643211],[-71.8280481,19.6432241],[-71.8304466,19.6440778],[-71.8306419,19.6448592],[-71.8295263,19.6450365],[-71.8296064,19.6456111],[-71.8299411,19.6455651],[-71.8303699,19.6451744],[-71.830471,19.6453452],[-71.8308092,19.6451974],[-71.8310184,19.6451088],[-71.8312519,19.6458541],[-71.8311125,19.6458245],[-71.831367,19.6465862],[-71.8328939,19.646189],[-71.8344566,19.6457062],[-71.8344664,19.6463052],[-71.834215,19.6461938],[-71.8342002,19.6465513],[-71.8346702,19.6463],[-71.8349118,19.6463905],[-71.8347984,19.6462187],[-71.8354393,19.6458496],[-71.8355034,19.6458032],[-71.8364747,19.6461328],[-71.8376382,19.6472658],[-71.8379143,19.647888],[-71.8390483,19.6508039],[-71.8456942,19.6696203],[-71.845795,19.6709758]],[[-72.098878,18.54843],[-72.096993,18.5501994],[-72.0972888,18.5503209],[-72.0968451,18.5503489],[-72.0955632,18.551854],[-72.0956428,18.5526742],[-72.0959914,18.5533748],[-72.0962145,18.553203],[-72.0962842,18.5535665],[-72.0964446,18.5535533],[-72.0965352,18.5539764],[-72.0965056,18.554173],[-72.0966085,18.5541747],[-72.0965178,18.5542127],[-72.0968769,18.5546588],[-72.0979018,18.5552141],[-72.1006211,18.5555875],[-72.1014926,18.5556206],[-72.1024339,18.5555016],[-72.103417,18.5543515],[-72.1034798,18.5516215],[-72.1030789,18.5516149],[-72.1033752,18.5515224],[-72.1035042,18.5515224],[-72.1035239,18.5502417],[-72.1028701,18.5503062],[-72.1029015,18.55025],[-72.1028457,18.5501773],[-72.1035081,18.5500252],[-72.103491,18.5497396],[-72.1035181,18.5497361],[-72.1035398,18.5489039],[-72.1034317,18.5487056],[-72.102717,18.5481437],[-72.1025601,18.5481536],[-72.10229,18.5482751],[-72.1022891,18.5482569],[-72.1025201,18.5481396],[-72.1023388,18.5481321],[-72.0999082,18.5480901],[-72.09907,18.5483799],[-72.098878,18.54843]],[[-72.2542503,18.568262],[-72.2560252,18.5717765],[-72.2557886,18.5748049],[-72.2535009,18.5755526],[-72.2522782,18.5755526],[-72.2499906,18.5740945],[-72.2473874,18.5698323],[-72.2460069,18.566729],[-72.2458492,18.5629527],[-72.2479396,18.5625414],[-72.2501483,18.5628031],[-72.2519232,18.5650839],[-72.2542503,18.568262]],[[-72.303145,18.5332749],[-72.3031275,18.5331799],[-72.3048311,18.5311081],[-72.3097397,18.5311081],[-72.3164332,18.5324302],[-72.3234056,18.5366083],[-72.3261388,18.5387765],[-72.3261946,18.5426371],[-72.3170468,18.5540596],[-72.3130864,18.5540596],[-72.2987511,18.5453342],[-72.2988627,18.5407333],[-72.2962969,18.5404689],[-72.2954602,18.5395169],[-72.2961853,18.5338582],[-72.2971893,18.5332235],[-72.3007034,18.5332764],[-72.3022652,18.5342284],[-72.3028486,18.5335189],[-72.303104,18.5333361],[-72.303181,18.5334007],[-72.3035793,18.5335614],[-72.3030793,18.5346463],[-72.303715,18.5339873],[-72.3045286,18.5344052],[-72.3044015,18.5345097],[-72.3062747,18.5352571],[-72.3063107,18.5352741],[-72.3061219,18.5357628],[-72.3061219,18.5358196],[-72.30637,18.5358928],[-72.3062726,18.5354869],[-72.3066688,18.5350891],[-72.3061963,18.5349706],[-72.3058869,18.5349385],[-72.3055373,18.5346833],[-72.3054864,18.534613],[-72.3055585,18.5345065],[-72.3046749,18.5342293],[-72.3047617,18.5338817],[-72.3043252,18.5337511],[-72.3042595,18.5336346],[-72.303145,18.5332749]],[[-72.2981405,18.477502],[-72.2935652,18.4948587],[-72.2922242,18.4964297],[-72.2931708,18.4972526],[-72.2892266,18.5057058],[-72.2878067,18.5080996],[-72.2850458,18.5119893],[-72.2840203,18.5113161],[-72.2808649,18.515879],[-72.2773151,18.5175994],[-72.2723454,18.5175246],[-72.2662714,18.5144578],[-72.2665869,18.5066783],[-72.2692643,18.5046154],[-72.2661965,18.5029756],[-72.2688181,18.4965222],[-72.2691528,18.4959403],[-72.2702684,18.4961519],[-72.2702684,18.4955964],[-72.2690691,18.49557],[-72.2692922,18.4937714],[-72.2736988,18.4859951],[-72.2746749,18.4850429],[-72.2751769,18.483403],[-72.2765435,18.4813398],[-72.2773523,18.4814985],[-72.2783006,18.4809694],[-72.2778544,18.4807049],[-72.2771013,18.480123],[-72.2789978,18.4775836],[-72.279723,18.4772927],[-72.2806433,18.4776365],[-72.2813685,18.4771604],[-72.2808386,18.4769752],[-72.2812848,18.4758378],[-72.2823167,18.4751765],[-72.2851615,18.4750971],[-72.2849941,18.4763668],[-72.2854404,18.4769752],[-72.286277,18.4756262],[-72.2869325,18.4754675],[-72.2865978,18.4751897],[-72.2865978,18.4750046],[-72.2909765,18.4747268],[-72.2946579,18.4749384],[-72.2973911,18.476843],[-72.2981405,18.477502]],[[-72.3466657,18.5222375],[-72.346833,18.5244325],[-72.3475303,18.5277645],[-72.3455501,18.5291131],[-72.3403069,18.5292189],[-72.3383267,18.5280289],[-72.3369043,18.530118],[-72.3338086,18.5296684],[-72.3289279,18.5270769],[-72.328649,18.5253316],[-72.3292068,18.5232689],[-72.330406,18.5220524],[-72.3321631,18.5221847],[-72.3322467,18.5191963],[-72.3369183,18.5183633],[-72.3382012,18.5184691],[-72.3381454,18.5181782],[-72.3411993,18.5177947],[-72.3454943,18.5171997],[-72.3492595,18.517279],[-72.3504308,18.5188922],[-72.3503472,18.5206112],[-72.3496778,18.5220392],[-72.3466657,18.5222375]],[[-72.3303078,18.5486462],[-72.3429687,18.5508149],[-72.3433236,18.5530585],[-72.3413121,18.5614341],[-72.3390639,18.5613593],[-72.3384723,18.5638271],[-72.3375257,18.5654348],[-72.3348436,18.5650609],[-72.3311755,18.5638271],[-72.3312149,18.5616211],[-72.3232082,18.5606863],[-72.3212361,18.559602],[-72.3208023,18.5587046],[-72.3208811,18.557882],[-72.3259493,18.5580274],[-72.3266186,18.5581993],[-72.3259214,18.5577498],[-72.3250986,18.5573797],[-72.3233767,18.552263],[-72.3245994,18.5478507],[-72.3288986,18.5483742],[-72.329979,18.5489548],[-72.3303078,18.5486462]],[[-72.3231383,18.5269828],[-72.3223434,18.528067],[-72.3209629,18.5279745],[-72.3207816,18.5271282],[-72.3208513,18.5253697],[-72.3214649,18.5249598],[-72.3225666,18.5248937],[-72.3228454,18.52533],[-72.3232359,18.5264804],[-72.3231383,18.5269828]],[[-72.2160832,18.6457752],[-72.2159649,18.6553795],[-72.2030279,18.6558279],[-72.1947057,18.6553421],[-72.1922208,18.6545573],[-72.1920631,18.6521283],[-72.193483,18.6477559],[-72.201253,18.6385249],[-72.2069327,18.6388239],[-72.2120996,18.6424117],[-72.2118068,18.6430591],[-72.2121693,18.6426892],[-72.2127968,18.6427552],[-72.2134662,18.6431252],[-72.2135638,18.6437462],[-72.2154176,18.6443947],[-72.2158909,18.6450301],[-72.2160832,18.6457752]],[[-72.2867654,18.6482017],[-72.2900977,18.6527446],[-72.28981,18.6536532],[-72.2900738,18.6542664],[-72.290721,18.6537667],[-72.2910327,18.6544709],[-72.2912485,18.654221],[-72.29168,18.6558905],[-72.2912245,18.656606],[-72.2922673,18.65597],[-72.2926869,18.6567536],[-72.2930705,18.6567309],[-72.2941253,18.6581846],[-72.2960192,18.6608421],[-72.2959713,18.6619096],[-72.2932862,18.664567],[-72.2906731,18.6659979],[-72.2895943,18.6661342],[-72.2895943,18.6665657],[-72.2877004,18.6664749],[-72.2875805,18.6676559],[-72.2831214,18.6697227],[-72.2796453,18.6696546],[-72.2784311,18.6690787],[-72.2783972,18.6687736],[-72.277736,18.6691671],[-72.2774394,18.669143],[-72.2770071,18.6683159],[-72.2765575,18.6681125],[-72.2765385,18.6680583],[-72.2752319,18.6685239],[-72.2749292,18.6674649],[-72.2746416,18.6674309],[-72.2734668,18.6682145],[-72.2732271,18.6682712],[-72.2726757,18.6671583],[-72.2719147,18.6674288],[-72.2718808,18.6673405],[-72.2688149,18.6681868],[-72.2688269,18.6671761],[-72.2690786,18.6668241],[-72.2688149,18.66679],[-72.2681077,18.6670739],[-72.2676282,18.6673805],[-72.2675563,18.6666878],[-72.266861,18.666949],[-72.2655904,18.6673578],[-72.2654466,18.6670058],[-72.2647514,18.6674146],[-72.2629893,18.6681868],[-72.2628455,18.6681754],[-72.2626537,18.6676076],[-72.2623001,18.6677098],[-72.2624799,18.6679199],[-72.2624799,18.6682322],[-72.262306,18.6682606],[-72.2620963,18.6679654],[-72.2622761,18.6689193],[-72.2601484,18.6688966],[-72.2542749,18.6687944],[-72.2505388,18.6683476],[-72.2504371,18.669536],[-72.2477926,18.6698893],[-72.2415204,18.669793],[-72.2414187,18.6741933],[-72.2389167,18.6739759],[-72.2387249,18.6734649],[-72.2383653,18.6733059],[-72.2387009,18.6739532],[-72.2375502,18.6738964],[-72.2374183,18.6735103],[-72.237742,18.67334],[-72.2375142,18.6732605],[-72.236843,18.6734876],[-72.2364354,18.6724088],[-72.2355124,18.6726019],[-72.2354045,18.6724202],[-72.2353027,18.6729028],[-72.2345475,18.6726871],[-72.2343077,18.6724599],[-72.2342358,18.6734706],[-72.2334087,18.6734592],[-72.2332889,18.6733003],[-72.2327375,18.6732889],[-72.2327135,18.6735047],[-72.227703,18.6725281],[-72.2265283,18.6716537],[-72.226804,18.6715742],[-72.2274993,18.6715855],[-72.2274873,18.6714493],[-72.2272899,18.6714623],[-72.2272814,18.6712977],[-72.2272094,18.671358],[-72.2261785,18.6713693],[-72.2256032,18.670881],[-72.2255073,18.6694502],[-72.2261066,18.6696886],[-72.2261785,18.6695949],[-72.2259837,18.6695495],[-72.225777,18.6691379],[-72.2253335,18.6694643],[-72.2249739,18.66947],[-72.2245783,18.6678802],[-72.2235525,18.6677046],[-72.2235907,18.6675921],[-72.2224634,18.6676283],[-72.2223659,18.667022],[-72.2223277,18.6670943],[-72.2219209,18.667026],[-72.2208105,18.6669015],[-72.220809,18.6665325],[-72.2208705,18.6663593],[-72.2206023,18.6668107],[-72.2203895,18.6666361],[-72.2184341,18.6650535],[-72.21829,18.6640979],[-72.2183493,18.6608376],[-72.2187223,18.6606541],[-72.2186894,18.660603],[-72.2187253,18.6604525],[-72.2189771,18.6603247],[-72.2187823,18.6601998],[-72.2186984,18.6602367],[-72.2185815,18.6600352],[-72.2186085,18.6600039],[-72.2187823,18.6601345],[-72.218995,18.6600181],[-72.2189111,18.6599131],[-72.2189681,18.6597938],[-72.2183807,18.6595837],[-72.2184728,18.6539662],[-72.2201001,18.6511554],[-72.225796,18.6469472],[-72.2283048,18.6457265],[-72.2379335,18.645855],[-72.237764,18.6446985],[-72.2400355,18.6432529],[-72.2455958,18.6433493],[-72.2482742,18.6450358],[-72.2487488,18.6436705],[-72.2511067,18.6429775],[-72.2512385,18.6433409],[-72.2512625,18.6431592],[-72.2514843,18.6431365],[-72.2513284,18.6429718],[-72.2533602,18.6423471],[-72.253516,18.6426765],[-72.2539535,18.6425402],[-72.2541453,18.642932],[-72.2543851,18.6428696],[-72.2543791,18.6427503],[-72.2564168,18.6423244],[-72.2566925,18.6431365],[-72.2568783,18.6428582],[-72.2568184,18.6425288],[-72.258843,18.6420991],[-72.258885,18.6422467],[-72.2592626,18.6422297],[-72.2596461,18.6424057],[-72.2592206,18.6406907],[-72.2599545,18.6404815],[-72.2601156,18.6406341],[-72.2601156,18.6399393],[-72.2615268,18.6394669],[-72.2626056,18.6391034],[-72.2654465,18.6387286],[-72.2719433,18.6386832],[-72.272201,18.6388649],[-72.2730341,18.6394158],[-72.273166,18.6412558],[-72.2738732,18.6410286],[-72.2742208,18.6416079],[-72.2752187,18.6416987],[-72.2754524,18.6415738],[-72.2755513,18.6416874],[-72.2755394,18.6417527],[-72.2764713,18.6418634],[-72.276753,18.6418975],[-72.2762953,18.6426002],[-72.2774226,18.6429978],[-72.277982,18.6427247],[-72.2785796,18.6431303],[-72.2785669,18.6432307],[-72.2789017,18.6433471],[-72.279851,18.6439655],[-72.2858703,18.6469651],[-72.2867654,18.6482017]],[[-72.5557247,18.5305893],[-72.5555866,18.5367036],[-72.554995,18.537975],[-72.5488026,18.537919],[-72.5486646,18.5372832],[-72.548842,18.5306267],[-72.5493745,18.5301031],[-72.555133,18.5301218],[-72.5557247,18.5305893]],[[-72.6235278,18.5079877],[-72.6234441,18.5095217],[-72.6226074,18.5104341],[-72.6204878,18.511849],[-72.6183403,18.5107514],[-72.6162207,18.5083183],[-72.6162625,18.506467],[-72.618661,18.5044438],[-72.6204041,18.5044967],[-72.6228305,18.506996],[-72.6235278,18.5079877]]]},{"id":"osmim-imagicode-S2A_R119_N09_20160327T050917","name":"imagico.de OSM images for mapping: Adams Bridge","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R119_N09_20160327T050917&z={zoom}&x={x}&y={-y}","description":"Supplementing incomplete coverage in other sources (true color)","scaleExtent":[0,14],"polygon":[[[79.01779174804685,8.827572266651268],[79.01401519775389,9.64678471986339],[80.17642021179198,9.650423231331946],[80.17727851867674,8.831304063493132],[79.01779174804685,8.827572266651268]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC80700162014211LGN00","name":"imagico.de OSM images for mapping: Alaska Range","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80700162014211LGN00&z={zoom}&x={x}&y={-y}","description":"Recent summer image of the Alaska Range for mapping natural features (true color)","scaleExtent":[0,12],"polygon":[[[-152.70872943147867,62.30357443926811],[-152.70838610872474,62.58153176976553],[-152.00835101350992,63.54645538851267],[-148.99432055696695,63.53329945446586],[-148.99432055696695,62.30357443926811],[-152.70872943147867,62.30357443926811]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81190582014075LGN00","name":"imagico.de OSM images for mapping: Bakun Reservoir","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81190582014075LGN00&z={zoom}&x={x}&y={-y}","description":"Missing in older pre-2011 images (true color)","scaleExtent":[0,13],"polygon":[[[114.35999506049737,2.028456548619032],[113.5344754987298,2.030000532161949],[113.53619211249934,3.070767124420059],[114.76511591010677,3.067510236472651],[114.76254098945248,2.088156161702156],[114.35999506049737,2.028456548619032]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81250592016107LGN00","name":"imagico.de OSM images for mapping: Batam","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81250592016107LGN00&z={zoom}&x={x}&y={-y}","description":"Missing Islands in OSM (true color)","scaleExtent":[0,13],"polygon":[[[104.00154570197358,-0.000078769115171],[104.00137404059662,1.45099139170518],[104.91014937018647,1.451162998032411],[104.91014937018647,-0.000078769115171],[104.00154570197358,-0.000078769115171]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81800982013291LGN00","name":"imagico.de OSM images for mapping: Bouvet Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81800982013291LGN00&z={zoom}&x={x}&y={-y}","description":"For more accurate coastline and glacier mapping (true color)","scaleExtent":[0,13],"polygon":[[[3.246529403113632,-54.47046993167111],[3.246529403113632,-54.375391687979096],[3.463852706336288,-54.375391687979096],[3.463852706336288,-54.47046993167111],[3.246529403113632,-54.47046993167111]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","best":true},{"id":"osmim-imagicode-S2A_R065_N47_20160929T102022","name":"imagico.de OSM images for mapping: Cental Alps in late September 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R065_N47_20160929T102022&z={zoom}&x={x}&y={-y}","description":"Up-to-date image for glacier mapping - beware of some fresh snow at higher altitudes (true color)","scaleExtent":[0,13],"polygon":[[[10.559062957763668,45.95484945195885],[7.473964691162107,45.95532682303484],[7.555847167968747,46.27080015119853],[8.05469512939453,47.66469371011084],[11.752452850341793,47.664809318453564],[11.752452850341793,46.813336457338615],[11.38423919677734,45.955088138010865],[10.559062957763668,45.95484945195885]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC82050982015344LGN00","name":"imagico.de OSM images for mapping: Clerke Rocks","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82050982015344LGN00&z={zoom}&x={x}&y={-y}","description":"Missing in other image sources (true color)","scaleExtent":[0,13],"polygon":[[[-34.17701089820909,-55.29692751183208],[-35.19599283180284,-55.282851769908206],[-35.16663873634385,-54.7209735214882],[-34.12516916236925,-54.73465315976587],[-34.14010370216417,-55.29692751183208],[-34.17701089820909,-55.29692751183208]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-EO1A0040712016264110KF","name":"imagico.de OSM images for mapping: Coropuna","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=EO1A0040712016264110KF&z={zoom}&x={x}&y={-y}","description":"Up-to-date image for glacier mapping (true color)","scaleExtent":[0,14],"polygon":[[[-72.7594470977783,-15.68684010813036],[-72.7594470977783,-15.49570157136026],[-72.74434089660643,-15.426295586903299],[-72.41286277770995,-15.426295586903299],[-72.41286277770995,-15.652957427428944],[-72.42410659790038,-15.686674840407827],[-72.7594470977783,-15.68684010813036]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R022_N06_20151221T103009","name":"imagico.de OSM images for mapping: Cotonou","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R022_N06_20151221T103009&z={zoom}&x={x}&y={-y}","description":"Patchy and partly cloudy coverage in usual sources (true color)","scaleExtent":[0,14],"polygon":[[[1.839749701876779,6.257803795151386],[1.839749701876779,7.114271792431897],[2.549397834200998,7.114271792431897],[2.549397834200998,6.489052510574106],[2.497813590426584,6.258059752887941],[1.839749701876779,6.257803795151386]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R040_N01_20160311T164128","name":"imagico.de OSM images for mapping: Darwin and Wolf islands, Galapagos","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R040_N01_20160311T164128&z={zoom}&x={x}&y={-y}","description":"Recent image, only old and poor images in other sources currently (true color)","scaleExtent":[0,14],"polygon":[[[-92.05216379429558,1.321295617717369],[-92.05216379429558,1.72181118585353],[-91.74849481846549,1.72181118585353],[-91.74849481846549,1.321295617717369],[-92.05216379429558,1.321295617717369]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC80360072014245LGN00","name":"imagico.de OSM images for mapping: Eastern Devon Island coast","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80360072014245LGN00&z={zoom}&x={x}&y={-y}","description":"Coastline mostly mapped meanwhile (false color IR)","scaleExtent":[0,11],"polygon":[[[-84.34798733886554,74.38945823827667],[-84.34798733886554,75.89030323920836],[-79.14870755370929,75.89030323920836],[-79.14870755370929,74.38945823827667],[-84.34798733886554,74.38945823827667]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC82160152013239LGN00","name":"imagico.de OSM images for mapping: Eastern Iceland","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82160152013239LGN00&z={zoom}&x={x}&y={-y}","description":"Missing islets and inaccurate coast (true color)","scaleExtent":[0,12],"polygon":[[[-13.047005598725303,64.2110895294821],[-15.164963667572959,64.22408122727819],[-15.168053572358117,64.81572800422087],[-13.043572371186242,64.80359943673454],[-13.047005598725303,64.2110895294821]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-AST_L1T_00302052007154424_20150518041444_91492","name":"imagico.de OSM images for mapping: El Altar","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=AST_L1T_00302052007154424_20150518041444_91492&z={zoom}&x={x}&y={-y}","description":"2007 ASTER image offering better glacier coverage than common sources (true color with estimated blue)","scaleExtent":[0,14],"polygon":[[[-78.531997745432,-1.805085317123331],[-78.531997745432,-1.608105565001241],[-78.33561713019762,-1.608105565001241],[-78.33561713019762,-1.805085317123331],[-78.531997745432,-1.805085317123331]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R009_S61_20160109","name":"imagico.de OSM images for mapping: Elephant Island/Clarence Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R009_S61_20160109&z={zoom}&x={x}&y={-y}","description":"Fairly clear up-to-date image for updating glacier edges (true color)","scaleExtent":[0,13],"polygon":[[[-56.13476090727487,-61.63471600102006],[-56.13476090727487,-61.199363166283845],[-55.83263688383738,-60.84015069906498],[-53.72343354521433,-60.83981613078141],[-53.72343354521433,-61.63471600102006],[-56.13476090727487,-61.63471600102006]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-enderby","name":"imagico.de OSM images for mapping: Enderby Land and Kemp Coast","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=enderby&z={zoom}&x={x}&y={-y}","description":"Sentinel-2 images of Enderby Land and Kemp Coast (true color)","scaleExtent":[0,13],"polygon":[[[45.4547,-68.5091],[45.4547,-67.5724],[49.7155,-65.7176],[59.2693,-65.7176],[67.3735,-67.3449],[67.3735,-68.2581],[67.088,-68.5091],[45.4547,-68.5091]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC82100502015347LGN00","name":"imagico.de OSM images for mapping: Fogo, Cape Verde","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82100502015347LGN00&z={zoom}&x={x}&y={-y}","description":"Image from after the 2014/2015 eruption (true color)","scaleExtent":[0,14],"polygon":[[[-24.758781955967567,14.748140156641956],[-24.758781955967567,15.092493544965103],[-24.267057941685337,15.092493544965103],[-24.267057941685337,14.748140156641956],[-24.758781955967567,14.748140156641956]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-greenland","name":"imagico.de OSM images for mapping: Greenland mosaic","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=greenland&z={zoom}&x={x}&y={-y}","description":"Landsat mosaic of Greenland (true color)","scaleExtent":[0,12],"polygon":[[[-43.9774,59.7171],[-44.545,59.7302],[-44.9203,59.7672],[-45.3587,59.8218],[-45.763,59.8848],[-46.0859,59.9827],[-46.3381,60.119],[-46.577,60.2652],[-46.8114,60.4418],[-47.2635,60.5314],[-47.6937,60.5549],[-48.1457,60.6192],[-48.5771,60.7015],[-48.8689,60.8506],[-49.0578,61.0555],[-49.396,61.2957],[-49.7601,61.4934],[-50.2064,61.7324],[-50.4699,61.9539],[-50.8647,62.1596],[-51.0631,62.3869],[-51.2121,62.6001],[-51.3005,62.8389],[-51.4238,62.9979],[-51.6767,63.1944],[-51.9465,63.4079],[-52.0253,63.6377],[-52.2255,63.8378],[-52.3658,64.0705],[-52.4829,64.3792],[-52.4988,64.6788],[-52.789,64.9063],[-53.2046,65.1321],[-53.6649,65.4753],[-53.9977,65.8019],[-54.1348,66.1568],[-54.1441,66.5235],[-54.2285,66.8319],[-54.4519,67.303],[-54.5141,67.7648],[-54.604,68.2021],[-54.568,68.5698],[-54.598,68.8347],[-54.7606,69.1207],[-55.0028,69.4125],[-55.2735,69.6187],[-55.3808,69.8283],[-55.3945,70.0838],[-55.3094,70.2573],[-55.4307,70.479],[-55.5501,70.6707],[-55.7654,70.861],[-56.2489,71.2343],[-56.5018,71.5429],[-56.5867,71.9015],[-56.5189,72.2355],[-56.5085,72.5258],[-56.8923,72.8144],[-57.4027,73.1054],[-57.8066,73.4566],[-58.1461,73.7696],[-58.3554,74.0972],[-58.5125,74.3783],[-58.7336,74.6328],[-59.3551,74.8869],[-60.1412,75.102],[-61.0067,75.2763],[-61.911,75.3886],[-62.4706,75.5595],[-62.9776,75.7454],[-64.1463,75.779],[-65.4481,75.7235],[-66.7068,75.6792],[-67.8379,75.6525],[-69.0456,75.6195],[-70.055,75.5344],[-71.0898,75.4705],[-72.1119,75.4476],[-74.2311,76.4102],[-74.5601,76.5328],[-74.5601,82.6959],[-14.4462,82.6959],[-14.3994,82.5997],[-13.5339,82.4379],[-12.0312,82.3426],[-10.7796,82.3196],[-10.7796,80.1902],[-11.2123,80.069],[-11.136,79.8103],[-10.7796,79.5176],[-10.7796,79.0441],[-11.2626,78.7128],[-12.2579,78.3558],[-13.2398,78.1272],[-13.7649,77.9279],[-14.1169,77.6779],[-14.7129,77.5278],[-15.5507,77.3655],[-16.0936,77.0771],[-16.0586,76.5548],[-15.838,75.9611],[-15.6879,75.4726],[-16.253,75.058],[-17.0427,74.6425],[-18.3155,74.2702],[-19.4463,73.9378],[-19.8329,73.632],[-20.2938,73.3524],[-20.7831,73.0446],[-21.01,72.6766],[-20.8774,72.2926],[-20.7672,71.8726],[-20.7765,71.4304],[-20.9411,70.9802],[-21.219,70.6126],[-21.5326,70.3001],[-21.8039,70.0911],[-22.166,69.8947],[-22.4831,69.7539],[-22.9027,69.6585],[-23.3545,69.544],[-23.9177,69.4036],[-24.1794,69.3088],[-24.6745,69.1084],[-25.1222,68.9555],[-25.6659,68.7995],[-26.0994,68.583],[-26.6316,68.4043],[-27.7638,68.2813],[-28.4575,68.0023],[-29.353,67.8135],[-30.6456,67.4911],[-31.7673,67.0005],[-32.9783,66.2596],[-33.9313,66.0156],[-34.8956,65.7403],[-35.5914,65.5208],[-36.1483,65.372],[-36.7532,65.2559],[-37.1858,65.1349],[-37.6032,64.9727],[-38.0624,64.4901],[-38.5304,64.1244],[-39.0545,63.7213],[-39.3131,63.4405],[-39.5739,62.7506],[-39.9532,62.2739],[-40.2757,61.8547],[-40.714,61.3365],[-41.2091,60.8495],[-41.821,60.5526],[-42.4368,60.3264],[-42.8643,60.0299],[-43.1131,59.9147],[-43.3282,59.83],[-43.5459,59.7695],[-43.797,59.7284],[-43.9774,59.7171]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R047_S54_20160411T044330","name":"imagico.de OSM images for mapping: Heard Island coast","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R047_S54_20160411T044330&z={zoom}&x={x}&y={-y}","description":"Recent image of Heard island with interior mostly cloud covered but mostly well visible coast (true color)","scaleExtent":[0,13],"polygon":[[[73.06896521028185,-53.270590689700434],[73.06896521028185,-52.875489636268725],[73.67338491853381,-52.87673289134188],[74.08863378938341,-52.94950473139763],[74.08863378938341,-53.270590689700434],[73.06896521028185,-53.270590689700434]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC82280982013259LGN00","name":"imagico.de OSM images for mapping: Isla Londonderry","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82280982013259LGN00&z={zoom}&x={x}&y={-y}","description":"A lot of very coarse coastlines could be improved here, much snow cover though so no use for glacier mapping (false color IR)","scaleExtent":[0,12],"polygon":[[[-69.85679747431641,-55.55949231551995],[-72.26520659296875,-55.149427383391455],[-72.26520659296875,-54.51089432315929],[-72.08530546992188,-54.17909103768387],[-69.49115874140625,-54.17889010631196],[-69.49150206416016,-55.28378528847367],[-69.62230803339844,-55.55910398108892],[-69.85679747431641,-55.55949231551995]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R021_N44_20160807T083013","name":"imagico.de OSM images for mapping: Kerch Strait","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R021_N44_20160807T083013&z={zoom}&x={x}&y={-y}","description":"State of bridge construction in August 2016 (true color)","scaleExtent":[0,14],"polygon":[[[35.932588577270494,44.96236872935039],[35.932588577270494,45.559256426515695],[37.369909286499016,45.559256426515695],[37.369909286499016,44.96236872935039],[35.932588577270494,44.96236872935039]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-ls_polar2","name":"imagico.de OSM images for mapping: Landsat off-nadir July 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ls_polar2&z={zoom}&x={x}&y={-y}","description":"Latest images north of the regular Landsat limit (true color)","scaleExtent":[0,10],"polygon":[[[-79.05174500251786,81.91484289044183],[-79.05174500251786,83.43338556749623],[-73.60389956385866,83.80224987787145],[-26.424486898081835,83.80224987787145],[-21.492998879371186,83.50352415480617],[-16.888354121159868,83.15094632775453],[-16.888354121159868,81.91484289044183],[-79.05174500251786,81.91484289044183]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-AST_L1T_00311162013112731_20150618142416_109190","name":"imagico.de OSM images for mapping: Leskov Island ASTER","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=AST_L1T_00311162013112731_20150618142416_109190&z={zoom}&x={x}&y={-y}","description":"Missing in other image sources (true color with estimated blue)","scaleExtent":[0,13],"polygon":[[[-28.210747081406492,-56.72108048139938],[-28.210747081406492,-56.624975043089115],[-27.96956284678735,-56.624975043089115],[-27.96956284678735,-56.72108048139938],[-28.210747081406492,-56.72108048139938]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81991002015286LGN00","name":"imagico.de OSM images for mapping: Leskov Island Landsat","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81991002015286LGN00&z={zoom}&x={x}&y={-y}","description":"Missing in other image sources (true color)","scaleExtent":[0,13],"polygon":[[[-27.992928409215843,-56.73479060902333],[-28.227761172887714,-56.732624892496354],[-28.2241562839717,-56.600752537318456],[-27.969754123327167,-56.60283135691063],[-27.97318735086623,-56.73479060902333],[-27.992928409215843,-56.73479060902333]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-ls_polar","name":"imagico.de OSM images for mapping: May 2013 off-nadir Landsat","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ls_polar&z={zoom}&x={x}&y={-y}","description":"First available image north of the regular Landsat limit, mostly with seasonal snow cover so difficult to interpret (true color)","scaleExtent":[0,10],"polygon":[[[-85.76109385682587,81.39333391115835],[-89.83015512094161,82.14951616258433],[-89.83152841195212,82.24404688557661],[-84.99342418195555,82.73098798225534],[-79.95207288240479,83.13107965605444],[-74.55641250214465,83.46266728201661],[-69.35850602739671,83.70450775086888],[-28.207840897721187,83.70450775086888],[-23.06623935440381,83.46532469372944],[-17.96583654140148,83.15518123848051],[-17.96720983241198,82.72386035102944],[-22.781968115230015,81.44190408358111],[-85.76109385682587,81.39333391115835]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R092_S02_20160613T075613","name":"imagico.de OSM images for mapping: Mount Kenya 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R092_S02_20160613T075613&z={zoom}&x={x}&y={-y}","description":"Up-to-date image for glacier mapping (true color)","scaleExtent":[0,14],"polygon":[[[37.20665931701659,-0.266846645776291],[37.20665931701659,-0.011930465612033],[37.5655174255371,-0.011930465612033],[37.5655174255371,-0.266846645776291],[37.20665931701659,-0.266846645776291]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R092_S05_20160802T075556","name":"imagico.de OSM images for mapping: Mount Kilimanjaro 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R092_S05_20160802T075556&z={zoom}&x={x}&y={-y}","description":"Up-to-date image for glacier mapping (true color)","scaleExtent":[0,14],"polygon":[[[37.24768638610839,-3.229213650135676],[37.24768638610839,-2.968155849006605],[37.61581420898436,-2.968155849006605],[37.61581420898436,-3.229213650135676],[37.24768638610839,-3.229213650135676]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC80940622015159LGN00","name":"imagico.de OSM images for mapping: New Ireland","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80940622015159LGN00&z={zoom}&x={x}&y={-y}","description":"Many missing islands in OSM (mostly mapped meanwhile) (true color)","scaleExtent":[0,14],"polygon":[[[150.38853376619625,-2.800534349432724],[150.38853376619625,-2.383396178206425],[150.83348005525875,-2.383396178206425],[150.83348005525875,-2.800534349432724],[150.38853376619625,-2.800534349432724]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-northsea_s2_2016","name":"imagico.de OSM images for mapping: North Sea Coast 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=northsea_s2_2016&z={zoom}&x={x}&y={-y}","description":"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)","scaleExtent":[0,13],"polygon":[[[5.1562,52.8755],[5.1615,53.0325],[6.4155,55.7379],[9.8813,55.7459],[9.8813,53.2428],[9.6846,52.8877],[5.1562,52.8755]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-ural_s2_2016","name":"imagico.de OSM images for mapping: Northern and Polar Ural mountains August 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ural_s2_2016&z={zoom}&x={x}&y={-y}","description":"Up-to-date late summer imagery with few clouds - caution: not all visible snow is glaciers (true color)","scaleExtent":[0,13],"polygon":[[[59.198977223476454,64.8920468958533],[59.198977223476454,66.91656046303187],[60.733286610683486,68.44289182710118],[67.7329509173241,68.44327026354412],[67.7329509173241,67.748828729217],[64.21646761043934,64.9195663902952],[59.198977223476454,64.8920468958533]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-nellesmere_ast","name":"imagico.de OSM images for mapping: Northern Ellesmere Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=nellesmere_ast&z={zoom}&x={x}&y={-y}","description":"Assembled from July 2012 ASTER imagery (true color with estimated blue)","scaleExtent":[0,10],"polygon":[[[-81.62923243782096,82.45969864814401],[-83.03136255954291,82.47985512217643],[-83.03136255954291,83.05876272004272],[-72.80309111332822,83.09567468670448],[-65.65785798568925,83.03232446260982],[-65.8116665788654,82.45969864814401],[-81.62923243782096,82.45969864814401]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-nellesmere_ast_2016","name":"imagico.de OSM images for mapping: Northern Ellesmere Island July 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=nellesmere_ast_2016&z={zoom}&x={x}&y={-y}","description":"Assembled from July 2016 ASTER imagery (true color with estimated blue)","scaleExtent":[0,10],"polygon":[[[-78.89729497133754,82.17577067162792],[-82.64500613899595,82.19425721404356],[-82.64500613899595,83.08067098163464],[-66.58986093522367,83.08497116318647],[-63.78010752773773,82.98907949583335],[-63.78010752773773,82.72198178031782],[-65.0092029821365,82.17577067162792],[-78.89729497133754,82.17577067162792]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81960222015233LGN00vis","name":"imagico.de OSM images for mapping: Northern German west coast tidalflats","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81960222015233LGN00vis&z={zoom}&x={x}&y={-y}","description":"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)","scaleExtent":[0,12],"polygon":[[[7.63567991501593,53.28027339774928],[7.63567991501593,53.66770140276793],[8.49433012253546,55.502457780526],[9.207754805152648,55.48106268908912],[9.207754805152648,53.28027339774928],[7.63567991501593,53.28027339774928]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81960222015233LGN00ir","name":"imagico.de OSM images for mapping: Northern German west coast tidalflats (infrared)","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81960222015233LGN00ir&z={zoom}&x={x}&y={-y}","description":"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (false color IR)","scaleExtent":[0,12],"polygon":[[[7.63567991501593,53.28027339774928],[7.63567991501593,53.66810821588294],[8.49433012253546,55.502457780526],[9.207754805152648,55.48106268908912],[9.207754805152648,53.28027339774928],[7.63567991501593,53.28027339774928]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-ngreenland_ast","name":"imagico.de OSM images for mapping: Northern Greenland ASTER","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ngreenland_ast&z={zoom}&x={x}&y={-y}","description":"Assembled from mostly 2012 ASTER imagery, some 2005 images mainly in the northeast (true color with estimated blue)","scaleExtent":[0,10],"polygon":[[[-52.49221819430999,82.48971755550389],[-52.49221819430999,82.94294978186194],[-49.28695697579964,83.47311821807558],[-44.52850362441216,83.7321400994933],[-29.525299334683975,83.7321400994933],[-25.263977329098022,83.58271128961059],[-21.183929736898254,83.39775984253468],[-21.183929736898254,82.74312310369845],[-23.404541300879075,82.48971755550389],[-52.49221819430999,82.48971755550389]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-EO1A1350972013086110KF","name":"imagico.de OSM images for mapping: Northwest Heard Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=EO1A1350972013086110KF&z={zoom}&x={x}&y={-y}","description":"Glaciers of Northwest Heard Island (mapped meanwhile) (false color IR)","scaleExtent":[0,13],"polygon":[[[73.22790413350113,-53.20333324999222],[73.22790413350113,-53.01072925838941],[73.2594898268605,-52.94943913810479],[73.78992348164566,-52.94943913810479],[73.78992348164566,-53.06048282358537],[73.71782570332533,-53.20333324999222],[73.22790413350113,-53.20333324999222]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R111_N09_20160604T154554","name":"imagico.de OSM images for mapping: Panama Canal","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R111_N09_20160604T154554&z={zoom}&x={x}&y={-y}","description":"Images of the new locks (but partly cloudy) (true color)","scaleExtent":[0,14],"polygon":[[[-80.01653561766223,8.848981570244637],[-80.01653561766223,9.41480707574399],[-79.46859250242785,9.41480707574399],[-79.46859250242785,8.848981570244637],[-80.01653561766223,8.848981570244637]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-EO1A0120532016364110KF","name":"imagico.de OSM images for mapping: Panama Canal - Pacific side","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=EO1A0120532016364110KF&z={zoom}&x={x}&y={-y}","description":"New locks with less clouds than in the Sentinel-2 image - make sure to check image alignment (true color)","scaleExtent":[0,14],"polygon":[[[-79.62538719177245,8.770827350748924],[-79.68684196472167,8.821974500616129],[-79.6866703033447,8.93705081902936],[-79.65362548828124,9.0929436313527],[-79.268159866333,9.0929436313527],[-79.32832717895505,8.770827350748924],[-79.62538719177245,8.770827350748924]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R078_N68_20160930T081002","name":"imagico.de OSM images for mapping: Pechora Sea Coast","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R078_N68_20160930T081002&z={zoom}&x={x}&y={-y}","description":"Sentinel-2 image of the Pechora Sea coast in autumn 2016 (true color)","scaleExtent":[0,13],"polygon":[[[53.1802,67.5344],[53.1821,68.414],[54.2107,69.3367],[55.3584,70.2786],[59.004,70.2786],[60.6947,69.977],[61.9837,69.7161],[61.9823,68.9395],[59.9153,67.5344],[53.1802,67.5344]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81511242016033LGN00","name":"imagico.de OSM images for mapping: Pensacola Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81511242016033LGN00&z={zoom}&x={x}&y={-y}","description":"Outside regular Landsat coverage and therefore not in LIMA and Bing/Mapbox (true color)","scaleExtent":[0,10],"polygon":[[[-53.20921946177197,-84.12524693598144],[-60.615377881406225,-83.78609327915953],[-60.615377881406225,-82.29968785439104],[-48.72405102147429,-82.29987186164387],[-44.52178052933989,-82.43683433550413],[-44.51354078327688,-84.12524693598144],[-53.20921946177197,-84.12524693598144]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R136_N41_20150831T093006","name":"imagico.de OSM images for mapping: Prokletije Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R136_N41_20150831T093006&z={zoom}&x={x}&y={-y}","description":"Late summer imagery where usual sources are severely limited by clouds and snow (true color)","scaleExtent":[0,14],"polygon":[[[19.112325688609005,42.1531576323006],[19.08425905347717,43.08073531915633],[20.63298799634826,43.09602978090892],[20.637880345591427,42.167791043253985],[19.112325688609005,42.1531576323006]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-DMS_1142622_03746_20110415_17533956","name":"imagico.de OSM images for mapping: Qasigiannguit","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=DMS_1142622_03746_20110415_17533956&z={zoom}&x={x}&y={-y}","description":"Icebridge DMS image of the settlement - alignment might be poor","scaleExtent":[0,15],"polygon":[[[-51.238571767352376,68.79971882076842],[-51.243335370562825,68.85302612951142],[-51.151668195269856,68.85302612951142],[-51.14038145973519,68.80116208175376],[-51.238571767352376,68.79971882076842]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81510432015030LGN00","name":"imagico.de OSM images for mapping: Rann of Kutch","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81510432015030LGN00&z={zoom}&x={x}&y={-y}","description":"Land/water distinction difficult to properly map based on Bing/Mapbox images (false color IR)","scaleExtent":[0,12],"polygon":[[[67.96839858817646,22.36264542957619],[67.86231185721942,22.38391650007107],[67.86231185721942,24.886930816927297],[71.48986007499286,24.886930816927297],[71.48986007499286,22.36264542957619],[67.96839858817646,22.36264542957619]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R093_N41_20150828T092005","name":"imagico.de OSM images for mapping: Rila and Pirin Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R093_N41_20150828T092005&z={zoom}&x={x}&y={-y}","description":"Late summer imagery where usual sources are severely limited by clouds and snow (true color)","scaleExtent":[0,14],"polygon":[[[23.808114560320394,41.584878805945024],[22.992379697039144,41.6019534981177],[23.011863263323328,42.29983747360261],[23.99402383156063,42.283393175568236],[23.965613873674886,41.584878805945024],[23.808114560320394,41.584878805945024]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81730602015040LGN00","name":"imagico.de OSM images for mapping: Rwenzori Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81730602015040LGN00&z={zoom}&x={x}&y={-y}","description":"Recent image of most of the remaining Rwenzori Mountains glaciers (false color IR)","scaleExtent":[0,13],"polygon":[[[29.766296776846374,0.206886934953159],[29.766296776846374,0.509176367154027],[30.034603509024116,0.509176367154027],[30.034603509024116,0.206886934953159],[29.766296776846374,0.206886934953159]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R078_N01_20160702T082522","name":"imagico.de OSM images for mapping: Rwenzori Mountains 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R078_N01_20160702T082522&z={zoom}&x={x}&y={-y}","description":"Up-to-date image for glacier mapping (true color)","scaleExtent":[0,14],"polygon":[[[29.8051357269287,0.235862065771959],[29.8051357269287,0.467085433008179],[30.02503395080565,0.467085433008179],[30.02503395080565,0.235862065771959],[29.8051357269287,0.235862065771959]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC80611072014036LGN00","name":"imagico.de OSM images for mapping: Scott Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80611072014036LGN00&z={zoom}&x={x}&y={-y}","description":"Missing in other image sources (true color)","scaleExtent":[0,13],"polygon":[[[-180,-67.4263452007858],[-180,-67.32544337276457],[-179.8247337341308,-67.3253771978419],[-179.8247337341308,-67.4263452007858],[-180,-67.4263452007858]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC82100972015347LGN00","name":"imagico.de OSM images for mapping: Shag Rocks","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82100972015347LGN00&z={zoom}&x={x}&y={-y}","description":"Missing in other image sources (true color)","scaleExtent":[0,13],"polygon":[[[-42.12874872458635,-53.72050213468143],[-42.14625818503558,-53.45782244664258],[-41.67573435080706,-53.445862233424414],[-41.6558216310805,-53.70871763480476],[-42.12874872458635,-53.72050213468143]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81130622013270LGN00","name":"imagico.de OSM images for mapping: Southeastern Sulawesi","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81130622013270LGN00&z={zoom}&x={x}&y={-y}","description":"Missing islands and coarse coastline due to cloud cover in Bing, lakes could also use additional detail (true color)","scaleExtent":[0,13],"polygon":[[[120.84382442048364,-3.595452324350203],[120.84382442048364,-3.159848173206955],[120.98184016755395,-2.514681686347053],[122.62618449738794,-2.514681686347053],[122.62618449738794,-3.002148034113534],[122.5007000308352,-3.595452324350203],[120.84382442048364,-3.595452324350203]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC80281222016035LGN00","name":"imagico.de OSM images for mapping: Southern Transantarctic Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80281222016035LGN00&z={zoom}&x={x}&y={-y}","description":"Outside regular Landsat coverage and therefore not in LIMA and Bing/Mapbox (true color)","scaleExtent":[0,10],"polygon":[[[156.96951345925345,-84.50097988272655],[154.50857596843485,-84.46255082580927],[154.50857596843485,-82.60681485793681],[175.46774337070775,-82.58504749645738],[177.00582930246938,-83.52806548607914],[177.00582930246938,-84.19262083779002],[171.93838547371908,-84.34632646581997],[166.83798266071676,-84.44370142483508],[161.67028858819987,-84.50045345467909],[156.96951345925345,-84.50097988272655]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-s2sval","name":"imagico.de OSM images for mapping: Svalbard mosaic","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=s2sval&z={zoom}&x={x}&y={-y}","description":"Sentinel-2 mosaic of Svalbard (true color)","scaleExtent":[0,13],"polygon":[[[16.6108,76.4137],[16.4731,76.4268],[16.3788,76.4589],[14.4124,77.1324],[14.0784,77.2536],[10.9875,78.4054],[10.631,78.5605],[10.2314,78.8392],[10.3952,79.6074],[10.516,79.7731],[10.9632,79.8707],[20.2294,80.849],[20.4702,80.8493],[25.1752,80.6817],[33.4391,80.3438],[33.7809,80.3016],[34.0395,80.239],[33.977,80.1527],[25.5722,76.5917],[25.2739,76.481],[25.1416,76.4327],[24.937,76.4176],[16.6108,76.4137]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-DMS_1142636_160xx_20110507_1822xxxx","name":"imagico.de OSM images for mapping: Thule Air Base","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=DMS_1142636_160xx_20110507_1822xxxx&z={zoom}&x={x}&y={-y}","description":"Icebridge DMS image - alignment might be poor","scaleExtent":[0,15],"polygon":[[[-68.93976917529807,76.51132557714853],[-68.93976917529807,76.54990046497333],[-68.76634826923117,76.55175699880375],[-68.50992908740743,76.55175699880375],[-68.50743999744161,76.51611959755911],[-68.67897262836203,76.51193618208278],[-68.93976917529807,76.51132557714853]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-dms_thule2_2015.09.25","name":"imagico.de OSM images for mapping: Thule Airbase DMS low altitude overflight September 2015","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=dms_thule2_2015.09.25&z={zoom}&x={x}&y={-y}","description":"Icebridge DMS aerial images from Thule Airbase - alignment might be poor","scaleExtent":[0,17],"polygon":[[[-68.74291885235837,76.52635852412212],[-68.74446380475094,76.52840070669755],[-68.74806869366695,76.54938731810256],[-68.7461482320123,76.56016657973251],[-68.72275936940244,76.56022393334496],[-68.72017371991207,76.5577475347327],[-68.71853220799495,76.5292079974043],[-68.71977675297786,76.52636602351234],[-68.74291885235837,76.52635852412212]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-dms_thule_2015.10.06","name":"imagico.de OSM images for mapping: Thule Airbase DMS overflight October 2015","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=dms_thule_2015.10.06&z={zoom}&x={x}&y={-y}","description":"Icebridge DMS aerial images from Thule Airbase - alignment might be poor","scaleExtent":[0,16],"polygon":[[[-68.81923965911197,76.52510098413808],[-68.82651380996036,76.54176603738404],[-68.77344898680974,76.5439032956252],[-68.7021022270136,76.54544610909097],[-68.59176687697696,76.54560088014632],[-68.59183124999333,76.52793072237704],[-68.65970186690618,76.52510098413808],[-68.81923965911197,76.52510098413808]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-dms_thule_2015.09.25","name":"imagico.de OSM images for mapping: Thule Airbase DMS overflight September 2015","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=dms_thule_2015.09.25&z={zoom}&x={x}&y={-y}","description":"Icebridge DMS aerial images from Thule Airbase - alignment might be poor","scaleExtent":[0,16],"polygon":[[[-68.7777130980429,76.50687742381471],[-68.77661875676482,76.57064446843503],[-68.68115357350676,76.57065443536027],[-68.67630413960784,76.55384487076157],[-68.67619685124725,76.5307435998188],[-68.6852305312094,76.50688243050337],[-68.7777130980429,76.50687742381471]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R094_N79_20160812T105622","name":"imagico.de OSM images for mapping: Ushakov Island August 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R094_N79_20160812T105622&z={zoom}&x={x}&y={-y}","description":"Up-to-date late summer imagery with few clouds (true color)","scaleExtent":[0,12],"polygon":[[[78.45885691499899,80.72643412860921],[78.45885691499899,80.9098976404357],[80.48892435884663,80.9098976404357],[80.48892435884663,80.72643412860921],[78.45885691499899,80.72643412860921]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC80910682014358LGN00","name":"imagico.de OSM images for mapping: Vanatinai","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80910682014358LGN00&z={zoom}&x={x}&y={-y}","description":"Coarse coastline due to cloud cover in Bing/Mapbox (true color)","scaleExtent":[0,13],"polygon":[[[153.0613810625655,-11.789228234021259],[153.0613810625655,-11.288690822294749],[153.10927458673538,-11.072292520575749],[154.41201277643268,-11.072292520575749],[154.41201277643268,-11.789228234021259],[153.0613810625655,-11.789228234021259]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC82330892016031LGN00","name":"imagico.de OSM images for mapping: Volcán Calbuco","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82330892016031LGN00&z={zoom}&x={x}&y={-y}","description":"Image from after the 2015 eruption (true color)","scaleExtent":[0,13],"polygon":[[[-72.8669610523419,-41.51741123877955],[-72.8669610523419,-41.045274923011036],[-72.23181395761533,-41.045274923011036],[-71.87510161630674,-41.10829439141359],[-72.00007109872861,-41.51741123877955],[-72.8669610523419,-41.51741123877955]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R089_N52_20160623T024048","name":"imagico.de OSM images for mapping: Vostochny Cosmodrome","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R089_N52_20160623T024048&z={zoom}&x={x}&y={-y}","description":"Recent image showing newest features (true color)","scaleExtent":[0,13],"polygon":[[[126.36143429881301,51.375528375017275],[126.34804471141064,52.33932231282816],[128.60762341624462,52.340895519845674],[128.6117432892915,51.375528375017275],[126.36143429881301,51.375528375017275]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81490352013282LGN00","name":"imagico.de OSM images for mapping: Western Karakoram","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81490352013282LGN00&z={zoom}&x={x}&y={-y}","description":"Represents approximately minimum snow cover so can be well used for glacier mapping (true color)","scaleExtent":[0,13],"polygon":[[[75.98364343730569,34.97850982318471],[73.96164407817483,35.36957188964085],[74.44281091777444,37.09391400468158],[76.50600900737405,36.7026732100855],[75.98364343730569,34.97850982318471]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R039_S15_20160510T145731","name":"imagico.de OSM images for mapping: Willkanuta Mountains and Quelccaya Ice Cap","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R039_S15_20160510T145731&z={zoom}&x={x}&y={-y}","description":"Poor and outdated imagery in other sources (true color)","scaleExtent":[0,14],"polygon":[[[-71.18070648306262,-14.4978507264954],[-71.17976234548938,-13.710292880050797],[-70.5563740550841,-13.71262765059222],[-70.5563740550841,-14.4978507264954],[-71.18070648306262,-14.4978507264954]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"IPR-orotofoto-last-tms","name":"IPR ortofoto LAST (tmsproxy)","type":"tms","template":"http://osm-{switch:a,b,c}.zby.cz/tiles_ipr_last.php/{zoom}/{x}/{y}.jpg","scaleExtent":[1,18],"polygon":[[[14.81231552124,49.93089301941],[14.18754582291,49.87687266984],[14.12025456314,50.19881542327],[14.74502426147,50.25247461226],[14.81231552124,49.93089301941]]]},{"id":"IPR-orotofoto-vege-tms","name":"IPR ortofoto Low-Vegetation (tmsproxy)","type":"tms","template":"http://osm-{switch:a,b,c}.zby.cz/tiles_ipr_vege.php/{zoom}/{x}/{y}.jpg","scaleExtent":[1,20],"polygon":[[[14.30454236984,49.99538124382],[14.3160436821,49.94205148763],[14.3499983888,49.94508261663],[14.35383872175,49.92726356386],[14.42385321818,49.93351545169],[14.4200902288,49.95097343212],[14.48865449494,49.95709281879],[14.48479036398,49.9750111737],[14.55385989188,49.98117257481],[14.55011770159,49.99851689993],[14.58455395868,50.0015874108],[14.58829614897,49.98424419323],[14.69168128485,49.99346468175],[14.67633637226,50.06452744171],[14.71278864961,50.06777324036],[14.70115373952,50.12158114828],[14.66470146217,50.11833899243],[14.6610031918,50.13543086714],[14.62755290441,50.13245658485],[14.61965341283,50.16894659259],[14.58542741996,50.16590546732],[14.58162921725,50.18344165464],[14.40776267983,50.167995553],[14.41156088254,50.15045369625],[14.37764851321,50.14743927281],[14.37379555571,50.16523508727],[14.33892816423,50.16213672855],[14.34278112173,50.14433976066],[14.27367931007,50.13819641038],[14.27749028245,50.12058459573],[14.20879964298,50.11447476994],[14.21288816219,50.09557069695],[14.24656290855,50.09856724424],[14.25417384067,50.06335893014],[14.21987061144,50.0603042129],[14.22369648177,50.04259477081],[14.257999711,50.04565061557],[14.26952647673,49.99225864496],[14.30454236984,49.99538124382]]]},{"id":"bartholomew_qi1940","name":"Ireland Bartholomew Quarter-Inch 1940","type":"tms","template":"http://geo.nls.uk/maps/ireland/bartholomew/{zoom}/{x}/{-y}.png","scaleExtent":[5,13],"polygon":[[[-8.8312773,55.3963337],[-7.3221271,55.398605],[-7.2891331,55.4333162],[-7.2368042,55.4530757],[-7.18881,55.4497995],[-7.1528144,55.3968384],[-6.90561,55.394903],[-6.9047153,55.3842114],[-5.8485282,55.3922956],[-5.8378629,55.248676],[-5.3614762,55.2507024],[-5.3899172,53.8466464],[-5.8734141,53.8487436],[-5.8983,52.8256258],[-6.0191742,52.8256258],[-6.0262844,51.7712367],[-8.1131422,51.7712367],[-8.1273627,51.3268839],[-10.6052842,51.3091083],[-10.6271879,52.0328254],[-10.6469845,52.0322454],[-10.6469845,52.0440365],[-10.6271879,52.0448095],[-10.6290733,52.0745627],[-10.6699234,52.0743695],[-10.6702376,52.0876941],[-10.6312729,52.0898179],[-10.6393128,52.4147202],[-10.3137689,52.4185533],[-10.3166401,53.3341342],[-10.3699669,53.3330727],[-10.385965,54.3534472],[-8.8163777,54.3586265],[-8.8173427,54.6595721],[-8.8413398,54.6616284],[-8.8422286,54.6929749],[-8.8315632,54.7145436],[-8.8151208,54.7145436],[-8.8312773,55.3963337]]],"terms_url":"http://geo.nls.uk/maps/","terms_text":"National Library of Scotland Historic Maps"},{"id":"GSGS3906","name":"Ireland British War Office 1:25k GSGS 3906","type":"tms","template":"http://mapwarper.net/layers/tile/101/{zoom}/{x}/{y}.png","scaleExtent":[0,18],"polygon":[[[-10.71,51.32],[-10.71,55.46],[-5.37,55.46],[-5.37,51.32],[-10.71,51.32]]],"terms_url":"http://wiki.openstreetmap.org/wiki/WikiProject_Ireland#Trinity_College_Dublin","terms_text":"Glucksman Map Library, Trinity College Dublin"},{"id":"GSGS4136","name":"Ireland British War Office One-Inch 1941-43 GSGS 4136","type":"tms","template":"http://geo.nls.uk/maps/ireland/gsgs4136/{zoom}/{x}/{-y}.png","scaleExtent":[5,15],"polygon":[[[-10.0847426,51.4147902],[-10.0906535,51.5064103],[-10.4564222,51.5003961],[-10.5005905,52.3043019],[-10.0837522,52.312741],[-10.0840973,52.3404698],[-10.055802,52.3408915],[-10.0768509,52.7628238],[-9.7780248,52.7684611],[-9.7818205,52.8577261],[-9.6337877,52.8596012],[-9.6449626,53.1294502],[-10.0919663,53.1227152],[-10.1051422,53.3912913],[-10.4052593,53.3866349],[-10.4530828,54.193502],[-10.2998523,54.1974988],[-10.3149801,54.4669592],[-8.9276095,54.4853897],[-8.9339534,54.7546562],[-8.7773069,54.755501],[-8.7826749,55.0252208],[-8.9402974,55.0238221],[-8.9451773,55.2934155],[-7.528039,55.2970274],[-7.525599,55.3874955],[-7.0541955,55.3841691],[-7.0556595,55.2939712],[-6.3241545,55.2859128],[-6.3217146,55.3253556],[-6.1035807,55.3223016],[-6.1045566,55.2828557],[-5.7985836,55.2772968],[-5.8117595,55.0087135],[-5.656577,55.0056351],[-5.6721928,54.7355021],[-5.3618278,54.729585],[-5.3964755,54.1917889],[-5.855679,54.2017807],[-5.9220464,52.8524504],[-6.070885,52.8551025],[-6.1030927,52.1373337],[-6.8331336,52.1463183],[-6.8355736,52.0578908],[-7.5641506,52.0617913],[-7.5661026,51.7921593],[-8.147305,51.792763],[-8.146329,51.7033331],[-8.2912636,51.7027283],[-8.2897996,51.5227274],[-9.1174397,51.516958],[-9.1179277,51.4625685],[-9.3692452,51.4616564],[-9.3672933,51.4254613],[-10.0847426,51.4147902]]],"terms_url":"http://geo.nls.uk/maps/","terms_text":"National Library of Scotland Historic Maps"},{"id":"gsi.go.jp","name":"Japan GSI ortho Imagery","type":"tms","template":"http://cyberjapandata.gsi.go.jp/xyz/ort/{zoom}/{x}/{y}.jpg","scaleExtent":[12,19],"polygon":[[[141.85546875,44.64911632343077],[140.2294921875,43.96909818325174],[138.955078125,41.80407814427237],[139.482421875,40.17887331434696],[138.8671875,38.30718056188316],[136.31835937499997,37.19533058280065],[132.1435546875,35.137879119634185],[128.935546875,33.35806161277885],[129.5068359375,32.47269502206151],[129.77050781249997,31.690781806136822],[130.2099609375,30.90222470517144],[131.220703125,30.78903675126116],[131.66015625,32.32427558887655],[132.71484375,32.879587173066305],[133.76953125,33.17434155100208],[136.7578125,33.87041555094183],[139.306640625,35.06597313798418],[140.888671875,35.17380831799959],[141.15234374999997,36.56260003738548],[142.11914062499997,39.9434364619742],[141.767578125,42.68243539838623],[141.85546875,44.64911632343077]]]},{"id":"Aargau-AGIS-2011","name":"Kanton Aargau 25cm (AGIS 2011)","type":"tms","template":"http://tiles.poole.ch/AGIS/OF2011/{zoom}/{x}/{y}.png","scaleExtent":[14,19],"polygon":[[[7.7,47.12],[7.7,47.63],[8.5,47.63],[8.5,47.12],[7.7,47.12]]],"terms_text":"AGIS OF2011"},{"id":"Aargau-AGIS-2014","name":"Kanton Aargau 25cm (AGIS 2014)","type":"tms","template":"http://mapproxy.osm.ch:8080/tiles/AGIS2014/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[8,20],"polygon":[[[8.222923278808594,47.604774168947614],[8.244209289550781,47.613569753973955],[8.294334411621094,47.60986653003798],[8.300857543945312,47.58625231278527],[8.329353332519531,47.569808674020344],[8.382568359375,47.56702895728551],[8.398017883300781,47.57490443821351],[8.424797058105469,47.56795554592218],[8.415184020996094,47.54663986006874],[8.389778137207031,47.5262428287156],[8.372268676757812,47.51233121261258],[8.358535766601562,47.503286684046664],[8.36402893066406,47.48078455918],[8.371238708496094,47.481016589036074],[8.373985290527344,47.47011007802331],[8.368148803710938,47.46825342516445],[8.387031555175781,47.44852243794931],[8.380851745605469,47.447593738482304],[8.384284973144531,47.4355191531953],[8.376388549804688,47.431803338643334],[8.377761840820312,47.42808726171425],[8.389434814453125,47.42739046807988],[8.391494750976562,47.41902822496511],[8.380165100097656,47.40462347023052],[8.364715576171875,47.4016026187529],[8.367118835449219,47.39881398671558],[8.380851745605469,47.39788440990287],[8.39424133300781,47.39439835079049],[8.399734497070312,47.372314620566925],[8.40728759765625,47.37068703239024],[8.404197692871094,47.34417352612498],[8.416213989257812,47.33416935720614],[8.414497375488281,47.32602502961836],[8.452606201171875,47.33254059215931],[8.444023132324219,47.31927592106609],[8.427543640136719,47.29925625338924],[8.390121459960938,47.28854494625744],[8.41175079345703,47.247076403108416],[8.393898010253906,47.227728840642065],[8.404884338378906,47.194845099780174],[8.401451110839844,47.17757880776958],[8.409690856933594,47.17314466448546],[8.412437438964844,47.13976002139446],[8.379478454589844,47.13929295458033],[8.361968994140625,47.14559801038333],[8.342742919921875,47.177112073280966],[8.3056640625,47.24987305653909],[8.295021057128906,47.26268916206698],[8.300514221191406,47.26991141830738],[8.278884887695312,47.28225686421767],[8.259315490722656,47.285983225286174],[8.243522644042969,47.280859411143915],[8.240432739257812,47.27130916053537],[8.228759765625,47.27270686584952],[8.219146728515625,47.25336866567523],[8.204727172851562,47.245444953748034],[8.203353881835938,47.22679624955806],[8.180007934570312,47.22143353240336],[8.171768188476562,47.2279619858493],[8.155975341796875,47.23961793870555],[8.175888061523436,47.24218190428504],[8.17657470703125,47.25406775981567],[8.136062622070312,47.24730946320093],[8.12164306640625,47.24218190428504],[8.10791015625,47.2447457457832],[8.097267150878906,47.259427174956194],[8.077354431152344,47.2603591917818],[8.059844970703125,47.25569894358661],[8.062591552734375,47.24614415248379],[8.016586303710938,47.242881146090085],[8.015899658203125,47.258961160390896],[7.997016906738281,47.2796948387185],[7.951698303222655,47.274337475394645],[7.960968017578125,47.25430078914495],[7.933845520019531,47.237053849043896],[7.911529541015624,47.24381345414034],[7.859344482421875,47.23425651880584],[7.83977508544922,47.23425651880584],[7.826042175292968,47.24427960201268],[7.828102111816407,47.25966018070071],[7.82398223876953,47.26548499105541],[7.8408050537109375,47.273405704663965],[7.848701477050781,47.28551744450745],[7.860374450683594,47.30461109337307],[7.871704101562499,47.31136207506936],[7.8888702392578125,47.31136207506936],[7.897453308105469,47.31904317780638],[7.895393371582031,47.327653995607086],[7.908439636230469,47.340451266106996],[7.9259490966796875,47.332773275955894],[7.94757843017578,47.331609846720866],[7.94757843017578,47.316715688820764],[8.007316589355467,47.33905535093827],[8.004913330078125,47.34533667855891],[8.011093139648438,47.35719936945847],[8.024139404296875,47.36719917429931],[8.032722473144531,47.38393878966209],[8.026885986328125,47.39602520707679],[8.010749816894531,47.3955603961201],[8.004570007324219,47.40671472747142],[7.975730895996094,47.41507892620099],[7.9657745361328125,47.42181578692778],[7.985343933105469,47.425764580393924],[7.971954345703124,47.46105827584221],[7.957534790039062,47.457344265054225],[7.940711975097656,47.46221885041022],[7.946891784667968,47.48403288391224],[7.907066345214844,47.48588897929538],[7.8936767578125,47.50653361720931],[7.873420715332031,47.51325876844644],[7.875480651855468,47.52253342509336],[7.865180969238281,47.51975120023913],[7.856254577636718,47.533660849056794],[7.833251953125,47.5325018525392],[7.834281921386719,47.51465007145751],[7.789649963378906,47.49377665301097],[7.789649963378906,47.518128167602484],[7.7515411376953125,47.52461999690649],[7.731285095214843,47.53203824675999],[7.708969116210937,47.54015075619555],[7.740898132324219,47.54362716173679],[7.761497497558593,47.54895720250044],[7.781410217285156,47.55289644950155],[7.797546386718749,47.55915229204993],[7.805442810058593,47.56563904359584],[7.814369201660155,47.575136052077276],[7.819175720214843,47.58648387645128],[7.8325653076171875,47.586715439092906],[7.843208312988281,47.581620824334166],[7.859344482421875,47.58602074809481],[7.8847503662109375,47.58764167941513],[7.903633117675781,47.58092606572345],[7.911872863769532,47.56749225365282],[7.90740966796875,47.55776216936179],[7.917709350585938,47.545712894408624],[7.929382324218749,47.54640812019053],[7.941741943359374,47.54432241518175],[7.9520416259765625,47.54965238525127],[7.9561614990234375,47.55683540041267],[7.9767608642578125,47.55544521625339],[7.997360229492187,47.556603705614094],[8.019676208496094,47.54965238525127],[8.049888610839844,47.55637200979099],[8.058815002441406,47.56285910557121],[8.072891235351562,47.56355410390809],[8.086967468261719,47.557067094186735],[8.100700378417969,47.56216409801383],[8.105506896972656,47.57976811421671],[8.113059997558594,47.583473468887405],[8.133659362792969,47.58301031389572],[8.138809204101562,47.59042030203756],[8.15185546875,47.59551406038282],[8.166275024414062,47.5941249027327],[8.177261352539062,47.6017648134425],[8.193740844726562,47.616346999837226],[8.2012939453125,47.62120682516921],[8.219490051269531,47.61958693358351],[8.223953247070312,47.61102381568743],[8.222923278808594,47.604774168947614]]],"terms_text":"AGIS OF2014"},{"id":"Aargau-AGIS-2016","name":"Kanton Aargau 25cm (AGIS 2016)","type":"tms","template":"http://mapproxy.osm.ch:8080/tiles/AGIS2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[8,20],"polygon":[[[8.222923278808594,47.604774168947614],[8.244209289550781,47.613569753973955],[8.294334411621094,47.60986653003798],[8.300857543945312,47.58625231278527],[8.329353332519531,47.569808674020344],[8.382568359375,47.56702895728551],[8.398017883300781,47.57490443821351],[8.424797058105469,47.56795554592218],[8.415184020996094,47.54663986006874],[8.389778137207031,47.5262428287156],[8.372268676757812,47.51233121261258],[8.358535766601562,47.503286684046664],[8.36402893066406,47.48078455918],[8.371238708496094,47.481016589036074],[8.373985290527344,47.47011007802331],[8.368148803710938,47.46825342516445],[8.387031555175781,47.44852243794931],[8.380851745605469,47.447593738482304],[8.384284973144531,47.4355191531953],[8.376388549804688,47.431803338643334],[8.377761840820312,47.42808726171425],[8.389434814453125,47.42739046807988],[8.391494750976562,47.41902822496511],[8.380165100097656,47.40462347023052],[8.364715576171875,47.4016026187529],[8.367118835449219,47.39881398671558],[8.380851745605469,47.39788440990287],[8.39424133300781,47.39439835079049],[8.399734497070312,47.372314620566925],[8.40728759765625,47.37068703239024],[8.404197692871094,47.34417352612498],[8.416213989257812,47.33416935720614],[8.414497375488281,47.32602502961836],[8.452606201171875,47.33254059215931],[8.444023132324219,47.31927592106609],[8.427543640136719,47.29925625338924],[8.390121459960938,47.28854494625744],[8.41175079345703,47.247076403108416],[8.393898010253906,47.227728840642065],[8.404884338378906,47.194845099780174],[8.401451110839844,47.17757880776958],[8.409690856933594,47.17314466448546],[8.412437438964844,47.13976002139446],[8.379478454589844,47.13929295458033],[8.361968994140625,47.14559801038333],[8.342742919921875,47.177112073280966],[8.3056640625,47.24987305653909],[8.295021057128906,47.26268916206698],[8.300514221191406,47.26991141830738],[8.278884887695312,47.28225686421767],[8.259315490722656,47.285983225286174],[8.243522644042969,47.280859411143915],[8.240432739257812,47.27130916053537],[8.228759765625,47.27270686584952],[8.219146728515625,47.25336866567523],[8.204727172851562,47.245444953748034],[8.203353881835938,47.22679624955806],[8.180007934570312,47.22143353240336],[8.171768188476562,47.2279619858493],[8.155975341796875,47.23961793870555],[8.175888061523436,47.24218190428504],[8.17657470703125,47.25406775981567],[8.136062622070312,47.24730946320093],[8.12164306640625,47.24218190428504],[8.10791015625,47.2447457457832],[8.097267150878906,47.259427174956194],[8.077354431152344,47.2603591917818],[8.059844970703125,47.25569894358661],[8.062591552734375,47.24614415248379],[8.016586303710938,47.242881146090085],[8.015899658203125,47.258961160390896],[7.997016906738281,47.2796948387185],[7.951698303222655,47.274337475394645],[7.960968017578125,47.25430078914495],[7.933845520019531,47.237053849043896],[7.911529541015624,47.24381345414034],[7.859344482421875,47.23425651880584],[7.83977508544922,47.23425651880584],[7.826042175292968,47.24427960201268],[7.828102111816407,47.25966018070071],[7.82398223876953,47.26548499105541],[7.8408050537109375,47.273405704663965],[7.848701477050781,47.28551744450745],[7.860374450683594,47.30461109337307],[7.871704101562499,47.31136207506936],[7.8888702392578125,47.31136207506936],[7.897453308105469,47.31904317780638],[7.895393371582031,47.327653995607086],[7.908439636230469,47.340451266106996],[7.9259490966796875,47.332773275955894],[7.94757843017578,47.331609846720866],[7.94757843017578,47.316715688820764],[8.007316589355467,47.33905535093827],[8.004913330078125,47.34533667855891],[8.011093139648438,47.35719936945847],[8.024139404296875,47.36719917429931],[8.032722473144531,47.38393878966209],[8.026885986328125,47.39602520707679],[8.010749816894531,47.3955603961201],[8.004570007324219,47.40671472747142],[7.975730895996094,47.41507892620099],[7.9657745361328125,47.42181578692778],[7.985343933105469,47.425764580393924],[7.971954345703124,47.46105827584221],[7.957534790039062,47.457344265054225],[7.940711975097656,47.46221885041022],[7.946891784667968,47.48403288391224],[7.907066345214844,47.48588897929538],[7.8936767578125,47.50653361720931],[7.873420715332031,47.51325876844644],[7.875480651855468,47.52253342509336],[7.865180969238281,47.51975120023913],[7.856254577636718,47.533660849056794],[7.833251953125,47.5325018525392],[7.834281921386719,47.51465007145751],[7.789649963378906,47.49377665301097],[7.789649963378906,47.518128167602484],[7.7515411376953125,47.52461999690649],[7.731285095214843,47.53203824675999],[7.708969116210937,47.54015075619555],[7.740898132324219,47.54362716173679],[7.761497497558593,47.54895720250044],[7.781410217285156,47.55289644950155],[7.797546386718749,47.55915229204993],[7.805442810058593,47.56563904359584],[7.814369201660155,47.575136052077276],[7.819175720214843,47.58648387645128],[7.8325653076171875,47.586715439092906],[7.843208312988281,47.581620824334166],[7.859344482421875,47.58602074809481],[7.8847503662109375,47.58764167941513],[7.903633117675781,47.58092606572345],[7.911872863769532,47.56749225365282],[7.90740966796875,47.55776216936179],[7.917709350585938,47.545712894408624],[7.929382324218749,47.54640812019053],[7.941741943359374,47.54432241518175],[7.9520416259765625,47.54965238525127],[7.9561614990234375,47.55683540041267],[7.9767608642578125,47.55544521625339],[7.997360229492187,47.556603705614094],[8.019676208496094,47.54965238525127],[8.049888610839844,47.55637200979099],[8.058815002441406,47.56285910557121],[8.072891235351562,47.56355410390809],[8.086967468261719,47.557067094186735],[8.100700378417969,47.56216409801383],[8.105506896972656,47.57976811421671],[8.113059997558594,47.583473468887405],[8.133659362792969,47.58301031389572],[8.138809204101562,47.59042030203756],[8.15185546875,47.59551406038282],[8.166275024414062,47.5941249027327],[8.177261352539062,47.6017648134425],[8.193740844726562,47.616346999837226],[8.2012939453125,47.62120682516921],[8.219490051269531,47.61958693358351],[8.223953247070312,47.61102381568743],[8.222923278808594,47.604774168947614]]],"terms_text":"AGIS OF2016","best":true},{"id":"Basel-Landschaft-2015","name":"Kanton Basel-Landschaft 10cm (2015)","type":"tms","template":"http://mapproxy.osm.ch:8080/tiles/KTBASELLANDSCHAFT2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[18,21],"polygon":[[[7.370281219482422,47.413684985326796],[7.357578277587891,47.41507892620101],[7.357921600341797,47.41827323486739],[7.353544235229492,47.4196089792119],[7.344875335693359,47.42402250214274],[7.339725494384765,47.42971307765559],[7.332687377929687,47.430235650685475],[7.32685089111328,47.4319194618196],[7.325280543317693,47.43489176778178],[7.33050406703179,47.44175856152086],[7.338990092194756,47.44109169292469],[7.344964876980962,47.43607806019703],[7.352656881264292,47.43435807026775],[7.38119797480828,47.432081698142134],[7.375988960266113,47.414309359238985],[7.378145456314087,47.41399717320828],[7.382040023803711,47.41330745332341],[7.388391494750976,47.41397539271845],[7.413708184603623,47.410929293287566],[7.420743520414262,47.411098781635985],[7.427483310496426,47.41448047082256],[7.438105529405026,47.412739349590474],[7.448396898794484,47.41507114537187],[7.455576414208223,47.42792319548619],[7.45061852232364,47.43534476535272],[7.437842682352891,47.446323188615104],[7.425422575234655,47.443283894442736],[7.420904049355535,47.44594415975335],[7.422417620777747,47.45071647996838],[7.428795928789581,47.45387944195848],[7.430028776685507,47.459491697398036],[7.445765194338128,47.46197276972992],[7.44717015944249,47.456958090215814],[7.456512189239691,47.44925575541638],[7.492356675875099,47.458972279610066],[7.530679075390223,47.46118857622267],[7.527445320030451,47.473906165741866],[7.536326693749955,47.48383279861684],[7.536231113003725,47.49105266753894],[7.532603895549507,47.490968962664795],[7.531789123586811,47.49739885661967],[7.520038351186771,47.49678264400428],[7.512226152318425,47.49891674929323],[7.509348758631863,47.508884893812876],[7.499082452238831,47.51627805213703],[7.497870355425969,47.52124757864722],[7.502278119030558,47.514906577969604],[7.517459288006065,47.51728104695845],[7.522200236749534,47.514091442409054],[7.530955756497733,47.52904526885427],[7.519353655277215,47.53471778813415],[7.510751927105658,47.528989768842564],[7.50229842095598,47.52840455858729],[7.4980383403841,47.536152181750076],[7.505454651706732,47.54438188661593],[7.516758242758337,47.545408295649786],[7.527317399933993,47.552778846515565],[7.554658254426867,47.564368052237306],[7.5645783501094,47.55703599040843],[7.561243624111692,47.55172275211291],[7.558752685660356,47.55235329499035],[7.555882119169953,47.54433555917895],[7.564785321950861,47.54568625396918],[7.587263056821628,47.54190064304111],[7.582688476068778,47.53246814131337],[7.589482524394103,47.5279230654027],[7.590248428005343,47.51978966346127],[7.594781326929009,47.51929395578897],[7.613780785019665,47.53925099543145],[7.622303281783164,47.53977428916004],[7.622854488041502,47.550040256825795],[7.617740918118178,47.554366555487356],[7.617617220103555,47.558648485827725],[7.632727781497729,47.5614887674157],[7.639973682410965,47.55816478484801],[7.648995462809379,47.548295861439875],[7.661308760240334,47.544832242956765],[7.665860164458853,47.53745814872834],[7.674674254363578,47.5337535789565],[7.694938989531916,47.532496041115465],[7.71346844906592,47.53978344629896],[7.715956243413761,47.53582195507857],[7.723622825374551,47.536754165368905],[7.727157067196862,47.53293048764033],[7.733221863174538,47.53275465944404],[7.737974130690588,47.52732498381306],[7.749022330706917,47.5249849998809],[7.757861753102653,47.52605097450287],[7.787633628417415,47.52011695778467],[7.790143521321244,47.51864117486466],[7.788870069574476,47.50682929074843],[7.792799480290271,47.500684271209245],[7.786625359342518,47.49312139201968],[7.798890147748131,47.49565149600841],[7.798162871694108,47.49939947973339],[7.799400121334925,47.497477088945935],[7.807418124234862,47.4971384859743],[7.814709929059118,47.504801278976316],[7.831976267472122,47.51473657456054],[7.833207588232065,47.53382387257594],[7.846527268275818,47.53266095290337],[7.852330295179702,47.53523506225097],[7.862569292788096,47.52692027402488],[7.86395674074442,47.519309183202445],[7.876658649367283,47.52269034821798],[7.87567113137545,47.51319304945735],[7.893993798731052,47.50605656803392],[7.904769180395594,47.49217505264052],[7.904821911502771,47.48490926161113],[7.93328835504665,47.48140776210853],[7.947015241408695,47.48488995686335],[7.940027875634228,47.462021295570224],[7.948854362289874,47.46377967418039],[7.957614193951437,47.45880646812721],[7.957849013566705,47.451279351685564],[7.946784554043733,47.44319336966537],[7.950032053627354,47.431716361052416],[7.96183169437885,47.421834282667845],[7.956570351591289,47.41968057428149],[7.955037646053525,47.415605646331336],[7.948388855309641,47.4162657867356],[7.934927870271696,47.41176694218953],[7.936722434714782,47.408057452805856],[7.932661510641391,47.40527495151619],[7.909737672400531,47.398520997340924],[7.890221593189976,47.407141074214024],[7.883331964118422,47.40609724771633],[7.883443085719068,47.4012049891245],[7.877702761222016,47.401257097623],[7.869136696167237,47.3955142728722],[7.879434713089799,47.38799354849815],[7.878812180597903,47.38351047538804],[7.862650230995195,47.38198499163919],[7.840119046365023,47.374763282921705],[7.830547227518145,47.36512144155488],[7.80216648325237,47.36109584064414],[7.796366151294341,47.3534705803715],[7.793560892325092,47.33905227137494],[7.78528803737905,47.3378822997136],[7.768963133383802,47.33891408469915],[7.766419194330703,47.342734660857005],[7.751518928544542,47.3443274446774],[7.734153146629586,47.35776074638933],[7.727913718160677,47.36885889855421],[7.701953574259492,47.37244716296033],[7.644203220263186,47.36720838530677],[7.641761060331779,47.38046937860509],[7.635580022356337,47.38059279713257],[7.633316986492583,47.38291397270416],[7.633305398225418,47.38533959871929],[7.637251158279386,47.38606854199808],[7.63272275093214,47.41003108104519],[7.664054730400831,47.41001995588381],[7.679802017668389,47.41751395224505],[7.686578998003315,47.43366406703297],[7.682972441800632,47.43872228466388],[7.684853783500164,47.447843589969715],[7.692273418589347,47.45421309996921],[7.698831030331891,47.45585888435835],[7.699930658071183,47.46190517358485],[7.709877972706822,47.469384739707586],[7.699760966314013,47.48063247960835],[7.668326578902932,47.48634665620256],[7.666120855554305,47.49686816039971],[7.65217109717027,47.49581439933043],[7.648646287658441,47.49183004211102],[7.655389581170213,47.49020559719241],[7.650513795302598,47.48826095607083],[7.655925875394832,47.48739459757455],[7.644422678687097,47.485637798180356],[7.640965961473804,47.482734093980326],[7.607299799570857,47.48939839412024],[7.608850381582776,47.48352506892989],[7.605631268762133,47.47935909729055],[7.608148977008936,47.475213682276376],[7.604494899927722,47.47044546774548],[7.618872436050056,47.4674530520825],[7.626072253389216,47.462913883669614],[7.62217338539308,47.46195224188912],[7.616464591762502,47.445234574416695],[7.615798850305441,47.432747890966844],[7.592069133423196,47.43271179535717],[7.581206884670679,47.42878068945942],[7.578423275099778,47.434906655087865],[7.568904367023134,47.43689695884281],[7.56829539909203,47.42233486107083],[7.58074128785892,47.414703988151935],[7.525235194936931,47.41163289737562],[7.531172340312734,47.40352507464003],[7.518616677418122,47.38822295597742],[7.511295677347134,47.38974369796625],[7.502255661148456,47.384806980223004],[7.492327480628366,47.385231761698726],[7.478410241257615,47.39055778320416],[7.47746817801916,47.401277162725364],[7.464484018734026,47.40251498235377],[7.460919593518167,47.40068414452088],[7.450020783333588,47.40392739156406],[7.44951323519806,47.39975827367453],[7.443401098004909,47.40231427489849],[7.441311347159463,47.40017886074712],[7.443566657511773,47.38890284041263],[7.437324174770898,47.3808884773088],[7.411692544769116,47.38057235919037],[7.416276198506335,47.384788794341716],[7.414494030814171,47.39429988358522],[7.398935569419335,47.39683906243558],[7.395920463999715,47.40338304393273],[7.388693876865087,47.403019088497395],[7.384054886906365,47.4123601395877],[7.379679679870605,47.4128137535428],[7.375844120979309,47.41401169352981],[7.370281219482422,47.413684985326796]]],"terms_url":"http://www.geo.bl.ch/fileadmin/user_upload/Geodaten/Nutzungsbedingungen_GBD_BL_V3p1.pdf","terms_text":"Geodaten des Kantons Basel-Landschaft 2015","best":true},{"id":"KTBASELSTADT2015","name":"Kanton Basel-Stadt 2015","type":"tms","template":"http://mapproxy.osm.ch:8080/tiles/KTBASELSTADT2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[8,21],"polygon":[[[7.492,47.4817],[7.492,47.6342],[7.784,47.6342],[7.784,47.4817],[7.492,47.4817]]],"terms_text":"Kanton Basel-Stadt OF 2015"},{"id":"Solothurn-sogis2014-tms","name":"Kanton Solothurn 25cm (SOGIS 2014-2015)","type":"tms","template":"http://mapproxy.osm.ch:8080/tiles/sogis2014/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[15,19],"polygon":[[[7.3404127,47.2175697],[7.4154818,47.2402115],[7.4173645,47.2537956],[7.4658424,47.2646513],[7.4946766,47.2882287],[7.5328638,47.294534],[7.5483333,47.3163566],[7.5709479,47.3263111],[7.5604584,47.342492],[7.5388991,47.3476266],[7.5396485,47.3601134],[7.5217459,47.3651488],[7.5237238,47.3720704],[7.4634937,47.3702566],[7.4361035,47.3781317],[7.4434011,47.4023143],[7.4774682,47.4012772],[7.4792364,47.3897076],[7.5022557,47.384807],[7.5213659,47.3912021],[7.5311724,47.4035251],[7.5252352,47.4116329],[7.5807413,47.414704],[7.5682954,47.4223349],[7.5689044,47.436897],[7.5812069,47.4287807],[7.6157989,47.4327479],[7.6260723,47.4629139],[7.6044949,47.4704455],[7.6072998,47.4893984],[7.640966,47.4827341],[7.6559259,47.4873946],[7.6521711,47.4958144],[7.6661209,47.4968682],[7.6683266,47.4863467],[7.699761,47.4806325],[7.709878,47.4693848],[7.6848538,47.4478436],[7.6798021,47.417514],[7.6327228,47.4100311],[7.633317,47.382914],[7.6417611,47.3804694],[7.6442033,47.3672084],[7.7279138,47.3688589],[7.751519,47.3443275],[7.7935609,47.3390523],[7.8021665,47.3610959],[7.8788122,47.3835105],[7.8691367,47.3955143],[7.883332,47.4060973],[7.9097377,47.398521],[7.9550377,47.4156057],[7.9618317,47.4218343],[7.9467846,47.4431934],[7.9682836,47.4628082],[7.9872707,47.4287435],[7.9854653,47.4227641],[7.9827035,47.4283325],[7.9631993,47.4223547],[8.0072617,47.4065858],[8.0100022,47.395418],[8.0265612,47.3956224],[8.0313669,47.3836856],[8.0038366,47.3453146],[8.0051906,47.3367516],[7.9479701,47.3171432],[7.9478307,47.3325169],[7.9192088,47.3339507],[7.9078055,47.341719],[7.889098,47.3114878],[7.8611018,47.3061239],[7.8418057,47.2744707],[7.8166423,47.2616706],[7.8028241,47.2684079],[7.7861469,47.256098],[7.7746009,47.267869],[7.7568187,47.258095],[7.7326672,47.2591133],[7.684769,47.2939919],[7.6482742,47.2819898],[7.5801066,47.2763483],[7.5936981,47.2662199],[7.5959384,47.245569],[7.6261802,47.2263143],[7.6405558,47.2297944],[7.6484666,47.2189525],[7.6472258,47.2017823],[7.6715278,47.1949714],[7.6711002,47.1845216],[7.6779881,47.1819259],[7.6728612,47.1683945],[7.6600808,47.1684026],[7.6451021,47.1489207],[7.6155322,47.1565739],[7.5861404,47.1475453],[7.5810534,47.16013],[7.5634674,47.1683541],[7.5257686,47.162205],[7.5203336,47.1588879],[7.5297508,47.1487369],[7.5097234,47.1255457],[7.4613252,47.1082327],[7.4750945,47.0867101],[7.454461,47.074927],[7.4354156,47.0801664],[7.4340002,47.1005003],[7.3820271,47.0957398],[7.3704914,47.1209312],[7.4401788,47.1237276],[7.4217922,47.1358605],[7.447783,47.1550805],[7.4728074,47.1525609],[7.4970383,47.1700873],[7.4804964,47.171738],[7.4708545,47.181324],[7.4757226,47.1906485],[7.4497638,47.1895691],[7.4476258,47.1810839],[7.4332849,47.1847269],[7.4118135,47.1624212],[7.3842442,47.1601249],[7.3821749,47.1651186],[7.391911,47.1662739],[7.3835137,47.1803011],[7.3654609,47.1944525],[7.3544799,47.1915316],[7.3404127,47.2175697]],[[7.420816,47.4803666],[7.4349836,47.4981011],[7.4707584,47.480734],[7.487277,47.4820136],[7.5116652,47.5026958],[7.5317892,47.4973989],[7.5366964,47.4850517],[7.5274454,47.4739062],[7.5306791,47.4611886],[7.4565122,47.4492558],[7.445214,47.4623781],[7.4557367,47.4733767],[7.420816,47.4803666]],[[7.3759458,47.4140995],[7.3821514,47.4330266],[7.4209041,47.4459442],[7.4378427,47.4463232],[7.4555765,47.4279232],[7.4437574,47.413444],[7.3759458,47.4140995]],[[7.6744234,47.1539707],[7.6853662,47.1662986],[7.7007985,47.1617746],[7.6901531,47.1525567],[7.6744234,47.1539707]]],"terms_text":"Orthofoto WMS Solothurn","best":true},{"id":"KTZUERICH2015","name":"Kanton Zürich 2015  10cm","type":"tms","template":"http://mapproxy.osm.ch:8080/tiles/KTZUERICH2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[8,21],"polygon":[[[8.807601928710938,47.66608099332474],[8.808631896972656,47.65475043477393],[8.830604553222656,47.648506014952225],[8.805885314941406,47.597597727711346],[8.749580383300781,47.61565270219988],[8.751983642578125,47.59505101193038],[8.807945251464844,47.585789182379905],[8.811721801757812,47.57467282332527],[8.840904235839844,47.57467282332527],[8.854637145996094,47.56216409801383],[8.8330078125,47.55382328811835],[8.845024108886719,47.53458802782819],[8.899612426757812,47.52786561031842],[8.895835876464844,47.491224888201955],[8.902702331542969,47.48588897929538],[8.887252807617188,47.475911695481756],[8.911285400390625,47.43969913094723],[8.934288024902344,47.43807362350206],[8.935317993164062,47.43017758727173],[8.917121887207031,47.42808726171425],[8.909912109375,47.404855836246135],[8.944587707519531,47.38905261221537],[8.945274353027344,47.379521907289295],[8.963127136230469,47.357664518690434],[8.973083496093748,47.35580389715929],[8.989906311035156,47.31857768821123],[8.973426818847656,47.30367985581531],[8.9593505859375,47.300653220457775],[8.941154479980469,47.2873805430142],[8.950080871582031,47.28458587064588],[8.940467834472656,47.259194168186234],[8.876266479492188,47.24847474828181],[8.876609802246092,47.243114224640834],[8.850173950195312,47.23961793870555],[8.849830627441406,47.247076403108416],[8.825111389160156,47.24824169331652],[8.800048828125,47.24031721435106],[8.804855346679688,47.23425651880584],[8.815155029296875,47.217702626593784],[8.793525695800781,47.21886856286133],[8.71490478515625,47.20021050593422],[8.685722351074219,47.18154588528182],[8.697395324707031,47.163108130899104],[8.660659790039062,47.15633823511178],[8.6572265625,47.16684287656919],[8.618087768554688,47.172444502751944],[8.622550964355469,47.17991241867412],[8.607101440429688,47.201376826785406],[8.595085144042969,47.19834433924206],[8.575859069824219,47.21513747655813],[8.541183471679688,47.2186353776589],[8.471488952636719,47.2053421258966],[8.441619873046875,47.22120035848172],[8.417243957519531,47.22120035848172],[8.383941650390625,47.292270864380086],[8.422050476074219,47.302282968719936],[8.442306518554688,47.32439601339355],[8.413810729980469,47.32299967378833],[8.408660888671875,47.33067908487908],[8.378448486328125,47.39718721653071],[8.360939025878906,47.39695481668995],[8.359222412109375,47.4053205652024],[8.379135131835938,47.40764414848437],[8.377418518066406,47.41624051540972],[8.384284973144531,47.42274494145051],[8.372611999511719,47.42808726171425],[8.372955322265625,47.437376962080776],[8.379478454589844,47.45037978769006],[8.36402893066406,47.46198673754625],[8.352012634277344,47.5079250985124],[8.373985290527344,47.517200697839414],[8.392181396484375,47.5366741201253],[8.417587280273436,47.56610235225701],[8.430290222167967,47.5693453981427],[8.491744995117188,47.581620824334166],[8.487625122070312,47.58648387645128],[8.463935852050781,47.58301031389572],[8.453292846679688,47.60315376826432],[8.479385375976562,47.617504142079596],[8.505821228027344,47.61958693358351],[8.513717651367188,47.635783590864854],[8.542213439941406,47.632776019724375],[8.545646667480469,47.627685889602006],[8.564186096191406,47.6256034207548],[8.566932678222656,47.61935551640258],[8.576202392578125,47.613569753973955],[8.564872741699219,47.60037582174319],[8.535346984863281,47.586715439092906],[8.550109863281248,47.5714301073211],[8.555259704589844,47.55498181333744],[8.581008911132812,47.59551406038282],[8.598861694335936,47.61449551898437],[8.59130859375,47.64642437575518],[8.609848022460938,47.65521295468833],[8.620834350585938,47.646886969413],[8.618431091308594,47.65660048985082],[8.602981567382812,47.666312203609145],[8.610877990722656,47.67856488312544],[8.62323760986328,47.67856488312544],[8.621864318847656,47.69312564683551],[8.64898681640625,47.697516190510555],[8.667526245117188,47.68665469810477],[8.671646118164062,47.67602211074509],[8.692245483398438,47.65197522925437],[8.734817504882812,47.64526787368664],[8.777389526367188,47.65313158281113],[8.785629272460938,47.667930646923494],[8.807601928710938,47.66608099332474]]],"terms_text":"Kanton Zürich OF 2015","best":true},{"id":"kelowna_2012","name":"Kelowna 2012","type":"tms","template":"http://{switch:a,b,c,d}.tile.paulnorman.ca/kelowna2012/{zoom}/{x}/{y}.png","description":"High quality aerial imagery taken for the City of Kelowna","scaleExtent":[9,20],"polygon":[[[-119.5867318,49.7928087],[-119.5465655,49.7928097],[-119.5465661,49.8013837],[-119.5343374,49.8013841],[-119.5343376,49.8047321],[-119.5296211,49.8047322],[-119.5296216,49.8119555],[-119.5104463,49.811956],[-119.5115683,49.8744325],[-119.5108946,49.8744904],[-119.5114111,49.8843312],[-119.5114115,49.9221763],[-119.49386,49.9223477],[-119.4940505,49.9313031],[-119.4803936,49.9317529],[-119.4804572,49.9407474],[-119.4666732,49.9409927],[-119.4692775,49.9913717],[-119.4551337,49.9916078],[-119.4556736,50.0121242],[-119.4416673,50.0123895],[-119.4417308,50.0136345],[-119.4221492,50.0140377],[-119.4221042,50.0119306],[-119.4121303,50.012165],[-119.4126082,50.0216913],[-119.4123387,50.0216913],[-119.4124772,50.0250773],[-119.4120917,50.0250821],[-119.4121954,50.0270769],[-119.4126083,50.0270718],[-119.4128328,50.0321946],[-119.3936313,50.0326418],[-119.393529,50.0307781],[-119.3795727,50.0310116],[-119.3795377,50.0287584],[-119.3735764,50.0288621],[-119.371544,49.9793618],[-119.3573506,49.9793618],[-119.3548353,49.9256081],[-119.3268079,49.9257238],[-119.3256573,49.8804068],[-119.3138893,49.8806528],[-119.3137097,49.8771651],[-119.3132156,49.877223],[-119.3131482,49.8749652],[-119.312452,49.8749073],[-119.3122275,49.87236],[-119.3117558,49.872331],[-119.3115986,49.8696098],[-119.3112169,49.8694217],[-119.3109199,49.8632417],[-119.3103721,49.8632724],[-119.3095139,49.8512388],[-119.3106368,49.8512316],[-119.3103859,49.8462564],[-119.3245344,49.8459957],[-119.3246018,49.8450689],[-119.3367018,49.844875],[-119.3367467,49.8435136],[-119.337937,49.8434702],[-119.3378023,49.8382055],[-119.3383637,49.8381041],[-119.3383749,49.8351202],[-119.3390936,49.8351058],[-119.3388016,49.8321217],[-119.3391497,49.8320565],[-119.3391722,49.8293331],[-119.3394641,49.8293331],[-119.3395879,49.8267878],[-119.3500053,49.8265829],[-119.3493701,49.8180588],[-119.4046964,49.8163785],[-119.4045694,49.8099022],[-119.4101592,49.8099022],[-119.4102862,49.8072787],[-119.4319467,49.8069098],[-119.4322643,49.7907965],[-119.4459847,49.7905504],[-119.445286,49.7820201],[-119.4967376,49.7811587],[-119.4966105,49.7784927],[-119.5418371,49.7775082],[-119.5415892,49.7718277],[-119.5560296,49.7714941],[-119.5561194,49.7718422],[-119.5715704,49.7715086],[-119.5716153,49.7717262],[-119.5819235,49.7714941],[-119.5820133,49.7717697],[-119.5922991,49.7715231],[-119.592344,49.7718132],[-119.6003839,49.7715957],[-119.6011924,49.7839081],[-119.5864365,49.7843863],[-119.5867318,49.7928087]]]},{"id":"kelowna_roads","name":"Kelowna Roads overlay","type":"tms","template":"http://{switch:a,b,c,d}.tile.paulnorman.ca/kelowna_overlay/{zoom}/{x}/{y}.png","scaleExtent":[9,20],"polygon":[[[-119.5867318,49.7928087],[-119.5465655,49.7928097],[-119.5465661,49.8013837],[-119.5343374,49.8013841],[-119.5343376,49.8047321],[-119.5296211,49.8047322],[-119.5296216,49.8119555],[-119.5104463,49.811956],[-119.5115683,49.8744325],[-119.5108946,49.8744904],[-119.5114111,49.8843312],[-119.5114115,49.9221763],[-119.49386,49.9223477],[-119.4940505,49.9313031],[-119.4803936,49.9317529],[-119.4804572,49.9407474],[-119.4666732,49.9409927],[-119.4692775,49.9913717],[-119.4551337,49.9916078],[-119.4556736,50.0121242],[-119.4416673,50.0123895],[-119.4417308,50.0136345],[-119.4221492,50.0140377],[-119.4221042,50.0119306],[-119.4121303,50.012165],[-119.4126082,50.0216913],[-119.4123387,50.0216913],[-119.4124772,50.0250773],[-119.4120917,50.0250821],[-119.4121954,50.0270769],[-119.4126083,50.0270718],[-119.4128328,50.0321946],[-119.3936313,50.0326418],[-119.393529,50.0307781],[-119.3795727,50.0310116],[-119.3795377,50.0287584],[-119.3735764,50.0288621],[-119.371544,49.9793618],[-119.3573506,49.9793618],[-119.3548353,49.9256081],[-119.3268079,49.9257238],[-119.3256573,49.8804068],[-119.3138893,49.8806528],[-119.3137097,49.8771651],[-119.3132156,49.877223],[-119.3131482,49.8749652],[-119.312452,49.8749073],[-119.3122275,49.87236],[-119.3117558,49.872331],[-119.3115986,49.8696098],[-119.3112169,49.8694217],[-119.3109199,49.8632417],[-119.3103721,49.8632724],[-119.3095139,49.8512388],[-119.3106368,49.8512316],[-119.3103859,49.8462564],[-119.3245344,49.8459957],[-119.3246018,49.8450689],[-119.3367018,49.844875],[-119.3367467,49.8435136],[-119.337937,49.8434702],[-119.3378023,49.8382055],[-119.3383637,49.8381041],[-119.3383749,49.8351202],[-119.3390936,49.8351058],[-119.3388016,49.8321217],[-119.3391497,49.8320565],[-119.3391722,49.8293331],[-119.3394641,49.8293331],[-119.3395879,49.8267878],[-119.3500053,49.8265829],[-119.3493701,49.8180588],[-119.4046964,49.8163785],[-119.4045694,49.8099022],[-119.4101592,49.8099022],[-119.4102862,49.8072787],[-119.4319467,49.8069098],[-119.4322643,49.7907965],[-119.4459847,49.7905504],[-119.445286,49.7820201],[-119.4967376,49.7811587],[-119.4966105,49.7784927],[-119.5418371,49.7775082],[-119.5415892,49.7718277],[-119.5560296,49.7714941],[-119.5561194,49.7718422],[-119.5715704,49.7715086],[-119.5716153,49.7717262],[-119.5819235,49.7714941],[-119.5820133,49.7717697],[-119.5922991,49.7715231],[-119.592344,49.7718132],[-119.6003839,49.7715957],[-119.6011924,49.7839081],[-119.5864365,49.7843863],[-119.5867318,49.7928087]]],"overlay":true},{"id":"landsat_233055","name":"Landsat 233055","type":"tms","template":"http://{switch:a,b,c,d}.tile.paulnorman.ca/landsat_233055/{zoom}/{x}/{y}.png","description":"Recent Landsat imagery","scaleExtent":[5,14],"polygon":[[[-60.8550011,6.1765004],[-60.4762612,7.9188291],[-62.161689,8.2778675],[-62.5322549,6.5375488],[-60.8550011,6.1765004]]]},{"id":"landsat_047026","name":"Latest southwest British Columbia Landsat","type":"tms","template":"http://{switch:a,b,c,d}.tile.paulnorman.ca/landsat_047026/{zoom}/{x}/{y}.png","description":"Recent lower-resolution landsat imagery for southwest British Columbia","scaleExtent":[5,13],"polygon":[[[-121.9355512,47.7820648],[-121.5720582,48.6410125],[-121.2015461,49.4846247],[-121.8375516,49.6023246],[-122.4767046,49.7161735],[-123.118912,49.8268824],[-123.760228,49.9335836],[-124.0887706,49.0870469],[-124.4128889,48.2252567],[-123.792772,48.1197334],[-123.1727942,48.0109592],[-122.553553,47.8982299],[-121.9355512,47.7820648]]]},{"id":"ORT10LT","name":"Lithuania - NŽT ORT10LT","type":"tms","template":"http://mapproxy.openmap.lt/ort10lt/g/{zoom}/{x}/{y}.jpeg","scaleExtent":[4,18],"polygon":[[[26.2138385,55.850748],[26.3858298,55.7045315],[26.6303618,55.6806692],[26.6205349,55.5689227],[26.5242191,55.5099228],[26.5541476,55.388833],[26.4399286,55.3479351],[26.7919694,55.3212027],[26.8291304,55.2763488],[26.7434625,55.2539863],[26.6764846,55.158828],[26.4611191,55.1285624],[26.3577434,55.1505399],[26.2296342,55.1073177],[26.2713814,55.0775905],[26.2085126,54.997414],[26.0619117,54.9416094],[25.8578176,54.9276001],[25.7429827,54.8150641],[25.7626083,54.5769013],[25.5319352,54.3418175],[25.6771618,54.3238109],[25.7857293,54.2336242],[25.7858844,54.1550594],[25.5550843,54.1461918],[25.5109462,54.1750267],[25.5896725,54.2285838],[25.5136246,54.3078472],[25.2689287,54.2744706],[25.0705963,54.1336282],[24.9573726,54.1720575],[24.8133801,54.144862],[24.7790172,54.0999054],[24.8712786,54.034904],[24.819568,53.9977218],[24.6845912,53.9621091],[24.697865,54.0171421],[24.6259068,54.0105048],[24.4342619,53.9014424],[24.3520594,53.8967893],[24.2016059,53.9700069],[23.9683341,53.9266977],[23.9130177,53.9696842],[23.7781192,53.8989169],[23.7097655,53.9394502],[23.5370435,53.9430702],[23.4822428,53.9893848],[23.5273356,54.0473482],[23.4858579,54.1532339],[23.3867851,54.224838],[23.0421216,54.3159745],[23.0102115,54.3827959],[22.8546899,54.4104029],[22.7919963,54.3633227],[22.7023421,54.4528985],[22.6838586,54.585972],[22.7489713,54.6319792],[22.7429727,54.7268221],[22.8866837,54.8135001],[22.8204005,54.9119829],[22.6424041,54.9713362],[22.5892361,55.070243],[22.080597,55.0244812],[22.0324081,55.084098],[21.9130671,55.0816838],[21.6491949,55.1808113],[21.5015124,55.1868198],[21.3843708,55.2936996],[21.2709829,55.2450059],[21.0983616,55.2563884],[20.9421741,55.282453],[21.0863466,55.5618266],[21.0399547,55.8363584],[21.0640261,56.0699542],[21.2047804,56.0811668],[21.2307958,56.1623302],[21.5021038,56.2954952],[21.7235874,56.3138211],[21.8356623,56.37162],[21.9695397,56.3766515],[22.0153001,56.4242811],[22.4372717,56.406405],[22.6800028,56.3515884],[22.9191739,56.3790184],[22.9466759,56.4146477],[23.0932498,56.3046383],[23.1703443,56.3667721],[23.3064522,56.3830535],[23.5571715,56.3338187],[23.7647953,56.3733238],[23.7666897,56.3238079],[24.0189971,56.3297615],[24.1214631,56.2488984],[24.2857421,56.3006367],[24.4541496,56.2581579],[24.5794651,56.2882389],[24.6284061,56.3753322],[24.9023767,56.4805317],[25.1277405,56.2059091],[25.5771398,56.182414],[25.6731232,56.1493667],[26.2138385,55.850748]]],"terms_url":"http://www.geoportal.lt","terms_text":"NŽT ORT10LT","best":true},{"id":"mapbox_locator_overlay","name":"Locator Overlay","type":"tms","template":"http://{switch:a,b,c}.tiles.mapbox.com/v4/openstreetmap.map-inh76ba2/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJncjlmd0t3In0.DmZsIeOW-3x-C5eX-wAqTw","description":"Shows major features to help orient you.","scaleExtent":[0,16],"overzoom":false,"terms_url":"http://www.mapbox.com/about/maps/","terms_text":"Terms & Feedback","default":true,"overlay":true},{"id":"londrina2011","name":"Londrina Ortofoto 2011","type":"tms","template":"https://siglon.londrina.pr.gov.br/arcgis/rest/services/Imagens/Ortofotos_2011_Paranacidade/MapServer/WMTS/tile/1.0.0/Imagens_Ortofotos_2011_Paranacidade/default/GoogleMapsCompatible/{zoom}/{y}/{x}","polygon":[[[-51.10903142008701,-23.392750890870328],[-51.110147219037096,-23.39111628244602],[-51.111981850003126,-23.389599820448623],[-51.11358044657587,-23.38976722295012],[-51.120999436701226,-23.38592675938185],[-51.12224934611127,-23.385109415587607],[-51.12483499560139,-23.383504255873166],[-51.12538216624037,-23.38186953335707],[-51.12482426676533,-23.37770385409619],[-51.12445948633935,-23.375054689723584],[-51.124373655650885,-23.372297138974446],[-51.12244246516032,-23.37032742475139],[-51.12302182230749,-23.366427304263887],[-51.128557901713755,-23.36548180323493],[-51.12832186732048,-23.358843408308623],[-51.12477062258506,-23.35475580404945],[-51.12703440699343,-23.35091432623551],[-51.12411616358548,-23.34679692655685],[-51.12025378260435,-23.347811512977742],[-51.1176466754421,-23.33969460448754],[-51.11264703783877,-23.341290443649072],[-51.109396200513004,-23.33488726938344],[-51.10756156954697,-23.334089313725826],[-51.10485790286019,-23.333980949007543],[-51.10252974543546,-23.334187827029368],[-51.09986899409291,-23.331015661953632],[-51.09801290545476,-23.329360589233605],[-51.09998701128955,-23.32830645478855],[-51.10322711977927,-23.325321337105603],[-51.10472915682748,-23.323193291476684],[-51.104664783811145,-23.321291814470847],[-51.10514758143378,-23.318444474199904],[-51.1063599399084,-23.3157547161216],[-51.10660670313775,-23.31467091543279],[-51.11050127062705,-23.311665785493048],[-51.111584883068964,-23.30842411016493],[-51.099504213666904,-23.309468549142686],[-51.09740136179941,-23.308631027972474],[-51.09511611971892,-23.307448636164267],[-51.09201548609798,-23.3049360186679],[-51.09036324534495,-23.3037141796735],[-51.09204767260616,-23.29874787986134],[-51.09269140276969,-23.297496421894902],[-51.09407542262125,-23.292953629109174],[-51.10073802981369,-23.293318240761657],[-51.10101697955121,-23.28870632248831],[-51.10068438563339,-23.28837126237015],[-51.10084531817427,-23.28777997775132],[-51.09937546763423,-23.28663682004102],[-51.09631774935752,-23.277914991984613],[-51.10285161051725,-23.273016720553397],[-51.10835550341534,-23.27033590016574],[-51.11309764895328,-23.268404099092194],[-51.13160489115448,-23.265338785827712],[-51.13188384089201,-23.262007272160396],[-51.1317336371872,-23.255058136908826],[-51.13290308031759,-23.254683563301587],[-51.132956724497895,-23.250750476893938],[-51.13473771128364,-23.2512729236245],[-51.13533852610292,-23.25133206840842],[-51.13516686472599,-23.24359373640034],[-51.13534925493897,-23.24117849627157],[-51.137516479822814,-23.24219388826517],[-51.13884685549409,-23.243495156026544],[-51.14108918223035,-23.24521044413634],[-51.1471724322756,-23.243179698340864],[-51.14761231455401,-23.23828015040167],[-51.149082165094036,-23.235884531292832],[-51.14976881060179,-23.236811236789336],[-51.15138886484666,-23.23853646924079],[-51.15289090189487,-23.238842079520833],[-51.15383503946804,-23.238950521710013],[-51.15820167574391,-23.238142132361276],[-51.16045473131624,-23.238161849232945],[-51.160347442955654,-23.24658068718069],[-51.15912435564498,-23.2478326235554],[-51.16131303820094,-23.247773477219496],[-51.166591625541805,-23.245939927797],[-51.17193458589902,-23.245821633420345],[-51.17205260309565,-23.249557713480034],[-51.174241285651625,-23.248404370116877],[-51.17514250788055,-23.2493211310392],[-51.176859121649926,-23.248157927934038],[-51.179466228812196,-23.251686936561047],[-51.18135450395853,-23.253806268366073],[-51.18273852381009,-23.253628837227893],[-51.18378994974384,-23.253264116924615],[-51.18495939287424,-23.253303546194683],[-51.18626831087339,-23.252150235227905],[-51.18665454897149,-23.247477745146526],[-51.191182117788244,-23.249143693933142],[-51.19141815218154,-23.252859966234126],[-51.19369266542598,-23.252781107419985],[-51.1938428691308,-23.26073575534214],[-51.20096681627374,-23.26054847664639],[-51.20126722368338,-23.24259807127726],[-51.209936123218775,-23.242775517090898],[-51.21090171846407,-23.26988252079656],[-51.21968863519614,-23.27221839365197],[-51.225965004290465,-23.2745345140599],[-51.22934458764894,-23.27860487489667],[-51.234515886629225,-23.28160089636689],[-51.23497722657975,-23.283246708422755],[-51.235073786104266,-23.285444377831148],[-51.23371122392482,-23.285897704227196],[-51.232155542696304,-23.28801649191402],[-51.22870085748543,-23.292293383844925],[-51.227402668322334,-23.294599300809004],[-51.22679112466699,-23.295476327114592],[-51.225600223864475,-23.29657013833941],[-51.22392652543933,-23.297210654251764],[-51.220482569064515,-23.30072850975029],[-51.21863720926242,-23.301300029310937],[-51.21668456109974,-23.30211788923888],[-51.21423838647836,-23.30441378240661],[-51.210966091480465,-23.306965823153238],[-51.22328279527583,-23.318296686707587],[-51.224387865389886,-23.31459209321986],[-51.22521398576639,-23.312887551432937],[-51.22511742624187,-23.312582111000477],[-51.22521398576639,-23.312513140483127],[-51.2255251220121,-23.312532846348883],[-51.22595427545445,-23.312385052284572],[-51.22616885217561,-23.31183328632629],[-51.22935531648505,-23.314887676277397],[-51.22802494081377,-23.31661189768144],[-51.227885465945,-23.31901591762422],[-51.22767088922384,-23.320227763653186],[-51.22723100694544,-23.321508564518947],[-51.2273919394863,-23.322227778055023],[-51.22725246461755,-23.322848466059934],[-51.230331640566384,-23.325577488448165],[-51.23046038659909,-23.326710459617892],[-51.229537706698046,-23.32789268010374],[-51.229162197436,-23.330503379743732],[-51.229290943468705,-23.33178408156439],[-51.22681258233914,-23.334473515196468],[-51.2260186484708,-23.336571826694826],[-51.22473118814376,-23.33839427691611],[-51.22210262330938,-23.340226553005806],[-51.22257469209598,-23.34196029634743],[-51.22380850824271,-23.343388647432523],[-51.22384069475089,-23.345309509145306],[-51.22440932306201,-23.347003784611864],[-51.2245380690947,-23.348294177581966],[-51.22404454263601,-23.34968305981433],[-51.22350810083308,-23.35010661675208],[-51.22381923707877,-23.35076657486812],[-51.22304676088255,-23.35174173085325],[-51.22259614976809,-23.35296312824164],[-51.22586844476598,-23.35480505304304],[-51.22650144609346,-23.36705763453823],[-51.22354028734128,-23.369145582171885],[-51.22366903337377,-23.37968330666716],[-51.220375280703756,-23.381633186264455],[-51.216469984378406,-23.38170212087667],[-51.21416328462579,-23.379949201028825],[-51.2092816642191,-23.37395167630701],[-51.20738266023672,-23.368141007697016],[-51.20628831895872,-23.36723491438801],[-51.20472190889416,-23.366269721227162],[-51.198230963078665,-23.366683376299132],[-51.19297383340994,-23.366506095711998],[-51.18986247095292,-23.3654424072124],[-51.18806002649507,-23.36464463523902],[-51.18718026193825,-23.3645264463904],[-51.18579624208668,-23.363738518041337],[-51.183038931219606,-23.36359078095478],[-51.18071077379488,-23.3637582163071],[-51.179069261877906,-23.361581540240305],[-51.177642326682125,-23.35836078207346],[-51.16683838877106,-23.356262814974126],[-51.166141014427254,-23.358538073547532],[-51.16475699457568,-23.360389770338585],[-51.16076586756186,-23.359217688669915],[-51.15983245882475,-23.36660458495632],[-51.162042599052846,-23.36861374957437],[-51.16276143106877,-23.374158492021696],[-51.158448438973174,-23.37580315788644],[-51.155047397942575,-23.376305417047273],[-51.15396378550066,-23.37903334042617],[-51.15298746141932,-23.381052164536694],[-51.15118501696147,-23.382076336717283],[-51.149167995782435,-23.382509637949354],[-51.14721534761976,-23.382155118864866],[-51.14517686876862,-23.382588419839323],[-51.14410398516276,-23.38376029492248],[-51.14512322458833,-23.388083341091015],[-51.141797285410156,-23.389402876058366],[-51.14030597719799,-23.38880219385971],[-51.14068148646006,-23.391608636504017],[-51.14127157244328,-23.393538646762796],[-51.14093897852546,-23.394434713394368],[-51.140456180902824,-23.39536031431835],[-51.13939402613302,-23.395104297688697],[-51.13738773379004,-23.393154616350518],[-51.13608954462695,-23.389796764546077],[-51.13428710016909,-23.389757375749994],[-51.132162790629465,-23.390072485790583],[-51.13172290835106,-23.39285920758337],[-51.12259266886514,-23.38864463742227],[-51.12228153261944,-23.391657871809155],[-51.11882684740854,-23.393174310244916],[-51.115683298443365,-23.393351555162592],[-51.10903142008701,-23.392750890870328]],[[-51.13829432042955,-23.41600741009485],[-51.133310776080314,-23.418665600378624],[-51.132087688769644,-23.416440600302334],[-51.13002238782791,-23.418291487939495],[-51.12868664773901,-23.419010176689888],[-51.12824140104259,-23.42102839134528],[-51.12696466955051,-23.421860280620358],[-51.12532852205271,-23.422692164660027],[-51.1244541219139,-23.420969322085504],[-51.1215144208339,-23.424109801147612],[-51.12063465627703,-23.423268081315832],[-51.11970661195797,-23.423120410617486],[-51.11977098497433,-23.42156985833077],[-51.1188000253111,-23.421545246243184],[-51.11643431696008,-23.420836416154565],[-51.11942766222045,-23.419167696990424],[-51.11787198099193,-23.416775337218567],[-51.116546969738685,-23.41730697646229],[-51.115699391690086,-23.415702207051474],[-51.115120034542905,-23.413088261827834],[-51.119078975048524,-23.411114231305813],[-51.119599323597356,-23.41169512115064],[-51.12052200349841,-23.41489489238112],[-51.12147686990764,-23.417139608782644],[-51.12308619531643,-23.418626220171642],[-51.12754939111684,-23.41653905242448],[-51.12803218873949,-23.417395582795194],[-51.13119719537679,-23.415574218468866],[-51.13080022844262,-23.414766903017576],[-51.13278506311348,-23.41264029239725],[-51.13521514448077,-23.411055157619415],[-51.13585887464424,-23.410956701416854],[-51.13682446988958,-23.411188073376714],[-51.137205343569626,-23.411576974270133],[-51.13730190309418,-23.41324086645236],[-51.137430649126884,-23.414707830961888],[-51.13829432042955,-23.41600741009485]],[[-51.18929065852,-23.61469318354],[-51.18868716149,-23.61385268133],[-51.18817754178,-23.61338573333],[-51.18731118826,-23.61301708899],[-51.18628926663,-23.61314488581],[-51.18401743559,-23.61395590119],[-51.18348904042,-23.61396573165],[-51.18183143525,-23.61283522407],[-51.18140496401,-23.61344471632],[-51.18062980561,-23.61313505529],[-51.18001021533,-23.61409352754],[-51.17865838198,-23.61328742827],[-51.18064589886,-23.61060367181],[-51.17972321896,-23.61018095058],[-51.18061639456,-23.60849005203],[-51.1821157494,-23.60850479833],[-51.18260927586,-23.60775273479],[-51.18319936184,-23.60804274673],[-51.18415154605,-23.60627808786],[-51.18511177687,-23.60666149766],[-51.18649043231,-23.60469528171],[-51.18902243762,-23.60610112912],[-51.18821241049,-23.60741848294],[-51.18918873458,-23.60801816947],[-51.188899056,-23.60953211999],[-51.18962325244,-23.60992535103],[-51.1911896625,-23.6111935131],[-51.1901489654,-23.61244691705],[-51.19054056792,-23.6127565797],[-51.19029380469,-23.61377895281],[-51.18929065852,-23.61469318354]],[[-51.08005769639,-23.52984412096],[-51.07962317853,-23.52205317842],[-51.08468182473,-23.52194496764],[-51.08581908135,-23.52404030606],[-51.0858941832,-23.52703569673],[-51.08579494147,-23.52777346722],[-51.08530141501,-23.52806365581],[-51.08513511805,-23.52856533627],[-51.08512438922,-23.52981952906],[-51.08470864682,-23.53023759067],[-51.08343459754,-23.53023759067],[-51.08329512267,-23.52978018202],[-51.08005769639,-23.52984412096]]],"terms_url":"http://siglon.londrina.pr.gov.br/","terms_text":"Prefeitura do Londrinas, PR"},{"id":"NSW_LPI_BaseMap","name":"LPI NSW Base Map","type":"tms","template":"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Base_Map/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,19],"polygon":[[[140.9948644,-28.952966],[148.9611382,-28.8997729],[148.9870097,-28.4862285],[151.013609,-28.4786485],[151.1084711,-28.7032909],[151.8759917,-28.683118],[151.9334839,-28.4078753],[152.25544,-28.2332683],[153.0660798,-28.2104723],[153.1408196,-28.1090981],[153.4735137,-28.1164808],[153.3576523,-27.693606],[159.4938303,-27.699252],[159.4856997,-37.8474137],[149.5256879,-37.8281502],[149.9159578,-37.4869999],[148.0485886,-36.8131741],[147.9680996,-36.1567945],[146.7147701,-36.2866613],[145.3004625,-36.1567945],[144.5300673,-36.1475101],[142.8397973,-35.0254303],[142.356863,-34.7802471],[141.9774146,-34.4016159],[140.9950258,-34.1371824],[140.9948644,-28.952966]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2016"},{"id":"NSW_LPI_Imagery","name":"LPI NSW Imagery","type":"tms","template":"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Imagery/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,21],"polygon":[[[140.9868688,-28.9887829],[148.9951472,-28.9727491],[148.9966717,-28.4915066],[151.0029027,-28.4930697],[151.0029027,-28.7261663],[151.4915093,-28.7323921],[151.4918687,-28.7155337],[151.9228213,-28.719635],[151.9251607,-28.4897139],[151.9955886,-28.4898718],[151.9989947,-28.1192742],[152.4967606,-28.122091],[152.4968241,-28.1146398],[153.0044563,-28.1154389],[153.0044563,-28.120397],[153.5038629,-28.119345],[153.5039264,-28.1227063],[153.5919395,-28.1223619],[153.5926582,-28.1776872],[153.6111186,-28.1757867],[153.6113881,-28.1825173],[153.7426846,-28.2162084],[153.7787253,-28.710911],[152.6237954,-32.5877239],[152.3123961,-32.6328837],[151.4141942,-33.5790388],[150.8929925,-35.2648721],[150.4620695,-35.7777256],[150.0156501,-37.5103569],[149.9918121,-37.5126787],[149.519778,-37.5130704],[149.5199577,-37.5216919],[149.4462958,-37.5353701],[149.063344,-37.5357975],[148.9836635,-37.5217631],[148.9816872,-37.5191982],[148.9863847,-37.2584972],[148.4875376,-37.265846],[148.4824774,-37.0092669],[147.994386,-37.014339],[147.988288,-36.5332184],[147.9529707,-36.5260725],[147.9486513,-36.0685992],[147.5034997,-36.0716798],[147.5047701,-36.2651047],[146.4919996,-36.266129],[146.4922536,-36.2565],[145.9929826,-36.2534267],[145.9965866,-36.0188147],[145.9831568,-36.0187058],[145.9624506,-36.0219026],[145.946236,-36.0120936],[145.9454275,-36.0060259],[145.5041534,-36.0013564],[145.5037941,-36.0109125],[145.0072008,-36.0036213],[145.0035404,-36.1520424],[144.4860806,-36.1423149],[144.4874127,-36.0137522],[143.9874676,-36.0024134],[143.9932853,-35.5723753],[143.4971691,-35.5837101],[143.4917967,-35.4065648],[143.4613438,-35.3674934],[143.4585591,-35.3555888],[143.4897755,-35.3396522],[143.4895509,-35.332214],[143.4316994,-35.2570613],[143.2505542,-35.2606556],[143.2438356,-35.0132729],[142.9933305,-35.0177207],[142.9919767,-34.7961882],[142.4971375,-34.8032323],[142.4973172,-34.8007613],[142.4211401,-34.8017571],[142.4209155,-34.7838306],[142.2330892,-34.7859191],[142.2307707,-34.7807542],[142.2269959,-34.5061271],[141.9975302,-34.5083733],[141.9945959,-34.2526687],[141.4982345,-34.2556921],[141.498171,-34.2522794],[140.9945397,-34.2528411],[140.9868688,-28.9887829]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2016","best":true},{"id":"NSW_LPI_TopographicMap","name":"LPI NSW Topographic Map","type":"tms","template":"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Topo_Map/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,16],"polygon":[[[140.9988422,-28.9992444],[148.9502438,-28.9993736],[148.9498845,-28.9665265],[148.9998308,-28.9665265],[149.0000917,-28.8165829],[149.1000729,-28.8165829],[149.0997046,-28.7488533],[148.9998504,-28.7497444],[148.9998169,-28.5000304],[151.0000514,-28.5005192],[151.0005904,-28.7325849],[151.0239466,-28.7327424],[151.0241262,-28.7418794],[151.0329297,-28.7418794],[151.033828,-28.7505431],[151.999984,-28.7495314],[151.999984,-28.7164478],[152.0334014,-28.7166053],[152.0332217,-28.683196],[152.0000739,-28.6833537],[151.9998769,-28.6416273],[151.9829886,-28.6413908],[151.9831683,-28.624912],[151.9331321,-28.6247543],[151.9334122,-28.500071],[151.9998875,-28.5002289],[151.9998556,-28.3749591],[152.2499739,-28.3750718],[152.2499356,-28.2500066],[152.9997192,-28.2498563],[152.9998989,-28.2832447],[153.1165002,-28.2834029],[153.11659,-28.2498563],[153.1666262,-28.2500146],[153.166716,-28.2331582],[153.2499898,-28.2332373],[153.2500265,-28.1249689],[153.6249628,-28.1250833],[153.6248398,-28.4999134],[153.7497955,-28.4999924],[153.7495877,-28.7497976],[153.6248117,-28.7501127],[153.6249745,-28.9999333],[153.4997672,-29.0000612],[153.4998417,-29.4995077],[153.3747962,-29.500055],[153.3754111,-29.8750302],[153.4999113,-29.8751403],[153.4999113,-30.0000922],[153.2498947,-29.9997621],[153.250025,-30.1917704],[153.2748185,-30.1916151],[153.2748185,-30.2168467],[153.2166077,-30.2166139],[153.2166077,-30.250065],[153.250025,-30.250065],[153.2497502,-30.3751935],[153.1243608,-30.3749743],[153.1246457,-30.6250359],[153.0331676,-30.6250482],[153.0333884,-30.8750837],[153.1249214,-30.8750291],[153.1249344,-31.1250505],[153.0082433,-31.1249736],[153.0082914,-31.2499759],[153.0000019,-31.250003],[152.9999392,-31.6249919],[152.8749386,-31.6250491],[152.8749572,-31.749954],[152.7832899,-31.7500034],[152.7831966,-31.8748579],[152.749914,-31.8750105],[152.7500397,-32.0000207],[152.6249044,-31.9999446],[152.6249078,-32.5000047],[152.4999757,-32.4999569],[152.5000336,-32.5666443],[152.4166699,-32.5663415],[152.4167598,-32.6249954],[152.3498477,-32.624991],[152.3498477,-32.6332294],[152.2830786,-32.6332218],[152.2832583,-32.6249755],[152.2494816,-32.6249755],[152.2498101,-32.874906],[151.8745693,-32.8750443],[151.8748535,-33.0000091],[151.7497706,-33.0001533],[151.7504669,-33.2500398],[151.6252418,-33.2497393],[151.6250828,-33.3751621],[151.499585,-33.3751442],[151.5003127,-33.6249385],[151.3741466,-33.6243658],[151.3727902,-34.001962],[151.2477819,-34.0011194],[151.2477819,-34.2493114],[150.9957327,-34.2501515],[151.0008143,-34.62483],[150.8717407,-34.6265026],[150.872757,-35.1242738],[150.7670589,-35.1234425],[150.7690916,-35.2463774],[150.6257894,-35.2496974],[150.6280314,-35.3751485],[150.4999742,-35.3751485],[150.4959088,-35.6275034],[150.3719169,-35.6250251],[150.3749658,-35.7537957],[150.2672351,-35.7513213],[150.2652024,-35.8741232],[150.2479249,-35.870829],[150.2458922,-36.374885],[150.1229166,-36.374885],[150.1259656,-36.6224345],[150.0253491,-36.6240658],[150.0283981,-36.7471337],[149.9928266,-36.7495768],[150.0040062,-37.1224477],[150.0588879,-37.1273097],[150.0568553,-37.37809],[149.9979083,-37.3732441],[149.9999409,-37.4830073],[149.987745,-37.4846202],[149.9857123,-37.5080043],[148.0684571,-36.80624],[147.9930603,-36.1379955],[147.8148345,-36.0055567],[147.3893924,-36.0113701],[147.3822059,-36.1310306],[146.9972549,-36.1275479],[146.9886311,-36.2528271],[146.4956356,-36.2447132],[146.5042595,-36.126387],[145.0011817,-36.0079505],[145.0154103,-36.2542074],[144.5072465,-36.2476506],[144.4991158,-36.0211037],[143.9965422,-35.9810531],[143.3382568,-35.2331794],[142.4097581,-34.7669434],[142.0361436,-34.3758837],[140.9965216,-34.1385805],[140.9988422,-28.9992444]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2016"},{"id":"Mapbox","name":"Mapbox Satellite","type":"tms","template":"http://{switch:a,b,c}.tiles.mapbox.com/v4/openstreetmap.map-inh7ifmo/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJncjlmd0t3In0.DmZsIeOW-3x-C5eX-wAqTw","description":"Satellite and aerial imagery.","scaleExtent":[0,19],"terms_url":"http://www.mapbox.com/about/maps/","terms_text":"Terms & Feedback","default":true},{"id":"geodata.md.gov-MD_SixInchImagery","name":"MD Latest 6 Inch Aerial Imagery","type":"tms","template":"http://whoots.mapwarper.net/tms/{zoom}/{x}/{y}/MD_SixInchImagery/http://geodata.md.gov/imap/services/Imagery/MD_SixInchImagery/MapServer/WmsServer","description":"Six Inch resolution aerial imagery for the State of Maryland","scaleExtent":[0,20],"polygon":[[[-76.234131,37.920368],[-76.598053,38.158317],[-76.940002,38.270532],[-77.038193,38.413786],[-77.23526,38.33627],[-77.312164,38.410558],[-77.262726,38.566422],[-77.042999,38.713376],[-77.049866,38.793697],[-76.92627,38.892503],[-77.040939,38.984499],[-77.12162,38.925229],[-77.150116,38.955137],[-77.252426,38.975425],[-77.259293,39.024252],[-77.34581,39.054918],[-77.461853,39.070379],[-77.537384,39.139647],[-77.474213,39.224807],[-77.572746,39.304284],[-77.723465,39.328986],[-77.777023,39.463234],[-77.861481,39.516225],[-77.840881,39.608862],[-77.956238,39.59299],[-78.166351,39.695564],[-78.270035,39.621557],[-78.338699,39.640066],[-78.466415,39.523641],[-78.662796,39.540058],[-78.798752,39.606217],[-78.9814,39.446799],[-79.06723,39.476486],[-79.485054,39.199536],[-79.485569,39.72158],[-75.788359,39.721811],[-75.690994,38.460579],[-75.049238,38.458159],[-75.049839,38.402218],[-75.081511,38.323208],[-75.097733,38.309066],[-75.186996,38.097551],[-75.23798,38.022402],[-75.61821,37.989669],[-75.863686,37.909534],[-76.234131,37.920368]]],"terms_url":"http://imap.maryland.gov/Pages/imagery-products.aspx","terms_text":"DoIT, MD iMap, MDP"},{"id":"geodata.md.gov-MD_ColorBasemap","name":"MD Transportation Basemap","type":"tms","template":"http://whoots.mapwarper.net/tms/{zoom}/{x}/{y}/MD_ColorBasemap/http://geodata.md.gov/imap/services/Transportation/MD_ColorBasemap/MapServer/WmsServer","description":"Maryland State Highway Administration road features and additional Maryland focused landmarks","polygon":[[[-76.234131,37.920368],[-76.598053,38.158317],[-76.940002,38.270532],[-77.038193,38.413786],[-77.23526,38.33627],[-77.312164,38.410558],[-77.262726,38.566422],[-77.042999,38.713376],[-77.049866,38.793697],[-76.92627,38.892503],[-77.040939,38.984499],[-77.12162,38.925229],[-77.150116,38.955137],[-77.252426,38.975425],[-77.259293,39.024252],[-77.34581,39.054918],[-77.461853,39.070379],[-77.537384,39.139647],[-77.474213,39.224807],[-77.572746,39.304284],[-77.723465,39.328986],[-77.777023,39.463234],[-77.861481,39.516225],[-77.840881,39.608862],[-77.956238,39.59299],[-78.166351,39.695564],[-78.270035,39.621557],[-78.338699,39.640066],[-78.466415,39.523641],[-78.662796,39.540058],[-78.798752,39.606217],[-78.9814,39.446799],[-79.06723,39.476486],[-79.485054,39.199536],[-79.485569,39.72158],[-75.788359,39.721811],[-75.690994,38.460579],[-75.049238,38.458159],[-75.049839,38.402218],[-75.081511,38.323208],[-75.097733,38.309066],[-75.186996,38.097551],[-75.23798,38.022402],[-75.61821,37.989669],[-75.863686,37.909534],[-76.234131,37.920368]]],"terms_url":"http://imap.maryland.gov/Pages/imagery-products.aspx","terms_text":"DoIT, MD iMap, MDP"},{"id":"New_and_Misaligned_TIGER_Roads-2013","name":"New & Misaligned TIGER Roads","type":"tms","template":"http://{switch:a,b,c}.tiles.mapbox.com/v4/enf.e0b8291e/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJhNVlHd29ZIn0.ti6wATGDWOmCnCYen-Ip7Q","description":"At zoom level 16+, public domain map data from the US Census. At lower zooms, only changes since 2006 minus changes already incorporated into OpenStreetMap","scaleExtent":[0,22],"polygon":[[[-124.7617886,48.4130148],[-124.6059492,45.90245],[-124.9934269,40.0557614],[-122.5369737,36.8566086],[-119.9775867,33.0064099],[-117.675935,32.4630223],[-114.8612307,32.4799891],[-111.0089311,31.336015],[-108.1992687,31.3260016],[-108.1871123,31.7755116],[-106.5307225,31.7820947],[-106.4842052,31.7464455],[-106.429317,31.7520583],[-106.2868855,31.5613291],[-106.205248,31.446704],[-105.0205259,30.5360988],[-104.5881916,29.6997856],[-103.2518856,28.8908685],[-102.7173632,29.3920567],[-102.1513983,29.7475702],[-101.2552871,29.4810523],[-100.0062436,28.0082173],[-99.2351068,26.4475962],[-98.0109067,25.9928035],[-97.435024,25.8266009],[-96.9555259,25.9821589],[-96.8061741,27.7978168],[-95.5563349,28.5876066],[-93.7405308,29.4742093],[-90.9028456,28.8564513],[-88.0156706,28.9944338],[-88.0162494,30.0038862],[-86.0277506,30.0047454],[-84.0187909,28.9961781],[-81.9971976,25.9826768],[-81.9966618,25.0134917],[-84.0165592,25.0125783],[-84.0160068,24.0052745],[-80.0199985,24.007096],[-79.8901116,26.8550713],[-80.0245309,32.0161282],[-75.4147385,35.0531894],[-74.0211163,39.5727927],[-72.002019,40.9912464],[-69.8797398,40.9920457],[-69.8489304,43.2619916],[-66.9452845,44.7104937],[-67.7596632,47.0990024],[-69.2505131,47.5122328],[-70.4614886,46.2176574],[-71.412273,45.254878],[-72.0222508,45.0059846],[-75.0798841,44.9802854],[-76.9023061,43.8024568],[-78.7623935,43.6249578],[-79.15798,43.4462589],[-79.0060087,42.8005317],[-82.662475,41.6889458],[-82.1761642,43.588535],[-83.2813977,46.138853],[-87.5064535,48.0142702],[-88.3492194,48.2963271],[-89.4353148,47.9837822],[-93.9981078,49.0067142],[-95.1105379,49.412004],[-96.0131199,49.0060547],[-123.3228926,49.0042878],[-123.2275233,48.1849927],[-124.7617886,48.4130148]],[[-160.5787616,22.5062947],[-160.5782192,21.4984647],[-158.7470604,21.2439843],[-157.5083185,20.995803],[-155.9961942,18.7790194],[-154.6217803,18.7586966],[-154.6890176,19.8805722],[-156.2927622,21.2225888],[-157.5047384,21.9984962],[-159.0093692,22.5070181],[-160.5787616,22.5062947]],[[-167.1571546,68.721974],[-164.8553982,67.0255078],[-168.002195,66.0017503],[-169.0087448,66.001546],[-169.0075381,64.9987675],[-172.5143281,63.8767267],[-173.8197023,59.74014],[-162.5018149,58.0005815],[-160.0159024,58.0012389],[-160.0149725,57.000035],[-160.5054788,56.9999017],[-165.8092575,54.824847],[-178.000097,52.2446469],[-177.9992996,51.2554252],[-171.4689067,51.8215329],[-162.40251,53.956664],[-159.0075717,55.002502],[-158.0190709,55.0027849],[-151.9963213,55.9991902],[-151.500341,57.9987853],[-151.5012894,58.9919816],[-138.5159989,58.9953194],[-138.5150471,57.9986434],[-133.9948193,54.0031685],[-130.0044418,54.0043387],[-130.0070826,57.0000507],[-131.975877,56.9995156],[-135.1229873,59.756601],[-138.0071813,59.991805],[-139.1715881,60.4127229],[-140.9874011,61.0118551],[-140.9683975,69.9535069],[-156.176891,71.5633329],[-160.413634,70.7397728],[-163.0218273,69.9707435],[-164.9717003,68.994689],[-167.1571546,68.721974]]],"overlay":true},{"id":"geodata.state.nj.us-Infrared2015","name":"NJ 2015 Aerial Imagery (Infrared)","type":"tms","template":"http://whoots.mapwarper.net/tms/{zoom}/{x}/{y}/Infrared2015/http://geodata.state.nj.us/imagerywms/Infrared2015","description":"Digital orthophotography of New Jersey, Near Infrared, 1 foot resolution","scaleExtent":[0,20],"polygon":[[[-74.86599,40.085427],[-74.840927,40.107225],[-74.822903,40.130329],[-74.788055,40.124685],[-74.726086,40.149488],[-74.729176,40.16392],[-74.763336,40.191725],[-74.775524,40.214276],[-74.844017,40.247957],[-74.868393,40.291573],[-74.944611,40.33817],[-74.967098,40.395195],[-75.002632,40.406046],[-75.026836,40.402516],[-75.06134,40.416502],[-75.074215,40.455046],[-75.069065,40.536503],[-75.102367,40.567024],[-75.135927,40.573609],[-75.16777,40.559069],[-75.197639,40.573674],[-75.203733,40.618318],[-75.205064,40.691312],[-75.198326,40.753889],[-75.172405,40.780671],[-75.1367,40.777292],[-75.090179,40.822383],[-75.100994,40.839269],[-75.096874,40.850956],[-75.068464,40.850372],[-75.057049,40.867574],[-75.13773,40.973094],[-75.135155,40.994411],[-75.039024,41.03819],[-74.981518,41.112598],[-74.905472,41.170384],[-74.84024,41.278645],[-74.798012,41.322685],[-74.757156,41.347691],[-74.695702,41.360576],[-74.041054,41.059088],[-74.041051,41.059087],[-74.04105,41.059087],[-74.04105,41.059086],[-74.041049,41.059086],[-73.890266,40.998039],[-73.933406,40.882078],[-73.933407,40.882077],[-73.933408,40.882076],[-73.933408,40.882075],[-74.011459,40.75558],[-74.024543,40.709436],[-74.066048,40.651732],[-74.152222,40.638967],[-74.183121,40.644568],[-74.200459,40.631281],[-74.199257,40.598444],[-74.21505,40.558026],[-74.246807,40.548113],[-74.24715,40.519541],[-74.267578,40.489651],[-74.26054,40.469282],[-74.199257,40.445641],[-74.181061,40.460401],[-74.136429,40.459095],[-73.997555,40.413496],[-74.026566,40.47777],[-74.003906,40.484037],[-73.977814,40.452042],[-73.964767,40.33189],[-74.088364,39.756824],[-74.356842,39.383406],[-74.609528,39.215231],[-74.776382,38.998909],[-74.863586,38.931639],[-74.931221,38.920688],[-74.980316,38.930304],[-74.960747,39.00798],[-74.905472,39.100226],[-74.899979,39.164141],[-75.101166,39.201398],[-75.135498,39.171062],[-75.425949,39.378099],[-75.475044,39.43195],[-75.543365,39.457403],[-75.552292,39.482845],[-75.538902,39.541911],[-75.519676,39.56997],[-75.571175,39.608069],[-75.577698,39.625524],[-75.539932,39.656456],[-75.472984,39.747454],[-75.466253,39.750761],[-75.466252,39.750762],[-75.466252,39.750763],[-75.466251,39.750764],[-75.466251,39.750765],[-75.46625,39.750767],[-75.466249,39.750768],[-75.466249,39.750769],[-75.465088,39.764478],[-75.415041,39.801786],[-75.324669,39.858891],[-75.246048,39.864689],[-75.143738,39.900255],[-75.142365,39.957912],[-75.07061,39.987117],[-75.056534,40.008683],[-74.935341,40.072555],[-74.86599,40.085427]]],"terms_url":"https://njgin.state.nj.us/NJ_NJGINExplorer/ShowMetadata.jsp?docId={E30775F2-6370-4525-8E68-C371ED29BBB3}","terms_text":"NJ Office of Information Technology (NJOIT), Office of Geographic Information Systems (OGIS)"},{"id":"geodata.state.nj.us-Natural2015","name":"NJ 2015 Aerial Imagery (Natural Color)","type":"tms","template":"http://whoots.mapwarper.net/tms/{zoom}/{x}/{y}/Natural2015/http://geodata.state.nj.us/imagerywms/Natural2015","description":"Digital orthophotography of New Jersey, Natural Color, 1 foot resolution","scaleExtent":[0,20],"polygon":[[[-74.86599,40.085427],[-74.840927,40.107225],[-74.822903,40.130329],[-74.788055,40.124685],[-74.726086,40.149488],[-74.729176,40.16392],[-74.763336,40.191725],[-74.775524,40.214276],[-74.844017,40.247957],[-74.868393,40.291573],[-74.944611,40.33817],[-74.967098,40.395195],[-75.002632,40.406046],[-75.026836,40.402516],[-75.06134,40.416502],[-75.074215,40.455046],[-75.069065,40.536503],[-75.102367,40.567024],[-75.135927,40.573609],[-75.16777,40.559069],[-75.197639,40.573674],[-75.203733,40.618318],[-75.205064,40.691312],[-75.198326,40.753889],[-75.172405,40.780671],[-75.1367,40.777292],[-75.090179,40.822383],[-75.100994,40.839269],[-75.096874,40.850956],[-75.068464,40.850372],[-75.057049,40.867574],[-75.13773,40.973094],[-75.135155,40.994411],[-75.039024,41.03819],[-74.981518,41.112598],[-74.905472,41.170384],[-74.84024,41.278645],[-74.798012,41.322685],[-74.757156,41.347691],[-74.695702,41.360576],[-74.041054,41.059088],[-74.041051,41.059087],[-74.04105,41.059087],[-74.04105,41.059086],[-74.041049,41.059086],[-73.890266,40.998039],[-73.933406,40.882078],[-73.933407,40.882077],[-73.933408,40.882076],[-73.933408,40.882075],[-74.011459,40.75558],[-74.024543,40.709436],[-74.066048,40.651732],[-74.152222,40.638967],[-74.183121,40.644568],[-74.200459,40.631281],[-74.199257,40.598444],[-74.21505,40.558026],[-74.246807,40.548113],[-74.24715,40.519541],[-74.267578,40.489651],[-74.26054,40.469282],[-74.199257,40.445641],[-74.181061,40.460401],[-74.136429,40.459095],[-73.997555,40.413496],[-74.026566,40.47777],[-74.003906,40.484037],[-73.977814,40.452042],[-73.964767,40.33189],[-74.088364,39.756824],[-74.356842,39.383406],[-74.609528,39.215231],[-74.776382,38.998909],[-74.863586,38.931639],[-74.931221,38.920688],[-74.980316,38.930304],[-74.960747,39.00798],[-74.905472,39.100226],[-74.899979,39.164141],[-75.101166,39.201398],[-75.135498,39.171062],[-75.425949,39.378099],[-75.475044,39.43195],[-75.543365,39.457403],[-75.552292,39.482845],[-75.538902,39.541911],[-75.519676,39.56997],[-75.571175,39.608069],[-75.577698,39.625524],[-75.539932,39.656456],[-75.472984,39.747454],[-75.466253,39.750761],[-75.466252,39.750762],[-75.466252,39.750763],[-75.466251,39.750764],[-75.466251,39.750765],[-75.46625,39.750767],[-75.466249,39.750768],[-75.466249,39.750769],[-75.465088,39.764478],[-75.415041,39.801786],[-75.324669,39.858891],[-75.246048,39.864689],[-75.143738,39.900255],[-75.142365,39.957912],[-75.07061,39.987117],[-75.056534,40.008683],[-74.935341,40.072555],[-74.86599,40.085427]]],"terms_url":"https://njgin.state.nj.us/NJ_NJGINExplorer/ShowMetadata.jsp?docId={CDC67AB8-ADA1-4B4B-9087-67A82CB9151C}","terms_text":"NJ Office of Information Technology (NJOIT), Office of Geographic Information Systems (OGIS)"},{"id":"NLS-Bartholomew-hfinch-hist","name":"NLS - Bartholomew Half Inch, 1897-1907","type":"tms","template":"http://geo.nls.uk/mapdata2/bartholomew/great_britain/{zoom}/{x}/{-y}.png","scaleExtent":[0,15],"polygon":[[[-6.4585407,49.9044128],[-6.3872009,49.9841116],[-6.2296827,49.9896159],[-6.2171269,49.8680087],[-6.4551164,49.8591793],[-6.4585407,49.9044128]],[[-1.4495137,60.8634056],[-0.7167114,60.8545122],[-0.7349744,60.4359756],[-0.6938826,60.4168218],[-0.7258429,60.3942735],[-0.7395401,60.0484714],[-0.9267357,60.0461918],[-0.9381501,59.8266157],[-1.4586452,59.831205],[-1.4455187,60.0535999],[-1.463211,60.0535999],[-1.4643524,60.0630002],[-1.5716475,60.0638546],[-1.5693646,60.1790005],[-1.643558,60.1807033],[-1.643558,60.1892162],[-1.8216221,60.1894999],[-1.8204807,60.3615507],[-1.8415973,60.3697345],[-1.8216221,60.3832755],[-1.8179852,60.5934321],[-1.453168,60.5934321],[-1.4495137,60.8634056]],[[-4.9089213,54.4242078],[-4.282598,54.4429861],[-4.2535417,54.029769],[-4.8766366,54.0221831],[-4.9089213,54.4242078]],[[-5.8667408,59.1444603],[-5.7759966,59.1470945],[-5.7720016,59.1014052],[-5.8621751,59.0990605],[-5.8667408,59.1444603]],[[-1.7065887,59.5703599],[-1.5579165,59.5693481],[-1.5564897,59.4965695],[-1.7054472,59.4975834],[-1.7065887,59.5703599]],[[-7.6865827,58.2940975],[-7.5330594,58.3006957],[-7.5256401,58.2646905],[-7.6797341,58.2577853],[-7.6865827,58.2940975]],[[-4.5338281,59.0359871],[-4.481322,59.0371616],[-4.4796099,59.0186583],[-4.5332574,59.0180707],[-4.5338281,59.0359871]],[[-8.6710698,57.8769896],[-8.4673234,57.8897332],[-8.4467775,57.7907],[-8.6510947,57.7779213],[-8.6710698,57.8769896]],[[-5.2395519,50.3530581],[-5.7920073,50.3384899],[-5.760047,49.9317027],[-4.6551363,49.9581461],[-4.677965,50.2860073],[-4.244219,50.2801723],[-4.2487848,50.2042525],[-3.3812929,50.2042525],[-3.4223846,50.5188201],[-3.1164796,50.5246258],[-3.1210453,50.6579592],[-2.6736357,50.6619495],[-2.5953453,50.6394325],[-2.5905026,50.5728419],[-2.4791203,50.5733545],[-2.4758919,50.5066704],[-2.3967943,50.5056438],[-2.401637,50.5723293],[-1.0400296,50.5718167],[-1.0335726,50.7059289],[-0.549302,50.7038843],[-0.5460736,50.7886618],[-0.0924734,50.7856002],[-0.0876307,50.7181949],[0.4789659,50.7120623],[0.487037,50.8182467],[0.9761503,50.8049868],[0.9922927,51.0126311],[1.4491213,51.0004424],[1.4781775,51.4090372],[1.0229632,51.4271576],[1.035877,51.7640881],[1.6105448,51.7500992],[1.646058,52.1560003],[1.7267698,52.1540195],[1.749369,52.4481811],[1.7870672,52.4811624],[1.759102,52.522505],[1.7933451,52.9602749],[0.3798147,52.9958468],[0.3895238,53.2511239],[0.3478614,53.2511239],[0.3238912,53.282186],[0.3461492,53.6538501],[0.128487,53.6575466],[0.116582,53.6674703],[0.1350586,54.0655731],[-0.0609831,54.065908],[-0.0414249,54.4709448],[-0.5662701,54.4771794],[-0.5592078,54.6565127],[-1.1665638,54.6623485],[-1.1637389,54.842611],[-1.3316194,54.843909],[-1.3257065,55.2470842],[-1.529453,55.2487108],[-1.524178,55.6540122],[-1.7638798,55.6540122],[-1.7733693,55.9719116],[-2.1607858,55.9682981],[-2.1543289,56.0621387],[-2.4578051,56.0585337],[-2.4190635,56.641717],[-2.0962164,56.641717],[-2.0833025,57.0021322],[-1.9283359,57.0126802],[-1.9180966,57.3590895],[-1.7502161,57.3625721],[-1.7695869,57.7608634],[-3.6937554,57.7574187],[-3.7066693,57.9806386],[-3.5969013,57.9772149],[-3.6033582,58.1207277],[-3.0222335,58.1309566],[-3.0286905,58.5410788],[-2.8478961,58.530968],[-2.86081,58.8430508],[-2.679624,58.8414991],[-2.6841897,58.885175],[-2.6339665,58.9052239],[-2.679624,58.9335083],[-2.6887555,59.0229231],[-2.3668703,59.0229231],[-2.3702946,59.2652861],[-2.3429001,59.2821989],[-2.3714361,59.2996861],[-2.3737189,59.3707083],[-2.3429001,59.385825],[-2.3725775,59.400354],[-2.3714361,59.4259098],[-3.0734196,59.4230067],[-3.0711368,59.3433649],[-3.103097,59.3311405],[-3.0745611,59.3136695],[-3.0722782,59.232603],[-3.3850319,59.1484167],[-3.3747589,58.9352753],[-3.5653789,58.9323303],[-3.554829,58.69759],[-5.2808579,58.6667732],[-5.2534159,58.3514125],[-5.5068508,58.3437887],[-5.4761804,58.0323557],[-5.8974958,58.0212436],[-5.8522972,57.6171758],[-6.1396311,57.6137174],[-6.1541592,57.7423183],[-6.2913692,57.7380102],[-6.3365678,58.1398784],[-6.1121891,58.1466944],[-6.1473778,58.5106285],[-6.2934817,58.5416182],[-6.8413713,58.2977321],[-7.0057382,58.2929331],[-7.1016189,58.2064403],[-7.2573132,58.1793148],[-7.2531092,58.1004928],[-7.4070698,58.0905566],[-7.391347,57.7911354],[-7.790991,57.7733151],[-7.7624215,57.5444165],[-7.698501,57.1453194],[-7.7943817,57.1304547],[-7.716764,56.7368628],[-7.0122067,56.7654359],[-6.979922,56.5453858],[-7.0638622,56.5453858],[-7.0444914,56.3562587],[-6.500676,56.3812917],[-6.4491433,55.9793649],[-6.563287,55.9691456],[-6.5393742,55.7030135],[-6.5595521,55.6907321],[-6.5345315,55.6761713],[-6.5216176,55.5704434],[-5.8912587,55.5923416],[-5.8560127,55.2320733],[-5.2293639,55.2515958],[-5.1837064,54.6254139],[-3.6655956,54.6518373],[-3.6496155,54.4320023],[-3.5400375,54.4306744],[-3.530906,54.0290181],[-3.0697656,54.030359],[-3.0675737,53.8221388],[-3.0804876,53.7739911],[-3.0619239,53.7477488],[-3.0611168,53.6737049],[-3.2144691,53.6708361],[-3.2057699,53.4226163],[-3.2799632,53.355224],[-3.2896655,53.3608441],[-3.3327547,53.364931],[-3.3761293,53.3540318],[-4.0888976,53.3433102],[-4.0945474,53.4612036],[-4.697412,53.4448624],[-4.6882805,53.3318598],[-4.7202407,53.2895771],[-4.6837148,53.2486184],[-4.6768661,53.1542644],[-4.8480816,53.1446807],[-4.8178336,52.7440299],[-4.2545751,52.7558939],[-4.228876,52.254876],[-4.2607571,52.2536408],[-4.2724603,52.2432637],[-4.8136263,52.230095],[-4.8079191,52.1138892],[-5.3889104,52.0991668],[-5.3717888,51.9129667],[-5.4208706,51.9101502],[-5.414022,51.8453218],[-5.3683645,51.8474373],[-5.3466772,51.5595332],[-4.773676,51.5758518],[-4.7656859,51.4885146],[-4.1915432,51.4970427],[-4.1869775,51.4344663],[-3.6151177,51.4444274],[-3.6105519,51.3746543],[-3.1494115,51.3789292],[-3.1494115,51.2919281],[-4.3038735,51.2745907],[-4.2861169,51.0508721],[-4.8543277,51.0366633],[-4.8372201,50.7212787],[-5.2618345,50.7082694],[-5.2395519,50.3530581]],[[-2.1502671,60.171318],[-2.0030218,60.1696146],[-2.0013096,60.0997023],[-2.148555,60.1011247],[-2.1502671,60.171318]],[[-6.2086011,59.1163488],[-6.1229934,59.1166418],[-6.121852,59.0714985],[-6.2097426,59.0714985],[-6.2086011,59.1163488]],[[-4.4159559,59.0889036],[-4.4212022,59.0770848],[-4.3971904,59.0779143],[-4.3913388,59.0897328],[-4.4159559,59.0889036]]],"terms_url":"http://geo.nls.uk/maps/","terms_text":"National Library of Scotland Historic Maps"},{"id":"NLS-OS-7th_Series","name":"NLS - OS 1-inch 7th Series 1955-61","type":"tms","template":"http://geo.nls.uk/mapdata2/os/seventh/{zoom}/{x}/{-y}.png","scaleExtent":[5,16],"polygon":[[[-6.4585407,49.9044128],[-6.3872009,49.9841116],[-6.2296827,49.9896159],[-6.2171269,49.8680087],[-6.4551164,49.8591793],[-6.4585407,49.9044128]],[[-1.4495137,60.8634056],[-0.7167114,60.8545122],[-0.7349744,60.4359756],[-0.6938826,60.4168218],[-0.7258429,60.3942735],[-0.7395401,60.0484714],[-0.9267357,60.0461918],[-0.9381501,59.8266157],[-1.4586452,59.831205],[-1.4455187,60.0535999],[-1.463211,60.0535999],[-1.4643524,60.0630002],[-1.5716475,60.0638546],[-1.5693646,60.1790005],[-1.643558,60.1807033],[-1.643558,60.1892162],[-1.8216221,60.1894999],[-1.8204807,60.3615507],[-1.8415973,60.3697345],[-1.8216221,60.3832755],[-1.8179852,60.5934321],[-1.453168,60.5934321],[-1.4495137,60.8634056]],[[-4.9089213,54.4242078],[-4.282598,54.4429861],[-4.2535417,54.029769],[-4.8766366,54.0221831],[-4.9089213,54.4242078]],[[-5.8667408,59.1444603],[-5.7759966,59.1470945],[-5.7720016,59.1014052],[-5.8621751,59.0990605],[-5.8667408,59.1444603]],[[-1.7065887,59.5703599],[-1.5579165,59.5693481],[-1.5564897,59.4965695],[-1.7054472,59.4975834],[-1.7065887,59.5703599]],[[-7.6865827,58.2940975],[-7.5330594,58.3006957],[-7.5256401,58.2646905],[-7.6797341,58.2577853],[-7.6865827,58.2940975]],[[-4.5338281,59.0359871],[-4.481322,59.0371616],[-4.4796099,59.0186583],[-4.5332574,59.0180707],[-4.5338281,59.0359871]],[[-8.6710698,57.8769896],[-8.4673234,57.8897332],[-8.4467775,57.7907],[-8.6510947,57.7779213],[-8.6710698,57.8769896]],[[-5.2395519,50.3530581],[-5.7920073,50.3384899],[-5.760047,49.9317027],[-4.6551363,49.9581461],[-4.677965,50.2860073],[-4.244219,50.2801723],[-4.2487848,50.2042525],[-3.3812929,50.2042525],[-3.4223846,50.5188201],[-3.1164796,50.5246258],[-3.1210453,50.6579592],[-2.6736357,50.6619495],[-2.5953453,50.6394325],[-2.5905026,50.5728419],[-2.4791203,50.5733545],[-2.4758919,50.5066704],[-2.3967943,50.5056438],[-2.401637,50.5723293],[-1.0400296,50.5718167],[-1.0335726,50.7059289],[-0.549302,50.7038843],[-0.5460736,50.7886618],[-0.0924734,50.7856002],[-0.0876307,50.7181949],[0.4789659,50.7120623],[0.487037,50.8182467],[0.9761503,50.8049868],[0.9922927,51.0126311],[1.4491213,51.0004424],[1.4781775,51.4090372],[1.0229632,51.4271576],[1.035877,51.7640881],[1.6105448,51.7500992],[1.646058,52.1560003],[1.7267698,52.1540195],[1.749369,52.4481811],[1.7870672,52.4811624],[1.759102,52.522505],[1.7933451,52.9602749],[0.3798147,52.9958468],[0.3895238,53.2511239],[0.3478614,53.2511239],[0.3238912,53.282186],[0.3461492,53.6538501],[0.128487,53.6575466],[0.116582,53.6674703],[0.1350586,54.0655731],[-0.0609831,54.065908],[-0.0414249,54.4709448],[-0.5662701,54.4771794],[-0.5592078,54.6565127],[-1.1665638,54.6623485],[-1.1637389,54.842611],[-1.3316194,54.843909],[-1.3257065,55.2470842],[-1.529453,55.2487108],[-1.524178,55.6540122],[-1.7638798,55.6540122],[-1.7733693,55.9719116],[-2.1607858,55.9682981],[-2.1543289,56.0621387],[-2.4578051,56.0585337],[-2.4190635,56.641717],[-2.0962164,56.641717],[-2.0833025,57.0021322],[-1.9283359,57.0126802],[-1.9180966,57.3590895],[-1.7502161,57.3625721],[-1.7695869,57.7608634],[-3.6937554,57.7574187],[-3.7066693,57.9806386],[-3.5969013,57.9772149],[-3.6033582,58.1207277],[-3.0222335,58.1309566],[-3.0286905,58.5410788],[-2.8478961,58.530968],[-2.86081,58.8430508],[-2.679624,58.8414991],[-2.6841897,58.885175],[-2.6339665,58.9052239],[-2.679624,58.9335083],[-2.6887555,59.0229231],[-2.3668703,59.0229231],[-2.3702946,59.2652861],[-2.3429001,59.2821989],[-2.3714361,59.2996861],[-2.3737189,59.3707083],[-2.3429001,59.385825],[-2.3725775,59.400354],[-2.3714361,59.4259098],[-3.0734196,59.4230067],[-3.0711368,59.3433649],[-3.103097,59.3311405],[-3.0745611,59.3136695],[-3.0722782,59.232603],[-3.3850319,59.1484167],[-3.3747589,58.9352753],[-3.5653789,58.9323303],[-3.554829,58.69759],[-5.2808579,58.6667732],[-5.2534159,58.3514125],[-5.5068508,58.3437887],[-5.4761804,58.0323557],[-5.8974958,58.0212436],[-5.8522972,57.6171758],[-6.1396311,57.6137174],[-6.1541592,57.7423183],[-6.2913692,57.7380102],[-6.3365678,58.1398784],[-6.1121891,58.1466944],[-6.1473778,58.5106285],[-6.2934817,58.5416182],[-6.8413713,58.2977321],[-7.0057382,58.2929331],[-7.1016189,58.2064403],[-7.2573132,58.1793148],[-7.2531092,58.1004928],[-7.4070698,58.0905566],[-7.391347,57.7911354],[-7.790991,57.7733151],[-7.7624215,57.5444165],[-7.698501,57.1453194],[-7.7943817,57.1304547],[-7.716764,56.7368628],[-7.0122067,56.7654359],[-6.979922,56.5453858],[-7.0638622,56.5453858],[-7.0444914,56.3562587],[-6.500676,56.3812917],[-6.4491433,55.9793649],[-6.563287,55.9691456],[-6.5393742,55.7030135],[-6.5595521,55.6907321],[-6.5345315,55.6761713],[-6.5216176,55.5704434],[-5.8912587,55.5923416],[-5.8560127,55.2320733],[-5.2293639,55.2515958],[-5.1837064,54.6254139],[-3.6655956,54.6518373],[-3.6496155,54.4320023],[-3.5400375,54.4306744],[-3.530906,54.0290181],[-3.0697656,54.030359],[-3.0675737,53.8221388],[-3.0804876,53.7739911],[-3.0619239,53.7477488],[-3.0611168,53.6737049],[-3.2144691,53.6708361],[-3.2057699,53.4226163],[-3.2799632,53.355224],[-3.2896655,53.3608441],[-3.3327547,53.364931],[-3.3761293,53.3540318],[-4.0888976,53.3433102],[-4.0945474,53.4612036],[-4.697412,53.4448624],[-4.6882805,53.3318598],[-4.7202407,53.2895771],[-4.6837148,53.2486184],[-4.6768661,53.1542644],[-4.8480816,53.1446807],[-4.8178336,52.7440299],[-4.2545751,52.7558939],[-4.228876,52.254876],[-4.2607571,52.2536408],[-4.2724603,52.2432637],[-4.8136263,52.230095],[-4.8079191,52.1138892],[-5.3889104,52.0991668],[-5.3717888,51.9129667],[-5.4208706,51.9101502],[-5.414022,51.8453218],[-5.3683645,51.8474373],[-5.3466772,51.5595332],[-4.773676,51.5758518],[-4.7656859,51.4885146],[-4.1915432,51.4970427],[-4.1869775,51.4344663],[-3.6151177,51.4444274],[-3.6105519,51.3746543],[-3.1494115,51.3789292],[-3.1494115,51.2919281],[-4.3038735,51.2745907],[-4.2861169,51.0508721],[-4.8543277,51.0366633],[-4.8372201,50.7212787],[-5.2618345,50.7082694],[-5.2395519,50.3530581]],[[-2.1502671,60.171318],[-2.0030218,60.1696146],[-2.0013096,60.0997023],[-2.148555,60.1011247],[-2.1502671,60.171318]],[[-6.2086011,59.1163488],[-6.1229934,59.1166418],[-6.121852,59.0714985],[-6.2097426,59.0714985],[-6.2086011,59.1163488]],[[-4.4159559,59.0889036],[-4.4212022,59.0770848],[-4.3971904,59.0779143],[-4.3913388,59.0897328],[-4.4159559,59.0889036]]],"terms_url":"http://geo.nls.uk/maps/","terms_text":"National Library of Scotland Historic Maps"},{"id":"NLS-OS-1st_Series","name":"NLS - OS 1:25k 1st Series 1937-61","type":"tms","template":"http://geo.nls.uk/mapdata2/os/25000/{zoom}/{x}/{-y}.png","scaleExtent":[5,16],"polygon":[[[-4.7157244,54.6796556],[-4.6850662,54.6800268],[-4.6835779,54.6623245],[-4.7148782,54.6615818],[-4.7157244,54.6796556]],[[-3.7085748,58.3371151],[-3.5405937,58.3380684],[-3.5315137,58.1608002],[-3.3608086,58.1622372],[-3.3653486,58.252173],[-3.1610473,58.2536063],[-3.1610473,58.3261509],[-3.0275704,58.3271045],[-3.0366505,58.6139001],[-3.0021463,58.614373],[-3.0030543,58.7036341],[-3.4180129,58.7003322],[-3.4171049,58.6290293],[-3.7240109,58.6266658],[-3.7231029,58.606806],[-4.2361262,58.5992374],[-4.2334022,58.5092347],[-3.88836,58.5144516],[-3.8829119,58.4261327],[-3.7158389,58.4270836],[-3.7085748,58.3371151]],[[-6.46676,49.9943621],[-6.1889102,50.004868],[-6.1789222,49.8967815],[-6.3169391,49.8915171],[-6.312399,49.8200979],[-6.4504159,49.8159968],[-6.46676,49.9943621]],[[-5.6453263,50.2029809],[-5.7801329,50.2014076],[-5.7637888,50.0197267],[-5.3479221,50.0290604],[-5.3388421,49.9414854],[-5.024672,49.9473287],[-5.0355681,50.0383923],[-5.0010639,50.0453901],[-4.9974319,50.1304478],[-4.855783,50.13394],[-4.861231,50.206057],[-4.6546085,50.2140172],[-4.6558926,50.3018616],[-4.5184924,50.3026818],[-4.51464,50.325642],[-4.2488284,50.3264618],[-4.2488284,50.3100631],[-4.10886,50.3141633],[-4.1062917,50.2411267],[-3.9648088,50.2432047],[-3.9640778,50.2254158],[-3.8522287,50.2273626],[-3.8503757,50.1552563],[-3.6921809,50.1572487],[-3.5414602,50.1602198],[-3.5465781,50.3226814],[-3.4068012,50.3241013],[-3.4165761,50.5892711],[-3.2746691,50.5962721],[-3.2749172,50.6106323],[-2.9971742,50.613972],[-2.9896008,50.688537],[-2.7120266,50.690565],[-2.710908,50.6195964],[-2.5695473,50.6157538],[-2.5651019,50.5134083],[-2.4014463,50.513379],[-2.3940583,50.6160348],[-2.2894123,50.6147436],[-2.2876184,50.6008549],[-2.1477855,50.6048506],[-2.1451013,50.5325437],[-1.9335117,50.5347477],[-1.9362139,50.6170445],[-1.8573025,50.6228094],[-1.8554865,50.709139],[-1.6066929,50.709139],[-1.6085089,50.6239615],[-1.4450678,50.6228094],[-1.4432518,50.5317039],[-1.1545059,50.5293951],[-1.1472419,50.6170485],[-1.011041,50.6205051],[-1.011041,50.7056889],[-0.704135,50.7045388],[-0.700503,50.7769401],[-0.5860943,50.7723465],[-0.5879103,50.7907181],[-0.0149586,50.7798108],[-0.0185906,50.7625836],[0.0967261,50.7620093],[0.0921861,50.6913106],[0.3046595,50.6890096],[0.3101075,50.7757917],[0.5511831,50.7726336],[0.5529991,50.8432096],[0.695556,50.8403428],[0.696464,50.8592608],[0.9852099,50.8523824],[0.9906579,50.9417226],[1.0160821,50.9411504],[1.0215301,51.0303204],[1.2812198,51.0240383],[1.2848518,51.0948044],[1.4277848,51.0948044],[1.4386809,51.2882859],[1.4713691,51.2871502],[1.4804492,51.3994534],[1.1590151,51.4073836],[1.1590151,51.3869889],[1.0191822,51.3903886],[1.0228142,51.4798247],[0.8793493,51.4843484],[0.8829813,51.5566675],[1.0264462,51.5544092],[1.0373423,51.7493319],[1.2607117,51.7482076],[1.2661598,51.8279642],[1.3351682,51.8335756],[1.3478803,51.9199021],[1.4840812,51.9199021],[1.4986093,52.0038271],[1.6438902,52.0027092],[1.6656823,52.270221],[1.7310588,52.270221],[1.7528509,52.4465637],[1.8254914,52.4476705],[1.8345714,52.624408],[1.7690346,52.6291402],[1.7741711,52.717904],[1.6996925,52.721793],[1.706113,52.8103687],[1.559724,52.8165777],[1.5648605,52.9034116],[1.4184715,52.9103818],[1.4223238,52.9281894],[1.3439928,52.9289635],[1.3491293,53.0001194],[0.4515789,53.022589],[0.4497629,52.9351139],[0.3789384,52.9351139],[0.3716744,52.846365],[0.2227614,52.8496552],[0.2336575,52.9329248],[0.3062979,52.9351139],[0.308114,53.022589],[0.3807544,53.0236813],[0.3993708,53.2933729],[0.3248922,53.2987454],[0.3274604,53.3853782],[0.2504136,53.38691],[0.2581183,53.4748924],[0.1862079,53.4779494],[0.1913443,53.6548777],[0.1502527,53.6594436],[0.1528209,53.7666003],[0.0012954,53.7734308],[0.0025796,53.8424326],[-0.0282392,53.841675],[-0.0226575,53.9311501],[-0.1406983,53.9322193],[-0.1416063,54.0219323],[-0.1706625,54.0235326],[-0.1679384,54.0949482],[-0.0126694,54.0912206],[-0.0099454,54.1811226],[-0.1615824,54.1837795],[-0.1606744,54.2029038],[-0.2405789,54.2034349],[-0.2378549,54.2936234],[-0.3894919,54.2941533],[-0.3857497,54.3837321],[-0.461638,54.3856364],[-0.4571122,54.4939066],[-0.6105651,54.4965434],[-0.6096571,54.5676704],[-0.7667421,54.569776],[-0.7640181,54.5887213],[-0.9192871,54.5908258],[-0.9148116,54.6608348],[-1.1485204,54.6634343],[-1.1472363,54.7528316],[-1.2268514,54.7532021],[-1.2265398,54.8429879],[-1.2991803,54.8435107],[-1.2991803,54.9333391],[-1.3454886,54.9354258],[-1.3436726,55.0234878],[-1.3772688,55.0255698],[-1.3754528,55.1310877],[-1.4997441,55.1315727],[-1.4969272,55.2928323],[-1.5296721,55.2942946],[-1.5258198,55.6523803],[-1.7659492,55.6545537],[-1.7620968,55.7435626],[-1.9688392,55.7435626],[-1.9698023,55.8334505],[-2.0019051,55.8336308],[-2.0015841,55.9235526],[-2.1604851,55.9240613],[-2.1613931,55.9413549],[-2.3202942,55.9408463],[-2.3212022,56.0145126],[-2.5627317,56.0124824],[-2.5645477,56.1022207],[-2.9658863,56.0991822],[-2.9667943,56.1710304],[-2.4828272,56.1755797],[-2.4882752,56.2856078],[-2.5645477,56.2835918],[-2.5681798,56.3742075],[-2.7261728,56.3732019],[-2.7316208,56.4425301],[-2.6190281,56.4425301],[-2.6153961,56.5317671],[-2.453771,56.5347715],[-2.4534686,56.6420248],[-2.4062523,56.6440218],[-2.3953562,56.7297964],[-2.2936596,56.7337811],[-2.2972916,56.807423],[-2.1629067,56.8113995],[-2.1592747,56.9958425],[-1.9922016,57.0017771],[-2.0067297,57.2737477],[-1.9195612,57.2757112],[-1.9304572,57.3482876],[-1.8106005,57.3443682],[-1.7997044,57.4402728],[-1.6616875,57.4285429],[-1.6689516,57.5398256],[-1.7452241,57.5398256],[-1.7524881,57.6313302],[-1.8287606,57.6332746],[-1.8287606,57.7187255],[-3.1768526,57.7171219],[-3.1794208,57.734264],[-3.5134082,57.7292105],[-3.5129542,57.7112683],[-3.7635638,57.7076303],[-3.7598539,57.635713],[-3.8420372,57.6343382],[-3.8458895,57.6178365],[-3.9794374,57.6157733],[-3.9794374,57.686544],[-3.8150708,57.689976],[-3.817639,57.7968899],[-3.6853753,57.7989429],[-3.6892276,57.8891567],[-3.9383458,57.8877915],[-3.9421981,57.9750592],[-3.6943641,57.9784638],[-3.6969323,58.0695865],[-4.0372226,58.0641528],[-4.0346543,57.9730163],[-4.2003051,57.9702923],[-4.1832772,57.7012869],[-4.518752,57.6951111],[-4.5122925,57.6050682],[-4.6789116,57.6016628],[-4.666022,57.4218334],[-3.6677696,57.4394729],[-3.671282,57.5295384],[-3.3384979,57.5331943],[-3.3330498,57.4438859],[-2.8336466,57.4485275],[-2.8236396,56.9992706],[-2.3305398,57.0006693],[-2.3298977,56.9113932],[-2.6579889,56.9092901],[-2.6559637,56.8198406],[-2.8216747,56.8188467],[-2.8184967,56.7295397],[-3.1449248,56.7265508],[-3.1435628,56.6362749],[-3.4679089,56.6350265],[-3.474265,56.7238108],[-3.8011471,56.7188284],[-3.785711,56.4493026],[-3.946428,56.4457896],[-3.9428873,56.2659777],[-4.423146,56.2588459],[-4.4141572,56.0815506],[-4.8944159,56.0708008],[-4.8791072,55.8896994],[-5.1994158,55.8821374],[-5.1852906,55.7023791],[-5.0273445,55.7067203],[-5.0222081,55.6879046],[-4.897649,55.6907999],[-4.8880181,55.6002822],[-4.7339244,55.6046348],[-4.7275038,55.5342082],[-4.773732,55.5334815],[-4.7685955,55.4447227],[-4.8494947,55.4418092],[-4.8405059,55.3506535],[-4.8700405,55.3513836],[-4.8649041,55.2629462],[-4.9920314,55.2592875],[-4.9907473,55.1691779],[-5.0600894,55.1655105],[-5.0575212,55.0751884],[-5.2141831,55.0722477],[-5.1991766,54.8020337],[-5.0466316,54.8062205],[-5.0502636,54.7244996],[-4.9703591,54.7203043],[-4.9776232,54.6215905],[-4.796022,54.6342056],[-4.796022,54.7307917],[-4.8977186,54.7265971],[-4.9086147,54.8145928],[-4.8069181,54.8166856],[-4.8105501,54.7915648],[-4.6943253,54.7978465],[-4.6761652,54.7244996],[-4.5744686,54.7244996],[-4.5599405,54.6426135],[-4.3093309,54.6384098],[-4.3333262,54.8229889],[-4.2626999,54.8274274],[-4.2549952,54.7348587],[-3.8338058,54.7400481],[-3.836374,54.8141105],[-3.7118149,54.8133706],[-3.7143831,54.8318654],[-3.5346072,54.8355633],[-3.5271039,54.9066228],[-3.4808758,54.9084684],[-3.4776655,54.7457328],[-3.5874573,54.744621],[-3.5836049,54.6546166],[-3.7107322,54.6531308],[-3.6991752,54.4550407],[-3.5746161,54.4572801],[-3.5759002,54.3863042],[-3.539945,54.3855564],[-3.5386609,54.297224],[-3.46033,54.2957252],[-3.4590458,54.2079507],[-3.3807149,54.2102037],[-3.381999,54.1169788],[-3.302878,54.1160656],[-3.300154,54.0276224],[-3.1013007,54.0292224],[-3.093596,53.6062158],[-3.2065981,53.6016441],[-3.2091663,53.4917753],[-3.2451215,53.4887193],[-3.2348486,53.4045934],[-3.5276266,53.3999999],[-3.5343966,53.328481],[-3.6488053,53.3252272],[-3.6527308,53.3057716],[-3.7271873,53.3046865],[-3.7315003,53.3945257],[-3.9108315,53.3912769],[-3.9071995,53.3023804],[-3.9521457,53.3015665],[-3.9566724,53.3912183],[-4.1081979,53.3889209],[-4.1081979,53.4072967],[-4.2622916,53.4065312],[-4.2635757,53.4753707],[-4.638537,53.4677274],[-4.6346847,53.3812621],[-4.7091633,53.3774321],[-4.7001745,53.1954965],[-4.5499332,53.1962658],[-4.5435126,53.1092488],[-4.3919871,53.1100196],[-4.3855666,53.0236002],[-4.6115707,53.0205105],[-4.603866,52.9284932],[-4.7566756,52.9261709],[-4.7476868,52.8370555],[-4.8208813,52.8331768],[-4.8208813,52.7446476],[-4.3701572,52.7539749],[-4.3765778,52.8401583],[-4.2314728,52.8455875],[-4.2237682,52.7586379],[-4.1056297,52.7570836],[-4.1015192,52.6714874],[-4.1487355,52.6703862],[-4.1305754,52.4008596],[-4.1995838,52.3986435],[-4.2050319,52.3110195],[-4.3466808,52.303247],[-4.3484968,52.2365693],[-4.4901457,52.2332328],[-4.4883297,52.2098702],[-4.6572188,52.2098702],[-4.6590348,52.1385939],[-4.7788916,52.13525],[-4.7807076,52.1162967],[-4.9259885,52.1140663],[-4.9187245,52.0392855],[-5.2365265,52.0314653],[-5.2347105,51.9442339],[-5.3473032,51.9408755],[-5.3473032,51.9195995],[-5.4925842,51.9162392],[-5.4853201,51.8265386],[-5.1983903,51.8321501],[-5.1893102,51.7625177],[-5.335825,51.7589528],[-5.3281204,51.6686495],[-5.1836575,51.6730296],[-5.1836575,51.6539134],[-5.0674452,51.6578966],[-5.0603825,51.5677905],[-4.5974594,51.5809588],[-4.60388,51.6726314],[-4.345773,51.6726314],[-4.3355001,51.4962964],[-3.9528341,51.5106841],[-3.9425611,51.5905333],[-3.8809237,51.5953198],[-3.8706508,51.5074872],[-3.7679216,51.4978952],[-3.7550805,51.4242895],[-3.5855774,51.41468],[-3.5778727,51.3329177],[-3.0796364,51.3329177],[-3.0770682,51.2494018],[-3.7216935,51.2381477],[-3.7216935,51.2558315],[-3.8706508,51.2558315],[-3.8680825,51.2365398],[-4.2944084,51.2252825],[-4.289272,51.0496352],[-4.5692089,51.0431767],[-4.5624122,50.9497388],[-4.5905604,50.9520269],[-4.5896524,50.8627065],[-4.6296046,50.8592677],[-4.6226411,50.7691513],[-4.6952816,50.7680028],[-4.6934655,50.6967379],[-4.8342064,50.6938621],[-4.8296664,50.6046231],[-4.9676833,50.6000126],[-4.9685913,50.5821427],[-5.1084242,50.5786832],[-5.1029762,50.4892254],[-5.1311244,50.48807],[-5.1274923,50.4163798],[-5.2664172,50.4117509],[-5.2609692,50.3034214],[-5.5124868,50.2976214],[-5.5061308,50.2256428],[-5.6468717,50.2209953],[-5.6453263,50.2029809]],[[-5.1336607,55.2630226],[-5.1021999,55.2639372],[-5.0999527,55.2458239],[-5.1322161,55.2446343],[-5.1336607,55.2630226]],[[-5.6431878,55.5095745],[-5.4861028,55.5126594],[-5.4715747,55.3348829],[-5.6277517,55.3302345],[-5.6431878,55.5095745]],[[-4.7213517,51.2180246],[-4.5804201,51.2212417],[-4.5746416,51.1306736],[-4.7174993,51.1280545],[-4.7213517,51.2180246]],[[-5.1608796,55.4153626],[-5.0045387,55.4190069],[-5.0184798,55.6153521],[-5.1755648,55.6138137],[-5.1608796,55.4153626]]],"terms_url":"http://geo.nls.uk/maps/","terms_text":"National Library of Scotland Historic Maps"},{"id":"NLS-OS-25inch-hist","name":"NLS - OS 25-inch (Scotland), 1892-1905","type":"tms","template":"http://geo.nls.uk/mapdata2/os/25_inch/scotland_1/{zoom}/{x}/{y}.png","scaleExtent":[0,18],"polygon":[[[-5.2112173,54.8018593],[-5.0642752,54.8026508],[-5.0560354,54.6305176],[-4.3158316,54.6297227],[-4.3117117,54.7448258],[-3.8530325,54.7464112],[-3.8530325,54.8034424],[-3.5522818,54.8034424],[-3.5522818,54.8374644],[-3.468511,54.8406277],[-3.4657644,54.8983158],[-3.3847403,54.8991055],[-3.3888601,54.9559214],[-3.0920786,54.9539468],[-3.0392359,54.9923274],[-3.0212713,55.0493881],[-2.9591232,55.0463283],[-2.9202807,55.0666294],[-2.7857081,55.068652],[-2.7852225,55.0914426],[-2.7337562,55.0922761],[-2.737616,55.151204],[-2.7648395,55.1510672],[-2.7013114,55.1722505],[-2.6635459,55.2192808],[-2.6460364,55.2188891],[-2.629042,55.2233933],[-2.6317886,55.2287781],[-2.6235488,55.2446345],[-2.6197723,55.2454663],[-2.6099017,55.2454174],[-2.6099876,55.2486466],[-2.6408121,55.2590039],[-2.6247896,55.2615631],[-2.6045186,55.2823081],[-2.5693176,55.296132],[-2.5479542,55.3121617],[-2.5091116,55.3234891],[-2.4780376,55.3494471],[-2.4421083,55.3533118],[-2.4052079,55.3439256],[-2.3726772,55.3447539],[-2.3221819,55.3687665],[-2.3241241,55.3999337],[-2.2576062,55.425015],[-2.1985547,55.4273529],[-2.1484296,55.4717466],[-2.1944348,55.484199],[-2.2040479,55.529306],[-2.2960584,55.6379722],[-2.2177808,55.6379722],[-2.1059266,55.7452498],[-1.9716874,55.7462161],[-1.9697453,55.9190951],[-2.1201694,55.9207115],[-2.1242893,55.9776133],[-2.3440159,55.9783817],[-2.3440159,56.0390349],[-2.5046909,56.0413363],[-2.500571,56.1003588],[-2.8823459,56.0957629],[-2.8823459,56.1722898],[-2.4126804,56.1692316],[-2.4181736,56.2334017],[-2.5857151,56.2303484],[-2.5719822,56.3416356],[-2.7257908,56.3462022],[-2.7312839,56.4343808],[-2.6928318,56.4343808],[-2.6928318,56.4859769],[-2.5307834,56.4935587],[-2.5307834,56.570806],[-2.5302878,56.6047947],[-2.3732428,56.6044452],[-2.3684363,56.7398824],[-2.3292975,56.7398824],[-2.3292975,56.7888065],[-2.3145346,56.7891826],[-2.3148779,56.7967036],[-2.171369,56.7967036],[-2.1703979,56.9710595],[-2.0101725,56.9694716],[-2.0101725,57.0846832],[-2.0817687,57.085349],[-2.0488097,57.1259963],[-2.0409133,57.126369],[-2.0383434,57.2411129],[-1.878118,57.2421638],[-1.8771469,57.2978175],[-1.9868771,57.2983422],[-1.9082209,57.3560063],[-1.8752048,57.3560063],[-1.8761758,57.3769527],[-1.8120857,57.4120111],[-1.7120661,57.4120111],[-1.7034646,57.6441388],[-1.8666032,57.6451781],[-1.8646611,57.7033351],[-3.1204292,57.7064705],[-3.1218025,57.7504652],[-3.4445259,57.7526635],[-3.4472724,57.7138067],[-3.5145637,57.7094052],[-3.5118171,57.6939956],[-3.7645027,57.6917938],[-3.7672492,57.6344975],[-3.842378,57.6288312],[-3.8438346,57.5965825],[-3.9414265,57.5916386],[-3.9404554,57.6537782],[-3.8894746,57.6529989],[-3.8826772,57.7676408],[-3.7224517,57.766087],[-3.7195385,57.8819201],[-3.9146888,57.8853352],[-3.916062,57.9546243],[-3.745774,57.9538956],[-3.7471473,58.0688409],[-3.5837256,58.0695672],[-3.5837256,58.1116689],[-3.4560096,58.1138452],[-3.4544646,58.228503],[-3.4379851,58.2283222],[-3.4243233,58.2427725],[-3.412307,58.2438567],[-3.3735115,58.2695057],[-3.3063919,58.2862038],[-3.1229154,58.2859395],[-3.123602,58.3443661],[-2.9574338,58.3447264],[-2.951254,58.6422011],[-2.8812162,58.6429157],[-2.8851004,58.8112825],[-2.7180775,58.8142997],[-2.7161354,58.8715749],[-2.556881,58.8775984],[-2.5544533,58.9923453],[-2.5567617,59.0483775],[-2.391893,59.0485996],[-2.3918002,59.1106996],[-2.4733695,59.1106996],[-2.5591563,59.1783028],[-2.5630406,59.2210646],[-2.3921334,59.224046],[-2.3911409,59.2740075],[-2.3639512,59.2745036],[-2.3658933,59.285417],[-2.3911409,59.284921],[-2.3911409,59.3379505],[-2.2221759,59.3381981],[-2.2233897,59.395965],[-2.3758467,59.396583],[-2.3899271,59.4026383],[-2.4008516,59.3962122],[-2.5637882,59.3952604],[-2.5637882,59.3385811],[-2.7320164,59.3375306],[-2.7333896,59.3952604],[-3.0726511,59.3931174],[-3.0703404,59.3354759],[-3.0753186,59.3355634],[-3.0749753,59.3292593],[-3.0698254,59.3289091],[-3.069801,59.2196159],[-3.2363384,59.2166341],[-3.2336751,59.1606496],[-3.4032766,59.1588895],[-3.394086,58.9279316],[-3.5664497,58.9259268],[-3.5611089,58.8679885],[-3.392508,58.8699339],[-3.3894734,58.8698711],[-3.3891093,58.8684905],[-3.3912942,58.868616],[-3.3884161,58.7543084],[-3.2238208,58.7555677],[-3.2189655,58.691289],[-3.4634113,58.6905753],[-3.4551716,58.6341518],[-3.787508,58.6341518],[-3.7861347,58.5769211],[-3.9028645,58.5733411],[-3.9028645,58.6477304],[-4.0690327,58.6491594],[-4.0690327,58.5912376],[-4.7364521,58.5933845],[-4.7364521,58.6505884],[-5.0715351,58.6520173],[-5.0654779,58.5325854],[-5.2332047,58.5316087],[-5.2283494,58.4719947],[-5.2424298,58.4719947],[-5.2366034,58.4089731],[-5.2283494,58.4094818],[-5.2210664,58.3005859],[-5.5657939,58.2959933],[-5.5580254,58.2372573],[-5.4146722,58.2401326],[-5.4141866,58.2267768],[-5.3885749,58.2272242],[-5.382714,58.1198615],[-5.51043,58.1191362],[-5.5114011,58.006214],[-5.6745397,58.0041559],[-5.6716266,57.9449366],[-5.6716266,57.8887166],[-5.8347652,57.8856193],[-5.8277052,57.5988958],[-6.0384259,57.5986357],[-6.0389115,57.6459559],[-6.1981658,57.6456961],[-6.2076123,57.7600132],[-6.537067,57.7544033],[-6.5312406,57.6402392],[-6.7002056,57.6360809],[-6.6807844,57.5236293],[-6.8516915,57.5152857],[-6.8361545,57.3385811],[-6.6730158,57.3438213],[-6.674958,57.2850883],[-6.5098772,57.2850883],[-6.4982244,57.1757637],[-6.3506228,57.1820797],[-6.3312015,57.1251969],[-6.1797156,57.1230884],[-6.1719471,57.0682265],[-6.4593819,57.059779],[-6.4564687,57.1093806],[-6.6671895,57.1062165],[-6.6730158,57.002708],[-6.5021087,57.0048233],[-6.4836097,56.8917522],[-6.3266104,56.8894062],[-6.3156645,56.7799312],[-6.2146739,56.775675],[-6.2146739,56.7234965],[-6.6866107,56.7224309],[-6.6769001,56.6114413],[-6.8419809,56.607166],[-6.8400387,56.5483307],[-7.1546633,56.5461895],[-7.1488369,56.4872592],[-6.9915246,56.490476],[-6.9876404,56.4325329],[-6.6827265,56.4314591],[-6.6769001,56.5472601],[-6.5292985,56.5504717],[-6.5234721,56.4379018],[-6.3661598,56.4368281],[-6.3642177,56.3766524],[-6.5273563,56.3712749],[-6.5171745,56.2428427],[-6.4869621,56.247421],[-6.4869621,56.1893882],[-6.3001945,56.1985572],[-6.3029411,56.2581017],[-5.9019401,56.256576],[-5.8964469,56.0960466],[-6.0282829,56.0883855],[-6.0392692,56.1557502],[-6.3853385,56.1542205],[-6.3606193,55.96099],[-6.2123039,55.9640647],[-6.2047508,55.9202269],[-6.5185478,55.9129158],[-6.5061881,55.7501763],[-6.6764762,55.7409005],[-6.6599967,55.6263176],[-6.3551261,55.6232161],[-6.3578727,55.5689002],[-6.0392692,55.5720059],[-6.0310294,55.6247669],[-5.7398917,55.6309694],[-5.7371452,55.4569279],[-5.8964469,55.4600426],[-5.8964469,55.2789864],[-5.4350211,55.2821151],[-5.4405143,55.4506979],[-5.2867057,55.4569279],[-5.3086784,55.4070602],[-4.9735954,55.4008223],[-4.9845817,55.2038242],[-5.1493766,55.2038242],[-5.1411369,55.037337],[-5.2152946,55.0341891],[-5.2112173,54.8018593]],[[-2.1646559,60.1622059],[-1.9930299,60.1609801],[-1.9946862,60.1035151],[-2.1663122,60.104743],[-2.1646559,60.1622059]],[[-1.5360658,59.8570831],[-1.3653566,59.8559841],[-1.366847,59.7975565],[-1.190628,59.7964199],[-1.1862046,59.9695391],[-1.0078652,59.9683948],[-1.0041233,60.114145],[-0.8360832,60.1130715],[-0.834574,60.1716772],[-1.0074262,60.1727795],[-1.0052165,60.2583924],[-0.8299659,60.2572778],[-0.826979,60.3726551],[-0.6507514,60.3715381],[-0.6477198,60.4882292],[-0.9984896,60.4904445],[-0.9970279,60.546555],[-0.6425288,60.5443201],[-0.6394896,60.6606792],[-0.8148133,60.6617806],[-0.8132987,60.7196112],[-0.6383298,60.7185141],[-0.635467,60.8275393],[-0.797568,60.8285523],[-0.9941426,60.8297807],[-0.9954966,60.7782667],[-1.1670282,60.7793403],[-1.1700357,60.6646181],[-1.5222599,60.6668304],[-1.5237866,60.6084426],[-1.6975673,60.609536],[-1.7021271,60.4345249],[-1.5260578,60.4334111],[-1.5275203,60.3770719],[-1.8751127,60.3792746],[-1.8781372,60.2624647],[-1.7019645,60.2613443],[-1.7049134,60.1470532],[-1.528659,60.1459283],[-1.5360658,59.8570831]],[[-0.9847667,60.8943762],[-0.9860347,60.8361105],[-0.8078362,60.8351904],[-0.8065683,60.8934578],[-0.9847667,60.8943762]],[[-7.7696901,56.8788231],[-7.7614504,56.7608274],[-7.6009049,56.7641903],[-7.5972473,56.819332],[-7.4479894,56.8203948],[-7.4489319,56.8794098],[-7.2841369,56.8794098],[-7.2813904,57.0471152],[-7.1303283,57.0515969],[-7.1330749,57.511801],[-6.96828,57.5147514],[-6.9765198,57.6854668],[-6.8062317,57.6913392],[-6.8089782,57.8041985],[-6.6496765,57.8071252],[-6.6441833,57.8612267],[-6.3200866,57.8626878],[-6.3200866,58.1551617],[-6.1607849,58.1522633],[-6.1552917,58.20874],[-5.9850036,58.2101869],[-5.9904968,58.2680163],[-6.1497986,58.2665717],[-6.1415588,58.5557514],[-6.3173401,58.5557514],[-6.3091003,58.4983923],[-6.4876282,58.4955218],[-6.4876282,58.4423768],[-6.6606628,58.4395018],[-6.6469299,58.3819525],[-6.8117248,58.3805125],[-6.8117248,58.3286357],[-6.9792663,58.3286357],[-6.9710266,58.2694608],[-7.1413147,58.2680163],[-7.1403816,58.0358742],[-7.3020636,58.0351031],[-7.3030347,57.9774797],[-7.1379539,57.9777372],[-7.1413526,57.9202792],[-7.1398961,57.8640206],[-7.3020636,57.862471],[-7.298484,57.7442293],[-7.4509193,57.7456951],[-7.4550392,57.6899522],[-7.6186131,57.6906048],[-7.6198341,57.7456951],[-7.7901222,57.7442293],[-7.7873756,57.6855477],[-7.6222332,57.6853817],[-7.6173779,57.5712602],[-7.788285,57.5709998],[-7.7892561,57.512109],[-7.7038025,57.5115874],[-7.6999183,57.4546902],[-7.5367796,57.4552126],[-7.5348375,57.5126306],[-7.4581235,57.5131521],[-7.4552103,57.2824165],[-7.6115515,57.2845158],[-7.6144647,57.2272651],[-7.451326,57.2256881],[-7.451326,57.1103873],[-7.6164068,57.1088053],[-7.603783,56.8792358],[-7.7696901,56.8788231]],[[-1.7106618,59.5626284],[-1.5417509,59.562215],[-1.5423082,59.5037224],[-1.7112191,59.5041365],[-1.7106618,59.5626284]]],"terms_url":"http://geo.nls.uk/maps/","terms_text":"National Library of Scotland Historic Maps"},{"id":"NLS-OS-6inch-Scotland-hist","name":"NLS - OS 6-inch Scotland 1842-82","type":"tms","template":"http://geo.nls.uk/maps/os/six_inch/{zoom}/{x}/{-y}.png","scaleExtent":[5,16],"polygon":[[[-5.2112173,54.8018593],[-5.0642752,54.8026508],[-5.0560354,54.6305176],[-4.3158316,54.6297227],[-4.3117117,54.7448258],[-3.8530325,54.7464112],[-3.8530325,54.8034424],[-3.5522818,54.8034424],[-3.5522818,54.8374644],[-3.468511,54.8406277],[-3.4657644,54.8983158],[-3.3847403,54.8991055],[-3.3888601,54.9559214],[-3.0920786,54.9539468],[-3.0392359,54.9923274],[-3.0212713,55.0493881],[-2.9591232,55.0463283],[-2.9202807,55.0666294],[-2.7857081,55.068652],[-2.7852225,55.0914426],[-2.7337562,55.0922761],[-2.737616,55.151204],[-2.7648395,55.1510672],[-2.7013114,55.1722505],[-2.6635459,55.2192808],[-2.6460364,55.2188891],[-2.629042,55.2233933],[-2.6317886,55.2287781],[-2.6235488,55.2446345],[-2.6197723,55.2454663],[-2.6099017,55.2454174],[-2.6099876,55.2486466],[-2.6408121,55.2590039],[-2.6247896,55.2615631],[-2.6045186,55.2823081],[-2.5693176,55.296132],[-2.5479542,55.3121617],[-2.5091116,55.3234891],[-2.4780376,55.3494471],[-2.4421083,55.3533118],[-2.4052079,55.3439256],[-2.3726772,55.3447539],[-2.3221819,55.3687665],[-2.3241241,55.3999337],[-2.2576062,55.425015],[-2.1985547,55.4273529],[-2.1484296,55.4717466],[-2.1944348,55.484199],[-2.2040479,55.529306],[-2.2960584,55.6379722],[-2.2177808,55.6379722],[-2.1059266,55.7452498],[-1.9716874,55.7462161],[-1.9697453,55.9190951],[-2.1201694,55.9207115],[-2.1242893,55.9776133],[-2.3440159,55.9783817],[-2.3440159,56.0390349],[-2.5046909,56.0413363],[-2.500571,56.1003588],[-2.8823459,56.0957629],[-2.8823459,56.1722898],[-2.4126804,56.1692316],[-2.4181736,56.2334017],[-2.5857151,56.2303484],[-2.5719822,56.3416356],[-2.7257908,56.3462022],[-2.7312839,56.4343808],[-2.6928318,56.4343808],[-2.6928318,56.4859769],[-2.5307834,56.4935587],[-2.5307834,56.570806],[-2.5302878,56.6047947],[-2.3732428,56.6044452],[-2.3684363,56.7398824],[-2.3292975,56.7398824],[-2.3292975,56.7888065],[-2.3145346,56.7891826],[-2.3148779,56.7967036],[-2.171369,56.7967036],[-2.1703979,56.9710595],[-2.0101725,56.9694716],[-2.0101725,57.0846832],[-2.0817687,57.085349],[-2.0488097,57.1259963],[-2.0409133,57.126369],[-2.0383434,57.2411129],[-1.878118,57.2421638],[-1.8771469,57.2978175],[-1.9868771,57.2983422],[-1.9082209,57.3560063],[-1.8752048,57.3560063],[-1.8761758,57.3769527],[-1.8120857,57.4120111],[-1.7120661,57.4120111],[-1.7034646,57.6441388],[-1.8666032,57.6451781],[-1.8646611,57.7033351],[-3.1204292,57.7064705],[-3.1218025,57.7504652],[-3.4445259,57.7526635],[-3.4472724,57.7138067],[-3.5145637,57.7094052],[-3.5118171,57.6939956],[-3.7645027,57.6917938],[-3.7672492,57.6344975],[-3.842378,57.6288312],[-3.8438346,57.5965825],[-3.9414265,57.5916386],[-3.9404554,57.6537782],[-3.8894746,57.6529989],[-3.8826772,57.7676408],[-3.7224517,57.766087],[-3.7195385,57.8819201],[-3.9146888,57.8853352],[-3.916062,57.9546243],[-3.745774,57.9538956],[-3.7471473,58.0688409],[-3.5837256,58.0695672],[-3.5837256,58.1116689],[-3.4560096,58.1138452],[-3.4544646,58.228503],[-3.4379851,58.2283222],[-3.4243233,58.2427725],[-3.412307,58.2438567],[-3.3735115,58.2695057],[-3.3063919,58.2862038],[-3.1229154,58.2859395],[-3.123602,58.3443661],[-2.9574338,58.3447264],[-2.951254,58.6422011],[-2.8812162,58.6429157],[-2.8851004,58.8112825],[-2.7180775,58.8142997],[-2.7161354,58.8715749],[-2.556881,58.8775984],[-2.5544533,58.9923453],[-2.5567617,59.0483775],[-2.391893,59.0485996],[-2.3918002,59.1106996],[-2.4733695,59.1106996],[-2.5591563,59.1783028],[-2.5630406,59.2210646],[-2.3921334,59.224046],[-2.3911409,59.2740075],[-2.3639512,59.2745036],[-2.3658933,59.285417],[-2.3911409,59.284921],[-2.3911409,59.3379505],[-2.2221759,59.3381981],[-2.2233897,59.395965],[-2.3758467,59.396583],[-2.3899271,59.4026383],[-2.4008516,59.3962122],[-2.5637882,59.3952604],[-2.5637882,59.3385811],[-2.7320164,59.3375306],[-2.7333896,59.3952604],[-3.0726511,59.3931174],[-3.0703404,59.3354759],[-3.0753186,59.3355634],[-3.0749753,59.3292593],[-3.0698254,59.3289091],[-3.069801,59.2196159],[-3.2363384,59.2166341],[-3.2336751,59.1606496],[-3.4032766,59.1588895],[-3.394086,58.9279316],[-3.5664497,58.9259268],[-3.5611089,58.8679885],[-3.392508,58.8699339],[-3.3894734,58.8698711],[-3.3891093,58.8684905],[-3.3912942,58.868616],[-3.3884161,58.7543084],[-3.2238208,58.7555677],[-3.2189655,58.691289],[-3.4634113,58.6905753],[-3.4551716,58.6341518],[-3.787508,58.6341518],[-3.7861347,58.5769211],[-3.9028645,58.5733411],[-3.9028645,58.6477304],[-4.0690327,58.6491594],[-4.0690327,58.5912376],[-4.7364521,58.5933845],[-4.7364521,58.6505884],[-5.0715351,58.6520173],[-5.0654779,58.5325854],[-5.2332047,58.5316087],[-5.2283494,58.4719947],[-5.2424298,58.4719947],[-5.2366034,58.4089731],[-5.2283494,58.4094818],[-5.2210664,58.3005859],[-5.5657939,58.2959933],[-5.5580254,58.2372573],[-5.4146722,58.2401326],[-5.4141866,58.2267768],[-5.3885749,58.2272242],[-5.382714,58.1198615],[-5.51043,58.1191362],[-5.5114011,58.006214],[-5.6745397,58.0041559],[-5.6716266,57.9449366],[-5.6716266,57.8887166],[-5.8347652,57.8856193],[-5.8277052,57.5988958],[-6.0384259,57.5986357],[-6.0389115,57.6459559],[-6.1981658,57.6456961],[-6.2076123,57.7600132],[-6.537067,57.7544033],[-6.5312406,57.6402392],[-6.7002056,57.6360809],[-6.6807844,57.5236293],[-6.8516915,57.5152857],[-6.8361545,57.3385811],[-6.6730158,57.3438213],[-6.674958,57.2850883],[-6.5098772,57.2850883],[-6.4982244,57.1757637],[-6.3506228,57.1820797],[-6.3312015,57.1251969],[-6.1797156,57.1230884],[-6.1719471,57.0682265],[-6.4593819,57.059779],[-6.4564687,57.1093806],[-6.6671895,57.1062165],[-6.6730158,57.002708],[-6.5021087,57.0048233],[-6.4836097,56.8917522],[-6.3266104,56.8894062],[-6.3156645,56.7799312],[-6.2146739,56.775675],[-6.2146739,56.7234965],[-6.6866107,56.7224309],[-6.6769001,56.6114413],[-6.8419809,56.607166],[-6.8400387,56.5483307],[-7.1546633,56.5461895],[-7.1488369,56.4872592],[-6.9915246,56.490476],[-6.9876404,56.4325329],[-6.6827265,56.4314591],[-6.6769001,56.5472601],[-6.5292985,56.5504717],[-6.5234721,56.4379018],[-6.3661598,56.4368281],[-6.3642177,56.3766524],[-6.5273563,56.3712749],[-6.5171745,56.2428427],[-6.4869621,56.247421],[-6.4869621,56.1893882],[-6.3001945,56.1985572],[-6.3029411,56.2581017],[-5.9019401,56.256576],[-5.8964469,56.0960466],[-6.0282829,56.0883855],[-6.0392692,56.1557502],[-6.3853385,56.1542205],[-6.3606193,55.96099],[-6.2123039,55.9640647],[-6.2047508,55.9202269],[-6.5185478,55.9129158],[-6.5061881,55.7501763],[-6.6764762,55.7409005],[-6.6599967,55.6263176],[-6.3551261,55.6232161],[-6.3578727,55.5689002],[-6.0392692,55.5720059],[-6.0310294,55.6247669],[-5.7398917,55.6309694],[-5.7371452,55.4569279],[-5.8964469,55.4600426],[-5.8964469,55.2789864],[-5.4350211,55.2821151],[-5.4405143,55.4506979],[-5.2867057,55.4569279],[-5.3086784,55.4070602],[-4.9735954,55.4008223],[-4.9845817,55.2038242],[-5.1493766,55.2038242],[-5.1411369,55.037337],[-5.2152946,55.0341891],[-5.2112173,54.8018593]],[[-2.1646559,60.1622059],[-1.9930299,60.1609801],[-1.9946862,60.1035151],[-2.1663122,60.104743],[-2.1646559,60.1622059]],[[-1.5360658,59.8570831],[-1.3653566,59.8559841],[-1.366847,59.7975565],[-1.190628,59.7964199],[-1.1862046,59.9695391],[-1.0078652,59.9683948],[-1.0041233,60.114145],[-0.8360832,60.1130715],[-0.834574,60.1716772],[-1.0074262,60.1727795],[-1.0052165,60.2583924],[-0.8299659,60.2572778],[-0.826979,60.3726551],[-0.6507514,60.3715381],[-0.6477198,60.4882292],[-0.9984896,60.4904445],[-0.9970279,60.546555],[-0.6425288,60.5443201],[-0.6394896,60.6606792],[-0.8148133,60.6617806],[-0.8132987,60.7196112],[-0.6383298,60.7185141],[-0.635467,60.8275393],[-0.797568,60.8285523],[-0.9941426,60.8297807],[-0.9954966,60.7782667],[-1.1670282,60.7793403],[-1.1700357,60.6646181],[-1.5222599,60.6668304],[-1.5237866,60.6084426],[-1.6975673,60.609536],[-1.7021271,60.4345249],[-1.5260578,60.4334111],[-1.5275203,60.3770719],[-1.8751127,60.3792746],[-1.8781372,60.2624647],[-1.7019645,60.2613443],[-1.7049134,60.1470532],[-1.528659,60.1459283],[-1.5360658,59.8570831]],[[-0.9847667,60.8943762],[-0.9860347,60.8361105],[-0.8078362,60.8351904],[-0.8065683,60.8934578],[-0.9847667,60.8943762]],[[-7.7696901,56.8788231],[-7.7614504,56.7608274],[-7.6009049,56.7641903],[-7.5972473,56.819332],[-7.4479894,56.8203948],[-7.4489319,56.8794098],[-7.2841369,56.8794098],[-7.2813904,57.0471152],[-7.1303283,57.0515969],[-7.1330749,57.511801],[-6.96828,57.5147514],[-6.9765198,57.6854668],[-6.8062317,57.6913392],[-6.8089782,57.8041985],[-6.6496765,57.8071252],[-6.6441833,57.8612267],[-6.3200866,57.8626878],[-6.3200866,58.1551617],[-6.1607849,58.1522633],[-6.1552917,58.20874],[-5.9850036,58.2101869],[-5.9904968,58.2680163],[-6.1497986,58.2665717],[-6.1415588,58.5557514],[-6.3173401,58.5557514],[-6.3091003,58.4983923],[-6.4876282,58.4955218],[-6.4876282,58.4423768],[-6.6606628,58.4395018],[-6.6469299,58.3819525],[-6.8117248,58.3805125],[-6.8117248,58.3286357],[-6.9792663,58.3286357],[-6.9710266,58.2694608],[-7.1413147,58.2680163],[-7.1403816,58.0358742],[-7.3020636,58.0351031],[-7.3030347,57.9774797],[-7.1379539,57.9777372],[-7.1413526,57.9202792],[-7.1398961,57.8640206],[-7.3020636,57.862471],[-7.298484,57.7442293],[-7.4509193,57.7456951],[-7.4550392,57.6899522],[-7.6186131,57.6906048],[-7.6198341,57.7456951],[-7.7901222,57.7442293],[-7.7873756,57.6855477],[-7.6222332,57.6853817],[-7.6173779,57.5712602],[-7.788285,57.5709998],[-7.7892561,57.512109],[-7.7038025,57.5115874],[-7.6999183,57.4546902],[-7.5367796,57.4552126],[-7.5348375,57.5126306],[-7.4581235,57.5131521],[-7.4552103,57.2824165],[-7.6115515,57.2845158],[-7.6144647,57.2272651],[-7.451326,57.2256881],[-7.451326,57.1103873],[-7.6164068,57.1088053],[-7.603783,56.8792358],[-7.7696901,56.8788231]],[[-1.7106618,59.5626284],[-1.5417509,59.562215],[-1.5423082,59.5037224],[-1.7112191,59.5041365],[-1.7106618,59.5626284]]],"terms_url":"http://geo.nls.uk/maps/","terms_text":"National Library of Scotland Historic Maps"},{"id":"NLSC-EMAP5","name":"NLSC General Map with Contour line","type":"tms","template":"http://maps.nlsc.gov.tw/S_Maps/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=EMAP5_OPENDATA&STYLE=_null&TILEMATRIXSET=EPSG:3857&TILEMATRIX=EPSG:3857:{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image/png","description":"The emap from Taiwan National Land Surveying and Mapping Center","scaleExtent":[0,15],"polygon":[[[120.4570579,26.3970586],[120.44256,26.3708009],[120.44713,26.3531513],[120.4673009,26.3405831],[120.4978723,26.3340866],[120.5141036,26.3401594],[120.5341168,26.3641649],[120.5297045,26.3842128],[120.4956661,26.4015754],[120.4570579,26.3970586]],[[119.9007221,25.9858609],[119.8960071,25.9648902],[119.9131301,25.9470399],[119.9503542,25.9278478],[119.9905563,25.9260623],[120.0198392,25.9363284],[120.0277804,25.9557423],[120.0275322,25.9845224],[119.9989937,26.0010288],[119.9404278,26.0028131],[119.9007221,25.9858609]],[[122.089,24.5485],[121.709,23.4541],[121.717,22.698],[121.818,21.95],[121.803,21.8735],[121.759,21.8087],[121.694,21.7653],[120.861,21.5631],[120.815,21.5576],[120.739,21.5728],[120.661,21.6296],[120.202,22.1809],[119.27,23.0542],[119.153,23.2049],[119.128,23.2485],[119.103,23.4],[119.118,23.4765],[119.137,23.512],[119.361,23.8885],[119.406,23.9407],[120.968,25.2284],[121.408,25.4687],[121.989,25.8147],[122.065,25.8299],[122.141,25.8147],[122.216,25.7663],[122.26,25.7015],[122.297,25.48],[122.196,24.9696],[122.089,24.5485]],[[116.6855033,20.8547596],[116.6309071,20.8149565],[116.5941695,20.7600846],[116.5797214,20.6967501],[116.5893056,20.6325865],[116.621766,20.5753367],[116.6731874,20.5319171],[116.7373678,20.5075783],[116.8065659,20.5052653],[116.8724354,20.5252581],[116.9270316,20.5651373],[116.9637692,20.6200797],[116.9782173,20.6834462],[116.9686331,20.7475883],[116.9361727,20.8047732],[116.8847512,20.8481147],[116.8205709,20.872399],[116.7513728,20.8747063],[116.6855033,20.8547596]],[[118.2261504,24.4563345],[118.2936439,24.4538527],[118.2851467,24.4751026],[118.3097372,24.4916821],[118.3767709,24.4729348],[118.4100947,24.5332285],[118.4479031,24.5284069],[118.4746394,24.4599272],[118.512992,24.4315479],[118.5065839,24.4202318],[118.4811625,24.4332439],[118.4610567,24.4089192],[118.426145,24.3970385],[118.3970055,24.4284184],[118.3765564,24.4258395],[118.3397565,24.3814628],[118.3031926,24.3705764],[118.2574234,24.4139213],[118.1381276,24.3724838],[118.1617342,24.4022433],[118.2094226,24.4139604],[118.1895784,24.4352201],[118.2176338,24.430205],[118.2261504,24.4563345]],[[120.2234496,26.30045],[120.2550843,26.3100412],[120.269888,26.3368716],[120.2591889,26.3652192],[120.2292544,26.3784823],[120.1976197,26.3688968],[120.182816,26.3420738],[120.1935151,26.3137205],[120.2234496,26.30045]],[[119.4374461,25.0047541],[119.4342024,24.9886249],[119.4541901,24.9722553],[119.4827444,24.9718376],[119.4898402,24.9937882],[119.4715877,25.0069239],[119.4374461,25.0047541]],[[119.8869914,26.180381],[119.893227,26.1203128],[119.9285109,26.1080224],[119.9779388,26.1223611],[120.0366775,26.151728],[120.1098054,26.2134921],[120.119269,26.2713663],[120.0629175,26.3172592],[119.9923706,26.3164881],[119.9467732,26.2898799],[119.9020362,26.2439761],[119.8869914,26.180381]]],"terms_url":"http://maps.nlsc.gov.tw/","terms_text":"NLSC EMAP 2015"},{"id":"MAPNIK","name":"OpenStreetMap (Standard)","type":"tms","template":"https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png","description":"The default OpenStreetMap layer.","scaleExtent":[0,19],"terms_url":"https://openstreetmap.org/","terms_text":"© OpenStreetMap contributors, CC-BY-SA","default":true},{"id":"OpenStreetMap-turistautak","name":"OpenStreetMap (turistautak)","type":"tms","template":"http://{switch:h,i,j}.tile.openstreetmap.hu/turistautak/{zoom}/{x}/{y}.png","scaleExtent":[0,18],"polygon":[[[16.1139147,46.8691038],[16.1789749,46.90662],[16.2000429,46.9415079],[16.2217547,46.9355441],[16.2462784,46.9463851],[16.2553226,46.9642125],[16.2764694,46.9626082],[16.290583,47.0139849],[16.3016199,46.9992329],[16.3414618,46.9965225],[16.3505162,47.0106313],[16.3734016,46.9985929],[16.412765,47.00475],[16.4332705,46.9927417],[16.4478119,47.003893],[16.479997,46.9941169],[16.5121988,47.0011695],[16.4635584,47.0322699],[16.4478586,47.0227481],[16.439123,47.029663],[16.445673,47.038872],[16.520323,47.056103],[16.473213,47.0736169],[16.4637199,47.09392],[16.500798,47.110058],[16.500035,47.123295],[16.5295349,47.1287419],[16.5171609,47.1496938],[16.454951,47.1425878],[16.4648728,47.1683349],[16.4555643,47.1875584],[16.4305559,47.1847022],[16.4195013,47.1949147],[16.4189215,47.2107114],[16.4371293,47.2097043],[16.4426335,47.2337117],[16.4313127,47.2527554],[16.4671512,47.2531652],[16.4892319,47.2798885],[16.4646338,47.3338455],[16.4337002,47.3528101],[16.458513,47.3670496],[16.4454619,47.4070195],[16.4831657,47.4093628],[16.4963821,47.3892659],[16.5170941,47.4100218],[16.5749054,47.4054243],[16.5807291,47.4191699],[16.661847,47.455595],[16.6706419,47.47422],[16.6523395,47.500342],[16.6895619,47.510161],[16.7147797,47.540199],[16.663545,47.567733],[16.673199,47.6049544],[16.6595343,47.6061018],[16.652758,47.622852],[16.6314207,47.6283176],[16.5739108,47.619667],[16.5147382,47.6461964],[16.4967504,47.6393149],[16.425464,47.6621679],[16.4437449,47.674205],[16.4480507,47.6964725],[16.4746984,47.6811576],[16.4872245,47.6979767],[16.5521729,47.7225519],[16.5363779,47.736785],[16.5479799,47.751544],[16.6095193,47.7603722],[16.6344148,47.7590843],[16.65729,47.7414879],[16.7209405,47.7353565],[16.7534062,47.6828165],[16.8301587,47.681058],[16.8394284,47.7045139],[16.8668943,47.7211462],[16.876679,47.6876452],[17.0937421,47.7077706],[17.0706562,47.7285366],[17.0516019,47.7938499],[17.0749479,47.8084997],[17.047139,47.8285635],[17.0519452,47.8377691],[17.0105513,47.8581765],[17.0163878,47.8673325],[17.0857537,47.8746239],[17.113171,47.9271605],[17.0917133,47.9342916],[17.1183782,47.9601083],[17.094657,47.9708775],[17.2010289,48.019992],[17.241769,48.0224651],[17.257955,47.998655],[17.334651,47.993125],[17.4029929,47.947849],[17.4539199,47.8852579],[17.5267369,47.865509],[17.5675779,47.8151289],[17.608402,47.8218859],[17.7085789,47.756678],[17.7798739,47.739487],[17.8660959,47.74575],[17.9001292,47.7392633],[17.946867,47.744668],[17.9708709,47.7578392],[18.0044103,47.7463402],[18.0380583,47.7576812],[18.2958774,47.7314616],[18.4540681,47.7651226],[18.4931553,47.7527552],[18.5590761,47.7659963],[18.6460866,47.7590921],[18.7260691,47.7890411],[18.7411784,47.8138245],[18.7920013,47.8230869],[18.8485417,47.8167221],[18.855876,47.826077],[18.828014,47.834291],[18.8135749,47.85555],[18.76353,47.8716049],[18.756858,47.896838],[18.776746,47.955092],[18.7552499,47.9763469],[18.8157429,47.993442],[18.819998,48.039676],[18.833268,48.048239],[18.8749364,48.0470707],[18.886674,48.058682],[18.9089819,48.051139],[18.9439039,48.058865],[18.9816099,48.0536009],[19.0148639,48.078179],[19.0585249,48.0573529],[19.0843619,48.072781],[19.107402,48.065596],[19.1352889,48.074146],[19.2413679,48.0536529],[19.2557819,48.0715559],[19.3031119,48.088711],[19.3865969,48.091914],[19.400018,48.082304],[19.454053,48.101436],[19.467354,48.083933],[19.4944199,48.109906],[19.492377,48.1396639],[19.5128219,48.154663],[19.504518,48.173443],[19.528967,48.190358],[19.526044,48.20313],[19.577502,48.2160149],[19.6308263,48.2500725],[19.6445239,48.2391719],[19.669857,48.239212],[19.691219,48.203894],[19.721125,48.201473],[19.74618,48.2165119],[19.7871629,48.19253],[19.7987329,48.19482],[19.8052829,48.183733],[19.782415,48.165039],[19.794812,48.153529],[19.821331,48.169081],[19.8452819,48.162742],[19.8551729,48.178431],[19.8601309,48.169409],[19.898745,48.1663119],[19.9145359,48.146863],[19.898298,48.1249019],[19.937383,48.131118],[19.9743939,48.1660049],[19.988706,48.1621679],[20.029038,48.1776849],[20.049449,48.1671999],[20.0729859,48.179606],[20.0700369,48.1917019],[20.1340909,48.225182],[20.1331879,48.253982],[20.206162,48.250979],[20.2038299,48.261906],[20.228466,48.262779],[20.2349469,48.279933],[20.286858,48.26164],[20.3257109,48.272794],[20.3374649,48.301667],[20.3656579,48.316606],[20.384077,48.3511809],[20.4098349,48.365857],[20.402532,48.382565],[20.4205349,48.403858],[20.416228,48.418536],[20.507929,48.489363],[20.5065069,48.534415],[20.537471,48.527878],[20.5464939,48.544292],[20.586595,48.535759],[20.6538739,48.561413],[20.836359,48.58284],[20.8378,48.57421],[20.8504359,48.5816329],[20.8453301,48.5665046],[20.8681549,48.551818],[20.922323,48.559453],[20.9346349,48.538341],[20.955882,48.533963],[20.9561979,48.521666],[20.9815849,48.5177669],[21.0151139,48.532313],[21.0663209,48.525894],[21.1174479,48.4910549],[21.1608749,48.521499],[21.179634,48.518232],[21.221061,48.537497],[21.305488,48.5222489],[21.313377,48.550841],[21.326875,48.554129],[21.319384,48.561201],[21.4154499,48.558951],[21.4226649,48.578821],[21.4406099,48.585104],[21.514091,48.551065],[21.5420199,48.508395],[21.6139329,48.509416],[21.6201879,48.469826],[21.663549,48.417961],[21.6645609,48.392164],[21.7017409,48.380695],[21.711871,48.357617],[21.8174139,48.332787],[21.8352029,48.3346409],[21.837213,48.363253],[21.8842979,48.356047],[21.8848429,48.367539],[21.897883,48.36256],[21.8997959,48.3702229],[21.9281859,48.3615969],[21.9268059,48.370899],[21.949198,48.378728],[21.994463,48.377323],[22.0213259,48.392749],[22.0546049,48.377528],[22.0764859,48.387241],[22.086743,48.371564],[22.1359089,48.380519],[22.131056,48.3912329],[22.152768,48.3962409],[22.1561913,48.4093076],[22.2125722,48.4256468],[22.2371405,48.4100396],[22.2654858,48.4098675],[22.2398761,48.3870055],[22.2675722,48.3611612],[22.3178106,48.3545437],[22.3132861,48.3250712],[22.3372944,48.3079113],[22.3384267,48.2792074],[22.3847547,48.2339632],[22.4006407,48.249198],[22.4328384,48.2525166],[22.456386,48.2423109],[22.4899029,48.2534237],[22.4972201,48.2395546],[22.5161491,48.237965],[22.5311088,48.2094282],[22.5711442,48.1961428],[22.5616362,48.1816066],[22.5982449,48.144756],[22.5902763,48.1073414],[22.6754492,48.091997],[22.7347192,48.119848],[22.7576242,48.1200599],[22.7703914,48.1090162],[22.772319,48.1218742],[22.8027688,48.1221112],[22.8025285,48.1070813],[22.8254256,48.1175119],[22.8364365,48.080249],[22.8611284,48.0750312],[22.8677955,48.0524256],[22.8820424,48.0548053],[22.8659692,48.0113165],[22.835562,47.9905988],[22.8407599,47.9813636],[22.8725729,47.9752683],[22.8697274,47.9659593],[22.8915652,47.9672446],[22.897435,47.9540629],[22.8473299,47.9077579],[22.7928135,47.8908586],[22.7586924,47.8941446],[22.77775,47.8422508],[22.7136344,47.8360928],[22.6801938,47.7877527],[22.6111171,47.7717455],[22.5490018,47.7722246],[22.4812121,47.8108886],[22.4513078,47.803389],[22.4313319,47.7398119],[22.3566167,47.7486206],[22.3177714,47.7660887],[22.3176236,47.7433657],[22.2851369,47.7292757],[22.264325,47.7310675],[22.2589955,47.6979057],[22.2306796,47.693196],[22.1796501,47.5916115],[22.1289245,47.5978984],[22.0942787,47.5583628],[22.0782587,47.5621299],[22.0534529,47.5474795],[22.0712176,47.5380742],[22.0617872,47.5288029],[22.0451278,47.5398919],[22.0367222,47.5326653],[22.0071886,47.48362],[22.0327909,47.4508372],[22.0238835,47.3908631],[22.0119849,47.3758016],[21.9627373,47.381053],[21.9382461,47.3725317],[21.8777922,47.2857763],[21.8872845,47.2730473],[21.8534909,47.2397622],[21.8580662,47.1873597],[21.8124804,47.1667511],[21.7924092,47.1059751],[21.7268258,47.0983882],[21.6976037,47.057915],[21.6504151,47.0408303],[21.6888701,47.0019977],[21.6678744,46.9712337],[21.6814917,46.9652089],[21.6381964,46.9330487],[21.5984455,46.9274708],[21.6142857,46.8867275],[21.6016694,46.8668202],[21.520328,46.8373749],[21.5186086,46.8000703],[21.4831761,46.7650246],[21.5263389,46.7393249],[21.529369,46.7209721],[21.4923253,46.6859652],[21.4728438,46.6959075],[21.4299047,46.693937],[21.4309553,46.6781367],[21.4546661,46.660863],[21.4162375,46.6426231],[21.4097959,46.6218052],[21.3657038,46.6379501],[21.3300499,46.6318155],[21.3139733,46.617666],[21.3012351,46.5908672],[21.3207905,46.5828562],[21.2743045,46.5407362],[21.2600254,46.5021583],[21.2744188,46.4767333],[21.2964506,46.4762973],[21.3174343,46.4507288],[21.2895176,46.4154784],[21.2963256,46.4069601],[21.2250116,46.4136899],[21.2064214,46.4033825],[21.1992563,46.3479034],[21.1762269,46.3357664],[21.180497,46.3044494],[21.1155437,46.3018529],[21.1030549,46.2624637],[21.0708792,46.2539014],[21.0660827,46.2429394],[21.0366237,46.2480392],[21.0246723,46.2665329],[20.960817,46.2623039],[20.9465849,46.2793024],[20.9250701,46.2766191],[20.9218133,46.2618129],[20.8732713,46.2877555],[20.7756538,46.2759602],[20.7490474,46.2508489],[20.7618619,46.204563],[20.727401,46.2077485],[20.7341052,46.1939355],[20.7140487,46.1660531],[20.6843592,46.1447802],[20.6549178,46.1497739],[20.6394471,46.1267602],[20.5450486,46.1790935],[20.5014839,46.190334],[20.4949436,46.1709908],[20.4592293,46.1428837],[20.3975133,46.1574709],[20.3685325,46.1528554],[20.3557074,46.1696256],[20.2968136,46.1521542],[20.2549024,46.1158522],[20.2484757,46.1300956],[20.2330132,46.1241668],[20.1817362,46.1601137],[20.1364966,46.1449476],[20.1009667,46.1772756],[20.0636156,46.1437275],[20.0346142,46.1458888],[20.0158072,46.1768354],[19.9354075,46.1764243],[19.8533469,46.1500005],[19.8179747,46.1281652],[19.7585403,46.1479754],[19.6982054,46.1879317],[19.6827672,46.1800388],[19.661508,46.1904394],[19.6317396,46.1692993],[19.5676482,46.179106],[19.5604013,46.1665762],[19.5026585,46.1424492],[19.5271208,46.1210269],[19.4645033,46.0953827],[19.4665828,46.0820437],[19.4160037,46.0460453],[19.3803957,46.0358749],[19.3640923,46.0522965],[19.2819012,46.0148048],[19.2965348,45.9881173],[19.2856472,45.9968981],[19.1479857,45.9963445],[19.1338422,46.0370993],[19.104873,46.0401673],[19.0660427,46.0001999],[19.0796791,45.9636376],[19.0059803,45.9590674],[19.0092745,45.9236559],[18.9061334,45.9353801],[18.8794572,45.9166827],[18.8647137,45.9208493],[18.8685629,45.9113361],[18.8276792,45.9051714],[18.8220041,45.9145893],[18.8075092,45.9036055],[18.809247,45.8796189],[18.7956242,45.8784488],[18.7048857,45.9181883],[18.6700246,45.9108439],[18.6596602,45.9168934],[18.6651348,45.899279],[18.6412808,45.8890396],[18.6550179,45.8742393],[18.6277704,45.8733782],[18.6148449,45.8531438],[18.6236656,45.8398531],[18.5732391,45.8137578],[18.5749849,45.8004344],[18.559716,45.8037961],[18.5223504,45.7826858],[18.4906706,45.7947167],[18.4821905,45.7655032],[18.4562828,45.7695229],[18.4450763,45.7605195],[18.446853,45.737128],[18.40763,45.7397119],[18.3918949,45.7616983],[18.3642257,45.7729364],[18.3394214,45.7471605],[18.2968157,45.7612196],[18.2440473,45.7612305],[18.2307311,45.7790328],[18.1908702,45.7878759],[18.1681939,45.7762712],[18.1246514,45.7896277],[18.1068067,45.7708256],[18.0818922,45.7645205],[17.9958808,45.7957311],[17.9302095,45.7863301],[17.9066757,45.7925692],[17.8653145,45.7670064],[17.8262748,45.8099957],[17.8089784,45.8040989],[17.7809054,45.8174884],[17.7603399,45.811923],[17.7408624,45.8295975],[17.6632915,45.8381849],[17.6276211,45.8979446],[17.5700676,45.9358204],[17.4378254,45.9503823],[17.4258964,45.9272681],[17.4108059,45.9399665],[17.392149,45.9302149],[17.3828713,45.9475733],[17.3476208,45.9423413],[17.3438769,45.9605329],[17.3537711,45.9525011],[17.3905375,45.9581914],[17.387423,45.9661823],[17.3583539,45.9642737],[17.3754852,45.9686921],[17.3751895,45.9881054],[17.3635685,45.9915442],[17.3567202,45.9735836],[17.3339583,45.9960781],[17.3319847,45.9728948],[17.3129974,45.9665347],[17.323647,45.9887776],[17.2987653,45.9838652],[17.3041996,46.0021128],[17.2579726,46.0110256],[17.29632,46.0285169],[17.2541514,46.030005],[17.270955,46.0567055],[17.2324767,46.0592034],[17.2525145,46.0664725],[17.2313144,46.0790345],[17.2019916,46.0765488],[17.2331299,46.0989644],[17.2104017,46.1001693],[17.2129734,46.113855],[17.175927,46.1084583],[17.1743424,46.1287608],[17.1865197,46.1332308],[17.1810983,46.1505485],[17.1562307,46.1585819],[17.1592857,46.1696818],[17.1261012,46.1684495],[17.1227409,46.1789791],[17.0752482,46.1889531],[17.0661614,46.2022984],[16.9735401,46.2251982],[16.973954,46.2431113],[16.9504085,46.2415285],[16.8862356,46.2814598],[16.8713682,46.3252767],[16.8802109,46.3356966],[16.8615374,46.3452401],[16.8656232,46.3556489],[16.8521959,46.3517189],[16.8498589,46.3626245],[16.8352859,46.3638195],[16.8376499,46.3748032],[16.8261732,46.3670994],[16.7933444,46.387385],[16.7592072,46.3776563],[16.7298672,46.40149],[16.7182119,46.3898704],[16.6772872,46.4494536],[16.6631785,46.4486958],[16.6663732,46.4582995],[16.6187915,46.4619875],[16.604468,46.4760773],[16.5235997,46.5053761],[16.5325768,46.5314027],[16.5176728,46.5363516],[16.5084107,46.5652692],[16.4829969,46.5660383],[16.4834008,46.5786011],[16.4455713,46.610952],[16.4248583,46.6131645],[16.385941,46.6442485],[16.3915424,46.6637257],[16.4198454,46.6584771],[16.4286335,46.6939737],[16.3689211,46.7040082],[16.3798266,46.7153869],[16.3710856,46.7222945],[16.3570587,46.7142387],[16.3185954,46.7541449],[16.3305417,46.7752119],[16.3121626,46.7780033],[16.3127666,46.797314],[16.3406373,46.8051851],[16.3508404,46.8300552],[16.3403309,46.8468762],[16.3015007,46.8595142],[16.2913867,46.8728341],[16.2332296,46.8766702],[16.1560866,46.8537074],[16.126571,46.8569079],[16.1139147,46.8691038]]],"terms_url":"http://openstreetmap.hu/","terms_text":"OpenStreetMap.hu"},{"id":"osm-gps","name":"OpenStreetMap GPS traces","type":"tms","template":"http://{switch:a,b,c}.gps-tile.openstreetmap.org/lines/{zoom}/{x}/{y}.png","description":"Public GPS traces uploaded to OpenStreetMap.","scaleExtent":[0,20],"terms_url":"http://www.openstreetmap.org/copyright","terms_text":"© OpenStreetMap contributors","terms_html":"<span style='display: inline-block; padding: 0 8px; background-color: rgba(0,0,0,0.5);'><span style='color: #eee;'>GPS Direction:</span> <span style='font-size: 15px; padding-left: 2px; font-weight: bold;'> <span style='color: #0ee;'>&larr;</span> <span style='color: #96f;'>&darr;</span> <span style='color: #6e0;'>&uarr;</span> <span style='color: #f63;'>&rarr;</span> </span></span> © <a href='http://www.openstreetmap.org/copyright'>OpenStreetMap contributors</a>.","overlay":true},{"id":"lu.geoportail.opendata.ortho2010","name":"Ortho 2010 geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2010/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts","terms_text":"Administration du Cadastre et de la Topographie"},{"id":"lu.geoportail.opendata.ortho2013","name":"Ortho 2013 geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2013/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts","terms_text":"Administration du Cadastre et de la Topographie"},{"id":"lu.geoportail.opendata.ortho2016","name":"Ortho 2016 geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2016/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts","terms_text":"Administration du Cadastre et de la Topographie","best":true},{"id":"OS-historic-25k-OSM_Limited","name":"OS 1:25k historic (OSM)","type":"tms","template":"http://ooc.openstreetmap.org/os1/{zoom}/{x}/{y}.jpg","scaleExtent":[6,17],"polygon":[[[-6.4585407,49.9044128],[-6.3872009,49.9841116],[-6.2296827,49.9896159],[-6.2171269,49.8680087],[-6.4551164,49.8591793],[-6.4585407,49.9044128]],[[-1.4495137,60.8634056],[-0.7167114,60.8545122],[-0.7349744,60.4359756],[-0.6938826,60.4168218],[-0.7258429,60.3942735],[-0.7395401,60.0484714],[-0.9267357,60.0461918],[-0.9381501,59.8266157],[-1.4586452,59.831205],[-1.4455187,60.0535999],[-1.463211,60.0535999],[-1.4643524,60.0630002],[-1.5716475,60.0638546],[-1.5693646,60.1790005],[-1.643558,60.1807033],[-1.643558,60.1892162],[-1.8216221,60.1894999],[-1.8204807,60.3615507],[-1.8415973,60.3697345],[-1.8216221,60.3832755],[-1.8179852,60.5934321],[-1.453168,60.5934321],[-1.4495137,60.8634056]],[[-4.9089213,54.4242078],[-4.282598,54.4429861],[-4.2535417,54.029769],[-4.8766366,54.0221831],[-4.9089213,54.4242078]],[[-5.8667408,59.1444603],[-5.7759966,59.1470945],[-5.7720016,59.1014052],[-5.8621751,59.0990605],[-5.8667408,59.1444603]],[[-1.7065887,59.5703599],[-1.5579165,59.5693481],[-1.5564897,59.4965695],[-1.7054472,59.4975834],[-1.7065887,59.5703599]],[[-7.6865827,58.2940975],[-7.5330594,58.3006957],[-7.5256401,58.2646905],[-7.6797341,58.2577853],[-7.6865827,58.2940975]],[[-4.5338281,59.0359871],[-4.481322,59.0371616],[-4.4796099,59.0186583],[-4.5332574,59.0180707],[-4.5338281,59.0359871]],[[-8.6710698,57.8769896],[-8.4673234,57.8897332],[-8.4467775,57.7907],[-8.6510947,57.7779213],[-8.6710698,57.8769896]],[[-5.2395519,50.3530581],[-5.7920073,50.3384899],[-5.760047,49.9317027],[-4.6551363,49.9581461],[-4.677965,50.2860073],[-4.244219,50.2801723],[-4.2487848,50.2042525],[-3.3812929,50.2042525],[-3.4223846,50.5188201],[-3.1164796,50.5246258],[-3.1210453,50.6579592],[-2.6736357,50.6619495],[-2.5953453,50.6394325],[-2.5905026,50.5728419],[-2.4791203,50.5733545],[-2.4758919,50.5066704],[-2.3967943,50.5056438],[-2.401637,50.5723293],[-1.0400296,50.5718167],[-1.0335726,50.7059289],[-0.549302,50.7038843],[-0.5460736,50.7886618],[-0.0924734,50.7856002],[-0.0876307,50.7181949],[0.4789659,50.7120623],[0.487037,50.8182467],[0.9761503,50.8049868],[0.9922927,51.0126311],[1.4491213,51.0004424],[1.4781775,51.4090372],[1.0229632,51.4271576],[1.035877,51.7640881],[1.6105448,51.7500992],[1.646058,52.1560003],[1.7267698,52.1540195],[1.749369,52.4481811],[1.7870672,52.4811624],[1.759102,52.522505],[1.7933451,52.9602749],[0.3798147,52.9958468],[0.3895238,53.2511239],[0.3478614,53.2511239],[0.3238912,53.282186],[0.3461492,53.6538501],[0.128487,53.6575466],[0.116582,53.6674703],[0.1350586,54.0655731],[-0.0609831,54.065908],[-0.0414249,54.4709448],[-0.5662701,54.4771794],[-0.5592078,54.6565127],[-1.1665638,54.6623485],[-1.1637389,54.842611],[-1.3316194,54.843909],[-1.3257065,55.2470842],[-1.529453,55.2487108],[-1.524178,55.6540122],[-1.7638798,55.6540122],[-1.7733693,55.9719116],[-2.1607858,55.9682981],[-2.1543289,56.0621387],[-2.4578051,56.0585337],[-2.4190635,56.641717],[-2.0962164,56.641717],[-2.0833025,57.0021322],[-1.9283359,57.0126802],[-1.9180966,57.3590895],[-1.7502161,57.3625721],[-1.7695869,57.7608634],[-3.6937554,57.7574187],[-3.7066693,57.9806386],[-3.5969013,57.9772149],[-3.6033582,58.1207277],[-3.0222335,58.1309566],[-3.0286905,58.5410788],[-2.8478961,58.530968],[-2.86081,58.8430508],[-2.679624,58.8414991],[-2.6841897,58.885175],[-2.6339665,58.9052239],[-2.679624,58.9335083],[-2.6887555,59.0229231],[-2.3668703,59.0229231],[-2.3702946,59.2652861],[-2.3429001,59.2821989],[-2.3714361,59.2996861],[-2.3737189,59.3707083],[-2.3429001,59.385825],[-2.3725775,59.400354],[-2.3714361,59.4259098],[-3.0734196,59.4230067],[-3.0711368,59.3433649],[-3.103097,59.3311405],[-3.0745611,59.3136695],[-3.0722782,59.232603],[-3.3850319,59.1484167],[-3.3747589,58.9352753],[-3.5653789,58.9323303],[-3.554829,58.69759],[-5.2808579,58.6667732],[-5.2534159,58.3514125],[-5.5068508,58.3437887],[-5.4761804,58.0323557],[-5.8974958,58.0212436],[-5.8522972,57.6171758],[-6.1396311,57.6137174],[-6.1541592,57.7423183],[-6.2913692,57.7380102],[-6.3365678,58.1398784],[-6.1121891,58.1466944],[-6.1473778,58.5106285],[-6.2934817,58.5416182],[-6.8413713,58.2977321],[-7.0057382,58.2929331],[-7.1016189,58.2064403],[-7.2573132,58.1793148],[-7.2531092,58.1004928],[-7.4070698,58.0905566],[-7.391347,57.7911354],[-7.790991,57.7733151],[-7.7624215,57.5444165],[-7.698501,57.1453194],[-7.7943817,57.1304547],[-7.716764,56.7368628],[-7.0122067,56.7654359],[-6.979922,56.5453858],[-7.0638622,56.5453858],[-7.0444914,56.3562587],[-6.500676,56.3812917],[-6.4491433,55.9793649],[-6.563287,55.9691456],[-6.5393742,55.7030135],[-6.5595521,55.6907321],[-6.5345315,55.6761713],[-6.5216176,55.5704434],[-5.8912587,55.5923416],[-5.8560127,55.2320733],[-5.2293639,55.2515958],[-5.1837064,54.6254139],[-3.6655956,54.6518373],[-3.6496155,54.4320023],[-3.5400375,54.4306744],[-3.530906,54.0290181],[-3.0697656,54.030359],[-3.0675737,53.8221388],[-3.0804876,53.7739911],[-3.0619239,53.7477488],[-3.0611168,53.6737049],[-3.2144691,53.6708361],[-3.2057699,53.4226163],[-3.2799632,53.355224],[-3.2896655,53.3608441],[-3.3327547,53.364931],[-3.3761293,53.3540318],[-4.0888976,53.3433102],[-4.0945474,53.4612036],[-4.697412,53.4448624],[-4.6882805,53.3318598],[-4.7202407,53.2895771],[-4.6837148,53.2486184],[-4.6768661,53.1542644],[-4.8480816,53.1446807],[-4.8178336,52.7440299],[-4.2545751,52.7558939],[-4.228876,52.254876],[-4.2607571,52.2536408],[-4.2724603,52.2432637],[-4.8136263,52.230095],[-4.8079191,52.1138892],[-5.3889104,52.0991668],[-5.3717888,51.9129667],[-5.4208706,51.9101502],[-5.414022,51.8453218],[-5.3683645,51.8474373],[-5.3466772,51.5595332],[-4.773676,51.5758518],[-4.7656859,51.4885146],[-4.1915432,51.4970427],[-4.1869775,51.4344663],[-3.6151177,51.4444274],[-3.6105519,51.3746543],[-3.1494115,51.3789292],[-3.1494115,51.2919281],[-4.3038735,51.2745907],[-4.2861169,51.0508721],[-4.8543277,51.0366633],[-4.8372201,50.7212787],[-5.2618345,50.7082694],[-5.2395519,50.3530581]],[[-2.1502671,60.171318],[-2.0030218,60.1696146],[-2.0013096,60.0997023],[-2.148555,60.1011247],[-2.1502671,60.171318]],[[-6.2086011,59.1163488],[-6.1229934,59.1166418],[-6.121852,59.0714985],[-6.2097426,59.0714985],[-6.2086011,59.1163488]],[[-4.4159559,59.0889036],[-4.4212022,59.0770848],[-4.3971904,59.0779143],[-4.3913388,59.0897328],[-4.4159559,59.0889036]]]},{"id":"OS-New_Popular_Edition-historic","name":"OS New Popular Edition historic","type":"tms","template":"http://ooc.openstreetmap.org/npe/{zoom}/{x}/{y}.png","polygon":[[[-5.8,49.8],[-5.8,55.8],[1.9,55.8],[1.9,49.8],[-5.8,49.8]]]},{"id":"OS-OpenData_Locator","name":"OS OpenData Locator","type":"tms","template":"http://tiles.itoworld.com/os_locator/{zoom}/{x}/{y}.png","polygon":[[[-9,49.8],[-9,61.1],[1.9,61.1],[1.9,49.8],[-9,49.8]]],"overlay":true},{"id":"OS-OpenData_StreetView","name":"OS OpenData StreetView","type":"tms","template":"http://os.openstreetmap.org/sv/{zoom}/{x}/{y}.png","scaleExtent":[1,18],"polygon":[[[-5.8292886,50.0229734],[-5.8292886,50.254819],[-5.373356,50.254819],[-5.373356,50.3530588],[-5.1756021,50.3530588],[-5.1756021,50.5925406],[-4.9970743,50.5925406],[-4.9970743,50.6935617],[-4.7965738,50.6935617],[-4.7965738,50.7822112],[-4.6949503,50.7822112],[-4.6949503,50.9607371],[-4.6043131,50.9607371],[-4.6043131,51.0692066],[-4.3792215,51.0692066],[-4.3792215,51.2521782],[-3.9039346,51.2521782],[-3.9039346,51.2916998],[-3.7171671,51.2916998],[-3.7171671,51.2453014],[-3.1486246,51.2453014],[-3.1486246,51.362067],[-3.7446329,51.362067],[-3.7446329,51.4340386],[-3.8297769,51.4340386],[-3.8297769,51.5298246],[-4.0852091,51.5298246],[-4.0852091,51.4939284],[-4.3792215,51.4939284],[-4.3792215,51.5427168],[-5.1444195,51.5427168],[-5.1444195,51.6296003],[-5.7387103,51.6296003],[-5.7387103,51.774037],[-5.5095393,51.774037],[-5.5095393,51.9802596],[-5.198799,51.9802596],[-5.198799,52.0973358],[-4.8880588,52.0973358],[-4.8880588,52.1831557],[-4.4957492,52.1831557],[-4.4957492,52.2925739],[-4.3015365,52.2925739],[-4.3015365,52.3685318],[-4.1811246,52.3685318],[-4.1811246,52.7933685],[-4.4413696,52.7933685],[-4.4413696,52.7369614],[-4.8569847,52.7369614],[-4.8569847,52.9317255],[-4.7288044,52.9317255],[-4.7288044,53.5038599],[-4.1578191,53.5038599],[-4.1578191,53.4113498],[-3.3110518,53.4113498],[-3.3110518,53.5038599],[-3.2333667,53.5038599],[-3.2333667,54.0159169],[-3.3926211,54.0159169],[-3.3926211,54.1980953],[-3.559644,54.1980953],[-3.559644,54.433732],[-3.7188984,54.433732],[-3.7188984,54.721897],[-4.3015365,54.721897],[-4.3015365,54.6140739],[-5.0473132,54.6140739],[-5.0473132,54.7532915],[-5.2298731,54.7532915],[-5.2298731,55.2190799],[-5.6532567,55.2190799],[-5.6532567,55.250088],[-5.8979647,55.250088],[-5.8979647,55.4822462],[-6.5933212,55.4822462],[-6.5933212,56.3013441],[-7.1727691,56.3013441],[-7.1727691,56.5601822],[-6.8171722,56.5601822],[-6.8171722,56.6991713],[-6.5315276,56.6991713],[-6.5315276,56.9066964],[-6.811679,56.9066964],[-6.811679,57.3716613],[-6.8721038,57.3716613],[-6.8721038,57.5518893],[-7.0973235,57.5518893],[-7.0973235,57.2411085],[-7.1742278,57.2411085],[-7.1742278,56.9066964],[-7.3719817,56.9066964],[-7.3719817,56.8075885],[-7.5202972,56.8075885],[-7.5202972,56.7142479],[-7.8306806,56.7142479],[-7.8306806,56.8994605],[-7.6494061,56.8994605],[-7.6494061,57.4739617],[-7.8306806,57.4739617],[-7.8306806,57.7915584],[-7.4736249,57.7915584],[-7.4736249,58.086063],[-7.1879804,58.086063],[-7.1879804,58.367197],[-6.8034589,58.367197],[-6.8034589,58.4155786],[-6.638664,58.4155786],[-6.638664,58.4673277],[-6.5178143,58.4673277],[-6.5178143,58.5625632],[-6.0536224,58.5625632],[-6.0536224,58.1568843],[-6.1470062,58.1568843],[-6.1470062,58.1105865],[-6.2799798,58.1105865],[-6.2799798,57.7122664],[-6.1591302,57.7122664],[-6.1591302,57.6667563],[-5.9339104,57.6667563],[-5.9339104,57.8892524],[-5.80643,57.8892524],[-5.80643,57.9621767],[-5.6141692,57.9621767],[-5.6141692,58.0911236],[-5.490819,58.0911236],[-5.490819,58.3733281],[-5.3199118,58.3733281],[-5.3199118,58.75015],[-3.5719977,58.75015],[-3.5719977,59.2091788],[-3.1944501,59.2091788],[-3.1944501,59.4759216],[-2.243583,59.4759216],[-2.243583,59.1388749],[-2.4611012,59.1388749],[-2.4611012,58.8185938],[-2.7407675,58.8185938],[-2.7407675,58.5804743],[-2.9116746,58.5804743],[-2.9116746,58.1157523],[-3.4865441,58.1157523],[-3.4865441,57.740386],[-1.7153245,57.740386],[-1.7153245,57.2225558],[-1.9794538,57.2225558],[-1.9794538,56.8760742],[-2.1658979,56.8760742],[-2.1658979,56.6333186],[-2.3601106,56.6333186],[-2.3601106,56.0477521],[-1.9794538,56.0477521],[-1.9794538,55.8650949],[-1.4745008,55.8650949],[-1.4745008,55.2499926],[-1.3221997,55.2499926],[-1.3221997,54.8221737],[-1.0550014,54.8221737],[-1.0550014,54.6746628],[-0.6618765,54.6746628],[-0.6618765,54.5527463],[-0.3247617,54.5527463],[-0.3247617,54.2865195],[0.0092841,54.2865195],[0.0092841,53.7938518],[0.2081962,53.7938518],[0.2081962,53.5217726],[0.4163548,53.5217726],[0.4163548,53.0298851],[1.4273388,53.0298851],[1.4273388,52.92021],[1.8333912,52.92021],[1.8333912,52.042488],[1.5235504,52.042488],[1.5235504,51.8261335],[1.2697049,51.8261335],[1.2697049,51.6967453],[1.116651,51.6967453],[1.116651,51.440346],[1.5235504,51.440346],[1.5235504,51.3331831],[1.4507565,51.3331831],[1.4507565,51.0207553],[1.0699883,51.0207553],[1.0699883,50.9008416],[0.7788126,50.9008416],[0.7788126,50.729843],[-0.7255952,50.729843],[-0.7255952,50.7038437],[-1.0074383,50.7038437],[-1.0074383,50.5736307],[-2.3625252,50.5736307],[-2.3625252,50.4846421],[-2.4987805,50.4846421],[-2.4987805,50.5736307],[-3.4096378,50.5736307],[-3.4096378,50.2057837],[-3.6922446,50.2057837],[-3.6922446,50.1347737],[-5.005468,50.1347737],[-5.005468,49.9474456],[-5.2839506,49.9474456],[-5.2839506,50.0229734],[-5.8292886,50.0229734]],[[-6.4580707,49.8673563],[-6.4580707,49.9499935],[-6.3978807,49.9499935],[-6.3978807,50.0053797],[-6.1799606,50.0053797],[-6.1799606,49.9168614],[-6.2540201,49.9168614],[-6.2540201,49.8673563],[-6.4580707,49.8673563]],[[-5.8343165,49.932156],[-5.8343165,49.9754641],[-5.7683254,49.9754641],[-5.7683254,49.932156],[-5.8343165,49.932156]],[[-1.9483797,60.6885737],[-1.9483797,60.3058841],[-1.7543149,60.3058841],[-1.7543149,60.1284428],[-1.5754914,60.1284428],[-1.5754914,59.797917],[-1.0316959,59.797917],[-1.0316959,60.0354518],[-0.6626918,60.0354518],[-0.6626918,60.9103862],[-1.1034395,60.9103862],[-1.1034395,60.8040022],[-1.3506319,60.8040022],[-1.3506319,60.6885737],[-1.9483797,60.6885737]],[[-2.203381,60.1968568],[-2.203381,60.0929443],[-1.9864011,60.0929443],[-1.9864011,60.1968568],[-2.203381,60.1968568]],[[-1.7543149,59.5698289],[-1.7543149,59.4639383],[-1.5373349,59.4639383],[-1.5373349,59.5698289],[-1.7543149,59.5698289]],[[-4.5585981,59.1370518],[-4.5585981,58.9569099],[-4.2867004,58.9569099],[-4.2867004,59.1370518],[-4.5585981,59.1370518]],[[-6.2787732,59.2025744],[-6.2787732,59.0227769],[-5.6650612,59.0227769],[-5.6650612,59.2025744],[-6.2787732,59.2025744]],[[-8.7163482,57.9440556],[-8.7163482,57.7305936],[-8.3592926,57.7305936],[-8.3592926,57.9440556],[-8.7163482,57.9440556]],[[-7.6077005,50.4021026],[-7.6077005,50.2688657],[-7.3907205,50.2688657],[-7.3907205,50.4021026],[-7.6077005,50.4021026]],[[-7.7304303,58.3579902],[-7.7304303,58.248313],[-7.5134503,58.248313],[-7.5134503,58.3579902],[-7.7304303,58.3579902]]]},{"id":"OS-Scottish_Popular-historic","name":"OS Scottish Popular historic","type":"tms","template":"http://ooc.openstreetmap.org/npescotland/tiles/{zoom}/{x}/{y}.jpg","scaleExtent":[6,15],"polygon":[[[-7.8,54.5],[-7.8,61.1],[-1.1,61.1],[-1.1,54.5],[-7.8,54.5]]]},{"id":"Pangasinan_Bulacan_HiRes","name":"Pangasinán/Bulacan (Philippines HiRes)","type":"tms","template":"http://gravitystorm.dev.openstreetmap.org/imagery/philippines/{zoom}/{x}/{y}.png","scaleExtent":[12,19],"polygon":[[[120.336593,15.985768],[120.445995,15.984],[120.446134,15.974459],[120.476464,15.974592],[120.594247,15.946832],[120.598064,16.090795],[120.596537,16.197999],[120.368537,16.218527],[120.347576,16.042308],[120.336593,15.985768]],[[120.8268,15.3658],[121.2684,15.2602],[121.2699,14.7025],[120.695,14.8423],[120.8268,15.3658]]]},{"id":"Actueel_ortho25_WMTS","name":"PDOK Luchtfoto Beeldmateriaal 25cm","type":"tms","template":"http://geodata.nationaalgeoregister.nl/luchtfoto/wmts?FORMAT=image/jpeg&SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=2016_ortho25&STYLE=&FORMAT=image/jpeg&tileMatrixSet=OGC:1.0:GoogleMapsCompatible&tileMatrix={zoom}&tileRow={y}&tileCol={x}","description":"Landsdekkende dataset 25cm resolutie kleuren luchtfotos van de meest recente jaargang.","scaleExtent":[0,18],"polygon":[[[3.1437689,51.3598403],[3.1575018,51.2411346],[3.3387762,51.1154412],[3.9128119,51.0585083],[4.6571356,51.2806657],[4.8933416,51.2634825],[5.1789862,51.1257851],[5.3849798,51.1309561],[5.5442816,51.056782],[5.4206854,50.8595581],[5.4673773,50.7032633],[5.6568914,50.6192567],[6.1485296,50.6214349],[6.3023382,50.8578243],[6.2995916,50.9543819],[6.2638861,51.0183545],[6.3723761,51.0925902],[6.4012152,51.2011393],[6.3737494,51.2510206],[6.4451605,51.3158713],[6.4204413,51.5496009],[6.343537,51.6792182],[6.796723,51.7642909],[7.046662,51.9102418],[7.0713812,52.0455856],[7.2718817,52.1704147],[7.3075872,52.3855111],[7.2059637,52.5319494],[7.282868,52.614576],[7.2993475,52.7785318],[7.4421698,52.9782705],[7.43393,53.2831352],[7.0439154,53.5515877],[6.7829901,53.6363531],[6.2391668,53.5401639],[5.6871039,53.5124077],[5.173493,53.4388477],[4.8164373,53.2338445],[4.6516424,53.0658312],[4.5417791,52.4859784],[4.3220526,52.1956753],[4.08104,52.0136897],[4.0219885,52.0162253],[3.9368445,51.9637937],[3.9519507,51.8807927],[3.844834,51.8494157],[3.6237341,51.7075226],[3.6553198,51.6606936],[3.6333471,51.6274583],[3.5468298,51.622343],[3.3957678,51.5609145],[3.3820349,51.5173524],[3.4987646,51.4326715],[3.3298498,51.3855587],[3.1437689,51.3598403]]],"terms_text":"Nationaal Georegister, CC BY 4.0","best":true},{"id":"PNOA-Spain-TMS","name":"PNOA Spain","type":"tms","template":"http://www.ign.es/wmts/pnoa-ma?request=GetTile&service=WMTS&VERSION=1.0.0&Layer=OI.OrthoimageCoverage&Style=default&Format=image/png&TileMatrixSet=GoogleMapsCompatible&TileMatrix={zoom}&TileRow={y}&TileCol={x}","polygon":[[[-17.8846298,28.4460601],[-17.8939535,28.5225529],[-18.0212548,28.7481927],[-18.0224091,28.8038375],[-17.9424017,28.8726124],[-17.8911792,28.8737099],[-17.8903302,28.8515102],[-17.7675902,28.8537764],[-17.7669837,28.8312183],[-17.7412714,28.8319975],[-17.7394926,28.7642235],[-17.7139824,28.7649677],[-17.7129312,28.7303731],[-17.7574427,28.6931782],[-17.7570788,28.6741254],[-17.7457913,28.6743524],[-17.7457266,28.6165627],[-17.7519687,28.5833675],[-17.7622536,28.5591958],[-17.7833086,28.541667],[-17.7831575,28.4936643],[-17.808611,28.4925024],[-17.8060072,28.4468974],[-17.8846298,28.4460601]],[[-18.1661033,27.7851643],[-18.163494,27.6949247],[-18.0889827,27.6963366],[-18.0873398,27.6738724],[-18.0364092,27.6753701],[-18.0350079,27.6302571],[-17.9589987,27.6323976],[-17.8603269,27.7926025],[-17.8630328,27.8368793],[-17.8884015,27.8364947],[-17.8891263,27.8590536],[-17.9906491,27.8567467],[-18.0386803,27.7655831],[-18.1146412,27.7637873],[-18.1154627,27.7863613],[-18.1661033,27.7851643]],[[-17.36038,28.0639801],[-17.3629657,28.1757247],[-17.3375583,28.1763688],[-17.3384577,28.2213012],[-17.1857883,28.2238767],[-17.0820788,28.1351849],[-17.0808422,28.0679977],[-17.1315446,28.0668073],[-17.1563337,28.0214628],[-17.2321063,28.0203711],[-17.2319938,27.9980388],[-17.2576823,27.9978403],[-17.257851,28.0199741],[-17.3086658,28.0192298],[-17.36038,28.0639801]],[[-16.9278171,28.3275779],[-16.9286591,28.3721879],[-16.8776666,28.3729288],[-16.8780707,28.3954191],[-16.5214259,28.4226146],[-16.4457117,28.491135],[-16.4462506,28.535972],[-16.4205859,28.5362679],[-16.4209227,28.5588419],[-16.3443329,28.5597589],[-16.3446023,28.5822095],[-16.1912541,28.5837179],[-16.1916246,28.6068435],[-16.1279344,28.6078193],[-16.1277997,28.5921762],[-16.0995079,28.5925015],[-16.0993395,28.5163822],[-16.1648148,28.5161158],[-16.1647474,28.4938583],[-16.2385755,28.4484704],[-16.2653516,28.4476116],[-16.2658569,28.4030038],[-16.3167484,28.4017594],[-16.3163105,28.380189],[-16.3420763,28.3795075],[-16.3408301,28.2892963],[-16.415837,28.1976134],[-16.415096,28.1311312],[-16.5153297,28.0164796],[-16.6168433,28.01532],[-16.6168096,27.9930469],[-16.7184243,27.9919168],[-16.7190979,28.0371426],[-16.7446952,28.0367859],[-16.7453351,28.0818146],[-16.7706967,28.0816065],[-16.8223966,28.1259036],[-16.8231712,28.1708652],[-16.8487012,28.1707464],[-16.8502842,28.260791],[-16.8756457,28.2605537],[-16.8760836,28.2832162],[-16.9015125,28.2827713],[-16.9023882,28.3279337],[-16.9278171,28.3275779]],[[-15.8537427,27.9008901],[-15.8542032,27.9901812],[-15.828953,27.9906555],[-15.8291065,28.035578],[-15.7782992,28.0363232],[-15.7532793,28.0814298],[-15.7278756,28.0815652],[-15.7282593,28.1718567],[-15.4989741,28.1728039],[-15.4987438,28.1504075],[-15.4497785,28.1507459],[-15.4501622,28.1961425],[-15.3972827,28.1961425],[-15.3964385,28.0383554],[-15.3710348,28.0380167],[-15.3706511,28.0153212],[-15.3457847,28.0153212],[-15.3454777,27.9254406],[-15.3708046,27.9252372],[-15.3705743,27.8352137],[-15.395978,27.8347387],[-15.4209979,27.7879673],[-15.4718052,27.7893932],[-15.471882,27.7666454],[-15.522766,27.7667813],[-15.5477092,27.7216112],[-15.6236132,27.7213395],[-15.6241504,27.741991],[-15.7007451,27.7433495],[-15.801669,27.8110501],[-15.8537427,27.9008901]],[[-14.5215621,28.0467778],[-14.5224358,28.1184131],[-14.4157526,28.1156076],[-14.2168794,28.2278805],[-14.2153651,28.33903],[-14.1641672,28.4528287],[-14.1115132,28.4747955],[-14.0335806,28.7226671],[-13.9565217,28.7449351],[-13.9561722,28.7665857],[-13.8290221,28.7664325],[-13.8289639,28.7879765],[-13.8000741,28.7879255],[-13.8012972,28.7189894],[-13.827566,28.719347],[-13.8278572,28.6517968],[-13.8025786,28.651899],[-13.8033941,28.5384172],[-13.8288474,28.5384684],[-13.8315061,28.3970177],[-13.9158189,28.2241438],[-13.9856445,28.2235696],[-14.0369588,28.1795787],[-14.1387139,28.1799894],[-14.1386556,28.1579103],[-14.2153651,28.1578076],[-14.2147244,28.1118888],[-14.2913173,28.0452356],[-14.3319673,28.0368713],[-14.4457846,28.0469834],[-14.4466583,28.0657961],[-14.4962835,28.0682631],[-14.495934,28.0458525],[-14.5215621,28.0467778]],[[-13.800662,28.8456579],[-13.8009273,28.8231121],[-13.775688,28.8230539],[-13.69729,28.8898184],[-13.69729,28.9127744],[-13.6072498,28.9117991],[-13.4388551,29.0002417],[-13.4374559,29.1351289],[-13.4117005,29.1349931],[-13.4105556,29.2229789],[-13.4592801,29.255586],[-13.4597392,29.2942023],[-13.5091254,29.2945638],[-13.5100581,29.3163453],[-13.5635382,29.3172941],[-13.5640564,29.2713764],[-13.5389228,29.2711956],[-13.5389747,29.2500375],[-13.5661293,29.2501279],[-13.5665956,29.2030039],[-13.5156549,29.2022349],[-13.5156549,29.1820579],[-13.5398038,29.1827819],[-13.5408921,29.137528],[-13.65782,29.1368528],[-13.713222,29.0935079],[-13.7663353,29.0934533],[-13.8502463,29.0165937],[-13.8518224,28.983425],[-13.8524443,28.914861],[-13.9013122,28.89245],[-13.9024005,28.8469779],[-13.800662,28.8456579]],[[1.6479916,38.9990693],[1.7321668,38.9993635],[1.7314703,39.0441733],[1.6489512,39.0431944],[1.6481552,39.1276358],[1.3948608,39.1265691],[1.3954412,39.0864199],[1.2281145,39.0852615],[1.2291095,39.0028958],[1.1448657,39.0018003],[1.1452803,38.8319988],[1.3113632,38.8331615],[1.3121924,38.7906483],[1.3946949,38.7916178],[1.3951924,38.7529597],[1.3112803,38.7519251],[1.3125919,38.6238804],[1.6489036,38.6251112],[1.6480745,38.7111504],[1.58456,38.7101152],[1.5811604,38.7005387],[1.5491544,38.7002798],[1.5197188,38.7092094],[1.50355,38.7253185],[1.4813282,38.9155064],[1.5518906,38.9254411],[1.5667328,38.9566554],[1.6487378,38.9583318],[1.6479916,38.9990693]],[[2.5450749,39.4166673],[2.43933,39.4161122],[2.438714,39.4846853],[2.439022,39.4993424],[2.3122308,39.4993424],[2.3119228,39.5417911],[2.2290722,39.5409994],[2.2283536,39.6260571],[2.3460076,39.6270851],[2.9270445,39.9601558],[3.1456647,39.9600498],[3.1460753,40.0019797],[3.2313899,40.0019797],[3.2312872,39.8329231],[3.1482313,39.8331596],[3.1484366,39.7935717],[3.4814817,39.7931773],[3.4803472,39.5959027],[3.3150618,39.4784606],[3.3146179,39.3785504],[3.0830178,39.2499355],[2.9798608,39.2501482],[2.9790395,39.3334971],[2.7287424,39.3334177],[2.7288451,39.4581361],[2.6456865,39.4577397],[2.6453785,39.4996593],[2.5452802,39.4994216],[2.5450749,39.4166673]],[[3.8120402,40.0434431],[3.729082,40.0437979],[3.7286185,39.9584155],[3.8126633,39.9576011],[3.8122771,39.9164393],[3.9608975,39.9159813],[4.1938142,39.791308],[4.3150279,39.7905799],[4.3159934,39.8329294],[4.3987393,39.8320396],[4.3973664,39.9185834],[4.3158003,39.9193274],[4.3161865,40.0433985],[4.2318959,40.0443594],[4.2324752,40.0847793],[4.1491501,40.086109],[4.1490623,40.1255157],[4.0627981,40.1272166],[4.0624217,40.0849941],[3.8128687,40.085294],[3.8120402,40.0434431]],[[-8.8910646,41.8228891],[-9.1092038,42.5751065],[-9.0365469,42.730656],[-9.0883419,42.7269569],[-9.1466113,42.7750272],[-9.2185488,42.9016271],[-9.2760988,42.8605106],[-9.3099094,42.9311297],[-9.2789763,42.9821991],[-9.3099094,43.0600377],[-9.2523594,43.1041725],[-9.2314975,43.1703151],[-9.1473307,43.210176],[-9.06748,43.1991644],[-9.0336694,43.2426748],[-8.99842,43.2447709],[-8.9998588,43.2955793],[-8.9372732,43.3055265],[-8.92936,43.326986],[-8.8638969,43.3290792],[-8.8761263,43.3740655],[-8.8221732,43.3735426],[-8.785485,43.3191358],[-8.7063538,43.305003],[-8.6099575,43.3296025],[-8.5509688,43.3233227],[-8.5243519,43.3364048],[-8.5250713,43.3646525],[-8.45745,43.3918416],[-8.3610538,43.4111803],[-8.3603344,43.4634161],[-8.3344369,43.5797394],[-8.2776063,43.5708796],[-8.0646713,43.7239184],[-7.9992081,43.7233986],[-7.9171994,43.7826357],[-7.8560525,43.7914643],[-7.83591,43.7374337],[-7.6628443,43.809819],[-7.3188932,43.6782695],[-7.1997467,43.5830817],[-6.2488228,43.6075032],[-6.1229322,43.5790105],[-5.8520425,43.6798953],[-5.6036334,43.5708672],[-5.2855347,43.5619084],[-5.1787525,43.4991591],[-4.9089869,43.4836655],[-4.6156167,43.4192021],[-4.1839917,43.4249168],[-3.8029478,43.5195394],[-3.7400025,43.4869277],[-3.5612827,43.5423572],[-3.1083013,43.3816347],[-2.9385737,43.4624573],[-2.7452417,43.4755094],[-2.3046245,43.3170625],[-1.9854018,43.3563045],[-1.8552841,43.3972545],[-1.769802,43.3964383],[-1.7700492,43.3760501],[-1.7100474,43.3756908],[-1.7113451,43.3312527],[-1.7225915,43.3131806],[-1.6890375,43.3129108],[-1.6881106,43.3341294],[-1.6446695,43.3337248],[-1.6449785,43.3133155],[-1.6029903,43.3129528],[-1.6034352,43.2926624],[-1.5635905,43.2921227],[-1.5630468,43.3133844],[-1.4779905,43.3128355],[-1.3667723,43.2761368],[-1.3568809,43.2381533],[-1.3703692,43.1712972],[-1.4423067,43.0833554],[-1.4198262,43.0603647],[-1.3730668,43.051166],[-1.3640746,43.1115893],[-1.3020285,43.135217],[-1.2354864,43.1332484],[-1.2795481,43.0774443],[-1.1923239,43.0649635],[-1.0061856,43.0077821],[-0.942341,42.9748951],[-0.7562028,42.9821318],[-0.7148387,42.9610774],[-0.6968543,42.9031405],[-0.5511809,42.8220693],[-0.5044215,42.8484456],[-0.4288871,42.8200906],[-0.3164848,42.8655842],[-0.1456332,42.810856],[-0.0314324,42.7124874],[0.1861785,42.7540985],[0.3021777,42.7177729],[0.3642238,42.7428729],[0.4487504,42.7144695],[0.6276949,42.7223973],[0.6411832,42.8576747],[0.7149192,42.882718],[0.9675996,42.8181119],[1.108777,42.7989808],[1.1753192,42.7342872],[1.3632559,42.7415521],[1.4113736,42.7093914],[1.4806054,42.7103407],[1.4813006,42.5010664],[1.6443591,42.5020345],[1.6432777,42.5424539],[1.730407,42.5434214],[1.7316429,42.5011803],[2.0638621,42.5016359],[2.0645572,42.4590247],[2.3969309,42.4599364],[2.3976786,42.4178363],[2.4804823,42.4179732],[2.4809767,42.3759441],[2.6447922,42.3762636],[2.6444832,42.4592447],[2.8113266,42.4596094],[2.8112648,42.5010358],[3.063878,42.5008535],[3.063878,42.4591535],[3.2307832,42.4593359],[3.2304935,42.3764363],[3.3141469,42.3760369],[3.3141243,42.3339864],[3.397855,42.3340435],[3.3973912,42.290094],[3.3138923,42.2908368],[3.3139695,42.2070151],[3.1475896,42.2073012],[3.1475896,42.1260612],[3.2305478,42.1260039],[3.2466753,41.9529359],[3.1945206,41.8558943],[3.060537,41.7647419],[2.7835777,41.6371796],[2.26293,41.4271601],[2.1649151,41.2989297],[1.86008,41.2232228],[1.3763003,41.116273],[1.1793714,41.0464585],[1.0858526,41.048493],[0.758537,40.8195599],[0.9114042,40.733761],[0.8781331,40.6751363],[0.6650182,40.5358666],[0.5580112,40.5502166],[0.433919,40.3757589],[0.2675635,40.1919192],[0.1641534,40.0647234],[0.0751307,40.0144671],[0.010387,39.8952188],[-0.0939224,39.8116904],[-0.1847435,39.6311716],[-0.2908513,39.5036254],[-0.2863552,39.333431],[-0.1856427,39.1774612],[-0.2135185,39.1558487],[-0.1110076,38.9722246],[0.0094878,38.8826835],[0.1218901,38.872183],[0.2342925,38.798636],[0.2558737,38.7264162],[0.0958128,38.6133825],[-0.0022021,38.6070586],[-0.0570544,38.5269073],[-0.2719677,38.4762395],[-0.379874,38.3931234],[-0.3834708,38.3381297],[-0.4509122,38.3310763],[-0.5048654,38.2830943],[-0.4823849,38.1948095],[-0.429331,38.1658287],[-0.4545091,38.148859],[-0.5839966,38.1721913],[-0.6136708,38.1198599],[-0.6370505,37.9612228],[-0.6811123,37.9456238],[-0.7323677,37.8810656],[-0.7215771,37.7830562],[-0.688306,37.7340026],[-0.6641461,37.6231485],[-0.7193941,37.5878413],[-0.9196258,37.5375806],[-1.1107098,37.5164093],[-1.3383246,37.5286671],[-1.4408917,37.3903714],[-1.6766966,37.2765189],[-1.8540816,36.9122889],[-2.0683486,36.6929117],[-2.2158766,36.6619233],[-2.3721861,36.7801753],[-2.6812926,36.6591056],[-2.9201476,36.6675585],[-3.09402,36.712625],[-3.4610839,36.6548788],[-3.7280395,36.6929117],[-4.3743529,36.6633322],[-4.6571151,36.4404171],[-4.9188018,36.4531321],[-5.1699508,36.3513541],[-5.2841094,36.1970201],[-5.2680911,36.1241812],[-5.3524784,36.1224654],[-5.3516094,36.0401413],[-5.4365759,36.0388921],[-5.4353207,36.0034384],[-5.6888562,36.0036518],[-5.6899635,36.0405317],[-5.85506,36.0385595],[-5.8566821,36.1242077],[-5.9384817,36.1221487],[-5.9400265,36.1655625],[-5.9983445,36.1645024],[-6.0357297,36.1780957],[-6.0775178,36.2224132],[-6.1506113,36.2864561],[-6.231541,36.3770075],[-6.3358504,36.5310643],[-6.3214629,36.5816265],[-6.404191,36.6234958],[-6.4743301,36.7489673],[-6.4158808,36.7993866],[-6.490516,36.9173818],[-6.6298949,37.0194012],[-6.8744824,37.1083766],[-7.0426363,37.1850699],[-7.2647434,37.1843535],[-7.3753473,37.1535419],[-7.408316,37.1682196],[-7.4202886,37.2118318],[-7.4249231,37.2350505],[-7.4380543,37.2451969],[-7.4459717,37.3326142],[-7.4480958,37.3909382],[-7.4696271,37.4075829],[-7.4647029,37.4530494],[-7.5019723,37.516411],[-7.5191587,37.5229203],[-7.5219588,37.5723727],[-7.4501271,37.6695835],[-7.4249019,37.7599222],[-7.316662,37.839974],[-7.268329,37.988952],[-7.1536786,38.0155235],[-7.1177098,38.0553626],[-7.0142997,38.0243785],[-6.9963153,38.1075633],[-6.9614706,38.201254],[-7.080617,38.1570753],[-7.3402665,38.4402363],[-7.2638329,38.7380741],[-7.0435243,38.8729667],[-7.0615086,38.907962],[-6.9693387,39.0198308],[-7.0008114,39.0887867],[-7.1536786,39.0957658],[-7.1525545,39.1602899],[-7.2447245,39.1968854],[-7.2559647,39.2813308],[-7.3368944,39.3535074],[-7.3279022,39.4559917],[-7.5144901,39.5886496],[-7.5527069,39.6795427],[-7.0502684,39.6752171],[-6.9951913,39.8195433],[-6.9221297,39.8790868],[-6.886161,40.0229854],[-7.0412762,40.1347927],[-7.0176717,40.266146],[-6.8086034,40.3450071],[-6.8681766,40.4451649],[-6.8535643,40.6066433],[-6.837828,40.8757589],[-6.9536024,41.0370445],[-6.8018592,41.0395879],[-6.7681385,41.138706],[-6.6411239,41.2655616],[-6.5624422,41.2630269],[-6.217367,41.5791017],[-6.3162811,41.644652],[-6.5152332,41.6412921],[-6.5871707,41.6883151],[-6.5478299,41.8559743],[-6.6298836,41.9112057],[-7.1334461,41.9404756],[-7.1682909,41.8718791],[-7.4256922,41.7847727],[-7.9539833,41.8459271],[-8.130455,41.7805819],[-8.2518495,41.9078597],[-8.1293309,42.0348842],[-8.2484774,42.1008034],[-8.3676239,42.0557521],[-8.6070409,42.0340493],[-8.8910646,41.8228891]]],"terms_text":"PNOA","best":true},{"id":"Slovakia-Historic-Maps","name":"Slovakia Historic Maps","type":"tms","template":"http://tms.freemap.sk/historicke/{zoom}/{x}/{y}.png","scaleExtent":[0,12],"polygon":[[[16.8196949,47.4927236],[16.8196949,49.5030322],[22.8388318,49.5030322],[22.8388318,47.4927236],[16.8196949,47.4927236]]]},{"id":"Soskut_Pusztazamor_Tarnok_Diosd_orto_2017","name":"Sóskút, Pusztazámor, Tárnok, Diósd ortophoto 2017","type":"tms","template":"http://adam.openstreetmap.hu/mapproxy/tiles/1.0.0/Soskut-Tarnok-Pusztazamor-Diosd/mercator/{zoom}/{x}/{y}.png","polygon":[[[18.79273330201,47.37078533804],[18.791936169,47.37048036201],[18.79139114593,47.37063268281],[18.7901097,47.3717614],[18.7891647,47.3734529],[18.78721506824,47.37566027041],[18.7860339,47.37764910001],[18.7849824,47.3790513],[18.783695,47.3803226],[18.782665,47.3819499],[18.781399,47.3836789],[18.7793426,47.3871257],[18.776657,47.3893959],[18.764716,47.396699],[18.7616966,47.3996569],[18.7563102,47.4032821],[18.7583737,47.4065272],[18.75879657883,47.40776342073],[18.76199554897,47.41217224817],[18.7630394973,47.41315137445],[18.7659298,47.4147108],[18.7704058,47.4176575],[18.77247285488,47.41808545272],[18.7724806,47.4202978],[18.8086021,47.4404108],[18.8174212,47.435389],[18.8209188,47.4357228],[18.8280427,47.4375516],[18.8302099,47.4352584],[18.8358533,47.4375371],[18.8404882,47.4334586],[18.847655,47.4357228],[18.8510024,47.4328054],[18.8689996,47.4396086],[18.87361350924,47.43597176329],[18.87499181607,47.43342149293],[18.87386045593,47.43248349864],[18.8760377,47.4279677],[18.8605023,47.4230028],[18.8662101,47.4179794],[18.8724328,47.4108645],[18.8662959,47.4077278],[18.8696433,47.4047072],[18.86776892261,47.40207457802],[18.86509430105,47.40052438512],[18.87081279074,47.3983820654],[18.86772375423,47.39699336542],[18.86992005424,47.39655168559],[18.87648610191,47.39477958954],[18.87748924808,47.39494663392],[18.87866942005,47.39462343887],[18.88358322696,47.3899604942],[18.88290731029,47.3896699544],[18.88538567142,47.38530440107],[18.87747851924,47.38339390377],[18.88181296901,47.37604910406],[18.87914148883,47.37392756692],[18.88638345317,47.36922645965],[18.88205973224,47.36772957402],[18.87973157482,47.36640704749],[18.8746997507,47.36252284243],[18.87282220439,47.36136733615],[18.87027947025,47.36062605465],[18.86687842922,47.3585329683],[18.86234013156,47.35637438604],[18.85566679554,47.35199153827],[18.84873596744,47.34728120653],[18.83192388134,47.3384118486],[18.82497159557,47.34257772442],[18.81619540767,47.34925116493],[18.8107880743,47.35356882392],[18.80823461132,47.35599644336],[18.80645362453,47.35854023611],[18.80707589702,47.359019909],[18.80634633617,47.36021180457],[18.80465118007,47.36175250772],[18.80381433086,47.36335130305],[18.80054616504,47.36544732015],[18.79988097721,47.36617355102],[18.79416204336,47.36974865444],[18.79273330201,47.37078533804]],[[18.91871480064,47.4093812629],[18.91826418952,47.40997664498],[18.9206674488,47.41155945729],[18.92509845809,47.41372304121],[18.93473295288,47.41916790937],[18.94063381271,47.42241278301],[18.94981769638,47.41937843296],[18.95154503898,47.41749820965],[18.95689872818,47.41922598493],[18.95770339088,47.41877589767],[18.95755318717,47.41435467478],[18.9621129425,47.40506817222],[18.96266011314,47.40117592194],[18.96316436843,47.39903360927],[18.95446328239,47.3967314338],[18.95275739746,47.39526437993],[18.95201710777,47.39362297422],[18.95119098739,47.39356487042],[18.94692091064,47.39798783856],[18.94410995559,47.3984526281],[18.94161013679,47.39868502134],[18.93735078887,47.39633199249],[18.93617061691,47.39682584676],[18.93122462348,47.39999947627],[18.93120316581,47.40023186269],[18.92923978881,47.40204734624],[18.92561344223,47.40604845111],[18.92465857582,47.40635342305],[18.92293123321,47.40925782918],[18.91871480064,47.4093812629]]],"terms_url":"http://fototerkep.hu/","terms_text":"Fototerkep.hu","best":true},{"id":"South_Africa-CD_NGI-Aerial","name":"South Africa CD:NGI Aerial","type":"tms","template":"http://{switch:a,b,c}.aerial.openstreetmap.org.za/ngi-aerial/{zoom}/{x}/{y}.jpg","scaleExtent":[1,22],"polygon":[[[17.8396817,-32.7983384],[17.8893509,-32.6972835],[18.00364,-32.6982187],[18.0991679,-32.7485251],[18.2898747,-32.5526645],[18.2930182,-32.0487089],[18.105455,-31.6454966],[17.8529257,-31.3443951],[17.5480046,-30.902171],[17.4044506,-30.6374731],[17.2493704,-30.3991663],[16.9936977,-29.6543552],[16.7987996,-29.19437],[16.5494139,-28.8415949],[16.4498691,-28.691876],[16.4491046,-28.5515766],[16.6002551,-28.4825663],[16.7514057,-28.4486958],[16.7462192,-28.2458973],[16.8855148,-28.04729],[16.9929502,-28.0244005],[17.0529659,-28.0257086],[17.1007562,-28.0338839],[17.2011527,-28.0930546],[17.2026346,-28.2328424],[17.2474611,-28.2338215],[17.2507953,-28.198892],[17.3511919,-28.1975861],[17.3515624,-28.2442655],[17.4015754,-28.2452446],[17.4149122,-28.3489751],[17.4008345,-28.547997],[17.4526999,-28.5489733],[17.4512071,-28.6495106],[17.4983599,-28.6872054],[17.6028204,-28.6830048],[17.6499732,-28.6967928],[17.6525928,-28.7381457],[17.801386,-28.7381457],[17.9994276,-28.7560602],[18.0002748,-28.7956172],[18.1574507,-28.8718055],[18.5063811,-28.8718055],[18.6153564,-28.8295875],[18.9087513,-28.8277516],[19.1046973,-28.9488548],[19.1969071,-28.9378513],[19.243012,-28.8516164],[19.2314858,-28.802963],[19.2587296,-28.7009928],[19.4431493,-28.6973163],[19.5500289,-28.4958332],[19.6967264,-28.4939914],[19.698822,-28.4479358],[19.8507587,-28.4433291],[19.8497109,-28.4027818],[19.9953605,-28.399095],[19.9893671,-24.7497859],[20.2916682,-24.9192346],[20.4724562,-25.1501701],[20.6532441,-25.4529449],[20.733265,-25.6801957],[20.8281046,-25.8963498],[20.8429232,-26.215851],[20.6502804,-26.4840868],[20.6532441,-26.8204869],[21.0889134,-26.846933],[21.6727695,-26.8389998],[21.7765003,-26.6696268],[21.9721069,-26.6431395],[22.2803355,-26.3274702],[22.5707817,-26.1333967],[22.7752795,-25.6775246],[23.0005235,-25.2761948],[23.4658301,-25.2735148],[23.883717,-25.597366],[24.2364017,-25.613402],[24.603905,-25.7896563],[25.110704,-25.7389432],[25.5078447,-25.6855376],[25.6441766,-25.4823781],[25.8419267,-24.7805437],[25.846641,-24.7538456],[26.3928487,-24.6332894],[26.4739066,-24.5653312],[26.5089966,-24.4842437],[26.5861946,-24.4075775],[26.7300635,-24.3014458],[26.8567384,-24.2499463],[26.8574402,-24.1026901],[26.9215471,-23.8990957],[26.931831,-23.8461891],[26.9714827,-23.6994344],[27.0006074,-23.6367644],[27.0578041,-23.6052574],[27.1360547,-23.5203437],[27.3339623,-23.3973792],[27.5144057,-23.3593929],[27.5958145,-23.2085465],[27.8098634,-23.0994957],[27.8828506,-23.0620496],[27.9382928,-22.9496487],[28.0407556,-22.8255118],[28.2056786,-22.6552861],[28.3397223,-22.5639374],[28.4906093,-22.560697],[28.6108769,-22.5400248],[28.828175,-22.4550173],[28.9285324,-22.4232328],[28.9594116,-22.3090081],[29.0162574,-22.208335],[29.2324117,-22.1693453],[29.3531213,-22.1842926],[29.6548952,-22.1186426],[29.7777102,-22.1361956],[29.9292989,-22.1849425],[30.1166795,-22.2830348],[30.2563377,-22.2914767],[30.3033582,-22.3395204],[30.5061784,-22.3057617],[30.8374279,-22.284983],[31.0058599,-22.3077095],[31.1834152,-22.3232913],[31.2930586,-22.3674647],[31.5680579,-23.1903385],[31.5568311,-23.4430809],[31.6931122,-23.6175209],[31.7119696,-23.741136],[31.7774743,-23.8800628],[31.8886337,-23.9481098],[31.9144386,-24.1746736],[31.9948307,-24.3040878],[32.0166656,-24.4405988],[32.0077331,-24.6536578],[32.019643,-24.9140701],[32.035523,-25.0849767],[32.019643,-25.3821442],[31.9928457,-25.4493771],[31.9997931,-25.5165725],[32.0057481,-25.6078978],[32.0057481,-25.6624806],[31.9362735,-25.8403721],[31.9809357,-25.9546537],[31.8687838,-26.0037251],[31.4162062,-25.7277683],[31.3229117,-25.7438611],[31.2504595,-25.8296526],[31.1393001,-25.9162746],[31.1164727,-25.9912361],[30.9656135,-26.2665756],[30.8921689,-26.3279703],[30.8534616,-26.4035568],[30.8226943,-26.4488849],[30.8022583,-26.5240694],[30.8038369,-26.8082089],[30.9020939,-26.7807451],[30.9100338,-26.8489495],[30.9824859,-26.9082627],[30.976531,-27.0029222],[31.0034434,-27.0441587],[31.1543322,-27.1980416],[31.5015607,-27.311117],[31.9700183,-27.311117],[31.9700183,-27.120472],[31.9769658,-27.050664],[32.0002464,-26.7983892],[32.1069826,-26.7984645],[32.3114546,-26.8479493],[32.899986,-26.8516059],[32.886091,-26.9816971],[32.709427,-27.4785436],[32.6240724,-27.7775144],[32.5813951,-28.07479],[32.5387178,-28.2288046],[32.4275584,-28.5021568],[32.3640388,-28.5945699],[32.0702603,-28.8469827],[31.9878832,-28.9069497],[31.7764818,-28.969487],[31.4638459,-29.2859343],[31.359634,-29.3854348],[31.1680825,-29.6307408],[31.064863,-29.7893535],[31.0534493,-29.8470469],[31.0669933,-29.8640319],[31.0455459,-29.9502017],[30.9518556,-30.0033946],[30.8651833,-30.1024093],[30.7244725,-30.392502],[30.3556256,-30.9308873],[30.0972364,-31.2458274],[29.8673136,-31.4304296],[29.7409393,-31.5014699],[29.481312,-31.6978686],[28.8943171,-32.2898903],[28.5497137,-32.5894641],[28.1436499,-32.8320732],[28.0748735,-32.941689],[27.8450942,-33.082869],[27.3757956,-33.3860685],[26.8805407,-33.6458951],[26.5916871,-33.7480756],[26.4527308,-33.7935795],[26.206754,-33.7548943],[26.0077897,-33.7223961],[25.8055494,-33.7524272],[25.7511073,-33.8006512],[25.6529079,-33.8543597],[25.6529079,-33.9469768],[25.7195789,-34.0040115],[25.7202807,-34.0511235],[25.5508915,-34.063151],[25.3504571,-34.0502627],[25.2810609,-34.0020322],[25.0476316,-33.9994588],[24.954724,-34.0043594],[24.9496586,-34.1010363],[24.8770358,-34.1506456],[24.8762914,-34.2005281],[24.8532574,-34.2189562],[24.7645287,-34.2017946],[24.5001356,-34.2003254],[24.3486733,-34.1163824],[24.1988819,-34.1019039],[23.9963377,-34.0514443],[23.8017509,-34.0524332],[23.7493589,-34.0111855],[23.4973536,-34.009014],[23.4155191,-34.0434586],[23.4154284,-34.1140433],[22.9000853,-34.0993009],[22.8412418,-34.0547911],[22.6470321,-34.0502627],[22.6459843,-34.0072768],[22.570016,-34.0064081],[22.5050499,-34.0645866],[22.2519968,-34.0645866],[22.2221334,-34.1014701],[22.1621197,-34.1057019],[22.1712431,-34.1521766],[22.1576913,-34.2180897],[22.0015632,-34.2172232],[21.9496952,-34.3220009],[21.8611528,-34.4007145],[21.5614708,-34.4020114],[21.5468011,-34.3661242],[21.501744,-34.3669892],[21.5006961,-34.4020114],[21.4194886,-34.4465247],[21.1978706,-34.4478208],[21.0988193,-34.3991325],[21.0033746,-34.3753872],[20.893192,-34.3997115],[20.8976647,-34.4854003],[20.7446802,-34.4828092],[20.5042011,-34.486264],[20.2527197,-34.701477],[20.0803502,-34.8361855],[19.9923317,-34.8379056],[19.899074,-34.8275845],[19.8938348,-34.7936018],[19.5972963,-34.7961833],[19.3929677,-34.642015],[19.2877095,-34.6404784],[19.2861377,-34.5986563],[19.3474363,-34.5244458],[19.3285256,-34.4534372],[19.098001,-34.449981],[19.0725583,-34.3802371],[19.0023531,-34.3525593],[18.9520568,-34.3949373],[18.7975006,-34.3936403],[18.7984174,-34.1016376],[18.501748,-34.1015292],[18.4999545,-34.3616945],[18.4477325,-34.3620007],[18.4479944,-34.3522691],[18.3974362,-34.3514041],[18.3971742,-34.3022959],[18.3565705,-34.3005647],[18.3479258,-34.2020436],[18.2972095,-34.1950274],[18.2951139,-33.9937138],[18.3374474,-33.9914079],[18.3476638,-33.8492427],[18.3479258,-33.781555],[18.4124718,-33.7448849],[18.3615477,-33.6501624],[18.2992013,-33.585591],[18.2166839,-33.448872],[18.1389858,-33.3974083],[17.9473472,-33.1602647],[17.8855247,-33.0575732],[17.8485884,-32.9668505],[17.8396817,-32.8507302],[17.8396817,-32.7983384]]],"best":true},{"id":"South-Tyrol-Orthofoto2011","name":"South Tyrol Orthofoto 2011","type":"tms","template":"http://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_OF_2011_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg","scaleExtent":[0,18],"polygon":[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],"terms_url":"http://geoservices.buergernetz.bz.it/geokatalog/","terms_text":"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 3.0"},{"id":"South-Tyrol-Orthofoto2014","name":"South Tyrol Orthofoto 2014","type":"tms","template":"http://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_OF_2014_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg","scaleExtent":[0,18],"polygon":[[[12.23442,46.84254],[12.24913,46.82785],[12.24913,46.81945],[12.25753,46.81735],[12.26173,46.80686],[12.26594,46.80686],[12.26804,46.79637],[12.26173,46.79427],[12.27014,46.78587],[12.27224,46.76908],[12.28485,46.76698],[12.29745,46.7439],[12.30166,46.7439],[12.30166,46.7376],[12.28695,46.7376],[12.23652,46.72081],[12.18819,46.71451],[12.16298,46.70192],[12.10835,46.69353],[12.08944,46.68303],[12.05792,46.68093],[12.04531,46.67464],[12.03481,46.67464],[12.03061,46.68303],[12.0096,46.68303],[11.98438,46.66834],[11.94866,46.66414],[11.93816,46.65575],[11.90874,46.64525],[11.89193,46.64525],[11.8457,46.62846],[11.82049,46.62636],[11.80998,46.60748],[11.79528,46.60328],[11.78897,46.59069],[11.78057,46.58859],[11.76586,46.55501],[11.75325,46.54871],[11.73855,46.52982],[11.73224,46.52982],[11.72384,46.51513],[11.71543,46.51513],[11.71333,46.50254],[11.70913,46.50254],[11.70913,46.49624],[11.69652,46.48575],[11.69442,46.47735],[11.66711,46.47525],[11.66711,46.44587],[11.6608,46.44587],[11.64399,46.45846],[11.63769,46.45846],[11.63349,46.44587],[11.62508,46.44797],[11.62508,46.43957],[11.61878,46.43957],[11.61458,46.42278],[11.61037,46.42278],[11.61037,46.41649],[11.62508,46.41229],[11.62508,46.3934],[11.61458,46.38291],[11.60617,46.38291],[11.60407,46.37241],[11.58306,46.37241],[11.58306,46.34932],[11.55995,46.32414],[11.53894,46.32834],[11.53894,46.34513],[11.52423,46.34723],[11.50111,46.34723],[11.49901,46.32834],[11.48851,46.33044],[11.49271,46.32204],[11.41917,46.32414],[11.41707,46.25278],[11.35613,46.24858],[11.34773,46.25698],[11.34563,46.26747],[11.34143,46.26747],[11.33722,46.25068],[11.31201,46.24858],[11.30991,46.25278],[11.3015,46.25278],[11.2889,46.24019],[11.2889,46.2234],[11.25108,46.2234],[11.24898,46.2129],[11.16283,46.215],[11.16283,46.24858],[11.12711,46.24858],[11.13131,46.25278],[11.12291,46.25488],[11.12501,46.29895],[11.16283,46.29895],[11.16283,46.36821],[11.16703,46.36821],[11.16703,46.38081],[11.17543,46.3871],[11.17754,46.3997],[11.20485,46.3997],[11.20695,46.42068],[11.19014,46.42068],[11.19014,46.42698],[11.19435,46.42698],[11.19855,46.44167],[11.20485,46.44587],[11.20695,46.47315],[11.19014,46.47525],[11.18804,46.48365],[11.15232,46.47525],[11.08298,46.47525],[11.08088,46.43537],[11.04096,46.42068],[11.01154,46.42068],[10.99894,46.44587],[10.98843,46.44587],[10.98423,46.45217],[10.96952,46.45217],[10.96112,46.48365],[10.95691,46.48365],[10.95481,46.49414],[10.94851,46.49624],[10.94431,46.50673],[10.91069,46.49624],[10.90018,46.49624],[10.89808,46.51093],[10.85606,46.50254],[10.84135,46.54241],[10.86446,46.54661],[10.86236,46.55081],[10.76571,46.54031],[10.72158,46.55081],[10.59762,46.55291],[10.5619,46.54871],[10.53668,46.55291],[10.50096,46.54871],[10.48415,46.55501],[10.46314,46.55501],[10.47155,46.5676],[10.47365,46.59069],[10.47785,46.59069],[10.47785,46.61797],[10.46944,46.62636],[10.44843,46.63476],[10.42532,46.62846],[10.3938,46.63056],[10.3896,46.64525],[10.3812,46.64735],[10.3833,46.66414],[10.3791,46.66834],[10.3791,46.69353],[10.3854,46.72081],[10.3896,46.72081],[10.3938,46.7376],[10.41692,46.75229],[10.41692,46.78587],[10.42112,46.79847],[10.42532,46.79847],[10.42532,46.80686],[10.43373,46.81106],[10.43793,46.79007],[10.44423,46.78377],[10.44843,46.7439],[10.45264,46.7439],[10.45684,46.72711],[10.46104,46.72711],[10.46524,46.71032],[10.46944,46.71032],[10.47365,46.67254],[10.47995,46.67044],[10.48415,46.65575],[10.48836,46.65575],[10.48415,46.62846],[10.48836,46.62846],[10.48836,46.62217],[10.49886,46.62007],[10.52828,46.62427],[10.49886,46.63056],[10.49886,46.64525],[10.50516,46.64316],[10.49886,46.66204],[10.51777,46.65785],[10.58921,46.66204],[10.63123,46.65365],[10.79302,46.65575],[10.79723,46.65155],[10.88127,46.65155],[10.89178,46.65785],[10.9275,46.66414],[10.94431,46.67464],[10.98003,46.67464],[11.00104,46.68303],[11.02415,46.68303],[11.05147,46.69772],[11.12711,46.70822],[11.13971,46.71242],[11.14392,46.71871],[11.17543,46.72081],[11.19855,46.7334],[11.24898,46.7355],[11.25318,46.72291],[11.2952,46.72921],[11.30571,46.70822],[11.31831,46.70822],[11.33722,46.71871],[11.38555,46.72081],[11.43178,46.7376],[11.50952,46.7439],[11.54734,46.75649],[11.56835,46.75649],[11.58306,46.76698],[11.60617,46.76908],[11.61037,46.77538],[11.69862,46.79427],[11.71753,46.79427],[11.72174,46.79007],[11.73855,46.75859],[11.74905,46.75019],[11.76166,46.70192],[11.76586,46.70192],[11.78687,46.71661],[11.8331,46.72291],[11.86041,46.7376],[11.90874,46.7439],[11.92135,46.75229],[11.95286,46.75859],[11.95917,46.76488],[11.99489,46.77538],[12.00749,46.77538],[12.0096,46.77958],[12.03061,46.78168],[12.05792,46.79427],[12.09995,46.79847],[12.13566,46.81316],[12.15878,46.81316],[12.18609,46.82785],[12.21551,46.83205],[12.23442,46.84254]],[[11.97388,46.96637],[11.99489,46.96007],[11.99489,46.95587],[12.0096,46.95797],[12.0117,46.94748],[12.0159,46.94748],[12.0117,46.94118],[12.018,46.93908],[12.02851,46.92229],[12.00749,46.9118],[11.97388,46.9055],[11.95707,46.89501],[11.91714,46.88871],[11.85831,46.86982],[11.8394,46.86982],[11.80158,46.85303],[11.76166,46.84464],[11.74905,46.83415],[11.68181,46.81945],[11.67971,46.81526],[11.6545,46.81106],[11.64399,46.80476],[11.63769,46.80686],[11.63139,46.82155],[11.62508,46.82155],[11.62298,46.83205],[11.61037,46.84464],[11.61668,46.84884],[11.61458,46.85723],[11.61037,46.85723],[11.61668,46.86563],[11.64609,46.86563],[11.68602,46.88242],[11.69022,46.88871],[11.74905,46.89711],[11.75325,46.90341],[11.78057,46.9076],[11.80158,46.9202],[11.8457,46.92649],[11.87722,46.94118],[11.89613,46.94328],[11.92135,46.95797],[11.96757,46.96217],[11.97388,46.96637]]],"terms_url":"http://geoservices.buergernetz.bz.it/geokatalog/","terms_text":"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 3.0","best":true},{"id":"South-Tyrol-Topomap","name":"South Tyrol Topomap","type":"tms","template":"http://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_BASEMAP_TOPO&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg","description":"Topographical basemap of South Tyrol","scaleExtent":[0,20],"polygon":[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],"terms_url":"http://geoservices.buergernetz.bz.it/geokatalog/","terms_text":"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano"},{"id":"Bern-bern2016-tms","name":"Stadt Bern 10cm (2016)","type":"tms","template":"http://mapproxy.osm.ch:8080/tiles/bern2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[8,21],"polygon":[[[7.2943145,46.9237564],[7.2982665,46.9274715],[7.3061586,46.9309487],[7.3043338,46.9362344],[7.3068603,46.9403709],[7.3246431,46.9432765],[7.3284525,46.946409],[7.3414051,46.9460797],[7.3438454,46.9473713],[7.3434554,46.9487937],[7.3513567,46.9485481],[7.3505628,46.950213],[7.3530901,46.9519266],[7.3582028,46.9511773],[7.3685031,46.9566244],[7.3715097,46.9607339],[7.37503,46.959835],[7.3785111,46.9614686],[7.3806232,46.9654741],[7.3832097,46.9663014],[7.3937998,46.9669268],[7.4000528,46.9691779],[7.4082922,46.9686857],[7.4281713,46.9738041],[7.4327053,46.972689],[7.4353602,46.9684345],[7.4378522,46.9684302],[7.4412474,46.9767865],[7.4456893,46.9747939],[7.4483835,46.9756393],[7.4477006,46.9790125],[7.4440468,46.9780682],[7.4412738,46.9798224],[7.4506732,46.9901527],[7.4522112,46.9896803],[7.454649,46.9778182],[7.4680382,46.9758258],[7.4707923,46.969998],[7.4701907,46.9674116],[7.4781618,46.9711823],[7.4845237,46.9701571],[7.4861275,46.9679018],[7.4857945,46.9646828],[7.4784708,46.9629043],[7.4802865,46.9606768],[7.4789304,46.9587841],[7.4797786,46.9566019],[7.4770135,46.9544586],[7.4840504,46.9499938],[7.4833925,46.9451977],[7.4955563,46.9396169],[7.4935119,46.9376594],[7.4908036,46.9387617],[7.4894997,46.9368667],[7.4766667,46.9369496],[7.4781093,46.9362489],[7.4746986,46.9339187],[7.4753537,46.9329898],[7.4691047,46.9292427],[7.4707683,46.9255044],[7.4585674,46.934836],[7.4476373,46.9304297],[7.435418,46.9349668],[7.4338022,46.9331237],[7.4376403,46.9307415],[7.4146941,46.9368183],[7.413844,46.9315682],[7.4070798,46.9303824],[7.408065,46.9256296],[7.4021268,46.9241992],[7.4014835,46.9211927],[7.3875736,46.9304506],[7.3823129,46.927282],[7.3800187,46.9298929],[7.3808694,46.9324085],[7.3748669,46.9314306],[7.3748901,46.9327104],[7.368066,46.9323929],[7.3683058,46.930426],[7.3604074,46.9285884],[7.3605592,46.9272018],[7.338783,46.9245357],[7.3393683,46.9196675],[7.3274574,46.9190326],[7.3269178,46.9235974],[7.324374,46.9251891],[7.3082264,46.9222857],[7.2943145,46.9237564]]],"terms_text":"Orthophoto 2016, Vermessungsamt Stadt Bern ","best":true},{"id":"Uster-2008","name":"Stadt Uster Orthophoto 2008 10cm","type":"tms","template":"http://mapproxy.sosm.ch:8080/tiles/uster/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","polygon":[[[8.6,47.31],[8.6,47.39],[8.77,47.39],[8.77,47.31],[8.6,47.31]]],"terms_text":"Stadt Uster Vermessung Orthophoto 2008"},{"id":"Zuerich-zh_luftbild2011-tms","name":"Stadt Zürich Luftbild 2011","type":"tms","template":"http://mapproxy.sosm.ch:8080/tiles/zh_luftbild2011/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","polygon":[[[8.4441,47.3141],[8.4441,47.4411],[8.6284,47.4411],[8.6284,47.3141],[8.4441,47.3141]]],"terms_text":"Stadt Zürich Luftbild 2011"},{"id":"Zuerich-city_map","name":"Stadtplan Zürich","type":"tms","template":"http://mapproxy.sosm.ch:8080/tiles/zh_stadtplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","polygon":[[[8.4482,47.321],[8.4482,47.4339],[8.6248,47.4339],[8.6248,47.321],[8.4482,47.321]]],"terms_text":"Stadt Zürich Open Government Data"},{"id":"stamen-terrain-background","name":"Stamen Terrain","type":"tms","template":"http://{switch:a,b,c,d}.tile.stamen.com/terrain-background/{zoom}/{x}/{y}.jpg","scaleExtent":[4,18],"terms_url":"http://maps.stamen.com/#terrain","terms_text":"Map tiles by Stamen Design, under CC BY 3.0"},{"id":"Stevns_Denmark","name":"Stevns (Denmark)","type":"tms","template":"http://{switch:a,b,c}.tile.openstreetmap.dk/stevns/2009/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"polygon":[[[12.0913942,55.3491574],[12.0943104,55.3842256],[12.1573875,55.3833103],[12.1587287,55.4013326],[12.1903468,55.400558],[12.1931411,55.4364665],[12.2564251,55.4347995],[12.2547073,55.4168882],[12.3822489,55.4134349],[12.3795942,55.3954143],[12.4109213,55.3946958],[12.409403,55.3766417],[12.4407807,55.375779],[12.4394142,55.3578314],[12.4707413,55.3569971],[12.4629475,55.2672214],[12.4315633,55.2681491],[12.430045,55.2502103],[12.3672011,55.2519673],[12.3656858,55.2340267],[12.2714604,55.2366031],[12.2744467,55.272476],[12.2115654,55.2741475],[12.2130078,55.2920322],[12.1815665,55.2928638],[12.183141,55.3107091],[12.2144897,55.3100981],[12.2159927,55.3279764],[12.1214458,55.3303379],[12.1229489,55.3483291],[12.0913942,55.3491574]]],"terms_text":"Stevns Kommune"},{"id":"Surrey-Air_Survey","name":"Surrey Air Survey","type":"tms","template":"http://gravitystorm.dev.openstreetmap.org/surrey/{zoom}/{x}/{y}.png","scaleExtent":[8,19],"polygon":[[[-0.752478,51.0821941],[-0.7595183,51.0856254],[-0.8014342,51.1457917],[-0.8398864,51.1440686],[-0.8357665,51.1802397],[-0.8529549,51.2011266],[-0.8522683,51.2096231],[-0.8495217,51.217903],[-0.8266907,51.2403696],[-0.8120995,51.2469248],[-0.7736474,51.2459577],[-0.7544213,51.2381127],[-0.754078,51.233921],[-0.7446366,51.2333836],[-0.7430693,51.2847178],[-0.751503,51.3069524],[-0.7664376,51.3121032],[-0.7820588,51.3270157],[-0.7815438,51.3388135],[-0.7374268,51.3720456],[-0.7192307,51.3769748],[-0.6795769,51.3847961],[-0.6807786,51.3901523],[-0.6531411,51.3917591],[-0.6301385,51.3905808],[-0.6291085,51.3970074],[-0.6234437,51.3977572],[-0.613144,51.4295552],[-0.6002471,51.4459121],[-0.5867081,51.4445365],[-0.5762368,51.453202],[-0.5626755,51.4523462],[-0.547741,51.4469972],[-0.5372697,51.4448575],[-0.537098,51.4526671],[-0.5439644,51.4545926],[-0.5405312,51.4698865],[-0.5309182,51.4760881],[-0.5091172,51.4744843],[-0.5086022,51.4695657],[-0.4900628,51.4682825],[-0.4526406,51.4606894],[-0.4486924,51.4429316],[-0.4414826,51.4418616],[-0.4418259,51.4369394],[-0.4112702,51.4380095],[-0.4014855,51.4279498],[-0.3807145,51.4262372],[-0.3805428,51.4161749],[-0.3491288,51.4138195],[-0.3274994,51.4037544],[-0.3039818,51.3990424],[-0.3019219,51.3754747],[-0.309475,51.369688],[-0.3111916,51.3529669],[-0.2955704,51.3541462],[-0.2923089,51.3673303],[-0.2850991,51.3680805],[-0.2787476,51.3771891],[-0.2655297,51.3837247],[-0.2411538,51.3847961],[-0.2123147,51.3628288],[-0.2107697,51.3498578],[-0.190857,51.3502867],[-0.1542931,51.3338802],[-0.1496583,51.3057719],[-0.1074296,51.2966491],[-0.0887185,51.3099571],[-0.0878602,51.3220811],[-0.0652009,51.3215448],[-0.0641709,51.3264793],[-0.0519829,51.3263721],[-0.0528412,51.334631],[-0.0330779,51.3430876],[0.0019187,51.3376339],[0.0118751,51.3281956],[0.013935,51.2994398],[0.0202865,51.2994398],[0.0240631,51.3072743],[0.0331611,51.3086694],[0.0455207,51.30545],[0.0523872,51.2877392],[0.0616569,51.2577764],[0.0640602,51.2415518],[0.0462074,51.2126342],[0.0407142,51.2109136],[0.0448341,51.1989753],[0.0494689,51.1997283],[0.0558204,51.1944573],[0.0611419,51.1790713],[0.0623435,51.1542061],[0.0577087,51.1417146],[0.0204582,51.1365447],[-0.0446015,51.1336364],[-0.1566964,51.1352522],[-0.1572114,51.1290043],[-0.2287942,51.1183379],[-0.2473336,51.1183379],[-0.2500802,51.1211394],[-0.299347,51.1137042],[-0.3221779,51.1119799],[-0.3223496,51.1058367],[-0.3596001,51.1019563],[-0.3589135,51.1113333],[-0.3863793,51.1117644],[-0.3869014,51.1062516],[-0.4281001,51.0947174],[-0.4856784,51.0951554],[-0.487135,51.0872266],[-0.5297404,51.0865404],[-0.5302259,51.0789914],[-0.61046,51.076551],[-0.6099745,51.080669],[-0.6577994,51.0792202],[-0.6582849,51.0743394],[-0.6836539,51.0707547],[-0.6997979,51.070831],[-0.7296581,51.0744919],[-0.752478,51.0821941]]]},{"id":"Szeged_2011","name":"Szeged orthophoto 2011","type":"tms","template":"http://e.tile.openstreetmap.hu/szeged-2011-10cm/{zoom}/{x}/{y}.png","scaleExtent":[10,22],"polygon":[[[20.1459914,46.2281144],[20.1332261,46.2290431],[20.1258373,46.2298686],[20.122329,46.2309893],[20.1208484,46.2317537],[20.1189709,46.2335126],[20.1131237,46.2413638],[20.1120293,46.2433005],[20.1115733,46.2449996],[20.1111871,46.247092],[20.1112944,46.2487725],[20.1115948,46.2509686],[20.1122171,46.2528047],[20.1129949,46.2542681],[20.1135421,46.2553549],[20.1147705,46.2567977],[20.1352251,46.2768529],[20.1366386,46.2775055],[20.1378939,46.2780301],[20.1393932,46.2783508],[20.1408818,46.2784583],[20.1611494,46.278159],[20.1621093,46.2781579],[20.1635894,46.277702],[20.1661777,46.2761484],[20.1687795,46.2738569],[20.1696108,46.2714413],[20.1695895,46.2704465],[20.1700871,46.2704418],[20.1739897,46.2643295],[20.1766182,46.2582878],[20.1947983,46.25492],[20.1858719,46.2448077],[20.1846595,46.2453122],[20.1780371,46.2383112],[20.1781766,46.2377101],[20.1795258,46.2370961],[20.1725666,46.2300241],[20.1698349,46.2350404],[20.1687701,46.2362946],[20.1670262,46.2378475],[20.1659431,46.2387342],[20.1654408,46.2389988],[20.1654837,46.2389988],[20.1635177,46.2401383],[20.1602051,46.2412003],[20.1592684,46.241531],[20.1592684,46.2415751],[20.1583504,46.2418505],[20.1549473,46.2422869],[20.1510796,46.2351538],[20.1493804,46.232459],[20.1459914,46.2281144]]],"terms_url":"http://www.geo.u-szeged.hu/","terms_text":"SZTE TFGT - University of Szeged","best":true},{"id":"tnris.org","name":"Texas Orthophoto","type":"tms","template":"https://txgi.tnris.org/login/path/ecology-fiona-poem-romeo/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=texas&STYLE=&FORMAT=image/png&tileMatrixSet=0to20&tileMatrix=0to20:{zoom}&tileRow={y}&tileCol={x}","scaleExtent":[0,20],"polygon":[[[-99.9985439,34.5601834],[-95.55654502453,33.99257450647],[-93.89679027134,33.61039304449],[-93.98468089634,32.04103124103],[-93.41613841587,31.02505269211],[-93.74531484297,29.57268254375],[-96.50492070332,28.23158511753],[-97.36942054453,26.95467452634],[-97.04866958924,25.80530249434],[-99.0734177889,26.32559221139],[-100.76599193149,29.02531904433],[-102.3315436893,29.8433892263],[-103.13354564242,28.88112103669],[-104.2887874222,29.28831477845],[-104.7269783935,29.94815782859],[-104.72696778796,30.23535241761],[-106.53450082091,31.78456647831],[-106.75767043939,31.78457253947],[-106.75766067978,32.04385536686],[-106.61848436611,32.04385159755],[-103.11949492759,32.04375683439],[-103.09544343487,36.50045758762],[-103.05798056071,36.54268645422],[-100.00042146824,36.54222227302],[-99.9985439,34.5601834]]],"terms_url":"https://tnris.org/maps-and-data/online-mapping-services/"},{"id":"tf-landscape","name":"Thunderforest Landscape","type":"tms","template":"https://{switch:a,b,c}.tile.thunderforest.com/landscape/{zoom}/{x}/{y}.png","scaleExtent":[0,22],"terms_url":"http://www.thunderforest.com/terms/","terms_text":"Maps © Thunderforest, Data © OpenStreetMap contributors"},{"id":"lu.geoportail.opendata.topo","name":"Topographical Map geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/topo/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/cartes-topographiques-services-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie"},{"id":"Toulouse-Orthophotoplan-2007","name":"Toulouse - Orthophotoplan 2007","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/toulouse_ortho2007/{zoom}/{x}/{y}","scaleExtent":[0,22],"polygon":[[[1.1919978,43.6328791],[1.2015377,43.6329729],[1.2011107,43.6554932],[1.2227985,43.6557029],[1.2226231,43.6653353],[1.2275341,43.6653849],[1.2275417,43.6656387],[1.2337568,43.6656883],[1.2337644,43.6650153],[1.2351218,43.6650319],[1.2350913,43.6670729],[1.2443566,43.6671556],[1.2441584,43.6743925],[1.2493973,43.6744256],[1.2493973,43.6746628],[1.2555666,43.6747234],[1.2555742,43.6744532],[1.2569545,43.6744697],[1.2568782,43.678529],[1.2874873,43.6788257],[1.2870803,43.7013229],[1.3088219,43.7014632],[1.3086493,43.7127673],[1.3303262,43.7129544],[1.3300242,43.7305221],[1.3367106,43.7305845],[1.3367322,43.7312235],[1.3734338,43.7310456],[1.3735848,43.7245772],[1.4604504,43.7252947],[1.4607783,43.7028034],[1.4824875,43.7029516],[1.4829828,43.6692071],[1.5046832,43.6693616],[1.5048383,43.6581174],[1.5265475,43.6582656],[1.5266945,43.6470298],[1.548368,43.6471633],[1.5485357,43.6359385],[1.5702172,43.636082],[1.5705123,43.6135777],[1.5488166,43.6134276],[1.549097,43.5909479],[1.5707695,43.5910694],[1.5709373,43.5798341],[1.5793714,43.5798894],[1.5794782,43.5737682],[1.5809119,43.5737792],[1.5810859,43.5573794],[1.5712334,43.5573131],[1.5716504,43.5235497],[1.3984804,43.5222618],[1.3986509,43.5110113],[1.3120959,43.5102543],[1.3118968,43.5215192],[1.2902569,43.5213126],[1.2898637,43.5438168],[1.311517,43.5440133],[1.3113271,43.5552596],[1.3036924,43.5551924],[1.3036117,43.5595099],[1.2955449,43.5594317],[1.2955449,43.5595489],[1.2895595,43.5594473],[1.2892899,43.5775366],[1.2675698,43.5773647],[1.2673973,43.5886141],[1.25355,43.5885047],[1.2533774,43.5956282],[1.2518029,43.5956282],[1.2518029,43.5949409],[1.2350437,43.5947847],[1.2350437,43.5945972],[1.2239572,43.5945972],[1.2239357,43.5994708],[1.2139708,43.599299],[1.2138845,43.6046408],[1.2020647,43.6044846],[1.2019464,43.61048],[1.1924294,43.6103695],[1.1919978,43.6328791]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData","terms_text":"ToulouseMetropole"},{"id":"Toulouse-Orthophotoplan-2011","name":"Toulouse - Orthophotoplan 2011","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/toulouse_ortho2011/{zoom}/{x}/{y}","scaleExtent":[0,22],"polygon":[[[1.1135067,43.6867566],[1.1351836,43.6870842],[1.1348907,43.6983471],[1.1782867,43.6990338],[1.1779903,43.7102786],[1.1996591,43.7106144],[1.1993387,43.7218722],[1.2427356,43.7225269],[1.2424336,43.7337491],[1.2641536,43.734092],[1.2638301,43.7453588],[1.2855285,43.7456548],[1.2852481,43.756935],[1.306925,43.757231],[1.3066446,43.7684779],[1.3283431,43.7687894],[1.3280842,43.780034],[1.4367275,43.7815757],[1.4373098,43.7591004],[1.4590083,43.7593653],[1.4593318,43.7481479],[1.4810303,43.7483972],[1.4813322,43.7371777],[1.5030307,43.7374115],[1.5035915,43.7149664],[1.5253115,43.7151846],[1.5256135,43.7040057],[1.5472688,43.7042552],[1.5475708,43.6930431],[1.5692045,43.6932926],[1.5695712,43.6820316],[1.5912049,43.6822656],[1.5917441,43.6597998],[1.613421,43.6600339],[1.613723,43.6488291],[1.6353783,43.6490788],[1.6384146,43.5140731],[1.2921649,43.5094658],[1.2918629,43.5206966],[1.2702076,43.5203994],[1.2698841,43.5316437],[1.2482288,43.531331],[1.2476048,43.5537788],[1.2259628,43.5534914],[1.2256819,43.564716],[1.2039835,43.564419],[1.2033148,43.5869049],[1.1816164,43.5865611],[1.1810237,43.6090368],[1.1592821,43.6086932],[1.1589585,43.6199523],[1.1372601,43.6196244],[1.1365933,43.642094],[1.1149055,43.6417629],[1.1135067,43.6867566]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData","terms_text":"ToulouseMetropole"},{"id":"Toulouse-Orthophotoplan-2013","name":"Toulouse - Orthophotoplan 2013","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/toulouse_2013/{zoom}/{x}/{y}","scaleExtent":[0,22],"polygon":[[[1.1135067,43.6867566],[1.1351836,43.6870842],[1.1348907,43.6983471],[1.1782867,43.6990338],[1.1779903,43.7102786],[1.1996591,43.7106144],[1.1993387,43.7218722],[1.2427356,43.7225269],[1.2424336,43.7337491],[1.2641536,43.734092],[1.2638301,43.7453588],[1.2855285,43.7456548],[1.2852481,43.756935],[1.306925,43.757231],[1.3066446,43.7684779],[1.3283431,43.7687894],[1.3280842,43.780034],[1.4367275,43.7815757],[1.4373098,43.7591004],[1.4590083,43.7593653],[1.4593318,43.7481479],[1.4810303,43.7483972],[1.4813322,43.7371777],[1.5030307,43.7374115],[1.5035915,43.7149664],[1.5253115,43.7151846],[1.5256135,43.7040057],[1.5472688,43.7042552],[1.5475708,43.6930431],[1.5692045,43.6932926],[1.5695712,43.6820316],[1.5912049,43.6822656],[1.5917441,43.6597998],[1.613421,43.6600339],[1.613723,43.6488291],[1.6353783,43.6490788],[1.6384146,43.5140731],[1.2921649,43.5094658],[1.2918629,43.5206966],[1.2702076,43.5203994],[1.2698841,43.5316437],[1.2482288,43.531331],[1.2476048,43.5537788],[1.2259628,43.5534914],[1.2256819,43.564716],[1.2039835,43.564419],[1.2033148,43.5869049],[1.1816164,43.5865611],[1.1810237,43.6090368],[1.1592821,43.6086932],[1.1589585,43.6199523],[1.1372601,43.6196244],[1.1365933,43.642094],[1.1149055,43.6417629],[1.1135067,43.6867566]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData","terms_text":"ToulouseMetropole"},{"id":"Toulouse-Orthophotoplan-2015","name":"Toulouse - Orthophotoplan 2015","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/toulouse_2015/{zoom}/{x}/{y}","scaleExtent":[0,22],"polygon":[[[1.1135067,43.6867566],[1.1351836,43.6870842],[1.1348907,43.6983471],[1.1782867,43.6990338],[1.1779903,43.7102786],[1.1996591,43.7106144],[1.1993387,43.7218722],[1.2427356,43.7225269],[1.2424336,43.7337491],[1.2641536,43.734092],[1.2638301,43.7453588],[1.2855285,43.7456548],[1.2852481,43.756935],[1.306925,43.757231],[1.3066446,43.7684779],[1.3283431,43.7687894],[1.3280842,43.780034],[1.4367275,43.7815757],[1.4373098,43.7591004],[1.4590083,43.7593653],[1.4593318,43.7481479],[1.4810303,43.7483972],[1.4813322,43.7371777],[1.5030307,43.7374115],[1.5035915,43.7149664],[1.5253115,43.7151846],[1.5256135,43.7040057],[1.5472688,43.7042552],[1.5475708,43.6930431],[1.5692045,43.6932926],[1.5695712,43.6820316],[1.5912049,43.6822656],[1.5917441,43.6597998],[1.613421,43.6600339],[1.613723,43.6488291],[1.6353783,43.6490788],[1.6384146,43.5140731],[1.2921649,43.5094658],[1.2918629,43.5206966],[1.2702076,43.5203994],[1.2698841,43.5316437],[1.2482288,43.531331],[1.2476048,43.5537788],[1.2259628,43.5534914],[1.2256819,43.564716],[1.2039835,43.564419],[1.2033148,43.5869049],[1.1816164,43.5865611],[1.1810237,43.6090368],[1.1592821,43.6086932],[1.1589585,43.6199523],[1.1372601,43.6196244],[1.1365933,43.642094],[1.1149055,43.6417629],[1.1135067,43.6867566]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData","terms_text":"ToulouseMetropole"},{"id":"Tours-Orthophoto-2008_2010","name":"Tours - Orthophotos 2008-2010","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/tours/{zoom}/{x}/{y}","scaleExtent":[0,20],"polygon":[[[0.5457462,47.465264],[0.54585,47.4608163],[0.5392188,47.4606983],[0.5393484,47.456243],[0.5327959,47.4561003],[0.5329011,47.451565],[0.52619,47.4514013],[0.5265854,47.4424884],[0.5000941,47.4420739],[0.5002357,47.4375835],[0.4936014,47.4374324],[0.4937,47.4329285],[0.4606141,47.4324593],[0.4607248,47.4279827],[0.4541016,47.4278125],[0.454932,47.4053921],[0.4615431,47.4054476],[0.4619097,47.3964924],[0.4684346,47.3966005],[0.4691319,47.3786415],[0.4757125,47.3787609],[0.4762116,47.3652018],[0.4828297,47.3653499],[0.4829611,47.3608321],[0.4763543,47.360743],[0.476654,47.3517263],[0.4700497,47.3516186],[0.4701971,47.3471313],[0.4637503,47.3470104],[0.4571425,47.3424146],[0.4572922,47.3379061],[0.4506741,47.3378081],[0.4508379,47.3333051],[0.4442212,47.3332032],[0.4443809,47.328711],[0.4311392,47.3284977],[0.4316262,47.3150004],[0.4382432,47.3151136],[0.4383815,47.3106174],[0.4714487,47.3111374],[0.4713096,47.3156565],[0.477888,47.3157542],[0.4780733,47.3112802],[0.4846826,47.3113639],[0.4848576,47.3068686],[0.4914359,47.3069803],[0.491745,47.2979733],[0.4851578,47.2978722],[0.4854269,47.2888744],[0.4788485,47.2887697],[0.4791574,47.2797818],[0.4857769,47.2799005],[0.4859107,47.2753885],[0.492539,47.2755029],[0.4926669,47.2710127],[0.4992986,47.2711066],[0.4994296,47.2666116],[0.5192658,47.2669245],[0.5194225,47.2624231],[0.5260186,47.2625205],[0.5258735,47.2670183],[0.5456972,47.2673383],[0.5455537,47.2718283],[0.5587737,47.2720366],[0.5586259,47.2765185],[0.5652252,47.2766278],[0.5650848,47.2811206],[0.5716753,47.2812285],[0.5715223,47.2857217],[0.5781436,47.2858299],[0.5779914,47.2903294],[0.5846023,47.2904263],[0.5843076,47.2994231],[0.597499,47.2996094],[0.5976637,47.2951375],[0.6571596,47.2960036],[0.6572988,47.2915091],[0.6705019,47.2917186],[0.6703475,47.2962082],[0.6836175,47.2963688],[0.6834322,47.3008929],[0.690062,47.3009558],[0.6899241,47.3054703],[0.7362019,47.3061157],[0.7360848,47.3106063],[0.7559022,47.3108935],[0.7557718,47.315392],[0.7623755,47.3154716],[0.7622314,47.3199941],[0.7754911,47.3201546],[0.77497,47.3388218],[0.7745786,47.351628],[0.7680363,47.3515901],[0.767589,47.3605298],[0.7742443,47.3606238],[0.7733465,47.3921266],[0.7667434,47.3920195],[0.7664411,47.4010837],[0.7730647,47.4011115],[0.7728868,47.4101297],[0.7661849,47.4100226],[0.7660267,47.4145044],[0.7527613,47.4143038],[0.7529788,47.4098086],[0.7462373,47.4097016],[0.7459424,47.4232208],[0.7392324,47.4231451],[0.738869,47.4366116],[0.7323267,47.4365171],[0.7321869,47.4410556],[0.7255048,47.44098],[0.7254209,47.4453479],[0.7318793,47.4454803],[0.7318514,47.4501126],[0.7384496,47.450226],[0.7383098,47.454631],[0.7449359,47.4547444],[0.7443209,47.4771985],[0.7310685,47.4769717],[0.7309008,47.4815445],[0.7176205,47.4812611],[0.7177883,47.4768394],[0.69777,47.4764993],[0.6980496,47.4719827],[0.6914514,47.4718882],[0.6917309,47.4630241],[0.6851048,47.4629295],[0.684937,47.4673524],[0.678255,47.4673335],[0.6779754,47.4762158],[0.6714051,47.4761592],[0.6710417,47.4881952],[0.6577334,47.4879685],[0.6578173,47.48504],[0.6511911,47.4848322],[0.6514707,47.4758568],[0.6448166,47.4757245],[0.6449284,47.4712646],[0.6117976,47.4707543],[0.6118815,47.4663129],[0.6052833,47.4661239],[0.6054231,47.4616631],[0.5988808,47.4615497],[0.5990206,47.4570886],[0.572488,47.4566916],[0.5721805,47.4656513],[0.5457462,47.465264]]],"terms_url":"http://wiki.openstreetmap.org/wiki/Tours/Orthophoto","terms_text":"Orthophoto Tour(s) Plus 2008"},{"id":"Tours-Orthophoto-2013","name":"Tours - Orthophotos 2013","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/tours_2013/{zoom}/{x}/{y}","scaleExtent":[0,22],"polygon":[[[0.427093505859375,47.26199018174824],[0.427093505859375,47.50096732311069],[0.814361572265625,47.50096732311069],[0.814361572265625,47.26199018174824],[0.427093505859375,47.26199018174824]]],"terms_url":"http://wiki.openstreetmap.org/wiki/Tours/Orthophoto","terms_text":"Orthophoto Tour(s)plus 2013"},{"id":"US_Forest_Service_roads","name":"U.S. Forest Service roads","type":"tms","template":"http://osm.cycle.travel/forest/{zoom}/{x}/{y}.png","scaleExtent":[0,19],"polygon":[[[-124.7617886,48.4130148],[-124.6059492,45.90245],[-124.9934269,40.0557614],[-122.5369737,36.8566086],[-119.9775867,33.0064099],[-117.675935,32.4630223],[-114.8612307,32.4799891],[-111.0089311,31.336015],[-108.1992687,31.3260016],[-108.1871123,31.7755116],[-106.5307225,31.7820947],[-106.4842052,31.7464455],[-106.429317,31.7520583],[-106.2868855,31.5613291],[-106.205248,31.446704],[-105.0205259,30.5360988],[-104.5881916,29.6997856],[-103.2518856,28.8908685],[-102.7173632,29.3920567],[-102.1513983,29.7475702],[-101.2552871,29.4810523],[-100.0062436,28.0082173],[-99.2351068,26.4475962],[-98.0109067,25.9928035],[-97.435024,25.8266009],[-96.9555259,25.9821589],[-96.8061741,27.7978168],[-95.5563349,28.5876066],[-93.7405308,29.4742093],[-90.9028456,28.8564513],[-88.0156706,28.9944338],[-88.0162494,30.0038862],[-86.0277506,30.0047454],[-84.0187909,28.9961781],[-81.9971976,25.9826768],[-81.9966618,25.0134917],[-84.0165592,25.0125783],[-84.0160068,24.0052745],[-80.0199985,24.007096],[-79.8901116,26.8550713],[-80.0245309,32.0161282],[-75.4147385,35.0531894],[-74.0211163,39.5727927],[-72.002019,40.9912464],[-69.8797398,40.9920457],[-69.8489304,43.2619916],[-66.9452845,44.7104937],[-67.7596632,47.0990024],[-69.2505131,47.5122328],[-70.4614886,46.2176574],[-71.412273,45.254878],[-72.0222508,45.0059846],[-75.0798841,44.9802854],[-76.9023061,43.8024568],[-78.7623935,43.6249578],[-79.15798,43.4462589],[-79.0060087,42.8005317],[-82.662475,41.6889458],[-82.1761642,43.588535],[-83.2813977,46.138853],[-87.5064535,48.0142702],[-88.3492194,48.2963271],[-89.4353148,47.9837822],[-93.9981078,49.0067142],[-95.1105379,49.412004],[-96.0131199,49.0060547],[-123.3228926,49.0042878],[-123.2275233,48.1849927],[-124.7617886,48.4130148]],[[-160.5787616,22.5062947],[-160.5782192,21.4984647],[-158.7470604,21.2439843],[-157.5083185,20.995803],[-155.9961942,18.7790194],[-154.6217803,18.7586966],[-154.6890176,19.8805722],[-156.2927622,21.2225888],[-157.5047384,21.9984962],[-159.0093692,22.5070181],[-160.5787616,22.5062947]],[[-167.1571546,68.721974],[-164.8553982,67.0255078],[-168.002195,66.0017503],[-169.0087448,66.001546],[-169.0075381,64.9987675],[-172.5143281,63.8767267],[-173.8197023,59.74014],[-162.5018149,58.0005815],[-160.0159024,58.0012389],[-160.0149725,57.000035],[-160.5054788,56.9999017],[-165.8092575,54.824847],[-178.000097,52.2446469],[-177.9992996,51.2554252],[-171.4689067,51.8215329],[-162.40251,53.956664],[-159.0075717,55.002502],[-158.0190709,55.0027849],[-151.9963213,55.9991902],[-151.500341,57.9987853],[-151.5012894,58.9919816],[-138.5159989,58.9953194],[-138.5150471,57.9986434],[-133.9948193,54.0031685],[-130.0044418,54.0043387],[-130.0070826,57.0000507],[-131.975877,56.9995156],[-135.1229873,59.756601],[-138.0071813,59.991805],[-139.1715881,60.4127229],[-140.9874011,61.0118551],[-140.9683975,69.9535069],[-156.176891,71.5633329],[-160.413634,70.7397728],[-163.0218273,69.9707435],[-164.9717003,68.994689],[-167.1571546,68.721974]]]},{"id":"Zuerich-zh_uebersichtsplan-tms","name":"Übersichtsplan Zürich","type":"tms","template":"http://mapproxy.sosm.ch:8080/tiles/zh_uebersichtsplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[0,21],"polygon":[[[8.4482,47.321],[8.4482,47.4339],[8.6248,47.4339],[8.6248,47.321],[8.4482,47.321]]],"terms_text":"Stadt Zürich Open Government Data"},{"id":"USGS-Large_Scale","name":"USGS Large Scale Imagery","type":"tms","template":"http://{switch:a,b,c}.tile.openstreetmap.us/usgs_large_scale/{zoom}/{x}/{y}.jpg","scaleExtent":[12,20],"polygon":[[[-123.2549305,48.7529029],[-123.2549305,48.5592263],[-123.192224,48.5592263],[-123.192224,48.4348366],[-122.9419646,48.4348366],[-122.9419646,48.3720812],[-122.8806229,48.3720812],[-122.8806229,48.3094763],[-122.8167566,48.3094763],[-122.8167566,48.1904587],[-123.0041133,48.1904587],[-123.0041133,48.1275918],[-123.058416,48.1275918],[-123.058416,48.190514],[-123.254113,48.190514],[-123.254113,48.1274982],[-123.3706593,48.1274982],[-123.3706593,48.1908403],[-124.0582632,48.1908403],[-124.0582632,48.253442],[-124.1815163,48.253442],[-124.1815163,48.3164666],[-124.4319117,48.3164666],[-124.4319117,48.3782613],[-124.5564618,48.3782613],[-124.5564618,48.4408305],[-124.7555107,48.4408305],[-124.7555107,48.1914986],[-124.8185282,48.1914986],[-124.8185282,48.1228381],[-124.7552951,48.1228381],[-124.7552951,47.5535253],[-124.3812108,47.5535253],[-124.3812108,47.1218696],[-124.1928897,47.1218696],[-124.1928897,43.7569431],[-124.4443382,43.7569431],[-124.4443382,43.1425556],[-124.6398855,43.1425556],[-124.6398855,42.6194503],[-124.4438525,42.6194503],[-124.4438525,39.8080662],[-123.8815685,39.8080662],[-123.8815685,39.1102825],[-123.75805,39.1102825],[-123.75805,38.4968799],[-123.2702803,38.4968799],[-123.2702803,37.9331905],[-122.8148084,37.9331905],[-122.8148084,37.8019606],[-122.5664316,37.8019606],[-122.5664316,36.9319611],[-121.8784026,36.9319611],[-121.8784026,36.6897596],[-122.0034748,36.6897596],[-122.0034748,36.4341056],[-121.9414159,36.4341056],[-121.9414159,35.9297636],[-121.5040977,35.9297636],[-121.5040977,35.8100273],[-121.3790276,35.8100273],[-121.3790276,35.4239164],[-120.9426515,35.4239164],[-120.9426515,35.1849683],[-120.8171978,35.1849683],[-120.8171978,35.1219894],[-120.6918447,35.1219894],[-120.6918447,34.4966794],[-120.5045898,34.4966794],[-120.5045898,34.4339651],[-120.0078775,34.4339651],[-120.0078775,34.3682626],[-119.5283517,34.3682626],[-119.5283517,34.0576434],[-119.0060985,34.0576434],[-119.0060985,33.9975267],[-118.5046259,33.9975267],[-118.5046259,33.8694631],[-118.4413209,33.8694631],[-118.4413209,33.6865253],[-118.066912,33.6865253],[-118.066912,33.3063832],[-117.5030045,33.3063832],[-117.5030045,33.0500337],[-117.3188195,33.0500337],[-117.3188195,32.6205888],[-117.1917023,32.6205888],[-117.1917023,32.4974566],[-116.746496,32.4974566],[-116.746496,32.5609161],[-115.9970138,32.5609161],[-115.9970138,32.6264942],[-114.8808125,32.6264942],[-114.8808125,32.4340796],[-114.6294474,32.4340796],[-114.6294474,32.3731636],[-114.4447437,32.3731636],[-114.4447437,32.3075418],[-114.2557628,32.3075418],[-114.2557628,32.2444561],[-114.0680274,32.2444561],[-114.0680274,32.1829113],[-113.8166499,32.1829113],[-113.8166499,32.1207622],[-113.6307421,32.1207622],[-113.6307421,32.0565099],[-113.4417495,32.0565099],[-113.4417495,31.9984372],[-113.2546027,31.9984372],[-113.2546027,31.9325434],[-113.068072,31.9325434],[-113.068072,31.8718062],[-112.8161105,31.8718062],[-112.8161105,31.8104171],[-112.6308756,31.8104171],[-112.6308756,31.7464723],[-112.4418918,31.7464723],[-112.4418918,31.6856001],[-112.257192,31.6856001],[-112.257192,31.6210352],[-112.0033787,31.6210352],[-112.0033787,31.559584],[-111.815619,31.559584],[-111.815619,31.4970238],[-111.6278586,31.4970238],[-111.6278586,31.4339867],[-111.4418978,31.4339867],[-111.4418978,31.3733859],[-111.2559708,31.3733859],[-111.2559708,31.3113225],[-108.1845822,31.3113225],[-108.1845822,31.7459502],[-106.5065055,31.7459502],[-106.5065055,31.6842308],[-106.3797265,31.6842308],[-106.3797265,31.621752],[-106.317434,31.621752],[-106.317434,31.4968167],[-106.2551769,31.4968167],[-106.2551769,31.4344889],[-106.1924698,31.4344889],[-106.1924698,31.3721296],[-106.0039212,31.3721296],[-106.0039212,31.309328],[-105.9416582,31.309328],[-105.9416582,31.2457547],[-105.8798174,31.2457547],[-105.8798174,31.1836194],[-105.8162349,31.1836194],[-105.8162349,31.1207155],[-105.6921198,31.1207155],[-105.6921198,31.0584835],[-105.6302881,31.0584835],[-105.6302881,30.9328271],[-105.5044418,30.9328271],[-105.5044418,30.8715864],[-105.4412973,30.8715864],[-105.4412973,30.808463],[-105.3781497,30.808463],[-105.3781497,30.7471828],[-105.1904658,30.7471828],[-105.1904658,30.6843231],[-105.1286244,30.6843231],[-105.1286244,30.6199737],[-105.0036504,30.6199737],[-105.0036504,30.5589058],[-104.9417962,30.5589058],[-104.9417962,30.4963236],[-104.8782018,30.4963236],[-104.8782018,30.3098261],[-104.8155257,30.3098261],[-104.8155257,30.2478305],[-104.7536079,30.2478305],[-104.7536079,29.9353916],[-104.690949,29.9353916],[-104.690949,29.8090156],[-104.6291301,29.8090156],[-104.6291301,29.6843577],[-104.5659869,29.6843577],[-104.5659869,29.6223459],[-104.5037188,29.6223459],[-104.5037188,29.5595436],[-104.4410072,29.5595436],[-104.4410072,29.4974832],[-104.2537551,29.4974832],[-104.2537551,29.3716718],[-104.1291984,29.3716718],[-104.1291984,29.3091621],[-104.0688737,29.3091621],[-104.0688737,29.2467276],[-103.8187309,29.2467276],[-103.8187309,29.1843076],[-103.755736,29.1843076],[-103.755736,29.1223174],[-103.5667542,29.1223174],[-103.5667542,29.0598119],[-103.5049819,29.0598119],[-103.5049819,28.9967506],[-103.3165753,28.9967506],[-103.3165753,28.9346923],[-103.0597572,28.9346923],[-103.0597572,29.0592965],[-102.9979694,29.0592965],[-102.9979694,29.1212855],[-102.9331397,29.1212855],[-102.9331397,29.1848575],[-102.8095989,29.1848575],[-102.8095989,29.2526154],[-102.8701345,29.2526154],[-102.8701345,29.308096],[-102.8096681,29.308096],[-102.8096681,29.3715484],[-102.7475655,29.3715484],[-102.7475655,29.5581899],[-102.684554,29.5581899],[-102.684554,29.6847655],[-102.4967764,29.6847655],[-102.4967764,29.7457694],[-102.3086647,29.7457694],[-102.3086647,29.8086627],[-102.1909323,29.8086627],[-102.1909323,29.7460097],[-101.5049914,29.7460097],[-101.5049914,29.6846777],[-101.3805796,29.6846777],[-101.3805796,29.5594459],[-101.3175057,29.5594459],[-101.3175057,29.4958934],[-101.1910075,29.4958934],[-101.1910075,29.4326115],[-101.067501,29.4326115],[-101.067501,29.308808],[-100.9418897,29.308808],[-100.9418897,29.2456231],[-100.8167271,29.2456231],[-100.8167271,29.1190449],[-100.7522672,29.1190449],[-100.7522672,29.0578214],[-100.6925358,29.0578214],[-100.6925358,28.8720431],[-100.6290158,28.8720431],[-100.6290158,28.8095363],[-100.5679901,28.8095363],[-100.5679901,28.622554],[-100.5040411,28.622554],[-100.5040411,28.5583804],[-100.4421832,28.5583804],[-100.4421832,28.4968266],[-100.379434,28.4968266],[-100.379434,28.3092865],[-100.3171942,28.3092865],[-100.3171942,28.1835681],[-100.254483,28.1835681],[-100.254483,28.1213885],[-100.1282282,28.1213885],[-100.1282282,28.059215],[-100.0659537,28.059215],[-100.0659537,27.9966087],[-100.0023855,27.9966087],[-100.0023855,27.9332152],[-99.9426497,27.9332152],[-99.9426497,27.7454658],[-99.816851,27.7454658],[-99.816851,27.6834301],[-99.7541346,27.6834301],[-99.7541346,27.6221543],[-99.6291629,27.6221543],[-99.6291629,27.5588977],[-99.5672838,27.5588977],[-99.5672838,27.4353752],[-99.5041798,27.4353752],[-99.5041798,27.3774021],[-99.5671796,27.3774021],[-99.5671796,27.2463726],[-99.504975,27.2463726],[-99.504975,26.9965649],[-99.4427427,26.9965649],[-99.4427427,26.872803],[-99.3800633,26.872803],[-99.3800633,26.8068179],[-99.3190684,26.8068179],[-99.3190684,26.7473614],[-99.2537541,26.7473614],[-99.2537541,26.6210068],[-99.1910617,26.6210068],[-99.1910617,26.4956737],[-99.1300639,26.4956737],[-99.1300639,26.3713808],[-99.0029473,26.3713808],[-99.0029473,26.3093836],[-98.816572,26.3093836],[-98.816572,26.2457762],[-98.6920082,26.2457762],[-98.6920082,26.1837096],[-98.4440896,26.1837096],[-98.4440896,26.1217217],[-98.3823181,26.1217217],[-98.3823181,26.0596488],[-98.2532707,26.0596488],[-98.2532707,25.9986871],[-98.0109084,25.9986871],[-98.0109084,25.9932255],[-97.6932319,25.9932255],[-97.6932319,25.9334103],[-97.6313904,25.9334103],[-97.6313904,25.8695893],[-97.5046779,25.8695893],[-97.5046779,25.8073488],[-97.3083401,25.8073488],[-97.3083401,25.8731159],[-97.2456326,25.8731159],[-97.2456326,25.9353731],[-97.1138939,25.9353731],[-97.1138939,27.6809179],[-97.0571035,27.6809179],[-97.0571035,27.8108242],[-95.5810766,27.8108242],[-95.5810766,28.7468827],[-94.271041,28.7468827],[-94.271041,29.5594076],[-92.5029947,29.5594076],[-92.5029947,29.4974754],[-91.8776216,29.4974754],[-91.8776216,29.3727013],[-91.378418,29.3727013],[-91.378418,29.2468326],[-91.3153953,29.2468326],[-91.3153953,29.1844301],[-91.1294702,29.1844301],[-91.1294702,29.1232559],[-91.0052632,29.1232559],[-91.0052632,28.9968437],[-89.4500159,28.9968437],[-89.4500159,28.8677422],[-88.8104309,28.8677422],[-88.8104309,30.1841864],[-85.8791527,30.1841864],[-85.8791527,29.5455038],[-84.8368083,29.5455038],[-84.8368083,29.6225158],[-84.7482786,29.6225158],[-84.7482786,29.683624],[-84.685894,29.683624],[-84.685894,29.7468386],[-83.6296975,29.7468386],[-83.6296975,29.4324361],[-83.3174937,29.4324361],[-83.3174937,29.0579442],[-82.879659,29.0579442],[-82.879659,27.7453529],[-82.8182822,27.7453529],[-82.8182822,26.9290868],[-82.3796782,26.9290868],[-82.3796782,26.3694183],[-81.8777106,26.3694183],[-81.8777106,25.805971],[-81.5036862,25.805971],[-81.5036862,25.7474753],[-81.4405462,25.7474753],[-81.4405462,25.6851489],[-81.3155883,25.6851489],[-81.3155883,25.5600985],[-81.2538534,25.5600985],[-81.2538534,25.4342361],[-81.1902012,25.4342361],[-81.1902012,25.1234341],[-81.1288133,25.1234341],[-81.1288133,25.0619389],[-81.0649231,25.0619389],[-81.0649231,24.8157807],[-81.6289469,24.8157807],[-81.6289469,24.7538367],[-81.6907173,24.7538367],[-81.6907173,24.6899374],[-81.8173189,24.6899374],[-81.8173189,24.6279161],[-82.1910041,24.6279161],[-82.1910041,24.496294],[-81.6216596,24.496294],[-81.6216596,24.559484],[-81.372006,24.559484],[-81.372006,24.6220687],[-81.0593278,24.6220687],[-81.0593278,24.684826],[-80.9347147,24.684826],[-80.9347147,24.7474828],[-80.7471081,24.7474828],[-80.7471081,24.8100618],[-80.3629898,24.8100618],[-80.3629898,25.1175858],[-80.122344,25.1175858],[-80.122344,25.7472357],[-80.0588458,25.7472357],[-80.0588458,26.3708251],[-79.995837,26.3708251],[-79.995837,26.9398003],[-80.0587265,26.9398003],[-80.0587265,27.1277466],[-80.1226251,27.1277466],[-80.1226251,27.2534279],[-80.1846956,27.2534279],[-80.1846956,27.3781229],[-80.246175,27.3781229],[-80.246175,27.5658729],[-80.3094768,27.5658729],[-80.3094768,27.7530311],[-80.3721485,27.7530311],[-80.3721485,27.8774451],[-80.4351457,27.8774451],[-80.4351457,28.0033366],[-80.4966078,28.0033366],[-80.4966078,28.1277326],[-80.5587159,28.1277326],[-80.5587159,28.3723509],[-80.4966335,28.3723509],[-80.4966335,29.5160326],[-81.1213644,29.5160326],[-81.1213644,31.6846966],[-80.6018723,31.6846966],[-80.6018723,32.2475309],[-79.4921024,32.2475309],[-79.4921024,32.9970261],[-79.1116488,32.9970261],[-79.1116488,33.3729457],[-78.6153621,33.3729457],[-78.6153621,33.8097638],[-77.9316963,33.8097638],[-77.9316963,33.8718243],[-77.8692252,33.8718243],[-77.8692252,34.0552454],[-77.6826392,34.0552454],[-77.6826392,34.2974598],[-77.2453509,34.2974598],[-77.2453509,34.5598585],[-76.4973277,34.5598585],[-76.4973277,34.622796],[-76.4337602,34.622796],[-76.4337602,34.6849285],[-76.373212,34.6849285],[-76.373212,34.7467674],[-76.3059364,34.7467674],[-76.3059364,34.808551],[-76.2468017,34.808551],[-76.2468017,34.8728418],[-76.1825922,34.8728418],[-76.1825922,34.9335332],[-76.120814,34.9335332],[-76.120814,34.9952359],[-75.9979015,34.9952359],[-75.9979015,35.0578182],[-75.870338,35.0578182],[-75.870338,35.1219097],[-75.7462194,35.1219097],[-75.7462194,35.1818911],[-75.4929694,35.1818911],[-75.4929694,35.3082988],[-75.4325662,35.3082988],[-75.4325662,35.7542495],[-75.4969907,35.7542495],[-75.4969907,37.8105602],[-75.3082972,37.8105602],[-75.3082972,37.8720088],[-75.245601,37.8720088],[-75.245601,37.9954849],[-75.1828751,37.9954849],[-75.1828751,38.0585079],[-75.1184793,38.0585079],[-75.1184793,38.2469091],[-75.0592098,38.2469091],[-75.0592098,38.3704316],[-74.9948111,38.3704316],[-74.9948111,38.8718417],[-74.4878252,38.8718417],[-74.4878252,39.3089428],[-74.1766317,39.3089428],[-74.1766317,39.6224653],[-74.0567045,39.6224653],[-74.0567045,39.933178],[-73.9959035,39.933178],[-73.9959035,40.1854852],[-73.9341593,40.1854852],[-73.9341593,40.4959486],[-73.8723024,40.4959486],[-73.8723024,40.5527135],[-71.8074506,40.5527135],[-71.8074506,41.3088005],[-70.882512,41.3088005],[-70.882512,41.184978],[-70.7461947,41.184978],[-70.7461947,41.3091865],[-70.4337553,41.3091865],[-70.4337553,41.4963885],[-69.9334281,41.4963885],[-69.9334281,41.6230802],[-69.869857,41.6230802],[-69.869857,41.8776895],[-69.935791,41.8776895],[-69.935791,42.0032342],[-69.9975823,42.0032342],[-69.9975823,42.0650191],[-70.0606103,42.0650191],[-70.0606103,42.1294348],[-70.5572884,42.1294348],[-70.5572884,43.2487079],[-70.4974097,43.2487079],[-70.4974097,43.3092194],[-70.3704249,43.3092194],[-70.3704249,43.371963],[-70.3085701,43.371963],[-70.3085701,43.4969879],[-70.183921,43.4969879],[-70.183921,43.6223531],[-70.057583,43.6223531],[-70.057583,43.6850173],[-69.7455247,43.6850173],[-69.7455247,43.7476571],[-69.2472845,43.7476571],[-69.2472845,43.8107035],[-69.0560701,43.8107035],[-69.0560701,43.8717247],[-68.9950522,43.8717247],[-68.9950522,43.9982022],[-68.4963672,43.9982022],[-68.4963672,44.0597368],[-68.3081038,44.0597368],[-68.3081038,44.122137],[-68.1851802,44.122137],[-68.1851802,44.3081382],[-67.9956019,44.3081382],[-67.9956019,44.3727489],[-67.8103041,44.3727489],[-67.8103041,44.435178],[-67.4965289,44.435178],[-67.4965289,44.4968776],[-67.37102,44.4968776],[-67.37102,44.5600642],[-67.1848753,44.5600642],[-67.1848753,44.6213345],[-67.1221208,44.6213345],[-67.1221208,44.6867918],[-67.059365,44.6867918],[-67.059365,44.7473657],[-66.9311098,44.7473657],[-66.9311098,44.9406566],[-66.994683,44.9406566],[-66.994683,45.0024514],[-67.0595847,45.0024514],[-67.0595847,45.1273377],[-67.1201974,45.1273377],[-67.1201974,45.1910115],[-67.2469811,45.1910115],[-67.2469811,45.253442],[-67.3177546,45.253442],[-67.3177546,45.1898369],[-67.370749,45.1898369],[-67.370749,45.2534001],[-67.4326888,45.2534001],[-67.4326888,45.3083409],[-67.3708571,45.3083409],[-67.3708571,45.4396986],[-67.4305573,45.4396986],[-67.4305573,45.4950095],[-67.37099,45.4950095],[-67.37099,45.6264543],[-67.6214982,45.6264543],[-67.6214982,45.6896133],[-67.683828,45.6896133],[-67.683828,45.753259],[-67.7462097,45.753259],[-67.7462097,47.1268165],[-67.8700141,47.1268165],[-67.8700141,47.1900278],[-67.9323803,47.1900278],[-67.9323803,47.2539678],[-67.9959387,47.2539678],[-67.9959387,47.3149737],[-68.1206676,47.3149737],[-68.1206676,47.3780823],[-68.4423175,47.3780823],[-68.4423175,47.3166082],[-68.6314305,47.3166082],[-68.6314305,47.2544676],[-68.9978037,47.2544676],[-68.9978037,47.439895],[-69.0607223,47.439895],[-69.0607223,47.5047558],[-69.2538122,47.5047558],[-69.2538122,47.4398084],[-69.3179284,47.4398084],[-69.3179284,47.378601],[-69.4438546,47.378601],[-69.4438546,47.3156274],[-69.5038204,47.3156274],[-69.5038204,47.2525839],[-69.5667838,47.2525839],[-69.5667838,47.1910884],[-69.6303478,47.1910884],[-69.6303478,47.128701],[-69.6933103,47.128701],[-69.6933103,47.0654307],[-69.7557063,47.0654307],[-69.7557063,47.0042751],[-69.8180391,47.0042751],[-69.8180391,46.9415344],[-69.8804023,46.9415344],[-69.8804023,46.8792519],[-69.9421674,46.8792519],[-69.9421674,46.8177399],[-70.0063088,46.8177399],[-70.0063088,46.6920295],[-70.0704265,46.6920295],[-70.0704265,46.4425926],[-70.1945902,46.4425926],[-70.1945902,46.3785887],[-70.2562047,46.3785887],[-70.2562047,46.3152628],[-70.3203651,46.3152628],[-70.3203651,46.0651209],[-70.3814988,46.0651209],[-70.3814988,45.93552],[-70.3201618,45.93552],[-70.3201618,45.879479],[-70.4493131,45.879479],[-70.4493131,45.7538713],[-70.5070021,45.7538713],[-70.5070021,45.6916912],[-70.6316642,45.6916912],[-70.6316642,45.6291619],[-70.7575538,45.6291619],[-70.7575538,45.4414685],[-70.8809878,45.4414685],[-70.8809878,45.3780612],[-71.13328,45.3780612],[-71.13328,45.3151452],[-71.3830282,45.3151452],[-71.3830282,45.253416],[-71.5076448,45.253416],[-71.5076448,45.0655726],[-73.9418929,45.0655726],[-73.9418929,45.0031242],[-74.7469725,45.0031242],[-74.7469725,45.0649003],[-74.8800964,45.0649003],[-74.8800964,45.0029023],[-75.0662455,45.0029023],[-75.0662455,44.9415167],[-75.2539363,44.9415167],[-75.2539363,44.8776043],[-75.3789648,44.8776043],[-75.3789648,44.8153462],[-75.4431283,44.8153462],[-75.4431283,44.7536053],[-75.5666566,44.7536053],[-75.5666566,44.6909879],[-75.6290205,44.6909879],[-75.6290205,44.6284958],[-75.7540484,44.6284958],[-75.7540484,44.566385],[-75.817312,44.566385],[-75.817312,44.5028932],[-75.8799549,44.5028932],[-75.8799549,44.3784946],[-76.1300319,44.3784946],[-76.1300319,44.3159227],[-76.1926961,44.3159227],[-76.1926961,44.2534378],[-76.3182619,44.2534378],[-76.3182619,44.1916726],[-76.3792975,44.1916726],[-76.3792975,44.0653733],[-76.4427584,44.0653733],[-76.4427584,43.9963825],[-76.317027,43.9963825],[-76.317027,43.9414581],[-76.5076611,43.9414581],[-76.5076611,43.8723335],[-76.3829974,43.8723335],[-76.3829974,43.8091872],[-76.2534102,43.8091872],[-76.2534102,43.5665222],[-76.5064833,43.5665222],[-76.5064833,43.5033881],[-76.6331208,43.5033881],[-76.6331208,43.4432252],[-76.6951085,43.4432252],[-76.6951085,43.3786858],[-76.8177798,43.3786858],[-76.8177798,43.318066],[-77.682,43.318066],[-77.682,43.3789376],[-78.0565883,43.3789376],[-78.0565883,43.4396918],[-78.4389748,43.4396918],[-78.4389748,43.3794382],[-78.8803396,43.3794382],[-78.8803396,43.3149724],[-79.1298858,43.3149724],[-79.1298858,43.2429286],[-79.0669615,43.2429286],[-79.0669615,43.1299931],[-79.1298858,43.1299931],[-79.1298858,43.0577305],[-79.071264,43.0577305],[-79.071264,42.9294906],[-78.943264,42.9294906],[-78.943264,42.7542165],[-79.069439,42.7542165],[-79.069439,42.6941622],[-79.133439,42.6941622],[-79.133439,42.6296973],[-79.1947499,42.6296973],[-79.1947499,42.5663538],[-79.3786827,42.5663538],[-79.3786827,42.5033425],[-79.4442961,42.5033425],[-79.4442961,42.4410614],[-79.5679936,42.4410614],[-79.5679936,42.3775264],[-79.6906154,42.3775264],[-79.6906154,42.3171086],[-79.8164642,42.3171086],[-79.8164642,42.2534481],[-80.0052373,42.2534481],[-80.0052373,42.1909188],[-80.1916829,42.1909188],[-80.1916829,42.1272555],[-80.3167992,42.1272555],[-80.3167992,42.0669857],[-80.5063234,42.0669857],[-80.5063234,42.0034331],[-80.6930471,42.0034331],[-80.6930471,41.9415141],[-80.9440403,41.9415141],[-80.9440403,41.8781193],[-81.1942729,41.8781193],[-81.1942729,41.8166455],[-81.3190089,41.8166455],[-81.3190089,41.7545453],[-81.4418435,41.7545453],[-81.4418435,41.690965],[-81.5053523,41.690965],[-81.5053523,41.6301643],[-82.7470081,41.6301643],[-82.7470081,41.7536942],[-82.8839135,41.7536942],[-82.8839135,41.5656075],[-82.9957195,41.5656075],[-82.9957195,41.6270375],[-83.1257796,41.6270375],[-83.1257796,41.6878411],[-83.2474733,41.6878411],[-83.2474733,41.7536942],[-83.3737305,41.7536942],[-83.3737305,41.809276],[-83.3106019,41.809276],[-83.3106019,41.8716064],[-83.2474733,41.8716064],[-83.2474733,41.9361393],[-83.1843447,41.9361393],[-83.1843447,41.9960851],[-83.1207681,41.9960851],[-83.1207681,42.2464812],[-83.0589194,42.2464812],[-83.0589194,42.3089555],[-82.8685328,42.3089555],[-82.8685328,42.3717652],[-82.8072219,42.3717652],[-82.8072219,42.558553],[-82.7553745,42.558553],[-82.7553745,42.4954945],[-82.5599041,42.4954945],[-82.5599041,42.558553],[-82.4967755,42.558553],[-82.4967755,42.6833607],[-82.4328863,42.6833607],[-82.4328863,42.9342196],[-82.3700552,42.9342196],[-82.3700552,43.0648071],[-82.4328863,43.0648071],[-82.4328863,43.1917566],[-82.4947464,43.1917566],[-82.4947464,43.5034627],[-82.557133,43.5034627],[-82.557133,43.8160901],[-82.6197884,43.8160901],[-82.6197884,43.9422098],[-82.6839499,43.9422098],[-82.6839499,44.0022641],[-82.7465346,44.0022641],[-82.7465346,44.0670545],[-82.8708696,44.0670545],[-82.8708696,44.1291935],[-83.008517,44.1291935],[-83.008517,44.0664786],[-83.1336086,44.0664786],[-83.1336086,44.0053949],[-83.2414522,44.0053949],[-83.2414522,44.9962034],[-83.1806112,44.9962034],[-83.1806112,45.067302],[-83.2455172,45.067302],[-83.2455172,45.1287382],[-83.3065878,45.1287382],[-83.3065878,45.2551509],[-83.3706087,45.2551509],[-83.3706087,45.3165923],[-83.4325644,45.3165923],[-83.4325644,45.3792105],[-83.6178415,45.3792105],[-83.6178415,45.4419665],[-83.8084291,45.4419665],[-83.8084291,45.5036189],[-84.0550718,45.5036189],[-84.0550718,45.5647907],[-84.1235181,45.5647907],[-84.1235181,45.6287845],[-84.1807534,45.6287845],[-84.1807534,45.6914688],[-84.3111554,45.6914688],[-84.3111554,45.9337076],[-83.8209974,45.9337076],[-83.8209974,45.8725113],[-83.4968086,45.8725113],[-83.4968086,45.9337076],[-83.4338066,45.9337076],[-83.4338066,46.0016863],[-83.4962697,46.0016863],[-83.4962697,46.0668178],[-83.5599956,46.0668178],[-83.5599956,46.1261576],[-83.9954558,46.1261576],[-83.9954558,46.1931747],[-84.0591816,46.1931747],[-84.0591816,46.3814972],[-84.1152614,46.3814972],[-84.1152614,46.4953584],[-84.0591816,46.4953584],[-84.0591816,46.5682653],[-84.2579545,46.5682653],[-84.2579545,46.5051232],[-84.3071879,46.5051232],[-84.3071879,46.5682653],[-84.4415364,46.5682653],[-84.4415364,46.504525],[-84.9965729,46.504525],[-84.9965729,46.6842882],[-84.9298158,46.6842882],[-84.9298158,46.818077],[-85.3165894,46.818077],[-85.3165894,46.7535825],[-87.5562645,46.7535825],[-87.5562645,47.4407371],[-87.6825361,47.4407371],[-87.6825361,47.5035554],[-88.2560738,47.5035554],[-88.2560738,47.4433716],[-88.4417419,47.4433716],[-88.4417419,47.3789949],[-88.50683,47.3789949],[-88.50683,47.3153881],[-88.6312821,47.3153881],[-88.6312821,47.2539782],[-88.7569636,47.2539782],[-88.7569636,47.1934682],[-88.8838253,47.1934682],[-88.8838253,47.1284735],[-88.9434208,47.1284735],[-88.9434208,47.0662127],[-89.0708726,47.0662127],[-89.0708726,47.0026826],[-89.2565553,47.0026826],[-89.2565553,46.9410806],[-90.3677669,46.9410806],[-90.3677669,47.6844827],[-90.3069978,47.6844827],[-90.3069978,47.7460174],[-89.994859,47.7460174],[-89.994859,47.8082719],[-89.8048615,47.8082719],[-89.8048615,47.8700562],[-89.6797699,47.8700562],[-89.6797699,47.9339637],[-89.4933757,47.9339637],[-89.4933757,47.9957956],[-89.4284697,47.9957956],[-89.4284697,48.0656377],[-89.9932739,48.0656377],[-89.9932739,48.1282966],[-90.7455933,48.1282966],[-90.7455933,48.1893056],[-90.8087291,48.1893056],[-90.8087291,48.2522065],[-91.067763,48.2522065],[-91.067763,48.1916658],[-91.1946247,48.1916658],[-91.1946247,48.1279027],[-91.6814196,48.1279027],[-91.6814196,48.2525994],[-91.9321927,48.2525994],[-91.9321927,48.3142454],[-91.9929683,48.3142454],[-91.9929683,48.3780845],[-92.3189383,48.3780845],[-92.3189383,48.2529081],[-92.3732233,48.2529081],[-92.3732233,48.3153385],[-92.4322288,48.3153385],[-92.4322288,48.4411448],[-92.4977248,48.4411448],[-92.4977248,48.501781],[-92.5679413,48.501781],[-92.5679413,48.439579],[-92.6210462,48.439579],[-92.6210462,48.5650783],[-92.8086835,48.5650783],[-92.8086835,48.6286865],[-92.8086835,48.6267365],[-92.933185,48.6267365],[-92.933185,48.6922145],[-93.0051716,48.6922145],[-93.0051716,48.6282965],[-93.1225924,48.6282965],[-93.1225924,48.6922145],[-93.3190806,48.6922145],[-93.3190806,48.6267365],[-93.5049477,48.6267365],[-93.5049477,48.5635164],[-93.7474601,48.5635164],[-93.7474601,48.6267365],[-93.8135461,48.6267365],[-93.8135461,48.6898775],[-94.2453121,48.6898775],[-94.2453121,48.7554327],[-94.6183171,48.7554327],[-94.6183171,48.941036],[-94.6809018,48.941036],[-94.6809018,49.0029737],[-94.7441532,49.0029737],[-94.7441532,49.2536079],[-94.8084069,49.2536079],[-94.8084069,49.3784134],[-95.1192391,49.3784134],[-95.1192391,49.4425264],[-95.1934341,49.4425264],[-95.1934341,49.0035292],[-96.87069,49.0035292],[-96.87069,49.0656063],[-99.0049312,49.0656063],[-99.0049312,49.0050714],[-109.3699257,49.0050714],[-109.3699257,49.0668231],[-109.5058746,49.0668231],[-109.5058746,49.0050714],[-114.1830014,49.0050714],[-114.1830014,49.0687317],[-114.7578709,49.0687317],[-114.7578709,49.0050714],[-115.433731,49.0050714],[-115.433731,49.0671412],[-116.5062706,49.0671412],[-116.5062706,49.0050714],[-117.3089504,49.0050714],[-117.3089504,49.0659803],[-119.882945,49.0659803],[-119.882945,49.0050714],[-120.1208555,49.0050714],[-120.1208555,49.0678367],[-121.4451636,49.0678367],[-121.4451636,49.0050714],[-121.9311808,49.0050714],[-121.9311808,49.0656099],[-122.817484,49.0656099],[-122.817484,49.0029143],[-122.8795155,49.0029143],[-122.8795155,48.9347018],[-122.8174629,48.9347018],[-122.8174629,48.8101998],[-122.7538859,48.8101998],[-122.7538859,48.7533758],[-122.8712937,48.7533758],[-122.8712937,48.8153948],[-123.0055391,48.8153948],[-123.0055391,48.7529529],[-123.1296926,48.7529529],[-123.1296926,48.6902201],[-123.1838197,48.6902201],[-123.1838197,48.7529029],[-123.2549305,48.7529029]],[[-122.9341743,37.7521547],[-122.9347457,37.6842013],[-123.0679013,37.6849023],[-123.0673747,37.7475251],[-123.1292603,37.7478506],[-123.1286894,37.815685],[-123.0590687,37.8153192],[-123.0595947,37.7528143],[-122.9341743,37.7521547]],[[-71.6299464,41.2540893],[-71.4966465,41.2541393],[-71.4965596,41.122965],[-71.6298594,41.1229149],[-71.6299464,41.2540893]],[[-70.3184265,41.3775196],[-70.3183384,41.2448243],[-70.1906612,41.2448722],[-70.1906239,41.1886019],[-69.9336025,41.1886984],[-69.933729,41.3791941],[-69.9950664,41.3791712],[-69.995109,41.443159],[-70.0707828,41.4431307],[-70.0706972,41.3144915],[-70.2461667,41.3144258],[-70.2462087,41.3775467],[-70.3184265,41.3775196]],[[-68.9403374,43.9404062],[-68.6856948,43.9404977],[-68.6856475,43.8721797],[-68.7465405,43.8721577],[-68.7464976,43.8102529],[-68.8090782,43.8102304],[-68.8090343,43.746728],[-68.8773094,43.7467034],[-68.8773544,43.8117826],[-68.9402483,43.8117599],[-68.9403374,43.9404062]],[[-123.1291466,49.0645144],[-122.9954224,49.0645144],[-122.9954224,48.9343243],[-123.1291466,48.9343243],[-123.1291466,49.0645144]],[[-82.9407144,24.7535913],[-82.8719398,24.7535913],[-82.8719398,24.6905653],[-82.7446233,24.6905653],[-82.7446233,24.6214593],[-82.8088038,24.6214593],[-82.8088038,24.5594908],[-82.9407144,24.5594908],[-82.9407144,24.7535913]]]},{"id":"USGS-Scanned_Topographic","name":"USGS Topographic Maps","type":"tms","template":"http://caltopo.s3.amazonaws.com/topo/{zoom}/{x}/{y}.png","scaleExtent":[0,16],"polygon":[[[-55.9959409871,52.00107125754],[-112.02896100663,52.00107125754],[-112.03994733476,56.01308253302],[-120.0049439862,56.00592357111],[-120.01711631014,60.01202439709],[-132.00196823895,60.00239237126],[-132.01208445818,63.00193292546],[-133.96882922149,63.00050478005],[-133.97240257168,63.9922484722],[-141.04429430438,63.98726254018],[-141.06879354491,69.92045693283],[-156.24893170976,71.51583202984],[-160.44570905351,70.83527373985],[-167.08145124101,68.42906280103],[-164.08218366288,67.03913532024],[-169.01504499101,65.68268604273],[-166.57608014726,64.50777504773],[-161.82998639726,64.0500622981],[-165.08193952226,63.26030016403],[-168.02627545976,59.7862264253],[-162.53311139726,59.73089435789],[-162.35733014726,58.55904663221],[-157.83096295976,58.31752983705],[-158.00674420976,57.52404350658],[-168.22402936601,53.51022153947],[-166.55410749101,53.14277307072],[-158.77578717851,54.88541314654],[-158.68240338944,55.7496444805],[-156.55105573319,56.00847621073],[-156.15554792069,56.7746616888],[-154.70535260819,56.14336689443],[-152.07412702226,57.37034511851],[-151.62918073319,58.22653323066],[-152.00820905351,58.98055685754],[-145.98770124101,60.24740887373],[-140.38467389726,59.48634241018],[-136.53945905351,57.80610084736],[-133.79287702226,54.83482554482],[-133.33145124101,53.14277307072],[-131.46377545976,51.69838238021],[-128.52493268632,51.74602265442],[-129.79385358476,50.90159054062],[-124.56436139726,47.49785657441],[-124.03701764726,45.48627362525],[-124.69619733476,42.90428451679],[-124.49844342851,40.3414647251],[-122.80654889726,37.53929308709],[-119.99404889726,33.37084692374],[-117.24746686601,32.54119524801],[-111.13906842851,31.19770451575],[-106.70059186601,31.23528720858],[-103.20693952226,28.64618215851],[-101.84463483476,29.81580068657],[-99.20791608476,26.28743998885],[-96.79092389726,25.75431753335],[-96.92275983476,27.96911213371],[-93.47305280351,29.68226300815],[-88.94668561601,28.87732407469],[-88.61709577226,30.17736083469],[-86.20010358476,30.3671253082],[-84.96963483476,29.43379356715],[-84.09072858476,30.06332630046],[-82.97012311601,28.95425748047],[-82.97012311601,27.26823750278],[-81.25625592851,25.07956298739],[-82.09121686601,24.5610471236],[-80.06973249101,24.76073298597],[-79.85000592851,27.11188091684],[-81.27822858476,30.70777424386],[-78.99307233476,33.20554049136],[-75.03799420976,35.59830000028],[-75.85098249101,37.2425160052],[-73.74160749101,40.4585957587],[-69.89639264726,41.60224497127],[-70.68740827226,43.17628724449],[-66.93008405351,44.69516042167],[-66.53457624101,43.08006996122],[-64.20547467851,43.35229243812],[-59.50332624101,45.73220792131],[-59.51431256913,46.24761804024],[-60.00320417069,46.25901313529],[-59.99221784257,47.24505773341],[-59.00894147538,47.23759898478],[-58.99795514726,47.50266941922],[-56.51504499101,47.50266941922],[-56.52603131913,46.74770404019],[-53.99917585038,46.74770404019],[-53.97720319413,46.48358117386],[-52.49404889726,46.46354265729],[-52.50503522538,48.75360583388],[-52.99667340898,48.75451123442],[-53.01315290116,49.99551104004],[-55.00167829179,50.00610367548],[-55.03738385819,53.74720613495],[-56.00418073319,53.73421061801],[-55.9959409871,52.00107125754]],[[-59.50126630448,43.7495431608],[-60.50239545487,43.7495431608],[-60.50239545487,43.99999882251],[-59.99839765214,43.99999882251],[-59.99839765214,44.2494016836],[-59.50126630448,44.2494016836],[-59.50126630448,43.7495431608]],[[-155.95024091386,20.49523373356],[-157.3267518687,20.49153389084],[-157.32902509355,21.23181053727],[-155.95251413871,21.23549220541],[-155.95024091386,20.49523373356]],[[-157.64488202714,21.24845058596],[-158.28534362719,21.24673774522],[-158.28689557694,21.7499618541],[-157.6464339769,21.75166877943],[-157.64488202714,21.24845058596]],[[-156.12602216386,20.32469602374],[-154.7461696274,20.3284088686],[-154.74174482011,18.87578125335],[-156.12159735656,18.87203473488],[-156.12602216386,20.32469602374]],[[-159.29077130937,22.24504086823],[-159.2892966564,21.76857042389],[-160.28916841131,21.76590592196],[-160.29064306428,22.24238530626],[-159.29077130937,22.24504086823]]],"terms_url":"https://caltopo.com/","terms_text":"© Caltopo"},{"id":"sjcgis.org-General_Basemap_WM","name":"Vector Streetmap for San Juan County WA","type":"tms","template":"http://sjcgis.org/arcgis/rest/services/Basemaps/General_Basemap_WM/MapServer/tile/{zoom}/{y}/{x}","description":"Public domain street and address data from the San Juan County, WA. Updated at least quarterly.","scaleExtent":[0,19],"polygon":[[[-123.274024,48.692975],[-123.007726,48.767256],[-123.007619,48.831577],[-122.783495,48.758416],[-122.693402,48.658522],[-122.767451,48.603606],[-122.744842,48.387083],[-123.248221,48.283531],[-123.114524,48.422614],[-123.219035,48.548575],[-123.274024,48.692975]]],"best":true},{"id":"Vejmidte_Denmark","name":"Vejmidte (Denmark)","type":"tms","template":"http://{switch:a,b,c}.tile.openstreetmap.dk/danmark/vejmidte/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"polygon":[[[8.3743941,54.9551655],[8.3683809,55.4042149],[8.2103997,55.4039795],[8.2087314,55.4937345],[8.0502655,55.4924731],[8.0185123,56.7501399],[8.1819161,56.7509948],[8.1763274,57.0208898],[8.3413329,57.0219872],[8.3392467,57.1119574],[8.5054433,57.1123212],[8.5033923,57.2020499],[9.3316304,57.2027636],[9.3319079,57.2924835],[9.4978864,57.2919578],[9.4988593,57.3820608],[9.6649749,57.3811615],[9.6687295,57.5605591],[9.8351961,57.5596265],[9.8374896,57.6493322],[10.1725726,57.6462818],[10.1754245,57.7367768],[10.5118282,57.7330269],[10.5152095,57.8228945],[10.6834853,57.8207722],[10.6751613,57.6412021],[10.5077045,57.6433097],[10.5039992,57.5535088],[10.671038,57.5514113],[10.6507805,57.1024538],[10.4857673,57.1045138],[10.4786236,56.9249051],[10.3143981,56.9267573],[10.3112341,56.8369269],[10.4750295,56.83509],[10.4649016,56.5656681],[10.9524239,56.5589761],[10.9479249,56.4692243],[11.1099335,56.4664675],[11.1052639,56.376833],[10.9429901,56.3795284],[10.9341235,56.1994768],[10.7719685,56.2020244],[10.7694751,56.1120103],[10.6079695,56.1150259],[10.4466742,56.116717],[10.2865948,56.118675],[10.2831527,56.0281851],[10.4439274,56.0270388],[10.4417713,55.7579243],[10.4334961,55.6693533],[10.743814,55.6646861],[10.743814,55.5712253],[10.8969041,55.5712253],[10.9051793,55.3953852],[11.0613726,55.3812841],[11.0593038,55.1124061],[11.0458567,55.0318621],[11.2030844,55.0247474],[11.2030844,55.117139],[11.0593038,55.1124061],[11.0613726,55.3812841],[11.0789572,55.5712253],[10.8969041,55.5712253],[10.9258671,55.6670198],[10.743814,55.6646861],[10.7562267,55.7579243],[10.4417713,55.7579243],[10.4439274,56.0270388],[10.4466742,56.116717],[10.6079695,56.1150259],[10.6052053,56.0247462],[10.9258671,56.0201215],[10.9197132,55.9309388],[11.0802782,55.92792],[11.0858066,56.0178284],[11.7265047,56.005058],[11.7319981,56.0952142],[12.0540333,56.0871256],[12.0608477,56.1762576],[12.7023469,56.1594405],[12.6611131,55.7114318],[12.9792318,55.7014026],[12.9612912,55.5217294],[12.3268659,55.5412096],[12.3206071,55.4513655],[12.4778226,55.447067],[12.4702432,55.3570479],[12.6269738,55.3523837],[12.6200898,55.2632576],[12.4627339,55.26722],[12.4552949,55.1778223],[12.2987046,55.1822303],[12.2897344,55.0923641],[12.6048608,55.0832904],[12.5872011,54.9036285],[12.2766618,54.9119031],[12.2610181,54.7331602],[12.1070691,54.7378161],[12.0858621,54.4681655],[11.7794953,54.4753579],[11.7837381,54.5654783],[11.1658525,54.5782155],[11.1706443,54.6686508],[10.8617173,54.6733956],[10.8651245,54.7634667],[10.7713646,54.7643888],[10.7707276,54.7372807],[10.7551428,54.7375776],[10.7544039,54.7195666],[10.7389074,54.7197588],[10.7384368,54.7108482],[10.7074486,54.7113045],[10.7041094,54.6756741],[10.5510973,54.6781698],[10.5547184,54.7670245],[10.2423994,54.7705935],[10.2459845,54.8604673],[10.0902268,54.8622134],[10.0873731,54.7723851],[9.1555798,54.7769557],[9.1562752,54.8675369],[8.5321973,54.8663765],[8.531432,54.95516],[8.3743941,54.9551655]],[[11.4577738,56.819554],[11.7849181,56.8127385],[11.7716715,56.6332796],[11.4459621,56.6401087],[11.4577738,56.819554]],[[11.3274736,57.3612962],[11.3161808,57.1818004],[11.1508692,57.1847276],[11.1456628,57.094962],[10.8157703,57.1001693],[10.8290599,57.3695272],[11.3274736,57.3612962]],[[11.5843266,56.2777928],[11.5782882,56.1880397],[11.7392309,56.1845765],[11.7456428,56.2743186],[11.5843266,56.2777928]],[[14.6825922,55.3639405],[14.8395247,55.3565231],[14.8263755,55.2671261],[15.1393406,55.2517359],[15.1532015,55.3410836],[15.309925,55.3330556],[15.295719,55.2437356],[15.1393406,55.2517359],[15.1255631,55.1623802],[15.2815819,55.1544167],[15.2535578,54.9757646],[14.6317464,55.0062496],[14.6825922,55.3639405]]],"terms_url":"http://wiki.openstreetmap.org/wiki/Vejmidte","terms_text":"Danish municipalities"},{"id":"wien.gv.at-labels","name":"Vienna: Beschriftungen (annotations)","type":"tms","template":"https://maps.wien.gv.at/wmts/beschriftung/normal/google3857/{zoom}/{y}/{x}.png","scaleExtent":[12,19],"polygon":[[[16.17,48.1],[16.17,48.33],[16.58,48.33],[16.58,48.1],[16.17,48.1]]],"terms_url":"https://data.wien.gv.at/","terms_text":"Stadt Wien"},{"id":"wien.gv.at-gp","name":"Vienna: Mehrzweckkarte (general purpose)","type":"tms","template":"https://maps.wien.gv.at/wmts/fmzk/pastell/google3857/{zoom}/{y}/{x}.jpeg","scaleExtent":[10,19],"polygon":[[[16.17,48.1],[16.17,48.33],[16.58,48.33],[16.58,48.1],[16.17,48.1]]],"terms_url":"https://data.wien.gv.at/","terms_text":"Stadt Wien"},{"id":"wien.gv.at-aerial_image","name":"Vienna: Orthofoto (aerial image)","type":"tms","template":"https://maps.wien.gv.at/wmts/lb/farbe/google3857/{zoom}/{y}/{x}.jpeg","scaleExtent":[10,19],"polygon":[[[16.17,48.1],[16.17,48.33],[16.58,48.33],[16.58,48.1],[16.17,48.1]]],"terms_url":"https://data.wien.gv.at/","terms_text":"Stadt Wien"}];
+var dataImagery = [{"id":"sjcgis.org-Aerials_2013_WM","name":"2013 aerial imagery for San Juan County WA","type":"tms","template":"http://sjcgis.org/arcgis/rest/services/Basemaps/Aerials_2013_WM/MapServer/tile/{zoom}/{y}/{x}","description":"Public domain aerial imagery taken in May/June 2013 from San Juan County, WA. Resolution is 9 inch.","scaleExtent":[0,19],"polygon":[[[-123.02167396992,48.44667085335],[-122.9466579482,48.44780949945],[-122.90151100606,48.41306930778],[-122.80263405293,48.40771378918],[-122.79199104756,48.44279926564],[-122.8088138625,48.47865708877],[-122.73911934346,48.49572334021],[-122.78546791524,48.62160819278],[-122.73087959737,48.6361306644],[-122.75559883565,48.71207854113],[-122.95747261494,48.71592956034],[-122.97086220235,48.695765074],[-122.99970131367,48.69780454658],[-123.00347786397,48.73427448605],[-123.04330330342,48.74310484148],[-123.0762622878,48.70528190578],[-123.08484535664,48.66334903433],[-123.12844734639,48.66380254936],[-123.22698097676,48.70301615666],[-123.24655037373,48.68352650341],[-123.17445259541,48.64701977542],[-123.21513634175,48.60106537642],[-123.21393471211,48.57335906966],[-123.18080406636,48.56574853208],[-123.16621284932,48.52006125122],[-123.10235481709,48.47683634964],[-123.02167396992,48.44667085335]],[[-122.98339348286,48.78214357977],[-122.93498497456,48.76653172572],[-122.91181068867,48.73857664785],[-122.80229073018,48.73982194177],[-122.81945686787,48.75498940888],[-122.93429832906,48.79571515892],[-122.98373680562,48.79435816618],[-122.98339348286,48.78214357977]]]},{"id":"sjcgis.org-Aerials_2016_WM","name":"2016 aerial imagery for San Juan County WA","type":"tms","template":"http://sjcgis.org/arcgis/rest/services/Basemaps/Aerials_2016_WM/MapServer/tile/{zoom}/{y}/{x}","description":"Public domain aerial imagery taken in May, June, and July from San Juan County, WA. Resolution is 6 inch countywide.","scaleExtent":[0,19],"polygon":[[[-123.02167396992,48.44667085335],[-122.9466579482,48.44780949945],[-122.90151100606,48.41306930778],[-122.80263405293,48.40771378918],[-122.79199104756,48.44279926564],[-122.8088138625,48.47865708877],[-122.73911934346,48.49572334021],[-122.78546791524,48.62160819278],[-122.73087959737,48.6361306644],[-122.75559883565,48.71207854113],[-122.95747261494,48.71592956034],[-122.97086220235,48.695765074],[-122.99970131367,48.69780454658],[-123.00347786397,48.73427448605],[-123.04330330342,48.74310484148],[-123.0762622878,48.70528190578],[-123.08484535664,48.66334903433],[-123.12844734639,48.66380254936],[-123.22698097676,48.70301615666],[-123.24655037373,48.68352650341],[-123.17445259541,48.64701977542],[-123.21513634175,48.60106537642],[-123.21393471211,48.57335906966],[-123.18080406636,48.56574853208],[-123.16621284932,48.52006125122],[-123.10235481709,48.47683634964],[-123.02167396992,48.44667085335]],[[-122.98339348286,48.78214357977],[-122.93498497456,48.76653172572],[-122.91181068867,48.73857664785],[-122.80229073018,48.73982194177],[-122.81945686787,48.75498940888],[-122.93429832906,48.79571515892],[-122.98373680562,48.79435816618],[-122.98339348286,48.78214357977]]],"best":true},{"id":"OS7","name":"7th Series (OS7)","type":"tms","template":"http://ooc.openstreetmap.org/os7/{zoom}/{x}/{y}.jpg","polygon":[[[-6.4585407,49.9044128],[-6.3872009,49.9841116],[-6.2296827,49.9896159],[-6.2171269,49.8680087],[-6.4551164,49.8591793],[-6.4585407,49.9044128]],[[-1.4495137,60.8634056],[-0.7167114,60.8545122],[-0.7349744,60.4359756],[-0.6938826,60.4168218],[-0.7258429,60.3942735],[-0.7395401,60.0484714],[-0.9267357,60.0461918],[-0.9381501,59.8266157],[-1.4586452,59.831205],[-1.4455187,60.0535999],[-1.463211,60.0535999],[-1.4643524,60.0630002],[-1.5716475,60.0638546],[-1.5693646,60.1790005],[-1.643558,60.1807033],[-1.643558,60.1892162],[-1.8216221,60.1894999],[-1.8204807,60.3615507],[-1.8415973,60.3697345],[-1.8216221,60.3832755],[-1.8179852,60.5934321],[-1.453168,60.5934321],[-1.4495137,60.8634056]],[[-4.9089213,54.4242078],[-4.282598,54.4429861],[-4.2535417,54.029769],[-4.8766366,54.0221831],[-4.9089213,54.4242078]],[[-5.8667408,59.1444603],[-5.7759966,59.1470945],[-5.7720016,59.1014052],[-5.8621751,59.0990605],[-5.8667408,59.1444603]],[[-1.7065887,59.5703599],[-1.5579165,59.5693481],[-1.5564897,59.4965695],[-1.7054472,59.4975834],[-1.7065887,59.5703599]],[[-7.6865827,58.2940975],[-7.5330594,58.3006957],[-7.5256401,58.2646905],[-7.6797341,58.2577853],[-7.6865827,58.2940975]],[[-4.5338281,59.0359871],[-4.481322,59.0371616],[-4.4796099,59.0186583],[-4.5332574,59.0180707],[-4.5338281,59.0359871]],[[-8.6710698,57.8769896],[-8.4673234,57.8897332],[-8.4467775,57.7907],[-8.6510947,57.7779213],[-8.6710698,57.8769896]],[[-5.2395519,50.3530581],[-5.7920073,50.3384899],[-5.760047,49.9317027],[-4.6551363,49.9581461],[-4.677965,50.2860073],[-4.244219,50.2801723],[-4.2487848,50.2042525],[-3.3812929,50.2042525],[-3.4223846,50.5188201],[-3.1164796,50.5246258],[-3.1210453,50.6579592],[-2.6736357,50.6619495],[-2.5953453,50.6394325],[-2.5905026,50.5728419],[-2.4791203,50.5733545],[-2.4758919,50.5066704],[-2.3967943,50.5056438],[-2.401637,50.5723293],[-1.0400296,50.5718167],[-1.0335726,50.7059289],[-0.549302,50.7038843],[-0.5460736,50.7886618],[-0.0924734,50.7856002],[-0.0876307,50.7181949],[0.4789659,50.7120623],[0.487037,50.8182467],[0.9761503,50.8049868],[0.9922927,51.0126311],[1.4491213,51.0004424],[1.4781775,51.4090372],[1.0229632,51.4271576],[1.035877,51.7640881],[1.6105448,51.7500992],[1.646058,52.1560003],[1.7267698,52.1540195],[1.749369,52.4481811],[1.7870672,52.4811624],[1.759102,52.522505],[1.7933451,52.9602749],[0.3798147,52.9958468],[0.3895238,53.2511239],[0.3478614,53.2511239],[0.3238912,53.282186],[0.3461492,53.6538501],[0.128487,53.6575466],[0.116582,53.6674703],[0.1350586,54.0655731],[-0.0609831,54.065908],[-0.0414249,54.4709448],[-0.5662701,54.4771794],[-0.5592078,54.6565127],[-1.1665638,54.6623485],[-1.1637389,54.842611],[-1.3316194,54.843909],[-1.3257065,55.2470842],[-1.529453,55.2487108],[-1.524178,55.6540122],[-1.7638798,55.6540122],[-1.7733693,55.9719116],[-2.1607858,55.9682981],[-2.1543289,56.0621387],[-2.4578051,56.0585337],[-2.4190635,56.641717],[-2.0962164,56.641717],[-2.0833025,57.0021322],[-1.9283359,57.0126802],[-1.9180966,57.3590895],[-1.7502161,57.3625721],[-1.7695869,57.7608634],[-3.6937554,57.7574187],[-3.7066693,57.9806386],[-3.5969013,57.9772149],[-3.6033582,58.1207277],[-3.0222335,58.1309566],[-3.0286905,58.5410788],[-2.8478961,58.530968],[-2.86081,58.8430508],[-2.679624,58.8414991],[-2.6841897,58.885175],[-2.6339665,58.9052239],[-2.679624,58.9335083],[-2.6887555,59.0229231],[-2.3668703,59.0229231],[-2.3702946,59.2652861],[-2.3429001,59.2821989],[-2.3714361,59.2996861],[-2.3737189,59.3707083],[-2.3429001,59.385825],[-2.3725775,59.400354],[-2.3714361,59.4259098],[-3.0734196,59.4230067],[-3.0711368,59.3433649],[-3.103097,59.3311405],[-3.0745611,59.3136695],[-3.0722782,59.232603],[-3.3850319,59.1484167],[-3.3747589,58.9352753],[-3.5653789,58.9323303],[-3.554829,58.69759],[-5.2808579,58.6667732],[-5.2534159,58.3514125],[-5.5068508,58.3437887],[-5.4761804,58.0323557],[-5.8974958,58.0212436],[-5.8522972,57.6171758],[-6.1396311,57.6137174],[-6.1541592,57.7423183],[-6.2913692,57.7380102],[-6.3365678,58.1398784],[-6.1121891,58.1466944],[-6.1473778,58.5106285],[-6.2934817,58.5416182],[-6.8413713,58.2977321],[-7.0057382,58.2929331],[-7.1016189,58.2064403],[-7.2573132,58.1793148],[-7.2531092,58.1004928],[-7.4070698,58.0905566],[-7.391347,57.7911354],[-7.790991,57.7733151],[-7.7624215,57.5444165],[-7.698501,57.1453194],[-7.7943817,57.1304547],[-7.716764,56.7368628],[-7.0122067,56.7654359],[-6.979922,56.5453858],[-7.0638622,56.5453858],[-7.0444914,56.3562587],[-6.500676,56.3812917],[-6.4491433,55.9793649],[-6.563287,55.9691456],[-6.5393742,55.7030135],[-6.5595521,55.6907321],[-6.5345315,55.6761713],[-6.5216176,55.5704434],[-5.8912587,55.5923416],[-5.8560127,55.2320733],[-5.2293639,55.2515958],[-5.1837064,54.6254139],[-3.6655956,54.6518373],[-3.6496155,54.4320023],[-3.5400375,54.4306744],[-3.530906,54.0290181],[-3.0697656,54.030359],[-3.0675737,53.8221388],[-3.0804876,53.7739911],[-3.0619239,53.7477488],[-3.0611168,53.6737049],[-3.2144691,53.6708361],[-3.2057699,53.4226163],[-3.2799632,53.355224],[-3.2896655,53.3608441],[-3.3327547,53.364931],[-3.3761293,53.3540318],[-4.0888976,53.3433102],[-4.0945474,53.4612036],[-4.697412,53.4448624],[-4.6882805,53.3318598],[-4.7202407,53.2895771],[-4.6837148,53.2486184],[-4.6768661,53.1542644],[-4.8480816,53.1446807],[-4.8178336,52.7440299],[-4.2545751,52.7558939],[-4.228876,52.254876],[-4.2607571,52.2536408],[-4.2724603,52.2432637],[-4.8136263,52.230095],[-4.8079191,52.1138892],[-5.3889104,52.0991668],[-5.3717888,51.9129667],[-5.4208706,51.9101502],[-5.414022,51.8453218],[-5.3683645,51.8474373],[-5.3466772,51.5595332],[-4.773676,51.5758518],[-4.7656859,51.4885146],[-4.1915432,51.4970427],[-4.1869775,51.4344663],[-3.6151177,51.4444274],[-3.6105519,51.3746543],[-3.1494115,51.3789292],[-3.1494115,51.2919281],[-4.3038735,51.2745907],[-4.2861169,51.0508721],[-4.8543277,51.0366633],[-4.8372201,50.7212787],[-5.2618345,50.7082694],[-5.2395519,50.3530581]],[[-2.1502671,60.171318],[-2.0030218,60.1696146],[-2.0013096,60.0997023],[-2.148555,60.1011247],[-2.1502671,60.171318]],[[-6.2086011,59.1163488],[-6.1229934,59.1166418],[-6.121852,59.0714985],[-6.2097426,59.0714985],[-6.2086011,59.1163488]],[[-4.4159559,59.0889036],[-4.4212022,59.0770848],[-4.3971904,59.0779143],[-4.3913388,59.0897328],[-4.4159559,59.0889036]]]},{"id":"AGRI-black_and_white-2.5m","name":"AGRI black-and-white 2.5m","type":"tms","template":"http://agri.openstreetmap.org/{zoom}/{x}/{y}.png","polygon":[[[112.28778,-28.784589],[112.71488,-31.13894],[114.11263,-34.178287],[113.60788,-37.39012],[117.17992,-37.451794],[119.31538,-37.42096],[121.72262,-36.708394],[123.81925,-35.76893],[125.9547,-34.3066],[127.97368,-33.727398],[130.07031,-33.24166],[130.10913,-33.888704],[131.00214,-34.049705],[131.0798,-34.72257],[132.28342,-35.39],[134.18591,-35.61126],[133.8753,-37.1119],[134.8459,-37.6365],[139.7769,-37.82075],[139.93223,-39.4283],[141.6017,-39.8767],[142.3783,-39.368294],[142.3783,-40.64702],[142.49478,-42.074874],[144.009,-44.060127],[147.23161,-44.03222],[149.05645,-42.534313],[149.52237,-40.99959],[149.9494,-40.852921],[150.8036,-38.09627],[151.81313,-38.12682],[156.20052,-22.667706],[156.20052,-20.10109],[156.62761,-17.417627],[155.26869,-17.19521],[154.14272,-19.51662],[153.5215,-18.34139],[153.05558,-16.5636],[152.78379,-15.256768],[152.27905,-13.4135],[151.3472,-12.391767],[149.48354,-12.05024],[146.9598,-9.992408],[135.9719,-9.992408],[130.3032,-10.33636],[128.09016,-12.164136],[125.91588,-12.315912],[124.3239,-11.860326],[122.03323,-11.974295],[118.26706,-16.9353],[115.93747,-19.11357],[114.0738,-21.11863],[113.49141,-22.596033],[112.28778,-28.784589]]],"terms_text":"AGRI"},{"id":"lu.geoportail.opendata.basemap","name":"Basemap geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/basemap/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/carte-de-base-webservices-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie"},{"id":"basemap.at","name":"basemap.at","type":"tms","template":"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/geolandbasemap/normal/google3857/{zoom}/{y}/{x}.png","description":"Basemap of Austria, based on goverment data.","scaleExtent":[0,19],"polygon":[[[16.5073284,46.9929304],[16.283417,46.9929304],[16.135839,46.8713046],[15.9831722,46.8190947],[16.0493278,46.655175],[15.8610387,46.7180116],[15.7592608,46.6900933],[15.5607938,46.6796202],[15.5760605,46.6342132],[15.4793715,46.6027553],[15.4335715,46.6516819],[15.2249267,46.6342132],[15.0468154,46.6481886],[14.9908376,46.5887681],[14.9603042,46.6237293],[14.8534374,46.6027553],[14.8330818,46.5012666],[14.7516595,46.4977636],[14.6804149,46.4381781],[14.6142593,46.4381781],[14.578637,46.3785275],[14.4412369,46.4311638],[14.1613476,46.4276563],[14.1257253,46.4767409],[14.0188585,46.4767409],[13.9119917,46.5257813],[13.8254805,46.5047694],[13.4438134,46.560783],[13.3064132,46.5502848],[13.1283019,46.5887681],[12.8433237,46.6132433],[12.7262791,46.6412014],[12.5125455,46.6656529],[12.3598787,46.7040543],[12.3649676,46.7703197],[12.2886341,46.7772902],[12.2733674,46.8852187],[12.2072118,46.8747835],[12.1308784,46.9026062],[12.1156117,46.9998721],[12.2530119,47.0657733],[12.2123007,47.0934969],[11.9833004,47.0449712],[11.7339445,46.9616816],[11.6321666,47.010283],[11.5405665,46.9755722],[11.4998553,47.0068129],[11.418433,46.9651546],[11.2555884,46.9755722],[11.1130993,46.913036],[11.0418548,46.7633482],[10.8891879,46.7598621],[10.7416099,46.7842599],[10.7059877,46.8643462],[10.5787653,46.8399847],[10.4566318,46.8504267],[10.4769874,46.9269392],[10.3853873,46.9894592],[10.2327204,46.8643462],[10.1207647,46.8330223],[9.8663199,46.9408389],[9.9019422,47.0033426],[9.6831197,47.0588402],[9.6118752,47.0380354],[9.6322307,47.128131],[9.5813418,47.1662025],[9.5406306,47.2664422],[9.6067863,47.3492559],[9.6729419,47.369939],[9.6424085,47.4457079],[9.5660751,47.4801122],[9.7136531,47.5282405],[9.7848976,47.5969187],[9.8357866,47.5454185],[9.9477423,47.538548],[10.0902313,47.4491493],[10.1105869,47.3664924],[10.2428982,47.3871688],[10.1869203,47.2698953],[10.3243205,47.2975125],[10.4820763,47.4491493],[10.4311873,47.4869904],[10.4413651,47.5900549],[10.4871652,47.5522881],[10.5482319,47.5351124],[10.5991209,47.5660246],[10.7568766,47.5316766],[10.8891879,47.5454185],[10.9400769,47.4869904],[10.9960547,47.3906141],[11.2352328,47.4422662],[11.2810328,47.3975039],[11.4235219,47.5144941],[11.5761888,47.5076195],[11.6067221,47.5900549],[11.8357224,47.5866227],[12.003656,47.6243647],[12.2072118,47.6037815],[12.1614117,47.6963421],[12.2581008,47.7442718],[12.2530119,47.6792136],[12.4311232,47.7100408],[12.4921899,47.631224],[12.5685234,47.6277944],[12.6295901,47.6894913],[12.7720792,47.6689338],[12.8331459,47.5419833],[12.975635,47.4732332],[13.0417906,47.4938677],[13.0367017,47.5557226],[13.0977685,47.6415112],[13.0316128,47.7100408],[12.9043905,47.7203125],[13.0061684,47.84683],[12.9451016,47.9355501],[12.8636793,47.9594103],[12.8636793,48.0036929],[12.7517236,48.0989418],[12.8738571,48.2109733],[12.9603683,48.2109733],[13.0417906,48.2652035],[13.1842797,48.2990682],[13.2606131,48.2922971],[13.3980133,48.3565867],[13.4438134,48.417418],[13.4387245,48.5523383],[13.509969,48.5860123],[13.6117469,48.5725454],[13.7287915,48.5118999],[13.7847694,48.5725454],[13.8203916,48.6263915],[13.7949471,48.7171267],[13.850925,48.7741724],[14.0595697,48.6633774],[14.0137696,48.6331182],[14.0748364,48.5927444],[14.2173255,48.5961101],[14.3649034,48.5489696],[14.4666813,48.6499311],[14.5582815,48.5961101],[14.5989926,48.6263915],[14.7211261,48.5759124],[14.7211261,48.6868997],[14.822904,48.7271983],[14.8178151,48.777526],[14.9647227,48.7851754],[14.9893637,49.0126611],[15.1485933,48.9950306],[15.1943934,48.9315502],[15.3063491,48.9850128],[15.3928603,48.9850128],[15.4844604,48.9282069],[15.749083,48.8545973],[15.8406831,48.8880697],[16.0086166,48.7808794],[16.2070835,48.7339115],[16.3953727,48.7372678],[16.4920617,48.8110498],[16.6905286,48.7741724],[16.7057953,48.7339115],[16.8991733,48.713769],[16.9755067,48.515271],[16.8482844,48.4511817],[16.8533733,48.3464411],[16.9551512,48.2516513],[16.9907734,48.1498955],[17.0925513,48.1397088],[17.0823736,48.0241182],[17.1739737,48.0207146],[17.0823736,47.8741447],[16.9856845,47.8673174],[17.0823736,47.8092489],[17.0925513,47.7031919],[16.7414176,47.6792136],[16.7057953,47.7511153],[16.5378617,47.7545368],[16.5480395,47.7066164],[16.4208172,47.6689338],[16.573484,47.6175045],[16.670173,47.631224],[16.7108842,47.538548],[16.6599952,47.4491493],[16.5429506,47.3940591],[16.4615283,47.3940591],[16.4920617,47.276801],[16.425906,47.1973317],[16.4717061,47.1489007],[16.5480395,47.1489007],[16.476795,47.0796369],[16.527684,47.0588402],[16.5073284,46.9929304]]],"terms_text":"basemap.at"},{"id":"basemap.at-orthofoto","name":"basemap.at Orthofoto","type":"tms","template":"https://maps{switch:1,2,3,4}.wien.gv.at/basemap/bmaporthofoto30cm/normal/google3857/{zoom}/{y}/{x}.jpeg","description":"Orthofoto layer provided by basemap.at. \"Successor\" of geoimage.at imagery.","scaleExtent":[0,19],"polygon":[[[16.5073284,46.9929304],[16.283417,46.9929304],[16.135839,46.8713046],[15.9831722,46.8190947],[16.0493278,46.655175],[15.8610387,46.7180116],[15.7592608,46.6900933],[15.5607938,46.6796202],[15.5760605,46.6342132],[15.4793715,46.6027553],[15.4335715,46.6516819],[15.2249267,46.6342132],[15.0468154,46.6481886],[14.9908376,46.5887681],[14.9603042,46.6237293],[14.8534374,46.6027553],[14.8330818,46.5012666],[14.7516595,46.4977636],[14.6804149,46.4381781],[14.6142593,46.4381781],[14.578637,46.3785275],[14.4412369,46.4311638],[14.1613476,46.4276563],[14.1257253,46.4767409],[14.0188585,46.4767409],[13.9119917,46.5257813],[13.8254805,46.5047694],[13.4438134,46.560783],[13.3064132,46.5502848],[13.1283019,46.5887681],[12.8433237,46.6132433],[12.7262791,46.6412014],[12.5125455,46.6656529],[12.3598787,46.7040543],[12.3649676,46.7703197],[12.2886341,46.7772902],[12.2733674,46.8852187],[12.2072118,46.8747835],[12.1308784,46.9026062],[12.1156117,46.9998721],[12.2530119,47.0657733],[12.2123007,47.0934969],[11.9833004,47.0449712],[11.7339445,46.9616816],[11.6321666,47.010283],[11.5405665,46.9755722],[11.4998553,47.0068129],[11.418433,46.9651546],[11.2555884,46.9755722],[11.1130993,46.913036],[11.0418548,46.7633482],[10.8891879,46.7598621],[10.7416099,46.7842599],[10.7059877,46.8643462],[10.5787653,46.8399847],[10.4566318,46.8504267],[10.4769874,46.9269392],[10.3853873,46.9894592],[10.2327204,46.8643462],[10.1207647,46.8330223],[9.8663199,46.9408389],[9.9019422,47.0033426],[9.6831197,47.0588402],[9.6118752,47.0380354],[9.6322307,47.128131],[9.5813418,47.1662025],[9.5406306,47.2664422],[9.6067863,47.3492559],[9.6729419,47.369939],[9.6424085,47.4457079],[9.5660751,47.4801122],[9.7136531,47.5282405],[9.7848976,47.5969187],[9.8357866,47.5454185],[9.9477423,47.538548],[10.0902313,47.4491493],[10.1105869,47.3664924],[10.2428982,47.3871688],[10.1869203,47.2698953],[10.3243205,47.2975125],[10.4820763,47.4491493],[10.4311873,47.4869904],[10.4413651,47.5900549],[10.4871652,47.5522881],[10.5482319,47.5351124],[10.5991209,47.5660246],[10.7568766,47.5316766],[10.8891879,47.5454185],[10.9400769,47.4869904],[10.9960547,47.3906141],[11.2352328,47.4422662],[11.2810328,47.3975039],[11.4235219,47.5144941],[11.5761888,47.5076195],[11.6067221,47.5900549],[11.8357224,47.5866227],[12.003656,47.6243647],[12.2072118,47.6037815],[12.1614117,47.6963421],[12.2581008,47.7442718],[12.2530119,47.6792136],[12.4311232,47.7100408],[12.4921899,47.631224],[12.5685234,47.6277944],[12.6295901,47.6894913],[12.7720792,47.6689338],[12.8331459,47.5419833],[12.975635,47.4732332],[13.0417906,47.4938677],[13.0367017,47.5557226],[13.0977685,47.6415112],[13.0316128,47.7100408],[12.9043905,47.7203125],[13.0061684,47.84683],[12.9451016,47.9355501],[12.8636793,47.9594103],[12.8636793,48.0036929],[12.7517236,48.0989418],[12.8738571,48.2109733],[12.9603683,48.2109733],[13.0417906,48.2652035],[13.1842797,48.2990682],[13.2606131,48.2922971],[13.3980133,48.3565867],[13.4438134,48.417418],[13.4387245,48.5523383],[13.509969,48.5860123],[13.6117469,48.5725454],[13.7287915,48.5118999],[13.7847694,48.5725454],[13.8203916,48.6263915],[13.7949471,48.7171267],[13.850925,48.7741724],[14.0595697,48.6633774],[14.0137696,48.6331182],[14.0748364,48.5927444],[14.2173255,48.5961101],[14.3649034,48.5489696],[14.4666813,48.6499311],[14.5582815,48.5961101],[14.5989926,48.6263915],[14.7211261,48.5759124],[14.7211261,48.6868997],[14.822904,48.7271983],[14.8178151,48.777526],[14.9647227,48.7851754],[14.9893637,49.0126611],[15.1485933,48.9950306],[15.1943934,48.9315502],[15.3063491,48.9850128],[15.3928603,48.9850128],[15.4844604,48.9282069],[15.749083,48.8545973],[15.8406831,48.8880697],[16.0086166,48.7808794],[16.2070835,48.7339115],[16.3953727,48.7372678],[16.4920617,48.8110498],[16.6905286,48.7741724],[16.7057953,48.7339115],[16.8991733,48.713769],[16.9755067,48.515271],[16.8482844,48.4511817],[16.8533733,48.3464411],[16.9551512,48.2516513],[16.9907734,48.1498955],[17.0925513,48.1397088],[17.0823736,48.0241182],[17.1739737,48.0207146],[17.0823736,47.8741447],[16.9856845,47.8673174],[17.0823736,47.8092489],[17.0925513,47.7031919],[16.7414176,47.6792136],[16.7057953,47.7511153],[16.5378617,47.7545368],[16.5480395,47.7066164],[16.4208172,47.6689338],[16.573484,47.6175045],[16.670173,47.631224],[16.7108842,47.538548],[16.6599952,47.4491493],[16.5429506,47.3940591],[16.4615283,47.3940591],[16.4920617,47.276801],[16.425906,47.1973317],[16.4717061,47.1489007],[16.5480395,47.1489007],[16.476795,47.0796369],[16.527684,47.0588402],[16.5073284,46.9929304]]],"terms_text":"basemap.at","best":true},{"id":"bavaria-DOP80","name":"Bavaria DOP 80cm","type":"tms","template":"http://mapproxy.osm.ch:8080/tiles/BAYERNDOP80/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[0,18],"polygon":[[[10.1235886,50.568462],[10.1428576,50.5507804],[10.2028056,50.5574195],[10.2520485,50.5179575],[10.3269835,50.4934473],[10.4104825,50.4184762],[10.6031724,50.3310874],[10.6224414,50.2271041],[10.7252093,50.2106649],[10.7294913,50.2476451],[10.8515282,50.2435376],[10.7187863,50.3201525],[10.7123633,50.3652428],[10.8558102,50.3966441],[10.9371682,50.3966441],[10.9906932,50.3666085],[11.1277171,50.3666085],[11.1791011,50.3133169],[11.1619731,50.294172],[11.24119,50.2928042],[11.249754,50.3734364],[11.24119,50.479825],[11.358945,50.5234025],[11.4381619,50.5097889],[11.4424439,50.4893611],[11.425316,50.4771001],[11.425316,50.4416618],[11.4895459,50.4225686],[11.4916869,50.3980089],[11.5195199,50.3980089],[11.5259429,50.3761673],[11.5987369,50.4034677],[11.6372748,50.3884544],[11.7935678,50.4212045],[11.8363877,50.3925494],[11.9220277,50.4280246],[11.9862577,50.3870894],[11.9841167,50.3570478],[12.0483466,50.3310874],[12.0933076,50.3297207],[12.1297046,50.2982751],[12.1404096,50.2722826],[12.1061536,50.255859],[12.1125766,50.2353216],[12.1489736,50.236691],[12.1982166,50.2010728],[12.2239086,50.1640565],[12.2046396,50.1434795],[12.2067806,50.1077916],[12.2431775,50.0995522],[12.2774335,50.0720772],[12.4936744,49.985428],[12.4979564,49.9413559],[12.5557634,49.9220616],[12.5493404,49.8682726],[12.4808284,49.7881677],[12.4101755,49.7577484],[12.4615594,49.7065456],[12.5471994,49.6802313],[12.5878784,49.552613],[12.6542493,49.534553],[12.6628133,49.4330153],[12.7527353,49.4107323],[12.7976963,49.3466124],[12.9047462,49.3563752],[12.9968092,49.3368477],[13.0546161,49.2754251],[13.1316921,49.2195199],[13.1916401,49.1439475],[13.236601,49.1215335],[13.296549,49.1229347],[13.371484,49.0808823],[13.414304,49.0289687],[13.414304,48.9798112],[13.5791609,48.9699739],[13.6348268,48.9432629],[13.6776468,48.8869823],[13.7375948,48.8926132],[13.7846968,48.8334571],[13.8403627,48.774231],[13.8168118,48.7064584],[13.8446447,48.7008065],[13.8425037,48.6003807],[13.7654278,48.5422972],[13.7525818,48.5040106],[13.6712238,48.5054291],[13.6433908,48.5437146],[13.4571239,48.5508013],[13.4571239,48.4159838],[13.40574,48.3605338],[13.283703,48.2751083],[13.0931541,48.2694081],[12.9582712,48.1909669],[12.8769132,48.1852574],[12.7720043,48.0938188],[12.8640672,48.0136764],[12.8983232,47.9549216],[12.9454252,47.9563555],[12.9968092,47.8846147],[13.0139372,47.834337],[12.9347202,47.7321953],[13.0588981,47.7249947],[13.1188461,47.6385093],[13.0653211,47.5692178],[13.0567571,47.473792],[13.0032322,47.4520801],[12.7677223,47.5504355],[12.7698633,47.6327385],[12.7398893,47.6731207],[12.6670953,47.6702373],[12.5750324,47.621195],[12.4808284,47.6197519],[12.4144575,47.6702373],[12.2431775,47.6774455],[12.2132036,47.6918589],[12.1917936,47.6817699],[12.2132036,47.6659119],[12.2110626,47.603875],[12.1746656,47.5952129],[12.1382686,47.603875],[11.8920537,47.603875],[11.8513747,47.5793285],[11.6394158,47.5822169],[11.5944549,47.5489905],[11.5901729,47.5128508],[11.5173789,47.498388],[11.4403029,47.5041736],[11.395342,47.4752392],[11.427457,47.4448409],[11.346099,47.4433929],[11.279728,47.3955873],[11.2133571,47.3883402],[11.247613,47.4318076],[11.1020251,47.3926886],[10.9650012,47.3897897],[10.9778472,47.4361524],[10.9178992,47.4752392],[10.8707972,47.4752392],[10.8558102,47.4940484],[10.9007712,47.5142969],[10.8729382,47.5359831],[10.8108493,47.5128508],[10.6438513,47.5489905],[10.5946084,47.5547705],[10.5796214,47.5287553],[10.4618664,47.5403192],[10.4661484,47.4839212],[10.4875584,47.4781333],[10.4875584,47.4129762],[10.4597254,47.4028333],[10.4597254,47.375293],[10.4104825,47.3738431],[10.4083415,47.3433862],[10.3205605,47.2867768],[10.2820225,47.2780622],[10.2841635,47.2620819],[10.1471396,47.2620819],[10.1921006,47.3027497],[10.1942416,47.3738431],[10.1664086,47.3738431],[10.1664086,47.3462876],[10.1000376,47.3433862],[10.0614996,47.3636928],[10.0679226,47.4187712],[10.0936146,47.426014],[10.0957556,47.4419449],[9.9780007,47.485368],[9.9565907,47.5273097],[9.8945017,47.5287553],[9.8559637,47.5085124],[9.8174258,47.544655],[9.8217078,47.5764399],[9.7746058,47.5822169],[9.7382088,47.525864],[9.6739788,47.5345376],[9.5840569,47.564884],[9.6397228,47.6053186],[9.7167988,47.603875],[9.8559637,47.6760039],[9.9780007,47.6558179],[10.0293846,47.6817699],[10.1000376,47.6673537],[10.1321526,47.6760039],[10.1428576,47.7019459],[10.0614996,47.7725005],[10.1128836,47.8098988],[10.0829096,47.8530173],[10.1086016,47.9090177],[10.0764866,47.9649577],[10.1300116,48.020837],[10.1342936,48.1066872],[10.1000376,48.1281274],[10.0550766,48.2622821],[9.9694367,48.3676462],[10.0315256,48.4259299],[10.0293846,48.461436],[10.1235886,48.4770509],[10.1535626,48.4514968],[10.2349205,48.5125212],[10.3162785,48.516776],[10.2991505,48.6187835],[10.2456255,48.6682961],[10.2734585,48.7064584],[10.3698035,48.6838472],[10.4318924,48.6993935],[10.4511614,48.7276471],[10.4019185,48.7460035],[10.4404564,48.8489571],[10.4340334,48.9587289],[10.3376885,49.0205451],[10.2499075,49.0359872],[10.2499075,49.0738701],[10.2006646,49.1033147],[10.2520485,49.1327418],[10.1235886,49.1971401],[10.1193066,49.2628519],[10.1514216,49.2893915],[10.1043196,49.3452175],[10.1407166,49.3940134],[10.1086016,49.445545],[10.1107426,49.5053651],[10.0722046,49.5331635],[10.0165387,49.4761598],[9.9266167,49.478942],[9.9244757,49.5567797],[9.8987837,49.5817727],[9.8559637,49.5387213],[9.8067208,49.5567797],[9.8666687,49.6067529],[9.8538227,49.6441991],[9.8174258,49.6608327],[9.8345537,49.6899277],[9.7960158,49.7203895],[9.7574778,49.7079302],[9.7403498,49.6857723],[9.7060938,49.7162368],[9.6782608,49.7162368],[9.6825428,49.6885426],[9.6204539,49.6913127],[9.6461458,49.78955],[9.5583649,49.7743431],[9.5712109,49.7356133],[9.5069809,49.7522156],[9.4919939,49.7798735],[9.4684429,49.7605146],[9.425623,49.7784909],[9.404213,49.7646636],[9.33356,49.770195],[9.329278,49.7342295],[9.408495,49.725926],[9.427764,49.6982374],[9.414918,49.6441991],[9.380662,49.6386533],[9.359252,49.6497443],[9.339983,49.6372668],[9.31215,49.648358],[9.277894,49.626173],[9.284317,49.6081403],[9.241497,49.5748315],[9.0980501,49.5720547],[9.0659351,49.6081403],[9.1001911,49.6511305],[9.0916271,49.6926978],[9.1301651,49.7120837],[9.1387291,49.7425316],[9.1087551,49.7563653],[9.1365881,49.7909322],[9.1001911,49.78955],[9.0723581,49.8282367],[9.0359611,49.8351418],[9.0166922,50.0267091],[8.9631672,50.0308352],[8.9567442,50.0597083],[9.0017052,50.0707031],[9.0209742,50.1105378],[9.1216011,50.1228936],[9.1558571,50.1132838],[9.1965361,50.1187753],[9.1858311,50.1352462],[9.235074,50.1475956],[9.37638,50.1270115],[9.408495,50.0816953],[9.5219679,50.095432],[9.5048399,50.1421073],[9.5326729,50.1640565],[9.4898529,50.1695422],[9.4941349,50.2435376],[9.6140309,50.221625],[9.6654148,50.2353216],[9.6354408,50.2490142],[9.6675558,50.2722826],[9.7424908,50.3092151],[9.7296448,50.3584137],[9.7703238,50.4293885],[9.8688097,50.4007384],[9.9180527,50.4089259],[10.0358076,50.479825],[10.0379486,50.5111504],[10.1235886,50.568462]]]},{"id":"GRB","name":"Belgium AGIV GRB Flanders","type":"tms","template":"http://tile.informatievlaanderen.be/ws/raadpleegdiensten/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=grb_bsk&STYLE=&FORMAT=image/png&tileMatrixSet=GoogleMapsVL&tileMatrix={zoom}&tileRow={y}&tileCol={x}","scaleExtent":[0,21],"polygon":[[[2.522393220658428,51.101723961331],[3.1260610915867457,51.34117672029327],[3.174929443042849,51.382459567439525],[3.3761520666856217,51.38784154353026],[3.410647373595811,51.33040116175589],[3.4020235468682634,51.28547573497245],[3.4911364230529203,51.256700377228974],[3.4825125963253734,51.30345118353617],[3.5773746903283947,51.323216048914524],[3.813092620881357,51.27288873325703],[3.8217164476089045,51.236906864834886],[3.9309515861578386,51.236906864834886],[4.054559769252684,51.27468708752057],[4.20116482362099,51.35194974615148],[4.169544125619984,51.38066543475199],[4.342020660170932,51.395016527087456],[4.3650175314443915,51.46491366130351],[4.5374940659953396,51.50071687469512],[4.571989372905529,51.479238319799464],[4.560490937268798,51.44879304380801],[4.638105377816725,51.45058450468522],[4.750215125274841,51.5239738914927],[4.8364533925503155,51.507874144493115],[5.080795149830825,51.49892738159079],[5.135412719105292,51.447001512638565],[5.106666630013469,51.391429175957505],[5.264770120018504,51.31782647548482],[5.264770120018504,51.28727359653538],[5.4085005654776275,51.292666758936925],[5.486115006025553,51.325012432665545],[5.5809771000285755,51.28367780302667],[5.583851708937758,51.23510703218069],[5.767826679125435,51.20449910348059],[5.8770618176743685,51.161253258857485],[5.704585283123422,50.80292546633848],[5.905807906766195,50.7865720955422],[5.9374286047672005,50.732019528192964],[5.902933297857012,50.70107817444857],[5.8138204216723555,50.69379488717487],[5.615472406938765,50.761122144578216],[5.500488050571466,50.71200098472672],[5.204403332925673,50.70289881954383],[5.164158808197117,50.67558172042608],[5.037676016193088,50.70107817444857],[4.988807664736986,50.750210783384084],[4.916942442007425,50.72656077355532],[4.790459650003396,50.766576871275696],[4.681224511454462,50.77021300246129],[4.6697260758177315,50.73565834458533],[4.287403090896464,50.67922491935501],[3.91082932379356,50.677403355240585],[3.718230526878334,50.752029520237265],[3.6549891308763196,50.71200098472672],[3.5342555566906557,50.710180693059606],[3.514133294326379,50.741116039142966],[3.45664111614273,50.74384464791457],[3.373277457776438,50.69561581502901],[3.310036061774423,50.70745012302645],[3.2899137994101473,50.7365680045137],[3.1648683118607086,50.742935129324266],[3.1318103094051106,50.77203096207303],[3.080067349039826,50.76021296163662],[2.8745328120332805,50.73929687829333],[2.8960923788521487,50.71109084772858],[2.8745328120332805,50.69561581502901],[2.796918371485353,50.70289881954383],[2.699181668573149,50.80020030189157],[2.6201299235706315,50.79747497850781],[2.5698242676599374,50.85830267681076],[2.5669496587507554,50.923581424665855],[2.6028822701155367,50.94984841176044],[2.549702005295661,50.996006093918574],[2.522393220658428,51.101723961331]]],"terms_text":"GRB Flanders © AGIV"},{"id":"AGIV","name":"Belgium AGIV Orthophoto Flanders","type":"tms","template":"http://tile.informatievlaanderen.be/ws/raadpleegdiensten/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=omwrgbmrvl&STYLE=&FORMAT=image/png&tileMatrixSet=GoogleMapsVL&tileMatrix={zoom}&tileRow={y}&tileCol={x}","scaleExtent":[0,21],"polygon":[[[2.522393220658428,51.101723961331],[3.1260610915867457,51.34117672029327],[3.174929443042849,51.382459567439525],[3.3761520666856217,51.38784154353026],[3.410647373595811,51.33040116175589],[3.4020235468682634,51.28547573497245],[3.4911364230529203,51.256700377228974],[3.4825125963253734,51.30345118353617],[3.5773746903283947,51.323216048914524],[3.813092620881357,51.27288873325703],[3.8217164476089045,51.236906864834886],[3.9309515861578386,51.236906864834886],[4.054559769252684,51.27468708752057],[4.20116482362099,51.35194974615148],[4.169544125619984,51.38066543475199],[4.342020660170932,51.395016527087456],[4.3650175314443915,51.46491366130351],[4.5374940659953396,51.50071687469512],[4.571989372905529,51.479238319799464],[4.560490937268798,51.44879304380801],[4.638105377816725,51.45058450468522],[4.750215125274841,51.5239738914927],[4.8364533925503155,51.507874144493115],[5.080795149830825,51.49892738159079],[5.135412719105292,51.447001512638565],[5.106666630013469,51.391429175957505],[5.264770120018504,51.31782647548482],[5.264770120018504,51.28727359653538],[5.4085005654776275,51.292666758936925],[5.486115006025553,51.325012432665545],[5.5809771000285755,51.28367780302667],[5.583851708937758,51.23510703218069],[5.767826679125435,51.20449910348059],[5.8770618176743685,51.161253258857485],[5.704585283123422,50.80292546633848],[5.905807906766195,50.7865720955422],[5.9374286047672005,50.732019528192964],[5.902933297857012,50.70107817444857],[5.8138204216723555,50.69379488717487],[5.615472406938765,50.761122144578216],[5.500488050571466,50.71200098472672],[5.204403332925673,50.70289881954383],[5.164158808197117,50.67558172042608],[5.037676016193088,50.70107817444857],[4.988807664736986,50.750210783384084],[4.916942442007425,50.72656077355532],[4.790459650003396,50.766576871275696],[4.681224511454462,50.77021300246129],[4.6697260758177315,50.73565834458533],[4.287403090896464,50.67922491935501],[3.91082932379356,50.677403355240585],[3.718230526878334,50.752029520237265],[3.6549891308763196,50.71200098472672],[3.5342555566906557,50.710180693059606],[3.514133294326379,50.741116039142966],[3.45664111614273,50.74384464791457],[3.373277457776438,50.69561581502901],[3.310036061774423,50.70745012302645],[3.2899137994101473,50.7365680045137],[3.1648683118607086,50.742935129324266],[3.1318103094051106,50.77203096207303],[3.080067349039826,50.76021296163662],[2.8745328120332805,50.73929687829333],[2.8960923788521487,50.71109084772858],[2.8745328120332805,50.69561581502901],[2.796918371485353,50.70289881954383],[2.699181668573149,50.80020030189157],[2.6201299235706315,50.79747497850781],[2.5698242676599374,50.85830267681076],[2.5669496587507554,50.923581424665855],[2.6028822701155367,50.94984841176044],[2.549702005295661,50.996006093918574],[2.522393220658428,51.101723961331]]],"terms_text":"Orthophoto Flanders most recent © AGIV","best":true},{"id":"Benin_cotonou_pleiade_2016","name":"Benin: Cotonou Pleiade 2016","type":"tms","template":"http://geoxxx.agrocampus-ouest.fr/owsifl/gwc/service/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=Benin:cotonou_pleiade_2016&STYLE=&FORMAT=image/jpeg&tileMatrixSet=EPSG:3857&tileMatrix=EPSG:3857:{zoom}&tileRow={y}&tileCol={x}","scaleExtent":[0,21],"polygon":[[[2.31953818544,6.55745092536],[2.33645249928,6.56023631702],[2.36377172444,6.56211241002],[2.36737717181,6.56067658005],[2.37777373205,6.54939665325],[2.3777926612,6.53484752744],[2.36994151563,6.4933195729],[2.37038356708,6.45527010853],[2.36958186167,6.45269435578],[2.36188103586,6.44177160245],[2.35391742884,6.40545220189],[2.3674929737,6.40149524022],[2.39525870424,6.40071623744],[2.40128040262,6.40374371884],[2.40587684694,6.40340733291],[2.42045897749,6.39382909301],[2.42485054154,6.3979366042],[2.42949152505,6.39887495342],[2.43625257397,6.39628121034],[2.43958410532,6.40041525877],[2.44439433776,6.40189359345],[2.45375647532,6.39899446003],[2.47144744127,6.3963166199],[2.48162019208,6.3910582748],[2.49453210303,6.38739776192],[2.50893162289,6.38888498676],[2.50719014059,6.39228876781],[2.50120407357,6.39162040687],[2.4963025358,6.39521449649],[2.49509997769,6.40123077776],[2.49543290813,6.40400928653],[2.49830345887,6.41022131795],[2.50191336015,6.41281720321],[2.5108701911,6.41321333458],[2.52218648559,6.40849403999],[2.53352059576,6.4051656109],[2.53809922441,6.40960941297],[2.5411100736,6.41090182623],[2.54650822333,6.41099034757],[2.54654385468,6.40651114868],[2.57638511144,6.40723702943],[2.57642074279,6.41176933466],[2.58575615684,6.41196408125],[2.58867792765,6.41095493903],[2.60877400982,6.39413560832],[2.62569890171,6.39487921149],[2.64554556441,6.39728706193],[2.65039142819,6.39339200408],[2.6536650586,6.36823275735],[2.6431181786,6.3665949733],[2.61251084779,6.3628944474],[2.56867983171,6.3607044406],[2.54682890549,6.36055393954],[2.54687344468,6.35546343647],[2.50206702036,6.35461353888],[2.47064016846,6.35595920942],[2.46777184468,6.35202842507],[2.46422652522,6.35020467258],[2.45253944198,6.35006302163],[2.4511320036,6.34813302357],[2.44737289603,6.34629155079],[2.43757427441,6.34653944174],[2.43297783009,6.33841209773],[2.43016295333,6.33706638135],[2.42244876576,6.33706638135],[2.39236031651,6.34114999999],[2.39315311407,6.34114999999],[2.3652849434,6.34445228474],[2.35386064137,6.34529777247],[2.34377474198,6.34457844399],[2.34093759563,6.34533982549],[2.31086028117,6.36567095094],[2.28434610184,6.37465215648],[2.28146887022,6.37761782314],[2.27599054995,6.39517244756],[2.27611525968,6.39819996182],[2.31528747657,6.4926104105],[2.31579967725,6.5530659484],[2.31953818544,6.55745092536]],[[1.69563043958,6.25076170066],[1.70009994721,6.24711901182],[1.70417862346,6.24697179839],[1.75874803806,6.25835802546],[1.77079143482,6.25995187823],[1.81712109941,6.27161341959],[1.84456614779,6.27656750346],[1.85767848509,6.27944518918],[1.88843363033,6.28325588467],[1.90481876292,6.28594870029],[1.90617692982,6.29435189983],[1.90083111364,6.29721233234],[1.89880903445,6.29953873942],[1.89404334121,6.30085024405],[1.89047742238,6.29969866569],[1.88747882146,6.29636150888],[1.88344050885,6.29622344016],[1.86969682855,6.29226563906],[1.8564007671,6.29198230539],[1.85206654725,6.28674503171],[1.84991419093,6.28906373821],[1.84691224958,6.29202989661],[1.8435272712,6.29332703219],[1.84040507404,6.29315437611],[1.83626738336,6.29129499924],[1.83409832485,6.28733273348],[1.83416513363,6.2851988527],[1.83229560117,6.28456355663],[1.82785949792,6.28644177291],[1.82182443779,6.2908379014],[1.81562903657,6.28997904337],[1.81211044063,6.29143113241],[1.80757635117,6.29570768815],[1.80471693522,6.29692955475],[1.80073513171,6.29709778253],[1.79775991387,6.29612383144],[1.79625448928,6.29491967121],[1.79490049792,6.28965143736],[1.79641483036,6.28608317469],[1.80097564333,6.28338261222],[1.79566657198,6.28013306439],[1.79156005874,6.28174455931],[1.78498607441,6.28122215216],[1.78092410036,6.27752986974],[1.77588226414,6.27550220232],[1.76744654171,6.27696318619],[1.75653444036,6.27496207997],[1.74833032171,6.27238985028],[1.74761769468,6.27726423691],[1.74572477914,6.27938486862],[1.73948038482,6.27984972411],[1.73680357955,6.27761398678],[1.73572127725,6.27891558552],[1.72901812928,6.27911038233],[1.72435487617,6.27422273126],[1.72449294765,6.2678607472],[1.72555966124,6.26683029328],[1.69933944056,6.26159387355],[1.69572953928,6.25725948175],[1.69563043958,6.25076170066]]],"best":true},{"id":"Bing","name":"Bing aerial imagery","type":"bing","template":"http://www.bing.com/maps/","description":"Satellite and aerial imagery.","scaleExtent":[0,22],"default":true},{"id":"British_Columbia_Mosaic","name":"British Columbia Mosaic","type":"tms","template":"http://{switch:a,b,c,d}.imagery.paulnorman.ca/tiles/bc_mosaic/{zoom}/{x}/{y}.png","scaleExtent":[9,20],"polygon":[[[-123.3176032,49.3272567],[-123.4405258,49.3268222],[-123.440717,49.3384429],[-123.4398375,49.3430357],[-123.4401258,49.3435398],[-123.4401106,49.3439946],[-123.4406265,49.3444493],[-123.4404747,49.3455762],[-123.4397768,49.3460606],[-123.4389726,49.3461298],[-123.4372904,49.3567236],[-123.4374774,49.3710843],[-123.4335292,49.3709446],[-123.4330357,49.373725],[-123.4332717,49.3751221],[-123.4322847,49.3761001],[-123.4317482,49.3791736],[-123.4314264,49.3795927],[-123.4307826,49.3823866],[-123.4313405,49.3827358],[-123.4312118,49.3838533],[-123.4300415,49.3845883],[-123.4189858,49.3847087],[-123.4192235,49.4135198],[-123.3972532,49.4135691],[-123.3972758,49.4243473],[-123.4006929,49.4243314],[-123.4007741,49.5703491],[-123.4000812,49.570345],[-123.4010761,49.5933838],[-123.3760399,49.5932848],[-123.3769811,49.6756063],[-123.3507288,49.6756396],[-123.3507969,49.7086751],[-123.332887,49.708722],[-123.3327888,49.7256288],[-123.3007111,49.7255625],[-123.3009164,49.7375384],[-123.2885986,49.737638],[-123.2887823,49.8249207],[-123.2997955,49.8249207],[-123.3011721,49.8497814],[-123.3218218,49.850669],[-123.3273284,49.8577696],[-123.3276726,49.9758852],[-123.3008279,49.9752212],[-123.3007204,50.0997002],[-123.2501716,50.100735],[-123.25091,50.2754901],[-123.0224338,50.2755598],[-123.0224879,50.3254853],[-123.0009318,50.3254689],[-123.0007778,50.3423899],[-122.9775023,50.3423408],[-122.9774766,50.3504306],[-122.9508137,50.3504961],[-122.950795,50.3711984],[-122.9325221,50.3711521],[-122.9321048,50.399793],[-122.8874234,50.3999748],[-122.8873385,50.4256108],[-122.6620152,50.4256959],[-122.6623083,50.3994506],[-122.5990316,50.3992413],[-122.5988274,50.3755206],[-122.5724832,50.3753706],[-122.5735621,50.2493891],[-122.5990415,50.2494643],[-122.5991504,50.2265663],[-122.6185016,50.2266359],[-122.6185741,50.2244081],[-122.6490609,50.2245126],[-122.6492181,50.1993528],[-122.7308575,50.1993758],[-122.7311583,50.1244287],[-122.7490352,50.1245109],[-122.7490541,50.0903032],[-122.7687806,50.0903435],[-122.7689801,49.9494546],[-122.999047,49.9494706],[-122.9991199,49.8754553],[-122.9775894,49.8754553],[-122.9778145,49.6995098],[-122.9992362,49.6994781],[-122.9992524,49.6516526],[-123.0221525,49.6516526],[-123.0221162,49.5995096],[-123.0491898,49.5994625],[-123.0491898,49.5940523],[-123.0664647,49.5940405],[-123.0663594,49.5451868],[-123.0699906,49.5451202],[-123.0699008,49.5413153],[-123.0706835,49.5392837],[-123.0708888,49.5379931],[-123.0711454,49.5368773],[-123.0711069,49.5358115],[-123.0713764,49.532822],[-123.0716458,49.5321141],[-123.07171,49.5313896],[-123.0720308,49.5304153],[-123.0739554,49.5303486],[-123.0748023,49.5294992],[-123.0748151,49.5288079],[-123.0743403,49.5280584],[-123.073532,49.5274588],[-123.0733652,49.5270423],[-123.0732882,49.5255932],[-123.0737116,49.5249602],[-123.0736218,49.5244938],[-123.0992583,49.5244854],[-123.0991649,49.4754502],[-123.071052,49.4755252],[-123.071088,49.4663034],[-123.0739204,49.4663054],[-123.07422,49.4505028],[-123.0746319,49.4500858],[-123.074651,49.449329],[-123.0745999,49.449018],[-123.0744619,49.4486927],[-123.0743336,49.4479899],[-123.0742427,49.4477688],[-123.0743061,49.4447473],[-123.0747103,49.4447556],[-123.0746384,49.4377306],[-122.9996506,49.4377363],[-122.9996506,49.4369214],[-122.8606163,49.4415314],[-122.8102616,49.4423972],[-122.8098984,49.3766739],[-122.4036093,49.3766617],[-122.4036341,49.3771944],[-122.264739,49.3773028],[-122.263542,49.2360088],[-122.2155742,49.236139],[-122.0580956,49.235878],[-121.9538274,49.2966525],[-121.9400911,49.3045389],[-121.9235761,49.3142257],[-121.8990871,49.3225436],[-121.8883447,49.3259752],[-121.8552982,49.3363575],[-121.832697,49.3441519],[-121.7671336,49.3654361],[-121.6736683,49.3654589],[-121.6404153,49.3743775],[-121.5961976,49.3860493],[-121.5861178,49.3879193],[-121.5213684,49.3994649],[-121.5117375,49.4038378],[-121.4679302,49.4229024],[-121.4416803,49.4345607],[-121.422429,49.4345788],[-121.3462885,49.3932312],[-121.3480144,49.3412388],[-121.5135035,49.320577],[-121.6031683,49.2771727],[-121.6584065,49.1856125],[-121.679953,49.1654109],[-121.7815793,49.0702559],[-121.8076228,49.0622471],[-121.9393997,49.0636219],[-121.9725524,49.0424179],[-121.9921394,49.0332869],[-122.0035289,49.0273413],[-122.0178564,49.0241067],[-122.1108634,48.9992786],[-122.1493067,48.9995305],[-122.1492705,48.9991498],[-122.1991447,48.9996019],[-122.199181,48.9991974],[-122.234365,48.9994829],[-122.234365,49.000173],[-122.3994722,49.0012385],[-122.4521338,49.0016326],[-122.4521338,49.000883],[-122.4584089,49.0009306],[-122.4584814,48.9993124],[-122.4992458,48.9995022],[-122.4992458,48.9992906],[-122.5492618,48.9995107],[-122.5492564,48.9993206],[-122.6580785,48.9994212],[-122.6581061,48.9954007],[-122.7067604,48.9955344],[-122.7519761,48.9956392],[-122.7922063,48.9957204],[-122.7921907,48.9994331],[-123.0350417,48.9995724],[-123.0350437,49.0000958],[-123.0397091,49.0000536],[-123.0397444,49.0001812],[-123.0485506,49.0001348],[-123.0485329,49.0004712],[-123.0557122,49.000448],[-123.0556324,49.0002284],[-123.0641365,49.0001293],[-123.064158,48.9999421],[-123.074899,48.9996928],[-123.0750717,49.0006218],[-123.0899573,49.0003726],[-123.109229,48.9999421],[-123.1271193,49.0003046],[-123.1359953,48.9998741],[-123.1362716,49.0005765],[-123.153851,48.9998061],[-123.1540533,49.0006806],[-123.1710015,49.0001274],[-123.2000916,48.9996849],[-123.2003446,49.0497785],[-123.2108845,49.0497232],[-123.2112218,49.051989],[-123.2070479,49.0520857],[-123.2078911,49.0607884],[-123.2191688,49.0600978],[-123.218958,49.0612719],[-123.2251766,49.0612719],[-123.2253874,49.0622388],[-123.2297088,49.0620316],[-123.2298142,49.068592],[-123.2331869,49.0687301],[-123.2335031,49.0705945],[-123.249313,49.0702493],[-123.2497346,49.0802606],[-123.2751358,49.0803986],[-123.2751358,49.0870947],[-123.299483,49.0873018],[-123.29944,49.080253],[-123.3254508,49.0803944],[-123.3254353,49.1154662],[-123.2750966,49.1503341],[-123.275181,49.1873267],[-123.2788067,49.1871063],[-123.278891,49.1910741],[-123.3004767,49.1910741],[-123.3004186,49.2622933],[-123.3126185,49.2622416],[-123.3125958,49.2714948],[-123.3154251,49.2714727],[-123.3156628,49.2818906],[-123.3174735,49.2818832],[-123.3174961,49.2918488],[-123.3190353,49.2918488],[-123.3190692,49.298602],[-123.3202349,49.2985651],[-123.3202786,49.3019749],[-123.3222679,49.3019605],[-123.3223943,49.3118263],[-123.3254002,49.3118086],[-123.3253898,49.3201721],[-123.3192695,49.3201957],[-123.3192242,49.3246748],[-123.3179437,49.3246596],[-123.3179861,49.3254065],[-123.3176032,49.3272567]]],"terms_url":"http://imagery.paulnorman.ca/tiles/about.html","terms_text":"Copyright Province of British Columbia, City of Surrey"},{"id":"lu.geoportail.opendata.cadastre","name":"Cadastre geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/cadastre/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/plan-cadastral-numerise-pcn-webservices-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie"},{"id":"osm-cambodia_laos_thailand_vietnam-bilingual","name":"Cambodia, Laos, Thailand, Vietnam, Myanmar bilingual","type":"tms","template":"http://{switch:a,b,c,d}.tile.osm-tools.org/osm_then/{zoom}/{x}/{y}.png","scaleExtent":[0,19],"polygon":[[[92.1023798,20.8135629],[93.5690546,24.0975527],[94.1733026,23.9269484],[95.1950312,26.707274],[96.7550898,27.5286657],[97.5845575,28.5805966],[98.738122,27.514051],[98.7436151,25.8799151],[97.6779413,24.7577376],[97.9635858,24.042382],[98.8205194,24.1627239],[99.5236444,22.9593356],[100.3695917,21.5051376],[101.7923212,22.4830518],[105.3628778,23.3331079],[106.8185663,22.8480137],[108.1973505,21.3619661],[107.4389505,18.8539792],[117.1453714,7.4656173],[119.6172953,5.2875389],[118.1231546,4.0502277],[117.2552347,4.3624942],[115.8654642,4.3460623],[115.5084085,3.0249771],[114.552598,1.5100953],[113.5418558,1.2574836],[112.9650736,1.5704982],[112.2454691,1.5100953],[111.67418,1.0158321],[110.4546976,0.9004918],[109.4988871,1.9218969],[103.2256937,1.1256762],[100.4626322,3.2388904],[97.6721048,8.0588831],[93.892808,15.9398659],[92.1023798,20.8135629]]],"terms_url":"http://www.osm-tools.org/","terms_text":"© osm-tools.org & OpenStreetMap contributors, CC-BY-SA"},{"id":"South_Africa-CapeTown-Aerial-2013","name":"City of Cape Town 2013 Aerial","type":"tms","template":"http://{switch:a,b,c}.coct.aerial.openstreetmap.org.za/layer/za_coct_aerial_2013/{zoom}/{x}/{y}.jpg","description":"OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the municipal area. 12cm ground sample distance","scaleExtent":[1,21],"polygon":[[[18.4486565,-33.893623],[18.4485868,-33.902644],[18.4702,-33.9027665],[18.4813902,-33.8472383],[18.4492466,-33.801069],[18.4281537,-33.7356408],[18.43914,-33.7177232],[18.4071895,-33.6589917],[18.3322379,-33.5775191],[18.3324525,-33.5504487],[18.353996,-33.5505918],[18.3542535,-33.5236025],[18.3652398,-33.5236561],[18.3650252,-33.5148009],[18.3760115,-33.5147652],[18.3760545,-33.5058017],[18.4296557,-33.5059449],[18.4296986,-33.4878541],[18.4404919,-33.4878899],[18.4405991,-33.4698849],[18.4943721,-33.4700997],[18.4943292,-33.4791564],[18.5158297,-33.4791743],[18.5157439,-33.4881941],[18.5264727,-33.4883015],[18.5263225,-33.5243538],[18.5479304,-33.5244253],[18.5479519,-33.5153913],[18.5693666,-33.5154987],[18.5693666,-33.524479],[18.5801169,-33.5245327],[18.580074,-33.5425978],[18.5907814,-33.5425978],[18.5907385,-33.5606413],[18.5799453,-33.5605341],[18.5798809,-33.569617],[18.5906956,-33.569617],[18.5906526,-33.5786811],[18.6230108,-33.5787347],[18.622925,-33.5877264],[18.6659691,-33.5878872],[18.6659262,-33.614928],[18.6767194,-33.6149726],[18.6765772,-33.6510279],[18.687298,-33.6510167],[18.6873409,-33.6600365],[18.6980697,-33.6600901],[18.6980697,-33.6690733],[18.7520358,-33.6692519],[18.7520787,-33.6421924],[18.7736437,-33.642246],[18.773708,-33.6331886],[18.8274595,-33.6332958],[18.8275239,-33.6603044],[18.8166663,-33.6602866],[18.8166019,-33.6783233],[18.8058087,-33.6783055],[18.8058087,-33.7053892],[18.8273951,-33.7054428],[18.8273308,-33.7234701],[18.838124,-33.7234344],[18.8380381,-33.7413865],[18.8165161,-33.7413687],[18.8163659,-33.7955057],[18.8055941,-33.7955057],[18.8055083,-33.8135675],[18.794758,-33.8135497],[18.7947151,-33.8315364],[18.7731072,-33.8315186],[18.7731287,-33.8405194],[18.7623569,-33.8405194],[18.7622711,-33.903588],[18.7514564,-33.9035167],[18.7510809,-33.9847823],[18.7619063,-33.9848001],[18.7617776,-34.0298785],[18.772603,-34.0298963],[18.7725815,-34.0389073],[18.7940338,-34.0389406],[18.7938756,-34.0406987],[18.7984461,-34.0411855],[18.8032445,-34.0411788],[18.8034055,-34.0389206],[18.8159367,-34.038974],[18.8163444,-34.0299318],[18.8379845,-34.0316479],[18.8380006,-34.030003],[18.8484183,-34.0300074],[18.8484666,-34.0218491],[18.859925,-34.0234675],[18.8598606,-34.0210132],[18.868272,-34.0220803],[18.8681862,-34.0211733],[18.8854596,-34.0234319],[18.8851806,-34.0213156],[18.9025184,-34.021031],[18.9025828,-34.0119958],[18.9134189,-34.0119958],[18.9134833,-33.9939582],[18.9458844,-33.9940294],[18.9458629,-34.003102],[18.9674279,-34.0029953],[18.9674708,-34.0120848],[18.9782211,-34.0120848],[18.9783284,-34.0211377],[18.9891431,-34.0211377],[18.9891645,-34.039134],[19.0000167,-34.0391251],[19.0000221,-34.0571798],[19.0108368,-34.0572509],[19.0107939,-34.0841436],[19.0000007,-34.0841258],[19.0000221,-34.0931977],[18.9891538,-34.0931711],[18.9891753,-34.1021976],[18.9783177,-34.1021798],[18.9783177,-34.111232],[18.967503,-34.1112143],[18.9674923,-34.1292536],[18.9566025,-34.1292358],[18.9565596,-34.1382408],[18.9674172,-34.1383118],[18.9674172,-34.1473157],[18.9891753,-34.147298],[18.9891753,-34.165303],[18.9782748,-34.1652852],[18.9783177,-34.1742863],[18.9674172,-34.1742685],[18.9674601,-34.1833042],[18.9565596,-34.1833219],[18.9565596,-34.1923565],[18.9457449,-34.192321],[18.945702,-34.2013192],[18.9348659,-34.2013725],[18.9348873,-34.2193305],[18.9023575,-34.2193482],[18.9017567,-34.2362557],[18.8878414,-34.2373467],[18.8894185,-34.2554123],[18.8805887,-34.2553414],[18.8792744,-34.2644348],[18.8696882,-34.2644126],[18.8697097,-34.2734386],[18.8371369,-34.2734208],[18.8371155,-34.2643771],[18.848016,-34.2644037],[18.8480267,-34.237391],[18.8154861,-34.210281],[18.8156471,-34.1741265],[18.8548824,-34.1562743],[18.7617561,-34.0840547],[18.6533734,-34.077479],[18.4797433,-34.1101217],[18.4463713,-34.1342269],[18.4444508,-34.1640868],[18.4359965,-34.1640513],[18.435975,-34.1820172],[18.4468111,-34.182106],[18.4467253,-34.1911052],[18.4659299,-34.1912117],[18.4866151,-34.2453911],[18.4788904,-34.2543659],[18.4860036,-34.2543748],[18.4677109,-34.2994116],[18.4892222,-34.3445792],[18.500112,-34.3445837],[18.4999189,-34.3626174],[18.467432,-34.3625111],[18.4673676,-34.3534947],[18.3916005,-34.3170651],[18.3917722,-34.2900161],[18.3701643,-34.2808678],[18.370682,-34.2178866],[18.3492324,-34.1816178],[18.3274743,-34.1814936],[18.3276674,-34.1634565],[18.3118746,-34.1543832],[18.3114025,-34.1435331],[18.3236656,-34.1346886],[18.3499297,-34.1042053],[18.3393189,-34.0882843],[18.3612487,-34.0597219],[18.3550474,-34.0553843],[18.3427522,-34.064326],[18.3199963,-34.0644326],[18.296071,-34.045126],[18.3068213,-34.0252637],[18.3287725,-34.0191992],[18.3289227,-34.001252],[18.3397374,-34.0012698],[18.3398017,-33.9866282],[18.3628687,-33.9735145],[18.3638129,-33.9292474],[18.3726212,-33.9292741],[18.3728358,-33.917763],[18.3977267,-33.8933469],[18.4486565,-33.893623]]],"terms_url":"https://www.capetown.gov.za","terms_text":"City of Cape Town Aerial - OPENSTREETMAP USE ONLY"},{"id":"South_Africa-CapeTown-Aerial","name":"City of Cape Town 2015 Aerial","type":"tms","template":"http://{switch:a,b,c}.coct.aerial.openstreetmap.org.za/layer/za_coct_aerial_2015/{zoom}/{x}/{y}.jpg","description":"OpenStreetMap use only. City of Cape Town Aerial ortho-photography of the municipal area. 8cm ground sample distance","scaleExtent":[1,21],"polygon":[[[18.4486565,-33.893623],[18.4485868,-33.902644],[18.4702,-33.9027665],[18.4813902,-33.8472383],[18.4492466,-33.801069],[18.4281537,-33.7356408],[18.43914,-33.7177232],[18.4071895,-33.6589917],[18.3322379,-33.5775191],[18.3324525,-33.5504487],[18.353996,-33.5505918],[18.3542535,-33.5236025],[18.3652398,-33.5236561],[18.3650252,-33.5148009],[18.3760115,-33.5147652],[18.3760545,-33.5058017],[18.4296557,-33.5059449],[18.4296986,-33.4878541],[18.4404919,-33.4878899],[18.4405991,-33.4698849],[18.4943721,-33.4700997],[18.4943292,-33.4791564],[18.5158297,-33.4791743],[18.5157439,-33.4881941],[18.5264727,-33.4883015],[18.5263225,-33.5243538],[18.5479304,-33.5244253],[18.5479519,-33.5153913],[18.5693666,-33.5154987],[18.5693666,-33.524479],[18.5801169,-33.5245327],[18.580074,-33.5425978],[18.5907814,-33.5425978],[18.5907385,-33.5606413],[18.5799453,-33.5605341],[18.5798809,-33.569617],[18.5906956,-33.569617],[18.5906526,-33.5786811],[18.6230108,-33.5787347],[18.622925,-33.5877264],[18.6659691,-33.5878872],[18.6659262,-33.614928],[18.6767194,-33.6149726],[18.6765772,-33.6510279],[18.687298,-33.6510167],[18.6873409,-33.6600365],[18.6980697,-33.6600901],[18.6980697,-33.6690733],[18.7520358,-33.6692519],[18.7520787,-33.6421924],[18.7736437,-33.642246],[18.773708,-33.6331886],[18.8274595,-33.6332958],[18.8275239,-33.6603044],[18.8166663,-33.6602866],[18.8166019,-33.6783233],[18.8058087,-33.6783055],[18.8058087,-33.7053892],[18.8273951,-33.7054428],[18.8273308,-33.7234701],[18.838124,-33.7234344],[18.8380381,-33.7413865],[18.8165161,-33.7413687],[18.8163659,-33.7955057],[18.8055941,-33.7955057],[18.8055083,-33.8135675],[18.794758,-33.8135497],[18.7947151,-33.8315364],[18.7731072,-33.8315186],[18.7731287,-33.8405194],[18.7623569,-33.8405194],[18.7622711,-33.903588],[18.7514564,-33.9035167],[18.7510809,-33.9847823],[18.7619063,-33.9848001],[18.7617776,-34.0298785],[18.772603,-34.0298963],[18.7725815,-34.0389073],[18.7940338,-34.0389406],[18.7938756,-34.0406987],[18.7984461,-34.0411855],[18.8032445,-34.0411788],[18.8034055,-34.0389206],[18.8159367,-34.038974],[18.8163444,-34.0299318],[18.8379845,-34.0316479],[18.8380006,-34.030003],[18.8484183,-34.0300074],[18.8484666,-34.0218491],[18.859925,-34.0234675],[18.8598606,-34.0210132],[18.868272,-34.0220803],[18.8681862,-34.0211733],[18.8854596,-34.0234319],[18.8851806,-34.0213156],[18.9025184,-34.021031],[18.9025828,-34.0119958],[18.9134189,-34.0119958],[18.9134833,-33.9939582],[18.9458844,-33.9940294],[18.9458629,-34.003102],[18.9674279,-34.0029953],[18.9674708,-34.0120848],[18.9782211,-34.0120848],[18.9783284,-34.0211377],[18.9891431,-34.0211377],[18.9891645,-34.039134],[19.0000167,-34.0391251],[19.0000221,-34.0571798],[19.0108368,-34.0572509],[19.0107939,-34.0841436],[19.0000007,-34.0841258],[19.0000221,-34.0931977],[18.9891538,-34.0931711],[18.9891753,-34.1021976],[18.9783177,-34.1021798],[18.9783177,-34.111232],[18.967503,-34.1112143],[18.9674923,-34.1292536],[18.9566025,-34.1292358],[18.9565596,-34.1382408],[18.9674172,-34.1383118],[18.9674172,-34.1473157],[18.9891753,-34.147298],[18.9891753,-34.165303],[18.9782748,-34.1652852],[18.9783177,-34.1742863],[18.9674172,-34.1742685],[18.9674601,-34.1833042],[18.9565596,-34.1833219],[18.9565596,-34.1923565],[18.9457449,-34.192321],[18.945702,-34.2013192],[18.9348659,-34.2013725],[18.9348873,-34.2193305],[18.9023575,-34.2193482],[18.9017567,-34.2362557],[18.8878414,-34.2373467],[18.8894185,-34.2554123],[18.8805887,-34.2553414],[18.8792744,-34.2644348],[18.8696882,-34.2644126],[18.8697097,-34.2734386],[18.8371369,-34.2734208],[18.8371155,-34.2643771],[18.848016,-34.2644037],[18.8480267,-34.237391],[18.8154861,-34.210281],[18.8156471,-34.1741265],[18.8548824,-34.1562743],[18.7617561,-34.0840547],[18.6533734,-34.077479],[18.4797433,-34.1101217],[18.4463713,-34.1342269],[18.4444508,-34.1640868],[18.4359965,-34.1640513],[18.435975,-34.1820172],[18.4468111,-34.182106],[18.4467253,-34.1911052],[18.4659299,-34.1912117],[18.4866151,-34.2453911],[18.4788904,-34.2543659],[18.4860036,-34.2543748],[18.4677109,-34.2994116],[18.4892222,-34.3445792],[18.500112,-34.3445837],[18.4999189,-34.3626174],[18.467432,-34.3625111],[18.4673676,-34.3534947],[18.3916005,-34.3170651],[18.3917722,-34.2900161],[18.3701643,-34.2808678],[18.370682,-34.2178866],[18.3492324,-34.1816178],[18.3274743,-34.1814936],[18.3276674,-34.1634565],[18.3118746,-34.1543832],[18.3114025,-34.1435331],[18.3236656,-34.1346886],[18.3499297,-34.1042053],[18.3393189,-34.0882843],[18.3612487,-34.0597219],[18.3550474,-34.0553843],[18.3427522,-34.064326],[18.3199963,-34.0644326],[18.296071,-34.045126],[18.3068213,-34.0252637],[18.3287725,-34.0191992],[18.3289227,-34.001252],[18.3397374,-34.0012698],[18.3398017,-33.9866282],[18.3628687,-33.9735145],[18.3638129,-33.9292474],[18.3726212,-33.9292741],[18.3728358,-33.917763],[18.3977267,-33.8933469],[18.4486565,-33.893623]]],"terms_url":"https://www.capetown.gov.za","terms_text":"City of Cape Town Aerial - OPENSTREETMAP USE ONLY","best":true},{"id":"CRAIG-Auvergne-2013","name":"CRAIG - Auvergne 2013 - 25 cm","type":"tms","template":"http://tiles.craig.fr/osm/tms/1.0.0/ortho_2013/webmercator/{zoom-1}/{x}/{-y}.jpeg","polygon":[[[2.9401192,44.6338837],[2.9971896,44.633931],[2.9971676,44.6473385],[3.0159744,44.6473541],[3.0159305,44.6741168],[3.0349486,44.6741326],[3.0349036,44.7015216],[3.0536338,44.7015371],[3.0535675,44.7418954],[3.0723301,44.741911],[3.0722196,44.8091687],[3.0921583,44.8091852],[3.092137,44.8221252],[3.1301398,44.8221567],[3.1300495,44.8770722],[3.1485587,44.8770875],[3.1485807,44.8636964],[3.1682313,44.8637126],[3.1682538,44.8500261],[3.2064,44.8500576],[3.2063789,44.8628393],[3.2439492,44.8628704],[3.2439263,44.8767893],[3.2631452,44.8768052],[3.2630782,44.9175197],[3.3200437,44.9175667],[3.3200227,44.9303336],[3.3390815,44.9303493],[3.3390586,44.9441978],[3.3769989,44.9442292],[3.3770218,44.9302879],[3.396031,44.9303036],[3.39612,44.8762713],[3.4148252,44.8762867],[3.4148923,44.8355255],[3.4333371,44.8355408],[3.4333819,44.8082784],[3.4525549,44.8082943],[3.4525774,44.7946344],[3.5089262,44.7946811],[3.508904,44.8081469],[3.604265,44.8082258],[3.6042213,44.8348239],[3.6236136,44.83484],[3.6235695,44.8616583],[3.6424823,44.8616739],[3.642549,44.821102],[3.6610055,44.8211172],[3.6610275,44.8077696],[3.6992999,44.8078013],[3.6992782,44.820994],[3.7361139,44.8210245],[3.7361819,44.7797075],[3.7751058,44.7797397],[3.775151,44.7522344],[3.8118352,44.7522648],[3.8118567,44.7392021],[3.8311822,44.7392181],[3.8312061,44.7246766],[3.887824,44.7247235],[3.8878019,44.7381833],[3.925626,44.7382146],[3.9256039,44.7516682],[3.9454097,44.7516846],[3.9453656,44.7784691],[3.9643737,44.7784848],[3.9643516,44.7919273],[4.0033183,44.7919596],[4.0032964,44.8052575],[4.0216937,44.8052727],[4.0216718,44.8185687],[4.0596515,44.8186001],[4.0596082,44.8449216],[4.0798132,44.8449383],[4.0797928,44.8573502],[4.173882,44.857428],[4.1738604,44.8705468],[4.1932576,44.8705628],[4.193235,44.8842744],[4.2140385,44.8842916],[4.2139961,44.9100242],[4.2324138,44.9100394],[4.2323689,44.9373093],[4.2715486,44.9373416],[4.2715273,44.9502971],[4.3288672,44.9503445],[4.3287793,45.0036659],[4.3489259,45.0036825],[4.3489038,45.0170656],[4.4060793,45.0171127],[4.4059904,45.0710024],[4.3884707,45.0709879],[4.3884482,45.0845976],[4.407943,45.0846137],[4.4079231,45.09663],[4.4843608,45.0966929],[4.4842941,45.1370472],[4.4663631,45.1370324],[4.4663413,45.1502035],[4.4864469,45.15022],[4.4864022,45.1772415],[4.5065524,45.177258],[4.5064402,45.2450058],[4.4881342,45.2449908],[4.4881106,45.2592077],[4.4698588,45.2591927],[4.469836,45.2729835],[4.4508849,45.2729679],[4.4508626,45.2864203],[4.3936753,45.2863733],[4.3936303,45.3135182],[4.3750893,45.3135029],[4.3750662,45.3274054],[4.3950734,45.3274218],[4.3950283,45.3545849],[4.3767871,45.35457],[4.3767639,45.3685486],[4.3576564,45.3685329],[4.3576335,45.3823359],[4.2814576,45.3822734],[4.2814334,45.3968834],[4.2444556,45.3968531],[4.2444325,45.4107893],[4.1481178,45.4107104],[4.1481388,45.3980659],[4.1291913,45.3980504],[4.1292145,45.3840899],[4.0902138,45.3840579],[4.0902351,45.3712093],[4.0135507,45.3711464],[4.0135259,45.3860975],[3.9170932,45.3860185],[3.9170704,45.3997355],[3.9375703,45.3997523],[3.9375481,45.4131142],[3.975277,45.4131451],[3.9752552,45.4262061],[3.9953725,45.4262226],[3.9956999,45.5209568],[3.9777821,45.5209421],[3.977693,45.5743873],[3.9581755,45.5743714],[3.9581522,45.5883658],[3.9396019,45.5883506],[3.9395781,45.6026212],[3.9202279,45.6026054],[3.9202048,45.6164603],[3.8818916,45.616429],[3.8818468,45.643276],[3.8441329,45.6432453],[3.8441098,45.6570896],[3.8261689,45.657075],[3.8261241,45.6838865],[3.8072175,45.6838711],[3.8071277,45.7375802],[3.7882101,45.7375648],[3.7881863,45.7517966],[3.7688482,45.7517809],[3.7688028,45.7789651],[3.750719,45.7789504],[3.7505822,45.8606554],[3.7696692,45.8606709],[3.7695793,45.914333],[3.751661,45.9143185],[3.7516379,45.9280879],[3.7328974,45.9280727],[3.7328527,45.9547155],[3.8101795,45.9547782],[3.8101569,45.9682278],[3.8495994,45.9682598],[3.8495098,46.0216192],[3.8318849,46.0216049],[3.8317936,46.0759058],[3.8505037,46.0759209],[3.8504583,46.1029545],[3.8324727,46.10294],[3.8323353,46.1845598],[3.8142194,46.1845452],[3.8141522,46.2244234],[3.8336864,46.2244392],[3.8336634,46.2381001],[3.8528929,46.2381156],[3.8528703,46.2514729],[3.8931424,46.2515054],[3.8931205,46.2644677],[3.9130562,46.2644838],[3.9130335,46.2779317],[3.9518926,46.2779631],[3.9518709,46.2908227],[3.971523,46.2908386],[3.9715012,46.3036947],[4.0105021,46.3037261],[4.0104784,46.3177638],[4.0298278,46.3177794],[4.029783,46.3442827],[4.0116018,46.344268],[4.0114647,46.4253437],[4.031532,46.4253598],[4.0314635,46.4657978],[4.0132435,46.4657832],[4.0132204,46.479378],[3.9943703,46.4793629],[3.9943461,46.4936113],[3.9745971,46.4935955],[3.9745735,46.5075278],[3.8775423,46.5074499],[3.8774959,46.5347758],[3.8583577,46.5347605],[3.8583347,46.5483156],[3.8186897,46.5482838],[3.8187114,46.5355316],[3.7992386,46.535516],[3.7992156,46.5490706],[3.7610377,46.5490399],[3.7609226,46.6168059],[3.7423295,46.616791],[3.7422834,46.6439624],[3.7228558,46.6439468],[3.7228098,46.6710357],[3.7038706,46.6710206],[3.7038474,46.6846709],[3.6841096,46.6846551],[3.6840631,46.711998],[3.6648359,46.7119826],[3.6647898,46.7390375],[3.6457623,46.7390222],[3.6457158,46.7663375],[3.6257542,46.7663216],[3.6257314,46.7797093],[3.5672301,46.7796626],[3.5672528,46.7663082],[3.5471462,46.7662922],[3.5471922,46.7392824],[3.5271621,46.7392664],[3.5272308,46.6988967],[3.4877399,46.6988651],[3.4877618,46.685943],[3.4679636,46.6859272],[3.4679407,46.6994059],[3.4679179,46.7127907],[3.4486497,46.7127753],[3.4486258,46.7267878],[3.350433,46.7267092],[3.3504786,46.6999004],[3.3303913,46.6998843],[3.3303448,46.7271984],[3.2327174,46.7271203],[3.2327406,46.7135148],[3.2129042,46.7134989],[3.212927,46.7001302],[3.1735446,46.7000987],[3.173498,46.7275094],[3.1541227,46.7274939],[3.1541002,46.7407271],[3.1147772,46.7406957],[3.114754,46.7542756],[3.0753432,46.7542441],[3.0752971,46.7813548],[3.05597,46.7813394],[3.055924,46.8083069],[2.99704,46.8082598],[2.9970166,46.8219593],[2.9379443,46.8219121],[2.9379675,46.8082604],[2.8986634,46.808229],[2.8986872,46.7942392],[2.878991,46.7942234],[2.8790134,46.7810427],[2.8594188,46.781027],[2.8594415,46.7677056],[2.8400446,46.7676901],[2.8400671,46.754466],[2.7414032,46.7543871],[2.741382,46.7668245],[2.7023351,46.7667932],[2.7023571,46.7538869],[2.6826621,46.7538711],[2.6826849,46.7404752],[2.6634875,46.7404599],[2.6635123,46.7258966],[2.6434164,46.7258805],[2.6434382,46.7130938],[2.6241432,46.7130784],[2.6241658,46.6998093],[2.6039699,46.6997931],[2.6039936,46.6858433],[2.5651245,46.6858122],[2.5651469,46.6726126],[2.5459278,46.6725972],[2.5459966,46.6321534],[2.5659222,46.6321694],[2.565946,46.6181104],[2.5456397,46.6180941],[2.5456862,46.5907192],[2.5664225,46.5907358],[2.5664449,46.5775417],[2.5854963,46.577557],[2.5855181,46.5647199],[2.5661318,46.5647044],[2.5661557,46.5506246],[2.468279,46.5505461],[2.4683039,46.5358205],[2.3321246,46.5357112],[2.3321701,46.5088566],[2.3126474,46.5088409],[2.3126703,46.4953444],[2.2928767,46.4953285],[2.2928996,46.4818182],[2.2748687,46.4818037],[2.2749151,46.4544154],[2.2553921,46.4543997],[2.255529,46.3734888],[2.275948,46.3735052],[2.276037,46.3208741],[2.3145615,46.3209052],[2.3145849,46.3070421],[2.3537075,46.3070737],[2.3537313,46.2929669],[2.3938428,46.2929992],[2.3938862,46.2672854],[2.4515727,46.267332],[2.451596,46.2534921],[2.4709353,46.2535077],[2.4709807,46.2265552],[2.4915062,46.2265718],[2.4915521,46.199329],[2.5108806,46.1993446],[2.5109254,46.1727799],[2.5311728,46.1727963],[2.5313772,46.051352],[2.5516349,46.0513684],[2.5516577,46.0377665],[2.5705635,46.0377818],[2.5706774,45.9699434],[2.5514356,45.9699278],[2.551458,45.9566151],[2.5322621,45.9565995],[2.5322849,45.9430066],[2.5130653,45.942991],[2.513134,45.9020279],[2.4749412,45.9019969],[2.4749633,45.8888235],[2.4361947,45.888792],[2.4362172,45.8753288],[2.417209,45.8753133],[2.4172548,45.8479368],[2.3784736,45.8479053],[2.378497,45.8339746],[2.3595157,45.8339592],[2.3595606,45.8070849],[2.3787254,45.8071005],[2.3787481,45.7935783],[2.3986981,45.7935945],[2.3987203,45.7803477],[2.4182486,45.7803636],[2.4183161,45.7400007],[2.4572171,45.7400324],[2.4572394,45.7266956],[2.4758919,45.7267107],[2.4759144,45.7132391],[2.49533,45.7132549],[2.4954204,45.6591268],[2.4576942,45.659096],[2.4577622,45.618343],[2.4391188,45.6183278],[2.4391866,45.5776619],[2.4585044,45.5776777],[2.4585496,45.5505348],[2.4780887,45.5505508],[2.4781108,45.5372464],[2.4975506,45.5372623],[2.4975949,45.5106757],[2.4785536,45.5106601],[2.4786444,45.4561337],[2.4597798,45.4561183],[2.4598701,45.401757],[2.4224876,45.4017264],[2.4224651,45.4152816],[2.4023154,45.4152651],[2.4022929,45.4288193],[2.3256006,45.4287565],[2.3256684,45.3879609],[2.3456182,45.3879773],[2.3456629,45.3611091],[2.326256,45.3610932],[2.326279,45.3472146],[2.3073819,45.3471991],[2.3074045,45.3335972],[2.2881095,45.3335813],[2.2881307,45.3208191],[2.2696332,45.3208039],[2.2696574,45.306212],[2.2506602,45.3061964],[2.2506828,45.2925147],[2.2316866,45.2924992],[2.2317086,45.2792355],[2.2130009,45.2792202],[2.213046,45.2520355],[2.1937387,45.2520197],[2.1937617,45.2381134],[2.1756091,45.2380985],[2.1757423,45.1576822],[2.1573543,45.157667],[2.1574448,45.1029478],[2.1202408,45.1029172],[2.1202629,45.0895468],[2.1006669,45.0895306],[2.1006902,45.0754441],[2.0824591,45.0754291],[2.082548,45.0215961],[2.1025534,45.0216126],[2.1025982,44.994453],[2.0457406,44.9944061],[2.0458508,44.9275321],[2.0657794,44.9275486],[2.0658912,44.8596881],[2.0856964,44.8597044],[2.0857193,44.8458126],[2.1055593,44.8458291],[2.1056029,44.8193264],[2.124743,44.8193422],[2.1247657,44.805512],[2.1435067,44.8055275],[2.143551,44.778597],[2.1256091,44.7785822],[2.1256984,44.7242739],[2.1066459,44.7242581],[2.1067116,44.6842263],[2.1263414,44.6842426],[2.1263635,44.670735],[2.14598,44.6707513],[2.146069,44.6164441],[2.1839622,44.6164756],[2.183983,44.6037819],[2.2404173,44.6038288],[2.2403728,44.6309515],[2.25948,44.6309674],[2.2594571,44.644934],[2.316678,44.6449815],[2.3167011,44.6308801],[2.3361516,44.6308963],[2.3361734,44.6175824],[2.3724238,44.6176125],[2.3724009,44.6315823],[2.4110495,44.6316144],[2.4110701,44.6190741],[2.4492173,44.6191058],[2.4491956,44.6323197],[2.5048575,44.6323659],[2.5048126,44.6597555],[2.5246119,44.6597719],[2.524567,44.6871739],[2.5422544,44.6871886],[2.5422313,44.70122],[2.5807101,44.701252],[2.5805999,44.7683374],[2.61769,44.7683681],[2.6176235,44.808838],[2.6367564,44.8088539],[2.6366899,44.8492948],[2.6733105,44.8493251],[2.6732888,44.8625164],[2.6933766,44.862533],[2.6933323,44.8894303],[2.7305201,44.8894611],[2.7304757,44.9164461],[2.7499202,44.9164622],[2.7500519,44.8364688],[2.8073346,44.8365162],[2.8073139,44.8491017],[2.8263796,44.8491175],[2.8264007,44.8362845],[2.8457039,44.8363004],[2.8457707,44.7957107],[2.8642166,44.795726],[2.8642611,44.7686452],[2.8839885,44.7686615],[2.8840323,44.7419697],[2.9020315,44.7419846],[2.9021426,44.6743192],[2.9219777,44.6743357],[2.9220221,44.6472986],[2.9400972,44.6473136],[2.9401192,44.6338837]]],"terms_url":"http://wiki.openstreetmap.org/wiki/WikiProject_France/CRAIG","terms_text":"Orthophotographie CRAIG/Sintegra/IGN 2013"},{"id":"Czech_CUZK-KM-tms","name":"Czech CUZK:KM tiles proxy","type":"tms","template":"http://osm-{switch:a,b,c}.zby.cz/tiles_cuzk.php/{zoom}/{x}/{y}.png","scaleExtent":[13,18],"polygon":[[[15.0063684,49.0177392],[15.1559854,49.0013828],[15.190896,48.9424551],[15.3105895,48.9882938],[15.4053469,48.9752013],[15.5400022,48.9162426],[15.7145553,48.8670572],[15.8342488,48.880178],[15.968904,48.8178233],[16.0885976,48.7455261],[16.3978059,48.7455261],[16.4875761,48.8145394],[16.6721036,48.7784014],[16.6820781,48.7356594],[16.9015163,48.7126294],[16.9464014,48.6237005],[17.1159672,48.8375227],[17.2107246,48.880178],[17.4052266,48.8178233],[17.4800351,48.8539329],[17.5299074,48.8178233],[17.7044605,48.8670572],[17.8141796,48.9359033],[17.8840008,48.9359033],[17.9438476,49.0210099],[18.0635412,49.0340903],[18.1184007,49.0994409],[18.1981964,49.3047337],[18.3877112,49.3339917],[18.577226,49.5091747],[18.7567663,49.4994587],[18.8465365,49.5253637],[18.8764598,49.5706645],[18.7966641,49.693412],[18.64206,49.7095399],[18.5872004,49.8351543],[18.6121366,49.8833809],[18.5622643,49.9347695],[18.512392,49.9058702],[18.362775,49.9540261],[18.3278644,49.9219275],[18.2630304,49.9732751],[18.1184007,50.0053395],[18.0635412,50.075806],[17.9139242,49.9796897],[17.779269,50.0309757],[17.714435,50.1237921],[17.6047159,50.1653411],[17.7593201,50.21962],[17.7343839,50.3439092],[17.6396265,50.2802117],[17.3802905,50.2802117],[17.3503671,50.3439092],[17.2805459,50.3375433],[17.1857885,50.4075214],[16.9015163,50.4615247],[16.8666057,50.4138779],[16.9663503,50.3184404],[17.0361715,50.2323826],[16.8366823,50.21962],[16.7120015,50.1046034],[16.5823335,50.1589513],[16.5623846,50.2387626],[16.4327166,50.3375433],[16.3529209,50.3916263],[16.2781124,50.3916263],[16.2082911,50.4456477],[16.3978059,50.5344899],[16.4476782,50.5978464],[16.3529209,50.670601],[16.2382145,50.6769221],[16.2182656,50.6326561],[16.1284954,50.6832425],[16.0486997,50.6073425],[15.988853,50.7021983],[15.8741467,50.6832425],[15.8292616,50.7653291],[15.729517,50.743243],[15.450232,50.8157725],[15.3903852,50.7747914],[15.3804108,50.8598659],[15.2956278,50.8850434],[15.2956278,50.9887568],[15.1709471,51.0201394],[14.9914067,51.0013124],[15.0063684,50.8881896],[14.8417898,50.8756034],[14.7969047,50.8252246],[14.6323261,50.8567177],[14.6622495,50.9353576],[14.5724793,50.9227841],[14.6123772,50.9856174],[14.4976708,51.0483657],[14.4178751,51.0232765],[14.3081561,51.0671736],[14.2532965,51.0044508],[14.4029134,50.9322145],[14.3729901,50.897627],[14.2433221,50.9070625],[14.2084114,50.844123],[14.0338583,50.8126214],[13.9789988,50.8252246],[13.9041903,50.7968626],[13.8742669,50.740087],[13.5351352,50.7243038],[13.530148,50.6579561],[13.4703012,50.6136722],[13.3905055,50.664279],[13.3256715,50.5883483],[13.250863,50.6105074],[13.1960035,50.5059517],[13.0513738,50.5218084],[12.9665909,50.4106997],[12.8269484,50.4710483],[12.7022676,50.4138779],[12.5077656,50.401164],[12.343187,50.2547088],[12.323238,50.1845054],[12.2484296,50.2738373],[12.1736211,50.3311765],[12.0988126,50.33436],[12.1187616,50.25152],[12.2234934,50.1653411],[12.2035445,50.1237921],[12.5027784,49.9732751],[12.4778422,49.9379795],[12.5476634,49.9155052],[12.4678677,49.8029766],[12.408021,49.7611134],[12.4828294,49.6869593],[12.5327017,49.6869593],[12.5177401,49.6288466],[12.6075102,49.5415474],[12.6723442,49.4378793],[12.8119867,49.3469896],[12.9466419,49.3437405],[13.2309141,49.1288206],[13.3256715,49.1059712],[13.4353906,49.0438984],[13.4154417,48.9948387],[13.5002246,48.949006],[13.5650586,48.9882938],[13.6847522,48.8834577],[13.7445989,48.9031312],[13.8243946,48.7751149],[13.8992031,48.7751149],[14.0587945,48.676418],[14.0438328,48.6302932],[14.1435774,48.5907241],[14.3729901,48.5610269],[14.4827091,48.6500662],[14.5774665,48.607215],[14.6273389,48.6335892],[14.7071346,48.5808269],[14.7470324,48.7027561],[14.8118664,48.7389485],[14.8168536,48.794831],[14.9864195,48.7652539],[15.0063684,49.0177392]]],"overlay":true},{"id":"Czech_RUIAN-budovy","name":"Czech RUIAN budovy","type":"tms","template":"http://tile.poloha.net/budovy/{zoom}/{x}/{y}.png","scaleExtent":[12,20],"polygon":[[[15.0063684,49.0177392],[15.1559854,49.0013828],[15.190896,48.9424551],[15.3105895,48.9882938],[15.4053469,48.9752013],[15.5400022,48.9162426],[15.7145553,48.8670572],[15.8342488,48.880178],[15.968904,48.8178233],[16.0885976,48.7455261],[16.3978059,48.7455261],[16.4875761,48.8145394],[16.6721036,48.7784014],[16.6820781,48.7356594],[16.9015163,48.7126294],[16.9464014,48.6237005],[17.1159672,48.8375227],[17.2107246,48.880178],[17.4052266,48.8178233],[17.4800351,48.8539329],[17.5299074,48.8178233],[17.7044605,48.8670572],[17.8141796,48.9359033],[17.8840008,48.9359033],[17.9438476,49.0210099],[18.0635412,49.0340903],[18.1184007,49.0994409],[18.1981964,49.3047337],[18.3877112,49.3339917],[18.577226,49.5091747],[18.7567663,49.4994587],[18.8465365,49.5253637],[18.8764598,49.5706645],[18.7966641,49.693412],[18.64206,49.7095399],[18.5872004,49.8351543],[18.6121366,49.8833809],[18.5622643,49.9347695],[18.512392,49.9058702],[18.362775,49.9540261],[18.3278644,49.9219275],[18.2630304,49.9732751],[18.1184007,50.0053395],[18.0635412,50.075806],[17.9139242,49.9796897],[17.779269,50.0309757],[17.714435,50.1237921],[17.6047159,50.1653411],[17.7593201,50.21962],[17.7343839,50.3439092],[17.6396265,50.2802117],[17.3802905,50.2802117],[17.3503671,50.3439092],[17.2805459,50.3375433],[17.1857885,50.4075214],[16.9015163,50.4615247],[16.8666057,50.4138779],[16.9663503,50.3184404],[17.0361715,50.2323826],[16.8366823,50.21962],[16.7120015,50.1046034],[16.5823335,50.1589513],[16.5623846,50.2387626],[16.4327166,50.3375433],[16.3529209,50.3916263],[16.2781124,50.3916263],[16.2082911,50.4456477],[16.3978059,50.5344899],[16.4476782,50.5978464],[16.3529209,50.670601],[16.2382145,50.6769221],[16.2182656,50.6326561],[16.1284954,50.6832425],[16.0486997,50.6073425],[15.988853,50.7021983],[15.8741467,50.6832425],[15.8292616,50.7653291],[15.729517,50.743243],[15.450232,50.8157725],[15.3903852,50.7747914],[15.3804108,50.8598659],[15.2956278,50.8850434],[15.2956278,50.9887568],[15.1709471,51.0201394],[14.9914067,51.0013124],[15.0063684,50.8881896],[14.8417898,50.8756034],[14.7969047,50.8252246],[14.6323261,50.8567177],[14.6622495,50.9353576],[14.5724793,50.9227841],[14.6123772,50.9856174],[14.4976708,51.0483657],[14.4178751,51.0232765],[14.3081561,51.0671736],[14.2532965,51.0044508],[14.4029134,50.9322145],[14.3729901,50.897627],[14.2433221,50.9070625],[14.2084114,50.844123],[14.0338583,50.8126214],[13.9789988,50.8252246],[13.9041903,50.7968626],[13.8742669,50.740087],[13.5351352,50.7243038],[13.530148,50.6579561],[13.4703012,50.6136722],[13.3905055,50.664279],[13.3256715,50.5883483],[13.250863,50.6105074],[13.1960035,50.5059517],[13.0513738,50.5218084],[12.9665909,50.4106997],[12.8269484,50.4710483],[12.7022676,50.4138779],[12.5077656,50.401164],[12.343187,50.2547088],[12.323238,50.1845054],[12.2484296,50.2738373],[12.1736211,50.3311765],[12.0988126,50.33436],[12.1187616,50.25152],[12.2234934,50.1653411],[12.2035445,50.1237921],[12.5027784,49.9732751],[12.4778422,49.9379795],[12.5476634,49.9155052],[12.4678677,49.8029766],[12.408021,49.7611134],[12.4828294,49.6869593],[12.5327017,49.6869593],[12.5177401,49.6288466],[12.6075102,49.5415474],[12.6723442,49.4378793],[12.8119867,49.3469896],[12.9466419,49.3437405],[13.2309141,49.1288206],[13.3256715,49.1059712],[13.4353906,49.0438984],[13.4154417,48.9948387],[13.5002246,48.949006],[13.5650586,48.9882938],[13.6847522,48.8834577],[13.7445989,48.9031312],[13.8243946,48.7751149],[13.8992031,48.7751149],[14.0587945,48.676418],[14.0438328,48.6302932],[14.1435774,48.5907241],[14.3729901,48.5610269],[14.4827091,48.6500662],[14.5774665,48.607215],[14.6273389,48.6335892],[14.7071346,48.5808269],[14.7470324,48.7027561],[14.8118664,48.7389485],[14.8168536,48.794831],[14.9864195,48.7652539],[15.0063684,49.0177392]]],"terms_url":"http://poloha.net/"},{"id":"Czech_RUIAN-parcely","name":"Czech RUIAN parcely","type":"tms","template":"http://tile.poloha.net/parcely/{zoom}/{x}/{y}.png","scaleExtent":[12,20],"polygon":[[[15.0063684,49.0177392],[15.1559854,49.0013828],[15.190896,48.9424551],[15.3105895,48.9882938],[15.4053469,48.9752013],[15.5400022,48.9162426],[15.7145553,48.8670572],[15.8342488,48.880178],[15.968904,48.8178233],[16.0885976,48.7455261],[16.3978059,48.7455261],[16.4875761,48.8145394],[16.6721036,48.7784014],[16.6820781,48.7356594],[16.9015163,48.7126294],[16.9464014,48.6237005],[17.1159672,48.8375227],[17.2107246,48.880178],[17.4052266,48.8178233],[17.4800351,48.8539329],[17.5299074,48.8178233],[17.7044605,48.8670572],[17.8141796,48.9359033],[17.8840008,48.9359033],[17.9438476,49.0210099],[18.0635412,49.0340903],[18.1184007,49.0994409],[18.1981964,49.3047337],[18.3877112,49.3339917],[18.577226,49.5091747],[18.7567663,49.4994587],[18.8465365,49.5253637],[18.8764598,49.5706645],[18.7966641,49.693412],[18.64206,49.7095399],[18.5872004,49.8351543],[18.6121366,49.8833809],[18.5622643,49.9347695],[18.512392,49.9058702],[18.362775,49.9540261],[18.3278644,49.9219275],[18.2630304,49.9732751],[18.1184007,50.0053395],[18.0635412,50.075806],[17.9139242,49.9796897],[17.779269,50.0309757],[17.714435,50.1237921],[17.6047159,50.1653411],[17.7593201,50.21962],[17.7343839,50.3439092],[17.6396265,50.2802117],[17.3802905,50.2802117],[17.3503671,50.3439092],[17.2805459,50.3375433],[17.1857885,50.4075214],[16.9015163,50.4615247],[16.8666057,50.4138779],[16.9663503,50.3184404],[17.0361715,50.2323826],[16.8366823,50.21962],[16.7120015,50.1046034],[16.5823335,50.1589513],[16.5623846,50.2387626],[16.4327166,50.3375433],[16.3529209,50.3916263],[16.2781124,50.3916263],[16.2082911,50.4456477],[16.3978059,50.5344899],[16.4476782,50.5978464],[16.3529209,50.670601],[16.2382145,50.6769221],[16.2182656,50.6326561],[16.1284954,50.6832425],[16.0486997,50.6073425],[15.988853,50.7021983],[15.8741467,50.6832425],[15.8292616,50.7653291],[15.729517,50.743243],[15.450232,50.8157725],[15.3903852,50.7747914],[15.3804108,50.8598659],[15.2956278,50.8850434],[15.2956278,50.9887568],[15.1709471,51.0201394],[14.9914067,51.0013124],[15.0063684,50.8881896],[14.8417898,50.8756034],[14.7969047,50.8252246],[14.6323261,50.8567177],[14.6622495,50.9353576],[14.5724793,50.9227841],[14.6123772,50.9856174],[14.4976708,51.0483657],[14.4178751,51.0232765],[14.3081561,51.0671736],[14.2532965,51.0044508],[14.4029134,50.9322145],[14.3729901,50.897627],[14.2433221,50.9070625],[14.2084114,50.844123],[14.0338583,50.8126214],[13.9789988,50.8252246],[13.9041903,50.7968626],[13.8742669,50.740087],[13.5351352,50.7243038],[13.530148,50.6579561],[13.4703012,50.6136722],[13.3905055,50.664279],[13.3256715,50.5883483],[13.250863,50.6105074],[13.1960035,50.5059517],[13.0513738,50.5218084],[12.9665909,50.4106997],[12.8269484,50.4710483],[12.7022676,50.4138779],[12.5077656,50.401164],[12.343187,50.2547088],[12.323238,50.1845054],[12.2484296,50.2738373],[12.1736211,50.3311765],[12.0988126,50.33436],[12.1187616,50.25152],[12.2234934,50.1653411],[12.2035445,50.1237921],[12.5027784,49.9732751],[12.4778422,49.9379795],[12.5476634,49.9155052],[12.4678677,49.8029766],[12.408021,49.7611134],[12.4828294,49.6869593],[12.5327017,49.6869593],[12.5177401,49.6288466],[12.6075102,49.5415474],[12.6723442,49.4378793],[12.8119867,49.3469896],[12.9466419,49.3437405],[13.2309141,49.1288206],[13.3256715,49.1059712],[13.4353906,49.0438984],[13.4154417,48.9948387],[13.5002246,48.949006],[13.5650586,48.9882938],[13.6847522,48.8834577],[13.7445989,48.9031312],[13.8243946,48.7751149],[13.8992031,48.7751149],[14.0587945,48.676418],[14.0438328,48.6302932],[14.1435774,48.5907241],[14.3729901,48.5610269],[14.4827091,48.6500662],[14.5774665,48.607215],[14.6273389,48.6335892],[14.7071346,48.5808269],[14.7470324,48.7027561],[14.8118664,48.7389485],[14.8168536,48.794831],[14.9864195,48.7652539],[15.0063684,49.0177392]]],"terms_url":"http://poloha.net/"},{"id":"Duna_2013","name":"Danube flood orthophoto 2013","type":"tms","template":"http://e.tile.openstreetmap.hu/dunai-arviz-2013/{zoom}/{x}/{y}.jpg","scaleExtent":[10,20],"polygon":[[[19.0773152,47.6959718],[19.0779881,47.6959835],[19.0946205,47.6944562],[19.0805603,47.595874],[19.0743376,47.5890907],[19.0795196,47.5888284],[19.07717,47.5724109],[19.0577884,47.5720924],[19.0773152,47.6959718]]],"terms_url":"http://fototerkep.hu/","terms_text":"Fotótérkép.hu"},{"id":"Delaware2012Orthophotography","name":"Delaware 2012 Orthophotography","type":"tms","template":"http://whoots.mapwarper.net/tms/{zoom}/{x}/{y}/0/https://firstmap.delaware.gov/arcgis/services/DE_Imagery/DE_Imagery_2012/ImageServer/WMSServer","description":"This data set consists of 0.3-meter pixel resolution (approximately 1-foot), 4-band true color and near infrared (R, G, B, IR) orthoimages covering New Castle, Kent and Sussex Counties in Delaware.","polygon":[[[-75.01770587603,38.45188674427],[-75.74173524589,38.4499581145],[-75.80699639658,39.73907123636],[-75.75558784863,39.80106251053],[-75.64692187603,39.8563815616],[-75.47114773904,39.84645578141],[-75.37725787603,39.81477822231],[-75.48746302671,39.6718115509],[-75.50901151986,39.43446011595],[-75.39326532808,39.27784018498],[-75.30707135548,39.01666513594],[-75.1931721774,38.82218696272],[-75.05341480753,38.80875503297],[-75.01770587603,38.45188674427]]],"terms_url":"https://firstmap.delaware.gov/arcgis/rest/services/DE_Imagery/DE_Imagery_2012/ImageServer","terms_text":"Digital Aerial Solutions, LLC"},{"id":"DigitalGlobe-Premium","name":"DigitalGlobe Premium Imagery","type":"tms","template":"https://{switch:a,b,c}.tiles.mapbox.com/v4/digitalglobe.316c9a2e/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqM293YnJ5MTAwajIzMnF0bmV4dnV1MW4ifQ.psvzzOez33BOH8xmRiJZWg","scaleExtent":[0,19],"terms_url":"https://wiki.openstreetmap.org/wiki/DigitalGlobe","terms_text":"Terms & Feedback","default":true},{"id":"DigitalGlobe-Standard","name":"DigitalGlobe Standard Imagery","type":"tms","template":"https://{switch:a,b,c}.tiles.mapbox.com/v4/digitalglobe.0a8e44ba/{zoom}/{x}/{y}.png?access_token=pk.eyJ1IjoiZGlnaXRhbGdsb2JlIiwiYSI6ImNqM293Y3Y5ZjAwaWgycW55ZXFncHk0a3QifQ.6Kprj_J4oDmXqV97RricwA","scaleExtent":[0,19],"terms_url":"https://wiki.openstreetmap.org/wiki/DigitalGlobe","terms_text":"Terms & Feedback","default":true},{"id":"maaamet.ee-orto","name":"Estonia Ortho (Maaamet)","type":"tms","template":"http://kaart.maakaart.ee/orto/{zoom}/{x}/{y}.jpeg","scaleExtent":[14,20],"polygon":[[[21.6940073,57.5025466],[21.6940073,59.8274564],[28.2110546,59.8274564],[28.2110546,57.5025466],[21.6940073,57.5025466]]],"terms_text":"Maa-Ameti ortofoto"},{"id":"FOMI_2000","name":"FÖMI orthophoto 2000","type":"tms","template":"http://e.tile.openstreetmap.hu/ortofoto2000/{zoom}/{x}/{y}.jpg","scaleExtent":[0,17],"polygon":[[[16.1139147,46.8691038],[16.1789749,46.90662],[16.2000429,46.9415079],[16.2217547,46.9355441],[16.2462784,46.9463851],[16.2553226,46.9642125],[16.2764694,46.9626082],[16.290583,47.0139849],[16.3016199,46.9992329],[16.3414618,46.9965225],[16.3505162,47.0106313],[16.3734016,46.9985929],[16.412765,47.00475],[16.4332705,46.9927417],[16.4478119,47.003893],[16.479997,46.9941169],[16.5121988,47.0011695],[16.4635584,47.0322699],[16.4478586,47.0227481],[16.439123,47.029663],[16.445673,47.038872],[16.520323,47.056103],[16.473213,47.0736169],[16.4637199,47.09392],[16.500798,47.110058],[16.500035,47.123295],[16.5295349,47.1287419],[16.5171609,47.1496938],[16.454951,47.1425878],[16.4648728,47.1683349],[16.4555643,47.1875584],[16.4305559,47.1847022],[16.4195013,47.1949147],[16.4189215,47.2107114],[16.4371293,47.2097043],[16.4426335,47.2337117],[16.4313127,47.2527554],[16.4671512,47.2531652],[16.4892319,47.2798885],[16.4646338,47.3338455],[16.4337002,47.3528101],[16.458513,47.3670496],[16.4454619,47.4070195],[16.4831657,47.4093628],[16.4963821,47.3892659],[16.5170941,47.4100218],[16.5749054,47.4054243],[16.5807291,47.4191699],[16.661847,47.455595],[16.6706419,47.47422],[16.6523395,47.500342],[16.6895619,47.510161],[16.7147797,47.540199],[16.663545,47.567733],[16.673199,47.6049544],[16.6595343,47.6061018],[16.652758,47.622852],[16.6314207,47.6283176],[16.5739108,47.619667],[16.5147382,47.6461964],[16.4967504,47.6393149],[16.425464,47.6621679],[16.4437449,47.674205],[16.4480507,47.6964725],[16.4746984,47.6811576],[16.4872245,47.6979767],[16.5521729,47.7225519],[16.5363779,47.736785],[16.5479799,47.751544],[16.6095193,47.7603722],[16.6344148,47.7590843],[16.65729,47.7414879],[16.7209405,47.7353565],[16.7534062,47.6828165],[16.8301587,47.681058],[16.8394284,47.7045139],[16.8668943,47.7211462],[16.876679,47.6876452],[17.0937421,47.7077706],[17.0706562,47.7285366],[17.0516019,47.7938499],[17.0749479,47.8084997],[17.047139,47.8285635],[17.0519452,47.8377691],[17.0105513,47.8581765],[17.0163878,47.8673325],[17.0857537,47.8746239],[17.113171,47.9271605],[17.0917133,47.9342916],[17.1183782,47.9601083],[17.094657,47.9708775],[17.2010289,48.019992],[17.241769,48.0224651],[17.257955,47.998655],[17.334651,47.993125],[17.4029929,47.947849],[17.4539199,47.8852579],[17.5267369,47.865509],[17.5675779,47.8151289],[17.608402,47.8218859],[17.7085789,47.756678],[17.7798739,47.739487],[17.8660959,47.74575],[17.9001292,47.7392633],[17.946867,47.744668],[17.9708709,47.7578392],[18.0044103,47.7463402],[18.0380583,47.7576812],[18.2958774,47.7314616],[18.4540681,47.7651226],[18.4931553,47.7527552],[18.5590761,47.7659963],[18.6460866,47.7590921],[18.7260691,47.7890411],[18.7411784,47.8138245],[18.7920013,47.8230869],[18.8485417,47.8167221],[18.855876,47.826077],[18.828014,47.834291],[18.8135749,47.85555],[18.76353,47.8716049],[18.756858,47.896838],[18.776746,47.955092],[18.7552499,47.9763469],[18.8157429,47.993442],[18.819998,48.039676],[18.833268,48.048239],[18.8749364,48.0470707],[18.886674,48.058682],[18.9089819,48.051139],[18.9439039,48.058865],[18.9816099,48.0536009],[19.0148639,48.078179],[19.0585249,48.0573529],[19.0843619,48.072781],[19.107402,48.065596],[19.1352889,48.074146],[19.2413679,48.0536529],[19.2557819,48.0715559],[19.3031119,48.088711],[19.3865969,48.091914],[19.400018,48.082304],[19.454053,48.101436],[19.467354,48.083933],[19.4944199,48.109906],[19.492377,48.1396639],[19.5128219,48.154663],[19.504518,48.173443],[19.528967,48.190358],[19.526044,48.20313],[19.577502,48.2160149],[19.6308263,48.2500725],[19.6445239,48.2391719],[19.669857,48.239212],[19.691219,48.203894],[19.721125,48.201473],[19.74618,48.2165119],[19.7871629,48.19253],[19.7987329,48.19482],[19.8052829,48.183733],[19.782415,48.165039],[19.794812,48.153529],[19.821331,48.169081],[19.8452819,48.162742],[19.8551729,48.178431],[19.8601309,48.169409],[19.898745,48.1663119],[19.9145359,48.146863],[19.898298,48.1249019],[19.937383,48.131118],[19.9743939,48.1660049],[19.988706,48.1621679],[20.029038,48.1776849],[20.049449,48.1671999],[20.0729859,48.179606],[20.0700369,48.1917019],[20.1340909,48.225182],[20.1331879,48.253982],[20.206162,48.250979],[20.2038299,48.261906],[20.228466,48.262779],[20.2349469,48.279933],[20.286858,48.26164],[20.3257109,48.272794],[20.3374649,48.301667],[20.3656579,48.316606],[20.384077,48.3511809],[20.4098349,48.365857],[20.402532,48.382565],[20.4205349,48.403858],[20.416228,48.418536],[20.507929,48.489363],[20.5065069,48.534415],[20.537471,48.527878],[20.5464939,48.544292],[20.586595,48.535759],[20.6538739,48.561413],[20.836359,48.58284],[20.8378,48.57421],[20.8504359,48.5816329],[20.8453301,48.5665046],[20.8681549,48.551818],[20.922323,48.559453],[20.9346349,48.538341],[20.955882,48.533963],[20.9561979,48.521666],[20.9815849,48.5177669],[21.0151139,48.532313],[21.0663209,48.525894],[21.1174479,48.4910549],[21.1608749,48.521499],[21.179634,48.518232],[21.221061,48.537497],[21.305488,48.5222489],[21.313377,48.550841],[21.326875,48.554129],[21.319384,48.561201],[21.4154499,48.558951],[21.4226649,48.578821],[21.4406099,48.585104],[21.514091,48.551065],[21.5420199,48.508395],[21.6139329,48.509416],[21.6201879,48.469826],[21.663549,48.417961],[21.6645609,48.392164],[21.7017409,48.380695],[21.711871,48.357617],[21.8174139,48.332787],[21.8352029,48.3346409],[21.837213,48.363253],[21.8842979,48.356047],[21.8848429,48.367539],[21.897883,48.36256],[21.8997959,48.3702229],[21.9281859,48.3615969],[21.9268059,48.370899],[21.949198,48.378728],[21.994463,48.377323],[22.0213259,48.392749],[22.0546049,48.377528],[22.0764859,48.387241],[22.086743,48.371564],[22.1359089,48.380519],[22.131056,48.3912329],[22.152768,48.3962409],[22.1561913,48.4093076],[22.2125722,48.4256468],[22.2371405,48.4100396],[22.2654858,48.4098675],[22.2398761,48.3870055],[22.2675722,48.3611612],[22.3178106,48.3545437],[22.3132861,48.3250712],[22.3372944,48.3079113],[22.3384267,48.2792074],[22.3847547,48.2339632],[22.4006407,48.249198],[22.4328384,48.2525166],[22.456386,48.2423109],[22.4899029,48.2534237],[22.4972201,48.2395546],[22.5161491,48.237965],[22.5311088,48.2094282],[22.5711442,48.1961428],[22.5616362,48.1816066],[22.5982449,48.144756],[22.5902763,48.1073414],[22.6754492,48.091997],[22.7347192,48.119848],[22.7576242,48.1200599],[22.7703914,48.1090162],[22.772319,48.1218742],[22.8027688,48.1221112],[22.8025285,48.1070813],[22.8254256,48.1175119],[22.8364365,48.080249],[22.8611284,48.0750312],[22.8677955,48.0524256],[22.8820424,48.0548053],[22.8659692,48.0113165],[22.835562,47.9905988],[22.8407599,47.9813636],[22.8725729,47.9752683],[22.8697274,47.9659593],[22.8915652,47.9672446],[22.897435,47.9540629],[22.8473299,47.9077579],[22.7928135,47.8908586],[22.7586924,47.8941446],[22.77775,47.8422508],[22.7136344,47.8360928],[22.6801938,47.7877527],[22.6111171,47.7717455],[22.5490018,47.7722246],[22.4812121,47.8108886],[22.4513078,47.803389],[22.4313319,47.7398119],[22.3566167,47.7486206],[22.3177714,47.7660887],[22.3176236,47.7433657],[22.2851369,47.7292757],[22.264325,47.7310675],[22.2589955,47.6979057],[22.2306796,47.693196],[22.1796501,47.5916115],[22.1289245,47.5978984],[22.0942787,47.5583628],[22.0782587,47.5621299],[22.0534529,47.5474795],[22.0712176,47.5380742],[22.0617872,47.5288029],[22.0451278,47.5398919],[22.0367222,47.5326653],[22.0071886,47.48362],[22.0327909,47.4508372],[22.0238835,47.3908631],[22.0119849,47.3758016],[21.9627373,47.381053],[21.9382461,47.3725317],[21.8777922,47.2857763],[21.8872845,47.2730473],[21.8534909,47.2397622],[21.8580662,47.1873597],[21.8124804,47.1667511],[21.7924092,47.1059751],[21.7268258,47.0983882],[21.6976037,47.057915],[21.6504151,47.0408303],[21.6888701,47.0019977],[21.6678744,46.9712337],[21.6814917,46.9652089],[21.6381964,46.9330487],[21.5984455,46.9274708],[21.6142857,46.8867275],[21.6016694,46.8668202],[21.520328,46.8373749],[21.5186086,46.8000703],[21.4831761,46.7650246],[21.5263389,46.7393249],[21.529369,46.7209721],[21.4923253,46.6859652],[21.4728438,46.6959075],[21.4299047,46.693937],[21.4309553,46.6781367],[21.4546661,46.660863],[21.4162375,46.6426231],[21.4097959,46.6218052],[21.3657038,46.6379501],[21.3300499,46.6318155],[21.3139733,46.617666],[21.3012351,46.5908672],[21.3207905,46.5828562],[21.2743045,46.5407362],[21.2600254,46.5021583],[21.2744188,46.4767333],[21.2964506,46.4762973],[21.3174343,46.4507288],[21.2895176,46.4154784],[21.2963256,46.4069601],[21.2250116,46.4136899],[21.2064214,46.4033825],[21.1992563,46.3479034],[21.1762269,46.3357664],[21.180497,46.3044494],[21.1155437,46.3018529],[21.1030549,46.2624637],[21.0708792,46.2539014],[21.0660827,46.2429394],[21.0366237,46.2480392],[21.0246723,46.2665329],[20.960817,46.2623039],[20.9465849,46.2793024],[20.9250701,46.2766191],[20.9218133,46.2618129],[20.8732713,46.2877555],[20.7756538,46.2759602],[20.7490474,46.2508489],[20.7618619,46.204563],[20.727401,46.2077485],[20.7341052,46.1939355],[20.7140487,46.1660531],[20.6843592,46.1447802],[20.6549178,46.1497739],[20.6394471,46.1267602],[20.5450486,46.1790935],[20.5014839,46.190334],[20.4949436,46.1709908],[20.4592293,46.1428837],[20.3975133,46.1574709],[20.3685325,46.1528554],[20.3557074,46.1696256],[20.2968136,46.1521542],[20.2549024,46.1158522],[20.2484757,46.1300956],[20.2330132,46.1241668],[20.1817362,46.1601137],[20.1364966,46.1449476],[20.1009667,46.1772756],[20.0636156,46.1437275],[20.0346142,46.1458888],[20.0158072,46.1768354],[19.9354075,46.1764243],[19.8533469,46.1500005],[19.8179747,46.1281652],[19.7585403,46.1479754],[19.6982054,46.1879317],[19.6827672,46.1800388],[19.661508,46.1904394],[19.6317396,46.1692993],[19.5676482,46.179106],[19.5604013,46.1665762],[19.5026585,46.1424492],[19.5271208,46.1210269],[19.4645033,46.0953827],[19.4665828,46.0820437],[19.4160037,46.0460453],[19.3803957,46.0358749],[19.3640923,46.0522965],[19.2819012,46.0148048],[19.2965348,45.9881173],[19.2856472,45.9968981],[19.1479857,45.9963445],[19.1338422,46.0370993],[19.104873,46.0401673],[19.0660427,46.0001999],[19.0796791,45.9636376],[19.0059803,45.9590674],[19.0092745,45.9236559],[18.9061334,45.9353801],[18.8794572,45.9166827],[18.8647137,45.9208493],[18.8685629,45.9113361],[18.8276792,45.9051714],[18.8220041,45.9145893],[18.8075092,45.9036055],[18.809247,45.8796189],[18.7956242,45.8784488],[18.7048857,45.9181883],[18.6700246,45.9108439],[18.6596602,45.9168934],[18.6651348,45.899279],[18.6412808,45.8890396],[18.6550179,45.8742393],[18.6277704,45.8733782],[18.6148449,45.8531438],[18.6236656,45.8398531],[18.5732391,45.8137578],[18.5749849,45.8004344],[18.559716,45.8037961],[18.5223504,45.7826858],[18.4906706,45.7947167],[18.4821905,45.7655032],[18.4562828,45.7695229],[18.4450763,45.7605195],[18.446853,45.737128],[18.40763,45.7397119],[18.3918949,45.7616983],[18.3642257,45.7729364],[18.3394214,45.7471605],[18.2968157,45.7612196],[18.2440473,45.7612305],[18.2307311,45.7790328],[18.1908702,45.7878759],[18.1681939,45.7762712],[18.1246514,45.7896277],[18.1068067,45.7708256],[18.0818922,45.7645205],[17.9958808,45.7957311],[17.9302095,45.7863301],[17.9066757,45.7925692],[17.8653145,45.7670064],[17.8262748,45.8099957],[17.8089784,45.8040989],[17.7809054,45.8174884],[17.7603399,45.811923],[17.7408624,45.8295975],[17.6632915,45.8381849],[17.6276211,45.8979446],[17.5700676,45.9358204],[17.4378254,45.9503823],[17.4258964,45.9272681],[17.4108059,45.9399665],[17.392149,45.9302149],[17.3828713,45.9475733],[17.3476208,45.9423413],[17.3438769,45.9605329],[17.3537711,45.9525011],[17.3905375,45.9581914],[17.387423,45.9661823],[17.3583539,45.9642737],[17.3754852,45.9686921],[17.3751895,45.9881054],[17.3635685,45.9915442],[17.3567202,45.9735836],[17.3339583,45.9960781],[17.3319847,45.9728948],[17.3129974,45.9665347],[17.323647,45.9887776],[17.2987653,45.9838652],[17.3041996,46.0021128],[17.2579726,46.0110256],[17.29632,46.0285169],[17.2541514,46.030005],[17.270955,46.0567055],[17.2324767,46.0592034],[17.2525145,46.0664725],[17.2313144,46.0790345],[17.2019916,46.0765488],[17.2331299,46.0989644],[17.2104017,46.1001693],[17.2129734,46.113855],[17.175927,46.1084583],[17.1743424,46.1287608],[17.1865197,46.1332308],[17.1810983,46.1505485],[17.1562307,46.1585819],[17.1592857,46.1696818],[17.1261012,46.1684495],[17.1227409,46.1789791],[17.0752482,46.1889531],[17.0661614,46.2022984],[16.9735401,46.2251982],[16.973954,46.2431113],[16.9504085,46.2415285],[16.8862356,46.2814598],[16.8713682,46.3252767],[16.8802109,46.3356966],[16.8615374,46.3452401],[16.8656232,46.3556489],[16.8521959,46.3517189],[16.8498589,46.3626245],[16.8352859,46.3638195],[16.8376499,46.3748032],[16.8261732,46.3670994],[16.7933444,46.387385],[16.7592072,46.3776563],[16.7298672,46.40149],[16.7182119,46.3898704],[16.6772872,46.4494536],[16.6631785,46.4486958],[16.6663732,46.4582995],[16.6187915,46.4619875],[16.604468,46.4760773],[16.5235997,46.5053761],[16.5325768,46.5314027],[16.5176728,46.5363516],[16.5084107,46.5652692],[16.4829969,46.5660383],[16.4834008,46.5786011],[16.4455713,46.610952],[16.4248583,46.6131645],[16.385941,46.6442485],[16.3915424,46.6637257],[16.4198454,46.6584771],[16.4286335,46.6939737],[16.3689211,46.7040082],[16.3798266,46.7153869],[16.3710856,46.7222945],[16.3570587,46.7142387],[16.3185954,46.7541449],[16.3305417,46.7752119],[16.3121626,46.7780033],[16.3127666,46.797314],[16.3406373,46.8051851],[16.3508404,46.8300552],[16.3403309,46.8468762],[16.3015007,46.8595142],[16.2913867,46.8728341],[16.2332296,46.8766702],[16.1560866,46.8537074],[16.126571,46.8569079],[16.1139147,46.8691038]]],"terms_url":"http://www.fomi.hu/","terms_text":"Földmérési és Távérzékelési Intézet"},{"id":"FOMI_2005","name":"FÖMI orthophoto 2005","type":"tms","template":"http://e.tile.openstreetmap.hu/ortofoto2005/{zoom}/{x}/{y}.jpg","scaleExtent":[0,17],"polygon":[[[16.1139147,46.8691038],[16.1789749,46.90662],[16.2000429,46.9415079],[16.2217547,46.9355441],[16.2462784,46.9463851],[16.2553226,46.9642125],[16.2764694,46.9626082],[16.290583,47.0139849],[16.3016199,46.9992329],[16.3414618,46.9965225],[16.3505162,47.0106313],[16.3734016,46.9985929],[16.412765,47.00475],[16.4332705,46.9927417],[16.4478119,47.003893],[16.479997,46.9941169],[16.5121988,47.0011695],[16.4635584,47.0322699],[16.4478586,47.0227481],[16.439123,47.029663],[16.445673,47.038872],[16.520323,47.056103],[16.473213,47.0736169],[16.4637199,47.09392],[16.500798,47.110058],[16.500035,47.123295],[16.5295349,47.1287419],[16.5171609,47.1496938],[16.454951,47.1425878],[16.4648728,47.1683349],[16.4555643,47.1875584],[16.4305559,47.1847022],[16.4195013,47.1949147],[16.4189215,47.2107114],[16.4371293,47.2097043],[16.4426335,47.2337117],[16.4313127,47.2527554],[16.4671512,47.2531652],[16.4892319,47.2798885],[16.4646338,47.3338455],[16.4337002,47.3528101],[16.458513,47.3670496],[16.4454619,47.4070195],[16.4831657,47.4093628],[16.4963821,47.3892659],[16.5170941,47.4100218],[16.5749054,47.4054243],[16.5807291,47.4191699],[16.661847,47.455595],[16.6706419,47.47422],[16.6523395,47.500342],[16.6895619,47.510161],[16.7147797,47.540199],[16.663545,47.567733],[16.673199,47.6049544],[16.6595343,47.6061018],[16.652758,47.622852],[16.6314207,47.6283176],[16.5739108,47.619667],[16.5147382,47.6461964],[16.4967504,47.6393149],[16.425464,47.6621679],[16.4437449,47.674205],[16.4480507,47.6964725],[16.4746984,47.6811576],[16.4872245,47.6979767],[16.5521729,47.7225519],[16.5363779,47.736785],[16.5479799,47.751544],[16.6095193,47.7603722],[16.6344148,47.7590843],[16.65729,47.7414879],[16.7209405,47.7353565],[16.7534062,47.6828165],[16.8301587,47.681058],[16.8394284,47.7045139],[16.8668943,47.7211462],[16.876679,47.6876452],[17.0937421,47.7077706],[17.0706562,47.7285366],[17.0516019,47.7938499],[17.0749479,47.8084997],[17.047139,47.8285635],[17.0519452,47.8377691],[17.0105513,47.8581765],[17.0163878,47.8673325],[17.0857537,47.8746239],[17.113171,47.9271605],[17.0917133,47.9342916],[17.1183782,47.9601083],[17.094657,47.9708775],[17.2010289,48.019992],[17.241769,48.0224651],[17.257955,47.998655],[17.334651,47.993125],[17.4029929,47.947849],[17.4539199,47.8852579],[17.5267369,47.865509],[17.5675779,47.8151289],[17.608402,47.8218859],[17.7085789,47.756678],[17.7798739,47.739487],[17.8660959,47.74575],[17.9001292,47.7392633],[17.946867,47.744668],[17.9708709,47.7578392],[18.0044103,47.7463402],[18.0380583,47.7576812],[18.2958774,47.7314616],[18.4540681,47.7651226],[18.4931553,47.7527552],[18.5590761,47.7659963],[18.6460866,47.7590921],[18.7260691,47.7890411],[18.7411784,47.8138245],[18.7920013,47.8230869],[18.8485417,47.8167221],[18.855876,47.826077],[18.828014,47.834291],[18.8135749,47.85555],[18.76353,47.8716049],[18.756858,47.896838],[18.776746,47.955092],[18.7552499,47.9763469],[18.8157429,47.993442],[18.819998,48.039676],[18.833268,48.048239],[18.8749364,48.0470707],[18.886674,48.058682],[18.9089819,48.051139],[18.9439039,48.058865],[18.9816099,48.0536009],[19.0148639,48.078179],[19.0585249,48.0573529],[19.0843619,48.072781],[19.107402,48.065596],[19.1352889,48.074146],[19.2413679,48.0536529],[19.2557819,48.0715559],[19.3031119,48.088711],[19.3865969,48.091914],[19.400018,48.082304],[19.454053,48.101436],[19.467354,48.083933],[19.4944199,48.109906],[19.492377,48.1396639],[19.5128219,48.154663],[19.504518,48.173443],[19.528967,48.190358],[19.526044,48.20313],[19.577502,48.2160149],[19.6308263,48.2500725],[19.6445239,48.2391719],[19.669857,48.239212],[19.691219,48.203894],[19.721125,48.201473],[19.74618,48.2165119],[19.7871629,48.19253],[19.7987329,48.19482],[19.8052829,48.183733],[19.782415,48.165039],[19.794812,48.153529],[19.821331,48.169081],[19.8452819,48.162742],[19.8551729,48.178431],[19.8601309,48.169409],[19.898745,48.1663119],[19.9145359,48.146863],[19.898298,48.1249019],[19.937383,48.131118],[19.9743939,48.1660049],[19.988706,48.1621679],[20.029038,48.1776849],[20.049449,48.1671999],[20.0729859,48.179606],[20.0700369,48.1917019],[20.1340909,48.225182],[20.1331879,48.253982],[20.206162,48.250979],[20.2038299,48.261906],[20.228466,48.262779],[20.2349469,48.279933],[20.286858,48.26164],[20.3257109,48.272794],[20.3374649,48.301667],[20.3656579,48.316606],[20.384077,48.3511809],[20.4098349,48.365857],[20.402532,48.382565],[20.4205349,48.403858],[20.416228,48.418536],[20.507929,48.489363],[20.5065069,48.534415],[20.537471,48.527878],[20.5464939,48.544292],[20.586595,48.535759],[20.6538739,48.561413],[20.836359,48.58284],[20.8378,48.57421],[20.8504359,48.5816329],[20.8453301,48.5665046],[20.8681549,48.551818],[20.922323,48.559453],[20.9346349,48.538341],[20.955882,48.533963],[20.9561979,48.521666],[20.9815849,48.5177669],[21.0151139,48.532313],[21.0663209,48.525894],[21.1174479,48.4910549],[21.1608749,48.521499],[21.179634,48.518232],[21.221061,48.537497],[21.305488,48.5222489],[21.313377,48.550841],[21.326875,48.554129],[21.319384,48.561201],[21.4154499,48.558951],[21.4226649,48.578821],[21.4406099,48.585104],[21.514091,48.551065],[21.5420199,48.508395],[21.6139329,48.509416],[21.6201879,48.469826],[21.663549,48.417961],[21.6645609,48.392164],[21.7017409,48.380695],[21.711871,48.357617],[21.8174139,48.332787],[21.8352029,48.3346409],[21.837213,48.363253],[21.8842979,48.356047],[21.8848429,48.367539],[21.897883,48.36256],[21.8997959,48.3702229],[21.9281859,48.3615969],[21.9268059,48.370899],[21.949198,48.378728],[21.994463,48.377323],[22.0213259,48.392749],[22.0546049,48.377528],[22.0764859,48.387241],[22.086743,48.371564],[22.1359089,48.380519],[22.131056,48.3912329],[22.152768,48.3962409],[22.1561913,48.4093076],[22.2125722,48.4256468],[22.2371405,48.4100396],[22.2654858,48.4098675],[22.2398761,48.3870055],[22.2675722,48.3611612],[22.3178106,48.3545437],[22.3132861,48.3250712],[22.3372944,48.3079113],[22.3384267,48.2792074],[22.3847547,48.2339632],[22.4006407,48.249198],[22.4328384,48.2525166],[22.456386,48.2423109],[22.4899029,48.2534237],[22.4972201,48.2395546],[22.5161491,48.237965],[22.5311088,48.2094282],[22.5711442,48.1961428],[22.5616362,48.1816066],[22.5982449,48.144756],[22.5902763,48.1073414],[22.6754492,48.091997],[22.7347192,48.119848],[22.7576242,48.1200599],[22.7703914,48.1090162],[22.772319,48.1218742],[22.8027688,48.1221112],[22.8025285,48.1070813],[22.8254256,48.1175119],[22.8364365,48.080249],[22.8611284,48.0750312],[22.8677955,48.0524256],[22.8820424,48.0548053],[22.8659692,48.0113165],[22.835562,47.9905988],[22.8407599,47.9813636],[22.8725729,47.9752683],[22.8697274,47.9659593],[22.8915652,47.9672446],[22.897435,47.9540629],[22.8473299,47.9077579],[22.7928135,47.8908586],[22.7586924,47.8941446],[22.77775,47.8422508],[22.7136344,47.8360928],[22.6801938,47.7877527],[22.6111171,47.7717455],[22.5490018,47.7722246],[22.4812121,47.8108886],[22.4513078,47.803389],[22.4313319,47.7398119],[22.3566167,47.7486206],[22.3177714,47.7660887],[22.3176236,47.7433657],[22.2851369,47.7292757],[22.264325,47.7310675],[22.2589955,47.6979057],[22.2306796,47.693196],[22.1796501,47.5916115],[22.1289245,47.5978984],[22.0942787,47.5583628],[22.0782587,47.5621299],[22.0534529,47.5474795],[22.0712176,47.5380742],[22.0617872,47.5288029],[22.0451278,47.5398919],[22.0367222,47.5326653],[22.0071886,47.48362],[22.0327909,47.4508372],[22.0238835,47.3908631],[22.0119849,47.3758016],[21.9627373,47.381053],[21.9382461,47.3725317],[21.8777922,47.2857763],[21.8872845,47.2730473],[21.8534909,47.2397622],[21.8580662,47.1873597],[21.8124804,47.1667511],[21.7924092,47.1059751],[21.7268258,47.0983882],[21.6976037,47.057915],[21.6504151,47.0408303],[21.6888701,47.0019977],[21.6678744,46.9712337],[21.6814917,46.9652089],[21.6381964,46.9330487],[21.5984455,46.9274708],[21.6142857,46.8867275],[21.6016694,46.8668202],[21.520328,46.8373749],[21.5186086,46.8000703],[21.4831761,46.7650246],[21.5263389,46.7393249],[21.529369,46.7209721],[21.4923253,46.6859652],[21.4728438,46.6959075],[21.4299047,46.693937],[21.4309553,46.6781367],[21.4546661,46.660863],[21.4162375,46.6426231],[21.4097959,46.6218052],[21.3657038,46.6379501],[21.3300499,46.6318155],[21.3139733,46.617666],[21.3012351,46.5908672],[21.3207905,46.5828562],[21.2743045,46.5407362],[21.2600254,46.5021583],[21.2744188,46.4767333],[21.2964506,46.4762973],[21.3174343,46.4507288],[21.2895176,46.4154784],[21.2963256,46.4069601],[21.2250116,46.4136899],[21.2064214,46.4033825],[21.1992563,46.3479034],[21.1762269,46.3357664],[21.180497,46.3044494],[21.1155437,46.3018529],[21.1030549,46.2624637],[21.0708792,46.2539014],[21.0660827,46.2429394],[21.0366237,46.2480392],[21.0246723,46.2665329],[20.960817,46.2623039],[20.9465849,46.2793024],[20.9250701,46.2766191],[20.9218133,46.2618129],[20.8732713,46.2877555],[20.7756538,46.2759602],[20.7490474,46.2508489],[20.7618619,46.204563],[20.727401,46.2077485],[20.7341052,46.1939355],[20.7140487,46.1660531],[20.6843592,46.1447802],[20.6549178,46.1497739],[20.6394471,46.1267602],[20.5450486,46.1790935],[20.5014839,46.190334],[20.4949436,46.1709908],[20.4592293,46.1428837],[20.3975133,46.1574709],[20.3685325,46.1528554],[20.3557074,46.1696256],[20.2968136,46.1521542],[20.2549024,46.1158522],[20.2484757,46.1300956],[20.2330132,46.1241668],[20.1817362,46.1601137],[20.1364966,46.1449476],[20.1009667,46.1772756],[20.0636156,46.1437275],[20.0346142,46.1458888],[20.0158072,46.1768354],[19.9354075,46.1764243],[19.8533469,46.1500005],[19.8179747,46.1281652],[19.7585403,46.1479754],[19.6982054,46.1879317],[19.6827672,46.1800388],[19.661508,46.1904394],[19.6317396,46.1692993],[19.5676482,46.179106],[19.5604013,46.1665762],[19.5026585,46.1424492],[19.5271208,46.1210269],[19.4645033,46.0953827],[19.4665828,46.0820437],[19.4160037,46.0460453],[19.3803957,46.0358749],[19.3640923,46.0522965],[19.2819012,46.0148048],[19.2965348,45.9881173],[19.2856472,45.9968981],[19.1479857,45.9963445],[19.1338422,46.0370993],[19.104873,46.0401673],[19.0660427,46.0001999],[19.0796791,45.9636376],[19.0059803,45.9590674],[19.0092745,45.9236559],[18.9061334,45.9353801],[18.8794572,45.9166827],[18.8647137,45.9208493],[18.8685629,45.9113361],[18.8276792,45.9051714],[18.8220041,45.9145893],[18.8075092,45.9036055],[18.809247,45.8796189],[18.7956242,45.8784488],[18.7048857,45.9181883],[18.6700246,45.9108439],[18.6596602,45.9168934],[18.6651348,45.899279],[18.6412808,45.8890396],[18.6550179,45.8742393],[18.6277704,45.8733782],[18.6148449,45.8531438],[18.6236656,45.8398531],[18.5732391,45.8137578],[18.5749849,45.8004344],[18.559716,45.8037961],[18.5223504,45.7826858],[18.4906706,45.7947167],[18.4821905,45.7655032],[18.4562828,45.7695229],[18.4450763,45.7605195],[18.446853,45.737128],[18.40763,45.7397119],[18.3918949,45.7616983],[18.3642257,45.7729364],[18.3394214,45.7471605],[18.2968157,45.7612196],[18.2440473,45.7612305],[18.2307311,45.7790328],[18.1908702,45.7878759],[18.1681939,45.7762712],[18.1246514,45.7896277],[18.1068067,45.7708256],[18.0818922,45.7645205],[17.9958808,45.7957311],[17.9302095,45.7863301],[17.9066757,45.7925692],[17.8653145,45.7670064],[17.8262748,45.8099957],[17.8089784,45.8040989],[17.7809054,45.8174884],[17.7603399,45.811923],[17.7408624,45.8295975],[17.6632915,45.8381849],[17.6276211,45.8979446],[17.5700676,45.9358204],[17.4378254,45.9503823],[17.4258964,45.9272681],[17.4108059,45.9399665],[17.392149,45.9302149],[17.3828713,45.9475733],[17.3476208,45.9423413],[17.3438769,45.9605329],[17.3537711,45.9525011],[17.3905375,45.9581914],[17.387423,45.9661823],[17.3583539,45.9642737],[17.3754852,45.9686921],[17.3751895,45.9881054],[17.3635685,45.9915442],[17.3567202,45.9735836],[17.3339583,45.9960781],[17.3319847,45.9728948],[17.3129974,45.9665347],[17.323647,45.9887776],[17.2987653,45.9838652],[17.3041996,46.0021128],[17.2579726,46.0110256],[17.29632,46.0285169],[17.2541514,46.030005],[17.270955,46.0567055],[17.2324767,46.0592034],[17.2525145,46.0664725],[17.2313144,46.0790345],[17.2019916,46.0765488],[17.2331299,46.0989644],[17.2104017,46.1001693],[17.2129734,46.113855],[17.175927,46.1084583],[17.1743424,46.1287608],[17.1865197,46.1332308],[17.1810983,46.1505485],[17.1562307,46.1585819],[17.1592857,46.1696818],[17.1261012,46.1684495],[17.1227409,46.1789791],[17.0752482,46.1889531],[17.0661614,46.2022984],[16.9735401,46.2251982],[16.973954,46.2431113],[16.9504085,46.2415285],[16.8862356,46.2814598],[16.8713682,46.3252767],[16.8802109,46.3356966],[16.8615374,46.3452401],[16.8656232,46.3556489],[16.8521959,46.3517189],[16.8498589,46.3626245],[16.8352859,46.3638195],[16.8376499,46.3748032],[16.8261732,46.3670994],[16.7933444,46.387385],[16.7592072,46.3776563],[16.7298672,46.40149],[16.7182119,46.3898704],[16.6772872,46.4494536],[16.6631785,46.4486958],[16.6663732,46.4582995],[16.6187915,46.4619875],[16.604468,46.4760773],[16.5235997,46.5053761],[16.5325768,46.5314027],[16.5176728,46.5363516],[16.5084107,46.5652692],[16.4829969,46.5660383],[16.4834008,46.5786011],[16.4455713,46.610952],[16.4248583,46.6131645],[16.385941,46.6442485],[16.3915424,46.6637257],[16.4198454,46.6584771],[16.4286335,46.6939737],[16.3689211,46.7040082],[16.3798266,46.7153869],[16.3710856,46.7222945],[16.3570587,46.7142387],[16.3185954,46.7541449],[16.3305417,46.7752119],[16.3121626,46.7780033],[16.3127666,46.797314],[16.3406373,46.8051851],[16.3508404,46.8300552],[16.3403309,46.8468762],[16.3015007,46.8595142],[16.2913867,46.8728341],[16.2332296,46.8766702],[16.1560866,46.8537074],[16.126571,46.8569079],[16.1139147,46.8691038]]],"terms_url":"http://www.fomi.hu/","terms_text":"Földmérési és Távérzékelési Intézet"},{"id":"FR-BAN","name":"FR-BAN","type":"tms","template":"http://{switch:a,b,c}.layers.openstreetmap.fr/bano/{zoom}/{x}/{y}.png","description":"French address registry or Base Adresses Nationale","scaleExtent":[12,20],"polygon":[[[8.3247852,49.0891892],[6.1566882,49.6167369],[4.8666714,50.2126152],[2.4937064,51.1761675],[1.3121526,50.9324682],[1.2659981,50.1877492],[0.1121369,49.8258592],[-0.3494075,49.4312336],[-1.0232625,49.4852345],[-1.3278818,49.7901162],[-2.1032765,49.7901162],[-1.6232703,48.7420657],[-3.1002126,48.9728514],[-5.1125465,48.6811558],[-5.3525496,48.4367783],[-4.5984193,47.7194959],[-2.555398,47.0232784],[-2.4738077,46.6638823],[-1.6676954,46.1055717],[-1.334807,45.5141125],[-1.4914604,44.1627003],[-1.9940567,43.3708146],[-0.956228,42.7364747],[2.2029487,42.2841894],[3.2342502,42.5444129],[3.2407774,43.1140543],[4.0436261,43.3280964],[6.4325902,42.808345],[7.6270723,43.5934102],[7.8163619,44.1720643],[7.0396221,44.41967],[7.268075,45.4958141],[7.1244761,46.2140775],[6.5631347,46.771283],[7.6571492,47.59128],[7.6527839,47.5941813],[7.6224698,47.5776739],[7.6047297,47.578221],[7.5877054,47.5901532],[7.521558,47.65161],[7.503992,47.70235],[7.520958,47.77685],[7.557124,47.84839],[7.549463,47.879205],[7.574615,47.93028],[7.613179,47.96804],[7.611904,47.9871],[7.5612401,48.0383618],[7.574915,48.1258],[7.595338,48.15977],[7.633047,48.19717],[7.662748,48.22473],[7.684659,48.30305],[7.763463,48.49158],[7.8004602,48.5125977],[7.799582,48.5878],[7.834088,48.64439],[7.9121073,48.6889897],[7.9672295,48.7571585],[8.020692,48.78879],[8.043024,48.7956],[8.0864658,48.8130551],[8.1364418,48.8978239],[8.1970586,48.96021],[8.2816129,48.9948995],[8.2996723,49.025966],[8.3124269,49.0599642],[8.3247852,49.0891892]],[[9.3609615,43.1345098],[8.4393174,42.48439],[8.4836272,41.8175373],[8.8469677,41.3768281],[9.2058772,41.3136241],[9.48946,41.5461776],[9.6356823,42.1994563],[9.6046655,42.901254],[9.3609615,43.1345098]]],"terms_url":"https://wiki.openstreetmap.org/wiki/WikiProject_France/WikiProject_Base_Adresses_Nationale_Ouverte_(BANO)","terms_text":"Tiles © cquest@Openstreetmap France, data © OpenStreetMap contributors, ODBL"},{"id":"FR-Cadastre","name":"FR-Cadastre","type":"tms","template":"http://tms.cadastre.openstreetmap.fr/*/tout/{zoom}/{x}/{y}.png","description":"French land registry","scaleExtent":[12,20],"polygon":[[[8.3247852,49.0891892],[6.1566882,49.6167369],[4.8666714,50.2126152],[2.4937064,51.1761675],[1.3121526,50.9324682],[1.2659981,50.1877492],[0.1121369,49.8258592],[-0.3494075,49.4312336],[-1.0232625,49.4852345],[-1.3278818,49.7901162],[-2.1032765,49.7901162],[-1.6232703,48.7420657],[-3.1002126,48.9728514],[-5.1125465,48.6811558],[-5.3525496,48.4367783],[-4.5984193,47.7194959],[-2.555398,47.0232784],[-2.4738077,46.6638823],[-1.6676954,46.1055717],[-1.334807,45.5141125],[-1.4914604,44.1627003],[-1.9940567,43.3708146],[-0.956228,42.7364747],[2.2029487,42.2841894],[3.2342502,42.5444129],[3.2407774,43.1140543],[4.0436261,43.3280964],[6.4325902,42.808345],[7.6270723,43.5934102],[7.8163619,44.1720643],[7.0396221,44.41967],[7.268075,45.4958141],[7.1244761,46.2140775],[6.5631347,46.771283],[7.6571492,47.59128],[7.6527839,47.5941813],[7.6224698,47.5776739],[7.6047297,47.578221],[7.5877054,47.5901532],[7.521558,47.65161],[7.503992,47.70235],[7.520958,47.77685],[7.557124,47.84839],[7.549463,47.879205],[7.574615,47.93028],[7.613179,47.96804],[7.611904,47.9871],[7.5612401,48.0383618],[7.574915,48.1258],[7.595338,48.15977],[7.633047,48.19717],[7.662748,48.22473],[7.684659,48.30305],[7.763463,48.49158],[7.8004602,48.5125977],[7.799582,48.5878],[7.834088,48.64439],[7.9121073,48.6889897],[7.9672295,48.7571585],[8.020692,48.78879],[8.043024,48.7956],[8.0864658,48.8130551],[8.1364418,48.8978239],[8.1970586,48.96021],[8.2816129,48.9948995],[8.2996723,49.025966],[8.3124269,49.0599642],[8.3247852,49.0891892]],[[9.3609615,43.1345098],[8.4393174,42.48439],[8.4836272,41.8175373],[8.8469677,41.3768281],[9.2058772,41.3136241],[9.48946,41.5461776],[9.6356823,42.1994563],[9.6046655,42.901254],[9.3609615,43.1345098]]],"terms_url":"http://wiki.openstreetmap.org/wiki/WikiProject_Cadastre_Fran%C3%A7ais/Conditions_d%27utilisation","terms_text":"cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2015"},{"id":"Freemap.sk-Car","name":"Freemap.sk Car","type":"tms","template":"http://t{switch:1,2,3,4}.freemap.sk/A/{zoom}/{x}/{y}.jpeg","scaleExtent":[8,16],"polygon":[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],"terms_text":"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved."},{"id":"Freemap.sk-Cyclo","name":"Freemap.sk Cyclo","type":"tms","template":"http://t{switch:1,2,3,4}.freemap.sk/C/{zoom}/{x}/{y}.jpeg","scaleExtent":[8,16],"polygon":[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],"terms_text":"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved."},{"id":"Freemap.sk-Hiking","name":"Freemap.sk Hiking","type":"tms","template":"http://t{switch:1,2,3,4}.freemap.sk/T/{zoom}/{x}/{y}.jpeg","scaleExtent":[8,16],"polygon":[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],"terms_text":"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved."},{"id":"Freemap.sk-Ski","name":"Freemap.sk Ski","type":"tms","template":"http://t{switch:1,2,3,4}.freemap.sk/K/{zoom}/{x}/{y}.jpeg","scaleExtent":[8,16],"polygon":[[[19.83682,49.25529],[19.80075,49.42385],[19.60437,49.48058],[19.49179,49.63961],[19.21831,49.52604],[19.16778,49.42521],[19.00308,49.42236],[18.97611,49.5308],[18.54685,49.51425],[18.31432,49.33818],[18.15913,49.2961],[18.05564,49.11134],[17.56396,48.84938],[17.17929,48.88816],[17.058,48.81105],[16.90426,48.61947],[16.79685,48.38561],[17.06762,48.01116],[17.32787,47.97749],[17.51699,47.82535],[17.74776,47.73093],[18.29515,47.72075],[18.67959,47.75541],[18.89755,47.81203],[18.79463,47.88245],[18.84318,48.04046],[19.46212,48.05333],[19.62064,48.22938],[19.89585,48.09387],[20.33766,48.2643],[20.55395,48.52358],[20.82335,48.55714],[21.10271,48.47096],[21.45863,48.55513],[21.74536,48.31435],[22.15293,48.37179],[22.61255,49.08914],[22.09997,49.23814],[21.9686,49.36363],[21.6244,49.46989],[21.06873,49.46402],[20.94336,49.31088],[20.73052,49.44006],[20.22804,49.41714],[20.05234,49.23052],[19.83682,49.25529]]],"terms_text":"Copyright ©2007-2012 Freemap Slovakia (www.freemap.sk). Some rights reserved."},{"id":"Geoportal-PL-aerial_image","name":"Geoportal.gov.pl (Orthophotomap)","type":"tms","template":"http://wms.misek.pl/geoportal.orto/tms/{zoom}/{x}/{y}","scaleExtent":[6,24],"polygon":[[[15.9751041,54.3709213],[16.311164,54.5561775],[17.1391878,54.7845723],[18.3448458,54.9022727],[19.6613689,54.4737213],[20.2815206,54.4213456],[21.4663914,54.3406369],[22.7759855,54.3769755],[22.8625989,54.4233613],[23.2956657,54.2678633],[23.5347186,54.0955258],[23.5208604,53.9775182],[23.7183389,53.4629603],[23.9296755,53.1856735],[23.9296755,52.6887269],[23.732197,52.6067497],[23.5658994,52.5878101],[23.2090523,52.3302642],[23.1951942,52.2370089],[23.5035377,52.1860596],[23.6906226,52.0030113],[23.5970802,51.739903],[23.6629063,51.3888562],[23.9366046,50.9827781],[24.1687284,50.8604752],[24.0197534,50.8035823],[24.1098313,50.6610467],[24.0578633,50.4188439],[23.6178674,50.3083403],[22.6824431,49.5163532],[22.7378756,49.2094935],[22.9041733,49.0780441],[22.8625989,48.9940062],[22.6096878,49.0371785],[22.0761495,49.2004392],[21.8474902,49.3721872],[21.3763135,49.4488281],[21.1026153,49.3721872],[20.9120659,49.3022043],[20.6452967,49.3902311],[20.1845136,49.3315641],[20.1186875,49.2004392],[19.9419962,49.1302123],[19.765305,49.2117568],[19.7479823,49.3992506],[19.6024718,49.4150307],[19.5089294,49.5815389],[19.4292451,49.5905232],[19.2317666,49.4150307],[18.9961783,49.387976],[18.9338167,49.4916048],[18.8368097,49.4938552],[18.8021643,49.6623381],[18.6427958,49.7094091],[18.521537,49.8994693],[18.0815412,50.0109209],[17.8875272,49.9886512],[17.7385522,50.0687739],[17.6068999,50.1709584],[17.7454813,50.2153184],[17.710836,50.3017019],[17.4163505,50.2640668],[16.9486384,50.4453265],[16.8932058,50.4033889],[17.0006064,50.3105529],[17.017929,50.2241854],[16.8135215,50.186489],[16.6402948,50.0976742],[16.4324227,50.2862087],[16.1968344,50.4276731],[16.4220291,50.5885165],[16.3388803,50.6632429],[16.2280152,50.6368824],[16.0547884,50.6127057],[15.5732181,50.7641544],[15.2683391,50.8976368],[15.2440873,50.980597],[15.0292862,51.0133036],[15.0015699,50.8582883],[14.8110205,50.8735944],[14.956531,51.0721176],[15.0188926,51.2914636],[14.9392083,51.4601459],[14.7209426,51.5571799],[14.7521234,51.6260562],[14.5996839,51.8427626],[14.70362,52.0733396],[14.5581095,52.2497371],[14.5165351,52.425436],[14.6031485,52.5878101],[14.1146491,52.8208272],[14.152759,52.9733951],[14.3502374,53.0734212],[14.4229927,53.2665624],[14.1977979,53.8734759],[14.2220497,53.9958517],[15.9751041,54.3709213]]],"terms_text":"Copyright © Główny Urząd Geodezji i Kartografii.","best":true},{"id":"IBGE_DF_Addresses","name":"IBGE Distrito Federal","type":"tms","template":"https://api.mapbox.com/styles/v1/wille/cirnnxni1000jg8nfppc8g7pm/tiles/256/{zoom}/{x}/{y}?access_token=pk.eyJ1Ijoid2lsbGUiLCJhIjoicFNVWk5VWSJ9.hluCd0YGvYHNlFi_utWe2g","description":"Addresses data from IBGE","scaleExtent":[0,19],"polygon":[[[-48.2444,-16.0508],[-48.2444,-15.5005],[-47.5695,-15.5005],[-47.5695,-16.0508],[-48.2444,-16.0508]]],"overlay":true},{"id":"IBGE_Setores_Rurais","name":"IBGE Mapa de Setores Rurais","type":"tms","template":"http://{switch:a,b,c}.tiles.mapbox.com/v4/tmpsantos.i00mo1kj/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJncjlmd0t3In0.DmZsIeOW-3x-C5eX-wAqTw","scaleExtent":[0,14],"polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]]},{"id":"IBGE_Setores_Urbanos","name":"IBGE Mapa de Setores Urbanos","type":"tms","template":"http://{switch:a,b,c}.tiles.mapbox.com/v4/tmpsantos.hgda0m6h/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJncjlmd0t3In0.DmZsIeOW-3x-C5eX-wAqTw","scaleExtent":[0,19],"polygon":[[[-29.3325,2.335959],[-28.72472,2.031551],[-27.76041,-8.937033],[-27.67249,-22.20839],[-51.11495,-35.46552],[-53.39394,-33.85064],[-53.62553,-33.72493],[-53.62503,-33.15428],[-53.24498,-32.73392],[-53.65747,-32.51873],[-53.8329,-32.16592],[-54.64174,-31.55507],[-55.29638,-31.3429],[-55.57371,-30.99691],[-56.06384,-31.16749],[-56.10468,-30.86436],[-56.86862,-30.20752],[-57.39671,-30.40464],[-57.74384,-30.22142],[-55.83724,-28.16598],[-54.86969,-27.44994],[-53.9016,-27.02998],[-53.74972,-26.25781],[-53.97158,-25.74513],[-54.44723,-25.79609],[-54.67802,-25.64668],[-54.36097,-24.35145],[-54.41679,-24.06527],[-54.64355,-23.94107],[-55.22163,-24.11355],[-55.49138,-24.02797],[-55.71734,-22.68488],[-55.90555,-22.39886],[-56.45255,-22.21731],[-56.8256,-22.4002],[-57.34109,-22.34351],[-58.08472,-22.13075],[-57.95766,-20.99818],[-58.26551,-20.24147],[-58.03577,-19.95871],[-58.23083,-19.75211],[-57.64739,-18.19828],[-57.89356,-17.57377],[-58.16997,-17.53519],[-58.48825,-17.21961],[-58.57691,-16.81466],[-58.45563,-16.42158],[-60.2541,-16.32571],[-60.33481,-15.51483],[-60.67423,-15.1122],[-60.34999,-14.99707],[-60.63603,-13.84119],[-61.07283,-13.62569],[-61.9025,-13.62647],[-62.21395,-13.25048],[-62.80185,-13.10905],[-63.17194,-12.76568],[-63.74229,-12.54071],[-64.32845,-12.59578],[-65.10261,-12.0682],[-65.45781,-11.27865],[-65.41641,-9.838943],[-66.52331,-9.985873],[-67.66452,-10.80093],[-67.99778,-10.75991],[-68.52286,-11.20807],[-69.88988,-11.02776],[-70.30957,-11.1699],[-70.71896,-11.02003],[-70.68128,-9.669083],[-71.27536,-10.08971],[-72.18053,-10.09967],[-72.41623,-9.587397],[-73.29207,-9.454149],[-73.0625,-9.017267],[-73.61432,-8.40982],[-74.09056,-7.527548],[-74.03652,-7.27885],[-73.84718,-7.238285],[-73.78618,-6.774872],[-73.22362,-6.430106],[-73.33719,-6.029736],[-72.93016,-5.038711],[-71.93973,-4.425027],[-70.96802,-4.248294],[-70.79598,-4.064931],[-70.02393,-4.167345],[-69.51025,-1.134089],[-69.70776,-0.567619],[-70.13645,-0.226161],[-70.14083,0.5844],[-69.26594,0.806502],[-69.34226,0.968924],[-69.92481,1.015705],[-69.92343,1.773851],[-68.38511,1.82943],[-68.24848,2.119808],[-67.94571,1.948424],[-67.37696,2.327468],[-67.05751,1.858336],[-67.00579,1.291603],[-66.79967,1.314684],[-66.28683,0.857709],[-65.67671,1.111146],[-65.42494,0.966549],[-65.15671,1.24203],[-64.27483,1.601591],[-64.0486,2.065137],[-63.47236,2.279358],[-64.13446,2.433909],[-64.10005,2.723778],[-64.32628,3.118275],[-64.28142,3.541983],[-64.88451,4.117671],[-64.88064,4.342461],[-64.13653,4.223152],[-63.95465,4.021316],[-63.17706,4.048301],[-62.96093,3.763658],[-62.82024,4.106019],[-62.49922,4.270815],[-61.91181,4.26284],[-61.35393,4.630097],[-61.04904,4.623115],[-60.70452,4.969851],[-60.78709,5.296764],[-60.22457,5.371207],[-59.89857,5.107541],[-59.97549,4.603025],[-59.59676,4.439875],[-59.41942,3.96994],[-59.71017,3.542008],[-59.88955,2.72301],[-59.63006,2.316332],[-59.63382,1.966581],[-59.18812,1.478079],[-58.80545,1.320732],[-58.35933,1.689932],[-57.6,1.803907],[-57.39854,2.065119],[-57.12392,2.128758],[-56.02925,1.949445],[-56.23884,2.263348],[-55.98195,2.628657],[-55.64816,2.519953],[-54.93958,2.682515],[-54.24988,2.25056],[-53.73937,2.473731],[-52.98578,2.280494],[-52.65712,2.564069],[-52.41739,3.22121],[-51.73983,4.119158],[-51.7246,4.556867],[-51.0112,5.522895],[-43.48209,5.335832],[-29.3325,2.335959]]]},{"id":"Haiti-Drone","name":"Imagerie Drone (Haiti)","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/iomhaiti/{zoom}/{x}/{y}","polygon":[[[-72.1547401,19.6878969],[-72.162234,19.689011],[-72.164995,19.6932445],[-72.1657838,19.6979977],[-72.161603,19.7035677],[-72.1487449,19.7028993],[-72.1477194,19.7026765],[-72.1485082,19.7001514],[-72.1436963,19.7011169],[-72.1410143,19.7000029],[-72.139476,19.6973664],[-72.1382533,19.6927617],[-72.1386872,19.6923161],[-72.1380561,19.6896423],[-72.1385294,19.6894938],[-72.1388055,19.6901251],[-72.1388844,19.6876741],[-72.1378195,19.6872656],[-72.13778,19.6850003],[-72.1369517,19.6855945],[-72.136794,19.6840719],[-72.135729,19.6835148],[-72.1355713,19.6740817],[-72.1366362,19.6708133],[-72.1487843,19.6710733],[-72.1534779,19.6763843],[-72.1530835,19.6769414],[-72.1533251,19.6769768],[-72.1532807,19.6796525],[-72.1523834,19.6797175],[-72.1522749,19.6803488],[-72.1519101,19.6803395],[-72.1518608,19.6805067],[-72.1528173,19.6806552],[-72.1522299,19.6833011],[-72.1507801,19.6831499],[-72.1504457,19.6847862],[-72.1508591,19.6843492],[-72.1530087,19.6849898],[-72.1546258,19.6854354],[-72.1543103,19.6870694],[-72.1547244,19.6868466],[-72.1548501,19.6877564],[-72.1545814,19.6877982],[-72.1547401,19.6878969]],[[-72.1310601,19.6718929],[-72.1259842,19.6772765],[-72.1255379,19.6776179],[-72.1216891,19.6776442],[-72.1149677,19.672602],[-72.1152745,19.6687152],[-72.1198205,19.6627535],[-72.1227768,19.6625696],[-72.1248965,19.662701],[-72.1285779,19.6645394],[-72.1308091,19.6661677],[-72.1316737,19.668794],[-72.1315621,19.671],[-72.1310601,19.6718929]],[[-71.845795,19.6709758],[-71.8429354,19.6759525],[-71.8410027,19.6759525],[-71.8380249,19.6755254],[-71.8378671,19.6745041],[-71.8390504,19.6743927],[-71.8390109,19.6741141],[-71.8398392,19.673947],[-71.8389123,19.6736127],[-71.8380249,19.67209],[-71.8380052,19.6726285],[-71.8376699,19.6727214],[-71.8376305,19.672545],[-71.8354414,19.6732135],[-71.835333,19.6729999],[-71.8331242,19.6734642],[-71.8326706,19.6716815],[-71.8321579,19.67209],[-71.8307183,19.6694902],[-71.8306009,19.6697594],[-71.8302174,19.6698907],[-71.8291833,19.6672095],[-71.8290749,19.6672095],[-71.8289122,19.6667916],[-71.8289516,19.6666199],[-71.8288333,19.6663506],[-71.8285572,19.6664759],[-71.8288678,19.6672466],[-71.8287593,19.6674138],[-71.8277979,19.6678177],[-71.8277112,19.6678586],[-71.8278263,19.6679637],[-71.8271831,19.6681212],[-71.8271761,19.6680917],[-71.8264405,19.6683921],[-71.8264074,19.6683231],[-71.8261954,19.6684253],[-71.8261806,19.6683556],[-71.8258946,19.6684206],[-71.8258897,19.6686574],[-71.8251551,19.6687549],[-71.8254509,19.6691588],[-71.8229332,19.6695739],[-71.822713,19.6696658],[-71.8227688,19.6697577],[-71.8201751,19.6709855],[-71.8198474,19.6704537],[-71.8197985,19.6706014],[-71.8194674,19.6707557],[-71.8182472,19.6713433],[-71.8181426,19.6711431],[-71.8175813,19.6714254],[-71.816959,19.6707672],[-71.8176388,19.6718965],[-71.8171403,19.6720376],[-71.8158225,19.6718045],[-71.8138354,19.6711874],[-71.8123259,19.6706982],[-71.8121759,19.6704258],[-71.8124304,19.6701467],[-71.8119184,19.6700141],[-71.8118765,19.6705828],[-71.811169,19.6703483],[-71.8095938,19.6698516],[-71.8077992,19.6692829],[-71.8056028,19.668612],[-71.8051443,19.6668942],[-71.8051196,19.6652322],[-71.8052315,19.661979],[-71.8065603,19.6523921],[-71.8073412,19.6482946],[-71.8099686,19.6468292],[-71.8147517,19.6454502],[-71.8147726,19.6455619],[-71.8150027,19.6455093],[-71.8149469,19.6453846],[-71.8159928,19.6450234],[-71.8158882,19.6448855],[-71.8165854,19.6446097],[-71.8190119,19.643802],[-71.8211524,19.643454],[-71.8221564,19.6433292],[-71.8269046,19.643211],[-71.8280481,19.6432241],[-71.8304466,19.6440778],[-71.8306419,19.6448592],[-71.8295263,19.6450365],[-71.8296064,19.6456111],[-71.8299411,19.6455651],[-71.8303699,19.6451744],[-71.830471,19.6453452],[-71.8308092,19.6451974],[-71.8310184,19.6451088],[-71.8312519,19.6458541],[-71.8311125,19.6458245],[-71.831367,19.6465862],[-71.8328939,19.646189],[-71.8344566,19.6457062],[-71.8344664,19.6463052],[-71.834215,19.6461938],[-71.8342002,19.6465513],[-71.8346702,19.6463],[-71.8349118,19.6463905],[-71.8347984,19.6462187],[-71.8354393,19.6458496],[-71.8355034,19.6458032],[-71.8364747,19.6461328],[-71.8376382,19.6472658],[-71.8379143,19.647888],[-71.8390483,19.6508039],[-71.8456942,19.6696203],[-71.845795,19.6709758]],[[-72.098878,18.54843],[-72.096993,18.5501994],[-72.0972888,18.5503209],[-72.0968451,18.5503489],[-72.0955632,18.551854],[-72.0956428,18.5526742],[-72.0959914,18.5533748],[-72.0962145,18.553203],[-72.0962842,18.5535665],[-72.0964446,18.5535533],[-72.0965352,18.5539764],[-72.0965056,18.554173],[-72.0966085,18.5541747],[-72.0965178,18.5542127],[-72.0968769,18.5546588],[-72.0979018,18.5552141],[-72.1006211,18.5555875],[-72.1014926,18.5556206],[-72.1024339,18.5555016],[-72.103417,18.5543515],[-72.1034798,18.5516215],[-72.1030789,18.5516149],[-72.1033752,18.5515224],[-72.1035042,18.5515224],[-72.1035239,18.5502417],[-72.1028701,18.5503062],[-72.1029015,18.55025],[-72.1028457,18.5501773],[-72.1035081,18.5500252],[-72.103491,18.5497396],[-72.1035181,18.5497361],[-72.1035398,18.5489039],[-72.1034317,18.5487056],[-72.102717,18.5481437],[-72.1025601,18.5481536],[-72.10229,18.5482751],[-72.1022891,18.5482569],[-72.1025201,18.5481396],[-72.1023388,18.5481321],[-72.0999082,18.5480901],[-72.09907,18.5483799],[-72.098878,18.54843]],[[-72.2542503,18.568262],[-72.2560252,18.5717765],[-72.2557886,18.5748049],[-72.2535009,18.5755526],[-72.2522782,18.5755526],[-72.2499906,18.5740945],[-72.2473874,18.5698323],[-72.2460069,18.566729],[-72.2458492,18.5629527],[-72.2479396,18.5625414],[-72.2501483,18.5628031],[-72.2519232,18.5650839],[-72.2542503,18.568262]],[[-72.303145,18.5332749],[-72.3031275,18.5331799],[-72.3048311,18.5311081],[-72.3097397,18.5311081],[-72.3164332,18.5324302],[-72.3234056,18.5366083],[-72.3261388,18.5387765],[-72.3261946,18.5426371],[-72.3170468,18.5540596],[-72.3130864,18.5540596],[-72.2987511,18.5453342],[-72.2988627,18.5407333],[-72.2962969,18.5404689],[-72.2954602,18.5395169],[-72.2961853,18.5338582],[-72.2971893,18.5332235],[-72.3007034,18.5332764],[-72.3022652,18.5342284],[-72.3028486,18.5335189],[-72.303104,18.5333361],[-72.303181,18.5334007],[-72.3035793,18.5335614],[-72.3030793,18.5346463],[-72.303715,18.5339873],[-72.3045286,18.5344052],[-72.3044015,18.5345097],[-72.3062747,18.5352571],[-72.3063107,18.5352741],[-72.3061219,18.5357628],[-72.3061219,18.5358196],[-72.30637,18.5358928],[-72.3062726,18.5354869],[-72.3066688,18.5350891],[-72.3061963,18.5349706],[-72.3058869,18.5349385],[-72.3055373,18.5346833],[-72.3054864,18.534613],[-72.3055585,18.5345065],[-72.3046749,18.5342293],[-72.3047617,18.5338817],[-72.3043252,18.5337511],[-72.3042595,18.5336346],[-72.303145,18.5332749]],[[-72.2981405,18.477502],[-72.2935652,18.4948587],[-72.2922242,18.4964297],[-72.2931708,18.4972526],[-72.2892266,18.5057058],[-72.2878067,18.5080996],[-72.2850458,18.5119893],[-72.2840203,18.5113161],[-72.2808649,18.515879],[-72.2773151,18.5175994],[-72.2723454,18.5175246],[-72.2662714,18.5144578],[-72.2665869,18.5066783],[-72.2692643,18.5046154],[-72.2661965,18.5029756],[-72.2688181,18.4965222],[-72.2691528,18.4959403],[-72.2702684,18.4961519],[-72.2702684,18.4955964],[-72.2690691,18.49557],[-72.2692922,18.4937714],[-72.2736988,18.4859951],[-72.2746749,18.4850429],[-72.2751769,18.483403],[-72.2765435,18.4813398],[-72.2773523,18.4814985],[-72.2783006,18.4809694],[-72.2778544,18.4807049],[-72.2771013,18.480123],[-72.2789978,18.4775836],[-72.279723,18.4772927],[-72.2806433,18.4776365],[-72.2813685,18.4771604],[-72.2808386,18.4769752],[-72.2812848,18.4758378],[-72.2823167,18.4751765],[-72.2851615,18.4750971],[-72.2849941,18.4763668],[-72.2854404,18.4769752],[-72.286277,18.4756262],[-72.2869325,18.4754675],[-72.2865978,18.4751897],[-72.2865978,18.4750046],[-72.2909765,18.4747268],[-72.2946579,18.4749384],[-72.2973911,18.476843],[-72.2981405,18.477502]],[[-72.3466657,18.5222375],[-72.346833,18.5244325],[-72.3475303,18.5277645],[-72.3455501,18.5291131],[-72.3403069,18.5292189],[-72.3383267,18.5280289],[-72.3369043,18.530118],[-72.3338086,18.5296684],[-72.3289279,18.5270769],[-72.328649,18.5253316],[-72.3292068,18.5232689],[-72.330406,18.5220524],[-72.3321631,18.5221847],[-72.3322467,18.5191963],[-72.3369183,18.5183633],[-72.3382012,18.5184691],[-72.3381454,18.5181782],[-72.3411993,18.5177947],[-72.3454943,18.5171997],[-72.3492595,18.517279],[-72.3504308,18.5188922],[-72.3503472,18.5206112],[-72.3496778,18.5220392],[-72.3466657,18.5222375]],[[-72.3303078,18.5486462],[-72.3429687,18.5508149],[-72.3433236,18.5530585],[-72.3413121,18.5614341],[-72.3390639,18.5613593],[-72.3384723,18.5638271],[-72.3375257,18.5654348],[-72.3348436,18.5650609],[-72.3311755,18.5638271],[-72.3312149,18.5616211],[-72.3232082,18.5606863],[-72.3212361,18.559602],[-72.3208023,18.5587046],[-72.3208811,18.557882],[-72.3259493,18.5580274],[-72.3266186,18.5581993],[-72.3259214,18.5577498],[-72.3250986,18.5573797],[-72.3233767,18.552263],[-72.3245994,18.5478507],[-72.3288986,18.5483742],[-72.329979,18.5489548],[-72.3303078,18.5486462]],[[-72.3231383,18.5269828],[-72.3223434,18.528067],[-72.3209629,18.5279745],[-72.3207816,18.5271282],[-72.3208513,18.5253697],[-72.3214649,18.5249598],[-72.3225666,18.5248937],[-72.3228454,18.52533],[-72.3232359,18.5264804],[-72.3231383,18.5269828]],[[-72.2160832,18.6457752],[-72.2159649,18.6553795],[-72.2030279,18.6558279],[-72.1947057,18.6553421],[-72.1922208,18.6545573],[-72.1920631,18.6521283],[-72.193483,18.6477559],[-72.201253,18.6385249],[-72.2069327,18.6388239],[-72.2120996,18.6424117],[-72.2118068,18.6430591],[-72.2121693,18.6426892],[-72.2127968,18.6427552],[-72.2134662,18.6431252],[-72.2135638,18.6437462],[-72.2154176,18.6443947],[-72.2158909,18.6450301],[-72.2160832,18.6457752]],[[-72.2867654,18.6482017],[-72.2900977,18.6527446],[-72.28981,18.6536532],[-72.2900738,18.6542664],[-72.290721,18.6537667],[-72.2910327,18.6544709],[-72.2912485,18.654221],[-72.29168,18.6558905],[-72.2912245,18.656606],[-72.2922673,18.65597],[-72.2926869,18.6567536],[-72.2930705,18.6567309],[-72.2941253,18.6581846],[-72.2960192,18.6608421],[-72.2959713,18.6619096],[-72.2932862,18.664567],[-72.2906731,18.6659979],[-72.2895943,18.6661342],[-72.2895943,18.6665657],[-72.2877004,18.6664749],[-72.2875805,18.6676559],[-72.2831214,18.6697227],[-72.2796453,18.6696546],[-72.2784311,18.6690787],[-72.2783972,18.6687736],[-72.277736,18.6691671],[-72.2774394,18.669143],[-72.2770071,18.6683159],[-72.2765575,18.6681125],[-72.2765385,18.6680583],[-72.2752319,18.6685239],[-72.2749292,18.6674649],[-72.2746416,18.6674309],[-72.2734668,18.6682145],[-72.2732271,18.6682712],[-72.2726757,18.6671583],[-72.2719147,18.6674288],[-72.2718808,18.6673405],[-72.2688149,18.6681868],[-72.2688269,18.6671761],[-72.2690786,18.6668241],[-72.2688149,18.66679],[-72.2681077,18.6670739],[-72.2676282,18.6673805],[-72.2675563,18.6666878],[-72.266861,18.666949],[-72.2655904,18.6673578],[-72.2654466,18.6670058],[-72.2647514,18.6674146],[-72.2629893,18.6681868],[-72.2628455,18.6681754],[-72.2626537,18.6676076],[-72.2623001,18.6677098],[-72.2624799,18.6679199],[-72.2624799,18.6682322],[-72.262306,18.6682606],[-72.2620963,18.6679654],[-72.2622761,18.6689193],[-72.2601484,18.6688966],[-72.2542749,18.6687944],[-72.2505388,18.6683476],[-72.2504371,18.669536],[-72.2477926,18.6698893],[-72.2415204,18.669793],[-72.2414187,18.6741933],[-72.2389167,18.6739759],[-72.2387249,18.6734649],[-72.2383653,18.6733059],[-72.2387009,18.6739532],[-72.2375502,18.6738964],[-72.2374183,18.6735103],[-72.237742,18.67334],[-72.2375142,18.6732605],[-72.236843,18.6734876],[-72.2364354,18.6724088],[-72.2355124,18.6726019],[-72.2354045,18.6724202],[-72.2353027,18.6729028],[-72.2345475,18.6726871],[-72.2343077,18.6724599],[-72.2342358,18.6734706],[-72.2334087,18.6734592],[-72.2332889,18.6733003],[-72.2327375,18.6732889],[-72.2327135,18.6735047],[-72.227703,18.6725281],[-72.2265283,18.6716537],[-72.226804,18.6715742],[-72.2274993,18.6715855],[-72.2274873,18.6714493],[-72.2272899,18.6714623],[-72.2272814,18.6712977],[-72.2272094,18.671358],[-72.2261785,18.6713693],[-72.2256032,18.670881],[-72.2255073,18.6694502],[-72.2261066,18.6696886],[-72.2261785,18.6695949],[-72.2259837,18.6695495],[-72.225777,18.6691379],[-72.2253335,18.6694643],[-72.2249739,18.66947],[-72.2245783,18.6678802],[-72.2235525,18.6677046],[-72.2235907,18.6675921],[-72.2224634,18.6676283],[-72.2223659,18.667022],[-72.2223277,18.6670943],[-72.2219209,18.667026],[-72.2208105,18.6669015],[-72.220809,18.6665325],[-72.2208705,18.6663593],[-72.2206023,18.6668107],[-72.2203895,18.6666361],[-72.2184341,18.6650535],[-72.21829,18.6640979],[-72.2183493,18.6608376],[-72.2187223,18.6606541],[-72.2186894,18.660603],[-72.2187253,18.6604525],[-72.2189771,18.6603247],[-72.2187823,18.6601998],[-72.2186984,18.6602367],[-72.2185815,18.6600352],[-72.2186085,18.6600039],[-72.2187823,18.6601345],[-72.218995,18.6600181],[-72.2189111,18.6599131],[-72.2189681,18.6597938],[-72.2183807,18.6595837],[-72.2184728,18.6539662],[-72.2201001,18.6511554],[-72.225796,18.6469472],[-72.2283048,18.6457265],[-72.2379335,18.645855],[-72.237764,18.6446985],[-72.2400355,18.6432529],[-72.2455958,18.6433493],[-72.2482742,18.6450358],[-72.2487488,18.6436705],[-72.2511067,18.6429775],[-72.2512385,18.6433409],[-72.2512625,18.6431592],[-72.2514843,18.6431365],[-72.2513284,18.6429718],[-72.2533602,18.6423471],[-72.253516,18.6426765],[-72.2539535,18.6425402],[-72.2541453,18.642932],[-72.2543851,18.6428696],[-72.2543791,18.6427503],[-72.2564168,18.6423244],[-72.2566925,18.6431365],[-72.2568783,18.6428582],[-72.2568184,18.6425288],[-72.258843,18.6420991],[-72.258885,18.6422467],[-72.2592626,18.6422297],[-72.2596461,18.6424057],[-72.2592206,18.6406907],[-72.2599545,18.6404815],[-72.2601156,18.6406341],[-72.2601156,18.6399393],[-72.2615268,18.6394669],[-72.2626056,18.6391034],[-72.2654465,18.6387286],[-72.2719433,18.6386832],[-72.272201,18.6388649],[-72.2730341,18.6394158],[-72.273166,18.6412558],[-72.2738732,18.6410286],[-72.2742208,18.6416079],[-72.2752187,18.6416987],[-72.2754524,18.6415738],[-72.2755513,18.6416874],[-72.2755394,18.6417527],[-72.2764713,18.6418634],[-72.276753,18.6418975],[-72.2762953,18.6426002],[-72.2774226,18.6429978],[-72.277982,18.6427247],[-72.2785796,18.6431303],[-72.2785669,18.6432307],[-72.2789017,18.6433471],[-72.279851,18.6439655],[-72.2858703,18.6469651],[-72.2867654,18.6482017]],[[-72.5557247,18.5305893],[-72.5555866,18.5367036],[-72.554995,18.537975],[-72.5488026,18.537919],[-72.5486646,18.5372832],[-72.548842,18.5306267],[-72.5493745,18.5301031],[-72.555133,18.5301218],[-72.5557247,18.5305893]],[[-72.6235278,18.5079877],[-72.6234441,18.5095217],[-72.6226074,18.5104341],[-72.6204878,18.511849],[-72.6183403,18.5107514],[-72.6162207,18.5083183],[-72.6162625,18.506467],[-72.618661,18.5044438],[-72.6204041,18.5044967],[-72.6228305,18.506996],[-72.6235278,18.5079877]]]},{"id":"osmim-imagicode-S2A_R119_N09_20160327T050917","name":"imagico.de OSM images for mapping: Adams Bridge","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R119_N09_20160327T050917&z={zoom}&x={x}&y={-y}","description":"Supplementing incomplete coverage in other sources (true color)","scaleExtent":[0,14],"polygon":[[[79.01779174804685,8.827572266651268],[79.01401519775389,9.64678471986339],[80.17642021179198,9.650423231331946],[80.17727851867674,8.831304063493132],[79.01779174804685,8.827572266651268]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC80700162014211LGN00","name":"imagico.de OSM images for mapping: Alaska Range","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80700162014211LGN00&z={zoom}&x={x}&y={-y}","description":"Recent summer image of the Alaska Range for mapping natural features (true color)","scaleExtent":[0,12],"polygon":[[[-152.70872943147867,62.30357443926811],[-152.70838610872474,62.58153176976553],[-152.00835101350992,63.54645538851267],[-148.99432055696695,63.53329945446586],[-148.99432055696695,62.30357443926811],[-152.70872943147867,62.30357443926811]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81190582014075LGN00","name":"imagico.de OSM images for mapping: Bakun Reservoir","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81190582014075LGN00&z={zoom}&x={x}&y={-y}","description":"Missing in older pre-2011 images (true color)","scaleExtent":[0,13],"polygon":[[[114.35999506049737,2.028456548619032],[113.5344754987298,2.030000532161949],[113.53619211249934,3.070767124420059],[114.76511591010677,3.067510236472651],[114.76254098945248,2.088156161702156],[114.35999506049737,2.028456548619032]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81250592016107LGN00","name":"imagico.de OSM images for mapping: Batam","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81250592016107LGN00&z={zoom}&x={x}&y={-y}","description":"Missing Islands in OSM (true color)","scaleExtent":[0,13],"polygon":[[[104.00154570197358,-0.000078769115171],[104.00137404059662,1.45099139170518],[104.91014937018647,1.451162998032411],[104.91014937018647,-0.000078769115171],[104.00154570197358,-0.000078769115171]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81800982013291LGN00","name":"imagico.de OSM images for mapping: Bouvet Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81800982013291LGN00&z={zoom}&x={x}&y={-y}","description":"For more accurate coastline and glacier mapping (true color)","scaleExtent":[0,13],"polygon":[[[3.246529403113632,-54.47046993167111],[3.246529403113632,-54.375391687979096],[3.463852706336288,-54.375391687979096],[3.463852706336288,-54.47046993167111],[3.246529403113632,-54.47046993167111]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping","best":true},{"id":"osmim-imagicode-S2A_R065_N47_20160929T102022","name":"imagico.de OSM images for mapping: Cental Alps in late September 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R065_N47_20160929T102022&z={zoom}&x={x}&y={-y}","description":"Up-to-date image for glacier mapping - beware of some fresh snow at higher altitudes (true color)","scaleExtent":[0,13],"polygon":[[[10.559062957763668,45.95484945195885],[7.473964691162107,45.95532682303484],[7.555847167968747,46.27080015119853],[8.05469512939453,47.66469371011084],[11.752452850341793,47.664809318453564],[11.752452850341793,46.813336457338615],[11.38423919677734,45.955088138010865],[10.559062957763668,45.95484945195885]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC82050982015344LGN00","name":"imagico.de OSM images for mapping: Clerke Rocks","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82050982015344LGN00&z={zoom}&x={x}&y={-y}","description":"Missing in other image sources (true color)","scaleExtent":[0,13],"polygon":[[[-34.17701089820909,-55.29692751183208],[-35.19599283180284,-55.282851769908206],[-35.16663873634385,-54.7209735214882],[-34.12516916236925,-54.73465315976587],[-34.14010370216417,-55.29692751183208],[-34.17701089820909,-55.29692751183208]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-EO1A0040712016264110KF","name":"imagico.de OSM images for mapping: Coropuna","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=EO1A0040712016264110KF&z={zoom}&x={x}&y={-y}","description":"Up-to-date image for glacier mapping (true color)","scaleExtent":[0,14],"polygon":[[[-72.7594470977783,-15.68684010813036],[-72.7594470977783,-15.49570157136026],[-72.74434089660643,-15.426295586903299],[-72.41286277770995,-15.426295586903299],[-72.41286277770995,-15.652957427428944],[-72.42410659790038,-15.686674840407827],[-72.7594470977783,-15.68684010813036]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R022_N06_20151221T103009","name":"imagico.de OSM images for mapping: Cotonou","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R022_N06_20151221T103009&z={zoom}&x={x}&y={-y}","description":"Patchy and partly cloudy coverage in usual sources (true color)","scaleExtent":[0,14],"polygon":[[[1.839749701876779,6.257803795151386],[1.839749701876779,7.114271792431897],[2.549397834200998,7.114271792431897],[2.549397834200998,6.489052510574106],[2.497813590426584,6.258059752887941],[1.839749701876779,6.257803795151386]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R040_N01_20160311T164128","name":"imagico.de OSM images for mapping: Darwin and Wolf islands, Galapagos","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R040_N01_20160311T164128&z={zoom}&x={x}&y={-y}","description":"Recent image, only old and poor images in other sources currently (true color)","scaleExtent":[0,14],"polygon":[[[-92.05216379429558,1.321295617717369],[-92.05216379429558,1.72181118585353],[-91.74849481846549,1.72181118585353],[-91.74849481846549,1.321295617717369],[-92.05216379429558,1.321295617717369]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC80360072014245LGN00","name":"imagico.de OSM images for mapping: Eastern Devon Island coast","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80360072014245LGN00&z={zoom}&x={x}&y={-y}","description":"Coastline mostly mapped meanwhile (false color IR)","scaleExtent":[0,11],"polygon":[[[-84.34798733886554,74.38945823827667],[-84.34798733886554,75.89030323920836],[-79.14870755370929,75.89030323920836],[-79.14870755370929,74.38945823827667],[-84.34798733886554,74.38945823827667]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC82160152013239LGN00","name":"imagico.de OSM images for mapping: Eastern Iceland","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82160152013239LGN00&z={zoom}&x={x}&y={-y}","description":"Missing islets and inaccurate coast (true color)","scaleExtent":[0,12],"polygon":[[[-13.047005598725303,64.2110895294821],[-15.164963667572959,64.22408122727819],[-15.168053572358117,64.81572800422087],[-13.043572371186242,64.80359943673454],[-13.047005598725303,64.2110895294821]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-AST_L1T_00302052007154424_20150518041444_91492","name":"imagico.de OSM images for mapping: El Altar","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=AST_L1T_00302052007154424_20150518041444_91492&z={zoom}&x={x}&y={-y}","description":"2007 ASTER image offering better glacier coverage than common sources (true color with estimated blue)","scaleExtent":[0,14],"polygon":[[[-78.531997745432,-1.805085317123331],[-78.531997745432,-1.608105565001241],[-78.33561713019762,-1.608105565001241],[-78.33561713019762,-1.805085317123331],[-78.531997745432,-1.805085317123331]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R009_S61_20160109","name":"imagico.de OSM images for mapping: Elephant Island/Clarence Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R009_S61_20160109&z={zoom}&x={x}&y={-y}","description":"Fairly clear up-to-date image for updating glacier edges (true color)","scaleExtent":[0,13],"polygon":[[[-56.13476090727487,-61.63471600102006],[-56.13476090727487,-61.199363166283845],[-55.83263688383738,-60.84015069906498],[-53.72343354521433,-60.83981613078141],[-53.72343354521433,-61.63471600102006],[-56.13476090727487,-61.63471600102006]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-enderby","name":"imagico.de OSM images for mapping: Enderby Land and Kemp Coast","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=enderby&z={zoom}&x={x}&y={-y}","description":"Sentinel-2 images of Enderby Land and Kemp Coast (true color)","scaleExtent":[0,13],"polygon":[[[45.4547,-68.5091],[45.4547,-67.5724],[49.7155,-65.7176],[59.2693,-65.7176],[67.3735,-67.3449],[67.3735,-68.2581],[67.088,-68.5091],[45.4547,-68.5091]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC82100502015347LGN00","name":"imagico.de OSM images for mapping: Fogo, Cape Verde","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82100502015347LGN00&z={zoom}&x={x}&y={-y}","description":"Image from after the 2014/2015 eruption (true color)","scaleExtent":[0,14],"polygon":[[[-24.758781955967567,14.748140156641956],[-24.758781955967567,15.092493544965103],[-24.267057941685337,15.092493544965103],[-24.267057941685337,14.748140156641956],[-24.758781955967567,14.748140156641956]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-greenland","name":"imagico.de OSM images for mapping: Greenland mosaic","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=greenland&z={zoom}&x={x}&y={-y}","description":"Landsat mosaic of Greenland (true color)","scaleExtent":[0,12],"polygon":[[[-43.9774,59.7171],[-44.545,59.7302],[-44.9203,59.7672],[-45.3587,59.8218],[-45.763,59.8848],[-46.0859,59.9827],[-46.3381,60.119],[-46.577,60.2652],[-46.8114,60.4418],[-47.2635,60.5314],[-47.6937,60.5549],[-48.1457,60.6192],[-48.5771,60.7015],[-48.8689,60.8506],[-49.0578,61.0555],[-49.396,61.2957],[-49.7601,61.4934],[-50.2064,61.7324],[-50.4699,61.9539],[-50.8647,62.1596],[-51.0631,62.3869],[-51.2121,62.6001],[-51.3005,62.8389],[-51.4238,62.9979],[-51.6767,63.1944],[-51.9465,63.4079],[-52.0253,63.6377],[-52.2255,63.8378],[-52.3658,64.0705],[-52.4829,64.3792],[-52.4988,64.6788],[-52.789,64.9063],[-53.2046,65.1321],[-53.6649,65.4753],[-53.9977,65.8019],[-54.1348,66.1568],[-54.1441,66.5235],[-54.2285,66.8319],[-54.4519,67.303],[-54.5141,67.7648],[-54.604,68.2021],[-54.568,68.5698],[-54.598,68.8347],[-54.7606,69.1207],[-55.0028,69.4125],[-55.2735,69.6187],[-55.3808,69.8283],[-55.3945,70.0838],[-55.3094,70.2573],[-55.4307,70.479],[-55.5501,70.6707],[-55.7654,70.861],[-56.2489,71.2343],[-56.5018,71.5429],[-56.5867,71.9015],[-56.5189,72.2355],[-56.5085,72.5258],[-56.8923,72.8144],[-57.4027,73.1054],[-57.8066,73.4566],[-58.1461,73.7696],[-58.3554,74.0972],[-58.5125,74.3783],[-58.7336,74.6328],[-59.3551,74.8869],[-60.1412,75.102],[-61.0067,75.2763],[-61.911,75.3886],[-62.4706,75.5595],[-62.9776,75.7454],[-64.1463,75.779],[-65.4481,75.7235],[-66.7068,75.6792],[-67.8379,75.6525],[-69.0456,75.6195],[-70.055,75.5344],[-71.0898,75.4705],[-72.1119,75.4476],[-74.2311,76.4102],[-74.5601,76.5328],[-74.5601,82.6959],[-14.4462,82.6959],[-14.3994,82.5997],[-13.5339,82.4379],[-12.0312,82.3426],[-10.7796,82.3196],[-10.7796,80.1902],[-11.2123,80.069],[-11.136,79.8103],[-10.7796,79.5176],[-10.7796,79.0441],[-11.2626,78.7128],[-12.2579,78.3558],[-13.2398,78.1272],[-13.7649,77.9279],[-14.1169,77.6779],[-14.7129,77.5278],[-15.5507,77.3655],[-16.0936,77.0771],[-16.0586,76.5548],[-15.838,75.9611],[-15.6879,75.4726],[-16.253,75.058],[-17.0427,74.6425],[-18.3155,74.2702],[-19.4463,73.9378],[-19.8329,73.632],[-20.2938,73.3524],[-20.7831,73.0446],[-21.01,72.6766],[-20.8774,72.2926],[-20.7672,71.8726],[-20.7765,71.4304],[-20.9411,70.9802],[-21.219,70.6126],[-21.5326,70.3001],[-21.8039,70.0911],[-22.166,69.8947],[-22.4831,69.7539],[-22.9027,69.6585],[-23.3545,69.544],[-23.9177,69.4036],[-24.1794,69.3088],[-24.6745,69.1084],[-25.1222,68.9555],[-25.6659,68.7995],[-26.0994,68.583],[-26.6316,68.4043],[-27.7638,68.2813],[-28.4575,68.0023],[-29.353,67.8135],[-30.6456,67.4911],[-31.7673,67.0005],[-32.9783,66.2596],[-33.9313,66.0156],[-34.8956,65.7403],[-35.5914,65.5208],[-36.1483,65.372],[-36.7532,65.2559],[-37.1858,65.1349],[-37.6032,64.9727],[-38.0624,64.4901],[-38.5304,64.1244],[-39.0545,63.7213],[-39.3131,63.4405],[-39.5739,62.7506],[-39.9532,62.2739],[-40.2757,61.8547],[-40.714,61.3365],[-41.2091,60.8495],[-41.821,60.5526],[-42.4368,60.3264],[-42.8643,60.0299],[-43.1131,59.9147],[-43.3282,59.83],[-43.5459,59.7695],[-43.797,59.7284],[-43.9774,59.7171]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R047_S54_20160411T044330","name":"imagico.de OSM images for mapping: Heard Island coast","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R047_S54_20160411T044330&z={zoom}&x={x}&y={-y}","description":"Recent image of Heard island with interior mostly cloud covered but mostly well visible coast (true color)","scaleExtent":[0,13],"polygon":[[[73.06896521028185,-53.270590689700434],[73.06896521028185,-52.875489636268725],[73.67338491853381,-52.87673289134188],[74.08863378938341,-52.94950473139763],[74.08863378938341,-53.270590689700434],[73.06896521028185,-53.270590689700434]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC82280982013259LGN00","name":"imagico.de OSM images for mapping: Isla Londonderry","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82280982013259LGN00&z={zoom}&x={x}&y={-y}","description":"A lot of very coarse coastlines could be improved here, much snow cover though so no use for glacier mapping (false color IR)","scaleExtent":[0,12],"polygon":[[[-69.85679747431641,-55.55949231551995],[-72.26520659296875,-55.149427383391455],[-72.26520659296875,-54.51089432315929],[-72.08530546992188,-54.17909103768387],[-69.49115874140625,-54.17889010631196],[-69.49150206416016,-55.28378528847367],[-69.62230803339844,-55.55910398108892],[-69.85679747431641,-55.55949231551995]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R021_N44_20160807T083013","name":"imagico.de OSM images for mapping: Kerch Strait","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R021_N44_20160807T083013&z={zoom}&x={x}&y={-y}","description":"State of bridge construction in August 2016 (true color)","scaleExtent":[0,14],"polygon":[[[35.932588577270494,44.96236872935039],[35.932588577270494,45.559256426515695],[37.369909286499016,45.559256426515695],[37.369909286499016,44.96236872935039],[35.932588577270494,44.96236872935039]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-ls_polar2","name":"imagico.de OSM images for mapping: Landsat off-nadir July 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ls_polar2&z={zoom}&x={x}&y={-y}","description":"Latest images north of the regular Landsat limit (true color)","scaleExtent":[0,10],"polygon":[[[-79.05174500251786,81.91484289044183],[-79.05174500251786,83.43338556749623],[-73.60389956385866,83.80224987787145],[-26.424486898081835,83.80224987787145],[-21.492998879371186,83.50352415480617],[-16.888354121159868,83.15094632775453],[-16.888354121159868,81.91484289044183],[-79.05174500251786,81.91484289044183]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-AST_L1T_00311162013112731_20150618142416_109190","name":"imagico.de OSM images for mapping: Leskov Island ASTER","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=AST_L1T_00311162013112731_20150618142416_109190&z={zoom}&x={x}&y={-y}","description":"Missing in other image sources (true color with estimated blue)","scaleExtent":[0,13],"polygon":[[[-28.210747081406492,-56.72108048139938],[-28.210747081406492,-56.624975043089115],[-27.96956284678735,-56.624975043089115],[-27.96956284678735,-56.72108048139938],[-28.210747081406492,-56.72108048139938]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81991002015286LGN00","name":"imagico.de OSM images for mapping: Leskov Island Landsat","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81991002015286LGN00&z={zoom}&x={x}&y={-y}","description":"Missing in other image sources (true color)","scaleExtent":[0,13],"polygon":[[[-27.992928409215843,-56.73479060902333],[-28.227761172887714,-56.732624892496354],[-28.2241562839717,-56.600752537318456],[-27.969754123327167,-56.60283135691063],[-27.97318735086623,-56.73479060902333],[-27.992928409215843,-56.73479060902333]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-ls_polar","name":"imagico.de OSM images for mapping: May 2013 off-nadir Landsat","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ls_polar&z={zoom}&x={x}&y={-y}","description":"First available image north of the regular Landsat limit, mostly with seasonal snow cover so difficult to interpret (true color)","scaleExtent":[0,10],"polygon":[[[-85.76109385682587,81.39333391115835],[-89.83015512094161,82.14951616258433],[-89.83152841195212,82.24404688557661],[-84.99342418195555,82.73098798225534],[-79.95207288240479,83.13107965605444],[-74.55641250214465,83.46266728201661],[-69.35850602739671,83.70450775086888],[-28.207840897721187,83.70450775086888],[-23.06623935440381,83.46532469372944],[-17.96583654140148,83.15518123848051],[-17.96720983241198,82.72386035102944],[-22.781968115230015,81.44190408358111],[-85.76109385682587,81.39333391115835]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R092_S02_20160613T075613","name":"imagico.de OSM images for mapping: Mount Kenya 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R092_S02_20160613T075613&z={zoom}&x={x}&y={-y}","description":"Up-to-date image for glacier mapping (true color)","scaleExtent":[0,14],"polygon":[[[37.20665931701659,-0.266846645776291],[37.20665931701659,-0.011930465612033],[37.5655174255371,-0.011930465612033],[37.5655174255371,-0.266846645776291],[37.20665931701659,-0.266846645776291]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R092_S05_20160802T075556","name":"imagico.de OSM images for mapping: Mount Kilimanjaro 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R092_S05_20160802T075556&z={zoom}&x={x}&y={-y}","description":"Up-to-date image for glacier mapping (true color)","scaleExtent":[0,14],"polygon":[[[37.24768638610839,-3.229213650135676],[37.24768638610839,-2.968155849006605],[37.61581420898436,-2.968155849006605],[37.61581420898436,-3.229213650135676],[37.24768638610839,-3.229213650135676]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC80940622015159LGN00","name":"imagico.de OSM images for mapping: New Ireland","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80940622015159LGN00&z={zoom}&x={x}&y={-y}","description":"Many missing islands in OSM (mostly mapped meanwhile) (true color)","scaleExtent":[0,14],"polygon":[[[150.38853376619625,-2.800534349432724],[150.38853376619625,-2.383396178206425],[150.83348005525875,-2.383396178206425],[150.83348005525875,-2.800534349432724],[150.38853376619625,-2.800534349432724]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-northsea_s2_2016","name":"imagico.de OSM images for mapping: North Sea Coast 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=northsea_s2_2016&z={zoom}&x={x}&y={-y}","description":"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)","scaleExtent":[0,13],"polygon":[[[5.1562,52.8755],[5.1615,53.0325],[6.4155,55.7379],[9.8813,55.7459],[9.8813,53.2428],[9.6846,52.8877],[5.1562,52.8755]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-ural_s2_2016","name":"imagico.de OSM images for mapping: Northern and Polar Ural mountains August 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ural_s2_2016&z={zoom}&x={x}&y={-y}","description":"Up-to-date late summer imagery with few clouds - caution: not all visible snow is glaciers (true color)","scaleExtent":[0,13],"polygon":[[[59.198977223476454,64.8920468958533],[59.198977223476454,66.91656046303187],[60.733286610683486,68.44289182710118],[67.7329509173241,68.44327026354412],[67.7329509173241,67.748828729217],[64.21646761043934,64.9195663902952],[59.198977223476454,64.8920468958533]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-nellesmere_ast","name":"imagico.de OSM images for mapping: Northern Ellesmere Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=nellesmere_ast&z={zoom}&x={x}&y={-y}","description":"Assembled from July 2012 ASTER imagery (true color with estimated blue)","scaleExtent":[0,10],"polygon":[[[-81.62923243782096,82.45969864814401],[-83.03136255954291,82.47985512217643],[-83.03136255954291,83.05876272004272],[-72.80309111332822,83.09567468670448],[-65.65785798568925,83.03232446260982],[-65.8116665788654,82.45969864814401],[-81.62923243782096,82.45969864814401]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-nellesmere_ast_2016","name":"imagico.de OSM images for mapping: Northern Ellesmere Island July 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=nellesmere_ast_2016&z={zoom}&x={x}&y={-y}","description":"Assembled from July 2016 ASTER imagery (true color with estimated blue)","scaleExtent":[0,10],"polygon":[[[-78.89729497133754,82.17577067162792],[-82.64500613899595,82.19425721404356],[-82.64500613899595,83.08067098163464],[-66.58986093522367,83.08497116318647],[-63.78010752773773,82.98907949583335],[-63.78010752773773,82.72198178031782],[-65.0092029821365,82.17577067162792],[-78.89729497133754,82.17577067162792]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81960222015233LGN00vis","name":"imagico.de OSM images for mapping: Northern German west coast tidalflats","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81960222015233LGN00vis&z={zoom}&x={x}&y={-y}","description":"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (true color)","scaleExtent":[0,12],"polygon":[[[7.63567991501593,53.28027339774928],[7.63567991501593,53.66770140276793],[8.49433012253546,55.502457780526],[9.207754805152648,55.48106268908912],[9.207754805152648,53.28027339774928],[7.63567991501593,53.28027339774928]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81960222015233LGN00ir","name":"imagico.de OSM images for mapping: Northern German west coast tidalflats (infrared)","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81960222015233LGN00ir&z={zoom}&x={x}&y={-y}","description":"Up-to-date low tide imagery of the coast for updating mapping of tidalflats and shoals (false color IR)","scaleExtent":[0,12],"polygon":[[[7.63567991501593,53.28027339774928],[7.63567991501593,53.66810821588294],[8.49433012253546,55.502457780526],[9.207754805152648,55.48106268908912],[9.207754805152648,53.28027339774928],[7.63567991501593,53.28027339774928]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-ngreenland_ast","name":"imagico.de OSM images for mapping: Northern Greenland ASTER","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=ngreenland_ast&z={zoom}&x={x}&y={-y}","description":"Assembled from mostly 2012 ASTER imagery, some 2005 images mainly in the northeast (true color with estimated blue)","scaleExtent":[0,10],"polygon":[[[-52.49221819430999,82.48971755550389],[-52.49221819430999,82.94294978186194],[-49.28695697579964,83.47311821807558],[-44.52850362441216,83.7321400994933],[-29.525299334683975,83.7321400994933],[-25.263977329098022,83.58271128961059],[-21.183929736898254,83.39775984253468],[-21.183929736898254,82.74312310369845],[-23.404541300879075,82.48971755550389],[-52.49221819430999,82.48971755550389]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-EO1A1350972013086110KF","name":"imagico.de OSM images for mapping: Northwest Heard Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=EO1A1350972013086110KF&z={zoom}&x={x}&y={-y}","description":"Glaciers of Northwest Heard Island (mapped meanwhile) (false color IR)","scaleExtent":[0,13],"polygon":[[[73.22790413350113,-53.20333324999222],[73.22790413350113,-53.01072925838941],[73.2594898268605,-52.94943913810479],[73.78992348164566,-52.94943913810479],[73.78992348164566,-53.06048282358537],[73.71782570332533,-53.20333324999222],[73.22790413350113,-53.20333324999222]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R111_N09_20160604T154554","name":"imagico.de OSM images for mapping: Panama Canal","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R111_N09_20160604T154554&z={zoom}&x={x}&y={-y}","description":"Images of the new locks (but partly cloudy) (true color)","scaleExtent":[0,14],"polygon":[[[-80.01653561766223,8.848981570244637],[-80.01653561766223,9.41480707574399],[-79.46859250242785,9.41480707574399],[-79.46859250242785,8.848981570244637],[-80.01653561766223,8.848981570244637]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-EO1A0120532016364110KF","name":"imagico.de OSM images for mapping: Panama Canal - Pacific side","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=EO1A0120532016364110KF&z={zoom}&x={x}&y={-y}","description":"New locks with less clouds than in the Sentinel-2 image - make sure to check image alignment (true color)","scaleExtent":[0,14],"polygon":[[[-79.62538719177245,8.770827350748924],[-79.68684196472167,8.821974500616129],[-79.6866703033447,8.93705081902936],[-79.65362548828124,9.0929436313527],[-79.268159866333,9.0929436313527],[-79.32832717895505,8.770827350748924],[-79.62538719177245,8.770827350748924]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R078_N68_20160930T081002","name":"imagico.de OSM images for mapping: Pechora Sea Coast","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R078_N68_20160930T081002&z={zoom}&x={x}&y={-y}","description":"Sentinel-2 image of the Pechora Sea coast in autumn 2016 (true color)","scaleExtent":[0,13],"polygon":[[[53.1802,67.5344],[53.1821,68.414],[54.2107,69.3367],[55.3584,70.2786],[59.004,70.2786],[60.6947,69.977],[61.9837,69.7161],[61.9823,68.9395],[59.9153,67.5344],[53.1802,67.5344]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81511242016033LGN00","name":"imagico.de OSM images for mapping: Pensacola Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81511242016033LGN00&z={zoom}&x={x}&y={-y}","description":"Outside regular Landsat coverage and therefore not in LIMA and Bing/Mapbox (true color)","scaleExtent":[0,10],"polygon":[[[-53.20921946177197,-84.12524693598144],[-60.615377881406225,-83.78609327915953],[-60.615377881406225,-82.29968785439104],[-48.72405102147429,-82.29987186164387],[-44.52178052933989,-82.43683433550413],[-44.51354078327688,-84.12524693598144],[-53.20921946177197,-84.12524693598144]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R136_N41_20150831T093006","name":"imagico.de OSM images for mapping: Prokletije Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R136_N41_20150831T093006&z={zoom}&x={x}&y={-y}","description":"Late summer imagery where usual sources are severely limited by clouds and snow (true color)","scaleExtent":[0,14],"polygon":[[[19.112325688609005,42.1531576323006],[19.08425905347717,43.08073531915633],[20.63298799634826,43.09602978090892],[20.637880345591427,42.167791043253985],[19.112325688609005,42.1531576323006]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-DMS_1142622_03746_20110415_17533956","name":"imagico.de OSM images for mapping: Qasigiannguit","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=DMS_1142622_03746_20110415_17533956&z={zoom}&x={x}&y={-y}","description":"Icebridge DMS image of the settlement - alignment might be poor","scaleExtent":[0,15],"polygon":[[[-51.238571767352376,68.79971882076842],[-51.243335370562825,68.85302612951142],[-51.151668195269856,68.85302612951142],[-51.14038145973519,68.80116208175376],[-51.238571767352376,68.79971882076842]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81510432015030LGN00","name":"imagico.de OSM images for mapping: Rann of Kutch","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81510432015030LGN00&z={zoom}&x={x}&y={-y}","description":"Land/water distinction difficult to properly map based on Bing/Mapbox images (false color IR)","scaleExtent":[0,12],"polygon":[[[67.96839858817646,22.36264542957619],[67.86231185721942,22.38391650007107],[67.86231185721942,24.886930816927297],[71.48986007499286,24.886930816927297],[71.48986007499286,22.36264542957619],[67.96839858817646,22.36264542957619]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R093_N41_20150828T092005","name":"imagico.de OSM images for mapping: Rila and Pirin Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R093_N41_20150828T092005&z={zoom}&x={x}&y={-y}","description":"Late summer imagery where usual sources are severely limited by clouds and snow (true color)","scaleExtent":[0,14],"polygon":[[[23.808114560320394,41.584878805945024],[22.992379697039144,41.6019534981177],[23.011863263323328,42.29983747360261],[23.99402383156063,42.283393175568236],[23.965613873674886,41.584878805945024],[23.808114560320394,41.584878805945024]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81730602015040LGN00","name":"imagico.de OSM images for mapping: Rwenzori Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81730602015040LGN00&z={zoom}&x={x}&y={-y}","description":"Recent image of most of the remaining Rwenzori Mountains glaciers (false color IR)","scaleExtent":[0,13],"polygon":[[[29.766296776846374,0.206886934953159],[29.766296776846374,0.509176367154027],[30.034603509024116,0.509176367154027],[30.034603509024116,0.206886934953159],[29.766296776846374,0.206886934953159]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R078_N01_20160702T082522","name":"imagico.de OSM images for mapping: Rwenzori Mountains 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R078_N01_20160702T082522&z={zoom}&x={x}&y={-y}","description":"Up-to-date image for glacier mapping (true color)","scaleExtent":[0,14],"polygon":[[[29.8051357269287,0.235862065771959],[29.8051357269287,0.467085433008179],[30.02503395080565,0.467085433008179],[30.02503395080565,0.235862065771959],[29.8051357269287,0.235862065771959]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC80611072014036LGN00","name":"imagico.de OSM images for mapping: Scott Island","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80611072014036LGN00&z={zoom}&x={x}&y={-y}","description":"Missing in other image sources (true color)","scaleExtent":[0,13],"polygon":[[[-180,-67.4263452007858],[-180,-67.32544337276457],[-179.8247337341308,-67.3253771978419],[-179.8247337341308,-67.4263452007858],[-180,-67.4263452007858]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC82100972015347LGN00","name":"imagico.de OSM images for mapping: Shag Rocks","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82100972015347LGN00&z={zoom}&x={x}&y={-y}","description":"Missing in other image sources (true color)","scaleExtent":[0,13],"polygon":[[[-42.12874872458635,-53.72050213468143],[-42.14625818503558,-53.45782244664258],[-41.67573435080706,-53.445862233424414],[-41.6558216310805,-53.70871763480476],[-42.12874872458635,-53.72050213468143]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81130622013270LGN00","name":"imagico.de OSM images for mapping: Southeastern Sulawesi","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81130622013270LGN00&z={zoom}&x={x}&y={-y}","description":"Missing islands and coarse coastline due to cloud cover in Bing, lakes could also use additional detail (true color)","scaleExtent":[0,13],"polygon":[[[120.84382442048364,-3.595452324350203],[120.84382442048364,-3.159848173206955],[120.98184016755395,-2.514681686347053],[122.62618449738794,-2.514681686347053],[122.62618449738794,-3.002148034113534],[122.5007000308352,-3.595452324350203],[120.84382442048364,-3.595452324350203]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC80281222016035LGN00","name":"imagico.de OSM images for mapping: Southern Transantarctic Mountains","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80281222016035LGN00&z={zoom}&x={x}&y={-y}","description":"Outside regular Landsat coverage and therefore not in LIMA and Bing/Mapbox (true color)","scaleExtent":[0,10],"polygon":[[[156.96951345925345,-84.50097988272655],[154.50857596843485,-84.46255082580927],[154.50857596843485,-82.60681485793681],[175.46774337070775,-82.58504749645738],[177.00582930246938,-83.52806548607914],[177.00582930246938,-84.19262083779002],[171.93838547371908,-84.34632646581997],[166.83798266071676,-84.44370142483508],[161.67028858819987,-84.50045345467909],[156.96951345925345,-84.50097988272655]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-s2sval","name":"imagico.de OSM images for mapping: Svalbard mosaic","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=s2sval&z={zoom}&x={x}&y={-y}","description":"Sentinel-2 mosaic of Svalbard (true color)","scaleExtent":[0,13],"polygon":[[[16.6108,76.4137],[16.4731,76.4268],[16.3788,76.4589],[14.4124,77.1324],[14.0784,77.2536],[10.9875,78.4054],[10.631,78.5605],[10.2314,78.8392],[10.3952,79.6074],[10.516,79.7731],[10.9632,79.8707],[20.2294,80.849],[20.4702,80.8493],[25.1752,80.6817],[33.4391,80.3438],[33.7809,80.3016],[34.0395,80.239],[33.977,80.1527],[25.5722,76.5917],[25.2739,76.481],[25.1416,76.4327],[24.937,76.4176],[16.6108,76.4137]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-DMS_1142636_160xx_20110507_1822xxxx","name":"imagico.de OSM images for mapping: Thule Air Base","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=DMS_1142636_160xx_20110507_1822xxxx&z={zoom}&x={x}&y={-y}","description":"Icebridge DMS image - alignment might be poor","scaleExtent":[0,15],"polygon":[[[-68.93976917529807,76.51132557714853],[-68.93976917529807,76.54990046497333],[-68.76634826923117,76.55175699880375],[-68.50992908740743,76.55175699880375],[-68.50743999744161,76.51611959755911],[-68.67897262836203,76.51193618208278],[-68.93976917529807,76.51132557714853]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-dms_thule2_2015.09.25","name":"imagico.de OSM images for mapping: Thule Airbase DMS low altitude overflight September 2015","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=dms_thule2_2015.09.25&z={zoom}&x={x}&y={-y}","description":"Icebridge DMS aerial images from Thule Airbase - alignment might be poor","scaleExtent":[0,17],"polygon":[[[-68.74291885235837,76.52635852412212],[-68.74446380475094,76.52840070669755],[-68.74806869366695,76.54938731810256],[-68.7461482320123,76.56016657973251],[-68.72275936940244,76.56022393334496],[-68.72017371991207,76.5577475347327],[-68.71853220799495,76.5292079974043],[-68.71977675297786,76.52636602351234],[-68.74291885235837,76.52635852412212]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-dms_thule_2015.10.06","name":"imagico.de OSM images for mapping: Thule Airbase DMS overflight October 2015","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=dms_thule_2015.10.06&z={zoom}&x={x}&y={-y}","description":"Icebridge DMS aerial images from Thule Airbase - alignment might be poor","scaleExtent":[0,16],"polygon":[[[-68.81923965911197,76.52510098413808],[-68.82651380996036,76.54176603738404],[-68.77344898680974,76.5439032956252],[-68.7021022270136,76.54544610909097],[-68.59176687697696,76.54560088014632],[-68.59183124999333,76.52793072237704],[-68.65970186690618,76.52510098413808],[-68.81923965911197,76.52510098413808]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-dms_thule_2015.09.25","name":"imagico.de OSM images for mapping: Thule Airbase DMS overflight September 2015","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=dms_thule_2015.09.25&z={zoom}&x={x}&y={-y}","description":"Icebridge DMS aerial images from Thule Airbase - alignment might be poor","scaleExtent":[0,16],"polygon":[[[-68.7777130980429,76.50687742381471],[-68.77661875676482,76.57064446843503],[-68.68115357350676,76.57065443536027],[-68.67630413960784,76.55384487076157],[-68.67619685124725,76.5307435998188],[-68.6852305312094,76.50688243050337],[-68.7777130980429,76.50687742381471]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R094_N79_20160812T105622","name":"imagico.de OSM images for mapping: Ushakov Island August 2016","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R094_N79_20160812T105622&z={zoom}&x={x}&y={-y}","description":"Up-to-date late summer imagery with few clouds (true color)","scaleExtent":[0,12],"polygon":[[[78.45885691499899,80.72643412860921],[78.45885691499899,80.9098976404357],[80.48892435884663,80.9098976404357],[80.48892435884663,80.72643412860921],[78.45885691499899,80.72643412860921]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC80910682014358LGN00","name":"imagico.de OSM images for mapping: Vanatinai","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC80910682014358LGN00&z={zoom}&x={x}&y={-y}","description":"Coarse coastline due to cloud cover in Bing/Mapbox (true color)","scaleExtent":[0,13],"polygon":[[[153.0613810625655,-11.789228234021259],[153.0613810625655,-11.288690822294749],[153.10927458673538,-11.072292520575749],[154.41201277643268,-11.072292520575749],[154.41201277643268,-11.789228234021259],[153.0613810625655,-11.789228234021259]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC82330892016031LGN00","name":"imagico.de OSM images for mapping: Volcán Calbuco","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC82330892016031LGN00&z={zoom}&x={x}&y={-y}","description":"Image from after the 2015 eruption (true color)","scaleExtent":[0,13],"polygon":[[[-72.8669610523419,-41.51741123877955],[-72.8669610523419,-41.045274923011036],[-72.23181395761533,-41.045274923011036],[-71.87510161630674,-41.10829439141359],[-72.00007109872861,-41.51741123877955],[-72.8669610523419,-41.51741123877955]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R089_N52_20160623T024048","name":"imagico.de OSM images for mapping: Vostochny Cosmodrome","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R089_N52_20160623T024048&z={zoom}&x={x}&y={-y}","description":"Recent image showing newest features (true color)","scaleExtent":[0,13],"polygon":[[[126.36143429881301,51.375528375017275],[126.34804471141064,52.33932231282816],[128.60762341624462,52.340895519845674],[128.6117432892915,51.375528375017275],[126.36143429881301,51.375528375017275]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-LC81490352013282LGN00","name":"imagico.de OSM images for mapping: Western Karakoram","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=LC81490352013282LGN00&z={zoom}&x={x}&y={-y}","description":"Represents approximately minimum snow cover so can be well used for glacier mapping (true color)","scaleExtent":[0,13],"polygon":[[[75.98364343730569,34.97850982318471],[73.96164407817483,35.36957188964085],[74.44281091777444,37.09391400468158],[76.50600900737405,36.7026732100855],[75.98364343730569,34.97850982318471]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"osmim-imagicode-S2A_R039_S15_20160510T145731","name":"imagico.de OSM images for mapping: Willkanuta Mountains and Quelccaya Ice Cap","type":"tms","template":"http://imagico.de/map/osmim_tiles.php?layer=S2A_R039_S15_20160510T145731&z={zoom}&x={x}&y={-y}","description":"Poor and outdated imagery in other sources (true color)","scaleExtent":[0,14],"polygon":[[[-71.18070648306262,-14.4978507264954],[-71.17976234548938,-13.710292880050797],[-70.5563740550841,-13.71262765059222],[-70.5563740550841,-14.4978507264954],[-71.18070648306262,-14.4978507264954]]],"terms_url":"http://maps.imagico.de/#osmim","terms_text":"imagico.de OSM images for mapping"},{"id":"IPR-orotofoto-last-tms","name":"IPR ortofoto LAST (tmsproxy)","type":"tms","template":"http://osm-{switch:a,b,c}.zby.cz/tiles_ipr_last.php/{zoom}/{x}/{y}.jpg","scaleExtent":[1,18],"polygon":[[[14.81231552124,49.93089301941],[14.18754582291,49.87687266984],[14.12025456314,50.19881542327],[14.74502426147,50.25247461226],[14.81231552124,49.93089301941]]]},{"id":"IPR-orotofoto-vege-tms","name":"IPR ortofoto Low-Vegetation (tmsproxy)","type":"tms","template":"http://osm-{switch:a,b,c}.zby.cz/tiles_ipr_vege.php/{zoom}/{x}/{y}.jpg","scaleExtent":[1,20],"polygon":[[[14.30454236984,49.99538124382],[14.3160436821,49.94205148763],[14.3499983888,49.94508261663],[14.35383872175,49.92726356386],[14.42385321818,49.93351545169],[14.4200902288,49.95097343212],[14.48865449494,49.95709281879],[14.48479036398,49.9750111737],[14.55385989188,49.98117257481],[14.55011770159,49.99851689993],[14.58455395868,50.0015874108],[14.58829614897,49.98424419323],[14.69168128485,49.99346468175],[14.67633637226,50.06452744171],[14.71278864961,50.06777324036],[14.70115373952,50.12158114828],[14.66470146217,50.11833899243],[14.6610031918,50.13543086714],[14.62755290441,50.13245658485],[14.61965341283,50.16894659259],[14.58542741996,50.16590546732],[14.58162921725,50.18344165464],[14.40776267983,50.167995553],[14.41156088254,50.15045369625],[14.37764851321,50.14743927281],[14.37379555571,50.16523508727],[14.33892816423,50.16213672855],[14.34278112173,50.14433976066],[14.27367931007,50.13819641038],[14.27749028245,50.12058459573],[14.20879964298,50.11447476994],[14.21288816219,50.09557069695],[14.24656290855,50.09856724424],[14.25417384067,50.06335893014],[14.21987061144,50.0603042129],[14.22369648177,50.04259477081],[14.257999711,50.04565061557],[14.26952647673,49.99225864496],[14.30454236984,49.99538124382]]]},{"id":"bartholomew_qi1940","name":"Ireland Bartholomew Quarter-Inch 1940","type":"tms","template":"http://geo.nls.uk/maps/ireland/bartholomew/{zoom}/{x}/{-y}.png","scaleExtent":[5,13],"polygon":[[[-8.8312773,55.3963337],[-7.3221271,55.398605],[-7.2891331,55.4333162],[-7.2368042,55.4530757],[-7.18881,55.4497995],[-7.1528144,55.3968384],[-6.90561,55.394903],[-6.9047153,55.3842114],[-5.8485282,55.3922956],[-5.8378629,55.248676],[-5.3614762,55.2507024],[-5.3899172,53.8466464],[-5.8734141,53.8487436],[-5.8983,52.8256258],[-6.0191742,52.8256258],[-6.0262844,51.7712367],[-8.1131422,51.7712367],[-8.1273627,51.3268839],[-10.6052842,51.3091083],[-10.6271879,52.0328254],[-10.6469845,52.0322454],[-10.6469845,52.0440365],[-10.6271879,52.0448095],[-10.6290733,52.0745627],[-10.6699234,52.0743695],[-10.6702376,52.0876941],[-10.6312729,52.0898179],[-10.6393128,52.4147202],[-10.3137689,52.4185533],[-10.3166401,53.3341342],[-10.3699669,53.3330727],[-10.385965,54.3534472],[-8.8163777,54.3586265],[-8.8173427,54.6595721],[-8.8413398,54.6616284],[-8.8422286,54.6929749],[-8.8315632,54.7145436],[-8.8151208,54.7145436],[-8.8312773,55.3963337]]],"terms_url":"http://geo.nls.uk/maps/","terms_text":"National Library of Scotland Historic Maps"},{"id":"GSGS3906","name":"Ireland British War Office 1:25k GSGS 3906","type":"tms","template":"http://mapwarper.net/layers/tile/101/{zoom}/{x}/{y}.png","scaleExtent":[0,18],"polygon":[[[-10.71,51.32],[-10.71,55.46],[-5.37,55.46],[-5.37,51.32],[-10.71,51.32]]],"terms_url":"http://wiki.openstreetmap.org/wiki/WikiProject_Ireland#Trinity_College_Dublin","terms_text":"Glucksman Map Library, Trinity College Dublin"},{"id":"GSGS4136","name":"Ireland British War Office One-Inch 1941-43 GSGS 4136","type":"tms","template":"http://geo.nls.uk/maps/ireland/gsgs4136/{zoom}/{x}/{-y}.png","scaleExtent":[5,15],"polygon":[[[-10.0847426,51.4147902],[-10.0906535,51.5064103],[-10.4564222,51.5003961],[-10.5005905,52.3043019],[-10.0837522,52.312741],[-10.0840973,52.3404698],[-10.055802,52.3408915],[-10.0768509,52.7628238],[-9.7780248,52.7684611],[-9.7818205,52.8577261],[-9.6337877,52.8596012],[-9.6449626,53.1294502],[-10.0919663,53.1227152],[-10.1051422,53.3912913],[-10.4052593,53.3866349],[-10.4530828,54.193502],[-10.2998523,54.1974988],[-10.3149801,54.4669592],[-8.9276095,54.4853897],[-8.9339534,54.7546562],[-8.7773069,54.755501],[-8.7826749,55.0252208],[-8.9402974,55.0238221],[-8.9451773,55.2934155],[-7.528039,55.2970274],[-7.525599,55.3874955],[-7.0541955,55.3841691],[-7.0556595,55.2939712],[-6.3241545,55.2859128],[-6.3217146,55.3253556],[-6.1035807,55.3223016],[-6.1045566,55.2828557],[-5.7985836,55.2772968],[-5.8117595,55.0087135],[-5.656577,55.0056351],[-5.6721928,54.7355021],[-5.3618278,54.729585],[-5.3964755,54.1917889],[-5.855679,54.2017807],[-5.9220464,52.8524504],[-6.070885,52.8551025],[-6.1030927,52.1373337],[-6.8331336,52.1463183],[-6.8355736,52.0578908],[-7.5641506,52.0617913],[-7.5661026,51.7921593],[-8.147305,51.792763],[-8.146329,51.7033331],[-8.2912636,51.7027283],[-8.2897996,51.5227274],[-9.1174397,51.516958],[-9.1179277,51.4625685],[-9.3692452,51.4616564],[-9.3672933,51.4254613],[-10.0847426,51.4147902]]],"terms_url":"http://geo.nls.uk/maps/","terms_text":"National Library of Scotland Historic Maps"},{"id":"gsi.go.jp","name":"Japan GSI ortho Imagery","type":"tms","template":"http://cyberjapandata.gsi.go.jp/xyz/ort/{zoom}/{x}/{y}.jpg","scaleExtent":[12,19],"polygon":[[[141.85546875,44.64911632343077],[140.2294921875,43.96909818325174],[138.955078125,41.80407814427237],[139.482421875,40.17887331434696],[138.8671875,38.30718056188316],[136.31835937499997,37.19533058280065],[132.1435546875,35.137879119634185],[128.935546875,33.35806161277885],[129.5068359375,32.47269502206151],[129.77050781249997,31.690781806136822],[130.2099609375,30.90222470517144],[131.220703125,30.78903675126116],[131.66015625,32.32427558887655],[132.71484375,32.879587173066305],[133.76953125,33.17434155100208],[136.7578125,33.87041555094183],[139.306640625,35.06597313798418],[140.888671875,35.17380831799959],[141.15234374999997,36.56260003738548],[142.11914062499997,39.9434364619742],[141.767578125,42.68243539838623],[141.85546875,44.64911632343077]]]},{"id":"Aargau-AGIS-2011","name":"Kanton Aargau 25cm (AGIS 2011)","type":"tms","template":"http://tiles.poole.ch/AGIS/OF2011/{zoom}/{x}/{y}.png","scaleExtent":[14,19],"polygon":[[[8.222923278808594,47.604774168947614],[8.244209289550781,47.613569753973955],[8.294334411621094,47.60986653003798],[8.300857543945312,47.58625231278527],[8.329353332519531,47.569808674020344],[8.382568359375,47.56702895728551],[8.398017883300781,47.57490443821351],[8.424797058105469,47.56795554592218],[8.415184020996094,47.54663986006874],[8.389778137207031,47.5262428287156],[8.372268676757812,47.51233121261258],[8.358535766601562,47.503286684046664],[8.36402893066406,47.48078455918],[8.371238708496094,47.481016589036074],[8.373985290527344,47.47011007802331],[8.368148803710938,47.46825342516445],[8.387031555175781,47.44852243794931],[8.380851745605469,47.447593738482304],[8.384284973144531,47.4355191531953],[8.376388549804688,47.431803338643334],[8.377761840820312,47.42808726171425],[8.389434814453125,47.42739046807988],[8.391494750976562,47.41902822496511],[8.380165100097656,47.40462347023052],[8.364715576171875,47.4016026187529],[8.367118835449219,47.39881398671558],[8.380851745605469,47.39788440990287],[8.39424133300781,47.39439835079049],[8.399734497070312,47.372314620566925],[8.40728759765625,47.37068703239024],[8.404197692871094,47.34417352612498],[8.416213989257812,47.33416935720614],[8.414497375488281,47.32602502961836],[8.452606201171875,47.33254059215931],[8.444023132324219,47.31927592106609],[8.427543640136719,47.29925625338924],[8.390121459960938,47.28854494625744],[8.41175079345703,47.247076403108416],[8.393898010253906,47.227728840642065],[8.404884338378906,47.194845099780174],[8.401451110839844,47.17757880776958],[8.409690856933594,47.17314466448546],[8.412437438964844,47.13976002139446],[8.379478454589844,47.13929295458033],[8.361968994140625,47.14559801038333],[8.342742919921875,47.177112073280966],[8.3056640625,47.24987305653909],[8.295021057128906,47.26268916206698],[8.300514221191406,47.26991141830738],[8.278884887695312,47.28225686421767],[8.259315490722656,47.285983225286174],[8.243522644042969,47.280859411143915],[8.240432739257812,47.27130916053537],[8.228759765625,47.27270686584952],[8.219146728515625,47.25336866567523],[8.204727172851562,47.245444953748034],[8.203353881835938,47.22679624955806],[8.180007934570312,47.22143353240336],[8.171768188476562,47.2279619858493],[8.155975341796875,47.23961793870555],[8.175888061523436,47.24218190428504],[8.17657470703125,47.25406775981567],[8.136062622070312,47.24730946320093],[8.12164306640625,47.24218190428504],[8.10791015625,47.2447457457832],[8.097267150878906,47.259427174956194],[8.077354431152344,47.2603591917818],[8.059844970703125,47.25569894358661],[8.062591552734375,47.24614415248379],[8.016586303710938,47.242881146090085],[8.015899658203125,47.258961160390896],[7.997016906738281,47.2796948387185],[7.951698303222655,47.274337475394645],[7.960968017578125,47.25430078914495],[7.933845520019531,47.237053849043896],[7.911529541015624,47.24381345414034],[7.859344482421875,47.23425651880584],[7.83977508544922,47.23425651880584],[7.826042175292968,47.24427960201268],[7.828102111816407,47.25966018070071],[7.82398223876953,47.26548499105541],[7.8408050537109375,47.273405704663965],[7.848701477050781,47.28551744450745],[7.860374450683594,47.30461109337307],[7.871704101562499,47.31136207506936],[7.8888702392578125,47.31136207506936],[7.897453308105469,47.31904317780638],[7.895393371582031,47.327653995607086],[7.908439636230469,47.340451266106996],[7.9259490966796875,47.332773275955894],[7.94757843017578,47.331609846720866],[7.94757843017578,47.316715688820764],[8.007316589355467,47.33905535093827],[8.004913330078125,47.34533667855891],[8.011093139648438,47.35719936945847],[8.024139404296875,47.36719917429931],[8.032722473144531,47.38393878966209],[8.026885986328125,47.39602520707679],[8.010749816894531,47.3955603961201],[8.004570007324219,47.40671472747142],[7.975730895996094,47.41507892620099],[7.9657745361328125,47.42181578692778],[7.985343933105469,47.425764580393924],[7.971954345703124,47.46105827584221],[7.957534790039062,47.457344265054225],[7.940711975097656,47.46221885041022],[7.946891784667968,47.48403288391224],[7.907066345214844,47.48588897929538],[7.8936767578125,47.50653361720931],[7.873420715332031,47.51325876844644],[7.875480651855468,47.52253342509336],[7.865180969238281,47.51975120023913],[7.856254577636718,47.533660849056794],[7.833251953125,47.5325018525392],[7.834281921386719,47.51465007145751],[7.789649963378906,47.49377665301097],[7.789649963378906,47.518128167602484],[7.7515411376953125,47.52461999690649],[7.731285095214843,47.53203824675999],[7.708969116210937,47.54015075619555],[7.740898132324219,47.54362716173679],[7.761497497558593,47.54895720250044],[7.781410217285156,47.55289644950155],[7.797546386718749,47.55915229204993],[7.805442810058593,47.56563904359584],[7.814369201660155,47.575136052077276],[7.819175720214843,47.58648387645128],[7.8325653076171875,47.586715439092906],[7.843208312988281,47.581620824334166],[7.859344482421875,47.58602074809481],[7.8847503662109375,47.58764167941513],[7.903633117675781,47.58092606572345],[7.911872863769532,47.56749225365282],[7.90740966796875,47.55776216936179],[7.917709350585938,47.545712894408624],[7.929382324218749,47.54640812019053],[7.941741943359374,47.54432241518175],[7.9520416259765625,47.54965238525127],[7.9561614990234375,47.55683540041267],[7.9767608642578125,47.55544521625339],[7.997360229492187,47.556603705614094],[8.019676208496094,47.54965238525127],[8.049888610839844,47.55637200979099],[8.058815002441406,47.56285910557121],[8.072891235351562,47.56355410390809],[8.086967468261719,47.557067094186735],[8.100700378417969,47.56216409801383],[8.105506896972656,47.57976811421671],[8.113059997558594,47.583473468887405],[8.133659362792969,47.58301031389572],[8.138809204101562,47.59042030203756],[8.15185546875,47.59551406038282],[8.166275024414062,47.5941249027327],[8.177261352539062,47.6017648134425],[8.193740844726562,47.616346999837226],[8.2012939453125,47.62120682516921],[8.219490051269531,47.61958693358351],[8.223953247070312,47.61102381568743],[8.222923278808594,47.604774168947614]]],"terms_text":"AGIS OF2011"},{"id":"Aargau-AGIS-2014","name":"Kanton Aargau 25cm (AGIS 2014)","type":"tms","template":"http://mapproxy.osm.ch:8080/tiles/AGIS2014/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[8,19],"polygon":[[[8.222923278808594,47.604774168947614],[8.244209289550781,47.613569753973955],[8.294334411621094,47.60986653003798],[8.300857543945312,47.58625231278527],[8.329353332519531,47.569808674020344],[8.382568359375,47.56702895728551],[8.398017883300781,47.57490443821351],[8.424797058105469,47.56795554592218],[8.415184020996094,47.54663986006874],[8.389778137207031,47.5262428287156],[8.372268676757812,47.51233121261258],[8.358535766601562,47.503286684046664],[8.36402893066406,47.48078455918],[8.371238708496094,47.481016589036074],[8.373985290527344,47.47011007802331],[8.368148803710938,47.46825342516445],[8.387031555175781,47.44852243794931],[8.380851745605469,47.447593738482304],[8.384284973144531,47.4355191531953],[8.376388549804688,47.431803338643334],[8.377761840820312,47.42808726171425],[8.389434814453125,47.42739046807988],[8.391494750976562,47.41902822496511],[8.380165100097656,47.40462347023052],[8.364715576171875,47.4016026187529],[8.367118835449219,47.39881398671558],[8.380851745605469,47.39788440990287],[8.39424133300781,47.39439835079049],[8.399734497070312,47.372314620566925],[8.40728759765625,47.37068703239024],[8.404197692871094,47.34417352612498],[8.416213989257812,47.33416935720614],[8.414497375488281,47.32602502961836],[8.452606201171875,47.33254059215931],[8.444023132324219,47.31927592106609],[8.427543640136719,47.29925625338924],[8.390121459960938,47.28854494625744],[8.41175079345703,47.247076403108416],[8.393898010253906,47.227728840642065],[8.404884338378906,47.194845099780174],[8.401451110839844,47.17757880776958],[8.409690856933594,47.17314466448546],[8.412437438964844,47.13976002139446],[8.379478454589844,47.13929295458033],[8.361968994140625,47.14559801038333],[8.342742919921875,47.177112073280966],[8.3056640625,47.24987305653909],[8.295021057128906,47.26268916206698],[8.300514221191406,47.26991141830738],[8.278884887695312,47.28225686421767],[8.259315490722656,47.285983225286174],[8.243522644042969,47.280859411143915],[8.240432739257812,47.27130916053537],[8.228759765625,47.27270686584952],[8.219146728515625,47.25336866567523],[8.204727172851562,47.245444953748034],[8.203353881835938,47.22679624955806],[8.180007934570312,47.22143353240336],[8.171768188476562,47.2279619858493],[8.155975341796875,47.23961793870555],[8.175888061523436,47.24218190428504],[8.17657470703125,47.25406775981567],[8.136062622070312,47.24730946320093],[8.12164306640625,47.24218190428504],[8.10791015625,47.2447457457832],[8.097267150878906,47.259427174956194],[8.077354431152344,47.2603591917818],[8.059844970703125,47.25569894358661],[8.062591552734375,47.24614415248379],[8.016586303710938,47.242881146090085],[8.015899658203125,47.258961160390896],[7.997016906738281,47.2796948387185],[7.951698303222655,47.274337475394645],[7.960968017578125,47.25430078914495],[7.933845520019531,47.237053849043896],[7.911529541015624,47.24381345414034],[7.859344482421875,47.23425651880584],[7.83977508544922,47.23425651880584],[7.826042175292968,47.24427960201268],[7.828102111816407,47.25966018070071],[7.82398223876953,47.26548499105541],[7.8408050537109375,47.273405704663965],[7.848701477050781,47.28551744450745],[7.860374450683594,47.30461109337307],[7.871704101562499,47.31136207506936],[7.8888702392578125,47.31136207506936],[7.897453308105469,47.31904317780638],[7.895393371582031,47.327653995607086],[7.908439636230469,47.340451266106996],[7.9259490966796875,47.332773275955894],[7.94757843017578,47.331609846720866],[7.94757843017578,47.316715688820764],[8.007316589355467,47.33905535093827],[8.004913330078125,47.34533667855891],[8.011093139648438,47.35719936945847],[8.024139404296875,47.36719917429931],[8.032722473144531,47.38393878966209],[8.026885986328125,47.39602520707679],[8.010749816894531,47.3955603961201],[8.004570007324219,47.40671472747142],[7.975730895996094,47.41507892620099],[7.9657745361328125,47.42181578692778],[7.985343933105469,47.425764580393924],[7.971954345703124,47.46105827584221],[7.957534790039062,47.457344265054225],[7.940711975097656,47.46221885041022],[7.946891784667968,47.48403288391224],[7.907066345214844,47.48588897929538],[7.8936767578125,47.50653361720931],[7.873420715332031,47.51325876844644],[7.875480651855468,47.52253342509336],[7.865180969238281,47.51975120023913],[7.856254577636718,47.533660849056794],[7.833251953125,47.5325018525392],[7.834281921386719,47.51465007145751],[7.789649963378906,47.49377665301097],[7.789649963378906,47.518128167602484],[7.7515411376953125,47.52461999690649],[7.731285095214843,47.53203824675999],[7.708969116210937,47.54015075619555],[7.740898132324219,47.54362716173679],[7.761497497558593,47.54895720250044],[7.781410217285156,47.55289644950155],[7.797546386718749,47.55915229204993],[7.805442810058593,47.56563904359584],[7.814369201660155,47.575136052077276],[7.819175720214843,47.58648387645128],[7.8325653076171875,47.586715439092906],[7.843208312988281,47.581620824334166],[7.859344482421875,47.58602074809481],[7.8847503662109375,47.58764167941513],[7.903633117675781,47.58092606572345],[7.911872863769532,47.56749225365282],[7.90740966796875,47.55776216936179],[7.917709350585938,47.545712894408624],[7.929382324218749,47.54640812019053],[7.941741943359374,47.54432241518175],[7.9520416259765625,47.54965238525127],[7.9561614990234375,47.55683540041267],[7.9767608642578125,47.55544521625339],[7.997360229492187,47.556603705614094],[8.019676208496094,47.54965238525127],[8.049888610839844,47.55637200979099],[8.058815002441406,47.56285910557121],[8.072891235351562,47.56355410390809],[8.086967468261719,47.557067094186735],[8.100700378417969,47.56216409801383],[8.105506896972656,47.57976811421671],[8.113059997558594,47.583473468887405],[8.133659362792969,47.58301031389572],[8.138809204101562,47.59042030203756],[8.15185546875,47.59551406038282],[8.166275024414062,47.5941249027327],[8.177261352539062,47.6017648134425],[8.193740844726562,47.616346999837226],[8.2012939453125,47.62120682516921],[8.219490051269531,47.61958693358351],[8.223953247070312,47.61102381568743],[8.222923278808594,47.604774168947614]]],"terms_text":"AGIS OF2014"},{"id":"Aargau-AGIS-2016","name":"Kanton Aargau 25cm (AGIS 2016)","type":"tms","template":"http://mapproxy.osm.ch:8080/tiles/AGIS2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[8,19],"polygon":[[[8.222923278808594,47.604774168947614],[8.244209289550781,47.613569753973955],[8.294334411621094,47.60986653003798],[8.300857543945312,47.58625231278527],[8.329353332519531,47.569808674020344],[8.382568359375,47.56702895728551],[8.398017883300781,47.57490443821351],[8.424797058105469,47.56795554592218],[8.415184020996094,47.54663986006874],[8.389778137207031,47.5262428287156],[8.372268676757812,47.51233121261258],[8.358535766601562,47.503286684046664],[8.36402893066406,47.48078455918],[8.371238708496094,47.481016589036074],[8.373985290527344,47.47011007802331],[8.368148803710938,47.46825342516445],[8.387031555175781,47.44852243794931],[8.380851745605469,47.447593738482304],[8.384284973144531,47.4355191531953],[8.376388549804688,47.431803338643334],[8.377761840820312,47.42808726171425],[8.389434814453125,47.42739046807988],[8.391494750976562,47.41902822496511],[8.380165100097656,47.40462347023052],[8.364715576171875,47.4016026187529],[8.367118835449219,47.39881398671558],[8.380851745605469,47.39788440990287],[8.39424133300781,47.39439835079049],[8.399734497070312,47.372314620566925],[8.40728759765625,47.37068703239024],[8.404197692871094,47.34417352612498],[8.416213989257812,47.33416935720614],[8.414497375488281,47.32602502961836],[8.452606201171875,47.33254059215931],[8.444023132324219,47.31927592106609],[8.427543640136719,47.29925625338924],[8.390121459960938,47.28854494625744],[8.41175079345703,47.247076403108416],[8.393898010253906,47.227728840642065],[8.404884338378906,47.194845099780174],[8.401451110839844,47.17757880776958],[8.409690856933594,47.17314466448546],[8.412437438964844,47.13976002139446],[8.379478454589844,47.13929295458033],[8.361968994140625,47.14559801038333],[8.342742919921875,47.177112073280966],[8.3056640625,47.24987305653909],[8.295021057128906,47.26268916206698],[8.300514221191406,47.26991141830738],[8.278884887695312,47.28225686421767],[8.259315490722656,47.285983225286174],[8.243522644042969,47.280859411143915],[8.240432739257812,47.27130916053537],[8.228759765625,47.27270686584952],[8.219146728515625,47.25336866567523],[8.204727172851562,47.245444953748034],[8.203353881835938,47.22679624955806],[8.180007934570312,47.22143353240336],[8.171768188476562,47.2279619858493],[8.155975341796875,47.23961793870555],[8.175888061523436,47.24218190428504],[8.17657470703125,47.25406775981567],[8.136062622070312,47.24730946320093],[8.12164306640625,47.24218190428504],[8.10791015625,47.2447457457832],[8.097267150878906,47.259427174956194],[8.077354431152344,47.2603591917818],[8.059844970703125,47.25569894358661],[8.062591552734375,47.24614415248379],[8.016586303710938,47.242881146090085],[8.015899658203125,47.258961160390896],[7.997016906738281,47.2796948387185],[7.951698303222655,47.274337475394645],[7.960968017578125,47.25430078914495],[7.933845520019531,47.237053849043896],[7.911529541015624,47.24381345414034],[7.859344482421875,47.23425651880584],[7.83977508544922,47.23425651880584],[7.826042175292968,47.24427960201268],[7.828102111816407,47.25966018070071],[7.82398223876953,47.26548499105541],[7.8408050537109375,47.273405704663965],[7.848701477050781,47.28551744450745],[7.860374450683594,47.30461109337307],[7.871704101562499,47.31136207506936],[7.8888702392578125,47.31136207506936],[7.897453308105469,47.31904317780638],[7.895393371582031,47.327653995607086],[7.908439636230469,47.340451266106996],[7.9259490966796875,47.332773275955894],[7.94757843017578,47.331609846720866],[7.94757843017578,47.316715688820764],[8.007316589355467,47.33905535093827],[8.004913330078125,47.34533667855891],[8.011093139648438,47.35719936945847],[8.024139404296875,47.36719917429931],[8.032722473144531,47.38393878966209],[8.026885986328125,47.39602520707679],[8.010749816894531,47.3955603961201],[8.004570007324219,47.40671472747142],[7.975730895996094,47.41507892620099],[7.9657745361328125,47.42181578692778],[7.985343933105469,47.425764580393924],[7.971954345703124,47.46105827584221],[7.957534790039062,47.457344265054225],[7.940711975097656,47.46221885041022],[7.946891784667968,47.48403288391224],[7.907066345214844,47.48588897929538],[7.8936767578125,47.50653361720931],[7.873420715332031,47.51325876844644],[7.875480651855468,47.52253342509336],[7.865180969238281,47.51975120023913],[7.856254577636718,47.533660849056794],[7.833251953125,47.5325018525392],[7.834281921386719,47.51465007145751],[7.789649963378906,47.49377665301097],[7.789649963378906,47.518128167602484],[7.7515411376953125,47.52461999690649],[7.731285095214843,47.53203824675999],[7.708969116210937,47.54015075619555],[7.740898132324219,47.54362716173679],[7.761497497558593,47.54895720250044],[7.781410217285156,47.55289644950155],[7.797546386718749,47.55915229204993],[7.805442810058593,47.56563904359584],[7.814369201660155,47.575136052077276],[7.819175720214843,47.58648387645128],[7.8325653076171875,47.586715439092906],[7.843208312988281,47.581620824334166],[7.859344482421875,47.58602074809481],[7.8847503662109375,47.58764167941513],[7.903633117675781,47.58092606572345],[7.911872863769532,47.56749225365282],[7.90740966796875,47.55776216936179],[7.917709350585938,47.545712894408624],[7.929382324218749,47.54640812019053],[7.941741943359374,47.54432241518175],[7.9520416259765625,47.54965238525127],[7.9561614990234375,47.55683540041267],[7.9767608642578125,47.55544521625339],[7.997360229492187,47.556603705614094],[8.019676208496094,47.54965238525127],[8.049888610839844,47.55637200979099],[8.058815002441406,47.56285910557121],[8.072891235351562,47.56355410390809],[8.086967468261719,47.557067094186735],[8.100700378417969,47.56216409801383],[8.105506896972656,47.57976811421671],[8.113059997558594,47.583473468887405],[8.133659362792969,47.58301031389572],[8.138809204101562,47.59042030203756],[8.15185546875,47.59551406038282],[8.166275024414062,47.5941249027327],[8.177261352539062,47.6017648134425],[8.193740844726562,47.616346999837226],[8.2012939453125,47.62120682516921],[8.219490051269531,47.61958693358351],[8.223953247070312,47.61102381568743],[8.222923278808594,47.604774168947614]]],"terms_text":"AGIS OF2016","best":true},{"id":"Basel-Landschaft-2015","name":"Kanton Basel-Landschaft 10cm (2015)","type":"tms","template":"http://mapproxy.osm.ch:8080/tiles/KTBASELLANDSCHAFT2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[18,21],"polygon":[[[7.370281219482422,47.413684985326796],[7.357578277587891,47.41507892620101],[7.357921600341797,47.41827323486739],[7.353544235229492,47.4196089792119],[7.344875335693359,47.42402250214274],[7.339725494384765,47.42971307765559],[7.332687377929687,47.430235650685475],[7.32685089111328,47.4319194618196],[7.325280543317693,47.43489176778178],[7.33050406703179,47.44175856152086],[7.338990092194756,47.44109169292469],[7.344964876980962,47.43607806019703],[7.352656881264292,47.43435807026775],[7.38119797480828,47.432081698142134],[7.375988960266113,47.414309359238985],[7.378145456314087,47.41399717320828],[7.382040023803711,47.41330745332341],[7.388391494750976,47.41397539271845],[7.413708184603623,47.410929293287566],[7.420743520414262,47.411098781635985],[7.427483310496426,47.41448047082256],[7.438105529405026,47.412739349590474],[7.448396898794484,47.41507114537187],[7.455576414208223,47.42792319548619],[7.45061852232364,47.43534476535272],[7.437842682352891,47.446323188615104],[7.425422575234655,47.443283894442736],[7.420904049355535,47.44594415975335],[7.422417620777747,47.45071647996838],[7.428795928789581,47.45387944195848],[7.430028776685507,47.459491697398036],[7.445765194338128,47.46197276972992],[7.44717015944249,47.456958090215814],[7.456512189239691,47.44925575541638],[7.492356675875099,47.458972279610066],[7.530679075390223,47.46118857622267],[7.527445320030451,47.473906165741866],[7.536326693749955,47.48383279861684],[7.536231113003725,47.49105266753894],[7.532603895549507,47.490968962664795],[7.531789123586811,47.49739885661967],[7.520038351186771,47.49678264400428],[7.512226152318425,47.49891674929323],[7.509348758631863,47.508884893812876],[7.499082452238831,47.51627805213703],[7.497870355425969,47.52124757864722],[7.502278119030558,47.514906577969604],[7.517459288006065,47.51728104695845],[7.522200236749534,47.514091442409054],[7.530955756497733,47.52904526885427],[7.519353655277215,47.53471778813415],[7.510751927105658,47.528989768842564],[7.50229842095598,47.52840455858729],[7.4980383403841,47.536152181750076],[7.505454651706732,47.54438188661593],[7.516758242758337,47.545408295649786],[7.527317399933993,47.552778846515565],[7.554658254426867,47.564368052237306],[7.5645783501094,47.55703599040843],[7.561243624111692,47.55172275211291],[7.558752685660356,47.55235329499035],[7.555882119169953,47.54433555917895],[7.564785321950861,47.54568625396918],[7.587263056821628,47.54190064304111],[7.582688476068778,47.53246814131337],[7.589482524394103,47.5279230654027],[7.590248428005343,47.51978966346127],[7.594781326929009,47.51929395578897],[7.613780785019665,47.53925099543145],[7.622303281783164,47.53977428916004],[7.622854488041502,47.550040256825795],[7.617740918118178,47.554366555487356],[7.617617220103555,47.558648485827725],[7.632727781497729,47.5614887674157],[7.639973682410965,47.55816478484801],[7.648995462809379,47.548295861439875],[7.661308760240334,47.544832242956765],[7.665860164458853,47.53745814872834],[7.674674254363578,47.5337535789565],[7.694938989531916,47.532496041115465],[7.71346844906592,47.53978344629896],[7.715956243413761,47.53582195507857],[7.723622825374551,47.536754165368905],[7.727157067196862,47.53293048764033],[7.733221863174538,47.53275465944404],[7.737974130690588,47.52732498381306],[7.749022330706917,47.5249849998809],[7.757861753102653,47.52605097450287],[7.787633628417415,47.52011695778467],[7.790143521321244,47.51864117486466],[7.788870069574476,47.50682929074843],[7.792799480290271,47.500684271209245],[7.786625359342518,47.49312139201968],[7.798890147748131,47.49565149600841],[7.798162871694108,47.49939947973339],[7.799400121334925,47.497477088945935],[7.807418124234862,47.4971384859743],[7.814709929059118,47.504801278976316],[7.831976267472122,47.51473657456054],[7.833207588232065,47.53382387257594],[7.846527268275818,47.53266095290337],[7.852330295179702,47.53523506225097],[7.862569292788096,47.52692027402488],[7.86395674074442,47.519309183202445],[7.876658649367283,47.52269034821798],[7.87567113137545,47.51319304945735],[7.893993798731052,47.50605656803392],[7.904769180395594,47.49217505264052],[7.904821911502771,47.48490926161113],[7.93328835504665,47.48140776210853],[7.947015241408695,47.48488995686335],[7.940027875634228,47.462021295570224],[7.948854362289874,47.46377967418039],[7.957614193951437,47.45880646812721],[7.957849013566705,47.451279351685564],[7.946784554043733,47.44319336966537],[7.950032053627354,47.431716361052416],[7.96183169437885,47.421834282667845],[7.956570351591289,47.41968057428149],[7.955037646053525,47.415605646331336],[7.948388855309641,47.4162657867356],[7.934927870271696,47.41176694218953],[7.936722434714782,47.408057452805856],[7.932661510641391,47.40527495151619],[7.909737672400531,47.398520997340924],[7.890221593189976,47.407141074214024],[7.883331964118422,47.40609724771633],[7.883443085719068,47.4012049891245],[7.877702761222016,47.401257097623],[7.869136696167237,47.3955142728722],[7.879434713089799,47.38799354849815],[7.878812180597903,47.38351047538804],[7.862650230995195,47.38198499163919],[7.840119046365023,47.374763282921705],[7.830547227518145,47.36512144155488],[7.80216648325237,47.36109584064414],[7.796366151294341,47.3534705803715],[7.793560892325092,47.33905227137494],[7.78528803737905,47.3378822997136],[7.768963133383802,47.33891408469915],[7.766419194330703,47.342734660857005],[7.751518928544542,47.3443274446774],[7.734153146629586,47.35776074638933],[7.727913718160677,47.36885889855421],[7.701953574259492,47.37244716296033],[7.644203220263186,47.36720838530677],[7.641761060331779,47.38046937860509],[7.635580022356337,47.38059279713257],[7.633316986492583,47.38291397270416],[7.633305398225418,47.38533959871929],[7.637251158279386,47.38606854199808],[7.63272275093214,47.41003108104519],[7.664054730400831,47.41001995588381],[7.679802017668389,47.41751395224505],[7.686578998003315,47.43366406703297],[7.682972441800632,47.43872228466388],[7.684853783500164,47.447843589969715],[7.692273418589347,47.45421309996921],[7.698831030331891,47.45585888435835],[7.699930658071183,47.46190517358485],[7.709877972706822,47.469384739707586],[7.699760966314013,47.48063247960835],[7.668326578902932,47.48634665620256],[7.666120855554305,47.49686816039971],[7.65217109717027,47.49581439933043],[7.648646287658441,47.49183004211102],[7.655389581170213,47.49020559719241],[7.650513795302598,47.48826095607083],[7.655925875394832,47.48739459757455],[7.644422678687097,47.485637798180356],[7.640965961473804,47.482734093980326],[7.607299799570857,47.48939839412024],[7.608850381582776,47.48352506892989],[7.605631268762133,47.47935909729055],[7.608148977008936,47.475213682276376],[7.604494899927722,47.47044546774548],[7.618872436050056,47.4674530520825],[7.626072253389216,47.462913883669614],[7.62217338539308,47.46195224188912],[7.616464591762502,47.445234574416695],[7.615798850305441,47.432747890966844],[7.592069133423196,47.43271179535717],[7.581206884670679,47.42878068945942],[7.578423275099778,47.434906655087865],[7.568904367023134,47.43689695884281],[7.56829539909203,47.42233486107083],[7.58074128785892,47.414703988151935],[7.525235194936931,47.41163289737562],[7.531172340312734,47.40352507464003],[7.518616677418122,47.38822295597742],[7.511295677347134,47.38974369796625],[7.502255661148456,47.384806980223004],[7.492327480628366,47.385231761698726],[7.478410241257615,47.39055778320416],[7.47746817801916,47.401277162725364],[7.464484018734026,47.40251498235377],[7.460919593518167,47.40068414452088],[7.450020783333588,47.40392739156406],[7.44951323519806,47.39975827367453],[7.443401098004909,47.40231427489849],[7.441311347159463,47.40017886074712],[7.443566657511773,47.38890284041263],[7.437324174770898,47.3808884773088],[7.411692544769116,47.38057235919037],[7.416276198506335,47.384788794341716],[7.414494030814171,47.39429988358522],[7.398935569419335,47.39683906243558],[7.395920463999715,47.40338304393273],[7.388693876865087,47.403019088497395],[7.384054886906365,47.4123601395877],[7.379679679870605,47.4128137535428],[7.375844120979309,47.41401169352981],[7.370281219482422,47.413684985326796]]],"terms_url":"http://www.geo.bl.ch/fileadmin/user_upload/Geodaten/Nutzungsbedingungen_GBD_BL_V3p1.pdf","terms_text":"Geodaten des Kantons Basel-Landschaft 2015","best":true},{"id":"KTBASELSTADT2015","name":"Kanton Basel-Stadt 2015","type":"tms","template":"http://mapproxy.osm.ch:8080/tiles/KTBASELSTADT2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[8,21],"polygon":[[[7.492,47.4817],[7.492,47.6342],[7.784,47.6342],[7.784,47.4817],[7.492,47.4817]]],"terms_text":"Kanton Basel-Stadt OF 2015"},{"id":"Solothurn-sogis2014-tms","name":"Kanton Solothurn 25cm (SOGIS 2014-2015)","type":"tms","template":"http://mapproxy.osm.ch:8080/tiles/sogis2014/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[15,19],"polygon":[[[7.3404127,47.2175697],[7.4154818,47.2402115],[7.4173645,47.2537956],[7.4658424,47.2646513],[7.4946766,47.2882287],[7.5328638,47.294534],[7.5483333,47.3163566],[7.5709479,47.3263111],[7.5604584,47.342492],[7.5388991,47.3476266],[7.5396485,47.3601134],[7.5217459,47.3651488],[7.5237238,47.3720704],[7.4634937,47.3702566],[7.4361035,47.3781317],[7.4434011,47.4023143],[7.4774682,47.4012772],[7.4792364,47.3897076],[7.5022557,47.384807],[7.5213659,47.3912021],[7.5311724,47.4035251],[7.5252352,47.4116329],[7.5807413,47.414704],[7.5682954,47.4223349],[7.5689044,47.436897],[7.5812069,47.4287807],[7.6157989,47.4327479],[7.6260723,47.4629139],[7.6044949,47.4704455],[7.6072998,47.4893984],[7.640966,47.4827341],[7.6559259,47.4873946],[7.6521711,47.4958144],[7.6661209,47.4968682],[7.6683266,47.4863467],[7.699761,47.4806325],[7.709878,47.4693848],[7.6848538,47.4478436],[7.6798021,47.417514],[7.6327228,47.4100311],[7.633317,47.382914],[7.6417611,47.3804694],[7.6442033,47.3672084],[7.7279138,47.3688589],[7.751519,47.3443275],[7.7935609,47.3390523],[7.8021665,47.3610959],[7.8788122,47.3835105],[7.8691367,47.3955143],[7.883332,47.4060973],[7.9097377,47.398521],[7.9550377,47.4156057],[7.9618317,47.4218343],[7.9467846,47.4431934],[7.9682836,47.4628082],[7.9872707,47.4287435],[7.9854653,47.4227641],[7.9827035,47.4283325],[7.9631993,47.4223547],[8.0072617,47.4065858],[8.0100022,47.395418],[8.0265612,47.3956224],[8.0313669,47.3836856],[8.0038366,47.3453146],[8.0051906,47.3367516],[7.9479701,47.3171432],[7.9478307,47.3325169],[7.9192088,47.3339507],[7.9078055,47.341719],[7.889098,47.3114878],[7.8611018,47.3061239],[7.8418057,47.2744707],[7.8166423,47.2616706],[7.8028241,47.2684079],[7.7861469,47.256098],[7.7746009,47.267869],[7.7568187,47.258095],[7.7326672,47.2591133],[7.684769,47.2939919],[7.6482742,47.2819898],[7.5801066,47.2763483],[7.5936981,47.2662199],[7.5959384,47.245569],[7.6261802,47.2263143],[7.6405558,47.2297944],[7.6484666,47.2189525],[7.6472258,47.2017823],[7.6715278,47.1949714],[7.6711002,47.1845216],[7.6779881,47.1819259],[7.6728612,47.1683945],[7.6600808,47.1684026],[7.6451021,47.1489207],[7.6155322,47.1565739],[7.5861404,47.1475453],[7.5810534,47.16013],[7.5634674,47.1683541],[7.5257686,47.162205],[7.5203336,47.1588879],[7.5297508,47.1487369],[7.5097234,47.1255457],[7.4613252,47.1082327],[7.4750945,47.0867101],[7.454461,47.074927],[7.4354156,47.0801664],[7.4340002,47.1005003],[7.3820271,47.0957398],[7.3704914,47.1209312],[7.4401788,47.1237276],[7.4217922,47.1358605],[7.447783,47.1550805],[7.4728074,47.1525609],[7.4970383,47.1700873],[7.4804964,47.171738],[7.4708545,47.181324],[7.4757226,47.1906485],[7.4497638,47.1895691],[7.4476258,47.1810839],[7.4332849,47.1847269],[7.4118135,47.1624212],[7.3842442,47.1601249],[7.3821749,47.1651186],[7.391911,47.1662739],[7.3835137,47.1803011],[7.3654609,47.1944525],[7.3544799,47.1915316],[7.3404127,47.2175697]],[[7.420816,47.4803666],[7.4349836,47.4981011],[7.4707584,47.480734],[7.487277,47.4820136],[7.5116652,47.5026958],[7.5317892,47.4973989],[7.5366964,47.4850517],[7.5274454,47.4739062],[7.5306791,47.4611886],[7.4565122,47.4492558],[7.445214,47.4623781],[7.4557367,47.4733767],[7.420816,47.4803666]],[[7.3759458,47.4140995],[7.3821514,47.4330266],[7.4209041,47.4459442],[7.4378427,47.4463232],[7.4555765,47.4279232],[7.4437574,47.413444],[7.3759458,47.4140995]],[[7.6744234,47.1539707],[7.6853662,47.1662986],[7.7007985,47.1617746],[7.6901531,47.1525567],[7.6744234,47.1539707]]],"terms_text":"Orthofoto WMS Solothurn","best":true},{"id":"KTZUERICH2015","name":"Kanton Zürich 2015  10cm","type":"tms","template":"http://mapproxy.osm.ch:8080/tiles/KTZUERICH2015/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[8,21],"polygon":[[[8.807601928710938,47.66608099332474],[8.808631896972656,47.65475043477393],[8.830604553222656,47.648506014952225],[8.805885314941406,47.597597727711346],[8.749580383300781,47.61565270219988],[8.751983642578125,47.59505101193038],[8.807945251464844,47.585789182379905],[8.811721801757812,47.57467282332527],[8.840904235839844,47.57467282332527],[8.854637145996094,47.56216409801383],[8.8330078125,47.55382328811835],[8.845024108886719,47.53458802782819],[8.899612426757812,47.52786561031842],[8.895835876464844,47.491224888201955],[8.902702331542969,47.48588897929538],[8.887252807617188,47.475911695481756],[8.911285400390625,47.43969913094723],[8.934288024902344,47.43807362350206],[8.935317993164062,47.43017758727173],[8.917121887207031,47.42808726171425],[8.909912109375,47.404855836246135],[8.944587707519531,47.38905261221537],[8.945274353027344,47.379521907289295],[8.963127136230469,47.357664518690434],[8.973083496093748,47.35580389715929],[8.989906311035156,47.31857768821123],[8.973426818847656,47.30367985581531],[8.9593505859375,47.300653220457775],[8.941154479980469,47.2873805430142],[8.950080871582031,47.28458587064588],[8.940467834472656,47.259194168186234],[8.876266479492188,47.24847474828181],[8.876609802246092,47.243114224640834],[8.850173950195312,47.23961793870555],[8.849830627441406,47.247076403108416],[8.825111389160156,47.24824169331652],[8.800048828125,47.24031721435106],[8.804855346679688,47.23425651880584],[8.815155029296875,47.217702626593784],[8.793525695800781,47.21886856286133],[8.71490478515625,47.20021050593422],[8.685722351074219,47.18154588528182],[8.697395324707031,47.163108130899104],[8.660659790039062,47.15633823511178],[8.6572265625,47.16684287656919],[8.618087768554688,47.172444502751944],[8.622550964355469,47.17991241867412],[8.607101440429688,47.201376826785406],[8.595085144042969,47.19834433924206],[8.575859069824219,47.21513747655813],[8.541183471679688,47.2186353776589],[8.471488952636719,47.2053421258966],[8.441619873046875,47.22120035848172],[8.417243957519531,47.22120035848172],[8.383941650390625,47.292270864380086],[8.422050476074219,47.302282968719936],[8.442306518554688,47.32439601339355],[8.413810729980469,47.32299967378833],[8.408660888671875,47.33067908487908],[8.378448486328125,47.39718721653071],[8.360939025878906,47.39695481668995],[8.359222412109375,47.4053205652024],[8.379135131835938,47.40764414848437],[8.377418518066406,47.41624051540972],[8.384284973144531,47.42274494145051],[8.372611999511719,47.42808726171425],[8.372955322265625,47.437376962080776],[8.379478454589844,47.45037978769006],[8.36402893066406,47.46198673754625],[8.352012634277344,47.5079250985124],[8.373985290527344,47.517200697839414],[8.392181396484375,47.5366741201253],[8.417587280273436,47.56610235225701],[8.430290222167967,47.5693453981427],[8.491744995117188,47.581620824334166],[8.487625122070312,47.58648387645128],[8.463935852050781,47.58301031389572],[8.453292846679688,47.60315376826432],[8.479385375976562,47.617504142079596],[8.505821228027344,47.61958693358351],[8.513717651367188,47.635783590864854],[8.542213439941406,47.632776019724375],[8.545646667480469,47.627685889602006],[8.564186096191406,47.6256034207548],[8.566932678222656,47.61935551640258],[8.576202392578125,47.613569753973955],[8.564872741699219,47.60037582174319],[8.535346984863281,47.586715439092906],[8.550109863281248,47.5714301073211],[8.555259704589844,47.55498181333744],[8.581008911132812,47.59551406038282],[8.598861694335936,47.61449551898437],[8.59130859375,47.64642437575518],[8.609848022460938,47.65521295468833],[8.620834350585938,47.646886969413],[8.618431091308594,47.65660048985082],[8.602981567382812,47.666312203609145],[8.610877990722656,47.67856488312544],[8.62323760986328,47.67856488312544],[8.621864318847656,47.69312564683551],[8.64898681640625,47.697516190510555],[8.667526245117188,47.68665469810477],[8.671646118164062,47.67602211074509],[8.692245483398438,47.65197522925437],[8.734817504882812,47.64526787368664],[8.777389526367188,47.65313158281113],[8.785629272460938,47.667930646923494],[8.807601928710938,47.66608099332474]]],"terms_text":"Kanton Zürich OF 2015","best":true},{"id":"kelowna_2012","name":"Kelowna 2012","type":"tms","template":"http://{switch:a,b,c,d}.tile.paulnorman.ca/kelowna2012/{zoom}/{x}/{y}.png","description":"High quality aerial imagery taken for the City of Kelowna","scaleExtent":[9,20],"polygon":[[[-119.5867318,49.7928087],[-119.5465655,49.7928097],[-119.5465661,49.8013837],[-119.5343374,49.8013841],[-119.5343376,49.8047321],[-119.5296211,49.8047322],[-119.5296216,49.8119555],[-119.5104463,49.811956],[-119.5115683,49.8744325],[-119.5108946,49.8744904],[-119.5114111,49.8843312],[-119.5114115,49.9221763],[-119.49386,49.9223477],[-119.4940505,49.9313031],[-119.4803936,49.9317529],[-119.4804572,49.9407474],[-119.4666732,49.9409927],[-119.4692775,49.9913717],[-119.4551337,49.9916078],[-119.4556736,50.0121242],[-119.4416673,50.0123895],[-119.4417308,50.0136345],[-119.4221492,50.0140377],[-119.4221042,50.0119306],[-119.4121303,50.012165],[-119.4126082,50.0216913],[-119.4123387,50.0216913],[-119.4124772,50.0250773],[-119.4120917,50.0250821],[-119.4121954,50.0270769],[-119.4126083,50.0270718],[-119.4128328,50.0321946],[-119.3936313,50.0326418],[-119.393529,50.0307781],[-119.3795727,50.0310116],[-119.3795377,50.0287584],[-119.3735764,50.0288621],[-119.371544,49.9793618],[-119.3573506,49.9793618],[-119.3548353,49.9256081],[-119.3268079,49.9257238],[-119.3256573,49.8804068],[-119.3138893,49.8806528],[-119.3137097,49.8771651],[-119.3132156,49.877223],[-119.3131482,49.8749652],[-119.312452,49.8749073],[-119.3122275,49.87236],[-119.3117558,49.872331],[-119.3115986,49.8696098],[-119.3112169,49.8694217],[-119.3109199,49.8632417],[-119.3103721,49.8632724],[-119.3095139,49.8512388],[-119.3106368,49.8512316],[-119.3103859,49.8462564],[-119.3245344,49.8459957],[-119.3246018,49.8450689],[-119.3367018,49.844875],[-119.3367467,49.8435136],[-119.337937,49.8434702],[-119.3378023,49.8382055],[-119.3383637,49.8381041],[-119.3383749,49.8351202],[-119.3390936,49.8351058],[-119.3388016,49.8321217],[-119.3391497,49.8320565],[-119.3391722,49.8293331],[-119.3394641,49.8293331],[-119.3395879,49.8267878],[-119.3500053,49.8265829],[-119.3493701,49.8180588],[-119.4046964,49.8163785],[-119.4045694,49.8099022],[-119.4101592,49.8099022],[-119.4102862,49.8072787],[-119.4319467,49.8069098],[-119.4322643,49.7907965],[-119.4459847,49.7905504],[-119.445286,49.7820201],[-119.4967376,49.7811587],[-119.4966105,49.7784927],[-119.5418371,49.7775082],[-119.5415892,49.7718277],[-119.5560296,49.7714941],[-119.5561194,49.7718422],[-119.5715704,49.7715086],[-119.5716153,49.7717262],[-119.5819235,49.7714941],[-119.5820133,49.7717697],[-119.5922991,49.7715231],[-119.592344,49.7718132],[-119.6003839,49.7715957],[-119.6011924,49.7839081],[-119.5864365,49.7843863],[-119.5867318,49.7928087]]]},{"id":"kelowna_roads","name":"Kelowna Roads overlay","type":"tms","template":"http://{switch:a,b,c,d}.tile.paulnorman.ca/kelowna_overlay/{zoom}/{x}/{y}.png","scaleExtent":[9,20],"polygon":[[[-119.5867318,49.7928087],[-119.5465655,49.7928097],[-119.5465661,49.8013837],[-119.5343374,49.8013841],[-119.5343376,49.8047321],[-119.5296211,49.8047322],[-119.5296216,49.8119555],[-119.5104463,49.811956],[-119.5115683,49.8744325],[-119.5108946,49.8744904],[-119.5114111,49.8843312],[-119.5114115,49.9221763],[-119.49386,49.9223477],[-119.4940505,49.9313031],[-119.4803936,49.9317529],[-119.4804572,49.9407474],[-119.4666732,49.9409927],[-119.4692775,49.9913717],[-119.4551337,49.9916078],[-119.4556736,50.0121242],[-119.4416673,50.0123895],[-119.4417308,50.0136345],[-119.4221492,50.0140377],[-119.4221042,50.0119306],[-119.4121303,50.012165],[-119.4126082,50.0216913],[-119.4123387,50.0216913],[-119.4124772,50.0250773],[-119.4120917,50.0250821],[-119.4121954,50.0270769],[-119.4126083,50.0270718],[-119.4128328,50.0321946],[-119.3936313,50.0326418],[-119.393529,50.0307781],[-119.3795727,50.0310116],[-119.3795377,50.0287584],[-119.3735764,50.0288621],[-119.371544,49.9793618],[-119.3573506,49.9793618],[-119.3548353,49.9256081],[-119.3268079,49.9257238],[-119.3256573,49.8804068],[-119.3138893,49.8806528],[-119.3137097,49.8771651],[-119.3132156,49.877223],[-119.3131482,49.8749652],[-119.312452,49.8749073],[-119.3122275,49.87236],[-119.3117558,49.872331],[-119.3115986,49.8696098],[-119.3112169,49.8694217],[-119.3109199,49.8632417],[-119.3103721,49.8632724],[-119.3095139,49.8512388],[-119.3106368,49.8512316],[-119.3103859,49.8462564],[-119.3245344,49.8459957],[-119.3246018,49.8450689],[-119.3367018,49.844875],[-119.3367467,49.8435136],[-119.337937,49.8434702],[-119.3378023,49.8382055],[-119.3383637,49.8381041],[-119.3383749,49.8351202],[-119.3390936,49.8351058],[-119.3388016,49.8321217],[-119.3391497,49.8320565],[-119.3391722,49.8293331],[-119.3394641,49.8293331],[-119.3395879,49.8267878],[-119.3500053,49.8265829],[-119.3493701,49.8180588],[-119.4046964,49.8163785],[-119.4045694,49.8099022],[-119.4101592,49.8099022],[-119.4102862,49.8072787],[-119.4319467,49.8069098],[-119.4322643,49.7907965],[-119.4459847,49.7905504],[-119.445286,49.7820201],[-119.4967376,49.7811587],[-119.4966105,49.7784927],[-119.5418371,49.7775082],[-119.5415892,49.7718277],[-119.5560296,49.7714941],[-119.5561194,49.7718422],[-119.5715704,49.7715086],[-119.5716153,49.7717262],[-119.5819235,49.7714941],[-119.5820133,49.7717697],[-119.5922991,49.7715231],[-119.592344,49.7718132],[-119.6003839,49.7715957],[-119.6011924,49.7839081],[-119.5864365,49.7843863],[-119.5867318,49.7928087]]],"overlay":true},{"id":"landsat_233055","name":"Landsat 233055","type":"tms","template":"http://{switch:a,b,c,d}.tile.paulnorman.ca/landsat_233055/{zoom}/{x}/{y}.png","description":"Recent Landsat imagery","scaleExtent":[5,14],"polygon":[[[-60.8550011,6.1765004],[-60.4762612,7.9188291],[-62.161689,8.2778675],[-62.5322549,6.5375488],[-60.8550011,6.1765004]]]},{"id":"landsat_047026","name":"Latest southwest British Columbia Landsat","type":"tms","template":"http://{switch:a,b,c,d}.tile.paulnorman.ca/landsat_047026/{zoom}/{x}/{y}.png","description":"Recent lower-resolution landsat imagery for southwest British Columbia","scaleExtent":[5,13],"polygon":[[[-121.9355512,47.7820648],[-121.5720582,48.6410125],[-121.2015461,49.4846247],[-121.8375516,49.6023246],[-122.4767046,49.7161735],[-123.118912,49.8268824],[-123.760228,49.9335836],[-124.0887706,49.0870469],[-124.4128889,48.2252567],[-123.792772,48.1197334],[-123.1727942,48.0109592],[-122.553553,47.8982299],[-121.9355512,47.7820648]]]},{"id":"LINZ_NZ_Aerial_Imagery","name":"LINZ NZ Aerial Imagery","type":"tms","template":"https://tiles-a.data-cdn.linz.govt.nz/services;key=3197c6d0e5cb494a95d58dc2de3216c2/tiles/v4/set=2/EPSG:3857/{zoom}/{x}/{y}.png","scaleExtent":[0,21],"polygon":[[[167.2503662109375,-47.21956811231548],[167.244873046875,-47.28016067076474],[167.5030517578125,-47.37975438400816],[168.2501220703125,-47.15610477504402],[168.7445068359375,-46.79629898997744],[169.3267822265625,-46.75491661928188],[169.78271484375,-46.604167162931844],[170.4254150390625,-46.11132565729794],[170.804443359375,-45.95114968669139],[170.9527587890625,-45.440862671781744],[171.309814453125,-44.91035917458493],[171.40869140625,-44.39061697878681],[172.562255859375,-43.92954993561458],[172.90283203125,-43.96909818325171],[173.1610107421875,-43.90976594390799],[173.2598876953125,-43.69567969789881],[172.9742431640625,-43.53660274231031],[172.760009765625,-43.37710501700071],[173.1500244140625,-43.17714134663171],[173.704833984375,-42.63395872267314],[174.36401367187497,-41.78360106648077],[174.320068359375,-41.409775832009544],[174.84741210937497,-41.52914198872309],[175.0726318359375,-41.70572851523751],[175.506591796875,-41.672911819602085],[176.2261962890625,-41.10832999732831],[176.8304443359375,-40.42604212826493],[177.17102050781247,-39.67337039176559],[177.0391845703125,-39.39375459224347],[177.4456787109375,-39.18117526158747],[177.60498046875,-39.3300485529424],[177.978515625,-39.368279149160124],[178.3355712890625,-38.65977773071253],[178.7091064453125,-37.74465712069938],[178.626708984375,-37.54457732085582],[178.3135986328125,-37.43125050179357],[177.6214599609375,-37.37888785004525],[177.0391845703125,-37.39634613318924],[176.561279296875,-37.37015718405751],[176.3360595703125,-37.05956083025124],[176.0064697265625,-36.29741818650809],[175.6768798828125,-36.05354012833974],[174.671630859375,-35.1782983520012],[173.1939697265625,-34.28445325435288],[172.6776123046875,-34.234512362369856],[172.386474609375,-34.40237742424137],[172.4798583984375,-34.71903991764788],[172.9852294921875,-35.32184842037683],[173.56201171875,-36.142310873529986],[174.30908203125,-37.077093191754415],[174.5562744140625,-38.052416771864834],[174.4793701171875,-38.655488159952995],[174.3255615234375,-38.865374851611634],[173.7982177734375,-38.95940879245421],[173.60595703125,-39.232253141714885],[173.6993408203125,-39.56335316582929],[174.5892333984375,-39.95606977009003],[174.9847412109375,-40.216635475391215],[174.9847412109375,-40.49291502689579],[174.7210693359375,-40.805493843894155],[174.1497802734375,-40.65147128144056],[173.2818603515625,-40.43440488077009],[172.5897216796875,-40.350730565917885],[172.0843505859375,-40.534676780615406],[171.7657470703125,-40.826280356677124],[171.57348632812497,-41.3974150664646],[171.2823486328125,-41.652392884268124],[170.8758544921875,-42.53284428171312],[170.35400390625,-42.87193842444846],[168.277587890625,-43.92954993561458],[167.6239013671875,-44.47691085722324],[166.55273437499997,-45.38687734827038],[166.27258300781247,-45.916765867649],[166.4813232421875,-46.22545288226937],[167.6788330078125,-46.471916320870406],[167.2503662109375,-47.21956811231548]]],"terms_url":"http://www.linz.govt.nz/data/licensing-and-using-data/attributing-elevation-or-aerial-imagery-data","terms_text":"Sourced from LINZ CC-BY 3.0","best":true},{"id":"LINZ_NZ_Topo50_Gridless_Maps","name":"LINZ NZ Topo50 Gridless Maps","type":"tms","template":"https://tiles-a.data-cdn.linz.govt.nz/services;key=3197c6d0e5cb494a95d58dc2de3216c2/tiles/v4/layer=2343/EPSG:3857/{zoom}/{x}/{y}.png","scaleExtent":[0,21],"polygon":[[[167.2503662109375,-47.21956811231548],[167.244873046875,-47.28016067076474],[167.5030517578125,-47.37975438400816],[168.2501220703125,-47.15610477504402],[168.7445068359375,-46.79629898997744],[169.3267822265625,-46.75491661928188],[169.78271484375,-46.604167162931844],[170.4254150390625,-46.11132565729794],[170.804443359375,-45.95114968669139],[170.9527587890625,-45.440862671781744],[171.309814453125,-44.91035917458493],[171.40869140625,-44.39061697878681],[172.562255859375,-43.92954993561458],[172.90283203125,-43.96909818325171],[173.1610107421875,-43.90976594390799],[173.2598876953125,-43.69567969789881],[172.9742431640625,-43.53660274231031],[172.760009765625,-43.37710501700071],[173.1500244140625,-43.17714134663171],[173.704833984375,-42.63395872267314],[174.36401367187497,-41.78360106648077],[174.320068359375,-41.409775832009544],[174.84741210937497,-41.52914198872309],[175.0726318359375,-41.70572851523751],[175.506591796875,-41.672911819602085],[176.2261962890625,-41.10832999732831],[176.8304443359375,-40.42604212826493],[177.17102050781247,-39.67337039176559],[177.0391845703125,-39.39375459224347],[177.4456787109375,-39.18117526158747],[177.60498046875,-39.3300485529424],[177.978515625,-39.368279149160124],[178.3355712890625,-38.65977773071253],[178.7091064453125,-37.74465712069938],[178.626708984375,-37.54457732085582],[178.3135986328125,-37.43125050179357],[177.6214599609375,-37.37888785004525],[177.0391845703125,-37.39634613318924],[176.561279296875,-37.37015718405751],[176.3360595703125,-37.05956083025124],[176.0064697265625,-36.29741818650809],[175.6768798828125,-36.05354012833974],[174.671630859375,-35.1782983520012],[173.1939697265625,-34.28445325435288],[172.6776123046875,-34.234512362369856],[172.386474609375,-34.40237742424137],[172.4798583984375,-34.71903991764788],[172.9852294921875,-35.32184842037683],[173.56201171875,-36.142310873529986],[174.30908203125,-37.077093191754415],[174.5562744140625,-38.052416771864834],[174.4793701171875,-38.655488159952995],[174.3255615234375,-38.865374851611634],[173.7982177734375,-38.95940879245421],[173.60595703125,-39.232253141714885],[173.6993408203125,-39.56335316582929],[174.5892333984375,-39.95606977009003],[174.9847412109375,-40.216635475391215],[174.9847412109375,-40.49291502689579],[174.7210693359375,-40.805493843894155],[174.1497802734375,-40.65147128144056],[173.2818603515625,-40.43440488077009],[172.5897216796875,-40.350730565917885],[172.0843505859375,-40.534676780615406],[171.7657470703125,-40.826280356677124],[171.57348632812497,-41.3974150664646],[171.2823486328125,-41.652392884268124],[170.8758544921875,-42.53284428171312],[170.35400390625,-42.87193842444846],[168.277587890625,-43.92954993561458],[167.6239013671875,-44.47691085722324],[166.55273437499997,-45.38687734827038],[166.27258300781247,-45.916765867649],[166.4813232421875,-46.22545288226937],[167.6788330078125,-46.471916320870406],[167.2503662109375,-47.21956811231548]]],"terms_url":"https://data.linz.govt.nz/layer/2343-nz-mainland-topo50-gridless-maps/","terms_text":"Sourced from the LINZ Data Service and licensed by LINZ for re-use under the Creative Commons Attribution 3.0 New Zealand licence."},{"id":"ORT10LT","name":"Lithuania - NŽT ORT10LT","type":"tms","template":"http://ort10lt.openmap.lt/g16/{zoom}/{x}/{y}.jpeg","scaleExtent":[4,18],"polygon":[[[26.2138385,55.850748],[26.3858298,55.7045315],[26.6303618,55.6806692],[26.6205349,55.5689227],[26.5242191,55.5099228],[26.5541476,55.388833],[26.4399286,55.3479351],[26.7919694,55.3212027],[26.8291304,55.2763488],[26.7434625,55.2539863],[26.6764846,55.158828],[26.4611191,55.1285624],[26.3577434,55.1505399],[26.2296342,55.1073177],[26.2713814,55.0775905],[26.2085126,54.997414],[26.0619117,54.9416094],[25.8578176,54.9276001],[25.7429827,54.8150641],[25.7626083,54.5769013],[25.5319352,54.3418175],[25.6771618,54.3238109],[25.7857293,54.2336242],[25.7858844,54.1550594],[25.5550843,54.1461918],[25.5109462,54.1750267],[25.5896725,54.2285838],[25.5136246,54.3078472],[25.2689287,54.2744706],[25.0705963,54.1336282],[24.9573726,54.1720575],[24.8133801,54.144862],[24.7790172,54.0999054],[24.8712786,54.034904],[24.819568,53.9977218],[24.6845912,53.9621091],[24.697865,54.0171421],[24.6259068,54.0105048],[24.4342619,53.9014424],[24.3520594,53.8967893],[24.2016059,53.9700069],[23.9683341,53.9266977],[23.9130177,53.9696842],[23.7781192,53.8989169],[23.7097655,53.9394502],[23.5370435,53.9430702],[23.4822428,53.9893848],[23.5273356,54.0473482],[23.4858579,54.1532339],[23.3867851,54.224838],[23.0421216,54.3159745],[23.0102115,54.3827959],[22.8546899,54.4104029],[22.7919963,54.3633227],[22.7023421,54.4528985],[22.6838586,54.585972],[22.7489713,54.6319792],[22.7429727,54.7268221],[22.8866837,54.8135001],[22.8204005,54.9119829],[22.6424041,54.9713362],[22.5892361,55.070243],[22.080597,55.0244812],[22.0324081,55.084098],[21.9130671,55.0816838],[21.6491949,55.1808113],[21.5015124,55.1868198],[21.3843708,55.2936996],[21.2709829,55.2450059],[21.0983616,55.2563884],[20.9421741,55.282453],[21.0863466,55.5618266],[21.0399547,55.8363584],[21.0640261,56.0699542],[21.2047804,56.0811668],[21.2307958,56.1623302],[21.5021038,56.2954952],[21.7235874,56.3138211],[21.8356623,56.37162],[21.9695397,56.3766515],[22.0153001,56.4242811],[22.4372717,56.406405],[22.6800028,56.3515884],[22.9191739,56.3790184],[22.9466759,56.4146477],[23.0932498,56.3046383],[23.1703443,56.3667721],[23.3064522,56.3830535],[23.5571715,56.3338187],[23.7647953,56.3733238],[23.7666897,56.3238079],[24.0189971,56.3297615],[24.1214631,56.2488984],[24.2857421,56.3006367],[24.4541496,56.2581579],[24.5794651,56.2882389],[24.6284061,56.3753322],[24.9023767,56.4805317],[25.1277405,56.2059091],[25.5771398,56.182414],[25.6731232,56.1493667],[26.2138385,55.850748]]],"terms_url":"http://www.geoportal.lt","terms_text":"NŽT ORT10LT","best":true},{"id":"mapbox_locator_overlay","name":"Locator Overlay","type":"tms","template":"http://{switch:a,b,c}.tiles.mapbox.com/v4/openstreetmap.map-inh76ba2/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJncjlmd0t3In0.DmZsIeOW-3x-C5eX-wAqTw","description":"Shows major features to help orient you.","scaleExtent":[0,16],"overzoom":false,"terms_url":"http://www.mapbox.com/about/maps/","terms_text":"Terms & Feedback","default":true,"overlay":true},{"id":"londrina2011","name":"Londrina Ortofoto 2011","type":"tms","template":"https://siglon.londrina.pr.gov.br/arcgis/rest/services/Imagens/Ortofotos_2011_Paranacidade/MapServer/WMTS/tile/1.0.0/Imagens_Ortofotos_2011_Paranacidade/default/GoogleMapsCompatible/{zoom}/{y}/{x}","polygon":[[[-51.10903142008701,-23.392750890870328],[-51.110147219037096,-23.39111628244602],[-51.111981850003126,-23.389599820448623],[-51.11358044657587,-23.38976722295012],[-51.120999436701226,-23.38592675938185],[-51.12224934611127,-23.385109415587607],[-51.12483499560139,-23.383504255873166],[-51.12538216624037,-23.38186953335707],[-51.12482426676533,-23.37770385409619],[-51.12445948633935,-23.375054689723584],[-51.124373655650885,-23.372297138974446],[-51.12244246516032,-23.37032742475139],[-51.12302182230749,-23.366427304263887],[-51.128557901713755,-23.36548180323493],[-51.12832186732048,-23.358843408308623],[-51.12477062258506,-23.35475580404945],[-51.12703440699343,-23.35091432623551],[-51.12411616358548,-23.34679692655685],[-51.12025378260435,-23.347811512977742],[-51.1176466754421,-23.33969460448754],[-51.11264703783877,-23.341290443649072],[-51.109396200513004,-23.33488726938344],[-51.10756156954697,-23.334089313725826],[-51.10485790286019,-23.333980949007543],[-51.10252974543546,-23.334187827029368],[-51.09986899409291,-23.331015661953632],[-51.09801290545476,-23.329360589233605],[-51.09998701128955,-23.32830645478855],[-51.10322711977927,-23.325321337105603],[-51.10472915682748,-23.323193291476684],[-51.104664783811145,-23.321291814470847],[-51.10514758143378,-23.318444474199904],[-51.1063599399084,-23.3157547161216],[-51.10660670313775,-23.31467091543279],[-51.11050127062705,-23.311665785493048],[-51.111584883068964,-23.30842411016493],[-51.099504213666904,-23.309468549142686],[-51.09740136179941,-23.308631027972474],[-51.09511611971892,-23.307448636164267],[-51.09201548609798,-23.3049360186679],[-51.09036324534495,-23.3037141796735],[-51.09204767260616,-23.29874787986134],[-51.09269140276969,-23.297496421894902],[-51.09407542262125,-23.292953629109174],[-51.10073802981369,-23.293318240761657],[-51.10101697955121,-23.28870632248831],[-51.10068438563339,-23.28837126237015],[-51.10084531817427,-23.28777997775132],[-51.09937546763423,-23.28663682004102],[-51.09631774935752,-23.277914991984613],[-51.10285161051725,-23.273016720553397],[-51.10835550341534,-23.27033590016574],[-51.11309764895328,-23.268404099092194],[-51.13160489115448,-23.265338785827712],[-51.13188384089201,-23.262007272160396],[-51.1317336371872,-23.255058136908826],[-51.13290308031759,-23.254683563301587],[-51.132956724497895,-23.250750476893938],[-51.13473771128364,-23.2512729236245],[-51.13533852610292,-23.25133206840842],[-51.13516686472599,-23.24359373640034],[-51.13534925493897,-23.24117849627157],[-51.137516479822814,-23.24219388826517],[-51.13884685549409,-23.243495156026544],[-51.14108918223035,-23.24521044413634],[-51.1471724322756,-23.243179698340864],[-51.14761231455401,-23.23828015040167],[-51.149082165094036,-23.235884531292832],[-51.14976881060179,-23.236811236789336],[-51.15138886484666,-23.23853646924079],[-51.15289090189487,-23.238842079520833],[-51.15383503946804,-23.238950521710013],[-51.15820167574391,-23.238142132361276],[-51.16045473131624,-23.238161849232945],[-51.160347442955654,-23.24658068718069],[-51.15912435564498,-23.2478326235554],[-51.16131303820094,-23.247773477219496],[-51.166591625541805,-23.245939927797],[-51.17193458589902,-23.245821633420345],[-51.17205260309565,-23.249557713480034],[-51.174241285651625,-23.248404370116877],[-51.17514250788055,-23.2493211310392],[-51.176859121649926,-23.248157927934038],[-51.179466228812196,-23.251686936561047],[-51.18135450395853,-23.253806268366073],[-51.18273852381009,-23.253628837227893],[-51.18378994974384,-23.253264116924615],[-51.18495939287424,-23.253303546194683],[-51.18626831087339,-23.252150235227905],[-51.18665454897149,-23.247477745146526],[-51.191182117788244,-23.249143693933142],[-51.19141815218154,-23.252859966234126],[-51.19369266542598,-23.252781107419985],[-51.1938428691308,-23.26073575534214],[-51.20096681627374,-23.26054847664639],[-51.20126722368338,-23.24259807127726],[-51.209936123218775,-23.242775517090898],[-51.21090171846407,-23.26988252079656],[-51.21968863519614,-23.27221839365197],[-51.225965004290465,-23.2745345140599],[-51.22934458764894,-23.27860487489667],[-51.234515886629225,-23.28160089636689],[-51.23497722657975,-23.283246708422755],[-51.235073786104266,-23.285444377831148],[-51.23371122392482,-23.285897704227196],[-51.232155542696304,-23.28801649191402],[-51.22870085748543,-23.292293383844925],[-51.227402668322334,-23.294599300809004],[-51.22679112466699,-23.295476327114592],[-51.225600223864475,-23.29657013833941],[-51.22392652543933,-23.297210654251764],[-51.220482569064515,-23.30072850975029],[-51.21863720926242,-23.301300029310937],[-51.21668456109974,-23.30211788923888],[-51.21423838647836,-23.30441378240661],[-51.210966091480465,-23.306965823153238],[-51.22328279527583,-23.318296686707587],[-51.224387865389886,-23.31459209321986],[-51.22521398576639,-23.312887551432937],[-51.22511742624187,-23.312582111000477],[-51.22521398576639,-23.312513140483127],[-51.2255251220121,-23.312532846348883],[-51.22595427545445,-23.312385052284572],[-51.22616885217561,-23.31183328632629],[-51.22935531648505,-23.314887676277397],[-51.22802494081377,-23.31661189768144],[-51.227885465945,-23.31901591762422],[-51.22767088922384,-23.320227763653186],[-51.22723100694544,-23.321508564518947],[-51.2273919394863,-23.322227778055023],[-51.22725246461755,-23.322848466059934],[-51.230331640566384,-23.325577488448165],[-51.23046038659909,-23.326710459617892],[-51.229537706698046,-23.32789268010374],[-51.229162197436,-23.330503379743732],[-51.229290943468705,-23.33178408156439],[-51.22681258233914,-23.334473515196468],[-51.2260186484708,-23.336571826694826],[-51.22473118814376,-23.33839427691611],[-51.22210262330938,-23.340226553005806],[-51.22257469209598,-23.34196029634743],[-51.22380850824271,-23.343388647432523],[-51.22384069475089,-23.345309509145306],[-51.22440932306201,-23.347003784611864],[-51.2245380690947,-23.348294177581966],[-51.22404454263601,-23.34968305981433],[-51.22350810083308,-23.35010661675208],[-51.22381923707877,-23.35076657486812],[-51.22304676088255,-23.35174173085325],[-51.22259614976809,-23.35296312824164],[-51.22586844476598,-23.35480505304304],[-51.22650144609346,-23.36705763453823],[-51.22354028734128,-23.369145582171885],[-51.22366903337377,-23.37968330666716],[-51.220375280703756,-23.381633186264455],[-51.216469984378406,-23.38170212087667],[-51.21416328462579,-23.379949201028825],[-51.2092816642191,-23.37395167630701],[-51.20738266023672,-23.368141007697016],[-51.20628831895872,-23.36723491438801],[-51.20472190889416,-23.366269721227162],[-51.198230963078665,-23.366683376299132],[-51.19297383340994,-23.366506095711998],[-51.18986247095292,-23.3654424072124],[-51.18806002649507,-23.36464463523902],[-51.18718026193825,-23.3645264463904],[-51.18579624208668,-23.363738518041337],[-51.183038931219606,-23.36359078095478],[-51.18071077379488,-23.3637582163071],[-51.179069261877906,-23.361581540240305],[-51.177642326682125,-23.35836078207346],[-51.16683838877106,-23.356262814974126],[-51.166141014427254,-23.358538073547532],[-51.16475699457568,-23.360389770338585],[-51.16076586756186,-23.359217688669915],[-51.15983245882475,-23.36660458495632],[-51.162042599052846,-23.36861374957437],[-51.16276143106877,-23.374158492021696],[-51.158448438973174,-23.37580315788644],[-51.155047397942575,-23.376305417047273],[-51.15396378550066,-23.37903334042617],[-51.15298746141932,-23.381052164536694],[-51.15118501696147,-23.382076336717283],[-51.149167995782435,-23.382509637949354],[-51.14721534761976,-23.382155118864866],[-51.14517686876862,-23.382588419839323],[-51.14410398516276,-23.38376029492248],[-51.14512322458833,-23.388083341091015],[-51.141797285410156,-23.389402876058366],[-51.14030597719799,-23.38880219385971],[-51.14068148646006,-23.391608636504017],[-51.14127157244328,-23.393538646762796],[-51.14093897852546,-23.394434713394368],[-51.140456180902824,-23.39536031431835],[-51.13939402613302,-23.395104297688697],[-51.13738773379004,-23.393154616350518],[-51.13608954462695,-23.389796764546077],[-51.13428710016909,-23.389757375749994],[-51.132162790629465,-23.390072485790583],[-51.13172290835106,-23.39285920758337],[-51.12259266886514,-23.38864463742227],[-51.12228153261944,-23.391657871809155],[-51.11882684740854,-23.393174310244916],[-51.115683298443365,-23.393351555162592],[-51.10903142008701,-23.392750890870328]],[[-51.13829432042955,-23.41600741009485],[-51.133310776080314,-23.418665600378624],[-51.132087688769644,-23.416440600302334],[-51.13002238782791,-23.418291487939495],[-51.12868664773901,-23.419010176689888],[-51.12824140104259,-23.42102839134528],[-51.12696466955051,-23.421860280620358],[-51.12532852205271,-23.422692164660027],[-51.1244541219139,-23.420969322085504],[-51.1215144208339,-23.424109801147612],[-51.12063465627703,-23.423268081315832],[-51.11970661195797,-23.423120410617486],[-51.11977098497433,-23.42156985833077],[-51.1188000253111,-23.421545246243184],[-51.11643431696008,-23.420836416154565],[-51.11942766222045,-23.419167696990424],[-51.11787198099193,-23.416775337218567],[-51.116546969738685,-23.41730697646229],[-51.115699391690086,-23.415702207051474],[-51.115120034542905,-23.413088261827834],[-51.119078975048524,-23.411114231305813],[-51.119599323597356,-23.41169512115064],[-51.12052200349841,-23.41489489238112],[-51.12147686990764,-23.417139608782644],[-51.12308619531643,-23.418626220171642],[-51.12754939111684,-23.41653905242448],[-51.12803218873949,-23.417395582795194],[-51.13119719537679,-23.415574218468866],[-51.13080022844262,-23.414766903017576],[-51.13278506311348,-23.41264029239725],[-51.13521514448077,-23.411055157619415],[-51.13585887464424,-23.410956701416854],[-51.13682446988958,-23.411188073376714],[-51.137205343569626,-23.411576974270133],[-51.13730190309418,-23.41324086645236],[-51.137430649126884,-23.414707830961888],[-51.13829432042955,-23.41600741009485]],[[-51.18929065852,-23.61469318354],[-51.18868716149,-23.61385268133],[-51.18817754178,-23.61338573333],[-51.18731118826,-23.61301708899],[-51.18628926663,-23.61314488581],[-51.18401743559,-23.61395590119],[-51.18348904042,-23.61396573165],[-51.18183143525,-23.61283522407],[-51.18140496401,-23.61344471632],[-51.18062980561,-23.61313505529],[-51.18001021533,-23.61409352754],[-51.17865838198,-23.61328742827],[-51.18064589886,-23.61060367181],[-51.17972321896,-23.61018095058],[-51.18061639456,-23.60849005203],[-51.1821157494,-23.60850479833],[-51.18260927586,-23.60775273479],[-51.18319936184,-23.60804274673],[-51.18415154605,-23.60627808786],[-51.18511177687,-23.60666149766],[-51.18649043231,-23.60469528171],[-51.18902243762,-23.60610112912],[-51.18821241049,-23.60741848294],[-51.18918873458,-23.60801816947],[-51.188899056,-23.60953211999],[-51.18962325244,-23.60992535103],[-51.1911896625,-23.6111935131],[-51.1901489654,-23.61244691705],[-51.19054056792,-23.6127565797],[-51.19029380469,-23.61377895281],[-51.18929065852,-23.61469318354]],[[-51.08005769639,-23.52984412096],[-51.07962317853,-23.52205317842],[-51.08468182473,-23.52194496764],[-51.08581908135,-23.52404030606],[-51.0858941832,-23.52703569673],[-51.08579494147,-23.52777346722],[-51.08530141501,-23.52806365581],[-51.08513511805,-23.52856533627],[-51.08512438922,-23.52981952906],[-51.08470864682,-23.53023759067],[-51.08343459754,-23.53023759067],[-51.08329512267,-23.52978018202],[-51.08005769639,-23.52984412096]]],"terms_url":"http://siglon.londrina.pr.gov.br/","terms_text":"Prefeitura do Londrinas, PR"},{"id":"NSW_LPI_BaseMap","name":"LPI NSW Base Map","type":"tms","template":"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Base_Map/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,19],"polygon":[[[140.9948644,-28.952966],[148.9611382,-28.8997729],[148.9870097,-28.4862285],[151.013609,-28.4786485],[151.1084711,-28.7032909],[151.8759917,-28.683118],[151.9334839,-28.4078753],[152.25544,-28.2332683],[153.0660798,-28.2104723],[153.1408196,-28.1090981],[153.4735137,-28.1164808],[153.3576523,-27.693606],[159.4938303,-27.699252],[159.4856997,-37.8474137],[149.5256879,-37.8281502],[149.9159578,-37.4869999],[148.0485886,-36.8131741],[147.9680996,-36.1567945],[146.7147701,-36.2866613],[145.3004625,-36.1567945],[144.5300673,-36.1475101],[142.8397973,-35.0254303],[142.356863,-34.7802471],[141.9774146,-34.4016159],[140.9950258,-34.1371824],[140.9948644,-28.952966]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017"},{"id":"NSW_LPI_Imagery","name":"LPI NSW Imagery","type":"tms","template":"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Imagery/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,21],"polygon":[[[140.9868688,-28.9887829],[148.9951472,-28.9727491],[148.9966717,-28.4915066],[151.0029027,-28.4930697],[151.0029027,-28.7261663],[151.4915093,-28.7323921],[151.4918687,-28.7155337],[151.9228213,-28.719635],[151.9251607,-28.4897139],[151.9955886,-28.4898718],[151.9989947,-28.1192742],[152.4967606,-28.122091],[152.4968241,-28.1146398],[153.0044563,-28.1154389],[153.0044563,-28.120397],[153.5038629,-28.119345],[153.5039264,-28.1227063],[153.5919395,-28.1223619],[153.5926582,-28.1776872],[153.6111186,-28.1757867],[153.6113881,-28.1825173],[153.7426846,-28.2162084],[153.7787253,-28.710911],[152.6237954,-32.5877239],[152.3123961,-32.6328837],[151.4141942,-33.5790388],[150.8929925,-35.2648721],[150.4620695,-35.7777256],[150.0156501,-37.5103569],[149.9918121,-37.5126787],[149.519778,-37.5130704],[149.5199577,-37.5216919],[149.4462958,-37.5353701],[149.063344,-37.5357975],[148.9836635,-37.5217631],[148.9816872,-37.5191982],[148.9863847,-37.2584972],[148.4875376,-37.265846],[148.4824774,-37.0092669],[147.994386,-37.014339],[147.988288,-36.5332184],[147.9529707,-36.5260725],[147.9486513,-36.0685992],[147.5034997,-36.0716798],[147.5047701,-36.2651047],[146.4919996,-36.266129],[146.4922536,-36.2565],[145.9929826,-36.2534267],[145.9965866,-36.0188147],[145.9831568,-36.0187058],[145.9624506,-36.0219026],[145.946236,-36.0120936],[145.9454275,-36.0060259],[145.5041534,-36.0013564],[145.5037941,-36.0109125],[145.0072008,-36.0036213],[145.0035404,-36.1520424],[144.4860806,-36.1423149],[144.4874127,-36.0137522],[143.9874676,-36.0024134],[143.9932853,-35.5723753],[143.4971691,-35.5837101],[143.4917967,-35.4065648],[143.4613438,-35.3674934],[143.4585591,-35.3555888],[143.4897755,-35.3396522],[143.4895509,-35.332214],[143.4316994,-35.2570613],[143.2505542,-35.2606556],[143.2438356,-35.0132729],[142.9933305,-35.0177207],[142.9919767,-34.7961882],[142.4971375,-34.8032323],[142.4973172,-34.8007613],[142.4211401,-34.8017571],[142.4209155,-34.7838306],[142.2330892,-34.7859191],[142.2307707,-34.7807542],[142.2269959,-34.5061271],[141.9975302,-34.5083733],[141.9945959,-34.2526687],[141.4982345,-34.2556921],[141.498171,-34.2522794],[140.9945397,-34.2528411],[140.9868688,-28.9887829]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017","best":true},{"id":"NSW_LPI_TopographicMap","name":"LPI NSW Topographic Map","type":"tms","template":"https://maps.six.nsw.gov.au/arcgis/rest/services/public/NSW_Topo_Map/MapServer/tile/{zoom}/{y}/{x}","scaleExtent":[0,16],"polygon":[[[140.9988422,-28.9992444],[148.9502438,-28.9993736],[148.9498845,-28.9665265],[148.9998308,-28.9665265],[149.0000917,-28.8165829],[149.1000729,-28.8165829],[149.0997046,-28.7488533],[148.9998504,-28.7497444],[148.9998169,-28.5000304],[151.0000514,-28.5005192],[151.0005904,-28.7325849],[151.0239466,-28.7327424],[151.0241262,-28.7418794],[151.0329297,-28.7418794],[151.033828,-28.7505431],[151.999984,-28.7495314],[151.999984,-28.7164478],[152.0334014,-28.7166053],[152.0332217,-28.683196],[152.0000739,-28.6833537],[151.9998769,-28.6416273],[151.9829886,-28.6413908],[151.9831683,-28.624912],[151.9331321,-28.6247543],[151.9334122,-28.500071],[151.9998875,-28.5002289],[151.9998556,-28.3749591],[152.2499739,-28.3750718],[152.2499356,-28.2500066],[152.9997192,-28.2498563],[152.9998989,-28.2832447],[153.1165002,-28.2834029],[153.11659,-28.2498563],[153.1666262,-28.2500146],[153.166716,-28.2331582],[153.2499898,-28.2332373],[153.2500265,-28.1249689],[153.6249628,-28.1250833],[153.6248398,-28.4999134],[153.7497955,-28.4999924],[153.7495877,-28.7497976],[153.6248117,-28.7501127],[153.6249745,-28.9999333],[153.4997672,-29.0000612],[153.4998417,-29.4995077],[153.3747962,-29.500055],[153.3754111,-29.8750302],[153.4999113,-29.8751403],[153.4999113,-30.0000922],[153.2498947,-29.9997621],[153.250025,-30.1917704],[153.2748185,-30.1916151],[153.2748185,-30.2168467],[153.2166077,-30.2166139],[153.2166077,-30.250065],[153.250025,-30.250065],[153.2497502,-30.3751935],[153.1243608,-30.3749743],[153.1246457,-30.6250359],[153.0331676,-30.6250482],[153.0333884,-30.8750837],[153.1249214,-30.8750291],[153.1249344,-31.1250505],[153.0082433,-31.1249736],[153.0082914,-31.2499759],[153.0000019,-31.250003],[152.9999392,-31.6249919],[152.8749386,-31.6250491],[152.8749572,-31.749954],[152.7832899,-31.7500034],[152.7831966,-31.8748579],[152.749914,-31.8750105],[152.7500397,-32.0000207],[152.6249044,-31.9999446],[152.6249078,-32.5000047],[152.4999757,-32.4999569],[152.5000336,-32.5666443],[152.4166699,-32.5663415],[152.4167598,-32.6249954],[152.3498477,-32.624991],[152.3498477,-32.6332294],[152.2830786,-32.6332218],[152.2832583,-32.6249755],[152.2494816,-32.6249755],[152.2498101,-32.874906],[151.8745693,-32.8750443],[151.8748535,-33.0000091],[151.7497706,-33.0001533],[151.7504669,-33.2500398],[151.6252418,-33.2497393],[151.6250828,-33.3751621],[151.499585,-33.3751442],[151.5003127,-33.6249385],[151.3741466,-33.6243658],[151.3727902,-34.001962],[151.2477819,-34.0011194],[151.2477819,-34.2493114],[150.9957327,-34.2501515],[151.0008143,-34.62483],[150.8717407,-34.6265026],[150.872757,-35.1242738],[150.7670589,-35.1234425],[150.7690916,-35.2463774],[150.6257894,-35.2496974],[150.6280314,-35.3751485],[150.4999742,-35.3751485],[150.4959088,-35.6275034],[150.3719169,-35.6250251],[150.3749658,-35.7537957],[150.2672351,-35.7513213],[150.2652024,-35.8741232],[150.2479249,-35.870829],[150.2458922,-36.374885],[150.1229166,-36.374885],[150.1259656,-36.6224345],[150.0253491,-36.6240658],[150.0283981,-36.7471337],[149.9928266,-36.7495768],[150.0040062,-37.1224477],[150.0588879,-37.1273097],[150.0568553,-37.37809],[149.9979083,-37.3732441],[149.9999409,-37.4830073],[149.987745,-37.4846202],[149.9857123,-37.5080043],[148.0684571,-36.80624],[147.9930603,-36.1379955],[147.8148345,-36.0055567],[147.3893924,-36.0113701],[147.3822059,-36.1310306],[146.9972549,-36.1275479],[146.9886311,-36.2528271],[146.4956356,-36.2447132],[146.5042595,-36.126387],[145.0011817,-36.0079505],[145.0154103,-36.2542074],[144.5072465,-36.2476506],[144.4991158,-36.0211037],[143.9965422,-35.9810531],[143.3382568,-35.2331794],[142.4097581,-34.7669434],[142.0361436,-34.3758837],[140.9965216,-34.1385805],[140.9988422,-28.9992444]]],"terms_url":"http://spatialservices.finance.nsw.gov.au/mapping_and_imagery/lpi_web_services","terms_text":"© Land and Property Information 2017"},{"id":"Mapbox","name":"Mapbox Satellite","type":"tms","template":"https://{switch:a,b,c}.tiles.mapbox.com/v4/openstreetmap.map-inh7ifmo/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJncjlmd0t3In0.DmZsIeOW-3x-C5eX-wAqTw","description":"Satellite and aerial imagery.","scaleExtent":[0,19],"terms_url":"http://www.mapbox.com/about/maps/","terms_text":"Terms & Feedback","default":true},{"id":"geodata.md.gov-MD_SixInchImagery","name":"MD Latest 6 Inch Aerial Imagery","type":"tms","template":"http://whoots.mapwarper.net/tms/{zoom}/{x}/{y}/MD_SixInchImagery/http://geodata.md.gov/imap/services/Imagery/MD_SixInchImagery/MapServer/WmsServer","description":"Six Inch resolution aerial imagery for the State of Maryland","scaleExtent":[0,20],"polygon":[[[-76.234131,37.920368],[-76.598053,38.158317],[-76.940002,38.270532],[-77.038193,38.413786],[-77.23526,38.33627],[-77.312164,38.410558],[-77.262726,38.566422],[-77.042999,38.713376],[-77.049866,38.793697],[-76.92627,38.892503],[-77.040939,38.984499],[-77.12162,38.925229],[-77.150116,38.955137],[-77.252426,38.975425],[-77.259293,39.024252],[-77.34581,39.054918],[-77.461853,39.070379],[-77.537384,39.139647],[-77.474213,39.224807],[-77.572746,39.304284],[-77.723465,39.328986],[-77.777023,39.463234],[-77.861481,39.516225],[-77.840881,39.608862],[-77.956238,39.59299],[-78.166351,39.695564],[-78.270035,39.621557],[-78.338699,39.640066],[-78.466415,39.523641],[-78.662796,39.540058],[-78.798752,39.606217],[-78.9814,39.446799],[-79.06723,39.476486],[-79.485054,39.199536],[-79.485569,39.72158],[-75.788359,39.721811],[-75.690994,38.460579],[-75.049238,38.458159],[-75.049839,38.402218],[-75.081511,38.323208],[-75.097733,38.309066],[-75.186996,38.097551],[-75.23798,38.022402],[-75.61821,37.989669],[-75.863686,37.909534],[-76.234131,37.920368]]],"terms_url":"http://imap.maryland.gov/Pages/imagery-products.aspx","terms_text":"DoIT, MD iMap, MDP"},{"id":"geodata.md.gov-MD_ColorBasemap","name":"MD Transportation Basemap","type":"tms","template":"http://whoots.mapwarper.net/tms/{zoom}/{x}/{y}/MD_ColorBasemap/http://geodata.md.gov/imap/services/Transportation/MD_ColorBasemap/MapServer/WmsServer","description":"Maryland State Highway Administration road features and additional Maryland focused landmarks","polygon":[[[-76.234131,37.920368],[-76.598053,38.158317],[-76.940002,38.270532],[-77.038193,38.413786],[-77.23526,38.33627],[-77.312164,38.410558],[-77.262726,38.566422],[-77.042999,38.713376],[-77.049866,38.793697],[-76.92627,38.892503],[-77.040939,38.984499],[-77.12162,38.925229],[-77.150116,38.955137],[-77.252426,38.975425],[-77.259293,39.024252],[-77.34581,39.054918],[-77.461853,39.070379],[-77.537384,39.139647],[-77.474213,39.224807],[-77.572746,39.304284],[-77.723465,39.328986],[-77.777023,39.463234],[-77.861481,39.516225],[-77.840881,39.608862],[-77.956238,39.59299],[-78.166351,39.695564],[-78.270035,39.621557],[-78.338699,39.640066],[-78.466415,39.523641],[-78.662796,39.540058],[-78.798752,39.606217],[-78.9814,39.446799],[-79.06723,39.476486],[-79.485054,39.199536],[-79.485569,39.72158],[-75.788359,39.721811],[-75.690994,38.460579],[-75.049238,38.458159],[-75.049839,38.402218],[-75.081511,38.323208],[-75.097733,38.309066],[-75.186996,38.097551],[-75.23798,38.022402],[-75.61821,37.989669],[-75.863686,37.909534],[-76.234131,37.920368]]],"terms_url":"http://imap.maryland.gov/Pages/imagery-products.aspx","terms_text":"DoIT, MD iMap, MDP"},{"id":"New_and_Misaligned_TIGER_Roads-2013","name":"New & Misaligned TIGER Roads","type":"tms","template":"http://{switch:a,b,c}.tiles.mapbox.com/v4/enf.e0b8291e/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJhNVlHd29ZIn0.ti6wATGDWOmCnCYen-Ip7Q","description":"At zoom level 16+, public domain map data from the US Census. At lower zooms, only changes since 2006 minus changes already incorporated into OpenStreetMap","scaleExtent":[0,22],"polygon":[[[-124.7617886,48.4130148],[-124.6059492,45.90245],[-124.9934269,40.0557614],[-122.5369737,36.8566086],[-119.9775867,33.0064099],[-117.675935,32.4630223],[-114.8612307,32.4799891],[-111.0089311,31.336015],[-108.1992687,31.3260016],[-108.1871123,31.7755116],[-106.5307225,31.7820947],[-106.4842052,31.7464455],[-106.429317,31.7520583],[-106.2868855,31.5613291],[-106.205248,31.446704],[-105.0205259,30.5360988],[-104.5881916,29.6997856],[-103.2518856,28.8908685],[-102.7173632,29.3920567],[-102.1513983,29.7475702],[-101.2552871,29.4810523],[-100.0062436,28.0082173],[-99.2351068,26.4475962],[-98.0109067,25.9928035],[-97.435024,25.8266009],[-96.9555259,25.9821589],[-96.8061741,27.7978168],[-95.5563349,28.5876066],[-93.7405308,29.4742093],[-90.9028456,28.8564513],[-88.0156706,28.9944338],[-88.0162494,30.0038862],[-86.0277506,30.0047454],[-84.0187909,28.9961781],[-81.9971976,25.9826768],[-81.9966618,25.0134917],[-84.0165592,25.0125783],[-84.0160068,24.0052745],[-80.0199985,24.007096],[-79.8901116,26.8550713],[-80.0245309,32.0161282],[-75.4147385,35.0531894],[-74.0211163,39.5727927],[-72.002019,40.9912464],[-69.8797398,40.9920457],[-69.8489304,43.2619916],[-66.9452845,44.7104937],[-67.7596632,47.0990024],[-69.2505131,47.5122328],[-70.4614886,46.2176574],[-71.412273,45.254878],[-72.0222508,45.0059846],[-75.0798841,44.9802854],[-76.9023061,43.8024568],[-78.7623935,43.6249578],[-79.15798,43.4462589],[-79.0060087,42.8005317],[-82.662475,41.6889458],[-82.1761642,43.588535],[-83.2813977,46.138853],[-87.5064535,48.0142702],[-88.3492194,48.2963271],[-89.4353148,47.9837822],[-93.9981078,49.0067142],[-95.1105379,49.412004],[-96.0131199,49.0060547],[-123.3228926,49.0042878],[-123.2275233,48.1849927],[-124.7617886,48.4130148]],[[-160.5787616,22.5062947],[-160.5782192,21.4984647],[-158.7470604,21.2439843],[-157.5083185,20.995803],[-155.9961942,18.7790194],[-154.6217803,18.7586966],[-154.6890176,19.8805722],[-156.2927622,21.2225888],[-157.5047384,21.9984962],[-159.0093692,22.5070181],[-160.5787616,22.5062947]],[[-167.1571546,68.721974],[-164.8553982,67.0255078],[-168.002195,66.0017503],[-169.0087448,66.001546],[-169.0075381,64.9987675],[-172.5143281,63.8767267],[-173.8197023,59.74014],[-162.5018149,58.0005815],[-160.0159024,58.0012389],[-160.0149725,57.000035],[-160.5054788,56.9999017],[-165.8092575,54.824847],[-178.000097,52.2446469],[-177.9992996,51.2554252],[-171.4689067,51.8215329],[-162.40251,53.956664],[-159.0075717,55.002502],[-158.0190709,55.0027849],[-151.9963213,55.9991902],[-151.500341,57.9987853],[-151.5012894,58.9919816],[-138.5159989,58.9953194],[-138.5150471,57.9986434],[-133.9948193,54.0031685],[-130.0044418,54.0043387],[-130.0070826,57.0000507],[-131.975877,56.9995156],[-135.1229873,59.756601],[-138.0071813,59.991805],[-139.1715881,60.4127229],[-140.9874011,61.0118551],[-140.9683975,69.9535069],[-156.176891,71.5633329],[-160.413634,70.7397728],[-163.0218273,69.9707435],[-164.9717003,68.994689],[-167.1571546,68.721974]]],"overlay":true},{"id":"geodata.state.nj.us-Infrared2015","name":"NJ 2015 Aerial Imagery (Infrared)","type":"tms","template":"http://whoots.mapwarper.net/tms/{zoom}/{x}/{y}/Infrared2015/http://geodata.state.nj.us/imagerywms/Infrared2015","description":"Digital orthophotography of New Jersey, Near Infrared, 1 foot resolution","scaleExtent":[0,20],"polygon":[[[-74.86599,40.085427],[-74.840927,40.107225],[-74.822903,40.130329],[-74.788055,40.124685],[-74.726086,40.149488],[-74.729176,40.16392],[-74.763336,40.191725],[-74.775524,40.214276],[-74.844017,40.247957],[-74.868393,40.291573],[-74.944611,40.33817],[-74.967098,40.395195],[-75.002632,40.406046],[-75.026836,40.402516],[-75.06134,40.416502],[-75.074215,40.455046],[-75.069065,40.536503],[-75.102367,40.567024],[-75.135927,40.573609],[-75.16777,40.559069],[-75.197639,40.573674],[-75.203733,40.618318],[-75.205064,40.691312],[-75.198326,40.753889],[-75.172405,40.780671],[-75.1367,40.777292],[-75.090179,40.822383],[-75.100994,40.839269],[-75.096874,40.850956],[-75.068464,40.850372],[-75.057049,40.867574],[-75.13773,40.973094],[-75.135155,40.994411],[-75.039024,41.03819],[-74.981518,41.112598],[-74.905472,41.170384],[-74.84024,41.278645],[-74.798012,41.322685],[-74.757156,41.347691],[-74.695702,41.360576],[-74.041054,41.059088],[-74.041051,41.059087],[-74.04105,41.059087],[-74.04105,41.059086],[-74.041049,41.059086],[-73.890266,40.998039],[-73.933406,40.882078],[-73.933407,40.882077],[-73.933408,40.882076],[-73.933408,40.882075],[-74.011459,40.75558],[-74.024543,40.709436],[-74.066048,40.651732],[-74.152222,40.638967],[-74.183121,40.644568],[-74.200459,40.631281],[-74.199257,40.598444],[-74.21505,40.558026],[-74.246807,40.548113],[-74.24715,40.519541],[-74.267578,40.489651],[-74.26054,40.469282],[-74.199257,40.445641],[-74.181061,40.460401],[-74.136429,40.459095],[-73.997555,40.413496],[-74.026566,40.47777],[-74.003906,40.484037],[-73.977814,40.452042],[-73.964767,40.33189],[-74.088364,39.756824],[-74.356842,39.383406],[-74.609528,39.215231],[-74.776382,38.998909],[-74.863586,38.931639],[-74.931221,38.920688],[-74.980316,38.930304],[-74.960747,39.00798],[-74.905472,39.100226],[-74.899979,39.164141],[-75.101166,39.201398],[-75.135498,39.171062],[-75.425949,39.378099],[-75.475044,39.43195],[-75.543365,39.457403],[-75.552292,39.482845],[-75.538902,39.541911],[-75.519676,39.56997],[-75.571175,39.608069],[-75.577698,39.625524],[-75.539932,39.656456],[-75.472984,39.747454],[-75.466253,39.750761],[-75.466252,39.750762],[-75.466252,39.750763],[-75.466251,39.750764],[-75.466251,39.750765],[-75.46625,39.750767],[-75.466249,39.750768],[-75.466249,39.750769],[-75.465088,39.764478],[-75.415041,39.801786],[-75.324669,39.858891],[-75.246048,39.864689],[-75.143738,39.900255],[-75.142365,39.957912],[-75.07061,39.987117],[-75.056534,40.008683],[-74.935341,40.072555],[-74.86599,40.085427]]],"terms_url":"https://njgin.state.nj.us/NJ_NJGINExplorer/ShowMetadata.jsp?docId={E30775F2-6370-4525-8E68-C371ED29BBB3}","terms_text":"NJ Office of Information Technology (NJOIT), Office of Geographic Information Systems (OGIS)"},{"id":"geodata.state.nj.us-Natural2015","name":"NJ 2015 Aerial Imagery (Natural Color)","type":"tms","template":"http://whoots.mapwarper.net/tms/{zoom}/{x}/{y}/Natural2015/http://geodata.state.nj.us/imagerywms/Natural2015","description":"Digital orthophotography of New Jersey, Natural Color, 1 foot resolution","scaleExtent":[0,20],"polygon":[[[-74.86599,40.085427],[-74.840927,40.107225],[-74.822903,40.130329],[-74.788055,40.124685],[-74.726086,40.149488],[-74.729176,40.16392],[-74.763336,40.191725],[-74.775524,40.214276],[-74.844017,40.247957],[-74.868393,40.291573],[-74.944611,40.33817],[-74.967098,40.395195],[-75.002632,40.406046],[-75.026836,40.402516],[-75.06134,40.416502],[-75.074215,40.455046],[-75.069065,40.536503],[-75.102367,40.567024],[-75.135927,40.573609],[-75.16777,40.559069],[-75.197639,40.573674],[-75.203733,40.618318],[-75.205064,40.691312],[-75.198326,40.753889],[-75.172405,40.780671],[-75.1367,40.777292],[-75.090179,40.822383],[-75.100994,40.839269],[-75.096874,40.850956],[-75.068464,40.850372],[-75.057049,40.867574],[-75.13773,40.973094],[-75.135155,40.994411],[-75.039024,41.03819],[-74.981518,41.112598],[-74.905472,41.170384],[-74.84024,41.278645],[-74.798012,41.322685],[-74.757156,41.347691],[-74.695702,41.360576],[-74.041054,41.059088],[-74.041051,41.059087],[-74.04105,41.059087],[-74.04105,41.059086],[-74.041049,41.059086],[-73.890266,40.998039],[-73.933406,40.882078],[-73.933407,40.882077],[-73.933408,40.882076],[-73.933408,40.882075],[-74.011459,40.75558],[-74.024543,40.709436],[-74.066048,40.651732],[-74.152222,40.638967],[-74.183121,40.644568],[-74.200459,40.631281],[-74.199257,40.598444],[-74.21505,40.558026],[-74.246807,40.548113],[-74.24715,40.519541],[-74.267578,40.489651],[-74.26054,40.469282],[-74.199257,40.445641],[-74.181061,40.460401],[-74.136429,40.459095],[-73.997555,40.413496],[-74.026566,40.47777],[-74.003906,40.484037],[-73.977814,40.452042],[-73.964767,40.33189],[-74.088364,39.756824],[-74.356842,39.383406],[-74.609528,39.215231],[-74.776382,38.998909],[-74.863586,38.931639],[-74.931221,38.920688],[-74.980316,38.930304],[-74.960747,39.00798],[-74.905472,39.100226],[-74.899979,39.164141],[-75.101166,39.201398],[-75.135498,39.171062],[-75.425949,39.378099],[-75.475044,39.43195],[-75.543365,39.457403],[-75.552292,39.482845],[-75.538902,39.541911],[-75.519676,39.56997],[-75.571175,39.608069],[-75.577698,39.625524],[-75.539932,39.656456],[-75.472984,39.747454],[-75.466253,39.750761],[-75.466252,39.750762],[-75.466252,39.750763],[-75.466251,39.750764],[-75.466251,39.750765],[-75.46625,39.750767],[-75.466249,39.750768],[-75.466249,39.750769],[-75.465088,39.764478],[-75.415041,39.801786],[-75.324669,39.858891],[-75.246048,39.864689],[-75.143738,39.900255],[-75.142365,39.957912],[-75.07061,39.987117],[-75.056534,40.008683],[-74.935341,40.072555],[-74.86599,40.085427]]],"terms_url":"https://njgin.state.nj.us/NJ_NJGINExplorer/ShowMetadata.jsp?docId={CDC67AB8-ADA1-4B4B-9087-67A82CB9151C}","terms_text":"NJ Office of Information Technology (NJOIT), Office of Geographic Information Systems (OGIS)"},{"id":"NLS-Bartholomew-hfinch-hist","name":"NLS - Bartholomew Half Inch, 1897-1907","type":"tms","template":"http://geo.nls.uk/mapdata2/bartholomew/great_britain/{zoom}/{x}/{-y}.png","scaleExtent":[0,15],"polygon":[[[-6.4585407,49.9044128],[-6.3872009,49.9841116],[-6.2296827,49.9896159],[-6.2171269,49.8680087],[-6.4551164,49.8591793],[-6.4585407,49.9044128]],[[-1.4495137,60.8634056],[-0.7167114,60.8545122],[-0.7349744,60.4359756],[-0.6938826,60.4168218],[-0.7258429,60.3942735],[-0.7395401,60.0484714],[-0.9267357,60.0461918],[-0.9381501,59.8266157],[-1.4586452,59.831205],[-1.4455187,60.0535999],[-1.463211,60.0535999],[-1.4643524,60.0630002],[-1.5716475,60.0638546],[-1.5693646,60.1790005],[-1.643558,60.1807033],[-1.643558,60.1892162],[-1.8216221,60.1894999],[-1.8204807,60.3615507],[-1.8415973,60.3697345],[-1.8216221,60.3832755],[-1.8179852,60.5934321],[-1.453168,60.5934321],[-1.4495137,60.8634056]],[[-4.9089213,54.4242078],[-4.282598,54.4429861],[-4.2535417,54.029769],[-4.8766366,54.0221831],[-4.9089213,54.4242078]],[[-5.8667408,59.1444603],[-5.7759966,59.1470945],[-5.7720016,59.1014052],[-5.8621751,59.0990605],[-5.8667408,59.1444603]],[[-1.7065887,59.5703599],[-1.5579165,59.5693481],[-1.5564897,59.4965695],[-1.7054472,59.4975834],[-1.7065887,59.5703599]],[[-7.6865827,58.2940975],[-7.5330594,58.3006957],[-7.5256401,58.2646905],[-7.6797341,58.2577853],[-7.6865827,58.2940975]],[[-4.5338281,59.0359871],[-4.481322,59.0371616],[-4.4796099,59.0186583],[-4.5332574,59.0180707],[-4.5338281,59.0359871]],[[-8.6710698,57.8769896],[-8.4673234,57.8897332],[-8.4467775,57.7907],[-8.6510947,57.7779213],[-8.6710698,57.8769896]],[[-5.2395519,50.3530581],[-5.7920073,50.3384899],[-5.760047,49.9317027],[-4.6551363,49.9581461],[-4.677965,50.2860073],[-4.244219,50.2801723],[-4.2487848,50.2042525],[-3.3812929,50.2042525],[-3.4223846,50.5188201],[-3.1164796,50.5246258],[-3.1210453,50.6579592],[-2.6736357,50.6619495],[-2.5953453,50.6394325],[-2.5905026,50.5728419],[-2.4791203,50.5733545],[-2.4758919,50.5066704],[-2.3967943,50.5056438],[-2.401637,50.5723293],[-1.0400296,50.5718167],[-1.0335726,50.7059289],[-0.549302,50.7038843],[-0.5460736,50.7886618],[-0.0924734,50.7856002],[-0.0876307,50.7181949],[0.4789659,50.7120623],[0.487037,50.8182467],[0.9761503,50.8049868],[0.9922927,51.0126311],[1.4491213,51.0004424],[1.4781775,51.4090372],[1.0229632,51.4271576],[1.035877,51.7640881],[1.6105448,51.7500992],[1.646058,52.1560003],[1.7267698,52.1540195],[1.749369,52.4481811],[1.7870672,52.4811624],[1.759102,52.522505],[1.7933451,52.9602749],[0.3798147,52.9958468],[0.3895238,53.2511239],[0.3478614,53.2511239],[0.3238912,53.282186],[0.3461492,53.6538501],[0.128487,53.6575466],[0.116582,53.6674703],[0.1350586,54.0655731],[-0.0609831,54.065908],[-0.0414249,54.4709448],[-0.5662701,54.4771794],[-0.5592078,54.6565127],[-1.1665638,54.6623485],[-1.1637389,54.842611],[-1.3316194,54.843909],[-1.3257065,55.2470842],[-1.529453,55.2487108],[-1.524178,55.6540122],[-1.7638798,55.6540122],[-1.7733693,55.9719116],[-2.1607858,55.9682981],[-2.1543289,56.0621387],[-2.4578051,56.0585337],[-2.4190635,56.641717],[-2.0962164,56.641717],[-2.0833025,57.0021322],[-1.9283359,57.0126802],[-1.9180966,57.3590895],[-1.7502161,57.3625721],[-1.7695869,57.7608634],[-3.6937554,57.7574187],[-3.7066693,57.9806386],[-3.5969013,57.9772149],[-3.6033582,58.1207277],[-3.0222335,58.1309566],[-3.0286905,58.5410788],[-2.8478961,58.530968],[-2.86081,58.8430508],[-2.679624,58.8414991],[-2.6841897,58.885175],[-2.6339665,58.9052239],[-2.679624,58.9335083],[-2.6887555,59.0229231],[-2.3668703,59.0229231],[-2.3702946,59.2652861],[-2.3429001,59.2821989],[-2.3714361,59.2996861],[-2.3737189,59.3707083],[-2.3429001,59.385825],[-2.3725775,59.400354],[-2.3714361,59.4259098],[-3.0734196,59.4230067],[-3.0711368,59.3433649],[-3.103097,59.3311405],[-3.0745611,59.3136695],[-3.0722782,59.232603],[-3.3850319,59.1484167],[-3.3747589,58.9352753],[-3.5653789,58.9323303],[-3.554829,58.69759],[-5.2808579,58.6667732],[-5.2534159,58.3514125],[-5.5068508,58.3437887],[-5.4761804,58.0323557],[-5.8974958,58.0212436],[-5.8522972,57.6171758],[-6.1396311,57.6137174],[-6.1541592,57.7423183],[-6.2913692,57.7380102],[-6.3365678,58.1398784],[-6.1121891,58.1466944],[-6.1473778,58.5106285],[-6.2934817,58.5416182],[-6.8413713,58.2977321],[-7.0057382,58.2929331],[-7.1016189,58.2064403],[-7.2573132,58.1793148],[-7.2531092,58.1004928],[-7.4070698,58.0905566],[-7.391347,57.7911354],[-7.790991,57.7733151],[-7.7624215,57.5444165],[-7.698501,57.1453194],[-7.7943817,57.1304547],[-7.716764,56.7368628],[-7.0122067,56.7654359],[-6.979922,56.5453858],[-7.0638622,56.5453858],[-7.0444914,56.3562587],[-6.500676,56.3812917],[-6.4491433,55.9793649],[-6.563287,55.9691456],[-6.5393742,55.7030135],[-6.5595521,55.6907321],[-6.5345315,55.6761713],[-6.5216176,55.5704434],[-5.8912587,55.5923416],[-5.8560127,55.2320733],[-5.2293639,55.2515958],[-5.1837064,54.6254139],[-3.6655956,54.6518373],[-3.6496155,54.4320023],[-3.5400375,54.4306744],[-3.530906,54.0290181],[-3.0697656,54.030359],[-3.0675737,53.8221388],[-3.0804876,53.7739911],[-3.0619239,53.7477488],[-3.0611168,53.6737049],[-3.2144691,53.6708361],[-3.2057699,53.4226163],[-3.2799632,53.355224],[-3.2896655,53.3608441],[-3.3327547,53.364931],[-3.3761293,53.3540318],[-4.0888976,53.3433102],[-4.0945474,53.4612036],[-4.697412,53.4448624],[-4.6882805,53.3318598],[-4.7202407,53.2895771],[-4.6837148,53.2486184],[-4.6768661,53.1542644],[-4.8480816,53.1446807],[-4.8178336,52.7440299],[-4.2545751,52.7558939],[-4.228876,52.254876],[-4.2607571,52.2536408],[-4.2724603,52.2432637],[-4.8136263,52.230095],[-4.8079191,52.1138892],[-5.3889104,52.0991668],[-5.3717888,51.9129667],[-5.4208706,51.9101502],[-5.414022,51.8453218],[-5.3683645,51.8474373],[-5.3466772,51.5595332],[-4.773676,51.5758518],[-4.7656859,51.4885146],[-4.1915432,51.4970427],[-4.1869775,51.4344663],[-3.6151177,51.4444274],[-3.6105519,51.3746543],[-3.1494115,51.3789292],[-3.1494115,51.2919281],[-4.3038735,51.2745907],[-4.2861169,51.0508721],[-4.8543277,51.0366633],[-4.8372201,50.7212787],[-5.2618345,50.7082694],[-5.2395519,50.3530581]],[[-2.1502671,60.171318],[-2.0030218,60.1696146],[-2.0013096,60.0997023],[-2.148555,60.1011247],[-2.1502671,60.171318]],[[-6.2086011,59.1163488],[-6.1229934,59.1166418],[-6.121852,59.0714985],[-6.2097426,59.0714985],[-6.2086011,59.1163488]],[[-4.4159559,59.0889036],[-4.4212022,59.0770848],[-4.3971904,59.0779143],[-4.3913388,59.0897328],[-4.4159559,59.0889036]]],"terms_url":"http://geo.nls.uk/maps/","terms_text":"National Library of Scotland Historic Maps"},{"id":"NLS-OS-7th_Series","name":"NLS - OS 1-inch 7th Series 1955-61","type":"tms","template":"http://geo.nls.uk/mapdata2/os/seventh/{zoom}/{x}/{-y}.png","scaleExtent":[5,16],"polygon":[[[-6.4585407,49.9044128],[-6.3872009,49.9841116],[-6.2296827,49.9896159],[-6.2171269,49.8680087],[-6.4551164,49.8591793],[-6.4585407,49.9044128]],[[-1.4495137,60.8634056],[-0.7167114,60.8545122],[-0.7349744,60.4359756],[-0.6938826,60.4168218],[-0.7258429,60.3942735],[-0.7395401,60.0484714],[-0.9267357,60.0461918],[-0.9381501,59.8266157],[-1.4586452,59.831205],[-1.4455187,60.0535999],[-1.463211,60.0535999],[-1.4643524,60.0630002],[-1.5716475,60.0638546],[-1.5693646,60.1790005],[-1.643558,60.1807033],[-1.643558,60.1892162],[-1.8216221,60.1894999],[-1.8204807,60.3615507],[-1.8415973,60.3697345],[-1.8216221,60.3832755],[-1.8179852,60.5934321],[-1.453168,60.5934321],[-1.4495137,60.8634056]],[[-4.9089213,54.4242078],[-4.282598,54.4429861],[-4.2535417,54.029769],[-4.8766366,54.0221831],[-4.9089213,54.4242078]],[[-5.8667408,59.1444603],[-5.7759966,59.1470945],[-5.7720016,59.1014052],[-5.8621751,59.0990605],[-5.8667408,59.1444603]],[[-1.7065887,59.5703599],[-1.5579165,59.5693481],[-1.5564897,59.4965695],[-1.7054472,59.4975834],[-1.7065887,59.5703599]],[[-7.6865827,58.2940975],[-7.5330594,58.3006957],[-7.5256401,58.2646905],[-7.6797341,58.2577853],[-7.6865827,58.2940975]],[[-4.5338281,59.0359871],[-4.481322,59.0371616],[-4.4796099,59.0186583],[-4.5332574,59.0180707],[-4.5338281,59.0359871]],[[-8.6710698,57.8769896],[-8.4673234,57.8897332],[-8.4467775,57.7907],[-8.6510947,57.7779213],[-8.6710698,57.8769896]],[[-5.2395519,50.3530581],[-5.7920073,50.3384899],[-5.760047,49.9317027],[-4.6551363,49.9581461],[-4.677965,50.2860073],[-4.244219,50.2801723],[-4.2487848,50.2042525],[-3.3812929,50.2042525],[-3.4223846,50.5188201],[-3.1164796,50.5246258],[-3.1210453,50.6579592],[-2.6736357,50.6619495],[-2.5953453,50.6394325],[-2.5905026,50.5728419],[-2.4791203,50.5733545],[-2.4758919,50.5066704],[-2.3967943,50.5056438],[-2.401637,50.5723293],[-1.0400296,50.5718167],[-1.0335726,50.7059289],[-0.549302,50.7038843],[-0.5460736,50.7886618],[-0.0924734,50.7856002],[-0.0876307,50.7181949],[0.4789659,50.7120623],[0.487037,50.8182467],[0.9761503,50.8049868],[0.9922927,51.0126311],[1.4491213,51.0004424],[1.4781775,51.4090372],[1.0229632,51.4271576],[1.035877,51.7640881],[1.6105448,51.7500992],[1.646058,52.1560003],[1.7267698,52.1540195],[1.749369,52.4481811],[1.7870672,52.4811624],[1.759102,52.522505],[1.7933451,52.9602749],[0.3798147,52.9958468],[0.3895238,53.2511239],[0.3478614,53.2511239],[0.3238912,53.282186],[0.3461492,53.6538501],[0.128487,53.6575466],[0.116582,53.6674703],[0.1350586,54.0655731],[-0.0609831,54.065908],[-0.0414249,54.4709448],[-0.5662701,54.4771794],[-0.5592078,54.6565127],[-1.1665638,54.6623485],[-1.1637389,54.842611],[-1.3316194,54.843909],[-1.3257065,55.2470842],[-1.529453,55.2487108],[-1.524178,55.6540122],[-1.7638798,55.6540122],[-1.7733693,55.9719116],[-2.1607858,55.9682981],[-2.1543289,56.0621387],[-2.4578051,56.0585337],[-2.4190635,56.641717],[-2.0962164,56.641717],[-2.0833025,57.0021322],[-1.9283359,57.0126802],[-1.9180966,57.3590895],[-1.7502161,57.3625721],[-1.7695869,57.7608634],[-3.6937554,57.7574187],[-3.7066693,57.9806386],[-3.5969013,57.9772149],[-3.6033582,58.1207277],[-3.0222335,58.1309566],[-3.0286905,58.5410788],[-2.8478961,58.530968],[-2.86081,58.8430508],[-2.679624,58.8414991],[-2.6841897,58.885175],[-2.6339665,58.9052239],[-2.679624,58.9335083],[-2.6887555,59.0229231],[-2.3668703,59.0229231],[-2.3702946,59.2652861],[-2.3429001,59.2821989],[-2.3714361,59.2996861],[-2.3737189,59.3707083],[-2.3429001,59.385825],[-2.3725775,59.400354],[-2.3714361,59.4259098],[-3.0734196,59.4230067],[-3.0711368,59.3433649],[-3.103097,59.3311405],[-3.0745611,59.3136695],[-3.0722782,59.232603],[-3.3850319,59.1484167],[-3.3747589,58.9352753],[-3.5653789,58.9323303],[-3.554829,58.69759],[-5.2808579,58.6667732],[-5.2534159,58.3514125],[-5.5068508,58.3437887],[-5.4761804,58.0323557],[-5.8974958,58.0212436],[-5.8522972,57.6171758],[-6.1396311,57.6137174],[-6.1541592,57.7423183],[-6.2913692,57.7380102],[-6.3365678,58.1398784],[-6.1121891,58.1466944],[-6.1473778,58.5106285],[-6.2934817,58.5416182],[-6.8413713,58.2977321],[-7.0057382,58.2929331],[-7.1016189,58.2064403],[-7.2573132,58.1793148],[-7.2531092,58.1004928],[-7.4070698,58.0905566],[-7.391347,57.7911354],[-7.790991,57.7733151],[-7.7624215,57.5444165],[-7.698501,57.1453194],[-7.7943817,57.1304547],[-7.716764,56.7368628],[-7.0122067,56.7654359],[-6.979922,56.5453858],[-7.0638622,56.5453858],[-7.0444914,56.3562587],[-6.500676,56.3812917],[-6.4491433,55.9793649],[-6.563287,55.9691456],[-6.5393742,55.7030135],[-6.5595521,55.6907321],[-6.5345315,55.6761713],[-6.5216176,55.5704434],[-5.8912587,55.5923416],[-5.8560127,55.2320733],[-5.2293639,55.2515958],[-5.1837064,54.6254139],[-3.6655956,54.6518373],[-3.6496155,54.4320023],[-3.5400375,54.4306744],[-3.530906,54.0290181],[-3.0697656,54.030359],[-3.0675737,53.8221388],[-3.0804876,53.7739911],[-3.0619239,53.7477488],[-3.0611168,53.6737049],[-3.2144691,53.6708361],[-3.2057699,53.4226163],[-3.2799632,53.355224],[-3.2896655,53.3608441],[-3.3327547,53.364931],[-3.3761293,53.3540318],[-4.0888976,53.3433102],[-4.0945474,53.4612036],[-4.697412,53.4448624],[-4.6882805,53.3318598],[-4.7202407,53.2895771],[-4.6837148,53.2486184],[-4.6768661,53.1542644],[-4.8480816,53.1446807],[-4.8178336,52.7440299],[-4.2545751,52.7558939],[-4.228876,52.254876],[-4.2607571,52.2536408],[-4.2724603,52.2432637],[-4.8136263,52.230095],[-4.8079191,52.1138892],[-5.3889104,52.0991668],[-5.3717888,51.9129667],[-5.4208706,51.9101502],[-5.414022,51.8453218],[-5.3683645,51.8474373],[-5.3466772,51.5595332],[-4.773676,51.5758518],[-4.7656859,51.4885146],[-4.1915432,51.4970427],[-4.1869775,51.4344663],[-3.6151177,51.4444274],[-3.6105519,51.3746543],[-3.1494115,51.3789292],[-3.1494115,51.2919281],[-4.3038735,51.2745907],[-4.2861169,51.0508721],[-4.8543277,51.0366633],[-4.8372201,50.7212787],[-5.2618345,50.7082694],[-5.2395519,50.3530581]],[[-2.1502671,60.171318],[-2.0030218,60.1696146],[-2.0013096,60.0997023],[-2.148555,60.1011247],[-2.1502671,60.171318]],[[-6.2086011,59.1163488],[-6.1229934,59.1166418],[-6.121852,59.0714985],[-6.2097426,59.0714985],[-6.2086011,59.1163488]],[[-4.4159559,59.0889036],[-4.4212022,59.0770848],[-4.3971904,59.0779143],[-4.3913388,59.0897328],[-4.4159559,59.0889036]]],"terms_url":"http://geo.nls.uk/maps/","terms_text":"National Library of Scotland Historic Maps"},{"id":"NLS-OS-1st_Series","name":"NLS - OS 1:25k 1st Series 1937-61","type":"tms","template":"http://geo.nls.uk/mapdata2/os/25000/{zoom}/{x}/{-y}.png","scaleExtent":[5,16],"polygon":[[[-4.7157244,54.6796556],[-4.6850662,54.6800268],[-4.6835779,54.6623245],[-4.7148782,54.6615818],[-4.7157244,54.6796556]],[[-3.7085748,58.3371151],[-3.5405937,58.3380684],[-3.5315137,58.1608002],[-3.3608086,58.1622372],[-3.3653486,58.252173],[-3.1610473,58.2536063],[-3.1610473,58.3261509],[-3.0275704,58.3271045],[-3.0366505,58.6139001],[-3.0021463,58.614373],[-3.0030543,58.7036341],[-3.4180129,58.7003322],[-3.4171049,58.6290293],[-3.7240109,58.6266658],[-3.7231029,58.606806],[-4.2361262,58.5992374],[-4.2334022,58.5092347],[-3.88836,58.5144516],[-3.8829119,58.4261327],[-3.7158389,58.4270836],[-3.7085748,58.3371151]],[[-6.46676,49.9943621],[-6.1889102,50.004868],[-6.1789222,49.8967815],[-6.3169391,49.8915171],[-6.312399,49.8200979],[-6.4504159,49.8159968],[-6.46676,49.9943621]],[[-5.6453263,50.2029809],[-5.7801329,50.2014076],[-5.7637888,50.0197267],[-5.3479221,50.0290604],[-5.3388421,49.9414854],[-5.024672,49.9473287],[-5.0355681,50.0383923],[-5.0010639,50.0453901],[-4.9974319,50.1304478],[-4.855783,50.13394],[-4.861231,50.206057],[-4.6546085,50.2140172],[-4.6558926,50.3018616],[-4.5184924,50.3026818],[-4.51464,50.325642],[-4.2488284,50.3264618],[-4.2488284,50.3100631],[-4.10886,50.3141633],[-4.1062917,50.2411267],[-3.9648088,50.2432047],[-3.9640778,50.2254158],[-3.8522287,50.2273626],[-3.8503757,50.1552563],[-3.6921809,50.1572487],[-3.5414602,50.1602198],[-3.5465781,50.3226814],[-3.4068012,50.3241013],[-3.4165761,50.5892711],[-3.2746691,50.5962721],[-3.2749172,50.6106323],[-2.9971742,50.613972],[-2.9896008,50.688537],[-2.7120266,50.690565],[-2.710908,50.6195964],[-2.5695473,50.6157538],[-2.5651019,50.5134083],[-2.4014463,50.513379],[-2.3940583,50.6160348],[-2.2894123,50.6147436],[-2.2876184,50.6008549],[-2.1477855,50.6048506],[-2.1451013,50.5325437],[-1.9335117,50.5347477],[-1.9362139,50.6170445],[-1.8573025,50.6228094],[-1.8554865,50.709139],[-1.6066929,50.709139],[-1.6085089,50.6239615],[-1.4450678,50.6228094],[-1.4432518,50.5317039],[-1.1545059,50.5293951],[-1.1472419,50.6170485],[-1.011041,50.6205051],[-1.011041,50.7056889],[-0.704135,50.7045388],[-0.700503,50.7769401],[-0.5860943,50.7723465],[-0.5879103,50.7907181],[-0.0149586,50.7798108],[-0.0185906,50.7625836],[0.0967261,50.7620093],[0.0921861,50.6913106],[0.3046595,50.6890096],[0.3101075,50.7757917],[0.5511831,50.7726336],[0.5529991,50.8432096],[0.695556,50.8403428],[0.696464,50.8592608],[0.9852099,50.8523824],[0.9906579,50.9417226],[1.0160821,50.9411504],[1.0215301,51.0303204],[1.2812198,51.0240383],[1.2848518,51.0948044],[1.4277848,51.0948044],[1.4386809,51.2882859],[1.4713691,51.2871502],[1.4804492,51.3994534],[1.1590151,51.4073836],[1.1590151,51.3869889],[1.0191822,51.3903886],[1.0228142,51.4798247],[0.8793493,51.4843484],[0.8829813,51.5566675],[1.0264462,51.5544092],[1.0373423,51.7493319],[1.2607117,51.7482076],[1.2661598,51.8279642],[1.3351682,51.8335756],[1.3478803,51.9199021],[1.4840812,51.9199021],[1.4986093,52.0038271],[1.6438902,52.0027092],[1.6656823,52.270221],[1.7310588,52.270221],[1.7528509,52.4465637],[1.8254914,52.4476705],[1.8345714,52.624408],[1.7690346,52.6291402],[1.7741711,52.717904],[1.6996925,52.721793],[1.706113,52.8103687],[1.559724,52.8165777],[1.5648605,52.9034116],[1.4184715,52.9103818],[1.4223238,52.9281894],[1.3439928,52.9289635],[1.3491293,53.0001194],[0.4515789,53.022589],[0.4497629,52.9351139],[0.3789384,52.9351139],[0.3716744,52.846365],[0.2227614,52.8496552],[0.2336575,52.9329248],[0.3062979,52.9351139],[0.308114,53.022589],[0.3807544,53.0236813],[0.3993708,53.2933729],[0.3248922,53.2987454],[0.3274604,53.3853782],[0.2504136,53.38691],[0.2581183,53.4748924],[0.1862079,53.4779494],[0.1913443,53.6548777],[0.1502527,53.6594436],[0.1528209,53.7666003],[0.0012954,53.7734308],[0.0025796,53.8424326],[-0.0282392,53.841675],[-0.0226575,53.9311501],[-0.1406983,53.9322193],[-0.1416063,54.0219323],[-0.1706625,54.0235326],[-0.1679384,54.0949482],[-0.0126694,54.0912206],[-0.0099454,54.1811226],[-0.1615824,54.1837795],[-0.1606744,54.2029038],[-0.2405789,54.2034349],[-0.2378549,54.2936234],[-0.3894919,54.2941533],[-0.3857497,54.3837321],[-0.461638,54.3856364],[-0.4571122,54.4939066],[-0.6105651,54.4965434],[-0.6096571,54.5676704],[-0.7667421,54.569776],[-0.7640181,54.5887213],[-0.9192871,54.5908258],[-0.9148116,54.6608348],[-1.1485204,54.6634343],[-1.1472363,54.7528316],[-1.2268514,54.7532021],[-1.2265398,54.8429879],[-1.2991803,54.8435107],[-1.2991803,54.9333391],[-1.3454886,54.9354258],[-1.3436726,55.0234878],[-1.3772688,55.0255698],[-1.3754528,55.1310877],[-1.4997441,55.1315727],[-1.4969272,55.2928323],[-1.5296721,55.2942946],[-1.5258198,55.6523803],[-1.7659492,55.6545537],[-1.7620968,55.7435626],[-1.9688392,55.7435626],[-1.9698023,55.8334505],[-2.0019051,55.8336308],[-2.0015841,55.9235526],[-2.1604851,55.9240613],[-2.1613931,55.9413549],[-2.3202942,55.9408463],[-2.3212022,56.0145126],[-2.5627317,56.0124824],[-2.5645477,56.1022207],[-2.9658863,56.0991822],[-2.9667943,56.1710304],[-2.4828272,56.1755797],[-2.4882752,56.2856078],[-2.5645477,56.2835918],[-2.5681798,56.3742075],[-2.7261728,56.3732019],[-2.7316208,56.4425301],[-2.6190281,56.4425301],[-2.6153961,56.5317671],[-2.453771,56.5347715],[-2.4534686,56.6420248],[-2.4062523,56.6440218],[-2.3953562,56.7297964],[-2.2936596,56.7337811],[-2.2972916,56.807423],[-2.1629067,56.8113995],[-2.1592747,56.9958425],[-1.9922016,57.0017771],[-2.0067297,57.2737477],[-1.9195612,57.2757112],[-1.9304572,57.3482876],[-1.8106005,57.3443682],[-1.7997044,57.4402728],[-1.6616875,57.4285429],[-1.6689516,57.5398256],[-1.7452241,57.5398256],[-1.7524881,57.6313302],[-1.8287606,57.6332746],[-1.8287606,57.7187255],[-3.1768526,57.7171219],[-3.1794208,57.734264],[-3.5134082,57.7292105],[-3.5129542,57.7112683],[-3.7635638,57.7076303],[-3.7598539,57.635713],[-3.8420372,57.6343382],[-3.8458895,57.6178365],[-3.9794374,57.6157733],[-3.9794374,57.686544],[-3.8150708,57.689976],[-3.817639,57.7968899],[-3.6853753,57.7989429],[-3.6892276,57.8891567],[-3.9383458,57.8877915],[-3.9421981,57.9750592],[-3.6943641,57.9784638],[-3.6969323,58.0695865],[-4.0372226,58.0641528],[-4.0346543,57.9730163],[-4.2003051,57.9702923],[-4.1832772,57.7012869],[-4.518752,57.6951111],[-4.5122925,57.6050682],[-4.6789116,57.6016628],[-4.666022,57.4218334],[-3.6677696,57.4394729],[-3.671282,57.5295384],[-3.3384979,57.5331943],[-3.3330498,57.4438859],[-2.8336466,57.4485275],[-2.8236396,56.9992706],[-2.3305398,57.0006693],[-2.3298977,56.9113932],[-2.6579889,56.9092901],[-2.6559637,56.8198406],[-2.8216747,56.8188467],[-2.8184967,56.7295397],[-3.1449248,56.7265508],[-3.1435628,56.6362749],[-3.4679089,56.6350265],[-3.474265,56.7238108],[-3.8011471,56.7188284],[-3.785711,56.4493026],[-3.946428,56.4457896],[-3.9428873,56.2659777],[-4.423146,56.2588459],[-4.4141572,56.0815506],[-4.8944159,56.0708008],[-4.8791072,55.8896994],[-5.1994158,55.8821374],[-5.1852906,55.7023791],[-5.0273445,55.7067203],[-5.0222081,55.6879046],[-4.897649,55.6907999],[-4.8880181,55.6002822],[-4.7339244,55.6046348],[-4.7275038,55.5342082],[-4.773732,55.5334815],[-4.7685955,55.4447227],[-4.8494947,55.4418092],[-4.8405059,55.3506535],[-4.8700405,55.3513836],[-4.8649041,55.2629462],[-4.9920314,55.2592875],[-4.9907473,55.1691779],[-5.0600894,55.1655105],[-5.0575212,55.0751884],[-5.2141831,55.0722477],[-5.1991766,54.8020337],[-5.0466316,54.8062205],[-5.0502636,54.7244996],[-4.9703591,54.7203043],[-4.9776232,54.6215905],[-4.796022,54.6342056],[-4.796022,54.7307917],[-4.8977186,54.7265971],[-4.9086147,54.8145928],[-4.8069181,54.8166856],[-4.8105501,54.7915648],[-4.6943253,54.7978465],[-4.6761652,54.7244996],[-4.5744686,54.7244996],[-4.5599405,54.6426135],[-4.3093309,54.6384098],[-4.3333262,54.8229889],[-4.2626999,54.8274274],[-4.2549952,54.7348587],[-3.8338058,54.7400481],[-3.836374,54.8141105],[-3.7118149,54.8133706],[-3.7143831,54.8318654],[-3.5346072,54.8355633],[-3.5271039,54.9066228],[-3.4808758,54.9084684],[-3.4776655,54.7457328],[-3.5874573,54.744621],[-3.5836049,54.6546166],[-3.7107322,54.6531308],[-3.6991752,54.4550407],[-3.5746161,54.4572801],[-3.5759002,54.3863042],[-3.539945,54.3855564],[-3.5386609,54.297224],[-3.46033,54.2957252],[-3.4590458,54.2079507],[-3.3807149,54.2102037],[-3.381999,54.1169788],[-3.302878,54.1160656],[-3.300154,54.0276224],[-3.1013007,54.0292224],[-3.093596,53.6062158],[-3.2065981,53.6016441],[-3.2091663,53.4917753],[-3.2451215,53.4887193],[-3.2348486,53.4045934],[-3.5276266,53.3999999],[-3.5343966,53.328481],[-3.6488053,53.3252272],[-3.6527308,53.3057716],[-3.7271873,53.3046865],[-3.7315003,53.3945257],[-3.9108315,53.3912769],[-3.9071995,53.3023804],[-3.9521457,53.3015665],[-3.9566724,53.3912183],[-4.1081979,53.3889209],[-4.1081979,53.4072967],[-4.2622916,53.4065312],[-4.2635757,53.4753707],[-4.638537,53.4677274],[-4.6346847,53.3812621],[-4.7091633,53.3774321],[-4.7001745,53.1954965],[-4.5499332,53.1962658],[-4.5435126,53.1092488],[-4.3919871,53.1100196],[-4.3855666,53.0236002],[-4.6115707,53.0205105],[-4.603866,52.9284932],[-4.7566756,52.9261709],[-4.7476868,52.8370555],[-4.8208813,52.8331768],[-4.8208813,52.7446476],[-4.3701572,52.7539749],[-4.3765778,52.8401583],[-4.2314728,52.8455875],[-4.2237682,52.7586379],[-4.1056297,52.7570836],[-4.1015192,52.6714874],[-4.1487355,52.6703862],[-4.1305754,52.4008596],[-4.1995838,52.3986435],[-4.2050319,52.3110195],[-4.3466808,52.303247],[-4.3484968,52.2365693],[-4.4901457,52.2332328],[-4.4883297,52.2098702],[-4.6572188,52.2098702],[-4.6590348,52.1385939],[-4.7788916,52.13525],[-4.7807076,52.1162967],[-4.9259885,52.1140663],[-4.9187245,52.0392855],[-5.2365265,52.0314653],[-5.2347105,51.9442339],[-5.3473032,51.9408755],[-5.3473032,51.9195995],[-5.4925842,51.9162392],[-5.4853201,51.8265386],[-5.1983903,51.8321501],[-5.1893102,51.7625177],[-5.335825,51.7589528],[-5.3281204,51.6686495],[-5.1836575,51.6730296],[-5.1836575,51.6539134],[-5.0674452,51.6578966],[-5.0603825,51.5677905],[-4.5974594,51.5809588],[-4.60388,51.6726314],[-4.345773,51.6726314],[-4.3355001,51.4962964],[-3.9528341,51.5106841],[-3.9425611,51.5905333],[-3.8809237,51.5953198],[-3.8706508,51.5074872],[-3.7679216,51.4978952],[-3.7550805,51.4242895],[-3.5855774,51.41468],[-3.5778727,51.3329177],[-3.0796364,51.3329177],[-3.0770682,51.2494018],[-3.7216935,51.2381477],[-3.7216935,51.2558315],[-3.8706508,51.2558315],[-3.8680825,51.2365398],[-4.2944084,51.2252825],[-4.289272,51.0496352],[-4.5692089,51.0431767],[-4.5624122,50.9497388],[-4.5905604,50.9520269],[-4.5896524,50.8627065],[-4.6296046,50.8592677],[-4.6226411,50.7691513],[-4.6952816,50.7680028],[-4.6934655,50.6967379],[-4.8342064,50.6938621],[-4.8296664,50.6046231],[-4.9676833,50.6000126],[-4.9685913,50.5821427],[-5.1084242,50.5786832],[-5.1029762,50.4892254],[-5.1311244,50.48807],[-5.1274923,50.4163798],[-5.2664172,50.4117509],[-5.2609692,50.3034214],[-5.5124868,50.2976214],[-5.5061308,50.2256428],[-5.6468717,50.2209953],[-5.6453263,50.2029809]],[[-5.1336607,55.2630226],[-5.1021999,55.2639372],[-5.0999527,55.2458239],[-5.1322161,55.2446343],[-5.1336607,55.2630226]],[[-5.6431878,55.5095745],[-5.4861028,55.5126594],[-5.4715747,55.3348829],[-5.6277517,55.3302345],[-5.6431878,55.5095745]],[[-4.7213517,51.2180246],[-4.5804201,51.2212417],[-4.5746416,51.1306736],[-4.7174993,51.1280545],[-4.7213517,51.2180246]],[[-5.1608796,55.4153626],[-5.0045387,55.4190069],[-5.0184798,55.6153521],[-5.1755648,55.6138137],[-5.1608796,55.4153626]]],"terms_url":"http://geo.nls.uk/maps/","terms_text":"National Library of Scotland Historic Maps"},{"id":"NLS-OS-25inch-hist","name":"NLS - OS 25-inch (Scotland), 1892-1905","type":"tms","template":"http://geo.nls.uk/mapdata2/os/25_inch/scotland_1/{zoom}/{x}/{y}.png","scaleExtent":[0,18],"polygon":[[[-5.2112173,54.8018593],[-5.0642752,54.8026508],[-5.0560354,54.6305176],[-4.3158316,54.6297227],[-4.3117117,54.7448258],[-3.8530325,54.7464112],[-3.8530325,54.8034424],[-3.5522818,54.8034424],[-3.5522818,54.8374644],[-3.468511,54.8406277],[-3.4657644,54.8983158],[-3.3847403,54.8991055],[-3.3888601,54.9559214],[-3.0920786,54.9539468],[-3.0392359,54.9923274],[-3.0212713,55.0493881],[-2.9591232,55.0463283],[-2.9202807,55.0666294],[-2.7857081,55.068652],[-2.7852225,55.0914426],[-2.7337562,55.0922761],[-2.737616,55.151204],[-2.7648395,55.1510672],[-2.7013114,55.1722505],[-2.6635459,55.2192808],[-2.6460364,55.2188891],[-2.629042,55.2233933],[-2.6317886,55.2287781],[-2.6235488,55.2446345],[-2.6197723,55.2454663],[-2.6099017,55.2454174],[-2.6099876,55.2486466],[-2.6408121,55.2590039],[-2.6247896,55.2615631],[-2.6045186,55.2823081],[-2.5693176,55.296132],[-2.5479542,55.3121617],[-2.5091116,55.3234891],[-2.4780376,55.3494471],[-2.4421083,55.3533118],[-2.4052079,55.3439256],[-2.3726772,55.3447539],[-2.3221819,55.3687665],[-2.3241241,55.3999337],[-2.2576062,55.425015],[-2.1985547,55.4273529],[-2.1484296,55.4717466],[-2.1944348,55.484199],[-2.2040479,55.529306],[-2.2960584,55.6379722],[-2.2177808,55.6379722],[-2.1059266,55.7452498],[-1.9716874,55.7462161],[-1.9697453,55.9190951],[-2.1201694,55.9207115],[-2.1242893,55.9776133],[-2.3440159,55.9783817],[-2.3440159,56.0390349],[-2.5046909,56.0413363],[-2.500571,56.1003588],[-2.8823459,56.0957629],[-2.8823459,56.1722898],[-2.4126804,56.1692316],[-2.4181736,56.2334017],[-2.5857151,56.2303484],[-2.5719822,56.3416356],[-2.7257908,56.3462022],[-2.7312839,56.4343808],[-2.6928318,56.4343808],[-2.6928318,56.4859769],[-2.5307834,56.4935587],[-2.5307834,56.570806],[-2.5302878,56.6047947],[-2.3732428,56.6044452],[-2.3684363,56.7398824],[-2.3292975,56.7398824],[-2.3292975,56.7888065],[-2.3145346,56.7891826],[-2.3148779,56.7967036],[-2.171369,56.7967036],[-2.1703979,56.9710595],[-2.0101725,56.9694716],[-2.0101725,57.0846832],[-2.0817687,57.085349],[-2.0488097,57.1259963],[-2.0409133,57.126369],[-2.0383434,57.2411129],[-1.878118,57.2421638],[-1.8771469,57.2978175],[-1.9868771,57.2983422],[-1.9082209,57.3560063],[-1.8752048,57.3560063],[-1.8761758,57.3769527],[-1.8120857,57.4120111],[-1.7120661,57.4120111],[-1.7034646,57.6441388],[-1.8666032,57.6451781],[-1.8646611,57.7033351],[-3.1204292,57.7064705],[-3.1218025,57.7504652],[-3.4445259,57.7526635],[-3.4472724,57.7138067],[-3.5145637,57.7094052],[-3.5118171,57.6939956],[-3.7645027,57.6917938],[-3.7672492,57.6344975],[-3.842378,57.6288312],[-3.8438346,57.5965825],[-3.9414265,57.5916386],[-3.9404554,57.6537782],[-3.8894746,57.6529989],[-3.8826772,57.7676408],[-3.7224517,57.766087],[-3.7195385,57.8819201],[-3.9146888,57.8853352],[-3.916062,57.9546243],[-3.745774,57.9538956],[-3.7471473,58.0688409],[-3.5837256,58.0695672],[-3.5837256,58.1116689],[-3.4560096,58.1138452],[-3.4544646,58.228503],[-3.4379851,58.2283222],[-3.4243233,58.2427725],[-3.412307,58.2438567],[-3.3735115,58.2695057],[-3.3063919,58.2862038],[-3.1229154,58.2859395],[-3.123602,58.3443661],[-2.9574338,58.3447264],[-2.951254,58.6422011],[-2.8812162,58.6429157],[-2.8851004,58.8112825],[-2.7180775,58.8142997],[-2.7161354,58.8715749],[-2.556881,58.8775984],[-2.5544533,58.9923453],[-2.5567617,59.0483775],[-2.391893,59.0485996],[-2.3918002,59.1106996],[-2.4733695,59.1106996],[-2.5591563,59.1783028],[-2.5630406,59.2210646],[-2.3921334,59.224046],[-2.3911409,59.2740075],[-2.3639512,59.2745036],[-2.3658933,59.285417],[-2.3911409,59.284921],[-2.3911409,59.3379505],[-2.2221759,59.3381981],[-2.2233897,59.395965],[-2.3758467,59.396583],[-2.3899271,59.4026383],[-2.4008516,59.3962122],[-2.5637882,59.3952604],[-2.5637882,59.3385811],[-2.7320164,59.3375306],[-2.7333896,59.3952604],[-3.0726511,59.3931174],[-3.0703404,59.3354759],[-3.0753186,59.3355634],[-3.0749753,59.3292593],[-3.0698254,59.3289091],[-3.069801,59.2196159],[-3.2363384,59.2166341],[-3.2336751,59.1606496],[-3.4032766,59.1588895],[-3.394086,58.9279316],[-3.5664497,58.9259268],[-3.5611089,58.8679885],[-3.392508,58.8699339],[-3.3894734,58.8698711],[-3.3891093,58.8684905],[-3.3912942,58.868616],[-3.3884161,58.7543084],[-3.2238208,58.7555677],[-3.2189655,58.691289],[-3.4634113,58.6905753],[-3.4551716,58.6341518],[-3.787508,58.6341518],[-3.7861347,58.5769211],[-3.9028645,58.5733411],[-3.9028645,58.6477304],[-4.0690327,58.6491594],[-4.0690327,58.5912376],[-4.7364521,58.5933845],[-4.7364521,58.6505884],[-5.0715351,58.6520173],[-5.0654779,58.5325854],[-5.2332047,58.5316087],[-5.2283494,58.4719947],[-5.2424298,58.4719947],[-5.2366034,58.4089731],[-5.2283494,58.4094818],[-5.2210664,58.3005859],[-5.5657939,58.2959933],[-5.5580254,58.2372573],[-5.4146722,58.2401326],[-5.4141866,58.2267768],[-5.3885749,58.2272242],[-5.382714,58.1198615],[-5.51043,58.1191362],[-5.5114011,58.006214],[-5.6745397,58.0041559],[-5.6716266,57.9449366],[-5.6716266,57.8887166],[-5.8347652,57.8856193],[-5.8277052,57.5988958],[-6.0384259,57.5986357],[-6.0389115,57.6459559],[-6.1981658,57.6456961],[-6.2076123,57.7600132],[-6.537067,57.7544033],[-6.5312406,57.6402392],[-6.7002056,57.6360809],[-6.6807844,57.5236293],[-6.8516915,57.5152857],[-6.8361545,57.3385811],[-6.6730158,57.3438213],[-6.674958,57.2850883],[-6.5098772,57.2850883],[-6.4982244,57.1757637],[-6.3506228,57.1820797],[-6.3312015,57.1251969],[-6.1797156,57.1230884],[-6.1719471,57.0682265],[-6.4593819,57.059779],[-6.4564687,57.1093806],[-6.6671895,57.1062165],[-6.6730158,57.002708],[-6.5021087,57.0048233],[-6.4836097,56.8917522],[-6.3266104,56.8894062],[-6.3156645,56.7799312],[-6.2146739,56.775675],[-6.2146739,56.7234965],[-6.6866107,56.7224309],[-6.6769001,56.6114413],[-6.8419809,56.607166],[-6.8400387,56.5483307],[-7.1546633,56.5461895],[-7.1488369,56.4872592],[-6.9915246,56.490476],[-6.9876404,56.4325329],[-6.6827265,56.4314591],[-6.6769001,56.5472601],[-6.5292985,56.5504717],[-6.5234721,56.4379018],[-6.3661598,56.4368281],[-6.3642177,56.3766524],[-6.5273563,56.3712749],[-6.5171745,56.2428427],[-6.4869621,56.247421],[-6.4869621,56.1893882],[-6.3001945,56.1985572],[-6.3029411,56.2581017],[-5.9019401,56.256576],[-5.8964469,56.0960466],[-6.0282829,56.0883855],[-6.0392692,56.1557502],[-6.3853385,56.1542205],[-6.3606193,55.96099],[-6.2123039,55.9640647],[-6.2047508,55.9202269],[-6.5185478,55.9129158],[-6.5061881,55.7501763],[-6.6764762,55.7409005],[-6.6599967,55.6263176],[-6.3551261,55.6232161],[-6.3578727,55.5689002],[-6.0392692,55.5720059],[-6.0310294,55.6247669],[-5.7398917,55.6309694],[-5.7371452,55.4569279],[-5.8964469,55.4600426],[-5.8964469,55.2789864],[-5.4350211,55.2821151],[-5.4405143,55.4506979],[-5.2867057,55.4569279],[-5.3086784,55.4070602],[-4.9735954,55.4008223],[-4.9845817,55.2038242],[-5.1493766,55.2038242],[-5.1411369,55.037337],[-5.2152946,55.0341891],[-5.2112173,54.8018593]],[[-2.1646559,60.1622059],[-1.9930299,60.1609801],[-1.9946862,60.1035151],[-2.1663122,60.104743],[-2.1646559,60.1622059]],[[-1.5360658,59.8570831],[-1.3653566,59.8559841],[-1.366847,59.7975565],[-1.190628,59.7964199],[-1.1862046,59.9695391],[-1.0078652,59.9683948],[-1.0041233,60.114145],[-0.8360832,60.1130715],[-0.834574,60.1716772],[-1.0074262,60.1727795],[-1.0052165,60.2583924],[-0.8299659,60.2572778],[-0.826979,60.3726551],[-0.6507514,60.3715381],[-0.6477198,60.4882292],[-0.9984896,60.4904445],[-0.9970279,60.546555],[-0.6425288,60.5443201],[-0.6394896,60.6606792],[-0.8148133,60.6617806],[-0.8132987,60.7196112],[-0.6383298,60.7185141],[-0.635467,60.8275393],[-0.797568,60.8285523],[-0.9941426,60.8297807],[-0.9954966,60.7782667],[-1.1670282,60.7793403],[-1.1700357,60.6646181],[-1.5222599,60.6668304],[-1.5237866,60.6084426],[-1.6975673,60.609536],[-1.7021271,60.4345249],[-1.5260578,60.4334111],[-1.5275203,60.3770719],[-1.8751127,60.3792746],[-1.8781372,60.2624647],[-1.7019645,60.2613443],[-1.7049134,60.1470532],[-1.528659,60.1459283],[-1.5360658,59.8570831]],[[-0.9847667,60.8943762],[-0.9860347,60.8361105],[-0.8078362,60.8351904],[-0.8065683,60.8934578],[-0.9847667,60.8943762]],[[-7.7696901,56.8788231],[-7.7614504,56.7608274],[-7.6009049,56.7641903],[-7.5972473,56.819332],[-7.4479894,56.8203948],[-7.4489319,56.8794098],[-7.2841369,56.8794098],[-7.2813904,57.0471152],[-7.1303283,57.0515969],[-7.1330749,57.511801],[-6.96828,57.5147514],[-6.9765198,57.6854668],[-6.8062317,57.6913392],[-6.8089782,57.8041985],[-6.6496765,57.8071252],[-6.6441833,57.8612267],[-6.3200866,57.8626878],[-6.3200866,58.1551617],[-6.1607849,58.1522633],[-6.1552917,58.20874],[-5.9850036,58.2101869],[-5.9904968,58.2680163],[-6.1497986,58.2665717],[-6.1415588,58.5557514],[-6.3173401,58.5557514],[-6.3091003,58.4983923],[-6.4876282,58.4955218],[-6.4876282,58.4423768],[-6.6606628,58.4395018],[-6.6469299,58.3819525],[-6.8117248,58.3805125],[-6.8117248,58.3286357],[-6.9792663,58.3286357],[-6.9710266,58.2694608],[-7.1413147,58.2680163],[-7.1403816,58.0358742],[-7.3020636,58.0351031],[-7.3030347,57.9774797],[-7.1379539,57.9777372],[-7.1413526,57.9202792],[-7.1398961,57.8640206],[-7.3020636,57.862471],[-7.298484,57.7442293],[-7.4509193,57.7456951],[-7.4550392,57.6899522],[-7.6186131,57.6906048],[-7.6198341,57.7456951],[-7.7901222,57.7442293],[-7.7873756,57.6855477],[-7.6222332,57.6853817],[-7.6173779,57.5712602],[-7.788285,57.5709998],[-7.7892561,57.512109],[-7.7038025,57.5115874],[-7.6999183,57.4546902],[-7.5367796,57.4552126],[-7.5348375,57.5126306],[-7.4581235,57.5131521],[-7.4552103,57.2824165],[-7.6115515,57.2845158],[-7.6144647,57.2272651],[-7.451326,57.2256881],[-7.451326,57.1103873],[-7.6164068,57.1088053],[-7.603783,56.8792358],[-7.7696901,56.8788231]],[[-1.7106618,59.5626284],[-1.5417509,59.562215],[-1.5423082,59.5037224],[-1.7112191,59.5041365],[-1.7106618,59.5626284]]],"terms_url":"http://geo.nls.uk/maps/","terms_text":"National Library of Scotland Historic Maps"},{"id":"NLS-OS-6inch-Scotland-hist","name":"NLS - OS 6-inch Scotland 1842-82","type":"tms","template":"http://geo.nls.uk/maps/os/six_inch/{zoom}/{x}/{-y}.png","scaleExtent":[5,16],"polygon":[[[-5.2112173,54.8018593],[-5.0642752,54.8026508],[-5.0560354,54.6305176],[-4.3158316,54.6297227],[-4.3117117,54.7448258],[-3.8530325,54.7464112],[-3.8530325,54.8034424],[-3.5522818,54.8034424],[-3.5522818,54.8374644],[-3.468511,54.8406277],[-3.4657644,54.8983158],[-3.3847403,54.8991055],[-3.3888601,54.9559214],[-3.0920786,54.9539468],[-3.0392359,54.9923274],[-3.0212713,55.0493881],[-2.9591232,55.0463283],[-2.9202807,55.0666294],[-2.7857081,55.068652],[-2.7852225,55.0914426],[-2.7337562,55.0922761],[-2.737616,55.151204],[-2.7648395,55.1510672],[-2.7013114,55.1722505],[-2.6635459,55.2192808],[-2.6460364,55.2188891],[-2.629042,55.2233933],[-2.6317886,55.2287781],[-2.6235488,55.2446345],[-2.6197723,55.2454663],[-2.6099017,55.2454174],[-2.6099876,55.2486466],[-2.6408121,55.2590039],[-2.6247896,55.2615631],[-2.6045186,55.2823081],[-2.5693176,55.296132],[-2.5479542,55.3121617],[-2.5091116,55.3234891],[-2.4780376,55.3494471],[-2.4421083,55.3533118],[-2.4052079,55.3439256],[-2.3726772,55.3447539],[-2.3221819,55.3687665],[-2.3241241,55.3999337],[-2.2576062,55.425015],[-2.1985547,55.4273529],[-2.1484296,55.4717466],[-2.1944348,55.484199],[-2.2040479,55.529306],[-2.2960584,55.6379722],[-2.2177808,55.6379722],[-2.1059266,55.7452498],[-1.9716874,55.7462161],[-1.9697453,55.9190951],[-2.1201694,55.9207115],[-2.1242893,55.9776133],[-2.3440159,55.9783817],[-2.3440159,56.0390349],[-2.5046909,56.0413363],[-2.500571,56.1003588],[-2.8823459,56.0957629],[-2.8823459,56.1722898],[-2.4126804,56.1692316],[-2.4181736,56.2334017],[-2.5857151,56.2303484],[-2.5719822,56.3416356],[-2.7257908,56.3462022],[-2.7312839,56.4343808],[-2.6928318,56.4343808],[-2.6928318,56.4859769],[-2.5307834,56.4935587],[-2.5307834,56.570806],[-2.5302878,56.6047947],[-2.3732428,56.6044452],[-2.3684363,56.7398824],[-2.3292975,56.7398824],[-2.3292975,56.7888065],[-2.3145346,56.7891826],[-2.3148779,56.7967036],[-2.171369,56.7967036],[-2.1703979,56.9710595],[-2.0101725,56.9694716],[-2.0101725,57.0846832],[-2.0817687,57.085349],[-2.0488097,57.1259963],[-2.0409133,57.126369],[-2.0383434,57.2411129],[-1.878118,57.2421638],[-1.8771469,57.2978175],[-1.9868771,57.2983422],[-1.9082209,57.3560063],[-1.8752048,57.3560063],[-1.8761758,57.3769527],[-1.8120857,57.4120111],[-1.7120661,57.4120111],[-1.7034646,57.6441388],[-1.8666032,57.6451781],[-1.8646611,57.7033351],[-3.1204292,57.7064705],[-3.1218025,57.7504652],[-3.4445259,57.7526635],[-3.4472724,57.7138067],[-3.5145637,57.7094052],[-3.5118171,57.6939956],[-3.7645027,57.6917938],[-3.7672492,57.6344975],[-3.842378,57.6288312],[-3.8438346,57.5965825],[-3.9414265,57.5916386],[-3.9404554,57.6537782],[-3.8894746,57.6529989],[-3.8826772,57.7676408],[-3.7224517,57.766087],[-3.7195385,57.8819201],[-3.9146888,57.8853352],[-3.916062,57.9546243],[-3.745774,57.9538956],[-3.7471473,58.0688409],[-3.5837256,58.0695672],[-3.5837256,58.1116689],[-3.4560096,58.1138452],[-3.4544646,58.228503],[-3.4379851,58.2283222],[-3.4243233,58.2427725],[-3.412307,58.2438567],[-3.3735115,58.2695057],[-3.3063919,58.2862038],[-3.1229154,58.2859395],[-3.123602,58.3443661],[-2.9574338,58.3447264],[-2.951254,58.6422011],[-2.8812162,58.6429157],[-2.8851004,58.8112825],[-2.7180775,58.8142997],[-2.7161354,58.8715749],[-2.556881,58.8775984],[-2.5544533,58.9923453],[-2.5567617,59.0483775],[-2.391893,59.0485996],[-2.3918002,59.1106996],[-2.4733695,59.1106996],[-2.5591563,59.1783028],[-2.5630406,59.2210646],[-2.3921334,59.224046],[-2.3911409,59.2740075],[-2.3639512,59.2745036],[-2.3658933,59.285417],[-2.3911409,59.284921],[-2.3911409,59.3379505],[-2.2221759,59.3381981],[-2.2233897,59.395965],[-2.3758467,59.396583],[-2.3899271,59.4026383],[-2.4008516,59.3962122],[-2.5637882,59.3952604],[-2.5637882,59.3385811],[-2.7320164,59.3375306],[-2.7333896,59.3952604],[-3.0726511,59.3931174],[-3.0703404,59.3354759],[-3.0753186,59.3355634],[-3.0749753,59.3292593],[-3.0698254,59.3289091],[-3.069801,59.2196159],[-3.2363384,59.2166341],[-3.2336751,59.1606496],[-3.4032766,59.1588895],[-3.394086,58.9279316],[-3.5664497,58.9259268],[-3.5611089,58.8679885],[-3.392508,58.8699339],[-3.3894734,58.8698711],[-3.3891093,58.8684905],[-3.3912942,58.868616],[-3.3884161,58.7543084],[-3.2238208,58.7555677],[-3.2189655,58.691289],[-3.4634113,58.6905753],[-3.4551716,58.6341518],[-3.787508,58.6341518],[-3.7861347,58.5769211],[-3.9028645,58.5733411],[-3.9028645,58.6477304],[-4.0690327,58.6491594],[-4.0690327,58.5912376],[-4.7364521,58.5933845],[-4.7364521,58.6505884],[-5.0715351,58.6520173],[-5.0654779,58.5325854],[-5.2332047,58.5316087],[-5.2283494,58.4719947],[-5.2424298,58.4719947],[-5.2366034,58.4089731],[-5.2283494,58.4094818],[-5.2210664,58.3005859],[-5.5657939,58.2959933],[-5.5580254,58.2372573],[-5.4146722,58.2401326],[-5.4141866,58.2267768],[-5.3885749,58.2272242],[-5.382714,58.1198615],[-5.51043,58.1191362],[-5.5114011,58.006214],[-5.6745397,58.0041559],[-5.6716266,57.9449366],[-5.6716266,57.8887166],[-5.8347652,57.8856193],[-5.8277052,57.5988958],[-6.0384259,57.5986357],[-6.0389115,57.6459559],[-6.1981658,57.6456961],[-6.2076123,57.7600132],[-6.537067,57.7544033],[-6.5312406,57.6402392],[-6.7002056,57.6360809],[-6.6807844,57.5236293],[-6.8516915,57.5152857],[-6.8361545,57.3385811],[-6.6730158,57.3438213],[-6.674958,57.2850883],[-6.5098772,57.2850883],[-6.4982244,57.1757637],[-6.3506228,57.1820797],[-6.3312015,57.1251969],[-6.1797156,57.1230884],[-6.1719471,57.0682265],[-6.4593819,57.059779],[-6.4564687,57.1093806],[-6.6671895,57.1062165],[-6.6730158,57.002708],[-6.5021087,57.0048233],[-6.4836097,56.8917522],[-6.3266104,56.8894062],[-6.3156645,56.7799312],[-6.2146739,56.775675],[-6.2146739,56.7234965],[-6.6866107,56.7224309],[-6.6769001,56.6114413],[-6.8419809,56.607166],[-6.8400387,56.5483307],[-7.1546633,56.5461895],[-7.1488369,56.4872592],[-6.9915246,56.490476],[-6.9876404,56.4325329],[-6.6827265,56.4314591],[-6.6769001,56.5472601],[-6.5292985,56.5504717],[-6.5234721,56.4379018],[-6.3661598,56.4368281],[-6.3642177,56.3766524],[-6.5273563,56.3712749],[-6.5171745,56.2428427],[-6.4869621,56.247421],[-6.4869621,56.1893882],[-6.3001945,56.1985572],[-6.3029411,56.2581017],[-5.9019401,56.256576],[-5.8964469,56.0960466],[-6.0282829,56.0883855],[-6.0392692,56.1557502],[-6.3853385,56.1542205],[-6.3606193,55.96099],[-6.2123039,55.9640647],[-6.2047508,55.9202269],[-6.5185478,55.9129158],[-6.5061881,55.7501763],[-6.6764762,55.7409005],[-6.6599967,55.6263176],[-6.3551261,55.6232161],[-6.3578727,55.5689002],[-6.0392692,55.5720059],[-6.0310294,55.6247669],[-5.7398917,55.6309694],[-5.7371452,55.4569279],[-5.8964469,55.4600426],[-5.8964469,55.2789864],[-5.4350211,55.2821151],[-5.4405143,55.4506979],[-5.2867057,55.4569279],[-5.3086784,55.4070602],[-4.9735954,55.4008223],[-4.9845817,55.2038242],[-5.1493766,55.2038242],[-5.1411369,55.037337],[-5.2152946,55.0341891],[-5.2112173,54.8018593]],[[-2.1646559,60.1622059],[-1.9930299,60.1609801],[-1.9946862,60.1035151],[-2.1663122,60.104743],[-2.1646559,60.1622059]],[[-1.5360658,59.8570831],[-1.3653566,59.8559841],[-1.366847,59.7975565],[-1.190628,59.7964199],[-1.1862046,59.9695391],[-1.0078652,59.9683948],[-1.0041233,60.114145],[-0.8360832,60.1130715],[-0.834574,60.1716772],[-1.0074262,60.1727795],[-1.0052165,60.2583924],[-0.8299659,60.2572778],[-0.826979,60.3726551],[-0.6507514,60.3715381],[-0.6477198,60.4882292],[-0.9984896,60.4904445],[-0.9970279,60.546555],[-0.6425288,60.5443201],[-0.6394896,60.6606792],[-0.8148133,60.6617806],[-0.8132987,60.7196112],[-0.6383298,60.7185141],[-0.635467,60.8275393],[-0.797568,60.8285523],[-0.9941426,60.8297807],[-0.9954966,60.7782667],[-1.1670282,60.7793403],[-1.1700357,60.6646181],[-1.5222599,60.6668304],[-1.5237866,60.6084426],[-1.6975673,60.609536],[-1.7021271,60.4345249],[-1.5260578,60.4334111],[-1.5275203,60.3770719],[-1.8751127,60.3792746],[-1.8781372,60.2624647],[-1.7019645,60.2613443],[-1.7049134,60.1470532],[-1.528659,60.1459283],[-1.5360658,59.8570831]],[[-0.9847667,60.8943762],[-0.9860347,60.8361105],[-0.8078362,60.8351904],[-0.8065683,60.8934578],[-0.9847667,60.8943762]],[[-7.7696901,56.8788231],[-7.7614504,56.7608274],[-7.6009049,56.7641903],[-7.5972473,56.819332],[-7.4479894,56.8203948],[-7.4489319,56.8794098],[-7.2841369,56.8794098],[-7.2813904,57.0471152],[-7.1303283,57.0515969],[-7.1330749,57.511801],[-6.96828,57.5147514],[-6.9765198,57.6854668],[-6.8062317,57.6913392],[-6.8089782,57.8041985],[-6.6496765,57.8071252],[-6.6441833,57.8612267],[-6.3200866,57.8626878],[-6.3200866,58.1551617],[-6.1607849,58.1522633],[-6.1552917,58.20874],[-5.9850036,58.2101869],[-5.9904968,58.2680163],[-6.1497986,58.2665717],[-6.1415588,58.5557514],[-6.3173401,58.5557514],[-6.3091003,58.4983923],[-6.4876282,58.4955218],[-6.4876282,58.4423768],[-6.6606628,58.4395018],[-6.6469299,58.3819525],[-6.8117248,58.3805125],[-6.8117248,58.3286357],[-6.9792663,58.3286357],[-6.9710266,58.2694608],[-7.1413147,58.2680163],[-7.1403816,58.0358742],[-7.3020636,58.0351031],[-7.3030347,57.9774797],[-7.1379539,57.9777372],[-7.1413526,57.9202792],[-7.1398961,57.8640206],[-7.3020636,57.862471],[-7.298484,57.7442293],[-7.4509193,57.7456951],[-7.4550392,57.6899522],[-7.6186131,57.6906048],[-7.6198341,57.7456951],[-7.7901222,57.7442293],[-7.7873756,57.6855477],[-7.6222332,57.6853817],[-7.6173779,57.5712602],[-7.788285,57.5709998],[-7.7892561,57.512109],[-7.7038025,57.5115874],[-7.6999183,57.4546902],[-7.5367796,57.4552126],[-7.5348375,57.5126306],[-7.4581235,57.5131521],[-7.4552103,57.2824165],[-7.6115515,57.2845158],[-7.6144647,57.2272651],[-7.451326,57.2256881],[-7.451326,57.1103873],[-7.6164068,57.1088053],[-7.603783,56.8792358],[-7.7696901,56.8788231]],[[-1.7106618,59.5626284],[-1.5417509,59.562215],[-1.5423082,59.5037224],[-1.7112191,59.5041365],[-1.7106618,59.5626284]]],"terms_url":"http://geo.nls.uk/maps/","terms_text":"National Library of Scotland Historic Maps"},{"id":"NLSC-EMAP5","name":"NLSC General Map with Contour line","type":"tms","template":"http://wmts.nlsc.gov.tw/wmts/EMAP5_OPENDATA/default/EPSG:3857/{zoom}/{y}/{x}","description":"The emap from Taiwan National Land Surveying and Mapping Center","scaleExtent":[0,15],"polygon":[[[120.4570579,26.3970586],[120.44256,26.3708009],[120.44713,26.3531513],[120.4673009,26.3405831],[120.4978723,26.3340866],[120.5141036,26.3401594],[120.5341168,26.3641649],[120.5297045,26.3842128],[120.4956661,26.4015754],[120.4570579,26.3970586]],[[119.9007221,25.9858609],[119.8960071,25.9648902],[119.9131301,25.9470399],[119.9503542,25.9278478],[119.9905563,25.9260623],[120.0198392,25.9363284],[120.0277804,25.9557423],[120.0275322,25.9845224],[119.9989937,26.0010288],[119.9404278,26.0028131],[119.9007221,25.9858609]],[[122.089,24.5485],[121.709,23.4541],[121.717,22.698],[121.818,21.95],[121.803,21.8735],[121.759,21.8087],[121.694,21.7653],[120.861,21.5631],[120.815,21.5576],[120.739,21.5728],[120.661,21.6296],[120.202,22.1809],[119.27,23.0542],[119.153,23.2049],[119.128,23.2485],[119.103,23.4],[119.118,23.4765],[119.137,23.512],[119.361,23.8885],[119.406,23.9407],[120.968,25.2284],[121.408,25.4687],[121.989,25.8147],[122.065,25.8299],[122.141,25.8147],[122.216,25.7663],[122.26,25.7015],[122.297,25.48],[122.196,24.9696],[122.089,24.5485]],[[116.6855033,20.8547596],[116.6309071,20.8149565],[116.5941695,20.7600846],[116.5797214,20.6967501],[116.5893056,20.6325865],[116.621766,20.5753367],[116.6731874,20.5319171],[116.7373678,20.5075783],[116.8065659,20.5052653],[116.8724354,20.5252581],[116.9270316,20.5651373],[116.9637692,20.6200797],[116.9782173,20.6834462],[116.9686331,20.7475883],[116.9361727,20.8047732],[116.8847512,20.8481147],[116.8205709,20.872399],[116.7513728,20.8747063],[116.6855033,20.8547596]],[[118.2261504,24.4563345],[118.2936439,24.4538527],[118.2851467,24.4751026],[118.3097372,24.4916821],[118.3767709,24.4729348],[118.4100947,24.5332285],[118.4479031,24.5284069],[118.4746394,24.4599272],[118.512992,24.4315479],[118.5065839,24.4202318],[118.4811625,24.4332439],[118.4610567,24.4089192],[118.426145,24.3970385],[118.3970055,24.4284184],[118.3765564,24.4258395],[118.3397565,24.3814628],[118.3031926,24.3705764],[118.2574234,24.4139213],[118.1381276,24.3724838],[118.1617342,24.4022433],[118.2094226,24.4139604],[118.1895784,24.4352201],[118.2176338,24.430205],[118.2261504,24.4563345]],[[120.2234496,26.30045],[120.2550843,26.3100412],[120.269888,26.3368716],[120.2591889,26.3652192],[120.2292544,26.3784823],[120.1976197,26.3688968],[120.182816,26.3420738],[120.1935151,26.3137205],[120.2234496,26.30045]],[[119.4374461,25.0047541],[119.4342024,24.9886249],[119.4541901,24.9722553],[119.4827444,24.9718376],[119.4898402,24.9937882],[119.4715877,25.0069239],[119.4374461,25.0047541]],[[119.8869914,26.180381],[119.893227,26.1203128],[119.9285109,26.1080224],[119.9779388,26.1223611],[120.0366775,26.151728],[120.1098054,26.2134921],[120.119269,26.2713663],[120.0629175,26.3172592],[119.9923706,26.3164881],[119.9467732,26.2898799],[119.9020362,26.2439761],[119.8869914,26.180381]]],"terms_url":"http://maps.nlsc.gov.tw/","terms_text":"© National Land Surveying and Mapping Center, Taiwan OGDL 1.0"},{"id":"MAPNIK","name":"OpenStreetMap (Standard)","type":"tms","template":"https://{switch:a,b,c}.tile.openstreetmap.org/{zoom}/{x}/{y}.png","description":"The default OpenStreetMap layer.","scaleExtent":[0,19],"terms_url":"https://www.openstreetmap.org/","terms_text":"© OpenStreetMap contributors, CC-BY-SA","default":true},{"id":"OpenStreetMap-turistautak","name":"OpenStreetMap (turistautak)","type":"tms","template":"http://{switch:h,i,j}.tile.openstreetmap.hu/turistautak/{zoom}/{x}/{y}.png","scaleExtent":[0,18],"polygon":[[[16.1139147,46.8691038],[16.1789749,46.90662],[16.2000429,46.9415079],[16.2217547,46.9355441],[16.2462784,46.9463851],[16.2553226,46.9642125],[16.2764694,46.9626082],[16.290583,47.0139849],[16.3016199,46.9992329],[16.3414618,46.9965225],[16.3505162,47.0106313],[16.3734016,46.9985929],[16.412765,47.00475],[16.4332705,46.9927417],[16.4478119,47.003893],[16.479997,46.9941169],[16.5121988,47.0011695],[16.4635584,47.0322699],[16.4478586,47.0227481],[16.439123,47.029663],[16.445673,47.038872],[16.520323,47.056103],[16.473213,47.0736169],[16.4637199,47.09392],[16.500798,47.110058],[16.500035,47.123295],[16.5295349,47.1287419],[16.5171609,47.1496938],[16.454951,47.1425878],[16.4648728,47.1683349],[16.4555643,47.1875584],[16.4305559,47.1847022],[16.4195013,47.1949147],[16.4189215,47.2107114],[16.4371293,47.2097043],[16.4426335,47.2337117],[16.4313127,47.2527554],[16.4671512,47.2531652],[16.4892319,47.2798885],[16.4646338,47.3338455],[16.4337002,47.3528101],[16.458513,47.3670496],[16.4454619,47.4070195],[16.4831657,47.4093628],[16.4963821,47.3892659],[16.5170941,47.4100218],[16.5749054,47.4054243],[16.5807291,47.4191699],[16.661847,47.455595],[16.6706419,47.47422],[16.6523395,47.500342],[16.6895619,47.510161],[16.7147797,47.540199],[16.663545,47.567733],[16.673199,47.6049544],[16.6595343,47.6061018],[16.652758,47.622852],[16.6314207,47.6283176],[16.5739108,47.619667],[16.5147382,47.6461964],[16.4967504,47.6393149],[16.425464,47.6621679],[16.4437449,47.674205],[16.4480507,47.6964725],[16.4746984,47.6811576],[16.4872245,47.6979767],[16.5521729,47.7225519],[16.5363779,47.736785],[16.5479799,47.751544],[16.6095193,47.7603722],[16.6344148,47.7590843],[16.65729,47.7414879],[16.7209405,47.7353565],[16.7534062,47.6828165],[16.8301587,47.681058],[16.8394284,47.7045139],[16.8668943,47.7211462],[16.876679,47.6876452],[17.0937421,47.7077706],[17.0706562,47.7285366],[17.0516019,47.7938499],[17.0749479,47.8084997],[17.047139,47.8285635],[17.0519452,47.8377691],[17.0105513,47.8581765],[17.0163878,47.8673325],[17.0857537,47.8746239],[17.113171,47.9271605],[17.0917133,47.9342916],[17.1183782,47.9601083],[17.094657,47.9708775],[17.2010289,48.019992],[17.241769,48.0224651],[17.257955,47.998655],[17.334651,47.993125],[17.4029929,47.947849],[17.4539199,47.8852579],[17.5267369,47.865509],[17.5675779,47.8151289],[17.608402,47.8218859],[17.7085789,47.756678],[17.7798739,47.739487],[17.8660959,47.74575],[17.9001292,47.7392633],[17.946867,47.744668],[17.9708709,47.7578392],[18.0044103,47.7463402],[18.0380583,47.7576812],[18.2958774,47.7314616],[18.4540681,47.7651226],[18.4931553,47.7527552],[18.5590761,47.7659963],[18.6460866,47.7590921],[18.7260691,47.7890411],[18.7411784,47.8138245],[18.7920013,47.8230869],[18.8485417,47.8167221],[18.855876,47.826077],[18.828014,47.834291],[18.8135749,47.85555],[18.76353,47.8716049],[18.756858,47.896838],[18.776746,47.955092],[18.7552499,47.9763469],[18.8157429,47.993442],[18.819998,48.039676],[18.833268,48.048239],[18.8749364,48.0470707],[18.886674,48.058682],[18.9089819,48.051139],[18.9439039,48.058865],[18.9816099,48.0536009],[19.0148639,48.078179],[19.0585249,48.0573529],[19.0843619,48.072781],[19.107402,48.065596],[19.1352889,48.074146],[19.2413679,48.0536529],[19.2557819,48.0715559],[19.3031119,48.088711],[19.3865969,48.091914],[19.400018,48.082304],[19.454053,48.101436],[19.467354,48.083933],[19.4944199,48.109906],[19.492377,48.1396639],[19.5128219,48.154663],[19.504518,48.173443],[19.528967,48.190358],[19.526044,48.20313],[19.577502,48.2160149],[19.6308263,48.2500725],[19.6445239,48.2391719],[19.669857,48.239212],[19.691219,48.203894],[19.721125,48.201473],[19.74618,48.2165119],[19.7871629,48.19253],[19.7987329,48.19482],[19.8052829,48.183733],[19.782415,48.165039],[19.794812,48.153529],[19.821331,48.169081],[19.8452819,48.162742],[19.8551729,48.178431],[19.8601309,48.169409],[19.898745,48.1663119],[19.9145359,48.146863],[19.898298,48.1249019],[19.937383,48.131118],[19.9743939,48.1660049],[19.988706,48.1621679],[20.029038,48.1776849],[20.049449,48.1671999],[20.0729859,48.179606],[20.0700369,48.1917019],[20.1340909,48.225182],[20.1331879,48.253982],[20.206162,48.250979],[20.2038299,48.261906],[20.228466,48.262779],[20.2349469,48.279933],[20.286858,48.26164],[20.3257109,48.272794],[20.3374649,48.301667],[20.3656579,48.316606],[20.384077,48.3511809],[20.4098349,48.365857],[20.402532,48.382565],[20.4205349,48.403858],[20.416228,48.418536],[20.507929,48.489363],[20.5065069,48.534415],[20.537471,48.527878],[20.5464939,48.544292],[20.586595,48.535759],[20.6538739,48.561413],[20.836359,48.58284],[20.8378,48.57421],[20.8504359,48.5816329],[20.8453301,48.5665046],[20.8681549,48.551818],[20.922323,48.559453],[20.9346349,48.538341],[20.955882,48.533963],[20.9561979,48.521666],[20.9815849,48.5177669],[21.0151139,48.532313],[21.0663209,48.525894],[21.1174479,48.4910549],[21.1608749,48.521499],[21.179634,48.518232],[21.221061,48.537497],[21.305488,48.5222489],[21.313377,48.550841],[21.326875,48.554129],[21.319384,48.561201],[21.4154499,48.558951],[21.4226649,48.578821],[21.4406099,48.585104],[21.514091,48.551065],[21.5420199,48.508395],[21.6139329,48.509416],[21.6201879,48.469826],[21.663549,48.417961],[21.6645609,48.392164],[21.7017409,48.380695],[21.711871,48.357617],[21.8174139,48.332787],[21.8352029,48.3346409],[21.837213,48.363253],[21.8842979,48.356047],[21.8848429,48.367539],[21.897883,48.36256],[21.8997959,48.3702229],[21.9281859,48.3615969],[21.9268059,48.370899],[21.949198,48.378728],[21.994463,48.377323],[22.0213259,48.392749],[22.0546049,48.377528],[22.0764859,48.387241],[22.086743,48.371564],[22.1359089,48.380519],[22.131056,48.3912329],[22.152768,48.3962409],[22.1561913,48.4093076],[22.2125722,48.4256468],[22.2371405,48.4100396],[22.2654858,48.4098675],[22.2398761,48.3870055],[22.2675722,48.3611612],[22.3178106,48.3545437],[22.3132861,48.3250712],[22.3372944,48.3079113],[22.3384267,48.2792074],[22.3847547,48.2339632],[22.4006407,48.249198],[22.4328384,48.2525166],[22.456386,48.2423109],[22.4899029,48.2534237],[22.4972201,48.2395546],[22.5161491,48.237965],[22.5311088,48.2094282],[22.5711442,48.1961428],[22.5616362,48.1816066],[22.5982449,48.144756],[22.5902763,48.1073414],[22.6754492,48.091997],[22.7347192,48.119848],[22.7576242,48.1200599],[22.7703914,48.1090162],[22.772319,48.1218742],[22.8027688,48.1221112],[22.8025285,48.1070813],[22.8254256,48.1175119],[22.8364365,48.080249],[22.8611284,48.0750312],[22.8677955,48.0524256],[22.8820424,48.0548053],[22.8659692,48.0113165],[22.835562,47.9905988],[22.8407599,47.9813636],[22.8725729,47.9752683],[22.8697274,47.9659593],[22.8915652,47.9672446],[22.897435,47.9540629],[22.8473299,47.9077579],[22.7928135,47.8908586],[22.7586924,47.8941446],[22.77775,47.8422508],[22.7136344,47.8360928],[22.6801938,47.7877527],[22.6111171,47.7717455],[22.5490018,47.7722246],[22.4812121,47.8108886],[22.4513078,47.803389],[22.4313319,47.7398119],[22.3566167,47.7486206],[22.3177714,47.7660887],[22.3176236,47.7433657],[22.2851369,47.7292757],[22.264325,47.7310675],[22.2589955,47.6979057],[22.2306796,47.693196],[22.1796501,47.5916115],[22.1289245,47.5978984],[22.0942787,47.5583628],[22.0782587,47.5621299],[22.0534529,47.5474795],[22.0712176,47.5380742],[22.0617872,47.5288029],[22.0451278,47.5398919],[22.0367222,47.5326653],[22.0071886,47.48362],[22.0327909,47.4508372],[22.0238835,47.3908631],[22.0119849,47.3758016],[21.9627373,47.381053],[21.9382461,47.3725317],[21.8777922,47.2857763],[21.8872845,47.2730473],[21.8534909,47.2397622],[21.8580662,47.1873597],[21.8124804,47.1667511],[21.7924092,47.1059751],[21.7268258,47.0983882],[21.6976037,47.057915],[21.6504151,47.0408303],[21.6888701,47.0019977],[21.6678744,46.9712337],[21.6814917,46.9652089],[21.6381964,46.9330487],[21.5984455,46.9274708],[21.6142857,46.8867275],[21.6016694,46.8668202],[21.520328,46.8373749],[21.5186086,46.8000703],[21.4831761,46.7650246],[21.5263389,46.7393249],[21.529369,46.7209721],[21.4923253,46.6859652],[21.4728438,46.6959075],[21.4299047,46.693937],[21.4309553,46.6781367],[21.4546661,46.660863],[21.4162375,46.6426231],[21.4097959,46.6218052],[21.3657038,46.6379501],[21.3300499,46.6318155],[21.3139733,46.617666],[21.3012351,46.5908672],[21.3207905,46.5828562],[21.2743045,46.5407362],[21.2600254,46.5021583],[21.2744188,46.4767333],[21.2964506,46.4762973],[21.3174343,46.4507288],[21.2895176,46.4154784],[21.2963256,46.4069601],[21.2250116,46.4136899],[21.2064214,46.4033825],[21.1992563,46.3479034],[21.1762269,46.3357664],[21.180497,46.3044494],[21.1155437,46.3018529],[21.1030549,46.2624637],[21.0708792,46.2539014],[21.0660827,46.2429394],[21.0366237,46.2480392],[21.0246723,46.2665329],[20.960817,46.2623039],[20.9465849,46.2793024],[20.9250701,46.2766191],[20.9218133,46.2618129],[20.8732713,46.2877555],[20.7756538,46.2759602],[20.7490474,46.2508489],[20.7618619,46.204563],[20.727401,46.2077485],[20.7341052,46.1939355],[20.7140487,46.1660531],[20.6843592,46.1447802],[20.6549178,46.1497739],[20.6394471,46.1267602],[20.5450486,46.1790935],[20.5014839,46.190334],[20.4949436,46.1709908],[20.4592293,46.1428837],[20.3975133,46.1574709],[20.3685325,46.1528554],[20.3557074,46.1696256],[20.2968136,46.1521542],[20.2549024,46.1158522],[20.2484757,46.1300956],[20.2330132,46.1241668],[20.1817362,46.1601137],[20.1364966,46.1449476],[20.1009667,46.1772756],[20.0636156,46.1437275],[20.0346142,46.1458888],[20.0158072,46.1768354],[19.9354075,46.1764243],[19.8533469,46.1500005],[19.8179747,46.1281652],[19.7585403,46.1479754],[19.6982054,46.1879317],[19.6827672,46.1800388],[19.661508,46.1904394],[19.6317396,46.1692993],[19.5676482,46.179106],[19.5604013,46.1665762],[19.5026585,46.1424492],[19.5271208,46.1210269],[19.4645033,46.0953827],[19.4665828,46.0820437],[19.4160037,46.0460453],[19.3803957,46.0358749],[19.3640923,46.0522965],[19.2819012,46.0148048],[19.2965348,45.9881173],[19.2856472,45.9968981],[19.1479857,45.9963445],[19.1338422,46.0370993],[19.104873,46.0401673],[19.0660427,46.0001999],[19.0796791,45.9636376],[19.0059803,45.9590674],[19.0092745,45.9236559],[18.9061334,45.9353801],[18.8794572,45.9166827],[18.8647137,45.9208493],[18.8685629,45.9113361],[18.8276792,45.9051714],[18.8220041,45.9145893],[18.8075092,45.9036055],[18.809247,45.8796189],[18.7956242,45.8784488],[18.7048857,45.9181883],[18.6700246,45.9108439],[18.6596602,45.9168934],[18.6651348,45.899279],[18.6412808,45.8890396],[18.6550179,45.8742393],[18.6277704,45.8733782],[18.6148449,45.8531438],[18.6236656,45.8398531],[18.5732391,45.8137578],[18.5749849,45.8004344],[18.559716,45.8037961],[18.5223504,45.7826858],[18.4906706,45.7947167],[18.4821905,45.7655032],[18.4562828,45.7695229],[18.4450763,45.7605195],[18.446853,45.737128],[18.40763,45.7397119],[18.3918949,45.7616983],[18.3642257,45.7729364],[18.3394214,45.7471605],[18.2968157,45.7612196],[18.2440473,45.7612305],[18.2307311,45.7790328],[18.1908702,45.7878759],[18.1681939,45.7762712],[18.1246514,45.7896277],[18.1068067,45.7708256],[18.0818922,45.7645205],[17.9958808,45.7957311],[17.9302095,45.7863301],[17.9066757,45.7925692],[17.8653145,45.7670064],[17.8262748,45.8099957],[17.8089784,45.8040989],[17.7809054,45.8174884],[17.7603399,45.811923],[17.7408624,45.8295975],[17.6632915,45.8381849],[17.6276211,45.8979446],[17.5700676,45.9358204],[17.4378254,45.9503823],[17.4258964,45.9272681],[17.4108059,45.9399665],[17.392149,45.9302149],[17.3828713,45.9475733],[17.3476208,45.9423413],[17.3438769,45.9605329],[17.3537711,45.9525011],[17.3905375,45.9581914],[17.387423,45.9661823],[17.3583539,45.9642737],[17.3754852,45.9686921],[17.3751895,45.9881054],[17.3635685,45.9915442],[17.3567202,45.9735836],[17.3339583,45.9960781],[17.3319847,45.9728948],[17.3129974,45.9665347],[17.323647,45.9887776],[17.2987653,45.9838652],[17.3041996,46.0021128],[17.2579726,46.0110256],[17.29632,46.0285169],[17.2541514,46.030005],[17.270955,46.0567055],[17.2324767,46.0592034],[17.2525145,46.0664725],[17.2313144,46.0790345],[17.2019916,46.0765488],[17.2331299,46.0989644],[17.2104017,46.1001693],[17.2129734,46.113855],[17.175927,46.1084583],[17.1743424,46.1287608],[17.1865197,46.1332308],[17.1810983,46.1505485],[17.1562307,46.1585819],[17.1592857,46.1696818],[17.1261012,46.1684495],[17.1227409,46.1789791],[17.0752482,46.1889531],[17.0661614,46.2022984],[16.9735401,46.2251982],[16.973954,46.2431113],[16.9504085,46.2415285],[16.8862356,46.2814598],[16.8713682,46.3252767],[16.8802109,46.3356966],[16.8615374,46.3452401],[16.8656232,46.3556489],[16.8521959,46.3517189],[16.8498589,46.3626245],[16.8352859,46.3638195],[16.8376499,46.3748032],[16.8261732,46.3670994],[16.7933444,46.387385],[16.7592072,46.3776563],[16.7298672,46.40149],[16.7182119,46.3898704],[16.6772872,46.4494536],[16.6631785,46.4486958],[16.6663732,46.4582995],[16.6187915,46.4619875],[16.604468,46.4760773],[16.5235997,46.5053761],[16.5325768,46.5314027],[16.5176728,46.5363516],[16.5084107,46.5652692],[16.4829969,46.5660383],[16.4834008,46.5786011],[16.4455713,46.610952],[16.4248583,46.6131645],[16.385941,46.6442485],[16.3915424,46.6637257],[16.4198454,46.6584771],[16.4286335,46.6939737],[16.3689211,46.7040082],[16.3798266,46.7153869],[16.3710856,46.7222945],[16.3570587,46.7142387],[16.3185954,46.7541449],[16.3305417,46.7752119],[16.3121626,46.7780033],[16.3127666,46.797314],[16.3406373,46.8051851],[16.3508404,46.8300552],[16.3403309,46.8468762],[16.3015007,46.8595142],[16.2913867,46.8728341],[16.2332296,46.8766702],[16.1560866,46.8537074],[16.126571,46.8569079],[16.1139147,46.8691038]]],"terms_url":"https://www.openstreetmap.org/","terms_text":"© OpenStreetMap contributors"},{"id":"osm-gps","name":"OpenStreetMap GPS traces","type":"tms","template":"https://{switch:a,b,c}.gps-tile.openstreetmap.org/lines/{zoom}/{x}/{y}.png","description":"Public GPS traces uploaded to OpenStreetMap.","scaleExtent":[0,20],"terms_url":"https://www.openstreetmap.org/copyright","terms_text":"© OpenStreetMap contributors","terms_html":"<span style='display: inline-block; padding: 0 8px; background-color: rgba(0,0,0,0.5);'><span style='color: #eee;'>GPS Direction:</span> <span style='font-size: 15px; padding-left: 2px; font-weight: bold;'> <span style='color: #0ee;'>&larr;</span> <span style='color: #96f;'>&darr;</span> <span style='color: #6e0;'>&uarr;</span> <span style='color: #f63;'>&rarr;</span> </span></span> © <a href='https://www.openstreetmap.org/copyright'>OpenStreetMap contributors</a>.","overlay":true},{"id":"lu.geoportail.opendata.ortho2010","name":"Ortho 2010 geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2010/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie"},{"id":"lu.geoportail.opendata.ortho2013","name":"Ortho 2013 geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2013/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie"},{"id":"lu.geoportail.opendata.ortho2016","name":"Ortho 2016 geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/ortho_2016/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.jpeg","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/bd-l-ortho-webservices-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie","best":true},{"id":"OS-historic-25k-OSM_Limited","name":"OS 1:25k historic (OSM)","type":"tms","template":"http://ooc.openstreetmap.org/os1/{zoom}/{x}/{y}.jpg","scaleExtent":[6,17],"polygon":[[[-6.4585407,49.9044128],[-6.3872009,49.9841116],[-6.2296827,49.9896159],[-6.2171269,49.8680087],[-6.4551164,49.8591793],[-6.4585407,49.9044128]],[[-1.4495137,60.8634056],[-0.7167114,60.8545122],[-0.7349744,60.4359756],[-0.6938826,60.4168218],[-0.7258429,60.3942735],[-0.7395401,60.0484714],[-0.9267357,60.0461918],[-0.9381501,59.8266157],[-1.4586452,59.831205],[-1.4455187,60.0535999],[-1.463211,60.0535999],[-1.4643524,60.0630002],[-1.5716475,60.0638546],[-1.5693646,60.1790005],[-1.643558,60.1807033],[-1.643558,60.1892162],[-1.8216221,60.1894999],[-1.8204807,60.3615507],[-1.8415973,60.3697345],[-1.8216221,60.3832755],[-1.8179852,60.5934321],[-1.453168,60.5934321],[-1.4495137,60.8634056]],[[-4.9089213,54.4242078],[-4.282598,54.4429861],[-4.2535417,54.029769],[-4.8766366,54.0221831],[-4.9089213,54.4242078]],[[-5.8667408,59.1444603],[-5.7759966,59.1470945],[-5.7720016,59.1014052],[-5.8621751,59.0990605],[-5.8667408,59.1444603]],[[-1.7065887,59.5703599],[-1.5579165,59.5693481],[-1.5564897,59.4965695],[-1.7054472,59.4975834],[-1.7065887,59.5703599]],[[-7.6865827,58.2940975],[-7.5330594,58.3006957],[-7.5256401,58.2646905],[-7.6797341,58.2577853],[-7.6865827,58.2940975]],[[-4.5338281,59.0359871],[-4.481322,59.0371616],[-4.4796099,59.0186583],[-4.5332574,59.0180707],[-4.5338281,59.0359871]],[[-8.6710698,57.8769896],[-8.4673234,57.8897332],[-8.4467775,57.7907],[-8.6510947,57.7779213],[-8.6710698,57.8769896]],[[-5.2395519,50.3530581],[-5.7920073,50.3384899],[-5.760047,49.9317027],[-4.6551363,49.9581461],[-4.677965,50.2860073],[-4.244219,50.2801723],[-4.2487848,50.2042525],[-3.3812929,50.2042525],[-3.4223846,50.5188201],[-3.1164796,50.5246258],[-3.1210453,50.6579592],[-2.6736357,50.6619495],[-2.5953453,50.6394325],[-2.5905026,50.5728419],[-2.4791203,50.5733545],[-2.4758919,50.5066704],[-2.3967943,50.5056438],[-2.401637,50.5723293],[-1.0400296,50.5718167],[-1.0335726,50.7059289],[-0.549302,50.7038843],[-0.5460736,50.7886618],[-0.0924734,50.7856002],[-0.0876307,50.7181949],[0.4789659,50.7120623],[0.487037,50.8182467],[0.9761503,50.8049868],[0.9922927,51.0126311],[1.4491213,51.0004424],[1.4781775,51.4090372],[1.0229632,51.4271576],[1.035877,51.7640881],[1.6105448,51.7500992],[1.646058,52.1560003],[1.7267698,52.1540195],[1.749369,52.4481811],[1.7870672,52.4811624],[1.759102,52.522505],[1.7933451,52.9602749],[0.3798147,52.9958468],[0.3895238,53.2511239],[0.3478614,53.2511239],[0.3238912,53.282186],[0.3461492,53.6538501],[0.128487,53.6575466],[0.116582,53.6674703],[0.1350586,54.0655731],[-0.0609831,54.065908],[-0.0414249,54.4709448],[-0.5662701,54.4771794],[-0.5592078,54.6565127],[-1.1665638,54.6623485],[-1.1637389,54.842611],[-1.3316194,54.843909],[-1.3257065,55.2470842],[-1.529453,55.2487108],[-1.524178,55.6540122],[-1.7638798,55.6540122],[-1.7733693,55.9719116],[-2.1607858,55.9682981],[-2.1543289,56.0621387],[-2.4578051,56.0585337],[-2.4190635,56.641717],[-2.0962164,56.641717],[-2.0833025,57.0021322],[-1.9283359,57.0126802],[-1.9180966,57.3590895],[-1.7502161,57.3625721],[-1.7695869,57.7608634],[-3.6937554,57.7574187],[-3.7066693,57.9806386],[-3.5969013,57.9772149],[-3.6033582,58.1207277],[-3.0222335,58.1309566],[-3.0286905,58.5410788],[-2.8478961,58.530968],[-2.86081,58.8430508],[-2.679624,58.8414991],[-2.6841897,58.885175],[-2.6339665,58.9052239],[-2.679624,58.9335083],[-2.6887555,59.0229231],[-2.3668703,59.0229231],[-2.3702946,59.2652861],[-2.3429001,59.2821989],[-2.3714361,59.2996861],[-2.3737189,59.3707083],[-2.3429001,59.385825],[-2.3725775,59.400354],[-2.3714361,59.4259098],[-3.0734196,59.4230067],[-3.0711368,59.3433649],[-3.103097,59.3311405],[-3.0745611,59.3136695],[-3.0722782,59.232603],[-3.3850319,59.1484167],[-3.3747589,58.9352753],[-3.5653789,58.9323303],[-3.554829,58.69759],[-5.2808579,58.6667732],[-5.2534159,58.3514125],[-5.5068508,58.3437887],[-5.4761804,58.0323557],[-5.8974958,58.0212436],[-5.8522972,57.6171758],[-6.1396311,57.6137174],[-6.1541592,57.7423183],[-6.2913692,57.7380102],[-6.3365678,58.1398784],[-6.1121891,58.1466944],[-6.1473778,58.5106285],[-6.2934817,58.5416182],[-6.8413713,58.2977321],[-7.0057382,58.2929331],[-7.1016189,58.2064403],[-7.2573132,58.1793148],[-7.2531092,58.1004928],[-7.4070698,58.0905566],[-7.391347,57.7911354],[-7.790991,57.7733151],[-7.7624215,57.5444165],[-7.698501,57.1453194],[-7.7943817,57.1304547],[-7.716764,56.7368628],[-7.0122067,56.7654359],[-6.979922,56.5453858],[-7.0638622,56.5453858],[-7.0444914,56.3562587],[-6.500676,56.3812917],[-6.4491433,55.9793649],[-6.563287,55.9691456],[-6.5393742,55.7030135],[-6.5595521,55.6907321],[-6.5345315,55.6761713],[-6.5216176,55.5704434],[-5.8912587,55.5923416],[-5.8560127,55.2320733],[-5.2293639,55.2515958],[-5.1837064,54.6254139],[-3.6655956,54.6518373],[-3.6496155,54.4320023],[-3.5400375,54.4306744],[-3.530906,54.0290181],[-3.0697656,54.030359],[-3.0675737,53.8221388],[-3.0804876,53.7739911],[-3.0619239,53.7477488],[-3.0611168,53.6737049],[-3.2144691,53.6708361],[-3.2057699,53.4226163],[-3.2799632,53.355224],[-3.2896655,53.3608441],[-3.3327547,53.364931],[-3.3761293,53.3540318],[-4.0888976,53.3433102],[-4.0945474,53.4612036],[-4.697412,53.4448624],[-4.6882805,53.3318598],[-4.7202407,53.2895771],[-4.6837148,53.2486184],[-4.6768661,53.1542644],[-4.8480816,53.1446807],[-4.8178336,52.7440299],[-4.2545751,52.7558939],[-4.228876,52.254876],[-4.2607571,52.2536408],[-4.2724603,52.2432637],[-4.8136263,52.230095],[-4.8079191,52.1138892],[-5.3889104,52.0991668],[-5.3717888,51.9129667],[-5.4208706,51.9101502],[-5.414022,51.8453218],[-5.3683645,51.8474373],[-5.3466772,51.5595332],[-4.773676,51.5758518],[-4.7656859,51.4885146],[-4.1915432,51.4970427],[-4.1869775,51.4344663],[-3.6151177,51.4444274],[-3.6105519,51.3746543],[-3.1494115,51.3789292],[-3.1494115,51.2919281],[-4.3038735,51.2745907],[-4.2861169,51.0508721],[-4.8543277,51.0366633],[-4.8372201,50.7212787],[-5.2618345,50.7082694],[-5.2395519,50.3530581]],[[-2.1502671,60.171318],[-2.0030218,60.1696146],[-2.0013096,60.0997023],[-2.148555,60.1011247],[-2.1502671,60.171318]],[[-6.2086011,59.1163488],[-6.1229934,59.1166418],[-6.121852,59.0714985],[-6.2097426,59.0714985],[-6.2086011,59.1163488]],[[-4.4159559,59.0889036],[-4.4212022,59.0770848],[-4.3971904,59.0779143],[-4.3913388,59.0897328],[-4.4159559,59.0889036]]]},{"id":"OS-New_Popular_Edition-historic","name":"OS New Popular Edition historic","type":"tms","template":"http://ooc.openstreetmap.org/npe/{zoom}/{x}/{y}.png","polygon":[[[-5.8,49.8],[-5.8,55.8],[1.9,55.8],[1.9,49.8],[-5.8,49.8]]]},{"id":"OS-OpenData_Locator","name":"OS OpenData Locator","type":"tms","template":"http://tiles.itoworld.com/os_locator/{zoom}/{x}/{y}.png","polygon":[[[-9,49.8],[-9,61.1],[1.9,61.1],[1.9,49.8],[-9,49.8]]],"overlay":true},{"id":"OS-OpenData_StreetView","name":"OS OpenData StreetView","type":"tms","template":"http://os.openstreetmap.org/sv/{zoom}/{x}/{y}.png","scaleExtent":[1,18],"polygon":[[[-5.8292886,50.0229734],[-5.8292886,50.254819],[-5.373356,50.254819],[-5.373356,50.3530588],[-5.1756021,50.3530588],[-5.1756021,50.5925406],[-4.9970743,50.5925406],[-4.9970743,50.6935617],[-4.7965738,50.6935617],[-4.7965738,50.7822112],[-4.6949503,50.7822112],[-4.6949503,50.9607371],[-4.6043131,50.9607371],[-4.6043131,51.0692066],[-4.3792215,51.0692066],[-4.3792215,51.2521782],[-3.9039346,51.2521782],[-3.9039346,51.2916998],[-3.7171671,51.2916998],[-3.7171671,51.2453014],[-3.1486246,51.2453014],[-3.1486246,51.362067],[-3.7446329,51.362067],[-3.7446329,51.4340386],[-3.8297769,51.4340386],[-3.8297769,51.5298246],[-4.0852091,51.5298246],[-4.0852091,51.4939284],[-4.3792215,51.4939284],[-4.3792215,51.5427168],[-5.1444195,51.5427168],[-5.1444195,51.6296003],[-5.7387103,51.6296003],[-5.7387103,51.774037],[-5.5095393,51.774037],[-5.5095393,51.9802596],[-5.198799,51.9802596],[-5.198799,52.0973358],[-4.8880588,52.0973358],[-4.8880588,52.1831557],[-4.4957492,52.1831557],[-4.4957492,52.2925739],[-4.3015365,52.2925739],[-4.3015365,52.3685318],[-4.1811246,52.3685318],[-4.1811246,52.7933685],[-4.4413696,52.7933685],[-4.4413696,52.7369614],[-4.8569847,52.7369614],[-4.8569847,52.9317255],[-4.7288044,52.9317255],[-4.7288044,53.5038599],[-4.1578191,53.5038599],[-4.1578191,53.4113498],[-3.3110518,53.4113498],[-3.3110518,53.5038599],[-3.2333667,53.5038599],[-3.2333667,54.0159169],[-3.3926211,54.0159169],[-3.3926211,54.1980953],[-3.559644,54.1980953],[-3.559644,54.433732],[-3.7188984,54.433732],[-3.7188984,54.721897],[-4.3015365,54.721897],[-4.3015365,54.6140739],[-5.0473132,54.6140739],[-5.0473132,54.7532915],[-5.2298731,54.7532915],[-5.2298731,55.2190799],[-5.6532567,55.2190799],[-5.6532567,55.250088],[-5.8979647,55.250088],[-5.8979647,55.4822462],[-6.5933212,55.4822462],[-6.5933212,56.3013441],[-7.1727691,56.3013441],[-7.1727691,56.5601822],[-6.8171722,56.5601822],[-6.8171722,56.6991713],[-6.5315276,56.6991713],[-6.5315276,56.9066964],[-6.811679,56.9066964],[-6.811679,57.3716613],[-6.8721038,57.3716613],[-6.8721038,57.5518893],[-7.0973235,57.5518893],[-7.0973235,57.2411085],[-7.1742278,57.2411085],[-7.1742278,56.9066964],[-7.3719817,56.9066964],[-7.3719817,56.8075885],[-7.5202972,56.8075885],[-7.5202972,56.7142479],[-7.8306806,56.7142479],[-7.8306806,56.8994605],[-7.6494061,56.8994605],[-7.6494061,57.4739617],[-7.8306806,57.4739617],[-7.8306806,57.7915584],[-7.4736249,57.7915584],[-7.4736249,58.086063],[-7.1879804,58.086063],[-7.1879804,58.367197],[-6.8034589,58.367197],[-6.8034589,58.4155786],[-6.638664,58.4155786],[-6.638664,58.4673277],[-6.5178143,58.4673277],[-6.5178143,58.5625632],[-6.0536224,58.5625632],[-6.0536224,58.1568843],[-6.1470062,58.1568843],[-6.1470062,58.1105865],[-6.2799798,58.1105865],[-6.2799798,57.7122664],[-6.1591302,57.7122664],[-6.1591302,57.6667563],[-5.9339104,57.6667563],[-5.9339104,57.8892524],[-5.80643,57.8892524],[-5.80643,57.9621767],[-5.6141692,57.9621767],[-5.6141692,58.0911236],[-5.490819,58.0911236],[-5.490819,58.3733281],[-5.3199118,58.3733281],[-5.3199118,58.75015],[-3.5719977,58.75015],[-3.5719977,59.2091788],[-3.1944501,59.2091788],[-3.1944501,59.4759216],[-2.243583,59.4759216],[-2.243583,59.1388749],[-2.4611012,59.1388749],[-2.4611012,58.8185938],[-2.7407675,58.8185938],[-2.7407675,58.5804743],[-2.9116746,58.5804743],[-2.9116746,58.1157523],[-3.4865441,58.1157523],[-3.4865441,57.740386],[-1.7153245,57.740386],[-1.7153245,57.2225558],[-1.9794538,57.2225558],[-1.9794538,56.8760742],[-2.1658979,56.8760742],[-2.1658979,56.6333186],[-2.3601106,56.6333186],[-2.3601106,56.0477521],[-1.9794538,56.0477521],[-1.9794538,55.8650949],[-1.4745008,55.8650949],[-1.4745008,55.2499926],[-1.3221997,55.2499926],[-1.3221997,54.8221737],[-1.0550014,54.8221737],[-1.0550014,54.6746628],[-0.6618765,54.6746628],[-0.6618765,54.5527463],[-0.3247617,54.5527463],[-0.3247617,54.2865195],[0.0092841,54.2865195],[0.0092841,53.7938518],[0.2081962,53.7938518],[0.2081962,53.5217726],[0.4163548,53.5217726],[0.4163548,53.0298851],[1.4273388,53.0298851],[1.4273388,52.92021],[1.8333912,52.92021],[1.8333912,52.042488],[1.5235504,52.042488],[1.5235504,51.8261335],[1.2697049,51.8261335],[1.2697049,51.6967453],[1.116651,51.6967453],[1.116651,51.440346],[1.5235504,51.440346],[1.5235504,51.3331831],[1.4507565,51.3331831],[1.4507565,51.0207553],[1.0699883,51.0207553],[1.0699883,50.9008416],[0.7788126,50.9008416],[0.7788126,50.729843],[-0.7255952,50.729843],[-0.7255952,50.7038437],[-1.0074383,50.7038437],[-1.0074383,50.5736307],[-2.3625252,50.5736307],[-2.3625252,50.4846421],[-2.4987805,50.4846421],[-2.4987805,50.5736307],[-3.4096378,50.5736307],[-3.4096378,50.2057837],[-3.6922446,50.2057837],[-3.6922446,50.1347737],[-5.005468,50.1347737],[-5.005468,49.9474456],[-5.2839506,49.9474456],[-5.2839506,50.0229734],[-5.8292886,50.0229734]],[[-6.4580707,49.8673563],[-6.4580707,49.9499935],[-6.3978807,49.9499935],[-6.3978807,50.0053797],[-6.1799606,50.0053797],[-6.1799606,49.9168614],[-6.2540201,49.9168614],[-6.2540201,49.8673563],[-6.4580707,49.8673563]],[[-5.8343165,49.932156],[-5.8343165,49.9754641],[-5.7683254,49.9754641],[-5.7683254,49.932156],[-5.8343165,49.932156]],[[-1.9483797,60.6885737],[-1.9483797,60.3058841],[-1.7543149,60.3058841],[-1.7543149,60.1284428],[-1.5754914,60.1284428],[-1.5754914,59.797917],[-1.0316959,59.797917],[-1.0316959,60.0354518],[-0.6626918,60.0354518],[-0.6626918,60.9103862],[-1.1034395,60.9103862],[-1.1034395,60.8040022],[-1.3506319,60.8040022],[-1.3506319,60.6885737],[-1.9483797,60.6885737]],[[-2.203381,60.1968568],[-2.203381,60.0929443],[-1.9864011,60.0929443],[-1.9864011,60.1968568],[-2.203381,60.1968568]],[[-1.7543149,59.5698289],[-1.7543149,59.4639383],[-1.5373349,59.4639383],[-1.5373349,59.5698289],[-1.7543149,59.5698289]],[[-4.5585981,59.1370518],[-4.5585981,58.9569099],[-4.2867004,58.9569099],[-4.2867004,59.1370518],[-4.5585981,59.1370518]],[[-6.2787732,59.2025744],[-6.2787732,59.0227769],[-5.6650612,59.0227769],[-5.6650612,59.2025744],[-6.2787732,59.2025744]],[[-8.7163482,57.9440556],[-8.7163482,57.7305936],[-8.3592926,57.7305936],[-8.3592926,57.9440556],[-8.7163482,57.9440556]],[[-7.6077005,50.4021026],[-7.6077005,50.2688657],[-7.3907205,50.2688657],[-7.3907205,50.4021026],[-7.6077005,50.4021026]],[[-7.7304303,58.3579902],[-7.7304303,58.248313],[-7.5134503,58.248313],[-7.5134503,58.3579902],[-7.7304303,58.3579902]]]},{"id":"OS-Scottish_Popular-historic","name":"OS Scottish Popular historic","type":"tms","template":"http://ooc.openstreetmap.org/npescotland/tiles/{zoom}/{x}/{y}.jpg","scaleExtent":[6,15],"polygon":[[[-7.8,54.5],[-7.8,61.1],[-1.1,61.1],[-1.1,54.5],[-7.8,54.5]]]},{"id":"Pangasinan_Bulacan_HiRes","name":"Pangasinán/Bulacan (Philippines HiRes)","type":"tms","template":"http://gravitystorm.dev.openstreetmap.org/imagery/philippines/{zoom}/{x}/{y}.png","scaleExtent":[12,19],"polygon":[[[120.336593,15.985768],[120.445995,15.984],[120.446134,15.974459],[120.476464,15.974592],[120.594247,15.946832],[120.598064,16.090795],[120.596537,16.197999],[120.368537,16.218527],[120.347576,16.042308],[120.336593,15.985768]],[[120.8268,15.3658],[121.2684,15.2602],[121.2699,14.7025],[120.695,14.8423],[120.8268,15.3658]]]},{"id":"Actueel_ortho25_WMTS","name":"PDOK Luchtfoto Beeldmateriaal 25cm","type":"tms","template":"http://geodata.nationaalgeoregister.nl/luchtfoto/wmts?FORMAT=image/jpeg&SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=2016_ortho25&STYLE=&FORMAT=image/jpeg&tileMatrixSet=OGC:1.0:GoogleMapsCompatible&tileMatrix={zoom}&tileRow={y}&tileCol={x}","description":"Landsdekkende dataset 25cm resolutie kleuren luchtfotos van de meest recente jaargang.","scaleExtent":[0,18],"polygon":[[[3.1437689,51.3598403],[3.1575018,51.2411346],[3.3387762,51.1154412],[3.9128119,51.0585083],[4.6571356,51.2806657],[4.8933416,51.2634825],[5.1789862,51.1257851],[5.3849798,51.1309561],[5.5442816,51.056782],[5.4206854,50.8595581],[5.4673773,50.7032633],[5.6568914,50.6192567],[6.1485296,50.6214349],[6.3023382,50.8578243],[6.2995916,50.9543819],[6.2638861,51.0183545],[6.3723761,51.0925902],[6.4012152,51.2011393],[6.3737494,51.2510206],[6.4451605,51.3158713],[6.4204413,51.5496009],[6.343537,51.6792182],[6.796723,51.7642909],[7.046662,51.9102418],[7.0713812,52.0455856],[7.2718817,52.1704147],[7.3075872,52.3855111],[7.2059637,52.5319494],[7.282868,52.614576],[7.2993475,52.7785318],[7.4421698,52.9782705],[7.43393,53.2831352],[7.0439154,53.5515877],[6.7829901,53.6363531],[6.2391668,53.5401639],[5.6871039,53.5124077],[5.173493,53.4388477],[4.8164373,53.2338445],[4.6516424,53.0658312],[4.5417791,52.4859784],[4.3220526,52.1956753],[4.08104,52.0136897],[4.0219885,52.0162253],[3.9368445,51.9637937],[3.9519507,51.8807927],[3.844834,51.8494157],[3.6237341,51.7075226],[3.6553198,51.6606936],[3.6333471,51.6274583],[3.5468298,51.622343],[3.3957678,51.5609145],[3.3820349,51.5173524],[3.4987646,51.4326715],[3.3298498,51.3855587],[3.1437689,51.3598403]]],"terms_url":"http://www.nationaalgeoregister.nl/geonetwork/srv/dut/catalog.search#/search?facet.q=license%2FCC-BY&isChild=%27false%27&resultType=details&any_OR_title_OR_keyword=luchtfoto&fast=index&_content_type=json&from=1&to=20&sortBy=relevance","terms_text":"Kadaster / Beeldmateriaal.nl, CC BY 4.0","best":true},{"id":"PNOA-Spain-TMS","name":"PNOA Spain","type":"tms","template":"http://www.ign.es/wmts/pnoa-ma?request=GetTile&service=WMTS&VERSION=1.0.0&Layer=OI.OrthoimageCoverage&Style=default&Format=image/png&TileMatrixSet=GoogleMapsCompatible&TileMatrix={zoom}&TileRow={y}&TileCol={x}","polygon":[[[-17.8846298,28.4460601],[-17.8939535,28.5225529],[-18.0212548,28.7481927],[-18.0224091,28.8038375],[-17.9424017,28.8726124],[-17.8911792,28.8737099],[-17.8903302,28.8515102],[-17.7675902,28.8537764],[-17.7669837,28.8312183],[-17.7412714,28.8319975],[-17.7394926,28.7642235],[-17.7139824,28.7649677],[-17.7129312,28.7303731],[-17.7574427,28.6931782],[-17.7570788,28.6741254],[-17.7457913,28.6743524],[-17.7457266,28.6165627],[-17.7519687,28.5833675],[-17.7622536,28.5591958],[-17.7833086,28.541667],[-17.7831575,28.4936643],[-17.808611,28.4925024],[-17.8060072,28.4468974],[-17.8846298,28.4460601]],[[-18.1661033,27.7851643],[-18.163494,27.6949247],[-18.0889827,27.6963366],[-18.0873398,27.6738724],[-18.0364092,27.6753701],[-18.0350079,27.6302571],[-17.9589987,27.6323976],[-17.8603269,27.7926025],[-17.8630328,27.8368793],[-17.8884015,27.8364947],[-17.8891263,27.8590536],[-17.9906491,27.8567467],[-18.0386803,27.7655831],[-18.1146412,27.7637873],[-18.1154627,27.7863613],[-18.1661033,27.7851643]],[[-17.36038,28.0639801],[-17.3629657,28.1757247],[-17.3375583,28.1763688],[-17.3384577,28.2213012],[-17.1857883,28.2238767],[-17.0820788,28.1351849],[-17.0808422,28.0679977],[-17.1315446,28.0668073],[-17.1563337,28.0214628],[-17.2321063,28.0203711],[-17.2319938,27.9980388],[-17.2576823,27.9978403],[-17.257851,28.0199741],[-17.3086658,28.0192298],[-17.36038,28.0639801]],[[-16.9278171,28.3275779],[-16.9286591,28.3721879],[-16.8776666,28.3729288],[-16.8780707,28.3954191],[-16.5214259,28.4226146],[-16.4457117,28.491135],[-16.4462506,28.535972],[-16.4205859,28.5362679],[-16.4209227,28.5588419],[-16.3443329,28.5597589],[-16.3446023,28.5822095],[-16.1912541,28.5837179],[-16.1916246,28.6068435],[-16.1279344,28.6078193],[-16.1277997,28.5921762],[-16.0995079,28.5925015],[-16.0993395,28.5163822],[-16.1648148,28.5161158],[-16.1647474,28.4938583],[-16.2385755,28.4484704],[-16.2653516,28.4476116],[-16.2658569,28.4030038],[-16.3167484,28.4017594],[-16.3163105,28.380189],[-16.3420763,28.3795075],[-16.3408301,28.2892963],[-16.415837,28.1976134],[-16.415096,28.1311312],[-16.5153297,28.0164796],[-16.6168433,28.01532],[-16.6168096,27.9930469],[-16.7184243,27.9919168],[-16.7190979,28.0371426],[-16.7446952,28.0367859],[-16.7453351,28.0818146],[-16.7706967,28.0816065],[-16.8223966,28.1259036],[-16.8231712,28.1708652],[-16.8487012,28.1707464],[-16.8502842,28.260791],[-16.8756457,28.2605537],[-16.8760836,28.2832162],[-16.9015125,28.2827713],[-16.9023882,28.3279337],[-16.9278171,28.3275779]],[[-15.8537427,27.9008901],[-15.8542032,27.9901812],[-15.828953,27.9906555],[-15.8291065,28.035578],[-15.7782992,28.0363232],[-15.7532793,28.0814298],[-15.7278756,28.0815652],[-15.7282593,28.1718567],[-15.4989741,28.1728039],[-15.4987438,28.1504075],[-15.4497785,28.1507459],[-15.4501622,28.1961425],[-15.3972827,28.1961425],[-15.3964385,28.0383554],[-15.3710348,28.0380167],[-15.3706511,28.0153212],[-15.3457847,28.0153212],[-15.3454777,27.9254406],[-15.3708046,27.9252372],[-15.3705743,27.8352137],[-15.395978,27.8347387],[-15.4209979,27.7879673],[-15.4718052,27.7893932],[-15.471882,27.7666454],[-15.522766,27.7667813],[-15.5477092,27.7216112],[-15.6236132,27.7213395],[-15.6241504,27.741991],[-15.7007451,27.7433495],[-15.801669,27.8110501],[-15.8537427,27.9008901]],[[-14.5215621,28.0467778],[-14.5224358,28.1184131],[-14.4157526,28.1156076],[-14.2168794,28.2278805],[-14.2153651,28.33903],[-14.1641672,28.4528287],[-14.1115132,28.4747955],[-14.0335806,28.7226671],[-13.9565217,28.7449351],[-13.9561722,28.7665857],[-13.8290221,28.7664325],[-13.8289639,28.7879765],[-13.8000741,28.7879255],[-13.8012972,28.7189894],[-13.827566,28.719347],[-13.8278572,28.6517968],[-13.8025786,28.651899],[-13.8033941,28.5384172],[-13.8288474,28.5384684],[-13.8315061,28.3970177],[-13.9158189,28.2241438],[-13.9856445,28.2235696],[-14.0369588,28.1795787],[-14.1387139,28.1799894],[-14.1386556,28.1579103],[-14.2153651,28.1578076],[-14.2147244,28.1118888],[-14.2913173,28.0452356],[-14.3319673,28.0368713],[-14.4457846,28.0469834],[-14.4466583,28.0657961],[-14.4962835,28.0682631],[-14.495934,28.0458525],[-14.5215621,28.0467778]],[[-13.800662,28.8456579],[-13.8009273,28.8231121],[-13.775688,28.8230539],[-13.69729,28.8898184],[-13.69729,28.9127744],[-13.6072498,28.9117991],[-13.4388551,29.0002417],[-13.4374559,29.1351289],[-13.4117005,29.1349931],[-13.4105556,29.2229789],[-13.4592801,29.255586],[-13.4597392,29.2942023],[-13.5091254,29.2945638],[-13.5100581,29.3163453],[-13.5635382,29.3172941],[-13.5640564,29.2713764],[-13.5389228,29.2711956],[-13.5389747,29.2500375],[-13.5661293,29.2501279],[-13.5665956,29.2030039],[-13.5156549,29.2022349],[-13.5156549,29.1820579],[-13.5398038,29.1827819],[-13.5408921,29.137528],[-13.65782,29.1368528],[-13.713222,29.0935079],[-13.7663353,29.0934533],[-13.8502463,29.0165937],[-13.8518224,28.983425],[-13.8524443,28.914861],[-13.9013122,28.89245],[-13.9024005,28.8469779],[-13.800662,28.8456579]],[[1.6479916,38.9990693],[1.7321668,38.9993635],[1.7314703,39.0441733],[1.6489512,39.0431944],[1.6481552,39.1276358],[1.3948608,39.1265691],[1.3954412,39.0864199],[1.2281145,39.0852615],[1.2291095,39.0028958],[1.1448657,39.0018003],[1.1452803,38.8319988],[1.3113632,38.8331615],[1.3121924,38.7906483],[1.3946949,38.7916178],[1.3951924,38.7529597],[1.3112803,38.7519251],[1.3125919,38.6238804],[1.6489036,38.6251112],[1.6480745,38.7111504],[1.58456,38.7101152],[1.5811604,38.7005387],[1.5491544,38.7002798],[1.5197188,38.7092094],[1.50355,38.7253185],[1.4813282,38.9155064],[1.5518906,38.9254411],[1.5667328,38.9566554],[1.6487378,38.9583318],[1.6479916,38.9990693]],[[2.5450749,39.4166673],[2.43933,39.4161122],[2.438714,39.4846853],[2.439022,39.4993424],[2.3122308,39.4993424],[2.3119228,39.5417911],[2.2290722,39.5409994],[2.2283536,39.6260571],[2.3460076,39.6270851],[2.9270445,39.9601558],[3.1456647,39.9600498],[3.1460753,40.0019797],[3.2313899,40.0019797],[3.2312872,39.8329231],[3.1482313,39.8331596],[3.1484366,39.7935717],[3.4814817,39.7931773],[3.4803472,39.5959027],[3.3150618,39.4784606],[3.3146179,39.3785504],[3.0830178,39.2499355],[2.9798608,39.2501482],[2.9790395,39.3334971],[2.7287424,39.3334177],[2.7288451,39.4581361],[2.6456865,39.4577397],[2.6453785,39.4996593],[2.5452802,39.4994216],[2.5450749,39.4166673]],[[3.8120402,40.0434431],[3.729082,40.0437979],[3.7286185,39.9584155],[3.8126633,39.9576011],[3.8122771,39.9164393],[3.9608975,39.9159813],[4.1938142,39.791308],[4.3150279,39.7905799],[4.3159934,39.8329294],[4.3987393,39.8320396],[4.3973664,39.9185834],[4.3158003,39.9193274],[4.3161865,40.0433985],[4.2318959,40.0443594],[4.2324752,40.0847793],[4.1491501,40.086109],[4.1490623,40.1255157],[4.0627981,40.1272166],[4.0624217,40.0849941],[3.8128687,40.085294],[3.8120402,40.0434431]],[[-8.8910646,41.8228891],[-9.1092038,42.5751065],[-9.0365469,42.730656],[-9.0883419,42.7269569],[-9.1466113,42.7750272],[-9.2185488,42.9016271],[-9.2760988,42.8605106],[-9.3099094,42.9311297],[-9.2789763,42.9821991],[-9.3099094,43.0600377],[-9.2523594,43.1041725],[-9.2314975,43.1703151],[-9.1473307,43.210176],[-9.06748,43.1991644],[-9.0336694,43.2426748],[-8.99842,43.2447709],[-8.9998588,43.2955793],[-8.9372732,43.3055265],[-8.92936,43.326986],[-8.8638969,43.3290792],[-8.8761263,43.3740655],[-8.8221732,43.3735426],[-8.785485,43.3191358],[-8.7063538,43.305003],[-8.6099575,43.3296025],[-8.5509688,43.3233227],[-8.5243519,43.3364048],[-8.5250713,43.3646525],[-8.45745,43.3918416],[-8.3610538,43.4111803],[-8.3603344,43.4634161],[-8.3344369,43.5797394],[-8.2776063,43.5708796],[-8.0646713,43.7239184],[-7.9992081,43.7233986],[-7.9171994,43.7826357],[-7.8560525,43.7914643],[-7.83591,43.7374337],[-7.6628443,43.809819],[-7.3188932,43.6782695],[-7.1997467,43.5830817],[-6.2488228,43.6075032],[-6.1229322,43.5790105],[-5.8520425,43.6798953],[-5.6036334,43.5708672],[-5.2855347,43.5619084],[-5.1787525,43.4991591],[-4.9089869,43.4836655],[-4.6156167,43.4192021],[-4.1839917,43.4249168],[-3.8029478,43.5195394],[-3.7400025,43.4869277],[-3.5612827,43.5423572],[-3.1083013,43.3816347],[-2.9385737,43.4624573],[-2.7452417,43.4755094],[-2.3046245,43.3170625],[-1.9854018,43.3563045],[-1.8552841,43.3972545],[-1.769802,43.3964383],[-1.7700492,43.3760501],[-1.7100474,43.3756908],[-1.7113451,43.3312527],[-1.7225915,43.3131806],[-1.6890375,43.3129108],[-1.6881106,43.3341294],[-1.6446695,43.3337248],[-1.6449785,43.3133155],[-1.6029903,43.3129528],[-1.6034352,43.2926624],[-1.5635905,43.2921227],[-1.5630468,43.3133844],[-1.4779905,43.3128355],[-1.3667723,43.2761368],[-1.3568809,43.2381533],[-1.3703692,43.1712972],[-1.4423067,43.0833554],[-1.4198262,43.0603647],[-1.3730668,43.051166],[-1.3640746,43.1115893],[-1.3020285,43.135217],[-1.2354864,43.1332484],[-1.2795481,43.0774443],[-1.1923239,43.0649635],[-1.0061856,43.0077821],[-0.942341,42.9748951],[-0.7562028,42.9821318],[-0.7148387,42.9610774],[-0.6968543,42.9031405],[-0.5511809,42.8220693],[-0.5044215,42.8484456],[-0.4288871,42.8200906],[-0.3164848,42.8655842],[-0.1456332,42.810856],[-0.0314324,42.7124874],[0.1861785,42.7540985],[0.3021777,42.7177729],[0.3642238,42.7428729],[0.4487504,42.7144695],[0.6276949,42.7223973],[0.6411832,42.8576747],[0.7149192,42.882718],[0.9675996,42.8181119],[1.108777,42.7989808],[1.1753192,42.7342872],[1.3632559,42.7415521],[1.4113736,42.7093914],[1.4806054,42.7103407],[1.4813006,42.5010664],[1.6443591,42.5020345],[1.6432777,42.5424539],[1.730407,42.5434214],[1.7316429,42.5011803],[2.0638621,42.5016359],[2.0645572,42.4590247],[2.3969309,42.4599364],[2.3976786,42.4178363],[2.4804823,42.4179732],[2.4809767,42.3759441],[2.6447922,42.3762636],[2.6444832,42.4592447],[2.8113266,42.4596094],[2.8112648,42.5010358],[3.063878,42.5008535],[3.063878,42.4591535],[3.2307832,42.4593359],[3.2304935,42.3764363],[3.3141469,42.3760369],[3.3141243,42.3339864],[3.397855,42.3340435],[3.3973912,42.290094],[3.3138923,42.2908368],[3.3139695,42.2070151],[3.1475896,42.2073012],[3.1475896,42.1260612],[3.2305478,42.1260039],[3.2466753,41.9529359],[3.1945206,41.8558943],[3.060537,41.7647419],[2.7835777,41.6371796],[2.26293,41.4271601],[2.1649151,41.2989297],[1.86008,41.2232228],[1.3763003,41.116273],[1.1793714,41.0464585],[1.0858526,41.048493],[0.758537,40.8195599],[0.9114042,40.733761],[0.8781331,40.6751363],[0.6650182,40.5358666],[0.5580112,40.5502166],[0.433919,40.3757589],[0.2675635,40.1919192],[0.1641534,40.0647234],[0.0751307,40.0144671],[0.010387,39.8952188],[-0.0939224,39.8116904],[-0.1847435,39.6311716],[-0.2908513,39.5036254],[-0.2863552,39.333431],[-0.1856427,39.1774612],[-0.2135185,39.1558487],[-0.1110076,38.9722246],[0.0094878,38.8826835],[0.1218901,38.872183],[0.2342925,38.798636],[0.2558737,38.7264162],[0.0958128,38.6133825],[-0.0022021,38.6070586],[-0.0570544,38.5269073],[-0.2719677,38.4762395],[-0.379874,38.3931234],[-0.3834708,38.3381297],[-0.4509122,38.3310763],[-0.5048654,38.2830943],[-0.4823849,38.1948095],[-0.429331,38.1658287],[-0.4545091,38.148859],[-0.5839966,38.1721913],[-0.6136708,38.1198599],[-0.6370505,37.9612228],[-0.6811123,37.9456238],[-0.7323677,37.8810656],[-0.7215771,37.7830562],[-0.688306,37.7340026],[-0.6641461,37.6231485],[-0.7193941,37.5878413],[-0.9196258,37.5375806],[-1.1107098,37.5164093],[-1.3383246,37.5286671],[-1.4408917,37.3903714],[-1.6766966,37.2765189],[-1.8540816,36.9122889],[-2.0683486,36.6929117],[-2.2158766,36.6619233],[-2.3721861,36.7801753],[-2.6812926,36.6591056],[-2.9201476,36.6675585],[-3.09402,36.712625],[-3.4610839,36.6548788],[-3.7280395,36.6929117],[-4.3743529,36.6633322],[-4.6571151,36.4404171],[-4.9188018,36.4531321],[-5.1699508,36.3513541],[-5.2841094,36.1970201],[-5.2680911,36.1241812],[-5.3524784,36.1224654],[-5.3516094,36.0401413],[-5.4365759,36.0388921],[-5.4353207,36.0034384],[-5.6888562,36.0036518],[-5.6899635,36.0405317],[-5.85506,36.0385595],[-5.8566821,36.1242077],[-5.9384817,36.1221487],[-5.9400265,36.1655625],[-5.9983445,36.1645024],[-6.0357297,36.1780957],[-6.0775178,36.2224132],[-6.1506113,36.2864561],[-6.231541,36.3770075],[-6.3358504,36.5310643],[-6.3214629,36.5816265],[-6.404191,36.6234958],[-6.4743301,36.7489673],[-6.4158808,36.7993866],[-6.490516,36.9173818],[-6.6298949,37.0194012],[-6.8744824,37.1083766],[-7.0426363,37.1850699],[-7.2647434,37.1843535],[-7.3753473,37.1535419],[-7.408316,37.1682196],[-7.4202886,37.2118318],[-7.4249231,37.2350505],[-7.4380543,37.2451969],[-7.4459717,37.3326142],[-7.4480958,37.3909382],[-7.4696271,37.4075829],[-7.4647029,37.4530494],[-7.5019723,37.516411],[-7.5191587,37.5229203],[-7.5219588,37.5723727],[-7.4501271,37.6695835],[-7.4249019,37.7599222],[-7.316662,37.839974],[-7.268329,37.988952],[-7.1536786,38.0155235],[-7.1177098,38.0553626],[-7.0142997,38.0243785],[-6.9963153,38.1075633],[-6.9614706,38.201254],[-7.080617,38.1570753],[-7.3402665,38.4402363],[-7.2638329,38.7380741],[-7.0435243,38.8729667],[-7.0615086,38.907962],[-6.9693387,39.0198308],[-7.0008114,39.0887867],[-7.1536786,39.0957658],[-7.1525545,39.1602899],[-7.2447245,39.1968854],[-7.2559647,39.2813308],[-7.3368944,39.3535074],[-7.3279022,39.4559917],[-7.5144901,39.5886496],[-7.5527069,39.6795427],[-7.0502684,39.6752171],[-6.9951913,39.8195433],[-6.9221297,39.8790868],[-6.886161,40.0229854],[-7.0412762,40.1347927],[-7.0176717,40.266146],[-6.8086034,40.3450071],[-6.8681766,40.4451649],[-6.8535643,40.6066433],[-6.837828,40.8757589],[-6.9536024,41.0370445],[-6.8018592,41.0395879],[-6.7681385,41.138706],[-6.6411239,41.2655616],[-6.5624422,41.2630269],[-6.217367,41.5791017],[-6.3162811,41.644652],[-6.5152332,41.6412921],[-6.5871707,41.6883151],[-6.5478299,41.8559743],[-6.6298836,41.9112057],[-7.1334461,41.9404756],[-7.1682909,41.8718791],[-7.4256922,41.7847727],[-7.9539833,41.8459271],[-8.130455,41.7805819],[-8.2518495,41.9078597],[-8.1293309,42.0348842],[-8.2484774,42.1008034],[-8.3676239,42.0557521],[-8.6070409,42.0340493],[-8.8910646,41.8228891]]],"terms_text":"PNOA","best":true},{"id":"Geodatastyrelsen_Denmark","name":"SDFE aerial imagery","type":"tms","template":"http://osmtools.septima.dk/mapproxy/tiles/1.0.0/kortforsyningen_ortoforaar/EPSG3857/{zoom}/{x}/{y}.jpeg","scaleExtent":[0,21],"polygon":[[[8.3743941,54.9551655],[8.3683809,55.4042149],[8.2103997,55.4039795],[8.2087314,55.4937345],[8.0502655,55.4924731],[8.0185123,56.7501399],[8.1819161,56.7509948],[8.1763274,57.0208898],[8.3413329,57.0219872],[8.3392467,57.1119574],[8.5054433,57.1123212],[8.5033923,57.2020499],[9.3316304,57.2027636],[9.3319079,57.2924835],[9.4978864,57.2919578],[9.4988593,57.3820608],[9.6649749,57.3811615],[9.6687295,57.5605591],[9.8351961,57.5596265],[9.8374896,57.6493322],[10.1725726,57.6462818],[10.1754245,57.7367768],[10.5118282,57.7330269],[10.5152095,57.8228945],[10.6834853,57.8207722],[10.6751613,57.6412021],[10.5077045,57.6433097],[10.5039992,57.5535088],[10.671038,57.5514113],[10.6507805,57.1024538],[10.4857673,57.1045138],[10.4786236,56.9249051],[10.3143981,56.9267573],[10.3112341,56.8369269],[10.4750295,56.83509],[10.4649016,56.5656681],[10.9524239,56.5589761],[10.9479249,56.4692243],[11.1099335,56.4664675],[11.1052639,56.376833],[10.9429901,56.3795284],[10.9341235,56.1994768],[10.7719685,56.2020244],[10.7694751,56.1120103],[10.6079695,56.1150259],[10.4466742,56.116717],[10.2865948,56.118675],[10.2831527,56.0281851],[10.4439274,56.0270388],[10.4417713,55.7579243],[10.4334961,55.6693533],[10.743814,55.6646861],[10.743814,55.5712253],[10.8969041,55.5712253],[10.9051793,55.3953852],[11.0613726,55.3812841],[11.0593038,55.1124061],[11.0458567,55.0318621],[11.2030844,55.0247474],[11.2030844,55.117139],[11.0593038,55.1124061],[11.0613726,55.3812841],[11.0789572,55.5712253],[10.8969041,55.5712253],[10.9258671,55.6670198],[10.743814,55.6646861],[10.7562267,55.7579243],[10.4417713,55.7579243],[10.4439274,56.0270388],[10.4466742,56.116717],[10.6079695,56.1150259],[10.6052053,56.0247462],[10.9258671,56.0201215],[10.9197132,55.9309388],[11.0802782,55.92792],[11.0858066,56.0178284],[11.7265047,56.005058],[11.7319981,56.0952142],[12.0540333,56.0871256],[12.0608477,56.1762576],[12.7023469,56.1594405],[12.6611131,55.7114318],[12.9792318,55.7014026],[12.9612912,55.5217294],[12.3268659,55.5412096],[12.3206071,55.4513655],[12.4778226,55.447067],[12.4702432,55.3570479],[12.6269738,55.3523837],[12.6200898,55.2632576],[12.4627339,55.26722],[12.4552949,55.1778223],[12.2987046,55.1822303],[12.2897344,55.0923641],[12.6048608,55.0832904],[12.5872011,54.9036285],[12.2766618,54.9119031],[12.2610181,54.7331602],[12.1070691,54.7378161],[12.0858621,54.4681655],[11.7794953,54.4753579],[11.7837381,54.5654783],[11.1658525,54.5782155],[11.1706443,54.6686508],[10.8617173,54.6733956],[10.8651245,54.7634667],[10.7713646,54.7643888],[10.7707276,54.7372807],[10.7551428,54.7375776],[10.7544039,54.7195666],[10.7389074,54.7197588],[10.7384368,54.7108482],[10.7074486,54.7113045],[10.7041094,54.6756741],[10.5510973,54.6781698],[10.5547184,54.7670245],[10.2423994,54.7705935],[10.2459845,54.8604673],[10.0902268,54.8622134],[10.0873731,54.7723851],[9.1555798,54.7769557],[9.1562752,54.8675369],[8.5321973,54.8663765],[8.531432,54.95516],[8.3743941,54.9551655]],[[11.4577738,56.819554],[11.7849181,56.8127385],[11.7716715,56.6332796],[11.4459621,56.6401087],[11.4577738,56.819554]],[[11.3274736,57.3612962],[11.3161808,57.1818004],[11.1508692,57.1847276],[11.1456628,57.094962],[10.8157703,57.1001693],[10.8290599,57.3695272],[11.3274736,57.3612962]],[[11.5843266,56.2777928],[11.5782882,56.1880397],[11.7392309,56.1845765],[11.7456428,56.2743186],[11.5843266,56.2777928]],[[14.6825922,55.3639405],[14.8395247,55.3565231],[14.8263755,55.2671261],[15.1393406,55.2517359],[15.1532015,55.3410836],[15.309925,55.3330556],[15.295719,55.2437356],[15.1393406,55.2517359],[15.1255631,55.1623802],[15.2815819,55.1544167],[15.2535578,54.9757646],[14.6317464,55.0062496],[14.6825922,55.3639405]]],"terms_url":"http://download.kortforsyningen.dk/content/vilkaar-og-betingelser","terms_text":"Geodatastyrelsen og Danske Kommuner","best":true},{"id":"Slovakia-Historic-Maps","name":"Slovakia Historic Maps","type":"tms","template":"http://tms.freemap.sk/historicke/{zoom}/{x}/{y}.png","scaleExtent":[0,12],"polygon":[[[16.8196949,47.4927236],[16.8196949,49.5030322],[22.8388318,49.5030322],[22.8388318,47.4927236],[16.8196949,47.4927236]]]},{"id":"Soskut_Pusztazamor_Tarnok_Diosd_orto_2017","name":"Sóskút, Pusztazámor, Tárnok, Diósd ortophoto 2017","type":"tms","template":"http://adam.openstreetmap.hu/mapproxy/tiles/1.0.0/Soskut-Tarnok-Pusztazamor-Diosd/mercator/{zoom}/{x}/{y}.png","polygon":[[[18.79273330201,47.37078533804],[18.791936169,47.37048036201],[18.79139114593,47.37063268281],[18.7901097,47.3717614],[18.7891647,47.3734529],[18.78721506824,47.37566027041],[18.7860339,47.37764910001],[18.7849824,47.3790513],[18.783695,47.3803226],[18.782665,47.3819499],[18.781399,47.3836789],[18.7793426,47.3871257],[18.776657,47.3893959],[18.764716,47.396699],[18.7616966,47.3996569],[18.7563102,47.4032821],[18.7583737,47.4065272],[18.75879657883,47.40776342073],[18.76199554897,47.41217224817],[18.7630394973,47.41315137445],[18.7659298,47.4147108],[18.7704058,47.4176575],[18.77247285488,47.41808545272],[18.7724806,47.4202978],[18.8086021,47.4404108],[18.8174212,47.435389],[18.8209188,47.4357228],[18.8280427,47.4375516],[18.8302099,47.4352584],[18.8358533,47.4375371],[18.8404882,47.4334586],[18.847655,47.4357228],[18.8510024,47.4328054],[18.8689996,47.4396086],[18.87361350924,47.43597176329],[18.87499181607,47.43342149293],[18.87386045593,47.43248349864],[18.8760377,47.4279677],[18.8605023,47.4230028],[18.8662101,47.4179794],[18.8724328,47.4108645],[18.8662959,47.4077278],[18.8696433,47.4047072],[18.86776892261,47.40207457802],[18.86509430105,47.40052438512],[18.87081279074,47.3983820654],[18.86772375423,47.39699336542],[18.86992005424,47.39655168559],[18.87648610191,47.39477958954],[18.87748924808,47.39494663392],[18.87866942005,47.39462343887],[18.88358322696,47.3899604942],[18.88290731029,47.3896699544],[18.88538567142,47.38530440107],[18.87747851924,47.38339390377],[18.88181296901,47.37604910406],[18.87914148883,47.37392756692],[18.88638345317,47.36922645965],[18.88205973224,47.36772957402],[18.87973157482,47.36640704749],[18.8746997507,47.36252284243],[18.87282220439,47.36136733615],[18.87027947025,47.36062605465],[18.86687842922,47.3585329683],[18.86234013156,47.35637438604],[18.85566679554,47.35199153827],[18.84873596744,47.34728120653],[18.83192388134,47.3384118486],[18.82497159557,47.34257772442],[18.81619540767,47.34925116493],[18.8107880743,47.35356882392],[18.80823461132,47.35599644336],[18.80645362453,47.35854023611],[18.80707589702,47.359019909],[18.80634633617,47.36021180457],[18.80465118007,47.36175250772],[18.80381433086,47.36335130305],[18.80054616504,47.36544732015],[18.79988097721,47.36617355102],[18.79416204336,47.36974865444],[18.79273330201,47.37078533804]],[[18.91871480064,47.4093812629],[18.91826418952,47.40997664498],[18.9206674488,47.41155945729],[18.92509845809,47.41372304121],[18.93473295288,47.41916790937],[18.94063381271,47.42241278301],[18.94981769638,47.41937843296],[18.95154503898,47.41749820965],[18.95689872818,47.41922598493],[18.95770339088,47.41877589767],[18.95755318717,47.41435467478],[18.9621129425,47.40506817222],[18.96266011314,47.40117592194],[18.96316436843,47.39903360927],[18.95446328239,47.3967314338],[18.95275739746,47.39526437993],[18.95201710777,47.39362297422],[18.95119098739,47.39356487042],[18.94692091064,47.39798783856],[18.94410995559,47.3984526281],[18.94161013679,47.39868502134],[18.93735078887,47.39633199249],[18.93617061691,47.39682584676],[18.93122462348,47.39999947627],[18.93120316581,47.40023186269],[18.92923978881,47.40204734624],[18.92561344223,47.40604845111],[18.92465857582,47.40635342305],[18.92293123321,47.40925782918],[18.91871480064,47.4093812629]]],"terms_url":"http://fototerkep.hu/","terms_text":"Fototerkep.hu","best":true},{"id":"South_Africa-CD_NGI-Aerial","name":"South Africa CD:NGI Aerial","type":"tms","template":"http://{switch:a,b,c}.aerial.openstreetmap.org.za/ngi-aerial/{zoom}/{x}/{y}.jpg","scaleExtent":[1,22],"polygon":[[[17.8396817,-32.7983384],[17.8893509,-32.6972835],[18.00364,-32.6982187],[18.0991679,-32.7485251],[18.2898747,-32.5526645],[18.2930182,-32.0487089],[18.105455,-31.6454966],[17.8529257,-31.3443951],[17.5480046,-30.902171],[17.4044506,-30.6374731],[17.2493704,-30.3991663],[16.9936977,-29.6543552],[16.7987996,-29.19437],[16.5494139,-28.8415949],[16.4498691,-28.691876],[16.4491046,-28.5515766],[16.6002551,-28.4825663],[16.7514057,-28.4486958],[16.7462192,-28.2458973],[16.8855148,-28.04729],[16.9929502,-28.0244005],[17.0529659,-28.0257086],[17.1007562,-28.0338839],[17.2011527,-28.0930546],[17.2026346,-28.2328424],[17.2474611,-28.2338215],[17.2507953,-28.198892],[17.3511919,-28.1975861],[17.3515624,-28.2442655],[17.4015754,-28.2452446],[17.4149122,-28.3489751],[17.4008345,-28.547997],[17.4526999,-28.5489733],[17.4512071,-28.6495106],[17.4983599,-28.6872054],[17.6028204,-28.6830048],[17.6499732,-28.6967928],[17.6525928,-28.7381457],[17.801386,-28.7381457],[17.9994276,-28.7560602],[18.0002748,-28.7956172],[18.1574507,-28.8718055],[18.5063811,-28.8718055],[18.6153564,-28.8295875],[18.9087513,-28.8277516],[19.1046973,-28.9488548],[19.1969071,-28.9378513],[19.243012,-28.8516164],[19.2314858,-28.802963],[19.2587296,-28.7009928],[19.4431493,-28.6973163],[19.5500289,-28.4958332],[19.6967264,-28.4939914],[19.698822,-28.4479358],[19.8507587,-28.4433291],[19.8497109,-28.4027818],[19.9953605,-28.399095],[19.9893671,-24.7497859],[20.2916682,-24.9192346],[20.4724562,-25.1501701],[20.6532441,-25.4529449],[20.733265,-25.6801957],[20.8281046,-25.8963498],[20.8429232,-26.215851],[20.6502804,-26.4840868],[20.6532441,-26.8204869],[21.0889134,-26.846933],[21.6727695,-26.8389998],[21.7765003,-26.6696268],[21.9721069,-26.6431395],[22.2803355,-26.3274702],[22.5707817,-26.1333967],[22.7752795,-25.6775246],[23.0005235,-25.2761948],[23.4658301,-25.2735148],[23.883717,-25.597366],[24.2364017,-25.613402],[24.603905,-25.7896563],[25.110704,-25.7389432],[25.5078447,-25.6855376],[25.6441766,-25.4823781],[25.8419267,-24.7805437],[25.846641,-24.7538456],[26.3928487,-24.6332894],[26.4739066,-24.5653312],[26.5089966,-24.4842437],[26.5861946,-24.4075775],[26.7300635,-24.3014458],[26.8567384,-24.2499463],[26.8574402,-24.1026901],[26.9215471,-23.8990957],[26.931831,-23.8461891],[26.9714827,-23.6994344],[27.0006074,-23.6367644],[27.0578041,-23.6052574],[27.1360547,-23.5203437],[27.3339623,-23.3973792],[27.5144057,-23.3593929],[27.5958145,-23.2085465],[27.8098634,-23.0994957],[27.8828506,-23.0620496],[27.9382928,-22.9496487],[28.0407556,-22.8255118],[28.2056786,-22.6552861],[28.3397223,-22.5639374],[28.4906093,-22.560697],[28.6108769,-22.5400248],[28.828175,-22.4550173],[28.9285324,-22.4232328],[28.9594116,-22.3090081],[29.0162574,-22.208335],[29.2324117,-22.1693453],[29.3531213,-22.1842926],[29.6548952,-22.1186426],[29.7777102,-22.1361956],[29.9292989,-22.1849425],[30.1166795,-22.2830348],[30.2563377,-22.2914767],[30.3033582,-22.3395204],[30.5061784,-22.3057617],[30.8374279,-22.284983],[31.0058599,-22.3077095],[31.1834152,-22.3232913],[31.2930586,-22.3674647],[31.5680579,-23.1903385],[31.5568311,-23.4430809],[31.6931122,-23.6175209],[31.7119696,-23.741136],[31.7774743,-23.8800628],[31.8886337,-23.9481098],[31.9144386,-24.1746736],[31.9948307,-24.3040878],[32.0166656,-24.4405988],[32.0077331,-24.6536578],[32.019643,-24.9140701],[32.035523,-25.0849767],[32.019643,-25.3821442],[31.9928457,-25.4493771],[31.9997931,-25.5165725],[32.0057481,-25.6078978],[32.0057481,-25.6624806],[31.9362735,-25.8403721],[31.9809357,-25.9546537],[31.8687838,-26.0037251],[31.4162062,-25.7277683],[31.3229117,-25.7438611],[31.2504595,-25.8296526],[31.1393001,-25.9162746],[31.1164727,-25.9912361],[30.9656135,-26.2665756],[30.8921689,-26.3279703],[30.8534616,-26.4035568],[30.8226943,-26.4488849],[30.8022583,-26.5240694],[30.8038369,-26.8082089],[30.9020939,-26.7807451],[30.9100338,-26.8489495],[30.9824859,-26.9082627],[30.976531,-27.0029222],[31.0034434,-27.0441587],[31.1543322,-27.1980416],[31.5015607,-27.311117],[31.9700183,-27.311117],[31.9700183,-27.120472],[31.9769658,-27.050664],[32.0002464,-26.7983892],[32.1069826,-26.7984645],[32.3114546,-26.8479493],[32.899986,-26.8516059],[32.886091,-26.9816971],[32.709427,-27.4785436],[32.6240724,-27.7775144],[32.5813951,-28.07479],[32.5387178,-28.2288046],[32.4275584,-28.5021568],[32.3640388,-28.5945699],[32.0702603,-28.8469827],[31.9878832,-28.9069497],[31.7764818,-28.969487],[31.4638459,-29.2859343],[31.359634,-29.3854348],[31.1680825,-29.6307408],[31.064863,-29.7893535],[31.0534493,-29.8470469],[31.0669933,-29.8640319],[31.0455459,-29.9502017],[30.9518556,-30.0033946],[30.8651833,-30.1024093],[30.7244725,-30.392502],[30.3556256,-30.9308873],[30.0972364,-31.2458274],[29.8673136,-31.4304296],[29.7409393,-31.5014699],[29.481312,-31.6978686],[28.8943171,-32.2898903],[28.5497137,-32.5894641],[28.1436499,-32.8320732],[28.0748735,-32.941689],[27.8450942,-33.082869],[27.3757956,-33.3860685],[26.8805407,-33.6458951],[26.5916871,-33.7480756],[26.4527308,-33.7935795],[26.206754,-33.7548943],[26.0077897,-33.7223961],[25.8055494,-33.7524272],[25.7511073,-33.8006512],[25.6529079,-33.8543597],[25.6529079,-33.9469768],[25.7195789,-34.0040115],[25.7202807,-34.0511235],[25.5508915,-34.063151],[25.3504571,-34.0502627],[25.2810609,-34.0020322],[25.0476316,-33.9994588],[24.954724,-34.0043594],[24.9496586,-34.1010363],[24.8770358,-34.1506456],[24.8762914,-34.2005281],[24.8532574,-34.2189562],[24.7645287,-34.2017946],[24.5001356,-34.2003254],[24.3486733,-34.1163824],[24.1988819,-34.1019039],[23.9963377,-34.0514443],[23.8017509,-34.0524332],[23.7493589,-34.0111855],[23.4973536,-34.009014],[23.4155191,-34.0434586],[23.4154284,-34.1140433],[22.9000853,-34.0993009],[22.8412418,-34.0547911],[22.6470321,-34.0502627],[22.6459843,-34.0072768],[22.570016,-34.0064081],[22.5050499,-34.0645866],[22.2519968,-34.0645866],[22.2221334,-34.1014701],[22.1621197,-34.1057019],[22.1712431,-34.1521766],[22.1576913,-34.2180897],[22.0015632,-34.2172232],[21.9496952,-34.3220009],[21.8611528,-34.4007145],[21.5614708,-34.4020114],[21.5468011,-34.3661242],[21.501744,-34.3669892],[21.5006961,-34.4020114],[21.4194886,-34.4465247],[21.1978706,-34.4478208],[21.0988193,-34.3991325],[21.0033746,-34.3753872],[20.893192,-34.3997115],[20.8976647,-34.4854003],[20.7446802,-34.4828092],[20.5042011,-34.486264],[20.2527197,-34.701477],[20.0803502,-34.8361855],[19.9923317,-34.8379056],[19.899074,-34.8275845],[19.8938348,-34.7936018],[19.5972963,-34.7961833],[19.3929677,-34.642015],[19.2877095,-34.6404784],[19.2861377,-34.5986563],[19.3474363,-34.5244458],[19.3285256,-34.4534372],[19.098001,-34.449981],[19.0725583,-34.3802371],[19.0023531,-34.3525593],[18.9520568,-34.3949373],[18.7975006,-34.3936403],[18.7984174,-34.1016376],[18.501748,-34.1015292],[18.4999545,-34.3616945],[18.4477325,-34.3620007],[18.4479944,-34.3522691],[18.3974362,-34.3514041],[18.3971742,-34.3022959],[18.3565705,-34.3005647],[18.3479258,-34.2020436],[18.2972095,-34.1950274],[18.2951139,-33.9937138],[18.3374474,-33.9914079],[18.3476638,-33.8492427],[18.3479258,-33.781555],[18.4124718,-33.7448849],[18.3615477,-33.6501624],[18.2992013,-33.585591],[18.2166839,-33.448872],[18.1389858,-33.3974083],[17.9473472,-33.1602647],[17.8855247,-33.0575732],[17.8485884,-32.9668505],[17.8396817,-32.8507302],[17.8396817,-32.7983384]]],"best":true},{"id":"South-Tyrol-Orthofoto2011","name":"South Tyrol Orthofoto 2011","type":"tms","template":"http://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_OF_2011_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg","scaleExtent":[0,18],"polygon":[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],"terms_url":"http://geoservices.buergernetz.bz.it/geokatalog/","terms_text":"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 3.0"},{"id":"South-Tyrol-Orthofoto2014","name":"South Tyrol Orthofoto 2014","type":"tms","template":"http://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_OF_2014_EPSG3857&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg","scaleExtent":[0,18],"polygon":[[[12.23442,46.84254],[12.24913,46.82785],[12.24913,46.81945],[12.25753,46.81735],[12.26173,46.80686],[12.26594,46.80686],[12.26804,46.79637],[12.26173,46.79427],[12.27014,46.78587],[12.27224,46.76908],[12.28485,46.76698],[12.29745,46.7439],[12.30166,46.7439],[12.30166,46.7376],[12.28695,46.7376],[12.23652,46.72081],[12.18819,46.71451],[12.16298,46.70192],[12.10835,46.69353],[12.08944,46.68303],[12.05792,46.68093],[12.04531,46.67464],[12.03481,46.67464],[12.03061,46.68303],[12.0096,46.68303],[11.98438,46.66834],[11.94866,46.66414],[11.93816,46.65575],[11.90874,46.64525],[11.89193,46.64525],[11.8457,46.62846],[11.82049,46.62636],[11.80998,46.60748],[11.79528,46.60328],[11.78897,46.59069],[11.78057,46.58859],[11.76586,46.55501],[11.75325,46.54871],[11.73855,46.52982],[11.73224,46.52982],[11.72384,46.51513],[11.71543,46.51513],[11.71333,46.50254],[11.70913,46.50254],[11.70913,46.49624],[11.69652,46.48575],[11.69442,46.47735],[11.66711,46.47525],[11.66711,46.44587],[11.6608,46.44587],[11.64399,46.45846],[11.63769,46.45846],[11.63349,46.44587],[11.62508,46.44797],[11.62508,46.43957],[11.61878,46.43957],[11.61458,46.42278],[11.61037,46.42278],[11.61037,46.41649],[11.62508,46.41229],[11.62508,46.3934],[11.61458,46.38291],[11.60617,46.38291],[11.60407,46.37241],[11.58306,46.37241],[11.58306,46.34932],[11.55995,46.32414],[11.53894,46.32834],[11.53894,46.34513],[11.52423,46.34723],[11.50111,46.34723],[11.49901,46.32834],[11.48851,46.33044],[11.49271,46.32204],[11.41917,46.32414],[11.41707,46.25278],[11.35613,46.24858],[11.34773,46.25698],[11.34563,46.26747],[11.34143,46.26747],[11.33722,46.25068],[11.31201,46.24858],[11.30991,46.25278],[11.3015,46.25278],[11.2889,46.24019],[11.2889,46.2234],[11.25108,46.2234],[11.24898,46.2129],[11.16283,46.215],[11.16283,46.24858],[11.12711,46.24858],[11.13131,46.25278],[11.12291,46.25488],[11.12501,46.29895],[11.16283,46.29895],[11.16283,46.36821],[11.16703,46.36821],[11.16703,46.38081],[11.17543,46.3871],[11.17754,46.3997],[11.20485,46.3997],[11.20695,46.42068],[11.19014,46.42068],[11.19014,46.42698],[11.19435,46.42698],[11.19855,46.44167],[11.20485,46.44587],[11.20695,46.47315],[11.19014,46.47525],[11.18804,46.48365],[11.15232,46.47525],[11.08298,46.47525],[11.08088,46.43537],[11.04096,46.42068],[11.01154,46.42068],[10.99894,46.44587],[10.98843,46.44587],[10.98423,46.45217],[10.96952,46.45217],[10.96112,46.48365],[10.95691,46.48365],[10.95481,46.49414],[10.94851,46.49624],[10.94431,46.50673],[10.91069,46.49624],[10.90018,46.49624],[10.89808,46.51093],[10.85606,46.50254],[10.84135,46.54241],[10.86446,46.54661],[10.86236,46.55081],[10.76571,46.54031],[10.72158,46.55081],[10.59762,46.55291],[10.5619,46.54871],[10.53668,46.55291],[10.50096,46.54871],[10.48415,46.55501],[10.46314,46.55501],[10.47155,46.5676],[10.47365,46.59069],[10.47785,46.59069],[10.47785,46.61797],[10.46944,46.62636],[10.44843,46.63476],[10.42532,46.62846],[10.3938,46.63056],[10.3896,46.64525],[10.3812,46.64735],[10.3833,46.66414],[10.3791,46.66834],[10.3791,46.69353],[10.3854,46.72081],[10.3896,46.72081],[10.3938,46.7376],[10.41692,46.75229],[10.41692,46.78587],[10.42112,46.79847],[10.42532,46.79847],[10.42532,46.80686],[10.43373,46.81106],[10.43793,46.79007],[10.44423,46.78377],[10.44843,46.7439],[10.45264,46.7439],[10.45684,46.72711],[10.46104,46.72711],[10.46524,46.71032],[10.46944,46.71032],[10.47365,46.67254],[10.47995,46.67044],[10.48415,46.65575],[10.48836,46.65575],[10.48415,46.62846],[10.48836,46.62846],[10.48836,46.62217],[10.49886,46.62007],[10.52828,46.62427],[10.49886,46.63056],[10.49886,46.64525],[10.50516,46.64316],[10.49886,46.66204],[10.51777,46.65785],[10.58921,46.66204],[10.63123,46.65365],[10.79302,46.65575],[10.79723,46.65155],[10.88127,46.65155],[10.89178,46.65785],[10.9275,46.66414],[10.94431,46.67464],[10.98003,46.67464],[11.00104,46.68303],[11.02415,46.68303],[11.05147,46.69772],[11.12711,46.70822],[11.13971,46.71242],[11.14392,46.71871],[11.17543,46.72081],[11.19855,46.7334],[11.24898,46.7355],[11.25318,46.72291],[11.2952,46.72921],[11.30571,46.70822],[11.31831,46.70822],[11.33722,46.71871],[11.38555,46.72081],[11.43178,46.7376],[11.50952,46.7439],[11.54734,46.75649],[11.56835,46.75649],[11.58306,46.76698],[11.60617,46.76908],[11.61037,46.77538],[11.69862,46.79427],[11.71753,46.79427],[11.72174,46.79007],[11.73855,46.75859],[11.74905,46.75019],[11.76166,46.70192],[11.76586,46.70192],[11.78687,46.71661],[11.8331,46.72291],[11.86041,46.7376],[11.90874,46.7439],[11.92135,46.75229],[11.95286,46.75859],[11.95917,46.76488],[11.99489,46.77538],[12.00749,46.77538],[12.0096,46.77958],[12.03061,46.78168],[12.05792,46.79427],[12.09995,46.79847],[12.13566,46.81316],[12.15878,46.81316],[12.18609,46.82785],[12.21551,46.83205],[12.23442,46.84254]],[[11.97388,46.96637],[11.99489,46.96007],[11.99489,46.95587],[12.0096,46.95797],[12.0117,46.94748],[12.0159,46.94748],[12.0117,46.94118],[12.018,46.93908],[12.02851,46.92229],[12.00749,46.9118],[11.97388,46.9055],[11.95707,46.89501],[11.91714,46.88871],[11.85831,46.86982],[11.8394,46.86982],[11.80158,46.85303],[11.76166,46.84464],[11.74905,46.83415],[11.68181,46.81945],[11.67971,46.81526],[11.6545,46.81106],[11.64399,46.80476],[11.63769,46.80686],[11.63139,46.82155],[11.62508,46.82155],[11.62298,46.83205],[11.61037,46.84464],[11.61668,46.84884],[11.61458,46.85723],[11.61037,46.85723],[11.61668,46.86563],[11.64609,46.86563],[11.68602,46.88242],[11.69022,46.88871],[11.74905,46.89711],[11.75325,46.90341],[11.78057,46.9076],[11.80158,46.9202],[11.8457,46.92649],[11.87722,46.94118],[11.89613,46.94328],[11.92135,46.95797],[11.96757,46.96217],[11.97388,46.96637]]],"terms_url":"http://geoservices.buergernetz.bz.it/geokatalog/","terms_text":"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano CC-BY 3.0","best":true},{"id":"South-Tyrol-Topomap","name":"South Tyrol Topomap","type":"tms","template":"http://geoservices.buergernetz.bz.it/geoserver/gwc/service/wmts/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=P_BZ_BASEMAP_TOPO&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=GoogleMapsCompatible%3A{zoom}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fjpeg","description":"Topographical basemap of South Tyrol","scaleExtent":[0,20],"polygon":[[[10.38615,46.68821],[10.39201,46.69016],[10.40215,46.70624],[10.41274,46.70821],[10.41622,46.71479],[10.4168,46.71847],[10.39934,46.73435],[10.43464,46.75356],[10.44107,46.75413],[10.44011,46.77149],[10.42123,46.78861],[10.42845,46.79755],[10.43851,46.79869],[10.44925,46.80462],[10.45602,46.81635],[10.45438,46.82221],[10.4583,46.82478],[10.45513,46.83059],[10.45906,46.83548],[10.46483,46.83624],[10.46229,46.8413],[10.46987,46.84933],[10.46819,46.8553],[10.47838,46.86013],[10.48372,46.85543],[10.49628,46.85305],[10.49931,46.84857],[10.52124,46.84653],[10.5527,46.8511],[10.55795,46.84695],[10.55264,46.8408],[10.55536,46.84087],[10.58883,46.85125],[10.59502,46.85829],[10.60936,46.8597],[10.62441,46.86558],[10.64858,46.86655],[10.66787,46.87651],[10.67297,46.87138],[10.69112,46.86861],[10.69786,46.86339],[10.69508,46.85308],[10.70594,46.84786],[10.71763,46.84795],[10.72333,46.83892],[10.75621,46.83383],[10.76481,46.82409],[10.76387,46.81971],[10.75239,46.81387],[10.74506,46.80223],[10.7276,46.79709],[10.73122,46.78925],[10.75722,46.78624],[10.77744,46.79149],[10.78678,46.79735],[10.81439,46.77662],[10.82479,46.77472],[10.83129,46.78138],[10.84112,46.78282],[10.85354,46.77506],[10.86845,46.77313],[10.86993,46.7669],[10.88294,46.76393],[10.88962,46.76529],[10.8951,46.77092],[10.90527,46.76911],[10.92299,46.7764],[10.92821,46.77408],[10.94388,46.77648],[10.97522,46.77361],[10.97932,46.77014],[10.99475,46.76804],[11.01397,46.77317],[11.02328,46.76715],[11.0346,46.79428],[11.04234,46.801],[11.03792,46.80562],[11.05633,46.80928],[11.07279,46.82092],[11.08171,46.82252],[11.0762,46.83384],[11.06887,46.83793],[11.07303,46.84345],[11.06988,46.85348],[11.08742,46.87927],[11.09961,46.88922],[11.09538,46.89178],[11.09795,46.89844],[11.0946,46.91247],[11.10792,46.91706],[11.10804,46.92632],[11.11418,46.93234],[11.13851,46.92865],[11.16322,46.94091],[11.16642,46.94479],[11.16114,46.94979],[11.1637,46.96677],[11.17598,46.96367],[11.18658,46.97062],[11.19527,46.97152],[11.20418,46.96877],[11.20688,46.96403],[11.22047,46.97025],[11.24139,46.9708],[11.24865,46.97517],[11.25582,46.97535],[11.26272,46.98169],[11.27662,46.98168],[11.28762,46.98699],[11.30709,46.98525],[11.3205,46.99345],[11.33765,46.98606],[11.34516,46.99169],[11.35932,46.99154],[11.37697,46.98025],[11.38324,46.97168],[11.40465,46.96609],[11.43929,46.97601],[11.45134,46.99294],[11.46803,46.99582],[11.46859,47.003],[11.47831,47.01201],[11.50238,47.01073],[11.50313,47.00808],[11.51366,47.00595],[11.51679,47.00091],[11.53381,46.99233],[11.53846,46.98519],[11.55297,46.99149],[11.57663,46.99657],[11.58,47.00277],[11.58879,47.00641],[11.59901,47.00657],[11.60944,47.01207],[11.62697,47.01437],[11.63629,47.00383],[11.66542,46.99304],[11.6885,46.99658],[11.71226,46.99416],[11.72897,46.97322],[11.74698,46.97013],[11.76411,46.97412],[11.78106,46.99342],[11.81526,46.991],[11.83564,46.99417],[11.84396,47.0025],[11.85192,47.0014],[11.86722,47.01252],[11.87393,47.01136],[11.8794,47.01714],[11.89137,47.01728],[11.91627,47.03422],[11.9329,47.03864],[11.94688,47.03464],[11.95457,47.04374],[11.96773,47.04158],[11.97912,47.0511],[11.98587,47.04815],[11.99534,47.05064],[12.02037,47.04821],[12.02968,47.05127],[12.03353,47.0583],[12.04276,47.06228],[12.07543,47.0605],[12.08035,47.06951],[12.09308,47.07791],[12.10329,47.07931],[12.11867,47.07445],[12.13561,47.08171],[12.15125,47.08049],[12.15997,47.08267],[12.18589,47.09322],[12.2278,47.08302],[12.24228,47.06892],[12.23786,47.0644],[12.21821,47.05795],[12.2182,47.04483],[12.20552,47.02595],[12.18048,47.02414],[12.16423,47.01782],[12.14786,47.02357],[12.12723,47.01218],[12.12285,47.00662],[12.1322,46.99339],[12.12974,46.98593],[12.13977,46.982],[12.13808,46.96514],[12.13328,46.96292],[12.13882,46.95764],[12.15927,46.95133],[12.1702,46.93758],[12.15414,46.91654],[12.14675,46.91413],[12.16205,46.908],[12.16959,46.91121],[12.19154,46.90682],[12.20106,46.8965],[12.2022,46.88806],[12.21663,46.87517],[12.22147,46.88084],[12.23125,46.88146],[12.2345,46.88919],[12.24162,46.89192],[12.27486,46.88512],[12.27979,46.87921],[12.27736,46.87319],[12.29326,46.86566],[12.2912,46.85704],[12.29733,46.84455],[12.30833,46.84137],[12.30726,46.83271],[12.285,46.81503],[12.29383,46.8027],[12.28905,46.79948],[12.28889,46.79427],[12.28232,46.79153],[12.28539,46.7839],[12.30943,46.78603],[12.35837,46.77583],[12.37036,46.74163],[12.38475,46.71745],[12.40283,46.70811],[12.41103,46.70701],[12.41522,46.70163],[12.42862,46.6997],[12.42943,46.69567],[12.44268,46.68979],[12.47501,46.68756],[12.4795,46.67969],[12.43473,46.66714],[12.40648,46.64167],[12.38115,46.64183],[12.37944,46.63733],[12.3915,46.62765],[12.38577,46.62154],[12.35939,46.61829],[12.34465,46.62376],[12.34034,46.63022],[12.33578,46.62732],[12.3172,46.62876],[12.31785,46.62355],[12.30802,46.61811],[12.28413,46.61623],[12.26982,46.62003],[12.25931,46.62809],[12.24502,46.62326],[12.24198,46.61586],[12.21241,46.60918],[12.20444,46.59836],[12.19228,46.59321],[12.19261,46.62059],[12.1818,46.6192],[12.17117,46.63275],[12.16062,46.63574],[12.1511,46.63215],[12.1436,46.6327],[12.13739,46.64122],[12.12342,46.64475],[12.10949,46.65204],[12.10609,46.65783],[12.09345,46.66123],[12.08826,46.66638],[12.07985,46.66686],[12.07038,46.67386],[12.07173,46.66064],[12.06686,46.65364],[12.07479,46.64329],[12.06837,46.63997],[12.06495,46.62121],[12.05448,46.61778],[12.05318,46.60989],[12.04613,46.60716],[12.05043,46.60016],[12.04763,46.58357],[12.03665,46.57668],[12.0266,46.55871],[12.02189,46.55791],[11.99941,46.53208],[11.99411,46.53345],[11.98704,46.54417],[11.96633,46.54363],[11.95094,46.53869],[11.94719,46.52879],[11.94147,46.52689],[11.93294,46.52631],[11.9121,46.532],[11.8904,46.52175],[11.85192,46.51682],[11.82849,46.50783],[11.82334,46.51315],[11.82391,46.52141],[11.81086,46.53146],[11.79385,46.52023],[11.79189,46.51322],[11.76157,46.50503],[11.74317,46.50391],[11.73202,46.50877],[11.71935,46.50916],[11.71524,46.51245],[11.69889,46.50218],[11.6672,46.49647],[11.64515,46.49743],[11.63849,46.50051],[11.63495,46.49486],[11.64297,46.49346],[11.65174,46.48271],[11.64536,46.47189],[11.64179,46.47439],[11.62679,46.4708],[11.62987,46.46377],[11.61882,46.44325],[11.62143,46.42539],[11.60161,46.39731],[11.60307,46.38924],[11.5932,46.38265],[11.56489,46.38018],[11.55878,46.35076],[11.55249,46.34418],[11.54423,46.34483],[11.53837,46.35015],[11.52445,46.35502],[11.47969,46.36277],[11.48052,46.3551],[11.46322,46.34922],[11.45556,46.33396],[11.42105,46.32441],[11.40517,46.32387],[11.39865,46.31426],[11.39994,46.30709],[11.39569,46.3083],[11.38188,46.30052],[11.36088,46.29906],[11.36078,46.29682],[11.38256,46.29177],[11.3871,46.28143],[11.39609,46.27423],[11.39862,46.264],[11.38756,46.26029],[11.37347,46.2629],[11.36836,46.26135],[11.35783,46.26481],[11.35495,46.27564],[11.33912,46.28306],[11.33379,46.29049],[11.33471,46.2962],[11.3129,46.28256],[11.31737,46.27303],[11.30645,46.25786],[11.29124,46.2604],[11.24743,46.22933],[11.20622,46.2187],[11.18267,46.22496],[11.17077,46.23806],[11.17994,46.24434],[11.18351,46.25269],[11.18935,46.25354],[11.19448,46.2461],[11.20029,46.25566],[11.16604,46.26129],[11.14885,46.27904],[11.13725,46.28336],[11.14293,46.28934],[11.15847,46.29059],[11.16439,46.2986],[11.1761,46.30346],[11.1847,46.32104],[11.18894,46.32151],[11.18696,46.32673],[11.1942,46.33016],[11.20204,46.34212],[11.19001,46.35984],[11.19263,46.36578],[11.20393,46.36765],[11.19792,46.37232],[11.21275,46.39804],[11.21345,46.40675],[11.20565,46.4166],[11.21026,46.4206],[11.20347,46.42682],[11.21416,46.43556],[11.21634,46.44255],[11.20903,46.45293],[11.21419,46.45807],[11.21736,46.45731],[11.21886,46.46199],[11.21626,46.47277],[11.20939,46.481],[11.20876,46.49346],[11.19608,46.50241],[11.1924,46.501],[11.18686,46.50734],[11.18002,46.49823],[11.17014,46.49635],[11.16095,46.4878],[11.12934,46.48058],[11.1103,46.49643],[11.10449,46.4948],[11.08812,46.50128],[11.08173,46.53021],[11.05915,46.51508],[11.03795,46.51357],[11.05006,46.50784],[11.05773,46.49235],[11.06278,46.4894],[11.06894,46.46619],[11.07625,46.45487],[11.0778,46.44569],[11.07301,46.44042],[11.05394,46.44849],[11.0414,46.44569],[11.02817,46.46116],[11.00952,46.46917],[11.00462,46.47607],[10.98695,46.48289],[10.96543,46.48103],[10.95791,46.46983],[10.93819,46.46578],[10.9325,46.45831],[10.93332,46.4528],[10.91305,46.44284],[10.89161,46.44366],[10.88324,46.44995],[10.88093,46.44579],[10.87162,46.4438],[10.86174,46.43509],[10.85113,46.43817],[10.80034,46.44185],[10.78906,46.45164],[10.77835,46.47112],[10.76934,46.47609],[10.76463,46.4848],[10.75906,46.48547],[10.74422,46.48333],[10.71753,46.46022],[10.69667,46.4573],[10.68293,46.44846],[10.66821,46.45122],[10.63303,46.44309],[10.61439,46.45098],[10.60128,46.46139],[10.59995,46.46766],[10.57672,46.47237],[10.55875,46.48187],[10.54986,46.49123],[10.53685,46.49062],[10.52657,46.49425],[10.49366,46.49719],[10.48141,46.49337],[10.45714,46.5096],[10.45124,46.53083],[10.45814,46.54215],[10.47056,46.54377],[10.46954,46.54856],[10.47617,46.55749],[10.47321,46.56701],[10.48305,46.5777],[10.48575,46.58921],[10.48221,46.59199],[10.48576,46.59805],[10.48291,46.60512],[10.49055,46.61394],[10.44632,46.63989],[10.40935,46.63389],[10.40011,46.63648],[10.39873,46.6455],[10.38946,46.65862],[10.39057,46.67089],[10.3803,46.68399],[10.38615,46.68821]]],"terms_url":"http://geoservices.buergernetz.bz.it/geokatalog/","terms_text":"© Autonomen Provinz Bozen/Provincia Autonoma di Bolzano"},{"id":"Bern-bern2016-tms","name":"Stadt Bern 10cm (2016)","type":"tms","template":"http://mapproxy.osm.ch:8080/tiles/bern2016/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[8,21],"polygon":[[[7.2943145,46.9237564],[7.2982665,46.9274715],[7.3061586,46.9309487],[7.3043338,46.9362344],[7.3068603,46.9403709],[7.3246431,46.9432765],[7.3284525,46.946409],[7.3414051,46.9460797],[7.3438454,46.9473713],[7.3434554,46.9487937],[7.3513567,46.9485481],[7.3505628,46.950213],[7.3530901,46.9519266],[7.3582028,46.9511773],[7.3685031,46.9566244],[7.3715097,46.9607339],[7.37503,46.959835],[7.3785111,46.9614686],[7.3806232,46.9654741],[7.3832097,46.9663014],[7.3937998,46.9669268],[7.4000528,46.9691779],[7.4082922,46.9686857],[7.4281713,46.9738041],[7.4327053,46.972689],[7.4353602,46.9684345],[7.4378522,46.9684302],[7.4412474,46.9767865],[7.4456893,46.9747939],[7.4483835,46.9756393],[7.4477006,46.9790125],[7.4440468,46.9780682],[7.4412738,46.9798224],[7.4506732,46.9901527],[7.4522112,46.9896803],[7.454649,46.9778182],[7.4680382,46.9758258],[7.4707923,46.969998],[7.4701907,46.9674116],[7.4781618,46.9711823],[7.4845237,46.9701571],[7.4861275,46.9679018],[7.4857945,46.9646828],[7.4784708,46.9629043],[7.4802865,46.9606768],[7.4789304,46.9587841],[7.4797786,46.9566019],[7.4770135,46.9544586],[7.4840504,46.9499938],[7.4833925,46.9451977],[7.4955563,46.9396169],[7.4935119,46.9376594],[7.4908036,46.9387617],[7.4894997,46.9368667],[7.4766667,46.9369496],[7.4781093,46.9362489],[7.4746986,46.9339187],[7.4753537,46.9329898],[7.4691047,46.9292427],[7.4707683,46.9255044],[7.4585674,46.934836],[7.4476373,46.9304297],[7.435418,46.9349668],[7.4338022,46.9331237],[7.4376403,46.9307415],[7.4146941,46.9368183],[7.413844,46.9315682],[7.4070798,46.9303824],[7.408065,46.9256296],[7.4021268,46.9241992],[7.4014835,46.9211927],[7.3875736,46.9304506],[7.3823129,46.927282],[7.3800187,46.9298929],[7.3808694,46.9324085],[7.3748669,46.9314306],[7.3748901,46.9327104],[7.368066,46.9323929],[7.3683058,46.930426],[7.3604074,46.9285884],[7.3605592,46.9272018],[7.338783,46.9245357],[7.3393683,46.9196675],[7.3274574,46.9190326],[7.3269178,46.9235974],[7.324374,46.9251891],[7.3082264,46.9222857],[7.2943145,46.9237564]]],"terms_text":"Orthophoto 2016, Vermessungsamt Stadt Bern ","best":true},{"id":"Uster-2008","name":"Stadt Uster Orthophoto 2008 10cm","type":"tms","template":"http://mapproxy.sosm.ch:8080/tiles/uster/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","polygon":[[[8.6,47.31],[8.6,47.39],[8.77,47.39],[8.77,47.31],[8.6,47.31]]],"terms_text":"Stadt Uster Vermessung Orthophoto 2008"},{"id":"Zuerich-zh_luftbild2011-tms","name":"Stadt Zürich Luftbild 2011","type":"tms","template":"http://mapproxy.sosm.ch:8080/tiles/zh_luftbild2011/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","polygon":[[[8.4441,47.3141],[8.4441,47.4411],[8.6284,47.4411],[8.6284,47.3141],[8.4441,47.3141]]],"terms_text":"Stadt Zürich Luftbild 2011"},{"id":"Zuerich-city_map","name":"Stadtplan Zürich","type":"tms","template":"http://mapproxy.sosm.ch:8080/tiles/zh_stadtplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","polygon":[[[8.4482,47.321],[8.4482,47.4339],[8.6248,47.4339],[8.6248,47.321],[8.4482,47.321]]],"terms_text":"Stadt Zürich Open Government Data"},{"id":"stamen-terrain-background","name":"Stamen Terrain","type":"tms","template":"http://{switch:a,b,c,d}.tile.stamen.com/terrain-background/{zoom}/{x}/{y}.jpg","scaleExtent":[4,18],"terms_url":"http://maps.stamen.com/#terrain","terms_text":"Map tiles by Stamen Design, under CC BY 3.0"},{"id":"Stevns_Denmark","name":"Stevns","type":"tms","template":"http://{switch:a,b,c}.tile.openstreetmap.dk/stevns/2009/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"polygon":[[[12.0913942,55.3491574],[12.0943104,55.3842256],[12.1573875,55.3833103],[12.1587287,55.4013326],[12.1903468,55.400558],[12.1931411,55.4364665],[12.2564251,55.4347995],[12.2547073,55.4168882],[12.3822489,55.4134349],[12.3795942,55.3954143],[12.4109213,55.3946958],[12.409403,55.3766417],[12.4407807,55.375779],[12.4394142,55.3578314],[12.4707413,55.3569971],[12.4629475,55.2672214],[12.4315633,55.2681491],[12.430045,55.2502103],[12.3672011,55.2519673],[12.3656858,55.2340267],[12.2714604,55.2366031],[12.2744467,55.272476],[12.2115654,55.2741475],[12.2130078,55.2920322],[12.1815665,55.2928638],[12.183141,55.3107091],[12.2144897,55.3100981],[12.2159927,55.3279764],[12.1214458,55.3303379],[12.1229489,55.3483291],[12.0913942,55.3491574]]],"terms_text":"Stevns Kommune"},{"id":"Surrey-Air_Survey","name":"Surrey Air Survey","type":"tms","template":"http://gravitystorm.dev.openstreetmap.org/surrey/{zoom}/{x}/{y}.png","scaleExtent":[8,19],"polygon":[[[-0.752478,51.0821941],[-0.7595183,51.0856254],[-0.8014342,51.1457917],[-0.8398864,51.1440686],[-0.8357665,51.1802397],[-0.8529549,51.2011266],[-0.8522683,51.2096231],[-0.8495217,51.217903],[-0.8266907,51.2403696],[-0.8120995,51.2469248],[-0.7736474,51.2459577],[-0.7544213,51.2381127],[-0.754078,51.233921],[-0.7446366,51.2333836],[-0.7430693,51.2847178],[-0.751503,51.3069524],[-0.7664376,51.3121032],[-0.7820588,51.3270157],[-0.7815438,51.3388135],[-0.7374268,51.3720456],[-0.7192307,51.3769748],[-0.6795769,51.3847961],[-0.6807786,51.3901523],[-0.6531411,51.3917591],[-0.6301385,51.3905808],[-0.6291085,51.3970074],[-0.6234437,51.3977572],[-0.613144,51.4295552],[-0.6002471,51.4459121],[-0.5867081,51.4445365],[-0.5762368,51.453202],[-0.5626755,51.4523462],[-0.547741,51.4469972],[-0.5372697,51.4448575],[-0.537098,51.4526671],[-0.5439644,51.4545926],[-0.5405312,51.4698865],[-0.5309182,51.4760881],[-0.5091172,51.4744843],[-0.5086022,51.4695657],[-0.4900628,51.4682825],[-0.4526406,51.4606894],[-0.4486924,51.4429316],[-0.4414826,51.4418616],[-0.4418259,51.4369394],[-0.4112702,51.4380095],[-0.4014855,51.4279498],[-0.3807145,51.4262372],[-0.3805428,51.4161749],[-0.3491288,51.4138195],[-0.3274994,51.4037544],[-0.3039818,51.3990424],[-0.3019219,51.3754747],[-0.309475,51.369688],[-0.3111916,51.3529669],[-0.2955704,51.3541462],[-0.2923089,51.3673303],[-0.2850991,51.3680805],[-0.2787476,51.3771891],[-0.2655297,51.3837247],[-0.2411538,51.3847961],[-0.2123147,51.3628288],[-0.2107697,51.3498578],[-0.190857,51.3502867],[-0.1542931,51.3338802],[-0.1496583,51.3057719],[-0.1074296,51.2966491],[-0.0887185,51.3099571],[-0.0878602,51.3220811],[-0.0652009,51.3215448],[-0.0641709,51.3264793],[-0.0519829,51.3263721],[-0.0528412,51.334631],[-0.0330779,51.3430876],[0.0019187,51.3376339],[0.0118751,51.3281956],[0.013935,51.2994398],[0.0202865,51.2994398],[0.0240631,51.3072743],[0.0331611,51.3086694],[0.0455207,51.30545],[0.0523872,51.2877392],[0.0616569,51.2577764],[0.0640602,51.2415518],[0.0462074,51.2126342],[0.0407142,51.2109136],[0.0448341,51.1989753],[0.0494689,51.1997283],[0.0558204,51.1944573],[0.0611419,51.1790713],[0.0623435,51.1542061],[0.0577087,51.1417146],[0.0204582,51.1365447],[-0.0446015,51.1336364],[-0.1566964,51.1352522],[-0.1572114,51.1290043],[-0.2287942,51.1183379],[-0.2473336,51.1183379],[-0.2500802,51.1211394],[-0.299347,51.1137042],[-0.3221779,51.1119799],[-0.3223496,51.1058367],[-0.3596001,51.1019563],[-0.3589135,51.1113333],[-0.3863793,51.1117644],[-0.3869014,51.1062516],[-0.4281001,51.0947174],[-0.4856784,51.0951554],[-0.487135,51.0872266],[-0.5297404,51.0865404],[-0.5302259,51.0789914],[-0.61046,51.076551],[-0.6099745,51.080669],[-0.6577994,51.0792202],[-0.6582849,51.0743394],[-0.6836539,51.0707547],[-0.6997979,51.070831],[-0.7296581,51.0744919],[-0.752478,51.0821941]]]},{"id":"Szeged_2011","name":"Szeged orthophoto 2011","type":"tms","template":"http://e.tile.openstreetmap.hu/szeged-2011-10cm/{zoom}/{x}/{y}.png","scaleExtent":[10,22],"polygon":[[[20.1459914,46.2281144],[20.1332261,46.2290431],[20.1258373,46.2298686],[20.122329,46.2309893],[20.1208484,46.2317537],[20.1189709,46.2335126],[20.1131237,46.2413638],[20.1120293,46.2433005],[20.1115733,46.2449996],[20.1111871,46.247092],[20.1112944,46.2487725],[20.1115948,46.2509686],[20.1122171,46.2528047],[20.1129949,46.2542681],[20.1135421,46.2553549],[20.1147705,46.2567977],[20.1352251,46.2768529],[20.1366386,46.2775055],[20.1378939,46.2780301],[20.1393932,46.2783508],[20.1408818,46.2784583],[20.1611494,46.278159],[20.1621093,46.2781579],[20.1635894,46.277702],[20.1661777,46.2761484],[20.1687795,46.2738569],[20.1696108,46.2714413],[20.1695895,46.2704465],[20.1700871,46.2704418],[20.1739897,46.2643295],[20.1766182,46.2582878],[20.1947983,46.25492],[20.1858719,46.2448077],[20.1846595,46.2453122],[20.1780371,46.2383112],[20.1781766,46.2377101],[20.1795258,46.2370961],[20.1725666,46.2300241],[20.1698349,46.2350404],[20.1687701,46.2362946],[20.1670262,46.2378475],[20.1659431,46.2387342],[20.1654408,46.2389988],[20.1654837,46.2389988],[20.1635177,46.2401383],[20.1602051,46.2412003],[20.1592684,46.241531],[20.1592684,46.2415751],[20.1583504,46.2418505],[20.1549473,46.2422869],[20.1510796,46.2351538],[20.1493804,46.232459],[20.1459914,46.2281144]]],"terms_url":"http://www.geo.u-szeged.hu/","terms_text":"SZTE TFGT - University of Szeged","best":true},{"id":"tnris.org","name":"Texas Orthophoto","type":"tms","template":"https://txgi.tnris.org/login/path/ecology-fiona-poem-romeo/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=texas&STYLE=&FORMAT=image/png&tileMatrixSet=0to20&tileMatrix=0to20:{zoom}&tileRow={y}&tileCol={x}","scaleExtent":[0,20],"polygon":[[[-99.9985439,34.5601834],[-95.55654502453,33.99257450647],[-93.89679027134,33.61039304449],[-93.98468089634,32.04103124103],[-93.41613841587,31.02505269211],[-93.74531484297,29.57268254375],[-96.50492070332,28.23158511753],[-97.36942054453,26.95467452634],[-97.04866958924,25.80530249434],[-99.0734177889,26.32559221139],[-100.76599193149,29.02531904433],[-102.3315436893,29.8433892263],[-103.13354564242,28.88112103669],[-104.2887874222,29.28831477845],[-104.7269783935,29.94815782859],[-104.72696778796,30.23535241761],[-106.53450082091,31.78456647831],[-106.75767043939,31.78457253947],[-106.75766067978,32.04385536686],[-106.61848436611,32.04385159755],[-103.11949492759,32.04375683439],[-103.09544343487,36.50045758762],[-103.05798056071,36.54268645422],[-100.00042146824,36.54222227302],[-99.9985439,34.5601834]]],"terms_url":"https://tnris.org/maps-and-data/online-mapping-services/"},{"id":"tf-landscape","name":"Thunderforest Landscape","type":"tms","template":"https://{switch:a,b,c}.tile.thunderforest.com/landscape/{zoom}/{x}/{y}.png","scaleExtent":[0,22],"terms_url":"http://www.thunderforest.com/terms/","terms_text":"Maps © Thunderforest, Data © OpenStreetMap contributors"},{"id":"lu.geoportail.opendata.topo","name":"Topographical Map geoportail.lu","type":"tms","template":"https://{switch:wmts3,wmts4}.geoportail.lu/opendata/wmts/topo/GLOBAL_WEBMERCATOR_4_V3/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"polygon":[[[5.961753,50.17631],[6.026268,50.18496],[6.033182,50.16395],[6.060695,50.15536],[6.07668,50.15913],[6.078237,50.17255],[6.101762,50.17199],[6.122501,50.16437],[6.120101,50.15594],[6.127695,50.14993],[6.113228,50.13739],[6.123691,50.13719],[6.140929,50.1305],[6.135554,50.11899],[6.138082,50.10263],[6.131085,50.09964],[6.135473,50.09119],[6.121939,50.09059],[6.126335,50.07817],[6.131858,50.07348],[6.121171,50.064],[6.114444,50.06139],[6.115631,50.05817],[6.123611,50.06323],[6.136608,50.04178],[6.130343,50.02975],[6.148207,50.02307],[6.13868,50.01572],[6.135938,50.01485],[6.131384,50.01905],[6.130243,50.01819],[6.139343,50.01116],[6.151702,50.01058],[6.145464,49.99689],[6.139657,49.9994],[6.138524,49.99829],[6.142178,49.99535],[6.150227,49.99518],[6.156247,49.98867],[6.173045,49.98589],[6.17348,49.98344],[6.170353,49.98376],[6.165487,49.97115],[6.171512,49.96298],[6.176298,49.962],[6.179954,49.95386],[6.183393,49.9548],[6.179829,49.96307],[6.183312,49.9686],[6.192774,49.97158],[6.199783,49.95352],[6.207066,49.95672],[6.212689,49.9514],[6.225023,49.95039],[6.22044,49.94369],[6.228241,49.93726],[6.22635,49.92766],[6.219133,49.92354],[6.229862,49.92125],[6.236032,49.91355],[6.231867,49.91064],[6.227694,49.91062],[6.232286,49.9072],[6.23381,49.90028],[6.246919,49.89535],[6.257809,49.88724],[6.263008,49.88101],[6.276455,49.87725],[6.281126,49.87957],[6.291661,49.87548],[6.297699,49.86673],[6.309889,49.87107],[6.315324,49.8673],[6.314651,49.86057],[6.323611,49.85188],[6.321577,49.8409],[6.327406,49.83673],[6.336561,49.83998],[6.339366,49.8507],[6.364651,49.85164],[6.402203,49.82098],[6.426434,49.81629],[6.428071,49.81186],[6.43097,49.81129],[6.441608,49.81547],[6.443442,49.81233],[6.45366,49.81275],[6.464538,49.81975],[6.47057,49.82385],[6.496805,49.81277],[6.50669,49.80993],[6.511554,49.80238],[6.51485,49.80513],[6.519604,49.81446],[6.529808,49.81048],[6.532249,49.80686],[6.530829,49.80116],[6.506225,49.78899],[6.519171,49.78344],[6.511055,49.77422],[6.520563,49.76818],[6.520516,49.76134],[6.503734,49.75086],[6.502627,49.73298],[6.507266,49.72938],[6.518092,49.7242],[6.516417,49.72129],[6.511763,49.72016],[6.504791,49.725],[6.498913,49.72639],[6.495576,49.72443],[6.507122,49.71655],[6.507884,49.71215],[6.504598,49.71227],[6.427139,49.66237],[6.439899,49.66025],[6.442511,49.65591],[6.421781,49.61809],[6.398978,49.60094],[6.379408,49.59526],[6.375507,49.58809],[6.384426,49.5801],[6.381188,49.57509],[6.369093,49.5783],[6.357913,49.57166],[6.384902,49.55817],[6.380095,49.54856],[6.358555,49.53296],[6.359322,49.52481],[6.370763,49.50545],[6.370562,49.45732],[6.333403,49.46493],[6.321894,49.47244],[6.295034,49.47928],[6.287889,49.48379],[6.271912,49.49995],[6.241327,49.50693],[6.196692,49.50331],[6.173373,49.50577],[6.160858,49.50085],[6.167099,49.49006],[6.140179,49.48525],[6.129367,49.48803],[6.127247,49.47081],[6.101403,49.46726],[6.104826,49.45076],[6.081667,49.45417],[6.077222,49.46139],[6.059167,49.46306],[6.052222,49.46028],[6.044213,49.44553],[6.025294,49.44703],[6.021545,49.45127],[6.01574,49.44885],[5.994123,49.45301],[5.976569,49.44885],[5.977725,49.45955],[5.972317,49.46087],[5.968912,49.48202],[5.9616,49.49026],[5.915781,49.49835],[5.890334,49.4948],[5.863321,49.50006],[5.84897,49.50826],[5.84828,49.51397],[5.83641,49.51817],[5.831868,49.52639],[5.84308,49.53081],[5.835622,49.54114],[5.816251,49.53325],[5.805201,49.54272],[5.859432,49.57158],[5.868663,49.587],[5.862888,49.58525],[5.851102,49.58379],[5.847116,49.58961],[5.845652,49.5981],[5.869401,49.6106],[5.881819,49.63815],[5.899978,49.63907],[5.899339,49.66239],[5.856561,49.67628],[5.856283,49.68211],[5.875703,49.71118],[5.864811,49.72331],[5.843249,49.71822],[5.82191,49.72128],[5.824894,49.73767],[5.820728,49.74878],[5.786264,49.79079],[5.765172,49.78961],[5.750937,49.79094],[5.741591,49.82126],[5.745814,49.82435],[5.737197,49.83353],[5.740531,49.84142],[5.747012,49.84048],[5.746237,49.84783],[5.753989,49.84878],[5.740663,49.85152],[5.752288,49.85922],[5.749545,49.87554],[5.775668,49.87438],[5.775053,49.88057],[5.734598,49.89341],[5.733033,49.90285],[5.757834,49.91737],[5.760393,49.93252],[5.770728,49.93711],[5.768783,49.94239],[5.768802,49.96104],[5.786724,49.96816],[5.80524,49.96677],[5.806521,49.97321],[5.831293,49.97995],[5.834616,49.98656],[5.818057,49.99936],[5.815606,50.01437],[5.847923,50.02809],[5.861889,50.04581],[5.850872,50.0563],[5.857809,50.07186],[5.880997,50.08069],[5.891965,50.12041],[5.952856,50.13384],[5.961753,50.17631]]],"terms_url":"https://data.public.lu/en/datasets/cartes-topographiques-services-wms-et-wmts/","terms_text":"Administration du Cadastre et de la Topographie"},{"id":"Toulouse-Orthophotoplan-2007","name":"Toulouse - Orthophotoplan 2007","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/toulouse_ortho2007/{zoom}/{x}/{y}","scaleExtent":[0,22],"polygon":[[[1.1919978,43.6328791],[1.2015377,43.6329729],[1.2011107,43.6554932],[1.2227985,43.6557029],[1.2226231,43.6653353],[1.2275341,43.6653849],[1.2275417,43.6656387],[1.2337568,43.6656883],[1.2337644,43.6650153],[1.2351218,43.6650319],[1.2350913,43.6670729],[1.2443566,43.6671556],[1.2441584,43.6743925],[1.2493973,43.6744256],[1.2493973,43.6746628],[1.2555666,43.6747234],[1.2555742,43.6744532],[1.2569545,43.6744697],[1.2568782,43.678529],[1.2874873,43.6788257],[1.2870803,43.7013229],[1.3088219,43.7014632],[1.3086493,43.7127673],[1.3303262,43.7129544],[1.3300242,43.7305221],[1.3367106,43.7305845],[1.3367322,43.7312235],[1.3734338,43.7310456],[1.3735848,43.7245772],[1.4604504,43.7252947],[1.4607783,43.7028034],[1.4824875,43.7029516],[1.4829828,43.6692071],[1.5046832,43.6693616],[1.5048383,43.6581174],[1.5265475,43.6582656],[1.5266945,43.6470298],[1.548368,43.6471633],[1.5485357,43.6359385],[1.5702172,43.636082],[1.5705123,43.6135777],[1.5488166,43.6134276],[1.549097,43.5909479],[1.5707695,43.5910694],[1.5709373,43.5798341],[1.5793714,43.5798894],[1.5794782,43.5737682],[1.5809119,43.5737792],[1.5810859,43.5573794],[1.5712334,43.5573131],[1.5716504,43.5235497],[1.3984804,43.5222618],[1.3986509,43.5110113],[1.3120959,43.5102543],[1.3118968,43.5215192],[1.2902569,43.5213126],[1.2898637,43.5438168],[1.311517,43.5440133],[1.3113271,43.5552596],[1.3036924,43.5551924],[1.3036117,43.5595099],[1.2955449,43.5594317],[1.2955449,43.5595489],[1.2895595,43.5594473],[1.2892899,43.5775366],[1.2675698,43.5773647],[1.2673973,43.5886141],[1.25355,43.5885047],[1.2533774,43.5956282],[1.2518029,43.5956282],[1.2518029,43.5949409],[1.2350437,43.5947847],[1.2350437,43.5945972],[1.2239572,43.5945972],[1.2239357,43.5994708],[1.2139708,43.599299],[1.2138845,43.6046408],[1.2020647,43.6044846],[1.2019464,43.61048],[1.1924294,43.6103695],[1.1919978,43.6328791]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData","terms_text":"ToulouseMetropole"},{"id":"Toulouse-Orthophotoplan-2011","name":"Toulouse - Orthophotoplan 2011","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/toulouse_ortho2011/{zoom}/{x}/{y}","scaleExtent":[0,22],"polygon":[[[1.1135067,43.6867566],[1.1351836,43.6870842],[1.1348907,43.6983471],[1.1782867,43.6990338],[1.1779903,43.7102786],[1.1996591,43.7106144],[1.1993387,43.7218722],[1.2427356,43.7225269],[1.2424336,43.7337491],[1.2641536,43.734092],[1.2638301,43.7453588],[1.2855285,43.7456548],[1.2852481,43.756935],[1.306925,43.757231],[1.3066446,43.7684779],[1.3283431,43.7687894],[1.3280842,43.780034],[1.4367275,43.7815757],[1.4373098,43.7591004],[1.4590083,43.7593653],[1.4593318,43.7481479],[1.4810303,43.7483972],[1.4813322,43.7371777],[1.5030307,43.7374115],[1.5035915,43.7149664],[1.5253115,43.7151846],[1.5256135,43.7040057],[1.5472688,43.7042552],[1.5475708,43.6930431],[1.5692045,43.6932926],[1.5695712,43.6820316],[1.5912049,43.6822656],[1.5917441,43.6597998],[1.613421,43.6600339],[1.613723,43.6488291],[1.6353783,43.6490788],[1.6384146,43.5140731],[1.2921649,43.5094658],[1.2918629,43.5206966],[1.2702076,43.5203994],[1.2698841,43.5316437],[1.2482288,43.531331],[1.2476048,43.5537788],[1.2259628,43.5534914],[1.2256819,43.564716],[1.2039835,43.564419],[1.2033148,43.5869049],[1.1816164,43.5865611],[1.1810237,43.6090368],[1.1592821,43.6086932],[1.1589585,43.6199523],[1.1372601,43.6196244],[1.1365933,43.642094],[1.1149055,43.6417629],[1.1135067,43.6867566]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData","terms_text":"ToulouseMetropole"},{"id":"Toulouse-Orthophotoplan-2013","name":"Toulouse - Orthophotoplan 2013","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/toulouse_2013/{zoom}/{x}/{y}","scaleExtent":[0,22],"polygon":[[[1.1135067,43.6867566],[1.1351836,43.6870842],[1.1348907,43.6983471],[1.1782867,43.6990338],[1.1779903,43.7102786],[1.1996591,43.7106144],[1.1993387,43.7218722],[1.2427356,43.7225269],[1.2424336,43.7337491],[1.2641536,43.734092],[1.2638301,43.7453588],[1.2855285,43.7456548],[1.2852481,43.756935],[1.306925,43.757231],[1.3066446,43.7684779],[1.3283431,43.7687894],[1.3280842,43.780034],[1.4367275,43.7815757],[1.4373098,43.7591004],[1.4590083,43.7593653],[1.4593318,43.7481479],[1.4810303,43.7483972],[1.4813322,43.7371777],[1.5030307,43.7374115],[1.5035915,43.7149664],[1.5253115,43.7151846],[1.5256135,43.7040057],[1.5472688,43.7042552],[1.5475708,43.6930431],[1.5692045,43.6932926],[1.5695712,43.6820316],[1.5912049,43.6822656],[1.5917441,43.6597998],[1.613421,43.6600339],[1.613723,43.6488291],[1.6353783,43.6490788],[1.6384146,43.5140731],[1.2921649,43.5094658],[1.2918629,43.5206966],[1.2702076,43.5203994],[1.2698841,43.5316437],[1.2482288,43.531331],[1.2476048,43.5537788],[1.2259628,43.5534914],[1.2256819,43.564716],[1.2039835,43.564419],[1.2033148,43.5869049],[1.1816164,43.5865611],[1.1810237,43.6090368],[1.1592821,43.6086932],[1.1589585,43.6199523],[1.1372601,43.6196244],[1.1365933,43.642094],[1.1149055,43.6417629],[1.1135067,43.6867566]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData","terms_text":"ToulouseMetropole"},{"id":"Toulouse-Orthophotoplan-2015","name":"Toulouse - Orthophotoplan 2015","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/toulouse_2015/{zoom}/{x}/{y}","scaleExtent":[0,22],"polygon":[[[1.1135067,43.6867566],[1.1351836,43.6870842],[1.1348907,43.6983471],[1.1782867,43.6990338],[1.1779903,43.7102786],[1.1996591,43.7106144],[1.1993387,43.7218722],[1.2427356,43.7225269],[1.2424336,43.7337491],[1.2641536,43.734092],[1.2638301,43.7453588],[1.2855285,43.7456548],[1.2852481,43.756935],[1.306925,43.757231],[1.3066446,43.7684779],[1.3283431,43.7687894],[1.3280842,43.780034],[1.4367275,43.7815757],[1.4373098,43.7591004],[1.4590083,43.7593653],[1.4593318,43.7481479],[1.4810303,43.7483972],[1.4813322,43.7371777],[1.5030307,43.7374115],[1.5035915,43.7149664],[1.5253115,43.7151846],[1.5256135,43.7040057],[1.5472688,43.7042552],[1.5475708,43.6930431],[1.5692045,43.6932926],[1.5695712,43.6820316],[1.5912049,43.6822656],[1.5917441,43.6597998],[1.613421,43.6600339],[1.613723,43.6488291],[1.6353783,43.6490788],[1.6384146,43.5140731],[1.2921649,43.5094658],[1.2918629,43.5206966],[1.2702076,43.5203994],[1.2698841,43.5316437],[1.2482288,43.531331],[1.2476048,43.5537788],[1.2259628,43.5534914],[1.2256819,43.564716],[1.2039835,43.564419],[1.2033148,43.5869049],[1.1816164,43.5865611],[1.1810237,43.6090368],[1.1592821,43.6086932],[1.1589585,43.6199523],[1.1372601,43.6196244],[1.1365933,43.642094],[1.1149055,43.6417629],[1.1135067,43.6867566]]],"terms_url":"https://wiki.openstreetmap.org/wiki/Toulouse/ToulouseMetropoleData","terms_text":"ToulouseMetropole"},{"id":"Tours-Orthophoto-2008_2010","name":"Tours - Orthophotos 2008-2010","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/tours/{zoom}/{x}/{y}","scaleExtent":[0,20],"polygon":[[[0.5457462,47.465264],[0.54585,47.4608163],[0.5392188,47.4606983],[0.5393484,47.456243],[0.5327959,47.4561003],[0.5329011,47.451565],[0.52619,47.4514013],[0.5265854,47.4424884],[0.5000941,47.4420739],[0.5002357,47.4375835],[0.4936014,47.4374324],[0.4937,47.4329285],[0.4606141,47.4324593],[0.4607248,47.4279827],[0.4541016,47.4278125],[0.454932,47.4053921],[0.4615431,47.4054476],[0.4619097,47.3964924],[0.4684346,47.3966005],[0.4691319,47.3786415],[0.4757125,47.3787609],[0.4762116,47.3652018],[0.4828297,47.3653499],[0.4829611,47.3608321],[0.4763543,47.360743],[0.476654,47.3517263],[0.4700497,47.3516186],[0.4701971,47.3471313],[0.4637503,47.3470104],[0.4571425,47.3424146],[0.4572922,47.3379061],[0.4506741,47.3378081],[0.4508379,47.3333051],[0.4442212,47.3332032],[0.4443809,47.328711],[0.4311392,47.3284977],[0.4316262,47.3150004],[0.4382432,47.3151136],[0.4383815,47.3106174],[0.4714487,47.3111374],[0.4713096,47.3156565],[0.477888,47.3157542],[0.4780733,47.3112802],[0.4846826,47.3113639],[0.4848576,47.3068686],[0.4914359,47.3069803],[0.491745,47.2979733],[0.4851578,47.2978722],[0.4854269,47.2888744],[0.4788485,47.2887697],[0.4791574,47.2797818],[0.4857769,47.2799005],[0.4859107,47.2753885],[0.492539,47.2755029],[0.4926669,47.2710127],[0.4992986,47.2711066],[0.4994296,47.2666116],[0.5192658,47.2669245],[0.5194225,47.2624231],[0.5260186,47.2625205],[0.5258735,47.2670183],[0.5456972,47.2673383],[0.5455537,47.2718283],[0.5587737,47.2720366],[0.5586259,47.2765185],[0.5652252,47.2766278],[0.5650848,47.2811206],[0.5716753,47.2812285],[0.5715223,47.2857217],[0.5781436,47.2858299],[0.5779914,47.2903294],[0.5846023,47.2904263],[0.5843076,47.2994231],[0.597499,47.2996094],[0.5976637,47.2951375],[0.6571596,47.2960036],[0.6572988,47.2915091],[0.6705019,47.2917186],[0.6703475,47.2962082],[0.6836175,47.2963688],[0.6834322,47.3008929],[0.690062,47.3009558],[0.6899241,47.3054703],[0.7362019,47.3061157],[0.7360848,47.3106063],[0.7559022,47.3108935],[0.7557718,47.315392],[0.7623755,47.3154716],[0.7622314,47.3199941],[0.7754911,47.3201546],[0.77497,47.3388218],[0.7745786,47.351628],[0.7680363,47.3515901],[0.767589,47.3605298],[0.7742443,47.3606238],[0.7733465,47.3921266],[0.7667434,47.3920195],[0.7664411,47.4010837],[0.7730647,47.4011115],[0.7728868,47.4101297],[0.7661849,47.4100226],[0.7660267,47.4145044],[0.7527613,47.4143038],[0.7529788,47.4098086],[0.7462373,47.4097016],[0.7459424,47.4232208],[0.7392324,47.4231451],[0.738869,47.4366116],[0.7323267,47.4365171],[0.7321869,47.4410556],[0.7255048,47.44098],[0.7254209,47.4453479],[0.7318793,47.4454803],[0.7318514,47.4501126],[0.7384496,47.450226],[0.7383098,47.454631],[0.7449359,47.4547444],[0.7443209,47.4771985],[0.7310685,47.4769717],[0.7309008,47.4815445],[0.7176205,47.4812611],[0.7177883,47.4768394],[0.69777,47.4764993],[0.6980496,47.4719827],[0.6914514,47.4718882],[0.6917309,47.4630241],[0.6851048,47.4629295],[0.684937,47.4673524],[0.678255,47.4673335],[0.6779754,47.4762158],[0.6714051,47.4761592],[0.6710417,47.4881952],[0.6577334,47.4879685],[0.6578173,47.48504],[0.6511911,47.4848322],[0.6514707,47.4758568],[0.6448166,47.4757245],[0.6449284,47.4712646],[0.6117976,47.4707543],[0.6118815,47.4663129],[0.6052833,47.4661239],[0.6054231,47.4616631],[0.5988808,47.4615497],[0.5990206,47.4570886],[0.572488,47.4566916],[0.5721805,47.4656513],[0.5457462,47.465264]]],"terms_url":"http://wiki.openstreetmap.org/wiki/Tours/Orthophoto","terms_text":"Orthophoto Tour(s) Plus 2008"},{"id":"Tours-Orthophoto-2013","name":"Tours - Orthophotos 2013","type":"tms","template":"http://wms.openstreetmap.fr/tms/1.0.0/tours_2013/{zoom}/{x}/{y}","scaleExtent":[0,22],"polygon":[[[0.427093505859375,47.26199018174824],[0.427093505859375,47.50096732311069],[0.814361572265625,47.50096732311069],[0.814361572265625,47.26199018174824],[0.427093505859375,47.26199018174824]]],"terms_url":"http://wiki.openstreetmap.org/wiki/Tours/Orthophoto","terms_text":"Orthophoto Tour(s)plus 2013"},{"id":"US_Forest_Service_roads","name":"U.S. Forest Service roads","type":"tms","template":"https://osm.cycle.travel/forest/{zoom}/{x}/{y}.png","scaleExtent":[0,19],"polygon":[[[-124.7617886,48.4130148],[-124.6059492,45.90245],[-124.9934269,40.0557614],[-122.5369737,36.8566086],[-119.9775867,33.0064099],[-117.675935,32.4630223],[-114.8612307,32.4799891],[-111.0089311,31.336015],[-108.1992687,31.3260016],[-108.1871123,31.7755116],[-106.5307225,31.7820947],[-106.4842052,31.7464455],[-106.429317,31.7520583],[-106.2868855,31.5613291],[-106.205248,31.446704],[-105.0205259,30.5360988],[-104.5881916,29.6997856],[-103.2518856,28.8908685],[-102.7173632,29.3920567],[-102.1513983,29.7475702],[-101.2552871,29.4810523],[-100.0062436,28.0082173],[-99.2351068,26.4475962],[-98.0109067,25.9928035],[-97.435024,25.8266009],[-96.9555259,25.9821589],[-96.8061741,27.7978168],[-95.5563349,28.5876066],[-93.7405308,29.4742093],[-90.9028456,28.8564513],[-88.0156706,28.9944338],[-88.0162494,30.0038862],[-86.0277506,30.0047454],[-84.0187909,28.9961781],[-81.9971976,25.9826768],[-81.9966618,25.0134917],[-84.0165592,25.0125783],[-84.0160068,24.0052745],[-80.0199985,24.007096],[-79.8901116,26.8550713],[-80.0245309,32.0161282],[-75.4147385,35.0531894],[-74.0211163,39.5727927],[-72.002019,40.9912464],[-69.8797398,40.9920457],[-69.8489304,43.2619916],[-66.9452845,44.7104937],[-67.7596632,47.0990024],[-69.2505131,47.5122328],[-70.4614886,46.2176574],[-71.412273,45.254878],[-72.0222508,45.0059846],[-75.0798841,44.9802854],[-76.9023061,43.8024568],[-78.7623935,43.6249578],[-79.15798,43.4462589],[-79.0060087,42.8005317],[-82.662475,41.6889458],[-82.1761642,43.588535],[-83.2813977,46.138853],[-87.5064535,48.0142702],[-88.3492194,48.2963271],[-89.4353148,47.9837822],[-93.9981078,49.0067142],[-95.1105379,49.412004],[-96.0131199,49.0060547],[-123.3228926,49.0042878],[-123.2275233,48.1849927],[-124.7617886,48.4130148]],[[-160.5787616,22.5062947],[-160.5782192,21.4984647],[-158.7470604,21.2439843],[-157.5083185,20.995803],[-155.9961942,18.7790194],[-154.6217803,18.7586966],[-154.6890176,19.8805722],[-156.2927622,21.2225888],[-157.5047384,21.9984962],[-159.0093692,22.5070181],[-160.5787616,22.5062947]],[[-167.1571546,68.721974],[-164.8553982,67.0255078],[-168.002195,66.0017503],[-169.0087448,66.001546],[-169.0075381,64.9987675],[-172.5143281,63.8767267],[-173.8197023,59.74014],[-162.5018149,58.0005815],[-160.0159024,58.0012389],[-160.0149725,57.000035],[-160.5054788,56.9999017],[-165.8092575,54.824847],[-178.000097,52.2446469],[-177.9992996,51.2554252],[-171.4689067,51.8215329],[-162.40251,53.956664],[-159.0075717,55.002502],[-158.0190709,55.0027849],[-151.9963213,55.9991902],[-151.500341,57.9987853],[-151.5012894,58.9919816],[-138.5159989,58.9953194],[-138.5150471,57.9986434],[-133.9948193,54.0031685],[-130.0044418,54.0043387],[-130.0070826,57.0000507],[-131.975877,56.9995156],[-135.1229873,59.756601],[-138.0071813,59.991805],[-139.1715881,60.4127229],[-140.9874011,61.0118551],[-140.9683975,69.9535069],[-156.176891,71.5633329],[-160.413634,70.7397728],[-163.0218273,69.9707435],[-164.9717003,68.994689],[-167.1571546,68.721974]]]},{"id":"Zuerich-zh_uebersichtsplan-tms","name":"Übersichtsplan Zürich","type":"tms","template":"http://mapproxy.sosm.ch:8080/tiles/zh_uebersichtsplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw","scaleExtent":[0,21],"polygon":[[[8.4482,47.321],[8.4482,47.4339],[8.6248,47.4339],[8.6248,47.321],[8.4482,47.321]]],"terms_text":"Stadt Zürich Open Government Data"},{"id":"USGS-Large_Scale","name":"USGS Large Scale Imagery","type":"tms","template":"http://{switch:a,b,c}.tile.openstreetmap.us/usgs_large_scale/{zoom}/{x}/{y}.jpg","scaleExtent":[12,20],"polygon":[[[-123.2549305,48.7529029],[-123.2549305,48.5592263],[-123.192224,48.5592263],[-123.192224,48.4348366],[-122.9419646,48.4348366],[-122.9419646,48.3720812],[-122.8806229,48.3720812],[-122.8806229,48.3094763],[-122.8167566,48.3094763],[-122.8167566,48.1904587],[-123.0041133,48.1904587],[-123.0041133,48.1275918],[-123.058416,48.1275918],[-123.058416,48.190514],[-123.254113,48.190514],[-123.254113,48.1274982],[-123.3706593,48.1274982],[-123.3706593,48.1908403],[-124.0582632,48.1908403],[-124.0582632,48.253442],[-124.1815163,48.253442],[-124.1815163,48.3164666],[-124.4319117,48.3164666],[-124.4319117,48.3782613],[-124.5564618,48.3782613],[-124.5564618,48.4408305],[-124.7555107,48.4408305],[-124.7555107,48.1914986],[-124.8185282,48.1914986],[-124.8185282,48.1228381],[-124.7552951,48.1228381],[-124.7552951,47.5535253],[-124.3812108,47.5535253],[-124.3812108,47.1218696],[-124.1928897,47.1218696],[-124.1928897,43.7569431],[-124.4443382,43.7569431],[-124.4443382,43.1425556],[-124.6398855,43.1425556],[-124.6398855,42.6194503],[-124.4438525,42.6194503],[-124.4438525,39.8080662],[-123.8815685,39.8080662],[-123.8815685,39.1102825],[-123.75805,39.1102825],[-123.75805,38.4968799],[-123.2702803,38.4968799],[-123.2702803,37.9331905],[-122.8148084,37.9331905],[-122.8148084,37.8019606],[-122.5664316,37.8019606],[-122.5664316,36.9319611],[-121.8784026,36.9319611],[-121.8784026,36.6897596],[-122.0034748,36.6897596],[-122.0034748,36.4341056],[-121.9414159,36.4341056],[-121.9414159,35.9297636],[-121.5040977,35.9297636],[-121.5040977,35.8100273],[-121.3790276,35.8100273],[-121.3790276,35.4239164],[-120.9426515,35.4239164],[-120.9426515,35.1849683],[-120.8171978,35.1849683],[-120.8171978,35.1219894],[-120.6918447,35.1219894],[-120.6918447,34.4966794],[-120.5045898,34.4966794],[-120.5045898,34.4339651],[-120.0078775,34.4339651],[-120.0078775,34.3682626],[-119.5283517,34.3682626],[-119.5283517,34.0576434],[-119.0060985,34.0576434],[-119.0060985,33.9975267],[-118.5046259,33.9975267],[-118.5046259,33.8694631],[-118.4413209,33.8694631],[-118.4413209,33.6865253],[-118.066912,33.6865253],[-118.066912,33.3063832],[-117.5030045,33.3063832],[-117.5030045,33.0500337],[-117.3188195,33.0500337],[-117.3188195,32.6205888],[-117.1917023,32.6205888],[-117.1917023,32.4974566],[-116.746496,32.4974566],[-116.746496,32.5609161],[-115.9970138,32.5609161],[-115.9970138,32.6264942],[-114.8808125,32.6264942],[-114.8808125,32.4340796],[-114.6294474,32.4340796],[-114.6294474,32.3731636],[-114.4447437,32.3731636],[-114.4447437,32.3075418],[-114.2557628,32.3075418],[-114.2557628,32.2444561],[-114.0680274,32.2444561],[-114.0680274,32.1829113],[-113.8166499,32.1829113],[-113.8166499,32.1207622],[-113.6307421,32.1207622],[-113.6307421,32.0565099],[-113.4417495,32.0565099],[-113.4417495,31.9984372],[-113.2546027,31.9984372],[-113.2546027,31.9325434],[-113.068072,31.9325434],[-113.068072,31.8718062],[-112.8161105,31.8718062],[-112.8161105,31.8104171],[-112.6308756,31.8104171],[-112.6308756,31.7464723],[-112.4418918,31.7464723],[-112.4418918,31.6856001],[-112.257192,31.6856001],[-112.257192,31.6210352],[-112.0033787,31.6210352],[-112.0033787,31.559584],[-111.815619,31.559584],[-111.815619,31.4970238],[-111.6278586,31.4970238],[-111.6278586,31.4339867],[-111.4418978,31.4339867],[-111.4418978,31.3733859],[-111.2559708,31.3733859],[-111.2559708,31.3113225],[-108.1845822,31.3113225],[-108.1845822,31.7459502],[-106.5065055,31.7459502],[-106.5065055,31.6842308],[-106.3797265,31.6842308],[-106.3797265,31.621752],[-106.317434,31.621752],[-106.317434,31.4968167],[-106.2551769,31.4968167],[-106.2551769,31.4344889],[-106.1924698,31.4344889],[-106.1924698,31.3721296],[-106.0039212,31.3721296],[-106.0039212,31.309328],[-105.9416582,31.309328],[-105.9416582,31.2457547],[-105.8798174,31.2457547],[-105.8798174,31.1836194],[-105.8162349,31.1836194],[-105.8162349,31.1207155],[-105.6921198,31.1207155],[-105.6921198,31.0584835],[-105.6302881,31.0584835],[-105.6302881,30.9328271],[-105.5044418,30.9328271],[-105.5044418,30.8715864],[-105.4412973,30.8715864],[-105.4412973,30.808463],[-105.3781497,30.808463],[-105.3781497,30.7471828],[-105.1904658,30.7471828],[-105.1904658,30.6843231],[-105.1286244,30.6843231],[-105.1286244,30.6199737],[-105.0036504,30.6199737],[-105.0036504,30.5589058],[-104.9417962,30.5589058],[-104.9417962,30.4963236],[-104.8782018,30.4963236],[-104.8782018,30.3098261],[-104.8155257,30.3098261],[-104.8155257,30.2478305],[-104.7536079,30.2478305],[-104.7536079,29.9353916],[-104.690949,29.9353916],[-104.690949,29.8090156],[-104.6291301,29.8090156],[-104.6291301,29.6843577],[-104.5659869,29.6843577],[-104.5659869,29.6223459],[-104.5037188,29.6223459],[-104.5037188,29.5595436],[-104.4410072,29.5595436],[-104.4410072,29.4974832],[-104.2537551,29.4974832],[-104.2537551,29.3716718],[-104.1291984,29.3716718],[-104.1291984,29.3091621],[-104.0688737,29.3091621],[-104.0688737,29.2467276],[-103.8187309,29.2467276],[-103.8187309,29.1843076],[-103.755736,29.1843076],[-103.755736,29.1223174],[-103.5667542,29.1223174],[-103.5667542,29.0598119],[-103.5049819,29.0598119],[-103.5049819,28.9967506],[-103.3165753,28.9967506],[-103.3165753,28.9346923],[-103.0597572,28.9346923],[-103.0597572,29.0592965],[-102.9979694,29.0592965],[-102.9979694,29.1212855],[-102.9331397,29.1212855],[-102.9331397,29.1848575],[-102.8095989,29.1848575],[-102.8095989,29.2526154],[-102.8701345,29.2526154],[-102.8701345,29.308096],[-102.8096681,29.308096],[-102.8096681,29.3715484],[-102.7475655,29.3715484],[-102.7475655,29.5581899],[-102.684554,29.5581899],[-102.684554,29.6847655],[-102.4967764,29.6847655],[-102.4967764,29.7457694],[-102.3086647,29.7457694],[-102.3086647,29.8086627],[-102.1909323,29.8086627],[-102.1909323,29.7460097],[-101.5049914,29.7460097],[-101.5049914,29.6846777],[-101.3805796,29.6846777],[-101.3805796,29.5594459],[-101.3175057,29.5594459],[-101.3175057,29.4958934],[-101.1910075,29.4958934],[-101.1910075,29.4326115],[-101.067501,29.4326115],[-101.067501,29.308808],[-100.9418897,29.308808],[-100.9418897,29.2456231],[-100.8167271,29.2456231],[-100.8167271,29.1190449],[-100.7522672,29.1190449],[-100.7522672,29.0578214],[-100.6925358,29.0578214],[-100.6925358,28.8720431],[-100.6290158,28.8720431],[-100.6290158,28.8095363],[-100.5679901,28.8095363],[-100.5679901,28.622554],[-100.5040411,28.622554],[-100.5040411,28.5583804],[-100.4421832,28.5583804],[-100.4421832,28.4968266],[-100.379434,28.4968266],[-100.379434,28.3092865],[-100.3171942,28.3092865],[-100.3171942,28.1835681],[-100.254483,28.1835681],[-100.254483,28.1213885],[-100.1282282,28.1213885],[-100.1282282,28.059215],[-100.0659537,28.059215],[-100.0659537,27.9966087],[-100.0023855,27.9966087],[-100.0023855,27.9332152],[-99.9426497,27.9332152],[-99.9426497,27.7454658],[-99.816851,27.7454658],[-99.816851,27.6834301],[-99.7541346,27.6834301],[-99.7541346,27.6221543],[-99.6291629,27.6221543],[-99.6291629,27.5588977],[-99.5672838,27.5588977],[-99.5672838,27.4353752],[-99.5041798,27.4353752],[-99.5041798,27.3774021],[-99.5671796,27.3774021],[-99.5671796,27.2463726],[-99.504975,27.2463726],[-99.504975,26.9965649],[-99.4427427,26.9965649],[-99.4427427,26.872803],[-99.3800633,26.872803],[-99.3800633,26.8068179],[-99.3190684,26.8068179],[-99.3190684,26.7473614],[-99.2537541,26.7473614],[-99.2537541,26.6210068],[-99.1910617,26.6210068],[-99.1910617,26.4956737],[-99.1300639,26.4956737],[-99.1300639,26.3713808],[-99.0029473,26.3713808],[-99.0029473,26.3093836],[-98.816572,26.3093836],[-98.816572,26.2457762],[-98.6920082,26.2457762],[-98.6920082,26.1837096],[-98.4440896,26.1837096],[-98.4440896,26.1217217],[-98.3823181,26.1217217],[-98.3823181,26.0596488],[-98.2532707,26.0596488],[-98.2532707,25.9986871],[-98.0109084,25.9986871],[-98.0109084,25.9932255],[-97.6932319,25.9932255],[-97.6932319,25.9334103],[-97.6313904,25.9334103],[-97.6313904,25.8695893],[-97.5046779,25.8695893],[-97.5046779,25.8073488],[-97.3083401,25.8073488],[-97.3083401,25.8731159],[-97.2456326,25.8731159],[-97.2456326,25.9353731],[-97.1138939,25.9353731],[-97.1138939,27.6809179],[-97.0571035,27.6809179],[-97.0571035,27.8108242],[-95.5810766,27.8108242],[-95.5810766,28.7468827],[-94.271041,28.7468827],[-94.271041,29.5594076],[-92.5029947,29.5594076],[-92.5029947,29.4974754],[-91.8776216,29.4974754],[-91.8776216,29.3727013],[-91.378418,29.3727013],[-91.378418,29.2468326],[-91.3153953,29.2468326],[-91.3153953,29.1844301],[-91.1294702,29.1844301],[-91.1294702,29.1232559],[-91.0052632,29.1232559],[-91.0052632,28.9968437],[-89.4500159,28.9968437],[-89.4500159,28.8677422],[-88.8104309,28.8677422],[-88.8104309,30.1841864],[-85.8791527,30.1841864],[-85.8791527,29.5455038],[-84.8368083,29.5455038],[-84.8368083,29.6225158],[-84.7482786,29.6225158],[-84.7482786,29.683624],[-84.685894,29.683624],[-84.685894,29.7468386],[-83.6296975,29.7468386],[-83.6296975,29.4324361],[-83.3174937,29.4324361],[-83.3174937,29.0579442],[-82.879659,29.0579442],[-82.879659,27.7453529],[-82.8182822,27.7453529],[-82.8182822,26.9290868],[-82.3796782,26.9290868],[-82.3796782,26.3694183],[-81.8777106,26.3694183],[-81.8777106,25.805971],[-81.5036862,25.805971],[-81.5036862,25.7474753],[-81.4405462,25.7474753],[-81.4405462,25.6851489],[-81.3155883,25.6851489],[-81.3155883,25.5600985],[-81.2538534,25.5600985],[-81.2538534,25.4342361],[-81.1902012,25.4342361],[-81.1902012,25.1234341],[-81.1288133,25.1234341],[-81.1288133,25.0619389],[-81.0649231,25.0619389],[-81.0649231,24.8157807],[-81.6289469,24.8157807],[-81.6289469,24.7538367],[-81.6907173,24.7538367],[-81.6907173,24.6899374],[-81.8173189,24.6899374],[-81.8173189,24.6279161],[-82.1910041,24.6279161],[-82.1910041,24.496294],[-81.6216596,24.496294],[-81.6216596,24.559484],[-81.372006,24.559484],[-81.372006,24.6220687],[-81.0593278,24.6220687],[-81.0593278,24.684826],[-80.9347147,24.684826],[-80.9347147,24.7474828],[-80.7471081,24.7474828],[-80.7471081,24.8100618],[-80.3629898,24.8100618],[-80.3629898,25.1175858],[-80.122344,25.1175858],[-80.122344,25.7472357],[-80.0588458,25.7472357],[-80.0588458,26.3708251],[-79.995837,26.3708251],[-79.995837,26.9398003],[-80.0587265,26.9398003],[-80.0587265,27.1277466],[-80.1226251,27.1277466],[-80.1226251,27.2534279],[-80.1846956,27.2534279],[-80.1846956,27.3781229],[-80.246175,27.3781229],[-80.246175,27.5658729],[-80.3094768,27.5658729],[-80.3094768,27.7530311],[-80.3721485,27.7530311],[-80.3721485,27.8774451],[-80.4351457,27.8774451],[-80.4351457,28.0033366],[-80.4966078,28.0033366],[-80.4966078,28.1277326],[-80.5587159,28.1277326],[-80.5587159,28.3723509],[-80.4966335,28.3723509],[-80.4966335,29.5160326],[-81.1213644,29.5160326],[-81.1213644,31.6846966],[-80.6018723,31.6846966],[-80.6018723,32.2475309],[-79.4921024,32.2475309],[-79.4921024,32.9970261],[-79.1116488,32.9970261],[-79.1116488,33.3729457],[-78.6153621,33.3729457],[-78.6153621,33.8097638],[-77.9316963,33.8097638],[-77.9316963,33.8718243],[-77.8692252,33.8718243],[-77.8692252,34.0552454],[-77.6826392,34.0552454],[-77.6826392,34.2974598],[-77.2453509,34.2974598],[-77.2453509,34.5598585],[-76.4973277,34.5598585],[-76.4973277,34.622796],[-76.4337602,34.622796],[-76.4337602,34.6849285],[-76.373212,34.6849285],[-76.373212,34.7467674],[-76.3059364,34.7467674],[-76.3059364,34.808551],[-76.2468017,34.808551],[-76.2468017,34.8728418],[-76.1825922,34.8728418],[-76.1825922,34.9335332],[-76.120814,34.9335332],[-76.120814,34.9952359],[-75.9979015,34.9952359],[-75.9979015,35.0578182],[-75.870338,35.0578182],[-75.870338,35.1219097],[-75.7462194,35.1219097],[-75.7462194,35.1818911],[-75.4929694,35.1818911],[-75.4929694,35.3082988],[-75.4325662,35.3082988],[-75.4325662,35.7542495],[-75.4969907,35.7542495],[-75.4969907,37.8105602],[-75.3082972,37.8105602],[-75.3082972,37.8720088],[-75.245601,37.8720088],[-75.245601,37.9954849],[-75.1828751,37.9954849],[-75.1828751,38.0585079],[-75.1184793,38.0585079],[-75.1184793,38.2469091],[-75.0592098,38.2469091],[-75.0592098,38.3704316],[-74.9948111,38.3704316],[-74.9948111,38.8718417],[-74.4878252,38.8718417],[-74.4878252,39.3089428],[-74.1766317,39.3089428],[-74.1766317,39.6224653],[-74.0567045,39.6224653],[-74.0567045,39.933178],[-73.9959035,39.933178],[-73.9959035,40.1854852],[-73.9341593,40.1854852],[-73.9341593,40.4959486],[-73.8723024,40.4959486],[-73.8723024,40.5527135],[-71.8074506,40.5527135],[-71.8074506,41.3088005],[-70.882512,41.3088005],[-70.882512,41.184978],[-70.7461947,41.184978],[-70.7461947,41.3091865],[-70.4337553,41.3091865],[-70.4337553,41.4963885],[-69.9334281,41.4963885],[-69.9334281,41.6230802],[-69.869857,41.6230802],[-69.869857,41.8776895],[-69.935791,41.8776895],[-69.935791,42.0032342],[-69.9975823,42.0032342],[-69.9975823,42.0650191],[-70.0606103,42.0650191],[-70.0606103,42.1294348],[-70.5572884,42.1294348],[-70.5572884,43.2487079],[-70.4974097,43.2487079],[-70.4974097,43.3092194],[-70.3704249,43.3092194],[-70.3704249,43.371963],[-70.3085701,43.371963],[-70.3085701,43.4969879],[-70.183921,43.4969879],[-70.183921,43.6223531],[-70.057583,43.6223531],[-70.057583,43.6850173],[-69.7455247,43.6850173],[-69.7455247,43.7476571],[-69.2472845,43.7476571],[-69.2472845,43.8107035],[-69.0560701,43.8107035],[-69.0560701,43.8717247],[-68.9950522,43.8717247],[-68.9950522,43.9982022],[-68.4963672,43.9982022],[-68.4963672,44.0597368],[-68.3081038,44.0597368],[-68.3081038,44.122137],[-68.1851802,44.122137],[-68.1851802,44.3081382],[-67.9956019,44.3081382],[-67.9956019,44.3727489],[-67.8103041,44.3727489],[-67.8103041,44.435178],[-67.4965289,44.435178],[-67.4965289,44.4968776],[-67.37102,44.4968776],[-67.37102,44.5600642],[-67.1848753,44.5600642],[-67.1848753,44.6213345],[-67.1221208,44.6213345],[-67.1221208,44.6867918],[-67.059365,44.6867918],[-67.059365,44.7473657],[-66.9311098,44.7473657],[-66.9311098,44.9406566],[-66.994683,44.9406566],[-66.994683,45.0024514],[-67.0595847,45.0024514],[-67.0595847,45.1273377],[-67.1201974,45.1273377],[-67.1201974,45.1910115],[-67.2469811,45.1910115],[-67.2469811,45.253442],[-67.3177546,45.253442],[-67.3177546,45.1898369],[-67.370749,45.1898369],[-67.370749,45.2534001],[-67.4326888,45.2534001],[-67.4326888,45.3083409],[-67.3708571,45.3083409],[-67.3708571,45.4396986],[-67.4305573,45.4396986],[-67.4305573,45.4950095],[-67.37099,45.4950095],[-67.37099,45.6264543],[-67.6214982,45.6264543],[-67.6214982,45.6896133],[-67.683828,45.6896133],[-67.683828,45.753259],[-67.7462097,45.753259],[-67.7462097,47.1268165],[-67.8700141,47.1268165],[-67.8700141,47.1900278],[-67.9323803,47.1900278],[-67.9323803,47.2539678],[-67.9959387,47.2539678],[-67.9959387,47.3149737],[-68.1206676,47.3149737],[-68.1206676,47.3780823],[-68.4423175,47.3780823],[-68.4423175,47.3166082],[-68.6314305,47.3166082],[-68.6314305,47.2544676],[-68.9978037,47.2544676],[-68.9978037,47.439895],[-69.0607223,47.439895],[-69.0607223,47.5047558],[-69.2538122,47.5047558],[-69.2538122,47.4398084],[-69.3179284,47.4398084],[-69.3179284,47.378601],[-69.4438546,47.378601],[-69.4438546,47.3156274],[-69.5038204,47.3156274],[-69.5038204,47.2525839],[-69.5667838,47.2525839],[-69.5667838,47.1910884],[-69.6303478,47.1910884],[-69.6303478,47.128701],[-69.6933103,47.128701],[-69.6933103,47.0654307],[-69.7557063,47.0654307],[-69.7557063,47.0042751],[-69.8180391,47.0042751],[-69.8180391,46.9415344],[-69.8804023,46.9415344],[-69.8804023,46.8792519],[-69.9421674,46.8792519],[-69.9421674,46.8177399],[-70.0063088,46.8177399],[-70.0063088,46.6920295],[-70.0704265,46.6920295],[-70.0704265,46.4425926],[-70.1945902,46.4425926],[-70.1945902,46.3785887],[-70.2562047,46.3785887],[-70.2562047,46.3152628],[-70.3203651,46.3152628],[-70.3203651,46.0651209],[-70.3814988,46.0651209],[-70.3814988,45.93552],[-70.3201618,45.93552],[-70.3201618,45.879479],[-70.4493131,45.879479],[-70.4493131,45.7538713],[-70.5070021,45.7538713],[-70.5070021,45.6916912],[-70.6316642,45.6916912],[-70.6316642,45.6291619],[-70.7575538,45.6291619],[-70.7575538,45.4414685],[-70.8809878,45.4414685],[-70.8809878,45.3780612],[-71.13328,45.3780612],[-71.13328,45.3151452],[-71.3830282,45.3151452],[-71.3830282,45.253416],[-71.5076448,45.253416],[-71.5076448,45.0655726],[-73.9418929,45.0655726],[-73.9418929,45.0031242],[-74.7469725,45.0031242],[-74.7469725,45.0649003],[-74.8800964,45.0649003],[-74.8800964,45.0029023],[-75.0662455,45.0029023],[-75.0662455,44.9415167],[-75.2539363,44.9415167],[-75.2539363,44.8776043],[-75.3789648,44.8776043],[-75.3789648,44.8153462],[-75.4431283,44.8153462],[-75.4431283,44.7536053],[-75.5666566,44.7536053],[-75.5666566,44.6909879],[-75.6290205,44.6909879],[-75.6290205,44.6284958],[-75.7540484,44.6284958],[-75.7540484,44.566385],[-75.817312,44.566385],[-75.817312,44.5028932],[-75.8799549,44.5028932],[-75.8799549,44.3784946],[-76.1300319,44.3784946],[-76.1300319,44.3159227],[-76.1926961,44.3159227],[-76.1926961,44.2534378],[-76.3182619,44.2534378],[-76.3182619,44.1916726],[-76.3792975,44.1916726],[-76.3792975,44.0653733],[-76.4427584,44.0653733],[-76.4427584,43.9963825],[-76.317027,43.9963825],[-76.317027,43.9414581],[-76.5076611,43.9414581],[-76.5076611,43.8723335],[-76.3829974,43.8723335],[-76.3829974,43.8091872],[-76.2534102,43.8091872],[-76.2534102,43.5665222],[-76.5064833,43.5665222],[-76.5064833,43.5033881],[-76.6331208,43.5033881],[-76.6331208,43.4432252],[-76.6951085,43.4432252],[-76.6951085,43.3786858],[-76.8177798,43.3786858],[-76.8177798,43.318066],[-77.682,43.318066],[-77.682,43.3789376],[-78.0565883,43.3789376],[-78.0565883,43.4396918],[-78.4389748,43.4396918],[-78.4389748,43.3794382],[-78.8803396,43.3794382],[-78.8803396,43.3149724],[-79.1298858,43.3149724],[-79.1298858,43.2429286],[-79.0669615,43.2429286],[-79.0669615,43.1299931],[-79.1298858,43.1299931],[-79.1298858,43.0577305],[-79.071264,43.0577305],[-79.071264,42.9294906],[-78.943264,42.9294906],[-78.943264,42.7542165],[-79.069439,42.7542165],[-79.069439,42.6941622],[-79.133439,42.6941622],[-79.133439,42.6296973],[-79.1947499,42.6296973],[-79.1947499,42.5663538],[-79.3786827,42.5663538],[-79.3786827,42.5033425],[-79.4442961,42.5033425],[-79.4442961,42.4410614],[-79.5679936,42.4410614],[-79.5679936,42.3775264],[-79.6906154,42.3775264],[-79.6906154,42.3171086],[-79.8164642,42.3171086],[-79.8164642,42.2534481],[-80.0052373,42.2534481],[-80.0052373,42.1909188],[-80.1916829,42.1909188],[-80.1916829,42.1272555],[-80.3167992,42.1272555],[-80.3167992,42.0669857],[-80.5063234,42.0669857],[-80.5063234,42.0034331],[-80.6930471,42.0034331],[-80.6930471,41.9415141],[-80.9440403,41.9415141],[-80.9440403,41.8781193],[-81.1942729,41.8781193],[-81.1942729,41.8166455],[-81.3190089,41.8166455],[-81.3190089,41.7545453],[-81.4418435,41.7545453],[-81.4418435,41.690965],[-81.5053523,41.690965],[-81.5053523,41.6301643],[-82.7470081,41.6301643],[-82.7470081,41.7536942],[-82.8839135,41.7536942],[-82.8839135,41.5656075],[-82.9957195,41.5656075],[-82.9957195,41.6270375],[-83.1257796,41.6270375],[-83.1257796,41.6878411],[-83.2474733,41.6878411],[-83.2474733,41.7536942],[-83.3737305,41.7536942],[-83.3737305,41.809276],[-83.3106019,41.809276],[-83.3106019,41.8716064],[-83.2474733,41.8716064],[-83.2474733,41.9361393],[-83.1843447,41.9361393],[-83.1843447,41.9960851],[-83.1207681,41.9960851],[-83.1207681,42.2464812],[-83.0589194,42.2464812],[-83.0589194,42.3089555],[-82.8685328,42.3089555],[-82.8685328,42.3717652],[-82.8072219,42.3717652],[-82.8072219,42.558553],[-82.7553745,42.558553],[-82.7553745,42.4954945],[-82.5599041,42.4954945],[-82.5599041,42.558553],[-82.4967755,42.558553],[-82.4967755,42.6833607],[-82.4328863,42.6833607],[-82.4328863,42.9342196],[-82.3700552,42.9342196],[-82.3700552,43.0648071],[-82.4328863,43.0648071],[-82.4328863,43.1917566],[-82.4947464,43.1917566],[-82.4947464,43.5034627],[-82.557133,43.5034627],[-82.557133,43.8160901],[-82.6197884,43.8160901],[-82.6197884,43.9422098],[-82.6839499,43.9422098],[-82.6839499,44.0022641],[-82.7465346,44.0022641],[-82.7465346,44.0670545],[-82.8708696,44.0670545],[-82.8708696,44.1291935],[-83.008517,44.1291935],[-83.008517,44.0664786],[-83.1336086,44.0664786],[-83.1336086,44.0053949],[-83.2414522,44.0053949],[-83.2414522,44.9962034],[-83.1806112,44.9962034],[-83.1806112,45.067302],[-83.2455172,45.067302],[-83.2455172,45.1287382],[-83.3065878,45.1287382],[-83.3065878,45.2551509],[-83.3706087,45.2551509],[-83.3706087,45.3165923],[-83.4325644,45.3165923],[-83.4325644,45.3792105],[-83.6178415,45.3792105],[-83.6178415,45.4419665],[-83.8084291,45.4419665],[-83.8084291,45.5036189],[-84.0550718,45.5036189],[-84.0550718,45.5647907],[-84.1235181,45.5647907],[-84.1235181,45.6287845],[-84.1807534,45.6287845],[-84.1807534,45.6914688],[-84.3111554,45.6914688],[-84.3111554,45.9337076],[-83.8209974,45.9337076],[-83.8209974,45.8725113],[-83.4968086,45.8725113],[-83.4968086,45.9337076],[-83.4338066,45.9337076],[-83.4338066,46.0016863],[-83.4962697,46.0016863],[-83.4962697,46.0668178],[-83.5599956,46.0668178],[-83.5599956,46.1261576],[-83.9954558,46.1261576],[-83.9954558,46.1931747],[-84.0591816,46.1931747],[-84.0591816,46.3814972],[-84.1152614,46.3814972],[-84.1152614,46.4953584],[-84.0591816,46.4953584],[-84.0591816,46.5682653],[-84.2579545,46.5682653],[-84.2579545,46.5051232],[-84.3071879,46.5051232],[-84.3071879,46.5682653],[-84.4415364,46.5682653],[-84.4415364,46.504525],[-84.9965729,46.504525],[-84.9965729,46.6842882],[-84.9298158,46.6842882],[-84.9298158,46.818077],[-85.3165894,46.818077],[-85.3165894,46.7535825],[-87.5562645,46.7535825],[-87.5562645,47.4407371],[-87.6825361,47.4407371],[-87.6825361,47.5035554],[-88.2560738,47.5035554],[-88.2560738,47.4433716],[-88.4417419,47.4433716],[-88.4417419,47.3789949],[-88.50683,47.3789949],[-88.50683,47.3153881],[-88.6312821,47.3153881],[-88.6312821,47.2539782],[-88.7569636,47.2539782],[-88.7569636,47.1934682],[-88.8838253,47.1934682],[-88.8838253,47.1284735],[-88.9434208,47.1284735],[-88.9434208,47.0662127],[-89.0708726,47.0662127],[-89.0708726,47.0026826],[-89.2565553,47.0026826],[-89.2565553,46.9410806],[-90.3677669,46.9410806],[-90.3677669,47.6844827],[-90.3069978,47.6844827],[-90.3069978,47.7460174],[-89.994859,47.7460174],[-89.994859,47.8082719],[-89.8048615,47.8082719],[-89.8048615,47.8700562],[-89.6797699,47.8700562],[-89.6797699,47.9339637],[-89.4933757,47.9339637],[-89.4933757,47.9957956],[-89.4284697,47.9957956],[-89.4284697,48.0656377],[-89.9932739,48.0656377],[-89.9932739,48.1282966],[-90.7455933,48.1282966],[-90.7455933,48.1893056],[-90.8087291,48.1893056],[-90.8087291,48.2522065],[-91.067763,48.2522065],[-91.067763,48.1916658],[-91.1946247,48.1916658],[-91.1946247,48.1279027],[-91.6814196,48.1279027],[-91.6814196,48.2525994],[-91.9321927,48.2525994],[-91.9321927,48.3142454],[-91.9929683,48.3142454],[-91.9929683,48.3780845],[-92.3189383,48.3780845],[-92.3189383,48.2529081],[-92.3732233,48.2529081],[-92.3732233,48.3153385],[-92.4322288,48.3153385],[-92.4322288,48.4411448],[-92.4977248,48.4411448],[-92.4977248,48.501781],[-92.5679413,48.501781],[-92.5679413,48.439579],[-92.6210462,48.439579],[-92.6210462,48.5650783],[-92.8086835,48.5650783],[-92.8086835,48.6286865],[-92.8086835,48.6267365],[-92.933185,48.6267365],[-92.933185,48.6922145],[-93.0051716,48.6922145],[-93.0051716,48.6282965],[-93.1225924,48.6282965],[-93.1225924,48.6922145],[-93.3190806,48.6922145],[-93.3190806,48.6267365],[-93.5049477,48.6267365],[-93.5049477,48.5635164],[-93.7474601,48.5635164],[-93.7474601,48.6267365],[-93.8135461,48.6267365],[-93.8135461,48.6898775],[-94.2453121,48.6898775],[-94.2453121,48.7554327],[-94.6183171,48.7554327],[-94.6183171,48.941036],[-94.6809018,48.941036],[-94.6809018,49.0029737],[-94.7441532,49.0029737],[-94.7441532,49.2536079],[-94.8084069,49.2536079],[-94.8084069,49.3784134],[-95.1192391,49.3784134],[-95.1192391,49.4425264],[-95.1934341,49.4425264],[-95.1934341,49.0035292],[-96.87069,49.0035292],[-96.87069,49.0656063],[-99.0049312,49.0656063],[-99.0049312,49.0050714],[-109.3699257,49.0050714],[-109.3699257,49.0668231],[-109.5058746,49.0668231],[-109.5058746,49.0050714],[-114.1830014,49.0050714],[-114.1830014,49.0687317],[-114.7578709,49.0687317],[-114.7578709,49.0050714],[-115.433731,49.0050714],[-115.433731,49.0671412],[-116.5062706,49.0671412],[-116.5062706,49.0050714],[-117.3089504,49.0050714],[-117.3089504,49.0659803],[-119.882945,49.0659803],[-119.882945,49.0050714],[-120.1208555,49.0050714],[-120.1208555,49.0678367],[-121.4451636,49.0678367],[-121.4451636,49.0050714],[-121.9311808,49.0050714],[-121.9311808,49.0656099],[-122.817484,49.0656099],[-122.817484,49.0029143],[-122.8795155,49.0029143],[-122.8795155,48.9347018],[-122.8174629,48.9347018],[-122.8174629,48.8101998],[-122.7538859,48.8101998],[-122.7538859,48.7533758],[-122.8712937,48.7533758],[-122.8712937,48.8153948],[-123.0055391,48.8153948],[-123.0055391,48.7529529],[-123.1296926,48.7529529],[-123.1296926,48.6902201],[-123.1838197,48.6902201],[-123.1838197,48.7529029],[-123.2549305,48.7529029]],[[-122.9341743,37.7521547],[-122.9347457,37.6842013],[-123.0679013,37.6849023],[-123.0673747,37.7475251],[-123.1292603,37.7478506],[-123.1286894,37.815685],[-123.0590687,37.8153192],[-123.0595947,37.7528143],[-122.9341743,37.7521547]],[[-71.6299464,41.2540893],[-71.4966465,41.2541393],[-71.4965596,41.122965],[-71.6298594,41.1229149],[-71.6299464,41.2540893]],[[-70.3184265,41.3775196],[-70.3183384,41.2448243],[-70.1906612,41.2448722],[-70.1906239,41.1886019],[-69.9336025,41.1886984],[-69.933729,41.3791941],[-69.9950664,41.3791712],[-69.995109,41.443159],[-70.0707828,41.4431307],[-70.0706972,41.3144915],[-70.2461667,41.3144258],[-70.2462087,41.3775467],[-70.3184265,41.3775196]],[[-68.9403374,43.9404062],[-68.6856948,43.9404977],[-68.6856475,43.8721797],[-68.7465405,43.8721577],[-68.7464976,43.8102529],[-68.8090782,43.8102304],[-68.8090343,43.746728],[-68.8773094,43.7467034],[-68.8773544,43.8117826],[-68.9402483,43.8117599],[-68.9403374,43.9404062]],[[-123.1291466,49.0645144],[-122.9954224,49.0645144],[-122.9954224,48.9343243],[-123.1291466,48.9343243],[-123.1291466,49.0645144]],[[-82.9407144,24.7535913],[-82.8719398,24.7535913],[-82.8719398,24.6905653],[-82.7446233,24.6905653],[-82.7446233,24.6214593],[-82.8088038,24.6214593],[-82.8088038,24.5594908],[-82.9407144,24.5594908],[-82.9407144,24.7535913]]]},{"id":"USGS-Scanned_Topographic","name":"USGS Topographic Maps","type":"tms","template":"https://caltopo.s3.amazonaws.com/topo/{zoom}/{x}/{y}.png","scaleExtent":[0,16],"polygon":[[[-55.9959409871,52.00107125754],[-112.02896100663,52.00107125754],[-112.03994733476,56.01308253302],[-120.0049439862,56.00592357111],[-120.01711631014,60.01202439709],[-132.00196823895,60.00239237126],[-132.01208445818,63.00193292546],[-133.96882922149,63.00050478005],[-133.97240257168,63.9922484722],[-141.04429430438,63.98726254018],[-141.06879354491,69.92045693283],[-156.24893170976,71.51583202984],[-160.44570905351,70.83527373985],[-167.08145124101,68.42906280103],[-164.08218366288,67.03913532024],[-169.01504499101,65.68268604273],[-166.57608014726,64.50777504773],[-161.82998639726,64.0500622981],[-165.08193952226,63.26030016403],[-168.02627545976,59.7862264253],[-162.53311139726,59.73089435789],[-162.35733014726,58.55904663221],[-157.83096295976,58.31752983705],[-158.00674420976,57.52404350658],[-168.22402936601,53.51022153947],[-166.55410749101,53.14277307072],[-158.77578717851,54.88541314654],[-158.68240338944,55.7496444805],[-156.55105573319,56.00847621073],[-156.15554792069,56.7746616888],[-154.70535260819,56.14336689443],[-152.07412702226,57.37034511851],[-151.62918073319,58.22653323066],[-152.00820905351,58.98055685754],[-145.98770124101,60.24740887373],[-140.38467389726,59.48634241018],[-136.53945905351,57.80610084736],[-133.79287702226,54.83482554482],[-133.33145124101,53.14277307072],[-131.46377545976,51.69838238021],[-128.52493268632,51.74602265442],[-129.79385358476,50.90159054062],[-124.56436139726,47.49785657441],[-124.03701764726,45.48627362525],[-124.69619733476,42.90428451679],[-124.49844342851,40.3414647251],[-122.80654889726,37.53929308709],[-119.99404889726,33.37084692374],[-117.24746686601,32.54119524801],[-111.13906842851,31.19770451575],[-106.70059186601,31.23528720858],[-103.20693952226,28.64618215851],[-101.84463483476,29.81580068657],[-99.20791608476,26.28743998885],[-96.79092389726,25.75431753335],[-96.92275983476,27.96911213371],[-93.47305280351,29.68226300815],[-88.94668561601,28.87732407469],[-88.61709577226,30.17736083469],[-86.20010358476,30.3671253082],[-84.96963483476,29.43379356715],[-84.09072858476,30.06332630046],[-82.97012311601,28.95425748047],[-82.97012311601,27.26823750278],[-81.25625592851,25.07956298739],[-82.09121686601,24.5610471236],[-80.06973249101,24.76073298597],[-79.85000592851,27.11188091684],[-81.27822858476,30.70777424386],[-78.99307233476,33.20554049136],[-75.03799420976,35.59830000028],[-75.85098249101,37.2425160052],[-73.74160749101,40.4585957587],[-69.89639264726,41.60224497127],[-70.68740827226,43.17628724449],[-66.93008405351,44.69516042167],[-66.53457624101,43.08006996122],[-64.20547467851,43.35229243812],[-59.50332624101,45.73220792131],[-59.51431256913,46.24761804024],[-60.00320417069,46.25901313529],[-59.99221784257,47.24505773341],[-59.00894147538,47.23759898478],[-58.99795514726,47.50266941922],[-56.51504499101,47.50266941922],[-56.52603131913,46.74770404019],[-53.99917585038,46.74770404019],[-53.97720319413,46.48358117386],[-52.49404889726,46.46354265729],[-52.50503522538,48.75360583388],[-52.99667340898,48.75451123442],[-53.01315290116,49.99551104004],[-55.00167829179,50.00610367548],[-55.03738385819,53.74720613495],[-56.00418073319,53.73421061801],[-55.9959409871,52.00107125754]],[[-59.50126630448,43.7495431608],[-60.50239545487,43.7495431608],[-60.50239545487,43.99999882251],[-59.99839765214,43.99999882251],[-59.99839765214,44.2494016836],[-59.50126630448,44.2494016836],[-59.50126630448,43.7495431608]],[[-155.95024091386,20.49523373356],[-157.3267518687,20.49153389084],[-157.32902509355,21.23181053727],[-155.95251413871,21.23549220541],[-155.95024091386,20.49523373356]],[[-157.64488202714,21.24845058596],[-158.28534362719,21.24673774522],[-158.28689557694,21.7499618541],[-157.6464339769,21.75166877943],[-157.64488202714,21.24845058596]],[[-156.12602216386,20.32469602374],[-154.7461696274,20.3284088686],[-154.74174482011,18.87578125335],[-156.12159735656,18.87203473488],[-156.12602216386,20.32469602374]],[[-159.29077130937,22.24504086823],[-159.2892966564,21.76857042389],[-160.28916841131,21.76590592196],[-160.29064306428,22.24238530626],[-159.29077130937,22.24504086823]]],"terms_url":"https://caltopo.com/","terms_text":"© Caltopo"},{"id":"sjcgis.org-General_Basemap_WM","name":"Vector Streetmap for San Juan County WA","type":"tms","template":"http://sjcgis.org/arcgis/rest/services/Basemaps/General_Basemap_WM/MapServer/tile/{zoom}/{y}/{x}","description":"Public domain street and address data from the San Juan County, WA. Updated at least quarterly.","scaleExtent":[0,19],"polygon":[[[-123.274024,48.692975],[-123.007726,48.767256],[-123.007619,48.831577],[-122.783495,48.758416],[-122.693402,48.658522],[-122.767451,48.603606],[-122.744842,48.387083],[-123.248221,48.283531],[-123.114524,48.422614],[-123.219035,48.548575],[-123.274024,48.692975]]],"best":true},{"id":"Vejmidte_Denmark","name":"Vejmidte","type":"tms","template":"http://{switch:a,b,c}.tile.openstreetmap.dk/danmark/vejmidte/{zoom}/{x}/{y}.png","scaleExtent":[0,20],"polygon":[[[8.3743941,54.9551655],[8.3683809,55.4042149],[8.2103997,55.4039795],[8.2087314,55.4937345],[8.0502655,55.4924731],[8.0185123,56.7501399],[8.1819161,56.7509948],[8.1763274,57.0208898],[8.3413329,57.0219872],[8.3392467,57.1119574],[8.5054433,57.1123212],[8.5033923,57.2020499],[9.3316304,57.2027636],[9.3319079,57.2924835],[9.4978864,57.2919578],[9.4988593,57.3820608],[9.6649749,57.3811615],[9.6687295,57.5605591],[9.8351961,57.5596265],[9.8374896,57.6493322],[10.1725726,57.6462818],[10.1754245,57.7367768],[10.5118282,57.7330269],[10.5152095,57.8228945],[10.6834853,57.8207722],[10.6751613,57.6412021],[10.5077045,57.6433097],[10.5039992,57.5535088],[10.671038,57.5514113],[10.6507805,57.1024538],[10.4857673,57.1045138],[10.4786236,56.9249051],[10.3143981,56.9267573],[10.3112341,56.8369269],[10.4750295,56.83509],[10.4649016,56.5656681],[10.9524239,56.5589761],[10.9479249,56.4692243],[11.1099335,56.4664675],[11.1052639,56.376833],[10.9429901,56.3795284],[10.9341235,56.1994768],[10.7719685,56.2020244],[10.7694751,56.1120103],[10.6079695,56.1150259],[10.4466742,56.116717],[10.2865948,56.118675],[10.2831527,56.0281851],[10.4439274,56.0270388],[10.4417713,55.7579243],[10.4334961,55.6693533],[10.743814,55.6646861],[10.743814,55.5712253],[10.8969041,55.5712253],[10.9051793,55.3953852],[11.0613726,55.3812841],[11.0593038,55.1124061],[11.0458567,55.0318621],[11.2030844,55.0247474],[11.2030844,55.117139],[11.0593038,55.1124061],[11.0613726,55.3812841],[11.0789572,55.5712253],[10.8969041,55.5712253],[10.9258671,55.6670198],[10.743814,55.6646861],[10.7562267,55.7579243],[10.4417713,55.7579243],[10.4439274,56.0270388],[10.4466742,56.116717],[10.6079695,56.1150259],[10.6052053,56.0247462],[10.9258671,56.0201215],[10.9197132,55.9309388],[11.0802782,55.92792],[11.0858066,56.0178284],[11.7265047,56.005058],[11.7319981,56.0952142],[12.0540333,56.0871256],[12.0608477,56.1762576],[12.7023469,56.1594405],[12.6611131,55.7114318],[12.9792318,55.7014026],[12.9612912,55.5217294],[12.3268659,55.5412096],[12.3206071,55.4513655],[12.4778226,55.447067],[12.4702432,55.3570479],[12.6269738,55.3523837],[12.6200898,55.2632576],[12.4627339,55.26722],[12.4552949,55.1778223],[12.2987046,55.1822303],[12.2897344,55.0923641],[12.6048608,55.0832904],[12.5872011,54.9036285],[12.2766618,54.9119031],[12.2610181,54.7331602],[12.1070691,54.7378161],[12.0858621,54.4681655],[11.7794953,54.4753579],[11.7837381,54.5654783],[11.1658525,54.5782155],[11.1706443,54.6686508],[10.8617173,54.6733956],[10.8651245,54.7634667],[10.7713646,54.7643888],[10.7707276,54.7372807],[10.7551428,54.7375776],[10.7544039,54.7195666],[10.7389074,54.7197588],[10.7384368,54.7108482],[10.7074486,54.7113045],[10.7041094,54.6756741],[10.5510973,54.6781698],[10.5547184,54.7670245],[10.2423994,54.7705935],[10.2459845,54.8604673],[10.0902268,54.8622134],[10.0873731,54.7723851],[9.1555798,54.7769557],[9.1562752,54.8675369],[8.5321973,54.8663765],[8.531432,54.95516],[8.3743941,54.9551655]],[[11.4577738,56.819554],[11.7849181,56.8127385],[11.7716715,56.6332796],[11.4459621,56.6401087],[11.4577738,56.819554]],[[11.3274736,57.3612962],[11.3161808,57.1818004],[11.1508692,57.1847276],[11.1456628,57.094962],[10.8157703,57.1001693],[10.8290599,57.3695272],[11.3274736,57.3612962]],[[11.5843266,56.2777928],[11.5782882,56.1880397],[11.7392309,56.1845765],[11.7456428,56.2743186],[11.5843266,56.2777928]],[[14.6825922,55.3639405],[14.8395247,55.3565231],[14.8263755,55.2671261],[15.1393406,55.2517359],[15.1532015,55.3410836],[15.309925,55.3330556],[15.295719,55.2437356],[15.1393406,55.2517359],[15.1255631,55.1623802],[15.2815819,55.1544167],[15.2535578,54.9757646],[14.6317464,55.0062496],[14.6825922,55.3639405]]],"terms_url":"http://wiki.openstreetmap.org/wiki/Vejmidte","terms_text":"Danish municipalities"},{"id":"wien.gv.at-labels","name":"Vienna: Beschriftungen (annotations)","type":"tms","template":"https://maps.wien.gv.at/wmts/beschriftung/normal/google3857/{zoom}/{y}/{x}.png","scaleExtent":[12,19],"polygon":[[[16.17,48.1],[16.17,48.33],[16.58,48.33],[16.58,48.1],[16.17,48.1]]],"terms_url":"https://data.wien.gv.at/","terms_text":"Stadt Wien"},{"id":"wien.gv.at-gp","name":"Vienna: Mehrzweckkarte (general purpose)","type":"tms","template":"https://maps.wien.gv.at/wmts/fmzk/pastell/google3857/{zoom}/{y}/{x}.jpeg","scaleExtent":[10,19],"polygon":[[[16.17,48.1],[16.17,48.33],[16.58,48.33],[16.58,48.1],[16.17,48.1]]],"terms_url":"https://data.wien.gv.at/","terms_text":"Stadt Wien"},{"id":"wien.gv.at-aerial_image","name":"Vienna: Orthofoto (aerial image)","type":"tms","template":"https://maps.wien.gv.at/wmts/lb/farbe/google3857/{zoom}/{y}/{x}.jpeg","scaleExtent":[10,19],"polygon":[[[16.17,48.1],[16.17,48.33],[16.58,48.33],[16.58,48.1],[16.17,48.1]]],"terms_url":"https://data.wien.gv.at/","terms_text":"Stadt Wien"}];
 
 
-var presets = {"aerialway":{"fields":["aerialway"],"geometry":["point","vertex","line"],"tags":{"aerialway":"*"},"terms":["ski lift","funifor","funitel"],"searchable":false,"name":"Aerialway"},"aeroway":{"icon":"airport","fields":["aeroway"],"geometry":["point","vertex","line","area"],"tags":{"aeroway":"*"},"searchable":false,"name":"Aeroway"},"amenity":{"fields":["amenity"],"geometry":["point","vertex","area"],"tags":{"amenity":"*"},"searchable":false,"name":"Amenity"},"highway":{"fields":["highway"],"geometry":["point","vertex","line","area"],"tags":{"highway":"*"},"searchable":false,"name":"Highway"},"place":{"fields":["place"],"geometry":["point","vertex","area"],"tags":{"place":"*"},"searchable":false,"name":"Place"},"power":{"geometry":["point","vertex","line","area"],"tags":{"power":"*"},"fields":["power"],"searchable":false,"name":"Power"},"railway":{"fields":["railway"],"geometry":["point","vertex","line","area"],"tags":{"railway":"*"},"searchable":false,"name":"Railway"},"roundabout":{"geometry":["vertex","line"],"tags":{"junction":"roundabout"},"name":"Roundabout","searchable":false},"waterway":{"fields":["waterway"],"geometry":["point","vertex","line","area"],"tags":{"waterway":"*"},"searchable":false,"name":"Waterway"},"address":{"fields":["address"],"geometry":["point"],"tags":{"addr:housenumber":"*"},"addTags":{},"removeTags":{},"matchScore":0.2,"name":"Address"},"advertising/billboard":{"fields":["parallel_direction","lit"],"geometry":["point","vertex","line"],"tags":{"advertising":"billboard"},"name":"Billboard"},"aerialway/cable_car":{"geometry":["line"],"terms":["tramway","ropeway"],"fields":["aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/heating"],"tags":{"aerialway":"cable_car"},"name":"Cable Car"},"aerialway/chair_lift":{"geometry":["line"],"fields":["aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],"tags":{"aerialway":"chair_lift"},"name":"Chair Lift"},"aerialway/drag_lift":{"geometry":["line"],"fields":["aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"drag_lift"},"name":"Drag Lift"},"aerialway/gondola":{"geometry":["line"],"fields":["aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],"tags":{"aerialway":"gondola"},"name":"Gondola"},"aerialway/goods":{"geometry":["line"],"fields":["aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"goods"},"name":"Goods Aerialway"},"aerialway/magic_carpet":{"geometry":["line"],"fields":["aerialway/capacity","aerialway/duration","aerialway/heating"],"tags":{"aerialway":"magic_carpet"},"name":"Magic Carpet Lift"},"aerialway/mixed_lift":{"geometry":["line"],"fields":["aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],"tags":{"aerialway":"mixed_lift"},"name":"Mixed Lift"},"aerialway/platter":{"geometry":["line"],"terms":["button lift","poma lift"],"fields":["aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"platter"},"name":"Platter Lift"},"aerialway/pylon":{"geometry":["point","vertex"],"fields":["ref"],"tags":{"aerialway":"pylon"},"name":"Aerialway Pylon"},"aerialway/rope_tow":{"geometry":["line"],"terms":["handle tow","bugel lift"],"fields":["aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"rope_tow"},"name":"Rope Tow Lift"},"aerialway/station":{"icon":"aerialway","geometry":["point","vertex"],"fields":["aerialway/access","aerialway/summer/access","elevation"],"tags":{"aerialway":"station"},"name":"Aerialway Station"},"aerialway/t-bar":{"geometry":["line"],"fields":["aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"t-bar"},"name":"T-bar Lift"},"aeroway/aerodrome":{"icon":"airport","geometry":["point","area"],"fields":["ref","iata","icao","operator","internet_access","internet_access/fee","internet_access/ssid"],"terms":["airplane","airport","aerodrome"],"tags":{"aeroway":"aerodrome"},"name":"Airport"},"aeroway/apron":{"icon":"airport","geometry":["area"],"terms":["ramp"],"fields":["ref","surface"],"tags":{"aeroway":"apron"},"name":"Apron"},"aeroway/gate":{"icon":"airport","geometry":["point"],"fields":["ref"],"tags":{"aeroway":"gate"},"name":"Airport Gate"},"aeroway/hangar":{"geometry":["area"],"fields":["building_area"],"tags":{"aeroway":"hangar"},"name":"Hangar"},"aeroway/helipad":{"icon":"heliport","geometry":["point","area"],"fields":["ref"],"terms":["helicopter","helipad","heliport"],"tags":{"aeroway":"helipad"},"name":"Helipad"},"aeroway/runway":{"geometry":["line","area"],"terms":["landing strip"],"fields":["ref","surface","length","width"],"tags":{"aeroway":"runway"},"name":"Runway"},"aeroway/taxiway":{"geometry":["line"],"fields":["ref","surface"],"tags":{"aeroway":"taxiway"},"name":"Taxiway"},"aeroway/terminal":{"icon":"airport","geometry":["point","area"],"terms":["airport","aerodrome"],"fields":["operator","building_area"],"tags":{"aeroway":"terminal"},"name":"Airport Terminal"},"amenity/coworking_space":{"icon":"commercial","fields":["address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"amenity":"coworking_space"},"name":"Coworking Space","searchable":false},"amenity/nursing_home":{"icon":"wheelchair","fields":["operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"geometry":["point","area"],"tags":{"amenity":"nursing_home"},"reference":{"key":"social_facility","value":"nursing_home"},"name":"Nursing Home","searchable":false},"amenity/register_office":{"icon":"town-hall","fields":["address","building_area","opening_hours","operator"],"geometry":["point","area"],"tags":{"amenity":"register_office"},"reference":{"key":"government","value":"register_office"},"name":"Register Office","searchable":false},"amenity/swimming_pool":{"icon":"swimming","geometry":["point","vertex","area"],"tags":{"amenity":"swimming_pool"},"reference":{"key":"leisure","value":"swimming_pool"},"name":"Swimming Pool","searchable":false},"amenity/animal_boarding":{"icon":"veterinary","fields":["operator","address","building_area","opening_hours","animal_boarding"],"geometry":["point","area"],"terms":["boarding","cat","dog","horse","kitten","pet boarding","pet care","pet hotel","puppy","reptile"],"tags":{"amenity":"animal_boarding"},"name":"Animal Boarding Facility"},"amenity/animal_breeding":{"icon":"veterinary","fields":["operator","address","building_area","opening_hours","animal_breeding"],"geometry":["point","area"],"terms":["breeding","bull","cat","cow","dog","horse","husbandry","kitten","livestock","pet breeding","puppy","reptile"],"tags":{"amenity":"animal_breeding"},"name":"Animal Breeding Facility"},"amenity/animal_shelter":{"icon":"veterinary","fields":["operator","address","building_area","opening_hours","animal_shelter"],"geometry":["point","area"],"terms":["adoption","aspca","cat","dog","horse","kitten","pet care","pet rescue","puppy","raptor","reptile","rescue","spca"],"tags":{"amenity":"animal_shelter"},"name":"Animal Shelter"},"amenity/arts_centre":{"icon":"theatre","fields":["address","building_area","opening_hours"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"arts_centre"},"name":"Arts Center"},"amenity/atm":{"icon":"bank","fields":["operator","currency_multi","drive_through"],"geometry":["point","vertex"],"terms":["money","cash","machine"],"tags":{"amenity":"atm"},"name":"ATM"},"amenity/bank":{"icon":"bank","fields":["atm","operator","address","building_area","opening_hours","drive_through"],"geometry":["point","area"],"terms":["credit union","check","deposit","fund","investment","repository","reserve","safe","savings","stock","treasury","trust","vault"],"tags":{"amenity":"bank"},"name":"Bank"},"amenity/bar":{"icon":"bar","fields":["operator","address","building_area","opening_hours","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["dive","beer","bier","booze"],"tags":{"amenity":"bar"},"name":"Bar"},"amenity/bbq":{"icon":"bbq","fields":["covered","fuel"],"geometry":["point"],"terms":["bbq","grill"],"tags":{"amenity":"bbq"},"name":"Barbecue/Grill"},"amenity/bench":{"icon":"poi-bench","fields":["backrest"],"geometry":["point","vertex","line"],"terms":["seat"],"tags":{"amenity":"bench"},"name":"Bench"},"amenity/bicycle_parking":{"icon":"bicycle","fields":["bicycle_parking","capacity","operator","covered","access_simple"],"geometry":["point","vertex","area"],"terms":["bike"],"tags":{"amenity":"bicycle_parking"},"name":"Bicycle Parking"},"amenity/bicycle_rental":{"icon":"bicycle","fields":["capacity","network","operator"],"geometry":["point","vertex","area"],"terms":["bike"],"tags":{"amenity":"bicycle_rental"},"name":"Bicycle Rental"},"amenity/bicycle_repair_station":{"icon":"bicycle","fields":["operator","brand","opening_hours","fee","service/bicycle"],"geometry":["point","vertex","area"],"terms":["bike","repair","chain","pump"],"tags":{"amenity":"bicycle_repair_station"},"name":"Bicycle Repair Tool Stand"},"amenity/biergarten":{"icon":"beer","fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"geometry":["point","area"],"tags":{"amenity":"biergarten"},"terms":["beer","bier","booze"],"name":"Beer Garden"},"amenity/boat_rental":{"fields":["operator"],"geometry":["point","area"],"tags":{"amenity":"boat_rental"},"name":"Boat Rental"},"amenity/bureau_de_change":{"icon":"bank","fields":["operator","currency_multi"],"geometry":["point","vertex"],"terms":["bureau de change","money changer"],"tags":{"amenity":"bureau_de_change"},"name":"Currency Exchange"},"amenity/bus_station":{"icon":"bus","fields":["building_area","operator","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"amenity":"bus_station"},"name":"Bus Station"},"amenity/cafe":{"icon":"cafe","fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["bistro","coffee","tea"],"tags":{"amenity":"cafe"},"name":"Cafe"},"amenity/car_rental":{"icon":"car","fields":["operator"],"geometry":["point","area"],"tags":{"amenity":"car_rental"},"name":"Car Rental"},"amenity/car_sharing":{"icon":"car","fields":["operator","capacity"],"geometry":["point","area"],"tags":{"amenity":"car_sharing"},"name":"Car Sharing"},"amenity/car_wash":{"icon":"car","fields":["address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"amenity":"car_wash"},"name":"Car Wash"},"amenity/casino":{"icon":"poi-dice","fields":["operator","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"terms":["gambling","roulette","craps","poker","blackjack"],"tags":{"amenity":"casino"},"name":"Casino"},"amenity/charging_station":{"icon":"car","fields":["operator","capacity"],"geometry":["point","area"],"tags":{"amenity":"charging_station"},"terms":["EV","Electric Vehicle","Supercharger"],"name":"Charging Station"},"amenity/childcare":{"icon":"school","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["daycare","orphanage","playgroup"],"tags":{"amenity":"childcare"},"name":"Nursery/Childcare"},"amenity/cinema":{"icon":"cinema","fields":["address","building_area","opening_hours"],"geometry":["point","area"],"terms":["drive-in","film","flick","movie","theater","picture","show","screen"],"tags":{"amenity":"cinema"},"name":"Cinema"},"amenity/clinic":{"icon":"hospital","fields":["address","building_area","opening_hours"],"geometry":["point","area"],"terms":["medical","urgentcare"],"tags":{"amenity":"clinic"},"name":"Clinic"},"amenity/clock":{"icon":"poi-clock","fields":["support","display","visibility","date"],"geometry":["point","vertex"],"tags":{"amenity":"clock"},"name":"Clock"},"amenity/college":{"icon":"college","fields":["operator","address","internet_access","internet_access/ssid"],"geometry":["point","area"],"terms":["university"],"tags":{"amenity":"college"},"name":"College Grounds"},"amenity/community_centre":{"icon":"town-hall","fields":["operator","address","building_area"],"geometry":["point","area"],"terms":["event","hall"],"tags":{"amenity":"community_centre"},"name":"Community Center"},"amenity/compressed_air":{"icon":"car","geometry":["point","area"],"tags":{"amenity":"compressed_air"},"name":"Compressed Air"},"amenity/courthouse":{"icon":"town-hall","fields":["operator","address","building_area"],"geometry":["point","area"],"tags":{"amenity":"courthouse"},"name":"Courthouse"},"amenity/crematorium":{"icon":"cemetery","fields":["website","phone","opening_hours","wheelchair"],"geometry":["area","point"],"tags":{"amenity":"crematorium"},"terms":["cemetery","funeral"],"name":"Crematorium"},"amenity/dentist":{"icon":"dentist","fields":["address","building_area","opening_hours"],"geometry":["point","area"],"terms":["tooth","teeth"],"tags":{"amenity":"dentist"},"name":"Dentist"},"amenity/doctors":{"icon":"hospital","fields":["address","building_area","opening_hours"],"geometry":["point","area"],"terms":["medic*"],"tags":{"amenity":"doctors"},"name":"Doctor"},"amenity/dojo":{"icon":"pitch","fields":["sport","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["martial arts","dojang"],"tags":{"amenity":"dojo"},"name":"Dojo / Martial Arts Academy"},"amenity/drinking_water":{"icon":"drinking-water","geometry":["point"],"tags":{"amenity":"drinking_water"},"terms":["fountain","potable"],"name":"Drinking Water"},"amenity/driving_school":{"icon":"car","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"amenity":"driving_school"},"name":"Driving School"},"amenity/embassy":{"icon":"embassy","fields":["country","address","building_area"],"geometry":["point","area"],"tags":{"amenity":"embassy"},"name":"Embassy"},"amenity/fast_food":{"icon":"fast-food","fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"geometry":["point","area"],"tags":{"amenity":"fast_food"},"terms":["restaurant","takeaway"],"name":"Fast Food"},"amenity/ferry_terminal":{"icon":"ferry","fields":["network","operator","address","building_area"],"geometry":["point","vertex","area"],"terms":[],"tags":{"amenity":"ferry_terminal"},"name":"Ferry Terminal"},"amenity/fire_station":{"icon":"fire-station","fields":["operator","address","building_area"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"fire_station"},"name":"Fire Station"},"amenity/food_court":{"icon":"restaurant","fields":["operator","address","building_area","opening_hours","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["fast food","restaurant","food"],"tags":{"amenity":"food_court"},"name":"Food Court"},"amenity/fountain":{"icon":"poi-fountain","geometry":["point","area"],"tags":{"amenity":"fountain"},"name":"Fountain"},"amenity/fuel":{"icon":"fuel","fields":["operator","address","opening_hours","fuel_multi"],"geometry":["point","area"],"terms":["petrol","fuel","gasoline","propane","diesel","lng","cng","biodiesel"],"tags":{"amenity":"fuel"},"name":"Gas Station"},"amenity/grave_yard":{"icon":"cemetery","fields":["religion","denomination"],"geometry":["point","area"],"tags":{"amenity":"grave_yard"},"name":"Graveyard"},"amenity/grit_bin":{"fields":["access_simple"],"geometry":["point","vertex"],"tags":{"amenity":"grit_bin"},"terms":["salt","sand"],"name":"Grit Bin"},"amenity/hospital":{"icon":"hospital","fields":["operator","address","emergency"],"geometry":["point","area"],"terms":["clinic","doctor","emergency room","health","infirmary","institution","sanatorium","sanitarium","sick","surgery","ward"],"tags":{"amenity":"hospital"},"name":"Hospital Grounds"},"amenity/hunting_stand":{"icon":"poi-binoculars","geometry":["point","vertex","area"],"terms":["game","gun","lookout","rifle","shoot*","wild","watch"],"tags":{"amenity":"hunting_stand"},"name":"Hunting Stand"},"amenity/ice_cream":{"icon":"ice-cream","fields":["address","building_area","opening_hours","takeaway","delivery","outdoor_seating"],"geometry":["point","area"],"terms":["gelato","sorbet","sherbet","frozen","yogurt"],"tags":{"amenity":"ice_cream"},"name":"Ice Cream Shop"},"amenity/internet_cafe":{"icon":"poi-mast","fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["cybercafe","taxiphone","teleboutique","coffee","cafe","net","lanhouse"],"tags":{"amenity":"internet_cafe"},"name":"Internet Cafe"},"amenity/kindergarten":{"icon":"school","fields":["operator","address"],"geometry":["point","area"],"terms":["kindergarden","pre-school"],"tags":{"amenity":"kindergarten"},"name":"Preschool/Kindergarten Grounds"},"amenity/library":{"icon":"library","fields":["operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"terms":["book"],"tags":{"amenity":"library"},"name":"Library"},"amenity/marketplace":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"amenity":"marketplace"},"name":"Marketplace"},"amenity/motorcycle_parking":{"icon":"scooter","fields":["capacity","operator","covered","access_simple"],"geometry":["point","vertex","area"],"tags":{"amenity":"motorcycle_parking"},"name":"Motorcycle Parking"},"amenity/nightclub":{"icon":"bar","fields":["operator","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"tags":{"amenity":"nightclub"},"terms":["disco*","night club","dancing","dance club"],"name":"Nightclub"},"amenity/parking_entrance":{"icon":"entrance-alt1","fields":["access_simple","ref"],"geometry":["vertex"],"tags":{"amenity":"parking_entrance"},"name":"Parking Garage Entrance/Exit"},"amenity/parking_space":{"fields":["capacity"],"geometry":["point","vertex","area"],"terms":[],"tags":{"amenity":"parking_space"},"matchScore":0.95,"name":"Parking Space"},"amenity/parking":{"icon":"parking","fields":["operator","parking","capacity","fee","access_simple","supervised","park_ride","surface","maxstay","address"],"geometry":["point","vertex","area"],"tags":{"amenity":"parking"},"terms":[],"name":"Car Parking"},"amenity/pavilion":{"icon":"shelter","fields":["bin","bench"],"geometry":["point","vertex","area"],"tags":{"amenity":"shelter","shelter_type":"pavilion"},"name":"Pavilion"},"amenity/pharmacy":{"icon":"pharmacy","fields":["operator","address","building_area","opening_hours","drive_through"],"geometry":["point","area"],"tags":{"amenity":"pharmacy"},"terms":["drug*","med*","prescription"],"name":"Pharmacy"},"amenity/place_of_worship":{"icon":"place-of-worship","fields":["religion","denomination","address","building_area","service_times"],"geometry":["point","area"],"terms":["abbey","basilica","bethel","cathedral","chancel","chantry","chapel","church","fold","house of God","house of prayer","house of worship","minster","mission","mosque","oratory","parish","sacellum","sanctuary","shrine","synagogue","tabernacle","temple"],"tags":{"amenity":"place_of_worship"},"name":"Place of Worship"},"amenity/place_of_worship/buddhist":{"icon":"buddhism","fields":["denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["stupa","vihara","monastery","temple","pagoda","zendo","dojo"],"tags":{"amenity":"place_of_worship","religion":"buddhist"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Buddhist Temple"},"amenity/place_of_worship/christian":{"icon":"religious-christian","fields":["denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["christian","abbey","basilica","bethel","cathedral","chancel","chantry","chapel","fold","house of God","house of prayer","house of worship","minster","mission","oratory","parish","sacellum","sanctuary","shrine","tabernacle","temple"],"tags":{"amenity":"place_of_worship","religion":"christian"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Church"},"amenity/place_of_worship/jewish":{"icon":"religious-jewish","fields":["denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["jewish"],"tags":{"amenity":"place_of_worship","religion":"jewish"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Synagogue"},"amenity/place_of_worship/muslim":{"icon":"religious-muslim","fields":["denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["muslim"],"tags":{"amenity":"place_of_worship","religion":"muslim"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Mosque"},"amenity/planetarium":{"icon":"museum","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["museum","astronomy","observatory"],"tags":{"amenity":"planetarium"},"name":"Planetarium"},"amenity/police":{"icon":"police","fields":["operator","address","building_area"],"geometry":["point","area"],"terms":["badge","constable","constabulary","cop","detective","fed","law","enforcement","officer","patrol"],"tags":{"amenity":"police"},"name":"Police"},"amenity/post_box":{"icon":"post","fields":["operator","collection_times","drive_through","ref"],"geometry":["point","vertex"],"tags":{"amenity":"post_box"},"terms":["letter","post"],"name":"Mailbox"},"amenity/post_office":{"icon":"post","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["letter","mail"],"tags":{"amenity":"post_office"},"name":"Post Office"},"amenity/prison":{"icon":"prison","fields":["operator","address"],"geometry":["point","area"],"terms":["cell","jail"],"tags":{"amenity":"prison"},"name":"Prison Grounds"},"amenity/pub":{"icon":"beer","fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"geometry":["point","area"],"tags":{"amenity":"pub"},"terms":["alcohol","drink","dive","beer","bier","booze"],"name":"Pub"},"amenity/public_bath":{"icon":"water","fields":["bath/type","bath/open_air","bath/sand_bath","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"amenity":"public_bath"},"terms":["onsen","foot bath","hot springs"],"name":"Public Bath"},"amenity/public_bookcase":{"icon":"library","fields":["name","operator","capacity","website"],"geometry":["point","area"],"terms":["library","bookcrossing"],"tags":{"amenity":"public_bookcase"},"name":"Public Bookcase"},"amenity/ranger_station":{"fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["visitor center","visitor centre","permit center","permit centre","backcountry office","warden office","warden center"],"tags":{"amenity":"ranger_station"},"name":"Ranger Station"},"amenity/recycling_centre":{"icon":"waste-basket","fields":["operator","address","opening_hours","recycling_accepts"],"geometry":["point","area"],"terms":["bottle","can","dump","glass","garbage","rubbish","scrap","trash"],"tags":{"amenity":"recycling","recycling_type":"centre"},"name":"Recycling Center"},"amenity/recycling":{"icon":"recycling","fields":["recycling_type","recycling_accepts","collection_times"],"geometry":["point","area"],"terms":["bin","can","bottle","glass","garbage","rubbish","scrap","trash"],"tags":{"amenity":"recycling"},"name":"Recycling"},"amenity/restaurant":{"icon":"restaurant","fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["bar","breakfast","cafe","café","canteen","coffee","dine","dining","dinner","drive-in","eat","grill","lunch","table"],"tags":{"amenity":"restaurant"},"name":"Restaurant"},"amenity/sanitary_dump_station":{"icon":"poi-storage-tank","fields":["operator","access_toilets","fee","water_point"],"geometry":["point","vertex","area"],"terms":["Motor Home","Camper","Sanitary","Dump Station","Elsan","CDP","CTDP","Chemical Toilet"],"tags":{"amenity":"sanitary_dump_station"},"name":"RV Toilet Disposal"},"amenity/school":{"icon":"school","fields":["operator","address"],"geometry":["point","area"],"terms":["academy","elementary school","middle school","high school"],"tags":{"amenity":"school"},"name":"School Grounds"},"amenity/shelter":{"icon":"shelter","fields":["shelter_type","bin"],"geometry":["point","vertex","area"],"terms":["lean-to","gazebo","picnic"],"tags":{"amenity":"shelter"},"name":"Shelter"},"amenity/social_facility":{"icon":"poi-social-facility","fields":["operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"social_facility"},"name":"Social Facility"},"amenity/social_facility/food_bank":{"icon":"poi-social-facility","fields":["operator","address","building_area","social_facility","social_facility_for","opening_hours"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"social_facility","social_facility":"food_bank"},"reference":{"key":"social_facility","value":"food_bank"},"name":"Food Bank"},"amenity/social_facility/group_home":{"icon":"wheelchair","fields":["operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"geometry":["point","area"],"terms":["old","senior","living"],"tags":{"amenity":"social_facility","social_facility":"group_home","social_facility:for":"senior"},"reference":{"key":"social_facility","value":"group_home"},"name":"Elderly Group Home"},"amenity/social_facility/homeless_shelter":{"icon":"poi-social-facility","fields":["operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"terms":["houseless","unhoused","displaced"],"tags":{"amenity":"social_facility","social_facility":"shelter","social_facility:for":"homeless"},"reference":{"key":"social_facility","value":"shelter"},"name":"Homeless Shelter"},"amenity/social_facility/nursing_home":{"icon":"wheelchair","fields":["operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"geometry":["point","area"],"terms":["elderly","living","nursing","old","senior"],"tags":{"amenity":"social_facility","social_facility":"nursing_home","social_facility:for":"senior"},"reference":{"key":"social_facility","value":"nursing_home"},"name":"Nursing Home"},"amenity/studio":{"icon":"karaoke","fields":["studio","address","building_area"],"geometry":["point","area"],"terms":["recording","radio","television"],"tags":{"amenity":"studio"},"name":"Studio"},"amenity/taxi":{"icon":"car","fields":["operator","capacity"],"geometry":["point","vertex","area"],"terms":["cab"],"tags":{"amenity":"taxi"},"name":"Taxi Stand"},"amenity/telephone":{"icon":"telephone","geometry":["point","vertex"],"tags":{"amenity":"telephone"},"terms":["phone"],"name":"Telephone"},"amenity/theatre":{"icon":"theatre","fields":["operator","address","building_area"],"geometry":["point","area"],"terms":["theatre","performance","play","musical"],"tags":{"amenity":"theatre"},"name":"Theater"},"amenity/toilets":{"icon":"toilet","fields":["toilets/disposal","operator","building_area","access_toilets","gender","fee","diaper"],"geometry":["point","vertex","area"],"terms":["bathroom","restroom","outhouse","privy","head","lavatory","latrine","water closet","WC","W.C."],"tags":{"amenity":"toilets"},"name":"Toilets"},"amenity/townhall":{"icon":"town-hall","fields":["operator","address","building_area"],"geometry":["point","area"],"terms":["village","city","government","courthouse","municipal"],"tags":{"amenity":"townhall"},"name":"Town Hall"},"amenity/university":{"icon":"college","fields":["operator","address","internet_access","internet_access/ssid"],"geometry":["point","area"],"terms":["college"],"tags":{"amenity":"university"},"name":"University Grounds"},"amenity/vending_machine":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":[],"tags":{"amenity":"vending_machine"},"name":"Vending Machine"},"amenity/vending_machine/news_papers":{"icon":"poi-vending-machine","fields":["operator","fee","payment_multi","currency_multi"],"geometry":["point"],"terms":["newspaper"],"tags":{"amenity":"vending_machine","vending":"news_papers"},"reference":{"key":"vending","value":"newspapers"},"name":"Newspaper Vending Machine","searchable":false},"amenity/vending_machine/cigarettes":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["cigarette"],"tags":{"amenity":"vending_machine","vending":"cigarettes"},"reference":{"key":"vending","value":"cigarettes"},"name":"Cigarette Vending Machine"},"amenity/vending_machine/condoms":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["condom"],"tags":{"amenity":"vending_machine","vending":"condoms"},"reference":{"key":"vending","value":"condoms"},"name":"Condom Vending Machine"},"amenity/vending_machine/drinks":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["drink","soda","beverage","juice","pop"],"tags":{"amenity":"vending_machine","vending":"drinks"},"reference":{"key":"vending","value":"drinks"},"name":"Drink Vending Machine"},"amenity/vending_machine/excrement_bags":{"icon":"poi-vending-machine","fields":["operator","fee","bin","payment_multi","currency_multi"],"geometry":["point"],"terms":["excrement bags","poop","dog","animal"],"tags":{"amenity":"vending_machine","vending":"excrement_bags"},"reference":{"key":"vending","value":"excrement_bags"},"name":"Excrement Bag Vending Machine"},"amenity/vending_machine/newspapers":{"icon":"poi-vending-machine","fields":["operator","fee","payment_multi","currency_multi"],"geometry":["point"],"terms":["newspaper"],"tags":{"amenity":"vending_machine","vending":"newspapers"},"reference":{"key":"vending","value":"newspapers"},"name":"Newspaper Vending Machine"},"amenity/vending_machine/parcel_pickup_dropoff":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["parcel","mail","pickup"],"tags":{"amenity":"vending_machine","vending":"parcel_pickup;parcel_mail_in"},"reference":{"key":"vending","value":"parcel_pickup;parcel_mail_in"},"name":"Parcel Pickup/Dropoff Vending Machine"},"amenity/vending_machine/parking_tickets":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["parking","ticket"],"tags":{"amenity":"vending_machine","vending":"parking_tickets"},"reference":{"key":"vending","value":"parking_tickets"},"matchScore":0.94,"name":"Parking Ticket Vending Machine"},"amenity/vending_machine/public_transport_tickets":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["bus","train","ferry","rail","ticket","transportation"],"tags":{"amenity":"vending_machine","vending":"public_transport_tickets"},"reference":{"key":"vending","value":"public_transport_tickets"},"name":"Transit Ticket Vending Machine"},"amenity/vending_machine/sweets":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["candy","gum","chip","pretzel","cookie","cracker"],"tags":{"amenity":"vending_machine","vending":"sweets"},"reference":{"key":"vending","value":"sweets"},"name":"Snack Vending Machine"},"amenity/veterinary":{"icon":"veterinary","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["pet clinic","veterinarian","animal hospital","pet doctor"],"tags":{"amenity":"veterinary"},"name":"Veterinary"},"amenity/waste_basket":{"icon":"waste-basket","fields":["collection_times"],"geometry":["point","vertex","area"],"tags":{"amenity":"waste_basket"},"terms":["bin","garbage","rubbish","litter","trash"],"name":"Waste Basket"},"amenity/waste_disposal":{"icon":"waste-basket","fields":["collection_times"],"geometry":["point","vertex","area"],"tags":{"amenity":"waste_disposal"},"terms":["garbage","rubbish","litter","trash"],"name":"Garbage Dumpster"},"amenity/waste_transfer_station":{"icon":"waste-basket","fields":["operator","address","opening_hours"],"geometry":["point","area"],"terms":["dump","garbage","recycling","rubbish","scrap","trash"],"tags":{"amenity":"waste_transfer_station"},"name":"Waste Transfer Station"},"amenity/water_point":{"icon":"drinking-water","geometry":["area","vertex","point"],"tags":{"amenity":"water_point"},"name":"RV Drinking Water"},"amenity/watering_place":{"icon":"drinking-water","geometry":["area","vertex","point"],"tags":{"amenity":"watering_place"},"name":"Animal Watering Place"},"area":{"name":"Area","tags":{"area":"yes"},"geometry":["area"],"matchScore":0.1},"area/highway":{"fields":["area/highway"],"geometry":["area"],"tags":{"area:highway":"*"},"name":"Road Surface"},"barrier":{"icon":"roadblock","geometry":["point","vertex","line","area"],"tags":{"barrier":"*"},"fields":["barrier"],"name":"Barrier","matchScore":0.4},"barrier/entrance":{"icon":"entrance-alt1","geometry":["vertex"],"tags":{"barrier":"entrance"},"name":"Entrance","searchable":false},"barrier/block":{"icon":"roadblock","fields":["access"],"geometry":["point","vertex"],"tags":{"barrier":"block"},"name":"Block"},"barrier/bollard":{"icon":"roadblock","fields":["access"],"geometry":["point","vertex","line"],"tags":{"barrier":"bollard"},"name":"Bollard"},"barrier/border_control":{"icon":"roadblock","fields":["access","building_area"],"geometry":["vertex","area"],"tags":{"barrier":"border_control"},"name":"Border Control"},"barrier/cattle_grid":{"icon":"barrier","geometry":["vertex"],"tags":{"barrier":"cattle_grid"},"name":"Cattle Grid"},"barrier/city_wall":{"icon":"barrier","fields":["height"],"geometry":["line","area"],"tags":{"barrier":"city_wall"},"name":"City Wall"},"barrier/cycle_barrier":{"icon":"roadblock","fields":["access"],"geometry":["vertex"],"tags":{"barrier":"cycle_barrier"},"name":"Cycle Barrier"},"barrier/ditch":{"icon":"roadblock","geometry":["line","area"],"tags":{"barrier":"ditch"},"name":"Trench","matchScore":0.25},"barrier/fence":{"icon":"fence","fields":["fence_type","height"],"geometry":["line"],"tags":{"barrier":"fence"},"name":"Fence","matchScore":0.25},"barrier/gate":{"icon":"barrier","fields":["access"],"geometry":["point","vertex","line"],"tags":{"barrier":"gate"},"name":"Gate"},"barrier/hedge":{"fields":["height"],"geometry":["line","area"],"tags":{"barrier":"hedge"},"name":"Hedge","matchScore":0.25},"barrier/kissing_gate":{"icon":"barrier","fields":["access"],"geometry":["vertex"],"tags":{"barrier":"kissing_gate"},"name":"Kissing Gate"},"barrier/lift_gate":{"icon":"roadblock","fields":["access"],"geometry":["point","vertex"],"tags":{"barrier":"lift_gate"},"name":"Lift Gate"},"barrier/retaining_wall":{"geometry":["line","area"],"tags":{"barrier":"retaining_wall"},"name":"Retaining Wall"},"barrier/stile":{"icon":"roadblock","fields":["access"],"geometry":["point","vertex"],"tags":{"barrier":"stile"},"name":"Stile"},"barrier/toll_booth":{"icon":"roadblock","fields":["access","building_area"],"geometry":["vertex","area"],"tags":{"barrier":"toll_booth"},"name":"Toll Booth"},"barrier/wall":{"icon":"barrier","fields":["wall","height"],"geometry":["line","area"],"tags":{"barrier":"wall"},"name":"Wall","matchScore":0.25},"boundary/administrative":{"name":"Administrative Boundary","geometry":["line"],"tags":{"boundary":"administrative"},"fields":["admin_level"]},"building":{"icon":"home","fields":["building","levels","address"],"geometry":["point","area"],"tags":{"building":"*"},"matchScore":0.6,"terms":[],"name":"Building"},"building/bunker":{"fields":["address","levels"],"geometry":["area"],"tags":{"building":"bunker"},"matchScore":0.5,"name":"Bunker","searchable":false},"building/entrance":{"icon":"entrance-alt1","geometry":["vertex"],"tags":{"building":"entrance"},"name":"Entrance/Exit","searchable":false},"building/train_station":{"icon":"building","fields":["address","levels"],"geometry":["point","vertex","area"],"tags":{"building":"train_station"},"matchScore":0.5,"name":"Train Station","searchable":false},"building/apartments":{"icon":"building","fields":["address","levels"],"geometry":["area"],"tags":{"building":"apartments"},"matchScore":0.5,"name":"Apartments"},"building/barn":{"icon":"farm","fields":["address","levels"],"geometry":["area"],"tags":{"building":"barn"},"matchScore":0.5,"name":"Barn"},"building/cabin":{"icon":"home","fields":["address","levels"],"geometry":["area"],"tags":{"building":"cabin"},"matchScore":0.5,"name":"Cabin"},"building/cathedral":{"icon":"place-of-worship","fields":["address","levels"],"geometry":["area"],"tags":{"building":"cathedral"},"matchScore":0.5,"name":"Cathedral Building"},"building/chapel":{"icon":"place-of-worship","fields":["address","levels"],"geometry":["area"],"tags":{"building":"chapel"},"matchScore":0.5,"name":"Chapel Building"},"building/church":{"icon":"place-of-worship","fields":["address","levels"],"geometry":["area"],"tags":{"building":"church"},"matchScore":0.5,"name":"Church Building"},"building/college":{"icon":"building","fields":["address","levels"],"geometry":["area"],"terms":["university"],"tags":{"building":"college"},"matchScore":0.5,"name":"College Building"},"building/commercial":{"icon":"commercial","fields":["address","levels","smoking"],"geometry":["area"],"tags":{"building":"commercial"},"matchScore":0.5,"name":"Commercial Building"},"building/construction":{"icon":"building","fields":["address","levels"],"geometry":["area"],"tags":{"building":"construction"},"matchScore":0.5,"name":"Building Under Construction"},"building/detached":{"icon":"home","fields":["address","levels"],"geometry":["area"],"tags":{"building":"detached"},"terms":["home","single","family","residence","dwelling"],"matchScore":0.5,"name":"Detached House"},"building/dormitory":{"icon":"building","fields":["address","levels","smoking"],"geometry":["area"],"tags":{"building":"dormitory"},"matchScore":0.5,"name":"Dormitory"},"building/garage":{"icon":"warehouse","fields":["capacity"],"geometry":["area"],"tags":{"building":"garage"},"matchScore":0.5,"name":"Garage"},"building/garages":{"icon":"warehouse","fields":["capacity"],"geometry":["area"],"tags":{"building":"garages"},"matchScore":0.5,"name":"Garages"},"building/greenhouse":{"icon":"garden-center","fields":["address","levels"],"geometry":["area"],"tags":{"building":"greenhouse"},"matchScore":0.5,"name":"Greenhouse"},"building/hospital":{"icon":"building","fields":["address","levels"],"geometry":["area"],"tags":{"building":"hospital"},"matchScore":0.5,"name":"Hospital Building"},"building/hotel":{"icon":"building","fields":["address","levels","smoking"],"geometry":["area"],"tags":{"building":"hotel"},"matchScore":0.5,"name":"Hotel Building"},"building/house":{"icon":"home","fields":["address","levels"],"geometry":["area"],"tags":{"building":"house"},"terms":["home","family","residence","dwelling"],"matchScore":0.5,"name":"House"},"building/hut":{"geometry":["area"],"tags":{"building":"hut"},"matchScore":0.5,"name":"Hut"},"building/industrial":{"icon":"industry","fields":["address","levels"],"geometry":["area"],"tags":{"building":"industrial"},"matchScore":0.5,"name":"Industrial Building"},"building/kindergarten":{"icon":"building","fields":["address","levels"],"geometry":["area"],"terms":["kindergarden","pre-school"],"tags":{"building":"kindergarten"},"matchScore":0.5,"name":"Preschool/Kindergarten Building"},"building/public":{"icon":"building","fields":["address","levels","smoking"],"geometry":["area"],"tags":{"building":"public"},"matchScore":0.5,"name":"Public Building"},"building/residential":{"icon":"residential-community","fields":["address","levels"],"geometry":["area"],"tags":{"building":"residential"},"matchScore":0.5,"name":"Residential Building"},"building/retail":{"icon":"commercial","fields":["address","levels","smoking"],"geometry":["area"],"tags":{"building":"retail"},"matchScore":0.5,"name":"Retail Building"},"building/roof":{"icon":"shelter","fields":["address"],"geometry":["area"],"tags":{"building":"roof"},"matchScore":0.5,"name":"Roof"},"building/school":{"icon":"building","fields":["address","levels"],"geometry":["area"],"terms":["academy","elementary school","middle school","high school"],"tags":{"building":"school"},"matchScore":0.5,"name":"School Building"},"building/semidetached_house":{"icon":"home","fields":["address","levels"],"geometry":["area"],"tags":{"building":"semidetached_house"},"terms":["home","double","duplex","twin","family","residence","dwelling"],"matchScore":0.5,"name":"Semi-Detached House"},"building/shed":{"icon":"home","fields":["address","levels"],"geometry":["area"],"tags":{"building":"shed"},"matchScore":0.5,"name":"Shed"},"building/stable":{"icon":"horse-riding","fields":["address","levels"],"geometry":["area"],"tags":{"building":"stable"},"matchScore":0.5,"name":"Stable"},"building/static_caravan":{"icon":"home","fields":["address","levels"],"geometry":["area"],"tags":{"building":"static_caravan"},"matchScore":0.5,"name":"Static Mobile Home"},"building/terrace":{"icon":"building","fields":["address","levels"],"geometry":["area"],"tags":{"building":"terrace"},"terms":["home","terrace","brownstone","family","residence","dwelling"],"matchScore":0.5,"name":"Row Houses"},"building/university":{"icon":"building","fields":["address","levels"],"geometry":["area"],"terms":["college"],"tags":{"building":"university"},"matchScore":0.5,"name":"University Building"},"building/warehouse":{"icon":"warehouse","fields":["address","levels"],"geometry":["area"],"tags":{"building":"warehouse"},"matchScore":0.5,"name":"Warehouse"},"camp_site/camp_pitch":{"icon":"campsite","fields":["ref"],"geometry":["point","area"],"terms":["tent","rv"],"tags":{"camp_site":"camp_pitch"},"name":"Camp Pitch"},"club":{"icon":"heart","fields":["club","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"club":"*"},"terms":["social"],"name":"Club"},"craft":{"icon":"poi-tool","fields":["craft","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"*"},"terms":[],"name":"Craft"},"craft/jeweler":{"icon":"marker-stroked","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"jeweler"},"reference":{"key":"shop","value":"jewelry"},"name":"Jeweler","searchable":false},"craft/locksmith":{"icon":"marker-stroked","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"locksmith"},"reference":{"key":"shop","value":"locksmith"},"name":"Locksmith","searchable":false},"craft/optician":{"icon":"marker-stroked","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"optician"},"reference":{"key":"shop","value":"optician"},"name":"Optician","searchable":false},"craft/tailor":{"icon":"clothing-store","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["clothes","suit"],"tags":{"craft":"tailor"},"reference":{"key":"shop","value":"tailor"},"name":"Tailor","searchable":false},"craft/basket_maker":{"icon":"art-gallery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"basket_maker"},"name":"Basket Maker"},"craft/beekeeper":{"icon":"farm","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"beekeeper"},"name":"Beekeeper"},"craft/blacksmith":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"blacksmith"},"name":"Blacksmith"},"craft/boatbuilder":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"boatbuilder"},"name":"Boat Builder"},"craft/bookbinder":{"icon":"library","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["book repair"],"tags":{"craft":"bookbinder"},"name":"Bookbinder"},"craft/brewery":{"icon":"beer","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["beer","bier"],"tags":{"craft":"brewery"},"name":"Brewery"},"craft/carpenter":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["woodworker"],"tags":{"craft":"carpenter"},"name":"Carpenter"},"craft/carpet_layer":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"carpet_layer"},"name":"Carpet Layer"},"craft/caterer":{"icon":"restaurant","fields":["cuisine","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"caterer"},"name":"Caterer"},"craft/clockmaker":{"icon":"poi-clock","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"clockmaker"},"name":"Clockmaker"},"craft/confectionery":{"icon":"bakery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["sweets","candy"],"tags":{"craft":"confectionery"},"name":"Confectionery"},"craft/dressmaker":{"icon":"clothing-store","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["seamstress"],"tags":{"craft":"dressmaker"},"name":"Dressmaker"},"craft/electrician":{"icon":"poi-power","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["power","wire"],"tags":{"craft":"electrician"},"name":"Electrician"},"craft/gardener":{"icon":"garden","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["landscaper","grounds keeper"],"tags":{"craft":"gardener"},"name":"Gardener"},"craft/glaziery":{"icon":"fire-station","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["glass","stained-glass","window"],"tags":{"craft":"glaziery"},"name":"Glaziery"},"craft/handicraft":{"icon":"art-gallery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"handicraft"},"name":"Handicraft"},"craft/hvac":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["heat*","vent*","air conditioning"],"tags":{"craft":"hvac"},"name":"HVAC"},"craft/insulator":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"insulation"},"name":"Insulator"},"craft/key_cutter":{"icon":"marker-stroked","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"key_cutter"},"name":"Key Cutter"},"craft/metal_construction":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"metal_construction"},"name":"Metal Construction"},"craft/painter":{"icon":"art-gallery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"painter"},"name":"Painter"},"craft/photographer":{"icon":"attraction","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"photographer"},"name":"Photographer"},"craft/photographic_laboratory":{"icon":"attraction","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["film"],"tags":{"craft":"photographic_laboratory"},"name":"Photographic Laboratory"},"craft/plasterer":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"plasterer"},"name":"Plasterer"},"craft/plumber":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["pipe"],"tags":{"craft":"plumber"},"name":"Plumber"},"craft/pottery":{"icon":"art-gallery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["ceramic"],"tags":{"craft":"pottery"},"name":"Pottery"},"craft/rigger":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"rigger"},"name":"Rigger"},"craft/roofer":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"roofer"},"name":"Roofer"},"craft/saddler":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"saddler"},"name":"Saddler"},"craft/sailmaker":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"sailmaker"},"name":"Sailmaker"},"craft/sawmill":{"icon":"logging","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["lumber"],"tags":{"craft":"sawmill"},"name":"Sawmill"},"craft/scaffolder":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"scaffolder"},"name":"Scaffolder"},"craft/sculpter":{"icon":"art-gallery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"sculpter"},"name":"Sculpter"},"craft/shoemaker":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["cobbler"],"tags":{"craft":"shoemaker"},"name":"Shoemaker"},"craft/stonemason":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["masonry"],"tags":{"craft":"stonemason"},"name":"Stonemason"},"craft/sweep":{"icon":"poi-chimney","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"sweep"},"name":"Chimney Sweep"},"craft/tiler":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"tiler"},"name":"Tiler"},"craft/tinsmith":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"tinsmith"},"name":"Tinsmith"},"craft/upholsterer":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"upholsterer"},"name":"Upholsterer"},"craft/watchmaker":{"icon":"poi-clock","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"watchmaker"},"name":"Watchmaker"},"craft/window_construction":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["glass"],"tags":{"craft":"window_construction"},"name":"Window Construction"},"craft/winery":{"icon":"alcohol-shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"winery"},"name":"Winery"},"embankment":{"geometry":["line"],"tags":{"embankment":"yes"},"name":"Embankment","matchScore":0.2},"emergency/designated":{"fields":[],"geometry":["line"],"tags":{"emergency":"designated"},"terms":[],"name":"Emergency Access Designated","searchable":false,"matchScore":0.01},"emergency/destination":{"fields":[],"geometry":["line"],"tags":{"emergency":"destination"},"terms":[],"name":"Emergency Access Destination","searchable":false,"matchScore":0.01},"emergency/no":{"fields":[],"geometry":["line"],"tags":{"emergency":"no"},"terms":[],"name":"Emergency Access No","searchable":false,"matchScore":0.01},"emergency/official":{"fields":[],"geometry":["line"],"tags":{"emergency":"official"},"terms":[],"name":"Emergency Access Official","searchable":false,"matchScore":0.01},"emergency/private":{"fields":[],"geometry":["line"],"tags":{"emergency":"private"},"terms":[],"name":"Emergency Access Private","searchable":false,"matchScore":0.01},"emergency/yes":{"fields":[],"geometry":["line"],"tags":{"emergency":"yes"},"terms":[],"name":"Emergency Access Yes","searchable":false,"matchScore":0.01},"emergency/ambulance_station":{"icon":"hospital","fields":["operator","building_area","address"],"geometry":["point","area"],"terms":["EMS","EMT","rescue"],"tags":{"emergency":"ambulance_station"},"name":"Ambulance Station"},"emergency/defibrillator":{"icon":"defibrillator","fields":["access","opening_hours","indoor","phone"],"geometry":["point"],"terms":["AED"],"tags":{"emergency":"defibrillator"},"name":"Defibrillator"},"emergency/fire_hydrant":{"icon":"poi-fire-hydrant","fields":["fire_hydrant/type","fire_hydrant/position","ref","operator"],"geometry":["point","vertex"],"terms":["fire plug"],"tags":{"emergency":"fire_hydrant"},"name":"Fire Hydrant"},"emergency/phone":{"icon":"emergency-phone","fields":["operator"],"geometry":["point","vertex"],"tags":{"emergency":"phone"},"name":"Emergency Phone"},"entrance":{"icon":"entrance-alt1","geometry":["vertex"],"tags":{"entrance":"*"},"fields":["entrance","access_simple","address"],"name":"Entrance/Exit"},"footway/crossing":{"fields":["crossing","access","surface","kerb","tactile_paving"],"geometry":["line"],"tags":{"highway":"footway","footway":"crossing"},"reference":{"key":"footway","value":"crossing"},"terms":[],"name":"Street Crossing"},"footway/crosswalk":{"icon":"highway-footway","fields":["crossing","access","surface","kerb","tactile_paving"],"geometry":["line"],"tags":{"highway":"footway","footway":"crossing","crossing":"zebra"},"reference":{"key":"highway","value":"crossing"},"terms":["zebra crossing"],"name":"Pedestrian Crosswalk"},"footway/sidewalk":{"icon":"highway-footway","fields":["surface","lit","width","structure","access"],"geometry":["line"],"tags":{"highway":"footway","footway":"sidewalk"},"reference":{"key":"footway","value":"sidewalk"},"terms":[],"name":"Sidewalk"},"ford":{"geometry":["vertex"],"tags":{"ford":"yes"},"name":"Ford"},"golf/bunker":{"icon":"golf","geometry":["area"],"tags":{"golf":"bunker","natural":"sand"},"terms":["hazard","bunker"],"reference":{"key":"golf","value":"bunker"},"name":"Sand Trap"},"golf/fairway":{"icon":"golf","geometry":["area"],"tags":{"golf":"fairway","landuse":"grass"},"reference":{"key":"golf","value":"fairway"},"name":"Fairway"},"golf/green":{"icon":"golf","geometry":["area"],"tags":{"golf":"green","landuse":"grass","leisure":"pitch","sport":"golf"},"reference":{"key":"golf","value":"green"},"name":"Putting Green"},"golf/hole":{"icon":"golf","fields":["golf_hole","par","handicap"],"geometry":["line"],"tags":{"golf":"hole"},"name":"Golf Hole"},"golf/lateral_water_hazard_area":{"icon":"golf","geometry":["area"],"tags":{"golf":"lateral_water_hazard","natural":"water"},"reference":{"key":"golf","value":"lateral_water_hazard"},"name":"Lateral Water Hazard"},"golf/lateral_water_hazard_line":{"icon":"golf","geometry":["line"],"tags":{"golf":"lateral_water_hazard"},"name":"Lateral Water Hazard"},"golf/rough":{"icon":"golf","geometry":["area"],"tags":{"golf":"rough","landuse":"grass"},"reference":{"key":"golf","value":"rough"},"name":"Rough"},"golf/tee":{"icon":"golf","geometry":["area"],"tags":{"golf":"tee","landuse":"grass"},"terms":["teeing ground"],"reference":{"key":"golf","value":"tee"},"name":"Tee Box"},"golf/water_hazard_area":{"icon":"golf","geometry":["area"],"tags":{"golf":"water_hazard","natural":"water"},"reference":{"key":"golf","value":"water_hazard"},"name":"Water Hazard"},"golf/water_hazard_line":{"icon":"golf","geometry":["line"],"tags":{"golf":"water_hazard"},"name":"Water Hazard"},"healthcare/blood_donation":{"icon":"blood-bank","fields":["operator","address","blood_components","opening_hours","ref"],"geometry":["point","area"],"terms":["blood bank","blood donation","blood transfusion","apheresis","plasmapheresis","plateletpheresis","stem cell donation"],"tags":{"healthcare":"blood_donation"},"name":"Blood Donor Center"},"highway/bridleway":{"fields":["surface","width","structure","access"],"icon":"highway-bridleway","geometry":["line"],"tags":{"highway":"bridleway"},"terms":["bridleway","equestrian","horse"],"name":"Bridle Path"},"highway/bus_stop":{"icon":"bus","fields":["network","operator","bench","shelter"],"geometry":["point","vertex"],"tags":{"highway":"bus_stop"},"terms":[],"name":"Bus Stop"},"highway/corridor":{"icon":"highway-footway","fields":["width","level","access_simple"],"geometry":["line"],"tags":{"highway":"corridor"},"terms":["gallery","hall","hallway","indoor","passage","passageway"],"name":"Indoor Corridor"},"highway/crossing":{"fields":["crossing","kerb","tactile_paving"],"geometry":["vertex"],"tags":{"highway":"crossing"},"reference":{"key":"footway","value":"crossing"},"terms":[],"name":"Street Crossing"},"highway/crosswalk":{"icon":"poi-foot","fields":["crossing","kerb","tactile_paving"],"geometry":["vertex"],"tags":{"highway":"crossing","crossing":"zebra"},"reference":{"key":"highway","value":"crossing"},"terms":["zebra crossing"],"name":"Pedestrian Crosswalk"},"highway/cycleway":{"icon":"highway-cycleway","fields":["oneway","surface","lit","width","structure","access"],"geometry":["line"],"tags":{"highway":"cycleway"},"terms":["bike"],"name":"Cycle Path"},"highway/footway":{"icon":"highway-footway","fields":["surface","lit","width","structure","access"],"geometry":["line","area"],"terms":["hike","hiking","trackway","trail","walk"],"tags":{"highway":"footway"},"name":"Foot Path"},"highway/give_way":{"icon":"poi-yield","fields":["parallel_direction"],"geometry":["vertex"],"tags":{"highway":"give_way"},"terms":["give way","yield","sign"],"name":"Yield Sign"},"highway/living_street":{"icon":"highway-living-street","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","access","cycleway"],"geometry":["line"],"tags":{"highway":"living_street"},"name":"Living Street"},"highway/mini_roundabout":{"icon":"circle-stroked","geometry":["vertex"],"tags":{"highway":"mini_roundabout"},"fields":["clock_direction"],"name":"Mini-Roundabout"},"highway/motorway_junction":{"icon":"poi-junction","geometry":["vertex"],"tags":{"highway":"motorway_junction"},"fields":["ref"],"name":"Motorway Junction / Exit"},"highway/motorway_link":{"icon":"highway-motorway-link","fields":["ref","oneway_yes","maxspeed","lanes","surface","structure","maxheight","access"],"geometry":["line"],"tags":{"highway":"motorway_link"},"addTags":{"highway":"motorway_link","oneway":"yes"},"removeTags":{"highway":"motorway_link","oneway":"yes"},"terms":["ramp","on ramp","off ramp"],"name":"Motorway Link"},"highway/motorway":{"icon":"highway-motorway","fields":["ref","oneway_yes","maxspeed","lanes","surface","structure","maxheight","toll","access"],"geometry":["line"],"tags":{"highway":"motorway"},"terms":["autobahn","expressway","freeway","highway","interstate","parkway","thruway","turnpike"],"name":"Motorway"},"highway/path":{"icon":"highway-path","fields":["surface","width","structure","access","incline","sac_scale","trail_visibility","mtb/scale","mtb/scale/uphill","mtb/scale/imba","ref"],"geometry":["line"],"terms":["hike","hiking","trackway","trail","walk"],"tags":{"highway":"path"},"name":"Path"},"highway/pedestrian":{"icon":"highway-footway","fields":["surface","lit","width","oneway","structure","access"],"geometry":["line","area"],"tags":{"highway":"pedestrian"},"terms":[],"name":"Pedestrian Street"},"highway/primary_link":{"icon":"highway-primary-link","fields":["oneway","maxspeed","lanes","surface","maxheight","ref","cycleway","structure","access"],"geometry":["line"],"tags":{"highway":"primary_link"},"terms":["ramp","on ramp","off ramp"],"name":"Primary Link"},"highway/primary":{"icon":"highway-primary","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","ref","cycleway","access"],"geometry":["line"],"tags":{"highway":"primary"},"terms":[],"name":"Primary Road"},"highway/raceway":{"icon":"highway-unclassified","fields":["oneway","surface","sport_racing_motor","lit","width","lanes","structure"],"geometry":["point","line","area"],"tags":{"highway":"raceway"},"addTags":{"highway":"raceway","sport":"motor"},"terms":["auto*","formula one","kart","motocross","nascar","race*","track"],"name":"Racetrack (Motorsport)"},"highway/residential":{"icon":"highway-residential","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","cycleway","access"],"geometry":["line"],"tags":{"highway":"residential"},"terms":[],"name":"Residential Road"},"highway/rest_area":{"icon":"car","geometry":["point","vertex","area"],"tags":{"highway":"rest_area"},"terms":["rest stop"],"name":"Rest Area"},"highway/road":{"icon":"highway-road","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","access"],"geometry":["line"],"tags":{"highway":"road"},"terms":[],"name":"Unknown Road"},"highway/secondary_link":{"icon":"highway-secondary-link","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","ref","cycleway","access"],"geometry":["line"],"tags":{"highway":"secondary_link"},"terms":["ramp","on ramp","off ramp"],"name":"Secondary Link"},"highway/secondary":{"icon":"highway-secondary","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","ref","cycleway","access"],"geometry":["line"],"tags":{"highway":"secondary"},"terms":[],"name":"Secondary Road"},"highway/service":{"icon":"highway-service","fields":["service","oneway","maxspeed","surface","structure","maxheight","access"],"geometry":["line"],"tags":{"highway":"service"},"terms":[],"name":"Service Road"},"highway/service/alley":{"icon":"highway-service","fields":["oneway","maxspeed","structure","access","surface","maxheight"],"geometry":["line"],"tags":{"highway":"service","service":"alley"},"reference":{"key":"service","value":"alley"},"name":"Alley"},"highway/service/drive-through":{"icon":"highway-service","fields":["oneway","covered","maxheight","maxspeed","structure","access","surface"],"geometry":["line"],"tags":{"highway":"service","service":"drive-through"},"reference":{"key":"service","value":"drive-through"},"name":"Drive-Through"},"highway/service/driveway":{"icon":"highway-service","fields":["oneway","maxspeed","structure","access","surface","maxheight"],"geometry":["line"],"tags":{"highway":"service","service":"driveway"},"reference":{"key":"service","value":"driveway"},"name":"Driveway"},"highway/service/emergency_access":{"icon":"highway-service","fields":["oneway","maxspeed","structure","access","surface","maxheight"],"geometry":["line"],"tags":{"highway":"service","service":"emergency_access"},"reference":{"key":"service","value":"emergency_access"},"name":"Emergency Access"},"highway/service/parking_aisle":{"icon":"highway-service","fields":["oneway","maxspeed","structure","access","surface","maxheight"],"geometry":["line"],"tags":{"highway":"service","service":"parking_aisle"},"reference":{"key":"service","value":"parking_aisle"},"name":"Parking Aisle"},"highway/services":{"icon":"car","geometry":["point","vertex","area"],"tags":{"highway":"services"},"terms":["services","travel plaza","service station"],"name":"Service Area"},"highway/speed_camera":{"icon":"attraction","geometry":["point"],"fields":["ref"],"tags":{"highway":"speed_camera"},"terms":[],"name":"Speed Camera"},"highway/steps":{"icon":"highway-steps","fields":["surface","lit","width","incline_steps","handrail","step_count"],"geometry":["line"],"tags":{"highway":"steps"},"terms":["stairs","staircase"],"name":"Steps"},"highway/stop":{"icon":"poi-stop","fields":["stop","parallel_direction"],"geometry":["vertex"],"tags":{"highway":"stop"},"terms":["stop","halt","sign"],"name":"Stop Sign"},"highway/street_lamp":{"icon":"poi-street-lamp","geometry":["point","vertex"],"tags":{"highway":"street_lamp"},"fields":["lamp_type","ref"],"terms":["streetlight","street light","lamp","light","gaslight"],"name":"Street Lamp"},"highway/tertiary_link":{"icon":"highway-tertiary-link","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","ref","cycleway","access"],"geometry":["line"],"tags":{"highway":"tertiary_link"},"terms":["ramp","on ramp","off ramp"],"name":"Tertiary Link"},"highway/tertiary":{"icon":"highway-tertiary","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","ref","cycleway","access"],"geometry":["line"],"tags":{"highway":"tertiary"},"terms":[],"name":"Tertiary Road"},"highway/track":{"icon":"highway-track","fields":["tracktype","surface","width","structure","access","incline","smoothness","mtb/scale","mtb/scale/uphill","mtb/scale/imba"],"geometry":["line"],"tags":{"highway":"track"},"terms":["woods road","forest road","logging road","fire road","farm road","agricultural road","ranch road","carriage road","primitive","unmaintained","rut","offroad","4wd","4x4","four wheel drive","atv","quad","jeep","double track","two track"],"name":"Unmaintained Track Road"},"highway/traffic_mirror":{"geometry":["point"],"tags":{"highway":"traffic_mirror"},"terms":["blind spot","convex","corner","curved","roadside","round","safety","sphere","visibility"],"name":"Traffic Mirror"},"highway/traffic_signals":{"icon":"poi-traffic-signals","geometry":["vertex"],"tags":{"highway":"traffic_signals"},"fields":["traffic_signals"],"terms":["light","stoplight","traffic light"],"name":"Traffic Signals"},"highway/trunk_link":{"icon":"highway-trunk-link","fields":["ref","oneway","maxspeed","lanes","surface","structure","maxheight","access"],"geometry":["line"],"tags":{"highway":"trunk_link"},"terms":["ramp","on ramp","off ramp"],"name":"Trunk Link"},"highway/trunk":{"icon":"highway-trunk","fields":["ref","oneway","maxspeed","lanes","surface","structure","maxheight","toll","access"],"geometry":["line"],"tags":{"highway":"trunk"},"terms":[],"name":"Trunk Road"},"highway/turning_circle":{"icon":"circle-stroked","geometry":["vertex"],"tags":{"highway":"turning_circle"},"terms":["cul-de-sac"],"name":"Turning Circle"},"highway/turning_loop":{"icon":"circle","geometry":["vertex"],"tags":{"highway":"turning_loop"},"terms":["cul-de-sac"],"name":"Turning Loop (Island)"},"highway/unclassified":{"icon":"highway-unclassified","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","cycleway","access"],"geometry":["line"],"tags":{"highway":"unclassified"},"terms":[],"name":"Minor/Unclassified Road"},"historic":{"icon":"poi-ruins","fields":["historic","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"*"},"name":"Historic Site"},"historic/archaeological_site":{"icon":"poi-ruins","fields":["historic/civilization","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"archaeological_site"},"name":"Archaeological Site"},"historic/boundary_stone":{"icon":"monument","fields":["inscription"],"geometry":["point","vertex"],"tags":{"historic":"boundary_stone"},"name":"Boundary Stone"},"historic/castle":{"icon":"castle","fields":["castle_type","building_area","historic/civilization"],"geometry":["point","area"],"tags":{"historic":"castle"},"name":"Castle"},"historic/memorial":{"icon":"monument","fields":["inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"memorial"},"name":"Memorial"},"historic/monument":{"icon":"monument","fields":["inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"monument"},"name":"Monument"},"historic/ruins":{"icon":"poi-ruins","fields":["historic/civilization","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"ruins"},"name":"Ruins"},"historic/tomb":{"icon":"cemetery","fields":["tomb","building_area","inscription"],"geometry":["point","area"],"tags":{"historic":"tomb"},"name":"Tomb"},"historic/wayside_cross":{"icon":"religious-christian","fields":["inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"wayside_cross"},"name":"Wayside Cross"},"historic/wayside_shrine":{"icon":"landmark","fields":["inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"wayside_shrine"},"name":"Wayside Shrine"},"junction":{"icon":"poi-junction","geometry":["vertex","area"],"tags":{"junction":"yes"},"name":"Junction"},"landuse":{"fields":["landuse"],"geometry":["area"],"tags":{"landuse":"*"},"matchScore":0.9,"name":"Land Use"},"landuse/farm":{"icon":"farm","fields":["operator","crop"],"geometry":["point","area"],"tags":{"landuse":"farm"},"terms":[],"name":"Farmland","searchable":false},"landuse/allotments":{"geometry":["area"],"tags":{"landuse":"allotments"},"terms":["allotment","garden"],"name":"Community Garden"},"landuse/aquaculture":{"icon":"aquarium","fields":["operator","produce"],"geometry":["area"],"tags":{"landuse":"aquaculture"},"terms":["fish farm","crustacean","algae","aquafarming","shrimp farm","oyster farm","mariculture","algaculture"],"name":"Aquaculture"},"landuse/basin":{"icon":"water","geometry":["area"],"tags":{"landuse":"basin"},"terms":[],"name":"Basin"},"landuse/cemetery":{"icon":"cemetery","fields":["religion","denomination"],"geometry":["area"],"tags":{"landuse":"cemetery"},"terms":[],"name":"Cemetery"},"landuse/churchyard":{"fields":["religion","denomination"],"geometry":["area"],"tags":{"landuse":"churchyard"},"terms":[],"name":"Churchyard"},"landuse/commercial":{"icon":"commercial","geometry":["area"],"tags":{"landuse":"commercial"},"terms":[],"name":"Commercial Area"},"landuse/construction":{"fields":["construction","operator"],"geometry":["area"],"tags":{"landuse":"construction"},"terms":[],"name":"Construction"},"landuse/farmland":{"icon":"farm","fields":["operator","crop","produce"],"geometry":["area"],"tags":{"landuse":"farmland"},"terms":["crop","grow","plant"],"name":"Farmland"},"landuse/farmyard":{"icon":"farm","fields":["operator","crop"],"geometry":["area"],"tags":{"landuse":"farmyard"},"terms":["crop","grow","plant"],"name":"Farmyard"},"landuse/forest":{"icon":"park-alt1","fields":["leaf_type","leaf_cycle","produce"],"geometry":["area"],"tags":{"landuse":"forest"},"terms":["tree"],"name":"Forest"},"landuse/garages":{"geometry":["area"],"tags":{"landuse":"garages"},"terms":[],"name":"Garages"},"landuse/grass":{"geometry":["area"],"tags":{"landuse":"grass"},"terms":[],"name":"Grass"},"landuse/harbour":{"icon":"harbor","fields":["operator"],"geometry":["area"],"terms":["boat"],"tags":{"landuse":"harbour"},"name":"Harbor"},"landuse/industrial":{"icon":"industry","geometry":["area"],"tags":{"landuse":"industrial"},"terms":[],"matchScore":0.9,"name":"Industrial Area"},"landuse/landfill":{"geometry":["area"],"tags":{"landuse":"landfill"},"terms":["dump"],"name":"Landfill"},"landuse/meadow":{"geometry":["area"],"tags":{"landuse":"meadow"},"terms":[],"name":"Meadow"},"landuse/military":{"icon":"poi-military","geometry":["area"],"tags":{"landuse":"military"},"terms":[],"matchScore":0.9,"name":"Military Area"},"landuse/military/airfield":{"icon":"airfield","fields":["ref","iata","icao"],"geometry":["point","area"],"tags":{"military":"airfield"},"addTags":{"landuse":"military","military":"airfield"},"removeTags":{"landuse":"military","military":"airfield"},"terms":["air force","army","base","bomb","fight","force","guard","heli*","jet","marine","navy","plane","troop","war"],"name":"Military Airfield"},"landuse/military/barracks":{"icon":"poi-military","fields":["building_area"],"geometry":["point","area"],"tags":{"military":"barracks"},"addTags":{"landuse":"military","military":"barracks"},"removeTags":{"landuse":"military","military":"barracks"},"terms":["air force","army","base","fight","force","guard","marine","navy","troop","war"],"name":"Barracks"},"landuse/military/bunker":{"icon":"poi-military","fields":["bunker_type","building_area"],"geometry":["point","area"],"tags":{"military":"bunker"},"addTags":{"building":"bunker","landuse":"military","military":"bunker"},"removeTags":{"building":"bunker","landuse":"military","military":"bunker"},"terms":["air force","army","base","fight","force","guard","marine","navy","troop","war"],"name":"Military Bunker"},"landuse/military/checkpoint":{"icon":"barrier","geometry":["point","vertex","area"],"tags":{"military":"checkpoint"},"addTags":{"landuse":"military","military":"checkpoint"},"removeTags":{"landuse":"military","military":"checkpoint"},"terms":["air force","army","base","force","guard","marine","navy","troop","war"],"name":"Checkpoint"},"landuse/military/danger_area":{"icon":"danger","geometry":["point","vertex","area"],"tags":{"military":"danger_area"},"addTags":{"landuse":"military","military":"danger_area"},"removeTags":{"landuse":"military","military":"danger_area"},"terms":["air force","army","base","blast","bomb","explo*","force","guard","mine","marine","navy","troop","war"],"name":"Danger Area"},"landuse/military/naval_base":{"icon":"poi-military","geometry":["point","area"],"tags":{"military":"naval_base"},"addTags":{"landuse":"military","military":"naval_base"},"removeTags":{"landuse":"military","military":"naval_base"},"terms":["base","fight","force","guard","marine","navy","ship","sub","troop","war"],"name":"Naval Base"},"landuse/military/nuclear_explosion_site":{"icon":"danger","geometry":["point","vertex","area"],"tags":{"military":"nuclear_explosion_site"},"addTags":{"landuse":"military","military":"nuclear_explosion_site"},"removeTags":{"landuse":"military","military":"nuclear_explosion_site"},"terms":["atom","blast","bomb","detonat*","nuke","site","test"],"name":"Nuclear Explosion Site"},"landuse/military/obstacle_course":{"icon":"poi-military","geometry":["point","area"],"tags":{"military":"obstacle_course"},"addTags":{"landuse":"military","military":"obstacle_course"},"removeTags":{"landuse":"military","military":"obstacle_course"},"terms":["army","base","force","guard","marine","navy","troop","war"],"name":"Obstacle Course"},"landuse/military/office":{"icon":"poi-military","fields":["building_area"],"geometry":["point","area"],"tags":{"military":"office"},"addTags":{"landuse":"military","military":"office"},"removeTags":{"landuse":"military","military":"office"},"terms":["air force","army","base","enlist","fight","force","guard","marine","navy","recruit","troop","war"],"name":"Military Office"},"landuse/military/range":{"icon":"poi-military","geometry":["point","area"],"tags":{"military":"range"},"addTags":{"landuse":"military","military":"range"},"removeTags":{"landuse":"military","military":"range"},"terms":["air force","army","base","fight","fire","force","guard","gun","marine","navy","rifle","shoot*","snip*","train","troop","war"],"name":"Military Range"},"landuse/military/training_area":{"icon":"poi-military","geometry":["point","area"],"tags":{"military":"training_area"},"addTags":{"landuse":"military","military":"training_area"},"removeTags":{"landuse":"military","military":"training_area"},"terms":["air force","army","base","fight","fire","force","guard","gun","marine","navy","rifle","shoot*","snip*","train","troop","war"],"name":"Training Area"},"landuse/orchard":{"icon":"park-alt1","fields":["operator","trees"],"geometry":["area"],"tags":{"landuse":"orchard"},"terms":["fruit"],"name":"Orchard"},"landuse/plant_nursery":{"icon":"garden","fields":["operator","plant"],"geometry":["area"],"tags":{"landuse":"plant_nursery"},"terms":["flower","garden","grow","vivero"],"name":"Plant Nursery"},"landuse/quarry":{"geometry":["area"],"tags":{"landuse":"quarry"},"terms":[],"name":"Quarry"},"landuse/railway":{"icon":"rail","fields":["operator"],"geometry":["area"],"tags":{"landuse":"railway"},"terms":["rail","train","track"],"name":"Railway Corridor"},"landuse/recreation_ground":{"icon":"pitch","geometry":["area"],"tags":{"landuse":"recreation_ground"},"terms":["playing fields"],"name":"Recreation Ground"},"landuse/residential":{"icon":"building","geometry":["area"],"tags":{"landuse":"residential"},"terms":[],"name":"Residential Area"},"landuse/retail":{"icon":"shop","geometry":["area"],"tags":{"landuse":"retail"},"name":"Retail Area"},"landuse/vineyard":{"fields":["operator","grape_variety"],"geometry":["area"],"tags":{"landuse":"vineyard"},"addTags":{"landuse":"vineyard","crop":"grape"},"removeTags":{"landuse":"vineyard","crop":"grape","grape_variety":"*"},"terms":["grape","wine"],"name":"Vineyard"},"leisure":{"icon":"pitch","fields":["leisure"],"geometry":["point","vertex","area"],"tags":{"leisure":"*"},"name":"Leisure"},"leisure/adult_gaming_centre":{"icon":"poi-dice","fields":["operator","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"terms":["gambling","slot machine"],"tags":{"leisure":"adult_gaming_centre"},"name":"Adult Gaming Center"},"leisure/bird_hide":{"icon":"poi-binoculars","fields":["building_area"],"geometry":["point","area"],"tags":{"leisure":"bird_hide"},"terms":["machan","ornithology"],"name":"Bird Hide"},"leisure/bowling_alley":{"icon":"poi-bowling","fields":["operator","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"terms":[],"tags":{"leisure":"bowling_alley"},"name":"Bowling Alley"},"leisure/common":{"icon":"poi-foot","geometry":["point","area"],"terms":["open space"],"tags":{"leisure":"common"},"name":"Common"},"leisure/dance":{"icon":"music","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["ballroom","jive","swing","tango","waltz"],"tags":{"leisure":"dance"},"name":"Dance Hall"},"leisure/dog_park":{"icon":"dog-park","geometry":["point","area"],"terms":[],"tags":{"leisure":"dog_park"},"name":"Dog Park"},"leisure/firepit":{"icon":"fire-station","geometry":["point","area"],"tags":{"leisure":"firepit"},"terms":["fireplace","campfire"],"name":"Firepit"},"leisure/fitness_centre":{"icon":"pitch","fields":["sport","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_centre"},"terms":["health","gym","leisure","studio"],"name":"Gym / Fitness Center"},"leisure/fitness_centre/yoga":{"icon":"pitch","fields":["sport","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["studio"],"tags":{"leisure":"fitness_centre","sport":"yoga"},"reference":{"key":"sport","value":"yoga"},"name":"Yoga Studio"},"leisure/fitness_station":{"icon":"pitch","fields":["sport","address","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station"},"terms":["fitness","gym"],"name":"Outdoor Fitness Station"},"leisure/garden":{"icon":"garden","fields":["access_simple"],"geometry":["point","vertex","area"],"tags":{"leisure":"garden"},"name":"Garden"},"leisure/golf_course":{"icon":"golf","fields":["operator","address","opening_hours"],"geometry":["point","area"],"terms":["links"],"tags":{"leisure":"golf_course"},"name":"Golf Course"},"leisure/horse_riding":{"icon":"horse-riding","fields":["access_simple","operator","address","building"],"geometry":["point","area"],"terms":["equestrian","stable"],"tags":{"leisure":"horse_riding"},"name":"Horseback Riding Facility"},"leisure/ice_rink":{"icon":"pitch","fields":["seasonal","sport_ice","operator","address","building","opening_hours"],"geometry":["point","area"],"terms":["hockey","skating","curling"],"tags":{"leisure":"ice_rink"},"name":"Ice Rink"},"leisure/marina":{"icon":"harbor","fields":["operator","address","capacity","fee","sanitary_dump_station","power_supply","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","vertex","area"],"terms":["boat"],"tags":{"leisure":"marina"},"name":"Marina"},"leisure/miniature_golf":{"icon":"golf","fields":["operator","address","opening_hours"],"geometry":["point","area"],"terms":["crazy golf","mini golf","putt-putt"],"tags":{"leisure":"miniature_golf"},"name":"Miniature Golf"},"leisure/nature_reserve":{"icon":"park","geometry":["point","area"],"tags":{"leisure":"nature_reserve"},"terms":["protected","wildlife"],"name":"Nature Reserve"},"leisure/park":{"icon":"park","geometry":["point","area"],"terms":["esplanade","estate","forest","garden","grass","green","grounds","lawn","lot","meadow","parkland","place","playground","plaza","pleasure garden","recreation area","square","tract","village green","woodland"],"tags":{"leisure":"park"},"name":"Park"},"leisure/picnic_table":{"icon":"picnic-site","geometry":["point"],"tags":{"leisure":"picnic_table"},"terms":["bench"],"name":"Picnic Table"},"leisure/pitch":{"icon":"pitch","fields":["sport","surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch"},"terms":["field"],"name":"Sport Pitch"},"leisure/pitch/american_football":{"icon":"america-football","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"american_football"},"reference":{"key":"sport","value":"american_football"},"terms":[],"name":"American Football Field"},"leisure/pitch/baseball":{"icon":"baseball","fields":["lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"baseball"},"reference":{"key":"sport","value":"baseball"},"terms":[],"name":"Baseball Diamond"},"leisure/pitch/basketball":{"icon":"basketball","fields":["surface","hoops","lit","access_simple"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"basketball"},"reference":{"key":"sport","value":"basketball"},"terms":[],"name":"Basketball Court"},"leisure/pitch/beachvolleyball":{"icon":"basketball","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"beachvolleyball"},"addTags":{"leisure":"pitch","sport":"beachvolleyball","surface":"sand"},"removeTags":{"leisure":"pitch","sport":"beachvolleyball","surface":"sand"},"reference":{"key":"sport","value":"beachvolleyball"},"terms":["volleyball"],"name":"Beach Volleyball Court"},"leisure/pitch/bowls":{"icon":"pitch","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"bowls"},"reference":{"key":"sport","value":"bowls"},"terms":[],"name":"Bowling Green"},"leisure/pitch/cricket":{"icon":"cricket","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"cricket"},"reference":{"key":"sport","value":"cricket"},"terms":[],"name":"Cricket Field"},"leisure/pitch/equestrian":{"icon":"horse-riding","fields":["surface","lit","building"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"equestrian"},"reference":{"key":"sport","value":"equestrian"},"terms":["dressage","equestrian","horse","horseback","riding"],"name":"Riding Arena"},"leisure/pitch/rugby_league":{"icon":"america-football","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"rugby_league"},"reference":{"key":"sport","value":"rugby_league"},"terms":[],"name":"Rugby League Field"},"leisure/pitch/rugby_union":{"icon":"america-football","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"rugby_union"},"reference":{"key":"sport","value":"rugby_union"},"terms":[],"name":"Rugby Union Field"},"leisure/pitch/skateboard":{"icon":"pitch","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"skateboard"},"reference":{"key":"sport","value":"skateboard"},"terms":[],"name":"Skate Park"},"leisure/pitch/soccer":{"icon":"soccer","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"soccer"},"reference":{"key":"sport","value":"soccer"},"terms":[],"name":"Soccer Field"},"leisure/pitch/table_tennis":{"icon":"tennis","fields":["lit","access_simple"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"table_tennis"},"reference":{"key":"sport","value":"table_tennis"},"terms":["table tennis","ping pong"],"name":"Ping Pong Table"},"leisure/pitch/tennis":{"icon":"tennis","fields":["surface","lit","access_simple"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"tennis"},"reference":{"key":"sport","value":"tennis"},"terms":[],"name":"Tennis Court"},"leisure/pitch/volleyball":{"icon":"basketball","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"volleyball"},"reference":{"key":"sport","value":"volleyball"},"terms":[],"name":"Volleyball Court"},"leisure/playground":{"icon":"playground","geometry":["point","area"],"terms":["jungle gym","play area"],"tags":{"leisure":"playground"},"name":"Playground"},"leisure/resort":{"icon":"lodging","fields":["operator","address","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"resort"},"name":"Resort"},"leisure/running_track":{"icon":"pitch","fields":["surface","sport_racing_nonmotor","lit","width","lanes"],"geometry":["point","line","area"],"tags":{"leisure":"track","sport":"running"},"terms":["race*","running","sprint","track"],"name":"Racetrack (Running)"},"leisure/slipway":{"icon":"poi-beach","geometry":["point","line"],"terms":["boat launch","boat ramp"],"tags":{"leisure":"slipway"},"name":"Slipway"},"leisure/sports_centre":{"icon":"pitch","fields":["sport","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"sports_centre"},"terms":[],"name":"Sports Center / Complex"},"leisure/sports_centre/swimming":{"icon":"swimming","fields":["access_simple","operator","address","building"],"geometry":["point","area"],"terms":["dive","water"],"tags":{"leisure":"sports_centre","sport":"swimming"},"reference":{"key":"sport","value":"swimming"},"name":"Swimming Pool Facility"},"leisure/stadium":{"icon":"pitch","fields":["sport","address"],"geometry":["point","area"],"tags":{"leisure":"stadium"},"name":"Stadium"},"leisure/swimming_pool":{"icon":"swimming","fields":["access_simple","operator","address"],"geometry":["point","area"],"terms":["dive","water"],"tags":{"leisure":"swimming_pool"},"name":"Swimming Pool"},"leisure/track":{"icon":"highway-road","fields":["surface","sport_racing_nonmotor","lit","width","lanes"],"geometry":["point","line","area"],"tags":{"leisure":"track"},"terms":["cycle","dog","greyhound","horse","race*","track"],"name":"Racetrack (Non-Motorsport)"},"leisure/water_park":{"icon":"swimming","fields":["operator","address"],"geometry":["point","area"],"terms":["swim","pool","dive"],"tags":{"leisure":"water_park"},"name":"Water Park"},"line":{"name":"Line","tags":{},"geometry":["line"],"matchScore":0.1},"man_made":{"icon":"poi-storage-tank","fields":["man_made"],"geometry":["point","vertex","line","area"],"tags":{"man_made":"*"},"name":"Man Made"},"man_made/embankment":{"geometry":["line"],"tags":{"man_made":"embankment"},"name":"Embankment","searchable":false},"man_made/adit":{"icon":"triangle","geometry":["point","area"],"fields":["operator"],"terms":["entrance","underground","mine","cave"],"tags":{"man_made":"adit"},"name":"Adit"},"man_made/breakwater":{"geometry":["line","area"],"tags":{"man_made":"breakwater"},"name":"Breakwater"},"man_made/bridge":{"geometry":["area"],"tags":{"man_made":"bridge"},"name":"Bridge"},"man_made/chimney":{"icon":"poi-chimney","geometry":["point","area"],"tags":{"man_made":"chimney"},"name":"Chimney"},"man_made/cutline":{"geometry":["line"],"tags":{"man_made":"cutline"},"name":"Cut line"},"man_made/flagpole":{"icon":"embassy","geometry":["point"],"tags":{"man_made":"flagpole"},"name":"Flagpole"},"man_made/gasometer":{"icon":"poi-storage-tank","geometry":["point","area"],"terms":["gas holder"],"tags":{"man_made":"gasometer"},"name":"Gasometer"},"man_made/groyne":{"geometry":["line","area"],"tags":{"man_made":"groyne"},"name":"Groyne"},"man_made/lighthouse":{"icon":"lighthouse","fields":["building_area"],"geometry":["point","area"],"tags":{"man_made":"lighthouse"},"name":"Lighthouse"},"man_made/mast":{"icon":"poi-mast","fields":["tower/type","tower/construction","height","communication_multi"],"geometry":["point"],"terms":["antenna","broadcast tower","cell phone tower","cell tower","communication mast","communication tower","guyed tower","mobile phone tower","radio mast","radio tower","television tower","transmission mast","transmission tower","tv tower"],"tags":{"man_made":"mast"},"name":"Mast"},"man_made/observation":{"icon":"poi-tower","geometry":["point","area"],"terms":["lookout tower","fire tower"],"tags":{"man_made":"tower","tower:type":"observation"},"name":"Observation Tower"},"man_made/petroleum_well":{"icon":"poi-storage-tank","geometry":["point"],"terms":["drilling rig","oil derrick","oil drill","oil horse","oil rig","oil pump","petroleum well","pumpjack"],"tags":{"man_made":"petroleum_well"},"name":"Oil Well"},"man_made/pier":{"geometry":["line","area"],"terms":["dock"],"tags":{"man_made":"pier"},"name":"Pier"},"man_made/pipeline":{"icon":"pipeline-line","fields":["location","operator"],"geometry":["line"],"tags":{"man_made":"pipeline"},"name":"Pipeline"},"man_made/pumping_station":{"icon":"water","geometry":["point","area"],"tags":{"man_made":"pumping_station"},"name":"Pumping Station"},"man_made/silo":{"icon":"poi-silo","fields":["building_area","crop"],"geometry":["point","area"],"terms":["grain","corn","wheat"],"tags":{"man_made":"silo"},"name":"Silo"},"man_made/storage_tank":{"icon":"poi-storage-tank","fields":["building_area","content"],"geometry":["point","area"],"terms":["water","oil","gas","petrol"],"tags":{"man_made":"storage_tank"},"name":"Storage Tank"},"man_made/surveillance_camera":{"icon":"attraction","geometry":["point"],"fields":["surveillance","surveillance/type","camera/type","camera/mount","camera/direction","surveillance/zone","contact/webcam"],"terms":["anpr","alpr","camera","car plate recognition","cctv","guard","license plate recognition","monitoring","number plate recognition","security","video","webcam"],"tags":{"man_made":"surveillance","surveillance:type":"camera"},"name":"Surveillance Camera"},"man_made/surveillance":{"icon":"attraction","geometry":["point"],"fields":["surveillance","surveillance/type","surveillance/zone"],"terms":["anpr","alpr","camera","car plate recognition","cctv","guard","license plate recognition","monitoring","number plate recognition","security","video","webcam"],"tags":{"man_made":"surveillance"},"name":"Surveillance"},"man_made/survey_point":{"icon":"monument","fields":["ref"],"geometry":["point","vertex"],"tags":{"man_made":"survey_point"},"name":"Survey Point"},"man_made/tower":{"icon":"poi-tower","fields":["tower/type","tower/construction","height"],"geometry":["point","area"],"tags":{"man_made":"tower"},"name":"Tower"},"man_made/wastewater_plant":{"icon":"water","fields":["operator","address"],"geometry":["point","area"],"terms":["sewage*","water treatment plant","reclamation plant"],"tags":{"man_made":"wastewater_plant"},"name":"Wastewater Plant"},"man_made/water_tower":{"icon":"water","fields":["operator"],"geometry":["point","area"],"tags":{"man_made":"water_tower"},"name":"Water Tower"},"man_made/water_well":{"icon":"water","fields":["operator"],"geometry":["point","area"],"tags":{"man_made":"water_well"},"name":"Water Well"},"man_made/water_works":{"icon":"water","fields":["operator","address"],"geometry":["point","area"],"tags":{"man_made":"water_works"},"name":"Water Works"},"man_made/works":{"icon":"industry","fields":["operator","address","building_area","product"],"geometry":["point","area"],"terms":["assembly","build","brewery","car","plant","plastic","processing","manufacture","refinery"],"tags":{"man_made":"works"},"name":"Factory"},"natural":{"icon":"natural","fields":["natural"],"geometry":["point","vertex","area"],"tags":{"natural":"*"},"name":"Natural"},"natural/bare_rock":{"geometry":["area"],"tags":{"natural":"bare_rock"},"terms":["rock"],"name":"Bare Rock"},"natural/bay":{"icon":"poi-beach","geometry":["point","area"],"tags":{"natural":"bay"},"terms":[],"name":"Bay"},"natural/beach":{"icon":"poi-beach","fields":["surface"],"geometry":["point","area"],"tags":{"natural":"beach"},"terms":["shore"],"name":"Beach"},"natural/cave_entrance":{"icon":"triangle","geometry":["point","area"],"fields":["fee","access_simple"],"tags":{"natural":"cave_entrance"},"terms":["cavern","hollow","grotto","shelter","cavity"],"name":"Cave Entrance"},"natural/cliff":{"icon":"triangle","geometry":["point","vertex","line","area"],"tags":{"natural":"cliff"},"terms":["escarpment"],"name":"Cliff"},"natural/coastline":{"geometry":["line"],"tags":{"natural":"coastline"},"terms":["shore"],"name":"Coastline"},"natural/fell":{"geometry":["area"],"tags":{"natural":"fell"},"terms":[],"name":"Fell"},"natural/glacier":{"geometry":["area"],"tags":{"natural":"glacier"},"terms":[],"name":"Glacier"},"natural/grassland":{"geometry":["area"],"tags":{"natural":"grassland"},"terms":["prairie","savanna"],"name":"Grassland"},"natural/heath":{"geometry":["area"],"tags":{"natural":"heath"},"terms":[],"name":"Heath"},"natural/peak":{"icon":"mountain","fields":["elevation"],"geometry":["point","vertex"],"tags":{"natural":"peak"},"terms":["acme","aiguille","alp","climax","crest","crown","hill","mount","mountain","pinnacle","summit","tip","top"],"name":"Peak"},"natural/ridge":{"geometry":["line"],"tags":{"natural":"ridge"},"terms":["crest"],"name":"Ridge"},"natural/saddle":{"icon":"triangle-stroked","fields":["elevation"],"geometry":["point","vertex"],"tags":{"natural":"saddle"},"terms":["pass","mountain pass","top"],"name":"Saddle"},"natural/sand":{"geometry":["area"],"tags":{"natural":"sand"},"terms":["desert"],"name":"Sand"},"natural/scree":{"geometry":["area"],"tags":{"natural":"scree"},"terms":["loose rocks"],"name":"Scree"},"natural/scrub":{"geometry":["area"],"tags":{"natural":"scrub"},"terms":["bush","shrubs"],"name":"Scrub"},"natural/spring":{"icon":"water","geometry":["point","vertex"],"tags":{"natural":"spring"},"terms":[],"name":"Spring"},"natural/tree_row":{"icon":"park","fields":["leaf_type","leaf_cycle","denotation"],"geometry":["line"],"tags":{"natural":"tree_row"},"terms":[],"name":"Tree row"},"natural/tree":{"icon":"park","fields":["leaf_type_singular","leaf_cycle_singular","denotation"],"geometry":["point","vertex"],"tags":{"natural":"tree"},"terms":[],"name":"Tree"},"natural/volcano":{"icon":"volcano","fields":["elevation"],"geometry":["point","vertex"],"tags":{"natural":"volcano"},"terms":["mountain","crater"],"name":"Volcano"},"natural/water":{"icon":"water","fields":["water"],"geometry":["area"],"tags":{"natural":"water"},"name":"Water"},"natural/water/lake":{"icon":"water","geometry":["area"],"tags":{"natural":"water","water":"lake"},"reference":{"key":"natural","value":"water"},"terms":["lakelet","loch","mere"],"name":"Lake"},"natural/water/pond":{"icon":"water","geometry":["area"],"tags":{"natural":"water","water":"pond"},"reference":{"key":"natural","value":"water"},"terms":["lakelet","millpond","tarn","pool","mere"],"name":"Pond"},"natural/water/reservoir":{"icon":"water","geometry":["area"],"tags":{"natural":"water","water":"reservoir"},"reference":{"key":"natural","value":"water"},"name":"Reservoir"},"natural/wetland":{"icon":"wetland","fields":["wetland"],"geometry":["point","area"],"tags":{"natural":"wetland"},"terms":[],"name":"Wetland"},"natural/wood":{"icon":"park-alt1","fields":["leaf_type","leaf_cycle"],"geometry":["point","area"],"tags":{"natural":"wood"},"terms":["tree"],"name":"Wood"},"noexit/yes":{"icon":"barrier","geometry":["vertex"],"terms":["no exit","road end","dead end"],"tags":{"noexit":"yes"},"reference":{"key":"noexit","value":"*"},"name":"No Exit"},"office":{"icon":"commercial","fields":["office","address","building_area","opening_hours","smoking"],"geometry":["point","vertex","area"],"tags":{"office":"*"},"terms":[],"name":"Office"},"office/travel_agent":{"icon":"suitcase","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"travel_agent"},"reference":{"key":"shop","value":"travel_agency"},"terms":[],"name":"Travel Agency","searchable":false},"office/accountant":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"accountant"},"terms":[],"name":"Accountant"},"office/administrative":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"administrative"},"terms":[],"name":"Administrative Office"},"office/architect":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"architect"},"terms":[],"name":"Architect"},"office/company":{"icon":"commercial","fields":["address","building_area","opening_hours","smoking"],"geometry":["point","vertex","area"],"tags":{"office":"company"},"terms":[],"name":"Company Office"},"office/coworking":{"icon":"commercial","fields":["address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"terms":["coworking","office"],"tags":{"office":"coworking"},"reference":{"key":"amenity","value":"coworking_space"},"name":"Coworking Space"},"office/educational_institution":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"educational_institution"},"terms":[],"name":"Educational Institution"},"office/employment_agency":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"employment_agency"},"terms":["job"],"name":"Employment Agency"},"office/estate_agent":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"estate_agent"},"terms":[],"name":"Real Estate Office"},"office/financial":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"financial"},"terms":[],"name":"Financial Office"},"office/government":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"government"},"terms":[],"name":"Government Office"},"office/government/register_office":{"icon":"town-hall","fields":["address","building_area","opening_hours","operator"],"geometry":["point","area"],"terms":["clerk","marriage","death","birth","certificate"],"tags":{"office":"government","government":"register_office"},"reference":{"key":"government","value":"register_office"},"name":"Register Office"},"office/insurance":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"insurance"},"terms":[],"name":"Insurance Office"},"office/it":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"it"},"terms":[],"name":"IT Office"},"office/lawyer":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"lawyer"},"terms":[],"name":"Law Office"},"office/lawyer/notary":{"icon":"suitcase","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"lawyer","lawyer":"notary"},"reference":{"key":"office","value":"notary"},"terms":["clerk","signature","wills","deeds","estate"],"name":"Notary Office"},"office/newspaper":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"newspaper"},"terms":[],"name":"Newspaper"},"office/ngo":{"icon":"commercial","fields":["address","building_area","opening_hours","smoking"],"geometry":["point","vertex","area"],"tags":{"office":"ngo"},"terms":[],"name":"NGO Office"},"office/physician":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"physician"},"terms":[],"name":"Physician"},"office/political_party":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"political_party"},"terms":[],"name":"Political Party"},"office/research":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"research"},"terms":[],"name":"Research Office"},"office/telecommunication":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"telecommunication"},"terms":[],"name":"Telecom Office"},"office/therapist":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"therapist"},"terms":[],"name":"Therapist"},"piste":{"icon":"skiing","fields":["piste/type","piste/difficulty","piste/grooming","oneway","lit"],"geometry":["point","line","area"],"terms":["ski","sled","sleigh","snowboard","nordic","downhill","snowmobile"],"tags":{"piste:type":"*"},"name":"Piste/Ski Trail"},"place/farm":{"icon":"farm","geometry":["point","area"],"tags":{"place":"farm"},"name":"Farm","searchable":false},"place/city":{"icon":"city","fields":["population"],"geometry":["point","area"],"tags":{"place":"city"},"name":"City"},"place/hamlet":{"icon":"triangle-stroked","fields":["population"],"geometry":["point","area"],"tags":{"place":"hamlet"},"name":"Hamlet"},"place/island":{"icon":"mountain","geometry":["point","area"],"terms":["archipelago","atoll","bar","cay","isle","islet","key","reef"],"tags":{"place":"island"},"name":"Island"},"place/isolated_dwelling":{"icon":"home","geometry":["point","area"],"tags":{"place":"isolated_dwelling"},"name":"Isolated Dwelling"},"place/locality":{"icon":"triangle-stroked","geometry":["point","area"],"tags":{"place":"locality"},"name":"Locality"},"place/neighbourhood":{"icon":"triangle-stroked","fields":["population"],"geometry":["point","area"],"tags":{"place":"neighbourhood"},"terms":["neighbourhood"],"name":"Neighborhood"},"place/quarter":{"icon":"triangle-stroked","fields":["population"],"geometry":["point","area"],"tags":{"place":"quarter"},"terms":["boro","borough","quarter"],"name":"Sub-Borough / Quarter"},"place/square":{"icon":"poi-foot","geometry":["point","area"],"tags":{"place":"square"},"name":"Square"},"place/suburb":{"icon":"triangle-stroked","fields":["population"],"geometry":["point","area"],"tags":{"place":"suburb"},"terms":["boro","borough","quarter"],"name":"Borough / Suburb"},"place/town":{"icon":"town","fields":["population"],"geometry":["point","area"],"tags":{"place":"town"},"name":"Town"},"place/village":{"icon":"village","fields":["population"],"geometry":["point","area"],"tags":{"place":"village"},"name":"Village"},"point":{"name":"Point","tags":{},"geometry":["point"],"matchScore":0.1},"power/sub_station":{"fields":["substation","operator","building"],"geometry":["point","area"],"tags":{"power":"sub_station"},"reference":{"key":"power","value":"substation"},"name":"Substation","searchable":false},"power/generator":{"icon":"poi-power","fields":["operator","generator/source","generator/method","generator/type"],"geometry":["point","vertex","area"],"tags":{"power":"generator"},"name":"Power Generator"},"power/line":{"icon":"power-line","geometry":["line"],"tags":{"power":"line"},"name":"Power Line"},"power/minor_line":{"icon":"power-line","geometry":["line"],"tags":{"power":"minor_line"},"name":"Minor Power Line"},"power/plant":{"icon":"industry","fields":["operator"],"geometry":["area"],"tags":{"power":"plant"},"addTags":{"power":"plant","landuse":"industrial"},"removeTags":{"power":"plant","landuse":"industrial"},"terms":["coal","gas","generat*","hydro","nuclear","power","station"],"name":"Power Station Grounds"},"power/pole":{"geometry":["vertex"],"tags":{"power":"pole"},"name":"Power Pole"},"power/substation":{"icon":"poi-power","fields":["substation","operator","building"],"geometry":["point","area"],"tags":{"power":"substation"},"name":"Substation"},"power/tower":{"geometry":["vertex"],"tags":{"power":"tower"},"name":"High-Voltage Tower"},"power/transformer":{"icon":"poi-power","geometry":["point","vertex","area"],"tags":{"power":"transformer"},"name":"Transformer"},"public_transport/platform":{"icon":"bus","fields":["ref","network","operator","shelter"],"geometry":["point","vertex","line","area"],"tags":{"public_transport":"platform"},"name":"Platform"},"public_transport/stop_position":{"icon":"bus","fields":["ref","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position"},"name":"Stop Position"},"railway/abandoned":{"icon":"railway-abandoned","geometry":["line"],"tags":{"railway":"abandoned"},"fields":["structure","service_rail"],"terms":[],"name":"Abandoned Railway"},"railway/crossing":{"icon":"cross","geometry":["vertex"],"tags":{"railway":"crossing"},"terms":["crossing","pedestrian crossing","railroad crossing","level crossing","grade crossing","path through railroad","train crossing"],"name":"Railway Crossing (Path)"},"railway/disused":{"icon":"railway-disused","geometry":["line"],"tags":{"railway":"disused"},"fields":["structure","service_rail"],"terms":[],"name":"Disused Railway"},"railway/funicular":{"icon":"railway-rail","geometry":["line"],"terms":["venicular","cliff railway","cable car","cable railway","funicular railway"],"fields":["structure","gauge","service_rail"],"tags":{"railway":"funicular"},"name":"Funicular"},"railway/halt":{"icon":"rail","geometry":["point","vertex"],"tags":{"railway":"halt"},"name":"Railway Halt","terms":["break","interrupt","rest","wait","interruption"]},"railway/level_crossing":{"icon":"cross","geometry":["vertex"],"tags":{"railway":"level_crossing"},"terms":["crossing","railroad crossing","level crossing","grade crossing","road through railroad","train crossing"],"name":"Railway Crossing (Road)"},"railway/monorail":{"icon":"railway-monorail","geometry":["line"],"tags":{"railway":"monorail"},"fields":["structure","electrified","service_rail"],"terms":[],"name":"Monorail"},"railway/narrow_gauge":{"icon":"railway-rail","geometry":["line"],"tags":{"railway":"narrow_gauge"},"fields":["structure","gauge","electrified","service_rail"],"terms":["narrow gauge railway","narrow gauge railroad"],"name":"Narrow Gauge Rail"},"railway/platform":{"icon":"rail","geometry":["point","vertex","line","area"],"tags":{"railway":"platform"},"name":"Railway Platform"},"railway/rail":{"icon":"railway-rail","geometry":["line"],"tags":{"railway":"rail"},"fields":["structure","gauge","electrified","maxspeed","service_rail"],"terms":[],"name":"Rail"},"railway/station":{"icon":"rail","fields":["network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","vertex","area"],"tags":{"railway":"station"},"terms":["train station","station"],"name":"Railway Station"},"railway/subway_entrance":{"icon":"entrance","geometry":["point"],"tags":{"railway":"subway_entrance"},"terms":[],"name":"Subway Entrance"},"railway/subway":{"icon":"railway-subway","geometry":["line"],"tags":{"railway":"subway"},"fields":["structure","gauge","electrified","service_rail"],"terms":[],"name":"Subway"},"railway/tram_stop":{"icon":"rail-light","fields":["network","operator"],"geometry":["vertex"],"tags":{"railway":"tram_stop"},"terms":["light rail","streetcar","tram","trolley"],"name":"Tram Stop"},"railway/tram":{"icon":"railway-light-rail","geometry":["line"],"tags":{"railway":"tram"},"fields":["structure","gauge","electrified","service_rail"],"terms":["light rail","streetcar","tram","trolley"],"name":"Tram"},"relation":{"name":"Relation","icon":"relation","tags":{},"geometry":["relation"],"fields":["relation"]},"route/ferry":{"icon":"ferry-line","geometry":["line"],"tags":{"route":"ferry"},"name":"Ferry Route"},"shop":{"icon":"shop","fields":["shop","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"*"},"terms":[],"name":"Shop"},"shop/fishmonger":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"fishmonger"},"reference":{"key":"shop","value":"seafood"},"name":"Fishmonger","searchable":false},"shop/vacant":{"icon":"shop","fields":["address","building_area"],"geometry":["point","area"],"tags":{"shop":"vacant"},"name":"Vacant Shop","searchable":false},"shop/alcohol":{"icon":"alcohol-shop","fields":["operator","address","building_area","opening_hours","drive_through"],"geometry":["point","area"],"terms":["alcohol","beer","booze","wine"],"tags":{"shop":"alcohol"},"name":"Liquor Store"},"shop/anime":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"anime"},"terms":["manga","japan","cosplay","figurine","dakimakura"],"name":"Anime Shop"},"shop/antiques":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"antiques"},"name":"Antiques Shop"},"shop/art":{"icon":"shop","fields":["artwork_type","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["art*","exhibit*","gallery"],"tags":{"shop":"art"},"name":"Art Store"},"shop/baby_goods":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"baby_goods"},"name":"Baby Goods Store"},"shop/bag":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["handbag","purse"],"tags":{"shop":"bag"},"name":"Bag/Luggage Store"},"shop/bakery":{"icon":"bakery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"bakery"},"name":"Bakery"},"shop/bathroom_furnishing":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"bathroom_furnishing"},"name":"Bathroom Furnishing Store"},"shop/beauty":{"icon":"shop","fields":["operator","address","building_area","opening_hours","beauty"],"geometry":["point","area"],"terms":["spa","salon","tanning"],"tags":{"shop":"beauty"},"name":"Beauty Shop"},"shop/beauty/nails":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["manicure","pedicure"],"tags":{"shop":"beauty","beauty":"nails"},"reference":{"key":"shop","value":"beauty"},"name":"Nail Salon"},"shop/beauty/tanning":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"beauty","beauty":"tanning"},"reference":{"key":"leisure","value":"tanning_salon"},"name":"Tanning Salon"},"shop/bed":{"icon":"lodging","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"bed"},"name":"Bedding/Mattress Store"},"shop/beverages":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"beverages"},"name":"Beverage Store"},"shop/bicycle":{"icon":"bicycle","fields":["operator","address","building_area","opening_hours","service/bicycle"],"geometry":["point","area"],"terms":["bike","repair"],"tags":{"shop":"bicycle"},"name":"Bicycle Shop"},"shop/bookmaker":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["betting"],"tags":{"shop":"bookmaker"},"name":"Bookmaker"},"shop/books":{"icon":"shop","fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"shop":"books"},"name":"Book Store"},"shop/boutique":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"boutique"},"name":"Boutique"},"shop/butcher":{"icon":"slaughterhouse","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["meat"],"tags":{"shop":"butcher"},"name":"Butcher"},"shop/candles":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"candles"},"name":"Candle Shop"},"shop/car_parts":{"icon":"car","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["auto"],"tags":{"shop":"car_parts"},"name":"Car Parts Store"},"shop/car_repair":{"icon":"car","fields":["operator","address","building_area","opening_hours","service/vehicle"],"geometry":["point","area"],"terms":["auto","garage","service"],"tags":{"shop":"car_repair"},"name":"Car Repair Shop"},"shop/car":{"icon":"car","fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"geometry":["point","area"],"terms":["auto"],"tags":{"shop":"car"},"name":"Car Dealership"},"shop/carpet":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["rug"],"tags":{"shop":"carpet"},"name":"Carpet Store"},"shop/charity":{"icon":"shop","fields":["operator","address","building_area","opening_hours","second_hand"],"geometry":["point","area"],"terms":["thrift","op shop","nonprofit"],"tags":{"shop":"charity"},"name":"Charity Store"},"shop/cheese":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"cheese"},"name":"Cheese Store"},"shop/chemist":{"icon":"grocery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"chemist"},"terms":["med*","drug*","gift"],"name":"Drugstore"},"shop/chocolate":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"chocolate"},"name":"Chocolate Store"},"shop/clothes":{"icon":"clothing-store","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"clothes"},"name":"Clothing Store"},"shop/coffee":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"coffee"},"name":"Coffee Store"},"shop/computer":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"computer"},"name":"Computer Store"},"shop/confectionery":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"confectionery"},"name":"Candy Store"},"shop/convenience":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"convenience"},"name":"Convenience Store"},"shop/copyshop":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"copyshop"},"name":"Copy Store"},"shop/cosmetics":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"cosmetics"},"name":"Cosmetics Store"},"shop/craft":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"craft"},"terms":["art*","paint*","frame"],"name":"Arts and Crafts Store"},"shop/curtain":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["drape*","window"],"tags":{"shop":"curtain"},"name":"Curtain Store"},"shop/dairy":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["milk","egg","cheese"],"tags":{"shop":"dairy"},"name":"Dairy Store"},"shop/deli":{"icon":"restaurant","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["lunch","meat","sandwich"],"tags":{"shop":"deli"},"name":"Deli"},"shop/department_store":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"department_store"},"name":"Department Store"},"shop/doityourself":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"doityourself"},"name":"DIY Store"},"shop/dry_cleaning":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"dry_cleaning"},"name":"Dry Cleaner"},"shop/e-cigarette":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"e-cigarette"},"terms":["electronic","vapor"],"name":"E-Cigarette Shop"},"shop/electronics":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["appliance","audio","computer","tv"],"tags":{"shop":"electronics"},"name":"Electronics Store"},"shop/erotic":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["sex","porn"],"tags":{"shop":"erotic"},"name":"Erotic Store"},"shop/fabric":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["sew"],"tags":{"shop":"fabric"},"name":"Fabric Store"},"shop/farm":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["farm shop","farm stand"],"tags":{"shop":"farm"},"name":"Produce Stand"},"shop/fashion":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"fashion"},"name":"Fashion Store"},"shop/florist":{"icon":"florist","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["flower"],"tags":{"shop":"florist"},"name":"Florist"},"shop/frame":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"frame"},"terms":["art*","paint*","photo*","frame"],"name":"Framing Shop"},"shop/funeral_directors":{"icon":"cemetery","fields":["operator","address","building_area","religion","denomination"],"geometry":["point","area"],"terms":["undertaker","memorial home"],"tags":{"shop":"funeral_directors"},"name":"Funeral Home"},"shop/furnace":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["oven","stove"],"tags":{"shop":"furnace"},"name":"Furnace Store"},"shop/furniture":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["chair","sofa","table"],"tags":{"shop":"furniture"},"name":"Furniture Store"},"shop/garden_centre":{"icon":"garden-center","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["landscape","mulch","shrub","tree"],"tags":{"shop":"garden_centre"},"name":"Garden Center"},"shop/gas":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["cng","lpg","natural gas","propane","refill","tank"],"tags":{"shop":"gas"},"name":"Bottled Gas Shop"},"shop/gift":{"icon":"gift","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["souvenir"],"tags":{"shop":"gift"},"name":"Gift Shop"},"shop/greengrocer":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["fruit","vegetable"],"tags":{"shop":"greengrocer"},"name":"Greengrocer"},"shop/hairdresser":{"icon":"hairdresser","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["barber"],"tags":{"shop":"hairdresser"},"name":"Hairdresser"},"shop/hardware":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"hardware"},"name":"Hardware Store"},"shop/hearing_aids":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"hearing_aids"},"name":"Hearing Aids Store"},"shop/herbalist":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"herbalist"},"name":"Herbalist"},"shop/hifi":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["stereo","video"],"tags":{"shop":"hifi"},"name":"Hifi Store"},"shop/houseware":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["home","household"],"tags":{"shop":"houseware"},"name":"Houseware Store"},"shop/interior_decoration":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"interior_decoration"},"name":"Interior Decoration Store"},"shop/jewelry":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["diamond","gem","ring"],"tags":{"shop":"jewelry"},"name":"Jeweler"},"shop/kiosk":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"kiosk"},"name":"News Kiosk"},"shop/kitchen":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"kitchen"},"name":"Kitchen Design Store"},"shop/laundry":{"icon":"laundry","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"laundry"},"name":"Laundry"},"shop/leather":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"leather"},"name":"Leather Store"},"shop/locksmith":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["key","lockpick"],"tags":{"shop":"locksmith"},"name":"Locksmith"},"shop/lottery":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"lottery"},"name":"Lottery Shop"},"shop/mall":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["shopping"],"tags":{"shop":"mall"},"name":"Mall"},"shop/massage":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"massage"},"name":"Massage Shop"},"shop/medical_supply":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"medical_supply"},"name":"Medical Supply Store"},"shop/mobile_phone":{"icon":"mobile-phone","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"mobile_phone"},"name":"Mobile Phone Store"},"shop/money_lender":{"icon":"bank","fields":["operator","address","building_area","opening_hours","currency_multi"],"geometry":["point","area"],"tags":{"shop":"money_lender"},"name":"Money Lender"},"shop/motorcycle":{"icon":"scooter","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["bike"],"tags":{"shop":"motorcycle"},"name":"Motorcycle Dealership"},"shop/music":{"icon":"music","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["CD","vinyl"],"tags":{"shop":"music"},"name":"Music Store"},"shop/musical_instrument":{"icon":"music","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["guitar"],"tags":{"shop":"musical_instrument"},"name":"Musical Instrument Store"},"shop/newsagent":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"newsagent"},"name":"Newspaper/Magazine Shop"},"shop/nutrition_supplements":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"nutrition_supplements"},"name":"Nutrition Supplements Store"},"shop/optician":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["eye","glasses"],"tags":{"shop":"optician"},"name":"Optician"},"shop/organic":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"supermarket","organic":"only"},"name":"Organic Goods Store"},"shop/outdoor":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["camping","climbing","hiking"],"tags":{"shop":"outdoor"},"name":"Outdoors Store"},"shop/paint":{"icon":"water","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"paint"},"name":"Paint Store"},"shop/pastry":{"icon":"bakery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"pastry"},"terms":["patisserie","cake shop","cakery"],"name":"Pastry Shop"},"shop/pawnbroker":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"pawnbroker"},"name":"Pawn Shop"},"shop/perfumery":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"perfumery"},"name":"Perfume Store"},"shop/pet":{"icon":"dog-park","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["animal","cat","dog","fish","kitten","puppy","reptile"],"tags":{"shop":"pet"},"name":"Pet Store"},"shop/photo":{"icon":"attraction","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["camera","film"],"tags":{"shop":"photo"},"name":"Photography Store"},"shop/pyrotechnics":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"pyrotechnics"},"name":"Fireworks Store"},"shop/radiotechnics":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"radiotechnics"},"name":"Radio/Electronic Component Store"},"shop/religion":{"icon":"shop","fields":["operator","address","building_area","opening_hours","religion","denomination"],"geometry":["point","area"],"tags":{"shop":"religion"},"name":"Religious Store"},"shop/scuba_diving":{"icon":"swimming","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"scuba_diving"},"name":"Scuba Diving Shop"},"shop/seafood":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["fishmonger"],"tags":{"shop":"seafood"},"name":"Seafood Shop"},"shop/second_hand":{"icon":"shop","fields":["operator","address","building_area","opening_hours","second_hand"],"geometry":["point","area"],"terms":["secondhand","second hand","resale","thrift","used"],"tags":{"shop":"second_hand"},"name":"Consignment/Thrift Store"},"shop/shoes":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"shoes"},"name":"Shoe Store"},"shop/sports":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"sports"},"name":"Sporting Goods Store"},"shop/stationery":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["card","paper"],"tags":{"shop":"stationery"},"name":"Stationery Store"},"shop/storage_rental":{"icon":"shop","fields":["operator","address","building","opening_hours"],"geometry":["point","area"],"tags":{"shop":"storage_rental"},"name":"Storage Rental"},"shop/supermarket":{"icon":"grocery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["grocery","store","shop"],"tags":{"shop":"supermarket"},"name":"Supermarket"},"shop/tailor":{"icon":"clothing-store","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["clothes","suit"],"tags":{"shop":"tailor"},"name":"Tailor"},"shop/tattoo":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"tattoo"},"name":"Tattoo Parlor"},"shop/tea":{"icon":"teahouse","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"tea"},"name":"Tea Store"},"shop/ticket":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"ticket"},"name":"Ticket Seller"},"shop/tobacco":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"tobacco"},"name":"Tobacco Shop"},"shop/toys":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"toys"},"name":"Toy Store"},"shop/travel_agency":{"icon":"suitcase","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"travel_agency"},"name":"Travel Agency"},"shop/tyres":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"tyres"},"name":"Tire Store"},"shop/vacuum_cleaner":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"vacuum_cleaner"},"name":"Vacuum Cleaner Store"},"shop/variety_store":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"variety_store"},"name":"Variety Store"},"shop/video_games":{"icon":"gaming","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"video_games"},"name":"Video Game Store"},"shop/video":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["DVD"],"tags":{"shop":"video"},"name":"Video Store"},"shop/watches":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"watches"},"name":"Watches Shop"},"shop/water_sports":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"water_sports"},"name":"Watersport/Swim Shop"},"shop/weapons":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["ammo","gun","knife","knives"],"tags":{"shop":"weapons"},"name":"Weapon Shop"},"shop/window_blind":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"window_blind"},"name":"Window Blind Store"},"shop/wine":{"icon":"alcohol-shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"wine"},"name":"Wine Shop"},"tourism":{"icon":"attraction","fields":["tourism"],"geometry":["point","vertex","area"],"tags":{"tourism":"*"},"name":"Tourism"},"tourism/alpine_hut":{"icon":"lodging","fields":["operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"alpine_hut"},"name":"Alpine Hut"},"tourism/apartment":{"icon":"lodging","fields":["operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"apartment"},"name":"Guest Apartment / Condo"},"tourism/aquarium":{"icon":"aquarium","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["fish","sea","water"],"tags":{"tourism":"aquarium"},"name":"Aquarium"},"tourism/artwork":{"icon":"art-gallery","fields":["artwork_type","artist"],"geometry":["point","vertex","area"],"tags":{"tourism":"artwork"},"terms":["mural","sculpture","statue"],"name":"Artwork"},"tourism/attraction":{"icon":"monument","fields":["operator","address"],"geometry":["point","vertex","area"],"tags":{"tourism":"attraction"},"name":"Tourist Attraction"},"tourism/camp_site":{"icon":"campsite","fields":["operator","address","capacity","fee","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","vertex","area"],"terms":["tent","rv"],"tags":{"tourism":"camp_site"},"name":"Campground"},"tourism/caravan_site":{"icon":"bus","fields":["operator","address","capacity","fee","sanitary_dump_station","power_supply","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","vertex","area"],"terms":["Motor Home","Camper"],"tags":{"tourism":"caravan_site"},"name":"RV Park"},"tourism/chalet":{"icon":"lodging","fields":["operator","address","building_area","smoking","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"chalet"},"name":"Chalet"},"tourism/gallery":{"icon":"art-gallery","fields":["artwork_type","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["art*","exhibit*","paint*","photo*","sculpt*"],"tags":{"tourism":"gallery"},"name":"Art Gallery"},"tourism/guest_house":{"icon":"lodging","fields":["operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"guest_house"},"terms":["B&B","Bed and Breakfast"],"name":"Guest House"},"tourism/hostel":{"icon":"lodging","fields":["operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"hostel"},"name":"Hostel"},"tourism/hotel":{"icon":"lodging","fields":["operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"hotel"},"name":"Hotel"},"tourism/information":{"icon":"information","fields":["information","operator","address","building_area"],"geometry":["point","vertex","area"],"tags":{"tourism":"information"},"name":"Information"},"tourism/information/board":{"icon":"information","fields":["operator","board_type"],"geometry":["point","vertex"],"tags":{"tourism":"information","information":"board"},"reference":{"key":"information","value":"board"},"name":"Information Board"},"tourism/information/guidepost":{"icon":"information","fields":["operator","ref"],"geometry":["point","vertex"],"tags":{"tourism":"information","information":"guidepost"},"reference":{"key":"information","value":"guidepost"},"name":"Guidepost"},"tourism/information/map":{"icon":"information","fields":["operator","map_type","map_size"],"geometry":["point","vertex"],"tags":{"tourism":"information","information":"map"},"reference":{"key":"information","value":"map"},"name":"Map"},"tourism/information/office":{"icon":"information","fields":["operator","address","building_area"],"geometry":["point","vertex","area"],"tags":{"tourism":"information","information":"office"},"reference":{"key":"information","value":"office"},"name":"Tourist Information Office"},"tourism/motel":{"icon":"lodging","fields":["operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"motel"},"name":"Motel"},"tourism/museum":{"icon":"museum","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["art*","exhibit*","gallery","foundation","hall","institution","paint*","photo*","sculpt*"],"tags":{"tourism":"museum"},"name":"Museum"},"tourism/picnic_site":{"icon":"picnic-site","fields":["operator","address","smoking"],"geometry":["point","vertex","area"],"terms":["camp"],"tags":{"tourism":"picnic_site"},"name":"Picnic Site"},"tourism/theme_park":{"icon":"amusement-park","fields":["operator","address","opening_hours"],"geometry":["point","area"],"tags":{"tourism":"theme_park"},"name":"Theme Park"},"tourism/viewpoint":{"icon":"poi-binoculars","geometry":["point","vertex"],"tags":{"tourism":"viewpoint"},"name":"Viewpoint"},"tourism/zoo":{"icon":"zoo","fields":["operator","address","opening_hours"],"geometry":["point","area"],"terms":["animal"],"tags":{"tourism":"zoo"},"name":"Zoo"},"traffic_calming":{"icon":"poi-warning","fields":["traffic_calming","parallel_direction"],"geometry":["vertex","line"],"tags":{"traffic_calming":"*"},"terms":["bump","hump","slow","speed"],"name":"Traffic Calming"},"traffic_calming/bump":{"icon":"poi-warning","fields":["surface","parallel_direction"],"geometry":["vertex","line"],"terms":["hump","speed","slow"],"tags":{"traffic_calming":"bump"},"name":"Speed Bump"},"traffic_calming/chicane":{"icon":"poi-warning","fields":["parallel_direction"],"geometry":["vertex","line"],"terms":["driveway link","speed","slow"],"tags":{"traffic_calming":"chicane"},"name":"Traffic Chicane"},"traffic_calming/choker":{"icon":"poi-warning","fields":["parallel_direction"],"geometry":["vertex","line"],"terms":["speed","slow"],"tags":{"traffic_calming":"choker"},"name":"Traffic Choker"},"traffic_calming/cushion":{"icon":"poi-warning","fields":["surface","parallel_direction"],"geometry":["vertex","line"],"terms":["bump","hump","speed","slow"],"tags":{"traffic_calming":"cushion"},"name":"Speed Cushion"},"traffic_calming/dip":{"icon":"poi-warning","fields":["surface","parallel_direction"],"geometry":["vertex","line"],"terms":["speed","slow"],"tags":{"traffic_calming":"dip"},"name":"Dip"},"traffic_calming/hump":{"icon":"poi-warning","fields":["surface","parallel_direction"],"geometry":["vertex","line"],"terms":["bump","speed","slow"],"tags":{"traffic_calming":"hump"},"name":"Speed Hump"},"traffic_calming/island":{"icon":"poi-warning","geometry":["vertex"],"terms":["circle","roundabout","slow"],"tags":{"traffic_calming":"island"},"name":"Traffic Island"},"traffic_calming/rumble_strip":{"icon":"poi-warning","fields":["parallel_direction"],"geometry":["vertex","line"],"terms":["audible lines","sleeper lines","growlers"],"tags":{"traffic_calming":"rumble_strip"},"name":"Rumble Strip"},"traffic_calming/table":{"icon":"poi-warning","fields":["surface"],"geometry":["vertex","line"],"terms":["flat top","hump","speed","slow"],"tags":{"highway":"crossing","traffic_calming":"table"},"name":"Raised Pedestrian Crossing"},"type/multipolygon":{"geometry":["area","relation"],"tags":{"type":"multipolygon"},"removeTags":{},"name":"Multipolygon","icon":"multipolygon","searchable":false,"matchScore":0.1},"type/boundary":{"geometry":["relation"],"tags":{"type":"boundary"},"name":"Boundary","icon":"boundary","fields":["boundary"]},"type/boundary/administrative":{"icon":"boundary","fields":["admin_level"],"geometry":["relation"],"tags":{"type":"boundary","boundary":"administrative"},"reference":{"key":"boundary","value":"administrative"},"name":"Administrative Boundary"},"type/restriction":{"geometry":["relation"],"tags":{"type":"restriction"},"name":"Restriction","icon":"restriction","fields":["restriction","except"]},"type/restriction/no_left_turn":{"name":"No Left Turn","geometry":["relation"],"tags":{"type":"restriction","restriction":"no_left_turn"},"fields":["except"],"icon":"restriction-no-left-turn"},"type/restriction/no_right_turn":{"name":"No Right Turn","geometry":["relation"],"tags":{"type":"restriction","restriction":"no_right_turn"},"fields":["except"],"icon":"restriction-no-right-turn"},"type/restriction/no_straight_on":{"name":"No Straight On","geometry":["relation"],"tags":{"type":"restriction","restriction":"no_straight_on"},"fields":["except"],"icon":"restriction-no-straight-on"},"type/restriction/no_u_turn":{"name":"No U-turn","geometry":["relation"],"tags":{"type":"restriction","restriction":"no_u_turn"},"fields":["except"],"icon":"restriction-no-u-turn"},"type/restriction/only_left_turn":{"name":"Left Turn Only","geometry":["relation"],"tags":{"type":"restriction","restriction":"only_left_turn"},"fields":["except"],"icon":"restriction-only-left-turn"},"type/restriction/only_right_turn":{"name":"Right Turn Only","geometry":["relation"],"tags":{"type":"restriction","restriction":"only_right_turn"},"fields":["except"],"icon":"restriction-only-right-turn"},"type/restriction/only_straight_on":{"name":"No Turns","geometry":["relation"],"tags":{"type":"restriction","restriction":"only_straight_on"},"fields":["except"],"icon":"restriction-only-straight-on"},"type/route_master":{"geometry":["relation"],"tags":{"type":"route_master"},"name":"Route Master","icon":"route-master","fields":["route_master","ref","operator","network"]},"type/route":{"geometry":["relation"],"tags":{"type":"route"},"name":"Route","icon":"route","fields":["route","ref","operator","network"]},"type/route/bicycle":{"geometry":["relation"],"tags":{"type":"route","route":"bicycle"},"name":"Cycle Route","icon":"route-bicycle","fields":["ref","network_bicycle","cycle_network"]},"type/route/bus":{"geometry":["relation"],"tags":{"type":"route","route":"bus"},"name":"Bus Route","icon":"route-bus","fields":["ref","operator","network"]},"type/route/detour":{"geometry":["relation"],"tags":{"type":"route","route":"detour"},"name":"Detour Route","icon":"route-detour","fields":["ref"]},"type/route/ferry":{"geometry":["relation"],"tags":{"type":"route","route":"ferry"},"name":"Ferry Route","icon":"route-ferry","fields":["ref","operator","network"]},"type/route/foot":{"geometry":["relation"],"tags":{"type":"route","route":"foot"},"name":"Foot Route","icon":"route-foot","fields":["ref","operator","network_foot"]},"type/route/hiking":{"geometry":["relation"],"tags":{"type":"route","route":"hiking"},"name":"Hiking Route","icon":"route-foot","fields":["ref","operator","network_foot"]},"type/route/horse":{"geometry":["relation"],"tags":{"type":"route","route":"horse"},"name":"Riding Route","icon":"route-horse","fields":["ref","operator","network_horse"]},"type/route/pipeline":{"geometry":["relation"],"tags":{"type":"route","route":"pipeline"},"name":"Pipeline Route","icon":"route-pipeline","fields":["ref","operator"]},"type/route/power":{"geometry":["relation"],"tags":{"type":"route","route":"power"},"name":"Power Route","icon":"route-power","fields":["ref","operator"]},"type/route/road":{"geometry":["relation"],"tags":{"type":"route","route":"road"},"name":"Road Route","icon":"route-road","fields":["ref","network_road"]},"type/route/train":{"geometry":["relation"],"tags":{"type":"route","route":"train"},"name":"Train Route","icon":"route-train","fields":["ref","operator","network"]},"type/route/tram":{"geometry":["relation"],"tags":{"type":"route","route":"tram"},"name":"Tram Route","icon":"route-tram","fields":["ref","operator","network"]},"type/site":{"geometry":["relation"],"tags":{"type":"site"},"name":"Site","icon":"relation","fields":["site"]},"vertex":{"name":"Other","tags":{},"geometry":["vertex"],"matchScore":0.1},"waterway/boatyard":{"icon":"harbor","fields":["operator"],"geometry":["area","vertex","point"],"tags":{"waterway":"boatyard"},"name":"Boatyard"},"waterway/canal":{"icon":"waterway-canal","fields":["width"],"geometry":["line"],"tags":{"waterway":"canal"},"name":"Canal"},"waterway/dam":{"icon":"dam","geometry":["point","vertex","line","area"],"tags":{"waterway":"dam"},"name":"Dam"},"waterway/ditch":{"icon":"waterway-ditch","fields":["tunnel"],"geometry":["line"],"tags":{"waterway":"ditch"},"name":"Ditch"},"waterway/dock":{"icon":"harbor","fields":["dock","operator"],"geometry":["area","vertex","point"],"terms":["boat","ship","vessel","marine"],"tags":{"waterway":"dock"},"name":"Wet Dock / Dry Dock"},"waterway/drain":{"icon":"waterway-stream","fields":["tunnel"],"geometry":["line"],"tags":{"waterway":"drain"},"name":"Drain"},"waterway/fuel":{"icon":"fuel","fields":["operator","address","opening_hours","fuel_multi"],"geometry":["point","area"],"terms":["petrol","gas","diesel","boat"],"tags":{"waterway":"fuel"},"name":"Marine Fuel Station"},"waterway/river":{"icon":"waterway-river","fields":["tunnel","width"],"geometry":["line"],"terms":["beck","branch","brook","course","creek","estuary","rill","rivulet","run","runnel","stream","tributary","watercourse"],"tags":{"waterway":"river"},"name":"River"},"waterway/riverbank":{"icon":"water","geometry":["area"],"tags":{"waterway":"riverbank"},"name":"Riverbank"},"waterway/sanitary_dump_station":{"icon":"poi-storage-tank","fields":["operator","access_toilets","fee","water_point"],"geometry":["point","vertex","area"],"terms":["Boat","Watercraft","Sanitary","Dump Station","Pumpout","Pump out","Elsan","CDP","CTDP","Chemical Toilet"],"tags":{"waterway":"sanitary_dump_station"},"name":"Marine Toilet Disposal"},"waterway/stream":{"icon":"waterway-stream","fields":["tunnel","width"],"geometry":["line"],"terms":["beck","branch","brook","burn","course","creek","current","drift","flood","flow","freshet","race","rill","rindle","rivulet","run","runnel","rush","spate","spritz","surge","tide","torrent","tributary","watercourse"],"tags":{"waterway":"stream"},"name":"Stream"},"waterway/water_point":{"icon":"drinking-water","geometry":["area","vertex","point"],"tags":{"waterway":"water_point"},"name":"Marine Drinking Water"},"waterway/waterfall":{"icon":"water","fields":["height","width"],"geometry":["vertex"],"terms":["fall"],"tags":{"waterway":"waterfall"},"name":"Waterfall"},"waterway/weir":{"icon":"dam","geometry":["vertex","line"],"tags":{"waterway":"weir"},"name":"Weir"},"amenity/fuel/76":{"tags":{"name":"76","amenity":"fuel"},"name":"76","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Neste":{"tags":{"name":"Neste","amenity":"fuel"},"name":"Neste","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/BP":{"tags":{"name":"BP","amenity":"fuel"},"name":"BP","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Shell":{"tags":{"name":"Shell","amenity":"fuel"},"name":"Shell","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Agip":{"tags":{"name":"Agip","amenity":"fuel"},"name":"Agip","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Migrol":{"tags":{"name":"Migrol","amenity":"fuel"},"name":"Migrol","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Avia":{"tags":{"name":"Avia","amenity":"fuel"},"name":"Avia","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Texaco":{"tags":{"name":"Texaco","amenity":"fuel"},"name":"Texaco","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Total":{"tags":{"name":"Total","amenity":"fuel"},"name":"Total","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Statoil":{"tags":{"name":"Statoil","amenity":"fuel"},"name":"Statoil","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Esso":{"tags":{"name":"Esso","amenity":"fuel"},"name":"Esso","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Jet":{"tags":{"name":"Jet","amenity":"fuel"},"name":"Jet","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Avanti":{"tags":{"name":"Avanti","amenity":"fuel"},"name":"Avanti","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/OMV":{"tags":{"name":"OMV","amenity":"fuel"},"name":"OMV","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Aral":{"tags":{"name":"Aral","amenity":"fuel"},"name":"Aral","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/JET":{"tags":{"name":"JET","amenity":"fuel"},"name":"JET","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/United":{"tags":{"name":"United","amenity":"fuel"},"name":"United","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Mobil":{"tags":{"name":"Mobil","amenity":"fuel"},"name":"Mobil","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Caltex":{"tags":{"name":"Caltex","amenity":"fuel"},"name":"Caltex","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Sunoco":{"tags":{"name":"Sunoco","amenity":"fuel"},"name":"Sunoco","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Q8":{"tags":{"name":"Q8","amenity":"fuel"},"name":"Q8","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ARAL":{"tags":{"name":"ARAL","amenity":"fuel"},"name":"ARAL","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/CEPSA":{"tags":{"name":"CEPSA","amenity":"fuel"},"name":"CEPSA","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/BFT":{"tags":{"name":"BFT","amenity":"fuel"},"name":"BFT","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Petron":{"tags":{"name":"Petron","amenity":"fuel"},"name":"Petron","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Total Access":{"tags":{"name":"Total Access","amenity":"fuel"},"name":"Total Access","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Elf":{"tags":{"name":"Elf","amenity":"fuel"},"name":"Elf","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Station Service E. Leclerc":{"tags":{"name":"Station Service E. Leclerc","amenity":"fuel"},"name":"Station Service E. Leclerc","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Shell Express":{"tags":{"name":"Shell Express","amenity":"fuel"},"name":"Shell Express","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Hess":{"tags":{"name":"Hess","amenity":"fuel"},"name":"Hess","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Flying V":{"tags":{"name":"Flying V","amenity":"fuel"},"name":"Flying V","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/bft":{"tags":{"name":"bft","amenity":"fuel"},"name":"bft","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Gulf":{"tags":{"name":"Gulf","amenity":"fuel"},"name":"Gulf","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/PTT":{"tags":{"name":"PTT","amenity":"fuel"},"name":"PTT","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/St1":{"tags":{"name":"St1","amenity":"fuel"},"name":"St1","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Teboil":{"tags":{"name":"Teboil","amenity":"fuel"},"name":"Teboil","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/HEM":{"tags":{"name":"HEM","amenity":"fuel"},"name":"HEM","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/GALP":{"tags":{"name":"GALP","amenity":"fuel"},"name":"GALP","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/OK":{"tags":{"name":"OK","amenity":"fuel"},"name":"OK","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ÖMV":{"tags":{"name":"ÖMV","amenity":"fuel"},"name":"ÖMV","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Tinq":{"tags":{"name":"Tinq","amenity":"fuel"},"name":"Tinq","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/OKQ8":{"tags":{"name":"OKQ8","amenity":"fuel"},"name":"OKQ8","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Repsol":{"tags":{"name":"Repsol","amenity":"fuel"},"name":"Repsol","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Westfalen":{"tags":{"name":"Westfalen","amenity":"fuel"},"name":"Westfalen","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Esso Express":{"tags":{"name":"Esso Express","amenity":"fuel"},"name":"Esso Express","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Tamoil":{"tags":{"name":"Tamoil","amenity":"fuel"},"name":"Tamoil","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Engen":{"tags":{"name":"Engen","amenity":"fuel"},"name":"Engen","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Sasol":{"tags":{"name":"Sasol","amenity":"fuel"},"name":"Sasol","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Topaz":{"tags":{"name":"Topaz","amenity":"fuel"},"name":"Topaz","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/LPG":{"tags":{"name":"LPG","amenity":"fuel"},"name":"LPG","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Orlen":{"tags":{"name":"Orlen","amenity":"fuel"},"name":"Orlen","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Oilibya":{"tags":{"name":"Oilibya","amenity":"fuel"},"name":"Oilibya","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Tango":{"tags":{"name":"Tango","amenity":"fuel"},"name":"Tango","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Star":{"tags":{"name":"Star","amenity":"fuel"},"name":"Star","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Петрол":{"tags":{"name":"Петрол","amenity":"fuel"},"name":"Петрол","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Cepsa":{"tags":{"name":"Cepsa","amenity":"fuel"},"name":"Cepsa","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/OIL!":{"tags":{"name":"OIL!","amenity":"fuel"},"name":"OIL!","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Ultramar":{"tags":{"name":"Ultramar","amenity":"fuel"},"name":"Ultramar","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Irving":{"tags":{"name":"Irving","amenity":"fuel"},"name":"Irving","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Lukoil":{"tags":{"name":"Lukoil","amenity":"fuel"},"name":"Lukoil","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Petro-Canada":{"tags":{"name":"Petro-Canada","amenity":"fuel"},"name":"Petro-Canada","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Agrola":{"tags":{"name":"Agrola","amenity":"fuel"},"name":"Agrola","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Husky":{"tags":{"name":"Husky","amenity":"fuel"},"name":"Husky","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Slovnaft":{"tags":{"name":"Slovnaft","amenity":"fuel"},"name":"Slovnaft","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Sheetz":{"tags":{"name":"Sheetz","amenity":"fuel"},"name":"Sheetz","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Mol":{"tags":{"name":"Mol","amenity":"fuel"},"name":"Mol","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Petronas":{"tags":{"name":"Petronas","amenity":"fuel"},"name":"Petronas","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Газпромнефть":{"tags":{"name":"Газпромнефть","amenity":"fuel"},"name":"Газпромнефть","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Лукойл":{"tags":{"name":"Лукойл","amenity":"fuel"},"name":"Лукойл","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Elan":{"tags":{"name":"Elan","amenity":"fuel"},"name":"Elan","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Роснефть":{"tags":{"name":"Роснефть","amenity":"fuel"},"name":"Роснефть","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Turmöl":{"tags":{"name":"Turmöl","amenity":"fuel"},"name":"Turmöl","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Neste A24":{"tags":{"name":"Neste A24","amenity":"fuel"},"name":"Neste A24","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Marathon":{"tags":{"name":"Marathon","amenity":"fuel"},"name":"Marathon","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Valero":{"tags":{"name":"Valero","amenity":"fuel"},"name":"Valero","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Eni":{"tags":{"name":"Eni","amenity":"fuel"},"name":"Eni","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Chevron":{"tags":{"name":"Chevron","amenity":"fuel"},"name":"Chevron","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ТНК":{"tags":{"name":"ТНК","amenity":"fuel"},"name":"ТНК","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/REPSOL":{"tags":{"name":"REPSOL","amenity":"fuel"},"name":"REPSOL","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/MOL":{"tags":{"name":"MOL","amenity":"fuel"},"name":"MOL","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Bliska":{"tags":{"name":"Bliska","amenity":"fuel"},"name":"Bliska","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Api":{"tags":{"name":"Api","amenity":"fuel"},"name":"Api","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Arco":{"tags":{"name":"Arco","amenity":"fuel"},"name":"Arco","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Pemex":{"tags":{"name":"Pemex","amenity":"fuel"},"name":"Pemex","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Exxon":{"tags":{"name":"Exxon","amenity":"fuel"},"name":"Exxon","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Coles Express":{"tags":{"name":"Coles Express","amenity":"fuel"},"name":"Coles Express","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Petrom":{"tags":{"name":"Petrom","amenity":"fuel"},"name":"Petrom","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/PETRONOR":{"tags":{"name":"PETRONOR","amenity":"fuel"},"name":"PETRONOR","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Rompetrol":{"tags":{"name":"Rompetrol","amenity":"fuel"},"name":"Rompetrol","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Lotos":{"tags":{"name":"Lotos","amenity":"fuel"},"name":"Lotos","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ОМВ":{"tags":{"name":"ОМВ","amenity":"fuel"},"name":"ОМВ","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/BR":{"tags":{"name":"BR","amenity":"fuel"},"name":"BR","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Copec":{"tags":{"name":"Copec","amenity":"fuel"},"name":"Copec","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Petrobras":{"tags":{"name":"Petrobras","amenity":"fuel"},"name":"Petrobras","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Liberty":{"tags":{"name":"Liberty","amenity":"fuel"},"name":"Liberty","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/IP":{"tags":{"name":"IP","amenity":"fuel"},"name":"IP","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Erg":{"tags":{"name":"Erg","amenity":"fuel"},"name":"Erg","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Eneos":{"tags":{"name":"Eneos","amenity":"fuel"},"name":"Eneos","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Citgo":{"tags":{"name":"Citgo","amenity":"fuel"},"name":"Citgo","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Metano":{"tags":{"name":"Metano","amenity":"fuel"},"name":"Metano","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Сургутнефтегаз":{"tags":{"name":"Сургутнефтегаз","amenity":"fuel"},"name":"Сургутнефтегаз","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/EKO":{"tags":{"name":"EKO","amenity":"fuel"},"name":"EKO","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Eko":{"tags":{"name":"Eko","amenity":"fuel"},"name":"Eko","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Indipend.":{"tags":{"name":"Indipend.","amenity":"fuel"},"name":"Indipend.","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/IES":{"tags":{"name":"IES","amenity":"fuel"},"name":"IES","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/TotalErg":{"tags":{"name":"TotalErg","amenity":"fuel"},"name":"TotalErg","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Cenex":{"tags":{"name":"Cenex","amenity":"fuel"},"name":"Cenex","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ПТК":{"tags":{"name":"ПТК","amenity":"fuel"},"name":"ПТК","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/HP":{"tags":{"name":"HP","amenity":"fuel"},"name":"HP","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Phillips 66":{"tags":{"name":"Phillips 66","amenity":"fuel"},"name":"Phillips 66","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/CARREFOUR":{"tags":{"name":"CARREFOUR","amenity":"fuel"},"name":"CARREFOUR","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ERG":{"tags":{"name":"ERG","amenity":"fuel"},"name":"ERG","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Speedway":{"tags":{"name":"Speedway","amenity":"fuel"},"name":"Speedway","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Benzina":{"tags":{"name":"Benzina","amenity":"fuel"},"name":"Benzina","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Татнефть":{"tags":{"name":"Татнефть","amenity":"fuel"},"name":"Татнефть","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Terpel":{"tags":{"name":"Terpel","amenity":"fuel"},"name":"Terpel","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/WOG":{"tags":{"name":"WOG","amenity":"fuel"},"name":"WOG","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Seaoil":{"tags":{"name":"Seaoil","amenity":"fuel"},"name":"Seaoil","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/АЗС":{"tags":{"name":"АЗС","amenity":"fuel"},"name":"АЗС","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Kwik Trip":{"tags":{"name":"Kwik Trip","amenity":"fuel"},"name":"Kwik Trip","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Pertamina":{"tags":{"name":"Pertamina","amenity":"fuel"},"name":"Pertamina","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/COSMO":{"tags":{"name":"COSMO","amenity":"fuel"},"name":"COSMO","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Z":{"tags":{"name":"Z","amenity":"fuel"},"name":"Z","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Indian Oil":{"tags":{"name":"Indian Oil","amenity":"fuel"},"name":"Indian Oil","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/АГЗС":{"tags":{"name":"АГЗС","amenity":"fuel"},"name":"АГЗС","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/INA":{"tags":{"name":"INA","amenity":"fuel"},"name":"INA","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/JOMO":{"tags":{"name":"JOMO","amenity":"fuel"},"name":"JOMO","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Holiday":{"tags":{"name":"Holiday","amenity":"fuel"},"name":"Holiday","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/YPF":{"tags":{"name":"YPF","amenity":"fuel"},"name":"YPF","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/IDEMITSU":{"tags":{"name":"IDEMITSU","amenity":"fuel"},"name":"IDEMITSU","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ENEOS":{"tags":{"name":"ENEOS","amenity":"fuel"},"name":"ENEOS","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Bharat Petroleum":{"tags":{"name":"Bharat Petroleum","amenity":"fuel"},"name":"Bharat Petroleum","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/CAMPSA":{"tags":{"name":"CAMPSA","amenity":"fuel"},"name":"CAMPSA","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Casey's General Store":{"tags":{"name":"Casey's General Store","amenity":"fuel"},"name":"Casey's General Store","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Башнефть":{"tags":{"name":"Башнефть","amenity":"fuel"},"name":"Башнефть","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Kangaroo":{"tags":{"name":"Kangaroo","amenity":"fuel"},"name":"Kangaroo","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/コスモ石油 (COSMO)":{"tags":{"name":"コスモ石油 (COSMO)","amenity":"fuel"},"name":"コスモ石油 (COSMO)","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/MEROIL":{"tags":{"name":"MEROIL","amenity":"fuel"},"name":"MEROIL","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/1-2-3":{"tags":{"name":"1-2-3","amenity":"fuel"},"name":"1-2-3","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/出光":{"tags":{"name":"出光","name:en":"IDEMITSU","amenity":"fuel"},"name":"出光","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/НК Альянс":{"tags":{"name":"НК Альянс","amenity":"fuel"},"name":"НК Альянс","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Sinclair":{"tags":{"name":"Sinclair","amenity":"fuel"},"name":"Sinclair","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Conoco":{"tags":{"name":"Conoco","amenity":"fuel"},"name":"Conoco","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/SPBU":{"tags":{"name":"SPBU","amenity":"fuel"},"name":"SPBU","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Макпетрол":{"tags":{"name":"Макпетрол","amenity":"fuel"},"name":"Макпетрол","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Posto Ipiranga":{"tags":{"name":"Posto Ipiranga","amenity":"fuel"},"name":"Posto Ipiranga","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Posto Shell":{"tags":{"name":"Posto Shell","amenity":"fuel"},"name":"Posto Shell","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Phoenix":{"tags":{"name":"Phoenix","amenity":"fuel"},"name":"Phoenix","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Ipiranga":{"tags":{"name":"Ipiranga","amenity":"fuel"},"name":"Ipiranga","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/OKKO":{"tags":{"name":"OKKO","amenity":"fuel"},"name":"OKKO","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ОККО":{"tags":{"name":"ОККО","amenity":"fuel"},"name":"ОККО","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/บางจาก":{"tags":{"name":"บางจาก","amenity":"fuel"},"name":"บางจาก","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/QuikTrip":{"tags":{"name":"QuikTrip","amenity":"fuel"},"name":"QuikTrip","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Posto BR":{"tags":{"name":"Posto BR","amenity":"fuel"},"name":"Posto BR","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ป ต ท":{"tags":{"name":"ป ต ท","amenity":"fuel"},"name":"ป ต ท","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ปตท":{"tags":{"name":"ปตท","amenity":"fuel"},"name":"ปตท","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ANP":{"tags":{"name":"ANP","amenity":"fuel"},"name":"ANP","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Kum & Go":{"tags":{"name":"Kum & Go","amenity":"fuel"},"name":"Kum & Go","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Petrolimex":{"tags":{"name":"Petrolimex","amenity":"fuel"},"name":"Petrolimex","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Sokimex":{"tags":{"name":"Sokimex","amenity":"fuel"},"name":"Sokimex","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Tela":{"tags":{"name":"Tela","amenity":"fuel"},"name":"Tela","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Posto":{"tags":{"name":"Posto","amenity":"fuel"},"name":"Posto","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Укрнафта":{"tags":{"name":"Укрнафта","amenity":"fuel"},"name":"Укрнафта","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Татнефтепродукт":{"tags":{"name":"Татнефтепродукт","amenity":"fuel"},"name":"Татнефтепродукт","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Afriquia":{"tags":{"name":"Afriquia","amenity":"fuel"},"name":"Afriquia","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Murphy USA":{"tags":{"name":"Murphy USA","amenity":"fuel"},"name":"Murphy USA","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/昭和シェル (Showa-shell)":{"tags":{"name":"昭和シェル (Showa-shell)","amenity":"fuel"},"name":"昭和シェル (Showa-shell)","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/エネオス":{"tags":{"name":"エネオス","amenity":"fuel"},"name":"エネオス","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/CNG":{"tags":{"name":"CNG","amenity":"fuel"},"name":"CNG","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/pub/Kings Arms":{"tags":{"name":"Kings Arms","amenity":"pub"},"name":"Kings Arms","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Ship":{"tags":{"name":"The Ship","amenity":"pub"},"name":"The Ship","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The White Horse":{"tags":{"name":"The White Horse","amenity":"pub"},"name":"The White Horse","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The White Hart":{"tags":{"name":"The White Hart","amenity":"pub"},"name":"The White Hart","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Royal Oak":{"tags":{"name":"Royal Oak","amenity":"pub"},"name":"Royal Oak","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Red Lion":{"tags":{"name":"The Red Lion","amenity":"pub"},"name":"The Red Lion","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Kings Arms":{"tags":{"name":"The Kings Arms","amenity":"pub"},"name":"The Kings Arms","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Star":{"tags":{"name":"The Star","amenity":"pub"},"name":"The Star","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Anchor":{"tags":{"name":"The Anchor","amenity":"pub"},"name":"The Anchor","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Cross Keys":{"tags":{"name":"The Cross Keys","amenity":"pub"},"name":"The Cross Keys","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Wheatsheaf":{"tags":{"name":"The Wheatsheaf","amenity":"pub"},"name":"The Wheatsheaf","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Crown Inn":{"tags":{"name":"The Crown Inn","amenity":"pub"},"name":"The Crown Inn","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Kings Head":{"tags":{"name":"The Kings Head","amenity":"pub"},"name":"The Kings Head","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Castle":{"tags":{"name":"The Castle","amenity":"pub"},"name":"The Castle","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Railway":{"tags":{"name":"The Railway","amenity":"pub"},"name":"The Railway","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The White Lion":{"tags":{"name":"The White Lion","amenity":"pub"},"name":"The White Lion","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Bell":{"tags":{"name":"The Bell","amenity":"pub"},"name":"The Bell","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Bull":{"tags":{"name":"The Bull","amenity":"pub"},"name":"The Bull","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Plough":{"tags":{"name":"The Plough","amenity":"pub"},"name":"The Plough","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The George":{"tags":{"name":"The George","amenity":"pub"},"name":"The George","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Royal Oak":{"tags":{"name":"The Royal Oak","amenity":"pub"},"name":"The Royal Oak","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Fox":{"tags":{"name":"The Fox","amenity":"pub"},"name":"The Fox","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Prince of Wales":{"tags":{"name":"Prince of Wales","amenity":"pub"},"name":"Prince of Wales","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Rising Sun":{"tags":{"name":"The Rising Sun","amenity":"pub"},"name":"The Rising Sun","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Prince of Wales":{"tags":{"name":"The Prince of Wales","amenity":"pub"},"name":"The Prince of Wales","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Crown":{"tags":{"name":"The Crown","amenity":"pub"},"name":"The Crown","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Chequers":{"tags":{"name":"The Chequers","amenity":"pub"},"name":"The Chequers","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Swan":{"tags":{"name":"The Swan","amenity":"pub"},"name":"The Swan","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Rose and Crown":{"tags":{"name":"Rose and Crown","amenity":"pub"},"name":"Rose and Crown","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Victoria":{"tags":{"name":"The Victoria","amenity":"pub"},"name":"The Victoria","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/New Inn":{"tags":{"name":"New Inn","amenity":"pub"},"name":"New Inn","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Royal Hotel":{"tags":{"name":"Royal Hotel","amenity":"pub"},"name":"Royal Hotel","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Red Lion":{"tags":{"name":"Red Lion","amenity":"pub"},"name":"Red Lion","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Cross Keys":{"tags":{"name":"Cross Keys","amenity":"pub"},"name":"Cross Keys","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Greyhound":{"tags":{"name":"The Greyhound","amenity":"pub"},"name":"The Greyhound","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Black Horse":{"tags":{"name":"The Black Horse","amenity":"pub"},"name":"The Black Horse","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The New Inn":{"tags":{"name":"The New Inn","amenity":"pub"},"name":"The New Inn","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Kings Head":{"tags":{"name":"Kings Head","amenity":"pub"},"name":"Kings Head","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Albion":{"tags":{"name":"The Albion","amenity":"pub"},"name":"The Albion","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Angel":{"tags":{"name":"The Angel","amenity":"pub"},"name":"The Angel","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Queens Head":{"tags":{"name":"The Queens Head","amenity":"pub"},"name":"The Queens Head","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Ship Inn":{"tags":{"name":"The Ship Inn","amenity":"pub"},"name":"The Ship Inn","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Rose & Crown":{"tags":{"name":"Rose & Crown","amenity":"pub"},"name":"Rose & Crown","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Queens Head":{"tags":{"name":"Queens Head","amenity":"pub"},"name":"Queens Head","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Irish Pub":{"tags":{"name":"Irish Pub","amenity":"pub"},"name":"Irish Pub","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Quick":{"tags":{"name":"Quick","amenity":"fast_food"},"name":"Quick","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/McDonald's":{"tags":{"name":"McDonald's","cuisine":"burger","amenity":"fast_food"},"name":"McDonald's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Subway":{"tags":{"name":"Subway","cuisine":"sandwich","amenity":"fast_food"},"name":"Subway","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Burger King":{"tags":{"name":"Burger King","cuisine":"burger","amenity":"fast_food"},"name":"Burger King","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Ali Baba":{"tags":{"name":"Ali Baba","amenity":"fast_food"},"name":"Ali Baba","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Hungry Jacks":{"tags":{"name":"Hungry Jacks","cuisine":"burger","amenity":"fast_food"},"name":"Hungry Jacks","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Red Rooster":{"tags":{"name":"Red Rooster","amenity":"fast_food"},"name":"Red Rooster","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/KFC":{"tags":{"name":"KFC","cuisine":"chicken","amenity":"fast_food"},"name":"KFC","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Domino's Pizza":{"tags":{"name":"Domino's Pizza","cuisine":"pizza","amenity":"fast_food"},"name":"Domino's Pizza","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Chowking":{"tags":{"name":"Chowking","amenity":"fast_food"},"name":"Chowking","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jollibee":{"tags":{"name":"Jollibee","amenity":"fast_food"},"name":"Jollibee","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Hesburger":{"tags":{"name":"Hesburger","amenity":"fast_food"},"name":"Hesburger","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/肯德基":{"tags":{"name":"肯德基","amenity":"fast_food"},"name":"肯德基","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Wendy's":{"tags":{"name":"Wendy's","cuisine":"burger","amenity":"fast_food"},"name":"Wendy's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Tim Hortons":{"tags":{"name":"Tim Hortons","amenity":"fast_food"},"name":"Tim Hortons","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Steers":{"tags":{"name":"Steers","amenity":"fast_food"},"name":"Steers","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Hardee's":{"tags":{"name":"Hardee's","cuisine":"burger","amenity":"fast_food"},"name":"Hardee's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Arby's":{"tags":{"name":"Arby's","amenity":"fast_food"},"name":"Arby's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/A&W":{"tags":{"name":"A&W","amenity":"fast_food"},"name":"A&W","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Dairy Queen":{"tags":{"name":"Dairy Queen","amenity":"fast_food"},"name":"Dairy Queen","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Hallo Pizza":{"tags":{"name":"Hallo Pizza","amenity":"fast_food"},"name":"Hallo Pizza","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Fish & Chips":{"tags":{"name":"Fish & Chips","amenity":"fast_food"},"name":"Fish & Chips","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Harvey's":{"tags":{"name":"Harvey's","amenity":"fast_food"},"name":"Harvey's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/麥當勞":{"tags":{"name":"麥當勞","amenity":"fast_food"},"name":"麥當勞","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pizza Pizza":{"tags":{"name":"Pizza Pizza","amenity":"fast_food"},"name":"Pizza Pizza","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Kotipizza":{"tags":{"name":"Kotipizza","amenity":"fast_food"},"name":"Kotipizza","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jack in the Box":{"tags":{"name":"Jack in the Box","cuisine":"burger","amenity":"fast_food"},"name":"Jack in the Box","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Istanbul":{"tags":{"name":"Istanbul","amenity":"fast_food"},"name":"Istanbul","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Kochlöffel":{"tags":{"name":"Kochlöffel","amenity":"fast_food"},"name":"Kochlöffel","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Döner":{"tags":{"name":"Döner","amenity":"fast_food"},"name":"Döner","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Telepizza":{"tags":{"name":"Telepizza","amenity":"fast_food"},"name":"Telepizza","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Sibylla":{"tags":{"name":"Sibylla","amenity":"fast_food"},"name":"Sibylla","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Carl's Jr.":{"tags":{"name":"Carl's Jr.","cuisine":"burger","amenity":"fast_food"},"name":"Carl's Jr.","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Quiznos":{"tags":{"name":"Quiznos","cuisine":"sandwich","amenity":"fast_food"},"name":"Quiznos","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Wimpy":{"tags":{"name":"Wimpy","amenity":"fast_food"},"name":"Wimpy","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Sonic":{"tags":{"name":"Sonic","cuisine":"burger","amenity":"fast_food"},"name":"Sonic","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco Bell":{"tags":{"name":"Taco Bell","cuisine":"mexican","amenity":"fast_food"},"name":"Taco Bell","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pizza Nova":{"tags":{"name":"Pizza Nova","amenity":"fast_food"},"name":"Pizza Nova","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Papa John's":{"tags":{"name":"Papa John's","cuisine":"pizza","amenity":"fast_food"},"name":"Papa John's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Nordsee":{"tags":{"name":"Nordsee","amenity":"fast_food"},"name":"Nordsee","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Mr. Sub":{"tags":{"name":"Mr. Sub","amenity":"fast_food"},"name":"Mr. Sub","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Макдоналдс":{"tags":{"name":"Макдоналдс","name:en":"McDonald's","amenity":"fast_food"},"name":"Макдоналдс","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Asia Imbiss":{"tags":{"name":"Asia Imbiss","amenity":"fast_food"},"name":"Asia Imbiss","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Chipotle":{"tags":{"name":"Chipotle","cuisine":"mexican","amenity":"fast_food"},"name":"Chipotle","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/マクドナルド":{"tags":{"name":"マクドナルド","name:en":"McDonald's","cuisine":"burger","amenity":"fast_food"},"name":"マクドナルド","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/In-N-Out Burger":{"tags":{"name":"In-N-Out Burger","amenity":"fast_food"},"name":"In-N-Out Burger","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jimmy John's":{"tags":{"name":"Jimmy John's","amenity":"fast_food"},"name":"Jimmy John's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jamba Juice":{"tags":{"name":"Jamba Juice","amenity":"fast_food"},"name":"Jamba Juice","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Робин Сдобин":{"tags":{"name":"Робин Сдобин","amenity":"fast_food"},"name":"Робин Сдобин","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Baskin Robbins":{"tags":{"name":"Baskin Robbins","amenity":"fast_food"},"name":"Baskin Robbins","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/ケンタッキーフライドチキン":{"tags":{"name":"ケンタッキーフライドチキン","name:en":"KFC","cuisine":"chicken","amenity":"fast_food"},"name":"ケンタッキーフライドチキン","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/吉野家":{"tags":{"name":"吉野家","amenity":"fast_food"},"name":"吉野家","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco Time":{"tags":{"name":"Taco Time","amenity":"fast_food"},"name":"Taco Time","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/松屋":{"tags":{"name":"松屋","name:en":"Matsuya","amenity":"fast_food"},"name":"松屋","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Little Caesars":{"tags":{"name":"Little Caesars","amenity":"fast_food"},"name":"Little Caesars","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/El Pollo Loco":{"tags":{"name":"El Pollo Loco","amenity":"fast_food"},"name":"El Pollo Loco","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Del Taco":{"tags":{"name":"Del Taco","amenity":"fast_food"},"name":"Del Taco","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/White Castle":{"tags":{"name":"White Castle","amenity":"fast_food"},"name":"White Castle","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Boston Market":{"tags":{"name":"Boston Market","amenity":"fast_food"},"name":"Boston Market","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Chick-fil-A":{"tags":{"name":"Chick-fil-A","cuisine":"chicken","amenity":"fast_food"},"name":"Chick-fil-A","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Panda Express":{"tags":{"name":"Panda Express","cuisine":"chinese","amenity":"fast_food"},"name":"Panda Express","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Whataburger":{"tags":{"name":"Whataburger","amenity":"fast_food"},"name":"Whataburger","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco John's":{"tags":{"name":"Taco John's","amenity":"fast_food"},"name":"Taco John's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Теремок":{"tags":{"name":"Теремок","amenity":"fast_food"},"name":"Теремок","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Culver's":{"tags":{"name":"Culver's","amenity":"fast_food"},"name":"Culver's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Five Guys":{"tags":{"name":"Five Guys","amenity":"fast_food"},"name":"Five Guys","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Church's Chicken":{"tags":{"name":"Church's Chicken","amenity":"fast_food"},"name":"Church's Chicken","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Popeye's":{"tags":{"name":"Popeye's","cuisine":"chicken","amenity":"fast_food"},"name":"Popeye's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Long John Silver's":{"tags":{"name":"Long John Silver's","amenity":"fast_food"},"name":"Long John Silver's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pollo Campero":{"tags":{"name":"Pollo Campero","amenity":"fast_food"},"name":"Pollo Campero","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Zaxby's":{"tags":{"name":"Zaxby's","amenity":"fast_food"},"name":"Zaxby's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/すき家":{"tags":{"name":"すき家","name:en":"SUKIYA","amenity":"fast_food"},"name":"すき家","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/モスバーガー":{"tags":{"name":"モスバーガー","name:en":"MOS BURGER","amenity":"fast_food"},"name":"モスバーガー","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Русский Аппетит":{"tags":{"name":"Русский Аппетит","amenity":"fast_food"},"name":"Русский Аппетит","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/なか卯":{"tags":{"name":"なか卯","amenity":"fast_food"},"name":"なか卯","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizza Hut":{"tags":{"name":"Pizza Hut","cuisine":"pizza","amenity":"restaurant"},"name":"Pizza Hut","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Little Chef":{"tags":{"name":"Little Chef","amenity":"restaurant"},"name":"Little Chef","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Adler":{"tags":{"name":"Adler","amenity":"restaurant"},"name":"Adler","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zur Krone":{"tags":{"name":"Zur Krone","amenity":"restaurant"},"name":"Zur Krone","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Deutsches Haus":{"tags":{"name":"Deutsches Haus","amenity":"restaurant"},"name":"Deutsches Haus","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Krone":{"tags":{"name":"Krone","amenity":"restaurant"},"name":"Krone","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Akropolis":{"tags":{"name":"Akropolis","amenity":"restaurant"},"name":"Akropolis","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Schützenhaus":{"tags":{"name":"Schützenhaus","amenity":"restaurant"},"name":"Schützenhaus","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kreuz":{"tags":{"name":"Kreuz","amenity":"restaurant"},"name":"Kreuz","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Waldschänke":{"tags":{"name":"Waldschänke","amenity":"restaurant"},"name":"Waldschänke","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Piazza":{"tags":{"name":"La Piazza","amenity":"restaurant"},"name":"La Piazza","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Lamm":{"tags":{"name":"Lamm","amenity":"restaurant"},"name":"Lamm","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zur Sonne":{"tags":{"name":"Zur Sonne","amenity":"restaurant"},"name":"Zur Sonne","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zur Linde":{"tags":{"name":"Zur Linde","amenity":"restaurant"},"name":"Zur Linde","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Poseidon":{"tags":{"name":"Poseidon","amenity":"restaurant"},"name":"Poseidon","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Shanghai":{"tags":{"name":"Shanghai","amenity":"restaurant"},"name":"Shanghai","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Red Lobster":{"tags":{"name":"Red Lobster","amenity":"restaurant"},"name":"Red Lobster","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zum Löwen":{"tags":{"name":"Zum Löwen","amenity":"restaurant"},"name":"Zum Löwen","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Swiss Chalet":{"tags":{"name":"Swiss Chalet","amenity":"restaurant"},"name":"Swiss Chalet","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Olympia":{"tags":{"name":"Olympia","amenity":"restaurant"},"name":"Olympia","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Wagamama":{"tags":{"name":"Wagamama","amenity":"restaurant"},"name":"Wagamama","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Frankie & Benny's":{"tags":{"name":"Frankie & Benny's","amenity":"restaurant"},"name":"Frankie & Benny's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hooters":{"tags":{"name":"Hooters","amenity":"restaurant"},"name":"Hooters","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sternen":{"tags":{"name":"Sternen","amenity":"restaurant"},"name":"Sternen","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hirschen":{"tags":{"name":"Hirschen","amenity":"restaurant"},"name":"Hirschen","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Denny's":{"tags":{"name":"Denny's","amenity":"restaurant"},"name":"Denny's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Athen":{"tags":{"name":"Athen","amenity":"restaurant"},"name":"Athen","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sonne":{"tags":{"name":"Sonne","amenity":"restaurant"},"name":"Sonne","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hirsch":{"tags":{"name":"Hirsch","amenity":"restaurant"},"name":"Hirsch","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ratskeller":{"tags":{"name":"Ratskeller","amenity":"restaurant"},"name":"Ratskeller","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Cantina":{"tags":{"name":"La Cantina","amenity":"restaurant"},"name":"La Cantina","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Gasthaus Krone":{"tags":{"name":"Gasthaus Krone","amenity":"restaurant"},"name":"Gasthaus Krone","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/El Greco":{"tags":{"name":"El Greco","amenity":"restaurant"},"name":"El Greco","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Gasthof zur Post":{"tags":{"name":"Gasthof zur Post","amenity":"restaurant"},"name":"Gasthof zur Post","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Nando's":{"tags":{"name":"Nando's","amenity":"restaurant"},"name":"Nando's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Löwen":{"tags":{"name":"Löwen","amenity":"restaurant"},"name":"Löwen","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Pataterie":{"tags":{"name":"La Pataterie","amenity":"restaurant"},"name":"La Pataterie","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bella Napoli":{"tags":{"name":"Bella Napoli","amenity":"restaurant"},"name":"Bella Napoli","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizza Express":{"tags":{"name":"Pizza Express","amenity":"restaurant"},"name":"Pizza Express","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mandarin":{"tags":{"name":"Mandarin","amenity":"restaurant"},"name":"Mandarin","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hong Kong":{"tags":{"name":"Hong Kong","amenity":"restaurant"},"name":"Hong Kong","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zizzi":{"tags":{"name":"Zizzi","amenity":"restaurant"},"name":"Zizzi","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Cracker Barrel":{"tags":{"name":"Cracker Barrel","amenity":"restaurant"},"name":"Cracker Barrel","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Rhodos":{"tags":{"name":"Rhodos","amenity":"restaurant"},"name":"Rhodos","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Lindenhof":{"tags":{"name":"Lindenhof","amenity":"restaurant"},"name":"Lindenhof","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Milano":{"tags":{"name":"Milano","amenity":"restaurant"},"name":"Milano","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Dolce Vita":{"tags":{"name":"Dolce Vita","amenity":"restaurant"},"name":"Dolce Vita","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kirchenwirt":{"tags":{"name":"Kirchenwirt","amenity":"restaurant"},"name":"Kirchenwirt","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kantine":{"tags":{"name":"Kantine","amenity":"restaurant"},"name":"Kantine","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ochsen":{"tags":{"name":"Ochsen","amenity":"restaurant"},"name":"Ochsen","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Spur":{"tags":{"name":"Spur","amenity":"restaurant"},"name":"Spur","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mykonos":{"tags":{"name":"Mykonos","amenity":"restaurant"},"name":"Mykonos","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Lotus":{"tags":{"name":"Lotus","amenity":"restaurant"},"name":"Lotus","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Applebee's":{"tags":{"name":"Applebee's","amenity":"restaurant"},"name":"Applebee's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Flunch":{"tags":{"name":"Flunch","amenity":"restaurant"},"name":"Flunch","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zur Post":{"tags":{"name":"Zur Post","amenity":"restaurant"},"name":"Zur Post","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/China Town":{"tags":{"name":"China Town","amenity":"restaurant"},"name":"China Town","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Dolce Vita":{"tags":{"name":"La Dolce Vita","amenity":"restaurant"},"name":"La Dolce Vita","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Waffle House":{"tags":{"name":"Waffle House","amenity":"restaurant"},"name":"Waffle House","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Delphi":{"tags":{"name":"Delphi","amenity":"restaurant"},"name":"Delphi","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Linde":{"tags":{"name":"Linde","amenity":"restaurant"},"name":"Linde","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Outback Steakhouse":{"tags":{"name":"Outback Steakhouse","amenity":"restaurant"},"name":"Outback Steakhouse","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Dionysos":{"tags":{"name":"Dionysos","amenity":"restaurant"},"name":"Dionysos","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kelsey's":{"tags":{"name":"Kelsey's","amenity":"restaurant"},"name":"Kelsey's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Boston Pizza":{"tags":{"name":"Boston Pizza","amenity":"restaurant"},"name":"Boston Pizza","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bella Italia":{"tags":{"name":"Bella Italia","amenity":"restaurant"},"name":"Bella Italia","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sizzler":{"tags":{"name":"Sizzler","amenity":"restaurant"},"name":"Sizzler","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Grüner Baum":{"tags":{"name":"Grüner Baum","amenity":"restaurant"},"name":"Grüner Baum","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Taj Mahal":{"tags":{"name":"Taj Mahal","amenity":"restaurant"},"name":"Taj Mahal","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Rössli":{"tags":{"name":"Rössli","amenity":"restaurant"},"name":"Rössli","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Traube":{"tags":{"name":"Traube","amenity":"restaurant"},"name":"Traube","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Adria":{"tags":{"name":"Adria","amenity":"restaurant"},"name":"Adria","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Red Robin":{"tags":{"name":"Red Robin","amenity":"restaurant"},"name":"Red Robin","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Roma":{"tags":{"name":"Roma","amenity":"restaurant"},"name":"Roma","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/San Marco":{"tags":{"name":"San Marco","amenity":"restaurant"},"name":"San Marco","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hellas":{"tags":{"name":"Hellas","amenity":"restaurant"},"name":"Hellas","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Perla":{"tags":{"name":"La Perla","amenity":"restaurant"},"name":"La Perla","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Vips":{"tags":{"name":"Vips","amenity":"restaurant"},"name":"Vips","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Panera Bread":{"tags":{"name":"Panera Bread","amenity":"restaurant"},"name":"Panera Bread","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Da Vinci":{"tags":{"name":"Da Vinci","amenity":"restaurant"},"name":"Da Vinci","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hippopotamus":{"tags":{"name":"Hippopotamus","amenity":"restaurant"},"name":"Hippopotamus","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Prezzo":{"tags":{"name":"Prezzo","amenity":"restaurant"},"name":"Prezzo","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Courtepaille":{"tags":{"name":"Courtepaille","amenity":"restaurant"},"name":"Courtepaille","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hard Rock Cafe":{"tags":{"name":"Hard Rock Cafe","amenity":"restaurant"},"name":"Hard Rock Cafe","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Panorama":{"tags":{"name":"Panorama","amenity":"restaurant"},"name":"Panorama","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/デニーズ":{"tags":{"name":"デニーズ","amenity":"restaurant"},"name":"デニーズ","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sportheim":{"tags":{"name":"Sportheim","amenity":"restaurant"},"name":"Sportheim","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/餃子の王将":{"tags":{"name":"餃子の王将","amenity":"restaurant"},"name":"餃子の王将","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bären":{"tags":{"name":"Bären","amenity":"restaurant"},"name":"Bären","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Alte Post":{"tags":{"name":"Alte Post","amenity":"restaurant"},"name":"Alte Post","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizzeria Roma":{"tags":{"name":"Pizzeria Roma","amenity":"restaurant"},"name":"Pizzeria Roma","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/China Garden":{"tags":{"name":"China Garden","amenity":"restaurant"},"name":"China Garden","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Vapiano":{"tags":{"name":"Vapiano","amenity":"restaurant"},"name":"Vapiano","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mamma Mia":{"tags":{"name":"Mamma Mia","amenity":"restaurant"},"name":"Mamma Mia","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Schwarzer Adler":{"tags":{"name":"Schwarzer Adler","amenity":"restaurant"},"name":"Schwarzer Adler","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/IHOP":{"tags":{"name":"IHOP","amenity":"restaurant"},"name":"IHOP","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Chili's":{"tags":{"name":"Chili's","amenity":"restaurant"},"name":"Chili's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Asia":{"tags":{"name":"Asia","amenity":"restaurant"},"name":"Asia","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Olive Garden":{"tags":{"name":"Olive Garden","amenity":"restaurant"},"name":"Olive Garden","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/TGI Friday's":{"tags":{"name":"TGI Friday's","amenity":"restaurant"},"name":"TGI Friday's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Friendly's":{"tags":{"name":"Friendly's","amenity":"restaurant"},"name":"Friendly's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Buffalo Grill":{"tags":{"name":"Buffalo Grill","amenity":"restaurant"},"name":"Buffalo Grill","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Texas Roadhouse":{"tags":{"name":"Texas Roadhouse","amenity":"restaurant"},"name":"Texas Roadhouse","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/ガスト":{"tags":{"name":"ガスト","name:en":"Gusto","amenity":"restaurant"},"name":"ガスト","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sakura":{"tags":{"name":"Sakura","amenity":"restaurant"},"name":"Sakura","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mensa":{"tags":{"name":"Mensa","amenity":"restaurant"},"name":"Mensa","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/The Keg":{"tags":{"name":"The Keg","amenity":"restaurant"},"name":"The Keg","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/サイゼリヤ":{"tags":{"name":"サイゼリヤ","amenity":"restaurant"},"name":"サイゼリヤ","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Strada":{"tags":{"name":"La Strada","amenity":"restaurant"},"name":"La Strada","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Village Inn":{"tags":{"name":"Village Inn","amenity":"restaurant"},"name":"Village Inn","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Buffalo Wild Wings":{"tags":{"name":"Buffalo Wild Wings","amenity":"restaurant"},"name":"Buffalo Wild Wings","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Peking":{"tags":{"name":"Peking","amenity":"restaurant"},"name":"Peking","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Round Table Pizza":{"tags":{"name":"Round Table Pizza","amenity":"restaurant"},"name":"Round Table Pizza","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/California Pizza Kitchen":{"tags":{"name":"California Pizza Kitchen","amenity":"restaurant"},"name":"California Pizza Kitchen","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Якитория":{"tags":{"name":"Якитория","amenity":"restaurant"},"name":"Якитория","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Golden Corral":{"tags":{"name":"Golden Corral","amenity":"restaurant"},"name":"Golden Corral","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Perkins":{"tags":{"name":"Perkins","amenity":"restaurant"},"name":"Perkins","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ruby Tuesday":{"tags":{"name":"Ruby Tuesday","amenity":"restaurant"},"name":"Ruby Tuesday","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Shari's":{"tags":{"name":"Shari's","amenity":"restaurant"},"name":"Shari's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bob Evans":{"tags":{"name":"Bob Evans","amenity":"restaurant"},"name":"Bob Evans","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/바다횟집 (Bada Fish Restaurant)":{"tags":{"name":"바다횟집 (Bada Fish Restaurant)","amenity":"restaurant"},"name":"바다횟집 (Bada Fish Restaurant)","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mang Inasal":{"tags":{"name":"Mang Inasal","amenity":"restaurant"},"name":"Mang Inasal","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Евразия":{"tags":{"name":"Евразия","amenity":"restaurant"},"name":"Евразия","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/ジョナサン":{"tags":{"name":"ジョナサン","amenity":"restaurant"},"name":"ジョナサン","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Longhorn Steakhouse":{"tags":{"name":"Longhorn Steakhouse","amenity":"restaurant"},"name":"Longhorn Steakhouse","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/bank/Chase":{"tags":{"name":"Chase","amenity":"bank"},"name":"Chase","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Commonwealth Bank":{"tags":{"name":"Commonwealth Bank","amenity":"bank"},"name":"Commonwealth Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Citibank":{"tags":{"name":"Citibank","amenity":"bank"},"name":"Citibank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/HSBC":{"tags":{"name":"HSBC","amenity":"bank"},"name":"HSBC","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Barclays":{"tags":{"name":"Barclays","amenity":"bank"},"name":"Barclays","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Westpac":{"tags":{"name":"Westpac","amenity":"bank"},"name":"Westpac","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/NAB":{"tags":{"name":"NAB","amenity":"bank"},"name":"NAB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ANZ":{"tags":{"name":"ANZ","amenity":"bank"},"name":"ANZ","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Lloyds Bank":{"tags":{"name":"Lloyds Bank","amenity":"bank"},"name":"Lloyds Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Landbank":{"tags":{"name":"Landbank","amenity":"bank"},"name":"Landbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sparkasse":{"tags":{"name":"Sparkasse","amenity":"bank"},"name":"Sparkasse","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/UCPB":{"tags":{"name":"UCPB","amenity":"bank"},"name":"UCPB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PNB":{"tags":{"name":"PNB","amenity":"bank"},"name":"PNB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Metrobank":{"tags":{"name":"Metrobank","amenity":"bank"},"name":"Metrobank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BDO":{"tags":{"name":"BDO","amenity":"bank"},"name":"BDO","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Volksbank":{"tags":{"name":"Volksbank","amenity":"bank"},"name":"Volksbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BPI":{"tags":{"name":"BPI","amenity":"bank"},"name":"BPI","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Postbank":{"tags":{"name":"Postbank","amenity":"bank"},"name":"Postbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/NatWest":{"tags":{"name":"NatWest","amenity":"bank"},"name":"NatWest","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Raiffeisenbank":{"tags":{"name":"Raiffeisenbank","amenity":"bank"},"name":"Raiffeisenbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Yorkshire Bank":{"tags":{"name":"Yorkshire Bank","amenity":"bank"},"name":"Yorkshire Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ABSA":{"tags":{"name":"ABSA","amenity":"bank"},"name":"ABSA","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Standard Bank":{"tags":{"name":"Standard Bank","amenity":"bank"},"name":"Standard Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/FNB":{"tags":{"name":"FNB","amenity":"bank"},"name":"FNB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Deutsche Bank":{"tags":{"name":"Deutsche Bank","amenity":"bank"},"name":"Deutsche Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/SEB":{"tags":{"name":"SEB","amenity":"bank"},"name":"SEB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Commerzbank":{"tags":{"name":"Commerzbank","amenity":"bank"},"name":"Commerzbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Targobank":{"tags":{"name":"Targobank","amenity":"bank"},"name":"Targobank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ABN AMRO":{"tags":{"name":"ABN AMRO","amenity":"bank"},"name":"ABN AMRO","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Handelsbanken":{"tags":{"name":"Handelsbanken","amenity":"bank"},"name":"Handelsbanken","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Swedbank":{"tags":{"name":"Swedbank","amenity":"bank"},"name":"Swedbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Kreissparkasse":{"tags":{"name":"Kreissparkasse","amenity":"bank"},"name":"Kreissparkasse","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/UniCredit Bank":{"tags":{"name":"UniCredit Bank","amenity":"bank"},"name":"UniCredit Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Monte dei Paschi di Siena":{"tags":{"name":"Monte dei Paschi di Siena","amenity":"bank"},"name":"Monte dei Paschi di Siena","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja Rural":{"tags":{"name":"Caja Rural","amenity":"bank"},"name":"Caja Rural","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Dresdner Bank":{"tags":{"name":"Dresdner Bank","amenity":"bank"},"name":"Dresdner Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sparda-Bank":{"tags":{"name":"Sparda-Bank","amenity":"bank"},"name":"Sparda-Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/VÚB":{"tags":{"name":"VÚB","amenity":"bank"},"name":"VÚB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Slovenská sporiteľňa":{"tags":{"name":"Slovenská sporiteľňa","amenity":"bank"},"name":"Slovenská sporiteľňa","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Montreal":{"tags":{"name":"Bank of Montreal","amenity":"bank"},"name":"Bank of Montreal","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/KBC":{"tags":{"name":"KBC","amenity":"bank"},"name":"KBC","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Royal Bank of Scotland":{"tags":{"name":"Royal Bank of Scotland","amenity":"bank"},"name":"Royal Bank of Scotland","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/TSB":{"tags":{"name":"TSB","amenity":"bank"},"name":"TSB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/US Bank":{"tags":{"name":"US Bank","amenity":"bank"},"name":"US Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/HypoVereinsbank":{"tags":{"name":"HypoVereinsbank","amenity":"bank"},"name":"HypoVereinsbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Austria":{"tags":{"name":"Bank Austria","amenity":"bank"},"name":"Bank Austria","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ING":{"tags":{"name":"ING","amenity":"bank"},"name":"ING","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Erste Bank":{"tags":{"name":"Erste Bank","amenity":"bank"},"name":"Erste Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CIBC":{"tags":{"name":"CIBC","amenity":"bank"},"name":"CIBC","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Scotiabank":{"tags":{"name":"Scotiabank","amenity":"bank"},"name":"Scotiabank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caisse d'Épargne":{"tags":{"name":"Caisse d'Épargne","amenity":"bank"},"name":"Caisse d'Épargne","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Santander":{"tags":{"name":"Santander","amenity":"bank"},"name":"Santander","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Scotland":{"tags":{"name":"Bank of Scotland","amenity":"bank"},"name":"Bank of Scotland","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/TD Canada Trust":{"tags":{"name":"TD Canada Trust","amenity":"bank"},"name":"TD Canada Trust","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BMO":{"tags":{"name":"BMO","amenity":"bank"},"name":"BMO","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Danske Bank":{"tags":{"name":"Danske Bank","amenity":"bank"},"name":"Danske Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/OTP":{"tags":{"name":"OTP","amenity":"bank"},"name":"OTP","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédit Agricole":{"tags":{"name":"Crédit Agricole","amenity":"bank"},"name":"Crédit Agricole","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/LCL":{"tags":{"name":"LCL","amenity":"bank"},"name":"LCL","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/VR-Bank":{"tags":{"name":"VR-Bank","amenity":"bank"},"name":"VR-Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ČSOB":{"tags":{"name":"ČSOB","amenity":"bank"},"name":"ČSOB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Česká spořitelna":{"tags":{"name":"Česká spořitelna","amenity":"bank"},"name":"Česká spořitelna","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNP":{"tags":{"name":"BNP","amenity":"bank"},"name":"BNP","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Royal Bank":{"tags":{"name":"Royal Bank","amenity":"bank"},"name":"Royal Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Nationwide":{"tags":{"name":"Nationwide","amenity":"bank"},"name":"Nationwide","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Halifax":{"tags":{"name":"Halifax","amenity":"bank"},"name":"Halifax","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BAWAG PSK":{"tags":{"name":"BAWAG PSK","amenity":"bank"},"name":"BAWAG PSK","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/National Bank":{"tags":{"name":"National Bank","amenity":"bank"},"name":"National Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Nedbank":{"tags":{"name":"Nedbank","amenity":"bank"},"name":"Nedbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/First National Bank":{"tags":{"name":"First National Bank","amenity":"bank"},"name":"First National Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Nordea":{"tags":{"name":"Nordea","amenity":"bank"},"name":"Nordea","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Rabobank":{"tags":{"name":"Rabobank","amenity":"bank"},"name":"Rabobank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sparkasse KölnBonn":{"tags":{"name":"Sparkasse KölnBonn","amenity":"bank"},"name":"Sparkasse KölnBonn","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Tatra banka":{"tags":{"name":"Tatra banka","amenity":"bank"},"name":"Tatra banka","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Berliner Sparkasse":{"tags":{"name":"Berliner Sparkasse","amenity":"bank"},"name":"Berliner Sparkasse","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Berliner Volksbank":{"tags":{"name":"Berliner Volksbank","amenity":"bank"},"name":"Berliner Volksbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Wells Fargo":{"tags":{"name":"Wells Fargo","amenity":"bank"},"name":"Wells Fargo","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Credit Suisse":{"tags":{"name":"Credit Suisse","amenity":"bank"},"name":"Credit Suisse","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Société Générale":{"tags":{"name":"Société Générale","amenity":"bank"},"name":"Société Générale","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Osuuspankki":{"tags":{"name":"Osuuspankki","amenity":"bank"},"name":"Osuuspankki","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sparkasse Aachen":{"tags":{"name":"Sparkasse Aachen","amenity":"bank"},"name":"Sparkasse Aachen","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Hamburger Sparkasse":{"tags":{"name":"Hamburger Sparkasse","amenity":"bank"},"name":"Hamburger Sparkasse","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Cassa di Risparmio del Veneto":{"tags":{"name":"Cassa di Risparmio del Veneto","amenity":"bank"},"name":"Cassa di Risparmio del Veneto","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNP Paribas":{"tags":{"name":"BNP Paribas","amenity":"bank"},"name":"BNP Paribas","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banque Populaire":{"tags":{"name":"Banque Populaire","amenity":"bank"},"name":"Banque Populaire","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNP Paribas Fortis":{"tags":{"name":"BNP Paribas Fortis","amenity":"bank"},"name":"BNP Paribas Fortis","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Popular":{"tags":{"name":"Banco Popular","amenity":"bank"},"name":"Banco Popular","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bancaja":{"tags":{"name":"Bancaja","amenity":"bank"},"name":"Bancaja","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banesto":{"tags":{"name":"Banesto","amenity":"bank"},"name":"Banesto","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/La Caixa":{"tags":{"name":"La Caixa","amenity":"bank"},"name":"La Caixa","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Santander Consumer Bank":{"tags":{"name":"Santander Consumer Bank","amenity":"bank"},"name":"Santander Consumer Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BRD":{"tags":{"name":"BRD","amenity":"bank"},"name":"BRD","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BCR":{"tags":{"name":"BCR","amenity":"bank"},"name":"BCR","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Transilvania":{"tags":{"name":"Banca Transilvania","amenity":"bank"},"name":"Banca Transilvania","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BW-Bank":{"tags":{"name":"BW-Bank","amenity":"bank"},"name":"BW-Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Komerční banka":{"tags":{"name":"Komerční banka","amenity":"bank"},"name":"Komerční banka","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Pastor":{"tags":{"name":"Banco Pastor","amenity":"bank"},"name":"Banco Pastor","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Stadtsparkasse":{"tags":{"name":"Stadtsparkasse","amenity":"bank"},"name":"Stadtsparkasse","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Ulster Bank":{"tags":{"name":"Ulster Bank","amenity":"bank"},"name":"Ulster Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sberbank":{"tags":{"name":"Sberbank","amenity":"bank"},"name":"Sberbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CIC":{"tags":{"name":"CIC","amenity":"bank"},"name":"CIC","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bancpost":{"tags":{"name":"Bancpost","amenity":"bank"},"name":"Bancpost","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja Madrid":{"tags":{"name":"Caja Madrid","amenity":"bank"},"name":"Caja Madrid","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Maybank":{"tags":{"name":"Maybank","amenity":"bank"},"name":"Maybank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/中国银行":{"tags":{"name":"中国银行","amenity":"bank"},"name":"中国银行","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Unicredit Banca":{"tags":{"name":"Unicredit Banca","amenity":"bank"},"name":"Unicredit Banca","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédit Mutuel":{"tags":{"name":"Crédit Mutuel","amenity":"bank"},"name":"Crédit Mutuel","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBVA":{"tags":{"name":"BBVA","amenity":"bank"},"name":"BBVA","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Intesa San Paolo":{"tags":{"name":"Intesa San Paolo","amenity":"bank"},"name":"Intesa San Paolo","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/TD Bank":{"tags":{"name":"TD Bank","amenity":"bank"},"name":"TD Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Belfius":{"tags":{"name":"Belfius","amenity":"bank"},"name":"Belfius","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of America":{"tags":{"name":"Bank of America","amenity":"bank"},"name":"Bank of America","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/RBC":{"tags":{"name":"RBC","amenity":"bank"},"name":"RBC","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Alpha Bank":{"tags":{"name":"Alpha Bank","amenity":"bank"},"name":"Alpha Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Сбербанк":{"tags":{"name":"Сбербанк","amenity":"bank"},"name":"Сбербанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Россельхозбанк":{"tags":{"name":"Россельхозбанк","amenity":"bank"},"name":"Россельхозбанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédit du Nord":{"tags":{"name":"Crédit du Nord","amenity":"bank"},"name":"Crédit du Nord","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BancoEstado":{"tags":{"name":"BancoEstado","amenity":"bank"},"name":"BancoEstado","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Millennium Bank":{"tags":{"name":"Millennium Bank","amenity":"bank"},"name":"Millennium Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/State Bank of India":{"tags":{"name":"State Bank of India","amenity":"bank"},"name":"State Bank of India","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Беларусбанк":{"tags":{"name":"Беларусбанк","amenity":"bank"},"name":"Беларусбанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ING Bank Śląski":{"tags":{"name":"ING Bank Śląski","amenity":"bank"},"name":"ING Bank Śląski","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caixa Geral de Depósitos":{"tags":{"name":"Caixa Geral de Depósitos","amenity":"bank"},"name":"Caixa Geral de Depósitos","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Kreissparkasse Köln":{"tags":{"name":"Kreissparkasse Köln","amenity":"bank"},"name":"Kreissparkasse Köln","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco BCI":{"tags":{"name":"Banco BCI","amenity":"bank"},"name":"Banco BCI","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Chile":{"tags":{"name":"Banco de Chile","amenity":"bank"},"name":"Banco de Chile","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ВТБ24":{"tags":{"name":"ВТБ24","amenity":"bank"},"name":"ВТБ24","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/UBS":{"tags":{"name":"UBS","amenity":"bank"},"name":"UBS","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PKO BP":{"tags":{"name":"PKO BP","amenity":"bank"},"name":"PKO BP","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Chinabank":{"tags":{"name":"Chinabank","amenity":"bank"},"name":"Chinabank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PSBank":{"tags":{"name":"PSBank","amenity":"bank"},"name":"PSBank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Union Bank":{"tags":{"name":"Union Bank","amenity":"bank"},"name":"Union Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/China Bank":{"tags":{"name":"China Bank","amenity":"bank"},"name":"China Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/RCBC":{"tags":{"name":"RCBC","amenity":"bank"},"name":"RCBC","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Unicaja":{"tags":{"name":"Unicaja","amenity":"bank"},"name":"Unicaja","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBK":{"tags":{"name":"BBK","amenity":"bank"},"name":"BBK","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Ibercaja":{"tags":{"name":"Ibercaja","amenity":"bank"},"name":"Ibercaja","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/RBS":{"tags":{"name":"RBS","amenity":"bank"},"name":"RBS","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Commercial Bank of Ceylon PLC":{"tags":{"name":"Commercial Bank of Ceylon PLC","amenity":"bank"},"name":"Commercial Bank of Ceylon PLC","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Ireland":{"tags":{"name":"Bank of Ireland","amenity":"bank"},"name":"Bank of Ireland","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNL":{"tags":{"name":"BNL","amenity":"bank"},"name":"BNL","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Santander":{"tags":{"name":"Banco Santander","amenity":"bank"},"name":"Banco Santander","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Itaú":{"tags":{"name":"Banco Itaú","amenity":"bank"},"name":"Banco Itaú","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/AIB":{"tags":{"name":"AIB","amenity":"bank"},"name":"AIB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BZ WBK":{"tags":{"name":"BZ WBK","amenity":"bank"},"name":"BZ WBK","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco do Brasil":{"tags":{"name":"Banco do Brasil","amenity":"bank"},"name":"Banco do Brasil","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caixa Econômica Federal":{"tags":{"name":"Caixa Econômica Federal","amenity":"bank"},"name":"Caixa Econômica Federal","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Fifth Third Bank":{"tags":{"name":"Fifth Third Bank","amenity":"bank"},"name":"Fifth Third Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Popolare di Vicenza":{"tags":{"name":"Banca Popolare di Vicenza","amenity":"bank"},"name":"Banca Popolare di Vicenza","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Wachovia":{"tags":{"name":"Wachovia","amenity":"bank"},"name":"Wachovia","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/OLB":{"tags":{"name":"OLB","amenity":"bank"},"name":"OLB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/みずほ銀行":{"tags":{"name":"みずほ銀行","amenity":"bank"},"name":"みずほ銀行","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BES":{"tags":{"name":"BES","amenity":"bank"},"name":"BES","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ICICI Bank":{"tags":{"name":"ICICI Bank","amenity":"bank"},"name":"ICICI Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/HDFC Bank":{"tags":{"name":"HDFC Bank","amenity":"bank"},"name":"HDFC Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/La Banque Postale":{"tags":{"name":"La Banque Postale","amenity":"bank"},"name":"La Banque Postale","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Pekao SA":{"tags":{"name":"Pekao SA","amenity":"bank"},"name":"Pekao SA","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Oberbank":{"tags":{"name":"Oberbank","amenity":"bank"},"name":"Oberbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bradesco":{"tags":{"name":"Bradesco","amenity":"bank"},"name":"Bradesco","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Oldenburgische Landesbank":{"tags":{"name":"Oldenburgische Landesbank","amenity":"bank"},"name":"Oldenburgische Landesbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bendigo Bank":{"tags":{"name":"Bendigo Bank","amenity":"bank"},"name":"Bendigo Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Argenta":{"tags":{"name":"Argenta","amenity":"bank"},"name":"Argenta","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/AXA":{"tags":{"name":"AXA","amenity":"bank"},"name":"AXA","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Axis Bank":{"tags":{"name":"Axis Bank","amenity":"bank"},"name":"Axis Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Nación":{"tags":{"name":"Banco Nación","amenity":"bank"},"name":"Banco Nación","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/GE Money Bank":{"tags":{"name":"GE Money Bank","amenity":"bank"},"name":"GE Money Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Альфа-Банк":{"tags":{"name":"Альфа-Банк","amenity":"bank"},"name":"Альфа-Банк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Белагропромбанк":{"tags":{"name":"Белагропромбанк","amenity":"bank"},"name":"Белагропромбанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja Círculo":{"tags":{"name":"Caja Círculo","amenity":"bank"},"name":"Caja Círculo","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Galicia":{"tags":{"name":"Banco Galicia","amenity":"bank"},"name":"Banco Galicia","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Eurobank":{"tags":{"name":"Eurobank","amenity":"bank"},"name":"Eurobank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Intesa":{"tags":{"name":"Banca Intesa","amenity":"bank"},"name":"Banca Intesa","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Canara Bank":{"tags":{"name":"Canara Bank","amenity":"bank"},"name":"Canara Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Cajamar":{"tags":{"name":"Cajamar","amenity":"bank"},"name":"Cajamar","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banamex":{"tags":{"name":"Banamex","amenity":"bank"},"name":"Banamex","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédit Mutuel de Bretagne":{"tags":{"name":"Crédit Mutuel de Bretagne","amenity":"bank"},"name":"Crédit Mutuel de Bretagne","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Davivienda":{"tags":{"name":"Davivienda","amenity":"bank"},"name":"Davivienda","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Spółdzielczy":{"tags":{"name":"Bank Spółdzielczy","amenity":"bank"},"name":"Bank Spółdzielczy","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Credit Agricole":{"tags":{"name":"Credit Agricole","amenity":"bank"},"name":"Credit Agricole","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bankinter":{"tags":{"name":"Bankinter","amenity":"bank"},"name":"Bankinter","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banque Nationale":{"tags":{"name":"Banque Nationale","amenity":"bank"},"name":"Banque Nationale","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of the West":{"tags":{"name":"Bank of the West","amenity":"bank"},"name":"Bank of the West","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Key Bank":{"tags":{"name":"Key Bank","amenity":"bank"},"name":"Key Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Western Union":{"tags":{"name":"Western Union","amenity":"bank"},"name":"Western Union","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Citizens Bank":{"tags":{"name":"Citizens Bank","amenity":"bank"},"name":"Citizens Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ПриватБанк":{"tags":{"name":"ПриватБанк","amenity":"bank"},"name":"ПриватБанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Security Bank":{"tags":{"name":"Security Bank","amenity":"bank"},"name":"Security Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Millenium":{"tags":{"name":"Millenium","amenity":"bank"},"name":"Millenium","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bankia":{"tags":{"name":"Bankia","amenity":"bank"},"name":"Bankia","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/三菱東京UFJ銀行":{"tags":{"name":"三菱東京UFJ銀行","amenity":"bank"},"name":"三菱東京UFJ銀行","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caixa":{"tags":{"name":"Caixa","amenity":"bank"},"name":"Caixa","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Costa Rica":{"tags":{"name":"Banco de Costa Rica","amenity":"bank"},"name":"Banco de Costa Rica","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/SunTrust Bank":{"tags":{"name":"SunTrust Bank","amenity":"bank"},"name":"SunTrust Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Itaú":{"tags":{"name":"Itaú","amenity":"bank"},"name":"Itaú","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PBZ":{"tags":{"name":"PBZ","amenity":"bank"},"name":"PBZ","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/中国工商银行":{"tags":{"name":"中国工商银行","amenity":"bank"},"name":"中国工商银行","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bancolombia":{"tags":{"name":"Bancolombia","amenity":"bank"},"name":"Bancolombia","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Райффайзен Банк Аваль":{"tags":{"name":"Райффайзен Банк Аваль","amenity":"bank"},"name":"Райффайзен Банк Аваль","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bancomer":{"tags":{"name":"Bancomer","amenity":"bank"},"name":"Bancomer","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banorte":{"tags":{"name":"Banorte","amenity":"bank"},"name":"Banorte","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Alior Bank":{"tags":{"name":"Alior Bank","amenity":"bank"},"name":"Alior Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BOC":{"tags":{"name":"BOC","amenity":"bank"},"name":"BOC","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Банк Москвы":{"tags":{"name":"Банк Москвы","amenity":"bank"},"name":"Банк Москвы","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ВТБ":{"tags":{"name":"ВТБ","amenity":"bank"},"name":"ВТБ","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Getin Bank":{"tags":{"name":"Getin Bank","amenity":"bank"},"name":"Getin Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja Duero":{"tags":{"name":"Caja Duero","amenity":"bank"},"name":"Caja Duero","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Regions Bank":{"tags":{"name":"Regions Bank","amenity":"bank"},"name":"Regions Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Росбанк":{"tags":{"name":"Росбанк","amenity":"bank"},"name":"Росбанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Estado":{"tags":{"name":"Banco Estado","amenity":"bank"},"name":"Banco Estado","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BCI":{"tags":{"name":"BCI","amenity":"bank"},"name":"BCI","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/SunTrust":{"tags":{"name":"SunTrust","amenity":"bank"},"name":"SunTrust","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PNC Bank":{"tags":{"name":"PNC Bank","amenity":"bank"},"name":"PNC Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/신한은행":{"tags":{"name":"신한은행","name:en":"Sinhan Bank","amenity":"bank"},"name":"신한은행","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/우리은행":{"tags":{"name":"우리은행","name:en":"Uri Bank","amenity":"bank"},"name":"우리은행","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/국민은행":{"tags":{"name":"국민은행","name:en":"Gungmin Bank","amenity":"bank"},"name":"국민은행","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/중소기업은행":{"tags":{"name":"중소기업은행","name:en":"Industrial Bank of Korea","amenity":"bank"},"name":"중소기업은행","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/광주은행":{"tags":{"name":"광주은행","name:en":"Gwangju Bank","amenity":"bank"},"name":"광주은행","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Газпромбанк":{"tags":{"name":"Газпромбанк","amenity":"bank"},"name":"Газпромбанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/M&T Bank":{"tags":{"name":"M&T Bank","amenity":"bank"},"name":"M&T Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja de Burgos":{"tags":{"name":"Caja de Burgos","amenity":"bank"},"name":"Caja de Burgos","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Santander Totta":{"tags":{"name":"Santander Totta","amenity":"bank"},"name":"Santander Totta","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/УкрСиббанк":{"tags":{"name":"УкрСиббанк","amenity":"bank"},"name":"УкрСиббанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Ощадбанк":{"tags":{"name":"Ощадбанк","amenity":"bank"},"name":"Ощадбанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Уралсиб":{"tags":{"name":"Уралсиб","amenity":"bank"},"name":"Уралсиб","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/りそな銀行":{"tags":{"name":"りそな銀行","name:en":"Mizuho Bank","amenity":"bank"},"name":"りそな銀行","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Ecobank":{"tags":{"name":"Ecobank","amenity":"bank"},"name":"Ecobank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Cajero Automatico Bancared":{"tags":{"name":"Cajero Automatico Bancared","amenity":"bank"},"name":"Cajero Automatico Bancared","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Промсвязьбанк":{"tags":{"name":"Промсвязьбанк","amenity":"bank"},"name":"Промсвязьбанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/三井住友銀行":{"tags":{"name":"三井住友銀行","amenity":"bank"},"name":"三井住友銀行","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Provincia":{"tags":{"name":"Banco Provincia","amenity":"bank"},"name":"Banco Provincia","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BB&T":{"tags":{"name":"BB&T","amenity":"bank"},"name":"BB&T","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Возрождение":{"tags":{"name":"Возрождение","amenity":"bank"},"name":"Возрождение","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Capital One":{"tags":{"name":"Capital One","amenity":"bank"},"name":"Capital One","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/横浜銀行":{"tags":{"name":"横浜銀行","amenity":"bank"},"name":"横浜銀行","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Mandiri":{"tags":{"name":"Bank Mandiri","amenity":"bank"},"name":"Bank Mandiri","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de la Nación":{"tags":{"name":"Banco de la Nación","amenity":"bank"},"name":"Banco de la Nación","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco G&T Continental":{"tags":{"name":"Banco G&T Continental","amenity":"bank"},"name":"Banco G&T Continental","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Peoples Bank":{"tags":{"name":"Peoples Bank","amenity":"bank"},"name":"Peoples Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/工商银行":{"tags":{"name":"工商银行","amenity":"bank"},"name":"工商银行","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Совкомбанк":{"tags":{"name":"Совкомбанк","amenity":"bank"},"name":"Совкомбанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Provincial":{"tags":{"name":"Provincial","amenity":"bank"},"name":"Provincial","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Desarrollo Banrural":{"tags":{"name":"Banco de Desarrollo Banrural","amenity":"bank"},"name":"Banco de Desarrollo Banrural","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Bradesco":{"tags":{"name":"Banco Bradesco","amenity":"bank"},"name":"Banco Bradesco","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bicentenario":{"tags":{"name":"Bicentenario","amenity":"bank"},"name":"Bicentenario","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ლიბერთი ბანკი":{"tags":{"name":"ლიბერთი ბანკი","name:en":"Liberty Bank","amenity":"bank"},"name":"ლიბერთი ბანკი","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banesco":{"tags":{"name":"Banesco","amenity":"bank"},"name":"Banesco","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Mercantil":{"tags":{"name":"Mercantil","amenity":"bank"},"name":"Mercantil","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank BRI":{"tags":{"name":"Bank BRI","amenity":"bank"},"name":"Bank BRI","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Del Tesoro":{"tags":{"name":"Del Tesoro","amenity":"bank"},"name":"Del Tesoro","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/하나은행":{"tags":{"name":"하나은행","amenity":"bank"},"name":"하나은행","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CityCommerce Bank":{"tags":{"name":"CityCommerce Bank","amenity":"bank"},"name":"CityCommerce Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/De Venezuela":{"tags":{"name":"De Venezuela","amenity":"bank"},"name":"De Venezuela","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/car_rental/Europcar":{"tags":{"name":"Europcar","amenity":"car_rental"},"name":"Europcar","icon":"car","geometry":["point","area"],"fields":["operator"],"suggestion":true},"amenity/car_rental/Budget":{"tags":{"name":"Budget","amenity":"car_rental"},"name":"Budget","icon":"car","geometry":["point","area"],"fields":["operator"],"suggestion":true},"amenity/car_rental/Sixt":{"tags":{"name":"Sixt","amenity":"car_rental"},"name":"Sixt","icon":"car","geometry":["point","area"],"fields":["operator"],"suggestion":true},"amenity/car_rental/Avis":{"tags":{"name":"Avis","amenity":"car_rental"},"name":"Avis","icon":"car","geometry":["point","area"],"fields":["operator"],"suggestion":true},"amenity/car_rental/Hertz":{"tags":{"name":"Hertz","amenity":"car_rental"},"name":"Hertz","icon":"car","geometry":["point","area"],"fields":["operator"],"suggestion":true},"amenity/car_rental/Enterprise":{"tags":{"name":"Enterprise","amenity":"car_rental"},"name":"Enterprise","icon":"car","geometry":["point","area"],"fields":["operator"],"suggestion":true},"amenity/car_rental/stadtmobil CarSharing-Station":{"tags":{"name":"stadtmobil CarSharing-Station","amenity":"car_rental"},"name":"stadtmobil CarSharing-Station","icon":"car","geometry":["point","area"],"fields":["operator"],"suggestion":true},"amenity/pharmacy/Rowlands Pharmacy":{"tags":{"name":"Rowlands Pharmacy","amenity":"pharmacy"},"name":"Rowlands Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Boots":{"tags":{"name":"Boots","amenity":"pharmacy"},"name":"Boots","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Marien-Apotheke":{"tags":{"name":"Marien-Apotheke","amenity":"pharmacy"},"name":"Marien-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Mercury Drug":{"tags":{"name":"Mercury Drug","amenity":"pharmacy"},"name":"Mercury Drug","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Löwen-Apotheke":{"tags":{"name":"Löwen-Apotheke","amenity":"pharmacy"},"name":"Löwen-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Superdrug":{"tags":{"name":"Superdrug","amenity":"pharmacy"},"name":"Superdrug","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Sonnen-Apotheke":{"tags":{"name":"Sonnen-Apotheke","amenity":"pharmacy"},"name":"Sonnen-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Rathaus-Apotheke":{"tags":{"name":"Rathaus-Apotheke","amenity":"pharmacy"},"name":"Rathaus-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Engel-Apotheke":{"tags":{"name":"Engel-Apotheke","amenity":"pharmacy"},"name":"Engel-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Hirsch-Apotheke":{"tags":{"name":"Hirsch-Apotheke","amenity":"pharmacy"},"name":"Hirsch-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Stern-Apotheke":{"tags":{"name":"Stern-Apotheke","amenity":"pharmacy"},"name":"Stern-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Lloyds Pharmacy":{"tags":{"name":"Lloyds Pharmacy","amenity":"pharmacy"},"name":"Lloyds Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Rosen-Apotheke":{"tags":{"name":"Rosen-Apotheke","amenity":"pharmacy"},"name":"Rosen-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Stadt-Apotheke":{"tags":{"name":"Stadt-Apotheke","amenity":"pharmacy"},"name":"Stadt-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Markt-Apotheke":{"tags":{"name":"Markt-Apotheke","amenity":"pharmacy"},"name":"Markt-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Аптека":{"tags":{"name":"Аптека","amenity":"pharmacy"},"name":"Аптека","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Pharmasave":{"tags":{"name":"Pharmasave","amenity":"pharmacy"},"name":"Pharmasave","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Brunnen-Apotheke":{"tags":{"name":"Brunnen-Apotheke","amenity":"pharmacy"},"name":"Brunnen-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Shoppers Drug Mart":{"tags":{"name":"Shoppers Drug Mart","amenity":"pharmacy"},"name":"Shoppers Drug Mart","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Apotheke am Markt":{"tags":{"name":"Apotheke am Markt","amenity":"pharmacy"},"name":"Apotheke am Markt","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Alte Apotheke":{"tags":{"name":"Alte Apotheke","amenity":"pharmacy"},"name":"Alte Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Neue Apotheke":{"tags":{"name":"Neue Apotheke","amenity":"pharmacy"},"name":"Neue Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Gintarinė vaistinė":{"tags":{"name":"Gintarinė vaistinė","amenity":"pharmacy"},"name":"Gintarinė vaistinė","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Rats-Apotheke":{"tags":{"name":"Rats-Apotheke","amenity":"pharmacy"},"name":"Rats-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Adler Apotheke":{"tags":{"name":"Adler Apotheke","amenity":"pharmacy"},"name":"Adler Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Pharmacie Centrale":{"tags":{"name":"Pharmacie Centrale","amenity":"pharmacy"},"name":"Pharmacie Centrale","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Walgreens":{"tags":{"name":"Walgreens","amenity":"pharmacy"},"name":"Walgreens","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Rite Aid":{"tags":{"name":"Rite Aid","amenity":"pharmacy"},"name":"Rite Aid","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Apotheke":{"tags":{"name":"Apotheke","amenity":"pharmacy"},"name":"Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Linden-Apotheke":{"tags":{"name":"Linden-Apotheke","amenity":"pharmacy"},"name":"Linden-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Bahnhof-Apotheke":{"tags":{"name":"Bahnhof-Apotheke","amenity":"pharmacy"},"name":"Bahnhof-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Burg-Apotheke":{"tags":{"name":"Burg-Apotheke","amenity":"pharmacy"},"name":"Burg-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Jean Coutu":{"tags":{"name":"Jean Coutu","amenity":"pharmacy"},"name":"Jean Coutu","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Pharmaprix":{"tags":{"name":"Pharmaprix","amenity":"pharmacy"},"name":"Pharmaprix","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Farmacias Ahumada":{"tags":{"name":"Farmacias Ahumada","amenity":"pharmacy"},"name":"Farmacias Ahumada","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Farmacia Comunale":{"tags":{"name":"Farmacia Comunale","amenity":"pharmacy"},"name":"Farmacia Comunale","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Farmacias Cruz Verde":{"tags":{"name":"Farmacias Cruz Verde","amenity":"pharmacy"},"name":"Farmacias Cruz Verde","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Cruz Verde":{"tags":{"name":"Cruz Verde","amenity":"pharmacy"},"name":"Cruz Verde","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Hubertus Apotheke":{"tags":{"name":"Hubertus Apotheke","amenity":"pharmacy"},"name":"Hubertus Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/CVS":{"tags":{"name":"CVS","amenity":"pharmacy"},"name":"CVS","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Farmacias SalcoBrand":{"tags":{"name":"Farmacias SalcoBrand","amenity":"pharmacy"},"name":"Farmacias SalcoBrand","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Фармация":{"tags":{"name":"Фармация","amenity":"pharmacy"},"name":"Фармация","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Bären-Apotheke":{"tags":{"name":"Bären-Apotheke","amenity":"pharmacy"},"name":"Bären-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Clicks":{"tags":{"name":"Clicks","amenity":"pharmacy"},"name":"Clicks","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/セイジョー":{"tags":{"name":"セイジョー","amenity":"pharmacy"},"name":"セイジョー","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/マツモトキヨシ":{"tags":{"name":"マツモトキヨシ","amenity":"pharmacy"},"name":"マツモトキヨシ","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Dr. Max":{"tags":{"name":"Dr. Max","amenity":"pharmacy"},"name":"Dr. Max","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Вита":{"tags":{"name":"Вита","amenity":"pharmacy"},"name":"Вита","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/サンドラッグ":{"tags":{"name":"サンドラッグ","amenity":"pharmacy"},"name":"サンドラッグ","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Apteka":{"tags":{"name":"Apteka","amenity":"pharmacy"},"name":"Apteka","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Первая помощь":{"tags":{"name":"Первая помощь","amenity":"pharmacy"},"name":"Первая помощь","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Ригла":{"tags":{"name":"Ригла","amenity":"pharmacy"},"name":"Ригла","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Имплозия":{"tags":{"name":"Имплозия","amenity":"pharmacy"},"name":"Имплозия","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Kinney Drugs":{"tags":{"name":"Kinney Drugs","amenity":"pharmacy"},"name":"Kinney Drugs","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Классика":{"tags":{"name":"Классика","amenity":"pharmacy"},"name":"Классика","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Ljekarna":{"tags":{"name":"Ljekarna","amenity":"pharmacy"},"name":"Ljekarna","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/SalcoBrand":{"tags":{"name":"SalcoBrand","amenity":"pharmacy"},"name":"SalcoBrand","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Аптека 36,6":{"tags":{"name":"Аптека 36,6","amenity":"pharmacy"},"name":"Аптека 36,6","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Фармакор":{"tags":{"name":"Фармакор","amenity":"pharmacy"},"name":"Фармакор","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/スギ薬局":{"tags":{"name":"スギ薬局","amenity":"pharmacy"},"name":"スギ薬局","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Аптечный пункт":{"tags":{"name":"Аптечный пункт","amenity":"pharmacy"},"name":"Аптечный пункт","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Невис":{"tags":{"name":"Невис","amenity":"pharmacy"},"name":"Невис","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/トモズ (Tomod's)":{"tags":{"name":"トモズ (Tomod's)","amenity":"pharmacy"},"name":"トモズ (Tomod's)","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Eurovaistinė":{"tags":{"name":"Eurovaistinė","amenity":"pharmacy"},"name":"Eurovaistinė","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Farmacity":{"tags":{"name":"Farmacity","amenity":"pharmacy"},"name":"Farmacity","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/аптека":{"tags":{"name":"аптека","amenity":"pharmacy"},"name":"аптека","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/The Generics Pharmacy":{"tags":{"name":"The Generics Pharmacy","amenity":"pharmacy"},"name":"The Generics Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Farmatodo":{"tags":{"name":"Farmatodo","amenity":"pharmacy"},"name":"Farmatodo","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Duane Reade":{"tags":{"name":"Duane Reade","amenity":"pharmacy"},"name":"Duane Reade","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Фармленд":{"tags":{"name":"Фармленд","amenity":"pharmacy"},"name":"Фармленд","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/ドラッグてらしま (Drug Terashima)":{"tags":{"name":"ドラッグてらしま (Drug Terashima)","amenity":"pharmacy"},"name":"ドラッグてらしま (Drug Terashima)","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Арніка":{"tags":{"name":"Арніка","amenity":"pharmacy"},"name":"Арніка","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/ავერსი (Aversi)":{"tags":{"name":"ავერსი (Aversi)","amenity":"pharmacy"},"name":"ავერსი (Aversi)","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Farmahorro":{"tags":{"name":"Farmahorro","amenity":"pharmacy"},"name":"Farmahorro","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/cafe/Starbucks":{"tags":{"name":"Starbucks","cuisine":"coffee_shop","amenity":"cafe"},"name":"Starbucks","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Cafeteria":{"tags":{"name":"Cafeteria","amenity":"cafe"},"name":"Cafeteria","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Costa":{"tags":{"name":"Costa","amenity":"cafe"},"name":"Costa","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Caffè Nero":{"tags":{"name":"Caffè Nero","amenity":"cafe"},"name":"Caffè Nero","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Кафе":{"tags":{"name":"Кафе","amenity":"cafe"},"name":"Кафе","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Café Central":{"tags":{"name":"Café Central","amenity":"cafe"},"name":"Café Central","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Second Cup":{"tags":{"name":"Second Cup","amenity":"cafe"},"name":"Second Cup","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Dunkin Donuts":{"tags":{"name":"Dunkin Donuts","cuisine":"donut","amenity":"cafe"},"name":"Dunkin Donuts","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Espresso House":{"tags":{"name":"Espresso House","amenity":"cafe"},"name":"Espresso House","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Segafredo":{"tags":{"name":"Segafredo","amenity":"cafe"},"name":"Segafredo","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Coffee Time":{"tags":{"name":"Coffee Time","amenity":"cafe"},"name":"Coffee Time","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Cafe Coffee Day":{"tags":{"name":"Cafe Coffee Day","amenity":"cafe"},"name":"Cafe Coffee Day","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Eiscafe Venezia":{"tags":{"name":"Eiscafe Venezia","amenity":"cafe"},"name":"Eiscafe Venezia","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/スターバックス":{"tags":{"name":"スターバックス","name:en":"Starbucks","amenity":"cafe"},"name":"スターバックス","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Шоколадница":{"tags":{"name":"Шоколадница","amenity":"cafe"},"name":"Шоколадница","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Pret A Manger":{"tags":{"name":"Pret A Manger","amenity":"cafe"},"name":"Pret A Manger","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Столовая":{"tags":{"name":"Столовая","amenity":"cafe"},"name":"Столовая","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/ドトール":{"tags":{"name":"ドトール","name:en":"DOUTOR","amenity":"cafe"},"name":"ドトール","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Tchibo":{"tags":{"name":"Tchibo","amenity":"cafe"},"name":"Tchibo","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Кофе Хауз":{"tags":{"name":"Кофе Хауз","amenity":"cafe"},"name":"Кофе Хауз","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Caribou Coffee":{"tags":{"name":"Caribou Coffee","amenity":"cafe"},"name":"Caribou Coffee","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Уют":{"tags":{"name":"Уют","amenity":"cafe"},"name":"Уют","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Шашлычная":{"tags":{"name":"Шашлычная","amenity":"cafe"},"name":"Шашлычная","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/คาเฟ่ อเมซอน":{"tags":{"name":"คาเฟ่ อเมซอน","amenity":"cafe"},"name":"คาเฟ่ อเมซอน","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Traveler's Coffee":{"tags":{"name":"Traveler's Coffee","amenity":"cafe"},"name":"Traveler's Coffee","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/カフェ・ド・クリエ":{"tags":{"name":"カフェ・ド・クリエ","name:en":"Cafe de CRIE","amenity":"cafe"},"name":"カフェ・ド・クリエ","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Cafe Amazon":{"tags":{"name":"Cafe Amazon","amenity":"cafe"},"name":"Cafe Amazon","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"shop/supermarket/Budgens":{"tags":{"name":"Budgens","shop":"supermarket"},"name":"Budgens","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Morrisons":{"tags":{"name":"Morrisons","shop":"supermarket"},"name":"Morrisons","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Interspar":{"tags":{"name":"Interspar","shop":"supermarket"},"name":"Interspar","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Merkur":{"tags":{"name":"Merkur","shop":"supermarket"},"name":"Merkur","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Sainsbury's":{"tags":{"name":"Sainsbury's","shop":"supermarket"},"name":"Sainsbury's","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Lidl":{"tags":{"name":"Lidl","shop":"supermarket"},"name":"Lidl","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Edeka":{"tags":{"name":"Edeka","shop":"supermarket"},"name":"Edeka","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Coles":{"tags":{"name":"Coles","shop":"supermarket"},"name":"Coles","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Iceland":{"tags":{"name":"Iceland","shop":"supermarket"},"name":"Iceland","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Coop":{"tags":{"name":"Coop","shop":"supermarket"},"name":"Coop","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Tesco":{"tags":{"name":"Tesco","shop":"supermarket"},"name":"Tesco","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Woolworths":{"tags":{"name":"Woolworths","shop":"supermarket"},"name":"Woolworths","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Zielpunkt":{"tags":{"name":"Zielpunkt","shop":"supermarket"},"name":"Zielpunkt","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Nahkauf":{"tags":{"name":"Nahkauf","shop":"supermarket"},"name":"Nahkauf","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Billa":{"tags":{"name":"Billa","shop":"supermarket"},"name":"Billa","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Kaufland":{"tags":{"name":"Kaufland","shop":"supermarket"},"name":"Kaufland","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Plus":{"tags":{"name":"Plus","shop":"supermarket"},"name":"Plus","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/ALDI":{"tags":{"name":"ALDI","shop":"supermarket"},"name":"ALDI","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Checkers":{"tags":{"name":"Checkers","shop":"supermarket"},"name":"Checkers","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Tesco Metro":{"tags":{"name":"Tesco Metro","shop":"supermarket"},"name":"Tesco Metro","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/NP":{"tags":{"name":"NP","shop":"supermarket"},"name":"NP","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Penny":{"tags":{"name":"Penny","shop":"supermarket"},"name":"Penny","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Norma":{"tags":{"name":"Norma","shop":"supermarket"},"name":"Norma","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Asda":{"tags":{"name":"Asda","shop":"supermarket"},"name":"Asda","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Netto":{"tags":{"name":"Netto","shop":"supermarket"},"name":"Netto","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Rewe":{"tags":{"name":"Rewe","shop":"supermarket"},"name":"Rewe","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Aldi Süd":{"tags":{"name":"Aldi Süd","shop":"supermarket"},"name":"Aldi Süd","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Real":{"tags":{"name":"Real","shop":"supermarket"},"name":"Real","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/King Soopers":{"tags":{"name":"King Soopers","shop":"supermarket"},"name":"King Soopers","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Kiwi":{"tags":{"name":"Kiwi","shop":"supermarket"},"name":"Kiwi","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Pick n Pay":{"tags":{"name":"Pick n Pay","shop":"supermarket"},"name":"Pick n Pay","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/ICA":{"tags":{"name":"ICA","shop":"supermarket"},"name":"ICA","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Tengelmann":{"tags":{"name":"Tengelmann","shop":"supermarket"},"name":"Tengelmann","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Carrefour":{"tags":{"name":"Carrefour","shop":"supermarket"},"name":"Carrefour","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Waitrose":{"tags":{"name":"Waitrose","shop":"supermarket"},"name":"Waitrose","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Spar":{"tags":{"name":"Spar","shop":"supermarket"},"name":"Spar","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Hofer":{"tags":{"name":"Hofer","shop":"supermarket"},"name":"Hofer","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/M-Preis":{"tags":{"name":"M-Preis","shop":"supermarket"},"name":"M-Preis","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/tegut":{"tags":{"name":"tegut","shop":"supermarket"},"name":"tegut","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Sainsbury's Local":{"tags":{"name":"Sainsbury's Local","shop":"supermarket"},"name":"Sainsbury's Local","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/E-Center":{"tags":{"name":"E-Center","shop":"supermarket"},"name":"E-Center","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Aldi Nord":{"tags":{"name":"Aldi Nord","shop":"supermarket"},"name":"Aldi Nord","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/nahkauf":{"tags":{"name":"nahkauf","shop":"supermarket"},"name":"nahkauf","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Meijer":{"tags":{"name":"Meijer","shop":"supermarket"},"name":"Meijer","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Safeway":{"tags":{"name":"Safeway","shop":"supermarket"},"name":"Safeway","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Costco":{"tags":{"name":"Costco","shop":"supermarket"},"name":"Costco","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Albert":{"tags":{"name":"Albert","shop":"supermarket"},"name":"Albert","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Jumbo":{"tags":{"name":"Jumbo","shop":"supermarket"},"name":"Jumbo","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Shoprite":{"tags":{"name":"Shoprite","shop":"supermarket"},"name":"Shoprite","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/MPreis":{"tags":{"name":"MPreis","shop":"supermarket"},"name":"MPreis","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Penny Market":{"tags":{"name":"Penny Market","shop":"supermarket"},"name":"Penny Market","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Tesco Extra":{"tags":{"name":"Tesco Extra","shop":"supermarket"},"name":"Tesco Extra","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Albert Heijn":{"tags":{"name":"Albert Heijn","shop":"supermarket"},"name":"Albert Heijn","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/IGA":{"tags":{"name":"IGA","shop":"supermarket"},"name":"IGA","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Super U":{"tags":{"name":"Super U","shop":"supermarket"},"name":"Super U","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Metro":{"tags":{"name":"Metro","shop":"supermarket"},"name":"Metro","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Neukauf":{"tags":{"name":"Neukauf","shop":"supermarket"},"name":"Neukauf","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Migros":{"tags":{"name":"Migros","shop":"supermarket"},"name":"Migros","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Marktkauf":{"tags":{"name":"Marktkauf","shop":"supermarket"},"name":"Marktkauf","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Delikatesy Centrum":{"tags":{"name":"Delikatesy Centrum","shop":"supermarket"},"name":"Delikatesy Centrum","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/C1000":{"tags":{"name":"C1000","shop":"supermarket"},"name":"C1000","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Hoogvliet":{"tags":{"name":"Hoogvliet","shop":"supermarket"},"name":"Hoogvliet","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Food Basics":{"tags":{"name":"Food Basics","shop":"supermarket"},"name":"Food Basics","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Casino":{"tags":{"name":"Casino","shop":"supermarket"},"name":"Casino","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Penny Markt":{"tags":{"name":"Penny Markt","shop":"supermarket"},"name":"Penny Markt","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Giant":{"tags":{"name":"Giant","shop":"supermarket"},"name":"Giant","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Rema 1000":{"tags":{"name":"Rema 1000","shop":"supermarket"},"name":"Rema 1000","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Kaufpark":{"tags":{"name":"Kaufpark","shop":"supermarket"},"name":"Kaufpark","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/ALDI SÜD":{"tags":{"name":"ALDI SÜD","shop":"supermarket"},"name":"ALDI SÜD","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Simply Market":{"tags":{"name":"Simply Market","shop":"supermarket"},"name":"Simply Market","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Konzum":{"tags":{"name":"Konzum","shop":"supermarket"},"name":"Konzum","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Carrefour Express":{"tags":{"name":"Carrefour Express","shop":"supermarket"},"name":"Carrefour Express","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Eurospar":{"tags":{"name":"Eurospar","shop":"supermarket"},"name":"Eurospar","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Mercator":{"tags":{"name":"Mercator","shop":"supermarket"},"name":"Mercator","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Famila":{"tags":{"name":"Famila","shop":"supermarket"},"name":"Famila","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Hemköp":{"tags":{"name":"Hemköp","shop":"supermarket"},"name":"Hemköp","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/real,-":{"tags":{"name":"real,-","shop":"supermarket"},"name":"real,-","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Markant":{"tags":{"name":"Markant","shop":"supermarket"},"name":"Markant","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Volg":{"tags":{"name":"Volg","shop":"supermarket"},"name":"Volg","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Leader Price":{"tags":{"name":"Leader Price","shop":"supermarket"},"name":"Leader Price","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Treff 3000":{"tags":{"name":"Treff 3000","shop":"supermarket"},"name":"Treff 3000","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/SuperBrugsen":{"tags":{"name":"SuperBrugsen","shop":"supermarket"},"name":"SuperBrugsen","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Kaiser's":{"tags":{"name":"Kaiser's","shop":"supermarket"},"name":"Kaiser's","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/K+K":{"tags":{"name":"K+K","shop":"supermarket"},"name":"K+K","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Unimarkt":{"tags":{"name":"Unimarkt","shop":"supermarket"},"name":"Unimarkt","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Carrefour City":{"tags":{"name":"Carrefour City","shop":"supermarket"},"name":"Carrefour City","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Sobeys":{"tags":{"name":"Sobeys","shop":"supermarket"},"name":"Sobeys","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/S-Market":{"tags":{"name":"S-Market","shop":"supermarket"},"name":"S-Market","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Combi":{"tags":{"name":"Combi","shop":"supermarket"},"name":"Combi","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Denner":{"tags":{"name":"Denner","shop":"supermarket"},"name":"Denner","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Konsum":{"tags":{"name":"Konsum","shop":"supermarket"},"name":"Konsum","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Franprix":{"tags":{"name":"Franprix","shop":"supermarket"},"name":"Franprix","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Monoprix":{"tags":{"name":"Monoprix","shop":"supermarket"},"name":"Monoprix","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Diska":{"tags":{"name":"Diska","shop":"supermarket"},"name":"Diska","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/PENNY":{"tags":{"name":"PENNY","shop":"supermarket"},"name":"PENNY","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Dia":{"tags":{"name":"Dia","shop":"supermarket"},"name":"Dia","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Giant Eagle":{"tags":{"name":"Giant Eagle","shop":"supermarket"},"name":"Giant Eagle","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/NORMA":{"tags":{"name":"NORMA","shop":"supermarket"},"name":"NORMA","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/AD Delhaize":{"tags":{"name":"AD Delhaize","shop":"supermarket"},"name":"AD Delhaize","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Auchan":{"tags":{"name":"Auchan","shop":"supermarket"},"name":"Auchan","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Mercadona":{"tags":{"name":"Mercadona","shop":"supermarket"},"name":"Mercadona","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Consum":{"tags":{"name":"Consum","shop":"supermarket"},"name":"Consum","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Carrefour Market":{"tags":{"name":"Carrefour Market","shop":"supermarket"},"name":"Carrefour Market","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Whole Foods":{"tags":{"name":"Whole Foods","shop":"supermarket"},"name":"Whole Foods","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Pam":{"tags":{"name":"Pam","shop":"supermarket"},"name":"Pam","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/sky":{"tags":{"name":"sky","shop":"supermarket"},"name":"sky","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Despar":{"tags":{"name":"Despar","shop":"supermarket"},"name":"Despar","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Eroski":{"tags":{"name":"Eroski","shop":"supermarket"},"name":"Eroski","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Maxi":{"tags":{"name":"Maxi","shop":"supermarket"},"name":"Maxi","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Colruyt":{"tags":{"name":"Colruyt","shop":"supermarket"},"name":"Colruyt","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/The Co-operative":{"tags":{"name":"The Co-operative","shop":"supermarket"},"name":"The Co-operative","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Intermarché":{"tags":{"name":"Intermarché","shop":"supermarket"},"name":"Intermarché","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Delhaize":{"tags":{"name":"Delhaize","shop":"supermarket"},"name":"Delhaize","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/CBA":{"tags":{"name":"CBA","shop":"supermarket"},"name":"CBA","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Shopi":{"tags":{"name":"Shopi","shop":"supermarket"},"name":"Shopi","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Walmart":{"tags":{"name":"Walmart","shop":"supermarket"},"name":"Walmart","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Kroger":{"tags":{"name":"Kroger","shop":"supermarket"},"name":"Kroger","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Albertsons":{"tags":{"name":"Albertsons","shop":"supermarket"},"name":"Albertsons","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Trader Joe's":{"tags":{"name":"Trader Joe's","shop":"supermarket"},"name":"Trader Joe's","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Feneberg":{"tags":{"name":"Feneberg","shop":"supermarket"},"name":"Feneberg","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/denn's Biomarkt":{"tags":{"name":"denn's Biomarkt","shop":"supermarket"},"name":"denn's Biomarkt","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Kvickly":{"tags":{"name":"Kvickly","shop":"supermarket"},"name":"Kvickly","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Makro":{"tags":{"name":"Makro","shop":"supermarket"},"name":"Makro","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Dico":{"tags":{"name":"Dico","shop":"supermarket"},"name":"Dico","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Nah & Frisch":{"tags":{"name":"Nah & Frisch","shop":"supermarket"},"name":"Nah & Frisch","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Champion":{"tags":{"name":"Champion","shop":"supermarket"},"name":"Champion","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/ICA Supermarket":{"tags":{"name":"ICA Supermarket","shop":"supermarket"},"name":"ICA Supermarket","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Fakta":{"tags":{"name":"Fakta","shop":"supermarket"},"name":"Fakta","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Магнит":{"tags":{"name":"Магнит","shop":"supermarket"},"name":"Магнит","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Caprabo":{"tags":{"name":"Caprabo","shop":"supermarket"},"name":"Caprabo","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Famiglia Cooperativa":{"tags":{"name":"Famiglia Cooperativa","shop":"supermarket"},"name":"Famiglia Cooperativa","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Народная 7Я семьЯ":{"tags":{"name":"Народная 7Я семьЯ","shop":"supermarket"},"name":"Народная 7Я семьЯ","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Esselunga":{"tags":{"name":"Esselunga","shop":"supermarket"},"name":"Esselunga","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Maxima":{"tags":{"name":"Maxima","shop":"supermarket"},"name":"Maxima","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Wasgau":{"tags":{"name":"Wasgau","shop":"supermarket"},"name":"Wasgau","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Pingo Doce":{"tags":{"name":"Pingo Doce","shop":"supermarket"},"name":"Pingo Doce","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Match":{"tags":{"name":"Match","shop":"supermarket"},"name":"Match","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Profi":{"tags":{"name":"Profi","shop":"supermarket"},"name":"Profi","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Lider":{"tags":{"name":"Lider","shop":"supermarket"},"name":"Lider","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Unimarc":{"tags":{"name":"Unimarc","shop":"supermarket"},"name":"Unimarc","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/The Co-operative Food":{"tags":{"name":"The Co-operative Food","shop":"supermarket"},"name":"The Co-operative Food","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Santa Isabel":{"tags":{"name":"Santa Isabel","shop":"supermarket"},"name":"Santa Isabel","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Седьмой континент":{"tags":{"name":"Седьмой континент","shop":"supermarket"},"name":"Седьмой континент","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/HIT":{"tags":{"name":"HIT","shop":"supermarket"},"name":"HIT","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Rimi":{"tags":{"name":"Rimi","shop":"supermarket"},"name":"Rimi","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Conad":{"tags":{"name":"Conad","shop":"supermarket"},"name":"Conad","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Фуршет":{"tags":{"name":"Фуршет","shop":"supermarket"},"name":"Фуршет","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Willys":{"tags":{"name":"Willys","shop":"supermarket"},"name":"Willys","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Farmfoods":{"tags":{"name":"Farmfoods","shop":"supermarket"},"name":"Farmfoods","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/U Express":{"tags":{"name":"U Express","shop":"supermarket"},"name":"U Express","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Фора":{"tags":{"name":"Фора","shop":"supermarket"},"name":"Фора","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Dunnes Stores":{"tags":{"name":"Dunnes Stores","shop":"supermarket"},"name":"Dunnes Stores","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Сільпо":{"tags":{"name":"Сільпо","shop":"supermarket"},"name":"Сільпо","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/マルエツ":{"tags":{"name":"マルエツ","shop":"supermarket"},"name":"マルエツ","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Piggly Wiggly":{"tags":{"name":"Piggly Wiggly","shop":"supermarket"},"name":"Piggly Wiggly","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Crai":{"tags":{"name":"Crai","shop":"supermarket"},"name":"Crai","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/El Árbol":{"tags":{"name":"El Árbol","shop":"supermarket"},"name":"El Árbol","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Centre Commercial E. Leclerc":{"tags":{"name":"Centre Commercial E. Leclerc","shop":"supermarket"},"name":"Centre Commercial E. Leclerc","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Foodland":{"tags":{"name":"Foodland","shop":"supermarket"},"name":"Foodland","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Super Brugsen":{"tags":{"name":"Super Brugsen","shop":"supermarket"},"name":"Super Brugsen","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Дикси":{"tags":{"name":"Дикси","shop":"supermarket"},"name":"Дикси","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Пятёрочка":{"tags":{"name":"Пятёрочка","shop":"supermarket"},"name":"Пятёрочка","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Publix":{"tags":{"name":"Publix","shop":"supermarket"},"name":"Publix","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Føtex":{"tags":{"name":"Føtex","shop":"supermarket"},"name":"Føtex","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/coop":{"tags":{"name":"coop","shop":"supermarket"},"name":"coop","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Coop Konsum":{"tags":{"name":"Coop Konsum","shop":"supermarket"},"name":"Coop Konsum","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Carrefour Contact":{"tags":{"name":"Carrefour Contact","shop":"supermarket"},"name":"Carrefour Contact","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/No Frills":{"tags":{"name":"No Frills","shop":"supermarket"},"name":"No Frills","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Plodine":{"tags":{"name":"Plodine","shop":"supermarket"},"name":"Plodine","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/ADEG":{"tags":{"name":"ADEG","shop":"supermarket"},"name":"ADEG","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Minipreço":{"tags":{"name":"Minipreço","shop":"supermarket"},"name":"Minipreço","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Biedronka":{"tags":{"name":"Biedronka","shop":"supermarket"},"name":"Biedronka","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Eurospin":{"tags":{"name":"Eurospin","shop":"supermarket"},"name":"Eurospin","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Семья":{"tags":{"name":"Семья","shop":"supermarket"},"name":"Семья","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Gadis":{"tags":{"name":"Gadis","shop":"supermarket"},"name":"Gadis","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Евроопт":{"tags":{"name":"Евроопт","shop":"supermarket"},"name":"Евроопт","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Квартал":{"tags":{"name":"Квартал","shop":"supermarket"},"name":"Квартал","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/New World":{"tags":{"name":"New World","shop":"supermarket"},"name":"New World","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Countdown":{"tags":{"name":"Countdown","shop":"supermarket"},"name":"Countdown","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Reliance Fresh":{"tags":{"name":"Reliance Fresh","shop":"supermarket"},"name":"Reliance Fresh","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Stokrotka":{"tags":{"name":"Stokrotka","shop":"supermarket"},"name":"Stokrotka","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Coop Jednota":{"tags":{"name":"Coop Jednota","shop":"supermarket"},"name":"Coop Jednota","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Fred Meyer":{"tags":{"name":"Fred Meyer","shop":"supermarket"},"name":"Fred Meyer","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Irma":{"tags":{"name":"Irma","shop":"supermarket"},"name":"Irma","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Continente":{"tags":{"name":"Continente","shop":"supermarket"},"name":"Continente","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Price Chopper":{"tags":{"name":"Price Chopper","shop":"supermarket"},"name":"Price Chopper","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Game":{"tags":{"name":"Game","shop":"supermarket"},"name":"Game","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Soriana":{"tags":{"name":"Soriana","shop":"supermarket"},"name":"Soriana","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Alimerka":{"tags":{"name":"Alimerka","shop":"supermarket"},"name":"Alimerka","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Piotr i Paweł":{"tags":{"name":"Piotr i Paweł","shop":"supermarket"},"name":"Piotr i Paweł","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Перекресток":{"tags":{"name":"Перекресток","shop":"supermarket"},"name":"Перекресток","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Maxima X":{"tags":{"name":"Maxima X","shop":"supermarket"},"name":"Maxima X","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Карусель":{"tags":{"name":"Карусель","shop":"supermarket"},"name":"Карусель","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/ALDI Nord":{"tags":{"name":"ALDI Nord","shop":"supermarket"},"name":"ALDI Nord","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Condis":{"tags":{"name":"Condis","shop":"supermarket"},"name":"Condis","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Sam's Club":{"tags":{"name":"Sam's Club","shop":"supermarket"},"name":"Sam's Club","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Копейка":{"tags":{"name":"Копейка","shop":"supermarket"},"name":"Копейка","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Géant Casino":{"tags":{"name":"Géant Casino","shop":"supermarket"},"name":"Géant Casino","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/ASDA":{"tags":{"name":"ASDA","shop":"supermarket"},"name":"ASDA","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Intermarche":{"tags":{"name":"Intermarche","shop":"supermarket"},"name":"Intermarche","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Stop & Shop":{"tags":{"name":"Stop & Shop","shop":"supermarket"},"name":"Stop & Shop","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Food Lion":{"tags":{"name":"Food Lion","shop":"supermarket"},"name":"Food Lion","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Harris Teeter":{"tags":{"name":"Harris Teeter","shop":"supermarket"},"name":"Harris Teeter","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Foodworks":{"tags":{"name":"Foodworks","shop":"supermarket"},"name":"Foodworks","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Polo Market":{"tags":{"name":"Polo Market","shop":"supermarket"},"name":"Polo Market","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Лента":{"tags":{"name":"Лента","shop":"supermarket"},"name":"Лента","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/西友 (SEIYU)":{"tags":{"name":"西友 (SEIYU)","shop":"supermarket"},"name":"西友 (SEIYU)","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/H-E-B":{"tags":{"name":"H-E-B","shop":"supermarket"},"name":"H-E-B","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Атак":{"tags":{"name":"Атак","shop":"supermarket"},"name":"Атак","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Полушка":{"tags":{"name":"Полушка","shop":"supermarket"},"name":"Полушка","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Extra":{"tags":{"name":"Extra","shop":"supermarket"},"name":"Extra","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Sigma":{"tags":{"name":"Sigma","shop":"supermarket"},"name":"Sigma","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/АТБ":{"tags":{"name":"АТБ","shop":"supermarket"},"name":"АТБ","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Bodega Aurrera":{"tags":{"name":"Bodega Aurrera","shop":"supermarket"},"name":"Bodega Aurrera","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Tesco Lotus":{"tags":{"name":"Tesco Lotus","shop":"supermarket"},"name":"Tesco Lotus","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Мария-Ра":{"tags":{"name":"Мария-Ра","shop":"supermarket"},"name":"Мария-Ра","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Магнолия":{"tags":{"name":"Магнолия","shop":"supermarket"},"name":"Магнолия","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Монетка":{"tags":{"name":"Монетка","shop":"supermarket"},"name":"Монетка","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Hy-Vee":{"tags":{"name":"Hy-Vee","shop":"supermarket"},"name":"Hy-Vee","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Walmart Supercenter":{"tags":{"name":"Walmart Supercenter","shop":"supermarket"},"name":"Walmart Supercenter","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Hannaford":{"tags":{"name":"Hannaford","shop":"supermarket"},"name":"Hannaford","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Wegmans":{"tags":{"name":"Wegmans","shop":"supermarket"},"name":"Wegmans","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/業務スーパー":{"tags":{"name":"業務スーパー","shop":"supermarket"},"name":"業務スーパー","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Norfa XL":{"tags":{"name":"Norfa XL","shop":"supermarket"},"name":"Norfa XL","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/ヨークマート (YorkMart)":{"tags":{"name":"ヨークマート (YorkMart)","shop":"supermarket"},"name":"ヨークマート (YorkMart)","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Leclerc Drive":{"tags":{"name":"Leclerc Drive","shop":"supermarket"},"name":"Leclerc Drive","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Media Markt":{"tags":{"name":"Media Markt","shop":"electronics"},"name":"Media Markt","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Maplin":{"tags":{"name":"Maplin","shop":"electronics"},"name":"Maplin","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Best Buy":{"tags":{"name":"Best Buy","shop":"electronics"},"name":"Best Buy","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Future Shop":{"tags":{"name":"Future Shop","shop":"electronics"},"name":"Future Shop","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Saturn":{"tags":{"name":"Saturn","shop":"electronics"},"name":"Saturn","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Currys":{"tags":{"name":"Currys","shop":"electronics"},"name":"Currys","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Radio Shack":{"tags":{"name":"Radio Shack","shop":"electronics"},"name":"Radio Shack","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Euronics":{"tags":{"name":"Euronics","shop":"electronics"},"name":"Euronics","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Expert":{"tags":{"name":"Expert","shop":"electronics"},"name":"Expert","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Эльдорадо":{"tags":{"name":"Эльдорадо","shop":"electronics"},"name":"Эльдорадо","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Darty":{"tags":{"name":"Darty","shop":"electronics"},"name":"Darty","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/М.Видео":{"tags":{"name":"М.Видео","shop":"electronics"},"name":"М.Видео","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/ヤマダ電機":{"tags":{"name":"ヤマダ電機","shop":"electronics"},"name":"ヤマダ電機","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/McColl's":{"tags":{"name":"McColl's","shop":"convenience"},"name":"McColl's","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Tesco Express":{"tags":{"name":"Tesco Express","shop":"convenience"},"name":"Tesco Express","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/One Stop":{"tags":{"name":"One Stop","shop":"convenience"},"name":"One Stop","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Londis":{"tags":{"name":"Londis","shop":"convenience"},"name":"Londis","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/7-Eleven":{"tags":{"name":"7-Eleven","shop":"convenience"},"name":"7-Eleven","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Sale":{"tags":{"name":"Sale","shop":"convenience"},"name":"Sale","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Siwa":{"tags":{"name":"Siwa","shop":"convenience"},"name":"Siwa","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/COOP Jednota":{"tags":{"name":"COOP Jednota","shop":"convenience"},"name":"COOP Jednota","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Mac's":{"tags":{"name":"Mac's","shop":"convenience"},"name":"Mac's","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Alepa":{"tags":{"name":"Alepa","shop":"convenience"},"name":"Alepa","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Hasty Market":{"tags":{"name":"Hasty Market","shop":"convenience"},"name":"Hasty Market","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/K-Market":{"tags":{"name":"K-Market","shop":"convenience"},"name":"K-Market","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Costcutter":{"tags":{"name":"Costcutter","shop":"convenience"},"name":"Costcutter","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Valintatalo":{"tags":{"name":"Valintatalo","shop":"convenience"},"name":"Valintatalo","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Circle K":{"tags":{"name":"Circle K","shop":"convenience"},"name":"Circle K","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/セブンイレブン":{"tags":{"name":"セブンイレブン","name:en":"7-Eleven","shop":"convenience"},"name":"セブンイレブン","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/ローソン":{"tags":{"name":"ローソン","name:en":"LAWSON","shop":"convenience"},"name":"ローソン","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Petit Casino":{"tags":{"name":"Petit Casino","shop":"convenience"},"name":"Petit Casino","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Mace":{"tags":{"name":"Mace","shop":"convenience"},"name":"Mace","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Mini Market":{"tags":{"name":"Mini Market","shop":"convenience"},"name":"Mini Market","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Nisa Local":{"tags":{"name":"Nisa Local","shop":"convenience"},"name":"Nisa Local","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Dorfladen":{"tags":{"name":"Dorfladen","shop":"convenience"},"name":"Dorfladen","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Продукты":{"tags":{"name":"Продукты","shop":"convenience"},"name":"Продукты","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Mini Stop":{"tags":{"name":"Mini Stop","shop":"convenience"},"name":"Mini Stop","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/LAWSON":{"tags":{"name":"LAWSON","shop":"convenience"},"name":"LAWSON","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/デイリーヤマザキ":{"tags":{"name":"デイリーヤマザキ","shop":"convenience"},"name":"デイリーヤマザキ","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Надежда":{"tags":{"name":"Надежда","shop":"convenience"},"name":"Надежда","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Nisa":{"tags":{"name":"Nisa","shop":"convenience"},"name":"Nisa","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Premier":{"tags":{"name":"Premier","shop":"convenience"},"name":"Premier","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/ABC":{"tags":{"name":"ABC","shop":"convenience"},"name":"ABC","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/ミニストップ":{"tags":{"name":"ミニストップ","name:en":"MINISTOP","shop":"convenience"},"name":"ミニストップ","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/サンクス":{"tags":{"name":"サンクス","name:en":"sunkus","shop":"convenience"},"name":"サンクス","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/スリーエフ":{"tags":{"name":"スリーエフ","shop":"convenience"},"name":"スリーエフ","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/8 à Huit":{"tags":{"name":"8 à Huit","shop":"convenience"},"name":"8 à Huit","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Żabka":{"tags":{"name":"Żabka","shop":"convenience"},"name":"Żabka","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Almacen":{"tags":{"name":"Almacen","shop":"convenience"},"name":"Almacen","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Vival":{"tags":{"name":"Vival","shop":"convenience"},"name":"Vival","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/FamilyMart":{"tags":{"name":"FamilyMart","shop":"convenience"},"name":"FamilyMart","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/ファミリーマート":{"tags":{"name":"ファミリーマート","name:en":"FamilyMart","shop":"convenience"},"name":"ファミリーマート","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Sunkus":{"tags":{"name":"Sunkus","shop":"convenience"},"name":"Sunkus","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/セブンイレブン(Seven-Eleven)":{"tags":{"name":"セブンイレブン(Seven-Eleven)","shop":"convenience"},"name":"セブンイレブン(Seven-Eleven)","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Jednota":{"tags":{"name":"Jednota","shop":"convenience"},"name":"Jednota","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Магазин":{"tags":{"name":"Магазин","shop":"convenience"},"name":"Магазин","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Гастроном":{"tags":{"name":"Гастроном","shop":"convenience"},"name":"Гастроном","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Centra":{"tags":{"name":"Centra","shop":"convenience"},"name":"Centra","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/サークルK":{"tags":{"name":"サークルK","name:en":"Circle K","shop":"convenience"},"name":"サークルK","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Wawa":{"tags":{"name":"Wawa","shop":"convenience"},"name":"Wawa","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Proxi":{"tags":{"name":"Proxi","shop":"convenience"},"name":"Proxi","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Универсам":{"tags":{"name":"Универсам","shop":"convenience"},"name":"Универсам","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Groszek":{"tags":{"name":"Groszek","shop":"convenience"},"name":"Groszek","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Select":{"tags":{"name":"Select","shop":"convenience"},"name":"Select","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Večerka":{"tags":{"name":"Večerka","shop":"convenience"},"name":"Večerka","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Potraviny":{"tags":{"name":"Potraviny","shop":"convenience"},"name":"Potraviny","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Смак":{"tags":{"name":"Смак","shop":"convenience"},"name":"Смак","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Эконом":{"tags":{"name":"Эконом","shop":"convenience"},"name":"Эконом","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Березка":{"tags":{"name":"Березка","shop":"convenience"},"name":"Березка","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Społem":{"tags":{"name":"Społem","shop":"convenience"},"name":"Społem","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Cumberland Farms":{"tags":{"name":"Cumberland Farms","shop":"convenience"},"name":"Cumberland Farms","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Tesco Lotus Express":{"tags":{"name":"Tesco Lotus Express","shop":"convenience"},"name":"Tesco Lotus Express","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Kiosk":{"tags":{"name":"Kiosk","shop":"convenience"},"name":"Kiosk","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Sklep spożywczy":{"tags":{"name":"Sklep spożywczy","shop":"convenience"},"name":"Sklep spożywczy","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/24 часа":{"tags":{"name":"24 часа","shop":"convenience"},"name":"24 часа","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Минимаркет":{"tags":{"name":"Минимаркет","shop":"convenience"},"name":"Минимаркет","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Oxxo":{"tags":{"name":"Oxxo","shop":"convenience"},"name":"Oxxo","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/abc":{"tags":{"name":"abc","shop":"convenience"},"name":"abc","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/7/11":{"tags":{"name":"7/11","shop":"convenience"},"name":"7/11","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Stewart's":{"tags":{"name":"Stewart's","shop":"convenience"},"name":"Stewart's","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Продукти":{"tags":{"name":"Продукти","shop":"convenience"},"name":"Продукти","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/ローソンストア100 (LAWSON STORE 100)":{"tags":{"name":"ローソンストア100 (LAWSON STORE 100)","shop":"convenience"},"name":"ローソンストア100 (LAWSON STORE 100)","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Радуга":{"tags":{"name":"Радуга","shop":"convenience"},"name":"Радуга","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/ローソンストア100":{"tags":{"name":"ローソンストア100","shop":"convenience"},"name":"ローソンストア100","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/เซเว่นอีเลฟเว่น":{"tags":{"name":"เซเว่นอีเลฟเว่น","shop":"convenience"},"name":"เซเว่นอีเลฟเว่น","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Фортуна":{"tags":{"name":"Фортуна","shop":"convenience"},"name":"Фортуна","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Picard":{"tags":{"name":"Picard","shop":"convenience"},"name":"Picard","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Four Square":{"tags":{"name":"Four Square","shop":"convenience"},"name":"Four Square","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Визит":{"tags":{"name":"Визит","shop":"convenience"},"name":"Визит","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Авоська":{"tags":{"name":"Авоська","shop":"convenience"},"name":"Авоська","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Dollar General":{"tags":{"name":"Dollar General","shop":"convenience"},"name":"Dollar General","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Studenac":{"tags":{"name":"Studenac","shop":"convenience"},"name":"Studenac","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Central Convenience Store":{"tags":{"name":"Central Convenience Store","shop":"convenience"},"name":"Central Convenience Store","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/продукты":{"tags":{"name":"продукты","shop":"convenience"},"name":"продукты","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Кулинария":{"tags":{"name":"Кулинария","shop":"convenience"},"name":"Кулинария","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/全家":{"tags":{"name":"全家","shop":"convenience"},"name":"全家","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Мечта":{"tags":{"name":"Мечта","shop":"convenience"},"name":"Мечта","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Epicerie":{"tags":{"name":"Epicerie","shop":"convenience"},"name":"Epicerie","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Кировский":{"tags":{"name":"Кировский","shop":"convenience"},"name":"Кировский","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Food Mart":{"tags":{"name":"Food Mart","shop":"convenience"},"name":"Food Mart","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Delikatesy":{"tags":{"name":"Delikatesy","shop":"convenience"},"name":"Delikatesy","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/ポプラ":{"tags":{"name":"ポプラ","shop":"convenience"},"name":"ポプラ","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Lewiatan":{"tags":{"name":"Lewiatan","shop":"convenience"},"name":"Lewiatan","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Продуктовый магазин":{"tags":{"name":"Продуктовый магазин","shop":"convenience"},"name":"Продуктовый магазин","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Продуктовый":{"tags":{"name":"Продуктовый","shop":"convenience"},"name":"Продуктовый","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/セイコーマート (Seicomart)":{"tags":{"name":"セイコーマート (Seicomart)","shop":"convenience"},"name":"セイコーマート (Seicomart)","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Виктория":{"tags":{"name":"Виктория","shop":"convenience"},"name":"Виктория","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Весна":{"tags":{"name":"Весна","shop":"convenience"},"name":"Весна","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Mini Market Non-Stop":{"tags":{"name":"Mini Market Non-Stop","shop":"convenience"},"name":"Mini Market Non-Stop","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Копеечка":{"tags":{"name":"Копеечка","shop":"convenience"},"name":"Копеечка","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Royal Farms":{"tags":{"name":"Royal Farms","shop":"convenience"},"name":"Royal Farms","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Alfamart":{"tags":{"name":"Alfamart","shop":"convenience"},"name":"Alfamart","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Indomaret":{"tags":{"name":"Indomaret","shop":"convenience"},"name":"Indomaret","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/магазин":{"tags":{"name":"магазин","shop":"convenience"},"name":"магазин","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/全家便利商店":{"tags":{"name":"全家便利商店","shop":"convenience"},"name":"全家便利商店","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Boutique":{"tags":{"name":"Boutique","shop":"convenience"},"name":"Boutique","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/მარკეტი (Market)":{"tags":{"name":"მარკეტი (Market)","shop":"convenience"},"name":"მარკეტი (Market)","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Stores":{"tags":{"name":"Stores","shop":"convenience"},"name":"Stores","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/dm":{"tags":{"name":"dm","shop":"chemist"},"name":"dm","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/Müller":{"tags":{"name":"Müller","shop":"chemist"},"name":"Müller","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/Schlecker":{"tags":{"name":"Schlecker","shop":"chemist"},"name":"Schlecker","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/Etos":{"tags":{"name":"Etos","shop":"chemist"},"name":"Etos","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/Bipa":{"tags":{"name":"Bipa","shop":"chemist"},"name":"Bipa","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/Rossmann":{"tags":{"name":"Rossmann","shop":"chemist"},"name":"Rossmann","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/DM Drogeriemarkt":{"tags":{"name":"DM Drogeriemarkt","shop":"chemist"},"name":"DM Drogeriemarkt","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/Ihr Platz":{"tags":{"name":"Ihr Platz","shop":"chemist"},"name":"Ihr Platz","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/Douglas":{"tags":{"name":"Douglas","shop":"chemist"},"name":"Douglas","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/Kruidvat":{"tags":{"name":"Kruidvat","shop":"chemist"},"name":"Kruidvat","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/car_repair/Kwik Fit":{"tags":{"name":"Kwik Fit","shop":"car_repair"},"name":"Kwik Fit","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/ATU":{"tags":{"name":"ATU","shop":"car_repair"},"name":"ATU","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Midas":{"tags":{"name":"Midas","shop":"car_repair"},"name":"Midas","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Feu Vert":{"tags":{"name":"Feu Vert","shop":"car_repair"},"name":"Feu Vert","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Norauto":{"tags":{"name":"Norauto","shop":"car_repair"},"name":"Norauto","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Speedy":{"tags":{"name":"Speedy","shop":"car_repair"},"name":"Speedy","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Pit Stop":{"tags":{"name":"Pit Stop","shop":"car_repair"},"name":"Pit Stop","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Jiffy Lube":{"tags":{"name":"Jiffy Lube","shop":"car_repair"},"name":"Jiffy Lube","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Шиномонтаж":{"tags":{"name":"Шиномонтаж","shop":"car_repair"},"name":"Шиномонтаж","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/СТО":{"tags":{"name":"СТО","shop":"car_repair"},"name":"СТО","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/O'Reilly Auto Parts":{"tags":{"name":"O'Reilly Auto Parts","shop":"car_repair"},"name":"O'Reilly Auto Parts","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Carglass":{"tags":{"name":"Carglass","shop":"car_repair"},"name":"Carglass","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/шиномонтаж":{"tags":{"name":"шиномонтаж","shop":"car_repair"},"name":"шиномонтаж","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Euromaster":{"tags":{"name":"Euromaster","shop":"car_repair"},"name":"Euromaster","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Firestone":{"tags":{"name":"Firestone","shop":"car_repair"},"name":"Firestone","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Автосервис":{"tags":{"name":"Автосервис","shop":"car_repair"},"name":"Автосервис","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Advance Auto Parts":{"tags":{"name":"Advance Auto Parts","shop":"car_repair"},"name":"Advance Auto Parts","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Roady":{"tags":{"name":"Roady","shop":"car_repair"},"name":"Roady","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/furniture/IKEA":{"tags":{"name":"IKEA","shop":"furniture"},"name":"IKEA","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/furniture/Jysk":{"tags":{"name":"Jysk","shop":"furniture"},"name":"Jysk","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/furniture/Roller":{"tags":{"name":"Roller","shop":"furniture"},"name":"Roller","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/furniture/Dänisches Bettenlager":{"tags":{"name":"Dänisches Bettenlager","shop":"furniture"},"name":"Dänisches Bettenlager","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/furniture/Conforama":{"tags":{"name":"Conforama","shop":"furniture"},"name":"Conforama","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/furniture/Matratzen Concord":{"tags":{"name":"Matratzen Concord","shop":"furniture"},"name":"Matratzen Concord","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/furniture/Мебель":{"tags":{"name":"Мебель","shop":"furniture"},"name":"Мебель","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/furniture/But":{"tags":{"name":"But","shop":"furniture"},"name":"But","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Hornbach":{"tags":{"name":"Hornbach","shop":"doityourself"},"name":"Hornbach","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/B&Q":{"tags":{"name":"B&Q","shop":"doityourself"},"name":"B&Q","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Hubo":{"tags":{"name":"Hubo","shop":"doityourself"},"name":"Hubo","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Mr Bricolage":{"tags":{"name":"Mr Bricolage","shop":"doityourself"},"name":"Mr Bricolage","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Gamma":{"tags":{"name":"Gamma","shop":"doityourself"},"name":"Gamma","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/OBI":{"tags":{"name":"OBI","shop":"doityourself"},"name":"OBI","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Lowes":{"tags":{"name":"Lowes","shop":"doityourself"},"name":"Lowes","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Wickes":{"tags":{"name":"Wickes","shop":"doityourself"},"name":"Wickes","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Hagebau":{"tags":{"name":"Hagebau","shop":"doityourself"},"name":"Hagebau","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Max Bahr":{"tags":{"name":"Max Bahr","shop":"doityourself"},"name":"Max Bahr","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Castorama":{"tags":{"name":"Castorama","shop":"doityourself"},"name":"Castorama","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Rona":{"tags":{"name":"Rona","shop":"doityourself"},"name":"Rona","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Home Depot":{"tags":{"name":"Home Depot","shop":"doityourself"},"name":"Home Depot","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Toom Baumarkt":{"tags":{"name":"Toom Baumarkt","shop":"doityourself"},"name":"Toom Baumarkt","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Homebase":{"tags":{"name":"Homebase","shop":"doityourself"},"name":"Homebase","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Baumax":{"tags":{"name":"Baumax","shop":"doityourself"},"name":"Baumax","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Lagerhaus":{"tags":{"name":"Lagerhaus","shop":"doityourself"},"name":"Lagerhaus","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Bauhaus":{"tags":{"name":"Bauhaus","shop":"doityourself"},"name":"Bauhaus","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Canadian Tire":{"tags":{"name":"Canadian Tire","shop":"doityourself"},"name":"Canadian Tire","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Leroy Merlin":{"tags":{"name":"Leroy Merlin","shop":"doityourself"},"name":"Leroy Merlin","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Hellweg":{"tags":{"name":"Hellweg","shop":"doityourself"},"name":"Hellweg","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Brico":{"tags":{"name":"Brico","shop":"doityourself"},"name":"Brico","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Bricomarché":{"tags":{"name":"Bricomarché","shop":"doityourself"},"name":"Bricomarché","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Toom":{"tags":{"name":"Toom","shop":"doityourself"},"name":"Toom","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Hagebaumarkt":{"tags":{"name":"Hagebaumarkt","shop":"doityourself"},"name":"Hagebaumarkt","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Praktiker":{"tags":{"name":"Praktiker","shop":"doityourself"},"name":"Praktiker","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Menards":{"tags":{"name":"Menards","shop":"doityourself"},"name":"Menards","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Weldom":{"tags":{"name":"Weldom","shop":"doityourself"},"name":"Weldom","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Bunnings Warehouse":{"tags":{"name":"Bunnings Warehouse","shop":"doityourself"},"name":"Bunnings Warehouse","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Ace Hardware":{"tags":{"name":"Ace Hardware","shop":"doityourself"},"name":"Ace Hardware","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Home Hardware":{"tags":{"name":"Home Hardware","shop":"doityourself"},"name":"Home Hardware","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Стройматериалы":{"tags":{"name":"Стройматериалы","shop":"doityourself"},"name":"Стройматериалы","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Bricorama":{"tags":{"name":"Bricorama","shop":"doityourself"},"name":"Bricorama","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Point P":{"tags":{"name":"Point P","shop":"doityourself"},"name":"Point P","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/stationery/Staples":{"tags":{"name":"Staples","shop":"stationery"},"name":"Staples","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/stationery/McPaper":{"tags":{"name":"McPaper","shop":"stationery"},"name":"McPaper","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/stationery/Office Depot":{"tags":{"name":"Office Depot","shop":"stationery"},"name":"Office Depot","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/stationery/Канцтовары":{"tags":{"name":"Канцтовары","shop":"stationery"},"name":"Канцтовары","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/car/Skoda":{"tags":{"name":"Skoda","shop":"car"},"name":"Skoda","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/BMW":{"tags":{"name":"BMW","shop":"car"},"name":"BMW","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Citroen":{"tags":{"name":"Citroen","shop":"car"},"name":"Citroen","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Renault":{"tags":{"name":"Renault","shop":"car"},"name":"Renault","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Mercedes-Benz":{"tags":{"name":"Mercedes-Benz","shop":"car"},"name":"Mercedes-Benz","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Volvo":{"tags":{"name":"Volvo","shop":"car"},"name":"Volvo","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Ford":{"tags":{"name":"Ford","shop":"car"},"name":"Ford","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Volkswagen":{"tags":{"name":"Volkswagen","shop":"car"},"name":"Volkswagen","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Mazda":{"tags":{"name":"Mazda","shop":"car"},"name":"Mazda","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Mitsubishi":{"tags":{"name":"Mitsubishi","shop":"car"},"name":"Mitsubishi","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Fiat":{"tags":{"name":"Fiat","shop":"car"},"name":"Fiat","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Автозапчасти":{"tags":{"name":"Автозапчасти","shop":"car"},"name":"Автозапчасти","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Opel":{"tags":{"name":"Opel","shop":"car"},"name":"Opel","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Audi":{"tags":{"name":"Audi","shop":"car"},"name":"Audi","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Toyota":{"tags":{"name":"Toyota","shop":"car"},"name":"Toyota","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Nissan":{"tags":{"name":"Nissan","shop":"car"},"name":"Nissan","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Suzuki":{"tags":{"name":"Suzuki","shop":"car"},"name":"Suzuki","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Honda":{"tags":{"name":"Honda","shop":"car"},"name":"Honda","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Peugeot":{"tags":{"name":"Peugeot","shop":"car"},"name":"Peugeot","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Hyundai":{"tags":{"name":"Hyundai","shop":"car"},"name":"Hyundai","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Subaru":{"tags":{"name":"Subaru","shop":"car"},"name":"Subaru","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Chevrolet":{"tags":{"name":"Chevrolet","shop":"car"},"name":"Chevrolet","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Автомагазин":{"tags":{"name":"Автомагазин","shop":"car"},"name":"Автомагазин","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/clothes/Matalan":{"tags":{"name":"Matalan","shop":"clothes"},"name":"Matalan","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/KiK":{"tags":{"name":"KiK","shop":"clothes"},"name":"KiK","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/H&M":{"tags":{"name":"H&M","shop":"clothes"},"name":"H&M","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Urban Outfitters":{"tags":{"name":"Urban Outfitters","shop":"clothes"},"name":"Urban Outfitters","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Vögele":{"tags":{"name":"Vögele","shop":"clothes"},"name":"Vögele","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Zeeman":{"tags":{"name":"Zeeman","shop":"clothes"},"name":"Zeeman","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Takko":{"tags":{"name":"Takko","shop":"clothes"},"name":"Takko","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/C&A":{"tags":{"name":"C&A","shop":"clothes"},"name":"C&A","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Zara":{"tags":{"name":"Zara","shop":"clothes"},"name":"Zara","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Vero Moda":{"tags":{"name":"Vero Moda","shop":"clothes"},"name":"Vero Moda","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/NKD":{"tags":{"name":"NKD","shop":"clothes"},"name":"NKD","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Ernsting's family":{"tags":{"name":"Ernsting's family","shop":"clothes"},"name":"Ernsting's family","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Winners":{"tags":{"name":"Winners","shop":"clothes"},"name":"Winners","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/River Island":{"tags":{"name":"River Island","shop":"clothes"},"name":"River Island","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Next":{"tags":{"name":"Next","shop":"clothes"},"name":"Next","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Gap":{"tags":{"name":"Gap","shop":"clothes"},"name":"Gap","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Adidas":{"tags":{"name":"Adidas","shop":"clothes"},"name":"Adidas","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Mr Price":{"tags":{"name":"Mr Price","shop":"clothes"},"name":"Mr Price","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Pep":{"tags":{"name":"Pep","shop":"clothes"},"name":"Pep","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Edgars":{"tags":{"name":"Edgars","shop":"clothes"},"name":"Edgars","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Ackermans":{"tags":{"name":"Ackermans","shop":"clothes"},"name":"Ackermans","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Truworths":{"tags":{"name":"Truworths","shop":"clothes"},"name":"Truworths","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Ross":{"tags":{"name":"Ross","shop":"clothes"},"name":"Ross","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Burton":{"tags":{"name":"Burton","shop":"clothes"},"name":"Burton","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Dorothy Perkins":{"tags":{"name":"Dorothy Perkins","shop":"clothes"},"name":"Dorothy Perkins","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Lindex":{"tags":{"name":"Lindex","shop":"clothes"},"name":"Lindex","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/s.Oliver":{"tags":{"name":"s.Oliver","shop":"clothes"},"name":"s.Oliver","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Cecil":{"tags":{"name":"Cecil","shop":"clothes"},"name":"Cecil","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Dress Barn":{"tags":{"name":"Dress Barn","shop":"clothes"},"name":"Dress Barn","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Old Navy":{"tags":{"name":"Old Navy","shop":"clothes"},"name":"Old Navy","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Jack & Jones":{"tags":{"name":"Jack & Jones","shop":"clothes"},"name":"Jack & Jones","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Pimkie":{"tags":{"name":"Pimkie","shop":"clothes"},"name":"Pimkie","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Esprit":{"tags":{"name":"Esprit","shop":"clothes"},"name":"Esprit","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Primark":{"tags":{"name":"Primark","shop":"clothes"},"name":"Primark","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Bonita":{"tags":{"name":"Bonita","shop":"clothes"},"name":"Bonita","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Mexx":{"tags":{"name":"Mexx","shop":"clothes"},"name":"Mexx","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Gerry Weber":{"tags":{"name":"Gerry Weber","shop":"clothes"},"name":"Gerry Weber","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Tally Weijl":{"tags":{"name":"Tally Weijl","shop":"clothes"},"name":"Tally Weijl","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Mango":{"tags":{"name":"Mango","shop":"clothes"},"name":"Mango","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/TK Maxx":{"tags":{"name":"TK Maxx","shop":"clothes"},"name":"TK Maxx","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Benetton":{"tags":{"name":"Benetton","shop":"clothes"},"name":"Benetton","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Ulla Popken":{"tags":{"name":"Ulla Popken","shop":"clothes"},"name":"Ulla Popken","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/AWG":{"tags":{"name":"AWG","shop":"clothes"},"name":"AWG","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Tommy Hilfiger":{"tags":{"name":"Tommy Hilfiger","shop":"clothes"},"name":"Tommy Hilfiger","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/New Yorker":{"tags":{"name":"New Yorker","shop":"clothes"},"name":"New Yorker","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Orsay":{"tags":{"name":"Orsay","shop":"clothes"},"name":"Orsay","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Jeans Fritz":{"tags":{"name":"Jeans Fritz","shop":"clothes"},"name":"Jeans Fritz","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Charles Vögele":{"tags":{"name":"Charles Vögele","shop":"clothes"},"name":"Charles Vögele","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/New Look":{"tags":{"name":"New Look","shop":"clothes"},"name":"New Look","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Lacoste":{"tags":{"name":"Lacoste","shop":"clothes"},"name":"Lacoste","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Etam":{"tags":{"name":"Etam","shop":"clothes"},"name":"Etam","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Kiabi":{"tags":{"name":"Kiabi","shop":"clothes"},"name":"Kiabi","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Jack Wolfskin":{"tags":{"name":"Jack Wolfskin","shop":"clothes"},"name":"Jack Wolfskin","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/American Apparel":{"tags":{"name":"American Apparel","shop":"clothes"},"name":"American Apparel","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Men's Wearhouse":{"tags":{"name":"Men's Wearhouse","shop":"clothes"},"name":"Men's Wearhouse","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Intimissimi":{"tags":{"name":"Intimissimi","shop":"clothes"},"name":"Intimissimi","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/United Colors of Benetton":{"tags":{"name":"United Colors of Benetton","shop":"clothes"},"name":"United Colors of Benetton","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Jules":{"tags":{"name":"Jules","shop":"clothes"},"name":"Jules","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Second Hand":{"tags":{"name":"Second Hand","shop":"clothes"},"name":"Second Hand","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/AOKI":{"tags":{"name":"AOKI","shop":"clothes"},"name":"AOKI","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Calzedonia":{"tags":{"name":"Calzedonia","shop":"clothes"},"name":"Calzedonia","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/洋服の青山":{"tags":{"name":"洋服の青山","shop":"clothes"},"name":"洋服の青山","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Levi's":{"tags":{"name":"Levi's","shop":"clothes"},"name":"Levi's","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Celio":{"tags":{"name":"Celio","shop":"clothes"},"name":"Celio","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/TJ Maxx":{"tags":{"name":"TJ Maxx","shop":"clothes"},"name":"TJ Maxx","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Promod":{"tags":{"name":"Promod","shop":"clothes"},"name":"Promod","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Street One":{"tags":{"name":"Street One","shop":"clothes"},"name":"Street One","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/ユニクロ":{"tags":{"name":"ユニクロ","shop":"clothes"},"name":"ユニクロ","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Banana Republic":{"tags":{"name":"Banana Republic","shop":"clothes"},"name":"Banana Republic","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Одежда":{"tags":{"name":"Одежда","shop":"clothes"},"name":"Одежда","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Marshalls":{"tags":{"name":"Marshalls","shop":"clothes"},"name":"Marshalls","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/La Halle":{"tags":{"name":"La Halle","shop":"clothes"},"name":"La Halle","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Peacocks":{"tags":{"name":"Peacocks","shop":"clothes"},"name":"Peacocks","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/しまむら":{"tags":{"name":"しまむら","shop":"clothes"},"name":"しまむら","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/books/Bruna":{"tags":{"name":"Bruna","shop":"books"},"name":"Bruna","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"shop/books/Waterstones":{"tags":{"name":"Waterstones","shop":"books"},"name":"Waterstones","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"shop/books/Libro":{"tags":{"name":"Libro","shop":"books"},"name":"Libro","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"shop/books/Barnes & Noble":{"tags":{"name":"Barnes & Noble","shop":"books"},"name":"Barnes & Noble","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"shop/books/Weltbild":{"tags":{"name":"Weltbild","shop":"books"},"name":"Weltbild","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"shop/books/Thalia":{"tags":{"name":"Thalia","shop":"books"},"name":"Thalia","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"shop/books/Книги":{"tags":{"name":"Книги","shop":"books"},"name":"Книги","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"shop/department_store/Debenhams":{"tags":{"name":"Debenhams","shop":"department_store"},"name":"Debenhams","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Karstadt":{"tags":{"name":"Karstadt","shop":"department_store"},"name":"Karstadt","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Kmart":{"tags":{"name":"Kmart","shop":"department_store"},"name":"Kmart","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Target":{"tags":{"name":"Target","shop":"department_store"},"name":"Target","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Galeria Kaufhof":{"tags":{"name":"Galeria Kaufhof","shop":"department_store"},"name":"Galeria Kaufhof","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Marks & Spencer":{"tags":{"name":"Marks & Spencer","shop":"department_store"},"name":"Marks & Spencer","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Big W":{"tags":{"name":"Big W","shop":"department_store"},"name":"Big W","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Woolworth":{"tags":{"name":"Woolworth","shop":"department_store"},"name":"Woolworth","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Универмаг":{"tags":{"name":"Универмаг","shop":"department_store"},"name":"Универмаг","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Sears":{"tags":{"name":"Sears","shop":"department_store"},"name":"Sears","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Kohl's":{"tags":{"name":"Kohl's","shop":"department_store"},"name":"Kohl's","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Macy's":{"tags":{"name":"Macy's","shop":"department_store"},"name":"Macy's","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/JCPenney":{"tags":{"name":"JCPenney","shop":"department_store"},"name":"JCPenney","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/alcohol/Alko":{"tags":{"name":"Alko","shop":"alcohol"},"name":"Alko","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/The Beer Store":{"tags":{"name":"The Beer Store","shop":"alcohol"},"name":"The Beer Store","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/Systembolaget":{"tags":{"name":"Systembolaget","shop":"alcohol"},"name":"Systembolaget","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/LCBO":{"tags":{"name":"LCBO","shop":"alcohol"},"name":"LCBO","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/Ароматный мир":{"tags":{"name":"Ароматный мир","shop":"alcohol"},"name":"Ароматный мир","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/Bargain Booze":{"tags":{"name":"Bargain Booze","shop":"alcohol"},"name":"Bargain Booze","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/Nicolas":{"tags":{"name":"Nicolas","shop":"alcohol"},"name":"Nicolas","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/BWS":{"tags":{"name":"BWS","shop":"alcohol"},"name":"BWS","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/Botilleria":{"tags":{"name":"Botilleria","shop":"alcohol"},"name":"Botilleria","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/SAQ":{"tags":{"name":"SAQ","shop":"alcohol"},"name":"SAQ","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/Gall & Gall":{"tags":{"name":"Gall & Gall","shop":"alcohol"},"name":"Gall & Gall","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/Живое пиво":{"tags":{"name":"Живое пиво","shop":"alcohol"},"name":"Живое пиво","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/bakery/Kamps":{"tags":{"name":"Kamps","shop":"bakery"},"name":"Kamps","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Banette":{"tags":{"name":"Banette","shop":"bakery"},"name":"Banette","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Bäckerei Schmidt":{"tags":{"name":"Bäckerei Schmidt","shop":"bakery"},"name":"Bäckerei Schmidt","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Anker":{"tags":{"name":"Anker","shop":"bakery"},"name":"Anker","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Hofpfisterei":{"tags":{"name":"Hofpfisterei","shop":"bakery"},"name":"Hofpfisterei","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Greggs":{"tags":{"name":"Greggs","shop":"bakery"},"name":"Greggs","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Oebel":{"tags":{"name":"Oebel","shop":"bakery"},"name":"Oebel","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Boulangerie":{"tags":{"name":"Boulangerie","shop":"bakery"},"name":"Boulangerie","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Stadtbäckerei":{"tags":{"name":"Stadtbäckerei","shop":"bakery"},"name":"Stadtbäckerei","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Steinecke":{"tags":{"name":"Steinecke","shop":"bakery"},"name":"Steinecke","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Ihle":{"tags":{"name":"Ihle","shop":"bakery"},"name":"Ihle","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Goldilocks":{"tags":{"name":"Goldilocks","shop":"bakery"},"name":"Goldilocks","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Dat Backhus":{"tags":{"name":"Dat Backhus","shop":"bakery"},"name":"Dat Backhus","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/K&U":{"tags":{"name":"K&U","shop":"bakery"},"name":"K&U","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Der Beck":{"tags":{"name":"Der Beck","shop":"bakery"},"name":"Der Beck","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Thürmann":{"tags":{"name":"Thürmann","shop":"bakery"},"name":"Thürmann","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Backwerk":{"tags":{"name":"Backwerk","shop":"bakery"},"name":"Backwerk","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Schäfer's":{"tags":{"name":"Schäfer's","shop":"bakery"},"name":"Schäfer's","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Panaderia":{"tags":{"name":"Panaderia","shop":"bakery"},"name":"Panaderia","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Goeken backen":{"tags":{"name":"Goeken backen","shop":"bakery"},"name":"Goeken backen","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Stadtbäckerei Junge":{"tags":{"name":"Stadtbäckerei Junge","shop":"bakery"},"name":"Stadtbäckerei Junge","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Boulangerie Patisserie":{"tags":{"name":"Boulangerie Patisserie","shop":"bakery"},"name":"Boulangerie Patisserie","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Paul":{"tags":{"name":"Paul","shop":"bakery"},"name":"Paul","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Хлеб":{"tags":{"name":"Хлеб","shop":"bakery"},"name":"Хлеб","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Пекарня":{"tags":{"name":"Пекарня","shop":"bakery"},"name":"Пекарня","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Кулиничи":{"tags":{"name":"Кулиничи","shop":"bakery"},"name":"Кулиничи","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/sports/Sports Direct":{"tags":{"name":"Sports Direct","shop":"sports"},"name":"Sports Direct","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/sports/Decathlon":{"tags":{"name":"Decathlon","shop":"sports"},"name":"Decathlon","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/sports/Intersport":{"tags":{"name":"Intersport","shop":"sports"},"name":"Intersport","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/sports/Sports Authority":{"tags":{"name":"Sports Authority","shop":"sports"},"name":"Sports Authority","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/sports/Спортмастер":{"tags":{"name":"Спортмастер","shop":"sports"},"name":"Спортмастер","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/sports/Sport 2000":{"tags":{"name":"Sport 2000","shop":"sports"},"name":"Sport 2000","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/sports/Dick's Sporting Goods":{"tags":{"name":"Dick's Sporting Goods","shop":"sports"},"name":"Dick's Sporting Goods","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/variety_store/Tedi":{"tags":{"name":"Tedi","shop":"variety_store"},"name":"Tedi","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/variety_store/Dollarama":{"tags":{"name":"Dollarama","shop":"variety_store"},"name":"Dollarama","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/variety_store/Family Dollar":{"tags":{"name":"Family Dollar","shop":"variety_store"},"name":"Family Dollar","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/variety_store/Dollar Tree":{"tags":{"name":"Dollar Tree","shop":"variety_store"},"name":"Dollar Tree","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/pet/Fressnapf":{"tags":{"name":"Fressnapf","shop":"pet"},"name":"Fressnapf","icon":"dog-park","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/pet/PetSmart":{"tags":{"name":"PetSmart","shop":"pet"},"name":"PetSmart","icon":"dog-park","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/pet/Das Futterhaus":{"tags":{"name":"Das Futterhaus","shop":"pet"},"name":"Das Futterhaus","icon":"dog-park","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/pet/Pets at Home":{"tags":{"name":"Pets at Home","shop":"pet"},"name":"Pets at Home","icon":"dog-park","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/pet/Petco":{"tags":{"name":"Petco","shop":"pet"},"name":"Petco","icon":"dog-park","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/pet/Зоомагазин":{"tags":{"name":"Зоомагазин","shop":"pet"},"name":"Зоомагазин","icon":"dog-park","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Deichmann":{"tags":{"name":"Deichmann","shop":"shoes"},"name":"Deichmann","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Reno":{"tags":{"name":"Reno","shop":"shoes"},"name":"Reno","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Ecco":{"tags":{"name":"Ecco","shop":"shoes"},"name":"Ecco","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Clarks":{"tags":{"name":"Clarks","shop":"shoes"},"name":"Clarks","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/La Halle aux Chaussures":{"tags":{"name":"La Halle aux Chaussures","shop":"shoes"},"name":"La Halle aux Chaussures","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Brantano":{"tags":{"name":"Brantano","shop":"shoes"},"name":"Brantano","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Geox":{"tags":{"name":"Geox","shop":"shoes"},"name":"Geox","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Salamander":{"tags":{"name":"Salamander","shop":"shoes"},"name":"Salamander","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Обувь":{"tags":{"name":"Обувь","shop":"shoes"},"name":"Обувь","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Payless Shoe Source":{"tags":{"name":"Payless Shoe Source","shop":"shoes"},"name":"Payless Shoe Source","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Famous Footwear":{"tags":{"name":"Famous Footwear","shop":"shoes"},"name":"Famous Footwear","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Quick Schuh":{"tags":{"name":"Quick Schuh","shop":"shoes"},"name":"Quick Schuh","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Shoe Zone":{"tags":{"name":"Shoe Zone","shop":"shoes"},"name":"Shoe Zone","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Foot Locker":{"tags":{"name":"Foot Locker","shop":"shoes"},"name":"Foot Locker","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Bata":{"tags":{"name":"Bata","shop":"shoes"},"name":"Bata","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/ЦентрОбувь":{"tags":{"name":"ЦентрОбувь","shop":"shoes"},"name":"ЦентрОбувь","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/toys/La Grande Récré":{"tags":{"name":"La Grande Récré","shop":"toys"},"name":"La Grande Récré","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/toys/Toys R Us":{"tags":{"name":"Toys R Us","shop":"toys"},"name":"Toys R Us","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/toys/Intertoys":{"tags":{"name":"Intertoys","shop":"toys"},"name":"Intertoys","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/toys/Детский мир":{"tags":{"name":"Детский мир","shop":"toys"},"name":"Детский мир","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/toys/Игрушки":{"tags":{"name":"Игрушки","shop":"toys"},"name":"Игрушки","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/travel_agency/Flight Centre":{"tags":{"name":"Flight Centre","shop":"travel_agency"},"name":"Flight Centre","icon":"suitcase","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/travel_agency/Thomas Cook":{"tags":{"name":"Thomas Cook","shop":"travel_agency"},"name":"Thomas Cook","icon":"suitcase","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/jewelry/Bijou Brigitte":{"tags":{"name":"Bijou Brigitte","shop":"jewelry"},"name":"Bijou Brigitte","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/jewelry/Christ":{"tags":{"name":"Christ","shop":"jewelry"},"name":"Christ","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/jewelry/Swarovski":{"tags":{"name":"Swarovski","shop":"jewelry"},"name":"Swarovski","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Fielmann":{"tags":{"name":"Fielmann","shop":"optician"},"name":"Fielmann","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Apollo Optik":{"tags":{"name":"Apollo Optik","shop":"optician"},"name":"Apollo Optik","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Vision Express":{"tags":{"name":"Vision Express","shop":"optician"},"name":"Vision Express","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Оптика":{"tags":{"name":"Оптика","shop":"optician"},"name":"Оптика","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Optic 2000":{"tags":{"name":"Optic 2000","shop":"optician"},"name":"Optic 2000","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Alain Afflelou":{"tags":{"name":"Alain Afflelou","shop":"optician"},"name":"Alain Afflelou","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Specsavers":{"tags":{"name":"Specsavers","shop":"optician"},"name":"Specsavers","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Krys":{"tags":{"name":"Krys","shop":"optician"},"name":"Krys","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Atol":{"tags":{"name":"Atol","shop":"optician"},"name":"Atol","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/video/Blockbuster":{"tags":{"name":"Blockbuster","shop":"video"},"name":"Blockbuster","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/video/World of Video":{"tags":{"name":"World of Video","shop":"video"},"name":"World of Video","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Билайн":{"tags":{"name":"Билайн","shop":"mobile_phone"},"name":"Билайн","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/ソフトバンクショップ (SoftBank shop)":{"tags":{"name":"ソフトバンクショップ (SoftBank shop)","shop":"mobile_phone"},"name":"ソフトバンクショップ (SoftBank shop)","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Vodafone":{"tags":{"name":"Vodafone","shop":"mobile_phone"},"name":"Vodafone","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/O2":{"tags":{"name":"O2","shop":"mobile_phone"},"name":"O2","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Carphone Warehouse":{"tags":{"name":"Carphone Warehouse","shop":"mobile_phone"},"name":"Carphone Warehouse","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Orange":{"tags":{"name":"Orange","shop":"mobile_phone"},"name":"Orange","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Verizon Wireless":{"tags":{"name":"Verizon Wireless","shop":"mobile_phone"},"name":"Verizon Wireless","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Sprint":{"tags":{"name":"Sprint","shop":"mobile_phone"},"name":"Sprint","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/T-Mobile":{"tags":{"name":"T-Mobile","shop":"mobile_phone"},"name":"T-Mobile","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/МТС":{"tags":{"name":"МТС","shop":"mobile_phone"},"name":"МТС","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Евросеть":{"tags":{"name":"Евросеть","shop":"mobile_phone"},"name":"Евросеть","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Bell":{"tags":{"name":"Bell","shop":"mobile_phone"},"name":"Bell","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/The Phone House":{"tags":{"name":"The Phone House","shop":"mobile_phone"},"name":"The Phone House","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/SFR":{"tags":{"name":"SFR","shop":"mobile_phone"},"name":"SFR","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Связной":{"tags":{"name":"Связной","shop":"mobile_phone"},"name":"Связной","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Мегафон":{"tags":{"name":"Мегафон","shop":"mobile_phone"},"name":"Мегафон","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/AT&T":{"tags":{"name":"AT&T","shop":"mobile_phone"},"name":"AT&T","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/ドコモショップ (docomo shop)":{"tags":{"name":"ドコモショップ (docomo shop)","shop":"mobile_phone"},"name":"ドコモショップ (docomo shop)","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/au":{"tags":{"name":"au","shop":"mobile_phone"},"name":"au","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Movistar":{"tags":{"name":"Movistar","shop":"mobile_phone"},"name":"Movistar","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Bitė":{"tags":{"name":"Bitė","shop":"mobile_phone"},"name":"Bitė","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/computer/PC World":{"tags":{"name":"PC World","shop":"computer"},"name":"PC World","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/computer/DNS":{"tags":{"name":"DNS","shop":"computer"},"name":"DNS","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hairdresser/Klier":{"tags":{"name":"Klier","shop":"hairdresser"},"name":"Klier","icon":"hairdresser","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hairdresser/Supercuts":{"tags":{"name":"Supercuts","shop":"hairdresser"},"name":"Supercuts","icon":"hairdresser","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hairdresser/Hairkiller":{"tags":{"name":"Hairkiller","shop":"hairdresser"},"name":"Hairkiller","icon":"hairdresser","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hairdresser/Great Clips":{"tags":{"name":"Great Clips","shop":"hairdresser"},"name":"Great Clips","icon":"hairdresser","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hairdresser/Парикмахерская":{"tags":{"name":"Парикмахерская","shop":"hairdresser"},"name":"Парикмахерская","icon":"hairdresser","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hairdresser/Стиль":{"tags":{"name":"Стиль","shop":"hairdresser"},"name":"Стиль","icon":"hairdresser","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hairdresser/Franck Provost":{"tags":{"name":"Franck Provost","shop":"hairdresser"},"name":"Franck Provost","icon":"hairdresser","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hairdresser/Салон красоты":{"tags":{"name":"Салон красоты","shop":"hairdresser"},"name":"Салон красоты","icon":"hairdresser","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hardware/1000 мелочей":{"tags":{"name":"1000 мелочей","shop":"hardware"},"name":"1000 мелочей","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hardware/Хозтовары":{"tags":{"name":"Хозтовары","shop":"hardware"},"name":"Хозтовары","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/motorcycle/Yamaha":{"tags":{"name":"Yamaha","shop":"motorcycle"},"name":"Yamaha","icon":"scooter","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true}};
+var presets = {"aerialway":{"fields":["aerialway"],"geometry":["point","vertex","line"],"tags":{"aerialway":"*"},"terms":["ski lift","funifor","funitel"],"searchable":false,"name":"Aerialway"},"aeroway":{"icon":"airport","fields":["aeroway"],"geometry":["point","vertex","line","area"],"tags":{"aeroway":"*"},"searchable":false,"name":"Aeroway"},"amenity":{"fields":["amenity"],"geometry":["point","vertex","area"],"tags":{"amenity":"*"},"searchable":false,"name":"Amenity"},"highway":{"fields":["highway"],"geometry":["point","vertex","line","area"],"tags":{"highway":"*"},"searchable":false,"name":"Highway"},"place":{"fields":["place"],"geometry":["point","vertex","area"],"tags":{"place":"*"},"searchable":false,"name":"Place"},"power":{"geometry":["point","vertex","line","area"],"tags":{"power":"*"},"fields":["power"],"searchable":false,"name":"Power"},"railway":{"fields":["railway"],"geometry":["point","vertex","line","area"],"tags":{"railway":"*"},"searchable":false,"name":"Railway"},"roundabout":{"geometry":["vertex","line"],"tags":{"junction":"roundabout"},"name":"Roundabout","searchable":false},"waterway":{"fields":["waterway"],"geometry":["point","vertex","line","area"],"tags":{"waterway":"*"},"searchable":false,"name":"Waterway"},"address":{"fields":["address"],"geometry":["point"],"tags":{"addr:housenumber":"*"},"addTags":{},"removeTags":{},"matchScore":0.2,"name":"Address"},"advertising/billboard":{"fields":["parallel_direction","lit"],"geometry":["point","vertex","line"],"tags":{"advertising":"billboard"},"name":"Billboard"},"aerialway/cable_car":{"geometry":["line"],"terms":["tramway","ropeway"],"fields":["aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/heating"],"tags":{"aerialway":"cable_car"},"name":"Cable Car"},"aerialway/chair_lift":{"geometry":["line"],"fields":["aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],"tags":{"aerialway":"chair_lift"},"name":"Chair Lift"},"aerialway/drag_lift":{"geometry":["line"],"fields":["aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"drag_lift"},"name":"Drag Lift"},"aerialway/gondola":{"geometry":["line"],"fields":["aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],"tags":{"aerialway":"gondola"},"name":"Gondola"},"aerialway/goods":{"geometry":["line"],"fields":["aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"goods"},"name":"Goods Aerialway"},"aerialway/magic_carpet":{"geometry":["line"],"fields":["aerialway/capacity","aerialway/duration","aerialway/heating"],"tags":{"aerialway":"magic_carpet"},"name":"Magic Carpet Lift"},"aerialway/mixed_lift":{"geometry":["line"],"fields":["aerialway/occupancy","aerialway/capacity","aerialway/duration","aerialway/bubble","aerialway/heating"],"tags":{"aerialway":"mixed_lift"},"name":"Mixed Lift"},"aerialway/platter":{"geometry":["line"],"terms":["button lift","poma lift"],"fields":["aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"platter"},"name":"Platter Lift"},"aerialway/pylon":{"geometry":["point","vertex"],"fields":["ref"],"tags":{"aerialway":"pylon"},"name":"Aerialway Pylon"},"aerialway/rope_tow":{"geometry":["line"],"terms":["handle tow","bugel lift"],"fields":["aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"rope_tow"},"name":"Rope Tow Lift"},"aerialway/station":{"icon":"aerialway","geometry":["point","vertex"],"fields":["aerialway/access","aerialway/summer/access","elevation"],"tags":{"aerialway":"station"},"name":"Aerialway Station"},"aerialway/t-bar":{"geometry":["line"],"fields":["aerialway/capacity","aerialway/duration"],"tags":{"aerialway":"t-bar"},"name":"T-bar Lift"},"aeroway/aerodrome":{"icon":"airport","geometry":["point","area"],"fields":["ref","iata","icao","operator","internet_access","internet_access/fee","internet_access/ssid"],"terms":["airplane","airport","aerodrome"],"tags":{"aeroway":"aerodrome"},"name":"Airport"},"aeroway/apron":{"icon":"airport","geometry":["area"],"terms":["ramp"],"fields":["ref","surface"],"tags":{"aeroway":"apron"},"name":"Apron"},"aeroway/gate":{"icon":"airport","geometry":["point"],"fields":["ref"],"tags":{"aeroway":"gate"},"name":"Airport Gate"},"aeroway/hangar":{"geometry":["area"],"fields":["building_area"],"tags":{"aeroway":"hangar"},"name":"Hangar"},"aeroway/helipad":{"icon":"heliport","geometry":["point","area"],"fields":["ref"],"terms":["helicopter","helipad","heliport"],"tags":{"aeroway":"helipad"},"name":"Helipad"},"aeroway/runway":{"geometry":["line","area"],"terms":["landing strip"],"fields":["ref","surface","length","width"],"tags":{"aeroway":"runway"},"name":"Runway"},"aeroway/taxiway":{"geometry":["line"],"fields":["ref","surface"],"tags":{"aeroway":"taxiway"},"name":"Taxiway"},"aeroway/terminal":{"icon":"airport","geometry":["point","area"],"terms":["airport","aerodrome"],"fields":["operator","building_area"],"tags":{"aeroway":"terminal"},"name":"Airport Terminal"},"amenity/coworking_space":{"icon":"commercial","fields":["address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"amenity":"coworking_space"},"name":"Coworking Space","searchable":false},"amenity/nursing_home":{"icon":"wheelchair","fields":["operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"geometry":["point","area"],"tags":{"amenity":"nursing_home"},"reference":{"key":"social_facility","value":"nursing_home"},"name":"Nursing Home","searchable":false},"amenity/register_office":{"icon":"town-hall","fields":["address","building_area","opening_hours","operator"],"geometry":["point","area"],"tags":{"amenity":"register_office"},"reference":{"key":"government","value":"register_office"},"name":"Register Office","searchable":false},"amenity/swimming_pool":{"icon":"swimming","geometry":["point","vertex","area"],"tags":{"amenity":"swimming_pool"},"reference":{"key":"leisure","value":"swimming_pool"},"name":"Swimming Pool","searchable":false},"amenity/animal_boarding":{"icon":"veterinary","fields":["operator","address","building_area","opening_hours","animal_boarding"],"geometry":["point","area"],"terms":["boarding","cat","dog","horse","kitten","pet boarding","pet care","pet hotel","puppy","reptile"],"tags":{"amenity":"animal_boarding"},"name":"Animal Boarding Facility"},"amenity/animal_breeding":{"icon":"veterinary","fields":["operator","address","building_area","opening_hours","animal_breeding"],"geometry":["point","area"],"terms":["breeding","bull","cat","cow","dog","horse","husbandry","kitten","livestock","pet breeding","puppy","reptile"],"tags":{"amenity":"animal_breeding"},"name":"Animal Breeding Facility"},"amenity/animal_shelter":{"icon":"veterinary","fields":["operator","address","building_area","opening_hours","animal_shelter"],"geometry":["point","area"],"terms":["adoption","aspca","cat","dog","horse","kitten","pet care","pet rescue","puppy","raptor","reptile","rescue","spca"],"tags":{"amenity":"animal_shelter"},"name":"Animal Shelter"},"amenity/arts_centre":{"icon":"theatre","fields":["address","building_area","opening_hours"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"arts_centre"},"name":"Arts Center"},"amenity/atm":{"icon":"bank","fields":["operator","currency_multi","drive_through"],"geometry":["point","vertex"],"terms":["money","cash","machine"],"tags":{"amenity":"atm"},"name":"ATM"},"amenity/bank":{"icon":"bank","fields":["atm","operator","address","building_area","opening_hours","drive_through"],"geometry":["point","area"],"terms":["credit union","check","deposit","fund","investment","repository","reserve","safe","savings","stock","treasury","trust","vault"],"tags":{"amenity":"bank"},"name":"Bank"},"amenity/bar":{"icon":"bar","fields":["operator","address","building_area","opening_hours","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["dive","beer","bier","booze"],"tags":{"amenity":"bar"},"name":"Bar"},"amenity/bbq":{"icon":"bbq","fields":["covered","fuel"],"geometry":["point"],"terms":["bbq","grill"],"tags":{"amenity":"bbq"},"name":"Barbecue/Grill"},"amenity/bench":{"icon":"poi-bench","fields":["backrest"],"geometry":["point","vertex","line"],"terms":["seat"],"tags":{"amenity":"bench"},"name":"Bench"},"amenity/bicycle_parking":{"icon":"bicycle","fields":["bicycle_parking","capacity","operator","covered","access_simple"],"geometry":["point","vertex","area"],"terms":["bike"],"tags":{"amenity":"bicycle_parking"},"name":"Bicycle Parking"},"amenity/bicycle_rental":{"icon":"bicycle","fields":["capacity","network","operator"],"geometry":["point","vertex","area"],"terms":["bike"],"tags":{"amenity":"bicycle_rental"},"name":"Bicycle Rental"},"amenity/bicycle_repair_station":{"icon":"bicycle","fields":["operator","brand","opening_hours","fee","service/bicycle"],"geometry":["point","vertex","area"],"terms":["bike","repair","chain","pump"],"tags":{"amenity":"bicycle_repair_station"},"name":"Bicycle Repair Tool Stand"},"amenity/biergarten":{"icon":"beer","fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"geometry":["point","area"],"tags":{"amenity":"biergarten"},"terms":["beer","bier","booze"],"name":"Beer Garden"},"amenity/boat_rental":{"fields":["operator"],"geometry":["point","area"],"tags":{"amenity":"boat_rental"},"name":"Boat Rental"},"amenity/bureau_de_change":{"icon":"bank","fields":["operator","currency_multi"],"geometry":["point","vertex"],"terms":["bureau de change","money changer"],"tags":{"amenity":"bureau_de_change"},"name":"Currency Exchange"},"amenity/bus_station":{"icon":"bus","fields":["building_area","operator","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"amenity":"bus_station"},"name":"Bus Station"},"amenity/cafe":{"icon":"cafe","fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["bistro","coffee","tea"],"tags":{"amenity":"cafe"},"name":"Cafe"},"amenity/car_rental":{"icon":"car","fields":["operator"],"geometry":["point","area"],"tags":{"amenity":"car_rental"},"name":"Car Rental"},"amenity/car_sharing":{"icon":"car","fields":["operator","capacity"],"geometry":["point","area"],"tags":{"amenity":"car_sharing"},"name":"Car Sharing"},"amenity/car_wash":{"icon":"car","fields":["address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"amenity":"car_wash"},"name":"Car Wash"},"amenity/casino":{"icon":"poi-dice","fields":["operator","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"terms":["gambling","roulette","craps","poker","blackjack"],"tags":{"amenity":"casino"},"name":"Casino"},"amenity/charging_station":{"icon":"car","fields":["operator","capacity"],"geometry":["point","area"],"tags":{"amenity":"charging_station"},"terms":["EV","Electric Vehicle","Supercharger"],"name":"Charging Station"},"amenity/childcare":{"icon":"school","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["daycare","orphanage","playgroup"],"tags":{"amenity":"childcare"},"name":"Nursery/Childcare"},"amenity/cinema":{"icon":"cinema","fields":["address","building_area","opening_hours"],"geometry":["point","area"],"terms":["drive-in","film","flick","movie","theater","picture","show","screen"],"tags":{"amenity":"cinema"},"name":"Cinema"},"amenity/clinic":{"icon":"hospital","fields":["address","building_area","opening_hours"],"geometry":["point","area"],"terms":["medical","urgentcare"],"tags":{"amenity":"clinic"},"name":"Clinic"},"amenity/clock":{"icon":"poi-clock","fields":["support","display","visibility","date"],"geometry":["point","vertex"],"tags":{"amenity":"clock"},"name":"Clock"},"amenity/college":{"icon":"college","fields":["operator","address","internet_access","internet_access/ssid"],"geometry":["point","area"],"terms":["university"],"tags":{"amenity":"college"},"name":"College Grounds"},"amenity/community_centre":{"icon":"town-hall","fields":["operator","address","building_area"],"geometry":["point","area"],"terms":["event","hall"],"tags":{"amenity":"community_centre"},"name":"Community Center"},"amenity/compressed_air":{"icon":"car","geometry":["point","area"],"tags":{"amenity":"compressed_air"},"name":"Compressed Air"},"amenity/courthouse":{"icon":"town-hall","fields":["operator","address","building_area"],"geometry":["point","area"],"tags":{"amenity":"courthouse"},"name":"Courthouse"},"amenity/crematorium":{"icon":"cemetery","fields":["website","phone","opening_hours","wheelchair"],"geometry":["area","point"],"tags":{"amenity":"crematorium"},"terms":["cemetery","funeral"],"name":"Crematorium"},"amenity/dentist":{"icon":"dentist","fields":["address","building_area","opening_hours"],"geometry":["point","area"],"terms":["tooth","teeth"],"tags":{"amenity":"dentist"},"name":"Dentist"},"amenity/doctors":{"icon":"hospital","fields":["address","building_area","opening_hours"],"geometry":["point","area"],"terms":["medic*"],"tags":{"amenity":"doctors"},"name":"Doctor"},"amenity/dojo":{"icon":"pitch","fields":["sport","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["martial arts","dojang"],"tags":{"amenity":"dojo"},"name":"Dojo / Martial Arts Academy"},"amenity/drinking_water":{"icon":"drinking-water","geometry":["point"],"tags":{"amenity":"drinking_water"},"terms":["fountain","potable"],"name":"Drinking Water"},"amenity/driving_school":{"icon":"car","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"amenity":"driving_school"},"name":"Driving School"},"amenity/embassy":{"icon":"embassy","fields":["country","address","building_area"],"geometry":["point","area"],"tags":{"amenity":"embassy"},"name":"Embassy"},"amenity/fast_food":{"icon":"fast-food","fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"geometry":["point","area"],"tags":{"amenity":"fast_food"},"terms":["restaurant","takeaway"],"name":"Fast Food"},"amenity/ferry_terminal":{"icon":"ferry","fields":["network","operator","address","building_area"],"geometry":["point","vertex","area"],"terms":[],"tags":{"amenity":"ferry_terminal"},"name":"Ferry Terminal"},"amenity/fire_station":{"icon":"fire-station","fields":["operator","address","building_area"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"fire_station"},"name":"Fire Station"},"amenity/food_court":{"icon":"restaurant","fields":["operator","address","building_area","opening_hours","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["fast food","restaurant","food"],"tags":{"amenity":"food_court"},"name":"Food Court"},"amenity/fountain":{"icon":"poi-fountain","geometry":["point","area"],"tags":{"amenity":"fountain"},"name":"Fountain"},"amenity/fuel":{"icon":"fuel","fields":["operator","address","opening_hours","fuel_multi"],"geometry":["point","area"],"terms":["petrol","fuel","gasoline","propane","diesel","lng","cng","biodiesel"],"tags":{"amenity":"fuel"},"name":"Gas Station"},"amenity/grave_yard":{"icon":"cemetery","fields":["religion","denomination"],"geometry":["point","area"],"tags":{"amenity":"grave_yard"},"name":"Graveyard"},"amenity/grit_bin":{"fields":["access_simple"],"geometry":["point","vertex"],"tags":{"amenity":"grit_bin"},"terms":["salt","sand"],"name":"Grit Bin"},"amenity/hospital":{"icon":"hospital","fields":["operator","address","emergency"],"geometry":["point","area"],"terms":["clinic","doctor","emergency room","health","infirmary","institution","sanatorium","sanitarium","sick","surgery","ward"],"tags":{"amenity":"hospital"},"name":"Hospital Grounds"},"amenity/hunting_stand":{"icon":"poi-binoculars","geometry":["point","vertex","area"],"terms":["game","gun","lookout","rifle","shoot*","wild","watch"],"tags":{"amenity":"hunting_stand"},"name":"Hunting Stand"},"amenity/ice_cream":{"icon":"ice-cream","fields":["address","building_area","opening_hours","takeaway","delivery","outdoor_seating"],"geometry":["point","area"],"terms":["gelato","sorbet","sherbet","frozen","yogurt"],"tags":{"amenity":"ice_cream"},"name":"Ice Cream Shop"},"amenity/internet_cafe":{"icon":"poi-mast","fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["cybercafe","taxiphone","teleboutique","coffee","cafe","net","lanhouse"],"tags":{"amenity":"internet_cafe"},"name":"Internet Cafe"},"amenity/kindergarten":{"icon":"school","fields":["operator","address"],"geometry":["point","area"],"terms":["kindergarden","pre-school"],"tags":{"amenity":"kindergarten"},"name":"Preschool/Kindergarten Grounds"},"amenity/library":{"icon":"library","fields":["operator","building_area","address","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"terms":["book"],"tags":{"amenity":"library"},"name":"Library"},"amenity/marketplace":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"amenity":"marketplace"},"name":"Marketplace"},"amenity/motorcycle_parking":{"icon":"scooter","fields":["capacity","operator","covered","access_simple"],"geometry":["point","vertex","area"],"tags":{"amenity":"motorcycle_parking"},"name":"Motorcycle Parking"},"amenity/nightclub":{"icon":"bar","fields":["operator","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"tags":{"amenity":"nightclub"},"terms":["disco*","night club","dancing","dance club"],"name":"Nightclub"},"amenity/parking_entrance":{"icon":"entrance-alt1","fields":["access_simple","ref"],"geometry":["vertex"],"tags":{"amenity":"parking_entrance"},"name":"Parking Garage Entrance/Exit"},"amenity/parking_space":{"fields":["capacity"],"geometry":["point","vertex","area"],"terms":[],"tags":{"amenity":"parking_space"},"matchScore":0.95,"name":"Parking Space"},"amenity/parking":{"icon":"parking","fields":["operator","parking","capacity","fee","access_simple","supervised","park_ride","surface","maxstay","address"],"geometry":["point","vertex","area"],"tags":{"amenity":"parking"},"terms":[],"name":"Car Parking"},"amenity/pavilion":{"icon":"shelter","fields":["bin","bench"],"geometry":["point","vertex","area"],"tags":{"amenity":"shelter","shelter_type":"pavilion"},"name":"Pavilion"},"amenity/pharmacy":{"icon":"pharmacy","fields":["operator","address","building_area","opening_hours","drive_through"],"geometry":["point","area"],"tags":{"amenity":"pharmacy"},"terms":["drug*","med*","prescription"],"name":"Pharmacy"},"amenity/place_of_worship":{"icon":"place-of-worship","fields":["religion","denomination","address","building_area","service_times"],"geometry":["point","area"],"terms":["abbey","basilica","bethel","cathedral","chancel","chantry","chapel","church","fold","house of God","house of prayer","house of worship","minster","mission","mosque","oratory","parish","sacellum","sanctuary","shrine","synagogue","tabernacle","temple"],"tags":{"amenity":"place_of_worship"},"name":"Place of Worship"},"amenity/place_of_worship/buddhist":{"icon":"buddhism","fields":["denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["stupa","vihara","monastery","temple","pagoda","zendo","dojo"],"tags":{"amenity":"place_of_worship","religion":"buddhist"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Buddhist Temple"},"amenity/place_of_worship/christian":{"icon":"religious-christian","fields":["denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["christian","abbey","basilica","bethel","cathedral","chancel","chantry","chapel","fold","house of God","house of prayer","house of worship","minster","mission","oratory","parish","sacellum","sanctuary","shrine","tabernacle","temple"],"tags":{"amenity":"place_of_worship","religion":"christian"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Church"},"amenity/place_of_worship/jewish":{"icon":"religious-jewish","fields":["denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["jewish"],"tags":{"amenity":"place_of_worship","religion":"jewish"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Synagogue"},"amenity/place_of_worship/muslim":{"icon":"religious-muslim","fields":["denomination","building_area","address","service_times"],"geometry":["point","area"],"terms":["muslim"],"tags":{"amenity":"place_of_worship","religion":"muslim"},"reference":{"key":"amenity","value":"place_of_worship"},"name":"Mosque"},"amenity/planetarium":{"icon":"museum","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["museum","astronomy","observatory"],"tags":{"amenity":"planetarium"},"name":"Planetarium"},"amenity/police":{"icon":"police","fields":["operator","address","building_area"],"geometry":["point","area"],"terms":["badge","constable","constabulary","cop","detective","fed","law","enforcement","officer","patrol"],"tags":{"amenity":"police"},"name":"Police"},"amenity/post_box":{"icon":"post","fields":["operator","collection_times","drive_through","ref"],"geometry":["point","vertex"],"tags":{"amenity":"post_box"},"terms":["letter","post"],"name":"Mailbox"},"amenity/post_office":{"icon":"post","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["letter","mail"],"tags":{"amenity":"post_office"},"name":"Post Office"},"amenity/prison":{"icon":"prison","fields":["operator","address"],"geometry":["point","area"],"terms":["cell","jail"],"tags":{"amenity":"prison"},"name":"Prison Grounds"},"amenity/pub":{"icon":"beer","fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"geometry":["point","area"],"tags":{"amenity":"pub"},"terms":["alcohol","drink","dive","beer","bier","booze"],"name":"Pub"},"amenity/public_bath":{"icon":"water","fields":["bath/type","bath/open_air","bath/sand_bath","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"amenity":"public_bath"},"terms":["onsen","foot bath","hot springs"],"name":"Public Bath"},"amenity/public_bookcase":{"icon":"library","fields":["name","operator","capacity","website"],"geometry":["point","area"],"terms":["library","bookcrossing"],"tags":{"amenity":"public_bookcase"},"name":"Public Bookcase"},"amenity/ranger_station":{"fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["visitor center","visitor centre","permit center","permit centre","backcountry office","warden office","warden center"],"tags":{"amenity":"ranger_station"},"name":"Ranger Station"},"amenity/recycling_centre":{"icon":"waste-basket","fields":["operator","address","opening_hours","recycling_accepts"],"geometry":["point","area"],"terms":["bottle","can","dump","glass","garbage","rubbish","scrap","trash"],"tags":{"amenity":"recycling","recycling_type":"centre"},"name":"Recycling Center"},"amenity/recycling":{"icon":"recycling","fields":["recycling_type","recycling_accepts","collection_times"],"geometry":["point","area"],"terms":["bin","can","bottle","glass","garbage","rubbish","scrap","trash"],"tags":{"amenity":"recycling"},"name":"Recycling"},"amenity/restaurant":{"icon":"restaurant","fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"geometry":["point","area"],"terms":["bar","breakfast","cafe","café","canteen","coffee","dine","dining","dinner","drive-in","eat","grill","lunch","table"],"tags":{"amenity":"restaurant"},"name":"Restaurant"},"amenity/sanitary_dump_station":{"icon":"poi-storage-tank","fields":["operator","access_toilets","fee","water_point"],"geometry":["point","vertex","area"],"terms":["Motor Home","Camper","Sanitary","Dump Station","Elsan","CDP","CTDP","Chemical Toilet"],"tags":{"amenity":"sanitary_dump_station"},"name":"RV Toilet Disposal"},"amenity/school":{"icon":"school","fields":["operator","address"],"geometry":["point","area"],"terms":["academy","elementary school","middle school","high school"],"tags":{"amenity":"school"},"name":"School Grounds"},"amenity/shelter":{"icon":"shelter","fields":["shelter_type","bin"],"geometry":["point","vertex","area"],"terms":["lean-to","gazebo","picnic"],"tags":{"amenity":"shelter"},"name":"Shelter"},"amenity/social_facility":{"icon":"poi-social-facility","fields":["operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"social_facility"},"name":"Social Facility"},"amenity/social_facility/food_bank":{"icon":"poi-social-facility","fields":["operator","address","building_area","social_facility","social_facility_for","opening_hours"],"geometry":["point","area"],"terms":[],"tags":{"amenity":"social_facility","social_facility":"food_bank"},"reference":{"key":"social_facility","value":"food_bank"},"name":"Food Bank"},"amenity/social_facility/group_home":{"icon":"wheelchair","fields":["operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"geometry":["point","area"],"terms":["old","senior","living"],"tags":{"amenity":"social_facility","social_facility":"group_home","social_facility:for":"senior"},"reference":{"key":"social_facility","value":"group_home"},"name":"Elderly Group Home"},"amenity/social_facility/homeless_shelter":{"icon":"poi-social-facility","fields":["operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"terms":["houseless","unhoused","displaced"],"tags":{"amenity":"social_facility","social_facility":"shelter","social_facility:for":"homeless"},"reference":{"key":"social_facility","value":"shelter"},"name":"Homeless Shelter"},"amenity/social_facility/nursing_home":{"icon":"wheelchair","fields":["operator","address","building_area","social_facility","social_facility_for","opening_hours","wheelchair"],"geometry":["point","area"],"terms":["elderly","living","nursing","old","senior"],"tags":{"amenity":"social_facility","social_facility":"nursing_home","social_facility:for":"senior"},"reference":{"key":"social_facility","value":"nursing_home"},"name":"Nursing Home"},"amenity/studio":{"icon":"karaoke","fields":["studio","address","building_area"],"geometry":["point","area"],"terms":["recording","radio","television"],"tags":{"amenity":"studio"},"name":"Studio"},"amenity/taxi":{"icon":"car","fields":["operator","capacity"],"geometry":["point","vertex","area"],"terms":["cab"],"tags":{"amenity":"taxi"},"name":"Taxi Stand"},"amenity/telephone":{"icon":"telephone","geometry":["point","vertex"],"tags":{"amenity":"telephone"},"terms":["phone"],"name":"Telephone"},"amenity/theatre":{"icon":"theatre","fields":["operator","address","building_area"],"geometry":["point","area"],"terms":["theatre","performance","play","musical"],"tags":{"amenity":"theatre"},"name":"Theater"},"amenity/toilets":{"icon":"toilet","fields":["toilets/disposal","operator","building_area","access_toilets","gender","fee","diaper"],"geometry":["point","vertex","area"],"terms":["bathroom","restroom","outhouse","privy","head","lavatory","latrine","water closet","WC","W.C."],"tags":{"amenity":"toilets"},"name":"Toilets"},"amenity/townhall":{"icon":"town-hall","fields":["operator","address","building_area"],"geometry":["point","area"],"terms":["village","city","government","courthouse","municipal"],"tags":{"amenity":"townhall"},"name":"Town Hall"},"amenity/university":{"icon":"college","fields":["operator","address","internet_access","internet_access/ssid"],"geometry":["point","area"],"terms":["college"],"tags":{"amenity":"university"},"name":"University Grounds"},"amenity/vending_machine":{"icon":"poi-vending-machine","fields":["vending","operator","payment_multi","currency_multi"],"geometry":["point"],"terms":[],"tags":{"amenity":"vending_machine"},"name":"Vending Machine"},"amenity/vending_machine/news_papers":{"icon":"poi-vending-machine","fields":["operator","fee","payment_multi","currency_multi"],"geometry":["point"],"terms":["newspaper"],"tags":{"amenity":"vending_machine","vending":"news_papers"},"reference":{"key":"vending","value":"newspapers"},"name":"Newspaper Vending Machine","searchable":false},"amenity/vending_machine/cigarettes":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["cigarette"],"tags":{"amenity":"vending_machine","vending":"cigarettes"},"reference":{"key":"vending","value":"cigarettes"},"name":"Cigarette Vending Machine"},"amenity/vending_machine/condoms":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["condom"],"tags":{"amenity":"vending_machine","vending":"condoms"},"reference":{"key":"vending","value":"condoms"},"name":"Condom Vending Machine"},"amenity/vending_machine/drinks":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["drink","soda","beverage","juice","pop"],"tags":{"amenity":"vending_machine","vending":"drinks"},"reference":{"key":"vending","value":"drinks"},"name":"Drink Vending Machine"},"amenity/vending_machine/excrement_bags":{"icon":"poi-vending-machine","fields":["operator","fee","bin","payment_multi","currency_multi"],"geometry":["point"],"terms":["excrement bags","poop","dog","animal"],"tags":{"amenity":"vending_machine","vending":"excrement_bags"},"reference":{"key":"vending","value":"excrement_bags"},"name":"Excrement Bag Vending Machine"},"amenity/vending_machine/newspapers":{"icon":"poi-vending-machine","fields":["operator","fee","payment_multi","currency_multi"],"geometry":["point"],"terms":["newspaper"],"tags":{"amenity":"vending_machine","vending":"newspapers"},"reference":{"key":"vending","value":"newspapers"},"name":"Newspaper Vending Machine"},"amenity/vending_machine/parcel_pickup_dropoff":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["parcel","mail","pickup"],"tags":{"amenity":"vending_machine","vending":"parcel_pickup;parcel_mail_in"},"reference":{"key":"vending","value":"parcel_pickup;parcel_mail_in"},"name":"Parcel Pickup/Dropoff Vending Machine"},"amenity/vending_machine/parking_tickets":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["parking","ticket"],"tags":{"amenity":"vending_machine","vending":"parking_tickets"},"reference":{"key":"vending","value":"parking_tickets"},"matchScore":0.94,"name":"Parking Ticket Vending Machine"},"amenity/vending_machine/public_transport_tickets":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["bus","train","ferry","rail","ticket","transportation"],"tags":{"amenity":"vending_machine","vending":"public_transport_tickets"},"reference":{"key":"vending","value":"public_transport_tickets"},"name":"Transit Ticket Vending Machine"},"amenity/vending_machine/sweets":{"icon":"poi-vending-machine","fields":["operator","payment_multi","currency_multi"],"geometry":["point"],"terms":["candy","gum","chip","pretzel","cookie","cracker"],"tags":{"amenity":"vending_machine","vending":"sweets"},"reference":{"key":"vending","value":"sweets"},"name":"Snack Vending Machine"},"amenity/veterinary":{"icon":"veterinary","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["pet clinic","veterinarian","animal hospital","pet doctor"],"tags":{"amenity":"veterinary"},"name":"Veterinary"},"amenity/waste_basket":{"icon":"waste-basket","fields":["collection_times"],"geometry":["point","vertex","area"],"tags":{"amenity":"waste_basket"},"terms":["bin","garbage","rubbish","litter","trash"],"name":"Waste Basket"},"amenity/waste_disposal":{"icon":"waste-basket","fields":["collection_times"],"geometry":["point","vertex","area"],"tags":{"amenity":"waste_disposal"},"terms":["garbage","rubbish","litter","trash"],"name":"Garbage Dumpster"},"amenity/waste_transfer_station":{"icon":"waste-basket","fields":["operator","address","opening_hours"],"geometry":["point","area"],"terms":["dump","garbage","recycling","rubbish","scrap","trash"],"tags":{"amenity":"waste_transfer_station"},"name":"Waste Transfer Station"},"amenity/water_point":{"icon":"drinking-water","geometry":["area","vertex","point"],"tags":{"amenity":"water_point"},"name":"RV Drinking Water"},"amenity/watering_place":{"icon":"drinking-water","geometry":["area","vertex","point"],"tags":{"amenity":"watering_place"},"name":"Animal Watering Place"},"area":{"name":"Area","tags":{"area":"yes"},"geometry":["area"],"matchScore":0.1},"area/highway":{"fields":["area/highway"],"geometry":["area"],"tags":{"area:highway":"*"},"name":"Road Surface"},"barrier":{"icon":"roadblock","geometry":["point","vertex","line","area"],"tags":{"barrier":"*"},"fields":["barrier"],"name":"Barrier","matchScore":0.4},"barrier/entrance":{"icon":"entrance-alt1","geometry":["vertex"],"tags":{"barrier":"entrance"},"name":"Entrance","searchable":false},"barrier/block":{"icon":"roadblock","fields":["access"],"geometry":["point","vertex"],"tags":{"barrier":"block"},"name":"Block"},"barrier/bollard":{"icon":"roadblock","fields":["access"],"geometry":["point","vertex","line"],"tags":{"barrier":"bollard"},"name":"Bollard"},"barrier/border_control":{"icon":"roadblock","fields":["access","building_area"],"geometry":["vertex","area"],"tags":{"barrier":"border_control"},"name":"Border Control"},"barrier/cattle_grid":{"icon":"barrier","geometry":["vertex"],"tags":{"barrier":"cattle_grid"},"name":"Cattle Grid"},"barrier/city_wall":{"icon":"barrier","fields":["height"],"geometry":["line","area"],"tags":{"barrier":"city_wall"},"name":"City Wall"},"barrier/cycle_barrier":{"icon":"roadblock","fields":["access"],"geometry":["vertex"],"tags":{"barrier":"cycle_barrier"},"name":"Cycle Barrier"},"barrier/ditch":{"icon":"roadblock","geometry":["line","area"],"tags":{"barrier":"ditch"},"name":"Trench","matchScore":0.25},"barrier/fence":{"icon":"fence","fields":["fence_type","height"],"geometry":["line"],"tags":{"barrier":"fence"},"name":"Fence","matchScore":0.25},"barrier/gate":{"icon":"barrier","fields":["access"],"geometry":["point","vertex","line"],"tags":{"barrier":"gate"},"name":"Gate"},"barrier/hedge":{"fields":["height"],"geometry":["line","area"],"tags":{"barrier":"hedge"},"name":"Hedge","matchScore":0.25},"barrier/kissing_gate":{"icon":"barrier","fields":["access"],"geometry":["vertex"],"tags":{"barrier":"kissing_gate"},"name":"Kissing Gate"},"barrier/lift_gate":{"icon":"roadblock","fields":["access"],"geometry":["point","vertex"],"tags":{"barrier":"lift_gate"},"name":"Lift Gate"},"barrier/retaining_wall":{"geometry":["line","area"],"tags":{"barrier":"retaining_wall"},"name":"Retaining Wall"},"barrier/stile":{"icon":"roadblock","fields":["access"],"geometry":["point","vertex"],"tags":{"barrier":"stile"},"name":"Stile"},"barrier/toll_booth":{"icon":"roadblock","fields":["access","building_area"],"geometry":["vertex","area"],"tags":{"barrier":"toll_booth"},"name":"Toll Booth"},"barrier/wall":{"icon":"barrier","fields":["wall","height"],"geometry":["line","area"],"tags":{"barrier":"wall"},"name":"Wall","matchScore":0.25},"boundary/administrative":{"name":"Administrative Boundary","geometry":["line"],"tags":{"boundary":"administrative"},"fields":["admin_level"]},"building":{"icon":"home","fields":["building","levels","address"],"geometry":["point","area"],"tags":{"building":"*"},"matchScore":0.6,"terms":[],"name":"Building"},"building/bunker":{"fields":["address","levels"],"geometry":["area"],"tags":{"building":"bunker"},"matchScore":0.5,"name":"Bunker","searchable":false},"building/entrance":{"icon":"entrance-alt1","geometry":["vertex"],"tags":{"building":"entrance"},"name":"Entrance/Exit","searchable":false},"building/train_station":{"icon":"building","fields":["address","levels"],"geometry":["point","vertex","area"],"tags":{"building":"train_station"},"matchScore":0.5,"name":"Train Station","searchable":false},"building/apartments":{"icon":"building","fields":["address","levels"],"geometry":["area"],"tags":{"building":"apartments"},"matchScore":0.5,"name":"Apartments"},"building/barn":{"icon":"farm","fields":["address","levels"],"geometry":["area"],"tags":{"building":"barn"},"matchScore":0.5,"name":"Barn"},"building/cabin":{"icon":"home","fields":["address","levels"],"geometry":["area"],"tags":{"building":"cabin"},"matchScore":0.5,"name":"Cabin"},"building/cathedral":{"icon":"place-of-worship","fields":["address","levels"],"geometry":["area"],"tags":{"building":"cathedral"},"matchScore":0.5,"name":"Cathedral Building"},"building/chapel":{"icon":"place-of-worship","fields":["address","levels"],"geometry":["area"],"tags":{"building":"chapel"},"matchScore":0.5,"name":"Chapel Building"},"building/church":{"icon":"place-of-worship","fields":["address","levels"],"geometry":["area"],"tags":{"building":"church"},"matchScore":0.5,"name":"Church Building"},"building/college":{"icon":"building","fields":["address","levels"],"geometry":["area"],"terms":["university"],"tags":{"building":"college"},"matchScore":0.5,"name":"College Building"},"building/commercial":{"icon":"commercial","fields":["address","levels","smoking"],"geometry":["area"],"tags":{"building":"commercial"},"matchScore":0.5,"name":"Commercial Building"},"building/construction":{"icon":"building","fields":["address","levels"],"geometry":["area"],"tags":{"building":"construction"},"matchScore":0.5,"name":"Building Under Construction"},"building/detached":{"icon":"home","fields":["address","levels"],"geometry":["area"],"tags":{"building":"detached"},"terms":["home","single","family","residence","dwelling"],"matchScore":0.5,"name":"Detached House"},"building/dormitory":{"icon":"building","fields":["address","levels","smoking"],"geometry":["area"],"tags":{"building":"dormitory"},"matchScore":0.5,"name":"Dormitory"},"building/garage":{"icon":"warehouse","fields":["capacity"],"geometry":["area"],"tags":{"building":"garage"},"matchScore":0.5,"name":"Garage"},"building/garages":{"icon":"warehouse","fields":["capacity"],"geometry":["area"],"tags":{"building":"garages"},"matchScore":0.5,"name":"Garages"},"building/greenhouse":{"icon":"garden-center","fields":["address","levels"],"geometry":["area"],"tags":{"building":"greenhouse"},"matchScore":0.5,"name":"Greenhouse"},"building/hospital":{"icon":"building","fields":["address","levels"],"geometry":["area"],"tags":{"building":"hospital"},"matchScore":0.5,"name":"Hospital Building"},"building/hotel":{"icon":"building","fields":["address","levels","smoking"],"geometry":["area"],"tags":{"building":"hotel"},"matchScore":0.5,"name":"Hotel Building"},"building/house":{"icon":"home","fields":["address","levels"],"geometry":["area"],"tags":{"building":"house"},"terms":["home","family","residence","dwelling"],"matchScore":0.5,"name":"House"},"building/hut":{"geometry":["area"],"tags":{"building":"hut"},"matchScore":0.5,"name":"Hut"},"building/industrial":{"icon":"industry","fields":["address","levels"],"geometry":["area"],"tags":{"building":"industrial"},"matchScore":0.5,"name":"Industrial Building"},"building/kindergarten":{"icon":"building","fields":["address","levels"],"geometry":["area"],"terms":["kindergarden","pre-school"],"tags":{"building":"kindergarten"},"matchScore":0.5,"name":"Preschool/Kindergarten Building"},"building/public":{"icon":"building","fields":["address","levels","smoking"],"geometry":["area"],"tags":{"building":"public"},"matchScore":0.5,"name":"Public Building"},"building/residential":{"icon":"residential-community","fields":["address","levels"],"geometry":["area"],"tags":{"building":"residential"},"matchScore":0.5,"name":"Residential Building"},"building/retail":{"icon":"commercial","fields":["address","levels","smoking"],"geometry":["area"],"tags":{"building":"retail"},"matchScore":0.5,"name":"Retail Building"},"building/roof":{"icon":"shelter","fields":["address"],"geometry":["area"],"tags":{"building":"roof"},"matchScore":0.5,"name":"Roof"},"building/school":{"icon":"building","fields":["address","levels"],"geometry":["area"],"terms":["academy","elementary school","middle school","high school"],"tags":{"building":"school"},"matchScore":0.5,"name":"School Building"},"building/semidetached_house":{"icon":"home","fields":["address","levels"],"geometry":["area"],"tags":{"building":"semidetached_house"},"terms":["home","double","duplex","twin","family","residence","dwelling"],"matchScore":0.5,"name":"Semi-Detached House"},"building/shed":{"icon":"home","fields":["address","levels"],"geometry":["area"],"tags":{"building":"shed"},"matchScore":0.5,"name":"Shed"},"building/stable":{"icon":"horse-riding","fields":["address","levels"],"geometry":["area"],"tags":{"building":"stable"},"matchScore":0.5,"name":"Stable"},"building/static_caravan":{"icon":"home","fields":["address","levels"],"geometry":["area"],"tags":{"building":"static_caravan"},"matchScore":0.5,"name":"Static Mobile Home"},"building/terrace":{"icon":"building","fields":["address","levels"],"geometry":["area"],"tags":{"building":"terrace"},"terms":["home","terrace","brownstone","family","residence","dwelling"],"matchScore":0.5,"name":"Row Houses"},"building/university":{"icon":"building","fields":["address","levels"],"geometry":["area"],"terms":["college"],"tags":{"building":"university"},"matchScore":0.5,"name":"University Building"},"building/warehouse":{"icon":"warehouse","fields":["address","levels"],"geometry":["area"],"tags":{"building":"warehouse"},"matchScore":0.5,"name":"Warehouse"},"camp_site/camp_pitch":{"icon":"campsite","fields":["ref"],"geometry":["point","area"],"terms":["tent","rv"],"tags":{"camp_site":"camp_pitch"},"name":"Camp Pitch"},"club":{"icon":"heart","fields":["club","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"club":"*"},"terms":["social"],"name":"Club"},"craft":{"icon":"poi-tool","fields":["craft","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"*"},"terms":[],"name":"Craft"},"craft/jeweler":{"icon":"marker-stroked","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"jeweler"},"reference":{"key":"shop","value":"jewelry"},"name":"Jeweler","searchable":false},"craft/locksmith":{"icon":"marker-stroked","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"locksmith"},"reference":{"key":"shop","value":"locksmith"},"name":"Locksmith","searchable":false},"craft/optician":{"icon":"marker-stroked","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"optician"},"reference":{"key":"shop","value":"optician"},"name":"Optician","searchable":false},"craft/tailor":{"icon":"clothing-store","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["clothes","suit"],"tags":{"craft":"tailor"},"reference":{"key":"shop","value":"tailor"},"name":"Tailor","searchable":false},"craft/basket_maker":{"icon":"art-gallery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"basket_maker"},"name":"Basket Maker"},"craft/beekeeper":{"icon":"farm","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"beekeeper"},"name":"Beekeeper"},"craft/blacksmith":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"blacksmith"},"name":"Blacksmith"},"craft/boatbuilder":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"boatbuilder"},"name":"Boat Builder"},"craft/bookbinder":{"icon":"library","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["book repair"],"tags":{"craft":"bookbinder"},"name":"Bookbinder"},"craft/brewery":{"icon":"poi-storage-tank","fields":["operator","address","building_area","opening_hours","product"],"geometry":["point","area"],"terms":["alcohol","beer","beverage","bier","booze","cider"],"tags":{"craft":"brewery"},"name":"Brewery"},"craft/carpenter":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["woodworker"],"tags":{"craft":"carpenter"},"name":"Carpenter"},"craft/carpet_layer":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"carpet_layer"},"name":"Carpet Layer"},"craft/caterer":{"icon":"restaurant","fields":["cuisine","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"caterer"},"name":"Caterer"},"craft/clockmaker":{"icon":"poi-clock","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"clockmaker"},"name":"Clockmaker"},"craft/confectionery":{"icon":"bakery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["sweets","candy"],"tags":{"craft":"confectionery"},"name":"Confectionery"},"craft/distillery":{"icon":"poi-storage-tank","fields":["operator","address","building_area","opening_hours","product"],"geometry":["point","area"],"terms":["alcohol","beverage","bourbon","booze","brandy","gin","hooch","liquor","mezcal","moonshine","rum","scotch","spirits","still","tequila","vodka","whiskey","whisky"],"tags":{"craft":"distillery"},"name":"Distillery"},"craft/dressmaker":{"icon":"clothing-store","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["seamstress"],"tags":{"craft":"dressmaker"},"name":"Dressmaker"},"craft/electrician":{"icon":"poi-power","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["power","wire"],"tags":{"craft":"electrician"},"name":"Electrician"},"craft/electronics_repair":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"electronics_repair"},"name":"Electronics Repair Shop"},"craft/gardener":{"icon":"garden","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["landscaper","grounds keeper"],"tags":{"craft":"gardener"},"name":"Gardener"},"craft/glaziery":{"icon":"fire-station","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["glass","stained-glass","window"],"tags":{"craft":"glaziery"},"name":"Glaziery"},"craft/handicraft":{"icon":"art-gallery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"handicraft"},"name":"Handicraft"},"craft/hvac":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["heat*","vent*","air conditioning"],"tags":{"craft":"hvac"},"name":"HVAC"},"craft/insulator":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"insulation"},"name":"Insulator"},"craft/key_cutter":{"icon":"marker-stroked","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"key_cutter"},"name":"Key Cutter"},"craft/metal_construction":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"metal_construction"},"name":"Metal Construction"},"craft/painter":{"icon":"art-gallery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"painter"},"name":"Painter"},"craft/photographer":{"icon":"attraction","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"photographer"},"name":"Photographer"},"craft/photographic_laboratory":{"icon":"attraction","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["film"],"tags":{"craft":"photographic_laboratory"},"name":"Photographic Laboratory"},"craft/plasterer":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"plasterer"},"name":"Plasterer"},"craft/plumber":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["pipe"],"tags":{"craft":"plumber"},"name":"Plumber"},"craft/pottery":{"icon":"art-gallery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["ceramic"],"tags":{"craft":"pottery"},"name":"Pottery"},"craft/rigger":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"rigger"},"name":"Rigger"},"craft/roofer":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"roofer"},"name":"Roofer"},"craft/saddler":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"saddler"},"name":"Saddler"},"craft/sailmaker":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"sailmaker"},"name":"Sailmaker"},"craft/sawmill":{"icon":"logging","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["lumber"],"tags":{"craft":"sawmill"},"name":"Sawmill"},"craft/scaffolder":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"scaffolder"},"name":"Scaffolder"},"craft/sculpter":{"icon":"art-gallery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"sculpter"},"name":"Sculpter"},"craft/shoemaker":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["cobbler"],"tags":{"craft":"shoemaker"},"name":"Shoemaker"},"craft/stonemason":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["masonry"],"tags":{"craft":"stonemason"},"name":"Stonemason"},"craft/sweep":{"icon":"poi-chimney","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"sweep"},"name":"Chimney Sweep"},"craft/tiler":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"tiler"},"name":"Tiler"},"craft/tinsmith":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"tinsmith"},"name":"Tinsmith"},"craft/upholsterer":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"upholsterer"},"name":"Upholsterer"},"craft/watchmaker":{"icon":"poi-clock","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"watchmaker"},"name":"Watchmaker"},"craft/window_construction":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["glass"],"tags":{"craft":"window_construction"},"name":"Window Construction"},"craft/winery":{"icon":"alcohol-shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"craft":"winery"},"name":"Winery"},"embankment":{"geometry":["line"],"tags":{"embankment":"yes"},"name":"Embankment","matchScore":0.2},"emergency/designated":{"fields":[],"geometry":["line"],"tags":{"emergency":"designated"},"terms":[],"name":"Emergency Access Designated","searchable":false,"matchScore":0.01},"emergency/destination":{"fields":[],"geometry":["line"],"tags":{"emergency":"destination"},"terms":[],"name":"Emergency Access Destination","searchable":false,"matchScore":0.01},"emergency/no":{"fields":[],"geometry":["line"],"tags":{"emergency":"no"},"terms":[],"name":"Emergency Access No","searchable":false,"matchScore":0.01},"emergency/official":{"fields":[],"geometry":["line"],"tags":{"emergency":"official"},"terms":[],"name":"Emergency Access Official","searchable":false,"matchScore":0.01},"emergency/private":{"fields":[],"geometry":["line"],"tags":{"emergency":"private"},"terms":[],"name":"Emergency Access Private","searchable":false,"matchScore":0.01},"emergency/yes":{"fields":[],"geometry":["line"],"tags":{"emergency":"yes"},"terms":[],"name":"Emergency Access Yes","searchable":false,"matchScore":0.01},"emergency/ambulance_station":{"icon":"hospital","fields":["operator","building_area","address"],"geometry":["point","area"],"terms":["EMS","EMT","rescue"],"tags":{"emergency":"ambulance_station"},"name":"Ambulance Station"},"emergency/defibrillator":{"icon":"defibrillator","fields":["access","opening_hours","indoor","phone"],"geometry":["point"],"terms":["AED"],"tags":{"emergency":"defibrillator"},"name":"Defibrillator"},"emergency/fire_hydrant":{"icon":"poi-fire-hydrant","fields":["fire_hydrant/type","fire_hydrant/position","ref","operator"],"geometry":["point","vertex"],"terms":["fire plug"],"tags":{"emergency":"fire_hydrant"},"name":"Fire Hydrant"},"emergency/phone":{"icon":"emergency-phone","fields":["operator"],"geometry":["point","vertex"],"tags":{"emergency":"phone"},"name":"Emergency Phone"},"entrance":{"icon":"entrance-alt1","geometry":["vertex"],"tags":{"entrance":"*"},"fields":["entrance","access_simple","address"],"name":"Entrance/Exit"},"footway/crossing":{"fields":["crossing","access","surface","kerb","tactile_paving"],"geometry":["line"],"tags":{"highway":"footway","footway":"crossing"},"reference":{"key":"footway","value":"crossing"},"terms":[],"name":"Street Crossing"},"footway/crosswalk":{"icon":"highway-footway","fields":["crossing","access","surface","kerb","tactile_paving"],"geometry":["line"],"tags":{"highway":"footway","footway":"crossing","crossing":"zebra"},"reference":{"key":"highway","value":"crossing"},"terms":["zebra crossing"],"name":"Pedestrian Crosswalk"},"footway/sidewalk":{"icon":"highway-footway","fields":["surface","lit","width","structure","access"],"geometry":["line"],"tags":{"highway":"footway","footway":"sidewalk"},"reference":{"key":"footway","value":"sidewalk"},"terms":[],"name":"Sidewalk"},"ford":{"geometry":["vertex"],"tags":{"ford":"yes"},"name":"Ford"},"golf/bunker":{"icon":"golf","geometry":["area"],"tags":{"golf":"bunker","natural":"sand"},"terms":["hazard","bunker"],"reference":{"key":"golf","value":"bunker"},"name":"Sand Trap"},"golf/fairway":{"icon":"golf","geometry":["area"],"tags":{"golf":"fairway","landuse":"grass"},"reference":{"key":"golf","value":"fairway"},"name":"Fairway"},"golf/green":{"icon":"golf","geometry":["area"],"tags":{"golf":"green","landuse":"grass","leisure":"pitch","sport":"golf"},"reference":{"key":"golf","value":"green"},"name":"Putting Green"},"golf/hole":{"icon":"golf","fields":["golf_hole","par","handicap"],"geometry":["line"],"tags":{"golf":"hole"},"name":"Golf Hole"},"golf/lateral_water_hazard_area":{"icon":"golf","geometry":["area"],"tags":{"golf":"lateral_water_hazard","natural":"water"},"reference":{"key":"golf","value":"lateral_water_hazard"},"name":"Lateral Water Hazard"},"golf/lateral_water_hazard_line":{"icon":"golf","geometry":["line"],"tags":{"golf":"lateral_water_hazard"},"name":"Lateral Water Hazard"},"golf/rough":{"icon":"golf","geometry":["area"],"tags":{"golf":"rough","landuse":"grass"},"reference":{"key":"golf","value":"rough"},"name":"Rough"},"golf/tee":{"icon":"golf","geometry":["area"],"tags":{"golf":"tee","landuse":"grass"},"terms":["teeing ground"],"reference":{"key":"golf","value":"tee"},"name":"Tee Box"},"golf/water_hazard_area":{"icon":"golf","geometry":["area"],"tags":{"golf":"water_hazard","natural":"water"},"reference":{"key":"golf","value":"water_hazard"},"name":"Water Hazard"},"golf/water_hazard_line":{"icon":"golf","geometry":["line"],"tags":{"golf":"water_hazard"},"name":"Water Hazard"},"healthcare/blood_donation":{"icon":"blood-bank","fields":["operator","address","blood_components","opening_hours","ref"],"geometry":["point","area"],"terms":["blood bank","blood donation","blood transfusion","apheresis","plasmapheresis","plateletpheresis","stem cell donation"],"tags":{"healthcare":"blood_donation"},"name":"Blood Donor Center"},"highway/bridleway":{"fields":["surface","width","structure","access"],"icon":"highway-bridleway","geometry":["line"],"tags":{"highway":"bridleway"},"terms":["bridleway","equestrian","horse"],"name":"Bridle Path"},"highway/bus_stop":{"icon":"bus","fields":["network","operator","bench","shelter"],"geometry":["point","vertex"],"tags":{"highway":"bus_stop"},"terms":[],"name":"Bus Stop"},"highway/corridor":{"icon":"highway-footway","fields":["width","level","access_simple"],"geometry":["line"],"tags":{"highway":"corridor"},"terms":["gallery","hall","hallway","indoor","passage","passageway"],"name":"Indoor Corridor"},"highway/crossing":{"fields":["crossing","kerb","tactile_paving"],"geometry":["vertex"],"tags":{"highway":"crossing"},"reference":{"key":"footway","value":"crossing"},"terms":[],"name":"Street Crossing"},"highway/crosswalk":{"icon":"poi-foot","fields":["crossing","kerb","tactile_paving"],"geometry":["vertex"],"tags":{"highway":"crossing","crossing":"zebra"},"reference":{"key":"highway","value":"crossing"},"terms":["zebra crossing"],"name":"Pedestrian Crosswalk"},"highway/cycleway":{"icon":"highway-cycleway","fields":["oneway","surface","lit","width","structure","access"],"geometry":["line"],"tags":{"highway":"cycleway"},"terms":["bike"],"name":"Cycle Path"},"highway/elevator":{"icon":"poi-elevator","fields":["access_simple","opening_hours","maxweight","ref"],"geometry":["vertex"],"tags":{"highway":"elevator"},"terms":["lift"],"name":"Elevator"},"highway/footway":{"icon":"highway-footway","fields":["surface","lit","width","structure","access"],"geometry":["line","area"],"terms":["hike","hiking","trackway","trail","walk"],"tags":{"highway":"footway"},"name":"Foot Path"},"highway/give_way":{"icon":"poi-yield","fields":["parallel_direction"],"geometry":["vertex"],"tags":{"highway":"give_way"},"terms":["give way","yield","sign"],"name":"Yield Sign"},"highway/living_street":{"icon":"highway-living-street","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","access","cycleway"],"geometry":["line"],"tags":{"highway":"living_street"},"name":"Living Street"},"highway/mini_roundabout":{"icon":"circle-stroked","geometry":["vertex"],"tags":{"highway":"mini_roundabout"},"fields":["clock_direction"],"name":"Mini-Roundabout"},"highway/motorway_junction":{"icon":"poi-junction","geometry":["vertex"],"tags":{"highway":"motorway_junction"},"fields":["ref"],"name":"Motorway Junction / Exit"},"highway/motorway_link":{"icon":"highway-motorway-link","fields":["ref","oneway_yes","maxspeed","lanes","surface","structure","maxheight","access"],"geometry":["line"],"tags":{"highway":"motorway_link"},"addTags":{"highway":"motorway_link","oneway":"yes"},"removeTags":{"highway":"motorway_link","oneway":"yes"},"terms":["ramp","on ramp","off ramp"],"name":"Motorway Link"},"highway/motorway":{"icon":"highway-motorway","fields":["ref","oneway_yes","maxspeed","lanes","surface","structure","maxheight","toll","access"],"geometry":["line"],"tags":{"highway":"motorway"},"terms":["autobahn","expressway","freeway","highway","interstate","parkway","thruway","turnpike"],"name":"Motorway"},"highway/path":{"icon":"highway-path","fields":["surface","width","structure","access","incline","sac_scale","trail_visibility","mtb/scale","mtb/scale/uphill","mtb/scale/imba","ref"],"geometry":["line"],"terms":["hike","hiking","trackway","trail","walk"],"tags":{"highway":"path"},"name":"Path"},"highway/pedestrian":{"icon":"highway-footway","fields":["surface","lit","width","oneway","structure","access"],"geometry":["line","area"],"tags":{"highway":"pedestrian"},"terms":[],"name":"Pedestrian Street"},"highway/primary_link":{"icon":"highway-primary-link","fields":["oneway","maxspeed","lanes","surface","maxheight","ref","cycleway","structure","access"],"geometry":["line"],"tags":{"highway":"primary_link"},"terms":["ramp","on ramp","off ramp"],"name":"Primary Link"},"highway/primary":{"icon":"highway-primary","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","ref","cycleway","access"],"geometry":["line"],"tags":{"highway":"primary"},"terms":[],"name":"Primary Road"},"highway/raceway":{"icon":"highway-unclassified","fields":["oneway","surface","sport_racing_motor","lit","width","lanes","structure"],"geometry":["point","line","area"],"tags":{"highway":"raceway"},"addTags":{"highway":"raceway","sport":"motor"},"terms":["auto*","formula one","kart","motocross","nascar","race*","track"],"name":"Racetrack (Motorsport)"},"highway/residential":{"icon":"highway-residential","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","cycleway","access"],"geometry":["line"],"tags":{"highway":"residential"},"terms":[],"name":"Residential Road"},"highway/rest_area":{"icon":"car","geometry":["point","vertex","area"],"tags":{"highway":"rest_area"},"terms":["rest stop"],"name":"Rest Area"},"highway/road":{"icon":"highway-road","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","access"],"geometry":["line"],"tags":{"highway":"road"},"terms":[],"name":"Unknown Road"},"highway/secondary_link":{"icon":"highway-secondary-link","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","ref","cycleway","access"],"geometry":["line"],"tags":{"highway":"secondary_link"},"terms":["ramp","on ramp","off ramp"],"name":"Secondary Link"},"highway/secondary":{"icon":"highway-secondary","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","ref","cycleway","access"],"geometry":["line"],"tags":{"highway":"secondary"},"terms":[],"name":"Secondary Road"},"highway/service":{"icon":"highway-service","fields":["service","oneway","maxspeed","surface","structure","maxheight","access"],"geometry":["line"],"tags":{"highway":"service"},"terms":[],"name":"Service Road"},"highway/service/alley":{"icon":"highway-service","fields":["oneway","maxspeed","structure","access","surface","maxheight"],"geometry":["line"],"tags":{"highway":"service","service":"alley"},"reference":{"key":"service","value":"alley"},"name":"Alley"},"highway/service/drive-through":{"icon":"highway-service","fields":["oneway","covered","maxheight","maxspeed","structure","access","surface"],"geometry":["line"],"tags":{"highway":"service","service":"drive-through"},"reference":{"key":"service","value":"drive-through"},"name":"Drive-Through"},"highway/service/driveway":{"icon":"highway-service","fields":["oneway","maxspeed","structure","access","surface","maxheight"],"geometry":["line"],"tags":{"highway":"service","service":"driveway"},"reference":{"key":"service","value":"driveway"},"name":"Driveway"},"highway/service/emergency_access":{"icon":"highway-service","fields":["oneway","maxspeed","structure","access","surface","maxheight"],"geometry":["line"],"tags":{"highway":"service","service":"emergency_access"},"reference":{"key":"service","value":"emergency_access"},"name":"Emergency Access"},"highway/service/parking_aisle":{"icon":"highway-service","fields":["oneway","maxspeed","structure","access","surface","maxheight"],"geometry":["line"],"tags":{"highway":"service","service":"parking_aisle"},"reference":{"key":"service","value":"parking_aisle"},"name":"Parking Aisle"},"highway/services":{"icon":"car","geometry":["point","vertex","area"],"tags":{"highway":"services"},"terms":["services","travel plaza","service station"],"name":"Service Area"},"highway/speed_camera":{"icon":"attraction","geometry":["point"],"fields":["ref"],"tags":{"highway":"speed_camera"},"terms":[],"name":"Speed Camera"},"highway/steps":{"icon":"highway-steps","fields":["surface","lit","width","incline_steps","handrail","step_count"],"geometry":["line"],"tags":{"highway":"steps"},"terms":["stairs","staircase"],"name":"Steps"},"highway/stop":{"icon":"poi-stop","fields":["stop","parallel_direction"],"geometry":["vertex"],"tags":{"highway":"stop"},"terms":["stop","halt","sign"],"name":"Stop Sign"},"highway/street_lamp":{"icon":"poi-street-lamp","geometry":["point","vertex"],"tags":{"highway":"street_lamp"},"fields":["lamp_type","ref"],"terms":["streetlight","street light","lamp","light","gaslight"],"name":"Street Lamp"},"highway/tertiary_link":{"icon":"highway-tertiary-link","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","ref","cycleway","access"],"geometry":["line"],"tags":{"highway":"tertiary_link"},"terms":["ramp","on ramp","off ramp"],"name":"Tertiary Link"},"highway/tertiary":{"icon":"highway-tertiary","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","ref","cycleway","access"],"geometry":["line"],"tags":{"highway":"tertiary"},"terms":[],"name":"Tertiary Road"},"highway/track":{"icon":"highway-track","fields":["tracktype","surface","width","structure","access","incline","smoothness","mtb/scale","mtb/scale/uphill","mtb/scale/imba"],"geometry":["line"],"tags":{"highway":"track"},"terms":["woods road","forest road","logging road","fire road","farm road","agricultural road","ranch road","carriage road","primitive","unmaintained","rut","offroad","4wd","4x4","four wheel drive","atv","quad","jeep","double track","two track"],"name":"Unmaintained Track Road"},"highway/traffic_mirror":{"geometry":["point"],"tags":{"highway":"traffic_mirror"},"terms":["blind spot","convex","corner","curved","roadside","round","safety","sphere","visibility"],"name":"Traffic Mirror"},"highway/traffic_signals":{"icon":"poi-traffic-signals","geometry":["vertex"],"tags":{"highway":"traffic_signals"},"fields":["traffic_signals"],"terms":["light","stoplight","traffic light"],"name":"Traffic Signals"},"highway/trunk_link":{"icon":"highway-trunk-link","fields":["ref","oneway","maxspeed","lanes","surface","structure","maxheight","access"],"geometry":["line"],"tags":{"highway":"trunk_link"},"terms":["ramp","on ramp","off ramp"],"name":"Trunk Link"},"highway/trunk":{"icon":"highway-trunk","fields":["ref","oneway","maxspeed","lanes","surface","structure","maxheight","toll","access"],"geometry":["line"],"tags":{"highway":"trunk"},"terms":[],"name":"Trunk Road"},"highway/turning_circle":{"icon":"circle-stroked","geometry":["vertex"],"tags":{"highway":"turning_circle"},"terms":["cul-de-sac"],"name":"Turning Circle"},"highway/turning_loop":{"icon":"circle","geometry":["vertex"],"tags":{"highway":"turning_loop"},"terms":["cul-de-sac"],"name":"Turning Loop (Island)"},"highway/unclassified":{"icon":"highway-unclassified","fields":["oneway","maxspeed","lanes","surface","structure","maxheight","cycleway","access"],"geometry":["line"],"tags":{"highway":"unclassified"},"terms":[],"name":"Minor/Unclassified Road"},"historic":{"icon":"poi-ruins","fields":["historic","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"*"},"name":"Historic Site"},"historic/archaeological_site":{"icon":"poi-ruins","fields":["historic/civilization","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"archaeological_site"},"name":"Archaeological Site"},"historic/boundary_stone":{"icon":"monument","fields":["inscription"],"geometry":["point","vertex"],"tags":{"historic":"boundary_stone"},"name":"Boundary Stone"},"historic/castle":{"icon":"castle","fields":["castle_type","building_area","historic/civilization"],"geometry":["point","area"],"tags":{"historic":"castle"},"name":"Castle"},"historic/memorial":{"icon":"monument","fields":["inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"memorial"},"name":"Memorial"},"historic/monument":{"icon":"monument","fields":["inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"monument"},"name":"Monument"},"historic/ruins":{"icon":"poi-ruins","fields":["historic/civilization","inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"ruins"},"name":"Ruins"},"historic/tomb":{"icon":"cemetery","fields":["tomb","building_area","inscription"],"geometry":["point","area"],"tags":{"historic":"tomb"},"name":"Tomb"},"historic/wayside_cross":{"icon":"religious-christian","fields":["inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"wayside_cross"},"name":"Wayside Cross"},"historic/wayside_shrine":{"icon":"landmark","fields":["inscription"],"geometry":["point","vertex","area"],"tags":{"historic":"wayside_shrine"},"name":"Wayside Shrine"},"junction":{"icon":"poi-junction","geometry":["vertex","area"],"tags":{"junction":"yes"},"name":"Junction"},"landuse":{"fields":["landuse"],"geometry":["area"],"tags":{"landuse":"*"},"matchScore":0.9,"name":"Land Use"},"landuse/farm":{"icon":"farm","fields":["operator","crop"],"geometry":["point","area"],"tags":{"landuse":"farm"},"terms":[],"name":"Farmland","searchable":false},"landuse/allotments":{"geometry":["area"],"tags":{"landuse":"allotments"},"terms":["allotment","garden"],"name":"Community Garden"},"landuse/aquaculture":{"icon":"aquarium","fields":["operator","produce"],"geometry":["area"],"tags":{"landuse":"aquaculture"},"terms":["fish farm","crustacean","algae","aquafarming","shrimp farm","oyster farm","mariculture","algaculture"],"name":"Aquaculture"},"landuse/basin":{"icon":"water","geometry":["area"],"tags":{"landuse":"basin"},"terms":[],"name":"Basin"},"landuse/cemetery":{"icon":"cemetery","fields":["religion","denomination"],"geometry":["area"],"tags":{"landuse":"cemetery"},"terms":[],"name":"Cemetery"},"landuse/churchyard":{"fields":["religion","denomination"],"geometry":["area"],"tags":{"landuse":"churchyard"},"terms":[],"name":"Churchyard"},"landuse/commercial":{"icon":"commercial","geometry":["area"],"tags":{"landuse":"commercial"},"terms":[],"name":"Commercial Area"},"landuse/construction":{"fields":["construction","operator"],"geometry":["area"],"tags":{"landuse":"construction"},"terms":[],"name":"Construction"},"landuse/farmland":{"icon":"farm","fields":["operator","crop","produce"],"geometry":["area"],"tags":{"landuse":"farmland"},"terms":["crop","grow","plant"],"name":"Farmland"},"landuse/farmyard":{"icon":"farm","fields":["operator","crop"],"geometry":["area"],"tags":{"landuse":"farmyard"},"terms":["crop","grow","plant"],"name":"Farmyard"},"landuse/forest":{"icon":"park-alt1","fields":["leaf_type","leaf_cycle","produce"],"geometry":["area"],"tags":{"landuse":"forest"},"terms":["tree"],"name":"Forest"},"landuse/garages":{"geometry":["area"],"tags":{"landuse":"garages"},"terms":[],"name":"Garages"},"landuse/grass":{"geometry":["area"],"tags":{"landuse":"grass"},"terms":[],"name":"Grass"},"landuse/harbour":{"icon":"harbor","fields":["operator"],"geometry":["area"],"terms":["boat"],"tags":{"landuse":"harbour"},"name":"Harbor"},"landuse/industrial":{"icon":"industry","geometry":["area"],"tags":{"landuse":"industrial"},"terms":[],"matchScore":0.9,"name":"Industrial Area"},"landuse/landfill":{"geometry":["area"],"tags":{"landuse":"landfill"},"terms":["dump"],"name":"Landfill"},"landuse/meadow":{"geometry":["area"],"tags":{"landuse":"meadow"},"terms":[],"name":"Meadow"},"landuse/military":{"icon":"poi-military","geometry":["area"],"tags":{"landuse":"military"},"terms":[],"matchScore":0.9,"name":"Military Area"},"landuse/military/airfield":{"icon":"airfield","fields":["ref","iata","icao"],"geometry":["point","area"],"tags":{"military":"airfield"},"addTags":{"landuse":"military","military":"airfield"},"removeTags":{"landuse":"military","military":"airfield"},"terms":["air force","army","base","bomb","fight","force","guard","heli*","jet","marine","navy","plane","troop","war"],"name":"Military Airfield"},"landuse/military/barracks":{"icon":"poi-military","fields":["building_area"],"geometry":["point","area"],"tags":{"military":"barracks"},"addTags":{"landuse":"military","military":"barracks"},"removeTags":{"landuse":"military","military":"barracks"},"terms":["air force","army","base","fight","force","guard","marine","navy","troop","war"],"name":"Barracks"},"landuse/military/bunker":{"icon":"poi-military","fields":["bunker_type","building_area"],"geometry":["point","area"],"tags":{"military":"bunker"},"addTags":{"building":"bunker","landuse":"military","military":"bunker"},"removeTags":{"building":"bunker","landuse":"military","military":"bunker"},"terms":["air force","army","base","fight","force","guard","marine","navy","troop","war"],"name":"Military Bunker"},"landuse/military/checkpoint":{"icon":"barrier","geometry":["point","vertex","area"],"tags":{"military":"checkpoint"},"addTags":{"landuse":"military","military":"checkpoint"},"removeTags":{"landuse":"military","military":"checkpoint"},"terms":["air force","army","base","force","guard","marine","navy","troop","war"],"name":"Checkpoint"},"landuse/military/danger_area":{"icon":"danger","geometry":["point","vertex","area"],"tags":{"military":"danger_area"},"addTags":{"landuse":"military","military":"danger_area"},"removeTags":{"landuse":"military","military":"danger_area"},"terms":["air force","army","base","blast","bomb","explo*","force","guard","mine","marine","navy","troop","war"],"name":"Danger Area"},"landuse/military/naval_base":{"icon":"poi-military","geometry":["point","area"],"tags":{"military":"naval_base"},"addTags":{"landuse":"military","military":"naval_base"},"removeTags":{"landuse":"military","military":"naval_base"},"terms":["base","fight","force","guard","marine","navy","ship","sub","troop","war"],"name":"Naval Base"},"landuse/military/nuclear_explosion_site":{"icon":"danger","geometry":["point","vertex","area"],"tags":{"military":"nuclear_explosion_site"},"addTags":{"landuse":"military","military":"nuclear_explosion_site"},"removeTags":{"landuse":"military","military":"nuclear_explosion_site"},"terms":["atom","blast","bomb","detonat*","nuke","site","test"],"name":"Nuclear Explosion Site"},"landuse/military/obstacle_course":{"icon":"poi-military","geometry":["point","area"],"tags":{"military":"obstacle_course"},"addTags":{"landuse":"military","military":"obstacle_course"},"removeTags":{"landuse":"military","military":"obstacle_course"},"terms":["army","base","force","guard","marine","navy","troop","war"],"name":"Obstacle Course"},"landuse/military/office":{"icon":"poi-military","fields":["building_area"],"geometry":["point","area"],"tags":{"military":"office"},"addTags":{"landuse":"military","military":"office"},"removeTags":{"landuse":"military","military":"office"},"terms":["air force","army","base","enlist","fight","force","guard","marine","navy","recruit","troop","war"],"name":"Military Office"},"landuse/military/range":{"icon":"poi-military","geometry":["point","area"],"tags":{"military":"range"},"addTags":{"landuse":"military","military":"range"},"removeTags":{"landuse":"military","military":"range"},"terms":["air force","army","base","fight","fire","force","guard","gun","marine","navy","rifle","shoot*","snip*","train","troop","war"],"name":"Military Range"},"landuse/military/training_area":{"icon":"poi-military","geometry":["point","area"],"tags":{"military":"training_area"},"addTags":{"landuse":"military","military":"training_area"},"removeTags":{"landuse":"military","military":"training_area"},"terms":["air force","army","base","fight","fire","force","guard","gun","marine","navy","rifle","shoot*","snip*","train","troop","war"],"name":"Training Area"},"landuse/orchard":{"icon":"park-alt1","fields":["operator","trees"],"geometry":["area"],"tags":{"landuse":"orchard"},"terms":["fruit"],"name":"Orchard"},"landuse/plant_nursery":{"icon":"garden","fields":["operator","plant"],"geometry":["area"],"tags":{"landuse":"plant_nursery"},"terms":["flower","garden","grow","vivero"],"name":"Plant Nursery"},"landuse/quarry":{"geometry":["area"],"tags":{"landuse":"quarry"},"terms":[],"name":"Quarry"},"landuse/railway":{"icon":"rail","fields":["operator"],"geometry":["area"],"tags":{"landuse":"railway"},"terms":["rail","train","track"],"name":"Railway Corridor"},"landuse/recreation_ground":{"icon":"pitch","geometry":["area"],"tags":{"landuse":"recreation_ground"},"terms":["playing fields"],"name":"Recreation Ground"},"landuse/residential":{"icon":"building","geometry":["area"],"tags":{"landuse":"residential"},"terms":[],"name":"Residential Area"},"landuse/retail":{"icon":"shop","geometry":["area"],"tags":{"landuse":"retail"},"name":"Retail Area"},"landuse/vineyard":{"fields":["operator","grape_variety"],"geometry":["area"],"tags":{"landuse":"vineyard"},"addTags":{"landuse":"vineyard","crop":"grape"},"removeTags":{"landuse":"vineyard","crop":"grape","grape_variety":"*"},"terms":["grape","wine"],"name":"Vineyard"},"leisure":{"icon":"pitch","fields":["leisure"],"geometry":["point","vertex","area"],"tags":{"leisure":"*"},"name":"Leisure"},"leisure/adult_gaming_centre":{"icon":"poi-dice","fields":["operator","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"terms":["gambling","slot machine"],"tags":{"leisure":"adult_gaming_centre"},"name":"Adult Gaming Center"},"leisure/bird_hide":{"icon":"poi-binoculars","fields":["building_area"],"geometry":["point","area"],"tags":{"leisure":"bird_hide"},"terms":["machan","ornithology"],"name":"Bird Hide"},"leisure/bowling_alley":{"icon":"poi-bowling","fields":["operator","address","building_area","opening_hours","smoking"],"geometry":["point","area"],"terms":[],"tags":{"leisure":"bowling_alley"},"name":"Bowling Alley"},"leisure/common":{"icon":"poi-foot","geometry":["point","area"],"terms":["open space"],"tags":{"leisure":"common"},"name":"Common"},"leisure/dance":{"icon":"music","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["ballroom","jive","swing","tango","waltz"],"tags":{"leisure":"dance"},"name":"Dance Hall"},"leisure/dog_park":{"icon":"dog-park","geometry":["point","area"],"terms":[],"tags":{"leisure":"dog_park"},"name":"Dog Park"},"leisure/firepit":{"icon":"fire-station","geometry":["point","area"],"tags":{"leisure":"firepit"},"terms":["fireplace","campfire"],"name":"Firepit"},"leisure/fitness_centre":{"icon":"pitch","fields":["sport","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_centre"},"terms":["health","gym","leisure","studio"],"name":"Gym / Fitness Center"},"leisure/fitness_centre/yoga":{"icon":"pitch","fields":["sport","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["studio"],"tags":{"leisure":"fitness_centre","sport":"yoga"},"reference":{"key":"sport","value":"yoga"},"name":"Yoga Studio"},"leisure/fitness_station":{"icon":"pitch","fields":["sport","address","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"fitness_station"},"terms":["fitness","gym"],"name":"Outdoor Fitness Station"},"leisure/garden":{"icon":"garden","fields":["access_simple"],"geometry":["point","vertex","area"],"tags":{"leisure":"garden"},"name":"Garden"},"leisure/golf_course":{"icon":"golf","fields":["operator","address","opening_hours"],"geometry":["point","area"],"terms":["links"],"tags":{"leisure":"golf_course"},"name":"Golf Course"},"leisure/horse_riding":{"icon":"horse-riding","fields":["access_simple","operator","address","building"],"geometry":["point","area"],"terms":["equestrian","stable"],"tags":{"leisure":"horse_riding"},"name":"Horseback Riding Facility"},"leisure/ice_rink":{"icon":"pitch","fields":["seasonal","sport_ice","operator","address","building","opening_hours"],"geometry":["point","area"],"terms":["hockey","skating","curling"],"tags":{"leisure":"ice_rink"},"name":"Ice Rink"},"leisure/marina":{"icon":"harbor","fields":["operator","address","capacity","fee","sanitary_dump_station","power_supply","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","vertex","area"],"terms":["boat"],"tags":{"leisure":"marina"},"name":"Marina"},"leisure/miniature_golf":{"icon":"golf","fields":["operator","address","opening_hours"],"geometry":["point","area"],"terms":["crazy golf","mini golf","putt-putt"],"tags":{"leisure":"miniature_golf"},"name":"Miniature Golf"},"leisure/nature_reserve":{"icon":"park","geometry":["point","area"],"tags":{"leisure":"nature_reserve"},"terms":["protected","wildlife"],"name":"Nature Reserve"},"leisure/park":{"icon":"park","geometry":["point","area"],"terms":["esplanade","estate","forest","garden","grass","green","grounds","lawn","lot","meadow","parkland","place","playground","plaza","pleasure garden","recreation area","square","tract","village green","woodland"],"tags":{"leisure":"park"},"name":"Park"},"leisure/picnic_table":{"icon":"picnic-site","geometry":["point"],"tags":{"leisure":"picnic_table"},"terms":["bench"],"name":"Picnic Table"},"leisure/pitch":{"icon":"pitch","fields":["sport","surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch"},"terms":["field"],"name":"Sport Pitch"},"leisure/pitch/american_football":{"icon":"america-football","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"american_football"},"reference":{"key":"sport","value":"american_football"},"terms":[],"name":"American Football Field"},"leisure/pitch/baseball":{"icon":"baseball","fields":["lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"baseball"},"reference":{"key":"sport","value":"baseball"},"terms":[],"name":"Baseball Diamond"},"leisure/pitch/basketball":{"icon":"basketball","fields":["surface","hoops","lit","access_simple"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"basketball"},"reference":{"key":"sport","value":"basketball"},"terms":[],"name":"Basketball Court"},"leisure/pitch/beachvolleyball":{"icon":"basketball","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"beachvolleyball"},"addTags":{"leisure":"pitch","sport":"beachvolleyball","surface":"sand"},"removeTags":{"leisure":"pitch","sport":"beachvolleyball","surface":"sand"},"reference":{"key":"sport","value":"beachvolleyball"},"terms":["volleyball"],"name":"Beach Volleyball Court"},"leisure/pitch/bowls":{"icon":"pitch","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"bowls"},"reference":{"key":"sport","value":"bowls"},"terms":[],"name":"Bowling Green"},"leisure/pitch/cricket":{"icon":"cricket","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"cricket"},"reference":{"key":"sport","value":"cricket"},"terms":[],"name":"Cricket Field"},"leisure/pitch/equestrian":{"icon":"horse-riding","fields":["surface","lit","building"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"equestrian"},"reference":{"key":"sport","value":"equestrian"},"terms":["dressage","equestrian","horse","horseback","riding"],"name":"Riding Arena"},"leisure/pitch/rugby_league":{"icon":"america-football","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"rugby_league"},"reference":{"key":"sport","value":"rugby_league"},"terms":[],"name":"Rugby League Field"},"leisure/pitch/rugby_union":{"icon":"america-football","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"rugby_union"},"reference":{"key":"sport","value":"rugby_union"},"terms":[],"name":"Rugby Union Field"},"leisure/pitch/skateboard":{"icon":"pitch","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"skateboard"},"reference":{"key":"sport","value":"skateboard"},"terms":[],"name":"Skate Park"},"leisure/pitch/soccer":{"icon":"soccer","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"soccer"},"reference":{"key":"sport","value":"soccer"},"terms":["football"],"name":"Soccer Field"},"leisure/pitch/table_tennis":{"icon":"tennis","fields":["lit","access_simple"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"table_tennis"},"reference":{"key":"sport","value":"table_tennis"},"terms":["table tennis","ping pong"],"name":"Ping Pong Table"},"leisure/pitch/tennis":{"icon":"tennis","fields":["surface","lit","access_simple"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"tennis"},"reference":{"key":"sport","value":"tennis"},"terms":[],"name":"Tennis Court"},"leisure/pitch/volleyball":{"icon":"basketball","fields":["surface","lit"],"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"volleyball"},"reference":{"key":"sport","value":"volleyball"},"terms":[],"name":"Volleyball Court"},"leisure/playground":{"icon":"playground","geometry":["point","area"],"terms":["jungle gym","play area"],"tags":{"leisure":"playground"},"name":"Playground"},"leisure/resort":{"icon":"lodging","fields":["operator","address","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"resort"},"name":"Resort"},"leisure/running_track":{"icon":"pitch","fields":["surface","sport_racing_nonmotor","lit","width","lanes"],"geometry":["point","line","area"],"tags":{"leisure":"track","sport":"running"},"terms":["race*","running","sprint","track"],"name":"Racetrack (Running)"},"leisure/slipway":{"icon":"poi-beach","geometry":["point","line"],"terms":["boat launch","boat ramp"],"tags":{"leisure":"slipway"},"name":"Slipway"},"leisure/sports_centre":{"icon":"pitch","fields":["sport","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"leisure":"sports_centre"},"terms":[],"name":"Sports Center / Complex"},"leisure/sports_centre/swimming":{"icon":"swimming","fields":["access_simple","operator","address","building"],"geometry":["point","area"],"terms":["dive","water"],"tags":{"leisure":"sports_centre","sport":"swimming"},"reference":{"key":"sport","value":"swimming"},"name":"Swimming Pool Facility"},"leisure/stadium":{"icon":"pitch","fields":["sport","address"],"geometry":["point","area"],"tags":{"leisure":"stadium"},"name":"Stadium"},"leisure/swimming_pool":{"icon":"swimming","fields":["access_simple","operator","address"],"geometry":["point","area"],"terms":["dive","water"],"tags":{"leisure":"swimming_pool"},"name":"Swimming Pool"},"leisure/track":{"icon":"highway-road","fields":["surface","sport_racing_nonmotor","lit","width","lanes"],"geometry":["point","line","area"],"tags":{"leisure":"track"},"terms":["cycle","dog","greyhound","horse","race*","track"],"name":"Racetrack (Non-Motorsport)"},"leisure/water_park":{"icon":"swimming","fields":["operator","address"],"geometry":["point","area"],"terms":["swim","pool","dive"],"tags":{"leisure":"water_park"},"name":"Water Park"},"line":{"name":"Line","tags":{},"geometry":["line"],"matchScore":0.1},"man_made":{"icon":"poi-storage-tank","fields":["man_made"],"geometry":["point","vertex","line","area"],"tags":{"man_made":"*"},"name":"Man Made"},"man_made/embankment":{"geometry":["line"],"tags":{"man_made":"embankment"},"name":"Embankment","searchable":false},"man_made/adit":{"icon":"triangle","geometry":["point","area"],"fields":["operator"],"terms":["entrance","underground","mine","cave"],"tags":{"man_made":"adit"},"name":"Adit"},"man_made/breakwater":{"geometry":["line","area"],"tags":{"man_made":"breakwater"},"name":"Breakwater"},"man_made/bridge":{"geometry":["area"],"tags":{"man_made":"bridge"},"name":"Bridge"},"man_made/chimney":{"icon":"poi-chimney","geometry":["point","area"],"tags":{"man_made":"chimney"},"name":"Chimney"},"man_made/cutline":{"geometry":["line"],"tags":{"man_made":"cutline"},"name":"Cut line"},"man_made/flagpole":{"icon":"embassy","geometry":["point"],"tags":{"man_made":"flagpole"},"name":"Flagpole"},"man_made/gasometer":{"icon":"poi-storage-tank","geometry":["point","area"],"terms":["gas holder"],"tags":{"man_made":"gasometer"},"name":"Gasometer"},"man_made/groyne":{"geometry":["line","area"],"tags":{"man_made":"groyne"},"name":"Groyne"},"man_made/lighthouse":{"icon":"lighthouse","fields":["building_area"],"geometry":["point","area"],"tags":{"man_made":"lighthouse"},"name":"Lighthouse"},"man_made/mast":{"icon":"poi-mast","fields":["tower/type","tower/construction","height","communication_multi"],"geometry":["point"],"terms":["antenna","broadcast tower","cell phone tower","cell tower","communication mast","communication tower","guyed tower","mobile phone tower","radio mast","radio tower","television tower","transmission mast","transmission tower","tv tower"],"tags":{"man_made":"mast"},"name":"Mast"},"man_made/observation":{"icon":"poi-tower","geometry":["point","area"],"terms":["lookout tower","fire tower"],"tags":{"man_made":"tower","tower:type":"observation"},"name":"Observation Tower"},"man_made/petroleum_well":{"icon":"poi-storage-tank","geometry":["point"],"terms":["drilling rig","oil derrick","oil drill","oil horse","oil rig","oil pump","petroleum well","pumpjack"],"tags":{"man_made":"petroleum_well"},"name":"Oil Well"},"man_made/pier":{"geometry":["line","area"],"terms":["dock"],"tags":{"man_made":"pier"},"name":"Pier"},"man_made/pipeline":{"icon":"pipeline-line","fields":["location","operator"],"geometry":["line"],"tags":{"man_made":"pipeline"},"name":"Pipeline"},"man_made/pumping_station":{"icon":"water","geometry":["point","area"],"tags":{"man_made":"pumping_station"},"name":"Pumping Station"},"man_made/silo":{"icon":"poi-silo","fields":["building_area","crop"],"geometry":["point","area"],"terms":["grain","corn","wheat"],"tags":{"man_made":"silo"},"name":"Silo"},"man_made/storage_tank":{"icon":"poi-storage-tank","fields":["building_area","content"],"geometry":["point","area"],"terms":["water","oil","gas","petrol"],"tags":{"man_made":"storage_tank"},"name":"Storage Tank"},"man_made/surveillance_camera":{"icon":"attraction","geometry":["point"],"fields":["surveillance","surveillance/type","camera/type","camera/mount","camera/direction","surveillance/zone","contact/webcam"],"terms":["anpr","alpr","camera","car plate recognition","cctv","guard","license plate recognition","monitoring","number plate recognition","security","video","webcam"],"tags":{"man_made":"surveillance","surveillance:type":"camera"},"name":"Surveillance Camera"},"man_made/surveillance":{"icon":"attraction","geometry":["point"],"fields":["surveillance","surveillance/type","surveillance/zone"],"terms":["anpr","alpr","camera","car plate recognition","cctv","guard","license plate recognition","monitoring","number plate recognition","security","video","webcam"],"tags":{"man_made":"surveillance"},"name":"Surveillance"},"man_made/survey_point":{"icon":"monument","fields":["ref"],"geometry":["point","vertex"],"tags":{"man_made":"survey_point"},"name":"Survey Point"},"man_made/tower":{"icon":"poi-tower","fields":["tower/type","tower/construction","height"],"geometry":["point","area"],"tags":{"man_made":"tower"},"name":"Tower"},"man_made/wastewater_plant":{"icon":"water","fields":["operator","address"],"geometry":["point","area"],"terms":["sewage*","water treatment plant","reclamation plant"],"tags":{"man_made":"wastewater_plant"},"name":"Wastewater Plant"},"man_made/water_tower":{"icon":"water","fields":["operator"],"geometry":["point","area"],"tags":{"man_made":"water_tower"},"name":"Water Tower"},"man_made/water_well":{"icon":"water","fields":["operator"],"geometry":["point","area"],"tags":{"man_made":"water_well"},"name":"Water Well"},"man_made/water_works":{"icon":"water","fields":["operator","address"],"geometry":["point","area"],"tags":{"man_made":"water_works"},"name":"Water Works"},"man_made/works":{"icon":"industry","fields":["operator","address","building_area","product"],"geometry":["point","area"],"terms":["assembly","build","brewery","car","plant","plastic","processing","manufacture","refinery"],"tags":{"man_made":"works"},"name":"Factory"},"natural":{"icon":"natural","fields":["natural"],"geometry":["point","vertex","area"],"tags":{"natural":"*"},"name":"Natural"},"natural/bare_rock":{"geometry":["area"],"tags":{"natural":"bare_rock"},"terms":["rock"],"name":"Bare Rock"},"natural/bay":{"icon":"poi-beach","geometry":["point","area"],"tags":{"natural":"bay"},"terms":[],"name":"Bay"},"natural/beach":{"icon":"poi-beach","fields":["surface"],"geometry":["point","area"],"tags":{"natural":"beach"},"terms":["shore"],"name":"Beach"},"natural/cave_entrance":{"icon":"triangle","geometry":["point","area"],"fields":["fee","access_simple"],"tags":{"natural":"cave_entrance"},"terms":["cavern","hollow","grotto","shelter","cavity"],"name":"Cave Entrance"},"natural/cliff":{"icon":"triangle","geometry":["point","vertex","line","area"],"tags":{"natural":"cliff"},"terms":["escarpment"],"name":"Cliff"},"natural/coastline":{"geometry":["line"],"tags":{"natural":"coastline"},"terms":["shore"],"name":"Coastline"},"natural/fell":{"geometry":["area"],"tags":{"natural":"fell"},"terms":[],"name":"Fell"},"natural/glacier":{"geometry":["area"],"tags":{"natural":"glacier"},"terms":[],"name":"Glacier"},"natural/grassland":{"geometry":["area"],"tags":{"natural":"grassland"},"terms":["prairie","savanna"],"name":"Grassland"},"natural/heath":{"geometry":["area"],"tags":{"natural":"heath"},"terms":[],"name":"Heath"},"natural/peak":{"icon":"mountain","fields":["elevation"],"geometry":["point","vertex"],"tags":{"natural":"peak"},"terms":["acme","aiguille","alp","climax","crest","crown","hill","mount","mountain","pinnacle","summit","tip","top"],"name":"Peak"},"natural/ridge":{"geometry":["line"],"tags":{"natural":"ridge"},"terms":["crest"],"name":"Ridge"},"natural/saddle":{"icon":"triangle-stroked","fields":["elevation"],"geometry":["point","vertex"],"tags":{"natural":"saddle"},"terms":["pass","mountain pass","top"],"name":"Saddle"},"natural/sand":{"geometry":["area"],"tags":{"natural":"sand"},"terms":["desert"],"name":"Sand"},"natural/scree":{"geometry":["area"],"tags":{"natural":"scree"},"terms":["loose rocks"],"name":"Scree"},"natural/scrub":{"geometry":["area"],"tags":{"natural":"scrub"},"terms":["bush","shrubs"],"name":"Scrub"},"natural/spring":{"icon":"water","geometry":["point","vertex"],"tags":{"natural":"spring"},"terms":[],"name":"Spring"},"natural/tree_row":{"icon":"park","fields":["leaf_type","leaf_cycle","denotation"],"geometry":["line"],"tags":{"natural":"tree_row"},"terms":[],"name":"Tree row"},"natural/tree":{"icon":"park","fields":["leaf_type_singular","leaf_cycle_singular","denotation"],"geometry":["point","vertex"],"tags":{"natural":"tree"},"terms":[],"name":"Tree"},"natural/volcano":{"icon":"volcano","fields":["elevation"],"geometry":["point","vertex"],"tags":{"natural":"volcano"},"terms":["mountain","crater"],"name":"Volcano"},"natural/water":{"icon":"water","fields":["water"],"geometry":["area"],"tags":{"natural":"water"},"name":"Water"},"natural/water/lake":{"icon":"water","geometry":["area"],"tags":{"natural":"water","water":"lake"},"reference":{"key":"natural","value":"water"},"terms":["lakelet","loch","mere"],"name":"Lake"},"natural/water/pond":{"icon":"water","geometry":["area"],"tags":{"natural":"water","water":"pond"},"reference":{"key":"natural","value":"water"},"terms":["lakelet","millpond","tarn","pool","mere"],"name":"Pond"},"natural/water/reservoir":{"icon":"water","geometry":["area"],"tags":{"natural":"water","water":"reservoir"},"reference":{"key":"natural","value":"water"},"name":"Reservoir"},"natural/wetland":{"icon":"wetland","fields":["wetland"],"geometry":["point","area"],"tags":{"natural":"wetland"},"terms":[],"name":"Wetland"},"natural/wood":{"icon":"park-alt1","fields":["leaf_type","leaf_cycle"],"geometry":["point","area"],"tags":{"natural":"wood"},"terms":["tree"],"name":"Wood"},"noexit/yes":{"icon":"barrier","geometry":["vertex"],"terms":["no exit","road end","dead end"],"tags":{"noexit":"yes"},"reference":{"key":"noexit","value":"*"},"name":"No Exit"},"office":{"icon":"commercial","fields":["office","address","building_area","opening_hours","smoking"],"geometry":["point","vertex","area"],"tags":{"office":"*"},"terms":[],"name":"Office"},"office/travel_agent":{"icon":"suitcase","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"travel_agent"},"reference":{"key":"shop","value":"travel_agency"},"terms":[],"name":"Travel Agency","searchable":false},"office/accountant":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"accountant"},"terms":[],"name":"Accountant"},"office/administrative":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"administrative"},"terms":[],"name":"Administrative Office"},"office/architect":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"architect"},"terms":[],"name":"Architect"},"office/company":{"icon":"commercial","fields":["address","building_area","opening_hours","smoking"],"geometry":["point","vertex","area"],"tags":{"office":"company"},"terms":[],"name":"Company Office"},"office/coworking":{"icon":"commercial","fields":["address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"terms":["coworking","office"],"tags":{"office":"coworking"},"reference":{"key":"amenity","value":"coworking_space"},"name":"Coworking Space"},"office/educational_institution":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"educational_institution"},"terms":[],"name":"Educational Institution"},"office/employment_agency":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"employment_agency"},"terms":["job"],"name":"Employment Agency"},"office/estate_agent":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"estate_agent"},"terms":[],"name":"Real Estate Office"},"office/financial":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"financial"},"terms":[],"name":"Financial Office"},"office/government":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"government"},"terms":[],"name":"Government Office"},"office/government/register_office":{"icon":"town-hall","fields":["address","building_area","opening_hours","operator"],"geometry":["point","area"],"terms":["clerk","marriage","death","birth","certificate"],"tags":{"office":"government","government":"register_office"},"reference":{"key":"government","value":"register_office"},"name":"Register Office"},"office/insurance":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"insurance"},"terms":[],"name":"Insurance Office"},"office/it":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"it"},"terms":[],"name":"IT Office"},"office/lawyer":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"lawyer"},"terms":[],"name":"Law Office"},"office/lawyer/notary":{"icon":"suitcase","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"lawyer","lawyer":"notary"},"reference":{"key":"office","value":"notary"},"terms":["clerk","signature","wills","deeds","estate"],"name":"Notary Office"},"office/newspaper":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"newspaper"},"terms":[],"name":"Newspaper"},"office/ngo":{"icon":"commercial","fields":["address","building_area","opening_hours","smoking"],"geometry":["point","vertex","area"],"tags":{"office":"ngo"},"terms":[],"name":"NGO Office"},"office/physician":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"physician"},"terms":[],"name":"Physician"},"office/political_party":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"political_party"},"terms":[],"name":"Political Party"},"office/research":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"research"},"terms":[],"name":"Research Office"},"office/telecommunication":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"telecommunication"},"terms":[],"name":"Telecom Office"},"office/therapist":{"icon":"commercial","fields":["address","building_area","opening_hours"],"geometry":["point","vertex","area"],"tags":{"office":"therapist"},"terms":[],"name":"Therapist"},"piste":{"icon":"skiing","fields":["piste/type","piste/difficulty","piste/grooming","oneway","lit"],"geometry":["point","line","area"],"terms":["ski","sled","sleigh","snowboard","nordic","downhill","snowmobile"],"tags":{"piste:type":"*"},"name":"Piste/Ski Trail"},"place/farm":{"icon":"farm","geometry":["point","area"],"tags":{"place":"farm"},"name":"Farm","searchable":false},"place/city":{"icon":"city","fields":["population"],"geometry":["point","area"],"tags":{"place":"city"},"name":"City"},"place/hamlet":{"icon":"triangle-stroked","fields":["population"],"geometry":["point","area"],"tags":{"place":"hamlet"},"name":"Hamlet"},"place/island":{"icon":"mountain","geometry":["point","area"],"terms":["archipelago","atoll","bar","cay","isle","islet","key","reef"],"tags":{"place":"island"},"name":"Island"},"place/isolated_dwelling":{"icon":"home","geometry":["point","area"],"tags":{"place":"isolated_dwelling"},"name":"Isolated Dwelling"},"place/locality":{"icon":"triangle-stroked","geometry":["point","area"],"tags":{"place":"locality"},"name":"Locality"},"place/neighbourhood":{"icon":"triangle-stroked","fields":["population"],"geometry":["point","area"],"tags":{"place":"neighbourhood"},"terms":["neighbourhood"],"name":"Neighborhood"},"place/quarter":{"icon":"triangle-stroked","fields":["population"],"geometry":["point","area"],"tags":{"place":"quarter"},"terms":["boro","borough","quarter"],"name":"Sub-Borough / Quarter"},"place/square":{"icon":"poi-foot","geometry":["point","area"],"tags":{"place":"square"},"name":"Square"},"place/suburb":{"icon":"triangle-stroked","fields":["population"],"geometry":["point","area"],"tags":{"place":"suburb"},"terms":["boro","borough","quarter"],"name":"Borough / Suburb"},"place/town":{"icon":"town","fields":["population"],"geometry":["point","area"],"tags":{"place":"town"},"name":"Town"},"place/village":{"icon":"village","fields":["population"],"geometry":["point","area"],"tags":{"place":"village"},"name":"Village"},"point":{"name":"Point","tags":{},"geometry":["point"],"matchScore":0.1},"power/sub_station":{"fields":["substation","operator","building"],"geometry":["point","area"],"tags":{"power":"sub_station"},"reference":{"key":"power","value":"substation"},"name":"Substation","searchable":false},"power/generator":{"icon":"poi-power","fields":["operator","generator/source","generator/method","generator/type"],"geometry":["point","vertex","area"],"tags":{"power":"generator"},"name":"Power Generator"},"power/line":{"icon":"power-line","geometry":["line"],"tags":{"power":"line"},"name":"Power Line"},"power/minor_line":{"icon":"power-line","geometry":["line"],"tags":{"power":"minor_line"},"name":"Minor Power Line"},"power/plant":{"icon":"industry","fields":["operator"],"geometry":["area"],"tags":{"power":"plant"},"addTags":{"power":"plant","landuse":"industrial"},"removeTags":{"power":"plant","landuse":"industrial"},"terms":["coal","gas","generat*","hydro","nuclear","power","station"],"name":"Power Station Grounds"},"power/pole":{"geometry":["vertex"],"tags":{"power":"pole"},"name":"Power Pole"},"power/substation":{"icon":"poi-power","fields":["substation","operator","building"],"geometry":["point","area"],"tags":{"power":"substation"},"name":"Substation"},"power/tower":{"geometry":["vertex"],"tags":{"power":"tower"},"name":"High-Voltage Tower"},"power/transformer":{"icon":"poi-power","geometry":["point","vertex","area"],"tags":{"power":"transformer"},"name":"Transformer"},"public_transport/platform":{"icon":"bus","fields":["ref","network","operator","shelter"],"geometry":["point","vertex","line","area"],"tags":{"public_transport":"platform"},"name":"Platform"},"public_transport/stop_position":{"icon":"bus","fields":["ref","network","operator"],"geometry":["vertex"],"tags":{"public_transport":"stop_position"},"name":"Stop Position"},"railway/abandoned":{"icon":"railway-abandoned","geometry":["line"],"tags":{"railway":"abandoned"},"fields":["structure","service_rail"],"terms":[],"name":"Abandoned Railway"},"railway/crossing":{"icon":"cross","geometry":["vertex"],"tags":{"railway":"crossing"},"terms":["crossing","pedestrian crossing","railroad crossing","level crossing","grade crossing","path through railroad","train crossing"],"name":"Railway Crossing (Path)"},"railway/disused":{"icon":"railway-disused","geometry":["line"],"tags":{"railway":"disused"},"fields":["structure","service_rail"],"terms":[],"name":"Disused Railway"},"railway/funicular":{"icon":"railway-rail","geometry":["line"],"terms":["venicular","cliff railway","cable car","cable railway","funicular railway"],"fields":["structure","gauge","service_rail"],"tags":{"railway":"funicular"},"name":"Funicular"},"railway/halt":{"icon":"rail","geometry":["point","vertex"],"tags":{"railway":"halt"},"name":"Railway Halt","terms":["break","interrupt","rest","wait","interruption"]},"railway/level_crossing":{"icon":"cross","geometry":["vertex"],"tags":{"railway":"level_crossing"},"terms":["crossing","railroad crossing","level crossing","grade crossing","road through railroad","train crossing"],"name":"Railway Crossing (Road)"},"railway/monorail":{"icon":"railway-monorail","geometry":["line"],"tags":{"railway":"monorail"},"fields":["structure","electrified","service_rail"],"terms":[],"name":"Monorail"},"railway/narrow_gauge":{"icon":"railway-rail","geometry":["line"],"tags":{"railway":"narrow_gauge"},"fields":["structure","gauge","electrified","service_rail"],"terms":["narrow gauge railway","narrow gauge railroad"],"name":"Narrow Gauge Rail"},"railway/platform":{"icon":"rail","geometry":["point","vertex","line","area"],"tags":{"railway":"platform"},"name":"Railway Platform"},"railway/rail":{"icon":"railway-rail","geometry":["line"],"tags":{"railway":"rail"},"fields":["structure","gauge","electrified","maxspeed","service_rail"],"terms":[],"name":"Rail"},"railway/station":{"icon":"rail","fields":["network","operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","vertex","area"],"tags":{"railway":"station"},"terms":["train station","station"],"name":"Railway Station"},"railway/subway_entrance":{"icon":"entrance","geometry":["point"],"tags":{"railway":"subway_entrance"},"terms":[],"name":"Subway Entrance"},"railway/subway":{"icon":"railway-subway","geometry":["line"],"tags":{"railway":"subway"},"fields":["structure","gauge","electrified","service_rail"],"terms":[],"name":"Subway"},"railway/tram_stop":{"icon":"rail-light","fields":["network","operator"],"geometry":["vertex"],"tags":{"railway":"tram_stop"},"terms":["light rail","streetcar","tram","trolley"],"name":"Tram Stop"},"railway/tram":{"icon":"railway-light-rail","geometry":["line"],"tags":{"railway":"tram"},"fields":["structure","gauge","electrified","service_rail"],"terms":["light rail","streetcar","tram","trolley"],"name":"Tram"},"relation":{"name":"Relation","icon":"relation","tags":{},"geometry":["relation"],"fields":["relation"]},"route/ferry":{"icon":"ferry-line","geometry":["line"],"tags":{"route":"ferry"},"name":"Ferry Route"},"shop":{"icon":"shop","fields":["shop","operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"*"},"terms":[],"name":"Shop"},"shop/fishmonger":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"fishmonger"},"reference":{"key":"shop","value":"seafood"},"name":"Fishmonger","searchable":false},"shop/vacant":{"icon":"shop","fields":["address","building_area"],"geometry":["point","area"],"tags":{"shop":"vacant"},"name":"Vacant Shop","searchable":false},"shop/alcohol":{"icon":"alcohol-shop","fields":["operator","address","building_area","opening_hours","drive_through"],"geometry":["point","area"],"terms":["alcohol","beer","booze","wine"],"tags":{"shop":"alcohol"},"name":"Liquor Store"},"shop/anime":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"anime"},"terms":["manga","japan","cosplay","figurine","dakimakura"],"name":"Anime Shop"},"shop/antiques":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"antiques"},"name":"Antiques Shop"},"shop/appliance":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["air conditioner","appliance","dishwasher","dryer","freezer","fridge","grill","kitchen","oven","refrigerator","stove","washer","washing machine"],"tags":{"shop":"appliance"},"name":"Appliance Store"},"shop/art":{"icon":"shop","fields":["artwork_type","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["art*","exhibit*","gallery"],"tags":{"shop":"art"},"name":"Art Store"},"shop/baby_goods":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"baby_goods"},"name":"Baby Goods Store"},"shop/bag":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["handbag","purse"],"tags":{"shop":"bag"},"name":"Bag/Luggage Store"},"shop/bakery":{"icon":"bakery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"bakery"},"name":"Bakery"},"shop/bathroom_furnishing":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"bathroom_furnishing"},"name":"Bathroom Furnishing Store"},"shop/beauty":{"icon":"shop","fields":["operator","address","building_area","opening_hours","beauty"],"geometry":["point","area"],"terms":["spa","salon","tanning"],"tags":{"shop":"beauty"},"name":"Beauty Shop"},"shop/beauty/nails":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["manicure","pedicure"],"tags":{"shop":"beauty","beauty":"nails"},"reference":{"key":"shop","value":"beauty"},"name":"Nail Salon"},"shop/beauty/tanning":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"beauty","beauty":"tanning"},"reference":{"key":"leisure","value":"tanning_salon"},"name":"Tanning Salon"},"shop/bed":{"icon":"lodging","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"bed"},"name":"Bedding/Mattress Store"},"shop/beverages":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"beverages"},"name":"Beverage Store"},"shop/bicycle":{"icon":"bicycle","fields":["operator","address","building_area","opening_hours","service/bicycle"],"geometry":["point","area"],"terms":["bike","repair"],"tags":{"shop":"bicycle"},"name":"Bicycle Shop"},"shop/bookmaker":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["betting"],"tags":{"shop":"bookmaker"},"name":"Bookmaker"},"shop/books":{"icon":"shop","fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"shop":"books"},"name":"Book Store"},"shop/boutique":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"boutique"},"name":"Boutique"},"shop/butcher":{"icon":"slaughterhouse","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["meat"],"tags":{"shop":"butcher"},"name":"Butcher"},"shop/candles":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"candles"},"name":"Candle Shop"},"shop/car_parts":{"icon":"car","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["auto"],"tags":{"shop":"car_parts"},"name":"Car Parts Store"},"shop/car_repair":{"icon":"car","fields":["operator","address","building_area","opening_hours","service/vehicle"],"geometry":["point","area"],"terms":["auto","garage","service"],"tags":{"shop":"car_repair"},"name":"Car Repair Shop"},"shop/car":{"icon":"car","fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"geometry":["point","area"],"terms":["auto"],"tags":{"shop":"car"},"name":"Car Dealership"},"shop/carpet":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["rug"],"tags":{"shop":"carpet"},"name":"Carpet Store"},"shop/charity":{"icon":"shop","fields":["operator","address","building_area","opening_hours","second_hand"],"geometry":["point","area"],"terms":["thrift","op shop","nonprofit"],"tags":{"shop":"charity"},"name":"Charity Store"},"shop/cheese":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"cheese"},"name":"Cheese Store"},"shop/chemist":{"icon":"grocery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"chemist"},"terms":["med*","drug*","gift"],"name":"Drugstore"},"shop/chocolate":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"chocolate"},"name":"Chocolate Store"},"shop/clothes":{"icon":"clothing-store","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"clothes"},"name":"Clothing Store"},"shop/coffee":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"coffee"},"name":"Coffee Store"},"shop/computer":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"computer"},"name":"Computer Store"},"shop/confectionery":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"confectionery"},"name":"Candy Store"},"shop/convenience":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"convenience"},"name":"Convenience Store"},"shop/copyshop":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"copyshop"},"name":"Copy Store"},"shop/cosmetics":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"cosmetics"},"name":"Cosmetics Store"},"shop/craft":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"craft"},"terms":["art*","paint*","frame"],"name":"Arts and Crafts Store"},"shop/curtain":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["drape*","window"],"tags":{"shop":"curtain"},"name":"Curtain Store"},"shop/dairy":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["milk","egg","cheese"],"tags":{"shop":"dairy"},"name":"Dairy Store"},"shop/deli":{"icon":"restaurant","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["lunch","meat","sandwich"],"tags":{"shop":"deli"},"name":"Deli"},"shop/department_store":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"department_store"},"name":"Department Store"},"shop/doityourself":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"doityourself"},"name":"DIY Store"},"shop/dry_cleaning":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"dry_cleaning"},"name":"Dry Cleaner"},"shop/e-cigarette":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"e-cigarette"},"terms":["electronic","vapor"],"name":"E-Cigarette Shop"},"shop/electronics":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["appliance","audio","blueray","camera","computer","dvd","home theater","radio","speaker","tv","video"],"tags":{"shop":"electronics"},"name":"Electronics Store"},"shop/erotic":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["sex","porn"],"tags":{"shop":"erotic"},"name":"Erotic Store"},"shop/fabric":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["sew"],"tags":{"shop":"fabric"},"name":"Fabric Store"},"shop/farm":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["farm shop","farm stand"],"tags":{"shop":"farm"},"name":"Produce Stand"},"shop/fashion":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"fashion"},"name":"Fashion Store"},"shop/florist":{"icon":"florist","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["flower"],"tags":{"shop":"florist"},"name":"Florist"},"shop/frame":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"frame"},"terms":["art*","paint*","photo*","frame"],"name":"Framing Shop"},"shop/funeral_directors":{"icon":"cemetery","fields":["operator","address","building_area","religion","denomination"],"geometry":["point","area"],"terms":["undertaker","memorial home"],"tags":{"shop":"funeral_directors"},"name":"Funeral Home"},"shop/furnace":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["oven","stove"],"tags":{"shop":"furnace"},"name":"Furnace Store"},"shop/furniture":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["chair","sofa","table"],"tags":{"shop":"furniture"},"name":"Furniture Store"},"shop/garden_centre":{"icon":"garden-center","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["landscape","mulch","shrub","tree"],"tags":{"shop":"garden_centre"},"name":"Garden Center"},"shop/gas":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["cng","lpg","natural gas","propane","refill","tank"],"tags":{"shop":"gas"},"name":"Bottled Gas Shop"},"shop/gift":{"icon":"gift","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["souvenir"],"tags":{"shop":"gift"},"name":"Gift Shop"},"shop/greengrocer":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["fruit","vegetable"],"tags":{"shop":"greengrocer"},"name":"Greengrocer"},"shop/hairdresser":{"icon":"hairdresser","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["barber"],"tags":{"shop":"hairdresser"},"name":"Hairdresser"},"shop/hardware":{"icon":"poi-tool","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"hardware"},"name":"Hardware Store"},"shop/hearing_aids":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"hearing_aids"},"name":"Hearing Aids Store"},"shop/herbalist":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"herbalist"},"name":"Herbalist"},"shop/hifi":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["stereo","video"],"tags":{"shop":"hifi"},"name":"Hifi Store"},"shop/houseware":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["home","household"],"tags":{"shop":"houseware"},"name":"Houseware Store"},"shop/interior_decoration":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"interior_decoration"},"name":"Interior Decoration Store"},"shop/jewelry":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["diamond","gem","ring"],"tags":{"shop":"jewelry"},"name":"Jeweler"},"shop/kiosk":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"kiosk"},"name":"News Kiosk"},"shop/kitchen":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"kitchen"},"name":"Kitchen Design Store"},"shop/laundry":{"icon":"laundry","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"laundry"},"name":"Laundry"},"shop/leather":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"leather"},"name":"Leather Store"},"shop/locksmith":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["key","lockpick"],"tags":{"shop":"locksmith"},"name":"Locksmith"},"shop/lottery":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"lottery"},"name":"Lottery Shop"},"shop/mall":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["shopping"],"tags":{"shop":"mall"},"name":"Mall"},"shop/massage":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"massage"},"name":"Massage Shop"},"shop/medical_supply":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"medical_supply"},"name":"Medical Supply Store"},"shop/mobile_phone":{"icon":"mobile-phone","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"mobile_phone"},"name":"Mobile Phone Store"},"shop/money_lender":{"icon":"bank","fields":["operator","address","building_area","opening_hours","currency_multi"],"geometry":["point","area"],"tags":{"shop":"money_lender"},"name":"Money Lender"},"shop/motorcycle":{"icon":"scooter","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["bike"],"tags":{"shop":"motorcycle"},"name":"Motorcycle Dealership"},"shop/music":{"icon":"music","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["CD","vinyl"],"tags":{"shop":"music"},"name":"Music Store"},"shop/musical_instrument":{"icon":"music","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["guitar"],"tags":{"shop":"musical_instrument"},"name":"Musical Instrument Store"},"shop/newsagent":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"newsagent"},"name":"Newspaper/Magazine Shop"},"shop/nutrition_supplements":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"nutrition_supplements"},"name":"Nutrition Supplements Store"},"shop/optician":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["eye","glasses"],"tags":{"shop":"optician"},"name":"Optician"},"shop/organic":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"supermarket","organic":"only"},"name":"Organic Goods Store"},"shop/outdoor":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["camping","climbing","hiking"],"tags":{"shop":"outdoor"},"name":"Outdoors Store"},"shop/paint":{"icon":"water","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"paint"},"name":"Paint Store"},"shop/pastry":{"icon":"bakery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"pastry"},"terms":["patisserie","cake shop","cakery"],"name":"Pastry Shop"},"shop/pawnbroker":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"pawnbroker"},"name":"Pawn Shop"},"shop/perfumery":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"perfumery"},"name":"Perfume Store"},"shop/pet":{"icon":"dog-park","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["animal","cat","dog","fish","kitten","puppy","reptile"],"tags":{"shop":"pet"},"name":"Pet Store"},"shop/photo":{"icon":"attraction","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["camera","film"],"tags":{"shop":"photo"},"name":"Photography Store"},"shop/pyrotechnics":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"pyrotechnics"},"name":"Fireworks Store"},"shop/radiotechnics":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"radiotechnics"},"name":"Radio/Electronic Component Store"},"shop/religion":{"icon":"shop","fields":["operator","address","building_area","opening_hours","religion","denomination"],"geometry":["point","area"],"tags":{"shop":"religion"},"name":"Religious Store"},"shop/scuba_diving":{"icon":"swimming","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"scuba_diving"},"name":"Scuba Diving Shop"},"shop/seafood":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["fishmonger"],"tags":{"shop":"seafood"},"name":"Seafood Shop"},"shop/second_hand":{"icon":"shop","fields":["operator","address","building_area","opening_hours","second_hand"],"geometry":["point","area"],"terms":["secondhand","second hand","resale","thrift","used"],"tags":{"shop":"second_hand"},"name":"Consignment/Thrift Store"},"shop/shoes":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"shoes"},"name":"Shoe Store"},"shop/sports":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"sports"},"name":"Sporting Goods Store"},"shop/stationery":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["card","paper"],"tags":{"shop":"stationery"},"name":"Stationery Store"},"shop/storage_rental":{"icon":"shop","fields":["operator","address","building","opening_hours"],"geometry":["point","area"],"tags":{"shop":"storage_rental"},"name":"Storage Rental"},"shop/supermarket":{"icon":"grocery","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["grocery","store","shop"],"tags":{"shop":"supermarket"},"name":"Supermarket"},"shop/tailor":{"icon":"clothing-store","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["clothes","suit"],"tags":{"shop":"tailor"},"name":"Tailor"},"shop/tattoo":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"tattoo"},"name":"Tattoo Parlor"},"shop/tea":{"icon":"teahouse","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"tea"},"name":"Tea Store"},"shop/ticket":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"ticket"},"name":"Ticket Seller"},"shop/tobacco":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"tobacco"},"name":"Tobacco Shop"},"shop/toys":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"toys"},"name":"Toy Store"},"shop/travel_agency":{"icon":"suitcase","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"travel_agency"},"name":"Travel Agency"},"shop/tyres":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"tyres"},"name":"Tire Store"},"shop/vacuum_cleaner":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"vacuum_cleaner"},"name":"Vacuum Cleaner Store"},"shop/variety_store":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"variety_store"},"name":"Variety Store"},"shop/video_games":{"icon":"gaming","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"video_games"},"name":"Video Game Store"},"shop/video":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["DVD"],"tags":{"shop":"video"},"name":"Video Store"},"shop/watches":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"watches"},"name":"Watches Shop"},"shop/water_sports":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"water_sports"},"name":"Watersport/Swim Shop"},"shop/weapons":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["ammo","gun","knife","knives"],"tags":{"shop":"weapons"},"name":"Weapon Shop"},"shop/window_blind":{"icon":"shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"window_blind"},"name":"Window Blind Store"},"shop/wine":{"icon":"alcohol-shop","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"tags":{"shop":"wine"},"name":"Wine Shop"},"tourism":{"icon":"attraction","fields":["tourism"],"geometry":["point","vertex","area"],"tags":{"tourism":"*"},"name":"Tourism"},"tourism/alpine_hut":{"icon":"lodging","fields":["operator","address","building_area","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"alpine_hut"},"name":"Alpine Hut"},"tourism/apartment":{"icon":"lodging","fields":["operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"apartment"},"name":"Guest Apartment / Condo"},"tourism/aquarium":{"icon":"aquarium","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["fish","sea","water"],"tags":{"tourism":"aquarium"},"name":"Aquarium"},"tourism/artwork":{"icon":"art-gallery","fields":["artwork_type","artist"],"geometry":["point","vertex","area"],"tags":{"tourism":"artwork"},"terms":["mural","sculpture","statue"],"name":"Artwork"},"tourism/attraction":{"icon":"monument","fields":["operator","address"],"geometry":["point","vertex","area"],"tags":{"tourism":"attraction"},"name":"Tourist Attraction"},"tourism/camp_site":{"icon":"campsite","fields":["operator","address","capacity","fee","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","vertex","area"],"terms":["tent","rv"],"tags":{"tourism":"camp_site"},"name":"Campground"},"tourism/caravan_site":{"icon":"bus","fields":["operator","address","capacity","fee","sanitary_dump_station","power_supply","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","vertex","area"],"terms":["Motor Home","Camper"],"tags":{"tourism":"caravan_site"},"name":"RV Park"},"tourism/chalet":{"icon":"lodging","fields":["operator","address","building_area","smoking","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"chalet"},"name":"Chalet"},"tourism/gallery":{"icon":"art-gallery","fields":["artwork_type","operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["art*","exhibit*","paint*","photo*","sculpt*"],"tags":{"tourism":"gallery"},"name":"Art Gallery"},"tourism/guest_house":{"icon":"lodging","fields":["operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"guest_house"},"terms":["B&B","Bed and Breakfast"],"name":"Guest House"},"tourism/hostel":{"icon":"lodging","fields":["operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"hostel"},"name":"Hostel"},"tourism/hotel":{"icon":"lodging","fields":["operator","address","building_area","smoking","stars","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"hotel"},"name":"Hotel"},"tourism/information":{"icon":"information","fields":["information","operator","address","building_area"],"geometry":["point","vertex","area"],"tags":{"tourism":"information"},"name":"Information"},"tourism/information/board":{"icon":"information","fields":["operator","board_type"],"geometry":["point","vertex"],"tags":{"tourism":"information","information":"board"},"reference":{"key":"information","value":"board"},"name":"Information Board"},"tourism/information/guidepost":{"icon":"information","fields":["operator","ref"],"geometry":["point","vertex"],"tags":{"tourism":"information","information":"guidepost"},"reference":{"key":"information","value":"guidepost"},"name":"Guidepost"},"tourism/information/map":{"icon":"information","fields":["operator","map_type","map_size"],"geometry":["point","vertex"],"tags":{"tourism":"information","information":"map"},"reference":{"key":"information","value":"map"},"name":"Map"},"tourism/information/office":{"icon":"information","fields":["operator","address","building_area"],"geometry":["point","vertex","area"],"tags":{"tourism":"information","information":"office"},"reference":{"key":"information","value":"office"},"name":"Tourist Information Office"},"tourism/motel":{"icon":"lodging","fields":["operator","address","building_area","smoking","rooms","internet_access","internet_access/fee","internet_access/ssid"],"geometry":["point","area"],"tags":{"tourism":"motel"},"name":"Motel"},"tourism/museum":{"icon":"museum","fields":["operator","address","building_area","opening_hours"],"geometry":["point","area"],"terms":["art*","exhibit*","gallery","foundation","hall","institution","paint*","photo*","sculpt*"],"tags":{"tourism":"museum"},"name":"Museum"},"tourism/picnic_site":{"icon":"picnic-site","fields":["operator","address","smoking"],"geometry":["point","vertex","area"],"terms":["camp"],"tags":{"tourism":"picnic_site"},"name":"Picnic Site"},"tourism/theme_park":{"icon":"amusement-park","fields":["operator","address","opening_hours"],"geometry":["point","area"],"tags":{"tourism":"theme_park"},"name":"Theme Park"},"tourism/viewpoint":{"icon":"poi-binoculars","geometry":["point","vertex"],"tags":{"tourism":"viewpoint"},"name":"Viewpoint"},"tourism/zoo":{"icon":"zoo","fields":["operator","address","opening_hours"],"geometry":["point","area"],"terms":["animal"],"tags":{"tourism":"zoo"},"name":"Zoo"},"traffic_calming":{"icon":"poi-warning","fields":["traffic_calming","parallel_direction"],"geometry":["vertex","line"],"tags":{"traffic_calming":"*"},"terms":["bump","hump","slow","speed"],"name":"Traffic Calming"},"traffic_calming/bump":{"icon":"poi-warning","fields":["surface","parallel_direction"],"geometry":["vertex","line"],"terms":["hump","speed","slow"],"tags":{"traffic_calming":"bump"},"name":"Speed Bump"},"traffic_calming/chicane":{"icon":"poi-warning","fields":["parallel_direction"],"geometry":["vertex","line"],"terms":["driveway link","speed","slow"],"tags":{"traffic_calming":"chicane"},"name":"Traffic Chicane"},"traffic_calming/choker":{"icon":"poi-warning","fields":["parallel_direction"],"geometry":["vertex","line"],"terms":["speed","slow"],"tags":{"traffic_calming":"choker"},"name":"Traffic Choker"},"traffic_calming/cushion":{"icon":"poi-warning","fields":["surface","parallel_direction"],"geometry":["vertex","line"],"terms":["bump","hump","speed","slow"],"tags":{"traffic_calming":"cushion"},"name":"Speed Cushion"},"traffic_calming/dip":{"icon":"poi-warning","fields":["surface","parallel_direction"],"geometry":["vertex","line"],"terms":["speed","slow"],"tags":{"traffic_calming":"dip"},"name":"Dip"},"traffic_calming/hump":{"icon":"poi-warning","fields":["surface","parallel_direction"],"geometry":["vertex","line"],"terms":["bump","speed","slow"],"tags":{"traffic_calming":"hump"},"name":"Speed Hump"},"traffic_calming/island":{"icon":"poi-warning","geometry":["vertex"],"terms":["circle","roundabout","slow"],"tags":{"traffic_calming":"island"},"name":"Traffic Island"},"traffic_calming/rumble_strip":{"icon":"poi-warning","fields":["parallel_direction"],"geometry":["vertex","line"],"terms":["audible lines","sleeper lines","growlers"],"tags":{"traffic_calming":"rumble_strip"},"name":"Rumble Strip"},"traffic_calming/table":{"icon":"poi-warning","fields":["surface"],"geometry":["vertex","line"],"terms":["flat top","hump","speed","slow"],"tags":{"highway":"crossing","traffic_calming":"table"},"name":"Raised Pedestrian Crossing"},"type/multipolygon":{"geometry":["area","relation"],"tags":{"type":"multipolygon"},"removeTags":{},"name":"Multipolygon","icon":"multipolygon","searchable":false,"matchScore":0.1},"type/boundary":{"geometry":["relation"],"tags":{"type":"boundary"},"name":"Boundary","icon":"boundary","fields":["boundary"]},"type/boundary/administrative":{"icon":"boundary","fields":["admin_level"],"geometry":["relation"],"tags":{"type":"boundary","boundary":"administrative"},"reference":{"key":"boundary","value":"administrative"},"name":"Administrative Boundary"},"type/restriction":{"geometry":["relation"],"tags":{"type":"restriction"},"name":"Restriction","icon":"restriction","fields":["restriction","except"]},"type/restriction/no_left_turn":{"name":"No Left Turn","geometry":["relation"],"tags":{"type":"restriction","restriction":"no_left_turn"},"fields":["except"],"icon":"restriction-no-left-turn"},"type/restriction/no_right_turn":{"name":"No Right Turn","geometry":["relation"],"tags":{"type":"restriction","restriction":"no_right_turn"},"fields":["except"],"icon":"restriction-no-right-turn"},"type/restriction/no_straight_on":{"name":"No Straight On","geometry":["relation"],"tags":{"type":"restriction","restriction":"no_straight_on"},"fields":["except"],"icon":"restriction-no-straight-on"},"type/restriction/no_u_turn":{"name":"No U-turn","geometry":["relation"],"tags":{"type":"restriction","restriction":"no_u_turn"},"fields":["except"],"icon":"restriction-no-u-turn"},"type/restriction/only_left_turn":{"name":"Left Turn Only","geometry":["relation"],"tags":{"type":"restriction","restriction":"only_left_turn"},"fields":["except"],"icon":"restriction-only-left-turn"},"type/restriction/only_right_turn":{"name":"Right Turn Only","geometry":["relation"],"tags":{"type":"restriction","restriction":"only_right_turn"},"fields":["except"],"icon":"restriction-only-right-turn"},"type/restriction/only_straight_on":{"name":"No Turns","geometry":["relation"],"tags":{"type":"restriction","restriction":"only_straight_on"},"fields":["except"],"icon":"restriction-only-straight-on"},"type/route_master":{"geometry":["relation"],"tags":{"type":"route_master"},"name":"Route Master","icon":"route-master","fields":["route_master","ref","operator","network"]},"type/route":{"geometry":["relation"],"tags":{"type":"route"},"name":"Route","icon":"route","fields":["route","ref","operator","network"]},"type/route/bicycle":{"geometry":["relation"],"tags":{"type":"route","route":"bicycle"},"name":"Cycle Route","icon":"route-bicycle","fields":["ref","network_bicycle","cycle_network"]},"type/route/bus":{"geometry":["relation"],"tags":{"type":"route","route":"bus"},"name":"Bus Route","icon":"route-bus","fields":["ref","operator","network"]},"type/route/detour":{"geometry":["relation"],"tags":{"type":"route","route":"detour"},"name":"Detour Route","icon":"route-detour","fields":["ref"]},"type/route/ferry":{"geometry":["relation"],"tags":{"type":"route","route":"ferry"},"name":"Ferry Route","icon":"route-ferry","fields":["ref","operator","network"]},"type/route/foot":{"geometry":["relation"],"tags":{"type":"route","route":"foot"},"name":"Foot Route","icon":"route-foot","fields":["ref","operator","network_foot"]},"type/route/hiking":{"geometry":["relation"],"tags":{"type":"route","route":"hiking"},"name":"Hiking Route","icon":"route-foot","fields":["ref","operator","network_foot"]},"type/route/horse":{"geometry":["relation"],"tags":{"type":"route","route":"horse"},"name":"Riding Route","icon":"route-horse","fields":["ref","operator","network_horse"]},"type/route/pipeline":{"geometry":["relation"],"tags":{"type":"route","route":"pipeline"},"name":"Pipeline Route","icon":"route-pipeline","fields":["ref","operator"]},"type/route/power":{"geometry":["relation"],"tags":{"type":"route","route":"power"},"name":"Power Route","icon":"route-power","fields":["ref","operator"]},"type/route/road":{"geometry":["relation"],"tags":{"type":"route","route":"road"},"name":"Road Route","icon":"route-road","fields":["ref","network_road"]},"type/route/train":{"geometry":["relation"],"tags":{"type":"route","route":"train"},"name":"Train Route","icon":"route-train","fields":["ref","operator","network"]},"type/route/tram":{"geometry":["relation"],"tags":{"type":"route","route":"tram"},"name":"Tram Route","icon":"route-tram","fields":["ref","operator","network"]},"type/site":{"geometry":["relation"],"tags":{"type":"site"},"name":"Site","icon":"relation","fields":["site"]},"vertex":{"name":"Other","tags":{},"geometry":["vertex"],"matchScore":0.1},"waterway/boatyard":{"icon":"harbor","fields":["operator"],"geometry":["area","vertex","point"],"tags":{"waterway":"boatyard"},"name":"Boatyard"},"waterway/canal":{"icon":"waterway-canal","fields":["width"],"geometry":["line"],"tags":{"waterway":"canal"},"name":"Canal"},"waterway/dam":{"icon":"dam","geometry":["point","vertex","line","area"],"tags":{"waterway":"dam"},"name":"Dam"},"waterway/ditch":{"icon":"waterway-ditch","fields":["tunnel"],"geometry":["line"],"tags":{"waterway":"ditch"},"name":"Ditch"},"waterway/dock":{"icon":"harbor","fields":["dock","operator"],"geometry":["area","vertex","point"],"terms":["boat","ship","vessel","marine"],"tags":{"waterway":"dock"},"name":"Wet Dock / Dry Dock"},"waterway/drain":{"icon":"waterway-stream","fields":["tunnel"],"geometry":["line"],"tags":{"waterway":"drain"},"name":"Drain"},"waterway/fuel":{"icon":"fuel","fields":["operator","address","opening_hours","fuel_multi"],"geometry":["point","area"],"terms":["petrol","gas","diesel","boat"],"tags":{"waterway":"fuel"},"name":"Marine Fuel Station"},"waterway/river":{"icon":"waterway-river","fields":["tunnel","width"],"geometry":["line"],"terms":["beck","branch","brook","course","creek","estuary","rill","rivulet","run","runnel","stream","tributary","watercourse"],"tags":{"waterway":"river"},"name":"River"},"waterway/riverbank":{"icon":"water","geometry":["area"],"tags":{"waterway":"riverbank"},"name":"Riverbank"},"waterway/sanitary_dump_station":{"icon":"poi-storage-tank","fields":["operator","access_toilets","fee","water_point"],"geometry":["point","vertex","area"],"terms":["Boat","Watercraft","Sanitary","Dump Station","Pumpout","Pump out","Elsan","CDP","CTDP","Chemical Toilet"],"tags":{"waterway":"sanitary_dump_station"},"name":"Marine Toilet Disposal"},"waterway/stream":{"icon":"waterway-stream","fields":["tunnel","width"],"geometry":["line"],"terms":["beck","branch","brook","burn","course","creek","current","drift","flood","flow","freshet","race","rill","rindle","rivulet","run","runnel","rush","spate","spritz","surge","tide","torrent","tributary","watercourse"],"tags":{"waterway":"stream"},"name":"Stream"},"waterway/water_point":{"icon":"drinking-water","geometry":["area","vertex","point"],"tags":{"waterway":"water_point"},"name":"Marine Drinking Water"},"waterway/waterfall":{"icon":"water","fields":["height","width"],"geometry":["vertex"],"terms":["fall"],"tags":{"waterway":"waterfall"},"name":"Waterfall"},"waterway/weir":{"icon":"dam","geometry":["vertex","line"],"tags":{"waterway":"weir"},"name":"Weir"},"amenity/fuel/76":{"tags":{"name":"76","amenity":"fuel"},"name":"76","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Neste":{"tags":{"name":"Neste","amenity":"fuel"},"name":"Neste","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/BP":{"tags":{"name":"BP","amenity":"fuel"},"name":"BP","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Shell":{"tags":{"name":"Shell","amenity":"fuel"},"name":"Shell","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Agip":{"tags":{"name":"Agip","amenity":"fuel"},"name":"Agip","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Migrol":{"tags":{"name":"Migrol","amenity":"fuel"},"name":"Migrol","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Avia":{"tags":{"name":"Avia","amenity":"fuel"},"name":"Avia","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Texaco":{"tags":{"name":"Texaco","amenity":"fuel"},"name":"Texaco","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Total":{"tags":{"name":"Total","amenity":"fuel"},"name":"Total","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Statoil":{"tags":{"name":"Statoil","amenity":"fuel"},"name":"Statoil","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Esso":{"tags":{"name":"Esso","amenity":"fuel"},"name":"Esso","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Jet":{"tags":{"name":"Jet","amenity":"fuel"},"name":"Jet","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Avanti":{"tags":{"name":"Avanti","amenity":"fuel"},"name":"Avanti","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/OMV":{"tags":{"name":"OMV","amenity":"fuel"},"name":"OMV","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Aral":{"tags":{"name":"Aral","amenity":"fuel"},"name":"Aral","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/JET":{"tags":{"name":"JET","amenity":"fuel"},"name":"JET","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/United":{"tags":{"name":"United","amenity":"fuel"},"name":"United","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Mobil":{"tags":{"name":"Mobil","amenity":"fuel"},"name":"Mobil","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Caltex":{"tags":{"name":"Caltex","amenity":"fuel"},"name":"Caltex","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Sunoco":{"tags":{"name":"Sunoco","amenity":"fuel"},"name":"Sunoco","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Q8":{"tags":{"name":"Q8","amenity":"fuel"},"name":"Q8","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ARAL":{"tags":{"name":"ARAL","amenity":"fuel"},"name":"ARAL","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/CEPSA":{"tags":{"name":"CEPSA","amenity":"fuel"},"name":"CEPSA","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/BFT":{"tags":{"name":"BFT","amenity":"fuel"},"name":"BFT","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Petron":{"tags":{"name":"Petron","amenity":"fuel"},"name":"Petron","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Total Access":{"tags":{"name":"Total Access","amenity":"fuel"},"name":"Total Access","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Elf":{"tags":{"name":"Elf","amenity":"fuel"},"name":"Elf","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Station Service E. Leclerc":{"tags":{"name":"Station Service E. Leclerc","amenity":"fuel"},"name":"Station Service E. Leclerc","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Shell Express":{"tags":{"name":"Shell Express","amenity":"fuel"},"name":"Shell Express","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Hess":{"tags":{"name":"Hess","amenity":"fuel"},"name":"Hess","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Flying V":{"tags":{"name":"Flying V","amenity":"fuel"},"name":"Flying V","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/bft":{"tags":{"name":"bft","amenity":"fuel"},"name":"bft","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Gulf":{"tags":{"name":"Gulf","amenity":"fuel"},"name":"Gulf","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/PTT":{"tags":{"name":"PTT","amenity":"fuel"},"name":"PTT","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/St1":{"tags":{"name":"St1","amenity":"fuel"},"name":"St1","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Teboil":{"tags":{"name":"Teboil","amenity":"fuel"},"name":"Teboil","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/HEM":{"tags":{"name":"HEM","amenity":"fuel"},"name":"HEM","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/GALP":{"tags":{"name":"GALP","amenity":"fuel"},"name":"GALP","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/OK":{"tags":{"name":"OK","amenity":"fuel"},"name":"OK","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ÖMV":{"tags":{"name":"ÖMV","amenity":"fuel"},"name":"ÖMV","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Tinq":{"tags":{"name":"Tinq","amenity":"fuel"},"name":"Tinq","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/OKQ8":{"tags":{"name":"OKQ8","amenity":"fuel"},"name":"OKQ8","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Repsol":{"tags":{"name":"Repsol","amenity":"fuel"},"name":"Repsol","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Westfalen":{"tags":{"name":"Westfalen","amenity":"fuel"},"name":"Westfalen","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Esso Express":{"tags":{"name":"Esso Express","amenity":"fuel"},"name":"Esso Express","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Tamoil":{"tags":{"name":"Tamoil","amenity":"fuel"},"name":"Tamoil","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Engen":{"tags":{"name":"Engen","amenity":"fuel"},"name":"Engen","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Sasol":{"tags":{"name":"Sasol","amenity":"fuel"},"name":"Sasol","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Topaz":{"tags":{"name":"Topaz","amenity":"fuel"},"name":"Topaz","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/LPG":{"tags":{"name":"LPG","amenity":"fuel"},"name":"LPG","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Orlen":{"tags":{"name":"Orlen","amenity":"fuel"},"name":"Orlen","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Oilibya":{"tags":{"name":"Oilibya","amenity":"fuel"},"name":"Oilibya","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Tango":{"tags":{"name":"Tango","amenity":"fuel"},"name":"Tango","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Star":{"tags":{"name":"Star","amenity":"fuel"},"name":"Star","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Петрол":{"tags":{"name":"Петрол","amenity":"fuel"},"name":"Петрол","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Cepsa":{"tags":{"name":"Cepsa","amenity":"fuel"},"name":"Cepsa","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/OIL!":{"tags":{"name":"OIL!","amenity":"fuel"},"name":"OIL!","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Ultramar":{"tags":{"name":"Ultramar","amenity":"fuel"},"name":"Ultramar","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Irving":{"tags":{"name":"Irving","amenity":"fuel"},"name":"Irving","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Lukoil":{"tags":{"name":"Lukoil","amenity":"fuel"},"name":"Lukoil","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Petro-Canada":{"tags":{"name":"Petro-Canada","amenity":"fuel"},"name":"Petro-Canada","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Agrola":{"tags":{"name":"Agrola","amenity":"fuel"},"name":"Agrola","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Husky":{"tags":{"name":"Husky","amenity":"fuel"},"name":"Husky","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Slovnaft":{"tags":{"name":"Slovnaft","amenity":"fuel"},"name":"Slovnaft","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Sheetz":{"tags":{"name":"Sheetz","amenity":"fuel"},"name":"Sheetz","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Mol":{"tags":{"name":"Mol","amenity":"fuel"},"name":"Mol","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Petronas":{"tags":{"name":"Petronas","amenity":"fuel"},"name":"Petronas","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Газпромнефть":{"tags":{"name":"Газпромнефть","amenity":"fuel"},"name":"Газпромнефть","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Лукойл":{"tags":{"name":"Лукойл","amenity":"fuel"},"name":"Лукойл","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Elan":{"tags":{"name":"Elan","amenity":"fuel"},"name":"Elan","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Роснефть":{"tags":{"name":"Роснефть","amenity":"fuel"},"name":"Роснефть","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Turmöl":{"tags":{"name":"Turmöl","amenity":"fuel"},"name":"Turmöl","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Neste A24":{"tags":{"name":"Neste A24","amenity":"fuel"},"name":"Neste A24","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Marathon":{"tags":{"name":"Marathon","amenity":"fuel"},"name":"Marathon","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Valero":{"tags":{"name":"Valero","amenity":"fuel"},"name":"Valero","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Eni":{"tags":{"name":"Eni","amenity":"fuel"},"name":"Eni","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Chevron":{"tags":{"name":"Chevron","amenity":"fuel"},"name":"Chevron","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ТНК":{"tags":{"name":"ТНК","amenity":"fuel"},"name":"ТНК","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/REPSOL":{"tags":{"name":"REPSOL","amenity":"fuel"},"name":"REPSOL","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/MOL":{"tags":{"name":"MOL","amenity":"fuel"},"name":"MOL","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Bliska":{"tags":{"name":"Bliska","amenity":"fuel"},"name":"Bliska","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Api":{"tags":{"name":"Api","amenity":"fuel"},"name":"Api","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Arco":{"tags":{"name":"Arco","amenity":"fuel"},"name":"Arco","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Pemex":{"tags":{"name":"Pemex","amenity":"fuel"},"name":"Pemex","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Exxon":{"tags":{"name":"Exxon","amenity":"fuel"},"name":"Exxon","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Coles Express":{"tags":{"name":"Coles Express","amenity":"fuel"},"name":"Coles Express","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Petrom":{"tags":{"name":"Petrom","amenity":"fuel"},"name":"Petrom","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/PETRONOR":{"tags":{"name":"PETRONOR","amenity":"fuel"},"name":"PETRONOR","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Rompetrol":{"tags":{"name":"Rompetrol","amenity":"fuel"},"name":"Rompetrol","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Lotos":{"tags":{"name":"Lotos","amenity":"fuel"},"name":"Lotos","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ОМВ":{"tags":{"name":"ОМВ","amenity":"fuel"},"name":"ОМВ","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/BR":{"tags":{"name":"BR","amenity":"fuel"},"name":"BR","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Copec":{"tags":{"name":"Copec","amenity":"fuel"},"name":"Copec","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Petrobras":{"tags":{"name":"Petrobras","amenity":"fuel"},"name":"Petrobras","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Liberty":{"tags":{"name":"Liberty","amenity":"fuel"},"name":"Liberty","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/IP":{"tags":{"name":"IP","amenity":"fuel"},"name":"IP","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Erg":{"tags":{"name":"Erg","amenity":"fuel"},"name":"Erg","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Eneos":{"tags":{"name":"Eneos","amenity":"fuel"},"name":"Eneos","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Citgo":{"tags":{"name":"Citgo","amenity":"fuel"},"name":"Citgo","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Metano":{"tags":{"name":"Metano","amenity":"fuel"},"name":"Metano","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Сургутнефтегаз":{"tags":{"name":"Сургутнефтегаз","amenity":"fuel"},"name":"Сургутнефтегаз","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/EKO":{"tags":{"name":"EKO","amenity":"fuel"},"name":"EKO","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Eko":{"tags":{"name":"Eko","amenity":"fuel"},"name":"Eko","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Indipend.":{"tags":{"name":"Indipend.","amenity":"fuel"},"name":"Indipend.","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/IES":{"tags":{"name":"IES","amenity":"fuel"},"name":"IES","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/TotalErg":{"tags":{"name":"TotalErg","amenity":"fuel"},"name":"TotalErg","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Cenex":{"tags":{"name":"Cenex","amenity":"fuel"},"name":"Cenex","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ПТК":{"tags":{"name":"ПТК","amenity":"fuel"},"name":"ПТК","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/HP":{"tags":{"name":"HP","amenity":"fuel"},"name":"HP","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Phillips 66":{"tags":{"name":"Phillips 66","amenity":"fuel"},"name":"Phillips 66","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/CARREFOUR":{"tags":{"name":"CARREFOUR","amenity":"fuel"},"name":"CARREFOUR","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ERG":{"tags":{"name":"ERG","amenity":"fuel"},"name":"ERG","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Speedway":{"tags":{"name":"Speedway","amenity":"fuel"},"name":"Speedway","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Benzina":{"tags":{"name":"Benzina","amenity":"fuel"},"name":"Benzina","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Татнефть":{"tags":{"name":"Татнефть","amenity":"fuel"},"name":"Татнефть","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Terpel":{"tags":{"name":"Terpel","amenity":"fuel"},"name":"Terpel","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/WOG":{"tags":{"name":"WOG","amenity":"fuel"},"name":"WOG","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Seaoil":{"tags":{"name":"Seaoil","amenity":"fuel"},"name":"Seaoil","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/АЗС":{"tags":{"name":"АЗС","amenity":"fuel"},"name":"АЗС","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Kwik Trip":{"tags":{"name":"Kwik Trip","amenity":"fuel"},"name":"Kwik Trip","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Pertamina":{"tags":{"name":"Pertamina","amenity":"fuel"},"name":"Pertamina","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/COSMO":{"tags":{"name":"COSMO","amenity":"fuel"},"name":"COSMO","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Z":{"tags":{"name":"Z","amenity":"fuel"},"name":"Z","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Indian Oil":{"tags":{"name":"Indian Oil","amenity":"fuel"},"name":"Indian Oil","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/АГЗС":{"tags":{"name":"АГЗС","amenity":"fuel"},"name":"АГЗС","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/INA":{"tags":{"name":"INA","amenity":"fuel"},"name":"INA","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/JOMO":{"tags":{"name":"JOMO","amenity":"fuel"},"name":"JOMO","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Holiday":{"tags":{"name":"Holiday","amenity":"fuel"},"name":"Holiday","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/YPF":{"tags":{"name":"YPF","amenity":"fuel"},"name":"YPF","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/IDEMITSU":{"tags":{"name":"IDEMITSU","amenity":"fuel"},"name":"IDEMITSU","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ENEOS":{"tags":{"name":"ENEOS","amenity":"fuel"},"name":"ENEOS","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Bharat Petroleum":{"tags":{"name":"Bharat Petroleum","amenity":"fuel"},"name":"Bharat Petroleum","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/CAMPSA":{"tags":{"name":"CAMPSA","amenity":"fuel"},"name":"CAMPSA","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Casey's General Store":{"tags":{"name":"Casey's General Store","amenity":"fuel"},"name":"Casey's General Store","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Башнефть":{"tags":{"name":"Башнефть","amenity":"fuel"},"name":"Башнефть","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Kangaroo":{"tags":{"name":"Kangaroo","amenity":"fuel"},"name":"Kangaroo","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/コスモ石油 (COSMO)":{"tags":{"name":"コスモ石油 (COSMO)","amenity":"fuel"},"name":"コスモ石油 (COSMO)","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/MEROIL":{"tags":{"name":"MEROIL","amenity":"fuel"},"name":"MEROIL","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/1-2-3":{"tags":{"name":"1-2-3","amenity":"fuel"},"name":"1-2-3","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/出光":{"tags":{"name":"出光","name:en":"IDEMITSU","amenity":"fuel"},"name":"出光","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/НК Альянс":{"tags":{"name":"НК Альянс","amenity":"fuel"},"name":"НК Альянс","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Sinclair":{"tags":{"name":"Sinclair","amenity":"fuel"},"name":"Sinclair","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Conoco":{"tags":{"name":"Conoco","amenity":"fuel"},"name":"Conoco","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/SPBU":{"tags":{"name":"SPBU","amenity":"fuel"},"name":"SPBU","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Макпетрол":{"tags":{"name":"Макпетрол","amenity":"fuel"},"name":"Макпетрол","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Posto Ipiranga":{"tags":{"name":"Posto Ipiranga","amenity":"fuel"},"name":"Posto Ipiranga","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Posto Shell":{"tags":{"name":"Posto Shell","amenity":"fuel"},"name":"Posto Shell","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Phoenix":{"tags":{"name":"Phoenix","amenity":"fuel"},"name":"Phoenix","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Ipiranga":{"tags":{"name":"Ipiranga","amenity":"fuel"},"name":"Ipiranga","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/OKKO":{"tags":{"name":"OKKO","amenity":"fuel"},"name":"OKKO","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ОККО":{"tags":{"name":"ОККО","amenity":"fuel"},"name":"ОККО","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/บางจาก":{"tags":{"name":"บางจาก","amenity":"fuel"},"name":"บางจาก","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/QuikTrip":{"tags":{"name":"QuikTrip","amenity":"fuel"},"name":"QuikTrip","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Posto BR":{"tags":{"name":"Posto BR","amenity":"fuel"},"name":"Posto BR","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ป ต ท":{"tags":{"name":"ป ต ท","amenity":"fuel"},"name":"ป ต ท","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ปตท":{"tags":{"name":"ปตท","amenity":"fuel"},"name":"ปตท","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/ANP":{"tags":{"name":"ANP","amenity":"fuel"},"name":"ANP","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Kum & Go":{"tags":{"name":"Kum & Go","amenity":"fuel"},"name":"Kum & Go","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Petrolimex":{"tags":{"name":"Petrolimex","amenity":"fuel"},"name":"Petrolimex","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Sokimex":{"tags":{"name":"Sokimex","amenity":"fuel"},"name":"Sokimex","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Tela":{"tags":{"name":"Tela","amenity":"fuel"},"name":"Tela","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Posto":{"tags":{"name":"Posto","amenity":"fuel"},"name":"Posto","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Укрнафта":{"tags":{"name":"Укрнафта","amenity":"fuel"},"name":"Укрнафта","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Татнефтепродукт":{"tags":{"name":"Татнефтепродукт","amenity":"fuel"},"name":"Татнефтепродукт","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Afriquia":{"tags":{"name":"Afriquia","amenity":"fuel"},"name":"Afriquia","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/Murphy USA":{"tags":{"name":"Murphy USA","amenity":"fuel"},"name":"Murphy USA","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/昭和シェル (Showa-shell)":{"tags":{"name":"昭和シェル (Showa-shell)","amenity":"fuel"},"name":"昭和シェル (Showa-shell)","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/エネオス":{"tags":{"name":"エネオス","amenity":"fuel"},"name":"エネオス","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/fuel/CNG":{"tags":{"name":"CNG","amenity":"fuel"},"name":"CNG","icon":"fuel","geometry":["point","area"],"fields":["operator","address","opening_hours","fuel_multi"],"suggestion":true},"amenity/pub/Kings Arms":{"tags":{"name":"Kings Arms","amenity":"pub"},"name":"Kings Arms","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Ship":{"tags":{"name":"The Ship","amenity":"pub"},"name":"The Ship","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The White Horse":{"tags":{"name":"The White Horse","amenity":"pub"},"name":"The White Horse","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The White Hart":{"tags":{"name":"The White Hart","amenity":"pub"},"name":"The White Hart","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Royal Oak":{"tags":{"name":"Royal Oak","amenity":"pub"},"name":"Royal Oak","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Red Lion":{"tags":{"name":"The Red Lion","amenity":"pub"},"name":"The Red Lion","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Kings Arms":{"tags":{"name":"The Kings Arms","amenity":"pub"},"name":"The Kings Arms","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Star":{"tags":{"name":"The Star","amenity":"pub"},"name":"The Star","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Anchor":{"tags":{"name":"The Anchor","amenity":"pub"},"name":"The Anchor","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Cross Keys":{"tags":{"name":"The Cross Keys","amenity":"pub"},"name":"The Cross Keys","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Wheatsheaf":{"tags":{"name":"The Wheatsheaf","amenity":"pub"},"name":"The Wheatsheaf","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Crown Inn":{"tags":{"name":"The Crown Inn","amenity":"pub"},"name":"The Crown Inn","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Kings Head":{"tags":{"name":"The Kings Head","amenity":"pub"},"name":"The Kings Head","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Castle":{"tags":{"name":"The Castle","amenity":"pub"},"name":"The Castle","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Railway":{"tags":{"name":"The Railway","amenity":"pub"},"name":"The Railway","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The White Lion":{"tags":{"name":"The White Lion","amenity":"pub"},"name":"The White Lion","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Bell":{"tags":{"name":"The Bell","amenity":"pub"},"name":"The Bell","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Bull":{"tags":{"name":"The Bull","amenity":"pub"},"name":"The Bull","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Plough":{"tags":{"name":"The Plough","amenity":"pub"},"name":"The Plough","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The George":{"tags":{"name":"The George","amenity":"pub"},"name":"The George","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Royal Oak":{"tags":{"name":"The Royal Oak","amenity":"pub"},"name":"The Royal Oak","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Fox":{"tags":{"name":"The Fox","amenity":"pub"},"name":"The Fox","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Prince of Wales":{"tags":{"name":"Prince of Wales","amenity":"pub"},"name":"Prince of Wales","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Rising Sun":{"tags":{"name":"The Rising Sun","amenity":"pub"},"name":"The Rising Sun","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Prince of Wales":{"tags":{"name":"The Prince of Wales","amenity":"pub"},"name":"The Prince of Wales","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Crown":{"tags":{"name":"The Crown","amenity":"pub"},"name":"The Crown","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Chequers":{"tags":{"name":"The Chequers","amenity":"pub"},"name":"The Chequers","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Swan":{"tags":{"name":"The Swan","amenity":"pub"},"name":"The Swan","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Rose and Crown":{"tags":{"name":"Rose and Crown","amenity":"pub"},"name":"Rose and Crown","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Victoria":{"tags":{"name":"The Victoria","amenity":"pub"},"name":"The Victoria","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/New Inn":{"tags":{"name":"New Inn","amenity":"pub"},"name":"New Inn","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Royal Hotel":{"tags":{"name":"Royal Hotel","amenity":"pub"},"name":"Royal Hotel","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Red Lion":{"tags":{"name":"Red Lion","amenity":"pub"},"name":"Red Lion","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Cross Keys":{"tags":{"name":"Cross Keys","amenity":"pub"},"name":"Cross Keys","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Greyhound":{"tags":{"name":"The Greyhound","amenity":"pub"},"name":"The Greyhound","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Black Horse":{"tags":{"name":"The Black Horse","amenity":"pub"},"name":"The Black Horse","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The New Inn":{"tags":{"name":"The New Inn","amenity":"pub"},"name":"The New Inn","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Kings Head":{"tags":{"name":"Kings Head","amenity":"pub"},"name":"Kings Head","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Albion":{"tags":{"name":"The Albion","amenity":"pub"},"name":"The Albion","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Angel":{"tags":{"name":"The Angel","amenity":"pub"},"name":"The Angel","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Queens Head":{"tags":{"name":"The Queens Head","amenity":"pub"},"name":"The Queens Head","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/The Ship Inn":{"tags":{"name":"The Ship Inn","amenity":"pub"},"name":"The Ship Inn","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Rose & Crown":{"tags":{"name":"Rose & Crown","amenity":"pub"},"name":"Rose & Crown","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Queens Head":{"tags":{"name":"Queens Head","amenity":"pub"},"name":"Queens Head","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/pub/Irish Pub":{"tags":{"name":"Irish Pub","amenity":"pub"},"name":"Irish Pub","icon":"beer","geometry":["point","area"],"fields":["address","building_area","opening_hours","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Quick":{"tags":{"name":"Quick","amenity":"fast_food"},"name":"Quick","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/McDonald's":{"tags":{"name":"McDonald's","cuisine":"burger","amenity":"fast_food"},"name":"McDonald's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Subway":{"tags":{"name":"Subway","cuisine":"sandwich","amenity":"fast_food"},"name":"Subway","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Burger King":{"tags":{"name":"Burger King","cuisine":"burger","amenity":"fast_food"},"name":"Burger King","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Ali Baba":{"tags":{"name":"Ali Baba","amenity":"fast_food"},"name":"Ali Baba","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Hungry Jacks":{"tags":{"name":"Hungry Jacks","cuisine":"burger","amenity":"fast_food"},"name":"Hungry Jacks","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Red Rooster":{"tags":{"name":"Red Rooster","amenity":"fast_food"},"name":"Red Rooster","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/KFC":{"tags":{"name":"KFC","cuisine":"chicken","amenity":"fast_food"},"name":"KFC","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Domino's Pizza":{"tags":{"name":"Domino's Pizza","cuisine":"pizza","amenity":"fast_food"},"name":"Domino's Pizza","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Chowking":{"tags":{"name":"Chowking","amenity":"fast_food"},"name":"Chowking","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jollibee":{"tags":{"name":"Jollibee","amenity":"fast_food"},"name":"Jollibee","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Hesburger":{"tags":{"name":"Hesburger","amenity":"fast_food"},"name":"Hesburger","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/肯德基":{"tags":{"name":"肯德基","amenity":"fast_food"},"name":"肯德基","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Wendy's":{"tags":{"name":"Wendy's","cuisine":"burger","amenity":"fast_food"},"name":"Wendy's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Tim Hortons":{"tags":{"name":"Tim Hortons","amenity":"fast_food"},"name":"Tim Hortons","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Steers":{"tags":{"name":"Steers","amenity":"fast_food"},"name":"Steers","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Hardee's":{"tags":{"name":"Hardee's","cuisine":"burger","amenity":"fast_food"},"name":"Hardee's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Arby's":{"tags":{"name":"Arby's","amenity":"fast_food"},"name":"Arby's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/A&W":{"tags":{"name":"A&W","amenity":"fast_food"},"name":"A&W","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Dairy Queen":{"tags":{"name":"Dairy Queen","amenity":"fast_food"},"name":"Dairy Queen","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Hallo Pizza":{"tags":{"name":"Hallo Pizza","amenity":"fast_food"},"name":"Hallo Pizza","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Fish & Chips":{"tags":{"name":"Fish & Chips","amenity":"fast_food"},"name":"Fish & Chips","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Harvey's":{"tags":{"name":"Harvey's","amenity":"fast_food"},"name":"Harvey's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/麥當勞":{"tags":{"name":"麥當勞","amenity":"fast_food"},"name":"麥當勞","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pizza Pizza":{"tags":{"name":"Pizza Pizza","amenity":"fast_food"},"name":"Pizza Pizza","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Kotipizza":{"tags":{"name":"Kotipizza","amenity":"fast_food"},"name":"Kotipizza","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jack in the Box":{"tags":{"name":"Jack in the Box","cuisine":"burger","amenity":"fast_food"},"name":"Jack in the Box","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Istanbul":{"tags":{"name":"Istanbul","amenity":"fast_food"},"name":"Istanbul","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Kochlöffel":{"tags":{"name":"Kochlöffel","amenity":"fast_food"},"name":"Kochlöffel","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Döner":{"tags":{"name":"Döner","amenity":"fast_food"},"name":"Döner","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Telepizza":{"tags":{"name":"Telepizza","amenity":"fast_food"},"name":"Telepizza","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Sibylla":{"tags":{"name":"Sibylla","amenity":"fast_food"},"name":"Sibylla","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Carl's Jr.":{"tags":{"name":"Carl's Jr.","cuisine":"burger","amenity":"fast_food"},"name":"Carl's Jr.","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Quiznos":{"tags":{"name":"Quiznos","cuisine":"sandwich","amenity":"fast_food"},"name":"Quiznos","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Wimpy":{"tags":{"name":"Wimpy","amenity":"fast_food"},"name":"Wimpy","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Sonic":{"tags":{"name":"Sonic","cuisine":"burger","amenity":"fast_food"},"name":"Sonic","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco Bell":{"tags":{"name":"Taco Bell","cuisine":"mexican","amenity":"fast_food"},"name":"Taco Bell","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pizza Nova":{"tags":{"name":"Pizza Nova","amenity":"fast_food"},"name":"Pizza Nova","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Papa John's":{"tags":{"name":"Papa John's","cuisine":"pizza","amenity":"fast_food"},"name":"Papa John's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Nordsee":{"tags":{"name":"Nordsee","amenity":"fast_food"},"name":"Nordsee","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Mr. Sub":{"tags":{"name":"Mr. Sub","amenity":"fast_food"},"name":"Mr. Sub","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Макдоналдс":{"tags":{"name":"Макдоналдс","name:en":"McDonald's","amenity":"fast_food"},"name":"Макдоналдс","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Asia Imbiss":{"tags":{"name":"Asia Imbiss","amenity":"fast_food"},"name":"Asia Imbiss","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Chipotle":{"tags":{"name":"Chipotle","cuisine":"mexican","amenity":"fast_food"},"name":"Chipotle","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/マクドナルド":{"tags":{"name":"マクドナルド","name:en":"McDonald's","cuisine":"burger","amenity":"fast_food"},"name":"マクドナルド","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/In-N-Out Burger":{"tags":{"name":"In-N-Out Burger","amenity":"fast_food"},"name":"In-N-Out Burger","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jimmy John's":{"tags":{"name":"Jimmy John's","amenity":"fast_food"},"name":"Jimmy John's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Jamba Juice":{"tags":{"name":"Jamba Juice","amenity":"fast_food"},"name":"Jamba Juice","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Робин Сдобин":{"tags":{"name":"Робин Сдобин","amenity":"fast_food"},"name":"Робин Сдобин","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Baskin Robbins":{"tags":{"name":"Baskin Robbins","amenity":"fast_food"},"name":"Baskin Robbins","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/ケンタッキーフライドチキン":{"tags":{"name":"ケンタッキーフライドチキン","name:en":"KFC","cuisine":"chicken","amenity":"fast_food"},"name":"ケンタッキーフライドチキン","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/吉野家":{"tags":{"name":"吉野家","amenity":"fast_food"},"name":"吉野家","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco Time":{"tags":{"name":"Taco Time","amenity":"fast_food"},"name":"Taco Time","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/松屋":{"tags":{"name":"松屋","name:en":"Matsuya","amenity":"fast_food"},"name":"松屋","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Little Caesars":{"tags":{"name":"Little Caesars","amenity":"fast_food"},"name":"Little Caesars","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/El Pollo Loco":{"tags":{"name":"El Pollo Loco","amenity":"fast_food"},"name":"El Pollo Loco","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Del Taco":{"tags":{"name":"Del Taco","amenity":"fast_food"},"name":"Del Taco","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/White Castle":{"tags":{"name":"White Castle","amenity":"fast_food"},"name":"White Castle","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Boston Market":{"tags":{"name":"Boston Market","amenity":"fast_food"},"name":"Boston Market","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Chick-fil-A":{"tags":{"name":"Chick-fil-A","cuisine":"chicken","amenity":"fast_food"},"name":"Chick-fil-A","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Panda Express":{"tags":{"name":"Panda Express","cuisine":"chinese","amenity":"fast_food"},"name":"Panda Express","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Whataburger":{"tags":{"name":"Whataburger","amenity":"fast_food"},"name":"Whataburger","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Taco John's":{"tags":{"name":"Taco John's","amenity":"fast_food"},"name":"Taco John's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Теремок":{"tags":{"name":"Теремок","amenity":"fast_food"},"name":"Теремок","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Culver's":{"tags":{"name":"Culver's","amenity":"fast_food"},"name":"Culver's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Five Guys":{"tags":{"name":"Five Guys","amenity":"fast_food"},"name":"Five Guys","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Church's Chicken":{"tags":{"name":"Church's Chicken","amenity":"fast_food"},"name":"Church's Chicken","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Popeye's":{"tags":{"name":"Popeye's","cuisine":"chicken","amenity":"fast_food"},"name":"Popeye's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Long John Silver's":{"tags":{"name":"Long John Silver's","amenity":"fast_food"},"name":"Long John Silver's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Pollo Campero":{"tags":{"name":"Pollo Campero","amenity":"fast_food"},"name":"Pollo Campero","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Zaxby's":{"tags":{"name":"Zaxby's","amenity":"fast_food"},"name":"Zaxby's","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/すき家":{"tags":{"name":"すき家","name:en":"SUKIYA","amenity":"fast_food"},"name":"すき家","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/モスバーガー":{"tags":{"name":"モスバーガー","name:en":"MOS BURGER","amenity":"fast_food"},"name":"モスバーガー","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/Русский Аппетит":{"tags":{"name":"Русский Аппетит","amenity":"fast_food"},"name":"Русский Аппетит","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/fast_food/なか卯":{"tags":{"name":"なか卯","amenity":"fast_food"},"name":"なか卯","icon":"fast-food","geometry":["point","area"],"fields":["cuisine","operator","address","building_area","opening_hours","takeaway","delivery","drive_through","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizza Hut":{"tags":{"name":"Pizza Hut","cuisine":"pizza","amenity":"restaurant"},"name":"Pizza Hut","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Little Chef":{"tags":{"name":"Little Chef","amenity":"restaurant"},"name":"Little Chef","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Adler":{"tags":{"name":"Adler","amenity":"restaurant"},"name":"Adler","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zur Krone":{"tags":{"name":"Zur Krone","amenity":"restaurant"},"name":"Zur Krone","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Deutsches Haus":{"tags":{"name":"Deutsches Haus","amenity":"restaurant"},"name":"Deutsches Haus","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Krone":{"tags":{"name":"Krone","amenity":"restaurant"},"name":"Krone","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Akropolis":{"tags":{"name":"Akropolis","amenity":"restaurant"},"name":"Akropolis","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Schützenhaus":{"tags":{"name":"Schützenhaus","amenity":"restaurant"},"name":"Schützenhaus","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kreuz":{"tags":{"name":"Kreuz","amenity":"restaurant"},"name":"Kreuz","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Waldschänke":{"tags":{"name":"Waldschänke","amenity":"restaurant"},"name":"Waldschänke","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Piazza":{"tags":{"name":"La Piazza","amenity":"restaurant"},"name":"La Piazza","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Lamm":{"tags":{"name":"Lamm","amenity":"restaurant"},"name":"Lamm","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zur Sonne":{"tags":{"name":"Zur Sonne","amenity":"restaurant"},"name":"Zur Sonne","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zur Linde":{"tags":{"name":"Zur Linde","amenity":"restaurant"},"name":"Zur Linde","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Poseidon":{"tags":{"name":"Poseidon","amenity":"restaurant"},"name":"Poseidon","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Shanghai":{"tags":{"name":"Shanghai","amenity":"restaurant"},"name":"Shanghai","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Red Lobster":{"tags":{"name":"Red Lobster","amenity":"restaurant"},"name":"Red Lobster","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zum Löwen":{"tags":{"name":"Zum Löwen","amenity":"restaurant"},"name":"Zum Löwen","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Swiss Chalet":{"tags":{"name":"Swiss Chalet","amenity":"restaurant"},"name":"Swiss Chalet","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Olympia":{"tags":{"name":"Olympia","amenity":"restaurant"},"name":"Olympia","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Wagamama":{"tags":{"name":"Wagamama","amenity":"restaurant"},"name":"Wagamama","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Frankie & Benny's":{"tags":{"name":"Frankie & Benny's","amenity":"restaurant"},"name":"Frankie & Benny's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hooters":{"tags":{"name":"Hooters","amenity":"restaurant"},"name":"Hooters","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sternen":{"tags":{"name":"Sternen","amenity":"restaurant"},"name":"Sternen","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hirschen":{"tags":{"name":"Hirschen","amenity":"restaurant"},"name":"Hirschen","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Denny's":{"tags":{"name":"Denny's","amenity":"restaurant"},"name":"Denny's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Athen":{"tags":{"name":"Athen","amenity":"restaurant"},"name":"Athen","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sonne":{"tags":{"name":"Sonne","amenity":"restaurant"},"name":"Sonne","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hirsch":{"tags":{"name":"Hirsch","amenity":"restaurant"},"name":"Hirsch","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ratskeller":{"tags":{"name":"Ratskeller","amenity":"restaurant"},"name":"Ratskeller","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Cantina":{"tags":{"name":"La Cantina","amenity":"restaurant"},"name":"La Cantina","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Gasthaus Krone":{"tags":{"name":"Gasthaus Krone","amenity":"restaurant"},"name":"Gasthaus Krone","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/El Greco":{"tags":{"name":"El Greco","amenity":"restaurant"},"name":"El Greco","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Gasthof zur Post":{"tags":{"name":"Gasthof zur Post","amenity":"restaurant"},"name":"Gasthof zur Post","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Nando's":{"tags":{"name":"Nando's","amenity":"restaurant"},"name":"Nando's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Löwen":{"tags":{"name":"Löwen","amenity":"restaurant"},"name":"Löwen","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Pataterie":{"tags":{"name":"La Pataterie","amenity":"restaurant"},"name":"La Pataterie","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bella Napoli":{"tags":{"name":"Bella Napoli","amenity":"restaurant"},"name":"Bella Napoli","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizza Express":{"tags":{"name":"Pizza Express","amenity":"restaurant"},"name":"Pizza Express","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mandarin":{"tags":{"name":"Mandarin","amenity":"restaurant"},"name":"Mandarin","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hong Kong":{"tags":{"name":"Hong Kong","amenity":"restaurant"},"name":"Hong Kong","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zizzi":{"tags":{"name":"Zizzi","amenity":"restaurant"},"name":"Zizzi","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Cracker Barrel":{"tags":{"name":"Cracker Barrel","amenity":"restaurant"},"name":"Cracker Barrel","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Rhodos":{"tags":{"name":"Rhodos","amenity":"restaurant"},"name":"Rhodos","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Lindenhof":{"tags":{"name":"Lindenhof","amenity":"restaurant"},"name":"Lindenhof","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Milano":{"tags":{"name":"Milano","amenity":"restaurant"},"name":"Milano","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Dolce Vita":{"tags":{"name":"Dolce Vita","amenity":"restaurant"},"name":"Dolce Vita","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kirchenwirt":{"tags":{"name":"Kirchenwirt","amenity":"restaurant"},"name":"Kirchenwirt","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kantine":{"tags":{"name":"Kantine","amenity":"restaurant"},"name":"Kantine","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ochsen":{"tags":{"name":"Ochsen","amenity":"restaurant"},"name":"Ochsen","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Spur":{"tags":{"name":"Spur","amenity":"restaurant"},"name":"Spur","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mykonos":{"tags":{"name":"Mykonos","amenity":"restaurant"},"name":"Mykonos","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Lotus":{"tags":{"name":"Lotus","amenity":"restaurant"},"name":"Lotus","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Applebee's":{"tags":{"name":"Applebee's","amenity":"restaurant"},"name":"Applebee's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Flunch":{"tags":{"name":"Flunch","amenity":"restaurant"},"name":"Flunch","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Zur Post":{"tags":{"name":"Zur Post","amenity":"restaurant"},"name":"Zur Post","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/China Town":{"tags":{"name":"China Town","amenity":"restaurant"},"name":"China Town","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Dolce Vita":{"tags":{"name":"La Dolce Vita","amenity":"restaurant"},"name":"La Dolce Vita","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Waffle House":{"tags":{"name":"Waffle House","amenity":"restaurant"},"name":"Waffle House","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Delphi":{"tags":{"name":"Delphi","amenity":"restaurant"},"name":"Delphi","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Linde":{"tags":{"name":"Linde","amenity":"restaurant"},"name":"Linde","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Outback Steakhouse":{"tags":{"name":"Outback Steakhouse","amenity":"restaurant"},"name":"Outback Steakhouse","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Dionysos":{"tags":{"name":"Dionysos","amenity":"restaurant"},"name":"Dionysos","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Kelsey's":{"tags":{"name":"Kelsey's","amenity":"restaurant"},"name":"Kelsey's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Boston Pizza":{"tags":{"name":"Boston Pizza","amenity":"restaurant"},"name":"Boston Pizza","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bella Italia":{"tags":{"name":"Bella Italia","amenity":"restaurant"},"name":"Bella Italia","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sizzler":{"tags":{"name":"Sizzler","amenity":"restaurant"},"name":"Sizzler","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Grüner Baum":{"tags":{"name":"Grüner Baum","amenity":"restaurant"},"name":"Grüner Baum","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Taj Mahal":{"tags":{"name":"Taj Mahal","amenity":"restaurant"},"name":"Taj Mahal","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Rössli":{"tags":{"name":"Rössli","amenity":"restaurant"},"name":"Rössli","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Traube":{"tags":{"name":"Traube","amenity":"restaurant"},"name":"Traube","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Adria":{"tags":{"name":"Adria","amenity":"restaurant"},"name":"Adria","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Red Robin":{"tags":{"name":"Red Robin","amenity":"restaurant"},"name":"Red Robin","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Roma":{"tags":{"name":"Roma","amenity":"restaurant"},"name":"Roma","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/San Marco":{"tags":{"name":"San Marco","amenity":"restaurant"},"name":"San Marco","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hellas":{"tags":{"name":"Hellas","amenity":"restaurant"},"name":"Hellas","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Perla":{"tags":{"name":"La Perla","amenity":"restaurant"},"name":"La Perla","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Vips":{"tags":{"name":"Vips","amenity":"restaurant"},"name":"Vips","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Panera Bread":{"tags":{"name":"Panera Bread","amenity":"restaurant"},"name":"Panera Bread","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Da Vinci":{"tags":{"name":"Da Vinci","amenity":"restaurant"},"name":"Da Vinci","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hippopotamus":{"tags":{"name":"Hippopotamus","amenity":"restaurant"},"name":"Hippopotamus","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Prezzo":{"tags":{"name":"Prezzo","amenity":"restaurant"},"name":"Prezzo","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Courtepaille":{"tags":{"name":"Courtepaille","amenity":"restaurant"},"name":"Courtepaille","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Hard Rock Cafe":{"tags":{"name":"Hard Rock Cafe","amenity":"restaurant"},"name":"Hard Rock Cafe","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Panorama":{"tags":{"name":"Panorama","amenity":"restaurant"},"name":"Panorama","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/デニーズ":{"tags":{"name":"デニーズ","amenity":"restaurant"},"name":"デニーズ","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sportheim":{"tags":{"name":"Sportheim","amenity":"restaurant"},"name":"Sportheim","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/餃子の王将":{"tags":{"name":"餃子の王将","amenity":"restaurant"},"name":"餃子の王将","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bären":{"tags":{"name":"Bären","amenity":"restaurant"},"name":"Bären","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Alte Post":{"tags":{"name":"Alte Post","amenity":"restaurant"},"name":"Alte Post","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Pizzeria Roma":{"tags":{"name":"Pizzeria Roma","amenity":"restaurant"},"name":"Pizzeria Roma","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/China Garden":{"tags":{"name":"China Garden","amenity":"restaurant"},"name":"China Garden","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Vapiano":{"tags":{"name":"Vapiano","amenity":"restaurant"},"name":"Vapiano","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mamma Mia":{"tags":{"name":"Mamma Mia","amenity":"restaurant"},"name":"Mamma Mia","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Schwarzer Adler":{"tags":{"name":"Schwarzer Adler","amenity":"restaurant"},"name":"Schwarzer Adler","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/IHOP":{"tags":{"name":"IHOP","amenity":"restaurant"},"name":"IHOP","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Chili's":{"tags":{"name":"Chili's","amenity":"restaurant"},"name":"Chili's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Asia":{"tags":{"name":"Asia","amenity":"restaurant"},"name":"Asia","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Olive Garden":{"tags":{"name":"Olive Garden","amenity":"restaurant"},"name":"Olive Garden","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/TGI Friday's":{"tags":{"name":"TGI Friday's","amenity":"restaurant"},"name":"TGI Friday's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Friendly's":{"tags":{"name":"Friendly's","amenity":"restaurant"},"name":"Friendly's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Buffalo Grill":{"tags":{"name":"Buffalo Grill","amenity":"restaurant"},"name":"Buffalo Grill","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Texas Roadhouse":{"tags":{"name":"Texas Roadhouse","amenity":"restaurant"},"name":"Texas Roadhouse","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/ガスト":{"tags":{"name":"ガスト","name:en":"Gusto","amenity":"restaurant"},"name":"ガスト","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Sakura":{"tags":{"name":"Sakura","amenity":"restaurant"},"name":"Sakura","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mensa":{"tags":{"name":"Mensa","amenity":"restaurant"},"name":"Mensa","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/The Keg":{"tags":{"name":"The Keg","amenity":"restaurant"},"name":"The Keg","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/サイゼリヤ":{"tags":{"name":"サイゼリヤ","amenity":"restaurant"},"name":"サイゼリヤ","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/La Strada":{"tags":{"name":"La Strada","amenity":"restaurant"},"name":"La Strada","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Village Inn":{"tags":{"name":"Village Inn","amenity":"restaurant"},"name":"Village Inn","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Buffalo Wild Wings":{"tags":{"name":"Buffalo Wild Wings","amenity":"restaurant"},"name":"Buffalo Wild Wings","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Peking":{"tags":{"name":"Peking","amenity":"restaurant"},"name":"Peking","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Round Table Pizza":{"tags":{"name":"Round Table Pizza","amenity":"restaurant"},"name":"Round Table Pizza","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/California Pizza Kitchen":{"tags":{"name":"California Pizza Kitchen","amenity":"restaurant"},"name":"California Pizza Kitchen","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Якитория":{"tags":{"name":"Якитория","amenity":"restaurant"},"name":"Якитория","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Golden Corral":{"tags":{"name":"Golden Corral","amenity":"restaurant"},"name":"Golden Corral","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Perkins":{"tags":{"name":"Perkins","amenity":"restaurant"},"name":"Perkins","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Ruby Tuesday":{"tags":{"name":"Ruby Tuesday","amenity":"restaurant"},"name":"Ruby Tuesday","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Shari's":{"tags":{"name":"Shari's","amenity":"restaurant"},"name":"Shari's","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Bob Evans":{"tags":{"name":"Bob Evans","amenity":"restaurant"},"name":"Bob Evans","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/바다횟집 (Bada Fish Restaurant)":{"tags":{"name":"바다횟집 (Bada Fish Restaurant)","amenity":"restaurant"},"name":"바다횟집 (Bada Fish Restaurant)","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Mang Inasal":{"tags":{"name":"Mang Inasal","amenity":"restaurant"},"name":"Mang Inasal","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Евразия":{"tags":{"name":"Евразия","amenity":"restaurant"},"name":"Евразия","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/ジョナサン":{"tags":{"name":"ジョナサン","amenity":"restaurant"},"name":"ジョナサン","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/restaurant/Longhorn Steakhouse":{"tags":{"name":"Longhorn Steakhouse","amenity":"restaurant"},"name":"Longhorn Steakhouse","icon":"restaurant","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","capacity","takeaway","delivery","smoking","outdoor_seating"],"suggestion":true},"amenity/bank/Chase":{"tags":{"name":"Chase","amenity":"bank"},"name":"Chase","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Commonwealth Bank":{"tags":{"name":"Commonwealth Bank","amenity":"bank"},"name":"Commonwealth Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Citibank":{"tags":{"name":"Citibank","amenity":"bank"},"name":"Citibank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/HSBC":{"tags":{"name":"HSBC","amenity":"bank"},"name":"HSBC","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Barclays":{"tags":{"name":"Barclays","amenity":"bank"},"name":"Barclays","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Westpac":{"tags":{"name":"Westpac","amenity":"bank"},"name":"Westpac","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/NAB":{"tags":{"name":"NAB","amenity":"bank"},"name":"NAB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ANZ":{"tags":{"name":"ANZ","amenity":"bank"},"name":"ANZ","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Lloyds Bank":{"tags":{"name":"Lloyds Bank","amenity":"bank"},"name":"Lloyds Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Landbank":{"tags":{"name":"Landbank","amenity":"bank"},"name":"Landbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sparkasse":{"tags":{"name":"Sparkasse","amenity":"bank"},"name":"Sparkasse","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/UCPB":{"tags":{"name":"UCPB","amenity":"bank"},"name":"UCPB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PNB":{"tags":{"name":"PNB","amenity":"bank"},"name":"PNB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Metrobank":{"tags":{"name":"Metrobank","amenity":"bank"},"name":"Metrobank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BDO":{"tags":{"name":"BDO","amenity":"bank"},"name":"BDO","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Volksbank":{"tags":{"name":"Volksbank","amenity":"bank"},"name":"Volksbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BPI":{"tags":{"name":"BPI","amenity":"bank"},"name":"BPI","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Postbank":{"tags":{"name":"Postbank","amenity":"bank"},"name":"Postbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/NatWest":{"tags":{"name":"NatWest","amenity":"bank"},"name":"NatWest","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Raiffeisenbank":{"tags":{"name":"Raiffeisenbank","amenity":"bank"},"name":"Raiffeisenbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Yorkshire Bank":{"tags":{"name":"Yorkshire Bank","amenity":"bank"},"name":"Yorkshire Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ABSA":{"tags":{"name":"ABSA","amenity":"bank"},"name":"ABSA","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Standard Bank":{"tags":{"name":"Standard Bank","amenity":"bank"},"name":"Standard Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/FNB":{"tags":{"name":"FNB","amenity":"bank"},"name":"FNB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Deutsche Bank":{"tags":{"name":"Deutsche Bank","amenity":"bank"},"name":"Deutsche Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/SEB":{"tags":{"name":"SEB","amenity":"bank"},"name":"SEB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Commerzbank":{"tags":{"name":"Commerzbank","amenity":"bank"},"name":"Commerzbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Targobank":{"tags":{"name":"Targobank","amenity":"bank"},"name":"Targobank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ABN AMRO":{"tags":{"name":"ABN AMRO","amenity":"bank"},"name":"ABN AMRO","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Handelsbanken":{"tags":{"name":"Handelsbanken","amenity":"bank"},"name":"Handelsbanken","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Swedbank":{"tags":{"name":"Swedbank","amenity":"bank"},"name":"Swedbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Kreissparkasse":{"tags":{"name":"Kreissparkasse","amenity":"bank"},"name":"Kreissparkasse","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/UniCredit Bank":{"tags":{"name":"UniCredit Bank","amenity":"bank"},"name":"UniCredit Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Monte dei Paschi di Siena":{"tags":{"name":"Monte dei Paschi di Siena","amenity":"bank"},"name":"Monte dei Paschi di Siena","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja Rural":{"tags":{"name":"Caja Rural","amenity":"bank"},"name":"Caja Rural","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Dresdner Bank":{"tags":{"name":"Dresdner Bank","amenity":"bank"},"name":"Dresdner Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sparda-Bank":{"tags":{"name":"Sparda-Bank","amenity":"bank"},"name":"Sparda-Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/VÚB":{"tags":{"name":"VÚB","amenity":"bank"},"name":"VÚB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Slovenská sporiteľňa":{"tags":{"name":"Slovenská sporiteľňa","amenity":"bank"},"name":"Slovenská sporiteľňa","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Montreal":{"tags":{"name":"Bank of Montreal","amenity":"bank"},"name":"Bank of Montreal","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/KBC":{"tags":{"name":"KBC","amenity":"bank"},"name":"KBC","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Royal Bank of Scotland":{"tags":{"name":"Royal Bank of Scotland","amenity":"bank"},"name":"Royal Bank of Scotland","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/TSB":{"tags":{"name":"TSB","amenity":"bank"},"name":"TSB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/US Bank":{"tags":{"name":"US Bank","amenity":"bank"},"name":"US Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/HypoVereinsbank":{"tags":{"name":"HypoVereinsbank","amenity":"bank"},"name":"HypoVereinsbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Austria":{"tags":{"name":"Bank Austria","amenity":"bank"},"name":"Bank Austria","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ING":{"tags":{"name":"ING","amenity":"bank"},"name":"ING","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Erste Bank":{"tags":{"name":"Erste Bank","amenity":"bank"},"name":"Erste Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CIBC":{"tags":{"name":"CIBC","amenity":"bank"},"name":"CIBC","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Scotiabank":{"tags":{"name":"Scotiabank","amenity":"bank"},"name":"Scotiabank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caisse d'Épargne":{"tags":{"name":"Caisse d'Épargne","amenity":"bank"},"name":"Caisse d'Épargne","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Santander":{"tags":{"name":"Santander","amenity":"bank"},"name":"Santander","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Scotland":{"tags":{"name":"Bank of Scotland","amenity":"bank"},"name":"Bank of Scotland","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/TD Canada Trust":{"tags":{"name":"TD Canada Trust","amenity":"bank"},"name":"TD Canada Trust","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BMO":{"tags":{"name":"BMO","amenity":"bank"},"name":"BMO","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Danske Bank":{"tags":{"name":"Danske Bank","amenity":"bank"},"name":"Danske Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/OTP":{"tags":{"name":"OTP","amenity":"bank"},"name":"OTP","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédit Agricole":{"tags":{"name":"Crédit Agricole","amenity":"bank"},"name":"Crédit Agricole","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/LCL":{"tags":{"name":"LCL","amenity":"bank"},"name":"LCL","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/VR-Bank":{"tags":{"name":"VR-Bank","amenity":"bank"},"name":"VR-Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ČSOB":{"tags":{"name":"ČSOB","amenity":"bank"},"name":"ČSOB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Česká spořitelna":{"tags":{"name":"Česká spořitelna","amenity":"bank"},"name":"Česká spořitelna","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNP":{"tags":{"name":"BNP","amenity":"bank"},"name":"BNP","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Royal Bank":{"tags":{"name":"Royal Bank","amenity":"bank"},"name":"Royal Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Nationwide":{"tags":{"name":"Nationwide","amenity":"bank"},"name":"Nationwide","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Halifax":{"tags":{"name":"Halifax","amenity":"bank"},"name":"Halifax","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BAWAG PSK":{"tags":{"name":"BAWAG PSK","amenity":"bank"},"name":"BAWAG PSK","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/National Bank":{"tags":{"name":"National Bank","amenity":"bank"},"name":"National Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Nedbank":{"tags":{"name":"Nedbank","amenity":"bank"},"name":"Nedbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/First National Bank":{"tags":{"name":"First National Bank","amenity":"bank"},"name":"First National Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Nordea":{"tags":{"name":"Nordea","amenity":"bank"},"name":"Nordea","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Rabobank":{"tags":{"name":"Rabobank","amenity":"bank"},"name":"Rabobank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sparkasse KölnBonn":{"tags":{"name":"Sparkasse KölnBonn","amenity":"bank"},"name":"Sparkasse KölnBonn","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Tatra banka":{"tags":{"name":"Tatra banka","amenity":"bank"},"name":"Tatra banka","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Berliner Sparkasse":{"tags":{"name":"Berliner Sparkasse","amenity":"bank"},"name":"Berliner Sparkasse","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Berliner Volksbank":{"tags":{"name":"Berliner Volksbank","amenity":"bank"},"name":"Berliner Volksbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Wells Fargo":{"tags":{"name":"Wells Fargo","amenity":"bank"},"name":"Wells Fargo","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Credit Suisse":{"tags":{"name":"Credit Suisse","amenity":"bank"},"name":"Credit Suisse","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Société Générale":{"tags":{"name":"Société Générale","amenity":"bank"},"name":"Société Générale","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Osuuspankki":{"tags":{"name":"Osuuspankki","amenity":"bank"},"name":"Osuuspankki","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sparkasse Aachen":{"tags":{"name":"Sparkasse Aachen","amenity":"bank"},"name":"Sparkasse Aachen","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Hamburger Sparkasse":{"tags":{"name":"Hamburger Sparkasse","amenity":"bank"},"name":"Hamburger Sparkasse","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Cassa di Risparmio del Veneto":{"tags":{"name":"Cassa di Risparmio del Veneto","amenity":"bank"},"name":"Cassa di Risparmio del Veneto","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNP Paribas":{"tags":{"name":"BNP Paribas","amenity":"bank"},"name":"BNP Paribas","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banque Populaire":{"tags":{"name":"Banque Populaire","amenity":"bank"},"name":"Banque Populaire","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNP Paribas Fortis":{"tags":{"name":"BNP Paribas Fortis","amenity":"bank"},"name":"BNP Paribas Fortis","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Popular":{"tags":{"name":"Banco Popular","amenity":"bank"},"name":"Banco Popular","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bancaja":{"tags":{"name":"Bancaja","amenity":"bank"},"name":"Bancaja","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banesto":{"tags":{"name":"Banesto","amenity":"bank"},"name":"Banesto","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/La Caixa":{"tags":{"name":"La Caixa","amenity":"bank"},"name":"La Caixa","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Santander Consumer Bank":{"tags":{"name":"Santander Consumer Bank","amenity":"bank"},"name":"Santander Consumer Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BRD":{"tags":{"name":"BRD","amenity":"bank"},"name":"BRD","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BCR":{"tags":{"name":"BCR","amenity":"bank"},"name":"BCR","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Transilvania":{"tags":{"name":"Banca Transilvania","amenity":"bank"},"name":"Banca Transilvania","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BW-Bank":{"tags":{"name":"BW-Bank","amenity":"bank"},"name":"BW-Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Komerční banka":{"tags":{"name":"Komerční banka","amenity":"bank"},"name":"Komerční banka","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Pastor":{"tags":{"name":"Banco Pastor","amenity":"bank"},"name":"Banco Pastor","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Stadtsparkasse":{"tags":{"name":"Stadtsparkasse","amenity":"bank"},"name":"Stadtsparkasse","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Ulster Bank":{"tags":{"name":"Ulster Bank","amenity":"bank"},"name":"Ulster Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Sberbank":{"tags":{"name":"Sberbank","amenity":"bank"},"name":"Sberbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CIC":{"tags":{"name":"CIC","amenity":"bank"},"name":"CIC","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bancpost":{"tags":{"name":"Bancpost","amenity":"bank"},"name":"Bancpost","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja Madrid":{"tags":{"name":"Caja Madrid","amenity":"bank"},"name":"Caja Madrid","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Maybank":{"tags":{"name":"Maybank","amenity":"bank"},"name":"Maybank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/中国银行":{"tags":{"name":"中国银行","amenity":"bank"},"name":"中国银行","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Unicredit Banca":{"tags":{"name":"Unicredit Banca","amenity":"bank"},"name":"Unicredit Banca","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédit Mutuel":{"tags":{"name":"Crédit Mutuel","amenity":"bank"},"name":"Crédit Mutuel","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBVA":{"tags":{"name":"BBVA","amenity":"bank"},"name":"BBVA","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Intesa San Paolo":{"tags":{"name":"Intesa San Paolo","amenity":"bank"},"name":"Intesa San Paolo","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/TD Bank":{"tags":{"name":"TD Bank","amenity":"bank"},"name":"TD Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Belfius":{"tags":{"name":"Belfius","amenity":"bank"},"name":"Belfius","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of America":{"tags":{"name":"Bank of America","amenity":"bank"},"name":"Bank of America","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/RBC":{"tags":{"name":"RBC","amenity":"bank"},"name":"RBC","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Alpha Bank":{"tags":{"name":"Alpha Bank","amenity":"bank"},"name":"Alpha Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Сбербанк":{"tags":{"name":"Сбербанк","amenity":"bank"},"name":"Сбербанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Россельхозбанк":{"tags":{"name":"Россельхозбанк","amenity":"bank"},"name":"Россельхозбанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédit du Nord":{"tags":{"name":"Crédit du Nord","amenity":"bank"},"name":"Crédit du Nord","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BancoEstado":{"tags":{"name":"BancoEstado","amenity":"bank"},"name":"BancoEstado","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Millennium Bank":{"tags":{"name":"Millennium Bank","amenity":"bank"},"name":"Millennium Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/State Bank of India":{"tags":{"name":"State Bank of India","amenity":"bank"},"name":"State Bank of India","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Беларусбанк":{"tags":{"name":"Беларусбанк","amenity":"bank"},"name":"Беларусбанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ING Bank Śląski":{"tags":{"name":"ING Bank Śląski","amenity":"bank"},"name":"ING Bank Śląski","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caixa Geral de Depósitos":{"tags":{"name":"Caixa Geral de Depósitos","amenity":"bank"},"name":"Caixa Geral de Depósitos","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Kreissparkasse Köln":{"tags":{"name":"Kreissparkasse Köln","amenity":"bank"},"name":"Kreissparkasse Köln","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco BCI":{"tags":{"name":"Banco BCI","amenity":"bank"},"name":"Banco BCI","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Chile":{"tags":{"name":"Banco de Chile","amenity":"bank"},"name":"Banco de Chile","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ВТБ24":{"tags":{"name":"ВТБ24","amenity":"bank"},"name":"ВТБ24","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/UBS":{"tags":{"name":"UBS","amenity":"bank"},"name":"UBS","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PKO BP":{"tags":{"name":"PKO BP","amenity":"bank"},"name":"PKO BP","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Chinabank":{"tags":{"name":"Chinabank","amenity":"bank"},"name":"Chinabank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PSBank":{"tags":{"name":"PSBank","amenity":"bank"},"name":"PSBank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Union Bank":{"tags":{"name":"Union Bank","amenity":"bank"},"name":"Union Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/China Bank":{"tags":{"name":"China Bank","amenity":"bank"},"name":"China Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/RCBC":{"tags":{"name":"RCBC","amenity":"bank"},"name":"RCBC","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Unicaja":{"tags":{"name":"Unicaja","amenity":"bank"},"name":"Unicaja","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BBK":{"tags":{"name":"BBK","amenity":"bank"},"name":"BBK","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Ibercaja":{"tags":{"name":"Ibercaja","amenity":"bank"},"name":"Ibercaja","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/RBS":{"tags":{"name":"RBS","amenity":"bank"},"name":"RBS","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Commercial Bank of Ceylon PLC":{"tags":{"name":"Commercial Bank of Ceylon PLC","amenity":"bank"},"name":"Commercial Bank of Ceylon PLC","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of Ireland":{"tags":{"name":"Bank of Ireland","amenity":"bank"},"name":"Bank of Ireland","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BNL":{"tags":{"name":"BNL","amenity":"bank"},"name":"BNL","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Santander":{"tags":{"name":"Banco Santander","amenity":"bank"},"name":"Banco Santander","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Itaú":{"tags":{"name":"Banco Itaú","amenity":"bank"},"name":"Banco Itaú","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/AIB":{"tags":{"name":"AIB","amenity":"bank"},"name":"AIB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BZ WBK":{"tags":{"name":"BZ WBK","amenity":"bank"},"name":"BZ WBK","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco do Brasil":{"tags":{"name":"Banco do Brasil","amenity":"bank"},"name":"Banco do Brasil","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caixa Econômica Federal":{"tags":{"name":"Caixa Econômica Federal","amenity":"bank"},"name":"Caixa Econômica Federal","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Fifth Third Bank":{"tags":{"name":"Fifth Third Bank","amenity":"bank"},"name":"Fifth Third Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Popolare di Vicenza":{"tags":{"name":"Banca Popolare di Vicenza","amenity":"bank"},"name":"Banca Popolare di Vicenza","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Wachovia":{"tags":{"name":"Wachovia","amenity":"bank"},"name":"Wachovia","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/OLB":{"tags":{"name":"OLB","amenity":"bank"},"name":"OLB","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/みずほ銀行":{"tags":{"name":"みずほ銀行","amenity":"bank"},"name":"みずほ銀行","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BES":{"tags":{"name":"BES","amenity":"bank"},"name":"BES","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ICICI Bank":{"tags":{"name":"ICICI Bank","amenity":"bank"},"name":"ICICI Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/HDFC Bank":{"tags":{"name":"HDFC Bank","amenity":"bank"},"name":"HDFC Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/La Banque Postale":{"tags":{"name":"La Banque Postale","amenity":"bank"},"name":"La Banque Postale","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Pekao SA":{"tags":{"name":"Pekao SA","amenity":"bank"},"name":"Pekao SA","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Oberbank":{"tags":{"name":"Oberbank","amenity":"bank"},"name":"Oberbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bradesco":{"tags":{"name":"Bradesco","amenity":"bank"},"name":"Bradesco","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Oldenburgische Landesbank":{"tags":{"name":"Oldenburgische Landesbank","amenity":"bank"},"name":"Oldenburgische Landesbank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bendigo Bank":{"tags":{"name":"Bendigo Bank","amenity":"bank"},"name":"Bendigo Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Argenta":{"tags":{"name":"Argenta","amenity":"bank"},"name":"Argenta","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/AXA":{"tags":{"name":"AXA","amenity":"bank"},"name":"AXA","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Axis Bank":{"tags":{"name":"Axis Bank","amenity":"bank"},"name":"Axis Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Nación":{"tags":{"name":"Banco Nación","amenity":"bank"},"name":"Banco Nación","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/GE Money Bank":{"tags":{"name":"GE Money Bank","amenity":"bank"},"name":"GE Money Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Альфа-Банк":{"tags":{"name":"Альфа-Банк","amenity":"bank"},"name":"Альфа-Банк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Белагропромбанк":{"tags":{"name":"Белагропромбанк","amenity":"bank"},"name":"Белагропромбанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja Círculo":{"tags":{"name":"Caja Círculo","amenity":"bank"},"name":"Caja Círculo","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Galicia":{"tags":{"name":"Banco Galicia","amenity":"bank"},"name":"Banco Galicia","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Eurobank":{"tags":{"name":"Eurobank","amenity":"bank"},"name":"Eurobank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banca Intesa":{"tags":{"name":"Banca Intesa","amenity":"bank"},"name":"Banca Intesa","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Canara Bank":{"tags":{"name":"Canara Bank","amenity":"bank"},"name":"Canara Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Cajamar":{"tags":{"name":"Cajamar","amenity":"bank"},"name":"Cajamar","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banamex":{"tags":{"name":"Banamex","amenity":"bank"},"name":"Banamex","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Crédit Mutuel de Bretagne":{"tags":{"name":"Crédit Mutuel de Bretagne","amenity":"bank"},"name":"Crédit Mutuel de Bretagne","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Davivienda":{"tags":{"name":"Davivienda","amenity":"bank"},"name":"Davivienda","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Spółdzielczy":{"tags":{"name":"Bank Spółdzielczy","amenity":"bank"},"name":"Bank Spółdzielczy","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Credit Agricole":{"tags":{"name":"Credit Agricole","amenity":"bank"},"name":"Credit Agricole","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bankinter":{"tags":{"name":"Bankinter","amenity":"bank"},"name":"Bankinter","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banque Nationale":{"tags":{"name":"Banque Nationale","amenity":"bank"},"name":"Banque Nationale","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank of the West":{"tags":{"name":"Bank of the West","amenity":"bank"},"name":"Bank of the West","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Key Bank":{"tags":{"name":"Key Bank","amenity":"bank"},"name":"Key Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Western Union":{"tags":{"name":"Western Union","amenity":"bank"},"name":"Western Union","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Citizens Bank":{"tags":{"name":"Citizens Bank","amenity":"bank"},"name":"Citizens Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ПриватБанк":{"tags":{"name":"ПриватБанк","amenity":"bank"},"name":"ПриватБанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Security Bank":{"tags":{"name":"Security Bank","amenity":"bank"},"name":"Security Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Millenium":{"tags":{"name":"Millenium","amenity":"bank"},"name":"Millenium","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bankia":{"tags":{"name":"Bankia","amenity":"bank"},"name":"Bankia","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/三菱東京UFJ銀行":{"tags":{"name":"三菱東京UFJ銀行","amenity":"bank"},"name":"三菱東京UFJ銀行","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caixa":{"tags":{"name":"Caixa","amenity":"bank"},"name":"Caixa","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Costa Rica":{"tags":{"name":"Banco de Costa Rica","amenity":"bank"},"name":"Banco de Costa Rica","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/SunTrust Bank":{"tags":{"name":"SunTrust Bank","amenity":"bank"},"name":"SunTrust Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Itaú":{"tags":{"name":"Itaú","amenity":"bank"},"name":"Itaú","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PBZ":{"tags":{"name":"PBZ","amenity":"bank"},"name":"PBZ","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/中国工商银行":{"tags":{"name":"中国工商银行","amenity":"bank"},"name":"中国工商银行","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bancolombia":{"tags":{"name":"Bancolombia","amenity":"bank"},"name":"Bancolombia","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Райффайзен Банк Аваль":{"tags":{"name":"Райффайзен Банк Аваль","amenity":"bank"},"name":"Райффайзен Банк Аваль","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bancomer":{"tags":{"name":"Bancomer","amenity":"bank"},"name":"Bancomer","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banorte":{"tags":{"name":"Banorte","amenity":"bank"},"name":"Banorte","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Alior Bank":{"tags":{"name":"Alior Bank","amenity":"bank"},"name":"Alior Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BOC":{"tags":{"name":"BOC","amenity":"bank"},"name":"BOC","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Банк Москвы":{"tags":{"name":"Банк Москвы","amenity":"bank"},"name":"Банк Москвы","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ВТБ":{"tags":{"name":"ВТБ","amenity":"bank"},"name":"ВТБ","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Getin Bank":{"tags":{"name":"Getin Bank","amenity":"bank"},"name":"Getin Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja Duero":{"tags":{"name":"Caja Duero","amenity":"bank"},"name":"Caja Duero","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Regions Bank":{"tags":{"name":"Regions Bank","amenity":"bank"},"name":"Regions Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Росбанк":{"tags":{"name":"Росбанк","amenity":"bank"},"name":"Росбанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Estado":{"tags":{"name":"Banco Estado","amenity":"bank"},"name":"Banco Estado","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BCI":{"tags":{"name":"BCI","amenity":"bank"},"name":"BCI","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/SunTrust":{"tags":{"name":"SunTrust","amenity":"bank"},"name":"SunTrust","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/PNC Bank":{"tags":{"name":"PNC Bank","amenity":"bank"},"name":"PNC Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/신한은행":{"tags":{"name":"신한은행","name:en":"Sinhan Bank","amenity":"bank"},"name":"신한은행","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/우리은행":{"tags":{"name":"우리은행","name:en":"Uri Bank","amenity":"bank"},"name":"우리은행","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/국민은행":{"tags":{"name":"국민은행","name:en":"Gungmin Bank","amenity":"bank"},"name":"국민은행","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/중소기업은행":{"tags":{"name":"중소기업은행","name:en":"Industrial Bank of Korea","amenity":"bank"},"name":"중소기업은행","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/광주은행":{"tags":{"name":"광주은행","name:en":"Gwangju Bank","amenity":"bank"},"name":"광주은행","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Газпромбанк":{"tags":{"name":"Газпромбанк","amenity":"bank"},"name":"Газпромбанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/M&T Bank":{"tags":{"name":"M&T Bank","amenity":"bank"},"name":"M&T Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Caja de Burgos":{"tags":{"name":"Caja de Burgos","amenity":"bank"},"name":"Caja de Burgos","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Santander Totta":{"tags":{"name":"Santander Totta","amenity":"bank"},"name":"Santander Totta","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/УкрСиббанк":{"tags":{"name":"УкрСиббанк","amenity":"bank"},"name":"УкрСиббанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Ощадбанк":{"tags":{"name":"Ощадбанк","amenity":"bank"},"name":"Ощадбанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Уралсиб":{"tags":{"name":"Уралсиб","amenity":"bank"},"name":"Уралсиб","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/りそな銀行":{"tags":{"name":"りそな銀行","name:en":"Mizuho Bank","amenity":"bank"},"name":"りそな銀行","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Ecobank":{"tags":{"name":"Ecobank","amenity":"bank"},"name":"Ecobank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Cajero Automatico Bancared":{"tags":{"name":"Cajero Automatico Bancared","amenity":"bank"},"name":"Cajero Automatico Bancared","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Промсвязьбанк":{"tags":{"name":"Промсвязьбанк","amenity":"bank"},"name":"Промсвязьбанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/三井住友銀行":{"tags":{"name":"三井住友銀行","amenity":"bank"},"name":"三井住友銀行","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Provincia":{"tags":{"name":"Banco Provincia","amenity":"bank"},"name":"Banco Provincia","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/BB&T":{"tags":{"name":"BB&T","amenity":"bank"},"name":"BB&T","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Возрождение":{"tags":{"name":"Возрождение","amenity":"bank"},"name":"Возрождение","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Capital One":{"tags":{"name":"Capital One","amenity":"bank"},"name":"Capital One","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/横浜銀行":{"tags":{"name":"横浜銀行","amenity":"bank"},"name":"横浜銀行","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank Mandiri":{"tags":{"name":"Bank Mandiri","amenity":"bank"},"name":"Bank Mandiri","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de la Nación":{"tags":{"name":"Banco de la Nación","amenity":"bank"},"name":"Banco de la Nación","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco G&T Continental":{"tags":{"name":"Banco G&T Continental","amenity":"bank"},"name":"Banco G&T Continental","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Peoples Bank":{"tags":{"name":"Peoples Bank","amenity":"bank"},"name":"Peoples Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/工商银行":{"tags":{"name":"工商银行","amenity":"bank"},"name":"工商银行","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Совкомбанк":{"tags":{"name":"Совкомбанк","amenity":"bank"},"name":"Совкомбанк","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Provincial":{"tags":{"name":"Provincial","amenity":"bank"},"name":"Provincial","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco de Desarrollo Banrural":{"tags":{"name":"Banco de Desarrollo Banrural","amenity":"bank"},"name":"Banco de Desarrollo Banrural","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banco Bradesco":{"tags":{"name":"Banco Bradesco","amenity":"bank"},"name":"Banco Bradesco","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bicentenario":{"tags":{"name":"Bicentenario","amenity":"bank"},"name":"Bicentenario","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/ლიბერთი ბანკი":{"tags":{"name":"ლიბერთი ბანკი","name:en":"Liberty Bank","amenity":"bank"},"name":"ლიბერთი ბანკი","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Banesco":{"tags":{"name":"Banesco","amenity":"bank"},"name":"Banesco","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Mercantil":{"tags":{"name":"Mercantil","amenity":"bank"},"name":"Mercantil","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Bank BRI":{"tags":{"name":"Bank BRI","amenity":"bank"},"name":"Bank BRI","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/Del Tesoro":{"tags":{"name":"Del Tesoro","amenity":"bank"},"name":"Del Tesoro","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/하나은행":{"tags":{"name":"하나은행","amenity":"bank"},"name":"하나은행","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/CityCommerce Bank":{"tags":{"name":"CityCommerce Bank","amenity":"bank"},"name":"CityCommerce Bank","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/bank/De Venezuela":{"tags":{"name":"De Venezuela","amenity":"bank"},"name":"De Venezuela","icon":"bank","geometry":["point","area"],"fields":["atm","operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/car_rental/Europcar":{"tags":{"name":"Europcar","amenity":"car_rental"},"name":"Europcar","icon":"car","geometry":["point","area"],"fields":["operator"],"suggestion":true},"amenity/car_rental/Budget":{"tags":{"name":"Budget","amenity":"car_rental"},"name":"Budget","icon":"car","geometry":["point","area"],"fields":["operator"],"suggestion":true},"amenity/car_rental/Sixt":{"tags":{"name":"Sixt","amenity":"car_rental"},"name":"Sixt","icon":"car","geometry":["point","area"],"fields":["operator"],"suggestion":true},"amenity/car_rental/Avis":{"tags":{"name":"Avis","amenity":"car_rental"},"name":"Avis","icon":"car","geometry":["point","area"],"fields":["operator"],"suggestion":true},"amenity/car_rental/Hertz":{"tags":{"name":"Hertz","amenity":"car_rental"},"name":"Hertz","icon":"car","geometry":["point","area"],"fields":["operator"],"suggestion":true},"amenity/car_rental/Enterprise":{"tags":{"name":"Enterprise","amenity":"car_rental"},"name":"Enterprise","icon":"car","geometry":["point","area"],"fields":["operator"],"suggestion":true},"amenity/car_rental/stadtmobil CarSharing-Station":{"tags":{"name":"stadtmobil CarSharing-Station","amenity":"car_rental"},"name":"stadtmobil CarSharing-Station","icon":"car","geometry":["point","area"],"fields":["operator"],"suggestion":true},"amenity/pharmacy/Rowlands Pharmacy":{"tags":{"name":"Rowlands Pharmacy","amenity":"pharmacy"},"name":"Rowlands Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Boots":{"tags":{"name":"Boots","amenity":"pharmacy"},"name":"Boots","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Marien-Apotheke":{"tags":{"name":"Marien-Apotheke","amenity":"pharmacy"},"name":"Marien-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Mercury Drug":{"tags":{"name":"Mercury Drug","amenity":"pharmacy"},"name":"Mercury Drug","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Löwen-Apotheke":{"tags":{"name":"Löwen-Apotheke","amenity":"pharmacy"},"name":"Löwen-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Superdrug":{"tags":{"name":"Superdrug","amenity":"pharmacy"},"name":"Superdrug","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Sonnen-Apotheke":{"tags":{"name":"Sonnen-Apotheke","amenity":"pharmacy"},"name":"Sonnen-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Rathaus-Apotheke":{"tags":{"name":"Rathaus-Apotheke","amenity":"pharmacy"},"name":"Rathaus-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Engel-Apotheke":{"tags":{"name":"Engel-Apotheke","amenity":"pharmacy"},"name":"Engel-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Hirsch-Apotheke":{"tags":{"name":"Hirsch-Apotheke","amenity":"pharmacy"},"name":"Hirsch-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Stern-Apotheke":{"tags":{"name":"Stern-Apotheke","amenity":"pharmacy"},"name":"Stern-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Lloyds Pharmacy":{"tags":{"name":"Lloyds Pharmacy","amenity":"pharmacy"},"name":"Lloyds Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Rosen-Apotheke":{"tags":{"name":"Rosen-Apotheke","amenity":"pharmacy"},"name":"Rosen-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Stadt-Apotheke":{"tags":{"name":"Stadt-Apotheke","amenity":"pharmacy"},"name":"Stadt-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Markt-Apotheke":{"tags":{"name":"Markt-Apotheke","amenity":"pharmacy"},"name":"Markt-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Аптека":{"tags":{"name":"Аптека","amenity":"pharmacy"},"name":"Аптека","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Pharmasave":{"tags":{"name":"Pharmasave","amenity":"pharmacy"},"name":"Pharmasave","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Brunnen-Apotheke":{"tags":{"name":"Brunnen-Apotheke","amenity":"pharmacy"},"name":"Brunnen-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Shoppers Drug Mart":{"tags":{"name":"Shoppers Drug Mart","amenity":"pharmacy"},"name":"Shoppers Drug Mart","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Apotheke am Markt":{"tags":{"name":"Apotheke am Markt","amenity":"pharmacy"},"name":"Apotheke am Markt","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Alte Apotheke":{"tags":{"name":"Alte Apotheke","amenity":"pharmacy"},"name":"Alte Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Neue Apotheke":{"tags":{"name":"Neue Apotheke","amenity":"pharmacy"},"name":"Neue Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Gintarinė vaistinė":{"tags":{"name":"Gintarinė vaistinė","amenity":"pharmacy"},"name":"Gintarinė vaistinė","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Rats-Apotheke":{"tags":{"name":"Rats-Apotheke","amenity":"pharmacy"},"name":"Rats-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Adler Apotheke":{"tags":{"name":"Adler Apotheke","amenity":"pharmacy"},"name":"Adler Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Pharmacie Centrale":{"tags":{"name":"Pharmacie Centrale","amenity":"pharmacy"},"name":"Pharmacie Centrale","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Walgreens":{"tags":{"name":"Walgreens","amenity":"pharmacy"},"name":"Walgreens","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Rite Aid":{"tags":{"name":"Rite Aid","amenity":"pharmacy"},"name":"Rite Aid","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Apotheke":{"tags":{"name":"Apotheke","amenity":"pharmacy"},"name":"Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Linden-Apotheke":{"tags":{"name":"Linden-Apotheke","amenity":"pharmacy"},"name":"Linden-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Bahnhof-Apotheke":{"tags":{"name":"Bahnhof-Apotheke","amenity":"pharmacy"},"name":"Bahnhof-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Burg-Apotheke":{"tags":{"name":"Burg-Apotheke","amenity":"pharmacy"},"name":"Burg-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Jean Coutu":{"tags":{"name":"Jean Coutu","amenity":"pharmacy"},"name":"Jean Coutu","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Pharmaprix":{"tags":{"name":"Pharmaprix","amenity":"pharmacy"},"name":"Pharmaprix","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Farmacias Ahumada":{"tags":{"name":"Farmacias Ahumada","amenity":"pharmacy"},"name":"Farmacias Ahumada","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Farmacia Comunale":{"tags":{"name":"Farmacia Comunale","amenity":"pharmacy"},"name":"Farmacia Comunale","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Farmacias Cruz Verde":{"tags":{"name":"Farmacias Cruz Verde","amenity":"pharmacy"},"name":"Farmacias Cruz Verde","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Cruz Verde":{"tags":{"name":"Cruz Verde","amenity":"pharmacy"},"name":"Cruz Verde","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Hubertus Apotheke":{"tags":{"name":"Hubertus Apotheke","amenity":"pharmacy"},"name":"Hubertus Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/CVS":{"tags":{"name":"CVS","amenity":"pharmacy"},"name":"CVS","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Farmacias SalcoBrand":{"tags":{"name":"Farmacias SalcoBrand","amenity":"pharmacy"},"name":"Farmacias SalcoBrand","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Фармация":{"tags":{"name":"Фармация","amenity":"pharmacy"},"name":"Фармация","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Bären-Apotheke":{"tags":{"name":"Bären-Apotheke","amenity":"pharmacy"},"name":"Bären-Apotheke","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Clicks":{"tags":{"name":"Clicks","amenity":"pharmacy"},"name":"Clicks","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/セイジョー":{"tags":{"name":"セイジョー","amenity":"pharmacy"},"name":"セイジョー","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/マツモトキヨシ":{"tags":{"name":"マツモトキヨシ","amenity":"pharmacy"},"name":"マツモトキヨシ","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Dr. Max":{"tags":{"name":"Dr. Max","amenity":"pharmacy"},"name":"Dr. Max","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Вита":{"tags":{"name":"Вита","amenity":"pharmacy"},"name":"Вита","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/サンドラッグ":{"tags":{"name":"サンドラッグ","amenity":"pharmacy"},"name":"サンドラッグ","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Apteka":{"tags":{"name":"Apteka","amenity":"pharmacy"},"name":"Apteka","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Первая помощь":{"tags":{"name":"Первая помощь","amenity":"pharmacy"},"name":"Первая помощь","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Ригла":{"tags":{"name":"Ригла","amenity":"pharmacy"},"name":"Ригла","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Имплозия":{"tags":{"name":"Имплозия","amenity":"pharmacy"},"name":"Имплозия","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Kinney Drugs":{"tags":{"name":"Kinney Drugs","amenity":"pharmacy"},"name":"Kinney Drugs","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Классика":{"tags":{"name":"Классика","amenity":"pharmacy"},"name":"Классика","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Ljekarna":{"tags":{"name":"Ljekarna","amenity":"pharmacy"},"name":"Ljekarna","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/SalcoBrand":{"tags":{"name":"SalcoBrand","amenity":"pharmacy"},"name":"SalcoBrand","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Аптека 36,6":{"tags":{"name":"Аптека 36,6","amenity":"pharmacy"},"name":"Аптека 36,6","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Фармакор":{"tags":{"name":"Фармакор","amenity":"pharmacy"},"name":"Фармакор","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/スギ薬局":{"tags":{"name":"スギ薬局","amenity":"pharmacy"},"name":"スギ薬局","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Аптечный пункт":{"tags":{"name":"Аптечный пункт","amenity":"pharmacy"},"name":"Аптечный пункт","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Невис":{"tags":{"name":"Невис","amenity":"pharmacy"},"name":"Невис","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/トモズ (Tomod's)":{"tags":{"name":"トモズ (Tomod's)","amenity":"pharmacy"},"name":"トモズ (Tomod's)","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Eurovaistinė":{"tags":{"name":"Eurovaistinė","amenity":"pharmacy"},"name":"Eurovaistinė","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Farmacity":{"tags":{"name":"Farmacity","amenity":"pharmacy"},"name":"Farmacity","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/аптека":{"tags":{"name":"аптека","amenity":"pharmacy"},"name":"аптека","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/The Generics Pharmacy":{"tags":{"name":"The Generics Pharmacy","amenity":"pharmacy"},"name":"The Generics Pharmacy","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Farmatodo":{"tags":{"name":"Farmatodo","amenity":"pharmacy"},"name":"Farmatodo","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Duane Reade":{"tags":{"name":"Duane Reade","amenity":"pharmacy"},"name":"Duane Reade","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Фармленд":{"tags":{"name":"Фармленд","amenity":"pharmacy"},"name":"Фармленд","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/ドラッグてらしま (Drug Terashima)":{"tags":{"name":"ドラッグてらしま (Drug Terashima)","amenity":"pharmacy"},"name":"ドラッグてらしま (Drug Terashima)","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Арніка":{"tags":{"name":"Арніка","amenity":"pharmacy"},"name":"Арніка","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/ავერსი (Aversi)":{"tags":{"name":"ავერსი (Aversi)","amenity":"pharmacy"},"name":"ავერსი (Aversi)","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/pharmacy/Farmahorro":{"tags":{"name":"Farmahorro","amenity":"pharmacy"},"name":"Farmahorro","icon":"pharmacy","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"amenity/cafe/Starbucks":{"tags":{"name":"Starbucks","cuisine":"coffee_shop","amenity":"cafe"},"name":"Starbucks","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Cafeteria":{"tags":{"name":"Cafeteria","amenity":"cafe"},"name":"Cafeteria","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Costa":{"tags":{"name":"Costa","amenity":"cafe"},"name":"Costa","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Caffè Nero":{"tags":{"name":"Caffè Nero","amenity":"cafe"},"name":"Caffè Nero","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Кафе":{"tags":{"name":"Кафе","amenity":"cafe"},"name":"Кафе","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Café Central":{"tags":{"name":"Café Central","amenity":"cafe"},"name":"Café Central","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Second Cup":{"tags":{"name":"Second Cup","amenity":"cafe"},"name":"Second Cup","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Dunkin Donuts":{"tags":{"name":"Dunkin Donuts","cuisine":"donut","amenity":"cafe"},"name":"Dunkin Donuts","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Espresso House":{"tags":{"name":"Espresso House","amenity":"cafe"},"name":"Espresso House","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Segafredo":{"tags":{"name":"Segafredo","amenity":"cafe"},"name":"Segafredo","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Coffee Time":{"tags":{"name":"Coffee Time","amenity":"cafe"},"name":"Coffee Time","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Cafe Coffee Day":{"tags":{"name":"Cafe Coffee Day","amenity":"cafe"},"name":"Cafe Coffee Day","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Eiscafe Venezia":{"tags":{"name":"Eiscafe Venezia","amenity":"cafe"},"name":"Eiscafe Venezia","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/スターバックス":{"tags":{"name":"スターバックス","name:en":"Starbucks","amenity":"cafe"},"name":"スターバックス","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Шоколадница":{"tags":{"name":"Шоколадница","amenity":"cafe"},"name":"Шоколадница","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Pret A Manger":{"tags":{"name":"Pret A Manger","amenity":"cafe"},"name":"Pret A Manger","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Столовая":{"tags":{"name":"Столовая","amenity":"cafe"},"name":"Столовая","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/ドトール":{"tags":{"name":"ドトール","name:en":"DOUTOR","amenity":"cafe"},"name":"ドトール","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Tchibo":{"tags":{"name":"Tchibo","amenity":"cafe"},"name":"Tchibo","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Кофе Хауз":{"tags":{"name":"Кофе Хауз","amenity":"cafe"},"name":"Кофе Хауз","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Caribou Coffee":{"tags":{"name":"Caribou Coffee","amenity":"cafe"},"name":"Caribou Coffee","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Уют":{"tags":{"name":"Уют","amenity":"cafe"},"name":"Уют","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Шашлычная":{"tags":{"name":"Шашлычная","amenity":"cafe"},"name":"Шашлычная","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/คาเฟ่ อเมซอน":{"tags":{"name":"คาเฟ่ อเมซอน","amenity":"cafe"},"name":"คาเฟ่ อเมซอน","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Traveler's Coffee":{"tags":{"name":"Traveler's Coffee","amenity":"cafe"},"name":"Traveler's Coffee","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/カフェ・ド・クリエ":{"tags":{"name":"カフェ・ド・クリエ","name:en":"Cafe de CRIE","amenity":"cafe"},"name":"カフェ・ド・クリエ","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"amenity/cafe/Cafe Amazon":{"tags":{"name":"Cafe Amazon","amenity":"cafe"},"name":"Cafe Amazon","icon":"cafe","geometry":["point","area"],"fields":["cuisine","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid","smoking","outdoor_seating"],"suggestion":true},"shop/supermarket/Budgens":{"tags":{"name":"Budgens","shop":"supermarket"},"name":"Budgens","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Morrisons":{"tags":{"name":"Morrisons","shop":"supermarket"},"name":"Morrisons","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Interspar":{"tags":{"name":"Interspar","shop":"supermarket"},"name":"Interspar","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Merkur":{"tags":{"name":"Merkur","shop":"supermarket"},"name":"Merkur","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Sainsbury's":{"tags":{"name":"Sainsbury's","shop":"supermarket"},"name":"Sainsbury's","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Lidl":{"tags":{"name":"Lidl","shop":"supermarket"},"name":"Lidl","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Edeka":{"tags":{"name":"Edeka","shop":"supermarket"},"name":"Edeka","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Coles":{"tags":{"name":"Coles","shop":"supermarket"},"name":"Coles","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Iceland":{"tags":{"name":"Iceland","shop":"supermarket"},"name":"Iceland","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Coop":{"tags":{"name":"Coop","shop":"supermarket"},"name":"Coop","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Tesco":{"tags":{"name":"Tesco","shop":"supermarket"},"name":"Tesco","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Woolworths":{"tags":{"name":"Woolworths","shop":"supermarket"},"name":"Woolworths","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Zielpunkt":{"tags":{"name":"Zielpunkt","shop":"supermarket"},"name":"Zielpunkt","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Nahkauf":{"tags":{"name":"Nahkauf","shop":"supermarket"},"name":"Nahkauf","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Billa":{"tags":{"name":"Billa","shop":"supermarket"},"name":"Billa","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Kaufland":{"tags":{"name":"Kaufland","shop":"supermarket"},"name":"Kaufland","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Plus":{"tags":{"name":"Plus","shop":"supermarket"},"name":"Plus","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/ALDI":{"tags":{"name":"ALDI","shop":"supermarket"},"name":"ALDI","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Checkers":{"tags":{"name":"Checkers","shop":"supermarket"},"name":"Checkers","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Tesco Metro":{"tags":{"name":"Tesco Metro","shop":"supermarket"},"name":"Tesco Metro","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/NP":{"tags":{"name":"NP","shop":"supermarket"},"name":"NP","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Penny":{"tags":{"name":"Penny","shop":"supermarket"},"name":"Penny","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Norma":{"tags":{"name":"Norma","shop":"supermarket"},"name":"Norma","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Asda":{"tags":{"name":"Asda","shop":"supermarket"},"name":"Asda","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Netto":{"tags":{"name":"Netto","shop":"supermarket"},"name":"Netto","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Rewe":{"tags":{"name":"Rewe","shop":"supermarket"},"name":"Rewe","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Aldi Süd":{"tags":{"name":"Aldi Süd","shop":"supermarket"},"name":"Aldi Süd","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Real":{"tags":{"name":"Real","shop":"supermarket"},"name":"Real","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/King Soopers":{"tags":{"name":"King Soopers","shop":"supermarket"},"name":"King Soopers","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Kiwi":{"tags":{"name":"Kiwi","shop":"supermarket"},"name":"Kiwi","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Pick n Pay":{"tags":{"name":"Pick n Pay","shop":"supermarket"},"name":"Pick n Pay","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/ICA":{"tags":{"name":"ICA","shop":"supermarket"},"name":"ICA","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Tengelmann":{"tags":{"name":"Tengelmann","shop":"supermarket"},"name":"Tengelmann","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Carrefour":{"tags":{"name":"Carrefour","shop":"supermarket"},"name":"Carrefour","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Waitrose":{"tags":{"name":"Waitrose","shop":"supermarket"},"name":"Waitrose","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Spar":{"tags":{"name":"Spar","shop":"supermarket"},"name":"Spar","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Hofer":{"tags":{"name":"Hofer","shop":"supermarket"},"name":"Hofer","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/M-Preis":{"tags":{"name":"M-Preis","shop":"supermarket"},"name":"M-Preis","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/tegut":{"tags":{"name":"tegut","shop":"supermarket"},"name":"tegut","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Sainsbury's Local":{"tags":{"name":"Sainsbury's Local","shop":"supermarket"},"name":"Sainsbury's Local","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/E-Center":{"tags":{"name":"E-Center","shop":"supermarket"},"name":"E-Center","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Aldi Nord":{"tags":{"name":"Aldi Nord","shop":"supermarket"},"name":"Aldi Nord","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/nahkauf":{"tags":{"name":"nahkauf","shop":"supermarket"},"name":"nahkauf","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Meijer":{"tags":{"name":"Meijer","shop":"supermarket"},"name":"Meijer","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Safeway":{"tags":{"name":"Safeway","shop":"supermarket"},"name":"Safeway","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Costco":{"tags":{"name":"Costco","shop":"supermarket"},"name":"Costco","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Albert":{"tags":{"name":"Albert","shop":"supermarket"},"name":"Albert","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Jumbo":{"tags":{"name":"Jumbo","shop":"supermarket"},"name":"Jumbo","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Shoprite":{"tags":{"name":"Shoprite","shop":"supermarket"},"name":"Shoprite","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/MPreis":{"tags":{"name":"MPreis","shop":"supermarket"},"name":"MPreis","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Penny Market":{"tags":{"name":"Penny Market","shop":"supermarket"},"name":"Penny Market","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Tesco Extra":{"tags":{"name":"Tesco Extra","shop":"supermarket"},"name":"Tesco Extra","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Albert Heijn":{"tags":{"name":"Albert Heijn","shop":"supermarket"},"name":"Albert Heijn","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/IGA":{"tags":{"name":"IGA","shop":"supermarket"},"name":"IGA","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Super U":{"tags":{"name":"Super U","shop":"supermarket"},"name":"Super U","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Metro":{"tags":{"name":"Metro","shop":"supermarket"},"name":"Metro","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Neukauf":{"tags":{"name":"Neukauf","shop":"supermarket"},"name":"Neukauf","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Migros":{"tags":{"name":"Migros","shop":"supermarket"},"name":"Migros","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Marktkauf":{"tags":{"name":"Marktkauf","shop":"supermarket"},"name":"Marktkauf","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Delikatesy Centrum":{"tags":{"name":"Delikatesy Centrum","shop":"supermarket"},"name":"Delikatesy Centrum","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/C1000":{"tags":{"name":"C1000","shop":"supermarket"},"name":"C1000","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Hoogvliet":{"tags":{"name":"Hoogvliet","shop":"supermarket"},"name":"Hoogvliet","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Food Basics":{"tags":{"name":"Food Basics","shop":"supermarket"},"name":"Food Basics","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Casino":{"tags":{"name":"Casino","shop":"supermarket"},"name":"Casino","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Penny Markt":{"tags":{"name":"Penny Markt","shop":"supermarket"},"name":"Penny Markt","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Giant":{"tags":{"name":"Giant","shop":"supermarket"},"name":"Giant","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Rema 1000":{"tags":{"name":"Rema 1000","shop":"supermarket"},"name":"Rema 1000","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Kaufpark":{"tags":{"name":"Kaufpark","shop":"supermarket"},"name":"Kaufpark","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/ALDI SÜD":{"tags":{"name":"ALDI SÜD","shop":"supermarket"},"name":"ALDI SÜD","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Simply Market":{"tags":{"name":"Simply Market","shop":"supermarket"},"name":"Simply Market","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Konzum":{"tags":{"name":"Konzum","shop":"supermarket"},"name":"Konzum","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Carrefour Express":{"tags":{"name":"Carrefour Express","shop":"supermarket"},"name":"Carrefour Express","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Eurospar":{"tags":{"name":"Eurospar","shop":"supermarket"},"name":"Eurospar","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Mercator":{"tags":{"name":"Mercator","shop":"supermarket"},"name":"Mercator","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Famila":{"tags":{"name":"Famila","shop":"supermarket"},"name":"Famila","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Hemköp":{"tags":{"name":"Hemköp","shop":"supermarket"},"name":"Hemköp","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/real,-":{"tags":{"name":"real,-","shop":"supermarket"},"name":"real,-","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Markant":{"tags":{"name":"Markant","shop":"supermarket"},"name":"Markant","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Volg":{"tags":{"name":"Volg","shop":"supermarket"},"name":"Volg","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Leader Price":{"tags":{"name":"Leader Price","shop":"supermarket"},"name":"Leader Price","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Treff 3000":{"tags":{"name":"Treff 3000","shop":"supermarket"},"name":"Treff 3000","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/SuperBrugsen":{"tags":{"name":"SuperBrugsen","shop":"supermarket"},"name":"SuperBrugsen","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Kaiser's":{"tags":{"name":"Kaiser's","shop":"supermarket"},"name":"Kaiser's","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/K+K":{"tags":{"name":"K+K","shop":"supermarket"},"name":"K+K","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Unimarkt":{"tags":{"name":"Unimarkt","shop":"supermarket"},"name":"Unimarkt","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Carrefour City":{"tags":{"name":"Carrefour City","shop":"supermarket"},"name":"Carrefour City","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Sobeys":{"tags":{"name":"Sobeys","shop":"supermarket"},"name":"Sobeys","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/S-Market":{"tags":{"name":"S-Market","shop":"supermarket"},"name":"S-Market","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Combi":{"tags":{"name":"Combi","shop":"supermarket"},"name":"Combi","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Denner":{"tags":{"name":"Denner","shop":"supermarket"},"name":"Denner","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Konsum":{"tags":{"name":"Konsum","shop":"supermarket"},"name":"Konsum","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Franprix":{"tags":{"name":"Franprix","shop":"supermarket"},"name":"Franprix","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Monoprix":{"tags":{"name":"Monoprix","shop":"supermarket"},"name":"Monoprix","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Diska":{"tags":{"name":"Diska","shop":"supermarket"},"name":"Diska","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/PENNY":{"tags":{"name":"PENNY","shop":"supermarket"},"name":"PENNY","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Dia":{"tags":{"name":"Dia","shop":"supermarket"},"name":"Dia","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Giant Eagle":{"tags":{"name":"Giant Eagle","shop":"supermarket"},"name":"Giant Eagle","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/NORMA":{"tags":{"name":"NORMA","shop":"supermarket"},"name":"NORMA","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/AD Delhaize":{"tags":{"name":"AD Delhaize","shop":"supermarket"},"name":"AD Delhaize","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Auchan":{"tags":{"name":"Auchan","shop":"supermarket"},"name":"Auchan","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Mercadona":{"tags":{"name":"Mercadona","shop":"supermarket"},"name":"Mercadona","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Consum":{"tags":{"name":"Consum","shop":"supermarket"},"name":"Consum","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Carrefour Market":{"tags":{"name":"Carrefour Market","shop":"supermarket"},"name":"Carrefour Market","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Whole Foods":{"tags":{"name":"Whole Foods","shop":"supermarket"},"name":"Whole Foods","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Pam":{"tags":{"name":"Pam","shop":"supermarket"},"name":"Pam","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/sky":{"tags":{"name":"sky","shop":"supermarket"},"name":"sky","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Despar":{"tags":{"name":"Despar","shop":"supermarket"},"name":"Despar","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Eroski":{"tags":{"name":"Eroski","shop":"supermarket"},"name":"Eroski","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Maxi":{"tags":{"name":"Maxi","shop":"supermarket"},"name":"Maxi","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Colruyt":{"tags":{"name":"Colruyt","shop":"supermarket"},"name":"Colruyt","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/The Co-operative":{"tags":{"name":"The Co-operative","shop":"supermarket"},"name":"The Co-operative","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Intermarché":{"tags":{"name":"Intermarché","shop":"supermarket"},"name":"Intermarché","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Delhaize":{"tags":{"name":"Delhaize","shop":"supermarket"},"name":"Delhaize","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/CBA":{"tags":{"name":"CBA","shop":"supermarket"},"name":"CBA","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Shopi":{"tags":{"name":"Shopi","shop":"supermarket"},"name":"Shopi","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Walmart":{"tags":{"name":"Walmart","shop":"supermarket"},"name":"Walmart","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Kroger":{"tags":{"name":"Kroger","shop":"supermarket"},"name":"Kroger","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Albertsons":{"tags":{"name":"Albertsons","shop":"supermarket"},"name":"Albertsons","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Trader Joe's":{"tags":{"name":"Trader Joe's","shop":"supermarket"},"name":"Trader Joe's","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Feneberg":{"tags":{"name":"Feneberg","shop":"supermarket"},"name":"Feneberg","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/denn's Biomarkt":{"tags":{"name":"denn's Biomarkt","shop":"supermarket"},"name":"denn's Biomarkt","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Kvickly":{"tags":{"name":"Kvickly","shop":"supermarket"},"name":"Kvickly","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Makro":{"tags":{"name":"Makro","shop":"supermarket"},"name":"Makro","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Dico":{"tags":{"name":"Dico","shop":"supermarket"},"name":"Dico","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Nah & Frisch":{"tags":{"name":"Nah & Frisch","shop":"supermarket"},"name":"Nah & Frisch","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Champion":{"tags":{"name":"Champion","shop":"supermarket"},"name":"Champion","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/ICA Supermarket":{"tags":{"name":"ICA Supermarket","shop":"supermarket"},"name":"ICA Supermarket","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Fakta":{"tags":{"name":"Fakta","shop":"supermarket"},"name":"Fakta","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Магнит":{"tags":{"name":"Магнит","shop":"supermarket"},"name":"Магнит","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Caprabo":{"tags":{"name":"Caprabo","shop":"supermarket"},"name":"Caprabo","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Famiglia Cooperativa":{"tags":{"name":"Famiglia Cooperativa","shop":"supermarket"},"name":"Famiglia Cooperativa","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Народная 7Я семьЯ":{"tags":{"name":"Народная 7Я семьЯ","shop":"supermarket"},"name":"Народная 7Я семьЯ","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Esselunga":{"tags":{"name":"Esselunga","shop":"supermarket"},"name":"Esselunga","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Maxima":{"tags":{"name":"Maxima","shop":"supermarket"},"name":"Maxima","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Wasgau":{"tags":{"name":"Wasgau","shop":"supermarket"},"name":"Wasgau","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Pingo Doce":{"tags":{"name":"Pingo Doce","shop":"supermarket"},"name":"Pingo Doce","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Match":{"tags":{"name":"Match","shop":"supermarket"},"name":"Match","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Profi":{"tags":{"name":"Profi","shop":"supermarket"},"name":"Profi","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Lider":{"tags":{"name":"Lider","shop":"supermarket"},"name":"Lider","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Unimarc":{"tags":{"name":"Unimarc","shop":"supermarket"},"name":"Unimarc","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/The Co-operative Food":{"tags":{"name":"The Co-operative Food","shop":"supermarket"},"name":"The Co-operative Food","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Santa Isabel":{"tags":{"name":"Santa Isabel","shop":"supermarket"},"name":"Santa Isabel","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Седьмой континент":{"tags":{"name":"Седьмой континент","shop":"supermarket"},"name":"Седьмой континент","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/HIT":{"tags":{"name":"HIT","shop":"supermarket"},"name":"HIT","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Rimi":{"tags":{"name":"Rimi","shop":"supermarket"},"name":"Rimi","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Conad":{"tags":{"name":"Conad","shop":"supermarket"},"name":"Conad","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Фуршет":{"tags":{"name":"Фуршет","shop":"supermarket"},"name":"Фуршет","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Willys":{"tags":{"name":"Willys","shop":"supermarket"},"name":"Willys","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Farmfoods":{"tags":{"name":"Farmfoods","shop":"supermarket"},"name":"Farmfoods","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/U Express":{"tags":{"name":"U Express","shop":"supermarket"},"name":"U Express","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Фора":{"tags":{"name":"Фора","shop":"supermarket"},"name":"Фора","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Dunnes Stores":{"tags":{"name":"Dunnes Stores","shop":"supermarket"},"name":"Dunnes Stores","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Сільпо":{"tags":{"name":"Сільпо","shop":"supermarket"},"name":"Сільпо","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/マルエツ":{"tags":{"name":"マルエツ","shop":"supermarket"},"name":"マルエツ","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Piggly Wiggly":{"tags":{"name":"Piggly Wiggly","shop":"supermarket"},"name":"Piggly Wiggly","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Crai":{"tags":{"name":"Crai","shop":"supermarket"},"name":"Crai","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/El Árbol":{"tags":{"name":"El Árbol","shop":"supermarket"},"name":"El Árbol","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Centre Commercial E. Leclerc":{"tags":{"name":"Centre Commercial E. Leclerc","shop":"supermarket"},"name":"Centre Commercial E. Leclerc","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Foodland":{"tags":{"name":"Foodland","shop":"supermarket"},"name":"Foodland","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Super Brugsen":{"tags":{"name":"Super Brugsen","shop":"supermarket"},"name":"Super Brugsen","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Дикси":{"tags":{"name":"Дикси","shop":"supermarket"},"name":"Дикси","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Пятёрочка":{"tags":{"name":"Пятёрочка","shop":"supermarket"},"name":"Пятёрочка","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Publix":{"tags":{"name":"Publix","shop":"supermarket"},"name":"Publix","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Føtex":{"tags":{"name":"Føtex","shop":"supermarket"},"name":"Føtex","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/coop":{"tags":{"name":"coop","shop":"supermarket"},"name":"coop","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Coop Konsum":{"tags":{"name":"Coop Konsum","shop":"supermarket"},"name":"Coop Konsum","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Carrefour Contact":{"tags":{"name":"Carrefour Contact","shop":"supermarket"},"name":"Carrefour Contact","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/No Frills":{"tags":{"name":"No Frills","shop":"supermarket"},"name":"No Frills","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Plodine":{"tags":{"name":"Plodine","shop":"supermarket"},"name":"Plodine","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/ADEG":{"tags":{"name":"ADEG","shop":"supermarket"},"name":"ADEG","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Minipreço":{"tags":{"name":"Minipreço","shop":"supermarket"},"name":"Minipreço","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Biedronka":{"tags":{"name":"Biedronka","shop":"supermarket"},"name":"Biedronka","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Eurospin":{"tags":{"name":"Eurospin","shop":"supermarket"},"name":"Eurospin","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Семья":{"tags":{"name":"Семья","shop":"supermarket"},"name":"Семья","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Gadis":{"tags":{"name":"Gadis","shop":"supermarket"},"name":"Gadis","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Евроопт":{"tags":{"name":"Евроопт","shop":"supermarket"},"name":"Евроопт","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Квартал":{"tags":{"name":"Квартал","shop":"supermarket"},"name":"Квартал","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/New World":{"tags":{"name":"New World","shop":"supermarket"},"name":"New World","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Countdown":{"tags":{"name":"Countdown","shop":"supermarket"},"name":"Countdown","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Reliance Fresh":{"tags":{"name":"Reliance Fresh","shop":"supermarket"},"name":"Reliance Fresh","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Stokrotka":{"tags":{"name":"Stokrotka","shop":"supermarket"},"name":"Stokrotka","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Coop Jednota":{"tags":{"name":"Coop Jednota","shop":"supermarket"},"name":"Coop Jednota","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Fred Meyer":{"tags":{"name":"Fred Meyer","shop":"supermarket"},"name":"Fred Meyer","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Irma":{"tags":{"name":"Irma","shop":"supermarket"},"name":"Irma","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Continente":{"tags":{"name":"Continente","shop":"supermarket"},"name":"Continente","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Price Chopper":{"tags":{"name":"Price Chopper","shop":"supermarket"},"name":"Price Chopper","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Game":{"tags":{"name":"Game","shop":"supermarket"},"name":"Game","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Soriana":{"tags":{"name":"Soriana","shop":"supermarket"},"name":"Soriana","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Alimerka":{"tags":{"name":"Alimerka","shop":"supermarket"},"name":"Alimerka","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Piotr i Paweł":{"tags":{"name":"Piotr i Paweł","shop":"supermarket"},"name":"Piotr i Paweł","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Перекресток":{"tags":{"name":"Перекресток","shop":"supermarket"},"name":"Перекресток","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Maxima X":{"tags":{"name":"Maxima X","shop":"supermarket"},"name":"Maxima X","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Карусель":{"tags":{"name":"Карусель","shop":"supermarket"},"name":"Карусель","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/ALDI Nord":{"tags":{"name":"ALDI Nord","shop":"supermarket"},"name":"ALDI Nord","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Condis":{"tags":{"name":"Condis","shop":"supermarket"},"name":"Condis","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Sam's Club":{"tags":{"name":"Sam's Club","shop":"supermarket"},"name":"Sam's Club","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Копейка":{"tags":{"name":"Копейка","shop":"supermarket"},"name":"Копейка","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Géant Casino":{"tags":{"name":"Géant Casino","shop":"supermarket"},"name":"Géant Casino","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/ASDA":{"tags":{"name":"ASDA","shop":"supermarket"},"name":"ASDA","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Intermarche":{"tags":{"name":"Intermarche","shop":"supermarket"},"name":"Intermarche","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Stop & Shop":{"tags":{"name":"Stop & Shop","shop":"supermarket"},"name":"Stop & Shop","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Food Lion":{"tags":{"name":"Food Lion","shop":"supermarket"},"name":"Food Lion","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Harris Teeter":{"tags":{"name":"Harris Teeter","shop":"supermarket"},"name":"Harris Teeter","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Foodworks":{"tags":{"name":"Foodworks","shop":"supermarket"},"name":"Foodworks","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Polo Market":{"tags":{"name":"Polo Market","shop":"supermarket"},"name":"Polo Market","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Лента":{"tags":{"name":"Лента","shop":"supermarket"},"name":"Лента","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/西友 (SEIYU)":{"tags":{"name":"西友 (SEIYU)","shop":"supermarket"},"name":"西友 (SEIYU)","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/H-E-B":{"tags":{"name":"H-E-B","shop":"supermarket"},"name":"H-E-B","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Атак":{"tags":{"name":"Атак","shop":"supermarket"},"name":"Атак","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Полушка":{"tags":{"name":"Полушка","shop":"supermarket"},"name":"Полушка","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Extra":{"tags":{"name":"Extra","shop":"supermarket"},"name":"Extra","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Sigma":{"tags":{"name":"Sigma","shop":"supermarket"},"name":"Sigma","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/АТБ":{"tags":{"name":"АТБ","shop":"supermarket"},"name":"АТБ","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Bodega Aurrera":{"tags":{"name":"Bodega Aurrera","shop":"supermarket"},"name":"Bodega Aurrera","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Tesco Lotus":{"tags":{"name":"Tesco Lotus","shop":"supermarket"},"name":"Tesco Lotus","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Мария-Ра":{"tags":{"name":"Мария-Ра","shop":"supermarket"},"name":"Мария-Ра","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Магнолия":{"tags":{"name":"Магнолия","shop":"supermarket"},"name":"Магнолия","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Монетка":{"tags":{"name":"Монетка","shop":"supermarket"},"name":"Монетка","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Hy-Vee":{"tags":{"name":"Hy-Vee","shop":"supermarket"},"name":"Hy-Vee","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Walmart Supercenter":{"tags":{"name":"Walmart Supercenter","shop":"supermarket"},"name":"Walmart Supercenter","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Hannaford":{"tags":{"name":"Hannaford","shop":"supermarket"},"name":"Hannaford","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Wegmans":{"tags":{"name":"Wegmans","shop":"supermarket"},"name":"Wegmans","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/業務スーパー":{"tags":{"name":"業務スーパー","shop":"supermarket"},"name":"業務スーパー","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Norfa XL":{"tags":{"name":"Norfa XL","shop":"supermarket"},"name":"Norfa XL","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/ヨークマート (YorkMart)":{"tags":{"name":"ヨークマート (YorkMart)","shop":"supermarket"},"name":"ヨークマート (YorkMart)","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/supermarket/Leclerc Drive":{"tags":{"name":"Leclerc Drive","shop":"supermarket"},"name":"Leclerc Drive","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Media Markt":{"tags":{"name":"Media Markt","shop":"electronics"},"name":"Media Markt","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Maplin":{"tags":{"name":"Maplin","shop":"electronics"},"name":"Maplin","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Best Buy":{"tags":{"name":"Best Buy","shop":"electronics"},"name":"Best Buy","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Future Shop":{"tags":{"name":"Future Shop","shop":"electronics"},"name":"Future Shop","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Saturn":{"tags":{"name":"Saturn","shop":"electronics"},"name":"Saturn","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Currys":{"tags":{"name":"Currys","shop":"electronics"},"name":"Currys","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Radio Shack":{"tags":{"name":"Radio Shack","shop":"electronics"},"name":"Radio Shack","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Euronics":{"tags":{"name":"Euronics","shop":"electronics"},"name":"Euronics","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Expert":{"tags":{"name":"Expert","shop":"electronics"},"name":"Expert","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Эльдорадо":{"tags":{"name":"Эльдорадо","shop":"electronics"},"name":"Эльдорадо","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/Darty":{"tags":{"name":"Darty","shop":"electronics"},"name":"Darty","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/М.Видео":{"tags":{"name":"М.Видео","shop":"electronics"},"name":"М.Видео","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/electronics/ヤマダ電機":{"tags":{"name":"ヤマダ電機","shop":"electronics"},"name":"ヤマダ電機","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/McColl's":{"tags":{"name":"McColl's","shop":"convenience"},"name":"McColl's","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Tesco Express":{"tags":{"name":"Tesco Express","shop":"convenience"},"name":"Tesco Express","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/One Stop":{"tags":{"name":"One Stop","shop":"convenience"},"name":"One Stop","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Londis":{"tags":{"name":"Londis","shop":"convenience"},"name":"Londis","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/7-Eleven":{"tags":{"name":"7-Eleven","shop":"convenience"},"name":"7-Eleven","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Sale":{"tags":{"name":"Sale","shop":"convenience"},"name":"Sale","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Siwa":{"tags":{"name":"Siwa","shop":"convenience"},"name":"Siwa","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/COOP Jednota":{"tags":{"name":"COOP Jednota","shop":"convenience"},"name":"COOP Jednota","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Mac's":{"tags":{"name":"Mac's","shop":"convenience"},"name":"Mac's","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Alepa":{"tags":{"name":"Alepa","shop":"convenience"},"name":"Alepa","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Hasty Market":{"tags":{"name":"Hasty Market","shop":"convenience"},"name":"Hasty Market","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/K-Market":{"tags":{"name":"K-Market","shop":"convenience"},"name":"K-Market","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Costcutter":{"tags":{"name":"Costcutter","shop":"convenience"},"name":"Costcutter","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Valintatalo":{"tags":{"name":"Valintatalo","shop":"convenience"},"name":"Valintatalo","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Circle K":{"tags":{"name":"Circle K","shop":"convenience"},"name":"Circle K","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/セブンイレブン":{"tags":{"name":"セブンイレブン","name:en":"7-Eleven","shop":"convenience"},"name":"セブンイレブン","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/ローソン":{"tags":{"name":"ローソン","name:en":"LAWSON","shop":"convenience"},"name":"ローソン","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Petit Casino":{"tags":{"name":"Petit Casino","shop":"convenience"},"name":"Petit Casino","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Mace":{"tags":{"name":"Mace","shop":"convenience"},"name":"Mace","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Mini Market":{"tags":{"name":"Mini Market","shop":"convenience"},"name":"Mini Market","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Nisa Local":{"tags":{"name":"Nisa Local","shop":"convenience"},"name":"Nisa Local","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Dorfladen":{"tags":{"name":"Dorfladen","shop":"convenience"},"name":"Dorfladen","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Продукты":{"tags":{"name":"Продукты","shop":"convenience"},"name":"Продукты","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Mini Stop":{"tags":{"name":"Mini Stop","shop":"convenience"},"name":"Mini Stop","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/LAWSON":{"tags":{"name":"LAWSON","shop":"convenience"},"name":"LAWSON","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/デイリーヤマザキ":{"tags":{"name":"デイリーヤマザキ","shop":"convenience"},"name":"デイリーヤマザキ","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Надежда":{"tags":{"name":"Надежда","shop":"convenience"},"name":"Надежда","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Nisa":{"tags":{"name":"Nisa","shop":"convenience"},"name":"Nisa","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Premier":{"tags":{"name":"Premier","shop":"convenience"},"name":"Premier","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/ABC":{"tags":{"name":"ABC","shop":"convenience"},"name":"ABC","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/ミニストップ":{"tags":{"name":"ミニストップ","name:en":"MINISTOP","shop":"convenience"},"name":"ミニストップ","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/サンクス":{"tags":{"name":"サンクス","name:en":"sunkus","shop":"convenience"},"name":"サンクス","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/スリーエフ":{"tags":{"name":"スリーエフ","shop":"convenience"},"name":"スリーエフ","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/8 à Huit":{"tags":{"name":"8 à Huit","shop":"convenience"},"name":"8 à Huit","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Żabka":{"tags":{"name":"Żabka","shop":"convenience"},"name":"Żabka","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Almacen":{"tags":{"name":"Almacen","shop":"convenience"},"name":"Almacen","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Vival":{"tags":{"name":"Vival","shop":"convenience"},"name":"Vival","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/FamilyMart":{"tags":{"name":"FamilyMart","shop":"convenience"},"name":"FamilyMart","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/ファミリーマート":{"tags":{"name":"ファミリーマート","name:en":"FamilyMart","shop":"convenience"},"name":"ファミリーマート","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Sunkus":{"tags":{"name":"Sunkus","shop":"convenience"},"name":"Sunkus","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/セブンイレブン(Seven-Eleven)":{"tags":{"name":"セブンイレブン(Seven-Eleven)","shop":"convenience"},"name":"セブンイレブン(Seven-Eleven)","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Jednota":{"tags":{"name":"Jednota","shop":"convenience"},"name":"Jednota","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Магазин":{"tags":{"name":"Магазин","shop":"convenience"},"name":"Магазин","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Гастроном":{"tags":{"name":"Гастроном","shop":"convenience"},"name":"Гастроном","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Centra":{"tags":{"name":"Centra","shop":"convenience"},"name":"Centra","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/サークルK":{"tags":{"name":"サークルK","name:en":"Circle K","shop":"convenience"},"name":"サークルK","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Wawa":{"tags":{"name":"Wawa","shop":"convenience"},"name":"Wawa","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Proxi":{"tags":{"name":"Proxi","shop":"convenience"},"name":"Proxi","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Универсам":{"tags":{"name":"Универсам","shop":"convenience"},"name":"Универсам","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Groszek":{"tags":{"name":"Groszek","shop":"convenience"},"name":"Groszek","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Select":{"tags":{"name":"Select","shop":"convenience"},"name":"Select","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Večerka":{"tags":{"name":"Večerka","shop":"convenience"},"name":"Večerka","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Potraviny":{"tags":{"name":"Potraviny","shop":"convenience"},"name":"Potraviny","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Смак":{"tags":{"name":"Смак","shop":"convenience"},"name":"Смак","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Эконом":{"tags":{"name":"Эконом","shop":"convenience"},"name":"Эконом","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Березка":{"tags":{"name":"Березка","shop":"convenience"},"name":"Березка","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Społem":{"tags":{"name":"Społem","shop":"convenience"},"name":"Społem","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Cumberland Farms":{"tags":{"name":"Cumberland Farms","shop":"convenience"},"name":"Cumberland Farms","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Tesco Lotus Express":{"tags":{"name":"Tesco Lotus Express","shop":"convenience"},"name":"Tesco Lotus Express","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Kiosk":{"tags":{"name":"Kiosk","shop":"convenience"},"name":"Kiosk","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Sklep spożywczy":{"tags":{"name":"Sklep spożywczy","shop":"convenience"},"name":"Sklep spożywczy","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/24 часа":{"tags":{"name":"24 часа","shop":"convenience"},"name":"24 часа","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Минимаркет":{"tags":{"name":"Минимаркет","shop":"convenience"},"name":"Минимаркет","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Oxxo":{"tags":{"name":"Oxxo","shop":"convenience"},"name":"Oxxo","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/abc":{"tags":{"name":"abc","shop":"convenience"},"name":"abc","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/7/11":{"tags":{"name":"7/11","shop":"convenience"},"name":"7/11","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Stewart's":{"tags":{"name":"Stewart's","shop":"convenience"},"name":"Stewart's","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Продукти":{"tags":{"name":"Продукти","shop":"convenience"},"name":"Продукти","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/ローソンストア100 (LAWSON STORE 100)":{"tags":{"name":"ローソンストア100 (LAWSON STORE 100)","shop":"convenience"},"name":"ローソンストア100 (LAWSON STORE 100)","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Радуга":{"tags":{"name":"Радуга","shop":"convenience"},"name":"Радуга","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/ローソンストア100":{"tags":{"name":"ローソンストア100","shop":"convenience"},"name":"ローソンストア100","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/เซเว่นอีเลฟเว่น":{"tags":{"name":"เซเว่นอีเลฟเว่น","shop":"convenience"},"name":"เซเว่นอีเลฟเว่น","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Фортуна":{"tags":{"name":"Фортуна","shop":"convenience"},"name":"Фортуна","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Picard":{"tags":{"name":"Picard","shop":"convenience"},"name":"Picard","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Four Square":{"tags":{"name":"Four Square","shop":"convenience"},"name":"Four Square","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Визит":{"tags":{"name":"Визит","shop":"convenience"},"name":"Визит","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Авоська":{"tags":{"name":"Авоська","shop":"convenience"},"name":"Авоська","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Dollar General":{"tags":{"name":"Dollar General","shop":"convenience"},"name":"Dollar General","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Studenac":{"tags":{"name":"Studenac","shop":"convenience"},"name":"Studenac","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Central Convenience Store":{"tags":{"name":"Central Convenience Store","shop":"convenience"},"name":"Central Convenience Store","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/продукты":{"tags":{"name":"продукты","shop":"convenience"},"name":"продукты","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Кулинария":{"tags":{"name":"Кулинария","shop":"convenience"},"name":"Кулинария","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/全家":{"tags":{"name":"全家","shop":"convenience"},"name":"全家","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Мечта":{"tags":{"name":"Мечта","shop":"convenience"},"name":"Мечта","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Epicerie":{"tags":{"name":"Epicerie","shop":"convenience"},"name":"Epicerie","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Кировский":{"tags":{"name":"Кировский","shop":"convenience"},"name":"Кировский","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Food Mart":{"tags":{"name":"Food Mart","shop":"convenience"},"name":"Food Mart","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Delikatesy":{"tags":{"name":"Delikatesy","shop":"convenience"},"name":"Delikatesy","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/ポプラ":{"tags":{"name":"ポプラ","shop":"convenience"},"name":"ポプラ","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Lewiatan":{"tags":{"name":"Lewiatan","shop":"convenience"},"name":"Lewiatan","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Продуктовый магазин":{"tags":{"name":"Продуктовый магазин","shop":"convenience"},"name":"Продуктовый магазин","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Продуктовый":{"tags":{"name":"Продуктовый","shop":"convenience"},"name":"Продуктовый","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/セイコーマート (Seicomart)":{"tags":{"name":"セイコーマート (Seicomart)","shop":"convenience"},"name":"セイコーマート (Seicomart)","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Виктория":{"tags":{"name":"Виктория","shop":"convenience"},"name":"Виктория","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Весна":{"tags":{"name":"Весна","shop":"convenience"},"name":"Весна","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Mini Market Non-Stop":{"tags":{"name":"Mini Market Non-Stop","shop":"convenience"},"name":"Mini Market Non-Stop","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Копеечка":{"tags":{"name":"Копеечка","shop":"convenience"},"name":"Копеечка","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Royal Farms":{"tags":{"name":"Royal Farms","shop":"convenience"},"name":"Royal Farms","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Alfamart":{"tags":{"name":"Alfamart","shop":"convenience"},"name":"Alfamart","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Indomaret":{"tags":{"name":"Indomaret","shop":"convenience"},"name":"Indomaret","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/магазин":{"tags":{"name":"магазин","shop":"convenience"},"name":"магазин","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/全家便利商店":{"tags":{"name":"全家便利商店","shop":"convenience"},"name":"全家便利商店","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Boutique":{"tags":{"name":"Boutique","shop":"convenience"},"name":"Boutique","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/მარკეტი (Market)":{"tags":{"name":"მარკეტი (Market)","shop":"convenience"},"name":"მარკეტი (Market)","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/convenience/Stores":{"tags":{"name":"Stores","shop":"convenience"},"name":"Stores","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/dm":{"tags":{"name":"dm","shop":"chemist"},"name":"dm","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/Müller":{"tags":{"name":"Müller","shop":"chemist"},"name":"Müller","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/Schlecker":{"tags":{"name":"Schlecker","shop":"chemist"},"name":"Schlecker","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/Etos":{"tags":{"name":"Etos","shop":"chemist"},"name":"Etos","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/Bipa":{"tags":{"name":"Bipa","shop":"chemist"},"name":"Bipa","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/Rossmann":{"tags":{"name":"Rossmann","shop":"chemist"},"name":"Rossmann","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/DM Drogeriemarkt":{"tags":{"name":"DM Drogeriemarkt","shop":"chemist"},"name":"DM Drogeriemarkt","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/Ihr Platz":{"tags":{"name":"Ihr Platz","shop":"chemist"},"name":"Ihr Platz","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/Douglas":{"tags":{"name":"Douglas","shop":"chemist"},"name":"Douglas","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/chemist/Kruidvat":{"tags":{"name":"Kruidvat","shop":"chemist"},"name":"Kruidvat","icon":"grocery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/car_repair/Kwik Fit":{"tags":{"name":"Kwik Fit","shop":"car_repair"},"name":"Kwik Fit","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/ATU":{"tags":{"name":"ATU","shop":"car_repair"},"name":"ATU","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Midas":{"tags":{"name":"Midas","shop":"car_repair"},"name":"Midas","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Feu Vert":{"tags":{"name":"Feu Vert","shop":"car_repair"},"name":"Feu Vert","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Norauto":{"tags":{"name":"Norauto","shop":"car_repair"},"name":"Norauto","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Speedy":{"tags":{"name":"Speedy","shop":"car_repair"},"name":"Speedy","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Pit Stop":{"tags":{"name":"Pit Stop","shop":"car_repair"},"name":"Pit Stop","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Jiffy Lube":{"tags":{"name":"Jiffy Lube","shop":"car_repair"},"name":"Jiffy Lube","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Шиномонтаж":{"tags":{"name":"Шиномонтаж","shop":"car_repair"},"name":"Шиномонтаж","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/СТО":{"tags":{"name":"СТО","shop":"car_repair"},"name":"СТО","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/O'Reilly Auto Parts":{"tags":{"name":"O'Reilly Auto Parts","shop":"car_repair"},"name":"O'Reilly Auto Parts","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Carglass":{"tags":{"name":"Carglass","shop":"car_repair"},"name":"Carglass","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/шиномонтаж":{"tags":{"name":"шиномонтаж","shop":"car_repair"},"name":"шиномонтаж","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Euromaster":{"tags":{"name":"Euromaster","shop":"car_repair"},"name":"Euromaster","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Firestone":{"tags":{"name":"Firestone","shop":"car_repair"},"name":"Firestone","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Автосервис":{"tags":{"name":"Автосервис","shop":"car_repair"},"name":"Автосервис","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Advance Auto Parts":{"tags":{"name":"Advance Auto Parts","shop":"car_repair"},"name":"Advance Auto Parts","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/car_repair/Roady":{"tags":{"name":"Roady","shop":"car_repair"},"name":"Roady","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","service/vehicle"],"suggestion":true},"shop/furniture/IKEA":{"tags":{"name":"IKEA","shop":"furniture"},"name":"IKEA","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/furniture/Jysk":{"tags":{"name":"Jysk","shop":"furniture"},"name":"Jysk","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/furniture/Roller":{"tags":{"name":"Roller","shop":"furniture"},"name":"Roller","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/furniture/Dänisches Bettenlager":{"tags":{"name":"Dänisches Bettenlager","shop":"furniture"},"name":"Dänisches Bettenlager","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/furniture/Conforama":{"tags":{"name":"Conforama","shop":"furniture"},"name":"Conforama","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/furniture/Matratzen Concord":{"tags":{"name":"Matratzen Concord","shop":"furniture"},"name":"Matratzen Concord","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/furniture/Мебель":{"tags":{"name":"Мебель","shop":"furniture"},"name":"Мебель","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/furniture/But":{"tags":{"name":"But","shop":"furniture"},"name":"But","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Hornbach":{"tags":{"name":"Hornbach","shop":"doityourself"},"name":"Hornbach","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/B&Q":{"tags":{"name":"B&Q","shop":"doityourself"},"name":"B&Q","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Hubo":{"tags":{"name":"Hubo","shop":"doityourself"},"name":"Hubo","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Mr Bricolage":{"tags":{"name":"Mr Bricolage","shop":"doityourself"},"name":"Mr Bricolage","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Gamma":{"tags":{"name":"Gamma","shop":"doityourself"},"name":"Gamma","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/OBI":{"tags":{"name":"OBI","shop":"doityourself"},"name":"OBI","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Lowes":{"tags":{"name":"Lowes","shop":"doityourself"},"name":"Lowes","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Wickes":{"tags":{"name":"Wickes","shop":"doityourself"},"name":"Wickes","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Hagebau":{"tags":{"name":"Hagebau","shop":"doityourself"},"name":"Hagebau","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Max Bahr":{"tags":{"name":"Max Bahr","shop":"doityourself"},"name":"Max Bahr","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Castorama":{"tags":{"name":"Castorama","shop":"doityourself"},"name":"Castorama","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Rona":{"tags":{"name":"Rona","shop":"doityourself"},"name":"Rona","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Home Depot":{"tags":{"name":"Home Depot","shop":"doityourself"},"name":"Home Depot","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Toom Baumarkt":{"tags":{"name":"Toom Baumarkt","shop":"doityourself"},"name":"Toom Baumarkt","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Homebase":{"tags":{"name":"Homebase","shop":"doityourself"},"name":"Homebase","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Baumax":{"tags":{"name":"Baumax","shop":"doityourself"},"name":"Baumax","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Lagerhaus":{"tags":{"name":"Lagerhaus","shop":"doityourself"},"name":"Lagerhaus","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Bauhaus":{"tags":{"name":"Bauhaus","shop":"doityourself"},"name":"Bauhaus","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Canadian Tire":{"tags":{"name":"Canadian Tire","shop":"doityourself"},"name":"Canadian Tire","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Leroy Merlin":{"tags":{"name":"Leroy Merlin","shop":"doityourself"},"name":"Leroy Merlin","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Hellweg":{"tags":{"name":"Hellweg","shop":"doityourself"},"name":"Hellweg","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Brico":{"tags":{"name":"Brico","shop":"doityourself"},"name":"Brico","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Bricomarché":{"tags":{"name":"Bricomarché","shop":"doityourself"},"name":"Bricomarché","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Toom":{"tags":{"name":"Toom","shop":"doityourself"},"name":"Toom","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Hagebaumarkt":{"tags":{"name":"Hagebaumarkt","shop":"doityourself"},"name":"Hagebaumarkt","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Praktiker":{"tags":{"name":"Praktiker","shop":"doityourself"},"name":"Praktiker","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Menards":{"tags":{"name":"Menards","shop":"doityourself"},"name":"Menards","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Weldom":{"tags":{"name":"Weldom","shop":"doityourself"},"name":"Weldom","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Bunnings Warehouse":{"tags":{"name":"Bunnings Warehouse","shop":"doityourself"},"name":"Bunnings Warehouse","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Ace Hardware":{"tags":{"name":"Ace Hardware","shop":"doityourself"},"name":"Ace Hardware","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Home Hardware":{"tags":{"name":"Home Hardware","shop":"doityourself"},"name":"Home Hardware","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Стройматериалы":{"tags":{"name":"Стройматериалы","shop":"doityourself"},"name":"Стройматериалы","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Bricorama":{"tags":{"name":"Bricorama","shop":"doityourself"},"name":"Bricorama","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/doityourself/Point P":{"tags":{"name":"Point P","shop":"doityourself"},"name":"Point P","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/stationery/Staples":{"tags":{"name":"Staples","shop":"stationery"},"name":"Staples","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/stationery/McPaper":{"tags":{"name":"McPaper","shop":"stationery"},"name":"McPaper","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/stationery/Office Depot":{"tags":{"name":"Office Depot","shop":"stationery"},"name":"Office Depot","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/stationery/Канцтовары":{"tags":{"name":"Канцтовары","shop":"stationery"},"name":"Канцтовары","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/car/Skoda":{"tags":{"name":"Skoda","shop":"car"},"name":"Skoda","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/BMW":{"tags":{"name":"BMW","shop":"car"},"name":"BMW","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Citroen":{"tags":{"name":"Citroen","shop":"car"},"name":"Citroen","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Renault":{"tags":{"name":"Renault","shop":"car"},"name":"Renault","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Mercedes-Benz":{"tags":{"name":"Mercedes-Benz","shop":"car"},"name":"Mercedes-Benz","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Volvo":{"tags":{"name":"Volvo","shop":"car"},"name":"Volvo","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Ford":{"tags":{"name":"Ford","shop":"car"},"name":"Ford","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Volkswagen":{"tags":{"name":"Volkswagen","shop":"car"},"name":"Volkswagen","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Mazda":{"tags":{"name":"Mazda","shop":"car"},"name":"Mazda","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Mitsubishi":{"tags":{"name":"Mitsubishi","shop":"car"},"name":"Mitsubishi","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Fiat":{"tags":{"name":"Fiat","shop":"car"},"name":"Fiat","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Автозапчасти":{"tags":{"name":"Автозапчасти","shop":"car"},"name":"Автозапчасти","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Opel":{"tags":{"name":"Opel","shop":"car"},"name":"Opel","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Audi":{"tags":{"name":"Audi","shop":"car"},"name":"Audi","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Toyota":{"tags":{"name":"Toyota","shop":"car"},"name":"Toyota","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Nissan":{"tags":{"name":"Nissan","shop":"car"},"name":"Nissan","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Suzuki":{"tags":{"name":"Suzuki","shop":"car"},"name":"Suzuki","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Honda":{"tags":{"name":"Honda","shop":"car"},"name":"Honda","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Peugeot":{"tags":{"name":"Peugeot","shop":"car"},"name":"Peugeot","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Hyundai":{"tags":{"name":"Hyundai","shop":"car"},"name":"Hyundai","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Subaru":{"tags":{"name":"Subaru","shop":"car"},"name":"Subaru","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Chevrolet":{"tags":{"name":"Chevrolet","shop":"car"},"name":"Chevrolet","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/car/Автомагазин":{"tags":{"name":"Автомагазин","shop":"car"},"name":"Автомагазин","icon":"car","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","second_hand","service/vehicle"],"suggestion":true},"shop/clothes/Matalan":{"tags":{"name":"Matalan","shop":"clothes"},"name":"Matalan","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/KiK":{"tags":{"name":"KiK","shop":"clothes"},"name":"KiK","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/H&M":{"tags":{"name":"H&M","shop":"clothes"},"name":"H&M","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Urban Outfitters":{"tags":{"name":"Urban Outfitters","shop":"clothes"},"name":"Urban Outfitters","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Vögele":{"tags":{"name":"Vögele","shop":"clothes"},"name":"Vögele","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Zeeman":{"tags":{"name":"Zeeman","shop":"clothes"},"name":"Zeeman","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Takko":{"tags":{"name":"Takko","shop":"clothes"},"name":"Takko","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/C&A":{"tags":{"name":"C&A","shop":"clothes"},"name":"C&A","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Zara":{"tags":{"name":"Zara","shop":"clothes"},"name":"Zara","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Vero Moda":{"tags":{"name":"Vero Moda","shop":"clothes"},"name":"Vero Moda","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/NKD":{"tags":{"name":"NKD","shop":"clothes"},"name":"NKD","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Ernsting's family":{"tags":{"name":"Ernsting's family","shop":"clothes"},"name":"Ernsting's family","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Winners":{"tags":{"name":"Winners","shop":"clothes"},"name":"Winners","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/River Island":{"tags":{"name":"River Island","shop":"clothes"},"name":"River Island","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Next":{"tags":{"name":"Next","shop":"clothes"},"name":"Next","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Gap":{"tags":{"name":"Gap","shop":"clothes"},"name":"Gap","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Adidas":{"tags":{"name":"Adidas","shop":"clothes"},"name":"Adidas","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Mr Price":{"tags":{"name":"Mr Price","shop":"clothes"},"name":"Mr Price","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Pep":{"tags":{"name":"Pep","shop":"clothes"},"name":"Pep","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Edgars":{"tags":{"name":"Edgars","shop":"clothes"},"name":"Edgars","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Ackermans":{"tags":{"name":"Ackermans","shop":"clothes"},"name":"Ackermans","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Truworths":{"tags":{"name":"Truworths","shop":"clothes"},"name":"Truworths","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Ross":{"tags":{"name":"Ross","shop":"clothes"},"name":"Ross","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Burton":{"tags":{"name":"Burton","shop":"clothes"},"name":"Burton","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Dorothy Perkins":{"tags":{"name":"Dorothy Perkins","shop":"clothes"},"name":"Dorothy Perkins","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Lindex":{"tags":{"name":"Lindex","shop":"clothes"},"name":"Lindex","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/s.Oliver":{"tags":{"name":"s.Oliver","shop":"clothes"},"name":"s.Oliver","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Cecil":{"tags":{"name":"Cecil","shop":"clothes"},"name":"Cecil","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Dress Barn":{"tags":{"name":"Dress Barn","shop":"clothes"},"name":"Dress Barn","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Old Navy":{"tags":{"name":"Old Navy","shop":"clothes"},"name":"Old Navy","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Jack & Jones":{"tags":{"name":"Jack & Jones","shop":"clothes"},"name":"Jack & Jones","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Pimkie":{"tags":{"name":"Pimkie","shop":"clothes"},"name":"Pimkie","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Esprit":{"tags":{"name":"Esprit","shop":"clothes"},"name":"Esprit","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Primark":{"tags":{"name":"Primark","shop":"clothes"},"name":"Primark","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Bonita":{"tags":{"name":"Bonita","shop":"clothes"},"name":"Bonita","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Mexx":{"tags":{"name":"Mexx","shop":"clothes"},"name":"Mexx","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Gerry Weber":{"tags":{"name":"Gerry Weber","shop":"clothes"},"name":"Gerry Weber","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Tally Weijl":{"tags":{"name":"Tally Weijl","shop":"clothes"},"name":"Tally Weijl","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Mango":{"tags":{"name":"Mango","shop":"clothes"},"name":"Mango","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/TK Maxx":{"tags":{"name":"TK Maxx","shop":"clothes"},"name":"TK Maxx","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Benetton":{"tags":{"name":"Benetton","shop":"clothes"},"name":"Benetton","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Ulla Popken":{"tags":{"name":"Ulla Popken","shop":"clothes"},"name":"Ulla Popken","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/AWG":{"tags":{"name":"AWG","shop":"clothes"},"name":"AWG","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Tommy Hilfiger":{"tags":{"name":"Tommy Hilfiger","shop":"clothes"},"name":"Tommy Hilfiger","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/New Yorker":{"tags":{"name":"New Yorker","shop":"clothes"},"name":"New Yorker","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Orsay":{"tags":{"name":"Orsay","shop":"clothes"},"name":"Orsay","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Jeans Fritz":{"tags":{"name":"Jeans Fritz","shop":"clothes"},"name":"Jeans Fritz","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Charles Vögele":{"tags":{"name":"Charles Vögele","shop":"clothes"},"name":"Charles Vögele","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/New Look":{"tags":{"name":"New Look","shop":"clothes"},"name":"New Look","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Lacoste":{"tags":{"name":"Lacoste","shop":"clothes"},"name":"Lacoste","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Etam":{"tags":{"name":"Etam","shop":"clothes"},"name":"Etam","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Kiabi":{"tags":{"name":"Kiabi","shop":"clothes"},"name":"Kiabi","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Jack Wolfskin":{"tags":{"name":"Jack Wolfskin","shop":"clothes"},"name":"Jack Wolfskin","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/American Apparel":{"tags":{"name":"American Apparel","shop":"clothes"},"name":"American Apparel","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Men's Wearhouse":{"tags":{"name":"Men's Wearhouse","shop":"clothes"},"name":"Men's Wearhouse","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Intimissimi":{"tags":{"name":"Intimissimi","shop":"clothes"},"name":"Intimissimi","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/United Colors of Benetton":{"tags":{"name":"United Colors of Benetton","shop":"clothes"},"name":"United Colors of Benetton","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Jules":{"tags":{"name":"Jules","shop":"clothes"},"name":"Jules","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Second Hand":{"tags":{"name":"Second Hand","shop":"clothes"},"name":"Second Hand","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/AOKI":{"tags":{"name":"AOKI","shop":"clothes"},"name":"AOKI","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Calzedonia":{"tags":{"name":"Calzedonia","shop":"clothes"},"name":"Calzedonia","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/洋服の青山":{"tags":{"name":"洋服の青山","shop":"clothes"},"name":"洋服の青山","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Levi's":{"tags":{"name":"Levi's","shop":"clothes"},"name":"Levi's","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Celio":{"tags":{"name":"Celio","shop":"clothes"},"name":"Celio","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/TJ Maxx":{"tags":{"name":"TJ Maxx","shop":"clothes"},"name":"TJ Maxx","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Promod":{"tags":{"name":"Promod","shop":"clothes"},"name":"Promod","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Street One":{"tags":{"name":"Street One","shop":"clothes"},"name":"Street One","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/ユニクロ":{"tags":{"name":"ユニクロ","shop":"clothes"},"name":"ユニクロ","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Banana Republic":{"tags":{"name":"Banana Republic","shop":"clothes"},"name":"Banana Republic","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Одежда":{"tags":{"name":"Одежда","shop":"clothes"},"name":"Одежда","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Marshalls":{"tags":{"name":"Marshalls","shop":"clothes"},"name":"Marshalls","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/La Halle":{"tags":{"name":"La Halle","shop":"clothes"},"name":"La Halle","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/Peacocks":{"tags":{"name":"Peacocks","shop":"clothes"},"name":"Peacocks","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/clothes/しまむら":{"tags":{"name":"しまむら","shop":"clothes"},"name":"しまむら","icon":"clothing-store","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/books/Bruna":{"tags":{"name":"Bruna","shop":"books"},"name":"Bruna","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"shop/books/Waterstones":{"tags":{"name":"Waterstones","shop":"books"},"name":"Waterstones","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"shop/books/Libro":{"tags":{"name":"Libro","shop":"books"},"name":"Libro","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"shop/books/Barnes & Noble":{"tags":{"name":"Barnes & Noble","shop":"books"},"name":"Barnes & Noble","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"shop/books/Weltbild":{"tags":{"name":"Weltbild","shop":"books"},"name":"Weltbild","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"shop/books/Thalia":{"tags":{"name":"Thalia","shop":"books"},"name":"Thalia","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"shop/books/Книги":{"tags":{"name":"Книги","shop":"books"},"name":"Книги","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","internet_access","internet_access/fee","internet_access/ssid"],"suggestion":true},"shop/department_store/Debenhams":{"tags":{"name":"Debenhams","shop":"department_store"},"name":"Debenhams","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Karstadt":{"tags":{"name":"Karstadt","shop":"department_store"},"name":"Karstadt","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Kmart":{"tags":{"name":"Kmart","shop":"department_store"},"name":"Kmart","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Target":{"tags":{"name":"Target","shop":"department_store"},"name":"Target","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Galeria Kaufhof":{"tags":{"name":"Galeria Kaufhof","shop":"department_store"},"name":"Galeria Kaufhof","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Marks & Spencer":{"tags":{"name":"Marks & Spencer","shop":"department_store"},"name":"Marks & Spencer","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Big W":{"tags":{"name":"Big W","shop":"department_store"},"name":"Big W","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Woolworth":{"tags":{"name":"Woolworth","shop":"department_store"},"name":"Woolworth","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Универмаг":{"tags":{"name":"Универмаг","shop":"department_store"},"name":"Универмаг","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Sears":{"tags":{"name":"Sears","shop":"department_store"},"name":"Sears","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Kohl's":{"tags":{"name":"Kohl's","shop":"department_store"},"name":"Kohl's","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/Macy's":{"tags":{"name":"Macy's","shop":"department_store"},"name":"Macy's","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/department_store/JCPenney":{"tags":{"name":"JCPenney","shop":"department_store"},"name":"JCPenney","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/alcohol/Alko":{"tags":{"name":"Alko","shop":"alcohol"},"name":"Alko","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/The Beer Store":{"tags":{"name":"The Beer Store","shop":"alcohol"},"name":"The Beer Store","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/Systembolaget":{"tags":{"name":"Systembolaget","shop":"alcohol"},"name":"Systembolaget","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/LCBO":{"tags":{"name":"LCBO","shop":"alcohol"},"name":"LCBO","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/Ароматный мир":{"tags":{"name":"Ароматный мир","shop":"alcohol"},"name":"Ароматный мир","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/Bargain Booze":{"tags":{"name":"Bargain Booze","shop":"alcohol"},"name":"Bargain Booze","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/Nicolas":{"tags":{"name":"Nicolas","shop":"alcohol"},"name":"Nicolas","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/BWS":{"tags":{"name":"BWS","shop":"alcohol"},"name":"BWS","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/Botilleria":{"tags":{"name":"Botilleria","shop":"alcohol"},"name":"Botilleria","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/SAQ":{"tags":{"name":"SAQ","shop":"alcohol"},"name":"SAQ","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/Gall & Gall":{"tags":{"name":"Gall & Gall","shop":"alcohol"},"name":"Gall & Gall","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/alcohol/Живое пиво":{"tags":{"name":"Живое пиво","shop":"alcohol"},"name":"Живое пиво","icon":"alcohol-shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours","drive_through"],"suggestion":true},"shop/bakery/Kamps":{"tags":{"name":"Kamps","shop":"bakery"},"name":"Kamps","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Banette":{"tags":{"name":"Banette","shop":"bakery"},"name":"Banette","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Bäckerei Schmidt":{"tags":{"name":"Bäckerei Schmidt","shop":"bakery"},"name":"Bäckerei Schmidt","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Anker":{"tags":{"name":"Anker","shop":"bakery"},"name":"Anker","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Hofpfisterei":{"tags":{"name":"Hofpfisterei","shop":"bakery"},"name":"Hofpfisterei","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Greggs":{"tags":{"name":"Greggs","shop":"bakery"},"name":"Greggs","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Oebel":{"tags":{"name":"Oebel","shop":"bakery"},"name":"Oebel","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Boulangerie":{"tags":{"name":"Boulangerie","shop":"bakery"},"name":"Boulangerie","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Stadtbäckerei":{"tags":{"name":"Stadtbäckerei","shop":"bakery"},"name":"Stadtbäckerei","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Steinecke":{"tags":{"name":"Steinecke","shop":"bakery"},"name":"Steinecke","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Ihle":{"tags":{"name":"Ihle","shop":"bakery"},"name":"Ihle","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Goldilocks":{"tags":{"name":"Goldilocks","shop":"bakery"},"name":"Goldilocks","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Dat Backhus":{"tags":{"name":"Dat Backhus","shop":"bakery"},"name":"Dat Backhus","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/K&U":{"tags":{"name":"K&U","shop":"bakery"},"name":"K&U","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Der Beck":{"tags":{"name":"Der Beck","shop":"bakery"},"name":"Der Beck","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Thürmann":{"tags":{"name":"Thürmann","shop":"bakery"},"name":"Thürmann","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Backwerk":{"tags":{"name":"Backwerk","shop":"bakery"},"name":"Backwerk","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Schäfer's":{"tags":{"name":"Schäfer's","shop":"bakery"},"name":"Schäfer's","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Panaderia":{"tags":{"name":"Panaderia","shop":"bakery"},"name":"Panaderia","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Goeken backen":{"tags":{"name":"Goeken backen","shop":"bakery"},"name":"Goeken backen","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Stadtbäckerei Junge":{"tags":{"name":"Stadtbäckerei Junge","shop":"bakery"},"name":"Stadtbäckerei Junge","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Boulangerie Patisserie":{"tags":{"name":"Boulangerie Patisserie","shop":"bakery"},"name":"Boulangerie Patisserie","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Paul":{"tags":{"name":"Paul","shop":"bakery"},"name":"Paul","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Хлеб":{"tags":{"name":"Хлеб","shop":"bakery"},"name":"Хлеб","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Пекарня":{"tags":{"name":"Пекарня","shop":"bakery"},"name":"Пекарня","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/bakery/Кулиничи":{"tags":{"name":"Кулиничи","shop":"bakery"},"name":"Кулиничи","icon":"bakery","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/sports/Sports Direct":{"tags":{"name":"Sports Direct","shop":"sports"},"name":"Sports Direct","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/sports/Decathlon":{"tags":{"name":"Decathlon","shop":"sports"},"name":"Decathlon","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/sports/Intersport":{"tags":{"name":"Intersport","shop":"sports"},"name":"Intersport","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/sports/Sports Authority":{"tags":{"name":"Sports Authority","shop":"sports"},"name":"Sports Authority","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/sports/Спортмастер":{"tags":{"name":"Спортмастер","shop":"sports"},"name":"Спортмастер","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/sports/Sport 2000":{"tags":{"name":"Sport 2000","shop":"sports"},"name":"Sport 2000","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/sports/Dick's Sporting Goods":{"tags":{"name":"Dick's Sporting Goods","shop":"sports"},"name":"Dick's Sporting Goods","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/variety_store/Tedi":{"tags":{"name":"Tedi","shop":"variety_store"},"name":"Tedi","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/variety_store/Dollarama":{"tags":{"name":"Dollarama","shop":"variety_store"},"name":"Dollarama","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/variety_store/Family Dollar":{"tags":{"name":"Family Dollar","shop":"variety_store"},"name":"Family Dollar","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/variety_store/Dollar Tree":{"tags":{"name":"Dollar Tree","shop":"variety_store"},"name":"Dollar Tree","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/pet/Fressnapf":{"tags":{"name":"Fressnapf","shop":"pet"},"name":"Fressnapf","icon":"dog-park","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/pet/PetSmart":{"tags":{"name":"PetSmart","shop":"pet"},"name":"PetSmart","icon":"dog-park","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/pet/Das Futterhaus":{"tags":{"name":"Das Futterhaus","shop":"pet"},"name":"Das Futterhaus","icon":"dog-park","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/pet/Pets at Home":{"tags":{"name":"Pets at Home","shop":"pet"},"name":"Pets at Home","icon":"dog-park","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/pet/Petco":{"tags":{"name":"Petco","shop":"pet"},"name":"Petco","icon":"dog-park","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/pet/Зоомагазин":{"tags":{"name":"Зоомагазин","shop":"pet"},"name":"Зоомагазин","icon":"dog-park","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Deichmann":{"tags":{"name":"Deichmann","shop":"shoes"},"name":"Deichmann","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Reno":{"tags":{"name":"Reno","shop":"shoes"},"name":"Reno","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Ecco":{"tags":{"name":"Ecco","shop":"shoes"},"name":"Ecco","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Clarks":{"tags":{"name":"Clarks","shop":"shoes"},"name":"Clarks","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/La Halle aux Chaussures":{"tags":{"name":"La Halle aux Chaussures","shop":"shoes"},"name":"La Halle aux Chaussures","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Brantano":{"tags":{"name":"Brantano","shop":"shoes"},"name":"Brantano","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Geox":{"tags":{"name":"Geox","shop":"shoes"},"name":"Geox","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Salamander":{"tags":{"name":"Salamander","shop":"shoes"},"name":"Salamander","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Обувь":{"tags":{"name":"Обувь","shop":"shoes"},"name":"Обувь","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Payless Shoe Source":{"tags":{"name":"Payless Shoe Source","shop":"shoes"},"name":"Payless Shoe Source","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Famous Footwear":{"tags":{"name":"Famous Footwear","shop":"shoes"},"name":"Famous Footwear","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Quick Schuh":{"tags":{"name":"Quick Schuh","shop":"shoes"},"name":"Quick Schuh","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Shoe Zone":{"tags":{"name":"Shoe Zone","shop":"shoes"},"name":"Shoe Zone","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Foot Locker":{"tags":{"name":"Foot Locker","shop":"shoes"},"name":"Foot Locker","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/Bata":{"tags":{"name":"Bata","shop":"shoes"},"name":"Bata","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/shoes/ЦентрОбувь":{"tags":{"name":"ЦентрОбувь","shop":"shoes"},"name":"ЦентрОбувь","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/toys/La Grande Récré":{"tags":{"name":"La Grande Récré","shop":"toys"},"name":"La Grande Récré","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/toys/Toys R Us":{"tags":{"name":"Toys R Us","shop":"toys"},"name":"Toys R Us","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/toys/Intertoys":{"tags":{"name":"Intertoys","shop":"toys"},"name":"Intertoys","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/toys/Детский мир":{"tags":{"name":"Детский мир","shop":"toys"},"name":"Детский мир","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/toys/Игрушки":{"tags":{"name":"Игрушки","shop":"toys"},"name":"Игрушки","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/travel_agency/Flight Centre":{"tags":{"name":"Flight Centre","shop":"travel_agency"},"name":"Flight Centre","icon":"suitcase","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/travel_agency/Thomas Cook":{"tags":{"name":"Thomas Cook","shop":"travel_agency"},"name":"Thomas Cook","icon":"suitcase","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/jewelry/Bijou Brigitte":{"tags":{"name":"Bijou Brigitte","shop":"jewelry"},"name":"Bijou Brigitte","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/jewelry/Christ":{"tags":{"name":"Christ","shop":"jewelry"},"name":"Christ","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/jewelry/Swarovski":{"tags":{"name":"Swarovski","shop":"jewelry"},"name":"Swarovski","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Fielmann":{"tags":{"name":"Fielmann","shop":"optician"},"name":"Fielmann","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Apollo Optik":{"tags":{"name":"Apollo Optik","shop":"optician"},"name":"Apollo Optik","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Vision Express":{"tags":{"name":"Vision Express","shop":"optician"},"name":"Vision Express","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Оптика":{"tags":{"name":"Оптика","shop":"optician"},"name":"Оптика","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Optic 2000":{"tags":{"name":"Optic 2000","shop":"optician"},"name":"Optic 2000","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Alain Afflelou":{"tags":{"name":"Alain Afflelou","shop":"optician"},"name":"Alain Afflelou","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Specsavers":{"tags":{"name":"Specsavers","shop":"optician"},"name":"Specsavers","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Krys":{"tags":{"name":"Krys","shop":"optician"},"name":"Krys","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/optician/Atol":{"tags":{"name":"Atol","shop":"optician"},"name":"Atol","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/video/Blockbuster":{"tags":{"name":"Blockbuster","shop":"video"},"name":"Blockbuster","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/video/World of Video":{"tags":{"name":"World of Video","shop":"video"},"name":"World of Video","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Билайн":{"tags":{"name":"Билайн","shop":"mobile_phone"},"name":"Билайн","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/ソフトバンクショップ (SoftBank shop)":{"tags":{"name":"ソフトバンクショップ (SoftBank shop)","shop":"mobile_phone"},"name":"ソフトバンクショップ (SoftBank shop)","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Vodafone":{"tags":{"name":"Vodafone","shop":"mobile_phone"},"name":"Vodafone","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/O2":{"tags":{"name":"O2","shop":"mobile_phone"},"name":"O2","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Carphone Warehouse":{"tags":{"name":"Carphone Warehouse","shop":"mobile_phone"},"name":"Carphone Warehouse","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Orange":{"tags":{"name":"Orange","shop":"mobile_phone"},"name":"Orange","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Verizon Wireless":{"tags":{"name":"Verizon Wireless","shop":"mobile_phone"},"name":"Verizon Wireless","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Sprint":{"tags":{"name":"Sprint","shop":"mobile_phone"},"name":"Sprint","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/T-Mobile":{"tags":{"name":"T-Mobile","shop":"mobile_phone"},"name":"T-Mobile","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/МТС":{"tags":{"name":"МТС","shop":"mobile_phone"},"name":"МТС","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Евросеть":{"tags":{"name":"Евросеть","shop":"mobile_phone"},"name":"Евросеть","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Bell":{"tags":{"name":"Bell","shop":"mobile_phone"},"name":"Bell","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/The Phone House":{"tags":{"name":"The Phone House","shop":"mobile_phone"},"name":"The Phone House","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/SFR":{"tags":{"name":"SFR","shop":"mobile_phone"},"name":"SFR","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Связной":{"tags":{"name":"Связной","shop":"mobile_phone"},"name":"Связной","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Мегафон":{"tags":{"name":"Мегафон","shop":"mobile_phone"},"name":"Мегафон","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/AT&T":{"tags":{"name":"AT&T","shop":"mobile_phone"},"name":"AT&T","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/ドコモショップ (docomo shop)":{"tags":{"name":"ドコモショップ (docomo shop)","shop":"mobile_phone"},"name":"ドコモショップ (docomo shop)","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/au":{"tags":{"name":"au","shop":"mobile_phone"},"name":"au","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Movistar":{"tags":{"name":"Movistar","shop":"mobile_phone"},"name":"Movistar","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/mobile_phone/Bitė":{"tags":{"name":"Bitė","shop":"mobile_phone"},"name":"Bitė","icon":"mobile-phone","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/computer/PC World":{"tags":{"name":"PC World","shop":"computer"},"name":"PC World","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/computer/DNS":{"tags":{"name":"DNS","shop":"computer"},"name":"DNS","icon":"shop","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hairdresser/Klier":{"tags":{"name":"Klier","shop":"hairdresser"},"name":"Klier","icon":"hairdresser","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hairdresser/Supercuts":{"tags":{"name":"Supercuts","shop":"hairdresser"},"name":"Supercuts","icon":"hairdresser","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hairdresser/Hairkiller":{"tags":{"name":"Hairkiller","shop":"hairdresser"},"name":"Hairkiller","icon":"hairdresser","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hairdresser/Great Clips":{"tags":{"name":"Great Clips","shop":"hairdresser"},"name":"Great Clips","icon":"hairdresser","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hairdresser/Парикмахерская":{"tags":{"name":"Парикмахерская","shop":"hairdresser"},"name":"Парикмахерская","icon":"hairdresser","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hairdresser/Стиль":{"tags":{"name":"Стиль","shop":"hairdresser"},"name":"Стиль","icon":"hairdresser","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hairdresser/Franck Provost":{"tags":{"name":"Franck Provost","shop":"hairdresser"},"name":"Franck Provost","icon":"hairdresser","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hairdresser/Салон красоты":{"tags":{"name":"Салон красоты","shop":"hairdresser"},"name":"Салон красоты","icon":"hairdresser","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hardware/1000 мелочей":{"tags":{"name":"1000 мелочей","shop":"hardware"},"name":"1000 мелочей","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/hardware/Хозтовары":{"tags":{"name":"Хозтовары","shop":"hardware"},"name":"Хозтовары","icon":"poi-tool","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true},"shop/motorcycle/Yamaha":{"tags":{"name":"Yamaha","shop":"motorcycle"},"name":"Yamaha","icon":"scooter","geometry":["point","area"],"fields":["operator","address","building_area","opening_hours"],"suggestion":true}};
 
 var defaults = {"area":["category-landuse","category-building","category-water-area","category-natural-area","leisure/park","amenity/hospital","amenity/place_of_worship","amenity/cafe","amenity/restaurant","area"],"line":["category-road","category-rail","category-path","category-water-line","category-barrier","category-natural-line","power/line","line"],"point":["category-natural-point","leisure/park","amenity/hospital","amenity/place_of_worship","amenity/cafe","amenity/restaurant","amenity/fast_food","amenity/bar","amenity/bank","shop/supermarket","point"],"vertex":["highway/crosswalk","highway/crossing","railway/level_crossing","highway/traffic_signals","highway/turning_circle","highway/turning_loop","traffic_calming","highway/mini_roundabout","highway/motorway_junction","vertex"],"relation":["category-route","category-restriction","type/boundary","type/multipolygon","type/site","relation"]};
 
 var categories = {"category-barrier":{"icon":"roadblock","geometry":"line","name":"Barrier Features","members":["barrier/fence","barrier/wall","barrier/ditch","barrier/gate","barrier"]},"category-building":{"icon":"building","geometry":"area","name":"Building Features","members":["building","building/house","building/apartments","building/commercial","building/industrial","building/residential"]},"category-golf":{"icon":"golf","geometry":"area","name":"Golf Features","members":["golf/fairway","golf/green","golf/lateral_water_hazard_area","golf/rough","golf/bunker","golf/tee","golf/water_hazard_area"]},"category-landuse":{"icon":"landuse","geometry":"area","name":"Land Use Features","members":["landuse/residential","landuse/industrial","landuse/commercial","landuse/retail","landuse/farmland","landuse/farmyard","landuse/forest","landuse/meadow","landuse/aquaculture","landuse/cemetery","landuse/military"]},"category-natural-area":{"icon":"natural","geometry":"area","name":"Natural Features","members":["natural/water","natural/wood","natural/scrub","natural/wetland","natural/grassland","natural/heath","natural/bare_rock","natural/beach","natural/cave_entrance","natural/glacier"]},"category-natural-line":{"icon":"natural","geometry":"line","name":"Natural Features","members":["natural/coastline","natural/tree_row"]},"category-natural-point":{"icon":"natural","geometry":"point","name":"Natural Features","members":["natural/peak","natural/cliff","natural/beach","natural/cave_entrance"]},"category-path":{"icon":"category-path","geometry":"line","name":"Path Features","members":["footway/crosswalk","footway/sidewalk","highway/steps","highway/path","highway/footway","highway/cycleway","highway/bridleway","highway/pedestrian"]},"category-rail":{"icon":"category-rail","geometry":"line","name":"Rail Features","members":["railway/rail","railway/subway","railway/tram","railway/monorail","railway/disused","railway/abandoned"]},"category-restriction":{"icon":"restriction","geometry":"relation","name":"Restriction Features","members":["type/restriction/no_left_turn","type/restriction/no_right_turn","type/restriction/no_straight_on","type/restriction/no_u_turn","type/restriction/only_left_turn","type/restriction/only_right_turn","type/restriction/only_straight_on","type/restriction"]},"category-road":{"icon":"category-roads","geometry":"line","name":"Road Features","members":["highway/residential","highway/motorway","highway/trunk","highway/primary","highway/secondary","highway/tertiary","highway/living_street","highway/unclassified","highway/service","highway/track","highway/motorway_link","highway/trunk_link","highway/primary_link","highway/secondary_link","highway/tertiary_link","highway/road"]},"category-route":{"icon":"route","geometry":"relation","name":"Route Features","members":["type/route/road","type/route/bicycle","type/route/foot","type/route/hiking","type/route/horse","type/route/bus","type/route/train","type/route/tram","type/route/ferry","type/route/power","type/route/pipeline","type/route/detour","type/route_master","type/route"]},"category-water-area":{"icon":"water","geometry":"area","name":"Water Features","members":["natural/water/lake","natural/water/pond","natural/water/reservoir","natural/water"]},"category-water-line":{"icon":"category-water","geometry":"line","name":"Water Features","members":["waterway/river","waterway/stream","waterway/canal","waterway/ditch","waterway/drain"]}};
 
 
 var defaults = {"area":["category-landuse","category-building","category-water-area","category-natural-area","leisure/park","amenity/hospital","amenity/place_of_worship","amenity/cafe","amenity/restaurant","area"],"line":["category-road","category-rail","category-path","category-water-line","category-barrier","category-natural-line","power/line","line"],"point":["category-natural-point","leisure/park","amenity/hospital","amenity/place_of_worship","amenity/cafe","amenity/restaurant","amenity/fast_food","amenity/bar","amenity/bank","shop/supermarket","point"],"vertex":["highway/crosswalk","highway/crossing","railway/level_crossing","highway/traffic_signals","highway/turning_circle","highway/turning_loop","traffic_calming","highway/mini_roundabout","highway/motorway_junction","vertex"],"relation":["category-route","category-restriction","type/boundary","type/multipolygon","type/site","relation"]};
 
 var categories = {"category-barrier":{"icon":"roadblock","geometry":"line","name":"Barrier Features","members":["barrier/fence","barrier/wall","barrier/ditch","barrier/gate","barrier"]},"category-building":{"icon":"building","geometry":"area","name":"Building Features","members":["building","building/house","building/apartments","building/commercial","building/industrial","building/residential"]},"category-golf":{"icon":"golf","geometry":"area","name":"Golf Features","members":["golf/fairway","golf/green","golf/lateral_water_hazard_area","golf/rough","golf/bunker","golf/tee","golf/water_hazard_area"]},"category-landuse":{"icon":"landuse","geometry":"area","name":"Land Use Features","members":["landuse/residential","landuse/industrial","landuse/commercial","landuse/retail","landuse/farmland","landuse/farmyard","landuse/forest","landuse/meadow","landuse/aquaculture","landuse/cemetery","landuse/military"]},"category-natural-area":{"icon":"natural","geometry":"area","name":"Natural Features","members":["natural/water","natural/wood","natural/scrub","natural/wetland","natural/grassland","natural/heath","natural/bare_rock","natural/beach","natural/cave_entrance","natural/glacier"]},"category-natural-line":{"icon":"natural","geometry":"line","name":"Natural Features","members":["natural/coastline","natural/tree_row"]},"category-natural-point":{"icon":"natural","geometry":"point","name":"Natural Features","members":["natural/peak","natural/cliff","natural/beach","natural/cave_entrance"]},"category-path":{"icon":"category-path","geometry":"line","name":"Path Features","members":["footway/crosswalk","footway/sidewalk","highway/steps","highway/path","highway/footway","highway/cycleway","highway/bridleway","highway/pedestrian"]},"category-rail":{"icon":"category-rail","geometry":"line","name":"Rail Features","members":["railway/rail","railway/subway","railway/tram","railway/monorail","railway/disused","railway/abandoned"]},"category-restriction":{"icon":"restriction","geometry":"relation","name":"Restriction Features","members":["type/restriction/no_left_turn","type/restriction/no_right_turn","type/restriction/no_straight_on","type/restriction/no_u_turn","type/restriction/only_left_turn","type/restriction/only_right_turn","type/restriction/only_straight_on","type/restriction"]},"category-road":{"icon":"category-roads","geometry":"line","name":"Road Features","members":["highway/residential","highway/motorway","highway/trunk","highway/primary","highway/secondary","highway/tertiary","highway/living_street","highway/unclassified","highway/service","highway/track","highway/motorway_link","highway/trunk_link","highway/primary_link","highway/secondary_link","highway/tertiary_link","highway/road"]},"category-route":{"icon":"route","geometry":"relation","name":"Route Features","members":["type/route/road","type/route/bicycle","type/route/foot","type/route/hiking","type/route/horse","type/route/bus","type/route/train","type/route/tram","type/route/ferry","type/route/power","type/route/pipeline","type/route/detour","type/route_master","type/route"]},"category-water-area":{"icon":"water","geometry":"area","name":"Water Features","members":["natural/water/lake","natural/water/pond","natural/water/reservoir","natural/water"]},"category-water-line":{"icon":"category-water","geometry":"line","name":"Water Features","members":["waterway/river","waterway/stream","waterway/canal","waterway/ditch","waterway/drain"]}};
 
-var fields = {"access_simple":{"key":"access","type":"combo","label":"Allowed Access","options":["permissive","private","customers","no"]},"access_toilets":{"key":"access","type":"combo","label":"Access","options":["yes","permissive","private","customers"]},"access":{"keys":["access","foot","motor_vehicle","bicycle","horse"],"reference":{"key":"access"},"type":"access","label":"Allowed Access","placeholder":"Not Specified","strings":{"types":{"access":"All","foot":"Foot","motor_vehicle":"Motor Vehicles","bicycle":"Bicycles","horse":"Horses"},"options":{"yes":{"title":"Allowed","description":"Access permitted by law; a right of way"},"no":{"title":"Prohibited","description":"Access not permitted to the general public"},"permissive":{"title":"Permissive","description":"Access permitted until such time as the owner revokes the permission"},"private":{"title":"Private","description":"Access permitted only with permission of the owner on an individual basis"},"designated":{"title":"Designated","description":"Access permitted according to signs or specific local laws"},"destination":{"title":"Destination","description":"Access permitted only to reach a destination"},"dismount":{"title":"Dismount","description":"Access permitted but rider must dismount"}}}},"address":{"type":"address","keys":["addr:block_number","addr:city","addr:block_number","addr:conscriptionnumber","addr:county","addr:country","addr:county","addr:district","addr:floor","addr:hamlet","addr:housename","addr:housenumber","addr:neighbourhood","addr:place","addr:postcode","addr:province","addr:quarter","addr:state","addr:street","addr:subdistrict","addr:suburb"],"reference":{"key":"addr"},"icon":"address","universal":true,"label":"Address","strings":{"placeholders":{"block_number":"Block Number","block_number!jp":"Block No.","city":"City","city!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town","conscriptionnumber":"123","country":"Country","county":"County","county!jp":"District","district":"District","district!vn":"Arrondissement/Town/District","floor":"Floor","hamlet":"Hamlet","housename":"Housename","housenumber":"123","housenumber!jp":"Building No./Lot No.","neighbourhood":"Neighbourhood","neighbourhood!jp":"Chōme/Aza/Koaza","place":"Place","postcode":"Postcode","province":"Province","province!jp":"Prefecture","quarter":"Quarter","quarter!jp":"Ōaza/Machi","state":"State","street":"Street","subdistrict":"Subdistrict","subdistrict!vn":"Ward/Commune/Townlet","suburb":"Suburb","suburb!jp":"Ward"}}},"admin_level":{"key":"admin_level","type":"number","label":"Admin Level"},"aerialway":{"key":"aerialway","type":"typeCombo","label":"Type"},"aerialway/access":{"key":"aerialway:access","type":"combo","label":"Access","strings":{"options":{"entry":"Entry","exit":"Exit","both":"Both"}}},"aerialway/bubble":{"key":"aerialway:bubble","type":"check","label":"Bubble"},"aerialway/capacity":{"key":"aerialway:capacity","type":"number","label":"Capacity (per hour)","placeholder":"500, 2500, 5000..."},"aerialway/duration":{"key":"aerialway:duration","type":"number","label":"Duration (minutes)","placeholder":"1, 2, 3..."},"aerialway/heating":{"key":"aerialway:heating","type":"check","label":"Heated"},"aerialway/occupancy":{"key":"aerialway:occupancy","type":"number","label":"Occupancy","placeholder":"2, 4, 8..."},"aerialway/summer/access":{"key":"aerialway:summer:access","type":"combo","label":"Access (summer)","strings":{"options":{"entry":"Entry","exit":"Exit","both":"Both"}}},"aeroway":{"key":"aeroway","type":"typeCombo","label":"Type"},"amenity":{"key":"amenity","type":"typeCombo","label":"Type"},"animal_boarding":{"key":"animal_boarding","type":"semiCombo","label":"For Animals"},"animal_breeding":{"key":"animal_breeding","type":"semiCombo","label":"For Animals"},"animal_shelter":{"key":"animal_shelter","type":"semiCombo","label":"For Animals"},"area/highway":{"key":"area:highway","type":"typeCombo","label":"Type"},"artist":{"key":"artist_name","type":"text","label":"Artist"},"artwork_type":{"key":"artwork_type","type":"combo","label":"Type"},"atm":{"key":"atm","type":"check","label":"ATM"},"backrest":{"key":"backrest","type":"check","label":"Backrest"},"barrier":{"key":"barrier","type":"typeCombo","label":"Type"},"bath/open_air":{"key":"bath:open_air","label":"Open Air","type":"check"},"bath/sand_bath":{"key":"bath:sand_bath","label":"Sand Bath","type":"check"},"bath/type":{"key":"bath:type","type":"combo","label":"Specialty","strings":{"options":{"onsen":"Japanese Onsen","foot_bath":"Foot Bath","hot_spring":"Hot Spring"}}},"beauty":{"key":"beauty","type":"combo","label":"Shop Type"},"bench":{"key":"bench","type":"check","label":"Bench"},"bicycle_parking":{"key":"bicycle_parking","type":"combo","label":"Type"},"bin":{"key":"bin","type":"check","label":"Waste Bin"},"blood_components":{"key":"blood:","type":"multiCombo","label":"Blood Components","strings":{"options":{"whole":"whole blood","plasma":"plasma","platelets":"platelets","stemcells":"stem cell samples"}}},"board_type":{"key":"board_type","type":"typeCombo","label":"Type"},"boundary":{"key":"boundary","type":"combo","label":"Type"},"brand":{"key":"brand","type":"text","label":"Brand"},"building_area":{"key":"building","type":"combo","default":"yes","geometry":"area","label":"Building"},"building":{"key":"building","type":"combo","label":"Building"},"bunker_type":{"key":"bunker_type","type":"combo","label":"Type"},"camera/direction":{"key":"camera:direction","type":"number","label":"Direction (Degrees Clockwise)","placeholder":"45, 90, 180, 270"},"camera/mount":{"key":"camera:mount","type":"combo","label":"Camera Mount"},"camera/type":{"key":"camera:type","type":"combo","label":"Camera Type","strings":{"options":{"fixed":"Fixed","panning":"Panning","dome":"Dome"}}},"capacity":{"key":"capacity","type":"number","label":"Capacity","placeholder":"50, 100, 200..."},"cardinal_direction":{"key":"direction","type":"combo","label":"Direction","strings":{"options":{"N":"North","E":"East","S":"South","W":"West","NE":"Northeast","SE":"Southeast","SW":"Southwest","NW":"Northwest","NNE":"North-northeast","ENE":"East-northeast","ESE":"East-southeast","SSE":"South-southeast","SSW":"South-southwest","WSW":"West-southwest","WNW":"West-northwest","NNW":"North-northwest"}}},"castle_type":{"key":"castle_type","type":"combo","label":"Type"},"clock_direction":{"key":"direction","type":"combo","label":"Direction","strings":{"options":{"clockwise":"Clockwise","anticlockwise":"Counterclockwise"}}},"club":{"key":"club","type":"typeCombo","label":"Type"},"collection_times":{"key":"collection_times","type":"text","label":"Collection Times"},"communication_multi":{"key":"communication:","type":"multiCombo","label":"Communication Types"},"construction":{"key":"construction","type":"combo","label":"Type"},"contact/webcam":{"key":"contact:webcam","type":"url","icon":"website","label":"Webcam URL","placeholder":"http://example.com/"},"content":{"key":"content","type":"combo","label":"Contents"},"country":{"key":"country","type":"combo","label":"Country"},"covered":{"key":"covered","type":"check","label":"Covered"},"craft":{"key":"craft","type":"typeCombo","label":"Type"},"crop":{"key":"crop","type":"semiCombo","label":"Crops"},"crossing":{"key":"crossing","type":"combo","label":"Type"},"cuisine":{"key":"cuisine","type":"semiCombo","label":"Cuisines"},"currency_multi":{"key":"currency:","type":"multiCombo","label":"Currency Types"},"cycle_network":{"key":"cycle_network","type":"networkCombo","label":"Network"},"cycleway":{"keys":["cycleway:left","cycleway:right"],"reference":{"key":"cycleway"},"type":"cycleway","label":"Bike Lanes","placeholder":"none","strings":{"types":{"cycleway:left":"Left side","cycleway:right":"Right side"},"options":{"none":{"title":"None","description":"No bike lane"},"lane":{"title":"Standard bike lane","description":"A bike lane separated from auto traffic by a painted line"},"shared_lane":{"title":"Shared bike lane","description":"A bike lane with no separation from auto traffic"},"track":{"title":"Bike track","description":"A bike lane separated from traffic by a physical barrier"},"share_busway":{"title":"Bike lane shared with bus","description":"A bike lane shared with a bus lane"},"opposite_lane":{"title":"Opposite bike lane","description":"A bike lane that travels in the opposite direction of traffic"},"opposite":{"title":"Contraflow bike lane","description":"A bike lane that travels in both directions on a one-way street"}}}},"date":{"key":"date","type":"check","label":"Date"},"delivery":{"key":"delivery","type":"check","label":"Delivery"},"denomination":{"key":"denomination","type":"combo","label":"Denomination"},"denotation":{"key":"denotation","type":"combo","label":"Denotation"},"description":{"key":"description","type":"textarea","label":"Description","universal":true},"diaper":{"key":"diaper","type":"combo","label":"Diaper Changing Available","options":["yes","no","room","1","2","3","4","5"]},"display":{"key":"display","type":"combo","label":"Display","options":["analog","digital","sundial","unorthodox"]},"dock":{"key":"dock","type":"combo","label":"Type"},"drive_through":{"key":"drive_through","type":"check","label":"Drive-Through"},"electrified":{"key":"electrified","type":"combo","label":"Electrification","placeholder":"Contact Line, Electrified Rail...","strings":{"options":{"contact_line":"Contact Line","rail":"Electrified Rail","yes":"Yes (unspecified)","no":"No"}}},"elevation":{"key":"ele","type":"number","icon":"elevation","universal":true,"label":"Elevation"},"email":{"key":"email","type":"email","placeholder":"example@example.com","universal":true,"label":"Email"},"emergency":{"key":"emergency","type":"check","label":"Emergency"},"entrance":{"key":"entrance","type":"typeCombo","label":"Type"},"except":{"key":"except","type":"combo","label":"Exceptions"},"fax":{"key":"fax","type":"tel","label":"Fax","universal":true,"placeholder":"+31 42 123 4567"},"fee":{"key":"fee","type":"check","label":"Fee"},"fence_type":{"key":"fence_type","type":"combo","label":"Type"},"fire_hydrant/position":{"key":"fire_hydrant:position","type":"combo","label":"Position","strings":{"options":{"lane":"Lane","parking_lot":"Parking Lot","sidewalk":"Sidewalk","green":"Green"}}},"fire_hydrant/type":{"key":"fire_hydrant:type","type":"combo","label":"Type","strings":{"options":{"pillar":"Pillar/Aboveground","underground":"Underground","wall":"Wall","pond":"Pond"}}},"fixme":{"key":"fixme","type":"textarea","label":"Fix Me","universal":true},"fuel_multi":{"key":"fuel:","type":"multiCombo","label":"Fuel Types"},"fuel":{"key":"fuel","type":"combo","label":"Fuel"},"gauge":{"key":"gauge","type":"combo","label":"Gauge"},"gender":{"type":"radio","keys":["male","female","unisex"],"label":"Gender","placeholder":"Unknown","strings":{"options":{"male":"Male","female":"Female","unisex":"Unisex"}}},"generator/method":{"key":"generator:method","type":"combo","label":"Method"},"generator/source":{"key":"generator:source","type":"combo","label":"Source"},"generator/type":{"key":"generator:type","type":"combo","label":"Type"},"golf_hole":{"key":"ref","type":"text","label":"Reference","placeholder":"Hole number (1-18)"},"grape_variety":{"key":"grape_variety","type":"semiCombo","label":"Grape Varieties"},"handicap":{"key":"handicap","type":"number","label":"Handicap","placeholder":"1-18"},"handrail":{"key":"handrail","type":"check","label":"Handrail"},"height":{"key":"height","type":"number","label":"Height (Meters)"},"highway":{"key":"highway","type":"typeCombo","label":"Type"},"historic":{"key":"historic","type":"typeCombo","label":"Type"},"historic/civilization":{"key":"historic:civilization","type":"combo","label":"Historic Civilization"},"hoops":{"key":"hoops","type":"number","label":"Hoops","placeholder":"1, 2, 4..."},"iata":{"key":"iata","type":"text","label":"IATA"},"icao":{"key":"icao","type":"text","label":"ICAO"},"incline_steps":{"key":"incline","type":"combo","label":"Incline","strings":{"options":{"up":"Up","down":"Down"}}},"incline":{"key":"incline","type":"combo","label":"Incline"},"indoor":{"key":"indoor","type":"check","label":"Indoor"},"information":{"key":"information","type":"typeCombo","label":"Type"},"inscription":{"key":"inscription","type":"textarea","label":"Inscription"},"internet_access":{"key":"internet_access","type":"combo","label":"Internet Access","strings":{"options":{"yes":"Yes","no":"No","wlan":"Wifi","wired":"Wired","terminal":"Terminal"}}},"internet_access/fee":{"key":"internet_access:fee","type":"check","label":"Internet Access Fee"},"internet_access/ssid":{"key":"internet_access:ssid","type":"text","label":"SSID (Network Name)"},"kerb":{"key":"kerb","type":"combo","label":"Curb Ramp"},"lamp_type":{"key":"lamp_type","type":"combo","label":"Type"},"landuse":{"key":"landuse","type":"typeCombo","label":"Type"},"lanes":{"key":"lanes","type":"number","label":"Lanes","placeholder":"1, 2, 3..."},"layer":{"key":"layer","type":"combo","label":"Layer"},"leaf_cycle_singular":{"key":"leaf_cycle","type":"combo","label":"Leaf Cycle","strings":{"options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous"}}},"leaf_cycle":{"key":"leaf_cycle","type":"combo","label":"Leaf Cycle","strings":{"options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous","mixed":"Mixed"}}},"leaf_type_singular":{"key":"leaf_type","type":"combo","label":"Leaf Type","strings":{"options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","leafless":"Leafless"}}},"leaf_type":{"key":"leaf_type","type":"combo","label":"Leaf Type","strings":{"options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","mixed":"Mixed","leafless":"Leafless"}}},"leisure":{"key":"leisure","type":"typeCombo","label":"Type"},"length":{"key":"length","type":"number","label":"Length (Meters)"},"level":{"key":"level","type":"combo","label":"Level","universal":true},"levels":{"key":"building:levels","type":"number","label":"Levels","placeholder":"2, 4, 6..."},"lit":{"key":"lit","type":"check","label":"Lit"},"location":{"key":"location","type":"combo","label":"Location"},"man_made":{"key":"man_made","type":"typeCombo","label":"Type"},"map_size":{"key":"map_size","type":"typeCombo","label":"Coverage"},"map_type":{"key":"map_type","type":"typeCombo","label":"Type"},"maxheight":{"key":"maxheight","type":"combo","label":"Max Height","placeholder":"4, 4.5, 5, 14'0\", 14'6\", 15'0\"","snake_case":false},"maxspeed":{"key":"maxspeed","type":"maxspeed","label":"Speed Limit","placeholder":"40, 50, 60..."},"maxstay":{"key":"maxstay","type":"combo","label":"Max Stay","options":["15 min","30 min","45 min","1 hr","1.5 hr","2 hr","2.5 hr","3 hr","4 hr","1 day","2 day"],"snake_case":false},"mtb/scale":{"key":"mtb:scale","type":"combo","label":"Mountain Biking Difficulty","placeholder":"0, 1, 2, 3...","strings":{"options":{"0":"0: Solid gravel/packed earth, no obstacles, wide curves","1":"1: Some loose surface, small obstacles, wide curves","2":"2: Much loose surface, large obstacles, easy hairpins","3":"3: Slippery surface, large obstacles, tight hairpins","4":"4: Loose surface or boulders, dangerous hairpins","5":"5: Maximum difficulty, boulder fields, landslides","6":"6: Not rideable except by the very best mountain bikers"}}},"mtb/scale/imba":{"key":"mtb:scale:imba","type":"combo","label":"IMBA Trail Difficulty","placeholder":"Easy, Medium, Difficult...","strings":{"options":{"0":"Easiest (white circle)","1":"Easy (green circle)","2":"Medium (blue square)","3":"Difficult (black diamond)","4":"Extremely Difficult (double black diamond)"}}},"mtb/scale/uphill":{"key":"mtb:scale:uphill","type":"combo","label":"Mountain Biking Uphill Difficulty","placeholder":"0, 1, 2, 3...","strings":{"options":{"0":"0: Avg. incline <10%, gravel/packed earth, no obstacles","1":"1: Avg. incline <15%, gravel/packed earth, few small objects","2":"2: Avg. incline <20%, stable surface, fistsize rocks/roots","3":"3: Avg. incline <25%, variable surface, fistsize rocks/branches","4":"4: Avg. incline <30%, poor condition, big rocks/branches","5":"5: Very steep, bike generally needs to be pushed or carried"}}},"name":{"key":"name","type":"localized","label":"Name","placeholder":"Common name (if any)"},"natural":{"key":"natural","type":"typeCombo","label":"Natural"},"network_bicycle":{"key":"network","type":"combo","label":"Network Type","placeholder":"Local, Regional, National, International","strings":{"options":{"lcn":"Local","rcn":"Regional","ncn":"National","icn":"International"}}},"network_foot":{"key":"network","type":"combo","label":"Network Type","placeholder":"Local, Regional, National, International","strings":{"options":{"lwn":"Local","rwn":"Regional","nwn":"National","iwn":"International"}}},"network_horse":{"key":"network","type":"combo","label":"Network Type","placeholder":"Local, Regional, National, International","strings":{"options":{"lhn":"Local","rhn":"Regional","nhn":"National","ihn":"International"}}},"network_road":{"key":"network","type":"networkCombo","label":"Network"},"network":{"key":"network","type":"text","label":"Network"},"note":{"key":"note","type":"textarea","universal":true,"icon":"note","label":"Note"},"office":{"key":"office","type":"typeCombo","label":"Type"},"oneway_yes":{"key":"oneway","type":"onewayCheck","label":"One Way","strings":{"options":{"undefined":"Assumed to be Yes","yes":"Yes","no":"No"}}},"oneway":{"key":"oneway","type":"onewayCheck","label":"One Way","strings":{"options":{"undefined":"Assumed to be No","yes":"Yes","no":"No"}}},"opening_hours":{"key":"opening_hours","type":"combo","label":"Hours","snake_case":false},"operator":{"key":"operator","type":"text","label":"Operator"},"outdoor_seating":{"key":"outdoor_seating","type":"check","label":"Outdoor Seating"},"par":{"key":"par","type":"number","label":"Par","placeholder":"3, 4, 5..."},"parallel_direction":{"key":"direction","type":"combo","label":"Direction","strings":{"options":{"forward":"Forward","backward":"Backward"}}},"park_ride":{"key":"park_ride","type":"check","label":"Park and Ride"},"parking":{"key":"parking","type":"combo","label":"Type","strings":{"options":{"surface":"Surface","multi-storey":"Multilevel","underground":"Underground","sheds":"Sheds","carports":"Carports","garage_boxes":"Garage Boxes","lane":"Roadside Lane"}}},"payment_multi":{"key":"payment:","type":"multiCombo","label":"Payment Types"},"phone":{"key":"phone","type":"tel","icon":"telephone","universal":true,"label":"Phone","placeholder":"+31 42 123 4567"},"piste/difficulty":{"key":"piste:difficulty","type":"combo","label":"Difficulty","placeholder":"Easy, Intermediate, Advanced...","strings":{"options":{"novice":"Novice (instructional)","easy":"Easy (green circle)","intermediate":"Intermediate (blue square)","advanced":"Advanced (black diamond)","expert":"Expert (double black diamond)","freeride":"Freeride (off-piste)","extreme":"Extreme (climbing equipment required)"}}},"piste/grooming":{"key":"piste:grooming","type":"combo","label":"Grooming","strings":{"options":{"classic":"Classic","mogul":"Mogul","backcountry":"Backcountry","classic+skating":"Classic and Skating","scooter":"Scooter/Snowmobile","skating":"Skating"}}},"piste/type":{"key":"piste:type","type":"typeCombo","label":"Type","strings":{"options":{"downhill":"Downhill","nordic":"Nordic","skitour":"Skitour","sled":"Sled","hike":"Hike","sleigh":"Sleigh","ice_skate":"Ice Skate","snow_park":"Snow Park","playground":"Playground"}}},"place":{"key":"place","type":"typeCombo","label":"Type"},"plant":{"key":"plant","type":"combo","label":"Plant"},"population":{"key":"population","type":"text","label":"Population"},"power_supply":{"key":"power_supply","type":"check","label":"Power Supply"},"power":{"key":"power","type":"typeCombo","label":"Type"},"produce":{"key":"produce","type":"semiCombo","label":"Produce"},"product":{"key":"product","type":"semiCombo","label":"Products"},"railway":{"key":"railway","type":"typeCombo","label":"Type"},"recycling_accepts":{"key":"recycling:","type":"multiCombo","label":"Accepts"},"recycling_type":{"key":"recycling_type","default":"container","type":"combo","label":"Recycling Type","strings":{"options":{"container":"Container","centre":"Recycling Center"}}},"ref":{"key":"ref","type":"text","label":"Reference"},"relation":{"key":"type","type":"combo","label":"Type"},"religion":{"key":"religion","type":"combo","label":"Religion"},"restriction":{"key":"restriction","type":"combo","label":"Type"},"restrictions":{"type":"restrictions","geometry":"vertex","icon":"restrictions","reference":{"rtype":"restriction"},"label":"Turn Restrictions"},"rooms":{"key":"rooms","type":"number","label":"Rooms"},"route_master":{"key":"route_master","type":"combo","label":"Type"},"route":{"key":"route","type":"combo","label":"Type"},"sac_scale":{"key":"sac_scale","type":"combo","label":"Hiking Difficulty","placeholder":"Mountain Hiking, Alpine Hiking...","strings":{"options":{"hiking":"T1: Hiking","mountain_hiking":"T2: Mountain Hiking","demanding_mountain_hiking":"T3: Demanding Mountain Hiking","alpine_hiking":"T4: Alpine Hiking","demanding_alpine_hiking":"T5: Demanding Alpine Hiking","difficult_alpine_hiking":"T6: Difficult Alpine Hiking"}}},"sanitary_dump_station":{"key":"sanitary_dump_station","type":"check","label":"Toilet Disposal"},"seasonal":{"key":"seasonal","type":"check","label":"Seasonal"},"second_hand":{"key":"second_hand","type":"combo","label":"Sells Used","placeholder":"Yes, No, Only","strings":{"options":{"yes":"Yes","no":"No","only":"Only"}}},"service_rail":{"key":"service","type":"combo","label":"Service Type","strings":{"options":{"spur":"Spur","yard":"Yard","siding":"Siding","crossover":"Crossover"}}},"service_times":{"key":"service_times","type":"text","label":"Service Times"},"service":{"key":"service","type":"combo","label":"Type","options":["parking_aisle","driveway","alley","emergency_access","drive-through"]},"service/bicycle":{"key":"service:bicycle:","type":"multiCombo","label":"Services"},"service/vehicle":{"key":"service:vehicle:","type":"multiCombo","label":"Services"},"shelter_type":{"key":"shelter_type","type":"combo","label":"Type"},"shelter":{"key":"shelter","type":"check","label":"Shelter"},"shop":{"key":"shop","type":"typeCombo","label":"Type"},"site":{"key":"site","type":"combo","label":"Type"},"smoking":{"key":"smoking","type":"combo","label":"Smoking","placeholder":"No, Separated, Yes...","strings":{"options":{"no":"No smoking anywhere","separated":"In smoking areas, not physically isolated","isolated":"In smoking areas, physically isolated","outside":"Allowed outside","yes":"Allowed everywhere","dedicated":"Dedicated to smokers (e.g. smokers' club)"}}},"smoothness":{"key":"smoothness","type":"combo","label":"Smoothness","placeholder":"Thin Rollers, Wheels, Off-Road...","strings":{"options":{"excellent":"Thin Rollers: rollerblade, skateboard","good":"Thin Wheels: racing bike","intermediate":"Wheels: city bike, wheelchair, scooter","bad":"Robust Wheels: trekking bike, car, rickshaw","very_bad":"High Clearance: light duty off-road vehicle","horrible":"Off-Road: heavy duty off-road vehicle","very_horrible":"Specialized off-road: tractor, ATV","impassable":"Impassable / No wheeled vehicle"}}},"social_facility_for":{"key":"social_facility:for","type":"combo","label":"People Served"},"social_facility":{"key":"social_facility","type":"combo","label":"Type"},"source":{"key":"source","type":"text","icon":"source","universal":true,"label":"Source"},"sport_ice":{"key":"sport","type":"semiCombo","label":"Sports","options":["skating","hockey","multi","curling","ice_stock"]},"sport_racing_motor":{"key":"sport","type":"semiCombo","label":"Sports","options":["motor","karting","motocross"]},"sport_racing_nonmotor":{"key":"sport","type":"semiCombo","label":"Sports","options":["bmx","cycling","dog_racing","horse_racing","running"]},"sport":{"key":"sport","type":"semiCombo","label":"Sports"},"stars":{"key":"stars","type":"number","label":"Stars"},"start_date":{"key":"start_date","type":"text","universal":true,"label":"Start Date"},"step_count":{"key":"step_count","type":"number","label":"Number of Steps"},"stop":{"key":"stop","type":"combo","label":"Stop Type","strings":{"options":{"all":"All Ways","minor":"Minor Road"}}},"structure":{"type":"structureRadio","keys":["bridge","tunnel","embankment","cutting","ford"],"label":"Structure","placeholder":"Unknown","strings":{"options":{"bridge":"Bridge","tunnel":"Tunnel","embankment":"Embankment","cutting":"Cutting","ford":"Ford"}}},"studio":{"key":"studio","type":"combo","label":"Type"},"substation":{"key":"substation","type":"typeCombo","label":"Type"},"supervised":{"key":"supervised","type":"check","label":"Supervised"},"support":{"key":"support","type":"combo","label":"Support"},"surface":{"key":"surface","type":"combo","label":"Surface"},"surveillance":{"key":"surveillance","type":"combo","label":"Surveillance Kind"},"surveillance/type":{"key":"surveillance:type","type":"combo","label":"Surveillance Type","strings":{"options":{"camera":"Camera","guard":"Guard","ALPR":"Automatic License Plate Reader"}}},"surveillance/zone":{"key":"surveillance:zone","type":"combo","label":"Surveillance Zone"},"tactile_paving":{"key":"tactile_paving","type":"check","label":"Tactile Paving"},"takeaway":{"key":"takeaway","type":"combo","label":"Takeaway","placeholder":"Yes, No, Takeaway Only...","strings":{"options":{"yes":"Yes","no":"No","only":"Takeaway Only"}}},"toilets/disposal":{"key":"toilets:disposal","type":"combo","label":"Disposal","strings":{"options":{"flush":"Flush","pitlatrine":"Pit/Latrine","chemical":"Chemical","bucket":"Bucket"}}},"toll":{"key":"toll","type":"check","label":"Toll"},"tomb":{"key":"tomb","type":"typeCombo","label":"Type"},"tourism":{"key":"tourism","type":"typeCombo","label":"Type"},"tower/construction":{"key":"tower:construction","type":"combo","label":"Construction","placeholder":"Guyed, Lattice, Concealed, ..."},"tower/type":{"key":"tower:type","type":"combo","label":"Type"},"tracktype":{"key":"tracktype","type":"combo","label":"Track Type","placeholder":"Solid, Mostly Solid, Soft...","strings":{"options":{"grade1":"Solid: paved or heavily compacted hardcore surface","grade2":"Mostly Solid: gravel/rock with some soft material mixed in","grade3":"Even mixture of hard and soft materials","grade4":"Mostly Soft: soil/sand/grass with some hard material mixed in","grade5":"Soft: soil/sand/grass"}}},"traffic_calming":{"key":"traffic_calming","type":"typeCombo","label":"Type"},"traffic_signals":{"key":"traffic_signals","type":"combo","label":"Type","default":"signal"},"trail_visibility":{"key":"trail_visibility","type":"combo","label":"Trail Visibility","placeholder":"Excellent, Good, Bad...","strings":{"options":{"excellent":"Excellent: unambiguous path or markers everywhere","good":"Good: markers visible, sometimes require searching","intermediate":"Intermediate: few markers, path mostly visible","bad":"Bad: no markers, path sometimes invisible/pathless","horrible":"Horrible: often pathless, some orientation skills required","no":"No: pathless, excellent orientation skills required"}}},"trees":{"key":"trees","type":"semiCombo","label":"Trees"},"tunnel":{"key":"tunnel","type":"combo","label":"Tunnel"},"vending":{"key":"vending","type":"combo","label":"Type of Goods"},"visibility":{"key":"visibility","type":"combo","label":"Visibility","strings":{"options":{"house":"Up to 5m (16ft)","street":"5 to 20m (16 to 65ft)","area":"Over 20m (65ft)"}}},"wall":{"key":"wall","type":"combo","label":"Type"},"water_point":{"key":"water_point","type":"check","label":"Water Point"},"water":{"key":"water","type":"combo","label":"Type"},"waterway":{"key":"waterway","type":"typeCombo","label":"Type"},"website":{"key":"website","type":"url","icon":"website","placeholder":"http://example.com/","universal":true,"label":"Website"},"wetland":{"key":"wetland","type":"combo","label":"Type"},"wheelchair":{"key":"wheelchair","type":"radio","options":["yes","limited","no"],"icon":"wheelchair","universal":true,"label":"Wheelchair Access"},"width":{"key":"width","type":"number","label":"Width (Meters)"},"wikipedia":{"key":"wikipedia","keys":["wikipedia","wikidata"],"type":"wikipedia","icon":"wikipedia","universal":true,"label":"Wikipedia"}};
+var fields = {"access_simple":{"key":"access","type":"combo","label":"Allowed Access","options":["permissive","private","customers","no"]},"access_toilets":{"key":"access","type":"combo","label":"Access","options":["yes","permissive","private","customers"]},"access":{"keys":["access","foot","motor_vehicle","bicycle","horse"],"reference":{"key":"access"},"type":"access","label":"Allowed Access","placeholder":"Not Specified","strings":{"types":{"access":"All","foot":"Foot","motor_vehicle":"Motor Vehicles","bicycle":"Bicycles","horse":"Horses"},"options":{"yes":{"title":"Allowed","description":"Access permitted by law; a right of way"},"no":{"title":"Prohibited","description":"Access not permitted to the general public"},"permissive":{"title":"Permissive","description":"Access permitted until such time as the owner revokes the permission"},"private":{"title":"Private","description":"Access permitted only with permission of the owner on an individual basis"},"designated":{"title":"Designated","description":"Access permitted according to signs or specific local laws"},"destination":{"title":"Destination","description":"Access permitted only to reach a destination"},"dismount":{"title":"Dismount","description":"Access permitted but rider must dismount"}}}},"address":{"type":"address","keys":["addr:block_number","addr:city","addr:block_number","addr:conscriptionnumber","addr:county","addr:country","addr:county","addr:district","addr:floor","addr:hamlet","addr:housename","addr:housenumber","addr:neighbourhood","addr:place","addr:postcode","addr:province","addr:quarter","addr:state","addr:street","addr:subdistrict","addr:suburb"],"reference":{"key":"addr"},"icon":"address","universal":true,"label":"Address","strings":{"placeholders":{"block_number":"Block Number","block_number!jp":"Block No.","city":"City","city!jp":"City/Town/Village/Tokyo Special Ward","city!vn":"City/Town","conscriptionnumber":"123","country":"Country","county":"County","county!jp":"District","district":"District","district!vn":"Arrondissement/Town/District","floor":"Floor","hamlet":"Hamlet","housename":"Housename","housenumber":"123","housenumber!jp":"Building No./Lot No.","neighbourhood":"Neighbourhood","neighbourhood!jp":"Chōme/Aza/Koaza","place":"Place","postcode":"Postcode","province":"Province","province!jp":"Prefecture","quarter":"Quarter","quarter!jp":"Ōaza/Machi","state":"State","street":"Street","subdistrict":"Subdistrict","subdistrict!vn":"Ward/Commune/Townlet","suburb":"Suburb","suburb!jp":"Ward"}}},"admin_level":{"key":"admin_level","type":"number","label":"Admin Level"},"aerialway":{"key":"aerialway","type":"typeCombo","label":"Type"},"aerialway/access":{"key":"aerialway:access","type":"combo","label":"Access","strings":{"options":{"entry":"Entry","exit":"Exit","both":"Both"}}},"aerialway/bubble":{"key":"aerialway:bubble","type":"check","label":"Bubble"},"aerialway/capacity":{"key":"aerialway:capacity","type":"number","label":"Capacity (per hour)","placeholder":"500, 2500, 5000..."},"aerialway/duration":{"key":"aerialway:duration","type":"number","label":"Duration (minutes)","placeholder":"1, 2, 3..."},"aerialway/heating":{"key":"aerialway:heating","type":"check","label":"Heated"},"aerialway/occupancy":{"key":"aerialway:occupancy","type":"number","label":"Occupancy","placeholder":"2, 4, 8..."},"aerialway/summer/access":{"key":"aerialway:summer:access","type":"combo","label":"Access (summer)","strings":{"options":{"entry":"Entry","exit":"Exit","both":"Both"}}},"aeroway":{"key":"aeroway","type":"typeCombo","label":"Type"},"amenity":{"key":"amenity","type":"typeCombo","label":"Type"},"animal_boarding":{"key":"animal_boarding","type":"semiCombo","label":"For Animals"},"animal_breeding":{"key":"animal_breeding","type":"semiCombo","label":"For Animals"},"animal_shelter":{"key":"animal_shelter","type":"semiCombo","label":"For Animals"},"area/highway":{"key":"area:highway","type":"typeCombo","label":"Type"},"artist":{"key":"artist_name","type":"text","label":"Artist"},"artwork_type":{"key":"artwork_type","type":"combo","label":"Type"},"atm":{"key":"atm","type":"check","label":"ATM"},"backrest":{"key":"backrest","type":"check","label":"Backrest"},"barrier":{"key":"barrier","type":"typeCombo","label":"Type"},"bath/open_air":{"key":"bath:open_air","label":"Open Air","type":"check"},"bath/sand_bath":{"key":"bath:sand_bath","label":"Sand Bath","type":"check"},"bath/type":{"key":"bath:type","type":"combo","label":"Specialty","strings":{"options":{"onsen":"Japanese Onsen","foot_bath":"Foot Bath","hot_spring":"Hot Spring"}}},"beauty":{"key":"beauty","type":"combo","label":"Shop Type"},"bench":{"key":"bench","type":"check","label":"Bench"},"bicycle_parking":{"key":"bicycle_parking","type":"combo","label":"Type"},"bin":{"key":"bin","type":"check","label":"Waste Bin"},"blood_components":{"key":"blood:","type":"multiCombo","label":"Blood Components","strings":{"options":{"whole":"whole blood","plasma":"plasma","platelets":"platelets","stemcells":"stem cell samples"}}},"board_type":{"key":"board_type","type":"typeCombo","label":"Type"},"boundary":{"key":"boundary","type":"combo","label":"Type"},"brand":{"key":"brand","type":"text","label":"Brand"},"building_area":{"key":"building","type":"combo","default":"yes","geometry":"area","label":"Building"},"building":{"key":"building","type":"combo","label":"Building"},"bunker_type":{"key":"bunker_type","type":"combo","label":"Type"},"camera/direction":{"key":"camera:direction","type":"number","label":"Direction (Degrees Clockwise)","placeholder":"45, 90, 180, 270"},"camera/mount":{"key":"camera:mount","type":"combo","label":"Camera Mount"},"camera/type":{"key":"camera:type","type":"combo","label":"Camera Type","strings":{"options":{"fixed":"Fixed","panning":"Panning","dome":"Dome"}}},"capacity":{"key":"capacity","type":"number","label":"Capacity","placeholder":"50, 100, 200..."},"cardinal_direction":{"key":"direction","type":"combo","label":"Direction","strings":{"options":{"N":"North","E":"East","S":"South","W":"West","NE":"Northeast","SE":"Southeast","SW":"Southwest","NW":"Northwest","NNE":"North-northeast","ENE":"East-northeast","ESE":"East-southeast","SSE":"South-southeast","SSW":"South-southwest","WSW":"West-southwest","WNW":"West-northwest","NNW":"North-northwest"}}},"castle_type":{"key":"castle_type","type":"combo","label":"Type"},"clock_direction":{"key":"direction","type":"combo","label":"Direction","strings":{"options":{"clockwise":"Clockwise","anticlockwise":"Counterclockwise"}}},"club":{"key":"club","type":"typeCombo","label":"Type"},"collection_times":{"key":"collection_times","type":"text","label":"Collection Times"},"communication_multi":{"key":"communication:","type":"multiCombo","label":"Communication Types"},"construction":{"key":"construction","type":"combo","label":"Type"},"contact/webcam":{"key":"contact:webcam","type":"url","icon":"website","label":"Webcam URL","placeholder":"http://example.com/"},"content":{"key":"content","type":"combo","label":"Contents"},"country":{"key":"country","type":"combo","label":"Country"},"covered":{"key":"covered","type":"check","label":"Covered"},"craft":{"key":"craft","type":"typeCombo","label":"Type"},"crop":{"key":"crop","type":"semiCombo","label":"Crops"},"crossing":{"key":"crossing","type":"combo","label":"Type"},"cuisine":{"key":"cuisine","type":"semiCombo","label":"Cuisines"},"currency_multi":{"key":"currency:","type":"multiCombo","label":"Currency Types"},"cycle_network":{"key":"cycle_network","type":"networkCombo","label":"Network"},"cycleway":{"keys":["cycleway:left","cycleway:right"],"reference":{"key":"cycleway"},"type":"cycleway","label":"Bike Lanes","placeholder":"none","strings":{"types":{"cycleway:left":"Left side","cycleway:right":"Right side"},"options":{"none":{"title":"None","description":"No bike lane"},"lane":{"title":"Standard bike lane","description":"A bike lane separated from auto traffic by a painted line"},"shared_lane":{"title":"Shared bike lane","description":"A bike lane with no separation from auto traffic"},"track":{"title":"Bike track","description":"A bike lane separated from traffic by a physical barrier"},"share_busway":{"title":"Bike lane shared with bus","description":"A bike lane shared with a bus lane"},"opposite_lane":{"title":"Opposite bike lane","description":"A bike lane that travels in the opposite direction of traffic"},"opposite":{"title":"Contraflow bike lane","description":"A bike lane that travels in both directions on a one-way street"}}}},"date":{"key":"date","type":"check","label":"Date"},"delivery":{"key":"delivery","type":"check","label":"Delivery"},"denomination":{"key":"denomination","type":"combo","label":"Denomination"},"denotation":{"key":"denotation","type":"combo","label":"Denotation"},"description":{"key":"description","type":"textarea","label":"Description","universal":true},"diaper":{"key":"diaper","type":"combo","label":"Diaper Changing Available","options":["yes","no","room","1","2","3","4","5"]},"display":{"key":"display","type":"combo","label":"Display","options":["analog","digital","sundial","unorthodox"]},"dock":{"key":"dock","type":"combo","label":"Type"},"drive_through":{"key":"drive_through","type":"check","label":"Drive-Through"},"electrified":{"key":"electrified","type":"combo","label":"Electrification","placeholder":"Contact Line, Electrified Rail...","strings":{"options":{"contact_line":"Contact Line","rail":"Electrified Rail","yes":"Yes (unspecified)","no":"No"}}},"elevation":{"key":"ele","type":"number","icon":"elevation","universal":true,"label":"Elevation"},"email":{"key":"email","type":"email","placeholder":"example@example.com","universal":true,"label":"Email"},"emergency":{"key":"emergency","type":"check","label":"Emergency"},"entrance":{"key":"entrance","type":"typeCombo","label":"Type"},"except":{"key":"except","type":"combo","label":"Exceptions"},"fax":{"key":"fax","type":"tel","label":"Fax","universal":true,"placeholder":"+31 42 123 4567"},"fee":{"key":"fee","type":"check","label":"Fee"},"fence_type":{"key":"fence_type","type":"combo","label":"Type"},"fire_hydrant/position":{"key":"fire_hydrant:position","type":"combo","label":"Position","strings":{"options":{"lane":"Lane","parking_lot":"Parking Lot","sidewalk":"Sidewalk","green":"Green"}}},"fire_hydrant/type":{"key":"fire_hydrant:type","type":"combo","label":"Type","strings":{"options":{"pillar":"Pillar/Aboveground","underground":"Underground","wall":"Wall","pond":"Pond"}}},"fixme":{"key":"fixme","type":"textarea","label":"Fix Me","universal":true},"fuel_multi":{"key":"fuel:","type":"multiCombo","label":"Fuel Types"},"fuel":{"key":"fuel","type":"combo","label":"Fuel"},"gauge":{"key":"gauge","type":"combo","label":"Gauge"},"gender":{"type":"radio","keys":["male","female","unisex"],"label":"Gender","placeholder":"Unknown","strings":{"options":{"male":"Male","female":"Female","unisex":"Unisex"}}},"generator/method":{"key":"generator:method","type":"combo","label":"Method"},"generator/source":{"key":"generator:source","type":"combo","label":"Source"},"generator/type":{"key":"generator:type","type":"combo","label":"Type"},"golf_hole":{"key":"ref","type":"text","label":"Reference","placeholder":"Hole number (1-18)"},"grape_variety":{"key":"grape_variety","type":"semiCombo","label":"Grape Varieties"},"handicap":{"key":"handicap","type":"number","label":"Handicap","placeholder":"1-18"},"handrail":{"key":"handrail","type":"check","label":"Handrail"},"height":{"key":"height","type":"number","label":"Height (Meters)"},"highway":{"key":"highway","type":"typeCombo","label":"Type"},"historic":{"key":"historic","type":"typeCombo","label":"Type"},"historic/civilization":{"key":"historic:civilization","type":"combo","label":"Historic Civilization"},"hoops":{"key":"hoops","type":"number","label":"Hoops","placeholder":"1, 2, 4..."},"iata":{"key":"iata","type":"text","label":"IATA"},"icao":{"key":"icao","type":"text","label":"ICAO"},"incline_steps":{"key":"incline","type":"combo","label":"Incline","strings":{"options":{"up":"Up","down":"Down"}}},"incline":{"key":"incline","type":"combo","label":"Incline"},"indoor":{"key":"indoor","type":"check","label":"Indoor"},"information":{"key":"information","type":"typeCombo","label":"Type"},"inscription":{"key":"inscription","type":"textarea","label":"Inscription"},"internet_access":{"key":"internet_access","type":"combo","label":"Internet Access","strings":{"options":{"yes":"Yes","no":"No","wlan":"Wifi","wired":"Wired","terminal":"Terminal"}}},"internet_access/fee":{"key":"internet_access:fee","type":"check","label":"Internet Access Fee"},"internet_access/ssid":{"key":"internet_access:ssid","type":"text","label":"SSID (Network Name)"},"kerb":{"key":"kerb","type":"combo","label":"Curb"},"lamp_type":{"key":"lamp_type","type":"combo","label":"Type"},"landuse":{"key":"landuse","type":"typeCombo","label":"Type"},"lanes":{"key":"lanes","type":"number","label":"Lanes","placeholder":"1, 2, 3..."},"layer":{"key":"layer","type":"combo","label":"Layer"},"leaf_cycle_singular":{"key":"leaf_cycle","type":"combo","label":"Leaf Cycle","strings":{"options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous"}}},"leaf_cycle":{"key":"leaf_cycle","type":"combo","label":"Leaf Cycle","strings":{"options":{"evergreen":"Evergreen","deciduous":"Deciduous","semi_evergreen":"Semi-Evergreen","semi_deciduous":"Semi-Deciduous","mixed":"Mixed"}}},"leaf_type_singular":{"key":"leaf_type","type":"combo","label":"Leaf Type","strings":{"options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","leafless":"Leafless"}}},"leaf_type":{"key":"leaf_type","type":"combo","label":"Leaf Type","strings":{"options":{"broadleaved":"Broadleaved","needleleaved":"Needleleaved","mixed":"Mixed","leafless":"Leafless"}}},"leisure":{"key":"leisure","type":"typeCombo","label":"Type"},"length":{"key":"length","type":"number","label":"Length (Meters)"},"level":{"key":"level","type":"combo","label":"Level","universal":true},"levels":{"key":"building:levels","type":"number","label":"Levels","placeholder":"2, 4, 6..."},"lit":{"key":"lit","type":"check","label":"Lit"},"location":{"key":"location","type":"combo","label":"Location"},"man_made":{"key":"man_made","type":"typeCombo","label":"Type"},"map_size":{"key":"map_size","type":"typeCombo","label":"Coverage"},"map_type":{"key":"map_type","type":"typeCombo","label":"Type"},"maxheight":{"key":"maxheight","type":"combo","label":"Max Height","placeholder":"4, 4.5, 5, 14'0\", 14'6\", 15'0\"","snake_case":false},"maxspeed":{"key":"maxspeed","type":"maxspeed","label":"Speed Limit","placeholder":"40, 50, 60..."},"maxstay":{"key":"maxstay","type":"combo","label":"Max Stay","options":["15 min","30 min","45 min","1 hr","1.5 hr","2 hr","2.5 hr","3 hr","4 hr","1 day","2 day"],"snake_case":false},"maxweight":{"key":"maxweight","type":"combo","label":"Max Weight","snake_case":false},"mtb/scale":{"key":"mtb:scale","type":"combo","label":"Mountain Biking Difficulty","placeholder":"0, 1, 2, 3...","strings":{"options":{"0":"0: Solid gravel/packed earth, no obstacles, wide curves","1":"1: Some loose surface, small obstacles, wide curves","2":"2: Much loose surface, large obstacles, easy hairpins","3":"3: Slippery surface, large obstacles, tight hairpins","4":"4: Loose surface or boulders, dangerous hairpins","5":"5: Maximum difficulty, boulder fields, landslides","6":"6: Not rideable except by the very best mountain bikers"}}},"mtb/scale/imba":{"key":"mtb:scale:imba","type":"combo","label":"IMBA Trail Difficulty","placeholder":"Easy, Medium, Difficult...","strings":{"options":{"0":"Easiest (white circle)","1":"Easy (green circle)","2":"Medium (blue square)","3":"Difficult (black diamond)","4":"Extremely Difficult (double black diamond)"}}},"mtb/scale/uphill":{"key":"mtb:scale:uphill","type":"combo","label":"Mountain Biking Uphill Difficulty","placeholder":"0, 1, 2, 3...","strings":{"options":{"0":"0: Avg. incline <10%, gravel/packed earth, no obstacles","1":"1: Avg. incline <15%, gravel/packed earth, few small objects","2":"2: Avg. incline <20%, stable surface, fistsize rocks/roots","3":"3: Avg. incline <25%, variable surface, fistsize rocks/branches","4":"4: Avg. incline <30%, poor condition, big rocks/branches","5":"5: Very steep, bike generally needs to be pushed or carried"}}},"name":{"key":"name","type":"localized","label":"Name","placeholder":"Common name (if any)"},"natural":{"key":"natural","type":"typeCombo","label":"Natural"},"network_bicycle":{"key":"network","type":"combo","label":"Network Type","placeholder":"Local, Regional, National, International","strings":{"options":{"lcn":"Local","rcn":"Regional","ncn":"National","icn":"International"}}},"network_foot":{"key":"network","type":"combo","label":"Network Type","placeholder":"Local, Regional, National, International","strings":{"options":{"lwn":"Local","rwn":"Regional","nwn":"National","iwn":"International"}}},"network_horse":{"key":"network","type":"combo","label":"Network Type","placeholder":"Local, Regional, National, International","strings":{"options":{"lhn":"Local","rhn":"Regional","nhn":"National","ihn":"International"}}},"network_road":{"key":"network","type":"networkCombo","label":"Network"},"network":{"key":"network","type":"text","label":"Network"},"note":{"key":"note","type":"textarea","universal":true,"icon":"note","label":"Note"},"office":{"key":"office","type":"typeCombo","label":"Type"},"oneway_yes":{"key":"oneway","type":"onewayCheck","label":"One Way","strings":{"options":{"undefined":"Assumed to be Yes","yes":"Yes","no":"No"}}},"oneway":{"key":"oneway","type":"onewayCheck","label":"One Way","strings":{"options":{"undefined":"Assumed to be No","yes":"Yes","no":"No"}}},"opening_hours":{"key":"opening_hours","type":"combo","label":"Hours","snake_case":false},"operator":{"key":"operator","type":"text","label":"Operator"},"outdoor_seating":{"key":"outdoor_seating","type":"check","label":"Outdoor Seating"},"par":{"key":"par","type":"number","label":"Par","placeholder":"3, 4, 5..."},"parallel_direction":{"key":"direction","type":"combo","label":"Direction","strings":{"options":{"forward":"Forward","backward":"Backward"}}},"park_ride":{"key":"park_ride","type":"check","label":"Park and Ride"},"parking":{"key":"parking","type":"combo","label":"Type","strings":{"options":{"surface":"Surface","multi-storey":"Multilevel","underground":"Underground","sheds":"Sheds","carports":"Carports","garage_boxes":"Garage Boxes","lane":"Roadside Lane"}}},"payment_multi":{"key":"payment:","type":"multiCombo","label":"Payment Types"},"phone":{"key":"phone","type":"tel","icon":"telephone","universal":true,"label":"Phone","placeholder":"+31 42 123 4567"},"piste/difficulty":{"key":"piste:difficulty","type":"combo","label":"Difficulty","placeholder":"Easy, Intermediate, Advanced...","strings":{"options":{"novice":"Novice (instructional)","easy":"Easy (green circle)","intermediate":"Intermediate (blue square)","advanced":"Advanced (black diamond)","expert":"Expert (double black diamond)","freeride":"Freeride (off-piste)","extreme":"Extreme (climbing equipment required)"}}},"piste/grooming":{"key":"piste:grooming","type":"combo","label":"Grooming","strings":{"options":{"classic":"Classic","mogul":"Mogul","backcountry":"Backcountry","classic+skating":"Classic and Skating","scooter":"Scooter/Snowmobile","skating":"Skating"}}},"piste/type":{"key":"piste:type","type":"typeCombo","label":"Type","strings":{"options":{"downhill":"Downhill","nordic":"Nordic","skitour":"Skitour","sled":"Sled","hike":"Hike","sleigh":"Sleigh","ice_skate":"Ice Skate","snow_park":"Snow Park","playground":"Playground"}}},"place":{"key":"place","type":"typeCombo","label":"Type"},"plant":{"key":"plant","type":"combo","label":"Plant"},"population":{"key":"population","type":"text","label":"Population"},"power_supply":{"key":"power_supply","type":"check","label":"Power Supply"},"power":{"key":"power","type":"typeCombo","label":"Type"},"produce":{"key":"produce","type":"semiCombo","label":"Produce"},"product":{"key":"product","type":"semiCombo","label":"Products"},"railway":{"key":"railway","type":"typeCombo","label":"Type"},"recycling_accepts":{"key":"recycling:","type":"multiCombo","label":"Accepts"},"recycling_type":{"key":"recycling_type","default":"container","type":"combo","label":"Recycling Type","strings":{"options":{"container":"Container","centre":"Recycling Center"}}},"ref":{"key":"ref","type":"text","label":"Reference"},"relation":{"key":"type","type":"combo","label":"Type"},"religion":{"key":"religion","type":"combo","label":"Religion"},"restriction":{"key":"restriction","type":"combo","label":"Type"},"restrictions":{"type":"restrictions","geometry":"vertex","icon":"restrictions","reference":{"rtype":"restriction"},"label":"Turn Restrictions"},"rooms":{"key":"rooms","type":"number","label":"Rooms"},"route_master":{"key":"route_master","type":"combo","label":"Type"},"route":{"key":"route","type":"combo","label":"Type"},"sac_scale":{"key":"sac_scale","type":"combo","label":"Hiking Difficulty","placeholder":"Mountain Hiking, Alpine Hiking...","strings":{"options":{"hiking":"T1: Hiking","mountain_hiking":"T2: Mountain Hiking","demanding_mountain_hiking":"T3: Demanding Mountain Hiking","alpine_hiking":"T4: Alpine Hiking","demanding_alpine_hiking":"T5: Demanding Alpine Hiking","difficult_alpine_hiking":"T6: Difficult Alpine Hiking"}}},"sanitary_dump_station":{"key":"sanitary_dump_station","type":"check","label":"Toilet Disposal"},"seasonal":{"key":"seasonal","type":"check","label":"Seasonal"},"second_hand":{"key":"second_hand","type":"combo","label":"Sells Used","placeholder":"Yes, No, Only","strings":{"options":{"yes":"Yes","no":"No","only":"Only"}}},"service_rail":{"key":"service","type":"combo","label":"Service Type","strings":{"options":{"spur":"Spur","yard":"Yard","siding":"Siding","crossover":"Crossover"}}},"service_times":{"key":"service_times","type":"text","label":"Service Times"},"service":{"key":"service","type":"combo","label":"Type","options":["parking_aisle","driveway","alley","emergency_access","drive-through"]},"service/bicycle":{"key":"service:bicycle:","type":"multiCombo","label":"Services"},"service/vehicle":{"key":"service:vehicle:","type":"multiCombo","label":"Services"},"shelter_type":{"key":"shelter_type","type":"combo","label":"Type"},"shelter":{"key":"shelter","type":"check","label":"Shelter"},"shop":{"key":"shop","type":"typeCombo","label":"Type"},"site":{"key":"site","type":"combo","label":"Type"},"smoking":{"key":"smoking","type":"combo","label":"Smoking","placeholder":"No, Separated, Yes...","strings":{"options":{"no":"No smoking anywhere","separated":"In smoking areas, not physically isolated","isolated":"In smoking areas, physically isolated","outside":"Allowed outside","yes":"Allowed everywhere","dedicated":"Dedicated to smokers (e.g. smokers' club)"}}},"smoothness":{"key":"smoothness","type":"combo","label":"Smoothness","placeholder":"Thin Rollers, Wheels, Off-Road...","strings":{"options":{"excellent":"Thin Rollers: rollerblade, skateboard","good":"Thin Wheels: racing bike","intermediate":"Wheels: city bike, wheelchair, scooter","bad":"Robust Wheels: trekking bike, car, rickshaw","very_bad":"High Clearance: light duty off-road vehicle","horrible":"Off-Road: heavy duty off-road vehicle","very_horrible":"Specialized off-road: tractor, ATV","impassable":"Impassable / No wheeled vehicle"}}},"social_facility_for":{"key":"social_facility:for","type":"combo","label":"People Served"},"social_facility":{"key":"social_facility","type":"combo","label":"Type"},"source":{"key":"source","type":"text","icon":"source","universal":true,"label":"Source"},"sport_ice":{"key":"sport","type":"semiCombo","label":"Sports","options":["skating","hockey","multi","curling","ice_stock"]},"sport_racing_motor":{"key":"sport","type":"semiCombo","label":"Sports","options":["motor","karting","motocross"]},"sport_racing_nonmotor":{"key":"sport","type":"semiCombo","label":"Sports","options":["bmx","cycling","dog_racing","horse_racing","running"]},"sport":{"key":"sport","type":"semiCombo","label":"Sports"},"stars":{"key":"stars","type":"number","label":"Stars"},"start_date":{"key":"start_date","type":"text","universal":true,"label":"Start Date"},"step_count":{"key":"step_count","type":"number","label":"Number of Steps"},"stop":{"key":"stop","type":"combo","label":"Stop Type","strings":{"options":{"all":"All Ways","minor":"Minor Road"}}},"structure":{"type":"structureRadio","keys":["bridge","tunnel","embankment","cutting","ford"],"label":"Structure","placeholder":"Unknown","strings":{"options":{"bridge":"Bridge","tunnel":"Tunnel","embankment":"Embankment","cutting":"Cutting","ford":"Ford"}}},"studio":{"key":"studio","type":"combo","label":"Type"},"substation":{"key":"substation","type":"typeCombo","label":"Type"},"supervised":{"key":"supervised","type":"check","label":"Supervised"},"support":{"key":"support","type":"combo","label":"Support"},"surface":{"key":"surface","type":"combo","label":"Surface"},"surveillance":{"key":"surveillance","type":"combo","label":"Surveillance Kind"},"surveillance/type":{"key":"surveillance:type","type":"combo","label":"Surveillance Type","strings":{"options":{"camera":"Camera","guard":"Guard","ALPR":"Automatic License Plate Reader"}}},"surveillance/zone":{"key":"surveillance:zone","type":"combo","label":"Surveillance Zone"},"tactile_paving":{"key":"tactile_paving","type":"check","label":"Tactile Paving"},"takeaway":{"key":"takeaway","type":"combo","label":"Takeaway","placeholder":"Yes, No, Takeaway Only...","strings":{"options":{"yes":"Yes","no":"No","only":"Takeaway Only"}}},"toilets/disposal":{"key":"toilets:disposal","type":"combo","label":"Disposal","strings":{"options":{"flush":"Flush","pitlatrine":"Pit/Latrine","chemical":"Chemical","bucket":"Bucket"}}},"toll":{"key":"toll","type":"check","label":"Toll"},"tomb":{"key":"tomb","type":"typeCombo","label":"Type"},"tourism":{"key":"tourism","type":"typeCombo","label":"Type"},"tower/construction":{"key":"tower:construction","type":"combo","label":"Construction","placeholder":"Guyed, Lattice, Concealed, ..."},"tower/type":{"key":"tower:type","type":"combo","label":"Type"},"tracktype":{"key":"tracktype","type":"combo","label":"Track Type","placeholder":"Solid, Mostly Solid, Soft...","strings":{"options":{"grade1":"Solid: paved or heavily compacted hardcore surface","grade2":"Mostly Solid: gravel/rock with some soft material mixed in","grade3":"Even mixture of hard and soft materials","grade4":"Mostly Soft: soil/sand/grass with some hard material mixed in","grade5":"Soft: soil/sand/grass"}}},"traffic_calming":{"key":"traffic_calming","type":"typeCombo","label":"Type"},"traffic_signals":{"key":"traffic_signals","type":"combo","label":"Type","default":"signal"},"trail_visibility":{"key":"trail_visibility","type":"combo","label":"Trail Visibility","placeholder":"Excellent, Good, Bad...","strings":{"options":{"excellent":"Excellent: unambiguous path or markers everywhere","good":"Good: markers visible, sometimes require searching","intermediate":"Intermediate: few markers, path mostly visible","bad":"Bad: no markers, path sometimes invisible/pathless","horrible":"Horrible: often pathless, some orientation skills required","no":"No: pathless, excellent orientation skills required"}}},"trees":{"key":"trees","type":"semiCombo","label":"Trees"},"tunnel":{"key":"tunnel","type":"combo","label":"Tunnel"},"vending":{"key":"vending","type":"combo","label":"Type of Goods"},"visibility":{"key":"visibility","type":"combo","label":"Visibility","strings":{"options":{"house":"Up to 5m (16ft)","street":"5 to 20m (16 to 65ft)","area":"Over 20m (65ft)"}}},"wall":{"key":"wall","type":"combo","label":"Type"},"water_point":{"key":"water_point","type":"check","label":"Water Point"},"water":{"key":"water","type":"combo","label":"Type"},"waterway":{"key":"waterway","type":"typeCombo","label":"Type"},"website":{"key":"website","type":"url","icon":"website","placeholder":"http://example.com/","universal":true,"label":"Website"},"wetland":{"key":"wetland","type":"combo","label":"Type"},"wheelchair":{"key":"wheelchair","type":"radio","options":["yes","limited","no"],"icon":"wheelchair","universal":true,"label":"Wheelchair Access"},"width":{"key":"width","type":"number","label":"Width (Meters)"},"wikipedia":{"key":"wikipedia","keys":["wikipedia","wikidata"],"type":"wikipedia","icon":"wikipedia","universal":true,"label":"Wikipedia"}};
 
 var all = ["aerialway","airfield","airport","alcohol-shop","america-football","amusement-park","aquarium","art-gallery","attraction","bakery","bank","bar","barrier","baseball","basketball","bbq","beer","bicycle","bicycle-share","blood-bank","buddhism","building","building-alt1","bus","cafe","campsite","car","castle","cemetery","cinema","circle","circle-stroked","city","clothing-store","college","commercial","cricket","cross","dam","danger","defibrillator","dentist","doctor","dog-park","drinking-water","embassy","emergency-phone","entrance","entrance-alt1","farm","fast-food","fence","ferry","fire-station","florist","fuel","gaming","garden","garden-center","gift","golf","grocery","hairdresser","harbor","heart","heliport","home","horse-riding","hospital","ice-cream","industry","information","karaoke","landmark","landuse","laundry","library","lighthouse","lodging","logging","marker","marker-stroked","mobile-phone","monument","mountain","museum","music","natural","park","park-alt1","parking","parking-garage","pharmacy","picnic-site","pitch","place-of-worship","playground","police","post","prison","rail","rail-light","rail-metro","ranger-station","recycling","religious-christian","religious-jewish","religious-muslim","residential-community","restaurant","roadblock","rocket","school","scooter","shelter","shop","skiing","slaughterhouse","snowmobile","soccer","square","square-stroked","stadium","star","star-stroked","suitcase","sushi","swimming","teahouse","telephone","tennis","theatre","toilet","town","town-hall","triangle","triangle-stroked","veterinary","village","volcano","warehouse","waste-basket","water","wetland","wheelchair","zoo"];
 var all$1 = {
 
 var all = ["aerialway","airfield","airport","alcohol-shop","america-football","amusement-park","aquarium","art-gallery","attraction","bakery","bank","bar","barrier","baseball","basketball","bbq","beer","bicycle","bicycle-share","blood-bank","buddhism","building","building-alt1","bus","cafe","campsite","car","castle","cemetery","cinema","circle","circle-stroked","city","clothing-store","college","commercial","cricket","cross","dam","danger","defibrillator","dentist","doctor","dog-park","drinking-water","embassy","emergency-phone","entrance","entrance-alt1","farm","fast-food","fence","ferry","fire-station","florist","fuel","gaming","garden","garden-center","gift","golf","grocery","hairdresser","harbor","heart","heliport","home","horse-riding","hospital","ice-cream","industry","information","karaoke","landmark","landuse","laundry","library","lighthouse","lodging","logging","marker","marker-stroked","mobile-phone","monument","mountain","museum","music","natural","park","park-alt1","parking","parking-garage","pharmacy","picnic-site","pitch","place-of-worship","playground","police","post","prison","rail","rail-light","rail-metro","ranger-station","recycling","religious-christian","religious-jewish","religious-muslim","residential-community","restaurant","roadblock","rocket","school","scooter","shelter","shop","skiing","slaughterhouse","snowmobile","soccer","square","square-stroked","stadium","star","star-stroked","suitcase","sushi","swimming","teahouse","telephone","tennis","theatre","toilet","town","town-hall","triangle","triangle-stroked","veterinary","village","volcano","warehouse","waste-basket","water","wetland","wheelchair","zoo"];
 var all$1 = {
@@ -19270,7 +19272,7 @@ lodash.extend(geoExtent$$1.prototype, {
 
 });
 
 
 });
 
-var version = "4.8.0";
+var version = "4.9.1";
 
 var ascending = function(a, b) {
   return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
 
 var ascending = function(a, b) {
   return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
@@ -19832,15 +19834,15 @@ var left = 4;
 var epsilon = 1e-6;
 
 function translateX(x) {
 var epsilon = 1e-6;
 
 function translateX(x) {
-  return "translate(" + x + ",0)";
+  return "translate(" + (x + 0.5) + ",0)";
 }
 
 function translateY(y) {
 }
 
 function translateY(y) {
-  return "translate(0," + y + ")";
+  return "translate(0," + (y + 0.5) + ")";
 }
 
 function center(scale) {
 }
 
 function center(scale) {
-  var offset = scale.bandwidth() / 2;
+  var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.
   if (scale.round()) offset = Math.round(offset);
   return function(d) {
     return scale(d) + offset;
   if (scale.round()) offset = Math.round(offset);
   return function(d) {
     return scale(d) + offset;
@@ -19859,7 +19861,7 @@ function axis(orient, scale) {
       tickSizeOuter = 6,
       tickPadding = 3,
       k = orient === top || orient === left ? -1 : 1,
       tickSizeOuter = 6,
       tickPadding = 3,
       k = orient === top || orient === left ? -1 : 1,
-      x, y = orient === left || orient === right ? (x = "x", "y") : (x = "y", "x"),
+      x = orient === left || orient === right ? "x" : "y",
       transform = orient === top || orient === bottom ? translateX : translateY;
 
   function axis(context) {
       transform = orient === top || orient === bottom ? translateX : translateY;
 
   function axis(context) {
@@ -19886,14 +19888,11 @@ function axis(orient, scale) {
 
     line = line.merge(tickEnter.append("line")
         .attr("stroke", "#000")
 
     line = line.merge(tickEnter.append("line")
         .attr("stroke", "#000")
-        .attr(x + "2", k * tickSizeInner)
-        .attr(y + "1", 0.5)
-        .attr(y + "2", 0.5));
+        .attr(x + "2", k * tickSizeInner));
 
     text = text.merge(tickEnter.append("text")
         .attr("fill", "#000")
         .attr(x, k * spacing)
 
     text = text.merge(tickEnter.append("text")
         .attr("fill", "#000")
         .attr(x, k * spacing)
-        .attr(y, 0.5)
         .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
 
     if (context !== selection) {
         .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
 
     if (context !== selection) {
@@ -20512,9 +20511,9 @@ var selection_exit = function() {
   return new Selection(this._exit || this._groups.map(sparse), this._parents);
 };
 
   return new Selection(this._exit || this._groups.map(sparse), this._parents);
 };
 
-var selection_merge = function(selection) {
+var selection_merge = function(selection$$1) {
 
 
-  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
+  for (var groups0 = this._groups, groups1 = selection$$1._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
     for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
       if (node = group0[i] || group1[i]) {
         merge[i] = node;
     for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
       if (node = group0[i] || group1[i]) {
         merge[i] = node;
@@ -20668,7 +20667,7 @@ var selection_attr = function(name, value) {
       : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
 };
 
       : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
 };
 
-var window$1 = function(node) {
+var defaultView = function(node) {
   return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
       || (node.document && node) // node is a Window
       || node.defaultView; // node is a Document
   return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
       || (node.document && node) // node is a Window
       || node.defaultView; // node is a Document
@@ -20695,17 +20694,19 @@ function styleFunction(name, value, priority) {
 }
 
 var selection_style = function(name, value, priority) {
 }
 
 var selection_style = function(name, value, priority) {
-  var node;
   return arguments.length > 1
       ? this.each((value == null
             ? styleRemove : typeof value === "function"
             ? styleFunction
             : styleConstant)(name, value, priority == null ? "" : priority))
   return arguments.length > 1
       ? this.each((value == null
             ? styleRemove : typeof value === "function"
             ? styleFunction
             : styleConstant)(name, value, priority == null ? "" : priority))
-      : window$1(node = this.node())
-          .getComputedStyle(node, null)
-          .getPropertyValue(name);
+      : styleValue(this.node(), name);
 };
 
 };
 
+function styleValue(node, name) {
+  return node.style.getPropertyValue(name)
+      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);
+}
+
 function propertyRemove(name) {
   return function() {
     delete this[name];
 function propertyRemove(name) {
   return function() {
     delete this[name];
@@ -20914,10 +20915,10 @@ var selection_datum = function(value) {
 };
 
 function dispatchEvent(node, type, params) {
 };
 
 function dispatchEvent(node, type, params) {
-  var window = window$1(node),
+  var window = defaultView(node),
       event = window.CustomEvent;
 
       event = window.CustomEvent;
 
-  if (event) {
+  if (typeof event === "function") {
     event = new event(type, params);
   } else {
     event = window.document.createEvent("Event");
     event = new event(type, params);
   } else {
     event = window.document.createEvent("Event");
@@ -21103,11 +21104,14 @@ var drag = function() {
       gestures = {},
       listeners = dispatch("start", "drag", "end"),
       active = 0,
       gestures = {},
       listeners = dispatch("start", "drag", "end"),
       active = 0,
+      mousedownx,
+      mousedowny,
       mousemoving,
       mousemoving,
-      touchending;
+      touchending,
+      clickDistance2 = 0;
 
 
-  function drag(selection$$1) {
-    selection$$1
+  function drag(selection) {
+    selection
         .on("mousedown.drag", mousedowned)
         .on("touchstart.drag", touchstarted)
         .on("touchmove.drag", touchmoved)
         .on("mousedown.drag", mousedowned)
         .on("touchstart.drag", touchstarted)
         .on("touchmove.drag", touchmoved)
@@ -21123,12 +21127,17 @@ var drag = function() {
     dragDisable(event.view);
     nopropagation();
     mousemoving = false;
     dragDisable(event.view);
     nopropagation();
     mousemoving = false;
+    mousedownx = event.clientX;
+    mousedowny = event.clientY;
     gesture("start");
   }
 
   function mousemoved() {
     noevent();
     gesture("start");
   }
 
   function mousemoved() {
     noevent();
-    mousemoving = true;
+    if (!mousemoving) {
+      var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;
+      mousemoving = dx * dx + dy * dy > clickDistance2;
+    }
     gestures.mouse("drag");
   }
 
     gestures.mouse("drag");
   }
 
@@ -21218,6 +21227,10 @@ var drag = function() {
     return value === listeners ? drag : value;
   };
 
     return value === listeners ? drag : value;
   };
 
+  drag.clickDistance = function(_) {
+    return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);
+  };
+
   return drag;
 };
 
   return drag;
 };
 
@@ -21966,7 +21979,7 @@ var interpolateValue = function(a, b) {
       : b instanceof color ? interpolateRgb
       : b instanceof Date ? date
       : Array.isArray(b) ? array$1
       : b instanceof color ? interpolateRgb
       : b instanceof Date ? date
       : Array.isArray(b) ? array$1
-      : isNaN(b) ? object
+      : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object
       : reinterpolate)(a, b);
 };
 
       : reinterpolate)(a, b);
 };
 
@@ -22526,7 +22539,7 @@ function create(node, id, self) {
 
 var interrupt = function(node, name) {
   var schedules = node.__transition,
 
 var interrupt = function(node, name) {
   var schedules = node.__transition,
-      schedule,
+      schedule$$1,
       active,
       empty = true,
       i;
       active,
       empty = true,
       i;
@@ -22536,11 +22549,11 @@ var interrupt = function(node, name) {
   name = name == null ? null : name + "";
 
   for (i in schedules) {
   name = name == null ? null : name + "";
 
   for (i in schedules) {
-    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }
-    active = schedule.state > STARTING && schedule.state < ENDING;
-    schedule.state = ENDED;
-    schedule.timer.stop();
-    if (active) schedule.on.call("interrupt", node, node.__data__, schedule.index, schedule.group);
+    if ((schedule$$1 = schedules[i]).name !== name) { empty = false; continue; }
+    active = schedule$$1.state > STARTING && schedule$$1.state < ENDING;
+    schedule$$1.state = ENDED;
+    schedule$$1.timer.stop();
+    if (active) schedule$$1.on.call("interrupt", node, node.__data__, schedule$$1.index, schedule$$1.group);
     delete schedules[i];
   }
 
     delete schedules[i];
   }
 
@@ -22556,8 +22569,8 @@ var selection_interrupt = function(name) {
 function tweenRemove(id, name) {
   var tween0, tween1;
   return function() {
 function tweenRemove(id, name) {
   var tween0, tween1;
   return function() {
-    var schedule = set$1(this, id),
-        tween = schedule.tween;
+    var schedule$$1 = set$1(this, id),
+        tween = schedule$$1.tween;
 
     // If this node shared tween with the previous node,
     // just assign the updated shared tween and we’re done!
 
     // If this node shared tween with the previous node,
     // just assign the updated shared tween and we’re done!
@@ -22573,7 +22586,7 @@ function tweenRemove(id, name) {
       }
     }
 
       }
     }
 
-    schedule.tween = tween1;
+    schedule$$1.tween = tween1;
   };
 }
 
   };
 }
 
@@ -22581,8 +22594,8 @@ function tweenFunction(id, name, value) {
   var tween0, tween1;
   if (typeof value !== "function") throw new Error;
   return function() {
   var tween0, tween1;
   if (typeof value !== "function") throw new Error;
   return function() {
-    var schedule = set$1(this, id),
-        tween = schedule.tween;
+    var schedule$$1 = set$1(this, id),
+        tween = schedule$$1.tween;
 
     // If this node shared tween with the previous node,
     // just assign the updated shared tween and we’re done!
 
     // If this node shared tween with the previous node,
     // just assign the updated shared tween and we’re done!
@@ -22598,7 +22611,7 @@ function tweenFunction(id, name, value) {
       if (i === n) tween1.push(t);
     }
 
       if (i === n) tween1.push(t);
     }
 
-    schedule.tween = tween1;
+    schedule$$1.tween = tween1;
   };
 }
 
   };
 }
 
@@ -22624,8 +22637,8 @@ function tweenValue(transition, name, value) {
   var id = transition._id;
 
   transition.each(function() {
   var id = transition._id;
 
   transition.each(function() {
-    var schedule = set$1(this, id);
-    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
+    var schedule$$1 = set$1(this, id);
+    (schedule$$1.value || (schedule$$1.value = {}))[name] = value.apply(this, arguments);
   });
 
   return function(node) {
   });
 
   return function(node) {
@@ -22633,7 +22646,7 @@ function tweenValue(transition, name, value) {
   };
 }
 
   };
 }
 
-var interpolate$$1 = function(a, b) {
+var interpolate = function(a, b) {
   var c;
   return (typeof b === "number" ? reinterpolate
       : b instanceof color ? interpolateRgb
   var c;
   return (typeof b === "number" ? reinterpolate
       : b instanceof color ? interpolateRgb
@@ -22704,7 +22717,7 @@ function attrFunctionNS$1(fullname, interpolate$$1, value) {
 }
 
 var transition_attr = function(name, value) {
 }
 
 var transition_attr = function(name, value) {
-  var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate$$1;
+  var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate;
   return this.attrTween(name, typeof value === "function"
       ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value))
       : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)
   return this.attrTween(name, typeof value === "function"
       ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value))
       : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)
@@ -22815,10 +22828,10 @@ var transition_filter = function(match) {
   return new Transition(subgroups, this._parents, this._name, this._id);
 };
 
   return new Transition(subgroups, this._parents, this._name, this._id);
 };
 
-var transition_merge = function(transition) {
-  if (transition._id !== this._id) throw new Error;
+var transition_merge = function(transition$$1) {
+  if (transition$$1._id !== this._id) throw new Error;
 
 
-  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
+  for (var groups0 = this._groups, groups1 = transition$$1._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
     for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
       if (node = group0[i] || group1[i]) {
         merge[i] = node;
     for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
       if (node = group0[i] || group1[i]) {
         merge[i] = node;
@@ -22844,15 +22857,15 @@ function start(name) {
 function onFunction(id, name, listener) {
   var on0, on1, sit = start(name) ? init : set$1;
   return function() {
 function onFunction(id, name, listener) {
   var on0, on1, sit = start(name) ? init : set$1;
   return function() {
-    var schedule = sit(this, id),
-        on = schedule.on;
+    var schedule$$1 = sit(this, id),
+        on = schedule$$1.on;
 
     // If this node shared a dispatch with the previous node,
     // just assign the updated shared dispatch and we’re done!
     // Otherwise, copy-on-write.
     if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
 
 
     // If this node shared a dispatch with the previous node,
     // just assign the updated shared dispatch and we’re done!
     // Otherwise, copy-on-write.
     if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
 
-    schedule.on = on1;
+    schedule$$1.on = on1;
   };
 }
 
   };
 }
 
@@ -22924,17 +22937,16 @@ var transition_selection = function() {
   return new Selection$1(this._groups, this._parents);
 };
 
   return new Selection$1(this._groups, this._parents);
 };
 
-function styleRemove$1(name, interpolate$$2) {
+function styleRemove$1(name, interpolate$$1) {
   var value00,
       value10,
       interpolate0;
   return function() {
   var value00,
       value10,
       interpolate0;
   return function() {
-    var style = window$1(this).getComputedStyle(this, null),
-        value0 = style.getPropertyValue(name),
-        value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
+    var value0 = styleValue(this, name),
+        value1 = (this.style.removeProperty(name), styleValue(this, name));
     return value0 === value1 ? null
         : value0 === value00 && value1 === value10 ? interpolate0
     return value0 === value1 ? null
         : value0 === value00 && value1 === value10 ? interpolate0
-        : interpolate0 = interpolate$$2(value00 = value0, value10 = value1);
+        : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
   };
 }
 
   };
 }
 
@@ -22944,34 +22956,33 @@ function styleRemoveEnd(name) {
   };
 }
 
   };
 }
 
-function styleConstant$1(name, interpolate$$2, value1) {
+function styleConstant$1(name, interpolate$$1, value1) {
   var value00,
       interpolate0;
   return function() {
   var value00,
       interpolate0;
   return function() {
-    var value0 = window$1(this).getComputedStyle(this, null).getPropertyValue(name);
+    var value0 = styleValue(this, name);
     return value0 === value1 ? null
         : value0 === value00 ? interpolate0
     return value0 === value1 ? null
         : value0 === value00 ? interpolate0
-        : interpolate0 = interpolate$$2(value00 = value0, value1);
+        : interpolate0 = interpolate$$1(value00 = value0, value1);
   };
 }
 
   };
 }
 
-function styleFunction$1(name, interpolate$$2, value) {
+function styleFunction$1(name, interpolate$$1, value) {
   var value00,
       value10,
       interpolate0;
   return function() {
   var value00,
       value10,
       interpolate0;
   return function() {
-    var style = window$1(this).getComputedStyle(this, null),
-        value0 = style.getPropertyValue(name),
+    var value0 = styleValue(this, name),
         value1 = value(this);
         value1 = value(this);
-    if (value1 == null) value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
+    if (value1 == null) value1 = (this.style.removeProperty(name), styleValue(this, name));
     return value0 === value1 ? null
         : value0 === value00 && value1 === value10 ? interpolate0
     return value0 === value1 ? null
         : value0 === value00 && value1 === value10 ? interpolate0
-        : interpolate0 = interpolate$$2(value00 = value0, value10 = value1);
+        : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
   };
 }
 
 var transition_style = function(name, value, priority) {
   };
 }
 
 var transition_style = function(name, value, priority) {
-  var i = (name += "") === "transform" ? interpolateTransformCss : interpolate$$1;
+  var i = (name += "") === "transform" ? interpolateTransformCss : interpolate;
   return value == null ? this
           .styleTween(name, styleRemove$1(name, i))
           .on("end.style." + name, styleRemoveEnd(name))
   return value == null ? this
           .styleTween(name, styleRemove$1(name, i))
           .on("end.style." + name, styleRemoveEnd(name))
@@ -23342,13 +23353,13 @@ var root$1 = [null];
 
 var active = function(node, name) {
   var schedules = node.__transition,
 
 var active = function(node, name) {
   var schedules = node.__transition,
-      schedule,
+      schedule$$1,
       i;
 
   if (schedules) {
     name = name == null ? null : name + "";
     for (i in schedules) {
       i;
 
   if (schedules) {
     name = name == null ? null : name + "";
     for (i in schedules) {
-      if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {
+      if ((schedule$$1 = schedules[i]).state > SCHEDULED && schedule$$1.name === name) {
         return new Transition([[node]], root$1, name, +i);
       }
     }
         return new Transition([[node]], root$1, name, +i);
       }
     }
@@ -23557,7 +23568,7 @@ function brush$1(dim) {
         .on("mousedown.brush touchstart.brush", started);
   }
 
         .on("mousedown.brush touchstart.brush", started);
   }
 
-  brush.move = function(group, selection$$1) {
+  brush.move = function(group, selection) {
     if (group.selection) {
       group
           .on("start.brush", function() { emitter(this, arguments).beforestart().start(); })
     if (group.selection) {
       group
           .on("start.brush", function() { emitter(this, arguments).beforestart().start(); })
@@ -23567,7 +23578,7 @@ function brush$1(dim) {
                 state = that.__brush,
                 emit = emitter(that, arguments),
                 selection0 = state.selection,
                 state = that.__brush,
                 emit = emitter(that, arguments),
                 selection0 = state.selection,
-                selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(this, arguments) : selection$$1, state.extent),
+                selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent),
                 i = interpolateValue(selection0, selection1);
 
             function tween(t) {
                 i = interpolateValue(selection0, selection1);
 
             function tween(t) {
@@ -23584,7 +23595,7 @@ function brush$1(dim) {
             var that = this,
                 args = arguments,
                 state = that.__brush,
             var that = this,
                 args = arguments,
                 state = that.__brush,
-                selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(that, args) : selection$$1, state.extent),
+                selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent),
                 emit = emitter(that, args).beforestart();
 
             interrupt(that);
                 emit = emitter(that, args).beforestart();
 
             interrupt(that);
@@ -23597,22 +23608,22 @@ function brush$1(dim) {
 
   function redraw() {
     var group = select(this),
 
   function redraw() {
     var group = select(this),
-        selection$$1 = local$$1(this).selection;
+        selection = local$$1(this).selection;
 
 
-    if (selection$$1) {
+    if (selection) {
       group.selectAll(".selection")
           .style("display", null)
       group.selectAll(".selection")
           .style("display", null)
-          .attr("x", selection$$1[0][0])
-          .attr("y", selection$$1[0][1])
-          .attr("width", selection$$1[1][0] - selection$$1[0][0])
-          .attr("height", selection$$1[1][1] - selection$$1[0][1]);
+          .attr("x", selection[0][0])
+          .attr("y", selection[0][1])
+          .attr("width", selection[1][0] - selection[0][0])
+          .attr("height", selection[1][1] - selection[0][1]);
 
       group.selectAll(".handle")
           .style("display", null)
 
       group.selectAll(".handle")
           .style("display", null)
-          .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection$$1[1][0] - handleSize / 2 : selection$$1[0][0] - handleSize / 2; })
-          .attr("y", function(d) { return d.type[0] === "s" ? selection$$1[1][1] - handleSize / 2 : selection$$1[0][1] - handleSize / 2; })
-          .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection$$1[1][0] - selection$$1[0][0] + handleSize : handleSize; })
-          .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection$$1[1][1] - selection$$1[0][1] + handleSize : handleSize; });
+          .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })
+          .attr("y", function(d) { return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })
+          .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })
+          .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });
     }
 
     else {
     }
 
     else {
@@ -23670,7 +23681,7 @@ function brush$1(dim) {
         signY = dim === X ? null : signsY[type],
         state = local$$1(that),
         extent = state.extent,
         signY = dim === X ? null : signsY[type],
         state = local$$1(that),
         extent = state.extent,
-        selection$$1 = state.selection,
+        selection = state.selection,
         W = extent[0][0], w0, w1,
         N = extent[0][1], n0, n1,
         E = extent[1][0], e0, e1,
         W = extent[0][0], w0, w1,
         N = extent[0][1], n0, n1,
         E = extent[1][0], e0, e1,
@@ -23686,15 +23697,15 @@ function brush$1(dim) {
         emit = emitter(that, arguments).beforestart();
 
     if (type === "overlay") {
         emit = emitter(that, arguments).beforestart();
 
     if (type === "overlay") {
-      state.selection = selection$$1 = [
+      state.selection = selection = [
         [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],
         [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]
       ];
     } else {
         [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],
         [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]
       ];
     } else {
-      w0 = selection$$1[0][0];
-      n0 = selection$$1[0][1];
-      e0 = selection$$1[1][0];
-      s0 = selection$$1[1][1];
+      w0 = selection[0][0];
+      n0 = selection[0][1];
+      e0 = selection[1][0];
+      s0 = selection[1][1];
     }
 
     w1 = w0;
     }
 
     w1 = w0;
@@ -23780,14 +23791,14 @@ function brush$1(dim) {
         if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]);
       }
 
         if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]);
       }
 
-      if (state.selection) selection$$1 = state.selection; // May be set by brush.move!
-      if (lockX) w1 = selection$$1[0][0], e1 = selection$$1[1][0];
-      if (lockY) n1 = selection$$1[0][1], s1 = selection$$1[1][1];
+      if (state.selection) selection = state.selection; // May be set by brush.move!
+      if (lockX) w1 = selection[0][0], e1 = selection[1][0];
+      if (lockY) n1 = selection[0][1], s1 = selection[1][1];
 
 
-      if (selection$$1[0][0] !== w1
-          || selection$$1[0][1] !== n1
-          || selection$$1[1][0] !== e1
-          || selection$$1[1][1] !== s1) {
+      if (selection[0][0] !== w1
+          || selection[0][1] !== n1
+          || selection[1][0] !== e1
+          || selection[1][1] !== s1) {
         state.selection = [[w1, n1], [e1, s1]];
         redraw.call(that);
         emit.brush();
         state.selection = [[w1, n1], [e1, s1]];
         redraw.call(that);
         emit.brush();
@@ -23807,8 +23818,8 @@ function brush$1(dim) {
       }
       group.attr("pointer-events", "all");
       overlay.attr("cursor", cursors.overlay);
       }
       group.attr("pointer-events", "all");
       overlay.attr("cursor", cursors.overlay);
-      if (state.selection) selection$$1 = state.selection; // May be set by brush.move (on start)!
-      if (empty(selection$$1)) state.selection = null, redraw.call(that);
+      if (state.selection) selection = state.selection; // May be set by brush.move (on start)!
+      if (empty(selection)) state.selection = null, redraw.call(that);
       emit.end();
     }
 
       emit.end();
     }
 
@@ -25445,17 +25456,17 @@ var manyBody = function() {
   }
 
   function accumulate(quad) {
   }
 
   function accumulate(quad) {
-    var strength = 0, q, c, x$$1, y$$1, i;
+    var strength = 0, q, c, x, y, i;
 
     // For internal nodes, accumulate forces from child quadrants.
     if (quad.length) {
 
     // For internal nodes, accumulate forces from child quadrants.
     if (quad.length) {
-      for (x$$1 = y$$1 = i = 0; i < 4; ++i) {
+      for (x = y = i = 0; i < 4; ++i) {
         if ((q = quad[i]) && (c = q.value)) {
         if ((q = quad[i]) && (c = q.value)) {
-          strength += c, x$$1 += c * q.x, y$$1 += c * q.y;
+          strength += c, x += c * q.x, y += c * q.y;
         }
       }
         }
       }
-      quad.x = x$$1 / strength;
-      quad.y = y$$1 / strength;
+      quad.x = x / strength;
+      quad.y = y / strength;
     }
 
     // For leaf nodes, accumulate forces from coincident quadrants.
     }
 
     // For leaf nodes, accumulate forces from coincident quadrants.
@@ -25473,20 +25484,20 @@ var manyBody = function() {
   function apply(quad, x1, _, x2) {
     if (!quad.value) return true;
 
   function apply(quad, x1, _, x2) {
     if (!quad.value) return true;
 
-    var x$$1 = quad.x - node.x,
-        y$$1 = quad.y - node.y,
+    var x = quad.x - node.x,
+        y = quad.y - node.y,
         w = x2 - x1,
         w = x2 - x1,
-        l = x$$1 * x$$1 + y$$1 * y$$1;
+        l = x * x + y * y;
 
     // Apply the Barnes-Hut approximation if possible.
     // Limit forces for very close nodes; randomize direction if coincident.
     if (w * w / theta2 < l) {
       if (l < distanceMax2) {
 
     // Apply the Barnes-Hut approximation if possible.
     // Limit forces for very close nodes; randomize direction if coincident.
     if (w * w / theta2 < l) {
       if (l < distanceMax2) {
-        if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1;
-        if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1;
+        if (x === 0) x = jiggle(), l += x * x;
+        if (y === 0) y = jiggle(), l += y * y;
         if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
         if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
-        node.vx += x$$1 * quad.value * alpha / l;
-        node.vy += y$$1 * quad.value * alpha / l;
+        node.vx += x * quad.value * alpha / l;
+        node.vy += y * quad.value * alpha / l;
       }
       return true;
     }
       }
       return true;
     }
@@ -25496,15 +25507,15 @@ var manyBody = function() {
 
     // Limit forces for very close nodes; randomize direction if coincident.
     if (quad.data !== node || quad.next) {
 
     // Limit forces for very close nodes; randomize direction if coincident.
     if (quad.data !== node || quad.next) {
-      if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1;
-      if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1;
+      if (x === 0) x = jiggle(), l += x * x;
+      if (y === 0) y = jiggle(), l += y * y;
       if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
     }
 
     do if (quad.data !== node) {
       w = strengths[quad.data.index] * alpha / l;
       if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
     }
 
     do if (quad.data !== node) {
       w = strengths[quad.data.index] * alpha / l;
-      node.vx += x$$1 * w;
-      node.vy += y$$1 * w;
+      node.vx += x * w;
+      node.vy += y * w;
     } while (quad = quad.next);
   }
 
     } while (quad = quad.next);
   }
 
@@ -27631,9 +27642,11 @@ function PathString() {
 }
 
 PathString.prototype = {
 }
 
 PathString.prototype = {
+  _radius: 4.5,
   _circle: circle$1(4.5),
   pointRadius: function(_) {
   _circle: circle$1(4.5),
   pointRadius: function(_) {
-    return this._circle = circle$1(_), this;
+    if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;
+    return this;
   },
   polygonStart: function() {
     this._line = 0;
   },
   polygonStart: function() {
     this._line = 0;
@@ -27660,6 +27673,7 @@ PathString.prototype = {
         break;
       }
       default: {
         break;
       }
       default: {
+        if (this._circle == null) this._circle = circle$1(this._radius);
         this._string.push("M", x, ",", y, this._circle);
         break;
       }
         this._string.push("M", x, ",", y, this._circle);
         break;
       }
@@ -27670,6 +27684,8 @@ PathString.prototype = {
       var result = this._string.join("");
       this._string = [];
       return result;
       var result = this._string.join("");
       this._string = [];
       return result;
+    } else {
+      return null;
     }
   }
 };
     }
   }
 };
@@ -27994,7 +28010,7 @@ var clipCircle = function(radius, delta) {
         // TODO ignore if not clipping polygons.
         if (v !== v0) {
           point2 = intersect(point0, point1);
         // TODO ignore if not clipping polygons.
         if (v !== v0) {
           point2 = intersect(point0, point1);
-          if (pointEqual(point0, point2) || pointEqual(point1, point2)) {
+          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {
             point1[0] += epsilon$2;
             point1[1] += epsilon$2;
             v = visible(point1[0], point1[1]);
             point1[0] += epsilon$2;
             point1[1] += epsilon$2;
             v = visible(point1[0], point1[1]);
@@ -28736,7 +28752,7 @@ function scaleTranslate(kx, ky, tx, ty) {
 }
 
 var identity$5 = function() {
 }
 
 var identity$5 = function() {
-  var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity$4, // scale, translate and reflect
+  var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform$$1 = identity$4, // scale, translate and reflect
       x0 = null, y0, x1, y1, clip = identity$4, // clip extent
       cache,
       cacheStream,
       x0 = null, y0, x1, y1, clip = identity$4, // clip extent
       cache,
       cacheStream,
@@ -28749,22 +28765,22 @@ var identity$5 = function() {
 
   return projection = {
     stream: function(stream) {
 
   return projection = {
     stream: function(stream) {
-      return cache && cacheStream === stream ? cache : cache = transform(clip(cacheStream = stream));
+      return cache && cacheStream === stream ? cache : cache = transform$$1(clip(cacheStream = stream));
     },
     clipExtent: function(_) {
       return arguments.length ? (clip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
     },
     scale: function(_) {
     },
     clipExtent: function(_) {
       return arguments.length ? (clip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$4) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
     },
     scale: function(_) {
-      return arguments.length ? (transform = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k;
+      return arguments.length ? (transform$$1 = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k;
     },
     translate: function(_) {
     },
     translate: function(_) {
-      return arguments.length ? (transform = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
+      return arguments.length ? (transform$$1 = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
     },
     reflectX: function(_) {
     },
     reflectX: function(_) {
-      return arguments.length ? (transform = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;
+      return arguments.length ? (transform$$1 = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;
     },
     reflectY: function(_) {
     },
     reflectY: function(_) {
-      return arguments.length ? (transform = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;
+      return arguments.length ? (transform$$1 = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;
     },
     fitExtent: function(extent, object) {
       return fitExtent(projection, extent, object);
     },
     fitExtent: function(extent, object) {
       return fitExtent(projection, extent, object);
@@ -30231,7 +30247,6 @@ var slice$3 = [].slice;
 var noabort = {};
 
 function Queue(size) {
 var noabort = {};
 
 function Queue(size) {
-  if (!(size >= 1)) throw new Error;
   this._size = size;
   this._call =
   this._error = null;
   this._size = size;
   this._call =
   this._error = null;
@@ -30246,7 +30261,8 @@ function Queue(size) {
 Queue.prototype = queue.prototype = {
   constructor: Queue,
   defer: function(callback) {
 Queue.prototype = queue.prototype = {
   constructor: Queue,
   defer: function(callback) {
-    if (typeof callback !== "function" || this._call) throw new Error;
+    if (typeof callback !== "function") throw new Error("invalid callback");
+    if (this._call) throw new Error("defer after await");
     if (this._error != null) return this;
     var t = slice$3.call(arguments, 1);
     t.push(callback);
     if (this._error != null) return this;
     var t = slice$3.call(arguments, 1);
     t.push(callback);
@@ -30259,13 +30275,15 @@ Queue.prototype = queue.prototype = {
     return this;
   },
   await: function(callback) {
     return this;
   },
   await: function(callback) {
-    if (typeof callback !== "function" || this._call) throw new Error;
+    if (typeof callback !== "function") throw new Error("invalid callback");
+    if (this._call) throw new Error("multiple await");
     this._call = function(error, results) { callback.apply(null, [error].concat(results)); };
     maybeNotify(this);
     return this;
   },
   awaitAll: function(callback) {
     this._call = function(error, results) { callback.apply(null, [error].concat(results)); };
     maybeNotify(this);
     return this;
   },
   awaitAll: function(callback) {
-    if (typeof callback !== "function" || this._call) throw new Error;
+    if (typeof callback !== "function") throw new Error("invalid callback");
+    if (this._call) throw new Error("multiple await");
     this._call = callback;
     maybeNotify(this);
     return this;
     this._call = callback;
     maybeNotify(this);
     return this;
@@ -30341,66 +30359,108 @@ function maybeNotify(q) {
 }
 
 function queue(concurrency) {
 }
 
 function queue(concurrency) {
-  return new Queue(arguments.length ? +concurrency : Infinity);
+  if (concurrency == null) concurrency = Infinity;
+  else if (!((concurrency = +concurrency) >= 1)) throw new Error("invalid concurrency");
+  return new Queue(concurrency);
 }
 
 }
 
-var uniform = function(min, max) {
-  min = min == null ? 0 : +min;
-  max = max == null ? 1 : +max;
-  if (arguments.length === 1) max = min, min = 0;
-  else max -= min;
-  return function() {
-    return Math.random() * max + min;
-  };
+var defaultSource$1 = function() {
+  return Math.random();
 };
 
 };
 
-var normal = function(mu, sigma) {
-  var x, r;
-  mu = mu == null ? 0 : +mu;
-  sigma = sigma == null ? 1 : +sigma;
-  return function() {
-    var y;
+var uniform = ((function sourceRandomUniform(source) {
+  function randomUniform(min, max) {
+    min = min == null ? 0 : +min;
+    max = max == null ? 1 : +max;
+    if (arguments.length === 1) max = min, min = 0;
+    else max -= min;
+    return function() {
+      return source() * max + min;
+    };
+  }
 
 
-    // If available, use the second previously-generated uniform random.
-    if (x != null) y = x, x = null;
+  randomUniform.source = sourceRandomUniform;
 
 
-    // Otherwise, generate a new x and y.
-    else do {
-      x = Math.random() * 2 - 1;
-      y = Math.random() * 2 - 1;
-      r = x * x + y * y;
-    } while (!r || r > 1);
+  return randomUniform;
+}))(defaultSource$1);
 
 
-    return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);
-  };
-};
+var normal = ((function sourceRandomNormal(source) {
+  function randomNormal(mu, sigma) {
+    var x, r;
+    mu = mu == null ? 0 : +mu;
+    sigma = sigma == null ? 1 : +sigma;
+    return function() {
+      var y;
 
 
-var logNormal = function() {
-  var randomNormal = normal.apply(this, arguments);
-  return function() {
-    return Math.exp(randomNormal());
-  };
-};
+      // If available, use the second previously-generated uniform random.
+      if (x != null) y = x, x = null;
 
 
-var irwinHall = function(n) {
-  return function() {
-    for (var sum = 0, i = 0; i < n; ++i) sum += Math.random();
-    return sum;
-  };
-};
+      // Otherwise, generate a new x and y.
+      else do {
+        x = source() * 2 - 1;
+        y = source() * 2 - 1;
+        r = x * x + y * y;
+      } while (!r || r > 1);
 
 
-var bates = function(n) {
-  var randomIrwinHall = irwinHall(n);
-  return function() {
-    return randomIrwinHall() / n;
-  };
-};
+      return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);
+    };
+  }
 
 
-var exponential$1 = function(lambda) {
-  return function() {
-    return -Math.log(1 - Math.random()) / lambda;
-  };
-};
+  randomNormal.source = sourceRandomNormal;
+
+  return randomNormal;
+}))(defaultSource$1);
+
+var logNormal = ((function sourceRandomLogNormal(source) {
+  function randomLogNormal() {
+    var randomNormal = normal.source(source).apply(this, arguments);
+    return function() {
+      return Math.exp(randomNormal());
+    };
+  }
+
+  randomLogNormal.source = sourceRandomLogNormal;
+
+  return randomLogNormal;
+}))(defaultSource$1);
+
+var irwinHall = ((function sourceRandomIrwinHall(source) {
+  function randomIrwinHall(n) {
+    return function() {
+      for (var sum = 0, i = 0; i < n; ++i) sum += source();
+      return sum;
+    };
+  }
+
+  randomIrwinHall.source = sourceRandomIrwinHall;
+
+  return randomIrwinHall;
+}))(defaultSource$1);
+
+var bates = ((function sourceRandomBates(source) {
+  function randomBates(n) {
+    var randomIrwinHall = irwinHall.source(source)(n);
+    return function() {
+      return randomIrwinHall() / n;
+    };
+  }
+
+  randomBates.source = sourceRandomBates;
+
+  return randomBates;
+}))(defaultSource$1);
+
+var exponential$1 = ((function sourceRandomExponential(source) {
+  function randomExponential(lambda) {
+    return function() {
+      return -Math.log(1 - source()) / lambda;
+    };
+  }
+
+  randomExponential.source = sourceRandomExponential;
+
+  return randomExponential;
+}))(defaultSource$1);
 
 var request = function(url, callback) {
   var request,
 
 var request = function(url, callback) {
   var request,
@@ -30653,7 +30713,7 @@ function band() {
   var scale = ordinal().unknown(undefined),
       domain = scale.domain,
       ordinalRange = scale.range,
   var scale = ordinal().unknown(undefined),
       domain = scale.domain,
       ordinalRange = scale.range,
-      range$$1 = [0, 1],
+      range = [0, 1],
       step,
       bandwidth,
       round = false,
       step,
       bandwidth,
       round = false,
@@ -30665,9 +30725,9 @@ function band() {
 
   function rescale() {
     var n = domain().length,
 
   function rescale() {
     var n = domain().length,
-        reverse = range$$1[1] < range$$1[0],
-        start = range$$1[reverse - 0],
-        stop = range$$1[1 - reverse];
+        reverse = range[1] < range[0],
+        start = range[reverse - 0],
+        stop = range[1 - reverse];
     step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
     if (round) step = Math.floor(step);
     start += (stop - start - step * (n - paddingInner)) * align;
     step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
     if (round) step = Math.floor(step);
     start += (stop - start - step * (n - paddingInner)) * align;
@@ -30682,11 +30742,11 @@ function band() {
   };
 
   scale.range = function(_) {
   };
 
   scale.range = function(_) {
-    return arguments.length ? (range$$1 = [+_[0], +_[1]], rescale()) : range$$1.slice();
+    return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();
   };
 
   scale.rangeRound = function(_) {
   };
 
   scale.rangeRound = function(_) {
-    return range$$1 = [+_[0], +_[1]], round = true, rescale();
+    return range = [+_[0], +_[1]], round = true, rescale();
   };
 
   scale.bandwidth = function() {
   };
 
   scale.bandwidth = function() {
@@ -30720,7 +30780,7 @@ function band() {
   scale.copy = function() {
     return band()
         .domain(domain())
   scale.copy = function() {
     return band()
         .domain(domain())
-        .range(range$$1)
+        .range(range)
         .round(round)
         .paddingInner(paddingInner)
         .paddingOuter(paddingOuter)
         .round(round)
         .paddingInner(paddingInner)
         .paddingOuter(paddingOuter)
@@ -30773,22 +30833,22 @@ function deinterpolateClamp(deinterpolate) {
   };
 }
 
   };
 }
 
-function reinterpolateClamp(reinterpolate) {
+function reinterpolateClamp(reinterpolate$$1) {
   return function(a, b) {
   return function(a, b) {
-    var r = reinterpolate(a = +a, b = +b);
+    var r = reinterpolate$$1(a = +a, b = +b);
     return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };
   };
 }
 
     return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };
   };
 }
 
-function bimap(domain, range$$1, deinterpolate, reinterpolate) {
-  var d0 = domain[0], d1 = domain[1], r0 = range$$1[0], r1 = range$$1[1];
-  if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);
-  else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);
+function bimap(domain, range, deinterpolate, reinterpolate$$1) {
+  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];
+  if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate$$1(r1, r0);
+  else d0 = deinterpolate(d0, d1), r0 = reinterpolate$$1(r0, r1);
   return function(x) { return r0(d0(x)); };
 }
 
   return function(x) { return r0(d0(x)); };
 }
 
-function polymap(domain, range$$1, deinterpolate, reinterpolate) {
-  var j = Math.min(domain.length, range$$1.length) - 1,
+function polymap(domain, range, deinterpolate, reinterpolate$$1) {
+  var j = Math.min(domain.length, range.length) - 1,
       d = new Array(j),
       r = new Array(j),
       i = -1;
       d = new Array(j),
       r = new Array(j),
       i = -1;
@@ -30796,12 +30856,12 @@ function polymap(domain, range$$1, deinterpolate, reinterpolate) {
   // Reverse descending domains.
   if (domain[j] < domain[0]) {
     domain = domain.slice().reverse();
   // Reverse descending domains.
   if (domain[j] < domain[0]) {
     domain = domain.slice().reverse();
-    range$$1 = range$$1.slice().reverse();
+    range = range.slice().reverse();
   }
 
   while (++i < j) {
     d[i] = deinterpolate(domain[i], domain[i + 1]);
   }
 
   while (++i < j) {
     d[i] = deinterpolate(domain[i], domain[i + 1]);
-    r[i] = reinterpolate(range$$1[i], range$$1[i + 1]);
+    r[i] = reinterpolate$$1(range[i], range[i + 1]);
   }
 
   return function(x) {
   }
 
   return function(x) {
@@ -30820,27 +30880,27 @@ function copy(source, target) {
 
 // deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
 // reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].
 
 // deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
 // reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].
-function continuous(deinterpolate, reinterpolate) {
+function continuous(deinterpolate, reinterpolate$$1) {
   var domain = unit,
   var domain = unit,
-      range$$1 = unit,
-      interpolate$$1 = interpolateValue,
+      range = unit,
+      interpolate = interpolateValue,
       clamp = false,
       piecewise,
       output,
       input;
 
   function rescale() {
       clamp = false,
       piecewise,
       output,
       input;
 
   function rescale() {
-    piecewise = Math.min(domain.length, range$$1.length) > 2 ? polymap : bimap;
+    piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;
     output = input = null;
     return scale;
   }
 
   function scale(x) {
     output = input = null;
     return scale;
   }
 
   function scale(x) {
-    return (output || (output = piecewise(domain, range$$1, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate$$1)))(+x);
+    return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);
   }
 
   scale.invert = function(y) {
   }
 
   scale.invert = function(y) {
-    return (input || (input = piecewise(range$$1, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);
+    return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate$$1) : reinterpolate$$1)))(+y);
   };
 
   scale.domain = function(_) {
   };
 
   scale.domain = function(_) {
@@ -30848,11 +30908,11 @@ function continuous(deinterpolate, reinterpolate) {
   };
 
   scale.range = function(_) {
   };
 
   scale.range = function(_) {
-    return arguments.length ? (range$$1 = slice$4.call(_), rescale()) : range$$1.slice();
+    return arguments.length ? (range = slice$4.call(_), rescale()) : range.slice();
   };
 
   scale.rangeRound = function(_) {
   };
 
   scale.rangeRound = function(_) {
-    return range$$1 = slice$4.call(_), interpolate$$1 = interpolateRound, rescale();
+    return range = slice$4.call(_), interpolate = interpolateRound, rescale();
   };
 
   scale.clamp = function(_) {
   };
 
   scale.clamp = function(_) {
@@ -30860,7 +30920,7 @@ function continuous(deinterpolate, reinterpolate) {
   };
 
   scale.interpolate = function(_) {
   };
 
   scale.interpolate = function(_) {
-    return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1;
+    return arguments.length ? (interpolate = _, rescale()) : interpolate;
   };
 
   return rescale();
   };
 
   return rescale();
@@ -30908,17 +30968,39 @@ function linearish(scale) {
   };
 
   scale.nice = function(count) {
   };
 
   scale.nice = function(count) {
+    if (count == null) count = 10;
+
     var d = domain(),
     var d = domain(),
-        i = d.length - 1,
-        n = count == null ? 10 : count,
-        start = d[0],
-        stop = d[i],
-        step = tickStep(start, stop, n);
-
-    if (step) {
-      step = tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n);
-      d[0] = Math.floor(start / step) * step;
-      d[i] = Math.ceil(stop / step) * step;
+        i0 = 0,
+        i1 = d.length - 1,
+        start = d[i0],
+        stop = d[i1],
+        step;
+
+    if (stop < start) {
+      step = start, start = stop, stop = step;
+      step = i0, i0 = i1, i1 = step;
+    }
+
+    step = tickIncrement(start, stop, count);
+
+    if (step > 0) {
+      start = Math.floor(start / step) * step;
+      stop = Math.ceil(stop / step) * step;
+      step = tickIncrement(start, stop, count);
+    } else if (step < 0) {
+      start = Math.ceil(start * step) / step;
+      stop = Math.floor(stop * step) / step;
+      step = tickIncrement(start, stop, count);
+    }
+
+    if (step > 0) {
+      d[i0] = Math.floor(start / step) * step;
+      d[i1] = Math.ceil(stop / step) * step;
+      domain(d);
+    } else if (step < 0) {
+      d[i0] = Math.ceil(start * step) / step;
+      d[i1] = Math.floor(stop * step) / step;
       domain(d);
     }
 
       domain(d);
     }
 
@@ -31135,24 +31217,24 @@ function sqrt$1() {
   return pow$1().exponent(0.5);
 }
 
   return pow$1().exponent(0.5);
 }
 
-function quantile$$1() {
+function quantile() {
   var domain = [],
   var domain = [],
-      range$$1 = [],
+      range = [],
       thresholds = [];
 
   function rescale() {
       thresholds = [];
 
   function rescale() {
-    var i = 0, n = Math.max(1, range$$1.length);
+    var i = 0, n = Math.max(1, range.length);
     thresholds = new Array(n - 1);
     while (++i < n) thresholds[i - 1] = threshold(domain, i / n);
     return scale;
   }
 
   function scale(x) {
     thresholds = new Array(n - 1);
     while (++i < n) thresholds[i - 1] = threshold(domain, i / n);
     return scale;
   }
 
   function scale(x) {
-    if (!isNaN(x = +x)) return range$$1[bisectRight(thresholds, x)];
+    if (!isNaN(x = +x)) return range[bisectRight(thresholds, x)];
   }
 
   scale.invertExtent = function(y) {
   }
 
   scale.invertExtent = function(y) {
-    var i = range$$1.indexOf(y);
+    var i = range.indexOf(y);
     return i < 0 ? [NaN, NaN] : [
       i > 0 ? thresholds[i - 1] : domain[0],
       i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
     return i < 0 ? [NaN, NaN] : [
       i > 0 ? thresholds[i - 1] : domain[0],
       i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
@@ -31168,7 +31250,7 @@ function quantile$$1() {
   };
 
   scale.range = function(_) {
   };
 
   scale.range = function(_) {
-    return arguments.length ? (range$$1 = slice$4.call(_), rescale()) : range$$1.slice();
+    return arguments.length ? (range = slice$4.call(_), rescale()) : range.slice();
   };
 
   scale.quantiles = function() {
   };
 
   scale.quantiles = function() {
@@ -31176,9 +31258,9 @@ function quantile$$1() {
   };
 
   scale.copy = function() {
   };
 
   scale.copy = function() {
-    return quantile$$1()
+    return quantile()
         .domain(domain)
         .domain(domain)
-        .range(range$$1);
+        .range(range);
   };
 
   return scale;
   };
 
   return scale;
@@ -31189,10 +31271,10 @@ function quantize$1() {
       x1 = 1,
       n = 1,
       domain = [0.5],
       x1 = 1,
       n = 1,
       domain = [0.5],
-      range$$1 = [0, 1];
+      range = [0, 1];
 
   function scale(x) {
 
   function scale(x) {
-    if (x <= x) return range$$1[bisectRight(domain, x, 0, n)];
+    if (x <= x) return range[bisectRight(domain, x, 0, n)];
   }
 
   function rescale() {
   }
 
   function rescale() {
@@ -31207,11 +31289,11 @@ function quantize$1() {
   };
 
   scale.range = function(_) {
   };
 
   scale.range = function(_) {
-    return arguments.length ? (n = (range$$1 = slice$4.call(_)).length - 1, rescale()) : range$$1.slice();
+    return arguments.length ? (n = (range = slice$4.call(_)).length - 1, rescale()) : range.slice();
   };
 
   scale.invertExtent = function(y) {
   };
 
   scale.invertExtent = function(y) {
-    var i = range$$1.indexOf(y);
+    var i = range.indexOf(y);
     return i < 0 ? [NaN, NaN]
         : i < 1 ? [x0, domain[0]]
         : i >= n ? [domain[n - 1], x1]
     return i < 0 ? [NaN, NaN]
         : i < 1 ? [x0, domain[0]]
         : i >= n ? [domain[n - 1], x1]
@@ -31221,7 +31303,7 @@ function quantize$1() {
   scale.copy = function() {
     return quantize$1()
         .domain([x0, x1])
   scale.copy = function() {
     return quantize$1()
         .domain([x0, x1])
-        .range(range$$1);
+        .range(range);
   };
 
   return linearish(scale);
   };
 
   return linearish(scale);
@@ -31229,30 +31311,30 @@ function quantize$1() {
 
 function threshold$1() {
   var domain = [0.5],
 
 function threshold$1() {
   var domain = [0.5],
-      range$$1 = [0, 1],
+      range = [0, 1],
       n = 1;
 
   function scale(x) {
       n = 1;
 
   function scale(x) {
-    if (x <= x) return range$$1[bisectRight(domain, x, 0, n)];
+    if (x <= x) return range[bisectRight(domain, x, 0, n)];
   }
 
   scale.domain = function(_) {
   }
 
   scale.domain = function(_) {
-    return arguments.length ? (domain = slice$4.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : domain.slice();
+    return arguments.length ? (domain = slice$4.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();
   };
 
   scale.range = function(_) {
   };
 
   scale.range = function(_) {
-    return arguments.length ? (range$$1 = slice$4.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : range$$1.slice();
+    return arguments.length ? (range = slice$4.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();
   };
 
   scale.invertExtent = function(y) {
   };
 
   scale.invertExtent = function(y) {
-    var i = range$$1.indexOf(y);
+    var i = range.indexOf(y);
     return [domain[i - 1], domain[i]];
   };
 
   scale.copy = function() {
     return threshold$1()
         .domain(domain)
     return [domain[i - 1], domain[i]];
   };
 
   scale.copy = function() {
     return threshold$1()
         .domain(domain)
-        .range(range$$1);
+        .range(range);
   };
 
   return scale;
   };
 
   return scale;
@@ -32188,39 +32270,39 @@ function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1
     [  year$$1,  1,      durationYear  ]
   ];
 
     [  year$$1,  1,      durationYear  ]
   ];
 
-  function tickFormat(date) {
-    return (second$$1(date) < date ? formatMillisecond
-        : minute$$1(date) < date ? formatSecond
-        : hour$$1(date) < date ? formatMinute
-        : day$$1(date) < date ? formatHour
-        : month$$1(date) < date ? (week(date) < date ? formatDay : formatWeek)
-        : year$$1(date) < date ? formatMonth
-        : formatYear)(date);
+  function tickFormat(date$$1) {
+    return (second$$1(date$$1) < date$$1 ? formatMillisecond
+        : minute$$1(date$$1) < date$$1 ? formatSecond
+        : hour$$1(date$$1) < date$$1 ? formatMinute
+        : day$$1(date$$1) < date$$1 ? formatHour
+        : month$$1(date$$1) < date$$1 ? (week(date$$1) < date$$1 ? formatDay : formatWeek)
+        : year$$1(date$$1) < date$$1 ? formatMonth
+        : formatYear)(date$$1);
   }
 
   }
 
-  function tickInterval(interval, start, stop, step) {
-    if (interval == null) interval = 10;
+  function tickInterval(interval$$1, start, stop, step) {
+    if (interval$$1 == null) interval$$1 = 10;
 
     // If a desired tick count is specified, pick a reasonable tick interval
     // based on the extent of the domain and a rough estimate of tick size.
     // Otherwise, assume interval is already a time interval and use it.
 
     // If a desired tick count is specified, pick a reasonable tick interval
     // based on the extent of the domain and a rough estimate of tick size.
     // Otherwise, assume interval is already a time interval and use it.
-    if (typeof interval === "number") {
-      var target = Math.abs(stop - start) / interval,
+    if (typeof interval$$1 === "number") {
+      var target = Math.abs(stop - start) / interval$$1,
           i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);
       if (i === tickIntervals.length) {
           i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);
       if (i === tickIntervals.length) {
-        step = tickStep(start / durationYear, stop / durationYear, interval);
-        interval = year$$1;
+        step = tickStep(start / durationYear, stop / durationYear, interval$$1);
+        interval$$1 = year$$1;
       } else if (i) {
         i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
         step = i[1];
       } else if (i) {
         i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
         step = i[1];
-        interval = i[0];
+        interval$$1 = i[0];
       } else {
       } else {
-        step = tickStep(start, stop, interval);
-        interval = millisecond$$1;
+        step = tickStep(start, stop, interval$$1);
+        interval$$1 = millisecond$$1;
       }
     }
 
       }
     }
 
-    return step == null ? interval : interval.every(step);
+    return step == null ? interval$$1 : interval$$1.every(step);
   }
 
   scale.invert = function(y) {
   }
 
   scale.invert = function(y) {
@@ -32231,14 +32313,14 @@ function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1
     return arguments.length ? domain(map$3.call(_, number$2)) : domain().map(date$1);
   };
 
     return arguments.length ? domain(map$3.call(_, number$2)) : domain().map(date$1);
   };
 
-  scale.ticks = function(interval, step) {
+  scale.ticks = function(interval$$1, step) {
     var d = domain(),
         t0 = d[0],
         t1 = d[d.length - 1],
         r = t1 < t0,
         t;
     if (r) t = t0, t0 = t1, t1 = t;
     var d = domain(),
         t0 = d[0],
         t1 = d[d.length - 1],
         r = t1 < t0,
         t;
     if (r) t = t0, t0 = t1, t1 = t;
-    t = tickInterval(interval, t0, t1, step);
+    t = tickInterval(interval$$1, t0, t1, step);
     t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
     return r ? t.reverse() : t;
   };
     t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
     return r ? t.reverse() : t;
   };
@@ -32247,10 +32329,10 @@ function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1
     return specifier == null ? tickFormat : format(specifier);
   };
 
     return specifier == null ? tickFormat : format(specifier);
   };
 
-  scale.nice = function(interval, step) {
+  scale.nice = function(interval$$1, step) {
     var d = domain();
     var d = domain();
-    return (interval = tickInterval(interval, d[0], d[d.length - 1], step))
-        ? domain(nice(d, interval))
+    return (interval$$1 = tickInterval(interval$$1, d[0], d[d.length - 1], step))
+        ? domain(nice(d, interval$$1))
         : scale;
   };
 
         : scale;
   };
 
@@ -32668,8 +32750,8 @@ function y$3(p) {
 }
 
 var line = function() {
 }
 
 var line = function() {
-  var x$$1 = x$3,
-      y$$1 = y$3,
+  var x = x$3,
+      y = y$3,
       defined = constant$10(true),
       context = null,
       curve = curveLinear,
       defined = constant$10(true),
       context = null,
       curve = curveLinear,
@@ -32689,18 +32771,18 @@ var line = function() {
         if (defined0 = !defined0) output.lineStart();
         else output.lineEnd();
       }
         if (defined0 = !defined0) output.lineStart();
         else output.lineEnd();
       }
-      if (defined0) output.point(+x$$1(d, i, data), +y$$1(d, i, data));
+      if (defined0) output.point(+x(d, i, data), +y(d, i, data));
     }
 
     if (buffer) return output = null, buffer + "" || null;
   }
 
   line.x = function(_) {
     }
 
     if (buffer) return output = null, buffer + "" || null;
   }
 
   line.x = function(_) {
-    return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$10(+_), line) : x$$1;
+    return arguments.length ? (x = typeof _ === "function" ? _ : constant$10(+_), line) : x;
   };
 
   line.y = function(_) {
   };
 
   line.y = function(_) {
-    return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$10(+_), line) : y$$1;
+    return arguments.length ? (y = typeof _ === "function" ? _ : constant$10(+_), line) : y;
   };
 
   line.defined = function(_) {
   };
 
   line.defined = function(_) {
@@ -32983,6 +33065,91 @@ var radialArea = function() {
   return a;
 };
 
   return a;
 };
 
+var slice$5 = Array.prototype.slice;
+
+var radialPoint = function(x, y) {
+  return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];
+};
+
+function linkSource(d) {
+  return d.source;
+}
+
+function linkTarget(d) {
+  return d.target;
+}
+
+function link$2(curve) {
+  var source = linkSource,
+      target = linkTarget,
+      x = x$3,
+      y = y$3,
+      context = null;
+
+  function link() {
+    var buffer, argv = slice$5.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);
+    if (!context) context = buffer = path();
+    curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));
+    if (buffer) return context = null, buffer + "" || null;
+  }
+
+  link.source = function(_) {
+    return arguments.length ? (source = _, link) : source;
+  };
+
+  link.target = function(_) {
+    return arguments.length ? (target = _, link) : target;
+  };
+
+  link.x = function(_) {
+    return arguments.length ? (x = typeof _ === "function" ? _ : constant$10(+_), link) : x;
+  };
+
+  link.y = function(_) {
+    return arguments.length ? (y = typeof _ === "function" ? _ : constant$10(+_), link) : y;
+  };
+
+  link.context = function(_) {
+    return arguments.length ? ((context = _ == null ? null : _), link) : context;
+  };
+
+  return link;
+}
+
+function curveHorizontal(context, x0, y0, x1, y1) {
+  context.moveTo(x0, y0);
+  context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);
+}
+
+function curveVertical(context, x0, y0, x1, y1) {
+  context.moveTo(x0, y0);
+  context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);
+}
+
+function curveRadial$1(context, x0, y0, x1, y1) {
+  var p0 = radialPoint(x0, y0),
+      p1 = radialPoint(x0, y0 = (y0 + y1) / 2),
+      p2 = radialPoint(x1, y0),
+      p3 = radialPoint(x1, y1);
+  context.moveTo(p0[0], p0[1]);
+  context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);
+}
+
+function linkHorizontal() {
+  return link$2(curveHorizontal);
+}
+
+function linkVertical() {
+  return link$2(curveVertical);
+}
+
+function linkRadial() {
+  var l = link$2(curveRadial$1);
+  l.angle = l.x, delete l.x;
+  l.radius = l.y, delete l.y;
+  return l;
+}
+
 var circle$2 = {
   draw: function(context, size) {
     var r = Math.sqrt(size / pi$4);
 var circle$2 = {
   draw: function(context, size) {
     var r = Math.sqrt(size / pi$4);
@@ -33439,15 +33606,15 @@ CardinalClosed.prototype = {
 
 var cardinalClosed = ((function custom(tension) {
 
 
 var cardinalClosed = ((function custom(tension) {
 
-  function cardinal(context) {
+  function cardinal$$1(context) {
     return new CardinalClosed(context, tension);
   }
 
     return new CardinalClosed(context, tension);
   }
 
-  cardinal.tension = function(tension) {
+  cardinal$$1.tension = function(tension) {
     return custom(+tension);
   };
 
     return custom(+tension);
   };
 
-  return cardinal;
+  return cardinal$$1;
 }))(0);
 
 function CardinalOpen(context, tension) {
 }))(0);
 
 function CardinalOpen(context, tension) {
@@ -33487,15 +33654,15 @@ CardinalOpen.prototype = {
 
 var cardinalOpen = ((function custom(tension) {
 
 
 var cardinalOpen = ((function custom(tension) {
 
-  function cardinal(context) {
+  function cardinal$$1(context) {
     return new CardinalOpen(context, tension);
   }
 
     return new CardinalOpen(context, tension);
   }
 
-  cardinal.tension = function(tension) {
+  cardinal$$1.tension = function(tension) {
     return custom(+tension);
   };
 
     return custom(+tension);
   };
 
-  return cardinal;
+  return cardinal$$1;
 }))(0);
 
 function point$4(that, x, y) {
 }))(0);
 
 function point$4(that, x, y) {
@@ -33644,15 +33811,15 @@ CatmullRomClosed.prototype = {
 
 var catmullRomClosed = ((function custom(alpha) {
 
 
 var catmullRomClosed = ((function custom(alpha) {
 
-  function catmullRom(context) {
+  function catmullRom$$1(context) {
     return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
   }
 
     return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
   }
 
-  catmullRom.alpha = function(alpha) {
+  catmullRom$$1.alpha = function(alpha) {
     return custom(+alpha);
   };
 
     return custom(+alpha);
   };
 
-  return catmullRom;
+  return catmullRom$$1;
 }))(0.5);
 
 function CatmullRomOpen(context, alpha) {
 }))(0.5);
 
 function CatmullRomOpen(context, alpha) {
@@ -33704,15 +33871,15 @@ CatmullRomOpen.prototype = {
 
 var catmullRomOpen = ((function custom(alpha) {
 
 
 var catmullRomOpen = ((function custom(alpha) {
 
-  function catmullRom(context) {
+  function catmullRom$$1(context) {
     return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
   }
 
     return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
   }
 
-  catmullRom.alpha = function(alpha) {
+  catmullRom$$1.alpha = function(alpha) {
     return custom(+alpha);
   };
 
     return custom(+alpha);
   };
 
-  return catmullRom;
+  return catmullRom$$1;
 }))(0.5);
 
 function LinearClosed(context) {
 }))(0.5);
 
 function LinearClosed(context) {
@@ -33964,13 +34131,11 @@ function stepAfter(context) {
   return new Step(context, 1);
 }
 
   return new Step(context, 1);
 }
 
-var slice$5 = Array.prototype.slice;
-
 var none$1 = function(series, order) {
   if (!((n = series.length) > 1)) return;
 var none$1 = function(series, order) {
   if (!((n = series.length) > 1)) return;
-  for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
+  for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
     s0 = s1, s1 = series[order[i]];
     s0 = s1, s1 = series[order[i]];
-    for (var j = 0; j < m; ++j) {
+    for (j = 0; j < m; ++j) {
       s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
     }
   }
       s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
     }
   }
@@ -34044,6 +34209,21 @@ var expand = function(series, order) {
   none$1(series, order);
 };
 
   none$1(series, order);
 };
 
+var diverging = function(series, order) {
+  if (!((n = series.length) > 1)) return;
+  for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {
+    for (yp = yn = 0, i = 0; i < n; ++i) {
+      if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) {
+        d[0] = yp, d[1] = yp += dy;
+      } else if (dy < 0) {
+        d[1] = yn, d[0] = yn += dy;
+      } else {
+        d[0] = yp;
+      }
+    }
+  }
+};
+
 var silhouette = function(series, order) {
   if (!((n = series.length) > 0)) return;
   for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
 var silhouette = function(series, order) {
   if (!((n = series.length) > 0)) return;
   for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
@@ -35063,13 +35243,13 @@ Diagram.prototype = {
 };
 
 var voronoi = function() {
 };
 
 var voronoi = function() {
-  var x$$1 = x$4,
-      y$$1 = y$4,
+  var x = x$4,
+      y = y$4,
       extent = null;
 
   function voronoi(data) {
     return new Diagram(data.map(function(d, i) {
       extent = null;
 
   function voronoi(data) {
     return new Diagram(data.map(function(d, i) {
-      var s = [Math.round(x$$1(d, i, data) / epsilon$4) * epsilon$4, Math.round(y$$1(d, i, data) / epsilon$4) * epsilon$4];
+      var s = [Math.round(x(d, i, data) / epsilon$4) * epsilon$4, Math.round(y(d, i, data) / epsilon$4) * epsilon$4];
       s.index = i;
       s.data = d;
       return s;
       s.index = i;
       s.data = d;
       return s;
@@ -35089,11 +35269,11 @@ var voronoi = function() {
   };
 
   voronoi.x = function(_) {
   };
 
   voronoi.x = function(_) {
-    return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$11(+_), voronoi) : x$$1;
+    return arguments.length ? (x = typeof _ === "function" ? _ : constant$11(+_), voronoi) : x;
   };
 
   voronoi.y = function(_) {
   };
 
   voronoi.y = function(_) {
-    return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$11(+_), voronoi) : y$$1;
+    return arguments.length ? (y = typeof _ === "function" ? _ : constant$11(+_), voronoi) : y;
   };
 
   voronoi.extent = function(_) {
   };
 
   voronoi.extent = function(_) {
@@ -35211,13 +35391,14 @@ var zoom = function() {
       y0 = x0,
       y1 = x1,
       duration = 250,
       y0 = x0,
       y1 = x1,
       duration = 250,
-      interpolate$$1 = interpolateZoom,
+      interpolate = interpolateZoom,
       gestures = [],
       listeners = dispatch("start", "zoom", "end"),
       touchstarting,
       touchending,
       touchDelay = 500,
       gestures = [],
       listeners = dispatch("start", "zoom", "end"),
       touchstarting,
       touchending,
       touchDelay = 500,
-      wheelDelay = 150;
+      wheelDelay = 150,
+      clickDistance2 = 0;
 
   function zoom(selection$$1) {
     selection$$1
 
   function zoom(selection$$1) {
     selection$$1
@@ -35231,16 +35412,16 @@ var zoom = function() {
         .property("__zoom", defaultTransform);
   }
 
         .property("__zoom", defaultTransform);
   }
 
-  zoom.transform = function(collection, transform) {
+  zoom.transform = function(collection, transform$$1) {
     var selection$$1 = collection.selection ? collection.selection() : collection;
     selection$$1.property("__zoom", defaultTransform);
     if (collection !== selection$$1) {
     var selection$$1 = collection.selection ? collection.selection() : collection;
     selection$$1.property("__zoom", defaultTransform);
     if (collection !== selection$$1) {
-      schedule(collection, transform);
+      schedule(collection, transform$$1);
     } else {
       selection$$1.interrupt().each(function() {
         gesture(this, arguments)
             .start()
     } else {
       selection$$1.interrupt().each(function() {
         gesture(this, arguments)
             .start()
-            .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)
+            .zoom(null, typeof transform$$1 === "function" ? transform$$1.apply(this, arguments) : transform$$1)
             .end();
       });
     }
             .end();
       });
     }
@@ -35274,22 +35455,22 @@ var zoom = function() {
     });
   };
 
     });
   };
 
-  function scale(transform, k) {
+  function scale(transform$$1, k) {
     k = Math.max(k0, Math.min(k1, k));
     k = Math.max(k0, Math.min(k1, k));
-    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);
+    return k === transform$$1.k ? transform$$1 : new Transform(k, transform$$1.x, transform$$1.y);
   }
 
   }
 
-  function translate(transform, p0, p1) {
-    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;
-    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);
+  function translate(transform$$1, p0, p1) {
+    var x = p0[0] - p1[0] * transform$$1.k, y = p0[1] - p1[1] * transform$$1.k;
+    return x === transform$$1.x && y === transform$$1.y ? transform$$1 : new Transform(transform$$1.k, x, y);
   }
 
   }
 
-  function constrain(transform, extent) {
-    var dx0 = transform.invertX(extent[0][0]) - x0,
-        dx1 = transform.invertX(extent[1][0]) - x1,
-        dy0 = transform.invertY(extent[0][1]) - y0,
-        dy1 = transform.invertY(extent[1][1]) - y1;
-    return transform.translate(
+  function constrain(transform$$1, extent) {
+    var dx0 = transform$$1.invertX(extent[0][0]) - x0,
+        dx1 = transform$$1.invertX(extent[1][0]) - x1,
+        dy0 = transform$$1.invertY(extent[0][1]) - y0,
+        dy1 = transform$$1.invertY(extent[1][1]) - y1;
+    return transform$$1.translate(
       dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),
       dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)
     );
       dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),
       dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)
     );
@@ -35299,7 +35480,7 @@ var zoom = function() {
     return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
   }
 
     return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
   }
 
-  function schedule(transition$$1, transform, center) {
+  function schedule(transition$$1, transform$$1, center) {
     transition$$1
         .on("start.zoom", function() { gesture(this, arguments).start(); })
         .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })
     transition$$1
         .on("start.zoom", function() { gesture(this, arguments).start(); })
         .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })
@@ -35311,8 +35492,8 @@ var zoom = function() {
               p = center || centroid(e),
               w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
               a = that.__zoom,
               p = center || centroid(e),
               w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
               a = that.__zoom,
-              b = typeof transform === "function" ? transform.apply(that, args) : transform,
-              i = interpolate$$1(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
+              b = typeof transform$$1 === "function" ? transform$$1.apply(that, args) : transform$$1,
+              i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
           return function(t) {
             if (t === 1) t = b; // Avoid rounding error on end.
             else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }
           return function(t) {
             if (t === 1) t = b; // Avoid rounding error on end.
             else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }
@@ -35346,11 +35527,11 @@ var zoom = function() {
       }
       return this;
     },
       }
       return this;
     },
-    zoom: function(key, transform) {
-      if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]);
-      if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]);
-      if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]);
-      this.that.__zoom = transform;
+    zoom: function(key, transform$$1) {
+      if (this.mouse && key !== "mouse") this.mouse[1] = transform$$1.invert(this.mouse[0]);
+      if (this.touch0 && key !== "touch") this.touch0[1] = transform$$1.invert(this.touch0[0]);
+      if (this.touch1 && key !== "touch") this.touch1[1] = transform$$1.invert(this.touch1[0]);
+      this.that.__zoom = transform$$1;
       this.emit("zoom");
       return this;
     },
       this.emit("zoom");
       return this;
     },
@@ -35407,7 +35588,9 @@ var zoom = function() {
     if (touchending || !filter.apply(this, arguments)) return;
     var g = gesture(this, arguments),
         v = select(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
     if (touchending || !filter.apply(this, arguments)) return;
     var g = gesture(this, arguments),
         v = select(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
-        p = mouse(this);
+        p = mouse(this),
+        x0 = event.clientX,
+        y0 = event.clientY;
 
     dragDisable(event.view);
     nopropagation$2();
 
     dragDisable(event.view);
     nopropagation$2();
@@ -35417,7 +35600,10 @@ var zoom = function() {
 
     function mousemoved() {
       noevent$2();
 
     function mousemoved() {
       noevent$2();
-      g.moved = true;
+      if (!g.moved) {
+        var dx = event.clientX - x0, dy = event.clientY - y0;
+        g.moved = dx * dx + dy * dy > clickDistance2;
+      }
       g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent));
     }
 
       g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent));
     }
 
@@ -35541,7 +35727,7 @@ var zoom = function() {
   };
 
   zoom.interpolate = function(_) {
   };
 
   zoom.interpolate = function(_) {
-    return arguments.length ? (interpolate$$1 = _, zoom) : interpolate$$1;
+    return arguments.length ? (interpolate = _, zoom) : interpolate;
   };
 
   zoom.on = function() {
   };
 
   zoom.on = function() {
@@ -35549,6 +35735,10 @@ var zoom = function() {
     return value === listeners ? zoom : value;
   };
 
     return value === listeners ? zoom : value;
   };
 
+  zoom.clickDistance = function(_) {
+    return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);
+  };
+    
   return zoom;
 };
 
   return zoom;
 };
 
@@ -35784,7 +35974,7 @@ var index$2 = Object.freeze({
        scaleImplicit: implicit,
        scalePow: pow$1,
        scaleSqrt: sqrt$1,
        scaleImplicit: implicit,
        scalePow: pow$1,
        scaleSqrt: sqrt$1,
-       scaleQuantile: quantile$$1,
+       scaleQuantile: quantile,
        scaleQuantize: quantize$1,
        scaleThreshold: threshold$1,
        scaleTime: time,
        scaleQuantize: quantize$1,
        scaleThreshold: threshold$1,
        scaleTime: time,
@@ -35813,9 +36003,10 @@ var index$2 = Object.freeze({
        selection: selection,
        selector: selector,
        selectorAll: selectorAll,
        selection: selection,
        selector: selector,
        selectorAll: selectorAll,
+       style: styleValue,
        touch: touch,
        touches: touches,
        touch: touch,
        touches: touches,
-       window: window$1,
+       window: defaultView,
        get event () { return event; },
        customEvent: customEvent,
        arc: arc,
        get event () { return event; },
        customEvent: customEvent,
        arc: arc,
@@ -35824,6 +36015,9 @@ var index$2 = Object.freeze({
        pie: pie,
        radialArea: radialArea,
        radialLine: radialLine$1,
        pie: pie,
        radialArea: radialArea,
        radialLine: radialLine$1,
+       linkHorizontal: linkHorizontal,
+       linkVertical: linkVertical,
+       linkRadial: linkRadial,
        symbol: symbol,
        symbols: symbols,
        symbolCircle: circle$2,
        symbol: symbol,
        symbols: symbols,
        symbolCircle: circle$2,
@@ -35853,6 +36047,7 @@ var index$2 = Object.freeze({
        curveStepBefore: stepBefore,
        stack: stack,
        stackOffsetExpand: expand,
        curveStepBefore: stepBefore,
        stack: stack,
        stackOffsetExpand: expand,
+       stackOffsetDiverging: diverging,
        stackOffsetNone: none$1,
        stackOffsetSilhouette: silhouette,
        stackOffsetWiggle: wiggle,
        stackOffsetNone: none$1,
        stackOffsetSilhouette: silhouette,
        stackOffsetWiggle: wiggle,
@@ -35957,58 +36152,58 @@ function geoRawMercator() {
         clipExtent = [[0, 0], [0, 0]];
 
 
         clipExtent = [[0, 0], [0, 0]];
 
 
-    function projection(point) {
+    function projection$$1(point) {
         point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180);
         return [point[0] * k + x, y - point[1] * k];
     }
 
 
         point = project(point[0] * Math.PI / 180, point[1] * Math.PI / 180);
         return [point[0] * k + x, y - point[1] * k];
     }
 
 
-    projection.invert = function(point) {
+    projection$$1.invert = function(point) {
         point = project.invert((point[0] - x) / k, (y - point[1]) / k);
         return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI];
     };
 
 
         point = project.invert((point[0] - x) / k, (y - point[1]) / k);
         return point && [point[0] * 180 / Math.PI, point[1] * 180 / Math.PI];
     };
 
 
-    projection.scale = function(_) {
+    projection$$1.scale = function(_) {
         if (!arguments.length) return k;
         k = +_;
         if (!arguments.length) return k;
         k = +_;
-        return projection;
+        return projection$$1;
     };
 
 
     };
 
 
-    projection.translate = function(_) {
+    projection$$1.translate = function(_) {
         if (!arguments.length) return [x, y];
         x = +_[0];
         y = +_[1];
         if (!arguments.length) return [x, y];
         x = +_[0];
         y = +_[1];
-        return projection;
+        return projection$$1;
     };
 
 
     };
 
 
-    projection.clipExtent = function(_) {
+    projection$$1.clipExtent = function(_) {
         if (!arguments.length) return clipExtent;
         clipExtent = _;
         if (!arguments.length) return clipExtent;
         clipExtent = _;
-        return projection;
+        return projection$$1;
     };
 
 
     };
 
 
-    projection.transform = function(_) {
+    projection$$1.transform = function(_) {
         if (!arguments.length) return identity$8.translate(x, y).scale(k);
         x = +_.x;
         y = +_.y;
         k = +_.k;
         if (!arguments.length) return identity$8.translate(x, y).scale(k);
         x = +_.x;
         y = +_.y;
         k = +_.k;
-        return projection;
+        return projection$$1;
     };
 
 
     };
 
 
-    projection.stream = transform({
+    projection$$1.stream = transform({
         point: function(x, y) {
         point: function(x, y) {
-            x = projection([x, y]);
+            x = projection$$1([x, y]);
             this.stream.point(x[0], x[1]);
         }
     }).stream;
 
 
             this.stream.point(x[0], x[1]);
         }
     }).stream;
 
 
-    return projection;
+    return projection$$1;
 }
 
 function osmChangeset() {
 }
 
 function osmChangeset() {
@@ -38561,6 +38756,12 @@ coreGraph$$1.prototype = {
 
     entity: function(id) {
         var entity = this.entities[id];
 
     entity: function(id) {
         var entity = this.entities[id];
+
+        //https://github.com/openstreetmap/iD/issues/3973#issuecomment-307052376
+        if (!entity) {
+            entity = this.entities.__proto__[id];  // eslint-disable-line no-proto
+        }
+
         if (!entity) {
             throw new Error('entity ' + id + ' not found');
         }
         if (!entity) {
             throw new Error('entity ' + id + ' not found');
         }
@@ -39565,28 +39766,75 @@ function coreTree(head) {
 function d3keybinding(namespace$$1) {
     var bindings = [];
 
 function d3keybinding(namespace$$1) {
     var bindings = [];
 
-    function matches(binding, event$$1) {
-        for (var p in binding.event) {
-            if (event$$1[p] !== binding.event[p])
-                return false;
-        }
-        return true;
-    }
 
     function testBindings(isCapturing) {
 
     function testBindings(isCapturing) {
-        for (var i = 0; i < bindings.length; i++) {
-            var binding = bindings[i];
+        var didMatch = false,
+            i, binding;
+
+        // Most key shortcuts will accept either lower or uppercase ('h' or 'H'),
+        // so we don't strictly match on the shift key, but we prioritize
+        // shifted bindings first, and fallback to unshifted only if no match.
+        // (This lets us differentiate between '←'/'⇧←' or '⌘Z'/'⌘⇧Z')
+
+        // priority match shifted bindings first
+        for (i = 0; i < bindings.length; i++) {
+            binding = bindings[i];
+            if (!binding.event.modifiers.shiftKey) continue;  // no shift
+            if (!!binding.capture !== isCapturing) continue;
+            if (matches(binding, true)) {
+                binding.callback();
+                didMatch = true;
+            }
+        }
 
 
-            if (!!binding.capture === isCapturing && matches(binding, event)) {
+        // then unshifted bindings
+        if (didMatch) return;
+        for (i = 0; i < bindings.length; i++) {
+            binding = bindings[i];
+            if (binding.event.modifiers.shiftKey) continue;   // shift
+            if (!!binding.capture !== isCapturing) continue;
+            if (matches(binding, false)) {
                 binding.callback();
             }
         }
                 binding.callback();
             }
         }
+
+
+        function matches(binding, testShift) {
+            var event$$1 = event;
+            if (event$$1.key !== undefined) {
+                if (binding.event.key === undefined) {
+                    return false;
+                } else if (lodash.isArray(binding.event.key)) {
+                    if (binding.event.key.map(function(s) { return s.toLowerCase(); }).indexOf(event$$1.key.toLowerCase()) === -1)
+                        return false;
+                } else {
+                    if (event$$1.key.toLowerCase() !== binding.event.key.toLowerCase())
+                        return false;
+                }
+            } else {
+                // check keycodes if browser doesn't support KeyboardEvent.key
+                if (event$$1.keyCode !== binding.event.keyCode)
+                    return false;
+            }
+
+            // test modifier keys
+            if (!(event$$1.ctrlKey && event$$1.altKey)) {  // if both are set, assume AltGr and skip it - #4096
+                if (event$$1.ctrlKey !== binding.event.modifiers.ctrlKey) return false;
+                if (event$$1.altKey !== binding.event.modifiers.altKey) return false;
+            }
+            if (event$$1.metaKey !== binding.event.modifiers.metaKey) return false;
+            if (testShift && event$$1.shiftKey !== binding.event.modifiers.shiftKey) return false;
+
+            return true;
+        }
     }
 
     }
 
+
     function capture() {
         testBindings(true);
     }
 
     function capture() {
         testBindings(true);
     }
 
+
     function bubble() {
         var tagName = select(event.target).node().tagName;
         if (tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA') {
     function bubble() {
         var tagName = select(event.target).node().tagName;
         if (tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA') {
@@ -39595,6 +39843,7 @@ function d3keybinding(namespace$$1) {
         testBindings(false);
     }
 
         testBindings(false);
     }
 
+
     function keybinding(selection$$1) {
         selection$$1 = selection$$1 || select(document);
         selection$$1.on('keydown.capture' + namespace$$1, capture, true);
     function keybinding(selection$$1) {
         selection$$1 = selection$$1 || select(document);
         selection$$1.on('keydown.capture' + namespace$$1, capture, true);
@@ -39602,6 +39851,7 @@ function d3keybinding(namespace$$1) {
         return keybinding;
     }
 
         return keybinding;
     }
 
+
     keybinding.off = function(selection$$1) {
         bindings = [];
         selection$$1 = selection$$1 || select(document);
     keybinding.off = function(selection$$1) {
         bindings = [];
         selection$$1 = selection$$1 || select(document);
@@ -39610,17 +39860,21 @@ function d3keybinding(namespace$$1) {
         return keybinding;
     };
 
         return keybinding;
     };
 
+
     keybinding.on = function(codes, callback, capture) {
         var arr = [].concat(codes);
         for (var i = 0; i < arr.length; i++) {
             var code = arr[i];
             var binding = {
                 event: {
     keybinding.on = function(codes, callback, capture) {
         var arr = [].concat(codes);
         for (var i = 0; i < arr.length; i++) {
             var code = arr[i];
             var binding = {
                 event: {
-                    keyCode: 0,
-                    shiftKey: false,
-                    ctrlKey: false,
-                    altKey: false,
-                    metaKey: false
+                    key: undefined,
+                    keyCode: 0, // only for browsers that don't support KeyboardEvent.key
+                    modifiers: {
+                        shiftKey: false,
+                        ctrlKey: false,
+                        altKey: false,
+                        metaKey: false
+                    }
                 },
                 capture: capture,
                 callback: callback
                 },
                 capture: capture,
                 callback: callback
@@ -39630,12 +39884,15 @@ function d3keybinding(namespace$$1) {
 
             for (var j = 0; j < code.length; j++) {
                 // Normalise matching errors
 
             for (var j = 0; j < code.length; j++) {
                 // Normalise matching errors
-                if (code[j] === '++') code[i] = '+';
+                if (code[j] === '++') code[j] = '+';
 
                 if (code[j] in d3keybinding.modifierCodes) {
 
                 if (code[j] in d3keybinding.modifierCodes) {
-                    binding.event[d3keybinding.modifierProperties[d3keybinding.modifierCodes[code[j]]]] = true;
-                } else if (code[j] in d3keybinding.keyCodes) {
-                    binding.event.keyCode = d3keybinding.keyCodes[code[j]];
+                    binding.event.modifiers[d3keybinding.modifierProperties[d3keybinding.modifierCodes[code[j]]]] = true;
+                } else {
+                    binding.event.key = d3keybinding.keys[code[j]] || code[j];
+                    if (code[j] in d3keybinding.keyCodes) {
+                        binding.event.keyCode = d3keybinding.keyCodes[code[j]];
+                    }
                 }
             }
 
                 }
             }
 
@@ -39667,6 +39924,107 @@ d3keybinding.modifierProperties = {
     91: 'metaKey'
 };
 
     91: 'metaKey'
 };
 
+d3keybinding.keys = {
+    // Backspace key, on Mac: ⌫ (Backspace)
+    '⌫': 'Backspace', backspace: 'Backspace',
+    // Tab Key, on Mac: ⇥ (Tab), on Windows ⇥⇥
+    '⇥': 'Tab', '⇆': 'Tab', tab: 'Tab',
+    // Return key, ↩
+    '↩': 'Enter', 'return': 'Enter', enter: 'Enter', '⌅': 'Enter',
+    // Pause/Break key
+    'pause': 'Pause', 'pause-break': 'Pause',
+    // Caps Lock key, ⇪
+    '⇪': 'CapsLock', caps: 'CapsLock', 'caps-lock': 'CapsLock',
+    // Escape key, on Mac: ⎋, on Windows: Esc
+    '⎋': ['Escape', 'Esc'], escape: ['Escape', 'Esc'], esc: ['Escape', 'Esc'],
+    // Space key
+    space: [' ', 'Spacebar'],
+    // Page-Up key, or pgup, on Mac: ↖
+    '↖': 'PageUp', pgup: 'PageUp', 'page-up': 'PageUp',
+    // Page-Down key, or pgdown, on Mac: ↘
+    '↘': 'PageDown', pgdown: 'PageDown', 'page-down': 'PageDown',
+    // END key, on Mac: ⇟
+    '⇟': 'End', end: 'End',
+    // HOME key, on Mac: ⇞
+    '⇞': 'Home', home: 'Home',
+    // Insert key, or ins
+    ins: 'Insert', insert: 'Insert',
+    // Delete key, on Mac: ⌦ (Delete)
+    '⌦': ['Delete', 'Del'], del: ['Delete', 'Del'], 'delete': ['Delete', 'Del'],
+    // Left Arrow Key, or ←
+    '←': ['ArrowLeft', 'Left'], left: ['ArrowLeft', 'Left'], 'arrow-left': ['ArrowLeft', 'Left'],
+    // Up Arrow Key, or ↑
+    '↑': ['ArrowUp', 'Up'], up: ['ArrowUp', 'Up'], 'arrow-up': ['ArrowUp', 'Up'],
+    // Right Arrow Key, or →
+    '→': ['ArrowRight', 'Right'], right: ['ArrowRight', 'Right'], 'arrow-right': ['ArrowRight', 'Right'],
+    // Up Arrow Key, or ↓
+    '↓': ['ArrowDown', 'Down'], down: ['ArrowDown', 'Down'], 'arrow-down': ['ArrowDown', 'Down'],
+    // odities, stuff for backward compatibility (browsers and code):
+    // Num-Multiply, or *
+    '*': ['*', 'Multiply'], star: ['*', 'Multiply'], asterisk: ['*', 'Multiply'], multiply: ['*', 'Multiply'],
+    // Num-Plus or +
+    '+': ['+', 'Add'], 'plus': ['+', 'Add'],
+    // Num-Subtract, or -
+    '-': ['-', 'Subtract'], subtract: ['-', 'Subtract'], 'dash': ['-', 'Subtract'],
+    // Semicolon
+    semicolon: ';',
+    // = or equals
+    equals: '=',
+    // Comma, or ,
+    comma: ',',
+    // Period, or ., or full-stop
+    period: '.', 'full-stop': '.',
+    // Slash, or /, or forward-slash
+    slash: '/', 'forward-slash': '/',
+    // Tick, or `, or back-quote
+    tick: '`', 'back-quote': '`',
+    // Open bracket, or [
+    'open-bracket': '[',
+    // Back slash, or \
+    'back-slash': '\\',
+    // Close backet, or ]
+    'close-bracket': ']',
+    // Apostrophe, or Quote, or '
+    quote: '\'', apostrophe: '\'',
+    // NUMPAD 0-9
+    'num-0': '0',
+    'num-1': '1',
+    'num-2': '2',
+    'num-3': '3',
+    'num-4': '4',
+    'num-5': '5',
+    'num-6': '6',
+    'num-7': '7',
+    'num-8': '8',
+    'num-9': '9',
+    // F1-F25
+    f1: 'F1',
+    f2: 'F2',
+    f3: 'F3',
+    f4: 'F4',
+    f5: 'F5',
+    f6: 'F6',
+    f7: 'F7',
+    f8: 'F8',
+    f9: 'F9',
+    f10: 'F10',
+    f11: 'F11',
+    f12: 'F12',
+    f13: 'F13',
+    f14: 'F14',
+    f15: 'F15',
+    f16: 'F16',
+    f17: 'F17',
+    f18: 'F18',
+    f19: 'F19',
+    f20: 'F20',
+    f21: 'F21',
+    f22: 'F22',
+    f23: 'F23',
+    f24: 'F24',
+    f25: 'F25'
+};
+
 d3keybinding.keyCodes = {
     // Backspace key, on Mac: ⌫ (Backspace)
     '⌫': 8, backspace: 8,
 d3keybinding.keyCodes = {
     // Backspace key, on Mac: ⌫ (Backspace)
     '⌫': 8, backspace: 8,
@@ -39956,7 +40314,7 @@ function getPosition(node) {
   }
 }
 
   }
 }
 
-function svgAreas$$1(projection, context) {
+function svgAreas$$1(projection$$1, context) {
     // Patterns only work in Firefox when set directly on element.
     // (This is not a bug: https://bugzilla.mozilla.org/show_bug.cgi?id=750632)
     var patterns = {
     // Patterns only work in Firefox when set directly on element.
     // (This is not a bug: https://bugzilla.mozilla.org/show_bug.cgi?id=750632)
     var patterns = {
@@ -39991,7 +40349,7 @@ function svgAreas$$1(projection, context) {
 
 
     return function drawAreas(selection$$1, graph, entities, filter) {
 
 
     return function drawAreas(selection$$1, graph, entities, filter) {
-        var path$$1 = svgPath(projection, graph, true),
+        var path$$1 = svgPath(projection$$1, graph, true),
             areas = {},
             multipolygon;
 
             areas = {},
             multipolygon;
 
@@ -40069,13 +40427,13 @@ function svgAreas$$1(projection, context) {
 
         var fills = selection$$1.selectAll('.area-fill path.area').nodes();
 
 
         var fills = selection$$1.selectAll('.area-fill path.area').nodes();
 
-        var bisect$$1 = bisector(function(node) {
+        var bisect = bisector(function(node) {
             return -node.__data__.area(graph);
         }).left;
 
         function sortedByArea(entity) {
             if (this._parent.__data__ === 'fill') {
             return -node.__data__.area(graph);
         }).left;
 
         function sortedByArea(entity) {
             if (this._parent.__data__ === 'fill') {
-                return fills[bisect$$1(fills, -entity.area(graph))];
+                return fills[bisect(fills, -entity.area(graph))];
             }
         }
 
             }
         }
 
@@ -40097,7 +40455,7 @@ function svgAreas$$1(projection, context) {
     };
 }
 
     };
 }
 
-function svgDebug(projection, context) {
+function svgDebug(projection$$1, context) {
 
     function multipolygons(imagery) {
         return imagery.map(function(data$$1) {
 
     function multipolygons(imagery) {
         return imagery.map(function(data$$1) {
@@ -40114,7 +40472,7 @@ function svgDebug(projection, context) {
             showsImagery = context.getDebug('imagery'),
             showsImperial = context.getDebug('imperial'),
             showsDriveLeft = context.getDebug('driveLeft'),
             showsImagery = context.getDebug('imagery'),
             showsImperial = context.getDebug('imperial'),
             showsDriveLeft = context.getDebug('driveLeft'),
-            path$$1 = index$4(projection);
+            path$$1 = index$4(projection$$1);
 
 
         var debugData = [];
 
 
         var debugData = [];
@@ -42920,7 +43278,7 @@ var toGeoJSON = (function() {
 module.exports = toGeoJSON;
 });
 
 module.exports = toGeoJSON;
 });
 
-function svgGpx(projection, context, dispatch$$1) {
+function svgGpx(projection$$1, context, dispatch$$1) {
     var showLabels = true,
         detected = utilDetect(),
         layer;
     var showLabels = true,
         detected = utilDetect(),
         layer;
@@ -42983,7 +43341,7 @@ function svgGpx(projection, context, dispatch$$1) {
             .merge(paths);
 
 
             .merge(paths);
 
 
-        var path$$1 = index$4(projection);
+        var path$$1 = index$4(projection$$1);
 
         paths
             .attr('d', path$$1);
 
         paths
             .attr('d', path$$1);
@@ -43114,8 +43472,8 @@ function svgGpx(projection, context, dispatch$$1) {
         if (!this.hasGpx()) return this;
         var geojson = svgGpx.geojson;
 
         if (!this.hasGpx()) return this;
         var geojson = svgGpx.geojson;
 
-        var map$$1 = context.map(),
-            viewport = map$$1.trimmedExtent().polygon(),
+        var map = context.map(),
+            viewport = map.trimmedExtent().polygon(),
             coords = lodash.reduce(geojson.features, function(coords, feature) {
                 var c = feature.geometry.coordinates;
 
             coords = lodash.reduce(geojson.features, function(coords, feature) {
                 var c = feature.geometry.coordinates;
 
@@ -43141,7 +43499,7 @@ function svgGpx(projection, context, dispatch$$1) {
 
         if (!geoPolygonIntersectsPolygon(viewport, coords, true)) {
             var extent$$1 = geoExtent$$1(bounds({ type: 'LineString', coordinates: coords }));
 
         if (!geoPolygonIntersectsPolygon(viewport, coords, true)) {
             var extent$$1 = geoExtent$$1(bounds({ type: 'LineString', coordinates: coords }));
-            map$$1.centerZoom(extent$$1.center(), map$$1.trimmedExtentZoom(extent$$1));
+            map.centerZoom(extent$$1.center(), map.trimmedExtentZoom(extent$$1));
         }
 
         return this;
         }
 
         return this;
@@ -43165,8 +43523,8 @@ function svgIcon(name, svgklass, useklass) {
     };
 }
 
     };
 }
 
-function svgLabels(projection, context) {
-    var path$$1 = index$4(projection),
+function svgLabels(projection$$1, context) {
+    var path$$1 = index$4(projection$$1),
         detected = utilDetect(),
         baselineHack = (detected.ie || detected.browser.toLowerCase() === 'edge'),
         rdrawn = index$9(),
         detected = utilDetect(),
         baselineHack = (detected.ie || detected.browser.toLowerCase() === 'edge'),
         rdrawn = index$9(),
@@ -43505,7 +43863,7 @@ function svgLabels(projection, context) {
                     rtl: [-15, y, 'end']
                 };
 
                     rtl: [-15, y, 'end']
                 };
 
-            var coord = projection(entity.loc),
+            var coord = projection$$1(entity.loc),
                 margin = 2,
                 offset = pointOffsets[textDirection],
                 p = {
                 margin = 2,
                 offset = pointOffsets[textDirection],
                 p = {
@@ -43541,7 +43899,7 @@ function svgLabels(projection, context) {
 
         function getLineLabel(entity, width, height) {
             var viewport = geoExtent$$1(context.projection.clipExtent()).polygon(),
 
         function getLineLabel(entity, width, height) {
             var viewport = geoExtent$$1(context.projection.clipExtent()).polygon(),
-                nodes = lodash.map(graph.childNodes(entity), 'loc').map(projection),
+                nodes = lodash.map(graph.childNodes(entity), 'loc').map(projection$$1),
                 length = geoPathLength(nodes);
 
             if (length < width + 20) return;
                 length = geoPathLength(nodes);
 
             if (length < width + 20) return;
@@ -43564,7 +43922,7 @@ function svgLabels(projection, context) {
                     continue;
                 }
 
                     continue;
                 }
 
-                var isReverse = reverse(sub);
+                var isReverse = reverse$$1(sub);
                 if (isReverse) {
                     sub = sub.reverse();
                 }
                 if (isReverse) {
                     sub = sub.reverse();
                 }
@@ -43602,7 +43960,7 @@ function svgLabels(projection, context) {
                 }
             }
 
                 }
             }
 
-            function reverse(p) {
+            function reverse$$1(p) {
                 var angle = Math.atan2(p[1][1] - p[0][1], p[1][0] - p[0][0]);
                 return !(p[0][0] < p[p.length - 1][0] && angle < Math.PI/2 && angle > -Math.PI/2);
             }
                 var angle = Math.atan2(p[1][1] - p[0][1], p[1][0] - p[0][0]);
                 return !(p[0][0] < p[p.length - 1][0] && angle < Math.PI/2 && angle > -Math.PI/2);
             }
@@ -43650,7 +44008,7 @@ function svgLabels(projection, context) {
         function getAreaLabel(entity, width, height) {
             var centroid = path$$1.centroid(entity.asGeoJSON(graph, true)),
                 extent$$1 = entity.extent(graph),
         function getAreaLabel(entity, width, height) {
             var centroid = path$$1.centroid(entity.asGeoJSON(graph, true)),
                 extent$$1 = entity.extent(graph),
-                entitywidth = projection(extent$$1[1])[0] - projection(extent$$1[0])[0];
+                entitywidth = projection$$1(extent$$1[1])[0] - projection$$1(extent$$1[0])[0];
 
             if (isNaN(centroid[0]) || entitywidth < 20) return;
 
 
             if (isNaN(centroid[0]) || entitywidth < 20) return;
 
@@ -43921,10 +44279,9 @@ function d3geoTile() {
 }
 
 /* global Mapillary:false */
 }
 
 /* global Mapillary:false */
-var apibase = 'https://a.mapillary.com/v2/';
+var apibase = 'https://a.mapillary.com/v3/';
 var viewercss = 'mapillary-js/mapillary.min.css';
 var viewerjs = 'mapillary-js/mapillary.min.js';
 var viewercss = 'mapillary-js/mapillary.min.css';
 var viewerjs = 'mapillary-js/mapillary.min.js';
-var trafficocss = 'traffico/stylesheets/traffico.css';
 var clientId = 'NzNRM2otQkR2SHJzaXJmNmdQWVQ0dzo1ZWYyMmYwNjdmNDdlNmVi';
 var maxResults = 1000;
 var tileZoom = 14;
 var clientId = 'NzNRM2otQkR2SHJzaXJmNmdQWVQ0dzo1ZWYyMmYwNjdmNDdlNmVi';
 var maxResults = 1000;
 var tileZoom = 14;
@@ -43933,6 +44290,7 @@ var mapillaryCache;
 var mapillaryClicks;
 var mapillaryImage;
 var mapillarySignDefs;
 var mapillaryClicks;
 var mapillaryImage;
 var mapillarySignDefs;
+var mapillarySignSprite;
 var mapillaryViewer;
 
 
 var mapillaryViewer;
 
 
@@ -43963,19 +44321,19 @@ function maxPageAtZoom(z) {
 }
 
 
 }
 
 
-function getTiles(projection) {
-    var s = projection.scale() * 2 * Math.PI,
+function getTiles(projection$$1) {
+    var s = projection$$1.scale() * 2 * Math.PI,
         z = Math.max(Math.log(s) / Math.log(2) - 8, 0),
         ts = 256 * Math.pow(2, z - tileZoom),
         origin = [
         z = Math.max(Math.log(s) / Math.log(2) - 8, 0),
         ts = 256 * Math.pow(2, z - tileZoom),
         origin = [
-            s / 2 - projection.translate()[0],
-            s / 2 - projection.translate()[1]];
+            s / 2 - projection$$1.translate()[0],
+            s / 2 - projection$$1.translate()[1]];
 
     return d3geoTile()
         .scaleExtent([tileZoom, tileZoom])
         .scale(s)
 
     return d3geoTile()
         .scaleExtent([tileZoom, tileZoom])
         .scale(s)
-        .size(projection.clipExtent()[1])
-        .translate(projection.translate())()
+        .size(projection$$1.clipExtent()[1])
+        .translate(projection$$1.translate())()
         .map(function(tile) {
             var x = tile[0] * ts - origin[0],
                 y = tile[1] * ts - origin[1];
         .map(function(tile) {
             var x = tile[0] * ts - origin[0],
                 y = tile[1] * ts - origin[1];
@@ -43984,19 +44342,19 @@ function getTiles(projection) {
                 id: tile.toString(),
                 xyz: tile,
                 extent: geoExtent$$1(
                 id: tile.toString(),
                 xyz: tile,
                 extent: geoExtent$$1(
-                    projection.invert([x, y + ts]),
-                    projection.invert([x + ts, y])
+                    projection$$1.invert([x, y + ts]),
+                    projection$$1.invert([x + ts, y])
                 )
             };
         });
 }
 
 
                 )
             };
         });
 }
 
 
-function loadTiles(which, url, projection) {
-    var s = projection.scale() * 2 * Math.PI,
+function loadTiles(which, url, projection$$1) {
+    var s = projection$$1.scale() * 2 * Math.PI,
         currZoom = Math.floor(Math.max(Math.log(s) / Math.log(2) - 8, 0));
 
         currZoom = Math.floor(Math.max(Math.log(s) / Math.log(2) - 8, 0));
 
-    var tiles = getTiles(projection).filter(function(t) {
+    var tiles = getTiles(projection$$1).filter(function(t) {
             return !nearNullIsland(t.xyz[0], t.xyz[1], t.xyz[2]);
         });
 
             return !nearNullIsland(t.xyz[0], t.xyz[1], t.xyz[2]);
         });
 
@@ -44016,24 +44374,32 @@ function loadNextTilePage(which, currZoom, url, tile) {
     var cache = mapillaryCache[which],
         rect = tile.extent.rectangle(),
         maxPages = maxPageAtZoom(currZoom),
     var cache = mapillaryCache[which],
         rect = tile.extent.rectangle(),
         maxPages = maxPageAtZoom(currZoom),
-        nextPage = cache.nextPage[tile.id] || 0;
+        nextPage = cache.nextPage[tile.id] || 0,
+        nextURL = cache.nextURL[tile.id] || url +
+            utilQsString({
+                per_page: maxResults,
+                page: nextPage,
+                client_id: clientId,
+                bbox: [rect[0], rect[1], rect[2], rect[3]].join(','),
+            });
 
     if (nextPage > maxPages) return;
 
     var id = tile.id + ',' + String(nextPage);
     if (cache.loaded[id] || cache.inflight[id]) return;
 
     if (nextPage > maxPages) return;
 
     var id = tile.id + ',' + String(nextPage);
     if (cache.loaded[id] || cache.inflight[id]) return;
+    cache.inflight[id] = request(nextURL)
+        .mimeType('application/json')
+        .response(function(xhr) {
+            var linkHeader = xhr.getResponseHeader('Link');
+            if (linkHeader) {
+                var pagination = parsePagination(xhr.getResponseHeader('Link'));
+                if (pagination.next) {
+                    cache.nextURL[tile.id] = pagination.next;
+                }
+            }
 
 
-    cache.inflight[id] = json(url +
-        utilQsString({
-            geojson: 'true',
-            limit: maxResults,
-            page: nextPage,
-            client_id: clientId,
-            min_lon: rect[0],
-            min_lat: rect[1],
-            max_lon: rect[2],
-            max_lat: rect[3]
-        }), function(err, data) {
+            return JSON.parse(xhr.responseText); })
+        .get(function(err, data) {
             cache.loaded[id] = true;
             delete cache.inflight[id];
             if (err || !data.features || !data.features.length) return;
             cache.loaded[id] = true;
             delete cache.inflight[id];
             if (err || !data.features || !data.features.length) return;
@@ -44045,8 +44411,8 @@ function loadNextTilePage(which, currZoom, url, tile) {
                 feature = data.features[i];
                 loc = feature.geometry.coordinates;
                 d = { key: feature.properties.key, loc: loc };
                 feature = data.features[i];
                 loc = feature.geometry.coordinates;
                 d = { key: feature.properties.key, loc: loc };
-                if (which === 'images') d.ca = feature.properties.ca;
-                if (which === 'signs') d.signs = feature.properties.rects;
+                if (which === 'images') d = { ca: feature.properties.ca, key: feature.properties.key, loc: loc };
+                if (which === 'signs') d = { key: feature.properties.detections[0].image_key, loc: loc, value: feature.properties.value };
 
                 features.push({minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d});
             }
 
                 features.push({minX: loc[0], minY: loc[1], maxX: loc[0], maxY: loc[1], data: d});
             }
@@ -44055,21 +44421,37 @@ function loadNextTilePage(which, currZoom, url, tile) {
 
             if (which === 'images') dispatch$2.call('loadedImages');
             if (which === 'signs') dispatch$2.call('loadedSigns');
 
             if (which === 'images') dispatch$2.call('loadedImages');
             if (which === 'signs') dispatch$2.call('loadedSigns');
-
             if (data.features.length === maxResults) {  // more pages to load
                 cache.nextPage[tile.id] = nextPage + 1;
                 loadNextTilePage(which, currZoom, url, tile);
             } else {
                 cache.nextPage[tile.id] = Infinity;     // no more pages to load
             }
             if (data.features.length === maxResults) {  // more pages to load
                 cache.nextPage[tile.id] = nextPage + 1;
                 loadNextTilePage(which, currZoom, url, tile);
             } else {
                 cache.nextPage[tile.id] = Infinity;     // no more pages to load
             }
+        });
+}
+
+// extract links to pages of API results
+function parsePagination(links) {
+    return links.split(',').map(function(rel) {
+        var elements = rel.split(';');
+        if (elements.length === 2) {
+            return [
+                /<(.+)>/.exec(elements[0])[1],
+                /rel="(.+)"/.exec(elements[1])[1]
+                ];
+        } else {
+            return ['',''];
         }
         }
-    );
+    }).reduce(function(pagination, val) {
+        pagination[val[1]] = val[0];
+        return pagination;
+    }, {});
 }
 
 
 // partition viewport into `psize` x `psize` regions
 }
 
 
 // partition viewport into `psize` x `psize` regions
-function partitionViewport(psize, projection) {
-    var dimensions = projection.clipExtent()[1];
+function partitionViewport(psize, projection$$1) {
+    var dimensions = projection$$1.clipExtent()[1];
     psize = psize || 16;
     var cols = sequence(0, dimensions[0], psize),
         rows = sequence(0, dimensions[1], psize),
     psize = psize || 16;
     var cols = sequence(0, dimensions[0], psize),
         rows = sequence(0, dimensions[1], psize),
@@ -44080,7 +44462,7 @@ function partitionViewport(psize, projection) {
             var min$$1 = [x, y + psize],
                 max$$1 = [x + psize, y];
             partitions.push(
             var min$$1 = [x, y + psize],
                 max$$1 = [x + psize, y];
             partitions.push(
-                geoExtent$$1(projection.invert(min$$1), projection.invert(max$$1)));
+                geoExtent$$1(projection$$1.invert(min$$1), projection$$1.invert(max$$1)));
         });
     });
 
         });
     });
 
@@ -44089,10 +44471,10 @@ function partitionViewport(psize, projection) {
 
 
 // no more than `limit` results per partition.
 
 
 // no more than `limit` results per partition.
-function searchLimited(psize, limit, projection, rtree) {
+function searchLimited(psize, limit, projection$$1, rtree) {
     limit = limit || 3;
 
     limit = limit || 3;
 
-    var partitions = partitionViewport(psize, projection);
+    var partitions = partitionViewport(psize, projection$$1);
     return lodash.flatten(lodash.compact(lodash.map(partitions, function(extent$$1) {
         return rtree.search(extent$$1.bbox())
             .slice(0, limit)
     return lodash.flatten(lodash.compact(lodash.map(partitions, function(extent$$1) {
         return rtree.search(extent$$1.bbox())
             .slice(0, limit)
@@ -44125,8 +44507,8 @@ var serviceMapillary = {
         }
 
         mapillaryCache = {
         }
 
         mapillaryCache = {
-            images: { inflight: {}, loaded: {}, nextPage: {}, rtree: index$9() },
-            signs:  { inflight: {}, loaded: {}, nextPage: {}, rtree: index$9() }
+            images: { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: index$9() },
+            signs:  { inflight: {}, loaded: {}, nextPage: {}, nextURL: {}, rtree: index$9() }
         };
 
         mapillaryImage = null;
         };
 
         mapillaryImage = null;
@@ -44134,15 +44516,15 @@ var serviceMapillary = {
     },
 
 
     },
 
 
-    images: function(projection) {
+    images: function(projection$$1) {
         var psize = 16, limit = 3;
         var psize = 16, limit = 3;
-        return searchLimited(psize, limit, projection, mapillaryCache.images.rtree);
+        return searchLimited(psize, limit, projection$$1, mapillaryCache.images.rtree);
     },
 
 
     },
 
 
-    signs: function(projection) {
+    signs: function(projection$$1) {
         var psize = 32, limit = 3;
         var psize = 32, limit = 3;
-        return searchLimited(psize, limit, projection, mapillaryCache.signs.rtree);
+        return searchLimited(psize, limit, projection$$1, mapillaryCache.signs.rtree);
     },
 
 
     },
 
 
@@ -44155,44 +44537,39 @@ var serviceMapillary = {
 
 
     signHTML: function(d) {
 
 
     signHTML: function(d) {
-        if (!mapillarySignDefs) return;
-
-        var detectionPackage = d.signs[0].package,
-            type = d.signs[0].type,
-            country = detectionPackage.split('_')[1];
+        if (!mapillarySignDefs || !mapillarySignSprite) return;
+        var position = mapillarySignDefs[d.value];
+        if (!position) return '<div></div>';
+        var iconStyle = [
+            'background-image:url(' + mapillarySignSprite + ')',
+            'background-repeat:no-repeat',
+            'height:' + position.height + 'px',
+            'width:' + position.width + 'px',
+            'background-position-x:-' + position.x + 'px',
+            'background-position-y:-' + position.y + 'px',
+        ];
 
 
-        return mapillarySignDefs[country][type];
+        return '<div style="' + iconStyle.join(';') +'"></div>';
     },
 
 
     },
 
 
-    loadImages: function(projection) {
-        var url = apibase + 'search/im/geojson?';
-        loadTiles('images', url, projection);
+    loadImages: function(projection$$1) {
+        var url = apibase + 'images?';
+        loadTiles('images', url, projection$$1);
     },
 
 
     },
 
 
-    loadSigns: function(context, projection) {
-        var url = apibase + 'search/im/geojson/or?';
-        loadTiles('signs', url, projection);
-
-        // load traffico css
-        select('head').selectAll('#traffico')
-            .data([0])
-            .enter()
-            .append('link')
-            .attr('id', 'traffico')
-            .attr('rel', 'stylesheet')
-            .attr('href', context.asset(trafficocss));
+    loadSigns: function(context, projection$$1) {
+        var url = apibase + 'objects?';
+        loadTiles('signs', url, projection$$1);
 
 
-        // load traffico sign defs
+        // load traffic sign defs
         if (!mapillarySignDefs) {
         if (!mapillarySignDefs) {
+            mapillarySignSprite = context.asset('img/traffic-signs/traffic-signs.png');
             mapillarySignDefs = {};
             mapillarySignDefs = {};
-            lodash.each(['au', 'br', 'ca', 'de', 'us'], function(region) {
-                json(context.asset('traffico/string-maps/' + region + '-map.json'), function(err, data) {
-                    if (err) return;
-                    if (region === 'de') region = 'eu';
-                    mapillarySignDefs[region] = data;
-                });
+            json(context.asset('img/traffic-signs/traffic-signs.json'), function(err, data) {
+                if (err) return;
+                mapillarySignDefs = data;
             });
         }
     },
             });
         }
     },
@@ -44267,6 +44644,9 @@ var serviceMapillary = {
     },
 
 
     },
 
 
+    parsePagination: parsePagination,
+
+
     updateViewer: function(imageKey, context) {
         if (!imageKey) return;
 
     updateViewer: function(imageKey, context) {
         if (!imageKey) return;
 
@@ -47309,23 +47689,23 @@ var serviceOsm = {
     },
 
 
     },
 
 
-    loadTiles: function(projection, dimensions, callback) {
+    loadTiles: function(projection$$1, dimensions, callback) {
         if (off) return;
 
         var that = this,
         if (off) return;
 
         var that = this,
-            s = projection.scale() * 2 * Math.PI,
+            s = projection$$1.scale() * 2 * Math.PI,
             z = Math.max(Math.log(s) / Math.log(2) - 8, 0),
             ts = 256 * Math.pow(2, z - tileZoom$1),
             origin = [
             z = Math.max(Math.log(s) / Math.log(2) - 8, 0),
             ts = 256 * Math.pow(2, z - tileZoom$1),
             origin = [
-                s / 2 - projection.translate()[0],
-                s / 2 - projection.translate()[1]
+                s / 2 - projection$$1.translate()[0],
+                s / 2 - projection$$1.translate()[1]
             ];
 
         var tiles = d3geoTile()
             .scaleExtent([tileZoom$1, tileZoom$1])
             .scale(s)
             .size(dimensions)
             ];
 
         var tiles = d3geoTile()
             .scaleExtent([tileZoom$1, tileZoom$1])
             .scale(s)
             .size(dimensions)
-            .translate(projection.translate())()
+            .translate(projection$$1.translate())()
             .map(function(tile) {
                 var x = tile[0] * ts - origin[0],
                     y = tile[1] * ts - origin[1];
             .map(function(tile) {
                 var x = tile[0] * ts - origin[0],
                     y = tile[1] * ts - origin[1];
@@ -47333,8 +47713,8 @@ var serviceOsm = {
                 return {
                     id: tile.toString(),
                     extent: geoExtent$$1(
                 return {
                     id: tile.toString(),
                     extent: geoExtent$$1(
-                        projection.invert([x, y + ts]),
-                        projection.invert([x + ts, y]))
+                        projection$$1.invert([x, y + ts]),
+                        projection$$1.invert([x + ts, y]))
                 };
             });
 
                 };
             });
 
@@ -47926,7 +48306,7 @@ var services = {
     wikipedia: serviceWikipedia
 };
 
     wikipedia: serviceWikipedia
 };
 
-function svgMapillaryImages(projection, context, dispatch$$1) {
+function svgMapillaryImages(projection$$1, context, dispatch$$1) {
     var throttledRedraw = lodash.throttle(function () { dispatch$$1.call('change'); }, 1000),
         minZoom = 12,
         minViewfieldZoom = 17,
     var throttledRedraw = lodash.throttle(function () { dispatch$$1.call('change'); }, 1000),
         minZoom = 12,
         minViewfieldZoom = 17,
@@ -48009,8 +48389,8 @@ function svgMapillaryImages(projection, context, dispatch$$1) {
     }
 
 
     }
 
 
-    function transform(d) {
-        var t = svgPointTransform(projection)(d);
+    function transform$$1(d) {
+        var t = svgPointTransform(projection$$1)(d);
         if (d.ca) t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
         return t;
     }
         if (d.ca) t += ' rotate(' + Math.floor(d.ca) + ',0,0)';
         return t;
     }
@@ -48018,7 +48398,7 @@ function svgMapillaryImages(projection, context, dispatch$$1) {
 
     function update() {
         var mapillary = getMapillary(),
 
     function update() {
         var mapillary = getMapillary(),
-            data = (mapillary ? mapillary.images(projection) : []),
+            data = (mapillary ? mapillary.images(projection$$1) : []),
             imageKey = mapillary ? mapillary.selectedImage() : null;
 
         var markers = layer.selectAll('.viewfield-group')
             imageKey = mapillary ? mapillary.selectedImage() : null;
 
         var markers = layer.selectAll('.viewfield-group')
@@ -48035,7 +48415,7 @@ function svgMapillaryImages(projection, context, dispatch$$1) {
 
         markers = markers
             .merge(enter)
 
         markers = markers
             .merge(enter)
-            .attr('transform', transform);
+            .attr('transform', transform$$1);
 
 
        var viewfields = markers.selectAll('.viewfield')
 
 
        var viewfields = markers.selectAll('.viewfield')
@@ -48080,7 +48460,7 @@ function svgMapillaryImages(projection, context, dispatch$$1) {
             if (mapillary && ~~context.map().zoom() >= minZoom) {
                 editOn();
                 update();
             if (mapillary && ~~context.map().zoom() >= minZoom) {
                 editOn();
                 update();
-                mapillary.loadImages(projection);
+                mapillary.loadImages(projection$$1);
             } else {
                 editOff();
             }
             } else {
                 editOff();
             }
@@ -48110,7 +48490,7 @@ function svgMapillaryImages(projection, context, dispatch$$1) {
     return drawImages;
 }
 
     return drawImages;
 }
 
-function svgMapillarySigns(projection, context, dispatch$$1) {
+function svgMapillarySigns(projection$$1, context, dispatch$$1) {
     var throttledRedraw = lodash.throttle(function () { dispatch$$1.call('change'); }, 1000),
         minZoom = 12,
         layer = select(null),
     var throttledRedraw = lodash.throttle(function () { dispatch$$1.call('change'); }, 1000),
         minZoom = 12,
         layer = select(null),
@@ -48172,7 +48552,7 @@ function svgMapillarySigns(projection, context, dispatch$$1) {
 
     function update() {
         var mapillary = getMapillary(),
 
     function update() {
         var mapillary = getMapillary(),
-            data = (mapillary ? mapillary.signs(projection) : []),
+            data = (mapillary ? mapillary.signs(projection$$1) : []),
             imageKey = mapillary ? mapillary.selectedImage() : null;
 
         var signs = layer.selectAll('.icon-sign')
             imageKey = mapillary ? mapillary.selectedImage() : null;
 
         var signs = layer.selectAll('.icon-sign')
@@ -48196,8 +48576,8 @@ function svgMapillarySigns(projection, context, dispatch$$1) {
 
         signs
             .merge(enter)
 
         signs
             .merge(enter)
-            .attr('x', function(d) { return projection(d.loc)[0] - 16; })   // offset by -16px to
-            .attr('y', function(d) { return projection(d.loc)[1] - 16; });  // center signs on loc
+            .attr('x', function(d) { return projection$$1(d.loc)[0] - 16; })   // offset by -16px to
+            .attr('y', function(d) { return projection$$1(d.loc)[1] - 16; });  // center signs on loc
     }
 
 
     }
 
 
@@ -48221,7 +48601,7 @@ function svgMapillarySigns(projection, context, dispatch$$1) {
             if (mapillary && ~~context.map().zoom() >= minZoom) {
                 editOn();
                 update();
             if (mapillary && ~~context.map().zoom() >= minZoom) {
                 editOn();
                 update();
-                mapillary.loadSigns(context, projection);
+                mapillary.loadSigns(context, projection$$1);
             } else {
                 editOff();
             }
             } else {
                 editOff();
             }
@@ -48263,15 +48643,15 @@ function svgOsm() {
     };
 }
 
     };
 }
 
-function svgLayers(projection, context) {
+function svgLayers(projection$$1, context) {
     var dispatch$$1 = dispatch('change'),
         svg = select(null),
         layers = [
     var dispatch$$1 = dispatch('change'),
         svg = select(null),
         layers = [
-            { id: 'osm', layer: svgOsm(projection, context, dispatch$$1) },
-            { id: 'gpx', layer: svgGpx(projection, context, dispatch$$1) },
-            { id: 'mapillary-images', layer: svgMapillaryImages(projection, context, dispatch$$1) },
-            { id: 'mapillary-signs',  layer: svgMapillarySigns(projection, context, dispatch$$1) },
-            { id: 'debug', layer: svgDebug(projection, context, dispatch$$1) }
+            { id: 'osm', layer: svgOsm(projection$$1, context, dispatch$$1) },
+            { id: 'gpx', layer: svgGpx(projection$$1, context, dispatch$$1) },
+            { id: 'mapillary-images', layer: svgMapillaryImages(projection$$1, context, dispatch$$1) },
+            { id: 'mapillary-signs',  layer: svgMapillarySigns(projection$$1, context, dispatch$$1) },
+            { id: 'debug', layer: svgDebug(projection$$1, context, dispatch$$1) }
         ];
 
 
         ];
 
 
@@ -48355,7 +48735,7 @@ function svgLayers(projection, context) {
     return utilRebind(drawLayers, dispatch$$1, 'on');
 }
 
     return utilRebind(drawLayers, dispatch$$1, 'on');
 }
 
-function svgLines$$1(projection, context) {
+function svgLines$$1(projection$$1, context) {
     var detected = utilDetect();
 
     var highway_stack = {
     var detected = utilDetect();
 
     var highway_stack = {
@@ -48429,7 +48809,7 @@ function svgLines$$1(projection, context) {
         }
 
 
         }
 
 
-        var getPath = svgPath(projection, graph),
+        var getPath = svgPath(projection$$1, graph),
             ways = [],
             pathdata = {},
             onewaydata = {},
             ways = [],
             pathdata = {},
             onewaydata = {},
@@ -48452,7 +48832,7 @@ function svgLines$$1(projection, context) {
         lodash.forOwn(pathdata, function(v, k) {
             onewaydata[k] = lodash(v)
                 .filter(function(d) { return d.isOneWay(); })
         lodash.forOwn(pathdata, function(v, k) {
             onewaydata[k] = lodash(v)
                 .filter(function(d) { return d.isOneWay(); })
-                .map(svgOneWaySegments(projection, graph, 35))
+                .map(svgOneWaySegments(projection$$1, graph, 35))
                 .flatten()
                 .valueOf();
         });
                 .flatten()
                 .valueOf();
         });
@@ -48650,14 +49030,14 @@ function svgMidpoints$$1(projection, context) {
     };
 }
 
     };
 }
 
-function svgOneWaySegments(projection, graph, dt) {
+function svgOneWaySegments(projection$$1, graph, dt) {
     return function(entity) {
         var a,
             b,
             i = 0,
             offset = dt,
             segments = [],
     return function(entity) {
         var a,
             b,
             i = 0,
             offset = dt,
             segments = [],
-            clip = identity$5().clipExtent(projection.clipExtent()).stream,
+            clip = identity$5().clipExtent(projection$$1.clipExtent()).stream,
             coordinates = graph.childNodes(entity).map(function(n) {
                 return n.loc;
             });
             coordinates = graph.childNodes(entity).map(function(n) {
                 return n.loc;
             });
@@ -48667,7 +49047,7 @@ function svgOneWaySegments(projection, graph, dt) {
         geoStream({
             type: 'LineString',
             coordinates: coordinates
         geoStream({
             type: 'LineString',
             coordinates: coordinates
-        }, projection.stream(clip({
+        }, projection$$1.stream(clip({
             lineStart: function() {},
             lineEnd: function() {
                 a = null;
             lineStart: function() {},
             lineEnd: function() {
                 a = null;
@@ -48710,7 +49090,7 @@ function svgOneWaySegments(projection, graph, dt) {
     };
 }
 
     };
 }
 
-function svgPath(projection, graph, isArea) {
+function svgPath(projection$$1, graph, isArea) {
 
     // Explanation of magic numbers:
     // "padding" here allows space for strokes to extend beyond the viewport,
 
     // Explanation of magic numbers:
     // "padding" here allows space for strokes to extend beyond the viewport,
@@ -48723,13 +49103,13 @@ function svgPath(projection, graph, isArea) {
 
     var cache = {},
         padding = isArea ? 65 : 5,
 
     var cache = {},
         padding = isArea ? 65 : 5,
-        viewport = projection.clipExtent(),
+        viewport = projection$$1.clipExtent(),
         paddedExtent = [
             [viewport[0][0] - padding, viewport[0][1] - padding],
             [viewport[1][0] + padding, viewport[1][1] + padding]
         ],
         clip = identity$5().clipExtent(paddedExtent).stream,
         paddedExtent = [
             [viewport[0][0] - padding, viewport[0][1] - padding],
             [viewport[1][0] + padding, viewport[1][1] + padding]
         ],
         clip = identity$5().clipExtent(paddedExtent).stream,
-        project = projection.stream,
+        project = projection$$1.stream,
         path$$1 = index$4()
             .projection({stream: function(output) { return project(clip(output)); }});
 
         path$$1 = index$4()
             .projection({stream: function(output) { return project(clip(output)); }});
 
@@ -49028,7 +49408,7 @@ function svgTurns(projection) {
     };
 }
 
     };
 }
 
-function svgVertices$$1(projection, context) {
+function svgVertices$$1(projection$$1, context) {
     var radiuses = {
         //       z16-, z17, z18+, tagged
         shadow: [6,    7.5,   7.5,  11.5],
     var radiuses = {
         //       z16-, z17, z18+, tagged
         shadow: [6,    7.5,   7.5,  11.5],
@@ -49078,7 +49458,7 @@ function svgVertices$$1(projection, context) {
     }
 
 
     }
 
 
-    function draw(selection$$1, vertices, klass, graph, zoom$$1, siblings) {
+    function draw(selection$$1, vertices, klass, graph, zoom$$1, siblings$$1) {
 
         function icon(entity) {
             if (entity.id in icons) return icons[entity.id];
 
         function icon(entity) {
             if (entity.id in icons) return icons[entity.id];
@@ -49130,7 +49510,7 @@ function svgVertices$$1(projection, context) {
         }
 
 
         }
 
 
-        siblings = siblings || {};
+        siblings$$1 = siblings$$1 || {};
 
         var icons = {},
             z = (zoom$$1 < 17 ? 0 : zoom$$1 < 18 ? 1 : 2);
 
         var icons = {},
             z = (zoom$$1 < 17 ? 0 : zoom$$1 < 18 ? 1 : 2);
@@ -49171,8 +49551,8 @@ function svgVertices$$1(projection, context) {
 
         groups
             .merge(enter)
 
         groups
             .merge(enter)
-            .attr('transform', svgPointTransform(projection))
-            .classed('sibling', function(entity) { return entity.id in siblings; })
+            .attr('transform', svgPointTransform(projection$$1))
+            .classed('sibling', function(entity) { return entity.id in siblings$$1; })
             .classed('shared', function(entity) { return graph.isShared(entity); })
             .classed('endpoint', function(entity) { return entity.isEndpoint(graph); })
             .call(setAttributes);
             .classed('shared', function(entity) { return graph.isShared(entity); })
             .classed('endpoint', function(entity) { return entity.isEndpoint(graph); })
             .call(setAttributes);
@@ -49180,7 +49560,7 @@ function svgVertices$$1(projection, context) {
 
 
     function drawVertices(selection$$1, graph, entities, filter, extent$$1, zoom$$1) {
 
 
     function drawVertices(selection$$1, graph, entities, filter, extent$$1, zoom$$1) {
-        var siblings = siblingAndChildVertices(context.selectedIDs(), graph, extent$$1),
+        var siblings$$1 = siblingAndChildVertices(context.selectedIDs(), graph, extent$$1),
             wireframe = context.surface().classed('fill-wireframe'),
             vertices = [];
 
             wireframe = context.surface().classed('fill-wireframe'),
             vertices = [];
 
@@ -49196,7 +49576,7 @@ function svgVertices$$1(projection, context) {
             if (geometry !== 'vertex')
                 continue;
 
             if (geometry !== 'vertex')
                 continue;
 
-            if (entity.id in siblings ||
+            if (entity.id in siblings$$1 ||
                 entity.hasInterestingTags() ||
                 entity.isEndpoint(graph) ||
                 entity.isConnected(graph)) {
                 entity.hasInterestingTags() ||
                 entity.isEndpoint(graph) ||
                 entity.isConnected(graph)) {
@@ -49207,7 +49587,7 @@ function svgVertices$$1(projection, context) {
         var layer = selection$$1.selectAll('.layer-hit');
         layer.selectAll('g.vertex.vertex-persistent')
             .filter(filter)
         var layer = selection$$1.selectAll('.layer-hit');
         layer.selectAll('g.vertex.vertex-persistent')
             .filter(filter)
-            .call(draw, vertices, 'vertex-persistent', graph, zoom$$1, siblings);
+            .call(draw, vertices, 'vertex-persistent', graph, zoom$$1, siblings$$1);
 
         drawHover(selection$$1, graph, extent$$1, zoom$$1);
     }
 
         drawHover(selection$$1, graph, extent$$1, zoom$$1);
     }
@@ -50526,24 +50906,32 @@ function behaviorHash(context) {
         lat = 90 - 1e-8; // allowable latitude range
 
 
         lat = 90 - 1e-8; // allowable latitude range
 
 
-    var parser = function(map$$1, s) {
+    var parser = function(map, s) {
         var q = utilStringQs(s);
         var args = (q.map || '').split('/').map(Number);
         var q = utilStringQs(s);
         var args = (q.map || '').split('/').map(Number);
+
         if (args.length < 3 || args.some(isNaN)) {
             return true; // replace bogus hash
         if (args.length < 3 || args.some(isNaN)) {
             return true; // replace bogus hash
-        } else if (s !== formatter(map$$1).slice(1)) {
-            var mode = context.mode();
-            if (mode && mode.id.match(/^draw/) !== null) {
+
+        } else if (s !== formatter(map).slice(1)) {   // hash has changed
+            var mode = context.mode(),
+                dist = geoSphericalDistance(map.center(), [args[2], args[1]]),
+                maxdist = 500;
+
+            // Don't allow the hash location to change too much while drawing
+            // This can happen if the user accidently hit the back button.  #3996
+            if (mode && mode.id.match(/^draw/) !== null && dist > maxdist) {
                 context.enter(modeBrowse(context));
             }
                 context.enter(modeBrowse(context));
             }
-            map$$1.centerZoom([args[2], Math.min(lat, Math.max(-lat, args[1]))], args[0]);
+
+            map.centerZoom([args[2], Math.min(lat, Math.max(-lat, args[1]))], args[0]);
         }
     };
 
 
         }
     };
 
 
-    var formatter = function(map$$1) {
-        var center = map$$1.center(),
-            zoom$$1 = map$$1.zoom(),
+    var formatter = function(map) {
+        var center = map.center(),
+            zoom$$1 = map.zoom(),
             precision = Math.max(0, Math.ceil(Math.log(zoom$$1) / Math.LN2)),
             q = lodash.omit(utilStringQs(window.location.hash.substring(1)), 'comment'),
             newParams = {};
             precision = Math.max(0, Math.ceil(Math.log(zoom$$1) / Math.LN2)),
             q = lodash.omit(utilStringQs(window.location.hash.substring(1)), 'comment'),
             newParams = {};
@@ -50669,8 +51057,8 @@ function behaviorLasso(context) {
             if (!lasso) return [];
 
             var graph = context.graph(),
             if (!lasso) return [];
 
             var graph = context.graph(),
-                bounds = lasso.extent().map(context.projection.invert),
-                extent$$1 = geoExtent$$1(normalize(bounds[0], bounds[1]));
+                bounds$$1 = lasso.extent().map(context.projection.invert),
+                extent$$1 = geoExtent$$1(normalize(bounds$$1[0], bounds$$1[1]));
 
             return lodash.map(context.intersects(extent$$1).filter(function(entity) {
                 return entity.type === 'node' &&
 
             return lodash.map(context.intersects(extent$$1).filter(function(entity) {
                 return entity.type === 'node' &&
@@ -50789,30 +51177,14 @@ function behaviorOperation() {
 function behaviorPaste(context) {
     var keybinding = d3keybinding('paste');
 
 function behaviorPaste(context) {
     var keybinding = d3keybinding('paste');
 
-    function omitTag(v, k) {
-        return (
-            k === 'phone' ||
-            k === 'fax' ||
-            k === 'email' ||
-            k === 'website' ||
-            k === 'url' ||
-            k === 'note' ||
-            k === 'description' ||
-            k.indexOf('name') !== -1 ||
-            k.indexOf('wiki') === 0 ||
-            k.indexOf('addr:') === 0 ||
-            k.indexOf('contact:') === 0
-        );
-    }
-
 
     function doPaste() {
         event.preventDefault();
 
         var baseGraph = context.graph(),
             mouse$$1 = context.mouse(),
 
     function doPaste() {
         event.preventDefault();
 
         var baseGraph = context.graph(),
             mouse$$1 = context.mouse(),
-            projection = context.projection,
-            viewport = geoExtent$$1(projection.clipExtent()).polygon();
+            projection$$1 = context.projection,
+            viewport = geoExtent$$1(projection$$1.clipExtent()).polygon();
 
         if (!geoPointInPolygon(mouse$$1, viewport)) return;
 
 
         if (!geoPointInPolygon(mouse$$1, viewport)) return;
 
@@ -50833,9 +51205,6 @@ function behaviorPaste(context) {
                 newEntity = copies[id];
 
             extent$$1._extend(oldEntity.extent(oldGraph));
                 newEntity = copies[id];
 
             extent$$1._extend(oldEntity.extent(oldGraph));
-            context.perform(
-                actionChangeTags(newEntity.id, lodash.omitBy(newEntity.tags, omitTag))
-            );
 
             // Exclude child nodes from newIDs if their parent way was also copied.
             var parents = context.graph().parentWays(newEntity),
 
             // Exclude child nodes from newIDs if their parent way was also copied.
             var parents = context.graph().parentWays(newEntity),
@@ -50853,10 +51222,10 @@ function behaviorPaste(context) {
         }
 
         // Put pasted objects where mouse pointer is..
         }
 
         // Put pasted objects where mouse pointer is..
-        var center = projection(extent$$1.center()),
+        var center = projection$$1(extent$$1.center()),
             delta = [ mouse$$1[0] - center[0], mouse$$1[1] - center[1] ];
 
             delta = [ mouse$$1[0] - center[0], mouse$$1[1] - center[1] ];
 
-        context.perform(actionMove(newIDs, delta, projection));
+        context.perform(actionMove(newIDs, delta, projection$$1));
         context.enter(modeMove$$1(context, newIDs, baseGraph));
     }
 
         context.enter(modeMove$$1(context, newIDs, baseGraph));
     }
 
@@ -52702,15 +53071,15 @@ function modeRotate$$1(context, entityIDs) {
         }
 
         // projection changed, recalculate pivot
         }
 
         // projection changed, recalculate pivot
-        var projection = context.projection;
-        var currTransform = projection.transform();
+        var projection$$1 = context.projection;
+        var currTransform = projection$$1.transform();
         if (!prevTransform ||
             currTransform.k !== prevTransform.k ||
             currTransform.x !== prevTransform.x ||
             currTransform.y !== prevTransform.y) {
 
             var nodes = utilGetAllNodes(entityIDs, context.graph()),
         if (!prevTransform ||
             currTransform.k !== prevTransform.k ||
             currTransform.x !== prevTransform.x ||
             currTransform.y !== prevTransform.y) {
 
             var nodes = utilGetAllNodes(entityIDs, context.graph()),
-                points = nodes.map(function(n) { return projection(n.loc); });
+                points = nodes.map(function(n) { return projection$$1(n.loc); });
 
             pivot = d3polygonCentroid(d3polygonHull(points));
             prevAngle = undefined;
 
             pivot = d3polygonCentroid(d3polygonHull(points));
             prevAngle = undefined;
@@ -52723,7 +53092,7 @@ function modeRotate$$1(context, entityIDs) {
         if (typeof prevAngle === 'undefined') prevAngle = currAngle;
         var delta = currAngle - prevAngle;
 
         if (typeof prevAngle === 'undefined') prevAngle = currAngle;
         var delta = currAngle - prevAngle;
 
-        fn(actionRotate(entityIDs, pivot, delta, projection), annotation);
+        fn(actionRotate(entityIDs, pivot, delta, projection$$1), annotation);
 
         prevTransform = currTransform;
         prevAngle = currAngle;
 
         prevTransform = currTransform;
         prevAngle = currAngle;
@@ -52899,11 +53268,11 @@ function modeSave$$1(context) {
                 return utilDisplayName(entity) || (utilDisplayType(entity.id) + ' ' + entity.id);
             }
 
                 return utilDisplayName(entity) || (utilDisplayType(entity.id) + ' ' + entity.id);
             }
 
-            function compareVersions(local$$1, remote) {
-                if (local$$1.version !== remote.version) return false;
+            function compareVersions(local, remote) {
+                if (local.version !== remote.version) return false;
 
 
-                if (local$$1.type === 'way') {
-                    var children = lodash.union(local$$1.nodes, remote.nodes);
+                if (local.type === 'way') {
+                    var children = lodash.union(local.nodes, remote.nodes);
 
                     for (var i = 0; i < children.length; i++) {
                         var a = localGraph.hasEntity(children[i]),
 
                     for (var i = 0; i < children.length; i++) {
                         var a = localGraph.hasEntity(children[i]),
@@ -52917,10 +53286,10 @@ function modeSave$$1(context) {
             }
 
             lodash.each(toCheck, function(id) {
             }
 
             lodash.each(toCheck, function(id) {
-                var local$$1 = localGraph.entity(id),
+                var local = localGraph.entity(id),
                     remote = remoteGraph.entity(id);
 
                     remote = remoteGraph.entity(id);
 
-                if (compareVersions(local$$1, remote)) return;
+                if (compareVersions(local, remote)) return;
 
                 var action = actionMergeRemoteChanges,
                     merge$$1 = action(id, localGraph, remoteGraph, formatUser);
 
                 var action = actionMergeRemoteChanges,
                     merge$$1 = action(id, localGraph, remoteGraph, formatUser);
@@ -52937,7 +53306,7 @@ function modeSave$$1(context) {
 
                 conflicts.push({
                     id: id,
 
                 conflicts.push({
                     id: id,
-                    name: entityName(local$$1),
+                    name: entityName(local),
                     details: mergeConflicts,
                     chosen: 1,
                     choices: [
                     details: mergeConflicts,
                     chosen: 1,
                     choices: [
@@ -53145,7 +53514,7 @@ function modeSave$$1(context) {
 
 // Translate a MacOS key command into the appropriate Windows/Linux equivalent.
 // For example, ⌘Z -> Ctrl+Z
 
 // Translate a MacOS key command into the appropriate Windows/Linux equivalent.
 // For example, ⌘Z -> Ctrl+Z
-function uiCmd(code) {
+var uiCmd = function (code) {
     var detected = utilDetect();
 
     if (detected.os === 'mac') {
     var detected = utilDetect();
 
     if (detected.os === 'mac') {
@@ -53174,7 +53543,32 @@ function uiCmd(code) {
     }
 
     return result;
     }
 
     return result;
-}
+};
+
+
+// return a display-focused string for a given keyboard code
+uiCmd.display = function(code) {
+    if (code.length !== 1) return code;
+
+    var detected = utilDetect();
+    var mac = (detected.os === 'mac');
+    var replacements = {
+        '⌘': mac ? '⌘ ' + t('shortcuts.key.cmd')    : t('shortcuts.key.ctrl'),
+        '⇧': mac ? '⇧ ' + t('shortcuts.key.shift')  : t('shortcuts.key.shift'),
+        '⌥': mac ? '⌥ ' + t('shortcuts.key.option') : t('shortcuts.key.alt'),
+        '⌃': mac ? '⌃ ' + t('shortcuts.key.ctrl')   : t('shortcuts.key.ctrl'),
+        '⌫': mac ? '⌫ ' + t('shortcuts.key.delete') : t('shortcuts.key.backspace'),
+        '⌦': mac ? '⌦ ' + t('shortcuts.key.del')    : t('shortcuts.key.del'),
+        '↖': mac ? '↖ ' + t('shortcuts.key.pgup')   : t('shortcuts.key.pgup'),
+        '↘': mac ? '↘ ' + t('shortcuts.key.pgdn')   : t('shortcuts.key.pgdn'),
+        '⇞': mac ? '⇞ ' + t('shortcuts.key.home')   : t('shortcuts.key.home'),
+        '⇟': mac ? '⇟ ' + t('shortcuts.key.end')    : t('shortcuts.key.end'),
+        '↵': mac ? '↵ ' + t('shortcuts.key.return') : t('shortcuts.key.enter'),
+        '⎋': mac ? '⎋ ' + t('shortcuts.key.esc')    : t('shortcuts.key.esc'),
+    };
+
+    return replacements[code] || code;
+};
 
 // deprecation warning - Radial Menu to be removed in iD v3
 var relatedParent;
 
 // deprecation warning - Radial Menu to be removed in iD v3
 var relatedParent;
@@ -53187,7 +53581,7 @@ function modeSelect(context, selectedIDs) {
     };
 
     var keybinding = d3keybinding('select'),
     };
 
     var keybinding = d3keybinding('select'),
-        timeout$$1 = null,
+        timeout = null,
         behaviors = [
             behaviorCopy(context),
             behaviorPaste(context),
         behaviors = [
             behaviorCopy(context),
             behaviorPaste(context),
@@ -53567,10 +53961,10 @@ function modeSelect(context, selectedIDs) {
         });
 
         keybinding
         });
 
         keybinding
-            .on(['[','pgup'], previousVertex)
+            .on(['[', 'pgup'], previousVertex)
             .on([']', 'pgdown'], nextVertex)
             .on([']', 'pgdown'], nextVertex)
-            .on([uiCmd('⌘['), 'home'], firstVertex)
-            .on([uiCmd('⌘]'), 'end'], lastVertex)
+            .on(['{', uiCmd('⌘['), 'home'], firstVertex)
+            .on(['}', uiCmd('⌘]'), 'end'], lastVertex)
             .on(['\\', 'pause'], nextParent)
             .on('⎋', esc, true)
             .on('space', toggleMenu);
             .on(['\\', 'pause'], nextParent)
             .on('⎋', esc, true)
             .on('space', toggleMenu);
@@ -53620,7 +54014,7 @@ function modeSelect(context, selectedIDs) {
             context.map().pan([0,0]);  // full redraw, to adjust z-sorting #2914
         }
 
             context.map().pan([0,0]);  // full redraw, to adjust z-sorting #2914
         }
 
-        timeout$$1 = window.setTimeout(function() {
+        timeout = window.setTimeout(function() {
             positionMenu();
             if (!suppressMenu) {
                 showMenu();
             positionMenu();
             if (!suppressMenu) {
                 showMenu();
@@ -53631,7 +54025,7 @@ function modeSelect(context, selectedIDs) {
 
 
     mode.exit = function() {
 
 
     mode.exit = function() {
-        if (timeout$$1) window.clearTimeout(timeout$$1);
+        if (timeout) window.clearTimeout(timeout);
 
         if (inspector) wrap.call(inspector.close);
 
 
         if (inspector) wrap.call(inspector.close);
 
@@ -54013,7 +54407,7 @@ rendererBackgroundSource.Custom = function(template) {
 function rendererTileLayer(context) {
     var tileSize = 256,
         tile = d3geoTile(),
 function rendererTileLayer(context) {
     var tileSize = 256,
         tile = d3geoTile(),
-        projection,
+        projection$$1,
         cache = {},
         tileOrigin,
         z,
         cache = {},
         tileOrigin,
         z,
@@ -54040,12 +54434,12 @@ function rendererTileLayer(context) {
     }
 
 
     }
 
 
-    function atZoom(t, distance) {
-        var power = Math.pow(2, distance);
+    function atZoom(t, distance$$1) {
+        var power = Math.pow(2, distance$$1);
         return [
             Math.floor(t[0] * power),
             Math.floor(t[1] * power),
         return [
             Math.floor(t[0] * power),
             Math.floor(t[1] * power),
-            t[2] + distance];
+            t[2] + distance$$1];
     }
 
 
     }
 
 
@@ -54079,14 +54473,14 @@ function rendererTileLayer(context) {
 
     // Update tiles based on current state of `projection`.
     function background(selection$$1) {
 
     // Update tiles based on current state of `projection`.
     function background(selection$$1) {
-        tile.scale(projection.scale() * 2 * Math.PI)
-            .translate(projection.translate());
+        tile.scale(projection$$1.scale() * 2 * Math.PI)
+            .translate(projection$$1.translate());
 
         tileOrigin = [
 
         tileOrigin = [
-            projection.scale() * Math.PI - projection.translate()[0],
-            projection.scale() * Math.PI - projection.translate()[1]];
+            projection$$1.scale() * Math.PI - projection$$1.translate()[0],
+            projection$$1.scale() * Math.PI - projection$$1.translate()[1]];
 
 
-        z = Math.max(Math.log(projection.scale() * 2 * Math.PI) / Math.log(2) - 8, 0);
+        z = Math.max(Math.log(projection$$1.scale() * 2 * Math.PI) / Math.log(2) - 8, 0);
 
         render(selection$$1);
     }
 
         render(selection$$1);
     }
@@ -54203,8 +54597,8 @@ function rendererTileLayer(context) {
 
 
     background.projection = function(_) {
 
 
     background.projection = function(_) {
-        if (!arguments.length) return projection;
-        projection = _;
+        if (!arguments.length) return projection$$1;
+        projection$$1 = _;
         return background;
     };
 
         return background;
     };
 
@@ -54977,21 +55371,21 @@ function rendererMap(context) {
 
     var dimensions = [1, 1],
         dispatch$$1 = dispatch('move', 'drawn'),
 
     var dimensions = [1, 1],
         dispatch$$1 = dispatch('move', 'drawn'),
-        projection = context.projection,
+        projection$$1 = context.projection,
         curtainProjection = context.curtainProjection,
         dblclickEnabled = true,
         redrawEnabled = true,
         curtainProjection = context.curtainProjection,
         dblclickEnabled = true,
         redrawEnabled = true,
-        transformStart = projection.transform(),
+        transformStart = projection$$1.transform(),
         transformLast,
         transformed = false,
         minzoom = 0,
         transformLast,
         transformed = false,
         minzoom = 0,
-        drawLayers = svgLayers(projection, context),
-        drawPoints = svgPoints$$1(projection, context),
-        drawVertices = svgVertices$$1(projection, context),
-        drawLines = svgLines$$1(projection, context),
-        drawAreas = svgAreas$$1(projection, context),
-        drawMidpoints = svgMidpoints$$1(projection, context),
-        drawLabels = svgLabels(projection, context),
+        drawLayers = svgLayers(projection$$1, context),
+        drawPoints = svgPoints$$1(projection$$1, context),
+        drawVertices = svgVertices$$1(projection$$1, context),
+        drawLines = svgLines$$1(projection$$1, context),
+        drawAreas = svgAreas$$1(projection$$1, context),
+        drawMidpoints = svgMidpoints$$1(projection$$1, context),
+        drawLabels = svgLabels(projection$$1, context),
         supersurface = select(null),
         wrapper = select(null),
         surface = select(null),
         supersurface = select(null),
         wrapper = select(null),
         surface = select(null),
@@ -55007,7 +55401,7 @@ function rendererMap(context) {
     var _selection = select(null);
 
 
     var _selection = select(null);
 
 
-    function map$$1(selection$$1) {
+    function map(selection$$1) {
 
         _selection = selection$$1;
 
 
         _selection = selection$$1;
 
@@ -55031,7 +55425,7 @@ function rendererMap(context) {
                     );
                 }
                 if (!followSelected && stack$$1.transform) {
                     );
                 }
                 if (!followSelected && stack$$1.transform) {
-                    map$$1.transformEase(stack$$1.transform);
+                    map.transformEase(stack$$1.transform);
                 }
             });
 
                 }
             });
 
@@ -55050,7 +55444,7 @@ function rendererMap(context) {
         selection$$1
             .on('dblclick.map', dblClick)
             .call(zoom$$1)
         selection$$1
             .on('dblclick.map', dblClick)
             .call(zoom$$1)
-            .call(zoom$$1.transform, projection.transform());
+            .call(zoom$$1.transform, projection$$1.transform());
 
         supersurface = selection$$1.append('div')
             .attr('id', 'supersurface')
 
         supersurface = selection$$1.append('div')
             .attr('id', 'supersurface')
@@ -55062,7 +55456,7 @@ function rendererMap(context) {
             .append('div')
             .attr('class', 'layer layer-data');
 
             .append('div')
             .attr('class', 'layer layer-data');
 
-        map$$1.surface = surface = wrapper
+        map.surface = surface = wrapper
             .call(drawLayers)
             .selectAll('.surface')
             .attr('id', 'surface');
             .call(drawLayers)
             .selectAll('.surface')
             .attr('id', 'surface');
@@ -55081,18 +55475,18 @@ function rendererMap(context) {
                 mousemove = event;
             })
             .on('mouseover.vertices', function() {
                 mousemove = event;
             })
             .on('mouseover.vertices', function() {
-                if (map$$1.editable() && !transformed) {
+                if (map.editable() && !transformed) {
                     var hover = event.target.__data__;
                     surface.selectAll('.data-layer-osm')
                     var hover = event.target.__data__;
                     surface.selectAll('.data-layer-osm')
-                        .call(drawVertices.drawHover, context.graph(), hover, map$$1.extent(), map$$1.zoom());
+                        .call(drawVertices.drawHover, context.graph(), hover, map.extent(), map.zoom());
                     dispatch$$1.call('drawn', this, {full: false});
                 }
             })
             .on('mouseout.vertices', function() {
                     dispatch$$1.call('drawn', this, {full: false});
                 }
             })
             .on('mouseout.vertices', function() {
-                if (map$$1.editable() && !transformed) {
+                if (map.editable() && !transformed) {
                     var hover = event.relatedTarget && event.relatedTarget.__data__;
                     surface.selectAll('.data-layer-osm')
                     var hover = event.relatedTarget && event.relatedTarget.__data__;
                     surface.selectAll('.data-layer-osm')
-                        .call(drawVertices.drawHover, context.graph(), hover, map$$1.extent(), map$$1.zoom());
+                        .call(drawVertices.drawHover, context.graph(), hover, map.extent(), map.zoom());
                     dispatch$$1.call('drawn', this, {full: false});
                 }
             });
                     dispatch$$1.call('drawn', this, {full: false});
                 }
             });
@@ -55101,20 +55495,20 @@ function rendererMap(context) {
             .call(context.background());
 
         context.on('enter.map', function() {
             .call(context.background());
 
         context.on('enter.map', function() {
-            if (map$$1.editable() && !transformed) {
-                var all = context.intersects(map$$1.extent()),
+            if (map.editable() && !transformed) {
+                var all = context.intersects(map.extent()),
                     filter = utilFunctor(true),
                     graph = context.graph();
 
                 all = context.features().filter(all, graph);
                 surface.selectAll('.data-layer-osm')
                     filter = utilFunctor(true),
                     graph = context.graph();
 
                 all = context.features().filter(all, graph);
                 surface.selectAll('.data-layer-osm')
-                    .call(drawVertices, graph, all, filter, map$$1.extent(), map$$1.zoom())
-                    .call(drawMidpoints, graph, all, filter, map$$1.trimmedExtent());
+                    .call(drawVertices, graph, all, filter, map.extent(), map.zoom())
+                    .call(drawMidpoints, graph, all, filter, map.trimmedExtent());
                 dispatch$$1.call('drawn', this, {full: false});
             }
         });
 
                 dispatch$$1.call('drawn', this, {full: false});
             }
         });
 
-        map$$1.dimensions(utilGetDimensions(selection$$1));
+        map.dimensions(utilGetDimensions(selection$$1));
     }
 
 
     }
 
 
@@ -55168,11 +55562,11 @@ function rendererMap(context) {
     function drawVector(difference, extent$$1) {
         var graph = context.graph(),
             features = context.features(),
     function drawVector(difference, extent$$1) {
         var graph = context.graph(),
             features = context.features(),
-            all = context.intersects(map$$1.extent()),
+            all = context.intersects(map.extent()),
             data, filter;
 
         if (difference) {
             data, filter;
 
         if (difference) {
-            var complete = difference.complete(map$$1.extent());
+            var complete = difference.complete(map.extent());
             data = lodash.compact(lodash.values(complete));
             filter = function(d) { return d.id in complete; };
             features.clear(data);
             data = lodash.compact(lodash.values(complete));
             filter = function(d) { return d.id in complete; };
             features.clear(data);
@@ -55185,9 +55579,9 @@ function rendererMap(context) {
             }
 
             if (extent$$1) {
             }
 
             if (extent$$1) {
-                data = context.intersects(map$$1.extent().intersection(extent$$1));
-                var set$$1 = set$2(lodash.map(data, 'id'));
-                filter = function(d) { return set$$1.has(d.id); };
+                data = context.intersects(map.extent().intersection(extent$$1));
+                var set = set$2(lodash.map(data, 'id'));
+                filter = function(d) { return set.has(d.id); };
 
             } else {
                 data = all;
 
             } else {
                 data = all;
@@ -55198,10 +55592,10 @@ function rendererMap(context) {
         data = features.filter(data, graph);
 
         surface.selectAll('.data-layer-osm')
         data = features.filter(data, graph);
 
         surface.selectAll('.data-layer-osm')
-            .call(drawVertices, graph, data, filter, map$$1.extent(), map$$1.zoom())
+            .call(drawVertices, graph, data, filter, map.extent(), map.zoom())
             .call(drawLines, graph, data, filter)
             .call(drawAreas, graph, data, filter)
             .call(drawLines, graph, data, filter)
             .call(drawAreas, graph, data, filter)
-            .call(drawMidpoints, graph, data, filter, map$$1.trimmedExtent())
+            .call(drawMidpoints, graph, data, filter, map.trimmedExtent())
             .call(drawLabels, graph, data, filter, dimensions, !difference && !extent$$1)
             .call(drawPoints, graph, data, filter);
 
             .call(drawLabels, graph, data, filter, dimensions, !difference && !extent$$1)
             .call(drawPoints, graph, data, filter);
 
@@ -55262,11 +55656,11 @@ function rendererMap(context) {
             uiFlash().text(t('cannot_zoom'));
             setZoom(context.minEditableZoom(), true);
             queueRedraw();
             uiFlash().text(t('cannot_zoom'));
             setZoom(context.minEditableZoom(), true);
             queueRedraw();
-            dispatch$$1.call('move', this, map$$1);
+            dispatch$$1.call('move', this, map);
             return;
         }
 
             return;
         }
 
-        projection.transform(eventTransform);
+        projection$$1.transform(eventTransform);
 
         var scale = eventTransform.k / transformStart.k,
             tX = (eventTransform.x / scale - transformStart.x) * scale,
 
         var scale = eventTransform.k / transformStart.k,
             tX = (eventTransform.x / scale - transformStart.x) * scale,
@@ -55285,7 +55679,7 @@ function rendererMap(context) {
         utilSetTransform(supersurface, tX, tY, scale);
         queueRedraw();
 
         utilSetTransform(supersurface, tX, tY, scale);
         queueRedraw();
 
-        dispatch$$1.call('move', this, map$$1);
+        dispatch$$1.call('move', this, map);
     }
 
 
     }
 
 
@@ -55297,7 +55691,7 @@ function rendererMap(context) {
         utilSetTransform(supersurface, 0, 0);
         transformed = false;
         if (context.inIntro()) {
         utilSetTransform(supersurface, 0, 0);
         transformed = false;
         if (context.inIntro()) {
-            curtainProjection.transform(projection.transform());
+            curtainProjection.transform(projection$$1.transform());
         }
         return true;
     }
         }
         return true;
     }
@@ -55313,7 +55707,7 @@ function rendererMap(context) {
             difference = extent$$1 = undefined;
         }
 
             difference = extent$$1 = undefined;
         }
 
-        var z = String(~~map$$1.zoom());
+        var z = String(~~map.zoom());
         if (surface.attr('data-zoom') !== z) {
             surface.attr('data-zoom', z)
                 .classed('low-zoom', z <= 16);
         if (surface.attr('data-zoom') !== z) {
             surface.attr('data-zoom', z)
                 .classed('low-zoom', z <= 16);
@@ -55327,16 +55721,16 @@ function rendererMap(context) {
             .call(drawLayers);
 
         // OSM
             .call(drawLayers);
 
         // OSM
-        if (map$$1.editable()) {
-            context.loadTiles(projection, dimensions);
+        if (map.editable()) {
+            context.loadTiles(projection$$1, dimensions);
             drawVector(difference, extent$$1);
         } else {
             editOff();
         }
 
             drawVector(difference, extent$$1);
         } else {
             editOff();
         }
 
-        transformStart = projection.transform();
+        transformStart = projection$$1.transform();
 
 
-        return map$$1;
+        return map;
     }
 
 
     }
 
 
@@ -55350,20 +55744,20 @@ function rendererMap(context) {
 
 
     function pointLocation(p) {
 
 
     function pointLocation(p) {
-        var translate = projection.translate(),
-            scale = projection.scale() * 2 * Math.PI;
+        var translate = projection$$1.translate(),
+            scale = projection$$1.scale() * 2 * Math.PI;
         return [(p[0] - translate[0]) / scale, (p[1] - translate[1]) / scale];
     }
 
 
     function locationPoint(l) {
         return [(p[0] - translate[0]) / scale, (p[1] - translate[1]) / scale];
     }
 
 
     function locationPoint(l) {
-        var translate = projection.translate(),
-            scale = projection.scale() * 2 * Math.PI;
+        var translate = projection$$1.translate(),
+            scale = projection$$1.scale() * 2 * Math.PI;
         return [l[0] * scale + translate[0], l[1] * scale + translate[1]];
     }
 
 
         return [l[0] * scale + translate[0], l[1] * scale + translate[1]];
     }
 
 
-    map$$1.mouse = function() {
+    map.mouse = function() {
         var event$$1 = mousemove || event;
         if (event$$1) {
             var s;
         var event$$1 = mousemove || event;
         if (event$$1) {
             var s;
@@ -55374,27 +55768,27 @@ function rendererMap(context) {
     };
 
 
     };
 
 
-    map$$1.mouseCoordinates = function() {
-        return projection.invert(map$$1.mouse());
+    map.mouseCoordinates = function() {
+        return projection$$1.invert(map.mouse());
     };
 
 
     };
 
 
-    map$$1.dblclickEnable = function(_) {
+    map.dblclickEnable = function(_) {
         if (!arguments.length) return dblclickEnabled;
         dblclickEnabled = _;
         if (!arguments.length) return dblclickEnabled;
         dblclickEnabled = _;
-        return map$$1;
+        return map;
     };
 
 
     };
 
 
-    map$$1.redrawEnable = function(_) {
+    map.redrawEnable = function(_) {
         if (!arguments.length) return redrawEnabled;
         redrawEnabled = _;
         if (!arguments.length) return redrawEnabled;
         redrawEnabled = _;
-        return map$$1;
+        return map;
     };
 
 
     function setTransform(t2, duration, force) {
     };
 
 
     function setTransform(t2, duration, force) {
-        var t$$1 = projection.transform();
+        var t$$1 = projection$$1.transform();
         if (!force && t2.k === t$$1.k && t2.x === t$$1.x && t2.y === t$$1.y) {
             return false;
         }
         if (!force && t2.k === t$$1.k && t2.x === t$$1.x && t2.y === t$$1.y) {
             return false;
         }
@@ -55403,10 +55797,10 @@ function rendererMap(context) {
             _selection
                 .transition()
                 .duration(duration)
             _selection
                 .transition()
                 .duration(duration)
-                .on('start', function() { map$$1.startEase(); })
+                .on('start', function() { map.startEase(); })
                 .call(zoom$$1.transform, identity$8.translate(t2.x, t2.y).scale(t2.k));
         } else {
                 .call(zoom$$1.transform, identity$8.translate(t2.x, t2.y).scale(t2.k));
         } else {
-            projection.transform(t2);
+            projection$$1.transform(t2);
             transformStart = t2;
             _selection.call(zoom$$1.transform, transformStart);
         }
             transformStart = t2;
             _selection.call(zoom$$1.transform, transformStart);
         }
@@ -55414,33 +55808,33 @@ function rendererMap(context) {
 
 
     function setZoom(z2, force, duration) {
 
 
     function setZoom(z2, force, duration) {
-        if (z2 === map$$1.zoom() && !force) {
+        if (z2 === map.zoom() && !force) {
             return false;
         }
 
             return false;
         }
 
-        var k = projection.scale(),
+        var k = projection$$1.scale(),
             k2 = Math.max(ztok(2), Math.min(ztok(24), ztok(z2))) / (2 * Math.PI),
             center = pxCenter(),
             l = pointLocation(center);
 
             k2 = Math.max(ztok(2), Math.min(ztok(24), ztok(z2))) / (2 * Math.PI),
             center = pxCenter(),
             l = pointLocation(center);
 
-        projection.scale(k2);
+        projection$$1.scale(k2);
 
 
-        var t$$1 = projection.translate();
+        var t$$1 = projection$$1.translate();
         l = locationPoint(l);
 
         t$$1[0] += center[0] - l[0];
         t$$1[1] += center[1] - l[1];
 
         if (duration) {
         l = locationPoint(l);
 
         t$$1[0] += center[0] - l[0];
         t$$1[1] += center[1] - l[1];
 
         if (duration) {
-            projection.scale(k);  // reset scale
+            projection$$1.scale(k);  // reset scale
             _selection
                 .transition()
                 .duration(duration)
             _selection
                 .transition()
                 .duration(duration)
-                .on('start', function() { map$$1.startEase(); })
+                .on('start', function() { map.startEase(); })
                 .call(zoom$$1.transform, identity$8.translate(t$$1[0], t$$1[1]).scale(k2));
         } else {
                 .call(zoom$$1.transform, identity$8.translate(t$$1[0], t$$1[1]).scale(k2));
         } else {
-            projection.translate(t$$1);
-            transformStart = projection.transform();
+            projection$$1.translate(t$$1);
+            transformStart = projection$$1.transform();
             _selection.call(zoom$$1.transform, transformStart);
         }
 
             _selection.call(zoom$$1.transform, transformStart);
         }
 
@@ -55449,15 +55843,15 @@ function rendererMap(context) {
 
 
     function setCenter(loc2, duration) {
 
 
     function setCenter(loc2, duration) {
-        var c = map$$1.center();
+        var c = map.center();
         if (loc2[0] === c[0] && loc2[1] === c[1]) {
             return false;
         }
 
         if (loc2[0] === c[0] && loc2[1] === c[1]) {
             return false;
         }
 
-        var t$$1 = projection.translate(),
-            k = projection.scale(),
+        var t$$1 = projection$$1.translate(),
+            k = projection$$1.scale(),
             pxC = pxCenter(),
             pxC = pxCenter(),
-            ll = projection(loc2);
+            ll = projection$$1(loc2);
 
         t$$1[0] = t$$1[0] - ll[0] + pxC[0];
         t$$1[1] = t$$1[1] - ll[1] + pxC[1];
 
         t$$1[0] = t$$1[0] - ll[0] + pxC[0];
         t$$1[1] = t$$1[1] - ll[1] + pxC[1];
@@ -55466,11 +55860,11 @@ function rendererMap(context) {
             _selection
                 .transition()
                 .duration(duration)
             _selection
                 .transition()
                 .duration(duration)
-                .on('start', function() { map$$1.startEase(); })
+                .on('start', function() { map.startEase(); })
                 .call(zoom$$1.transform, identity$8.translate(t$$1[0], t$$1[1]).scale(k));
         } else {
                 .call(zoom$$1.transform, identity$8.translate(t$$1[0], t$$1[1]).scale(k));
         } else {
-            projection.translate(t$$1);
-            transformStart = projection.transform();
+            projection$$1.translate(t$$1);
+            transformStart = projection$$1.transform();
             _selection.call(zoom$$1.transform, transformStart);
         }
 
             _selection.call(zoom$$1.transform, transformStart);
         }
 
@@ -55478,9 +55872,9 @@ function rendererMap(context) {
     }
 
 
     }
 
 
-    map$$1.pan = function(delta, duration) {
-        var t$$1 = projection.translate(),
-            k = projection.scale();
+    map.pan = function(delta, duration) {
+        var t$$1 = projection$$1.translate(),
+            k = projection$$1.scale();
 
         t$$1[0] += delta[0];
         t$$1[1] += delta[1];
 
         t$$1[0] += delta[0];
         t$$1[1] += delta[1];
@@ -55489,67 +55883,67 @@ function rendererMap(context) {
             _selection
                 .transition()
                 .duration(duration)
             _selection
                 .transition()
                 .duration(duration)
-                .on('start', function() { map$$1.startEase(); })
+                .on('start', function() { map.startEase(); })
                 .call(zoom$$1.transform, identity$8.translate(t$$1[0], t$$1[1]).scale(k));
         } else {
                 .call(zoom$$1.transform, identity$8.translate(t$$1[0], t$$1[1]).scale(k));
         } else {
-            projection.translate(t$$1);
-            transformStart = projection.transform();
+            projection$$1.translate(t$$1);
+            transformStart = projection$$1.transform();
             _selection.call(zoom$$1.transform, transformStart);
             _selection.call(zoom$$1.transform, transformStart);
-            dispatch$$1.call('move', this, map$$1);
+            dispatch$$1.call('move', this, map);
             immediateRedraw();
         }
 
             immediateRedraw();
         }
 
-        return map$$1;
+        return map;
     };
 
 
     };
 
 
-    map$$1.dimensions = function(_) {
+    map.dimensions = function(_) {
         if (!arguments.length) return dimensions;
         if (!arguments.length) return dimensions;
-        var center = map$$1.center();
+        var center = map.center();
         dimensions = _;
         drawLayers.dimensions(dimensions);
         context.background().dimensions(dimensions);
         dimensions = _;
         drawLayers.dimensions(dimensions);
         context.background().dimensions(dimensions);
-        projection.clipExtent([[0, 0], dimensions]);
+        projection$$1.clipExtent([[0, 0], dimensions]);
         mouse$$1 = utilFastMouse(supersurface.node());
         setCenter(center);
 
         queueRedraw();
         mouse$$1 = utilFastMouse(supersurface.node());
         setCenter(center);
 
         queueRedraw();
-        return map$$1;
+        return map;
     };
 
 
     function zoomIn(delta) {
     };
 
 
     function zoomIn(delta) {
-        setZoom(~~map$$1.zoom() + delta, true, 250);
+        setZoom(~~map.zoom() + delta, true, 250);
     }
 
     function zoomOut(delta) {
     }
 
     function zoomOut(delta) {
-        setZoom(~~map$$1.zoom() - delta, true, 250);
+        setZoom(~~map.zoom() - delta, true, 250);
     }
 
     }
 
-    map$$1.zoomIn = function() { zoomIn(1); };
-    map$$1.zoomInFurther = function() { zoomIn(4); };
+    map.zoomIn = function() { zoomIn(1); };
+    map.zoomInFurther = function() { zoomIn(4); };
 
 
-    map$$1.zoomOut = function() { zoomOut(1); };
-    map$$1.zoomOutFurther = function() { zoomOut(4); };
+    map.zoomOut = function() { zoomOut(1); };
+    map.zoomOutFurther = function() { zoomOut(4); };
 
 
 
 
-    map$$1.center = function(loc2) {
+    map.center = function(loc2) {
         if (!arguments.length) {
         if (!arguments.length) {
-            return projection.invert(pxCenter());
+            return projection$$1.invert(pxCenter());
         }
 
         if (setCenter(loc2)) {
         }
 
         if (setCenter(loc2)) {
-            dispatch$$1.call('move', this, map$$1);
+            dispatch$$1.call('move', this, map);
         }
 
         queueRedraw();
         }
 
         queueRedraw();
-        return map$$1;
+        return map;
     };
 
 
     };
 
 
-    map$$1.zoom = function(z2) {
+    map.zoom = function(z2) {
         if (!arguments.length) {
         if (!arguments.length) {
-            return Math.max(ktoz(projection.scale() * 2 * Math.PI), 0);
+            return Math.max(ktoz(projection$$1.scale() * 2 * Math.PI), 0);
         }
 
         if (z2 < minzoom) {
         }
 
         if (z2 < minzoom) {
@@ -55559,138 +55953,138 @@ function rendererMap(context) {
         }
 
         if (setZoom(z2)) {
         }
 
         if (setZoom(z2)) {
-            dispatch$$1.call('move', this, map$$1);
+            dispatch$$1.call('move', this, map);
         }
 
         queueRedraw();
         }
 
         queueRedraw();
-        return map$$1;
+        return map;
     };
 
 
     };
 
 
-    map$$1.zoomTo = function(entity, zoomLimits) {
+    map.zoomTo = function(entity, zoomLimits) {
         var extent$$1 = entity.extent(context.graph());
         if (!isFinite(extent$$1.area())) return;
 
         var extent$$1 = entity.extent(context.graph());
         if (!isFinite(extent$$1.area())) return;
 
-        var z2 = map$$1.trimmedExtentZoom(extent$$1);
+        var z2 = map.trimmedExtentZoom(extent$$1);
         zoomLimits = zoomLimits || [context.minEditableZoom(), 20];
         zoomLimits = zoomLimits || [context.minEditableZoom(), 20];
-        map$$1.centerZoom(extent$$1.center(), Math.min(Math.max(z2, zoomLimits[0]), zoomLimits[1]));
+        map.centerZoom(extent$$1.center(), Math.min(Math.max(z2, zoomLimits[0]), zoomLimits[1]));
     };
 
 
     };
 
 
-    map$$1.centerZoom = function(loc2, z2) {
+    map.centerZoom = function(loc2, z2) {
         var centered = setCenter(loc2),
             zoomed   = setZoom(z2);
 
         if (centered || zoomed) {
         var centered = setCenter(loc2),
             zoomed   = setZoom(z2);
 
         if (centered || zoomed) {
-            dispatch$$1.call('move', this, map$$1);
+            dispatch$$1.call('move', this, map);
         }
 
         queueRedraw();
         }
 
         queueRedraw();
-        return map$$1;
+        return map;
     };
 
 
     };
 
 
-    map$$1.centerEase = function(loc2, duration) {
+    map.centerEase = function(loc2, duration) {
         duration = duration || 250;
         setCenter(loc2, duration);
         duration = duration || 250;
         setCenter(loc2, duration);
-        return map$$1;
+        return map;
     };
 
 
     };
 
 
-    map$$1.zoomEase = function(z2, duration) {
+    map.zoomEase = function(z2, duration) {
         duration = duration || 250;
         setZoom(z2, false, duration);
         duration = duration || 250;
         setZoom(z2, false, duration);
-        return map$$1;
+        return map;
     };
 
 
     };
 
 
-    map$$1.transformEase = function(t2, duration) {
+    map.transformEase = function(t2, duration) {
         duration = duration || 250;
         setTransform(t2, duration, false);
         duration = duration || 250;
         setTransform(t2, duration, false);
-        return map$$1;
+        return map;
     };
 
 
     };
 
 
-    map$$1.startEase = function() {
+    map.startEase = function() {
         utilBindOnce(surface, 'mousedown.ease', function() {
         utilBindOnce(surface, 'mousedown.ease', function() {
-            map$$1.cancelEase();
+            map.cancelEase();
         });
         });
-        return map$$1;
+        return map;
     };
 
 
     };
 
 
-    map$$1.cancelEase = function() {
+    map.cancelEase = function() {
         _selection.interrupt();
         _selection.interrupt();
-        return map$$1;
+        return map;
     };
 
 
     };
 
 
-    map$$1.extent = function(_) {
+    map.extent = function(_) {
         if (!arguments.length) {
         if (!arguments.length) {
-            return new geoExtent$$1(projection.invert([0, dimensions[1]]),
-                                 projection.invert([dimensions[0], 0]));
+            return new geoExtent$$1(projection$$1.invert([0, dimensions[1]]),
+                                 projection$$1.invert([dimensions[0], 0]));
         } else {
             var extent$$1 = geoExtent$$1(_);
         } else {
             var extent$$1 = geoExtent$$1(_);
-            map$$1.centerZoom(extent$$1.center(), map$$1.extentZoom(extent$$1));
+            map.centerZoom(extent$$1.center(), map.extentZoom(extent$$1));
         }
     };
 
 
         }
     };
 
 
-    map$$1.trimmedExtent = function(_) {
+    map.trimmedExtent = function(_) {
         if (!arguments.length) {
             var headerY = 60, footerY = 30, pad = 10;
         if (!arguments.length) {
             var headerY = 60, footerY = 30, pad = 10;
-            return new geoExtent$$1(projection.invert([pad, dimensions[1] - footerY - pad]),
-                                 projection.invert([dimensions[0] - pad, headerY + pad]));
+            return new geoExtent$$1(projection$$1.invert([pad, dimensions[1] - footerY - pad]),
+                                 projection$$1.invert([dimensions[0] - pad, headerY + pad]));
         } else {
             var extent$$1 = geoExtent$$1(_);
         } else {
             var extent$$1 = geoExtent$$1(_);
-            map$$1.centerZoom(extent$$1.center(), map$$1.trimmedExtentZoom(extent$$1));
+            map.centerZoom(extent$$1.center(), map.trimmedExtentZoom(extent$$1));
         }
     };
 
 
     function calcZoom(extent$$1, dim) {
         }
     };
 
 
     function calcZoom(extent$$1, dim) {
-        var tl = projection([extent$$1[0][0], extent$$1[1][1]]),
-            br = projection([extent$$1[1][0], extent$$1[0][1]]);
+        var tl = projection$$1([extent$$1[0][0], extent$$1[1][1]]),
+            br = projection$$1([extent$$1[1][0], extent$$1[0][1]]);
 
         // Calculate maximum zoom that fits extent
         var hFactor = (br[0] - tl[0]) / dim[0],
             vFactor = (br[1] - tl[1]) / dim[1],
             hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2,
             vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2,
 
         // Calculate maximum zoom that fits extent
         var hFactor = (br[0] - tl[0]) / dim[0],
             vFactor = (br[1] - tl[1]) / dim[1],
             hZoomDiff = Math.log(Math.abs(hFactor)) / Math.LN2,
             vZoomDiff = Math.log(Math.abs(vFactor)) / Math.LN2,
-            newZoom = map$$1.zoom() - Math.max(hZoomDiff, vZoomDiff);
+            newZoom = map.zoom() - Math.max(hZoomDiff, vZoomDiff);
 
         return newZoom;
     }
 
 
 
         return newZoom;
     }
 
 
-    map$$1.extentZoom = function(_) {
+    map.extentZoom = function(_) {
         return calcZoom(geoExtent$$1(_), dimensions);
     };
 
 
         return calcZoom(geoExtent$$1(_), dimensions);
     };
 
 
-    map$$1.trimmedExtentZoom = function(_) {
+    map.trimmedExtentZoom = function(_) {
         var trimY = 120, trimX = 40,
             trimmed = [dimensions[0] - trimX, dimensions[1] - trimY];
         return calcZoom(geoExtent$$1(_), trimmed);
     };
 
 
         var trimY = 120, trimX = 40,
             trimmed = [dimensions[0] - trimX, dimensions[1] - trimY];
         return calcZoom(geoExtent$$1(_), trimmed);
     };
 
 
-    map$$1.editable = function() {
-        return map$$1.zoom() >= context.minEditableZoom();
+    map.editable = function() {
+        return map.zoom() >= context.minEditableZoom();
     };
 
 
     };
 
 
-    map$$1.minzoom = function(_) {
+    map.minzoom = function(_) {
         if (!arguments.length) return minzoom;
         minzoom = _;
         if (!arguments.length) return minzoom;
         minzoom = _;
-        return map$$1;
+        return map;
     };
 
 
     };
 
 
-    map$$1.layers = drawLayers;
+    map.layers = drawLayers;
 
 
 
 
-    return utilRebind(map$$1, dispatch$$1, 'on');
+    return utilRebind(map, dispatch$$1, 'on');
 }
 
 var TAU = 2 * Math.PI;
 }
 
 var TAU = 2 * Math.PI;
@@ -55707,9 +56101,9 @@ function uiMapInMap(context) {
     function map_in_map(selection$$1) {
         var backgroundLayer = rendererTileLayer(context),
             overlayLayers = {},
     function map_in_map(selection$$1) {
         var backgroundLayer = rendererTileLayer(context),
             overlayLayers = {},
-            projection = geoRawMercator(),
-            gpxLayer = svgGpx(projection, context).showLabels(false),
-            debugLayer = svgDebug(projection, context),
+            projection$$1 = geoRawMercator(),
+            gpxLayer = svgGpx(projection$$1, context).showLabels(false),
+            debugLayer = svgDebug(projection$$1, context),
             zoom$$1 = zoom()
                 .scaleExtent([ztok(0.5), ztok(24)])
                 .on('start', zoomStarted)
             zoom$$1 = zoom()
                 .scaleExtent([ztok(0.5), ztok(24)])
                 .on('start', zoomStarted)
@@ -55730,7 +56124,7 @@ function uiMapInMap(context) {
 
         function zoomStarted() {
             if (skipEvents) return;
 
         function zoomStarted() {
             if (skipEvents) return;
-            tStart = tCurr = projection.transform();
+            tStart = tCurr = projection$$1.transform();
             gesture = null;
         }
 
             gesture = null;
         }
 
@@ -55753,7 +56147,7 @@ function uiMapInMap(context) {
                 gesture = isZooming ? 'zoom' : 'pan';
             }
 
                 gesture = isZooming ? 'zoom' : 'pan';
             }
 
-            var tMini = projection.transform(),
+            var tMini = projection$$1.transform(),
                 tX, tY, scale;
 
             if (gesture === 'zoom') {
                 tX, tY, scale;
 
             if (gesture === 'zoom') {
@@ -55791,7 +56185,7 @@ function uiMapInMap(context) {
             gesture = null;
             var dMini = utilGetDimensions(wrap),
                 cMini = vecScale(dMini, 0.5);
             gesture = null;
             var dMini = utilGetDimensions(wrap),
                 cMini = vecScale(dMini, 0.5);
-            context.map().center(projection.invert(cMini));   // recenter main map..
+            context.map().center(projection$$1.invert(cMini));   // recenter main map..
         }
 
 
         }
 
 
@@ -55804,20 +56198,20 @@ function uiMapInMap(context) {
                 zMini = Math.max(zMain - zDiff, 0.5),
                 kMini = ztok(zMini);
 
                 zMini = Math.max(zMain - zDiff, 0.5),
                 kMini = ztok(zMini);
 
-            projection
+            projection$$1
                 .translate([tMain.x, tMain.y])
                 .scale(kMini);
 
                 .translate([tMain.x, tMain.y])
                 .scale(kMini);
 
-            var point = projection(loc),
+            var point = projection$$1(loc),
                 mouse$$1 = (gesture === 'pan') ? vecSub([tCurr.x, tCurr.y], [tStart.x, tStart.y]) : [0, 0],
                 xMini = cMini[0] - point[0] + tMain.x + mouse$$1[0],
                 yMini = cMini[1] - point[1] + tMain.y + mouse$$1[1];
 
                 mouse$$1 = (gesture === 'pan') ? vecSub([tCurr.x, tCurr.y], [tStart.x, tStart.y]) : [0, 0],
                 xMini = cMini[0] - point[0] + tMain.x + mouse$$1[0],
                 yMini = cMini[1] - point[1] + tMain.y + mouse$$1[1];
 
-            projection
+            projection$$1
                 .translate([xMini, yMini])
                 .clipExtent([[0, 0], dMini]);
 
                 .translate([xMini, yMini])
                 .clipExtent([[0, 0], dMini]);
 
-            tCurr = projection.transform();
+            tCurr = projection$$1.transform();
 
             if (isTransformed) {
                 utilSetTransform(tiles, 0, 0);
 
             if (isTransformed) {
                 utilSetTransform(tiles, 0, 0);
@@ -55841,7 +56235,7 @@ function uiMapInMap(context) {
             updateProjection();
 
             var dMini = utilGetDimensions(wrap),
             updateProjection();
 
             var dMini = utilGetDimensions(wrap),
-                zMini = ktoz(projection.scale());
+                zMini = ktoz(projection$$1.scale());
 
             // setup tile container
             tiles = wrap
 
             // setup tile container
             tiles = wrap
@@ -55856,7 +56250,7 @@ function uiMapInMap(context) {
             // redraw background
             backgroundLayer
                 .source(context.background().baseLayerSource())
             // redraw background
             backgroundLayer
                 .source(context.background().baseLayerSource())
-                .projection(projection)
+                .projection(projection$$1)
                 .dimensions(dMini);
 
             var background = tiles
                 .dimensions(dMini);
 
             var background = tiles
@@ -55878,7 +56272,7 @@ function uiMapInMap(context) {
                     if (!overlayLayers[i]) overlayLayers[i] = rendererTileLayer(context);
                     activeOverlayLayers.push(overlayLayers[i]
                         .source(overlaySources[i])
                     if (!overlayLayers[i]) overlayLayers[i] = rendererTileLayer(context);
                     activeOverlayLayers.push(overlayLayers[i]
                         .source(overlaySources[i])
-                        .projection(projection)
+                        .projection(projection$$1)
                         .dimensions(dMini));
                 }
             }
                         .dimensions(dMini));
                 }
             }
@@ -55923,7 +56317,7 @@ function uiMapInMap(context) {
 
             // redraw viewport bounding box
             if (gesture !== 'pan') {
 
             // redraw viewport bounding box
             if (gesture !== 'pan') {
-                var getPath = index$4(projection),
+                var getPath = index$4(projection$$1),
                     bbox = { type: 'Polygon', coordinates: [context.map().extent().polygon()] };
 
                 viewport = wrap.selectAll('.map-in-map-viewport')
                     bbox = { type: 'Polygon', coordinates: [context.map().extent().polygon()] };
 
                 viewport = wrap.selectAll('.map-in-map-viewport')
@@ -56011,7 +56405,7 @@ function uiMapInMap(context) {
         redraw();
 
         var keybinding = d3keybinding('map-in-map')
         redraw();
 
         var keybinding = d3keybinding('map-in-map')
-            .on(key, toggle);
+            .on([key], toggle);
 
         select(document)
             .call(keybinding);
 
         select(document)
             .call(keybinding);
@@ -56251,14 +56645,14 @@ function uiBackground(context) {
 
         function buttonOffset(d) {
             if (event.button !== 0) return;
 
         function buttonOffset(d) {
             if (event.button !== 0) return;
-            var timeout$$1 = window.setTimeout(function() {
-                    interval$$1 = window.setInterval(nudge.bind(null, d), 100);
+            var timeout = window.setTimeout(function() {
+                    interval = window.setInterval(nudge.bind(null, d), 100);
                 }, 500),
                 }, 500),
-                interval$$1;
+                interval;
 
             function doneNudge() {
 
             function doneNudge() {
-                window.clearTimeout(timeout$$1);
-                window.clearInterval(interval$$1);
+                window.clearTimeout(timeout);
+                window.clearInterval(interval);
                 select(window)
                     .on('mouseup.buttonoffset', null, true)
                     .on('mousedown.buttonoffset', null, true);
                 select(window)
                     .on('mouseup.buttonoffset', null, true)
                     .on('mousedown.buttonoffset', null, true);
@@ -56799,9 +57193,9 @@ function uiFullScreen(context) {
         // button.append('span')
         //     .attr('class', 'icon full-screen');
 
         // button.append('span')
         //     .attr('class', 'icon full-screen');
 
-        keybinding
-            .on('f11', fullScreen)
-            .on(uiCmd('⌘⇧F'), fullScreen);
+        var detected = utilDetect();
+        var keys$$1 = detected.os === 'mac' ? [uiCmd('⌃⌘F'), 'f11'] : ['f11'];
+        keybinding.on(keys$$1, fullScreen);
 
         select(document)
             .call(keybinding);
 
         select(document)
             .call(keybinding);
@@ -58377,9 +58771,9 @@ function localize(obj) {
 function isMostlySquare(points) {
     // note: uses 15 here instead of the 12 from actionOrthogonalize because
     // actionOrthogonalize can actually straighten some larger angles as it iterates
 function isMostlySquare(points) {
     // note: uses 15 here instead of the 12 from actionOrthogonalize because
     // actionOrthogonalize can actually straighten some larger angles as it iterates
-    var threshold = 15, // degrees within right or straight
-        lowerBound = Math.cos((90 - threshold) * Math.PI / 180),  // near right
-        upperBound = Math.cos(threshold * Math.PI / 180),         // near straight
+    var threshold$$1 = 15, // degrees within right or straight
+        lowerBound = Math.cos((90 - threshold$$1) * Math.PI / 180),  // near right
+        upperBound = Math.cos(threshold$$1 * Math.PI / 180),         // near straight
         mag;
 
     for (var i = 0; i < points.length; i++) {
         mag;
 
     for (var i = 0; i < points.length; i++) {
@@ -58430,10 +58824,10 @@ function selectMenuItem(operation) {
 
 
 function transitionTime(point1, point2) {
 
 
 function transitionTime(point1, point2) {
-    var distance = geoSphericalDistance(point1, point2);
-    if (distance === 0)
+    var distance$$1 = geoSphericalDistance(point1, point2);
+    if (distance$$1 === 0)
         return 0;
         return 0;
-    else if (distance < 80)
+    else if (distance$$1 < 80)
         return 500;
     else
         return 1000;
         return 500;
     else
         return 1000;
@@ -59023,7 +59417,7 @@ function uiIntroNavigation(context, reveal) {
     };
 
 
     };
 
 
-    function timeout$$1(f, t$$1) {
+    function timeout(f, t$$1) {
         timeouts.push(window.setTimeout(f, t$$1));
     }
 
         timeouts.push(window.setTimeout(f, t$$1));
     }
 
@@ -59048,7 +59442,7 @@ function uiIntroNavigation(context, reveal) {
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(19).centerEase(townHall, msec);
 
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(19).centerEase(townHall, msec);
 
-        timeout$$1(function() {
+        timeout(function() {
             var centerStart = context.map().center();
 
             reveal('#surface', t('intro.navigation.drag'));
             var centerStart = context.map().center();
 
             reveal('#surface', t('intro.navigation.drag'));
@@ -59060,7 +59454,7 @@ function uiIntroNavigation(context, reveal) {
                 var centerNow = context.map().center();
                 if (centerStart[0] !== centerNow[0] || centerStart[1] !== centerNow[1]) {
                     context.map().on('move.intro', null);
                 var centerNow = context.map().center();
                 if (centerStart[0] !== centerNow[0] || centerStart[1] !== centerNow[1]) {
                     context.map().on('move.intro', null);
-                    timeout$$1(function() { continueTo(zoomMap); }, 3000);
+                    timeout(function() { continueTo(zoomMap); }, 3000);
                 }
             });
 
                 }
             });
 
@@ -59095,7 +59489,7 @@ function uiIntroNavigation(context, reveal) {
         context.map().on('move.intro', function() {
             if (context.map().zoom() !== zoomStart) {
                 context.map().on('move.intro', null);
         context.map().on('move.intro', function() {
             if (context.map().zoom() !== zoomStart) {
                 context.map().on('move.intro', null);
-                timeout$$1(function() { continueTo(features); }, 3000);
+                timeout(function() { continueTo(features); }, 3000);
             }
         });
 
             }
         });
 
@@ -59170,12 +59564,12 @@ function uiIntroNavigation(context, reveal) {
         reveal(null, null, { duration: 0 });
         context.map().zoomEase(19, 500);
 
         reveal(null, null, { duration: 0 });
         context.map().zoomEase(19, 500);
 
-        timeout$$1(function() {
+        timeout(function() {
             var entity = context.hasEntity(hallId);
             if (!entity) return;
             context.map().centerEase(entity.loc, 500);
 
             var entity = context.hasEntity(hallId);
             if (!entity) return;
             context.map().centerEase(entity.loc, 500);
 
-            timeout$$1(function() {
+            timeout(function() {
                 var entity = context.hasEntity(hallId);
                 if (!entity) return;
                 var box = pointBox(entity.loc, context);
                 var entity = context.hasEntity(hallId);
                 if (!entity) return;
                 var box = pointBox(entity.loc, context);
@@ -59392,7 +59786,7 @@ function uiIntroNavigation(context, reveal) {
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(19).centerEase(springStreet, msec);  // ..and user can see it
 
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(19).centerEase(springStreet, msec);  // ..and user can see it
 
-        timeout$$1(function() {
+        timeout(function() {
             reveal('.search-header input',
                 t('intro.navigation.search_street', { name: t('intro.graph.name.spring-street') })
             );
             reveal('.search-header input',
                 t('intro.navigation.search_street', { name: t('intro.graph.name.spring-street') })
             );
@@ -59448,7 +59842,7 @@ function uiIntroNavigation(context, reveal) {
             { duration: 600, buttonText: t('intro.ok'), buttonCallback: onClick }
         );
 
             { duration: 600, buttonText: t('intro.ok'), buttonCallback: onClick }
         );
 
-        timeout$$1(function() {
+        timeout(function() {
             context.map().on('move.intro drawn.intro', function() {
                 var entity = context.hasEntity(springStreetEndId);
                 if (!entity) return;
             context.map().on('move.intro drawn.intro', function() {
                 var entity = context.hasEntity(springStreetEndId);
                 if (!entity) return;
@@ -59474,7 +59868,7 @@ function uiIntroNavigation(context, reveal) {
 
         context.history().on('change.intro', function() {
             if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
 
         context.history().on('change.intro', function() {
             if (!context.hasEntity(springStreetEndId) || !context.hasEntity(springStreetId)) {
-                timeout$$1(function() {
+                timeout(function() {
                     continueTo(searchStreet);
                 }, 300);  // after any transition (e.g. if user deleted intersection)
             }
                     continueTo(searchStreet);
                 }, 300);  // after any transition (e.g. if user deleted intersection)
             }
@@ -59577,7 +59971,7 @@ function uiIntroPoint(context, reveal) {
     };
 
 
     };
 
 
-    function timeout$$1(f, t$$1) {
+    function timeout(f, t$$1) {
         timeouts.push(window.setTimeout(f, t$$1));
     }
 
         timeouts.push(window.setTimeout(f, t$$1));
     }
 
@@ -59585,11 +59979,11 @@ function uiIntroPoint(context, reveal) {
     function revealEditMenu(loc, text$$1, options) {
         var rect = context.surfaceRect();
         var point = context.curtainProjection(loc);
     function revealEditMenu(loc, text$$1, options) {
         var rect = context.surfaceRect();
         var point = context.curtainProjection(loc);
-        var pad$$1 = 40;
-        var width = 250 + (2 * pad$$1);
+        var pad = 40;
+        var width = 250 + (2 * pad);
         var height = 250;
         var startX = rect.left + point[0];
         var height = 250;
         var startX = rect.left + point[0];
-        var left = (textDirection === 'rtl') ? (startX - width + pad$$1) : (startX - pad$$1);
+        var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
         var box = {
             left: left,
             top: point[1] + rect.top - 60,
         var box = {
             left: left,
             top: point[1] + rect.top - 60,
@@ -59614,7 +60008,7 @@ function uiIntroPoint(context, reveal) {
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(19).centerEase(intersection, msec);
 
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(19).centerEase(intersection, msec);
 
-        timeout$$1(function() {
+        timeout(function() {
             var tooltip = reveal('button.add-point',
                 t('intro.points.add_point', { button: icon('#icon-point', 'pre-text') }));
 
             var tooltip = reveal('button.add-point',
                 t('intro.points.add_point', { button: icon('#icon-point', 'pre-text') }));
 
@@ -59742,7 +60136,7 @@ function uiIntroPoint(context, reveal) {
             return addPoint();
         }
 
             return addPoint();
         }
 
-        timeout$$1(function() {
+        timeout(function() {
             reveal('.entity-editor-pane', t('intro.points.feature_editor'), {
                 tooltipClass: 'intro-points-describe',
                 buttonText: t('intro.ok'),
             reveal('.entity-editor-pane', t('intro.points.feature_editor'), {
                 tooltipClass: 'intro-points-describe',
                 buttonText: t('intro.ok'),
@@ -59770,7 +60164,7 @@ function uiIntroPoint(context, reveal) {
         // reset pane, in case user happened to change it..
         select('.inspector-wrap .panewrap').style('right', '0%');
 
         // reset pane, in case user happened to change it..
         select('.inspector-wrap .panewrap').style('right', '0%');
 
-        timeout$$1(function() {
+        timeout(function() {
             // It's possible for the user to add a name in a previous step..
             // If so, don't tell them to add the name in this step.
             // Give them an OK button instead.
             // It's possible for the user to add a name in a previous step..
             // If so, don't tell them to add the name in this step.
             // Give them an OK button instead.
@@ -59844,11 +60238,11 @@ function uiIntroPoint(context, reveal) {
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().centerEase(entity.loc, msec);
 
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().centerEase(entity.loc, msec);
 
-        timeout$$1(function() {
+        timeout(function() {
             var box = pointBox(entity.loc, context);
             reveal(box, t('intro.points.reselect'), { duration: 600 });
 
             var box = pointBox(entity.loc, context);
             reveal(box, t('intro.points.reselect'), { duration: 600 });
 
-            timeout$$1(function() {
+            timeout(function() {
                 context.map().on('move.intro drawn.intro', function() {
                     var entity = context.hasEntity(pointId);
                     if (!entity) return chapter.restart();
                 context.map().on('move.intro drawn.intro', function() {
                     var entity = context.hasEntity(pointId);
                     if (!entity) return chapter.restart();
@@ -59888,7 +60282,7 @@ function uiIntroPoint(context, reveal) {
             continueTo(updateCloseEditor);
         });
 
             continueTo(updateCloseEditor);
         });
 
-        timeout$$1(function() {
+        timeout(function() {
             reveal('.entity-editor-pane', t('intro.points.update'),
                 { tooltipClass: 'intro-points-describe' }
             );
             reveal('.entity-editor-pane', t('intro.points.update'),
                 { tooltipClass: 'intro-points-describe' }
             );
@@ -59914,7 +60308,7 @@ function uiIntroPoint(context, reveal) {
             continueTo(rightClickPoint);
         });
 
             continueTo(rightClickPoint);
         });
 
-        timeout$$1(function() {
+        timeout(function() {
             reveal('.entity-editor-pane',
                 t('intro.points.update_close', { button: icon('#icon-apply', 'pre-text') })
             );
             reveal('.entity-editor-pane',
                 t('intro.points.update_close', { button: icon('#icon-apply', 'pre-text') })
             );
@@ -59937,7 +60331,7 @@ function uiIntroPoint(context, reveal) {
         var box = pointBox(entity.loc, context);
         reveal(box, t('intro.points.rightclick'), { duration: 600 });
 
         var box = pointBox(entity.loc, context);
         reveal(box, t('intro.points.rightclick'), { duration: 600 });
 
-        timeout$$1(function() {
+        timeout(function() {
             context.map().on('move.intro drawn.intro', function() {
                 var entity = context.hasEntity(pointId);
                 if (!entity) return chapter.restart();
             context.map().on('move.intro drawn.intro', function() {
                 var entity = context.hasEntity(pointId);
                 if (!entity) return chapter.restart();
@@ -59951,7 +60345,7 @@ function uiIntroPoint(context, reveal) {
             var ids = context.selectedIDs();
             if (ids.length !== 1 || ids[0] !== pointId) return;
 
             var ids = context.selectedIDs();
             if (ids.length !== 1 || ids[0] !== pointId) return;
 
-            timeout$$1(function() {
+            timeout(function() {
                 var node = selectMenuItem('delete').node();
                 if (!node) return;
                 continueTo(enterDelete);
                 var node = selectMenuItem('delete').node();
                 if (!node) return;
                 continueTo(enterDelete);
@@ -59978,7 +60372,7 @@ function uiIntroPoint(context, reveal) {
             t('intro.points.delete', { button: icon('#operation-delete', 'pre-text') })
         );
 
             t('intro.points.delete', { button: icon('#operation-delete', 'pre-text') })
         );
 
-        timeout$$1(function() {
+        timeout(function() {
             context.map().on('move.intro drawn.intro', function() {
                 revealEditMenu(entity.loc,
                     t('intro.points.delete', { button: icon('#operation-delete', 'pre-text') }),
             context.map().on('move.intro drawn.intro', function() {
                 revealEditMenu(entity.loc,
                     t('intro.points.delete', { button: icon('#operation-delete', 'pre-text') }),
@@ -60075,7 +60469,7 @@ function uiIntroArea(context, reveal) {
     };
 
 
     };
 
 
-    function timeout$$1(f, t$$1) {
+    function timeout(f, t$$1) {
         timeouts.push(window.setTimeout(f, t$$1));
     }
 
         timeouts.push(window.setTimeout(f, t$$1));
     }
 
@@ -60102,7 +60496,7 @@ function uiIntroArea(context, reveal) {
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(19).centerEase(playground, msec);
 
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(19).centerEase(playground, msec);
 
-        timeout$$1(function() {
+        timeout(function() {
             var tooltip = reveal('button.add-area',
                 t('intro.areas.add_playground', { button: icon('#icon-area', 'pre-text') }));
 
             var tooltip = reveal('button.add-area',
                 t('intro.areas.add_playground', { button: icon('#icon-area', 'pre-text') }));
 
@@ -60133,12 +60527,12 @@ function uiIntroArea(context, reveal) {
         areaId = null;
         context.map().zoomEase(19.5, 500);
 
         areaId = null;
         context.map().zoomEase(19.5, 500);
 
-        timeout$$1(function() {
+        timeout(function() {
             revealPlayground(playground,
                 t('intro.areas.start_playground'), { duration: 250 }
             );
 
             revealPlayground(playground,
                 t('intro.areas.start_playground'), { duration: 250 }
             );
 
-            timeout$$1(function() {
+            timeout(function() {
                 context.map().on('move.intro drawn.intro', function() {
                     revealPlayground(playground,
                         t('intro.areas.start_playground'), { duration: 0 }
                 context.map().on('move.intro drawn.intro', function() {
                     revealPlayground(playground,
                         t('intro.areas.start_playground'), { duration: 0 }
@@ -60170,7 +60564,7 @@ function uiIntroArea(context, reveal) {
             t('intro.areas.continue_playground'), { duration: 250 }
         );
 
             t('intro.areas.continue_playground'), { duration: 250 }
         );
 
-        timeout$$1(function() {
+        timeout(function() {
             context.map().on('move.intro drawn.intro', function() {
                 revealPlayground(playground,
                     t('intro.areas.continue_playground'), { duration: 0 }
             context.map().on('move.intro drawn.intro', function() {
                 revealPlayground(playground,
                     t('intro.areas.continue_playground'), { duration: 0 }
@@ -60212,7 +60606,7 @@ function uiIntroArea(context, reveal) {
             t('intro.areas.finish_playground'), { duration: 250 }
         );
 
             t('intro.areas.finish_playground'), { duration: 250 }
         );
 
-        timeout$$1(function() {
+        timeout(function() {
             context.map().on('move.intro drawn.intro', function() {
                 revealPlayground(playground,
                     t('intro.areas.finish_playground'), { duration: 0 }
             context.map().on('move.intro drawn.intro', function() {
                 revealPlayground(playground,
                     t('intro.areas.finish_playground'), { duration: 0 }
@@ -60251,7 +60645,7 @@ function uiIntroArea(context, reveal) {
         // disallow scrolling
         select('.inspector-wrap').on('wheel.intro', eventCancel);
 
         // disallow scrolling
         select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-        timeout$$1(function() {
+        timeout(function() {
             // reset pane, in case user somehow happened to change it..
             select('.inspector-wrap .panewrap').style('right', '-100%');
 
             // reset pane, in case user somehow happened to change it..
             select('.inspector-wrap .panewrap').style('right', '-100%');
 
@@ -60336,7 +60730,7 @@ function uiIntroArea(context, reveal) {
         // disallow scrolling
         select('.inspector-wrap').on('wheel.intro', eventCancel);
 
         // disallow scrolling
         select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-        timeout$$1(function() {
+        timeout(function() {
             // reset pane, in case user somehow happened to change it..
             select('.inspector-wrap .panewrap').style('right', '0%');
 
             // reset pane, in case user somehow happened to change it..
             select('.inspector-wrap .panewrap').style('right', '0%');
 
@@ -60393,7 +60787,7 @@ function uiIntroArea(context, reveal) {
         watcher = window.setInterval(function() {
             if (select('div.combobox').empty()) {
                 window.clearInterval(watcher);
         watcher = window.setInterval(function() {
             if (select('div.combobox').empty()) {
                 window.clearInterval(watcher);
-                timeout$$1(function() {
+                timeout(function() {
                     if (select('.form-field-description').empty()) {
                         continueTo(retryChooseDescription);
                     } else {
                     if (select('.form-field-description').empty()) {
                         continueTo(retryChooseDescription);
                     } else {
@@ -60549,7 +60943,7 @@ function uiIntroLine(context, reveal) {
     };
 
 
     };
 
 
-    function timeout$$1(f, t$$1) {
+    function timeout(f, t$$1) {
         timeouts.push(window.setTimeout(f, t$$1));
     }
 
         timeouts.push(window.setTimeout(f, t$$1));
     }
 
@@ -60563,11 +60957,11 @@ function uiIntroLine(context, reveal) {
     function revealEditMenu(loc, text$$1, options) {
         var rect = context.surfaceRect();
         var point = context.curtainProjection(loc);
     function revealEditMenu(loc, text$$1, options) {
         var rect = context.surfaceRect();
         var point = context.curtainProjection(loc);
-        var pad$$1 = 40;
-        var width = 250 + (2 * pad$$1);
+        var pad = 40;
+        var width = 250 + (2 * pad);
         var height = 350;
         var startX = rect.left + point[0];
         var height = 350;
         var startX = rect.left + point[0];
-        var left = (textDirection === 'rtl') ? (startX - width + pad$$1) : (startX - pad$$1);
+        var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
         var box = {
             left: left,
             top: point[1] + rect.top - 60,
         var box = {
             left: left,
             top: point[1] + rect.top - 60,
@@ -60586,7 +60980,7 @@ function uiIntroLine(context, reveal) {
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(18.5).centerEase(tulipRoadStart, msec);
 
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(18.5).centerEase(tulipRoadStart, msec);
 
-        timeout$$1(function() {
+        timeout(function() {
             var tooltip = reveal('button.add-line',
                 t('intro.lines.add_line', { button: icon('#icon-line', 'pre-text') }));
 
             var tooltip = reveal('button.add-line',
                 t('intro.lines.add_line', { button: icon('#icon-line', 'pre-text') }));
 
@@ -60649,7 +61043,7 @@ function uiIntroLine(context, reveal) {
         tulipRoadId = context.mode().selectedIDs()[0];
         context.map().centerEase(tulipRoadMidpoint, 500);
 
         tulipRoadId = context.mode().selectedIDs()[0];
         context.map().centerEase(tulipRoadMidpoint, 500);
 
-        timeout$$1(function() {
+        timeout(function() {
             var padding = 200 * Math.pow(2, context.map().zoom() - 18.5);
             var box = pad$1(tulipRoadMidpoint, padding, context);
             box.height = box.height * 2;
             var padding = 200 * Math.pow(2, context.map().zoom() - 18.5);
             var box = pad$1(tulipRoadMidpoint, padding, context);
             box.height = box.height * 2;
@@ -60718,7 +61112,7 @@ function uiIntroLine(context, reveal) {
             t('intro.lines.retry_intersect', { name: t('intro.graph.name.flower-street') })
         );
 
             t('intro.lines.retry_intersect', { name: t('intro.graph.name.flower-street') })
         );
 
-        timeout$$1(chapter.restart, 3000);
+        timeout(chapter.restart, 3000);
     }
 
 
     }
 
 
@@ -60762,7 +61156,7 @@ function uiIntroLine(context, reveal) {
         // disallow scrolling
         select('.inspector-wrap').on('wheel.intro', eventCancel);
 
         // disallow scrolling
         select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-        timeout$$1(function() {
+        timeout(function() {
             // reset pane, in case user somehow happened to change it..
             select('.inspector-wrap .panewrap').style('right', '-100%');
 
             // reset pane, in case user somehow happened to change it..
             select('.inspector-wrap .panewrap').style('right', '-100%');
 
@@ -60807,7 +61201,7 @@ function uiIntroLine(context, reveal) {
                 continueTo(nameRoad);
             });
 
                 continueTo(nameRoad);
             });
 
-        timeout$$1(function() {
+        timeout(function() {
             reveal(subgrid.node(),
                 t('intro.lines.choose_preset_residential', { preset: residentialPreset.name() }),
                 { tooltipBox: '.preset-highway-residential .preset-list-button', duration: 300 }
             reveal(subgrid.node(),
                 t('intro.lines.choose_preset_residential', { preset: residentialPreset.name() }),
                 { tooltipBox: '.preset-highway-residential .preset-list-button', duration: 300 }
@@ -60835,7 +61229,7 @@ function uiIntroLine(context, reveal) {
         // disallow scrolling
         select('.inspector-wrap').on('wheel.intro', eventCancel);
 
         // disallow scrolling
         select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-        timeout$$1(function() {
+        timeout(function() {
             var button = select('.entity-editor-pane .preset-list-button');
 
             reveal(button.node(),
             var button = select('.entity-editor-pane .preset-list-button');
 
             reveal(button.node(),
@@ -60862,7 +61256,7 @@ function uiIntroLine(context, reveal) {
             continueTo(didNameRoad);
         });
 
             continueTo(didNameRoad);
         });
 
-        timeout$$1(function() {
+        timeout(function() {
             reveal('.entity-editor-pane',
                 t('intro.lines.name_road', { button: icon('#icon-apply', 'pre-text') }),
                 { tooltipClass: 'intro-lines-name_road' }
             reveal('.entity-editor-pane',
                 t('intro.lines.name_road', { button: icon('#icon-apply', 'pre-text') }),
                 { tooltipClass: 'intro-lines-name_road' }
@@ -60879,7 +61273,7 @@ function uiIntroLine(context, reveal) {
     function didNameRoad() {
         context.history().checkpoint('doneAddLine');
 
     function didNameRoad() {
         context.history().checkpoint('doneAddLine');
 
-        timeout$$1(function() {
+        timeout(function() {
             reveal('#surface', t('intro.lines.did_name_road'), {
                 buttonText: t('intro.ok'),
                 buttonCallback: function() { continueTo(updateLine); }
             reveal('#surface', t('intro.lines.did_name_road'), {
                 buttonText: t('intro.ok'),
                 buttonCallback: function() { continueTo(updateLine); }
@@ -60902,7 +61296,7 @@ function uiIntroLine(context, reveal) {
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(19).centerEase(woodRoadDragMidpoint, msec);
 
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(19).centerEase(woodRoadDragMidpoint, msec);
 
-        timeout$$1(function() {
+        timeout(function() {
             var padding = 250 * Math.pow(2, context.map().zoom() - 19);
             var box = pad$1(woodRoadDragMidpoint, padding, context);
             var advance = function() { continueTo(addNode); };
             var padding = 250 * Math.pow(2, context.map().zoom() - 19);
             var box = pad$1(woodRoadDragMidpoint, padding, context);
             var advance = function() { continueTo(addNode); };
@@ -60948,7 +61342,7 @@ function uiIntroLine(context, reveal) {
                 return continueTo(updateLine);
             }
             if (changed.created().length === 1) {
                 return continueTo(updateLine);
             }
             if (changed.created().length === 1) {
-                timeout$$1(function() { continueTo(startDragEndpoint); }, 500);
+                timeout(function() { continueTo(startDragEndpoint); }, 500);
             }
         });
 
             }
         });
 
@@ -61137,7 +61531,7 @@ function uiIntroLine(context, reveal) {
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(18).centerEase(deleteLinesLoc, msec);
 
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(18).centerEase(deleteLinesLoc, msec);
 
-        timeout$$1(function() {
+        timeout(function() {
             var padding = 200 * Math.pow(2, context.map().zoom() - 18);
             var box = pad$1(deleteLinesLoc, padding, context);
             box.top -= 200;
             var padding = 200 * Math.pow(2, context.map().zoom() - 18);
             var box = pad$1(deleteLinesLoc, padding, context);
             box.top -= 200;
@@ -61159,7 +61553,7 @@ function uiIntroLine(context, reveal) {
             });
 
             context.history().on('change.intro', function() {
             });
 
             context.history().on('change.intro', function() {
-                timeout$$1(function() {
+                timeout(function() {
                     continueTo(deleteLines);
                 }, 500);  // after any transition (e.g. if user deleted intersection)
             });
                     continueTo(deleteLines);
                 }, 500);  // after any transition (e.g. if user deleted intersection)
             });
@@ -61180,7 +61574,7 @@ function uiIntroLine(context, reveal) {
 
         context.map().zoom(18).centerEase(eleventhAvenueEnd, 500);
 
 
         context.map().zoom(18).centerEase(eleventhAvenueEnd, 500);
 
-        timeout$$1(function() {
+        timeout(function() {
             var padding = 60 * Math.pow(2, context.map().zoom() - 18);
             var box = pad$1(eleventhAvenueEnd, padding, context);
             reveal(box, t('intro.lines.rightclick_intersection',
             var padding = 60 * Math.pow(2, context.map().zoom() - 18);
             var box = pad$1(eleventhAvenueEnd, padding, context);
             reveal(box, t('intro.lines.rightclick_intersection',
@@ -61201,7 +61595,7 @@ function uiIntroLine(context, reveal) {
                 var ids = context.selectedIDs();
                 if (ids.length !== 1 || ids[0] !== eleventhAvenueEndId) return;
 
                 var ids = context.selectedIDs();
                 if (ids.length !== 1 || ids[0] !== eleventhAvenueEndId) return;
 
-                timeout$$1(function() {
+                timeout(function() {
                     var node = selectMenuItem('split').node();
                     if (!node) return;
                     continueTo(splitIntersection);
                     var node = selectMenuItem('split').node();
                     if (!node) return;
                     continueTo(splitIntersection);
@@ -61209,7 +61603,7 @@ function uiIntroLine(context, reveal) {
             });
 
             context.history().on('change.intro', function() {
             });
 
             context.history().on('change.intro', function() {
-                timeout$$1(function() {
+                timeout(function() {
                     continueTo(deleteLines);
                 }, 300);  // after any transition (e.g. if user deleted intersection)
             });
                     continueTo(deleteLines);
                 }, 300);  // after any transition (e.g. if user deleted intersection)
             });
@@ -61255,7 +61649,7 @@ function uiIntroLine(context, reveal) {
 
         context.history().on('change.intro', function(changed) {
             wasChanged = true;
 
         context.history().on('change.intro', function(changed) {
             wasChanged = true;
-            timeout$$1(function() {
+            timeout(function() {
                 if (context.history().undoAnnotation() === t('operations.split.annotation.line')) {
                     washingtonSegmentId = changed.created()[0].id;
                     continueTo(didSplit);
                 if (context.history().undoAnnotation() === t('operations.split.annotation.line')) {
                     washingtonSegmentId = changed.created()[0].id;
                     continueTo(didSplit);
@@ -61320,7 +61714,7 @@ function uiIntroLine(context, reveal) {
             { duration: 500 }
         );
 
             { duration: 500 }
         );
 
-        timeout$$1(function() {
+        timeout(function() {
             context.map().zoom(18).centerEase(twelfthAvenue, 500);
 
             context.map().on('move.intro drawn.intro', function() {
             context.map().zoom(18).centerEase(twelfthAvenue, 500);
 
             context.map().on('move.intro drawn.intro', function() {
@@ -61380,7 +61774,7 @@ function uiIntroLine(context, reveal) {
 
         context.map().zoom(18).centerEase(twelfthAvenue, 500);
 
 
         context.map().zoom(18).centerEase(twelfthAvenue, 500);
 
-        timeout$$1(function() {
+        timeout(function() {
             var selected, other, padding, box;
             if (hasWashington) {
                 selected = t('intro.graph.name.washington-street');
             var selected, other, padding, box;
             if (hasWashington) {
                 selected = t('intro.graph.name.washington-street');
@@ -61465,7 +61859,7 @@ function uiIntroLine(context, reveal) {
         });
 
         select(window).on('click.intro contextmenu.intro', function() {
         });
 
         select(window).on('click.intro contextmenu.intro', function() {
-            timeout$$1(function() {
+            timeout(function() {
                 var ids = context.selectedIDs();
                 if (ids.length === 2 &&
                     ids.indexOf(twelfthAvenueId) !== -1 &&
                 var ids = context.selectedIDs();
                 if (ids.length === 2 &&
                     ids.indexOf(twelfthAvenueId) !== -1 &&
@@ -61618,7 +62012,7 @@ function uiIntroBuilding(context, reveal) {
     };
 
 
     };
 
 
-    function timeout$$1(f, t$$1) {
+    function timeout(f, t$$1) {
         timeouts.push(window.setTimeout(f, t$$1));
     }
 
         timeouts.push(window.setTimeout(f, t$$1));
     }
 
@@ -61646,11 +62040,11 @@ function uiIntroBuilding(context, reveal) {
     function revealEditMenu(loc, text$$1, options) {
         var rect = context.surfaceRect();
         var point = context.curtainProjection(loc);
     function revealEditMenu(loc, text$$1, options) {
         var rect = context.surfaceRect();
         var point = context.curtainProjection(loc);
-        var pad$$1 = 40;
-        var width = 250 + (2 * pad$$1);
+        var pad = 40;
+        var width = 250 + (2 * pad);
         var height = 350;
         var startX = rect.left + point[0];
         var height = 350;
         var startX = rect.left + point[0];
-        var left = (textDirection === 'rtl') ? (startX - width + pad$$1) : (startX - pad$$1);
+        var left = (textDirection === 'rtl') ? (startX - width + pad) : (startX - pad);
         var box = {
             left: left,
             top: point[1] + rect.top - 60,
         var box = {
             left: left,
             top: point[1] + rect.top - 60,
@@ -61670,7 +62064,7 @@ function uiIntroBuilding(context, reveal) {
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(19).centerEase(house, msec);
 
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(19).centerEase(house, msec);
 
-        timeout$$1(function() {
+        timeout(function() {
             var tooltip = reveal('button.add-area',
                 t('intro.buildings.add_building', { button: icon('#icon-area', 'pre-text') }));
 
             var tooltip = reveal('button.add-area',
                 t('intro.buildings.add_building', { button: icon('#icon-area', 'pre-text') }));
 
@@ -61701,7 +62095,7 @@ function uiIntroBuilding(context, reveal) {
         houseId = null;
         context.map().zoomEase(20, 500);
 
         houseId = null;
         context.map().zoomEase(20, 500);
 
-        timeout$$1(function() {
+        timeout(function() {
             revealHouse(house, t('intro.buildings.start_building'));
 
             context.map().on('move.intro drawn.intro', function() {
             revealHouse(house, t('intro.buildings.start_building'));
 
             context.map().on('move.intro drawn.intro', function() {
@@ -61797,7 +62191,7 @@ function uiIntroBuilding(context, reveal) {
         // disallow scrolling
         select('.inspector-wrap').on('wheel.intro', eventCancel);
 
         // disallow scrolling
         select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-        timeout$$1(function() {
+        timeout(function() {
             // reset pane, in case user somehow happened to change it..
             select('.inspector-wrap .panewrap').style('right', '-100%');
 
             // reset pane, in case user somehow happened to change it..
             select('.inspector-wrap .panewrap').style('right', '-100%');
 
@@ -61846,7 +62240,7 @@ function uiIntroBuilding(context, reveal) {
         // disallow scrolling
         select('.inspector-wrap').on('wheel.intro', eventCancel);
 
         // disallow scrolling
         select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-        timeout$$1(function() {
+        timeout(function() {
             // reset pane, in case user somehow happened to change it..
             select('.inspector-wrap .panewrap').style('right', '-100%');
 
             // reset pane, in case user somehow happened to change it..
             select('.inspector-wrap .panewrap').style('right', '-100%');
 
@@ -61899,7 +62293,7 @@ function uiIntroBuilding(context, reveal) {
             continueTo(rightClickHouse);
         });
 
             continueTo(rightClickHouse);
         });
 
-        timeout$$1(function() {
+        timeout(function() {
             reveal('.entity-editor-pane',
                 t('intro.buildings.close', { button: icon('#icon-apply', 'pre-text') })
             );
             reveal('.entity-editor-pane',
                 t('intro.buildings.close', { button: icon('#icon-apply', 'pre-text') })
             );
@@ -61919,7 +62313,7 @@ function uiIntroBuilding(context, reveal) {
         context.history().reset('hasHouse');
         context.map().centerEase(house, 500);
 
         context.history().reset('hasHouse');
         context.map().centerEase(house, 500);
 
-        timeout$$1(function() {
+        timeout(function() {
             if (context.map().zoom() < 20) {
                 context.map().zoomEase(20, 500);
             }
             if (context.map().zoom() < 20) {
                 context.map().zoomEase(20, 500);
             }
@@ -61930,7 +62324,7 @@ function uiIntroBuilding(context, reveal) {
             var ids = context.selectedIDs();
             if (ids.length !== 1 || ids[0] !== houseId) return;
 
             var ids = context.selectedIDs();
             if (ids.length !== 1 || ids[0] !== houseId) return;
 
-            timeout$$1(function() {
+            timeout(function() {
                 var node = selectMenuItem('orthogonalize').node();
                 if (!node) return;
                 continueTo(clickSquare);
                 var node = selectMenuItem('orthogonalize').node();
                 if (!node) return;
                 continueTo(clickSquare);
@@ -61992,7 +62386,7 @@ function uiIntroBuilding(context, reveal) {
             context.history().on('change.intro', null);
 
             // Something changed.  Wait for transition to complete and check undo annotation.
             context.history().on('change.intro', null);
 
             // Something changed.  Wait for transition to complete and check undo annotation.
-            timeout$$1(function() {
+            timeout(function() {
                 if (context.history().undoAnnotation() === t('operations.orthogonalize.annotation.area')) {
                     continueTo(doneSquare);
                 } else {
                 if (context.history().undoAnnotation() === t('operations.orthogonalize.annotation.area')) {
                     continueTo(doneSquare);
                 } else {
@@ -62047,7 +62441,7 @@ function uiIntroBuilding(context, reveal) {
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(19.5).centerEase(tank, msec);
 
         if (msec) { reveal(null, null, { duration: 0 }); }
         context.map().zoom(19.5).centerEase(tank, msec);
 
-        timeout$$1(function() {
+        timeout(function() {
             reveal('button.add-area',
                 t('intro.buildings.add_tank', { button: icon('#icon-area', 'pre-text') })
             );
             reveal('button.add-area',
                 t('intro.buildings.add_tank', { button: icon('#icon-area', 'pre-text') })
             );
@@ -62072,7 +62466,7 @@ function uiIntroBuilding(context, reveal) {
 
         tankId = null;
 
 
         tankId = null;
 
-        timeout$$1(function() {
+        timeout(function() {
             revealTank(tank, t('intro.buildings.start_tank'));
 
             context.map().on('move.intro drawn.intro', function() {
             revealTank(tank, t('intro.buildings.start_tank'));
 
             context.map().on('move.intro drawn.intro', function() {
@@ -62138,7 +62532,7 @@ function uiIntroBuilding(context, reveal) {
         // disallow scrolling
         select('.inspector-wrap').on('wheel.intro', eventCancel);
 
         // disallow scrolling
         select('.inspector-wrap').on('wheel.intro', eventCancel);
 
-        timeout$$1(function() {
+        timeout(function() {
             // reset pane, in case user somehow happened to change it..
             select('.inspector-wrap .panewrap').style('right', '-100%');
 
             // reset pane, in case user somehow happened to change it..
             select('.inspector-wrap .panewrap').style('right', '-100%');
 
@@ -62222,7 +62616,7 @@ function uiIntroBuilding(context, reveal) {
             continueTo(rightClickTank);
         });
 
             continueTo(rightClickTank);
         });
 
-        timeout$$1(function() {
+        timeout(function() {
             reveal('.entity-editor-pane',
                 t('intro.buildings.close', { button: icon('#icon-apply', 'pre-text') })
             );
             reveal('.entity-editor-pane',
                 t('intro.buildings.close', { button: icon('#icon-apply', 'pre-text') })
             );
@@ -62242,13 +62636,13 @@ function uiIntroBuilding(context, reveal) {
         context.history().reset('hasTank');
         context.map().centerEase(tank, 500);
 
         context.history().reset('hasTank');
         context.map().centerEase(tank, 500);
 
-        timeout$$1(function() {
+        timeout(function() {
             context.on('enter.intro', function(mode) {
                 if (mode.id !== 'select') return;
                 var ids = context.selectedIDs();
                 if (ids.length !== 1 || ids[0] !== tankId) return;
 
             context.on('enter.intro', function(mode) {
                 if (mode.id !== 'select') return;
                 var ids = context.selectedIDs();
                 if (ids.length !== 1 || ids[0] !== tankId) return;
 
-                timeout$$1(function() {
+                timeout(function() {
                     var node = selectMenuItem('circularize').node();
                     if (!node) return;
                     continueTo(clickCircle);
                     var node = selectMenuItem('circularize').node();
                     if (!node) return;
                     continueTo(clickCircle);
@@ -62314,7 +62708,7 @@ function uiIntroBuilding(context, reveal) {
             context.history().on('change.intro', null);
 
             // Something changed.  Wait for transition to complete and check undo annotation.
             context.history().on('change.intro', null);
 
             // Something changed.  Wait for transition to complete and check undo annotation.
-            timeout$$1(function() {
+            timeout(function() {
                 if (context.history().undoAnnotation() === t('operations.circularize.annotation.area')) {
                     continueTo(play);
                 } else {
                 if (context.history().undoAnnotation() === t('operations.circularize.annotation.area')) {
                     continueTo(play);
                 } else {
@@ -62608,6 +63002,254 @@ function uiIntro(context) {
     return intro;
 }
 
     return intro;
 }
 
+function uiShortcuts() {
+    var key = '?';
+    var detected = utilDetect();
+    var activeTab = 0;
+    var modalSelection;
+    var savedSelection;
+
+
+    var keybinding = d3keybinding('shortcuts')
+        .on([key], function () {
+            if (selectAll('.modal-shortcuts').size()) {  // already showing
+                if (modalSelection) {
+                    modalSelection.close();
+                    modalSelection = null;
+                }
+            } else {
+                modalSelection = uiModal(savedSelection);
+                shortcutsModal(modalSelection);
+            }
+        });
+
+    select(document)
+        .call(keybinding);
+
+
+
+    function shortcutsModal(modalSelection) {
+        modalSelection.select('.modal')
+            .classed('modal-shortcuts', true);
+
+        var shortcutsModal = modalSelection.select('.content');
+
+        shortcutsModal
+            .append('div')
+            .attr('class', 'modal-section')
+            .append('h3')
+            .text(t('shortcuts.title'));
+
+        shortcutsModal
+            .call(render);
+    }
+
+
+    function render(selection$$1) {
+        var wrapper = selection$$1
+            .selectAll('.wrapper')
+            .data([0]);
+
+        var wrapperEnter = wrapper
+            .enter()
+            .append('div')
+            .attr('class', 'wrapper modal-section');
+
+        var tabsBar = wrapperEnter
+            .append('div')
+            .attr('class', 'tabs-bar');
+
+        var shortcutsList = wrapperEnter
+            .append('div')
+            .attr('class', 'shortcuts-list');
+
+        wrapper = wrapper.merge(wrapperEnter);
+
+        var tabs = tabsBar
+            .selectAll('.tab')
+            .data(dataShortcuts);
+
+        var tabsEnter = tabs
+            .enter()
+            .append('div')
+            .attr('class', 'tab')
+            .on('click', function (d, i) {
+                activeTab = i;
+                render(selection$$1);
+            });
+
+        tabsEnter
+            .append('span')
+            .text(function (d) { return t(d.text); });
+
+        tabs = tabs
+            .merge(tabsEnter);
+
+        // Update
+        wrapper.selectAll('.tab')
+            .classed('active', function (d, i) {
+                return i === activeTab;
+            });
+
+
+        var shortcuts = shortcutsList
+            .selectAll('.shortcut-tab')
+            .data(dataShortcuts);
+
+        var shortcutsEnter = shortcuts
+            .enter()
+            .append('div')
+            .attr('class', 'shortcut-tab');
+
+        var columnsEnter = shortcutsEnter
+            .selectAll('.shortcut-column')
+            .data(function (d) { return d.columns; })
+            .enter()
+            .append('table')
+            .attr('class', 'shortcut-column');
+
+        var rowsEnter = columnsEnter
+            .selectAll('.shortcut-row')
+            .data(function (d) { return d.rows; })
+            .enter()
+            .append('tr')
+            .attr('class', 'shortcut-row');
+
+
+        var sectionRows = rowsEnter
+            .filter(function (d) { return !d.shortcuts; });
+
+        sectionRows
+            .append('td');
+
+        sectionRows
+            .append('td')
+            .attr('class', 'shortcut-section')
+            .append('h3')
+            .text(function (d) { return t(d.text); });
+
+
+        var shortcutRows = rowsEnter
+            .filter(function (d) { return d.shortcuts; });
+
+        var shortcutKeys = shortcutRows
+            .append('td')
+            .attr('class', 'shortcut-keys');
+
+        var modifierKeys = shortcutKeys
+            .filter(function (d) { return d.modifiers; });
+
+        modifierKeys
+            .selectAll('kbd.modifier')
+            .data(function (d) {
+                if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') {
+                    return ['⌘'];
+                } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') {
+                    return [];
+                } else {
+                    return d.modifiers;
+                }
+            })
+            .enter()
+            .each(function () {
+                var selection$$1 = select(this);
+
+                selection$$1
+                    .append('kbd')
+                    .attr('class', 'modifier')
+                    .text(function (d) { return uiCmd.display(d); });
+
+                selection$$1
+                    .append('span')
+                    .text('+');
+            });
+
+
+        shortcutKeys
+            .selectAll('kbd.shortcut')
+            .data(function (d) {
+                var arr = d.shortcuts;
+                if (detected.os === 'win' && d.text === 'shortcuts.editing.commands.redo') {
+                    arr = ['Y'];
+                } else if (detected.os !== 'mac' && d.text === 'shortcuts.browsing.display_options.fullscreen') {
+                    arr = ['F11'];
+                }
+
+                return arr.map(function(s) {
+                    return {
+                        shortcut: s,
+                        separator: d.separator
+                    };
+                });
+            })
+            .enter()
+            .each(function (d, i, nodes) {
+                var selection$$1 = select(this);
+                var click = d.shortcut.toLowerCase().match(/(.*).click/);
+
+                if (click && click[1]) {
+                    selection$$1
+                        .call(svgIcon('#walkthrough-mouse', 'mouseclick', click[1]));
+                } else {
+                    selection$$1
+                        .append('kbd')
+                        .attr('class', 'shortcut')
+                        .text(function (d) {
+                            var key = d.shortcut;
+                            return key.indexOf('.') !== -1 ? uiCmd.display(t(key)) : uiCmd.display(key);
+                        });
+                }
+
+                if (i < nodes.length - 1) {
+                    selection$$1
+                        .append('span')
+                        .text(d.separator || '\u00a0' + t('shortcuts.or') + '\u00a0');
+                }
+            });
+
+
+        shortcutKeys
+            .filter(function(d) { return d.gesture; })
+            .each(function () {
+                var selection$$1 = select(this);
+
+                selection$$1
+                    .append('span')
+                    .text('+');
+
+                selection$$1
+                    .append('span')
+                    .attr('class', 'gesture')
+                    .text(function (d) { return t(d.gesture); });
+            });
+
+
+        shortcutRows
+            .append('td')
+            .attr('class', 'shortcut-desc')
+            .text(function (d) { return d.text ? t(d.text) : '\u00a0'; });
+
+
+        shortcuts = shortcuts
+            .merge(shortcutsEnter);
+
+        // Update
+        wrapper.selectAll('.shortcut-tab')
+            .style('display', function (d, i) {
+                return i === activeTab ? 'flex' : 'none';
+            });
+    }
+
+
+    return function(selection$$1, show) {
+        savedSelection = selection$$1;
+        if (show) {
+            modalSelection = uiModal(selection$$1);
+            shortcutsModal(modalSelection);
+        }
+    };
+}
+
 function uiHelp(context) {
     var key = 'H';
 
 function uiHelp(context) {
     var key = 'H';
 
@@ -62735,6 +63377,11 @@ function uiHelp(context) {
         }
 
 
         }
 
 
+        function clickShortcuts() {
+            context.container().call(uiShortcuts(context), true);
+        }
+
+
         var pane = selection$$1.append('div')
                 .attr('class', 'help-wrap map-overlay fillL col5 content hide'),
             tooltipBehavior = tooltip()
         var pane = selection$$1.append('div')
                 .attr('class', 'help-wrap map-overlay fillL col5 content hide'),
             tooltipBehavior = tooltip()
@@ -62760,6 +63407,21 @@ function uiHelp(context) {
             .html(function(d) { return d.title; })
             .on('click', clickHelp);
 
             .html(function(d) { return d.title; })
             .on('click', clickHelp);
 
+        var shortcuts = toc
+            .append('li')
+            .attr('class', 'shortcuts')
+            .call(tooltip()
+                .html(true)
+                .title(uiTooltipHtml(t('shortcuts.tooltip'), '?'))
+                .placement('top')
+            )
+            .append('a')
+            .on('click', clickShortcuts);
+
+        shortcuts
+            .append('div')
+            .text(t('shortcuts.title'));
+
         var walkthrough = toc
             .append('li')
             .attr('class', 'walkthrough')
         var walkthrough = toc
             .append('li')
             .attr('class', 'walkthrough')
@@ -63717,15 +64379,15 @@ function uiSave(context) {
 
 
     function getBackground(numChanges) {
 
 
     function getBackground(numChanges) {
-        var step;
+        var step$$1;
         if (numChanges === 0) {
             return null;
         } else if (numChanges <= 50) {
         if (numChanges === 0) {
             return null;
         } else if (numChanges <= 50) {
-            step = numChanges / 50;
-            return interpolateRgb('#fff', '#ff8')(step);  // white -> yellow
+            step$$1 = numChanges / 50;
+            return interpolateRgb('#fff', '#ff8')(step$$1);  // white -> yellow
         } else {
         } else {
-            step = Math.min((numChanges - 50) / 50, 1.0);
-            return interpolateRgb('#ff8', '#f88')(step);  // yellow -> red
+            step$$1 = Math.min((numChanges - 50) / 50, 1.0);
+            return interpolateRgb('#ff8', '#f88')(step$$1);  // yellow -> red
         }
     }
 
         }
     }
 
@@ -67861,25 +68523,25 @@ function uiFieldRestrictions(field, context) {
             vertex = graph.entity(vertexID),
             filter = utilFunctor(true),
             extent$$1 = geoExtent$$1(),
             vertex = graph.entity(vertexID),
             filter = utilFunctor(true),
             extent$$1 = geoExtent$$1(),
-            projection = geoRawMercator();
+            projection$$1 = geoRawMercator();
 
         var d = utilGetDimensions(wrap.merge(enter)),
             c = [d[0] / 2, d[1] / 2],
             z = 24;
 
 
         var d = utilGetDimensions(wrap.merge(enter)),
             c = [d[0] / 2, d[1] / 2],
             z = 24;
 
-        projection
+        projection$$1
             .scale(256 * Math.pow(2, z) / (2 * Math.PI));
 
             .scale(256 * Math.pow(2, z) / (2 * Math.PI));
 
-        var s = projection(vertex.loc);
+        var s = projection$$1(vertex.loc);
 
 
-        projection
+        projection$$1
             .translate([c[0] - s[0], c[1] - s[1]])
             .clipExtent([[0, 0], d]);
 
             .translate([c[0] - s[0], c[1] - s[1]])
             .clipExtent([[0, 0], d]);
 
-        var drawLayers = svgLayers(projection, context).only('osm').dimensions(d),
-            drawVertices = svgVertices$$1(projection, context),
-            drawLines = svgLines$$1(projection, context),
-            drawTurns = svgTurns(projection, context);
+        var drawLayers = svgLayers(projection$$1, context).only('osm').dimensions(d),
+            drawVertices = svgVertices$$1(projection$$1, context),
+            drawLines = svgLines$$1(projection$$1, context),
+            drawTurns = svgTurns(projection$$1, context);
 
         enter
             .call(drawLayers);
 
         enter
             .call(drawLayers);
@@ -67941,12 +68603,12 @@ function uiFieldRestrictions(field, context) {
             } else if (datum instanceof osmTurn) {
                 if (datum.restriction) {
                     context.perform(
             } else if (datum instanceof osmTurn) {
                 if (datum.restriction) {
                     context.perform(
-                        actionUnrestrictTurn(datum, projection),
+                        actionUnrestrictTurn(datum, projection$$1),
                         t('operations.restriction.annotation.delete')
                     );
                 } else {
                     context.perform(
                         t('operations.restriction.annotation.delete')
                     );
                 } else {
                     context.perform(
-                        actionRestrictTurn(datum, projection),
+                        actionRestrictTurn(datum, projection$$1),
                         t('operations.restriction.annotation.create')
                     );
                 }
                         t('operations.restriction.annotation.create')
                     );
                 }
@@ -67970,7 +68632,7 @@ function uiFieldRestrictions(field, context) {
                             datum.from,
                             datum.via,
                             datum.to,
                             datum.from,
                             datum.via,
                             datum.to,
-                            projection
+                            projection$$1
                         )
                     );
                 }
                         )
                     );
                 }
@@ -68081,7 +68743,7 @@ function uiFieldWikipedia(field, context) {
     var dispatch$$1 = dispatch('change'),
         wikipedia = services.wikipedia,
         wikidata = services.wikidata,
     var dispatch$$1 = dispatch('change'),
         wikipedia = services.wikipedia,
         wikidata = services.wikidata,
-        link = select(null),
+        link$$1 = select(null),
         lang = select(null),
         title = select(null),
         wikiURL = '',
         lang = select(null),
         title = select(null),
         wikiURL = '',
@@ -68155,17 +68817,17 @@ function uiFieldWikipedia(field, context) {
             .on('change', change);
 
 
             .on('change', change);
 
 
-        link = selection$$1.selectAll('.wiki-link')
+        link$$1 = selection$$1.selectAll('.wiki-link')
             .data([0]);
 
             .data([0]);
 
-        link = link.enter()
+        link$$1 = link$$1.enter()
             .append('button')
             .attr('class', 'button-input-action wiki-link minor')
             .attr('tabindex', -1)
             .call(svgIcon('#icon-out-link'))
             .append('button')
             .attr('class', 'button-input-action wiki-link minor')
             .attr('tabindex', -1)
             .call(svgIcon('#icon-out-link'))
-            .merge(link);
+            .merge(link$$1);
 
 
-        link
+        link$$1
             .on('click', function() {
                 event.preventDefault();
                 if (wikiURL) window.open(wikiURL, '_blank');
             .on('click', function() {
                 event.preventDefault();
                 if (wikiURL) window.open(wikiURL, '_blank');
@@ -68514,7 +69176,11 @@ function uiPreset(context) {
             .classed('modified', function(field) { return field.modified(); })
             .classed('present', function(field) { return field.present(); })
             .each(function(field) {
             .classed('modified', function(field) { return field.modified(); })
             .classed('present', function(field) { return field.present(); })
             .each(function(field) {
-                var reference = uiTagReference(field.reference || { key: field.key }, context);
+                var referenceKey = field.key;
+                if (field.type === 'multiCombo') {   // lookup key without the trailing ':'
+                    referenceKey = referenceKey.replace(/:$/, '');
+                }
+                var reference = uiTagReference(field.reference || { key: referenceKey }, context);
 
                 if (state === 'hover') {
                     reference.showing(false);
 
                 if (state === 'hover') {
                     reference.showing(false);
@@ -69816,13 +70482,14 @@ function uiZoom(context) {
 
         var keybinding = d3keybinding('zoom');
 
 
         var keybinding = d3keybinding('zoom');
 
-        lodash.each(['=','ffequals','plus','ffplus'], function(key) {
-            keybinding.on([key, '⇧' + key], zoomIn);
-            keybinding.on([uiCmd('⌘' + key), uiCmd('⌘⇧' + key)], zoomInFurther);
+       lodash.each(['plus', 'ffplus', '=', 'ffequals'], function(key) {
+            keybinding.on([key], zoomIn);
+            keybinding.on([uiCmd('⌘' + key)], zoomInFurther);
         });
         });
-        lodash.each(['-','ffminus','dash'], function(key) {
-            keybinding.on([key, '⇧' + key], zoomOut);
-            keybinding.on([uiCmd('⌘' + key), uiCmd('⌘⇧' + key)], zoomOutFurther);
+
+        lodash.each(['_', '-', 'ffminus', 'dash'], function(key) {
+            keybinding.on([key], zoomOut);
+            keybinding.on([uiCmd('⌘' + key)], zoomOutFurther);
         });
 
         select(document)
         });
 
         select(document)
@@ -69838,13 +70505,13 @@ function uiInit(context) {
         container
             .attr('dir', textDirection);
 
         container
             .attr('dir', textDirection);
 
-        var map$$1 = context.map();
+        var map = context.map();
 
         var hash = behaviorHash(context);
         hash();
 
         if (!hash.hadHash) {
 
         var hash = behaviorHash(context);
         hash();
 
         if (!hash.hadHash) {
-            map$$1.centerZoom([0, 0], 2);
+            map.centerZoom([0, 0], 2);
         }
 
         container
         }
 
         container
@@ -69872,7 +70539,7 @@ function uiInit(context) {
             .append('div')
             .attr('id', 'map')
             .attr('dir', 'ltr')
             .append('div')
             .attr('id', 'map')
             .attr('dir', 'ltr')
-            .call(map$$1);
+            .call(map);
 
         content
             .call(uiMapInMap(context));
 
         content
             .call(uiMapInMap(context));
@@ -70036,12 +70703,12 @@ function uiInit(context) {
             context.history().unlock();
         };
 
             context.history().unlock();
         };
 
-        var mapDimensions = map$$1.dimensions();
+        var mapDimensions = map.dimensions();
 
 
         function onResize() {
             mapDimensions = utilGetDimensions(content, true);
 
 
         function onResize() {
             mapDimensions = utilGetDimensions(content, true);
-            map$$1.dimensions(mapDimensions);
+            map.dimensions(mapDimensions);
         }
 
         select(window)
         }
 
         select(window)
@@ -70079,7 +70746,8 @@ function uiInit(context) {
         if (!uiInitCounter++) {
             context.container()
                 .call(uiSplash(context))
         if (!uiInitCounter++) {
             context.container()
                 .call(uiSplash(context))
-                .call(uiRestore(context));
+                .call(uiRestore(context))
+                .call(uiShortcuts(context));
         }
 
         var authenticating = uiLoading(context)
         }
 
         var authenticating = uiLoading(context)
@@ -72321,7 +72989,7 @@ function presetPreset(id, preset, fields) {
 
     var reference = preset.reference || {};
     preset.reference = function(geometry) {
 
     var reference = preset.reference || {};
     preset.reference = function(geometry) {
-        var key = reference.key || Object.keys(preset.tags)[0],
+        var key = reference.key || Object.keys(lodash.omit(preset.tags, 'name'))[0],
             value = reference.value || preset.tags[key];
 
         if (geometry === 'relation' && key === 'type') {
             value = reference.value || preset.tags[key];
 
         if (geometry === 'relation' && key === 'type') {
@@ -72651,12 +73319,12 @@ function coreContext() {
         return context;
     };
 
         return context;
     };
 
-    context.loadTiles = function(projection, dimensions, callback) {
+    context.loadTiles = function(projection$$1, dimensions, callback) {
         function done(err, result) {
             entitiesLoaded(err, result);
             if (callback) callback(err, result);
         }
         function done(err, result) {
             entitiesLoaded(err, result);
             if (callback) callback(err, result);
         }
-        connection.loadTiles(projection, dimensions, done);
+        connection.loadTiles(projection$$1, dimensions, done);
     };
 
     context.loadEntity = function(id, callback) {
     };
 
     context.loadEntity = function(id, callback) {
@@ -72672,20 +73340,20 @@ function coreContext() {
             this.loadEntity(id, function(err, result) {
                 if (err) return;
                 var entity = lodash.find(result.data, function(e) { return e.id === id; });
             this.loadEntity(id, function(err, result) {
                 if (err) return;
                 var entity = lodash.find(result.data, function(e) { return e.id === id; });
-                if (entity) { map$$1.zoomTo(entity); }
+                if (entity) { map.zoomTo(entity); }
             });
         }
 
             });
         }
 
-        map$$1.on('drawn.zoomToEntity', function() {
+        map.on('drawn.zoomToEntity', function() {
             if (!context.hasEntity(id)) return;
             if (!context.hasEntity(id)) return;
-            map$$1.on('drawn.zoomToEntity', null);
+            map.on('drawn.zoomToEntity', null);
             context.on('enter.zoomToEntity', null);
             context.enter(modeSelect(context, [id]));
         });
 
         context.on('enter.zoomToEntity', function() {
             if (mode.id !== 'browse') {
             context.on('enter.zoomToEntity', null);
             context.enter(modeSelect(context, [id]));
         });
 
         context.on('enter.zoomToEntity', function() {
             if (mode.id !== 'browse') {
-                map$$1.on('drawn.zoomToEntity', null);
+                map.on('drawn.zoomToEntity', null);
                 context.on('enter.zoomToEntity', null);
             }
         });
                 context.on('enter.zoomToEntity', null);
             }
         });
@@ -72812,13 +73480,13 @@ function coreContext() {
 
 
     /* Map */
 
 
     /* Map */
-    var map$$1;
-    context.map = function() { return map$$1; };
-    context.layers = function() { return map$$1.layers; };
-    context.surface = function() { return map$$1.surface; };
-    context.editable = function() { return map$$1.editable(); };
+    var map;
+    context.map = function() { return map; };
+    context.layers = function() { return map.layers; };
+    context.surface = function() { return map.surface; };
+    context.editable = function() { return map.editable(); };
     context.surfaceRect = function() {
     context.surfaceRect = function() {
-        return map$$1.surface.node().getBoundingClientRect();
+        return map.surface.node().getBoundingClientRect();
     };
 
 
     };
 
 
@@ -72937,7 +73605,7 @@ function coreContext() {
 
 
     /* Init */
 
 
     /* Init */
-    context.version = '2.2.1';
+    context.version = '2.2.2';
 
     context.projection = geoRawMercator();
     context.curtainProjection = geoRawMercator();
 
     context.projection = geoRawMercator();
     context.curtainProjection = geoRawMercator();
@@ -72977,15 +73645,15 @@ function coreContext() {
     features = rendererFeatures(context);
     presets = presetIndex();
 
     features = rendererFeatures(context);
     presets = presetIndex();
 
-    map$$1 = rendererMap(context);
-    context.mouse = map$$1.mouse;
-    context.extent = map$$1.extent;
-    context.pan = map$$1.pan;
-    context.zoomIn = map$$1.zoomIn;
-    context.zoomOut = map$$1.zoomOut;
-    context.zoomInFurther = map$$1.zoomInFurther;
-    context.zoomOutFurther = map$$1.zoomOutFurther;
-    context.redrawEnable = map$$1.redrawEnable;
+    map = rendererMap(context);
+    context.mouse = map.mouse;
+    context.extent = map.extent;
+    context.pan = map.pan;
+    context.zoomIn = map.zoomIn;
+    context.zoomOut = map.zoomOut;
+    context.zoomInFurther = map.zoomInFurther;
+    context.zoomOutFurther = map.zoomOutFurther;
+    context.redrawEnable = map.redrawEnable;
 
     lodash.each(services, function(service) {
         if (service && typeof service.init === 'function') {
 
     lodash.each(services, function(service) {
         if (service && typeof service.init === 'function') {
@@ -73709,7 +74377,7 @@ function actionChangeTags(entityId, tags) {
     };
 }
 
     };
 }
 
-function actionCircularize(wayId, projection, maxAngle) {
+function actionCircularize(wayId, projection$$1, maxAngle) {
     maxAngle = (maxAngle || 20) * Math.PI / 180;
 
 
     maxAngle = (maxAngle || 20) * Math.PI / 180;
 
 
@@ -73730,8 +74398,8 @@ function actionCircularize(wayId, projection, maxAngle) {
 
         var nodes = lodash.uniq(graph.childNodes(way)),
             keyNodes = nodes.filter(function(n) { return graph.parentWays(n).length !== 1; }),
 
         var nodes = lodash.uniq(graph.childNodes(way)),
             keyNodes = nodes.filter(function(n) { return graph.parentWays(n).length !== 1; }),
-            points = nodes.map(function(n) { return projection(n.loc); }),
-            keyPoints = keyNodes.map(function(n) { return projection(n.loc); }),
+            points = nodes.map(function(n) { return projection$$1(n.loc); }),
+            keyPoints = keyNodes.map(function(n) { return projection$$1(n.loc); }),
             centroid = (points.length === 2) ? geoInterp(points[0], points[1], 0.5) : d3polygonCentroid(points),
             radius = median(points, function(p) { return geoEuclideanDistance(centroid, p); }),
             sign = d3polygonArea(points) > 0 ? 1 : -1,
             centroid = (points.length === 2) ? geoInterp(points[0], points[1], 0.5) : d3polygonCentroid(points),
             radius = median(points, function(p) { return geoEuclideanDistance(centroid, p); }),
             sign = d3polygonArea(points) > 0 ? 1 : -1,
@@ -73773,13 +74441,13 @@ function actionCircularize(wayId, projection, maxAngle) {
             }
 
             // position this key node
             }
 
             // position this key node
-            var distance = geoEuclideanDistance(centroid, keyPoints[i]);
-            if (distance === 0) { distance = 1e-4; }
+            var distance$$1 = geoEuclideanDistance(centroid, keyPoints[i]);
+            if (distance$$1 === 0) { distance$$1 = 1e-4; }
             keyPoints[i] = [
             keyPoints[i] = [
-                centroid[0] + (keyPoints[i][0] - centroid[0]) / distance * radius,
-                centroid[1] + (keyPoints[i][1] - centroid[1]) / distance * radius
+                centroid[0] + (keyPoints[i][0] - centroid[0]) / distance$$1 * radius,
+                centroid[1] + (keyPoints[i][1] - centroid[1]) / distance$$1 * radius
             ];
             ];
-            loc = projection.invert(keyPoints[i]);
+            loc = projection$$1.invert(keyPoints[i]);
             node = keyNodes[i];
             origNode = origNodes[node.id];
             node = node.move(geoInterp(origNode.loc, loc, t));
             node = keyNodes[i];
             origNode = origNodes[node.id];
             node = node.move(geoInterp(origNode.loc, loc, t));
@@ -73804,7 +74472,7 @@ function actionCircularize(wayId, projection, maxAngle) {
             // move existing nodes
             for (j = 1; j < indexRange; j++) {
                 angle = startAngle + j * eachAngle;
             // move existing nodes
             for (j = 1; j < indexRange; j++) {
                 angle = startAngle + j * eachAngle;
-                loc = projection.invert([
+                loc = projection$$1.invert([
                     centroid[0] + Math.cos(angle) * radius,
                     centroid[1] + Math.sin(angle) * radius
                 ]);
                     centroid[0] + Math.cos(angle) * radius,
                     centroid[1] + Math.sin(angle) * radius
                 ]);
@@ -73820,7 +74488,7 @@ function actionCircularize(wayId, projection, maxAngle) {
             // add new inbetween nodes if necessary
             for (j = 0; j < numberNewPoints; j++) {
                 angle = startAngle + (indexRange + j) * eachAngle;
             // add new inbetween nodes if necessary
             for (j = 0; j < numberNewPoints; j++) {
                 angle = startAngle + (indexRange + j) * eachAngle;
-                loc = projection.invert([
+                loc = projection$$1.invert([
                     centroid[0] + Math.cos(angle) * radius,
                     centroid[1] + Math.sin(angle) * radius
                 ]);
                     centroid[0] + Math.cos(angle) * radius,
                     centroid[1] + Math.sin(angle) * radius
                 ]);
@@ -73890,7 +74558,7 @@ function actionCircularize(wayId, projection, maxAngle) {
     action.makeConvex = function(graph) {
         var way = graph.entity(wayId),
             nodes = lodash.uniq(graph.childNodes(way)),
     action.makeConvex = function(graph) {
         var way = graph.entity(wayId),
             nodes = lodash.uniq(graph.childNodes(way)),
-            points = nodes.map(function(n) { return projection(n.loc); }),
+            points = nodes.map(function(n) { return projection$$1(n.loc); }),
             sign = d3polygonArea(points) > 0 ? 1 : -1,
             hull = d3polygonHull(points);
 
             sign = d3polygonArea(points) > 0 ? 1 : -1,
             hull = d3polygonHull(points);
 
@@ -73912,7 +74580,7 @@ function actionCircularize(wayId, projection, maxAngle) {
             // move interior nodes to the surface of the convex hull..
             for (var j = 1; j < indexRange; j++) {
                 var point = geoInterp(hull[i], hull[i+1], j / indexRange),
             // move interior nodes to the surface of the convex hull..
             for (var j = 1; j < indexRange; j++) {
                 var point = geoInterp(hull[i], hull[i+1], j / indexRange),
-                    node = nodes[(j + startIndex) % nodes.length].move(projection.invert(point));
+                    node = nodes[(j + startIndex) % nodes.length].move(projection$$1.invert(point));
                 graph = graph.replace(node);
             }
         }
                 graph = graph.replace(node);
             }
         }
@@ -76070,14 +76738,14 @@ function actionUnrestrictTurn(turn) {
 }
 
 /* Reflect the given area around its axis of symmetry */
 }
 
 /* Reflect the given area around its axis of symmetry */
-function actionReflect(reflectIds, projection) {
+function actionReflect(reflectIds, projection$$1) {
     var useLongAxis = true;
 
 
     // http://gis.stackexchange.com/questions/22895/finding-minimum-area-rectangle-for-given-points
     // http://gis.stackexchange.com/questions/3739/generalisation-strategies-for-building-outlines/3756#3756
     function getSmallestSurroundingRectangle(graph, nodes) {
     var useLongAxis = true;
 
 
     // http://gis.stackexchange.com/questions/22895/finding-minimum-area-rectangle-for-given-points
     // http://gis.stackexchange.com/questions/3739/generalisation-strategies-for-building-outlines/3756#3756
     function getSmallestSurroundingRectangle(graph, nodes) {
-        var points = nodes.map(function(n) { return projection(n.loc); }),
+        var points = nodes.map(function(n) { return projection$$1(n.loc); }),
             hull = d3polygonHull(points),
             centroid = d3polygonCentroid(hull),
             minArea = Infinity,
             hull = d3polygonHull(points),
             centroid = d3polygonCentroid(hull),
             minArea = Infinity,
@@ -76142,12 +76810,12 @@ function actionReflect(reflectIds, projection) {
         var b = 2 * dx * dy / (dx * dx + dy * dy);
         for (var i = 0; i < nodes.length; i++) {
             var node = nodes[i];
         var b = 2 * dx * dy / (dx * dx + dy * dy);
         for (var i = 0; i < nodes.length; i++) {
             var node = nodes[i];
-            var c = projection(node.loc);
+            var c = projection$$1(node.loc);
             var c2 = [
                 a * (c[0] - p[0]) + b * (c[1] - p[1]) + p[0],
                 b * (c[0] - p[0]) - a * (c[1] - p[1]) + p[1]
             ];
             var c2 = [
                 a * (c[0] - p[0]) + b * (c[1] - p[1]) + p[0],
                 b * (c[0] - p[0]) - a * (c[1] - p[1]) + p[1]
             ];
-            var loc2 = projection.invert(c2);
+            var loc2 = projection$$1.invert(c2);
             node = node.move(geoInterp(node.loc, loc2, t));
             graph = graph.replace(node);
         }
             node = node.move(geoInterp(node.loc, loc2, t));
             graph = graph.replace(node);
         }
@@ -76268,6 +76936,7 @@ var iD = Object.freeze({
        dataDiscarded: dataDiscarded,
        dataLocales: dataLocales,
        dataPhoneFormats: dataPhoneFormats,
        dataDiscarded: dataDiscarded,
        dataLocales: dataLocales,
        dataPhoneFormats: dataPhoneFormats,
+       dataShortcuts: dataShortcuts,
        dataImperial: dataImperial,
        dataDriveLeft: dataDriveLeft,
        dataEn: en,
        dataImperial: dataImperial,
        dataDriveLeft: dataDriveLeft,
        dataEn: en,
index 4fb1bdbf44b8a158046c83fcded278ca235c0727..d824a4c4c165e3607c584005d8edf0709a76216f 100644 (file)
     <symbol id="poi-vending-machine" viewBox="400 335 15 15">
       <path d="M412,335 C412.552,335 413,335.448 413,336 L413,349 C413,349.552 412.552,350 412,350 L403,350 C402.448,350 402,349.552 402,349 L402,336 C402,335.448 402.448,335 403,335 L412,335 z M409,346 L406,346 L406,347.5 L409,347.5 L409,346 z M409,341 L408,341 L408,342 L409,342 L409,341 z M405,341 L404,341 L404,342 L405,342 L405,341 z M407,341 L406,341 L406,342 L407,342 L407,341 z M411,341 L410,341 L410,342 L411,342 L411,341 z M411,339 L410,339 L410,340 L411,340 L411,339 z M407,339 L406,339 L406,340 L407,340 L407,339 z M405,339 L404,339 L404,340 L405,340 L405,339 z M409,339 L408,339 L408,340 L409,340 L409,339 z M409,337 L408,337 L408,338 L409,338 L409,337 z M405,337 L404,337 L404,338 L405,338 L405,337 z M407,337 L406,337 L406,338 L407,338 L407,337 z M411,337 L410,337 L410,338 L411,338 L411,337 z" fill="currentColor" id="poi-vending-machine-shape"/>
     </symbol>
     <symbol id="poi-vending-machine" viewBox="400 335 15 15">
       <path d="M412,335 C412.552,335 413,335.448 413,336 L413,349 C413,349.552 412.552,350 412,350 L403,350 C402.448,350 402,349.552 402,349 L402,336 C402,335.448 402.448,335 403,335 L412,335 z M409,346 L406,346 L406,347.5 L409,347.5 L409,346 z M409,341 L408,341 L408,342 L409,342 L409,341 z M405,341 L404,341 L404,342 L405,342 L405,341 z M407,341 L406,341 L406,342 L407,342 L407,341 z M411,341 L410,341 L410,342 L411,342 L411,341 z M411,339 L410,339 L410,340 L411,340 L411,339 z M407,339 L406,339 L406,340 L407,340 L407,339 z M405,339 L404,339 L404,340 L405,340 L405,339 z M409,339 L408,339 L408,340 L409,340 L409,339 z M409,337 L408,337 L408,338 L409,338 L409,337 z M405,337 L404,337 L404,338 L405,338 L405,337 z M407,337 L406,337 L406,338 L407,338 L407,337 z M411,337 L410,337 L410,338 L411,338 L411,337 z" fill="currentColor" id="poi-vending-machine-shape"/>
     </symbol>
+    <symbol id="poi-elevator" viewBox="595 320 15 15">
+      <path d="M602.5,335 C602.5,335 598,328 598,328 L607,328 C607,328 602.5,335 602.5,335 z M602.5,320 C602.5,320 607,327 607,327 L598,327 C598,327 602.5,320 602.5,320 z" fill="currentColor" id="poi-elevator-shape"/>
+    </symbol>
     <symbol id="poi-social-facility" viewBox="580 320 15 15">
       <path d="M580,328.5 C580,328.5 582,329 582,329 C582,329 584.5,330 584.5,330 C584.5,330 585.5,329.5 586,329.5 L588,329.5 L591,329 C591,329 591.5,329.5 591,330 C590.646,330.354 588.5,331 588,331 C587.5,331 588.5,331.5 588.5,331.5 L590,331.5 C590,331.5 592,331.5 593,331 C594,330.5 595,330 595,330.5 C595,330.594 594.674,330.822 594.5,331 C593.754,331.764 592,333 592,333 C592,333 590,333.5 588,333.5 C587.5,333.5 586,332.5 585.5,332.5 C585,332.5 580,333 580,332.5 L580,328.5 z M592.513,320.507 C594.183,321.221 594.513,321.896 593.853,323.539 C593.013,324.945 591.999,326.239 590.835,327.391 C590.701,327.531 590.478,327.537 590.337,327.403 C590.333,327.399 590.329,327.395 590.325,327.391 C589.158,326.24 588.141,324.946 587.3,323.539 C585.992,320.924 589.312,319.178 590.576,321.793 C591.078,320.791 591.47,320.757 592.513,320.507 z" fill="currentColor" id="poi-social-facility-shape"/>
     </symbol>
     <symbol id="poi-social-facility" viewBox="580 320 15 15">
       <path d="M580,328.5 C580,328.5 582,329 582,329 C582,329 584.5,330 584.5,330 C584.5,330 585.5,329.5 586,329.5 L588,329.5 L591,329 C591,329 591.5,329.5 591,330 C590.646,330.354 588.5,331 588,331 C587.5,331 588.5,331.5 588.5,331.5 L590,331.5 C590,331.5 592,331.5 593,331 C594,330.5 595,330 595,330.5 C595,330.594 594.674,330.822 594.5,331 C593.754,331.764 592,333 592,333 C592,333 590,333.5 588,333.5 C587.5,333.5 586,332.5 585.5,332.5 C585,332.5 580,333 580,332.5 L580,328.5 z M592.513,320.507 C594.183,321.221 594.513,321.896 593.853,323.539 C593.013,324.945 591.999,326.239 590.835,327.391 C590.701,327.531 590.478,327.537 590.337,327.403 C590.333,327.399 590.329,327.395 590.325,327.391 C589.158,326.24 588.141,324.946 587.3,323.539 C585.992,320.924 589.312,319.178 590.576,321.793 C591.078,320.791 591.47,320.757 592.513,320.507 z" fill="currentColor" id="poi-social-facility-shape"/>
     </symbol>
index 3aa9e272e9f19f3de8e2789e6c875927d107b42a..4aa525957e65ca2965d79f6dee9ac34fe591ba64 100644 (file)
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><symbol viewBox="0 0 11 11" id="aerialway-11"><path d="M9 4.5H6V3.1a1 1 0 0 0 .43-.52L9.5 2a.5.5 0 0 0 0-1l-3.25.61a1 1 0 0 0-1.69.32L1.5 2.5a.5.5 0 0 0 0 1l3.25-.61A1 1 0 0 0 5 3.1v1.4H2a1 1 0 0 0-1 1V9a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1V5.5a1 1 0 0 0-1-1zm-4 4H2.5v-3H5v3zm3.5 0H6v-3h2.5v3z"/></symbol><symbol viewBox="0 0 15 15" id="aerialway-15"><path d="M13 5H8V2.6a1 1 0 0 0 .42-.46l5.08-.64a.5.5 0 0 0 0-1l-5.22.65a1 1 0 0 0-.78-.4 1 1 0 0 0-.92.62L1.5 2a.5.5 0 0 0 0 1l5.22-.65c.077.1.172.185.28.25V5H2a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h11a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1zm-6 6H3V7h4v4zm5 0H8V7h4v4z"/></symbol><symbol viewBox="0 0 11 11" id="airfield-11"><path d="M5 .5H3.5C3 .5 3 0 3.5 0h4c.5 0 .5.5 0 .5H6s.5.5.5 1.5v1H11v1.5l-4.5 2L6 10l1.5.5v.5h-4v-.5L5 10l-.5-3.5-4.5-2V3h4.5V2C4.5 1 5 .5 5 .5z"/></symbol><symbol viewBox="0 0 15 15" id="airfield-15"><path d="M6.818.682H4.773C4.09.682 4.09 0 4.773 0h5.454c.682 0 .682.682 0 .682H8.182S9 1.272 9 2.636V4h6v2L9 8l-.5 5 2.5 1.318V15H4v-.682L6.5 13 6 8 0 6V4h6V2.636c0-1.363.818-1.954.818-1.954z"/></symbol><symbol viewBox="0 0 11 11" id="airport-11"><path d="M6.5 6.4V6l4.5.5V5L6.5 3.2V1.5C6.5.5 6 0 5.5 0s-1 .5-1 1.5v1.7L0 5v1.4L4.5 6v3.3L3 10v1l2.5-.5L8 11v-1l-1.5-.8V6.4z"/></symbol><symbol viewBox="0 0 15 15" id="airport-15"><path d="M15 6.818V8.5l-6.5-1-.318 4.773L11 14v1l-3.5-.682L4 15v-1l2.818-1.727L6.5 7.5 0 8.5V6.818L6.5 4.5v-3s0-1.5 1-1.5 1 1.5 1 1.5v2.818l6.5 2.5z"/></symbol><symbol viewBox="0 0 11 11" id="alcohol-shop-11"><path d="M7 4v2.5a1.5 1.5 0 0 0 1 1.41V10h-.5a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1H9V7.91a1.5 1.5 0 0 0 1-1.41V4H7zm2.5 2.5a1 1 0 1 1-2 0v-2h2v2zM4.21 2.85V2.5a.355.355 0 1 0 0-.71v-.35a.35.35 0 0 0-.36-.35h-.71a.35.35 0 0 0-.36.34v.36a.355.355 0 1 0 0 .71v.35C2.79 3.87 1 5 1 6v4.25a.7.7 0 0 0 .71.71h3.58a.79.79 0 0 0 .71-.67V6c0-.91-1.79-2.19-1.79-3.15zM3.5 9a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z"/></symbol><symbol viewBox="0 0 15 15" id="alcohol-shop-15"><path d="M14 4h-4v3.5a2 2 0 0 0 1.5 1.93V13H11a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1h-.5V9.43A2 2 0 0 0 14 7.5V4zm-1 3.5a1 1 0 1 1-2 0V5h2v2.5zm-7.5-5V2a.5.5 0 0 0 0-1V.5A.5.5 0 0 0 5 0H4a.5.5 0 0 0-.5.5V1a.5.5 0 0 0 0 1v.5C3.5 3.93 1 5.57 1 7v6a1 1 0 0 0 1 1h5a1.1 1.1 0 0 0 1-1V7c0-1.35-2.5-3.15-2.5-4.5zm-1 9.5a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5z"/></symbol><symbol viewBox="0 0 11 11" id="america-football-11"><path d="M5.53 2C2.47 2 1 5.5 1 5.5S2.47 9 5.53 9 10 5.5 10 5.5 8.6 2 5.53 2zM7 6H4a.5.5 0 0 1 0-1h3a.5.5 0 0 1 0 1z"/></symbol><symbol viewBox="0 0 15 15" id="america-football-15"><path d="M7.53 3C3.09 3 1 7.5 1 7.5S3.09 12 7.53 12 14 7.5 14 7.5 12 3 7.53 3zM11 7v1.5a.5.5 0 0 1-1 0V8H8v.5a.5.5 0 0 1-1 0V8H5v.5a.5.5 0 0 1-1 0v-2a.5.5 0 0 1 1 0V7h2v-.5a.5.5 0 0 1 1 0V7h2v-.5a.5.5 0 0 1 1 0V7z"/></symbol><symbol viewBox="0 0 11 11" id="amusement-park-11"><path d="M5.5 1C3.02 1 1 3.02 1 5.5c0 1.792 1.063 3.332 2.584 4.055L2.5 11h6L7.416 9.555C8.937 8.832 10 7.292 10 5.5 10 3.02 7.98 1 5.5 1zm-.125 1.012v1.994a1.5 1.5 0 0 0-.844.35L3.12 2.942a3.475 3.475 0 0 1 2.256-.931zm.25 0c.874.03 1.66.377 2.256.931L6.469 4.356l-.002-.002a1.5 1.5 0 0 0-.842-.348V2.012zM2.943 3.119l1.412 1.412s0 .002-.002.002a1.5 1.5 0 0 0-.347.842H2.012c.03-.874.377-1.66.931-2.256zm5.114 0c.554.596.9 1.382.931 2.256H6.994a1.5 1.5 0 0 0-.35-.844L8.058 3.12zM2.012 5.625h1.994a1.5 1.5 0 0 0 .35.844L2.942 7.88a3.475 3.475 0 0 1-.931-2.256zm4.982 0h1.994a3.474 3.474 0 0 1-.931 2.256L6.644 6.469l.002-.002a1.5 1.5 0 0 0 .348-.842zm-2.463 1.02s.002 0 .002.002A1.5 1.5 0 0 0 5 6.911v2.04a3.47 3.47 0 0 1-1.88-.895L4.53 6.644zm1.938 0L7.88 8.056A3.47 3.47 0 0 1 6 8.95V6.912a1.5 1.5 0 0 0 .469-.268z"/></symbol><symbol viewBox="0 0 15 15" id="amusement-park-15"><path d="M7.5 0C3.919 0 1 2.919 1 6.5c0 2.316 1.225 4.348 3.057 5.5H4l-1 2h9l-1-2h-.057C12.775 10.848 14 8.816 14 6.5 14 2.919 11.081 0 7.5 0zm-.125 1.506v3.5a1.5 1.5 0 0 0-.844.35L4.057 2.88a4.972 4.972 0 0 1 3.318-1.375zm.25 0c1.29.032 2.45.55 3.318 1.375L8.47 5.356l-.002-.002a1.5 1.5 0 0 0-.842-.348v-3.5zm-3.744 1.55l2.475 2.475-.002.002a1.5 1.5 0 0 0-.348.842h-3.5c.032-1.29.55-2.45 1.375-3.318zm7.238 0a4.972 4.972 0 0 1 1.375 3.319h-3.5a1.5 1.5 0 0 0-.35-.844l2.475-2.474zM2.506 6.626h3.5a1.5 1.5 0 0 0 .35.844L3.88 9.943a4.972 4.972 0 0 1-1.375-3.318zm6.488 0h3.5a4.972 4.972 0 0 1-1.375 3.318L8.645 7.47s0-.002.002-.002a1.5 1.5 0 0 0 .347-.842zm-2.463 1.02s.002 0 .002.002A1.5 1.5 0 0 0 7 7.911v3.563a4.97 4.97 0 0 1-2.943-1.356L6.53 7.645zm1.938 0l2.474 2.474A4.97 4.97 0 0 1 8 11.475V7.912a1.5 1.5 0 0 0 .469-.268z"/></symbol><symbol viewBox="0 0 11 11" id="aquarium-11"><path d="M8 1c-.876 0-1.85.092-3.004.527C3.843 1.962 2.848 2.657 2 3.5c-.852.847-2 2.5-2 3s1.135 1.943 2.678 2.621c1.542.678 2.39.798 3.283.895.797.086 1.942-.027 2.885-.233C9.592 9.621 10.994 9.31 11 9c0 0-2.756-.063-3-.5-.249-.445-.25-1.586 0-2 .258-.428 2.5 1 2.5 1 .644.258.644-4.258 0-4 0 0-2.277 1.447-2.5 1-.25-.5-.25-1.5 0-2 .223-.447 3-.5 3-.5 0-.5-2.124-1-3-1zM3.514 4.502a1.014 1.014 0 1 1 0 2.028 1.014 1.014 0 0 1 0-2.028z"/></symbol><symbol viewBox="0 0 15 15" id="aquarium-15"><path d="M10.9 11.6c-.3-.6-.3-2.3 0-2.8.4-.6 3.4 1.4 3.4 1.4.9.4.9-6.1 0-5.7 0 0-3.1 2.1-3.4 1.4-.3-.7-.3-2.1 0-2.8.3-.6 4.1-.7 4.1-.7 0-.7-2.9-1.4-4.1-1.4s-2.5.1-4.1.8c-1.6.6-2.9 1.6-4.1 2.8S0 8.2 0 8.9s1.5 2.8 3.7 3.7 3.3 1.1 4.5 1.3c1.1.1 2.6 0 3.9-.3 1-.2 2.9-.7 2.9-1.1 0-.2-3.8-.3-4.1-.9zM4.5 9.3C3.7 9.3 3 8.6 3 7.8s.7-1.5 1.5-1.5S6 7 6 7.8s-.7 1.5-1.5 1.5z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="art-gallery-11"><path d="M8.21 3L5.85.65a.5.5 0 0 0-.707-.003L5.14.65 2.79 3H1.5a.5.5 0 0 0-.5.5v6a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-6a.5.5 0 0 0-.5-.5H8.21zM5.5 1.71L6.79 3H4.21L5.5 1.71zM9 9H2V4h7v5zM4.5 5.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0zM8 8H4l.75-1.5.5 1L6.5 5 8 8z"/></symbol><symbol viewBox="0 0 15 15" id="art-gallery-15"><path d="M10.71 4L7.85 1.15a.5.5 0 0 0-.707-.003l-.003.003L4.29 4H1.5a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 .5.5h12a.5.5 0 0 0 .5-.5v-9a.5.5 0 0 0-.5-.5h-2.79zM7.5 2.21L9.29 4H5.71L7.5 2.21zM13 13H2V5h11v8zM5 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm7 4H4.5L6 9l1.25 2.5L9.5 7l2.5 5z"/></symbol><symbol viewBox="0 0 11 11" id="attraction-11"><path d="M4.5 1.5s-.5 0-.7.5l-.3.5H1c-.6 0-1 .4-1 1v5c0 .6.4 1 1 1h9c.6 0 1-.4 1-1v-5c0-.6-.4-1-1-1H7.5L7.2 2c-.2-.5-.7-.5-.7-.5h-2zm1 2C6.9 3.5 8 4.6 8 6S6.9 8.5 5.5 8.5 3 7.4 3 6s1.1-2.5 2.5-2.5zm0 1.5c-.6 0-1 .4-1 1s.4 1 1 1 1-.4 1-1-.4-1-1-1z" fill="#010101"/></symbol><symbol viewBox="0 0 15 15" id="attraction-15"><path d="M6 2c-.554 0-.752.505-1 1l-.5 1h-2C1.669 4 1 4.669 1 5.5v5c0 .831.669 1.5 1.5 1.5h10c.831 0 1.5-.669 1.5-1.5v-5c0-.831-.669-1.5-1.5-1.5h-2L10 3c-.25-.5-.446-1-1-1H6zM2.5 5a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm5 0a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0 1.5a1.5 1.5 0 0 0 0 3 1.5 1.5 0 0 0 0-3z"/></symbol><symbol viewBox="0 0 11 11" id="bakery-11"><path d="M4.5 2c-1 0-1 1-1 1L5 7.5s0 .5.5.5.5-.5.5-.5L7.5 3s0-1-1-1h-2zM9 3.5l-2 4h1.5l1 1h.5c1 0 1-.9 1-.9V6.3L9 3.5zM0 6.3v1.2s.03 1.01 1 1c.97-.01.5 0 .5 0l1-1H4l-2-4-2 2.8z"/></symbol><symbol viewBox="0 0 15 15" id="bakery-15"><path d="M5.294 4.382L6 9.5s0 1 1 1h1c1 0 1-1 1-1l.706-5.118C9.706 3 7.5 3 7.5 3S5.291 3 5.294 4.382zM3.5 5C2 5 2 6 2 6l1 4h1.5c.755 0 .794-.765.794-.765L4.5 5h-1zm-2 2.5s-.618-.03-1.059.412C0 8.352 0 8.794 0 8.794V11h.882C2 11 2 10 2 10l-.5-2.5zM11.5 5C13 5 13 6 13 6l-1 4h-1.5c-.755 0-.794-.765-.794-.765L10.5 5h1zm2 2.5s.618-.03 1.059.412c.441.44.441.882.441.882V11h-.882C13 11 13 10 13 10l.5-2.5z"/></symbol><symbol viewBox="0 0 11 11" id="bank-11"><path d="M1 2C0 2 0 3 0 3v5c0 1 1 1 1 1h9c1 0 1-1 1-1V3s0-1-1-1H1zm0 1h1.5a.5.5 0 1 1-.5.5l-.5.5a.5.5 0 1 1-.5.5V3zm4.5 0c1.105 0 2 1.12 2 2.5S6.605 8 5.5 8s-2-1.12-2-2.5.895-2.5 2-2.5zm3 0H10v1.5a.5.5 0 1 1-.5-.5L9 3.5a.5.5 0 1 1-.5-.5zm-7 3a.5.5 0 0 1 0 1l.5.5a.5.5 0 1 1 .5.5H1V6.5a.5.5 0 0 1 .5-.5zm8 0a.5.5 0 0 1 .5.5V8H8.5a.5.5 0 1 1 .5-.5l.5-.5a.5.5 0 0 1 0-1z"/><path d="M4.902 4.25a1.157 1.157 0 0 0-.2.25h1.597a1.158 1.158 0 0 0-.201-.25H4.902zm-.316.5c-.029.08-.05.164-.065.25h1.96a1.479 1.479 0 0 0-.065-.25h-1.83zm-.086.5c0 .084.006.168.02.25h1.959c.013-.082.02-.166.021-.25h-2zm.086.5c.031.089.07.173.117.25H6.3c.046-.077.084-.161.115-.25H4.586zm.316.5l.034.031L4.5 6.5h2l-.436-.219.034-.031H4.902zm-.32.5c.029.079.056.16.11.25h1.626c.053-.091.078-.171.106-.25H4.582zm.31.5c.147.141.341.25.608.25.274 0 .47-.108.617-.25H4.893z"/></symbol><symbol viewBox="0 0 15 15" id="bank-15"><path d="M1 3c-.554 0-1 .446-1 1v7c0 .554.446 1 1 1h13c.554 0 1-.446 1-1V4c0-.554-.446-1-1-1H1zm0 1h1.5a.5.5 0 1 1-.5.5l-.5.5a.5.5 0 1 1-.5.5V4zm6.5 0C8.88 4 10 5.567 10 7.5S8.88 11 7.5 11 5 9.433 5 7.5 6.12 4 7.5 4zm5 0H14v1.5a.5.5 0 1 1-.5-.5l-.5-.5a.5.5 0 1 1-.5-.5zm-5 1.5c-.323 0-.534.109-.682.25h1.364c-.148-.141-.359-.25-.682-.25zm-.875.5c-.045.091-.062.171-.08.25h1.91c-.018-.079-.034-.159-.08-.25h-1.75zm-.125.5v.25h2V6.5h-2zm0 .5v.25h2V7h-2zm0 .5v.25h2V7.5h-2zm0 .5l-.25.25h2L8.5 8h-2zm-.5.5s.035.102.102.25h2.273L8 8.5H6zM1.5 9a.5.5 0 0 1 0 1l.5.5a.5.5 0 1 1 .5.5H1V9.5a.5.5 0 0 1 .5-.5zm4.738 0c.046.086.076.159.137.25h2.268c.066-.138.107-.25.107-.25H6.238zM13.5 9a.5.5 0 0 1 .5.5V11h-1.5a.5.5 0 1 1 .5-.5l.5-.5a.5.5 0 0 1 0-1zm-6.934.5c.079.091.165.176.26.25h1.42c.1-.077.188-.162.254-.25H6.566z"/></symbol><symbol viewBox="0 0 11 11" id="bar-11"><path d="M5.488 1C4.976 1 .5 1 1 1.5L5 6v2.5C5 9 2.5 9 2.5 10h6C8.5 9 6 9 6 8.5V6l4-4.5C10.5 1 6 1 5.488 1zM2.5 2h6l-1 1h-4l-1-1z"/></symbol><symbol viewBox="0 0 15 15" id="bar-15"><path d="M7.5 1c-2 0-7 .25-6.5.75L7 8v4c0 1-3 .5-3 2h7c0-1.5-3-1-3-2V8l6-6.25c.5-.5-4.5-.75-6.5-.75zm0 1c2.5 0 4.75.25 4.75.25L11.5 3h-8l-.75-.75S5 2 7.5 2z"/></symbol><symbol viewBox="0 0 11 11" id="barrier-11"><title>barrier-11</title><path d="M9.5 2h-8a.5.5 0 0 0-.5.5v4a.5.5 0 0 0 .5.5H2v2.5a.5.5 0 0 0 1 0V9h5v.5a.5.5 0 0 0 1 0V7h.5a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 0-.5-.5zM2 3h1.5l3 3h-2L2 3.5zm0 3V4.5L3.5 6zm1 2V7h5v1zm6-2H7.5l-3-3h2L9 5.5zm0-1.5L7.5 3H9z"/></symbol><symbol viewBox="0 0 15 15" id="barrier-15"><title>barrier-15</title><path d="M13 3H2a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h1v2.5a.5.5 0 0 0 1 0V13h7v.5a.5.5 0 0 0 1 0V11h1a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1zm0 1v2l-2-2zM9.5 4L13 7.5V10L7 4zm-4 6L2 6.5V4l6 6zM2 10V8l2 2zm9 2H4v-1h7zm-.207-2H9.5l-6-6h2l6 6z"/></symbol><symbol viewBox="0 0 11 11" id="baseball-11"><path d="M7 3a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm2.85 7.24l-3-4.85a.86.86 0 0 0-.5-.39H2.5a.5.5 0 0 0 0 1H5l.92 1.09-2.73 3a.49.49 0 0 0-.19.41.5.5 0 0 0 .5.5.49.49 0 0 0 .33-.13l3-2.71L9 10.81a.49.49 0 0 0 .38.19.5.5 0 0 0 .5-.5.49.49 0 0 0-.03-.26zM4 .28A.28.28 0 0 0 3.72 0a.49.49 0 0 0-.25.16L2 4.59a.48.48 0 0 0 0 .13c0 .155.125.28.28.28a.49.49 0 0 0 .26-.16L4 .41a.472.472 0 0 0 0-.13z"/></symbol><symbol viewBox="0 0 15 15" id="baseball-15"><path d="M10 3.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zM7 .28A.28.28 0 0 0 6.72 0a.49.49 0 0 0-.25.16L4 4.59a.48.48 0 0 0 0 .13c0 .155.125.28.28.28a.49.49 0 0 0 .26-.16L7 .41a.472.472 0 0 0 0-.13zm5.9 13.92L10 6.39A.49.49 0 0 0 9.52 6h-5a.5.5 0 0 0 0 1H7l1.45 2.51-4.27 4.61a.49.49 0 0 0-.18.38.5.5 0 0 0 .5.5.49.49 0 0 0 .33-.13l4.45-4.15 2.76 4a.51.51 0 0 0 .44.26c.28 0 .51-.22.52-.5a.5.5 0 0 0-.1-.28z"/></symbol><symbol viewBox="0 0 11 11" id="basketball-11"><path d="M11 1a1 1 0 1 1-2 0 1 1 0 0 1 2 0zM4.5 3a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm3.89 6.69L6 6.59V4.5h.5a.49.49 0 0 0 .41-.23l1.5-2A.49.49 0 0 0 8.5 2a.5.5 0 0 0-.86-.34L6.25 3.5H2.5a.5.5 0 0 0-.36.16l-2 2.54a.49.49 0 0 0-.14.3.5.5 0 0 0 .5.5.49.49 0 0 0 .41-.23L2.74 4.5H3v2.09L.61 9.69a.5.5 0 0 0 .39.81.49.49 0 0 0 .41-.23L3.94 7h1.12l2.52 3.27A.5.5 0 0 0 8.5 10a.49.49 0 0 0-.11-.3v-.01z"/></symbol><symbol viewBox="0 0 15 15" id="basketball-15"><path d="M9 3.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zM14 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-2.11 12.19L9 9.58V6.5h.5a.49.49 0 0 0 .41-.23l1.94-2.42.06-.08A.49.49 0 0 0 12 3.5a.5.5 0 0 0-.86-.34L9.26 5.5H5.5a.5.5 0 0 0-.36.16l-2 2.54a.49.49 0 0 0-.14.3.5.5 0 0 0 .5.5.49.49 0 0 0 .41-.23L5.74 6.5H6v3.08l-2.89 3.61a.49.49 0 0 0-.11.3.5.5 0 0 0 .5.5.49.49 0 0 0 .41-.23l3-3.77h1.15l3 3.77a.49.49 0 0 0 .41.23.5.5 0 0 0 .5-.5.49.49 0 0 0-.11-.3h.03z"/></symbol><symbol viewBox="0 0 11 11" id="bbq-11"><title>bbq-11</title><path d="M4 1.75s0-1 1-1c0 0 .5 0 .5-.5a.25.25 0 1 1 .5 0s0 1-1 1c0 0-.5 0-.5.5a.25.25 0 1 1-.5 0zM2.25 2a.25.25 0 0 0 .25-.25c0-.5.5-.5.5-.5 1 0 1-1 1-1a.25.25 0 1 0-.5 0c0 .5-.5.5-.5.5-1 0-1 1-1 1 0 .138.112.25.25.25zm4 0a.25.25 0 0 0 .25-.25c0-.5.5-.5.5-.5 1 0 1-1 1-1a.25.25 0 1 0-.5 0c0 .5-.5.5-.5.5-1 0-1 1-1 1 0 .138.112.25.25.25zm3.5-2a.25.25 0 0 0-.25.25c0 .5-.5.5-.5.5-1 0-1 1-1 1a.25.25 0 1 0 .5 0c0-.5.5-.5.5-.5 1 0 1-1 1-1A.25.25 0 0 0 9.75 0zM6.675 5.865l-.001.001 2.3 4.782v.009a.242.242 0 0 1-.12.32.247.247 0 0 1-.328-.12L7.845 9.5H4a1.5 1.5 0 1 1-.91-1.379c.053.02.105.045.155.072L4.278 5.85A3.038 3.038 0 0 1 2 3h7s-.002 2.282-2.325 2.865zM3.25 9.5a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0zm2.923-3.544C5.963 5.983 5.742 6 5.5 6c-.285 0-.713-.047-.713-.047l-1.144 2.58c.123.136.218.295.279.467h3.673L6.173 5.956z"/></symbol><symbol viewBox="0 0 15 15" id="bbq-15"><title>grill-15</title><path d="M9.32 7.655A4.018 4.018 0 0 0 12 4H3a4.01 4.01 0 0 0 2.63 3.631l-.707 1.413A2.494 2.494 0 1 0 6.49 13h4.223l.335.717a.5.5 0 0 0 .905-.428L9.32 7.655zM4.5 12.75a1.25 1.25 0 1 1 0-2.5 1.25 1.25 0 0 1 0 2.5zM6.95 12a2.49 2.49 0 0 0-1.091-2.594L6.6 7.923a4.91 4.91 0 0 0 1.745 0l1.9 4.07L6.95 12zM4.75 1a.25.25 0 0 0-.25.25c0 .5-.5.5-.5.5-1 0-1 1-1 1a.25.25 0 1 0 .5 0c0-.5.5-.5.5-.5 1 0 1-1 1-1A.25.25 0 0 0 4.75 1zm2 0a.25.25 0 0 0-.25.25c0 .5-.5.5-.5.5-1 0-1 1-1 1a.25.25 0 1 0 .5 0c0-.5.5-.5.5-.5 1 0 1-1 1-1A.25.25 0 0 0 6.75 1zm2 0a.25.25 0 0 0-.25.25c0 .5-.5.5-.5.5-1 0-1 1-1 1a.25.25 0 1 0 .5 0c0-.5.5-.5.5-.5 1 0 1-1 1-1A.25.25 0 0 0 8.75 1zm2 0a.25.25 0 0 0-.25.25c0 .5-.5.5-.5.5-1 0-1 1-1 1a.25.25 0 1 0 .5 0c0-.5.5-.5.5-.5 1 0 1-1 1-1a.25.25 0 0 0-.25-.25zm2 0a.25.25 0 0 0-.25.25c0 .5-.5.5-.5.5-1 0-1 1-1 1a.25.25 0 1 0 .5 0c0-.5.5-.5.5-.5 1 0 1-1 1-1a.25.25 0 0 0-.25-.25z"/></symbol><symbol viewBox="0 0 11 11" id="beer-11"><path d="M5.5 1c-2.3 0-3 .66-3 .66v2a6.6 6.6 0 0 0 .66 2.65 4.13 4.13 0 0 1 0 3s0 .66 2.32.66 2.32-.66 2.32-.66a4.13 4.13 0 0 1 0-3 6.6 6.6 0 0 0 .66-2.65v-2S7.8 1 5.5 1zm0 8.28a4.77 4.77 0 0 1-1.56-.18c.133-.479.2-.973.2-1.47h2.72c-.014.22-.014.44 0 .66.034.274.087.544.16.81a4.77 4.77 0 0 1-1.52.19v-.01zm2.32-6a8.24 8.24 0 0 1-4.63 0L3.18 2a8.28 8.28 0 0 1 4.64 0s.03 1.33 0 1.33v-.05z"/></symbol><symbol viewBox="0 0 15 15" id="beer-15"><path d="M12 5V2s-1-1-4.5-1S3 2 3 2v3a9.27 9.27 0 0 0 1 4 5.63 5.63 0 0 1 0 4.5s0 1 3.5 1 3.5-1 3.5-1A5.63 5.63 0 0 1 11 9a9.27 9.27 0 0 0 1-4zm-4.5 8.5a7.368 7.368 0 0 1-2.36-.28c.203-.722.304-1.47.3-2.22h4.12c-.004.75.097 1.498.3 2.22a7.368 7.368 0 0 1-2.36.28zm0-8.5c-1.186.03-2.37-.14-3.5-.5v-2A10.74 10.74 0 0 1 7.5 2a10.74 10.74 0 0 1 3.5.5v2c-1.13.36-2.314.53-3.5.5z"/></symbol><symbol viewBox="0 0 11 11" id="bicycle-11"><path d="M6.5 1.5c-.676-.01-.676 1.01 0 1H7v.711l-2.748 1.57L3.738 3.5h.715c.676.01.676-1.01 0-1H2.426c-.676-.01-.676 1.01 0 1h.234l.432 1.078A2.461 2.461 0 0 0 2.5 4.5C1.125 4.5 0 5.625 0 7s1.125 2.5 2.5 2.5S5 8.375 5 7c0-.471-.14-.908-.37-1.285l2.472-1.412.402.408A2.507 2.507 0 0 0 6 7.001c0 1.374 1.125 2.5 2.5 2.5S11 8.374 11 7c0-1.297-1.003-2.358-2.27-2.478L8 3.794V2a.5.5 0 0 0-.5-.5h-1zm-4 4C3.334 5.5 4 6.166 4 7s-.666 1.5-1.5 1.5S1 7.834 1 7s.666-1.5 1.5-1.5zm5.955.004h.002a.45.45 0 0 0 .09 0A1.49 1.49 0 0 1 10 7c0 .834-.666 1.5-1.5 1.5S7 7.835 7 7a1.49 1.49 0 0 1 1.455-1.496z" fill="#010101"/></symbol><symbol viewBox="0 0 15 15" id="bicycle-15"><path d="M7.5 2c-.676-.01-.676 1.01 0 1H9v1.266L6.197 6.6 5.223 4H5.5c.676.01.676-1.01 0-1h-2c-.676-.01-.676 1.01 0 1h.652l.891 2.375A3.45 3.45 0 0 0 3.5 6C1.573 6 0 7.573 0 9.5S1.573 13 3.5 13 7 11.427 7 9.5c0-.67-.2-1.291-.53-1.824l2.821-2.35.463 1.16C8.71 7.094 8 8.211 8 9.5c0 1.927 1.573 3.5 3.5 3.5S15 11.427 15 9.5 13.427 6 11.5 6c-.283 0-.554.043-.818.107L10 4.402V2.5a.5.5 0 0 0-.5-.5h-2zm-4 5a2.48 2.48 0 0 1 1.555.553L3.18 9.115c-.511.427.128 1.195.64.77l1.875-1.563c.188.352.305.75.305 1.178C6 10.887 4.887 12 3.5 12S1 10.887 1 9.5 2.113 7 3.5 7zm8 0C12.887 7 14 8.113 14 9.5S12.887 12 11.5 12 9 10.887 9 9.5c0-.877.447-1.642 1.125-2.088l.91 2.274c.246.623 1.18.25.93-.372l-.908-2.27C11.2 7.02 11.348 7 11.5 7z"/></symbol><symbol viewBox="0 0 11 11" id="bicycle-share-11"><path d="M8 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM6.014 2a.5.5 0 0 0-.368.147l-2 2a.5.5 0 0 0 0 .707L5 6.207V8.5a.5.5 0 1 0 1 0V6a.5.5 0 0 0-.144-.353l-.752-.752L6.27 3.692l.832 1.11A.5.5 0 0 0 7.5 5h2a.5.5 0 1 0 0-1H7.75L6.4 2.2a.5.5 0 0 0-.386-.2zm-3.65 4.004a2.502 2.502 0 0 0-2.36 2.492c-.001 1.037.641 1.97 1.61 2.34s2.068.1 2.757-.674a.5.5 0 0 0-.748-.664 1.498 1.498 0 1 1-2.62-1c.002-.624.386-1.179.97-1.4a1.498 1.498 0 0 1 1.654.408.5.5 0 1 0 .749-.663h-.001a2.506 2.506 0 0 0-2.012-.838zm6.279 0a2.499 2.499 0 0 0-2.014.838.5.5 0 1 0 .75.664 1.495 1.495 0 0 1 1.652-.408c.584.221.968.776.969 1.4a1.498 1.498 0 0 1-2.62 1 .5.5 0 1 0-.745.664 2.503 2.503 0 0 0 2.758.674 2.5 2.5 0 1 0-.75-4.832z"/></symbol><symbol viewBox="0 0 15 15" id="bicycle-share-15"><path d="M10 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM8.145 2.994a.5.5 0 0 0-.348.143l-2.64 2.5a.5.5 0 0 0 .042.763L7 7.75v2.75c-.01.676 1.01.676 1 0v-3a.5.5 0 0 0-.2-.4l-.767-.577 1.818-1.72.749.998A.5.5 0 0 0 10 6h1.5c.676.01.676-1.01 0-1h-1.25L9.5 4l-.6-.8a.5.5 0 0 0-.384-.206h-.371zM3 7a3 3 0 1 0 0 6 3 3 0 0 0 0-6zm9 0a3 3 0 1 0 0 6 3 3 0 0 0 0-6zM3 8a2 2 0 1 1 0 4 2 2 0 0 1 0-4zm9 0a2 2 0 1 1 0 4 2 2 0 0 1 0-4z"/></symbol><symbol viewBox="0 0 11 11" id="blood-bank-11"><title>blood-bank-11</title><path d="M8.405 4.644h.001L5.5 1 2.593 4.644h.002A3.37 3.37 0 0 0 2 6.56a3.464 3.464 0 0 0 3.5 3.43A3.464 3.464 0 0 0 9 6.558a3.37 3.37 0 0 0-.595-1.915zM8 7H6v2H5V7H3V6h2V4h1v2h2v1z"/></symbol><symbol viewBox="0 0 15 15" id="blood-bank-15"><title>blood-bank-15</title><path d="M11.2 7.1L7.5 2 3.8 7.1c-.5.7-.8 1.6-.8 2.5C3 12 5 14 7.5 14S12 12 12 9.6c0-.9-.3-1.8-.8-2.5zM10 10H8v2H7v-2H5V9h2V7h1v2h2v1z"/></symbol><symbol viewBox="0 0 11 11" id="buddhism-11"><title>buddhism</title><path d="M11 5.8v-.5H9.988A4.473 4.473 0 0 0 8.85 2.554l.827-.827-.354-.354L8.5 2.2a4.474 4.474 0 0 0-2.75-1.138V0h-.5v1.062a4.471 4.471 0 0 0-2.7 1.1l-.875-.886-.355.352.87.872a4.477 4.477 0 0 0-1.178 2.8H0v.5h1.012A4.474 4.474 0 0 0 2.15 8.546l-.827.827.354.354L2.5 8.9a4.474 4.474 0 0 0 2.75 1.138V11h.5v-.962A4.475 4.475 0 0 0 8.5 8.895l.82.831.355-.352-.821-.834A4.473 4.473 0 0 0 9.988 5.8zm-1.439-.5H6.1l2.448-2.444A4.049 4.049 0 0 1 9.561 5.3zM8.194 2.5L5.75 4.946V1.489A4.048 4.048 0 0 1 8.194 2.5zM5.25 1.489v3.4l-2.4-2.428a4.045 4.045 0 0 1 2.4-.972zm-2.759 1.32L4.951 5.3H1.439a4.053 4.053 0 0 1 1.052-2.491zM1.439 5.8H4.9L2.452 8.244A4.049 4.049 0 0 1 1.439 5.8zm1.367 2.8L5.25 6.153V9.61A4.049 4.049 0 0 1 2.806 8.6zM5.75 9.61v-3.5L8.2 8.591A4.049 4.049 0 0 1 5.75 9.61zm2.8-1.374L6.147 5.8h3.414a4.048 4.048 0 0 1-1.007 2.436z"/></symbol><symbol viewBox="0 0 15 15" id="buddhism-15"><title>buddhism</title><path d="M13.5 7h-.533a5.464 5.464 0 0 0-1.248-3.011l.378-.378a.5.5 0 1 0-.707-.707l-.378.378A5.465 5.465 0 0 0 8 2.033V1.5a.5.5 0 0 0-1 0v.533a5.465 5.465 0 0 0-3.011 1.249L3.611 2.9a.5.5 0 0 0-.707.707l.378.378A5.464 5.464 0 0 0 2.033 7H1.5a.5.5 0 0 0 0 1h.533a5.464 5.464 0 0 0 1.248 3.011l-.378.378a.5.5 0 1 0 .707.707l.378-.378A5.463 5.463 0 0 0 7 12.967v.533a.5.5 0 0 0 1 0v-.533a5.464 5.464 0 0 0 3.011-1.249l.378.378a.5.5 0 1 0 .707-.707l-.378-.378A5.465 5.465 0 0 0 12.967 8h.533a.5.5 0 0 0 0-1zM8 3.051A4.45 4.45 0 0 1 10.293 4l-2.15 2.15A1.485 1.485 0 0 0 8 6.092zm-1 0v3.041a1.485 1.485 0 0 0-.143.058L4.707 4A4.45 4.45 0 0 1 7 3.051zM4 4.707l2.15 2.15A1.485 1.485 0 0 0 6.092 7H3.051A4.45 4.45 0 0 1 4 4.707zM3.051 8h3.041a1.5 1.5 0 0 0 .058.143L4 10.293A4.449 4.449 0 0 1 3.051 8zM7 11.949A4.45 4.45 0 0 1 4.707 11l2.15-2.15A1.485 1.485 0 0 0 7 8.908zm1 0V8.908a1.478 1.478 0 0 0 .143-.058l2.15 2.15A4.449 4.449 0 0 1 8 11.949zm3-1.656l-2.15-2.15A1.5 1.5 0 0 0 8.908 8h3.042a4.449 4.449 0 0 1-.95 2.293zM8.908 7a1.485 1.485 0 0 0-.058-.143L11 4.707A4.45 4.45 0 0 1 11.949 7z"/></symbol><symbol viewBox="0 0 11 11" id="building-11"><path d="M2 1v9h4V6h2v4h1V1H2zm3 8H3V6h2v3zm0-4H3V3h2v2zm3 0H6V3h2v2z"/></symbol><symbol viewBox="0 0 15 15" id="building-15"><path d="M3 2v11h5v-3h3v3h1V2H3zm4 10H4v-2h3v2zm0-3H4V7h3v2zm0-3H4V4h3v2zm4 3H8V7h3v2zm0-3H8V4h3v2z"/></symbol><symbol viewBox="0 0 11 11" id="building-alt1-11"><title>buildings</title><path d="M8 9.5v-5c0-.3-.2-.5-.5-.5H6V1L3 2v7.5H2v.5h7v-.5H8zm-3 0H4V3h1v6.5z"/></symbol><symbol viewBox="0 0 15 15" id="building-alt1-15"><title>buildings</title><path d="M11 13.5v-9c0-.3-.2-.5-.5-.5H9V1L5 2.1v11.4H2v.5h11v-.5h-2zm-4 0V3h1v10.5H7z"/></symbol><symbol viewBox="0 0 11 11" id="bus-11"><path d="M3 0C2 0 1 .531 1 2v7.5s0 .5.5.5l.5.016v.484s0 .5.5.5H3s.5 0 .5-.5v-.484l4-.016v.5s0 .5.5.5h.5c.5 0 .5-.5.5-.5v-.484L9.5 10s.5 0 .5-.5V2c0-1.5-1-2-2-2H3zm.75 1h3.5a.25.25 0 1 1 0 .5h-3.5a.25.25 0 1 1 0-.5zM3 2h5c1 0 1 1 1 1v2s0 1-1 1H3C2 6 2 5 2 5V3s0-1 1-1zm-.25 5.5a.75.75 0 1 1 0 1.5.75.75 0 0 1 0-1.5zm5.5 0a.75.75 0 1 1 0 1.5.75.75 0 0 1 0-1.5z"/></symbol><symbol viewBox="0 0 15 15" id="bus-15"><path d="M4 0C2.636 0 1 .743 1 2.746V12s0 1 1 1v1s0 1 1 1 1-1 1-1v-1h7v1s0 1 1 1 1-1 1-1v-1s1 0 1-1V2.746C14 .701 12.764 0 11.4 0H4zm.25 1.5h6.5a.25.25 0 1 1 0 .5h-6.5a.25.25 0 1 1 0-.5zM3 3h9c1 0 1 .967 1 .967V7s0 1-1 1H3C2 8 2 7 2 7V4s0-1 1-1zm0 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm9 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/></symbol><symbol viewBox="0 0 11 11" id="cafe-11"><path d="M7 9.5a.5.5 0 0 1-.5.5h-4a.5.5 0 0 1 0-1h4a.5.5 0 0 1 .5.5zM8 3H7V2H2v4a2.5 2.5 0 0 0 4.79 1H8a2 2 0 1 0 0-4zm0 3H7V4h1a1 1 0 1 1 0 2z"/></symbol><symbol viewBox="0 0 15 15" id="cafe-15"><path d="M12 5h-2V3H2v4a4 4 0 0 0 7.45 2H12a2 2 0 1 0 0-4zm0 3H9.86A4 4 0 0 0 10 7V6h2a1 1 0 1 1 0 2zm-2 4.5a.5.5 0 0 1-.5.5h-7a.5.5 0 0 1 0-1h7a.5.5 0 0 1 .5.5z"/></symbol><symbol viewBox="0 0 11 11" id="campsite-11"><path d="M5.92 2.19a.5.5 0 0 0-.85 0L1.5 8h-1a.42.42 0 0 0-.5.39V9.5a.49.49 0 0 0 .5.5h10a.49.49 0 0 0 .5-.5V8.39a.42.42 0 0 0-.5-.39h-1L5.92 2.19zM5.5 3l3 5h-6l3-5z"/></symbol><symbol viewBox="0 0 15 15" id="campsite-15"><path d="M7 1.5l-5.5 9H1c-1 0-1 1-1 1v1s0 1 1 1h13c1 0 1-1 1-1v-1s0-1-1-1h-.5L8 1.5c-.2-.4-.8-.4-1 0zM7.5 5l3.2 5.5H4.2L7.5 5z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="car-11"><path d="M9 4l-.89-2.66A.5.5 0 0 0 7.64 1H3.36a.5.5 0 0 0-.47.34L2 4a1 1 0 0 0-1 1v3h1v1a1 1 0 1 0 2 0V8h3v1a1 1 0 1 0 2 0V8h1V5a1 1 0 0 0-1-1zM3 7a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm0-3l.62-2h3.76L8 4H3zm5 3a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/></symbol><symbol viewBox="0 0 15 15" id="car-15"><path d="M14 7a1.5 1.5 0 0 0-1.15-1.45l-1.39-3.24A.5.5 0 0 0 11 2H4a.5.5 0 0 0-.44.28L2.15 5.54A1.5 1.5 0 0 0 1 7v3.5h1v1a1 1 0 1 0 2 0v-1h7v1a1 1 0 1 0 2 0v-1h1V7zM4.3 3h6.4l1.05 2.5h-8.5L4.3 3zM3 9a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm9 0a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/></symbol><symbol viewBox="0 0 11 11" id="castle-11"><path d="M8.67.81v1.48A.69.69 0 0 1 8 3H3.09a.69.69 0 0 1-.7-.7V.81a.345.345 0 0 1 .69 0v.69H4V1a.5.5 0 0 1 1 0v.5h1V1a.5.5 0 0 1 1 0v.5h1V.81a.34.34 0 1 1 .67 0zm1.39 8.82a.35.35 0 0 1-.35.35H1.35a.35.35 0 0 1 0-.7h.35a.68.68 0 0 0 .7-.7s.7-3.2.7-3.89A.68.68 0 0 1 3.79 4h3.48a.68.68 0 0 1 .7.7c0 .7.7 3.89.7 3.89a.68.68 0 0 0 .7.7h.34a.35.35 0 0 1 .35.35v-.01zM6.5 7.5a1 1 0 1 0-2 0v2h2v-2z"/></symbol><symbol viewBox="0 0 15 15" id="castle-15"><path d="M11 4H4a1 1 0 0 1-1-1V.5a.5.5 0 0 1 1 0V2h1V1a1 1 0 1 1 2 0v1h1V1a1 1 0 1 1 2 0v1h1V.5a.5.5 0 0 1 1 0V3a1 1 0 0 1-1 1zm3 10.5a.5.5 0 0 1-.5.5h-12a.5.5 0 0 1 0-1H2a1 1 0 0 0 1-1s1-6 1-7a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1c0 1 1 7 1 7a1 1 0 0 0 1 1h.5a.5.5 0 0 1 .5.49v.01zm-5-4a1.5 1.5 0 0 0-3 0V14h3v-3.5z"/></symbol><symbol viewBox="0 0 11 11" id="cemetery-11"><path d="M8.65 8H8l1-5.61A.36.36 0 0 0 8.63 2H7.16c0-.65-.7-1-1.67-1s-1.83.35-1.83 1H2.35a.36.36 0 0 0-.35.39L3 8h-.65a.35.35 0 0 0-.35.36V10h7V8.36A.35.35 0 0 0 8.66 8h-.01zM7 5H4V4h3v1z"/></symbol><symbol viewBox="0 0 15 15" id="cemetery-15"><path d="M11.46 12h-.68L12 3.55a.52.52 0 0 0-.56-.55h-1.18c0-.92-1.23-2-2.75-2S4.77 2.08 4.77 3H3.54a.52.52 0 0 0-.54.55L4.2 12h-.65a.53.53 0 0 0-.55.5V14h9v-1.51a.52.52 0 0 0-.54-.49zM4.5 5h6v1h-6V5z"/></symbol><symbol viewBox="0 0 11 11" id="cinema-11"><path d="M10 5.5v2a.5.5 0 0 1-1 0 .66.66 0 0 0-.51-.5H8v1.63a.37.37 0 0 1-.37.37H1.37A.37.37 0 0 1 1 8.63V5.37A.37.37 0 0 1 1.37 5h6.26a.37.37 0 0 1 .37.37V6h.49A.66.66 0 0 0 9 5.5a.5.5 0 0 1 1 0zM2.5 2a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3zm0 2a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zM6 1a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm0 3a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/></symbol><symbol viewBox="0 0 15 15" id="cinema-15"><path d="M14 7.5v2a.5.5 0 0 1-1 0s.06-.5-1-.5h-1v2.5a.5.5 0 0 1-.5.5h-8a.5.5 0 0 1-.5-.5v-4a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 .5.5V8h1c1.06 0 1-.5 1-.5a.5.5 0 0 1 1 0zM4 3a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm0 3a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm4.5-4a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zm0 4a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z"/></symbol><symbol viewBox="0 0 11 11" id="circle-11"><path d="M10 5.5a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0z"/></symbol><symbol viewBox="0 0 15 15" id="circle-15"><path d="M14 7.5a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0z"/></symbol><symbol viewBox="0 0 11 11" id="circle-stroked-11"><path d="M5.5 0a5.5 5.5 0 1 1 0 11 5.5 5.5 0 0 1 0-11zm0 1.222a4.278 4.278 0 1 0 0 8.556 4.278 4.278 0 0 0 0-8.556z"/></symbol><symbol viewBox="0 0 15 15" id="circle-stroked-15"><path d="M7.5 0a7.5 7.5 0 1 1 0 15 7.5 7.5 0 0 1 0-15zm0 1.667a5.833 5.833 0 1 0 0 11.666 5.833 5.833 0 0 0 0-11.666z"/></symbol><symbol viewBox="0 0 11 11" id="city-11"><title>city-11</title><path d="M9.75 3H9V1.25A.25.25 0 0 0 8.75 1h-.5a.25.25 0 0 0-.25.25V3h-.75a.25.25 0 0 0-.25.25V7H5.251A.251.251 0 0 0 5 7.251v2.5a.251.251 0 0 0 .251.249h4.5A.25.25 0 0 0 10 9.75v-6.5A.25.25 0 0 0 9.75 3zM6 8h1v1H6zm3 1H8V8h1zm0-2H8V6h1zm0-2H8V4h1zM6 1.25A.25.25 0 0 0 5.75 1h-2.5a.25.25 0 0 0-.25.25V2h-.75a.25.25 0 0 0-.25.25V3h-.75a.25.25 0 0 0-.25.25v6.5a.25.25 0 0 0 .25.25H4V6h2zM3 9H2V8h1zm0-2H2V6h1zm0-2H2V4h1zm2 0H4V4h1zm0-2H4V2h1z"/></symbol><symbol viewBox="0 0 15 15" id="city-15"><title>city-15</title><path d="M13.639 4H12V1.361A.361.361 0 0 0 11.639 1h-.278a.361.361 0 0 0-.361.361V4H9.361A.361.361 0 0 0 9 4.361V10H5.363a.363.363 0 0 0-.363.363v3.275a.363.363 0 0 0 .363.362h8.276a.361.361 0 0 0 .361-.361V4.361A.361.361 0 0 0 13.639 4zM7 12H6v-1h1zm2 0H8v-1h1zm2 0h-1v-1h1zm0-2h-1V9h1zm0-2h-1V7h1zm0-2h-1V5h1zm2 6h-1v-1h1zm0-2h-1V9h1zm0-2h-1V7h1zm0-2h-1V5h1zM8 1.361A.361.361 0 0 0 7.639 1H5.361A.361.361 0 0 0 5 1.361V3H3.361A.361.361 0 0 0 3 3.361V4H1.361A.361.361 0 0 0 1 4.361v9.278a.361.361 0 0 0 .361.361H4V9h4zM3 12H2v-1h1zm0-2H2V9h1zm0-2H2V7h1zm0-2H2V5h1zm2 2H4V7h1zm0-2H4V5h1zm2 2H6V7h1zm0-2H6V5h1zm0-2H6V3h1z"/></symbol><symbol viewBox="0 0 11 11" id="clothing-store-11"><path d="M2.5 1l-2 2v2h2v5h6V5h2V3l-2-2H7L5.5 4 4 1H2.5z"/></symbol><symbol viewBox="0 0 15 15" id="clothing-store-15"><path d="M3.5 1L0 4v3h2.9l.1 7h9V7h3V4l-3.5-3H10L7.5 5 5 1H3.5z"/></symbol><symbol viewBox="0 0 11 11" id="college-11"><g fill="#010101"><path d="M2 7.3c.3-.2.5-.5.5-.8 0-.4-.2-.7-.6-.9V4.4L5.5 6 11 3.5 5.5 1 0 3.5l1.2.5v1.6c-.4.2-.6.5-.6.9 0 .3.2.6.5.8L.6 9c-.3 1 .5 1 .5 1h1s.8 0 .5-1L2 7.3z"/><path d="M3.5 6.2v.3c0 .4-.2.8-.4 1.1.2.4.4.8.4 1.4v.6c.5.2 1.2.4 2 .4C8 10 9 8.5 9 8.5v-3L5.5 7.1l-2-.9z"/></g></symbol><symbol viewBox="0 0 15 15" id="college-15"><path d="M7.5 1L0 4.5l2 .9v1.7c-.6.2-1 .8-1 1.4s.4 1.2 1 1.4v.1l-.9 2.1C.8 13 1 14 2.5 14s1.7-1 1.4-1.9L3 10c.6-.3 1-.8 1-1.5s-.4-1.2-1-1.4V5.9L7.5 8 15 4.5 7.5 1zm4.4 6.5l-4.5 2L5 8.4v.1c0 .7-.3 1.3-.8 1.8l.6 1.4v.1c.1.4.2.8.1 1.2.7.3 1.5.5 2.5.5 3.3 0 4.5-2 4.5-3v-3z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="commercial-11"><path d="M0 5a4.71 4.71 0 0 1 1-3h9a4.71 4.71 0 0 1 1 3H0zm2 1v5h4V7h2v4h1V6H2zm3 3H3V7h2v2z"/></symbol><symbol viewBox="0 0 15 15" id="commercial-15"><path d="M14 7H1a11.431 11.431 0 0 1 1-4h11a11.429 11.429 0 0 1 1 4zM3 8h9v6h-1V9H8v5H3V8zm1 3h3V9H4v2z"/></symbol><symbol viewBox="0 0 11 11" id="cricket-11"><path d="M6 1a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm2.88 4.18l-1-2A.5.5 0 0 0 7.5 3H2.77a.74.74 0 0 0-.77.65l-1 6.71a.483.483 0 0 0 0 .14.5.5 0 0 0 .5.5.49.49 0 0 0 .5-.36l1.22-3.89.21-.83.4.44L5 7.6v2.9a.5.5 0 0 0 1 0v-3a.48.48 0 0 0-.1-.28L4.45 5.5 5.5 4h1.71l.92 1.84A.49.49 0 0 0 8.5 6a.5.5 0 0 0 .5-.49.88.88 0 0 0-.12-.33zM10.5 8a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1zM8.69 8v-.75a.25.25 0 1 0-.5 0V8a.49.49 0 0 0-.25.42v2.08a.5.5 0 0 0 1 0V8.41A.49.49 0 0 0 8.69 8z"/></symbol><symbol viewBox="0 0 15 15" id="cricket-15"><path d="M8 1.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm2.88 5.68l-2-2a.5.5 0 0 0-.4-.18H3.75a.74.74 0 0 0-.75.64l-1 7.7a.483.483 0 0 0 0 .14.5.5 0 0 0 .5.5.49.49 0 0 0 .5-.34l1.2-3.89.26-.83.4.44L6 10.6v2.9a.5.5 0 0 0 1 0v-3a.48.48 0 0 0-.08-.22L5.48 8.5l1-2.5h1.71l2 1.84a.49.49 0 0 0 .37.17.5.5 0 0 0 .44-.51.49.49 0 0 0-.12-.32zM14 11.27a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5zm-3.24-1.53V9a.25.25 0 1 0-.5 0v.74a.49.49 0 0 0-.25.42v3.34a.5.5 0 0 0 1 0v-3.34a.49.49 0 0 0-.25-.42z"/></symbol><symbol viewBox="0 0 11 11" id="cross-11"><path d="M2.2 1.19l3.3 3.3L8.8 1.2a.67.67 0 0 1 .5-.2.75.75 0 0 1 .7.7.66.66 0 0 1-.2.48L6.49 5.5 9.8 8.82c.13.126.202.3.2.48a.75.75 0 0 1-.7.7.67.67 0 0 1-.5-.2L5.5 6.51 2.21 9.8a.67.67 0 0 1-.5.2.75.75 0 0 1-.71-.71.66.66 0 0 1 .2-.48L4.51 5.5 1.19 2.18A.66.66 0 0 1 1 1.7a.75.75 0 0 1 .7-.7.67.67 0 0 1 .5.19z"/></symbol><symbol viewBox="0 0 15 15" id="cross-15"><path d="M2.64 1.27L7.5 6.13l4.84-4.84A.92.92 0 0 1 13 1a1 1 0 0 1 1 1 .9.9 0 0 1-.27.66L8.84 7.5l4.89 4.89A.9.9 0 0 1 14 13a1 1 0 0 1-1 1 .92.92 0 0 1-.69-.27L7.5 8.87l-4.85 4.85A.92.92 0 0 1 2 14a1 1 0 0 1-1-1 .9.9 0 0 1 .27-.66L6.16 7.5 1.27 2.61A.9.9 0 0 1 1 2a1 1 0 0 1 1-1c.24.003.47.1.64.27z"/></symbol><symbol viewBox="0 0 11 11" id="dam-11"><path d="M10 7.51a.5.5 0 0 1-.5.5 1 1 0 0 0-.67.34 2.14 2.14 0 0 1-1 .6 1.89 1.89 0 0 1-1.76-.37l-.34-.35a.77.77 0 0 0-1.08 0L5 9.38a.5.5 0 0 1-.5.62h-3a.5.5 0 0 1-.5-.5v-8a.5.5 0 0 1 .49-.5h.7a.5.5 0 0 1 .49.39l.73 2.51.1-.06c.16-.12.31-.27.49-.4a1.9 1.9 0 0 1 2.45 0c.15.13.29.27.44.39a.75.75 0 0 0 1 0l.41-.4A1.78 1.78 0 0 1 9.49 3a.5.5 0 0 1 0 1 1 1 0 0 0-.67.34 2.14 2.14 0 0 1-1 .6 1.89 1.89 0 0 1-1.76-.37l-.33-.34a.77.77 0 0 0-1.089-.011l-.011.011c-.14.12-.27.25-.42.37a2 2 0 0 1-.52.29l.67 2.32a1.88 1.88 0 0 1 2.06.24c.15.13.29.27.44.39a.75.75 0 0 0 1 0l.44-.42A1.78 1.78 0 0 1 9.49 7a.5.5 0 0 1 .51.51z"/></symbol><symbol viewBox="0 0 15 15" id="dam-15"><path d="M13.94 9.5a.5.5 0 0 1-.5.5 1 1 0 0 0-.67.34 2.14 2.14 0 0 1-1 .6 1.89 1.89 0 0 1-1.76-.37l-.39-.35a.77.77 0 0 0-1.089-.011l-.011.011c-.14.12-.27.25-.42.37a1.91 1.91 0 0 1-2.46-.07l-.34-.33-.1-.06.3 1.22.49 2a.5.5 0 0 1-.49.65h-4a.5.5 0 0 1-.5-.5v-12a.5.5 0 0 1 .5-.5h1.1a.5.5 0 0 1 .49.39L4 5.06v.14a1.88 1.88 0 0 1 2 .24c.16.13.31.28.47.41a.75.75 0 0 0 1 0c.16-.13.31-.28.47-.41a1.9 1.9 0 0 1 2.45 0c.15.13.29.27.44.39a.75.75 0 0 0 1 0l.47-.41A1.78 1.78 0 0 1 13.43 5a.5.5 0 0 1 0 1 1 1 0 0 0-.67.34 2.14 2.14 0 0 1-1 .6A1.89 1.89 0 0 1 10 6.57l-.33-.34a.77.77 0 0 0-1.089-.011l-.011.011c-.14.12-.27.25-.42.37a1.91 1.91 0 0 1-2.46-.07l-.39-.34a.75.75 0 0 0-1 0l-.06.05L4.93 9A1.9 1.9 0 0 1 6 9.43c.16.13.31.28.47.41a.75.75 0 0 0 1 0c.16-.13.31-.28.47-.41a1.9 1.9 0 0 1 2.45 0c.15.13.29.27.44.39a.75.75 0 0 0 1 0l.47-.41A1.78 1.78 0 0 1 13.43 9a.5.5 0 0 1 .51.5z"/></symbol><symbol viewBox="0 0 11 11" id="danger-11"><path d="M6.62 8.5l3.11 1.55-.45.89L5.5 9.06l-3.78 1.89-.45-.89L4.38 8.5l-3.1-1.55.45-.89L5.5 7.94l3.78-1.89.44.9-3.1 1.55zM8.5 3.21v.29l-1 1v1l-2 1-2-1v-1l-1-1V3a2.9 2.9 0 0 1 3-3 3.09 3.09 0 0 1 3 3.21zm-3.79-.5a.79.79 0 1 0-.79.79.79.79 0 0 0 .79-.79zM5 4.5h-.5v1H5v-1zm1.5 0H6v1h.5v-1zm1.36-1.79a.79.79 0 1 0-.79.79.79.79 0 0 0 .79-.79z"/></symbol><symbol viewBox="0 0 15 15" id="danger-15"><path d="M13.94 14.68a.5.5 0 0 1-.47.32c-.06.01-.12.01-.18 0L7.5 12.56 1.7 15a.5.5 0 0 1-.648-.284l-.002-.006a.5.5 0 0 1 .29-.71l4.85-2-4.85-2a.5.5 0 1 1 .36-.93l5.8 2.41 5.8-2.41a.5.5 0 1 1 .36.93L8.8 12l4.85 2a.5.5 0 0 1 .29.68zM12 4.23v.45a1 1 0 0 1-.2.59A17.718 17.718 0 0 1 10 7v1.16a.5.5 0 0 1-.32.47l-2.16.87h-.07l-2.17-.87A.5.5 0 0 1 5 8.16V7a17.563 17.563 0 0 1-1.82-1.73A1 1 0 0 1 3 4.68v-.45A4.6 4.6 0 0 1 7.11 0h.75A4.59 4.59 0 0 1 12 4.23zM6 4a1 1 0 1 0-2 0 1 1 0 0 0 2 0zm1 3a.5.5 0 0 0-1 0v.5a.5.5 0 0 0 1 0V7zm2 0a.5.5 0 0 0-1 0v.5a.5.5 0 0 0 1 0V7zm2-3a1 1 0 1 0-2 0 1 1 0 0 0 2 0z"/></symbol><symbol viewBox="0 0 11 11" id="defibrillator-11"><title>defibrillator-11</title><path d="M1.42 4.795C-.213 1.53 3.933-.65 5.512 2.615c1.58-3.266 5.725-1.086 4.092 2.18-.023.038-.048.074-.071.111H8.387l-.828-1.654a.65.65 0 0 0-1.118 0L5 6.134l-.441-.882A.624.624 0 0 0 4 4.906H1.491l-.071-.11zM8 6.156a.624.624 0 0 1-.559-.345L7 4.929 5.559 7.81a.624.624 0 0 1-1.118 0l-.828-1.654H2.301a24.227 24.227 0 0 0 2.897 3.45l.015.015a.44.44 0 0 0 .622-.016 24.229 24.229 0 0 0 2.89-3.449H8z"/></symbol><symbol viewBox="0 0 15 15" id="defibrillator-15"><title>defibrillator-15</title><path d="M1.55 6.338c-2.387-4.596 3.63-7.66 5.952-3.064 2.321-4.597 8.339-1.533 5.952 3.064-.087.167-.203.346-.311.521h-1.808L9.52 4.138a.625.625 0 0 0-1.1.114l-1.648 4.12-1.33-1.33A.625.625 0 0 0 5 6.86H1.861c-.109-.175-.224-.354-.311-.52zM11 8.11a.626.626 0 0 1-.52-.278L9.139 5.82 7.58 9.717a.625.625 0 0 1-.455.38.605.605 0 0 1-.125.012.625.625 0 0 1-.442-.182L4.741 8.109H2.736a42.67 42.67 0 0 0 4.46 4.674.464.464 0 0 0 .622 0 43.26 43.26 0 0 0 4.45-4.674H11z"/></symbol><symbol viewBox="0 0 11 11" id="dentist-11"><path d="M5.48 6A2 2 0 0 0 4 7c-.46 1.21-.14 3-.82 3S2.7 8.49 2.5 7a16.259 16.259 0 0 0-.76-1.89C1.53 3.7 1 1.28 2.67 1S4.35 2.52 5.5 2.52 6.67.72 8.33 1s1.14 2.7.93 4.11A16.259 16.259 0 0 0 8.5 7c-.2 1.49 0 3-.68 3S7.46 8.21 7 7a2 2 0 0 0-1.48-1h-.04z"/></symbol><symbol viewBox="0 0 15 15" id="dentist-15"><path d="M4.36 14c-1 0-.56-2.67-.86-5-.1-.76-1-1.49-1.12-2.06C2 5 1.39 1.44 3.66 1S6 3 7.54 3 9.11.64 11.39 1s1.59 3.9 1.29 5.9c-.1.45-1.1 1.48-1.18 2.06-.33 2.4.32 5-.8 5-.93 0-1.32-2.72-2-4.5C8.43 8.63 8.06 8 7.54 8 6 8 5.75 14 4.36 14z"/></symbol><symbol viewBox="0 0 11 11" id="doctor-11"><path d="M9.5 5.87A1.48 1.48 0 1 0 7.65 7.3v.42a1.855 1.855 0 1 1-3.71 0A3.27 3.27 0 0 1 5.05 5.4H5a2.58 2.58 0 0 0 1.17-2.12V1.79A1.11 1.11 0 0 0 5.06.68H4.5a.37.37 0 0 0 0 .74h.55a.37.37 0 0 1 .37.37v1.49a1.85 1.85 0 0 1-1.84 1.85v.27-.27a1.85 1.85 0 0 1-1.86-1.84v-1.5a.37.37 0 0 1 .37-.37h.52a.37.37 0 0 0 0-.74h-.52A1.11 1.11 0 0 0 1 1.79v1.49A2.58 2.58 0 0 0 2.1 5.4a3.27 3.27 0 0 1 1.1 2.32 2.595 2.595 0 1 0 5.19 0V7.3A1.48 1.48 0 0 0 9.5 5.87zM8 6.61a.74.74 0 1 1 .74-.74.74.74 0 0 1-.74.74z"/></symbol><symbol viewBox="0 0 15 15" id="doctor-15"><path d="M5.5 7A2.5 2.5 0 0 1 3 4.5v-2a.5.5 0 0 1 .5-.5H4a.5.5 0 0 0 0-1h-.5A1.5 1.5 0 0 0 2 2.5v2a3.49 3.49 0 0 0 1.51 2.87A4.41 4.41 0 0 1 5 10.5a3.5 3.5 0 1 0 7 0v-.57a2 2 0 1 0-1 0v.57a2.5 2.5 0 0 1-5 0 4.41 4.41 0 0 1 1.5-3.13A3.49 3.49 0 0 0 9 4.5v-2A1.5 1.5 0 0 0 7.5 1H7a.5.5 0 0 0 0 1h.5a.5.5 0 0 1 .5.5v2A2.5 2.5 0 0 1 5.5 7m6 2a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/></symbol><symbol viewBox="0 0 11 11" id="dog-park-11"><path d="M7.5 1s-.346.037-.5.5l-.5 2 2 1.5H10c1 0 1-1 1-1L9.5 2.5C9 2 8.5 2 8 2v-.5S8 1 7.5 1zm-5 1s-.353-.007-.723.178S1 2.833 1 3.5v2C1 6.5 1 7 .5 7c0 0-.5 0-.5.5v2s0 .5.5.5.5-.5.5-.5V8c.354 0 .69-.137 1-.299V9.5s0 .5.5.5.5-.5.5-.5V7h3l.664 1.992C7 10 7.5 10 7.5 10H8s.5 0 .5-.5S8 9 8 9V6.5c0-.89-.632-1.255-1-1.5L5.498 4H2v-.5c0-.333.092-.362.223-.428C2.353 3.007 2.5 3 2.5 3c.676.01.676-1.01 0-1z"/></symbol><symbol viewBox="0 0 15 15" id="dog-park-15"><path d="M10.3 1.22c-.386 0-.7-.02-.8.78l-.4 2.521L11.5 6.5h2c1.4 0 1.5-.959 1.5-.959l-1.9-2.219c-.7-.7-1.4-.822-2.1-.822V2s.067-.78-.7-.78zm-5.55.28s-.95.02-1.55.22c-.6.2-1.2.901-1.2 1.901v3.9C2 9.221 1.3 9.5 1 9.5c0 0-1 .021-1 1.021v2.2s0 .8.8.8H2V12.822c0-.4-.2-.6-.5-.7v-1.1c1 0 1.1-.201 1.5-.301l.55 2.197c.1.3.2.5.5.6h1L6 13.5v-.8c0-.677-1-.7-1-.7V9.5h3.5l.7 2.621c.4 1.4 1.3 1.379 1.3 1.379H12v-.8c0-.713-1-.7-1-.7l.1-4.078L8 5.5H3.5v-2c0-.4.276-.495.5-.5.494-.012.75 0 .75 0a.75.75 0 0 0 0-1.5zm7 2.5a.25.25 0 1 1 0 .5.25.25 0 0 1 0-.5z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="drinking-water-11"><title>drinking-water-11</title><path d="M5 11H3a.51.51 0 0 1-.5-.4L1 5.6a.5.5 0 0 1 .5-.6h5a.5.5 0 0 1 .5.6l-1.49 5A.51.51 0 0 1 5 11zM2.76 8h2.46l.67-2H2.11zM4.5 0A1.5 1.5 0 0 0 3 1.51v2a.5.5 0 0 0 .5.5h1A.5.5 0 0 0 5 3.5v-1a.5.5 0 0 1 .5-.5H10V0H4.5z"/></symbol><symbol viewBox="0 0 15 15" id="drinking-water-15"><title>drinking-water-15</title><path d="M6 1a2 2 0 0 0-2 2v3.5a.5.5 0 0 0 .5.5h2a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 1 .5-.5H14V1H6zM7 15H4a.5.5 0 0 1-.48-.38L2 8.62A.5.5 0 0 1 2.5 8h6a.5.5 0 0 1 .5.62l-1.5 6A.5.5 0 0 1 7 15zm-3.35-4h3.71l.5-2H3.14z"/></symbol><symbol viewBox="0 0 11 11" id="embassy-11"><path d="M5.5 2a4.07 4.07 0 0 0-2.41 1.06.36.36 0 0 0-.09.24v3.32a.34.34 0 0 0 .57.27 3.23 3.23 0 0 1 1.93-.67C6.61 6.22 6.85 7 8 7a3.08 3.08 0 0 0 1.83-.84.36.36 0 0 0 .17-.32V2.37A.35.35 0 0 0 9.5 2a3.13 3.13 0 0 1-1.5.67C6.85 2.67 6.65 2 5.5 2zm-4-.5a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm.5 3v6a.5.5 0 0 1-1 0v-6a.5.5 0 0 1 1 0z"/></symbol><symbol viewBox="0 0 15 15" id="embassy-15"><path d="M6.65 2C5.43 2 4.48 3.38 4.11 3.82a.49.49 0 0 0-.11.32v4.4a.44.44 0 0 0 .72.36 3 3 0 0 1 1.93-1.17C8.06 7.73 8.6 9 10.07 9a5.28 5.28 0 0 0 2.73-1.09.49.49 0 0 0 .2-.4V2.45a.44.44 0 0 0-.62-.45 5.75 5.75 0 0 1-2.31 1.06C8.6 3.08 8.12 2 6.65 2zM2.5 3a1 1 0 1 1 0-2 1 1 0 0 1 0 2zM3 4v9.48a.5.5 0 0 1-1 0V4a.5.5 0 0 1 1 0z"/></symbol><symbol viewBox="0 0 11 11" id="emergency-phone-11"><title>emergency-phone-11</title><path d="M8.87 8.53a.73.73 0 0 0 0-1l-.74-.74a.73.73 0 0 0-1 0zm-4.6-4.56a.73.73 0 0 0 0-1l-.71-.71a.73.73 0 0 0-1 0zM3.04 5.65l2.31 2.31a.37.37 0 0 0 .52 0l.44-.43 1.76 1.74a2.27 2.27 0 0 1-1.34.73h-1a1.345 1.345 0 0 1-1-.52L1.52 6.27a1.345 1.345 0 0 1-.52-1v-1a2.27 2.27 0 0 1 .73-1.34l1.74 1.76-.43.44a.37.37 0 0 0 0 .52M8 2.5H6.5v1H8V5h1V3.5h1.5v-1H9V1H8z"/></symbol><symbol viewBox="0 0 15 15" id="emergency-phone-15"><title>emergency-phone-15</title><path d="M7.875 11.49a.51.51 0 0 0 .72 0l.72-.72 2.18 2.16-.37.37a2.24 2.24 0 0 1-1.44.7H8.24a2.24 2.24 0 0 1-1.45-.7L1.72 8.23A2.24 2.24 0 0 1 1 6.78V5.33a2.24 2.24 0 0 1 .72-1.45l.36-.36 2.18 2.17-.73.73a.51.51 0 0 0 0 .72zm4.72.38a1 1 0 0 0 .036-1.414l-.036-.036-.72-.72a1 1 0 0 0-1.414-.036l-.036.036zm-7.28-7.25a1 1 0 0 0 .036-1.414l-.756-.756a1 1 0 0 0-1.414-.036l-.041.036zM10 2v2H8v1h2v2h1V5h2V4h-2V2z"/></symbol><symbol viewBox="0 0 11 11" id="entrance-11"><path d="M4 2.25a.75.75 0 1 1 1.5 0 .75.75 0 0 1-1.5 0zM9.27 4H7.88a.73.73 0 0 0-.52.21l-4 4a.73.73 0 0 1-.51.21H1.73a.73.73 0 1 0 0 1.46h1.89a.73.73 0 0 0 .51-.21l4-4a.73.73 0 0 1 .48-.17h.66a.73.73 0 0 0 .73-.73.73.73 0 0 0-.73-.77zm-4.52-.5a.75.75 0 0 0-.75.75V6l1.5-1.5v-.25a.75.75 0 0 0-.75-.75z"/></symbol><symbol viewBox="0 0 15 15" id="entrance-15"><path d="M7 6.5v-1a1 1 0 1 0-2 0v3l2-2zm-2.35 4.06L5 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0l-.35 7.56z"/><path d="M14 6a1 1 0 0 1-1 1h-1.58a1 1 0 0 0-.71.29l-5.42 5.42a1 1 0 0 1-.7.29H2a1 1 0 1 1 0-2h1.59a1 1 0 0 0 .7-.29l5.42-5.42a1 1 0 0 1 .71-.29H13a1 1 0 0 1 1 1z"/></symbol><symbol viewBox="0 0 11 11" id="entrance-alt1-11"><title>entrance-alt1-11</title><path d="M4.793 7.263a.5.5 0 0 0 .707.707l2.243-2.293a.25.25 0 0 0 0-.354L5.489 3.042a.5.5 0 0 0-.707.707L6 5H1.5a.5.5 0 0 0 0 1H6zM9 1H4.5a.5.5 0 0 0 0 1h4a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-.5.5h-4a.5.5 0 0 0 0 1H9a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1z"/></symbol><symbol viewBox="0 0 15 15" id="entrance-alt1-15"><title>entrance-alt1-15</title><path d="M6.554 9.639a.5.5 0 0 0 .707.707l2.667-2.677a.25.25 0 0 0 0-.354L7.261 4.639a.5.5 0 0 0-.707.707L8.2 7H1.5a.5.5 0 0 0 0 1h6.7zM12 1H5.5a.5.5 0 0 0 0 1h6a.5.5 0 0 1 .5.5v10a.5.5 0 0 1-.5.5H5.25a.5.5 0 0 0 0 1H12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1z"/></symbol><symbol viewBox="0 0 11 11" id="farm-11"><title>farm-11</title><path d="M6 5L4 4 2 5 1 7v3h1.5V8h3v2H7V7zM5 7H3V5.5h2V7z" fill="#231f20"/><path d="M10 2a1 1 0 0 0-2 0v8h2V2z" fill="#010101"/></symbol><symbol viewBox="0 0 15 15" id="farm-15"><title>farm-15</title><path d="M8 7L5 5 2 7 1 9v4h2v-2h4v2h2V9zM6 9H4V7h2v2zm8 4h-3V3.5a1.5 1.5 0 0 1 3 0V13z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="fast-food-11"><path d="M10 8a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2h9zm0-3H1a1 1 0 1 0 0 2h9a1 1 0 1 0 0-2zM8.55 1H2.46A1.46 1.46 0 0 0 1 2.46V4h9V2.47A1.46 1.46 0 0 0 8.55 1zm-5 2A.5.5 0 1 1 4 2.5a.5.5 0 0 1-.5.5h.05zm4 0A.5.5 0 1 1 8 2.5a.5.5 0 0 1-.5.5h.05z"/></symbol><symbol viewBox="0 0 15 15" id="fast-food-15"><path d="M14 8a1 1 0 0 1-1 1H2a1 1 0 1 1 0-2h11a1 1 0 0 1 1 1zM3.5 10H2a3 3 0 0 0 3 3h5a3 3 0 0 0 3-3H3.5zM3 6H2V4a2 2 0 0 1 2-2h7a2 2 0 0 1 2 2v2H3zm8-1.5a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0zm-2-1a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0zm-2 1a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0zm-2-1a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0zm-2 1a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0z"/></symbol><symbol viewBox="0 0 11 11" id="fence-11"><title>fence-11</title><path d="M9.5 7H9V5h.5a.5.5 0 0 0 0-1H9V3l-.278-.555a.254.254 0 0 0-.443 0L8 3v1H7V3l-.278-.555a.254.254 0 0 0-.443 0L6 3v1H5V3l-.278-.555a.254.254 0 0 0-.443 0L4 3v1H3V3l-.278-.555a.254.254 0 0 0-.443 0L2 3v1h-.5a.5.5 0 0 0 0 1H2v2h-.5a.5.5 0 0 0 0 1H2v.5a.5.5 0 0 0 1 0V8h1v.5a.5.5 0 0 0 1 0V8h1v.5a.5.5 0 0 0 1 0V8h1v.5a.5.5 0 0 0 1 0V8h.5a.5.5 0 0 0 0-1zM3 7V5h1v2zm2 0V5h1v2zm2 0V5h1v2z"/></symbol><symbol viewBox="0 0 15 15" id="fence-15"><title>fence-15</title><path d="M13.5 10H13V7h.5a.5.5 0 0 0 0-1H13V4l-.286-.573a.249.249 0 0 0-.424-.006L12 4v2h-1V4l-.286-.573a.249.249 0 0 0-.424-.006L10 4v2H9V4l-.286-.573a.249.249 0 0 0-.424-.006L8 4v2H7V4l-.286-.573a.249.249 0 0 0-.424-.006L6 4v2H5V4l-.286-.573a.249.249 0 0 0-.424-.006L4 4v2H3V4l-.286-.573a.249.249 0 0 0-.424-.006L2 4v2h-.5a.5.5 0 0 0 0 1H2v3h-.5a.5.5 0 0 0 0 1H2v1.5a.5.5 0 0 0 1 0V11h1v1.5a.5.5 0 0 0 1 0V11h1v1.5a.5.5 0 0 0 1 0V11h1v1.5a.5.5 0 0 0 1 0V11h1v1.5a.5.5 0 0 0 1 0V11h1v1.5a.5.5 0 0 0 1 0V11h.5a.5.5 0 0 0 0-1zM3 10V7h1v3zm2 0V7h1v3zm2 0V7h1v3zm2 0V7h1v3zm2 0V7h1v3z"/></symbol><symbol viewBox="0 0 11 11" id="ferry-11"><path d="M11 9.45v.77a.83.83 0 0 0-.57.26 1.86 1.86 0 0 1-.81.46 1.74 1.74 0 0 1-1.49-.29l-.33-.27a.71.71 0 0 0-.93 0c-.12.09-.23.2-.35.28a1.75 1.75 0 0 1-2.1-.05l-.33-.27a.69.69 0 0 0-.83 0c-.16.11-.3.25-.46.36a1.75 1.75 0 0 1-2 0l-.26-.21a.82.82 0 0 0-.54-.27v-.77a1.16 1.16 0 0 1 .63.11c.234.13.458.276.67.44a.76.76 0 0 0 .7.2.82.82 0 0 0 .26-.12c.13-.09.25-.2.38-.3a1.75 1.75 0 0 1 2.07 0l.4.31a.69.69 0 0 0 .81 0l.4-.31a1.75 1.75 0 0 1 2.08 0l.38.3a.69.69 0 0 0 .82 0l.4-.31a1.61 1.61 0 0 1 1-.32zM2.61 7.61L1 5l1-.91V1.15A1.18 1.18 0 0 1 3.19 0h4.62A1.18 1.18 0 0 1 9 1.15v2.94L10 5 8.39 7.62a2.22 2.22 0 0 0-2.65.14L5.5 8l-.2-.18a2.22 2.22 0 0 0-2.69-.21zm.2-4L5.5 2l2.69 1.63V1.15a.36.36 0 0 0-.38-.38H3.19a.36.36 0 0 0-.38.38v2.48-.02z"/></symbol><symbol viewBox="0 0 15 15" id="ferry-15"><path d="M5.33 11a3 3 0 0 1 1.85.67l.26.23h.05l.31-.28a2.89 2.89 0 0 1 3.44-.18L13.5 7 12 6V2.45A1.54 1.54 0 0 0 10.5 1H10a.94.94 0 0 0-1-1H6a.94.94 0 0 0-1 1h-.5A1.54 1.54 0 0 0 3 2.45V6L1.5 7l2.25 4.53A2.93 2.93 0 0 1 5.33 11zM4 2.45A.47.47 0 0 1 4.5 2h6a.47.47 0 0 1 .5.5v3l-3.5-2L4 5.45v-3zM14 13v1a1 1 0 0 0-.68.34 2.15 2.15 0 0 1-1 .6 1.91 1.91 0 0 1-1.77-.37l-.39-.35a.78.78 0 0 0-1.1 0c-.14.12-.27.25-.42.37a1.92 1.92 0 0 1-2.48-.07l-.39-.35a.76.76 0 0 0-1 0c-.19.15-.36.32-.55.47a1.91 1.91 0 0 1-2.35-.06l-.31-.27A.94.94 0 0 0 1 14v-1c.259-.032.52.017.75.14a6.2 6.2 0 0 1 .79.58.84.84 0 0 0 .81.25.93.93 0 0 0 .31-.16c.16-.12.29-.26.45-.39a1.92 1.92 0 0 1 2.45 0c.16.13.31.28.47.41a.76.76 0 0 0 1 0c.16-.13.31-.28.47-.41a1.92 1.92 0 0 1 2.46 0c.15.13.29.27.44.39a.76.76 0 0 0 1 0l.47-.41c.32-.26.719-.4 1.13-.4z"/></symbol><symbol viewBox="0 0 11 11" id="fire-station-11"><path d="M5.5 0l-2 4L2 2c-.405.712-2 2.167-2 4 0 2.7 2.8 5 5.5 5S11 8.7 11 6c0-1.833-1.595-3.288-2-4L7.5 4l-2-4zm0 5.5s2 1.585 2 3c0 .611-.778 1.278-2 1.278s-2-.667-2-1.278c0-1.366 2-3 2-3z"/></symbol><symbol viewBox="0 0 15 15" id="fire-station-15"><path d="M7.5.5L5 4.5l-1.5-2C2.945 3.475.804 5.792.804 8.304a6.696 6.696 0 1 0 13.392 0c0-2.512-2.141-4.829-2.696-5.804l-1.5 2-2.5-4zm0 6.5S10 9.562 10 11.5c0 .837-.826 2-2.5 2S5 12.337 5 11.5C5 9.628 7.5 7 7.5 7z"/></symbol><symbol viewBox="0 0 11 11" id="florist-11"><title>florist-11</title><path d="M1 2.5a3.1 3.1 0 0 0-1-2A3.9 3.9 0 0 1 2 2l.526-2 .437 2a3.9 3.9 0 0 1 2-1.5 3.1 3.1 0 0 0-1 2A1.307 1.307 0 0 1 2.662 4h-.253A1.36 1.36 0 0 1 1 2.5zm8 6.482l2-.437-2-.527a3.9 3.9 0 0 0 1.5-2 3.1 3.1 0 0 1-2 1A1.36 1.36 0 0 0 7 8.427v.253a1.307 1.307 0 0 0 1.5 1.3 3.1 3.1 0 0 1 2 1A3.9 3.9 0 0 0 9 8.982zM3.4 7.9l2.713-2.719a1.382 1.382 0 0 1-.436-.271L3.044 7.543l-.279-.279A11.045 11.045 0 0 0 3 4.5h-.5a15.272 15.272 0 0 1-.161 2.338l-.088-.088a.247.247 0 0 0-.4.071L.059 10.657a.27.27 0 0 0-.026.108.25.25 0 0 0 .25.25.27.27 0 0 0 .089-.021L.378 11l3.8-1.85a.247.247 0 0 0 .068-.4l-.063-.063A12.768 12.768 0 0 1 6.5 8.5V8a10.381 10.381 0 0 0-2.724.275zm3.843-5.378a.75.75 0 0 1 .018-1.5.739.739 0 0 1 .561.266.75.75 0 1 1 1.383 0 .739.739 0 0 1 .561-.266.75.75 0 0 1 .014 1.5.748.748 0 1 1-.561 1.26.728.728 0 0 1 .044.218.75.75 0 1 1-1.5 0 .737.737 0 0 1 .05-.238.739.739 0 0 1-.558.26.75.75 0 0 1-.012-1.5zm.518-.022a.75.75 0 1 0 .75-.75.75.75 0 0 0-.75.75z"/></symbol><symbol viewBox="0 0 15 15" id="florist-15"><title>florist-15</title><path d="M1.5 1A2.7 2.7 0 0 1 4 3l.5-3L5 3a2.7 2.7 0 0 1 2.5-2c-.2.03-1 .26-1 2v.083A1.959 1.959 0 0 1 4.5 5h-.083A1.959 1.959 0 0 1 2.5 3c0-1.739-.8-1.97-1-2zm10.512 10l3-.5-3-.5A2.686 2.686 0 0 0 14 7.5c-.03.2-.248 1-1.988 1a2 2 0 0 0 0 4c1.739 0 1.958.8 1.988 1a2.686 2.686 0 0 0-1.988-2.5zM9.688 5.548a1 1 0 0 1 0-2 1 1 0 0 1 0-2 .986.986 0 0 1 .852.507l.023-.012a.978.978 0 0 1-.116-.444 1 1 0 1 1 2 0 .978.978 0 0 1-.116.444l.019.01a.986.986 0 0 1 .85-.5 1 1 0 0 1 .025 2 1 1 0 0 1-.025 2 .986.986 0 0 1-.85-.5l-.016.009a.978.978 0 0 1 .113.44 1 1 0 0 1-2 0 .978.978 0 0 1 .113-.44l-.02-.011a.986.986 0 0 1-.852.507zm.71-1.995A1.051 1.051 0 1 0 11.449 2.5 1.051 1.051 0 0 0 10.4 3.553zm-5.452 7.891l-.516-.515 4.462-4.454a1.746 1.746 0 0 1-.452-.255l-4.364 4.355-.519-.518A16.051 16.051 0 0 0 4.912 6a3.373 3.373 0 0 1-.412.035c-.041 0-.073-.008-.112-.01a16.953 16.953 0 0 1-1.257 3.606L2.76 9.26a.246.246 0 0 0-.4.079L.231 14.445a.287.287 0 0 0-.016.089.25.25 0 0 0 .25.25.289.289 0 0 0 .1-.019l5.1-2.124a.246.246 0 0 0 .079-.4l-.372-.372a16.874 16.874 0 0 1 3.612-1.256c0-.059-.015-.106-.015-.166A3.349 3.349 0 0 1 9 10.089a16.076 16.076 0 0 0-4.054 1.355z"/></symbol><symbol viewBox="0 0 11 11" id="fuel-11"><path d="M9.5 3H9V1.5a.5.5 0 0 0-1 0V3a1 1 0 0 0 1 1v4.25a.25.25 0 1 1-.5 0V6.5A1.5 1.5 0 0 0 7 5V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h4a1 1 0 0 0 1-1V6a.5.5 0 0 1 .5.5v1.75a1.25 1.25 0 1 0 2.5 0V3.5a.5.5 0 0 0-.5-.5zM6 4.5a.49.49 0 0 1-.48.5h-3A.51.51 0 0 1 2 4.5V3a.5.5 0 0 1 .5-.5h3A.5.5 0 0 1 6 3v1.5z"/></symbol><symbol viewBox="0 0 15 15" id="fuel-15"><path d="M13 6v5.5a.5.5 0 0 1-1 0v-2A1.5 1.5 0 0 0 10.5 8H9V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v11a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V9h1.5a.5.5 0 0 1 .5.5v2a1.5 1.5 0 0 0 3 0V5a1 1 0 0 0-1-1V2.49a.5.5 0 0 0-.5-.49.51.51 0 0 0-.5.55V5a1 1 0 1 0 1-1M8 6.5a.5.5 0 0 1-.5.5h-5a.5.5 0 0 1-.5-.5v-3a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 .5.5v3z"/></symbol><symbol viewBox="0 0 11 11" id="gaming-11"><title>gaming</title><path d="M9.715 5.8a2.046 2.046 0 0 0-2-1.8h-1.7V2.5c0-.2.2-.5.4-.5h2.1a.472.472 0 0 0 .5-.5.472.472 0 0 0-.5-.5h-2a1.453 1.453 0 0 0-1.5 1.4V4h-1.8a2.046 2.046 0 0 0-2 1.8l-.2 2.8a.991.991 0 0 0 .8 1.1 1.613 1.613 0 0 0 .9-.3l1.4-1.4h2.8l1.4 1.4a1.071 1.071 0 0 0 1.4.1 1.613 1.613 0 0 0 .3-.9zM4.015 7h-2V6a.945.945 0 0 1 1-1h1zm5 0h-2V5h1a1 1 0 0 1 1 1z"/></symbol><symbol viewBox="0 0 15 15" id="gaming-15"><title>gaming</title><path d="M13.1 12.5c-.6.3-1.4.1-1.8-.5l-1.1-1.4H4.8L3.7 12c-.5.7-1.4.8-2.1.3-.5-.4-.7-1-.6-1.5l.7-3.7C1.9 5.9 3 5 4.2 5H7V3.5C7 2.7 7.6 2 8.4 2h3.1c.3 0 .5.2.5.5s-.2.5-.5.5h-3c-.3 0-.5.2-.5.4V5h2.8c1.2 0 2.3.9 2.5 2.1l.7 3.7c.1.7-.2 1.4-.9 1.7zM6 7.5C6 6.7 5.3 6 4.5 6S3 6.7 3 7.5 3.7 9 4.5 9 6 8.3 6 7.5zm6 0c0-.3-.2-.5-.5-.5H11v-.5c0-.3-.2-.5-.5-.5s-.5.2-.5.5V7h-.5c-.3 0-.5.2-.5.5s.2.5.5.5h.5v.5c0 .3.2.5.5.5s.5-.2.5-.5V8h.5c.3 0 .5-.2.5-.5z"/></symbol><symbol viewBox="0 0 11 11" id="garden-11"><path d="M10 6a4 4 0 0 1-4.25 4A4 4 0 0 1 1.5 6a4 4 0 0 1 3.9 2.26V5h-2a.89.89 0 0 1-.9-.88V1.84a.35.35 0 0 1 .64-.21L4.28 3 5.45.67a.35.35 0 0 1 .6 0L7.22 3l1.13-1.38a.35.35 0 0 1 .65.21v2.28a.89.89 0 0 1-.89.89H6.1v3.26A4 4 0 0 1 10 6z"/></symbol><symbol viewBox="0 0 15 15" id="garden-15"><path d="M13 8c0 3.31-2.19 6-5.5 6S2 11.31 2 8a5.33 5.33 0 0 1 5 3.61V7H4.5A1.5 1.5 0 0 1 3 5.5v-3a.5.5 0 0 1 .9-.3l1.53 2 1.65-3a.5.5 0 0 1 .84 0l1.65 3 1.53-2a.5.5 0 0 1 .9.3v3A1.5 1.5 0 0 1 10.5 7H8v4.61A5.33 5.33 0 0 1 13 8z"/></symbol><symbol viewBox="0 0 11 11" id="garden-center-11"><title>garden-center-11</title><path d="M10.875 5.164l-.007-.008-.029-.029-.971-.97A.5.5 0 0 0 9 4.494v1.148L7 7.646V3a2 2 0 0 0-4 0 2 2 0 0 0 0 4v1a1 1 0 0 0 1 1h2a.984.984 0 0 0 .833-.48L9.36 5.99h1.061a.5.5 0 0 0 .453-.826zM1.5 5A1.5 1.5 0 0 1 3 3.5v3A1.5 1.5 0 0 1 1.5 5zm2-2a1.5 1.5 0 0 1 3 0h-3z"/></symbol><symbol viewBox="0 0 15 15" id="garden-center-15"><path d="M4 5v-.5a2.5 2.5 0 0 1 5 0v5.793l2.365-2.365-.347-1.295-.001-.006h-.001a.5.5 0 0 1 .838-.481l2 2a.5.5 0 0 1-.479.838l-.01-.003-1.293-.346L9 11.707V12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-.464L1.732 9.268a2.503 2.503 0 0 1 0-3.536A2.493 2.493 0 0 1 3.5 5H4zm0 1h-.5a1.5 1.5 0 0 0-1.061 2.561L4 10.121V6zm4-1v-.5a1.5 1.5 0 0 0-3 0V5h3z"/></symbol><symbol viewBox="0 0 11 11" id="gift-11"><path d="M0 5h4.5v1H0V5zm1 4.79c0 .668.542 1.21 1.21 1.21H4.52V7H1v2.79zM7.64 4H3.36A1.26 1.26 0 0 1 2 2.5 1.41 1.41 0 0 1 3.42 1a2.12 2.12 0 0 1 2.1 1.69A2.13 2.13 0 0 1 7.62 1 1.43 1.43 0 0 1 9 2.52 1.27 1.27 0 0 1 7.64 4zm-2.82-.75a1.43 1.43 0 0 0-1.4-1.5.68.68 0 0 0-.7.75.68.68 0 0 0 .606.747c.031.003.063.004.094.003h1.4zm2.8 0a.68.68 0 0 0 .7-.75.71.71 0 0 0-.7-.75 1.43 1.43 0 0 0-1.4 1.5h1.4zM6.52 5v1H11V5H6.52zm0 6h2.29A1.21 1.21 0 0 0 10 9.79V7H6.52v4z"/></symbol><symbol viewBox="0 0 15 15" id="gift-15"><path d="M6.5 5v2H0V5h6.5zm2 0v2H15V5H8.5zM1 8v4.5A1.5 1.5 0 0 0 2.5 14h4V8H1zm7.5 0v6h4a1.5 1.5 0 0 0 1.5-1.5V8H8.5zm2-8a3 3 0 0 0-3 2.25A3 3 0 0 0 4.5 0a1.94 1.94 0 0 0-2 2 1.73 1.73 0 0 0 1.91 2h6.13a1.75 1.75 0 0 0 2-2 2 2 0 0 0-2.04-2zm-6 3a.92.92 0 0 1-1-1 .92.92 0 0 1 1-1 2 2 0 0 1 2 2h-2zm6 0h-2a2 2 0 0 1 2-2 1 1 0 0 1 1 1 .92.92 0 0 1-1 1z"/></symbol><symbol viewBox="0 0 11 11" id="golf-11"><path d="M4.05.638c-.518.543.223 1.175.678.675L5.224.77l2.332 1.393L3.306 4.5c-.293.162-.341.44-.234.721l.889 2.317-.935 2.804c-.129.385.171.649.474.658a.468.468 0 0 0 .475-.341l.92-2.764.853-.283.252.505V10.5s0 .5.5.5.5-.5.5-.5V8.117a.84.84 0 0 0-.064-.362l-1.281-3.34 2.552-1.403c.187-.08.29-.254.29-.512 0-.226-.217-.413-.456-.556L4.905.071c-.16-.096-.275-.043-.323.007l-.533.56zM3 2a1 1 0 1 0 0 2 1 1 0 0 0 0-2z"/></symbol><symbol viewBox="0 0 15 15" id="golf-15"><path d="M3.4 1.1v.2c0 .4.3.7.7.7.3 0 .5-.2.6-.5l.2-.5 5.6 2.3L6.6 6c-.4.3-.4.7-.3 1.1l.9 2.1-1.3 3.9c-.2.5.2.9.6.9.3 0 .5-.1.6-.5l1.4-4 .1.3v3.5s0 .7.7.7.7-.7.7-.7V10c0-.2 0-.3-.1-.5L8.5 6.1l2.7-1.9c.2-.2.4-.3.4-.6s-.2-.5-.4-.6L4 .1c-.088 0-.118.018-.2.1l-.4.9zM5.5 3C4.7 3 4 3.7 4 4.5S4.7 6 5.5 6 7 5.3 7 4.5 6.3 3 5.5 3z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="grocery-11"><path d="M9.75 1.5c-.004 0-.318-.006-.63.188C8.803 1.881 8.5 2.3 8.5 3H1l.75 3.5c.107.5.75.5.75.5h6s-.003.247-.152.496S7.93 8 7.25 8H2c-.338-.005-.338.505 0 .5h5.25c.82 0 1.302-.37 1.527-.746C9.003 7.378 9 7 9 7V3c0-.567.196-.772.38-.887C9.567 2 9.747 2 9.747 2h.504c.338.005.338-.505 0-.5h-.5zm-2.5 7a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5zm-4 0a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5z"/></symbol><symbol viewBox="0 0 15 15" id="grocery-15"><path d="M13.2 1.5s-1.391-.041-1.946.5c-.534.52-.754.918-.754 2H1.2l1.394 4.814c.003.008.01.015.013.022.235.657.848 1.13 1.579 1.158l.013.006h6.5v.2s.001.3-.199.7c-.2.4-.3.6-1.1.6H2.9c-1 0-1 1.5 0 1.5H9.3c1.2 0 2.1-.7 2.4-1.4.3-.7.3-1.3.3-1.3V4c0-.524.229-1 .7-1h.55a.75.75 0 0 0 0-1.5h-.05zM9.2 13c-.6 0-1 .4-1 1s.4 1 1 1 1-.4 1-1-.4-1-1-1zm-5 0c-.6 0-1 .4-1 1s.4 1 1 1 1-.4 1-1-.4-1-1-1z"/></symbol><symbol viewBox="0 0 11 11" id="hairdresser-11"><path d="M1.5 2A1.5 1.5 0 0 0 0 3.5v1c0 .5.5.5.5.5h1C3 5 4 5.5 4 5.5S3 6 1.5 6h-1S0 6 0 6.5v1a1.5 1.5 0 0 0 3 0v-.615c.808-.158 1.587-.453 2.225-.742L8.5 8C10 8.75 11 8 11 8L6.5 5.5 11 3s-1-.75-2.5 0L5.225 4.857C4.587 4.568 3.808 4.273 3 4.115v-.611V3.5A1.5 1.5 0 0 0 1.5 2zm0 1a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm3.732 2.25h.018a.25.25 0 1 1-.018 0zM1.5 7a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1z"/></symbol><symbol viewBox="0 0 15 15" id="hairdresser-15"><path d="M15 3s-2-.6-3.5.5l-4.3 3c-.8-.6-2-1.3-3.2-1.7V4c0-1.1-.9-2-2-2s-2 .9-2 2v1.5c0 .5.5.5.5.5h2C4.5 6 6 7.5 6 7.5S4.5 9 2.5 9h-2S0 9 0 9.5V11c0 1.1.9 2 2 2s2-.9 2-2v-.8c1.2-.4 2.4-1.1 3.2-1.7l4.3 3c1.5 1.1 3.5.5 3.5.5L8.5 7.5 15 3zM3 5H1V4c0-.6.4-1 1-1s1 .4 1 1v1zm0 6c0 .6-.4 1-1 1s-1-.4-1-1v-1h2v1zm4.25-3a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="harbor-11"><path d="M5.5 0A2.5 2.5 0 0 0 3 2.5a2.493 2.493 0 0 0 1.75 2.371v4.545c-.659-.115-1.338-.375-1.893-.857C2.09 7.89 1.5 6.829 1.5 5A.75.75 0 1 0 0 5c0 2.17.773 3.735 1.873 4.691S4.333 11 5.5 11s2.527-.352 3.627-1.309S11 7.171 11 5c.014-1.014-1.514-1.014-1.5 0 0 1.83-.589 2.89-1.357 3.559-.555.482-1.234.742-1.893.857V4.875A2.494 2.494 0 0 0 5.5 0zm0 1.5a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/></symbol><symbol viewBox="0 0 15 15" id="harbor-15"><path d="M7.5 0C5.5 0 4 1.567 4 3.5a3.492 3.492 0 0 0 2.5 3.338v6.039c-.93-.165-1.875-.55-2.648-1.27-1.053-.98-1.85-2.54-1.85-5.109a1 1 0 1 0-2.002 0c0 3.003 1.012 5.196 2.49 6.572C3.968 14.447 5.838 15 7.5 15c1.666 0 3.535-.56 5.012-1.94s2.486-3.573 2.486-6.562c.065-1.395-2.063-1.395-1.998 0 0 2.553-.8 4.115-1.853 5.1-.774.722-1.718 1.11-2.647 1.277V6.842A3.494 3.494 0 0 0 11 3.5C11 1.567 9.5 0 7.5 0zm0 2a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3z"/></symbol><symbol viewBox="0 0 11 11" id="heart-11"><path d="M10.06 4.76a27 27 0 0 1-4.2 5.36.49.49 0 0 1-.71 0A27.003 27.003 0 0 1 .94 4.76C-.88 1.12 3.74-1.31 5.5 2.33c1.76-3.64 6.38-1.21 4.56 2.43z"/></symbol><symbol viewBox="0 0 15 15" id="heart-15"><path d="M13.91 6.75c-1.17 2.25-4.3 5.31-6.07 6.94a.5.5 0 0 1-.67 0C5.39 12.06 2.26 9 1.09 6.75-1.48 1.8 5-1.5 7.5 3.45c2.5-4.95 8.98-1.65 6.41 3.3z"/></symbol><symbol viewBox="0 0 11 11" id="heliport-11"><path d="M3 1c-.277 0-.5.223-.5.5s.224.482.5.5h3v2H2.912a1.5 1.5 0 1 0-.39 1.596L4.5 8.5c.681 1 1.5 1 2 1h3.535s.965 0 .965-1v-1c0-.5-.5-1-.5-1l-2-2S8 4 7.5 4H7V2h3a.499.499 0 1 0 0-1H3zM1.5 4a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm6.25 1s.25 0 .75.5L10 7H7.5S7 7 7 6.5v-1s0-.5.5-.5h.25z"/></symbol><symbol viewBox="0 0 15 15" id="heliport-15"><path d="M4 2C3 2 3 3 4 3h4v1c-.277 0-.5.223-.5.5V5H3.932A1.998 1.998 0 0 0 0 5.5a2 2 0 0 0 2 2 2 2 0 0 0 1.053-.303L5.5 10.5C6.507 11.95 8.318 12 9 12h5s1 0 1-1v-.994c0-.733-.126-1.132-.5-1.506l-3-3s-.592-.5-1.273-.5H9.5v-.5c0-.277-.223-.5-.5-.5V3h4c1 0 1-1 0-1H4zM2 4.5a1 1 0 1 1 0 2 1 1 0 0 1 0-2zM10 6c.5 0 .79.323 1 .5L13.5 9H10S9 9 9 8V7s0-1 1-1z"/></symbol><symbol viewBox="0 0 11 11" id="home-11"><title>home-11</title><path d="M10 4.75a.25.25 0 0 1-.25.25h-8.5A.25.25 0 0 1 1 4.75a.261.261 0 0 1 .08-.19l4.237-3.454.016-.016a.248.248 0 0 1 .35.016L8 2.995V1.5a.5.5 0 0 1 1 0v2.31l.92.75a.261.261 0 0 1 .08.19zm-8 5a.248.248 0 0 0 .246.25H5V8h1v2h2.752A.248.248 0 0 0 9 9.752V6H2z"/></symbol><symbol viewBox="0 0 15 15" id="home-15"><title>home-15</title><path d="M2 13.75a.25.25 0 0 0 .25.25H6v-3h3v3h3.75a.25.25 0 0 0 .25-.25V8H2zm11.932-7.171L13 5.76V2a1 1 0 0 0-2 0v2L7.682 1.09a.25.25 0 0 0-.353-.011l-.011.011-6.25 5.464a.25.25 0 0 0 .179.421L3 7h10.749a.25.25 0 0 0 .183-.421z"/></symbol><symbol viewBox="0 0 11 11" id="horse-riding-11"><title>horse-riding-11</title><path d="M4 1a1 1 0 1 1 1 1 1 1 0 0 1-1-1zm6.88 3.5L9 3v-.5L7 5H6l1 1v1.014a.5.5 0 1 1-1 0V6.5L4 5H3a1 1 0 0 0-.8.446A1.189 1.189 0 0 0 1.247 5 1.076 1.076 0 0 0 0 5.988C0 7.3.635 7.471.635 7.471a.33.33 0 0 0 .115.023A.253.253 0 0 0 1 7.25V6a.49.49 0 0 1 .48-.5h.02A.5.5 0 0 1 2 6v2.014l-.3.6a1.609 1.609 0 0 0-.2.6v1.542a.244.244 0 0 0 .244.244.255.255 0 0 0 .256-.244V9.514a.367.367 0 0 1 .1-.3l.9-1.2V9l.467 1.816a.256.256 0 0 0 .242.184.25.25 0 0 0 .25-.25v-.016l-.242-1.61a.6.6 0 0 1 .025-.236l.058-.174L4 8h2v1l.466 1.816a.256.256 0 0 0 .243.184.25.25 0 0 0 .25-.25l-.241-1.626a.6.6 0 0 1 .025-.236L7 8a.877.877 0 0 0 .934-.661L8.5 4.5a.6.6 0 0 0 .71.454.562.562 0 0 0 .143-.07l.9.116a.721.721 0 0 0 .392.1.331.331 0 0 0 .355-.316.406.406 0 0 0-.12-.284zM6 3.5a.51.51 0 0 0-.5-.5h-1a.482.482 0 0 0-.5.5V5h2z"/></symbol><symbol viewBox="0 0 15 15" id="horse-riding-15"><title>horse-riding-15</title><path d="M6 1a1 1 0 1 1 1 1 1 1 0 0 1-1-1zm2 2.5a.484.484 0 0 0 0-.058A.472.472 0 0 0 7.5 3h-1a.484.484 0 0 0-.058 0A.472.472 0 0 0 6 3.5V7h2zm6.85 3.644L12.8 4.8l.085-.509a.478.478 0 0 0 .008-.063.25.25 0 0 0-.25-.25.346.346 0 0 0-.158.056L9 7H8l1 1v1.5a.5.5 0 0 1-1 0v-1L6 7H4a1.5 1.5 0 0 0-1.243.661A1.466 1.466 0 0 0 1.563 7H1.5A1.449 1.449 0 0 0 0 8.4v.086A3.781 3.781 0 0 0 .559 10.4a.278.278 0 0 0 .191.1.25.25 0 0 0 .25-.25V9s-.02-.924.753-1c.5-.048.747.253.747.5V11L2 13v1.75a.25.25 0 0 0 .25.25.254.254 0 0 0 .25-.234V13L4 11v1l.5 2.8a.255.255 0 0 0 .246.2.25.25 0 0 0 .254-.246L4.855 12.3 5.5 11H8v1l.508 2.813A.257.257 0 0 0 8.75 15a.25.25 0 0 0 .25-.25V12l.367-1a1.155 1.155 0 0 0 .543-.6l2.161-3.767a.863.863 0 0 0 1.023.4l1.066.818a.591.591 0 0 0 .35.135.487.487 0 0 0 .475-.4.552.552 0 0 0-.135-.442z"/></symbol><symbol viewBox="0 0 11 11" id="hospital-11"><path d="M10 4H7V1a1.08 1.08 0 0 0-1-1H5a1.08 1.08 0 0 0-1 1v3H1a1.08 1.08 0 0 0-1 1v1a1.08 1.08 0 0 0 1 1h3v3a1.08 1.08 0 0 0 1 1h1a1.08 1.08 0 0 0 1-1V7h3a1.08 1.08 0 0 0 1-1V5a1 1 0 0 0-1-1z"/></symbol><symbol viewBox="0 0 15 15" id="hospital-15"><path d="M7 1c-.6 0-1 .4-1 1v4H2c-.6 0-1 .4-1 1v1c0 .6.4 1 1 1h4v4c0 .6.4 1 1 1h1c.6 0 1-.4 1-1V9h4c.6 0 1-.4 1-1V7c0-.6-.4-1-1-1H9V2c0-.6-.4-1-1-1H7z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="ice-cream-11"><path d="M4 6a2.49 2.49 0 0 0 1.5-.5c.432.325.959.5 1.5.5l-1 4.69a.5.5 0 0 1-.92 0L4 6zm3-4h-.09a1.5 1.5 0 1 0-2.82 0H4a1.5 1.5 0 1 0 1.5 1.5A1.5 1.5 0 1 0 7 2z"/></symbol><symbol viewBox="0 0 15 15" id="ice-cream-15"><path d="M5.44 8.17a3.48 3.48 0 0 0 2-.63c.464.323 1 .53 1.56.6h.44L8 13.7a.5.5 0 0 1-.92 0L5.44 8.17zM11.44 4.67a2 2 0 1 1-4 0 2 2 0 1 1-2-2h.12a2 2 0 1 1 3.75 0h.13a2 2 0 0 1 2 2z"/></symbol><symbol viewBox="0 0 11 11" id="industry-11"><path d="M10 1v8H1V6l2.11-1.78c.32-.32.89-.31.89.14V6l2.13-1.86A.5.5 0 0 1 7 4.5V8h2V1h1z"/></symbol><symbol viewBox="0 0 15 15" id="industry-15"><path d="M14 1v12H1V8.72a.5.5 0 0 1 .17-.37l3-3.22a.5.5 0 0 1 .83.38v3l3.16-3.37a.5.5 0 0 1 .84.37V11h3V1h2z"/></symbol><symbol viewBox="0 0 11 11" id="information-11"><path d="M5.599.94c-.6 0-1.1.5-1.1 1.1s.5 1.1 1.1 1.1 1.1-.5 1.1-1.1-.5-1.1-1.1-1.1zM3 4l-.001.74S4.5 4.634 4.5 6v1.5c0 1.5-1.501 1.74-1.501 1.74L3 10h5.2l-.001-.76s-1.2 0-1.2-1.5L7 5s0-1-1-1H3z" fill="#010101"/></symbol><symbol viewBox="0 0 15 15" id="information-15"><path d="M7.5 1C6.7 1 6 1.7 6 2.5S6.7 4 7.5 4 9 3.3 9 2.5 8.3 1 7.5 1zM4 5v1s2 0 2 2v2c0 2-2 2-2 2v1h7v-1s-2 0-2-2V6c0-.5-.5-1-1-1H4z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="karaoke-11"><path d="M4.5 4.4l-2 2-1 1c-.5.4-.6 1.1-.3 1.7l.6.7c.6.4 1.3.2 1.7-.3l1-1 2-2-2-2.1zM3.1 8.5l-.6-.7 2-2 .7.7-2.1 2zM5 2l1-1h3l1 1v3L9 6H8L5 3V2z"/></symbol><symbol viewBox="0 0 15 15" id="karaoke-15"><title>karaoke</title><path d="M12.1 2.952a2.988 2.988 0 0 0-5.11 1.965l3.142 3.142A2.988 2.988 0 0 0 12.1 2.952zM4.672 8.255L2.55 10.377a1 1 0 0 0 0 1.414l.707.707a1 1 0 0 0 1.414 0l2.121-2.121 2.122-2.122-2.121-2.121zm.741 2.087l-.707-.707 2.087-2.087.707.707z"/></symbol><symbol viewBox="0 0 11 11" id="landmark-11"><title>landmark</title><path d="M9.5 9H8V5h1l1-2c-.7.1-1.3.1-2 0-.7-.3-1.4-.6-2-1v-.5c0-.3-.2-.5-.5-.5s-.5.2-.5.5V2c-.6.4-1.3.7-2 1-.7.1-1.3.1-2 0l1 2h1v4H1.5c-.3 0-.5.2-.5.5s.2.5.5.5h8c.3 0 .5-.2.5-.5S9.8 9 9.5 9zM7 9H4V5h3v4z"/></symbol><symbol viewBox="0 0 15 15" id="landmark-15"><path d="M12.5 12H12v-.5c0-.3-.2-.5-.5-.5H11V6h1l1-2c-1 .1-2 .1-3 0-.8-.6-1.4-1.2-2-2v-.5c0-.3-.2-.5-.5-.5s-.5.2-.5.5V2c-.6.8-1.2 1.4-2 2-1 .1-2 .1-3 0l1 2h1v5h-.5c-.3 0-.5.2-.5.5v.5h-.5c-.3 0-.5.2-.5.5v.5h11v-.5c0-.3-.2-.5-.5-.5zM7 11H5V6h2v5zm3 0H8V6h2v5z"/><title>landmark</title></symbol><symbol viewBox="0 0 11 11" id="landuse-11"><title>landuse-11</title><path d="M1 4.749L.995 2.057a.251.251 0 0 1 .1-.2l2.249-1.8a.251.251 0 0 1 .313-.005l2.249 1.8a.251.251 0 0 1 .094.2v2.7A.251.251 0 0 1 5.751 5h-1.5A.251.251 0 0 1 4 4.749V3H3v1.752A.251.251 0 0 1 2.746 5h-1.5A.247.247 0 0 1 1 4.749zm4.753 2.6a.248.248 0 0 0-.173.072L4 9V6.5a.5.5 0 0 0-1 0V9H2V6.5a.5.5 0 0 0-1 0v4.25a.25.25 0 0 0 .25.25h4.5a.249.249 0 0 0 .25-.248V7.6a.25.25 0 0 0-.247-.253zM11 3.253v6.5a.247.247 0 0 1-.247.247H7.247A.247.247 0 0 1 7 9.753v-6.5A.252.252 0 0 1 7.252 3H8v-.752A.248.248 0 0 1 8.248 2h1.506a.246.246 0 0 1 .246.246V3h.747a.253.253 0 0 1 .253.253zM10 8H8v1h2zm0-2H8v1h2zm0-2H8v1h2z"/></symbol><symbol viewBox="0 0 15 15" id="landuse-15"><title>landuse-15</title><path d="M8.911 3.854a.248.248 0 0 1 .089.19V7.75a.25.25 0 0 1-.25.25h-2.5A.25.25 0 0 1 6 7.75V6H5v1.75a.25.25 0 0 1-.25.25h-2.5A.25.25 0 0 1 2 7.75v-3.7a.248.248 0 0 1 .089-.19l3.254-2.728a.245.245 0 0 1 .315 0zM7.752 9.5a.248.248 0 0 0-.138.042L5 11.5H4v-2a.5.5 0 0 0-1 0v2H2v-2a.5.5 0 0 0-1 0v4.25a.25.25 0 0 0 .25.25h6.5a.25.25 0 0 0 .25-.25v-4a.248.248 0 0 0-.248-.25zM14 6.245v6.5a.253.253 0 0 1-.253.253h-3.494a.253.253 0 0 1-.253-.251V6.25a.249.249 0 0 1 .25-.25H11v-.751A.249.249 0 0 1 11.249 5h1.5a.253.253 0 0 1 .251.253V6h.755a.245.245 0 0 1 .245.245zM13 11h-2v1h2zm0-2h-2v1h2zm0-2h-2v1h2z"/></symbol><symbol viewBox="0 0 11 11" id="laundry-11"><path d="M5 0L4 2H2S1 2 1 3v7s0 1 1 1h7c1 0 1-1 1-1V1c0-1-1-1-1-1H5zm1 1h3v1H6V1zm-.5 3a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5z"/></symbol><symbol viewBox="0 0 15 15" id="laundry-15"><path d="M8 1L6 3H3S2 3 2 4v9c0 1 1 1 1 1h9s1 0 1-1V2c0-1-1-1-1-1H8zm.5 1h2a.499.499 0 1 1 0 1h-2a.499.499 0 1 1 0-1zm-1 4a3 3 0 1 1 0 6 3 3 0 0 1 0-6z"/></symbol><symbol viewBox="0 0 11 11" id="library-11"><path d="M0 1v7c3.26 0 5.49 2 5.49 2S7.76 8 11 8V1C7 1 5.49 2.725 5.49 2.725S4 1 0 1zm1 1c1.195-.031 3.053.402 4 1.348L5.5 4l.5-.652c.962-.93 2.8-1.36 4-1.348v5c-2 0-3.354.856-4.51 1.781C4.35 7.853 3 7 1 7V2zm1 1.303v.181c.823.17 2.1.687 3 1.176v-.228c-.917-.479-2.176-.972-3-1.13zm7 0c-.824.157-2.083.65-3 1.129v.228c.9-.489 2.177-1.007 3-1.176v-.181zm-7 .92v.181c.822.154 2.099.659 3 1.133v-.195c-.917-.476-2.176-.967-3-1.12zm7 0c-.824.152-2.083.643-3 1.119v.195c.901-.474 2.178-.979 3-1.133v-.181zm-7 .894V5.3c.822.155 2.098.659 3 1.133v-.196c-.918-.475-2.176-.965-3-1.119zm7 0c-.824.154-2.082.644-3 1.12v.195c.902-.474 2.178-.979 3-1.133v-.182zM2 6v.182c.82.14 2.097.629 3 1.087v-.15C4.082 6.645 2.824 6.154 2 6zm7 0c-.824.154-2.082.644-3 1.12v.15c.903-.459 2.18-.948 3-1.088V6z"/></symbol><symbol viewBox="0 0 15 15" id="library-15"><path d="M7.47 4.92S5.7 3 1 3v8c4.7 0 6.47 2 6.47 2S9.3 11 14 11V3C9.3 3 7.47 4.92 7.47 4.92zM13 10a10.84 10.84 0 0 0-5.53 1.68A10.56 10.56 0 0 0 2 10V4c3.4.26 4.73 1.6 4.75 1.61l.73.74.72-.75S9.6 4.26 13 4v6zm-5 .24l-.1-.17A14.519 14.519 0 0 1 12 8.89v.2a14.27 14.27 0 0 0-4 1.18v-.03zm0-1l-.1-.17A14.51 14.51 0 0 1 12 7.9v.2a14.29 14.29 0 0 0-4 1.19v-.05zm0-1l-.1-.17A14.491 14.491 0 0 1 12 6.9v.2a14.24 14.24 0 0 0-4 1.19v-.05zm0-1l-.1-.17A14.45 14.45 0 0 1 12 5.9v.2a14.28 14.28 0 0 0-4 1.19v-.05zm-1.1 3A13.9 13.9 0 0 0 3 9.08v-.2c1.387.203 2.736.614 4 1.22l-.1.14zm0-1A13.899 13.899 0 0 0 3 8.1v-.2a14.12 14.12 0 0 1 4 1.21l-.1.13zm0-1A13.86 13.86 0 0 0 3 7.1v-.2c1.387.199 2.735.607 4 1.21l-.1.13zm0-1A13.899 13.899 0 0 0 3 6.1v-.2a14.1 14.1 0 0 1 4 1.21l-.1.13z"/></symbol><symbol viewBox="0 0 11 11" id="lighthouse-11"><path d="M7 6l1 5H3l1-5h1.2V2h-.92a.32.32 0 0 1-.12-.6L5.38 1a.29.29 0 0 1 .24 0l1.22.4a.32.32 0 0 1-.12.6h-.91v4H7zm1-3v.5l3-.5v-.5L8 3zm0 2.5l3 .5v-.5L8 5v.5zM3 3l-3-.5V3l3 .5V3zm0 2l-3 .5V6l3-.5V5z"/></symbol><symbol viewBox="0 0 15 15" id="lighthouse-15"><path d="M4.5 6L0 7v-.5l4.5-1V6zm0-2.5L0 2.5V3l4.5 1v-.5zm6 0V4L15 3v-.5l-4.5 1zm0 2.5L15 7v-.5l-4.5-1V6zM8 7V2h2.5a.51.51 0 0 0 .2-1l-3-1a.5.5 0 0 0-.41 0l-3 1a.51.51 0 0 0 .2 1H7v5H5l-2 7h9l-2-7H8z"/></symbol><symbol viewBox="0 0 11 11" id="lodging-11"><path d="M1.5 2a.5.5 0 0 0-.5.5v6a.5.5 0 0 0 1 0V8h7v.5a.5.5 0 0 0 1 0v-1a.5.5 0 0 0-.5-.5H2V2.5a.5.5 0 0 0-.5-.5zm2 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM6 3a1 1 0 0 0-1 1v1H3a.5.5 0 0 0 0 1h7V5a2 2 0 0 0-2-2H6z"/></symbol><symbol viewBox="0 0 15 15" id="lodging-15"><path d="M.5 2.5c-.3 0-.5.2-.5.5v9.5c0 .3.2.5.5.5s.5-.2.5-.5V11h13v1.5c0 .3.2.5.5.5s.5-.2.5-.5v-2c0-.3-.2-.5-.5-.5H1V3c0-.3-.2-.5-.5-.5zm3 .5C2.7 3 2 3.7 2 4.5S2.7 6 3.5 6 5 5.3 5 4.5 4.3 3 3.5 3zM7 4C5.5 4 5.5 5.5 5.5 5.5V7h-3c-.3 0-.5.2-.5.5v1c0 .3.2.5.5.5H15V6.5C15 4 12.5 4 12.5 4H7z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="logging-11"><title>logging-11</title><path d="M9.25 1a.409.409 0 0 0-.11.01.668.668 0 0 0-.44.24L8 2h-.737A.25.25 0 0 0 7 2.236a.243.243 0 0 0 0 .025V3h-.737a.256.256 0 0 0-.19.073.248.248 0 0 0-.073.179V4h-.763a.275.275 0 0 0-.164.073.248.248 0 0 0-.073.179V5h-.751a.257.257 0 0 0-.176.075l.178.178.5.5L8.5 2H9v.5L5.25 6.25l.5.5.177.177A.249.249 0 0 0 6 6.749V6h.751a.25.25 0 0 0 .176-.073A.266.266 0 0 0 7 5.759V5h.748A.248.248 0 0 0 8 4.756V4h.751a.267.267 0 0 0 .176-.073A.258.258 0 0 0 9 3.733V3l.78-.72a.734.734 0 0 0 .21-.42l.01-.11A.755.755 0 0 0 9.25 1zM2 8l-.431-1.2a1.422 1.422 0 0 1-.07-.465V6.25a.25.25 0 0 1 .25-.25h1a.25.25 0 0 0 0-.5H1.5A.5.5 0 0 0 1 6v.415a2 2 0 0 0 .106.642L1.57 8.43a1.841 1.841 0 0 0 .1.24 1.551 1.551 0 0 0 .624.643 1.342 1.342 0 0 0 1.315 0C3.869 9.122 5 8 5 8L3.5 6.5z"/></symbol><symbol viewBox="0 0 15 15" id="logging-15"><title>logging-15</title><path d="M13.91 3.41L13.5 3l.2-.28c.02-.03.04-.05.06-.08a.969.969 0 0 0 .24-.65 1 1 0 0 0-1.62-.77c-.03.02-.06.05-.09.07L12 1.5l-.386-.386a.354.354 0 0 0-.525.475l.417.417-.5.5-.392-.392a.354.354 0 0 0-.525.475L10.5 3l-.5.5-.381-.381a.354.354 0 1 0-.528.472l.028.028L9.5 4l-.5.5-.395-.395a.354.354 0 0 0-.517.483L8.5 5l-.5.5-.365-.365a.354.354 0 0 0-.556.439C7.1 5.6 7.508 6 7.508 6L7 6.5l-.394-.392a.392.392 0 0 0-.5-.028.384.384 0 0 0-.028.5l.022.02.4.4-.5.5-.4-.4a.37.37 0 0 0-.5 0l1.148 1.144L12.09 2.41 12.5 2h.5v.5l-.41.41-5.839 5.839L7.9 9.9a.355.355 0 0 0 0-.5l-.008-.009L7.5 9l.5-.5.384.384a.354.354 0 0 0 .528-.472L8.5 8l.5-.5.38.38a.354.354 0 0 0 .528-.472l-.02-.02L9.5 7l.5-.5.377.377A.35.35 0 0 0 10.64 7a.347.347 0 0 0 .252-.6L10.5 6l.5-.5.38.38a.354.354 0 0 0 .528-.472l-.028-.028L11.5 5l.5-.5.381.381a.354.354 0 0 0 .528-.472l-.025-.025L12.5 4l.5-.5.382.382a.354.354 0 0 0 .528-.472zM4.39 7.916C3.893 7.419 3.641 7 3 7H1.5a.5.5 0 0 0-.5.5v3a2.19 2.19 0 0 0 .5 1.5l.815.811A2.251 2.251 0 0 0 5.493 13L7.5 11zM3.5 10l-1.238 1.238A1.3 1.3 0 0 1 2 10.5V8h1a.545.545 0 0 1 .335.194.455.455 0 0 1 .165.418z"/></symbol><symbol viewBox="0 0 11 11" id="marker-11"><path d="M5.5-.018c-1.787 0-3.871 1.092-3.871 3.872C1.629 5.739 4.607 9.908 5.5 11c.794-1.092 3.871-5.161 3.871-7.147 0-2.779-2.084-3.87-3.871-3.87z"/></symbol><symbol viewBox="0 0 15 15" id="marker-15"><path d="M7.5 0C5.068 0 2.23 1.486 2.23 5.27c0 2.568 4.054 8.244 5.27 9.73 1.081-1.486 5.27-7.027 5.27-9.73C12.77 1.487 9.932 0 7.5 0z"/></symbol><symbol viewBox="0 0 11 11" id="marker-stroked-11"><title>marker-stroked-11</title><path data-name="Layer 7" d="M5.486 11l-.365-.446c-.7-.858-3.544-4.739-3.544-6.638A3.726 3.726 0 0 1 5.132.026q.167-.008.333 0a3.726 3.726 0 0 1 3.888 3.557q.007.166 0 .331c0 1.6-1.806 4.268-3.38 6.415zM5.465.916a2.817 2.817 0 0 0-3 3c0 1.268 1.883 4.161 2.987 5.62.935-1.282 3.011-4.217 3.011-5.62a2.817 2.817 0 0 0-3-3z"/></symbol><symbol viewBox="0 0 15 15" id="marker-stroked-15"><title>marker-stroked-15</title><path data-name="Layer 7" d="M7.5 14.941l-.4-.495c-.973-1.189-4.9-6.556-4.9-9.16A5.066 5.066 0 0 1 7.036 0q.222-.01.445 0a5.066 5.066 0 0 1 5.286 4.836q.01.225 0 .45c0 2.213-2.669 6.111-4.678 8.851zM7.481.986a4.077 4.077 0 0 0-4.3 4.3c0 1.832 2.759 6.038 4.286 8.034 1.25-1.71 4.315-5.989 4.315-8.034a4.077 4.077 0 0 0-4.3-4.3z"/></symbol><symbol viewBox="0 0 11 11" id="mobile-phone-11"><title>mobile-phone-11</title><path d="M7 2v-.5a.5.5 0 0 0-1 0V2H4a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1zM5 9H4V8h1zm0-2H4V6h1zm2 2H6V8h1zm0-2H6V6h1zm0-2H4V3h3z"/></symbol><symbol viewBox="0 0 15 15" id="mobile-phone-15"><title>mobile-phone-15</title><path d="M10 2v-.5a.5.5 0 0 0-1 0V2H5a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1zM6 13H5v-1h1zm0-2H5v-1h1zm0-2H5V8h1zm2 4H7v-1h1zm0-2H7v-1h1zm0-2H7V8h1zm2 4H9v-1h1zm0-2H9v-1h1zm0-2H9V8h1zm0-2.5a.5.5 0 0 1-.5.5h-4a.5.5 0 0 1-.5-.5v-3a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5z"/></symbol><symbol viewBox="0 0 11 11" id="monument-11"><path d="M5.5 0L4 2v4.5h3V2L5.5 0zM3 7L2 8v3h7V8L8 7H3z"/></symbol><symbol viewBox="0 0 15 15" id="monument-15"><path d="M7.5 0L6 2.5v7h3v-7L7.5 0zM3 11.5V15h9v-3.5L10.5 10h-6L3 11.5z"/></symbol><symbol viewBox="0 0 11 11" id="mountain-11"><path d="M5.518 1.232a.556.556 0 0 0-.495.268l-4 6.66c-.222.37.045.84.477.84h8c.432 0 .7-.47.477-.84l-4-6.66a.556.556 0 0 0-.46-.268zm.002.922L8.431 7H7.76L6.416 5.773 5.519 7l-.894-1.227L3.281 7H2.61l2.91-4.846z"/></symbol><symbol viewBox="0 0 15 15" id="mountain-15"><path d="M7.5 2c-.3 0-.4.2-.6.4l-5.8 9.5c-.1.1-.1.3-.1.4 0 .5.4.7.7.7h11.6c.4 0 .7-.2.7-.7 0-.2 0-.2-.1-.4L8.2 2.4C8 2.2 7.8 2 7.5 2zm0 1.5L10.8 9H10L8.5 7.5 7.5 9l-1-1.5L5 9h-.9l3.4-5.5z"/></symbol><symbol viewBox="0 0 11 11" id="museum-11"><path d="M5.5 0L1 2v1h9V2L5.5 0zM2 4v4L1 9v1h9V9L9 8V4H2zm1.49 1a.5.5 0 0 1 .36.15L5.5 6.79l1.65-1.64A.5.5 0 0 1 8 5.5v3a.5.5 0 0 1-1 0V6.71L5.85 7.85a.5.5 0 0 1-.707.003L5.14 7.85 4 6.71V8.5a.5.5 0 0 1-1 0v-3a.5.5 0 0 1 .49-.5z"/></symbol><symbol viewBox="0 0 15 15" id="museum-15"><path d="M7.5 0L1 3.445V4h13v-.555L7.5 0zM2 5v5l-1 1.555V13h13v-1.445L13 10V5H2zm2.615 1a.625.625 0 0 1 .451.184L7.5 8.617l2.434-2.433A.625.625 0 0 1 11 6.625v4.242a.625.625 0 1 1-1.25 0V8.133L7.941 9.94a.625.625 0 0 1-.882 0L5.25 8.133v2.734a.625.625 0 1 1-1.25 0V6.625c0-.341.274-.62.615-.625z"/></symbol><symbol viewBox="0 0 11 11" id="music-11"><path d="M9.5.5a.489.489 0 0 0-.22.05L3.5 2a.5.5 0 0 0-.5.5v4.59A1.5 1.5 0 1 0 4 8.5V5.38l5-1.25v1.46A1.5 1.5 0 1 0 10 7V1a.5.5 0 0 0-.5-.5zM4 4.38v-1.5l5-1.25v1.5L4 4.38z"/></symbol><symbol viewBox="0 0 15 15" id="music-15"><path d="M13.5 1a.49.49 0 0 0-.23.06L4.5 3.5A.5.5 0 0 0 4 4v6.28A2 2 0 0 0 3 10a2 2 0 1 0 2 2V7.36l8-2.22v3.64a2 2 0 0 0-1-.28 2 2 0 1 0 2 2v-9a.5.5 0 0 0-.5-.5zM13 4.14L5 6.36v-2l8-2.22v2z"/></symbol><symbol viewBox="0 0 11 11" id="natural-11"><title>natural-11</title><path d="M4.579 9.579L3 8h1.4a.25.25 0 0 0 .25-.25.246.246 0 0 0-.079-.179L3 6h.736a.25.25 0 0 0 .25-.25.246.246 0 0 0-.078-.179l-1.2-1.253a.253.253 0 0 0-.4-.015c-.02.023-1.21 1.266-1.21 1.266a.245.245 0 0 0-.082.18.25.25 0 0 0 .25.25H2L.425 7.575A.249.249 0 0 0 .6 8H2L.434 9.566a.244.244 0 0 0-.082.18A.25.25 0 0 0 .6 10H2v1h1v-1h1.4a.247.247 0 0 0 .179-.421zm6.242-.938l-2.1-4.2a.248.248 0 0 0-.443 0l-2.1 4.2A.248.248 0 0 0 6.4 9h4.2a.248.248 0 0 0 .221-.359zM7.5 7l1-2 1 2zm.279-5.921a.266.266 0 0 1-.049.148A3.513 3.513 0 0 0 7 3a2.141 2.141 0 0 1-1.291 1.911.475.475 0 0 1-.419 0A2.141 2.141 0 0 1 4 3a3.5 3.5 0 0 0-.726-1.769.271.271 0 0 1-.046-.148.25.25 0 0 1 .25-.25.27.27 0 0 1 .067.009A2.939 2.939 0 0 1 5 2L5.25.224A.25.25 0 0 1 5.744.2L6 2A2.957 2.957 0 0 1 7.453.841a.272.272 0 0 1 .076-.012.25.25 0 0 1 .25.25z"/></symbol><symbol viewBox="0 0 15 15" id="natural-15"><title>natural-15</title><path d="M8.753 6.278a.5.5 0 0 1-.51 0A4.109 4.109 0 0 1 6.5 3.5a2.779 2.779 0 0 0-.59-1.506l-.019-.027a.257.257 0 0 1-.056-.144.237.237 0 0 1 .25-.25.264.264 0 0 1 .057.011A3.523 3.523 0 0 1 7.5 2.5L8.28.94a.246.246 0 0 1 .44 0L9.5 2.5a3.4 3.4 0 0 1 1.339-.907.283.283 0 0 1 .1-.021c.175.009.212.119.221.249a.35.35 0 0 1-.043.141A5.2 5.2 0 0 0 10.5 3.5a4.113 4.113 0 0 1-1.747 2.778zM5 8h1.289a.25.25 0 0 0 .25-.25.241.241 0 0 0-.061-.15L4.7 5.235a.255.255 0 0 0-.391 0L2.518 7.589a.274.274 0 0 0-.062.161.25.25 0 0 0 .25.25H4l-2.665 2.6a.273.273 0 0 0-.058.152.25.25 0 0 0 .252.248H3l-1.565 1.565a.255.255 0 0 0 .18.435H4v1h1v-1h2.385a.255.255 0 0 0 .18-.435L6 11h1.471a.25.25 0 0 0 .25-.25.233.233 0 0 0-.058-.149zm9.345 3.748a.252.252 0 0 1-.252.252H8.908a.252.252 0 0 1-.226-.365l2.588-5.184a.252.252 0 0 1 .451 0l2.6 5.184a.251.251 0 0 1 .024.113zM12.75 10L11.5 7.5 10.25 10z"/></symbol><symbol viewBox="0 0 11 11" id="park-11"><path d="M11 3.75A1.75 1.75 0 0 0 9.25 2a1.73 1.73 0 0 0-.8.2A1.24 1.24 0 0 0 7.21 1a1.19 1.19 0 0 0-.21.05A1.23 1.23 0 0 0 5.75 0a1.25 1.25 0 0 0-1.13.73A1.21 1.21 0 0 0 4 .52a1.23 1.23 0 0 0-1 .55A1.491 1.491 0 0 0 2.51 1a1.51 1.51 0 0 0-1.4 2.08A1.49 1.49 0 0 0 1.08 6a1.49 1.49 0 0 0 2.55.52h.12c.321 0 .63-.126.86-.35V10L3 11h5l-1.6-1V9a8.42 8.42 0 0 1 2.38-2c.26-.05.5-.167.7-.34A1.49 1.49 0 0 0 10 5.5a1.46 1.46 0 0 0 0-.17c.61-.29 1-.904 1-1.58zm-4.64 4.5V6h.18a1.52 1.52 0 0 0 .53-.1 1.5 1.5 0 0 0 .89 1 8.821 8.821 0 0 0-1.6 1.35z"/></symbol><symbol viewBox="0 0 15 15" id="park-15"><path d="M14 5.75a1.75 1.75 0 0 0-1-1.61A1.24 1.24 0 0 0 11.75 3a1.197 1.197 0 0 0-.29.06 1.2 1.2 0 0 0-2-.78 1.25 1.25 0 1 0-2.5 0s.04.02.04.05a1.22 1.22 0 0 0-2 .74A1.491 1.491 0 0 0 4.51 3a1.5 1.5 0 0 0-1.4 2.07 1.49 1.49 0 0 0 0 2.87A1.49 1.49 0 0 0 6 7.71c.183.16.41.26.65.29v5L5 14h5l-1.6-1v-2a6.8 6.8 0 0 1 2.77-2A1.49 1.49 0 0 0 13 7.52a1.472 1.472 0 0 0 0-.16 1.75 1.75 0 0 0 1-1.61zm-5.6 4.51V6.82c.27.48.778.779 1.33.78h.28c.016.44.224.849.57 1.12a7.25 7.25 0 0 0-2.18 1.54z"/></symbol><symbol viewBox="0 0 11 11" id="park-alt1-11"><title>park-alt1-11</title><path d="M9.571 8.563L7.425 6.424a.255.255 0 0 1-.069-.174A.25.25 0 0 1 7.6 6h.8a.25.25 0 0 0 .25-.25.246.246 0 0 0-.068-.165l-.008-.008L6.4 3.4a.27.27 0 0 1-.051-.149A.25.25 0 0 1 6.6 3h.88a.257.257 0 0 0 .25-.258.234.234 0 0 0-.05-.142L5.694.224a.223.223 0 0 0-.351-.038C5.327.2 3.352 2.578 3.352 2.578a.246.246 0 0 0-.068.164.257.257 0 0 0 .25.258H4.4a.25.25 0 0 1 .25.25.262.262 0 0 1-.066.17L2.431 5.571a.247.247 0 0 0-.077.178A.251.251 0 0 0 2.6 6h.789a.249.249 0 0 1 .25.249.3.3 0 0 1-.063.17L1.43 8.563A.253.253 0 0 0 1.6 9H5v1h1V9h3.4a.255.255 0 0 0 .249-.255.248.248 0 0 0-.078-.182z"/></symbol><symbol viewBox="0 0 15 15" id="park-alt1-15"><title>park-alt1-15</title><path d="M9.428 10.429a.269.269 0 0 1-.074-.18A.25.25 0 0 1 9.6 10h1.447a.25.25 0 0 0 .25-.25.258.258 0 0 0-.079-.179L9.07 7.419a.3.3 0 0 1-.063-.17.249.249 0 0 1 .25-.249H10.4a.251.251 0 0 0 .25-.251.247.247 0 0 0-.077-.178L8.432 4.434l-.014-.014a.262.262 0 0 1-.066-.17A.25.25 0 0 1 8.6 4h.866a.25.25 0 0 0 .25-.25.246.246 0 0 0-.068-.164h.006L7.7 1.238a.253.253 0 0 0-.042-.044.249.249 0 0 0-.158-.055.249.249 0 0 0-.158.055.253.253 0 0 0-.042.044L5.352 3.586a.246.246 0 0 0-.068.164.25.25 0 0 0 .25.25H6.4a.241.241 0 0 1 .184.42l-.014.014-2.139 2.137a.247.247 0 0 0-.077.178A.251.251 0 0 0 4.6 7h1.145a.249.249 0 0 1 .25.249.3.3 0 0 1-.063.17l-2.15 2.152a.258.258 0 0 0-.082.179.25.25 0 0 0 .25.25H5.4a.25.25 0 0 1 .248.249.269.269 0 0 1-.074.18l-2.14 2.132-.009.009a.248.248 0 0 0 0 .351.256.256 0 0 0 .18.079H7v1l1-.008V13h3.391a.263.263 0 0 0 .26-.254.248.248 0 0 0-.071-.177z"/></symbol><symbol viewBox="0 0 11 11" id="parking-11"><path d="M8.1 6.1a3.53 3.53 0 0 1-2.29.66H3.9V10H2V1h3.93a3.2 3.2 0 0 1 2.16.69 2.69 2.69 0 0 1 .81 2.16 2.76 2.76 0 0 1-.8 2.25zM6.64 2.86a1.56 1.56 0 0 0-1-.3H3.9v2.65h1.72a1.48 1.48 0 0 0 1-.32 1.31 1.31 0 0 0 .36-1 1.23 1.23 0 0 0-.34-1.03z"/></symbol><symbol viewBox="0 0 15 15" id="parking-15"><path d="M11.85 8.37a5.1 5.1 0 0 1-3.31 1H5.79V14H3V1h5.72a4.63 4.63 0 0 1 3.13 1A3.88 3.88 0 0 1 13 5.12a4 4 0 0 1-1.15 3.25zM9.75 3.7a2.25 2.25 0 0 0-1.47-.43H5.79v3.82h2.49a2.13 2.13 0 0 0 1.47-.47c.38-.395.57-.935.52-1.48a1.77 1.77 0 0 0-.52-1.44z"/></symbol><symbol viewBox="0 0 11 11" id="parking-garage-11"><path d="M7.25 7.44a2.35 2.35 0 0 1-1.53.44H4.45V10H3.19V4H5.8a2.13 2.13 0 0 1 1.44.46c.385.372.583.897.54 1.43a1.84 1.84 0 0 1-.53 1.55zm-1-2.16a1 1 0 0 0-.68-.2H4.45v1.76H5.6a1 1 0 0 0 .68-.22.87.87 0 0 0 .24-.68.82.82 0 0 0-.24-.66h-.03zm4.16-2a.5.5 0 0 0-.19-.68L5.72.1a.5.5 0 0 0-.49 0L.73 2.6a.5.5 0 0 0 .49.87l4.28-2.4 4.26 2.37a.5.5 0 0 0 .679-.198l.001-.002-.03.04z"/></symbol><symbol viewBox="0 0 15 15" id="parking-garage-15"><path d="M10.5 10.14a3.53 3.53 0 0 1-2.29.66h-1.9V14h-1.9V5h3.92a3.2 3.2 0 0 1 2.16.69 2.69 2.69 0 0 1 .81 2.15 2.76 2.76 0 0 1-.8 2.3zM9 6.9a1.56 1.56 0 0 0-1-.3H6.31v2.65H8a1.48 1.48 0 0 0 1-.32 1.31 1.31 0 0 0 .36-1A1.23 1.23 0 0 0 9 6.9zm5.41-2.69a.5.5 0 0 0-.24-.66L7.5.45.79 3.55a.501.501 0 1 0 .42.91L7.5 1.55l6.29 2.9a.5.5 0 0 0 .66-.24h-.04z" fill="#231f20"/></symbol><symbol viewBox="0 0 11 11" id="pharmacy-11"><path d="M6 4l2-2a.732.732 0 0 1 0-.21.75.75 0 1 1 .75.75h-.11L7.5 4H6zm3.48 1.83L8.65 7.5l.83 1.67V10h-8v-.83l.84-1.67-.84-1.67V5h8v.83zM7.5 7H6V5.5H5V7H3.5v1H5v1.5h1V8h1.5V7z"/></symbol><symbol viewBox="0 0 15 15" id="pharmacy-15"><path d="M9.5 4l1.07-1.54c.06.005.12.005.18 0A1.25 1.25 0 1 0 9.5 1.25v.1L7 4h2.5zM12 6V5H3v1l1.5 3.5L3 13v1h9v-1l-1-3.5L12 6zm-2 4H8v2H7v-2H5V9h2V7h1v2h2v1z"/></symbol><symbol viewBox="0 0 11 11" id="picnic-site-11"><path d="M2.75 2c-.416 0-.75.334-.75.75s.334.75.75.75H4L3.54 5H1.75c-.415 0-.75.335-.75.75s.335.75.75.75h1.326L2 10h1l1.076-3.5h2.848L8 10h1L7.924 6.5H9.25c.415 0 .75-.335.75-.75S9.665 5 9.25 5H7.46L7 3.5h1.25c.415 0 .75-.334.75-.75S8.665 2 8.25 2h-5.5zM5 3.5h1L6.46 5H4.54L5 3.5z"/></symbol><symbol viewBox="0 0 15 15" id="picnic-site-15"><path d="M4 3c-.554 0-1 .446-1 1s.446 1 1 1h1.297l-.645 2H2.5c-.554 0-1 .446-1 1s.446 1 1 1h1.51l-.969 3.01a.75.75 0 1 0 1.426.465l.002-.004L5.586 9h3.828l1.117 3.47a.75.75 0 1 0 1.428-.46L10.99 9h1.51c.554 0 1-.446 1-1s-.446-1-1-1h-2.152l-.645-2H11c.554 0 1-.446 1-1s-.446-1-1-1H4zm2.873 2h1.254l.644 2H6.23l.644-2z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="pitch-11"><path d="M4 2a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm6.5 6H9L8 5 7 3.25 8 3l2.3 1a.531.531 0 0 0 .36-1L8 2H6L4 3 3 4H1.47a.5.5 0 0 0 0 1H4l1-1 1 2-2 1v3.5a.5.5 0 0 0 1 0V7.39L7 7l1 2h2.5a.5.5 0 0 0 0-1z"/></symbol><symbol viewBox="0 0 15 15" id="pitch-15"><path d="M5 3a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm7.5 7H10L9 7 8 5.25 9 5l2.3 1a.539.539 0 0 0 .4-1L9 4H7L5 5 4 6H2.5a.5.5 0 0 0 0 1H5l1-1 1 2-2 2v3.5a.5.5 0 0 0 1 0v-3.11L8 9l1 2h3.5a.5.5 0 0 0 0-1z"/></symbol><symbol viewBox="0 0 11 11" id="place-of-worship-11"><path d="M5.52 0L4 2v1h3V2L5.52 0zM4 4L2 5v5h7V5L7 4H4zm7 1.5V10h-1V5.5a.5.5 0 0 1 1 0zm-10 0V10H0V5.5a.5.5 0 0 1 1 0z"/></symbol><symbol viewBox="0 0 15 15" id="place-of-worship-15"><path d="M7.5 0l-2 2v2h4V2l-2-2zm-2 4.5L4 6h7L9.5 4.5h-4zM2 6.5a1 1 0 0 0-1 1V13h2V7.5a1 1 0 0 0-1-1zm2 0V13h7V6.5H4zm9 0a1 1 0 0 0-1 1V13h2V7.5a1 1 0 0 0-1-1z"/></symbol><symbol viewBox="0 0 11 11" id="playground-11"><path d="M1 .79a1 1 0 1 1-.005.02L1 .79zm9.85 7.37l-2-2A.49.49 0 0 0 8.5 6h-.13l-1.87.55V4a.49.49 0 0 0 .5-.41.5.5 0 0 0-.38-.59H6.5V0h-.22v3l-4.46.55A1 1 0 0 0 1 4.3a1 1 0 0 0 0 .43l.81 3.13a1 1 0 0 0 .71.68c.151.036.309.036.46 0H3l3.29-.89v1.62l-3 .74a.524.524 0 0 0 .31 1 .946.946 0 0 0 .17 0l4-1a.522.522 0 0 0-.3-1L7.27 9l-.77.22V7.58l1.83-.51 1.81 1.78a.5.5 0 1 0 .72-.69h-.01zM6.28 6.61l-2.07.46-.71-2.74L6.28 4v2.61z"/></symbol><symbol viewBox="0 0 15 15" id="playground-15"><path d="M2 1.15a1.5 1.5 0 1 1 2.903.757A1.5 1.5 0 0 1 2 1.15zm11 11.17a1 1 0 0 1-.796 1.17H12.2a1 1 0 0 1-1.07-.49L9.45 9.63 8 9.92l-.22.08h-.06v2.15l.62-.15h.14a.52.52 0 0 1 .19 1l-5 1a.51.51 0 0 1-.17 0 .52.52 0 0 1-.2-1l4.15-.83V10l-3.22.58a1 1 0 0 1-1.21-.68H3L2 5.83a1 1 0 0 1 0-.43 1 1 0 0 1 .8-.75l4.7-.52V0h.22v4.1h.06L8 4.08 8.4 4h.21a.5.5 0 0 1 .37.6.49.49 0 0 1-.49.4L8 5.08h-.28v2.86h.06L8 7.88l1.81-.36a1 1 0 0 1 1 .6l2 3.94a.999.999 0 0 1 .19.26zM7.5 5.13L5 5.4l.74 2.94L7.5 8V5.13z"/></symbol><symbol viewBox="0 0 11 11" id="police-11"><path d="M4.5.5l.5 1h3l.5-1h-4zM5 2v1a1.5 1.5 0 0 0 3 0V2H5zM1.75 3C1 3 1 3.75 1 3.75v3a.75.75 0 0 0 .975.715L4 6.826V10l4-5H5s-.195 0-.424.072L2.5 5.727V3.75S2.5 3 1.75 3zm7.021 2.389L5 10h4V6a.98.98 0 0 0-.229-.611z"/></symbol><symbol viewBox="0 0 15 15" id="police-15"><path d="M5.5 1L6 2h5l.5-1h-6zM6 2.5v1.25S6 6.5 8.5 6.5 11 3.75 11 3.75V2.5H6zM1.984 3.986A1 1 0 0 0 1 5v4a1 1 0 0 0 1.217.977L5 9.357V14l5.879-6.93c-.14-.04-.284-.07-.438-.07H6.5L3 7.754V5a1 1 0 0 0-1.016-1.014zm9.764 3.725L6.412 14H12V8.559c0-.314-.094-.604-.252-.848z"/></symbol><symbol viewBox="0 0 11 11" id="post-11"><path d="M10 5.5V9a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V5.5a.5.5 0 0 1 .5-.5.49.49 0 0 1 .21 0L5.5 7l3.8-2a.488.488 0 0 1 .2 0 .5.5 0 0 1 .5.5zM1.25 2.92l.08.08L5.5 5l4.19-2h.06a.49.49 0 0 0 .25-.5.5.5 0 0 0-.5-.5h-8a.5.5 0 0 0-.5.5.49.49 0 0 0 .25.42z"/></symbol><symbol viewBox="0 0 15 15" id="post-15"><path d="M14 6.5V12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V6.5a.5.5 0 0 1 .5-.5.49.49 0 0 1 .21 0l5.79 4 5.8-4a.488.488 0 0 1 .2 0 .5.5 0 0 1 .5.5zM1.25 3.92l.08.08L7.5 8l6.19-4h.06a.49.49 0 0 0 .25-.5.5.5 0 0 0-.5-.5h-12a.5.5 0 0 0-.5.5.49.49 0 0 0 .25.42z"/></symbol><symbol viewBox="0 0 11 11" id="prison-11"><path d="M2 1v9h7V1H2zm1 1h1v3H3V2zm2 0h1v3H5V2zm2 0h1v2H7V2zm.5 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zM3 6h1v3H3V6zm2 0h1v3H5V6zm2 1h1v2H7V7z"/></symbol><symbol viewBox="0 0 15 15" id="prison-15"><path d="M3.5 1v13H12V1H3.5zm6 1H11v3.5H9.5V2zm-5 .055H6V7H4.5V2.055zm2.5 0h1.5V7H7V2.055zM10.25 6.5a.75.75 0 0 1 0 1.5.75.75 0 0 1 0-1.5zM7 8h1.473l.027 5H7.027L7 8zm-2.5.166H6V13H4.5V8.166zM9.5 9H11v4H9.5V9z"/></symbol><symbol viewBox="0 0 11 11" id="rail-11"><path d="M9 10.5a.5.5 0 0 1-.5.5.49.49 0 0 1-.43-.27L7.69 10H3.31l-.37.74A.5.5 0 0 1 2 10.5a.49.49 0 0 1 .07-.24l1-2A.49.49 0 0 1 3.5 8a.5.5 0 0 1 .5.7l-.19.3h3.38L7 8.7a.5.5 0 0 1 .9-.43l1 2a.49.49 0 0 1 .1.23zM8 0H3a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1zM3.5 6a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zm0-2a.5.5 0 0 1-.5-.5v-2a.5.5 0 0 1 .5-.5h1.79v3H3.5zm4 2a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zM8 3.5a.5.5 0 0 1-.5.5H5.69V1H7.5a.5.5 0 0 1 .5.5v2z"/></symbol><symbol viewBox="0 0 15 15" id="rail-15"><path d="M3 1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3zm2.75.5h3.51a.25.25 0 1 1 0 .5H5.75a.25.25 0 1 1 0-.5zM3.5 3H7v4H3.5a.5.5 0 0 1-.5-.5v-3a.5.5 0 0 1 .5-.5zM8 3h3.5a.5.5 0 0 1 .5.5v3a.5.5 0 0 1-.5.5H8V3zM5 8a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm5 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm.445 3.994a.504.504 0 0 0-.425.676l.17.33H4.81l.13-.27a.5.5 0 0 0-.91-.41l-1 2a.487.487 0 0 0-.03.18.5.5 0 0 0 .5.5.49.49 0 0 0 .43-.26v-.05H4l.31-.69h6.38l.31.69v.05a.49.49 0 0 0 .43.26.5.5 0 0 0 .5-.5.49.49 0 0 0 0-.24l-1-2a.5.5 0 0 0-.485-.266z"/></symbol><symbol viewBox="0 0 11 11" id="rail-light-11"><path d="M4 0c-.5 0-.5.5-.5.5s0 .5.5.5h1v.97L4 2S3 2 3 3v3c0 2 2 2 2 2h1s2 0 2-2V3c0-1-1-1-1-1H6V1h1c.5 0 .5-.5.5-.5S7.5 0 7 0H4zm1.5 3l1.5.5V5H4V3.5L5.5 3zm0 3a.499.499 0 1 1 0 1 .499.499 0 1 1 0-1zM2.834 8.5L2 11h1.5l.334-1h3.332l.334 1H9l-.834-2.5H6.668l.166.5H4.166l.166-.5H2.834z"/></symbol><symbol viewBox="0 0 15 15" id="rail-light-15"><path d="M5.5 0C5 0 5 .5 5 .5v1a.499.499 0 1 0 1 0V1h1v2H6S4 3 4 5v3c0 3 3 3 3 3h1s3 0 3-3V5c0-2-2-2-2-2H8V1h1v.5a.499.499 0 1 0 1 0v-1c0-.5-.5-.5-.5-.5h-4zm2 4l2.045.773L10 6.5c.132.5-.5.5-.5.5h-4s-.632 0-.5-.5l.455-1.727L7.5 4zm0 4a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-3.375 4L3 15h1.5l.375-1h5.25l.375 1H12l-1.125-3h-1.5l.375 1h-4.5l.375-1h-1.5z"/></symbol><symbol viewBox="0 0 11 11" id="rail-metro-11"><path d="M3.5 0C3 0 3 .5 3 .5L2 5v1c0 1.024 1 1 1 1h5s1 0 1-1V5L8 .5S8 0 7.5 0h-4zM4 1h3l.5 3h-4L4 1zm-.5 4a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm1.75 0h.5a.25.25 0 1 1 0 .5h-.5a.25.25 0 1 1 0-.5zM7.5 5a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zM3 8l-1 3h1.5l.334-1h3.332l.334 1H9L8 8H6.5l.334 1H4.166L4.5 8H3z"/></symbol><symbol viewBox="0 0 15 15" id="rail-metro-15"><path d="M5.5 0s-.75 0-1 1L3 6.5V10c0 1 1 1 1 1h7s1 0 1-1V6.5L10.5 1c-.273-1-1-1-1-1h-4zm1 1.5h2s.536 0 .75 1L10 6c.215 1.002-1 1-1 1H6s-1.215.002-1-1l.75-3.5c.214-1 .75-1 .75-1zM5 8a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm1.75 0h1.5a.25.25 0 1 1 0 .5h-1.5a.25.25 0 1 1 0-.5zM10 8a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm-5.875 4L3 15h1.5l.375-1h5.25l.375 1H12l-1.125-3h-1.5l.375 1h-4.5l.375-1h-1.5z"/></symbol><symbol viewBox="0 0 11 11" id="ranger-station-11"><path d="M6.334 0L5 1v3L1 6.055V10h3V7h3v3h3V6.055L6 4V2.25L6.334 2l1.332 1L9 2V0L7.666 1 6.334 0z"/></symbol><symbol viewBox="0 0 15 15" id="ranger-station-15"><path d="M9 .5l-2 1v3.773L2 8v6h4v-4h3v4h4V8L8 5.273V4l1-.5 2 1 2-1v-3l-2 1-2-1z"/></symbol><symbol viewBox="0 0 11 11" id="recycling-11"><title>recycling-11</title><path d="M9.5 8.5c-.547.519-1.66.435-2.5.5v1L4.5 8.5 7 7v1h1c.634 0 .83 0 1.054-.127a.81.81 0 0 0 .413-.958c-.085-.358.4-.425.485-.115A1.724 1.724 0 0 1 9.5 8.5zM1.948 5.092l-.001.002c-.4.743-1.065 1.637-.921 2.377a1.724 1.724 0 0 0 1.192 1.293c.372.12.466-.395.161-.472a.81.81 0 0 1-.586-.862c.012-.258.122-.42.461-.956l.537-.843V5.63l.844.537.078-2.914-2.608 1.302.843.537zm2.936-3.178a.81.81 0 0 1 1.025-.189c.231.115.336.281.689.807.14.208.32.479.555.832l-.831.555 2.636 1.246-.141-2.912-.833.556c-.52-.662-1.067-1.63-1.796-1.795a1.724 1.724 0 0 0-1.671.562c-.264.338.199.546.367.338z"/></symbol><symbol viewBox="0 0 15 15" id="recycling-15"><title>recycling-15</title><path d="M2.456 8.613c-.338.598-.955 1.69.137 2.418.343.227.728.384 1.131.462.307.045.323.518-.038.507-.385-.02-2.26-.193-2.561-1.6-.156-.82.02-1.557.504-2.355l.697-1.233-1.306-.743L4.5 4v4l-1.306-.694-.738 1.307zM6.7 2.034c1.155-.628 1.823.43 2.191 1.007l.806 1.263-1.266.808L12 6.986l-.197-4.026-1.264.807-.76-1.189c-.522-.746-.904-1.297-1.835-1.545C6.307.72 5.301 2.619 5.311 2.607c-.164.287.216.54.451.21.258-.32.577-.586.938-.783zm6.594 6.187c-.088-.19-.549-.141-.419.267.131.39.184.8.157 1.21C12.939 11.01 11.684 11 11 11H9.5V9.5l-3.5 2 3.488 2.025L9.493 12H11c.89.015 1.6-.176 2.2-.713 1.2-1.061.094-3.066.094-3.066z"/></symbol><symbol viewBox="0 0 11 11" id="religious-christian-11"><path d="M4.5 0v3H2v2h2.5v6h2V5H9V3H6.5V0h-2z"/></symbol><symbol viewBox="0 0 15 15" id="religious-christian-15"><path d="M6 .955V4H3v3h3v8h3V7h3V4H9V1c0-1-.978-1-.978-1H6.99S6 0 6 .955z"/></symbol><symbol viewBox="0 0 11 11" id="religious-jewish-11"><path d="M11 8H7.1l-1.6 3-1.6-3H0l1.95-2.5L0 3h3.9l1.6-3 1.6 3H11L9.05 5.5 11 8z"/></symbol><symbol viewBox="0 0 15 15" id="religious-jewish-15"><path d="M15 12H9.78L7.5 15l-2.26-3H0l2.7-4L0 4h5.3l2.2-4 2.34 4H15l-2.56 4L15 12z"/></symbol><symbol viewBox="0 0 11 11" id="religious-muslim-11"><path d="M4.9 0C2.2 0 0 2.2 0 4.9s2.2 4.9 4.9 4.9c.9 0 1.7-.2 2.4-.6h-.6c-2.4 0-4.3-1.9-4.3-4.3S4.3.6 6.7.6h.6C6.5.2 5.8 0 4.9 0zm3.6 2l-.816 1.7L6 4l1 1.5L6.5 7l2-1 2 1-.5-1.5L11 4l-1.5-.3-1-1.7z"/></symbol><symbol viewBox="0 0 15 15" id="religious-muslim-15"><path d="M6.794 0C3 0 0 3 0 6.794s3 6.794 6.794 6.794c2.118 0 4.412-.706 5.647-2.294-.794.53-2.294 1.147-3.441 1.147-2.912 0-5.118-2.912-5.118-5.823S6.088 1.148 9 1.148c1.059 0 2.559.617 3.441 1.146C11.206.706 8.911 0 6.794 0zM11 3l-1 2.5H7L9.5 7l-1 3L11 8.5l2.5 1.5-1-3L15 5.5h-3L11 3z"/></symbol><symbol viewBox="0 0 11 11" id="residential-community-11"><title>buildings</title><path d="M8.8 8c.7-.1 1.2-.8 1.2-1.5C10 5.7 9.3 5 8.5 5S7 5.7 7 6.5c0 .7.5 1.4 1.2 1.5v1.5H6V1H2v8.5H1v.5h9v-.5H8.8V8zM3 2h2v1H3V2zm0 2h2v1H3V4zm0 2h2v1H3V6z"/></symbol><symbol viewBox="0 0 15 15" id="residential-community-15"><title>buildings</title><path d="M11.8 13.5V11c.7-.1 1.2-.7 1.2-1.5S12.3 8 11.5 8 10 8.7 10 9.5c0 .7.5 1.4 1.2 1.5v2.5H7V2H2v11.5H1v.5h13v-.5h-2.2zM6 11H3v-1h3v1zm0-2H3V8h3v1zm0-2H3V6h3v1zm0-2H3V4h3v1z"/></symbol><symbol viewBox="0 0 11 11" id="restaurant-11"><path d="M2.25 0l-.5 3.5c-.07.495 1.24 1.4 1.25 2V11h1V5.5c0-.6 1.32-1.505 1.25-2L4.75 0h-.5l.25 2.75-.75.5V0h-.5v3.25l-.75-.5L2.75 0h-.5zM9 0C7.5 0 7.006 1.724 7 3v3h1v5h1V0z"/></symbol><symbol viewBox="0 0 15 15" id="restaurant-15"><path d="M3.5 0l-1 5.5c-.146.805 1.782 1.181 1.75 2L4 14c-.038 1 1 1 1 1s1.038 0 1-1l-.25-6.5c-.031-.818 1.733-1.18 1.75-2L6.5 0H6l.25 4-.75.5L5.25 0h-.5L4.5 4.5 3.75 4 4 0h-.5zM12 0c-.736 0-1.964.655-2.455 1.637C9.135 2.373 9 4.018 9 5v2.5c0 .818 1.09 1 1.5 1L10 14c-.09.996 1 1 1 1s1 0 1-1V0z"/></symbol><symbol viewBox="0 0 11 11" id="roadblock-11"><path d="M5.5 0a5.5 5.5 0 1 0 0 11 5.5 5.5 0 0 0 0-11zM2 4.5h7v2H2v-2z"/></symbol><symbol viewBox="0 0 15 15" id="roadblock-15"><path d="M7.5 0a7.5 7.5 0 1 0 0 15 7.5 7.5 0 0 0 0-15zM3 6h9v3H3V6z"/></symbol><symbol viewBox="0 0 11 11" id="rocket-11"><path d="M9 1C7.488 1 5.408 2.146 4.049 4H3c-.801 0-1.184.367-1.5 1L1 6h2l1 1 1 1v2l1-.5c.633-.316 1-.699 1-1.5V6.951C8.854 5.592 10 3.512 10 2V1H9zM7.5 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zM2.75 7.25l-.25.25C2 8 2 9 2 9s.945.055 1.5-.5l.25-.25-1-1z"/></symbol><symbol viewBox="0 0 15 15" id="rocket-15"><path d="M12.555 1C10.41 1 7.534 2.471 5.602 5H4c-1.157 0-1.82.864-2.277 1.777L1.11 8H4l1.5 1.5L7 11V13.889l1.223-.612C9.136 12.821 10 12.157 10 11V9.398c2.529-1.932 4-4.809 4-6.953V1h-1.445zM10 4a1 1 0 1 1 0 2 1 1 0 1 1 0-2zm-6.5 6l-.5.5c-.722.722-1 2.5-1 2.5s1.698-.198 2.5-1l.5-.5L3.5 10z"/></symbol><symbol viewBox="0 0 11 11" id="school-11"><path d="M8.5 9V8H10V6H7.5V5H10V3H8.5V2H10V1H6v9h4V9H8.5zM4 7H1V1h3v6zm0 1l-1.5 2L1 8h3z"/></symbol><symbol viewBox="0 0 15 15" id="school-15"><path d="M11 13v-1h2v-1H9.5v-1H13V9h-2V8h2V7h-2V6h2V5H9.5V4H13V3h-2V2h2V1H8v13h5v-1h-2zm-5-2H2V1h4v10zm0 1l-2 2-2-2h4z"/></symbol><symbol viewBox="0 0 11 11" id="scooter-11"><title>scooter-11</title><path d="M1 9h2a.979.979 0 0 1-1 1 .979.979 0 0 1-1-1zm8.753-5H9V3h.351a.282.282 0 0 0 .223-.148l.268-.536a.333.333 0 0 0 .009-.066A.25.25 0 0 0 9.6 2H9v-.5H6.25a.25.25 0 0 0 0 .5H8v2.5L5 7H4V5.5a.5.5 0 0 0-.5-.5H3V4h1.75A.25.25 0 0 0 5 3.75a.245.245 0 0 0-.223-.239V3.5L1.25 3a.25.25 0 0 0-.25.25v.5a.25.25 0 0 0 .25.25H2v1h-.5a.5.5 0 0 0-.5.5V8h5.172a1 1 0 0 0 .709-.294l.419-.414A1 1 0 0 1 8 7h1.752A.248.248 0 0 0 10 6.752v-2.5A.247.247 0 0 0 9.753 4zM9 8a1 1 0 1 0 1 1 1 1 0 0 0-1-1z"/></symbol><symbol viewBox="0 0 15 15" id="scooter-15"><title>scooter-15</title><path d="M4.908 12a1.5 1.5 0 1 1-2.816 0zm8.65-6H13V3h.351a.282.282 0 0 0 .223-.148l.268-.536a.334.334 0 0 0 .009-.066A.25.25 0 0 0 13.6 2H13v-.3a.215.215 0 0 0-.2-.2H9.25a.25.25 0 0 0 0 .5H12v4.6L7.6 10H6V7.5a.5.5 0 0 0-.5-.5H5V5h1.75a.25.25 0 0 0 0-.5l-4.484-.466c-.006 0-.01-.007-.016-.007a.25.25 0 0 0-.25.25v.473a.25.25 0 0 0 .25.25H3v2h-.5A1.538 1.538 0 0 0 1 8.5v2a.472.472 0 0 0 .442.5H7.5l2.5-1h3.5a.472.472 0 0 0 .5-.442V6.5a.472.472 0 0 0-.442-.5zM12.5 11a1.5 1.5 0 1 0 1.5 1.5 1.538 1.538 0 0 0-1.5-1.5z"/></symbol><symbol viewBox="0 0 11 11" id="shelter-11"><path d="M4 5v3h6v2H2V5.67L1 6V4l9-3v2L4 5z"/></symbol><symbol viewBox="0 0 15 15" id="shelter-15"><path d="M4 7v5h9.5v2H2V7.78l-1 .38V6l13-5v2.14L4 7z"/></symbol><symbol viewBox="0 0 11 11" id="shop-11"><path d="M9.6 4H8.49L8.2 2.27a1.47 1.47 0 0 0-1.06-1.11A2.799 2.799 0 0 0 6.33 1H4.67a2.798 2.798 0 0 0-.8.14A1.47 1.47 0 0 0 2.8 2.27L2.51 4H1.34a.37.37 0 0 0-.34.49l1.21 4.7c.135.47.56.799 1.05.81h4.48a1.12 1.12 0 0 0 1.06-.81l1.2-4.7A.37.37 0 0 0 9.6 4zM3.27 4l.27-1.61a.68.68 0 0 1 .55-.52c.185-.06.376-.093.57-.1h1.67c.194.007.385.04.57.1a.68.68 0 0 1 .55.52L7.73 4H3.27z"/></symbol><symbol viewBox="0 0 15 15" id="shop-15"><path d="M13.33 6H11.5l-.39-2.33A2 2 0 0 0 9.7 2.18 3.76 3.76 0 0 0 8.62 2H6.38a3.76 3.76 0 0 0-1.08.18 2 2 0 0 0-1.41 1.49L3.5 6H1.67a.5.5 0 0 0-.48.65l1.88 6.3A1.5 1.5 0 0 0 4.5 14h6a1.5 1.5 0 0 0 1.42-1.05l1.88-6.3a.5.5 0 0 0-.47-.65zM4.52 6l.36-2.17a.91.91 0 0 1 .74-.7c.246-.078.502-.121.76-.13h2.24c.261.008.52.051.77.13a.91.91 0 0 1 .74.7L10.48 6h-6 .04z"/></symbol><symbol viewBox="0 0 11 11" id="skiing-11"><path d="M11 3.68a1.09 1.09 0 1 1-2.18-.008A1.09 1.09 0 0 1 11 3.68zM10.17 9a.25.25 0 0 0-.33-.11 1.9 1.9 0 0 1-1.59.18L3.69 6.81l1.9-1V3.68l1.09.55v2.18L7.77 7l1.09-.55-1.09-.59V2.59L5.59 1.5 4.5 2v3.32l-1.9 1-2-1a.25.25 0 1 0-.22.45L8 9.54c.24.101.5.149.76.14a2.85 2.85 0 0 0 1.28-.33.25.25 0 0 0 .13-.35z"/></symbol><symbol viewBox="0 0 15 15" id="skiing-15"><path d="M15 4.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm-1.28 7.39a.25.25 0 0 0-.33-.11 2.69 2.69 0 0 1-2.28.25L4.78 8.86 7.5 7.5v-3l1.5.75v3l1.5.75 1.5-.75-1.5-.75V3l-3-1.5-1.5.75v4.5L3.28 8.11.61 6.78a.25.25 0 1 0-.22.45l10.5 5.25c.316.135.657.2 1 .19a3.84 3.84 0 0 0 1.72-.44.25.25 0 0 0 .113-.335l-.003-.005z"/></symbol><symbol viewBox="0 0 11 11" id="slaughterhouse-11"><title>slaughterhouse-11-01</title><path d="M11 5.75v.241C11 7 10 6.5 10 6.5H8A3.081 3.081 0 0 1 7 8a2.848 2.848 0 0 1-.416.9.26.26 0 0 0-.05.242l.458 1.55A.227.227 0 0 1 7 10.75a.25.25 0 0 1-.25.25.259.259 0 0 1-.244-.173L6 9v-.5H2.75l-.21.42a.25.25 0 0 0-.02.168L3 10.75a.25.25 0 0 1-.25.25.26.26 0 0 1-.237-.172L2 9v-.5a4.013 4.013 0 0 1-.843-.139 1.383 1.383 0 0 1-.5 1.045.242.242 0 0 0-.094.282l.414.99a.213.213 0 0 1 .011.072.25.25 0 0 1-.25.25.253.253 0 0 1-.228-.148L0 9.5a6.031 6.031 0 0 0 0-2v-2a1.486 1.486 0 0 1 2-1.4s.768.132 1.1.154a2.457 2.457 0 0 0 .9-.167A1.666 1.666 0 0 1 4.5 4a1.648 1.648 0 0 1 .844.257 3.166 3.166 0 0 0 .9.23L7 4.5 8 4v-.5l.5.5a1.474 1.474 0 0 1 1.5-.5.914.914 0 0 0-1 .5l1 1 .68.529a.425.425 0 0 1 .07-.029.238.238 0 0 1 .25.25z"/></symbol><symbol viewBox="0 0 15 15" id="slaughterhouse-15"><title>slaughterhouse-15-01</title><path d="M15 8.1c0 1.376-1.363.694-1.363.694L12.5 9H11a5.309 5.309 0 0 1-1.5 2 3.272 3.272 0 0 1-.523 1.125c-.077.091-.061.2-.068.33l.091 2.3a.264.264 0 0 1-.266.25.242.242 0 0 1-.234-.205L8 11.5H4v3.253a.247.247 0 0 1-.247.247.25.25 0 0 1-.241-.2L3 12v-.5a8.2 8.2 0 0 1-1.426-.1A1.886 1.886 0 0 1 .9 12.826c-.128.083-.148.211-.133.386l.19 1.538a.25.25 0 0 1-.25.25.238.238 0 0 1-.23-.174l-.427-1.7a.35.35 0 0 1 .055-.3c.437-.68-.049-2.55-.049-2.55A1.354 1.354 0 0 1 0 9.922V7.5a2.027 2.027 0 0 1 2.736-1.914s.1.03.142.049a15.15 15.15 0 0 0 3.814.038l.179-.062a1.842 1.842 0 0 1 1.26 0 .972.972 0 0 1 .227.089 1.994 1.994 0 0 1 .287.171A1.8 1.8 0 0 0 9.5 6h1V5l.5.5c.5-1.5 2.5-1 2.5-1a1.687 1.687 0 0 0-1.5 1l2.5 2a.613.613 0 0 1 .186-.069.318.318 0 0 1 .314.321V8.1z"/></symbol><symbol viewBox="0 0 11 11" id="snowmobile-11"><title>snowmobile-11</title><path d="M4 8.5a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 1 .5.5zm7-3a.5.5 0 0 0-.5-.5.929.929 0 0 0-.097.01L6 6h-.5a.5.5 0 0 1-.5-.5v-3a.5.5 0 0 0-.931-.253L3 4 .312 5.038A.499.499 0 0 0 0 5.5a.52.52 0 0 0 .086.28L1 7h2.411a.488.488 0 0 1 .314.116L5.723 8.77A.996.996 0 0 0 6.36 9h3.136a.504.504 0 0 0 .451-.73L9 7l1.78-1.085A.503.503 0 0 0 11 5.5z"/></symbol><symbol viewBox="0 0 15 15" id="snowmobile-15"><title>snowmobile-15</title><path d="M15 11a1 1 0 0 1-1 1H9.414a1 1 0 0 1-.707-.293l-1.561-1.561A.498.498 0 0 0 6.793 10H3.334a1.002 1.002 0 0 1-.601-.2L1.386 8.788A1.013 1.013 0 0 1 1 8a.995.995 0 0 1 .472-.844L5 5l1.038-1.692A.5.5 0 0 1 7 3.5V7l1 1h1l5.412-.992a.5.5 0 0 1 .355.915L13 9l1.631 1.224A.99.99 0 0 1 15 11zm-9.5 0H3.225a3.003 3.003 0 0 1-1.44-.368l-1.045-.57a.5.5 0 0 0-.48.877l1.269.693a3.003 3.003 0 0 0 1.44.368H5.5a.5.5 0 0 0 0-1z"/></symbol><symbol viewBox="0 0 11 11" id="soccer-11"><path d="M9 1.25a1.25 1.25 0 1 1-2.5-.001A1.25 1.25 0 0 1 9 1.25zm0 7.23a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm1.81-3.39L8.94 3.18A.48.48 0 0 0 8.56 3H1.51a.5.5 0 0 0 0 1H5L2.07 8.3a.488.488 0 0 0 0 .2.511.511 0 0 0 1 .21H3L4.16 7H6l-1.93 3.24a.49.49 0 0 0-.07.26.51.51 0 0 0 1 .2l3.67-6.38 1.48 1.48a.5.5 0 1 0 .7-.71h-.04z"/></symbol><symbol viewBox="0 0 15 15" id="soccer-15"><path d="M11 1.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm0 9.5a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm1.84-4.91l-1.91-1.91a.48.48 0 0 0-.37-.18H3.5a.5.5 0 0 0 0 1h2.7L3 11.3a.488.488 0 0 0 0 .2.511.511 0 0 0 1 .21L5 10h2l-1.93 4.24a.49.49 0 0 0-.07.26.51.51 0 0 0 1 .2l4.7-9.38 1.44 1.48a.5.5 0 0 0 .7-.71z"/></symbol><symbol viewBox="0 0 11 11" id="square-11"><path d="M9 10H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h7a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1z"/></symbol><symbol viewBox="0 0 15 15" id="square-15"><path d="M13 14H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h11a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1z"/></symbol><symbol viewBox="0 0 11 11" id="square-stroked-11"><path d="M9.19 1H1.81a.81.81 0 0 0-.81.81v7.38c0 .447.363.81.81.81h7.38a.81.81 0 0 0 .81-.81V1.81A.81.81 0 0 0 9.19 1zM2 2h7v7H2V2z"/></symbol><symbol viewBox="0 0 15 15" id="square-stroked-15"><path d="M12.7 2.3v10.4H2.3V2.3h10.4M13 1H2a1 1 0 0 0-1 1v11a1 1 0 0 0 1 1h11a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1z"/></symbol><symbol viewBox="0 0 11 11" id="stadium-11"><path d="M5 0v3.012c-2.208.097-3.912.806-4 1.67v3.681C1 9.267 3.014 10 5.5 10S10 9.267 10 8.363V4.682c-.088-.864-1.79-1.574-4-1.67v-.44L8.5 1.5 5 0zM1.818 5.752c.319.178.72.332 1.182.453v2.46c-.75-.237-1.179-.568-1.182-.915V5.752zm7.364.004V7.75c-.002.348-.43.68-1.182.916V6.203c.461-.12.862-.271 1.182-.447zM4 6.398a11.066 11.066 0 0 0 3 0v2.493C6.528 8.962 6.017 9 5.5 9S4.472 8.962 4 8.89V6.399z"/></symbol><symbol viewBox="0 0 15 15" id="stadium-15"><path d="M7 1v4.01c-2.83.094-4.998.957-5 1.99v4.5c0 1.105 2.462 2 5.5 2s5.5-.895 5.5-2V7c-.002-1.034-2.17-1.896-5-1.99v-.947l3-1.313L7 1zM3 8.146c.515.268 1.201.485 2 .633v2.967c-1.205-.269-2-.726-2-1.246V8.146zm9 .002V10.5c0 .52-.795.977-2 1.246V8.781c.799-.148 1.485-.366 2-.633zm-6 .774a14.68 14.68 0 0 0 3 .002v2.984c-.471.056-.971.092-1.5.092s-1.029-.036-1.5-.092V8.922z"/></symbol><symbol viewBox="0 0 11 11" id="star-11"><path d="M5.4 0L4 3.5H0l3 3L1.5 11l3.9-2.6L9.5 11 8 6.5l3-3H7L5.4 0z"/></symbol><symbol viewBox="0 0 15 15" id="star-15"><path d="M7.5 0l-2 5h-5l4 3.5-2 6 5-3.5 5 3.5-2-6 4-3.5h-5l-2-5z"/></symbol><symbol viewBox="0 0 11 11" id="star-stroked-11"><path d="M5.5 2.69l.59 1.47.25.63h1.81l-1 .9-.5.44.18.63.56 1.69-1.32-.92-.57-.41-.57.4-1.31.92.55-1.68.21-.63-.5-.43-1-.9h1.78l.25-.63.59-1.48M5.5 0L4 3.79H.19l3 2.66L1.71 11 5.5 8.34 9.29 11 7.78 6.45l3-2.66H7L5.5 0z"/></symbol><symbol viewBox="0 0 15 15" id="star-stroked-15"><path d="M7.5 3.19l1.07 2.68.25.63h3l-2 1.75-.5.44.23.63 1 3.13-2.48-1.77-.57-.4-.57.4-2.52 1.77 1-3.13.21-.63-.5-.44-2-1.75h3l.25-.63L7.5 3.19M7.5.5l-2 5h-5l4 3.5-2 6 5-3.5 5 3.5-2-6 4-3.5h-5l-2-5z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="suitcase-11"><path d="M8 3V1.578L7.36 1H3.64L3 1.748V3H1.5l-.5.5v6l.5.5h8l.5-.5v-6L9.5 3H8zM4 2h3v1H4V2z"/></symbol><symbol viewBox="0 0 15 15" id="suitcase-15"><path d="M11 4V2c0-1-1-1-1-1H5.05S3.946 1.002 4 2v2H2S1 4 1 5v7c0 1 1 1 1 1h11s1 0 1-1V5c0-1-1-1-1-1h-2zM5.5 2.5h4V4h-4V2.5z"/></symbol><symbol viewBox="0 0 11 11" id="sushi-11"><path d="M3.5 2.5c-.3 0-.5.1-.5.4h-.9c-1.1 0-2 .8-2 1.9 0 .5.3 1 .7 1.4-.5.3-.8.7-.8 1.3C0 8.3.7 9 1.6 9h5.8C8.3 9 9 8.3 9 7.5c0-.2 0-.4-.1-.6l1 .5c.4.2.8 0 1-.3.2-.4-.053-.794-.343-.944L9.8 5.8l.5-.1c.4-.1.7-.4.6-.8-.1-.4-.4-.6-.8-.6H10l-1.6.3C8 3.9 7.3 3.1 6 3c0 0 0-.5-.5-.5h-2zm.5 1h1v4.4H4V3.5zm3 2.4c.2 0 .3.1.4.3l.1-.1c.1-.2.3-.2.5-.1s.2.3.1.5l-.3.5c.1.1.2.2.2.4 0 .3-.2.5-.6.5H6v-1h.7v-.6c0-.2.1-.4.3-.4zM1.9 6c.1 0 .3 0 .4.2l.1.2c.1-.1.2-.1.3-.1.2 0 .3.2.3.3v1.3H1.6c-.4 0-.6-.2-.6-.5s.2-.5.6-.5h.3l-.2-.4c-.1-.2 0-.4.1-.5h.1z" fill="#010101"/></symbol><symbol viewBox="0 0 15 15" id="sushi-15"><path d="M5.5 3a.5.5 0 0 0-.5.5H2.75A2.744 2.744 0 0 0 .943 8.313 1.998 1.998 0 0 0 0 10c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2 0-.488-.186-.93-.48-1.277l2.177.963a.75.75 0 1 0 .606-1.372l-1.81-.802 1.63-.272a.75.75 0 1 0-.246-1.48l-2.13.355C11.258 4.952 10.038 3.784 8 3.55V3.5a.5.5 0 0 0-.5-.5h-2zM6 4h1v7H6V4zm3.5 4c.259 0 .464.197.49.45l.076-.134a.5.5 0 1 1 .866.5l-.258.448A.986.986 0 0 1 11 10c0 .563-.437 1-1 1H8V9h1v-.5c0-.277.223-.5.5-.5zm-7.06.07a.498.498 0 0 1 .494.246l.2.348A.493.493 0 0 1 3.5 8.5c.277 0 .5.223.5.5h1v2H2c-.563 0-1-.437-1-1s.437-1 1-1h.174l-.106-.184a.497.497 0 0 1 .371-.746z"/></symbol><symbol viewBox="0 0 11 11" id="swimming-11"><path d="M8.004.494l-.7.502-2.7 1.602c-.3.099-.4.598-.202.898l.6 1.002-2.5 2 1 1.002 2-1.002L7.504 7.5l1-1.002-3.002-3.502 3.002-1.5V.494h-.5zm1.002 2.502a1 1 0 1 0 0 0zM2 7.998L0 9v1l2-1 1.5 1 2-1 2 1L9 9l2 1V9L9 7.998 7.5 9l-2-1.002L3.5 9 2 7.998z"/></symbol><symbol viewBox="0 0 15 15" id="swimming-15"><path d="M10.111 2c-.112 0-.435.147-.435.147l-3.322 1.68c-.443.175-.618.881-.352 1.234l.97 1.408-3.97 2.029L5 9.998l2.502-1.5 2.5 1.5 1.002-1.002-3-4 2.557-1.53c.528-.266.443-.704.443-.97C11 2.286 10.644 2 10.111 2zm2.141 3a1.75 1.75 0 1 0-.003 3.501A1.75 1.75 0 0 0 12.252 5zM2.5 10L0 11.5V13l2.5-1.5L5 13l2.502-1.5 2.5 1.5L12 11.5l3 1.5v-1.5L12 10l-1.998 1.5-2.5-1.5L5 11.5 2.5 10z"/></symbol><symbol viewBox="0 0 11 11" id="teahouse-11"><title>teahouse</title><path d="M6.2 4C7.4 3.7 8 3.7 8 2.5c0-.6-.4-.8-1.6-1.3C5.6.9 5.3.9 5.3.1c-.3.9-.1 1.2.8 1.7 2 1 .1 2.2.1 2.2zM3.9 4c.7-.2 1.1-.2 1.1-.9 0-.4-.3-.5-1-.9-.5-.2-.7-.7-.7-1.2-.2.6-.1 1.3.5 1.6 1.2.6.1 1.4.1 1.4zM9 5H2l1 3c.3.4.6.7 1 1v2h3V9c.4-.3.7-.6 1-1l1-3z"/></symbol><symbol viewBox="0 0 15 15" id="teahouse-15"><path d="M11 7c-.2 1.4-.5 2.7-1 4-.3.4-.6.7-1 1v2H6v-2c-.4-.3-.7-.6-1-1-.5-1.3-.8-2.6-1-4h7zM8.1 5.7c1.2-.3 1.7-.3 1.8-1.5 0-.6-.4-.8-1.5-1.4-.9-.4-1.3-1-1.2-1.8-.4.9-.2 2 .8 2.5 2 1 .1 2.2.1 2.2zM5.8 6c.7-.2 1.1-.2 1.1-.9 0-.4-.3-.5-.9-.9-.6-.2-.9-.7-.8-1.2-.3.6-.1 1.3.5 1.6 1.2.6.1 1.4.1 1.4z"/></symbol><symbol viewBox="0 0 11 11" id="telephone-11"><title>telephone-11</title><path d="M3 9.4a.73.73 0 0 0 1 0l.74-.74a.73.73 0 0 0 0-1zm4.56-4.6a.73.73 0 0 0 1 0l.71-.71a.73.73 0 0 0 0-1zM5.88 3.57L3.57 5.88a.37.37 0 0 0 0 .52l.43.44L2.26 8.6a2.27 2.27 0 0 1-.73-1.34v-1a1.345 1.345 0 0 1 .52-1l3.21-3.21a1.345 1.345 0 0 1 1-.52h1a2.27 2.27 0 0 1 1.34.73L6.84 4l-.44-.43a.37.37 0 0 0-.52 0"/></symbol><symbol viewBox="0 0 15 15" id="telephone-15"><title>telephone-15</title><path d="M4.51 8.88a.51.51 0 0 0 0 .72l.72.72-2.16 2.18-.37-.37a2.24 2.24 0 0 1-.7-1.44V9.24a2.24 2.24 0 0 1 .7-1.45l5.07-5.07A2.24 2.24 0 0 1 9.22 2h1.45a2.24 2.24 0 0 1 1.45.72l.36.36-2.17 2.18-.73-.73a.51.51 0 0 0-.72 0zm-.38 4.72a1 1 0 0 0 1.414.036l.036-.036.72-.72a1 1 0 0 0 .036-1.414L6.3 11.43zm7.25-7.28a1 1 0 0 0 1.414.036l.756-.756a1 1 0 0 0 .036-1.414l-.036-.036z"/></symbol><symbol viewBox="0 0 11 11" id="tennis-11"><path d="M3 3a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm6.87 1.55L8.3 3A1.89 1.89 0 0 0 7.8.7 2.25 2.25 0 0 0 6.26 0a1.26 1.26 0 0 0-.91.35A1.79 1.79 0 0 0 5.7 2.8a2.25 2.25 0 0 0 1.54.7 1.3 1.3 0 0 0 .69-.21l1.6 1.6a.23.23 0 0 0 .2.12.25.25 0 0 0 .27-.26.24.24 0 0 0-.13-.2zM7.8 2.8a.77.77 0 0 1-.56.2 1.76 1.76 0 0 1-1.19-.55A1.33 1.33 0 0 1 5.7.7a.78.78 0 0 1 .56-.2c.453.023.879.22 1.19.55.549.407.7 1.163.35 1.75zM6.5 5h-5a.5.5 0 0 0-.5.5v5a.5.5 0 0 0 1 0V8h1v2.5a.5.5 0 0 0 1 0V6h2.5a.5.5 0 0 0 0-1z"/></symbol><symbol viewBox="0 0 15 15" id="tennis-15"><path d="M8 4.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm6.38.55l-1.57-1.59a1.89 1.89 0 0 0-.5-2.25 2.25 2.25 0 0 0-1.54-.7 1.26 1.26 0 0 0-.91.35 1.79 1.79 0 0 0 .35 2.45 2.25 2.25 0 0 0 1.54.7 1.3 1.3 0 0 0 .69-.21L14 5.39a.23.23 0 0 0 .2.12.25.25 0 0 0 .25-.25.24.24 0 0 0-.07-.21zM12.31 3.3a.77.77 0 0 1-.56.2 1.76 1.76 0 0 1-1.18-.5 1.33 1.33 0 0 1-.35-1.74.78.78 0 0 1 .55-.26c.468.015.91.217 1.23.56a1.33 1.33 0 0 1 .31 1.74zm.54 2.34a.5.5 0 0 0-.707-.003l-.003.003L10.79 7h-4.9a.5.5 0 0 0-.48.38l-.79 3.11-.72 2.87a.5.5 0 0 0 .31.63h.16a.5.5 0 0 0 .47-.34l.8-3.19H7v3a.5.5 0 0 0 1 0v-3L9 8h2.21l1.65-1.65a.5.5 0 0 0-.01-.7v-.01z"/></symbol><symbol viewBox="0 0 11 11" id="theatre-11"><path d="M.606.7C.303.7 0 1.001 0 1.304v3.734C0 6.452.578 8 3 8h.5V6.184l-2.29-.008s.304-1.137 1.817-1.137c.303 0 .404 0 .606.102V3.727c0-.606.202-1.008.605-1.31C4.541 2.112 4.79 2 5.394 2H6v-.605c0-.303-.197-.659-.5-.659-.606 0-1.16.569-2.473.569-1.009 0-1.816-.606-2.421-.606zM1.75 2.5a.75.75 0 1 1 0 1.5.75.75 0 0 1 0-1.5zM5.5 3c-.303 0-.555.424-.555.727V7.46c0 1.413.606 3.027 3.028 3.027S11 8.773 11 7.461V3.727c0-.303-.197-.727-.5-.727-.605 0-1.592.5-2.5.5S6.106 3 5.5 3zm1.25 2a.75.75 0 1 1 0 1.5.75.75 0 0 1 0-1.5zm2.5 0a.75.75 0 1 1 0 1.5.75.75 0 0 1 0-1.5zM6.156 8.066h3.735s-.303 1.211-1.817 1.211-1.918-1.21-1.918-1.21z"/></symbol><symbol viewBox="0 0 15 15" id="theatre-15"><path d="M2 1S1 1 1 2v5.158C1 8.888 1.354 11 4.5 11H5V8L2.5 9s0-2.5 2.5-2.5V5c0-.708.087-1.32.5-1.775.381-.42 1.005-1.258 2.656-.471L9 3.303V2s0-1-1-1c-.708 0-1.978 1-3 1S2.787 1 2 1zm1 2a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 1S6 4 6 5v5c0 2 1 4 4 4s4-2 4-4V5c0-1-1-1-1-1-.708 0-1.978 1-3 1S7.787 4 7 4zm1 2a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm-4.5 4h5s0 2.5-2.5 2.5S7.5 10 7.5 10z"/></symbol><symbol viewBox="0 0 11 11" id="toilet-11"><path d="M3.33 2.19a1.1 1.1 0 1 1 1.1-1.1 1.1 1.1 0 0 1-1.1 1.1zm6.94-1.1a1.1 1.1 0 1 0 0 .01v-.01zM6.51 4.93L4.7 3.12A.37.37 0 0 0 4.43 3H2.22a.37.37 0 0 0-.25.1H2L.14 4.93a.38.38 0 1 0 .53.53l1.58-1.58L.77 8h1.46v2.51a.38.38 0 0 0 .75.11H3V8h.69v2.63a.38.38 0 0 0 .75-.11V8h1.44L4.41 3.88 6 5.46a.37.37 0 0 0 .28.12c.21 0 .38-.17.38-.38a.37.37 0 0 0-.15-.27zM8.62 7v3.63a.37.37 0 1 0 .73 0V7H11V3.37a.37.37 0 0 0-.37-.37H7.71a.37.37 0 0 0-.37.37V7h1.28z"/></symbol><symbol viewBox="0 0 15 15" id="toilet-15"><path d="M4.5 3a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zM14 1.5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0zM8.86 6.64L6.38 4.15A.51.51 0 0 0 6 4H3a.51.51 0 0 0-.35.14L.14 6.63a.52.52 0 1 0 .73.73L3 5.2 1 11h2v3.33a.503.503 0 0 0 0 .15.51.51 0 0 0 1 0V11h1v3.5a.51.51 0 0 0 1 0 .503.503 0 0 0 0-.15V11h2L6 5.2l2.14 2.16a.51.51 0 0 0 .38.17A.52.52 0 0 0 9 7a.51.51 0 0 0-.14-.36zM14.5 4h-4a.5.5 0 0 0-.5.5v5a.5.5 0 0 0 1 0v5a.5.5 0 0 0 1 0v-5h1v5a.5.5 0 0 0 1 0v-5a.5.5 0 0 0 1 0v-5a.5.5 0 0 0-.5-.5z"/></symbol><symbol viewBox="0 0 11 11" id="town-11"><title>town-11-01</title><path d="M3.695 1.1a.256.256 0 0 0-.4 0l-2.24 2.831A.254.254 0 0 0 1 4.088V9.75a.25.25 0 0 0 .25.25h1.5A.25.25 0 0 0 3 9.75V8h1v1.75a.25.25 0 0 0 .25.25H5V5.5a.615.615 0 0 1 .147-.4L6 4zM3 7H2V6h1zm0-2H2V4h1zm5.194-1.258a.248.248 0 0 0-.387 0l-1.753 2.19A.249.249 0 0 0 6 6.087v3.665a.248.248 0 0 0 .248.248h3.5A.248.248 0 0 0 10 9.756V6.087a.249.249 0 0 0-.054-.155zM7 6h1v1H7zm2 3H8V8h1z"/></symbol><symbol viewBox="0 0 15 15" id="town-15"><title>town-15</title><path d="M10.651 7.121a.251.251 0 0 0-.314 0L8.092 8.929A.247.247 0 0 0 8 9.122v4.625a.253.253 0 0 0 .253.253h1.494a.253.253 0 0 0 .253-.253V12h1v1.747a.253.253 0 0 0 .253.253h1.494a.253.253 0 0 0 .253-.253V9.12a.25.25 0 0 0-.094-.2zM10 11H9v-1h1zm2 0h-1v-1h1zM5.71 1.815a.252.252 0 0 0-.42 0L2.042 5.936a.252.252 0 0 0-.042.14v7.671a.252.252 0 0 0 .251.253h2.5A.252.252 0 0 0 5 13.748V12h1v1.748a.252.252 0 0 0 .252.252H7V8a.5.5 0 0 1 .188-.391L9 6c0-.05-3.29-4.185-3.29-4.185zM4 10H3V9h1zm0-3H3V6h1zm2 3H5V9h1zm0-3H5V6h1z"/></symbol><symbol viewBox="0 0 11 11" id="town-hall-11"><path d="M5.5 0L1 2v1h9V2L5.5 0zM2 4v4L1 9v1h9V9L9 8V4H2zm1 1h1v3H3V5zm2 0h1v3H5V5zm2 0h1v3H7V5z"/></symbol><symbol viewBox="0 0 15 15" id="town-hall-15"><path d="M7.5 0L1 3.445V4h13v-.555L7.5 0zM2 5v5l-1 1.555V13h13v-1.445L13 10V5H2zm2 1h1v5.5H4V6zm3 0h1v5.5H7V6zm3 0h1v5.5h-1V6z"/></symbol><symbol viewBox="0 0 11 11" id="triangle-11"><path d="M5.517 1.232a.556.556 0 0 0-.493.268l-4 6.66c-.223.37.044.84.476.84h8c.432 0 .699-.47.476-.84l-4-6.66a.556.556 0 0 0-.459-.268z"/></symbol><symbol viewBox="0 0 15 15" id="triangle-15"><path d="M7.538 2c-.294 0-.488.177-.615.385l-5.846 9.538C1 12 1 12.153 1 12.308c0 .538.385.692.692.692h11.616c.384 0 .692-.154.692-.692 0-.154 0-.231-.077-.385l-5.77-9.538C8.029 2.177 7.789 2 7.539 2z"/></symbol><symbol viewBox="0 0 11 11" id="triangle-stroked-11"><path d="M5.517 1.232a.556.556 0 0 0-.493.268l-4 6.66c-.223.37.044.84.476.84h8c.432 0 .699-.47.476-.84l-4-6.66a.556.556 0 0 0-.459-.268zM5.5 2.861l3.02 5.03H2.48l3.02-5.03z"/></symbol><symbol viewBox="0 0 15 15" id="triangle-stroked-15"><path d="M7.524 1.5a.77.77 0 0 0-.69.395l-5.5 9.87C1.022 12.307 1.395 13 2 13h11c.605 0 .978-.692.666-1.236l-5.5-9.869a.773.773 0 0 0-.642-.395zM7.5 3.9l4.127 7.47H3.373L7.5 3.9z"/></symbol><symbol viewBox="0 0 11 11" id="veterinary-11"><path d="M5.5 4.32a2.2 2.2 0 0 0-2.14 2.46 4.4 4.4 0 0 0-1.21.63 1.42 1.42 0 0 0-.29 2 1.48 1.48 0 0 0 2 .28 2.89 2.89 0 0 1 1.64-.52 2.89 2.89 0 0 1 1.64.49c.6.495 1.49.41 1.985-.191l.015-.019a1.35 1.35 0 0 0-.21-2l-.08-.04a6.4 6.4 0 0 0-1.21-.63A2.2 2.2 0 0 0 5.5 4.32zm-3.87-1.2a1.11 1.11 0 0 0-.55 1.44 1.08 1.08 0 0 0 1.15 1 1.11 1.11 0 0 0 .55-1.44 1.08 1.08 0 0 0-1.15-1zm7.74 0c.541.254.784.89.55 1.44a1.08 1.08 0 0 1-1.15 1 1.11 1.11 0 0 1-.55-1.44 1.08 1.08 0 0 1 1.15-1zM3.77 1a1 1 0 0 0-.55 1.32 1.26 1.26 0 0 0 1.16 1.09 1 1 0 0 0 .558-1.3l-.008-.02A1.26 1.26 0 0 0 3.77 1zm3.46 0a1 1 0 0 1 .558 1.3l-.008.02a1.26 1.26 0 0 1-1.16 1.09 1 1 0 0 1-.559-1.3l.009-.02A1.26 1.26 0 0 1 7.23 1z"/></symbol><symbol viewBox="0 0 15 15" id="veterinary-15"><path d="M7.5 6c-2.5 0-3 2.28-3 3.47a6.15 6.15 0 0 0-1.7.89 2 2 0 0 0-.4 2.78 2.06 2.06 0 0 0 2.8.4 4 4 0 0 1 2.3-.69 4 4 0 0 1 2.3.69 2 2 0 0 0 2.8-.3 1.93 1.93 0 0 0-.3-2.78l-.1-.1a8.996 8.996 0 0 0-1.7-.89C10.5 8.29 10 6 7.5 6zM2.08 4.3a1.58 1.58 0 0 0-.76 2 1.52 1.52 0 0 0 1.61 1.4 1.58 1.58 0 0 0 .76-2 1.52 1.52 0 0 0-1.61-1.4zM12.93 4.3a1.58 1.58 0 0 1 .76 2 1.52 1.52 0 0 1-1.61 1.4 1.58 1.58 0 0 1-.76-2 1.52 1.52 0 0 1 1.61-1.4zM5.08 1.3c-.68.09-1 .94-.76 1.87A1.77 1.77 0 0 0 5.93 4.7c.68-.09 1-.94.76-1.87A1.77 1.77 0 0 0 5.08 1.3zM9.93 1.3c.68.09 1 .94.76 1.87A1.77 1.77 0 0 1 9.07 4.7c-.68-.08-1-.94-.76-1.87A1.77 1.77 0 0 1 9.93 1.3z"/></symbol><symbol viewBox="0 0 11 11" id="village-11"><title>village-11</title><path d="M2.777 2.3L.3 5.6a.272.272 0 0 0-.05.15A.25.25 0 0 0 .5 6H1v3.745a.255.255 0 0 0 .255.255h2.49A.255.255 0 0 0 4 9.745V5.467a.253.253 0 0 1 .064-.167L5 4.5 3.2 2.316a.255.255 0 0 0-.423-.016zM3 7H2V6h1zm6.75-4h-.5a.25.25 0 0 0-.25.25V5.2L7.658 4.126a.253.253 0 0 0-.316 0L5.1 5.926a.253.253 0 0 0-.095.2v3.621a.253.253 0 0 0 .248.253h1.494A.253.253 0 0 0 7 9.747V8h1v1.747a.253.253 0 0 0 .253.253h1.494A.253.253 0 0 0 10 9.747V3.25A.25.25 0 0 0 9.75 3zM7 7H6V6h1zm2 0H8V6h1z"/></symbol><symbol viewBox="0 0 15 15" id="village-15"><title>village-15</title><path d="M6.176 4.176a.249.249 0 0 0-.352 0l-4.4 4.4A.25.25 0 0 0 1.6 9H3v4.751a.249.249 0 0 0 .249.249h3.5A.249.249 0 0 0 7 13.753v-5.43a.249.249 0 0 1 .073-.176L8.5 6.5zM6 12H5v-1h1zm0-2H5V9h1zm6.75-4h-.5a.25.25 0 0 0-.25.25V8l-1.324-1.824a.249.249 0 0 0-.352 0L8.056 8.932A.246.246 0 0 0 8 9.088v4.66a.249.249 0 0 0 .246.252h1.5a.253.253 0 0 0 .254-.252V12h1v1.747a.253.253 0 0 0 .253.253h1.5a.25.25 0 0 0 .247-.249V6.25a.25.25 0 0 0-.25-.25zM10 11H9v-1h1zm2 0h-1v-1h1z"/></symbol><symbol viewBox="0 0 11 11" id="volcano-11"><path d="M3 1l1.5 3h2L8 3V2L6 3V1h-.5L5 2.5 3.5 1H3zm.522 4L1.023 9.16c-.223.37.044.84.476.84h8c.432 0 .7-.47.477-.84L7.479 5H7v.5a.499.499 0 1 1-1 0 .5.5 0 0 0-1 0v2a.499.499 0 1 1-1 0V5h-.478z"/></symbol><symbol viewBox="0 0 15 15" id="volcano-15"><path d="M8.484 1a.502.502 0 0 0-.375.188L6.45 3.262 4.844 1.738c-.436-.4-1.084.155-.754.647l1.666 2.4a.5.5 0 0 0 .803.026c.166-.21.441-.678.941-.678s.793.49.941.678a.5.5 0 0 0 .713.072l1.668-1.4c.441-.375 0-1.074-.527-.838L9 3.227V1.5a.5.5 0 0 0-.516-.5zM5 6l-2.924 5.924C2 12.001 2 12.155 2 12.309c0 .538.384.691.691.691h9.618c.384 0 .691-.153.691-.691 0-.154 0-.231-.076-.385L10 6c-.5 0-1 .5-1 1v.5a.499.499 0 1 1-1 0V7a.5.5 0 1 0-1 0v2a.499.499 0 1 1-1 0V7c0-.5-.5-1-1-1z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="warehouse-11"><path d="M3 11H0V8h3v3zm4-3H4v3h3V8zm4 0H8v3h3V8zM5 4H2v3h3V4zm4 0H6v3h3V4zm1.44-.76a.5.5 0 0 0-.19-.68L5.75.06a.5.5 0 0 0-.49 0l-4.5 2.5a.5.5 0 0 0 .49.87L5.5 1.07l4.26 2.37a.5.5 0 0 0 .679-.198l.001-.002z"/></symbol><symbol viewBox="0 0 15 15" id="warehouse-15"><path d="M13.5 5a.5.5 0 0 1-.22-.05L7.5 2 1.72 4.93A.514.514 0 0 1 1.28 4L7.5.92 13.72 4a.512.512 0 0 1-.22 1zM5 10H2v3h3v-3zm4 0H6v3h3v-3zm4 0h-3v3h3v-3zm-2-4H8v3h3V6zM7 6H4v3h3V6z"/></symbol><symbol viewBox="0 0 11 11" id="waste-basket-11"><path d="M9 4l-1.17 7H3.17L2 4h7zm.25-1.75A.25.25 0 0 1 9 2.5H2A.25.25 0 1 1 2 2h2V0h3v2h2a.25.25 0 0 1 .25.25zM6.5 2V.5h-2V2h2z"/></symbol><symbol viewBox="0 0 15 15" id="waste-basket-15"><path d="M12.41 5.58l-1.34 8a.5.5 0 0 1-.49.41H4.42a.5.5 0 0 1-.49-.41l-1.34-8A.5.5 0 0 1 3.08 5h8.83a.5.5 0 0 1 .5.58zM13 3.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1 0-1H5V1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5V3h2.5a.5.5 0 0 1 .5.5zM9 3V2H6v1h3z"/></symbol><symbol viewBox="0 0 11 11" id="water-11"><path d="M5.5 11C3.59 11 2 9 2 7s2.61-5.81 3.5-7C6.39 1.19 9 5 9 7s-1.59 4-3.5 4z"/></symbol><symbol viewBox="0 0 15 15" id="water-15"><path d="M7.49 15A5.84 5.84 0 0 1 2 9.5C2 6.6 6.25 1.66 7.49 0c1.24 1.66 5 6.59 5 9.49S10.17 15 7.49 15z"/></symbol><symbol viewBox="0 0 11 11" id="wetland-11"><path d="M1.11 3.33A1.58 1.58 0 0 1 2.19 3 1.71 1.71 0 0 1 4 4.41l.57 3.39a1.66 1.66 0 0 0-1.44 0l-.57-3.39a1.6 1.6 0 0 0-1.45-1.08zm4.34 4.88a2.47 2.47 0 0 1 .94-.47l.9-5.5a1.6 1.6 0 0 1 1.45-1.08A1.58 1.58 0 0 0 7.65.8a1.71 1.71 0 0 0-1.81 1.44L4.9 7.88c.197.086.382.197.55.33zm3.13-.36c.113-.094.233-.177.36-.25l.5-3.21a1.6 1.6 0 0 1 1.45-1.09 1.58 1.58 0 0 0-1.09-.36A1.71 1.71 0 0 0 8 4.39l-.48 3c.381.069.74.226 1.05.46h.01zm1.56.9a1.29 1.29 0 0 0-.86.3l-.34.3a.54.54 0 0 1-.7 0l-.33-.28a1.38 1.38 0 0 0-1.77 0l-.34.3a.54.54 0 0 1-.69 0l-.34-.32A1.38 1.38 0 0 0 3 9.06c-.11.09-.21.19-.32.28a.67.67 0 0 1-.22.11.61.61 0 0 1-.58-.18 4.465 4.465 0 0 0-.57-.42.89.89 0 0 0-.51-.1.36.36 0 0 0 0 .72.67.67 0 0 1 .46.23l.22.2a1.37 1.37 0 0 0 1.69 0c.14-.1.26-.23.4-.34a.54.54 0 0 1 .71 0l.25.29a1.38 1.38 0 0 0 1.78 0c.11-.08.2-.18.3-.27a.56.56 0 0 1 .79 0l.29.3c.36.311.856.414 1.31.27a1.55 1.55 0 0 0 .69-.43.68.68 0 0 1 .49-.25.366.366 0 1 0-.05-.73l.01.01z"/></symbol><symbol viewBox="0 0 15 15" id="wetland-15"><path d="M1.48 4.5A2.18 2.18 0 0 1 3 4a2.36 2.36 0 0 1 2.5 2l.78 4.68a2.3 2.3 0 0 0-2 .05L3.48 6a2.21 2.21 0 0 0-2-1.5zm6 6.74a3.41 3.41 0 0 1 1.3-.65L10 3a2.21 2.21 0 0 1 2-1.5 2.18 2.18 0 0 0-1.5-.5A2.36 2.36 0 0 0 8 3l-1.3 7.79c.279.115.54.267.78.45zm4.32-.5c.157-.128.324-.241.5-.34L13 6a2.21 2.21 0 0 1 2-1.5 2.18 2.18 0 0 0-1.5-.5A2.36 2.36 0 0 0 11 6l-.67 4a3.41 3.41 0 0 1 1.47.74zM14 12a1.78 1.78 0 0 0-1.19.42l-.47.41a.75.75 0 0 1-1 0c-.15-.12-.29-.26-.44-.39a1.9 1.9 0 0 0-2.45 0c-.16.13-.31.28-.47.41a.75.75 0 0 1-1 0c-.16-.13-.31-.28-.47-.41a1.9 1.9 0 0 0-2.44 0c-.15.13-.29.27-.44.39a.92.92 0 0 1-.3.16.84.84 0 0 1-.8-.25 6.167 6.167 0 0 0-.79-.58 1.23 1.23 0 0 0-.68-.16H1a.5.5 0 0 0 0 1 .93.93 0 0 1 .64.31l.36.26a1.9 1.9 0 0 0 2.33.06c.19-.14.36-.32.55-.47a.75.75 0 0 1 1 0l.39.35a1.91 1.91 0 0 0 2.46.07c.15-.11.27-.25.42-.37a.77.77 0 0 1 1.089-.011l.011.011.39.35a1.89 1.89 0 0 0 1.76.37 2.14 2.14 0 0 0 1-.6A1 1 0 0 1 14 13a.5.5 0 0 0 0-1z"/></symbol><symbol viewBox="0 0 11 11" id="wheelchair-11"><path d="M9 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0zM2.5 4a.5.5 0 0 0 .18 0l1.79-.83.46.48-.54.85a3.74 3.74 0 0 1 2.07 1.06l.44-.8a.64.64 0 0 0-.2-.89L4.85 2.15A.49.49 0 0 0 4.3 2l-2 1a.51.51 0 0 0 .2 1zm4.09 4.2a2.74 2.74 0 0 1-.51 1.57 2.42 2.42 0 0 1-.71.71 2.74 2.74 0 0 1-1.58.52A2.8 2.8 0 0 1 1 8.2a2.74 2.74 0 0 1 .52-1.58c.206-.266.445-.504.71-.71a2.74 2.74 0 0 1 1.56-.51 2.8 2.8 0 0 1 2.8 2.8zm-1.4.69a1.54 1.54 0 0 0 .18-.69 1.58 1.58 0 0 0-1.58-1.57 1.54 1.54 0 0 0-.69.18 2.14 2.14 0 0 0-.71.7 1.54 1.54 0 0 0-.18.7 1.58 1.58 0 0 0 1.58 1.57 1.54 1.54 0 0 0 .7-.18 1.9 1.9 0 0 0 .7-.71zM9 6.4a.49.49 0 0 0-.53-.4H6.82c.223.305.398.642.52 1H8l1 2.59a.5.5 0 0 0 .49.4h.1a.5.5 0 0 0 .413-.574L10 9.4l-1-3z"/></symbol><symbol viewBox="0 0 15 15" id="wheelchair-15"><path d="M12 1.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zM2.82 4.87l1.74-1.71 1.85 1.29-.74 1.25a5.49 5.49 0 0 1 2.71 1.88l.88-1.5a.86.86 0 0 0-.34-1.17l-.62-.37L4.79 2.1a.5.5 0 0 0-.64.05l-2 2a.5.5 0 0 0 .67.72zm5.31 6.07a4.11 4.11 0 0 1-1.54 3.16 4 4 0 0 1-2.52.9A4.07 4.07 0 0 1 0 10.94a4 4 0 0 1 .91-2.53c.187-.232.398-.443.63-.63a4 4 0 0 1 2.53-.91 4.07 4.07 0 0 1 4.06 4.07zM6 12.21A2.29 2.29 0 0 0 2.79 9a1.72 1.72 0 0 0-.63.63 2.29 2.29 0 0 0 3.17 3.17c.25-.164.476-.362.67-.59zm8.2 1l-2.49-5a.75.75 0 0 0-.71-.46H8.51c.33.458.586.964.76 1.5h1.26l2.29 4.58a.754.754 0 1 0 1.35-.67l.03.05z"/></symbol><symbol viewBox="0 0 11 11" id="zoo-11"><path d="M8 2c-.9 0-1.5.5-1.8 1.1 0 0-.7.9-1.2.9H3c-.5 0-1 .5-1 .5l-2 2V7h.5l1.2-1.2.2.2S1 7.7 1 9c0 .5.5.5.5.5H2s.2 0 0-.2l-.2-.2c0-.5.8-1.4 1.2-1.9v1.4c0 .3.111.9.411.9h.5s.2 0 0-.2l-.2-.2c-.2-.4.589-1.6.589-1.6h1.8L6.6 9c.2.5.5.5.5.5h1c.2 0 .7-.2.2-.5l-.2-.2V7c1 0 1.1-1.3 1.5-1.7l.7-.1c.2 0 .8-.2.8-.8V4L9.9 3C9.4 2.4 8.7 2 8 2z" fill="#010101"/></symbol><symbol viewBox="0 0 15 15" id="zoo-15"><path d="M8.388 3.893S7.682 5 7 5H4.5c-.682 0-1.298.409-1.773.864L.5 8c-.269.258-.493.768-.5 1-.016.5 0 1 0 1s1 0 1-1v-.5l1-1h.5l.158.29s-.954 1.824-.954 3.528c0 .682.682.682.682.682h.682s.341 0 0-.34l-.34-.342C2.727 10.636 3.5 9.667 4 9c0 0 .017 1.158 0 2-.008.41.272 1 .682 1h.682s.34 0 0-.34l-.341-.342C4.71 10.75 5.5 8.5 5.5 8.5c1.272 0 1.5.5 3 .5l.364 2.318c.111.71.636.682.636.682H11c.34 0 .961-.311.34-.774L11 11V9c1.214-.172 2-1 2-2h1c.321 0 1 0 1-.5v-1l-1.704-1.682C12.543 3.078 12 2.5 11 2.5c-1.453 0-2.136.569-2.612 1.393z"/></symbol></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><symbol viewBox="0 0 11 11" id="aerialway-11" xmlns="http://www.w3.org/2000/svg"><path d="M9 4.5H6V3.1a1 1 0 0 0 .43-.52L9.5 2a.5.5 0 0 0 0-1l-3.25.61a1 1 0 0 0-1.69.32L1.5 2.5a.5.5 0 0 0 0 1l3.25-.61A1 1 0 0 0 5 3.1v1.4H2a1 1 0 0 0-1 1V9a1 1 0 0 0 1 1h7a1 1 0 0 0 1-1V5.5a1 1 0 0 0-1-1zm-4 4H2.5v-3H5v3zm3.5 0H6v-3h2.5v3z"/></symbol><symbol viewBox="0 0 15 15" id="aerialway-15" xmlns="http://www.w3.org/2000/svg"><path d="M13 5H8V2.6a1 1 0 0 0 .42-.46l5.08-.64a.5.5 0 0 0 0-1l-5.22.65a1 1 0 0 0-.78-.4 1 1 0 0 0-.92.62L1.5 2a.5.5 0 0 0 0 1l5.22-.65c.077.1.172.185.28.25V5H2a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h11a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1zm-6 6H3V7h4v4zm5 0H8V7h4v4z"/></symbol><symbol viewBox="0 0 11 11" id="airfield-11" xmlns="http://www.w3.org/2000/svg"><path d="M5 .5H3.5C3 .5 3 0 3.5 0h4c.5 0 .5.5 0 .5H6s.5.5.5 1.5v1H11v1.5l-4.5 2L6 10l1.5.5v.5h-4v-.5L5 10l-.5-3.5-4.5-2V3h4.5V2C4.5 1 5 .5 5 .5z"/></symbol><symbol viewBox="0 0 15 15" id="airfield-15" xmlns="http://www.w3.org/2000/svg"><path d="M6.818.682H4.773C4.09.682 4.09 0 4.773 0h5.454c.682 0 .682.682 0 .682H8.182S9 1.272 9 2.636V4h6v2L9 8l-.5 5 2.5 1.318V15H4v-.682L6.5 13 6 8 0 6V4h6V2.636c0-1.363.818-1.954.818-1.954z"/></symbol><symbol viewBox="0 0 11 11" id="airport-11" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 6.4V6l4.5.5V5L6.5 3.2V1.5C6.5.5 6 0 5.5 0s-1 .5-1 1.5v1.7L0 5v1.4L4.5 6v3.3L3 10v1l2.5-.5L8 11v-1l-1.5-.8V6.4z"/></symbol><symbol viewBox="0 0 15 15" id="airport-15" xmlns="http://www.w3.org/2000/svg"><path d="M15 6.818V8.5l-6.5-1-.318 4.773L11 14v1l-3.5-.682L4 15v-1l2.818-1.727L6.5 7.5 0 8.5V6.818L6.5 4.5v-3s0-1.5 1-1.5 1 1.5 1 1.5v2.818l6.5 2.5z"/></symbol><symbol viewBox="0 0 11 11" id="alcohol-shop-11" xmlns="http://www.w3.org/2000/svg"><path d="M7 4v2.5a1.5 1.5 0 0 0 1 1.41V10h-.5a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1H9V7.91a1.5 1.5 0 0 0 1-1.41V4H7zm2.5 2.5a1 1 0 1 1-2 0v-2h2v2zM4.21 2.85V2.5a.355.355 0 1 0 0-.71v-.35a.35.35 0 0 0-.36-.35h-.71a.35.35 0 0 0-.36.34v.36a.355.355 0 1 0 0 .71v.35C2.79 3.87 1 5 1 6v4.25a.7.7 0 0 0 .71.71h3.58a.79.79 0 0 0 .71-.67V6c0-.91-1.79-2.19-1.79-3.15zM3.5 9a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z"/></symbol><symbol viewBox="0 0 15 15" id="alcohol-shop-15" xmlns="http://www.w3.org/2000/svg"><path d="M14 4h-4v3.5a2 2 0 0 0 1.5 1.93V13H11a.5.5 0 0 0 0 1h2a.5.5 0 0 0 0-1h-.5V9.43A2 2 0 0 0 14 7.5V4zm-1 3.5a1 1 0 1 1-2 0V5h2v2.5zm-7.5-5V2a.5.5 0 0 0 0-1V.5A.5.5 0 0 0 5 0H4a.5.5 0 0 0-.5.5V1a.5.5 0 0 0 0 1v.5C3.5 3.93 1 5.57 1 7v6a1 1 0 0 0 1 1h5a1.1 1.1 0 0 0 1-1V7c0-1.35-2.5-3.15-2.5-4.5zm-1 9.5a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5z"/></symbol><symbol viewBox="0 0 11 11" id="america-football-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.53 2C2.47 2 1 5.5 1 5.5S2.47 9 5.53 9 10 5.5 10 5.5 8.6 2 5.53 2zM7 6H4a.5.5 0 0 1 0-1h3a.5.5 0 0 1 0 1z"/></symbol><symbol viewBox="0 0 15 15" id="america-football-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.53 3C3.09 3 1 7.5 1 7.5S3.09 12 7.53 12 14 7.5 14 7.5 12 3 7.53 3zM11 7v1.5a.5.5 0 0 1-1 0V8H8v.5a.5.5 0 0 1-1 0V8H5v.5a.5.5 0 0 1-1 0v-2a.5.5 0 0 1 1 0V7h2v-.5a.5.5 0 0 1 1 0V7h2v-.5a.5.5 0 0 1 1 0V7z"/></symbol><symbol viewBox="0 0 11 11" id="amusement-park-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 1C3.02 1 1 3.02 1 5.5c0 1.792 1.063 3.332 2.584 4.055L2.5 11h6L7.416 9.555C8.937 8.832 10 7.292 10 5.5 10 3.02 7.98 1 5.5 1zm-.125 1.012v1.994a1.5 1.5 0 0 0-.844.35L3.12 2.942a3.475 3.475 0 0 1 2.256-.931zm.25 0c.874.03 1.66.377 2.256.931L6.469 4.356l-.002-.002a1.5 1.5 0 0 0-.842-.348V2.012zM2.943 3.119l1.412 1.412s0 .002-.002.002a1.5 1.5 0 0 0-.347.842H2.012c.03-.874.377-1.66.931-2.256zm5.114 0c.554.596.9 1.382.931 2.256H6.994a1.5 1.5 0 0 0-.35-.844L8.058 3.12zM2.012 5.625h1.994a1.5 1.5 0 0 0 .35.844L2.942 7.88a3.475 3.475 0 0 1-.931-2.256zm4.982 0h1.994a3.474 3.474 0 0 1-.931 2.256L6.644 6.469l.002-.002a1.5 1.5 0 0 0 .348-.842zm-2.463 1.02s.002 0 .002.002A1.5 1.5 0 0 0 5 6.911v2.04a3.47 3.47 0 0 1-1.88-.895L4.53 6.644zm1.938 0L7.88 8.056A3.47 3.47 0 0 1 6 8.95V6.912a1.5 1.5 0 0 0 .469-.268z"/></symbol><symbol viewBox="0 0 15 15" id="amusement-park-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 0C3.919 0 1 2.919 1 6.5c0 2.316 1.225 4.348 3.057 5.5H4l-1 2h9l-1-2h-.057C12.775 10.848 14 8.816 14 6.5 14 2.919 11.081 0 7.5 0zm-.125 1.506v3.5a1.5 1.5 0 0 0-.844.35L4.057 2.88a4.972 4.972 0 0 1 3.318-1.375zm.25 0c1.29.032 2.45.55 3.318 1.375L8.47 5.356l-.002-.002a1.5 1.5 0 0 0-.842-.348v-3.5zm-3.744 1.55l2.475 2.475-.002.002a1.5 1.5 0 0 0-.348.842h-3.5c.032-1.29.55-2.45 1.375-3.318zm7.238 0a4.972 4.972 0 0 1 1.375 3.319h-3.5a1.5 1.5 0 0 0-.35-.844l2.475-2.474zM2.506 6.626h3.5a1.5 1.5 0 0 0 .35.844L3.88 9.943a4.972 4.972 0 0 1-1.375-3.318zm6.488 0h3.5a4.972 4.972 0 0 1-1.375 3.318L8.645 7.47s0-.002.002-.002a1.5 1.5 0 0 0 .347-.842zm-2.463 1.02s.002 0 .002.002A1.5 1.5 0 0 0 7 7.911v3.563a4.97 4.97 0 0 1-2.943-1.356L6.53 7.645zm1.938 0l2.474 2.474A4.97 4.97 0 0 1 8 11.475V7.912a1.5 1.5 0 0 0 .469-.268z"/></symbol><symbol viewBox="0 0 11 11" id="aquarium-11" xmlns="http://www.w3.org/2000/svg"><path d="M8 1c-.876 0-1.85.092-3.004.527C3.843 1.962 2.848 2.657 2 3.5c-.852.847-2 2.5-2 3s1.135 1.943 2.678 2.621c1.542.678 2.39.798 3.283.895.797.086 1.942-.027 2.885-.233C9.592 9.621 10.994 9.31 11 9c0 0-2.756-.063-3-.5-.249-.445-.25-1.586 0-2 .258-.428 2.5 1 2.5 1 .644.258.644-4.258 0-4 0 0-2.277 1.447-2.5 1-.25-.5-.25-1.5 0-2 .223-.447 3-.5 3-.5 0-.5-2.124-1-3-1zM3.514 4.502a1.014 1.014 0 1 1 0 2.028 1.014 1.014 0 0 1 0-2.028z"/></symbol><symbol viewBox="0 0 15 15" id="aquarium-15" xmlns="http://www.w3.org/2000/svg"><path d="M10.9 11.6c-.3-.6-.3-2.3 0-2.8.4-.6 3.4 1.4 3.4 1.4.9.4.9-6.1 0-5.7 0 0-3.1 2.1-3.4 1.4-.3-.7-.3-2.1 0-2.8.3-.6 4.1-.7 4.1-.7 0-.7-2.9-1.4-4.1-1.4s-2.5.1-4.1.8c-1.6.6-2.9 1.6-4.1 2.8S0 8.2 0 8.9s1.5 2.8 3.7 3.7 3.3 1.1 4.5 1.3c1.1.1 2.6 0 3.9-.3 1-.2 2.9-.7 2.9-1.1 0-.2-3.8-.3-4.1-.9zM4.5 9.3C3.7 9.3 3 8.6 3 7.8s.7-1.5 1.5-1.5S6 7 6 7.8s-.7 1.5-1.5 1.5z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="art-gallery-11" xmlns="http://www.w3.org/2000/svg"><path d="M8.21 3L5.85.65a.5.5 0 0 0-.707-.003L5.14.65 2.79 3H1.5a.5.5 0 0 0-.5.5v6a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-6a.5.5 0 0 0-.5-.5H8.21zM5.5 1.71L6.79 3H4.21L5.5 1.71zM9 9H2V4h7v5zM4.5 5.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0zM8 8H4l.75-1.5.5 1L6.5 5 8 8z"/></symbol><symbol viewBox="0 0 15 15" id="art-gallery-15" xmlns="http://www.w3.org/2000/svg"><path d="M10.71 4L7.85 1.15a.5.5 0 0 0-.707-.003l-.003.003L4.29 4H1.5a.5.5 0 0 0-.5.5v9a.5.5 0 0 0 .5.5h12a.5.5 0 0 0 .5-.5v-9a.5.5 0 0 0-.5-.5h-2.79zM7.5 2.21L9.29 4H5.71L7.5 2.21zM13 13H2V5h11v8zM5 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm7 4H4.5L6 9l1.25 2.5L9.5 7l2.5 5z"/></symbol><symbol viewBox="0 0 11 11" id="attraction-11" xmlns="http://www.w3.org/2000/svg"><path d="M4.5 1.5s-.5 0-.7.5l-.3.5H1c-.6 0-1 .4-1 1v5c0 .6.4 1 1 1h9c.6 0 1-.4 1-1v-5c0-.6-.4-1-1-1H7.5L7.2 2c-.2-.5-.7-.5-.7-.5h-2zm1 2C6.9 3.5 8 4.6 8 6S6.9 8.5 5.5 8.5 3 7.4 3 6s1.1-2.5 2.5-2.5zm0 1.5c-.6 0-1 .4-1 1s.4 1 1 1 1-.4 1-1-.4-1-1-1z" fill="#010101"/></symbol><symbol viewBox="0 0 15 15" id="attraction-15" xmlns="http://www.w3.org/2000/svg"><path d="M6 2c-.554 0-.752.505-1 1l-.5 1h-2C1.669 4 1 4.669 1 5.5v5c0 .831.669 1.5 1.5 1.5h10c.831 0 1.5-.669 1.5-1.5v-5c0-.831-.669-1.5-1.5-1.5h-2L10 3c-.25-.5-.446-1-1-1H6zM2.5 5a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm5 0a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm0 1.5a1.5 1.5 0 0 0 0 3 1.5 1.5 0 0 0 0-3z"/></symbol><symbol viewBox="0 0 11 11" id="bakery-11" xmlns="http://www.w3.org/2000/svg"><path d="M4.5 2c-1 0-1 1-1 1L5 7.5s0 .5.5.5.5-.5.5-.5L7.5 3s0-1-1-1h-2zM9 3.5l-2 4h1.5l1 1h.5c1 0 1-.9 1-.9V6.3L9 3.5zM0 6.3v1.2s.03 1.01 1 1c.97-.01.5 0 .5 0l1-1H4l-2-4-2 2.8z"/></symbol><symbol viewBox="0 0 15 15" id="bakery-15" xmlns="http://www.w3.org/2000/svg"><path d="M5.294 4.382L6 9.5s0 1 1 1h1c1 0 1-1 1-1l.706-5.118C9.706 3 7.5 3 7.5 3S5.291 3 5.294 4.382zM3.5 5C2 5 2 6 2 6l1 4h1.5c.755 0 .794-.765.794-.765L4.5 5h-1zm-2 2.5s-.618-.03-1.059.412C0 8.352 0 8.794 0 8.794V11h.882C2 11 2 10 2 10l-.5-2.5zM11.5 5C13 5 13 6 13 6l-1 4h-1.5c-.755 0-.794-.765-.794-.765L10.5 5h1zm2 2.5s.618-.03 1.059.412c.441.44.441.882.441.882V11h-.882C13 11 13 10 13 10l.5-2.5z"/></symbol><symbol viewBox="0 0 11 11" id="bank-11" xmlns="http://www.w3.org/2000/svg"><path d="M1 2C0 2 0 3 0 3v5c0 1 1 1 1 1h9c1 0 1-1 1-1V3s0-1-1-1H1zm0 1h1.5a.5.5 0 1 1-.5.5l-.5.5a.5.5 0 1 1-.5.5V3zm4.5 0c1.105 0 2 1.12 2 2.5S6.605 8 5.5 8s-2-1.12-2-2.5.895-2.5 2-2.5zm3 0H10v1.5a.5.5 0 1 1-.5-.5L9 3.5a.5.5 0 1 1-.5-.5zm-7 3a.5.5 0 0 1 0 1l.5.5a.5.5 0 1 1 .5.5H1V6.5a.5.5 0 0 1 .5-.5zm8 0a.5.5 0 0 1 .5.5V8H8.5a.5.5 0 1 1 .5-.5l.5-.5a.5.5 0 0 1 0-1z"/><path d="M4.902 4.25a1.157 1.157 0 0 0-.2.25h1.597a1.158 1.158 0 0 0-.201-.25H4.902zm-.316.5c-.029.08-.05.164-.065.25h1.96a1.479 1.479 0 0 0-.065-.25h-1.83zm-.086.5c0 .084.006.168.02.25h1.959c.013-.082.02-.166.021-.25h-2zm.086.5c.031.089.07.173.117.25H6.3c.046-.077.084-.161.115-.25H4.586zm.316.5l.034.031L4.5 6.5h2l-.436-.219.034-.031H4.902zm-.32.5c.029.079.056.16.11.25h1.626c.053-.091.078-.171.106-.25H4.582zm.31.5c.147.141.341.25.608.25.274 0 .47-.108.617-.25H4.893z"/></symbol><symbol viewBox="0 0 15 15" id="bank-15" xmlns="http://www.w3.org/2000/svg"><path d="M1 3c-.554 0-1 .446-1 1v7c0 .554.446 1 1 1h13c.554 0 1-.446 1-1V4c0-.554-.446-1-1-1H1zm0 1h1.5a.5.5 0 1 1-.5.5l-.5.5a.5.5 0 1 1-.5.5V4zm6.5 0C8.88 4 10 5.567 10 7.5S8.88 11 7.5 11 5 9.433 5 7.5 6.12 4 7.5 4zm5 0H14v1.5a.5.5 0 1 1-.5-.5l-.5-.5a.5.5 0 1 1-.5-.5zm-5 1.5c-.323 0-.534.109-.682.25h1.364c-.148-.141-.359-.25-.682-.25zm-.875.5c-.045.091-.062.171-.08.25h1.91c-.018-.079-.034-.159-.08-.25h-1.75zm-.125.5v.25h2V6.5h-2zm0 .5v.25h2V7h-2zm0 .5v.25h2V7.5h-2zm0 .5l-.25.25h2L8.5 8h-2zm-.5.5s.035.102.102.25h2.273L8 8.5H6zM1.5 9a.5.5 0 0 1 0 1l.5.5a.5.5 0 1 1 .5.5H1V9.5a.5.5 0 0 1 .5-.5zm4.738 0c.046.086.076.159.137.25h2.268c.066-.138.107-.25.107-.25H6.238zM13.5 9a.5.5 0 0 1 .5.5V11h-1.5a.5.5 0 1 1 .5-.5l.5-.5a.5.5 0 0 1 0-1zm-6.934.5c.079.091.165.176.26.25h1.42c.1-.077.188-.162.254-.25H6.566z"/></symbol><symbol viewBox="0 0 11 11" id="bar-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.488 1C4.976 1 .5 1 1 1.5L5 6v2.5C5 9 2.5 9 2.5 10h6C8.5 9 6 9 6 8.5V6l4-4.5C10.5 1 6 1 5.488 1zM2.5 2h6l-1 1h-4l-1-1z"/></symbol><symbol viewBox="0 0 15 15" id="bar-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 1c-2 0-7 .25-6.5.75L7 8v4c0 1-3 .5-3 2h7c0-1.5-3-1-3-2V8l6-6.25c.5-.5-4.5-.75-6.5-.75zm0 1c2.5 0 4.75.25 4.75.25L11.5 3h-8l-.75-.75S5 2 7.5 2z"/></symbol><symbol viewBox="0 0 11 11" id="barrier-11" xmlns="http://www.w3.org/2000/svg"><title>barrier-11</title><path d="M9.5 2h-8a.5.5 0 0 0-.5.5v4a.5.5 0 0 0 .5.5H2v2.5a.5.5 0 0 0 1 0V9h5v.5a.5.5 0 0 0 1 0V7h.5a.5.5 0 0 0 .5-.5v-4a.5.5 0 0 0-.5-.5zM2 3h1.5l3 3h-2L2 3.5zm0 3V4.5L3.5 6zm1 2V7h5v1zm6-2H7.5l-3-3h2L9 5.5zm0-1.5L7.5 3H9z"/></symbol><symbol viewBox="0 0 15 15" id="barrier-15" xmlns="http://www.w3.org/2000/svg"><title>barrier-15</title><path d="M13 3H2a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h1v2.5a.5.5 0 0 0 1 0V13h7v.5a.5.5 0 0 0 1 0V11h1a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1zm0 1v2l-2-2zM9.5 4L13 7.5V10L7 4zm-4 6L2 6.5V4l6 6zM2 10V8l2 2zm9 2H4v-1h7zm-.207-2H9.5l-6-6h2l6 6z"/></symbol><symbol viewBox="0 0 11 11" id="baseball-11" xmlns="http://www.w3.org/2000/svg"><path d="M7 3a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm2.85 7.24l-3-4.85a.86.86 0 0 0-.5-.39H2.5a.5.5 0 0 0 0 1H5l.92 1.09-2.73 3a.49.49 0 0 0-.19.41.5.5 0 0 0 .5.5.49.49 0 0 0 .33-.13l3-2.71L9 10.81a.49.49 0 0 0 .38.19.5.5 0 0 0 .5-.5.49.49 0 0 0-.03-.26zM4 .28A.28.28 0 0 0 3.72 0a.49.49 0 0 0-.25.16L2 4.59a.48.48 0 0 0 0 .13c0 .155.125.28.28.28a.49.49 0 0 0 .26-.16L4 .41a.472.472 0 0 0 0-.13z"/></symbol><symbol viewBox="0 0 15 15" id="baseball-15" xmlns="http://www.w3.org/2000/svg"><path d="M10 3.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zM7 .28A.28.28 0 0 0 6.72 0a.49.49 0 0 0-.25.16L4 4.59a.48.48 0 0 0 0 .13c0 .155.125.28.28.28a.49.49 0 0 0 .26-.16L7 .41a.472.472 0 0 0 0-.13zm5.9 13.92L10 6.39A.49.49 0 0 0 9.52 6h-5a.5.5 0 0 0 0 1H7l1.45 2.51-4.27 4.61a.49.49 0 0 0-.18.38.5.5 0 0 0 .5.5.49.49 0 0 0 .33-.13l4.45-4.15 2.76 4a.51.51 0 0 0 .44.26c.28 0 .51-.22.52-.5a.5.5 0 0 0-.1-.28z"/></symbol><symbol viewBox="0 0 11 11" id="basketball-11" xmlns="http://www.w3.org/2000/svg"><path d="M11 1a1 1 0 1 1-2 0 1 1 0 0 1 2 0zM4.5 3a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3zm3.89 6.69L6 6.59V4.5h.5a.49.49 0 0 0 .41-.23l1.5-2A.49.49 0 0 0 8.5 2a.5.5 0 0 0-.86-.34L6.25 3.5H2.5a.5.5 0 0 0-.36.16l-2 2.54a.49.49 0 0 0-.14.3.5.5 0 0 0 .5.5.49.49 0 0 0 .41-.23L2.74 4.5H3v2.09L.61 9.69a.5.5 0 0 0 .39.81.49.49 0 0 0 .41-.23L3.94 7h1.12l2.52 3.27A.5.5 0 0 0 8.5 10a.49.49 0 0 0-.11-.3v-.01z"/></symbol><symbol viewBox="0 0 15 15" id="basketball-15" xmlns="http://www.w3.org/2000/svg"><path d="M9 3.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zM14 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-2.11 12.19L9 9.58V6.5h.5a.49.49 0 0 0 .41-.23l1.94-2.42.06-.08A.49.49 0 0 0 12 3.5a.5.5 0 0 0-.86-.34L9.26 5.5H5.5a.5.5 0 0 0-.36.16l-2 2.54a.49.49 0 0 0-.14.3.5.5 0 0 0 .5.5.49.49 0 0 0 .41-.23L5.74 6.5H6v3.08l-2.89 3.61a.49.49 0 0 0-.11.3.5.5 0 0 0 .5.5.49.49 0 0 0 .41-.23l3-3.77h1.15l3 3.77a.49.49 0 0 0 .41.23.5.5 0 0 0 .5-.5.49.49 0 0 0-.11-.3h.03z"/></symbol><symbol viewBox="0 0 11 11" id="bbq-11" xmlns="http://www.w3.org/2000/svg"><title>bbq-11</title><path d="M4 1.75s0-1 1-1c0 0 .5 0 .5-.5a.25.25 0 1 1 .5 0s0 1-1 1c0 0-.5 0-.5.5a.25.25 0 1 1-.5 0zM2.25 2a.25.25 0 0 0 .25-.25c0-.5.5-.5.5-.5 1 0 1-1 1-1a.25.25 0 1 0-.5 0c0 .5-.5.5-.5.5-1 0-1 1-1 1 0 .138.112.25.25.25zm4 0a.25.25 0 0 0 .25-.25c0-.5.5-.5.5-.5 1 0 1-1 1-1a.25.25 0 1 0-.5 0c0 .5-.5.5-.5.5-1 0-1 1-1 1 0 .138.112.25.25.25zm3.5-2a.25.25 0 0 0-.25.25c0 .5-.5.5-.5.5-1 0-1 1-1 1a.25.25 0 1 0 .5 0c0-.5.5-.5.5-.5 1 0 1-1 1-1A.25.25 0 0 0 9.75 0zM6.675 5.865l-.001.001 2.3 4.782v.009a.242.242 0 0 1-.12.32.247.247 0 0 1-.328-.12L7.845 9.5H4a1.5 1.5 0 1 1-.91-1.379c.053.02.105.045.155.072L4.278 5.85A3.038 3.038 0 0 1 2 3h7s-.002 2.282-2.325 2.865zM3.25 9.5a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0zm2.923-3.544C5.963 5.983 5.742 6 5.5 6c-.285 0-.713-.047-.713-.047l-1.144 2.58c.123.136.218.295.279.467h3.673L6.173 5.956z"/></symbol><symbol viewBox="0 0 15 15" id="bbq-15" xmlns="http://www.w3.org/2000/svg"><title>grill-15</title><path d="M9.32 7.655A4.018 4.018 0 0 0 12 4H3a4.01 4.01 0 0 0 2.63 3.631l-.707 1.413A2.494 2.494 0 1 0 6.49 13h4.223l.335.717a.5.5 0 0 0 .905-.428L9.32 7.655zM4.5 12.75a1.25 1.25 0 1 1 0-2.5 1.25 1.25 0 0 1 0 2.5zM6.95 12a2.49 2.49 0 0 0-1.091-2.594L6.6 7.923a4.91 4.91 0 0 0 1.745 0l1.9 4.07L6.95 12zM4.75 1a.25.25 0 0 0-.25.25c0 .5-.5.5-.5.5-1 0-1 1-1 1a.25.25 0 1 0 .5 0c0-.5.5-.5.5-.5 1 0 1-1 1-1A.25.25 0 0 0 4.75 1zm2 0a.25.25 0 0 0-.25.25c0 .5-.5.5-.5.5-1 0-1 1-1 1a.25.25 0 1 0 .5 0c0-.5.5-.5.5-.5 1 0 1-1 1-1A.25.25 0 0 0 6.75 1zm2 0a.25.25 0 0 0-.25.25c0 .5-.5.5-.5.5-1 0-1 1-1 1a.25.25 0 1 0 .5 0c0-.5.5-.5.5-.5 1 0 1-1 1-1A.25.25 0 0 0 8.75 1zm2 0a.25.25 0 0 0-.25.25c0 .5-.5.5-.5.5-1 0-1 1-1 1a.25.25 0 1 0 .5 0c0-.5.5-.5.5-.5 1 0 1-1 1-1a.25.25 0 0 0-.25-.25zm2 0a.25.25 0 0 0-.25.25c0 .5-.5.5-.5.5-1 0-1 1-1 1a.25.25 0 1 0 .5 0c0-.5.5-.5.5-.5 1 0 1-1 1-1a.25.25 0 0 0-.25-.25z"/></symbol><symbol viewBox="0 0 11 11" id="beer-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 1c-2.3 0-3 .66-3 .66v2a6.6 6.6 0 0 0 .66 2.65 4.13 4.13 0 0 1 0 3s0 .66 2.32.66 2.32-.66 2.32-.66a4.13 4.13 0 0 1 0-3 6.6 6.6 0 0 0 .66-2.65v-2S7.8 1 5.5 1zm0 8.28a4.77 4.77 0 0 1-1.56-.18c.133-.479.2-.973.2-1.47h2.72c-.014.22-.014.44 0 .66.034.274.087.544.16.81a4.77 4.77 0 0 1-1.52.19v-.01zm2.32-6a8.24 8.24 0 0 1-4.63 0L3.18 2a8.28 8.28 0 0 1 4.64 0s.03 1.33 0 1.33v-.05z"/></symbol><symbol viewBox="0 0 15 15" id="beer-15" xmlns="http://www.w3.org/2000/svg"><path d="M12 5V2s-1-1-4.5-1S3 2 3 2v3a9.27 9.27 0 0 0 1 4 5.63 5.63 0 0 1 0 4.5s0 1 3.5 1 3.5-1 3.5-1A5.63 5.63 0 0 1 11 9a9.27 9.27 0 0 0 1-4zm-4.5 8.5a7.368 7.368 0 0 1-2.36-.28c.203-.722.304-1.47.3-2.22h4.12c-.004.75.097 1.498.3 2.22a7.368 7.368 0 0 1-2.36.28zm0-8.5c-1.186.03-2.37-.14-3.5-.5v-2A10.74 10.74 0 0 1 7.5 2a10.74 10.74 0 0 1 3.5.5v2c-1.13.36-2.314.53-3.5.5z"/></symbol><symbol viewBox="0 0 11 11" id="bicycle-11" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 1.5c-.676-.01-.676 1.01 0 1H7v.711l-2.748 1.57L3.738 3.5h.715c.676.01.676-1.01 0-1H2.426c-.676-.01-.676 1.01 0 1h.234l.432 1.078A2.461 2.461 0 0 0 2.5 4.5C1.125 4.5 0 5.625 0 7s1.125 2.5 2.5 2.5S5 8.375 5 7c0-.471-.14-.908-.37-1.285l2.472-1.412.402.408A2.507 2.507 0 0 0 6 7.001c0 1.374 1.125 2.5 2.5 2.5S11 8.374 11 7c0-1.297-1.003-2.358-2.27-2.478L8 3.794V2a.5.5 0 0 0-.5-.5h-1zm-4 4C3.334 5.5 4 6.166 4 7s-.666 1.5-1.5 1.5S1 7.834 1 7s.666-1.5 1.5-1.5zm5.955.004h.002a.45.45 0 0 0 .09 0A1.49 1.49 0 0 1 10 7c0 .834-.666 1.5-1.5 1.5S7 7.835 7 7a1.49 1.49 0 0 1 1.455-1.496z" fill="#010101"/></symbol><symbol viewBox="0 0 15 15" id="bicycle-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 2c-.676-.01-.676 1.01 0 1H9v1.266L6.197 6.6 5.223 4H5.5c.676.01.676-1.01 0-1h-2c-.676-.01-.676 1.01 0 1h.652l.891 2.375A3.45 3.45 0 0 0 3.5 6C1.573 6 0 7.573 0 9.5S1.573 13 3.5 13 7 11.427 7 9.5c0-.67-.2-1.291-.53-1.824l2.821-2.35.463 1.16C8.71 7.094 8 8.211 8 9.5c0 1.927 1.573 3.5 3.5 3.5S15 11.427 15 9.5 13.427 6 11.5 6c-.283 0-.554.043-.818.107L10 4.402V2.5a.5.5 0 0 0-.5-.5h-2zm-4 5a2.48 2.48 0 0 1 1.555.553L3.18 9.115c-.511.427.128 1.195.64.77l1.875-1.563c.188.352.305.75.305 1.178C6 10.887 4.887 12 3.5 12S1 10.887 1 9.5 2.113 7 3.5 7zm8 0C12.887 7 14 8.113 14 9.5S12.887 12 11.5 12 9 10.887 9 9.5c0-.877.447-1.642 1.125-2.088l.91 2.274c.246.623 1.18.25.93-.372l-.908-2.27C11.2 7.02 11.348 7 11.5 7z"/></symbol><symbol viewBox="0 0 11 11" id="bicycle-share-11" xmlns="http://www.w3.org/2000/svg"><path d="M8 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM6.014 2a.5.5 0 0 0-.368.147l-2 2a.5.5 0 0 0 0 .707L5 6.207V8.5a.5.5 0 1 0 1 0V6a.5.5 0 0 0-.144-.353l-.752-.752L6.27 3.692l.832 1.11A.5.5 0 0 0 7.5 5h2a.5.5 0 1 0 0-1H7.75L6.4 2.2a.5.5 0 0 0-.386-.2zm-3.65 4.004a2.502 2.502 0 0 0-2.36 2.492c-.001 1.037.641 1.97 1.61 2.34s2.068.1 2.757-.674a.5.5 0 0 0-.748-.664 1.498 1.498 0 1 1-2.62-1c.002-.624.386-1.179.97-1.4a1.498 1.498 0 0 1 1.654.408.5.5 0 1 0 .749-.663h-.001a2.506 2.506 0 0 0-2.012-.838zm6.279 0a2.499 2.499 0 0 0-2.014.838.5.5 0 1 0 .75.664 1.495 1.495 0 0 1 1.652-.408c.584.221.968.776.969 1.4a1.498 1.498 0 0 1-2.62 1 .5.5 0 1 0-.745.664 2.503 2.503 0 0 0 2.758.674 2.5 2.5 0 1 0-.75-4.832z"/></symbol><symbol viewBox="0 0 15 15" id="bicycle-share-15" xmlns="http://www.w3.org/2000/svg"><path d="M10 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM8.145 2.994a.5.5 0 0 0-.348.143l-2.64 2.5a.5.5 0 0 0 .042.763L7 7.75v2.75c-.01.676 1.01.676 1 0v-3a.5.5 0 0 0-.2-.4l-.767-.577 1.818-1.72.749.998A.5.5 0 0 0 10 6h1.5c.676.01.676-1.01 0-1h-1.25L9.5 4l-.6-.8a.5.5 0 0 0-.384-.206h-.371zM3 7a3 3 0 1 0 0 6 3 3 0 0 0 0-6zm9 0a3 3 0 1 0 0 6 3 3 0 0 0 0-6zM3 8a2 2 0 1 1 0 4 2 2 0 0 1 0-4zm9 0a2 2 0 1 1 0 4 2 2 0 0 1 0-4z"/></symbol><symbol viewBox="0 0 11 11" id="blood-bank-11" xmlns="http://www.w3.org/2000/svg"><title>blood-bank-11</title><path d="M8.405 4.644h.001L5.5 1 2.593 4.644h.002A3.37 3.37 0 0 0 2 6.56a3.464 3.464 0 0 0 3.5 3.43A3.464 3.464 0 0 0 9 6.558a3.37 3.37 0 0 0-.595-1.915zM8 7H6v2H5V7H3V6h2V4h1v2h2v1z"/></symbol><symbol viewBox="0 0 15 15" id="blood-bank-15" xmlns="http://www.w3.org/2000/svg"><title>blood-bank-15</title><path d="M11.2 7.1L7.5 2 3.8 7.1c-.5.7-.8 1.6-.8 2.5C3 12 5 14 7.5 14S12 12 12 9.6c0-.9-.3-1.8-.8-2.5zM10 10H8v2H7v-2H5V9h2V7h1v2h2v1z"/></symbol><symbol viewBox="0 0 11 11" id="buddhism-11" xmlns="http://www.w3.org/2000/svg"><title>buddhism</title><path d="M11 5.8v-.5H9.988A4.473 4.473 0 0 0 8.85 2.554l.827-.827-.354-.354L8.5 2.2a4.474 4.474 0 0 0-2.75-1.138V0h-.5v1.062a4.471 4.471 0 0 0-2.7 1.1l-.875-.886-.355.352.87.872a4.477 4.477 0 0 0-1.178 2.8H0v.5h1.012A4.474 4.474 0 0 0 2.15 8.546l-.827.827.354.354L2.5 8.9a4.474 4.474 0 0 0 2.75 1.138V11h.5v-.962A4.475 4.475 0 0 0 8.5 8.895l.82.831.355-.352-.821-.834A4.473 4.473 0 0 0 9.988 5.8zm-1.439-.5H6.1l2.448-2.444A4.049 4.049 0 0 1 9.561 5.3zM8.194 2.5L5.75 4.946V1.489A4.048 4.048 0 0 1 8.194 2.5zM5.25 1.489v3.4l-2.4-2.428a4.045 4.045 0 0 1 2.4-.972zm-2.759 1.32L4.951 5.3H1.439a4.053 4.053 0 0 1 1.052-2.491zM1.439 5.8H4.9L2.452 8.244A4.049 4.049 0 0 1 1.439 5.8zm1.367 2.8L5.25 6.153V9.61A4.049 4.049 0 0 1 2.806 8.6zM5.75 9.61v-3.5L8.2 8.591A4.049 4.049 0 0 1 5.75 9.61zm2.8-1.374L6.147 5.8h3.414a4.048 4.048 0 0 1-1.007 2.436z"/></symbol><symbol viewBox="0 0 15 15" id="buddhism-15" xmlns="http://www.w3.org/2000/svg"><title>buddhism</title><path d="M13.5 7h-.533a5.464 5.464 0 0 0-1.248-3.011l.378-.378a.5.5 0 1 0-.707-.707l-.378.378A5.465 5.465 0 0 0 8 2.033V1.5a.5.5 0 0 0-1 0v.533a5.465 5.465 0 0 0-3.011 1.249L3.611 2.9a.5.5 0 0 0-.707.707l.378.378A5.464 5.464 0 0 0 2.033 7H1.5a.5.5 0 0 0 0 1h.533a5.464 5.464 0 0 0 1.248 3.011l-.378.378a.5.5 0 1 0 .707.707l.378-.378A5.463 5.463 0 0 0 7 12.967v.533a.5.5 0 0 0 1 0v-.533a5.464 5.464 0 0 0 3.011-1.249l.378.378a.5.5 0 1 0 .707-.707l-.378-.378A5.465 5.465 0 0 0 12.967 8h.533a.5.5 0 0 0 0-1zM8 3.051A4.45 4.45 0 0 1 10.293 4l-2.15 2.15A1.485 1.485 0 0 0 8 6.092zm-1 0v3.041a1.485 1.485 0 0 0-.143.058L4.707 4A4.45 4.45 0 0 1 7 3.051zM4 4.707l2.15 2.15A1.485 1.485 0 0 0 6.092 7H3.051A4.45 4.45 0 0 1 4 4.707zM3.051 8h3.041a1.5 1.5 0 0 0 .058.143L4 10.293A4.449 4.449 0 0 1 3.051 8zM7 11.949A4.45 4.45 0 0 1 4.707 11l2.15-2.15A1.485 1.485 0 0 0 7 8.908zm1 0V8.908a1.478 1.478 0 0 0 .143-.058l2.15 2.15A4.449 4.449 0 0 1 8 11.949zm3-1.656l-2.15-2.15A1.5 1.5 0 0 0 8.908 8h3.042a4.449 4.449 0 0 1-.95 2.293zM8.908 7a1.485 1.485 0 0 0-.058-.143L11 4.707A4.45 4.45 0 0 1 11.949 7z"/></symbol><symbol viewBox="0 0 11 11" id="building-11" xmlns="http://www.w3.org/2000/svg"><path d="M2 1v9h4V6h2v4h1V1H2zm3 8H3V6h2v3zm0-4H3V3h2v2zm3 0H6V3h2v2z"/></symbol><symbol viewBox="0 0 15 15" id="building-15" xmlns="http://www.w3.org/2000/svg"><path d="M3 2v11h5v-3h3v3h1V2H3zm4 10H4v-2h3v2zm0-3H4V7h3v2zm0-3H4V4h3v2zm4 3H8V7h3v2zm0-3H8V4h3v2z"/></symbol><symbol viewBox="0 0 11 11" id="building-alt1-11" xmlns="http://www.w3.org/2000/svg"><title>buildings</title><path d="M8 9.5v-5c0-.3-.2-.5-.5-.5H6V1L3 2v7.5H2v.5h7v-.5H8zm-3 0H4V3h1v6.5z"/></symbol><symbol viewBox="0 0 15 15" id="building-alt1-15" xmlns="http://www.w3.org/2000/svg"><title>buildings</title><path d="M11 13.5v-9c0-.3-.2-.5-.5-.5H9V1L5 2.1v11.4H2v.5h11v-.5h-2zm-4 0V3h1v10.5H7z"/></symbol><symbol viewBox="0 0 11 11" id="bus-11" xmlns="http://www.w3.org/2000/svg"><path d="M3 0C2 0 1 .531 1 2v7.5s0 .5.5.5l.5.016v.484s0 .5.5.5H3s.5 0 .5-.5v-.484l4-.016v.5s0 .5.5.5h.5c.5 0 .5-.5.5-.5v-.484L9.5 10s.5 0 .5-.5V2c0-1.5-1-2-2-2H3zm.75 1h3.5a.25.25 0 1 1 0 .5h-3.5a.25.25 0 1 1 0-.5zM3 2h5c1 0 1 1 1 1v2s0 1-1 1H3C2 6 2 5 2 5V3s0-1 1-1zm-.25 5.5a.75.75 0 1 1 0 1.5.75.75 0 0 1 0-1.5zm5.5 0a.75.75 0 1 1 0 1.5.75.75 0 0 1 0-1.5z"/></symbol><symbol viewBox="0 0 15 15" id="bus-15" xmlns="http://www.w3.org/2000/svg"><path d="M4 0C2.636 0 1 .743 1 2.746V12s0 1 1 1v1s0 1 1 1 1-1 1-1v-1h7v1s0 1 1 1 1-1 1-1v-1s1 0 1-1V2.746C14 .701 12.764 0 11.4 0H4zm.25 1.5h6.5a.25.25 0 1 1 0 .5h-6.5a.25.25 0 1 1 0-.5zM3 3h9c1 0 1 .967 1 .967V7s0 1-1 1H3C2 8 2 7 2 7V4s0-1 1-1zm0 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm9 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/></symbol><symbol viewBox="0 0 11 11" id="cafe-11" xmlns="http://www.w3.org/2000/svg"><path d="M7 9.5a.5.5 0 0 1-.5.5h-4a.5.5 0 0 1 0-1h4a.5.5 0 0 1 .5.5zM8 3H7V2H2v4a2.5 2.5 0 0 0 4.79 1H8a2 2 0 1 0 0-4zm0 3H7V4h1a1 1 0 1 1 0 2z"/></symbol><symbol viewBox="0 0 15 15" id="cafe-15" xmlns="http://www.w3.org/2000/svg"><path d="M12 5h-2V3H2v4a4 4 0 0 0 7.45 2H12a2 2 0 1 0 0-4zm0 3H9.86A4 4 0 0 0 10 7V6h2a1 1 0 1 1 0 2zm-2 4.5a.5.5 0 0 1-.5.5h-7a.5.5 0 0 1 0-1h7a.5.5 0 0 1 .5.5z"/></symbol><symbol viewBox="0 0 11 11" id="campsite-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.92 2.19a.5.5 0 0 0-.85 0L1.5 8h-1a.42.42 0 0 0-.5.39V9.5a.49.49 0 0 0 .5.5h10a.49.49 0 0 0 .5-.5V8.39a.42.42 0 0 0-.5-.39h-1L5.92 2.19zM5.5 3l3 5h-6l3-5z"/></symbol><symbol viewBox="0 0 15 15" id="campsite-15" xmlns="http://www.w3.org/2000/svg"><path d="M7 1.5l-5.5 9H1c-1 0-1 1-1 1v1s0 1 1 1h13c1 0 1-1 1-1v-1s0-1-1-1h-.5L8 1.5c-.2-.4-.8-.4-1 0zM7.5 5l3.2 5.5H4.2L7.5 5z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="car-11" xmlns="http://www.w3.org/2000/svg"><path d="M9 4l-.89-2.66A.5.5 0 0 0 7.64 1H3.36a.5.5 0 0 0-.47.34L2 4a1 1 0 0 0-1 1v3h1v1a1 1 0 1 0 2 0V8h3v1a1 1 0 1 0 2 0V8h1V5a1 1 0 0 0-1-1zM3 7a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm0-3l.62-2h3.76L8 4H3zm5 3a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/></symbol><symbol viewBox="0 0 15 15" id="car-15" xmlns="http://www.w3.org/2000/svg"><path d="M14 7a1.5 1.5 0 0 0-1.15-1.45l-1.39-3.24A.5.5 0 0 0 11 2H4a.5.5 0 0 0-.44.28L2.15 5.54A1.5 1.5 0 0 0 1 7v3.5h1v1a1 1 0 1 0 2 0v-1h7v1a1 1 0 1 0 2 0v-1h1V7zM4.3 3h6.4l1.05 2.5h-8.5L4.3 3zM3 9a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm9 0a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/></symbol><symbol viewBox="0 0 11 11" id="castle-11" xmlns="http://www.w3.org/2000/svg"><path d="M8.67.81v1.48A.69.69 0 0 1 8 3H3.09a.69.69 0 0 1-.7-.7V.81a.345.345 0 0 1 .69 0v.69H4V1a.5.5 0 0 1 1 0v.5h1V1a.5.5 0 0 1 1 0v.5h1V.81a.34.34 0 1 1 .67 0zm1.39 8.82a.35.35 0 0 1-.35.35H1.35a.35.35 0 0 1 0-.7h.35a.68.68 0 0 0 .7-.7s.7-3.2.7-3.89A.68.68 0 0 1 3.79 4h3.48a.68.68 0 0 1 .7.7c0 .7.7 3.89.7 3.89a.68.68 0 0 0 .7.7h.34a.35.35 0 0 1 .35.35v-.01zM6.5 7.5a1 1 0 1 0-2 0v2h2v-2z"/></symbol><symbol viewBox="0 0 15 15" id="castle-15" xmlns="http://www.w3.org/2000/svg"><path d="M11 4H4a1 1 0 0 1-1-1V.5a.5.5 0 0 1 1 0V2h1V1a1 1 0 1 1 2 0v1h1V1a1 1 0 1 1 2 0v1h1V.5a.5.5 0 0 1 1 0V3a1 1 0 0 1-1 1zm3 10.5a.5.5 0 0 1-.5.5h-12a.5.5 0 0 1 0-1H2a1 1 0 0 0 1-1s1-6 1-7a1 1 0 0 1 1-1h5a1 1 0 0 1 1 1c0 1 1 7 1 7a1 1 0 0 0 1 1h.5a.5.5 0 0 1 .5.49v.01zm-5-4a1.5 1.5 0 0 0-3 0V14h3v-3.5z"/></symbol><symbol viewBox="0 0 11 11" id="cemetery-11" xmlns="http://www.w3.org/2000/svg"><path d="M8.65 8H8l1-5.61A.36.36 0 0 0 8.63 2H7.16c0-.65-.7-1-1.67-1s-1.83.35-1.83 1H2.35a.36.36 0 0 0-.35.39L3 8h-.65a.35.35 0 0 0-.35.36V10h7V8.36A.35.35 0 0 0 8.66 8h-.01zM7 5H4V4h3v1z"/></symbol><symbol viewBox="0 0 15 15" id="cemetery-15" xmlns="http://www.w3.org/2000/svg"><path d="M11.46 12h-.68L12 3.55a.52.52 0 0 0-.56-.55h-1.18c0-.92-1.23-2-2.75-2S4.77 2.08 4.77 3H3.54a.52.52 0 0 0-.54.55L4.2 12h-.65a.53.53 0 0 0-.55.5V14h9v-1.51a.52.52 0 0 0-.54-.49zM4.5 5h6v1h-6V5z"/></symbol><symbol viewBox="0 0 11 11" id="cinema-11" xmlns="http://www.w3.org/2000/svg"><path d="M10 5.5v2a.5.5 0 0 1-1 0 .66.66 0 0 0-.51-.5H8v1.63a.37.37 0 0 1-.37.37H1.37A.37.37 0 0 1 1 8.63V5.37A.37.37 0 0 1 1.37 5h6.26a.37.37 0 0 1 .37.37V6h.49A.66.66 0 0 0 9 5.5a.5.5 0 0 1 1 0zM2.5 2a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3zm0 2a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zM6 1a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm0 3a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/></symbol><symbol viewBox="0 0 15 15" id="cinema-15" xmlns="http://www.w3.org/2000/svg"><path d="M14 7.5v2a.5.5 0 0 1-1 0s.06-.5-1-.5h-1v2.5a.5.5 0 0 1-.5.5h-8a.5.5 0 0 1-.5-.5v-4a.5.5 0 0 1 .5-.5h8a.5.5 0 0 1 .5.5V8h1c1.06 0 1-.5 1-.5a.5.5 0 0 1 1 0zM4 3a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm0 3a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm4.5-4a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zm0 4a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z"/></symbol><symbol viewBox="0 0 11 11" id="circle-11" xmlns="http://www.w3.org/2000/svg"><path d="M10 5.5a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0z"/></symbol><symbol viewBox="0 0 15 15" id="circle-15" xmlns="http://www.w3.org/2000/svg"><path d="M14 7.5a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0z"/></symbol><symbol viewBox="0 0 11 11" id="circle-stroked-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 0a5.5 5.5 0 1 1 0 11 5.5 5.5 0 0 1 0-11zm0 1.222a4.278 4.278 0 1 0 0 8.556 4.278 4.278 0 0 0 0-8.556z"/></symbol><symbol viewBox="0 0 15 15" id="circle-stroked-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 0a7.5 7.5 0 1 1 0 15 7.5 7.5 0 0 1 0-15zm0 1.667a5.833 5.833 0 1 0 0 11.666 5.833 5.833 0 0 0 0-11.666z"/></symbol><symbol viewBox="0 0 11 11" id="city-11" xmlns="http://www.w3.org/2000/svg"><title>city-11</title><path d="M9.75 3H9V1.25A.25.25 0 0 0 8.75 1h-.5a.25.25 0 0 0-.25.25V3h-.75a.25.25 0 0 0-.25.25V7H5.251A.251.251 0 0 0 5 7.251v2.5a.251.251 0 0 0 .251.249h4.5A.25.25 0 0 0 10 9.75v-6.5A.25.25 0 0 0 9.75 3zM6 8h1v1H6zm3 1H8V8h1zm0-2H8V6h1zm0-2H8V4h1zM6 1.25A.25.25 0 0 0 5.75 1h-2.5a.25.25 0 0 0-.25.25V2h-.75a.25.25 0 0 0-.25.25V3h-.75a.25.25 0 0 0-.25.25v6.5a.25.25 0 0 0 .25.25H4V6h2zM3 9H2V8h1zm0-2H2V6h1zm0-2H2V4h1zm2 0H4V4h1zm0-2H4V2h1z"/></symbol><symbol viewBox="0 0 15 15" id="city-15" xmlns="http://www.w3.org/2000/svg"><title>city-15</title><path d="M13.639 4H12V1.361A.361.361 0 0 0 11.639 1h-.278a.361.361 0 0 0-.361.361V4H9.361A.361.361 0 0 0 9 4.361V10H5.363a.363.363 0 0 0-.363.363v3.275a.363.363 0 0 0 .363.362h8.276a.361.361 0 0 0 .361-.361V4.361A.361.361 0 0 0 13.639 4zM7 12H6v-1h1zm2 0H8v-1h1zm2 0h-1v-1h1zm0-2h-1V9h1zm0-2h-1V7h1zm0-2h-1V5h1zm2 6h-1v-1h1zm0-2h-1V9h1zm0-2h-1V7h1zm0-2h-1V5h1zM8 1.361A.361.361 0 0 0 7.639 1H5.361A.361.361 0 0 0 5 1.361V3H3.361A.361.361 0 0 0 3 3.361V4H1.361A.361.361 0 0 0 1 4.361v9.278a.361.361 0 0 0 .361.361H4V9h4zM3 12H2v-1h1zm0-2H2V9h1zm0-2H2V7h1zm0-2H2V5h1zm2 2H4V7h1zm0-2H4V5h1zm2 2H6V7h1zm0-2H6V5h1zm0-2H6V3h1z"/></symbol><symbol viewBox="0 0 11 11" id="clothing-store-11" xmlns="http://www.w3.org/2000/svg"><path d="M2.5 1l-2 2v2h2v5h6V5h2V3l-2-2H7L5.5 4 4 1H2.5z"/></symbol><symbol viewBox="0 0 15 15" id="clothing-store-15" xmlns="http://www.w3.org/2000/svg"><path d="M3.5 1L0 4v3h2.9l.1 7h9V7h3V4l-3.5-3H10L7.5 5 5 1H3.5z"/></symbol><symbol viewBox="0 0 11 11" id="college-11" xmlns="http://www.w3.org/2000/svg"><g fill="#010101"><path d="M2 7.3c.3-.2.5-.5.5-.8 0-.4-.2-.7-.6-.9V4.4L5.5 6 11 3.5 5.5 1 0 3.5l1.2.5v1.6c-.4.2-.6.5-.6.9 0 .3.2.6.5.8L.6 9c-.3 1 .5 1 .5 1h1s.8 0 .5-1L2 7.3z"/><path d="M3.5 6.2v.3c0 .4-.2.8-.4 1.1.2.4.4.8.4 1.4v.6c.5.2 1.2.4 2 .4C8 10 9 8.5 9 8.5v-3L5.5 7.1l-2-.9z"/></g></symbol><symbol viewBox="0 0 15 15" id="college-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 1L0 4.5l2 .9v1.7c-.6.2-1 .8-1 1.4s.4 1.2 1 1.4v.1l-.9 2.1C.8 13 1 14 2.5 14s1.7-1 1.4-1.9L3 10c.6-.3 1-.8 1-1.5s-.4-1.2-1-1.4V5.9L7.5 8 15 4.5 7.5 1zm4.4 6.5l-4.5 2L5 8.4v.1c0 .7-.3 1.3-.8 1.8l.6 1.4v.1c.1.4.2.8.1 1.2.7.3 1.5.5 2.5.5 3.3 0 4.5-2 4.5-3v-3z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="commercial-11" xmlns="http://www.w3.org/2000/svg"><path d="M0 5a4.71 4.71 0 0 1 1-3h9a4.71 4.71 0 0 1 1 3H0zm2 1v5h4V7h2v4h1V6H2zm3 3H3V7h2v2z"/></symbol><symbol viewBox="0 0 15 15" id="commercial-15" xmlns="http://www.w3.org/2000/svg"><path d="M14 7H1a11.431 11.431 0 0 1 1-4h11a11.429 11.429 0 0 1 1 4zM3 8h9v6h-1V9H8v5H3V8zm1 3h3V9H4v2z"/></symbol><symbol viewBox="0 0 11 11" id="cricket-11" xmlns="http://www.w3.org/2000/svg"><path d="M6 1a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm2.88 4.18l-1-2A.5.5 0 0 0 7.5 3H2.77a.74.74 0 0 0-.77.65l-1 6.71a.483.483 0 0 0 0 .14.5.5 0 0 0 .5.5.49.49 0 0 0 .5-.36l1.22-3.89.21-.83.4.44L5 7.6v2.9a.5.5 0 0 0 1 0v-3a.48.48 0 0 0-.1-.28L4.45 5.5 5.5 4h1.71l.92 1.84A.49.49 0 0 0 8.5 6a.5.5 0 0 0 .5-.49.88.88 0 0 0-.12-.33zM10.5 8a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1zM8.69 8v-.75a.25.25 0 1 0-.5 0V8a.49.49 0 0 0-.25.42v2.08a.5.5 0 0 0 1 0V8.41A.49.49 0 0 0 8.69 8z"/></symbol><symbol viewBox="0 0 15 15" id="cricket-15" xmlns="http://www.w3.org/2000/svg"><path d="M8 1.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm2.88 5.68l-2-2a.5.5 0 0 0-.4-.18H3.75a.74.74 0 0 0-.75.64l-1 7.7a.483.483 0 0 0 0 .14.5.5 0 0 0 .5.5.49.49 0 0 0 .5-.34l1.2-3.89.26-.83.4.44L6 10.6v2.9a.5.5 0 0 0 1 0v-3a.48.48 0 0 0-.08-.22L5.48 8.5l1-2.5h1.71l2 1.84a.49.49 0 0 0 .37.17.5.5 0 0 0 .44-.51.49.49 0 0 0-.12-.32zM14 11.27a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5zm-3.24-1.53V9a.25.25 0 1 0-.5 0v.74a.49.49 0 0 0-.25.42v3.34a.5.5 0 0 0 1 0v-3.34a.49.49 0 0 0-.25-.42z"/></symbol><symbol viewBox="0 0 11 11" id="cross-11" xmlns="http://www.w3.org/2000/svg"><path d="M2.2 1.19l3.3 3.3L8.8 1.2a.67.67 0 0 1 .5-.2.75.75 0 0 1 .7.7.66.66 0 0 1-.2.48L6.49 5.5 9.8 8.82c.13.126.202.3.2.48a.75.75 0 0 1-.7.7.67.67 0 0 1-.5-.2L5.5 6.51 2.21 9.8a.67.67 0 0 1-.5.2.75.75 0 0 1-.71-.71.66.66 0 0 1 .2-.48L4.51 5.5 1.19 2.18A.66.66 0 0 1 1 1.7a.75.75 0 0 1 .7-.7.67.67 0 0 1 .5.19z"/></symbol><symbol viewBox="0 0 15 15" id="cross-15" xmlns="http://www.w3.org/2000/svg"><path d="M2.64 1.27L7.5 6.13l4.84-4.84A.92.92 0 0 1 13 1a1 1 0 0 1 1 1 .9.9 0 0 1-.27.66L8.84 7.5l4.89 4.89A.9.9 0 0 1 14 13a1 1 0 0 1-1 1 .92.92 0 0 1-.69-.27L7.5 8.87l-4.85 4.85A.92.92 0 0 1 2 14a1 1 0 0 1-1-1 .9.9 0 0 1 .27-.66L6.16 7.5 1.27 2.61A.9.9 0 0 1 1 2a1 1 0 0 1 1-1c.24.003.47.1.64.27z"/></symbol><symbol viewBox="0 0 11 11" id="dam-11" xmlns="http://www.w3.org/2000/svg"><path d="M10 7.51a.5.5 0 0 1-.5.5 1 1 0 0 0-.67.34 2.14 2.14 0 0 1-1 .6 1.89 1.89 0 0 1-1.76-.37l-.34-.35a.77.77 0 0 0-1.08 0L5 9.38a.5.5 0 0 1-.5.62h-3a.5.5 0 0 1-.5-.5v-8a.5.5 0 0 1 .49-.5h.7a.5.5 0 0 1 .49.39l.73 2.51.1-.06c.16-.12.31-.27.49-.4a1.9 1.9 0 0 1 2.45 0c.15.13.29.27.44.39a.75.75 0 0 0 1 0l.41-.4A1.78 1.78 0 0 1 9.49 3a.5.5 0 0 1 0 1 1 1 0 0 0-.67.34 2.14 2.14 0 0 1-1 .6 1.89 1.89 0 0 1-1.76-.37l-.33-.34a.77.77 0 0 0-1.089-.011l-.011.011c-.14.12-.27.25-.42.37a2 2 0 0 1-.52.29l.67 2.32a1.88 1.88 0 0 1 2.06.24c.15.13.29.27.44.39a.75.75 0 0 0 1 0l.44-.42A1.78 1.78 0 0 1 9.49 7a.5.5 0 0 1 .51.51z"/></symbol><symbol viewBox="0 0 15 15" id="dam-15" xmlns="http://www.w3.org/2000/svg"><path d="M13.94 9.5a.5.5 0 0 1-.5.5 1 1 0 0 0-.67.34 2.14 2.14 0 0 1-1 .6 1.89 1.89 0 0 1-1.76-.37l-.39-.35a.77.77 0 0 0-1.089-.011l-.011.011c-.14.12-.27.25-.42.37a1.91 1.91 0 0 1-2.46-.07l-.34-.33-.1-.06.3 1.22.49 2a.5.5 0 0 1-.49.65h-4a.5.5 0 0 1-.5-.5v-12a.5.5 0 0 1 .5-.5h1.1a.5.5 0 0 1 .49.39L4 5.06v.14a1.88 1.88 0 0 1 2 .24c.16.13.31.28.47.41a.75.75 0 0 0 1 0c.16-.13.31-.28.47-.41a1.9 1.9 0 0 1 2.45 0c.15.13.29.27.44.39a.75.75 0 0 0 1 0l.47-.41A1.78 1.78 0 0 1 13.43 5a.5.5 0 0 1 0 1 1 1 0 0 0-.67.34 2.14 2.14 0 0 1-1 .6A1.89 1.89 0 0 1 10 6.57l-.33-.34a.77.77 0 0 0-1.089-.011l-.011.011c-.14.12-.27.25-.42.37a1.91 1.91 0 0 1-2.46-.07l-.39-.34a.75.75 0 0 0-1 0l-.06.05L4.93 9A1.9 1.9 0 0 1 6 9.43c.16.13.31.28.47.41a.75.75 0 0 0 1 0c.16-.13.31-.28.47-.41a1.9 1.9 0 0 1 2.45 0c.15.13.29.27.44.39a.75.75 0 0 0 1 0l.47-.41A1.78 1.78 0 0 1 13.43 9a.5.5 0 0 1 .51.5z"/></symbol><symbol viewBox="0 0 11 11" id="danger-11" xmlns="http://www.w3.org/2000/svg"><path d="M6.62 8.5l3.11 1.55-.45.89L5.5 9.06l-3.78 1.89-.45-.89L4.38 8.5l-3.1-1.55.45-.89L5.5 7.94l3.78-1.89.44.9-3.1 1.55zM8.5 3.21v.29l-1 1v1l-2 1-2-1v-1l-1-1V3a2.9 2.9 0 0 1 3-3 3.09 3.09 0 0 1 3 3.21zm-3.79-.5a.79.79 0 1 0-.79.79.79.79 0 0 0 .79-.79zM5 4.5h-.5v1H5v-1zm1.5 0H6v1h.5v-1zm1.36-1.79a.79.79 0 1 0-.79.79.79.79 0 0 0 .79-.79z"/></symbol><symbol viewBox="0 0 15 15" id="danger-15" xmlns="http://www.w3.org/2000/svg"><path d="M13.94 14.68a.5.5 0 0 1-.47.32c-.06.01-.12.01-.18 0L7.5 12.56 1.7 15a.5.5 0 0 1-.648-.284l-.002-.006a.5.5 0 0 1 .29-.71l4.85-2-4.85-2a.5.5 0 1 1 .36-.93l5.8 2.41 5.8-2.41a.5.5 0 1 1 .36.93L8.8 12l4.85 2a.5.5 0 0 1 .29.68zM12 4.23v.45a1 1 0 0 1-.2.59A17.718 17.718 0 0 1 10 7v1.16a.5.5 0 0 1-.32.47l-2.16.87h-.07l-2.17-.87A.5.5 0 0 1 5 8.16V7a17.563 17.563 0 0 1-1.82-1.73A1 1 0 0 1 3 4.68v-.45A4.6 4.6 0 0 1 7.11 0h.75A4.59 4.59 0 0 1 12 4.23zM6 4a1 1 0 1 0-2 0 1 1 0 0 0 2 0zm1 3a.5.5 0 0 0-1 0v.5a.5.5 0 0 0 1 0V7zm2 0a.5.5 0 0 0-1 0v.5a.5.5 0 0 0 1 0V7zm2-3a1 1 0 1 0-2 0 1 1 0 0 0 2 0z"/></symbol><symbol viewBox="0 0 11 11" id="defibrillator-11" xmlns="http://www.w3.org/2000/svg"><title>defibrillator-11</title><path d="M1.42 4.795C-.213 1.53 3.933-.65 5.512 2.615c1.58-3.266 5.725-1.086 4.092 2.18-.023.038-.048.074-.071.111H8.387l-.828-1.654a.65.65 0 0 0-1.118 0L5 6.134l-.441-.882A.624.624 0 0 0 4 4.906H1.491l-.071-.11zM8 6.156a.624.624 0 0 1-.559-.345L7 4.929 5.559 7.81a.624.624 0 0 1-1.118 0l-.828-1.654H2.301a24.227 24.227 0 0 0 2.897 3.45l.015.015a.44.44 0 0 0 .622-.016 24.229 24.229 0 0 0 2.89-3.449H8z"/></symbol><symbol viewBox="0 0 15 15" id="defibrillator-15" xmlns="http://www.w3.org/2000/svg"><title>defibrillator-15</title><path d="M1.55 6.338c-2.387-4.596 3.63-7.66 5.952-3.064 2.321-4.597 8.339-1.533 5.952 3.064-.087.167-.203.346-.311.521h-1.808L9.52 4.138a.625.625 0 0 0-1.1.114l-1.648 4.12-1.33-1.33A.625.625 0 0 0 5 6.86H1.861c-.109-.175-.224-.354-.311-.52zM11 8.11a.626.626 0 0 1-.52-.278L9.139 5.82 7.58 9.717a.625.625 0 0 1-.455.38.605.605 0 0 1-.125.012.625.625 0 0 1-.442-.182L4.741 8.109H2.736a42.67 42.67 0 0 0 4.46 4.674.464.464 0 0 0 .622 0 43.26 43.26 0 0 0 4.45-4.674H11z"/></symbol><symbol viewBox="0 0 11 11" id="dentist-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.48 6A2 2 0 0 0 4 7c-.46 1.21-.14 3-.82 3S2.7 8.49 2.5 7a16.259 16.259 0 0 0-.76-1.89C1.53 3.7 1 1.28 2.67 1S4.35 2.52 5.5 2.52 6.67.72 8.33 1s1.14 2.7.93 4.11A16.259 16.259 0 0 0 8.5 7c-.2 1.49 0 3-.68 3S7.46 8.21 7 7a2 2 0 0 0-1.48-1h-.04z"/></symbol><symbol viewBox="0 0 15 15" id="dentist-15" xmlns="http://www.w3.org/2000/svg"><path d="M4.36 14c-1 0-.56-2.67-.86-5-.1-.76-1-1.49-1.12-2.06C2 5 1.39 1.44 3.66 1S6 3 7.54 3 9.11.64 11.39 1s1.59 3.9 1.29 5.9c-.1.45-1.1 1.48-1.18 2.06-.33 2.4.32 5-.8 5-.93 0-1.32-2.72-2-4.5C8.43 8.63 8.06 8 7.54 8 6 8 5.75 14 4.36 14z"/></symbol><symbol viewBox="0 0 11 11" id="doctor-11" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 5.87A1.48 1.48 0 1 0 7.65 7.3v.42a1.855 1.855 0 1 1-3.71 0A3.27 3.27 0 0 1 5.05 5.4H5a2.58 2.58 0 0 0 1.17-2.12V1.79A1.11 1.11 0 0 0 5.06.68H4.5a.37.37 0 0 0 0 .74h.55a.37.37 0 0 1 .37.37v1.49a1.85 1.85 0 0 1-1.84 1.85v.27-.27a1.85 1.85 0 0 1-1.86-1.84v-1.5a.37.37 0 0 1 .37-.37h.52a.37.37 0 0 0 0-.74h-.52A1.11 1.11 0 0 0 1 1.79v1.49A2.58 2.58 0 0 0 2.1 5.4a3.27 3.27 0 0 1 1.1 2.32 2.595 2.595 0 1 0 5.19 0V7.3A1.48 1.48 0 0 0 9.5 5.87zM8 6.61a.74.74 0 1 1 .74-.74.74.74 0 0 1-.74.74z"/></symbol><symbol viewBox="0 0 15 15" id="doctor-15" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 7A2.5 2.5 0 0 1 3 4.5v-2a.5.5 0 0 1 .5-.5H4a.5.5 0 0 0 0-1h-.5A1.5 1.5 0 0 0 2 2.5v2a3.49 3.49 0 0 0 1.51 2.87A4.41 4.41 0 0 1 5 10.5a3.5 3.5 0 1 0 7 0v-.57a2 2 0 1 0-1 0v.57a2.5 2.5 0 0 1-5 0 4.41 4.41 0 0 1 1.5-3.13A3.49 3.49 0 0 0 9 4.5v-2A1.5 1.5 0 0 0 7.5 1H7a.5.5 0 0 0 0 1h.5a.5.5 0 0 1 .5.5v2A2.5 2.5 0 0 1 5.5 7m6 2a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/></symbol><symbol viewBox="0 0 11 11" id="dog-park-11" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 1s-.346.037-.5.5l-.5 2 2 1.5H10c1 0 1-1 1-1L9.5 2.5C9 2 8.5 2 8 2v-.5S8 1 7.5 1zm-5 1s-.353-.007-.723.178S1 2.833 1 3.5v2C1 6.5 1 7 .5 7c0 0-.5 0-.5.5v2s0 .5.5.5.5-.5.5-.5V8c.354 0 .69-.137 1-.299V9.5s0 .5.5.5.5-.5.5-.5V7h3l.664 1.992C7 10 7.5 10 7.5 10H8s.5 0 .5-.5S8 9 8 9V6.5c0-.89-.632-1.255-1-1.5L5.498 4H2v-.5c0-.333.092-.362.223-.428C2.353 3.007 2.5 3 2.5 3c.676.01.676-1.01 0-1z"/></symbol><symbol viewBox="0 0 15 15" id="dog-park-15" xmlns="http://www.w3.org/2000/svg"><path d="M10.3 1.22c-.386 0-.7-.02-.8.78l-.4 2.521L11.5 6.5h2c1.4 0 1.5-.959 1.5-.959l-1.9-2.219c-.7-.7-1.4-.822-2.1-.822V2s.067-.78-.7-.78zm-5.55.28s-.95.02-1.55.22c-.6.2-1.2.901-1.2 1.901v3.9C2 9.221 1.3 9.5 1 9.5c0 0-1 .021-1 1.021v2.2s0 .8.8.8H2V12.822c0-.4-.2-.6-.5-.7v-1.1c1 0 1.1-.201 1.5-.301l.55 2.197c.1.3.2.5.5.6h1L6 13.5v-.8c0-.677-1-.7-1-.7V9.5h3.5l.7 2.621c.4 1.4 1.3 1.379 1.3 1.379H12v-.8c0-.713-1-.7-1-.7l.1-4.078L8 5.5H3.5v-2c0-.4.276-.495.5-.5.494-.012.75 0 .75 0a.75.75 0 0 0 0-1.5zm7 2.5a.25.25 0 1 1 0 .5.25.25 0 0 1 0-.5z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="drinking-water-11" xmlns="http://www.w3.org/2000/svg"><title>drinking-water-11</title><path d="M5 11H3a.51.51 0 0 1-.5-.4L1 5.6a.5.5 0 0 1 .5-.6h5a.5.5 0 0 1 .5.6l-1.49 5A.51.51 0 0 1 5 11zM2.76 8h2.46l.67-2H2.11zM4.5 0A1.5 1.5 0 0 0 3 1.51v2a.5.5 0 0 0 .5.5h1A.5.5 0 0 0 5 3.5v-1a.5.5 0 0 1 .5-.5H10V0H4.5z"/></symbol><symbol viewBox="0 0 15 15" id="drinking-water-15" xmlns="http://www.w3.org/2000/svg"><title>drinking-water-15</title><path d="M6 1a2 2 0 0 0-2 2v3.5a.5.5 0 0 0 .5.5h2a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 1 .5-.5H14V1H6zM7 15H4a.5.5 0 0 1-.48-.38L2 8.62A.5.5 0 0 1 2.5 8h6a.5.5 0 0 1 .5.62l-1.5 6A.5.5 0 0 1 7 15zm-3.35-4h3.71l.5-2H3.14z"/></symbol><symbol viewBox="0 0 11 11" id="embassy-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 2a4.07 4.07 0 0 0-2.41 1.06.36.36 0 0 0-.09.24v3.32a.34.34 0 0 0 .57.27 3.23 3.23 0 0 1 1.93-.67C6.61 6.22 6.85 7 8 7a3.08 3.08 0 0 0 1.83-.84.36.36 0 0 0 .17-.32V2.37A.35.35 0 0 0 9.5 2a3.13 3.13 0 0 1-1.5.67C6.85 2.67 6.65 2 5.5 2zm-4-.5a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm.5 3v6a.5.5 0 0 1-1 0v-6a.5.5 0 0 1 1 0z"/></symbol><symbol viewBox="0 0 15 15" id="embassy-15" xmlns="http://www.w3.org/2000/svg"><path d="M6.65 2C5.43 2 4.48 3.38 4.11 3.82a.49.49 0 0 0-.11.32v4.4a.44.44 0 0 0 .72.36 3 3 0 0 1 1.93-1.17C8.06 7.73 8.6 9 10.07 9a5.28 5.28 0 0 0 2.73-1.09.49.49 0 0 0 .2-.4V2.45a.44.44 0 0 0-.62-.45 5.75 5.75 0 0 1-2.31 1.06C8.6 3.08 8.12 2 6.65 2zM2.5 3a1 1 0 1 1 0-2 1 1 0 0 1 0 2zM3 4v9.48a.5.5 0 0 1-1 0V4a.5.5 0 0 1 1 0z"/></symbol><symbol viewBox="0 0 11 11" id="emergency-phone-11" xmlns="http://www.w3.org/2000/svg"><title>emergency-phone-11</title><path d="M8.87 8.53a.73.73 0 0 0 0-1l-.74-.74a.73.73 0 0 0-1 0zm-4.6-4.56a.73.73 0 0 0 0-1l-.71-.71a.73.73 0 0 0-1 0zM3.04 5.65l2.31 2.31a.37.37 0 0 0 .52 0l.44-.43 1.76 1.74a2.27 2.27 0 0 1-1.34.73h-1a1.345 1.345 0 0 1-1-.52L1.52 6.27a1.345 1.345 0 0 1-.52-1v-1a2.27 2.27 0 0 1 .73-1.34l1.74 1.76-.43.44a.37.37 0 0 0 0 .52M8 2.5H6.5v1H8V5h1V3.5h1.5v-1H9V1H8z"/></symbol><symbol viewBox="0 0 15 15" id="emergency-phone-15" xmlns="http://www.w3.org/2000/svg"><title>emergency-phone-15</title><path d="M7.875 11.49a.51.51 0 0 0 .72 0l.72-.72 2.18 2.16-.37.37a2.24 2.24 0 0 1-1.44.7H8.24a2.24 2.24 0 0 1-1.45-.7L1.72 8.23A2.24 2.24 0 0 1 1 6.78V5.33a2.24 2.24 0 0 1 .72-1.45l.36-.36 2.18 2.17-.73.73a.51.51 0 0 0 0 .72zm4.72.38a1 1 0 0 0 .036-1.414l-.036-.036-.72-.72a1 1 0 0 0-1.414-.036l-.036.036zm-7.28-7.25a1 1 0 0 0 .036-1.414l-.756-.756a1 1 0 0 0-1.414-.036l-.041.036zM10 2v2H8v1h2v2h1V5h2V4h-2V2z"/></symbol><symbol viewBox="0 0 11 11" id="entrance-11" xmlns="http://www.w3.org/2000/svg"><path d="M4 2.25a.75.75 0 1 1 1.5 0 .75.75 0 0 1-1.5 0zM9.27 4H7.88a.73.73 0 0 0-.52.21l-4 4a.73.73 0 0 1-.51.21H1.73a.73.73 0 1 0 0 1.46h1.89a.73.73 0 0 0 .51-.21l4-4a.73.73 0 0 1 .48-.17h.66a.73.73 0 0 0 .73-.73.73.73 0 0 0-.73-.77zm-4.52-.5a.75.75 0 0 0-.75.75V6l1.5-1.5v-.25a.75.75 0 0 0-.75-.75z"/></symbol><symbol viewBox="0 0 15 15" id="entrance-15" xmlns="http://www.w3.org/2000/svg"><path d="M7 6.5v-1a1 1 0 1 0-2 0v3l2-2zm-2.35 4.06L5 3a1 1 0 1 1 2 0 1 1 0 0 1-2 0l-.35 7.56z"/><path d="M14 6a1 1 0 0 1-1 1h-1.58a1 1 0 0 0-.71.29l-5.42 5.42a1 1 0 0 1-.7.29H2a1 1 0 1 1 0-2h1.59a1 1 0 0 0 .7-.29l5.42-5.42a1 1 0 0 1 .71-.29H13a1 1 0 0 1 1 1z"/></symbol><symbol viewBox="0 0 11 11" id="entrance-alt1-11" xmlns="http://www.w3.org/2000/svg"><title>entrance-alt1-11</title><path d="M4.793 7.263a.5.5 0 0 0 .707.707l2.243-2.293a.25.25 0 0 0 0-.354L5.489 3.042a.5.5 0 0 0-.707.707L6 5H1.5a.5.5 0 0 0 0 1H6zM9 1H4.5a.5.5 0 0 0 0 1h4a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-.5.5h-4a.5.5 0 0 0 0 1H9a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1z"/></symbol><symbol viewBox="0 0 15 15" id="entrance-alt1-15" xmlns="http://www.w3.org/2000/svg"><title>entrance-alt1-15</title><path d="M6.554 9.639a.5.5 0 0 0 .707.707l2.667-2.677a.25.25 0 0 0 0-.354L7.261 4.639a.5.5 0 0 0-.707.707L8.2 7H1.5a.5.5 0 0 0 0 1h6.7zM12 1H5.5a.5.5 0 0 0 0 1h6a.5.5 0 0 1 .5.5v10a.5.5 0 0 1-.5.5H5.25a.5.5 0 0 0 0 1H12a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1z"/></symbol><symbol viewBox="0 0 11 11" id="farm-11" xmlns="http://www.w3.org/2000/svg"><title>farm-11</title><path d="M6 5L4 4 2 5 1 7v3h1.5V8h3v2H7V7zM5 7H3V5.5h2V7z" fill="#231f20"/><path d="M10 2a1 1 0 0 0-2 0v8h2V2z" fill="#010101"/></symbol><symbol viewBox="0 0 15 15" id="farm-15" xmlns="http://www.w3.org/2000/svg"><title>farm-15</title><path d="M8 7L5 5 2 7 1 9v4h2v-2h4v2h2V9zM6 9H4V7h2v2zm8 4h-3V3.5a1.5 1.5 0 0 1 3 0V13z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="fast-food-11" xmlns="http://www.w3.org/2000/svg"><path d="M10 8a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2h9zm0-3H1a1 1 0 1 0 0 2h9a1 1 0 1 0 0-2zM8.55 1H2.46A1.46 1.46 0 0 0 1 2.46V4h9V2.47A1.46 1.46 0 0 0 8.55 1zm-5 2A.5.5 0 1 1 4 2.5a.5.5 0 0 1-.5.5h.05zm4 0A.5.5 0 1 1 8 2.5a.5.5 0 0 1-.5.5h.05z"/></symbol><symbol viewBox="0 0 15 15" id="fast-food-15" xmlns="http://www.w3.org/2000/svg"><path d="M14 8a1 1 0 0 1-1 1H2a1 1 0 1 1 0-2h11a1 1 0 0 1 1 1zM3.5 10H2a3 3 0 0 0 3 3h5a3 3 0 0 0 3-3H3.5zM3 6H2V4a2 2 0 0 1 2-2h7a2 2 0 0 1 2 2v2H3zm8-1.5a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0zm-2-1a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0zm-2 1a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0zm-2-1a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0zm-2 1a.5.5 0 1 0 1 0 .5.5 0 0 0-1 0z"/></symbol><symbol viewBox="0 0 11 11" id="fence-11" xmlns="http://www.w3.org/2000/svg"><title>fence-11</title><path d="M9.5 7H9V5h.5a.5.5 0 0 0 0-1H9V3l-.278-.555a.254.254 0 0 0-.443 0L8 3v1H7V3l-.278-.555a.254.254 0 0 0-.443 0L6 3v1H5V3l-.278-.555a.254.254 0 0 0-.443 0L4 3v1H3V3l-.278-.555a.254.254 0 0 0-.443 0L2 3v1h-.5a.5.5 0 0 0 0 1H2v2h-.5a.5.5 0 0 0 0 1H2v.5a.5.5 0 0 0 1 0V8h1v.5a.5.5 0 0 0 1 0V8h1v.5a.5.5 0 0 0 1 0V8h1v.5a.5.5 0 0 0 1 0V8h.5a.5.5 0 0 0 0-1zM3 7V5h1v2zm2 0V5h1v2zm2 0V5h1v2z"/></symbol><symbol viewBox="0 0 15 15" id="fence-15" xmlns="http://www.w3.org/2000/svg"><title>fence-15</title><path d="M13.5 10H13V7h.5a.5.5 0 0 0 0-1H13V4l-.286-.573a.249.249 0 0 0-.424-.006L12 4v2h-1V4l-.286-.573a.249.249 0 0 0-.424-.006L10 4v2H9V4l-.286-.573a.249.249 0 0 0-.424-.006L8 4v2H7V4l-.286-.573a.249.249 0 0 0-.424-.006L6 4v2H5V4l-.286-.573a.249.249 0 0 0-.424-.006L4 4v2H3V4l-.286-.573a.249.249 0 0 0-.424-.006L2 4v2h-.5a.5.5 0 0 0 0 1H2v3h-.5a.5.5 0 0 0 0 1H2v1.5a.5.5 0 0 0 1 0V11h1v1.5a.5.5 0 0 0 1 0V11h1v1.5a.5.5 0 0 0 1 0V11h1v1.5a.5.5 0 0 0 1 0V11h1v1.5a.5.5 0 0 0 1 0V11h1v1.5a.5.5 0 0 0 1 0V11h.5a.5.5 0 0 0 0-1zM3 10V7h1v3zm2 0V7h1v3zm2 0V7h1v3zm2 0V7h1v3zm2 0V7h1v3z"/></symbol><symbol viewBox="0 0 11 11" id="ferry-11" xmlns="http://www.w3.org/2000/svg"><path d="M11 9.45v.77a.83.83 0 0 0-.57.26 1.86 1.86 0 0 1-.81.46 1.74 1.74 0 0 1-1.49-.29l-.33-.27a.71.71 0 0 0-.93 0c-.12.09-.23.2-.35.28a1.75 1.75 0 0 1-2.1-.05l-.33-.27a.69.69 0 0 0-.83 0c-.16.11-.3.25-.46.36a1.75 1.75 0 0 1-2 0l-.26-.21a.82.82 0 0 0-.54-.27v-.77a1.16 1.16 0 0 1 .63.11c.234.13.458.276.67.44a.76.76 0 0 0 .7.2.82.82 0 0 0 .26-.12c.13-.09.25-.2.38-.3a1.75 1.75 0 0 1 2.07 0l.4.31a.69.69 0 0 0 .81 0l.4-.31a1.75 1.75 0 0 1 2.08 0l.38.3a.69.69 0 0 0 .82 0l.4-.31a1.61 1.61 0 0 1 1-.32zM2.61 7.61L1 5l1-.91V1.15A1.18 1.18 0 0 1 3.19 0h4.62A1.18 1.18 0 0 1 9 1.15v2.94L10 5 8.39 7.62a2.22 2.22 0 0 0-2.65.14L5.5 8l-.2-.18a2.22 2.22 0 0 0-2.69-.21zm.2-4L5.5 2l2.69 1.63V1.15a.36.36 0 0 0-.38-.38H3.19a.36.36 0 0 0-.38.38v2.48-.02z"/></symbol><symbol viewBox="0 0 15 15" id="ferry-15" xmlns="http://www.w3.org/2000/svg"><path d="M5.33 11a3 3 0 0 1 1.85.67l.26.23h.05l.31-.28a2.89 2.89 0 0 1 3.44-.18L13.5 7 12 6V2.45A1.54 1.54 0 0 0 10.5 1H10a.94.94 0 0 0-1-1H6a.94.94 0 0 0-1 1h-.5A1.54 1.54 0 0 0 3 2.45V6L1.5 7l2.25 4.53A2.93 2.93 0 0 1 5.33 11zM4 2.45A.47.47 0 0 1 4.5 2h6a.47.47 0 0 1 .5.5v3l-3.5-2L4 5.45v-3zM14 13v1a1 1 0 0 0-.68.34 2.15 2.15 0 0 1-1 .6 1.91 1.91 0 0 1-1.77-.37l-.39-.35a.78.78 0 0 0-1.1 0c-.14.12-.27.25-.42.37a1.92 1.92 0 0 1-2.48-.07l-.39-.35a.76.76 0 0 0-1 0c-.19.15-.36.32-.55.47a1.91 1.91 0 0 1-2.35-.06l-.31-.27A.94.94 0 0 0 1 14v-1c.259-.032.52.017.75.14a6.2 6.2 0 0 1 .79.58.84.84 0 0 0 .81.25.93.93 0 0 0 .31-.16c.16-.12.29-.26.45-.39a1.92 1.92 0 0 1 2.45 0c.16.13.31.28.47.41a.76.76 0 0 0 1 0c.16-.13.31-.28.47-.41a1.92 1.92 0 0 1 2.46 0c.15.13.29.27.44.39a.76.76 0 0 0 1 0l.47-.41c.32-.26.719-.4 1.13-.4z"/></symbol><symbol viewBox="0 0 11 11" id="fire-station-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 0l-2 4L2 2c-.405.712-2 2.167-2 4 0 2.7 2.8 5 5.5 5S11 8.7 11 6c0-1.833-1.595-3.288-2-4L7.5 4l-2-4zm0 5.5s2 1.585 2 3c0 .611-.778 1.278-2 1.278s-2-.667-2-1.278c0-1.366 2-3 2-3z"/></symbol><symbol viewBox="0 0 15 15" id="fire-station-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5.5L5 4.5l-1.5-2C2.945 3.475.804 5.792.804 8.304a6.696 6.696 0 1 0 13.392 0c0-2.512-2.141-4.829-2.696-5.804l-1.5 2-2.5-4zm0 6.5S10 9.562 10 11.5c0 .837-.826 2-2.5 2S5 12.337 5 11.5C5 9.628 7.5 7 7.5 7z"/></symbol><symbol viewBox="0 0 11 11" id="florist-11" xmlns="http://www.w3.org/2000/svg"><title>florist-11</title><path d="M1 2.5a3.1 3.1 0 0 0-1-2A3.9 3.9 0 0 1 2 2l.526-2 .437 2a3.9 3.9 0 0 1 2-1.5 3.1 3.1 0 0 0-1 2A1.307 1.307 0 0 1 2.662 4h-.253A1.36 1.36 0 0 1 1 2.5zm8 6.482l2-.437-2-.527a3.9 3.9 0 0 0 1.5-2 3.1 3.1 0 0 1-2 1A1.36 1.36 0 0 0 7 8.427v.253a1.307 1.307 0 0 0 1.5 1.3 3.1 3.1 0 0 1 2 1A3.9 3.9 0 0 0 9 8.982zM3.4 7.9l2.713-2.719a1.382 1.382 0 0 1-.436-.271L3.044 7.543l-.279-.279A11.045 11.045 0 0 0 3 4.5h-.5a15.272 15.272 0 0 1-.161 2.338l-.088-.088a.247.247 0 0 0-.4.071L.059 10.657a.27.27 0 0 0-.026.108.25.25 0 0 0 .25.25.27.27 0 0 0 .089-.021L.378 11l3.8-1.85a.247.247 0 0 0 .068-.4l-.063-.063A12.768 12.768 0 0 1 6.5 8.5V8a10.381 10.381 0 0 0-2.724.275zm3.843-5.378a.75.75 0 0 1 .018-1.5.739.739 0 0 1 .561.266.75.75 0 1 1 1.383 0 .739.739 0 0 1 .561-.266.75.75 0 0 1 .014 1.5.748.748 0 1 1-.561 1.26.728.728 0 0 1 .044.218.75.75 0 1 1-1.5 0 .737.737 0 0 1 .05-.238.739.739 0 0 1-.558.26.75.75 0 0 1-.012-1.5zm.518-.022a.75.75 0 1 0 .75-.75.75.75 0 0 0-.75.75z"/></symbol><symbol viewBox="0 0 15 15" id="florist-15" xmlns="http://www.w3.org/2000/svg"><title>florist-15</title><path d="M1.5 1A2.7 2.7 0 0 1 4 3l.5-3L5 3a2.7 2.7 0 0 1 2.5-2c-.2.03-1 .26-1 2v.083A1.959 1.959 0 0 1 4.5 5h-.083A1.959 1.959 0 0 1 2.5 3c0-1.739-.8-1.97-1-2zm10.512 10l3-.5-3-.5A2.686 2.686 0 0 0 14 7.5c-.03.2-.248 1-1.988 1a2 2 0 0 0 0 4c1.739 0 1.958.8 1.988 1a2.686 2.686 0 0 0-1.988-2.5zM9.688 5.548a1 1 0 0 1 0-2 1 1 0 0 1 0-2 .986.986 0 0 1 .852.507l.023-.012a.978.978 0 0 1-.116-.444 1 1 0 1 1 2 0 .978.978 0 0 1-.116.444l.019.01a.986.986 0 0 1 .85-.5 1 1 0 0 1 .025 2 1 1 0 0 1-.025 2 .986.986 0 0 1-.85-.5l-.016.009a.978.978 0 0 1 .113.44 1 1 0 0 1-2 0 .978.978 0 0 1 .113-.44l-.02-.011a.986.986 0 0 1-.852.507zm.71-1.995A1.051 1.051 0 1 0 11.449 2.5 1.051 1.051 0 0 0 10.4 3.553zm-5.452 7.891l-.516-.515 4.462-4.454a1.746 1.746 0 0 1-.452-.255l-4.364 4.355-.519-.518A16.051 16.051 0 0 0 4.912 6a3.373 3.373 0 0 1-.412.035c-.041 0-.073-.008-.112-.01a16.953 16.953 0 0 1-1.257 3.606L2.76 9.26a.246.246 0 0 0-.4.079L.231 14.445a.287.287 0 0 0-.016.089.25.25 0 0 0 .25.25.289.289 0 0 0 .1-.019l5.1-2.124a.246.246 0 0 0 .079-.4l-.372-.372a16.874 16.874 0 0 1 3.612-1.256c0-.059-.015-.106-.015-.166A3.349 3.349 0 0 1 9 10.089a16.076 16.076 0 0 0-4.054 1.355z"/></symbol><symbol viewBox="0 0 11 11" id="fuel-11" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3H9V1.5a.5.5 0 0 0-1 0V3a1 1 0 0 0 1 1v4.25a.25.25 0 1 1-.5 0V6.5A1.5 1.5 0 0 0 7 5V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h4a1 1 0 0 0 1-1V6a.5.5 0 0 1 .5.5v1.75a1.25 1.25 0 1 0 2.5 0V3.5a.5.5 0 0 0-.5-.5zM6 4.5a.49.49 0 0 1-.48.5h-3A.51.51 0 0 1 2 4.5V3a.5.5 0 0 1 .5-.5h3A.5.5 0 0 1 6 3v1.5z"/></symbol><symbol viewBox="0 0 15 15" id="fuel-15" xmlns="http://www.w3.org/2000/svg"><path d="M13 6v5.5a.5.5 0 0 1-1 0v-2A1.5 1.5 0 0 0 10.5 8H9V2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v11a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V9h1.5a.5.5 0 0 1 .5.5v2a1.5 1.5 0 0 0 3 0V5a1 1 0 0 0-1-1V2.49a.5.5 0 0 0-.5-.49.51.51 0 0 0-.5.55V5a1 1 0 1 0 1-1M8 6.5a.5.5 0 0 1-.5.5h-5a.5.5 0 0 1-.5-.5v-3a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 .5.5v3z"/></symbol><symbol viewBox="0 0 11 11" id="gaming-11" xmlns="http://www.w3.org/2000/svg"><title>gaming</title><path d="M9.715 5.8a2.046 2.046 0 0 0-2-1.8h-1.7V2.5c0-.2.2-.5.4-.5h2.1a.472.472 0 0 0 .5-.5.472.472 0 0 0-.5-.5h-2a1.453 1.453 0 0 0-1.5 1.4V4h-1.8a2.046 2.046 0 0 0-2 1.8l-.2 2.8a.991.991 0 0 0 .8 1.1 1.613 1.613 0 0 0 .9-.3l1.4-1.4h2.8l1.4 1.4a1.071 1.071 0 0 0 1.4.1 1.613 1.613 0 0 0 .3-.9zM4.015 7h-2V6a.945.945 0 0 1 1-1h1zm5 0h-2V5h1a1 1 0 0 1 1 1z"/></symbol><symbol viewBox="0 0 15 15" id="gaming-15" xmlns="http://www.w3.org/2000/svg"><title>gaming</title><path d="M13.1 12.5c-.6.3-1.4.1-1.8-.5l-1.1-1.4H4.8L3.7 12c-.5.7-1.4.8-2.1.3-.5-.4-.7-1-.6-1.5l.7-3.7C1.9 5.9 3 5 4.2 5H7V3.5C7 2.7 7.6 2 8.4 2h3.1c.3 0 .5.2.5.5s-.2.5-.5.5h-3c-.3 0-.5.2-.5.4V5h2.8c1.2 0 2.3.9 2.5 2.1l.7 3.7c.1.7-.2 1.4-.9 1.7zM6 7.5C6 6.7 5.3 6 4.5 6S3 6.7 3 7.5 3.7 9 4.5 9 6 8.3 6 7.5zm6 0c0-.3-.2-.5-.5-.5H11v-.5c0-.3-.2-.5-.5-.5s-.5.2-.5.5V7h-.5c-.3 0-.5.2-.5.5s.2.5.5.5h.5v.5c0 .3.2.5.5.5s.5-.2.5-.5V8h.5c.3 0 .5-.2.5-.5z"/></symbol><symbol viewBox="0 0 11 11" id="garden-11" xmlns="http://www.w3.org/2000/svg"><path d="M10 6a4 4 0 0 1-4.25 4A4 4 0 0 1 1.5 6a4 4 0 0 1 3.9 2.26V5h-2a.89.89 0 0 1-.9-.88V1.84a.35.35 0 0 1 .64-.21L4.28 3 5.45.67a.35.35 0 0 1 .6 0L7.22 3l1.13-1.38a.35.35 0 0 1 .65.21v2.28a.89.89 0 0 1-.89.89H6.1v3.26A4 4 0 0 1 10 6z"/></symbol><symbol viewBox="0 0 15 15" id="garden-15" xmlns="http://www.w3.org/2000/svg"><path d="M13 8c0 3.31-2.19 6-5.5 6S2 11.31 2 8a5.33 5.33 0 0 1 5 3.61V7H4.5A1.5 1.5 0 0 1 3 5.5v-3a.5.5 0 0 1 .9-.3l1.53 2 1.65-3a.5.5 0 0 1 .84 0l1.65 3 1.53-2a.5.5 0 0 1 .9.3v3A1.5 1.5 0 0 1 10.5 7H8v4.61A5.33 5.33 0 0 1 13 8z"/></symbol><symbol viewBox="0 0 11 11" id="garden-center-11" xmlns="http://www.w3.org/2000/svg"><title>garden-center-11</title><path d="M10.875 5.164l-.007-.008-.029-.029-.971-.97A.5.5 0 0 0 9 4.494v1.148L7 7.646V3a2 2 0 0 0-4 0 2 2 0 0 0 0 4v1a1 1 0 0 0 1 1h2a.984.984 0 0 0 .833-.48L9.36 5.99h1.061a.5.5 0 0 0 .453-.826zM1.5 5A1.5 1.5 0 0 1 3 3.5v3A1.5 1.5 0 0 1 1.5 5zm2-2a1.5 1.5 0 0 1 3 0h-3z"/></symbol><symbol viewBox="0 0 15 15" id="garden-center-15" xmlns="http://www.w3.org/2000/svg"><path d="M4 5v-.5a2.5 2.5 0 0 1 5 0v5.793l2.365-2.365-.347-1.295-.001-.006h-.001a.5.5 0 0 1 .838-.481l2 2a.5.5 0 0 1-.479.838l-.01-.003-1.293-.346L9 11.707V12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-.464L1.732 9.268a2.503 2.503 0 0 1 0-3.536A2.493 2.493 0 0 1 3.5 5H4zm0 1h-.5a1.5 1.5 0 0 0-1.061 2.561L4 10.121V6zm4-1v-.5a1.5 1.5 0 0 0-3 0V5h3z"/></symbol><symbol viewBox="0 0 11 11" id="gift-11" xmlns="http://www.w3.org/2000/svg"><path d="M0 5h4.5v1H0V5zm1 4.79c0 .668.542 1.21 1.21 1.21H4.52V7H1v2.79zM7.64 4H3.36A1.26 1.26 0 0 1 2 2.5 1.41 1.41 0 0 1 3.42 1a2.12 2.12 0 0 1 2.1 1.69A2.13 2.13 0 0 1 7.62 1 1.43 1.43 0 0 1 9 2.52 1.27 1.27 0 0 1 7.64 4zm-2.82-.75a1.43 1.43 0 0 0-1.4-1.5.68.68 0 0 0-.7.75.68.68 0 0 0 .606.747c.031.003.063.004.094.003h1.4zm2.8 0a.68.68 0 0 0 .7-.75.71.71 0 0 0-.7-.75 1.43 1.43 0 0 0-1.4 1.5h1.4zM6.52 5v1H11V5H6.52zm0 6h2.29A1.21 1.21 0 0 0 10 9.79V7H6.52v4z"/></symbol><symbol viewBox="0 0 15 15" id="gift-15" xmlns="http://www.w3.org/2000/svg"><path d="M6.5 5v2H0V5h6.5zm2 0v2H15V5H8.5zM1 8v4.5A1.5 1.5 0 0 0 2.5 14h4V8H1zm7.5 0v6h4a1.5 1.5 0 0 0 1.5-1.5V8H8.5zm2-8a3 3 0 0 0-3 2.25A3 3 0 0 0 4.5 0a1.94 1.94 0 0 0-2 2 1.73 1.73 0 0 0 1.91 2h6.13a1.75 1.75 0 0 0 2-2 2 2 0 0 0-2.04-2zm-6 3a.92.92 0 0 1-1-1 .92.92 0 0 1 1-1 2 2 0 0 1 2 2h-2zm6 0h-2a2 2 0 0 1 2-2 1 1 0 0 1 1 1 .92.92 0 0 1-1 1z"/></symbol><symbol viewBox="0 0 11 11" id="golf-11" xmlns="http://www.w3.org/2000/svg"><path d="M4.05.638c-.518.543.223 1.175.678.675L5.224.77l2.332 1.393L3.306 4.5c-.293.162-.341.44-.234.721l.889 2.317-.935 2.804c-.129.385.171.649.474.658a.468.468 0 0 0 .475-.341l.92-2.764.853-.283.252.505V10.5s0 .5.5.5.5-.5.5-.5V8.117a.84.84 0 0 0-.064-.362l-1.281-3.34 2.552-1.403c.187-.08.29-.254.29-.512 0-.226-.217-.413-.456-.556L4.905.071c-.16-.096-.275-.043-.323.007l-.533.56zM3 2a1 1 0 1 0 0 2 1 1 0 0 0 0-2z"/></symbol><symbol viewBox="0 0 15 15" id="golf-15" xmlns="http://www.w3.org/2000/svg"><path d="M3.4 1.1v.2c0 .4.3.7.7.7.3 0 .5-.2.6-.5l.2-.5 5.6 2.3L6.6 6c-.4.3-.4.7-.3 1.1l.9 2.1-1.3 3.9c-.2.5.2.9.6.9.3 0 .5-.1.6-.5l1.4-4 .1.3v3.5s0 .7.7.7.7-.7.7-.7V10c0-.2 0-.3-.1-.5L8.5 6.1l2.7-1.9c.2-.2.4-.3.4-.6s-.2-.5-.4-.6L4 .1c-.088 0-.118.018-.2.1l-.4.9zM5.5 3C4.7 3 4 3.7 4 4.5S4.7 6 5.5 6 7 5.3 7 4.5 6.3 3 5.5 3z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="grocery-11" xmlns="http://www.w3.org/2000/svg"><path d="M9.75 1.5c-.004 0-.318-.006-.63.188C8.803 1.881 8.5 2.3 8.5 3H1l.75 3.5c.107.5.75.5.75.5h6s-.003.247-.152.496S7.93 8 7.25 8H2c-.338-.005-.338.505 0 .5h5.25c.82 0 1.302-.37 1.527-.746C9.003 7.378 9 7 9 7V3c0-.567.196-.772.38-.887C9.567 2 9.747 2 9.747 2h.504c.338.005.338-.505 0-.5h-.5zm-2.5 7a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5zm-4 0a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5z"/></symbol><symbol viewBox="0 0 15 15" id="grocery-15" xmlns="http://www.w3.org/2000/svg"><path d="M13.2 1.5s-1.391-.041-1.946.5c-.534.52-.754.918-.754 2H1.2l1.394 4.814c.003.008.01.015.013.022.235.657.848 1.13 1.579 1.158l.013.006h6.5v.2s.001.3-.199.7c-.2.4-.3.6-1.1.6H2.9c-1 0-1 1.5 0 1.5H9.3c1.2 0 2.1-.7 2.4-1.4.3-.7.3-1.3.3-1.3V4c0-.524.229-1 .7-1h.55a.75.75 0 0 0 0-1.5h-.05zM9.2 13c-.6 0-1 .4-1 1s.4 1 1 1 1-.4 1-1-.4-1-1-1zm-5 0c-.6 0-1 .4-1 1s.4 1 1 1 1-.4 1-1-.4-1-1-1z"/></symbol><symbol viewBox="0 0 11 11" id="hairdresser-11" xmlns="http://www.w3.org/2000/svg"><path d="M1.5 2A1.5 1.5 0 0 0 0 3.5v1c0 .5.5.5.5.5h1C3 5 4 5.5 4 5.5S3 6 1.5 6h-1S0 6 0 6.5v1a1.5 1.5 0 0 0 3 0v-.615c.808-.158 1.587-.453 2.225-.742L8.5 8C10 8.75 11 8 11 8L6.5 5.5 11 3s-1-.75-2.5 0L5.225 4.857C4.587 4.568 3.808 4.273 3 4.115v-.611V3.5A1.5 1.5 0 0 0 1.5 2zm0 1a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm3.732 2.25h.018a.25.25 0 1 1-.018 0zM1.5 7a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1z"/></symbol><symbol viewBox="0 0 15 15" id="hairdresser-15" xmlns="http://www.w3.org/2000/svg"><path d="M15 3s-2-.6-3.5.5l-4.3 3c-.8-.6-2-1.3-3.2-1.7V4c0-1.1-.9-2-2-2s-2 .9-2 2v1.5c0 .5.5.5.5.5h2C4.5 6 6 7.5 6 7.5S4.5 9 2.5 9h-2S0 9 0 9.5V11c0 1.1.9 2 2 2s2-.9 2-2v-.8c1.2-.4 2.4-1.1 3.2-1.7l4.3 3c1.5 1.1 3.5.5 3.5.5L8.5 7.5 15 3zM3 5H1V4c0-.6.4-1 1-1s1 .4 1 1v1zm0 6c0 .6-.4 1-1 1s-1-.4-1-1v-1h2v1zm4.25-3a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="harbor-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 0A2.5 2.5 0 0 0 3 2.5a2.493 2.493 0 0 0 1.75 2.371v4.545c-.659-.115-1.338-.375-1.893-.857C2.09 7.89 1.5 6.829 1.5 5A.75.75 0 1 0 0 5c0 2.17.773 3.735 1.873 4.691S4.333 11 5.5 11s2.527-.352 3.627-1.309S11 7.171 11 5c.014-1.014-1.514-1.014-1.5 0 0 1.83-.589 2.89-1.357 3.559-.555.482-1.234.742-1.893.857V4.875A2.494 2.494 0 0 0 5.5 0zm0 1.5a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/></symbol><symbol viewBox="0 0 15 15" id="harbor-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 0C5.5 0 4 1.567 4 3.5a3.492 3.492 0 0 0 2.5 3.338v6.039c-.93-.165-1.875-.55-2.648-1.27-1.053-.98-1.85-2.54-1.85-5.109a1 1 0 1 0-2.002 0c0 3.003 1.012 5.196 2.49 6.572C3.968 14.447 5.838 15 7.5 15c1.666 0 3.535-.56 5.012-1.94s2.486-3.573 2.486-6.562c.065-1.395-2.063-1.395-1.998 0 0 2.553-.8 4.115-1.853 5.1-.774.722-1.718 1.11-2.647 1.277V6.842A3.494 3.494 0 0 0 11 3.5C11 1.567 9.5 0 7.5 0zm0 2a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3z"/></symbol><symbol viewBox="0 0 11 11" id="heart-11" xmlns="http://www.w3.org/2000/svg"><path d="M10.06 4.76a27 27 0 0 1-4.2 5.36.49.49 0 0 1-.71 0A27.003 27.003 0 0 1 .94 4.76C-.88 1.12 3.74-1.31 5.5 2.33c1.76-3.64 6.38-1.21 4.56 2.43z"/></symbol><symbol viewBox="0 0 15 15" id="heart-15" xmlns="http://www.w3.org/2000/svg"><path d="M13.91 6.75c-1.17 2.25-4.3 5.31-6.07 6.94a.5.5 0 0 1-.67 0C5.39 12.06 2.26 9 1.09 6.75-1.48 1.8 5-1.5 7.5 3.45c2.5-4.95 8.98-1.65 6.41 3.3z"/></symbol><symbol viewBox="0 0 11 11" id="heliport-11" xmlns="http://www.w3.org/2000/svg"><path d="M3 1c-.277 0-.5.223-.5.5s.224.482.5.5h3v2H2.912a1.5 1.5 0 1 0-.39 1.596L4.5 8.5c.681 1 1.5 1 2 1h3.535s.965 0 .965-1v-1c0-.5-.5-1-.5-1l-2-2S8 4 7.5 4H7V2h3a.499.499 0 1 0 0-1H3zM1.5 4a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm6.25 1s.25 0 .75.5L10 7H7.5S7 7 7 6.5v-1s0-.5.5-.5h.25z"/></symbol><symbol viewBox="0 0 15 15" id="heliport-15" xmlns="http://www.w3.org/2000/svg"><path d="M4 2C3 2 3 3 4 3h4v1c-.277 0-.5.223-.5.5V5H3.932A1.998 1.998 0 0 0 0 5.5a2 2 0 0 0 2 2 2 2 0 0 0 1.053-.303L5.5 10.5C6.507 11.95 8.318 12 9 12h5s1 0 1-1v-.994c0-.733-.126-1.132-.5-1.506l-3-3s-.592-.5-1.273-.5H9.5v-.5c0-.277-.223-.5-.5-.5V3h4c1 0 1-1 0-1H4zM2 4.5a1 1 0 1 1 0 2 1 1 0 0 1 0-2zM10 6c.5 0 .79.323 1 .5L13.5 9H10S9 9 9 8V7s0-1 1-1z"/></symbol><symbol viewBox="0 0 11 11" id="home-11" xmlns="http://www.w3.org/2000/svg"><title>home-11</title><path d="M10 4.75a.25.25 0 0 1-.25.25h-8.5A.25.25 0 0 1 1 4.75a.261.261 0 0 1 .08-.19l4.237-3.454.016-.016a.248.248 0 0 1 .35.016L8 2.995V1.5a.5.5 0 0 1 1 0v2.31l.92.75a.261.261 0 0 1 .08.19zm-8 5a.248.248 0 0 0 .246.25H5V8h1v2h2.752A.248.248 0 0 0 9 9.752V6H2z"/></symbol><symbol viewBox="0 0 15 15" id="home-15" xmlns="http://www.w3.org/2000/svg"><title>home-15</title><path d="M2 13.75a.25.25 0 0 0 .25.25H6v-3h3v3h3.75a.25.25 0 0 0 .25-.25V8H2zm11.932-7.171L13 5.76V2a1 1 0 0 0-2 0v2L7.682 1.09a.25.25 0 0 0-.353-.011l-.011.011-6.25 5.464a.25.25 0 0 0 .179.421L3 7h10.749a.25.25 0 0 0 .183-.421z"/></symbol><symbol viewBox="0 0 11 11" id="horse-riding-11" xmlns="http://www.w3.org/2000/svg"><title>horse-riding-11</title><path d="M4 1a1 1 0 1 1 1 1 1 1 0 0 1-1-1zm6.88 3.5L9 3v-.5L7 5H6l1 1v1.014a.5.5 0 1 1-1 0V6.5L4 5H3a1 1 0 0 0-.8.446A1.189 1.189 0 0 0 1.247 5 1.076 1.076 0 0 0 0 5.988C0 7.3.635 7.471.635 7.471a.33.33 0 0 0 .115.023A.253.253 0 0 0 1 7.25V6a.49.49 0 0 1 .48-.5h.02A.5.5 0 0 1 2 6v2.014l-.3.6a1.609 1.609 0 0 0-.2.6v1.542a.244.244 0 0 0 .244.244.255.255 0 0 0 .256-.244V9.514a.367.367 0 0 1 .1-.3l.9-1.2V9l.467 1.816a.256.256 0 0 0 .242.184.25.25 0 0 0 .25-.25v-.016l-.242-1.61a.6.6 0 0 1 .025-.236l.058-.174L4 8h2v1l.466 1.816a.256.256 0 0 0 .243.184.25.25 0 0 0 .25-.25l-.241-1.626a.6.6 0 0 1 .025-.236L7 8a.877.877 0 0 0 .934-.661L8.5 4.5a.6.6 0 0 0 .71.454.562.562 0 0 0 .143-.07l.9.116a.721.721 0 0 0 .392.1.331.331 0 0 0 .355-.316.406.406 0 0 0-.12-.284zM6 3.5a.51.51 0 0 0-.5-.5h-1a.482.482 0 0 0-.5.5V5h2z"/></symbol><symbol viewBox="0 0 15 15" id="horse-riding-15" xmlns="http://www.w3.org/2000/svg"><title>horse-riding-15</title><path d="M6 1a1 1 0 1 1 1 1 1 1 0 0 1-1-1zm2 2.5a.484.484 0 0 0 0-.058A.472.472 0 0 0 7.5 3h-1a.484.484 0 0 0-.058 0A.472.472 0 0 0 6 3.5V7h2zm6.85 3.644L12.8 4.8l.085-.509a.478.478 0 0 0 .008-.063.25.25 0 0 0-.25-.25.346.346 0 0 0-.158.056L9 7H8l1 1v1.5a.5.5 0 0 1-1 0v-1L6 7H4a1.5 1.5 0 0 0-1.243.661A1.466 1.466 0 0 0 1.563 7H1.5A1.449 1.449 0 0 0 0 8.4v.086A3.781 3.781 0 0 0 .559 10.4a.278.278 0 0 0 .191.1.25.25 0 0 0 .25-.25V9s-.02-.924.753-1c.5-.048.747.253.747.5V11L2 13v1.75a.25.25 0 0 0 .25.25.254.254 0 0 0 .25-.234V13L4 11v1l.5 2.8a.255.255 0 0 0 .246.2.25.25 0 0 0 .254-.246L4.855 12.3 5.5 11H8v1l.508 2.813A.257.257 0 0 0 8.75 15a.25.25 0 0 0 .25-.25V12l.367-1a1.155 1.155 0 0 0 .543-.6l2.161-3.767a.863.863 0 0 0 1.023.4l1.066.818a.591.591 0 0 0 .35.135.487.487 0 0 0 .475-.4.552.552 0 0 0-.135-.442z"/></symbol><symbol viewBox="0 0 11 11" id="hospital-11" xmlns="http://www.w3.org/2000/svg"><path d="M10 4H7V1a1.08 1.08 0 0 0-1-1H5a1.08 1.08 0 0 0-1 1v3H1a1.08 1.08 0 0 0-1 1v1a1.08 1.08 0 0 0 1 1h3v3a1.08 1.08 0 0 0 1 1h1a1.08 1.08 0 0 0 1-1V7h3a1.08 1.08 0 0 0 1-1V5a1 1 0 0 0-1-1z"/></symbol><symbol viewBox="0 0 15 15" id="hospital-15" xmlns="http://www.w3.org/2000/svg"><path d="M7 1c-.6 0-1 .4-1 1v4H2c-.6 0-1 .4-1 1v1c0 .6.4 1 1 1h4v4c0 .6.4 1 1 1h1c.6 0 1-.4 1-1V9h4c.6 0 1-.4 1-1V7c0-.6-.4-1-1-1H9V2c0-.6-.4-1-1-1H7z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="ice-cream-11" xmlns="http://www.w3.org/2000/svg"><path d="M4 6a2.49 2.49 0 0 0 1.5-.5c.432.325.959.5 1.5.5l-1 4.69a.5.5 0 0 1-.92 0L4 6zm3-4h-.09a1.5 1.5 0 1 0-2.82 0H4a1.5 1.5 0 1 0 1.5 1.5A1.5 1.5 0 1 0 7 2z"/></symbol><symbol viewBox="0 0 15 15" id="ice-cream-15" xmlns="http://www.w3.org/2000/svg"><path d="M5.44 8.17a3.48 3.48 0 0 0 2-.63c.464.323 1 .53 1.56.6h.44L8 13.7a.5.5 0 0 1-.92 0L5.44 8.17zM11.44 4.67a2 2 0 1 1-4 0 2 2 0 1 1-2-2h.12a2 2 0 1 1 3.75 0h.13a2 2 0 0 1 2 2z"/></symbol><symbol viewBox="0 0 11 11" id="industry-11" xmlns="http://www.w3.org/2000/svg"><path d="M10 1v8H1V6l2.11-1.78c.32-.32.89-.31.89.14V6l2.13-1.86A.5.5 0 0 1 7 4.5V8h2V1h1z"/></symbol><symbol viewBox="0 0 15 15" id="industry-15" xmlns="http://www.w3.org/2000/svg"><path d="M14 1v12H1V8.72a.5.5 0 0 1 .17-.37l3-3.22a.5.5 0 0 1 .83.38v3l3.16-3.37a.5.5 0 0 1 .84.37V11h3V1h2z"/></symbol><symbol viewBox="0 0 11 11" id="information-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.599.94c-.6 0-1.1.5-1.1 1.1s.5 1.1 1.1 1.1 1.1-.5 1.1-1.1-.5-1.1-1.1-1.1zM3 4l-.001.74S4.5 4.634 4.5 6v1.5c0 1.5-1.501 1.74-1.501 1.74L3 10h5.2l-.001-.76s-1.2 0-1.2-1.5L7 5s0-1-1-1H3z" fill="#010101"/></symbol><symbol viewBox="0 0 15 15" id="information-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 1C6.7 1 6 1.7 6 2.5S6.7 4 7.5 4 9 3.3 9 2.5 8.3 1 7.5 1zM4 5v1s2 0 2 2v2c0 2-2 2-2 2v1h7v-1s-2 0-2-2V6c0-.5-.5-1-1-1H4z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="karaoke-11" xmlns="http://www.w3.org/2000/svg"><path d="M4.5 4.4l-2 2-1 1c-.5.4-.6 1.1-.3 1.7l.6.7c.6.4 1.3.2 1.7-.3l1-1 2-2-2-2.1zM3.1 8.5l-.6-.7 2-2 .7.7-2.1 2zM5 2l1-1h3l1 1v3L9 6H8L5 3V2z"/></symbol><symbol viewBox="0 0 15 15" id="karaoke-15" xmlns="http://www.w3.org/2000/svg"><title>karaoke</title><path d="M12.1 2.952a2.988 2.988 0 0 0-5.11 1.965l3.142 3.142A2.988 2.988 0 0 0 12.1 2.952zM4.672 8.255L2.55 10.377a1 1 0 0 0 0 1.414l.707.707a1 1 0 0 0 1.414 0l2.121-2.121 2.122-2.122-2.121-2.121zm.741 2.087l-.707-.707 2.087-2.087.707.707z"/></symbol><symbol viewBox="0 0 11 11" id="landmark-11" xmlns="http://www.w3.org/2000/svg"><title>landmark</title><path d="M9.5 9H8V5h1l1-2c-.7.1-1.3.1-2 0-.7-.3-1.4-.6-2-1v-.5c0-.3-.2-.5-.5-.5s-.5.2-.5.5V2c-.6.4-1.3.7-2 1-.7.1-1.3.1-2 0l1 2h1v4H1.5c-.3 0-.5.2-.5.5s.2.5.5.5h8c.3 0 .5-.2.5-.5S9.8 9 9.5 9zM7 9H4V5h3v4z"/></symbol><symbol viewBox="0 0 15 15" id="landmark-15" xmlns="http://www.w3.org/2000/svg"><path d="M12.5 12H12v-.5c0-.3-.2-.5-.5-.5H11V6h1l1-2c-1 .1-2 .1-3 0-.8-.6-1.4-1.2-2-2v-.5c0-.3-.2-.5-.5-.5s-.5.2-.5.5V2c-.6.8-1.2 1.4-2 2-1 .1-2 .1-3 0l1 2h1v5h-.5c-.3 0-.5.2-.5.5v.5h-.5c-.3 0-.5.2-.5.5v.5h11v-.5c0-.3-.2-.5-.5-.5zM7 11H5V6h2v5zm3 0H8V6h2v5z"/><title>landmark</title></symbol><symbol viewBox="0 0 11 11" id="landuse-11" xmlns="http://www.w3.org/2000/svg"><title>landuse-11</title><path d="M1 4.749L.995 2.057a.251.251 0 0 1 .1-.2l2.249-1.8a.251.251 0 0 1 .313-.005l2.249 1.8a.251.251 0 0 1 .094.2v2.7A.251.251 0 0 1 5.751 5h-1.5A.251.251 0 0 1 4 4.749V3H3v1.752A.251.251 0 0 1 2.746 5h-1.5A.247.247 0 0 1 1 4.749zm4.753 2.6a.248.248 0 0 0-.173.072L4 9V6.5a.5.5 0 0 0-1 0V9H2V6.5a.5.5 0 0 0-1 0v4.25a.25.25 0 0 0 .25.25h4.5a.249.249 0 0 0 .25-.248V7.6a.25.25 0 0 0-.247-.253zM11 3.253v6.5a.247.247 0 0 1-.247.247H7.247A.247.247 0 0 1 7 9.753v-6.5A.252.252 0 0 1 7.252 3H8v-.752A.248.248 0 0 1 8.248 2h1.506a.246.246 0 0 1 .246.246V3h.747a.253.253 0 0 1 .253.253zM10 8H8v1h2zm0-2H8v1h2zm0-2H8v1h2z"/></symbol><symbol viewBox="0 0 15 15" id="landuse-15" xmlns="http://www.w3.org/2000/svg"><title>landuse-15</title><path d="M8.911 3.854a.248.248 0 0 1 .089.19V7.75a.25.25 0 0 1-.25.25h-2.5A.25.25 0 0 1 6 7.75V6H5v1.75a.25.25 0 0 1-.25.25h-2.5A.25.25 0 0 1 2 7.75v-3.7a.248.248 0 0 1 .089-.19l3.254-2.728a.245.245 0 0 1 .315 0zM7.752 9.5a.248.248 0 0 0-.138.042L5 11.5H4v-2a.5.5 0 0 0-1 0v2H2v-2a.5.5 0 0 0-1 0v4.25a.25.25 0 0 0 .25.25h6.5a.25.25 0 0 0 .25-.25v-4a.248.248 0 0 0-.248-.25zM14 6.245v6.5a.253.253 0 0 1-.253.253h-3.494a.253.253 0 0 1-.253-.251V6.25a.249.249 0 0 1 .25-.25H11v-.751A.249.249 0 0 1 11.249 5h1.5a.253.253 0 0 1 .251.253V6h.755a.245.245 0 0 1 .245.245zM13 11h-2v1h2zm0-2h-2v1h2zm0-2h-2v1h2z"/></symbol><symbol viewBox="0 0 11 11" id="laundry-11" xmlns="http://www.w3.org/2000/svg"><path d="M5 0L4 2H2S1 2 1 3v7s0 1 1 1h7c1 0 1-1 1-1V1c0-1-1-1-1-1H5zm1 1h3v1H6V1zm-.5 3a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5z"/></symbol><symbol viewBox="0 0 15 15" id="laundry-15" xmlns="http://www.w3.org/2000/svg"><path d="M8 1L6 3H3S2 3 2 4v9c0 1 1 1 1 1h9s1 0 1-1V2c0-1-1-1-1-1H8zm.5 1h2a.499.499 0 1 1 0 1h-2a.499.499 0 1 1 0-1zm-1 4a3 3 0 1 1 0 6 3 3 0 0 1 0-6z"/></symbol><symbol viewBox="0 0 11 11" id="library-11" xmlns="http://www.w3.org/2000/svg"><path d="M0 1v7c3.26 0 5.49 2 5.49 2S7.76 8 11 8V1C7 1 5.49 2.725 5.49 2.725S4 1 0 1zm1 1c1.195-.031 3.053.402 4 1.348L5.5 4l.5-.652c.962-.93 2.8-1.36 4-1.348v5c-2 0-3.354.856-4.51 1.781C4.35 7.853 3 7 1 7V2zm1 1.303v.181c.823.17 2.1.687 3 1.176v-.228c-.917-.479-2.176-.972-3-1.13zm7 0c-.824.157-2.083.65-3 1.129v.228c.9-.489 2.177-1.007 3-1.176v-.181zm-7 .92v.181c.822.154 2.099.659 3 1.133v-.195c-.917-.476-2.176-.967-3-1.12zm7 0c-.824.152-2.083.643-3 1.119v.195c.901-.474 2.178-.979 3-1.133v-.181zm-7 .894V5.3c.822.155 2.098.659 3 1.133v-.196c-.918-.475-2.176-.965-3-1.119zm7 0c-.824.154-2.082.644-3 1.12v.195c.902-.474 2.178-.979 3-1.133v-.182zM2 6v.182c.82.14 2.097.629 3 1.087v-.15C4.082 6.645 2.824 6.154 2 6zm7 0c-.824.154-2.082.644-3 1.12v.15c.903-.459 2.18-.948 3-1.088V6z"/></symbol><symbol viewBox="0 0 15 15" id="library-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.47 4.92S5.7 3 1 3v8c4.7 0 6.47 2 6.47 2S9.3 11 14 11V3C9.3 3 7.47 4.92 7.47 4.92zM13 10a10.84 10.84 0 0 0-5.53 1.68A10.56 10.56 0 0 0 2 10V4c3.4.26 4.73 1.6 4.75 1.61l.73.74.72-.75S9.6 4.26 13 4v6zm-5 .24l-.1-.17A14.519 14.519 0 0 1 12 8.89v.2a14.27 14.27 0 0 0-4 1.18v-.03zm0-1l-.1-.17A14.51 14.51 0 0 1 12 7.9v.2a14.29 14.29 0 0 0-4 1.19v-.05zm0-1l-.1-.17A14.491 14.491 0 0 1 12 6.9v.2a14.24 14.24 0 0 0-4 1.19v-.05zm0-1l-.1-.17A14.45 14.45 0 0 1 12 5.9v.2a14.28 14.28 0 0 0-4 1.19v-.05zm-1.1 3A13.9 13.9 0 0 0 3 9.08v-.2c1.387.203 2.736.614 4 1.22l-.1.14zm0-1A13.899 13.899 0 0 0 3 8.1v-.2a14.12 14.12 0 0 1 4 1.21l-.1.13zm0-1A13.86 13.86 0 0 0 3 7.1v-.2c1.387.199 2.735.607 4 1.21l-.1.13zm0-1A13.899 13.899 0 0 0 3 6.1v-.2a14.1 14.1 0 0 1 4 1.21l-.1.13z"/></symbol><symbol viewBox="0 0 11 11" id="lighthouse-11" xmlns="http://www.w3.org/2000/svg"><path d="M7 6l1 5H3l1-5h1.2V2h-.92a.32.32 0 0 1-.12-.6L5.38 1a.29.29 0 0 1 .24 0l1.22.4a.32.32 0 0 1-.12.6h-.91v4H7zm1-3v.5l3-.5v-.5L8 3zm0 2.5l3 .5v-.5L8 5v.5zM3 3l-3-.5V3l3 .5V3zm0 2l-3 .5V6l3-.5V5z"/></symbol><symbol viewBox="0 0 15 15" id="lighthouse-15" xmlns="http://www.w3.org/2000/svg"><path d="M4.5 6L0 7v-.5l4.5-1V6zm0-2.5L0 2.5V3l4.5 1v-.5zm6 0V4L15 3v-.5l-4.5 1zm0 2.5L15 7v-.5l-4.5-1V6zM8 7V2h2.5a.51.51 0 0 0 .2-1l-3-1a.5.5 0 0 0-.41 0l-3 1a.51.51 0 0 0 .2 1H7v5H5l-2 7h9l-2-7H8z"/></symbol><symbol viewBox="0 0 11 11" id="lodging-11" xmlns="http://www.w3.org/2000/svg"><path d="M1.5 2a.5.5 0 0 0-.5.5v6a.5.5 0 0 0 1 0V8h7v.5a.5.5 0 0 0 1 0v-1a.5.5 0 0 0-.5-.5H2V2.5a.5.5 0 0 0-.5-.5zm2 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zM6 3a1 1 0 0 0-1 1v1H3a.5.5 0 0 0 0 1h7V5a2 2 0 0 0-2-2H6z"/></symbol><symbol viewBox="0 0 15 15" id="lodging-15" xmlns="http://www.w3.org/2000/svg"><path d="M.5 2.5c-.3 0-.5.2-.5.5v9.5c0 .3.2.5.5.5s.5-.2.5-.5V11h13v1.5c0 .3.2.5.5.5s.5-.2.5-.5v-2c0-.3-.2-.5-.5-.5H1V3c0-.3-.2-.5-.5-.5zm3 .5C2.7 3 2 3.7 2 4.5S2.7 6 3.5 6 5 5.3 5 4.5 4.3 3 3.5 3zM7 4C5.5 4 5.5 5.5 5.5 5.5V7h-3c-.3 0-.5.2-.5.5v1c0 .3.2.5.5.5H15V6.5C15 4 12.5 4 12.5 4H7z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="logging-11" xmlns="http://www.w3.org/2000/svg"><title>logging-11</title><path d="M9.25 1a.409.409 0 0 0-.11.01.668.668 0 0 0-.44.24L8 2h-.737A.25.25 0 0 0 7 2.236a.243.243 0 0 0 0 .025V3h-.737a.256.256 0 0 0-.19.073.248.248 0 0 0-.073.179V4h-.763a.275.275 0 0 0-.164.073.248.248 0 0 0-.073.179V5h-.751a.257.257 0 0 0-.176.075l.178.178.5.5L8.5 2H9v.5L5.25 6.25l.5.5.177.177A.249.249 0 0 0 6 6.749V6h.751a.25.25 0 0 0 .176-.073A.266.266 0 0 0 7 5.759V5h.748A.248.248 0 0 0 8 4.756V4h.751a.267.267 0 0 0 .176-.073A.258.258 0 0 0 9 3.733V3l.78-.72a.734.734 0 0 0 .21-.42l.01-.11A.755.755 0 0 0 9.25 1zM2 8l-.431-1.2a1.422 1.422 0 0 1-.07-.465V6.25a.25.25 0 0 1 .25-.25h1a.25.25 0 0 0 0-.5H1.5A.5.5 0 0 0 1 6v.415a2 2 0 0 0 .106.642L1.57 8.43a1.841 1.841 0 0 0 .1.24 1.551 1.551 0 0 0 .624.643 1.342 1.342 0 0 0 1.315 0C3.869 9.122 5 8 5 8L3.5 6.5z"/></symbol><symbol viewBox="0 0 15 15" id="logging-15" xmlns="http://www.w3.org/2000/svg"><title>logging-15</title><path d="M13.91 3.41L13.5 3l.2-.28c.02-.03.04-.05.06-.08a.969.969 0 0 0 .24-.65 1 1 0 0 0-1.62-.77c-.03.02-.06.05-.09.07L12 1.5l-.386-.386a.354.354 0 0 0-.525.475l.417.417-.5.5-.392-.392a.354.354 0 0 0-.525.475L10.5 3l-.5.5-.381-.381a.354.354 0 1 0-.528.472l.028.028L9.5 4l-.5.5-.395-.395a.354.354 0 0 0-.517.483L8.5 5l-.5.5-.365-.365a.354.354 0 0 0-.556.439C7.1 5.6 7.508 6 7.508 6L7 6.5l-.394-.392a.392.392 0 0 0-.5-.028.384.384 0 0 0-.028.5l.022.02.4.4-.5.5-.4-.4a.37.37 0 0 0-.5 0l1.148 1.144L12.09 2.41 12.5 2h.5v.5l-.41.41-5.839 5.839L7.9 9.9a.355.355 0 0 0 0-.5l-.008-.009L7.5 9l.5-.5.384.384a.354.354 0 0 0 .528-.472L8.5 8l.5-.5.38.38a.354.354 0 0 0 .528-.472l-.02-.02L9.5 7l.5-.5.377.377A.35.35 0 0 0 10.64 7a.347.347 0 0 0 .252-.6L10.5 6l.5-.5.38.38a.354.354 0 0 0 .528-.472l-.028-.028L11.5 5l.5-.5.381.381a.354.354 0 0 0 .528-.472l-.025-.025L12.5 4l.5-.5.382.382a.354.354 0 0 0 .528-.472zM4.39 7.916C3.893 7.419 3.641 7 3 7H1.5a.5.5 0 0 0-.5.5v3a2.19 2.19 0 0 0 .5 1.5l.815.811A2.251 2.251 0 0 0 5.493 13L7.5 11zM3.5 10l-1.238 1.238A1.3 1.3 0 0 1 2 10.5V8h1a.545.545 0 0 1 .335.194.455.455 0 0 1 .165.418z"/></symbol><symbol viewBox="0 0 11 11" id="marker-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.5-.018c-1.787 0-3.871 1.092-3.871 3.872C1.629 5.739 4.607 9.908 5.5 11c.794-1.092 3.871-5.161 3.871-7.147 0-2.779-2.084-3.87-3.871-3.87z"/></symbol><symbol viewBox="0 0 15 15" id="marker-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 0C5.068 0 2.23 1.486 2.23 5.27c0 2.568 4.054 8.244 5.27 9.73 1.081-1.486 5.27-7.027 5.27-9.73C12.77 1.487 9.932 0 7.5 0z"/></symbol><symbol viewBox="0 0 11 11" id="marker-stroked-11" xmlns="http://www.w3.org/2000/svg"><title>marker-stroked-11</title><path data-name="Layer 7" d="M5.486 11l-.365-.446c-.7-.858-3.544-4.739-3.544-6.638A3.726 3.726 0 0 1 5.132.026q.167-.008.333 0a3.726 3.726 0 0 1 3.888 3.557q.007.166 0 .331c0 1.6-1.806 4.268-3.38 6.415zM5.465.916a2.817 2.817 0 0 0-3 3c0 1.268 1.883 4.161 2.987 5.62.935-1.282 3.011-4.217 3.011-5.62a2.817 2.817 0 0 0-3-3z"/></symbol><symbol viewBox="0 0 15 15" id="marker-stroked-15" xmlns="http://www.w3.org/2000/svg"><title>marker-stroked-15</title><path data-name="Layer 7" d="M7.5 14.941l-.4-.495c-.973-1.189-4.9-6.556-4.9-9.16A5.066 5.066 0 0 1 7.036 0q.222-.01.445 0a5.066 5.066 0 0 1 5.286 4.836q.01.225 0 .45c0 2.213-2.669 6.111-4.678 8.851zM7.481.986a4.077 4.077 0 0 0-4.3 4.3c0 1.832 2.759 6.038 4.286 8.034 1.25-1.71 4.315-5.989 4.315-8.034a4.077 4.077 0 0 0-4.3-4.3z"/></symbol><symbol viewBox="0 0 11 11" id="mobile-phone-11" xmlns="http://www.w3.org/2000/svg"><title>mobile-phone-11</title><path d="M7 2v-.5a.5.5 0 0 0-1 0V2H4a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1zM5 9H4V8h1zm0-2H4V6h1zm2 2H6V8h1zm0-2H6V6h1zm0-2H4V3h3z"/></symbol><symbol viewBox="0 0 15 15" id="mobile-phone-15" xmlns="http://www.w3.org/2000/svg"><title>mobile-phone-15</title><path d="M10 2v-.5a.5.5 0 0 0-1 0V2H5a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1zM6 13H5v-1h1zm0-2H5v-1h1zm0-2H5V8h1zm2 4H7v-1h1zm0-2H7v-1h1zm0-2H7V8h1zm2 4H9v-1h1zm0-2H9v-1h1zm0-2H9V8h1zm0-2.5a.5.5 0 0 1-.5.5h-4a.5.5 0 0 1-.5-.5v-3a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5z"/></symbol><symbol viewBox="0 0 11 11" id="monument-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 0L4 2v4.5h3V2L5.5 0zM3 7L2 8v3h7V8L8 7H3z"/></symbol><symbol viewBox="0 0 15 15" id="monument-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 0L6 2.5v7h3v-7L7.5 0zM3 11.5V15h9v-3.5L10.5 10h-6L3 11.5z"/></symbol><symbol viewBox="0 0 11 11" id="mountain-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.518 1.232a.556.556 0 0 0-.495.268l-4 6.66c-.222.37.045.84.477.84h8c.432 0 .7-.47.477-.84l-4-6.66a.556.556 0 0 0-.46-.268zm.002.922L8.431 7H7.76L6.416 5.773 5.519 7l-.894-1.227L3.281 7H2.61l2.91-4.846z"/></symbol><symbol viewBox="0 0 15 15" id="mountain-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 2c-.3 0-.4.2-.6.4l-5.8 9.5c-.1.1-.1.3-.1.4 0 .5.4.7.7.7h11.6c.4 0 .7-.2.7-.7 0-.2 0-.2-.1-.4L8.2 2.4C8 2.2 7.8 2 7.5 2zm0 1.5L10.8 9H10L8.5 7.5 7.5 9l-1-1.5L5 9h-.9l3.4-5.5z"/></symbol><symbol viewBox="0 0 11 11" id="museum-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 0L1 2v1h9V2L5.5 0zM2 4v4L1 9v1h9V9L9 8V4H2zm1.49 1a.5.5 0 0 1 .36.15L5.5 6.79l1.65-1.64A.5.5 0 0 1 8 5.5v3a.5.5 0 0 1-1 0V6.71L5.85 7.85a.5.5 0 0 1-.707.003L5.14 7.85 4 6.71V8.5a.5.5 0 0 1-1 0v-3a.5.5 0 0 1 .49-.5z"/></symbol><symbol viewBox="0 0 15 15" id="museum-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 0L1 3.445V4h13v-.555L7.5 0zM2 5v5l-1 1.555V13h13v-1.445L13 10V5H2zm2.615 1a.625.625 0 0 1 .451.184L7.5 8.617l2.434-2.433A.625.625 0 0 1 11 6.625v4.242a.625.625 0 1 1-1.25 0V8.133L7.941 9.94a.625.625 0 0 1-.882 0L5.25 8.133v2.734a.625.625 0 1 1-1.25 0V6.625c0-.341.274-.62.615-.625z"/></symbol><symbol viewBox="0 0 11 11" id="music-11" xmlns="http://www.w3.org/2000/svg"><path d="M9.5.5a.489.489 0 0 0-.22.05L3.5 2a.5.5 0 0 0-.5.5v4.59A1.5 1.5 0 1 0 4 8.5V5.38l5-1.25v1.46A1.5 1.5 0 1 0 10 7V1a.5.5 0 0 0-.5-.5zM4 4.38v-1.5l5-1.25v1.5L4 4.38z"/></symbol><symbol viewBox="0 0 15 15" id="music-15" xmlns="http://www.w3.org/2000/svg"><path d="M13.5 1a.49.49 0 0 0-.23.06L4.5 3.5A.5.5 0 0 0 4 4v6.28A2 2 0 0 0 3 10a2 2 0 1 0 2 2V7.36l8-2.22v3.64a2 2 0 0 0-1-.28 2 2 0 1 0 2 2v-9a.5.5 0 0 0-.5-.5zM13 4.14L5 6.36v-2l8-2.22v2z"/></symbol><symbol viewBox="0 0 11 11" id="natural-11" xmlns="http://www.w3.org/2000/svg"><title>natural-11</title><path d="M4.579 9.579L3 8h1.4a.25.25 0 0 0 .25-.25.246.246 0 0 0-.079-.179L3 6h.736a.25.25 0 0 0 .25-.25.246.246 0 0 0-.078-.179l-1.2-1.253a.253.253 0 0 0-.4-.015c-.02.023-1.21 1.266-1.21 1.266a.245.245 0 0 0-.082.18.25.25 0 0 0 .25.25H2L.425 7.575A.249.249 0 0 0 .6 8H2L.434 9.566a.244.244 0 0 0-.082.18A.25.25 0 0 0 .6 10H2v1h1v-1h1.4a.247.247 0 0 0 .179-.421zm6.242-.938l-2.1-4.2a.248.248 0 0 0-.443 0l-2.1 4.2A.248.248 0 0 0 6.4 9h4.2a.248.248 0 0 0 .221-.359zM7.5 7l1-2 1 2zm.279-5.921a.266.266 0 0 1-.049.148A3.513 3.513 0 0 0 7 3a2.141 2.141 0 0 1-1.291 1.911.475.475 0 0 1-.419 0A2.141 2.141 0 0 1 4 3a3.5 3.5 0 0 0-.726-1.769.271.271 0 0 1-.046-.148.25.25 0 0 1 .25-.25.27.27 0 0 1 .067.009A2.939 2.939 0 0 1 5 2L5.25.224A.25.25 0 0 1 5.744.2L6 2A2.957 2.957 0 0 1 7.453.841a.272.272 0 0 1 .076-.012.25.25 0 0 1 .25.25z"/></symbol><symbol viewBox="0 0 15 15" id="natural-15" xmlns="http://www.w3.org/2000/svg"><title>natural-15</title><path d="M8.753 6.278a.5.5 0 0 1-.51 0A4.109 4.109 0 0 1 6.5 3.5a2.779 2.779 0 0 0-.59-1.506l-.019-.027a.257.257 0 0 1-.056-.144.237.237 0 0 1 .25-.25.264.264 0 0 1 .057.011A3.523 3.523 0 0 1 7.5 2.5L8.28.94a.246.246 0 0 1 .44 0L9.5 2.5a3.4 3.4 0 0 1 1.339-.907.283.283 0 0 1 .1-.021c.175.009.212.119.221.249a.35.35 0 0 1-.043.141A5.2 5.2 0 0 0 10.5 3.5a4.113 4.113 0 0 1-1.747 2.778zM5 8h1.289a.25.25 0 0 0 .25-.25.241.241 0 0 0-.061-.15L4.7 5.235a.255.255 0 0 0-.391 0L2.518 7.589a.274.274 0 0 0-.062.161.25.25 0 0 0 .25.25H4l-2.665 2.6a.273.273 0 0 0-.058.152.25.25 0 0 0 .252.248H3l-1.565 1.565a.255.255 0 0 0 .18.435H4v1h1v-1h2.385a.255.255 0 0 0 .18-.435L6 11h1.471a.25.25 0 0 0 .25-.25.233.233 0 0 0-.058-.149zm9.345 3.748a.252.252 0 0 1-.252.252H8.908a.252.252 0 0 1-.226-.365l2.588-5.184a.252.252 0 0 1 .451 0l2.6 5.184a.251.251 0 0 1 .024.113zM12.75 10L11.5 7.5 10.25 10z"/></symbol><symbol viewBox="0 0 11 11" id="park-11" xmlns="http://www.w3.org/2000/svg"><path d="M11 3.75A1.75 1.75 0 0 0 9.25 2a1.73 1.73 0 0 0-.8.2A1.24 1.24 0 0 0 7.21 1a1.19 1.19 0 0 0-.21.05A1.23 1.23 0 0 0 5.75 0a1.25 1.25 0 0 0-1.13.73A1.21 1.21 0 0 0 4 .52a1.23 1.23 0 0 0-1 .55A1.491 1.491 0 0 0 2.51 1a1.51 1.51 0 0 0-1.4 2.08A1.49 1.49 0 0 0 1.08 6a1.49 1.49 0 0 0 2.55.52h.12c.321 0 .63-.126.86-.35V10L3 11h5l-1.6-1V9a8.42 8.42 0 0 1 2.38-2c.26-.05.5-.167.7-.34A1.49 1.49 0 0 0 10 5.5a1.46 1.46 0 0 0 0-.17c.61-.29 1-.904 1-1.58zm-4.64 4.5V6h.18a1.52 1.52 0 0 0 .53-.1 1.5 1.5 0 0 0 .89 1 8.821 8.821 0 0 0-1.6 1.35z"/></symbol><symbol viewBox="0 0 15 15" id="park-15" xmlns="http://www.w3.org/2000/svg"><path d="M14 5.75a1.75 1.75 0 0 0-1-1.61A1.24 1.24 0 0 0 11.75 3a1.197 1.197 0 0 0-.29.06 1.2 1.2 0 0 0-2-.78 1.25 1.25 0 1 0-2.5 0s.04.02.04.05a1.22 1.22 0 0 0-2 .74A1.491 1.491 0 0 0 4.51 3a1.5 1.5 0 0 0-1.4 2.07 1.49 1.49 0 0 0 0 2.87A1.49 1.49 0 0 0 6 7.71c.183.16.41.26.65.29v5L5 14h5l-1.6-1v-2a6.8 6.8 0 0 1 2.77-2A1.49 1.49 0 0 0 13 7.52a1.472 1.472 0 0 0 0-.16 1.75 1.75 0 0 0 1-1.61zm-5.6 4.51V6.82c.27.48.778.779 1.33.78h.28c.016.44.224.849.57 1.12a7.25 7.25 0 0 0-2.18 1.54z"/></symbol><symbol viewBox="0 0 11 11" id="park-alt1-11" xmlns="http://www.w3.org/2000/svg"><title>park-alt1-11</title><path d="M9.571 8.563L7.425 6.424a.255.255 0 0 1-.069-.174A.25.25 0 0 1 7.6 6h.8a.25.25 0 0 0 .25-.25.246.246 0 0 0-.068-.165l-.008-.008L6.4 3.4a.27.27 0 0 1-.051-.149A.25.25 0 0 1 6.6 3h.88a.257.257 0 0 0 .25-.258.234.234 0 0 0-.05-.142L5.694.224a.223.223 0 0 0-.351-.038C5.327.2 3.352 2.578 3.352 2.578a.246.246 0 0 0-.068.164.257.257 0 0 0 .25.258H4.4a.25.25 0 0 1 .25.25.262.262 0 0 1-.066.17L2.431 5.571a.247.247 0 0 0-.077.178A.251.251 0 0 0 2.6 6h.789a.249.249 0 0 1 .25.249.3.3 0 0 1-.063.17L1.43 8.563A.253.253 0 0 0 1.6 9H5v1h1V9h3.4a.255.255 0 0 0 .249-.255.248.248 0 0 0-.078-.182z"/></symbol><symbol viewBox="0 0 15 15" id="park-alt1-15" xmlns="http://www.w3.org/2000/svg"><title>park-alt1-15</title><path d="M9.428 10.429a.269.269 0 0 1-.074-.18A.25.25 0 0 1 9.6 10h1.447a.25.25 0 0 0 .25-.25.258.258 0 0 0-.079-.179L9.07 7.419a.3.3 0 0 1-.063-.17.249.249 0 0 1 .25-.249H10.4a.251.251 0 0 0 .25-.251.247.247 0 0 0-.077-.178L8.432 4.434l-.014-.014a.262.262 0 0 1-.066-.17A.25.25 0 0 1 8.6 4h.866a.25.25 0 0 0 .25-.25.246.246 0 0 0-.068-.164h.006L7.7 1.238a.253.253 0 0 0-.042-.044.249.249 0 0 0-.158-.055.249.249 0 0 0-.158.055.253.253 0 0 0-.042.044L5.352 3.586a.246.246 0 0 0-.068.164.25.25 0 0 0 .25.25H6.4a.241.241 0 0 1 .184.42l-.014.014-2.139 2.137a.247.247 0 0 0-.077.178A.251.251 0 0 0 4.6 7h1.145a.249.249 0 0 1 .25.249.3.3 0 0 1-.063.17l-2.15 2.152a.258.258 0 0 0-.082.179.25.25 0 0 0 .25.25H5.4a.25.25 0 0 1 .248.249.269.269 0 0 1-.074.18l-2.14 2.132-.009.009a.248.248 0 0 0 0 .351.256.256 0 0 0 .18.079H7v1l1-.008V13h3.391a.263.263 0 0 0 .26-.254.248.248 0 0 0-.071-.177z"/></symbol><symbol viewBox="0 0 11 11" id="parking-11" xmlns="http://www.w3.org/2000/svg"><path d="M8.1 6.1a3.53 3.53 0 0 1-2.29.66H3.9V10H2V1h3.93a3.2 3.2 0 0 1 2.16.69 2.69 2.69 0 0 1 .81 2.16 2.76 2.76 0 0 1-.8 2.25zM6.64 2.86a1.56 1.56 0 0 0-1-.3H3.9v2.65h1.72a1.48 1.48 0 0 0 1-.32 1.31 1.31 0 0 0 .36-1 1.23 1.23 0 0 0-.34-1.03z"/></symbol><symbol viewBox="0 0 15 15" id="parking-15" xmlns="http://www.w3.org/2000/svg"><path d="M11.85 8.37a5.1 5.1 0 0 1-3.31 1H5.79V14H3V1h5.72a4.63 4.63 0 0 1 3.13 1A3.88 3.88 0 0 1 13 5.12a4 4 0 0 1-1.15 3.25zM9.75 3.7a2.25 2.25 0 0 0-1.47-.43H5.79v3.82h2.49a2.13 2.13 0 0 0 1.47-.47c.38-.395.57-.935.52-1.48a1.77 1.77 0 0 0-.52-1.44z"/></symbol><symbol viewBox="0 0 11 11" id="parking-garage-11" xmlns="http://www.w3.org/2000/svg"><path d="M7.25 7.44a2.35 2.35 0 0 1-1.53.44H4.45V10H3.19V4H5.8a2.13 2.13 0 0 1 1.44.46c.385.372.583.897.54 1.43a1.84 1.84 0 0 1-.53 1.55zm-1-2.16a1 1 0 0 0-.68-.2H4.45v1.76H5.6a1 1 0 0 0 .68-.22.87.87 0 0 0 .24-.68.82.82 0 0 0-.24-.66h-.03zm4.16-2a.5.5 0 0 0-.19-.68L5.72.1a.5.5 0 0 0-.49 0L.73 2.6a.5.5 0 0 0 .49.87l4.28-2.4 4.26 2.37a.5.5 0 0 0 .679-.198l.001-.002-.03.04z"/></symbol><symbol viewBox="0 0 15 15" id="parking-garage-15" xmlns="http://www.w3.org/2000/svg"><path d="M10.5 10.14a3.53 3.53 0 0 1-2.29.66h-1.9V14h-1.9V5h3.92a3.2 3.2 0 0 1 2.16.69 2.69 2.69 0 0 1 .81 2.15 2.76 2.76 0 0 1-.8 2.3zM9 6.9a1.56 1.56 0 0 0-1-.3H6.31v2.65H8a1.48 1.48 0 0 0 1-.32 1.31 1.31 0 0 0 .36-1A1.23 1.23 0 0 0 9 6.9zm5.41-2.69a.5.5 0 0 0-.24-.66L7.5.45.79 3.55a.501.501 0 1 0 .42.91L7.5 1.55l6.29 2.9a.5.5 0 0 0 .66-.24h-.04z" fill="#231f20"/></symbol><symbol viewBox="0 0 11 11" id="pharmacy-11" xmlns="http://www.w3.org/2000/svg"><path d="M6 4l2-2a.732.732 0 0 1 0-.21.75.75 0 1 1 .75.75h-.11L7.5 4H6zm3.48 1.83L8.65 7.5l.83 1.67V10h-8v-.83l.84-1.67-.84-1.67V5h8v.83zM7.5 7H6V5.5H5V7H3.5v1H5v1.5h1V8h1.5V7z"/></symbol><symbol viewBox="0 0 15 15" id="pharmacy-15" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 4l1.07-1.54c.06.005.12.005.18 0A1.25 1.25 0 1 0 9.5 1.25v.1L7 4h2.5zM12 6V5H3v1l1.5 3.5L3 13v1h9v-1l-1-3.5L12 6zm-2 4H8v2H7v-2H5V9h2V7h1v2h2v1z"/></symbol><symbol viewBox="0 0 11 11" id="picnic-site-11" xmlns="http://www.w3.org/2000/svg"><path d="M2.75 2c-.416 0-.75.334-.75.75s.334.75.75.75H4L3.54 5H1.75c-.415 0-.75.335-.75.75s.335.75.75.75h1.326L2 10h1l1.076-3.5h2.848L8 10h1L7.924 6.5H9.25c.415 0 .75-.335.75-.75S9.665 5 9.25 5H7.46L7 3.5h1.25c.415 0 .75-.334.75-.75S8.665 2 8.25 2h-5.5zM5 3.5h1L6.46 5H4.54L5 3.5z"/></symbol><symbol viewBox="0 0 15 15" id="picnic-site-15" xmlns="http://www.w3.org/2000/svg"><path d="M4 3c-.554 0-1 .446-1 1s.446 1 1 1h1.297l-.645 2H2.5c-.554 0-1 .446-1 1s.446 1 1 1h1.51l-.969 3.01a.75.75 0 1 0 1.426.465l.002-.004L5.586 9h3.828l1.117 3.47a.75.75 0 1 0 1.428-.46L10.99 9h1.51c.554 0 1-.446 1-1s-.446-1-1-1h-2.152l-.645-2H11c.554 0 1-.446 1-1s-.446-1-1-1H4zm2.873 2h1.254l.644 2H6.23l.644-2z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="pitch-11" xmlns="http://www.w3.org/2000/svg"><path d="M4 2a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm6.5 6H9L8 5 7 3.25 8 3l2.3 1a.531.531 0 0 0 .36-1L8 2H6L4 3 3 4H1.47a.5.5 0 0 0 0 1H4l1-1 1 2-2 1v3.5a.5.5 0 0 0 1 0V7.39L7 7l1 2h2.5a.5.5 0 0 0 0-1z"/></symbol><symbol viewBox="0 0 15 15" id="pitch-15" xmlns="http://www.w3.org/2000/svg"><path d="M5 3a1 1 0 1 1 0-2 1 1 0 0 1 0 2zm7.5 7H10L9 7 8 5.25 9 5l2.3 1a.539.539 0 0 0 .4-1L9 4H7L5 5 4 6H2.5a.5.5 0 0 0 0 1H5l1-1 1 2-2 2v3.5a.5.5 0 0 0 1 0v-3.11L8 9l1 2h3.5a.5.5 0 0 0 0-1z"/></symbol><symbol viewBox="0 0 11 11" id="place-of-worship-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.52 0L4 2v1h3V2L5.52 0zM4 4L2 5v5h7V5L7 4H4zm7 1.5V10h-1V5.5a.5.5 0 0 1 1 0zm-10 0V10H0V5.5a.5.5 0 0 1 1 0z"/></symbol><symbol viewBox="0 0 15 15" id="place-of-worship-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 0l-2 2v2h4V2l-2-2zm-2 4.5L4 6h7L9.5 4.5h-4zM2 6.5a1 1 0 0 0-1 1V13h2V7.5a1 1 0 0 0-1-1zm2 0V13h7V6.5H4zm9 0a1 1 0 0 0-1 1V13h2V7.5a1 1 0 0 0-1-1z"/></symbol><symbol viewBox="0 0 11 11" id="playground-11" xmlns="http://www.w3.org/2000/svg"><path d="M1 .79a1 1 0 1 1-.005.02L1 .79zm9.85 7.37l-2-2A.49.49 0 0 0 8.5 6h-.13l-1.87.55V4a.49.49 0 0 0 .5-.41.5.5 0 0 0-.38-.59H6.5V0h-.22v3l-4.46.55A1 1 0 0 0 1 4.3a1 1 0 0 0 0 .43l.81 3.13a1 1 0 0 0 .71.68c.151.036.309.036.46 0H3l3.29-.89v1.62l-3 .74a.524.524 0 0 0 .31 1 .946.946 0 0 0 .17 0l4-1a.522.522 0 0 0-.3-1L7.27 9l-.77.22V7.58l1.83-.51 1.81 1.78a.5.5 0 1 0 .72-.69h-.01zM6.28 6.61l-2.07.46-.71-2.74L6.28 4v2.61z"/></symbol><symbol viewBox="0 0 15 15" id="playground-15" xmlns="http://www.w3.org/2000/svg"><path d="M2 1.15a1.5 1.5 0 1 1 2.903.757A1.5 1.5 0 0 1 2 1.15zm11 11.17a1 1 0 0 1-.796 1.17H12.2a1 1 0 0 1-1.07-.49L9.45 9.63 8 9.92l-.22.08h-.06v2.15l.62-.15h.14a.52.52 0 0 1 .19 1l-5 1a.51.51 0 0 1-.17 0 .52.52 0 0 1-.2-1l4.15-.83V10l-3.22.58a1 1 0 0 1-1.21-.68H3L2 5.83a1 1 0 0 1 0-.43 1 1 0 0 1 .8-.75l4.7-.52V0h.22v4.1h.06L8 4.08 8.4 4h.21a.5.5 0 0 1 .37.6.49.49 0 0 1-.49.4L8 5.08h-.28v2.86h.06L8 7.88l1.81-.36a1 1 0 0 1 1 .6l2 3.94a.999.999 0 0 1 .19.26zM7.5 5.13L5 5.4l.74 2.94L7.5 8V5.13z"/></symbol><symbol viewBox="0 0 11 11" id="police-11" xmlns="http://www.w3.org/2000/svg"><path d="M4.5.5l.5 1h3l.5-1h-4zM5 2v1a1.5 1.5 0 0 0 3 0V2H5zM1.75 3C1 3 1 3.75 1 3.75v3a.75.75 0 0 0 .975.715L4 6.826V10l4-5H5s-.195 0-.424.072L2.5 5.727V3.75S2.5 3 1.75 3zm7.021 2.389L5 10h4V6a.98.98 0 0 0-.229-.611z"/></symbol><symbol viewBox="0 0 15 15" id="police-15" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 1L6 2h5l.5-1h-6zM6 2.5v1.25S6 6.5 8.5 6.5 11 3.75 11 3.75V2.5H6zM1.984 3.986A1 1 0 0 0 1 5v4a1 1 0 0 0 1.217.977L5 9.357V14l5.879-6.93c-.14-.04-.284-.07-.438-.07H6.5L3 7.754V5a1 1 0 0 0-1.016-1.014zm9.764 3.725L6.412 14H12V8.559c0-.314-.094-.604-.252-.848z"/></symbol><symbol viewBox="0 0 11 11" id="post-11" xmlns="http://www.w3.org/2000/svg"><path d="M10 5.5V9a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V5.5a.5.5 0 0 1 .5-.5.49.49 0 0 1 .21 0L5.5 7l3.8-2a.488.488 0 0 1 .2 0 .5.5 0 0 1 .5.5zM1.25 2.92l.08.08L5.5 5l4.19-2h.06a.49.49 0 0 0 .25-.5.5.5 0 0 0-.5-.5h-8a.5.5 0 0 0-.5.5.49.49 0 0 0 .25.42z"/></symbol><symbol viewBox="0 0 15 15" id="post-15" xmlns="http://www.w3.org/2000/svg"><path d="M14 6.5V12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V6.5a.5.5 0 0 1 .5-.5.49.49 0 0 1 .21 0l5.79 4 5.8-4a.488.488 0 0 1 .2 0 .5.5 0 0 1 .5.5zM1.25 3.92l.08.08L7.5 8l6.19-4h.06a.49.49 0 0 0 .25-.5.5.5 0 0 0-.5-.5h-12a.5.5 0 0 0-.5.5.49.49 0 0 0 .25.42z"/></symbol><symbol viewBox="0 0 11 11" id="prison-11" xmlns="http://www.w3.org/2000/svg"><path d="M2 1v9h7V1H2zm1 1h1v3H3V2zm2 0h1v3H5V2zm2 0h1v2H7V2zm.5 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zM3 6h1v3H3V6zm2 0h1v3H5V6zm2 1h1v2H7V7z"/></symbol><symbol viewBox="0 0 15 15" id="prison-15" xmlns="http://www.w3.org/2000/svg"><path d="M3.5 1v13H12V1H3.5zm6 1H11v3.5H9.5V2zm-5 .055H6V7H4.5V2.055zm2.5 0h1.5V7H7V2.055zM10.25 6.5a.75.75 0 0 1 0 1.5.75.75 0 0 1 0-1.5zM7 8h1.473l.027 5H7.027L7 8zm-2.5.166H6V13H4.5V8.166zM9.5 9H11v4H9.5V9z"/></symbol><symbol viewBox="0 0 11 11" id="rail-11" xmlns="http://www.w3.org/2000/svg"><path d="M9 10.5a.5.5 0 0 1-.5.5.49.49 0 0 1-.43-.27L7.69 10H3.31l-.37.74A.5.5 0 0 1 2 10.5a.49.49 0 0 1 .07-.24l1-2A.49.49 0 0 1 3.5 8a.5.5 0 0 1 .5.7l-.19.3h3.38L7 8.7a.5.5 0 0 1 .9-.43l1 2a.49.49 0 0 1 .1.23zM8 0H3a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1h5a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1zM3.5 6a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zm0-2a.5.5 0 0 1-.5-.5v-2a.5.5 0 0 1 .5-.5h1.79v3H3.5zm4 2a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zM8 3.5a.5.5 0 0 1-.5.5H5.69V1H7.5a.5.5 0 0 1 .5.5v2z"/></symbol><symbol viewBox="0 0 15 15" id="rail-15" xmlns="http://www.w3.org/2000/svg"><path d="M3 1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H3zm2.75.5h3.51a.25.25 0 1 1 0 .5H5.75a.25.25 0 1 1 0-.5zM3.5 3H7v4H3.5a.5.5 0 0 1-.5-.5v-3a.5.5 0 0 1 .5-.5zM8 3h3.5a.5.5 0 0 1 .5.5v3a.5.5 0 0 1-.5.5H8V3zM5 8a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm5 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm.445 3.994a.504.504 0 0 0-.425.676l.17.33H4.81l.13-.27a.5.5 0 0 0-.91-.41l-1 2a.487.487 0 0 0-.03.18.5.5 0 0 0 .5.5.49.49 0 0 0 .43-.26v-.05H4l.31-.69h6.38l.31.69v.05a.49.49 0 0 0 .43.26.5.5 0 0 0 .5-.5.49.49 0 0 0 0-.24l-1-2a.5.5 0 0 0-.485-.266z"/></symbol><symbol viewBox="0 0 11 11" id="rail-light-11" xmlns="http://www.w3.org/2000/svg"><path d="M4 0c-.5 0-.5.5-.5.5s0 .5.5.5h1v.97L4 2S3 2 3 3v3c0 2 2 2 2 2h1s2 0 2-2V3c0-1-1-1-1-1H6V1h1c.5 0 .5-.5.5-.5S7.5 0 7 0H4zm1.5 3l1.5.5V5H4V3.5L5.5 3zm0 3a.499.499 0 1 1 0 1 .499.499 0 1 1 0-1zM2.834 8.5L2 11h1.5l.334-1h3.332l.334 1H9l-.834-2.5H6.668l.166.5H4.166l.166-.5H2.834z"/></symbol><symbol viewBox="0 0 15 15" id="rail-light-15" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 0C5 0 5 .5 5 .5v1a.499.499 0 1 0 1 0V1h1v2H6S4 3 4 5v3c0 3 3 3 3 3h1s3 0 3-3V5c0-2-2-2-2-2H8V1h1v.5a.499.499 0 1 0 1 0v-1c0-.5-.5-.5-.5-.5h-4zm2 4l2.045.773L10 6.5c.132.5-.5.5-.5.5h-4s-.632 0-.5-.5l.455-1.727L7.5 4zm0 4a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm-3.375 4L3 15h1.5l.375-1h5.25l.375 1H12l-1.125-3h-1.5l.375 1h-4.5l.375-1h-1.5z"/></symbol><symbol viewBox="0 0 11 11" id="rail-metro-11" xmlns="http://www.w3.org/2000/svg"><path d="M3.5 0C3 0 3 .5 3 .5L2 5v1c0 1.024 1 1 1 1h5s1 0 1-1V5L8 .5S8 0 7.5 0h-4zM4 1h3l.5 3h-4L4 1zm-.5 4a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zm1.75 0h.5a.25.25 0 1 1 0 .5h-.5a.25.25 0 1 1 0-.5zM7.5 5a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zM3 8l-1 3h1.5l.334-1h3.332l.334 1H9L8 8H6.5l.334 1H4.166L4.5 8H3z"/></symbol><symbol viewBox="0 0 15 15" id="rail-metro-15" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 0s-.75 0-1 1L3 6.5V10c0 1 1 1 1 1h7s1 0 1-1V6.5L10.5 1c-.273-1-1-1-1-1h-4zm1 1.5h2s.536 0 .75 1L10 6c.215 1.002-1 1-1 1H6s-1.215.002-1-1l.75-3.5c.214-1 .75-1 .75-1zM5 8a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm1.75 0h1.5a.25.25 0 1 1 0 .5h-1.5a.25.25 0 1 1 0-.5zM10 8a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm-5.875 4L3 15h1.5l.375-1h5.25l.375 1H12l-1.125-3h-1.5l.375 1h-4.5l.375-1h-1.5z"/></symbol><symbol viewBox="0 0 11 11" id="ranger-station-11" xmlns="http://www.w3.org/2000/svg"><path d="M6.334 0L5 1v3L1 6.055V10h3V7h3v3h3V6.055L6 4V2.25L6.334 2l1.332 1L9 2V0L7.666 1 6.334 0z"/></symbol><symbol viewBox="0 0 15 15" id="ranger-station-15" xmlns="http://www.w3.org/2000/svg"><path d="M9 .5l-2 1v3.773L2 8v6h4v-4h3v4h4V8L8 5.273V4l1-.5 2 1 2-1v-3l-2 1-2-1z"/></symbol><symbol viewBox="0 0 11 11" id="recycling-11" xmlns="http://www.w3.org/2000/svg"><title>recycling-11</title><path d="M9.5 8.5c-.547.519-1.66.435-2.5.5v1L4.5 8.5 7 7v1h1c.634 0 .83 0 1.054-.127a.81.81 0 0 0 .413-.958c-.085-.358.4-.425.485-.115A1.724 1.724 0 0 1 9.5 8.5zM1.948 5.092l-.001.002c-.4.743-1.065 1.637-.921 2.377a1.724 1.724 0 0 0 1.192 1.293c.372.12.466-.395.161-.472a.81.81 0 0 1-.586-.862c.012-.258.122-.42.461-.956l.537-.843V5.63l.844.537.078-2.914-2.608 1.302.843.537zm2.936-3.178a.81.81 0 0 1 1.025-.189c.231.115.336.281.689.807.14.208.32.479.555.832l-.831.555 2.636 1.246-.141-2.912-.833.556c-.52-.662-1.067-1.63-1.796-1.795a1.724 1.724 0 0 0-1.671.562c-.264.338.199.546.367.338z"/></symbol><symbol viewBox="0 0 15 15" id="recycling-15" xmlns="http://www.w3.org/2000/svg"><title>recycling-15</title><path d="M2.456 8.613c-.338.598-.955 1.69.137 2.418.343.227.728.384 1.131.462.307.045.323.518-.038.507-.385-.02-2.26-.193-2.561-1.6-.156-.82.02-1.557.504-2.355l.697-1.233-1.306-.743L4.5 4v4l-1.306-.694-.738 1.307zM6.7 2.034c1.155-.628 1.823.43 2.191 1.007l.806 1.263-1.266.808L12 6.986l-.197-4.026-1.264.807-.76-1.189c-.522-.746-.904-1.297-1.835-1.545C6.307.72 5.301 2.619 5.311 2.607c-.164.287.216.54.451.21.258-.32.577-.586.938-.783zm6.594 6.187c-.088-.19-.549-.141-.419.267.131.39.184.8.157 1.21C12.939 11.01 11.684 11 11 11H9.5V9.5l-3.5 2 3.488 2.025L9.493 12H11c.89.015 1.6-.176 2.2-.713 1.2-1.061.094-3.066.094-3.066z"/></symbol><symbol viewBox="0 0 11 11" id="religious-christian-11" xmlns="http://www.w3.org/2000/svg"><path d="M4.5 0v3H2v2h2.5v6h2V5H9V3H6.5V0h-2z"/></symbol><symbol viewBox="0 0 15 15" id="religious-christian-15" xmlns="http://www.w3.org/2000/svg"><path d="M6 .955V4H3v3h3v8h3V7h3V4H9V1c0-1-.978-1-.978-1H6.99S6 0 6 .955z"/></symbol><symbol viewBox="0 0 11 11" id="religious-jewish-11" xmlns="http://www.w3.org/2000/svg"><path d="M11 8H7.1l-1.6 3-1.6-3H0l1.95-2.5L0 3h3.9l1.6-3 1.6 3H11L9.05 5.5 11 8z"/></symbol><symbol viewBox="0 0 15 15" id="religious-jewish-15" xmlns="http://www.w3.org/2000/svg"><path d="M15 12H9.78L7.5 15l-2.26-3H0l2.7-4L0 4h5.3l2.2-4 2.34 4H15l-2.56 4L15 12z"/></symbol><symbol viewBox="0 0 11 11" id="religious-muslim-11" xmlns="http://www.w3.org/2000/svg"><path d="M4.9 0C2.2 0 0 2.2 0 4.9s2.2 4.9 4.9 4.9c.9 0 1.7-.2 2.4-.6h-.6c-2.4 0-4.3-1.9-4.3-4.3S4.3.6 6.7.6h.6C6.5.2 5.8 0 4.9 0zm3.6 2l-.816 1.7L6 4l1 1.5L6.5 7l2-1 2 1-.5-1.5L11 4l-1.5-.3-1-1.7z"/></symbol><symbol viewBox="0 0 15 15" id="religious-muslim-15" xmlns="http://www.w3.org/2000/svg"><path d="M6.794 0C3 0 0 3 0 6.794s3 6.794 6.794 6.794c2.118 0 4.412-.706 5.647-2.294-.794.53-2.294 1.147-3.441 1.147-2.912 0-5.118-2.912-5.118-5.823S6.088 1.148 9 1.148c1.059 0 2.559.617 3.441 1.146C11.206.706 8.911 0 6.794 0zM11 3l-1 2.5H7L9.5 7l-1 3L11 8.5l2.5 1.5-1-3L15 5.5h-3L11 3z"/></symbol><symbol viewBox="0 0 11 11" id="residential-community-11" xmlns="http://www.w3.org/2000/svg"><title>buildings</title><path d="M8.8 8c.7-.1 1.2-.8 1.2-1.5C10 5.7 9.3 5 8.5 5S7 5.7 7 6.5c0 .7.5 1.4 1.2 1.5v1.5H6V1H2v8.5H1v.5h9v-.5H8.8V8zM3 2h2v1H3V2zm0 2h2v1H3V4zm0 2h2v1H3V6z"/></symbol><symbol viewBox="0 0 15 15" id="residential-community-15" xmlns="http://www.w3.org/2000/svg"><title>buildings</title><path d="M11.8 13.5V11c.7-.1 1.2-.7 1.2-1.5S12.3 8 11.5 8 10 8.7 10 9.5c0 .7.5 1.4 1.2 1.5v2.5H7V2H2v11.5H1v.5h13v-.5h-2.2zM6 11H3v-1h3v1zm0-2H3V8h3v1zm0-2H3V6h3v1zm0-2H3V4h3v1z"/></symbol><symbol viewBox="0 0 11 11" id="restaurant-11" xmlns="http://www.w3.org/2000/svg"><path d="M2.25 0l-.5 3.5c-.07.495 1.24 1.4 1.25 2V11h1V5.5c0-.6 1.32-1.505 1.25-2L4.75 0h-.5l.25 2.75-.75.5V0h-.5v3.25l-.75-.5L2.75 0h-.5zM9 0C7.5 0 7.006 1.724 7 3v3h1v5h1V0z"/></symbol><symbol viewBox="0 0 15 15" id="restaurant-15" xmlns="http://www.w3.org/2000/svg"><path d="M3.5 0l-1 5.5c-.146.805 1.782 1.181 1.75 2L4 14c-.038 1 1 1 1 1s1.038 0 1-1l-.25-6.5c-.031-.818 1.733-1.18 1.75-2L6.5 0H6l.25 4-.75.5L5.25 0h-.5L4.5 4.5 3.75 4 4 0h-.5zM12 0c-.736 0-1.964.655-2.455 1.637C9.135 2.373 9 4.018 9 5v2.5c0 .818 1.09 1 1.5 1L10 14c-.09.996 1 1 1 1s1 0 1-1V0z"/></symbol><symbol viewBox="0 0 11 11" id="roadblock-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 0a5.5 5.5 0 1 0 0 11 5.5 5.5 0 0 0 0-11zM2 4.5h7v2H2v-2z"/></symbol><symbol viewBox="0 0 15 15" id="roadblock-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 0a7.5 7.5 0 1 0 0 15 7.5 7.5 0 0 0 0-15zM3 6h9v3H3V6z"/></symbol><symbol viewBox="0 0 11 11" id="rocket-11" xmlns="http://www.w3.org/2000/svg"><path d="M9 1C7.488 1 5.408 2.146 4.049 4H3c-.801 0-1.184.367-1.5 1L1 6h2l1 1 1 1v2l1-.5c.633-.316 1-.699 1-1.5V6.951C8.854 5.592 10 3.512 10 2V1H9zM7.5 3a.5.5 0 1 1 0 1 .5.5 0 0 1 0-1zM2.75 7.25l-.25.25C2 8 2 9 2 9s.945.055 1.5-.5l.25-.25-1-1z"/></symbol><symbol viewBox="0 0 15 15" id="rocket-15" xmlns="http://www.w3.org/2000/svg"><path d="M12.555 1C10.41 1 7.534 2.471 5.602 5H4c-1.157 0-1.82.864-2.277 1.777L1.11 8H4l1.5 1.5L7 11V13.889l1.223-.612C9.136 12.821 10 12.157 10 11V9.398c2.529-1.932 4-4.809 4-6.953V1h-1.445zM10 4a1 1 0 1 1 0 2 1 1 0 1 1 0-2zm-6.5 6l-.5.5c-.722.722-1 2.5-1 2.5s1.698-.198 2.5-1l.5-.5L3.5 10z"/></symbol><symbol viewBox="0 0 11 11" id="school-11" xmlns="http://www.w3.org/2000/svg"><path d="M8.5 9V8H10V6H7.5V5H10V3H8.5V2H10V1H6v9h4V9H8.5zM4 7H1V1h3v6zm0 1l-1.5 2L1 8h3z"/></symbol><symbol viewBox="0 0 15 15" id="school-15" xmlns="http://www.w3.org/2000/svg"><path d="M11 13v-1h2v-1H9.5v-1H13V9h-2V8h2V7h-2V6h2V5H9.5V4H13V3h-2V2h2V1H8v13h5v-1h-2zm-5-2H2V1h4v10zm0 1l-2 2-2-2h4z"/></symbol><symbol viewBox="0 0 11 11" id="scooter-11" xmlns="http://www.w3.org/2000/svg"><title>scooter-11</title><path d="M1 9h2a.979.979 0 0 1-1 1 .979.979 0 0 1-1-1zm8.753-5H9V3h.351a.282.282 0 0 0 .223-.148l.268-.536a.333.333 0 0 0 .009-.066A.25.25 0 0 0 9.6 2H9v-.5H6.25a.25.25 0 0 0 0 .5H8v2.5L5 7H4V5.5a.5.5 0 0 0-.5-.5H3V4h1.75A.25.25 0 0 0 5 3.75a.245.245 0 0 0-.223-.239V3.5L1.25 3a.25.25 0 0 0-.25.25v.5a.25.25 0 0 0 .25.25H2v1h-.5a.5.5 0 0 0-.5.5V8h5.172a1 1 0 0 0 .709-.294l.419-.414A1 1 0 0 1 8 7h1.752A.248.248 0 0 0 10 6.752v-2.5A.247.247 0 0 0 9.753 4zM9 8a1 1 0 1 0 1 1 1 1 0 0 0-1-1z"/></symbol><symbol viewBox="0 0 15 15" id="scooter-15" xmlns="http://www.w3.org/2000/svg"><title>scooter-15</title><path d="M4.908 12a1.5 1.5 0 1 1-2.816 0zm8.65-6H13V3h.351a.282.282 0 0 0 .223-.148l.268-.536a.334.334 0 0 0 .009-.066A.25.25 0 0 0 13.6 2H13v-.3a.215.215 0 0 0-.2-.2H9.25a.25.25 0 0 0 0 .5H12v4.6L7.6 10H6V7.5a.5.5 0 0 0-.5-.5H5V5h1.75a.25.25 0 0 0 0-.5l-4.484-.466c-.006 0-.01-.007-.016-.007a.25.25 0 0 0-.25.25v.473a.25.25 0 0 0 .25.25H3v2h-.5A1.538 1.538 0 0 0 1 8.5v2a.472.472 0 0 0 .442.5H7.5l2.5-1h3.5a.472.472 0 0 0 .5-.442V6.5a.472.472 0 0 0-.442-.5zM12.5 11a1.5 1.5 0 1 0 1.5 1.5 1.538 1.538 0 0 0-1.5-1.5z"/></symbol><symbol viewBox="0 0 11 11" id="shelter-11" xmlns="http://www.w3.org/2000/svg"><path d="M4 5v3h6v2H2V5.67L1 6V4l9-3v2L4 5z"/></symbol><symbol viewBox="0 0 15 15" id="shelter-15" xmlns="http://www.w3.org/2000/svg"><path d="M4 7v5h9.5v2H2V7.78l-1 .38V6l13-5v2.14L4 7z"/></symbol><symbol viewBox="0 0 11 11" id="shop-11" xmlns="http://www.w3.org/2000/svg"><path d="M9.6 4H8.49L8.2 2.27a1.47 1.47 0 0 0-1.06-1.11A2.799 2.799 0 0 0 6.33 1H4.67a2.798 2.798 0 0 0-.8.14A1.47 1.47 0 0 0 2.8 2.27L2.51 4H1.34a.37.37 0 0 0-.34.49l1.21 4.7c.135.47.56.799 1.05.81h4.48a1.12 1.12 0 0 0 1.06-.81l1.2-4.7A.37.37 0 0 0 9.6 4zM3.27 4l.27-1.61a.68.68 0 0 1 .55-.52c.185-.06.376-.093.57-.1h1.67c.194.007.385.04.57.1a.68.68 0 0 1 .55.52L7.73 4H3.27z"/></symbol><symbol viewBox="0 0 15 15" id="shop-15" xmlns="http://www.w3.org/2000/svg"><path d="M13.33 6H11.5l-.39-2.33A2 2 0 0 0 9.7 2.18 3.76 3.76 0 0 0 8.62 2H6.38a3.76 3.76 0 0 0-1.08.18 2 2 0 0 0-1.41 1.49L3.5 6H1.67a.5.5 0 0 0-.48.65l1.88 6.3A1.5 1.5 0 0 0 4.5 14h6a1.5 1.5 0 0 0 1.42-1.05l1.88-6.3a.5.5 0 0 0-.47-.65zM4.52 6l.36-2.17a.91.91 0 0 1 .74-.7c.246-.078.502-.121.76-.13h2.24c.261.008.52.051.77.13a.91.91 0 0 1 .74.7L10.48 6h-6 .04z"/></symbol><symbol viewBox="0 0 11 11" id="skiing-11" xmlns="http://www.w3.org/2000/svg"><path d="M11 3.68a1.09 1.09 0 1 1-2.18-.008A1.09 1.09 0 0 1 11 3.68zM10.17 9a.25.25 0 0 0-.33-.11 1.9 1.9 0 0 1-1.59.18L3.69 6.81l1.9-1V3.68l1.09.55v2.18L7.77 7l1.09-.55-1.09-.59V2.59L5.59 1.5 4.5 2v3.32l-1.9 1-2-1a.25.25 0 1 0-.22.45L8 9.54c.24.101.5.149.76.14a2.85 2.85 0 0 0 1.28-.33.25.25 0 0 0 .13-.35z"/></symbol><symbol viewBox="0 0 15 15" id="skiing-15" xmlns="http://www.w3.org/2000/svg"><path d="M15 4.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm-1.28 7.39a.25.25 0 0 0-.33-.11 2.69 2.69 0 0 1-2.28.25L4.78 8.86 7.5 7.5v-3l1.5.75v3l1.5.75 1.5-.75-1.5-.75V3l-3-1.5-1.5.75v4.5L3.28 8.11.61 6.78a.25.25 0 1 0-.22.45l10.5 5.25c.316.135.657.2 1 .19a3.84 3.84 0 0 0 1.72-.44.25.25 0 0 0 .113-.335l-.003-.005z"/></symbol><symbol viewBox="0 0 11 11" id="slaughterhouse-11" xmlns="http://www.w3.org/2000/svg"><title>slaughterhouse-11-01</title><path d="M11 5.75v.241C11 7 10 6.5 10 6.5H8A3.081 3.081 0 0 1 7 8a2.848 2.848 0 0 1-.416.9.26.26 0 0 0-.05.242l.458 1.55A.227.227 0 0 1 7 10.75a.25.25 0 0 1-.25.25.259.259 0 0 1-.244-.173L6 9v-.5H2.75l-.21.42a.25.25 0 0 0-.02.168L3 10.75a.25.25 0 0 1-.25.25.26.26 0 0 1-.237-.172L2 9v-.5a4.013 4.013 0 0 1-.843-.139 1.383 1.383 0 0 1-.5 1.045.242.242 0 0 0-.094.282l.414.99a.213.213 0 0 1 .011.072.25.25 0 0 1-.25.25.253.253 0 0 1-.228-.148L0 9.5a6.031 6.031 0 0 0 0-2v-2a1.486 1.486 0 0 1 2-1.4s.768.132 1.1.154a2.457 2.457 0 0 0 .9-.167A1.666 1.666 0 0 1 4.5 4a1.648 1.648 0 0 1 .844.257 3.166 3.166 0 0 0 .9.23L7 4.5 8 4v-.5l.5.5a1.474 1.474 0 0 1 1.5-.5.914.914 0 0 0-1 .5l1 1 .68.529a.425.425 0 0 1 .07-.029.238.238 0 0 1 .25.25z"/></symbol><symbol viewBox="0 0 15 15" id="slaughterhouse-15" xmlns="http://www.w3.org/2000/svg"><title>slaughterhouse-15-01</title><path d="M15 8.1c0 1.376-1.363.694-1.363.694L12.5 9H11a5.309 5.309 0 0 1-1.5 2 3.272 3.272 0 0 1-.523 1.125c-.077.091-.061.2-.068.33l.091 2.3a.264.264 0 0 1-.266.25.242.242 0 0 1-.234-.205L8 11.5H4v3.253a.247.247 0 0 1-.247.247.25.25 0 0 1-.241-.2L3 12v-.5a8.2 8.2 0 0 1-1.426-.1A1.886 1.886 0 0 1 .9 12.826c-.128.083-.148.211-.133.386l.19 1.538a.25.25 0 0 1-.25.25.238.238 0 0 1-.23-.174l-.427-1.7a.35.35 0 0 1 .055-.3c.437-.68-.049-2.55-.049-2.55A1.354 1.354 0 0 1 0 9.922V7.5a2.027 2.027 0 0 1 2.736-1.914s.1.03.142.049a15.15 15.15 0 0 0 3.814.038l.179-.062a1.842 1.842 0 0 1 1.26 0 .972.972 0 0 1 .227.089 1.994 1.994 0 0 1 .287.171A1.8 1.8 0 0 0 9.5 6h1V5l.5.5c.5-1.5 2.5-1 2.5-1a1.687 1.687 0 0 0-1.5 1l2.5 2a.613.613 0 0 1 .186-.069.318.318 0 0 1 .314.321V8.1z"/></symbol><symbol viewBox="0 0 11 11" id="snowmobile-11" xmlns="http://www.w3.org/2000/svg"><title>snowmobile-11</title><path d="M4 8.5a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1 0-1h3a.5.5 0 0 1 .5.5zm7-3a.5.5 0 0 0-.5-.5.929.929 0 0 0-.097.01L6 6h-.5a.5.5 0 0 1-.5-.5v-3a.5.5 0 0 0-.931-.253L3 4 .312 5.038A.499.499 0 0 0 0 5.5a.52.52 0 0 0 .086.28L1 7h2.411a.488.488 0 0 1 .314.116L5.723 8.77A.996.996 0 0 0 6.36 9h3.136a.504.504 0 0 0 .451-.73L9 7l1.78-1.085A.503.503 0 0 0 11 5.5z"/></symbol><symbol viewBox="0 0 15 15" id="snowmobile-15" xmlns="http://www.w3.org/2000/svg"><title>snowmobile-15</title><path d="M15 11a1 1 0 0 1-1 1H9.414a1 1 0 0 1-.707-.293l-1.561-1.561A.498.498 0 0 0 6.793 10H3.334a1.002 1.002 0 0 1-.601-.2L1.386 8.788A1.013 1.013 0 0 1 1 8a.995.995 0 0 1 .472-.844L5 5l1.038-1.692A.5.5 0 0 1 7 3.5V7l1 1h1l5.412-.992a.5.5 0 0 1 .355.915L13 9l1.631 1.224A.99.99 0 0 1 15 11zm-9.5 0H3.225a3.003 3.003 0 0 1-1.44-.368l-1.045-.57a.5.5 0 0 0-.48.877l1.269.693a3.003 3.003 0 0 0 1.44.368H5.5a.5.5 0 0 0 0-1z"/></symbol><symbol viewBox="0 0 11 11" id="soccer-11" xmlns="http://www.w3.org/2000/svg"><path d="M9 1.25a1.25 1.25 0 1 1-2.5-.001A1.25 1.25 0 0 1 9 1.25zm0 7.23a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm1.81-3.39L8.94 3.18A.48.48 0 0 0 8.56 3H1.51a.5.5 0 0 0 0 1H5L2.07 8.3a.488.488 0 0 0 0 .2.511.511 0 0 0 1 .21H3L4.16 7H6l-1.93 3.24a.49.49 0 0 0-.07.26.51.51 0 0 0 1 .2l3.67-6.38 1.48 1.48a.5.5 0 1 0 .7-.71h-.04z"/></symbol><symbol viewBox="0 0 15 15" id="soccer-15" xmlns="http://www.w3.org/2000/svg"><path d="M11 1.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm0 9.5a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm1.84-4.91l-1.91-1.91a.48.48 0 0 0-.37-.18H3.5a.5.5 0 0 0 0 1h2.7L3 11.3a.488.488 0 0 0 0 .2.511.511 0 0 0 1 .21L5 10h2l-1.93 4.24a.49.49 0 0 0-.07.26.51.51 0 0 0 1 .2l4.7-9.38 1.44 1.48a.5.5 0 0 0 .7-.71z"/></symbol><symbol viewBox="0 0 11 11" id="square-11" xmlns="http://www.w3.org/2000/svg"><path d="M9 10H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h7a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1z"/></symbol><symbol viewBox="0 0 15 15" id="square-15" xmlns="http://www.w3.org/2000/svg"><path d="M13 14H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h11a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1z"/></symbol><symbol viewBox="0 0 11 11" id="square-stroked-11" xmlns="http://www.w3.org/2000/svg"><path d="M9.19 1H1.81a.81.81 0 0 0-.81.81v7.38c0 .447.363.81.81.81h7.38a.81.81 0 0 0 .81-.81V1.81A.81.81 0 0 0 9.19 1zM2 2h7v7H2V2z"/></symbol><symbol viewBox="0 0 15 15" id="square-stroked-15" xmlns="http://www.w3.org/2000/svg"><path d="M12.7 2.3v10.4H2.3V2.3h10.4M13 1H2a1 1 0 0 0-1 1v11a1 1 0 0 0 1 1h11a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1z"/></symbol><symbol viewBox="0 0 11 11" id="stadium-11" xmlns="http://www.w3.org/2000/svg"><path d="M5 0v3.012c-2.208.097-3.912.806-4 1.67v3.681C1 9.267 3.014 10 5.5 10S10 9.267 10 8.363V4.682c-.088-.864-1.79-1.574-4-1.67v-.44L8.5 1.5 5 0zM1.818 5.752c.319.178.72.332 1.182.453v2.46c-.75-.237-1.179-.568-1.182-.915V5.752zm7.364.004V7.75c-.002.348-.43.68-1.182.916V6.203c.461-.12.862-.271 1.182-.447zM4 6.398a11.066 11.066 0 0 0 3 0v2.493C6.528 8.962 6.017 9 5.5 9S4.472 8.962 4 8.89V6.399z"/></symbol><symbol viewBox="0 0 15 15" id="stadium-15" xmlns="http://www.w3.org/2000/svg"><path d="M7 1v4.01c-2.83.094-4.998.957-5 1.99v4.5c0 1.105 2.462 2 5.5 2s5.5-.895 5.5-2V7c-.002-1.034-2.17-1.896-5-1.99v-.947l3-1.313L7 1zM3 8.146c.515.268 1.201.485 2 .633v2.967c-1.205-.269-2-.726-2-1.246V8.146zm9 .002V10.5c0 .52-.795.977-2 1.246V8.781c.799-.148 1.485-.366 2-.633zm-6 .774a14.68 14.68 0 0 0 3 .002v2.984c-.471.056-.971.092-1.5.092s-1.029-.036-1.5-.092V8.922z"/></symbol><symbol viewBox="0 0 11 11" id="star-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.4 0L4 3.5H0l3 3L1.5 11l3.9-2.6L9.5 11 8 6.5l3-3H7L5.4 0z"/></symbol><symbol viewBox="0 0 15 15" id="star-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 0l-2 5h-5l4 3.5-2 6 5-3.5 5 3.5-2-6 4-3.5h-5l-2-5z"/></symbol><symbol viewBox="0 0 11 11" id="star-stroked-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 2.69l.59 1.47.25.63h1.81l-1 .9-.5.44.18.63.56 1.69-1.32-.92-.57-.41-.57.4-1.31.92.55-1.68.21-.63-.5-.43-1-.9h1.78l.25-.63.59-1.48M5.5 0L4 3.79H.19l3 2.66L1.71 11 5.5 8.34 9.29 11 7.78 6.45l3-2.66H7L5.5 0z"/></symbol><symbol viewBox="0 0 15 15" id="star-stroked-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 3.19l1.07 2.68.25.63h3l-2 1.75-.5.44.23.63 1 3.13-2.48-1.77-.57-.4-.57.4-2.52 1.77 1-3.13.21-.63-.5-.44-2-1.75h3l.25-.63L7.5 3.19M7.5.5l-2 5h-5l4 3.5-2 6 5-3.5 5 3.5-2-6 4-3.5h-5l-2-5z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="suitcase-11" xmlns="http://www.w3.org/2000/svg"><path d="M8 3V1.578L7.36 1H3.64L3 1.748V3H1.5l-.5.5v6l.5.5h8l.5-.5v-6L9.5 3H8zM4 2h3v1H4V2z"/></symbol><symbol viewBox="0 0 15 15" id="suitcase-15" xmlns="http://www.w3.org/2000/svg"><path d="M11 4V2c0-1-1-1-1-1H5.05S3.946 1.002 4 2v2H2S1 4 1 5v7c0 1 1 1 1 1h11s1 0 1-1V5c0-1-1-1-1-1h-2zM5.5 2.5h4V4h-4V2.5z"/></symbol><symbol viewBox="0 0 11 11" id="sushi-11" xmlns="http://www.w3.org/2000/svg"><path d="M3.5 2.5c-.3 0-.5.1-.5.4h-.9c-1.1 0-2 .8-2 1.9 0 .5.3 1 .7 1.4-.5.3-.8.7-.8 1.3C0 8.3.7 9 1.6 9h5.8C8.3 9 9 8.3 9 7.5c0-.2 0-.4-.1-.6l1 .5c.4.2.8 0 1-.3.2-.4-.053-.794-.343-.944L9.8 5.8l.5-.1c.4-.1.7-.4.6-.8-.1-.4-.4-.6-.8-.6H10l-1.6.3C8 3.9 7.3 3.1 6 3c0 0 0-.5-.5-.5h-2zm.5 1h1v4.4H4V3.5zm3 2.4c.2 0 .3.1.4.3l.1-.1c.1-.2.3-.2.5-.1s.2.3.1.5l-.3.5c.1.1.2.2.2.4 0 .3-.2.5-.6.5H6v-1h.7v-.6c0-.2.1-.4.3-.4zM1.9 6c.1 0 .3 0 .4.2l.1.2c.1-.1.2-.1.3-.1.2 0 .3.2.3.3v1.3H1.6c-.4 0-.6-.2-.6-.5s.2-.5.6-.5h.3l-.2-.4c-.1-.2 0-.4.1-.5h.1z" fill="#010101"/></symbol><symbol viewBox="0 0 15 15" id="sushi-15" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 3a.5.5 0 0 0-.5.5H2.75A2.744 2.744 0 0 0 .943 8.313 1.998 1.998 0 0 0 0 10c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2 0-.488-.186-.93-.48-1.277l2.177.963a.75.75 0 1 0 .606-1.372l-1.81-.802 1.63-.272a.75.75 0 1 0-.246-1.48l-2.13.355C11.258 4.952 10.038 3.784 8 3.55V3.5a.5.5 0 0 0-.5-.5h-2zM6 4h1v7H6V4zm3.5 4c.259 0 .464.197.49.45l.076-.134a.5.5 0 1 1 .866.5l-.258.448A.986.986 0 0 1 11 10c0 .563-.437 1-1 1H8V9h1v-.5c0-.277.223-.5.5-.5zm-7.06.07a.498.498 0 0 1 .494.246l.2.348A.493.493 0 0 1 3.5 8.5c.277 0 .5.223.5.5h1v2H2c-.563 0-1-.437-1-1s.437-1 1-1h.174l-.106-.184a.497.497 0 0 1 .371-.746z"/></symbol><symbol viewBox="0 0 11 11" id="swimming-11" xmlns="http://www.w3.org/2000/svg"><path d="M8.004.494l-.7.502-2.7 1.602c-.3.099-.4.598-.202.898l.6 1.002-2.5 2 1 1.002 2-1.002L7.504 7.5l1-1.002-3.002-3.502 3.002-1.5V.494h-.5zm1.002 2.502a1 1 0 1 0 0 0zM2 7.998L0 9v1l2-1 1.5 1 2-1 2 1L9 9l2 1V9L9 7.998 7.5 9l-2-1.002L3.5 9 2 7.998z"/></symbol><symbol viewBox="0 0 15 15" id="swimming-15" xmlns="http://www.w3.org/2000/svg"><path d="M10.111 2c-.112 0-.435.147-.435.147l-3.322 1.68c-.443.175-.618.881-.352 1.234l.97 1.408-3.97 2.029L5 9.998l2.502-1.5 2.5 1.5 1.002-1.002-3-4 2.557-1.53c.528-.266.443-.704.443-.97C11 2.286 10.644 2 10.111 2zm2.141 3a1.75 1.75 0 1 0-.003 3.501A1.75 1.75 0 0 0 12.252 5zM2.5 10L0 11.5V13l2.5-1.5L5 13l2.502-1.5 2.5 1.5L12 11.5l3 1.5v-1.5L12 10l-1.998 1.5-2.5-1.5L5 11.5 2.5 10z"/></symbol><symbol viewBox="0 0 11 11" id="teahouse-11" xmlns="http://www.w3.org/2000/svg"><title>teahouse</title><path d="M6.2 4C7.4 3.7 8 3.7 8 2.5c0-.6-.4-.8-1.6-1.3C5.6.9 5.3.9 5.3.1c-.3.9-.1 1.2.8 1.7 2 1 .1 2.2.1 2.2zM3.9 4c.7-.2 1.1-.2 1.1-.9 0-.4-.3-.5-1-.9-.5-.2-.7-.7-.7-1.2-.2.6-.1 1.3.5 1.6 1.2.6.1 1.4.1 1.4zM9 5H2l1 3c.3.4.6.7 1 1v2h3V9c.4-.3.7-.6 1-1l1-3z"/></symbol><symbol viewBox="0 0 15 15" id="teahouse-15" xmlns="http://www.w3.org/2000/svg"><path d="M11 7c-.2 1.4-.5 2.7-1 4-.3.4-.6.7-1 1v2H6v-2c-.4-.3-.7-.6-1-1-.5-1.3-.8-2.6-1-4h7zM8.1 5.7c1.2-.3 1.7-.3 1.8-1.5 0-.6-.4-.8-1.5-1.4-.9-.4-1.3-1-1.2-1.8-.4.9-.2 2 .8 2.5 2 1 .1 2.2.1 2.2zM5.8 6c.7-.2 1.1-.2 1.1-.9 0-.4-.3-.5-.9-.9-.6-.2-.9-.7-.8-1.2-.3.6-.1 1.3.5 1.6 1.2.6.1 1.4.1 1.4z"/></symbol><symbol viewBox="0 0 11 11" id="telephone-11" xmlns="http://www.w3.org/2000/svg"><title>telephone-11</title><path d="M3 9.4a.73.73 0 0 0 1 0l.74-.74a.73.73 0 0 0 0-1zm4.56-4.6a.73.73 0 0 0 1 0l.71-.71a.73.73 0 0 0 0-1zM5.88 3.57L3.57 5.88a.37.37 0 0 0 0 .52l.43.44L2.26 8.6a2.27 2.27 0 0 1-.73-1.34v-1a1.345 1.345 0 0 1 .52-1l3.21-3.21a1.345 1.345 0 0 1 1-.52h1a2.27 2.27 0 0 1 1.34.73L6.84 4l-.44-.43a.37.37 0 0 0-.52 0"/></symbol><symbol viewBox="0 0 15 15" id="telephone-15" xmlns="http://www.w3.org/2000/svg"><title>telephone-15</title><path d="M4.51 8.88a.51.51 0 0 0 0 .72l.72.72-2.16 2.18-.37-.37a2.24 2.24 0 0 1-.7-1.44V9.24a2.24 2.24 0 0 1 .7-1.45l5.07-5.07A2.24 2.24 0 0 1 9.22 2h1.45a2.24 2.24 0 0 1 1.45.72l.36.36-2.17 2.18-.73-.73a.51.51 0 0 0-.72 0zm-.38 4.72a1 1 0 0 0 1.414.036l.036-.036.72-.72a1 1 0 0 0 .036-1.414L6.3 11.43zm7.25-7.28a1 1 0 0 0 1.414.036l.756-.756a1 1 0 0 0 .036-1.414l-.036-.036z"/></symbol><symbol viewBox="0 0 11 11" id="tennis-11" xmlns="http://www.w3.org/2000/svg"><path d="M3 3a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm6.87 1.55L8.3 3A1.89 1.89 0 0 0 7.8.7 2.25 2.25 0 0 0 6.26 0a1.26 1.26 0 0 0-.91.35A1.79 1.79 0 0 0 5.7 2.8a2.25 2.25 0 0 0 1.54.7 1.3 1.3 0 0 0 .69-.21l1.6 1.6a.23.23 0 0 0 .2.12.25.25 0 0 0 .27-.26.24.24 0 0 0-.13-.2zM7.8 2.8a.77.77 0 0 1-.56.2 1.76 1.76 0 0 1-1.19-.55A1.33 1.33 0 0 1 5.7.7a.78.78 0 0 1 .56-.2c.453.023.879.22 1.19.55.549.407.7 1.163.35 1.75zM6.5 5h-5a.5.5 0 0 0-.5.5v5a.5.5 0 0 0 1 0V8h1v2.5a.5.5 0 0 0 1 0V6h2.5a.5.5 0 0 0 0-1z"/></symbol><symbol viewBox="0 0 15 15" id="tennis-15" xmlns="http://www.w3.org/2000/svg"><path d="M8 4.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm6.38.55l-1.57-1.59a1.89 1.89 0 0 0-.5-2.25 2.25 2.25 0 0 0-1.54-.7 1.26 1.26 0 0 0-.91.35 1.79 1.79 0 0 0 .35 2.45 2.25 2.25 0 0 0 1.54.7 1.3 1.3 0 0 0 .69-.21L14 5.39a.23.23 0 0 0 .2.12.25.25 0 0 0 .25-.25.24.24 0 0 0-.07-.21zM12.31 3.3a.77.77 0 0 1-.56.2 1.76 1.76 0 0 1-1.18-.5 1.33 1.33 0 0 1-.35-1.74.78.78 0 0 1 .55-.26c.468.015.91.217 1.23.56a1.33 1.33 0 0 1 .31 1.74zm.54 2.34a.5.5 0 0 0-.707-.003l-.003.003L10.79 7h-4.9a.5.5 0 0 0-.48.38l-.79 3.11-.72 2.87a.5.5 0 0 0 .31.63h.16a.5.5 0 0 0 .47-.34l.8-3.19H7v3a.5.5 0 0 0 1 0v-3L9 8h2.21l1.65-1.65a.5.5 0 0 0-.01-.7v-.01z"/></symbol><symbol viewBox="0 0 11 11" id="theatre-11" xmlns="http://www.w3.org/2000/svg"><path d="M.606.7C.303.7 0 1.001 0 1.304v3.734C0 6.452.578 8 3 8h.5V6.184l-2.29-.008s.304-1.137 1.817-1.137c.303 0 .404 0 .606.102V3.727c0-.606.202-1.008.605-1.31C4.541 2.112 4.79 2 5.394 2H6v-.605c0-.303-.197-.659-.5-.659-.606 0-1.16.569-2.473.569-1.009 0-1.816-.606-2.421-.606zM1.75 2.5a.75.75 0 1 1 0 1.5.75.75 0 0 1 0-1.5zM5.5 3c-.303 0-.555.424-.555.727V7.46c0 1.413.606 3.027 3.028 3.027S11 8.773 11 7.461V3.727c0-.303-.197-.727-.5-.727-.605 0-1.592.5-2.5.5S6.106 3 5.5 3zm1.25 2a.75.75 0 1 1 0 1.5.75.75 0 0 1 0-1.5zm2.5 0a.75.75 0 1 1 0 1.5.75.75 0 0 1 0-1.5zM6.156 8.066h3.735s-.303 1.211-1.817 1.211-1.918-1.21-1.918-1.21z"/></symbol><symbol viewBox="0 0 15 15" id="theatre-15" xmlns="http://www.w3.org/2000/svg"><path d="M2 1S1 1 1 2v5.158C1 8.888 1.354 11 4.5 11H5V8L2.5 9s0-2.5 2.5-2.5V5c0-.708.087-1.32.5-1.775.381-.42 1.005-1.258 2.656-.471L9 3.303V2s0-1-1-1c-.708 0-1.978 1-3 1S2.787 1 2 1zm1 2a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 1S6 4 6 5v5c0 2 1 4 4 4s4-2 4-4V5c0-1-1-1-1-1-.708 0-1.978 1-3 1S7.787 4 7 4zm1 2a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm4 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm-4.5 4h5s0 2.5-2.5 2.5S7.5 10 7.5 10z"/></symbol><symbol viewBox="0 0 11 11" id="toilet-11" xmlns="http://www.w3.org/2000/svg"><path d="M3.33 2.19a1.1 1.1 0 1 1 1.1-1.1 1.1 1.1 0 0 1-1.1 1.1zm6.94-1.1a1.1 1.1 0 1 0 0 .01v-.01zM6.51 4.93L4.7 3.12A.37.37 0 0 0 4.43 3H2.22a.37.37 0 0 0-.25.1H2L.14 4.93a.38.38 0 1 0 .53.53l1.58-1.58L.77 8h1.46v2.51a.38.38 0 0 0 .75.11H3V8h.69v2.63a.38.38 0 0 0 .75-.11V8h1.44L4.41 3.88 6 5.46a.37.37 0 0 0 .28.12c.21 0 .38-.17.38-.38a.37.37 0 0 0-.15-.27zM8.62 7v3.63a.37.37 0 1 0 .73 0V7H11V3.37a.37.37 0 0 0-.37-.37H7.71a.37.37 0 0 0-.37.37V7h1.28z"/></symbol><symbol viewBox="0 0 15 15" id="toilet-15" xmlns="http://www.w3.org/2000/svg"><path d="M4.5 3a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zM14 1.5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0zM8.86 6.64L6.38 4.15A.51.51 0 0 0 6 4H3a.51.51 0 0 0-.35.14L.14 6.63a.52.52 0 1 0 .73.73L3 5.2 1 11h2v3.33a.503.503 0 0 0 0 .15.51.51 0 0 0 1 0V11h1v3.5a.51.51 0 0 0 1 0 .503.503 0 0 0 0-.15V11h2L6 5.2l2.14 2.16a.51.51 0 0 0 .38.17A.52.52 0 0 0 9 7a.51.51 0 0 0-.14-.36zM14.5 4h-4a.5.5 0 0 0-.5.5v5a.5.5 0 0 0 1 0v5a.5.5 0 0 0 1 0v-5h1v5a.5.5 0 0 0 1 0v-5a.5.5 0 0 0 1 0v-5a.5.5 0 0 0-.5-.5z"/></symbol><symbol viewBox="0 0 11 11" id="town-11" xmlns="http://www.w3.org/2000/svg"><title>town-11-01</title><path d="M3.695 1.1a.256.256 0 0 0-.4 0l-2.24 2.831A.254.254 0 0 0 1 4.088V9.75a.25.25 0 0 0 .25.25h1.5A.25.25 0 0 0 3 9.75V8h1v1.75a.25.25 0 0 0 .25.25H5V5.5a.615.615 0 0 1 .147-.4L6 4zM3 7H2V6h1zm0-2H2V4h1zm5.194-1.258a.248.248 0 0 0-.387 0l-1.753 2.19A.249.249 0 0 0 6 6.087v3.665a.248.248 0 0 0 .248.248h3.5A.248.248 0 0 0 10 9.756V6.087a.249.249 0 0 0-.054-.155zM7 6h1v1H7zm2 3H8V8h1z"/></symbol><symbol viewBox="0 0 15 15" id="town-15" xmlns="http://www.w3.org/2000/svg"><title>town-15</title><path d="M10.651 7.121a.251.251 0 0 0-.314 0L8.092 8.929A.247.247 0 0 0 8 9.122v4.625a.253.253 0 0 0 .253.253h1.494a.253.253 0 0 0 .253-.253V12h1v1.747a.253.253 0 0 0 .253.253h1.494a.253.253 0 0 0 .253-.253V9.12a.25.25 0 0 0-.094-.2zM10 11H9v-1h1zm2 0h-1v-1h1zM5.71 1.815a.252.252 0 0 0-.42 0L2.042 5.936a.252.252 0 0 0-.042.14v7.671a.252.252 0 0 0 .251.253h2.5A.252.252 0 0 0 5 13.748V12h1v1.748a.252.252 0 0 0 .252.252H7V8a.5.5 0 0 1 .188-.391L9 6c0-.05-3.29-4.185-3.29-4.185zM4 10H3V9h1zm0-3H3V6h1zm2 3H5V9h1zm0-3H5V6h1z"/></symbol><symbol viewBox="0 0 11 11" id="town-hall-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 0L1 2v1h9V2L5.5 0zM2 4v4L1 9v1h9V9L9 8V4H2zm1 1h1v3H3V5zm2 0h1v3H5V5zm2 0h1v3H7V5z"/></symbol><symbol viewBox="0 0 15 15" id="town-hall-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 0L1 3.445V4h13v-.555L7.5 0zM2 5v5l-1 1.555V13h13v-1.445L13 10V5H2zm2 1h1v5.5H4V6zm3 0h1v5.5H7V6zm3 0h1v5.5h-1V6z"/></symbol><symbol viewBox="0 0 11 11" id="triangle-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.517 1.232a.556.556 0 0 0-.493.268l-4 6.66c-.223.37.044.84.476.84h8c.432 0 .699-.47.476-.84l-4-6.66a.556.556 0 0 0-.459-.268z"/></symbol><symbol viewBox="0 0 15 15" id="triangle-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.538 2c-.294 0-.488.177-.615.385l-5.846 9.538C1 12 1 12.153 1 12.308c0 .538.385.692.692.692h11.616c.384 0 .692-.154.692-.692 0-.154 0-.231-.077-.385l-5.77-9.538C8.029 2.177 7.789 2 7.539 2z"/></symbol><symbol viewBox="0 0 11 11" id="triangle-stroked-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.517 1.232a.556.556 0 0 0-.493.268l-4 6.66c-.223.37.044.84.476.84h8c.432 0 .699-.47.476-.84l-4-6.66a.556.556 0 0 0-.459-.268zM5.5 2.861l3.02 5.03H2.48l3.02-5.03z"/></symbol><symbol viewBox="0 0 15 15" id="triangle-stroked-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.524 1.5a.77.77 0 0 0-.69.395l-5.5 9.87C1.022 12.307 1.395 13 2 13h11c.605 0 .978-.692.666-1.236l-5.5-9.869a.773.773 0 0 0-.642-.395zM7.5 3.9l4.127 7.47H3.373L7.5 3.9z"/></symbol><symbol viewBox="0 0 11 11" id="veterinary-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 4.32a2.2 2.2 0 0 0-2.14 2.46 4.4 4.4 0 0 0-1.21.63 1.42 1.42 0 0 0-.29 2 1.48 1.48 0 0 0 2 .28 2.89 2.89 0 0 1 1.64-.52 2.89 2.89 0 0 1 1.64.49c.6.495 1.49.41 1.985-.191l.015-.019a1.35 1.35 0 0 0-.21-2l-.08-.04a6.4 6.4 0 0 0-1.21-.63A2.2 2.2 0 0 0 5.5 4.32zm-3.87-1.2a1.11 1.11 0 0 0-.55 1.44 1.08 1.08 0 0 0 1.15 1 1.11 1.11 0 0 0 .55-1.44 1.08 1.08 0 0 0-1.15-1zm7.74 0c.541.254.784.89.55 1.44a1.08 1.08 0 0 1-1.15 1 1.11 1.11 0 0 1-.55-1.44 1.08 1.08 0 0 1 1.15-1zM3.77 1a1 1 0 0 0-.55 1.32 1.26 1.26 0 0 0 1.16 1.09 1 1 0 0 0 .558-1.3l-.008-.02A1.26 1.26 0 0 0 3.77 1zm3.46 0a1 1 0 0 1 .558 1.3l-.008.02a1.26 1.26 0 0 1-1.16 1.09 1 1 0 0 1-.559-1.3l.009-.02A1.26 1.26 0 0 1 7.23 1z"/></symbol><symbol viewBox="0 0 15 15" id="veterinary-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.5 6c-2.5 0-3 2.28-3 3.47a6.15 6.15 0 0 0-1.7.89 2 2 0 0 0-.4 2.78 2.06 2.06 0 0 0 2.8.4 4 4 0 0 1 2.3-.69 4 4 0 0 1 2.3.69 2 2 0 0 0 2.8-.3 1.93 1.93 0 0 0-.3-2.78l-.1-.1a8.996 8.996 0 0 0-1.7-.89C10.5 8.29 10 6 7.5 6zM2.08 4.3a1.58 1.58 0 0 0-.76 2 1.52 1.52 0 0 0 1.61 1.4 1.58 1.58 0 0 0 .76-2 1.52 1.52 0 0 0-1.61-1.4zM12.93 4.3a1.58 1.58 0 0 1 .76 2 1.52 1.52 0 0 1-1.61 1.4 1.58 1.58 0 0 1-.76-2 1.52 1.52 0 0 1 1.61-1.4zM5.08 1.3c-.68.09-1 .94-.76 1.87A1.77 1.77 0 0 0 5.93 4.7c.68-.09 1-.94.76-1.87A1.77 1.77 0 0 0 5.08 1.3zM9.93 1.3c.68.09 1 .94.76 1.87A1.77 1.77 0 0 1 9.07 4.7c-.68-.08-1-.94-.76-1.87A1.77 1.77 0 0 1 9.93 1.3z"/></symbol><symbol viewBox="0 0 11 11" id="village-11" xmlns="http://www.w3.org/2000/svg"><title>village-11</title><path d="M2.777 2.3L.3 5.6a.272.272 0 0 0-.05.15A.25.25 0 0 0 .5 6H1v3.745a.255.255 0 0 0 .255.255h2.49A.255.255 0 0 0 4 9.745V5.467a.253.253 0 0 1 .064-.167L5 4.5 3.2 2.316a.255.255 0 0 0-.423-.016zM3 7H2V6h1zm6.75-4h-.5a.25.25 0 0 0-.25.25V5.2L7.658 4.126a.253.253 0 0 0-.316 0L5.1 5.926a.253.253 0 0 0-.095.2v3.621a.253.253 0 0 0 .248.253h1.494A.253.253 0 0 0 7 9.747V8h1v1.747a.253.253 0 0 0 .253.253h1.494A.253.253 0 0 0 10 9.747V3.25A.25.25 0 0 0 9.75 3zM7 7H6V6h1zm2 0H8V6h1z"/></symbol><symbol viewBox="0 0 15 15" id="village-15" xmlns="http://www.w3.org/2000/svg"><title>village-15</title><path d="M6.176 4.176a.249.249 0 0 0-.352 0l-4.4 4.4A.25.25 0 0 0 1.6 9H3v4.751a.249.249 0 0 0 .249.249h3.5A.249.249 0 0 0 7 13.753v-5.43a.249.249 0 0 1 .073-.176L8.5 6.5zM6 12H5v-1h1zm0-2H5V9h1zm6.75-4h-.5a.25.25 0 0 0-.25.25V8l-1.324-1.824a.249.249 0 0 0-.352 0L8.056 8.932A.246.246 0 0 0 8 9.088v4.66a.249.249 0 0 0 .246.252h1.5a.253.253 0 0 0 .254-.252V12h1v1.747a.253.253 0 0 0 .253.253h1.5a.25.25 0 0 0 .247-.249V6.25a.25.25 0 0 0-.25-.25zM10 11H9v-1h1zm2 0h-1v-1h1z"/></symbol><symbol viewBox="0 0 11 11" id="volcano-11" xmlns="http://www.w3.org/2000/svg"><path d="M3 1l1.5 3h2L8 3V2L6 3V1h-.5L5 2.5 3.5 1H3zm.522 4L1.023 9.16c-.223.37.044.84.476.84h8c.432 0 .7-.47.477-.84L7.479 5H7v.5a.499.499 0 1 1-1 0 .5.5 0 0 0-1 0v2a.499.499 0 1 1-1 0V5h-.478z"/></symbol><symbol viewBox="0 0 15 15" id="volcano-15" xmlns="http://www.w3.org/2000/svg"><path d="M8.484 1a.502.502 0 0 0-.375.188L6.45 3.262 4.844 1.738c-.436-.4-1.084.155-.754.647l1.666 2.4a.5.5 0 0 0 .803.026c.166-.21.441-.678.941-.678s.793.49.941.678a.5.5 0 0 0 .713.072l1.668-1.4c.441-.375 0-1.074-.527-.838L9 3.227V1.5a.5.5 0 0 0-.516-.5zM5 6l-2.924 5.924C2 12.001 2 12.155 2 12.309c0 .538.384.691.691.691h9.618c.384 0 .691-.153.691-.691 0-.154 0-.231-.076-.385L10 6c-.5 0-1 .5-1 1v.5a.499.499 0 1 1-1 0V7a.5.5 0 1 0-1 0v2a.499.499 0 1 1-1 0V7c0-.5-.5-1-1-1z" fill="#010101"/></symbol><symbol viewBox="0 0 11 11" id="warehouse-11" xmlns="http://www.w3.org/2000/svg"><path d="M3 11H0V8h3v3zm4-3H4v3h3V8zm4 0H8v3h3V8zM5 4H2v3h3V4zm4 0H6v3h3V4zm1.44-.76a.5.5 0 0 0-.19-.68L5.75.06a.5.5 0 0 0-.49 0l-4.5 2.5a.5.5 0 0 0 .49.87L5.5 1.07l4.26 2.37a.5.5 0 0 0 .679-.198l.001-.002z"/></symbol><symbol viewBox="0 0 15 15" id="warehouse-15" xmlns="http://www.w3.org/2000/svg"><path d="M13.5 5a.5.5 0 0 1-.22-.05L7.5 2 1.72 4.93A.514.514 0 0 1 1.28 4L7.5.92 13.72 4a.512.512 0 0 1-.22 1zM5 10H2v3h3v-3zm4 0H6v3h3v-3zm4 0h-3v3h3v-3zm-2-4H8v3h3V6zM7 6H4v3h3V6z"/></symbol><symbol viewBox="0 0 11 11" id="waste-basket-11" xmlns="http://www.w3.org/2000/svg"><path d="M9 4l-1.17 7H3.17L2 4h7zm.25-1.75A.25.25 0 0 1 9 2.5H2A.25.25 0 1 1 2 2h2V0h3v2h2a.25.25 0 0 1 .25.25zM6.5 2V.5h-2V2h2z"/></symbol><symbol viewBox="0 0 15 15" id="waste-basket-15" xmlns="http://www.w3.org/2000/svg"><path d="M12.41 5.58l-1.34 8a.5.5 0 0 1-.49.41H4.42a.5.5 0 0 1-.49-.41l-1.34-8A.5.5 0 0 1 3.08 5h8.83a.5.5 0 0 1 .5.58zM13 3.5a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1 0-1H5V1.5a.5.5 0 0 1 .5-.5h4a.5.5 0 0 1 .5.5V3h2.5a.5.5 0 0 1 .5.5zM9 3V2H6v1h3z"/></symbol><symbol viewBox="0 0 11 11" id="water-11" xmlns="http://www.w3.org/2000/svg"><path d="M5.5 11C3.59 11 2 9 2 7s2.61-5.81 3.5-7C6.39 1.19 9 5 9 7s-1.59 4-3.5 4z"/></symbol><symbol viewBox="0 0 15 15" id="water-15" xmlns="http://www.w3.org/2000/svg"><path d="M7.49 15A5.84 5.84 0 0 1 2 9.5C2 6.6 6.25 1.66 7.49 0c1.24 1.66 5 6.59 5 9.49S10.17 15 7.49 15z"/></symbol><symbol viewBox="0 0 11 11" id="wetland-11" xmlns="http://www.w3.org/2000/svg"><path d="M1.11 3.33A1.58 1.58 0 0 1 2.19 3 1.71 1.71 0 0 1 4 4.41l.57 3.39a1.66 1.66 0 0 0-1.44 0l-.57-3.39a1.6 1.6 0 0 0-1.45-1.08zm4.34 4.88a2.47 2.47 0 0 1 .94-.47l.9-5.5a1.6 1.6 0 0 1 1.45-1.08A1.58 1.58 0 0 0 7.65.8a1.71 1.71 0 0 0-1.81 1.44L4.9 7.88c.197.086.382.197.55.33zm3.13-.36c.113-.094.233-.177.36-.25l.5-3.21a1.6 1.6 0 0 1 1.45-1.09 1.58 1.58 0 0 0-1.09-.36A1.71 1.71 0 0 0 8 4.39l-.48 3c.381.069.74.226 1.05.46h.01zm1.56.9a1.29 1.29 0 0 0-.86.3l-.34.3a.54.54 0 0 1-.7 0l-.33-.28a1.38 1.38 0 0 0-1.77 0l-.34.3a.54.54 0 0 1-.69 0l-.34-.32A1.38 1.38 0 0 0 3 9.06c-.11.09-.21.19-.32.28a.67.67 0 0 1-.22.11.61.61 0 0 1-.58-.18 4.465 4.465 0 0 0-.57-.42.89.89 0 0 0-.51-.1.36.36 0 0 0 0 .72.67.67 0 0 1 .46.23l.22.2a1.37 1.37 0 0 0 1.69 0c.14-.1.26-.23.4-.34a.54.54 0 0 1 .71 0l.25.29a1.38 1.38 0 0 0 1.78 0c.11-.08.2-.18.3-.27a.56.56 0 0 1 .79 0l.29.3c.36.311.856.414 1.31.27a1.55 1.55 0 0 0 .69-.43.68.68 0 0 1 .49-.25.366.366 0 1 0-.05-.73l.01.01z"/></symbol><symbol viewBox="0 0 15 15" id="wetland-15" xmlns="http://www.w3.org/2000/svg"><path d="M1.48 4.5A2.18 2.18 0 0 1 3 4a2.36 2.36 0 0 1 2.5 2l.78 4.68a2.3 2.3 0 0 0-2 .05L3.48 6a2.21 2.21 0 0 0-2-1.5zm6 6.74a3.41 3.41 0 0 1 1.3-.65L10 3a2.21 2.21 0 0 1 2-1.5 2.18 2.18 0 0 0-1.5-.5A2.36 2.36 0 0 0 8 3l-1.3 7.79c.279.115.54.267.78.45zm4.32-.5c.157-.128.324-.241.5-.34L13 6a2.21 2.21 0 0 1 2-1.5 2.18 2.18 0 0 0-1.5-.5A2.36 2.36 0 0 0 11 6l-.67 4a3.41 3.41 0 0 1 1.47.74zM14 12a1.78 1.78 0 0 0-1.19.42l-.47.41a.75.75 0 0 1-1 0c-.15-.12-.29-.26-.44-.39a1.9 1.9 0 0 0-2.45 0c-.16.13-.31.28-.47.41a.75.75 0 0 1-1 0c-.16-.13-.31-.28-.47-.41a1.9 1.9 0 0 0-2.44 0c-.15.13-.29.27-.44.39a.92.92 0 0 1-.3.16.84.84 0 0 1-.8-.25 6.167 6.167 0 0 0-.79-.58 1.23 1.23 0 0 0-.68-.16H1a.5.5 0 0 0 0 1 .93.93 0 0 1 .64.31l.36.26a1.9 1.9 0 0 0 2.33.06c.19-.14.36-.32.55-.47a.75.75 0 0 1 1 0l.39.35a1.91 1.91 0 0 0 2.46.07c.15-.11.27-.25.42-.37a.77.77 0 0 1 1.089-.011l.011.011.39.35a1.89 1.89 0 0 0 1.76.37 2.14 2.14 0 0 0 1-.6A1 1 0 0 1 14 13a.5.5 0 0 0 0-1z"/></symbol><symbol viewBox="0 0 11 11" id="wheelchair-11" xmlns="http://www.w3.org/2000/svg"><path d="M9 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0zM2.5 4a.5.5 0 0 0 .18 0l1.79-.83.46.48-.54.85a3.74 3.74 0 0 1 2.07 1.06l.44-.8a.64.64 0 0 0-.2-.89L4.85 2.15A.49.49 0 0 0 4.3 2l-2 1a.51.51 0 0 0 .2 1zm4.09 4.2a2.74 2.74 0 0 1-.51 1.57 2.42 2.42 0 0 1-.71.71 2.74 2.74 0 0 1-1.58.52A2.8 2.8 0 0 1 1 8.2a2.74 2.74 0 0 1 .52-1.58c.206-.266.445-.504.71-.71a2.74 2.74 0 0 1 1.56-.51 2.8 2.8 0 0 1 2.8 2.8zm-1.4.69a1.54 1.54 0 0 0 .18-.69 1.58 1.58 0 0 0-1.58-1.57 1.54 1.54 0 0 0-.69.18 2.14 2.14 0 0 0-.71.7 1.54 1.54 0 0 0-.18.7 1.58 1.58 0 0 0 1.58 1.57 1.54 1.54 0 0 0 .7-.18 1.9 1.9 0 0 0 .7-.71zM9 6.4a.49.49 0 0 0-.53-.4H6.82c.223.305.398.642.52 1H8l1 2.59a.5.5 0 0 0 .49.4h.1a.5.5 0 0 0 .413-.574L10 9.4l-1-3z"/></symbol><symbol viewBox="0 0 15 15" id="wheelchair-15" xmlns="http://www.w3.org/2000/svg"><path d="M12 1.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zM2.82 4.87l1.74-1.71 1.85 1.29-.74 1.25a5.49 5.49 0 0 1 2.71 1.88l.88-1.5a.86.86 0 0 0-.34-1.17l-.62-.37L4.79 2.1a.5.5 0 0 0-.64.05l-2 2a.5.5 0 0 0 .67.72zm5.31 6.07a4.11 4.11 0 0 1-1.54 3.16 4 4 0 0 1-2.52.9A4.07 4.07 0 0 1 0 10.94a4 4 0 0 1 .91-2.53c.187-.232.398-.443.63-.63a4 4 0 0 1 2.53-.91 4.07 4.07 0 0 1 4.06 4.07zM6 12.21A2.29 2.29 0 0 0 2.79 9a1.72 1.72 0 0 0-.63.63 2.29 2.29 0 0 0 3.17 3.17c.25-.164.476-.362.67-.59zm8.2 1l-2.49-5a.75.75 0 0 0-.71-.46H8.51c.33.458.586.964.76 1.5h1.26l2.29 4.58a.754.754 0 1 0 1.35-.67l.03.05z"/></symbol><symbol viewBox="0 0 11 11" id="zoo-11" xmlns="http://www.w3.org/2000/svg"><path d="M8 2c-.9 0-1.5.5-1.8 1.1 0 0-.7.9-1.2.9H3c-.5 0-1 .5-1 .5l-2 2V7h.5l1.2-1.2.2.2S1 7.7 1 9c0 .5.5.5.5.5H2s.2 0 0-.2l-.2-.2c0-.5.8-1.4 1.2-1.9v1.4c0 .3.111.9.411.9h.5s.2 0 0-.2l-.2-.2c-.2-.4.589-1.6.589-1.6h1.8L6.6 9c.2.5.5.5.5.5h1c.2 0 .7-.2.2-.5l-.2-.2V7c1 0 1.1-1.3 1.5-1.7l.7-.1c.2 0 .8-.2.8-.8V4L9.9 3C9.4 2.4 8.7 2 8 2z" fill="#010101"/></symbol><symbol viewBox="0 0 15 15" id="zoo-15" xmlns="http://www.w3.org/2000/svg"><path d="M8.388 3.893S7.682 5 7 5H4.5c-.682 0-1.298.409-1.773.864L.5 8c-.269.258-.493.768-.5 1-.016.5 0 1 0 1s1 0 1-1v-.5l1-1h.5l.158.29s-.954 1.824-.954 3.528c0 .682.682.682.682.682h.682s.341 0 0-.34l-.34-.342C2.727 10.636 3.5 9.667 4 9c0 0 .017 1.158 0 2-.008.41.272 1 .682 1h.682s.34 0 0-.34l-.341-.342C4.71 10.75 5.5 8.5 5.5 8.5c1.272 0 1.5.5 3 .5l.364 2.318c.111.71.636.682.636.682H11c.34 0 .961-.311.34-.774L11 11V9c1.214-.172 2-1 2-2h1c.321 0 1 0 1-.5v-1l-1.704-1.682C12.543 3.078 12 2.5 11 2.5c-1.453 0-2.136.569-2.612 1.393z"/></symbol></svg>
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/img/traffic-signs/traffic-signs.json b/vendor/assets/iD/iD/img/traffic-signs/traffic-signs.json
new file mode 100644 (file)
index 0000000..a19b0be
--- /dev/null
@@ -0,0 +1,2823 @@
+{
+  "complementary--both-directions--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 0,
+    "y": 0
+  },
+  "complementary--chevron-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 24,
+    "y": 0
+  },
+  "complementary--chevron-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 0,
+    "y": 24
+  },
+  "complementary--maximum-speed-limit-10--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 24,
+    "y": 24
+  },
+  "complementary--maximum-speed-limit-15--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 48,
+    "y": 0
+  },
+  "complementary--maximum-speed-limit-20--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 72,
+    "y": 0
+  },
+  "complementary--maximum-speed-limit-25--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 48,
+    "y": 24
+  },
+  "complementary--maximum-speed-limit-30--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 72,
+    "y": 24
+  },
+  "complementary--maximum-speed-limit-35--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 0,
+    "y": 48
+  },
+  "complementary--maximum-speed-limit-40--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 24,
+    "y": 48
+  },
+  "complementary--maximum-speed-limit-45--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 48,
+    "y": 48
+  },
+  "complementary--maximum-speed-limit-50--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 72,
+    "y": 48
+  },
+  "complementary--maximum-speed-limit-55--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 0,
+    "y": 72
+  },
+  "complementary--maximum-speed-limit-60--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 24,
+    "y": 72
+  },
+  "complementary--maximum-speed-limit-65--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 48,
+    "y": 72
+  },
+  "complementary--one-direction-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 72,
+    "y": 72
+  },
+  "complementary--one-direction-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 96,
+    "y": 0
+  },
+  "information--bus-stop--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 120,
+    "y": 0
+  },
+  "information--dead-end--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 144,
+    "y": 0
+  },
+  "information--dead-end-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 168,
+    "y": 0
+  },
+  "information--dead-end-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 96,
+    "y": 24
+  },
+  "information--disabled-persons--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 120,
+    "y": 24
+  },
+  "information--end-of-limited-access-road--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 144,
+    "y": 24
+  },
+  "information--end-of-living-street--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 168,
+    "y": 24
+  },
+  "information--end-of-motorway--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 96,
+    "y": 48
+  },
+  "information--highway-exit--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 120,
+    "y": 48
+  },
+  "information--highway-interchange--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 144,
+    "y": 48
+  },
+  "information--limited-access-road--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 168,
+    "y": 48
+  },
+  "information--living-street--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 96,
+    "y": 72
+  },
+  "information--living-street--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 120,
+    "y": 72
+  },
+  "information--motorway--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 144,
+    "y": 72
+  },
+  "information--parking--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 168,
+    "y": 72
+  },
+  "information--parking--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 0,
+    "y": 96
+  },
+  "information--pedestrians-crossing--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 24,
+    "y": 96
+  },
+  "information--road-bump--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 48,
+    "y": 96
+  },
+  "information--street-name--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 72,
+    "y": 96
+  },
+  "information--tunnel--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 96,
+    "y": 96
+  },
+  "regulatory--bicycles-only--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 120,
+    "y": 96
+  },
+  "regulatory--bicycles-only--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 144,
+    "y": 96
+  },
+  "regulatory--bicycles-only--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 168,
+    "y": 96
+  },
+  "regulatory--bicycles-only--g5": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 0,
+    "y": 120
+  },
+  "regulatory--buses-only--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 24,
+    "y": 120
+  },
+  "regulatory--buses-only--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 48,
+    "y": 120
+  },
+  "regulatory--do-not-block-intersection--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 72,
+    "y": 120
+  },
+  "regulatory--do-not-pass--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 96,
+    "y": 120
+  },
+  "regulatory--dual-lanes-bicyclists-and-pedestrians--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 120,
+    "y": 120
+  },
+  "regulatory--dual-lanes-turn-left-or-straight--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 144,
+    "y": 120
+  },
+  "regulatory--dual-lanes-turn-right-or-straight--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 168,
+    "y": 120
+  },
+  "regulatory--dual-path-bicycles-and-pedestrians--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 0,
+    "y": 144
+  },
+  "regulatory--dual-path-pedestrians-and-bicycles--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 24,
+    "y": 144
+  },
+  "regulatory--end-of-bicycles-only--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 48,
+    "y": 144
+  },
+  "regulatory--end-of-buses-only--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 72,
+    "y": 144
+  },
+  "regulatory--end-of-equestrians-only--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 96,
+    "y": 144
+  },
+  "regulatory--end-of-mopeds-and-bicycles-only--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 120,
+    "y": 144
+  },
+  "regulatory--end-of-pedestrians-only--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 144,
+    "y": 144
+  },
+  "regulatory--end-of-priority-road--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 168,
+    "y": 144
+  },
+  "regulatory--equestrians-only--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 0,
+    "y": 168
+  },
+  "regulatory--give-way-to-oncoming-traffic--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 24,
+    "y": 168
+  },
+  "regulatory--give-way-to-oncoming-traffic--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 48,
+    "y": 168
+  },
+  "regulatory--go-straight--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 72,
+    "y": 168
+  },
+  "regulatory--go-straight--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 96,
+    "y": 168
+  },
+  "regulatory--go-straight--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 120,
+    "y": 168
+  },
+  "regulatory--go-straight-or-turn-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 144,
+    "y": 168
+  },
+  "regulatory--go-straight-or-turn-left--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 168,
+    "y": 168
+  },
+  "regulatory--go-straight-or-turn-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 192,
+    "y": 0
+  },
+  "regulatory--go-straight-or-turn-right--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 216,
+    "y": 0
+  },
+  "regulatory--height-limit--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 240,
+    "y": 0
+  },
+  "regulatory--keep-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 264,
+    "y": 0
+  },
+  "regulatory--keep-left--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 288,
+    "y": 0
+  },
+  "regulatory--keep-left--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 312,
+    "y": 0
+  },
+  "regulatory--keep-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 336,
+    "y": 0
+  },
+  "regulatory--keep-right--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 360,
+    "y": 0
+  },
+  "regulatory--keep-right--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 192,
+    "y": 24
+  },
+  "regulatory--keep-right--g4": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 216,
+    "y": 24
+  },
+  "regulatory--length-limit--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 240,
+    "y": 24
+  },
+  "regulatory--length-limit--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 264,
+    "y": 24
+  },
+  "regulatory--maximum-speed-limit-10--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 288,
+    "y": 24
+  },
+  "regulatory--maximum-speed-limit-10--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 312,
+    "y": 24
+  },
+  "regulatory--maximum-speed-limit-10--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 336,
+    "y": 24
+  },
+  "regulatory--maximum-speed-limit-100--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 360,
+    "y": 24
+  },
+  "regulatory--maximum-speed-limit-100--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 192,
+    "y": 48
+  },
+  "regulatory--maximum-speed-limit-110--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 216,
+    "y": 48
+  },
+  "regulatory--maximum-speed-limit-110--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 240,
+    "y": 48
+  },
+  "regulatory--maximum-speed-limit-120--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 264,
+    "y": 48
+  },
+  "regulatory--maximum-speed-limit-120--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 288,
+    "y": 48
+  },
+  "regulatory--maximum-speed-limit-130--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 312,
+    "y": 48
+  },
+  "regulatory--maximum-speed-limit-15--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 336,
+    "y": 48
+  },
+  "regulatory--maximum-speed-limit-15--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 360,
+    "y": 48
+  },
+  "regulatory--maximum-speed-limit-15--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 192,
+    "y": 72
+  },
+  "regulatory--maximum-speed-limit-20--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 216,
+    "y": 72
+  },
+  "regulatory--maximum-speed-limit-20--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 240,
+    "y": 72
+  },
+  "regulatory--maximum-speed-limit-20--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 264,
+    "y": 72
+  },
+  "regulatory--maximum-speed-limit-25--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 288,
+    "y": 72
+  },
+  "regulatory--maximum-speed-limit-25--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 312,
+    "y": 72
+  },
+  "regulatory--maximum-speed-limit-30--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 336,
+    "y": 72
+  },
+  "regulatory--maximum-speed-limit-30--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 360,
+    "y": 72
+  },
+  "regulatory--maximum-speed-limit-30--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 192,
+    "y": 96
+  },
+  "regulatory--maximum-speed-limit-35--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 216,
+    "y": 96
+  },
+  "regulatory--maximum-speed-limit-35--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 240,
+    "y": 96
+  },
+  "regulatory--maximum-speed-limit-40--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 264,
+    "y": 96
+  },
+  "regulatory--maximum-speed-limit-40--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 288,
+    "y": 96
+  },
+  "regulatory--maximum-speed-limit-40--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 312,
+    "y": 96
+  },
+  "regulatory--maximum-speed-limit-45--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 336,
+    "y": 96
+  },
+  "regulatory--maximum-speed-limit-45--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 360,
+    "y": 96
+  },
+  "regulatory--maximum-speed-limit-5--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 192,
+    "y": 120
+  },
+  "regulatory--maximum-speed-limit-5--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 216,
+    "y": 120
+  },
+  "regulatory--maximum-speed-limit-50--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 240,
+    "y": 120
+  },
+  "regulatory--maximum-speed-limit-50--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 264,
+    "y": 120
+  },
+  "regulatory--maximum-speed-limit-50--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 288,
+    "y": 120
+  },
+  "regulatory--maximum-speed-limit-55--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 312,
+    "y": 120
+  },
+  "regulatory--maximum-speed-limit-55--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 336,
+    "y": 120
+  },
+  "regulatory--maximum-speed-limit-60--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 360,
+    "y": 120
+  },
+  "regulatory--maximum-speed-limit-60--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 192,
+    "y": 144
+  },
+  "regulatory--maximum-speed-limit-60--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 216,
+    "y": 144
+  },
+  "regulatory--maximum-speed-limit-65--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 240,
+    "y": 144
+  },
+  "regulatory--maximum-speed-limit-65--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 264,
+    "y": 144
+  },
+  "regulatory--maximum-speed-limit-70--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 288,
+    "y": 144
+  },
+  "regulatory--maximum-speed-limit-70--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 312,
+    "y": 144
+  },
+  "regulatory--maximum-speed-limit-70--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 336,
+    "y": 144
+  },
+  "regulatory--maximum-speed-limit-75--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 360,
+    "y": 144
+  },
+  "regulatory--maximum-speed-limit-75--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 192,
+    "y": 168
+  },
+  "regulatory--maximum-speed-limit-80--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 216,
+    "y": 168
+  },
+  "regulatory--maximum-speed-limit-80--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 240,
+    "y": 168
+  },
+  "regulatory--maximum-speed-limit-80--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 264,
+    "y": 168
+  },
+  "regulatory--maximum-speed-limit-85--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 288,
+    "y": 168
+  },
+  "regulatory--maximum-speed-limit-85--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 312,
+    "y": 168
+  },
+  "regulatory--maximum-speed-limit-90--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 336,
+    "y": 168
+  },
+  "regulatory--maximum-speed-limit-90--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 360,
+    "y": 168
+  },
+  "regulatory--minimum-safe-distance--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 0,
+    "y": 192
+  },
+  "regulatory--mopeds-and-bicycles-only--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 24,
+    "y": 192
+  },
+  "regulatory--no-bicycles--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 48,
+    "y": 192
+  },
+  "regulatory--no-bicycles--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 72,
+    "y": 192
+  },
+  "regulatory--no-bicycles--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 96,
+    "y": 192
+  },
+  "regulatory--no-buses--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 120,
+    "y": 192
+  },
+  "regulatory--no-entry--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 144,
+    "y": 192
+  },
+  "regulatory--no-equestrians--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 168,
+    "y": 192
+  },
+  "regulatory--no-heavy-goods-vehicles--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 192,
+    "y": 192
+  },
+  "regulatory--no-heavy-goods-vehicles--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 216,
+    "y": 192
+  },
+  "regulatory--no-heavy-goods-vehicles-or-buses--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 240,
+    "y": 192
+  },
+  "regulatory--no-left-or-u-turn--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 264,
+    "y": 192
+  },
+  "regulatory--no-left-turn--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 288,
+    "y": 192
+  },
+  "regulatory--no-left-turn--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 312,
+    "y": 192
+  },
+  "regulatory--no-mopeds-or-bicycles--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 336,
+    "y": 192
+  },
+  "regulatory--no-motor-vehicles--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 360,
+    "y": 192
+  },
+  "regulatory--no-motor-vehicles--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 0,
+    "y": 216
+  },
+  "regulatory--no-motor-vehicles--g4": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 24,
+    "y": 216
+  },
+  "regulatory--no-motor-vehicles--g5": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 48,
+    "y": 216
+  },
+  "regulatory--no-motor-vehicles--g6": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 72,
+    "y": 216
+  },
+  "regulatory--no-motor-vehicles-except-motorcycles--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 96,
+    "y": 216
+  },
+  "regulatory--no-motor-vehicles-except-motorcycles--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 120,
+    "y": 216
+  },
+  "regulatory--no-motorcycles--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 144,
+    "y": 216
+  },
+  "regulatory--no-motorcycles--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 168,
+    "y": 216
+  },
+  "regulatory--no-overtaking--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 192,
+    "y": 216
+  },
+  "regulatory--no-overtaking--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 216,
+    "y": 216
+  },
+  "regulatory--no-overtaking-by-heavy-goods-vehicles--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 240,
+    "y": 216
+  },
+  "regulatory--no-parking--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 264,
+    "y": 216
+  },
+  "regulatory--no-parking--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 288,
+    "y": 216
+  },
+  "regulatory--no-parking--g5": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 312,
+    "y": 216
+  },
+  "regulatory--no-parking-bicycles-or-motorcycles--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 336,
+    "y": 216
+  },
+  "regulatory--no-pedestrians--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 360,
+    "y": 216
+  },
+  "regulatory--no-pedestrians--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 0,
+    "y": 240
+  },
+  "regulatory--no-right-turn--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 24,
+    "y": 240
+  },
+  "regulatory--no-right-turn--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 48,
+    "y": 240
+  },
+  "regulatory--no-stopping--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 72,
+    "y": 240
+  },
+  "regulatory--no-stopping--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 96,
+    "y": 240
+  },
+  "regulatory--no-stopping--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 120,
+    "y": 240
+  },
+  "regulatory--no-stopping--g4": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 144,
+    "y": 240
+  },
+  "regulatory--no-straight-through--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 168,
+    "y": 240
+  },
+  "regulatory--no-tractors--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 192,
+    "y": 240
+  },
+  "regulatory--no-tractors-mopeds-or-bicycles--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 216,
+    "y": 240
+  },
+  "regulatory--no-turn-on-red--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 240,
+    "y": 240
+  },
+  "regulatory--no-turn-on-red--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 264,
+    "y": 240
+  },
+  "regulatory--no-u-turn--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 288,
+    "y": 240
+  },
+  "regulatory--no-u-turn--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 312,
+    "y": 240
+  },
+  "regulatory--no-u-turn--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 336,
+    "y": 240
+  },
+  "regulatory--no-vehicles-carrying-dangerous-goods--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 360,
+    "y": 240
+  },
+  "regulatory--no-vehicles-carrying-explosives--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 0,
+    "y": 264
+  },
+  "regulatory--one-way-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 24,
+    "y": 264
+  },
+  "regulatory--one-way-left--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 48,
+    "y": 264
+  },
+  "regulatory--one-way-left--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 72,
+    "y": 264
+  },
+  "regulatory--one-way-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 96,
+    "y": 264
+  },
+  "regulatory--one-way-right--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 120,
+    "y": 264
+  },
+  "regulatory--one-way-right--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 144,
+    "y": 264
+  },
+  "regulatory--one-way-straight--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 168,
+    "y": 264
+  },
+  "regulatory--pass-on-either-side--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 192,
+    "y": 264
+  },
+  "regulatory--pedestrians-only--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 216,
+    "y": 264
+  },
+  "regulatory--pedestrians-only--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 240,
+    "y": 264
+  },
+  "regulatory--priority-over-oncoming-vehicles--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 264,
+    "y": 264
+  },
+  "regulatory--priority-road--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 288,
+    "y": 264
+  },
+  "regulatory--road-closed-to-vehicles--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 312,
+    "y": 264
+  },
+  "regulatory--roundabout--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 336,
+    "y": 264
+  },
+  "regulatory--roundabout--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 360,
+    "y": 264
+  },
+  "regulatory--shared-path-bicycles-and-pedestrians--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 0,
+    "y": 288
+  },
+  "regulatory--shared-path-pedestrians-and-bicycles--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 24,
+    "y": 288
+  },
+  "regulatory--sidewalk-closed--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 48,
+    "y": 288
+  },
+  "regulatory--stay-in-lane--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 72,
+    "y": 288
+  },
+  "regulatory--stop--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 96,
+    "y": 288
+  },
+  "regulatory--stop-signals--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 120,
+    "y": 288
+  },
+  "regulatory--traffic-signal-photo-enforced--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 144,
+    "y": 288
+  },
+  "regulatory--triple-lanes-go-straight-center-lane--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 168,
+    "y": 288
+  },
+  "regulatory--triple-lanes-turn-left-center-lane--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 192,
+    "y": 288
+  },
+  "regulatory--triple-lanes-turn-right-center-lane--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 216,
+    "y": 288
+  },
+  "regulatory--turn-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 240,
+    "y": 288
+  },
+  "regulatory--turn-left--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 264,
+    "y": 288
+  },
+  "regulatory--turn-left-ahead--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 288,
+    "y": 288
+  },
+  "regulatory--turn-left-or-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 312,
+    "y": 288
+  },
+  "regulatory--turn-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 336,
+    "y": 288
+  },
+  "regulatory--turn-right--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 360,
+    "y": 288
+  },
+  "regulatory--turn-right--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 0,
+    "y": 312
+  },
+  "regulatory--turn-right-ahead--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 24,
+    "y": 312
+  },
+  "regulatory--two-way-traffic--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 48,
+    "y": 312
+  },
+  "regulatory--weight-limit--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 72,
+    "y": 312
+  },
+  "regulatory--weight-limit--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 96,
+    "y": 312
+  },
+  "regulatory--weight-limit--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 120,
+    "y": 312
+  },
+  "regulatory--weight-limit-per-axle--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 144,
+    "y": 312
+  },
+  "regulatory--width-limit--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 168,
+    "y": 312
+  },
+  "regulatory--yield--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 192,
+    "y": 312
+  },
+  "warning--added-lane-from-entering-roadway--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 216,
+    "y": 312
+  },
+  "warning--added-lane-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 240,
+    "y": 312
+  },
+  "warning--added-lane-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 264,
+    "y": 312
+  },
+  "warning--atv-crossing--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 288,
+    "y": 312
+  },
+  "warning--bicycles-crossing--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 312,
+    "y": 312
+  },
+  "warning--bicycles-crossing--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 336,
+    "y": 312
+  },
+  "warning--bicycles-crossing--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 360,
+    "y": 312
+  },
+  "warning--bicycles-crossing--g4": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 0,
+    "y": 336
+  },
+  "warning--bollard--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 24,
+    "y": 336
+  },
+  "warning--children--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 48,
+    "y": 336
+  },
+  "warning--children--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 72,
+    "y": 336
+  },
+  "warning--crossroads--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 96,
+    "y": 336
+  },
+  "warning--crossroads--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 120,
+    "y": 336
+  },
+  "warning--crossroads--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 144,
+    "y": 336
+  },
+  "warning--crossroads-with-priority-to-the-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 168,
+    "y": 336
+  },
+  "warning--curve-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 192,
+    "y": 336
+  },
+  "warning--curve-left--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 216,
+    "y": 336
+  },
+  "warning--curve-out-intersection-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 240,
+    "y": 336
+  },
+  "warning--curve-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 264,
+    "y": 336
+  },
+  "warning--curve-right--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 288,
+    "y": 336
+  },
+  "warning--dangerous-crosswinds-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 312,
+    "y": 336
+  },
+  "warning--disabled-persons-crossing--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 336,
+    "y": 336
+  },
+  "warning--divided-highway--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 360,
+    "y": 336
+  },
+  "warning--divided-highway--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 0,
+    "y": 360
+  },
+  "warning--divided-highway-ends--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 24,
+    "y": 360
+  },
+  "warning--divided-highway-ends--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 48,
+    "y": 360
+  },
+  "warning--domestic-animals--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 72,
+    "y": 360
+  },
+  "warning--domestic-animals--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 96,
+    "y": 360
+  },
+  "warning--domestic-animals--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 120,
+    "y": 360
+  },
+  "warning--double-curve-first-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 144,
+    "y": 360
+  },
+  "warning--double-curve-first-left--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 168,
+    "y": 360
+  },
+  "warning--double-curve-first-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 192,
+    "y": 360
+  },
+  "warning--double-curve-first-right--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 216,
+    "y": 360
+  },
+  "warning--double-curve-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 240,
+    "y": 360
+  },
+  "warning--double-curve-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 264,
+    "y": 360
+  },
+  "warning--double-reverse-curve--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 288,
+    "y": 360
+  },
+  "warning--double-side-roads-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 312,
+    "y": 360
+  },
+  "warning--double-side-roads-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 336,
+    "y": 360
+  },
+  "warning--double-turn-first-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 360,
+    "y": 360
+  },
+  "warning--double-turn-first-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 384,
+    "y": 0
+  },
+  "warning--emergency-vehicles--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 408,
+    "y": 0
+  },
+  "warning--emu-crossing--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 432,
+    "y": 0
+  },
+  "warning--emu-crossing--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 456,
+    "y": 0
+  },
+  "warning--entering-roadway-merge--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 480,
+    "y": 0
+  },
+  "warning--equestrians--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 504,
+    "y": 0
+  },
+  "warning--equestrians-crossing--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 528,
+    "y": 0
+  },
+  "warning--falling-rocks-or-debris-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 552,
+    "y": 0
+  },
+  "warning--falling-rocks-or-debris-left--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 576,
+    "y": 0
+  },
+  "warning--falling-rocks-or-debris-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 600,
+    "y": 0
+  },
+  "warning--falling-rocks-or-debris-right--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 624,
+    "y": 0
+  },
+  "warning--falling-rocks-or-debris-right--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 648,
+    "y": 0
+  },
+  "warning--flaggers-in-road--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 672,
+    "y": 0
+  },
+  "warning--golf-carts-crossing--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 696,
+    "y": 0
+  },
+  "warning--hairpin-curve-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 720,
+    "y": 0
+  },
+  "warning--hairpin-curve-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 744,
+    "y": 0
+  },
+  "warning--hairpin-curve-right--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 384,
+    "y": 24
+  },
+  "warning--height-restriction--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 408,
+    "y": 24
+  },
+  "warning--height-restriction--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 432,
+    "y": 24
+  },
+  "warning--horizontal-alignment-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 456,
+    "y": 24
+  },
+  "warning--horizontal-alignment-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 480,
+    "y": 24
+  },
+  "warning--icy-road--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 504,
+    "y": 24
+  },
+  "warning--junction-with-a-side-road-acute-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 528,
+    "y": 24
+  },
+  "warning--junction-with-a-side-road-acute-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 552,
+    "y": 24
+  },
+  "warning--junction-with-a-side-road-perpendicular-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 576,
+    "y": 24
+  },
+  "warning--junction-with-a-side-road-perpendicular-left--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 600,
+    "y": 24
+  },
+  "warning--junction-with-a-side-road-perpendicular-left--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 624,
+    "y": 24
+  },
+  "warning--junction-with-a-side-road-perpendicular-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 648,
+    "y": 24
+  },
+  "warning--junction-with-a-side-road-perpendicular-right--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 672,
+    "y": 24
+  },
+  "warning--junction-with-a-side-road-perpendicular-right--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 696,
+    "y": 24
+  },
+  "warning--koala-crossing--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 720,
+    "y": 24
+  },
+  "warning--koala-crossing--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 744,
+    "y": 24
+  },
+  "warning--loop-270-degree--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 384,
+    "y": 48
+  },
+  "warning--loop-pretzel--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 408,
+    "y": 48
+  },
+  "warning--loose-road-surface--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 432,
+    "y": 48
+  },
+  "warning--loose-road-surface--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 456,
+    "y": 48
+  },
+  "warning--loose-road-surface--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 480,
+    "y": 48
+  },
+  "warning--low-flying-aircraft--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 504,
+    "y": 48
+  },
+  "warning--low-flying-aircraft--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 528,
+    "y": 48
+  },
+  "warning--low-ground-clearance--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 552,
+    "y": 48
+  },
+  "warning--motorcycles-crossing--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 576,
+    "y": 48
+  },
+  "warning--narrow-bridge--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 600,
+    "y": 48
+  },
+  "warning--narrow-bridge--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 624,
+    "y": 48
+  },
+  "warning--offset-roads--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 648,
+    "y": 48
+  },
+  "warning--offset-roads--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 672,
+    "y": 48
+  },
+  "warning--opening-or-swing-bridge--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 696,
+    "y": 48
+  },
+  "warning--opening-or-swing-bridge--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 720,
+    "y": 48
+  },
+  "warning--other-danger--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 744,
+    "y": 48
+  },
+  "warning--pass-left-or-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 384,
+    "y": 72
+  },
+  "warning--pass-left-or-right--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 408,
+    "y": 72
+  },
+  "warning--pavement-ends--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 432,
+    "y": 72
+  },
+  "warning--pedestrians-crossing--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 456,
+    "y": 72
+  },
+  "warning--pedestrians-crossing--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 480,
+    "y": 72
+  },
+  "warning--pedestrians-crossing--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 504,
+    "y": 72
+  },
+  "warning--pedestrians-crossing--g4": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 528,
+    "y": 72
+  },
+  "warning--pedestrians-crossing--g5": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 552,
+    "y": 72
+  },
+  "warning--playground--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 576,
+    "y": 72
+  },
+  "warning--playground--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 600,
+    "y": 72
+  },
+  "warning--playground--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 624,
+    "y": 72
+  },
+  "warning--quay-or-river-bank--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 648,
+    "y": 72
+  },
+  "warning--railroad-crossing--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 672,
+    "y": 72
+  },
+  "warning--railroad-crossing--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 696,
+    "y": 72
+  },
+  "warning--railroad-crossing-with-barriers--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 720,
+    "y": 72
+  },
+  "warning--railroad-crossing-with-barriers--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 744,
+    "y": 72
+  },
+  "warning--railroad-crossing-without-barriers--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 384,
+    "y": 96
+  },
+  "warning--railroad-crossing-without-barriers--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 408,
+    "y": 96
+  },
+  "warning--railroad-crossing-without-barriers--g4": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 432,
+    "y": 96
+  },
+  "warning--railroad-intersection--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 456,
+    "y": 96
+  },
+  "warning--railroad-intersection--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 480,
+    "y": 96
+  },
+  "warning--railroad-intersection--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 504,
+    "y": 96
+  },
+  "warning--railroad-intersection--g4": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 528,
+    "y": 96
+  },
+  "warning--railroad-intersection--g5": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 552,
+    "y": 96
+  },
+  "warning--reduced-maximum-speed-limit--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 576,
+    "y": 96
+  },
+  "warning--road-bump--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 600,
+    "y": 96
+  },
+  "warning--road-bump--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 624,
+    "y": 96
+  },
+  "warning--road-narrows--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 648,
+    "y": 96
+  },
+  "warning--road-narrows--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 672,
+    "y": 96
+  },
+  "warning--road-narrows-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 696,
+    "y": 96
+  },
+  "warning--road-narrows-left--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 720,
+    "y": 96
+  },
+  "warning--road-narrows-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 744,
+    "y": 96
+  },
+  "warning--road-narrows-right--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 384,
+    "y": 120
+  },
+  "warning--roadworks--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 408,
+    "y": 120
+  },
+  "warning--roadworks--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 432,
+    "y": 120
+  },
+  "warning--roadworks--g4": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 456,
+    "y": 120
+  },
+  "warning--roadworks--g5": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 480,
+    "y": 120
+  },
+  "warning--roundabout--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 504,
+    "y": 120
+  },
+  "warning--roundabout--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 528,
+    "y": 120
+  },
+  "warning--school-zone--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 552,
+    "y": 120
+  },
+  "warning--school-zone--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 576,
+    "y": 120
+  },
+  "warning--shared-lane-motorcycles-bicycles--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 600,
+    "y": 120
+  },
+  "warning--single-reverse-curve--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 624,
+    "y": 120
+  },
+  "warning--slippery-bicycles--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 648,
+    "y": 120
+  },
+  "warning--slippery-motorcycles--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 672,
+    "y": 120
+  },
+  "warning--slippery-road-surface--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 696,
+    "y": 120
+  },
+  "warning--slippery-road-surface--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 720,
+    "y": 120
+  },
+  "warning--soft-shoulder--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 744,
+    "y": 120
+  },
+  "warning--steep-ascent--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 384,
+    "y": 144
+  },
+  "warning--steep-ascent--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 408,
+    "y": 144
+  },
+  "warning--steep-ascent--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 432,
+    "y": 144
+  },
+  "warning--steep-descent--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 456,
+    "y": 144
+  },
+  "warning--steep-descent--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 480,
+    "y": 144
+  },
+  "warning--steep-descent--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 504,
+    "y": 144
+  },
+  "warning--stop-ahead--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 528,
+    "y": 144
+  },
+  "warning--stop-ahead--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 552,
+    "y": 144
+  },
+  "warning--t-roads--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 576,
+    "y": 144
+  },
+  "warning--texts--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 600,
+    "y": 144
+  },
+  "warning--texts--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 624,
+    "y": 144
+  },
+  "warning--texts--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 648,
+    "y": 144
+  },
+  "warning--tractors--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 672,
+    "y": 144
+  },
+  "warning--tractors--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 696,
+    "y": 144
+  },
+  "warning--tractors--g4": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 720,
+    "y": 144
+  },
+  "warning--traffic-merges-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 744,
+    "y": 144
+  },
+  "warning--traffic-merges-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 384,
+    "y": 168
+  },
+  "warning--traffic-queues-likely--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 408,
+    "y": 168
+  },
+  "warning--traffic-signals--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 432,
+    "y": 168
+  },
+  "warning--traffic-signals--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 456,
+    "y": 168
+  },
+  "warning--traffic-signals--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 480,
+    "y": 168
+  },
+  "warning--trail-crossing--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 504,
+    "y": 168
+  },
+  "warning--trail-crossing--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 528,
+    "y": 168
+  },
+  "warning--trail-crossing--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 552,
+    "y": 168
+  },
+  "warning--trams-crossing--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 576,
+    "y": 168
+  },
+  "warning--trams-crossing--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 600,
+    "y": 168
+  },
+  "warning--triple-curve-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 624,
+    "y": 168
+  },
+  "warning--triple-curve-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 648,
+    "y": 168
+  },
+  "warning--triple-reverse-curve-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 672,
+    "y": 168
+  },
+  "warning--trucks-crossing--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 696,
+    "y": 168
+  },
+  "warning--trucks-crossing--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 720,
+    "y": 168
+  },
+  "warning--trucks-rollover--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 744,
+    "y": 168
+  },
+  "warning--tunnel--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 384,
+    "y": 192
+  },
+  "warning--tunnel--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 408,
+    "y": 192
+  },
+  "warning--turn-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 432,
+    "y": 192
+  },
+  "warning--turn-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 456,
+    "y": 192
+  },
+  "warning--two-way-traffic--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 480,
+    "y": 192
+  },
+  "warning--two-way-traffic--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 504,
+    "y": 192
+  },
+  "warning--two-way-traffic--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 528,
+    "y": 192
+  },
+  "warning--uneven-road--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 552,
+    "y": 192
+  },
+  "warning--uneven-road--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 576,
+    "y": 192
+  },
+  "warning--wild-animals--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 600,
+    "y": 192
+  },
+  "warning--wild-animals--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 624,
+    "y": 192
+  },
+  "warning--wild-animals--g3": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 648,
+    "y": 192
+  },
+  "warning--wild-animals--g4": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 672,
+    "y": 192
+  },
+  "warning--winding-road-first-left--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 696,
+    "y": 192
+  },
+  "warning--winding-road-first-right--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 720,
+    "y": 192
+  },
+  "warning--wombat-crossing--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 744,
+    "y": 192
+  },
+  "warning--wombat-crossing--g2": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 384,
+    "y": 216
+  },
+  "warning--y-roads--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 408,
+    "y": 216
+  },
+  "warning--yield-ahead--g1": {
+    "height": 24,
+    "pixelRatio": 1,
+    "width": 24,
+    "x": 432,
+    "y": 216
+  }
+}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/img/traffic-signs/traffic-signs.png b/vendor/assets/iD/iD/img/traffic-signs/traffic-signs.png
new file mode 100644 (file)
index 0000000..2032218
Binary files /dev/null and b/vendor/assets/iD/iD/img/traffic-signs/traffic-signs.png differ
index 8bdad67eb7a6c90d6d23ecfdf07eb76553aca514..e47e01823d94bc81585fa5faa571fcfada67972f 100644 (file)
@@ -30,9 +30,9 @@
         "operations": {
             "add": {
                 "annotation": {
         "operations": {
             "add": {
                 "annotation": {
-                    "point": "أضÙ\81ت نقطة.",
-                    "vertex": "أضÙ\81ت نقطة إلى طريق.",
-                    "relation": "أضÙ\81ت علاقة."
+                    "point": "تÙ\85 Ø¥Ø¶Ø§Ù\81Ø© نقطة.",
+                    "vertex": "تÙ\85 Ø¥Ø¶Ø§Ù\81Ø© نقطة إلى طريق.",
+                    "relation": "تÙ\85 Ø¥Ø¶Ø§Ù\81Ø© علاقة."
                 }
             },
             "start": {
                 }
             },
             "start": {
@@ -74,7 +74,7 @@
                 },
                 "not_closed": "هذه لا يمكن جعلها دائرية لأنها ليست حلقة.",
                 "too_large": "هذه لا يمكن جعلها دائرية لأنه لا يوجد جزء كافٍ منها ظاهر.",
                 },
                 "not_closed": "هذه لا يمكن جعلها دائرية لأنها ليست حلقة.",
                 "too_large": "هذه لا يمكن جعلها دائرية لأنه لا يوجد جزء كافٍ منها ظاهر.",
-                "connected_to_hidden": "Ù\87Ø°Ù\87 Ù\84ا Ù\8aÙ\85Ù\83Ù\86 Ø¬Ø¹Ù\84Ù\87ا Ø¯Ø§Ø¦Ø±Ù\8aØ© Ù\84Ø£Ù\86Ù\87ا Ù\85تصÙ\84Ø© Ø¨Ø¹Ù\86صر خفي."
+                "connected_to_hidden": "Ù\84ا Ù\8aÙ\85Ù\83Ù\86 Ø¬Ø¹Ù\84Ù\87ا Ø¯Ø§Ø¦Ø±Ù\8aØ© Ù\84Ø£Ù\86Ù\87ا Ù\85تصÙ\84Ø© Ø¨Ø¹Ù\86صر Ù\85خفي."
             },
             "orthogonalize": {
                 "title": "مربع",
             },
             "orthogonalize": {
                 "title": "مربع",
@@ -89,7 +89,7 @@
                 },
                 "not_squarish": "هذا لا يمكن أن يكون مربعا لأنه ليس رباعياً.",
                 "too_large": "هذه لا يمكن جعلها مربّعة لأنه لا يوجد جزء كافٍ منها ظاهر.",
                 },
                 "not_squarish": "هذا لا يمكن أن يكون مربعا لأنه ليس رباعياً.",
                 "too_large": "هذه لا يمكن جعلها مربّعة لأنه لا يوجد جزء كافٍ منها ظاهر.",
-                "connected_to_hidden": "Ù\87Ø°Ù\87 Ù\84ا Ù\8aÙ\85Ù\83Ù\86 ØªØ±Ø¨Ù\8aعÙ\87ا Ù\84Ø£Ù\86Ù\87ا Ù\85رتبطة Ø¨Ù\85Ù\8aزة Ø®Ù\81Ù\8aØ©"
+                "connected_to_hidden": "Ù\84ا Ù\8aÙ\85Ù\83Ù\86 Ø¬Ø¹Ù\84Ù\87ا Ù\85ربعة Ù\84Ø£Ù\86Ù\87ا Ù\85رتبطة Ø¨Ø¹Ù\86صر Ù\85Ø®Ù\81Ù\8a."
             },
             "straighten": {
                 "title": "مستقيم",
             },
             "straighten": {
                 "title": "مستقيم",
                 "key": "S",
                 "annotation": "جعل الخط مستقيما.",
                 "too_bendy": "هذا لا يمكن أن يستقيم لأنه ينحني كثيرا.",
                 "key": "S",
                 "annotation": "جعل الخط مستقيما.",
                 "too_bendy": "هذا لا يمكن أن يستقيم لأنه ينحني كثيرا.",
-                "connected_to_hidden": "Ù\87ذا Ø§Ù\84خط Ù\84ا Ù\8aÙ\85Ù\83Ù\86 Ø£Ù\86 Ù\8aÙ\83Ù\88Ù\86 Ù\85ستÙ\82Ù\8aÙ\85ا Ù\84Ø£Ù\86Ù\87 Ù\85تصÙ\84 Ø¨Ù\85Ù\8aزة Ù\85Ø®Ù\81Ù\8aØ©."
+                "connected_to_hidden": "Ù\87ذا Ø§Ù\84خط Ù\84ا Ù\8aÙ\85Ù\83Ù\86 Ø¬Ø¹Ù\84Ù\87 Ù\85ستÙ\82Ù\8aÙ\85ا Ù\84Ø£Ù\86Ù\87 Ù\85تصÙ\84 Ø¨Ø¹Ù\86صر Ù\85Ø®Ù\81Ù\8a."
             },
             "delete": {
                 "title": "حذف",
                 "description": {
             },
             "delete": {
                 "title": "حذف",
                 "description": {
-                    "single": "احذÙ\81 Ù\87Ø°Ù\87 Ø§Ù\84Ù\85Ù\8aزة نهائيا.",
-                    "multiple": "احذÙ\81 Ù\87Ø°Ù\87 Ø§Ù\84Ù\85Ù\8aزات نهائيا."
+                    "single": "حذÙ\81 Ù\87ذا Ø§Ù\84عÙ\86صر نهائيا.",
+                    "multiple": "حذÙ\81 Ù\87Ø°Ù\87 Ø§Ù\84عÙ\86اصر نهائيا."
                 },
                 "annotation": {
                     "point": "حذف نقطة.",
                     "vertex": "حذفت نقطة من طريق.",
                     "line": "حذف خط.",
                     "area": "حذف مساحة.",
                 },
                 "annotation": {
                     "point": "حذف نقطة.",
                     "vertex": "حذفت نقطة من طريق.",
                     "line": "حذف خط.",
                     "area": "حذف مساحة.",
-                    "relation": "حذف علاقة."
+                    "relation": "حذف علاقة.",
+                    "multiple": "حذفت {n} عناصر."
+                },
+                "too_large": {
+                    "single": "لا يمكن حذف هذا العنصر بسبب عدم ظهور مايكفي منه حاليا.",
+                    "multiple": "لا يمكن حذف هذه العناصر بسبب عدم ظهور مايكفي منها حاليا."
+                },
+                "incomplete_relation": {
+                    "single": "لا يمكن حذف هذا العنصر لأنه لم يكتمل تنزيله من الإنترنت.",
+                    "multiple": "لا يمكن حذف هذه العناصر لأنه لم يكتمل تنزيلها من الإنترنت."
                 }
             },
             "add_member": {
                 }
             },
             "add_member": {
-                "annotation": "أضاÙ\81 عضو إلى علاقة."
+                "annotation": "تÙ\85 Ø¥Ø¶Ø§Ù\81Ø© عضو إلى علاقة."
             },
             "delete_member": {
                 "annotation": "حذف عضو من علاقة."
             },
             "delete_member": {
                 "annotation": "حذف عضو من علاقة."
                 "key": "D",
                 "annotation": "فصل الخطوط/المناطق.",
                 "not_connected": "لا توجد خطوط/مناطق كافية هنا لفصلها.",
                 "key": "D",
                 "annotation": "فصل الخطوط/المناطق.",
                 "not_connected": "لا توجد خطوط/مناطق كافية هنا لفصلها.",
-                "connected_to_hidden": "Ù\87Ø°Ù\87 Ù\84ا Ù\8aÙ\85Ù\83Ù\86 Ù\81صÙ\84Ù\87ا Ù\84Ø£Ù\86Ù\87ا Ù\85تصÙ\84Ø© Ø¨Ù\85Ù\8aزة Ù\85Ø®Ù\81Ù\8aØ©.",
+                "connected_to_hidden": "Ù\84ا Ù\8aÙ\85Ù\83Ù\86 Ù\81صÙ\84Ù\87ا Ù\84Ø£Ù\86Ù\87ا Ù\85تصÙ\84Ø© Ø¨Ø¹Ù\86صر Ù\85Ø®Ù\81Ù\8a.",
                 "relation": "هذه لا يمكن فصلها لأنها تربط أعضاءً في علاقة"
             },
             "merge": {
                 "title": "دمج",
                 "relation": "هذه لا يمكن فصلها لأنها تربط أعضاءً في علاقة"
             },
             "merge": {
                 "title": "دمج",
-                "description": "دمج هذه الميزات.",
+                "description": "دمج هذه العناصر.",
                 "key": "C",
                 "key": "C",
-                "annotation": "دمج {n} ميزات.",
-                "not_eligible": "لا يمكن دمج هذه الميزات.",
-                "restriction": "لا يمكن دمج هذه الميزات لأن واحدة منها على الأقل جزء من العلاقة \"{relation}\".",
-                "incomplete_relation": "لا يمكن دمج هذه المميزات لأن واحد منها على الأقل لم يتم تحميله بالكامل.",
-                "conflicting_tags": "لا يمكن دمج هذه الميزات لأن بعض وسومها تحتوي قيما متعارضة مع بعضها."
+                "annotation": "تم دمج {n} عناصر.",
+                "not_eligible": "لا يمكن دمج هذه العناصر.",
+                "not_adjacent": "لا يمكن دمج هذه العناصر لأن نقاط نهاياتها غير متصلة.",
+                "restriction": "لا يمكن دمج هذه العناصر لأن واحدة منها على الأقل جزء من العلاقة \"{relation}\".",
+                "incomplete_relation": "لا يمكن دمج هذه العناصر لأن واحد منها على الأقل لم يتم تحميله بالكامل.",
+                "conflicting_tags": "لا يمكن دمج هذه العناصر لأن بعض وسومها تحتوي قيما متعارضة مع بعضها."
             },
             "move": {
                 "title": "تحريك",
             },
             "move": {
                 "title": "تحريك",
+                "description": {
+                    "single": "حرك هذا العنصر إلى مكان آخر.",
+                    "multiple": "حرك هذه العناصر إلى مكان آخر."
+                },
                 "key": "M",
                 "annotation": {
                     "point": "نقل نقطة",
                     "vertex": "حركت نقطة في طريق.",
                     "line": "حرك خطاً",
                 "key": "M",
                 "annotation": {
                     "point": "نقل نقطة",
                     "vertex": "حركت نقطة في طريق.",
                     "line": "حرك خطاً",
-                    "area": "حرك منطقة"
+                    "area": "حرك منطقة",
+                    "multiple": "تم تحريك عدد من العناصر."
                 }
             },
             "reflect": {
                 }
             },
             "reflect": {
                 },
                 "not_eligible": "لا يمكن فصل الخطوط عند البداية أو النهاية.",
                 "multiple_ways": "توجد الكثير من الخطوط هنا لفصلها.",
                 },
                 "not_eligible": "لا يمكن فصل الخطوط عند البداية أو النهاية.",
                 "multiple_ways": "توجد الكثير من الخطوط هنا لفصلها.",
-                "connected_to_hidden": "لا يمكن فصل هذه لأنها متصلة بميزة خفية."
+                "connected_to_hidden": "لا يمكن فصل هذه لأنها متصلة بعنصر مخفي."
             },
             "restriction": {
                 "help": {
             },
             "restriction": {
                 "help": {
                     "toggle_off": "انقر لإزالة تقييد \"{restriction}\"."
                 },
                 "annotation": {
                     "toggle_off": "انقر لإزالة تقييد \"{restriction}\"."
                 },
                 "annotation": {
-                    "create": "تمت إضافة تقييد.",
+                    "create": "تم إضافة تقييد.",
                     "delete": "تمت ازالت تقييد."
                 }
             }
                     "delete": "تمت ازالت تقييد."
                 }
             }
         "report_a_bug": "إبلاغ عن خطأ أو مشكلة",
         "help_translate": "ساعد في الترجمة",
         "feature_info": {
         "report_a_bug": "إبلاغ عن خطأ أو مشكلة",
         "help_translate": "ساعد في الترجمة",
         "feature_info": {
-            "hidden_warning": "{count} ميزات مخفية",
-            "hidden_details": "هذه الميزة مخفية حاليا: {details}"
+            "hidden_warning": "{count} عناصر مخفية",
+            "hidden_details": "هذه العناصر مخفية حاليا: {details}"
         },
         "status": {
             "error": "تعذر اﻹتصال مع واجهة التطبيق البرمجية API.",
         },
         "status": {
             "error": "تعذر اﻹتصال مع واجهة التطبيق البرمجية API.",
             "upload_explanation": "التغييرات التي قمت برفعها سوف تظهر على كل الخرائط التي تستخدم بيانات OpenStreetMap.",
             "upload_explanation_with_user": "التغييرات التي قمت برفعها كـ {user} سوف تظهر على كل الخرائط التي تستخدم بيانات OpenStreetMap.",
             "save": "إرسل",
             "upload_explanation": "التغييرات التي قمت برفعها سوف تظهر على كل الخرائط التي تستخدم بيانات OpenStreetMap.",
             "upload_explanation_with_user": "التغييرات التي قمت برفعها كـ {user} سوف تظهر على كل الخرائط التي تستخدم بيانات OpenStreetMap.",
             "save": "إرسل",
-            "cancel": "إلغي",
+            "cancel": "إلغاء",
             "changes": "{count} تغييرات",
             "warnings": "تنبيهات",
             "modified": "عُدل",
             "changes": "{count} تغييرات",
             "warnings": "تنبيهات",
             "modified": "عُدل",
             "all_relations": "كل العلاقات",
             "new_relation": "علاقة جديدة....",
             "role": "الدور",
             "all_relations": "كل العلاقات",
             "new_relation": "علاقة جديدة....",
             "role": "الدور",
-            "choose": "اختر نوع الميزة",
+            "choose": "اختر نوع العنصر",
             "results": "{n} نتيجة لـ {search}",
             "reference": "العرض على ويكي OpenStreetMap",
             "results": "{n} نتيجة لـ {search}",
             "reference": "العرض على ويكي OpenStreetMap",
-            "back_tooltip": "تغيير الميزة",
+            "back_tooltip": "تغيير العنصر",
             "remove": "إزالة",
             "search": "بحث",
             "remove": "إزالة",
             "search": "بحث",
-            "multiselect": "الميزات المختارة",
+            "multiselect": "العناصر المختارة",
             "unknown": "غير معروف",
             "unknown": "غير معروف",
-            "feature_list": "ابحث عن ميزات",
-            "edit": "حرر ميزة",
+            "feature_list": "ابحث عن عناصر",
+            "edit": "حرر عنصر",
             "check": {
                 "yes": "نعم",
                 "no": "لا",
             "check": {
                 "yes": "نعم",
                 "no": "لا",
             "description": "بيانات الخريطة",
             "data_layers": "طبقات البيانات",
             "fill_area": "ملء المساحات",
             "description": "بيانات الخريطة",
             "data_layers": "طبقات البيانات",
             "fill_area": "ملء المساحات",
-            "map_features": "ميزات الخريطة",
-            "autohidden": "لقد تم إخفاء هذه الميزات تلقائيا بسبب وجود الكثير من الميزات القريبة منها والتي ستؤدي لظهور الكثير جدا من الميزات المتداخلة مع بعضها. بإمكانك التكبير لتعديلهم."
+            "map_features": "عناصر الخريطة",
+            "autohidden": "لقد تم إخفاء هذه العناصر تلقائيا بسبب وجود الكثير من العناصر القريبة منها والتي ستؤدي لظهور الكثير جدا من العناصر المتداخلة مع بعضها. بإمكانك التكبير لتعديلهم."
         },
         "feature": {
             "points": {
         },
         "feature": {
             "points": {
                 "tooltip": "مباني، ملاجئ، مرائب، الخ"
             },
             "landuse": {
                 "tooltip": "مباني، ملاجئ، مرائب، الخ"
             },
             "landuse": {
-                "description": "خصائص Ø§Ø³ØªØ®Ø¯Ø§Ù\85ات Ø§Ù\84أراضÙ\89",
+                "description": "عÙ\86اصر Ø§Ù\84أراضÙ\8a",
                 "tooltip": "غابات، أراضي زراعية، حدائق، مناطق سكنية، مناطق تجارية، إلخ..."
             },
             "boundaries": {
                 "tooltip": "غابات، أراضي زراعية، حدائق، مناطق سكنية، مناطق تجارية، إلخ..."
             },
             "boundaries": {
                 "tooltip": "حدود إدارية"
             },
             "water": {
                 "tooltip": "حدود إدارية"
             },
             "water": {
-                "description": "خصائص مائية",
+                "description": "عÙ\86اصر مائية",
                 "tooltip": "انهار، بحيرات، برك، أحواض، الخ "
             },
             "rail": {
                 "tooltip": "انهار، بحيرات، برك، أحواض، الخ "
             },
             "rail": {
-                "description": "خصائص السكك الحديدية",
+                "description": "عÙ\86اصر السكك الحديدية",
                 "tooltip": "السكك الحديدية"
             },
             "power": {
                 "tooltip": "السكك الحديدية"
             },
             "power": {
-                "description": "خصائص Ø·Ø§Ù\82Ù\8aة",
+                "description": "عÙ\86اصر Ø§Ù\84طاÙ\82ة",
                 "tooltip": "خطوط الكهرباء، محطات الطاقة، محطات توليد الكهرباء، الخ"
             },
             "past_future": {
                 "tooltip": "خطوط الكهرباء، محطات الطاقة، محطات توليد الكهرباء، الخ"
             },
             "past_future": {
         },
         "validations": {
             "untagged_point": "نقطة غير موسومة",
         },
         "validations": {
             "untagged_point": "نقطة غير موسومة",
-            "untagged_point_tooltip": "اختر نوع الميزة التي تصف هذه النقطة.",
+            "untagged_point_tooltip": "اختر نوع العنصر الذي يصف هذه النقطة.",
             "untagged_line": "خط غير موسوم",
             "untagged_line": "خط غير موسوم",
-            "untagged_line_tooltip": "اختر نوع الميزة التي تصف هذا الخط.",
+            "untagged_line_tooltip": "اختر نوع العنصر الذي يصف هذا الخط.",
             "untagged_area": "منطقة غير موسومة",
             "untagged_area": "منطقة غير موسومة",
-            "untagged_area_tooltip": "اختر نوع الميزة التي تصف هذه المساحة.",
+            "untagged_area_tooltip": "اختر نوع العنصر التي يصف هذه المساحة.",
             "untagged_relation": "علاقة غير موسومة",
             "tag_suggests_area": "الوسم {tag} يقترح بأن الخط يجب أن يكون منطقة، ولكنها حاليا ليست منطقة",
             "deprecated_tags": "وسوم مهجورة: {tags}"
             "untagged_relation": "علاقة غير موسومة",
             "tag_suggests_area": "الوسم {tag} يقترح بأن الخط يجب أن يكون منطقة، ولكنها حاليا ليست منطقة",
             "deprecated_tags": "وسوم مهجورة: {tags}"
             },
             "welcome": {
                 "title": "مرحباً",
             },
             "welcome": {
                 "title": "مرحباً",
-                "welcome": "Ø£Ù\87Ù\84ا Ø¨Ù\83 ! Ù\87Ø°Ù\87 Ø¬Ù\88Ù\84Ø© ØªØ¹Ù\84Ù\85Ù\83 Ø£Ø³Ø§Ø³Ù\8aات Ø§Ù\84تحرÙ\8aر Ø¹Ù\84Ù\89 Ø®Ø±Ù\8aطة الشارع المفتوحة."
+                "welcome": "Ø£Ù\87Ù\84ا Ø¨Ù\83 ! Ù\87Ø°Ù\87 Ø¬Ù\88Ù\84Ø© Ø³ØªØ¹Ù\84Ù\85Ù\83 Ø£Ø³Ø§Ø³Ù\8aات Ø§Ù\84تحرÙ\8aر Ø¹Ù\84Ù\89 Ø®Ø±Ø§Ø¦Ø· الشارع المفتوحة."
             },
             "navigation": {
                 "title": "التجوال"
             },
             "navigation": {
                 "title": "التجوال"
                 "title": "المباني"
             },
             "startediting": {
                 "title": "المباني"
             },
             "startediting": {
-                "title": "ابدأ التحرير",
+                "title": "ابدأ Ø¨Ø§Ù\84تحرÙ\8aر",
                 "save": "لا تنس حفظ تغييراتك بشكل دوري!",
                 "start": "إبدأ رسم الخرائط !"
             }
         },
         "presets": {
             "categories": {
                 "save": "لا تنس حفظ تغييراتك بشكل دوري!",
                 "start": "إبدأ رسم الخرائط !"
             }
         },
         "presets": {
             "categories": {
+                "category-barrier": {
+                    "name": "عناصر الحواجز"
+                },
                 "category-building": {
                 "category-building": {
-                    "name": "ميزات المبنى"
+                    "name": "عناصر المباني"
+                },
+                "category-golf": {
+                    "name": "عناصر الغولف"
+                },
+                "category-landuse": {
+                    "name": "عناصر الأراضي"
                 },
                 "category-natural-area": {
                 },
                 "category-natural-area": {
-                    "name": "ميزات طبيعية"
+                    "name": "عناصر طبيعية"
                 },
                 "category-natural-line": {
                 },
                 "category-natural-line": {
-                    "name": "ميزات طبيعية"
+                    "name": "عناصر طبيعية"
                 },
                 "category-natural-point": {
                 },
                 "category-natural-point": {
-                    "name": "ميزات طبيعية"
+                    "name": "عناصر طبيعية"
+                },
+                "category-path": {
+                    "name": "عناصر المسارات"
                 },
                 "category-rail": {
                 },
                 "category-rail": {
-                    "name": "ميزات السكك الحديدية"
+                    "name": "عناصر السكك الحديدية"
+                },
+                "category-restriction": {
+                    "name": "عناصر القيود"
                 },
                 "category-road": {
                 },
                 "category-road": {
-                    "name": "خصائص الطريق"
+                    "name": "عناصر الطرق"
+                },
+                "category-route": {
+                    "name": "عناصر المسارات"
+                },
+                "category-water-area": {
+                    "name": "عناصر المياه"
+                },
+                "category-water-line": {
+                    "name": "عناصر المياه"
                 }
             },
             "fields": {
                 "access": {
                 }
             },
             "fields": {
                 "access": {
-                    "label": "الدخول مسموح",
+                    "label": "وصول مسموح",
                     "options": {
                         "designated": {
                             "description": "الدخول مصرح به وفقا لعلامات أو قوانين محلية مخصصة.",
                     "options": {
                         "designated": {
                             "description": "الدخول مصرح به وفقا لعلامات أو قوانين محلية مخصصة.",
                         "bicycle": "دراجات هوائية",
                         "foot": "بالقدم",
                         "horse": "أحصنة",
                         "bicycle": "دراجات هوائية",
                         "foot": "بالقدم",
                         "horse": "أحصنة",
-                        "motor_vehicle": "مركبات"
+                        "motor_vehicle": "سيارات"
                     }
                 },
                 "access_simple": {
                     }
                 },
                 "access_simple": {
                 "address": {
                     "label": "العنوان",
                     "placeholders": {
                 "address": {
                     "label": "العنوان",
                     "placeholders": {
+                        "block_number": "رقم البلوك",
+                        "block_number!jp": "رقم البلوك",
                         "city": "المدينة",
                         "city": "المدينة",
-                        "city!vn": "بÙ\84دة / Ù\85دÙ\8aÙ\86ة",
+                        "city!vn": "اÙ\84Ù\85دÙ\8aÙ\86Ø© / Ø§Ù\84بÙ\84دة",
                         "conscriptionnumber": "123",
                         "country": "دولة",
                         "county": "بلد",
                         "conscriptionnumber": "123",
                         "country": "دولة",
                         "county": "بلد",
                         "hamlet": "قرية",
                         "housename": "اسم المنزل",
                         "housenumber": "123",
                         "hamlet": "قرية",
                         "housename": "اسم المنزل",
                         "housenumber": "123",
+                        "housenumber!jp": "رقم المبنى/ رقم القطعة",
                         "neighbourhood": "حي",
                         "place": "المكان",
                         "postcode": "الرمز البريدي",
                         "province": "المحافظة",
                         "quarter": "حي",
                         "state": "ولاية",
                         "neighbourhood": "حي",
                         "place": "المكان",
                         "postcode": "الرمز البريدي",
                         "province": "المحافظة",
                         "quarter": "حي",
                         "state": "ولاية",
-                        "street": "شارع"
+                        "street": "شارع",
+                        "subdistrict": "منطقة فرعية",
+                        "suburb": "ضاحية",
+                        "suburb!jp": "جناح"
                     }
                 },
                 "admin_level": {
                     }
                 },
                 "admin_level": {
                 "amenity": {
                     "label": "النوع"
                 },
                 "amenity": {
                     "label": "النوع"
                 },
+                "animal_boarding": {
+                    "label": "للحيوانات"
+                },
+                "animal_breeding": {
+                    "label": "للحيوانات"
+                },
+                "animal_shelter": {
+                    "label": "للحيوانات"
+                },
                 "area/highway": {
                     "label": "النوع"
                 },
                 "area/highway": {
                     "label": "النوع"
                 },
                 "barrier": {
                     "label": "نوع"
                 },
                 "barrier": {
                     "label": "نوع"
                 },
+                "bath/open_air": {
+                    "label": "هواء طلق"
+                },
                 "beauty": {
                     "label": "نوع المتجر"
                 },
                 "beauty": {
                     "label": "نوع المتجر"
                 },
                         "whole": "الدم الكامل"
                     }
                 },
                         "whole": "الدم الكامل"
                     }
                 },
+                "board_type": {
+                    "label": "النوع"
+                },
                 "boundary": {
                     "label": "النوع"
                 },
                 "boundary": {
                     "label": "النوع"
                 },
                 "building_area": {
                     "label": "المبنى"
                 },
                 "building_area": {
                     "label": "المبنى"
                 },
+                "camera/direction": {
+                    "label": "الاتجاه (الدرجات في اتجاه عقارب الساعة)",
+                    "placeholder": "45 ، 90 ، 180 ، 270"
+                },
                 "capacity": {
                     "label": "السعة",
                     "placeholder": "50, 100, 200..."
                 "capacity": {
                     "label": "السعة",
                     "placeholder": "50, 100, 200..."
                         "WSW": "غربي - جنوبي غربي"
                     }
                 },
                         "WSW": "غربي - جنوبي غربي"
                     }
                 },
+                "castle_type": {
+                    "label": "النوع"
+                },
                 "clock_direction": {
                     "label": "الاتجاه",
                     "options": {
                 "clock_direction": {
                     "label": "الاتجاه",
                     "options": {
                         "clockwise": "باتجاه عقارب الساعة"
                     }
                 },
                         "clockwise": "باتجاه عقارب الساعة"
                     }
                 },
+                "club": {
+                    "label": "النوع"
+                },
                 "collection_times": {
                     "label": "وقت الاستلام"
                 },
                 "collection_times": {
                     "label": "وقت الاستلام"
                 },
+                "communication_multi": {
+                    "label": "أنواع الاتصالات"
+                },
                 "construction": {
                     "label": "النوع"
                 },
                 "construction": {
                     "label": "النوع"
                 },
+                "contact/webcam": {
+                    "label": "رابط كاميرا الويب",
+                    "placeholder": "http://example.com"
+                },
                 "content": {
                     "label": "المحتويات"
                 },
                 "content": {
                     "label": "المحتويات"
                 },
                 "craft": {
                     "label": "النوع"
                 },
                 "craft": {
                     "label": "النوع"
                 },
+                "crop": {
+                    "label": "محاصيل"
+                },
                 "crossing": {
                     "label": "النوع"
                 },
                 "crossing": {
                     "label": "النوع"
                 },
+                "cuisine": {
+                    "label": "المأكولات"
+                },
                 "currency_multi": {
                     "label": "أنواع العملات"
                 },
                 "currency_multi": {
                     "label": "أنواع العملات"
                 },
                 "cycleway": {
                     "label": "ممر للدراجات",
                     "options": {
                 "cycleway": {
                     "label": "ممر للدراجات",
                     "options": {
+                        "lane": {
+                            "title": "ممر دراجات قياسي"
+                        },
                         "none": {
                             "description": "لا ممر للدراجات",
                             "title": "لا شيء"
                         "none": {
                             "description": "لا ممر للدراجات",
                             "title": "لا شيء"
                         "cycleway:right": "جانب أيمن"
                     }
                 },
                         "cycleway:right": "جانب أيمن"
                     }
                 },
+                "date": {
+                    "label": "التاريخ"
+                },
+                "delivery": {
+                    "label": "توصيل طلبات"
+                },
                 "denomination": {
                     "label": "الطائفة"
                 },
                 "denomination": {
                     "label": "الطائفة"
                 },
                     "label": "يمكن القيادة من خلاله"
                 },
                 "electrified": {
                     "label": "يمكن القيادة من خلاله"
                 },
                 "electrified": {
+                    "label": "الكهربية",
                     "options": {
                     "options": {
+                        "contact_line": "خط واصل",
                         "no": "لا",
                         "rail": "سكة حديد مكهربة",
                         "yes": "نعم (غير محدد)"
                         "no": "لا",
                         "rail": "سكة حديد مكهربة",
                         "yes": "نعم (غير محدد)"
-                    }
+                    },
+                    "placeholder": "خط واصل، سكك حديدية مكهربة..."
                 },
                 "elevation": {
                     "label": "ارتفاع"
                 },
                 "elevation": {
                     "label": "ارتفاع"
                 "fence_type": {
                     "label": "النوع"
                 },
                 "fence_type": {
                     "label": "النوع"
                 },
+                "fire_hydrant/position": {
+                    "options": {
+                        "lane": "حارة طريق",
+                        "parking_lot": "ساحة وقوف سيارات",
+                        "sidewalk": "رصيف"
+                    }
+                },
                 "fire_hydrant/type": {
                     "label": "النوع",
                     "options": {
                 "fire_hydrant/type": {
                     "label": "النوع",
                     "options": {
                 "handrail": {
                     "label": "سياج سلم (درابزين)"
                 },
                 "handrail": {
                     "label": "سياج سلم (درابزين)"
                 },
+                "height": {
+                    "label": "الارتفاع (بالأمتار)"
+                },
                 "highway": {
                     "label": "النوع"
                 },
                 "highway": {
                     "label": "النوع"
                 },
                     "label": "النوع"
                 },
                 "internet_access": {
                     "label": "النوع"
                 },
                 "internet_access": {
-                    "label": "ولوج للإنترنت",
+                    "label": "خدمة إنترنت",
                     "options": {
                         "no": "لا",
                         "terminal": "محطة",
                     "options": {
                         "no": "لا",
                         "terminal": "محطة",
                     }
                 },
                 "internet_access/fee": {
                     }
                 },
                 "internet_access/fee": {
-                    "label": "رسوم الدخول إلى شبكة الإنترنت"
+                    "label": "رسوم استخدام خدمة الإنترنت"
                 },
                 "lamp_type": {
                     "label": "النوع"
                 },
                 "lamp_type": {
                     "label": "النوع"
                 "man_made": {
                     "label": "النوع"
                 },
                 "man_made": {
                     "label": "النوع"
                 },
+                "maxheight": {
+                    "label": "أقصى ارتفاع"
+                },
                 "maxspeed": {
                     "label": "حدود السرعة",
                     "placeholder": "40, 50, 60..."
                 },
                 "maxspeed": {
                     "label": "حدود السرعة",
                     "placeholder": "40, 50, 60..."
                 },
+                "maxweight": {
+                    "label": "أقصى وزن"
+                },
                 "mtb/scale/imba": {
                     "options": {
                         "1": "سهل (دائرة خضراء)"
                 "mtb/scale/imba": {
                     "options": {
                         "1": "سهل (دائرة خضراء)"
-                    }
+                    },
+                    "placeholder": "سهل ، متوسط ، صعب..."
                 },
                 "mtb/scale/uphill": {
                     "placeholder": "0، 1، 2، 3 ..."
                 },
                 "name": {
                 },
                 "mtb/scale/uphill": {
                     "placeholder": "0، 1، 2، 3 ..."
                 },
                 "name": {
-                    "label": "اسم",
-                    "placeholder": "اسم شائع (إذا وجد)"
+                    "label": "الاسم",
+                    "placeholder": "الاسم شائع (إن وجد)"
                 },
                 "natural": {
                     "label": "طبيعه"
                 },
                 "natural": {
                     "label": "طبيعه"
                     }
                 },
                 "opening_hours": {
                     }
                 },
                 "opening_hours": {
-                    "label": "ساعات"
+                    "label": "ساعات العمل"
                 },
                 "operator": {
                     "label": "مشغل"
                 },
                 },
                 "operator": {
                     "label": "مشغل"
                 },
+                "outdoor_seating": {
+                    "label": "مقاعد في الهواء الطلق"
+                },
                 "par": {
                     "placeholder": "3، 4، 5 ..."
                 },
                 "par": {
                     "placeholder": "3، 4، 5 ..."
                 },
                 "restriction": {
                     "label": "النوع"
                 },
                 "restriction": {
                     "label": "النوع"
                 },
+                "restrictions": {
+                    "label": "قيود المنعطفات"
+                },
                 "rooms": {
                     "label": "الغرف"
                 },
                 "rooms": {
                     "label": "الغرف"
                 },
                         "bridge": "جسر",
                         "cutting": "طريق منخفض",
                         "embankment": "طريق مرتفع",
                         "bridge": "جسر",
                         "cutting": "طريق منخفض",
                         "embankment": "طريق مرتفع",
+                        "ford": "ممر مائي",
                         "tunnel": "نفق"
                     },
                     "placeholder": "غير معروف"
                         "tunnel": "نفق"
                     },
                     "placeholder": "غير معروف"
                     "terms": "مقعد, مقعد طويل"
                 },
                 "amenity/bicycle_parking": {
                     "terms": "مقعد, مقعد طويل"
                 },
                 "amenity/bicycle_parking": {
-                    "name": "موقف دراجات",
-                    "terms": "موقف دراجات هوائية"
+                    "name": "موقف دراجات هوائية",
+                    "terms": "موقف دراجات هوائية; موقف; دراجة; دراجات"
                 },
                 "amenity/bicycle_rental": {
                     "name": "تأجير دراجات",
                 },
                 "amenity/bicycle_rental": {
                     "name": "تأجير دراجات",
-                    "terms": "محل استئجار دراجات هوائية"
+                    "terms": "تأجير دراجات هوائية; تأجير; دراجة; دراجات; هوائي; هوائية"
+                },
+                "amenity/bicycle_repair_station": {
+                    "name": "ورشة إصلاح دراجات هوائية",
+                    "terms": "دراجات هوائية; دراجة; اصلاح; تصليح دراجات; تصليح"
                 },
                 "amenity/boat_rental": {
                     "name": "محل استئجار قوارب",
                 },
                 "amenity/boat_rental": {
                     "name": "محل استئجار قوارب",
                     "name": "غسيل سيارات",
                     "terms": "غسيل السيارات"
                 },
                     "name": "غسيل سيارات",
                     "terms": "غسيل السيارات"
                 },
+                "amenity/casino": {
+                    "name": "كازينو"
+                },
                 "amenity/charging_station": {
                     "name": "محطة شحن",
                     "terms": "محطة شحن"
                 "amenity/charging_station": {
                     "name": "محطة شحن",
                     "terms": "محطة شحن"
                     "terms": "أرض مستشفى"
                 },
                 "amenity/internet_cafe": {
                     "terms": "أرض مستشفى"
                 },
                 "amenity/internet_cafe": {
-                    "name": "Ù\85Ù\82Ù\87Ù\89 Ø§Ù\84Ø¥Ù\86ترÙ\86ت"
+                    "name": "مقهى إنترنت"
                 },
                 "amenity/library": {
                     "name": "مكتبة",
                 },
                 "amenity/library": {
                     "name": "مكتبة",
                 },
                 "amenity/motorcycle_parking": {
                     "name": "موقف دراجات نارية",
                 },
                 "amenity/motorcycle_parking": {
                     "name": "موقف دراجات نارية",
-                    "terms": "دراجة نارية, دراجة بخارية"
+                    "terms": "دراجة نارية, دراجة بخارية; موقف; مواقف; ركن"
                 },
                 "amenity/nightclub": {
                     "name": "ملهى ليلي"
                 },
                 "amenity/nightclub": {
                     "name": "ملهى ليلي"
                     "terms": "مواقف سيارات عامة ، مصف للسيارات، مواقف مركبات عمومية, مركن سيارات, جراج"
                 },
                 "amenity/parking_entrance": {
                     "terms": "مواقف سيارات عامة ، مصف للسيارات، مواقف مركبات عمومية, مركن سيارات, جراج"
                 },
                 "amenity/parking_entrance": {
-                    "name": "مدخل ومخرج موقف سيارات",
+                    "name": "مدخل ومخرج جراج وقوف",
                     "terms": "مدخل, مخرج"
                 },
                 "amenity/pharmacy": {
                     "terms": "مدخل, مخرج"
                 },
                 "amenity/pharmacy": {
                     "terms": "سلة المهملات,سلة القمامة"
                 },
                 "area": {
                     "terms": "سلة المهملات,سلة القمامة"
                 },
                 "area": {
-                    "name": "مساحة",
-                    "terms": "المساحة, مساحة"
+                    "name": "منطقة",
+                    "terms": "المساحة; مساحة; منطقة; المنطقة"
                 },
                 "barrier": {
                     "name": "حاجز",
                 },
                 "barrier": {
                     "name": "حاجز",
                     "terms": "جدار المدينة"
                 },
                 "barrier/cycle_barrier": {
                     "terms": "جدار المدينة"
                 },
                 "barrier/cycle_barrier": {
-                    "name": "حاجز Ø§Ù\84درجات Ø§Ù\84هوائية",
-                    "terms": "حاجز دراجات هوائية"
+                    "name": "حاجز Ø¯Ø±Ø§Ø¬Ø§Øª هوائية",
+                    "terms": "حاجز دراجات هوائية; حاجز; ممر; حاجز مرور; حاجز دراجات"
                 },
                 "barrier/entrance": {
                     "name": "مدخل"
                 },
                 "barrier/entrance": {
                     "name": "مدخل"
                     "name": "مبني تجاري",
                     "terms": "مبنى تجاري"
                 },
                     "name": "مبني تجاري",
                     "terms": "مبنى تجاري"
                 },
+                "building/entrance": {
+                    "name": "مدخل ومخرج"
+                },
                 "building/garage": {
                     "name": "جراج",
                     "terms": "مَرْأب , كراج, تصليح سيارات"
                 },
                 "building/garage": {
                     "name": "جراج",
                     "terms": "مَرْأب , كراج, تصليح سيارات"
                 },
+                "building/garages": {
+                    "name": "جراجات",
+                    "terms": "جراج; جراج سيارات; موقف; موقف سيارات; ركن; ركنة"
+                },
                 "building/greenhouse": {
                     "name": "بيت بلاستيكي"
                 },
                 "building/greenhouse": {
                     "name": "بيت بلاستيكي"
                 },
                 "craft/carpenter": {
                     "name": "نجار"
                 },
                 "craft/carpenter": {
                     "name": "نجار"
                 },
+                "craft/gardener": {
+                    "name": "بستاني"
+                },
                 "craft/jeweler": {
                     "name": "بائع مجوهرات"
                 },
                 "craft/jeweler": {
                     "name": "بائع مجوهرات"
                 },
+                "craft/painter": {
+                    "name": "دهّان"
+                },
                 "craft/photographer": {
                     "name": "مصور"
                 },
                 "craft/plumber": {
                     "name": "سمكري"
                 },
                 "craft/photographer": {
                     "name": "مصور"
                 },
                 "craft/plumber": {
                     "name": "سمكري"
                 },
+                "craft/saddler": {
+                    "name": "صانع سراج"
+                },
                 "craft/shoemaker": {
                     "name": "إسكافي"
                 },
                 "craft/shoemaker": {
                     "name": "إسكافي"
                 },
                     "name": "هاتف طوارئ",
                     "terms": "هاتف طوارئ"
                 },
                     "name": "هاتف طوارئ",
                     "terms": "هاتف طوارئ"
                 },
+                "entrance": {
+                    "name": "مدخل ومخرج",
+                    "terms": "دخول; خروج; مدخل; مخرج"
+                },
+                "footway/crossing": {
+                    "name": "معبر طريق",
+                    "terms": "معبر; عبور; عبور طريق; عبور شارع; معبر شارع; معبر طريق"
+                },
+                "footway/crosswalk": {
+                    "name": "معبر مشاة",
+                    "terms": "ممر; معبر; مشاة; ناس; اشخاص; عبور; مرور"
+                },
                 "footway/sidewalk": {
                     "name": "رصيف المشاة",
                     "terms": "رصيف, رصيف المشاة"
                 },
                 "footway/sidewalk": {
                     "name": "رصيف المشاة",
                     "terms": "رصيف, رصيف المشاة"
                 },
+                "ford": {
+                    "name": "ممر مائي",
+                    "terms": "ممر مائي; ممر; مائي; ماء"
+                },
                 "highway": {
                     "name": "طريق سريع"
                 },
                 "highway": {
                     "name": "طريق سريع"
                 },
                     "name": "محطة باص",
                     "terms": "موقف باصات, محطة باصات"
                 },
                     "name": "محطة باص",
                     "terms": "موقف باصات, محطة باصات"
                 },
+                "highway/crossing": {
+                    "name": "معبر طريق",
+                    "terms": "معبر; عبور; عبور طريق; عبور شارع; معبر شارع; معبر طريق"
+                },
+                "highway/crosswalk": {
+                    "name": "معبر مشاة",
+                    "terms": "ممر; معبر; مشاة; ناس; اشخاص; عبور; مرور"
+                },
                 "highway/cycleway": {
                 "highway/cycleway": {
-                    "name": "طريق دراجة هوائية",
-                    "terms": "طريق دراجات هوائية"
+                    "name": "مسار دراجات",
+                    "terms": "طريق دراجات; مسار دراجات"
                 },
                 "highway/footway": {
                     "name": "طريق مشي بالأقدام",
                 },
                 "highway/footway": {
                     "name": "طريق مشي بالأقدام",
                     "name": "طريق سكني",
                     "terms": "شارع سكني"
                 },
                     "name": "طريق سكني",
                     "terms": "شارع سكني"
                 },
+                "highway/rest_area": {
+                    "name": "منطقة استراحة",
+                    "terms": "راحة; نوم; استريح"
+                },
                 "highway/road": {
                     "name": "طريق غير معروف",
                     "terms": "طريق غير معروف"
                 "highway/road": {
                     "name": "طريق غير معروف",
                     "terms": "طريق غير معروف"
                     "name": "ممر وقوف السيارات",
                     "terms": "ممر وقوف السيارات"
                 },
                     "name": "ممر وقوف السيارات",
                     "terms": "ممر وقوف السيارات"
                 },
+                "highway/services": {
+                    "name": "منطقة خدمة",
+                    "terms": "خدمة سيارات; منطقة خدمة سيارات; منطقة خدمية"
+                },
                 "highway/steps": {
                     "name": "درج",
                     "terms": "درج"
                 "highway/steps": {
                     "name": "درج",
                     "terms": "درج"
                     "name": "رابط لطريق ثالثي",
                     "terms": "رابط لشارع ثالثي"
                 },
                     "name": "رابط لطريق ثالثي",
                     "terms": "رابط لشارع ثالثي"
                 },
+                "highway/traffic_mirror": {
+                    "name": "مرآة مرور",
+                    "terms": "مرآة; مرور; مراية"
+                },
                 "highway/traffic_signals": {
                     "name": "إشارات مرور",
                 "highway/traffic_signals": {
                     "name": "إشارات مرور",
-                    "terms": "إشارات Ø§Ù\84مرور"
+                    "terms": "اشارة; Ø§Ø´Ø§Ø±Ø§Øª; Ø§Ø´Ø§Ø±Ø© مرور"
                 },
                 "highway/trunk": {
                     "name": "طريق أساسي",
                 },
                 "highway/trunk": {
                     "name": "طريق أساسي",
                     "name": "آثار",
                     "terms": "أطلال"
                 },
                     "name": "آثار",
                     "terms": "أطلال"
                 },
-                "historic/wayside_cross": {
-                    "name": "صليب على الطريق",
-                    "terms": "صليب على الطريق"
-                },
                 "historic/wayside_shrine": {
                     "name": "مقام نصراني على الطريق",
                     "terms": "مقام نصراني على الطريق"
                 },
                 "historic/wayside_shrine": {
                     "name": "مقام نصراني على الطريق",
                     "terms": "مقام نصراني على الطريق"
                 },
+                "landuse": {
+                    "name": "أرض",
+                    "terms": "<ترجم بالمصطلحات أو المرادفات لـ \"الأراضي\"، فاصلا المدخلات بالفاصلة \",\">"
+                },
+                "landuse/aquaculture": {
+                    "name": "مزرعة سمكية"
+                },
                 "landuse/basin": {
                     "name": "حوض",
                     "terms": "حوض, حوض نهري"
                 "landuse/basin": {
                     "name": "حوض",
                     "terms": "حوض, حوض نهري"
                     "terms": "مقبرة, مدفن, جبانة"
                 },
                 "landuse/commercial": {
                     "terms": "مقبرة, مدفن, جبانة"
                 },
                 "landuse/commercial": {
-                    "name": "منطقة تجارية"
+                    "name": "منطقة تجارية",
+                    "terms": "تجارية; تجاري; منطقة تجارة"
                 },
                 "landuse/construction": {
                     "name": "إنشاءات",
                 },
                 "landuse/construction": {
                     "name": "إنشاءات",
                     "name": "غابة",
                     "terms": "غابة"
                 },
                     "name": "غابة",
                     "terms": "غابة"
                 },
+                "landuse/garages": {
+                    "name": "جراجات",
+                    "terms": "جراج; جراج سيارات; موقف; موقف سيارات; ركن; ركنة"
+                },
                 "landuse/grass": {
                     "name": "عشب",
                     "terms": "عشب, غطاء أخضر"
                 },
                 "landuse/industrial": {
                 "landuse/grass": {
                     "name": "عشب",
                     "terms": "عشب, غطاء أخضر"
                 },
                 "landuse/industrial": {
-                    "name": "منطقة صناعية"
+                    "name": "منطقة صناعية",
+                    "terms": "صناعية; صناعي; صناعات; منطقة صناعات; منطقة صناعة; صناعة; صنع"
                 },
                 "landuse/meadow": {
                     "name": "مرج",
                 },
                 "landuse/meadow": {
                     "name": "مرج",
                     "name": "منطقة عسكرية",
                     "terms": "جيش, قوات مسلحة, عسكرية"
                 },
                     "name": "منطقة عسكرية",
                     "terms": "جيش, قوات مسلحة, عسكرية"
                 },
+                "landuse/military/danger_area": {
+                    "name": "منطقة خطرة",
+                    "terms": "منطقة خطر; خطر"
+                },
+                "landuse/military/naval_base": {
+                    "name": "قاعدة بحرية",
+                    "terms": "بحرية; بحري; بحر; قاعدة"
+                },
                 "landuse/military/office": {
                     "name": "مكتب عسكري"
                 },
                 "landuse/military/range": {
                     "name": "نطاق عسكري"
                 },
                 "landuse/military/office": {
                     "name": "مكتب عسكري"
                 },
                 "landuse/military/range": {
                     "name": "نطاق عسكري"
                 },
+                "landuse/military/training_area": {
+                    "name": "منطقة تدريب",
+                    "terms": "منطقة تمرين; تدريب; تمرين"
+                },
                 "landuse/orchard": {
                     "name": "بستان",
                     "terms": " بستان, بيارة, أشجار البستان"
                 "landuse/orchard": {
                     "name": "بستان",
                     "terms": " بستان, بيارة, أشجار البستان"
                     "terms": "محجر"
                 },
                 "landuse/residential": {
                     "terms": "محجر"
                 },
                 "landuse/residential": {
-                    "name": "منطقة سكنية"
+                    "name": "منطقة سكنية",
+                    "terms": "منطقة سكانية; سكان; سكنية; سكن; منطقة سكن"
                 },
                 "landuse/retail": {
                     "name": "منطقة بيع بالتجزئة",
                 },
                 "landuse/retail": {
                     "name": "منطقة بيع بالتجزئة",
                     "name": "معلب جولف",
                     "terms": "معلب جولف"
                 },
                     "name": "معلب جولف",
                     "terms": "معلب جولف"
                 },
+                "leisure/horse_riding": {
+                    "name": "منشأة ركوب خيل",
+                    "terms": "منشأة ركوب خيل; خيل; ركوب خيل; امتطاء; امتطاء خيل; منشأة"
+                },
                 "leisure/ice_rink": {
                     "name": "حلبة تزلج",
                     "terms": "جليد, تزلج, حلبة"
                 "leisure/ice_rink": {
                     "name": "حلبة تزلج",
                     "terms": "جليد, تزلج, حلبة"
                     "name": "ملعب كرة السلة",
                     "terms": "ملعب كرة السلة"
                 },
                     "name": "ملعب كرة السلة",
                     "terms": "ملعب كرة السلة"
                 },
+                "leisure/pitch/equestrian": {
+                    "name": "حلبة ركوب خيل",
+                    "terms": "حلبة; ساحة; حلبة ركوب; ساحة ركوب; خيل; ركوب خيل"
+                },
                 "leisure/pitch/skateboard": {
                     "name": "حديقة تزلج",
                     "terms": "حديقة تزلج، ساحة تزلج"
                 "leisure/pitch/skateboard": {
                     "name": "حديقة تزلج",
                     "terms": "حديقة تزلج، ساحة تزلج"
                     "name": "مزلقة سفن",
                     "terms": "مزلقة سفن"
                 },
                     "name": "مزلقة سفن",
                     "terms": "مزلقة سفن"
                 },
+                "leisure/sports_centre/swimming": {
+                    "name": "مبنى حوض سباحة",
+                    "terms": "حمام سباحة; حوض سباحة; حمام; حوض; سباحة; مسبح"
+                },
                 "leisure/stadium": {
                 "leisure/stadium": {
-                    "name": "مدرج رياضي",
-                    "terms": "مدرج, مدرج للألعاب الرياضية, أستاذ رياضي"
+                    "name": "استاد رياضي",
+                    "terms": "مدرج; مدرج للألعاب الرياضية; استاد رياضي; استاد"
                 },
                 "leisure/swimming_pool": {
                     "name": "حوض سباحة",
                 },
                 "leisure/swimming_pool": {
                     "name": "حوض سباحة",
-                    "terms": "Ø­Ù\88ض Ø³Ø¨Ø§Ø­Ø©"
+                    "terms": "Ø­Ù\85اÙ\85 Ø³Ø¨Ø§Ø­Ø©; Ø­Ù\88ض Ø³Ø¨Ø§Ø­Ø©; Ø­Ù\85اÙ\85; Ø­Ù\88ض; Ø³Ø¨Ø§Ø­Ø©; Ù\85سبح"
                 },
                 "line": {
                     "name": "طريق",
                 },
                 "line": {
                     "name": "طريق",
                     "name": "كاسر الأمواج",
                     "terms": "كاسر الأمواج"
                 },
                     "name": "كاسر الأمواج",
                     "terms": "كاسر الأمواج"
                 },
+                "man_made/chimney": {
+                    "name": "مدخنة"
+                },
                 "man_made/cutline": {
                     "name": "خط الفصل",
                     "terms": "خط الفصل"
                 "man_made/cutline": {
                     "name": "خط الفصل",
                     "terms": "خط الفصل"
                     "terms": "شاطئ"
                 },
                 "natural/cave_entrance": {
                     "terms": "شاطئ"
                 },
                 "natural/cave_entrance": {
-                    "name": "مدخل كهف"
+                    "name": "مدخل كهف",
+                    "terms": "مدخل كهفي; كهف"
                 },
                 "natural/cliff": {
                     "name": "جرف صخري",
                 },
                 "natural/cliff": {
                     "name": "جرف صخري",
                     "name": "سكة حديدية مهجورة",
                     "terms": "سكة حديد مهجورة"
                 },
                     "name": "سكة حديدية مهجورة",
                     "terms": "سكة حديد مهجورة"
                 },
+                "railway/crossing": {
+                    "name": "معبر سكة حديد (مسار)",
+                    "terms": "معبر سكة حديد; معبر"
+                },
                 "railway/disused": {
                     "name": "سكة حديدة مهجورة",
                     "terms": "سكة حديد غير مستعملة"
                 "railway/disused": {
                     "name": "سكة حديدة مهجورة",
                     "terms": "سكة حديد غير مستعملة"
                     "name": "موقف سكة حديد",
                     "terms": "موقف إجباري خاص بسكك الحديد، موقف السكة الحديدية"
                 },
                     "name": "موقف سكة حديد",
                     "terms": "موقف إجباري خاص بسكك الحديد، موقف السكة الحديدية"
                 },
+                "railway/level_crossing": {
+                    "name": "معبر سكة حديد (طريق)",
+                    "terms": "معبر سكة حديد; معبر"
+                },
                 "railway/monorail": {
                     "name": "سكة حديدة مفردة",
                     "terms": "سكة حديدة مفردة"
                 "railway/monorail": {
                     "name": "سكة حديدة مفردة",
                     "terms": "سكة حديدة مفردة"
                     "terms": "محل مشروبات"
                 },
                 "shop/bicycle": {
                     "terms": "محل مشروبات"
                 },
                 "shop/bicycle": {
-                    "name": "Ù\85Ø­Ù\84 دراجات هوائية",
-                    "terms": "محل دراجات هوائية"
+                    "name": "Ù\85تجر دراجات هوائية",
+                    "terms": "محل دراجات هوائية; متجر دراجات; محل دراجات; بائع دراجات"
                 },
                 "shop/books": {
                     "name": "متجر كتب"
                 },
                 "shop/books": {
                     "name": "متجر كتب"
                     "terms": "محل بيع قطع السيارات"
                 },
                 "shop/car_repair": {
                     "terms": "محل بيع قطع السيارات"
                 },
                 "shop/car_repair": {
-                    "name": "Ù\85Ø­Ù\84 ØªØµÙ\84Ù\8aØ­ Ø§Ù\84سÙ\8aارات Ø¬Ø±Ø§Ø¬",
-                    "terms": "محل تصليح سيارات"
+                    "name": "Ù\88رشة Ø¥ØµÙ\84اح Ø³Ù\8aارات",
+                    "terms": "محل تصليح سيارات; ورشة تصليح; ورشة; ميكانيكي"
                 },
                 "shop/carpet": {
                     "name": "متجر سجاد"
                 },
                 "shop/carpet": {
                     "name": "متجر سجاد"
                     "terms": "محل بيع هواتف"
                 },
                 "shop/motorcycle": {
                     "terms": "محل بيع هواتف"
                 },
                 "shop/motorcycle": {
-                    "name": "وكالة دراجات نارية",
-                    "terms": "وكالة دراجات هوائية"
+                    "name": "بائع دراجات نارية",
+                    "terms": "وكالة دراجات هوائية; توكيل; بائع; توكيل دراجات; بائع دراجات; بيع دراجات; بيع"
                 },
                 "shop/music": {
                     "name": "محل بيع موسيقى",
                 },
                 "shop/music": {
                     "name": "محل بيع موسيقى",
                     "terms": "حديقة الحيوانات"
                 },
                 "traffic_calming": {
                     "terms": "حديقة الحيوانات"
                 },
                 "traffic_calming": {
-                    "name": "ممهل"
+                    "name": "مخفف سرعة",
+                    "terms": "مطب; مخفف; مهديء; مهدئ; ممهل; تخفيف; تمهيل; مطب صناعي"
                 },
                 "type/boundary": {
                     "name": "حدود",
                 },
                 "type/boundary": {
                     "name": "حدود",
                     "terms": "مسار"
                 },
                 "type/route/bicycle": {
                     "terms": "مسار"
                 },
                 "type/route/bicycle": {
-                    "name": "مسار دراجات الهوائية",
-                    "terms": "مسار دراجات هوائية"
+                    "name": "مسار دراجات",
+                    "terms": "مسار دراجات; مسار; طريق"
                 },
                 "type/route/bus": {
                     "name": "مسار الباصات",
                 },
                 "type/route/bus": {
                     "name": "مسار الباصات",
                     "name": "ممشى ",
                     "terms": "مسار المشاة، طريق للمشي، "
                 },
                     "name": "ممشى ",
                     "terms": "مسار المشاة، طريق للمشي، "
                 },
+                "type/route/horse": {
+                    "name": "مسار ركوب",
+                    "terms": "مسار ركوب"
+                },
                 "type/route/pipeline": {
                     "name": "مسار خط أنابيب",
                     "terms": "مسار خط أنابيب"
                 "type/route/pipeline": {
                     "name": "مسار خط أنابيب",
                     "terms": "مسار خط أنابيب"
index 6f202a5a0c76bd03009a2e4f61a4873c6585c39c..123d7f05737b32d6def7b4f9ce70de44ebd63df5 100644 (file)
             "edit": "Editar carauterística",
             "check": {
                 "yes": "Si",
             "edit": "Editar carauterística",
             "check": {
                 "yes": "Si",
-                "no": "Non"
+                "no": "Non",
+                "reverser": "Cambiar direición"
+            },
+            "radio": {
+                "structure": {
+                    "type": "Tipu",
+                    "default": "Predeterminao",
+                    "layer": "Capa"
+                }
             },
             "add": "Amestar",
             "none": "Dengún",
             },
             "add": "Amestar",
             "none": "Dengún",
             "error": "Hebo errores al intentar guardar",
             "status_code": "El sirvidor devolvió'l códigu d'estáu {code}",
             "unknown_error_details": "Comprueba que tienes conexón a internet.",
             "error": "Hebo errores al intentar guardar",
             "status_code": "El sirvidor devolvió'l códigu d'estáu {code}",
             "unknown_error_details": "Comprueba que tienes conexón a internet.",
+            "uploading": "Xubiendo los cambios a OpenStreetMap",
             "unsaved_changes": "Tien cambios ensin guardar",
             "conflict": {
                 "header": "Iguar conflictos d'edición",
             "unsaved_changes": "Tien cambios ensin guardar",
             "conflict": {
                 "header": "Iguar conflictos d'edición",
             "help_link_text": "Detalles"
         },
         "confirm": {
             "help_link_text": "Detalles"
         },
         "confirm": {
+            "okay": "Aceutar",
             "cancel": "Encaboxar"
         },
         "splash": {
             "cancel": "Encaboxar"
         },
         "splash": {
             "lose_changes": "Tien cambios ensin guardar. Camudar el sirvidor de mapes descartarálos. ¿Ta seguru de que quier intercambiar de sirvidores?",
             "dev": "dev"
         },
             "lose_changes": "Tien cambios ensin guardar. Camudar el sirvidor de mapes descartarálos. ¿Ta seguru de que quier intercambiar de sirvidores?",
             "dev": "dev"
         },
+        "version": {
+            "whats_new": "Les novedaes en iD {version}"
+        },
         "tag_reference": {
             "description": "Descripción",
             "on_wiki": "{tag} en wiki.osm.org",
             "used_with": "usada con {type}"
         },
         "validations": {
         "tag_reference": {
             "description": "Descripción",
             "on_wiki": "{tag} en wiki.osm.org",
             "used_with": "usada con {type}"
         },
         "validations": {
+            "disconnected_highway": "Carretera desconeutada",
+            "disconnected_highway_tooltip": "Les carreteres habríen tar coneutaes con otres carreteres o entraes d'edificios.",
             "untagged_point": "Puntu ensin etiquetar",
             "untagged_line": "Llinia ensin etiquetar",
             "untagged_area": "Área ensin etiquetar",
             "untagged_point": "Puntu ensin etiquetar",
             "untagged_line": "Llinia ensin etiquetar",
             "untagged_area": "Área ensin etiquetar",
             "in": "Averar",
             "out": "Alloñar"
         },
             "in": "Averar",
             "out": "Alloñar"
         },
+        "full_screen": "Conmutar pantalla completa",
+        "gpx": {
+            "local_layer": "Ficheru llocal",
+            "drag_drop": "Abasna y suelta un ficheru .gpx, .geojson o .kml na páxina, o prime nel botón de la drecha pa restolar",
+            "zoom": "Averar a capa"
+        },
         "mapillary": {
             "view_on_mapillary": "Ver esta imaxe'n Mapillary"
         },
         "mapillary": {
             "view_on_mapillary": "Ver esta imaxe'n Mapillary"
         },
         },
         "intro": {
             "done": "fecho",
         },
         "intro": {
             "done": "fecho",
+            "ok": "Aceutar",
             "graph": {
                 "block_number": "<value for addr:block_number>",
             "graph": {
                 "block_number": "<value for addr:block_number>",
+                "city": "Three Rivers",
                 "county": "<value for addr:county>",
                 "district": "<value for addr:district>",
                 "hamlet": "<value for addr:hamlet>",
                 "neighbourhood": "<value for addr:neighbourhood>",
                 "county": "<value for addr:county>",
                 "district": "<value for addr:district>",
                 "hamlet": "<value for addr:hamlet>",
                 "neighbourhood": "<value for addr:neighbourhood>",
+                "postcode": "49093",
                 "province": "<value for addr:province>",
                 "quarter": "<value for addr:quarter>",
                 "state": "<value for addr:state>",
                 "subdistrict": "<value for addr:subdistrict>",
                 "suburb": "<value for addr:suburb>",
                 "province": "<value for addr:province>",
                 "quarter": "<value for addr:quarter>",
                 "state": "<value for addr:state>",
                 "subdistrict": "<value for addr:subdistrict>",
                 "suburb": "<value for addr:suburb>",
-                "countrycode": "es"
+                "countrycode": "es",
+                "name": {
+                    "1st-avenue": "1ª Avenida",
+                    "2nd-avenue": "2ª Avenida",
+                    "4th-avenue": "4ª Avenida",
+                    "5th-avenue": "5ª Avenida",
+                    "6th-avenue": "6ª Avenida",
+                    "6th-street": "Calle 6ª",
+                    "7th-avenue": "7ª Avenida",
+                    "8th-avenue": "8ª Avenida",
+                    "9th-avenue": "9ª Avenida",
+                    "10th-avenue": "10ª Avenida",
+                    "11th-avenue": "11ª Avenida",
+                    "12th-avenue": "12 Avenida"
+                }
+            },
+            "welcome": {
+                "title": "Bienveníos"
             },
             "navigation": {
                 "title": "Navegacion"
             },
             "navigation": {
                 "title": "Navegacion"
             "lines": {
                 "title": "Llinies"
             },
             "lines": {
                 "title": "Llinies"
             },
+            "buildings": {
+                "title": "Edificios"
+            },
             "startediting": {
                 "title": "Principiar la edición",
                 "save": "¡Nun escaeza guardar los cambios de mou regular!",
                 "start": "¡Principie a facer mapes!"
             }
         },
             "startediting": {
                 "title": "Principiar la edición",
                 "save": "¡Nun escaeza guardar los cambios de mou regular!",
                 "start": "¡Principie a facer mapes!"
             }
         },
+        "shortcuts": {
+            "editing": {
+                "title": "Editar",
+                "drawing": {
+                    "title": "Dibuxar",
+                    "add_point": "Mou «amestar puntu»",
+                    "add_line": "Mou «amestar llinia»",
+                    "add_area": "Mou «amestar área»",
+                    "place_point": "Asitiar un puntu"
+                },
+                "operations": {
+                    "title": "Operaciones"
+                },
+                "commands": {
+                    "title": "Comandos",
+                    "save": "Guardar los cambios"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                 "internet_access/fee": {
                     "label": "Accesu a Internet de pagu"
                 },
                 "internet_access/fee": {
                     "label": "Accesu a Internet de pagu"
                 },
-                "kerb": {
-                    "label": "Bordiellu rebaxáu"
-                },
                 "lamp_type": {
                     "label": "Tipu"
                 },
                 "lamp_type": {
                     "label": "Tipu"
                 },
index 9eb5606504a8a9cc84eb93a0187c6d3918a122c7..1c5ed0b9cd2e16b9c158de0ad15f74bf5c7b764f 100644 (file)
                 "tooltip": "Edificis, refugis, garatges, etc."
             },
             "landuse": {
                 "tooltip": "Edificis, refugis, garatges, etc."
             },
             "landuse": {
-                "description": "Ús del terreny",
+                "description": "Ús del territori",
                 "tooltip": "Boscos, camps, parcs, residencial, comercial, etc."
             },
             "boundaries": {
                 "tooltip": "Boscos, camps, parcs, residencial, comercial, etc."
             },
             "boundaries": {
         "help": {
             "title": "Ajuda",
             "help": "# Ajuda\n\nAixò és un editor per al [OpenStreetMap](http://www.openstreetmap.org/), el mapa lliure i editable del món. Podeu utilitzar-lo per afegir i actualitzar\nles dades a la vostra àrea, contibuint així a fer un mapa de codi obert i amb dades lliures del món\nmillor per a tothom.\n\nLes edicions que feu en aquest mapa seran visibles per tothom que faci servir OpenStreetMap. Per tal de començar a editar, necessitareu\n[iniciar sessió](https://www.openstreetmap.org/login).\n\nL'[Editor iD](http://ideditor.com/) és un projecte cooperatiu que té el [codi font\ndisponible a GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Ajuda",
             "help": "# Ajuda\n\nAixò és un editor per al [OpenStreetMap](http://www.openstreetmap.org/), el mapa lliure i editable del món. Podeu utilitzar-lo per afegir i actualitzar\nles dades a la vostra àrea, contibuint així a fer un mapa de codi obert i amb dades lliures del món\nmillor per a tothom.\n\nLes edicions que feu en aquest mapa seran visibles per tothom que faci servir OpenStreetMap. Per tal de començar a editar, necessitareu\n[iniciar sessió](https://www.openstreetmap.org/login).\n\nL'[Editor iD](http://ideditor.com/) és un projecte cooperatiu que té el [codi font\ndisponible a GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Edició i desat\n\nAquest editor està dissenyat per treballar principalment en línia, i hi heu accedit mitjançant una pàgina web.\n\n### Selecció d'objectes\n\nPer seleccionar un element del mapa, com ara una carretera o un punt d'interès, cliqueu-hi a sobre.\nAixò ressaltarà l'objecte seleccionat, obrirà un panell amb els detalls sobre aquest, i un menú amb les coses que hi podeu fer.\n\nPer seleccionar múltiples objectes, premeu la tecla 'Shift' i cliqueu-los per separat, o bé clicant i arrossegant el cursor dibuixeu un rectangle per sobre de tots ells. Això seleccionarà tots els objectes dins el rectangle que es dibuixarà i permetrà modificar tots els objectes seleccionats alhora.\n\n### Desant les edicions\n\nQuan feu canvis com ara editar carreteres, edificis, o llocs, aquests canvis es desen localment fins que els deseu al servidor. No us preocupeu si cometeu algun error- podeu desfer els canvis clicant el botó de desfer, i podeu refer els canvis clicant el botó de refer.\n\nCliqueu 'Desa' per acabar un grup d'edicions - per exemple, si heu acabat de delimitar l'àrea d'una ciutat i voleu començar a fer-ne una altra. Tindreu la oportunitat de revisar la feina feta, i l'editor proporcionarà suggeriments que us podran ajudar com també mostrarà alertes si detecta alguna cosa que no està del tot bé als vostres canvis.\n\nSi tot sembla correcte, podeu escriure un breu comentari explicant el canvis que heu fet, i clicar 'Desa' un altre cop per publicar els canvis a [OpenStreetMap.org](http://www.openstreetmap.org/), on seran visibles per a tots els altres usuaris i disponibles per a altres per refer-los o bé millorar-los. Si no podeu finalitzar les vostres edicions en una mateixa sessió, podeu sortir de la finestra d'edició i tornar-hi més tard (al mateix navegador i ordinador), i l'aplicació d'edició us preguntarà si voleu restaurar els canvis anteriors.\n\n### Utilitzant l'editor\n\nHi ha una llista de dreceres de teclat disponible [aquí](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n",
             "roads": "# Carreteres\n\nPodeu crear, ajustar i eliminar carreteres amb aquest editor. Les carreteres poden ser\nde molts tipus: pistes, autovies, camins, carrils bici, i molts més - qualsevol tram\ndels més comuns s'hauria de poder dibuixar.\n\n### Selecció\n\nCliqueu a la carretera per seleccionar-la. En fer-ho els seus contorns es faran visibles,\ncom també un petit menú d'eines i una barra lateral que mostrarà més informació\nde la carretera.\n\n### Modificació\n\nDe vegades veureu carreteres que no coincideixen amb la imatge de fons\no amb una traça de GPS. Podeu ajustar aquestes carreteres per tal que estiguin al lloc\ncorrecte.\n\nPrimer cliqueu la carretera que voleu canviar. Això la ressaltarà i mostrarà els punts de control\nque podeu arrossegar a les ubicacions desitjades. Si el que\nvoleu és afegir nous punts per millorar-ne el detall, feu doble clic a una part de la carretera sense punts, i se'n afegirà un.\n\nSi la carretera es connecta amb una altra, però no es reflecteix al mapa,\npodeu arrossegar un dels punts de control cap a l'altra carretera\nper tal d'unir-les. Fer que les carreteres es connectin és molt important\nper al mapa i essencial per proveir direccions per a la conducció.\n\nTambé podeu clicar l'eina «Mou» o prémer la drecera «M» per moure la carretera sencera, tota de cop, i llavors clicar altra vegada per guardar aquest moviment.\n\n### Eliminació\n\nSi una carretera està mal posada -podeu apreciar que no existeix a la imatge per satèl·lit\ni, a més a més, els veïns han confirmat que no existeix - la podeu eliminar, cosa que la traurà del mapa. Aneu amb compte  en eliminar objectes -\ncom en altres edicions, els resultats els veurà tothom, perquè sovint, la imatge del satèl·lit no està actualitzada: podria ser que la carretera s'hagués construït recentment.\n\nPodeu eliminar una carretera clicant-la i, llavors, clicant la icona de la paperera, o bé prement la tecla «Suprimeix».\n\n### Creació\n\nHeu trobat que en algun lloc hi hauria d'haver una carretera però no hi és? Cliqueu la icona «Línia»\nal marge superior esquerre de la zona del mapa o bé premeu la drecera «2» per començar a dibuixar\nuna línia.\n\nCliqueu a l'inici de la carretera al mapa per començar-la a dibuixar. Si la carretera comença amb una bifurcació en una carretera existent, cliqueu al lloc a on connecten.\n\nTot seguit cliqueu a diferents punts al llarg de la carretera per tal que segueixi el traçat correcte, d'acord  amb la imatge del satèl·lit o una traça del GPS. Si la carretera que esteu dibuixant s'encreua amb una altra carretera, connecteu-les clicant al punt d'intersecció. Quan acabeu el dibuix, feu doble clic o premeu «Retorn» del teclat.\n",
             "gps": "# GPS\n\nLes traces enregistrades amb GPS són una font fiable de dades per a l'OpenStreetMap. Aquest editor accepta les traces locals - fitxers `.gpx` del vostre ordinador. Podeu generar aquest tipus de traça GPS amb aplicacions per a mòbils o per dispositius personals de GPS.\n\nPer a més informació de com recollir dades amb GPS, llegiu [Recollir dades amb GPS](http://learnosm.org/en/mobile-mapping/).\n\nPer utilitzar una traça GPX en la edició del mapa arrossegueu el fitxer GPX i deixeu-lo a l'editor. En detectar-se, s'afegirà en el mapa com una línia lila llampant. Cliqueu al menú 'Dades del mapa', al cantó dret, per activar, desactivar, o ajustar la visió d'aquesta capa GPX.\n\nLa traça GPX no pujarà directament a OpenStreetMap - la millor manera d'utilitzar-la és que dibuixeu en el mapa els nous objectes, fent-la servir com a guia. De tota manera, també la podeu [pujar a l'OpenStreetMap] (http://www.openstreetmap.org/trace/create) perquè d'altres persones l'aprofitin.\n",
             "imagery": "# Imatgeria\n\nLa imatgeria aèria és un recurs important per a l'edició de mapes. Una combinació de\nvols d'aeronaus, fotografies de satèl·lit, i d'altres fonts compilades gratuïtament\nestan disponibles a l'editor dins del menú de l'esquerra 'Paràmetres de configuració del fons'.\n\nPer defecte, l'editor mostra la capa de satèl·lit de [Bing Maps](http://www.bing.com/maps/), però a mesura que us moveu i ajusteu la vista del mapa a noves àrees geogràfiques, noves fonts estaran disponibles. En alguns països, com ara els Estats Units, França, i Dinamarca tenen\nuna imatgeria d'alta qualitat disponible per a determinades àrees.\n\nLa imatgeria a vegades no es correspon amb les dades del mapa, això és degut a un error\nper part del proveïdor de la imatge. Si observeu moltes carreteres mogudes del seu lloc a la imatge,\nno les mogueu per tal que encaixin amb aquesta. Ja que podeu ajustar la imatgeria per tal de que quadri amb les dades existents clicant a 'Corregeix la desalineació' al capdevall de la pestanya dels\n'Paràmetres de configuració del fons'.\n",
             "roads": "# Carreteres\n\nPodeu crear, ajustar i eliminar carreteres amb aquest editor. Les carreteres poden ser\nde molts tipus: pistes, autovies, camins, carrils bici, i molts més - qualsevol tram\ndels més comuns s'hauria de poder dibuixar.\n\n### Selecció\n\nCliqueu a la carretera per seleccionar-la. En fer-ho els seus contorns es faran visibles,\ncom també un petit menú d'eines i una barra lateral que mostrarà més informació\nde la carretera.\n\n### Modificació\n\nDe vegades veureu carreteres que no coincideixen amb la imatge de fons\no amb una traça de GPS. Podeu ajustar aquestes carreteres per tal que estiguin al lloc\ncorrecte.\n\nPrimer cliqueu la carretera que voleu canviar. Això la ressaltarà i mostrarà els punts de control\nque podeu arrossegar a les ubicacions desitjades. Si el que\nvoleu és afegir nous punts per millorar-ne el detall, feu doble clic a una part de la carretera sense punts, i se'n afegirà un.\n\nSi la carretera es connecta amb una altra, però no es reflecteix al mapa,\npodeu arrossegar un dels punts de control cap a l'altra carretera\nper tal d'unir-les. Fer que les carreteres es connectin és molt important\nper al mapa i essencial per proveir direccions per a la conducció.\n\nTambé podeu clicar l'eina «Mou» o prémer la drecera «M» per moure la carretera sencera, tota de cop, i llavors clicar altra vegada per guardar aquest moviment.\n\n### Eliminació\n\nSi una carretera està mal posada -podeu apreciar que no existeix a la imatge per satèl·lit\ni, a més a més, els veïns han confirmat que no existeix - la podeu eliminar, cosa que la traurà del mapa. Aneu amb compte  en eliminar objectes -\ncom en altres edicions, els resultats els veurà tothom, perquè sovint, la imatge del satèl·lit no està actualitzada: podria ser que la carretera s'hagués construït recentment.\n\nPodeu eliminar una carretera clicant-la i, llavors, clicant la icona de la paperera, o bé prement la tecla «Suprimeix».\n\n### Creació\n\nHeu trobat que en algun lloc hi hauria d'haver una carretera però no hi és? Cliqueu la icona «Línia»\nal marge superior esquerre de la zona del mapa o bé premeu la drecera «2» per començar a dibuixar\nuna línia.\n\nCliqueu a l'inici de la carretera al mapa per començar-la a dibuixar. Si la carretera comença amb una bifurcació en una carretera existent, cliqueu al lloc a on connecten.\n\nTot seguit cliqueu a diferents punts al llarg de la carretera per tal que segueixi el traçat correcte, d'acord  amb la imatge del satèl·lit o una traça del GPS. Si la carretera que esteu dibuixant s'encreua amb una altra carretera, connecteu-les clicant al punt d'intersecció. Quan acabeu el dibuix, feu doble clic o premeu «Retorn» del teclat.\n",
             "gps": "# GPS\n\nLes traces enregistrades amb GPS són una font fiable de dades per a l'OpenStreetMap. Aquest editor accepta les traces locals - fitxers `.gpx` del vostre ordinador. Podeu generar aquest tipus de traça GPS amb aplicacions per a mòbils o per dispositius personals de GPS.\n\nPer a més informació de com recollir dades amb GPS, llegiu [Recollir dades amb GPS](http://learnosm.org/en/mobile-mapping/).\n\nPer utilitzar una traça GPX en la edició del mapa arrossegueu el fitxer GPX i deixeu-lo a l'editor. En detectar-se, s'afegirà en el mapa com una línia lila llampant. Cliqueu al menú 'Dades del mapa', al cantó dret, per activar, desactivar, o ajustar la visió d'aquesta capa GPX.\n\nLa traça GPX no pujarà directament a OpenStreetMap - la millor manera d'utilitzar-la és que dibuixeu en el mapa els nous objectes, fent-la servir com a guia. De tota manera, també la podeu [pujar a l'OpenStreetMap] (http://www.openstreetmap.org/trace/create) perquè d'altres persones l'aprofitin.\n",
             "imagery": "# Imatgeria\n\nLa imatgeria aèria és un recurs important per a l'edició de mapes. Una combinació de\nvols d'aeronaus, fotografies de satèl·lit, i d'altres fonts compilades gratuïtament\nestan disponibles a l'editor dins del menú de l'esquerra 'Paràmetres de configuració del fons'.\n\nPer defecte, l'editor mostra la capa de satèl·lit de [Bing Maps](http://www.bing.com/maps/), però a mesura que us moveu i ajusteu la vista del mapa a noves àrees geogràfiques, noves fonts estaran disponibles. En alguns països, com ara els Estats Units, França, i Dinamarca tenen\nuna imatgeria d'alta qualitat disponible per a determinades àrees.\n\nLa imatgeria a vegades no es correspon amb les dades del mapa, això és degut a un error\nper part del proveïdor de la imatge. Si observeu moltes carreteres mogudes del seu lloc a la imatge,\nno les mogueu per tal que encaixin amb aquesta. Ja que podeu ajustar la imatgeria per tal de que quadri amb les dades existents clicant a 'Corregeix la desalineació' al capdevall de la pestanya dels\n'Paràmetres de configuració del fons'.\n",
                 "zoom": "Us podeu apropar o allunyar movent la rodeta del ratolí o del ratolí tàctil o clicant els botons {plus} / {minus}. **Amplia el mapa!**",
                 "features": "Utilitzem la paraula *objectes* per descriure les coses que es mostren al mapa. Qualsevol cosa del món real es pot representar al mapa com un objecte a OpenStreetmap",
                 "points_lines_areas": "Els objectes del mapa es representen usant *punts, línies o àrees.*",
                 "zoom": "Us podeu apropar o allunyar movent la rodeta del ratolí o del ratolí tàctil o clicant els botons {plus} / {minus}. **Amplia el mapa!**",
                 "features": "Utilitzem la paraula *objectes* per descriure les coses que es mostren al mapa. Qualsevol cosa del món real es pot representar al mapa com un objecte a OpenStreetmap",
                 "points_lines_areas": "Els objectes del mapa es representen usant *punts, línies o àrees.*",
-                "nodes_ways": "En l'OpenStreetMap, els punts de vegades els anomenem *nodes*, i les línies i àrees de vegades les anomenem *vies*.",
+                "nodes_ways": "A OpenStreetMap els punts de vegades els anomenem *nodes* i les línies i àrees de vegades les anomenem *vies*.",
                 "click_townhall": "Tots els objectes del mapa es poden seleccionar fent-hi clic. **Feu clic al punt per a seleccionar-lo.**",
                 "selected_townhall": "Bé! Ara el punt està seleccionat. Els objectes seleccionats es mostren amb un contorn realçat.",
                 "editor_townhall": "Quan un objecte es selecciona,  es mostra **l'editor d'objectes** al costat del mapa",
                 "click_townhall": "Tots els objectes del mapa es poden seleccionar fent-hi clic. **Feu clic al punt per a seleccionar-lo.**",
                 "selected_townhall": "Bé! Ara el punt està seleccionat. Els objectes seleccionats es mostren amb un contorn realçat.",
                 "editor_townhall": "Quan un objecte es selecciona,  es mostra **l'editor d'objectes** al costat del mapa",
                 "choose_cafe": "**Trieu «{preset}» de la llista.**",
                 "feature_editor": "Ara el punt està marcat com un cafè. Utilitzant l'editor d'objectes podem afegir més informació d'aquest cafè.",
                 "add_name": "A OpenStreetMap tots els camps són opcionals, i ja estarà bé si deixeu un camp buit quan no n'estigueu segur.{br}Ara suposem que coneixeu aquest cafè i sabeu el seu nom. **Afegiu un nom al cafè.**",
                 "choose_cafe": "**Trieu «{preset}» de la llista.**",
                 "feature_editor": "Ara el punt està marcat com un cafè. Utilitzant l'editor d'objectes podem afegir més informació d'aquest cafè.",
                 "add_name": "A OpenStreetMap tots els camps són opcionals, i ja estarà bé si deixeu un camp buit quan no n'estigueu segur.{br}Ara suposem que coneixeu aquest cafè i sabeu el seu nom. **Afegiu un nom al cafè.**",
-                "add_close": "L'editor d'objectes recordarà els vostres canvis automàticament. **Quan acabeu de posar el nom, premeu la tecla d'escapada o la de retorn, o cliqueu el {button} botó per tancar l'editor d'objectes.**",
+                "add_close": "L'editor d'objectes recordarà automàticament tots els vostres canvis.  **Quan hàgiu acabat d'afegir el nom premeu la tecla d'escapada o la de retorn, o cliqueu el botó {button} per tancar l'editor d'objectes.**",
                 "reselect": "Sovint hi ha punts que ja existeixen però tenen errors o són incomplets. Podem editar els punts existents. **Cliqueu per seleccionar el cafè que acabeu de crear.**",
                 "reselect": "Sovint hi ha punts que ja existeixen però tenen errors o són incomplets. Podem editar els punts existents. **Cliqueu per seleccionar el cafè que acabeu de crear.**",
-                "update": "Ara podem emplenar alguns detalls més d'aquest cafè. Podeu canviar els seu nom, afegir el tipus de menjar o una adreça. **Modifiqueu els detalls del cafè.**",
-                "update_close": "**Quan acabeu d'actualitzar el cafè, premeu la tecla d'escapada o la de retorn, o cliqueu el {button} botó per tancar l'editor d'objectes.**",
+                "update": "Ara podrem afegir alguns detalls més d'aquest cafè. Podeu canviar els seu nom, afegir el tipus de menjar o una adreça. **Modifiqueu els detalls del cafè.**",
+                "update_close": "**Quan hàgiu acabat de modificar el cafè premeu la tecla d'escapada o la de retorn, o cliqueu el botó {button} per tancar l'editor d'objectes.**",
                 "rightclick": "Podeu clicar el botó dret sobre qualsevol objecte per veure el *menú d'edició*, això mostra la llista de les operacions d'edició que es poden fer. **Cliqueu el botó dret per seleccionar el punt que heu creat i veure el menú d'edició. **",
                 "delete": "És convenient esborrar objectes si no existeixen al món real .{br}En esborrar un objecte de OpenStreetMap el suprimiu del mapa que tots utilitzem, per tant ho hauríeu de saber del cert que l'objecte no hi és abans d'esborrar-lo. **Cliqueu el botó {button} per esborrar el punt.**",
                 "rightclick": "Podeu clicar el botó dret sobre qualsevol objecte per veure el *menú d'edició*, això mostra la llista de les operacions d'edició que es poden fer. **Cliqueu el botó dret per seleccionar el punt que heu creat i veure el menú d'edició. **",
                 "delete": "És convenient esborrar objectes si no existeixen al món real .{br}En esborrar un objecte de OpenStreetMap el suprimiu del mapa que tots utilitzem, per tant ho hauríeu de saber del cert que l'objecte no hi és abans d'esborrar-lo. **Cliqueu el botó {button} per esborrar el punt.**",
-                "undo": "Sempre podeu desfer tots canvis fins el darrer quan hàgiu desat les vostres edicions a OpenStreetMap. **Cliqueu en el botó {button} per desfer l'esborrat i recuperar el punt.**",
+                "undo": "Sempre podreu anar desfent els canvis fets fins el darrer cop que vareu desar les vostres edicions a OpenStreetMap. **Cliqueu en el botó {button} per desfer l'esborrat i recuperar el punt.**",
                 "play": "Ara que sabeu com crear i editar punts, proveu creant uns quants punts per practicar! **Quan estigueu preparat per continuar vers el següent capítol, cliqueu '{next}'.**"
             },
             "areas": {
                 "play": "Ara que sabeu com crear i editar punts, proveu creant uns quants punts per practicar! **Quan estigueu preparat per continuar vers el següent capítol, cliqueu '{next}'.**"
             },
             "areas": {
                 "add_playground": "*Àrees* s'utilitza per definir els límits d'objectes com llacs, edificis o àrees residencials.{br}També es poden utilitzar per incloure més detalls al mapa de molts objectes que altrament deixaríeu com un punt. **Cliqueu el botó {button} Àrea per afegir una nova àrea.**",
                 "start_playground": "Afegim aquesta zona de joc al mapa dibuixant una àrea. Les àrees es dibuixen situant *nodes* seguint el límit extern de l'objecte. **Cliqueu o premeu la barra espaiadora per situar el primer node a una de les cantonades de la zona de joc.**",
                 "continue_playground": "Continueu dibuixant l'àrea situant més nodes al llarg del límit de la zona de joc. Queda perfecte si connecteu l'àrea a les rutes d'accés per vianants que pugui haver.{br}Consell: Si manteniu premuda la tecla d'alternativa evitareu que els nodes es connectin a altres objectes. **Continueu dibuixant una àrea per la zona de joc.**",
                 "add_playground": "*Àrees* s'utilitza per definir els límits d'objectes com llacs, edificis o àrees residencials.{br}També es poden utilitzar per incloure més detalls al mapa de molts objectes que altrament deixaríeu com un punt. **Cliqueu el botó {button} Àrea per afegir una nova àrea.**",
                 "start_playground": "Afegim aquesta zona de joc al mapa dibuixant una àrea. Les àrees es dibuixen situant *nodes* seguint el límit extern de l'objecte. **Cliqueu o premeu la barra espaiadora per situar el primer node a una de les cantonades de la zona de joc.**",
                 "continue_playground": "Continueu dibuixant l'àrea situant més nodes al llarg del límit de la zona de joc. Queda perfecte si connecteu l'àrea a les rutes d'accés per vianants que pugui haver.{br}Consell: Si manteniu premuda la tecla d'alternativa evitareu que els nodes es connectin a altres objectes. **Continueu dibuixant una àrea per la zona de joc.**",
-                "finish_playground": "Finalitzeu l'àrea prement la tecla de retorn o clicant altre cop sigui el primer o el darrer node. **Finalitzeu el dibuix de l'àrea de la zona de jocs infantils.**",
+                "finish_playground": "Acabeu l'àrea prement la tecla de retorn o clicant altre cop el primer o el darrer node. **Acabeu de dibuixar una àrea per al parc.**",
                 "search_playground": "**Cerqueu «{preset}».**",
                 "choose_playground": "**Trieu «{preset}» de la llista.**",
                 "add_field": "Aquesta zona de jocs infantils no té un nom oficial i no en podrem posar-ne cap al camp Nom. {br}Altrament podem afegir alguns detalls addicionals s'aquesta zona de joc en el camp Descripció. **Obriu la llista Afegir Camp.** ",
                 "search_playground": "**Cerqueu «{preset}».**",
                 "choose_playground": "**Trieu «{preset}» de la llista.**",
                 "add_field": "Aquesta zona de jocs infantils no té un nom oficial i no en podrem posar-ne cap al camp Nom. {br}Altrament podem afegir alguns detalls addicionals s'aquesta zona de joc en el camp Descripció. **Obriu la llista Afegir Camp.** ",
                 "intersect": "Cliqueu o premeu la barra d'espais per afegir més nodes a la línia. {br}Les carreteres i molts altres tipus de línies són part d'una xarxa superior. Aquestes línies s'han de connectar correctament perquè les aplicacions de navegació funcionin. ** Cliqueu a {name} per crear un encreuament que connecti les dues línies.**",
                 "retry_intersect": "La carretera ha d'intersecar «{name}». Torneu a intentar-ho!",
                 "continue_line": "Continueu dibuixant la línia de la nova carretera. recordeu que podeu arrossegar i modificar la escala del mapa si us convé. {br}Quan acabeu el traçat, cliqueu altre cop el darrer node.  **Finalitzeu el traçat de la carretera.**",
                 "intersect": "Cliqueu o premeu la barra d'espais per afegir més nodes a la línia. {br}Les carreteres i molts altres tipus de línies són part d'una xarxa superior. Aquestes línies s'han de connectar correctament perquè les aplicacions de navegació funcionin. ** Cliqueu a {name} per crear un encreuament que connecti les dues línies.**",
                 "retry_intersect": "La carretera ha d'intersecar «{name}». Torneu a intentar-ho!",
                 "continue_line": "Continueu dibuixant la línia de la nova carretera. recordeu que podeu arrossegar i modificar la escala del mapa si us convé. {br}Quan acabeu el traçat, cliqueu altre cop el darrer node.  **Finalitzeu el traçat de la carretera.**",
-                "choose_category_road": "**Trieu «{category}» de la llista.**",
+                "choose_category_road": "**Seleccioneu {category} de la llista.**",
                 "choose_preset_residential": "Hi ha molts tipus de vies, però les més comunes són els carrers residencials. **Trieu el tipus «{preset}».**",
                 "retry_preset_residential": "No heu seleccionat tipus «{preset}». **Feu clic aquí per a intentar-ho un altra vegada.**",
                 "choose_preset_residential": "Hi ha molts tipus de vies, però les més comunes són els carrers residencials. **Trieu el tipus «{preset}».**",
                 "retry_preset_residential": "No heu seleccionat tipus «{preset}». **Feu clic aquí per a intentar-ho un altra vegada.**",
-                "name_road": "**Poseu a aquesta via un nom, desprès premeu la tecla d'escapada o la de retorn, o cliqueu el {button} botó per tancar l'editor d'objectes.**",
+                "name_road": "**Poseu un nom a aquesta via, desprès premeu la tecla d'escapada o la de retorn, o cliqueu el botó {button} per tancar l'editor d'objectes.**",
+                "did_name_road": "Te bona pinta! Ara aprendrem com modificar la forma d'una línia.",
+                "update_line": "De vegades necessitareu modificar la forma d'una línia ja existent. Aquí teniu una línia que es podria millorar,",
+                "add_node": "Podem afegir alguns nodes a aquesta línia per millorar la seva forma. Una manera d'afegir nodes és clicant dos cops la línia allà on vulguem afegir el node. **Cliqueu dos cops a la línia per crear un node nou.**",
+                "start_drag_endpoint": "Quan una línia està seleccionada es poden arrossegar qualsevol dels seus nodes clicant i mantenint pres el botó esquerra del ratolí mentre l'arrossegueu.  **Arrossegueu el punt extrem fins on aquestes vies s'haurien de creuar.**",
+                "delete_lines": "És convenient esborrar els trams de carrer que no existeixin realment.(br)Aquí hi ha un exemple on es va planejar un carrer però mai es va fer. Podem millorar aquesta zona del mapa si esborrem les línies supèrflues. ",
                 "split_intersection": "** Feu clic al botó {button} per a dividir «{street}».**",
                 "retry_split": "No heu fet clic al botó «Divideix». Torneu a intentar-ho.",
                 "split_intersection": "** Feu clic al botó {button} per a dividir «{street}».**",
                 "retry_split": "No heu fet clic al botó «Divideix». Torneu a intentar-ho.",
+                "did_split_multi": "Ben fet! {street1} ara està dividit en dos troços. La part superior es pot esborrar. **Cliqueu la part superior de {street2} per seleccionar-la.**",
                 "did_split_single": "**Feu clic a la part superior de «{street2}» per a seleccionar-ho.**",
                 "did_split_single": "**Feu clic a la part superior de «{street2}» per a seleccionar-ho.**",
+                "multi_rightclick": "Molt bé! Les dues línies a esborrar ara estan seleccionades. **Cliqueu el botó dret sobre una de les línies per mostrar el menú d'edició.*",
                 "multi_delete": "**Cliqueu el {button} botó per eliminar les línies addicionals.**",
                 "retry_delete": "No heu clicat al botó Esborra. Torneu a intentar-ho."
             },
                 "multi_delete": "**Cliqueu el {button} botó per eliminar les línies addicionals.**",
                 "retry_delete": "No heu clicat al botó Esborra. Torneu a intentar-ho."
             },
                 "title": "Edificis",
                 "add_building": "L'OpenStreetMap és la base de dades d'edificis més gran del món. {br}Podeu millorar aquesta base de dades dibuixant edificis que encara no estiguin al mapa. **Cliqueu el botó {button} Àrea per afegir una nova àrea.**.",
                 "start_building": "Afegiu aquesta casa al mapa perfilant el seu contorn. {br}Els edificis s'haurien de perfilar al voltant de la seva planta el més acuradament possible. **Cliqueu o premeu la barra d'espai per posar un node inicial a una de les cantonades del edifici.**",
                 "title": "Edificis",
                 "add_building": "L'OpenStreetMap és la base de dades d'edificis més gran del món. {br}Podeu millorar aquesta base de dades dibuixant edificis que encara no estiguin al mapa. **Cliqueu el botó {button} Àrea per afegir una nova àrea.**.",
                 "start_building": "Afegiu aquesta casa al mapa perfilant el seu contorn. {br}Els edificis s'haurien de perfilar al voltant de la seva planta el més acuradament possible. **Cliqueu o premeu la barra d'espai per posar un node inicial a una de les cantonades del edifici.**",
-                "continue_building": "Continueu afegint més nodes per perfilar el contorn de l'edifici. Recordeu que podeu ampliar l'escala si voleu afegir més detalls. {br}Finalitzeu l'edifici prement la tecla de retorn o clicant altre cop el primer o el darrer node.** Acabeu de perfilar l'edifici.**",
+                "retry_building": "Sembla que heu tingut problemes situant els nodes a les cantonades del edifici. Torneu-ho a provar!",
                 "choose_category_building": "**Trieu «{category}» de la llista.**",
                 "choose_preset_house": "Hi ha molts tipus d'edificis, però aquest és clarament una casa.{br}Si no esteu segur del tipus, és correcte de simplement triar un tipus d'edifici genèric. **Trieu el tipus «{preset}».**",
                 "close": "**Premeu la tecla d'escapada o cliqueu el {button} botó per tancar l'editor d'objectes.**",
                 "rightclick_building": "**Cliqueu-lo amb el botó dret per seleccionar l'edifici que heu creat i mostrar-lo al menú d'edició.**",
                 "choose_category_building": "**Trieu «{category}» de la llista.**",
                 "choose_preset_house": "Hi ha molts tipus d'edificis, però aquest és clarament una casa.{br}Si no esteu segur del tipus, és correcte de simplement triar un tipus d'edifici genèric. **Trieu el tipus «{preset}».**",
                 "close": "**Premeu la tecla d'escapada o cliqueu el {button} botó per tancar l'editor d'objectes.**",
                 "rightclick_building": "**Cliqueu-lo amb el botó dret per seleccionar l'edifici que heu creat i mostrar-lo al menú d'edició.**",
+                "square_building": "La casa que acabeu d'afegir tindrà més bona pinta amb unes cantonades en angle recte. **Cliqueu en el botó {button} per dibuixar l'edifici amb angles rectes.**",
                 "retry_square": "No heu clicat al botó Quadrat. Torneu a intentar-ho.",
                 "retry_square": "No heu clicat al botó Quadrat. Torneu a intentar-ho.",
+                "done_square": "Veieu com les cantonades del edifici han canviat de lloc? Aprenguem un altre pràctic truc. ",
                 "add_tank": "Ara perfilarem aquest dipòsit d'emmagatzemament circular. \"\"Cliqueu el botó {button} per afegir una àrea nova.**",
                 "start_tank": "No us preocupeu que no us cal dibuixar un cercle perfecte. Només dibuixeu una àrea dins del dipòsit que toqui el seu contorn. **Cliqueu o premeu la barra d'espai per situar el node inicial del contorn del dipòsit.**",
                 "add_tank": "Ara perfilarem aquest dipòsit d'emmagatzemament circular. \"\"Cliqueu el botó {button} per afegir una àrea nova.**",
                 "start_tank": "No us preocupeu que no us cal dibuixar un cercle perfecte. Només dibuixeu una àrea dins del dipòsit que toqui el seu contorn. **Cliqueu o premeu la barra d'espai per situar el node inicial del contorn del dipòsit.**",
-                "continue_tank": "Afegiu uns pocs nodes més a la vora del contorn. El cercle es crearà per fora dels nodes que dibuixeu. {br}Acabeu l'àrea prement la tecla de retorn o clicant altre cop el primer o el darrer node. **Acabeu de perfilar el dipòsit.**",
                 "search_tank": "**Cerqueu «{preset}».**",
                 "choose_tank": "**Trieu «{preset}» de la llista.**",
                 "rightclick_tank": "**Cliqueu amb el botó dret per seleccionar el dipòsit d'emmagatzematge que heu creat i mostrar el menú d'edició.**",
                 "search_tank": "**Cerqueu «{preset}».**",
                 "choose_tank": "**Trieu «{preset}» de la llista.**",
                 "rightclick_tank": "**Cliqueu amb el botó dret per seleccionar el dipòsit d'emmagatzematge que heu creat i mostrar el menú d'edició.**",
                 "start": "Comenceu a editar el mapa!"
             }
         },
                 "start": "Comenceu a editar el mapa!"
             }
         },
+        "shortcuts": {
+            "title": "Dreceres de teclat"
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                 "internet_access/ssid": {
                     "label": "SSID (nom de la xarxa)"
                 },
                 "internet_access/ssid": {
                     "label": "SSID (nom de la xarxa)"
                 },
-                "kerb": {
-                    "label": "Rebaix de vorada"
-                },
                 "lamp_type": {
                     "label": "Tipus"
                 },
                 "lamp_type": {
                     "label": "Tipus"
                 },
index 48f0572df873d5a19cf8f270dab4352aff73f459..b58ccb5ac56071b5343c3e88493ead6af38c0c07 100644 (file)
         "help": {
             "title": "Nápověda",
             "help": "# Pomoc\n\nToto je editor [OpenStreetMap](http://www.openstreetmap.org/), svobodné a otevřené mapy světa, vytvářené jako open-source a open-data. S pomocí editoru můžete přidávat a upravovat data v mapě třeba ve svém okolí, a zlepšovat tak celou mapu pro každého.\n\nVaše úpravy mapy budou viditelné pro každého uživatele OpenStreetMap. Před editací se ovšem musíte [přihlásit](https://www.openstreetmap.org/login).\n\n[iD editor](http://ideditor.com/) je projekt vytvářený spoluprací mnoha lidí, se [zdrojovým kódem na GitHubu](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Nápověda",
             "help": "# Pomoc\n\nToto je editor [OpenStreetMap](http://www.openstreetmap.org/), svobodné a otevřené mapy světa, vytvářené jako open-source a open-data. S pomocí editoru můžete přidávat a upravovat data v mapě třeba ve svém okolí, a zlepšovat tak celou mapu pro každého.\n\nVaše úpravy mapy budou viditelné pro každého uživatele OpenStreetMap. Před editací se ovšem musíte [přihlásit](https://www.openstreetmap.org/login).\n\n[iD editor](http://ideditor.com/) je projekt vytvářený spoluprací mnoha lidí, se [zdrojovým kódem na GitHubu](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Editace a publikace\n\nTento editor pracuje primárně online - právě teď k němu přistupujete prostřednictvím webové stránky.\n\n### Výběr objektů\n\nChcete-li vybrat objekt, jako třeba silnici nebo obchod, klikněte na něj v mapě. Objekt se tím označí, otevře se boční panel s vlastnostmi objektu a zobrazí se nabídka s akcemi, které lze s objektem provést.\n\nMůžete označit a pracovat s několika objekty najednou: podržte klávesu 'Shift', a pak buď postupně označte dotyčné objekty, anebo klikněte na mapu a táhněte myší či prstem - editor označí všechny objekty uvnitř příslušného obdélníku.\n\n### Publikace změn\n\nKdyž provedete nějaké úpravy objektů v mapě, úpravy jsou uloženy lokálně ve vašem prohlížeči. Nelekejte se, když uděláte chybu - úpravy lze vrátit zpět tlačítkem Zpět, a naopak je znovu provést tlačítkem Znovu.\n\nPo dokončení bloku úprav klikněte na 'Uložit' - například když jste upravili jednu část města, a chcete začít úpravy někde jinde. Zobrazí se přehled úprav, které jste provedli, editor tyto úpravy zkontroluje, a když se mu něco nebude zdát, zobrazí varování a návrhy.\n\nKdyž bude všechno v pořádku, můžete přidat krátký komentář s vysvětlením vašich úprav a kliknout znovu 'Uložit'. Úpravy se tímto publikují na [OpenStreetMap.org](http://www.openstreetmap.org/), kde za chvíli budou viditelné pro všechny uživatele a bude na nich možné provádět další úpravy.\n\nPokud nechcete nebo nemůžete úpravy dokončit teď, stačí prostě odejít ze stránky pryč. Až příště navštívíte stránku (na stejném počítači, ve stejném prohlížeči), editor vám nabídne možnost znovu načíst neuložené úpravy.\n\n### Používání editoru\n\nSeznam dostupných klávesových zkratek je k dispozici [zde](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n",
             "roads": "# Cesty\n\nEditor umožňuje vytvářet, opravovat a mazat silnice, pěšiny, cyklostezky, železnice atd. Zmapovat by mělo jít jakýkoli druh komunikace.\n\n### Výběr\n\nKdyž na cestu kliknete, zbarví se její obrys, otevře se u ní malá nabídka s nástroji a dále boční panel s informacemi o cestě.\n\n### Úpravy\n\nČasto narazíte na cesty, které jen nepřesně sledují pozadí či trasu GPS. Takové cesty můžete zarovnat na správné místo.\n\nNapřed klikněte na cestu, kterou chcete upravit. Cesta se rozsvítí a podél ní se objeví kontrolní uzly, které můžete posunout na správné místo. Pokud chcete přidat další kontrolní body a zpřesnit tak průběh cesty, stačí dvakrát kliknout na kus cesty mezi dvěma uzly - na zvolené místo přibude nový uzel.\n\nKdyž je reálná cesta napojena na jinou, ale v mapě spojeny nejsou, posuňte myší kontrolní uzel jedné cesty nad druhou - cesty se pak spojí. Propojení cest je velmi důležité pro správnou funkci navigací.\n\nTaké můžete posunout najednou celou cestu: buď klikněte na ikonu posunu v menu zobrazeném u cesty nebo stiskněte klávesu `M` a potom klikněte myší pro ukončení posunu. Jen pozor - pokud jsou vůči pozadí či GPS stopě všechny objekty v okolí, pravděpodobně to bude chybným pozadím a ne chybnou polohou objektů.\n\n### Mazání\n\nPokud je cesta úplně špatně, můžete ji zcela odstranit z mapy. Neměli byste se spoléhat pouze na satelitní snímky - mohou být zastaralé nebo zavádějící -, ideální je se přesvědčit na místě, že cesta opravdu neexistuje. Zvlášť při mazání objektů buďte opatrní - výsledek vaší úpravy se projeví v mapě pro všechny její uživatele.\n\nCestu smažete tak, že na ni kliknete a zvolíte ikonu odpadkového koše nebo stisknete klávesu Delete.\n\n### Vytváření\n\nNarazili jste na cestu, která by v mapě měla být, ale není? Klikněte na tlačítko 'Cesta' vlevo nahoře nebo stiskněte klávesu `2` - to vám umožní nakreslit novou cestu.\n\nKlikněte na místo, kde cesta začíná. Pokud cesta vychází z jiné, existující cesty, klikněte na místo, kde se cesty oddělují.\n\nPotom postupně klikejte na body, kudy cesta vede, podle satelitních snímků nebo trasy z GPS. Pokud vaše cesta protíná jinou, je třeba je propojit tak, že kliknete na bod křížení. Nakonec dvakrát klikněte na stejné místo nebo stiskněte klávesu 'Return' nebo 'Enter', cesta se tak ukončí.\n",
             "gps": "# GPS\n\nData z GPS jsou jedním z důvěryhodných zdrojů informací pro OpenStreetMap. Tento editor podporuje zobrazení tras ve formátu `.gpx` nahraných z vašeho počítače. Takovou trasu můžete nasbírat s pomocí nejrůznějších aplikací pro mobily nebo s pomocí specializované navigace.\n\nPro více informací, jak provést takový sběr dat z GPS, viz např. návod anglicky: [Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).\n\nPokud už máte záznam ve formátu GPX, přetáhněte soubor myší či prstem nad editor. Rozpozná-li editor formát souboru, zobrazí se trasa v mapě jako světle růžová čára. Pokud chcete tuto novou vrstvu zapnout, vypnout nebo zvětšit na velikost pracovní plochy, klikněte na menu 'Mapová data' na pravé straně.\n\nTrasa GPX nebude přímo nahrána na OpenStreetMap - pouze slouží jako vodítko, podle kterého se můžete orientovat, a podle kterého můžete kreslit nové objekty do mapy. Pokud chcete přímo trasu GPX poskytnout i ostatním, můžete ji [nahrát do samostatné databáze OpenStreetMap](http://www.openstreetmap.org/trace/create).\n",
             "imagery": "# Podkladové snímky\n\nSatelitní a letecké snímky jsou důležitým zdrojem mapových dat. V menu 'Nastavení pozadí' na levé straně editoru je k dispozici kombinace leteckých snímků, satelitních snímků a dalších volně dostupných podkladů.\n\nImplicitní vrstvou jsou satelitní snímky [Bing](http://www.bing.com/maps/), ale jakmile se přesunete do konkrétní geografické oblasti a nastavíte dostatečné zvětšení, nabídnou se vám další mapové podklady. V některých státech, jako jsou Spojené státy, Francie či Dánskou, jsou k dispozici snímky ve vysoké kvalitě. Pro velkou část České republiky jsou také dostupné velmi detailní satelitní snímky. **Data z katastru nemovitostí a letecké mapy ÚHUL** je možné zobrazit dle [návodu zde](https://wiki.openstreetmap.org/wiki/WikiProject_Czech_Republic/freemap#WMS_UHUL_-_ortofotomapa).\n\nPodklady jsou někdy posunuté vůči mapě, kvůli chybám na straně poskytovatele snímků. Pokud uvidíte, že je mnoho cest v mapě posunuto vůči pozadí, nesnažte se je hned přesunout - posun obvykle znamená chybu v podkladu a ne chybu v mapě. V menu 'Nastavení pozadí' klikněte na 'Zarovnat pozadí' - to vám dovolí posunout podklad, aby lícoval s mapou.\n",
             "roads": "# Cesty\n\nEditor umožňuje vytvářet, opravovat a mazat silnice, pěšiny, cyklostezky, železnice atd. Zmapovat by mělo jít jakýkoli druh komunikace.\n\n### Výběr\n\nKdyž na cestu kliknete, zbarví se její obrys, otevře se u ní malá nabídka s nástroji a dále boční panel s informacemi o cestě.\n\n### Úpravy\n\nČasto narazíte na cesty, které jen nepřesně sledují pozadí či trasu GPS. Takové cesty můžete zarovnat na správné místo.\n\nNapřed klikněte na cestu, kterou chcete upravit. Cesta se rozsvítí a podél ní se objeví kontrolní uzly, které můžete posunout na správné místo. Pokud chcete přidat další kontrolní body a zpřesnit tak průběh cesty, stačí dvakrát kliknout na kus cesty mezi dvěma uzly - na zvolené místo přibude nový uzel.\n\nKdyž je reálná cesta napojena na jinou, ale v mapě spojeny nejsou, posuňte myší kontrolní uzel jedné cesty nad druhou - cesty se pak spojí. Propojení cest je velmi důležité pro správnou funkci navigací.\n\nTaké můžete posunout najednou celou cestu: buď klikněte na ikonu posunu v menu zobrazeném u cesty nebo stiskněte klávesu `M` a potom klikněte myší pro ukončení posunu. Jen pozor - pokud jsou vůči pozadí či GPS stopě všechny objekty v okolí, pravděpodobně to bude chybným pozadím a ne chybnou polohou objektů.\n\n### Mazání\n\nPokud je cesta úplně špatně, můžete ji zcela odstranit z mapy. Neměli byste se spoléhat pouze na satelitní snímky - mohou být zastaralé nebo zavádějící -, ideální je se přesvědčit na místě, že cesta opravdu neexistuje. Zvlášť při mazání objektů buďte opatrní - výsledek vaší úpravy se projeví v mapě pro všechny její uživatele.\n\nCestu smažete tak, že na ni kliknete a zvolíte ikonu odpadkového koše nebo stisknete klávesu Delete.\n\n### Vytváření\n\nNarazili jste na cestu, která by v mapě měla být, ale není? Klikněte na tlačítko 'Cesta' vlevo nahoře nebo stiskněte klávesu `2` - to vám umožní nakreslit novou cestu.\n\nKlikněte na místo, kde cesta začíná. Pokud cesta vychází z jiné, existující cesty, klikněte na místo, kde se cesty oddělují.\n\nPotom postupně klikejte na body, kudy cesta vede, podle satelitních snímků nebo trasy z GPS. Pokud vaše cesta protíná jinou, je třeba je propojit tak, že kliknete na bod křížení. Nakonec dvakrát klikněte na stejné místo nebo stiskněte klávesu 'Return' nebo 'Enter', cesta se tak ukončí.\n",
             "gps": "# GPS\n\nData z GPS jsou jedním z důvěryhodných zdrojů informací pro OpenStreetMap. Tento editor podporuje zobrazení tras ve formátu `.gpx` nahraných z vašeho počítače. Takovou trasu můžete nasbírat s pomocí nejrůznějších aplikací pro mobily nebo s pomocí specializované navigace.\n\nPro více informací, jak provést takový sběr dat z GPS, viz např. návod anglicky: [Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).\n\nPokud už máte záznam ve formátu GPX, přetáhněte soubor myší či prstem nad editor. Rozpozná-li editor formát souboru, zobrazí se trasa v mapě jako světle růžová čára. Pokud chcete tuto novou vrstvu zapnout, vypnout nebo zvětšit na velikost pracovní plochy, klikněte na menu 'Mapová data' na pravé straně.\n\nTrasa GPX nebude přímo nahrána na OpenStreetMap - pouze slouží jako vodítko, podle kterého se můžete orientovat, a podle kterého můžete kreslit nové objekty do mapy. Pokud chcete přímo trasu GPX poskytnout i ostatním, můžete ji [nahrát do samostatné databáze OpenStreetMap](http://www.openstreetmap.org/trace/create).\n",
             "imagery": "# Podkladové snímky\n\nSatelitní a letecké snímky jsou důležitým zdrojem mapových dat. V menu 'Nastavení pozadí' na levé straně editoru je k dispozici kombinace leteckých snímků, satelitních snímků a dalších volně dostupných podkladů.\n\nImplicitní vrstvou jsou satelitní snímky [Bing](http://www.bing.com/maps/), ale jakmile se přesunete do konkrétní geografické oblasti a nastavíte dostatečné zvětšení, nabídnou se vám další mapové podklady. V některých státech, jako jsou Spojené státy, Francie či Dánskou, jsou k dispozici snímky ve vysoké kvalitě. Pro velkou část České republiky jsou také dostupné velmi detailní satelitní snímky. **Data z katastru nemovitostí a letecké mapy ÚHUL** je možné zobrazit dle [návodu zde](https://wiki.openstreetmap.org/wiki/WikiProject_Czech_Republic/freemap#WMS_UHUL_-_ortofotomapa).\n\nPodklady jsou někdy posunuté vůči mapě, kvůli chybám na straně poskytovatele snímků. Pokud uvidíte, že je mnoho cest v mapě posunuto vůči pozadí, nesnažte se je hned přesunout - posun obvykle znamená chybu v podkladu a ne chybu v mapě. V menu 'Nastavení pozadí' klikněte na 'Zarovnat pozadí' - to vám dovolí posunout podklad, aby lícoval s mapou.\n",
                 "mouse": "Doporučujme používat myš s levým a pravým tlačítkem. **Připojte ji prosím a stiskněte OK.**",
                 "leftclick": "Kliknutí nebo dvojklik = levé tlačítko. (Na touchpadu to může být klepnutí jedním prstem.) **Klikněte levým tlačítkem {num}krát.**",
                 "rightclick": "Pravé tlačítko je jasné. (Na touchpadu lze použít klepnutí dvěma prsty či CTRL+klik.) **Klikněte {num}krát pravým tlačítkem.**",
                 "mouse": "Doporučujme používat myš s levým a pravým tlačítkem. **Připojte ji prosím a stiskněte OK.**",
                 "leftclick": "Kliknutí nebo dvojklik = levé tlačítko. (Na touchpadu to může být klepnutí jedním prstem.) **Klikněte levým tlačítkem {num}krát.**",
                 "rightclick": "Pravé tlačítko je jasné. (Na touchpadu lze použít klepnutí dvěma prsty či CTRL+klik.) **Klikněte {num}krát pravým tlačítkem.**",
-                "chapters": "Super! Tlačítky dole můžete přeskočit kapitolu nebo jí opakovat. **Pokračujte do '{next}'.**"
+                "chapters": "Tak jdem na to! Tlačítky dole můžete přeskočit kapitolu nebo jí opakovat. **Pokračujte do '{next}'.**"
             },
             "navigation": {
                 "title": "Navigace",
             },
             "navigation": {
                 "title": "Navigace",
                 "points_lines_areas": "Prvky v mapě jsou tvořeny pomocí *bodů*, *linií* a *ploch*.",
                 "nodes_ways": "V OSM se též používá tato terminologie: \n*body = uzly* (nodes) \na *linie a plochy = cesty* (ways). ",
                 "click_townhall": "Kliknutím lze vybírat libovolné prvky v mapě. **Klikněte na tento bod.**",
                 "points_lines_areas": "Prvky v mapě jsou tvořeny pomocí *bodů*, *linií* a *ploch*.",
                 "nodes_ways": "V OSM se též používá tato terminologie: \n*body = uzly* (nodes) \na *linie a plochy = cesty* (ways). ",
                 "click_townhall": "Kliknutím lze vybírat libovolné prvky v mapě. **Klikněte na tento bod.**",
-                "selected_townhall": "Fajn! Bod je nyní vybrán. Pozná se to tak, že červeně pulzuje.",
+                "selected_townhall": "OK! Bod je nyní vybrán. Pozná se to tak, že červeně pulzuje.",
                 "editor_townhall": "S vybraným prvkem se otevře *editor vlastností*.",
                 "preset_townhall": "Nahoře je *typ prvku*. (Tento bod je {preset}.)",
                 "fields_townhall": "Uprostřed jsou *vlastnosti* (jako třeba název nebo adresa).",
                 "close_townhall": "**Zavřete editor vlastností (Esc či {button})**",
                 "search_street": "Zde můžete vyhledávat prvky v aktuálním výřezu mapy nebo i celosvětově. **Vyhledejte '{name}'.**",
                 "choose_street": "**Vyberte {name}**",
                 "editor_townhall": "S vybraným prvkem se otevře *editor vlastností*.",
                 "preset_townhall": "Nahoře je *typ prvku*. (Tento bod je {preset}.)",
                 "fields_townhall": "Uprostřed jsou *vlastnosti* (jako třeba název nebo adresa).",
                 "close_townhall": "**Zavřete editor vlastností (Esc či {button})**",
                 "search_street": "Zde můžete vyhledávat prvky v aktuálním výřezu mapy nebo i celosvětově. **Vyhledejte '{name}'.**",
                 "choose_street": "**Vyberte {name}**",
-                "selected_street": "Fajn! Ulice {name} je nyní vybrán.",
-                "editor_street": "Vlastnosti ulice jsou jiné než pro radnici.{br}\nZde například '{field1}' a '{field2}'. \n**Zavřete editor vlastností (Esc či {button})**",
+                "selected_street": "OK! Ulice {name} je nyní vybrána.",
+                "editor_street": "Vlastnosti ulice jsou jiné než pro radnici.{br}\nZde například '{field1}' a '{field2}'. \n**Nyní zavřete editor vlastností (Esc či {button})**",
                 "play": "Zkuste si zabrouzdat mapou a proklikat pár prvků. **Potom pokračujte na '{next}'.**"
             },
             "points": {
                 "play": "Zkuste si zabrouzdat mapou a proklikat pár prvků. **Potom pokračujte na '{next}'.**"
             },
             "points": {
                 "rightclick_intersection": "Poslední existující je ulice {street1}, takže musíme *rozdělit* ulici {street2} na této křižovatce a smazat vše výše od ní.\n**Klikněte pravým tlačítkem na křiovatku**",
                 "split_intersection": "**Tlačítkem {button} rozdělte {street}.**",
                 "retry_split": "Nevybrali jste tlačítko Rozdělit. Zkuste to znovu.",
                 "rightclick_intersection": "Poslední existující je ulice {street1}, takže musíme *rozdělit* ulici {street2} na této křižovatce a smazat vše výše od ní.\n**Klikněte pravým tlačítkem na křiovatku**",
                 "split_intersection": "**Tlačítkem {button} rozdělte {street}.**",
                 "retry_split": "Nevybrali jste tlačítko Rozdělit. Zkuste to znovu.",
-                "did_split_multi": "Supr. {street1} je nyní na dvÄ\9b Ä\8dásti, tu horní smažeme.\n**KliknÄ\9bte na horní Ä\8díst ulice {street2}**",
+                "did_split_multi": "Supr. {street1} je nyní na dvÄ\9b Ä\8dásti, tu horní smažeme.\n**KliknÄ\9bte na horní Ä\8dást ulice {street2}**",
                 "did_split_single": "**Klikněte na horní část ulice {street2}**",
                 "multi_select": "Nyní jsme vybrali {selected}. Přidáme do výběru ještě {other1}.\n**SHIFT+klikněte na {other2}**",
                 "multi_rightclick": "Teď už je bude stačit jen smazat.\n**Pravým tlačítkem otevřete kontextové menu**",
                 "did_split_single": "**Klikněte na horní část ulice {street2}**",
                 "multi_select": "Nyní jsme vybrali {selected}. Přidáme do výběru ještě {other1}.\n**SHIFT+klikněte na {other2}**",
                 "multi_rightclick": "Teď už je bude stačit jen smazat.\n**Pravým tlačítkem otevřete kontextové menu**",
                 "title": "Budovy",
                 "add_building": "OSM je mimojiné také největší databází budov.{br}\nPokud někde budova chybí, můžete přidat její obrys.\n**Přidejte novou plochu tlačítkem {button} Plocha**",
                 "start_building": "Pojďme přidat třeba tenhle barák.{br}\nZkuste budovu oklikat co nejpřesněji.\n**Začněte kreslit kliknutím do rohu**",
                 "title": "Budovy",
                 "add_building": "OSM je mimojiné také největší databází budov.{br}\nPokud někde budova chybí, můžete přidat její obrys.\n**Přidejte novou plochu tlačítkem {button} Plocha**",
                 "start_building": "Pojďme přidat třeba tenhle barák.{br}\nZkuste budovu oklikat co nejpřesněji.\n**Začněte kreslit kliknutím do rohu**",
-                "continue_building": "Přidejte postupně další body do rohů, můžete i přizoomvat.{br}\nZadávání ukončíte kliknutím na první či poslední bod.\n**Dokončete obrys budovy**",
+                "continue_building": "Přidejte postupně další body do rohů, můžete i přizoomovat.{br}\nZadávání ukončíte kliknutím na první či poslední bod.\n**Dokončete obrys budovy**",
                 "retry_building": "Nějak se vám to asi nezdařilo. Zkuste to prosím znovu.",
                 "choose_category_building": "**Vyberte ktegorii {category}**",
                 "choose_preset_house": "Existuje opět spousta typů budov, ale tohle je určitě obytný dům.{br}Když si nejste jisti zvolte prostě jen \"Budova\"\n**Vyberte {preset}**",
                 "retry_building": "Nějak se vám to asi nezdařilo. Zkuste to prosím znovu.",
                 "choose_category_building": "**Vyberte ktegorii {category}**",
                 "choose_preset_house": "Existuje opět spousta typů budov, ale tohle je určitě obytný dům.{br}Když si nejste jisti zvolte prostě jen \"Budova\"\n**Vyberte {preset}**",
                 "start": "Začít mapovat!"
             }
         },
                 "start": "Začít mapovat!"
             }
         },
+        "shortcuts": {
+            "title": "Klávesové zkratky",
+            "key": {
+                "alt": "Alt",
+                "backspace": "Backspace",
+                "cmd": "Cmd",
+                "ctrl": "Ctrl",
+                "delete": "Delete",
+                "del": "Del",
+                "end": "End",
+                "enter": "Enter",
+                "esc": "Esc",
+                "home": "Home",
+                "option": "Option",
+                "pause": "Pause",
+                "pgdn": "PageUp",
+                "pgup": "PageDown",
+                "return": "Return",
+                "shift": "Shift",
+                "space": "Mezerník"
+            },
+            "gesture": {
+                "drag": "táhnout"
+            },
+            "or": "-nebo-",
+            "browsing": {
+                "title": "Procházení",
+                "help": {
+                    "title": "Nápověda"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                 "maxstay": {
                     "label": "Povoleno zůstat max."
                 },
                 "maxstay": {
                     "label": "Povoleno zůstat max."
                 },
+                "maxweight": {
+                    "label": "Max. hmotnost"
+                },
                 "mtb/scale": {
                     "label": "Klasifikace obtížnosti pro MTB",
                     "options": {
                 "mtb/scale": {
                     "label": "Klasifikace obtížnosti pro MTB",
                     "options": {
                     "name": "Elektrikář",
                     "terms": "elektrikář,elektrikářství"
                 },
                     "name": "Elektrikář",
                     "terms": "elektrikář,elektrikářství"
                 },
+                "craft/electronics_repair": {
+                    "name": "Opravna elektroniky",
+                    "terms": "Opravy elektroniky,Opravna elektroniky"
+                },
                 "craft/gardener": {
                     "name": "Zahradník",
                     "terms": "zahradník,zahradnictví,zahradní architekt"
                 "craft/gardener": {
                     "name": "Zahradník",
                     "terms": "zahradník,zahradnictví,zahradní architekt"
                     "terms": "vchod,východ,vjezd,výjezd,vlez,výlez,vstup"
                 },
                 "footway/crossing": {
                     "terms": "vchod,východ,vjezd,výjezd,vlez,výlez,vstup"
                 },
                 "footway/crossing": {
-                    "name": "Cesta přechodu pro chodce",
+                    "name": "Přechod pro chodce",
                     "terms": "přechod pro chodce,zebra,přechod,přechod pro pěší"
                 },
                 "footway/crosswalk": {
                     "terms": "přechod pro chodce,zebra,přechod,přechod pro pěší"
                 },
                 "footway/crosswalk": {
-                    "name": "Cesta přechodu typu zebra",
+                    "name": "Přechod pro chodce typu zebra",
                     "terms": "přechod pro chodce,zebra,přechod,přechod pro pěší"
                 },
                 "footway/sidewalk": {
                     "terms": "přechod pro chodce,zebra,přechod,přechod pro pěší"
                 },
                 "footway/sidewalk": {
                     "name": "Cyklostezka",
                     "terms": "cyklotrasa"
                 },
                     "name": "Cyklostezka",
                     "terms": "cyklotrasa"
                 },
+                "highway/elevator": {
+                    "name": "Výtah",
+                    "terms": "Výtah"
+                },
                 "highway/footway": {
                     "name": "Chodník",
                     "terms": "cesta,silnice,ulice,ulička,chodník,třída,bulvár,avenue,pasáž,stezka,trasa,trať,magistrála,radiála,pěšina"
                 "highway/footway": {
                     "name": "Chodník",
                     "terms": "cesta,silnice,ulice,ulička,chodník,třída,bulvár,avenue,pasáž,stezka,trasa,trať,magistrála,radiála,pěšina"
                     "terms": "akvapark,aquapark,vodní zábavní park,bazén,koupaliště,tobogán"
                 },
                 "line": {
                     "terms": "akvapark,aquapark,vodní zábavní park,bazén,koupaliště,tobogán"
                 },
                 "line": {
-                    "name": "Cesta",
+                    "name": "Linie",
                     "terms": "čára,cesta,trať,kanál,trasa"
                 },
                 "man_made": {
                     "terms": "čára,cesta,trať,kanál,trasa"
                 },
                 "man_made": {
                     "name": "Starožitnictví",
                     "terms": "starožitnost,starožitnosti,starožitnictví,antikvář,antikvity,antikvita,antikvariát"
                 },
                     "name": "Starožitnictví",
                     "terms": "starožitnost,starožitnosti,starožitnictví,antikvář,antikvity,antikvita,antikvariát"
                 },
+                "shop/appliance": {
+                    "name": "Prodejna spotřební elektroniky",
+                    "terms": "Prodejna bílého zboží,Prodej spotřební elektroniky"
+                },
                 "shop/art": {
                     "name": "Obchod s uměním",
                     "terms": "obchod s uměním,umění,galerie,umělecká galerie,prodejní galerie"
                 "shop/art": {
                     "name": "Obchod s uměním",
                     "terms": "obchod s uměním,umění,galerie,umělecká galerie,prodejní galerie"
index 7b8d4fb66fb84bceee96417163d0531f0bd34a56..8994bab424ac1a8f4fbc18ab1ad6608085a724f2 100644 (file)
         "inspector": {
             "no_documentation_combination": "Der er ingen tilgængelig dokumentation for denne kombination af tags",
             "no_documentation_key": "Der er ingen tilgængelig dokumentation for denne nøgle",
         "inspector": {
             "no_documentation_combination": "Der er ingen tilgængelig dokumentation for denne kombination af tags",
             "no_documentation_key": "Der er ingen tilgængelig dokumentation for denne nøgle",
-            "documentation_redirect": "Denne dokumentation er blevet redigereret til en ny side",
+            "documentation_redirect": "Denne dokumentation er blevet redirigeret til en ny side",
             "show_more": "Vis mere",
             "view_on_osm": "Se på openstreetmap.org",
             "all_fields": "Alle felter",
             "show_more": "Vis mere",
             "view_on_osm": "Se på openstreetmap.org",
             "all_fields": "Alle felter",
         "help": {
             "title": "Hjælp",
             "help": "# Hjælp\n\nDette er et redigeringsværktøj til [OpenStreetMap](http://www.openstreetmap.org/), det åbne og redigerbare verdenskort. Du kan bruge dette værktøj til at opdatere geodata i dit lokalområde. Derved skaber du et bedre verdenskort med open source og frie geodata til gavn for alle.\n\nDine ændringer på kortet vil blive synligt for alle og enhver der benytter OpenStreetMap. For at lave redigeringer skal du være [logget ind](https://www.openstreetmap.org/login).\n\nDette værktøj, kaldet [iD-editoren](http://ideditor.com/), er et kollaborativt projekt og dets [kildekode er tilgængelig på GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Hjælp",
             "help": "# Hjælp\n\nDette er et redigeringsværktøj til [OpenStreetMap](http://www.openstreetmap.org/), det åbne og redigerbare verdenskort. Du kan bruge dette værktøj til at opdatere geodata i dit lokalområde. Derved skaber du et bedre verdenskort med open source og frie geodata til gavn for alle.\n\nDine ændringer på kortet vil blive synligt for alle og enhver der benytter OpenStreetMap. For at lave redigeringer skal du være [logget ind](https://www.openstreetmap.org/login).\n\nDette værktøj, kaldet [iD-editoren](http://ideditor.com/), er et kollaborativt projekt og dets [kildekode er tilgængelig på GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Redigering og gemning\n\nDette redigeringsværktøj er primært beregnet til online brug, ligesom\ndu bruger det lige nu gennem en webside.\n\n### Markering af objekter\n\nFor at markere et kortobjekt f.eks. en vej eller et interessepunkt, klik\npå dette på kortet. Dette vil tydeligt markere objektet, vil åbne et panel\nmed flere oplysninger om dette, og en menu angiver hvad du kan gøre med dette objekt.\n\nFor at markere flere objekter på en gang, kan 'Skift\"-knappen holdes nede. Dernæst klik\npå objekterne du vil markere, eller træk en firkant på kortet, hvilket markerer alle objekter indenfor denne.\n\n### Gem redigeringer\n\nNår du laver ændringer f.eks. redigering af veje, bygninger og steder, så er\ndisse gemt lokalt indtil du gemmer dem på serveren. Vær ikke bange for\nat lave en fejl - Du kan fortryde ved at klikke på fortryd-knappen, og\nfå ændringer tilbage med gendan-knappen.\n\nKlik på 'Gem' for at afslutte en serie af redigeringer - f.eks. hvis du har afsluttet\net område af en by og vil starte på et nyt område. Du vil få lejlighed\ntil at gennemse hvad du har lavet, og redigeringsværktøjet vil give forslag\nog advarsler hvis noget ikke ser korrekt ud.\n\nHvis alting ser fint ud, kan du tilføje en lille kommentar der forklarer\nændringerne du har lavet, og dernæst klikker du 'Gem' igen for at afsende ændringerne\ntil [OpenStreetMap.org](http://www.openstreetmap.org/), hvor de vil blive synlige\nfor alle andre brugere og tilgængelige for andre at bygge videre på.\n\nHvis du ikke kan nå at afslutte dine redigeringer, så kan du forlade redigeringsværktøjet\nog komme tilbage (på samme browser og computer) og redigeringsværktøjet\nvil tilbyde at gendanne dit arbejde.\n\n### Brug af redigeringsværktøjet\n\nEn liste af tilgængelige genvejstaster kan findes [her](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n",
             "roads": "# Veje\n\nDu kan oprette, tilrette og slette veje med dette tegneværktøj. Veje kan være af mange forskellige typer: stier, landeveje, spor, cykelstier m.v. Enhver ofte benyttet rute kan kortlægges.\n\n### Markering\n\nKlik på en vej for at markere den. Et omrids dukker op sammen med en lille værktøjsmenu og et sidepanel der viser flere oplysninger om vejen.\n\n### Ændring\n\nOfte ses veje der ikke er justeret i forhold til luftfotoet bag dem eller i forhold til et GPS-spor. Du kan justere disse veje så de er placeret rigtigt.\n\nKlik først på vejen du vil ændre. Dette fremhæver den og viser kontrolpunkter langs med den som kan trækkes det rigtige sted hen. Hvis du har brug for flere kontrolpunkter for at gøre vejen mere detaljeret, kan du dobbeltklikke på en del af vejen, så tilføjes et nyt punkt her.\n\nHvis vejen er forbundet til andre veje, men ikke er korrekt forbundet på kortet, så træk et af kontrolpunkterne hen på den anden vej for at koble dem sammen. Det er vigtigt for kortet, faktisk vitalt for rutevejledninger, at veje er forbundet.\n\nDu kan også klikke på flytteværktøjet eller trykke på tastegenvejen \"M\" for at flytte hele vejen på en gang, og så klikke igen for at gemme flytningen.\n\n### Sletning\n\nHvis en vej er helt forkert - du kan ikke se den på et luftfoto og du har ideelt set fået bekræftet at vejen ikke findes lokalt - så kan du slette vejen. Men pas på med at slette hvad andre har lavet - som med andre ændringer er resultatet synligt for alle, og luftfoto kan være forældede så vejen kunne være bygget i mellemtiden.\n\nDu kan slette en bygning ved at vælge den og klikke på skraldespands-ikonet - alternativt kan du bruge slet-tasten på dit tastatur.\n\n### Oprettelse\n\nHar du fundet et sted hvor der skulle være en vej, men den er ikke på kortet? Klik på Linje-ikonet i øverste venstre del af tegneværktøjet eller klik på tastegenvejen \"2\" for at tegne en linje.\n\nKlik på begyndelsen af vejen for at påbegynde den. Hvis vejen forgrener sig fra en eksisterende vej, så begynd vejen der hvor de er forbundet.\n\nKlik derefter på punkter på vejens forløb så det passer med luftfoto eller GPS-spor. Hvis vejen du tegner krydser en anden vej, så kobl dem sammen ved at klikke på punktet hvor de skærer hinanden. Når du er færdig med at tegne, så dobbeltklik eller tryk på enter-tasten på tastaturet.\n",
             "gps": "# GPS\n\nIndsamlede GPS-spor er en værdifuld kilde til data for OpenStreetMap. Denne editor understøtter lokale spor – '.gpx'-filer på din lokale computer. Du kan indsamle denne form for GPS-spor med en række smartphone-applikationer såvel som personlige GPS-enheder.\n\nLæs artiklen [Mapping with a Smartphone, GPS or Paper](http://learnosm.org/en/mobile-mapping/) (på engelsk) for nærmere information om, hvordan du optager et GPS-spor.\n\nFor at bruge et GPX-spor til kortlægning, skal du trække og slippe  GPX-filen over på kort-editoren. Hvis sporet bliver accepteret, vil det blive tilføjet kortet som en lys lilla linje. Klik på \"Kortdata\"-menuen til højre for at aktivere, deaktivere eller zoome til dette nye GPX-drevne lag.\n\nGPX-sporet bliver ikke direkte uploadet til OpenStreetMap, men vises kun i den nuværende redigeringssession i iD. Den bedste måde at bruge sporet på, er at tegne på kortet mens du bruger sporet som en rettesnor til de nye objekter,\ndu tilføjer. {Upload det også gerne til OpenStreetMap](http://www.openstreetmap.org/trace/create), så andre brugere kan bruge det.\n",
             "imagery": "# Billeder\n\nLuftfotos er en vigtig ressource til kortlægning. En kombination af luftfotos taget fra fly, satellitbilleder og andre frit tilgængelige kilder er tilgængelige i redigeringsværktøjet i indstillingsmenuen 'Baggrund' i højre side.\n\n[Bing Maps](http://www.bing.com/maps/) satellitbilledelaget er standardopsætning i redigeringsværktøjet. Når du zoomer og kommer til nye geografiske områder, så vil andre kilder være tilgængelige. I nogle lande som f.eks. USA, Frankrig og Danmark vil der ofte være luftfotos i høj kvalitet i nogle egne.\n\nBillederne er af og til forskudt i forhold til de geografiske data, dette skyldes en fejl fra billedleverandørens side. Hvis du ser at en masse objekter er forskudt i forhold til billederne, så skal du ikke begynde at flytte disse objekter for at matche billedlaget. Du kan i stedet for i indstillingerne for 'Baggrund', nederst finde \"Juster billedets offset\" hvor billedets generelle placering i forhold til de geografisk objekter kan tilpasses.\n",
             "roads": "# Veje\n\nDu kan oprette, tilrette og slette veje med dette tegneværktøj. Veje kan være af mange forskellige typer: stier, landeveje, spor, cykelstier m.v. Enhver ofte benyttet rute kan kortlægges.\n\n### Markering\n\nKlik på en vej for at markere den. Et omrids dukker op sammen med en lille værktøjsmenu og et sidepanel der viser flere oplysninger om vejen.\n\n### Ændring\n\nOfte ses veje der ikke er justeret i forhold til luftfotoet bag dem eller i forhold til et GPS-spor. Du kan justere disse veje så de er placeret rigtigt.\n\nKlik først på vejen du vil ændre. Dette fremhæver den og viser kontrolpunkter langs med den som kan trækkes det rigtige sted hen. Hvis du har brug for flere kontrolpunkter for at gøre vejen mere detaljeret, kan du dobbeltklikke på en del af vejen, så tilføjes et nyt punkt her.\n\nHvis vejen er forbundet til andre veje, men ikke er korrekt forbundet på kortet, så træk et af kontrolpunkterne hen på den anden vej for at koble dem sammen. Det er vigtigt for kortet, faktisk vitalt for rutevejledninger, at veje er forbundet.\n\nDu kan også klikke på flytteværktøjet eller trykke på tastegenvejen \"M\" for at flytte hele vejen på en gang, og så klikke igen for at gemme flytningen.\n\n### Sletning\n\nHvis en vej er helt forkert - du kan ikke se den på et luftfoto og du har ideelt set fået bekræftet at vejen ikke findes lokalt - så kan du slette vejen. Men pas på med at slette hvad andre har lavet - som med andre ændringer er resultatet synligt for alle, og luftfoto kan være forældede så vejen kunne være bygget i mellemtiden.\n\nDu kan slette en bygning ved at vælge den og klikke på skraldespands-ikonet - alternativt kan du bruge slet-tasten på dit tastatur.\n\n### Oprettelse\n\nHar du fundet et sted hvor der skulle være en vej, men den er ikke på kortet? Klik på Linje-ikonet i øverste venstre del af tegneværktøjet eller klik på tastegenvejen \"2\" for at tegne en linje.\n\nKlik på begyndelsen af vejen for at påbegynde den. Hvis vejen forgrener sig fra en eksisterende vej, så begynd vejen der hvor de er forbundet.\n\nKlik derefter på punkter på vejens forløb så det passer med luftfoto eller GPS-spor. Hvis vejen du tegner krydser en anden vej, så kobl dem sammen ved at klikke på punktet hvor de skærer hinanden. Når du er færdig med at tegne, så dobbeltklik eller tryk på enter-tasten på tastaturet.\n",
             "gps": "# GPS\n\nIndsamlede GPS-spor er en værdifuld kilde til data for OpenStreetMap. Denne editor understøtter lokale spor – '.gpx'-filer på din lokale computer. Du kan indsamle denne form for GPS-spor med en række smartphone-applikationer såvel som personlige GPS-enheder.\n\nLæs artiklen [Mapping with a Smartphone, GPS or Paper](http://learnosm.org/en/mobile-mapping/) (på engelsk) for nærmere information om, hvordan du optager et GPS-spor.\n\nFor at bruge et GPX-spor til kortlægning, skal du trække og slippe  GPX-filen over på kort-editoren. Hvis sporet bliver accepteret, vil det blive tilføjet kortet som en lys lilla linje. Klik på \"Kortdata\"-menuen til højre for at aktivere, deaktivere eller zoome til dette nye GPX-drevne lag.\n\nGPX-sporet bliver ikke direkte uploadet til OpenStreetMap, men vises kun i den nuværende redigeringssession i iD. Den bedste måde at bruge sporet på, er at tegne på kortet mens du bruger sporet som en rettesnor til de nye objekter,\ndu tilføjer. {Upload det også gerne til OpenStreetMap](http://www.openstreetmap.org/trace/create), så andre brugere kan bruge det.\n",
             "imagery": "# Billeder\n\nLuftfotos er en vigtig ressource til kortlægning. En kombination af luftfotos taget fra fly, satellitbilleder og andre frit tilgængelige kilder er tilgængelige i redigeringsværktøjet i indstillingsmenuen 'Baggrund' i højre side.\n\n[Bing Maps](http://www.bing.com/maps/) satellitbilledelaget er standardopsætning i redigeringsværktøjet. Når du zoomer og kommer til nye geografiske områder, så vil andre kilder være tilgængelige. I nogle lande som f.eks. USA, Frankrig og Danmark vil der ofte være luftfotos i høj kvalitet i nogle egne.\n\nBillederne er af og til forskudt i forhold til de geografiske data, dette skyldes en fejl fra billedleverandørens side. Hvis du ser at en masse objekter er forskudt i forhold til billederne, så skal du ikke begynde at flytte disse objekter for at matche billedlaget. Du kan i stedet for i indstillingerne for 'Baggrund', nederst finde \"Juster billedets offset\" hvor billedets generelle placering i forhold til de geografisk objekter kan tilpasses.\n",
                 "editor_townhall": "Når et objekt er markeret, dukker *objekteditoren* op ved siden af kortet.",
                 "preset_townhall": "Den øverste del af objekteditoren viser objektets type. Dette punkt er et {preset}.",
                 "fields_townhall": "Den midterste del af objekteditoren indeholder *felter* der viser objektets egenskaber, såsom det tilknyttede navn og adresse.",
                 "editor_townhall": "Når et objekt er markeret, dukker *objekteditoren* op ved siden af kortet.",
                 "preset_townhall": "Den øverste del af objekteditoren viser objektets type. Dette punkt er et {preset}.",
                 "fields_townhall": "Den midterste del af objekteditoren indeholder *felter* der viser objektets egenskaber, såsom det tilknyttede navn og adresse.",
-                "close_townhall": "**Luk objekteditoren ved at taste escape eller trykke på {button}-knappen i det øverste hjørne.**",
+                "close_townhall": "**Luk objekteditoren ved at taste escape eller klikke på {button}-knappen i det øverste hjørne.**",
                 "search_street": "Du kan også søge efter objekter i den nuværende visning, eller på hele kortet. **Søg efter '{name}'.**",
                 "choose_street": "**Vælg {name} fra listen for at markere den.**",
                 "selected_street": "Godt! {name} er nu markeret.",
                 "search_street": "Du kan også søge efter objekter i den nuværende visning, eller på hele kortet. **Søg efter '{name}'.**",
                 "choose_street": "**Vælg {name} fra listen for at markere den.**",
                 "selected_street": "Godt! {name} er nu markeret.",
             "points": {
                 "title": "Punkter",
                 "add_point": "*Punkter* kan bruges til at repræsentere objekter såsom forretninger, restauranter og monumenter.{br}De markerer en bestemt lokation, og beskriver hvad der findes der. **Klik på {button} Punkt-knappen for at tilføje et nyt punkt.**",
             "points": {
                 "title": "Punkter",
                 "add_point": "*Punkter* kan bruges til at repræsentere objekter såsom forretninger, restauranter og monumenter.{br}De markerer en bestemt lokation, og beskriver hvad der findes der. **Klik på {button} Punkt-knappen for at tilføje et nyt punkt.**",
-                "place_point": "For at placere det nye punkt på kortet, skal du placere muse-pilen der hvor punktet skal være, og så venstreklikke eller trykke på mellemrums-tasten. **Flyt muse-pilen hen over denne bygning, derefter vesntre-klik eller tryk mellemrum.**",
+                "place_point": "For at placere det nye punkt på kortet, skal du placere muse-pilen der hvor punktet skal være, og så venstreklikke eller taste mellemrum. **Flyt muse-pilen hen over denne bygning, derefter vesntre-klik eller tast mellemrum.**",
                 "search_cafe": "Der er mange forskellige objekter der kan repræsenteres med punkter. Punktet du lige har tilføjet er en café. **Søg efter '{preset}'.**",
                 "choose_cafe": "**Vælg {preset} fra listen.**",
                 "feature_editor": "Punktet er nu markeret som en cafe. Brug objekteditoren, så vi kan tilføje mere information om cafeen.",
                 "add_name": "I OpenStreetMap er alle felter valgfri, og det er helt ok at efterlade et felt tomt hvis du er usikker.{br}Vi lader som om du er lokalkendt og kender caféens navn. **Tilføj et navn til caféen.**",
                 "search_cafe": "Der er mange forskellige objekter der kan repræsenteres med punkter. Punktet du lige har tilføjet er en café. **Søg efter '{preset}'.**",
                 "choose_cafe": "**Vælg {preset} fra listen.**",
                 "feature_editor": "Punktet er nu markeret som en cafe. Brug objekteditoren, så vi kan tilføje mere information om cafeen.",
                 "add_name": "I OpenStreetMap er alle felter valgfri, og det er helt ok at efterlade et felt tomt hvis du er usikker.{br}Vi lader som om du er lokalkendt og kender caféens navn. **Tilføj et navn til caféen.**",
-                "add_close": "Objekteditoren vil huske alle ændringer af sig selv. **Når du er færdig med at tilføje navnet, tryk escape, retur eller klik på {button}-knappen for at lukke objekteditoren.**",
+                "add_close": "Objekteditoren vil huske alle ændringer af sig selv. **Når du er færdig med at tilføje navnet, tast escape, retur eller klik på {button}-knappen for at lukke objekteditoren.**",
                 "reselect": "Ofte vil punkter allerede eksistere, men indeholde fejl eller ikke være komplette. Vi kan også redigere eksisterende punkter. **Klik for at markere den café du lige har tilføjet.**",
                 "update": "Lad os udfylde nogle flere detaljer om caféen. Du kan ændre dens navn, tilføje hvilken type køkken den tilbyder eller tilføje en adresse. **Ændr på nogle af caféens detaljer.**",
                 "reselect": "Ofte vil punkter allerede eksistere, men indeholde fejl eller ikke være komplette. Vi kan også redigere eksisterende punkter. **Klik for at markere den café du lige har tilføjet.**",
                 "update": "Lad os udfylde nogle flere detaljer om caféen. Du kan ændre dens navn, tilføje hvilken type køkken den tilbyder eller tilføje en adresse. **Ændr på nogle af caféens detaljer.**",
-                "update_close": "**Når du er færdig med at opdatere caféen, tast escape, retur, eller klik på  {button}-knappen for at lukke objekteditoren.",
+                "update_close": "**Når du er færdig med at opdatere caféen, tast escape, retur, eller klik på {button}-knappen for at lukke objekteditoren.**",
                 "rightclick": "Du kan højreklikke på ethvert objekt for at åbne en *redigeringsmenu* som viser en liste af handlinger der kan udføres. **Højreklik for at markere punktet du tilføjede og vise redigeringsmenuen.**",
                 "delete": "Det er helt fint at slette objekter som ikke eksisterer i den virkelige verden. {br}At slette et objekt fra OpenStreetMap fjerner det fra kortet som alle andre bruger, så du skal være sikker på at et objekt virkelig ikke eksisterer længere før du sletter det. **Klik på {button}-knappen for at slette punktet.**",
                 "undo": "Du kan fortryde enhver ændring indtil du har gemt til OpenStreetMap. **Klik på {button}-knappen for at fortryde sletningen, og få punktet tilbage igen.**",
                 "rightclick": "Du kan højreklikke på ethvert objekt for at åbne en *redigeringsmenu* som viser en liste af handlinger der kan udføres. **Højreklik for at markere punktet du tilføjede og vise redigeringsmenuen.**",
                 "delete": "Det er helt fint at slette objekter som ikke eksisterer i den virkelige verden. {br}At slette et objekt fra OpenStreetMap fjerner det fra kortet som alle andre bruger, så du skal være sikker på at et objekt virkelig ikke eksisterer længere før du sletter det. **Klik på {button}-knappen for at slette punktet.**",
                 "undo": "Du kan fortryde enhver ændring indtil du har gemt til OpenStreetMap. **Klik på {button}-knappen for at fortryde sletningen, og få punktet tilbage igen.**",
             "areas": {
                 "title": "Områder",
                 "add_playground": "*Områder* bruges til at vise omridset af objekter som søer, bygninger og boligområder. {br}De kan også bruges til mere detaljeret kortlægning af mange af de objekter som man ellers normalt ville bruge punkter til. **Tilføj et ny område ved at klikke på {button} Område-knappen.**",
             "areas": {
                 "title": "Områder",
                 "add_playground": "*Områder* bruges til at vise omridset af objekter som søer, bygninger og boligområder. {br}De kan også bruges til mere detaljeret kortlægning af mange af de objekter som man ellers normalt ville bruge punkter til. **Tilføj et ny område ved at klikke på {button} Område-knappen.**",
-                "start_playground": "Lad os tilføje denne legeplads til kortet ved at optegne et område. Områder tegnes ved at placere *noder* langs objektets ydre kant. **Klik eller tryk mellemrum for at placere den første node i et at legepladsens hjørner.**",
+                "start_playground": "Lad os tilføje denne legeplads til kortet ved at optegne et område. Områder tegnes ved at placere *noder* langs objektets ydre kant. **Klik eller tast mellemrum for at placere den første node i et at legepladsens hjørner.**",
                 "continue_playground": "Fortsæt med at optegne området ved at placere flere noder langs legepladsens kant. Det er fint at forbinde området til de eksisterende stier.{br}Tip: Hvis du holder Alt-knappen ned forbindes noden ikke til andre objekter. **Fortsæt med at optegne legepladsens område.**",
                 "continue_playground": "Fortsæt med at optegne området ved at placere flere noder langs legepladsens kant. Det er fint at forbinde området til de eksisterende stier.{br}Tip: Hvis du holder Alt-knappen ned forbindes noden ikke til andre objekter. **Fortsæt med at optegne legepladsens område.**",
-                "finish_playground": "Afslut området ved at trykke retur, eller klikke igen på enten den første eller den sidste node. **Afslut tegningen af legepladsens område.**",
+                "finish_playground": "Afslut området ved at taste retur, eller klikke igen på enten den første eller den sidste node. **Afslut optegningen af legepladsens område.**",
                 "search_playground": "**Søg efter '{preset}'.**",
                 "choose_playground": "**Vælg {preset} fra listen.**",
                 "add_field": "Denne legeplads har ikke et officielt navn, så vi skriver ikke noget i feltet Navn.{br}Lad os i stedet tilføje nogle flere detaljer om legepladsen i Beskrivelses-feltet. **Åbn Tilføj felt-listen.**",
                 "choose_field": "**Vælg  {field} fra listen.**",
                 "retry_add_field": "Du valgte ikke {field}-feltet. Prøv lige igen.",
                 "describe_playground": "**Tilføj en beskrivelse, klik så på {button}-knappen for at lukke objekteditoren.**",
                 "search_playground": "**Søg efter '{preset}'.**",
                 "choose_playground": "**Vælg {preset} fra listen.**",
                 "add_field": "Denne legeplads har ikke et officielt navn, så vi skriver ikke noget i feltet Navn.{br}Lad os i stedet tilføje nogle flere detaljer om legepladsen i Beskrivelses-feltet. **Åbn Tilføj felt-listen.**",
                 "choose_field": "**Vælg  {field} fra listen.**",
                 "retry_add_field": "Du valgte ikke {field}-feltet. Prøv lige igen.",
                 "describe_playground": "**Tilføj en beskrivelse, klik så på {button}-knappen for at lukke objekteditoren.**",
-                "play": "Godt gjort! Prøv at tegne et par områder mere, og se hvilke andre slags du kan tilføje til OpenStreetMap. **Når du er klar til at fortsætte til næste del, så tryk '{next}'.**"
+                "play": "Godt gjort! Prøv at tegne et par områder mere, og se hvilke andre slags du kan tilføje til OpenStreetMap. **Når du er klar til at fortsætte til næste del, så klik '{next}'.**"
             },
             "lines": {
                 "title": "Linjer",
                 "add_line": "*Linjer* bruges til at repræsentere objekter såsom veje, jernbaner og åer. **Klik på {button} Linje-knappen for at tilføje en linje.**",
                 "start_line": "Her mangler der en vej. Lad os tilføje den!{br}I OpenStreetMap bør linjer tegnes i midten af den synlige vej. Hvis det er nødvendigt, kan du flytte og zoome kortet imens du tegner. **Start en ny linje ved at klikke på den øverste del af den manglende vej.**",
             },
             "lines": {
                 "title": "Linjer",
                 "add_line": "*Linjer* bruges til at repræsentere objekter såsom veje, jernbaner og åer. **Klik på {button} Linje-knappen for at tilføje en linje.**",
                 "start_line": "Her mangler der en vej. Lad os tilføje den!{br}I OpenStreetMap bør linjer tegnes i midten af den synlige vej. Hvis det er nødvendigt, kan du flytte og zoome kortet imens du tegner. **Start en ny linje ved at klikke på den øverste del af den manglende vej.**",
-                "intersect": "Klik eller tryk mellemrum for at tilføje flere noder til linjen. {br}Veje, og mange andre linjetyper, er en del af større netværk. Det er vigtigt at disse linjer er forbundet rigtigt, for at programmer til navigering imellem dem kan  fungere. **Klik på {name} for at lave et vejkryds der forbinder de to linjer til hinanden.**",
+                "intersect": "Klik eller tast mellemrum for at tilføje flere noder til linjen. {br}Veje, og mange andre linjetyper, er en del af større netværk. Det er vigtigt at disse linjer er forbundet rigtigt, for at programmer til navigering imellem dem kan  fungere. **Klik på {name} for at lave et vejkryds der forbinder de to linjer til hinanden.**",
                 "retry_intersect": "Vejen skal forbindes med {name}. Prøv en gang til!",
                 "continue_line": "Fortsæt med at tegne linjen til den nye vej. Husk at du kan flytte og zoome kortet hvis det er nødvendigt. {br}Når du er færdig med at tegne, så klik på den sidste node igen. **Afslut tegningen af vejen.**",
                 "choose_category_road": "**Vælg {category} fra listen.**",
                 "choose_preset_residential": "Der findes mange forskellige vejtyper, men denne er en villavej. **Vælg {preset}-typen.**",
                 "retry_preset_residential": "Du valgte ikke {preset}-typen. **Klik her for at vælge igen.**",
                 "retry_intersect": "Vejen skal forbindes med {name}. Prøv en gang til!",
                 "continue_line": "Fortsæt med at tegne linjen til den nye vej. Husk at du kan flytte og zoome kortet hvis det er nødvendigt. {br}Når du er færdig med at tegne, så klik på den sidste node igen. **Afslut tegningen af vejen.**",
                 "choose_category_road": "**Vælg {category} fra listen.**",
                 "choose_preset_residential": "Der findes mange forskellige vejtyper, men denne er en villavej. **Vælg {preset}-typen.**",
                 "retry_preset_residential": "Du valgte ikke {preset}-typen. **Klik her for at vælge igen.**",
-                "name_road": "**Giv vejen et navn, tast så escape, retur eller klik på  {button}-knappen for at lukke objekteditoren.**",
+                "name_road": "**Giv vejen et navn, tast så escape, retur eller klik på {button}-knappen for at lukke objekteditoren.**",
                 "did_name_road": "Det ser godt ud! Nu skal vi lære hvordan man ændrer på en linjes forløb.",
                 "update_line": "Nogle gange har man brug for at ændre forløbet af en eksisterende linje. Her er en vej der ikke længere ser helt rigtig ud.",
                 "add_node": "Vi kan tilføje noder til linjen for at forbedre forløbet. Én måde at tilføje en node på, er at dobbeltklikke på linjen der hvor du vil tilføje noden. **Dobbeltklik på linjen for at tilføje en node.**",
                 "did_name_road": "Det ser godt ud! Nu skal vi lære hvordan man ændrer på en linjes forløb.",
                 "update_line": "Nogle gange har man brug for at ændre forløbet af en eksisterende linje. Her er en vej der ikke længere ser helt rigtig ud.",
                 "add_node": "Vi kan tilføje noder til linjen for at forbedre forløbet. Én måde at tilføje en node på, er at dobbeltklikke på linjen der hvor du vil tilføje noden. **Dobbeltklik på linjen for at tilføje en node.**",
                 "rightclick_intersection": "Den sidste vej der findes er {street1}, så vi vil *opdele* {street2} ved dette kryds og slette alting der er over det. **Højreklik på noden i  krydset.**",
                 "split_intersection": "**Klik på {button}-knappen for at opdele {street}.**",
                 "retry_split": "Du klikkede ikke på Opdel-knappen. Prøv igen.",
                 "rightclick_intersection": "Den sidste vej der findes er {street1}, så vi vil *opdele* {street2} ved dette kryds og slette alting der er over det. **Højreklik på noden i  krydset.**",
                 "split_intersection": "**Klik på {button}-knappen for at opdele {street}.**",
                 "retry_split": "Du klikkede ikke på Opdel-knappen. Prøv igen.",
-                "did_split_multi": "Godt gjort!  {street1} er nu opdelt i to stykker. Den øverste del kan slettes. **Klik på den øverste del af {street2} for at markere den.**",
+                "did_split_multi": "Godt klaret! {street1} er nu opdelt i to stykker. Den øverste del kan fjernes. **Klik på den øverste del af {street2} for at vælge den.",
                 "did_split_single": "**Klik på den øverste del af {street2} for at markere den.**",
                 "multi_select": "{selected} er nu markeret. Nu skal vi også markere {other1}. Du kan holde skift-tasten nede for at markere flere ting. **Marker også {other2}.**",
                 "multi_rightclick": "Godt! Begge linjer der skal slettes er nu markeret. **Højreklik på en af linjerne for at vise redigeringsmenuen.**",
                 "multi_delete": "**Klik på {button}-knappen for at slette de overflødige linjer.**",
                 "did_split_single": "**Klik på den øverste del af {street2} for at markere den.**",
                 "multi_select": "{selected} er nu markeret. Nu skal vi også markere {other1}. Du kan holde skift-tasten nede for at markere flere ting. **Marker også {other2}.**",
                 "multi_rightclick": "Godt! Begge linjer der skal slettes er nu markeret. **Højreklik på en af linjerne for at vise redigeringsmenuen.**",
                 "multi_delete": "**Klik på {button}-knappen for at slette de overflødige linjer.**",
-                "retry_delete": "Du trykkede ikke på Slet knappen. Prøv igen.",
+                "retry_delete": "Du klikkede ikke på Slet knappen. Prøv igen.",
                 "play": "Dejligt! Brug nu de ting du har lært i denne del, til at øve redigering af nogle flere linjer. **Når du er klar til at fortsætte til næste del, klik '{next}'.**"
             },
             "buildings": {
                 "title": "Bygninger",
                 "add_building": "OpenStreetMap er verdens største database af bygninger.{br}Du kan hjælpe med at forbedre den, ved at optegne bygninger som ikke allerede er kortlagte. **Klik på {button} Område-knappen for at tilføje et nyt område.**",
                 "play": "Dejligt! Brug nu de ting du har lært i denne del, til at øve redigering af nogle flere linjer. **Når du er klar til at fortsætte til næste del, klik '{next}'.**"
             },
             "buildings": {
                 "title": "Bygninger",
                 "add_building": "OpenStreetMap er verdens største database af bygninger.{br}Du kan hjælpe med at forbedre den, ved at optegne bygninger som ikke allerede er kortlagte. **Klik på {button} Område-knappen for at tilføje et nyt område.**",
-                "start_building": "Lad os tilføje dette hus til kortet ved at indtegne dets omrids.{br}Bygninger bør indtegnes der hvor deres fundament står, så præcist som det nu  kan lade sig gøre. **Klik eller tryk mellemrum, for at placere den første node i et af bygnignens hjørner.**",
-                "continue_building": "Fortsæt med at tilføje flere noder for at optegne omridset. Husk at du kan zoome ind hvis du vil se flere detaljer.{br}Afslut bygningen ved at trykke retur, eller klikke igen på den første ller sidste node. **Afslut optegningen af bygningen.**",
+                "start_building": "Lad os tilføje dette hus til kortet ved at indtegne dets omrids.{br}Bygninger bør indtegnes der hvor deres fundament står, så præcist som det nu  kan lade sig gøre. **Klik eller tast mellemrum, for at placere den første node i et af bygnignens hjørner.**",
+                "continue_building": "Fortsæt med at tilføje flere noder for at optegne bygningens omrids. Husk at du kan zoome ind hvis du vil se flere detaljer.{br}Afslut bygningen ved at taste retur, eller klikke igen på den første eller sidste node. **Afslut optegningen af bygningen.**",
                 "retry_building": "Det ser ud som om du havde lidt problemer med at placere noder i bygningens hjørner. Prøv igen!",
                 "choose_category_building": "**Vælg {category} fra listen.**",
                 "choose_preset_house": "Der er mange forskellige typer af bygninger, men denne er klart et hus.{br}Hvis du er usikker, er det helt fint at vælge en mere generel bygningstype. **Vælg {preset}-typen.**",
                 "retry_building": "Det ser ud som om du havde lidt problemer med at placere noder i bygningens hjørner. Prøv igen!",
                 "choose_category_building": "**Vælg {category} fra listen.**",
                 "choose_preset_house": "Der er mange forskellige typer af bygninger, men denne er klart et hus.{br}Hvis du er usikker, er det helt fint at vælge en mere generel bygningstype. **Vælg {preset}-typen.**",
                 "done_square": "Så du hvordan bygningens hjørner flyttede sig på plads? Du skal lige lære en smart funktion mere.",
                 "add_tank": "Nu skal vi optegne en rund opbevaringstank. **Klik på {button} Område-knappen for at tilføje et nyt område.**",
                 "start_tank": "Men bare rolig, du behøver ikke tegne en perfekt cirkel. Tegn bare et område inde i tanken der rører kanterne. **Klik eller tast mellemrum for at placere den første node på tankens kant.**",
                 "done_square": "Så du hvordan bygningens hjørner flyttede sig på plads? Du skal lige lære en smart funktion mere.",
                 "add_tank": "Nu skal vi optegne en rund opbevaringstank. **Klik på {button} Område-knappen for at tilføje et nyt område.**",
                 "start_tank": "Men bare rolig, du behøver ikke tegne en perfekt cirkel. Tegn bare et område inde i tanken der rører kanterne. **Klik eller tast mellemrum for at placere den første node på tankens kant.**",
-                "continue_tank": "Tilføj et par noder mere langs kanten. Cirklen vil blive placeret lidt udenfor de noder du tegner.{br}Afslut området ved at trykke retur, eller klikke igen på den første eller sidste node. **Afslut optegnigen af tanken.**",
+                "continue_tank": "Tilføj et par noder mere langs kanten. Cirklen vil blive placeret lidt udenfor de noder du tegner.{br}Afslut området ved at taste retur, eller klikke igen på den første eller sidste node. **Afslut optegningen af tanken.**",
                 "search_tank": "**Søg efter '{preset}'.**",
                 "choose_tank": "**Vælg {preset} fra listen.**",
                 "rightclick_tank": "**Højre-klik for at markere tanken du har tilføjet og vise redigeringsmenuen.**",
                 "search_tank": "**Søg efter '{preset}'.**",
                 "choose_tank": "**Vælg {preset} fra listen.**",
                 "rightclick_tank": "**Højre-klik for at markere tanken du har tilføjet og vise redigeringsmenuen.**",
                         "county": "Region",
                         "county!jp": "Distrikt",
                         "district": "Bydel",
                         "county": "Region",
                         "county!jp": "Distrikt",
                         "district": "Bydel",
-                        "district!vn": "Arrondissement/By/Distrikt",
+                        "district!vn": "Arrondissement/by/distrikt",
                         "floor": "Etage",
                         "hamlet": "Lille landsby",
                         "housename": "Husnavn",
                         "floor": "Etage",
                         "hamlet": "Lille landsby",
                         "housename": "Husnavn",
                     "label": "Type"
                 },
                 "animal_boarding": {
                     "label": "Type"
                 },
                 "animal_boarding": {
-                    "label": "For dyr"
+                    "label": "Til dyr"
                 },
                 "animal_breeding": {
                 },
                 "animal_breeding": {
-                    "label": "For dyr"
+                    "label": "Til dyr"
                 },
                 "animal_shelter": {
                 },
                 "animal_shelter": {
-                    "label": "For dyr"
+                    "label": "Til dyr"
                 },
                 "area/highway": {
                     "label": "Type"
                 },
                 "area/highway": {
                     "label": "Type"
                     "options": {
                         "foot_bath": "Fodbad",
                         "hot_spring": "Varme bade",
                     "options": {
                         "foot_bath": "Fodbad",
                         "hot_spring": "Varme bade",
-                        "onsen": "Japansk varmebade"
+                        "onsen": "Japansk varmebad"
                     }
                 },
                 "beauty": {
                     }
                 },
                 "beauty": {
                     "label": "Type"
                 },
                 "camera/direction": {
                     "label": "Type"
                 },
                 "camera/direction": {
-                    "label": "Retning (grader urets retning)",
+                    "label": "Retning (grader urets retning)",
                     "placeholder": "45, 90, 180, 270"
                 },
                 "camera/mount": {
                     "placeholder": "45, 90, 180, 270"
                 },
                 "camera/mount": {
                 "camera/type": {
                     "label": "Kameratype",
                     "options": {
                 "camera/type": {
                     "label": "Kameratype",
                     "options": {
-                        "dome": "Kupel",
+                        "dome": "Kuppel",
                         "fixed": "Fast fikspunkt",
                         "panning": "Panorering"
                     }
                         "fixed": "Fast fikspunkt",
                         "panning": "Panorering"
                     }
                     "label": "Type"
                 },
                 "contact/webcam": {
                     "label": "Type"
                 },
                 "contact/webcam": {
-                    "label": "Webcam URL",
+                    "label": "Webcam-URL",
                     "placeholder": "http://example.com/"
                 },
                 "content": {
                     "placeholder": "http://example.com/"
                 },
                 "content": {
                     "options": {
                         "lane": {
                             "description": "Cykelbane adskilt fra trafikken med en opmalet linje",
                     "options": {
                         "lane": {
                             "description": "Cykelbane adskilt fra trafikken med en opmalet linje",
-                            "title": "Standard cykelbane"
+                            "title": "Standardcykelbane"
                         },
                         "none": {
                         },
                         "none": {
-                            "description": "Ingen cykelbaner",
+                            "description": "Ingen cykelbane",
                             "title": "Ingen"
                         },
                         "opposite": {
                             "title": "Ingen"
                         },
                         "opposite": {
-                            "description": "Cykelbane hvor det er tilladt at køre begge retninger på ensrettet biltrafikvej",
+                            "description": "Cykelbane hvor det er tilladt at køre i begge retninger på en ensrettet gade",
                             "title": "Begge retninger cykelbane"
                         },
                         "opposite_lane": {
                             "title": "Begge retninger cykelbane"
                         },
                         "opposite_lane": {
                     "label": "SSID (Netværksnavn)"
                 },
                 "kerb": {
                     "label": "SSID (Netværksnavn)"
                 },
                 "kerb": {
-                    "label": "Ramme"
+                    "label": "Kantsten"
                 },
                 "lamp_type": {
                     "label": "Type"
                 },
                 "lamp_type": {
                     "label": "Type"
                 "maxstay": {
                     "label": "Max tid"
                 },
                 "maxstay": {
                     "label": "Max tid"
                 },
+                "maxweight": {
+                    "label": "Maksimalvægt"
+                },
                 "mtb/scale": {
                     "label": "Sværhedsgrad for mountainbike",
                     "options": {
                 "mtb/scale": {
                     "label": "Sværhedsgrad for mountainbike",
                     "options": {
                     "name": "Universitetsområde",
                     "terms": "Universitetsområde"
                 },
                     "name": "Universitetsområde",
                     "terms": "Universitetsområde"
                 },
+                "amenity/vending_machine": {
+                    "name": "Salgsautomat",
+                    "terms": "Salgsautomat, automat, slikautomat"
+                },
                 "amenity/vending_machine/cigarettes": {
                     "name": "Cigaretautomat",
                     "terms": "Cigaretautomat, Tobaksautomat"
                 "amenity/vending_machine/cigarettes": {
                     "name": "Cigaretautomat",
                     "terms": "Cigaretautomat, Tobaksautomat"
                 "amenity/vending_machine/news_papers": {
                     "name": "Avisautomat"
                 },
                 "amenity/vending_machine/news_papers": {
                     "name": "Avisautomat"
                 },
+                "amenity/vending_machine/newspapers": {
+                    "name": "Avis-salgsautomat",
+                    "terms": "Avis-salgsautomat, automat, avis"
+                },
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "Pakkepostautomat",
                     "terms": "Pakkepostautomat"
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "Pakkepostautomat",
                     "terms": "Pakkepostautomat"
                     "name": "Elektriker",
                     "terms": "Elektriker, Elektrikerfirma"
                 },
                     "name": "Elektriker",
                     "terms": "Elektriker, Elektrikerfirma"
                 },
+                "craft/electronics_repair": {
+                    "name": "Elektronikværksted"
+                },
                 "craft/gardener": {
                     "name": "Gartner",
                     "terms": "Gartner"
                 "craft/gardener": {
                     "name": "Gartner",
                     "terms": "Gartner"
                     "name": "Cykelsti",
                     "terms": "Cykelsti"
                 },
                     "name": "Cykelsti",
                     "terms": "Cykelsti"
                 },
+                "highway/elevator": {
+                    "name": "Elevator"
+                },
                 "highway/footway": {
                     "name": "Gangsti",
                     "terms": "Gangsti"
                 "highway/footway": {
                     "name": "Gangsti",
                     "terms": "Gangsti"
                     "name": "Antikvitetsforretning",
                     "terms": "Antikvitetsforretning, Antikvitetsbutik"
                 },
                     "name": "Antikvitetsforretning",
                     "terms": "Antikvitetsforretning, Antikvitetsbutik"
                 },
+                "shop/appliance": {
+                    "name": "Hvidevareforretning"
+                },
                 "shop/art": {
                     "name": "Kunstbutik",
                     "terms": "Kunstbutik, Galleributik"
                 "shop/art": {
                     "name": "Kunstbutik",
                     "terms": "Kunstbutik, Galleributik"
index c58508606d41c467d24485b67dd578338b01a60c..605581bbc93c9d9c83513a3314a93df4b67f632b 100644 (file)
@@ -9,7 +9,7 @@
             "add_line": {
                 "title": "Linie",
                 "description": "Autobahnen, Straßen, Fußwege, Kanäle oder andere Linien zur Karte hinzufügen.",
             "add_line": {
                 "title": "Linie",
                 "description": "Autobahnen, Straßen, Fußwege, Kanäle oder andere Linien zur Karte hinzufügen.",
-                "tail": "Klicke auf die Karte, um das Bearbeiten einer Straße, eines Weges oder einer Route zu beginnen."
+                "tail": "Klicke auf die Karte, um das Bearbeiten einer Straße oder eines Pfades zu beginnen."
             },
             "add_point": {
                 "title": "Punkt",
             },
             "add_point": {
                 "title": "Punkt",
                 "description": "Verschiebe und zoome die Karte."
             },
             "draw_area": {
                 "description": "Verschiebe und zoome die Karte."
             },
             "draw_area": {
-                "tail": "Klicke, um Punkte zur Fläche hinzuzufügen. Klicke auf den ersten Punkt, um die Fläche abzuschließen."
+                "tail": "Klicke, um Knoten zur Fläche hinzuzufügen. Klicke auf den ersten Knoten, um die Fläche abzuschließen."
             },
             "draw_line": {
             },
             "draw_line": {
-                "tail": "Klicke, um weitere Punkte zur Linie hinzuzufügen. Klicke auf eine andere Linie, um die Linien zu verbinden und klicke doppelt, um die Linie zu beenden."
+                "tail": "Klicke, um weitere Knoten zur Linie hinzuzufügen. Klicke auf eine andere Linie, um die Linien zu verbinden und klicke doppelt, um die Linie zu beenden."
             }
         },
         "operations": {
             "add": {
                 "annotation": {
                     "point": "Punkt hinzugefügt.",
             }
         },
         "operations": {
             "add": {
                 "annotation": {
                     "point": "Punkt hinzugefügt.",
-                    "vertex": "Einen Punkt zum Weg hinzugefügt.",
+                    "vertex": "Einen Knoten zum Weg hinzugefügt.",
                     "relation": "Relation hinzugefügt."
                 }
             },
                     "relation": "Relation hinzugefügt."
                 }
             },
@@ -62,7 +62,7 @@
                 "annotation": "Eigenschaften verändert."
             },
             "circularize": {
                 "annotation": "Eigenschaften verändert."
             },
             "circularize": {
-                "title": "Kreis formen",
+                "title": "Kreisförmig machen",
                 "description": {
                     "line": "Diese Linie kreisförmig machen.",
                     "area": "Diese Fläche kreisförmig machen."
                 "description": {
                     "line": "Diese Linie kreisförmig machen.",
                     "area": "Diese Fläche kreisförmig machen."
                 "connected_to_hidden": "Dieses Objekt kann nicht kreisförmig gemacht werden, da es mit einem versteckten Objekt verbunden ist."
             },
             "orthogonalize": {
                 "connected_to_hidden": "Dieses Objekt kann nicht kreisförmig gemacht werden, da es mit einem versteckten Objekt verbunden ist."
             },
             "orthogonalize": {
-                "title": "Rechtwinkelig machen",
+                "title": "Rechtwinklig machen",
                 "description": {
                 "description": {
-                    "line": "Die Ecken dieser Linie rechtwinkelig machen.",
-                    "area": "Die Ecken dieser Fläche rechtwinkelig machen."
+                    "line": "Die Ecken dieser Linie rechtwinklig machen.",
+                    "area": "Die Ecken dieser Fläche rechtwinklig machen."
                 },
                 "key": "S",
                 "annotation": {
                 },
                 "key": "S",
                 "annotation": {
-                    "line": "Linien rechtwinklig ausgerichtet. ",
-                    "area": "Fläche rechtwinklig ausgerichtet."
+                    "line": "Ecken der Linie rechtwinklig gemacht.",
+                    "area": "Ecken der Fläche rechtwinklig gemacht."
                 },
                 "not_squarish": "Dieses Objekt kann nicht rechtwinklig gemacht werden, da es nicht annähernd rechtwinklig ist.",
                 "too_large": "Dieses Objekt kann nicht quadratisch werden, da zu wenig davon sichtbar ist.",
                 "connected_to_hidden": "Dieses Objekt kann nicht quadratisch gemacht werden, weil es mit einem versteckten Objekt verbunden ist."
             },
             "straighten": {
                 },
                 "not_squarish": "Dieses Objekt kann nicht rechtwinklig gemacht werden, da es nicht annähernd rechtwinklig ist.",
                 "too_large": "Dieses Objekt kann nicht quadratisch werden, da zu wenig davon sichtbar ist.",
                 "connected_to_hidden": "Dieses Objekt kann nicht quadratisch gemacht werden, weil es mit einem versteckten Objekt verbunden ist."
             },
             "straighten": {
-                "title": "Gerade ausrichten",
-                "description": "Diese Linie gerade ausrichten.",
+                "title": "Gerade biegen",
+                "description": "Diese Linie gerade biegen.",
                 "key": "S",
                 "key": "S",
-                "annotation": "Linie gerade ausgerichtet.",
+                "annotation": "Linie gerade gebogen.",
                 "too_bendy": "Dieses Objekt kann nicht begradigt werden, da es zu kurvig ist.",
                 "connected_to_hidden": "Dieses Objekt kann nicht begradigt werden, da es mit einem versteckten Objekt verbunden ist."
             },
                 "too_bendy": "Dieses Objekt kann nicht begradigt werden, da es zu kurvig ist.",
                 "connected_to_hidden": "Dieses Objekt kann nicht begradigt werden, da es mit einem versteckten Objekt verbunden ist."
             },
                 },
                 "annotation": {
                     "point": "Punkt gelöscht.",
                 },
                 "annotation": {
                     "point": "Punkt gelöscht.",
-                    "vertex": "Punkt aus einem Weg gelöscht.",
+                    "vertex": "Knoten aus einem Weg gelöscht.",
                     "line": "Linie gelöscht.",
                     "area": "Fläche gelöscht.",
                     "relation": "Relation gelöscht.",
                     "line": "Linie gelöscht.",
                     "area": "Fläche gelöscht.",
                     "relation": "Relation gelöscht.",
                 "key": "M",
                 "annotation": {
                     "point": "Punkt verschoben.",
                 "key": "M",
                 "annotation": {
                     "point": "Punkt verschoben.",
-                    "vertex": "Punkt eines Weges verschoben.",
+                    "vertex": "Knoten eines Weges verschoben.",
                     "line": "Linie verschoben.",
                     "area": "Fläche verschoben.",
                     "multiple": "Mehrere Objekte verschoben."
                     "line": "Linie verschoben.",
                     "area": "Fläche verschoben.",
                     "multiple": "Mehrere Objekte verschoben."
                 },
                 "description": {
                     "long": {
                 },
                 "description": {
                     "long": {
-                        "single": "Dieses Objekt über seine lange Achse spiegeln.",
-                        "multiple": "Diese Objekte über ihre lange Achse spiegeln."
+                        "single": "Dieses Objekt an langer Achse spiegeln.",
+                        "multiple": "Diese Objekte an langer Achse spiegeln."
                     },
                     "short": {
                     },
                     "short": {
-                        "single": "Dieses Objekt über seine kurze Achse spiegeln.",
-                        "multiple": "Diese Objekte über ihre kurze Achse spiegeln."
+                        "single": "Dieses Objekt an kurze Achse spiegeln.",
+                        "multiple": "Diese Objekte an kurzer Achse spiegeln."
                     }
                 },
                 "key": {
                     }
                 },
                 "key": {
             "split": {
                 "title": "Teilen",
                 "description": {
             "split": {
                 "title": "Teilen",
                 "description": {
-                    "line": "Die Linie an diesem Punkt teilen.",
+                    "line": "Die Linie an diesem Knoten teilen.",
                     "area": "Die Grenze dieser Fläche in zwei Teile teilen.",
                     "area": "Die Grenze dieser Fläche in zwei Teile teilen.",
-                    "multiple": "Die Linie/Flächengrenze an diesem Punkt teilen."
+                    "multiple": "Die Linie/Flächengrenze an diesem Knoten teilen."
                 },
                 "key": "X",
                 "annotation": {
                 },
                 "key": "X",
                 "annotation": {
             "localized_translation_language": "Sprache wählen",
             "localized_translation_name": "Name"
         },
             "localized_translation_language": "Sprache wählen",
             "localized_translation_name": "Name"
         },
-        "zoom_in_edit": "Hineinzoomen, um zu bearbeiten",
+        "zoom_in_edit": "Hinein zoomen, um zu bearbeiten",
         "login": "Login",
         "logout": "Abmelden",
         "loading_auth": "Mit OpenStreetMap verbinden …",
         "login": "Login",
         "logout": "Abmelden",
         "loading_auth": "Mit OpenStreetMap verbinden …",
             },
             "add": "Hinzufügen",
             "none": "Nichts",
             },
             "add": "Hinzufügen",
             "none": "Nichts",
-            "node": "Punkt",
+            "node": "Knoten",
             "way": "Linie",
             "relation": "Relation",
             "location": "Standort",
             "way": "Linie",
             "relation": "Relation",
             "location": "Standort",
             "percent_brightness": "{opacity}% Helligkeit",
             "none": "Kein Hintergrund",
             "best_imagery": "Beste bekannte Bildmaterialquelle für diesen Ort",
             "percent_brightness": "{opacity}% Helligkeit",
             "none": "Kein Hintergrund",
             "best_imagery": "Beste bekannte Bildmaterialquelle für diesen Ort",
-            "switch": "Zu diesem Hintergrund zurück wechseln",
+            "switch": "Zu diesem Hintergrund zurückschalten",
             "custom": "Benutzerdefiniert",
             "custom_button": "Benutzerdefinierten Hintergrund bearbeiten",
             "custom_prompt": "Gib eine Kachel-URL-Vorlage ein. Gültige Token sind {zoom}, {x}, {y} für das Schema z/x/y oder {u} für das quadtile Schema.",
             "custom": "Benutzerdefiniert",
             "custom_button": "Benutzerdefinierten Hintergrund bearbeiten",
             "custom_prompt": "Gib eine Kachel-URL-Vorlage ein. Gültige Token sind {zoom}, {x}, {y} für das Schema z/x/y oder {u} für das quadtile Schema.",
             "offset": "Ziehe irgendwo im grauen Bereich um den Versatz des Bildmaterials anzupassen oder gib die Versatz-Werte in Metern ein.",
             "minimap": {
                 "description": "Minikarte",
             "offset": "Ziehe irgendwo im grauen Bereich um den Versatz des Bildmaterials anzupassen oder gib die Versatz-Werte in Metern ein.",
             "minimap": {
                 "description": "Minikarte",
-                "tooltip": "Herauszoomen, damit der angezeigte Bereiche leichter lokalisiert werden kann."
+                "tooltip": "Heraus zoomen, damit das angezeigte Gebiet leichter lokalisiert werden kann."
             }
         },
         "map_data": {
             }
         },
         "map_data": {
             "data_layers": "Datenebenen",
             "fill_area": "Füllflächen",
             "map_features": "Kartenobjekte",
             "data_layers": "Datenebenen",
             "fill_area": "Füllflächen",
             "map_features": "Kartenobjekte",
-            "autohidden": "Diese Objekte wurden automatisch versteckt, da zu viele auf dem Bildschirm angezeigt würden. Bitte hereinzoomen, um diese zu bearbeiten."
+            "autohidden": "Diese Objekte wurden automatisch versteckt, da zu viele auf dem Bildschirm angezeigt würden. Zum Bearbeiten bitte hinein zoomen."
         },
         "feature": {
             "points": {
         },
         "feature": {
             "points": {
         },
         "restore": {
             "heading": "Ungesicherte Änderungen vorhanden",
         },
         "restore": {
             "heading": "Ungesicherte Änderungen vorhanden",
-            "description": "Es gibt ungesicherte Änderungen aus einer früheren Sitzung. Möchtest du diese Änderungen wiederherstellen?",
+            "description": "Willst Du die ungesicherten Änderungen aus einer früheren Bearbeitungs-Sitzung wiederherstellen?",
             "restore": "Wiederherstellen",
             "reset": "Zurücksetzen"
         },
             "restore": "Wiederherstellen",
             "reset": "Zurücksetzen"
         },
             "cancel": "Abbrechen"
         },
         "splash": {
             "cancel": "Abbrechen"
         },
         "splash": {
-            "welcome": "Willkommen beim Editor iD für OpenStreetMap",
+            "welcome": "Willkommen beim iD OpenStreetMap Editor",
             "text": "iD ist ein benutzerfreundliches aber leistungsfähiges Werkzeug, um die weltbeste freie Weltkarte zu bearbeiten. Dies ist Version {version}. Für weitere Informationen besuche {website} und melde Fehler unter {github}.",
             "walkthrough": "Rundgang starten",
             "start": "Jetzt bearbeiten"
             "text": "iD ist ein benutzerfreundliches aber leistungsfähiges Werkzeug, um die weltbeste freie Weltkarte zu bearbeiten. Dies ist Version {version}. Für weitere Informationen besuche {website} und melde Fehler unter {github}.",
             "walkthrough": "Rundgang starten",
             "start": "Jetzt bearbeiten"
             "deprecated_tags": "Veraltete Eigenschaften: {tags}"
         },
         "zoom": {
             "deprecated_tags": "Veraltete Eigenschaften: {tags}"
         },
         "zoom": {
-            "in": "Hineinzoomen",
-            "out": "Herauszoomen"
+            "in": "Hinein zoomen",
+            "out": "Heraus zoomen"
         },
         "cannot_zoom": "Es kann im aktuellen Modus nicht weiter heraus gezoomt werden.",
         },
         "cannot_zoom": "Es kann im aktuellen Modus nicht weiter heraus gezoomt werden.",
-        "full_screen": "Vollbild umschalten",
+        "full_screen": "Vollbildmodus ein-/ausschalten",
         "gpx": {
             "local_layer": "Lokale Datei",
             "drag_drop": "Zieh eine .gpx, .geojson, oder .kml Datei per Drag & Drop auf die Seite oder klicke den Knopf rechts, um nach Dateien zu suchen",
         "gpx": {
             "local_layer": "Lokale Datei",
             "drag_drop": "Zieh eine .gpx, .geojson, oder .kml Datei per Drag & Drop auf die Seite oder klicke den Knopf rechts, um nach Dateien zu suchen",
         },
         "help": {
             "title": "Hilfe",
         },
         "help": {
             "title": "Hilfe",
-            "help": "#Hilfe\n\nDies ist der iD Editor für [OpenStreetMap](http://www.openstreetmap.org/), der freien und editierbaren Weltkarte. Du kannst ihn verwenden, um Daten in deiner Umgebung hinzuzufügen oder zu verändern und so diese Karte mit freien Quellen und freien Daten für jeden verbessern.\n\nDeine Veränderungen werden für alle Nutzer von OpenStreetMap sichtbar. Um Veränderungen vornehmen zu können, musst du [einloggen](https://www.openstreetmap.org/login).\n\nDer [iD Editor](http://ideditor.com/) ist ein Gemeinschaftsprojekt, dessen [Quellcode auf GitHub](https://github.com/openstreetmap/iD) verfügbar ist.\n",
-            "editing_saving": "# Bearbeiten & Speichern\n\nDieser Editor wurde entworfen, um online zu arbeiten und du verwendest ihn gerade auf dieser Webseite.\n### Objekte auswählen\n\nUm ein Kartenobjekt wie einen Weg oder ein Gebäude auszuwählen, klicke dieses auf der Karte an. Dadurch wird das Objekt hervorgehoben und der Objekteditor ermöglicht die Details zu sehen und zu ändern.\n\nMehrere Objekte kannst du auswählen, indem du die Umschalttaste (Shift) gedrückst hältst und die Objekte einzeln anklickst oder einen Rahmen auf der Karte aufziehst. So können mehrere Objekte gleichzeitig ausgewählt werden.\n\n### Speichern der Änderungen\n\nWenn du Änderungen an einem Weg, einem Gebäude oder einem Platz vorgenommen hast, sind diese nur lokal gespeichert, bis du sie auf dem Server hochlädst. Mach dir keine Sorge wegen Fehler: du kannst Änderungen jederzeit über den Rückgängig-Knopf rückgängig machen oder über den Wiederherstellen-Knopf noch einmal ausführen.\n\nKlicke auf „Speichern“, um eine Gruppe von Änderungen zu speichern. Zum Beispiel, wenn du in einem Stadtteil fertig bist und in einer neuen Gegend weiter arbeiten willst. Du bekommst dann die Möglichkeit, noch einmal zu überprüfen, was du gerade getan hast und der Editor zeigt dir nützliche Hinweise oder mögliche Fehler, wenn etwas nicht in Ordnung zu sein scheint.\n\nWenn alles gut aussieht, solltest du einen kurzen Kommentar schreiben, der erklärt, was du gemacht hast. Drücke nun nochmals „Speichern“, um die Änderungen auf [OpenStreetMap.org](http://www.openstreetmap.org/) zu speichern, damit sie für alle anderen Benutzer sichtbar wird und diese darauf aufbauen können.\n\nWenn du mit der Bearbeitung nicht fertig wirst, kannst du das Editier-Fenster einfach schließen. Wenn du die Seite wieder aufrufst (mit dem gleichen Rechner und Browser) wird dir angeboten, die letzte Sitzung wiederherzustellen.\n\n### Benutzung des Editors\n\nEine Liste der verfügbaren Tastaturkürzel gibt es [hier](http://wiki.openstreetmap.org/wiki/DE:ID/Shortcuts).\n",
-            "roads": "# Wege\n\nMit dem Editor kannst du Wege erstellen, verbessern und löschen. Mögliche Wegtypen können Straßen, Wanderwege, Eisenbahnschienen oder Fahrradwege sein, jeder benutzte Weg kann bearbeitet werden.\n\n### Auswählen\n\nKlicke auf einen Weg, um ihn auszuwählen, er wird dann hervorgehoben und es erscheint links der Objekteditor mit mehr Informationen über den Weg.\n\n### Modifizieren\n\nOft sieht man, dass Wege nicht mit dem Luftbild oder einer GPS-Spur übereinstimmen. Du kannst den Weg so anpassen, dass er an der richtigen Stelle ist. Beachte jedoch, dass Luftbilder einen Versatz aufweisen können.\n\nZuerst klickst du auf den Weg den du ändern willst. Dieser wird nun hervorgehoben und es werden die Knoten des Weges angezeigt. Diese kannst du verschieben, bis sie an der richtigen Stelle sind. Wenn du neue Knoten hinzufügen möchtest, klicke doppelt zwischen den Knoten auf die Linie und es wird ein neuer Punkt erzeugt. Du kannst auch einen Dreieckspfeil auf der Linie anklicken und verschieben.\n\nWenn zwei Wege in Wirklichkeit mit einander verbunden sind, aber auf der Karte nicht, kannst du sie verbinden, indem du einen Knoten des einen Weges auf den anderen Weg ziehst. Dass Wege verbunden sind, ist wichtig für die Karte und notwendig für die Nutzung von Straßenroutern.\n\nDu kannst auch das „Bewegen“-Werkzeug nutzen oder „M“ drücken, um den kompletten Weg zu verschieben. Beende die Aktion mit einem Klick.\n\n### Löschen\n\nWenn du weißt, dass ein Weg nicht existiert, kannst du ihn löschen, um ihn von der Karte zu entfernen. Sei beim Löschen von Objekten - wie immer beim Bearbeiten - vorsichtig, da die Ergebnisse von jedem gesehen werden können und Luftbilder oft veraltet sind. Das heißt, dass ein Weg, der im Luftbild nicht zu sehen ist, wurde vielleicht einfach neu gebaut.\n\nDu kannst Wege löschen, indem du sie rechtsklickst und das Papierkorbsymbol auswählst oder die „Entfernen“-Taste drückst.\n\n### Erstellen\n\nDu kennst einen Weg, der nicht eingezeichnet ist? Dann klicke auf das „Linien“-Symbol oben links im Editor oder drücke die Taste „2“ und beginne mit dem Zeichnen einer Linie.\n\nKlicke dort hin, wo der Weg anfängt. Sollte er von einer bereits existierenden Straße abzweigen, klicke an der entsprechenden Stelle auf diese Straße.\n\nZeichne nun den Weg, indem du Punkte anhand der Luftaufnahme oder der GPS-Spur entlang des Weges setzt. Sollte der Weg einen anderen kreuzen, klicke auf den Kreuzungspunkt, um beide Wege zu verbinden. Wenn du mit dem Zeichnen fertig bist, klicke doppelt oder drücke „Enter“ auf der Tastatur, um den Weg abzuschließen.\n",
-            "gps": "# GPS\n\nSelbst aufgezeichnete GPS-Tracks sind eine wertvolle Datenquelle für OpenStreetMap. Dieser Editor unterstützt lokale GPS-Tracks - `.gpx`-Dateien auf deinem Computer. Du kannst GPS-Tracks mit Hilfe von  zahlreichen Smartphone-Apps oder mit GPS-Geräten aufnehmen.\n\nFür Informationen über das Aufzeichnen von GPS-Daten kannst du dir folgende Anleitung durchlesen: [Kartierung mit Smartphone, GPS oder Papier](http://learnosm.org/de/mobile-mapping/)\n\nUm einen GPS-Track fürs Mapping zu verwenden, ziehe ihn einfach in den Karteneditor. Wenn er erkannt wurde, wird der Track als hell-lila Linie auf der Karte dargestellt.\nKlicke auf das „Kartendaten“-Menu rechts, um die neue Ebene mit dem Track zu aktivieren/deaktivieren oder zoome zum Gebiet des Tracks.\n\nDer GPS-Track wird nicht automatisch direkt zu OpenStreetMap hochgeladen. Am besten verwendest du ihn als Orientierung um neue Objekte zu zeichnen. Möchtest du den GPS-Track jedem zugänglich machen, kannst du ihn [nach OpenStreetMap hochladen](http://www.openstreetmap.org/trace/create)\n",
+            "help": "#Hilfe\n\nDies ist der iD Editor für [OpenStreetMap](http://www.openstreetmap.org/), der freien und bearbeitbaren Weltkarte. Du kannst ihn verwenden, um Daten in deiner Umgebung hinzuzufügen oder zu verändern und so diese Karte mit freien Quellen und freien Daten für jeden verbessern.\n\nDeine Veränderungen werden für alle Nutzer von OpenStreetMap sichtbar. Um Veränderungen vornehmen zu können, musst du [einloggen](https://www.openstreetmap.org/login).\n\nDer [iD Editor](http://ideditor.com/) ist ein Gemeinschaftsprojekt, dessen [Quellcode auf GitHub](https://github.com/openstreetmap/iD) verfügbar ist.\n",
+            "editing_saving": "# Bearbeiten & Speichern\n\nDieser Editor ist gedacht um hauptsächlich online zu arbeiten und du\nverwendest ihn gerade auf einer Webseite.\n\n### Objekte auswählen\n\nUm ein Karten-Objekt wie eine Straße oder einen interessanten Punkt auszuwählen, klicke\ndieses auf der Karte an. Dadurch wird das Objekt hervorgehoben und der\nObjekteditor mit den Objektdetails angezeigt. Durch rechtsklicken bekommst\ndu das Bearbeitungsmenu für das Objekt.\n\nMehrere Objekte kannst du auswählen, indem du die \"Shift\"-/Umschalt-Taste\ngedrückt hältst. Dann klicke entweder einzeln auf die\ngewünschten Objekte oder ziehe mit der Maus einen Rahmen auf, damit die Punkte im Rahmen ausgewählt werden.\n\n### Speichern der Änderungen\n\nWenn du eine Straße oder eine Gebäude geändert hast, dann sind\ndeine Änderungen nur lokal gespeichert, bis du sie zum Server hochlädst.\nMach dir keine Sorge wegen Fehler: du kannst Änderungen jederzeit\nmit dem Rückgängig-Knopf rückgängig machen oder über den Wiederherstellen-Knopf wiederherstellen.\n\nKlicke auf „Speichern“, um Änderungen abzuschließen, beispielsweise\nwenn du in einem Gebiet fertig bist und woanders weiter arbeiten willst.\nDu bekommst dann die Liste der Änderungen und manchmal auch\nnützliche Warnungen angezeigt, wenn etwas falsch sein könnte.\nDu kannst dann überprüfen, was du gerade geändert hast.\n\nWenn alles gut aussieht, solltest du einen kurzen Kommentar schreiben, der\nerklärt, was du gemacht hast. Drücke nun \"Hochladen“, um die\nÄnderungen auf  [OpenStreetMap.org](http://www.openstreetmap.org/)\nzu speichern, damit sie für alle anderen Benutzer sichtbar\nwerden und diese darauf aufbauen können.\n\nWenn du mit der Bearbeitung nicht fertig wirst, kannst du den Browser-Tab\neinfach schließen. Wenn du die Seite wieder aufrufst (mit dem gleichen\nRechner und Browser) wird dir angeboten, die ungesicherten Änderungen wiederherzustellen.\n\n### Benutzung des Editors\n\nDu kannst die Liste der Tastenkürzel mit dem '?'-Knopf aufrufen.\n",
+            "roads": "# Wege\n\nMit dem Editor kannst du Wege erstellen, verbessern und löschen. Mögliche Wegtypen können Straßen, Wanderwege, Eisenbahnschienen oder Fahrradwege sein, jeder benutzte Weg kann bearbeitet werden.\n\n### Auswählen\n\nKlicke auf einen Weg, um ihn auszuwählen, er wird dann hervorgehoben und es erscheint links der Objekteditor mit mehr Informationen über den Weg.\n\n### Modifizieren\n\nOft sieht man, dass Wege nicht mit dem Luftbild oder einer GPS-Spur übereinstimmen. Du kannst den Weg so anpassen, dass er an der richtigen Stelle ist. Beachte jedoch, dass Luftbilder einen Versatz aufweisen können.\n\nZuerst klickst du auf den Weg den du ändern willst. Dieser wird nun hervorgehoben und es werden die Knoten des Weges angezeigt. Diese kannst du verschieben, bis sie an der richtigen Stelle sind. Wenn du neue Knoten hinzufügen möchtest, klicke doppelt zwischen den Knoten auf die Linie und es wird ein neuer Knoten erzeugt. Du kannst auch einen Dreiecks-Pfeil auf der Linie anklicken und verschieben.\n\nWenn zwei Wege in Wirklichkeit mit einander verbunden sind, aber auf der Karte nicht, kannst du sie verbinden, indem du einen Knoten des einen Weges auf den anderen Weg ziehst. Dass Wege verbunden sind, ist wichtig für die Karte und notwendig für die Nutzung von Straßenroutern.\n\nDu kannst auch das „Bewegen“-Werkzeug nutzen oder „M“ drücken, um den kompletten Weg zu verschieben. Beende die Aktion mit einem Klick.\n\n### Löschen\n\nWenn du weißt, dass ein Weg nicht existiert, kannst du ihn löschen, um ihn von der Karte zu entfernen. Sei beim Löschen von Objekten - wie immer beim Bearbeiten - vorsichtig, da die Ergebnisse von jedem gesehen werden können und Luftbilder oft veraltet sind. Das heißt, dass ein Weg, der im Luftbild nicht zu sehen ist, wurde vielleicht einfach neu gebaut.\n\nDu kannst Wege löschen, indem du sie rechtsklickst und das Papierkorbsymbol auswählst oder die „Entfernen“-Taste drückst.\n\n### Erstellen\n\nDu kennst einen Weg, der nicht eingezeichnet ist? Dann klicke auf das „Linien“-Symbol oben links im Editor oder drücke die Taste „2“ und beginne mit dem Zeichnen einer Linie.\n\nKlicke dort hin, wo der Weg anfängt. Sollte er von einer bereits existierenden Straße abzweigen, klicke an der entsprechenden Stelle auf diese Straße.\n\nZeichne nun den Weg, indem du Knoten anhand der Luftaufnahme oder der GPS-Spur entlang des Weges setzt. Sollte der Weg einen anderen kreuzen, klicke auf den Kreuzungspunkt, um beide Wege zu verbinden. Wenn du mit dem Zeichnen fertig bist, klicke doppelt oder drücke „Enter“ auf der Tastatur, um den Weg abzuschließen.\n",
+            "gps": "# GPS\n\nSelbst aufgezeichnete GPS-Tracks sind eine wertvolle Datenquelle für OpenStreetMap. Dieser Editor unterstützt lokale GPS-Tracks - `.gpx`-Dateien auf deinem Computer. Du kannst GPS-Tracks mit Hilfe von  zahlreichen Smartphone-Apps oder mit GPS-Geräten aufnehmen.\n\nFür Informationen über das Aufzeichnen von GPS-Daten kannst du dir folgende Anleitung durchlesen: [Kartierung mit Smartphone, GPS oder Papier](http://learnosm.org/de/mobile-mapping/)\n\nUm einen GPS-Track fürs Mapping zu verwenden, ziehe ihn einfach auf die Karte. Wenn er erkannt wurde, wird der Track als hell-lila Linie auf der Karte dargestellt.\nKlicke auf das „Kartendaten“-Menu rechts, um die neue Ebene mit dem Track zu aktivieren/deaktivieren oder zoome zum Gebiet des Tracks.\n\nDer GPS-Track wird nicht automatisch direkt zu OpenStreetMap hochgeladen. Am besten verwendest du ihn als Orientierung um neue Objekte zu zeichnen. Möchtest du den GPS-Track jedem zugänglich machen, kannst du ihn [nach OpenStreetMap hochladen](http://www.openstreetmap.org/trace/create)\n",
             "imagery": "# Bildmaterial\n\nLuftbilder sind eine wichtige Quelle für das Kartografieren. Eine Kombination aus Luftbildern von Flugzeugen, Satellitenbilder und freien Quellen sind im Editor über das „Hintergrundeinstellungen“-Menü auf der linken Seite verfügbar.\n\nAls Standard ist die [Bing-Maps](http://www.bing.com/maps/)-Satelliten-Ebene ausgewählt. Je nach angezeigter Gegend werden dir verschiedene andere Quellen angezeigt. In einigen Länder wie Deutschland, Österreich, Schweiz oder den USA stehen zum Teil sehr hochauflösende Luftbilder zur Verfügung.\n\nLuftbilder sind manchmal durch Fehler der Luftbild-Anbieter verschoben. Wenn du feststellst, dass viele Wege gegenüber dem Hintergrund verschoben sind, dann verschiebe nicht die Straßen sondern das Luftbild, bis sie übereinstimmen. Um das Luftbild zu korrigieren, klicke auf „Bildmaterial-Versatz anpassen“ unten in den Hintergrundeinstellungen.\n",
             "addresses": "# Adressen\n\nAdressen sind eine der wichtigsten Informationen einer Karte.\n\nAdressen werden in OpenStreetMap als Eigenschaften von Gebäuden oder als Punkt-Objekte neben der Straße eingetragen.\n\nDu kannst Adressinformationen sowohl zu Flächen, die als Gebäudegrundriss gezeichnet sind, als auch zu einzelnen Punkten hinzufügen. Die beste Quelle für Adressen ist eigenes Wissen oder eine Erhebung vor Ort. Wie bei allen anderen Objekten ist die Nutzung kommerzieller Quellen wie Google Maps strikt verboten.\n",
             "imagery": "# Bildmaterial\n\nLuftbilder sind eine wichtige Quelle für das Kartografieren. Eine Kombination aus Luftbildern von Flugzeugen, Satellitenbilder und freien Quellen sind im Editor über das „Hintergrundeinstellungen“-Menü auf der linken Seite verfügbar.\n\nAls Standard ist die [Bing-Maps](http://www.bing.com/maps/)-Satelliten-Ebene ausgewählt. Je nach angezeigter Gegend werden dir verschiedene andere Quellen angezeigt. In einigen Länder wie Deutschland, Österreich, Schweiz oder den USA stehen zum Teil sehr hochauflösende Luftbilder zur Verfügung.\n\nLuftbilder sind manchmal durch Fehler der Luftbild-Anbieter verschoben. Wenn du feststellst, dass viele Wege gegenüber dem Hintergrund verschoben sind, dann verschiebe nicht die Straßen sondern das Luftbild, bis sie übereinstimmen. Um das Luftbild zu korrigieren, klicke auf „Bildmaterial-Versatz anpassen“ unten in den Hintergrundeinstellungen.\n",
             "addresses": "# Adressen\n\nAdressen sind eine der wichtigsten Informationen einer Karte.\n\nAdressen werden in OpenStreetMap als Eigenschaften von Gebäuden oder als Punkt-Objekte neben der Straße eingetragen.\n\nDu kannst Adressinformationen sowohl zu Flächen, die als Gebäudegrundriss gezeichnet sind, als auch zu einzelnen Punkten hinzufügen. Die beste Quelle für Adressen ist eigenes Wissen oder eine Erhebung vor Ort. Wie bei allen anderen Objekten ist die Nutzung kommerzieller Quellen wie Google Maps strikt verboten.\n",
-            "inspector": "# Objekteditor\n\nDer Objekteditor ist das Bedienelement links im Editor und erlaubt dir die Details des ausgewählten Objekts zu bearbeiten.\n\n### Einen Objekttyp auswählen\n\nNachdem du einen Punkt, eine Linie oder eine Fläche hinzugefügt hast, kannst du auswählen, welchen Typ das Objekt hat – ob es eine Autobahn oder eine Wohngebietsstraße, ein Supermarkt oder ein Café ist. Der Objekteditor zeigt Knöpfe für die am häufigsten verwendeten Eigenschaften an. Andere Eigenschaften findest du, indem du im Suchfeld eingibst, wonach du suchst. Klicke auf den Knopf „i“ in der rechten oberen Ecke bei einem Objekttyp, um mehr darüber zu erfahren.\n\n### Vorlagen verwenden und Eigenschaften bearbeiten\n\nNachdem du ein Objekttyp ausgewählt hast, zeigt der Objekteditor Felder mit Eigenschaften wie Name oder Adresse an. Unter diesen Feldern kannst du das \"Feld hinzufügen\"-Dropdown anklicken, um weitere Details hinzuzufügen wie zum Beispiel einen [Wikipedia](http://de.wikipedia.org/)-Link, Zugänglichkeit für Rollstühle und anderes.\nFast ganz unten im Objekteditor kannst du auf „Alle Eigenschaften“ klicken, um das Objekt mit beliebigen anderen Eigenschaften zu versehen. [Taginfo](http://taginfo.openstreetmap.org/) ist eine gute Quelle, um oft genutzte Kombinationen von Eigenschaften zu finden.\n\nÄnderungen die du im Objekteditor vornimmst, werden automatisch auf die ausgewählten Objekte angewendet. Durch klicken auf den Knopf „Rückgängig“ kannst du sie rückgängig machen.\n",
-            "buildings": "# Gebäude\n\nOpenStreetMap ist die größte Gebäude-Datenbank der Welt und du kannst helfen, sie weiter zu verbessern.\n\n### Auswahl\n\nDu kannst ein Gebäude auswählen, indem du auf dessen Umriss klickst. Der Umriss wird nun hervorgehoben. Außerdem wird links der Objekteditor die Informationen zum Gebäude anzeigen.\n\n### Bearbeitung\n\nManchmal sind Gebäude falsch platziert oder haben falsche Eigenschaften.\n\nUm ein Gebäude komplett zu verschieben kannst du es rechtsklicken und mit dem „Bewegen“-Werkzeug verschieben. Verschiebe das Gebäude und klicke einmal, wenn es an der richtigen Stelle ist.\n\nUm den Gebäudeumriss zu korrigieren, klicke und ziehe die Umrissknoten, bis sie an der richtigen Stelle sind.\n\n### Erstellen\n\nEine oft gestellte Frage bezieht sich auf das Erstellen von Gebäuden als Gebäudefläche und/oder als Punkt. Hier gilt, wann immer es möglich ist, sollte das Gebäude als Fläche eingetragen werden. Firmen, Geschäfte und ähnliches werden zusätzlich als Punkte innerhalb des Gebäudes angelegt.\n\nUm ein Gebäude als Fläche zu zeichnen, klicke auf den Knopf „Fläche“ oben links und vollende das Gebäude, indem du entweder die „Enter“-Taste drückst, oder auf den ersten Knoten klickst.\n\n### Löschen\n\nWenn du siehst und weißt, dass ein Gebäude nicht existiert – zum Beispiel, weil du vor Ort warst – kannst du es löschen und es wird von der Karte entfernt. Sei vorsichtig beim Löschen von Objekten, das Ergebnis kann, wie bei jeder anderen Veränderung, von allen gesehen werden. Außerdem sind Satellitenbilder oft veraltet und ein Gebäude könnte einfach neu gebaut sein.\n\nDu kannst ein Gebäude löschen, indem du es auswählst und auf das Papierkorbsymbol klickst oder die „Entfernen“-Taste betätigst.\n",
+            "inspector": "# Objekteditor\n\nDer Objekteditor ist das Bedienelement links im Editor und erlaubt dir die Details des ausgewählten Objekts zu bearbeiten.\n\n### Einen Objekttyp auswählen\n\nNachdem du einen Punkt, eine Linie oder eine Fläche hinzugefügt hast, kannst du auswählen, welchen Typ das Objekt hat – ob es eine Autobahn oder eine Wohngebietsstraße, ein Supermarkt oder ein Café ist. Der Objekteditor zeigt Knöpfe für die am häufigsten verwendeten Eigenschaften an. Andere Eigenschaften findest du, indem du im Suchfeld eingibst, wonach du suchst.\n\nKlicke auf den Knopf „i“ in der rechten oberen Ecke bei einem Objekttyp, um mehr darüber zu erfahren.\n\n### Vorlagen verwenden und Eigenschaften bearbeiten\n\nNachdem du einen Objekttyp oder ein Objekt ausgewählt hast, zeigt der Objekteditor Felder mit Eigenschaften wie Name oder Adresse an.\n\nUnter diesen Feldern kannst du das \"Feld hinzufügen\"-Dropdown anklicken, um weitere Details hinzuzufügen wie zum Beispiel einen Wikipedia-Link, Zugänglichkeit für Rollstühle und anderes.\n\nFast ganz unten im Objekteditor kannst du auf „Alle Eigenschaften“ klicken, um das Objekt mit beliebigen anderen Eigenschaften zu versehen. [Taginfo](http://taginfo.openstreetmap.org/) ist eine gute Quelle, um oft genutzte Kombinationen von Eigenschaften zu finden.\n\nÄnderungen die du im Objekteditor vornimmst, werden automatisch auf die ausgewählten Objekte angewendet. Durch klicken auf den Knopf „Rückgängig“ kannst du sie rückgängig machen.\n",
+            "buildings": "# Gebäude\n\nOpenStreetMap ist die größte Gebäude-Datenbank der Welt und du kannst helfen, sie weiter zu verbessern.\n\n### Auswahl\n\nDu kannst ein Gebäude auswählen, indem du auf dessen Umriss klickst. Der Umriss wird nun hervorgehoben. Außerdem wird links der Objekteditor die Informationen zum Gebäude anzeigen.\n\n### Bearbeitung\n\nManchmal sind Gebäude falsch platziert oder haben falsche Eigenschaften.\n\nUm ein Gebäude komplett zu verschieben kannst du es rechtsklicken und mit dem „Bewegen“-Werkzeug verschieben. Verschiebe das Gebäude und klicke einmal, wenn es an der richtigen Stelle ist.\n\nUm den Gebäudeumriss zu korrigieren, klicke und ziehe die Knoten des Umriss, bis sie an der richtigen Stelle sind.\n\n### Erstellen\n\nEine oft gestellte Frage bezieht sich auf das Erstellen von Gebäuden als Gebäudefläche und/oder als Punkt. Hier gilt, wann immer es möglich ist, sollte das Gebäude als Fläche eingetragen werden. Firmen, Geschäfte und ähnliches werden zusätzlich als Punkte innerhalb des Gebäudes angelegt.\n\nUm ein Gebäude als Fläche zu zeichnen, klicke auf den Knopf „Fläche“ oben links und vollende das Gebäude, indem du entweder die „Enter“-Taste drückst, oder auf den ersten Knoten klickst.\n\n### Löschen\n\nWenn du siehst und weißt, dass ein Gebäude nicht existiert – zum Beispiel, weil du vor Ort warst – kannst du es löschen und es wird von der Karte entfernt. Sei vorsichtig beim Löschen von Objekten, das Ergebnis kann, wie bei jeder anderen Veränderung, von allen gesehen werden. Außerdem sind Satellitenbilder oft veraltet und ein Gebäude könnte einfach neu gebaut sein.\n\nDu kannst ein Gebäude löschen, indem du es auswählst und auf das Papierkorbsymbol klickst oder die „Entfernen“-Taste betätigst.\n",
             "relations": "# Relationen\n\nEine Relation ist ein besonderes Element in OpenStreetMap, welches andere Elemente zusammenfasst. Es gibt zwei gängige Arten von Relationen: *Wegrelationen* fassen Abschnitte eines Weges zu einer Autobahn oder zu einem Wanderweg zusammen. *Multipolygone* fassen mehrere Flächen zu einer komplexen Fläche zusammen, dabei kann auch eine Fläche ein Loch in einer anderen Fläche (wie der Innenhof in einem Gebäude oder die Lichtung im Wald) beschreiben.\n\nDie Elemente in einer Relation werden *Mitglieder* genannt. Im Objekteditor kannst du ganz unten unter \"Alle Relationen\" sehen, in welchen Relationen das Objekt enthalten ist. Durch Klick auf eine Relation werden alle Elemente der Relation im Objekteditor angezeigt und auf der Karte markiert.\n\nNormalerweise kümmert sich iD während der Bearbeitung automatisch um die Pflege der Relationen. Wenn du einen Abschnitt eines Weges löschst, um ihn genauer neu zu zeichnen, solltest du sicherstellen, dass der neuen Abschnitt Mitglied in den gleichen Relationen wie das Original wird.\n\n## Bearbeiten von Relationen\n\nUm ein Element einer Relation hinzuzufügen, wähle das zukünftige Mitglied aus und klicke im Objekteditor auf die Schaltfläche „+“ im Abschnitt „Alle Relationen“. Du kannst dann die Relation auswählen oder den Namen der Relation eintippen.\n\nUm eine neue Relation erstellen, wähle das erste zukünftige Mitglied aus und klicke im Objekteditor auf die Schaltfläche „+“ im Abschnitt „Alle Relationen“ und wähle „Neue Relation …“.\n\nUm ein Element aus einer Relation zu entfernen, wähle das Mitglied aus und klicke auf den Papierkorb neben der Relation, aus der du es entfernen willst.\n\nDu kannst Multipolygone mit Löchern mit dem „Vereinigen“-Werkzeug erstellen. Zeichne zwei Bereiche (den äußeren und den inneren Bereich) und klicke auf den äußeren Bereich. Dann halte die Umschalttaste gedrückt und klicke auf den inneren Bereich und klicke dann auf „Vereinigen“ (+).\n"
         },
         "intro": {
             "relations": "# Relationen\n\nEine Relation ist ein besonderes Element in OpenStreetMap, welches andere Elemente zusammenfasst. Es gibt zwei gängige Arten von Relationen: *Wegrelationen* fassen Abschnitte eines Weges zu einer Autobahn oder zu einem Wanderweg zusammen. *Multipolygone* fassen mehrere Flächen zu einer komplexen Fläche zusammen, dabei kann auch eine Fläche ein Loch in einer anderen Fläche (wie der Innenhof in einem Gebäude oder die Lichtung im Wald) beschreiben.\n\nDie Elemente in einer Relation werden *Mitglieder* genannt. Im Objekteditor kannst du ganz unten unter \"Alle Relationen\" sehen, in welchen Relationen das Objekt enthalten ist. Durch Klick auf eine Relation werden alle Elemente der Relation im Objekteditor angezeigt und auf der Karte markiert.\n\nNormalerweise kümmert sich iD während der Bearbeitung automatisch um die Pflege der Relationen. Wenn du einen Abschnitt eines Weges löschst, um ihn genauer neu zu zeichnen, solltest du sicherstellen, dass der neuen Abschnitt Mitglied in den gleichen Relationen wie das Original wird.\n\n## Bearbeiten von Relationen\n\nUm ein Element einer Relation hinzuzufügen, wähle das zukünftige Mitglied aus und klicke im Objekteditor auf die Schaltfläche „+“ im Abschnitt „Alle Relationen“. Du kannst dann die Relation auswählen oder den Namen der Relation eintippen.\n\nUm eine neue Relation erstellen, wähle das erste zukünftige Mitglied aus und klicke im Objekteditor auf die Schaltfläche „+“ im Abschnitt „Alle Relationen“ und wähle „Neue Relation …“.\n\nUm ein Element aus einer Relation zu entfernen, wähle das Mitglied aus und klicke auf den Papierkorb neben der Relation, aus der du es entfernen willst.\n\nDu kannst Multipolygone mit Löchern mit dem „Vereinigen“-Werkzeug erstellen. Zeichne zwei Bereiche (den äußeren und den inneren Bereich) und klicke auf den äußeren Bereich. Dann halte die Umschalttaste gedrückt und klicke auf den inneren Bereich und klicke dann auf „Vereinigen“ (+).\n"
         },
         "intro": {
             "navigation": {
                 "title": "Navigation",
                 "drag": "Der Kartenbereich zeigt die OpenStreetMap-Daten über einem Hintergrund.{br}Du kannst die Karte verschieben, drücke und halte dazu die linke Maustaste während du die Maus verschiebst. Du kannst auch die Pfeiltasten auf der Tastatur benutzen. **Verschiebe die Karte!**",
             "navigation": {
                 "title": "Navigation",
                 "drag": "Der Kartenbereich zeigt die OpenStreetMap-Daten über einem Hintergrund.{br}Du kannst die Karte verschieben, drücke und halte dazu die linke Maustaste während du die Maus verschiebst. Du kannst auch die Pfeiltasten auf der Tastatur benutzen. **Verschiebe die Karte!**",
-                "zoom": "Du kannst mit dem Mausrad oder dem Trackpad hineinzoomen oder herauszoomen, du kannst dazu auch die {plus} / {minus} Knöpfe klicken. **Zoome die Karte!**",
+                "zoom": "Du kannst mit dem Mausrad oder dem Trackpad hinein oder heraus zoomen, du kannst dazu auch die {plus} / {minus} Knöpfe klicken. **Zoome die Karte!**",
                 "features": "Wir benutzen das Wort *Objekte* um die Dinge zu beschreiben die auf der Karte angezeigt werden. Alles in der echten Welt kann als ein Objekt in OpenStreetMap gezeichnet werden.",
                 "points_lines_areas": "Kartenobjekte werden als Punkte, Linien oder Flächen dargestellt.",
                 "nodes_ways": "In OpenStreetMap werden Punkte manchmal *Knoten* genannt, Linien und Flächen werden manchmal *Wege* genannt.",
                 "features": "Wir benutzen das Wort *Objekte* um die Dinge zu beschreiben die auf der Karte angezeigt werden. Alles in der echten Welt kann als ein Objekt in OpenStreetMap gezeichnet werden.",
                 "points_lines_areas": "Kartenobjekte werden als Punkte, Linien oder Flächen dargestellt.",
                 "nodes_ways": "In OpenStreetMap werden Punkte manchmal *Knoten* genannt, Linien und Flächen werden manchmal *Wege* genannt.",
                 "reselect": "Oft gibt es Punkte die unvollständig oder fehlerhaft sind. Du kannst bestehende Punkte ändern. **Klicke auf das gerade erzeugte Café um es zu selektieren.**",
                 "update": "Gib mehr Details über dieses Café ein. Du kannst seinen Namen ändern, angeben welche Küche dort angeboten wird oder die Adresse eingeben. **Ändere die Details des Café.**",
                 "update_close": "Wenn du das Café fertig geänder hast, drücke Escape oder oder klicke den {button} Knopf um den Objekteditor zu schließen.**",
                 "reselect": "Oft gibt es Punkte die unvollständig oder fehlerhaft sind. Du kannst bestehende Punkte ändern. **Klicke auf das gerade erzeugte Café um es zu selektieren.**",
                 "update": "Gib mehr Details über dieses Café ein. Du kannst seinen Namen ändern, angeben welche Küche dort angeboten wird oder die Adresse eingeben. **Ändere die Details des Café.**",
                 "update_close": "Wenn du das Café fertig geänder hast, drücke Escape oder oder klicke den {button} Knopf um den Objekteditor zu schließen.**",
-                "rightclick": "Du kannst jedes Objekt rechtsklicken um das *Editier-Menu* zu sehen, welches dir eine Liste der möglichen Bearbeitungs-Operationen zeigt. **Rechts-Klicke den erzeugten Punkt und zeige das Editier-Menu.**",
+                "rightclick": "Du kannst jedes Objekt rechts-klicken um das *Bearbeitungs-Menu* zu sehen, welches dir eine Liste der möglichen Bearbeitungs-Operationen zeigt. **Rechts-Klicke den erzeugten Punkt und zeige das Bearbeitungs-Menu.**",
                 "delete": "Du kannst Objekte löschen, die es in der echten Welt nicht gibt.{br}Löschen eines Objets aus OpenStreetMap entfernt es von der Karte, die alle benutzen. Daher solltest du sicher sein, dass das Objekt nicht mehr existiert, bevor du es löschst. **Klicke auf {button} Knopf um den Punkt zu löschen.**",
                 "undo": "Du kannst alle Änderungen rückgängig machen, bis du deine Änderungen zu OpenStreetMap speicherst. **Klicke auf  {button} Knopf um das Löschen rückgängig zu machen und den Punkt wiederherzustellen.**",
                 "play": "Nachdem du jetzt Punkte erzeugen und bearbeiten kannst, versuche zur Übung ein paar Punkte zu erzeugen! **Wenn du zum nächsten Kapitel willst klicke '{next}'.**"
                 "delete": "Du kannst Objekte löschen, die es in der echten Welt nicht gibt.{br}Löschen eines Objets aus OpenStreetMap entfernt es von der Karte, die alle benutzen. Daher solltest du sicher sein, dass das Objekt nicht mehr existiert, bevor du es löschst. **Klicke auf {button} Knopf um den Punkt zu löschen.**",
                 "undo": "Du kannst alle Änderungen rückgängig machen, bis du deine Änderungen zu OpenStreetMap speicherst. **Klicke auf  {button} Knopf um das Löschen rückgängig zu machen und den Punkt wiederherzustellen.**",
                 "play": "Nachdem du jetzt Punkte erzeugen und bearbeiten kannst, versuche zur Übung ein paar Punkte zu erzeugen! **Wenn du zum nächsten Kapitel willst klicke '{next}'.**"
             "areas": {
                 "title": "Flächen",
                 "add_playground": "*Flächen* werden benutzt um die Grenzen von Objekten wie Seen, Gebäuden und Wohngebieten zu zeigen.{br}Sie können benutzt werden, um Objekte die normalerweise als Punkte gezeichnet werden genauer darzustellen. **Klicke auf {button} Fläche um einen neue Fläche zu zeichnen.**",
             "areas": {
                 "title": "Flächen",
                 "add_playground": "*Flächen* werden benutzt um die Grenzen von Objekten wie Seen, Gebäuden und Wohngebieten zu zeigen.{br}Sie können benutzt werden, um Objekte die normalerweise als Punkte gezeichnet werden genauer darzustellen. **Klicke auf {button} Fläche um einen neue Fläche zu zeichnen.**",
-                "start_playground": "Zeichne diesen Spielplatz als Fläche auf der Karte ein. Flächen werden gezeichnet indem *Knoten* entlang der Außengrenze des Objekte gezeichnet werden. **Klicke oder drücke die Leertaste um den Startknoten an einer Ecke des Spielplatzes zu zeichnen.**",
-                "continue_playground": "Setze das Zeichnen der Fläche fort, indem du Knoten entlang der Ecken des Spielplatzes setzt. Du kannst die Fläche mit den bestehenden Fußwegen verbinden.{br}Tipp: Wenn du die ALT Taste gedrückt hältst, dann verhinderst du dass die Knoten sich mit anderen Objekten verbinden. **Setze das Zeichnen der Fläche für den Spielplatz fort.**",
+                "start_playground": "Zeichne diesen Spielplatz als Fläche auf der Karte ein. Flächen werden gezeichnet indem *Knoten* entlang der Außengrenze des Objekte gezeichnet werden. **Klicke oder drücke die Leertaste um den ersten Knoten an einer Ecke des Spielplatzes zu zeichnen.**",
+                "continue_playground": "Setze das Zeichnen der Fläche fort, indem du Knoten entlang der Ecken des Spielplatzes setzt. Du kannst die Fläche mit den bestehenden Fußwegen verbinden.{br}Tipp: Wenn du die Alt Taste gedrückt hältst, dann verhinderst du dass die Knoten sich mit anderen Objekten verbinden. **Setze das Zeichnen der Fläche für den Spielplatz fort.**",
                 "finish_playground": "Beende die Fläche durch Drücken von Enter oder nochmaliges Klicken auf den ersten oder letzten Knoten. **Beende das Zeichnen der Fläche für den Spielplatz.**",
                 "search_playground": "**Suche nach '{preset}'.**",
                 "choose_playground": "**Wähle {preset} aus der Liste.**",
                 "finish_playground": "Beende die Fläche durch Drücken von Enter oder nochmaliges Klicken auf den ersten oder letzten Knoten. **Beende das Zeichnen der Fläche für den Spielplatz.**",
                 "search_playground": "**Suche nach '{preset}'.**",
                 "choose_playground": "**Wähle {preset} aus der Liste.**",
             "lines": {
                 "title": "Linien",
                 "add_line": "*Linien* werden benutzt um Objekt wie Straßen, Eisenbahnschienen und Flüsse zu zeichnen. **Klicke auf {button} Linie um eine neue Linie zu zeichnen.**",
             "lines": {
                 "title": "Linien",
                 "add_line": "*Linien* werden benutzt um Objekt wie Straßen, Eisenbahnschienen und Flüsse zu zeichnen. **Klicke auf {button} Linie um eine neue Linie zu zeichnen.**",
-                "start_line": "Hier gibt es eine Straße die in OpenStreetMap fehlt.{br}Zeichne sie ein! In OpenStreetMap soll die Linie in der Mitte der Straße gezeichnet werden. Du kannst die Karte während des Zeichnen verschieden wenn das notwendig ist. **Beginne die neue Linie durch klicken auf das obere Ende der fehlenden Straße.**",
+                "start_line": "Hier gibt es eine Straße die in OpenStreetMap fehlt.{br}Zeichne sie ein! In OpenStreetMap soll die Linie in der Mitte der Straße gezeichnet werden. Du kannst die Karte während des Zeichnen verschieben, wenn das notwendig ist. **Beginne die neue Linie durch klicken auf das obere Ende der fehlenden Straße.**",
                 "intersect": "Klicke oder drücke die Leertaste um weitere Knoten der Linie zu zeichnen.{br} Straßen und viele andere Arten von Linien sind Teil eines größeren Netzwerks. Es ist wichtig dass diese Linien verbunden sind, damit Routing-Anwendungen funktionieren. **Klicke auf {name} um eine Verbindung zwischen den beiden Linien zu erzeugen.**",
                 "retry_intersect": "Diese Straße soll {name} kreuzen. Versuch es nochmals!",
                 "continue_line": "Setze das Zeichnen der Linie für die neue Straße fort. Du kannst die Karte verschieben, wenn das notwendig ist.{br}Wenn du fertig gezeichnet hast klicke nochmals auf den letzten Knoten. **Beende das Zeichnen der Straße.**",
                 "intersect": "Klicke oder drücke die Leertaste um weitere Knoten der Linie zu zeichnen.{br} Straßen und viele andere Arten von Linien sind Teil eines größeren Netzwerks. Es ist wichtig dass diese Linien verbunden sind, damit Routing-Anwendungen funktionieren. **Klicke auf {name} um eine Verbindung zwischen den beiden Linien zu erzeugen.**",
                 "retry_intersect": "Diese Straße soll {name} kreuzen. Versuch es nochmals!",
                 "continue_line": "Setze das Zeichnen der Linie für die neue Straße fort. Du kannst die Karte verschieben, wenn das notwendig ist.{br}Wenn du fertig gezeichnet hast klicke nochmals auf den letzten Knoten. **Beende das Zeichnen der Straße.**",
                 "did_name_road": "Schaut gut aus! Jetzt wirst du lernen wie die den Zustand einer Linie verbessern kannst.",
                 "update_line": "Manchmal musst du den Zustand einer bestehenden Linie verbessern. Hier ist eine Straße die nicht ganz richtig ausschaut.",
                 "add_node": "Du kannst weitere Knoten zu einer Linie hinzufügen, um den Zustand einer Linie zu verbessern. Eine Möglichkeit um neue Knoten zu zeichnen ist ein Doppelklick auf die Stelle der Linie, wo der neue Knoten entstehen soll. **Doppelklicke auf die Linie um einen neuen Knoten zu erzeugen.**",
                 "did_name_road": "Schaut gut aus! Jetzt wirst du lernen wie die den Zustand einer Linie verbessern kannst.",
                 "update_line": "Manchmal musst du den Zustand einer bestehenden Linie verbessern. Hier ist eine Straße die nicht ganz richtig ausschaut.",
                 "add_node": "Du kannst weitere Knoten zu einer Linie hinzufügen, um den Zustand einer Linie zu verbessern. Eine Möglichkeit um neue Knoten zu zeichnen ist ein Doppelklick auf die Stelle der Linie, wo der neue Knoten entstehen soll. **Doppelklicke auf die Linie um einen neuen Knoten zu erzeugen.**",
-                "start_drag_endpoint": "Wenn diese Linie selektiert ist kannst du jeden Knoten dieser Linie verschieben, indem du den Knoten anklickst, den Mausknopf gedrückt hältst und den Knoten verschiebst. **Schiebe den Endpunkt der Linie dorthin wo sich diese Straßen kreuzen sollen.**",
+                "start_drag_endpoint": "Wenn eine Linie selektiert ist, kannst du jeden Knoten dieser Linie verschieben, indem du den Knoten anklickst, den Mausknopf gedrückt hältst und den Knoten verschiebst. **Schiebe den letzen Knoten der Linie dorthin wo sich diese Straßen kreuzen sollen.**",
                 "finish_drag_endpoint": "Hier schaut es gut aus. **Lass den Mausknopf aus um das Verschieben zu beenden.**",
                 "finish_drag_endpoint": "Hier schaut es gut aus. **Lass den Mausknopf aus um das Verschieben zu beenden.**",
-                "start_drag_midpoint": "Kleine Dreiecke werden am *Mittelpunkt* zwischen zwei Knoten angezeigt. Eine weitere Möglichkeit um einen neuen Knoten zu erzeugen ist das Verschieben dieses Mittelpunks zu einer neuen Position. **Schiebe den Mittelpunkt und erzeuge damit einen neuen Knoten in der Straßenkurve.**",
+                "start_drag_midpoint": "Kleine Dreiecke werden am *Mittelpunkt* zwischen zwei Knoten angezeigt. Eine weitere Möglichkeit um einen neuen Knoten zu erzeugen ist das Verschieben dieses Mittelpunkts zu einer neuen Position. **Schiebe den Mittelpunkt und erzeuge damit einen neuen Knoten in der Straßenkurve.**",
                 "continue_drag_midpoint": "Diese Linie schaut viel besser aus! Setze das Anpassen der Linie durch Doppelklicken oder Verschieben von Mittelpunkten fort, bis die Kurve dem Straßenverlauf folgt. **Wenn Dir die Linie gefällt, klicke OK.**",
                 "delete_lines": "Wenn es Straßen in der echten Welt nicht gibt, kannst du die zugehörigen Linien löschen.{br}Hier hat die Stadt eine {street} geplant, aber nie gebaut. Du kannst diesen Teil der Karte verbessern, wenn du die zusätzlichen Linien löschst.",
                 "continue_drag_midpoint": "Diese Linie schaut viel besser aus! Setze das Anpassen der Linie durch Doppelklicken oder Verschieben von Mittelpunkten fort, bis die Kurve dem Straßenverlauf folgt. **Wenn Dir die Linie gefällt, klicke OK.**",
                 "delete_lines": "Wenn es Straßen in der echten Welt nicht gibt, kannst du die zugehörigen Linien löschen.{br}Hier hat die Stadt eine {street} geplant, aber nie gebaut. Du kannst diesen Teil der Karte verbessern, wenn du die zusätzlichen Linien löschst.",
-                "rightclick_intersection": "Die letzte bestehende Straße ist {street1}, daher wirst du die {street2} an dieser Kreuzung teilen und alle darüber löschen. **Rechts-klicke auf den Kreuzungs-Knoten:**",
+                "rightclick_intersection": "Die letzte bestehende Straße ist {street1}, daher wirst du die {street2} an dieser Kreuzung teilen und alle darüber löschen. **Rechts-Klicke auf den Kreuzungs-Knoten:**",
                 "split_intersection": "**Klicke auf {button} Knopf um die {street} zu teilen.**",
                 "retry_split": "Du hast den Teilen-Knopf nicht gedrückt. Versuch es nochmals.",
                 "split_intersection": "**Klicke auf {button} Knopf um die {street} zu teilen.**",
                 "retry_split": "Du hast den Teilen-Knopf nicht gedrückt. Versuch es nochmals.",
-                "did_split_multi": "Gut gemacht! Die {street1} wurde nun in zwei Teile geteilt. Der obere Teil kann gelöscht werden. **Klicke den oberen Teil von {street2} an.**",
+                "did_split_multi": "Gut gemacht! Die {street1} ist jetzt in zwei Teile geteilt, der obere Teil kann gelöscht werden. **Klicke den oberen Teil der {street2} an.**",
                 "did_split_single": "**Klicke den oberen Teil von {street2} zum selektieren.**",
                 "did_split_single": "**Klicke den oberen Teil von {street2} zum selektieren.**",
-                "multi_select": "Die {selected} ist jetzt selektiert. Selektiere zusätzlich {other1}. Du kannst Shift festhalten und klicken (Shift-klick) um mehrere Dinge zu selektieren. **Shift-Klicke auf {other2}.**",
-                "multi_rightclick": "Gut! Beide zu löschenden Linien sind jetzt selektiert. **Rechts-klicke auf eine der beiden Linien um das Editier-Menu zu zeigen.**",
+                "multi_select": "Die {selected} ist jetzt gewählt. Wähle zusätzlich {other1}. Du kannst Shift-Klicken, also kannst Shift festhalten und klicken um mehrere Dinge zu wählen. **Shift-Klicke auf {other2}.**",
+                "multi_rightclick": "Gut! Beide zu löschenden Linien sind jetzt selektiert. **Rechts-Klicke auf eine der beiden Linien um das Bearbeitungs-Menu zu zeigen.**",
                 "multi_delete": "**Klicke auf {button} Knopf um die zusätzlichen Linien zu löschen.**",
                 "retry_delete": "Du hast den Löschen-Knopf nicht geklickt. Versuche es nochmals.",
                 "play": "Großartig! Du kannst jetzt das Gelernte verwenden und das Bearbeiten von Linien ausprobieren. **Wenn du zum nächsten Kapitel willst klicke '{next}'.**"
                 "multi_delete": "**Klicke auf {button} Knopf um die zusätzlichen Linien zu löschen.**",
                 "retry_delete": "Du hast den Löschen-Knopf nicht geklickt. Versuche es nochmals.",
                 "play": "Großartig! Du kannst jetzt das Gelernte verwenden und das Bearbeiten von Linien ausprobieren. **Wenn du zum nächsten Kapitel willst klicke '{next}'.**"
                 "title": "Gebäude",
                 "add_building": "OpenStreetMap ist die größte Gebäude-Datenbank der Welt.{br}Du kannst helfen diese Datenbank zu verbessern, indem du Gebäude einzeichnest, die in der Karte noch fehlen. **Klicke auf {button} Fläche um eine neue Fläche zu zeichnen.**",
                 "start_building": "Zeichne dieses Gebäude in der Karte ein, indem du seine Umrisse zeichnest.{br}Gebäude sollten entlang ihrer Grundfläche so genau wie möglich gezeichnet werden. **Klick oder drücke die Leertaste um den Startknoten auf einer Ecke des Gebäudes zu zeichnen.**",
                 "title": "Gebäude",
                 "add_building": "OpenStreetMap ist die größte Gebäude-Datenbank der Welt.{br}Du kannst helfen diese Datenbank zu verbessern, indem du Gebäude einzeichnest, die in der Karte noch fehlen. **Klicke auf {button} Fläche um eine neue Fläche zu zeichnen.**",
                 "start_building": "Zeichne dieses Gebäude in der Karte ein, indem du seine Umrisse zeichnest.{br}Gebäude sollten entlang ihrer Grundfläche so genau wie möglich gezeichnet werden. **Klick oder drücke die Leertaste um den Startknoten auf einer Ecke des Gebäudes zu zeichnen.**",
-                "continue_building": "Erstelle weitere Knoten um den Umriss des Gebäudes zu zeichnen. Du kannst auf hineinzoomen wenn du genauer zeichnen willst.{br}Beende das Gebäude durch drücken von Enter oder nochmaliges Klicken auf den ersten oder letzten Knoten.**Vollende den Umriss des Gebäudes.**",
+                "continue_building": "Erstelle weitere Knoten um den Umriss des Gebäudes zu zeichnen. Du kannst auf hinein zoomen wenn du genauer zeichnen willst.{br}Beende das Gebäude durch drücken von Enter oder nochmaliges Klicken auf den ersten oder letzten Knoten.**Vollende den Umriss des Gebäudes.**",
                 "retry_building": "Es schaut so aus als hättest du die Knoten nicht auf die Ecken des Gebäudes gesetzt. Versuche es noch einmal!",
                 "choose_category_building": "**Wähle {category} aus der Liste.**",
                 "choose_preset_house": "Es gibt viele verschiedene Arten von Gebäuden, dieses ist eindeutig ein Einfamilienhaus.{br}Wenn du beim Gebäudetyp unsicher bist, wähle einfach Gebäude. **Wähle {preset}.**",
                 "close": "**Drücke Escape oder klicke auf {button} Knopf um dem Objekteditor zu schließen.**",
                 "retry_building": "Es schaut so aus als hättest du die Knoten nicht auf die Ecken des Gebäudes gesetzt. Versuche es noch einmal!",
                 "choose_category_building": "**Wähle {category} aus der Liste.**",
                 "choose_preset_house": "Es gibt viele verschiedene Arten von Gebäuden, dieses ist eindeutig ein Einfamilienhaus.{br}Wenn du beim Gebäudetyp unsicher bist, wähle einfach Gebäude. **Wähle {preset}.**",
                 "close": "**Drücke Escape oder klicke auf {button} Knopf um dem Objekteditor zu schließen.**",
-                "rightclick_building": "**Rechts-klicke das gerade erzeugte Gebäude um es zu selektieren und zeige das Editier-Menu.**",
-                "square_building": "Das gerade gezeichnete Haus schaut besser aus, wenn es perfekt rechtwinklige Kanten hat. **Klicke auf {button} Knopf um das Gebäude rechtwinklig zu machen.**",
+                "rightclick_building": "**Rechts-Klicke das gerade erzeugte Gebäude um es zu selektieren und zeige das Bearbeitungs-Menu.**",
+                "square_building": "Das gerade gezeichnete Haus schaut besser aus, wenn es perfekt rechtwinklige Ecken hat. **Klicke auf {button} Knopf um die Gebäudeecken rechtwinklig zu machen.**",
                 "retry_square": "Du hast nicht den Rechtwinklig-Machen-Knopf geklickt. Versuch es noch einmal.",
                 "done_square": "Siehst du wie die Ecken des Gebäude auf die richtige Stelle rücken? Schaut Dir noch einen anderen nützlichen Trick an.",
                 "add_tank": "Als Nächstes wirst du einen kreisrunden Tank zeichnen. **Klicke auf {button} Fläche um eine neue Fläche zu zeichnen.**",
                 "retry_square": "Du hast nicht den Rechtwinklig-Machen-Knopf geklickt. Versuch es noch einmal.",
                 "done_square": "Siehst du wie die Ecken des Gebäude auf die richtige Stelle rücken? Schaut Dir noch einen anderen nützlichen Trick an.",
                 "add_tank": "Als Nächstes wirst du einen kreisrunden Tank zeichnen. **Klicke auf {button} Fläche um eine neue Fläche zu zeichnen.**",
-                "start_tank": "Du musst keinen perfekten Kreis zeichnen. Zeichne einfach eine Fläche innerhalb des Tanks die seinen Rand berührt. **Klicke oder drücke die Leertaste um den Startknoten an Rand des Lagertanks zu zeichnen.**",
-                "continue_tank": "Zeichne noch zwei weitere Knoten am Rad. Der Kreis wird außerhalb der gezeichneten Knoten erzeugt.{br}Beende die Fläche durch Drücken von Enter oder nochmaliges klicken auf den ersten oder letzten Knoten.**Zeichne den Tank fertig.**",
+                "start_tank": "Du musst keinen perfekten Kreis zeichnen. Zeichne einfach eine Fläche innerhalb des Tanks die seinen Rand berührt. **Klicke oder drücke die Leertaste um den ersten Knoten an Rand des Lagertanks zu zeichnen.**",
+                "continue_tank": "Zeichne noch zwei weitere Knoten am Rand. Der Kreis wird außerhalb der gezeichneten Knoten erzeugt.{br}Beende die Fläche durch Drücken von Enter oder nochmal Klicken auf den ersten oder letzten Knoten.**Zeichne den Tank fertig.**",
                 "search_tank": "**Suche nach '{preset}'.**",
                 "choose_tank": "**Wähle {preset} von der Liste.**",
                 "search_tank": "**Suche nach '{preset}'.**",
                 "choose_tank": "**Wähle {preset} von der Liste.**",
-                "rightclick_tank": "**Selektiere den gezeichneten Tank durch rechtsklicken und zeige das Editier-Menu.**",
-                "circle_tank": "**Klicke auf {button} Knopf um aus dem Tank einen Kreis zu formen.**",
-                "retry_circle": "**Du hast nicht den Kreis-formen Knopf gedrückt. Versuche es noch einmal.",
-                "play": "Super Arbeit! Zeichne noch ein paar Gebäude und probiere dabei anderen Möglichkeiten im Editier-Menu. **Wenn du zum nächsten Kapitel willst klicke '{next}'.**"
+                "rightclick_tank": "**Selektiere den gezeichneten Tank durch rechtsklicken und zeige das Bearbeitungs-Menu.**",
+                "circle_tank": "**Klicke auf {button} Knopf um den Tank kreisförmig zu machen.**",
+                "retry_circle": "**Du hast nicht den Kreisförmig-machen Knopf gedrückt. Versuche es noch einmal.",
+                "play": "Super Arbeit! Zeichne noch ein paar Gebäude und probiere dabei anderen Möglichkeiten im Bearbeitungs-Menu. **Wenn du zum nächsten Kapitel willst klicke '{next}'.**"
             },
             "startediting": {
                 "title": "Bearbeiten",
             },
             "startediting": {
                 "title": "Bearbeiten",
                 "start": "Fange an zu bearbeiten!"
             }
         },
                 "start": "Fange an zu bearbeiten!"
             }
         },
+        "shortcuts": {
+            "title": "Tastenkürzel",
+            "tooltip": "Tastenkürzel-Bildschirm anzeigen",
+            "key": {
+                "alt": "Alt",
+                "backspace": "← Rück",
+                "cmd": "Cmd",
+                "ctrl": "Strg",
+                "delete": "Entf",
+                "del": "Entf",
+                "end": "Ende",
+                "enter": "Enter",
+                "esc": "Esc",
+                "home": "Pos1",
+                "option": "Option",
+                "pause": "Pause",
+                "pgdn": "Bild ↓",
+                "pgup": "Bild ↑",
+                "return": "Eingabe",
+                "shift": "Shift",
+                "space": "Leertaste"
+            },
+            "gesture": {
+                "drag": "ziehen"
+            },
+            "or": "oder",
+            "browsing": {
+                "title": "Browsen",
+                "navigation": {
+                    "title": "Navigation",
+                    "pan": "Karte verschieben",
+                    "pan_more": "Karte um einen Bildschirminhalt verschieben",
+                    "zoom": "Hinein / Heraus zoomen",
+                    "zoom_more": "Weit hinein / Weit heraus zoomen"
+                },
+                "help": {
+                    "title": "Hilfe",
+                    "help": "Hilfe ein-/ausblenden",
+                    "keyboard": "Tastenkürzel ein-/ausblenden"
+                },
+                "display_options": {
+                    "title": "Anzeigeoptionen",
+                    "background": "Hintergrundeinstellungen ein-/ausblenden",
+                    "background_switch": "Auf letzten Hintergrund zurückschalten",
+                    "map_data": "Kartendaten ein-/ausblenden",
+                    "fullscreen": "Vollbildmodus ein-/ausschalten",
+                    "wireframe": "Drahtgitter-Modus ein-/ausschalten",
+                    "minimap": "Minimap ein-/ausblenden"
+                },
+                "selecting": {
+                    "title": "Objekte auswählen",
+                    "select_one": "Einzelnes Objekt auswählen",
+                    "select_multi": "Mehrere Objekte auswählen",
+                    "lasso": "Ziehe ein Lasso um die Objekte herum"
+                },
+                "with_selected": {
+                    "title": "Mit gewähltem Objekt",
+                    "infobox": "Info/Abmessung ein-/ausblenden",
+                    "edit_menu": "Bearbeitungs-Menu ein-/ausblenden"
+                },
+                "vertex_selected": {
+                    "title": "Mit gewähltem Knoten",
+                    "previous": "Voriger Knoten ",
+                    "next": "Nächster Knoten",
+                    "first": "Erster Knoten",
+                    "last": "Letzter Knoten",
+                    "change_parent": "Linie/Fläche wechseln"
+                }
+            },
+            "editing": {
+                "title": "Bearbeiten",
+                "drawing": {
+                    "title": "Zeichnen",
+                    "add_point": "'Neuen Punkt hinzufügen' (Modus)",
+                    "add_line": "'Neue Linie hinzufügen' (Modus)",
+                    "add_area": "'Neue Fläche hinzufügen' (Modus)",
+                    "place_point": "Punkt platzieren",
+                    "disable_snap": "Festhalten um Punkt beim Platzieren nicht zu vereinigen",
+                    "stop_line": "Zeichnen einer Linie oder Fläche abschließen"
+                },
+                "operations": {
+                    "title": "Tätigkeiten",
+                    "continue_line": "Linie am gewählten Knoten fortsetzen",
+                    "merge": "Vereinige die gewählten Objekte",
+                    "disconnect": "Objekte am gewählten Knoten trennen",
+                    "split": "Linie am gewählten Knoten in zwei Linien teilen",
+                    "reverse": "Richtung der Linie umkehren",
+                    "move": "Gewählte Objekte verschieben",
+                    "rotate": "Gewählte Objekte drehen",
+                    "orthogonalize": "Linie gerade biegen / Ecken rechtwinklig machen",
+                    "circularize": "Gechlossene Linie/Fläche kreisförmig machen",
+                    "reflect_long": "Objekte an der lange Achse spiegeln",
+                    "reflect_short": "Objekte an der kurzen Achse spiegeln",
+                    "delete": "Gewählte Objekte löschen"
+                },
+                "commands": {
+                    "title": "Befehle",
+                    "copy": "Gewählte Objekte kopieren",
+                    "paste": "Kopierte Objekte einfügen",
+                    "undo": "Letzte Bearbeitung rückgängig machen",
+                    "redo": "Letzte Bearbeitung wiederherstellen",
+                    "save": "Änderungen speichern"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                     "options": {
                         "foot_bath": "Fußbad",
                         "hot_spring": "Therme",
                     "options": {
                         "foot_bath": "Fußbad",
                         "hot_spring": "Therme",
-                        "onsen": "Japanische heiße Quelle (Onsen)"
+                        "onsen": "Japanische heiße Quelle Onsen"
                     }
                 },
                 "beauty": {
                     }
                 },
                 "beauty": {
                     "label": "SSID (Netzwerk Name)"
                 },
                 "kerb": {
                     "label": "SSID (Netzwerk Name)"
                 },
                 "kerb": {
-                    "label": "Bordsteinabsenkung"
+                    "label": "Bordstein"
                 },
                 "lamp_type": {
                     "label": "Typ"
                 },
                 "lamp_type": {
                     "label": "Typ"
                 "maxstay": {
                     "label": "Maximale Parkzeit"
                 },
                 "maxstay": {
                     "label": "Maximale Parkzeit"
                 },
+                "maxweight": {
+                    "label": "Maximalgewicht"
+                },
                 "mtb/scale": {
                     "label": "Mountainbike-Schwierigkeitsgrad",
                     "options": {
                 "mtb/scale": {
                     "label": "Mountainbike-Schwierigkeitsgrad",
                     "options": {
                     "label": "Typ",
                     "options": {
                         "carports": "Carports",
                     "label": "Typ",
                     "options": {
                         "carports": "Carports",
-                        "garage_boxes": "Garagen",
+                        "garage_boxes": "Garagenboxen",
                         "lane": "Parkstreifen am Straßenrand",
                         "multi-storey": "Parkhaus",
                         "sheds": "Schuppen",
                         "lane": "Parkstreifen am Straßenrand",
                         "multi-storey": "Parkhaus",
                         "sheds": "Schuppen",
                     "terms": "Geldautomat, Bankautomat, Bankomat, Bancomat, Geldausgabeautomat, ATM"
                 },
                 "amenity/bank": {
                     "terms": "Geldautomat, Bankautomat, Bankomat, Bancomat, Geldausgabeautomat, ATM"
                 },
                 "amenity/bank": {
-                    "name": "Bank (Geldinstitut)",
+                    "name": "Bank-Fiiale",
                     "terms": "Kasse, Kontor, Kreditgenossenschaft, Lagerstelle, Fiskus, Fonds, Vermögen, Investmentfirma, Register, Rücklage, Vorrat, Tresor, Rücklagen, Grundkapital, Vorrat, Lager, Lagerhaus, Sparkasse, Schatz, Treuhandgesellschaft, Tresorraum"
                 },
                 "amenity/bar": {
                     "terms": "Kasse, Kontor, Kreditgenossenschaft, Lagerstelle, Fiskus, Fonds, Vermögen, Investmentfirma, Register, Rücklage, Vorrat, Tresor, Rücklagen, Grundkapital, Vorrat, Lager, Lagerhaus, Sparkasse, Schatz, Treuhandgesellschaft, Tresorraum"
                 },
                 "amenity/bar": {
                 },
                 "barrier/gate": {
                     "name": "Tor",
                 },
                 "barrier/gate": {
                     "name": "Tor",
-                    "terms": "Tor, Gatter"
+                    "terms": "Gatter, Tor"
                 },
                 "barrier/hedge": {
                     "name": "Hecke",
                 },
                 "barrier/hedge": {
                     "name": "Hecke",
                     "name": "Eingang/Ausgang"
                 },
                 "building/garage": {
                     "name": "Eingang/Ausgang"
                 },
                 "building/garage": {
-                    "name": "Garage",
-                    "terms": "Garage"
+                    "name": "Einzelgarage",
+                    "terms": "Einzelgarage"
                 },
                 "building/garages": {
                 },
                 "building/garages": {
-                    "name": "Garagen",
-                    "terms": "Garagen"
+                    "name": "Mehrfachgaragen",
+                    "terms": "Mehrfachgaragen"
                 },
                 "building/greenhouse": {
                     "name": "Gewächshaus",
                 },
                 "building/greenhouse": {
                     "name": "Gewächshaus",
                     "name": "Süßwarengeschäft",
                     "terms": "Pralinengeschäft,Süßwarengeschäft,Bonbonladen"
                 },
                     "name": "Süßwarengeschäft",
                     "terms": "Pralinengeschäft,Süßwarengeschäft,Bonbonladen"
                 },
+                "craft/distillery": {
+                    "name": "Brennerei",
+                    "terms": "Brennerei, Schnapsbrennerei, Destillerie"
+                },
                 "craft/dressmaker": {
                     "name": "Damenschneiderei",
                     "terms": "Schneiderei, Damenschneiderei"
                 "craft/dressmaker": {
                     "name": "Damenschneiderei",
                     "terms": "Schneiderei, Damenschneiderei"
                     "name": "Elektriker",
                     "terms": "Elektriker"
                 },
                     "name": "Elektriker",
                     "terms": "Elektriker"
                 },
+                "craft/electronics_repair": {
+                    "name": "Elektronik-Reparatur-Geschäft",
+                    "terms": "Elektronik-Reparatur-Geschäft"
+                },
                 "craft/gardener": {
                     "name": "Gärtner",
                     "terms": "Gärtner, Landschaftsgärtner"
                 "craft/gardener": {
                     "name": "Gärtner",
                     "terms": "Gärtner, Landschaftsgärtner"
                 },
                 "highway/bridleway": {
                     "name": "Reitweg",
                 },
                 "highway/bridleway": {
                     "name": "Reitweg",
-                    "terms": "Reitweg, Reiterweg"
+                    "terms": "Reitweg, Reiterweg, Pferdeweg, Reitpfad"
                 },
                 "highway/bus_stop": {
                     "name": "Bushaltestelle",
                 },
                 "highway/bus_stop": {
                     "name": "Bushaltestelle",
                 },
                 "highway/cycleway": {
                     "name": "Radweg",
                 },
                 "highway/cycleway": {
                     "name": "Radweg",
-                    "terms": "Radweg, Radfahrweg, Radfahrerweg"
+                    "terms": "Radweg, Radfahrweg, Radfahrerweg, Fahrradweg, Fahrradpfad"
+                },
+                "highway/elevator": {
+                    "name": "Aufzug",
+                    "terms": "Aufzug, Fahrstuhl, Lift, Personenaufzug, Aufzugsanlage"
                 },
                 "highway/footway": {
                     "name": "Fußweg",
                 },
                 "highway/footway": {
                     "name": "Fußweg",
-                    "terms": "Fußweg, Fußgängerweg, Fußpfad"
+                    "terms": "Fußweg, Fußgängerweg, Pfad"
                 },
                 "highway/give_way": {
                     "name": "Vorfahrt gewähren",
                 },
                 "highway/give_way": {
                     "name": "Vorfahrt gewähren",
                     "terms": "Autobahnanschluss, Autobahnauffahrt, Autobahnabfahrt, Auffahrt, Abfahrt"
                 },
                 "highway/path": {
                     "terms": "Autobahnanschluss, Autobahnauffahrt, Autobahnabfahrt, Auffahrt, Abfahrt"
                 },
                 "highway/path": {
-                    "name": "Mehrzweckweg",
-                    "terms": "Mehrzweckweg, Pfad, Wanderweg, Wanderpfad, Radweg, Fußweg"
+                    "name": "Weg/Pfad",
+                    "terms": "Weg, Pfad, Wanderweg, Reitweg, Radweg, Fußweg, Mehrzweckweg"
                 },
                 "highway/pedestrian": {
                     "name": "Fußgängerzone",
                 },
                 "highway/pedestrian": {
                     "name": "Fußgängerzone",
                     "terms": "Durchfahrtsbedienung, Drive-in, Durchfahrt"
                 },
                 "highway/service/driveway": {
                     "terms": "Durchfahrtsbedienung, Drive-in, Durchfahrt"
                 },
                 "highway/service/driveway": {
-                    "name": "Zufahrtsweg",
-                    "terms": "Zufahrtsweg, Auffahrt, Zufahrt, Zugangsweg, Zufahrtsstraße"
+                    "name": "Grundstücks-Zufahrt",
+                    "terms": "Grundstücks-Zufahrt, Zufahrtsweg, Auffahrt, Zufahrt, Zugangsweg, Zufahrtsstraße"
                 },
                 "highway/service/emergency_access": {
                     "name": "Zufahrtsstraße für Rettungskräfte",
                 },
                 "highway/service/emergency_access": {
                     "name": "Zufahrtsstraße für Rettungskräfte",
                     "terms": "Forst, Forstwald, bewirtschafteter Wald, Wald"
                 },
                 "landuse/garages": {
                     "terms": "Forst, Forstwald, bewirtschafteter Wald, Wald"
                 },
                 "landuse/garages": {
-                    "name": "große Garagenfläche",
-                    "terms": "Garagen"
+                    "name": "Garagengebiet",
+                    "terms": "Garagengebiet, Vielfahcgaragen, große Garagenflächen"
                 },
                 "landuse/grass": {
                     "name": "Gras",
                 },
                 "landuse/grass": {
                     "name": "Gras",
                     "terms": "Resort, touristische Hotelanlage"
                 },
                 "leisure/running_track": {
                     "terms": "Resort, touristische Hotelanlage"
                 },
                 "leisure/running_track": {
-                    "name": "Laufbahn",
-                    "terms": "Laufbahn, Laufstrecke"
+                    "name": "Rennbbahn (Laufen)",
+                    "terms": "Rennbbahn (Laufen)Laufbahn, Laufstrecke"
                 },
                 "leisure/slipway": {
                     "name": "Slipanlage",
                 },
                 "leisure/slipway": {
                     "name": "Slipanlage",
                     "terms": "natürliche Graslandschaften"
                 },
                 "natural/heath": {
                     "terms": "natürliche Graslandschaften"
                 },
                 "natural/heath": {
-                    "name": "Heide",
-                    "terms": "Heide"
+                    "name": "Heidelandschaft",
+                    "terms": "Heidelandschaft"
                 },
                 "natural/peak": {
                 },
                 "natural/peak": {
-                    "name": "Gipfel",
+                    "name": "Berggipfel",
                     "terms": "Gipfel,Felsnadel,Hügel,Berg,Bergspitze,Bergkuppe,Zipfel"
                 },
                 "natural/ridge": {
                     "terms": "Gipfel,Felsnadel,Hügel,Berg,Bergspitze,Bergkuppe,Zipfel"
                 },
                 "natural/ridge": {
                     "terms": "Stromgenerator"
                 },
                 "power/line": {
                     "terms": "Stromgenerator"
                 },
                 "power/line": {
-                    "name": "Stromleitung (Hochspannung)",
-                    "terms": "Stromleitung (Hochspannung), Freileitung, Überlandleitung, Hochspannungsleitung"
+                    "name": "Stromleitung-Hochspannung",
+                    "terms": "Stromleitung-Hochspannung, Freileitung, Überlandleitung, Hochspannungsleitung"
                 },
                 "power/minor_line": {
                 },
                 "power/minor_line": {
-                    "name": "Stromleitung (Mittel-/Niederspannung)",
-                    "terms": "Stromleitung (Mittel-/Niederspannung), Niederspannungsleitung, Mittelspannungsleitung, Freileitung, Niederspannungsfreileitung, Mittelspannungsfreileitung"
+                    "name": "Stromleitung-Niederspannung",
+                    "terms": "Stromleitung-Niederspannung), Niederspannungsleitung, Mittelspannungsleitung, Freileitung, Niederspannungsfreileitung, Mittelspannungsfreileitung"
                 },
                 "power/plant": {
                     "name": "Kraftwerksgelände",
                 },
                 "power/plant": {
                     "name": "Kraftwerksgelände",
                     "name": "Antiquitätenladen",
                     "terms": "Antiquitätengeschäft"
                 },
                     "name": "Antiquitätenladen",
                     "terms": "Antiquitätengeschäft"
                 },
+                "shop/appliance": {
+                    "name": "Haushaltselektrogerätegeschäft",
+                    "terms": "Haushaltselektrogerätegeschäft, Elektroschäft"
+                },
                 "shop/art": {
                     "name": "Kunsthandlung",
                     "terms": "Kunsthandlung, Kunstgeschäft, "
                 "shop/art": {
                     "name": "Kunsthandlung",
                     "terms": "Kunsthandlung, Kunstgeschäft, "
                 },
                 "type/restriction/no_u_turn": {
                     "name": "Kehrtwendeverbot",
                 },
                 "type/restriction/no_u_turn": {
                     "name": "Kehrtwendeverbot",
-                    "terms": "Kehrtwendeverbot, Kehrtwende verboten, Umdrehen verboten"
+                    "terms": "Kehrtwendeverbot, Kehrtwende verboten, Umkehren verboten, Umdrehen verboten"
                 },
                 "type/restriction/only_left_turn": {
                     "name": "Linksabbiegegebot",
                 },
                 "type/restriction/only_left_turn": {
                     "name": "Linksabbiegegebot",
index b41cdcf64dfb07c5da7cea1d6b6cf0332603a2f8..4920065e309dea9fc0659c6de9e65545d303708d 100644 (file)
         "help": {
             "title": "Help",
             "help": "# Help\n\nThis is an editor for [OpenStreetMap](http://www.openstreetmap.org/), the\nfree and editable map of the World. You can use it to add and update\ndata in your area, making an open-source and open-data map of the world\nbetter for everyone.\n\nEdits that you make on this map will be visible to everyone who uses\nOpenStreetMap. In order to make an edit, you'll need to\n[log in](https://www.openstreetmap.org/login).\n\nThe [iD editor](http://ideditor.com/) is a collaborative project with [source\ncode available on GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Help",
             "help": "# Help\n\nThis is an editor for [OpenStreetMap](http://www.openstreetmap.org/), the\nfree and editable map of the World. You can use it to add and update\ndata in your area, making an open-source and open-data map of the world\nbetter for everyone.\n\nEdits that you make on this map will be visible to everyone who uses\nOpenStreetMap. In order to make an edit, you'll need to\n[log in](https://www.openstreetmap.org/login).\n\nThe [iD editor](http://ideditor.com/) is a collaborative project with [source\ncode available on GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Editing & Saving\n\nThis editor is designed to work primarily online, and you're accessing\nit through a website right now.\n\n### Selecting Features\n\nTo select a map feature, like a road or point of interest, click\non it on the map. This will highlight the selected feature, open a panel with\ndetails about it, and show a menu of things you can do with the feature.\n\nTo select multiple features, hold down the 'Shift' key. Then either click\non the features you want to select, or drag on the map to draw a rectangle.\nThis will draw a box and select all the points within it.\n\n### Saving Edits\n\nWhen you make changes like editing roads, buildings, and places, these are\nstored locally until you save them to the server. Don't worry if you make\na mistake - you can undo changes by clicking the undo button, and redo\nchanges by clicking the redo button.\n\nClick 'Save' to finish a group of edits - for instance, if you've completed\nan area of town and would like to start on a new area. You'll have a chance\nto review what you've done, and the editor supplies helpful suggestions\nand warnings if something doesn't seem right about the changes.\n\nIf everything looks good, you can enter a short comment explaining the change\nyou made, and click 'Save' again to post the changes\nto [OpenStreetMap.org](http://www.openstreetmap.org/), where they are visible\nto all other users and available for others to build and improve upon.\n\nIf you can't finish your edits in one sitting, you can leave the editor\nwindow and come back (on the same browser and computer), and the\neditor application will offer to restore your work.\n\n### Using the editor\n\nA list of available keyboard shortcuts can be found [here](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n",
+            "editing_saving": "# Editing & Saving\n\nThis editor is designed to work primarily online, and you're accessing\nit through a website right now.\n\n### Selecting Features\n\nTo select a map feature, like a road or point of interest, click\non it on the map. This will highlight the selected feature, open a panel with\ndetails about it, and show a menu of things you can do with the feature.\n\nTo select multiple features, hold down the 'Shift' key. Then either click\non the features you want to select, or drag on the map to draw a rectangle.\nThis will draw a box and select all the points within it.\n\n### Saving Edits\n\nWhen you make changes like editing roads, buildings, and places, these are\nstored locally until you save them to the server. Don't worry if you make\na mistake - you can undo changes by clicking the undo button, and redo\nchanges by clicking the redo button.\n\nClick 'Save' to finish a group of edits - for instance, if you've completed\nan area of town and would like to start on a new area. You'll have a chance\nto review what you've done, and the editor supplies helpful suggestions\nand warnings if something doesn't seem right about the changes.\n\nIf everything looks good, you can enter a short comment explaining the change\nyou made, and click 'Save' again to post the changes\nto [OpenStreetMap.org](http://www.openstreetmap.org/), where they are visible\nto all other users and available for others to build and improve upon.\n\nIf you can't finish your edits in one sitting, you can leave the editor\nwindow and come back (on the same browser and computer), and the\neditor application will offer to restore your work.\n\n### Using the editor\n\nYou can view a list of keyboard shortcuts by pressing the `?` key.\n",
             "roads": "# Roads\n\nYou can create, fix, and delete roads with this editor. Roads can be all\nkinds: paths, highways, trails, cycleways, and more - any often-crossed\nsegment should be mappable.\n\n### Selecting\n\nClick on a road to select it. An outline should become visible, along\nwith a small tools menu on the map and a sidebar showing more information\nabout the road.\n\n### Modifying\n\nOften you'll see roads that aren't aligned to the imagery behind them\nor to a GPS track. You can adjust these roads so they are in the correct\nplace.\n\nFirst click on the road you want to change. This will highlight it and show\ncontrol points along it that you can drag to better locations. If\nyou want to add new control points for more detail, double-click a part\nof the road without a node, and one will be added.\n\nIf the road connects to another road, but doesn't properly connect on\nthe map, you can drag one of its control points onto the other road in\norder to join them. Having roads connect is important for the map\nand essential for providing driving directions.\n\nYou can also click the 'Move' tool or press the `M` shortcut key to move the entire road at\none time, and then click again to save that movement.\n\n### Deleting\n\nIf a road is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.\n\nYou can delete a road by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.\n\n### Creating\n\nFound somewhere there should be a road but there isn't? Click the 'Line'\nicon in the top-left of the editor or press the shortcut key `2` to start drawing\na line.\n\nClick on the start of the road on the map to start drawing. If the road\nbranches off from an existing road, start by clicking on the place where they connect.\n\nThen click on points along the road so that it follows the right path, according\nto satellite imagery or GPS. If the road you are drawing crosses another road, connect\nit by clicking on the intersection point. When you're done drawing, double-click\nor press 'Return' or 'Enter' on your keyboard.\n",
             "gps": "# GPS\n\nCollected GPS traces are one valuable source of data for OpenStreetMap. This editor\nsupports local traces - `.gpx` files on your local computer. You can collect\nthis kind of GPS trace with a number of smartphone applications as well as\npersonal GPS hardware.\n\nFor information on how to perform a GPS survey, read\n[Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).\n\nTo use a GPX track for mapping, drag and drop the GPX file onto the map\neditor. If it's recognised, it will be added to the map as a bright purple\nline. Click on the 'Map Data' menu on the right side to enable,\ndisable, or zoom to this new GPX-powered layer.\n\nThe GPX track isn't directly uploaded to OpenStreetMap - the best way to\nuse it is to draw on the map, using it as a guide for the new features that\nyou add, and also to [upload it to OpenStreetMap](http://www.openstreetmap.org/trace/create)\nfor other users to use.\n",
             "imagery": "# Imagery\n\nAerial imagery is an important resource for mapping. A combination of\naeroplane flyovers, satellite views, and freely-compiled sources are available\nin the editor under the 'Background Settings' menu on the right.\n\nBy default a [Bing Maps](http://www.bing.com/maps/) satellite layer is\npresented in the editor, but as you pan and zoom the map to new geographical\nareas, new sources will become available. Some countries, like the United Kingdom, United\nStates, France, and Denmark have very high-quality imagery available for some areas.\n\nImagery is sometimes offset from the map data because of a mistake on the\nimagery provider's side. If you see a lot of roads shifted from the background,\ndon't immediately move them all to match the background. Instead you can adjust\nthe imagery so that it matches the existing data by clicking 'Fix alignment' at\nthe bottom of the Background Settings UI.\n",
             "roads": "# Roads\n\nYou can create, fix, and delete roads with this editor. Roads can be all\nkinds: paths, highways, trails, cycleways, and more - any often-crossed\nsegment should be mappable.\n\n### Selecting\n\nClick on a road to select it. An outline should become visible, along\nwith a small tools menu on the map and a sidebar showing more information\nabout the road.\n\n### Modifying\n\nOften you'll see roads that aren't aligned to the imagery behind them\nor to a GPS track. You can adjust these roads so they are in the correct\nplace.\n\nFirst click on the road you want to change. This will highlight it and show\ncontrol points along it that you can drag to better locations. If\nyou want to add new control points for more detail, double-click a part\nof the road without a node, and one will be added.\n\nIf the road connects to another road, but doesn't properly connect on\nthe map, you can drag one of its control points onto the other road in\norder to join them. Having roads connect is important for the map\nand essential for providing driving directions.\n\nYou can also click the 'Move' tool or press the `M` shortcut key to move the entire road at\none time, and then click again to save that movement.\n\n### Deleting\n\nIf a road is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.\n\nYou can delete a road by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.\n\n### Creating\n\nFound somewhere there should be a road but there isn't? Click the 'Line'\nicon in the top-left of the editor or press the shortcut key `2` to start drawing\na line.\n\nClick on the start of the road on the map to start drawing. If the road\nbranches off from an existing road, start by clicking on the place where they connect.\n\nThen click on points along the road so that it follows the right path, according\nto satellite imagery or GPS. If the road you are drawing crosses another road, connect\nit by clicking on the intersection point. When you're done drawing, double-click\nor press 'Return' or 'Enter' on your keyboard.\n",
             "gps": "# GPS\n\nCollected GPS traces are one valuable source of data for OpenStreetMap. This editor\nsupports local traces - `.gpx` files on your local computer. You can collect\nthis kind of GPS trace with a number of smartphone applications as well as\npersonal GPS hardware.\n\nFor information on how to perform a GPS survey, read\n[Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).\n\nTo use a GPX track for mapping, drag and drop the GPX file onto the map\neditor. If it's recognised, it will be added to the map as a bright purple\nline. Click on the 'Map Data' menu on the right side to enable,\ndisable, or zoom to this new GPX-powered layer.\n\nThe GPX track isn't directly uploaded to OpenStreetMap - the best way to\nuse it is to draw on the map, using it as a guide for the new features that\nyou add, and also to [upload it to OpenStreetMap](http://www.openstreetmap.org/trace/create)\nfor other users to use.\n",
             "imagery": "# Imagery\n\nAerial imagery is an important resource for mapping. A combination of\naeroplane flyovers, satellite views, and freely-compiled sources are available\nin the editor under the 'Background Settings' menu on the right.\n\nBy default a [Bing Maps](http://www.bing.com/maps/) satellite layer is\npresented in the editor, but as you pan and zoom the map to new geographical\nareas, new sources will become available. Some countries, like the United Kingdom, United\nStates, France, and Denmark have very high-quality imagery available for some areas.\n\nImagery is sometimes offset from the map data because of a mistake on the\nimagery provider's side. If you see a lot of roads shifted from the background,\ndon't immediately move them all to match the background. Instead you can adjust\nthe imagery so that it matches the existing data by clicking 'Fix alignment' at\nthe bottom of the Background Settings UI.\n",
                 "choose_cafe": "**Choose {preset} from the list.**",
                 "feature_editor": "The point is now marked as a cafe. Using the feature editor, we can add more information about the cafe.",
                 "add_name": "In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.{br}Let's pretend that you have local knowledge of this cafe, and you know its name. **Add a name for the cafe.**",
                 "choose_cafe": "**Choose {preset} from the list.**",
                 "feature_editor": "The point is now marked as a cafe. Using the feature editor, we can add more information about the cafe.",
                 "add_name": "In OpenStreetMap, all of the fields are optional, and it's OK to leave a field blank if you are unsure.{br}Let's pretend that you have local knowledge of this cafe, and you know its name. **Add a name for the cafe.**",
-                "add_close": "The feature editor will remember all of your changes automatically. **When you are finished adding the name, hit escape, return, or click the {button} button to close the feature editor.**",
+                "add_close": "The feature editor will remember all of your changes automatically. **When you are finished adding the name, hit escape, enter, or click the {button} button to close the feature editor.**",
                 "reselect": "Often points will already exist, but have mistakes or be incomplete. We can edit existing points. **Click to select the cafe you just created.**",
                 "update": "Let's fill in some more details for this cafe. You can change its name, add a cuisine, or add an address. **Change the cafe details.**",
                 "reselect": "Often points will already exist, but have mistakes or be incomplete. We can edit existing points. **Click to select the cafe you just created.**",
                 "update": "Let's fill in some more details for this cafe. You can change its name, add a cuisine, or add an address. **Change the cafe details.**",
-                "update_close": "**When you are finished updating the cafe, hit escape, return, or click the {button} button to close the feature editor.**",
+                "update_close": "**When you are finished updating the cafe, hit escape, enter, or click the {button} button to close the feature editor.**",
                 "rightclick": "You can right-click on any feature to see the *edit menu*, which shows a list of editing operations that can be performed. **Right-click to select the point you created and show the edit menu.**",
                 "delete": "It's OK to delete features that don't exist in the real world.{br}Deleting a feature from OpenStreetMap removes it from the map that everyone uses, so you should make sure a feature is really gone before you delete it. **Click on the {button} button to delete the point.**",
                 "undo": "You can always undo any changes up until you save your edits to OpenStreetMap. **Click on the {button} button to undo the delete and get the point back.**",
                 "rightclick": "You can right-click on any feature to see the *edit menu*, which shows a list of editing operations that can be performed. **Right-click to select the point you created and show the edit menu.**",
                 "delete": "It's OK to delete features that don't exist in the real world.{br}Deleting a feature from OpenStreetMap removes it from the map that everyone uses, so you should make sure a feature is really gone before you delete it. **Click on the {button} button to delete the point.**",
                 "undo": "You can always undo any changes up until you save your edits to OpenStreetMap. **Click on the {button} button to undo the delete and get the point back.**",
                 "add_playground": "*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas.{br}They can be also be used for more detailed mapping of many features you might normally map as points. **Click the {button} Area button to add a new area.**",
                 "start_playground": "Let's add this playground to the map by drawing an area. Areas are drawn by placing *nodes* along the outer edge of the feature. **Click or press spacebar to place a starting node on one of the corners of the playground.**",
                 "continue_playground": "Continue drawing the area by placing more nodes along the playground's edge. It is OK to connect the area to the existing walking paths.{br}Tip: You can hold down the Alt key to prevent nodes from connecting to other features. **Continue drawing an area for the playground.**",
                 "add_playground": "*Areas* are used to show the boundaries of features like lakes, buildings, and residential areas.{br}They can be also be used for more detailed mapping of many features you might normally map as points. **Click the {button} Area button to add a new area.**",
                 "start_playground": "Let's add this playground to the map by drawing an area. Areas are drawn by placing *nodes* along the outer edge of the feature. **Click or press spacebar to place a starting node on one of the corners of the playground.**",
                 "continue_playground": "Continue drawing the area by placing more nodes along the playground's edge. It is OK to connect the area to the existing walking paths.{br}Tip: You can hold down the Alt key to prevent nodes from connecting to other features. **Continue drawing an area for the playground.**",
-                "finish_playground": "Finish the area by pressing return, or clicking again on either the first or last node. **Finish drawing an area for the playground.**",
+                "finish_playground": "Finish the area by pressing enter, or clicking again on either the first or last node. **Finish drawing an area for the playground.**",
                 "search_playground": "**Search for '{preset}'.**",
                 "choose_playground": "**Choose {preset} from the list.**",
                 "add_field": "This playground doesn't have an official name, so we won't add anything in the Name field.{br}Instead let's add some additional details about the playground to the Description field. **Open the Add Field list.**",
                 "search_playground": "**Search for '{preset}'.**",
                 "choose_playground": "**Choose {preset} from the list.**",
                 "add_field": "This playground doesn't have an official name, so we won't add anything in the Name field.{br}Instead let's add some additional details about the playground to the Description field. **Open the Add Field list.**",
                 "intersect": "Click or press spacebar to add more nodes to the line.{br}Roads, and many other types of lines, are part of a larger network. It is important for these lines to be connected properly in order for routing applications to work. **Click on {name} to create an intersection connecting the two lines.**",
                 "retry_intersect": "The road needs to intersect {name}. Let's try again!",
                 "continue_line": "Continue drawing the line for the new road. Remember that you can drag and zoom the map if needed.{br}When you are finished drawing, click on the last node again. **Finish drawing the road.**",
                 "intersect": "Click or press spacebar to add more nodes to the line.{br}Roads, and many other types of lines, are part of a larger network. It is important for these lines to be connected properly in order for routing applications to work. **Click on {name} to create an intersection connecting the two lines.**",
                 "retry_intersect": "The road needs to intersect {name}. Let's try again!",
                 "continue_line": "Continue drawing the line for the new road. Remember that you can drag and zoom the map if needed.{br}When you are finished drawing, click on the last node again. **Finish drawing the road.**",
-                "choose_category_road": "**Select {category} from the list**",
+                "choose_category_road": "**Select {category} from the list.**",
                 "choose_preset_residential": "There are many different types of roads, but this one is a residential road. **Choose the {preset} type.**",
                 "retry_preset_residential": "You didn't select the {preset} type. **Click here to choose again.**",
                 "choose_preset_residential": "There are many different types of roads, but this one is a residential road. **Choose the {preset} type.**",
                 "retry_preset_residential": "You didn't select the {preset} type. **Click here to choose again.**",
-                "name_road": "**Give this road a name, then hit escape, return, or click the {button} button to close the feature editor.**",
+                "name_road": "**Give this road a name, then hit escape, enter, or click the {button} button to close the feature editor.**",
                 "did_name_road": "Looks good! Next we will learn how to update the shape of a line.",
                 "update_line": "Sometimes you will need to change the shape of an existing line. Here is a road that doesn't look quite right.",
                 "add_node": "We can add some nodes to this line to improve its shape. One way to add a node is to double-click the line where you want to add a node. **Double-click on the line to create a new node.**",
                 "did_name_road": "Looks good! Next we will learn how to update the shape of a line.",
                 "update_line": "Sometimes you will need to change the shape of an existing line. Here is a road that doesn't look quite right.",
                 "add_node": "We can add some nodes to this line to improve its shape. One way to add a node is to double-click the line where you want to add a node. **Double-click on the line to create a new node.**",
                 "rightclick_intersection": "The last real street is {street1}, so we will *split* {street2} at this intersection and remove everything above it. **Right click on the intersection node.**",
                 "split_intersection": "**Click on the {button} button to split {street}.**",
                 "retry_split": "You didn't click the Split button. Try again.",
                 "rightclick_intersection": "The last real street is {street1}, so we will *split* {street2} at this intersection and remove everything above it. **Right click on the intersection node.**",
                 "split_intersection": "**Click on the {button} button to split {street}.**",
                 "retry_split": "You didn't click the Split button. Try again.",
-                "did_split_multi": "Good Job! {street1} is now split into two pieces. The top part can be removed. **Click the top part of {street2} to select it.**",
+                "did_split_multi": "Good job! {street1} is now split into two pieces. The top part can be removed. **Click the top part of {street2} to select it.**",
                 "did_split_single": "**Click the top part of {street2} to select it.**",
                 "multi_select": "{selected} is now selected. Let's also select {other1}. You can shift-click to select multiple things. **Shift-click on {other2}.**",
                 "multi_rightclick": "Good! Both lines to delete are now selected. **Right-click on one of the lines to show the edit menu.**",
                 "did_split_single": "**Click the top part of {street2} to select it.**",
                 "multi_select": "{selected} is now selected. Let's also select {other1}. You can shift-click to select multiple things. **Shift-click on {other2}.**",
                 "multi_rightclick": "Good! Both lines to delete are now selected. **Right-click on one of the lines to show the edit menu.**",
                 "title": "Buildings",
                 "add_building": "OpenStreetMap is the world's largest database of buildings.{br}You can help improve this database by tracing buildings that aren't already mapped. **Click the {button} Area button to add a new area.**",
                 "start_building": "Let's add this house to the map by tracing its outline.{br}Buildings should be traced around their footprint as accurately as possible. **Click or press spacebar to place a starting node on one of the corners of the building.**",
                 "title": "Buildings",
                 "add_building": "OpenStreetMap is the world's largest database of buildings.{br}You can help improve this database by tracing buildings that aren't already mapped. **Click the {button} Area button to add a new area.**",
                 "start_building": "Let's add this house to the map by tracing its outline.{br}Buildings should be traced around their footprint as accurately as possible. **Click or press spacebar to place a starting node on one of the corners of the building.**",
-                "continue_building": "Continue adding more nodes to trace the outline of the building. Remember that you can zoom in if you want to add more details.{br}Finish the building by pressing return, or clicking again on either the first or last node. **Finish tracing the building.**",
+                "continue_building": "Continue adding more nodes to trace the outline of the building. Remember that you can zoom in if you want to add more details.{br}Finish the building by pressing enter, or clicking again on either the first or last node. **Finish tracing the building.**",
                 "retry_building": "It looks like you had some trouble placing the nodes at the building corners. Try again!",
                 "choose_category_building": "**Choose {category} from the list.**",
                 "choose_preset_house": "There are many different types of buildings, but this one is clearly a house.{br}If you're not sure of the type, it's OK to just choose the generic Building type. **Choose the {preset} type.**",
                 "retry_building": "It looks like you had some trouble placing the nodes at the building corners. Try again!",
                 "choose_category_building": "**Choose {category} from the list.**",
                 "choose_preset_house": "There are many different types of buildings, but this one is clearly a house.{br}If you're not sure of the type, it's OK to just choose the generic Building type. **Choose the {preset} type.**",
                 "done_square": "See how the corners of the building moved into place? Let's learn another useful trick.",
                 "add_tank": "Next we'll trace this circular storage tank. **Click the {button} Area button to add a new area.**",
                 "start_tank": "Don't worry, you won't need to draw a perfect circle. Just draw an area inside the tank that touches its edge. **Click or press spacebar to place a starting node on the edge of the tank.**",
                 "done_square": "See how the corners of the building moved into place? Let's learn another useful trick.",
                 "add_tank": "Next we'll trace this circular storage tank. **Click the {button} Area button to add a new area.**",
                 "start_tank": "Don't worry, you won't need to draw a perfect circle. Just draw an area inside the tank that touches its edge. **Click or press spacebar to place a starting node on the edge of the tank.**",
-                "continue_tank": "Add a few more nodes around the edge. The circle will be created outside the nodes that you draw.{br}Finish the area by pressing return, or clicking again on either the first or last node. **Finish tracing the tank.**",
+                "continue_tank": "Add a few more nodes around the edge. The circle will be created outside the nodes that you draw.{br}Finish the area by pressing enter, or clicking again on either the first or last node. **Finish tracing the tank.**",
                 "search_tank": "**Search for '{preset}'.**",
                 "choose_tank": "**Choose {preset} from the list.**",
                 "rightclick_tank": "**Right-click to select the storage tank you created and show the edit menu.**",
                 "search_tank": "**Search for '{preset}'.**",
                 "choose_tank": "**Choose {preset} from the list.**",
                 "rightclick_tank": "**Right-click to select the storage tank you created and show the edit menu.**",
                 "start": "Start mapping!"
             }
         },
                 "start": "Start mapping!"
             }
         },
+        "shortcuts": {
+            "title": "Keyboard shortcuts",
+            "key": {
+                "alt": "Alt",
+                "backspace": "Backspace",
+                "cmd": "Cmd",
+                "ctrl": "Ctrl",
+                "delete": "Delete",
+                "del": "Del",
+                "end": "End",
+                "enter": "Enter",
+                "esc": "Esc",
+                "home": "Home",
+                "option": "Option",
+                "pause": "Pause",
+                "pgdn": "PgDn",
+                "pgup": "PgUp",
+                "return": "Return",
+                "shift": "Shift",
+                "space": "Space"
+            },
+            "gesture": {
+                "drag": "drag"
+            },
+            "or": "-or-",
+            "browsing": {
+                "title": "Browsing",
+                "navigation": {
+                    "title": "Navigation",
+                    "pan": "Pan map",
+                    "pan_more": "Pan map by one screenful",
+                    "zoom": "Zoom in / Zoom out",
+                    "zoom_more": "Zoom in / Zoom out by a lot"
+                },
+                "help": {
+                    "title": "Help",
+                    "help": "Show help/documentation",
+                    "keyboard": "Show keyboard shortcuts"
+                },
+                "display_options": {
+                    "title": "Display options",
+                    "background": "Show background options",
+                    "background_switch": "Switch back to last background",
+                    "map_data": "Show map data options",
+                    "fullscreen": "Enter full screen mode",
+                    "wireframe": "Toggle wireframe mode",
+                    "minimap": "Toggle minimap"
+                },
+                "selecting": {
+                    "title": "Selecting features",
+                    "select_one": "Select a single feature",
+                    "select_multi": "Select multiple features",
+                    "lasso": "Draw a selection lasso around features"
+                },
+                "with_selected": {
+                    "title": "With feature selected",
+                    "infobox": "Toggle info / measurement box",
+                    "edit_menu": "Toggle edit menu"
+                },
+                "vertex_selected": {
+                    "title": "With node selected",
+                    "previous": "Jump to previous node",
+                    "next": "Jump to next node",
+                    "first": "Jump to first node",
+                    "last": "Jump to last node",
+                    "change_parent": "Switch parent way"
+                }
+            },
+            "editing": {
+                "title": "Editing",
+                "drawing": {
+                    "title": "Drawing",
+                    "add_point": "'Add point' mode",
+                    "add_line": "'Add line' mode",
+                    "add_area": "'Add area' mode",
+                    "place_point": "Place a point",
+                    "disable_snap": "Hold to disable point snapping",
+                    "stop_line": "Finish drawing a line or area"
+                },
+                "operations": {
+                    "title": "Operations",
+                    "continue_line": "Continue a line at the selected node",
+                    "merge": "Combine (merge) selected features",
+                    "disconnect": "Disconnect features at the selected node",
+                    "split": "Split a line into two at the selected node",
+                    "reverse": "Reverse a line",
+                    "move": "Move selected features",
+                    "rotate": "Rotate selected features",
+                    "orthogonalize": "Straighten line / Square area corners",
+                    "circularize": "Circularize a closed line or area",
+                    "reflect_long": "Reflect features across the longer axis",
+                    "reflect_short": "Reflect features across the shorter axis",
+                    "delete": "Delete selected features"
+                },
+                "commands": {
+                    "title": "Commands",
+                    "copy": "Copy selected features",
+                    "paste": "Paste copied features",
+                    "undo": "Undo last action",
+                    "redo": "Redo last action",
+                    "save": "Save changes"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                 "information": {
                     "label": "Type"
                 },
                 "information": {
                     "label": "Type"
                 },
+                "inscription": {
+                    "label": "Inscription"
+                },
                 "internet_access": {
                     "label": "Internet Access",
                     "options": {
                 "internet_access": {
                     "label": "Internet Access",
                     "options": {
                     "label": "SSID (Network Name)"
                 },
                 "kerb": {
                     "label": "SSID (Network Name)"
                 },
                 "kerb": {
-                    "label": "Curb Ramp"
+                    "label": "Kerb"
                 },
                 "lamp_type": {
                     "label": "Type"
                 },
                 "lamp_type": {
                     "label": "Type"
                 "maxstay": {
                     "label": "Max Stay"
                 },
                 "maxstay": {
                     "label": "Max Stay"
                 },
+                "maxweight": {
+                    "label": "Max Weight"
+                },
                 "mtb/scale": {
                     "label": "Mountain Biking Difficulty",
                     "options": {
                 "mtb/scale": {
                     "label": "Mountain Biking Difficulty",
                     "options": {
                 "amenity/vending_machine/news_papers": {
                     "name": "Newspaper Vending Machine"
                 },
                 "amenity/vending_machine/news_papers": {
                     "name": "Newspaper Vending Machine"
                 },
+                "amenity/vending_machine/newspapers": {
+                    "name": "Newspaper Vending Machine"
+                },
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "Parcel Pickup/Dropoff Vending Machine"
                 },
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "Parcel Pickup/Dropoff Vending Machine"
                 },
                 "craft/electrician": {
                     "name": "Electrician"
                 },
                 "craft/electrician": {
                     "name": "Electrician"
                 },
+                "craft/electronics_repair": {
+                    "name": "Electronics Repair Shop"
+                },
                 "craft/gardener": {
                     "name": "Gardener"
                 },
                 "craft/gardener": {
                     "name": "Gardener"
                 },
                 "highway/cycleway": {
                     "name": "Cycle Path"
                 },
                 "highway/cycleway": {
                     "name": "Cycle Path"
                 },
+                "highway/elevator": {
+                    "name": "Lift"
+                },
                 "highway/footway": {
                     "name": "Foot Path"
                 },
                 "highway/footway": {
                     "name": "Foot Path"
                 },
                 "leisure/pitch/basketball": {
                     "name": "Basketball Court"
                 },
                 "leisure/pitch/basketball": {
                     "name": "Basketball Court"
                 },
+                "leisure/pitch/beachvolleyball": {
+                    "name": "Beach Volleyball Court"
+                },
                 "leisure/pitch/bowls": {
                     "name": "Bowling Green"
                 },
                 "leisure/pitch/bowls": {
                     "name": "Bowling Green"
                 },
                 "shop/antiques": {
                     "name": "Antiques Shop"
                 },
                 "shop/antiques": {
                     "name": "Antiques Shop"
                 },
+                "shop/appliance": {
+                    "name": "Appliance Store"
+                },
                 "shop/art": {
                     "name": "Art Store"
                 },
                 "shop/art": {
                     "name": "Art Store"
                 },
                 "vertex": {
                     "name": "Other"
                 },
                 "vertex": {
                     "name": "Other"
                 },
+                "waterway": {
+                    "name": "Waterway"
+                },
                 "waterway/boatyard": {
                     "name": "Boatyard"
                 },
                 "waterway/boatyard": {
                     "name": "Boatyard"
                 },
index 2e6cae5c428c09730afa7b1373ef78cf530d9aed..848d1b1e15392ae856dc03c4a36fcde271d90163 100644 (file)
         "help": {
             "title": "Help",
             "help": "# Help\n\nThis is an editor for [OpenStreetMap](http://www.openstreetmap.org/), the\nfree and editable map of the world. You can use it to add and update\ndata in your area, making an open-source and open-data map of the world\nbetter for everyone.\n\nEdits that you make on this map will be visible to everyone who uses\nOpenStreetMap. In order to make an edit, you'll need to\n[log in](https://www.openstreetmap.org/login).\n\nThe [iD editor](http://ideditor.com/) is a collaborative project with [source\ncode available on GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Help",
             "help": "# Help\n\nThis is an editor for [OpenStreetMap](http://www.openstreetmap.org/), the\nfree and editable map of the world. You can use it to add and update\ndata in your area, making an open-source and open-data map of the world\nbetter for everyone.\n\nEdits that you make on this map will be visible to everyone who uses\nOpenStreetMap. In order to make an edit, you'll need to\n[log in](https://www.openstreetmap.org/login).\n\nThe [iD editor](http://ideditor.com/) is a collaborative project with [source\ncode available on GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Editing & Saving\n\nThis editor is designed to work primarily online, and you're accessing\nit through a website right now.\n\n### Selecting Features\n\nTo select a map feature, like a road or point of interest, click\non it on the map. This will highlight the selected feature, open a panel with\ndetails about it, and show a menu of things you can do with the feature.\n\nTo select multiple features, hold down the 'Shift' key. Then either click\non the features you want to select, or drag on the map to draw a rectangle.\nThis will draw a box and select all the points within it.\n\n### Saving Edits\n\nWhen you make changes like editing roads, buildings, and places, these are\nstored locally until you save them to the server. Don't worry if you make\na mistake - you can undo changes by clicking the undo button, and redo\nchanges by clicking the redo button.\n\nClick 'Save' to finish a group of edits - for instance, if you've completed\nan area of town and would like to start on a new area. You'll have a chance\nto review what you've done, and the editor supplies helpful suggestions\nand warnings if something doesn't seem right about the changes.\n\nIf everything looks good, you can enter a short comment explaining the change\nyou made, and click 'Save' again to post the changes\nto [OpenStreetMap.org](http://www.openstreetmap.org/), where they are visible\nto all other users and available for others to build and improve upon.\n\nIf you can't finish your edits in one sitting, you can leave the editor\nwindow and come back (on the same browser and computer), and the\neditor application will offer to restore your work.\n\n### Using the editor\n\nA list of available keyboard shortcuts can be found [here](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n",
+            "editing_saving": "# Editing & Saving\n\nThis editor is designed to work primarily online, and you're accessing\nit through a website right now.\n\n### Selecting Features\n\nTo select a map feature, like a road or point of interest, click\non it on the map. This will highlight the selected feature, open a panel with\ndetails about it, and show a menu of things you can do with the feature.\n\nTo select multiple features, hold down the 'Shift' key. Then either click\non the features you want to select, or drag on the map to draw a rectangle.\nThis will draw a box and select all the points within it.\n\n### Saving Edits\n\nWhen you make changes like editing roads, buildings, and places, these are\nstored locally until you save them to the server. Don't worry if you make\na mistake - you can undo changes by clicking the undo button, and redo\nchanges by clicking the redo button.\n\nClick 'Save' to finish a group of edits - for instance, if you've completed\nan area of town and would like to start on a new area. You'll have a chance\nto review what you've done, and the editor supplies helpful suggestions\nand warnings if something doesn't seem right about the changes.\n\nIf everything looks good, you can enter a short comment explaining the change\nyou made, and click 'Save' again to post the changes\nto [OpenStreetMap.org](http://www.openstreetmap.org/), where they are visible\nto all other users and available for others to build and improve upon.\n\nIf you can't finish your edits in one sitting, you can leave the editor\nwindow and come back (on the same browser and computer), and the\neditor application will offer to restore your work.\n\n### Using the editor\n\nYou can view a list of keyboard shortcuts by pressing the `?` key.\n",
             "roads": "# Roads\n\nYou can create, fix, and delete roads with this editor. Roads can be all\nkinds: paths, highways, trails, cycleways, and more - any often-crossed\nsegment should be mappable.\n\n### Selecting\n\nClick on a road to select it. An outline should become visible, along\nwith a small tools menu on the map and a sidebar showing more information\nabout the road.\n\n### Modifying\n\nOften you'll see roads that aren't aligned to the imagery behind them\nor to a GPS track. You can adjust these roads so they are in the correct\nplace.\n\nFirst click on the road you want to change. This will highlight it and show\ncontrol points along it that you can drag to better locations. If\nyou want to add new control points for more detail, double-click a part\nof the road without a node, and one will be added.\n\nIf the road connects to another road, but doesn't properly connect on\nthe map, you can drag one of its control points onto the other road in\norder to join them. Having roads connect is important for the map\nand essential for providing driving directions.\n\nYou can also click the 'Move' tool or press the `M` shortcut key to move the entire road at\none time, and then click again to save that movement.\n\n### Deleting\n\nIf a road is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.\n\nYou can delete a road by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.\n\n### Creating\n\nFound somewhere there should be a road but there isn't? Click the 'Line'\nicon in the top-left of the editor or press the shortcut key `2` to start drawing\na line.\n\nClick on the start of the road on the map to start drawing. If the road\nbranches off from an existing road, start by clicking on the place where they connect.\n\nThen click on points along the road so that it follows the right path, according\nto satellite imagery or GPS. If the road you are drawing crosses another road, connect\nit by clicking on the intersection point. When you're done drawing, double-click\nor press 'Return' or 'Enter' on your keyboard.\n",
             "gps": "# GPS\n\nCollected GPS traces are one valuable source of data for OpenStreetMap. This editor\nsupports local traces - `.gpx` files on your local computer. You can collect\nthis kind of GPS trace with a number of smartphone applications as well as\npersonal GPS hardware.\n\nFor information on how to perform a GPS survey, read\n[Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).\n\nTo use a GPX track for mapping, drag and drop the GPX file onto the map\neditor. If it's recognized, it will be added to the map as a bright purple\nline. Click on the 'Map Data' menu on the right side to enable,\ndisable, or zoom to this new GPX-powered layer.\n\nThe GPX track isn't directly uploaded to OpenStreetMap - the best way to\nuse it is to draw on the map, using it as a guide for the new features that\nyou add, and also to [upload it to OpenStreetMap](http://www.openstreetmap.org/trace/create)\nfor other users to use.\n",
             "imagery": "# Imagery\n\nAerial imagery is an important resource for mapping. A combination of\nairplane flyovers, satellite views, and freely-compiled sources are available\nin the editor under the 'Background Settings' menu on the right.\n\nBy default a [Bing Maps](http://www.bing.com/maps/) satellite layer is\npresented in the editor, but as you pan and zoom the map to new geographical\nareas, new sources will become available. Some countries, like the United\nStates, France, and Denmark have very high-quality imagery available for some areas.\n\nImagery is sometimes offset from the map data because of a mistake on the\nimagery provider's side. If you see a lot of roads shifted from the background,\ndon't immediately move them all to match the background. Instead you can adjust\nthe imagery so that it matches the existing data by clicking 'Fix alignment' at\nthe bottom of the Background Settings UI.\n",
             "roads": "# Roads\n\nYou can create, fix, and delete roads with this editor. Roads can be all\nkinds: paths, highways, trails, cycleways, and more - any often-crossed\nsegment should be mappable.\n\n### Selecting\n\nClick on a road to select it. An outline should become visible, along\nwith a small tools menu on the map and a sidebar showing more information\nabout the road.\n\n### Modifying\n\nOften you'll see roads that aren't aligned to the imagery behind them\nor to a GPS track. You can adjust these roads so they are in the correct\nplace.\n\nFirst click on the road you want to change. This will highlight it and show\ncontrol points along it that you can drag to better locations. If\nyou want to add new control points for more detail, double-click a part\nof the road without a node, and one will be added.\n\nIf the road connects to another road, but doesn't properly connect on\nthe map, you can drag one of its control points onto the other road in\norder to join them. Having roads connect is important for the map\nand essential for providing driving directions.\n\nYou can also click the 'Move' tool or press the `M` shortcut key to move the entire road at\none time, and then click again to save that movement.\n\n### Deleting\n\nIf a road is entirely incorrect - you can see that it doesn't exist in satellite\nimagery and ideally have confirmed locally that it's not present - you can delete\nit, which removes it from the map. Be cautious when deleting features -\nlike any other edit, the results are seen by everyone and satellite imagery\nis often out of date, so the road could simply be newly built.\n\nYou can delete a road by clicking on it to select it, then clicking the\ntrash can icon or pressing the 'Delete' key.\n\n### Creating\n\nFound somewhere there should be a road but there isn't? Click the 'Line'\nicon in the top-left of the editor or press the shortcut key `2` to start drawing\na line.\n\nClick on the start of the road on the map to start drawing. If the road\nbranches off from an existing road, start by clicking on the place where they connect.\n\nThen click on points along the road so that it follows the right path, according\nto satellite imagery or GPS. If the road you are drawing crosses another road, connect\nit by clicking on the intersection point. When you're done drawing, double-click\nor press 'Return' or 'Enter' on your keyboard.\n",
             "gps": "# GPS\n\nCollected GPS traces are one valuable source of data for OpenStreetMap. This editor\nsupports local traces - `.gpx` files on your local computer. You can collect\nthis kind of GPS trace with a number of smartphone applications as well as\npersonal GPS hardware.\n\nFor information on how to perform a GPS survey, read\n[Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).\n\nTo use a GPX track for mapping, drag and drop the GPX file onto the map\neditor. If it's recognized, it will be added to the map as a bright purple\nline. Click on the 'Map Data' menu on the right side to enable,\ndisable, or zoom to this new GPX-powered layer.\n\nThe GPX track isn't directly uploaded to OpenStreetMap - the best way to\nuse it is to draw on the map, using it as a guide for the new features that\nyou add, and also to [upload it to OpenStreetMap](http://www.openstreetmap.org/trace/create)\nfor other users to use.\n",
             "imagery": "# Imagery\n\nAerial imagery is an important resource for mapping. A combination of\nairplane flyovers, satellite views, and freely-compiled sources are available\nin the editor under the 'Background Settings' menu on the right.\n\nBy default a [Bing Maps](http://www.bing.com/maps/) satellite layer is\npresented in the editor, but as you pan and zoom the map to new geographical\nareas, new sources will become available. Some countries, like the United\nStates, France, and Denmark have very high-quality imagery available for some areas.\n\nImagery is sometimes offset from the map data because of a mistake on the\nimagery provider's side. If you see a lot of roads shifted from the background,\ndon't immediately move them all to match the background. Instead you can adjust\nthe imagery so that it matches the existing data by clicking 'Fix alignment' at\nthe bottom of the Background Settings UI.\n",
                 "rightclick_intersection": "The last real street is {street1}, so we will *split* {street2} at this intersection and remove everything above it. **Right click on the intersection node.**",
                 "split_intersection": "**Click on the {button} button to split {street}.**",
                 "retry_split": "You didn't click the Split button. Try again.",
                 "rightclick_intersection": "The last real street is {street1}, so we will *split* {street2} at this intersection and remove everything above it. **Right click on the intersection node.**",
                 "split_intersection": "**Click on the {button} button to split {street}.**",
                 "retry_split": "You didn't click the Split button. Try again.",
-                "did_split_multi": "Good Job! {street1} is now split into two pieces. The top part can be removed. **Click the top part of {street2} to select it.**",
+                "did_split_multi": "Good job! {street1} is now split into two pieces. The top part can be removed. **Click the top part of {street2} to select it.**",
                 "did_split_single": "**Click the top part of {street2} to select it.**",
                 "multi_select": "{selected} is now selected. Let's also select {other1}. You can shift-click to select multiple things. **Shift-click on {other2}.**",
                 "multi_rightclick": "Good! Both lines to delete are now selected. **Right-click on one of the lines to show the edit menu.**",
                 "did_split_single": "**Click the top part of {street2} to select it.**",
                 "multi_select": "{selected} is now selected. Let's also select {other1}. You can shift-click to select multiple things. **Shift-click on {other2}.**",
                 "multi_rightclick": "Good! Both lines to delete are now selected. **Right-click on one of the lines to show the edit menu.**",
                 "start": "Start mapping!"
             }
         },
                 "start": "Start mapping!"
             }
         },
+        "shortcuts": {
+            "title": "Keyboard shortcuts",
+            "tooltip": "Show the keyboard shortcuts screen.",
+            "key": {
+                "alt": "Alt",
+                "backspace": "Backspace",
+                "cmd": "Cmd",
+                "ctrl": "Ctrl",
+                "delete": "Delete",
+                "del": "Del",
+                "end": "End",
+                "enter": "Enter",
+                "esc": "Esc",
+                "home": "Home",
+                "option": "Option",
+                "pause": "Pause",
+                "pgdn": "PgDn",
+                "pgup": "PgUp",
+                "return": "Return",
+                "shift": "Shift",
+                "space": "Space"
+            },
+            "gesture": {
+                "drag": "drag"
+            },
+            "or": "-or-",
+            "browsing": {
+                "title": "Browsing",
+                "navigation": {
+                    "title": "Navigation",
+                    "pan": "Pan map",
+                    "pan_more": "Pan map by one screenful",
+                    "zoom": "Zoom in / Zoom out",
+                    "zoom_more": "Zoom in / Zoom out by a lot"
+                },
+                "help": {
+                    "title": "Help",
+                    "help": "Show help/documentation",
+                    "keyboard": "Show keyboard shortcuts"
+                },
+                "display_options": {
+                    "title": "Display options",
+                    "background": "Show background options",
+                    "background_switch": "Switch back to last background",
+                    "map_data": "Show map data options",
+                    "fullscreen": "Enter full screen mode",
+                    "wireframe": "Toggle wireframe mode",
+                    "minimap": "Toggle minimap"
+                },
+                "selecting": {
+                    "title": "Selecting features",
+                    "select_one": "Select a single feature",
+                    "select_multi": "Select multiple features",
+                    "lasso": "Draw a selection lasso around features"
+                },
+                "with_selected": {
+                    "title": "With feature selected",
+                    "infobox": "Toggle info / measurement box",
+                    "edit_menu": "Toggle edit menu"
+                },
+                "vertex_selected": {
+                    "title": "With node selected",
+                    "previous": "Jump to previous node",
+                    "next": "Jump to next node",
+                    "first": "Jump to first node",
+                    "last": "Jump to last node",
+                    "change_parent": "Switch parent way"
+                }
+            },
+            "editing": {
+                "title": "Editing",
+                "drawing": {
+                    "title": "Drawing",
+                    "add_point": "'Add point' mode",
+                    "add_line": "'Add line' mode",
+                    "add_area": "'Add area' mode",
+                    "place_point": "Place a point",
+                    "disable_snap": "Hold to disable point snapping",
+                    "stop_line": "Finish drawing a line or area"
+                },
+                "operations": {
+                    "title": "Operations",
+                    "continue_line": "Continue a line at the selected node",
+                    "merge": "Combine (merge) selected features",
+                    "disconnect": "Disconnect features at the selected node",
+                    "split": "Split a line into two at the selected node",
+                    "reverse": "Reverse a line",
+                    "move": "Move selected features",
+                    "rotate": "Rotate selected features",
+                    "orthogonalize": "Straighten line / Square area corners",
+                    "circularize": "Circularize a closed line or area",
+                    "reflect_long": "Reflect features across the longer axis",
+                    "reflect_short": "Reflect features across the shorter axis",
+                    "delete": "Delete selected features"
+                },
+                "commands": {
+                    "title": "Commands",
+                    "copy": "Copy selected features",
+                    "paste": "Paste copied features",
+                    "undo": "Undo last action",
+                    "redo": "Redo last action",
+                    "save": "Save changes"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                     "label": "SSID (Network Name)"
                 },
                 "kerb": {
                     "label": "SSID (Network Name)"
                 },
                 "kerb": {
-                    "label": "Curb Ramp"
+                    "label": "Curb"
                 },
                 "lamp_type": {
                     "label": "Type"
                 },
                 "lamp_type": {
                     "label": "Type"
                 "maxstay": {
                     "label": "Max Stay"
                 },
                 "maxstay": {
                     "label": "Max Stay"
                 },
+                "maxweight": {
+                    "label": "Max Weight"
+                },
                 "mtb/scale": {
                     "label": "Mountain Biking Difficulty",
                     "placeholder": "0, 1, 2, 3...",
                 "mtb/scale": {
                     "label": "Mountain Biking Difficulty",
                     "placeholder": "0, 1, 2, 3...",
                 },
                 "craft/brewery": {
                     "name": "Brewery",
                 },
                 "craft/brewery": {
                     "name": "Brewery",
-                    "terms": "beer,bier"
+                    "terms": "alcohol,beer,beverage,bier,booze,cider"
                 },
                 "craft/carpenter": {
                     "name": "Carpenter",
                 },
                 "craft/carpenter": {
                     "name": "Carpenter",
                     "name": "Confectionery",
                     "terms": "sweets,candy"
                 },
                     "name": "Confectionery",
                     "terms": "sweets,candy"
                 },
+                "craft/distillery": {
+                    "name": "Distillery",
+                    "terms": "alcohol,beverage,bourbon,booze,brandy,gin,hooch,liquor,mezcal,moonshine,rum,scotch,spirits,still,tequila,vodka,whiskey,whisky"
+                },
                 "craft/dressmaker": {
                     "name": "Dressmaker",
                     "terms": "seamstress"
                 "craft/dressmaker": {
                     "name": "Dressmaker",
                     "terms": "seamstress"
                     "name": "Electrician",
                     "terms": "power,wire"
                 },
                     "name": "Electrician",
                     "terms": "power,wire"
                 },
+                "craft/electronics_repair": {
+                    "name": "Electronics Repair Shop",
+                    "terms": ""
+                },
                 "craft/gardener": {
                     "name": "Gardener",
                     "terms": "landscaper,grounds keeper"
                 "craft/gardener": {
                     "name": "Gardener",
                     "terms": "landscaper,grounds keeper"
                     "name": "Cycle Path",
                     "terms": "bike"
                 },
                     "name": "Cycle Path",
                     "terms": "bike"
                 },
+                "highway/elevator": {
+                    "name": "Elevator",
+                    "terms": "lift"
+                },
                 "highway/footway": {
                     "name": "Foot Path",
                     "terms": "hike,hiking,trackway,trail,walk"
                 "highway/footway": {
                     "name": "Foot Path",
                     "terms": "hike,hiking,trackway,trail,walk"
                 },
                 "leisure/pitch/soccer": {
                     "name": "Soccer Field",
                 },
                 "leisure/pitch/soccer": {
                     "name": "Soccer Field",
-                    "terms": ""
+                    "terms": "football"
                 },
                 "leisure/pitch/table_tennis": {
                     "name": "Ping Pong Table",
                 },
                 "leisure/pitch/table_tennis": {
                     "name": "Ping Pong Table",
                     "name": "Antiques Shop",
                     "terms": ""
                 },
                     "name": "Antiques Shop",
                     "terms": ""
                 },
+                "shop/appliance": {
+                    "name": "Appliance Store",
+                    "terms": "air conditioner,appliance,dishwasher,dryer,freezer,fridge,grill,kitchen,oven,refrigerator,stove,washer,washing machine"
+                },
                 "shop/art": {
                     "name": "Art Store",
                     "terms": "art*,exhibit*,gallery"
                 "shop/art": {
                     "name": "Art Store",
                     "terms": "art*,exhibit*,gallery"
                 },
                 "shop/electronics": {
                     "name": "Electronics Store",
                 },
                 "shop/electronics": {
                     "name": "Electronics Store",
-                    "terms": "appliance,audio,computer,tv"
+                    "terms": "appliance,audio,blueray,camera,computer,dvd,home theater,radio,speaker,tv,video"
                 },
                 "shop/erotic": {
                     "name": "Erotic Store",
                 },
                 "shop/erotic": {
                     "name": "Erotic Store",
index 40070916fdd36ba6cb262bd5d9045840ead2718c..a59110caeb0a2d2c502b591f1ab066292f56b58a 100644 (file)
         "help": {
             "title": "Helpo",
             "help": "# Helpo\n\nĈi tiu estas redaktilo por [OpenStreetMap](http://www.openstreetmap.org/) - la libera kaj redaktebla mondmapo. Vi povas ĝin uzi por aldoni kaj ĝisdatigi datumojn pri via ĉirkaŭaĵo, farante malfermkodan kaj malferm-datuman mapon de la mondo pli bona por ĉiuj.\n\nRedaktoj, kiujn vi faras sur ĉi tiu mapo estos videblaj por ĉiu, kiu uzas OpenStreetMap. Por fari redakton, vi devos [ensaluti](https://www.openstreetmap.org/login).\n\nLa [redaktilo 'iD'](http://ideditor.com/) estas kunlabora projekto, kies [fontkodo estas disponebla en GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Helpo",
             "help": "# Helpo\n\nĈi tiu estas redaktilo por [OpenStreetMap](http://www.openstreetmap.org/) - la libera kaj redaktebla mondmapo. Vi povas ĝin uzi por aldoni kaj ĝisdatigi datumojn pri via ĉirkaŭaĵo, farante malfermkodan kaj malferm-datuman mapon de la mondo pli bona por ĉiuj.\n\nRedaktoj, kiujn vi faras sur ĉi tiu mapo estos videblaj por ĉiu, kiu uzas OpenStreetMap. Por fari redakton, vi devos [ensaluti](https://www.openstreetmap.org/login).\n\nLa [redaktilo 'iD'](http://ideditor.com/) estas kunlabora projekto, kies [fontkodo estas disponebla en GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Redaktado kaj konservado\n\nĈi tiu redaktilo estas destinita por labori ĝenerale enrete, kaj vi nun uzas ĝin per retejo.\n\n### Elektado de objektoj\n\nPor elekti map-objekton - kiel vojon aŭ interesejon - klaku ĝin sur la mapo. Tio ĉi markos elektitan objekton, malfermos panelon kun detaloj pri ĝi, kaj montros menuon de agoj pri objekto.\n\nPor elekti kelkajn objektojn, premtenu 'majusklan' klavon. Tiam aŭ klaku objektojn, kiujn vi volas elekti, aŭ trenu sur mapo por desegni rektangulon. Tiel vi desegnos zonon kaj elektos ĉiujn punktojn ene.\n\n### Konservado de redaktoj\n\nKiam vi estas ŝanĝanta ion, kiel redakti vojojn, konstruaĵojn kaj lokoj, tiuj ŝanĝoj estas konservataj loke antaŭ vi konservos ilin en servilo. Ne klopodu, se vi eraras - vi povas malfari ŝanĝojn klakante butonon 'malfari' kaj refari klakante butonon 'refari'.\n\nKlaku 'Konservi' por fini grupon da redaktoj, ekzemple vi fine mapigis terenon de urbo kaj vi volas komenci novan terenon. Vi havos ŝancon por kontroli kion vi estos farinta kaj la redaktilo montros uzeblajn konsilojn se io povus esti malĝusta.\n\nSe ĉio ŝajnos ĝuste, vi povos entajpi etan komenton eksplikantan faritajn ŝanĝojn, klaku 'Konservi' por publikigi viajn redaktojn al [OpenStreetMap.org](http://www.openstreetmap.org/), kie ili estos videblaj por ĉiuj aliaj uzantoj kaj pretaj por plia plibonigo.\n\nSe vi ne povas fini viajn redaktojn dum unufoje, vi povas fermi fenestron kun redaktilo, kaj reveni poste (ĉe sama foliumilo kaj komputilo) kaj la redaktilo restarigos vian laboron.\n\n### Uzado de redaktilo\n\nListon de disponeblaj fulmoklavoj oni trovos [ĉi tie](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n",
+            "editing_saving": "# Redaktado kaj konservado\n\nĈi tiu redaktilo estas destinita por labori ĝenerale enrete, kaj vi nun uzas ĝin per retejo.\n\n### Elektado de objektoj\n\nPor elekti map-objekton - kiel vojon aŭ interesejon - klaku ĝin sur la mapo. Tio ĉi markos elektitan objekton, malfermos panelon kun detaloj pri ĝi, kaj montros menuon de agoj pri objekto.\n\nPor elekti kelkajn objektojn, premtenu 'majusklan' klavon. Tiam aŭ klaku objektojn, kiujn vi volas elekti, aŭ trenu sur mapo por desegni rektangulon. Tiel vi desegnos zonon kaj elektos ĉiujn punktojn ene.\n\n### Konservado de redaktoj\n\nKiam vi estas ŝanĝanta ion, kiel redakti vojojn, konstruaĵojn kaj lokoj, tiuj ŝanĝoj estas konservataj loke antaŭ vi konservos ilin en servilo. Ne klopodu, se vi eraras - vi povas malfari ŝanĝojn klakante butonon 'malfari' kaj refari klakante butonon 'refari'.\n\nKlaku 'Konservi' por fini grupon da redaktoj, ekzemple vi fine mapigis terenon de urbo kaj vi volas komenci novan terenon. Vi havos ŝancon por kontroli kion vi estos farinta kaj la redaktilo montros uzeblajn konsilojn se io povus esti malĝusta.\n\nSe ĉio ŝajnos ĝuste, vi povos entajpi etan komenton eksplikantan faritajn ŝanĝojn, klaku 'Konservi' por publikigi viajn redaktojn al [OpenStreetMap.org](http://www.openstreetmap.org/), kie ili estos videblaj por ĉiuj aliaj uzantoj kaj pretaj por plia plibonigo.\n\nSe vi ne povas fini viajn redaktojn dum unufoje, vi povas fermi fenestron kun redaktilo, kaj reveni poste (ĉe sama foliumilo kaj komputilo) kaj la redaktilo restarigos vian laboron.\n\n### Uzado de redaktilo\n\nVi povas vidi liston de disponeblaj fulmoklavoj per premi la klavon '?'\n",
             "roads": "# Vojoj\n\nVi povas krei, korekti kaj forigi vojojn per ĉi tiu redaktilo. Vojo povas esti de iu ajn speco: piediradaj vojetoj, aŭtovojoj, biciklvojoj, kaj pli - ĉiu regule uzata vojo estas mapiginda.\n\n### Elektado\n\nKlaku vojon por ĝin elekti. Ĝia konturo ekvidebliĝos, kune kun eta ilara menuo sur la mapo kaj flanka breto montranta pli da informoj pri la vojo.\n\n### Redaktado\n\nOfte vi vidos vojojn, kiuj ne estos alĝustigitaj al la malantaŭa fotaro aŭ al GPS-spuro. Vi povas korekti tiujn vojojn, do ili troviĝos en ĝusta loko.\n\nUnue klaku vojon, kiun vi volas ŝanĝi. Tio ĉi markos ĝin kaj montros kontrolpunktojn laŭlonge de ĝi, kiujn vi povas treni al pli bonaj lokoj. Se vi volas aldoni novan kontrolpunkton por plidetaligi, duoble klaku parton de vojo sen nodo kaj ĝi estos aldonita.\n\nSe vojo estas konektita al alia vojo, sed ili ne ĝuste kunigitaj sur la mapo, vi povas treni unu el iliaj kontrolpunktoj sur alian vojon por kunigi ilin. Konektado de vojoj estas grava por la mapo kaj necesa por liveri navigadon.\n\nVi ankaŭ povas klaki ilon 'Movi' aŭ premu fulmoklavon 'M' por movi la tutan vojon per unu fojo kaj klaki denove por konservi ĉi tiun agon.\n\n### Forigado\n\nSe vojo estas tute erara - vi vidas, ke ĝi ne ekzistas sur satelita fotaro kaj eĉ vi konfirmis enloke, ke ĝi ne ekzistas - vi povas ĝin forigi el la mapo. Estu singarda dum forigado de objektoj - kiel ĉiu alia redakto, rezultoj estos videblaj al ĉiuj kaj sputinika fotaro estas ofte neĝisdata, do vojo simple povus esti ĵus konstruita.\n\nVi povas forigi vojon per klaki ĝin por ĝin elekti, sekve klaku piktogramon de rubujo aŭ premu forigan klavon.\n\n### Kreado\n\nEble vi trovis, ke ie povas esti vojon, tamen ĝi ne troviĝas sur la mapo? Klaku piktogramon de linio ĉe supra maldekstra angulo aŭ premu fulmoklavon '2' por komenci desegni linion.\n\nKlaku komencon de la vojo sur mapo por komenci desegni. Se vojo disiĝas el ekzistanta vojo, komencu per klaki lokon, kie ili konektiĝas.\n\nSekve klaku punktojn laŭlonge de vojo tiel, kiel ili formiĝas ĝusta kurso laŭ satelita fotaro aŭ GPS. Se desegnata vojo interkruciĝas kun alia vojo, konektu ilin per klaki sekcopunkton. Kiam vi finos desegni, duoble klaku aŭ premu enen-klavon.\n",
             "gps": "# GPS\n\nKolektitaj GPS-spuroj estas valoraj fontoj de datumoj por OpenStreetMap. Ĉi tiu redaktilo subtenas lokajn spurojn - .gpx dosierojn en via loka komputilo. Vi povas kolekti tiajn GPS-spurojn per multe da poŝtelefonaj aplikaĵoj aŭ per persona GPS-a aparato.\n\nPor pli da informoj kiel fari GPS-an esploron, legu pri [mapigado per poŝtelefono, GPS aŭ papero](http://learnosm.org/en/mobile-mapping/) (malesperante).\n\nPor uzi GPX-spuron por mapigado, ŝovu kaj demetu GPX-dosieron sur la map-redaktilon. Se ĝi estos rekonita, ĝi estos aldonita al la mapo kiel helpurpura linio. Klaku menuon 'Map-datumoj' ĉe dekstre  por aktivigi, malaktivigi aŭ pligrandigi al ĉi tiu nova GPX-a tavolo.\n\nGPX-spuro ne estas rekte alŝutita al OpenStreetMap - la plej bona maniero por uzi ĝin estas vidigi ĝin sur la mapo por desegni iujn objektojn kaj ankaŭ [alŝuti ĝin al OpenStreetMap](http://www.openstreetmap.org/trace/create) por ke aliaj uzantoj povos uzi ĝin.\n",
             "imagery": "# Fotaro\n\nAerfotaro estas grava fonto por mapigado. Kombino de aerfotoj, satelitaj fotoj kaj libere kreeblaj fontoj estas disponebla en la redaktilo per menuo 'Fonaj agordoj' ĉe dekstre.\n\nImplicite satelita tavolo de [Bing Mapoj](http://www.bing.com/maps/) estas montrata en la redaktilo, tamen kiam vi aldirektas kaj pligrandigas al aliaj lokoj, novaj fontoj iĝos disponeblaj. Por kelkaj landoj - kiel Usono, Francujo aŭ Danujo - tre altkvalita fotaro estas disponebla por iuj areoj.\n\nFotaro estas iam deŝovita de map-datumoj pro eraro rilatanta al retejo de liveranto. Se vi vidas multe da vojoj deŝovitaj de fono, ne abrupte movi ilin laŭ la fono. Anstataŭ vi povas alĝustigi fotaron tiel, ke ĝi kongruos kun ekzistaj datumoj per klaki 'Ĝustigi fotaran deŝovon' ĉe malsupro de menuo de fonaj agordoj.\n",
             "roads": "# Vojoj\n\nVi povas krei, korekti kaj forigi vojojn per ĉi tiu redaktilo. Vojo povas esti de iu ajn speco: piediradaj vojetoj, aŭtovojoj, biciklvojoj, kaj pli - ĉiu regule uzata vojo estas mapiginda.\n\n### Elektado\n\nKlaku vojon por ĝin elekti. Ĝia konturo ekvidebliĝos, kune kun eta ilara menuo sur la mapo kaj flanka breto montranta pli da informoj pri la vojo.\n\n### Redaktado\n\nOfte vi vidos vojojn, kiuj ne estos alĝustigitaj al la malantaŭa fotaro aŭ al GPS-spuro. Vi povas korekti tiujn vojojn, do ili troviĝos en ĝusta loko.\n\nUnue klaku vojon, kiun vi volas ŝanĝi. Tio ĉi markos ĝin kaj montros kontrolpunktojn laŭlonge de ĝi, kiujn vi povas treni al pli bonaj lokoj. Se vi volas aldoni novan kontrolpunkton por plidetaligi, duoble klaku parton de vojo sen nodo kaj ĝi estos aldonita.\n\nSe vojo estas konektita al alia vojo, sed ili ne ĝuste kunigitaj sur la mapo, vi povas treni unu el iliaj kontrolpunktoj sur alian vojon por kunigi ilin. Konektado de vojoj estas grava por la mapo kaj necesa por liveri navigadon.\n\nVi ankaŭ povas klaki ilon 'Movi' aŭ premu fulmoklavon 'M' por movi la tutan vojon per unu fojo kaj klaki denove por konservi ĉi tiun agon.\n\n### Forigado\n\nSe vojo estas tute erara - vi vidas, ke ĝi ne ekzistas sur satelita fotaro kaj eĉ vi konfirmis enloke, ke ĝi ne ekzistas - vi povas ĝin forigi el la mapo. Estu singarda dum forigado de objektoj - kiel ĉiu alia redakto, rezultoj estos videblaj al ĉiuj kaj sputinika fotaro estas ofte neĝisdata, do vojo simple povus esti ĵus konstruita.\n\nVi povas forigi vojon per klaki ĝin por ĝin elekti, sekve klaku piktogramon de rubujo aŭ premu forigan klavon.\n\n### Kreado\n\nEble vi trovis, ke ie povas esti vojon, tamen ĝi ne troviĝas sur la mapo? Klaku piktogramon de linio ĉe supra maldekstra angulo aŭ premu fulmoklavon '2' por komenci desegni linion.\n\nKlaku komencon de la vojo sur mapo por komenci desegni. Se vojo disiĝas el ekzistanta vojo, komencu per klaki lokon, kie ili konektiĝas.\n\nSekve klaku punktojn laŭlonge de vojo tiel, kiel ili formiĝas ĝusta kurso laŭ satelita fotaro aŭ GPS. Se desegnata vojo interkruciĝas kun alia vojo, konektu ilin per klaki sekcopunkton. Kiam vi finos desegni, duoble klaku aŭ premu enen-klavon.\n",
             "gps": "# GPS\n\nKolektitaj GPS-spuroj estas valoraj fontoj de datumoj por OpenStreetMap. Ĉi tiu redaktilo subtenas lokajn spurojn - .gpx dosierojn en via loka komputilo. Vi povas kolekti tiajn GPS-spurojn per multe da poŝtelefonaj aplikaĵoj aŭ per persona GPS-a aparato.\n\nPor pli da informoj kiel fari GPS-an esploron, legu pri [mapigado per poŝtelefono, GPS aŭ papero](http://learnosm.org/en/mobile-mapping/) (malesperante).\n\nPor uzi GPX-spuron por mapigado, ŝovu kaj demetu GPX-dosieron sur la map-redaktilon. Se ĝi estos rekonita, ĝi estos aldonita al la mapo kiel helpurpura linio. Klaku menuon 'Map-datumoj' ĉe dekstre  por aktivigi, malaktivigi aŭ pligrandigi al ĉi tiu nova GPX-a tavolo.\n\nGPX-spuro ne estas rekte alŝutita al OpenStreetMap - la plej bona maniero por uzi ĝin estas vidigi ĝin sur la mapo por desegni iujn objektojn kaj ankaŭ [alŝuti ĝin al OpenStreetMap](http://www.openstreetmap.org/trace/create) por ke aliaj uzantoj povos uzi ĝin.\n",
             "imagery": "# Fotaro\n\nAerfotaro estas grava fonto por mapigado. Kombino de aerfotoj, satelitaj fotoj kaj libere kreeblaj fontoj estas disponebla en la redaktilo per menuo 'Fonaj agordoj' ĉe dekstre.\n\nImplicite satelita tavolo de [Bing Mapoj](http://www.bing.com/maps/) estas montrata en la redaktilo, tamen kiam vi aldirektas kaj pligrandigas al aliaj lokoj, novaj fontoj iĝos disponeblaj. Por kelkaj landoj - kiel Usono, Francujo aŭ Danujo - tre altkvalita fotaro estas disponebla por iuj areoj.\n\nFotaro estas iam deŝovita de map-datumoj pro eraro rilatanta al retejo de liveranto. Se vi vidas multe da vojoj deŝovitaj de fono, ne abrupte movi ilin laŭ la fono. Anstataŭ vi povas alĝustigi fotaron tiel, ke ĝi kongruos kun ekzistaj datumoj per klaki 'Ĝustigi fotaran deŝovon' ĉe malsupro de menuo de fonaj agordoj.\n",
                 "start": "Ekigi mapigadon!"
             }
         },
                 "start": "Ekigi mapigadon!"
             }
         },
+        "shortcuts": {
+            "title": "Fulmoklavoj",
+            "tooltip": "Montri ekranon de fulmoklavoj.",
+            "key": {
+                "alt": "Alt",
+                "backspace": "Backspace",
+                "cmd": "Cmd",
+                "ctrl": "Ctrl",
+                "delete": "Forig-klavo",
+                "del": "Del",
+                "end": "End",
+                "enter": "Enen-klavo",
+                "esc": "Esc",
+                "home": "Home",
+                "option": "Option",
+                "pause": "Pause",
+                "pgdn": "PgDn",
+                "pgup": "PgUp",
+                "return": "Return",
+                "shift": "Shift",
+                "space": "Spacostango"
+            },
+            "gesture": {
+                "drag": "treni"
+            },
+            "or": "-aŭ-",
+            "browsing": {
+                "title": "Foliumado",
+                "navigation": {
+                    "title": "Navigado",
+                    "pan": "Rulumi mapon",
+                    "pan_more": "Rulumi mapon je unu ekrano",
+                    "zoom": "Pligrandigi / malgrandigi",
+                    "zoom_more": "Pligrandigegi / malgrandigegi"
+                },
+                "help": {
+                    "title": "Helpo",
+                    "help": "Montri helpon/dokumentaron",
+                    "keyboard": "Montri fulmoklavojn"
+                },
+                "display_options": {
+                    "title": "Vidaj agordoj",
+                    "background": "Montri agordojn pri fono",
+                    "background_switch": "Baskuli reen al antaŭa fono",
+                    "map_data": "Montri agordojn pri map-datumoj",
+                    "fullscreen": "Enigi plenekranan reĝimon",
+                    "wireframe": "Baskuli map-plenigon",
+                    "minimap": "Baskuli mapeton"
+                },
+                "selecting": {
+                    "title": "Elektado de objektoj",
+                    "select_one": "Elekti unuopan objekton",
+                    "select_multi": "Elekti kelkajn objektojn",
+                    "lasso": "Elekti per kaptoŝnuro"
+                },
+                "with_selected": {
+                    "title": "Kun elektita objekto",
+                    "infobox": "Baskuli pri-dialogujon / mezur-dialogujon",
+                    "edit_menu": "Baskuli redakt-menuon"
+                },
+                "vertex_selected": {
+                    "title": "Kun elektita nodo",
+                    "previous": "Al antaŭa nodo",
+                    "next": "Al sekva nodo",
+                    "first": "Al unua nodo",
+                    "last": "Al fina nodo",
+                    "change_parent": "Baskuli al supera linio"
+                }
+            },
+            "editing": {
+                "title": "Redaktado",
+                "drawing": {
+                    "title": "Desegnado",
+                    "add_point": "'Aldoni punkton'-reĝimo",
+                    "add_line": "'Aldoni linion'-reĝimo",
+                    "add_area": "'Aldoni areo'-reĝimo",
+                    "place_point": "Enmeti punkton",
+                    "disable_snap": "Premteni por ne kapti punktojn",
+                    "stop_line": "Fini desegni linion aŭ areon"
+                },
+                "operations": {
+                    "title": "Agoj",
+                    "continue_line": "Pluigi linion ĉe elektita nodo",
+                    "merge": "Kunfandi elektitajn objektojn",
+                    "disconnect": "Malkunigi objektojn de elektita nodo",
+                    "split": "Disduigi linon de elektita nodo",
+                    "reverse": "Inversigi linion",
+                    "move": "Movi elektitajn objektojn",
+                    "rotate": "Turni elektitajn objektojn",
+                    "orthogonalize": "Rektigi linion / kvadratigi angulojn de areo",
+                    "circularize": "Rondigi fermitan linion aŭ areon",
+                    "reflect_long": "Speguli objektojn laŭ longa akso",
+                    "reflect_short": "Speguli objekton laŭ mallonga akso",
+                    "delete": "Forigi elektitajn objektojn/verticojn"
+                },
+                "commands": {
+                    "title": "Ordonoj",
+                    "copy": "Kopii elektitajn objektojn",
+                    "paste": "Alglui kopiitajn objektojn",
+                    "undo": "Malfari antaŭan agon",
+                    "redo": "Refari antaŭan agon",
+                    "save": "Konservi ŝanĝojn"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                 "maxstay": {
                     "label": "Maksimuma restad-tempo"
                 },
                 "maxstay": {
                     "label": "Maksimuma restad-tempo"
                 },
+                "maxweight": {
+                    "label": "Maksimuma pezo"
+                },
                 "mtb/scale": {
                     "label": "Montbicikla malfacileco",
                     "options": {
                 "mtb/scale": {
                     "label": "Montbicikla malfacileco",
                     "options": {
                     "name": "Sukeraĵejo",
                     "terms": "sukerajhejo,sukerajxejo,konditoro,sukeraĵisto,kukejo"
                 },
                     "name": "Sukeraĵejo",
                     "terms": "sukerajhejo,sukerajxejo,konditoro,sukeraĵisto,kukejo"
                 },
+                "craft/distillery": {
+                    "name": "Distilejo",
+                    "terms": "distilado,viskio,brando"
+                },
                 "craft/dressmaker": {
                     "name": "Tajlora laborejo (inaj vestoj)",
                     "terms": "tajloro,kudristo"
                 "craft/dressmaker": {
                     "name": "Tajlora laborejo (inaj vestoj)",
                     "terms": "tajloro,kudristo"
                     "name": "Elektrista oficejo",
                     "terms": "elektristo"
                 },
                     "name": "Elektrista oficejo",
                     "terms": "elektristo"
                 },
+                "craft/electronics_repair": {
+                    "name": "Elektronik-riparejo",
+                    "terms": "elektroniko,elektronikaĵoj,riparejo,riparisto"
+                },
                 "craft/gardener": {
                     "name": "Ĝardenista oficejo",
                     "terms": "ĝardenisto,ghardenisto,gxardenisto"
                 "craft/gardener": {
                     "name": "Ĝardenista oficejo",
                     "terms": "ĝardenisto,ghardenisto,gxardenisto"
                     "name": "Bicikl-vojo",
                     "terms": "biciklo,biciklovojo"
                 },
                     "name": "Bicikl-vojo",
                     "terms": "biciklo,biciklovojo"
                 },
+                "highway/elevator": {
+                    "name": "Lifto",
+                    "terms": "levmaŝino,levmashino,levmasxino,levilo,leviĝilo,ŝtuparlifto"
+                },
                 "highway/footway": {
                     "name": "Trotuaro",
                     "terms": "irejo,piedirejo,pavimo"
                 "highway/footway": {
                     "name": "Trotuaro",
                     "terms": "irejo,piedirejo,pavimo"
                     "name": "Antikvaĵa vendejo",
                     "terms": "antikvaĵejo,antikvajhejo,antikvajxejo"
                 },
                     "name": "Antikvaĵa vendejo",
                     "terms": "antikvaĵejo,antikvajhejo,antikvajxejo"
                 },
+                "shop/appliance": {
+                    "name": "Elektronikaĵega vendejo",
+                    "terms": "elektronikoj,lavmaŝinoj,lavmashinoj,lavmasxinoj,frostujoj,fridujoj,polvosuĉiloj,senpolvigiloj,kuiriloj,forneloj,kuirejo"
+                },
                 "shop/art": {
                     "name": "Artaĵa vendejo",
                     "terms": "artaĵejo,antikvaĵejo,artajxvendejo,artajhvendejo"
                 "shop/art": {
                     "name": "Artaĵa vendejo",
                     "terms": "artaĵejo,antikvaĵejo,artajxvendejo,artajhvendejo"
                     "terms": "aŭtomobiloj,aŭtoj,autoj,auxtoj,salono de aŭtoj"
                 },
                 "shop/car_parts": {
                     "terms": "aŭtomobiloj,aŭtoj,autoj,auxtoj,salono de aŭtoj"
                 },
                 "shop/car_parts": {
-                    "name": "Aŭtomobil-partaj vendejo",
+                    "name": "Aŭtomobil-parta vendejo",
                     "terms": "partoj aŭtomobilaj,pecoj aŭtomobilaj"
                 },
                 "shop/car_repair": {
                     "name": "Aŭtoriparejo",
                     "terms": "partoj aŭtomobilaj,pecoj aŭtomobilaj"
                 },
                 "shop/car_repair": {
                     "name": "Aŭtoriparejo",
-                    "terms": "riparejo,aŭtoservejo,aŭtejo,autoriparejo,auxtoriparejo"
+                    "terms": "riparejo,aŭtoservejo,aŭtejo,autoriparejo,auxtoriparejo,meĥanisto,mekanisto,meĥanikisto,mekanikisto"
                 },
                 "shop/carpet": {
                     "name": "Tapiŝa vendejo",
                 },
                 "shop/carpet": {
                     "name": "Tapiŝa vendejo",
index 9c29eff47684905c5f05e5f5c5747ecc7d066739..1f3587de3fecfafa95b42960dd74a5d3aa3cfc30 100644 (file)
@@ -8,12 +8,12 @@
             },
             "add_line": {
                 "title": "Línea",
             },
             "add_line": {
                 "title": "Línea",
-                "description": "Añade carreteras, calles, pasos peatonales, aceras, canales, ríos u otras líneas al mapa.",
+                "description": "Añade carreteras, calles, senderos, aceras, canales, ríos u otras líneas al mapa.",
                 "tail": "Haga clic en el mapa para empezar a dibujar un camino, sendero o ruta."
             },
             "add_point": {
                 "title": "Punto",
                 "tail": "Haga clic en el mapa para empezar a dibujar un camino, sendero o ruta."
             },
             "add_point": {
                 "title": "Punto",
-                "description": "Añade restaurantes, oficinas, oficios, monumentos, buzones postales u otros puntos al mapa.",
+                "description": "Añade restaurantes, monumentos, buzones postales, negocios u otros puntos al mapa.",
                 "tail": "Haga clic en el mapa para añadir un punto."
             },
             "browse": {
                 "tail": "Haga clic en el mapa para añadir un punto."
             },
             "browse": {
             "circularize": {
                 "title": "Redondear",
                 "description": {
             "circularize": {
                 "title": "Redondear",
                 "description": {
-                    "line": "Hacer circular esta línea.",
-                    "area": "Hacer circular esta área."
+                    "line": "Hacer esta línea circular.",
+                    "area": "Hacer este área circular."
                 },
                 "key": "O",
                 "annotation": {
                 },
                 "key": "O",
                 "annotation": {
-                    "line": "Hace la línea circular.",
-                    "area": "Hace el área circular."
+                    "line": "Línea hecha circular.",
+                    "area": "Área hecha circular."
                 },
                 },
-                "not_closed": "Esto no se puede redondear porque no es un círculo.",
+                "not_closed": "Esto no se puede redondear porque no está cerrado.",
                 "too_large": "Esto no se puede redondear porque no está completamente visible.",
                 "connected_to_hidden": "Esto no se puede hacer circular porque está conectado a un elemento oculto."
             },
                 "too_large": "Esto no se puede redondear porque no está completamente visible.",
                 "connected_to_hidden": "Esto no se puede hacer circular porque está conectado a un elemento oculto."
             },
                 "title": "Escuadrar",
                 "description": {
                     "line": "Escuadra las esquinas de esta línea.",
                 "title": "Escuadrar",
                 "description": {
                     "line": "Escuadra las esquinas de esta línea.",
-                    "area": "Escuadra las esquinas de esta área."
+                    "area": "Escuadra las esquinas de este área."
                 },
                 "key": "S",
                 "annotation": {
                     "line": "Escuadrar las esquinas de una línea.",
                     "area": "Escuadrar las esquinas de un área."
                 },
                 },
                 "key": "S",
                 "annotation": {
                     "line": "Escuadrar las esquinas de una línea.",
                     "area": "Escuadrar las esquinas de un área."
                 },
-                "not_squarish": "Esto no puede escuadrarse porque no es cuadrado.",
+                "not_squarish": "Esto no puede escuadrarse porque no es escuadrable.",
                 "too_large": "Esto no puede escuadrarse porque no está completamente visible.",
                 "too_large": "Esto no puede escuadrarse porque no está completamente visible.",
-                "connected_to_hidden": "Esto no se puede hacer rectangular porque está conectado a un elemento oculto."
+                "connected_to_hidden": "Esto no se puede escuadrar porque está conectado a un elemento oculto."
             },
             "straighten": {
                 "title": "Enderezar",
             },
             "straighten": {
                 "title": "Enderezar",
                 }
             },
             "add_member": {
                 }
             },
             "add_member": {
-                "annotation": "Un miembro ha sido añadido a una relación."
+                "annotation": "Se ha añadido un miembro a una relación."
             },
             "delete_member": {
             },
             "delete_member": {
-                "annotation": "Un miembro ha sido quitado de una relación."
+                "annotation": "Se ha quitado un miembro de una relación."
             },
             "connect": {
                 "annotation": {
             },
             "connect": {
                 "annotation": {
         "full_screen": "Cambiar a pantalla completa",
         "gpx": {
             "local_layer": "Archivo local",
         "full_screen": "Cambiar a pantalla completa",
         "gpx": {
             "local_layer": "Archivo local",
-            "drag_drop": "Arrastre y suelte un archivo .gpx, .geojson o .kml en la página o haga clic en el botón a la derecha para navegar",
+            "drag_drop": "Arrastre y suelte un archivo .gpx, .geojson o .kml en la página o haga clic en el botón a la derecha para explorar",
             "zoom": "Acercar a la capa",
             "browse": "Buscar un archivo"
         },
             "zoom": "Acercar a la capa",
             "browse": "Buscar un archivo"
         },
         "help": {
             "title": "Ayuda",
             "help": "# Ayuda\n\nEste es un editor para [OpenStreetMap](http://www.openstreetmap.org/), el\nmapa libre y editable del mundo. Se puede utilizar para añadir y actualizar\ndatos en su área, haciendo que el mapa del mundo de fuente y datos abiertos\nsea mejor para todos.\n\nLas ediciones que realice en este mapa serán visible a todos los que usen\nOpenStreetMap. Para poder hacer una edición tendrá que\n[Iniciar sesión](https://www.openstreetmap.org/login).\n\nEl [editor iD](http://ideditor.com/) es un proyecto colaborativo con [código\nfuente disponible en GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Ayuda",
             "help": "# Ayuda\n\nEste es un editor para [OpenStreetMap](http://www.openstreetmap.org/), el\nmapa libre y editable del mundo. Se puede utilizar para añadir y actualizar\ndatos en su área, haciendo que el mapa del mundo de fuente y datos abiertos\nsea mejor para todos.\n\nLas ediciones que realice en este mapa serán visible a todos los que usen\nOpenStreetMap. Para poder hacer una edición tendrá que\n[Iniciar sesión](https://www.openstreetmap.org/login).\n\nEl [editor iD](http://ideditor.com/) es un proyecto colaborativo con [código\nfuente disponible en GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Editar y guardar\n\nEste editor está diseñado para trabajar en línea principalmente, y en estos\nmomentos esta accediendo a través de un sitio web.\n\n### Seleccionar elementos\n\nPara seleccionar un elemento del mapa, como una carretera o un punto de\ninterés, haga clic sobre el en el mapa. Esto resaltará el elemento seleccionado,\nabriendo un panel con sus detalles, y mostrará un menú de cosas que puede\nhacer con ese elemento.\n\nPara seleccionar múltiples elementos, mantenga pulsada la tecla 'Mayús'. Luego\nhaga clic en los elementos que desea seleccionar o arrastre en el mapa para\ndibujar un rectángulo. Esto dibujará una caja y seleccionará todos los puntos\ndentro de ella.\n\n### Guardar ediciones\n\nCuando haga cambios como editar carreteras, edificios o lugares, estos se\nalmacenan localmente en su ordenador hasta que los guarde en el servidor.\nNo se preocupe si comete un error - puede deshacer los cambios haciendo\nclic en el botón 'Deshacer', y rehacerlos haciendo clic en el botón 'Rehacer'.\n\nHaga clic en 'Guardar' para finalizar un grupo de ediciones - por ejemplo, si ha\ncompletado una zona de la ciudad y quisiera empezar en un área nueva. Tendrá\nla oportunidad de revisar lo que ha hecho, y el editor proporciona avisos y\nsugerencias útiles si algo parece no ser correcto en los cambios.\n\nSi ve que todo es correcto, puede escribir un breve comentario explicando el\ncambio que ha hecho, y haga clic en 'Guardar' de nuevo para registrar los\ncambios en [OpenStreetMap.org](http://www.openstreetmap.org/), donde serán\nvisibles para todos los demás usuarios y estarán disponible para que otros\npuedan seguir construyendo y mejorando el mapa.\n\nSi no puede terminar sus ediciones en una sola sesión, puede dejar la ventana\ndel editor y volver más tarde (al mismo navegador y ordenador), y el editor le\npermitirá retomar su trabajo.\n\n### Uso del editor\n\nUna lista de métodos abreviados de teclado disponibles puede encontrarse [aquí](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n",
+            "editing_saving": "# Editando y guardando\n\nEste editor está diseñado para trabajar principalmente en línea, y usted está accediendo\na través de un sitio web en este momento.\n\n### Seleccionando elementos\n\nPara seleccionar un elemento del mapa, como una carretera o punto de interés, haga clic en\nen él sobre el mapa. Esto resaltará el elemento seleccionado, abrirá un panel con\ndetalles sobre él y mostrará un menú de cosas que puede hacer con el elemento.\n\nPara seleccionar varios elementos, mantenga pulsada la tecla 'Shift'. A continuación, haga clic en\nen los elementos que desea seleccionar, o arrastre el mapa para dibujar un rectángulo.\nEsto dibujará una caja y seleccionará todos los puntos dentro de ella.\n\n### Guardando las ediciones\n\nCuando hace cambios como editar carreteras, edificios y lugares, estos son\nalmacenados localmente hasta que los guarde en el servidor. No se preocupe si se\nequivoca - puede deshacer los cambios haciendo clic en el botón deshacer, y rehacer cambios\nhaciendo clic en el botón Rehacer.\n\nHaga clic en 'Guardar' para finalizar un grupo de ediciones - por ejemplo, si ha completado\nun área de la ciudad y quisiera comenzar en un área nueva. Tendrá la oportunidad\npara revisar lo que ha hecho, y el editor suministra sugerencias útiles\ny advertencias si algo no parece correcto sobre los cambios.\n\nSi todo está bien, puede escribir un comentario corto explicando el cambio\nque ha hecho y hacer clic en 'Guardar' de nuevo para publicar los cambios\nen [OpenStreetMap.org](http://www.openstreetmap.org/), donde son visibles\na todos los demás usuarios y disponibles para que otros puedan aprovechar y mejorar.\n\nSi no puede terminar sus ediciones en una sola sesión, puede dejar la ventana\ndel editor y volver (en el mismo navegador y equipo), y el\neditor de la aplicación le ofrecerá restaurar su trabajo.\n\n### Usando del editor\n\nPuede ver una lista de atajos de teclado pulsando la tecla `?`.\n",
             "roads": "# Carreteras\n\nPuede crear, corregir y borrar carreteras con este editor. Las vías pueden ser de todas las clases: caminos, carreteras, senderos, ciclovías, etc. A cualquier línea dibujada en el mapa se le debe indicar el tipo de elemento lineal que es.\n\n### Seleccionar\n\nHaga clic sobre una vía para seleccionarla. Verá sobre ella como se visualiza su esquema, formada por nodos y segmentos, junto con un menú de herramientas que aparece sobre el mapa y una barra lateral que muestra más información sobre la vía.\n\n### Modificar\n\nA menudo verá viales que no están alineados correctamente con la imagen aérea de fondo o con la traza GPS. Puede ajustar esas vías para situarlas en el lugar exacto.\n\nPrimero haga clic sobre la vía que desea cambiar. Esto la resaltará y mostrará los nodos o puntos de control a lo largo de la vía que la forman. A continuación simplemente arrastre esos puntos a la posición correcta. Si desea añadir nuevos puntos de control para dibujar la carretera con mayor detalle haga doble clic sobre la parte de la vía donde quiere añadir el nuevo nodo y este será creado en la vía.\n\nSi la vía conecta con otra carretera o camino pero esta conexión no aparece correctamente en el mapa puede arrastrar uno de los puntos de la vía hasta la otra carretera y se unirá automáticamente a ella mediante un nodo común. Es muy importante tener las carreteras conectadas en el mapa, ya que es esencial para proporcionar instrucciones correctas para la conducción si queremos que la cartografía se útil, por ejemplo, para los navegadores GPS.\n\n### Eliminar\n\nSi un camino es totalmente incorrecto -ha observado que no aparece en las imágenes de satélite y de manera ideal lo ha confirmado en campo- puede eliminarlo, lo cual lo borrará del mapa. Sea precavido al eliminar elementos del mapa. Como cualquier otra edición que haga este cambio será visto por todo el mundo y las imágenes de satélite a menudo no están actualizadas, por lo que una carretera que no existe en ellas pero sí en el mapa simplemente puede aparecer porque es de reciente construcción y otro usuario la ha añadido.\n\n### Crear\n\n¿Ha encontrado un lugar donde debería existir una carretera pero no aparece? Haga clic con el ratón sobre el icono 'Línea' situado en la parte superior izquierda del editor o simplemente presione la tecla '2'  de su teclado que es el acceso rápido para comenzar a dibujar una línea.\n\nHaga clic sobre el mapa en el inicio de la carretera para comenzar a dibujar. Si la vía se ramifica a partir de una carretera ya existente empiece haciendo clic sobre el lugar donde ambas conectan.\n\nHaga clic en puntos a lo largo de la vía para definir el trazado correcto de la carretera. La densidad de puntos dependerá de la complejidad del recorrido, por lo que es aconsejable dibujar desde un nivel de zoom apropiado. Si la vía que está dibujando atraviesa otra carretera conéctela con esta haciendo clic sobre el punto de intersección. Una vez haya terminado el dibujo haga doble clic con el ratón o presiones la tecla 'Return' o 'Intro' de su teclado para finalizar.\n",
             "gps": "# GPS\n\nLas trazas de GPS recogidas son una valiosa fuente de datos para OpenStreetMap. Este\neditor soporta trazas locales - archivos `.gpx` en su equipo local. Usted puede obtener\neste tipo de traza GPS con una serie de aplicaciones de smartphone, como también con\nhardware GPS personal.\n\nPara más información sobre cómo realizar un relevamiento GPS, lea\n[Mapear con un smartphone, GPS, o papel](http://learnosm.org/es/mobile-mapping/).\n\nPara utilizar una traza GPX para mapear, arrastre y suelte el archivo GPX en el editor\nde mapa. Si este es reconocido, se añadirá al mapa como una línea púrpura brillante.\nHaga clic en el menú 'Datos del mapa' en el lado derecho para activar,\ndesactivar o acercar a esta nueva capa alimentada por GPX.\n\nLa traza GPX no se carga directamente a OpenStreetMap - la mejor manera de\nutilizarlo es dibujar en el mapa, usándolo como guía para las nuevos elementos que\nagregue, y también [subirlo a OpenStreetMap](http://www.openstreetmap.org/trace/create)\npara que otros usuarios lo utilicen.\n",
             "imagery": "# Imágenes\n\nLas imágenes aéreas son un importante recurso para mapear. Una combinación\nde vuelos aéreos, vistas de satélite, y compilaciones de fuentes libres están disponibles\nen el editor bajo el menú 'Ajustes del fondo' a la derecha.\n\nDe forma predeterminada se presenta la capa de satélite de [Bing Maps](http://www.bing.com/maps/) en el editor, pero mientras se mueva y acerque el mapa a nuevas áreas\ngeográficas, nuevas fuentes estarán disponibles. Algunos países, como los Estados\nUnidos, Francia, y Dinamarca poseen imágenes de muy alta calidad disponible\npara algunas áreas.\n\nLas imágenes a veces están desplazadas de los datos del mapa debido a un error en el\nlado del proveedor de imágenes. Si observa muchos caminos desplazados del fondo,\nno los mueva inmediatamente para emparejarlos con el fondo. En su lugar puede ajustar\nlas imágenes para que coincidan con los datos existentes haciendo clic\nen 'Corregir alineación' en la opción 'Ajustes del fondo' de la interfaz.\n",
             "roads": "# Carreteras\n\nPuede crear, corregir y borrar carreteras con este editor. Las vías pueden ser de todas las clases: caminos, carreteras, senderos, ciclovías, etc. A cualquier línea dibujada en el mapa se le debe indicar el tipo de elemento lineal que es.\n\n### Seleccionar\n\nHaga clic sobre una vía para seleccionarla. Verá sobre ella como se visualiza su esquema, formada por nodos y segmentos, junto con un menú de herramientas que aparece sobre el mapa y una barra lateral que muestra más información sobre la vía.\n\n### Modificar\n\nA menudo verá viales que no están alineados correctamente con la imagen aérea de fondo o con la traza GPS. Puede ajustar esas vías para situarlas en el lugar exacto.\n\nPrimero haga clic sobre la vía que desea cambiar. Esto la resaltará y mostrará los nodos o puntos de control a lo largo de la vía que la forman. A continuación simplemente arrastre esos puntos a la posición correcta. Si desea añadir nuevos puntos de control para dibujar la carretera con mayor detalle haga doble clic sobre la parte de la vía donde quiere añadir el nuevo nodo y este será creado en la vía.\n\nSi la vía conecta con otra carretera o camino pero esta conexión no aparece correctamente en el mapa puede arrastrar uno de los puntos de la vía hasta la otra carretera y se unirá automáticamente a ella mediante un nodo común. Es muy importante tener las carreteras conectadas en el mapa, ya que es esencial para proporcionar instrucciones correctas para la conducción si queremos que la cartografía se útil, por ejemplo, para los navegadores GPS.\n\n### Eliminar\n\nSi un camino es totalmente incorrecto -ha observado que no aparece en las imágenes de satélite y de manera ideal lo ha confirmado en campo- puede eliminarlo, lo cual lo borrará del mapa. Sea precavido al eliminar elementos del mapa. Como cualquier otra edición que haga este cambio será visto por todo el mundo y las imágenes de satélite a menudo no están actualizadas, por lo que una carretera que no existe en ellas pero sí en el mapa simplemente puede aparecer porque es de reciente construcción y otro usuario la ha añadido.\n\n### Crear\n\n¿Ha encontrado un lugar donde debería existir una carretera pero no aparece? Haga clic con el ratón sobre el icono 'Línea' situado en la parte superior izquierda del editor o simplemente presione la tecla '2'  de su teclado que es el acceso rápido para comenzar a dibujar una línea.\n\nHaga clic sobre el mapa en el inicio de la carretera para comenzar a dibujar. Si la vía se ramifica a partir de una carretera ya existente empiece haciendo clic sobre el lugar donde ambas conectan.\n\nHaga clic en puntos a lo largo de la vía para definir el trazado correcto de la carretera. La densidad de puntos dependerá de la complejidad del recorrido, por lo que es aconsejable dibujar desde un nivel de zoom apropiado. Si la vía que está dibujando atraviesa otra carretera conéctela con esta haciendo clic sobre el punto de intersección. Una vez haya terminado el dibujo haga doble clic con el ratón o presiones la tecla 'Return' o 'Intro' de su teclado para finalizar.\n",
             "gps": "# GPS\n\nLas trazas de GPS recogidas son una valiosa fuente de datos para OpenStreetMap. Este\neditor soporta trazas locales - archivos `.gpx` en su equipo local. Usted puede obtener\neste tipo de traza GPS con una serie de aplicaciones de smartphone, como también con\nhardware GPS personal.\n\nPara más información sobre cómo realizar un relevamiento GPS, lea\n[Mapear con un smartphone, GPS, o papel](http://learnosm.org/es/mobile-mapping/).\n\nPara utilizar una traza GPX para mapear, arrastre y suelte el archivo GPX en el editor\nde mapa. Si este es reconocido, se añadirá al mapa como una línea púrpura brillante.\nHaga clic en el menú 'Datos del mapa' en el lado derecho para activar,\ndesactivar o acercar a esta nueva capa alimentada por GPX.\n\nLa traza GPX no se carga directamente a OpenStreetMap - la mejor manera de\nutilizarlo es dibujar en el mapa, usándolo como guía para las nuevos elementos que\nagregue, y también [subirlo a OpenStreetMap](http://www.openstreetmap.org/trace/create)\npara que otros usuarios lo utilicen.\n",
             "imagery": "# Imágenes\n\nLas imágenes aéreas son un importante recurso para mapear. Una combinación\nde vuelos aéreos, vistas de satélite, y compilaciones de fuentes libres están disponibles\nen el editor bajo el menú 'Ajustes del fondo' a la derecha.\n\nDe forma predeterminada se presenta la capa de satélite de [Bing Maps](http://www.bing.com/maps/) en el editor, pero mientras se mueva y acerque el mapa a nuevas áreas\ngeográficas, nuevas fuentes estarán disponibles. Algunos países, como los Estados\nUnidos, Francia, y Dinamarca poseen imágenes de muy alta calidad disponible\npara algunas áreas.\n\nLas imágenes a veces están desplazadas de los datos del mapa debido a un error en el\nlado del proveedor de imágenes. Si observa muchos caminos desplazados del fondo,\nno los mueva inmediatamente para emparejarlos con el fondo. En su lugar puede ajustar\nlas imágenes para que coincidan con los datos existentes haciendo clic\nen 'Corregir alineación' en la opción 'Ajustes del fondo' de la interfaz.\n",
                     "douglas-avenue": "Avenida Donato",
                     "east-street": "Calle Estero",
                     "elm-street": "Calle Santa Elena",
                     "douglas-avenue": "Avenida Donato",
                     "east-street": "Calle Estero",
                     "elm-street": "Calle Santa Elena",
-                    "flower-street": "Calle Florencio Balcarce",
+                    "flower-street": "Calle Florida",
                     "foster-street": "Calle Formosa",
                     "french-street": "Calle República Francesa",
                     "garden-street": "Calle Garcia Lorca",
                     "foster-street": "Calle Formosa",
                     "french-street": "Calle República Francesa",
                     "garden-street": "Calle Garcia Lorca",
                 "start_drag_midpoint": "Pequeños triángulos se dibujan en los *puntos intermedios* entre los nodos. Otra forma de crear un nuevo nodo es arrastrar un punto intermedio a una nueva ubicación. **Arrastre el triángulo del punto intermedio para crear un nuevo nodo a lo largo de la curva del camino.**",
                 "continue_drag_midpoint": "¡Esta línea se ve mucho mejor! Continúe ajustando esta línea haciendo doble clic o arrastrando puntos intermedios hasta que la curva coincida con la forma del camino. **Cuando esté satisfecho con la apariencia de la línea, haga clic en Aceptar.**",
                 "delete_lines": "Está bien eliminar líneas de caminos que no existen en el mundo real.{br}He aquí un ejemplo en el que la ciudad planeó una {street} pero nunca la construyó. Podemos mejorar esta parte del mapa eliminando las líneas extra.",
                 "start_drag_midpoint": "Pequeños triángulos se dibujan en los *puntos intermedios* entre los nodos. Otra forma de crear un nuevo nodo es arrastrar un punto intermedio a una nueva ubicación. **Arrastre el triángulo del punto intermedio para crear un nuevo nodo a lo largo de la curva del camino.**",
                 "continue_drag_midpoint": "¡Esta línea se ve mucho mejor! Continúe ajustando esta línea haciendo doble clic o arrastrando puntos intermedios hasta que la curva coincida con la forma del camino. **Cuando esté satisfecho con la apariencia de la línea, haga clic en Aceptar.**",
                 "delete_lines": "Está bien eliminar líneas de caminos que no existen en el mundo real.{br}He aquí un ejemplo en el que la ciudad planeó una {street} pero nunca la construyó. Podemos mejorar esta parte del mapa eliminando las líneas extra.",
-                "rightclick_intersection": "La última calle real es {street1}, por lo que vamos a *dividir* a {street2} en esta intersección y quitar todo lo anterior. **Haga clic derecho en el nodo de intersección.**",
+                "rightclick_intersection": "La última calle que realmente existe es {street1}, por lo que vamos a *dividir* a {street2} en esta intersección y quitar todo lo anterior. **Haga clic derecho en el nodo de intersección.**",
                 "split_intersection": "**Haga clic en el botón {button} para dividir {street}.**",
                 "retry_split": "No ha hecho clic en el botón Dividir. Inténtelo de nuevo.",
                 "did_split_multi": "¡Bien hecho! {street1} ahora está dividida en dos partes. La parte superior se puede quitar. **Haga clic en la parte superior de {street2} para seleccionarla.**",
                 "split_intersection": "**Haga clic en el botón {button} para dividir {street}.**",
                 "retry_split": "No ha hecho clic en el botón Dividir. Inténtelo de nuevo.",
                 "did_split_multi": "¡Bien hecho! {street1} ahora está dividida en dos partes. La parte superior se puede quitar. **Haga clic en la parte superior de {street2} para seleccionarla.**",
                 "start": "¡Comience a mapear!"
             }
         },
                 "start": "¡Comience a mapear!"
             }
         },
+        "shortcuts": {
+            "title": "Atajos de teclado",
+            "key": {
+                "alt": "Alt",
+                "backspace": "Retroceso",
+                "cmd": "Cmd",
+                "ctrl": "Ctrl",
+                "delete": "Suprimir",
+                "del": "Supr",
+                "end": "Fin",
+                "enter": "Intro",
+                "esc": "Esc",
+                "home": "Inicio",
+                "option": "Opción",
+                "pause": "Pausa",
+                "pgdn": "AvPág",
+                "pgup": "RePág",
+                "return": "Retorno",
+                "shift": "Mayús",
+                "space": "Espacio"
+            },
+            "gesture": {
+                "drag": "arrastrar"
+            },
+            "or": "-o-",
+            "browsing": {
+                "title": "Navegando",
+                "navigation": {
+                    "title": "Navegación",
+                    "pan": "Panorámica del mapa",
+                    "pan_more": "Panorámica del mapa a una pantalla",
+                    "zoom": "Acercar / Alejar",
+                    "zoom_more": "Acercar / Alejar mucho"
+                },
+                "help": {
+                    "title": "Ayuda",
+                    "help": "Muestra la ayuda/documentación",
+                    "keyboard": "Muestra atajos de teclado"
+                },
+                "display_options": {
+                    "title": "Opciones de pantalla",
+                    "background": "Muestra opciones del fondo",
+                    "background_switch": "Vuelve al último fondo",
+                    "map_data": "Muestra opciones de datos del mapa",
+                    "fullscreen": "Ingresar al modo de pantalla completa",
+                    "wireframe": "Alterna el modo rejilla",
+                    "minimap": "Alterna el minimapa"
+                },
+                "selecting": {
+                    "title": "Seleccionando elementos",
+                    "select_one": "Selecciona un solo elemento",
+                    "select_multi": "Selecciona múltiples elementos",
+                    "lasso": "Dibuja un lazo de selección alrededor de los elementos"
+                },
+                "with_selected": {
+                    "title": "Con elemento seleccionado",
+                    "infobox": "Alterna la caja de información / medida",
+                    "edit_menu": "Alterna el menú editar"
+                },
+                "vertex_selected": {
+                    "title": "Con nodo seleccionado",
+                    "previous": "Ir al nodo anterior",
+                    "next": "Ir al siguiente nodo",
+                    "first": "Ir al primer nodo",
+                    "last": "Ir al último nodo",
+                    "change_parent": "Cambia la vía raiz"
+                }
+            },
+            "editing": {
+                "title": "Editando",
+                "drawing": {
+                    "title": "Dibujando",
+                    "add_point": "Modo 'añadir punto'",
+                    "add_line": "Modo 'añadir línea'",
+                    "add_area": "Modo 'añadir área'",
+                    "place_point": "Coloca un punto",
+                    "disable_snap": "Mantener presionado para desactivar el ajuste de punto",
+                    "stop_line": "Finaliza el dibujo de una línea o área"
+                },
+                "operations": {
+                    "title": "Operaciones",
+                    "continue_line": "Continua una línea en el nodo seleccionado",
+                    "merge": "Combina (fusiona) los elementos seleccionados",
+                    "disconnect": "Desconecta los elementos en el nodo seleccionado",
+                    "split": "Divide una línea en dos en el nodo seleccionado",
+                    "reverse": "Invierte una línea",
+                    "move": "Mueve los elementos seleccionados",
+                    "rotate": "Rota los elementos seleccionados",
+                    "orthogonalize": "Endereza una línea / Escuadra esquinas de área",
+                    "circularize": "Circulariza una línea o área cerrada",
+                    "reflect_long": "Refleja los elementos a través del eje más largo",
+                    "reflect_short": "Refleja los elementos a través del eje más corto",
+                    "delete": "Elimina elementos seleccionados"
+                },
+                "commands": {
+                    "title": "Comandos",
+                    "copy": "Copia elementos seleccionados",
+                    "paste": "Pega elementos seleccionados",
+                    "undo": "Deshace la última acción",
+                    "redo": "Rehace la última acción",
+                    "save": "Guarda cambios"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                     "label": "SSID (nombre de red)"
                 },
                 "kerb": {
                     "label": "SSID (nombre de red)"
                 },
                 "kerb": {
-                    "label": "Rampa de bordillo/cordón"
+                    "label": "Bordillo/Cordón"
                 },
                 "lamp_type": {
                     "label": "Tipo"
                 },
                 "lamp_type": {
                     "label": "Tipo"
                 "maxstay": {
                     "label": "Estadía máxima"
                 },
                 "maxstay": {
                     "label": "Estadía máxima"
                 },
+                "maxweight": {
+                    "label": "Peso máximo"
+                },
                 "mtb/scale": {
                     "label": "Dificultad de bicicleta de montaña",
                     "options": {
                 "mtb/scale": {
                     "label": "Dificultad de bicicleta de montaña",
                     "options": {
                 },
                 "amenity/police": {
                     "name": "Policía",
                 },
                 "amenity/police": {
                     "name": "Policía",
-                    "terms": "policía, policia, comisaría, gendarmería, cuartel, guardia civil, guardia municipal"
+                    "terms": "policía, policia, comisaría, comisaria, gendarmería, gendarmeria, cuartel, guardia civil, guardia municipal, prefectura, gna, pfa, psa"
                 },
                 "amenity/post_box": {
                     "name": "Buzón de correos",
                 },
                 "amenity/post_box": {
                     "name": "Buzón de correos",
                     "name": "Electricista",
                     "terms": "electricista, iluminista, electricidad"
                 },
                     "name": "Electricista",
                     "terms": "electricista, iluminista, electricidad"
                 },
+                "craft/electronics_repair": {
+                    "name": "Tienda de reparación de electrónicos",
+                    "terms": "reparación, electrónica, electrónicos, centro de servicio de reparación, aparatos, equipos, compuradora, ordenador, portátil, laptop, radio, televisión, tv, teléfono, celular, cámara, vídeo, procesadoras, trituradoras, lavadoras, microondas, planchas, refrigeradores, monitores"
+                },
                 "craft/gardener": {
                     "name": "Jardinero",
                     "terms": "jardinero,  jardinería, jardín"
                 "craft/gardener": {
                     "name": "Jardinero",
                     "terms": "jardinero,  jardinería, jardín"
                     "name": "Ciclovía",
                     "terms": "camino, senda, sendero, carril bici, bicisenda, ciclovía, ciclorruta, pista, ciclista, ciclismo, bicicleta, bici"
                 },
                     "name": "Ciclovía",
                     "terms": "camino, senda, sendero, carril bici, bicisenda, ciclovía, ciclorruta, pista, ciclista, ciclismo, bicicleta, bici"
                 },
+                "highway/elevator": {
+                    "name": "Ascensor",
+                    "terms": "ascensor, elevador, montacargas"
+                },
                 "highway/footway": {
                     "name": "Sendero peatonal",
                     "terms": "camino, senda, sendero, peatón, peatonal, caminata, senderismo, hiking, pista, caminar"
                 "highway/footway": {
                     "name": "Sendero peatonal",
                     "terms": "camino, senda, sendero, peatón, peatonal, caminata, senderismo, hiking, pista, caminar"
                 },
                 "leisure": {
                     "name": "Ocio",
                 },
                 "leisure": {
                     "name": "Ocio",
-                    "terms": "zona, diversión, entretenimiento, pasatiempo, distracción, recreo, ocio, esparcimiento"
+                    "terms": "zona, diversión, entretenimiento, pasatiempo, distracción, recreo, ocio, esparcimiento, tiempo libre"
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Centro de juegos para adultos",
                 },
                 "leisure/adult_gaming_centre": {
                     "name": "Centro de juegos para adultos",
                     "name": "Tienda de antigüedades",
                     "terms": "antigüedades, anticuario, colecciones, muebles antiguos, objetos antiguos, cuadros, pinturas, subastas"
                 },
                     "name": "Tienda de antigüedades",
                     "terms": "antigüedades, anticuario, colecciones, muebles antiguos, objetos antiguos, cuadros, pinturas, subastas"
                 },
+                "shop/appliance": {
+                    "name": "Tienda de electrodomésticos",
+                    "terms": "electrodomésticos, aire acondicionado, acondicionador de aire, aparatos, lavavajillas, secadora, heladera, freezer, congelador, nevera, parrilla, cocina, horno, frigorífico, estufa, lavarropas, lavadora, "
+                },
                 "shop/art": {
                     "name": "Tienda de arte",
                     "terms": "arte, exhibición, galería, tienda, almacén, negocio"
                 "shop/art": {
                     "name": "Tienda de arte",
                     "terms": "arte, exhibición, galería, tienda, almacén, negocio"
index 526a1bd7d108cf6363930b7a9f6fe04323b6870c..cb9277baea19cacb7f3bff449f625908ae80a898 100644 (file)
                     "name": "Uisuväljak"
                 },
                 "leisure/marina": {
                     "name": "Uisuväljak"
                 },
                 "leisure/marina": {
-                    "name": "Jahisadam",
-                    "terms": "Väikesadam, kaatrisadam"
+                    "name": "Väikesadam",
+                    "terms": "Jahisadam,kaatrisadam,jaht,paat,kaater,sadam"
                 },
                 "leisure/miniature_golf": {
                     "name": "Minatuurgolf",
                 },
                 "leisure/miniature_golf": {
                     "name": "Minatuurgolf",
index 8362a483825dc973b736200dcee066a3cc3ffef2..afc1ae0dd805624a7220a53ac4893511fc5e1a85 100644 (file)
         "help": {
             "title": "راهنمایی",
             "help": "#راهنمایی\n\nاین یک ویرایشگر برای  [OpenStreetMap](http://www.openstreetmap.org/) است،\nنقشه ای رایگان و قابل ویرایش از جهان. شما میتوانید از آن برای افزودن و بروزرسانی\nداده ها در ناحیه‌تان استفاده کنید، ساختن نقشه ی منبع‌باز و داده‌باز از جهان\nبرای همه بهتر است.\n\nویرایش هایی که شما در این نقشه می سازید برای هر کسی که از OpenStreetMap استفاده میکند قابل استفاده است. برای ایجاد یک ویرایش، شما نیاز دارید که یک\n[حساب رایگان OpenStreetMap](https://www.openstreetmap.org/user/new) داشته باشید.\n\n[ویرایشگر ID](http://ideditor.com/) یک پروژه مشترک است که [منبع کد در GitHub\nموجود است](https://github.com/systemed/iD).\n",
         "help": {
             "title": "راهنمایی",
             "help": "#راهنمایی\n\nاین یک ویرایشگر برای  [OpenStreetMap](http://www.openstreetmap.org/) است،\nنقشه ای رایگان و قابل ویرایش از جهان. شما میتوانید از آن برای افزودن و بروزرسانی\nداده ها در ناحیه‌تان استفاده کنید، ساختن نقشه ی منبع‌باز و داده‌باز از جهان\nبرای همه بهتر است.\n\nویرایش هایی که شما در این نقشه می سازید برای هر کسی که از OpenStreetMap استفاده میکند قابل استفاده است. برای ایجاد یک ویرایش، شما نیاز دارید که یک\n[حساب رایگان OpenStreetMap](https://www.openstreetmap.org/user/new) داشته باشید.\n\n[ویرایشگر ID](http://ideditor.com/) یک پروژه مشترک است که [منبع کد در GitHub\nموجود است](https://github.com/systemed/iD).\n",
-            "editing_saving": "# ویرایش و ذخیره کردن\n\nاین ویرایشگر طراحی شده تا کاملا آنلاین کار کند و از طریق وبسایت به آن دسترسی داشته باشید.\n\n### انتخاب عناصر\n\nبرای انتخاب یک عنصر نقشه، مانند یک جاده یا یک نقطه؛ بر روی آن در نقشه کلیک کنید. این کار باعث می‌شود تا آن عنصر پررنگ شود و یک کادر جزئیات در کنار صفحه در مورد آن باز شود و یک منو از عملیات‌هایی که می‌توانید با این عنصر انجام دهید را مشاهده کنید.\n\nبرای انتخاب چند عنصر، کلید shift را پایین نگه دارید. سپس همزمان بر روی عنصر دوم کلیک کنید. یک مستطیل ظاهر می‌شود. با موس محدوده‌ای مشخص را انتخاب کنید تا تمامی عناصر درون مستطیل انتخاب شوند.\n\n\n### ذخیره کردن ویرایش‌ها\n\nزمانی که شما تغیراتی را مانند ویرایش جاده‌ها، ساختمان‌ها و مکان‌ها انجام می‌دهید، این‌ها به صورت محلی ذخیره می‌شوند تا هنگامی که آن‌ها را به سرور بفرستید. نگران نباشید اگر اشتباهی انجام دادید. شما می‌توانید با آندو و ریدو کردن تغیرات را به عقب برگردانید.\n\nبرای اتمام یک سری از تغیرات بر روی دکمه‌ی 'ذخیره' کلیک کنید، هنگامی که تغیرات مربوط به محلی را اتمام و می‌خواهید محل دیگری را ویرایش کنید. شما امکان این را دارید تا تغیراتی را که انجام داده‌اید را بازبینی کنید و همچنین ویرایشگر پیشنهادات و هشدارهایی به شما می‌دهد اگر مشکلی در این تغیرات دیده شود.\n\n\nاگر همه چیز خوب به نظر برسد، شما میتوانید یک دیدگاه کوتاه که توضیح دهد چه کاری انجام داده‌اید وارد کنید و بر روی دکمه‌ی 'ذخیره' کلیک کنید تا تغیرات در [OpenStreetMap.org](http://www.openstreetmap.org/) ذخیره شود. جایی که برای تمامی کاربران دیگر نیز قابل مشاهده است.\n\nاگر شما نمی‌توانید ویرایش خود را تکمیل کنید، میتوانید ویرایشگر را رها کنید و در آینده برگردید (در همان رایانه و مرورگر) و ویرایشگر به شما امکان می‌دهد تغیرات پیشین خود را بازیابی کنید.\n\n\n### استفاده از ویرایشگر\n\nیک فهرست از میانبرهای صفحه‌کلید در [اینجا](http://wiki.openstreetmap.org/wiki/ID/Shortcuts) قابل مشاهده است.\n\n\n\n",
             "roads": "# جاده ها\n\nشما میتوانید جاده ها را ایجاد کنید، تعمیر کنید، و حذف کنید به وسیله ی این ویرایشگر. جاده ها میتوانند همه نوعی باشند:\nپیاده روی، بزرگراه، راه آهن، راه موتور سیکلت، و بیشتر - هر چیزی که غالبا - برای عبور است\nباید نقشه شود.\n\n### انتخاب کردن\n\nروی جاده کلیک کنید تا انتخاب شود. طرح کلی باید قابل نمایش باشد، همراه\nیک منوی ابزار کوچک روی نقشه و یک نوار کناری نشان میدهد اطلاعات بیشتری\nدرباره جاده.\n\n### اصلاح کردن\n\nاغلب جاده هایی که میبینید با تصاویر نقشه نگاری پشت سرشان یا پیگیری GPS\nهم طراز نیستند. شما میتوانید این جاده ها را در مکان درستشان تطبیق\nدهید.\n\nاولین کلیک روی نقشه شما میخواهید تغییر دهید. اینکار آنرا برجسته میکند و نقاط\nکنترل را نشان میدهد شما میتوانید آنرا به مکان بهتری بکشید. اگر\nبخواهید نقاط کنترل جدید بیشتری برای اطلاعات بیشتر اضافه کنید، روی قسمتی\nاز نقشه که بدون گره است دوبار کلیک کنید، و یکی اضاف خواهد شد.\n\nاگر جاده به جاده های دیگر متصل باشد، اما روی نقشه به درستی\nمتصل نباشد، شما میتوانید یکی از نقاط کنترل را بکشید به سایر جاده ها برای\nفراهم کردن پیوستن آنها. داشتن جاده های پیوسته و متصل  برای نقشه مهم است\nو ارائه دستورالعمل ها ی رانندگی ضروری است.\n\nهمچنین میتوانید روی ابزار 'انتقال' کلیک کنید یا کلید میانبر `M` را فشار دهید تا همه جاده یک بار منتقل\nشود، و بعد دوباره کلیک کنید تا جابجایی ذخیره شود.\n\n### حذف کردن\n\nاگر جاده کامل اشتباه است - میتوانید ببینید که در تصویر ماهواره ای موجود نیست و بصورت ایده آل\nبطور محلی پذیرفته شده که در حال حاضر موجود نیست - شما میتوانید\nآنرا حذف کنید، با پاک کردن آن از نقشه. هنگام حذف عنصر محتاط باشید-\nشبیه هر ویرایش دیگری، نتایج توسط هر کسی دیده میشود تصاویر ماهواره ای غالبا تاریخ گذشته اند،\nپس ممکن است به طور ساده جاده جدیدا ساخته شده باشد.\n\nشما میتوانید جاده ای را حذف کنید با کلیک روی آن و انتخاب آن، سپس کلیک روی آیکون سطل زباله\nیا فشار دکمه ی  'Delete'.\n\n### ایجاد کردن\n\nجاهایی یافت میشوند که باید جاده باشند ولی اینگونه نیست؟ روی آیکون  'خط'\nدر بالا سمت چپ ویرایشگر کلیک کنید یا کلید میانبر`2` را فشار دهید\nتا کشیدن یک خط شروع شود.\n\nبرای شروع کشیدن روی ابتدای جاده کلیک کنید. اگر جاده\nشاخه ای از جاده ی موجود باشد، با کلیک روی مکانی که به هم متصل اند شروع کنید.\n\nسپس روی نقاط در امتداد جاده کلیک کنید به طوری که از مسیر سمت راست ، طبق تصاویر ماهواره ای\nیا GPS پیروی کند. اگر جاده ی در حال کشیدن شما از سایر جاده ها میگذرد، با کلیک\nروی نقطه تقاطع آنرا متصل کنید. وقتی کشیدنتان انجان شد، دوبار کلیک کنید\nیا 'بازگشت' را فشار دهید یا روی صفحه کلید 'Enter' را فشار دهید.\n",
             "gps": "# جی‌پی‌اس\n\nردیابی‌های جی‌پی‌اس جمع‌آوری شده یکی از منابع ارزشمند برای اوپن‌استریت‌مپ هستند.\nاین ویرایشگر از ردیابی‌های محلی (پرونده‌های `.gpx`) پشتیبانی می‌کند.\nشما می‌توانید این نوع ردیابی‌ها را با بعضی از نرم‌افزارهای تلفن‌های هوشمند یا سخت‌افزارهای GPS ضبط کنید.\n\nبرای اطلاعات بیشتر در این موارد و چگونگی اجرای این کار میتوانید آموزش [نقشه‌کشی با گوشی هوشمند، دستگاه GPS و یا نقشه کاغذی](http://learnosm.org/fa/mobile-mapping/) را بخوانید.\n\nبرای استفاده از یک ردیابی GPX، فایل را به داخل ویرایشگر بکشید.\nاگر فایل GPX شناسایی بشود، مسیرهای آن به شکل خطوط بنفشی روشن در نقشه نشان داده می‌شوند. در منوی سمت راست صفحه بر روی گذینه‌ی 'Map Data' کلیک کنید تا تنظیمات این لایه GPX را مشاهده کنید.\n\nردیابی‌های جی‌پی‌اکس مستقیما به او‌اس‌ام بارگذاری نمیشوند. بهترین راه برای تبدیل آن‌ها، استفاد از آن‌ها به عنوان راهنمایی برای ایجاد مسیر دستی است. همچنین میتوانید صفحه [بارگزاری به او‌اس‌ام](http://www.openstreetmap.org/trace/create) را مطالعه کنید.\n",
             "imagery": "# تصاویر هوایی\n\nتصاویر هوایی یک منبع مهمبرای نقشه‌کشی هستند. یک مجموعه از تصاویر و نقشه‌های هوایی و ماهواره‌ای رایگان در منوی سمت راست و بخش the 'Background Settings'  وجود دارند.\n\nبه طور پیشفرض تصاویر ماهواره‌ای  [نقشه بینگ](http://www.bing.com/maps/) در پس‌زمینه قرار دارند، اما به محض زوم کردن و جابجایی در نقشه منابع دیگر نیز در دسترس خواهند بود. بعضی کشورها مانند ایالات متحده، فرانسه و دانمارک در بعضی ناحیه‌ها دارای تصاویر بسیار باکیفیت هوایی هستند.\n\nتصاویر گاهی اوقات  به علت خطا در سرور ارائه دهنده با موقعیت واقعی اختلاف دارند. اگر شما مسیر‌های بسیاری می‌بینید که با تصویر پس‌زمینه فاصله دارند، به هیچ عنوان بدون تحقیق آنها را با توجه به پس‌زمینه انتقال ندهید! به جای این کار می‌توانید پس از مطلع شدن از اختلاف تصاویر، آن‌ها را با کلیک بر روی دکمه‌ی 'Fix alignment' تنظیم کنید.\n",
             "roads": "# جاده ها\n\nشما میتوانید جاده ها را ایجاد کنید، تعمیر کنید، و حذف کنید به وسیله ی این ویرایشگر. جاده ها میتوانند همه نوعی باشند:\nپیاده روی، بزرگراه، راه آهن، راه موتور سیکلت، و بیشتر - هر چیزی که غالبا - برای عبور است\nباید نقشه شود.\n\n### انتخاب کردن\n\nروی جاده کلیک کنید تا انتخاب شود. طرح کلی باید قابل نمایش باشد، همراه\nیک منوی ابزار کوچک روی نقشه و یک نوار کناری نشان میدهد اطلاعات بیشتری\nدرباره جاده.\n\n### اصلاح کردن\n\nاغلب جاده هایی که میبینید با تصاویر نقشه نگاری پشت سرشان یا پیگیری GPS\nهم طراز نیستند. شما میتوانید این جاده ها را در مکان درستشان تطبیق\nدهید.\n\nاولین کلیک روی نقشه شما میخواهید تغییر دهید. اینکار آنرا برجسته میکند و نقاط\nکنترل را نشان میدهد شما میتوانید آنرا به مکان بهتری بکشید. اگر\nبخواهید نقاط کنترل جدید بیشتری برای اطلاعات بیشتر اضافه کنید، روی قسمتی\nاز نقشه که بدون گره است دوبار کلیک کنید، و یکی اضاف خواهد شد.\n\nاگر جاده به جاده های دیگر متصل باشد، اما روی نقشه به درستی\nمتصل نباشد، شما میتوانید یکی از نقاط کنترل را بکشید به سایر جاده ها برای\nفراهم کردن پیوستن آنها. داشتن جاده های پیوسته و متصل  برای نقشه مهم است\nو ارائه دستورالعمل ها ی رانندگی ضروری است.\n\nهمچنین میتوانید روی ابزار 'انتقال' کلیک کنید یا کلید میانبر `M` را فشار دهید تا همه جاده یک بار منتقل\nشود، و بعد دوباره کلیک کنید تا جابجایی ذخیره شود.\n\n### حذف کردن\n\nاگر جاده کامل اشتباه است - میتوانید ببینید که در تصویر ماهواره ای موجود نیست و بصورت ایده آل\nبطور محلی پذیرفته شده که در حال حاضر موجود نیست - شما میتوانید\nآنرا حذف کنید، با پاک کردن آن از نقشه. هنگام حذف عنصر محتاط باشید-\nشبیه هر ویرایش دیگری، نتایج توسط هر کسی دیده میشود تصاویر ماهواره ای غالبا تاریخ گذشته اند،\nپس ممکن است به طور ساده جاده جدیدا ساخته شده باشد.\n\nشما میتوانید جاده ای را حذف کنید با کلیک روی آن و انتخاب آن، سپس کلیک روی آیکون سطل زباله\nیا فشار دکمه ی  'Delete'.\n\n### ایجاد کردن\n\nجاهایی یافت میشوند که باید جاده باشند ولی اینگونه نیست؟ روی آیکون  'خط'\nدر بالا سمت چپ ویرایشگر کلیک کنید یا کلید میانبر`2` را فشار دهید\nتا کشیدن یک خط شروع شود.\n\nبرای شروع کشیدن روی ابتدای جاده کلیک کنید. اگر جاده\nشاخه ای از جاده ی موجود باشد، با کلیک روی مکانی که به هم متصل اند شروع کنید.\n\nسپس روی نقاط در امتداد جاده کلیک کنید به طوری که از مسیر سمت راست ، طبق تصاویر ماهواره ای\nیا GPS پیروی کند. اگر جاده ی در حال کشیدن شما از سایر جاده ها میگذرد، با کلیک\nروی نقطه تقاطع آنرا متصل کنید. وقتی کشیدنتان انجان شد، دوبار کلیک کنید\nیا 'بازگشت' را فشار دهید یا روی صفحه کلید 'Enter' را فشار دهید.\n",
             "gps": "# جی‌پی‌اس\n\nردیابی‌های جی‌پی‌اس جمع‌آوری شده یکی از منابع ارزشمند برای اوپن‌استریت‌مپ هستند.\nاین ویرایشگر از ردیابی‌های محلی (پرونده‌های `.gpx`) پشتیبانی می‌کند.\nشما می‌توانید این نوع ردیابی‌ها را با بعضی از نرم‌افزارهای تلفن‌های هوشمند یا سخت‌افزارهای GPS ضبط کنید.\n\nبرای اطلاعات بیشتر در این موارد و چگونگی اجرای این کار میتوانید آموزش [نقشه‌کشی با گوشی هوشمند، دستگاه GPS و یا نقشه کاغذی](http://learnosm.org/fa/mobile-mapping/) را بخوانید.\n\nبرای استفاده از یک ردیابی GPX، فایل را به داخل ویرایشگر بکشید.\nاگر فایل GPX شناسایی بشود، مسیرهای آن به شکل خطوط بنفشی روشن در نقشه نشان داده می‌شوند. در منوی سمت راست صفحه بر روی گذینه‌ی 'Map Data' کلیک کنید تا تنظیمات این لایه GPX را مشاهده کنید.\n\nردیابی‌های جی‌پی‌اکس مستقیما به او‌اس‌ام بارگذاری نمیشوند. بهترین راه برای تبدیل آن‌ها، استفاد از آن‌ها به عنوان راهنمایی برای ایجاد مسیر دستی است. همچنین میتوانید صفحه [بارگزاری به او‌اس‌ام](http://www.openstreetmap.org/trace/create) را مطالعه کنید.\n",
             "imagery": "# تصاویر هوایی\n\nتصاویر هوایی یک منبع مهمبرای نقشه‌کشی هستند. یک مجموعه از تصاویر و نقشه‌های هوایی و ماهواره‌ای رایگان در منوی سمت راست و بخش the 'Background Settings'  وجود دارند.\n\nبه طور پیشفرض تصاویر ماهواره‌ای  [نقشه بینگ](http://www.bing.com/maps/) در پس‌زمینه قرار دارند، اما به محض زوم کردن و جابجایی در نقشه منابع دیگر نیز در دسترس خواهند بود. بعضی کشورها مانند ایالات متحده، فرانسه و دانمارک در بعضی ناحیه‌ها دارای تصاویر بسیار باکیفیت هوایی هستند.\n\nتصاویر گاهی اوقات  به علت خطا در سرور ارائه دهنده با موقعیت واقعی اختلاف دارند. اگر شما مسیر‌های بسیاری می‌بینید که با تصویر پس‌زمینه فاصله دارند، به هیچ عنوان بدون تحقیق آنها را با توجه به پس‌زمینه انتقال ندهید! به جای این کار می‌توانید پس از مطلع شدن از اختلاف تصاویر، آن‌ها را با کلیک بر روی دکمه‌ی 'Fix alignment' تنظیم کنید.\n",
                 "internet_access/ssid": {
                     "label": "SSID (نام شبکه)"
                 },
                 "internet_access/ssid": {
                     "label": "SSID (نام شبکه)"
                 },
-                "kerb": {
-                    "label": "سطح شیبدار جدول"
-                },
                 "lamp_type": {
                     "label": "نوع"
                 },
                 "lamp_type": {
                     "label": "نوع"
                 },
index d80dbf945d78e9806e81199de635f7d599a90c99..98ffbb3a14177da51e1030086cab51ab46095f61 100644 (file)
                     "multiple": "Näitä karttakohteita ei voi poistaa, sillä niitä ei ole ladattu kokonaan."
                 },
                 "part_of_relation": {
                     "multiple": "Näitä karttakohteita ei voi poistaa, sillä niitä ei ole ladattu kokonaan."
                 },
                 "part_of_relation": {
-                    "single": "Tätä ominaisuutta ei voi poistaa koska se on osa suurempaa kokonaisuutta. Sinun täytyy poistaa sen relaatio."
+                    "single": "Tätä ominaisuutta ei voi poistaa koska se on osa suurempaa kokonaisuutta. Sinun täytyy poistaa sen relaatio.",
+                    "multiple": "Näitä ominaisuuksia ei voi poistaa sillä ne ovat osa suurempaa relaatiota. Sinun täytyy ensin poistaa kohde relaatiosta."
                 }
             },
             "add_member": {
                 }
             },
             "add_member": {
                 "structure": {
                     "type": "Tyyppi",
                     "default": "Oletus",
                 "structure": {
                     "type": "Tyyppi",
                     "default": "Oletus",
-                    "layer": "Tietokerros"
+                    "layer": "Korkeustaso"
                 }
             },
             "add": "Lisää",
                 }
             },
             "add": "Lisää",
             "data_layers": "Tietokerrokset",
             "fill_area": "Alueen taustatäyttö",
             "map_features": "Karttaominaisuudet",
             "data_layers": "Tietokerrokset",
             "fill_area": "Alueen taustatäyttö",
             "map_features": "Karttaominaisuudet",
-            "autohidden": "Nämä kohteet ovat piilotettu automaattisesti, sillä ne sotkisivat karttanäkymää liikaa. Näytä ne suurentamalla karttaa."
+            "autohidden": "Nämä kohteet on piilotettu automaattisesti, sillä ne sekoittaisivat karttanäkymää liikaa. Saat ne näkyviin suurentamalla karttaa."
         },
         "feature": {
             "points": {
         },
         "feature": {
             "points": {
         "help": {
             "title": "Ohje",
             "help": "# Ohje\n\nTämä on ohjelma vapaasti muokattavan\n[OpenStreetMap](http://www.openstreetmap.org/)-kartan\nmuokkaamiseen. Voit käyttää sitä vapaasti alueesi muokkaamiseen ja osallistua ihmisten tekemän\nmaailmankartan luomiseen.\n\nKarttaan tehtävät muutokset ovat näkyvillä kaikille OpenStreetMapin käyttäjille.\nKartan muokkaaminen edellyttää ilmaista [OpenStreetMap-käyttäjätiliä](https://www.openstreetmap.org/login).\n\n[iD-muokkausohjelma](http://ideditor.com/) on yhteistyöprojekti, jonka\n[lähdekoodi on saatavilla GitHubista](https://github.com/openstreetmap/iD).\n\n\n",
         "help": {
             "title": "Ohje",
             "help": "# Ohje\n\nTämä on ohjelma vapaasti muokattavan\n[OpenStreetMap](http://www.openstreetmap.org/)-kartan\nmuokkaamiseen. Voit käyttää sitä vapaasti alueesi muokkaamiseen ja osallistua ihmisten tekemän\nmaailmankartan luomiseen.\n\nKarttaan tehtävät muutokset ovat näkyvillä kaikille OpenStreetMapin käyttäjille.\nKartan muokkaaminen edellyttää ilmaista [OpenStreetMap-käyttäjätiliä](https://www.openstreetmap.org/login).\n\n[iD-muokkausohjelma](http://ideditor.com/) on yhteistyöprojekti, jonka\n[lähdekoodi on saatavilla GitHubista](https://github.com/openstreetmap/iD).\n\n\n",
-            "editing_saving": "# Muokkaaminen ja tallentaminen\n\nTätä muokkausohjelmaa tulisi ensisijaisesti käyttää toimivalla Internet-yhteydellä, kuten nyt verkkoselaimella.\n\n### Karttakohteiden valitseminen\n\nValitse karttakohde, kuten tie tai ravintola napsauttamalla sitä kerran kartalla. Tällöin karttakohde korostetaan ja vasemmalle avautuu kohteen muokkausnäkymä.\n\nValitse useita karttakohteita kerralla napsauttamalla niitä ja pitämällä Shiht-näppäin pohjassa tai vetämällä kartalle valintaikkuna. Kaikki valintaikkunan sisällä olevat kohteet valitaan.\n\n### Muokkausten tallentaminen\n\nKartalle tehtävät muutokset tallennetaan väliaikaisesti tietokoneelle, kunnes ne siirretään palvelimelle. Älä pelkää virheiden tekemistä - muutoksen voi perua napsauttamalla Kumoa ja tuoda takaisin napsauttamalla Tee uudelleen.\n\nTallenna kaikki karttaan tehdyt muutokset napsauttamalla \"Tallenna\": muista toimia näin säännöllisesti. Karttalaadun varmistamiseksi iD tarkistaa muutokset tyypillisten huolimattomuusvirheiden varalta ja varoittaa, jos osa muutoksista edellyttää toimenpiteitä ennen tallennusta.\n\nJos huomautettavaa ei ole, lisää pieni kommentti tehdyistä muutoksista ja tallenna muutokset palvelimelle napsauttamalla jälleen \"Tallenna\". Muutokset tulevat näkyviin [OpenStreetMap.orgiin](http://www.openstreetmap.org/), jossa ne ovat kaikkien käyttäjien nähtävissä ja tarkasteltavissa. Jos muutokset meinaavat jäädä kesken etkä halua vielä tallentaa niitä, voit sulkea selainikkunan. Seuraavalla kerralla iD-muokkain mahdollistaa viime kerran muokkausten palauttamisten.\n\n### Pikanäppäimet\n\nLuettelo käytössä olevista pikanäppäimistä [löytyy OSM-Wikistä](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n",
             "roads": "# Tiet\n\nTällä muokkausohjelmalla voi lisätä, muokata ja poistaa teitä. Tie-sanalla\ntarkoitetaan kaikkia väyliä, kuten moottoriteitä, latuja, polkuja, pyöräteitä\nja monia muita.\n\n### Valitseminen\n\nValitse tie kartalta napsauttamalla sitä. Tien ulkoreuna korostuu, sen viereen\navautuu pikatoimintopalkki ja sivupalkkiin ilmestyy tien kohdemuokkain.\n\n### Siirtäminen ja muotoileminen\n\nKartalta voi löytää usein teitä, jotka eivät täsmää taustalla olevan ilmakuvan\ntai GPS-jäljen kanssa. Tällaiset tiet tulisi siirtää nopeasti oikealle paikalleen.\n\nAloita napsauttamalla siirrettävää tietä. Tien ulkoreunat korostuvat ja sen\nviivapisteet korostuvat. Tien muotoa voi muuttaa vetämällä viivapisteitä\nuusiin paikkoihin. Uuden viivapisteen voi luoda kaksoisnapsauttamalla\nmitä tahansa tien kohtaa, jossa ei jo ole viivapistettä.\n\nJos oikeassa maailmassa on kahden tien risteys, mutta ne eivät risteä\nkartalla, vedä joku viivapiste toiseen tiehen, jolloin niiden välille tulee\nristeys. Ei riitä, että tiet vain näyttävät risteävän kartalla, vaan niillä tulee\nolla yhteinen viivapiste. Tämä on erityisen tärkeää navigaattoreiden\nreititysohjelmistojen toimivuuden vuoksi.\n\nSiirrä koko tietä kerralla pikatoimintopalkin Siirrä-toiminnolla tai painamalla\nnäppäimistöstä M-näppäintä. Siirrä tie uudelle paikalleen ja lukitse siirto\nnapsauttamalla.\n\n### Poistaminen\n\nJos tie on täysin virheellinen - se esimerkiksi puuttuu satelliittikuvasta\nkokonaan tai se ei varmasti ole enää olemassa - se tulee poistaa\nkartalta. Mieti tarkkaan ennen karttakohteiden poistamispäätöstä -\nmuutos näkyy kartalla kaikille ja lisäksi satelliittikuvat ovat usein\nvanhentuneita, joten tie on jo voitu ehtiä rakentaa uudelleen.\n\nPoista tie valitsemalla se ja napsauttamalla sitten roskakorin\nkuvaketta tai napsauttamalla näppäimistön Delete-näppäintä.\n\n### Luominen\n\nPuuttuuko tie kartalta? Aloita tien piirtäminen napsauttamalla yläpalkista\nViiva tai paina pikanäppäintä `2` näppäimistöstä.\n\nNapsauta seuraavaksi tien lähtöpistettä. Jos tie lähtee jo kartalla olevan tien\nristeyksestä, napsauta risteyskohtaa.\n\nJatka napsauttelemalla tielle viivapisteitä säännöllisin välimatkoin\nseuraamalla ilmakuvaa tai GPS-jälkeä. Jos tie risteää jonkun muun tien kanssa, muodosta risteys napsauttamalla risteyskohtaa ja jatka taas normaaliin tapaan. Lopeta piirtäminen ja viimeistele tie\nkaksoisnapsauttamalla tai painamalla Enter-näppäintä. Peru tien piirtäminen ja poista tie painamalla näppäimistön askelpalautinta.\n",
             "gps": "# GPS\n\nGPS-mittaukset ovat tärkein OpenStreetMapin aineiston lähde.\nTämä muokkausohjelma tukee omalta tietokoneeltasi ladattavia `.gpx`-tiedostoja.\nGPS-mittauksia voi tehdä useilla älypuhelinsovelluksilla ja tietysti myös erillisillä\nGPS-mittalaitteilla.\n\nLisätietoja GPS-mittausten tekemisestä on sivuilla [Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/) (Karttatietojen kerääminen älypuhelimella, GPS-laitteella tai paperille) ja [Aloittelijan opas](http://wiki.openstreetmap.org/wiki/Fi:Beginners_Guide_1.1).\n\nKäytä GPX-tiedostoa kartoittamisen apuna vetämällä ja pudottamalla tiedosto kartanmuokkausohjelmaan. Jos se toimii, GPS-jälki ilmestyy karttapohjalle kirkkaanviolettina viivana. Piilota, näytä uudelleen tai muuta tämän GPX-tason lähennystasoa Karttatiedot-valikosta oikeasta reunasta.\n\nTällä tavalla kartoittamisen apuna käytettyä GPX-tiedostoa ei tallenneta OpenStreetMapiin - tiedosto tulee hyödynnettyä parhaiten tallentamalla tiedosto myös muiden [karttakehittäjien käyttöön](http://www.openstreetmap.org/trace/create).\n",
             "imagery": "# Ilmakuvat\n\nIlmakuvat ovat tärkeä kartoittamisen apuväline. Lentokuvien,\nsatelliittikuvien ja vapaasti koottujen materiaalien kokoelma on\nkäytettävissä Taustan asetukset -valikosta oikean reunan sivupalkista.\n\nOletuksena taustalla näytetään [Bing-karttojen](http://www.bing.com/maps/) satelliittikuvat,\nmutta karttaa lähentämällä vaihtoehtoja tulee lisää.\nJoissakin maissa, kuten Suomessa, Ranskassa ja Tanskassa\non saatavilla korkealaatuisia lentokoneesta kuvattuja ilmakuvia.\n\nIlmakuva voi näyttää virheelliseltä palveluntarjoajan sivuston\nvirheen vuoksi. Jos tiestön sijainti heittää ilmakuvasta, älä ala heti\nsiirtämään niitä vastaamaan taustakuvaa, vaan siirrä ilmakuvataustaa\nvastaamaan tiestöä asetuksella \"Korjaa ilmakuvavirhe\"\nTaustan asetusten alaosassa.\n",
             "roads": "# Tiet\n\nTällä muokkausohjelmalla voi lisätä, muokata ja poistaa teitä. Tie-sanalla\ntarkoitetaan kaikkia väyliä, kuten moottoriteitä, latuja, polkuja, pyöräteitä\nja monia muita.\n\n### Valitseminen\n\nValitse tie kartalta napsauttamalla sitä. Tien ulkoreuna korostuu, sen viereen\navautuu pikatoimintopalkki ja sivupalkkiin ilmestyy tien kohdemuokkain.\n\n### Siirtäminen ja muotoileminen\n\nKartalta voi löytää usein teitä, jotka eivät täsmää taustalla olevan ilmakuvan\ntai GPS-jäljen kanssa. Tällaiset tiet tulisi siirtää nopeasti oikealle paikalleen.\n\nAloita napsauttamalla siirrettävää tietä. Tien ulkoreunat korostuvat ja sen\nviivapisteet korostuvat. Tien muotoa voi muuttaa vetämällä viivapisteitä\nuusiin paikkoihin. Uuden viivapisteen voi luoda kaksoisnapsauttamalla\nmitä tahansa tien kohtaa, jossa ei jo ole viivapistettä.\n\nJos oikeassa maailmassa on kahden tien risteys, mutta ne eivät risteä\nkartalla, vedä joku viivapiste toiseen tiehen, jolloin niiden välille tulee\nristeys. Ei riitä, että tiet vain näyttävät risteävän kartalla, vaan niillä tulee\nolla yhteinen viivapiste. Tämä on erityisen tärkeää navigaattoreiden\nreititysohjelmistojen toimivuuden vuoksi.\n\nSiirrä koko tietä kerralla pikatoimintopalkin Siirrä-toiminnolla tai painamalla\nnäppäimistöstä M-näppäintä. Siirrä tie uudelle paikalleen ja lukitse siirto\nnapsauttamalla.\n\n### Poistaminen\n\nJos tie on täysin virheellinen - se esimerkiksi puuttuu satelliittikuvasta\nkokonaan tai se ei varmasti ole enää olemassa - se tulee poistaa\nkartalta. Mieti tarkkaan ennen karttakohteiden poistamispäätöstä -\nmuutos näkyy kartalla kaikille ja lisäksi satelliittikuvat ovat usein\nvanhentuneita, joten tie on jo voitu ehtiä rakentaa uudelleen.\n\nPoista tie valitsemalla se ja napsauttamalla sitten roskakorin\nkuvaketta tai napsauttamalla näppäimistön Delete-näppäintä.\n\n### Luominen\n\nPuuttuuko tie kartalta? Aloita tien piirtäminen napsauttamalla yläpalkista\nViiva tai paina pikanäppäintä `2` näppäimistöstä.\n\nNapsauta seuraavaksi tien lähtöpistettä. Jos tie lähtee jo kartalla olevan tien\nristeyksestä, napsauta risteyskohtaa.\n\nJatka napsauttelemalla tielle viivapisteitä säännöllisin välimatkoin\nseuraamalla ilmakuvaa tai GPS-jälkeä. Jos tie risteää jonkun muun tien kanssa, muodosta risteys napsauttamalla risteyskohtaa ja jatka taas normaaliin tapaan. Lopeta piirtäminen ja viimeistele tie\nkaksoisnapsauttamalla tai painamalla Enter-näppäintä. Peru tien piirtäminen ja poista tie painamalla näppäimistön askelpalautinta.\n",
             "gps": "# GPS\n\nGPS-mittaukset ovat tärkein OpenStreetMapin aineiston lähde.\nTämä muokkausohjelma tukee omalta tietokoneeltasi ladattavia `.gpx`-tiedostoja.\nGPS-mittauksia voi tehdä useilla älypuhelinsovelluksilla ja tietysti myös erillisillä\nGPS-mittalaitteilla.\n\nLisätietoja GPS-mittausten tekemisestä on sivuilla [Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/) (Karttatietojen kerääminen älypuhelimella, GPS-laitteella tai paperille) ja [Aloittelijan opas](http://wiki.openstreetmap.org/wiki/Fi:Beginners_Guide_1.1).\n\nKäytä GPX-tiedostoa kartoittamisen apuna vetämällä ja pudottamalla tiedosto kartanmuokkausohjelmaan. Jos se toimii, GPS-jälki ilmestyy karttapohjalle kirkkaanviolettina viivana. Piilota, näytä uudelleen tai muuta tämän GPX-tason lähennystasoa Karttatiedot-valikosta oikeasta reunasta.\n\nTällä tavalla kartoittamisen apuna käytettyä GPX-tiedostoa ei tallenneta OpenStreetMapiin - tiedosto tulee hyödynnettyä parhaiten tallentamalla tiedosto myös muiden [karttakehittäjien käyttöön](http://www.openstreetmap.org/trace/create).\n",
             "imagery": "# Ilmakuvat\n\nIlmakuvat ovat tärkeä kartoittamisen apuväline. Lentokuvien,\nsatelliittikuvien ja vapaasti koottujen materiaalien kokoelma on\nkäytettävissä Taustan asetukset -valikosta oikean reunan sivupalkista.\n\nOletuksena taustalla näytetään [Bing-karttojen](http://www.bing.com/maps/) satelliittikuvat,\nmutta karttaa lähentämällä vaihtoehtoja tulee lisää.\nJoissakin maissa, kuten Suomessa, Ranskassa ja Tanskassa\non saatavilla korkealaatuisia lentokoneesta kuvattuja ilmakuvia.\n\nIlmakuva voi näyttää virheelliseltä palveluntarjoajan sivuston\nvirheen vuoksi. Jos tiestön sijainti heittää ilmakuvasta, älä ala heti\nsiirtämään niitä vastaamaan taustakuvaa, vaan siirrä ilmakuvataustaa\nvastaamaan tiestöä asetuksella \"Korjaa ilmakuvavirhe\"\nTaustan asetusten alaosassa.\n",
                 "choose_cafe": "**Valitse {preset} listalta.**",
                 "feature_editor": "Piste on nyt merkitty kahvilaksi. Kohdemuokkaimella voi täydentää sen tietoja.",
                 "add_name": "OpenStreetMapissa minkään kentän täyttäminen ei ole pakollista, ja voit jättää kenttiä tyhjäksi.{br}Kuvitellaan, että tunnet tämän kahvilan paikallistuntemukselta ja muistat sen nimen. **Kirjoita kahvilalle nimi.**",
                 "choose_cafe": "**Valitse {preset} listalta.**",
                 "feature_editor": "Piste on nyt merkitty kahvilaksi. Kohdemuokkaimella voi täydentää sen tietoja.",
                 "add_name": "OpenStreetMapissa minkään kentän täyttäminen ei ole pakollista, ja voit jättää kenttiä tyhjäksi.{br}Kuvitellaan, että tunnet tämän kahvilan paikallistuntemukselta ja muistat sen nimen. **Kirjoita kahvilalle nimi.**",
-                "add_close": "Kohdemuokkain tallentaa muutokset automaattisesti. **Kun olet kirjoittanut nimen, sulje kohdemuokkain painamalla Esc-näppäintä tai napsauttamalla {button}-painiketta.**",
                 "reselect": "Usein paikkapisteet on jo lisätty kartalle, mutta niiden tiedot voivat olla vanhentuneita tai puutteellisia. Näitä tietoja voi korjata tai täydentää. **Valitse äsken luomasi kahvila napsauttamalla sitä.**",
                 "update": "Lisätään kahvilalle tietoja. Voit vaihtaa nimen, lisätä keittiökulttuurin tai osoitteen. **Muuta kahvilan tietoja.**",
                 "reselect": "Usein paikkapisteet on jo lisätty kartalle, mutta niiden tiedot voivat olla vanhentuneita tai puutteellisia. Näitä tietoja voi korjata tai täydentää. **Valitse äsken luomasi kahvila napsauttamalla sitä.**",
                 "update": "Lisätään kahvilalle tietoja. Voit vaihtaa nimen, lisätä keittiökulttuurin tai osoitteen. **Muuta kahvilan tietoja.**",
-                "update_close": "**Kun olet valmis, sulje kohdemuokkain painamalla Esc-näppäintä tai napsauttamalla {button}-painiketta.**",
                 "rightclick": "Napsauttamalla karttakohdetta hiiren oikealla painikkeella näkyviin tulee pikavalikko, jossa näytetään käytettävissä olevat muokkaustoiminnot. **Avaa pikavalikko napsauttamalla paikkapistettä hiiren oikealla painikkeella.**",
                 "delete": "Poista karttakohteet, joita ei ole enää tai ole koskaan ollutkaan olemassa.{br}Poistaessasi karttakohteen se poistetaan kaikken näkemästä OpenStreetMap-tietokannasta, joten älä tee muutoksia ilman täydellistä varmuutta. **Poista paikkapiste napsauttamalla {button}-painiketta.**",
                 "undo": "Voit kumota minkä tahansa muutoksen, kunnes tallennat ja lähetät muutokset OpenStreetMap-tietokantaan. **Kumoa poisto ja palauta paikkapiste napsauttamalla {button}-painiketta.**",
                 "rightclick": "Napsauttamalla karttakohdetta hiiren oikealla painikkeella näkyviin tulee pikavalikko, jossa näytetään käytettävissä olevat muokkaustoiminnot. **Avaa pikavalikko napsauttamalla paikkapistettä hiiren oikealla painikkeella.**",
                 "delete": "Poista karttakohteet, joita ei ole enää tai ole koskaan ollutkaan olemassa.{br}Poistaessasi karttakohteen se poistetaan kaikken näkemästä OpenStreetMap-tietokannasta, joten älä tee muutoksia ilman täydellistä varmuutta. **Poista paikkapiste napsauttamalla {button}-painiketta.**",
                 "undo": "Voit kumota minkä tahansa muutoksen, kunnes tallennat ja lähetät muutokset OpenStreetMap-tietokantaan. **Kumoa poisto ja palauta paikkapiste napsauttamalla {button}-painiketta.**",
                 "add_playground": "*Alueilla* merkitään esimerkiksi järvien, rakennusten ja asuinalueiden rajoja.{br}Lisäksi paikkapisteet voi yleensä merkitä myös tarkemmin alueina. **Luo uusi alue napsauttamalla {button}-painiketta.**",
                 "start_playground": "Lisää tämä leikkipuisto kartalle piirtämällä alue. Alueet koostuvat alueen ulkoreunaa rajaavista *viivapisteistä*. **Osoita aloituspisteen paikka napsauttamalla kartalla tai painamalla välilyöntiä jossakin leikkipuiston nurkassa.**",
                 "continue_playground": "Jatka alueen piirtämistä sijoittamalla viivapisteitä leikkipuiston reunoille. Napsauta myös leikkipuistoon johtavan polun kohdalla.{br}Vinkki: Voit estää karttakohteen yhdistymisen muihiin kohteisiin pitämällä Alt-painiketta pohjassa. **Jatka leikkipuiston piirtämistä.**",
                 "add_playground": "*Alueilla* merkitään esimerkiksi järvien, rakennusten ja asuinalueiden rajoja.{br}Lisäksi paikkapisteet voi yleensä merkitä myös tarkemmin alueina. **Luo uusi alue napsauttamalla {button}-painiketta.**",
                 "start_playground": "Lisää tämä leikkipuisto kartalle piirtämällä alue. Alueet koostuvat alueen ulkoreunaa rajaavista *viivapisteistä*. **Osoita aloituspisteen paikka napsauttamalla kartalla tai painamalla välilyöntiä jossakin leikkipuiston nurkassa.**",
                 "continue_playground": "Jatka alueen piirtämistä sijoittamalla viivapisteitä leikkipuiston reunoille. Napsauta myös leikkipuistoon johtavan polun kohdalla.{br}Vinkki: Voit estää karttakohteen yhdistymisen muihiin kohteisiin pitämällä Alt-painiketta pohjassa. **Jatka leikkipuiston piirtämistä.**",
-                "finish_playground": "Viimeistele alue napsauttamalla ensimmäistä tai viimeistä viivapistettä uudelleen tai painamalla Enteriä. **Lopeta leikkipuiston piirtäminen.**",
                 "search_playground": "**Etsi hakusanalla \"{preset}\".**",
                 "choose_playground": "**Valitse {preset} listalta.**",
                 "add_field": "Leikkipuistolla ei ole virallista nimeä, joten ei kirjoiteta Nimi-kenttään mitään.{br}Lisää sen sijaan leikkipuiston tietoja Kuvaus-kenttään. **Avaa Lisää kenttä -pudotusluettelo.**",
                 "search_playground": "**Etsi hakusanalla \"{preset}\".**",
                 "choose_playground": "**Valitse {preset} listalta.**",
                 "add_field": "Leikkipuistolla ei ole virallista nimeä, joten ei kirjoiteta Nimi-kenttään mitään.{br}Lisää sen sijaan leikkipuiston tietoja Kuvaus-kenttään. **Avaa Lisää kenttä -pudotusluettelo.**",
                 "intersect": "Jatka viivaa napsauttamalla lisää viivapisteitä. Voit myös käyttää välilyöntiä.{br}Kadut ovat muiden viivojen tavoit usein osa laajempaa verkostoa. Uusien viivojen yhdistäminen olemassa olevaan verkostoon on tärkeää muun muassa reititysohjelmistojen oikean toiminnan vuoksi. **Yhdistä uusi katu nykyiseen verkostoon napsauttamalla {name}a.**",
                 "retry_intersect": "Katu tulee yhdistää {name}uun, kokeile uudestaan!",
                 "continue_line": "Jatka uuden kadun piirtämistä. Muista, että voit tarvittaessa lähentää, loitontaa tai liikutella karttaa.{br}Napsauta lopuksi viimeistä viivapistettä uudelleen. **Lopeta kadun piirtäminen.**",
                 "intersect": "Jatka viivaa napsauttamalla lisää viivapisteitä. Voit myös käyttää välilyöntiä.{br}Kadut ovat muiden viivojen tavoit usein osa laajempaa verkostoa. Uusien viivojen yhdistäminen olemassa olevaan verkostoon on tärkeää muun muassa reititysohjelmistojen oikean toiminnan vuoksi. **Yhdistä uusi katu nykyiseen verkostoon napsauttamalla {name}a.**",
                 "retry_intersect": "Katu tulee yhdistää {name}uun, kokeile uudestaan!",
                 "continue_line": "Jatka uuden kadun piirtämistä. Muista, että voit tarvittaessa lähentää, loitontaa tai liikutella karttaa.{br}Napsauta lopuksi viimeistä viivapistettä uudelleen. **Lopeta kadun piirtäminen.**",
-                "choose_category_road": "**Valitse {category} listalta**",
                 "choose_preset_residential": "Teitä ja katuja on monenlaisia, mutta nyt kyseessä on asuinaluekatu. **Valitse {preset}.**",
                 "retry_preset_residential": "Et valinnut katutyypiksi {preset}a. **Palaa takaisin napsauttamalla tästä.**",
                 "choose_preset_residential": "Teitä ja katuja on monenlaisia, mutta nyt kyseessä on asuinaluekatu. **Valitse {preset}.**",
                 "retry_preset_residential": "Et valinnut katutyypiksi {preset}a. **Palaa takaisin napsauttamalla tästä.**",
-                "name_road": "**Anna kadulle nimi ja sulje sitten kohdemuokkain napsauttamalla {button}-painiketta tai painamalla Esc-näppäintä.**",
                 "did_name_road": "Hyvältä näyttää! Harjoitellaanpa sitten jo luodun viivan uudelleenmuotoilua.",
                 "update_line": "Joskus on tarpeen muuttaa olemassa olevan viivan muotoa. Esimerkiksi tämä katu näyttäisi olevan liian suora todellisuuteen nähden.",
                 "add_node": "Viivaa ei tarvitse poistaa, vaan lisäämällä viivapisteitä sen muotoa voidaan muuttaa. Helpointa on kaksoisnapsauttaa viivaa, jolloin viivaan tulee uusi liikuteltava viivapiste. **Luo uusi viivapiste kaksoisnapsauttamalla viivaa.**",
                 "did_name_road": "Hyvältä näyttää! Harjoitellaanpa sitten jo luodun viivan uudelleenmuotoilua.",
                 "update_line": "Joskus on tarpeen muuttaa olemassa olevan viivan muotoa. Esimerkiksi tämä katu näyttäisi olevan liian suora todellisuuteen nähden.",
                 "add_node": "Viivaa ei tarvitse poistaa, vaan lisäämällä viivapisteitä sen muotoa voidaan muuttaa. Helpointa on kaksoisnapsauttaa viivaa, jolloin viivaan tulee uusi liikuteltava viivapiste. **Luo uusi viivapiste kaksoisnapsauttamalla viivaa.**",
                 "rightclick_intersection": "Ylin oikeasti rakennettu katu on {street1}, joten *jaa* {street2} *kahtia* tässä risteyksessä, ja poista kaikki sen yläpuolelta. **Napsauta risteyskohtaa hiiren oikealla painikkeella.**",
                 "split_intersection": "**Jaa {street} kahteen osaan napsauttamalla {button}-painiketta.**",
                 "retry_split": "Et napsauttanut Jaa-painiketta, yritä uudelleen.",
                 "rightclick_intersection": "Ylin oikeasti rakennettu katu on {street1}, joten *jaa* {street2} *kahtia* tässä risteyksessä, ja poista kaikki sen yläpuolelta. **Napsauta risteyskohtaa hiiren oikealla painikkeella.**",
                 "split_intersection": "**Jaa {street} kahteen osaan napsauttamalla {button}-painiketta.**",
                 "retry_split": "Et napsauttanut Jaa-painiketta, yritä uudelleen.",
-                "did_split_multi": "Hyvin menee! {street1} on nyt jaettu kahteen osaan, joista ylemmän voi poistaa. **Napsauta  {street2}a ja poista sen yläosa.**",
                 "did_split_single": "**Valitse {street2} (sen yläosa!) napsauttamalla sitä.**",
                 "multi_select": "{selected} on nyt valittu, ja valitaan myös {other1}. Napsauta sitä pitäen samalla Shift-näppäin pohjassa. **Napsauta {other2}a ja pidä Shift-näppäin pohjassa.**",
                 "multi_rightclick": "Näin! Molemmat poistettavat kadut on nyt valittu. **Napsauta jompaakumpaa katua hiiren oikealla painikkeella.**",
                 "did_split_single": "**Valitse {street2} (sen yläosa!) napsauttamalla sitä.**",
                 "multi_select": "{selected} on nyt valittu, ja valitaan myös {other1}. Napsauta sitä pitäen samalla Shift-näppäin pohjassa. **Napsauta {other2}a ja pidä Shift-näppäin pohjassa.**",
                 "multi_rightclick": "Näin! Molemmat poistettavat kadut on nyt valittu. **Napsauta jompaakumpaa katua hiiren oikealla painikkeella.**",
                     "label": "Käyttöoikeus",
                     "options": {
                         "designated": {
                     "label": "Käyttöoikeus",
                     "options": {
                         "designated": {
-                            "description": "Liikennemerkki, erityislaki tai muu vastaava sallii pääsyn",
-                            "title": "Ilmoitettu"
+                            "description": "Liikennemerkki tai erityinen paikallinen säädös sallii pääsyn",
+                            "title": "Tarkoitettu"
                         },
                         "destination": {
                             "description": "Pääsy sallittu vain, jos kohde on alueella",
                         },
                         "destination": {
                             "description": "Pääsy sallittu vain, jos kohde on alueella",
                 "address": {
                     "label": "Osoite",
                     "placeholders": {
                 "address": {
                     "label": "Osoite",
                     "placeholders": {
+                        "block_number": "Korttelinumero",
+                        "block_number!jp": "Kortteli No.",
                         "city": "Paikkakunta",
                         "city": "Paikkakunta",
+                        "city!jp": "Kaupunki/Kunta/Kylä/Tokion erityinen osasto",
                         "city!vn": "Kaupunki/kunta",
                         "conscriptionnumber": "123",
                         "country": "Valtio",
                         "county": "Maakunta",
                         "county!jp": "Kaupunginosa",
                         "district": "Seutu",
                         "city!vn": "Kaupunki/kunta",
                         "conscriptionnumber": "123",
                         "country": "Valtio",
                         "county": "Maakunta",
                         "county!jp": "Kaupunginosa",
                         "district": "Seutu",
+                        "district!vn": "Kaupunginosa/Kunta/Vyöhyke",
                         "floor": "Lattia",
                         "hamlet": "Pikkukylä",
                         "housename": "Talon nimi",
                         "floor": "Lattia",
                         "hamlet": "Pikkukylä",
                         "housename": "Talon nimi",
                         "place": "Paikka",
                         "postcode": "Postinumero",
                         "province": "Maakunta",
                         "place": "Paikka",
                         "postcode": "Postinumero",
                         "province": "Maakunta",
+                        "province!jp": "Itsehallinnollinen alue/prefektuuri",
                         "quarter": "Neljännes",
                         "state": "Osavaltio",
                         "street": "Kadunnimi",
                         "quarter": "Neljännes",
                         "state": "Osavaltio",
                         "street": "Kadunnimi",
                 "parallel_direction": {
                     "label": "Vaikuttaa kulkusuunnassa",
                     "options": {
                 "parallel_direction": {
                     "label": "Vaikuttaa kulkusuunnassa",
                     "options": {
-                        "backward": "Käänteinen",
-                        "forward": "Etuperin"
+                        "backward": "Taaksepäin",
+                        "forward": "Eteenpäin"
                     }
                 },
                 "park_ride": {
                     }
                 },
                 "park_ride": {
                     "name": "Maatila"
                 },
                 "landuse/farmland": {
                     "name": "Maatila"
                 },
                 "landuse/farmland": {
-                    "name": "Maatila-alue"
+                    "name": "Viljelymaa",
+                    "terms": "viljelysmaa, laidunmaa, pelto"
                 },
                 "landuse/farmyard": {
                 },
                 "landuse/farmyard": {
-                    "name": "Pihamaa"
+                    "name": "Maatilan pihamaa"
                 },
                 "landuse/forest": {
                     "name": "Metsä"
                 },
                 "landuse/forest": {
                     "name": "Metsä"
                     "name": "Kaatopaikka"
                 },
                 "landuse/meadow": {
                     "name": "Kaatopaikka"
                 },
                 "landuse/meadow": {
-                    "name": "Niitty/pelto"
+                    "name": "Niitty",
+                    "terms": "heinämaa, aukio"
                 },
                 "landuse/military": {
                     "name": "Sotilasalue"
                 },
                 "landuse/military": {
                     "name": "Sotilasalue"
index d35bb50004ac8e3608e1033038e5462efb55062e..60ec2b81740d8d45083eab10b6cfcfdfcc05c349 100644 (file)
             "split": {
                 "title": "Couper",
                 "description": {
             "split": {
                 "title": "Couper",
                 "description": {
-                    "line": "Divise la ligne en deux parties à l'emplacement du nœud.",
+                    "line": "Diviser la ligne en deux parties à l'emplacement du nœud.",
                     "area": "Couper le contour de ce polygone en deux.",
                     "area": "Couper le contour de ce polygone en deux.",
-                    "multiple": "Divise la ligne ou les limites du polygone en deux parties à l'emplacement du nœud."
+                    "multiple": "Diviser la ligne ou les limites du polygone en deux parties à l'emplacement du nœud."
                 },
                 "key": "X",
                 "annotation": {
                 },
                 "key": "X",
                 "annotation": {
         "help": {
             "title": "Aide",
             "help": "# Aide\n\nCeci est un éditeur pour [OpenStreetMap](http://www.openstreetmap.org/), la\ncarte du monde libre et éditable. Vous pouvez l'utiliser pour ajouter ou mettre à jour\nles données dans votre zone, et participer ainsi à la réalisation d'une carte du monde libre et à données ouvertes\nmeilleure pour tout le monde.\n\nLes modifications que vous réaliserez sur cette carte seront visibles par tous les utilisateurs d'OpenStreetMap. Pour commencer à modifier, vous devez vous [connecter](https://www.openstreetmap.org/login).\n\nL'[éditeur iD](http://ideditor.com/) est un projet collaboratif dont le [code\nsource est disponible sur GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Aide",
             "help": "# Aide\n\nCeci est un éditeur pour [OpenStreetMap](http://www.openstreetmap.org/), la\ncarte du monde libre et éditable. Vous pouvez l'utiliser pour ajouter ou mettre à jour\nles données dans votre zone, et participer ainsi à la réalisation d'une carte du monde libre et à données ouvertes\nmeilleure pour tout le monde.\n\nLes modifications que vous réaliserez sur cette carte seront visibles par tous les utilisateurs d'OpenStreetMap. Pour commencer à modifier, vous devez vous [connecter](https://www.openstreetmap.org/login).\n\nL'[éditeur iD](http://ideditor.com/) est un projet collaboratif dont le [code\nsource est disponible sur GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Édition & sauvegarde\n\nCet éditeur est conçu pour fonctionner de façon connecté et vous êtes\nactuellement en train de l'utiliser depuis un site web.\n\n### Sélection des éléments\n\nPour sélectionner un élément de la carte comme une route ou un point d’intérêt,\nil faut cliquer dessus sur la carte. Il sera alors mis en surbrillance et un\npanneau latéral s’ouvrira avec tous ses détails élément ainsi qu'un menu des\nactions disponibles pour cet élément.\n\nPour sélectionner plusieurs éléments, laisser appuyer sur la touche «Shift» du\nclavier. Pendant ce temps, vous pouvez au choix sélectionner les différents\néléments directement ou dessiner une zone rectangulaire à l'aide de la souris.\nLorsque le bouton de la souris est relâché, tous les objets à l'intérieur du\nrectangle seront sélectionnés.\n\n### Sauvegarde des modifications\n\nLorsque vous modifiez la carte (par exemple modification de routes, bâtiments\net places), ces changements sont conservés localement en attendant que vous\nles sauvegardiez sur le serveur. En cas d'erreur, il est possible d'annuler les\nchangements en cliquant sur le bouton idoine. De façon similaire il est possible\nde ré-appliquer un changement qui a été annulé.\n\nLorsque vous souhaitez sauvegarder sur le serveur vos changements, appuyer sur\nle bouton «Sauvegarder». La liste de vos modifications s'affichera alors, vous\npermettant de vérifier vos modifications. Par ailleurs, l'éditeur vous\npréviendra et conseillera si quelque chose semble incorrect.\n\nSi tout semble correct, vous pourrez alors écrire un commentaire du travail\neffectué (par exemple «Ajout d'une boulangerie») puis il faudra à nouveau\nappuyer sur le bouton «Sauvegarder» pour envoyer les changements sur\n[OpenStreetMap.org](http://www.openstreetmap.org/). Vos changements seront\nvisible par tous peu de temps après.\n\nSi vous ne pouvez pas terminer vos changements en une seule fois, vous pouvez\nfermer la fenêtre de l'éditeur. Vos changements seront enregistrés localement.\nLorsque vous ouvrirez à nouveau l'éditeur, sur le même ordinateur et avec le\nmême navigateur Web, l'éditeur vous proposera de récupérer le travail de la\nséance précédente.\n\n### Utilisation de l'éditeur\n\nUne liste des raccourcis claviers est disponible\n[ici](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n",
+            "editing_saving": "# Édition & sauvegarde\n\nCet éditeur est conçu pour fonctionner de façon connecté et vous êtes\nactuellement en train de l'utiliser depuis un site web.\n\n### Sélection des éléments\n\nPour sélectionner un élément de la carte comme une route ou un point d’intérêt,\nil faut cliquer dessus sur la carte. Il sera alors mis en surbrillance et un\npanneau latéral s’ouvrira avec tous ses détails élément ainsi qu'un menu des\nactions disponibles pour cet élément.\n\nPour sélectionner plusieurs éléments, laisser appuyer sur la touche «Shift» du\nclavier. Pendant ce temps, vous pouvez au choix sélectionner les différents\néléments directement ou dessiner une zone rectangulaire à l'aide de la souris.\nLorsque le bouton de la souris est relâché, tous les objets à l'intérieur du\nrectangle seront sélectionnés.\n\n### Sauvegarde des modifications\n\nLorsque vous modifiez la carte (par exemple modification de routes, bâtiments\net places), ces changements sont conservés localement en attendant que vous\nles sauvegardiez sur le serveur. En cas d'erreur, il est possible d'annuler les\nchangements en cliquant sur le bouton idoine. De façon similaire il est possible\nde ré-appliquer un changement qui a été annulé.\n\nLorsque vous souhaitez sauvegarder sur le serveur vos changements, appuyer sur\nle bouton «Sauvegarder». La liste de vos modifications s'affichera alors, vous\npermettant de vérifier vos modifications. Par ailleurs, l'éditeur vous\npréviendra et conseillera si quelque chose semble incorrect.\n\nSi tout semble correct, vous pourrez alors écrire un commentaire du travail\neffectué (par exemple «Ajout d'une boulangerie») puis il faudra à nouveau\nappuyer sur le bouton «Sauvegarder» pour envoyer les changements sur\n[OpenStreetMap.org](http://www.openstreetmap.org/). Vos changements seront\nvisible par tous peu de temps après.\n\nSi vous ne pouvez pas terminer vos changements en une seule fois, vous pouvez\nfermer la fenêtre de l'éditeur. Vos changements seront enregistrés localement.\nLorsque vous ouvrirez à nouveau l'éditeur, sur le même ordinateur et avec le\nmême navigateur Web, l'éditeur vous proposera de récupérer le travail de la\nséance précédente.\n\n### Utilisation de l'éditeur\n\nVous pouvez consulter la [liste des raccourcis claviers](https://wiki.openstreetmap.org/wiki/FR:ID/Shortcuts).\n",
             "roads": "# Routes\n\nVous pouvez créer, mettre à jour et supprimer des routes à l'aide de l'éditeur. Il peut s'agir de tous types de routes : chemins, autoroutes, pistes cyclables, et plus encore : toute voie régulièrement fréquentée peut être cartographiée.\n\n### Sélection\n\nCliquez sur une route pour la sélectionner. Elle sera alors surlignée et un menu 'outils' apparaîtra sur la carte, ainsi qu'une barre d'état affichant des informations supplémentaires.\n\n### Modification\n\nIl est fréquent que les routes ne soient pas bien alignées avec l'imagerie satellite ou avec les traces GPS. Vous pouvez ajuster et corriger la position des routes.\n\nCliquez d'abord sur la route à modifier. Elle est alors surlignée et des points de contrôle apparaissent qui permettent de corriger sa position. Pour ajouter des points de contrôle, double-cliquez sur un segment de la route sans nœuds.\n\nSi la route est connectée à une autre, mais que la connexion est incorrecte, vous pouvez déplacer un de ses points de contrôle sur la seconde route pour corriger la connexion. Des routes bien connectées sont essentielles pour la carte et pour fournir de bonnes informations d'itinéraire.\n\nVous pouvez également cliquer sur l'outil 'Déplacer' ou appuyer sur le raccourci `M` pour déplacer l'ensemble de la route en une fois, puis cliquer de nouveau une fois pour sauvegarder le déplacement.\n\n### Suppression\n\nSi une route est complètement fausse - c'est-à-dire qu'elle n'apparaît pas sur l'image satellite, et que dans l'idéal, vous avez confirmé qu'elle n'existe pas sur le terrain - vous pouvez la supprimer, ce qui l'enlèvera de la carte. Faites attention lorsque vous supprimez des éléments : comme n'importe quelle autre modification, le résultat sera visible par tout le monde sur la carte. Les photos aériennes sont souvent dépassées et la route est peut-être tout simplement récente.\n\nPour supprimer une route, sélectionnez-la en cliquant dessus, puis cliquez sur l'icône 'Poubelle' ou appuyez sur la touche 'Suppr'.\n\n### Création\n\nVous avez constaté qu'une route de votre connaissance manque à la carte ? Cliquez sur l'icône 'Ligne' en haut à gauche de l'éditeur ou appuyez sur le raccourci `2` pour dessiner une route.\n\nPour commencer le dessin, cliquez sur l'endroit où commence la route. Si elle commence à l'embranchement d'une autre route, commencez le dessin en cliquant à l'endroit de la connexion.\n\nCliquez ensuite régulièrement le long de la route pour ajouter des points, en utilisant l'imagerie satellite comme référence. Si la route que vous dessinez croise une autre route, connectez les deux en cliquant à l'endroit de l'intersection. Lorsque vous avez terminé le dessin, double-cliquez ou appuyez sur 'Entrée'.\n",
             "gps": "# GPS\n\nLe GPS est la source la plus fiable de données pour OpenStreetMap. Cet éditeur\nsupporte les traces en local - fichiers `.gpx` sur votre ordinateur. Vous pouvez collecter\nce genre de trace GPS à l'aide de nombreuses applications pour smartphones ainsi\nqu'avec du matériel GPS personnel.\n\nPour savoir comment effectuer un relevé GPS, lisez\n[Sur le terrain avec un GPS](http://learnosm.org/fr/beginner/using-gps/).\n\nPour utiliser un tracé GPX pour cartographier, effectuer un \"glissé-déposé\" du\nfichier GPX dans l'éditeur de cartes. S'il est reconnu, une ligne violette en\nsurbrillance apparaîtra sur la carte. Cliquez dans le menu \"Données de la carte\"\nsur le côté droit pour activer, désactiver, ou zoomer dans ce nouveau calque GPX.\n\nLe tracé GPX n'est pas directement envoyé sur OpenStreetMap - le meilleur moyen de\nl'utiliser est de dessiner sur la carte, en l'utilisant comme guide pour les\nnouveaux éléments que vous ajoutez, et aussi de le\n[charger dans OpenStreetMap](http://www.openstreetmap.org/trace/create) pour que\nles autres utilisateurs puissent s'en servir.\n",
             "imagery": "# Fond de carte\n\nLes photos aériennes sont une source importante pour cartographier. Une\ncompilation de photos prises d'avion, imageries satellites, et autres sources\nlibre d'utilisation sont disponibles dans l'éditeur dans le menu \"Configuration\ndu fond de carte\" à gauche.\n\nPar défaut, l'imagerie aérienne de [Bing Maps](http://www.bing.com/maps/)\nest utilisée dans l'éditeur, mais lorsque vous zoomez sur la carte, d'autres sources sont parfois disponibles dans certaines zones. Certains pays tels que la France, les États-Unis ou le Danemark disposent d'images de très haute qualité sur certaines zones.\n\nCertaines images sont parfois décalées par rapport aux données, notamment\nà cause d'un mauvais calibrage. Si vous voyez de nombreux éléments tous décalés par rapport au fond de carte, ne déplacez pas immédiatement ces éléments. À la place, vous pouvez ajuster le fond de carte afin qu'il soit aligné aux données en cliquant sur \"Ajuster le décalage du fond de carte\" en bas de l'interface de configuration du fond de carte.\n",
             "roads": "# Routes\n\nVous pouvez créer, mettre à jour et supprimer des routes à l'aide de l'éditeur. Il peut s'agir de tous types de routes : chemins, autoroutes, pistes cyclables, et plus encore : toute voie régulièrement fréquentée peut être cartographiée.\n\n### Sélection\n\nCliquez sur une route pour la sélectionner. Elle sera alors surlignée et un menu 'outils' apparaîtra sur la carte, ainsi qu'une barre d'état affichant des informations supplémentaires.\n\n### Modification\n\nIl est fréquent que les routes ne soient pas bien alignées avec l'imagerie satellite ou avec les traces GPS. Vous pouvez ajuster et corriger la position des routes.\n\nCliquez d'abord sur la route à modifier. Elle est alors surlignée et des points de contrôle apparaissent qui permettent de corriger sa position. Pour ajouter des points de contrôle, double-cliquez sur un segment de la route sans nœuds.\n\nSi la route est connectée à une autre, mais que la connexion est incorrecte, vous pouvez déplacer un de ses points de contrôle sur la seconde route pour corriger la connexion. Des routes bien connectées sont essentielles pour la carte et pour fournir de bonnes informations d'itinéraire.\n\nVous pouvez également cliquer sur l'outil 'Déplacer' ou appuyer sur le raccourci `M` pour déplacer l'ensemble de la route en une fois, puis cliquer de nouveau une fois pour sauvegarder le déplacement.\n\n### Suppression\n\nSi une route est complètement fausse - c'est-à-dire qu'elle n'apparaît pas sur l'image satellite, et que dans l'idéal, vous avez confirmé qu'elle n'existe pas sur le terrain - vous pouvez la supprimer, ce qui l'enlèvera de la carte. Faites attention lorsque vous supprimez des éléments : comme n'importe quelle autre modification, le résultat sera visible par tout le monde sur la carte. Les photos aériennes sont souvent dépassées et la route est peut-être tout simplement récente.\n\nPour supprimer une route, sélectionnez-la en cliquant dessus, puis cliquez sur l'icône 'Poubelle' ou appuyez sur la touche 'Suppr'.\n\n### Création\n\nVous avez constaté qu'une route de votre connaissance manque à la carte ? Cliquez sur l'icône 'Ligne' en haut à gauche de l'éditeur ou appuyez sur le raccourci `2` pour dessiner une route.\n\nPour commencer le dessin, cliquez sur l'endroit où commence la route. Si elle commence à l'embranchement d'une autre route, commencez le dessin en cliquant à l'endroit de la connexion.\n\nCliquez ensuite régulièrement le long de la route pour ajouter des points, en utilisant l'imagerie satellite comme référence. Si la route que vous dessinez croise une autre route, connectez les deux en cliquant à l'endroit de l'intersection. Lorsque vous avez terminé le dessin, double-cliquez ou appuyez sur 'Entrée'.\n",
             "gps": "# GPS\n\nLe GPS est la source la plus fiable de données pour OpenStreetMap. Cet éditeur\nsupporte les traces en local - fichiers `.gpx` sur votre ordinateur. Vous pouvez collecter\nce genre de trace GPS à l'aide de nombreuses applications pour smartphones ainsi\nqu'avec du matériel GPS personnel.\n\nPour savoir comment effectuer un relevé GPS, lisez\n[Sur le terrain avec un GPS](http://learnosm.org/fr/beginner/using-gps/).\n\nPour utiliser un tracé GPX pour cartographier, effectuer un \"glissé-déposé\" du\nfichier GPX dans l'éditeur de cartes. S'il est reconnu, une ligne violette en\nsurbrillance apparaîtra sur la carte. Cliquez dans le menu \"Données de la carte\"\nsur le côté droit pour activer, désactiver, ou zoomer dans ce nouveau calque GPX.\n\nLe tracé GPX n'est pas directement envoyé sur OpenStreetMap - le meilleur moyen de\nl'utiliser est de dessiner sur la carte, en l'utilisant comme guide pour les\nnouveaux éléments que vous ajoutez, et aussi de le\n[charger dans OpenStreetMap](http://www.openstreetmap.org/trace/create) pour que\nles autres utilisateurs puissent s'en servir.\n",
             "imagery": "# Fond de carte\n\nLes photos aériennes sont une source importante pour cartographier. Une\ncompilation de photos prises d'avion, imageries satellites, et autres sources\nlibre d'utilisation sont disponibles dans l'éditeur dans le menu \"Configuration\ndu fond de carte\" à gauche.\n\nPar défaut, l'imagerie aérienne de [Bing Maps](http://www.bing.com/maps/)\nest utilisée dans l'éditeur, mais lorsque vous zoomez sur la carte, d'autres sources sont parfois disponibles dans certaines zones. Certains pays tels que la France, les États-Unis ou le Danemark disposent d'images de très haute qualité sur certaines zones.\n\nCertaines images sont parfois décalées par rapport aux données, notamment\nà cause d'un mauvais calibrage. Si vous voyez de nombreux éléments tous décalés par rapport au fond de carte, ne déplacez pas immédiatement ces éléments. À la place, vous pouvez ajuster le fond de carte afin qu'il soit aligné aux données en cliquant sur \"Ajuster le décalage du fond de carte\" en bas de l'interface de configuration du fond de carte.\n",
                 "start": "Commencer à cartographier !"
             }
         },
                 "start": "Commencer à cartographier !"
             }
         },
+        "shortcuts": {
+            "title": "Raccourcis clavier",
+            "or": "-ou-",
+            "browsing": {
+                "title": "Navigation",
+                "navigation": {
+                    "title": "Navigation",
+                    "pan": "Déplacer la vue",
+                    "pan_more": "Déplacer la vue, de la taille de tout l'écran",
+                    "zoom": "Zoomer en avant / en arrière",
+                    "zoom_more": "Zoomer en avant / en arrière par grand incrément"
+                },
+                "help": {
+                    "title": "Aide",
+                    "help": "Afficher l'aide et la documentation",
+                    "keyboard": "Afficher les raccourcis clavier"
+                },
+                "display_options": {
+                    "title": "Afficher les options",
+                    "background": "Afficher les options d'imagerie d'arrière-plan",
+                    "background_switch": "Reprendre l'imagerie précédemment utilisée",
+                    "map_data": "Accéder aux options d'affichage des données",
+                    "fullscreen": "Passer en plein écran",
+                    "wireframe": "Basculer le mode filaire",
+                    "minimap": "Afficher/cacher mini-carte"
+                },
+                "selecting": {
+                    "title": "Sélection",
+                    "select_one": "Sélectionner un seul élément",
+                    "select_multi": "Sélectionner plusieurs éléments",
+                    "lasso": "Dessiner une sélection englobante autour des éléments"
+                },
+                "with_selected": {
+                    "title": "Avec l'élément sélectionné",
+                    "infobox": "Afficher/cacher le cadre d'informations et mesures",
+                    "edit_menu": "Afficher/cacher le menu d'édition"
+                },
+                "vertex_selected": {
+                    "title": "Avec le nœud sélectionné",
+                    "previous": "Aller au nœud précédent",
+                    "next": "Aller au nœud suivant",
+                    "first": "Aller au premier nœud",
+                    "last": "Aller au dernier nœud",
+                    "change_parent": "Basculer sur une ligne connectée"
+                }
+            },
+            "editing": {
+                "title": "Édition",
+                "drawing": {
+                    "title": "Tracés",
+                    "add_point": "Mode 'Ajouter un point'",
+                    "add_line": "Mode 'Ajouter une ligne'",
+                    "add_area": "Mode 'Ajouter un polygone'",
+                    "place_point": "Placer un point",
+                    "disable_snap": "Désactiver l'attraction des points à proximité",
+                    "stop_line": "Terminer de tracer une ligne ou un polygone"
+                },
+                "operations": {
+                    "title": "Opérations",
+                    "continue_line": "Reprendre le tracé d'une ligne à partir du point sélectionné",
+                    "merge": "Fusionner les éléments sélectionnés",
+                    "disconnect": "Déconnecter les éléments au nœud sélectionné",
+                    "split": "Couper une ligne en deux au nœud sélectionné",
+                    "reverse": "Inverser une ligne",
+                    "move": "Déplacer les éléments sélectionnés",
+                    "rotate": "Tourner les éléments sélectionnés",
+                    "orthogonalize": "Aligner les points d'une ligne / Ajuster les coins d'un polygone en angles droits",
+                    "circularize": "Rendre circulaire une ligne fermée ou un polygone",
+                    "reflect_long": "Effectuer un miroir par rapport au grand axe",
+                    "reflect_short": "Effectuer un miroir par rapport au petit axe",
+                    "delete": "Supprimer les éléments sélectionnés"
+                },
+                "commands": {
+                    "title": "Commandes",
+                    "copy": "Copier les éléments sélectionnés",
+                    "paste": "Coller les éléments copiés",
+                    "undo": "Annuler la dernière action",
+                    "redo": "Rétablir la dernière action",
+                    "save": "Enregistrer les modifications"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                     "label": "Type"
                 },
                 "atm": {
                     "label": "Type"
                 },
                 "atm": {
-                    "label": "Distributeur de billets, DAB"
+                    "label": "Distributeur de billets"
                 },
                 "backrest": {
                     "label": "Dossier de siège"
                 },
                 "backrest": {
                     "label": "Dossier de siège"
                 "maxstay": {
                     "label": "Durée maximale"
                 },
                 "maxstay": {
                     "label": "Durée maximale"
                 },
+                "maxweight": {
+                    "label": "Charge maximale [kg]"
+                },
                 "mtb/scale": {
                     "label": "Difficulté VTT",
                     "options": {
                 "mtb/scale": {
                     "label": "Difficulté VTT",
                     "options": {
                     "label": "Type de recyclage",
                     "options": {
                         "centre": "Déchèterie",
                     "label": "Type de recyclage",
                     "options": {
                         "centre": "Déchèterie",
-                        "container": "Benne"
+                        "container": "Conteneur de recyclage"
                     }
                 },
                 "ref": {
                     }
                 },
                 "ref": {
                 },
                 "amenity/atm": {
                     "name": "Distributeur de billets",
                 },
                 "amenity/atm": {
                     "name": "Distributeur de billets",
-                    "terms": "Distributeur de billets, distributeur automatique, guichet automatique, DAB, GAB"
+                    "terms": "distributeur de billets, distributeur automatique, distributeur automatique de billets, guichet automatique, DAB, GAB, billets de banque, retrait d'argent, retrait de liquide, guichet de retrait, retrait automatique, ATM, amenity atm"
                 },
                 "amenity/bank": {
                     "name": "Banque",
                 },
                 "amenity/bank": {
                     "name": "Banque",
                     "name": "Université, enseignement supérieur universitaire - institution ou campus",
                     "terms": "université, campus universitaire, campus, enseignement supérieur universitaire, enseignement supérieur, universitaire, établissement d'enseignement supérieur, post-bac, post bac, institut, etablissement d'enseignement superieur, école, ecole, university, amenity university, college, école supérieure, grande école, haute école, ecole superieure, grande ecole"
                 },
                     "name": "Université, enseignement supérieur universitaire - institution ou campus",
                     "terms": "université, campus universitaire, campus, enseignement supérieur universitaire, enseignement supérieur, universitaire, établissement d'enseignement supérieur, post-bac, post bac, institut, etablissement d'enseignement superieur, école, ecole, university, amenity university, college, école supérieure, grande école, haute école, ecole superieure, grande ecole"
                 },
+                "amenity/vending_machine": {
+                    "name": "Distributeur automatique",
+                    "terms": "distributeur automatique, machine, vente automatique, distributeur, guichet automatique, vending machine"
+                },
                 "amenity/vending_machine/cigarettes": {
                     "name": "Distributeur de cigarettes",
                     "terms": "distributeur de cigarettes, distributeur à cigarettes, cigarettes, distributeur automatique de cigarettes, machine à cigarettes, vente automatique de cigarettes, vente de cigarettes, vente cigarettes, vending machine cigarettes"
                 "amenity/vending_machine/cigarettes": {
                     "name": "Distributeur de cigarettes",
                     "terms": "distributeur de cigarettes, distributeur à cigarettes, cigarettes, distributeur automatique de cigarettes, machine à cigarettes, vente automatique de cigarettes, vente de cigarettes, vente cigarettes, vending machine cigarettes"
                 "amenity/vending_machine/news_papers": {
                     "name": "Distributeur de journaux"
                 },
                 "amenity/vending_machine/news_papers": {
                     "name": "Distributeur de journaux"
                 },
+                "amenity/vending_machine/newspapers": {
+                    "name": "Distributeur de journaux",
+                    "terms": "distributeur de journaux, distributeur à journaux, distributeur automatique de journaux, machine à journaux, vente automatique de journaux, vente de journaux, vente journaux, journaux, journal, machine journaux, vending machine newspapers, newspapers, magazines, journaux "
+                },
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "Dépôt ou retrait automatique de colis",
                     "terms": "dépôt ou retrait de colis, dépôt de colis, retrait de colis, machine à colis,\ndistributeur de colis, distributeur à colis, distributeur automatique de colis, colis, dépôt automatique de colis, retrait automatique de colis, vending machine parcel, parcel pickup dropoff, vending machine parcel pickup dropoff, parcel"
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "Dépôt ou retrait automatique de colis",
                     "terms": "dépôt ou retrait de colis, dépôt de colis, retrait de colis, machine à colis,\ndistributeur de colis, distributeur à colis, distributeur automatique de colis, colis, dépôt automatique de colis, retrait automatique de colis, vending machine parcel, parcel pickup dropoff, vending machine parcel pickup dropoff, parcel"
                 },
                 "amenity/vending_machine/public_transport_tickets": {
                     "name": "Distributeur de titres de transport",
                 },
                 "amenity/vending_machine/public_transport_tickets": {
                     "name": "Distributeur de titres de transport",
-                    "terms": "distributeur de titres de transport, distributeur à titres de transport, titres de transport, tickets de transport, distributeur automatique de titres de transport, machine à titres de transport, vente automatique de titres de transport, vente de titres de transport, vente titres de transport, tickets de train, tickets de bus, tickets de métro, tickets de RER, tickets train, tickets bus, tickets métro, tickets RER, billets de train, billets de bus, billets de métro, billets de RER, billets train, billets bus, billets métro, billets RER, titres de train, titres de bus, titres de métro, titres de RER, vending machine public transport tickets, public transport tickets, tickets, billets, train, bus, métro, RER"
+                    "terms": "distributeur de titres de transport, distributeur à titres de transport, titres de transport, tickets de transport, distributeur automatique de titres de transport, guichet automatique, machine à titres de transport, vente automatique de titres de transport, vente de titres de transport, vente titres de transport, tickets de train, tickets de bus, tickets de métro, tickets de RER, tickets train, tickets bus, tickets métro, tickets RER, billets de train, billets de bus, billets de métro, billets de RER, billets train, billets bus, billets métro, billets RER, titres de train, titres de bus, titres de métro, titres de RER, vending machine public transport tickets, public transport tickets, tickets, billets, train, bus, métro, RER"
                 },
                 "amenity/vending_machine/sweets": {
                     "name": "Distributeur de snacks",
                 },
                 "amenity/vending_machine/sweets": {
                     "name": "Distributeur de snacks",
                     "name": "Électricien",
                     "terms": "Electricien"
                 },
                     "name": "Électricien",
                     "terms": "Electricien"
                 },
+                "craft/electronics_repair": {
+                    "name": "Service de réparation électronique",
+                    "terms": "réparation électronique, maintenance électronique, réparateur électronique, magasin d'électronique, réparation de téléphone, réparation d'appareil photo, réparation de téléviseur, réparation d'électroménager, réparation d'ordinateur, réparation de caméra, craft electronics repair, electronics repair, electronics, repair"
+                },
                 "craft/gardener": {
                     "name": "Jardinier",
                     "terms": "Concepteur de jardins, Paysagiste"
                 "craft/gardener": {
                     "name": "Jardinier",
                     "terms": "Concepteur de jardins, Paysagiste"
                     "name": "Voie cyclable",
                     "terms": "Piste cyclable"
                 },
                     "name": "Voie cyclable",
                     "terms": "Piste cyclable"
                 },
+                "highway/elevator": {
+                    "name": "Ascenseur",
+                    "terms": "ascenseur, élévateur, monte-charge, elevator, lift"
+                },
                 "highway/footway": {
                 "highway/footway": {
-                    "name": "Voie piétonne",
+                    "name": "Chemin piéton",
                     "terms": "Chemin piétonnier, Sentier"
                 },
                 "highway/give_way": {
                     "terms": "Chemin piétonnier, Sentier"
                 },
                 "highway/give_way": {
                     "name": "Antiquaire",
                     "terms": "Brocante"
                 },
                     "name": "Antiquaire",
                     "terms": "Brocante"
                 },
+                "shop/appliance": {
+                    "name": "Magasin d'électroménager",
+                    "terms": "magasin d'électroménager, électroménager, appareil électroménager, petit électroménager, gros électroménager, shop appliance, appliances, \nbouilloire, centrifugeuse, cuiseur, cuit vapeur, fouet électrique, grille-pain, machine à pain, mixeur, pierrade, presse-agrumes, robot de cuisine, robot multifonctions, pèse-personne, épilateur, rasoir électrique, cafetière, moulin à café, aspirateur, cireuse, nettoyeur à vapeur, tondeuse, repassage, centrale vapeur, fer à repasser, cuisinière, four micro-ondes, four traditionnel, four à vapeur, cuisinière à gaz, hotte aspirante, plaque de cuisson, lave-linge, lave-vaisselle, sèche-linge, cave à vin, congélateur, réfrigérateur, climatiseur"
+                },
                 "shop/art": {
                     "name": "Marchand d'art",
                     "terms": "Galeriste"
                 "shop/art": {
                     "name": "Marchand d'art",
                     "terms": "Galeriste"
index d548a2d745888fd435ebde80cbefd776f233bd0c..f2a596384ea333349fc0f7a654b020867f37dcd9 100644 (file)
         "help": {
             "title": "Axuda",
             "help": "# Axuda\n\nEste é un editor para [OpenStreetMap](http://www.openstreetmap.org/), o mapa\nlibre e editable do mundo. Podes usalo e engadir e actualizar información\ndatos da túa zona, facendo unha fonte libre de datos abertos do mapa do mundo\na mellor para todos.\n\nAs edicións que podes facer neste mapa poden ser visibes para calquera uso en\nOpenStreetMap. Para facer unha edición ti debes\n[log in](https://www.openstreetmap.org/login).\n\nO [iD editor](http://ideditor.com/) é un proxecto colaborativo con [source\ncode available on GitHub] (https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Axuda",
             "help": "# Axuda\n\nEste é un editor para [OpenStreetMap](http://www.openstreetmap.org/), o mapa\nlibre e editable do mundo. Podes usalo e engadir e actualizar información\ndatos da túa zona, facendo unha fonte libre de datos abertos do mapa do mundo\na mellor para todos.\n\nAs edicións que podes facer neste mapa poden ser visibes para calquera uso en\nOpenStreetMap. Para facer unha edición ti debes\n[log in](https://www.openstreetmap.org/login).\n\nO [iD editor](http://ideditor.com/) é un proxecto colaborativo con [source\ncode available on GitHub] (https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Editar & Salvar\n\nEste editor está deseñado para traballar primeiramente en liña, e estás accedendo\na el a través dun website agora.\n\n### Sección de Elementos\n\nSelecciona un elemento no mapa, como unha estrada ou punto de interés, pincha\nnel sobre o mapa. Isto pode destacar a función seleccionada, abrir un panel con\ndetailles relacionados, e amosar un menú con funcións que podes facer.\n\nPara seleccionar multiples elementos, menten premida a tecla 'Shift'. Despois prema con cada click sobre os elementos que queira seleccionar, ou arrastre sobre o mapa e debuxe un rectangulo.\nIsto debuxará unha caixa e seleccionará tódolos puntos con ela.\n\n### Salvar Edicións\n\nCando ti fagas cambios como edicións de estradas, edificios, e lugares, son\ngardados localmente ata que sexan subidos no server. Non te preocupes por ter un erro - ti podes desfacer un cambio pinchando no botón de desfacer, e refacer\ncambios pinchando no botón refacer.\n\nPincha en 'Save' ao rematar un grupo de edicións - por exemplo, se remataches\nunha area da cidade e queiras iniciar unha nova áreae. Ti terás que cambiar\na revisión que ti queiras facer, e o editor amosará útiles suxestións\ne avisos se algo non parece correcto nos cambios.\n\nSe todo parece correcto, pode introducir un breve comentario explicando os cambios\nPodes facer click en 'Save' outra vez e postear os cambios\nen [OpenStreetMap.org](http://www.openstreetmap.org/), onde serán visibles\na tódolos outros usuarios e dispoñible para que outros constrúan e o melloren.\n\nSe ti non podes rematar as edicións e queres parar, cando saias da fiestra do editor\ne cando volvas (á mesma computadora e editor), a\naplicación do editor ofrecerache recuperar o teu traballo.\n\n### Usar o editor\n\nUnha lista de atallos de teclado está dispoñible e pode ser atopada en  [here](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n",
+            "editing_saving": "#  Editar & Salvar\n\nIste editor foi deseñado para traballar primeiramente online, e  accedes directamente através do website agora.\n\n### Seleccionar Elementos\n\nSelecciona elementos do mapa, coma unha estrada ou punto de interese, facendo click sobre el no mapa. Esto resaltará a función seleccionada, abrirá detalles sobre el, e amosará un menu cas cousas que podes facer co elemento.\n\nPra escoller múltiplos elementos manten pulsada a 'Shift' key -Maiusculas-. Logo fai click nos elementos,  que queiras seleccionar, ou arrastra sobre o mapa co rectángulo de selección. Esto debuxará unha caixa e seleccionará tódolos puntos dentro del.\n\n### Salvar Edicións\n\nCando fagas trocos como edicións de rúas, edificios ou lugares, son almacenados localmente ata que os subas ao server. Non te preocupes se tes un erro - podes desfacer os trocos facendo click no botón desfacer, e refacer trocos no botón refacer.-\n\nFai click en 'Save' ao rematar o grupo de edicións -Por exemplo, se remataches unha zona da cidade ou cando queiras iniciar unha nova zona. Terás oportunidade de revisala, e o editor fará suxestións útiles e dará avisos se algo non está correcto nos trocos.\n\nSe che parece todo correcto, podes poñer unha curta resume explicando os trocos feitos, fas click en 'Save' outra vez e os trocos  [OpenStreetMap.org](http://www.openstreetmap.org/) os fará visibles a tódolos usuarios para que os empreguen e actualicen.\n\nSe non es quen de facer as dicións dunha sentada podes deixalo e cando volvas (en calquera navegaro e ordenador) a aplicación do editor darache a oportunidade de restaurar e gardar o traballo feito\n\n###  Usar o editor\n\nTi poder ver a lista de atallos do teclado premendo a tecla `?`\n",
             "roads": "# Estradas\n\nTi podes crear, marcar, e borrar estradas co editor. As estradas poden ser de todo tipo:\npistas, autoestradas, camiños, ciclopistas, e máis - de calquera tipo- os cruces\ne os segmentos poden ser mapeados.\n\n### Seleccionar\n\nPincha sobre unha estrada para seleccionala. En esbozo debe ser visible, xunto\ncun pequeno menú de ferramentas no mapa e unha barra lateral que mostra máis información sobre a estrada.\n\n### Modificar\n\nMoitas veces vai ver que as estradas non están aliñadas coas imaxes por tras delas\nou cunha pista GPS. Pode axustar estradas para que estean no lugar axeitado.\n\nPrimeiro fai click na estrada que queiras modificar. Iluminarase e amosará\nos puntos de control ao longo dela ti podes arrastralos para mellorar a localización. Se queres engadir novos puntos de control para máis precisión, fai doble click na parte da estrada na que queiras o novo nodo, e un punto engadirase.\n\nSe a estrada conecta con outra estrada, pero non se conecta correctamente sobre\no mapa, pode arrastrar un dos seus puntos de control sobre o outro punto na estrada\nco fin de unilas. Ter as estradas conectardas é importante para o mapa e esencial para proporcionar instrucións de conducción.\n\nTamén pode premer na ferramenta 'Move' ou prema a tecla de acceso rápido `M` para mover toda a estrada\nunha vez máis, e logo prema de novo para gardar ese movemento.\n\n### Borrar\n\nSe unha estrada é enteiramente incorrecta - podes ver que non existe nas imaxes de satélite e, idealmente, ter confirmado localmente que non está presente - pode borrala, ou eliminala dende o mapa. Sexa cauteloso ao eliminar características -\ncomo calquera outra edición, os resultados non son vistos por todos en imaxes de satélite é moitas veces están desactualizados, de xeito que a estrada pode estar simplemente recén construída.\n\nPode eliminar unha estrada, premendo sobre ela para seleccionala, a continuación,\npremer na icona lixo ou premendo a tecla \"Delete\".\n\n### Crear\n\nAtopa nalgún lugar que debe haber un camiño, pero non está? Prema na \"liña\"\nicona na esquina superior esquerda do editor ou prema a tecla de acceso `2` para comezar a debuxar.\n\nPrema no inicio da estrada no mapa para comezar a deseñar. Se a estrada\nramifica dende unha estrada existente, comeza premendo sobre o lugar onde elas se conectan.\n\nDespois, prema en puntos ao longo do camiño que segue a liña correcta, segundo imaxes de satélite ou GPS. Se a estrada que está deseñando cruza outra estrada, actívea\npremendo sobre o punto de intersección. Cando termine o deseño, prema dúas veces ou prema 'Return \"ou\" Intro \"no teclado.\n\n",
             "gps": "# GPS\n\nAs trazas GPS gardadas son unha valiosa fonte de información para OpenStreetMap. Este editor\nsoporta trazas locais - `.gpx` arquivos no teu computador local. Ti podes gardar\neste tipo de trazas  GPS cun número de apliacións de smartphone tamén con\nhardware GPS persoal.\n\nPara obter información sobre como realizar trazados GPS, lea\n[Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).\n\nUse trazas GPX para mapear, arrastrar e solta arquivos GPX sobre o editor do mapa.\nDe ser recoñecido, será engadido ao mapa cunha liña en púrpura brillante. Faga clic no menú \"Mapa de datos 'no lado dereito para permitir,\ndesactivar ou engadir a esta nova capa GPX-engadida.\n\nAs trazas GPX non son directamente subidas a OpenStreetMap -o mellor xeito de\nusalas é deseñar o mapa, usándoas como unha guía para as novas características a\nengadir, e tamén para [upload it to OpenStreetMap](http://www.openstreetmap.org/trace/create)\npara que outros usuarios o empreguen.\n",
             "imagery": "# Imaxes\n\nas imaxes aéreas son un recurso importante para o mapeado. Unha combinación de\nvos aéreos, imaxes de satélite, e fontes libremente-compilados están dispoñibles\nno editor baixo o menú 'Configuración do fondo ' á dereita.\n\nPor omisión en [Bing Maps](http://www.bing.com/maps/) as capas de satélite están\npresentes no editor, pero como o pan e o zoom do mapa en novas áreas xeográficas,\nnovas fontes estarán disponíbles. Nalgúns países, como Estados\nUnidos, Francia e Dinamarca teñen dispoñibles moitas imaxes de alta calidade para algunhas áreas.\n\nAs imaxes ás veces son compensadas a partir dos datos do mapa por mor dun erro\npor parte do provedor de imaxes. Se ves que unha morea de camiños desprazouse do fondo,\nnon se moven inmediatamente todos eles para combinar o fondo. Pola contra pode axustar\nas imaxes de xeito que combine os datos premendo en  'Fix alignment' na\nparte inferior da interface de usuario da configuración de fondo UI.\n",
             "roads": "# Estradas\n\nTi podes crear, marcar, e borrar estradas co editor. As estradas poden ser de todo tipo:\npistas, autoestradas, camiños, ciclopistas, e máis - de calquera tipo- os cruces\ne os segmentos poden ser mapeados.\n\n### Seleccionar\n\nPincha sobre unha estrada para seleccionala. En esbozo debe ser visible, xunto\ncun pequeno menú de ferramentas no mapa e unha barra lateral que mostra máis información sobre a estrada.\n\n### Modificar\n\nMoitas veces vai ver que as estradas non están aliñadas coas imaxes por tras delas\nou cunha pista GPS. Pode axustar estradas para que estean no lugar axeitado.\n\nPrimeiro fai click na estrada que queiras modificar. Iluminarase e amosará\nos puntos de control ao longo dela ti podes arrastralos para mellorar a localización. Se queres engadir novos puntos de control para máis precisión, fai doble click na parte da estrada na que queiras o novo nodo, e un punto engadirase.\n\nSe a estrada conecta con outra estrada, pero non se conecta correctamente sobre\no mapa, pode arrastrar un dos seus puntos de control sobre o outro punto na estrada\nco fin de unilas. Ter as estradas conectardas é importante para o mapa e esencial para proporcionar instrucións de conducción.\n\nTamén pode premer na ferramenta 'Move' ou prema a tecla de acceso rápido `M` para mover toda a estrada\nunha vez máis, e logo prema de novo para gardar ese movemento.\n\n### Borrar\n\nSe unha estrada é enteiramente incorrecta - podes ver que non existe nas imaxes de satélite e, idealmente, ter confirmado localmente que non está presente - pode borrala, ou eliminala dende o mapa. Sexa cauteloso ao eliminar características -\ncomo calquera outra edición, os resultados non son vistos por todos en imaxes de satélite é moitas veces están desactualizados, de xeito que a estrada pode estar simplemente recén construída.\n\nPode eliminar unha estrada, premendo sobre ela para seleccionala, a continuación,\npremer na icona lixo ou premendo a tecla \"Delete\".\n\n### Crear\n\nAtopa nalgún lugar que debe haber un camiño, pero non está? Prema na \"liña\"\nicona na esquina superior esquerda do editor ou prema a tecla de acceso `2` para comezar a debuxar.\n\nPrema no inicio da estrada no mapa para comezar a deseñar. Se a estrada\nramifica dende unha estrada existente, comeza premendo sobre o lugar onde elas se conectan.\n\nDespois, prema en puntos ao longo do camiño que segue a liña correcta, segundo imaxes de satélite ou GPS. Se a estrada que está deseñando cruza outra estrada, actívea\npremendo sobre o punto de intersección. Cando termine o deseño, prema dúas veces ou prema 'Return \"ou\" Intro \"no teclado.\n\n",
             "gps": "# GPS\n\nAs trazas GPS gardadas son unha valiosa fonte de información para OpenStreetMap. Este editor\nsoporta trazas locais - `.gpx` arquivos no teu computador local. Ti podes gardar\neste tipo de trazas  GPS cun número de apliacións de smartphone tamén con\nhardware GPS persoal.\n\nPara obter información sobre como realizar trazados GPS, lea\n[Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).\n\nUse trazas GPX para mapear, arrastrar e solta arquivos GPX sobre o editor do mapa.\nDe ser recoñecido, será engadido ao mapa cunha liña en púrpura brillante. Faga clic no menú \"Mapa de datos 'no lado dereito para permitir,\ndesactivar ou engadir a esta nova capa GPX-engadida.\n\nAs trazas GPX non son directamente subidas a OpenStreetMap -o mellor xeito de\nusalas é deseñar o mapa, usándoas como unha guía para as novas características a\nengadir, e tamén para [upload it to OpenStreetMap](http://www.openstreetmap.org/trace/create)\npara que outros usuarios o empreguen.\n",
             "imagery": "# Imaxes\n\nas imaxes aéreas son un recurso importante para o mapeado. Unha combinación de\nvos aéreos, imaxes de satélite, e fontes libremente-compilados están dispoñibles\nno editor baixo o menú 'Configuración do fondo ' á dereita.\n\nPor omisión en [Bing Maps](http://www.bing.com/maps/) as capas de satélite están\npresentes no editor, pero como o pan e o zoom do mapa en novas áreas xeográficas,\nnovas fontes estarán disponíbles. Nalgúns países, como Estados\nUnidos, Francia e Dinamarca teñen dispoñibles moitas imaxes de alta calidade para algunhas áreas.\n\nAs imaxes ás veces son compensadas a partir dos datos do mapa por mor dun erro\npor parte do provedor de imaxes. Se ves que unha morea de camiños desprazouse do fondo,\nnon se moven inmediatamente todos eles para combinar o fondo. Pola contra pode axustar\nas imaxes de xeito que combine os datos premendo en  'Fix alignment' na\nparte inferior da interface de usuario da configuración de fondo UI.\n",
                 "rightclick_intersection": "A última estrada real é {street1}, nós podemos *split* {street2}  esta ligazón e borrar todo. **Click botón dereito no nodo de ligazón.**",
                 "split_intersection": "**Pincha en {button} butón para dividir {street}.**",
                 "retry_split": "Non pinchaches no botón dividir. Volve tentalo.",
                 "rightclick_intersection": "A última estrada real é {street1}, nós podemos *split* {street2}  esta ligazón e borrar todo. **Click botón dereito no nodo de ligazón.**",
                 "split_intersection": "**Pincha en {button} butón para dividir {street}.**",
                 "retry_split": "Non pinchaches no botón dividir. Volve tentalo.",
-                "did_split_multi": "Bo traballo!  {street1} está agora dividida en dúas. Na parte alta podes borrala. **Click no alto da parte  {street2}  para seleccionala.**",
+                "did_split_multi": "Ben feito! {street1} agora divide en dúas partes. A parte de enriba pode ser borrada. **Pincha na parte alta {street2} e selecciónaa.**",
                 "did_split_single": "**Pincha na parte alta de {street2} para seleccionala.**",
                 "multi_select": "{selected} está agora seleccionado. Manten a selección {other1}. Podes facer click no botón para facer múltiples seleccións. **Maiusculas máis click en {other2}.**",
                 "multi_rightclick": "Meu! Ambas liñas son borradas ao seleccionalas. **Click no botón dereito sobre unha liña que amosa o menú edición.**",
                 "did_split_single": "**Pincha na parte alta de {street2} para seleccionala.**",
                 "multi_select": "{selected} está agora seleccionado. Manten a selección {other1}. Podes facer click no botón para facer múltiples seleccións. **Maiusculas máis click en {other2}.**",
                 "multi_rightclick": "Meu! Ambas liñas son borradas ao seleccionalas. **Click no botón dereito sobre unha liña que amosa o menú edición.**",
                 "start": "Comeza a cartografiar!"
             }
         },
                 "start": "Comeza a cartografiar!"
             }
         },
+        "shortcuts": {
+            "title": "Atallos de teclado",
+            "tooltip": "Amosar os atallos de teclado na pantalla.",
+            "key": {
+                "alt": "Alt",
+                "backspace": "Barra Espaciadora",
+                "cmd": "Cmd",
+                "ctrl": "Ctrl",
+                "delete": "Borrar",
+                "del": "Del",
+                "end": "Fin",
+                "enter": "Enter",
+                "esc": "Esc",
+                "home": "Inicio",
+                "option": "Opción",
+                "pause": "Pausa",
+                "pgdn": "PáxAd",
+                "pgup": "PáxAt",
+                "return": "Retorno",
+                "shift": "Maius",
+                "space": "Espacio"
+            },
+            "gesture": {
+                "drag": "arrastrar"
+            },
+            "or": "-ou-",
+            "browsing": {
+                "title": "Navegando",
+                "navigation": {
+                    "title": "Navegación",
+                    "pan": "Mapa Panorámico",
+                    "pan_more": "Mapa panorámico por pantalla completa",
+                    "zoom": "Zoon +/Zoom -",
+                    "zoom_more": "Zoom in / Zoom out total"
+                },
+                "help": {
+                    "title": "Axuda",
+                    "help": "Amosar axuda/documentación",
+                    "keyboard": "Amosar atallos de teclado"
+                },
+                "display_options": {
+                    "title": "Amosar opcións",
+                    "background": "Amosar opcións do fondo",
+                    "background_switch": "Volver trocar ao último fondo",
+                    "map_data": "Amosar opcións datos do mapa",
+                    "fullscreen": "Enter para modo 'pantalla' completa",
+                    "wireframe": "Alternar a modo rede de arame",
+                    "minimap": "Alternar minimapa"
+                },
+                "selecting": {
+                    "title": "Elexir elementos",
+                    "select_one": "Seleccionar un só elemento",
+                    "select_multi": "Seleccionar múltiples elementos",
+                    "lasso": "Debuxar unha volta ao redor dos elementos"
+                },
+                "with_selected": {
+                    "title": "Con elementos selecionados",
+                    "infobox": "Alternar info / caixa de medidas ",
+                    "edit_menu": "Trocar munú edición"
+                },
+                "vertex_selected": {
+                    "title": "Con nodo seleccionado",
+                    "previous": "Saltar ao nodo previo",
+                    "next": "Saltar a próximo nodo",
+                    "first": "Saltar ao primeiro nodo",
+                    "last": "Saltar ao último nodo",
+                    "change_parent": "Trocar a vía local"
+                }
+            },
+            "editing": {
+                "title": "Editando",
+                "drawing": {
+                    "title": "Debuxando",
+                    "add_point": "'Engadir punto' modo",
+                    "add_line": "'Engadir liña' modo",
+                    "add_area": "'Engadir área' modo",
+                    "place_point": "Lugar no punto",
+                    "disable_snap": "Manter premido o punto para desactivalo",
+                    "stop_line": "Rematar debuxando unha liña ou área"
+                },
+                "operations": {
+                    "title": "Operacións",
+                    "continue_line": "Continuar unha liña no nodo seleccionado",
+                    "merge": "Combinar (mesturar) elementos selecionados",
+                    "disconnect": "Desligar elementos do modo selección",
+                    "split": "Dividir unha liña en dúas no nodo seleccionado",
+                    "reverse": "Liña invertida.",
+                    "move": "Mover elementos seleccionados",
+                    "rotate": "Rotar elementos seleccionados",
+                    "orthogonalize": "Endreitar liñas / Esquinas cadradas",
+                    "circularize": "Arredondar unha liña pechada ou área",
+                    "reflect_long": "Reflexar elementos através dun eixo longo",
+                    "reflect_short": "Reflexar elementos através dun eixo curto",
+                    "delete": "Borrar elementos seleccionados"
+                },
+                "commands": {
+                    "title": "Comandos",
+                    "copy": "Copiar elementos seleccionados",
+                    "paste": "Pegar elementos seleccionados",
+                    "undo": "Desfacer última acción",
+                    "redo": "Refacer última acción",
+                    "save": "Gardar os cambios"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                     "label": "SSID (Nome da Rede)"
                 },
                 "kerb": {
                     "label": "SSID (Nome da Rede)"
                 },
                 "kerb": {
-                    "label": "Rampla de freo"
+                    "label": "Bordo"
                 },
                 "lamp_type": {
                     "label": "Tipo"
                 },
                 "lamp_type": {
                     "label": "Tipo"
                 "maxstay": {
                     "label": "Estancia Máxima"
                 },
                 "maxstay": {
                     "label": "Estancia Máxima"
                 },
+                "maxweight": {
+                    "label": "Peso Máximo"
+                },
                 "mtb/scale": {
                     "label": "Dificultade en bicicleta de montaña",
                     "options": {
                 "mtb/scale": {
                     "label": "Dificultade en bicicleta de montaña",
                     "options": {
                     "terms": "<translate with synonyms or related terms for 'Motorcycle Parking', separated by commas>"
                 },
                 "amenity/nightclub": {
                     "terms": "<translate with synonyms or related terms for 'Motorcycle Parking', separated by commas>"
                 },
                 "amenity/nightclub": {
-                    "name": "Puticlub",
-                    "terms": "<translate with synonyms or related terms for 'Nightclub', separated by commas>"
+                    "name": "Pub",
+                    "terms": "Pub, Discoteca, After, Sala de baile"
                 },
                 "amenity/nursing_home": {
                     "name": "Residencia de Anciáns"
                 },
                 "amenity/nursing_home": {
                     "name": "Residencia de Anciáns"
                     "terms": "<translate with synonyms or related terms for 'Apartments', separated by commas>"
                 },
                 "building/barn": {
                     "terms": "<translate with synonyms or related terms for 'Apartments', separated by commas>"
                 },
                 "building/barn": {
-                    "name": "Celeiro",
+                    "name": "Celeiro-Hórreo",
                     "terms": "<translate with synonyms or related terms for 'Barn', separated by commas>"
                 },
                 "building/bunker": {
                     "terms": "<translate with synonyms or related terms for 'Barn', separated by commas>"
                 },
                 "building/bunker": {
                     "name": "Repostería",
                     "terms": "<translate with synonyms or related terms for 'Confectionery', separated by commas>"
                 },
                     "name": "Repostería",
                     "terms": "<translate with synonyms or related terms for 'Confectionery', separated by commas>"
                 },
+                "craft/distillery": {
+                    "name": "Destilaría",
+                    "terms": "<translate with synonyms or related terms for 'Distillery', separated by commas>"
+                },
                 "craft/dressmaker": {
                     "name": "Costureiro/a",
                     "terms": "<translate with synonyms or related terms for 'Dressmaker', separated by commas>"
                 "craft/dressmaker": {
                     "name": "Costureiro/a",
                     "terms": "<translate with synonyms or related terms for 'Dressmaker', separated by commas>"
                     "name": "Electricista",
                     "terms": "<translate with synonyms or related terms for 'Electrician', separated by commas>"
                 },
                     "name": "Electricista",
                     "terms": "<translate with synonyms or related terms for 'Electrician', separated by commas>"
                 },
+                "craft/electronics_repair": {
+                    "name": "Tenda de Reparacións Electrónicas",
+                    "terms": "<translate with synonyms or related terms for 'Electronics Repair Shop', separated by commas>"
+                },
                 "craft/gardener": {
                     "name": "Xardineiro/a",
                     "terms": "<translate with synonyms or related terms for 'Gardener', separated by commas>"
                 "craft/gardener": {
                     "name": "Xardineiro/a",
                     "terms": "<translate with synonyms or related terms for 'Gardener', separated by commas>"
                     "name": "Senda Ciclista",
                     "terms": "<translate with synonyms or related terms for 'Cycle Path', separated by commas>"
                 },
                     "name": "Senda Ciclista",
                     "terms": "<translate with synonyms or related terms for 'Cycle Path', separated by commas>"
                 },
+                "highway/elevator": {
+                    "name": "Montacargas",
+                    "terms": "<translate with synonyms or related terms for 'Elevator', separated by commas>"
+                },
                 "highway/footway": {
                     "name": "Senda Peonil",
                     "terms": "<translate with synonyms or related terms for 'Foot Path', separated by commas>"
                 "highway/footway": {
                     "name": "Senda Peonil",
                     "terms": "<translate with synonyms or related terms for 'Foot Path', separated by commas>"
                     "name": "Antiguidades Tenda",
                     "terms": "<translate with synonyms or related terms for 'Antiques Shop', separated by commas>"
                 },
                     "name": "Antiguidades Tenda",
                     "terms": "<translate with synonyms or related terms for 'Antiques Shop', separated by commas>"
                 },
+                "shop/appliance": {
+                    "name": "Tenda de Electrodomésticos",
+                    "terms": "<translate with synonyms or related terms for 'Appliance Store', separated by commas>"
+                },
                 "shop/art": {
                     "name": "Galería de Arte",
                     "terms": "<translate with synonyms or related terms for 'Art Store', separated by commas>"
                 "shop/art": {
                     "name": "Galería de Arte",
                     "terms": "<translate with synonyms or related terms for 'Art Store', separated by commas>"
index d55ec825cea9c85eea30854dbe64658ae73096ed..5d9dd871433002c59720a158a9c96e2d2f10fd1a 100644 (file)
         "help": {
             "title": "Pomoć",
             "help": "# Pomoć\n\niD je mrežna aplikacija za uređivanje [OpenStreetMap-a](http://www.openstreetmap.org/),\nbesplatne karte svijeta. Možeš ju koristiti za dodavanje\ni obnavljanje podataka u svojoj okolini, čime stvaraš bolju otvorenu kartu svijeta dostupnu svima, uključujući izvorne podatke karte.\n\nIspravke i sadržaj koji napraviš na karti biti će vidljive svakome tko koristi\nOpenStreetMap. Da bi mogao/la uređivati kartu, trebaš se\n[prijaviti] (https://www.openstreetmap.org/login).\n\n[iD editor](http://ideditor.com/) je suradnički projekt sa [izvornim kôdom\ndostupnim na GitHub-u](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Pomoć",
             "help": "# Pomoć\n\niD je mrežna aplikacija za uređivanje [OpenStreetMap-a](http://www.openstreetmap.org/),\nbesplatne karte svijeta. Možeš ju koristiti za dodavanje\ni obnavljanje podataka u svojoj okolini, čime stvaraš bolju otvorenu kartu svijeta dostupnu svima, uključujući izvorne podatke karte.\n\nIspravke i sadržaj koji napraviš na karti biti će vidljive svakome tko koristi\nOpenStreetMap. Da bi mogao/la uređivati kartu, trebaš se\n[prijaviti] (https://www.openstreetmap.org/login).\n\n[iD editor](http://ideditor.com/) je suradnički projekt sa [izvornim kôdom\ndostupnim na GitHub-u](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Uređivanje i pohranjivanje\n\nOvaj uređivač je primarno dizajniran za korištenje na mreži, i pristupaš mu\nkroz web stranicu.\n\n### Odabir elemenata karte\n\nZa odabir elementa na karti, npr. ceste ili točke interesa, klikni\nna nju na karti. To će istaknuti element, otvoriti okno\ns detaljima o njoj, i prikazati izbornik s mogućnostima koje možeš napraviti na elementu.\n\nZa odabir više elemenata, pritisni i drži \"Shift\" tipku. Tada ili klikni na\nelemente koje želiš odabrati ili povuci po karti za crtanje pravokutnika.\nTime će se nacrtati pravokutnik i odabrati sve točke unutar njega.\n\n### Pohranjivanje promjena\n\nKada napraviš promjenu poput uređenja ceste, zgrada i mjesta, one su\npohranjene lokalno dok ih ne spremiš na server. Ne moraš se brinuti ako pogriješiš\n- možeš poništiti promjene klikom na tipku \"Opovrgni\" i vratiti\npromjene klikom na tipku \"Ponovi\".\n\nKlikni \"Spremi\" za završavanje skupa uređivanja - npr. ako završiš jedno područje grada\ni želiš početi novo područje. Imaš mogućnost, pogledati popis promjena koju si napravio/la,\ni uređivač će ti dati korisne prijedloge i upozorenja\nako je promjena nešto nije u redu.\n\nAko je sve u redu, možeš unijeti kratak komentar za objašnjenje napravljenih promjena\nkoje si napravio/la i ponovno kliknuti \"Spremi\" za postavljanje promjena\nna [OpenStreetMap.org](http://www.openstreetmap.org/), gdje će biti vidljive\nza sve ostale korisnike i dostupne drugima za dogradnju i unaprijeđenje podataka.\n\nAko nisi zavšio/la sve promjene u jednom uređivanju, možeš ostaviti prozor\nuređivača i doći kasnije (na isto računalo i isti internet preglednik) i\naplikacija za uređivanje će ti ponuditi vraćanje tvojih započetih promjena.\n\n### Korištenje uređivača\n\nPopis dostupnih kratica na tipkovnici mogu se pronaći[ovdje](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n",
             "roads": "# Ceste\n\nMožeš stvarati, popraviti/urediti i obrisati ceste pomoću ovog uređivača. Ceste\nmogu biti svih vrsta: puteljci, ceste, poljski putovi, biciklističke staze i drugo -\nsve staze preko kojih se često prolazi bi se trebale kartirati.\n\n### Odabir\n\nKlikni na cestu da ju odabereš. Pojaviti će se obrub oko ceste, zajedno s\nmalim alatnim izbornikom na karti i bočnim oknom koji prikazuje dodatne\ninformacije o odabranoj cesti.\n\n### Uređivanje\n\nČesto ćeš vidjeti ceste koje se ne podudaraju s pozadinskim snimcima ili s\nGNSS tragom. Možeš urediti te ceste tako da se nalaze na ispravnom mjestu.\n\nPrvo klikni na cestu koju želiš urediti. To će ju označiti i prikazati kontrolne\ntočke unutar nje koje možeš premjestiti na točnije lokacije. Ako želiš dodati\nnove kontrolne točke za precizniju putanju, klikni dvoklikom na dio ceste gdje\nnema točke kako bi dodao/la novu.\n\nAko se cesta spaja s drugom cestom, ali nije ispravno spojena na karti, možeš\npovući kontrolnu točku na drugu cestu kako bi ih spojio/la. Spojene ceste su\nvrlo važne za kartu i osnova za omogućavanje uputa za navigaciju.\n\nTakođer možeš kliknuti alat \"Premjesti\" ili pritisnuti kraticu - tipku `M` za\npomak cijele ceste odjednom i zatim kliknuti ponovno za spremanje tog\npomaka.\n\n### Brisanje\n\nAko je cesta potpuno krivo ucrtana - ne vidi se na satelitskim snimkama i ako\nsi utvrdio/la da zbilja ne postoji uvidom na terenu možeš ju obrisati, što će ju\nobrisati s karte. Budi oprezan/na kada brišeš elemente - kao i kod svakog\ndrugog uređivanja rezultati su vidljivi svima, a satelitske snimke su često\nzastarjele, pa je moguće da je cesta nedavno sagrađena.\n\nZa brisanje ceste najprije ju označi, a zatim klikni na ikonicu kante za smeće ili\npritisni tipku \"Delete\".\n\n### Stvaranje\n\nAko si pronašao/la cestu koja bi trebala biti ucrtana ali nije, klikni ikonicu\n\"Linija\" na gornjem lijevom dijelu uređivača ili pritisni kraticu - tipku `2` da\nzapočneš crtanje linije.\n\nKlikni na početak ceste na karti da započneš crtanje. Ako se cesta odvaja od\npostojeće ceste, klikni na mjesto gdje se spajaju.\n\nZatim klikni na točke duž ceste tako da prate ispravnu putanju ceste, prema\npodacima satelitske snimke ili GNSS traga. Ako se cesta koju crtaš križa s\ndrugom cestom, spoji ih klikom na mjestu raskrižja. Kada si završio/la s\ncrtanjem, klikni dvoklikom sastrane ili pritisni tipku \"Return\" ili \"Enter\" na\ntipkovnici.\n",
             "gps": "# GNSS\n\nGNSS podaci su najpouzdaniji izvor podataka za OpenStreetMap. Ovaj uređivač\npodržava lokalne tragove - `.gpx` datoteteke s tvog računala. Takav oblik GNSS\ntraga možeš prikupiti s raznim aplikacijama za pametne telefone kao i s drugim\nGNSS/GPS uređajima.\n\nZa više informacija o postupku izmjere pomoću GNSS satelita, pročitaj članak\n[\"Kartiranje s pametnim telefonom, GPS-om ili papirom\"](http://learnosm.org/en/mobile-mapping/).\n\nKako bi koristio/la GPX tragove za kartiranje, povuci i ispusti GPX datoteku na uređivač\nkarte. Ako se datoteka ispravno učita, biti će dodana na kartu kao linija svjetlo ljubičaste\nboje. Klikni na izbornik \"Podaci karte\" s desne strane za uključivanje, isključivanje\nili približenje na taj novi GPX sloj.\n\nGPX trag nije direktno postavljen na OpenStreetMap, samo je prikazan na karti. Da bi ga\niskoristio/la na najbolji način, preko njega crtaj na karti koristeći ga kao vodilju za\ndodavanje novih elemenata. Trag možeš također [postaviti na OpenStreetMap](http://www.openstreetmap.org/trace/create)\nkako bi ga i drugi korisnici mogli koristiti.\n",
             "imagery": "# Fotografski snimci\n\nZračni snimci su važan izvor za kartiranje. Kombinacija snimaka iz aviona,\nsatelitskih snimaka i drugih besplatno prikupljenih izvornika je dostupna s\ndesne strane u izborniku \"Postavke podloge\".\n\nPočetno je u pozadini kao podloga prikazan sloj satelitskih snimaka [karte Bing Maps](http://www.bing.com/maps/). Novi izvornici postaju dostupni pomicanjem\ni približenjem karte na novo geografsko područje. Neke države, poput SAD-a,\nFrancuske i Danske imaju dostupne vrlo kvalitetne snimke za određena\npodručja.\n\nSnimke su ponekad pomaknute u odnosu na podatke karte zbog pogreške\nna koordinatama izvornih snimaka. Ako vidiš puno cesta izmaknutih u\nodnosu na pozadinu, nemoj ih odmah pomicati da se poklope sa pozadinom.\nUmjesto toga, možeš podesiti snimke da odgovaraju postojećim podacima\ntako da klikneš \"Popravi odstupanje\" na dnu izbornika \"Postavke pozadine\".\n",
             "roads": "# Ceste\n\nMožeš stvarati, popraviti/urediti i obrisati ceste pomoću ovog uređivača. Ceste\nmogu biti svih vrsta: puteljci, ceste, poljski putovi, biciklističke staze i drugo -\nsve staze preko kojih se često prolazi bi se trebale kartirati.\n\n### Odabir\n\nKlikni na cestu da ju odabereš. Pojaviti će se obrub oko ceste, zajedno s\nmalim alatnim izbornikom na karti i bočnim oknom koji prikazuje dodatne\ninformacije o odabranoj cesti.\n\n### Uređivanje\n\nČesto ćeš vidjeti ceste koje se ne podudaraju s pozadinskim snimcima ili s\nGNSS tragom. Možeš urediti te ceste tako da se nalaze na ispravnom mjestu.\n\nPrvo klikni na cestu koju želiš urediti. To će ju označiti i prikazati kontrolne\ntočke unutar nje koje možeš premjestiti na točnije lokacije. Ako želiš dodati\nnove kontrolne točke za precizniju putanju, klikni dvoklikom na dio ceste gdje\nnema točke kako bi dodao/la novu.\n\nAko se cesta spaja s drugom cestom, ali nije ispravno spojena na karti, možeš\npovući kontrolnu točku na drugu cestu kako bi ih spojio/la. Spojene ceste su\nvrlo važne za kartu i osnova za omogućavanje uputa za navigaciju.\n\nTakođer možeš kliknuti alat \"Premjesti\" ili pritisnuti kraticu - tipku `M` za\npomak cijele ceste odjednom i zatim kliknuti ponovno za spremanje tog\npomaka.\n\n### Brisanje\n\nAko je cesta potpuno krivo ucrtana - ne vidi se na satelitskim snimkama i ako\nsi utvrdio/la da zbilja ne postoji uvidom na terenu možeš ju obrisati, što će ju\nobrisati s karte. Budi oprezan/na kada brišeš elemente - kao i kod svakog\ndrugog uređivanja rezultati su vidljivi svima, a satelitske snimke su često\nzastarjele, pa je moguće da je cesta nedavno sagrađena.\n\nZa brisanje ceste najprije ju označi, a zatim klikni na ikonicu kante za smeće ili\npritisni tipku \"Delete\".\n\n### Stvaranje\n\nAko si pronašao/la cestu koja bi trebala biti ucrtana ali nije, klikni ikonicu\n\"Linija\" na gornjem lijevom dijelu uređivača ili pritisni kraticu - tipku `2` da\nzapočneš crtanje linije.\n\nKlikni na početak ceste na karti da započneš crtanje. Ako se cesta odvaja od\npostojeće ceste, klikni na mjesto gdje se spajaju.\n\nZatim klikni na točke duž ceste tako da prate ispravnu putanju ceste, prema\npodacima satelitske snimke ili GNSS traga. Ako se cesta koju crtaš križa s\ndrugom cestom, spoji ih klikom na mjestu raskrižja. Kada si završio/la s\ncrtanjem, klikni dvoklikom sastrane ili pritisni tipku \"Return\" ili \"Enter\" na\ntipkovnici.\n",
             "gps": "# GNSS\n\nGNSS podaci su najpouzdaniji izvor podataka za OpenStreetMap. Ovaj uređivač\npodržava lokalne tragove - `.gpx` datoteteke s tvog računala. Takav oblik GNSS\ntraga možeš prikupiti s raznim aplikacijama za pametne telefone kao i s drugim\nGNSS/GPS uređajima.\n\nZa više informacija o postupku izmjere pomoću GNSS satelita, pročitaj članak\n[\"Kartiranje s pametnim telefonom, GPS-om ili papirom\"](http://learnosm.org/en/mobile-mapping/).\n\nKako bi koristio/la GPX tragove za kartiranje, povuci i ispusti GPX datoteku na uređivač\nkarte. Ako se datoteka ispravno učita, biti će dodana na kartu kao linija svjetlo ljubičaste\nboje. Klikni na izbornik \"Podaci karte\" s desne strane za uključivanje, isključivanje\nili približenje na taj novi GPX sloj.\n\nGPX trag nije direktno postavljen na OpenStreetMap, samo je prikazan na karti. Da bi ga\niskoristio/la na najbolji način, preko njega crtaj na karti koristeći ga kao vodilju za\ndodavanje novih elemenata. Trag možeš također [postaviti na OpenStreetMap](http://www.openstreetmap.org/trace/create)\nkako bi ga i drugi korisnici mogli koristiti.\n",
             "imagery": "# Fotografski snimci\n\nZračni snimci su važan izvor za kartiranje. Kombinacija snimaka iz aviona,\nsatelitskih snimaka i drugih besplatno prikupljenih izvornika je dostupna s\ndesne strane u izborniku \"Postavke podloge\".\n\nPočetno je u pozadini kao podloga prikazan sloj satelitskih snimaka [karte Bing Maps](http://www.bing.com/maps/). Novi izvornici postaju dostupni pomicanjem\ni približenjem karte na novo geografsko područje. Neke države, poput SAD-a,\nFrancuske i Danske imaju dostupne vrlo kvalitetne snimke za određena\npodručja.\n\nSnimke su ponekad pomaknute u odnosu na podatke karte zbog pogreške\nna koordinatama izvornih snimaka. Ako vidiš puno cesta izmaknutih u\nodnosu na pozadinu, nemoj ih odmah pomicati da se poklope sa pozadinom.\nUmjesto toga, možeš podesiti snimke da odgovaraju postojećim podacima\ntako da klikneš \"Popravi odstupanje\" na dnu izbornika \"Postavke pozadine\".\n",
                 "preset_townhall": "Gornji dio uređivača elemenata prikazuje vrstu elementa. Ova točka je {preset}.",
                 "fields_townhall": "Srednji dio uređivača elemenata sadrži *polja* koja prikazuju atribute elementa, npr. njegovo ime i adresu.",
                 "close_townhall": "**Zatvori uređivač elemenata pritiskom tipke escape na tipkovnici ili klikom na gumb {button} u gornjem uglu.**",
                 "preset_townhall": "Gornji dio uređivača elemenata prikazuje vrstu elementa. Ova točka je {preset}.",
                 "fields_townhall": "Srednji dio uređivača elemenata sadrži *polja* koja prikazuju atribute elementa, npr. njegovo ime i adresu.",
                 "close_townhall": "**Zatvori uređivač elemenata pritiskom tipke escape na tipkovnici ili klikom na gumb {button} u gornjem uglu.**",
-                "search_street": "Također možeš tražiti elemente koji se nalaze u trenutnom prikazu, ili bilo gdje u svijetu. **'Potraži: {name}'**",
+                "search_street": "Također možeš tražiti elemente koji se nalaze u trenutnom prikazu, ili bilo gdje u svijetu. **Potraži: '{name}'**",
                 "choose_street": "**Odaberi {name} iz liste kako bi odabrao/la element.**",
                 "selected_street": "Odlično! {name} je sada odabrana.",
                 "editor_street": "Prikazana polja za ulicu su različita od polja koja su bila prikazana za gradsku vijećnicu.{br}Za ovu odabranu ulicu, uređivač elemenata prikazuje polja kao '{field1}' i '{field2}'. **Zatvori uređivač elemenata pritiskom tipke escape na tipkovnici ili klikom na gumb {button}.**",
                 "choose_street": "**Odaberi {name} iz liste kako bi odabrao/la element.**",
                 "selected_street": "Odlično! {name} je sada odabrana.",
                 "editor_street": "Prikazana polja za ulicu su različita od polja koja su bila prikazana za gradsku vijećnicu.{br}Za ovu odabranu ulicu, uređivač elemenata prikazuje polja kao '{field1}' i '{field2}'. **Zatvori uređivač elemenata pritiskom tipke escape na tipkovnici ili klikom na gumb {button}.**",
                 "rightclick_intersection": "Posljednja prava ulica je '{street1}', stoga ćemo *razdvojiti* '{street2}' na ovom raskrižju i obrisati sve iznad nje. **Desnom tipkom klikni na čvornu točku raskrižja.**",
                 "split_intersection": "**Klikni na gumb {button} za razvajanje {street}.**",
                 "retry_split": "Nisi kliknuo/la gumb Razdvoji. Pokušaj ponovno.",
                 "rightclick_intersection": "Posljednja prava ulica je '{street1}', stoga ćemo *razdvojiti* '{street2}' na ovom raskrižju i obrisati sve iznad nje. **Desnom tipkom klikni na čvornu točku raskrižja.**",
                 "split_intersection": "**Klikni na gumb {button} za razvajanje {street}.**",
                 "retry_split": "Nisi kliknuo/la gumb Razdvoji. Pokušaj ponovno.",
-                "did_split_multi": "Bravo! {street1} je sada razvojena na dva dijela. Gornji dio se može obrisati. **Klikni na gornji dio ulice '{street2}' da ju odabereš.**",
+                "did_split_multi": "Bravo! {street1} je sada razvojena na dva dijela. Gornji dio se može obrisati. **Klikni na gornji dio ulice {street2} da ju odabereš.**",
                 "did_split_single": "**Klikni na gornji dio ulice '{street2}' da ju odabereš.**",
                 "multi_select": "'{selected}' je sada odabrana. Idemo također odabrati ulicu '{other1}'. Više stvari možeš odabrati ako držiš tipku shift dok odabireš mišem. **Odaberi '{other2}' pomoću shift-klika.** ",
                 "multi_rightclick": "Obje linije koje trebamo obrisati su sada odabrane. **Desnom tipkom na mišu klikni na jednu od linija za prikazivanje izbornika za uređivanje.**",
                 "did_split_single": "**Klikni na gornji dio ulice '{street2}' da ju odabereš.**",
                 "multi_select": "'{selected}' je sada odabrana. Idemo također odabrati ulicu '{other1}'. Više stvari možeš odabrati ako držiš tipku shift dok odabireš mišem. **Odaberi '{other2}' pomoću shift-klika.** ",
                 "multi_rightclick": "Obje linije koje trebamo obrisati su sada odabrane. **Desnom tipkom na mišu klikni na jednu od linija za prikazivanje izbornika za uređivanje.**",
                 "start": "Počni kartirati!"
             }
         },
                 "start": "Počni kartirati!"
             }
         },
+        "shortcuts": {
+            "browsing": {
+                "help": {
+                    "title": "Pomoć"
+                }
+            },
+            "editing": {
+                "commands": {
+                    "save": "Spremi promjene"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                     "name": "Pitka voda za kamp kućice"
                 },
                 "area": {
                     "name": "Pitka voda za kamp kućice"
                 },
                 "area": {
-                    "name": "Površina",
+                    "name": "Područje",
                     "terms": "površina,područje"
                 },
                 "area/highway": {
                     "terms": "površina,područje"
                 },
                 "area/highway": {
index 39aee00818ed0d9a7a45f8e510086967c18b77d9..61ebdc18dfe8934a1a464259e2856979764d07cc 100644 (file)
             "restriction": {
                 "help": {
                     "select": "Kattints egy útszakasz kiválasztásához.",
             "restriction": {
                 "help": {
                     "select": "Kattints egy útszakasz kiválasztásához.",
-                    "toggle": "Kattints a kanyarodási tiltások beállításához.",
+                    "toggle": "Kattints a kanyarodási tiltások átkapcsolásához.",
                     "toggle_on": "Kattints egy „{restriction}” korlátozás hozzáadásához.",
                     "toggle_off": "Kattints a(z) „{restriction}” korlátozás eltávolításához."
                 },
                     "toggle_on": "Kattints egy „{restriction}” korlátozás hozzáadásához.",
                     "toggle_off": "Kattints a(z) „{restriction}” korlátozás eltávolításához."
                 },
         "help": {
             "title": "Súgó",
             "help": "# Súgó\n\nEz egy szerkesztő az [OpenStreetMap](http://www.openstreetmap.org/)hez, a szabadon szerkeszthető és felhasználható világtérképhez. A környezetedről tölthetsz fel, vagy frissíthetsz adatokat, ezáltal mindenki számára jobbá téve egy ingyenes térképet.\n\nAmit ezen a térképen alkotsz, mindenki számára látható lesz, aki használja az OpenStreetMapet. A szerkesztéshez [be kell jelentkezned]\n(https://www.openstreetmap.org/login)\n\nAz [iD szerkesztő](http://ideditor.com/) egy együttműködésen alapuló projekt, a [GitHub-on elérhető forráskóddal](https://github.com/openstreetmap/iD). Fordításába és fejlesztésébe te is besegíthetsz.\n",
         "help": {
             "title": "Súgó",
             "help": "# Súgó\n\nEz egy szerkesztő az [OpenStreetMap](http://www.openstreetmap.org/)hez, a szabadon szerkeszthető és felhasználható világtérképhez. A környezetedről tölthetsz fel, vagy frissíthetsz adatokat, ezáltal mindenki számára jobbá téve egy ingyenes térképet.\n\nAmit ezen a térképen alkotsz, mindenki számára látható lesz, aki használja az OpenStreetMapet. A szerkesztéshez [be kell jelentkezned]\n(https://www.openstreetmap.org/login)\n\nAz [iD szerkesztő](http://ideditor.com/) egy együttműködésen alapuló projekt, a [GitHub-on elérhető forráskóddal](https://github.com/openstreetmap/iD). Fordításába és fejlesztésébe te is besegíthetsz.\n",
-            "editing_saving": "# Szerkesztés és Mentés\n\nA szerkesztőt elsődlegesen online munkára tervezték és te jelenleg egy weblapon éred el.\n\n### Elemek kijelölése\n\nEgy térképelem, mint út vagy érdekes hely kijelöléséhez kattints rá a térképen. Ettől a kijelölt elem kiemelődik és megnyílik egy panel az adataival, és egy menüvel, ami mutatja, miket tudsz az elemmel csinálni. Több elemet a 'Shift' gomb nyomva tartása közbeni kattintással, vagy húzással tudsz kijelölni. A húzással kijelölöd a bekeretezett részen lévő összes elemet, lehetővé téve, hogy egyszerre több mindent változtass.\n\n### Szerkesztések mentése\n\nAmikor utakat, épületeket, helyeket szerkesztesz, ezek a változások helyileg lesznek tárolva, amíg nem mented őket a kiszolgálóra. Ne aggódj, ha elrontasz valamit - vissza tudod vonni a változtatásaidat a visszavonás gombra kattintva, a mégis gombra kattintva pedig a korábban visszavont változtatásaidat állíthatod vissza.\n\nKattints a 'Mentés' gombra, ha végeztél egy terület szerkesztésével - például, ha befejezted egy város részletének szerkesztését és egy másik területet szeretnél szerkeszteni. Lehetőséged lesz visszanézni, hogy mit csináltál. A szerkesztő hasznos tanácsokat biztosít és figyelmeztet ha valami nem tűnik megfelelőnek a változtatásaiddal.\n\nHa minden rendben van, beírhatsz egy rövid ismertetést a szerkesztéseiddel kapcsolatban és újból a 'Mentés' gombra kattintva közzéteheted a változtatásaidat és az információkat velük kapcsolatban az [OpenStreetMap.org](http://www.openstreetmap.org/) webhelyen, ahol az összes felhasználónak láthatóak és elérhetőek lesznek, hogy azokra építhessenek, fejleszthessék azokat.\n\nHa nem tudod befejezni a szerkesztéseidet egyszerre, elhagyhatod a szerkesztő ablakot, mert amikor visszatérsz (ugyanazzal a böngészővel és számítógéppel), a szerkesztő fel fogja ajánlani, hogy visszaállítsa-e a korábbi munkádat.\n\n### Szerkesztő használata\n\nA szerkesztést megkönnyítő gyorsbillentyűket [itt](http://wiki.openstreetmap.org/wiki/Hu:iD/Shortcuts) találhatod meg.\n",
+            "editing_saving": "# Szerkesztés és mentés\n\nEz a szerkesztő főleg online munkára lett tervezve, és most egy webhelyen\nkeresztül éred el.\n\n### Elemek kiválasztása\n\nEgy térképi elem, mint egy út vagy egy tájékozódási pont, kiválasztásához\nkattints rá a térképen. Ez kiemeli a kiválasztott elemet, megnyit egy panelt\na részleteivel, és megjelenít egy menüt azokkal a dolgokkal, amit az elemmel\ntenni lehet.\n\nTöbb elem kiválasztásához tartsd lenyomva a „Shift” gombot. Aztán kattints\na kiválasztandó elemekre, vagy húzd az egeret a térképen egy téglalapot\nrajzolva. Ez egy dobozt rajzol ki, és kiválaszt minden benne lévő pontot.\n\n### Szerkesztések mentése\n\nAmikor változásokat csinálsz, például utakat, épületeket vagy helyeket\nszerkesztesz, akkor ezek helyben mentésre kerülnek, amíg nem mented le ezt\na kiszolgálóra. Ne aggódj ha hibát vétesz – visszavonhatod a változásokat a\nvisszavonás gombbal, és újra végrehajthatod a módosításokat az újra gombbal.\n\nKattints a „Mentés” gombra a szerkesztéscsomag befejezéséhez – például, ha\nbefejezted a város egy területét, és egy másik területen folytatnád. Most\nfogod tudni leellenőrizni, hogy mit változtattál, a szerkesztő pedig\nsegítőkész javaslatokat és figyelmeztetéseket fog adni, ha valami nem tűnik\nteljesen jónak a változtatásokban.\n\nHa minden jónak néz ki, akkor megadhatsz egy rövid megjegyzést a változásról,\nés a „Mentés” gombra kattintva elküldheted a változásokat az\n[OpenStreetMap.org](http://www.openstreetmap.org/) oldalnak, ahol az látható\nlesz minden más felhasználó számára, így tovább javíthatnak azon.\n\nHa valamiért nem tudod egyszerre befejezni a szerkesztésed, akkor elhagyhatod\na szerkesztőablakot és visszatérhetsz (ugyanahhoz a géphez és böngészőhöz),\nekkor a szerkesztő alkalmazás helyreállítja a munkád.\n\n### A szerkesztő használata\n\nA „?” gomb megnyomásával megtekintheted a gyorsbillentyűket.\n",
             "roads": "# Utak\n\nA szerkesztőprogrammal tudsz utakat létrehozni, javítani és törölni. Az utak\nsokfélék lehetnek: ösvények, közutak, kerékpárutak, stb. – minden gyakran\nkeresztezett szakaszt térképezni kell.\n\n### Kijelölés\n\nÚt kijelöléséhez kattints rá. Meg fog jelenni kiemelve, mellette egy kis eszköztár\nmenüvel és egy oldalsávval, ami további információkat mutat az útról.\n\n### Módosítás\n\nGyakran láthatod, hogy az út nincs a mögötte lévő légifelvételhez, vagy GPS\nnyomvonalhoz igazítva. Ha megbizonyosodtál arról, hogy nem a légifelvétel téved,\nhelyreigazíthatod az utakat.\n\nElőször is kattints a módosítandó útra. Ettől kiemelődik az út és megjelennek a\nkezelőpontjai, amiket mozgatni tudsz a megfelelő helyre. Ha új kezelőpontot\nszeretnél hozzáadni, hogy részletesebb utat kapj, kattints duplán az útnak egy\nolyan részére, ahol még nincs pont.\n\nHa egy út egy másik útba csatlakozik, de a térképen nincsenek összekapcsolva,\nhúzd az egyik út kezelőpontját a másik útra, és össze fognak kapcsolódni.\nAz utak megfelelő összekapcsolása a térképen nagyon fontos, útvonaltervezéshez\nlétfontosságú.\n\nHasználhatod a 'Mozgatás' eszközt is, vagy megnyomhatod az 'M' gyorsbillentyűt, ha az\naz egész utat szeretnéd mozgatni. Mozgatás után kattintással rögzítheted az új helyén.\n\n### Törlés\n\nHa egy út teljesen hibás – ha azt látod, hogy egyáltalán nincs rajta a légifelvételen,\nés biztos vagy benne, hogy nem is létezik –, törölheted, amivel eltávolítod a térképről.\nLegyél óvatos elemek törlésekor, akárcsak bármilyen más szerkesztésnél, a mindenki\náltal látható eredmény és a légifelvétel gyakran elavult, lehet, hogy az utat nemrég építették.\n\nAz út törléséhez előbb válaszd ki, majd kattints a kuka ikonra, vagy nyomd meg a Delete\nbillentyűt.\n\n### Létrehozás\n\nTaláltál egy utat, ami még nincs rajta a térképen? Kattints a bal felső eszköztár 'Vonal'\nikonjára vagy nyomd meg a '2'-es billentyűt és kezdd el rajzolni a vonalat.\n\nA rajzolás megkezdéséhez kattints a térképen az út elejére. Ha az út\negy másik meglévő útból ágazik ki, arra a helyre kattints, ahol csatlakoznak.\n\nEzután kattintással hozz létre pontokat a műholdkép vagy GPS nyomvonal alapján,\nhogy a vonal az út középvonalát kövesse. Ha az utad keresztez egy másik utat, kapcsold\nössze őket a metszéspontjukra kattintva. Ha kész vagy a rajzolással, kattints duplán,\nvagy nyomj a billentyűzeten egy 'Enter'-t.\n",
             "gps": "#GPS\n\nAz összegyűjtött GPS nyomvonalak hasznos adatok az OpenStreetMap számára. Ez a szerkesztő\ntámogatja a helyi nyomvonalakat - `.gpx` fájlok a saját gépeden. Ezeket a\nGPS nyomvonalakat begyűjtheted jó pár okostelefon alkalmazással, vagy\nszemélyi GPS eszközökkel.\n\nTovábbi információkért, hogy hogy kell GPS felmérést végezni, olvasd el a\n[Térképezés okostelefonnal, GPS-szel, vagy papíron](http://learnosm.org/en/mobile-mapping/) cikket.\n\nHogy egy GPX sávot térképezéshez használj, fogd és vidd a GPX fájlt a térképszerkesztőre. Ha felismeri a program, akkor hozzáadásra kerül a térképre, mint egy fényes lila\nvonal. Kattints a „Térképadatok” menüre jobb oldalt a bekapcsoláshoz, kikapcsoláshoz vagy közelítéshez a GPX-vezérelt rétegen.\n\nA GPX sáv nem kerül közvetlen feltöltésre az OpenStreetMapbe - a legjobb módszer a használatára az,\nhogy rajzolsz a térképre, és az új elemek felviteléhez segítségként használod,\nmajd [feltöltöd az OpenStreetMapbe](http://www.openstreetmap.org/trace/create),\nhogy mások is használni tudják.\n",
             "imagery": "# Légifelvétel\n\nA légifelvétel a térképezés egyik fontos forrása. A repülőgépes ortofotók, műholdképek és szabadon összeállított források kombinációja rendelkezésre áll a szerkesztőben a bal oldali menü „Háttérbeállítások” gombjára kattintva.\n\nAlapértelmezésként a [Bing Maps](http://www.bing.com/maps/) műholdkép réteg jelenik meg a szerkesztőben, de ahogy új helyekre görgeted a térképet, új források jelennek meg. Néhány országban, mint az Egyesül Államok, Franciaország, vagy Dánia nagyon jó minőségű légifelvételek érhetőek el egyes területeken.\n\nA légifelvételek gyakran el vannak csúszva a valósághoz képest, a légifelvétel szolgáltatók hibájából. Ha látsz egy csomó utat eltolódva a háttértől, ne húzd őket rögtön a háttérképhez. Ehelyett igazítsd úgy a háttérképet, hogy a meglévő adatok illeszkedjenek rá. Ehhez kattints a Háttérbeállítások menü „Elcsúszás korrigálása” gombjára.\n",
             "roads": "# Utak\n\nA szerkesztőprogrammal tudsz utakat létrehozni, javítani és törölni. Az utak\nsokfélék lehetnek: ösvények, közutak, kerékpárutak, stb. – minden gyakran\nkeresztezett szakaszt térképezni kell.\n\n### Kijelölés\n\nÚt kijelöléséhez kattints rá. Meg fog jelenni kiemelve, mellette egy kis eszköztár\nmenüvel és egy oldalsávval, ami további információkat mutat az útról.\n\n### Módosítás\n\nGyakran láthatod, hogy az út nincs a mögötte lévő légifelvételhez, vagy GPS\nnyomvonalhoz igazítva. Ha megbizonyosodtál arról, hogy nem a légifelvétel téved,\nhelyreigazíthatod az utakat.\n\nElőször is kattints a módosítandó útra. Ettől kiemelődik az út és megjelennek a\nkezelőpontjai, amiket mozgatni tudsz a megfelelő helyre. Ha új kezelőpontot\nszeretnél hozzáadni, hogy részletesebb utat kapj, kattints duplán az útnak egy\nolyan részére, ahol még nincs pont.\n\nHa egy út egy másik útba csatlakozik, de a térképen nincsenek összekapcsolva,\nhúzd az egyik út kezelőpontját a másik útra, és össze fognak kapcsolódni.\nAz utak megfelelő összekapcsolása a térképen nagyon fontos, útvonaltervezéshez\nlétfontosságú.\n\nHasználhatod a 'Mozgatás' eszközt is, vagy megnyomhatod az 'M' gyorsbillentyűt, ha az\naz egész utat szeretnéd mozgatni. Mozgatás után kattintással rögzítheted az új helyén.\n\n### Törlés\n\nHa egy út teljesen hibás – ha azt látod, hogy egyáltalán nincs rajta a légifelvételen,\nés biztos vagy benne, hogy nem is létezik –, törölheted, amivel eltávolítod a térképről.\nLegyél óvatos elemek törlésekor, akárcsak bármilyen más szerkesztésnél, a mindenki\náltal látható eredmény és a légifelvétel gyakran elavult, lehet, hogy az utat nemrég építették.\n\nAz út törléséhez előbb válaszd ki, majd kattints a kuka ikonra, vagy nyomd meg a Delete\nbillentyűt.\n\n### Létrehozás\n\nTaláltál egy utat, ami még nincs rajta a térképen? Kattints a bal felső eszköztár 'Vonal'\nikonjára vagy nyomd meg a '2'-es billentyűt és kezdd el rajzolni a vonalat.\n\nA rajzolás megkezdéséhez kattints a térképen az út elejére. Ha az út\negy másik meglévő útból ágazik ki, arra a helyre kattints, ahol csatlakoznak.\n\nEzután kattintással hozz létre pontokat a műholdkép vagy GPS nyomvonal alapján,\nhogy a vonal az út középvonalát kövesse. Ha az utad keresztez egy másik utat, kapcsold\nössze őket a metszéspontjukra kattintva. Ha kész vagy a rajzolással, kattints duplán,\nvagy nyomj a billentyűzeten egy 'Enter'-t.\n",
             "gps": "#GPS\n\nAz összegyűjtött GPS nyomvonalak hasznos adatok az OpenStreetMap számára. Ez a szerkesztő\ntámogatja a helyi nyomvonalakat - `.gpx` fájlok a saját gépeden. Ezeket a\nGPS nyomvonalakat begyűjtheted jó pár okostelefon alkalmazással, vagy\nszemélyi GPS eszközökkel.\n\nTovábbi információkért, hogy hogy kell GPS felmérést végezni, olvasd el a\n[Térképezés okostelefonnal, GPS-szel, vagy papíron](http://learnosm.org/en/mobile-mapping/) cikket.\n\nHogy egy GPX sávot térképezéshez használj, fogd és vidd a GPX fájlt a térképszerkesztőre. Ha felismeri a program, akkor hozzáadásra kerül a térképre, mint egy fényes lila\nvonal. Kattints a „Térképadatok” menüre jobb oldalt a bekapcsoláshoz, kikapcsoláshoz vagy közelítéshez a GPX-vezérelt rétegen.\n\nA GPX sáv nem kerül közvetlen feltöltésre az OpenStreetMapbe - a legjobb módszer a használatára az,\nhogy rajzolsz a térképre, és az új elemek felviteléhez segítségként használod,\nmajd [feltöltöd az OpenStreetMapbe](http://www.openstreetmap.org/trace/create),\nhogy mások is használni tudják.\n",
             "imagery": "# Légifelvétel\n\nA légifelvétel a térképezés egyik fontos forrása. A repülőgépes ortofotók, műholdképek és szabadon összeállított források kombinációja rendelkezésre áll a szerkesztőben a bal oldali menü „Háttérbeállítások” gombjára kattintva.\n\nAlapértelmezésként a [Bing Maps](http://www.bing.com/maps/) műholdkép réteg jelenik meg a szerkesztőben, de ahogy új helyekre görgeted a térképet, új források jelennek meg. Néhány országban, mint az Egyesül Államok, Franciaország, vagy Dánia nagyon jó minőségű légifelvételek érhetőek el egyes területeken.\n\nA légifelvételek gyakran el vannak csúszva a valósághoz képest, a légifelvétel szolgáltatók hibájából. Ha látsz egy csomó utat eltolódva a háttértől, ne húzd őket rögtön a háttérképhez. Ehelyett igazítsd úgy a háttérképet, hogy a meglévő adatok illeszkedjenek rá. Ehhez kattints a Háttérbeállítások menü „Elcsúszás korrigálása” gombjára.\n",
                 "add_playground": "A *területeket* különféle elemek – pl. tavak, épületek vagy lakóterüetek – határainak megjelölésére használjuk.{br}Arra is használhatók, hogy részletesebben jelenítsünk meg olyan elemeket, amelyeket rendesen esetleg csak pontként rajzolnánk föl. **Egy új terület fölrajzolásához kattints a {button} Terület gombra.**",
                 "start_playground": "Adjuk hozzá ezt a játszóteret a térképhez úgy, hogy rajzolunk belőle egy területet. Területeket úgy rajzolunk, hogy *pontokat* helyezünk el az elem külső pereme mentén. **A kezdő pont elhelyezéséhez kattints vagy üsd le a szóközt a játszótér valamelyik sarkánál.**",
                 "continue_playground": "A terület rajzolását úgy folytathatod, hogy további pontokat teszel a játszótér szélére. Helyes dolog összekapcsolni a területet a meglévő gyalogutakkal.{br}Tipp: Az Alt billentyű lenyomva tartásával megakadályozhatjuk, hogy a pontok más elemekhez kapcsolódjanak. **Folytasd a játszótér területének megrajzolását!**",
                 "add_playground": "A *területeket* különféle elemek – pl. tavak, épületek vagy lakóterüetek – határainak megjelölésére használjuk.{br}Arra is használhatók, hogy részletesebben jelenítsünk meg olyan elemeket, amelyeket rendesen esetleg csak pontként rajzolnánk föl. **Egy új terület fölrajzolásához kattints a {button} Terület gombra.**",
                 "start_playground": "Adjuk hozzá ezt a játszóteret a térképhez úgy, hogy rajzolunk belőle egy területet. Területeket úgy rajzolunk, hogy *pontokat* helyezünk el az elem külső pereme mentén. **A kezdő pont elhelyezéséhez kattints vagy üsd le a szóközt a játszótér valamelyik sarkánál.**",
                 "continue_playground": "A terület rajzolását úgy folytathatod, hogy további pontokat teszel a játszótér szélére. Helyes dolog összekapcsolni a területet a meglévő gyalogutakkal.{br}Tipp: Az Alt billentyű lenyomva tartásával megakadályozhatjuk, hogy a pontok más elemekhez kapcsolódjanak. **Folytasd a játszótér területének megrajzolását!**",
-                "finish_playground": "Fejezd be a területet az Enter megnyomásával, vagy újra az első elemre kattintással. **Fejezd be a játszótér területének megrajzolását.**",
+                "finish_playground": "Fejezd be a területet az Enter megnyomásával, vagy újra az első vagy utolsó elemre kattintással. **Fejezd be a játszótér területének megrajzolását.**",
                 "search_playground": "**Keresd meg a következőt: {preset}!**",
                 "choose_playground": "**Válaszd ki a listából a következőt: {preset}.**",
                 "add_field": "Ennek a játszótérnek nincs hivatalos neve, úgyhogy a Név mezőt üresen hagyjuk.{br}Ellenben hozzáadhatunk néhány további információt a Leírás mezőben. **Nyisd meg a Mező hozzáadása listát!**",
                 "search_playground": "**Keresd meg a következőt: {preset}!**",
                 "choose_playground": "**Válaszd ki a listából a következőt: {preset}.**",
                 "add_field": "Ennek a játszótérnek nincs hivatalos neve, úgyhogy a Név mezőt üresen hagyjuk.{br}Ellenben hozzáadhatunk néhány további információt a Leírás mezőben. **Nyisd meg a Mező hozzáadása listát!**",
                 "rightclick_intersection": "Az utolsó valódi utca a(z) {street1}, így ennél a kereszteződésnél *szétválaszthatjuk* a(z) {street2} utcát, és eltávolíthatunk mindent, ami fölötte van. **Kattints a jobb gombbal a kereszteződést jelentő pontra!**",
                 "split_intersection": "**A(z) {street} szétválasztásához kattints a(z) {button} gombra.**",
                 "retry_split": "Nem kattintottál rá a Szétválasztás gombra. Próbáld meg újra!",
                 "rightclick_intersection": "Az utolsó valódi utca a(z) {street1}, így ennél a kereszteződésnél *szétválaszthatjuk* a(z) {street2} utcát, és eltávolíthatunk mindent, ami fölötte van. **Kattints a jobb gombbal a kereszteződést jelentő pontra!**",
                 "split_intersection": "**A(z) {street} szétválasztásához kattints a(z) {button} gombra.**",
                 "retry_split": "Nem kattintottál rá a Szétválasztás gombra. Próbáld meg újra!",
-                "did_split_multi": "Remek! A(z) {street1} két részre van vágva. A felső része eltávolítható. **Kattints a {street2} felső részére a kijelöléséhez.**",
+                "did_split_multi": "Szép munka! {street1} ketté lett vágva. A felső darab eltávolítható. **A kijelöléshez kattints a {street2} felső részére.**",
                 "did_split_single": "**Kattints a {street2} felső részére, hogy kijelöld.**",
                 "multi_select": "A(z) {selected} ki van jelölve. Jelöljük ki a következőt is: {other1}. Több dolog kijelöléséhez kattintsunk a Shift billentyű lenyomva tartása mellett. **Kattints a Shift billentyű nyomva tartásával a következőre: {other2}**",
                 "multi_rightclick": "Nagyon jó! Most mindkét vonal ki van jelölve. **A szerkesztési menü megjelenítéséhez kattints valamelyik vonalra a jobb gombbal.**",
                 "did_split_single": "**Kattints a {street2} felső részére, hogy kijelöld.**",
                 "multi_select": "A(z) {selected} ki van jelölve. Jelöljük ki a következőt is: {other1}. Több dolog kijelöléséhez kattintsunk a Shift billentyű lenyomva tartása mellett. **Kattints a Shift billentyű nyomva tartásával a következőre: {other2}**",
                 "multi_rightclick": "Nagyon jó! Most mindkét vonal ki van jelölve. **A szerkesztési menü megjelenítéséhez kattints valamelyik vonalra a jobb gombbal.**",
                 "start": "Kezdhetsz térképezni!"
             }
         },
                 "start": "Kezdhetsz térképezni!"
             }
         },
+        "shortcuts": {
+            "title": "Gyorsbillentyűk",
+            "key": {
+                "alt": "Alt",
+                "backspace": "Backspace",
+                "cmd": "Cmd",
+                "ctrl": "Ctrl",
+                "delete": "Delete",
+                "del": "Del",
+                "end": "End",
+                "enter": "Enter",
+                "esc": "Esc",
+                "home": "Home",
+                "option": "Option",
+                "pause": "Pause",
+                "pgdn": "PgDn",
+                "pgup": "PgUp",
+                "return": "Enter",
+                "shift": "Shift",
+                "space": "Szóköz"
+            },
+            "gesture": {
+                "drag": "húzás"
+            },
+            "or": "vagy",
+            "browsing": {
+                "title": "Böngészés",
+                "navigation": {
+                    "title": "Navigáció",
+                    "pan": "Térkép úsztatása",
+                    "pan_more": "Térkép úsztatása egy képernyőnivel",
+                    "zoom": "Nagyítás / kicsinyítés",
+                    "zoom_more": "Jelentős nagyítás / kicsinyítés"
+                },
+                "help": {
+                    "title": "Súgó",
+                    "help": "Súgó/dokumentáció megjelenítése",
+                    "keyboard": "Gyorsbillentyűk megjelenítése"
+                },
+                "display_options": {
+                    "title": "Megjelenítési beállítások",
+                    "background": "Háttérbeállítások megjelenítése",
+                    "background_switch": "Visszaváltás a legutóbbi háttérre",
+                    "map_data": "Térkép adatbeállítások megjelenítése",
+                    "fullscreen": "Teljes képernyős módba váltás",
+                    "wireframe": "Drótváz mód átkapcsolása",
+                    "minimap": "Minitérkép átkapcsolása"
+                },
+                "selecting": {
+                    "title": "Elemek kiválasztása",
+                    "select_one": "Egyetlen elem kiválasztása",
+                    "select_multi": "Több elem kiválasztása",
+                    "lasso": "Kiválasztási lasszó rajzolása az elemek köré"
+                },
+                "with_selected": {
+                    "title": "A kiválasztott elemmel",
+                    "infobox": "Infó / mérési doboz átkapcsolása",
+                    "edit_menu": "Menüszerkesztés átkapcsolása"
+                },
+                "vertex_selected": {
+                    "title": "A kiválasztott ponttal",
+                    "previous": "Ugrás az előző pontra",
+                    "next": "Ugrás a következő pontra",
+                    "first": "Ugrás az első pontra",
+                    "last": "Ugrás az utolsó pontra",
+                    "change_parent": "Szülő út cseréje"
+                }
+            },
+            "editing": {
+                "title": "Szerkesztés",
+                "drawing": {
+                    "title": "Rajzolás",
+                    "add_point": "„Pont hozzáadás” mód",
+                    "add_line": "„Vonal hozzáadás” mód",
+                    "add_area": "„Terület hozzáadás” mód",
+                    "place_point": "Helyezz el egy pontot",
+                    "disable_snap": "Tartsd a pont illesztés kikapcsolásához",
+                    "stop_line": "Fejezd be a vonal vagy terület rajzolását"
+                },
+                "operations": {
+                    "title": "Műveletek",
+                    "continue_line": "Vonal folytatása a kiválasztott ponttól",
+                    "merge": "Kiválasztott elemek összevonása (egyesítése)",
+                    "disconnect": "Elemek szétválasztása a kiválasztott pontnál",
+                    "split": "Vonal kettéválasztása a kiválasztott pontnál",
+                    "reverse": "Vonal megfordítása",
+                    "move": "Kiválasztott elemek mozgatása",
+                    "rotate": "Kiválasztott elemek forgatása",
+                    "orthogonalize": "Vonal egyenesítése / Terület sarkainak derékszögesítése",
+                    "circularize": "Zárt vonal vagy terület körvonalasítása",
+                    "reflect_long": "Elemek tükrözése a hosszanti tengelyre",
+                    "reflect_short": "Elemek tükrözése az oldalirányú tengelyre",
+                    "delete": "Kiválasztott elemek törlése"
+                },
+                "commands": {
+                    "title": "Parancsok",
+                    "copy": "Kiválasztott elemek másolása",
+                    "paste": "Másolt elemek beillesztése",
+                    "undo": "A legutóbbi művelet visszavonása",
+                    "redo": "A legutóbbi művelet újra",
+                    "save": "Módosítások mentése"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                     "label": "SSID (hálózatnév)"
                 },
                 "kerb": {
                     "label": "SSID (hálózatnév)"
                 },
                 "kerb": {
-                    "label": "Járdaszegélyrámpa"
+                    "label": "Járdaszegély"
                 },
                 "lamp_type": {
                     "label": "Típus"
                 },
                 "lamp_type": {
                     "label": "Típus"
                 "maxstay": {
                     "label": "Leghosszabb várakozási idő"
                 },
                 "maxstay": {
                     "label": "Leghosszabb várakozási idő"
                 },
+                "maxweight": {
+                    "label": "Súlykorlátozás"
+                },
                 "mtb/scale": {
                     "label": "Mountainbike nehézség",
                     "options": {
                 "mtb/scale": {
                     "label": "Mountainbike nehézség",
                     "options": {
                     "name": "Villanyszerelő",
                     "terms": "Villanyszerelő"
                 },
                     "name": "Villanyszerelő",
                     "terms": "Villanyszerelő"
                 },
+                "craft/electronics_repair": {
+                    "name": "Elektronikai szerviz",
+                    "terms": "eltronikai,szerviz,javító,bontó"
+                },
                 "craft/gardener": {
                     "name": "Kertész",
                     "terms": "Melegházi termelő, bolgárkertész"
                 "craft/gardener": {
                     "name": "Kertész",
                     "terms": "Melegházi termelő, bolgárkertész"
                     "name": "Kerékpárút",
                     "terms": "Bicikliút, bringaút"
                 },
                     "name": "Kerékpárút",
                     "terms": "Bicikliút, bringaút"
                 },
+                "highway/elevator": {
+                    "name": "Felvonó",
+                    "terms": "lift"
+                },
                 "highway/footway": {
                     "name": "Gyalogút",
                     "terms": "Járda"
                 "highway/footway": {
                     "name": "Gyalogút",
                     "terms": "Járda"
                     "name": "Régiségkereskedés",
                     "terms": "antikvitás, antikvárium, ószeres"
                 },
                     "name": "Régiségkereskedés",
                     "terms": "antikvitás, antikvárium, ószeres"
                 },
+                "shop/appliance": {
+                    "name": "Háztartási gép üzlet",
+                    "terms": "háztartási,gép,készülék,nagygép,kisgép"
+                },
                 "shop/art": {
                     "name": "Műalkotásbolt",
                     "terms": "művészbolt"
                 "shop/art": {
                     "name": "Műalkotásbolt",
                     "terms": "művészbolt"
index f0f961e1cc8d303d5e7ec490b7d8a6a0d627792e..930d748f2621e75aecafa7fbb05f7c0f7ea4cac4 100644 (file)
         },
         "help": {
             "title": "Օգնութիւն",
         },
         "help": {
             "title": "Օգնութիւն",
-            "help": "# Ձեռնարկ\n\nՍա [ՕփենՍթրիթՄէփ](http://www.openstreetmap.org/)֊ի խմբագրիչ է՝ ազատ եւ խմբարուող աշխարհի քարտէզ։ Կարող ես օգտագործել այն քո տեղանքում փոփոխութիւններ եւ աւելացումներ կատարելու համար, դարձնելով աշխարհի բաց քարտէզը բոլորի համար աւելի կիրառելի։\n\nՔո արած փոփոխութիւնները տեսանելի են լինելու բոլորին, ով օգտագորթում է ՕփենՍթրիթՄէփ քարտէզը։ Խմբարելու համար, պէտք է\n[մուտք գործել](https://www.openstreetmap.org/login).\n\n[iD խմբագրիչը](http://ideditor.com/) միասնական նախագիծ է, որի [ելատեքստը հասանելի է Գիտհաբում](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Խմբագրելն ու Պահելը\n\nԱյս խմբագրիչը նախատեսուած է առցանց աշխատելու համար, եւ դուք օգտւում ենք նրանով հիմա վեբ կայքի միջոցով։\n\n### Յատկութիւններ ընտրելը\n\nՔարտէզի յատկութիւն՝ օրինակ ճանապարհ, կամ հետաքրքրութեան կէտ ընտրելու համար, կտացրու այն քարտէզի վրայ։ Դա լուսաշեշտելու է ընտրուաթ յատկութիւնը, բացելու է դրա մասին մանրամասներով վահանակ, եւ ցուցադրելու է ցանկ՝ ինչ է հնարաւոր անել այդ յատկութեան հետ։\n\nՄի քանի յատկութիւն ընտրելու համար, պահիր սեղմած 'Shift' ստեղնը։ Յետոյ կամ կտացրու այն յատկութիւններն, որ ուզում ես ընտրել, կամ քաշիր քարտէզի վրայով, ուղղանկիւն նկարելու համար։ Այսպէս գծելու ես ուղղանկիւն, եւ ընտրելու ես դրա բոլոր կէտերը։\n\n### Խմբագրումներ պահելը\n\nԱրուածդ փոփոխութիւնները (ճանապարհների, շէնքերի, եւ այլն փոփոխութիւնները) պահւում են համակարգչիդ յիշողութեան մէջ, քանի դեռ վերբեռնուած չեն սպասարկիչ։ Մի անհանգստացիր, եթէ սխալ ես արել՝ կարող ես հետարկել փոփոխութիւններդ հետարկելու ստեղնը սեղմելով, եւ վերարկել՝ վերարկելու ստեղնի օգնութեամբ։\n\nԿտացրու «Պահել» խմբագրումների խումբ աւարտելու համար՝ օրինակ, եթէ աւարտել ես զբօսայգու տիրոյթ եւ ուզում ես սկսել նոր տիրոյթ։ Հնարաւորութիւն ես ունենալու վերանայել փոփոխութիւններդ, եւ խմբագրիչը օգտակար առաջարկութիւններ եւ զգուշացումներ է անելու, եթէ ինչ֊որ բան փոփոխութիւններիդ մէջ կասկածելի թուայ։\n\nԵթէ ամէնը լաւ է, կարող ես կարճ մեկնաբանութիւն թողնել, բացատրելով ինչ ես արել, եւ կտացնել «Պահել» կրկին, վերբեռնելու փոփոխութիւնները  [OpenStreetMap.org](http://www.openstreetmap.org/), որտեղ դրանք կը դառնան տեսանելի բոլոր այլ օգտուողներին, որպէսզի իրենք իրենց հերթին կարողանան մասնակցել եւ լաւացնել վրայից։\n\nԵթէ չես հասցնում աւարտել խմբագրումները, կարող ես թողնել խմբագրիչի պատուհան, իսկ յետոյ երբ վերադառնաս նոյն համակարգչին եւ զննիչին, խմբագրիչիչը կառաջարկի վերականգնել արուածդ աշխատանքը։\n\n### Խմբագրիչի օգտագործումը\n\nՍտեղնաշարի կրճատների ցանկը հասանելի է [այստեղ](http://wiki.openstreetmap.org/wiki/ID/Shortcuts)։\n"
+            "help": "# Ձեռնարկ\n\nՍա [ՕփենՍթրիթՄէփ](http://www.openstreetmap.org/)֊ի խմբագրիչ է՝ ազատ եւ խմբարուող աշխարհի քարտէզ։ Կարող ես օգտագործել այն քո տեղանքում փոփոխութիւններ եւ աւելացումներ կատարելու համար, դարձնելով աշխարհի բաց քարտէզը բոլորի համար աւելի կիրառելի։\n\nՔո արած փոփոխութիւնները տեսանելի են լինելու բոլորին, ով օգտագորթում է ՕփենՍթրիթՄէփ քարտէզը։ Խմբարելու համար, պէտք է\n[մուտք գործել](https://www.openstreetmap.org/login).\n\n[iD խմբագրիչը](http://ideditor.com/) միասնական նախագիծ է, որի [ելատեքստը հասանելի է Գիտհաբում](https://github.com/openstreetmap/iD).\n"
         },
         "intro": {
             "graph": {
         },
         "intro": {
             "graph": {
index 95d636eb350b04232f8cec3d77e3bf5eed8a439e..af39ca5b40a17f706155c987f6f13778e9b91c97 100644 (file)
         "help": {
             "title": "Bantuan",
             "help": "# Bantuan\n\nIni adalah penyunting untuk [OpenStreetMap](http://www.openstreetmap.org/),\npeta dunia yang gratis dan dapat disunting. Anda dapat menggunakannya\nuntuk menambah dan memperbarui data di area Anda, membuat peta dunia\nbersumber dan berdata terbuka lebih baik untuk semua orang.\n\nSuntingan yang Anda buat di peta ini akan terlihat oleh semua pengguna\nOpenStreetMap. Untuk membuat suntingan, Anda perlu\n[log in](https://www.openstreetmap.org/login).\n\n[iD editor](http://ideditor.com/) adalah proyek kerja sama dengan [source\ncode available on GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Bantuan",
             "help": "# Bantuan\n\nIni adalah penyunting untuk [OpenStreetMap](http://www.openstreetmap.org/),\npeta dunia yang gratis dan dapat disunting. Anda dapat menggunakannya\nuntuk menambah dan memperbarui data di area Anda, membuat peta dunia\nbersumber dan berdata terbuka lebih baik untuk semua orang.\n\nSuntingan yang Anda buat di peta ini akan terlihat oleh semua pengguna\nOpenStreetMap. Untuk membuat suntingan, Anda perlu\n[log in](https://www.openstreetmap.org/login).\n\n[iD editor](http://ideditor.com/) adalah proyek kerja sama dengan [source\ncode available on GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Menyunting & Menyimpan\n\nPenyunting dirancang untuk bekerja secara daring, dan Anda mengaksesnya\nmelalui situs web sekarang.\n\n### Memilih Fitur\n\nUntuk memilih fitur peta, seperti jalan atau titik ketertarikan, klik\npada fitur di peta. Hal ini akan membuat fitur yang terpilih lebih cerah, membuka panel\nberisi perinciannya, dan menampilkan menu berisi hal-hal yang Anda dapat lakukan dengan fitur tersebut.\n\nUntuk memilih beberapa fitur, tahan tombol 'Shift'. Lalu klik pada\nfitur yang mau dipilih, atau geser pada peta untuk menggambar persegi panjang.\nIni akan menggambar sebuah kotak dan memilih semua titik di dalamnya.\n\n### Menyimpan Suntingan\n\nSaat Anda membuat perubahan seperti menyunting jalan, bangunan, dan tempat, perubahan ini\ndisimpan secara lokal sampai Anda menyimpan ke server. Jangan khawatir jika Anda\nmembuat kesalahan - Anda dapat membatalkan perubahan dengan menekan tombol undo, dan mengembalikan\nperubahan dengan menekan tombol redo.\n\nKlik 'Simpan' untuk menyelesaikan sekelompok perubahan - seperti, jika Anda telah melengkapi\nsebuah area di kota dan akan memulai di area baru lain. Anda memiliki kesempatan\nuntuk meninjau kembali apa yang telah dilakukan, dan penyunting akan memberikan saran berguna\ndan peringatan jika sesuatu terkesan janggal dengan perubahan tersebut.\n\nJika semua terlihat baik, Anda dapat memasukkan penjelasan pendek mengenai perubahan\nyang Anda buat, dan klik 'Simpan' lagi untuk mengirim perubahan\nke [OpenStreetMap.org](http://www.openstreetmap.org/), yang akan terlihat\noleh seluruh pengguna dan tersedia bagi yang lain untuk dibangun dan diperbaiki.\n\nJika Anda tidak bisa menyelesaikan suntingan dalam sekali waktu, Anda dapat meninggalkan jendela penyunting\ndan kembali (pada peramban dan komputer yang sama), dan aplikasi penyunting akan menawarkan untuk mengembalikan kembali apa yang sudah dikerjakan.\n\n### Menggunakan penyunting\n\nDaftar shortcut untuk keyboard tersedia [here](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n",
             "roads": "# Jalan\n\nAnda dapat membuat, memperbaiki, dan menghapus jalan dengan penyunting ini. Jalan ada banyak\njenis: jalan setapak, jalan raya, jalan sepeda, dan sebagainya - segmen yang sering dilalui\nseharusnya dapat dipetakan.\n\n### Memilih\n\nKlik pada jalan untuk memilihnya. Sebuah garis tepi akan terlihat, dengan\nmenu peralatan kecil pada peta dan sidebar berisi informasi lebih tentang jalan tersebut.\n\n### Mengubah\n\nSeringkali Anda akan melihat jalan-jalan yang tidak segaris dengan gambar di belakangnya\natau dengan trek GPS. Anda dapat mengatur jalan-jalan ini agar mereka berada\npada posisi yang tepat.\n\nPertama, klik pada jalan yang Anda ingin ubah. Ini akan menyorotinya dan menampilkan\ntitik kendali di sepanjang jalan yang dapat Anda geser ke letak yang lebih baik. Jika\nAnda ingin menambah titik kendali untuk memerincinya, klik dua kali bagian\ndari jalan tanpa titik, dan titik kendali akan ditambah.\n\nJika jalan itu terhubung dengan jalan lain, tetapi tidak terhubung dengan baik\npada peta, Anda bisa menggeser salah satu titik kendalinya ke jalan lain tersebut untuk\nmenghubungkannya. Memastikan jalan terhubung penting untuk peta dan sangat diperlukan untuk memberikan arah berkendara.\n\nAnda dapat klik alat 'Move' atau tekan tombol pintasan 'M' untuk memindahkan keseluruhan jalan sekaligus,\nlalu klik lagi untuk menyimpan pemindahan tersebut.\n\n### Menghapus\n\nJika sebuah jalan seluruhnya salah - Anda dapat melihat bahwa itu tidak ada pada citra satelit\ndan telah mengamatinya langsung bahwa itu memang tidak ada - Anda dapat menghapusnya,\nuntuk menghilangkannya dari peta. Berhati-hatilah saat menghapus fitur -\nseperti suntingan lain, hasilnya akan terlihat oleh semua orang dan citra satelit\nseringkali sudah usang, sehingga jalan mungkin baru dibangun.\n\nAnda dapat menghapus jalan dengan klik jalan tersebut untuk memilihnya,\nlalu klik ikon tong sampah atau menekan tombol 'Delete'.\n\n### Menciptakan\n\nMenemukan tempat yang seharusnya ada jalan tapi tidak ada? Pilih ikon 'Line'\npada kiri-atas penyunting atau tekan tombol pintasan '2' untuk mulai\nmenggambar garis.\n\nKlik pada bagian awal jalan untuk mulai menggambar. Jika jalan\nbercabang dari jalan yang sudah ada, mulai dengan klik pada tempat keduanya terhubung.\n\nLalu klik pada titik-titik sepanjang jalan sehingga sesuai alur,\nmenurut citra satelit atau GPS. Jika jalan yang Anda gambar menyeberangi jalan lain,\nhubungkan jalan itu dengan mengeklik pada titik persimpangan. Saat Anda selesai menggambar, klik dua kali\natau tekan 'Return' atau 'Enter' pada papan tik.\n",
             "imagery": "# Citra\n\nCitra foto udara merupakan sumber penting untuk pemetaan. Gabungan dari\npemotretan pesawat, pandangan satelit, dan sumber terhimpun lain tersedia\ndi penyunting pada menu 'Pengaturan Latar' di sebelah kanan.\n\nBiasanya lapisan satelit [Bing Maps](http://www.bing.com/maps/) ditampilkan\ndi penyunting ini, tetapi ketika Anda geser atau perbesar tampilan di suatu wilayah baru,\nsumber baru lain akan tersedia. Di beberapa negara, seperti Amerika Serikat,\nPerancis, dan Denmark memiliki citra berkualitas tinggi yang tersedia di beberapa area.\n\nCitra kadang melenceng dari data peta karena ada kesalahan pada\npenyedia data citra. Jika Anda melihat banyak jalan yang bergeser dari latarnya,\njangan serta-merta memindahkan semuanya untuk mencocokkan latar. Justru Anda bisa menyesuaikan\ncitranya agar pas dengan data yang ada dengan mengeklik 'Perbaiki perataan' pada\nbagian bawah Pengaturan Latar.\n",
             "addresses": "# Alamat\n\nAlamat adalah informasi yang paling penting dalam suatu peta.\n\nMeski alamat sering ditampilkan sebagai bagian dari jalan, OpenStreetMap menampilkan alamat sebagai bagian dari bangunan dan tempat-tempat di pinggir jalan.\n\nAnda dapat menambahkan alamat ke tempat-tempat berbentuk garis bangunan atau titik. Data alamat yang tepercaya diperoleh dari survei lapangan atau pengetahuan sendiri - seperti fitur lainnya, Anda tidak diperbolehkan menyalin alamat dari sumber-sumber komersial seperti Google Maps.\n",
             "roads": "# Jalan\n\nAnda dapat membuat, memperbaiki, dan menghapus jalan dengan penyunting ini. Jalan ada banyak\njenis: jalan setapak, jalan raya, jalan sepeda, dan sebagainya - segmen yang sering dilalui\nseharusnya dapat dipetakan.\n\n### Memilih\n\nKlik pada jalan untuk memilihnya. Sebuah garis tepi akan terlihat, dengan\nmenu peralatan kecil pada peta dan sidebar berisi informasi lebih tentang jalan tersebut.\n\n### Mengubah\n\nSeringkali Anda akan melihat jalan-jalan yang tidak segaris dengan gambar di belakangnya\natau dengan trek GPS. Anda dapat mengatur jalan-jalan ini agar mereka berada\npada posisi yang tepat.\n\nPertama, klik pada jalan yang Anda ingin ubah. Ini akan menyorotinya dan menampilkan\ntitik kendali di sepanjang jalan yang dapat Anda geser ke letak yang lebih baik. Jika\nAnda ingin menambah titik kendali untuk memerincinya, klik dua kali bagian\ndari jalan tanpa titik, dan titik kendali akan ditambah.\n\nJika jalan itu terhubung dengan jalan lain, tetapi tidak terhubung dengan baik\npada peta, Anda bisa menggeser salah satu titik kendalinya ke jalan lain tersebut untuk\nmenghubungkannya. Memastikan jalan terhubung penting untuk peta dan sangat diperlukan untuk memberikan arah berkendara.\n\nAnda dapat klik alat 'Move' atau tekan tombol pintasan 'M' untuk memindahkan keseluruhan jalan sekaligus,\nlalu klik lagi untuk menyimpan pemindahan tersebut.\n\n### Menghapus\n\nJika sebuah jalan seluruhnya salah - Anda dapat melihat bahwa itu tidak ada pada citra satelit\ndan telah mengamatinya langsung bahwa itu memang tidak ada - Anda dapat menghapusnya,\nuntuk menghilangkannya dari peta. Berhati-hatilah saat menghapus fitur -\nseperti suntingan lain, hasilnya akan terlihat oleh semua orang dan citra satelit\nseringkali sudah usang, sehingga jalan mungkin baru dibangun.\n\nAnda dapat menghapus jalan dengan klik jalan tersebut untuk memilihnya,\nlalu klik ikon tong sampah atau menekan tombol 'Delete'.\n\n### Menciptakan\n\nMenemukan tempat yang seharusnya ada jalan tapi tidak ada? Pilih ikon 'Line'\npada kiri-atas penyunting atau tekan tombol pintasan '2' untuk mulai\nmenggambar garis.\n\nKlik pada bagian awal jalan untuk mulai menggambar. Jika jalan\nbercabang dari jalan yang sudah ada, mulai dengan klik pada tempat keduanya terhubung.\n\nLalu klik pada titik-titik sepanjang jalan sehingga sesuai alur,\nmenurut citra satelit atau GPS. Jika jalan yang Anda gambar menyeberangi jalan lain,\nhubungkan jalan itu dengan mengeklik pada titik persimpangan. Saat Anda selesai menggambar, klik dua kali\natau tekan 'Return' atau 'Enter' pada papan tik.\n",
             "imagery": "# Citra\n\nCitra foto udara merupakan sumber penting untuk pemetaan. Gabungan dari\npemotretan pesawat, pandangan satelit, dan sumber terhimpun lain tersedia\ndi penyunting pada menu 'Pengaturan Latar' di sebelah kanan.\n\nBiasanya lapisan satelit [Bing Maps](http://www.bing.com/maps/) ditampilkan\ndi penyunting ini, tetapi ketika Anda geser atau perbesar tampilan di suatu wilayah baru,\nsumber baru lain akan tersedia. Di beberapa negara, seperti Amerika Serikat,\nPerancis, dan Denmark memiliki citra berkualitas tinggi yang tersedia di beberapa area.\n\nCitra kadang melenceng dari data peta karena ada kesalahan pada\npenyedia data citra. Jika Anda melihat banyak jalan yang bergeser dari latarnya,\njangan serta-merta memindahkan semuanya untuk mencocokkan latar. Justru Anda bisa menyesuaikan\ncitranya agar pas dengan data yang ada dengan mengeklik 'Perbaiki perataan' pada\nbagian bawah Pengaturan Latar.\n",
             "addresses": "# Alamat\n\nAlamat adalah informasi yang paling penting dalam suatu peta.\n\nMeski alamat sering ditampilkan sebagai bagian dari jalan, OpenStreetMap menampilkan alamat sebagai bagian dari bangunan dan tempat-tempat di pinggir jalan.\n\nAnda dapat menambahkan alamat ke tempat-tempat berbentuk garis bangunan atau titik. Data alamat yang tepercaya diperoleh dari survei lapangan atau pengetahuan sendiri - seperti fitur lainnya, Anda tidak diperbolehkan menyalin alamat dari sumber-sumber komersial seperti Google Maps.\n",
index 81c7edec3345ca236c34afd42471c518b347a853..c6d9329b735a7e47b5dc058c2bee741a7b0bef6d 100644 (file)
         "help": {
             "title": "Aiuto",
             "help": "# Aiuto\n\nQuesto è un editor per [OpenStreetMap](http://www.openstreetmap.org/), la\nmappa del mondo gratuita e modificabile. Puoi usarlo per aggiungere ed aggiornare\ndati nella tua area, creando una mappa del mondo open-source e open-data\nmigliore per tutti.\n\nLe modifiche che fai a questa mappa saranno visibili a chiunque usa\nOpenStreetMap. Per fare una modifica, avrai bisogno di [accedere](https://www.openstreetmap.org/login).\n\n[iD editor](http://ideditor.com/) è un progetto collaborativo il cui [codice\nsorgente è disponibile su GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Aiuto",
             "help": "# Aiuto\n\nQuesto è un editor per [OpenStreetMap](http://www.openstreetmap.org/), la\nmappa del mondo gratuita e modificabile. Puoi usarlo per aggiungere ed aggiornare\ndati nella tua area, creando una mappa del mondo open-source e open-data\nmigliore per tutti.\n\nLe modifiche che fai a questa mappa saranno visibili a chiunque usa\nOpenStreetMap. Per fare una modifica, avrai bisogno di [accedere](https://www.openstreetmap.org/login).\n\n[iD editor](http://ideditor.com/) è un progetto collaborativo il cui [codice\nsorgente è disponibile su GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Modifica & salvataggio\n\nQuesto editor è stato pensato per funzionare principalmente online ed\nanche in questo momento lo stai utilizzando tramite browser web.\n\n### Selezione degli Elementi\n\nPer selezionare un elemento della mappa, come ad esempio una\nstrada o un punto di interesse, clicca su di esso sulla mappa. Questo\nfarà in modo che l'elemento selezionato venga evidenziato, che si apra\nun pannello con i dettagli e che si apra un menu di azioni che è\npossibile fare con l'elemento stesso.\n\nPer selezionare più elementi tenendo premuto il tasto 'Maiusc'; clicca\nsu ogni elemento o trascina il mouse disegnando un riquadro sulla\nmappa. Questo farà sì che tutti gli elementi all'interno del riquadro\nvengano selezionati consentendo di compiere azioni su più elementi\nin una volta sola.\n\n### Salvataggio delle modifiche\n\nQuando si fanno dei cambiamenti, come modifiche alle strade, agli\nedifici e ai luoghi, questi vengono memorizzati localmente fino a che\nnon si effettua il salvataggio sul server. Non preoccuparti se fai un\nerrore, puoi annullare la modifica premendo il tasto 'Annulla' e\nrieffettuare la modifica cliccando sul tasto 'Ripeti'.\n\nSe ad esempio hai completato un'area della città e vuoi iniziare un'altra\narea clicca su 'Salva' e porre fine ad un gruppo di modifiche. Avrai\ncomunque la possibilità di revisionare ciò che hai modificato inoltre\nl'editor fornirà suggerimenti e avvertimenti se qualcosa nelle tue\nmodifiche non sembra andare bene.\n\nSe tutto è a posto puoi aggiungere un piccolo commento per spiegare\nla modifica effettuata e cliccare su 'Salva' di nuovo per caricare le\nmodifiche su [OpenStreetMap.org](http://www.openstreetmap.org/),\ndove saranno visibili a tutti gli utenti e disponibili agli altri per\nconsentire di costruirci sopra o migliorarle ulteriormente.\n\nSe non riesci a finire le modifiche in una seduta, puoi abbandonare la\nfinestra dell'editor e tornarci più tardi (utilizzando lo stesso browser e lo\nstesso computer): l'editor ti offrirà infatti la possibiltà di recuperare il tuo\nlavoro.\n\n### Utilizzo dell'editor\n\n[Qui](http://wiki.openstreetmap.org/wiki/ID/Shortcuts) puoi trovare una lista delle scorciatoie disponibili.\n",
             "roads": "# Strade\n\nE' possibile creare, aggiustare ed eliminare le strade con questo editor. Le strade possono essere di tutti i tipi: percorsi, autostrade, cammini, piste ciclabili o altro. E' possibile mappare ogni segmento calpestabile.\n\n### Selezione\n\nCliccare su una strada per selezionarla. Verranno visualizzati un contorno e un piccolo menu strumenti sulla mappa oltre ad una barra laterale che mostra informazioni dettagliate sulla strada.\n\n### Modifica\n\nVi capiterà spesso di vedere strade non combacianti con le immagini sullo sfondo o con il tracciato GPS. E' possibile allineare queste strada in modo che si trovino nella giusta posizione.\n\nPer prima cosa cliccare sulla strada che si vuole modificare. Questo farà in modo che la strada venga evidenziata e che vengano visualizzati i punti di controllo lungo di essa che possono essere spostati in luoghi più consoni. Se si vuole aggiungere nuovi punti di controllo per aggiungere maggiori dettagli, basta fare doppio clic su parte della strada senza nodi.\n\nSe la strada è connessa ad un'altra strada ma non è ben connessa sulla mappa, è possibile spostare uno di questi punti di controllo sull'altra strada in modo da unirli. E' importante per la mappa che le strade siano correttamente connesse  anche per garantire giuste indicazioni di guida.\n\nE' possibile cliccare sullo strumento 'Sposta' o premere il tasto rapido `M` per muovere l'intera strada in una volta sola. Cliccare nuovamente per memorizzare lo spostamento.\n\n### Eliminizione\n\nSe la strada è completamente sbagliata, ovvero non compare sulle immagini satellitari e non viene rilevata nella realtà, è possibile eliminarla eliminandola dalla mappa. Attenzione ad effettuare questa operazione di eliminazione poiché, come per ogni altra modifica, i risultati vengono visti da tutti. Considera che le immagini satellitari sono spesso vecchie quindi è possibile che la strada sia stata costruita solo di recente.\n\nE' possibile eliminare una strada cliccando prima su di essa per selezionarla e poi sull'icona cestino o premendo il tasto 'Canc' della tastiera.\n\n### Creazione\n\nHai notato che in un punto della mappa dovrebbe esserci una strada ma non c'è ? Clicca sull'incona 'Linea' in alto a sinistra nell'editor o premi il tasto `2` per iniziare a disegnare una linea.\n\nCliccare sull'inizio della strada sulla mappa per iniziare a disegnarla. Se la strada  è unita ad una strada già esistente, iniziare cliccando nel punto dove sono connesse.\n\nQuindi cliccare i nuovi punti lungo la strada in modo che segua il percorso giusto dettato dall'immagine satellitare o dai dati del GPS. Se la strada che stai disegnando attraversa un'altra strada, collegala cliccando sul punto di intersezione. Quando hai finito di disegnare fai doppio clic o premi 'Invio' o 'Enter' sulla tua tastiera.\n",
             "gps": "# GPS\n\nLe tracce provenienti dal GPS sono una sorgente dati fidata per OpenStreetMap. Questo editor\nsupporta i tracciati locali - i file `.gpx` che si trovano sul tuo computer. È possibile raccogliere\nquesto tipo di tracciati GPS con un gran numero di applicazioni per smartphone\no tramite dispositivi GPS personali.\n\nPer informazioni su come effettuare un rilevamento GPS è possibile\nleggere [Mappare con uno smartphone, un GPS o una cartina](http://learnosm.org/en/mobile-mapping/).\n\nPer utilizzare un tracciato GPX al fine di effettuare una mappatura,\ntrascina il file GPX sull'editor di mappe. Se viene riconosciuto verrà\naggiunto alla mappa ed evidenziato tramite una linea violetta. Clicca\nsul menu 'Dati mappa' che si trova sulla sinistra per abilitare,\ndisabilitare o zoomare il livello creato dal file GPX.\n\nIl tracciato GPX non viene caricato direttamente su OpenStreetMap - il\nmodo migliore di utilizzarlo è quello di disegnare sulla mappa usando il\ntracciato come guida per i nuovi elementi che vuoi aggiungere e\n[caricarlo comunque su OpenStreetMap](http://www.openstreetmap.org/trace/create) per renderlo poi\ndisponibile agli altri utenti.\n",
             "imagery": "# Immagini\n\nLe immagini aeree sono un'importante risorsa per la mappatura. Una\ncombinazione di foto aeree, immagini satellitari e risorse liberamente\ncompilate sono disponibili nell'editor nel menu 'Impostazioni dello sfondo'\nsulla destra.\n\nLe immagini predefinite presentate nell'editor sono quelle satellitari di\n[Bing Maps](http://www.bing.com/maps/), ma spostando o ingrandendo\nla mappa in specifiche aree geografiche potranno essere disponibili più\nrisorse. Alcune nazioni, come Stati Uniti, Francia e Danimarca, hanno a\ndisposizione, per alcune aree, immagini ad alta definizione.\n\nLe immagini sono a volte disallineate rispetto ai dati della mappa a causa\ndi errori da parte di chi le fornisce. Se vedi numerose strade spostate\nrispetto alle immagini di sfondo non correggerle tutte subito per farle\nnuovamente combaciare. Puoi invece aggiustare l'allineamento delle immagini\nsullo sfondo in modo da ri-allinearle con i dati esistenti cliccando su\n'Allinea' in fondo al menu.\n",
             "roads": "# Strade\n\nE' possibile creare, aggiustare ed eliminare le strade con questo editor. Le strade possono essere di tutti i tipi: percorsi, autostrade, cammini, piste ciclabili o altro. E' possibile mappare ogni segmento calpestabile.\n\n### Selezione\n\nCliccare su una strada per selezionarla. Verranno visualizzati un contorno e un piccolo menu strumenti sulla mappa oltre ad una barra laterale che mostra informazioni dettagliate sulla strada.\n\n### Modifica\n\nVi capiterà spesso di vedere strade non combacianti con le immagini sullo sfondo o con il tracciato GPS. E' possibile allineare queste strada in modo che si trovino nella giusta posizione.\n\nPer prima cosa cliccare sulla strada che si vuole modificare. Questo farà in modo che la strada venga evidenziata e che vengano visualizzati i punti di controllo lungo di essa che possono essere spostati in luoghi più consoni. Se si vuole aggiungere nuovi punti di controllo per aggiungere maggiori dettagli, basta fare doppio clic su parte della strada senza nodi.\n\nSe la strada è connessa ad un'altra strada ma non è ben connessa sulla mappa, è possibile spostare uno di questi punti di controllo sull'altra strada in modo da unirli. E' importante per la mappa che le strade siano correttamente connesse  anche per garantire giuste indicazioni di guida.\n\nE' possibile cliccare sullo strumento 'Sposta' o premere il tasto rapido `M` per muovere l'intera strada in una volta sola. Cliccare nuovamente per memorizzare lo spostamento.\n\n### Eliminizione\n\nSe la strada è completamente sbagliata, ovvero non compare sulle immagini satellitari e non viene rilevata nella realtà, è possibile eliminarla eliminandola dalla mappa. Attenzione ad effettuare questa operazione di eliminazione poiché, come per ogni altra modifica, i risultati vengono visti da tutti. Considera che le immagini satellitari sono spesso vecchie quindi è possibile che la strada sia stata costruita solo di recente.\n\nE' possibile eliminare una strada cliccando prima su di essa per selezionarla e poi sull'icona cestino o premendo il tasto 'Canc' della tastiera.\n\n### Creazione\n\nHai notato che in un punto della mappa dovrebbe esserci una strada ma non c'è ? Clicca sull'incona 'Linea' in alto a sinistra nell'editor o premi il tasto `2` per iniziare a disegnare una linea.\n\nCliccare sull'inizio della strada sulla mappa per iniziare a disegnarla. Se la strada  è unita ad una strada già esistente, iniziare cliccando nel punto dove sono connesse.\n\nQuindi cliccare i nuovi punti lungo la strada in modo che segua il percorso giusto dettato dall'immagine satellitare o dai dati del GPS. Se la strada che stai disegnando attraversa un'altra strada, collegala cliccando sul punto di intersezione. Quando hai finito di disegnare fai doppio clic o premi 'Invio' o 'Enter' sulla tua tastiera.\n",
             "gps": "# GPS\n\nLe tracce provenienti dal GPS sono una sorgente dati fidata per OpenStreetMap. Questo editor\nsupporta i tracciati locali - i file `.gpx` che si trovano sul tuo computer. È possibile raccogliere\nquesto tipo di tracciati GPS con un gran numero di applicazioni per smartphone\no tramite dispositivi GPS personali.\n\nPer informazioni su come effettuare un rilevamento GPS è possibile\nleggere [Mappare con uno smartphone, un GPS o una cartina](http://learnosm.org/en/mobile-mapping/).\n\nPer utilizzare un tracciato GPX al fine di effettuare una mappatura,\ntrascina il file GPX sull'editor di mappe. Se viene riconosciuto verrà\naggiunto alla mappa ed evidenziato tramite una linea violetta. Clicca\nsul menu 'Dati mappa' che si trova sulla sinistra per abilitare,\ndisabilitare o zoomare il livello creato dal file GPX.\n\nIl tracciato GPX non viene caricato direttamente su OpenStreetMap - il\nmodo migliore di utilizzarlo è quello di disegnare sulla mappa usando il\ntracciato come guida per i nuovi elementi che vuoi aggiungere e\n[caricarlo comunque su OpenStreetMap](http://www.openstreetmap.org/trace/create) per renderlo poi\ndisponibile agli altri utenti.\n",
             "imagery": "# Immagini\n\nLe immagini aeree sono un'importante risorsa per la mappatura. Una\ncombinazione di foto aeree, immagini satellitari e risorse liberamente\ncompilate sono disponibili nell'editor nel menu 'Impostazioni dello sfondo'\nsulla destra.\n\nLe immagini predefinite presentate nell'editor sono quelle satellitari di\n[Bing Maps](http://www.bing.com/maps/), ma spostando o ingrandendo\nla mappa in specifiche aree geografiche potranno essere disponibili più\nrisorse. Alcune nazioni, come Stati Uniti, Francia e Danimarca, hanno a\ndisposizione, per alcune aree, immagini ad alta definizione.\n\nLe immagini sono a volte disallineate rispetto ai dati della mappa a causa\ndi errori da parte di chi le fornisce. Se vedi numerose strade spostate\nrispetto alle immagini di sfondo non correggerle tutte subito per farle\nnuovamente combaciare. Puoi invece aggiustare l'allineamento delle immagini\nsullo sfondo in modo da ri-allinearle con i dati esistenti cliccando su\n'Allinea' in fondo al menu.\n",
                 "words": "Questa guida introdurrà termini e concetti nuovi. Queste novità saranno indicate in *corsivo*.",
                 "mouse": "Puoi usare ogni dispositivo per modificare la mappa, ma questa guida presuppone che tu stia utilizzando un mouse con un pulsante sinistro ed uno destro. **Se vuoi collegare un mouse fallo ora e quindi clicca OK**.",
                 "leftclick": "Quando questo tutorial ti chiede di fare un click si intende con il pulsante sinistro. Su un trackpad può essere un click singolo o un tap con un solo dito. **Clicca col pulsante sinistro {num} volte.**",
                 "words": "Questa guida introdurrà termini e concetti nuovi. Queste novità saranno indicate in *corsivo*.",
                 "mouse": "Puoi usare ogni dispositivo per modificare la mappa, ma questa guida presuppone che tu stia utilizzando un mouse con un pulsante sinistro ed uno destro. **Se vuoi collegare un mouse fallo ora e quindi clicca OK**.",
                 "leftclick": "Quando questo tutorial ti chiede di fare un click si intende con il pulsante sinistro. Su un trackpad può essere un click singolo o un tap con un solo dito. **Clicca col pulsante sinistro {num} volte.**",
-                "rightclick": "Certe volte viene chiesto di fare un click col pulsante destro.  Su un trackpad potrebbe significare control + click o un tap con due dita. La tua tastiera potrebbe avere un tasto 'menu' che funziona come un click destro. **Clicca col pulsante destro {num} volte.**",
+                "rightclick": "Certe volte viene chiesto di fare un click col pulsante destro.  Su un trackpad potrebbe significare control + click o un tap con due dita. La tua tastiera potrebbe avere un tasto 'menù' che funziona come un click destro. **Clicca col pulsante destro {num} volte.**",
                 "chapters": "Ci siamo quasi! Puoi usare i pulsanti in basso per saltare i capitoli in ogni momento o per ricominciare un capitolo se ti trovi in difficoltà. Iniziamo! **Clicca '{next}' per continuare.**"
             },
             "navigation": {
                 "title": "Navigazione",
                 "drag": "L'area principale mostra i dati di OpenStreetMap sopra uno sfondo.{br}Puoi trascinare la mappa premendo il tasto sinistro del mouse e tenendolo premuto mentre sposti il mouse. Puoi anche usare le frecce della tastiera. **Scorri la mappa!**",
                 "zoom": "Puoi aumentare o diminuire l'ingrandimento con la rotellina centrale del mouse o del trackpad, oppure cliccando i pulsanti {plus}/{minus}. **Ingrandisci la mappa!**",
                 "chapters": "Ci siamo quasi! Puoi usare i pulsanti in basso per saltare i capitoli in ogni momento o per ricominciare un capitolo se ti trovi in difficoltà. Iniziamo! **Clicca '{next}' per continuare.**"
             },
             "navigation": {
                 "title": "Navigazione",
                 "drag": "L'area principale mostra i dati di OpenStreetMap sopra uno sfondo.{br}Puoi trascinare la mappa premendo il tasto sinistro del mouse e tenendolo premuto mentre sposti il mouse. Puoi anche usare le frecce della tastiera. **Scorri la mappa!**",
                 "zoom": "Puoi aumentare o diminuire l'ingrandimento con la rotellina centrale del mouse o del trackpad, oppure cliccando i pulsanti {plus}/{minus}. **Ingrandisci la mappa!**",
-                "features": "Viene usata la parola *elemento* per descrivere le cose che appaiono sulla mappa. Qualsiasi cosa presente nel mondo reale può essere mappa come elemento su OpenStreetMap.",
+                "features": "Viene usata la parola *elemento* per descrivere le cose che appaiono sulla mappa. Qualsiasi cosa presente nel mondo reale può essere mappata come elemento su OpenStreetMap.",
                 "points_lines_areas": "Gli elementi della mappa vengono rappresentati con *punti, linee o aree.*",
                 "nodes_ways": "In OpenStreetMap i punti sono chiamati anche *nodi* e le linee e le aree sono chiamate anche *percorsi*.",
                 "click_townhall": "Tutti gli elementi sulla mappa possono essere selezionati cliccando su di essi. **Clicca sul punto per selezionarlo.**",
                 "points_lines_areas": "Gli elementi della mappa vengono rappresentati con *punti, linee o aree.*",
                 "nodes_ways": "In OpenStreetMap i punti sono chiamati anche *nodi* e le linee e le aree sono chiamate anche *percorsi*.",
                 "click_townhall": "Tutti gli elementi sulla mappa possono essere selezionati cliccando su di essi. **Clicca sul punto per selezionarlo.**",
                 "title": "Punti",
                 "add_point": "I *punti* possono essere usati per rappresentare elementi come negozi, ristoranti e monumenti.{br}Indicano un luogo specifico e descrivono cosa vi si trova. **Clicca il {button} Punto per aggiungere un nuovo punto.**",
                 "place_point": "Per mettere il nuovo punto sulla mappa, posiziona il tuo cursore del mouse dove il punto dovrebbe andare, quindi clicca con il bottone sinistro del mouse o premi la barra spaziatrice. **Muovi il puntatore del mouse sopra questo edificio, quindi clicca con il bottone sinistro o premi la barra spaziatrice.**",
                 "title": "Punti",
                 "add_point": "I *punti* possono essere usati per rappresentare elementi come negozi, ristoranti e monumenti.{br}Indicano un luogo specifico e descrivono cosa vi si trova. **Clicca il {button} Punto per aggiungere un nuovo punto.**",
                 "place_point": "Per mettere il nuovo punto sulla mappa, posiziona il tuo cursore del mouse dove il punto dovrebbe andare, quindi clicca con il bottone sinistro del mouse o premi la barra spaziatrice. **Muovi il puntatore del mouse sopra questo edificio, quindi clicca con il bottone sinistro o premi la barra spaziatrice.**",
-                "search_cafe": "Ci sono molti elementi che possono essere rappresentati da un punto. Il punto che hai appena creato è un Bar. **Cerca '{preset}'.**",
+                "search_cafe": "Ci sono molti elementi che possono essere rappresentati da un punto. Il punto che hai appena creato è un bar. **Cerca '{preset}'.**",
                 "choose_cafe": "**Scegli {preset} dalla lista.**",
                 "choose_cafe": "**Scegli {preset} dalla lista.**",
-                "feature_editor": "Ora il punto è marcato come Caffè. Usando l'editor dell'elemento possiamo aggiungere più informazioni sull'elemento stesso.",
+                "feature_editor": "Ora il punto è marcato come bar. Usando l'editor dell'elemento possiamo aggiungere più informazioni sull'elemento stesso.",
                 "add_name": "In OpenStreetMap, tutti i campi sono opzionali, ed è ammesso lasciare un campo vuoto se non si è sicuri.{br}Facciamo finta che tu conosca questo bar, e che sappia come si chiami. **Aggiungi il nome del bar**",
                 "add_name": "In OpenStreetMap, tutti i campi sono opzionali, ed è ammesso lasciare un campo vuoto se non si è sicuri.{br}Facciamo finta che tu conosca questo bar, e che sappia come si chiami. **Aggiungi il nome del bar**",
-                "add_close": "L'editor mantiene automaticamente in memoria tutte le modifiche effettuate. **Quando hai finito di aggiungere il nome, premi Escape, Invio, oppure clicca il pulsante {button} per chiudere l'editor.**",
+                "add_close": "L'editor mantiene automaticamente in memoria tutte le modifiche effettuate. **Quando hai finito di aggiungere il nome, premi Esc, Invio, oppure clicca il pulsante {button} per chiudere l'editor dell'elemento.**",
                 "reselect": "Sovente i punti esistono già, ma hanno errori o sono incompleti. Noi possiamo modificare i punti esistenti. **Clicca per selezionare il bar che hai appena creato.**",
                 "update": "Aggiungiamo qualche dettaglio al bar. Puoi cambiargli nome, aggiungere il tipo di cucina, o aggiungere l'indirizzo. **Cambia le informazioni associate al bar.**",
                 "reselect": "Sovente i punti esistono già, ma hanno errori o sono incompleti. Noi possiamo modificare i punti esistenti. **Clicca per selezionare il bar che hai appena creato.**",
                 "update": "Aggiungiamo qualche dettaglio al bar. Puoi cambiargli nome, aggiungere il tipo di cucina, o aggiungere l'indirizzo. **Cambia le informazioni associate al bar.**",
-                "update_close": "Quando hai finito di modificare le informazioni associate al bar, premi Escape, Invio, oppure clicca il pulsante {button} per chiudere l'editor.",
+                "update_close": "**Quando hai finito di modificare le informazioni associate al bar, premi Esc, Invio, oppure clicca il pulsante {button} per chiudere l'editor dell'elemento.**",
                 "rightclick": "Puoi cliccare con il pulsante destro su qualsiasi elemento per visualizzare il *menù di modifica*, che mostra la lista di tipi di modifiche che si possono effettuare. **Clicca con il pulsante destro per selezionare il punto che hai creato e mostrare il menù di modifica.**",
                 "delete": "Si possono cancellare elementi che non esistono nella realtà.{br}La cancellazione di un elemento da OpenStreetMap lo rimuove dalla mappa che tutti vedono, perciò devi essere sicuro che un elemento non esista veramente prima di cancellarlo. **Clicca sul pulsante {button} per eliminare il punto.**",
                 "undo": "Puoi sempre annullare le modifiche prima di salvarle in OpenStreetMap. **Clicca sul pulsante  {button} per annullare la cancellazione e ripristinare il punto.**",
                 "rightclick": "Puoi cliccare con il pulsante destro su qualsiasi elemento per visualizzare il *menù di modifica*, che mostra la lista di tipi di modifiche che si possono effettuare. **Clicca con il pulsante destro per selezionare il punto che hai creato e mostrare il menù di modifica.**",
                 "delete": "Si possono cancellare elementi che non esistono nella realtà.{br}La cancellazione di un elemento da OpenStreetMap lo rimuove dalla mappa che tutti vedono, perciò devi essere sicuro che un elemento non esista veramente prima di cancellarlo. **Clicca sul pulsante {button} per eliminare il punto.**",
                 "undo": "Puoi sempre annullare le modifiche prima di salvarle in OpenStreetMap. **Clicca sul pulsante  {button} per annullare la cancellazione e ripristinare il punto.**",
             },
             "areas": {
                 "title": "Aree",
             },
             "areas": {
                 "title": "Aree",
-                "add_playground": "*Le aree* sono utilizzate per indicare i contorni degli elementi come ad esempio i laghi, gli edifici e le aree residenziali.{br}Possono anche essere utilizzate per rappresentare in modo più dettagliato elementi che normalmente vengono mappati come punti. **Clicca il pulsante Area {button} per aggiungere una nuova area.**",
-                "start_playground": "Aggiungiamo questo giardino alla mappa disegnandone l'area. Le aree sono disegnate posizionando dei *punti* lungo il bordo esterno dell'elemento. **Clicca o premi la barra spaziatrice per posizionare il punto iniziale su uno dei vertici del giardino.**",
-                "continue_playground": "Continua a disegnare l'area sistemando più punti lungo il bordo del giardino. Si può connettere l'area ai percorsi pedonali esistenti.{br}Suggerimento: Puoi tenere premuto il tasto Alt per impedire ai punti che stai creando di connettersi ad altri elementi. **Continua a disegnare l'area del parco giochi.**",
-                "finish_playground": "Terminate l'area premendo Invio, o cliccando nuovamente sul primo o ultimo nodo. **Conclusione del disegno dell'area del giardino.**",
+                "add_playground": "*Le aree* sono utilizzate per indicare i contorni degli elementi come ad esempio laghi, edifici e aree residenziali.{br}Possono anche essere utilizzate per rappresentare in modo più dettagliato elementi che normalmente vengono mappati come punti. **Clicca il pulsante Area {button} per aggiungere una nuova area.**",
+                "start_playground": "Aggiungiamo questo parco giochi alla mappa disegnandone l'area. Le aree sono disegnate posizionando dei *punti* lungo il bordo esterno dell'elemento. **Clicca o premi la barra spaziatrice per posizionare il punto iniziale su uno dei vertici del parco giochi.**",
+                "continue_playground": "Continua a disegnare l'area sistemando più punti lungo il bordo del parco giochi. Si può connettere l'area ai percorsi pedonali esistenti.{br}Suggerimento: Puoi tenere premuto il tasto Alt per impedire ai punti che stai creando di connettersi ad altri elementi. **Continua a disegnare l'area del parco giochi.**",
+                "finish_playground": "Termina l'area premendo Invio, o cliccando nuovamente sul primo o ultimo nodo. **Finisci di disegnare un'area per il parco giochi.**",
                 "search_playground": "**Cerca '{preset}'.**",
                 "choose_playground": "**Scegli {preset} dalla lista.**",
                 "search_playground": "**Cerca '{preset}'.**",
                 "choose_playground": "**Scegli {preset} dalla lista.**",
-                "add_field": "Questo giardino non ha un nome ufficiale, perciò non aggiungiamo nulla nel campo Name.{br}Aggiungiamo invece qualche altra informazione relativa al giardino nel campo Description. **Apri la lista Aggiungi Campo.**",
+                "add_field": "Questo parco giochi non ha un nome ufficiale, perciò non aggiungiamo nulla nel campo Nome.{br}Aggiungiamo invece qualche altra informazione relativa al parco giochi nel campo Descrizione. **Apri la lista Aggiungi Campo.**",
                 "choose_field": "**Scegli {field} dalla lista.**",
                 "retry_add_field": "Non hai selezionato il campo {field}. Prova ancora.",
                 "describe_playground": "**Aggiungi una descrizione, quindi clicca il bottone {button} per chiudere l'editor dell'elemento.**",
                 "choose_field": "**Scegli {field} dalla lista.**",
                 "retry_add_field": "Non hai selezionato il campo {field}. Prova ancora.",
                 "describe_playground": "**Aggiungi una descrizione, quindi clicca il bottone {button} per chiudere l'editor dell'elemento.**",
                 "intersect": "Clicca o premi spazio per aggiungere altri nodi alla linea.{br}Le strade e molti altri tipi di percorsi, fanno parte di una rete più estesa. È importante che queste linee siano connesse correttamente affinché le applicazioni di navigazione possano funzionare. **Clicca su {name} per creare una intersezione che connetta le due linee.**",
                 "retry_intersect": "La strada deve intersecare {name}. Prova ancora!",
                 "continue_line": "Continua a disegnare la nuova strada. Ricordati che puoi spostare o ingrandire la mappa a piacimento.{br}Quando avrai finito, clicca di nuovo l'ultimo nodo. **Finisci di disegnare la strada.**",
                 "intersect": "Clicca o premi spazio per aggiungere altri nodi alla linea.{br}Le strade e molti altri tipi di percorsi, fanno parte di una rete più estesa. È importante che queste linee siano connesse correttamente affinché le applicazioni di navigazione possano funzionare. **Clicca su {name} per creare una intersezione che connetta le due linee.**",
                 "retry_intersect": "La strada deve intersecare {name}. Prova ancora!",
                 "continue_line": "Continua a disegnare la nuova strada. Ricordati che puoi spostare o ingrandire la mappa a piacimento.{br}Quando avrai finito, clicca di nuovo l'ultimo nodo. **Finisci di disegnare la strada.**",
-                "choose_category_road": "**Seleziona {category} dalla lista**",
+                "choose_category_road": "**Scegli {category} dalla lista.**",
                 "choose_preset_residential": "Esistono molti tipi diversi di strade, ma questa è una residenziale. **Scegli il tipo {preset}.**",
                 "retry_preset_residential": "Non hai selezionato il tipo {preset}. **Clicca qui per scegliere di nuovo.**",
                 "choose_preset_residential": "Esistono molti tipi diversi di strade, ma questa è una residenziale. **Scegli il tipo {preset}.**",
                 "retry_preset_residential": "Non hai selezionato il tipo {preset}. **Clicca qui per scegliere di nuovo.**",
-                "name_road": "**Dai un nome a questa strada, poi premi Escape, Invio o clicca il pulsante {button} per chiudere l'editor degli elementi.**",
+                "name_road": "**Dai un nome a questa strada, poi premi Esc, Invio o clicca il pulsante {button} per chiudere l'editor dell'elemento.**",
                 "did_name_road": "Sembra perfetto! Tra poco impareremo ad aggiornare l'aspetto di un percorso.",
                 "update_line": "Talvolta dovrai alterare l'aspetto di un percorso esistente. Qui abbiamo una strada che non sembra disegnata correttamente.",
                 "add_node": "Possiamo aggiungere qualche nodo al percorso per migliorarne la forma. Un modo per farlo è di cliccare due volte la linea nel punto in cui vuoi aggiungere un nodo. **Clicca due volte la linea per creare un nuovo nodo.**",
                 "start_drag_endpoint": "Quando un percorso è selezionato, puoi spostare un suo nodo cliccando e tenendo premuto il tasto sinistro del mouse mentre trascini. **Trascina l'estremità nel punto in cui le strade dovrebbero intersecarsi.**",
                 "finish_drag_endpoint": "Questo posto sembra andar bene. **Rilascia il tasto sinistro del mouse per terminare lo spostamento.**",
                 "start_drag_midpoint": "Dei piccoli triangoli sono presenti a metà strada tra ogni nodo del percorso. Un ulteriore modo per creare nuovi nodi è quello di trascinare uno di questi triangoli in un'altra posizione. **Trascina un triangolo intermedio per creare un nuovo nodo sul percorso della strada.**",
                 "did_name_road": "Sembra perfetto! Tra poco impareremo ad aggiornare l'aspetto di un percorso.",
                 "update_line": "Talvolta dovrai alterare l'aspetto di un percorso esistente. Qui abbiamo una strada che non sembra disegnata correttamente.",
                 "add_node": "Possiamo aggiungere qualche nodo al percorso per migliorarne la forma. Un modo per farlo è di cliccare due volte la linea nel punto in cui vuoi aggiungere un nodo. **Clicca due volte la linea per creare un nuovo nodo.**",
                 "start_drag_endpoint": "Quando un percorso è selezionato, puoi spostare un suo nodo cliccando e tenendo premuto il tasto sinistro del mouse mentre trascini. **Trascina l'estremità nel punto in cui le strade dovrebbero intersecarsi.**",
                 "finish_drag_endpoint": "Questo posto sembra andar bene. **Rilascia il tasto sinistro del mouse per terminare lo spostamento.**",
                 "start_drag_midpoint": "Dei piccoli triangoli sono presenti a metà strada tra ogni nodo del percorso. Un ulteriore modo per creare nuovi nodi è quello di trascinare uno di questi triangoli in un'altra posizione. **Trascina un triangolo intermedio per creare un nuovo nodo sul percorso della strada.**",
-                "continue_drag_midpoint": "Questa linea sembra molto meglio adesso! Continua a ritoccarla facendo doppio click o trascinando i punti intermedi a che la curva non corrisponderà alla forma della strada. **Quando sei soddisfatto di come è il percorso, clicca OK.**",
+                "continue_drag_midpoint": "Questa linea sembra molto meglio adesso! Continua a ritoccarla facendo doppio click o trascinando i punti intermedi fino a che la curva non corrisponderà alla forma della strada. **Quando sei soddisfatto di come è il percorso, clicca OK.**",
                 "delete_lines": "Le strade che non esistono nella realtà dovrebbero essere eliminate.{br}Qui ad esempio abbiamo una {street} la cui costruzione era stata pianificata dal comune ma che poi non è più stata realizzata. Possiamo migliorare la mappa eliminando i percorsi in più.",
                 "rightclick_intersection": "L'ultima strada esistente è {street1}, perciò *dividiamo* {street2} all'altezza di questa intersezione e rimuoviamo tutto quello che è al di sopra. **Clicca con il tasto destro del mouse il nodo di intersezione.**",
                 "split_intersection": "**Clicca il pulsante {button} per dividere {street}.**",
                 "retry_split": "Non hai cliccato il pulsante Dividi. Prova di nuovo.",
                 "delete_lines": "Le strade che non esistono nella realtà dovrebbero essere eliminate.{br}Qui ad esempio abbiamo una {street} la cui costruzione era stata pianificata dal comune ma che poi non è più stata realizzata. Possiamo migliorare la mappa eliminando i percorsi in più.",
                 "rightclick_intersection": "L'ultima strada esistente è {street1}, perciò *dividiamo* {street2} all'altezza di questa intersezione e rimuoviamo tutto quello che è al di sopra. **Clicca con il tasto destro del mouse il nodo di intersezione.**",
                 "split_intersection": "**Clicca il pulsante {button} per dividere {street}.**",
                 "retry_split": "Non hai cliccato il pulsante Dividi. Prova di nuovo.",
-                "did_split_multi": "Ben fatto! {street1} è ora divisa in due parti. La parte più in alto può essere rimossa. **Clicca nella parte in alto di {street2} per selezionarla.**",
+                "did_split_multi": "Ben fatto! {street1} è ora divisa in due parti. La parte più in alto può essere rimossa. **Clicca la parte superiore di {street2} per selezionarla.**",
                 "did_split_single": "**Clicca nella parte in alto di {street2} per selezionarla.**",
                 "multi_select": "Hai selezionato {selected}. Seleziona anche {other1}. Puoi tenere premuto il tasto Maiuscolo mentre clicchi per selezionare più di un oggetto. **Tieni premuto il tasto Maiuscolo e clicca su {other2}.**",
                 "did_split_single": "**Clicca nella parte in alto di {street2} per selezionarla.**",
                 "multi_select": "Hai selezionato {selected}. Seleziona anche {other1}. Puoi tenere premuto il tasto Maiuscolo mentre clicchi per selezionare più di un oggetto. **Tieni premuto il tasto Maiuscolo e clicca su {other2}.**",
-                "multi_rightclick": "Bene! Entrambe le strade da eliminare sono adesso selezionate. **Clicca col tasto destro su di una delle linee per mostrare il menù di modifica.**",
+                "multi_rightclick": "Bene! Entrambe le strade da eliminare sono adesso selezionate. **Clicca col tasto destro su una delle linee per mostrare il menù di modifica.**",
                 "multi_delete": "**Clicca il pulsante {button} per eliminare le linee in più.**",
                 "retry_delete": "Non hai cliccato il pulsante Cancella. Prova di nuovo.",
                 "play": "Perfetto! Utilizza ciò che ha imparato in questo capitolo per fare delle prove su altri percorsi. **Quando sei pronto per il nuovo capitolo, clicca '{next}'.**"
                 "multi_delete": "**Clicca il pulsante {button} per eliminare le linee in più.**",
                 "retry_delete": "Non hai cliccato il pulsante Cancella. Prova di nuovo.",
                 "play": "Perfetto! Utilizza ciò che ha imparato in questo capitolo per fare delle prove su altri percorsi. **Quando sei pronto per il nuovo capitolo, clicca '{next}'.**"
                 "title": "Edifici",
                 "add_building": "OpenStreetMap è il più grande database degli edifici del mondo.{br}Puoi aiutare a migliorare questo database tracciando gli edifici che mancano. **Clicca il pulsante Area {button} per aggiungere una nuova area.**",
                 "start_building": "Aggiungiamo questa casa alla mappa tracciando il suo perimetro.{br}Gli edifici dovrebbero essere tracciati seguendo il loro aspetto nel modo più preciso possibile. ** Clicca con il mouse o premi spazio per disegnare il nodo iniziale su un angolo dell'edificio.**",
                 "title": "Edifici",
                 "add_building": "OpenStreetMap è il più grande database degli edifici del mondo.{br}Puoi aiutare a migliorare questo database tracciando gli edifici che mancano. **Clicca il pulsante Area {button} per aggiungere una nuova area.**",
                 "start_building": "Aggiungiamo questa casa alla mappa tracciando il suo perimetro.{br}Gli edifici dovrebbero essere tracciati seguendo il loro aspetto nel modo più preciso possibile. ** Clicca con il mouse o premi spazio per disegnare il nodo iniziale su un angolo dell'edificio.**",
-                "continue_building": "Continua ad aggiungere altri nodi per tracciare il perimetro dell'edificio. Ricordati che puoi ingrandire se vuoi, così da aggiungere altri dettagli.{br}Termina l'edificio premendo Invio o cliccando di nuovo sul primo o sull'ultimo nodo. **Finisci di disegnare l'edificio.**",
+                "continue_building": "Continua ad aggiungere altri nodi per tracciare il perimetro dell'edificio. Ricordati che puoi ingrandire se vuoi aggiungere più dettagli.{br}Termina l'edificio premendo Invio o cliccando di nuovo sul primo o sull'ultimo nodo. **Finisci di tracciare l'edificio.**",
                 "retry_building": "Sembra che tu abbia avuto qualche problema nel piazzare i nodi negli angoli dell'edificio. Prova di nuovo!",
                 "choose_category_building": "**Scegli {category} dalla lista.**",
                 "choose_preset_house": "Esistono molti tipi differenti di edificio, ma questa è senza dubbio una casa.{br}Se non sei sicuro sul tipo, va bene anche scegliere semplicemente il tipo generico di edificio. **Scegli il tipo {preset}.**",
                 "retry_building": "Sembra che tu abbia avuto qualche problema nel piazzare i nodi negli angoli dell'edificio. Prova di nuovo!",
                 "choose_category_building": "**Scegli {category} dalla lista.**",
                 "choose_preset_house": "Esistono molti tipi differenti di edificio, ma questa è senza dubbio una casa.{br}Se non sei sicuro sul tipo, va bene anche scegliere semplicemente il tipo generico di edificio. **Scegli il tipo {preset}.**",
-                "close": "**Premi il tasto Escape o clicca il pulsante {button} per chiudere l'editor degli elementi.**",
+                "close": "**Premi il tasto Escape o clicca il pulsante {button} per chiudere l'editor dell'elemento.**",
                 "rightclick_building": "**Clicca con il tasto destro del mouse per selezionare l'edificio che hai creato e mostrare il menù di modifica.**",
                 "rightclick_building": "**Clicca con il tasto destro del mouse per selezionare l'edificio che hai creato e mostrare il menù di modifica.**",
-                "square_building": "La casa che hai appena aggiunto avrà un aspetto migliore se gli angoli saranno retti. **Clicca il pulsante {button} per ortogonalizzare l'aspetto dell'edificio.**",
+                "square_building": "La casa che hai appena aggiunto avrà un aspetto migliore se gli angoli sono retti. **Clicca il pulsante {button} per ortogonalizzare l'aspetto dell'edificio.**",
                 "retry_square": "Non hai cliccato il bottone Ortogonalizza. Prova di nuovo.",
                 "done_square": "Hai visto come gli angoli dell'edificio si sono spostati al loro posto? Impariamo un altro trucchetto.",
                 "add_tank": "Adesso disegneremo questa cisterna di stoccaggio rotonda. **Clicca il pulsante Area {button} per aggiungere una nuova area.**",
                 "start_tank": "Non ti preoccupare, non sarà necessario disegnare un cerchio perfetto, Basta che disegni un'area dentro la cisterna che ne tocchi il bordo. **Clicca con il mouse o premi spazio per aggiungere un nodo sul bordo della cisterna.**",
                 "retry_square": "Non hai cliccato il bottone Ortogonalizza. Prova di nuovo.",
                 "done_square": "Hai visto come gli angoli dell'edificio si sono spostati al loro posto? Impariamo un altro trucchetto.",
                 "add_tank": "Adesso disegneremo questa cisterna di stoccaggio rotonda. **Clicca il pulsante Area {button} per aggiungere una nuova area.**",
                 "start_tank": "Non ti preoccupare, non sarà necessario disegnare un cerchio perfetto, Basta che disegni un'area dentro la cisterna che ne tocchi il bordo. **Clicca con il mouse o premi spazio per aggiungere un nodo sul bordo della cisterna.**",
-                "continue_tank": "Aggiungi qualche altro nodo sul bordo. Il cerchio verrà creato attorno ai nodi disegnati.{br}Finisci l'area premendo Invio, o cliccando di nuovo sul primo o sull'ultimo nodo. **Finisci di tracciare la cisterna.**",
+                "continue_tank": "Aggiungi qualche altro nodo sul bordo. Il cerchio verrà creato attorno ai nodi disegnati.{br}Finisci l'area premendo Invio o cliccando di nuovo sul primo o sull'ultimo nodo. **Finisci di tracciare il serbatoio.**",
                 "search_tank": "**Cerca il termine '{preset}'.**",
                 "choose_tank": "**Scegli {preset} dalla lista.**",
                 "rightclick_tank": "**Clicca con il tasto destro del mouse la cisterna creata per mostrare il menù di modifica.**",
                 "search_tank": "**Cerca il termine '{preset}'.**",
                 "choose_tank": "**Scegli {preset} dalla lista.**",
                 "rightclick_tank": "**Clicca con il tasto destro del mouse la cisterna creata per mostrare il menù di modifica.**",
                 "start": "Inizia a mappare!"
             }
         },
                 "start": "Inizia a mappare!"
             }
         },
+        "shortcuts": {
+            "title": "Scorciatoie da tastiera",
+            "tooltip": "Mostra le scorciatoie da tastiera",
+            "key": {
+                "alt": "Alt",
+                "backspace": "← Backspace",
+                "cmd": "Cmd",
+                "ctrl": "Ctrl",
+                "delete": "Canc",
+                "del": "Canc",
+                "end": "Fine",
+                "enter": "Invio",
+                "esc": "Esc",
+                "home": "Inizio",
+                "option": "option",
+                "pause": "Pausa",
+                "pgdn": "Pag",
+                "pgup": "Pag",
+                "return": "Invio",
+                "shift": "Maiusc",
+                "space": "Spazio"
+            },
+            "gesture": {
+                "drag": "trascina"
+            },
+            "or": "-o-",
+            "browsing": {
+                "title": "Navigando",
+                "navigation": {
+                    "title": "Navigazione",
+                    "pan": "Scorrere la mappa",
+                    "pan_more": "Scorrere la mappa di una schermata",
+                    "zoom": "Ingrandisci / Rimpicciolisci",
+                    "zoom_more": "Ingrandisci / Rimpicciolisci molto"
+                },
+                "help": {
+                    "title": "Aiuto",
+                    "help": "Mostra la documentazione",
+                    "keyboard": "Mostra scorciatoie da tastiera"
+                },
+                "display_options": {
+                    "title": "Mostra opzioni",
+                    "background": "Mostra opzioni sfondo",
+                    "background_switch": "Ritorna all'ultimo sfondo",
+                    "map_data": "Mostra opzioni dati mappa",
+                    "fullscreen": "Entra in modalità a tutto schermo",
+                    "wireframe": "Commuta modalità \"fil di ferro\"",
+                    "minimap": "Commuta minimappa"
+                },
+                "selecting": {
+                    "title": "Selezione elementi",
+                    "select_one": "Seleziona un solo elemento",
+                    "select_multi": "Seleziona più elementi",
+                    "lasso": "Disegna un lazo intorno agli elementi da selezionare"
+                },
+                "with_selected": {
+                    "title": "Con l'elemento selezionato",
+                    "infobox": "Commuta riquadro info / misura",
+                    "edit_menu": "Commuta il menù edit"
+                },
+                "vertex_selected": {
+                    "title": "con il nodo selezionato",
+                    "previous": "Passa al nodo precedente",
+                    "next": "Passa al nodo successivo",
+                    "first": "Passa al primo nodo",
+                    "last": "Passa all'ultimo nodo"
+                }
+            },
+            "editing": {
+                "title": "Modificando",
+                "drawing": {
+                    "title": "Disegnando",
+                    "add_point": "modo 'aggiungi punto'",
+                    "add_line": "modo 'aggiungi linea'",
+                    "add_area": "modo 'aggiungi area'",
+                    "place_point": "Fai un punto",
+                    "disable_snap": "Tieni premuto per disabilitare l'ancoraggio ai nodi preesistenti",
+                    "stop_line": "Termine disegno di una linea o di un'area"
+                },
+                "operations": {
+                    "title": "Operazioni",
+                    "continue_line": "Continua una linea dal nodo selezionato",
+                    "merge": "Unisci (fondi) gli elementi selezionati",
+                    "disconnect": "Disconnetti gli elementi dal nodo selezionato",
+                    "split": "Spezza una linea in due sul nodo selezionato",
+                    "reverse": "Inverti la direzione di una linea",
+                    "move": "Sposta gli elementi selezionati",
+                    "rotate": "Ruota gli elementi selezionati",
+                    "orthogonalize": "Raddrizza linea / squadra gli angoli di un'area",
+                    "circularize": "Arrotonda una linea chiusa o area",
+                    "reflect_long": "Rifletti gli elementi lungo l'asse maggiore",
+                    "reflect_short": "Rifletti gli elementi lungo l'asse minore ",
+                    "delete": "Cancella gli elementi selezionati"
+                },
+                "commands": {
+                    "title": "Comandi",
+                    "copy": "Copia gli elementi selezionati",
+                    "paste": "Incolla gli elementi selezionati",
+                    "undo": "Annulla l'ultima operazione",
+                    "redo": "Ripeti l'ultima operazione",
+                    "save": "Salva le modifiche"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                         "block_number": "Blocco",
                         "block_number!jp": "Num. blocco",
                         "city": "Città",
                         "block_number": "Blocco",
                         "block_number!jp": "Num. blocco",
                         "city": "Città",
+                        "city!jp": "Città/Cittadina/Paese/particolare rione di Tokio",
                         "city!vn": "Città/Cittadina",
                         "conscriptionnumber": "123",
                         "country": "Nazione",
                         "county": "Contea (in Italia NON usare)",
                         "county!jp": "Distretto",
                         "district": "Distretto",
                         "city!vn": "Città/Cittadina",
                         "conscriptionnumber": "123",
                         "country": "Nazione",
                         "county": "Contea (in Italia NON usare)",
                         "county!jp": "Distretto",
                         "district": "Distretto",
+                        "district!vn": "Circoscrizione/Città/Distretto",
                         "floor": "Piano",
                         "hamlet": "Borgo",
                         "housename": "Numero civico",
                         "housenumber": "123",
                         "housenumber!jp": "Num. edificio/Num. lotto",
                         "neighbourhood": "Quartiere",
                         "floor": "Piano",
                         "hamlet": "Borgo",
                         "housename": "Numero civico",
                         "housenumber": "123",
                         "housenumber!jp": "Num. edificio/Num. lotto",
                         "neighbourhood": "Quartiere",
+                        "neighbourhood!jp": "Chōme/Aza/Koaza",
                         "place": "Luogo",
                         "postcode": "Codice postale",
                         "province": "Provincia",
                         "province!jp": "Prefettura",
                         "quarter": "Circoscrizione",
                         "place": "Luogo",
                         "postcode": "Codice postale",
                         "province": "Provincia",
                         "province!jp": "Prefettura",
                         "quarter": "Circoscrizione",
+                        "quarter!jp": "Ōaza/Machi",
                         "state": "Stato/Regione",
                         "street": "Strada",
                         "subdistrict": "Sottodistretto",
                         "state": "Stato/Regione",
                         "street": "Strada",
                         "subdistrict": "Sottodistretto",
-                        "suburb": "Circoscrizione"
+                        "subdistrict!vn": "Rione/Comune/Cittadina",
+                        "suburb": "Circoscrizione",
+                        "suburb!jp": "Rione"
                     }
                 },
                 "admin_level": {
                     }
                 },
                 "admin_level": {
                     "label": "SSID (Nome della rete)"
                 },
                 "kerb": {
                     "label": "SSID (Nome della rete)"
                 },
                 "kerb": {
-                    "label": "Rampa sul cordolo"
+                    "label": "Cordolo"
                 },
                 "lamp_type": {
                     "label": "Tipo"
                 },
                 "lamp_type": {
                     "label": "Tipo"
                 "maxstay": {
                     "label": "Limite orario"
                 },
                 "maxstay": {
                     "label": "Limite orario"
                 },
+                "maxweight": {
+                    "label": "Peso massimo"
+                },
                 "mtb/scale": {
                     "label": "Difficoltà Mountain Bike",
                     "options": {
                 "mtb/scale": {
                     "label": "Difficoltà Mountain Bike",
                     "options": {
                     "terms": "Stazione dei Vigili del fuoco"
                 },
                 "amenity/food_court": {
                     "terms": "Stazione dei Vigili del fuoco"
                 },
                 "amenity/food_court": {
-                    "name": "Zona ristorazione"
+                    "name": "Zona ristorazione",
+                    "terms": "<translate with synonyms or related terms for 'Food Court', separated by commas>"
                 },
                 "amenity/fountain": {
                     "name": "Fontana",
                 },
                 "amenity/fountain": {
                     "name": "Fontana",
                     "terms": "pub,birreria,locale"
                 },
                 "amenity/public_bath": {
                     "terms": "pub,birreria,locale"
                 },
                 "amenity/public_bath": {
-                    "name": "Bagni Pubblici"
+                    "name": "Bagni Pubblici",
+                    "terms": "<translate with synonyms or related terms for 'Public Bath', separated by commas>"
                 },
                 "amenity/public_bookcase": {
                     "name": "Libreria pubblica",
                 },
                 "amenity/public_bookcase": {
                     "name": "Libreria pubblica",
                     "name": "Area universitaria",
                     "terms": "università"
                 },
                     "name": "Area universitaria",
                     "terms": "università"
                 },
+                "amenity/vending_machine": {
+                    "name": "Distributore automatico",
+                    "terms": "distributore automatico,macchinetta"
+                },
                 "amenity/vending_machine/cigarettes": {
                     "name": "Distributore automatico di sigarette",
                     "terms": "distributore automatico,macchinetta,sigarette,tabacco,cartine,accendini"
                 "amenity/vending_machine/cigarettes": {
                     "name": "Distributore automatico di sigarette",
                     "terms": "distributore automatico,macchinetta,sigarette,tabacco,cartine,accendini"
                 "amenity/vending_machine/news_papers": {
                     "name": "Distributore automatico di giornali"
                 },
                 "amenity/vending_machine/news_papers": {
                     "name": "Distributore automatico di giornali"
                 },
+                "amenity/vending_machine/newspapers": {
+                    "name": "Distributore automatico di quotidiani",
+                    "terms": "distributore automatico,macchinetta,giornali,riviste,quotidiani"
+                },
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "Distributore postale automatico",
                     "terms": "distributore automatico,macchinetta,posta,pacchi"
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "Distributore postale automatico",
                     "terms": "distributore automatico,macchinetta,posta,pacchi"
                     "name": "Negozio per dolciumi",
                     "terms": "dolci,dolciumi,caramelle,confetti"
                 },
                     "name": "Negozio per dolciumi",
                     "terms": "dolci,dolciumi,caramelle,confetti"
                 },
+                "craft/distillery": {
+                    "name": "Distilleria",
+                    "terms": "<translate with synonyms or related terms for 'Distillery', separated by commas>"
+                },
                 "craft/dressmaker": {
                     "name": "Sartoria",
                     "terms": "sarto,merceria,vestiti su misura"
                 "craft/dressmaker": {
                     "name": "Sartoria",
                     "terms": "sarto,merceria,vestiti su misura"
                     "name": "Elettricista",
                     "terms": "elettronica,elettricità"
                 },
                     "name": "Elettricista",
                     "terms": "elettronica,elettricità"
                 },
+                "craft/electronics_repair": {
+                    "name": "Riparazione di elettrodomestici",
+                    "terms": "elettronica,riparazione,negozio,elettrodomestici,elettricista,aggiustare"
+                },
                 "craft/gardener": {
                     "name": "Giardiniere",
                     "terms": "giardinaggio,giardino"
                 "craft/gardener": {
                     "name": "Giardiniere",
                     "terms": "giardinaggio,giardino"
                     "name": "Percorso ciclabile",
                     "terms": "Percorso ciclabile"
                 },
                     "name": "Percorso ciclabile",
                     "terms": "Percorso ciclabile"
                 },
+                "highway/elevator": {
+                    "name": "Ascensore",
+                    "terms": "montacarichi,ascensore,elevatore"
+                },
                 "highway/footway": {
                     "name": "Percorso pedonale",
                     "terms": "percorso battuto,viale,pista pedonale,strada,corsia,percorso,sentiero,cammino,strada,rotta,via,traiettoria,camminata"
                 "highway/footway": {
                     "name": "Percorso pedonale",
                     "terms": "percorso battuto,viale,pista pedonale,strada,corsia,percorso,sentiero,cammino,strada,rotta,via,traiettoria,camminata"
                     "terms": "Campo da pallacanestro"
                 },
                 "leisure/pitch/beachvolleyball": {
                     "terms": "Campo da pallacanestro"
                 },
                 "leisure/pitch/beachvolleyball": {
-                    "name": "Campo di beach volley"
+                    "name": "Campo di beach volley",
+                    "terms": "pallavolo,pista,palla,volley,campetto"
                 },
                 "leisure/pitch/bowls": {
                     "name": "Campo da bocce",
                 },
                 "leisure/pitch/bowls": {
                     "name": "Campo da bocce",
                     "terms": "Quartiere,Zona"
                 },
                 "place/quarter": {
                     "terms": "Quartiere,Zona"
                 },
                 "place/quarter": {
-                    "name": "Sotto-distretto / Quartiere"
+                    "name": "Sotto-distretto / Quartiere",
+                    "terms": "<translate with synonyms or related terms for 'Sub-Borough / Quarter', separated by commas>"
                 },
                 "place/square": {
                     "name": "Piazza",
                 },
                 "place/square": {
                     "name": "Piazza",
                     "name": "Antiquario",
                     "terms": "antichità,mobili antichi"
                 },
                     "name": "Antiquario",
                     "terms": "antichità,mobili antichi"
                 },
+                "shop/appliance": {
+                    "name": "Negozio di elettrodomestici",
+                    "terms": "condizionatori,apparecchi,lavatrici,asciugatori,freezer,frigo,congelatori"
+                },
                 "shop/art": {
                     "name": "Negozio di opere d'arte",
                     "terms": "opere d'arte,quadri,sculture,galleria,art*"
                 "shop/art": {
                     "name": "Negozio di opere d'arte",
                     "terms": "opere d'arte,quadri,sculture,galleria,art*"
index f0d984e3a72f526eaf4bdcfd3a4aeb34cd965ed7..de0e1bae3a2e7cfbfc3ad46ef572f4c265e09009 100644 (file)
         "help": {
             "title": "ヘルプ",
             "help": "# ヘルプ\n\nこのアプリケーションは、自由に編集できる世界地図 [OpenStreetMap](http://www.openstreetmap.org/)編集用のエディタです。あなたが知っている地域についての情報を追加したり、編集したりして、誰もが使いやすい情報としてデータをオープンに広めましょう。\n\nあなたが編集した結果は、OpenStreetMapを利用するすべての人が閲覧することができます。編集するためには[ログイン](https://www.openstreetmap.org/login) する必要があります。\n\nこの [iD エディタ](http://ideditor.com/) の[ソースコードはGitHubで管理](https://github.com/openstreetmap/iD)されており、誰もが参加できるプロジェクトとして公開されています。\n",
         "help": {
             "title": "ヘルプ",
             "help": "# ヘルプ\n\nこのアプリケーションは、自由に編集できる世界地図 [OpenStreetMap](http://www.openstreetmap.org/)編集用のエディタです。あなたが知っている地域についての情報を追加したり、編集したりして、誰もが使いやすい情報としてデータをオープンに広めましょう。\n\nあなたが編集した結果は、OpenStreetMapを利用するすべての人が閲覧することができます。編集するためには[ログイン](https://www.openstreetmap.org/login) する必要があります。\n\nこの [iD エディタ](http://ideditor.com/) の[ソースコードはGitHubで管理](https://github.com/openstreetmap/iD)されており、誰もが参加できるプロジェクトとして公開されています。\n",
-            "editing_saving": "# データの編集と保存\n\nこのエディタはオンライン環境で使用されることが前提とされており、現在もウェブサイトを通じてこのエディタが利用されているはずです。\n\n### 地物の選択\n\nポイント情報や道路といった地物情報は、地図上に表示されている対象をクリックすることで選択ができます。選択された地物はハイライトされ、詳細情報が記載されたパネルが表示されます。\n\nこのパネル内の情報を編集することで、対象の地物の情報を編集できます。 複数の地物を範囲選択するには、まずキーボードの 'Shift' キーを押してください。そのまま選択したい地物をクリックするか、 'Shift' キーを押しながら地図上をドラッグして四角形を作ってください。四角形の中に含まれた地物がすべて選択状態になります。\n\n### 編集内容の保存\n\n道路や建物、特定の場所などの追加/編集結果は、OSMサーバへ保存されるまでの間、あなたのローカルPC上に格納されます。間違った編集をしてしまっても慌てないでください。巻き戻しボタン(Undo)をクリックすることで、編集内容を巻き戻すことができます。同じ編集をもう一度実施したい場合は、巻き戻しのキャンセルボタン(redo)をクリックしてください。\n\n編集に区切りがついたら、'保存' をクリックして作業を終了してください。例えば街の一区画の編集が終わり、そこから別の場所の編集に移動する場合などがよいでしょう。データを保存する前に、編集した内容をもう一度見直しましょう。データが間違っている可能性がある場所がエディタ上に表示されますので、必要に応じて修正を行なってください。\n\n編集内容に問題がなければ保存を行いましょう。あなたの編集内容を簡潔に表すコメントを記入した後、もう一度 '保存' をクリックすることで、あなたの編集内容は [OpenStreetMap.org](http://www.openstreetmap.org/) に投稿されます。投稿されたデータはあなた以外のすべての利用者に対しても表示されるようになり、そこに情報を追加したり、編集したりすることができるようになります。\n\n編集を一度に完了させることができない場合は、ブラウザのエディタ表示をそのままにして、いったんブラウザを閉じてしまいましょう。同じブラウザとエディタを使えば、後々、作業の続きを実施することができます。\n\n### エディタの活用\n\nエディタで使うことのできるキーボードショートカットは[こちら](http://wiki.openstreetmap.org/wiki/ID/Shortcuts)に一覧があります。\n",
             "roads": "# 道路\n\nこのエディタは道路を作成、修正、削除する機能を備えています。小路、自動車道、山道、自転車道等々、編集対象となる道路の種別に制限はありません。交差する道路を細かく地図に描くことも可能です。\n\n### 選択\n\n対象の道路をクリックすることで、選択することができます。選択された道路は強調表示され、ラインに対する操作を行う小さなツール項目がその近くに表示されます。道路の詳細情報は、サイドバーに一覧表示されます。\n\n### 修正\n\n既に描かれている道路の中には、背景画像の衛星写真やGPSトラックと明らかに位置が異なるものがあります。そうした道路を見つけたら、道路を正しい位置に修正しましょう。\n\nまずは変更対象となる道路をクリックして選択します。対象の道路が強調表示され、操作可能なポイントがラインの上に表示されて、位置の変更が可能となります。ラインとポイントを、より正しいと思われる位置に移動させてください。ライン上のポイントを増やすには、ラインの上でダブルクリックすることで、その位置にポイントを作成することが可能です。\n\n道路の接続状態が誤っている場合は、どちらかの道路の上に表示されているポイントをもう一つのラインの上に移動させ、2つのラインを接続してください。道路の接続は地図にとって非常に重要であり、車輌のナビゲーションを行うためには道路が正しく接続されていることが必須となります。\n\n'移動'ツールをクリックするか、キーボードでショートカットキー 'M' を押すことで、道路全体を一度に移動させることができます。もう一度クリックすることで、その位置へ対象が移動します。\n\n### 削除\n\n描かれている道路が完全に間違っている場合 - 衛星写真に映っておらず、より理想としては実際に現地で道路が無いことを確認できた場合 - その道路のデータそのものを削除し、地図から消すことが可能です。地物を削除する際の注意として、編集結果は他の編集と同様すべての利用者の目に触れること、また、衛星写真は撮影日時が古い可能性があり、道路が新しく敷設されているかもしれないことを意識してください。\n\n道路を削除するには、対象のラインをクリックして選択し、ツール項目からゴミ箱アイコンをクリックするか、'Delete'キーを押してください。\n\n### 新規作成\n\n道路があるはずなのにまだ描かれていない? エディタ左上に表示されている'ライン'アイコンをクリックするか、ショートカットキー'2'を押すと、ラインの新規描画を行うことができます。\n\n地図をクリックすることで、その地点からラインの描画が開始されます。もし既に描かれている道路から枝分かれした道路の場合は、既存道路で分岐が行われている部分をクリックして、その位置から描画を始めるようにしてください。\n\n衛星画像やGPSログなどで表示されている道路の形に添ってクリックし、ポイントを作成してください。描画している道路が他の道路と交差している場合は、交差している位置でクリックし、ラインを接続してください。描画を終了するには、終了する位置でダブルクリックするか、キーボードの'Return'、あるいは'Enter'キーを押してください。\n\n",
             "gps": "# GPS\n\nOpenStreetMapにおいて、GPSデータは最も価値の高い情報源のひとつです。iDエディタはあなたのPC上にある `.gpx` ファイルのトレース機能をサポートしています。GPSログは、スマートフォンのアプリケーションやGPSロガーを使用することで収集することができます。\n\nGPSを使用した現地調査の詳細な進め方については、[GPSによる調査](http://learnosm.org/ja/mobile-mapping/using-gps/)を参照してください。\n\nGPXログファイルをエディタの上にドラッグ&ドロップすることで、ファイルの内容をエディタ上に表示させることができます。ファイル形式の読み込みが正常に完了すると、ログは明るい紫色の線としてエディタ上に表示されます。エディタの右側に配置されている '地図データ' メニューをクリックすると、ログの表示/非表示、GPXが配置されたレイヤーへのズームを設定することができます。\n\nこのGPXログファイルはOpenStreetMapへ直接アップロードされたものではありません。このログを参考情報として地図を描いたり、あなたが追加する地物の配置場所の参考情報とするのがよいでしょう。また、あなた以外のユーザにもGPSログを使ってもらうためには[OpenStreetMapへのアップロード機能](http://www.openstreetmap.org/trace/create)を利用してください。\n",
             "imagery": "# 背景画像\n\n地図を作成するにあたって、航空写真は重要なリソースのひとつです。上空からの撮影、衛星写真、自由な利用が認められた情報源などは、画面左側の'背景画像設定'メニューから表示させることが可能です。\n\nデフォルト設定では[Bing Maps](http://www.bing.com/maps/)の衛星写真レイヤーが表示されていますが、地図のズームレベル変更などで新しい場所を表示する際に別のリソースを表示させることが可能です。英国やフランス、デンマークでは、特定の地域に限り非常に細密な画像が利用可能です。\n\n画像提供側の間違いが原因で、背景画像と地図データの位置がずれていることがあります。既存道路の多くが一方向にずれている場合、すべての地物の位置を一度に移動させてしまう前に、背景画像の表示位置を調整してみて、オフセットがされていないか確認を行なってください。位置の調整は、背景画像設定の一番下に表示されている'背景画像をずらす'という項目から行うことができます。\n",
             "roads": "# 道路\n\nこのエディタは道路を作成、修正、削除する機能を備えています。小路、自動車道、山道、自転車道等々、編集対象となる道路の種別に制限はありません。交差する道路を細かく地図に描くことも可能です。\n\n### 選択\n\n対象の道路をクリックすることで、選択することができます。選択された道路は強調表示され、ラインに対する操作を行う小さなツール項目がその近くに表示されます。道路の詳細情報は、サイドバーに一覧表示されます。\n\n### 修正\n\n既に描かれている道路の中には、背景画像の衛星写真やGPSトラックと明らかに位置が異なるものがあります。そうした道路を見つけたら、道路を正しい位置に修正しましょう。\n\nまずは変更対象となる道路をクリックして選択します。対象の道路が強調表示され、操作可能なポイントがラインの上に表示されて、位置の変更が可能となります。ラインとポイントを、より正しいと思われる位置に移動させてください。ライン上のポイントを増やすには、ラインの上でダブルクリックすることで、その位置にポイントを作成することが可能です。\n\n道路の接続状態が誤っている場合は、どちらかの道路の上に表示されているポイントをもう一つのラインの上に移動させ、2つのラインを接続してください。道路の接続は地図にとって非常に重要であり、車輌のナビゲーションを行うためには道路が正しく接続されていることが必須となります。\n\n'移動'ツールをクリックするか、キーボードでショートカットキー 'M' を押すことで、道路全体を一度に移動させることができます。もう一度クリックすることで、その位置へ対象が移動します。\n\n### 削除\n\n描かれている道路が完全に間違っている場合 - 衛星写真に映っておらず、より理想としては実際に現地で道路が無いことを確認できた場合 - その道路のデータそのものを削除し、地図から消すことが可能です。地物を削除する際の注意として、編集結果は他の編集と同様すべての利用者の目に触れること、また、衛星写真は撮影日時が古い可能性があり、道路が新しく敷設されているかもしれないことを意識してください。\n\n道路を削除するには、対象のラインをクリックして選択し、ツール項目からゴミ箱アイコンをクリックするか、'Delete'キーを押してください。\n\n### 新規作成\n\n道路があるはずなのにまだ描かれていない? エディタ左上に表示されている'ライン'アイコンをクリックするか、ショートカットキー'2'を押すと、ラインの新規描画を行うことができます。\n\n地図をクリックすることで、その地点からラインの描画が開始されます。もし既に描かれている道路から枝分かれした道路の場合は、既存道路で分岐が行われている部分をクリックして、その位置から描画を始めるようにしてください。\n\n衛星画像やGPSログなどで表示されている道路の形に添ってクリックし、ポイントを作成してください。描画している道路が他の道路と交差している場合は、交差している位置でクリックし、ラインを接続してください。描画を終了するには、終了する位置でダブルクリックするか、キーボードの'Return'、あるいは'Enter'キーを押してください。\n\n",
             "gps": "# GPS\n\nOpenStreetMapにおいて、GPSデータは最も価値の高い情報源のひとつです。iDエディタはあなたのPC上にある `.gpx` ファイルのトレース機能をサポートしています。GPSログは、スマートフォンのアプリケーションやGPSロガーを使用することで収集することができます。\n\nGPSを使用した現地調査の詳細な進め方については、[GPSによる調査](http://learnosm.org/ja/mobile-mapping/using-gps/)を参照してください。\n\nGPXログファイルをエディタの上にドラッグ&ドロップすることで、ファイルの内容をエディタ上に表示させることができます。ファイル形式の読み込みが正常に完了すると、ログは明るい紫色の線としてエディタ上に表示されます。エディタの右側に配置されている '地図データ' メニューをクリックすると、ログの表示/非表示、GPXが配置されたレイヤーへのズームを設定することができます。\n\nこのGPXログファイルはOpenStreetMapへ直接アップロードされたものではありません。このログを参考情報として地図を描いたり、あなたが追加する地物の配置場所の参考情報とするのがよいでしょう。また、あなた以外のユーザにもGPSログを使ってもらうためには[OpenStreetMapへのアップロード機能](http://www.openstreetmap.org/trace/create)を利用してください。\n",
             "imagery": "# 背景画像\n\n地図を作成するにあたって、航空写真は重要なリソースのひとつです。上空からの撮影、衛星写真、自由な利用が認められた情報源などは、画面左側の'背景画像設定'メニューから表示させることが可能です。\n\nデフォルト設定では[Bing Maps](http://www.bing.com/maps/)の衛星写真レイヤーが表示されていますが、地図のズームレベル変更などで新しい場所を表示する際に別のリソースを表示させることが可能です。英国やフランス、デンマークでは、特定の地域に限り非常に細密な画像が利用可能です。\n\n画像提供側の間違いが原因で、背景画像と地図データの位置がずれていることがあります。既存道路の多くが一方向にずれている場合、すべての地物の位置を一度に移動させてしまう前に、背景画像の表示位置を調整してみて、オフセットがされていないか確認を行なってください。位置の調整は、背景画像設定の一番下に表示されている'背景画像をずらす'という項目から行うことができます。\n",
             "graph": {
                 "block_number": "4",
                 "city": "三川",
             "graph": {
                 "block_number": "4",
                 "city": "三川",
-                "county": "<addr:county 用の値>",
+                "county": "<value for addr:county>",
                 "district": "<value for addr:district>",
                 "hamlet": "<value for addr:hamlet>",
                 "district": "<value for addr:district>",
                 "hamlet": "<value for addr:hamlet>",
-                "neighbourhood": "<addr:neighbourhood 用の値>",
+                "neighbourhood": "<value for addr:neighbourhood>",
                 "postcode": "49093",
                 "postcode": "49093",
-                "province": "<addr:province 用の値>",
-                "quarter": "<addr:quarter 用の値>",
+                "province": "<value for addr:province>",
+                "quarter": "<value for addr:quarter>",
                 "state": "<value for addr:state>",
                 "subdistrict": "<value for addr:subdistrict>",
                 "state": "<value for addr:state>",
                 "subdistrict": "<value for addr:subdistrict>",
-                "suburb": "<addr:suburb 用の値>",
+                "suburb": "<value for addr:suburb>",
                 "countrycode": "jp",
                 "name": {
                     "1st-avenue": "一条通り",
                 "countrycode": "jp",
                 "name": {
                     "1st-avenue": "一条通り",
                     "11th-avenue": "十一条通り",
                     "12th-avenue": "十二条通り",
                     "adams-street": "アダムス通り",
                     "11th-avenue": "十一条通り",
                     "12th-avenue": "十二条通り",
                     "adams-street": "アダムス通り",
+                    "andrews-elementary-school": "アンドリュー小学校",
+                    "andrews-street": "アンドリュー通り",
+                    "armitage-street": "アーミテージ通り",
                     "pizza-hut": "ピザハット",
                     "three-rivers-city-hall": "三川市役所",
                     "three-rivers-elementary-school": "三川小学校",
                     "pizza-hut": "ピザハット",
                     "three-rivers-city-hall": "三川市役所",
                     "three-rivers-elementary-school": "三川小学校",
             },
             "welcome": {
                 "title": "ようこそ",
             },
             "welcome": {
                 "title": "ようこそ",
-                "welcome": "ようこそ!このウォークスルーではOpenStreetMap編集の基礎を学びます。",
-                "practice": "ã\81\93ã\81®ã\82¦ã\82©ã\83¼ã\82¯ã\82¹ã\83«ã\83¼å\86\85ã\81®ã\83\87ã\83¼ã\82¿ã\81¯å\85¨ã\81¦ç·´ç¿\92ç\94¨ã\81§ã\80\81ウォークスルー内で編集した内容は保存されません。",
+                "welcome": "ようこそ! このウォークスルーではOpenStreetMap編集の基礎を学びます。",
+                "practice": "ã\81\93ã\81®ã\82¦ã\82©ã\83¼ã\82¯ã\82¹ã\83«ã\83¼å\86\85ã\81®ã\83\87ã\83¼ã\82¿ã\81¯å\85¨ã\81¦ç·´ç¿\92ç\94¨ã\83\87ã\83¼ã\82¿ã\81§ã\81\99ã\80\82ウォークスルー内で編集した内容は保存されません。",
                 "words": "このウォークスルーでは新しい言葉や概念をいくつか紹介します。新しい言葉を紹介する時には*イタリック体*を使います。",
                 "words": "このウォークスルーでは新しい言葉や概念をいくつか紹介します。新しい言葉を紹介する時には*イタリック体*を使います。",
-                "mouse": "マップの編集には任意の入力装置を使えますが、このウォークスルーは左右ボタンのあるマウスを使うことを想定しています。**マウスを接続したい場合は今すぐつないでからOKをクリックしてください。**",
+                "mouse": "マップの編集には任意の入力装置を使えますが、このウォークスルーは左右ボタンのあるマウスを使うことを想定しています。**マウスを接続したい場合は今すぐ接続してからOKをクリックしてください。**",
                 "leftclick": "このチュートリアルでクリックまたはダブルクリックという場合には、左ボタンを意味しています。トラックパッド上では、シングルクリックまたは1本指タップのことになるでしょう。 **{num} 回左クリックしてください。**",
                 "rightclick": "右クリックという場合には、トラックパッドではコントロール+クリック あるいは2本指タップに相当するでしょう。右クリックと同じに使える「メニュー」キーのついたキーボードもあります。**{num} 回右クリックしてください。**",
                 "leftclick": "このチュートリアルでクリックまたはダブルクリックという場合には、左ボタンを意味しています。トラックパッド上では、シングルクリックまたは1本指タップのことになるでしょう。 **{num} 回左クリックしてください。**",
                 "rightclick": "右クリックという場合には、トラックパッドではコントロール+クリック あるいは2本指タップに相当するでしょう。右クリックと同じに使える「メニュー」キーのついたキーボードもあります。**{num} 回右クリックしてください。**",
-                "chapters": "ã\81\93ã\81\93ã\81¾ã\81§ã\81¨ã\81¦ã\82\82è\89¯ã\81\84ã\81§ã\81\99ã\81­ï¼\81è¡\8cã\81\8dè©°ã\81¾ã\81£ã\81\9fã\82\89ä¸\8bã\81«ã\81\82ã\82\8bã\83\9cã\82¿ã\83³ã\81§å\90\84ç« ã\82\92ã\81\84ã\81¤ã\81§ã\82\82ã\82¹ã\82­ã\83\83ã\83\97ã\81\97ã\81\9fã\82\8aã\82\84ã\82\8aç\9b´ã\81\97ã\81\9fã\82\8aã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99ã\80\82ã\81\9dã\82\8cã\81§ã\81¯å§\8bã\82\81ã\81¾ã\81\97ã\82\87ã\81\86ï¼\81**'{next}' ã\82\92ã\82¯ã\83ªã\83\83ã\82¯ã\81\97ã\81¦ç¶\9aã\81\91ã\81¾ã\81\99。**"
+                "chapters": "ã\82\88ã\81\8fã\81§ã\81\8dã\81¾ã\81\97ã\81\9fï¼\81 è¡\8cã\81\8dè©°ã\81¾ã\81£ã\81\9fã\82\89ä¸\8bã\81«ã\81\82ã\82\8bã\83\9cã\82¿ã\83³ã\81§å\90\84ç« ã\82\92ã\81\84ã\81¤ã\81§ã\82\82ã\82¹ã\82­ã\83\83ã\83\97ã\81\97ã\81\9fã\82\8aã\82\84ã\82\8aç\9b´ã\81\97ã\81\9fã\82\8aã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99ã\80\82ã\81\9dã\82\8cã\81§ã\81¯å§\8bã\82\81ã\81¾ã\81\99ï¼\81 **'{next}' ã\82\92ã\82¯ã\83ªã\83\83ã\82¯ã\81\97ã\81¦æ¬¡ã\81«é\80²ã\81¿ã\81¾ã\81\97ã\82\87ã\81\86。**"
             },
             "navigation": {
                 "title": "ナビゲーション",
                 "drag": "メインのマップエリアの背景上にOpenStreetMapのデータが表示されます。{br}マウスの左ボタンを押したままマウスを動かすとマップをドラッグできます。キーボードにある矢印キーでも動かすことができます。**マップをドラッグしてみよう!**",
                 "zoom": "マウスホイールやトラックパッドをスクロールしたり、{plus} / {minus} ボタンをクリックすると、ズームインしたりズームアウトしたりできます。**マップをズームしてみよう!**",
             },
             "navigation": {
                 "title": "ナビゲーション",
                 "drag": "メインのマップエリアの背景上にOpenStreetMapのデータが表示されます。{br}マウスの左ボタンを押したままマウスを動かすとマップをドラッグできます。キーボードにある矢印キーでも動かすことができます。**マップをドラッグしてみよう!**",
                 "zoom": "マウスホイールやトラックパッドをスクロールしたり、{plus} / {minus} ボタンをクリックすると、ズームインしたりズームアウトしたりできます。**マップをズームしてみよう!**",
-                "features": "*地物(feature)*という言葉はマップ上に表されるものを表現するのに使われます。実世界のあらゆるものはOpenStreetMap上に地物としてマップすることができます。",
+                "features": "マップ上に表されるものを表現するために、ここでは*地物(feature)*という言葉を使います。現実世界のあらゆるものはOpenStreetMap上に地物としてマップすることができます。",
                 "points_lines_areas": "マップの地物は*ポイント(点)、ライン(線)またはエリア(面)*を使って表されます。",
                 "points_lines_areas": "マップの地物は*ポイント(点)、ライン(線)またはエリア(面)*を使って表されます。",
-                "nodes_ways": "OpenStreetMapでは、ポイントはよく*ノード*と呼ばれ、ラインやエリアは*ウェイ*と呼ばれます。",
+                "nodes_ways": "OpenStreetMapでは、ポイントは*ノード*、ラインやエリアは*ウェイ*とも呼ばれます。",
                 "click_townhall": "マップ上の地物は全てクリックして選択できます。**ポイントをクリックして選択してみましょう。**",
                 "click_townhall": "マップ上の地物は全てクリックして選択できます。**ポイントをクリックして選択してみましょう。**",
-                "selected_townhall": "すばらしい!ポイントが選択されました。選択された地物はその周囲が点滅します。",
-                "editor_townhall": "地物が選択されると、*地物エディタ*がマップのに表示されます。",
+                "selected_townhall": "すばらしい! ポイントが選択されました。選択された地物はその周囲が点滅します。",
+                "editor_townhall": "地物が選択されると、*地物エディタ*がマップのに表示されます。",
                 "preset_townhall": "地物エディタの先頭部分にその地物の種別が表示されます。このポイントは{preset}です。",
                 "fields_townhall": "地物エディタの中央部には*項目*があり、名前や住所といった地物の属性が表示されます。",
                 "preset_townhall": "地物エディタの先頭部分にその地物の種別が表示されます。このポイントは{preset}です。",
                 "fields_townhall": "地物エディタの中央部には*項目*があり、名前や住所といった地物の属性が表示されます。",
-                "close_townhall": "**エスケープキーか、上部角にある{button} ボタンをクリックして地物エディタを閉じます。**",
-                "search_street": "現在の画面で、あるいは全世界で地物を探すこともできます。**'{name}'を探してみましょう。**",
+                "close_townhall": "**地物エディタを閉じるには、エスケープキーか、上部角にある{button} ボタンをクリックします。**",
+                "search_street": "現在表示中の地物の中から、あるいは全世界を対象に地物を探すこともできます。**'{name}'を探してみましょう。**",
                 "choose_street": "**一覧から{name}を選んで選択してみましょう。**",
                 "choose_street": "**一覧から{name}を選んで選択してみましょう。**",
-                "selected_street": "いいですね!{name}が選択されました。",
-                "editor_street": "è¡\97è·¯ç\94¨ã\81«è¡¨ç¤ºã\81\95ã\82\8cã\81\9fé \85ç\9b®ã\81¯å½¹å ´ç\94¨ã\81«è¡¨ç¤ºã\81\95ã\82\8cã\81\9fé \85ç\9b®ã\81¨ã\81¯ç\95°ã\81ªã\81£ã\81¦ã\81\84ã\81¾ã\81\99ã\80\82{br}ã\81\93ã\81®é\81¸æ\8a\9eã\81\95ã\82\8cã\81\9fè¡\97è·¯ç\94¨ã\81«ã\80\81å\9c°ç\89©ã\82¨ã\83\87ã\82£ã\82¿ã\81¯'{field1}' ã\82\84'{field2}'ã\81¨ã\81\84ã\81£ã\81\9fé \85ç\9b®ã\82\92表示ã\81\97ã\81¾ã\81\99ã\80\82**ã\82¨ã\82¹ã\82±ã\83¼ã\83\97ã\82­ã\83¼ã\81¾ã\81\9fã\81¯{button}ã\83\9cã\82¿ã\83³ã\81§å\9c°ç\89©ã\82¨ã\83\87ã\82£ã\82¿ã\82\92é\96\89ã\81\98ã\81¾ã\81\99。**",
-                "play": "マップを動かしたり他の地物をいくつかクリックしてOpenStreetmapにどのようなものが追加できるのか見てみてください。**次の章へ行く準備ができたら'{next}'をクリックしてください。**"
+                "selected_street": "いいですね! {name}が選択されました。",
+                "editor_street": "è¡\97è·¯ç\94¨ã\81«è¡¨ç¤ºã\81\95ã\82\8cã\81\9fé \85ç\9b®ã\81¯å½¹å ´ç\94¨ã\81«è¡¨ç¤ºã\81\95ã\82\8cã\81\9fé \85ç\9b®ã\81¨ã\81¯ç\95°ã\81ªã\81£ã\81¦ã\81\84ã\81¾ã\81\99ã\80\82{br}ã\81\93ã\81®é\81¸æ\8a\9eã\81\95ã\82\8cã\81\9fè¡\97è·¯ç\94¨ã\81«ã\80\81å\9c°ç\89©ã\82¨ã\83\87ã\82£ã\82¿ã\81¯'{field1}' ã\82\84'{field2}'ã\81¨ã\81\84ã\81£ã\81\9fé \85ç\9b®ã\82\92表示ã\81\97ã\81¾ã\81\99ã\80\82**ã\82¨ã\82¹ã\82±ã\83¼ã\83\97ã\82­ã\83¼ã\81¾ã\81\9fã\81¯{button}ã\83\9cã\82¿ã\83³ã\81§å\9c°ç\89©ã\82¨ã\83\87ã\82£ã\82¿ã\82\92é\96\89ã\81\98ã\81¦ã\81\8fã\81 ã\81\95ã\81\84。**",
+                "play": "マップを動かしたり他の地物をいくつかクリックしてOpenStreetMapにどのようなものが追加できるのか見てみてください。**次の章へ進む準備ができたら'{next}'をクリックしてください。**"
             },
             "points": {
                 "title": "ポイント",
             },
             "points": {
                 "title": "ポイント",
-                "add_point": "*ポイント*はお店、レストラン、記念碑といったものを表すのに使うことができます。{br}これらには特定の位置をマークして、そこにが何があるのかを記述します。**{button} ポイントボタンをクリックして新しいポイントを追加します。**",
-                "place_point": "マップ上に新しいポイントを置くには、そのポイントが行くべき位置にマウスカーソルを置き、左クリックまたはスペースバーを押します。**マウスポインタをこのビルの上に移動し、左クリックまたはスペースバーを押します。**",
+                "add_point": "*ポイント*はお店、レストラン、記念碑といったものを表すのに使うことができます。{br}これらには特定の位置をマークして、そこにが何があるのかを記述します。**新しくポイントを追加するには、まず{button} ポイントボタンをクリックします。**",
+                "place_point": "マップ上に新しいポイントを置くには、そのポイントがあるべき位置にマウスカーソルを置き、左クリックまたはスペースバーを押します。**マウスポインタをこのビルの上に移動し、左クリックまたはスペースバーを押してください。**",
                 "search_cafe": "他にもポイントで表せる地物はたくさんあります。今回追加したポイントは喫茶店です。**'{preset}'を探してみましょう。**",
                 "choose_cafe": "**一覧から{preset}を選んでみましょう。**",
                 "search_cafe": "他にもポイントで表せる地物はたくさんあります。今回追加したポイントは喫茶店です。**'{preset}'を探してみましょう。**",
                 "choose_cafe": "**一覧から{preset}を選んでみましょう。**",
-                "feature_editor": "ã\81\93ã\82\8cã\81§ã\83\9dã\82¤ã\83³ã\83\88ã\81¯å\96«è\8c¶åº\97ã\81¨ã\81\97ã\81¦ã\83\9eã\83¼ã\82¯ã\81\95ã\82\8cã\81¾ã\81\97ã\81\9fã\80\82å\9c°ç\89©ã\82¨ã\83\87ã\82£ã\82¿ã\82\92使ã\81\88ã\81°ã\80\81å\96«è\8c¶åº\97ã\81«ã\81¤ã\81\84ã\81¦ã\81®æ\83\85å ±ã\82\92ã\82\82ã\81£ã\81¨追加することができます。",
-                "add_name": "OpenStreetMapでは、全ての項目はオプションで、よく分からない場合は項目を空白のままにしておいても構いません。{br}この喫茶店について、地元の知識を持っているつもりで、あなたがその名前を知っているということにしましょう。**喫茶店の名前を追加してみましょう。**",
-                "add_close": "å\9c°ç\89©ã\82¨ã\83\87ã\82£ã\82¿ã\81¯ã\81\82ã\81ªã\81\9fã\81\8cå¤\89æ\9b´ã\81\97ã\81\9få\86\85容ã\82\92å\85¨ã\81¦è\87ªå\8b\95ç\9a\84ã\81«è¨\98æ\86¶ã\81\97ã\81¦ã\81\84ã\81¾ã\81\99ã\80\82**å\90\8då\89\8dã\82\92追å\8a ã\81\97çµ\82ã\82\8fã\81£ã\81\9fã\82\89ã\80\81ã\82¨ã\82¹ã\82±ã\83¼ã\83\97ã\82±ã\83¼ã\83\97ã\82­ã\83¼ã\81\8bã\83ªã\82¿ã\83¼ã\83³ã\82­ã\83¼ã\80\81ã\82\82ã\81\97ã\81\8fã\81¯{button}ã\83\9cã\82¿ã\83³ã\82\92ã\82¯ã\83ªã\83\83ã\82¯ã\81\97ã\81¦å\9c°ç\89©ã\82¨ã\83\87ã\82£ã\82¿ã\82\92é\96\89ã\81\98ã\81¦ã\81\8fã\81 ã\81\95ã\81\84。**",
-                "reselect": "å\9c°ç\89©ã\81\8cæ\97¢ã\81«å­\98å\9c¨ã\81\97ã\81¦ã\81\84ã\82\8bã\81\93ã\81¨ã\81¯ã\82\88ã\81\8fã\81\82ã\82\8aã\81¾ã\81\99ã\81\8cã\80\81間違っていたり不完全であることがあります。既にあるポイントは修正することができます。**今作成した喫茶店をクリックして選択してください。**",
-                "update": "ã\81\93ã\81®å\96«è\8c¶åº\97ã\81«ã\81¤ã\81\84ã\81¦ã\82\88ã\82\8a詳細ã\81«å\9f\8bã\82\81てみましょう。名前を変えたり、料理を追加したり、住所を追加したりすることができます。**喫茶店の詳細情報を変えてみましょう。**",
-                "update_close": "**å\96«è\8c¶åº\97ã\81®æ\9b´æ\96°ã\81\8cçµ\82ã\82\8fã\81£ã\81\9fã\82\89ã\80\81ã\82¨ã\82¹ã\82±ã\83¼ã\83\97ã\82­ã\83¼ã\81¾ã\81\9fã\81¯ã\83ªã\82¿ã\83¼ã\83³ã\82­ã\83¼ã\80\81ã\81\82ã\82\8bã\81\84ã\81¯{button} ã\83\9cã\82¿ã\83³ã\82\92ã\82¯ã\83ªã\83\83ã\82¯ã\81\97ã\81¦å\9c°ç\89©ã\82¨ã\83\87ã\82£ã\82¿ã\82\92閉じます。**",
+                "feature_editor": "ã\81\93ã\82\8cã\81§ã\83\9dã\82¤ã\83³ã\83\88ã\81¯å\96«è\8c¶åº\97ã\81¨ã\81\97ã\81¦ã\83\9eã\83¼ã\82¯ã\81\95ã\82\8cã\81¾ã\81\97ã\81\9fã\80\82å\9c°ç\89©ã\82¨ã\83\87ã\82£ã\82¿ã\82\92使ã\81\88ã\81°ã\80\81å\96«è\8c¶åº\97ã\81«ã\81¤ã\81\84ã\81¦ã\82\88ã\82\8a詳ã\81\97ã\81\84æ\83\85å ±ã\82\92追加することができます。",
+                "add_name": "OpenStreetMapでは、全ての項目はオプションで、よく分からない場合は項目を空白のままにしておいても構いません。{br}この喫茶店について、あなたが地元の知識を持っているつもりになって、あなたがその名前を知っているということにしましょう。**喫茶店の名前を追加してみましょう。**",
+                "add_close": "å\9c°ç\89©ã\82¨ã\83\87ã\82£ã\82¿ã\81«å\85¥å\8a\9bã\81\97ã\81\9få\86\85容ã\81¯ã\81\99ã\81¹ã\81¦è\87ªå\8b\95ç\9a\84ã\81«è¨\98é\8c²ã\81\95ã\82\8cã\81¾ã\81\99ã\80\82**å\9c°ç\89©ã\81®å\90\8då\89\8dã\81®å\85¥å\8a\9bã\81\8cçµ\82ã\82\8fã\81£ã\81\9fã\82\89ã\80\81ã\82¨ã\82¹ã\82±ã\83¼ã\83\97ã\82­ã\83¼ã\81\8bã\82¨ã\83³ã\82¿ã\83¼ã\82­ã\83¼ã\80\81ã\81\82ã\82\8bã\81\84ã\81¯{button}ã\83\9cã\82¿ã\83³ã\82\92ã\82¯ã\83ªã\83\83ã\82¯ã\81\99ã\82\8bã\81¨å\9c°ç\89©ã\82¨ã\83\87ã\82£ã\82¿ã\81\8cé\96\89ã\81\98ã\81¾ã\81\99。**",
+                "reselect": "å\9c°ç\89©ã\81\8cæ\97¢ã\81«å\85¥å\8a\9bã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\81\93ã\81¨ã\82\82ã\81\82ã\82\8aã\81¾ã\81\99ã\81\8cã\80\81ã\81\9dã\81®å\86\85容ã\81\8c間違っていたり不完全であることがあります。既にあるポイントは修正することができます。**今作成した喫茶店をクリックして選択してください。**",
+                "update": "ã\81\93ã\81®å\96«è\8c¶åº\97ã\81«ã\81¤ã\81\84ã\81¦ã\80\81ã\82\88ã\82\8a詳ã\81\97ã\81\84æ\83\85å ±ã\82\92å\85¥å\8a\9bã\81\97てみましょう。名前を変えたり、料理を追加したり、住所を追加したりすることができます。**喫茶店の詳細情報を変えてみましょう。**",
+                "update_close": "**å\96«è\8c¶åº\97ã\81®æ\83\85å ±ã\82\92ã\82¢ã\83\83ã\83\97ã\83\87ã\83¼ã\83\88ã\81\97ã\81\9fã\82\89ã\80\81ã\82¨ã\82¹ã\82±ã\83¼ã\83\97ã\82­ã\83¼ã\81\8bã\82¨ã\83³ã\82¿ã\83¼ã\82­ã\83¼ã\80\81ã\81\82ã\82\8bã\81\84ã\81¯{button}ã\83\9cã\82¿ã\83³ã\82\92ã\82¯ã\83ªã\83\83ã\82¯ã\81\99ã\82\8bã\81¨å\9c°ç\89©ã\82¨ã\83\87ã\82£ã\82¿ã\81\8c閉じます。**",
                 "rightclick": "地物の上で右クリックすると*編集メニュー*が現れます。そこには実行できる編集操作の一覧が表示されます。**右クリックしてあなたが作成したポイントを選択し、編集メニューを表示されてみましょう。**",
                 "rightclick": "地物の上で右クリックすると*編集メニュー*が現れます。そこには実行できる編集操作の一覧が表示されます。**右クリックしてあなたが作成したポイントを選択し、編集メニューを表示されてみましょう。**",
-                "delete": "実世界に存在しない地物は削除して構いません。{br}OpenStreetMapで地物を削除すると、みんなが使っているマップから消えることになります。そのため削除する前にその地物が確実に存在しないことを確認する必要があります。** {button}ボタンをクリックしてポイントを削除してみましょう。**",
+                "delete": "実世界に存在しない地物は削除して構いません。{br}OpenStreetMapで地物を削除すると、みんなが使っているマップから消えることになります。そのため削除する前にその地物が確実に存在しないことを確認する必要があります。** {button}ボタンをクリックしてポイントを削除してみましょう。**",
                 "undo": "自分の編集内容をOpenStreetMapに保存するまでは、いつでも変更を取り消すことができます。**{button}ボタンをクリックして削除を取り消し、ポイントを元に戻してみましょう。**",
                 "undo": "自分の編集内容をOpenStreetMapに保存するまでは、いつでも変更を取り消すことができます。**{button}ボタンをクリックして削除を取り消し、ポイントを元に戻してみましょう。**",
-                "play": "さあ、これであなたはポイントの作成・編集方法が分かりました。もう少しポイントの作成方法を練習してみましょう!**次の章に進む準備ができたら、'{next}'をクリックしてください。**"
+                "play": "さあ、これであなたはポイントの作成・編集方法が分かりました。もう少しポイントの作成方法を練習してみましょう! **次の章に進む準備ができたら、'{next}'をクリックしてください。**"
             },
             "areas": {
             },
             "areas": {
-                "title": "エリア"
+                "title": "エリア",
+                "add_playground": "*エリア*は、湖や建物、居住区域など、境界線のある地物を描くために使われます。{br}また、ポイントで表現される地物をより詳細に描く目的でも使われます。**{button}エリアボタンをクリックすると新しいエリアを描くことができます。**",
+                "start_playground": "この公園をエリアとしてマップしてみましょう。エリアは、地物の外周の形に*ノード*を配置することで描くことができます。**クリックするかスペースキーを押して、公園の角のどこかを配置してみましょう。**",
+                "continue_playground": "引き続き、公園の外周に沿ってノードを配置することで、エリアの形を描いてください。既存の歩道と接続してしまっても問題はありません。{br}補足: Altキーを押しながら作業すると、既存の地物を接続せずに新しくノードを配置することができます。**公園の四隅をクリックして、公園の形を描いてみましょう。**",
+                "finish_playground": "エリアの描画を終了する際は、エンターキーを押すか、あるいは描き始めや描き終わりのノードで連続して二回同じ場所でクリックしてください。**公園をエリアとして描いてみましょう。**",
+                "search_playground": "**'{preset}'を検索**",
+                "choose_playground": "**一覧から{preset}を選択**",
+                "add_field": "この公園は公式な名称がありません。そのため、名称の項目は空欄にしておきましょう。{br}その代わり、追加項目の箇所でより細かい情報を入力します。**追加項目のリストをオープンしてください。**",
+                "choose_field": "**{field}をリストから選択してください。**",
+                "retry_add_field": "{field}以外を選択しています。もう一度選択してください。",
+                "describe_playground": "**追加で情報を入力し、{button}ボタンをクリックして地物エディタを閉じてください。**",
+                "play": "完了です! 試しにいくつかエリアを描いてみて、どのような地物がOpenStreetMapに描けるか、確認してください。**次の章に進む準備ができたら'{next}'をクリックしてください。**"
             },
             "lines": {
             },
             "lines": {
-                "title": "ライン"
+                "title": "ライン",
+                "add_line": "*ライン*は道路、鉄道、河川といった地物を表現するのに使います。 **新しいラインを追加するには、{button}ラインボタンをクリックしてください。**",
+                "start_line": "まだ描かれていない道路がありますのでこれを追加してみましょう!{br}OpenStreetMapでは、ラインは道路の中心に沿って引きます。ラインを引いている間でも必要ならドラッグしたりズームしたりできます。**描かれていない道路の上端をクリックして新しいラインを下の方へ描き始めましょう。**",
+                "intersect": "クリックするかスペースキーを押すとラインにノードを追加できます。{br}道路など多くの種別のラインはより大きなネットワークの一部です。経路探索アプリケーションが正しく動作するには、これらのラインが正しく接続されていることが重要です。**横方向に引かれている{name}をクリックして2つのラインを接続する交差点を作成しましょう。**",
+                "retry_intersect": "道路は{name}を交差する必要があります。もういちどやってみましょう!",
+                "continue_line": "続けて新しい道路を引いてみましょう。必要ならマップをドラッグしたりズームしたりできますのでお忘れなく。{br}引き終わったら、最後のノードを再度クリックしてください。**道路を引き終わりました。**",
+                "choose_category_road": "**一覧から{category}を選んでください。**",
+                "choose_preset_residential": "道路の種別にはいろいろありますが、これは住宅街の道路です。**{preset}という種別を選んでください。**",
+                "retry_preset_residential": "{preset}という種別が選ばれていません。**こちらをクリックして再度選んでください。**",
+                "name_road": "**この道路に名前をつけてから、エスケープキー、エンターキーまたは{button}ボタンをクリックして地物エディタを閉じます。**",
+                "did_name_road": "いい感じです!次はラインの形を更新する方法を学びます。",
+                "update_line": "既に引かれているラインの変更が必要な場合があります。ここに正しくなさそうな道路があります。",
+                "add_node": "ノードをいくつか追加してその形状を改善することができます。ノードを追加するやり方のひとつはノードを追加したい位置でラインをダブルクリックすることです。**ライン上でダブルクリックして新しいノードを作成します。**",
+                "start_drag_endpoint": "ラインを選んだら、任意のノード上で左マウスボタンをクリックしたままドラッグすると、ノードを動かせます。**終端をドラッグして、この道路が交差すべき場所に動かしましょう。**",
+                "finish_drag_endpoint": "この位置で良さそうです。**左マウスボタンを放してドラッグを終わります。**",
+                "start_drag_midpoint": "ノード間の*中央点*に小さな三角があります。新しいノードを作成するには、中央点を新しい位置にドラッグするやり方もあります。**中央点の三角をドラッグして道路のカーブに合わせて新しいノードを作成してみましょう。**",
+                "continue_drag_midpoint": "このラインはとても良くなりましたね!ダブルクリックするか、中央点をカーブが道路の形状に一致するところまでドラッグしてこのラインを引き続き調整してみてください。**ラインの形が整ったら、OKをクリックしてください。**",
+                "delete_lines": "現実に存在しない道路を描いたラインがあれば削除しても構いません。{br}ここに、市が{street}を計画したものの建設されなかった例があります。余分なラインを削除することでマップのこの部分を改善することができます。",
+                "rightclick_intersection": "最後の実際の通りは{street1}なので、{street2}をこの交差点で*分割*してその上にあるものを全て除去します。**交差点ノード上で右クリックします。**",
+                "split_intersection": "**{button} ボタンをクリックして{street}を分割します。**",
+                "retry_split": "分割ボタンが押されていないようです。やり直してみてください。",
+                "did_split_multi": "よくできました!{street1}はこれで2つに分割されました。上の部分は除去できます。**{street2}の上の部分をクリックして選んでください。**",
+                "did_split_single": "**{street2}の上の部分をクリックして選択します。**",
+                "multi_select": "{selected}はこれで選択されました。{other1}も選択しましょう。シフトキーを押しながらクリックすると複数のものを選択できます。**{other2}の上でシフト-クリックします。**",
+                "multi_rightclick": "良いですね!削除するラインが2つとも選択されました。**どちから一方のライン上で右クリックして編集メニューを表示します。**",
+                "multi_delete": "**{button} ボタン上でクリックして余分なラインを削除します。**",
+                "retry_delete": "削除ボタンがクリックされていません。もう一度やってみてください。",
+                "play": "素晴らしい!この章で学んだスキルでもう少しラインの編集を試してみてください。**次の章へ進む準備ができたら'{next}'をクリックしてください。**"
             },
             "buildings": {
             },
             "buildings": {
-                "title": "建物"
+                "title": "建物",
+                "add_building": "OpenStreetMapは建物の世界最大のデータベースです。{br}まだマップされていない建物をトレースすることで、あなたもこのデータベースを改善することができます。**{button} エリアをクリックして新しいエリアを追加しましょう。**",
+                "start_building": "この家の外周をトレースしてマップに追加してみましょう。{br}建物はその専有領域の周囲をできるだけ正確にトレースすべきです。**建物の角のどれかひとつの上でクリックまたはスペースキーを押して、開始ノードを置いてください。**",
+                "continue_building": "引き続きノードを追加しながら建物の外周をトレースします。より詳細にトレースしたい場合はズームインすることもできますのでお忘れなく。{br}エンターキー押すか、最初か最後のノード上で再度クリックして建物のトレースを終了します。**建物のトレースを終了します。**",
+                "retry_building": "建物の角にノードを置くところがうまく行かなかったようです。もう一度やってみてください!",
+                "choose_category_building": "**一覧から{category} を選びます。**",
+                "choose_preset_house": "建物の種類はこれ以外にもいろいろありますが、これは明らかに家(一戸建て住宅)です。{br}種別がはっきりわからない場合は建物全般の種別を選べばOKです。**{preset} という種別を選びます。**",
+                "close": "**エスケープキーか{button} ボタンをクリックして地物エディタを閉じます。**",
+                "rightclick_building": "**作成した建物を右クリックで選んで編集メニューを表示します。**",
+                "square_building": "あなたが描いた建物を、より建物らしい直角構造にしてみましょう。**{button}ボタンを押すと、建物の形が四角形になります。**",
+                "retry_square": "直交化ボタン以外を押したようです。もう一度やってみてください。",
+                "done_square": "建物の角が動いたのが分かりましたか?もうひとつ役に立つテクニックを学びましょう。",
+                "add_tank": "次に、この円形の貯蔵タンクをトレースします。**{button} エリアをクリックして新しいエリアを追加してください。**",
+                "start_tank": "きれいな円が描けなくても大丈夫。タンクの外周に触れるようにして、その内側のエリアに粗い円を描いてみてください。**クリックするかスペースキーを押してタンクの外周上に開始ノードを置きます。**",
+                "continue_tank": "外周に沿っていくつかノードを追加します。円形はあなたが描いたノードの外側に作成されます。{br}エンターを置くか、最初か最後のノード上で再度クリックしてエリアの描画を終わりにします。**タンクのトレースを終わります。**",
+                "search_tank": "**「{preset}」を検索してみましょう **",
+                "choose_tank": "**一覧から{preset}を選んでみましょう。**",
+                "rightclick_tank": "**作成した貯蔵タンクを右クリックで選んで、編集メニューを表示します。**",
+                "circle_tank": "**{button} ボタンをクリックしてタンクを円状にします。**",
+                "retry_circle": "円状に並べる ボタンがクリックされていません。もう一度やってみてください。",
+                "play": "よくできました!もう少し建物を描いて、編集メニューで他のコマンドも試しながら練習してみてください。**次の章に進む準備ができたら'{next}'をクリックしてください。**"
             },
             "startediting": {
             },
             "startediting": {
-                "title": "編集をはじめる",
+                "title": "編集開始",
+                "help": "それでは、OpenStreetMap編集をはじめてみましょう!{br}このウォークスルーは、{button}ヘルプボタンをクリックすると何度でも行なうことができます。ヘルプにはより詳しい説明もありますので、ぜひご覧ください。",
                 "save": "変更内容はこまめに保存するよう気をつけてください!",
                 "save": "変更内容はこまめに保存するよう気をつけてください!",
-                "start": "マッピング開始!"
+                "start": "マッピング開始!(これ以降は練習ではなく実際にデータが登録されますので注意してください)"
+            }
+        },
+        "shortcuts": {
+            "title": "ショートカットキー",
+            "or": "-または-",
+            "browsing": {
+                "title": "閲覧",
+                "navigation": {
+                    "title": "ナビゲーション",
+                    "zoom": "拡大/縮小"
+                },
+                "help": {
+                    "title": "ヘルプ",
+                    "help": "ヘルプ/ドキュメントを表示",
+                    "keyboard": "ショートカットキーを表示"
+                },
+                "display_options": {
+                    "title": "オプションを表示",
+                    "background": "背景オプションを表示",
+                    "background_switch": "前の背景に切り替え",
+                    "map_data": "地図データオプションを表示",
+                    "wireframe": "ワイヤーフレームモード切替",
+                    "minimap": "ミニマップの表示/非表示"
+                },
+                "selecting": {
+                    "title": "地物の選択",
+                    "select_one": "地物を1つ選択してください",
+                    "select_multi": "地物を複数選択してください"
+                },
+                "with_selected": {
+                    "title": "選択された地物に対して",
+                    "edit_menu": "編集メニューの表示/非表示"
+                },
+                "vertex_selected": {
+                    "title": "選択されたノードに対して",
+                    "previous": "前のノードへ移動",
+                    "next": "次のノードへ移動",
+                    "first": "最初のノードへ移動",
+                    "last": "最後のノードへ移動",
+                    "change_parent": "親ウェイを切り替え"
+                }
+            },
+            "editing": {
+                "drawing": {
+                    "add_point": "「ポイントの追加」モード",
+                    "add_line": "「ラインの追加」モード",
+                    "add_area": "「エリアの追加」モード",
+                    "place_point": "ポイントを配置",
+                    "disable_snap": "長押しでポイントの位置合わせを無効化",
+                    "stop_line": "ラインやエリアの描画を終了"
+                },
+                "operations": {
+                    "title": "操作",
+                    "continue_line": "選択モードでラインを継続",
+                    "reflect_long": "地物を長軸で反転",
+                    "reflect_short": "地物を短軸で反転",
+                    "delete": "選択された地物を削除"
+                },
+                "commands": {
+                    "title": "コマンド",
+                    "copy": "選択された地物をコピー",
+                    "paste": "コピーされた地物を貼り付け",
+                    "undo": "最後の操作を元に戻す",
+                    "redo": "最後の操作を再実行",
+                    "save": "編集結果を保存"
+                }
             }
         },
         "presets": {
             }
         },
         "presets": {
                     "label": "SSID (ネットワーク名)"
                 },
                 "kerb": {
                     "label": "SSID (ネットワーク名)"
                 },
                 "kerb": {
-                    "label": "縁石の段差"
+                    "label": "縁石"
                 },
                 "lamp_type": {
                     "label": "種別"
                 },
                 "lamp_type": {
                     "label": "種別"
                 "maxstay": {
                     "label": "最大利用時間"
                 },
                 "maxstay": {
                     "label": "最大利用時間"
                 },
+                "maxweight": {
+                    "label": "最大重量"
+                },
                 "mtb/scale": {
                     "label": "マウンテンバイク難易度",
                     "options": {
                 "mtb/scale": {
                     "label": "マウンテンバイク難易度",
                     "options": {
                     "label": "営業時間"
                 },
                 "shelter": {
                     "label": "営業時間"
                 },
                 "shelter": {
-                    "label": "避難所"
+                    "label": "待合所"
                 },
                 "shelter_type": {
                     "label": "タイプ"
                 },
                 "shelter_type": {
                     "label": "タイプ"
                     "terms": "動物繁殖施設, ブリーダー"
                 },
                 "amenity/animal_shelter": {
                     "terms": "動物繁殖施設, ブリーダー"
                 },
                 "amenity/animal_shelter": {
-                    "name": "アニマルシェルター",
-                    "terms": "アニマルシェルター"
+                    "name": "動物保護施設",
+                    "terms": "アニマルシェルター, 動物保護センター, 鳥獣保護施設"
                 },
                 "amenity/arts_centre": {
                     "name": "アートセンター",
                 },
                 "amenity/arts_centre": {
                     "name": "アートセンター",
                     "terms": "学校の敷地, 校庭"
                 },
                 "amenity/shelter": {
                     "terms": "学校の敷地, 校庭"
                 },
                 "amenity/shelter": {
-                    "name": "避難所",
-                    "terms": "避難所, シェルター, 逃げ場"
+                    "name": "(風雨をしのぐための)休憩所",
+                    "terms": "避難所, シェルター, 逃げ場, 雨宿り, 東屋, あずまや, 四阿, しあ, 休憩所, 屋根"
                 },
                 "amenity/social_facility": {
                     "name": "福祉施設",
                 },
                 "amenity/social_facility": {
                     "name": "福祉施設",
                     "name": "電気工事店",
                     "terms": "電気工事店"
                 },
                     "name": "電気工事店",
                     "terms": "電気工事店"
                 },
+                "craft/electronics_repair": {
+                    "name": "電化製品修理店",
+                    "terms": "家電修理店, 電気機器修理店, 修理店, リペアショップ"
+                },
                 "craft/gardener": {
                     "name": "庭師",
                     "terms": "庭師"
                 "craft/gardener": {
                     "name": "庭師",
                     "terms": "庭師"
                     "name": "自転車道",
                     "terms": "自転車道, サイクリング道路"
                 },
                     "name": "自転車道",
                     "terms": "自転車道, サイクリング道路"
                 },
+                "highway/elevator": {
+                    "name": "エレベーター",
+                    "terms": "エレベーター, エレベータ, 昇降機"
+                },
                 "highway/footway": {
                     "name": "歩道",
                     "terms": "歩道, 歩行者用道路"
                 "highway/footway": {
                     "name": "歩道",
                     "terms": "歩道, 歩行者用道路"
                     "name": "古美術品店",
                     "terms": "古美術品店, アンティークショップ"
                 },
                     "name": "古美術品店",
                     "terms": "古美術品店, アンティークショップ"
                 },
+                "shop/appliance": {
+                    "name": "家電販売店",
+                    "terms": "家電販売店,家電量販店,電器屋"
+                },
                 "shop/art": {
                     "name": "美術品販売店",
                     "terms": "現代美術の商店"
                 "shop/art": {
                     "name": "美術品販売店",
                     "terms": "現代美術の商店"
index 790c4f7c7446997006202c7d84df9cc3970359ed..fbe9cff09d987d68c26acba7ba8ad353ff3e4b68 100644 (file)
             "help_link_text": "ವಿವರಗಳು"
         },
         "confirm": {
             "help_link_text": "ವಿವರಗಳು"
         },
         "confirm": {
+            "okay": "ಸರಿ",
             "cancel": "ರದ್ದು ಮಾಡು"
         },
         "splash": {
             "cancel": "ರದ್ದು ಮಾಡು"
         },
         "splash": {
                 "suburb": "<value for addr:suburb>",
                 "countrycode": "in",
                 "name": {
                 "suburb": "<value for addr:suburb>",
                 "countrycode": "in",
                 "name": {
+                    "6th-street": "6ನೇ ರಸ್ತೆ",
+                    "adams-street": "ಆಡಮ್ಸ್ ರಸ್ತೆ",
+                    "andrews-street": "ಆಂಡ್ರ್ಯೂಸ್ ರಸ್ತೆ",
                     "scidmore-park": "ಸ್ಕಿಡ್ಮ್ಮಾರ ಪಾರ್ಕ್  ",
                     "scouter-park": "ಸ್ಕೌಟರ್ ಪಾರ್ಕ್  ",
                     "sherwin-williams": "ಶೆರ್ವಿನ್ ವಿಲ್ಯಮ್ಸ್  ",
                     "scidmore-park": "ಸ್ಕಿಡ್ಮ್ಮಾರ ಪಾರ್ಕ್  ",
                     "scouter-park": "ಸ್ಕೌಟರ್ ಪಾರ್ಕ್  ",
                     "sherwin-williams": "ಶೆರ್ವಿನ್ ವಿಲ್ಯಮ್ಸ್  ",
index 5800eb91c32735251f599b2ab5c395d389930a32..2d3808a888cb1b1e0fddfeb0fd78563af424cdb4 100644 (file)
         "help": {
             "title": "도움말",
             "help": "# 도움말\n\n이것은 세계의 자유롭고 편집할 수 있는 지도인,\n[OpenStreetMap](http://www.openstreetmap.org/)을 위한 편집기입니다.\n모두를 위한 더 나은 세계의 오픈 소스 및 오픈 데이터 지도를 만들기 위해,\n당신의 지역에서 데이터를 추가하고 업데이트하려면 이를 사용할 수 있습니다.\n\n이 지도에서 만든 편집은 OpenStreetMap을 사용하는 모두에게 보여집니다.\n편집하려면 [로그인](https://www.openstreetmap.org/login) 해야 합니다.\n\n[iD 편집기](http://ideditor.com/)는 [GitHub에서 사용할 수 있는 소스\n코드](https://github.com/openstreetmap/iD)로 된 협업 프로젝트입니다.\n",
         "help": {
             "title": "도움말",
             "help": "# 도움말\n\n이것은 세계의 자유롭고 편집할 수 있는 지도인,\n[OpenStreetMap](http://www.openstreetmap.org/)을 위한 편집기입니다.\n모두를 위한 더 나은 세계의 오픈 소스 및 오픈 데이터 지도를 만들기 위해,\n당신의 지역에서 데이터를 추가하고 업데이트하려면 이를 사용할 수 있습니다.\n\n이 지도에서 만든 편집은 OpenStreetMap을 사용하는 모두에게 보여집니다.\n편집하려면 [로그인](https://www.openstreetmap.org/login) 해야 합니다.\n\n[iD 편집기](http://ideditor.com/)는 [GitHub에서 사용할 수 있는 소스\n코드](https://github.com/openstreetmap/iD)로 된 협업 프로젝트입니다.\n",
-            "editing_saving": "# 편집 및 저장\n\n이 편집기는 주로 온라인에서 작동하도록 설계되었고, 지금도 웹사이트를 통해\n접근할 수 있습니다.\n\n### 지물 선택하기\n\n관심 있는 도로나 지점과 같은 지도 지물을 선택하려면, 지도에 그것을 클릭하세요.\n선택된 지물이 강조되고, 그것에 대한 세부 정보로 된 패널을 열고, 지물을 수행할\n수 있는 메뉴를 보여줍니다.\n\n여러 지물을 선택하려면 'Shift' 키를 누르고 있으세요. 그 다음 선택하려는 지물을\n클릭하거나, 지도에 드래그하여 사각형으로 그립니다. 상자가 그려지고 그 안에\n있는 모든 지점이 선택됩니다.\n\n### 편집 저장하기\n\n도로, 건물과 장소 등을 편집하여 바꿀 때, 서버에 저장할 때까지는 로컬에 저장됩니다.\n실수를 걱정하지 마세요. - 실행 취소 버튼을 클릭해 변경사항을 실행 취소할 수 있고, 다시 실행 버튼을 클릭해 변경사항을 다시 실행할 수 있습니다.\n\n편집의 그룹을 마치려면 '저장'을 클릭하세요 - 예를 들어, 마을의 지역을 완료했고\n새 지역에서 시작하고 싶으면 말입니다. 무엇을 했는지 검토할 기회가 있을 것이며,\n무언가 바꾸는 것에 대한 권한이 없어 보이면 편집기가 유용한 제안과 경고를\n제공합니다.\n\n모든 것이 좋아 보이면, 모든 다른 사용자에게 보여지고 구축하고 개선하기 위해 다른\n사용자가 사용할 수 있는 곳인, [OpenStreetMap.org](http://www.openstreetmap.org/)에\n변경사항을 게시하기 위해 바꾼 것을 설명하는 짧은 덧글을 입력하고 '저장'을 다시 클릭할\n수 있습니다.\n\n한 번에 앉아서 편집을 마칠 수 없으면, (같은 브라우저와 컴퓨터에서) 편집기 창을\n떠나고 나서 돌아올 수 있으며, 편집기 애플리케이션은 작업을 복구하도록 제공합니다.\n\n### 편집기 사용하기\n\n사용할 수 있는 키보드 단축의 목록은 [여기](http://wiki.openstreetmap.org/wiki/ID/Shortcuts)서 찾을 수 있습니다.\n",
             "roads": "# 도로\n\n이 편집기로 도로를 만들고, 고치고, 삭제할 수 있습니다. 도로는 모든 종류가\n될 수 있습니다: 경로, 고속도로, 산책로, 자전거 도로와 더 많이 - 어떠한 자주 교차되는 분절도 매핑할 수 있어야 합니다.\n\n### 선택하기\n\n도로를 선택하려면 도로를 클릭하세요. 지도와 도로에 대한 자세한\n정보를 보여주는 사이드바가 있는 작은 도구 메뉴와 함께, 외곽선이\n보여져야 합니다.\n\n### 수정하기\n\n때때로 도로 뒤나 GPS 트랙에 있는 사진으로 정렬되지 않은 도로를\n볼 수 있습니다. 이러한 도로를 조정할 수 있으며 조정하면 올바른\n위치에 있게 됩니다.\n\n먼저 바꾸고 싶은 도로를 클릭하세요. 도로가 강조되고 더 나은 위치로\n드래그할 수 있는 조절 점이 보여집니다. 더 자세하게 하기 위해 새\n조절 점을 추가하고 싶으면, 노드 없이 도로의 부분을 더블 클릭하면\n추가됩니다.\n\n길을 다른 길로 연결하지만, 제대로 지도에 연결되어 있지 않으면,\n그들과 합치기 위해 다른 도로 위에 그 도로의 조절 점 중 하나를\n드래그할 수 있습니다. 도로 연결이 있는 것은 지도에 있어서 중요하고\n운전 경로를 제공하는 데 있어서 필수입니다.\n\n또한 한 번에 전체 도로를 옮기려면 '이동' 도구를 클릭하거나 `M` 바로가기 키를 누를 수\n있으며, 해당 움직임을 저장하려면 다시 클릭할 수 있습니다.\n\n### 삭제하기\n\n도로가 전체적으로 잘못되었다면 - 위성 사진에서 존재하지 않는 것을 볼 수\n있으며 이상적으로는 나타나지 않는 것으로 현지로 확인되었습니다 - 지도에서\n도로를 제거할 수 있습니다. 지물을 삭제할 때 주의하십시오 -\n어떠한 다른 편집, 모두에게 보여지는 결과와 위성 사진 같은 것은 때때로\n오래되었으며, 그래서 도로는 단순히 새로 지어졌을 수 있습니다.\n\n도로를 클릭하여 선택한 다음, 휴지통 아이콘을 클릭하거나 '삭제' 키를\n눌러 도로를 삭제할 수 있습니다.\n\n### 만들기\n\n어딘가에 찾은 도로가 있어야 하지만 없습니까? 선 그리기를 시작하려면\n편집기의 위 왼쪽에 '선' 아이콘을 클릭하거나 `2` 바로가기 키를 누르세요.\n\n그리기를 시작하려면 지도에 도로의 시작 부분을 클릭하세요. 도로가\n기존 도로에서 분기되어 있다면, 연결할 장소를 클릭하여 시작하세요.\n\n다음 위성 사진이나 GPS에 따라, 올바른 경로를 따를 수 있도록 도로를 따라\n점을 클릭하세요. 그리는 도로가 다른 도로와 교차하면, 교차점을 클릭하여\n도로를 연결하세요. 그리기가 완료되면, 더블 클릭하거나\n키보드에 있는 'Return' 또는 'Enter'를 누르세요.\n",
             "gps": "# GPS\n\n수집된 GPS 추적은 OpenStreetMap을 위한 하나의 가치 있는 데이터 자료입니다. 이\n편집기는 로컬 컴퓨터에 있는 `.gpx` 파일로 로컬 추적을 지원합니다. 여러 스마트폰\n애플리케이션은 물론 개인 GPS 하드웨어로 GPS 추적을 모을 수 있습니다.\n\nGPS 측량을 수행하는 방법에 대한 자세한 정보는\n[스마트폰, GPS, 또는 종이로 매핑하기](http://learnosm.org/en/mobile-mapping/)을 읽으세요.\n\n매핑을 위해 GPX 트랙을 사용하려면, 지도 편집기 위에 GPX을 끌어 놓으세요.\n그것이 인식되면, 밝은 보라 선으로 지도에 추가됩니다. 새 GPX로 공급되는 레이어로\n활성화, 비활성화, 또는 확대하려면 오른쪽에 있는 '지도 데이터' 메뉴를 클릭하세요.\n\nGPX 트랙은 OpenStreetMap에 직접 올려지지 않습니다 - 그것을 사용하는 최상의 방법은\n추가하는 새로운 지물을 위한 가이드로 사용하여, 지도를 그리는 것이며, 또한 다른 사용자가\n사용하기 위해 [OpenStreetMap에 그것을 올리는](http://www.openstreetmap.org/trace/create) 것입니다.\n",
             "imagery": "# 사진\n\n항공 사진은 매핑에 있어서 중요한 자료입니다. 비행기 플라이오버, 위성 뷰와\n자유롭게 컴파일된 자료의 조합은 편집기에서 오른쪽에 있는 '배경 설정' 메뉴에서\n사용할 수 있습니다.\n\n기본적으로 [Bing 지도](http://www.bing.com/maps/) 위성 레이어가 편집기에\n표현되지만, 기존대로 새 지리적 지역으로 지도를 이동하고 확대할 수 있고, 새 자료는\n사용할 수 있게 될 것입니다. 미국, 프랑스와 덴마크와 같은 일부 국가는 일부 지역에서\n매우 높은 품질의 사진을 사용할 수 있습니다.\n\n사진은 때때로 사진 제공자 측이 실수하기 때문에 지도 데이터에 오프셋이 있습니다.\n만약 배경에서 도로가 옮겨진 것이 많이 보인다면, 즉시 배경에 맞게 그들 모두를 이동하지\n마십시오. 대신 사진을 조정할 수 있으며 배경 설정 UI의 아래에 있는 '정렬 고치기'를\n클릭하여 기존 데이터에 맞추면 됩니다.\n",
             "roads": "# 도로\n\n이 편집기로 도로를 만들고, 고치고, 삭제할 수 있습니다. 도로는 모든 종류가\n될 수 있습니다: 경로, 고속도로, 산책로, 자전거 도로와 더 많이 - 어떠한 자주 교차되는 분절도 매핑할 수 있어야 합니다.\n\n### 선택하기\n\n도로를 선택하려면 도로를 클릭하세요. 지도와 도로에 대한 자세한\n정보를 보여주는 사이드바가 있는 작은 도구 메뉴와 함께, 외곽선이\n보여져야 합니다.\n\n### 수정하기\n\n때때로 도로 뒤나 GPS 트랙에 있는 사진으로 정렬되지 않은 도로를\n볼 수 있습니다. 이러한 도로를 조정할 수 있으며 조정하면 올바른\n위치에 있게 됩니다.\n\n먼저 바꾸고 싶은 도로를 클릭하세요. 도로가 강조되고 더 나은 위치로\n드래그할 수 있는 조절 점이 보여집니다. 더 자세하게 하기 위해 새\n조절 점을 추가하고 싶으면, 노드 없이 도로의 부분을 더블 클릭하면\n추가됩니다.\n\n길을 다른 길로 연결하지만, 제대로 지도에 연결되어 있지 않으면,\n그들과 합치기 위해 다른 도로 위에 그 도로의 조절 점 중 하나를\n드래그할 수 있습니다. 도로 연결이 있는 것은 지도에 있어서 중요하고\n운전 경로를 제공하는 데 있어서 필수입니다.\n\n또한 한 번에 전체 도로를 옮기려면 '이동' 도구를 클릭하거나 `M` 바로가기 키를 누를 수\n있으며, 해당 움직임을 저장하려면 다시 클릭할 수 있습니다.\n\n### 삭제하기\n\n도로가 전체적으로 잘못되었다면 - 위성 사진에서 존재하지 않는 것을 볼 수\n있으며 이상적으로는 나타나지 않는 것으로 현지로 확인되었습니다 - 지도에서\n도로를 제거할 수 있습니다. 지물을 삭제할 때 주의하십시오 -\n어떠한 다른 편집, 모두에게 보여지는 결과와 위성 사진 같은 것은 때때로\n오래되었으며, 그래서 도로는 단순히 새로 지어졌을 수 있습니다.\n\n도로를 클릭하여 선택한 다음, 휴지통 아이콘을 클릭하거나 '삭제' 키를\n눌러 도로를 삭제할 수 있습니다.\n\n### 만들기\n\n어딘가에 찾은 도로가 있어야 하지만 없습니까? 선 그리기를 시작하려면\n편집기의 위 왼쪽에 '선' 아이콘을 클릭하거나 `2` 바로가기 키를 누르세요.\n\n그리기를 시작하려면 지도에 도로의 시작 부분을 클릭하세요. 도로가\n기존 도로에서 분기되어 있다면, 연결할 장소를 클릭하여 시작하세요.\n\n다음 위성 사진이나 GPS에 따라, 올바른 경로를 따를 수 있도록 도로를 따라\n점을 클릭하세요. 그리는 도로가 다른 도로와 교차하면, 교차점을 클릭하여\n도로를 연결하세요. 그리기가 완료되면, 더블 클릭하거나\n키보드에 있는 'Return' 또는 'Enter'를 누르세요.\n",
             "gps": "# GPS\n\n수집된 GPS 추적은 OpenStreetMap을 위한 하나의 가치 있는 데이터 자료입니다. 이\n편집기는 로컬 컴퓨터에 있는 `.gpx` 파일로 로컬 추적을 지원합니다. 여러 스마트폰\n애플리케이션은 물론 개인 GPS 하드웨어로 GPS 추적을 모을 수 있습니다.\n\nGPS 측량을 수행하는 방법에 대한 자세한 정보는\n[스마트폰, GPS, 또는 종이로 매핑하기](http://learnosm.org/en/mobile-mapping/)을 읽으세요.\n\n매핑을 위해 GPX 트랙을 사용하려면, 지도 편집기 위에 GPX을 끌어 놓으세요.\n그것이 인식되면, 밝은 보라 선으로 지도에 추가됩니다. 새 GPX로 공급되는 레이어로\n활성화, 비활성화, 또는 확대하려면 오른쪽에 있는 '지도 데이터' 메뉴를 클릭하세요.\n\nGPX 트랙은 OpenStreetMap에 직접 올려지지 않습니다 - 그것을 사용하는 최상의 방법은\n추가하는 새로운 지물을 위한 가이드로 사용하여, 지도를 그리는 것이며, 또한 다른 사용자가\n사용하기 위해 [OpenStreetMap에 그것을 올리는](http://www.openstreetmap.org/trace/create) 것입니다.\n",
             "imagery": "# 사진\n\n항공 사진은 매핑에 있어서 중요한 자료입니다. 비행기 플라이오버, 위성 뷰와\n자유롭게 컴파일된 자료의 조합은 편집기에서 오른쪽에 있는 '배경 설정' 메뉴에서\n사용할 수 있습니다.\n\n기본적으로 [Bing 지도](http://www.bing.com/maps/) 위성 레이어가 편집기에\n표현되지만, 기존대로 새 지리적 지역으로 지도를 이동하고 확대할 수 있고, 새 자료는\n사용할 수 있게 될 것입니다. 미국, 프랑스와 덴마크와 같은 일부 국가는 일부 지역에서\n매우 높은 품질의 사진을 사용할 수 있습니다.\n\n사진은 때때로 사진 제공자 측이 실수하기 때문에 지도 데이터에 오프셋이 있습니다.\n만약 배경에서 도로가 옮겨진 것이 많이 보인다면, 즉시 배경에 맞게 그들 모두를 이동하지\n마십시오. 대신 사진을 조정할 수 있으며 배경 설정 UI의 아래에 있는 '정렬 고치기'를\n클릭하여 기존 데이터에 맞추면 됩니다.\n",
             },
             "welcome": {
                 "title": "어서 와요",
             },
             "welcome": {
                 "title": "어서 와요",
-                "welcome": "어서 와요! 이 연습은 OpenStreetMap의 편집의 기초를 가르치게 됩니다."
+                "welcome": "어서 와요! 이 연습은 OpenStreetMap의 편집의 기초를 가르치게 됩니다.",
+                "practice": "연습 내의 모든 데이터는 연습용입니다. 편집한 내용은 저장되지 않습니다.",
+                "mouse": "다른 입력 장치를 이용해서도 지도를 편집할 수 있지만, 연습에서는 왼쪽키와 오른쪽키를 가진 마우스가 있다고 가정합니다. **마우스를 연결하려면 지금 연결한 후 확인 버튼을 클릭하십시요**"
             },
             "navigation": {
                 "title": "둘러보기",
             },
             "navigation": {
                 "title": "둘러보기",
                 "retry_add_field": "{field} 필드를 선택하지 않았습니다. 다시 시도하세요."
             },
             "lines": {
                 "retry_add_field": "{field} 필드를 선택하지 않았습니다. 다시 시도하세요."
             },
             "lines": {
-                "title": "선"
+                "title": "선",
+                "retry_preset_residential": "{preset} 유형을 선택하지 않았습니다. **다시 선택하려면 여기를 클릭하세요**",
+                "retry_delete": "Delete 버튼을 클릭하지 않았습니다. 다시해보십시요."
             },
             "buildings": {
                 "title": "건물",
             },
             "buildings": {
                 "title": "건물",
+                "retry_building": "건물 모서리에 교점을 설치하는 데 문제가 있는것 같습니다. 다시해보십시요!",
                 "choose_category_building": "**목록에서 {category}을 선택하세요.**",
                 "search_tank": "**'{preset}'을 검색하세요.**",
                 "choose_tank": "**목록에서 {preset}을 선택하세요.**"
                 "choose_category_building": "**목록에서 {category}을 선택하세요.**",
                 "search_tank": "**'{preset}'을 검색하세요.**",
                 "choose_tank": "**목록에서 {preset}을 선택하세요.**"
                     "label": "SSID (네트워크 이름)"
                 },
                 "kerb": {
                     "label": "SSID (네트워크 이름)"
                 },
                 "kerb": {
-                    "label": "ì\97°ì\84\9d ê²½ì\82¬ë¡\9c"
+                    "label": "커ë¸\8c"
                 },
                 "lamp_type": {
                     "label": "유형"
                 },
                 "lamp_type": {
                     "label": "유형"
                 "service_rail": {
                     "label": "서비스 유형",
                     "options": {
                 "service_rail": {
                     "label": "서비스 유형",
                     "options": {
-                        "crossover": "êµ\90ì°¨",
-                        "siding": "ì\82¬ì\9d´ë\94©",
-                        "spur": "박차",
-                        "yard": "마당"
+                        "crossover": "ê±´ë\84\98ì\84 ",
+                        "siding": "측ì\84 ",
+                        "spur": "지선",
+                        "yard": "차량기지"
                     }
                 },
                 "service_times": {
                     }
                 },
                 "service_times": {
                 },
                 "building/chapel": {
                     "name": "예배당 건물",
                 },
                 "building/chapel": {
                     "name": "예배당 건물",
-                    "terms": "ì\98\88ë² 당 건물"
+                    "terms": "ì\98\88ë°°당 건물"
                 },
                 "building/church": {
                     "name": "교회 건물",
                 },
                 "building/church": {
                     "name": "교회 건물",
                     "name": "보조 연결로"
                 },
                 "highway/service": {
                     "name": "보조 연결로"
                 },
                 "highway/service": {
-                    "name": "이면도로"
+                    "name": "이면도로",
+                    "terms": "이면도로"
                 },
                 "highway/service/alley": {
                 },
                 "highway/service/alley": {
-                    "name": "골목"
+                    "name": "골목",
+                    "terms": "골목"
                 },
                 "highway/service/drive-through": {
                     "name": "드라이브 스루",
                 },
                 "highway/service/drive-through": {
                     "name": "드라이브 스루",
                     "terms": "채석장"
                 },
                 "landuse/railway": {
                     "terms": "채석장"
                 },
                 "landuse/railway": {
-                    "name": "ì² ë\8f\84 ë³µë\8f\84"
+                    "name": "ì² ë\8f\84 ë\80ì§\80"
                 },
                 "landuse/recreation_ground": {
                     "name": "휴양지",
                 },
                 "landuse/recreation_ground": {
                     "name": "휴양지",
                     "name": "농구장",
                     "terms": "농구 코트"
                 },
                     "name": "농구장",
                     "terms": "농구 코트"
                 },
+                "leisure/pitch/beachvolleyball": {
+                    "name": "비치발리볼 코트"
+                },
                 "leisure/pitch/bowls": {
                     "name": "잔디 볼링장"
                 },
                 "leisure/pitch/bowls": {
                     "name": "잔디 볼링장"
                 },
                     "name": "버려진 철도"
                 },
                 "railway/crossing": {
                     "name": "버려진 철도"
                 },
                 "railway/crossing": {
-                    "name": "철도 건널목 (경로)"
+                    "name": "철도 건널목 (인도)"
                 },
                 "railway/disused": {
                     "name": "폐선된 철도"
                 },
                 "railway/disused": {
                     "name": "폐선된 철도"
                 },
                 "shop/gas": {
                     "name": "가스통 가게",
                 },
                 "shop/gas": {
                     "name": "가스통 가게",
-                    "terms": "ê¹\8c스통 가게"
+                    "terms": "ê°\80스통 가게"
                 },
                 "shop/gift": {
                     "name": "선물 가게",
                 },
                 "shop/gift": {
                     "name": "선물 가게",
                 },
                 "shop/seafood": {
                     "name": "해산물 가게",
                 },
                 "shop/seafood": {
                     "name": "해산물 가게",
-                    "terms": "씨푸드 가게"
+                    "terms": "해산물 가게"
                 },
                 "shop/second_hand": {
                     "name": "위탁/중고품 할인 매장"
                 },
                 "shop/second_hand": {
                     "name": "위탁/중고품 할인 매장"
                     "name": "저장공간 대여소"
                 },
                 "shop/supermarket": {
                     "name": "저장공간 대여소"
                 },
                 "shop/supermarket": {
-                    "name": "ì\88\98퍼마켓",
+                    "name": "ì\8a\88퍼마켓",
                     "terms": "수퍼마켓, 슈퍼마켓"
                 },
                 "shop/tailor": {
                     "terms": "수퍼마켓, 슈퍼마켓"
                 },
                 "shop/tailor": {
                 },
                 "traffic_calming/bump": {
                     "name": "과속방지턱",
                 },
                 "traffic_calming/bump": {
                     "name": "과속방지턱",
-                    "terms": "스피드범프"
+                    "terms": "과속방지턱"
                 },
                 "traffic_calming/chicane": {
                     "name": "급커브길"
                 },
                 "traffic_calming/chicane": {
                     "name": "급커브길"
                     "terms": "럼블스트립"
                 },
                 "traffic_calming/table": {
                     "terms": "럼블스트립"
                 },
                 "traffic_calming/table": {
-                    "name": "횡단 보도 높이기"
+                    "name": "고원식 횡단보도"
                 },
                 "type/boundary": {
                     "name": "경계"
                 },
                 "type/boundary": {
                     "name": "경계"
                     "terms": "유턴 금지"
                 },
                 "type/restriction/only_left_turn": {
                     "terms": "유턴 금지"
                 },
                 "type/restriction/only_left_turn": {
-                    "name": "좌회전",
+                    "name": "좌회전 전용",
                     "terms": "좌회전 전용"
                 },
                 "type/restriction/only_right_turn": {
                     "terms": "좌회전 전용"
                 },
                 "type/restriction/only_right_turn": {
-                    "name": "우회전",
+                    "name": "우회전 전용",
                     "terms": "우회전 전용"
                 },
                 "type/restriction/only_straight_on": {
                     "terms": "우회전 전용"
                 },
                 "type/restriction/only_straight_on": {
index cb75dd8890b0c5826fcb4dbdb04564c627445a71..e2e49d614cfaa90498f3f70c12a03a2c8907990d 100644 (file)
         "help": {
             "title": "Помош",
             "help": "# Помош\n\nОва е уредник за [OpenStreetMap](http://www.openstreetmap.org/) — слободната и уредлива карта на светот. Служи за додавање и менување на податоци во вашето подрачје, со што ја подобрувате оваа светска карта со отворен код и отворени податоци за сите.\n\nУредувањата што ќе ги направите на картава ќе бидат видливи за секого на OpenStreetMap. За да направите уредување, ќе треба да\n[се најавите](https://www.openstreetmap.org/login).\n\n[Уредникот iD](http://ideditor.com/) е соработен проект чиј [изворен код е достапен на GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Помош",
             "help": "# Помош\n\nОва е уредник за [OpenStreetMap](http://www.openstreetmap.org/) — слободната и уредлива карта на светот. Служи за додавање и менување на податоци во вашето подрачје, со што ја подобрувате оваа светска карта со отворен код и отворени податоци за сите.\n\nУредувањата што ќе ги направите на картава ќе бидат видливи за секого на OpenStreetMap. За да направите уредување, ќе треба да\n[се најавите](https://www.openstreetmap.org/login).\n\n[Уредникот iD](http://ideditor.com/) е соработен проект чиј [изворен код е достапен на GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Уредување и зачувување\n\nУредникот е предвиден да работи првенствено семрежно, како што сега дојдовте на него.\n\n### Одбирање на елементи\n\nЗа да одберете елемент, како пат или точка од интерес, стиснете го на картата. Елементот ќе се обележи. ќе се отвори прозорец со информации за него и ќе се појави изборник на постапки што можете да ги правите со елементот.\n\nЗа да одберете повеќе елементи, држете го копчето „Shift“. Потоа или стиснете на елементите што сакате да ги одберете, или пак опфатете ги со правоаголник, со кој ќе ги одберете.\n\n### Зачувување на уредувањата\n\nКога ќе направите промени како уредување на патишта, згради и места, тие се\nскладираат месно додека не ги зачувате на опслужувачот. Не грижете се ако направите\nгрешка — можете да ги отповикате на копчето горе, или пак да ги повратите на копчето до него.\n\nСтиснете на „Зачувај“ за да довршите група уредувања — на пример, ако имате завршено\nподрачје на градот и би сакале да почнете ново подрачје. Ќе имате прилика\nда го прегледате направеното, а уредникот ќе ви дава корисни предлози\nи предупредувања ако нешто не е во ред со промените.\n\nАко сè делува добро, можете да напишете кратка прибелешка во која ја објаснувате\nнаправената промена, па повторно стиснете на „Зачувај“ за да ги објавите промените\nна [OpenStreetMap.org](http://www.openstreetmap.org/), каде тие ќе станат видливи\nза сите други корисници и се ставаат на располагање на другите, да се надоврзуваат на нив и да ги подобруваат.\n\nАко не можете да ги довршите уредувањата на едно седење, можете да го напуштите прозорецот\nна уредникот и да се навратите (на истиот прелистувач и сметач), по што\nуредникот ќе ви понуди да го отвори недосработеното.\n\n### Употреба на уредникот\n\nСписок на тастатурни кратенки ќе најдете [тука](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n",
             "roads": "# Патишта\n\nМожете да создавате, поправате и бришете патишта со уредников. Патиштата можат да бидат\nнајразновидни: патеки, автопатишта, врвици, велосипедски патеки и други — секое минувалиште\nтреба да стои на карта.\n\n### Избирање\n\nСтиснете на патот за да го изберете. Патот ќе ви се истакне, воено прикажувајќи\nмал алатник на картата и страничник со повеќе информации\nза патот.\n\n### Менување\n\nЧесто ќе наидете на патишта што не ја следат сателитската снимка\nпод нив или ГПС-патеката. Можете да ги прилагодите,\nза да се поклопуваат.\n\nНајпрвин стиснете на патот што сакате да го измените. Патот ќе се истакне и ќе се прикажат\nконтролни точки долж него, кои треба ги повлечете за да ја следат сликата под нив. Доколку\nсакате да додадете нови контролни точки за поголема уточнетост, стиснете двапати на делницата\nкоја нема јазол, и ќе ви се појави точка.\n\nДоколку патот е поврзан со друг пат, но не е поврзан\nкако што треба на картата, довлечете една од неговите контролни точки во другиот пат\nза да ги споите. Поврзаноста на патиштата е од суштинско значење\nза упатување по одредишта.\n\nМожете да стиснете и на алатката „Премести“ или да ја стиснете кратенката „M“ за да го поместите целиот пат наеднаш,\nа потоа стиснете повторно за да го зачувате поместеното.\n\n### Бришење\n\nДоколку патот е сосема погрешен — гледате дека не постои на сателитската\nснимка и, по можност, имате потврдено на лице место — можете да го избришете, со што ќе го отстраните од картата. Бидете внимателни кога бришете елементи —\nкако и секое друго уредување, добиеното ќе биде видливо за секого; сателитските снимки често\nсе застарени, што значи дека ова може да е нов пат, изграден во меѓувреме.\n\nЗа да избришете пат, стиснете за да го изберете, па стиснете на иконката со канта или стиснете на копчето „Delete“.\n\n### Создавање\n\nНаидовте на место кајшто треба да има пат, а него го нема? Стиснете на иконката „Линија“\nво горниот десен дел на уредникот и на кратенката „2“ за да почнете со\nцртање на линија.\n\nСтиснете на почетокот на патот на сателитската снимка за да ја почнете линијата. Ако патот\nе разгранок од постоечки пат, почнете од местото кајшто се поврзани.\n\nПотоа стиснете на точките долж патот за да го следи вистинскиот пат,\nво склад со сателитската снимка или ГПС-патеката. Ако се врстува со друг пат, поврзете го\nсо него стискајќи на точка во пресекот. Кога ќе завршите со исцртување, стиснете двапати\nили притеснете на „Enter“ / „Return“ на тастатурата.\n",
             "gps": "# ГПС\n\nСобраните ГПС-траги се мошне корисен извор на податоци за  OpenStreetMap. Уредников\nподдржува месни траги во облик на .gpx-податотеки од вашиот сметач. Ваквите ГПС-траги\nможете да ги собирате со разни прилози за паметен телефон, како и со лични ГПС-уреди.\n\nПовеќе информации за тоа како да вршите ГПС-извидување ќе прочитате на\n[Картографија со паметен телефон, ГПС или хартија](http://learnosm.org/en/mobile-mapping/).\n\nЗа да користите GPX-трага за исцртување, повлечете и пуштете ја GPX-податотеката во уредникот на картата\nАко ја препознае, истата ќе биде ставена на картата како светла виолетова линија. Стиснете на изборникот „Податоци за картата“ десно а да го овозможите.\nоневозможите или приближите овој нов слој од GPX.\n\nGPX-трагата не се подига право на OpenStreetMap — најдобро се користи ако се црта на кратата, користејќи ја како водилка за нови елементи\nшто ги додавате, и да [се подига на OpenStreetMap](http://www.openstreetmap.org/trace/create)\nза да им служи на другите.\n",
             "imagery": "# Снимки\n\nВоздушните снимки се важен извор во картографијата. Во изборникот „Поставки за заднината“ десно ќе најдете\nсателитски снимки, авионски прелети и слободно составени ресурси.\n\nПо основно, во уредникот се прикажува сателитски слој од [Bing Карти](http://www.bing.com/maps/),\nно како што шетате по картата и доближувате нови географски\nподрачја, стануваат достапни други извори. Некои земји, како САД, Франција и Данска имаат снимки со многу висок квалитет за некои подрачја.\n\nЗаднината понекогаш отстапува од картата поради грешка\nод страна на на заднината. Ако видите доста патишта поместени од  заднината,\nнемојте веднаш да ги поместувате за да се поклопат со неа. Прилагодете ја заднината, за да одговара на постоечките податоци стискајќи на „Поправи го порамнувањето“ на дното од поставките за заднината.\n",
             "roads": "# Патишта\n\nМожете да создавате, поправате и бришете патишта со уредников. Патиштата можат да бидат\nнајразновидни: патеки, автопатишта, врвици, велосипедски патеки и други — секое минувалиште\nтреба да стои на карта.\n\n### Избирање\n\nСтиснете на патот за да го изберете. Патот ќе ви се истакне, воено прикажувајќи\nмал алатник на картата и страничник со повеќе информации\nза патот.\n\n### Менување\n\nЧесто ќе наидете на патишта што не ја следат сателитската снимка\nпод нив или ГПС-патеката. Можете да ги прилагодите,\nза да се поклопуваат.\n\nНајпрвин стиснете на патот што сакате да го измените. Патот ќе се истакне и ќе се прикажат\nконтролни точки долж него, кои треба ги повлечете за да ја следат сликата под нив. Доколку\nсакате да додадете нови контролни точки за поголема уточнетост, стиснете двапати на делницата\nкоја нема јазол, и ќе ви се појави точка.\n\nДоколку патот е поврзан со друг пат, но не е поврзан\nкако што треба на картата, довлечете една од неговите контролни точки во другиот пат\nза да ги споите. Поврзаноста на патиштата е од суштинско значење\nза упатување по одредишта.\n\nМожете да стиснете и на алатката „Премести“ или да ја стиснете кратенката „M“ за да го поместите целиот пат наеднаш,\nа потоа стиснете повторно за да го зачувате поместеното.\n\n### Бришење\n\nДоколку патот е сосема погрешен — гледате дека не постои на сателитската\nснимка и, по можност, имате потврдено на лице место — можете да го избришете, со што ќе го отстраните од картата. Бидете внимателни кога бришете елементи —\nкако и секое друго уредување, добиеното ќе биде видливо за секого; сателитските снимки често\nсе застарени, што значи дека ова може да е нов пат, изграден во меѓувреме.\n\nЗа да избришете пат, стиснете за да го изберете, па стиснете на иконката со канта или стиснете на копчето „Delete“.\n\n### Создавање\n\nНаидовте на место кајшто треба да има пат, а него го нема? Стиснете на иконката „Линија“\nво горниот десен дел на уредникот и на кратенката „2“ за да почнете со\nцртање на линија.\n\nСтиснете на почетокот на патот на сателитската снимка за да ја почнете линијата. Ако патот\nе разгранок од постоечки пат, почнете од местото кајшто се поврзани.\n\nПотоа стиснете на точките долж патот за да го следи вистинскиот пат,\nво склад со сателитската снимка или ГПС-патеката. Ако се врстува со друг пат, поврзете го\nсо него стискајќи на точка во пресекот. Кога ќе завршите со исцртување, стиснете двапати\nили притеснете на „Enter“ / „Return“ на тастатурата.\n",
             "gps": "# ГПС\n\nСобраните ГПС-траги се мошне корисен извор на податоци за  OpenStreetMap. Уредников\nподдржува месни траги во облик на .gpx-податотеки од вашиот сметач. Ваквите ГПС-траги\nможете да ги собирате со разни прилози за паметен телефон, како и со лични ГПС-уреди.\n\nПовеќе информации за тоа како да вршите ГПС-извидување ќе прочитате на\n[Картографија со паметен телефон, ГПС или хартија](http://learnosm.org/en/mobile-mapping/).\n\nЗа да користите GPX-трага за исцртување, повлечете и пуштете ја GPX-податотеката во уредникот на картата\nАко ја препознае, истата ќе биде ставена на картата како светла виолетова линија. Стиснете на изборникот „Податоци за картата“ десно а да го овозможите.\nоневозможите или приближите овој нов слој од GPX.\n\nGPX-трагата не се подига право на OpenStreetMap — најдобро се користи ако се црта на кратата, користејќи ја како водилка за нови елементи\nшто ги додавате, и да [се подига на OpenStreetMap](http://www.openstreetmap.org/trace/create)\nза да им служи на другите.\n",
             "imagery": "# Снимки\n\nВоздушните снимки се важен извор во картографијата. Во изборникот „Поставки за заднината“ десно ќе најдете\nсателитски снимки, авионски прелети и слободно составени ресурси.\n\nПо основно, во уредникот се прикажува сателитски слој од [Bing Карти](http://www.bing.com/maps/),\nно како што шетате по картата и доближувате нови географски\nподрачја, стануваат достапни други извори. Некои земји, како САД, Франција и Данска имаат снимки со многу висок квалитет за некои подрачја.\n\nЗаднината понекогаш отстапува од картата поради грешка\nод страна на на заднината. Ако видите доста патишта поместени од  заднината,\nнемојте веднаш да ги поместувате за да се поклопат со неа. Прилагодете ја заднината, за да одговара на постоечките податоци стискајќи на „Поправи го порамнувањето“ на дното од поставките за заднината.\n",
                 "internet_access/ssid": {
                     "label": "SSID (име на мрежата)"
                 },
                 "internet_access/ssid": {
                     "label": "SSID (име на мрежата)"
                 },
-                "kerb": {
-                    "label": "Тротоарен пристапник"
-                },
                 "lamp_type": {
                     "label": "Вид"
                 },
                 "lamp_type": {
                     "label": "Вид"
                 },
index c7d844b027a9764fee68f80b00efad0491033bed..be5792e648e9ea2daed4722ef98968436d314b6d 100644 (file)
                 "title": "രേഖ"
             },
             "add_point": {
                 "title": "രേഖ"
             },
             "add_point": {
-                "title": "ബിന്ദു"
+                "title": "ബിന്ദു",
+                "tail": "ഒരു പോയിന്റ് ചേർക്കുന്നതിന് മാപ്പിൽ ക്ലിക്കുചെയ്യുക"
             },
             "browse": {
             },
             "browse": {
-                "title": "ബ്രൗസ് ചെയ്യുക"
+                "title": "ബ്രൗസ് ചെയ്യുക",
+                "description": "മാപ്പ് പാൻ ചെയ്ത് സൂം ചെയ്യുക"
             }
         },
         "operations": {
             }
         },
         "operations": {
+            "add": {
+                "annotation": {
+                    "point": "ഒരു ബിന്ദു ചേർത്തു"
+                }
+            },
             "continue": {
                 "title": "തുടരുക"
             },
             "continue": {
                 "title": "തുടരുക"
             },
+            "circularize": {
+                "title": "വൃത്താകൃതി"
+            },
             "orthogonalize": {
             "orthogonalize": {
-                "title": "ചതുരം"
+                "title": "ചതുരം",
+                "key": "S"
+            },
+            "straighten": {
+                "title": "നേരായ",
+                "description": "ഈ വരി നേരെയാക്കുക",
+                "key": "S"
+            },
+            "delete": {
+                "title": "ഇല്ലാതാക്കുക",
+                "description": {
+                    "single": "ഈ സവിശേഷത ശാശ്വതമായി ഇല്ലാതാക്കുക"
+                }
+            },
+            "disconnect": {
+                "key": "D"
+            },
+            "rotate": {
+                "title": "തിരിക്കുക"
+            },
+            "split": {
+                "title": "രണ്ടായി പിരിയുക"
             }
         },
             }
         },
+        "login": "ലോഗിൻ",
+        "logout": "പുറത്തുകടക്കുക",
+        "geometry": {
+            "point": "ബിന്ദു",
+            "line": "രേഖ",
+            "area": "പ്രദേശം"
+        },
         "intro": {
             "graph": {
                 "block_number": "<value for addr:block_number>",
         "intro": {
             "graph": {
                 "block_number": "<value for addr:block_number>",
                 "countrycode": "in"
             }
         },
                 "countrycode": "in"
             }
         },
+        "shortcuts": {
+            "editing": {
+                "operations": {
+                    "delete": "തിരഞ്ഞെടുത്ത ഫീച്ചറുകൾ ഇല്ലാതാക്കുക"
+                },
+                "commands": {
+                    "save": "മാറ്റങ്ങൾ സൂക്ഷിക്കുക"
+                }
+            }
+        },
         "presets": {
         "presets": {
+            "categories": {
+                "category-natural-line": {
+                    "name": "പ്രകൃതി സവിശേഷതകൾ"
+                },
+                "category-natural-point": {
+                    "name": "പ്രകൃതി സവിശേഷതകൾ"
+                },
+                "category-path": {
+                    "name": "പാത സവിശേഷതകൾ"
+                },
+                "category-rail": {
+                    "name": "റെയിൽ സവിശേഷതകൾ"
+                },
+                "category-road": {
+                    "name": "റോഡ് സവിശേഷതകൾ"
+                },
+                "category-water-area": {
+                    "name": "ജല സവിശേഷതകൾ"
+                },
+                "category-water-line": {
+                    "name": "ജല സവിശേഷതകൾ"
+                }
+            },
             "fields": {
                 "access": {
                     "types": {
             "fields": {
                 "access": {
                     "types": {
                     }
                 },
                 "address": {
                     }
                 },
                 "address": {
+                    "label": "വിലാസം",
                     "placeholders": {
                         "city": "നഗരം",
                     "placeholders": {
                         "city": "നഗരം",
+                        "city!vn": "നഗരം/പട്ടണം",
                         "country": "രാജ്യം",
                         "district": "ജില്ല",
                         "country": "രാജ്യം",
                         "district": "ജില്ല",
+                        "housenumber": "123",
+                        "neighbourhood": "അയല്പക്കം",
                         "place": "പ്രദേശം",
                         "postcode": "പോസ്റ്റ്കോഡ്",
                         "state": "സംസ്ഥാനം"
                         "place": "പ്രദേശം",
                         "postcode": "പോസ്റ്റ്കോഡ്",
                         "state": "സംസ്ഥാനം"
index 356244688957fd02fd692a712b72574873393b33..6184a47e7c14a606c5180db454a12dd2491ba80b 100644 (file)
@@ -95,7 +95,7 @@
                 "title": "Luruskan",
                 "description": "Luruskan garis ini.",
                 "key": "S",
                 "title": "Luruskan",
                 "description": "Luruskan garis ini.",
                 "key": "S",
-                "annotation": "Luruskan suatu garis.",
+                "annotation": "Suatu garis telah diluruskan.",
                 "too_bendy": "Pelurusan tidak dapat dibuat kerana garis terlalu bengkang-bengkok.",
                 "connected_to_hidden": "Pelurusan tidak dapat dibuat kerana garis bersambung dengan ciri yang tersorok."
             },
                 "too_bendy": "Pelurusan tidak dapat dibuat kerana garis terlalu bengkang-bengkok.",
                 "connected_to_hidden": "Pelurusan tidak dapat dibuat kerana garis bersambung dengan ciri yang tersorok."
             },
             "imperial": "Imperial"
         },
         "geometry": {
             "imperial": "Imperial"
         },
         "geometry": {
+            "point": "titik",
+            "vertex": "bucu",
             "line": "garis",
             "area": "kawasan",
             "relation": "hubungan"
             "line": "garis",
             "area": "kawasan",
             "relation": "hubungan"
                     "type": "Jenis",
                     "default": "Lalai"
                 }
                     "type": "Jenis",
                     "default": "Lalai"
                 }
-            }
+            },
+            "node": "Nod",
+            "relation": "Hubungan"
         },
         "background": {
             "percent_brightness": "{opacity}% kecerahan",
         },
         "background": {
             "percent_brightness": "{opacity}% kecerahan",
                 "tooltip": "Lorong Jalan Kaki, Laluan Kaki, Lorong Basikal, dll."
             },
             "buildings": {
                 "tooltip": "Lorong Jalan Kaki, Laluan Kaki, Lorong Basikal, dll."
             },
             "buildings": {
-                "description": "Bangunan-bangunan"
+                "description": "Bangunan-bangunan",
+                "tooltip": "Bangunan-bangunan, Tempat-tempat Berlindung, Garaj-garaj, dll."
             },
             "landuse": {
                 "description": "Gambaran Guna Tanah",
             },
             "landuse": {
                 "description": "Gambaran Guna Tanah",
                 "description": "Gambaran-Gambaran Air",
                 "tooltip": "Sungai-sungai, Tasik-tasik, Kolam-kolam, Lembangan-lembangan, dll."
             },
                 "description": "Gambaran-Gambaran Air",
                 "tooltip": "Sungai-sungai, Tasik-tasik, Kolam-kolam, Lembangan-lembangan, dll."
             },
+            "power": {
+                "description": "Gambaran-gambaran Kuasa Elektrik",
+                "tooltip": "Talian-talian Elektrik, Loji-loji Kuasa, Pencawang-pencawang, dll."
+            },
+            "past_future": {
+                "description": "Garis Masa",
+                "tooltip": "Cadangan, Pembinaan, Terabai, Diruntuhkan, dll."
+            },
             "others": {
             "others": {
-                "description": "Lain-lain"
+                "description": "Lain-lain",
+                "tooltip": "Yang Lain-lain"
             }
         },
         "restore": {
             }
         },
         "restore": {
             "view_on_osm": "Lihat dalam OSM",
             "facebook": "Kongsi melalui Facebook",
             "twitter": "Kongsi melalui Twitter",
             "view_on_osm": "Lihat dalam OSM",
             "facebook": "Kongsi melalui Facebook",
             "twitter": "Kongsi melalui Twitter",
-            "google": "Kongsi melalui Google+"
+            "google": "Kongsi melalui Google+",
+            "help_link_text": "Butiran"
         },
         "confirm": {
             "okay": "OK",
         },
         "confirm": {
             "okay": "OK",
         "splash": {
             "welcome": "Selamat datang! Ini ialah penyunting iD OpenStreetMap",
             "text": "Penyunting iD ialah suatu alat yang berkuasa tinggi tetapi sangat mudah digunakan untuk membuat sumbangan terhadap peta percuma yang terunggul di dunia. Ini ialah versi {version}. Untuk maklumat lanjut sila layari {website} dan laporkan pepijat di {github}.",
         "splash": {
             "welcome": "Selamat datang! Ini ialah penyunting iD OpenStreetMap",
             "text": "Penyunting iD ialah suatu alat yang berkuasa tinggi tetapi sangat mudah digunakan untuk membuat sumbangan terhadap peta percuma yang terunggul di dunia. Ini ialah versi {version}. Untuk maklumat lanjut sila layari {website} dan laporkan pepijat di {github}.",
-            "walkthrough": "Mulakan Panduan"
+            "walkthrough": "Mulakan Panduan",
+            "start": "Sunting Sekarang"
+        },
+        "source_switch": {
+            "live": "live",
+            "dev": "dev"
+        },
+        "version": {
+            "whats_new": "Yang terkini dalam iD {version}"
         },
         },
+        "tag_reference": {
+            "description": "Perincian",
+            "on_wiki": "{tag} pada wiki.osm.org"
+        },
+        "validations": {
+            "untagged_point": "Titik tanpa tag",
+            "untagged_line": "Garis tanpa tag",
+            "untagged_area": "Kawasan tanpa tag",
+            "untagged_relation": "Hubungan tanpa tag",
+            "deprecated_tags": "Tag-tag yang telah lapuk: {tags}"
+        },
+        "zoom": {
+            "in": "Zum Dekat",
+            "out": "Zum Jauh"
+        },
+        "cannot_zoom": "Had zum jauh telah dicapai dalam mod yang sedang dipakai.",
+        "full_screen": "Togol Skrin Penuh",
         "gpx": {
         "gpx": {
-            "local_layer": "Fail tempatan"
+            "local_layer": "Fail tempatan",
+            "drag_drop": "Tarik dan lepaskan suatu fail .gpx, .geojson atau .kml masuk halaman ini, atau klik butang di sebelah kanan untuk mengimbas"
         },
         "mapillary_images": {
         },
         "mapillary_images": {
+            "tooltip": "Gambar jalan dari Mapillary",
             "title": "Tindihan Gambar (Mapillary)"
         },
         "mapillary_signs": {
             "title": "Tindihan Isyarat Lalu Lintas (Mapillary)"
         },
             "title": "Tindihan Gambar (Mapillary)"
         },
         "mapillary_signs": {
             "title": "Tindihan Isyarat Lalu Lintas (Mapillary)"
         },
+        "mapillary": {
+            "view_on_mapillary": "Paparkan imej ini dalam Mapillary"
+        },
         "help": {
             "title": "Bantuan"
         },
         "intro": {
         "help": {
             "title": "Bantuan"
         },
         "intro": {
+            "ok": "OK",
             "graph": {
                 "block_number": "<value for addr:block_number>",
                 "county": "<value for addr:county>",
             "graph": {
                 "block_number": "<value for addr:block_number>",
                 "county": "<value for addr:county>",
                 "state": "<value for addr:state>",
                 "subdistrict": "<value for addr:subdistrict>",
                 "suburb": "<value for addr:suburb>",
                 "state": "<value for addr:state>",
                 "subdistrict": "<value for addr:subdistrict>",
                 "suburb": "<value for addr:suburb>",
-                "countrycode": "my"
+                "countrycode": "my",
+                "name": {
+                    "1st-avenue": "Lebuh Satu",
+                    "2nd-avenue": "Lebuh Dua",
+                    "4th-avenue": "Lebuh Empat",
+                    "5th-avenue": "Lebuh Lima",
+                    "6th-avenue": "Lebuh Enam",
+                    "6th-street": "Jalan Enam",
+                    "7th-avenue": "Lebuh Tujuh",
+                    "8th-avenue": "Lebuh Lapan",
+                    "9th-avenue": "Lebuh Sembilan",
+                    "10th-avenue": "Lebuh Sepuluh",
+                    "11th-avenue": "Lebuh Sebelas",
+                    "12th-avenue": "Lebuh Dua Belas"
+                }
             },
             "welcome": {
                 "title": "Selamat datang",
             },
             "welcome": {
                 "title": "Selamat datang",
-                "welcome": "Selamat datang! Diharap panduan ini membantu dalam menerangkan asas-asas menyunting OpenStreetMap."
+                "welcome": "Selamat datang! Diharap panduan ini membantu dalam menerangkan asas-asas menyunting OpenStreetMap.",
+                "practice": "Semua data dalam lintas semak ini hanyalah sekadar amali, dan suntingan anda dalam lintas semak ini tidak akan disimpan.",
+                "words": "Beberapa istilah dan konsep baru bakal diperkenalkan dalam lintas semak ini. Perkataan baru akan *dicondongkan*.",
+                "mouse": "Sebarang peranti input boleh digunakan untuk menyunting peta. Bagaimanapun, lintas semak ini menggunakan tetikus dengan butang kiri dan butang kanan. **Sekiranya anda ingin menyambung tetikus anda, sila sambungkannya dengan segera, dan kemudian klik OK.**",
+                "leftclick": "Apabila tutorial ini meminta anda untuk mengklik atau mengklik dua kali, ini menggunakan butang kiri tetikus. Bagi pengguna pad sentuh laptop pula boleh klik atau ketuk satu kali. **Klik kiri {num} kali.**",
+                "rightclick": "Kadang-kadang anda mungkin diarahkan untuk klik-kanan pada tetikus. Mungkin mirip dengan mengklik sambil menekan butang Control, atau mengetuk dua jari di pad sentuh. Ada sesetengah papan kekunci turut tersedia dengan kekunci 'menu' yang boleh berfungsi seolah-olah klik-kanan tetikus. **Klik-kanan {num} kali.**",
+                "chapters": "Setakat ini, semuanya elok-elok belaka! Anda boleh gunakan butang-butang di bawah untuk melangkau bab pada bila-bila masa, atau mengulang semula suatu bab yang dirasakan sukar. Ayuh! **Klik '{next}' untuk teruskan.**"
+            },
+            "navigation": {
+                "title": "Pengemudian",
+                "drag": "Bahagian peta utama menunjukkan data OpenStreetMap dengan suatu latar belakang.{br}Anda boleh menyorot peta dengan mengklik-kiri tetikus dan mengubah kedudukan tetikus anda sambil tidak melepaskan butang klik tetikus. Anda juga boleh menggunakan butang tanda anak panah pada papan kekunci anda. **Sorotkan peta!**",
+                "zoom": "Anda boleh zum masuk atau zum keluar dengan mentatal roda tetikus atau pad sentuh laptop, atau dengan mengklik pada butang {plus}/{minus}. **Zumkan peta!**",
+                "features": "Perkataan *gambaran-gambaran* digunakan untuk memperincikan objek-objek dalam peta. Setiap butiran dalam alam nyata boleh dipetakan sebagai suatu gambaran dalam OpenStreetMap.",
+                "points_lines_areas": "Gambaran-gambaran peta diwakilkan dengan *titik-titik*, *garis-garis*, atau *kawasan-kawasan*.",
+                "nodes_ways": "Dalam OpenStreetMap, titik-titik ini kadang kala dirujuk sebagai nod-nod, manakala garis-garis dan kawasan-kawasan pula mungkin dirujuk sebagai *jalan-jalan*.",
+                "click_townhall": "Semua gambaran dalam peta boleh dipilih dengan satu klik terhadapnya. **Klik titik ini untuk memilihnya.**",
+                "selected_townhall": "Bagus! Titik ini telah dipilih. Gambaran yang telah dipilih akan berkunang-kunang.",
+                "editor_townhall": "Setelah suatu gambaran telah dipilih, *penyunting gambaran* akan dipaparkan di sisi peta.",
+                "preset_townhall": "Bahagian paling atas pada penyunting gambaran menunjukkan ciri-ciri gambaran. Titik ini ialah sebuah{preset}.",
+                "fields_townhall": "Bahagian tengah penyunting gambaran mempunyai medan-medan yang menunjukkan sifat-sifat gambaran, seperti nama dan alamatnya.",
+                "close_townhall": "**Tutup penyunting gambaran dengan menekan butang Escape atau mengklik butang {button} di bucu atas sekali.**",
+                "search_street": "Anda boleh menggelintar gambaran-gambaran yang sedang dipaparkan di peta, atau di seluruh dunia. **Gelintar '{name}'.**",
+                "choose_street": "**Pilih {name} dari senarai untuk memilih yang ini.**",
+                "selected_street": "Bagus! {name} telah dipilih."
+            },
+            "points": {
+                "title": "Titik-titik"
+            },
+            "areas": {
+                "title": "Kawasan-kawasan",
+                "choose_playground": "**Pilih {preset} dari senarai.**",
+                "add_field": "Tempat permainan kanak-kanak ini tidak mempunyai nama rasmi, jadi biarkan medan Nama kosong sahaja.{br}Maka eloklah kita menambah sedikit maklumat tambahan tentang tempat permainan ini dalam medan Perincian. **Buka senarai Tambah Medan.**",
+                "choose_field": "**Pilih {field} dari senarai.**",
+                "retry_add_field": "Medan {field} tidak dipilih. Sila cuba sekali lagi."
             },
             "lines": {
             },
             "lines": {
-                "title": "Garis-garis"
+                "title": "Garis-garis",
+                "choose_category_road": "**Pilih {category} dari senarai.**",
+                "retry_delete": "Butang Delete tidak diklik. Sila cuba sekali lagi."
             },
             "buildings": {
                 "title": "Bangunan-bangunan"
             },
             "buildings": {
                 "title": "Bangunan-bangunan"
                 "start": "Mulakan pemetaan!"
             }
         },
                 "start": "Mulakan pemetaan!"
             }
         },
+        "shortcuts": {
+            "browsing": {
+                "navigation": {
+                    "title": "Pengemudian"
+                },
+                "help": {
+                    "title": "Bantuan"
+                },
+                "display_options": {
+                    "map_data": "Tunjukkan pilihan data peta"
+                }
+            },
+            "editing": {
+                "commands": {
+                    "save": "Simpan perubahan"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
index 7604a03aab990293eea98080d929938e4fc28e4b..314a3b3de65f306faf2af8edc3fa3032ba75c598 100644 (file)
         },
         "area_fill": {
             "wireframe": {
         },
         "area_fill": {
             "wireframe": {
-                "description": "Niet Inkleuren (Wireframe)",
+                "description": "Niet inkleuren (wireframe)",
                 "tooltip": "De wireframe-modus maakt het gemakkelijk de achtergrondbeelden te zien."
             },
             "partial": {
                 "tooltip": "De wireframe-modus maakt het gemakkelijk de achtergrondbeelden te zien."
             },
             "partial": {
-                "description": "Gedeeltelijk Inkleuren",
+                "description": "Gedeeltelijk inkleuren",
                 "tooltip": "Vlakken worden enkel ingekleurd langs hun binnenranden. (Aanbevolen voor beginnende cartografen)"
             },
             "full": {
                 "tooltip": "Vlakken worden enkel ingekleurd langs hun binnenranden. (Aanbevolen voor beginnende cartografen)"
             },
             "full": {
-                "description": "Volledig Inkleuren",
+                "description": "Volledig inkleuren",
                 "tooltip": "Vlakken worden steeds volledig ingekleurd."
             }
         },
                 "tooltip": "Vlakken worden steeds volledig ingekleurd."
             }
         },
         "help": {
             "title": "Hulp",
             "help": "# Hulp\n\nDit is een bewerkingsprogramma voor\n[OpenStreetMap](http://www.openstreetmap.org/), de vrije en bewerkbare kaart van de wereld. Je kan\nhet gebruiken om data in je regio toe te voegen en bij te werken.\nZo maak je de open-source- en open-data-kaart van de wereld\nbeter voor iedereen.\n\nWijzingen die je maakt aan deze kaart worden zichtbaar voor iedereen\ndie OpenStreetMap gebruikt. Om te kunnen bewerken, zal je moeten\n[inloggen](https://www.openstreetmap.org/login).\n\nDe [iD-bewerker](http://ideditor.com/) is een samenwerkingsproject\nwaarvan de [broncode beschikbaar is op GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Hulp",
             "help": "# Hulp\n\nDit is een bewerkingsprogramma voor\n[OpenStreetMap](http://www.openstreetmap.org/), de vrije en bewerkbare kaart van de wereld. Je kan\nhet gebruiken om data in je regio toe te voegen en bij te werken.\nZo maak je de open-source- en open-data-kaart van de wereld\nbeter voor iedereen.\n\nWijzingen die je maakt aan deze kaart worden zichtbaar voor iedereen\ndie OpenStreetMap gebruikt. Om te kunnen bewerken, zal je moeten\n[inloggen](https://www.openstreetmap.org/login).\n\nDe [iD-bewerker](http://ideditor.com/) is een samenwerkingsproject\nwaarvan de [broncode beschikbaar is op GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Bewerken & Opslaan\n\nDit kaartbewerkingsprogramma is ontworpen om voornamelijk online te gebruikt te worden. Je gebruikt hem op dit moment via een website.\n\n### Objecten Selecteren\n\nOm objecten in een kaart te selecteren, zoals een weg of interessant punt, moet je op de kaart erop klikken. Het geselecteerde object zal dan oplichten, er zal een paneel met details geopend worden en een menu zal getoond worden met dingen die je met dit object kan doen.\n\nOm meerdere objecten te kunnen selecteren, hou je de 'Shift'-toets ingedrukt terwijl je de objecten aanklikt, of terwijl je een rechthoek tekent op de kaart. Dat laatste zal een kader tonen waarbinnen alle objecten geselecteerd worden.\n\n### Bewerkingen Opslaan\n\nAls je wijzigingen maakt, zoals het bewerken van wegen, gebouwen en andere plaatsen, worden deze eerst lokaal bijgehouden totdat je ze op de server opslaat. Maak je geen zorgen als je een fout maakt – je kan wijzigingen altijd ongedaan maken door op de 'Ongedaan maken'-knop te klikken en ze weer herstellen door op de 'Opnieuw doen'-knop te klikken.\n\nKlik op 'Opslaan' om een groep van bewerkingen op te slaan – bijvoorbeeld als je een gebied of dorp hebt afgerond en je aan een ander gebied wil beginnen. Je krijgt de mogelijkheid om te herzien wat je hebt aangepast en de editor geeft je suggesties voor verbeteringen en waarschuwingen als er iets mis lijkt te zijn.\n\nAls alles er goed uit ziet kun je kort commentaar toevoegen, dat de wijziging die je hebt gemaakt beschrijft. Klik daarna nogmaals op 'Opslaan' om de wijzigingen op te sturen naar [OpenStreetMap.org](http://www.openstreetmap.org/), waar ze zichtbaar zijn voor alle gebruikers en voor anderen om op voort te bouwen of te verbeteren.\n\nAls je in een sessie niet al je bewerkingen door kan voeren kun je het venster van de editor sluiten en later terugkomen (in dezelfde browser op dezelfde computer) en de bewerkapplicatie zal je aanbieden je werk te herstellen.\n\n### Het kaartbewerkingsprogramma gebruiken\n\nEen lijst van beschikbare sneltoetsen kan je [hier](http://wiki.openstreetmap.org/wiki/NL:iD/Shortcuts) vinden.\n",
+            "editing_saving": "# Bewerken & opslaan\n\nDit kaartbewerkingsprogramma is ontworpen om voornamelijk online te gebruikt te worden. Je gebruikt hem op dit moment via een website.\n\n### Objecten selecteren\n\nOm objecten in een kaart te selecteren, zoals een weg of interessant punt, moet je op de kaart erop klikken. Het geselecteerde object zal dan oplichten en er zal een paneel met details geopend worden. Je kan een menu met dingen die je met dit object kan doen openen door te rechtsklikken op de selectie.\n\nOm meerdere objecten te kunnen selecteren, hou je de 'Shift'-toets ingedrukt terwijl je de objecten aanklikt, of terwijl je een rechthoek tekent op de kaart. Dat laatste zal een kader tonen waarbinnen alle objecten geselecteerd worden.\n\n### Bewerkingen opslaan\n\nAls je wijzigingen maakt, zoals het bewerken van wegen, gebouwen en andere plaatsen, worden deze eerst lokaal bijgehouden totdat je ze op de server opslaat. Maak je geen zorgen als je een fout maakt – je kan wijzigingen altijd ongedaan maken door op de 'Ongedaan maken'-knop te klikken en ze weer herstellen door op de 'Opnieuw doen'-knop te klikken.\n\nKlik op 'Opslaan' om een groep van bewerkingen op te slaan – bijvoorbeeld als je een gebied of dorp hebt afgerond en je aan een ander gebied wil beginnen. Je krijgt de mogelijkheid om te herzien wat je hebt aangepast en de editor geeft je suggesties voor verbeteringen en waarschuwingen als er iets mis lijkt te zijn.\n\nAls alles er goed uit ziet kun je kort commentaar toevoegen, dat de wijziging die je hebt gemaakt beschrijft. Klik daarna nogmaals op 'Opslaan' om de wijzigingen op te sturen naar [OpenStreetMap.org](http://www.openstreetmap.org/), waar ze zichtbaar zijn voor alle gebruikers en voor anderen om op voort te bouwen of te verbeteren.\n\nAls je in een sessie niet al je bewerkingen door kan voeren kun je het venster van de editor sluiten en later terugkomen (in dezelfde browser op dezelfde computer) en de bewerkapplicatie zal je aanbieden je werk te herstellen.\n\n### Het kaartbewerkingsprogramma gebruiken\n\nJe kan een lijst van beschikbare sneltoetsen openen door op de `?`-toets op het toetsenbord te drukken.\n",
             "roads": "# Wegen\n\nJe kan met deze editor wegen maken, verbeteren en verwijderen. Wegen zijn er in allerlei soorten en maten: landweggetjes, snelwegen, paadjes, fietspaden en veel meer – ieder stukje dat vaak wordt gebruikt kan in kaart worden gebracht.\n\n### Selecteren\n\nKlik op een weg om deze te selecteren. De omtrek verschijnt samen met een klein menu op de kaart en een schermpje met informatie over de weg.\n\n### Aanpassen\n\nVaak kom je wegen tegen, die niet precies over het beeldmateriaal of de GPS-route erachter lopen. Je kan deze wegen aanpassen, zodat ze op de juiste plek komen te liggen.\n\nKlik eerst op de weg die je wil aanpassen. Deze zal dan oplichten en er verschijnen knooppunten langs de lijn die je kan verslepen naar een betere plek. Als je nieuwe knooppunten wil toevoegen voor meer detaillering, dubbelklik op een weggedeelte zonder een knooppunt en er wordt een nieuwe ingevoegd.\n\nAls een weg in het echt is verbonden met een andere weg, maar op de kaart niet, dan versleep je een van de puntjes op de andere weg om ze te verbinden. Dat wegen met elkaar zijn verbonden is belangrijk voor de kaart en essentieel om een routebeschrijving te kunnen maken.\n\nJe kan bovendien het 'Verschuif'-gereedschap aanklikken of de 'V'-sneltoets indrukken om de gehele weg in een keer te verplaatsen, en opnieuw klikken om deze verplaatsing te bevestigen.\n\n### Verwijderen\n\nAls een weg helemaal verkeerd is – je hebt ter plaatse gecontroleerd dat de weg er niet is – dan kan je hem verwijderen, zodat hij van de kaart verdwijnt. Wees voorzichtig met het verwijderen van objecten: zoals bij iedere aanpassing is het resultaat voor iedereen zichtbaar en satellietbeelden zijn vaak verouderd, dus de weg zou gewoon nieuw aangelegd kunnen zijn.\n\nJe kan een weg verwijderen door er op te klikken om hem te selecteren, waarna je op het prullenbakicoon klikt of de 'Verwijderen'-toets drukt.\n\n### Aanmaken\n\nHeb je ergens een weg gevonden die nog niet op de kaart staat? Klik op het 'Lijn'-gereedschap in de linkerbovenhoek van de editor of druk op de sneltoets '2' om een lijn te tekenen.\n\nKlik op het begin van de weg op de kaart en begin te tekenen. Als de weg zich vertakt van de bestaande weg, begin dan op de plek waar ze elkaar kruisen.\n\nKlik dan de punten langs de weg, zodat deze het juiste tracé volgt, volgens het satellietbeeld of de GPS-route. Als de weg die je aan het tekenen bent een andere weg kruist, verbind deze dan door op het kruispunt te klikken. Als je klaar met tekenen bent, dubbelklik of druk op 'Return' of 'Enter' op je toetsenbord.\n",
             "gps": "# GPS\n\nGPS-data is een waardevolle databron voor OpenStreetMap. Dit bewerkingsprogramma ondersteunt lokale GPS-paden – '.gpx'-bestanden op je eigen computer. Je kan dit soort paden opnemen met een aantal smartphone-apps of met aparte GPS-toestellen.\n\nVoor meer informatie over hoe je onderzoek kan doen met GPS, kan je terecht op [Mapping with a smartphone, GPS, or paper (Engels)](http://learnosm.org/en/mobile-mapping/) of [Sur le terrain avec un GPS (Frans)](http://learnosm.org/fr/beginner/using-gps/).\n\nOm een GPX-pad te gebruiken bij het karteren, sleep je het GPX-bestand op het kaartbewerkingsprogramma. Als het wordt herkend, zal het op de kaart worden getoond als een helderpaarse lijn. Open het menu 'Kaartgegevens' aan de rechterkant om deze nieuwe GPX-laag aan of uit te zetten of hem volledig in beeld te brengen.\n\nHet GPX-pad wordt niet rechtstreeks als een weg geüpload naar OpenStreetMap. De beste manier om het te gebruiken is als een hulpmiddel om op de kaart tekenen. Je wordt aangemoedigd het ook te [uploaden naar OpenStreetMap](http://www.openstreetmap.org/trace/create), zodat anderen het op dezelfde manier kunnen gebruiken.\n",
             "imagery": "# Beeldmateriaal\n\nLuchtfoto's vormen een belangrijke bron bij het maken van de kaart. Een combinatie van luchtfoto's, satellietbeelden en vrij beschikbare bronnen is beschikbaar in de editor onder het menu 'Achtergrondinstellingen' aan de linkerzijde.\n\nOp veel plaatsen wordt standaard een [Bing Maps](http://www.bing.com/maps/)-satellietbeeld in de editor getoond, maar als je de kaart verschaalt of verplaatst naar andere gebieden, worden nieuwe bronnen getoond. Bepaalde gebieden, zoals Vlaanderen en sommige plaatsen in de Verenigde Staten, Frankrijk en Denemarken hebben beeldmateriaal van zeer hoge kwaliteit.\n\nSoms is het beeldmateriaal ten opzichte van de kaart verschoven door een fout van de leverancier van het beeldmateriaal. Als je ziet dat een heleboel wegen verschoven zijn ten opzichte van de achtergrond, ga deze dan niet meteen allemaal verplaatsen zodat de ligging overeenkomt met de achtergrond. In plaats daarvan kan je het beeldmateriaal aanpassen, zodat de ligging overeenkomt met de bestaande gegevens door op de knop 'Verbeter de ligging' te klikken onderaan de 'Achtergrondinstellingen'.\n",
             "roads": "# Wegen\n\nJe kan met deze editor wegen maken, verbeteren en verwijderen. Wegen zijn er in allerlei soorten en maten: landweggetjes, snelwegen, paadjes, fietspaden en veel meer – ieder stukje dat vaak wordt gebruikt kan in kaart worden gebracht.\n\n### Selecteren\n\nKlik op een weg om deze te selecteren. De omtrek verschijnt samen met een klein menu op de kaart en een schermpje met informatie over de weg.\n\n### Aanpassen\n\nVaak kom je wegen tegen, die niet precies over het beeldmateriaal of de GPS-route erachter lopen. Je kan deze wegen aanpassen, zodat ze op de juiste plek komen te liggen.\n\nKlik eerst op de weg die je wil aanpassen. Deze zal dan oplichten en er verschijnen knooppunten langs de lijn die je kan verslepen naar een betere plek. Als je nieuwe knooppunten wil toevoegen voor meer detaillering, dubbelklik op een weggedeelte zonder een knooppunt en er wordt een nieuwe ingevoegd.\n\nAls een weg in het echt is verbonden met een andere weg, maar op de kaart niet, dan versleep je een van de puntjes op de andere weg om ze te verbinden. Dat wegen met elkaar zijn verbonden is belangrijk voor de kaart en essentieel om een routebeschrijving te kunnen maken.\n\nJe kan bovendien het 'Verschuif'-gereedschap aanklikken of de 'V'-sneltoets indrukken om de gehele weg in een keer te verplaatsen, en opnieuw klikken om deze verplaatsing te bevestigen.\n\n### Verwijderen\n\nAls een weg helemaal verkeerd is – je hebt ter plaatse gecontroleerd dat de weg er niet is – dan kan je hem verwijderen, zodat hij van de kaart verdwijnt. Wees voorzichtig met het verwijderen van objecten: zoals bij iedere aanpassing is het resultaat voor iedereen zichtbaar en satellietbeelden zijn vaak verouderd, dus de weg zou gewoon nieuw aangelegd kunnen zijn.\n\nJe kan een weg verwijderen door er op te klikken om hem te selecteren, waarna je op het prullenbakicoon klikt of de 'Verwijderen'-toets drukt.\n\n### Aanmaken\n\nHeb je ergens een weg gevonden die nog niet op de kaart staat? Klik op het 'Lijn'-gereedschap in de linkerbovenhoek van de editor of druk op de sneltoets '2' om een lijn te tekenen.\n\nKlik op het begin van de weg op de kaart en begin te tekenen. Als de weg zich vertakt van de bestaande weg, begin dan op de plek waar ze elkaar kruisen.\n\nKlik dan de punten langs de weg, zodat deze het juiste tracé volgt, volgens het satellietbeeld of de GPS-route. Als de weg die je aan het tekenen bent een andere weg kruist, verbind deze dan door op het kruispunt te klikken. Als je klaar met tekenen bent, dubbelklik of druk op 'Return' of 'Enter' op je toetsenbord.\n",
             "gps": "# GPS\n\nGPS-data is een waardevolle databron voor OpenStreetMap. Dit bewerkingsprogramma ondersteunt lokale GPS-paden – '.gpx'-bestanden op je eigen computer. Je kan dit soort paden opnemen met een aantal smartphone-apps of met aparte GPS-toestellen.\n\nVoor meer informatie over hoe je onderzoek kan doen met GPS, kan je terecht op [Mapping with a smartphone, GPS, or paper (Engels)](http://learnosm.org/en/mobile-mapping/) of [Sur le terrain avec un GPS (Frans)](http://learnosm.org/fr/beginner/using-gps/).\n\nOm een GPX-pad te gebruiken bij het karteren, sleep je het GPX-bestand op het kaartbewerkingsprogramma. Als het wordt herkend, zal het op de kaart worden getoond als een helderpaarse lijn. Open het menu 'Kaartgegevens' aan de rechterkant om deze nieuwe GPX-laag aan of uit te zetten of hem volledig in beeld te brengen.\n\nHet GPX-pad wordt niet rechtstreeks als een weg geüpload naar OpenStreetMap. De beste manier om het te gebruiken is als een hulpmiddel om op de kaart tekenen. Je wordt aangemoedigd het ook te [uploaden naar OpenStreetMap](http://www.openstreetmap.org/trace/create), zodat anderen het op dezelfde manier kunnen gebruiken.\n",
             "imagery": "# Beeldmateriaal\n\nLuchtfoto's vormen een belangrijke bron bij het maken van de kaart. Een combinatie van luchtfoto's, satellietbeelden en vrij beschikbare bronnen is beschikbaar in de editor onder het menu 'Achtergrondinstellingen' aan de linkerzijde.\n\nOp veel plaatsen wordt standaard een [Bing Maps](http://www.bing.com/maps/)-satellietbeeld in de editor getoond, maar als je de kaart verschaalt of verplaatst naar andere gebieden, worden nieuwe bronnen getoond. Bepaalde gebieden, zoals Vlaanderen en sommige plaatsen in de Verenigde Staten, Frankrijk en Denemarken hebben beeldmateriaal van zeer hoge kwaliteit.\n\nSoms is het beeldmateriaal ten opzichte van de kaart verschoven door een fout van de leverancier van het beeldmateriaal. Als je ziet dat een heleboel wegen verschoven zijn ten opzichte van de achtergrond, ga deze dan niet meteen allemaal verplaatsen zodat de ligging overeenkomt met de achtergrond. In plaats daarvan kan je het beeldmateriaal aanpassen, zodat de ligging overeenkomt met de bestaande gegevens door op de knop 'Verbeter de ligging' te klikken onderaan de 'Achtergrondinstellingen'.\n",
                 "intersect": "Klik of gebruik de spatiebalk om meer knooppunten aan de lijn toe te voegen.{br}Wegen maken deel uit van het wegennetwerk. Het is belangrijk dat de lijnen daarin goed verbonden zijn, anders werken navigatietoepassingen niet. **Klik op {name} om een kruispunt te maken dat de twee lijnen verbindt.**",
                 "retry_intersect": "De weg moet een punt gemeenschappelijk hebben met {name}. Laten we opnieuw proberen!",
                 "continue_line": "Teken de lijn voor deze nieuwe straat verder in. Onthou dat je de kaart kan verslepen en zoomen als dat nodig is.{br}Als je klaar bent met tekenen, klik dan nogmaals op het laatste knooppunt. **Werk de straat af.**",
                 "intersect": "Klik of gebruik de spatiebalk om meer knooppunten aan de lijn toe te voegen.{br}Wegen maken deel uit van het wegennetwerk. Het is belangrijk dat de lijnen daarin goed verbonden zijn, anders werken navigatietoepassingen niet. **Klik op {name} om een kruispunt te maken dat de twee lijnen verbindt.**",
                 "retry_intersect": "De weg moet een punt gemeenschappelijk hebben met {name}. Laten we opnieuw proberen!",
                 "continue_line": "Teken de lijn voor deze nieuwe straat verder in. Onthou dat je de kaart kan verslepen en zoomen als dat nodig is.{br}Als je klaar bent met tekenen, klik dan nogmaals op het laatste knooppunt. **Werk de straat af.**",
-                "choose_category_road": "**Kies {category} uit de lijst**",
+                "choose_category_road": "**Selecteer {category} in de lijst.**",
                 "choose_preset_residential": "Er zijn veel soorten wegen, maar dit is een straat. **Kies {preset}.**",
                 "retry_preset_residential": "Je hebt niet het {preset}-type geselecteerd. **Klik hier om opnieuw te kiezen.**",
                 "name_road": "**Geef deze weg een naam, en sluit dan de objectbewerker met escape, enter, of de {button}-knop.**",
                 "choose_preset_residential": "Er zijn veel soorten wegen, maar dit is een straat. **Kies {preset}.**",
                 "retry_preset_residential": "Je hebt niet het {preset}-type geselecteerd. **Klik hier om opnieuw te kiezen.**",
                 "name_road": "**Geef deze weg een naam, en sluit dan de objectbewerker met escape, enter, of de {button}-knop.**",
                 "title": "Gebouwen",
                 "add_building": "OpenStreetMap is de grootste verzameling gebouwen ter wereld.{br}Je kan aan deze verzameling meehelpen door gebouwen in te tekenen die er nog niet instaan. **Klik op de knop \"{button} Vlak\" om een nieuw vlak toe te voegen.**",
                 "start_building": "Laten we dit huis intekenen door zijn omtrek te volgen.{br}Gebouwen teken je zo nauwkeurig mogelijk in langs hun grondplan. **Klik of druk op de spatiebalk om het eerste knooppunt op een van de hoeken van het gebouw te plaatsen.**",
                 "title": "Gebouwen",
                 "add_building": "OpenStreetMap is de grootste verzameling gebouwen ter wereld.{br}Je kan aan deze verzameling meehelpen door gebouwen in te tekenen die er nog niet instaan. **Klik op de knop \"{button} Vlak\" om een nieuw vlak toe te voegen.**",
                 "start_building": "Laten we dit huis intekenen door zijn omtrek te volgen.{br}Gebouwen teken je zo nauwkeurig mogelijk in langs hun grondplan. **Klik of druk op de spatiebalk om het eerste knooppunt op een van de hoeken van het gebouw te plaatsen.**",
-                "continue_building": "Teken de omtrek van het gebouw verder in. Onthou dat je de kaart kan verslepen en zoomen als dat nodig is.{br}Sluit het gebouw door op enter te drukken of door nogmaals op het eerste of laatste knooppunt te klikken. **Werk het gebouw af.**",
+                "continue_building": "Teken de omtrek van het gebouw verder in. Onthou dat je kan inzoomen om gedetailleerder te werken.{br}Sluit het gebouw door op enter te drukken of door nogmaals op het eerste of laatste knooppunt te klikken. **Werk het gebouw af.**",
                 "retry_building": "Je had wat moeite met de knooppunten in de hoeken van het gebouw te zetten. Probeer opnieuw!",
                 "choose_category_building": "**Kies {category} uit de lijst.**",
                 "choose_preset_house": "Er zijn veel verschillende soorten gebouwen, maar dit is duidelijk een huis.{br}Als je niet zeker bent van het type, is het oké om het algemene Gebouw-type te kiezen. **Kies {preset}.**",
                 "retry_building": "Je had wat moeite met de knooppunten in de hoeken van het gebouw te zetten. Probeer opnieuw!",
                 "choose_category_building": "**Kies {category} uit de lijst.**",
                 "choose_preset_house": "Er zijn veel verschillende soorten gebouwen, maar dit is duidelijk een huis.{br}Als je niet zeker bent van het type, is het oké om het algemene Gebouw-type te kiezen. **Kies {preset}.**",
                 "start": "Karteer de wereld!"
             }
         },
                 "start": "Karteer de wereld!"
             }
         },
+        "shortcuts": {
+            "title": "Sneltoetsen",
+            "tooltip": "Toon het overzicht met sneltoetsen.",
+            "key": {
+                "alt": "Alt",
+                "backspace": "Backspace",
+                "cmd": "Cmd",
+                "ctrl": "Ctrl",
+                "delete": "Delete",
+                "del": "Del",
+                "end": "End",
+                "enter": "Enter",
+                "esc": "Esc",
+                "home": "Home",
+                "option": "Option",
+                "pause": "Pause",
+                "pgdn": "PgDn",
+                "pgup": "PgUp",
+                "return": "Return",
+                "shift": "Shift",
+                "space": "Space"
+            },
+            "gesture": {
+                "drag": "sleep"
+            },
+            "or": "-of-",
+            "browsing": {
+                "title": "Rondbewegen",
+                "navigation": {
+                    "title": "Navigatie",
+                    "pan": "Kaart verschuiven",
+                    "pan_more": "Kaart een schermgrootte verschuiven",
+                    "zoom": "Inzoomen / Uitzoomen",
+                    "zoom_more": "Veel inzoomen / uitzoomen"
+                },
+                "help": {
+                    "title": "Hulp",
+                    "help": "Toon hulp/documentatie",
+                    "keyboard": "Sneltoetsen tonen"
+                },
+                "display_options": {
+                    "title": "Weergaveopties",
+                    "background": "Achtergrondopties tonen",
+                    "background_switch": "Naar laatstgebruikte achtergrond wisselen",
+                    "map_data": "Opties voor kaartgegevens tonen",
+                    "fullscreen": "Gebruik volledig scherm",
+                    "wireframe": "Wireframemodus aan/uit",
+                    "minimap": "Minikaartje aan/uit"
+                },
+                "selecting": {
+                    "title": "Objecten selecteren",
+                    "select_one": "Eén object selecteren",
+                    "select_multi": "Meerdere objecten selecteren",
+                    "lasso": "Objecten selecteren met lasso"
+                },
+                "with_selected": {
+                    "title": "Met object geselecteerd",
+                    "infobox": "Info/meting-kader open/dicht",
+                    "edit_menu": "Bewerkmenu open/dicht"
+                },
+                "vertex_selected": {
+                    "title": "Met knoop geselecteerd",
+                    "previous": "Naar vorige knoop springen",
+                    "next": "Naar volgende knoop springen",
+                    "first": "Naar eerste knoop springen",
+                    "last": "Naar laatste knoop springen",
+                    "change_parent": "Van lijn wisselen"
+                }
+            },
+            "editing": {
+                "title": "Bewerken",
+                "drawing": {
+                    "title": "Tekenen",
+                    "add_point": "'Punt toevoegen'-modus",
+                    "add_line": "'Lijn toevoegen'-modus",
+                    "add_area": "'Vlak toevoegen'-modus",
+                    "place_point": "Punt plaatsen",
+                    "disable_snap": "Ingedrukt houden om punt-magnetisme uit te zetten",
+                    "stop_line": "Tekenen van lijn of vlak beëindigen"
+                },
+                "operations": {
+                    "title": "Operaties",
+                    "continue_line": "Lijn verderzetten bij geselecteerde knoop",
+                    "merge": "Geselecteerde objecten samenvoegen",
+                    "disconnect": "Objecten bij geselecteerde knoop losmaken",
+                    "split": "Lijn bij geselecteerde knoop in twee splitsen",
+                    "reverse": "Lijn omkeren",
+                    "move": "Geselecteerde objecten verplaatsen",
+                    "rotate": "Geselecteerde objecten draaien",
+                    "orthogonalize": "Lijn rechtmaken / Hoeken van vlak haaks maken",
+                    "circularize": "Vlak of gesloten lijn rond maken",
+                    "reflect_long": "Objecten rond lange as spiegelen",
+                    "reflect_short": "Objecten rond korte as spiegelen",
+                    "delete": "Geselecteerde objecten verwijderen"
+                },
+                "commands": {
+                    "title": "Commando's",
+                    "copy": "Geselecteerde objecten kopiëren",
+                    "paste": "Geselecteerde objecten plakken",
+                    "undo": "Laatste actie ongedaan maken",
+                    "redo": "Ongedaan gemaakte actie opnieuw uitvoeren",
+                    "save": "Wijzigingen opslaan"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                 "maxstay": {
                     "label": "Maximale verblijftijd"
                 },
                 "maxstay": {
                     "label": "Maximale verblijftijd"
                 },
+                "maxweight": {
+                    "label": "Maximaal gewicht"
+                },
                 "mtb/scale": {
                     "label": "Mountain Bike Moeilijkheidsgraad",
                     "options": {
                 "mtb/scale": {
                     "label": "Mountain Bike Moeilijkheidsgraad",
                     "options": {
                 "craft/confectionery": {
                     "name": "Snoepmakerij"
                 },
                 "craft/confectionery": {
                     "name": "Snoepmakerij"
                 },
+                "craft/distillery": {
+                    "name": "Destilleerderij",
+                    "terms": "stokerij,distillerij,distilleerderij,destillerij,destillatie,whisky,gin,alcohol,jenever,brandewijn"
+                },
                 "craft/dressmaker": {
                     "name": "Kleermaker voornamelijk voor vrouwen",
                     "terms": "kleermaker,kleedjes,jurken,maatwerk,kleren,kledij"
                 "craft/dressmaker": {
                     "name": "Kleermaker voornamelijk voor vrouwen",
                     "terms": "kleermaker,kleedjes,jurken,maatwerk,kleren,kledij"
                     "name": "Elektricien",
                     "terms": "monteur,elektriciteit,installatie,stielman,elektrisch"
                 },
                     "name": "Elektricien",
                     "terms": "monteur,elektriciteit,installatie,stielman,elektrisch"
                 },
+                "craft/electronics_repair": {
+                    "name": "Electronicaherstelwinkel",
+                    "terms": "electronica herstel winkel,herstellingen,gsm-herstelwinkel,telefoonherstelwinkel,smartphoneherstelwinkel,schermherstelwinkel,herstelwinkel"
+                },
                 "craft/gardener": {
                     "name": "Tuinman"
                 },
                 "craft/gardener": {
                     "name": "Tuinman"
                 },
                     "name": "Fietspad",
                     "terms": "rijwielpad,fietssnelweg,flitsfietspad"
                 },
                     "name": "Fietspad",
                     "terms": "rijwielpad,fietssnelweg,flitsfietspad"
                 },
+                "highway/elevator": {
+                    "name": "Lift"
+                },
                 "highway/footway": {
                     "name": "Wandelpad",
                     "terms": "voetpad"
                 "highway/footway": {
                     "name": "Wandelpad",
                     "terms": "voetpad"
                     "name": "Puinhelling"
                 },
                 "natural/scrub": {
                     "name": "Puinhelling"
                 },
                 "natural/scrub": {
-                    "name": "Ruigte"
+                    "name": "Ruigte",
+                    "terms": "struiken"
                 },
                 "natural/spring": {
                     "name": "Bron"
                 },
                 "natural/spring": {
                     "name": "Bron"
                     "name": "Antiquair",
                     "terms": "antiek,winkel"
                 },
                     "name": "Antiquair",
                     "terms": "antiek,winkel"
                 },
+                "shop/appliance": {
+                    "name": "Huishoudelijkeapparatuurwinkel",
+                    "terms": "huisraadwinkel,huishoudelijke apparatuur"
+                },
                 "shop/art": {
                     "name": "Kunstwinkel",
                     "terms": "galerij,kunstgalerij,galerie,kunstgalerie,tentoonstelling"
                 "shop/art": {
                     "name": "Kunstwinkel",
                     "terms": "galerij,kunstgalerij,galerie,kunstgalerie,tentoonstelling"
index 582c25e7b0886003ea6209de2ede6454c2484eb7..277a4b2188438c135b38640fe7229518a8f3b9f7 100644 (file)
@@ -84,8 +84,8 @@
                 },
                 "key": "S",
                 "annotation": {
                 },
                 "key": "S",
                 "annotation": {
-                    "line": "Stworzono kąty proste z narożników linii.",
-                    "area": "Stworzono kąty proste obszaru."
+                    "line": "Utworzono kąty proste z narożników linii.",
+                    "area": "Utworzono kąty proste obszaru."
                 },
                 "not_squarish": "Nie można stworzyć kątów prostych, gdyż obiekt nie posiada czterech boków.",
                 "too_large": "Nie można poprawić równoległości tego obiektu, ponieważ nie jest on wystarczająco widoczny.",
                 },
                 "not_squarish": "Nie można stworzyć kątów prostych, gdyż obiekt nie posiada czterech boków.",
                 "too_large": "Nie można poprawić równoległości tego obiektu, ponieważ nie jest on wystarczająco widoczny.",
             "rateLimit": "API ogranicza anonimowe połączenia. Możesz je ominąć logując się."
         },
         "commit": {
             "rateLimit": "API ogranicza anonimowe połączenia. Możesz je ominąć logując się."
         },
         "commit": {
-            "title": "Zapisz zmiany",
-            "description_placeholder": "Zwięzły opis twoich zmian (wymagany)",
+            "title": "Prześlij do OpenStreetMap",
+            "description_placeholder": "Zwięzły opis Twoich zmian (wymagany)",
             "message_label": "Opis zmian",
             "upload_explanation": "Zmiany, które wyślesz będą widoczne na wszystkich mapach używających danych OpenStreetMap.",
             "upload_explanation_with_user": "Zmiany, które wyślesz jako {user} będą widoczne na wszystkich mapach używających danych OpenStreetMap.",
             "message_label": "Opis zmian",
             "upload_explanation": "Zmiany, które wyślesz będą widoczne na wszystkich mapach używających danych OpenStreetMap.",
             "upload_explanation_with_user": "Zmiany, które wyślesz jako {user} będą widoczne na wszystkich mapach używających danych OpenStreetMap.",
-            "save": "Zapisz",
+            "save": "Prześlij",
             "cancel": "Anuluj",
             "changes": "{count} zmian/zmiany",
             "warnings": "Ostrzeżenia",
             "cancel": "Anuluj",
             "changes": "{count} zmian/zmiany",
             "warnings": "Ostrzeżenia",
             "switch": "Wróć do tego podkładu",
             "custom": "Własne",
             "custom_button": "Edycja własnego podkładu",
             "switch": "Wróć do tego podkładu",
             "custom": "Własne",
             "custom_button": "Edycja własnego podkładu",
-            "custom_prompt": "Podaj adres URL kafelka mapy. Poprawne adresy posiadają {zoom}, {x}, {y}  dla współrzędnych Z/X/Y oraz {u} dla każdego kwartyla mapy.",
+            "custom_prompt": "Podaj szablon adresu URL kafelka mapy. Poprawne adresy posiadają {zoom}, {x}, {y}  dla współrzędnych w formacie Z/X/Y lub {u} dla współrzędnych w formacie quadtile.",
             "fix_misalignment": "Przesunięcie podkładu",
             "imagery_source_faq": "Skąd pochodzi ta warstwa?",
             "reset": "Przywraca ustawienia",
             "fix_misalignment": "Przesunięcie podkładu",
             "imagery_source_faq": "Skąd pochodzi ta warstwa?",
             "reset": "Przywraca ustawienia",
         "help": {
             "title": "Pomoc",
             "help": "# Pomoc\n\nTo jest edytor [OpenStreetMap](http://www.openstreetmap.org/),\nwolnej i edytowalnej mapy świata. Możesz go używać do dodawania i\naktualizacji danych w twoim rejonie, czyniąc otwartą mapę świata lepszą\ndla każdego.\n\nModyfikacje wprowadzone na tej mapie będą widoczne dla wszystkich\nużywających OpenStreetMap. Aby wprowadzić modyfikacje,\nmusisz się [zalogować](https://www.openstreetmap.org/login).\n\n[Edytor iD](http://ideditor.com/) jest projektem społecznościowym z\n[kodem dostępnym na GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Pomoc",
             "help": "# Pomoc\n\nTo jest edytor [OpenStreetMap](http://www.openstreetmap.org/),\nwolnej i edytowalnej mapy świata. Możesz go używać do dodawania i\naktualizacji danych w twoim rejonie, czyniąc otwartą mapę świata lepszą\ndla każdego.\n\nModyfikacje wprowadzone na tej mapie będą widoczne dla wszystkich\nużywających OpenStreetMap. Aby wprowadzić modyfikacje,\nmusisz się [zalogować](https://www.openstreetmap.org/login).\n\n[Edytor iD](http://ideditor.com/) jest projektem społecznościowym z\n[kodem dostępnym na GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Edycja i zapis\n\nTen edytor został zaprojektowany do pracy w trybie online i właśnie go używasz poprzez stronę internetową.\n\n### Wybieranie obiektów\n\nAby wybrać obiekt na mapie, na przykład drogę czy POI, kliknij go na mapie.\nSpowoduje to podświetlenie wybranego obiektu, otworzenie panelu zawierającego szczegóły\no nim i wyświetlenie menu z poleceniami, które możesz wykonać na obiekcie.\n\nAby wybrać wiele obiektów, należy przytrzymać wciśnięty klawisz 'Shift'. Wtedy wystarczy kliknąć lewym klawiszem myszy na odpowiednich obiektach lub zaznaczyć interesujący obszar mapy. Spowoduje to wybór wszystkich obiektów zawartych w narysowanym prostokącie.\n\n### Zapisywanie modyfikacji\n\nGdy wprowadzisz zmiany, na przykład przez modyfikacje dróg, budynków i miejsc, są one\nprzechowywane lokalnie aż zapiszesz je na serwerze. Nie martw się, gdy popełnisz błąd - możesz\ncofnąć zmiany przez kliknięcie przycisku cofania i przywrócić je poprzez kliknięcie przycisku powtarzania.\n\nKliknij 'Zapisz' aby skończyć grupę modyfikacji - na przykład, gdy skończyłeś pewien obszar miasta i\nchcesz zacząć następny. Będziesz miał wtedy szansę przejrzeć swoje zmiany, a edytor dostarczy pomocne\nsugestie i ostrzeżenia w razie, gdyby coś było z nimi nie tak.\n\nJeśli nie widać problemów, możesz podać krótki komentarz opisujący zmianę, którą wprowadziłeś\ni kliknąć 'Zapisz' ponownie, aby wysłać zmiany do [OpenStreetMap.org](http://www.openstreetmap.org/),\ngdzie będą one widoczne dla wszystkich użytkowników i dostępne dla innych do\ndalszego ulepszania.\n\nJeżeli nie możesz skończyć swoich modyfikacji w czasie jednej sesji, możesz opuścić okno edytora i\nwrócić później (na tym samym komputerze i w tej samej przeglądarce), a edytor zaoferuje ci przywrócenie\ntwojej pracy.\n\n### Korzystanie z edytora\n\nLista dostępnych skrótów klawiszowych znajduje się [tutaj](http://wiki.openstreetmap.org/wiki/Pl:iD/Shortcuts).\n",
             "roads": "# Drogi\n\nMożesz tworzyć, poprawiać i usuwać drogi używając tego edytora. Drogi mogą być wszelkiego rodzaju:\nścieżki, ulice, szlaki, ścieżki rowerowe i tak dalej - każdy często uczęszczany odcinek powinien dać się\nprzedstawić.\n\n### Zaznaczanie\n\nKliknij drogę, aby ją zaznaczyć. Obwiednia powinna stać się widoczna, wraz z małym menu\nnarzędziowym na mapie oraz panelem bocznym pokazującym więcej informacji na temat drogi.\n\n### Modyfikowanie\n\nCzęsto będziesz widział drogi, które nie są wyrównane ze zdjęciami satelitarnymi lub śladami GPS.\nMożesz dopasować te drogi tak, aby były we właściwym miejscu.\n\nNajpierw kliknij drogę, którą chcesz zmienić. Podświetli ją to oraz pokaże punkty kontrolne, które\nmożesz przesunąć w lepsze miejsce. Jeżeli chcesz dodać nowe punkty kontrolne, aby droga\nbyła bardziej szczegółowa, dwukrotnie kliknij część drogi bez punktu, a w tym miejscu nowy się\npojawi.\n\nJeżeli droga łączy się z inną drogą, ale nie jest prawidłowo połączona z nią na mapie, możesz\nprzeciągnąć jeden z puntów kontrolnych na drugą drogę w celu ich połączenia. Prawidłowe połączenia\ndróg są ważne dla mapy i kluczowe dla wyznaczania tras.\n\nMożesz też kliknąć narzędzie 'Przesuń' lub nacisnąć klawisz `M` aby przesunąć jednocześnie całą\ndrogę, a następnie kliknąć ponownie, aby zachować to przesunięcie.\n\n### Usuwanie\n\nGdy droga jest całkiem błędna - widzisz, że nie istnieje na zdjęciach satelitarnych (a najlepiej sam\nsprawdziłeś w terenie, że jej nie ma) - możesz usunąć ją. Uważaj, gdy usuwasz obiekty - wyniki usunięcia,\ntak jak każdej modyfikacji, są widoczne dla wszystkich, a zdjęcie satelitarne często nie są aktualne,\nwięc droga może być po prostu nowo wybudowana.\n\nMożesz usunąć drogę przez zaznaczenie jej, a następnie kliknięcie ikony kosza lub wciśnięcie\nklawisza 'Delete'.\n\n### Tworzenie\n\nGdzieś tam powinna być droga, ale jej nie ma? Kliknij przycisk 'Linia' w górnym lewym rogu edytora\nlub naciśnij klawisz '2' na klawiaturze, aby zacząć rysować linię.\n\nKliknij początek drogi na mapie, aby zacząć rysować. Jeżeli droga odchodzi od już istniejącej, zacznij\nprzez kliknięcie w miejscu, w którym się łączą.\n\nNastępnie klikaj na punktach wzdłuż drogi tak, aby biegła ona odpowiednio według zdjęć satelitarnych\nlub GPS. Jeżeli droga, którą rysujesz, krzyżuje się z inną, połącz je, klikając na punkcie przecięcia. Gdy\nskończysz rysować, dwukrotnie kliknij ostatni punkt lub naciśnij klawisz 'Enter' na klawiaturze.\n",
             "gps": "# GPS\n\nZebrane ślady GPS są ważnym źródłem danych dla OpenStreetMap. Ten edytor pozwala na użycie lokalnych śladów - plików \".gpx\" na twoim komputerze. Możesz je zbierać za pomocą aplikacji na smartfony jak również dedykowanych odbiorników GPS.\n\nBy uzyskać więcej informacji jak wykonać pomiar GPS, przeczytaj [Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).\n\nBy użyć śladu GPX do mapowania, przeciągnij i upuść plik GPX na mapę edytora. Jeśli został on rozpoznany, pojawi się na niej jako jasno-purpurowa linia. Kliknij na \"Dane mapy\" po prawej stronie by włączyć, wyłączyć lub przybilżyć widok mapy do miejsca w którym pojawił się ślad.\n\nSam ślad nie jest bezpośrednio przenoszony na serwery OpenStreetMap - najlepszym sposobem na wykorzystanie go jest nanoszenie informacji uzyskanych z niego na mapę, często używając go jako wskazówkę, możesz także [wysłać go na serwery OpenStreetMap](http://www.openstreetmap.org/trace/create)\npozwalając tym samym innym użytkownikom na korzystanie z niego.\n",
             "imagery": "# Zdjęcia\n\nZdjęcia lotnicze/satelitarne są ważnym zasobem w rysowaniu map. Kolekcja zdjęć lotniczych,\nsatelitarnych i innych wolnodostępnych źródeł jest dostępna w edytorze w menu 'Ustawienia tła' po\nprawej stronie.\n\nDomyślnie wyświetlana jest warstwa zdjęć satelitarnych z [Bing Maps](http://www.bing.com/maps/),\nale w miarę przybliżania i pojawiają się nowe źródła. Niektóre kraje, takie jak Stany Zjednoczone, Francja\nczy Dania mają w pewnych miejscach dostępne zdjęcia bardzo wysokiej jakości.\n\nZdjęcia są czasem przesunięte względem danych na mapie z powodu błędu dostawcy zdjęć. Jeżeli\nwidzisz dużo dróg przesuniętych względem tła, zastanów się, zanim je wszystkie wyrównasz względem\ntła. Zamiast tego możesz dostosować przesunięcie zdjęć tak, aby zgadzały się z istniejącymi danymi przez\nnaciśnięcie przycisku 'Wyrównaj podkład' na dole Ustawień tła.\n",
             "roads": "# Drogi\n\nMożesz tworzyć, poprawiać i usuwać drogi używając tego edytora. Drogi mogą być wszelkiego rodzaju:\nścieżki, ulice, szlaki, ścieżki rowerowe i tak dalej - każdy często uczęszczany odcinek powinien dać się\nprzedstawić.\n\n### Zaznaczanie\n\nKliknij drogę, aby ją zaznaczyć. Obwiednia powinna stać się widoczna, wraz z małym menu\nnarzędziowym na mapie oraz panelem bocznym pokazującym więcej informacji na temat drogi.\n\n### Modyfikowanie\n\nCzęsto będziesz widział drogi, które nie są wyrównane ze zdjęciami satelitarnymi lub śladami GPS.\nMożesz dopasować te drogi tak, aby były we właściwym miejscu.\n\nNajpierw kliknij drogę, którą chcesz zmienić. Podświetli ją to oraz pokaże punkty kontrolne, które\nmożesz przesunąć w lepsze miejsce. Jeżeli chcesz dodać nowe punkty kontrolne, aby droga\nbyła bardziej szczegółowa, dwukrotnie kliknij część drogi bez punktu, a w tym miejscu nowy się\npojawi.\n\nJeżeli droga łączy się z inną drogą, ale nie jest prawidłowo połączona z nią na mapie, możesz\nprzeciągnąć jeden z puntów kontrolnych na drugą drogę w celu ich połączenia. Prawidłowe połączenia\ndróg są ważne dla mapy i kluczowe dla wyznaczania tras.\n\nMożesz też kliknąć narzędzie 'Przesuń' lub nacisnąć klawisz `M` aby przesunąć jednocześnie całą\ndrogę, a następnie kliknąć ponownie, aby zachować to przesunięcie.\n\n### Usuwanie\n\nGdy droga jest całkiem błędna - widzisz, że nie istnieje na zdjęciach satelitarnych (a najlepiej sam\nsprawdziłeś w terenie, że jej nie ma) - możesz usunąć ją. Uważaj, gdy usuwasz obiekty - wyniki usunięcia,\ntak jak każdej modyfikacji, są widoczne dla wszystkich, a zdjęcie satelitarne często nie są aktualne,\nwięc droga może być po prostu nowo wybudowana.\n\nMożesz usunąć drogę przez zaznaczenie jej, a następnie kliknięcie ikony kosza lub wciśnięcie\nklawisza 'Delete'.\n\n### Tworzenie\n\nGdzieś tam powinna być droga, ale jej nie ma? Kliknij przycisk 'Linia' w górnym lewym rogu edytora\nlub naciśnij klawisz '2' na klawiaturze, aby zacząć rysować linię.\n\nKliknij początek drogi na mapie, aby zacząć rysować. Jeżeli droga odchodzi od już istniejącej, zacznij\nprzez kliknięcie w miejscu, w którym się łączą.\n\nNastępnie klikaj na punktach wzdłuż drogi tak, aby biegła ona odpowiednio według zdjęć satelitarnych\nlub GPS. Jeżeli droga, którą rysujesz, krzyżuje się z inną, połącz je, klikając na punkcie przecięcia. Gdy\nskończysz rysować, dwukrotnie kliknij ostatni punkt lub naciśnij klawisz 'Enter' na klawiaturze.\n",
             "gps": "# GPS\n\nZebrane ślady GPS są ważnym źródłem danych dla OpenStreetMap. Ten edytor pozwala na użycie lokalnych śladów - plików \".gpx\" na twoim komputerze. Możesz je zbierać za pomocą aplikacji na smartfony jak również dedykowanych odbiorników GPS.\n\nBy uzyskać więcej informacji jak wykonać pomiar GPS, przeczytaj [Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).\n\nBy użyć śladu GPX do mapowania, przeciągnij i upuść plik GPX na mapę edytora. Jeśli został on rozpoznany, pojawi się na niej jako jasno-purpurowa linia. Kliknij na \"Dane mapy\" po prawej stronie by włączyć, wyłączyć lub przybilżyć widok mapy do miejsca w którym pojawił się ślad.\n\nSam ślad nie jest bezpośrednio przenoszony na serwery OpenStreetMap - najlepszym sposobem na wykorzystanie go jest nanoszenie informacji uzyskanych z niego na mapę, często używając go jako wskazówkę, możesz także [wysłać go na serwery OpenStreetMap](http://www.openstreetmap.org/trace/create)\npozwalając tym samym innym użytkownikom na korzystanie z niego.\n",
             "imagery": "# Zdjęcia\n\nZdjęcia lotnicze/satelitarne są ważnym zasobem w rysowaniu map. Kolekcja zdjęć lotniczych,\nsatelitarnych i innych wolnodostępnych źródeł jest dostępna w edytorze w menu 'Ustawienia tła' po\nprawej stronie.\n\nDomyślnie wyświetlana jest warstwa zdjęć satelitarnych z [Bing Maps](http://www.bing.com/maps/),\nale w miarę przybliżania i pojawiają się nowe źródła. Niektóre kraje, takie jak Stany Zjednoczone, Francja\nczy Dania mają w pewnych miejscach dostępne zdjęcia bardzo wysokiej jakości.\n\nZdjęcia są czasem przesunięte względem danych na mapie z powodu błędu dostawcy zdjęć. Jeżeli\nwidzisz dużo dróg przesuniętych względem tła, zastanów się, zanim je wszystkie wyrównasz względem\ntła. Zamiast tego możesz dostosować przesunięcie zdjęć tak, aby zgadzały się z istniejącymi danymi przez\nnaciśnięcie przycisku 'Wyrównaj podkład' na dole Ustawień tła.\n",
                     "conservation-park": "Park Konwersacji",
                     "constantine-street": "Wrocławska",
                     "cushman-street": "Truskawkowa",
                     "conservation-park": "Park Konwersacji",
                     "constantine-street": "Wrocławska",
                     "cushman-street": "Truskawkowa",
-                    "dollar-tree": "Drzewo Pieniędzy",
+                    "dollar-tree": "Drzewo pieniędzy",
                     "douglas-avenue": "Aleje Jerozolimskie",
                     "east-street": "Słoneczna ",
                     "elm-street": "Polna",
                     "flower-street": "Kwiatowa ",
                     "foster-street": "Henryka Sienkiewicza",
                     "french-street": "Francuska",
                     "douglas-avenue": "Aleje Jerozolimskie",
                     "east-street": "Słoneczna ",
                     "elm-street": "Polna",
                     "flower-street": "Kwiatowa ",
                     "foster-street": "Henryka Sienkiewicza",
                     "french-street": "Francuska",
-                    "garden-street": "Pamiętajcie O Ogrodach",
+                    "garden-street": "Pamiętajcie o ogrodach",
                     "gem-pawnbroker": "Lombard U Stasia",
                     "golden-finch-framing": "Farma Zbycha",
                     "grant-avenue": "Hoża",
                     "gem-pawnbroker": "Lombard U Stasia",
                     "golden-finch-framing": "Farma Zbycha",
                     "grant-avenue": "Hoża",
             },
             "navigation": {
                 "title": "Nawigacja",
             },
             "navigation": {
                 "title": "Nawigacja",
+                "drag": "Główny obszar mapy pokazuje dane OpenStreetMap na tle podkładu.{br}Możesz poruszać się po niej, przeciągając i przewijając tak jak po każdej mapie internetowej. Dodatkowo możesz używać klawiszów strzałek. **Przeciągnij mapę!**",
+                "zoom": "Możesz przybliżać i oddalać widok poprzez kręcenie pokrętłem myszy, przy użyciu touchpada lub przycisków {plus} / {minus}. **Przybliż mapę!**",
                 "features": "By opisać rzeczy pojawiające się na mapie używamy słowa *obiekty*. Wszystko w świecie rzeczywistym może zostać odwzorowane - zmapowane - jako obiekt w OpenStreetMap.",
                 "points_lines_areas": "Obiekty mapy są przedstawione przy użyciu *punktów, linii oraz obszarów.*",
                 "nodes_ways": "W OpenStreetMap punkty (ang. points) często nazywane są *węzłami* (ang. nodes), zaś linie oraz obszary są czasami nazywane *ścieżkami* (ang. ways).",
                 "features": "By opisać rzeczy pojawiające się na mapie używamy słowa *obiekty*. Wszystko w świecie rzeczywistym może zostać odwzorowane - zmapowane - jako obiekt w OpenStreetMap.",
                 "points_lines_areas": "Obiekty mapy są przedstawione przy użyciu *punktów, linii oraz obszarów.*",
                 "nodes_ways": "W OpenStreetMap punkty (ang. points) często nazywane są *węzłami* (ang. nodes), zaś linie oraz obszary są czasami nazywane *ścieżkami* (ang. ways).",
             "lines": {
                 "title": "Linie",
                 "add_line": "*Linie* są używane do reprezentowania obiektów takich jak drogi, tory czy rzeki. **Naciśnij przycisk Linia {button}, aby dodać nową linię.**",
             "lines": {
                 "title": "Linie",
                 "add_line": "*Linie* są używane do reprezentowania obiektów takich jak drogi, tory czy rzeki. **Naciśnij przycisk Linia {button}, aby dodać nową linię.**",
+                "intersect": "Kliknij lub wciśnij spację, aby dodać więcej punktów do linii.{br}Drogi i wiele innych typów linii są częścią większej sieci. Ważne jest ich prawidłowe połączenie, aby programy do wyznaczania tras działały poprawnie. **Kliknij na {name}, aby dodać skrzyżowanie łączące dwie linie.**",
                 "retry_intersect": "Droga musi się skrzyżować z drogą {name}. Spróbuj ponownie!",
                 "choose_category_road": "**Wybierz {category} z listy**",
                 "choose_preset_residential": "Istnieje wiele rodzajów dróg, jednak ta jest drogą lokalną. **Wybierz typ {preset}.**",
                 "retry_preset_residential": "Nie zaznaczyłeś typu {preset}. **Kliknij tutaj, aby wybrać ponownie.**",
                 "retry_intersect": "Droga musi się skrzyżować z drogą {name}. Spróbuj ponownie!",
                 "choose_category_road": "**Wybierz {category} z listy**",
                 "choose_preset_residential": "Istnieje wiele rodzajów dróg, jednak ta jest drogą lokalną. **Wybierz typ {preset}.**",
                 "retry_preset_residential": "Nie zaznaczyłeś typu {preset}. **Kliknij tutaj, aby wybrać ponownie.**",
-                "name_road": "**Nazwij drogę, a następnie wciśnij Escape, powróć lub wciśnij przycisk {button}, aby zamknąć edytor obiektów.**",
+                "name_road": "**Nazwij drogę, a następnie wciśnij Escape, Enter lub wciśnij przycisk {button}, aby zamknąć edytor obiektów.**",
+                "did_name_road": "Nieźle! Następnie nauczysz się jak zmienić kształt linii.",
                 "split_intersection": "**Naciśnij przycisk {button}, aby rozdzielić {street}.**",
                 "retry_split": "Nie nacisnąłeś na przycisk Rozdziel. Spróbuj ponownie.",
                 "multi_delete": "**Naciśnij przycisk {button}, aby usunąć dodatkowe linie.**",
                 "split_intersection": "**Naciśnij przycisk {button}, aby rozdzielić {street}.**",
                 "retry_split": "Nie nacisnąłeś na przycisk Rozdziel. Spróbuj ponownie.",
                 "multi_delete": "**Naciśnij przycisk {button}, aby usunąć dodatkowe linie.**",
                 "start": "Zacznij mapować!"
             }
         },
                 "start": "Zacznij mapować!"
             }
         },
+        "shortcuts": {
+            "title": "Skróty klawiszowe",
+            "browsing": {
+                "title": "Przeglądanie",
+                "navigation": {
+                    "title": "Nawigacja"
+                },
+                "help": {
+                    "title": "Pomoc",
+                    "help": "Wyświetl pomoc/dokumentację",
+                    "keyboard": "Wyświetl skróty klawiszowe"
+                },
+                "display_options": {
+                    "title": "Opcje wyświetlania",
+                    "background": "Wyświetl opcje tła"
+                }
+            },
+            "editing": {
+                "title": "Edytowanie",
+                "drawing": {
+                    "title": "Rysowanie",
+                    "add_point": "Tryb 'Dodawania punktu'",
+                    "add_line": "Tryb 'Dodawania linii'",
+                    "add_area": "Tryb 'Dodawania obszaru'",
+                    "place_point": "Umieść punkt"
+                },
+                "commands": {
+                    "title": "Polecenia",
+                    "undo": "Cofnij ostatnie działanie",
+                    "redo": "Ponów ostatnie działanie",
+                    "save": "Zapisz zmiany"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                     "name": "Zagospodarowanie terenu"
                 },
                 "category-natural-area": {
                     "name": "Zagospodarowanie terenu"
                 },
                 "category-natural-area": {
-                    "name": "Obiekty Naturalne"
+                    "name": "Obiekty naturalne"
                 },
                 "category-natural-line": {
                 },
                 "category-natural-line": {
-                    "name": "Obiekty Naturalne"
+                    "name": "Obiekty naturalne"
                 },
                 "category-natural-point": {
                 },
                 "category-natural-point": {
-                    "name": "Obiekty Naturalne"
+                    "name": "Obiekty naturalne"
                 },
                 "category-path": {
                     "name": "Ścieżka"
                 },
                 "category-path": {
                     "name": "Ścieżka"
                         "hamlet": "Przysiółek",
                         "housename": "Nazwa domu",
                         "housenumber": "123",
                         "hamlet": "Przysiółek",
                         "housename": "Nazwa domu",
                         "housenumber": "123",
-                        "housenumber!jp": "Nr Budynku/Działki",
+                        "housenumber!jp": "Nr budynku/działki",
                         "neighbourhood": "Okręg",
                         "neighbourhood!jp": "Chōme/Aza/Koaza",
                         "place": "Miejsce",
                         "postcode": "Kod pocztowy",
                         "province": "Prowincja",
                         "province!jp": "Prefektura",
                         "neighbourhood": "Okręg",
                         "neighbourhood!jp": "Chōme/Aza/Koaza",
                         "place": "Miejsce",
                         "postcode": "Kod pocztowy",
                         "province": "Prowincja",
                         "province!jp": "Prefektura",
-                        "quarter": "Wyższy Okręg",
+                        "quarter": "Wyższy okręg",
                         "quarter!jp": "Ōaza/Machi",
                         "state": "Stan",
                         "street": "Ulica (nie miejscowość)",
                         "quarter!jp": "Ōaza/Machi",
                         "state": "Stan",
                         "street": "Ulica (nie miejscowość)",
                     "label": "Ogrzewany"
                 },
                 "aerialway/occupancy": {
                     "label": "Ogrzewany"
                 },
                 "aerialway/occupancy": {
-                    "label": "ilość miejsc ",
+                    "label": "Ilość miejsc ",
                     "placeholder": "2, 4, 8..."
                 },
                 "aerialway/summer/access": {
                     "placeholder": "2, 4, 8..."
                 },
                 "aerialway/summer/access": {
                     "label": "Zewnątrz"
                 },
                 "bath/sand_bath": {
                     "label": "Zewnątrz"
                 },
                 "bath/sand_bath": {
-                    "label": "Kąpiele Piaskowe"
+                    "label": "Kąpiele piaskowe"
                 },
                 "bath/type": {
                     "label": "Typ",
                     "options": {
                 },
                 "bath/type": {
                     "label": "Typ",
                     "options": {
-                        "foot_bath": "Mycie Nóg",
-                        "hot_spring": "GorÄ\85ce Å¹ródła",
+                        "foot_bath": "Mycie nóg",
+                        "hot_spring": "GorÄ\85ce Åºródła",
                         "onsen": "Japoński Onsen"
                     }
                 },
                         "onsen": "Japoński Onsen"
                     }
                 },
                     "placeholder": "45, 90, 180, 270"
                 },
                 "camera/mount": {
                     "placeholder": "45, 90, 180, 270"
                 },
                 "camera/mount": {
-                    "label": "Mocowanie Kamery"
+                    "label": "Mocowanie kamery"
                 },
                 "camera/type": {
                 },
                 "camera/type": {
-                    "label": "Typ Kamery",
+                    "label": "Typ kamery",
                     "options": {
                         "dome": "Kopułkowa",
                         "fixed": "Stacjonarna",
                     "options": {
                         "dome": "Kopułkowa",
                         "fixed": "Stacjonarna",
                     "label": "Typ"
                 },
                 "contact/webcam": {
                     "label": "Typ"
                 },
                 "contact/webcam": {
-                    "label": "Adres webcam",
+                    "label": "Adres kamery internetowej",
                     "placeholder": "http://przyklad.pl/"
                 },
                 "content": {
                     "placeholder": "http://przyklad.pl/"
                 },
                 "content": {
                     "label": "Typ"
                 },
                 "drive_through": {
                     "label": "Typ"
                 },
                 "drive_through": {
-                    "label": "Drive-Through"
+                    "label": "Przejazd"
                 },
                 "electrified": {
                     "label": "Elektryfikacja",
                 },
                 "electrified": {
                     "label": "Elektryfikacja",
                 },
                 "email": {
                     "label": "E-mail",
                 },
                 "email": {
                     "label": "E-mail",
-                    "placeholder": "przyklad@example.com"
+                    "placeholder": "przyklad@przyklad.pl"
                 },
                 "emergency": {
                     "label": "W razie niebezpieczeństwa"
                 },
                 "emergency": {
                     "label": "W razie niebezpieczeństwa"
                     }
                 },
                 "fixme": {
                     }
                 },
                 "fixme": {
-                    "label": "Napraw Mnie (FIXME)"
+                    "label": "Popraw mnie"
                 },
                 "fuel": {
                     "label": "Paliwo"
                 },
                 "fuel": {
                     "label": "Paliwo"
                     "label": "Płatny dostęp do Internetu"
                 },
                 "internet_access/ssid": {
                     "label": "Płatny dostęp do Internetu"
                 },
                 "internet_access/ssid": {
-                    "label": "SSID (Nazwa Sieci)"
+                    "label": "SSID (Nazwa sieci)"
                 },
                 "kerb": {
                     "label": "Krawężnik"
                 },
                 "kerb": {
                     "label": "Krawężnik"
                     "label": "Typ"
                 },
                 "maxheight": {
                     "label": "Typ"
                 },
                 "maxheight": {
-                    "label": "Maksymalna Wysokość",
+                    "label": "Maksymalna wysokość",
                     "placeholder": "4, 4.5, 5, 14'0\", 14'6\", 15'0\""
                 },
                 "maxspeed": {
                     "placeholder": "4, 4.5, 5, 14'0\", 14'6\", 15'0\""
                 },
                 "maxspeed": {
                 "maxstay": {
                     "label": "Maksymalny czas postoju"
                 },
                 "maxstay": {
                     "label": "Maksymalny czas postoju"
                 },
+                "maxweight": {
+                    "label": "Maksymalna waga"
+                },
                 "mtb/scale": {
                     "label": "Skala trudności dla rowerów górskich",
                     "options": {
                 "mtb/scale": {
                     "label": "Skala trudności dla rowerów górskich",
                     "options": {
                     "label": "Operator"
                 },
                 "outdoor_seating": {
                     "label": "Operator"
                 },
                 "outdoor_seating": {
-                    "label": "Ogródek Restauracyjny"
+                    "label": "Ogródek restauracyjny"
                 },
                 "par": {
                     "label": "Par",
                 },
                 "par": {
                     "label": "Par",
                     "label": "Sezonowy"
                 },
                 "second_hand": {
                     "label": "Sezonowy"
                 },
                 "second_hand": {
-                    "label": "Sprzedaż Używanych",
+                    "label": "Sprzedaż używanych",
                     "options": {
                         "no": "Nie",
                         "only": "Tylko",
                     "options": {
                         "no": "Nie",
                         "only": "Tylko",
                     "label": "Usługi"
                 },
                 "service_rail": {
                     "label": "Usługi"
                 },
                 "service_rail": {
-                    "label": "Typ Usługi",
+                    "label": "Typ usługi",
                     "options": {
                         "crossover": "Rozjazd",
                         "siding": "Bocznica",
                     "options": {
                         "crossover": "Rozjazd",
                         "siding": "Bocznica",
                 },
                 "website": {
                     "label": "Strona WWW",
                 },
                 "website": {
                     "label": "Strona WWW",
-                    "placeholder": "http://example.com/"
+                    "placeholder": "http://przyklad.pl/"
                 },
                 "wetland": {
                     "label": "Typ"
                 },
                 "wetland": {
                     "label": "Typ"
                     "terms": "Wyciąg narciarski gondolowy, Gondola"
                 },
                 "aerialway/goods": {
                     "terms": "Wyciąg narciarski gondolowy, Gondola"
                 },
                 "aerialway/goods": {
-                    "name": "Wyciąg Towarowy",
+                    "name": "Wyciąg towarowy",
                     "terms": "wyciąg towarowy, gondola towarowa, "
                 },
                 "aerialway/magic_carpet": {
                     "terms": "wyciąg towarowy, gondola towarowa, "
                 },
                 "aerialway/magic_carpet": {
                     "terms": "Automat z gazetami"
                 },
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "terms": "Automat z gazetami"
                 },
                 "amenity/vending_machine/parcel_pickup_dropoff": {
-                    "name": "Poczkomat z funkcją nadawania przesyłek",
+                    "name": "Paczkomat z funkcją nadawania przesyłek",
                     "terms": "paczkomat"
                 },
                 "amenity/vending_machine/parking_tickets": {
                     "terms": "paczkomat"
                 },
                 "amenity/vending_machine/parking_tickets": {
                     "name": "Elektryk",
                     "terms": "elektryk,elektrotechnik"
                 },
                     "name": "Elektryk",
                     "terms": "elektryk,elektrotechnik"
                 },
+                "craft/electronics_repair": {
+                    "name": "Punkt napraw sprzętu elektronicznego"
+                },
                 "craft/gardener": {
                     "name": "Ogrodnik",
                     "terms": "ogrodnik,sadownik"
                 "craft/gardener": {
                     "name": "Ogrodnik",
                     "terms": "ogrodnik,sadownik"
                     "name": "Droga rowerowa",
                     "terms": "droga,rowerowa,ścieżka,rowerów"
                 },
                     "name": "Droga rowerowa",
                     "terms": "droga,rowerowa,ścieżka,rowerów"
                 },
+                "highway/elevator": {
+                    "name": "Winda"
+                },
                 "highway/footway": {
                     "name": "Droga/ścieżka dla pieszych",
                     "terms": "pobocze,bulwar,ścieżka,deptak,szosa,spacer"
                 "highway/footway": {
                     "name": "Droga/ścieżka dla pieszych",
                     "terms": "pobocze,bulwar,ścieżka,deptak,szosa,spacer"
                     "terms": "alejka"
                 },
                 "highway/service/drive-through": {
                     "terms": "alejka"
                 },
                 "highway/service/drive-through": {
-                    "name": "Drive-through",
-                    "terms": "drive-through"
+                    "name": "Przejazd",
+                    "terms": "przejazd"
                 },
                 "highway/service/driveway": {
                     "name": "Podjazd",
                 },
                 "highway/service/driveway": {
                     "name": "Podjazd",
                     "terms": "miejsce,zawracania,zawracanie"
                 },
                 "highway/turning_loop": {
                     "terms": "miejsce,zawracania,zawracanie"
                 },
                 "highway/turning_loop": {
-                    "name": "Węzeł Do Zawracania (Z Wyspą)",
+                    "name": "Węzeł do zawracania (z wyspą)",
                     "terms": "zawracanie"
                 },
                 "highway/unclassified": {
                     "terms": "zawracanie"
                 },
                 "highway/unclassified": {
                     "terms": "trawa, trawnik, "
                 },
                 "landuse/harbour": {
                     "terms": "trawa, trawnik, "
                 },
                 "landuse/harbour": {
-                    "name": "Port Morski",
+                    "name": "Port morski",
                     "terms": "port morski,port"
                 },
                 "landuse/industrial": {
                     "terms": "port morski,port"
                 },
                 "landuse/industrial": {
                     "terms": "poligon wojskowy"
                 },
                 "landuse/military/airfield": {
                     "terms": "poligon wojskowy"
                 },
                 "landuse/military/airfield": {
-                    "name": "Lotnisko Wojskowe",
+                    "name": "Lotnisko wojskowe",
                     "terms": "lotnisko wojskowe, wojskowy pas startowy"
                 },
                 "landuse/military/barracks": {
                     "terms": "lotnisko wojskowe, wojskowy pas startowy"
                 },
                 "landuse/military/barracks": {
                     "terms": "koszary, wojsko, budynek wojskowy"
                 },
                 "landuse/military/bunker": {
                     "terms": "koszary, wojsko, budynek wojskowy"
                 },
                 "landuse/military/bunker": {
-                    "name": "Bunkier Wojskowy",
+                    "name": "Bunkier wojskowy",
                     "terms": "bunkier wojskowy, schron wojskowy"
                 },
                 "landuse/military/checkpoint": {
                     "terms": "bunkier wojskowy, schron wojskowy"
                 },
                 "landuse/military/checkpoint": {
                     "terms": "Wojskowy punkt kontrolny"
                 },
                 "landuse/military/danger_area": {
                     "terms": "Wojskowy punkt kontrolny"
                 },
                 "landuse/military/danger_area": {
-                    "name": "Obszar Niebezpieczny",
-                    "terms": "Obszar Niebezpieczny"
+                    "name": "Obszar niebezpieczny",
+                    "terms": "Obszar niebezpieczny"
                 },
                 "landuse/military/naval_base": {
                     "name": "Port wojenny",
                 },
                 "landuse/military/naval_base": {
                     "name": "Port wojenny",
                     "terms": "kwartał,osiedle"
                 },
                 "place/square": {
                     "terms": "kwartał,osiedle"
                 },
                 "place/square": {
-                    "name": "Plac",
-                    "terms": "plac, rynek"
+                    "name": "Plac publiczny",
+                    "terms": "plac miejski, rynek"
                 },
                 "place/suburb": {
                     "name": "Dzielnica",
                 },
                 "place/suburb": {
                     "name": "Dzielnica",
                     "name": "Antykwariat",
                     "terms": "sklep z antykami, antyki"
                 },
                     "name": "Antykwariat",
                     "terms": "sklep z antykami, antyki"
                 },
+                "shop/appliance": {
+                    "name": "Sklep z AGD"
+                },
                 "shop/art": {
                     "name": "Sklep z dziełami sztuki",
                     "terms": "antykwariat, desa"
                 "shop/art": {
                     "name": "Sklep z dziełami sztuki",
                     "terms": "antykwariat, desa"
                 },
                 "shop/butcher": {
                     "name": "Rzeźnik",
                 },
                 "shop/butcher": {
                     "name": "Rzeźnik",
-                    "terms": "sklep mięsny, rzeźnia"
+                    "terms": "sklep mięsny, wędliny, mięso, rzeźnia"
                 },
                 "shop/candles": {
                     "name": "Sklep ze świecami",
                 },
                 "shop/candles": {
                     "name": "Sklep ze świecami",
                     "terms": "farby,malowanie"
                 },
                 "shop/pastry": {
                     "terms": "farby,malowanie"
                 },
                 "shop/pastry": {
-                    "name": "Sklep z Wypiekami",
+                    "name": "Sklep z wypiekami",
                     "terms": "sklep z wypiekami, piekarnia, ciastkarnia, ciasta"
                 },
                 "shop/pawnbroker": {
                     "terms": "sklep z wypiekami, piekarnia, ciastkarnia, ciasta"
                 },
                 "shop/pawnbroker": {
                     "terms": "chata alpejska"
                 },
                 "tourism/apartment": {
                     "terms": "chata alpejska"
                 },
                 "tourism/apartment": {
-                    "name": "Apartamenty na Wynajem",
+                    "name": "Apartamenty na wynajem",
                     "terms": "aparatament na wynajem, apartamenty na wynajem, pokój na wynajem, pokoje na wynajem, apartament, apartamenty, pokój, pokoje, do wynajęcia"
                 },
                 "tourism/aquarium": {
                     "terms": "aparatament na wynajem, apartamenty na wynajem, pokój na wynajem, pokoje na wynajem, apartament, apartamenty, pokój, pokoje, do wynajęcia"
                 },
                 "tourism/aquarium": {
                     "terms": "informacja dla turystów"
                 },
                 "tourism/information/board": {
                     "terms": "informacja dla turystów"
                 },
                 "tourism/information/board": {
-                    "name": "Tablica Informacyjna",
+                    "name": "Tablica informacyjna",
                     "terms": "informacja, obwieszczenia"
                 },
                 "tourism/information/guidepost": {
                     "terms": "informacja, obwieszczenia"
                 },
                 "tourism/information/guidepost": {
                     "terms": "plan, mapa, "
                 },
                 "tourism/information/office": {
                     "terms": "plan, mapa, "
                 },
                 "tourism/information/office": {
-                    "name": "Informacja Turystyczna",
+                    "name": "Informacja turystyczna",
                     "terms": "informacja turystyka, turystyka"
                 },
                 "tourism/motel": {
                     "terms": "informacja turystyka, turystyka"
                 },
                 "tourism/motel": {
                     "terms": "Zoo, ogród zoologiczny"
                 },
                 "traffic_calming": {
                     "terms": "Zoo, ogród zoologiczny"
                 },
                 "traffic_calming": {
-                    "name": "Uspokojenie Ruchu",
+                    "name": "Uspokojenie ruchu",
                     "terms": "uspokojenie ruchu"
                 },
                 "traffic_calming/bump": {
                     "terms": "uspokojenie ruchu"
                 },
                 "traffic_calming/bump": {
index b186548881e8eaf83b54a4272a1db1802f60fe33..0f47705bba4b9e15682652f8bf3b96d0779b4e82 100644 (file)
         "help": {
             "title": "Ajuda",
             "help": "# Ajuda\n\nEste é um editor para [OpenStreetMap](http://www.openstreetmap.org/), o mapa mundial livre e editável. Você pode usá-lo para adicionar e atualizar de dados em sua área,  tornando um mapa mundi de código aberto melhor para todos.\n\nAs edições que você fizer nesse mapa serão visíveis para todos que usam OpenStreetMap. Para fazer uma edição você precisará se [identificar](https://www.openstreetmap.org/login).\n\nO [editor iD](http://ideditor.com/) é um projeto colaborativo com o [código fonte disponível no GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Ajuda",
             "help": "# Ajuda\n\nEste é um editor para [OpenStreetMap](http://www.openstreetmap.org/), o mapa mundial livre e editável. Você pode usá-lo para adicionar e atualizar de dados em sua área,  tornando um mapa mundi de código aberto melhor para todos.\n\nAs edições que você fizer nesse mapa serão visíveis para todos que usam OpenStreetMap. Para fazer uma edição você precisará se [identificar](https://www.openstreetmap.org/login).\n\nO [editor iD](http://ideditor.com/) é um projeto colaborativo com o [código fonte disponível no GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Editando e Salvando\n\nEsse editor é feito para trabalhar on-line e você está neste momento\nacessando-o através de uma página na Internet.\n\n### Selecionando Elementos\n\nPara selecionar um elemento do mapa, como uma estrada ou um ponto de\ninteresse, clique sobre ele. Isso vai pôr o elemento selecionado em destaque,\nabrir um painel com detalhes sobre ele e mostrar um menu de coisas que podem\nser feitas com ele.\n\nMúltiplos elementos podem ser selecionados segurando a\ntecla \"Shift\" e clicando nos quais você quer selecionar ou arrastando no mapa\npara desenhar um retângulo. Isso vai selecionar todos os elementos que\nestiverem dentro da caixa que foi desenhada.\n\n### Salvando Edições\n\nQuando você faz alterações como editar ruas, prédios e locais, elas são\nguardadas localmente até que você as envie para o servidor. Não se preocupe\nse você cometer algum deslize - você pode desfazer alterações clicando no\nbotão de desfazer e também refazer as alterações clicando no botão de refazer.\n\nClique em \"Salvar\" para finalizar um conjunto de alterações. Por exemplo, você\ncompletou uma área de uma cidade e gostaria de começar a editar uma outra\nárea. Você terá a chance de revisar o que foi feito até o momento e o editor\nmostrará sugestões e dicas se alguma coisa parecer estar errada com as suas\nalterações.\n\nSe tudo parecer estar OK, você pode inserir um breve comentário explicando\nas mudanças que você fez e clicar em \"Salvar\" de novo para enviar as mudanças\npara o [OpenStreetMap](http://www.openstreetmap.org/), onde elas estarão\nvisíveis para todos os outros usuários.\n\nSe você não conseguir concluir uma sessão de edição, você pode fechar a\njanela do editor e voltar mais tarde (no mesmo navegador e computador) que\no editor irá oferecer a possibilidade de restaurar o seu trabalho.\n\n### Usando o editor\n\nUma lista com os atalhos de teclado disponíveis pode ser encontrada [aqui](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n",
             "roads": "# Estradas\n\nVocê pode criar, corrigir e excluir estradas com este editor. Estradas podem ser de vários tipos: caminhos, estradas, trilhas, ciclovias e muito mais - qualquer segmento onde se passa, mesmo que às vezes, pode ser mapeado.\n\n### Selecionando\n\nClique em uma estrada para selecioná-la. Um esboço deve tornar-se visível, junto com um pequeno menu de ferramentas no mapa e uma barra lateral mostrando mais informações sobre a estrada.\n\n### Modificando\n\nMuitas vezes você vai encontrar estradas que não estão alinhadas com as imagens por trás delas ou com uma faixa de GPS. Você pode ajustar estas estradas para que elas fiquem no lugar certo.\n\nPrimeiro clique no caminho que você deseja alterar. Isso irá destacá-lo e mostrar pontos de controle ao longo dela que você pode arrastar para locais melhores. Se o que você deseja é adicionar novos pontos de controle para obter mais detalhes, clique duas vezes em uma parte da estrada sem um ponto, e um ponto será adicionado.\n\nSe a estrada se conecta a uma outra estrada, mas não está corretamente conectada no mapa, você pode arrastar um de seus pontos de controle para a outra estrada a fim de juntá-las. Ter estradas que se conectam é importante para o mapa e essencial para fornecer instruções de direção.\n\nVocê também pode clicar na ferramenta 'Mover' ou pressione a tecla 'M' para mover o caminho inteiro de uma vez, e em seguida, clique novamente para salvar esse movimento.\n\n### Apagando\n\nSe uma estrada está completamente errada - você pode ver que ela não existe nas imagens de satélite e, junto a isso, ter confirmado localmente que ela não existe - você pode apagá-la do mapa. Seja cauteloso ao excluir objetos - como qualquer outra edição, os resultados são vistos por todos, e como as imagens de satélite podem estar desatualizadas, a estrada pode simplesmente ser recém-construída.\n\nVocê pode excluir um caminho, clicando sobre ele para selecioná-lo, em seguida, clicar no ícone de lixeira ou pressionando a tecla 'Delete'.\n\n### Criando\n\nEncontrou um lugar onde deveria ter uma estrada, mas não tem? Clique no botão 'Linha' no canto superior esquerdo do editor ou pressione a tecla de atalho '2' para começar a desenhar uma linha.\n\nClique no início da estrada no mapa para começar a desenhar. Se a estrada se ramifica de uma estrada existente, comece clicando sobre o lugar onde eles se conectam.\n\nEm seguida, clique em pontos ao longo da estrada para que ela siga o caminho certo, de acordo com imagens de satélite ou GPS. Se a estrada que você está desenhando atravessa outra estrada, ligue-as clicando sobre o ponto de intersecção. Quando você terminar de desenhar, clique duas vezes ou pressione 'Voltar' ou 'Enter' no seu teclado.\n",
             "gps": "# GPS\n\nOs dados de GPS são as fontes mais confiáveis do OpenStreetMap. Este editor suporta trilhas locais - arquivos '.gpx'. Você pode utilizar aplicativos de celular ou aparelhos de GPS para coletar esse tipo de trilha. Para informações sobre como realizar levantamento com GPS, leia [Mapeando com smartphone, GPS ou papel](http://learnosm.org/pt/mobile-mapping/).\n\nPara usar uma trilha GPX para mapeamento, arraste e solte o arquivo GPX no editor de mapa iD. Caso seja reconhecida, será adicionada ao mapa como linhas roxo-claras. Clique no menu 'Dados do Mapa', no lado direito, para ativar, desativar ou focar o zoom nesta nova camada alimentada pelo GPX.\n\nA trilha GPX não é diretamente enviada ao OpenStreetMap - a melhor maneira para usá-la é desenhar no mapa, usando-a como um guia para os novos elementos que você adicionar, e também [enviá-lo ao OpenStreetMap](http://www.openstreetmap.org/trace/create) para que outros usuários possam usá-la.\n",
             "imagery": "# Imagens aéreas\n\nAs imagens aéreas são um recurso muito importante para o mapeamento.\nFotos de avião, de satélite e de outras fontes livre estão disponíveis no editor,\nno menu \"Configurações da Imagem de Fundo\" à direita.\n\nPor padrão, as imagens de satélite do [Bing Maps](http://www.bing.com/maps/)\nestão habilitadas no editor, mas ao mover e aproximar o mapa para certas áreas,\nnovas fontes de imagens estarão disponíveis. Alguns países, tais como os EUA, a\nFrança e a Dinamarca, têm imagens aéreas de alta qualidade disponíveis em algumas áreas.\n\nAtenção: as imagens aéreas algumas vezes não batem exatamente com o\nque há em terra, isto é, têm algum deslocamento por causa de algum erro por\nparte de quem as gerou. Se você notar que muitas ruas estão deslocadas\nem comparação com a imagem de fundo, não as alinhe imediatamente com\na imagem. Em vez disso ajuste a imagem para que ela se alinhe com as ruas\natravés da opção \"Ajustar o deslocamento da imagem de fundo\" no final do painel de Configurações da Imagem de Fundo.\n",
             "roads": "# Estradas\n\nVocê pode criar, corrigir e excluir estradas com este editor. Estradas podem ser de vários tipos: caminhos, estradas, trilhas, ciclovias e muito mais - qualquer segmento onde se passa, mesmo que às vezes, pode ser mapeado.\n\n### Selecionando\n\nClique em uma estrada para selecioná-la. Um esboço deve tornar-se visível, junto com um pequeno menu de ferramentas no mapa e uma barra lateral mostrando mais informações sobre a estrada.\n\n### Modificando\n\nMuitas vezes você vai encontrar estradas que não estão alinhadas com as imagens por trás delas ou com uma faixa de GPS. Você pode ajustar estas estradas para que elas fiquem no lugar certo.\n\nPrimeiro clique no caminho que você deseja alterar. Isso irá destacá-lo e mostrar pontos de controle ao longo dela que você pode arrastar para locais melhores. Se o que você deseja é adicionar novos pontos de controle para obter mais detalhes, clique duas vezes em uma parte da estrada sem um ponto, e um ponto será adicionado.\n\nSe a estrada se conecta a uma outra estrada, mas não está corretamente conectada no mapa, você pode arrastar um de seus pontos de controle para a outra estrada a fim de juntá-las. Ter estradas que se conectam é importante para o mapa e essencial para fornecer instruções de direção.\n\nVocê também pode clicar na ferramenta 'Mover' ou pressione a tecla 'M' para mover o caminho inteiro de uma vez, e em seguida, clique novamente para salvar esse movimento.\n\n### Apagando\n\nSe uma estrada está completamente errada - você pode ver que ela não existe nas imagens de satélite e, junto a isso, ter confirmado localmente que ela não existe - você pode apagá-la do mapa. Seja cauteloso ao excluir objetos - como qualquer outra edição, os resultados são vistos por todos, e como as imagens de satélite podem estar desatualizadas, a estrada pode simplesmente ser recém-construída.\n\nVocê pode excluir um caminho, clicando sobre ele para selecioná-lo, em seguida, clicar no ícone de lixeira ou pressionando a tecla 'Delete'.\n\n### Criando\n\nEncontrou um lugar onde deveria ter uma estrada, mas não tem? Clique no botão 'Linha' no canto superior esquerdo do editor ou pressione a tecla de atalho '2' para começar a desenhar uma linha.\n\nClique no início da estrada no mapa para começar a desenhar. Se a estrada se ramifica de uma estrada existente, comece clicando sobre o lugar onde eles se conectam.\n\nEm seguida, clique em pontos ao longo da estrada para que ela siga o caminho certo, de acordo com imagens de satélite ou GPS. Se a estrada que você está desenhando atravessa outra estrada, ligue-as clicando sobre o ponto de intersecção. Quando você terminar de desenhar, clique duas vezes ou pressione 'Voltar' ou 'Enter' no seu teclado.\n",
             "gps": "# GPS\n\nOs dados de GPS são as fontes mais confiáveis do OpenStreetMap. Este editor suporta trilhas locais - arquivos '.gpx'. Você pode utilizar aplicativos de celular ou aparelhos de GPS para coletar esse tipo de trilha. Para informações sobre como realizar levantamento com GPS, leia [Mapeando com smartphone, GPS ou papel](http://learnosm.org/pt/mobile-mapping/).\n\nPara usar uma trilha GPX para mapeamento, arraste e solte o arquivo GPX no editor de mapa iD. Caso seja reconhecida, será adicionada ao mapa como linhas roxo-claras. Clique no menu 'Dados do Mapa', no lado direito, para ativar, desativar ou focar o zoom nesta nova camada alimentada pelo GPX.\n\nA trilha GPX não é diretamente enviada ao OpenStreetMap - a melhor maneira para usá-la é desenhar no mapa, usando-a como um guia para os novos elementos que você adicionar, e também [enviá-lo ao OpenStreetMap](http://www.openstreetmap.org/trace/create) para que outros usuários possam usá-la.\n",
             "imagery": "# Imagens aéreas\n\nAs imagens aéreas são um recurso muito importante para o mapeamento.\nFotos de avião, de satélite e de outras fontes livre estão disponíveis no editor,\nno menu \"Configurações da Imagem de Fundo\" à direita.\n\nPor padrão, as imagens de satélite do [Bing Maps](http://www.bing.com/maps/)\nestão habilitadas no editor, mas ao mover e aproximar o mapa para certas áreas,\nnovas fontes de imagens estarão disponíveis. Alguns países, tais como os EUA, a\nFrança e a Dinamarca, têm imagens aéreas de alta qualidade disponíveis em algumas áreas.\n\nAtenção: as imagens aéreas algumas vezes não batem exatamente com o\nque há em terra, isto é, têm algum deslocamento por causa de algum erro por\nparte de quem as gerou. Se você notar que muitas ruas estão deslocadas\nem comparação com a imagem de fundo, não as alinhe imediatamente com\na imagem. Em vez disso ajuste a imagem para que ela se alinhe com as ruas\natravés da opção \"Ajustar o deslocamento da imagem de fundo\" no final do painel de Configurações da Imagem de Fundo.\n",
                 "rightclick_intersection": "A última rua de verdade é a {street1}, então vamos dividir a {street2} neste cruzamento e remover tudo que estiver ao norte dele. **Clique com o botão direito sobre o nó do cruzamento.**",
                 "split_intersection": "**Clique no botão {button} para dividir a {street}.**",
                 "retry_split": "Você não clicou no botão Dividir. Vamos tentar novamente.",
                 "rightclick_intersection": "A última rua de verdade é a {street1}, então vamos dividir a {street2} neste cruzamento e remover tudo que estiver ao norte dele. **Clique com o botão direito sobre o nó do cruzamento.**",
                 "split_intersection": "**Clique no botão {button} para dividir a {street}.**",
                 "retry_split": "Você não clicou no botão Dividir. Vamos tentar novamente.",
-                "did_split_multi": "Muito bem! A {street1} está agora dividida em duas partes. Esta parte pode ser removida. **Clique nesta parte da {street2} para selecioná-la.**",
+                "did_split_multi": "Muito bem! A {street1} agora está dividida em duas partes. A parte de cima pode ser removida. **Clique na parte de cima da {street2} para selecioná-la.**",
                 "did_split_single": "**Clique na parte norte da {street2} para selecioná-la.**",
                 "multi_select": "Agora a {selected} está selecionada. Vamos selecionar também a {other1}. Você pode clicar segurando a tecla Shift para selecionar mais de um objeto. **Enquanto mantém a tecla Shift pressionada, clique na {other2}.**",
                 "multi_rightclick": "Ótimo! As duas ruas a serem excluídas estão agora selecionadas. **Clique com o botão direito sobre uma das linhas para exibir o menu de edição.**",
                 "did_split_single": "**Clique na parte norte da {street2} para selecioná-la.**",
                 "multi_select": "Agora a {selected} está selecionada. Vamos selecionar também a {other1}. Você pode clicar segurando a tecla Shift para selecionar mais de um objeto. **Enquanto mantém a tecla Shift pressionada, clique na {other2}.**",
                 "multi_rightclick": "Ótimo! As duas ruas a serem excluídas estão agora selecionadas. **Clique com o botão direito sobre uma das linhas para exibir o menu de edição.**",
                 "start": "Começar a mapear!"
             }
         },
                 "start": "Começar a mapear!"
             }
         },
+        "shortcuts": {
+            "title": "Atalhos de teclado",
+            "key": {
+                "space": "Espaço"
+            },
+            "gesture": {
+                "drag": "arrastar"
+            },
+            "or": "-ou-",
+            "browsing": {
+                "help": {
+                    "title": "Ajuda"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                 "maxstay": {
                     "label": "Permanência máxima"
                 },
                 "maxstay": {
                     "label": "Permanência máxima"
                 },
+                "maxweight": {
+                    "label": "Peso Máximo"
+                },
                 "mtb/scale": {
                     "label": "Dificuldade para Mountain Biking",
                     "options": {
                 "mtb/scale": {
                     "label": "Dificuldade para Mountain Biking",
                     "options": {
                     "name": "Eletricista",
                     "terms": "Eletricista"
                 },
                     "name": "Eletricista",
                     "terms": "Eletricista"
                 },
+                "craft/electronics_repair": {
+                    "name": "Oficina de Eletrônicos"
+                },
                 "craft/gardener": {
                     "name": "Jardineiro",
                     "terms": "Jardineiro"
                 "craft/gardener": {
                     "name": "Jardineiro",
                     "terms": "Jardineiro"
                     "name": "Ciclovia",
                     "terms": "Ciclovia"
                 },
                     "name": "Ciclovia",
                     "terms": "Ciclovia"
                 },
+                "highway/elevator": {
+                    "name": "Elevador"
+                },
                 "highway/footway": {
                     "name": "Caminho de Pedestre",
                     "terms": "Via de Pedestre, Caminho de Pedestre, Passeio, Calçada"
                 "highway/footway": {
                     "name": "Caminho de Pedestre",
                     "terms": "Via de Pedestre, Caminho de Pedestre, Passeio, Calçada"
                     "name": "Loja de Antiguidades",
                     "terms": "Antiquário"
                 },
                     "name": "Loja de Antiguidades",
                     "terms": "Antiquário"
                 },
+                "shop/appliance": {
+                    "name": "Loja de Eletrodomésticos"
+                },
                 "shop/art": {
                     "name": "Loja de Arte",
                     "terms": "Arte, Decoração, Produtos Artísticos, Produtos de Arte, Artesanato"
                 "shop/art": {
                     "name": "Loja de Arte",
                     "terms": "Arte, Decoração, Produtos Artísticos, Produtos de Arte, Artesanato"
index c291238b54ec55057b5cbc96b4f0fdb96f38d849..22a88a7fe6b9ab5f5eb8972ff6d08aeff46e570c 100644 (file)
                 "key": "C",
                 "annotation": "{n} elementos combinados.",
                 "not_eligible": "Estes elementos não podem ser combinados.",
                 "key": "C",
                 "annotation": "{n} elementos combinados.",
                 "not_eligible": "Estes elementos não podem ser combinados.",
+                "not_adjacent": "Estas linhas não podem ser unidas já que as suas extremidades não estão conectadas ",
                 "restriction": "Estes elementos não podem ser combinados porque pelo menos um deles é membro de uma relação \"{relation}\".",
                 "incomplete_relation": "Estes elementos não podem ser combinados porque pelo menos um deles não está completamente descarregado no mapa.",
                 "conflicting_tags": "Estes elementos não podem ser combinados porque algumas das suas etiquetas entram em conflito."
                 "restriction": "Estes elementos não podem ser combinados porque pelo menos um deles é membro de uma relação \"{relation}\".",
                 "incomplete_relation": "Estes elementos não podem ser combinados porque pelo menos um deles não está completamente descarregado no mapa.",
                 "conflicting_tags": "Estes elementos não podem ser combinados porque algumas das suas etiquetas entram em conflito."
             "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F"
         },
         "confirm": {
             "help_link_url": "https://wiki.openstreetmap.org/wiki/FAQ#I_have_just_made_some_changes_to_the_map._How_do_I_get_to_see_my_changes.3F"
         },
         "confirm": {
+            "okay": "Ok",
             "cancel": "Cancelar"
         },
         "splash": {
             "cancel": "Cancelar"
         },
         "splash": {
         "help": {
             "title": "Ajuda",
             "help": "#Ajuda\n\nEstá a usar um editor do [OpenStreetMap](http://www.openstreetmap.org/), o mapa mundial livre e editável.\nPode usá-lo para adicionar e atualizar dados da sua área, tornando-o num mapa de código e dados abertos mundial melhor para todos.\n\nAs alterações que fizer neste mapa serão visíveis para qualquer pessoa que\ndecida usar o OpenStreetMap. Para fazer uma edição, basta\n[iniciar sessão](https://www.openstreetmap.org/login).\n\nO [editor iD](http://ideditor.com/) é um projeto colaborativo com o [código-fonte disponível no GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Ajuda",
             "help": "#Ajuda\n\nEstá a usar um editor do [OpenStreetMap](http://www.openstreetmap.org/), o mapa mundial livre e editável.\nPode usá-lo para adicionar e atualizar dados da sua área, tornando-o num mapa de código e dados abertos mundial melhor para todos.\n\nAs alterações que fizer neste mapa serão visíveis para qualquer pessoa que\ndecida usar o OpenStreetMap. Para fazer uma edição, basta\n[iniciar sessão](https://www.openstreetmap.org/login).\n\nO [editor iD](http://ideditor.com/) é um projeto colaborativo com o [código-fonte disponível no GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Editar e Gravar\n\nEste editor foi concebido para editar ligado à internet, e está a utilizá-lo através de um site neste momento.\n\n### Selecionar elementos do mapa\n\nPara selecionar um elemento do mapa, como uma estrada ou uma loja, clique nesse elemento no mapa. Aparecerá de seguida um painel lateral com informações sobre o elemento onde poderá eliminar, alterar ou acrescentar informações.\n\nPara selecionar vários elementos, manter premida a tecla 'Shift' (maiúsculas), clicar e arrastar com o rato no mapa. Isto irá seleccionar todos os elementos dentro do rectângulo de seleção, permitindo fazer alterações em todos os elementos selecionados de uma só vez.\n\n### Gravar edições\n\nQuando faz alterações em estradas, edifícios e locais, as alterações são gravadas temporariamente no seu computador. Se clicar no botão Gravar essas alterações são enviadas para o OpenStreetMap. Não se preocupe caso cometa algum erro - pode desfazer as alterações clicando no botão Desfazer, assim como refazer as alterações desfeitas clicando no botão Refazer que se encontram no topo do ecrã.\n\nClique em 'Gravar' para terminar um conjunto de alterações - por exemplo, se terminou as alterações num local e quer fazer alterações noutro local. Terá oportunidade de rever as alterações que fez e o editor fornece sugestões úteis e avisos caso alguma alteração possa conter erros.\n\nSe tudo estiver bem, pode introduzir uma breve descrição explicando as alterações que fez e clicar de seguida em 'Gravar' de novo para enviar as alterações para o [OpenStreetMap.org](http://www.openstreetmap.org/) onde estarão visíveis para todos e onde outros podem melhorar e completar.\n\nCaso não possa terminar as edições de uma só vez, pode deixar o editor, ou inclusive fechar o navegador de internet e mais tarde regressar ao site do OpenStreetMap, editando-o novamente . Será mostrado então um aviso, caso seja o mesmo computador e mesmo navegador de internet, que tem alterações por gravar e se quer recuperar essas alterações, para continuar.\n\n### Usando o editor\n\nEstá disponível uma lista de atalhos [aqui](http://wiki.openstreetmap.org/wiki/ID/Shortcuts)\n",
             "roads": "# Estradas\n\nPode criar, corrigir e eliminar estradas com o editor. As estradas podem ser\nde qualquer tipo: caminhos, autoestradas, carreiros florestais ou agrícolas,\nruas pedonais, ciclovias, entre outras. Qualquer local que seja frequentemente\natravessado por pessoas deve ser normalmente colocado no mapa.\n\n### Selecionar\n\nClique numa estrada para a selecionar. Aparece o painel lateral direito para\npoder editar as caraterísticas da estrada e botões em redor da estrada.\n\n### Alterar\n\nClique na estrada que quer alterar. Se quiser adicionar pontos à estrada entre\ndois pontos existentes basta clicar 2 vezes sobre o segmento da estrada.\nPode então deslocar esse ponto acabado de criar.\n\nSe existir uma estrada com ligação a outra no terreno mas que no mapa não\nestão ligadas, basta deslocar um ponto de uma das estradas até à outra estrada\npara ficarem ligadas. É muito importante as estradas estarem corretamente\nligadas umas às outras para que os programas de rotas possam fornecer\ninformações corretas aos utilizadores.\n\nPode também clicar no botão de 'Mover' ou premir a tecla 'M' para mover\na estrada toda de uma só vez. No entanto deve-se ter cuidado ao fazer isso\npois todos os pontos da estrada, incluindo os pontos partilhados com\noutras estradas, serão movidos.\n\nPara dividir uma estrada em duas, útil por exemplo quando existe uma estrada\nno mapa que na realidade são 2 estradas diferentes com nomes diferentes,\nclique no ponto da estrada onde quer dividir e clique no botão da tesoura que\naparece ao lado do ponto. Esse botão aparece apenas se estiver selecionado o ponto e não a linha. Pode também combinar as 2 linhas numa só\nselecionando as duas estradas e clicando no botão + que aparece ao lado.\nSe existirem no mapa 2 estradas ligadas (nas extremidades ou num cruzamento)\nmas que na realidade não se ligam ou cruzam, basta selecionar o ponto comum\ne clicar no botão ao lado de desligar as linhas. Pode então deslocar o ponto\npara outro local.\n\n### Eliminar\n\nSe uma estrada estiver errada - pode-se confirmar pela imagem de satélite (ter em\nconta que a imagem de satélite pode ter alguns anos e a estrada pode ter sido\nconstruida posteriormente) e preferencialmente confirmar presencialmente  - pode\neliminar a estrada toda. É necessária precaução ao eliminar elementos do mapa.\nTal como qualquer outra alteração, os resultados serão visíveis a todos os outros.\n\nPode eliminar uma estrada clicando nela para a selecionar e de seguida\nclicar no ícone do caixote do lixo que aparece ao lado, ou simplesmente\npressionar na tecla 'Del' do teclado.\n\n### Criar\n\nEncontrou alguma estrada que não existe no mapa? Clique no botão 'Linha' que\nestá na parte superior ou pressione a tecla '2' para começar a desenhar a linha.\n\nClique no ponto inicial da estrada para começar a desenhá-la. Se já existir\numa estrada no mapa, mas que está incompleta, pode continuá-la bastando\npara isso clicar no ponto da extremidade da estrada existente e clicar no botão em redor 'Continuar esta linha'.\n\nAdicione então outros pontos de acordo com as imagens de satélite ou os trilhos\nGPS. Se a estrada que está a desenhar cruzar com outra estrada, crie um ponto\npor cima da outra estrada onde se cruzam. Quando terminar de desenhar\na estrada, clique duas vezes no último ponto da estrada ou pressione a tecla 'Enter' (mudança d linha).\n",
             "gps": "# GPS\n\nOs dados de GPS são a fonte mais fidedigna de dados no OpenStreetMap. Este editor suporta trilhos GPS locais - ficheiros `.gpx` que estejam no seu computador. Pode obter este tipo de trilhos GPS através de várias aplicações existentes para telemóveis assim como dispositivos GPS.\n\nPara mais informações sobre a obtenção de trilhos GPS, ver [Surveying with a GPS](http://learnosm.org/en/mobile-mapping/).\n\nPara usar um trilho GPX no editor para mapear, arraste o ficheiro GPX do seu computador para a janela do editor com o mapa. Se o ficheiro for reconhecido com sucesso, o trilho será adicionado ao mapa, aparecendo como uma linha de cor roxa. Clique no botão 'Dados do Mapa' à direita para ativar, desativar ou enquadrar nesta nova camada onde se situa o trilho GPX.\n\nO trilho GPX não é enviado diretamente para o OpenStreetMap - apenas pode servir de referência para si, por forma a desenhar com mais precisão elementos no mapa.\n\nTambém pode [enviar os seus trilhos GPS](http://www.openstreetmap.org/trace/create) para o OpenStreetMap para que possam ser úteis a outros utilizadores que editem o mapa.\n",
             "imagery": "# Imagens aéreas\n\nAs imagens aéreas são um recurso importante na criação e alteração\ndos mapas. Existem várias fontes de informações totalmente\ngratuitas no lado direito\ndo editor em 'Configurar imagem de fundo'.\n\nPor padrão são usadas as imagens aéreas do [Bing](http://www.bing.com/maps/), que\npodem variar no nível de qualidade. Em geral as capitais e os centros\nurbanos têm imagens de melhor qualidade. À medida que visualiza outras zonas do mapa podem aparecer novas fontes de imagens aéreas.\n\nPor vezes as imagens aéreas podem estar desalinhadas. Se notar que existe\numa grande quantidade de estradas 'fora do lugar'  pode ser um sinal que as imagens aéreas estão desalinhadas. Para as alinhar clique no botão do lado direito 'Configuração da imagem de fundo', de seguida clique em 'Corrigir alinhamento' e depois nas setas que aparecem para alinhar.\n",
             "roads": "# Estradas\n\nPode criar, corrigir e eliminar estradas com o editor. As estradas podem ser\nde qualquer tipo: caminhos, autoestradas, carreiros florestais ou agrícolas,\nruas pedonais, ciclovias, entre outras. Qualquer local que seja frequentemente\natravessado por pessoas deve ser normalmente colocado no mapa.\n\n### Selecionar\n\nClique numa estrada para a selecionar. Aparece o painel lateral direito para\npoder editar as caraterísticas da estrada e botões em redor da estrada.\n\n### Alterar\n\nClique na estrada que quer alterar. Se quiser adicionar pontos à estrada entre\ndois pontos existentes basta clicar 2 vezes sobre o segmento da estrada.\nPode então deslocar esse ponto acabado de criar.\n\nSe existir uma estrada com ligação a outra no terreno mas que no mapa não\nestão ligadas, basta deslocar um ponto de uma das estradas até à outra estrada\npara ficarem ligadas. É muito importante as estradas estarem corretamente\nligadas umas às outras para que os programas de rotas possam fornecer\ninformações corretas aos utilizadores.\n\nPode também clicar no botão de 'Mover' ou premir a tecla 'M' para mover\na estrada toda de uma só vez. No entanto deve-se ter cuidado ao fazer isso\npois todos os pontos da estrada, incluindo os pontos partilhados com\noutras estradas, serão movidos.\n\nPara dividir uma estrada em duas, útil por exemplo quando existe uma estrada\nno mapa que na realidade são 2 estradas diferentes com nomes diferentes,\nclique no ponto da estrada onde quer dividir e clique no botão da tesoura que\naparece ao lado do ponto. Esse botão aparece apenas se estiver selecionado o ponto e não a linha. Pode também combinar as 2 linhas numa só\nselecionando as duas estradas e clicando no botão + que aparece ao lado.\nSe existirem no mapa 2 estradas ligadas (nas extremidades ou num cruzamento)\nmas que na realidade não se ligam ou cruzam, basta selecionar o ponto comum\ne clicar no botão ao lado de desligar as linhas. Pode então deslocar o ponto\npara outro local.\n\n### Eliminar\n\nSe uma estrada estiver errada - pode-se confirmar pela imagem de satélite (ter em\nconta que a imagem de satélite pode ter alguns anos e a estrada pode ter sido\nconstruida posteriormente) e preferencialmente confirmar presencialmente  - pode\neliminar a estrada toda. É necessária precaução ao eliminar elementos do mapa.\nTal como qualquer outra alteração, os resultados serão visíveis a todos os outros.\n\nPode eliminar uma estrada clicando nela para a selecionar e de seguida\nclicar no ícone do caixote do lixo que aparece ao lado, ou simplesmente\npressionar na tecla 'Del' do teclado.\n\n### Criar\n\nEncontrou alguma estrada que não existe no mapa? Clique no botão 'Linha' que\nestá na parte superior ou pressione a tecla '2' para começar a desenhar a linha.\n\nClique no ponto inicial da estrada para começar a desenhá-la. Se já existir\numa estrada no mapa, mas que está incompleta, pode continuá-la bastando\npara isso clicar no ponto da extremidade da estrada existente e clicar no botão em redor 'Continuar esta linha'.\n\nAdicione então outros pontos de acordo com as imagens de satélite ou os trilhos\nGPS. Se a estrada que está a desenhar cruzar com outra estrada, crie um ponto\npor cima da outra estrada onde se cruzam. Quando terminar de desenhar\na estrada, clique duas vezes no último ponto da estrada ou pressione a tecla 'Enter' (mudança d linha).\n",
             "gps": "# GPS\n\nOs dados de GPS são a fonte mais fidedigna de dados no OpenStreetMap. Este editor suporta trilhos GPS locais - ficheiros `.gpx` que estejam no seu computador. Pode obter este tipo de trilhos GPS através de várias aplicações existentes para telemóveis assim como dispositivos GPS.\n\nPara mais informações sobre a obtenção de trilhos GPS, ver [Surveying with a GPS](http://learnosm.org/en/mobile-mapping/).\n\nPara usar um trilho GPX no editor para mapear, arraste o ficheiro GPX do seu computador para a janela do editor com o mapa. Se o ficheiro for reconhecido com sucesso, o trilho será adicionado ao mapa, aparecendo como uma linha de cor roxa. Clique no botão 'Dados do Mapa' à direita para ativar, desativar ou enquadrar nesta nova camada onde se situa o trilho GPX.\n\nO trilho GPX não é enviado diretamente para o OpenStreetMap - apenas pode servir de referência para si, por forma a desenhar com mais precisão elementos no mapa.\n\nTambém pode [enviar os seus trilhos GPS](http://www.openstreetmap.org/trace/create) para o OpenStreetMap para que possam ser úteis a outros utilizadores que editem o mapa.\n",
             "imagery": "# Imagens aéreas\n\nAs imagens aéreas são um recurso importante na criação e alteração\ndos mapas. Existem várias fontes de informações totalmente\ngratuitas no lado direito\ndo editor em 'Configurar imagem de fundo'.\n\nPor padrão são usadas as imagens aéreas do [Bing](http://www.bing.com/maps/), que\npodem variar no nível de qualidade. Em geral as capitais e os centros\nurbanos têm imagens de melhor qualidade. À medida que visualiza outras zonas do mapa podem aparecer novas fontes de imagens aéreas.\n\nPor vezes as imagens aéreas podem estar desalinhadas. Se notar que existe\numa grande quantidade de estradas 'fora do lugar'  pode ser um sinal que as imagens aéreas estão desalinhadas. Para as alinhar clique no botão do lado direito 'Configuração da imagem de fundo', de seguida clique em 'Corrigir alinhamento' e depois nas setas que aparecem para alinhar.\n",
                 "internet_access/ssid": {
                     "label": "SSID (Nome da rede)"
                 },
                 "internet_access/ssid": {
                     "label": "SSID (Nome da rede)"
                 },
-                "kerb": {
-                    "label": "Rampa"
-                },
                 "lamp_type": {
                     "label": "Tipo"
                 },
                 "lamp_type": {
                     "label": "Tipo"
                 },
                 "maxstay": {
                     "label": "Tempo máximo"
                 },
                 "maxstay": {
                     "label": "Tempo máximo"
                 },
+                "maxweight": {
+                    "label": "undefined"
+                },
                 "mtb/scale": {
                     "label": "Dificuldade para bicicletas de montanha",
                     "options": {
                 "mtb/scale": {
                     "label": "Dificuldade para bicicletas de montanha",
                     "options": {
                     "name": "Universidade",
                     "terms": "University Grounds, Universidade, Faculdade, Instituto, Politécnico"
                 },
                     "name": "Universidade",
                     "terms": "University Grounds, Universidade, Faculdade, Instituto, Politécnico"
                 },
+                "amenity/vending_machine": {
+                    "name": "undefined"
+                },
                 "amenity/vending_machine/cigarettes": {
                     "name": "Máquina de tabaco",
                     "terms": "Cigarette Vending Machine, Tabaco, Cigarros"
                 "amenity/vending_machine/cigarettes": {
                     "name": "Máquina de tabaco",
                     "terms": "Cigarette Vending Machine, Tabaco, Cigarros"
                 "amenity/vending_machine/news_papers": {
                     "name": "Máquina de venda de jornais"
                 },
                 "amenity/vending_machine/news_papers": {
                     "name": "Máquina de venda de jornais"
                 },
+                "amenity/vending_machine/newspapers": {
+                    "name": "Máquina de venda automática de jornais "
+                },
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "Máquina para recolha/entrega de encomendas",
                     "terms": "Parcel Pickup/Dropoff Vending Machine"
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "Máquina para recolha/entrega de encomendas",
                     "terms": "Parcel Pickup/Dropoff Vending Machine"
                     "name": "Sítio de acampamento",
                     "terms": "Camp Pitch"
                 },
                     "name": "Sítio de acampamento",
                     "terms": "Camp Pitch"
                 },
+                "club": {
+                    "name": "Clube"
+                },
                 "craft": {
                     "name": "Artesão",
                     "terms": "Craft, Arofissão, Artesanato"
                 "craft": {
                     "name": "Artesão",
                     "terms": "Craft, Arofissão, Artesanato"
                     "name": "Loja de jardinagem",
                     "terms": "Garden Center, Flores, Artigos para jardinagem, Jardinagem, Jardinajem"
                 },
                     "name": "Loja de jardinagem",
                     "terms": "Garden Center, Flores, Artigos para jardinagem, Jardinagem, Jardinajem"
                 },
+                "shop/gas": {
+                    "name": "undefined"
+                },
                 "shop/gift": {
                     "name": "Loja de lembranças",
                     "terms": "Loja de Recordações"
                 "shop/gift": {
                     "name": "Loja de lembranças",
                     "terms": "Loja de Recordações"
index d748b12be1b89470879631f2e0ca4d101a473402..9cece05cc7b54abc99ed646492e83020f962be2b 100644 (file)
                     "area": "Am mutat o suprafață."
                 }
             },
                     "area": "Am mutat o suprafață."
                 }
             },
+            "reflect": {
+                "key": {
+                    "long": "T",
+                    "short": "Y"
+                }
+            },
             "rotate": {
                 "title": "Rotește",
                 "key": "R",
             "rotate": {
                 "title": "Rotește",
                 "key": "R",
             "hidden_warning": "{count} funcționalități ascunse"
         },
         "commit": {
             "hidden_warning": "{count} funcționalități ascunse"
         },
         "commit": {
+            "title": "Încarcă în OpenStreetMap",
             "cancel": "Renunță",
             "changes": "{count} Modificări",
             "warnings": "Atenționări",
             "cancel": "Renunță",
             "changes": "{count} Modificări",
             "warnings": "Atenționări",
         "save": {
             "title": "Salveaza",
             "no_changes": "Nici o modificare de salvat.",
         "save": {
             "title": "Salveaza",
             "no_changes": "Nici o modificare de salvat.",
+            "uploading": "Încarcă modificările în OpenStreetMap",
             "unsaved_changes": "Ai modificări nesalvate."
         },
         "success": {
             "view_on_osm": "Vezi pe OSM",
             "facebook": "Distribuie pe Facebook",
             "twitter": "Distribuie pe Twitter",
             "unsaved_changes": "Ai modificări nesalvate."
         },
         "success": {
             "view_on_osm": "Vezi pe OSM",
             "facebook": "Distribuie pe Facebook",
             "twitter": "Distribuie pe Twitter",
-            "google": "Distribuie pe Google+"
+            "google": "Distribuie pe Google+",
+            "help_link_text": "Detalii"
+        },
+        "confirm": {
+            "cancel": "Renunță"
         },
         "splash": {
             "welcome": "Bine ai venit în editorul iD OpenStreetMap",
         },
         "splash": {
             "welcome": "Bine ai venit în editorul iD OpenStreetMap",
             "in": "Mareste",
             "out": "Micsoreaza"
         },
             "in": "Mareste",
             "out": "Micsoreaza"
         },
+        "mapillary": {
+            "view_on_mapillary": "Vezi această imagine pe Mapillary"
+        },
         "help": {
             "title": "Ajutor"
         },
         "help": {
             "title": "Ajutor"
         },
                 "start": "Începe cartografierea!"
             }
         },
                 "start": "Începe cartografierea!"
             }
         },
+        "shortcuts": {
+            "or": "-sau-",
+            "browsing": {
+                "help": {
+                    "title": "Ajutor"
+                }
+            },
+            "editing": {
+                "commands": {
+                    "save": "Salvează modificările"
+                }
+            }
+        },
         "presets": {
             "fields": {
                 "address": {
         "presets": {
             "fields": {
                 "address": {
                 "amenity/bicycle_rental": {
                     "name": "Închiriere biciclete"
                 },
                 "amenity/bicycle_rental": {
                     "name": "Închiriere biciclete"
                 },
+                "amenity/bus_station": {
+                    "name": "Stație de autobuz"
+                },
                 "amenity/cafe": {
                     "name": "Cafenea"
                 },
                 "amenity/cafe": {
                     "name": "Cafenea"
                 },
                 },
                 "highway/steps": {
                     "name": "Scări"
                 },
                 "highway/steps": {
                     "name": "Scări"
+                },
+                "type/route/bus": {
+                    "name": "Traseu Autobuz"
                 }
             }
         }
                 }
             }
         }
index 3f7833c43763b02debc0d1ec40f2fb3c23fe2ae5..e8aedf7473fe2342edc8bd9c7b4ff14bb5be0058 100644 (file)
                 "choose_cafe": "**Выберите {preset} из списка.**",
                 "feature_editor": "Вы пометили точку как кафе. Используя свойства объекта, можно добавить больше информации о кофе.",
                 "add_name": "В OpenStreetMap все поля необязательные и это нормально оставить поле пустым если вы не уверены в его значении.{br}Предположим, у вас есть местное знание об этом кафе и вы знаете его название. **Добавьте название этого кафе.**",
                 "choose_cafe": "**Выберите {preset} из списка.**",
                 "feature_editor": "Вы пометили точку как кафе. Используя свойства объекта, можно добавить больше информации о кофе.",
                 "add_name": "В OpenStreetMap все поля необязательные и это нормально оставить поле пустым если вы не уверены в его значении.{br}Предположим, у вас есть местное знание об этом кафе и вы знаете его название. **Добавьте название этого кафе.**",
-                "add_close": "Редактор объектов запомнит все правки автоматически. **Когда вы завершите добавление имени нажмите ESC, ввод или  {button} кнопку, чтобы закрыть редактор объекта**",
                 "reselect": "Нередко точки уже нарисованы на карте, но неточно или с ошибками. Мы можем их поправить. **Нажмите и выберите кафе, которые вы создали.**",
                 "update": "Давайте добавим свойств этом кафе. Заполните его название, укажите кухню или добавьте адрес. **Заполните свойства кафе.**",
                 "play": "Теперь, когда вы знаете, как добавлять и править точки, попробуйте попрактиковаться и создать еще немного точек! **Когда вы будете готовы перейти к следующей главе, нажмите '{next}'.**"
             },
             "areas": {
                 "title": "Области",
                 "reselect": "Нередко точки уже нарисованы на карте, но неточно или с ошибками. Мы можем их поправить. **Нажмите и выберите кафе, которые вы создали.**",
                 "update": "Давайте добавим свойств этом кафе. Заполните его название, укажите кухню или добавьте адрес. **Заполните свойства кафе.**",
                 "play": "Теперь, когда вы знаете, как добавлять и править точки, попробуйте попрактиковаться и создать еще немного точек! **Когда вы будете готовы перейти к следующей главе, нажмите '{next}'.**"
             },
             "areas": {
                 "title": "Области",
+                "add_playground": "*Области* используются для обозначения таких объектов, как реки, здания и жилые сектора.{br}Их также можно применять для более детального отображения объектов, которые обычно указываются точками. **Нажмите кнопку полигона {button} для создания новой области.**",
                 "start_playground": "Давайте добавим игровую площадку на карту в виде области. Область рисуется размещением точек по периметру объекта. **Щелкните мышью или нажмите пробел для размещения первой точки на одном из углов площадки.**",
                 "start_playground": "Давайте добавим игровую площадку на карту в виде области. Область рисуется размещением точек по периметру объекта. **Щелкните мышью или нажмите пробел для размещения первой точки на одном из углов площадки.**",
-                "finish_playground": "Завершите область нажатием Ввод, или нажмите ещё раз по первому или последнему узлу. **Завершите рисование области игровой площадки.**",
                 "search_playground": "**Искать '{preset}'.**",
                 "choose_playground": "**Выберите {preset} из списка.**",
                 "add_field": "Эта детская площадка не имеет официального названия, поэтому мы не будем добавлять ничего в поле Название.{br}Вместо этого давайте добавим больше подробностей об этой детской площадке в поле Описание. **Откройте список «Добавить поле».**",
                 "search_playground": "**Искать '{preset}'.**",
                 "choose_playground": "**Выберите {preset} из списка.**",
                 "add_field": "Эта детская площадка не имеет официального названия, поэтому мы не будем добавлять ничего в поле Название.{br}Вместо этого давайте добавим больше подробностей об этой детской площадке в поле Описание. **Откройте список «Добавить поле».**",
             "lines": {
                 "title": "Линии",
                 "add_line": "*Линии* используются для обозначения таких объектов как дороги,  железные дороги и реки. **Нажми {button} кнопку Линия и добавь новую линию.**",
             "lines": {
                 "title": "Линии",
                 "add_line": "*Линии* используются для обозначения таких объектов как дороги,  железные дороги и реки. **Нажми {button} кнопку Линия и добавь новую линию.**",
+                "start_line": "Вот дорога, которая не нарисована. Давайте добавим её!{br}В OpenStreetMap линии должны быть нарисованы по центру дороги. Вы можете перетаскивать и масштабировать карту во время рисования, если это необходимо. **Начните новую линию, щёлкнув по верхнему концу этой отсутствующей дороги.**",
                 "retry_intersect": "Эта дорога должна пересекаться с {name}. Попробуй ещё раз!",
                 "retry_intersect": "Эта дорога должна пересекаться с {name}. Попробуй ещё раз!",
+                "choose_category_road": "**Выберите {category} из списка.**",
+                "choose_preset_residential": "Существует много различных типов дорог, но в данном случае это дорога вдоль жилых зон. **Выберите тип дороги «{preset}»**",
+                "retry_preset_residential": "Вы не выбрали тип  {preset}. **Щёлкните здесь, чтобы выбрать заново.**",
+                "did_name_road": "Замечательно! Теперь мы изучим как изменить форму линии.",
+                "update_line": "Иногда вам потребуется изменить форму существующей линии. Вот эта дорога явно выглядит не совсем правильно.",
+                "finish_drag_endpoint": "Вот неплохое место. **Отпустите левую кнопку мыши чтобы завершить перемещение.**",
                 "split_intersection": "**Щелкните кнопку {button} чтобы разделить {street}.**",
                 "retry_split": "Вы не щелкнули кнопку «Разделить». Попробуйте снова.",
                 "retry_delete": "Вы не щелкнули кнопку «Удалить». Попробуйте снова."
                 "split_intersection": "**Щелкните кнопку {button} чтобы разделить {street}.**",
                 "retry_split": "Вы не щелкнули кнопку «Разделить». Попробуйте снова.",
                 "retry_delete": "Вы не щелкнули кнопку «Удалить». Попробуйте снова."
                 "square_building": "Дом, который вы только что добавили, будет выглядеть еще лучше с идеально прямыми углами. **Нажмите кнопку {button} чтобы спрямить форму здания.**",
                 "retry_square": "Вы не щелкнули кнопку «Спрямить углы». Попробуйте снова.",
                 "add_tank": "Теперь мы обрисуем этот круглый резервуар. **Нажмите {button} кнопку «Область» чтобы добавить новую область.**",
                 "square_building": "Дом, который вы только что добавили, будет выглядеть еще лучше с идеально прямыми углами. **Нажмите кнопку {button} чтобы спрямить форму здания.**",
                 "retry_square": "Вы не щелкнули кнопку «Спрямить углы». Попробуйте снова.",
                 "add_tank": "Теперь мы обрисуем этот круглый резервуар. **Нажмите {button} кнопку «Область» чтобы добавить новую область.**",
-                "retry_circle": "Вы не щелкнули кнопку «Скруглить». Попробуйте снова."
+                "search_tank": "**Искать '{preset}'.**",
+                "choose_tank": "**Выберите {preset} из списка**",
+                "retry_circle": "Вы не щелкнули кнопку «Скруглить». Попробуйте снова.",
+                "play": "Замечательно! Потренируйтесь обводить ещё несколько зданий, и попробуйте другие команды в меню редактирования. **Нажмите '{next}' когда будете готовы перейти к следующей главе.**"
             },
             "startediting": {
                 "title": "Редактировать",
             },
             "startediting": {
                 "title": "Редактировать",
                 "start": "Рисовать карту!"
             }
         },
                 "start": "Рисовать карту!"
             }
         },
+        "shortcuts": {
+            "key": {
+                "alt": "Alt",
+                "cmd": "Cmd",
+                "ctrl": "Ctrl",
+                "delete": "Delete",
+                "del": "Del",
+                "end": "End",
+                "enter": "Enter",
+                "esc": "Esc",
+                "home": "Home",
+                "option": "Option",
+                "pause": "Pause",
+                "pgdn": "PgDn",
+                "pgup": "PgUp",
+                "return": "Return",
+                "shift": "Shift",
+                "space": "Пробел"
+            },
+            "or": "-или-",
+            "browsing": {
+                "help": {
+                    "title": "Справка",
+                    "help": "Показать справку/документацию"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                 "information": {
                     "label": "Тип"
                 },
                 "information": {
                     "label": "Тип"
                 },
+                "inscription": {
+                    "label": "Надпись"
+                },
                 "internet_access": {
                     "label": "Доступ в Интернет",
                     "options": {
                 "internet_access": {
                     "label": "Доступ в Интернет",
                     "options": {
                 "internet_access/ssid": {
                     "label": "SSID (Название сети)"
                 },
                 "internet_access/ssid": {
                     "label": "SSID (Название сети)"
                 },
-                "kerb": {
-                    "label": "Бордюр"
-                },
                 "lamp_type": {
                     "label": "Тип"
                 },
                 "lamp_type": {
                     "label": "Тип"
                 },
                 "maxstay": {
                     "label": "Максимальное время остановки"
                 },
                 "maxstay": {
                     "label": "Максимальное время остановки"
                 },
+                "maxweight": {
+                    "label": "Макс. вес"
+                },
                 "mtb/scale": {
                     "label": "Сложность трассы для горного велосипеда",
                     "options": {
                 "mtb/scale": {
                     "label": "Сложность трассы для горного велосипеда",
                     "options": {
                     "terms": "гондола, лодка"
                 },
                 "aerialway/goods": {
                     "terms": "гондола, лодка"
                 },
                 "aerialway/goods": {
-                    "name": "Торговая авиалиния"
+                    "name": "Торговая авиалиния",
+                    "terms": "Воздушные перевозки,Карго,Авиаперевозки грузов"
                 },
                 "aerialway/magic_carpet": {
                     "name": "Ковёр-лифт",
                 },
                 "aerialway/magic_carpet": {
                     "name": "Ковёр-лифт",
                     "terms": "Вертолётная площадка"
                 },
                 "aeroway/runway": {
                     "terms": "Вертолётная площадка"
                 },
                 "aeroway/runway": {
-                    "name": "Взлетная полоса",
+                    "name": "Взлётная полоса",
                     "terms": "ВПП, Взлётно-посадочная полоса"
                 },
                 "aeroway/taxiway": {
                     "terms": "ВПП, Взлётно-посадочная полоса"
                 },
                 "aeroway/taxiway": {
                     "terms": "мороженое, замороженный йогурт"
                 },
                 "amenity/internet_cafe": {
                     "terms": "мороженое, замороженный йогурт"
                 },
                 "amenity/internet_cafe": {
-                    "name": "Интернет-кафе"
+                    "name": "Интернет-кафе",
+                    "terms": "Интернет-кафе,Интернет-клуб"
                 },
                 "amenity/kindergarten": {
                     "name": "Детский сад/ясли",
                 },
                 "amenity/kindergarten": {
                     "name": "Детский сад/ясли",
                     "name": "Университет / Институт",
                     "terms": "университет, колледж, вуз, институт, высшее образование"
                 },
                     "name": "Университет / Институт",
                     "terms": "университет, колледж, вуз, институт, высшее образование"
                 },
+                "amenity/vending_machine": {
+                    "name": "Торговый автомат",
+                    "terms": "Автомат по продаже товаров"
+                },
                 "amenity/vending_machine/cigarettes": {
                 "amenity/vending_machine/cigarettes": {
-                    "name": "Автомат по продаже сигарет."
+                    "name": "Автомат по продаже сигарет.",
+                    "terms": "Автомат по продаже сигарет"
                 },
                 "amenity/vending_machine/condoms": {
                 },
                 "amenity/vending_machine/condoms": {
-                    "name": "Автомат по продаже презервативов."
+                    "name": "Автомат по продаже презервативов.",
+                    "terms": "Автомат по продаже презервативов"
                 },
                 "amenity/vending_machine/drinks": {
                     "name": "Автомат по продаже напитков",
                 },
                 "amenity/vending_machine/drinks": {
                     "name": "Автомат по продаже напитков",
                 "amenity/vending_machine/news_papers": {
                     "name": "Автомат по продаже газет"
                 },
                 "amenity/vending_machine/news_papers": {
                     "name": "Автомат по продаже газет"
                 },
+                "amenity/vending_machine/newspapers": {
+                    "name": "Автомат по продаже газет",
+                    "terms": "Автомат по продаже газет,Автомат по продаже прессы,Автоматический газетный киоск"
+                },
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "Автомат для входящих почтовых посылок"
                 },
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "Автомат для входящих почтовых посылок"
                 },
                     "name": "Офис электрика",
                     "terms": "электрик"
                 },
                     "name": "Офис электрика",
                     "terms": "электрик"
                 },
+                "craft/electronics_repair": {
+                    "name": "Мастерская по ремонту электроники"
+                },
                 "craft/gardener": {
                     "name": "Ландшафтный дизайнер или садовник",
                     "terms": "садовник"
                 "craft/gardener": {
                     "name": "Ландшафтный дизайнер или садовник",
                     "terms": "садовник"
                     "terms": "перекресток, переезд, пересечение, скрещение"
                 },
                 "highway/crosswalk": {
                     "terms": "перекресток, переезд, пересечение, скрещение"
                 },
                 "highway/crosswalk": {
-                    "name": "Пешеходный переход",
+                    "name": "Пешеходный переход (зебра)",
                     "terms": "переход, пешеходный переход, зебра, светофор"
                 },
                 "highway/cycleway": {
                     "name": "Велодорожка",
                     "terms": "велодорожка, велосипедная дорожка"
                 },
                     "terms": "переход, пешеходный переход, зебра, светофор"
                 },
                 "highway/cycleway": {
                     "name": "Велодорожка",
                     "terms": "велодорожка, велосипедная дорожка"
                 },
+                "highway/elevator": {
+                    "name": "Лифт"
+                },
                 "highway/footway": {
                     "name": "Пешеходная дорожка",
                     "terms": "Пешеходная тропа, Пешая тропа"
                 "highway/footway": {
                     "name": "Пешеходная дорожка",
                     "terms": "Пешеходная тропа, Пешая тропа"
                     "name": "Баскетбольная площадка",
                     "terms": "баскетбольная площадка"
                 },
                     "name": "Баскетбольная площадка",
                     "terms": "баскетбольная площадка"
                 },
+                "leisure/pitch/beachvolleyball": {
+                    "name": "Площадка для пляжного волейбола"
+                },
                 "leisure/pitch/bowls": {
                     "name": "Площадка для боулинга"
                 },
                 "leisure/pitch/bowls": {
                     "name": "Площадка для боулинга"
                 },
                     "name": "Бассейн",
                     "terms": "плавательный бассейн, плавательный бассеин"
                 },
                     "name": "Бассейн",
                     "terms": "плавательный бассейн, плавательный бассеин"
                 },
+                "leisure/track": {
+                    "name": "Гоночный трек (не автоспорт)"
+                },
                 "leisure/water_park": {
                     "name": "Аквапарк",
                     "terms": "аквапарк"
                 "leisure/water_park": {
                     "name": "Аквапарк",
                     "terms": "аквапарк"
                     "name": "Исторический район со сложившимся именем",
                     "terms": "местность, район"
                 },
                     "name": "Исторический район со сложившимся именем",
                     "terms": "местность, район"
                 },
+                "place/quarter": {
+                    "name": "Подрайон / квартал"
+                },
                 "place/square": {
                     "name": "Площадь"
                 },
                 "place/square": {
                     "name": "Площадь"
                 },
+                "place/suburb": {
+                    "name": "Район / Пригород"
+                },
                 "place/town": {
                     "name": "Город",
                     "terms": "Город"
                 "place/town": {
                     "name": "Город",
                     "terms": "Город"
                     "name": "Магазин антиквариата",
                     "terms": "атниквариат"
                 },
                     "name": "Магазин антиквариата",
                     "terms": "атниквариат"
                 },
+                "shop/appliance": {
+                    "name": "Магазин бытовой техники"
+                },
                 "shop/art": {
                     "name": "Магазин произведений искусства",
                     "terms": "арт, арт-галлерея"
                 "shop/art": {
                     "name": "Магазин произведений искусства",
                     "terms": "арт, арт-галлерея"
index 9448fcee659c766ec1d13c72e0b6dbde44f4773b..930aa1fd616097ae09f4b74719a6535cf8a82ca1 100644 (file)
             "delete": {
                 "title": "Vymazať",
                 "description": {
             "delete": {
                 "title": "Vymazať",
                 "description": {
-                    "single": "Vymaž tento objekt natrvalo.",
-                    "multiple": "Vymaž tieto objekty natrvalo."
+                    "single": "Vymazať tento objekt natrvalo.",
+                    "multiple": "Vymazať tieto objekty natrvalo."
                 },
                 "annotation": {
                     "point": "Odstránenie bodu.",
                 },
                 "annotation": {
                     "point": "Odstránenie bodu.",
         "validations": {
             "disconnected_highway": "Rozpojená cesta",
             "disconnected_highway_tooltip": "Cesty by mali byť spojené s ďalšími cestami alebo vchodmi do budov.",
         "validations": {
             "disconnected_highway": "Rozpojená cesta",
             "disconnected_highway_tooltip": "Cesty by mali byť spojené s ďalšími cestami alebo vchodmi do budov.",
+            "old_multipolygon": "Multipolygónové značky na vonkajšej ceste",
+            "old_multipolygon_tooltip": "Tento štýl multipolygónu nie je schválený. Pridajte prosím značky samotnému multipolygónu namiesto vonkajšej cesty.",
             "untagged_point": "Neoznačený bod",
             "untagged_point_tooltip": "Vyberte typ objektu, ktorý popisuje, čo je tento bod.",
             "untagged_line": "Neoznačená čiara",
             "untagged_point": "Neoznačený bod",
             "untagged_point_tooltip": "Vyberte typ objektu, ktorý popisuje, čo je tento bod.",
             "untagged_line": "Neoznačená čiara",
         "help": {
             "title": "Pomoc",
             "help": "# Pomoc\n\nToto je editor pre [OpenStreetMap](http://www.openstreetmap.org/), slobodnú a upravovateľnú mapu sveta. Môžete ho používať na pridávanie a aktualizovanie údajov vo vašom okolí a vylepšiť tak mapu sveta s otvoreným kódom a dátami pre všetkých.\n\nÚpravy, ktoré v tejto mape spravíte, budú viditeľné pre každého, kto používa OpenStreetMap. Na to, aby ste mohli upravovať, sa budete musieť prihlásiť [prihlásiť](https://www.openstreetmap.org/login).\n\n[iD editor](http://ideditor.com/) je kolaboratívny projekt so [zdrojovým kódom dostupným na GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Pomoc",
             "help": "# Pomoc\n\nToto je editor pre [OpenStreetMap](http://www.openstreetmap.org/), slobodnú a upravovateľnú mapu sveta. Môžete ho používať na pridávanie a aktualizovanie údajov vo vašom okolí a vylepšiť tak mapu sveta s otvoreným kódom a dátami pre všetkých.\n\nÚpravy, ktoré v tejto mape spravíte, budú viditeľné pre každého, kto používa OpenStreetMap. Na to, aby ste mohli upravovať, sa budete musieť prihlásiť [prihlásiť](https://www.openstreetmap.org/login).\n\n[iD editor](http://ideditor.com/) je kolaboratívny projekt so [zdrojovým kódom dostupným na GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Upravovanie a ukladanie\n\nTento editor je primárne navrhnutý na prácu online, a aj práve teraz\nho používate cez internetovú stránku.\n\n### Výber objektov\n\nPre výber objektu, ako napríklad cesta alebo bod záujmu, naň kliknite\nna mape. Týmto sa vybraný objekt zvýrazní, otvorí sa panel s jeho\npodrobnosťami a zobrazí sa ponuka s úkonmi, ktoré môžete s objektom urobiť.\n\nViacero objektov je možné vybrať podržaním klávesu \"Shift\". Potom jednoducho\nkliknite na objekty, ktoré chcete vybrať, alebo pretiahnite po mape akoby ste\nchceli nakresliť obdĺžnik. Týmto sa zobrazí rám a vyberú sa všetky objekty, ktoré\nsa v ňom nachádzajú.\n\n### Ukladanie úprav\nKeď urobíte zmeny ako úpravy ciest, budov a miest, tieto budú lokálne uložené,\naž pokiaľ ich neuložíte na server. Netrápte sa ak urobíte chybu. Zmeny môžete\nvrátiť späť kliknutím na tlačítko vrátiť a zopakovať kliknutím na tlačidlo zopakovať.\n\nKeď chcete ukončiť sériu úprav, kliknite na \"Ulož\". Napríklad ak ste dokončili\nčasť mesta a chcete začať s inou časťou. Budete mať možnosť si prehliadnuť,\nčo ste urobili a editor poskytne užitočné návrhy a upozornenia, ak niečo nie je so\nzmenami v poriadku.\n\nAk všetko vyzerá v poriadku, môžete vyplniť krátky komentár vysvetľujúci, čo ste\nurobili a kliknite znovu na \"Ulož\" pre odoslanie zmien\nna [OpenStreetMap.org](http://www.openstreetmap.org/), kde budú viditeľné\npre ostatných používateľov a tak dostupné pre ďalšie vylepšenia.\n\nAk nemôžete dokončiť úpravy počas jedného sedenia, môžete zatvoriť okno\nprehliadača, vrátiť sa späť (na rovnakom prehliadači a počítači) a editor vám\nponúkne obnoviť vašu prácu.\n\n### Používanie editora\n\nZoznam dostupných klávesových skratiek je dostupný [tu](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n",
             "roads": "# Cesty\n\nS týmto editorom môžete cesty vytvoriť, opraviť alebo vymazať. Cesty môžu byť rôzneho druhu: chodníky, diaľnice, lesné cestičky, cyklochodníky a iné. Akýkoľvek často prechádzaný úsek by malo byť možné zmapovať.\n\n### Výber\n\nKliknite na cestu pre jej výber. Viditeľným by sa mal stať jej obrys spolu s malou ponukou nástrojov na mape a postranným panelom, ukazujúcim dodatočné informácie o ceste.\n\n### Úprava\n\nČasto krát uvidíte cesty, ktoré nie sú zarovnané so snímkami pod nimi alebo s GPS stopu. Tieto cesty môžete upraviť tak, aby boli na správnom mieste.\n\nNajskôr kliknite na cestu, ktorú chcete zmeniť. Týmto sa zvýrazní a po jej dĺžke sa ukážu kontrolné body, ktoré môžete pretiahnuť na lepšiu pozíciu. Ak chcete pridať nový kontrolný bod pre viac detailov, dva krát kliknite na časť cesty bez uzla a jeden bude pridaný.\n\nAk sa cesta spája s inou cestou, ale nie je správne spojená na mape, môžete pretiahnuť jeden z jej kontrolných bodov na druhú cestu, aby ste ich spojili. Spojenie ciest je dôležité pre mapu a nevyhnutné pre poskytovanie navigácie na cestách.\n\nMôžete tiež kliknúť na nástroj \"Presuň\" alebo stlačiť kláves \"M\" pre posunutie celej cesty naraz a potom kliknite znovu, aby ste uložili presun.\n\n### Vymazávanie\n\nAk je cesta úplne nesprávna - vidíte, že cesta neexistuje na satelitných snímkoch a najlepšie mate potvrdené zo samotného miesta, že tam cesta nie je - môžete ju vymazať, čím ju odstránite z mapy. Pri vymazávaní objektov buďte obozretný, rovnako ako pri iných úpravách sú výsledky viditeľné ostatnými a satelitné snímky sú často neaktuálne, takže cesta môže byť jednoducho novopostavená.\n\nCestu môžete vymazať, tak že na ňu kliknete čim ju vyberiete  a potom kliknete na ikonu smetného koša alebo stlačením klávesu \"Delete\".\n\n### Vytváranie\n\nZistili ste, že niekde by mala byť cesta ale ona tam nie je? Kliknite naľavo hore na ikonu \"Čiara\" alebo stlačte kláves \"2\" pre kreslenie čiary.\n\nAby ste začali kresliť, kliknite na začiatok cesty na mape. Ak cesta odbočuje z inej existujúcej cesty, začnite kliknútím na miesto, kde sa spájajú.\n\nPotom kliknite na body pozdĺž cesty tak, aby nasledovali správny smer podľa satelitných snímkov alebo GPS. Ak cesta, ktorú kreslíte, pretína ďalšiu cestu, spojte ich kliknutím v mieste križovatky. Keď ste hotový s skreslením, dva krát kliknite alebo stlačte kláves \"Enter\" na vašej klávesnici.\n",
             "gps": "# GPS\n\nzozbierané GPS údaje sú najcennejší zdroj dát pre OpenStreetMap. Tento editor\npodporuje stopy z lokálnych \".gpx\" súborov na vašom počítači. Tento typ GPS stôp\nmôžete zachytiť pomocou rôznych aplikácií pre smartfóny ako aj GPS\nprístrojmi.\n\nPre informácie, ako robiť GPS prieskum, si prečítajte\n[Mapovanie so smartfónom, GPS alebo papierom](http://learnosm.org/en/mobile-mapping/).\n\nPre použitie GPX stopy pre mapovanie, pretiahnite a pustite GPX súbor na mapový\neditor. Po rozpoznaní, bude pridaná na mapu ako jasná fialová\nčiara. Kliknite na ponuku \"Mapové údaje\" na pravej strane pre zapnutie,\nvypnutie alebo priblíženie na túto novú GPX vrstvu.\n\nGPX stopa nie je priamo nahraná na OpenStreetMap. Najlepší spôsob ako\nju využiť je, použiť ju ako predlohu pre zakreslovanie nových objektov\na potom ju [nahrať na OpenStreetMap](http://www.openstreetmap.org/trace/create)\npre ďalších uživateľov.\n",
             "imagery": "# Snímky povrchu\n\nLetecké snímky sú dôležitým zdrojom pre mapovanie. Kombinácia leteckých fotografií, satelitných snímok a voľne skompilovaných zdrojov je v editore dostupná vpravo pod ponukou \"Nastavenia pozadia\".\n\nŠtandardne je v editore predvolená satelitná vrstva z [Bing Maps](http://www.bing.com/maps/), ale ako posuniete a priblížite mapu na nové geografické miesta, dostupnými sa stanú nové zdroje. Niektoré krajiny ako Spojené Štáty, Francúzsko, a Dánsko majú pre niektoré oblasti dostupné veľmi kvalitné snímky.\n\nSnímky môžu byť niekedy posunuté voči mapovým dátam, kvôli chybe na strane poskytovateľa snímkov. Ak uvidíte veľa ciest posunutých voči pozadiu, neposúvajte ich hneď všetky, aby ste ich zarovnali s pozadím. Namiesto toho môžete upraviť snímky, aby odpovedali existujúcim dátam tým, že kliknete na \"Oprav zarovnanie\" naspodku Nastavenia pozadia.\n",
             "roads": "# Cesty\n\nS týmto editorom môžete cesty vytvoriť, opraviť alebo vymazať. Cesty môžu byť rôzneho druhu: chodníky, diaľnice, lesné cestičky, cyklochodníky a iné. Akýkoľvek často prechádzaný úsek by malo byť možné zmapovať.\n\n### Výber\n\nKliknite na cestu pre jej výber. Viditeľným by sa mal stať jej obrys spolu s malou ponukou nástrojov na mape a postranným panelom, ukazujúcim dodatočné informácie o ceste.\n\n### Úprava\n\nČasto krát uvidíte cesty, ktoré nie sú zarovnané so snímkami pod nimi alebo s GPS stopu. Tieto cesty môžete upraviť tak, aby boli na správnom mieste.\n\nNajskôr kliknite na cestu, ktorú chcete zmeniť. Týmto sa zvýrazní a po jej dĺžke sa ukážu kontrolné body, ktoré môžete pretiahnuť na lepšiu pozíciu. Ak chcete pridať nový kontrolný bod pre viac detailov, dva krát kliknite na časť cesty bez uzla a jeden bude pridaný.\n\nAk sa cesta spája s inou cestou, ale nie je správne spojená na mape, môžete pretiahnuť jeden z jej kontrolných bodov na druhú cestu, aby ste ich spojili. Spojenie ciest je dôležité pre mapu a nevyhnutné pre poskytovanie navigácie na cestách.\n\nMôžete tiež kliknúť na nástroj \"Presuň\" alebo stlačiť kláves \"M\" pre posunutie celej cesty naraz a potom kliknite znovu, aby ste uložili presun.\n\n### Vymazávanie\n\nAk je cesta úplne nesprávna - vidíte, že cesta neexistuje na satelitných snímkoch a najlepšie mate potvrdené zo samotného miesta, že tam cesta nie je - môžete ju vymazať, čím ju odstránite z mapy. Pri vymazávaní objektov buďte obozretný, rovnako ako pri iných úpravách sú výsledky viditeľné ostatnými a satelitné snímky sú často neaktuálne, takže cesta môže byť jednoducho novopostavená.\n\nCestu môžete vymazať, tak že na ňu kliknete čim ju vyberiete  a potom kliknete na ikonu smetného koša alebo stlačením klávesu \"Delete\".\n\n### Vytváranie\n\nZistili ste, že niekde by mala byť cesta ale ona tam nie je? Kliknite naľavo hore na ikonu \"Čiara\" alebo stlačte kláves \"2\" pre kreslenie čiary.\n\nAby ste začali kresliť, kliknite na začiatok cesty na mape. Ak cesta odbočuje z inej existujúcej cesty, začnite kliknútím na miesto, kde sa spájajú.\n\nPotom kliknite na body pozdĺž cesty tak, aby nasledovali správny smer podľa satelitných snímkov alebo GPS. Ak cesta, ktorú kreslíte, pretína ďalšiu cestu, spojte ich kliknutím v mieste križovatky. Keď ste hotový s skreslením, dva krát kliknite alebo stlačte kláves \"Enter\" na vašej klávesnici.\n",
             "gps": "# GPS\n\nzozbierané GPS údaje sú najcennejší zdroj dát pre OpenStreetMap. Tento editor\npodporuje stopy z lokálnych \".gpx\" súborov na vašom počítači. Tento typ GPS stôp\nmôžete zachytiť pomocou rôznych aplikácií pre smartfóny ako aj GPS\nprístrojmi.\n\nPre informácie, ako robiť GPS prieskum, si prečítajte\n[Mapovanie so smartfónom, GPS alebo papierom](http://learnosm.org/en/mobile-mapping/).\n\nPre použitie GPX stopy pre mapovanie, pretiahnite a pustite GPX súbor na mapový\neditor. Po rozpoznaní, bude pridaná na mapu ako jasná fialová\nčiara. Kliknite na ponuku \"Mapové údaje\" na pravej strane pre zapnutie,\nvypnutie alebo priblíženie na túto novú GPX vrstvu.\n\nGPX stopa nie je priamo nahraná na OpenStreetMap. Najlepší spôsob ako\nju využiť je, použiť ju ako predlohu pre zakreslovanie nových objektov\na potom ju [nahrať na OpenStreetMap](http://www.openstreetmap.org/trace/create)\npre ďalších uživateľov.\n",
             "imagery": "# Snímky povrchu\n\nLetecké snímky sú dôležitým zdrojom pre mapovanie. Kombinácia leteckých fotografií, satelitných snímok a voľne skompilovaných zdrojov je v editore dostupná vpravo pod ponukou \"Nastavenia pozadia\".\n\nŠtandardne je v editore predvolená satelitná vrstva z [Bing Maps](http://www.bing.com/maps/), ale ako posuniete a priblížite mapu na nové geografické miesta, dostupnými sa stanú nové zdroje. Niektoré krajiny ako Spojené Štáty, Francúzsko, a Dánsko majú pre niektoré oblasti dostupné veľmi kvalitné snímky.\n\nSnímky môžu byť niekedy posunuté voči mapovým dátam, kvôli chybe na strane poskytovateľa snímkov. Ak uvidíte veľa ciest posunutých voči pozadiu, neposúvajte ich hneď všetky, aby ste ich zarovnali s pozadím. Namiesto toho môžete upraviť snímky, aby odpovedali existujúcim dátam tým, že kliknete na \"Oprav zarovnanie\" naspodku Nastavenia pozadia.\n",
             "ok": "OK",
             "graph": {
                 "block_number": "<value for addr:block_number>",
             "ok": "OK",
             "graph": {
                 "block_number": "<value for addr:block_number>",
+                "city": "Smolník nad Žitavou",
                 "county": "<value for addr:county>",
                 "district": "<value for addr:district>",
                 "hamlet": "<value for addr:hamlet>",
                 "neighbourhood": "<value for addr:neighbourhood>",
                 "county": "<value for addr:county>",
                 "district": "<value for addr:district>",
                 "hamlet": "<value for addr:hamlet>",
                 "neighbourhood": "<value for addr:neighbourhood>",
+                "postcode": "490 93",
                 "province": "<value for addr:province>",
                 "quarter": "<value for addr:quarter>",
                 "state": "<value for addr:state>",
                 "subdistrict": "<value for addr:subdistrict>",
                 "suburb": "<value for addr:suburb>",
                 "province": "<value for addr:province>",
                 "quarter": "<value for addr:quarter>",
                 "state": "<value for addr:state>",
                 "subdistrict": "<value for addr:subdistrict>",
                 "suburb": "<value for addr:suburb>",
-                "countrycode": "sk"
+                "countrycode": "sk",
+                "name": {
+                    "1st-avenue": "Slnečná",
+                    "2nd-avenue": "Nová",
+                    "4th-avenue": "Karpatská",
+                    "5th-avenue": "Veterná",
+                    "6th-avenue": "Kožušnícka",
+                    "6th-street": "Agátová",
+                    "7th-avenue": "Tehelná",
+                    "8th-avenue": "Žitná",
+                    "9th-avenue": "Robotnícka",
+                    "10th-avenue": "Farská",
+                    "11th-avenue": "Jánošíkova",
+                    "12th-avenue": "Košická",
+                    "access-point-employment": "Agentúra Kappa",
+                    "adams-street": "Eleny Maróthy-Šoltésovej",
+                    "andrews-elementary-school": "Základná škola Martina Kukučína",
+                    "andrews-street": "Kukučínova",
+                    "armitage-street": "Inovecká",
+                    "barrows-school": "Stredné odborné učilište strojárske",
+                    "battle-street": "Duklianska",
+                    "bennett-street": "Družstevná",
+                    "bowman-park": "Mestský park",
+                    "collins-drive": "Kapušianska",
+                    "conrail-railroad": "Trať ŽSR",
+                    "conservation-park": "Žitavský park",
+                    "constantine-street": "Metodova",
+                    "cushman-street": "Priečna",
+                    "dollar-tree": "Sekáč Bangkok",
+                    "douglas-avenue": "Janka Kráľa",
+                    "east-street": "Ruská",
+                    "elm-street": "Lipová",
+                    "flower-street": "Kvetná",
+                    "foster-street": "Práce",
+                    "french-street": "Francúzska",
+                    "garden-street": "Záhadná",
+                    "gem-pawnbroker": "Záložňa Uno",
+                    "golden-finch-framing": "Sklenárstvo Da Vinci",
+                    "grant-avenue": "Národná",
+                    "hoffman-pond": "Bottov rybník",
+                    "hoffman-street": "Jána Bottu",
+                    "hook-avenue": "P. O. Hviezdoslava",
+                    "jefferson-street": "Vajanského",
+                    "kelsey-street": "Strojárenská",
+                    "lafayette-park": "Park SNP",
+                    "las-coffee-cafe": "Kaviareň tekvicové latte",
+                    "lincoln-avenue": "Svätoplukova",
+                    "lowrys-books": "Kníhkupectvo Gutenberg",
+                    "lynns-garage": "Autoservis A je to",
+                    "main-street-barbell": "Záložňa Golden",
+                    "main-street-cafe": "Kaviareň Jarmilka",
+                    "main-street-fitness": "Fitness centrum Spartan",
+                    "main-street": "Hlavná",
+                    "maple-street": "Floriánska",
+                    "marina-park": "Žabí park",
+                    "market-street": "Obchodná",
+                    "memory-isle-park": "Pustý park",
+                    "memory-isle": "Pustý ostrov",
+                    "michigan-avenue": "Slovenského národného povstania",
+                    "middle-street": "Sokolská",
+                    "millard-street": "Študentská",
+                    "moore-street": "Hurbanova",
+                    "morris-avenue": "Štúrova",
+                    "mural-mall": "Ulička oddychu",
+                    "paisanos-bar-and-grill": "U Fachmana",
+                    "paisley-emporium": "Druhá móda",
+                    "paparazzi-tattoo": "Super kérky",
+                    "pealer-street": "Okružná",
+                    "pine-street": "Podhorská",
+                    "pizza-hut": "Rýchla pizza",
+                    "portage-avenue": "Slovenských partizánov",
+                    "portage-river": "Domanižanka",
+                    "preferred-insurance-services": "Všeobecná zdravotná poisťovňa",
+                    "railroad-drive": "Železničná",
+                    "river-city-appliance": "Elektrosvet",
+                    "river-drive": "Riečna",
+                    "river-road": "Riečna",
+                    "river-street": "Žitavská",
+                    "riverside-cemetery": "Starý cintorín",
+                    "riverwalk-trail": "Nábrežný chodník",
+                    "riviera-theatre": "Divadlo Nová scéna",
+                    "rocky-river": "Slatina",
+                    "saint-joseph-river": "Žitava",
+                    "scidmore-park-petting-zoo": "Zoo pri Starom parku",
+                    "scidmore-park": "Starý park",
+                    "scouter-park": "Park spisovateľov",
+                    "sherwin-williams": "Farby-Laky",
+                    "south-street": "Južná",
+                    "southern-michigan-bank": "Fatrabanka",
+                    "spring-street": "Jarná",
+                    "sturgeon-river-road": "Mlynská",
+                    "three-rivers-city-hall": "Mestský úrad Smolník nad Žitavou",
+                    "three-rivers-elementary-school": "1. Základná škola",
+                    "three-rivers-fire-department": "Požiarna stanica Smolník",
+                    "three-rivers-high-school": "Bilingválne gymnázium Jozefa Zbranského",
+                    "three-rivers-middle-school": "Stredná odborná škola jadrovej fúzie",
+                    "three-rivers-municipal-airport": "Medzinárodné letisko Jozefa Murgaša",
+                    "three-rivers-post-office": "Hlavná pošta",
+                    "three-rivers-public-library": "Okresná knižnica",
+                    "three-rivers": "Smolník nad Žitavou",
+                    "unique-jewelry": "Zlatníctvo KM - Karol Malý",
+                    "walnut-street": "1. mája",
+                    "washington-street": "Bratislavská",
+                    "water-street": "Československej armády",
+                    "west-street": "Kmeťova",
+                    "wheeler-street": "Krížová",
+                    "william-towing": "Autoservis pitstop",
+                    "willow-drive": "Odborárov",
+                    "wood-street": "Stromová",
+                    "world-fare": "Smolnícke suveníry"
+                }
             },
             "welcome": {
                 "title": "Uvítanie",
             },
             "welcome": {
                 "title": "Uvítanie",
             },
             "navigation": {
                 "title": "Navigácia",
             },
             "navigation": {
                 "title": "Navigácia",
+                "drag": "Hlavná plocha zobrazuje nad pozadím mapové údaje z OpenStreetMap.{br}Presúvať sa môžete ťahaním za mapu alebo scrolovaním rovnako, ako u iných webových máp. **Potiahnite za mapu!**",
+                "zoom": "Mapu môžete priblížiť alebo oddialiť skrolovaním pomocou kolieska na myši alebo trackpadu, prípadne kliknutím na tlačítka {plus}/{minus}. **Priblížte mapu!**",
                 "features": "Slovo *objekty* používame pre popis vecí, ktoré sa zobrazujú na mape. Všetko v reálnom svete môže byť zmapované ako objekt v OpenStreetMap.",
                 "points_lines_areas": "Mapové objekty sú reprezentované pomocou *bodov, čiar alebo plôch.*",
                 "nodes_ways": "V OpenStreetMap sa body niekedy volajú *uzly*, a čiary a plochy sa niekedy volajú *cesty*. ",
                 "features": "Slovo *objekty* používame pre popis vecí, ktoré sa zobrazujú na mape. Všetko v reálnom svete môže byť zmapované ako objekt v OpenStreetMap.",
                 "points_lines_areas": "Mapové objekty sú reprezentované pomocou *bodov, čiar alebo plôch.*",
                 "nodes_ways": "V OpenStreetMap sa body niekedy volajú *uzly*, a čiary a plochy sa niekedy volajú *cesty*. ",
                 "did_name_road": "Vyzerá to dobre! Ďalej sa naučíme ako upraviť tvar čiary.",
                 "update_line": "Niekedy budete musieť zmeniť tvar existúcej čiary. Tu je cesta, ktorá nevyzerá celkom vporiadku.",
                 "add_node": "Môžeme k nej pridať niekoľko uzlov, aby sme vylepšili jej tvar. Jeden zo spôsobov ako pridať uzol je dvojkliknúť na čiaru, kde chcete pridať uzol. **Dvojkliknite na čiaru a pridajte nový uzol.**",
                 "did_name_road": "Vyzerá to dobre! Ďalej sa naučíme ako upraviť tvar čiary.",
                 "update_line": "Niekedy budete musieť zmeniť tvar existúcej čiary. Tu je cesta, ktorá nevyzerá celkom vporiadku.",
                 "add_node": "Môžeme k nej pridať niekoľko uzlov, aby sme vylepšili jej tvar. Jeden zo spôsobov ako pridať uzol je dvojkliknúť na čiaru, kde chcete pridať uzol. **Dvojkliknite na čiaru a pridajte nový uzol.**",
-                "start_drag_endpoint": "Keď je čiara vybraná, môžete presunúť hociktorý jej uzol tým, že naň kliknete, podržíte ľavé tlačítko a zaňho potiahnete. **Potiahnite za koncový bod a presuňte ho na misto, kde sa obe cesty pretínajú.**"
+                "start_drag_endpoint": "Keď je čiara vybraná, môžete presunúť hociktorý jej uzol tým, že naň kliknete, podržíte ľavé tlačítko a zaň potiahnete. **Potiahnite za koncový bod a presuňte ho na misto, kde sa obe cesty pretínajú.**",
+                "finish_drag_endpoint": "Toto miesto vyzerá dobre. **Uvoľnením ľavého tlačítka na myši dokončíte presúvanie.**",
+                "start_drag_midpoint": "V *stredovom bode* medzi uzlami sa zobrazujú malé trojuholníky. Ďalšou možnosťou ako vytvoriť nový uzol je potiahnuť stredový bod na nové miesto. **Potiahnite za trojuholník stredového bodu a vytvorte tak nový bod na cestnom oblúku.**",
+                "continue_drag_midpoint": "Teraz už čiara vyzerá oveľa lepšie! Pokračujte v upravovaní čiary dvojkliknutím alebo ťahaním za stredové body, až pokiaľ nebude krivka zodpovedať tvaru cesty. **Keď budete spokojný s tým, ako čiara vyzerá, kliknite na OK.**",
+                "delete_lines": "Je vporiadku vymazať čiary, ktorých cesty už neexitujú v reálnom svete.{br}Tu je príklad, keď mesto plánovalo ulicu {street}, ale nikdy ju nepostavilo. Túto časť mapy môžeme vylepšiť tak, že vymažeme prebytočné čiary.",
+                "rightclick_intersection": "Posledná existujúca cesta je ulica {street1}, takže ulicu {street2} *rozdelíme* v tejto križovatke a odstránime všetko nad ňou. **Kliknite pravým tlačítkom na uzol križovatky.**",
+                "split_intersection": "**Kliknite na tlačítko {button} a rozdeľte ulicu {street}.**",
+                "retry_split": "Neklikli ste na na tlačítko Rozdeliť. Skúste to znova.",
+                "did_split_multi": "Výborne! {street1} je teraz rozdelená na dve časti. Horná časť môže byť vymazaná. **Kliknite na hornú časť ulice {street2}, aby ste ju vybrali.**",
+                "did_split_single": " **Kliknite na hornú časť {street2}, aby ste ju vybrali.**",
+                "multi_select": "{selected} je teraz vybraná. Vyberme tiež ulicu {other1}. Vybrať viacero objektov naraz môžete pomocou kliknutia s podržaním klávesu shift.  **Podržte kláves shift a kliknite na {other2}**",
+                "multi_rightclick": "Dobre! Obe čiary na určené vymazanie sú vybrané.  **Kliknite pravým tlačitkom na jednu z čiar, čím zobrazíte editačné menu.**",
+                "multi_delete": "**Kliknite na tlačítko {button} a vymažte prebytočné čiary.**",
+                "retry_delete": "Neklikli ste na tlačítko Vymazať. Skúste to znova.",
+                "play": "Výborne! Využite schopnosti, ktoré ste sa naučili v tejto kapitole a cvične upravte zopár čiar. **Keď budete pripravený pokračovať na ďalšiu kapitolu, kliknite na \"{next}\".**"
             },
             "buildings": {
                 "title": "Budovy",
             },
             "buildings": {
                 "title": "Budovy",
-                "retry_circle": "Neklikli ste na tlačítko Usporiadať do kruhu. Skúste to ešte raz."
+                "add_building": "OpenStreetMap je najväčšia databáza budov na svete.{br}Môžete ju pomôcť vylepšiť tým, že obkreslíte budovy, ktoré ešte nie sú zmapované. **Kliknite na tlačítko {button}Plocha a pridajte novú plochu.**",
+                "start_building": "Pridajme do mapy tento dom obkreslením jeho obrysov.{br}Budovy by mali byť obkreslované pozdĺž ich pôdorysu tak presne ako je to len možné. **Kliknite alebo stlačte medzerník pre umiestnenie počiatočného uzla na jeden z rohov budovy.**",
+                "continue_building": "Pokračujte v pridávaní uzlov a obkreslovaní obrysu budovy. Nezabudnite, že mapu môžete priblížiť ak chcete pridať viac detajlov.{br}Dokončite budovu stlačením klávesu enter, alebo kliknutím buď na prvý alebo posledný uzol. **Dokončite obkreslovanie budovy.**",
+                "retry_building": "Zdá sa, že ste mali problém s umiestňovaním uzlov na rohy budovy. Skúste to znova!",
+                "choose_category_building": "**Vyberte {category} zo zoznamu.**",
+                "choose_preset_house": "Existuje veľa typov budov, ale táto je očividne dom.{br}Ak ste si neni istý typom, je vporiadku vybrať všeobecný typ \"Budova\". **Vyberte {preset} typ.**",
+                "close": "**Stlačte escape alebo kliknite na tlačítko {button} a zatvorte editor objektov.**",
+                "rightclick_building": "**Kliknite pravým tlačítkom, čim vyberiete budovu, ktorú ste práve vytvorili a zobrazíte editačné menu.**",
+                "square_building": "Dom, ktorý ste práve vytvorili bude vyzerať ešte lepšie s dokonale pravouhlými rohmi. **Kliknite na tlačítko {button}, čím usporiadate budovu do pravého uhla.**",
+                "retry_square": "Neklikli ste na tlačitko Usporiadať do pravého uhla. Skúste to ešte raz.",
+                "done_square": "Vidíte ako sa rohy budovy posunuli na ich správne miesto? Poďme sa naučiť ešte jeden užitočný trik.",
+                "add_tank": "Ďalej obkreslíme tento kruhový zásobník. **Kliknite na tlačítko {button} Plocha a pridajte novú plochu.**",
+                "start_tank": "Nebojte sa, numusíte nakresliť dokonalý kruh. Stačí, ak nakreslíte plochu vo vnútri zásobníka, ktorá sa dotýka jeho okraja. **Kliknite alebo stlačte medzerník pre umiestnenie počiatočného uzla na okraj zasobníku.**",
+                "continue_tank": "Pridajte ešte zopár uzlov okolo jeho okraju. Kruh bude vytvorený na vonkajšej strane uzlov, ktoré nakreslíte.{br}Dokončite plochu stlačením klávesu enter, alebo kliknutím buď na prvý alebo posledný uzol. **Dokončite obkreslovanie zásobníku.**",
+                "search_tank": "**Vyhľadajte \"{preset}.**",
+                "choose_tank": "**Vyberte {preset} zo zoznamu.**",
+                "rightclick_tank": "**Kliknite pravým tlačítkom, čim vyberiete zásobník, ktorý ste práve vytvorili a zobrazíte editačné menu.**",
+                "circle_tank": "**Kliknite na tlačítko {button}, čím usporiadate zásobník do kruhu.**",
+                "retry_circle": "Neklikli ste na tlačítko Usporiadať do kruhu. Skúste to ešte raz.",
+                "play": "Výborne! Skúste obkresliť zopár ďalších budov a vuskúšajte niektoré ďalšie príkazy v editačnom menu. **Keď budete pripravený pokračovať na ďalšiu kapitolu, kliknite \"{next}\".**"
             },
             "startediting": {
                 "title": "Začať upravovať",
             },
             "startediting": {
                 "title": "Začať upravovať",
+                "help": "Teraz ste pripravný upravovať OpenStreetMap!{br}Túto prehliadku môžete hocikedy zopakovať alebo si môžete prezrieť dokumentáciu tým, že kliknete na tlačítko {button} Pomoc.",
                 "save": "Nezabudnite pravidelne ukladať vaše zmeny!",
                 "start": "Začnite mapovať!"
             }
                 "save": "Nezabudnite pravidelne ukladať vaše zmeny!",
                 "start": "Začnite mapovať!"
             }
                 "bicycle_parking": {
                     "label": "Typ"
                 },
                 "bicycle_parking": {
                     "label": "Typ"
                 },
+                "board_type": {
+                    "label": "Typ"
+                },
                 "boundary": {
                     "label": "Typ"
                 },
                 "boundary": {
                     "label": "Typ"
                 },
                 "building_area": {
                     "label": "Budova"
                 },
                 "building_area": {
                     "label": "Budova"
                 },
+                "bunker_type": {
+                    "label": "Typ"
+                },
+                "camera/direction": {
+                    "placeholder": "45, 90, 180, 270"
+                },
                 "capacity": {
                     "label": "Kapacita",
                     "placeholder": "50, 100, 200..."
                 "capacity": {
                     "label": "Kapacita",
                     "placeholder": "50, 100, 200..."
                         "WSW": "Západo-juhozápad"
                     }
                 },
                         "WSW": "Západo-juhozápad"
                     }
                 },
+                "castle_type": {
+                    "label": "Typ"
+                },
                 "clock_direction": {
                     "label": "Smer",
                     "options": {
                 "clock_direction": {
                     "label": "Smer",
                     "options": {
                         "clockwise": "V smere hodinových ručičiek"
                     }
                 },
                         "clockwise": "V smere hodinových ručičiek"
                     }
                 },
+                "club": {
+                    "label": "Typ"
+                },
                 "collection_times": {
                     "label": "Časy výberov"
                 },
                 "collection_times": {
                     "label": "Časy výberov"
                 },
                 "man_made": {
                     "label": "Typ"
                 },
                 "man_made": {
                     "label": "Typ"
                 },
+                "map_type": {
+                    "label": "Typ"
+                },
+                "maxheight": {
+                    "label": "Maximálna výška",
+                    "placeholder": "2, 2.5, 3, 3.5, 4, 5"
+                },
                 "maxspeed": {
                     "label": "Povolená rýchlosť",
                     "placeholder": "40, 50, 60..."
                 "maxspeed": {
                     "label": "Povolená rýchlosť",
                     "placeholder": "40, 50, 60..."
                     },
                     "placeholder": "Malé kolieska, kolesá, off-road..."
                 },
                     },
                     "placeholder": "Malé kolieska, kolesá, off-road..."
                 },
+                "social_facility": {
+                    "label": "Typ"
+                },
                 "source": {
                     "label": "Zdroj"
                 },
                 "source": {
                     "label": "Zdroj"
                 },
index ca5504eb241cfde945ca8d283009ce137d2665c1..1ecd43fe15e57c134bb09395eeaffad5693ef7d6 100644 (file)
@@ -3,8 +3,8 @@
         "modes": {
             "add_area": {
                 "title": "Mnogokotnik",
         "modes": {
             "add_area": {
                 "title": "Mnogokotnik",
-                "description": "Dodajanje parkov, zgradb, jezer ali drugih področja na zemljevid.",
-                "tail": "Kliknite na zemljevid za začetek risanja območja, kot so npr. park, jezero, stavba."
+                "description": "Dodajanje parkov, zgradb, jezer ali drugih področij na zemljevid.",
+                "tail": "Kliknite na zemljevid za začetek risanja območja, kot so na primer park, jezero ali stavba."
             },
             "add_line": {
                 "title": "Črta",
             },
             "add_line": {
                 "title": "Črta",
             },
             "browse": {
                 "title": "Prebrskaj",
             },
             "browse": {
                 "title": "Prebrskaj",
-                "description": "Premikanje in približanje zemljevida."
+                "description": "Premikanje po zemljevidu in približanje pogleda."
             },
             "draw_area": {
             },
             "draw_area": {
-                "tail": "Kliknite za dodajanje vozlišča področju. Za konec risanja kliknite prvo vozlišče."
+                "tail": "Kliknite za dodajanje vozlišč na mnogokotnik. S klikom na prvo vozlišče se risanje konča."
             },
             "draw_line": {
             },
             "draw_line": {
-                "tail": "Kliknite za dodajanje več vozlišč črti. S klikom na drugo črto bosta črti povezani, z dvoklikom pa bo risanje končano."
+                "tail": "Kliknite za dodajanje vozlišč na črto. S klikom na drugo črto se črti povežeta, z dvoklikom pa se risanje konča."
             }
         },
         "operations": {
             "add": {
                 "annotation": {
             }
         },
         "operations": {
             "add": {
                 "annotation": {
-                    "point": "Dodana je točka.",
-                    "vertex": "Na pot je dodano vozlišče.",
-                    "relation": "Dodana je zveza."
+                    "point": "dodajanje točke ×",
+                    "vertex": "dodano vozlišče ×",
+                    "relation": "dodajanje zveze ×"
                 }
             },
             "start": {
                 "annotation": {
                 }
             },
             "start": {
                 "annotation": {
-                    "line": "Začeto je risanje črte.",
-                    "area": "Začeto je risanje mnogokotnika."
+                    "line": "dodajanje črte ×",
+                    "area": "dodajanje mnogokotnika ×"
                 }
             },
             "continue": {
                 }
             },
             "continue": {
                 "title": "Nadaljuj",
                 "description": "Nadaljuj to črto",
                 "not_eligible": "Od tod ni mogoče nadaljevati nobene črte.",
                 "title": "Nadaljuj",
                 "description": "Nadaljuj to črto",
                 "not_eligible": "Od tod ni mogoče nadaljevati nobene črte.",
-                "multiple": "Od tod se lahko nadaljuje več črt. Za izbiro ene črte pritisnite Shift in kliknite na črto.",
+                "multiple": "Od tod je mogoče nadaljevati več črt. Za izbiro posamezne črte pritisnite tipko Shift in kliknite na črto.",
                 "annotation": {
                 "annotation": {
-                    "line": "Risanje črte se nadaljuje.",
-                    "area": "Risanje mnogokotnika se nadaljuje."
+                    "line": "nadaljevanje črte ×",
+                    "area": "risanje mnogokotnika ×"
                 }
             },
             "cancel_draw": {
                 }
             },
             "cancel_draw": {
-                "annotation": "Risanje je preklicano."
+                "annotation": "preklicano risanje ×"
             },
             "change_role": {
             },
             "change_role": {
-                "annotation": "Spremenjena je vloga člana zveze."
+                "annotation": "sprememba vloge člana zveze"
             },
             "change_tags": {
             },
             "change_tags": {
-                "annotation": "Spremenjene so oznake."
+                "annotation": "spremenjene oznake ×"
             },
             "circularize": {
                 "title": "Zaokroži",
             },
             "circularize": {
                 "title": "Zaokroži",
                 },
                 "key": "O",
                 "annotation": {
                 },
                 "key": "O",
                 "annotation": {
-                    "line": "Črta je spremenjena v krožnico.",
-                    "area": "Mnogokotnik je spremenjen v krog."
+                    "line": "zaokroževanje črte ×",
+                    "area": "zaokroževanje mnogokotnika ×"
                 },
                 "not_closed": "Izbora ni mogoče spremeniti v krog, ker zanka ni sklenjena.",
                 "too_large": "Tega mnogokotnika ni mogoče spremeniti v krog, ker ga preveč sega izven trenutnega vidnega polja.",
                 },
                 "not_closed": "Izbora ni mogoče spremeniti v krog, ker zanka ni sklenjena.",
                 "too_large": "Tega mnogokotnika ni mogoče spremeniti v krog, ker ga preveč sega izven trenutnega vidnega polja.",
-                "connected_to_hidden": "Te značilnosti ni mogoče spremeniti v krožno, ker je povezana s skrito značilnostjo."
+                "connected_to_hidden": "Predmeta ni mogoče spremeniti v krog, ker je povezan s skritim predmetom."
             },
             "orthogonalize": {
             },
             "orthogonalize": {
-                "title": "Kvadrat",
+                "title": "Poravnaj kote",
                 "description": {
                     "line": "Kote črte naredi pravokotne.",
                     "area": "Kote mnogokotnika naredi bolj pravokotne."
                 },
                 "key": "S",
                 "annotation": {
                 "description": {
                     "line": "Kote črte naredi pravokotne.",
                     "area": "Kote mnogokotnika naredi bolj pravokotne."
                 },
                 "key": "S",
                 "annotation": {
-                    "line": "Koti črte so postavljeni bolj pravokotno.",
-                    "area": "Koti mnogokotnika so postavljeni bolj pravokotno."
+                    "line": "popravljanje kotov črte ×",
+                    "area": "popravljanje kotov mnogokotnika ×"
                 },
                 "not_squarish": "Tega mnogokotnika ni mogoče narediti bolj pravokotnega, saj ni kvadratast.",
                 "too_large": "Tega mnogokotnika ni mogoče narediti bolj pravokotnega, ker ga preveč sega izven trenutnega vidnega polja.",
                 },
                 "not_squarish": "Tega mnogokotnika ni mogoče narediti bolj pravokotnega, saj ni kvadratast.",
                 "too_large": "Tega mnogokotnika ni mogoče narediti bolj pravokotnega, ker ga preveč sega izven trenutnega vidnega polja.",
             },
             "straighten": {
                 "title": "Poravnaj",
             },
             "straighten": {
                 "title": "Poravnaj",
-                "description": "Poravnaj to črto",
+                "description": "Poravnaj črto",
                 "key": "S",
                 "key": "S",
-                "annotation": "Črta je poravnana.",
+                "annotation": "ravnanje črte ×",
                 "too_bendy": "Črte ni mogoče poravnati, ker je preveč upognjena.",
                 "connected_to_hidden": "Črte ni mogoče poravnati, ker je povezana z drugim skritim predmetom."
             },
             "delete": {
                 "title": "Odstrani",
                 "description": {
                 "too_bendy": "Črte ni mogoče poravnati, ker je preveč upognjena.",
                 "connected_to_hidden": "Črte ni mogoče poravnati, ker je povezana z drugim skritim predmetom."
             },
             "delete": {
                 "title": "Odstrani",
                 "description": {
-                    "single": "Izbriši predmet nepovratno.",
-                    "multiple": "Izbriši predmete nepovratno."
+                    "single": "Nepovratno izbriši predmet.",
+                    "multiple": "Nepovratno izbriši predmete."
                 },
                 "annotation": {
                 },
                 "annotation": {
-                    "point": "Točka je izbrisana.",
-                    "vertex": "Vozlišče je izbrisano.",
-                    "line": "Črta je izbrisana.",
-                    "area": "Izrisan je mnogokotnik.",
-                    "relation": "Odstranjena je zveza.",
-                    "multiple": "Izbrisanih je {n} predmetov."
+                    "point": "brisanje točke ×",
+                    "vertex": "izbrisano vozlišč ×",
+                    "line": "brisanje črte ×",
+                    "area": "brisanje mnogokotnika ×",
+                    "relation": "brisanje zveze ×",
+                    "multiple": "brisanje {n} predmetov ×"
                 },
                 "too_large": {
                     "single": "Predmeta ni mogoče izbrisati, ker trenutno ni v celoti viden.",
                 },
                 "too_large": {
                     "single": "Predmeta ni mogoče izbrisati, ker trenutno ni v celoti viden.",
                 }
             },
             "add_member": {
                 }
             },
             "add_member": {
-                "annotation": "V zvezo je dodan član."
+                "annotation": "dodajanje člana v zvezo ×"
             },
             "delete_member": {
             },
             "delete_member": {
-                "annotation": "Iz zveze je odstranjen član."
+                "annotation": "brisanje člana iz zveze ×"
             },
             "connect": {
                 "annotation": {
             },
             "connect": {
                 "annotation": {
-                    "point": "Pot je povezana s točko.",
-                    "vertex": "Pot je povezana z drugo potjo.",
-                    "line": "Pot je povezana s črto.",
-                    "area": "Pot je povezna z mnogokotnikom."
+                    "point": "povezovanje poti s točko ×",
+                    "vertex": "povezovanje poti z drugo potjo ×",
+                    "line": "povezovanje poti s črto ×",
+                    "area": "povezovanje poti z mnogokotnikom"
                 }
             },
             "disconnect": {
                 "title": "Razveži",
                 "description": "Razveže črti ali mnogokotnika.",
                 "key": "D",
                 }
             },
             "disconnect": {
                 "title": "Razveži",
                 "description": "Razveže črti ali mnogokotnika.",
                 "key": "D",
-                "annotation": "Črti ali mnogokotnika sta razvezana.",
-                "not_connected": "Izbora ni mogoče spremeniti v krog, ker izbor sega izven trenutnega vidnega polja.",
+                "annotation": "razvezovanje črt / mnogokotnika ×",
+                "not_connected": "Ni dovolj črt oziroma mnogokotnikov za prekinitev vezi.",
                 "connected_to_hidden": "Povezav predmeta ni mogoče prekiniti, ker je predmet povezan s skritim predmetom.",
                 "relation": "Predmeta ni mogoče odvezati, saj povezuje člane zveze."
             },
             "merge": {
                 "connected_to_hidden": "Povezav predmeta ni mogoče prekiniti, ker je predmet povezan s skritim predmetom.",
                 "relation": "Predmeta ni mogoče odvezati, saj povezuje člane zveze."
             },
             "merge": {
-                "title": "Združeno.",
-                "description": "Združi te značilnosti.",
+                "title": "Združi",
+                "description": "Združi izbrane predmete.",
                 "key": "C",
                 "key": "C",
-                "annotation": "Združenih {n} značilnosti.",
-                "not_eligible": "Teh predmetov ni mogoče združiti.",
+                "annotation": "združevanje {n} predmetov ×",
+                "not_eligible": "Izbranih predmetov ni mogoče združiti.",
                 "not_adjacent": "Predmetov ni mogoče združiti, ker končne točke niso povezane.",
                 "restriction": "Predmetov ni mogoče združiti, ker je vsaj en vključen v povezavo »{relation}«.",
                 "incomplete_relation": "Teh predmetov ni mogoče združiti, ker vsaj en ni v celoti prejet.",
                 "not_adjacent": "Predmetov ni mogoče združiti, ker končne točke niso povezane.",
                 "restriction": "Predmetov ni mogoče združiti, ker je vsaj en vključen v povezavo »{relation}«.",
                 "incomplete_relation": "Teh predmetov ni mogoče združiti, ker vsaj en ni v celoti prejet.",
                 },
                 "key": "M",
                 "annotation": {
                 },
                 "key": "M",
                 "annotation": {
-                    "point": "Točka je premaknjena.",
-                    "vertex": "Vozlišče je premaknjeno.",
-                    "line": "Črta je premaknjena.",
-                    "area": "Mnogokotnik je premaknjen.",
-                    "multiple": "Premaknjenih je več predmetov."
+                    "point": "premikanje točke ×",
+                    "vertex": "premikanje vozlišča ×",
+                    "line": "premikanje črte ×",
+                    "area": "premikanje mnogokotnika ×",
+                    "multiple": "premikanje več predmetov ×"
                 },
                 "incomplete_relation": {
                     "single": "Predmeta ni mogoče premakniti, ker ni v celoti prejet.",
                     "multiple": "Predmetov ni mogoče premakniti, ker niso v celoti prejeti."
                 },
                 "incomplete_relation": {
                     "single": "Predmeta ni mogoče premakniti, ker ni v celoti prejet.",
                     "multiple": "Predmetov ni mogoče premakniti, ker niso v celoti prejeti."
+                },
+                "too_large": {
+                    "single": "Predmeta ni mogoče premakniti, ker trenutno ni v celoti viden.",
+                    "multiple": "Predmetov ni mogoče premakniti, ker trenutno niso v celoti vidni."
+                },
+                "connected_to_hidden": {
+                    "single": "Predmeta ni mogoče premakniti, ker je povezan z drugim skritim predmetom.",
+                    "multiple": "Predmetov ni mogoče premakniti, ker so povezani z drugim skritimi predmeti."
                 }
             },
             "reflect": {
                 }
             },
             "reflect": {
                 },
                 "description": {
                     "long": {
                 },
                 "description": {
                     "long": {
-                        "single": "Zrcali predmet prek osi daljše stranice.",
-                        "multiple": "Zrcali predmete prek osi daljše stranice."
+                        "single": "Zrcali predmet prek sredinske osi po daljši stranici.",
+                        "multiple": "Zrcali predmete prek sredinske osi po daljši stranici."
                     },
                     "short": {
                     },
                     "short": {
-                        "single": "Zrcali predmet prek osi krajše stranice.",
-                        "multiple": "Zrcali predmete prek osi krajše stranice."
+                        "single": "Zrcali predmet prek sredinske osi po krajši stranici.",
+                        "multiple": "Zrcali predmete prek sredinske osi po krajši stranici."
                     }
                 },
                 "key": {
                     }
                 },
                 "key": {
                 },
                 "annotation": {
                     "long": {
                 },
                 "annotation": {
                     "long": {
-                        "single": "Predmet je zrcaljen prek osi daljše stranice.",
-                        "multiple": "Več predmetov je zrcaljenih prek osi daljše stranice."
+                        "single": "zrcaljenje predmeta prek osi daljše stranice ×",
+                        "multiple": "zrcaljenje več predmetov prek osi daljše stranice ×"
                     },
                     "short": {
                     },
                     "short": {
-                        "single": "Predmet je zrcaljen prek osi krajše stranice."
+                        "single": "zrcaljenje predmeta prek osi krajše stranice ×",
+                        "multiple": "zrcaljenje več predmetov prek osi krajše stranice ×"
                     }
                     }
+                },
+                "incomplete_relation": {
+                    "single": "Predmeta ni mogoče zrcaliti, ker ni v celoti prejet.",
+                    "multiple": "Predmetov ni mogoče zrcaliti, ker niso v celoti prejeti."
+                },
+                "too_large": {
+                    "single": "Predmeta ni mogoče zrcaliti, ker ni v celoti viden.",
+                    "multiple": "Predmetov ni mogoče zrcaliti, ker niso v celoti vidni."
+                },
+                "connected_to_hidden": {
+                    "single": "Predmeta ni mogoče zrcaliti, ker je povezan s skritim predmetom.",
+                    "multiple": "Predmetov ni mogoče zrcaliti, ker so povezani s skritimi predmeti."
                 }
             },
             "rotate": {
                 }
             },
             "rotate": {
                 },
                 "key": "R",
                 "annotation": {
                 },
                 "key": "R",
                 "annotation": {
-                    "line": "Črta je zasukana.",
-                    "area": "Mnogokotnik je zasukan.",
-                    "multiple": "Zasukanih je več predmetov."
+                    "line": "zasukanje črte ×",
+                    "area": "zasukanje mnogokotnika ×",
+                    "multiple": "zasukanje več predmetov ×"
+                },
+                "incomplete_relation": {
+                    "single": "Predmeta ni mogoče zasukati, ker trenutno ni v celoti prejet.",
+                    "multiple": "Predmetov ni mogoče zasukati, ker trenutno niso v celoti prejeti."
+                },
+                "too_large": {
+                    "single": "Predmeta ni mogoče zasukati, ker ni v celoti viden.",
+                    "multiple": "Predmetov ni mogoče zasukati, ker niso v celoti vidni."
+                },
+                "connected_to_hidden": {
+                    "single": "Predmeta ni mogoče zrcaliti, ker je povezan s skritim predmetom.",
+                    "multiple": "Predmetov ni mogoče zasukati, ker so povezani s skritimi predmeti."
                 }
             },
             "reverse": {
                 "title": "Obrni usmerjenost",
                 "description": "Obrne usmerjenost izbrane črte.",
                 "key": "V",
                 }
             },
             "reverse": {
                 "title": "Obrni usmerjenost",
                 "description": "Obrne usmerjenost izbrane črte.",
                 "key": "V",
-                "annotation": "Črta je obrnjena."
+                "annotation": "obračanje črte ×"
             },
             "split": {
                 "title": "Razdeli",
             },
             "split": {
                 "title": "Razdeli",
                 },
                 "key": "X",
                 "annotation": {
                 },
                 "key": "X",
                 "annotation": {
-                    "line": "Črta je razcepljena.",
-                    "area": "Stranica mnogokotnika je razcepljena.",
-                    "multiple": "{n} črt/stranic mnogokotnika je razcepljenih."
+                    "line": "razdeljevanje črte ×",
+                    "area": "razdeljevanje stranica mnogokotnika ×",
+                    "multiple": "razdeljevanje {n} črt/stranic mnogokotnika"
                 },
                 "not_eligible": "Črt ni mogoče razdeliti na začetni ali končni točki.",
                 },
                 "not_eligible": "Črt ni mogoče razdeliti na začetni ali končni točki.",
-                "multiple_ways": "Črt je preveč za razcep.",
+                "multiple_ways": "Za razdeljevanje je izbranih preveč črt.",
                 "connected_to_hidden": "Predmeta ni mogoče razdeliti, ker je povezan s skritim predmetom."
             },
             "restriction": {
                 "help": {
                 "connected_to_hidden": "Predmeta ni mogoče razdeliti, ker je povezan s skritim predmetom."
             },
             "restriction": {
                 "help": {
-                    "select": "Kliknite tukaj za izbiro dseka ceste.",
-                    "toggle": "Kliknite za preklop omejitve zavijanja.",
-                    "toggle_on": "Kliknite za dodajanje omejitve \\{restriction}\\ .",
-                    "toggle_off": "Kliknite za odstranjevanje omejitve \\{restriction}\\."
+                    "select": "Kliknite za izbiro odseka ceste.",
+                    "toggle": "Kliknite za preklop omejitev zavijanja.",
+                    "toggle_on": "Kliknite za dodajanje omejitve »{restriction}«.",
+                    "toggle_off": "Kliknite za odstranjevanje omejitve »{restriction}«."
                 },
                 "annotation": {
                 },
                 "annotation": {
-                    "create": "Omejitev zavijanja je dodana",
-                    "delete": "Omejitev zavijanja je odstranjena."
+                    "create": "dodajanje omejitve zavijanja ×",
+                    "delete": "odstranjevanje omejitev zavijanja ×"
                 }
             }
         },
                 }
             }
         },
             "nothing": "Ni ponovnih uveljavitev"
         },
         "tooltip_keyhint": "Bližnjica:",
             "nothing": "Ni ponovnih uveljavitev"
         },
         "tooltip_keyhint": "Bližnjica:",
-        "browser_notice": "Urejevalnik podpirajo Firefox, Chrome, Safari, Opera, in Internet Explorer 11 oz. novejši. Za urejanje zemljevida nadgradite brskalnik ali uporabite Potlatch 2.",
+        "browser_notice": "Urejevalnik je podprt v brskalnikih Firefox, Chrome, Safari, Opera, in Internet Explorer 11 ali novejši. Za urejanje zemljevida nadgradite brskalnik ali uporabite Potlatch 2.",
         "translate": {
             "translate": "Prevedi",
         "translate": {
             "translate": "Prevedi",
-            "localized_translation_label": "Večjezično ime",
+            "localized_translation_label": "Večjezični naziv",
             "localized_translation_language": "Izbor jezika",
             "localized_translation_language": "Izbor jezika",
-            "localized_translation_name": "Ime"
+            "localized_translation_name": "Naziv"
         },
         "zoom_in_edit": "Za urejanje približajte pogled",
         },
         "zoom_in_edit": "Za urejanje približajte pogled",
+        "login": "prijava",
         "logout": "odjava",
         "loading_auth": "Vzpostavljanje povezave z OpenStreetMap ...",
         "logout": "odjava",
         "loading_auth": "Vzpostavljanje povezave z OpenStreetMap ...",
-        "report_a_bug": "Sporoči napako",
-        "help_translate": "Pomagaj prevesti",
+        "report_a_bug": "Pošlji sporočilo napaki",
+        "help_translate": "Sodelujte pri prevodu",
         "feature_info": {
         "feature_info": {
-            "hidden_warning": "{count} skritih predmetov"
+            "hidden_warning": "{count} skritih predmetov",
+            "hidden_details": "Nekateri predmeti so trenutno skriti: {details}"
         },
         "status": {
         },
         "status": {
-            "error": "Ne morem se povezati na API.",
-            "offline": "API je offline. Prosimo, poskusite urejati kasneje.",
-            "readonly": "API je na voljo samo za branje. Za shranjevanje vnesenih sprememb boste morali počakati."
+            "error": "Ni se mogoče povezati z vmesnikom API.",
+            "offline": "Povezava z vmesnik API ni vzpostavljena. Poskusite nadaljevati kasneje.",
+            "readonly": "Vmesnik API je na voljo le za branje. Za shranjevanje vnesenih sprememb bo treba počakati.",
+            "rateLimit": "Vmesnik API omejuje brezimne povezave. Napako je mogoče rešiti s prijavo v sistem."
         },
         "commit": {
             "title": "Pošlji na OpenStreetMap",
             "description_placeholder": "Kratek opis sprememb (zahtevan vpis)",
             "message_label": "Povzetek sprememb",
             "upload_explanation": "Spremembe, ki ji boste naložili, bodo vidne na vseh zemljevidih, ki uporabljajo podatke OpenStreetMap.",
         },
         "commit": {
             "title": "Pošlji na OpenStreetMap",
             "description_placeholder": "Kratek opis sprememb (zahtevan vpis)",
             "message_label": "Povzetek sprememb",
             "upload_explanation": "Spremembe, ki ji boste naložili, bodo vidne na vseh zemljevidih, ki uporabljajo podatke OpenStreetMap.",
-            "upload_explanation_with_user": "Spremembe, ki jih boste naložili kot {user}, bodo vidne na vseh zemljevidih, ki uporabljajo podatke OpenStreetMap.",
+            "upload_explanation_with_user": "Spremembe, ki jih objavite kot uporabnik {user}, bodo vidne na vseh zemljevidih, ki uporabljajo podatke OpenStreetMap.",
             "save": "Pošlji",
             "cancel": "Prekliči",
             "changes": "{count} sprememb",
             "save": "Pošlji",
             "cancel": "Prekliči",
             "changes": "{count} sprememb",
             "created": "Ustvarjeno",
             "about_changeset_comments": "O povzetkih sprememb",
             "about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/Good_changeset_comments",
             "created": "Ustvarjeno",
             "about_changeset_comments": "O povzetkih sprememb",
             "about_changeset_comments_link": "//wiki.openstreetmap.org/wiki/Good_changeset_comments",
+            "google_warning": "V opombi je omenjeno podjetje Google: kopiranje podatkov iz zemljevida Google je strogo prepovedano!",
             "google_warning_link": "http://www.openstreetmap.org/copyright"
         },
         "contributors": {
             "list": "Spremembe uporabnikov {users}",
             "google_warning_link": "http://www.openstreetmap.org/copyright"
         },
         "contributors": {
             "list": "Spremembe uporabnikov {users}",
-            "truncated_list": "Spremembe uporabnikov {users} in {count} ostalih"
+            "truncated_list": "Spremembe uporabnikov {users} in {count} drugih"
         },
         "infobox": {
             "selected": "{n} izbranih",
             "geometry": "Geometrija",
         },
         "infobox": {
             "selected": "{n} izbranih",
             "geometry": "Geometrija",
+            "closed": "zaprto",
+            "center": "Središče",
             "perimeter": "Obseg",
             "length": "Dolžina",
             "area": "Površina",
             "perimeter": "Obseg",
             "length": "Dolžina",
             "area": "Površina",
-            "centroid": "Centroid",
-            "location": "Lokacija",
-            "metric": "Metrične",
-            "imperial": "Imperialne"
+            "centroid": "Središčna točka",
+            "location": "Mesto",
+            "metric": "metri",
+            "imperial": "čevlji"
         },
         "geometry": {
             "point": "točka",
         },
         "geometry": {
             "point": "točka",
             "relation": "zveza"
         },
         "geocoder": {
             "relation": "zveza"
         },
         "geocoder": {
-            "search": "Išči po celem svetu ...",
-            "no_results_visible": "V vidnem polju zemljevida ni najdenih zadetkov",
+            "search": "Poišči po svetovnem zemljevidu ...",
+            "no_results_visible": "V vidnem polju zemljevida ni skladnih zadetkov",
             "no_results_worldwide": "Ni najdenih zadetkov"
         },
         "geolocate": {
             "no_results_worldwide": "Ni najdenih zadetkov"
         },
         "geolocate": {
             "locating": "Poteka določevanje trenutne točke ..."
         },
         "inspector": {
             "locating": "Poteka določevanje trenutne točke ..."
         },
         "inspector": {
-            "no_documentation_combination": "Za to kombinacijo oznak ni na voljo dokumentacije",
-            "no_documentation_key": "Za ta ključ ni na voljo dokumentacije",
+            "no_documentation_combination": "Za to kombinacijo oznak v dokumentaciji ni opisa",
+            "no_documentation_key": "Za ta ključ v dokumentaciji ni opisa",
+            "documentation_redirect": "Dostop do dokumentacije je preusmerjen na novo stran",
             "show_more": "Pokaži več",
             "view_on_osm": "Odpri na openstreetmap.org",
             "all_fields": "Vsa polja",
             "show_more": "Pokaži več",
             "view_on_osm": "Odpri na openstreetmap.org",
             "all_fields": "Vsa polja",
             "all_relations": "Vse zveze",
             "new_relation": "Nova zveza ...",
             "role": "Vloga",
             "all_relations": "Vse zveze",
             "new_relation": "Nova zveza ...",
             "role": "Vloga",
-            "choose": "Izberite vrsto elementa",
+            "choose": "Izberite vrsto predmeta",
             "results": "{n} zadetkov iskanja {search}",
             "reference": "Pokaži OSM Wiki",
             "results": "{n} zadetkov iskanja {search}",
             "reference": "Pokaži OSM Wiki",
-            "back_tooltip": "Spremeni element",
+            "back_tooltip": "Spremeni predmet",
             "remove": "Odstrani",
             "search": "Poišči",
             "multiselect": "Izbrani predmeti",
             "remove": "Odstrani",
             "search": "Poišči",
             "multiselect": "Izbrani predmeti",
             "radio": {
                 "structure": {
                     "type": "Vrsta",
             "radio": {
                 "structure": {
                     "type": "Vrsta",
-                    "default": "Privzeto"
+                    "default": "Privzeto",
+                    "layer": "Plast"
                 }
             },
             "add": "Dodaj",
                 }
             },
             "add": "Dodaj",
-            "none": "Noben",
+            "none": "Brez",
             "node": "Vozlišče",
             "way": "Pot",
             "relation": "Zveza",
             "node": "Vozlišče",
             "way": "Pot",
             "relation": "Zveza",
             "custom": "Po meri",
             "custom_button": "Uredi ozadje po meri",
             "custom_prompt": "Navedite naslov URL predloge. Dovoljeni nadomestni znaki so {zoom}, {x}, {y} za osi Z/X/Y in {u} za shemo quadtile.",
             "custom": "Po meri",
             "custom_button": "Uredi ozadje po meri",
             "custom_prompt": "Navedite naslov URL predloge. Dovoljeni nadomestni znaki so {zoom}, {x}, {y} za osi Z/X/Y in {u} za shemo quadtile.",
-            "fix_misalignment": "Prilagodi zamik ozadja",
-            "imagery_source_faq": "Od kod so ta ozadja?",
+            "fix_misalignment": "Popravi zamik ozadja",
+            "imagery_source_faq": "Od kod so ozadja zemljevida?",
             "reset": "ponastavi",
             "reset": "ponastavi",
-            "offset": "Povlecite kjerkoli v sivem področju spodaj za prilagoditev zamika ali vnašanje zamika z vrednostmi v metrih."
+            "offset": "Povlecite spodnje temnejše sivo področju za prilagoditev zamika ali pa vnesite zamik številčno v metrih.",
+            "minimap": {
+                "description": "Mini zemljevid",
+                "tooltip": "Pokaži oddaljen zemljevid za pomoč pri določanju trenutno prikazanega mesta."
+            }
         },
         "map_data": {
         },
         "map_data": {
-            "title": "Podatki zemljevida",
-            "description": "Podatki zemljevida",
+            "title": "Prikaz zemljevida",
+            "description": "Prikaz zemljevida",
             "data_layers": "Podatkovne plasti",
             "data_layers": "Podatkovne plasti",
-            "fill_area": "Zapolnjevanje področij",
-            "map_features": "Značilnosti zemljevida"
+            "fill_area": "Zapolnjevanje polj",
+            "map_features": "Predmeti zemljevida",
+            "autohidden": "Nekateri predmeti so samodejno skriti, da jih na zaslonu ni prikazanih preveč. Za urejanje je treba zemljevid približati."
         },
         "feature": {
             "points": {
         },
         "feature": {
             "points": {
-                "description": "Točke"
+                "description": "Točke",
+                "tooltip": "Točke POI"
             },
             "traffic_roads": {
                 "description": "Prometne poti",
             },
             "traffic_roads": {
                 "description": "Prometne poti",
-                "tooltip": "Ceste, ulice itd."
+                "tooltip": "Ceste, ulice, poti ..."
             },
             "service_roads": {
                 "description": "Servisne ceste",
             },
             "service_roads": {
                 "description": "Servisne ceste",
             },
             "buildings": {
                 "description": "Zgradbe",
             },
             "buildings": {
                 "description": "Zgradbe",
-                "tooltip": "Zgradbe, zavetišča, garaže itd."
+                "tooltip": "Zgradbe, zavetišča, garaže ...."
             },
             "landuse": {
                 "description": "Uporaba zemljišča",
             },
             "landuse": {
                 "description": "Uporaba zemljišča",
-                "tooltip": "Gozdovi, Obdelovalna zemlja, Stanovanjska zemljišča, Poslovna zemljišča itd."
+                "tooltip": "Gozdovi, njive, polja, stanovanjska ali poslovna zemljišča ..."
             },
             "boundaries": {
                 "description": "Meje",
                 "tooltip": "Administrativne meje"
             },
             "water": {
             },
             "boundaries": {
                 "description": "Meje",
                 "tooltip": "Administrativne meje"
             },
             "water": {
-                "description": "Vode"
+                "description": "Vode",
+                "tooltip": "Porečja, reke, jezera, ribniki ..."
             },
             "rail": {
                 "description": "Železnice",
                 "tooltip": "Železnice"
             },
             "power": {
             },
             "rail": {
                 "description": "Železnice",
                 "tooltip": "Železnice"
             },
             "power": {
-                "description": "Energijski objekti"
+                "description": "Energetski objekti",
+                "tooltip": "Električni daljnovodi, elektrarne, transformatorske postaje ..."
             },
             "past_future": {
             },
             "past_future": {
-                "description": "Preteklo/Prihodnje"
+                "description": "Preteklo/Prihodnje",
+                "tooltip": "V načrtovanju, gradbišče, zapuščeno, zrušeno ..."
             },
             "others": {
             },
             "others": {
-                "description": "Drugo"
+                "description": "Drugo",
+                "tooltip": "Vse ostalo"
             }
         },
         "area_fill": {
             "wireframe": {
             }
         },
         "area_fill": {
             "wireframe": {
-                "description": "Brez zapolnjevanja (mreža)"
+                "description": "Brez zapolnjevanja (le obroba)",
+                "tooltip": "S tanko črto je izrisana le obroba polja."
             },
             "partial": {
             },
             "partial": {
-                "description": "Delno zapolnjevanje",
-                "tooltip": "Področja bodo narisana s polnilom samo okoli notranjih robov (priporočljivo za začetnike)."
+                "description": "Delno zapolnjevanje (širši rob)",
+                "tooltip": "Polja so v notranjosti le debelo obrobljena z vzorcem (priporočljivo za začetnike)."
             },
             "full": {
                 "description": "Polno zapolnjevanje",
             },
             "full": {
                 "description": "Polno zapolnjevanje",
-                "tooltip": "Področja bodo polno zapolnjena."
+                "tooltip": "Narisano polje je v celoti zapolnjeno z vzorcem."
             }
         },
         "restore": {
             }
         },
         "restore": {
-            "heading": "Nekatere spremembe še niso bile shranjene.",
-            "description": "Ali želite ponovno odpeti še ne shranjene spremembe iz predhodnega urejanja?",
+            "heading": "Nekatere spremembe še niso shranjene.",
+            "description": "Ali želite ponovno obnoviti še ne shranjene spremembe predhodne seje urejanja?",
             "restore": "Obnovi",
             "reset": "Ponastavi"
         },
             "restore": "Obnovi",
             "reset": "Ponastavi"
         },
             "help": "Preverite narejene spremembe in jih pošljite na strežnik OpenStreetMap, da bodo na voljo tudi drugim uporabnikom.",
             "no_changes": "Ni sprememb za shranjevanje.",
             "error": "Med shranjevanjem je prišlo do napake",
             "help": "Preverite narejene spremembe in jih pošljite na strežnik OpenStreetMap, da bodo na voljo tudi drugim uporabnikom.",
             "no_changes": "Ni sprememb za shranjevanje.",
             "error": "Med shranjevanjem je prišlo do napake",
+            "status_code": "Strežnik je vrnil kodo stanja {code}",
+            "unknown_error_details": "Prepričajte se, da ste povezani na internet.",
             "uploading": "Poteka pošiljanje sprememb na OpenStreetMap ...",
             "uploading": "Poteka pošiljanje sprememb na OpenStreetMap ...",
-            "unsaved_changes": "Nekatere spremembe še niso bile shranjene.",
+            "unsaved_changes": "Nekatere spremembe še niso shranjene.",
             "conflict": {
                 "header": "Razreši spremembe v sporu",
                 "count": "Spor {num} od {total}",
             "conflict": {
                 "header": "Razreši spremembe v sporu",
                 "count": "Spor {num} od {total}",
-                "previous": "Nazaj",
-                "next": "Naprej",
+                "previous": "< Predhodni",
+                "next": "Naslednji >",
                 "keep_local": "Ohrani moje",
                 "keep_remote": "Uporabi spremembe drugih",
                 "restore": "Obnovi",
                 "delete": "Pusti izbrisano",
                 "keep_local": "Ohrani moje",
                 "keep_remote": "Uporabi spremembe drugih",
                 "restore": "Obnovi",
                 "delete": "Pusti izbrisano",
-                "download_changes": "Ali prejmite svoje spremembe.",
-                "done": "Vsi spori so razrešeni!"
+                "download_changes": "Ali pa prejmite spremembe.",
+                "done": "Vsi spori so razrešeni!",
+                "help": "Nekatere spremembe, ki ste jih vnesli, je spreminjal tudi drug uporabnik.\nKliknite na vsak predmet spodaj, si oglejte podrobnosti neskladnosti in se odločite, ali želite spremembe obdržati ali povrniti na spremembe drugega uporabnika.\n"
             }
         },
         "merge_remote_changes": {
             "conflict": {
             }
         },
         "merge_remote_changes": {
             "conflict": {
-                "memberlist": "Člane zveze je spreminjal tudi uporabnik {user}."
+                "deleted": "Predmet je izbrisal uporabnik {user}.",
+                "location": "Predmet sta premaknita oba; vi in uporabnik {user}.",
+                "nodelist": "Vozlišča sta preurejala oba; vi in uporabnik {user}.",
+                "memberlist": "Člane zveze je spreminjal tudi uporabnik {user}.",
+                "tags": "Spremenili ste oznako <b>{tag}</b> v »{local}«, uporabnik {user} pa jo je spremenil v »{remote}«."
             }
         },
         "success": {
             }
         },
         "success": {
-            "edited_osm": "OSM urejen!",
-            "just_edited": "Pravkar ste uredili OpenStreetMap zemljevid!",
+            "edited_osm": "OSM je posodobljen!",
+            "just_edited": "Zemljevid OSM je posodobljen!",
             "view_on_osm": "Pokaži spremembe na OSM",
             "facebook": "Objavi na Facebook",
             "twitter": "Objavi na Twitter",
             "view_on_osm": "Pokaži spremembe na OSM",
             "facebook": "Objavi na Facebook",
             "twitter": "Objavi na Twitter",
             "cancel": "Prekliči"
         },
         "splash": {
             "cancel": "Prekliči"
         },
         "splash": {
-            "welcome": "Dobrodošli v iD, urejevalniku OpenStreetMap podatkov",
-            "text": "iD je uporabniku prijazno, toda zmogljivo orodje za vnašanje na najboljši brezplačni svetovni zemljevid.  To je različica {version}. Več informacij je na voljo na {website}, sporočeni hrošči pa so na {github}.",
-            "walkthrough": "Začnite z uvodnim pregledom",
-            "start": "Začnite urejati"
+            "welcome": "Dobrodošli v iD, urejevalniku podatkov OpenStreetMap",
+            "text": "Urejevalnik iD je zmogljivo, uporabniku prijazno orodje za vnašanje podatkov na najboljši brezplačni svetovni zemljevid. Uporabljena je zadnja različica {version}. Več podrobnosti o urejevalniku je na voljo na {website}, poročila o hroščih pa se zbirajo na spletišču {github}.",
+            "walkthrough": "Predstavitev orodja",
+            "start": "Urejevalnik"
         },
         "source_switch": {
             "live": "v živo",
         },
         "source_switch": {
             "live": "v živo",
-            "lose_changes": "Nekatere spremembe še niso bile shranjene. Zamenjava strežnika zemljevida jih bo zavrgla. Ali ste prepričani, da želite zamenjati strežnik?",
+            "lose_changes": "Nekatere spremembe še niso shranjene. Zamenjava strežnika zemljevida jih bo zavrgla. Ali ste prepričani, da želite zamenjati strežnik?",
             "dev": "dev"
         },
         "version": {
             "dev": "dev"
         },
         "version": {
             "used_with": "uporabljeno: {type}"
         },
         "validations": {
             "used_with": "uporabljeno: {type}"
         },
         "validations": {
+            "disconnected_highway": "Nepovezana cesta",
+            "disconnected_highway_tooltip": "Ceste morajo biti povezane z drugimi cestami, parkirišči ali vhodi v zgradbe.",
+            "old_multipolygon": "Oznake mnogokotnika na obrisani poti",
+            "old_multipolygon_tooltip": "Ta vrsta mnogokotnika je opuščena. Namesto obrisani poti, dodelite oznake nadrejenemu mnogokotniku.",
             "untagged_point": "Točka je brez oznak",
             "untagged_point": "Točka je brez oznak",
-            "untagged_point_tooltip": "Izberite tip točkovnega objekta.",
+            "untagged_point_tooltip": "Izberite vrsto predmeta, , ki ga ponazarja točko na zemljevidu.",
             "untagged_line": "Črta je brez oznak",
             "untagged_line": "Črta je brez oznak",
-            "untagged_line_tooltip": "Izberite tip črtnega objekta.",
-            "untagged_area": "Mnogokotnik je brez oznak",
-            "untagged_area_tooltip": "Izberite tip objekta, ki opisuje to območje.",
+            "untagged_line_tooltip": "Izberite vrsto predmeta, ki ga ponazarja črta na zemljevidu.",
+            "untagged_area": "Dodan je mnogokotnik brez oznak",
+            "untagged_area_tooltip": "Izberite vrsto predmeta, ki ga ponazarja polje na zemljevidu.",
             "untagged_relation": "Neoznačena zveza",
             "untagged_relation_tooltip": "Izberite vrsto predmeta, ki opisuje zvezo.",
             "untagged_relation": "Neoznačena zveza",
             "untagged_relation_tooltip": "Izberite vrsto predmeta, ki opisuje zvezo.",
+            "many_deletions": "Izbrisati nameravate predmete ({n}). Ali ste prepričani, da želite nadaljevati? Predmeti bodo izbrisani iz zemljevida openstreetmap.org, ki ga vidijo vsi uporabniki.",
             "tag_suggests_area": "Oznaka {tag} nakazuje, da bi črta morala opisovati območje, vendar črta ni sklenjena",
             "deprecated_tags": "Zastarele oznake: {tags}"
         },
             "tag_suggests_area": "Oznaka {tag} nakazuje, da bi črta morala opisovati območje, vendar črta ni sklenjena",
             "deprecated_tags": "Zastarele oznake: {tags}"
         },
             "out": "Oddalji"
         },
         "cannot_zoom": "V trenutnem načinu nadaljnje oddaljevanje pogleda ni mogoče.",
             "out": "Oddalji"
         },
         "cannot_zoom": "V trenutnem načinu nadaljnje oddaljevanje pogleda ni mogoče.",
+        "full_screen": "Preklopi celozaslonski način",
         "gpx": {
         "gpx": {
+            "local_layer": "Krajevna datoteka",
+            "drag_drop": "Povlecite datoteko .gpx, .geojson ali .khm na stran, ali pa kliknite gumb na desni za brskanje med datotekami.",
+            "zoom": "Približaj plasti",
             "browse": "Prebrskaj za datoteko"
         },
         "mapillary_images": {
             "browse": "Prebrskaj za datoteko"
         },
         "mapillary_images": {
-            "tooltip": "Ulične fotografije z Mapillaryja",
+            "tooltip": "Fotografije ulic prek storitve Mapillary",
             "title": "Plast s fotografijami (Mapillary)"
         },
         "mapillary_signs": {
             "title": "Plast s fotografijami (Mapillary)"
         },
         "mapillary_signs": {
-            "tooltip": "Prometni znaki iz Mapilaryja (omogočena mora biti plast s fotografijami)",
+            "tooltip": "Prometni znaki prek storitve Mapilary (omogočena mora biti plast s fotografijami)",
             "title": "Plast s prometnimi znaki (Mapillary)"
         },
             "title": "Plast s prometnimi znaki (Mapillary)"
         },
+        "mapillary": {
+            "view_on_mapillary": "Pokaži sliko na spletišču Mapillary"
+        },
         "help": {
             "title": "Pomoč",
         "help": {
             "title": "Pomoč",
-            "roads": "# Ceste\n\nS tem urejevalnikom lahko ceste ustvarjate, popravljate in jih brišete. Ceste so lahko vseh\ntipov: poti, avtoceste, kolovozi, kolesarske steze idr. - vsak pogosto prečkan del ceste\n\nnaj bi bil kartiran.\n\n### Izbiranje\n\nZa izbiranje ceste kliknite nanjo. Pokazal se bo obris ceste, ob njem pa\nmajhen meni z orodji in stranski meni z več informacijami o tej cesti.\n\n### Spreminjanje\n\nPogosto boste opazili ceste, ki se ne prekrivajo s sliko v ozadju,\nali z GPS sledjo. Te ceste lahko prilagodite tako, da so na pravilnem\nmestu.\n\nNajprej klinite na cesto, ki jo želite spremeniti. Cesta bo postala poudarjena in vzdolž\nnje se bodo prikazala vozlišča, ki jih lahko premaknete na pravo mesto. Če želite\ndodati nova vozlišča za bolj podroben potek ceste, dvokliknite na del ceste, ki\nše nima vozlišča, in pojavilo se bo novo vozlišče.\nČe se cesta dotika druge ceste, toda na zemljevidu ni pravilno povezana,\nlahko enega od njenih vozlišč premaknete na drugo cesto in ju tako\npovežete. Pravilno povezane ceste so pomembne za zemljevid\nin nujne za samodejno iskanje pot med različnimi kraji.\nS klikom na 'Premakni' ali s pritiskom tipke 'M' na tipkovnici lahko aktivirate orodje\nza premik celotne ceste naenkrat; premik je končan ob naslednjem kliku.\n### Odstranjevanje\nČe je potek ceste v celoti napačen - npr. ko cesta na satelitskem posnetku sploh ne obstaja\noz. še bolje, ko imate informacijo o tem iz prve roke - jo lahko izbrišete ter jo tako\nodstranite z zemljevida. Pri brisanju objektov bodite pozorni -\nkot pri ostalih načinih urejanja bodo posledice vidne vsakomur. Včasih so satelitski posnetki\nzastareli in morda zato kakšne ceste na njih še ni.\nCesto izbrišete tako, da najprej kliknete nanjo, nato pa kliknete na ikono za smetnjak ali\npa pritisnete tipko 'Izbriši'.\n\n### Creating\n\nSte opazili, da na zemljevidu manjka kakšna cesta? Za začetek risanja kliknite ikono 'Črta'\nlevo zgoraj v urejevalniku ali pa pritisnite tipko '2'.\nKliknite na zemljevid na začetek nove ceste. Če se cesta odcepi z že obstoječe ceste,\nzačnite s klikom na mesto, kjer se ločita.\nNato klikajte na točke vzdolž ceste v pravi smeri (glede na satelitske posnetke ali GPS)\nČe cesta, ki jo rišete, prečka drugo cesto, ju povežite s klikom na njuno križišče.\nKo končate, dvokliknite z miško ali na tipkovnici pritisnite tipko 'Return' ali 'Enter'.\n",
+            "help": "# Pomoč\n\nUrejevalnik ID je orodje za urejanje [OpenStreetMap](http://www.openstreetmap.org/), brezplačnih in prostih zemljevidov sveta. Uporabljate ga lahko za posodabljanje podatkov in s tem izboljševanje odprto-kodnega in odprto-podatkovnega zemljevida za vse uporabnike.\n\nSpremembe, ki jih naredite na zemljevidu, bodo na voljo vsem uporabnikom, ki uporabljajo OpenStreetMap. Za urejanje se je treba najprej [prijaviti](https://www.openstreetmap.org/login).\n\nUrejevalnik [iD editor](http://ideditor.com/) je zasnovan kot odprt projekt s prosto dostopno kodo na [GitHub](https://github.com/openstreetmap/iD).\n",
+            "roads": "# Ceste\n\nZ urejevalnikom je mogoče poti dodajati, popravljati in jih izbrisati. Poti so lahko vseh vrst: pešpoti, kolovozi, kolesarske steze, avtoceste in druge – vrisan naj bi bil vsak del ceste, tudi prehodi in počivališča.\n\n### Izbiranje\n\nCesto izberemo s klikom nanjo. Pokaže se obris ceste, ob njem pa meni z orodji in stransko okno z več podrobnostmi o tej cesti.\n\n### Spreminjanje\n\nPogosto boste opazili črte cest, ki se ne skladajo s potekom ceste na sliki v ozadju oziroma s sledjo GPS. Take ceste lahko popravite, da odražajo stanje v naravi.\n\nNajprej kliknite na cesto, ki jo želite spremeniti. Črta ceste bo poudarjena in vzdolž nje bodo pokazana vozlišča, ki jih je mogoče premakniti na pravo mesto. Če želite dodati novo vozlišče za bolj podroben potek ceste, dvokliknite na del ceste, ki še nima vozlišča, in pojavilo se bo novo.\nČe se cesta dotika druge ceste, vendar na zemljevidu ni pravilno povezana, lahko enega od njenih vozlišč premaknete na drugo cesto in ju tako povežete. Pravilno povezane ceste so pomembne in nujne za samodejno iskanje poti med različnimi kraji.\nS klikom na gumb »Premakni« ali s pritiskom tipke »M« na tipkovnici lahko omogočite orodje za premik celotne ceste naenkrat; premik potrdite z drugim klikom.\n\n### Odstranjevanje\n\nČe je potek ceste v celoti napačno vrisan – ko na primer cesta na satelitskem posnetku sploh ne obstaja ali pa ko iz prve roke veste, da je ni – jo lahko izbrišete ter tako odstranite z zemljevida. Pri brisanju predmetov bodite pozorni – pri vsakem urejanju bodo spremembe vidne vsakomur.\nVčasih so satelitski posnetki zastareli in morda zato kakšne ceste na njih še ni.\nCesto izbrišete tako, da najprej kliknete nanjo, nato pa kliknete na ikono za smetnjak ali pa pritisnete tipko »Izbriši«.\n\n### Dodajanje poti\n\nAli ste opazili, da na zemljevidu manjka kakšna cesta? Za začetek risanja kliknite gumb »Črta« v urejevalniku levo zgoraj ali pa pritisnite tipko »2«.\nKliknite na zemljevid na začetek nove ceste. Če se cesta odcepi z že obstoječe ceste, začnite s klikom na mesto, kjer se ločita.\nNato klikajte na točke vzdolž ceste v pravi smeri (glede na satelitske posnetke ali GPS).\nČe cesta, ki jo rišete, križa drugo cesto, ju povežite s klikom na mestu križišča.\nKo končate, dvokliknite z miško ali na tipkovnici pritisnite vnosno tipko.\n",
+            "gps": "# GPS\n\nSledi GPS so pomemben vir podatkov za zemljevide OpenStreetMap. Urejevalnik podpira datoteke sledi *.gpx*. Sledi je mogoče zbirati s pomočjo posebnih programov na pametnih telefonih ali pa s posebnimi navigacijskimi napravami.\n\nZa večč podrobnosti o sledeh GPS si oglejte dokumentacijo o [Kartografiji s pametnimi telefoni, z napravami GPS in zdrugimi načini](http://learnosm.org/en/mobile-mapping/).\n\nZa uporabo sledi GPX, datoteko s podatki enostavno povlecite v okno urejevalnika. Če so podatki v datoteki ustrezni in brez napak, bo sled kot svetla rožnata črta dodana na zemljevid. S klikom na meni »Podatki zemljevida« omogočite oziroma skrijete plast s potjo.\n\nSled GPX ni samodejno poslana na strežnik OpenStreetMap. Najboljši način je podatke vrisati na zemljevid, dodati predmete in urediti obstoječe, to pa nato objaviti na [OpenStreetMap](http://www.openstreetmap.org/trace/create)\nza druge uporabnike.\n",
             "imagery": "# Slikovni posnetki\n\nSatelitski posnetki in fotografije iz zraka so pomemben vir za kartiranje. Različne slike letalskih in satelitskih posnetkov ter drugi slikovni viri so v urejevalniku na voljo prek »Nastavitev ozadja« v meniju.\nPrivzeto so uporabljeni satelitski posnetki prek iskalnika [Bing Maps](http://www.bing.com/maps/), pri približevanju zemljevida pa so prikazani tudi drugi razpoložljivi viri.\nV nekaterih državah, kot so ZDA, Francija ali Danska, so za posamezna območja na voljo tudi posnetki z zelo visoko ločljivostjo.\nSlikovni posnetki so zaradi napak na strani ponudnika včasih zamaknjeni glede na zemljevid.\nČe opazite, da je več cest zamaknjenih glede na posnetek v ozadju, cest ne premikajte. V tem primeru lahko premaknete sliko v ozadju tako, da se prekriva z že narisanimi predmeti zemljevidu. To storite s klikom na »Premakni podlogo zemljevida« na dnu uporabniškega vmesnika »Nastavitev ozadja«.\n\n",
             "imagery": "# Slikovni posnetki\n\nSatelitski posnetki in fotografije iz zraka so pomemben vir za kartiranje. Različne slike letalskih in satelitskih posnetkov ter drugi slikovni viri so v urejevalniku na voljo prek »Nastavitev ozadja« v meniju.\nPrivzeto so uporabljeni satelitski posnetki prek iskalnika [Bing Maps](http://www.bing.com/maps/), pri približevanju zemljevida pa so prikazani tudi drugi razpoložljivi viri.\nV nekaterih državah, kot so ZDA, Francija ali Danska, so za posamezna območja na voljo tudi posnetki z zelo visoko ločljivostjo.\nSlikovni posnetki so zaradi napak na strani ponudnika včasih zamaknjeni glede na zemljevid.\nČe opazite, da je več cest zamaknjenih glede na posnetek v ozadju, cest ne premikajte. V tem primeru lahko premaknete sliko v ozadju tako, da se prekriva z že narisanimi predmeti zemljevidu. To storite s klikom na »Premakni podlogo zemljevida« na dnu uporabniškega vmesnika »Nastavitev ozadja«.\n\n",
-            "addresses": "# Naslovi\n\nNaslovi so ena od najbolj uporabnih informacij za zemljevid.\n\nČeprav so naslovi pogosto predstavljeni kot deli ulic, so na OpenStreetMap\nzabeležni kot lastnost stavb in mest ob ulicah.\n\nNaslove lahko dodate točkovnim objektom in tudi obrisom stavb.\nNajboljši vir naslovov je lastna raziskava oz. zbiranje podatkov ali pa\nlastno znanje. Tako kot za ostale objekte tudi tu velja, da je kopiranje\nz ostalih tržnih virov, kot je Google Zemljevidi, strogo prepovedano.\n\n",
-            "buildings": "# Stavbe\n\nOpenStreetMap je največja svetovna zbirka stavb; lahko jo soustvarjate in izboljšujete.\n\n### Izbiranje\n\nStavbo lahko izberete s klikom na njen obris. Stavba se bo poudarila,\nprikazala pa se bosta majhen meni z orodji in stransko polje z več informacijami\no stavbi.\n\n### Spreminjanje\n\nVčasih so stavbe na napačnem mestu ali pa imajo vnešene napačne oznake.\n\nZa premik celotne stavbe jo najprej izberite, nato pa kliknite na orodje 'Move'.\nPremaknite miško za premik stavbe, s ponovnim klikom se premikanje konča.\n\nZa popravilo določenega dela stavbe kliknite in vlecite vozlišče, dokler\nne bo oblika pravilna.\n\n### Ustvarjanje\n\nEna od glavnih značilnosti dodajanja novih stavb na zemljevid je,  da\nOpenStreetMap beleži stavbe tako kot obliko kot tudi kot točko. Priporočamo, da\nse _stavbe predstavijo kot mnogokotniki, kadar je le to mogoče_, medtem ko se\npodjetja, domovi, ustanove in vse ostalo, kar se dogaja v stavbah, beleži kot točke,\nki jih umestimo znotraj mnogokotnika stavbe.\n\nZa začetek risanja stavbe na levo strani urejevalnika kliknite gumb 'Mnogokotnik',\nrisanje pa lahko končate s pritiskom tipke 'Return' ali pa s klikom na prvo vozlišče\nte stavbe.\n\n### Odstranjevanje\n\nČe je stavba prikazana popolnoma napačno - če se je npr. ni na satelitskem posnetku oz.\\imate informacije o tem iz prve roke - jo lahko odstranite z zemljevida.\nPri brisanju objektov bodite pozorni -\nkot pri ostalih načinih urejanja bodo posledice vidne vsakomur.\nVčasih so satelitski posnetki\nzastareli in morda zato kakšne stavbe na njih še ni.\n\nStavbo lahko odstanite tako, da jo s klikom izberete, nato pa kliknete\nikono smetnjak ali pritisnete tipko 'Delete'.\n",
-            "relations": "# Zveza\n\nZveza je posebna vrsta predmeta na zemljevidu OpenStreetMap, ki ostale predmete povezuje v skupine.\nPrimer: najpogostejše vrste zvez so *cestne povezave* odsekov, ki pripadajo določeni prometnici\n(npr. avtocesti, regionalni cesti), in *več mnogokotnikov*, ki skupaj določajo kompleksno območje (npr. na več delov razkosano območje, območja z vrzelmi).\n\nSkupina predmetov v zvezi so *člani* zveze. V stranski vrstici urejevalnika so navedene\nzveze za vsak predmet, s klikom na zvezo pa se izpiše\nseznam vseh članov,\nhkrati pa so prikazani na zemljevidu.\n\nV večini primerov zveze samodejno vzdržuje urejevalnik iD.\nNeskladja zvez se lahko pojavijo pri brisanju in ponovnem risanju na primer cest -\nte je treba po posodobitvi dodati v isto skupino, kot pred brisanjem.\n\n## Urejanje zvez\n\nSpodaj so navedene osnove za urejanje zvez.\n\nZa dodajanje predmeta v zvezo je treba predmet izbrati in klikniti gumb \\+\\ v odseku\n\\Vseh zvez\\ stranske vrstice, nato pa predmet izbrati in vpisati ime zveze.\n\nZa ustvarjanje nove zveze je treba najprej izbrati predmet, ki bo član skupine,\nnato klikniti gumb \\+\\ v odseku \\Vse zveze\\, na koncu pa izbrati možnost \\Nova zveza ...\\.\n\nOdstranitev predmeta iz zveze je enostavna; najprej je treba predmet izbrati, nato pa klikniti na ikono\nsmetnjaka ob zvezi.\n\nVeč mnogokotnikov z vrzelmi lahko ustvarite z orodjem \\Združi\\. Dve narisani območji (zunanje\nin notranje) izberemo z miško sočasno s pritisnjeno tipko Shift in kliknemo gumb \\Združi\\ (+).\n\n"
+            "addresses": "# Naslovi\n\nNaslovi so **najbolj uporabna** podrobnost zemljevida!\n\nČeprav so naslovi pogosto opredeljeni kot deli ulic, so na zemljevidu OpenStreetMap zabeležni kot lastnost stavb in točk ob ulicah.\n\nNaslove je mogoče dodeliti točkovnim predmetom in obrisom stavb.\nNajustreznejši vir naslova je seveda poznavanje mesta oziroma lastno zbiranje podatkov. Tako kot za vse podatke, tudi za naslove velja, da je kopiranje iz različnih tržno orientiranih virov, kot je na primer Googlov zemljevid, **strogo prepovedano**.\n\n",
+            "inspector": "# Uporaba pregledovalnika\n\nPregledovalnik je del v levem delu strani in omogoča\nurejanje podrobnosti (oznak) o izbranem objektu.\n\n### Izbira vrste objekta\n\nPotem, ko na zemljevid dodate točko, črto ali mnogokotnik, lahko izberete vrsto objekta,\nnpr. ali gre za avtocesto ali stanovanjsko ulico, veleblagovnico ali bar.\nPregledovalnik prikaže gumbe za najbolj pogoste vrste objektov, ostale pa lahko\nnajdete s pomočjo iskalnega polja.\n\nZa več informacij o posamezni vrsti objekta lahko kliknite 'i' v desnem spodnjem\nkotu njenega gumba. Kliknite gumb za izbiro vrste.\n\n### Uporaba obrazcev in urejanje oznak\n\nPotem, ko izberete vrsto objekta ali ko označite objekt, ki ima vrsto že določeno,\nse bodo v nadzorniku prikazala polja s podrobnostmi (oznakami)\no objektu, kot sta npr. ime in naslov.\n\nPod prikazanimi oznakami lahko s klikom na spustni seznam 'Dodaj polje' dodate nove podrobnosti,\nnpr. povezavo na Wikipedijo, dostopnost za invalidske vozičke ipd.\n\nNa dnu pregledovalnika lahko s klikom na 'Dodatne oznake' objektu dodajate druge poljubne oznake.\n[Taginfo](http://taginfo.openstreetmap.org/) je bogat vir informacij o najbolj\npogosto uporabljanih oznakah in njihovih kombinacijah.\n\nSpremembe, ki jih naredite v pregledovalniku, se samodejno uporabijo na zemljevidu. Razveljavite jih lahko kadarkoli s klikom na gumb 'Razveljavi'.\n\nVse v nadzorniku opravljene spremembe se samodejno dodajo na zemljevid.\nSpremembe lahko razveljavite s klikom na gumb 'Razveljavi'.\n",
+            "buildings": "# Zgradbe\n\nNa zemljevidu OpenStreetMap je največja svetovna zbirka zgradb; lahko jo soustvarjate in izboljšujete.\n\n### Izbiranje\n\nZgradbo lahko izberete s klikom na njen obris. predmet bo izbran, pokazal pa se bosta tudi meni z orodji in stransko okno s podrobnostmi o predmetu.\n\n### Spreminjanje\n\nVčasih so predmeti na napačnem mestu ali pa imajo vnesene napačne oznake.\n\nZa premikanje celotne stavbe je treba to najprej izbrati. S klikom na orodje »Premakni« se omogoči premikanje z miško, s ponovnim klikom, pa se položaj shrani.\n\nZa popravilo določenega dela zgradbe kliknite in vlecite vozlišče, dokler oblika ne bo ustrezna.\n\n### Ustvarjanje\n\nEna od glavnih značilnosti zgradb na zemljevidu je, da so lahko opredeljene kot mnogokotniki ali kot točke. Priporočljivo je _zgradbe opredeljevati kot mnogokotnike, kadar je to mogoče_, podjetja, domove, ustanove in vse ostalo, kar se dogaja v teh zgradbah pa kot točke, ki jih umestimo znotraj mnogokotnika stavbe.\n\nZa začetek risanja zgradbe kliknite na gumb »Mnogokotnik«,\nrisanje pa lahko končate s pritiskom vnosne tipke ali pa s klikom na prvo oziroma zadnje vozlišče te zgradbe.\n\n### Odstranjevanje\n\nČe je zgradba prikazana popolnoma napačno – če je na primer ni na satelitskem posnetku oziroma ste prepričani, da je ni iz prve roke – jo lahko odstranite z zemljevida.\nPri brisanju predmetov bodite natančni – kot pri vseh urejanjih bodo spremembe vidne vsakomur.\nVčasih so satelitski posnetki zastareli in morda zato kakšne stavbe na njih še ni.\n\nZgradbo odstranite tako, da jo s klikom izberete, nato pa kliknete ikono smetnjaka ali pritisnete tipko za izbris.\n",
+            "relations": "# Zveza\n\nZveza je posebna vrsta predmeta, ki ostale predmete povezuje v skupine.\nNajpogostejše vrste zvez so na primer *cestne povezave* odsekov, ki pripadajo določeni prometnici\n(avtocesti, regionalni cesti, drugi poti) ali pa *več mnogokotnikov*, ki skupaj določajo kompleksno območje (na primer na več delov razkosano območje ali pa območja z vrzelmi).\n\nSkupina predmetov v zvezi so *člani* zveze. V stranski vrstici urejevalnika so navedene zveze za vsak predmet. S klikom na zvezo pa se izpiše seznam vseh njenih članov, sočasno pa so prikazani na zemljevidu.\n\nV večini primerov urejevalnik iD zveze samodejno vzdržuje, pri brisanju in ponovnem risanju pa se lahko pojavijo neskladja zvez. Ceste je na primer treba po posodobitvi dodati v isto skupino, kot pred brisanjem.\n\n## Urejanje zvez\n\nZa dodajanje predmeta v zvezo je treba predmet izbrati in klikniti gumb + v odseku \\Vse zveze\\ v stranski vrstici, nato pa predmet izbrati in vpisati ime zveze.\n\nZa ustvarjanje nove zveze je treba najprej izbrati predmet, ki bo član skupine, nato klikniti gumb + v odseku \\Vse zveze\\, na koncu pa izbrati možnost \\Nova zveza ...\\.\n\nOdstranitev predmeta iz zveze je enostavna; najprej je treba predmet izbrati, nato pa klikniti na ikono smetnjaka ob zvezi.\n\nVeč mnogokotnikov z vrzelmi lahko ustvarite z orodjem za združevanje. Dve narisani območji (zunanje\nin notranje) izberemo z miško sočasno s pritisnjeno tipko dvigalko Shift in kliknemo gumb \\Združi\\ +.\n\n"
         },
         "intro": {
         },
         "intro": {
+            "done": "končano",
+            "ok": "V redu",
             "graph": {
                 "block_number": "<value for addr:block_number>",
             "graph": {
                 "block_number": "<value for addr:block_number>",
+                "city": "Lepi Kot",
                 "county": "<value for addr:county>",
                 "district": "<value for addr:district>",
                 "hamlet": "<value for addr:hamlet>",
                 "neighbourhood": "<value for addr:neighbourhood>",
                 "county": "<value for addr:county>",
                 "district": "<value for addr:district>",
                 "hamlet": "<value for addr:hamlet>",
                 "neighbourhood": "<value for addr:neighbourhood>",
+                "postcode": "7000",
                 "province": "<value for addr:province>",
                 "quarter": "<value for addr:quarter>",
                 "state": "<value for addr:state>",
                 "province": "<value for addr:province>",
                 "quarter": "<value for addr:quarter>",
                 "state": "<value for addr:state>",
                 "suburb": "<value for addr:suburb>",
                 "countrycode": "si",
                 "name": {
                 "suburb": "<value for addr:suburb>",
                 "countrycode": "si",
                 "name": {
-                    "andrews-elementary-school": "Osnovna šola Andrews"
+                    "1st-avenue": "Aškerčeva ulica",
+                    "2nd-avenue": "Bevkova ulica",
+                    "4th-avenue": "Čandkova ulica",
+                    "5th-avenue": "Dalmatinova ulica",
+                    "6th-avenue": "Erjavčeva ulica",
+                    "6th-street": "6. ulica",
+                    "7th-avenue": "Frelihova ulica",
+                    "8th-avenue": "Grumova ulica",
+                    "9th-avenue": "Hribarjeva ulica",
+                    "10th-avenue": "Ingoličeva ulica",
+                    "11th-avenue": "Javorškova ulica",
+                    "12th-avenue": "Kersnikova ulica",
+                    "access-point-employment": "TopJob",
+                    "adams-street": "Adamova ulica",
+                    "andrews-elementary-school": "Osnovna šola Lada Weiderja",
+                    "andrews-street": "Andrejeva ulica",
+                    "armitage-street": "Javorjeva ulica",
+                    "barrows-school": "OŠ Franceta Prešerna",
+                    "battle-street": "Ulica Cesarja Vojca",
+                    "bennett-street": "Ulica Pinij",
+                    "bowman-park": "Park Upornikov",
+                    "collins-drive": "Šolska cesta",
+                    "conrail-railroad": "Mestna železnica",
+                    "conservation-park": "Prečni park",
+                    "constantine-street": "Jabolčna ulica",
+                    "cushman-street": "Kušmanova ulica",
+                    "dollar-tree": "Tretja roka",
+                    "douglas-avenue": "Matičeva cesta",
+                    "east-street": "Vzhodna ulica",
+                    "elm-street": "Ulica Brestov",
+                    "flower-street": "Cvetlična ulica",
+                    "foster-street": "Ulica Mitke Mitketa",
+                    "french-street": "Francoska ulica",
+                    "garden-street": "Vrtičkarska ulica",
+                    "gem-pawnbroker": "Od muhe do slona",
+                    "golden-finch-framing": "Okvirarna",
+                    "grant-avenue": "Pot mame Gelce",
+                    "hoffman-pond": "Hoffmanov ribnik",
+                    "hoffman-street": "Hoffmanova ulica",
+                    "hook-avenue": "Hookova ulica",
+                    "jefferson-street": "Ladotova ulica",
+                    "kelsey-street": "AIqlina ulica",
+                    "lafayette-park": "Park Osvoboditve",
+                    "las-coffee-cafe": "Café Papillon",
+                    "lincoln-avenue": "Drnovškova ulica",
+                    "lowrys-books": "Knjigarna Cesar",
+                    "lynns-garage": "AS Maček",
+                    "main-street-barbell": "Dremlov Fitness",
+                    "main-street-cafe": "Kavarna Local",
+                    "main-street-fitness": "Dremlov CrossFit",
+                    "main-street": "Glavna ulica",
+                    "maple-street": "Široka ulica",
+                    "marina-park": "Zalivski park",
+                    "market-street": "Trgovska ulica",
+                    "memory-isle-park": "Park Svete Jeze",
+                    "memory-isle": "Sveta Jeza",
+                    "michigan-avenue": "Srednja cesta",
+                    "middle-street": "Srednja ulica",
+                    "millard-street": "Ulica Stožcev",
+                    "moore-street": "Mikčeva ulica",
+                    "morris-avenue": "Ulica Gasilske brigade",
+                    "mural-mall": "TC Banja",
+                    "paisanos-bar-and-grill": "Qki Burger",
+                    "paisley-emporium": "Zavod Druga Roka",
+                    "paparazzi-tattoo": "TaaTuu",
+                    "pealer-street": "Štembalova ulica",
+                    "pine-street": "Tomaževa ulica",
+                    "pizza-hut": "Pizza Neapolitana",
+                    "portage-avenue": "Pot Frančiške Slavko",
+                    "portage-river": "Zarečna reka",
+                    "preferred-insurance-services": "Urban Chip d.o.o.",
+                    "railroad-drive": "Železničarska ulica",
+                    "river-city-appliance": "Tehnična trgovina Tehno",
+                    "river-drive": "Ulica Carja Sekača",
+                    "river-road": "Rečna pot",
+                    "river-street": "Rečna ulica",
+                    "riverside-cemetery": "Pokopališče Matere Božje",
+                    "riverwalk-trail": "Rusjanov drevored",
+                    "riviera-theatre": "Gledališče Špele Bele",
+                    "rocky-river": "Dolga Reka",
+                    "saint-joseph-river": "Joškova reka",
+                    "scidmore-park-petting-zoo": "Mamukin živalski vrt",
+                    "scidmore-park": "Čučev park",
+                    "scouter-park": "Taborniški park",
+                    "sherwin-williams": "Barvica d.o.o.",
+                    "south-street": "Južna ulica",
+                    "southern-michigan-bank": "Prava Banka",
+                    "spring-street": "Češnjeva ulica",
+                    "sturgeon-river-road": "Šiviljska cesta",
+                    "three-rivers-city-hall": "Mestna hiša Lepi Kot",
+                    "three-rivers-elementary-school": "Osnovna šol Lepi Kot",
+                    "three-rivers-fire-department": "Gasilski dom Lepi Kot",
+                    "three-rivers-high-school": "Gimnazija Lepi Kot II.",
+                    "three-rivers-middle-school": "Srednja šola Lepi Kot",
+                    "three-rivers-municipal-airport": "Letališče Lepi Kot",
+                    "three-rivers-post-office": "Pošta Lepi Kot",
+                    "three-rivers-public-library": "Knjižnica Lepi Kot",
+                    "three-rivers": "Lepi Kot",
+                    "unique-jewelry": "Zlati prstan",
+                    "walnut-street": "Stara ulica",
+                    "washington-street": "Ameriška ulica",
+                    "water-street": "Nemška cesta",
+                    "west-street": "Zahodna ulica",
+                    "wheeler-street": "Ulica Slovenskih divizij",
+                    "william-towing": "AS Zastava",
+                    "willow-drive": "Brezova pot",
+                    "wood-street": "Smrekova ulica",
+                    "world-fare": "Darilnica"
                 }
             },
                 }
             },
+            "welcome": {
+                "title": "Uvod",
+                "welcome": "Med predstavitvijo boste spoznali osnove urejanja zemljevidov na OpenStreetMap.",
+                "practice": "Predstavitev je namenjena spoznavanju zmožnosti. Spremembe, ki jih lahko naredite, ne bodo shranjene.",
+                "words": "Spoznali boste nove pojme in predmete na zemljevidu. Novosti so vedno zapisane *ležeče*.",
+                "mouse": "Zemljevid je seveda mogoče urejati s katerokoli vhodno napravo, med predstavitvijo pa je predvidena uporaba miške z levim in desnim gumbom. **Če želite priklopiti miško, to storite sedaj, nato pa pritisnite gumb za nadaljevanje**.",
+                "leftclick": "Kadar navodila zahtevajo dvoklik miške, pričakujemo dvoklik z levim gumbom. Na sledilni ploščici je to lahko enojni klik ali tap. **Kliknite levi gumb {num}-krat.**",
+                "rightclick": "Včasih je treba pritisniti desni gumb. Na drugih vhodnih napravah je to lahko dvoprstni tap ali klik miške sočasno s tipkovnično tipko Ctrl, ali pa kar tipka »meni«, ki deluje kot desni klik. **Kliknite desni gumb {num}-krat**.",
+                "chapters": "Za enkrat je vse videti odlično. S spodnjimi gumbi lahko preskočite poglavja ali pa predstavitev znova začnete, če se slučajno kje zatakne. Začnimo! **Kliknite na gumb »{next}« za nadaljevanje.**"
+            },
             "navigation": {
             "navigation": {
-                "title": "Usmerjanje"
+                "title": "Usmerjanje",
+                "drag": "Na glavnem zemljevidu območja so podatki OpenStreetMap izrisani na ozadju slike.{br}Zemljevid je mogoče premikati z zadržanim levim klikom miške, ali pa z uporabo smernih tipk tipkovnice. **Premaknite se po zemljevidu!**",
+                "zoom": "Pogled zemljevida je mogoče približati ali oddaljiti s srednjim gumbom miške oziroma s tipkama tipkovnice {plus} in {minus}. **No, približajte pogled!**.",
+                "features": "S pojmom *predmet* označujemo krajevne značilnosti, ki jih vidimo na zemljevidu. Na OpenStreetMap lahko katerokoli značilnost zabeležimo in opišemo.",
+                "points_lines_areas": "Predmeti zemljevida so opredeljeni s *točkami, črtami in mnogokotnimi polji*.",
+                "nodes_ways": "Točke pogosto imenujemo tudi *vozlišča*, črte in mnogokotna polja pa *poti*.",
+                "click_townhall": "Vsak predmet zemljevida je mogoče označiti s klikom nanj. **Kliknite na izpostavljeno točko in jo izberite**.",
+                "selected_townhall": "Odlično. Točka je izbrana. Da je to res, nakazuje utripajoča obroba okoli predmeta.",
+                "editor_townhall": "Ko je predmet izbran, se ob robu zemljevida pojavi *urejevalnik predmeta*.",
+                "preset_townhall": "Na vrhu je izpisana vrsta predmeta. Točka je postavljena nad predmetom {preset}.",
+                "fields_townhall": "V srednjem delu so *vpisna polja* za dodajanje podatkov, kot so naziv, naslov in drugih podrobnosti.",
+                "close_townhall": "**Urejevalnik predmeta lahko zaprete** s pritiskom na gumb {button} v zgornjem levem kotu okna.",
+                "search_street": "Po zemljevidu je predmete mogoče tudi iskati. **Poiščite »{name}«.**",
+                "choose_street": "**Izberite zadetek {name} s seznama.**",
+                "selected_street": "Odlično! Predmet {name} je na zemljevidu označen.",
+                "editor_street": "Vpisna polja za ulice, ki so ponazorjene s črtami, so drugačne od na primer Mestne hiše.{br}Za ulice urejevalnik pokaže polja, kot sta '{field1}' in '{field2}'. **Zaprite urejevalnik predmeta s tipko Esc ali z gumbom {button}.**",
+                "play": "Na zemljevidu izberite še druge predmete in si oglejte različna vpisna polja, ki jih je mogoče izpolniti. **Ko ste pripravljeni nadaljevati, kliknite na gumb '{next}'.**"
             },
             "points": {
                 "title": "Točke",
             },
             "points": {
                 "title": "Točke",
-                "choose_cafe": "**Izberi {preset} s seznama.**"
+                "add_point": "S *točkami* označujemo trgovine, restavracije in spomenike.{br}Označujejo in z opombami predstavljajo posebna mesta. **Kliknite na gumb {button} za dodajanje nove točke.**",
+                "place_point": "Za postavitev nove točke na zemljevid se z miško postavite na želeno mesto in nato pritisnite levi gumb oziroma pritisnite preslednico na tipkovnici. **Premaknite kazalko miške nad zgradbo in nato pritisnite levi gumb miške.**",
+                "search_cafe": "Obstaja več predmetov, ki jih je mogoče opredeliti s točkami. Točka, ki ste jo pravkar dodali, je kavarna. **Poiščite kavarno '{preset}'.**",
+                "choose_cafe": "**Izberite predmet {preset} s seznama.**",
+                "feature_editor": "Točka je označena kot kavarna. Vpisna polja omogočajo dodajanje podrobnosti o ponudbi kavarne.",
+                "add_name": "Vnosna polja je dovoljeno pustiti prazna, če o podobnostih predmeta ni dovolj zanesljivih podatkov.{br}Zamislimo si, da kavarno poznate in ste prepričani v pravilnost podatkov. **Vpišite ime kavarne.**",
+                "add_close": "Urejevalnik predmeta si samodejno zapomni vpisane podatke. **Ko končate z dodajanjem imena oziroma drugih podatkov, pritisnite na gumb za potrditev vnosa {button}.**",
+                "reselect": "Pogosto predmeti že obstajajo, vendar so podatki nepopolni ali napačni. Urejati je mogoče tudi obstoječe točke. **Kliknite na točko kavarne, ki ste jo ravnokar ustvarili.**",
+                "update": "Vpišimo še nekaj podrobnosti o kavarni. Spremenite lahko ime, dodate naslov ali pa vpišete vrsto hrane, ki jo v kavarni ponujajo. **Poskusite dodati nekaj podrobnosti.**",
+                "update_close": "**Ko končate z vpisovanjem podatkov, pritisnite ubežno tipko Esc, vnosno tipko ali pa pritisnite gumb {button} da vnos potrdite.**",
+                "rightclick": "Z desnim klikom na katerikoli predmet odprete *urejevalni meni*, na katerem je seznam možnih opravil za to vrsto predmeta. **Na točki, ki ste jo ustvarili, pritisnite desni gumb miške.**",
+                "delete": "Predmete, ki jih v resnici ni v naravi, je treba izbrisati.{br}Izbrisan predmet bo odstranjen z zemljevida, ki je sicer na voljo vsem uporabnikom, zato se je pred brisanjem treba prepričati o pravilnosti spremembe. **Kliknite na gumb {button} za izbris točke.**",
+                "undo": "Vsako spremembo, ki je narejena pred shranjevanjem, je vedno mogoče razveljaviti. **Kliknite na gumb {button} za razveljavitev dejanja.**",
+                "play": "Sedaj, ko ste seznanjeni z ustvarjanjem in urejanjem točk, poskusite ustvariti za vajo še kakšno! **Ko boste pripravljeni nadaljevati na naslednje poglavje, kliknite na gumb »{next}«.**"
             },
             "areas": {
                 "title": "Mnogokotniki",
             },
             "areas": {
                 "title": "Mnogokotniki",
-                "choose_playground": "**Izberi {preset} s seznama.**",
-                "choose_field": "**Izberi {field} s seznama.**"
+                "add_playground": "Z *mnogokotniki* so opredeljeni predmeti z natančno določenimi mejami, kot so zgradbe, parki, jezera ali stanovanjske soseske.{br}Uporabiti jih je mogoče tudi za bolj natančno izrisovanje predmetov, ki bi jih sicer določili s točko. **Kliknite na gumb {button} za dodajanje območja.**",
+                "start_playground": "Z mnogokotnikom lahko izrišemo na primer otroško igrišče. Mnogokotniki se izrisujejo z *vozlišči* po zunanjem robu predmeta. **Kliknite na rob igrišča za dodajanje prve točke.**",
+                "continue_playground": "Polje mnogokotnika nadaljujemo s postavljanjem vozlišč po ogliščih igrišča. Točke se lahko povezujejo z obstoječo pešpotjo, saj je igrišče povsem ob njej.{br}Namig: Če pritisnete tipko Alt na tipkovnici, se vozlišča ne bodo povezovala z drugimi že narisanimi predmeti. **Nadaljujte z risanjem igrišča.**",
+                "finish_playground": "Mnogokotnik se *zaključi* kot ponovno kliknete na prvo ali zadnje narisano vozlišče. **Končajte z risanjem igrišča.**",
+                "search_playground": "**Poiščite predmet »{preset}«.**",
+                "choose_playground": "**Izberte {preset} s seznama.**",
+                "add_field": "To igrišče nima navedenega uradnega naziva, zato ga ni treba poimenovati.{br}Namesto imena pa lahko vpišemo dodatne značilnosti. **Odprite spustni meni Dodaj polje:**",
+                "choose_field": "**Izberite polje {field} s seznama.**",
+                "retry_add_field": "Niste izbrali polja {field}. Poskusite znova.",
+                "describe_playground": "**Dodajte opis, nato pa kliknite na gumb {button} za potrditev vnosa.**",
+                "play": "Izvrstno! Poskusite narisati še nekaj predmetov z orodjem in si oglejte, kakšne vrste polj in območij je mogoče dodati na zemljevid. **Ko boste pripravljeni za nadaljevanje, kliknite na gumb '{next}'.**"
             },
             "lines": {
                 "title": "Črte",
             },
             "lines": {
                 "title": "Črte",
-                "choose_category_road": "**Izberi {category} s seznama.**"
+                "add_line": "S *črtami* ponazarjamo ceste, železniške proge, reke in ograje. **Kliknite na gumb {button} za dodajanje nove črte.**",
+                "start_line": "Na izpostavljenem delu manjka vrisana cesta!{br}Poti običajno izrišemo po sredini. Zemljevid je seveda med risanjem vedno mogoče oddaljiti ali približati. **Začnite z novo črto na vrhnjem koncu manjkajoče ceste.**",
+                "intersect": "S klikom oziroma pritiskom preslednice na tipkovnici dodamo vozlišča.{br}Ceste in druge poti so del večjega prometnega omrežja, zato je pomembno, da so črte ustrezno povezane. Če niso, navigacijski sistemi odpovejo. **Kliknite na {name} za določitev križišča. S tem povežete dve cesti.**",
+                "retry_intersect": "Cesta mora sekati cesto {name}. Poskusite znova!",
+                "continue_line": "Nadaljujte z risanjem poti nove ceste. Zapomnite si, da lahko po potrebi kadarkoli približate, oddaljite ali premaknete zemljevid.{br}Ko končate, kliknite še enkrat na zadnje vozlišče. **Končajte z risanjem ceste.**",
+                "choose_category_road": "**Izberite kategorijo {category} s seznama.**",
+                "choose_preset_residential": "Obstaja več različnih vrst poti, ta, ki ste jo vrisali, vodi v stanovanjsko območje. **Izberite vrsto {preset}.**",
+                "retry_preset_residential": "Niste izbrali {preset}. **Kliknite znova za ponovno izbiro.**",
+                "name_road": "**Cesti določite ime, nato pa pritisnite vnosno tipko oziroma gumb {button} za potrditev vnosa.**",
+                "did_name_road": "Videti je odlično! Spoznati morate še način posodabljanja poti.",
+                "update_line": "Včasih je treba popraviti obliko obstoječe črte, ki je na primer nad potjo. Ta črta ne opredeljuje poteka ceste. ",
+                "add_node": "Na črto je mogoče dodati nekaj vozlišč in spremeniti potek. Novo vozlišče dodamo z dvojnim klikom na želenem mestu. **Dvakrat kliknite na črto za dodajanje vozlišča.**",
+                "start_drag_endpoint": "Ko je črta izbrana, lahko z miško premikate katerokoli vozlišče na njej. Kliknite in zadržite klik, nato miško premaknite. **Potegnite končno točko na mesto, kjer se cesti res združita.**",
+                "finish_drag_endpoint": "To mesto je videti v redu. **Spustite levi gumb in prenehajte vleči.**",
+                "start_drag_midpoint": "Na črti lahko opazite male trikotnike – vodila za vmesne točke. Vozlišče lahko naredite tudi tako, da primete in povlečete trikotnik na želeno mesto. **Potegnite vmesno točko in ustvarite novo vozlišče na poti.**",
+                "continue_drag_midpoint": "Sedaj je črta videti precej bolje! Nadaljujte s prilagajanjem črte, dokler črta ni skladna z ovinkom. **Ko boste zadovoljni s postavitvijo, pritisnite gumb na nadaljevanje.**",
+                "delete_lines": "Seveda je dobro, da črte, ki so vrisane na mestih, kjer ni poti, izbrišete.{br}Tu je primer, kjer so načrtovali cesto  {street}, vendar je niso nikoli zgradili. Zemljevid izboljšamo, če te črte izbrišemo..",
+                "rightclick_intersection": "Zadnja ustrezno vrisana ulica je {street1}, zato lahko *razdelimo* ulico {street2} na razpotju in odstranimo vse, kar je nad križiščem. **Z desnim gumbom kliknite na vozlišče v križišču.**",
+                "split_intersection": "**Kliknite na gumb {button} za razdelitev ulice {street}.**",
+                "retry_split": "Niste kliknili na gumb za razdelitev. Poskusite znova.",
+                "did_split_multi": "Tako! {street1} je razdeljena na dva dela. Zgornji del lahko izbrišemo. **Kliknite na zgornji del ulice {street2}, da jo izberete.**",
+                "did_split_single": "**Kliknite na zgornji del ulice {street2}, da jo izberete.**",
+                "multi_select": "{selected} je izbrana, izbrati pa želimo še ulico {other1}. S tipko Shift lahko omogočimo izbiranje večih predmetov. **Pritisnite Shift in kliknite na ulico {other2}.**",
+                "multi_rightclick": "Obe poti sta izbrani in pripravljeni za brisanje. **Kliknite z desnim klikom na črto, da se pokaže urejevalni meni.**",
+                "multi_delete": "**Kliknite na gumb {button} in izbrišite odvečne poti.**",
+                "retry_delete": "Niste kliknili na gumb za izbris. Poskusite znova.",
+                "play": "Odlično! Preizkusite se v urejanju še kakšne poti. **Ko ste pripravljeni nadaljevati, kliknite na poglavje »{next}«.**"
             },
             "buildings": {
                 "title": "Zgradbe",
             },
             "buildings": {
                 "title": "Zgradbe",
-                "add_building": "Zemljevid OpenStreetMap je največja svetovna podatkovna zbirka zgradb.{br}Posodabljati jo lahko pomagate tako, da v vašem okolju poiščete zgradbe, ki še niso vpisane. **S klikom na gumb mnogokotnika {button} lahko dodate novo zgradbo.**",
-                "choose_category_building": "**Izberi {category} s seznama.**",
-                "search_tank": "**Poišči »{preset}«.**",
-                "choose_tank": "**Izberi {preset} s seznama.**"
+                "add_building": "Zemljevid OpenStreetMap je največja svetovna podatkovna zbirka zgradb.{br}Posodabljati jo lahko pomagate tako, da v vašem okolju poiščete zgradbe, ki še niso vrisane. **S klikom na gumb mnogokotnika {button} lahko dodate novo zgradbo.**",
+                "start_building": "Na zemljevid poskusimo dodati hišo na sliki. Uporabimo mnogokotnik za določitev oblike hiše.{br}Zgradbe je priporočljivo obrisati čim bolj natančno. **S klikom na enega izmed oglišč hiše lahko začnete obrisovati zgradbo.**",
+                "continue_building": "Nadaljujte z dodajanjem vozlišč po ogliščih zgradbe. Zapomnite si, da lahko kadarkoli približate, oddaljite ali premaknete zemljevid.{br}Ko končate, kliknite še enkrat na zadnje vozlišče. **Končajte z obrisovanjem zgradbe.**",
+                "retry_building": "Videti je, da imate nekaj težav s postavljanjem vozlišč na kote zgradbe. Poskusite znova!",
+                "choose_category_building": "**Izberite kategorijo {category} s seznama.**",
+                "choose_preset_house": "Obstaja več različnih vrst zgradb, ta, ki ste jo vrisali, je nedvomno stanovanjska hiša.{br}Kadar niste prepričani, v katero skupino bi zgradbo dodali, izberite vrsto *Zgradba* **Izberite vrsto zgradbe: {preset}.**",
+                "close": "**Pritisnite na gumb {button} za potrditev vnosa.**",
+                "rightclick_building": "**Sedaj na hiši pritisnite desni gumb miške za prikaz urejevalnega menija.**",
+                "square_building": "Hiša, ki ste jo obrisali bo videti še bolje, če bo imela ustrezno narisane prave kote. **Kliknite na gumb {button}, da postavitev popravite.**",
+                "retry_square": "Niste kliknili na gumb za popravljanje kotov mnogokotnika. Poskusite znova.",
+                "done_square": "Bodite pozorni, kako so sedaj oglišča postavljena pravilno. Spoznajmo še en trik.",
+                "add_tank": "Sedaj poskusimo obrisati okrogel rezervoar. **Kliknite na gumb {button} in obrišite novo polje.**",
+                "start_tank": "Ne skrbite, če obris ne bo natančno okrogel. Obrišite zunanji del rezervoarja. **Kliknite na rob kroga in postavite  začetno vozlišče.**",
+                "continue_tank": "Dodajte še nekaj vozlišč po robu. Krog bo orisan okoli točk, ki jih postavite.{br}Ko končate, kliknite še enkrat na zadnje vozlišče. **Končajte z obrisovanjem rezervoarja.**",
+                "search_tank": "**Poiščite »{preset}«.**",
+                "choose_tank": "**Izberite {preset} s seznama.**",
+                "rightclick_tank": "**Pritisnite desni gumb miške na rezervoarju za prikaz urejevalnega menija.**",
+                "circle_tank": "**Kliknite na gumb {button}, da zaokrožite oglat predmet.**",
+                "retry_circle": "Niste kliknili na gumb za zaokroževanje. Poskusite znova.",
+                "play": "Izvrstno! Na zemljevid dodajte še kakšno zgradbo in poskusite uporabiti še kak ukaz na urejevalnem meniju. **Ko boste pripravljeni nadaljevati, kliknite na gumb »{next}«.**"
             },
             "startediting": {
                 "title": "Začnite urejati",
             },
             "startediting": {
                 "title": "Začnite urejati",
+                "help": "Sedaj ste pripravljeni na urejanje zemljevidov OpenStreetMap!{br}Če si v bodoče ponovno zaželite obnoviti pregled, kliknite na gumb pomoči {button}.",
                 "save": "Ne pozabite sproti shranjevati vnesenih sprememb!",
                 "start": "Začnite kartografirati!"
             }
         },
                 "save": "Ne pozabite sproti shranjevati vnesenih sprememb!",
                 "start": "Začnite kartografirati!"
             }
         },
+        "shortcuts": {
+            "title": "Tipkovne bližnjice",
+            "tooltip": "Pokaži seznam tipkovnih bližnjic",
+            "key": {
+                "alt": "Alt",
+                "backspace": "Povratna tipka",
+                "cmd": "Cmd",
+                "ctrl": "Ctrl",
+                "delete": "Izbriši",
+                "del": "Del",
+                "end": "Na konec",
+                "enter": "Vnosna tipka",
+                "esc": "Ubežna tipka",
+                "home": "Domov",
+                "option": "Menijska tipka",
+                "pause": "Pavza",
+                "pgdn": "Stran dol",
+                "pgup": "Stran gor",
+                "return": "Vnosna tipka",
+                "shift": "Shift",
+                "space": "Preslednica"
+            },
+            "browsing": {
+                "title": "Brskanje",
+                "navigation": {
+                    "title": "Krmarjenje",
+                    "pan": "Premakni zemljevid",
+                    "pan_more": "Premakni zemljevid za velikost zaslona",
+                    "zoom": "Približanje / Oddaljevanje",
+                    "zoom_more": "Močno približanje / oddaljevanje"
+                },
+                "help": {
+                    "title": "Pomoč",
+                    "help": "Pokaži pomoč / dokumentacijo",
+                    "keyboard": "Pokaži tipkovne bližnjice"
+                },
+                "display_options": {
+                    "title": "Možnosti prikaza",
+                    "background": "Pokaži možnosti ozadja",
+                    "background_switch": "Preklopi nazaj na zadnje uporabljeno ozadje",
+                    "map_data": "Pokaži možnosti prikaza zemljevida",
+                    "fullscreen": "Prikaz v celozaslonskem načinu",
+                    "wireframe": "Preklopi prikaz žičnega načina",
+                    "minimap": "Preklopi prikaz mini-zemljevida"
+                },
+                "selecting": {
+                    "title": "Izbiranje predmetov",
+                    "select_one": "Izbor enega predmeta",
+                    "select_multi": "Izbor več predmetov",
+                    "lasso": "Izbor predmetov ali točk s potegom"
+                },
+                "with_selected": {
+                    "title": "Z izbranim predmetom",
+                    "infobox": "Preklopi okno izmer / podrobnosti",
+                    "edit_menu": "Preklopi meni urejanja"
+                },
+                "vertex_selected": {
+                    "title": "Z izbranim vozliščem",
+                    "previous": "Skoči na predhodno vozlišče",
+                    "next": "Skoči na naslednje vozlišče",
+                    "first": "Skoči na prvo vozlišče",
+                    "last": "Skoči na zadnje vozlišče",
+                    "change_parent": "Preklopi nadrejeni način"
+                }
+            },
+            "editing": {
+                "title": "Urejanje",
+                "drawing": {
+                    "title": "Risanje",
+                    "add_point": "Način dodajanja »Točk« ",
+                    "add_line": "Način dodajanja »Črt« ",
+                    "add_area": "Način dodajanja »Mnogokotnikov« ",
+                    "place_point": "Postavi točko",
+                    "disable_snap": "Zadržite tipko za onemogočanje lepljenja točk",
+                    "stop_line": "Končaj risanje črte ali površine"
+                },
+                "operations": {
+                    "title": "Opravila",
+                    "continue_line": "Nadaljuj z risanjem črte na izbranem vozlišču",
+                    "merge": "Združi izbrane predmete",
+                    "disconnect": "Odklopi predmet na označenem vozlišču",
+                    "split": "Razdeli črto na označenem vozlišču",
+                    "reverse": "Obrni smer črte",
+                    "move": "Premakni označene predmete",
+                    "rotate": "Zasukaj izbrane predmete",
+                    "orthogonalize": "Poravnaj črto / robove mnogokotnika",
+                    "circularize": "Zaokroži zaključeno črto ali mnogokotnik",
+                    "reflect_long": "Zrcali predmete prek daljše osi",
+                    "reflect_short": "Zrcali predmete prek krajše osi",
+                    "delete": "Izbriši označene predmete"
+                },
+                "commands": {
+                    "title": "Ukazi",
+                    "copy": "Kopiraj označene predmete",
+                    "paste": "Prilepi kopirane predmete",
+                    "undo": "Razveljavi zadnje dejanje",
+                    "redo": "Ponovno uveljavi zadnje dejanje",
+                    "save": "Shrani spremembe"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                     "name": "Vrste zgradb"
                 },
                 "category-golf": {
                     "name": "Vrste zgradb"
                 },
                 "category-golf": {
-                    "name": "Vrste golfa"
+                    "name": "Igrišča za golf"
                 },
                 "category-landuse": {
                     "name": "Vrste zemljišča"
                 },
                 "category-landuse": {
                     "name": "Vrste zemljišča"
                             "title": "Razjahati"
                         },
                         "no": {
                             "title": "Razjahati"
                         },
                         "no": {
-                            "description": "Dostop za splošno javnosto NI dovoljen",
+                            "description": "Dostop za splošno javnost ni dovoljen",
                             "title": "Prepovedano"
                         },
                         "permissive": {
                             "title": "Prepovedano"
                         },
                         "permissive": {
                         "district!vn": "Upravno okrožje/Kraj/Okrožje",
                         "floor": "Nadstropje",
                         "hamlet": "Zaselek",
                         "district!vn": "Upravno okrožje/Kraj/Okrožje",
                         "floor": "Nadstropje",
                         "hamlet": "Zaselek",
-                        "housename": "Hišno/domače ime",
+                        "housename": "Hišno/Domače ime",
                         "housenumber": "123",
                         "housenumber!jp": "Številka zgradbe",
                         "neighbourhood": "Soseska",
                         "housenumber": "123",
                         "housenumber!jp": "Številka zgradbe",
                         "neighbourhood": "Soseska",
                 "barrier": {
                     "label": "Vrsta"
                 },
                 "barrier": {
                     "label": "Vrsta"
                 },
+                "bath/open_air": {
+                    "label": "Odprto kopališče"
+                },
                 "bath/sand_bath": {
                     "label": "Blatna kopel"
                 },
                 "bath/type": {
                 "bath/sand_bath": {
                     "label": "Blatna kopel"
                 },
                 "bath/type": {
+                    "label": "Posebnosti",
                     "options": {
                     "options": {
-                        "hot_spring": "Vrelec"
+                        "foot_bath": "Nožna kopel",
+                        "hot_spring": "Vrelec",
+                        "onsen": "Japonski onsen"
                     }
                 },
                 "beauty": {
                     }
                 },
                 "beauty": {
                     "label": "Vrsta"
                 },
                 "contact/webcam": {
                     "label": "Vrsta"
                 },
                 "contact/webcam": {
-                    "label": "URL spletne kamere",
-                    "placeholder": "http://example.com/"
+                    "label": "Naslov URL spletne kamere",
+                    "placeholder": "http://www.naslov.si/"
                 },
                 "content": {
                     "label": "Vsebina"
                 },
                 "content": {
                     "label": "Vsebina"
                 "crossing": {
                     "label": "Vrsta"
                 },
                 "crossing": {
                     "label": "Vrsta"
                 },
+                "cuisine": {
+                    "label": "Vrsta kuhinje"
+                },
                 "currency_multi": {
                     "label": "Vrste valut"
                 },
                 "currency_multi": {
                     "label": "Vrste valut"
                 },
                     "label": "Pasovi za kolesarje",
                     "options": {
                         "lane": {
                     "label": "Pasovi za kolesarje",
                     "options": {
                         "lane": {
-                            "description": "Pas za kolesarje, ki je s črto ločen od avtomobilskega prometa",
+                            "description": "Kolesarski pas, ki je s črto ločen od avtomobilskega prometa",
                             "title": "Običajen pas za kolesarje"
                         },
                         "none": {
                             "title": "Običajen pas za kolesarje"
                         },
                         "none": {
                             "title": "Brez"
                         },
                         "opposite": {
                             "title": "Brez"
                         },
                         "opposite": {
-                            "description": "Obojesmerni pas za kolesarje v enosmerni ulici",
+                            "description": "Obojesmerni kolesarski pas v enosmerni ulici",
                             "title": "Pas za kolesarje v nasprotni smeri"
                         },
                         "opposite_lane": {
                             "title": "Pas za kolesarje v nasprotni smeri"
                         },
                         "opposite_lane": {
-                            "description": "Pas za kolesarje, ki poteka v nasprotni smeri prometa",
+                            "description": "Kolesarski pas, ki poteka v nasprotni smeri prometa",
                             "title": "Nasprotni pas za kolesarje"
                         },
                         "share_busway": {
                             "title": "Nasprotni pas za kolesarje"
                         },
                         "share_busway": {
                             "title": "Pas za kolesarje, ki je deljen z avtobusi"
                         },
                         "shared_lane": {
                             "title": "Pas za kolesarje, ki je deljen z avtobusi"
                         },
                         "shared_lane": {
-                            "description": "Pas za kolesarje, ki ni ločen od avtomobilskega prometa",
+                            "description": "Kolesarski pas, ki ni z oznako ločen od avtomobilskega prometa",
                             "title": "Deljen pas za kolesarje"
                         },
                         "track": {
                             "title": "Deljen pas za kolesarje"
                         },
                         "track": {
-                            "description": "Pas za kolesarje, ki je s fizično oviro ločen od avtomobilskega prometa",
+                            "description": "Kolesarska steza, ki je s fizično oviro ločena od avtomobilskega prometa",
                             "title": "Kolesarska steza"
                         }
                     },
                             "title": "Kolesarska steza"
                         }
                     },
                 "fire_hydrant/position": {
                     "label": "Položaj",
                     "options": {
                 "fire_hydrant/position": {
                     "label": "Položaj",
                     "options": {
-                        "green": "Zelena",
+                        "green": "Na zelenici",
                         "lane": "Vozni pas",
                         "parking_lot": "Parkirno mesto",
                         "sidewalk": "Pločnik"
                         "lane": "Vozni pas",
                         "parking_lot": "Parkirno mesto",
                         "sidewalk": "Pločnik"
                     "label": "Referenca",
                     "placeholder": "Številka luknje (1-18)"
                 },
                     "label": "Referenca",
                     "placeholder": "Številka luknje (1-18)"
                 },
+                "grape_variety": {
+                    "label": "Sorte vinske trte"
+                },
                 "handicap": {
                     "label": "Hendikep",
                     "placeholder": "1-18"
                 "handicap": {
                     "label": "Hendikep",
                     "placeholder": "1-18"
                     "label": "Ograja"
                 },
                 "height": {
                     "label": "Ograja"
                 },
                 "height": {
-                    "label": "Višina (meteri)"
+                    "label": "Višina (v metrih)"
                 },
                 "highway": {
                     "label": "Vrsta"
                 },
                 "highway": {
                     "label": "Vrsta"
                 "historic": {
                     "label": "Vrsta"
                 },
                 "historic": {
                     "label": "Vrsta"
                 },
+                "historic/civilization": {
+                    "label": "Zgodovinska civilizacijska znamenitost"
+                },
                 "hoops": {
                     "label": "Obroči",
                     "placeholder": "1, 2, 4..."
                 "hoops": {
                     "label": "Obroči",
                     "placeholder": "1, 2, 4..."
                 "information": {
                     "label": "Vrsta"
                 },
                 "information": {
                     "label": "Vrsta"
                 },
+                "inscription": {
+                    "label": "Napis"
+                },
                 "internet_access": {
                     "label": "Dostop do interneta",
                     "options": {
                 "internet_access": {
                     "label": "Dostop do interneta",
                     "options": {
                 "internet_access/ssid": {
                     "label": "SSID (Ime omrežja)"
                 },
                 "internet_access/ssid": {
                     "label": "SSID (Ime omrežja)"
                 },
+                "kerb": {
+                    "label": "Cestni robnik"
+                },
                 "lamp_type": {
                     "label": "Vrsta"
                 },
                 "lamp_type": {
                     "label": "Vrsta"
                 },
                     "label": "Vrsta"
                 },
                 "lanes": {
                     "label": "Vrsta"
                 },
                 "lanes": {
-                    "label": "Pasov",
+                    "label": "Število pasov",
                     "placeholder": "1, 2, 3..."
                 },
                 "layer": {
                     "label": "Plast"
                 },
                 "leaf_cycle": {
                     "placeholder": "1, 2, 3..."
                 },
                 "layer": {
                     "label": "Plast"
                 },
                 "leaf_cycle": {
+                    "label": "Doba olistanja",
                     "options": {
                         "deciduous": "Listopadno drevje",
                         "evergreen": "Zimzelene rastline",
                     "options": {
                         "deciduous": "Listopadno drevje",
                         "evergreen": "Zimzelene rastline",
                     }
                 },
                 "leaf_cycle_singular": {
                     }
                 },
                 "leaf_cycle_singular": {
-                    "label": "Značilnosti listov",
+                    "label": "Doba olistanja",
                     "options": {
                         "deciduous": "Listopadno drevo",
                         "evergreen": "Zimzelena rastlina",
                     "options": {
                         "deciduous": "Listopadno drevo",
                         "evergreen": "Zimzelena rastlina",
                     "label": "Raven"
                 },
                 "levels": {
                     "label": "Raven"
                 },
                 "levels": {
-                    "label": "Ravni",
+                    "label": "Število nadstropij",
                     "placeholder": "2, 4, 6..."
                 },
                 "lit": {
                     "placeholder": "2, 4, 6..."
                 },
                 "lit": {
-                    "label": "Osvetljeno"
+                    "label": "Osvetljenost"
                 },
                 "location": {
                     "label": "Lokacija"
                 },
                 "location": {
                     "label": "Lokacija"
                 "man_made": {
                     "label": "Vrsta"
                 },
                 "man_made": {
                     "label": "Vrsta"
                 },
+                "map_size": {
+                    "label": "Pokritost"
+                },
                 "map_type": {
                     "label": "Vrsta"
                 },
                 "map_type": {
                     "label": "Vrsta"
                 },
                     "label": "Omejitev hitrosti",
                     "placeholder": "40, 50, 60 ..."
                 },
                     "label": "Omejitev hitrosti",
                     "placeholder": "40, 50, 60 ..."
                 },
+                "maxstay": {
+                    "label": "Najdaljši postanek"
+                },
+                "maxweight": {
+                    "label": "Največja dovoljena masa"
+                },
                 "mtb/scale": {
                     "label": "Gorsko-kolesarska zahtevnost",
                     "options": {
                 "mtb/scale": {
                     "label": "Gorsko-kolesarska zahtevnost",
                     "options": {
                     "placeholder": "0, 1, 2, 3 ..."
                 },
                 "name": {
                     "placeholder": "0, 1, 2, 3 ..."
                 },
                 "name": {
-                    "label": "Ime",
+                    "label": "Naziv",
                     "placeholder": "Običajno ime (če obstaja)"
                 },
                 "natural": {
                     "placeholder": "Običajno ime (če obstaja)"
                 },
                 "natural": {
                 "network_bicycle": {
                     "label": "Vrsta omrežja",
                     "options": {
                 "network_bicycle": {
                     "label": "Vrsta omrežja",
                     "options": {
+                        "icn": "Mednarodno",
+                        "lcn": "Krajevno",
                         "ncn": "Državna",
                         "rcn": "Regionalna"
                     },
                         "ncn": "Državna",
                         "rcn": "Regionalna"
                     },
                     "label": "Vrsta"
                 },
                 "oneway": {
                     "label": "Vrsta"
                 },
                 "oneway": {
-                    "label": "Enosmerna",
+                    "label": "Potek prometa",
                     "options": {
                         "no": "Ne",
                         "undefined": "Predpostavljeno: NE",
                     "options": {
                         "no": "Ne",
                         "undefined": "Predpostavljeno: NE",
                     }
                 },
                 "oneway_yes": {
                     }
                 },
                 "oneway_yes": {
-                    "label": "Enosmerna",
+                    "label": "Enosmerno",
                     "options": {
                         "no": "Ne",
                         "undefined": "Predpostavljeno: DA",
                     "options": {
                         "no": "Ne",
                         "undefined": "Predpostavljeno: DA",
                     "label": "Parkiraj in se odpelji"
                 },
                 "parking": {
                     "label": "Parkiraj in se odpelji"
                 },
                 "parking": {
-                    "label": "Vrsta",
+                    "label": "Vrsta parkirišča",
                     "options": {
                         "carports": "Nadstrešek",
                     "options": {
                         "carports": "Nadstrešek",
-                        "garage_boxes": "Garažni boks",
-                        "lane": "Pas za parkiranje",
-                        "multi-storey": "V več nadstropjih",
-                        "sheds": "Samostoječa zasebna garaža",
+                        "garage_boxes": "Garažni boksi",
+                        "lane": "Obcestno parkirišče",
+                        "multi-storey": "Več nadstropij",
+                        "sheds": "Zasebna garaža",
                         "surface": "Na prostem",
                         "surface": "Na prostem",
-                        "underground": "Podzemno"
+                        "underground": "Podzemna"
                     }
                 },
                 "payment_multi": {
                     }
                 },
                 "payment_multi": {
                 },
                 "phone": {
                     "label": "Telefon",
                 },
                 "phone": {
                     "label": "Telefon",
-                    "placeholder": "+386 31 123 4567"
+                    "placeholder": "+386 1 234 5678"
                 },
                 "piste/difficulty": {
                 },
                 "piste/difficulty": {
-                    "label": "Zahtevnost",
+                    "label": "Zahtevnost proge",
                     "options": {
                         "advanced": "Zahtevna",
                         "easy": "Lahka",
                         "expert": "Zelo zahtevna",
                         "extreme": "Izjemno zahtevna (za vzpon nujna uporaba plezalnih pripomočkov)",
                     "options": {
                         "advanced": "Zahtevna",
                         "easy": "Lahka",
                         "expert": "Zelo zahtevna",
                         "extreme": "Izjemno zahtevna (za vzpon nujna uporaba plezalnih pripomočkov)",
-                        "freeride": "Variantno smučanje - neteptana",
+                        "freeride": "Prosto smučanje (naravne strmine)",
                         "intermediate": "Srednje zahtevna",
                         "novice": "Za začetnike"
                     },
                         "intermediate": "Srednje zahtevna",
                         "novice": "Za začetnike"
                     },
                     }
                 },
                 "piste/type": {
                     }
                 },
                 "piste/type": {
-                    "label": "Vrsta",
+                    "label": "Vrsta smučišča",
                     "options": {
                         "downhill": "Alpsko smučanje",
                         "hike": "Zimsko pohodništvo",
                     "options": {
                         "downhill": "Alpsko smučanje",
                         "hike": "Zimsko pohodništvo",
                 "power": {
                     "label": "Vrsta"
                 },
                 "power": {
                     "label": "Vrsta"
                 },
+                "power_supply": {
+                    "label": "Vir napajanja"
+                },
+                "product": {
+                    "label": "Izdelki"
+                },
                 "railway": {
                     "label": "Vrsta"
                 },
                 "railway": {
                     "label": "Vrsta"
                 },
                     "label": "Sprejme"
                 },
                 "recycling_type": {
                     "label": "Sprejme"
                 },
                 "recycling_type": {
+                    "label": "Vrsta recikliranja",
                     "options": {
                     "options": {
-                        "centre": "Središče za predelavo odpadkov"
+                        "centre": "Središče za predelavo odpadkov",
+                        "container": "Vrsta zabojnika"
                     }
                 },
                 "ref": {
                     }
                 },
                 "ref": {
                     "label": "Sezonskost"
                 },
                 "second_hand": {
                     "label": "Sezonskost"
                 },
                 "second_hand": {
+                    "label": "Prodaja rabljene opreme",
                     "options": {
                         "no": "Ne",
                         "only": "Samo",
                     "options": {
                         "no": "Ne",
                         "only": "Samo",
                 "service/bicycle": {
                     "label": "Storitve"
                 },
                 "service/bicycle": {
                     "label": "Storitve"
                 },
+                "service/vehicle": {
+                    "label": "Storitve"
+                },
                 "service_rail": {
                     "label": "Vrsta storitve",
                     "options": {
                 "service_rail": {
                     "label": "Vrsta storitve",
                     "options": {
+                        "crossover": "Križanje tračnic",
                         "siding": "Stranski tir",
                         "siding": "Stranski tir",
+                        "spur": "Stranska proga",
                         "yard": "Ranžirni tir"
                     }
                 },
                         "yard": "Ranžirni tir"
                     }
                 },
                 "source": {
                     "label": "Vir"
                 },
                 "source": {
                     "label": "Vir"
                 },
+                "sport": {
+                    "label": "Vrste športa"
+                },
+                "sport_ice": {
+                    "label": "Vrste športa"
+                },
+                "sport_racing_motor": {
+                    "label": "Vrste športa"
+                },
+                "sport_racing_nonmotor": {
+                    "label": "Vrste športa"
+                },
+                "start_date": {
+                    "label": "Datum začetka"
+                },
+                "step_count": {
+                    "label": "Število korakov"
+                },
                 "stop": {
                     "options": {
                         "minor": "Manjša cesta"
                 "stop": {
                     "options": {
                         "minor": "Manjša cesta"
                         "cutting": "Usek",
                         "embankment": "Nasip",
                         "ford": "Plitvina",
                         "cutting": "Usek",
                         "embankment": "Nasip",
                         "ford": "Plitvina",
-                        "tunnel": "Predor"
+                        "tunnel": "Podhod"
                     },
                     "placeholder": "Neznano"
                 },
                     },
                     "placeholder": "Neznano"
                 },
                 "supervised": {
                     "label": "Nadzorovano"
                 },
                 "supervised": {
                     "label": "Nadzorovano"
                 },
+                "support": {
+                    "label": "Podpora"
+                },
                 "surface": {
                     "label": "Površina"
                 },
                 "surface": {
                     "label": "Površina"
                 },
+                "surveillance": {
+                    "label": "Način nadzora"
+                },
+                "surveillance/type": {
+                    "label": "Vrsta nadzora",
+                    "options": {
+                        "ALPR": "Samodejno branje registrskih tablic",
+                        "camera": "Kamera",
+                        "guard": "Varnostnik"
+                    }
+                },
+                "surveillance/zone": {
+                    "label": "Območje nadzora"
+                },
                 "tactile_paving": {
                     "label": "Talni taktilni sistem"
                 },
                 "tactile_paving": {
                     "label": "Talni taktilni sistem"
                 },
                         "pitlatrine": "Štrbunk"
                     }
                 },
                         "pitlatrine": "Štrbunk"
                     }
                 },
+                "toll": {
+                    "label": "Plačilo cestnine"
+                },
+                "tomb": {
+                    "label": "Vrsta grobnice"
+                },
                 "tourism": {
                 "tourism": {
-                    "label": "Vrsta"
+                    "label": "Vrsta turizma"
                 },
                 "tower/construction": {
                     "label": "Gradbišče"
                 },
                 "tower/type": {
                 },
                 "tower/construction": {
                     "label": "Gradbišče"
                 },
                 "tower/type": {
-                    "label": "Vrsta"
+                    "label": "Vrsta stolpa"
                 },
                 "tracktype": {
                     "label": "Tip kolovoza",
                 },
                 "tracktype": {
                     "label": "Tip kolovoza",
                         "intermediate": "Srednja: le nekaj oznak poti, pot je večinoma vidna",
                         "no": "Ne: brezpotje, terja zelo dobro sposobnost orientacije"
                     },
                         "intermediate": "Srednja: le nekaj oznak poti, pot je večinoma vidna",
                         "no": "Ne: brezpotje, terja zelo dobro sposobnost orientacije"
                     },
-                    "placeholder": "Odlična, dobra, slaba..."
+                    "placeholder": "Odlična, dobra, slaba ..."
                 },
                 "trees": {
                     "label": "Drevesa"
                 },
                 "trees": {
                     "label": "Drevesa"
                 "visibility": {
                     "label": "Vidnost",
                     "options": {
                 "visibility": {
                     "label": "Vidnost",
                     "options": {
+                        "area": "Več kot 20 m",
                         "house": "Do 5 m",
                         "street": "5 do 20 m"
                     }
                         "house": "Do 5 m",
                         "street": "5 do 20 m"
                     }
                     "label": "Vrsta"
                 },
                 "water": {
                     "label": "Vrsta"
                 },
                 "water": {
-                    "label": "Vrsta"
+                    "label": "Vrsta vode"
                 },
                 "waterway": {
                     "label": "Vrsta"
                 },
                 "waterway": {
                     "label": "Vrsta"
                     "label": "Dostop z vozičkom"
                 },
                 "width": {
                     "label": "Dostop z vozičkom"
                 },
                 "width": {
-                    "label": "Širina (metri)"
+                    "label": "Širina (v metrih)"
                 },
                 "wikipedia": {
                     "label": "Wikipedija"
                 },
                 "wikipedia": {
                     "label": "Wikipedija"
             "presets": {
                 "address": {
                     "name": "Naslov",
             "presets": {
                 "address": {
                     "name": "Naslov",
-                    "terms": "naslov"
+                    "terms": "naslov, adresa, naslovnik"
                 },
                 "advertising/billboard": {
                 },
                 "advertising/billboard": {
-                    "name": "Oglasni pano"
+                    "name": "Oglasni pano",
+                    "terms": "reklamni pano, oglasniki, reklama,advertisment,ads"
                 },
                 "aerialway": {
                     "name": "Žičnica"
                 },
                 "aerialway": {
                     "name": "Žičnica"
                     "name": "Kabinska žičnica",
                     "terms": "gondola"
                 },
                     "name": "Kabinska žičnica",
                     "terms": "gondola"
                 },
+                "aerialway/goods": {
+                    "name": "Oskrbovalna žičnica"
+                },
                 "aerialway/magic_carpet": {
                     "name": "Preproga",
                     "terms": "vlečnica,čarobna preproga,tekoči trak"
                 },
                 "aerialway/magic_carpet": {
                     "name": "Preproga",
                     "terms": "vlečnica,čarobna preproga,tekoči trak"
                 },
+                "aerialway/mixed_lift": {
+                    "name": "Mešana žičnica"
+                },
                 "aerialway/platter": {
                     "name": "Krožniki",
                     "terms": "vlečnica,krožnički,gumbki"
                 "aerialway/platter": {
                     "name": "Krožniki",
                     "terms": "vlečnica,krožnički,gumbki"
                     "name": "Letališka ploščad",
                     "terms": "ploščad splošnega letalstva,parkirišče letal"
                 },
                     "name": "Letališka ploščad",
                     "terms": "ploščad splošnega letalstva,parkirišče letal"
                 },
+                "aeroway/gate": {
+                    "name": "Letališčna vrata"
+                },
                 "aeroway/hangar": {
                     "name": "Hangar",
                     "terms": "garaža za letala"
                 "aeroway/hangar": {
                     "name": "Hangar",
                     "terms": "garaža za letala"
                 "amenity": {
                     "name": "Storitev"
                 },
                 "amenity": {
                     "name": "Storitev"
                 },
+                "amenity/animal_boarding": {
+                    "name": "Živalski hotel",
+                    "terms": "pasji hotel, ljubljenci, počitnice"
+                },
+                "amenity/animal_breeding": {
+                    "name": "Središče za vzrejo živali",
+                    "terms": "središče za vzrejo živali,vzrejališče,prepuščališče"
+                },
                 "amenity/animal_shelter": {
                 "amenity/animal_shelter": {
-                    "name": "Zavetišče za živali"
+                    "name": "Zavetišče za živali",
+                    "terms": "zavetišče,živalsko središče"
                 },
                 "amenity/arts_centre": {
                     "name": "Center umetnosti",
                 },
                 "amenity/arts_centre": {
                     "name": "Center umetnosti",
                 },
                 "amenity/atm": {
                     "name": "Bankomat",
                 },
                 "amenity/atm": {
                     "name": "Bankomat",
-                    "terms": "bančni avtomat"
+                    "terms": "bančni avtomat,bankomat,banka,depozit"
                 },
                 "amenity/bank": {
                     "name": "Banka",
                 },
                 "amenity/bank": {
                     "name": "Banka",
                     "terms": "pralnica avtomobilov,avtomobilska pralnica,pralnica"
                 },
                 "amenity/casino": {
                     "terms": "pralnica avtomobilov,avtomobilska pralnica,pralnica"
                 },
                 "amenity/casino": {
-                    "name": "igralnica"
+                    "name": "igralnica",
+                    "terms": "casino,kazino,igralnica,gambling,avtomati"
                 },
                 "amenity/charging_station": {
                     "name": "Polnilna postaja",
                 },
                 "amenity/charging_station": {
                     "name": "Polnilna postaja",
                 },
                 "amenity/fuel": {
                     "name": "Bencinska črpalka",
                 },
                 "amenity/fuel": {
                     "name": "Bencinska črpalka",
-                    "terms": "petrol,omv"
+                    "terms": "petrol,omv,mol,bencin,pumpa,gaspumpa"
                 },
                 "amenity/grave_yard": {
                     "name": "Pokopališče",
                 },
                 "amenity/grave_yard": {
                     "name": "Pokopališče",
                     "name": "Sladoledarna",
                     "terms": "slaščičarna, bistro"
                 },
                     "name": "Sladoledarna",
                     "terms": "slaščičarna, bistro"
                 },
+                "amenity/internet_cafe": {
+                    "name": "Internet Cafe"
+                },
                 "amenity/library": {
                     "name": "Knjižnica",
                     "terms": "biblioteka"
                 "amenity/library": {
                     "name": "Knjižnica",
                     "terms": "biblioteka"
                     "name": "Nočni klub",
                     "terms": "disko,diskoteka"
                 },
                     "name": "Nočni klub",
                     "terms": "disko,diskoteka"
                 },
+                "amenity/nursing_home": {
+                    "name": "Dom za bolniško nego"
+                },
                 "amenity/parking": {
                     "name": "Parkirišče",
                     "terms": "garaža,parkirna hiša,garažna hiša"
                 "amenity/parking": {
                     "name": "Parkirišče",
                     "terms": "garaža,parkirna hiša,garažna hiša"
                     "terms": "Uvoz/izvoz iz parkirne hiše"
                 },
                 "amenity/parking_space": {
                     "terms": "Uvoz/izvoz iz parkirne hiše"
                 },
                 "amenity/parking_space": {
-                    "name": "Parkirni prostor"
+                    "name": "Parkirni prostor",
+                    "terms": "parking,parkirišče,parkirni prostor, parkirno mesto"
+                },
+                "amenity/pavilion": {
+                    "name": "Pavilion"
                 },
                 "amenity/pharmacy": {
                     "name": "Lekarna",
                     "terms": "farmacija,zdravila,apoteka"
                 },
                 "amenity/place_of_worship": {
                 },
                 "amenity/pharmacy": {
                     "name": "Lekarna",
                     "terms": "farmacija,zdravila,apoteka"
                 },
                 "amenity/place_of_worship": {
-                    "name": "Svetišče",
+                    "name": "Verski hram",
                     "terms": "verski objekt,kraj čaščenja,sakralni objekt"
                 },
                 "amenity/place_of_worship/buddhist": {
                     "terms": "verski objekt,kraj čaščenja,sakralni objekt"
                 },
                 "amenity/place_of_worship/buddhist": {
                     "terms": "džamija,đamija,islamski verski center,muslimanski verski center"
                 },
                 "amenity/planetarium": {
                     "terms": "džamija,đamija,islamski verski center,muslimanski verski center"
                 },
                 "amenity/planetarium": {
-                    "name": "Planetarij"
+                    "name": "Planetarij",
+                    "terms": "planetarij,zvezdarij,arkade,vesoljska diorama"
                 },
                 "amenity/police": {
                     "name": "Policija",
                 },
                 "amenity/police": {
                     "name": "Policija",
                     "name": "Pivnica",
                     "terms": "pivo,pijača"
                 },
                     "name": "Pivnica",
                     "terms": "pivo,pijača"
                 },
+                "amenity/public_bath": {
+                    "name": "Javno kopališče",
+                    "terms": "kopališče,plavanje,tobogan,bazen"
+                },
                 "amenity/ranger_station": {
                     "name": "Čuvaj parka",
                     "terms": "center za obiskovalce,nadzornik parka,uprava parka,čuvaj parka"
                 "amenity/ranger_station": {
                     "name": "Čuvaj parka",
                     "terms": "center za obiskovalce,nadzornik parka,uprava parka,čuvaj parka"
                     "name": "Zatočišče za brezdomce",
                     "terms": "zavetišče za brezdomce"
                 },
                     "name": "Zatočišče za brezdomce",
                     "terms": "zavetišče za brezdomce"
                 },
+                "amenity/social_facility/nursing_home": {
+                    "name": "Dom za bolniško nego",
+                    "terms": "dom za ostarele,dom za nego,dom za oskrbo,oskrbovalni dom,dom za starostnike,bolnišnični dom"
+                },
                 "amenity/studio": {
                     "name": "Studio",
                     "terms": "snemalni studio,radijski studio,televizijski studio"
                 "amenity/studio": {
                     "name": "Studio",
                     "terms": "snemalni studio,radijski studio,televizijski studio"
                     "name": "Mestna hiša",
                     "terms": "magistrat,rotovž"
                 },
                     "name": "Mestna hiša",
                     "terms": "magistrat,rotovž"
                 },
+                "amenity/vending_machine": {
+                    "name": "Prodajni avtomat"
+                },
                 "amenity/vending_machine/cigarettes": {
                     "name": "Avtomat za cigarete"
                 },
                 "amenity/vending_machine/cigarettes": {
                     "name": "Avtomat za cigarete"
                 },
                     "name": "Avtomat za pijače"
                 },
                 "amenity/vending_machine/excrement_bags": {
                     "name": "Avtomat za pijače"
                 },
                 "amenity/vending_machine/excrement_bags": {
-                    "name": "Avtomat za vrečke za iztrebke"
+                    "name": "Vrečke za iztrebke"
                 },
                 "amenity/vending_machine/news_papers": {
                     "name": "Avtomat za časopis"
                 },
                 },
                 "amenity/vending_machine/news_papers": {
                     "name": "Avtomat za časopis"
                 },
+                "amenity/vending_machine/newspapers": {
+                    "name": "Avtomat za časopis"
+                },
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "Avtomat za pošiljanje/prevzem paketov"
                 },
                 "amenity/vending_machine/parking_tickets": {
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "Avtomat za pošiljanje/prevzem paketov"
                 },
                 "amenity/vending_machine/parking_tickets": {
-                    "name": "Avtomat za parkirne listke"
+                    "name": "Avtomat za prodajo parkirnih lističev",
+                    "terms": "avtomat,prodaja,karte,kartice,listič,list,parkirišče,parkiranje"
                 },
                 "amenity/vending_machine/public_transport_tickets": {
                 },
                 "amenity/vending_machine/public_transport_tickets": {
-                    "name": "Avtomat za vozovnice javnega potniškega prometa"
+                    "name": "Avtomat za prodajo vozovnic",
+                    "terms": "avtomat,prodaja,vozovnice,karte,kartice,vstopnice,javni prevoz,avtobus,tramvaj"
                 },
                 "amenity/vending_machine/sweets": {
                     "name": "Avtomat za prigrizke"
                 },
                 "amenity/vending_machine/sweets": {
                     "name": "Avtomat za prigrizke"
                 "amenity/water_point": {
                     "name": "Pitna voda za avtodome"
                 },
                 "amenity/water_point": {
                     "name": "Pitna voda za avtodome"
                 },
+                "amenity/watering_place": {
+                    "name": "Napajališče za živali",
+                    "terms": "napajališče za živali"
+                },
                 "area": {
                     "name": "Mnogokotnik",
                     "terms": "poligon,območje"
                 "area": {
                     "name": "Mnogokotnik",
                     "terms": "poligon,območje"
                     "name": "Stebriček",
                     "terms": "dvižni stebriček"
                 },
                     "name": "Stebriček",
                     "terms": "dvižni stebriček"
                 },
+                "barrier/border_control": {
+                    "name": "Mejni nadzor",
+                    "terms": "Meja, carina, prestop"
+                },
                 "barrier/cattle_grid": {
                     "name": "Rešetke za živino",
                     "terms": "rešetke,vrata-rešetke"
                 "barrier/cattle_grid": {
                     "name": "Rešetke za živino",
                     "terms": "rešetke,vrata-rešetke"
                 },
                 "building/greenhouse": {
                     "name": "Rastlinjak",
                 },
                 "building/greenhouse": {
                     "name": "Rastlinjak",
-                    "terms": "topla greda"
+                    "terms": "rastlinjak,topla greda"
                 },
                 "building/hospital": {
                     "name": "Bolnišnica",
                 },
                 "building/hospital": {
                     "name": "Bolnišnica",
                     "terms": "tesar, mizar"
                 },
                 "craft/carpet_layer": {
                     "terms": "tesar, mizar"
                 },
                 "craft/carpet_layer": {
-                    "name": "Preprogar",
+                    "name": "Parketar",
                     "terms": "preproge,prodajalec preprog,izdelovalec preprog"
                 },
                 "craft/caterer": {
                     "terms": "preproge,prodajalec preprog,izdelovalec preprog"
                 },
                 "craft/caterer": {
                     "terms": "vstop/izstop"
                 },
                 "footway/crossing": {
                     "terms": "vstop/izstop"
                 },
                 "footway/crossing": {
-                    "name": "Križišče ulic"
+                    "name": "Prehod cestišča"
                 },
                 "footway/crosswalk": {
                     "name": "Prehod za pešce"
                 },
                 "footway/crosswalk": {
                     "name": "Prehod za pešce"
                     "terms": "negozdnato"
                 },
                 "golf/green": {
                     "terms": "negozdnato"
                 },
                 "golf/green": {
-                    "name": "Zelenica",
-                    "terms": "golf zelenica"
+                    "name": "Travnata površina golfišča",
+                    "terms": "golf,travišče,zelenica"
                 },
                 "golf/hole": {
                     "name": "Luknja",
                     "terms": "golf luknja"
                 },
                 },
                 "golf/hole": {
                     "name": "Luknja",
                     "terms": "golf luknja"
                 },
+                "golf/lateral_water_hazard_area": {
+                    "name": "Bočne vodne ovire",
+                    "terms": "Vodne ovire, golf"
+                },
+                "golf/lateral_water_hazard_line": {
+                    "name": "Bočne vodne ovire",
+                    "terms": "Vodne ovire, golf"
+                },
                 "golf/rough": {
                     "name": "Ledina",
                     "terms": "jasa,ledina,območje ob čistini in ovirah in zelenici z visoko košeno ali nepokošeno travo"
                 },
                 "golf/tee": {
                 "golf/rough": {
                     "name": "Ledina",
                     "terms": "jasa,ledina,območje ob čistini in ovirah in zelenici z visoko košeno ali nepokošeno travo"
                 },
                 "golf/tee": {
-                    "name": "podstavek",
-                    "terms": "golf podstavek"
+                    "name": "Podstavek za žogico",
+                    "terms": "podstavek, golf"
+                },
+                "golf/water_hazard_area": {
+                    "name": "Vodne ovire",
+                    "terms": "Vodne ovire, golf"
+                },
+                "golf/water_hazard_line": {
+                    "name": "Vodne ovire",
+                    "terms": "Vodne ovire, golf"
                 },
                 "healthcare/blood_donation": {
                 },
                 "healthcare/blood_donation": {
-                    "name": "Krvodajalski center"
+                    "name": "Krvodajalsko središče"
                 },
                 "highway": {
                     "name": "Cesta"
                 },
                 "highway": {
                     "name": "Cesta"
                     "name": "Notranji hodnik"
                 },
                 "highway/crossing": {
                     "name": "Notranji hodnik"
                 },
                 "highway/crossing": {
-                    "name": "Križišče ulic"
+                    "name": "Prehod cestišča"
                 },
                 "highway/crosswalk": {
                     "name": "Prehod za pešce"
                 },
                 "highway/crosswalk": {
                     "name": "Prehod za pešce"
                     "name": "Kolesarska steza",
                     "terms": "kolesarska pot,steza za kolesarje"
                 },
                     "name": "Kolesarska steza",
                     "terms": "kolesarska pot,steza za kolesarje"
                 },
+                "highway/elevator": {
+                    "name": "Dvigalo"
+                },
                 "highway/footway": {
                     "name": "Pešpot",
                     "terms": "pot za pešce"
                 "highway/footway": {
                     "name": "Pešpot",
                     "terms": "pot za pešce"
                     "name": "Priključek na glavno cesto",
                     "terms": "priključek na glavno cesto"
                 },
                     "name": "Priključek na glavno cesto",
                     "terms": "priključek na glavno cesto"
                 },
+                "highway/raceway": {
+                    "name": "Dirkališče (motošport)",
+                    "terms": "moto-steza (motokros) ,kros steza,dirkališče,hipodrom,rally"
+                },
                 "highway/residential": {
                     "name": "Stanovanjska ulica",
                     "terms": "ulica,naselje,ulica v naselju"
                 "highway/residential": {
                     "name": "Stanovanjska ulica",
                     "terms": "ulica,naselje,ulica v naselju"
                 "highway/track": {
                     "name": "Nevzdrževani kolovoz"
                 },
                 "highway/track": {
                     "name": "Nevzdrževani kolovoz"
                 },
+                "highway/traffic_mirror": {
+                    "name": "Prometno ogledalo",
+                    "terms": "prometno ogledalo, zrcalo, odbojnik,ovinek"
+                },
                 "highway/traffic_signals": {
                 "highway/traffic_signals": {
-                    "name": "Semafor",
-                    "terms": "signalna naprava"
+                    "name": "Prometna signalizacija",
+                    "terms": "signalna naprava, svetlobni signali,luči,svetila,utripanje"
                 },
                 "highway/trunk": {
                     "name": "Hitra cesta",
                 },
                 "highway/trunk": {
                     "name": "Hitra cesta",
                 },
                 "highway/turning_circle": {
                     "name": "Obračališče",
                 },
                 "highway/turning_circle": {
                     "name": "Obračališče",
-                    "terms": "obračalni krog"
+                    "terms": "obračališče, obračalni krog, obračalnik"
+                },
+                "highway/turning_loop": {
+                    "name": "Obračališče (otok)",
+                    "terms": "obračališče (otok), obračalni krog, obračalni otok"
                 },
                 "highway/unclassified": {
                     "name": "Ožja/Neopredeljena cestna povezava"
                 },
                 "highway/unclassified": {
                     "name": "Ožja/Neopredeljena cestna povezava"
                     "terms": "vojaško področje, omejeno gibanje"
                 },
                 "landuse/military/airfield": {
                     "terms": "vojaško področje, omejeno gibanje"
                 },
                 "landuse/military/airfield": {
-                    "name": "Vojaško letališče"
+                    "name": "Vojaško letališče",
+                    "terms": "vojaško letališče,"
                 },
                 "landuse/military/barracks": {
                     "name": "Vojašnica"
                 },
                 "landuse/military/barracks": {
                     "name": "Vojašnica"
                 "landuse/military/bunker": {
                     "name": "Vojaško zaklonišče"
                 },
                 "landuse/military/bunker": {
                     "name": "Vojaško zaklonišče"
                 },
+                "landuse/military/checkpoint": {
+                    "name": "Nadzorna točka",
+                    "terms": "kontrola, kontrolna točka, rampa"
+                },
+                "landuse/military/danger_area": {
+                    "name": "Nevarno območje",
+                    "terms": "strelišče, delovišče, gradbišče"
+                },
+                "landuse/military/naval_base": {
+                    "name": "Vojaško pomorsko oporišče"
+                },
+                "landuse/military/nuclear_explosion_site": {
+                    "name": "Območje jedrskih poskusov"
+                },
+                "landuse/military/obstacle_course": {
+                    "name": "Vojaške ovire za trening"
+                },
+                "landuse/military/office": {
+                    "name": "Vojaške pisarne"
+                },
+                "landuse/military/range": {
+                    "name": "Vojaško strelišče"
+                },
+                "landuse/military/training_area": {
+                    "name": "Vojaško vadbišče"
+                },
                 "landuse/orchard": {
                     "name": "Sadovnjak",
                     "terms": "sadni nasad"
                 },
                 "landuse/orchard": {
                     "name": "Sadovnjak",
                     "terms": "sadni nasad"
                 },
+                "landuse/plant_nursery": {
+                    "name": "Drevesnica",
+                    "terms": "drevesnica,semenarna,sadike,vrtnarija,vrtnarski center"
+                },
                 "landuse/quarry": {
                     "name": "Kamnolom",
                     "terms": "peskokop"
                 "landuse/quarry": {
                     "name": "Kamnolom",
                     "terms": "peskokop"
                     "name": "Prosti čas",
                     "terms": "rekreacija,turizem"
                 },
                     "name": "Prosti čas",
                     "terms": "rekreacija,turizem"
                 },
+                "leisure/adult_gaming_centre": {
+                    "name": "Igralnica za odrasle",
+                    "terms": "Casino, gambling, kockanje, igre na srečo"
+                },
+                "leisure/bird_hide": {
+                    "name": "Opazovalnica"
+                },
                 "leisure/bowling_alley": {
                     "name": "Kegljišče"
                 },
                 "leisure/bowling_alley": {
                     "name": "Kegljišče"
                 },
                 "leisure/fitness_centre": {
                     "name": "Telovadnica / Fitness"
                 },
                 "leisure/fitness_centre": {
                     "name": "Telovadnica / Fitness"
                 },
+                "leisure/fitness_centre/yoga": {
+                    "name": "Studio joge",
+                    "terms": "joga, relaksacija, meditacija"
+                },
+                "leisure/fitness_station": {
+                    "name": "Telovadna orodja na prostem"
+                },
                 "leisure/garden": {
                     "name": "Vrt",
                     "terms": "biološki vrt"
                 "leisure/garden": {
                     "name": "Vrt",
                     "terms": "biološki vrt"
                     "name": "Golfišče",
                     "terms": "igrišče za golf"
                 },
                     "name": "Golfišče",
                     "terms": "igrišče za golf"
                 },
+                "leisure/horse_riding": {
+                    "name": "Jahalni klub"
+                },
                 "leisure/ice_rink": {
                     "name": "Drsališče",
                     "terms": "hokej,drsanje na ledu"
                 "leisure/ice_rink": {
                     "name": "Drsališče",
                     "terms": "hokej,drsanje na ledu"
                     "name": "Košarkaško igrišče",
                     "terms": "igrišče za košarko"
                 },
                     "name": "Košarkaško igrišče",
                     "terms": "igrišče za košarko"
                 },
+                "leisure/pitch/beachvolleyball": {
+                    "name": "Igrišče za odbojko na mivki"
+                },
+                "leisure/pitch/bowls": {
+                    "name": "Balinišče"
+                },
+                "leisure/pitch/cricket": {
+                    "name": "Igrišče za kriket",
+                    "terms": "kriketkort,kriket,cricket"
+                },
+                "leisure/pitch/equestrian": {
+                    "name": "Jahalna arena"
+                },
+                "leisure/pitch/rugby_league": {
+                    "name": "Ligaško igrišče za ragbi",
+                    "terms": "ligaško igrišče,rugbi,ragbi"
+                },
+                "leisure/pitch/rugby_union": {
+                    "name": "Zvezno igrišče za ragbi",
+                    "terms": "zvezno igrišče,rugbi,ragbi"
+                },
                 "leisure/pitch/skateboard": {
                     "name": "Poligon za rolkanje",
                     "terms": "skejt park"
                 "leisure/pitch/skateboard": {
                     "name": "Poligon za rolkanje",
                     "terms": "skejt park"
                 "leisure/resort": {
                     "name": "Letovišče"
                 },
                 "leisure/resort": {
                     "name": "Letovišče"
                 },
+                "leisure/running_track": {
+                    "name": "Tekaška steza (tek)",
+                    "terms": "steza (tek),tekališče,kros steza,hipodrom"
+                },
                 "leisure/slipway": {
                     "name": "Rampa",
                     "terms": "rampa za vodna plovila"
                 "leisure/slipway": {
                     "name": "Rampa",
                     "terms": "rampa za vodna plovila"
                     "name": "Plavalni bazen",
                     "terms": "bazen,kopališče"
                 },
                     "name": "Plavalni bazen",
                     "terms": "bazen,kopališče"
                 },
+                "leisure/track": {
+                    "name": "Tekmovalna steza (neasfaltirana)",
+                    "terms": "hipodrom, kasaška steza, drsališče (ne moto) ,krožna steza,velodrom"
+                },
                 "leisure/water_park": {
                     "name": "Vodni park"
                 },
                 "leisure/water_park": {
                     "name": "Vodni park"
                 },
                     "name": "Antropogena konstrukcija",
                     "terms": "druge konstrukcije"
                 },
                     "name": "Antropogena konstrukcija",
                     "terms": "druge konstrukcije"
                 },
+                "man_made/adit": {
+                    "name": "Vodoravni rudniški rov ",
+                    "terms": "rudniški rov, vhod, odprtina"
+                },
                 "man_made/breakwater": {
                     "name": "Valobran",
                     "terms": "lukobran,pomol,nasip,zid"
                 "man_made/breakwater": {
                     "name": "Valobran",
                     "terms": "lukobran,pomol,nasip,zid"
                     "name": "Zastavni drog",
                     "terms": "zastava,drog za zastavo"
                 },
                     "name": "Zastavni drog",
                     "terms": "zastava,drog za zastavo"
                 },
+                "man_made/gasometer": {
+                    "name": "Plinski rezervoar"
+                },
                 "man_made/groyne": {
                     "name": "Leseni valolom"
                 },
                 "man_made/groyne": {
                     "name": "Leseni valolom"
                 },
                     "name": "Svetilnik",
                     "terms": "svetilničar"
                 },
                     "name": "Svetilnik",
                     "terms": "svetilničar"
                 },
+                "man_made/mast": {
+                    "name": "Nosilni drog",
+                    "terms": "drog,antena,nosilo,steber,kandelaber"
+                },
                 "man_made/observation": {
                     "name": "Razgledni stolp",
                     "terms": "opazovalnica,opazovalni stolp"
                 "man_made/observation": {
                     "name": "Razgledni stolp",
                     "terms": "opazovalnica,opazovalni stolp"
                     "name": "Cevovod",
                     "terms": "plinovod,naftovod,vodovod"
                 },
                     "name": "Cevovod",
                     "terms": "plinovod,naftovod,vodovod"
                 },
+                "man_made/pumping_station": {
+                    "name": "Bencinska črpalka"
+                },
                 "man_made/silo": {
                     "name": "Silos"
                 },
                 "man_made/silo": {
                     "name": "Silos"
                 },
                     "name": "Vrh",
                     "terms": "špica"
                 },
                     "name": "Vrh",
                     "terms": "špica"
                 },
+                "natural/ridge": {
+                    "name": "Greben",
+                    "terms": "greben,sleme"
+                },
                 "natural/saddle": {
                     "name": "Sedlo",
                     "terms": "Sedlo, škrbina"
                 "natural/saddle": {
                     "name": "Sedlo",
                     "terms": "Sedlo, škrbina"
                     "name": "Pragozd",
                     "terms": "naraven gozd,nespremenjen gozd"
                 },
                     "name": "Pragozd",
                     "terms": "naraven gozd,nespremenjen gozd"
                 },
+                "noexit/yes": {
+                    "name": "Brez izhoda"
+                },
                 "office": {
                     "name": "Urad",
                     "terms": "pisarna"
                 "office": {
                     "name": "Urad",
                     "terms": "pisarna"
                     "name": "Pravna pisarna",
                     "terms": "pravni urad,advokat,odvetništvo"
                 },
                     "name": "Pravna pisarna",
                     "terms": "pravni urad,advokat,odvetništvo"
                 },
+                "office/lawyer/notary": {
+                    "name": "Notarska pisarna"
+                },
                 "office/newspaper": {
                     "name": "Časopisna hiša",
                     "terms": "časopis"
                 "office/newspaper": {
                     "name": "Časopisna hiša",
                     "terms": "časopis"
                     "name": "Soseska",
                     "terms": "sosečka"
                 },
                     "name": "Soseska",
                     "terms": "sosečka"
                 },
+                "place/quarter": {
+                    "name": "Mestna četrt"
+                },
+                "place/suburb": {
+                    "name": "Predmestje"
+                },
                 "place/town": {
                     "name": "Mesto",
                     "terms": "mesto"
                 "place/town": {
                     "name": "Mesto",
                     "terms": "mesto"
                     "name": "Tramvaj",
                     "terms": "tramvaj"
                 },
                     "name": "Tramvaj",
                     "terms": "tramvaj"
                 },
+                "railway/tram_stop": {
+                    "name": "Postajališče tramvaja"
+                },
                 "relation": {
                     "name": "Zveza",
                     "terms": "relacija,povezava,odnos"
                 "relation": {
                     "name": "Zveza",
                     "terms": "relacija,povezava,odnos"
                     "name": "Trgovina z alkoholnimi pijačami",
                     "terms": "alkoholne pijače"
                 },
                     "name": "Trgovina z alkoholnimi pijačami",
                     "terms": "alkoholne pijače"
                 },
+                "shop/anime": {
+                    "name": "Trgovina Anime",
+                    "terms": "Anime, manga, kostumi, maske"
+                },
                 "shop/antiques": {
                     "name": "Starinarnica",
                     "terms": "starinarnica,antikvariat"
                 "shop/antiques": {
                     "name": "Starinarnica",
                     "terms": "starinarnica,antikvariat"
                 "shop/art": {
                     "name": "Trgovina z umetninami"
                 },
                 "shop/art": {
                     "name": "Trgovina z umetninami"
                 },
+                "shop/baby_goods": {
+                    "name": "Trgovina za otroke",
+                    "terms": "Babycenter, dojenčki, otroci, igrače"
+                },
                 "shop/bag": {
                     "name": "Trgovina za prtljago"
                 },
                 "shop/bag": {
                     "name": "Trgovina za prtljago"
                 },
                     "name": "Lepotilni salon",
                     "terms": "salon lepote,lepotilnica,nega rok in nohtov,manikura,pedikura,wellness center"
                 },
                     "name": "Lepotilni salon",
                     "terms": "salon lepote,lepotilnica,nega rok in nohtov,manikura,pedikura,wellness center"
                 },
+                "shop/beauty/tanning": {
+                    "name": "Solarij"
+                },
                 "shop/bed": {
                     "name": "Trgovina s posteljnino in žimnicami"
                 },
                 "shop/bed": {
                     "name": "Trgovina s posteljnino in žimnicami"
                 },
                     "name": "Prodaja domačih pridelkov",
                     "terms": "lokalna tržnica"
                 },
                     "name": "Prodaja domačih pridelkov",
                     "terms": "lokalna tržnica"
                 },
+                "shop/fashion": {
+                    "name": "Trgovina z modnimi oblačili"
+                },
                 "shop/fishmonger": {
                     "name": "Ribarnica"
                 },
                 "shop/fishmonger": {
                     "name": "Ribarnica"
                 },
                     "name": "Vrtni center",
                     "terms": "vse za vrt,vrtnarija"
                 },
                     "name": "Vrtni center",
                     "terms": "vse za vrt,vrtnarija"
                 },
+                "shop/gas": {
+                    "name": "Trgovina s plinskimi jeklenkami"
+                },
                 "shop/gift": {
                     "name": "Prodajalna daril",
                     "terms": "darila"
                 "shop/gift": {
                     "name": "Prodajalna daril",
                     "terms": "darila"
                     "name": "Pralnica",
                     "terms": "samopostrežna pralnica perila"
                 },
                     "name": "Pralnica",
                     "terms": "samopostrežna pralnica perila"
                 },
+                "shop/leather": {
+                    "name": "Usnjarna"
+                },
                 "shop/locksmith": {
                     "name": "Ključavničar",
                     "terms": "ključavničarstvo,ključar"
                 },
                 "shop/lottery": {
                 "shop/locksmith": {
                     "name": "Ključavničar",
                     "terms": "ključavničarstvo,ključar"
                 },
                 "shop/lottery": {
-                    "name": "loto",
+                    "name": "Loterijska prodajalna",
                     "terms": "loterija"
                 },
                 "shop/mall": {
                     "terms": "loterija"
                 },
                 "shop/mall": {
                 "shop/pawnbroker": {
                     "name": "Zastavljalnica"
                 },
                 "shop/pawnbroker": {
                     "name": "Zastavljalnica"
                 },
+                "shop/perfumery": {
+                    "name": "Parfumerija"
+                },
                 "shop/pet": {
                     "name": "Trgovina za domače živali",
                     "terms": "pripomočki za domače živali,hrana za domače žival"
                 "shop/pet": {
                     "name": "Trgovina za domače živali",
                     "terms": "pripomočki za domače živali,hrana za domače žival"
                     "name": "Čajnica",
                     "terms": "čaj"
                 },
                     "name": "Čajnica",
                     "terms": "čaj"
                 },
+                "shop/ticket": {
+                    "name": "Prodajalna vstopnic",
+                    "terms": "ticket,vstopnica,karta,kartica,prodajalna,koncerti,dogodki,razstave,"
+                },
                 "shop/tobacco": {
                     "name": "Tobačna trgovina"
                 },
                 "shop/tobacco": {
                     "name": "Tobačna trgovina"
                 },
                     "name": "Videoteka",
                     "terms": "video"
                 },
                     "name": "Videoteka",
                     "terms": "video"
                 },
+                "shop/video_games": {
+                    "name": "Trgovina z video igrami"
+                },
                 "shop/weapons": {
                     "name": "Trgovina z orožjem"
                 },
                 "shop/weapons": {
                     "name": "Trgovina z orožjem"
                 },
                     "name": "Planinska koča",
                     "terms": "koča,dom,lovska koča"
                 },
                     "name": "Planinska koča",
                     "terms": "koča,dom,lovska koča"
                 },
+                "tourism/apartment": {
+                    "name": "Apartma / Gostišče"
+                },
                 "tourism/aquarium": {
                     "name": "Akvarij",
                     "terms": "Akvarij, terarij, vodni organizmi"
                 "tourism/aquarium": {
                     "name": "Akvarij",
                     "terms": "Akvarij, terarij, vodni organizmi"
                     "name": "Živalski vrt",
                     "terms": "ZOO"
                 },
                     "name": "Živalski vrt",
                     "terms": "ZOO"
                 },
+                "traffic_calming": {
+                    "name": "Grbine za umirjanje hitrosti",
+                    "terms": "cestni policaj, grbine za umirjanje prometa"
+                },
                 "traffic_calming/bump": {
                     "name": "Hitrostna izboklina",
                     "terms": "Hitrostna ovira"
                 },
                 "traffic_calming/bump": {
                     "name": "Hitrostna izboklina",
                     "terms": "Hitrostna ovira"
                 },
+                "traffic_calming/chicane": {
+                    "name": "Prometna šikana",
+                    "terms": "cestna šikana, ovinki za umirjanje prometa,"
+                },
+                "traffic_calming/dip": {
+                    "name": "Cestno-hitrostna ovira",
+                    "terms": "hitrostna ovira, cestna ovira, ležeči policaj, grbina"
+                },
                 "traffic_calming/hump": {
                     "name": "Hitrostna grbina"
                 },
                 "traffic_calming/hump": {
                     "name": "Hitrostna grbina"
                 },
+                "traffic_calming/island": {
+                    "name": "Prometni otok"
+                },
+                "traffic_calming/rumble_strip": {
+                    "name": "Cestne tresavke",
+                    "terms": "grobi opozoril pas, cestni, opozorilni pas, tresavke, ležeči policaj, grbine"
+                },
+                "traffic_calming/table": {
+                    "name": "Dvignjen prehod za pešce",
+                    "terms": "prehod za pešce, grbina, zebra"
+                },
                 "type/boundary": {
                     "name": "Meja",
                     "terms": "rob"
                 "type/boundary": {
                     "name": "Meja",
                     "terms": "rob"
                     "terms": "pot za pohodnike"
                 },
                 "type/route/horse": {
                     "terms": "pot za pohodnike"
                 },
                 "type/route/horse": {
-                    "name": "Steza za jahanje"
+                    "name": "Jahalna steza"
                 },
                 "type/route/pipeline": {
                     "name": "Cevovod",
                 },
                 "type/route/pipeline": {
                     "name": "Cevovod",
                 },
                 "waterway/canal": {
                     "name": "Kanal",
                 },
                 "waterway/canal": {
                     "name": "Kanal",
-                    "terms": "prekop"
+                    "terms": "kanal,prekop"
                 },
                 "waterway/dam": {
                     "name": "Jez",
                 },
                 "waterway/dam": {
                     "name": "Jez",
                 },
                 "waterway/ditch": {
                     "name": "Jarek",
                 },
                 "waterway/ditch": {
                     "name": "Jarek",
-                    "terms": "graben"
+                    "terms": "jarek,graben"
                 },
                 "waterway/dock": {
                     "name": "Mokri / Suhi dok"
                 },
                 "waterway/dock": {
                     "name": "Mokri / Suhi dok"
index c9d0839a4c6a2ea12f5e7bd6bda6ef50be1c9399..6b3761b1e7c6d95be19fdadd7f0b2cb94e77790a 100644 (file)
@@ -17,7 +17,7 @@
                 "tail": "Klicka på kartan för att lägga till en punkt."
             },
             "browse": {
                 "tail": "Klicka på kartan för att lägga till en punkt."
             },
             "browse": {
-                "title": "Bläddra",
+                "title": "Navigera",
                 "description": "Panorera och zooma kartan."
             },
             "draw_area": {
                 "description": "Panorera och zooma kartan."
             },
             "draw_area": {
                 }
             },
             "add_member": {
                 }
             },
             "add_member": {
-                "annotation": "Lägg till ett objekt i relationen."
+                "annotation": "Lagt till en medlem till en relationen."
             },
             "delete_member": {
             },
             "delete_member": {
-                "annotation": "Ta bort ett objekt i relationen."
+                "annotation": "Raderat en medlem från en relationen."
             },
             "connect": {
                 "annotation": {
             },
             "connect": {
                 "annotation": {
                 "title": "Bryt av",
                 "description": "Bryt av dessa linjer/områden från varandra.",
                 "key": "D",
                 "title": "Bryt av",
                 "description": "Bryt av dessa linjer/områden från varandra.",
                 "key": "D",
-                "annotation": "Bryt av linjer/områden.",
+                "annotation": "Bröt av linjer/områden.",
                 "not_connected": "Det finns inte tillräckligt med linjer/områden här att koppla ifrån.",
                 "connected_to_hidden": "Detta kan inte brytas av då det är kopplat till ett dolt objekt.",
                 "relation": "Detta kan inte brytas av då den kopplar ihop medlemmar i en relation."
                 "not_connected": "Det finns inte tillräckligt med linjer/områden här att koppla ifrån.",
                 "connected_to_hidden": "Detta kan inte brytas av då det är kopplat till ett dolt objekt.",
                 "relation": "Detta kan inte brytas av då den kopplar ihop medlemmar i en relation."
                 "title": "Sammanfoga",
                 "description": "Sammanfoga dessa objekt.",
                 "key": "C",
                 "title": "Sammanfoga",
                 "description": "Sammanfoga dessa objekt.",
                 "key": "C",
-                "annotation": "Sammanfoga {n} objekt.",
-                "not_eligible": "Dessa objekt kan inte slås samman.",
+                "annotation": "Sammanfogade {n} objekt.",
+                "not_eligible": "Dessa objekt kan inte sammanfogas.",
                 "not_adjacent": "Dessa objekt kan inte sammanfogas då deras ändar inte är sammankopplade.",
                 "not_adjacent": "Dessa objekt kan inte sammanfogas då deras ändar inte är sammankopplade.",
-                "restriction": "Dessa objekt kan inte sammanfogas då minst en av dem tillhör relationen \"{relation}\".",
+                "restriction": "Dessa objekt kan inte sammanfogas då minst en av dem tillhör relationenen \"{relation}\".",
                 "incomplete_relation": "Dessa objekt kan inte sammanfogas då åtminstone ett inte är fullständigt nedladdat.",
                 "conflicting_tags": "Dessa objekt kan inte sammanfogas då några av dess taggar har motstridiga värden."
             },
                 "incomplete_relation": "Dessa objekt kan inte sammanfogas då åtminstone ett inte är fullständigt nedladdat.",
                 "conflicting_tags": "Dessa objekt kan inte sammanfogas då några av dess taggar har motstridiga värden."
             },
                 "annotation": {
                     "long": {
                         "single": "Speglade ett objekt längs dess långa axel.",
                 "annotation": {
                     "long": {
                         "single": "Speglade ett objekt längs dess långa axel.",
-                        "multiple": "Spegla flera objekt längst dess långa axel."
+                        "multiple": "Speglade flera objekt längst dess långa axel."
                     },
                     "short": {
                         "single": "Speglade ett objekt längs dess korta axel.",
                     },
                     "short": {
                         "single": "Speglade ett objekt längs dess korta axel.",
-                        "multiple": "Spegla flera objekt längst dess korta axel."
+                        "multiple": "Speglade flera objekt längst dess korta axel."
                     }
                 },
                 "incomplete_relation": {
                     }
                 },
                 "incomplete_relation": {
                     "multiple": "Rotera flera objekt."
                 },
                 "incomplete_relation": {
                     "multiple": "Rotera flera objekt."
                 },
                 "incomplete_relation": {
-                    "single": "Detta objekt kan inte roteras då det inte har nedladdats ned fullständigt.",
+                    "single": "Detta objekt kan inte roteras då det inte har laddats ned fullständigt.",
                     "multiple": "Dessa objekt kan inte roteras då de inte är fullständigt nedladdade."
                 },
                 "too_large": {
                     "multiple": "Dessa objekt kan inte roteras då de inte är fullständigt nedladdade."
                 },
                 "too_large": {
             "tooltip": "Gör om: {action}",
             "nothing": "Inget att upprepa."
         },
             "tooltip": "Gör om: {action}",
             "nothing": "Inget att upprepa."
         },
-        "tooltip_keyhint": "Genväg:",
+        "tooltip_keyhint": "Kortkommando:",
         "browser_notice": "Redigeraren stöds i Firefox, Chrome, Safari, Opera samt Internet Explorer 11 och högre. Uppgradera din webbläsare eller använd Potlatch 2 för att redigera kartan.",
         "translate": {
             "translate": "Översätt",
         "browser_notice": "Redigeraren stöds i Firefox, Chrome, Safari, Opera samt Internet Explorer 11 och högre. Uppgradera din webbläsare eller använd Potlatch 2 för att redigera kartan.",
         "translate": {
             "translate": "Översätt",
             "multiselect": "Valda objekt",
             "unknown": "Okänd",
             "incomplete": "<inte hämtad>",
             "multiselect": "Valda objekt",
             "unknown": "Okänd",
             "incomplete": "<inte hämtad>",
-            "feature_list": "Sök efter egenskaper",
+            "feature_list": "Sök efter objekt",
             "edit": "Ändra objekt",
             "check": {
                 "yes": "Ja",
             "edit": "Ändra objekt",
             "check": {
                 "yes": "Ja",
                 "keep_remote": "Använd deras",
                 "restore": "Återställ",
                 "delete": "Låt vara raderad",
                 "keep_remote": "Använd deras",
                 "restore": "Återställ",
                 "delete": "Låt vara raderad",
-                "download_changes": "Eller ladda ner dina ändringar.",
+                "download_changes": "Eller ladda ned dina ändringar.",
                 "done": "Alla konflikter lösta!",
                 "help": "En annan användare har ändrat på samma objekt som du har ändrat.\nKlicka på vardera objekt nedan för ytterligare detaljer om respektive konflikt, och välj om dina eller\nden andra användarens ändringar ska behållas.\n"
             }
                 "done": "Alla konflikter lösta!",
                 "help": "En annan användare har ändrat på samma objekt som du har ändrat.\nKlicka på vardera objekt nedan för ytterligare detaljer om respektive konflikt, och välj om dina eller\nden andra användarens ändringar ska behållas.\n"
             }
             "conflict": {
                 "deleted": "Detta objekt har raderats av {user}.",
                 "location": "Detta objekt har flyttas av både dig och {user}.",
             "conflict": {
                 "deleted": "Detta objekt har raderats av {user}.",
                 "location": "Detta objekt har flyttas av både dig och {user}.",
-                "nodelist": "Nod har ändrats av både dig och {user}.",
-                "memberlist": "Relationsmedlem har ändrats av både dig och {user}.",
+                "nodelist": "Noder har ändrats av både dig och {user}.",
+                "memberlist": "Relationsmedlemar har ändrats av både dig och {user}.",
                 "tags": "Du ändrade taggen <b>{tag}</b> till \"{local}\" och {user} ändrade den till \"{remote}\"."
             }
         },
                 "tags": "Du ändrade taggen <b>{tag}</b> till \"{local}\" och {user} ändrade den till \"{remote}\"."
             }
         },
             "used_with": "används med {type}"
         },
         "validations": {
             "used_with": "används med {type}"
         },
         "validations": {
-            "disconnected_highway": "Bryt av väg",
+            "disconnected_highway": "Ej kopplad väg",
             "disconnected_highway_tooltip": "Vägar bör vara kopplade till andra vägar eller entréer i byggnader.",
             "old_multipolygon": "Multipolygontaggar på yttre väg",
             "old_multipolygon_tooltip": "Denna typ av multipolygon är föråldrad. Istället för att ha taggar på den yttre vägen, flytta dem till dess överliggande multipolygonen.",
             "disconnected_highway_tooltip": "Vägar bör vara kopplade till andra vägar eller entréer i byggnader.",
             "old_multipolygon": "Multipolygontaggar på yttre väg",
             "old_multipolygon_tooltip": "Denna typ av multipolygon är föråldrad. Istället för att ha taggar på den yttre vägen, flytta dem till dess överliggande multipolygonen.",
             "untagged_relation_tooltip": "Välj en typ som beskriver vad denna relation är.",
             "many_deletions": "Du håller på att radera {n} objekt. Är du helt säker att du vill göra detta? Detta tar bort dem från kartan som alla andra ser på openstreetmap.org.",
             "tag_suggests_area": "Taggen {tag} indikerar att detta borde vara ett område istället för en linje",
             "untagged_relation_tooltip": "Välj en typ som beskriver vad denna relation är.",
             "many_deletions": "Du håller på att radera {n} objekt. Är du helt säker att du vill göra detta? Detta tar bort dem från kartan som alla andra ser på openstreetmap.org.",
             "tag_suggests_area": "Taggen {tag} indikerar att detta borde vara ett område istället för en linje",
-            "deprecated_tags": "Borttagna taggar: {tags}"
+            "deprecated_tags": "Föråldrade taggar: {tags}"
         },
         "zoom": {
             "in": "Zooma in",
             "out": "Zooma ut"
         },
         },
         "zoom": {
             "in": "Zooma in",
             "out": "Zooma ut"
         },
-        "cannot_zoom": "Går ej att zooma ut ytterligare med nuvarande sätt.",
+        "cannot_zoom": "Går ej att zooma ut ytterligare i nuvarande läge. ",
         "full_screen": "Växla fullskärm",
         "gpx": {
             "local_layer": "Lokal fil",
         "full_screen": "Växla fullskärm",
         "gpx": {
             "local_layer": "Lokal fil",
         "help": {
             "title": "Hjälp",
             "help": "# Hjälp\n\nDetta är en redigerare för [OpenStreetMap](http://www.openstreetmap.org/),\nen gratis och redigerbar karta över världen. Du kan använda den för att lägga till och ändra\ndata i ditt område, allt för att göra en världsomspännande karta baserad på\nöppen källkod och öppen data bättre för alla.\n\nRedigeringar du gör på kartan kommer att visas för alla som använder\nOpenStreetMap. För att göra en redigering måste du\n[log in](https://www.openstreetmap.org/login).\n\n[iD editor](http://ideditor.com/) är ett gemensamt projekt med [källkod\ntillgänglig på GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Hjälp",
             "help": "# Hjälp\n\nDetta är en redigerare för [OpenStreetMap](http://www.openstreetmap.org/),\nen gratis och redigerbar karta över världen. Du kan använda den för att lägga till och ändra\ndata i ditt område, allt för att göra en världsomspännande karta baserad på\nöppen källkod och öppen data bättre för alla.\n\nRedigeringar du gör på kartan kommer att visas för alla som använder\nOpenStreetMap. För att göra en redigering måste du\n[log in](https://www.openstreetmap.org/login).\n\n[iD editor](http://ideditor.com/) är ett gemensamt projekt med [källkod\ntillgänglig på GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Redigera & spara\n\nDenna redigerare är designad att främst fungera online, och du använder den via en webbsida just nu.\n\n### Välj objekt\n\nFör att välja ett kartobjekt, t.ex. en väg eller en punkt, klicka på den på kartan. Detta kommer att markera det valda objektet, öppna en panel med detaljer om det, och visa en meny med saker du kan göra med det.\n\nFör att välja flera objekt, håll ner Skift-tangenten. Klicka sedan på objekten du vill välja eller dra på kartan för att rita en rektangel. Detta kommer att rita en ruta och markera punkterna inuti den.\n\n### Spara redigeringar\n\nNär du gör ändringar som att ändra på en väg, byggnad eller plats är detta sparat lokalt fram tills att du spara det på servern. Oroa dig inte om du gör ett misstag, du kan alltid ångra en ändring genom att klicka på Ånga-knappen och göra om din förändring genom att klicka på Gör om-knappen.\n\nKlicka på Spara för att slutföra en grupp att förändringar, t.ex. om du fullfört ett område i en stad och vill börja ändra i ett annat område. Du får möjlighet att granska vad du gjort och redigeraren ger dig hjälpsamma förslag och varningar om någon ändring inte verka korrekt.\n\nOm allt ser bra ut kan du ange en kort kommentar som förklarar vad du gjort och sedan klicka på Spara igen för att skicka ändringarna till [OpenStreetMap.org](http://www.openstreetmap.org/) där de blir synliga för alla andra användare och tillgängliga för andra att jobba vidare med.\n\nOm du inte kan slutföra din ändring på en gång kan du lämna redigeringsfönstret öppet och komma tillbaka (i samma webbläsare på samma dator) och redigeringsprogrammet kommer att ge dig möjlighet att återuppta ditt arbete.\n\n### Använda redigeraren\n\nEn lista med tillgängliga kortkommandon hittas [här](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n",
+            "editing_saving": "# Redigera & spara\n\nDenna redigerare är designad att främst fungera online, och du använder den via en webbsida just nu.\n\n### Markera objekt\n\nFör att välja ett kartobjekt, t.ex. en väg eller en punkt, klicka på den på kartan. Detta kommer att markera det valda objektet, öppna en panel med detaljer om det, och visa en meny med saker du kan göra med det.\n\nFör att markera flera objekt, håll ned Skift-tangenten. Klicka sedan på objekten du vill markera eller dra på kartan för att rita en rektangel. Detta kommer att rita en ruta och markera punkterna inuti den.\n\n### Spara redigeringar\n\nNär du gör ändringar som att ändra på en väg, byggnad eller plats är detta lagrat lokalt fram tills att du spara det på servern. Oroa dig inte om du gör ett misstag, du kan alltid ångra en ändring genom att klicka på Ånga-knappen och göra om din förändring genom att klicka på Gör om-knappen.\n\nKlicka på Spara för att slutföra en samling förändringar, t.ex. om du fullfört ett område i en stad och vill börja ändra i ett annat område. Du får möjlighet att granska vad du gjort och redigeraren ger dig hjälpsamma förslag och varningar om någon ändring inte verka korrekt.\n\nOm allt ser bra ut kan du ange en kort kommentar som förklarar vad du gjort och sedan klicka på Spara igen för att skicka ändringarna till [OpenStreetMap.org](http://www.openstreetmap.org/) där de blir synliga för alla andra användare och tillgängliga för andra att jobba vidare med.\n\nOm du inte kan slutföra din ändring på en gång kan du lämna redigeringsfönstret öppet och komma tillbaka (i samma webbläsare på samma dator) och redigeringsprogrammet kommer att ge dig möjlighet att återuppta ditt arbete.\n\n### Använda redigeraren\n\nDu kan se en lista med kortkommandon genom att trycka på tangenten `?`\n",
             "roads": "# Vägar\n\nDu kan skapa, fixa och ta bort vägar med denna redigerare. Vägar kan vara alla typer av: stigar, bilvägar, spår, cykelvägar m.m - alla välanvända segment ska mappas.\n\n### Markering\n\nKlicka på en väg för att välja den. En markering blir då synlig tillsammans med en liten verktygsmeny på kartan och ett sidofält visar mer information om vägen.\n\n### Modifiering\n\nOfta ser du vägar som inte är justerade till bakgrundsbilden eller till ett GPS-spår. Du kan justera dessa vägar så att de är på korrekt plats.\n\nKlicka först på vägen du vill ändra. Detta kommer att markera den och visa kontrollpunkt längst den som du kan dra i för att justera den. Om du vill lägga till en ny kontrollpunkt för högre detaljrikedom, dubbelklicka på en del av vägen utan en punkt så kommer en kontrollpunkt läggas till.\n\nOm vägen är ansluten till en annan väg, men är inte det på kartan, kan du dra en av dess kontrollpunkt till den andra vägen för att koppla dem tillsammans. Att vägarna är kopplade till varandra är viktigt för kartan och avgörande för att kunna ge korrekta körinstruktioner.\n\nDu kan också klicka på verktyget 'Flytta' eller trycka på tangenten 'M' på tangentbordet för att flytta en hel väg på en gång, och sedan klicka igen för att spara flytten.\n\n### Radering\n\nOm hela vägen är helt fel - du kan se att den inte existerar på satellitbilderna och har helst bekräftat i verkligheten att den inte finns - kan du radera den, vilket tar bort den från kartan. Var försiktigt när du raderar objekt - precis som vid all redigering kan alla se resultatet och satellitbilderna är oftast gamla, så vägen kan helt enkelt vara nybyggd.\n\nDu kan ta radera en väg genom att klicka på den för att markera den och sedan klicka på ikonen soptunna eller klicka på knappen 'Delete' på tangentbordet.\n\n### Skapa\n\nHittat någonstans att det borde finnas en väg där de inte finns en? Klicka på ikonen 'Linje'  högst upp till vänster i redigeringsfönstret eller klicka på knappen '2' på tangentbordet för att börja rita en linje.\n\nKlicka på början av vägen på kartan för att påbörja ritningen. Om vägen viker av från en existerande väg, starta genom att klicka där de ansluter till varandra.\n\nKlicka sedan på punkter längst vägen så att den följer vägens sträckning enligt satellitbilder eller GPS-spår. Om vägen du ritar korsar en annan väg, anslut dem tillsammans genom att klicka där de korsar. När du är klar med att rita in vägen, dubbelklicka eller tryck 'Enter' på tangentbordet.\n",
             "gps": "# GPS\n\nInsamlade GPS-spår är en värdefull källan för data till OpenStreetMap. Denna redigeraren\nstöder lokala spår - .gpx-filer på din lokala dator. Du kan samla\nin denna typ av GPS-spår med ett antal olika appar till din smartphone eller en GPS-enhet.\n\nFör information om du du gör en GPS-uppmätning, läs\n[Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).\n\nFör att använda ett GPX-spår för att kartlägga, dra och släpp GPX-filen på kartredigeraren.\nOm den accepteras kommer det att läggas till på kartan som en ljuslila\nlinje. Klicka på menyn Kartdata till höger för att aktivera,\navaktivera eller zooma in till detta nya GPX-skapade lager.\n\nGPX-spåret laddas inte direkt upp till OpenStreetMap - bästa sätet att använda\ndet är att rita på kartan och använda det som en guide för att lägga till ny information,\nmen också för att [ladda upp det till OpenStreetMap] (http://www.openstreetmap.org/trace/create)\nså att andra kan använda det.\n",
             "roads": "# Vägar\n\nDu kan skapa, fixa och ta bort vägar med denna redigerare. Vägar kan vara alla typer av: stigar, bilvägar, spår, cykelvägar m.m - alla välanvända segment ska mappas.\n\n### Markering\n\nKlicka på en väg för att välja den. En markering blir då synlig tillsammans med en liten verktygsmeny på kartan och ett sidofält visar mer information om vägen.\n\n### Modifiering\n\nOfta ser du vägar som inte är justerade till bakgrundsbilden eller till ett GPS-spår. Du kan justera dessa vägar så att de är på korrekt plats.\n\nKlicka först på vägen du vill ändra. Detta kommer att markera den och visa kontrollpunkt längst den som du kan dra i för att justera den. Om du vill lägga till en ny kontrollpunkt för högre detaljrikedom, dubbelklicka på en del av vägen utan en punkt så kommer en kontrollpunkt läggas till.\n\nOm vägen är ansluten till en annan väg, men är inte det på kartan, kan du dra en av dess kontrollpunkt till den andra vägen för att koppla dem tillsammans. Att vägarna är kopplade till varandra är viktigt för kartan och avgörande för att kunna ge korrekta körinstruktioner.\n\nDu kan också klicka på verktyget 'Flytta' eller trycka på tangenten 'M' på tangentbordet för att flytta en hel väg på en gång, och sedan klicka igen för att spara flytten.\n\n### Radering\n\nOm hela vägen är helt fel - du kan se att den inte existerar på satellitbilderna och har helst bekräftat i verkligheten att den inte finns - kan du radera den, vilket tar bort den från kartan. Var försiktigt när du raderar objekt - precis som vid all redigering kan alla se resultatet och satellitbilderna är oftast gamla, så vägen kan helt enkelt vara nybyggd.\n\nDu kan ta radera en väg genom att klicka på den för att markera den och sedan klicka på ikonen soptunna eller klicka på knappen 'Delete' på tangentbordet.\n\n### Skapa\n\nHittat någonstans att det borde finnas en väg där de inte finns en? Klicka på ikonen 'Linje'  högst upp till vänster i redigeringsfönstret eller klicka på knappen '2' på tangentbordet för att börja rita en linje.\n\nKlicka på början av vägen på kartan för att påbörja ritningen. Om vägen viker av från en existerande väg, starta genom att klicka där de ansluter till varandra.\n\nKlicka sedan på punkter längst vägen så att den följer vägens sträckning enligt satellitbilder eller GPS-spår. Om vägen du ritar korsar en annan väg, anslut dem tillsammans genom att klicka där de korsar. När du är klar med att rita in vägen, dubbelklicka eller tryck 'Enter' på tangentbordet.\n",
             "gps": "# GPS\n\nInsamlade GPS-spår är en värdefull källan för data till OpenStreetMap. Denna redigeraren\nstöder lokala spår - .gpx-filer på din lokala dator. Du kan samla\nin denna typ av GPS-spår med ett antal olika appar till din smartphone eller en GPS-enhet.\n\nFör information om du du gör en GPS-uppmätning, läs\n[Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/).\n\nFör att använda ett GPX-spår för att kartlägga, dra och släpp GPX-filen på kartredigeraren.\nOm den accepteras kommer det att läggas till på kartan som en ljuslila\nlinje. Klicka på menyn Kartdata till höger för att aktivera,\navaktivera eller zooma in till detta nya GPX-skapade lager.\n\nGPX-spåret laddas inte direkt upp till OpenStreetMap - bästa sätet att använda\ndet är att rita på kartan och använda det som en guide för att lägga till ny information,\nmen också för att [ladda upp det till OpenStreetMap] (http://www.openstreetmap.org/trace/create)\nså att andra kan använda det.\n",
-            "imagery": "# Flygfoton\n\nFlygfoton är en viktig källa vid kartläggning. En kombination av bilder från flygplan, satelliter och andra fria källor finns tillgängliga i redigeraren i menyn 'Bakgrundsinställningar' till höger.\n\nNormalt visas ett satellitlager från  [Bing Maps](http://www.bing.com/maps/) i redigeraren, men när du förflytta dig runt och zooma till nya geografiska områden kommer nya källor bli tillgängliga. Vissa länder, som t.ex. USA, Frankrike och Danmark har bilder av väldigt hög kvalité tillgängliga för vissa områden.\n\nFlygfotona är ibland förskjutna till kartan på grund av misstag från leverantören av flygfoton. Om du ser att många vägar är förskjutna i förhållande till flygfotot, flytta dem inte direkt för att matcha bakgrunden. Istället kan du justera flygfotot så att det matchar med existerande data genom att klicka 'Justera bildplacering' längst ner i menyn för Bakgrundsinställningar.\n",
+            "imagery": "# Flygfoton\n\nFlygfoton är en viktig källa vid kartläggning. En kombination av bilder från flygplan, satelliter och andra fria källor finns tillgängliga i redigeraren i menyn 'Bakgrundsinställningar' till höger.\n\nNormalt visas ett satellitlager från  [Bing Maps](http://www.bing.com/maps/) i redigeraren, men när du förflytta dig runt och zooma till nya geografiska områden kommer nya källor bli tillgängliga. Vissa länder, som t.ex. USA, Frankrike och Danmark har bilder av väldigt hög kvalité tillgängliga för vissa områden.\n\nFlygfotona är ibland förskjutna till kartan på grund av misstag från leverantören av flygfoton. Om du ser att många vägar är förskjutna i förhållande till flygfotot, flytta dem inte direkt för att matcha bakgrunden. Istället kan du justera flygfotot så att det matchar med existerande data genom att klicka 'Justera bildplacering' längst ned i menyn för Bakgrundsinställningar.\n",
             "addresses": "# Adresser\n\nAdresser är bland den mest användbara informationen på kartan.\n\nÄven om adresser normalt oftast är relaterade till segment av gatan är de i OpenStreetMap hanterade som attribut på byggnader och platser längst gatan.\n\nDu kan lägga till adressinformation både på platser kartlagda som byggnadskonturer och på platser kartlagda som enskilda punkter.\nDen bästa källan för adressinformation är från egen kunskap eller genom att besöka platsen - precis som för allt annat, att kopiera från kommersiella källor som Google Maps är strikt förbjudet.\n",
             "addresses": "# Adresser\n\nAdresser är bland den mest användbara informationen på kartan.\n\nÄven om adresser normalt oftast är relaterade till segment av gatan är de i OpenStreetMap hanterade som attribut på byggnader och platser längst gatan.\n\nDu kan lägga till adressinformation både på platser kartlagda som byggnadskonturer och på platser kartlagda som enskilda punkter.\nDen bästa källan för adressinformation är från egen kunskap eller genom att besöka platsen - precis som för allt annat, att kopiera från kommersiella källor som Google Maps är strikt förbjudet.\n",
-            "inspector": "# Använda objektredigeraren\n\nObjektredigeraren är området till vänster på sidan som låter dig\nändra detaljerna för valt objekt.\n\n### Välj objekttyp\n\nEfter att du lagt till en punkt, linje eller område kan du välja vad för typ av objekt det\när, t.ex. om det är en huvudväg eller bostadsgata, shoppingcenter eller café.\nobjektredigeraren visar knappar för vanliga objekttyper, och du kan\nsöka efter andra typer i sökfönstret.\n\nKlicka på 'i' i nedre högra hörnet för en objekttyp för\natt läsa mer om det. Klicka på en knapp för att välja typ.\n\n### Använda formulär och ändra taggar\n\nEfter att du valt en objekttyp, eller om du väljer ett objekt som redan\nhar en typ associerad, kommer objektredigeraren visa fält med detaljer om objekttypen så som namn och adress.\n\nUnder fälten du ser kan du klicka på menyn 'Lägg till fält\" för att lägga till\nandra detaljer, som t.ex. Wikipedia-länk, handikappanpassning m.m.\n\nLängst ner i objektredigeraren, klicka på 'Alla taggar' för att lägga till ytterligare godtyckliga\ntaggar till objektet. [Taginfo](http://taginfo.openstreetmap.org/) är en\nbra resurs för att lära dig mer om populära tagg-kombinationer.\n\nÄndringar du gör i objektredigeraren visas automatiskt på kartan.\nDu kan ångra dem när du vill genom att klicka på 'Ånga'-knappen.\n",
+            "inspector": "# Använda objektredigeraren\n\nObjektredigeraren är området till vänster på sidan som låter dig\nändra detaljerna för valt objekt.\n\n### Välj objekttyp\n\nEfter att du lagt till en punkt, linje eller område kan du välja vad för typ av objekt det\när, t.ex. om det är en huvudväg eller bostadsgata, shoppingcenter eller café.\nobjektredigeraren visar knappar för vanliga objekttyper, och du kan\nsöka efter andra typer i sökfönstret.\n\nKlicka på 'i' i nedre högra hörnet för en objekttyp för\natt läsa mer om det. Klicka på en knapp för att välja typ.\n\n### Använda formulär och ändra taggar\n\nEfter att du valt en objekttyp, eller om du väljer ett objekt som redan\nhar en typ associerad, kommer objektredigeraren visa fält med detaljer om objekttypen så som namn och adress.\n\nUnder fälten du ser kan du klicka på menyn 'Lägg till fält\" för att lägga till\nandra detaljer, som t.ex. Wikipedia-länk, handikappanpassning m.m.\n\nLängst ned i objektredigeraren, klicka på 'Alla taggar' för att lägga till ytterligare godtyckliga\ntaggar till objektet. [Taginfo](http://taginfo.openstreetmap.org/) är en\nbra resurs för att lära dig mer om populära tagg-kombinationer.\n\nÄndringar du gör i objektredigeraren visas automatiskt på kartan.\nDu kan ångra dem när du vill genom att klicka på 'Ånga'-knappen.\n",
             "buildings": "# Byggnader\n\nOpenStreetMap är världens största databas över byggnader. Du kan skapa\noch förbättra denna databas.\n\n### Markering\n\nDu kan markera en byggnad genom att klicka på dess kant. Detta kommer att markera\nbyggnaden och öppna en litet verktygsmeny och ett sidofält som visar mer information\nom byggnaden.\n\n### Modifiering\n\nIbland är byggnader felaktigt placerade eller har felaktiga taggar.\n\nFör att flytta en hel byggnad, markera den och klicka sedan på \"Flytta\"-verktyget. flytta\nmus för att flytta byggnaden, och klicka när den är korrekt placerad.\n\nFör att fixa den specifika formen av en byggnad, klicka och dra noderna som bildar\nramen till bättre platser.\n\n### Skapa\n\nEn av de viktigaste frågorna att tänka på vid tilläggning av byggnader till kartan är att\nOpenStreetMap registrerar byggnader både som form och punkt. Tumregeln\när att _kartlägga en byggnad som en form när möjligt_ och kartlägg företag, bostäder,\nfaciliteter, och andra saker finns i byggnaderna som punkter placerade\ninuti byggnadernas ram.\n\nBörja rita en byggnad som en ram genom att klicka på knappen \"område\" högst upp till vänster\ngränssnittet, och avsluta det antingen genom att trycka på \"Enter\" på tangentbordet\neller genom att klicka på den första ritade noden för att stänga formen.\n\n### Radering\n\nOm en byggnad är helt fel – du kan se att den inte finns med i någon satellitbild\noch helst har bekräftat lokalt att det inte finns – kan du ta bort\nden, vilket tar bort det från kartan. Var försiktig när du tar bort objekt –\nlikt alla ändringar kommer resultatet ses av alla och satellitbilder\när ofta föråldrad, så byggnaden kan helt enkelt vara nybyggd.\n\nDu kan ta bort en byggnad genom att klicka på den för att markera den och sedan klicka på\nikonen papperskorg eller trycka på \"Delete\"-tangenten.\n",
             "buildings": "# Byggnader\n\nOpenStreetMap är världens största databas över byggnader. Du kan skapa\noch förbättra denna databas.\n\n### Markering\n\nDu kan markera en byggnad genom att klicka på dess kant. Detta kommer att markera\nbyggnaden och öppna en litet verktygsmeny och ett sidofält som visar mer information\nom byggnaden.\n\n### Modifiering\n\nIbland är byggnader felaktigt placerade eller har felaktiga taggar.\n\nFör att flytta en hel byggnad, markera den och klicka sedan på \"Flytta\"-verktyget. flytta\nmus för att flytta byggnaden, och klicka när den är korrekt placerad.\n\nFör att fixa den specifika formen av en byggnad, klicka och dra noderna som bildar\nramen till bättre platser.\n\n### Skapa\n\nEn av de viktigaste frågorna att tänka på vid tilläggning av byggnader till kartan är att\nOpenStreetMap registrerar byggnader både som form och punkt. Tumregeln\när att _kartlägga en byggnad som en form när möjligt_ och kartlägg företag, bostäder,\nfaciliteter, och andra saker finns i byggnaderna som punkter placerade\ninuti byggnadernas ram.\n\nBörja rita en byggnad som en ram genom att klicka på knappen \"område\" högst upp till vänster\ngränssnittet, och avsluta det antingen genom att trycka på \"Enter\" på tangentbordet\neller genom att klicka på den första ritade noden för att stänga formen.\n\n### Radering\n\nOm en byggnad är helt fel – du kan se att den inte finns med i någon satellitbild\noch helst har bekräftat lokalt att det inte finns – kan du ta bort\nden, vilket tar bort det från kartan. Var försiktig när du tar bort objekt –\nlikt alla ändringar kommer resultatet ses av alla och satellitbilder\när ofta föråldrad, så byggnaden kan helt enkelt vara nybyggd.\n\nDu kan ta bort en byggnad genom att klicka på den för att markera den och sedan klicka på\nikonen papperskorg eller trycka på \"Delete\"-tangenten.\n",
-            "relations": "# Relationer\n\nEn relation är en speciell typ av egenskap i OpenStreetMap som gruppera ihop objekt. Två vanliga relationstyper är t.ex. *ruttrelation* som gruppera ihop sektioner av vägar som tillhör en specifik riksväg eller motorväg, och *multipolygoner* som gruppera ihop linjer som definiera ett komplext område (som t.ex. har flera delar eller hål i sig)\n\nObjekten i en relation kallas\n*medlemmar*. I sidopanelen kan du se vilka relationer ett objekt är medlem i, och klicka på en relation där för att välja den. När relationen är vald kan du se alla medlemmar listade i sidopanelen och markerade på kartan.\n\nFör det mesta kommer iD ta hand om relationerna automatiskt när du redigerar. Det viktigaste du måste veta om är att om du tar bort en sektion av en väg för att rita om den mer exakt, måste du se till att den nya sektionen är medlem i samma relation som originalet.\n\n## Redigera relationer\n\nOm du vill redigera relationer är här grunderna.\n\nFör att lägga till ett objekt till en relation, markera objektet och klicka på \"+\"-knappen i sektionen \"Alla relationer\" i sidopanelen, och välj sedan eller skriv namnet på relationen.\n\nFör att skapa en ny relation, markera första objektet som ska vara medlem i relationen, Klicka på \"+\"-knappen i sektionen \"Alla relationer\" och välj \"Ny relation...\"\n\nFör att ta bort ett objekt från en relation, markera objektet och klicka på soptunnan bredvid relationen du vill ta bort den från.\n\nDu kan skapa multipolygoner med hål i sig med verktyget \"sammanfoga\". Rita två områden (inre och yttre), håll ner shift-tangenten och klicka på var och en av dem för att markera dem båda, klicka sedan på knappen \"Sammanfoga\" (+).\n"
+            "relations": "# Relationer\n\nEn relation är en speciell typ av egenskap i OpenStreetMap som gruppera ihop objekt. Två vanliga relationstyper är t.ex. *ruttrelation* som gruppera ihop sektioner av vägar som tillhör en specifik riksväg eller motorväg, och *multipolygoner* som gruppera ihop linjer som definiera ett komplext område (som t.ex. har flera delar eller hål i sig)\n\nObjekten i en relation kallas\n*medlemmar*. I sidopanelen kan du se vilka relationer ett objekt är medlem i, och klicka på en relation där för att välja den. När relationen är vald kan du se alla medlemmar listade i sidopanelen och markerade på kartan.\n\nFör det mesta kommer iD ta hand om relationerna automatiskt när du redigerar. Det viktigaste du måste veta om är att om du tar bort en sektion av en väg för att rita om den mer exakt, måste du se till att den nya sektionen är medlem i samma relation som originalet.\n\n## Redigera relationer\n\nOm du vill redigera relationer är här grunderna.\n\nFör att lägga till ett objekt till en relation, markera objektet och klicka på \"+\"-knappen i sektionen \"Alla relationer\" i sidopanelen, och välj sedan eller skriv namnet på relationen.\n\nFör att skapa en ny relation, markera första objektet som ska vara medlem i relationen, Klicka på \"+\"-knappen i sektionen \"Alla relationer\" och välj \"Ny relation...\"\n\nFör att ta bort ett objekt från en relation, markera objektet och klicka på soptunnan bredvid relationen du vill ta bort den från.\n\nDu kan skapa multipolygoner med hål i sig med verktyget \"sammanfoga\". Rita två områden (inre och yttre), håll ned shift-tangenten och klicka på var och en av dem för att markera dem båda, klicka sedan på knappen \"Sammanfoga\" (+).\n"
         },
         "intro": {
             "done": "klar",
         },
         "intro": {
             "done": "klar",
                 "start": "Börja kartera!"
             }
         },
                 "start": "Börja kartera!"
             }
         },
+        "shortcuts": {
+            "title": "Kortkommandon",
+            "tooltip": "Visa vy med kortkommandon.",
+            "key": {
+                "alt": "Alt",
+                "backspace": "Backsteg",
+                "cmd": "Cmd",
+                "ctrl": "Ctrl",
+                "delete": "Delete",
+                "del": "Del",
+                "end": "End",
+                "enter": "Enter",
+                "esc": "Esc",
+                "home": "Home",
+                "option": "Option",
+                "pause": "Pause",
+                "pgdn": "PgDn",
+                "pgup": "PgUp",
+                "return": "Return",
+                "shift": "Shift",
+                "space": "Mellanslag"
+            },
+            "gesture": {
+                "drag": "dra"
+            },
+            "or": "-eller-",
+            "browsing": {
+                "title": "Navigera",
+                "navigation": {
+                    "title": "Navigation",
+                    "pan": "Panorera kartan",
+                    "pan_more": "Panorera kartan en skärm åt gången",
+                    "zoom": "Zooma in / Zooma ut",
+                    "zoom_more": "Zooma in / Zooma ut mycket"
+                },
+                "help": {
+                    "title": "Hjälp",
+                    "help": "Visa hjälp/dokumentation",
+                    "keyboard": "Visa kortkommandon"
+                },
+                "display_options": {
+                    "title": "Visa inställningar",
+                    "background": "Visa inställningar för bakgrund",
+                    "background_switch": "Växla tillbaka till senaste bakgrund",
+                    "map_data": "Visa alternativ för kartdata",
+                    "fullscreen": "Gå till fullskärmsläge",
+                    "wireframe": "Växla trådramsläge",
+                    "minimap": "Visa/dölj minikarta"
+                },
+                "selecting": {
+                    "title": "Markera objekt",
+                    "select_one": "Markera ett enskilt objekt",
+                    "select_multi": "Markera flera objekt",
+                    "lasso": "Rita en markeringslasso runt objekt"
+                },
+                "with_selected": {
+                    "title": "Med objekt markerat",
+                    "infobox": "Visa/dölj info- och mätruta",
+                    "edit_menu": "Visa/dölj redigerameny"
+                },
+                "vertex_selected": {
+                    "title": "Med nod markerad",
+                    "previous": "Hoppa till föregående nod",
+                    "next": "Hoppa till nästa nod",
+                    "first": "Hoppa till första noden",
+                    "last": "Hoppa till sista noden",
+                    "change_parent": "Växla vald väg"
+                }
+            },
+            "editing": {
+                "title": "Redigera",
+                "drawing": {
+                    "title": "Rita",
+                    "add_point": "'Lägg till punkt'-läge",
+                    "add_line": "'Lägg till linje'-läge",
+                    "add_area": "'Lägg till område'-läge",
+                    "place_point": "Placera en punkt",
+                    "disable_snap": "Hindra att punkter kopplas samman",
+                    "stop_line": "Slutför linje eller område"
+                },
+                "operations": {
+                    "title": "Operationer",
+                    "continue_line": "Fortsätt en linje från markerad nod",
+                    "merge": "Kombinera (sammanfoga) markerade objekt",
+                    "disconnect": "Bryt av objekt vid markerad nod",
+                    "split": "Dela en linje i två vid markerad nod",
+                    "reverse": "Byt riktning på en linje",
+                    "move": "Flytta markerade objekt",
+                    "rotate": "Rotera markerade objekt",
+                    "orthogonalize": "Räta ut linje / Räta upp hörnen på område",
+                    "circularize": "Gör en stängd linje eller ett område cirkulär. ",
+                    "reflect_long": "Spegla objekt längst dess långa axel",
+                    "reflect_short": "Spegla objekt längst dess korta axel",
+                    "delete": "Radera markerade objekt"
+                },
+                "commands": {
+                    "title": "Kommandon",
+                    "copy": "Kopiera markerade objekt",
+                    "paste": "Klistra in kopierade objekt",
+                    "undo": "Ångra senaste ändring",
+                    "redo": "Gör om senaste ändring",
+                    "save": "Spara ändringar"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                 "maxstay": {
                     "label": "Maxtid"
                 },
                 "maxstay": {
                     "label": "Maxtid"
                 },
+                "maxweight": {
+                    "label": "Maxvikt"
+                },
                 "mtb/scale": {
                     "label": "Mountainbike-svårighet",
                     "options": {
                 "mtb/scale": {
                     "label": "Mountainbike-svårighet",
                     "options": {
                     "name": "Elektriker",
                     "terms": "Elektriker, elmontör, elreparatör, montör, el, elmontör, starkströmsmontör, systembyggare, kabeldragning, elkraft"
                 },
                     "name": "Elektriker",
                     "terms": "Elektriker, elmontör, elreparatör, montör, el, elmontör, starkströmsmontör, systembyggare, kabeldragning, elkraft"
                 },
+                "craft/electronics_repair": {
+                    "name": "Elektronikreparatör",
+                    "terms": "elektronik, elektronikreparation, reparation, reparatör, tv-service, tv-reparatör, datorservice, datorreparation, skärmbyte, telefonreparatör, vitvaror, tvättmaskinsreparatör"
+                },
                 "craft/gardener": {
                     "name": "Trädgårdsmästare",
                     "terms": "Trädgårdsmästare, trädgård, handelsträdgård, landskapsarkitekt"
                 "craft/gardener": {
                     "name": "Trädgårdsmästare",
                     "terms": "Trädgårdsmästare, trädgård, handelsträdgård, landskapsarkitekt"
                     "name": "Cykelväg",
                     "terms": "cykelväg, cykelled, gc-väg, gång- och cykelväg, cykel"
                 },
                     "name": "Cykelväg",
                     "terms": "cykelväg, cykelled, gc-väg, gång- och cykelväg, cykel"
                 },
+                "highway/elevator": {
+                    "name": "Hiss",
+                    "terms": "Hiss"
+                },
                 "highway/footway": {
                     "name": "Gångväg",
                     "terms": "gångväg, gc-väg, gång- och cykelväg, stig, vandring, vandra, löparbana, motionsspår, promenad"
                 "highway/footway": {
                     "name": "Gångväg",
                     "terms": "gångväg, gc-väg, gång- och cykelväg, stig, vandring, vandra, löparbana, motionsspår, promenad"
                     "terms": "Anslutning, påfart, avfart, länsväg, huvudgata, tertiär väg"
                 },
                 "highway/track": {
                     "terms": "Anslutning, påfart, avfart, länsväg, huvudgata, tertiär väg"
                 },
                 "highway/track": {
-                    "name": "Ej underhållen bruksväg",
-                    "terms": "Bruksväg, traktorväg, skogsväg, åkerväg, virkesväg, timmerväg, traktor, skogsmaskin, åker, timmer, jordbruk, brandväg, brandgata"
+                    "name": "Jordbruks-/skogsväg",
+                    "terms": "Bruksväg, traktorväg, skogsväg, åkerväg, virkesväg, timmerväg, traktor, skogsmaskin, åker, timmer, jordbruk, brandväg, brandgata, jordbruksväg"
                 },
                 "highway/traffic_mirror": {
                     "name": "Trafikspegel",
                 },
                 "highway/traffic_mirror": {
                     "name": "Trafikspegel",
                     "name": "Antikaffär",
                     "terms": "Antikaffär, antikshop, antikt, antikvitetsaffär, antikvariat"
                 },
                     "name": "Antikaffär",
                     "terms": "Antikaffär, antikshop, antikt, antikvitetsaffär, antikvariat"
                 },
+                "shop/appliance": {
+                    "name": "Vitvaror",
+                    "terms": "vitvaror, vitvaruaffär, vitvarukedja, vitvara, hushållsmaskiner, hushållsmaskin, tvättmaskin, diskmaskin, frys, kylskåp, spis, ugn, mikrovågsugn, köksfläkt"
+                },
                 "shop/art": {
                     "name": "Konstaffär",
                     "terms": "Konstaffär, konst, konsthandlare, konstgalleri, galleri, konstverk, tavlor,\nstatyer, kulturer, konstutställning"
                 "shop/art": {
                     "name": "Konstaffär",
                     "terms": "Konstaffär, konst, konsthandlare, konstgalleri, galleri, konstverk, tavlor,\nstatyer, kulturer, konstutställning"
index 3d42938fda79fa58162194b5bd43ff652934bdab..124a504b1c380735816594a7ef5299d2872449bd 100644 (file)
                     "relation": "Bir küme silindi.",
                     "multiple": "{n} nesne silindi."
                 },
                     "relation": "Bir küme silindi.",
                     "multiple": "{n} nesne silindi."
                 },
+                "too_large": {
+                    "single": "Bu nesne silinemez, çünkü yeteri kadarı görünür halde değil.",
+                    "multiple": "Bu nesneler silinemez, çünkü yeteri kadarı görünür halde değil."
+                },
                 "incomplete_relation": {
                     "single": "Bu nesne silinemez, çünkü henüz tamamen indirilmedi.",
                     "multiple": "Bu nesneler silinemez, çünkü henüz tamamen indirilmediler."
                 "incomplete_relation": {
                     "single": "Bu nesne silinemez, çünkü henüz tamamen indirilmedi.",
                     "multiple": "Bu nesneler silinemez, çünkü henüz tamamen indirilmediler."
                 "key": "C",
                 "annotation": "{n} nesne birleştirildi.",
                 "not_eligible": "Bu nesneler birleştirilemez.",
                 "key": "C",
                 "annotation": "{n} nesne birleştirildi.",
                 "not_eligible": "Bu nesneler birleştirilemez.",
+                "not_adjacent": "Bu nesneler birleştirilemez, çünkü birbirleriyle bağlı değiller.",
                 "restriction": "Bu nesneler birleştirilemez, çünkü en az bir tanesi \"{relation}\" kümesinin üyesi.",
                 "incomplete_relation": "Bu nesneler birleştirilemez, çünkü içlerinden en az biri henüz tamamen indirilmedi.",
                 "conflicting_tags": "Bu nesneler birleştirilemez, çünkü bazı etiketleri birbiriyle çelişkili değerlere sahip."
                 "restriction": "Bu nesneler birleştirilemez, çünkü en az bir tanesi \"{relation}\" kümesinin üyesi.",
                 "incomplete_relation": "Bu nesneler birleştirilemez, çünkü içlerinden en az biri henüz tamamen indirilmedi.",
                 "conflicting_tags": "Bu nesneler birleştirilemez, çünkü bazı etiketleri birbiriyle çelişkili değerlere sahip."
             },
             "radio": {
                 "structure": {
             },
             "radio": {
                 "structure": {
+                    "type": "Tip",
                     "default": "Varsayılan",
                     "layer": "Katman"
                 }
                     "default": "Varsayılan",
                     "layer": "Katman"
                 }
         },
         "validations": {
             "disconnected_highway": "Kopuk yol",
         },
         "validations": {
             "disconnected_highway": "Kopuk yol",
+            "disconnected_highway_tooltip": "Yol, başka yollara veya bina girişlerine bağlı olmalıdır.",
             "untagged_point": "Etiketlenmemiş nokta",
             "untagged_point_tooltip": "Bu noktanın ne olduğunu belirten bir tür seç.",
             "untagged_line": "Etiketlenmemiş çizgi",
             "untagged_point": "Etiketlenmemiş nokta",
             "untagged_point_tooltip": "Bu noktanın ne olduğunu belirten bir tür seç.",
             "untagged_line": "Etiketlenmemiş çizgi",
         "help": {
             "title": "Yardım",
             "help": "# Yardım\n\n[OpenStreetMap](http://www.openstreetmap.org/) bedava ve düzenlenebilir\nbir dünya haritasıdır. Bu, bir harita düzenleme aracıdır. Bu aracı kullanarak\nharitaya yeni veriler ekleyebilir, mevcut verileri düzenleyebilirsin.\n\nYaptığın değişiklikler OpenStreetMap kullanan herkesin erişimine açık olacak\nve herkes tarafından görülebilecektir. Haritada\ndeğişiklikler, iyileştirmeler yapmak için [giriş yap](https://www.openstreetmap.org/login)\nman gerekmektedi.\n\n[iD editor](http://ideditor.com/) ortak bir çalışma ürünü olup [kaynak kodu\nGitHub'da yer almaktadır](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Yardım",
             "help": "# Yardım\n\n[OpenStreetMap](http://www.openstreetmap.org/) bedava ve düzenlenebilir\nbir dünya haritasıdır. Bu, bir harita düzenleme aracıdır. Bu aracı kullanarak\nharitaya yeni veriler ekleyebilir, mevcut verileri düzenleyebilirsin.\n\nYaptığın değişiklikler OpenStreetMap kullanan herkesin erişimine açık olacak\nve herkes tarafından görülebilecektir. Haritada\ndeğişiklikler, iyileştirmeler yapmak için [giriş yap](https://www.openstreetmap.org/login)\nman gerekmektedi.\n\n[iD editor](http://ideditor.com/) ortak bir çalışma ürünü olup [kaynak kodu\nGitHub'da yer almaktadır](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Düzenleme & Kaydetme\n\nBu düzenleyici çevrimiçi çalışmak üzere tasarlanmıştır ve şu anda\nbir web sitesi üzerinden düzenleyiciye erişiyorsun.\n\n### Nesneleri Seçmek\n\nHaritada yol veya mekan gibi nesneleri seçmek için, ilgili nesneye\ntıkla. Seçilen nesne farklı bir renkte vurgulanacaktır\nve detaylarının bulunduğu bir panel açılacaktır. İlgili nesne hakkında yapabileceğin\nişlemlerin bulunduğu bir de menü gösterilecektir.\n\nBirden fazla nesne seçmek için 'Shift' tuşuna basılı tut. Daha sonra seçmek istediğin\nnesnelere tıkla. Ya da imleci sürükleyerek haritada bir dikdörtgen bölge oluştur.\nSürükleme işlemi bir kutu çizecek ve içindeki bütün noktalar seçilecektir.\n\n### Düzenlemeleri Kaydetmek\n\nYollar, binalar ve mekanlarda düzenleme yaptığında\nbu değişiklikler sunucuda kaydedilmeden önce tarayıcıda geçici olarak saklanır.\nEğer bir hata yaparsan, değişikliklerini geri al butonu ile geri alabilir ve\ngeri getir butonu ile geri almadan önceki haline getirebilirsin.\n\n'Kaydet' tuşuna basarak düzenlemelerini kaydedebilirsin. Örneğin, bir kasabada\nyaptığın düzenlemeleri tamamladığında ve yeni bir alanda çalışmaya başlamak\nistediğinde değişikliklerini kaydedebilirsin. Değişikliklerin sunucuda\nkaydedilmeden önce gözden geçirme şansına sahipsin. Gözden geçirme adımında\ndüzenleyici sana yardımcı olacak öneriler sunacak ve doğru gözükmeyen değişiklikler\niçin uyarılar verecektir.\n\nEğer her şey doğru gözüküyorsa, değişikliklerini açıklayacak kısa bir açıklama\nyazabilirsin ve tekrar 'Kaydet' tuşuna basarak değişikliklerini [OpenStreetMap.org](http://www.openstreetmap.org/)'a kalıcı olarak kaydedebilirsin. Yaptığın\ndeğişiklikler diğer kullanıcılar tarafından görülebilecektir. Diğer kullanıcılar da\nsenin değişikliklerin üzerinde düzenlemeler yaparak haritayı daha da iyileştirme\nimkanı sağlayacaktır. Eğer değişikliklerini bir seferde bitiremiyorsan, düzenleyiciyi\nkapatabilirsin. Aynı bilgisayarda ve aynı tarayıcıda düzenleyiciyi daha sonra tekrar\naçtığında önceki değişikliklerini geri getirme imkanın olacaktır.\n\n### Kısayollar\n\nMevcut kısayolların listesine [şuradan](http://wiki.openstreetmap.org/wiki/ID/Shortcuts) ulaşabilirsin.\n\n",
             "roads": "# Yollar\n\nBu düzenleyici ile yol oluşturabilir, mevcut yolları düzenleyebilir ya da silebilirsin.\nÜzerinde çalışmak istediğin yol bir patika, otoyol, bisiklet yolu ya da başka\nherhangi bir yol çeşidi bile olabilir.\n\n### Seçme\n\nBir yolu seçmek için üzerine tıkla. Seçme işlemi yolu farklı renkte vurgulayacaktır.\nAyrıca, yolun kenarında bir işlem menüsü ve yol hakkında detaylı bilgilerin yer\naldığı ek bilgi kutusu belirecektir.\n\n### Düzenleme\n\nÇoğu zaman harita üzerinde uydu görüntüsü ya da GPS verileri ile tam olarak\naynı hizada olmayan yollar göreceksin. Bu yolları hizalayarak düzeltebilirsin.\n\nÖncelikle düzenlemek istediğin yola tıkla. Bu yolu haritada farklı renkte vurgulayacak\nve yolun şeklini düzeltmeye yarayan yol üzerindeki bağlantı noktalarını gösterecektir.\nEğer yolun bağlantı noktası olmayan kısmına yeni noktalar eklemek istersen,\nyolun nokta eklemek istediğin kısmına çift tıkla. Yolun tıklanan kısmına yeni\nbir nokta eklenecektir.\n\nEğer yol başka bir yolla kesişiyor, fakat harita üzerinde düzgün bir şekilde diğer\nyola bağlanmıyor ise, bağlantı noktalarını sürükleyerek farklı yollar üzerindeki\nbağlantı noktalarını birleştirebilirsin. Birbiri ile düzgün bağlanmış yollar harita ve\ngüzergah uygulamaları için en temel verilerden biridir.\n\nAyrıca, 'Kaydır' aracını kullanarak ya da 'M' kısayol tuşuna basarak bir yolun tüm\nkısımlarını topluca kaydırabilir ve ardından haritaya tıklayarak bu değişikliği\nkaydedebilirsin.\n\n### Silme\n\nEğer bir yol tamamen yanlış görünüyor ise, uydu görüntüsünde yoksa ya da bu\nyolun gerçekte olmadığını bizzat biliyorsan, yolu haritadan silebilirsin. Fakat, nesneleri\nharitadan silerken dikkatli ol, çünkü bu değişiklik işlemi herkes tarafından\ngörülecektir. Ayrıca, uydu görüntüsü eski ve yol yeni yapılmış olabilir.\n\nYolu silmek için önce üzerine tıklayarak yolu seç, ardından\nişlem menüsündeki çöp tenekesi simgesine ya da 'Delete' tuşuna basarak yolu sil.\n\n### Ekleme\n\nEğer haritada bir bölgede yol yoksa, ama gerçekte o bölgede bir yol var ise, sol\nüstte yer alan 'Çizgi' simgesine tıkla ya da '2' kısayol tuşuna basarak bir çizgi\nçizmeye başla.\n\nYolun başladığı yerde haritaya tıklayarak çizmeye başla. Eğer yol başka bir yoldan\nayrılıyorsa, bu durumda yolu, yolun diğer yoldan ayrıldığı bağlantı noktasından çizmeye\nbaşla.\n\nÇizmeye başladıktan sonra yolun takip ettiği rota doğrultusunda, uydu görüntülerini\nya da GPS verilerini takip ederek, yolu çiz. Eğer yol başka bir yolla kesişiyorsa yolları\nkesişim noktalarında oluşturacağın bir bağlantı noktası ile birbirine bağla. Çizme\nişlemini tamamladığında, çift tıklayarak ya da 'Enter' tuşuna basarak çizimi tamamla.\n",
             "gps": "# GPS\n\nKullanıcılar tarafından toplanan GPS (küresel konumlandırma sistemi) verileri\nOpenStreetMap için en önemli veri kaynaklarından biridir. Bu düzenleyici makinanda\nyer alan `.gpx` formatındaki dosyaları destekler. GPS verilerini kişisel GPS aleti\nile ya da akıllı telefon uygulamalarını kullanarak toplayabilirsin.\n\nGPS verileri toplama konusunda daha fazla bilgi almak için,\n[Mapping with a smartphone, GPS başlığındaki İngilizce](http://learnosm.org/en/mobile-mapping/) dokümana gözatabilirsin.\n\nGPX verilerini kullanarak haritayı düzenlemek için, GPX dosyasını haritaya\nsürükle ve bırak. Eğer veriler sistem tarafından tanınabilirse, haritaya parlak mor\nrenkte çizgi şeklinde eklenecektir. Sağ tarafta yer alan 'Harita Verileri' menüsünü\nkullanarak verilerini gizleyebilir, tekrar aktif hale getirebilir ya da verilere yakınlaşabilirsin.\n\nGPX verileri OpenStreetMap'e yüklenerek sunucuya kaydedilmeyecektir. Bu\nverileri kullanmanın en iyi yolu haritada göstermektir. Bu sayede yeni nesneler\noluşturulabilir, mevcut nesneler güncellenebilir. Sana ait GPX verilerini başkalarının\nda kullanabilmesini istiyorsan, [şuradan](http://www.openstreetmap.org/trace/create)\nOpenStreetMap'e yükleyebilirsin.\n",
             "imagery": "# Uygu Görüntüsü\n\nUydu görüntüsü harita düzenleme işlemi için en önemli kaynaklardan biridir. Sağda\ngösterilen 'Arka Plan Ayaları' menüsü altında birçok kaynaktan toplanan uydu görüntüleri\nyer almaktadır.\n\n[Bing Maps](http://www.bing.com/maps/) katmanı varsayılan uydu\ngörüntü katmanıdır. Haritanın belli bölgelerine yakınlaştığında diğer uydu görüntüleri\nde kullanılabilir olacaktır. ABD, Fransa ve Danimarka gibi ülkelerin bazı bölgeleri için\nyüksek kalitede uydu görüntüleri mevcuttur.\n\nUydu görüntüleri, görüntüyü sağlayanların hataları sebebiyle, bazen haritaya göre\nkısmen kaymış olabilir. Eğer harita üzerindeki yolların birçoğu, arka plandaki uydu\ngörüntüsü üzerindeki yollara göre kısmen kaymış olduğunu fark edersen, hemen\nharitadaki yolları arka plandaki yollarla eşleştirmek için uğraşma. Onun yerine\nuydu görüntüsünü 'Hizalamayı Düzelt' buttonuna tıklayarak harita ile uydu görüntüsünü\nhizala.\n",
             "roads": "# Yollar\n\nBu düzenleyici ile yol oluşturabilir, mevcut yolları düzenleyebilir ya da silebilirsin.\nÜzerinde çalışmak istediğin yol bir patika, otoyol, bisiklet yolu ya da başka\nherhangi bir yol çeşidi bile olabilir.\n\n### Seçme\n\nBir yolu seçmek için üzerine tıkla. Seçme işlemi yolu farklı renkte vurgulayacaktır.\nAyrıca, yolun kenarında bir işlem menüsü ve yol hakkında detaylı bilgilerin yer\naldığı ek bilgi kutusu belirecektir.\n\n### Düzenleme\n\nÇoğu zaman harita üzerinde uydu görüntüsü ya da GPS verileri ile tam olarak\naynı hizada olmayan yollar göreceksin. Bu yolları hizalayarak düzeltebilirsin.\n\nÖncelikle düzenlemek istediğin yola tıkla. Bu yolu haritada farklı renkte vurgulayacak\nve yolun şeklini düzeltmeye yarayan yol üzerindeki bağlantı noktalarını gösterecektir.\nEğer yolun bağlantı noktası olmayan kısmına yeni noktalar eklemek istersen,\nyolun nokta eklemek istediğin kısmına çift tıkla. Yolun tıklanan kısmına yeni\nbir nokta eklenecektir.\n\nEğer yol başka bir yolla kesişiyor, fakat harita üzerinde düzgün bir şekilde diğer\nyola bağlanmıyor ise, bağlantı noktalarını sürükleyerek farklı yollar üzerindeki\nbağlantı noktalarını birleştirebilirsin. Birbiri ile düzgün bağlanmış yollar harita ve\ngüzergah uygulamaları için en temel verilerden biridir.\n\nAyrıca, 'Kaydır' aracını kullanarak ya da 'M' kısayol tuşuna basarak bir yolun tüm\nkısımlarını topluca kaydırabilir ve ardından haritaya tıklayarak bu değişikliği\nkaydedebilirsin.\n\n### Silme\n\nEğer bir yol tamamen yanlış görünüyor ise, uydu görüntüsünde yoksa ya da bu\nyolun gerçekte olmadığını bizzat biliyorsan, yolu haritadan silebilirsin. Fakat, nesneleri\nharitadan silerken dikkatli ol, çünkü bu değişiklik işlemi herkes tarafından\ngörülecektir. Ayrıca, uydu görüntüsü eski ve yol yeni yapılmış olabilir.\n\nYolu silmek için önce üzerine tıklayarak yolu seç, ardından\nişlem menüsündeki çöp tenekesi simgesine ya da 'Delete' tuşuna basarak yolu sil.\n\n### Ekleme\n\nEğer haritada bir bölgede yol yoksa, ama gerçekte o bölgede bir yol var ise, sol\nüstte yer alan 'Çizgi' simgesine tıkla ya da '2' kısayol tuşuna basarak bir çizgi\nçizmeye başla.\n\nYolun başladığı yerde haritaya tıklayarak çizmeye başla. Eğer yol başka bir yoldan\nayrılıyorsa, bu durumda yolu, yolun diğer yoldan ayrıldığı bağlantı noktasından çizmeye\nbaşla.\n\nÇizmeye başladıktan sonra yolun takip ettiği rota doğrultusunda, uydu görüntülerini\nya da GPS verilerini takip ederek, yolu çiz. Eğer yol başka bir yolla kesişiyorsa yolları\nkesişim noktalarında oluşturacağın bir bağlantı noktası ile birbirine bağla. Çizme\nişlemini tamamladığında, çift tıklayarak ya da 'Enter' tuşuna basarak çizimi tamamla.\n",
             "gps": "# GPS\n\nKullanıcılar tarafından toplanan GPS (küresel konumlandırma sistemi) verileri\nOpenStreetMap için en önemli veri kaynaklarından biridir. Bu düzenleyici makinanda\nyer alan `.gpx` formatındaki dosyaları destekler. GPS verilerini kişisel GPS aleti\nile ya da akıllı telefon uygulamalarını kullanarak toplayabilirsin.\n\nGPS verileri toplama konusunda daha fazla bilgi almak için,\n[Mapping with a smartphone, GPS başlığındaki İngilizce](http://learnosm.org/en/mobile-mapping/) dokümana gözatabilirsin.\n\nGPX verilerini kullanarak haritayı düzenlemek için, GPX dosyasını haritaya\nsürükle ve bırak. Eğer veriler sistem tarafından tanınabilirse, haritaya parlak mor\nrenkte çizgi şeklinde eklenecektir. Sağ tarafta yer alan 'Harita Verileri' menüsünü\nkullanarak verilerini gizleyebilir, tekrar aktif hale getirebilir ya da verilere yakınlaşabilirsin.\n\nGPX verileri OpenStreetMap'e yüklenerek sunucuya kaydedilmeyecektir. Bu\nverileri kullanmanın en iyi yolu haritada göstermektir. Bu sayede yeni nesneler\noluşturulabilir, mevcut nesneler güncellenebilir. Sana ait GPX verilerini başkalarının\nda kullanabilmesini istiyorsan, [şuradan](http://www.openstreetmap.org/trace/create)\nOpenStreetMap'e yükleyebilirsin.\n",
             "imagery": "# Uygu Görüntüsü\n\nUydu görüntüsü harita düzenleme işlemi için en önemli kaynaklardan biridir. Sağda\ngösterilen 'Arka Plan Ayaları' menüsü altında birçok kaynaktan toplanan uydu görüntüleri\nyer almaktadır.\n\n[Bing Maps](http://www.bing.com/maps/) katmanı varsayılan uydu\ngörüntü katmanıdır. Haritanın belli bölgelerine yakınlaştığında diğer uydu görüntüleri\nde kullanılabilir olacaktır. ABD, Fransa ve Danimarka gibi ülkelerin bazı bölgeleri için\nyüksek kalitede uydu görüntüleri mevcuttur.\n\nUydu görüntüleri, görüntüyü sağlayanların hataları sebebiyle, bazen haritaya göre\nkısmen kaymış olabilir. Eğer harita üzerindeki yolların birçoğu, arka plandaki uydu\ngörüntüsü üzerindeki yollara göre kısmen kaymış olduğunu fark edersen, hemen\nharitadaki yolları arka plandaki yollarla eşleştirmek için uğraşma. Onun yerine\nuydu görüntüsünü 'Hizalamayı Düzelt' buttonuna tıklayarak harita ile uydu görüntüsünü\nhizala.\n",
                 "block_number": "<value for addr:block_number>",
                 "city": "Üç İrmak",
                 "county": "<value for addr:county>",
                 "block_number": "<value for addr:block_number>",
                 "city": "Üç İrmak",
                 "county": "<value for addr:county>",
+                "district": "<value for addr:district>",
                 "hamlet": "<value for addr:hamlet>",
                 "hamlet": "<value for addr:hamlet>",
+                "neighbourhood": "<value for addr:neighbourhood>",
                 "postcode": "49093",
                 "province": "<value for addr:province>",
                 "quarter": "<value for addr:quarter>",
                 "postcode": "49093",
                 "province": "<value for addr:province>",
                 "quarter": "<value for addr:quarter>",
                     "10th-avenue": "Gazi Mustafa Kemal Bulvarı",
                     "11th-avenue": "Gençlik Bulvarı",
                     "12th-avenue": "Barış Bulvarı",
                     "10th-avenue": "Gazi Mustafa Kemal Bulvarı",
                     "11th-avenue": "Gençlik Bulvarı",
                     "12th-avenue": "Barış Bulvarı",
+                    "access-point-employment": "Kültür Kitap Evi",
                     "adams-street": "İsmet İnönü Caddesi",
                     "andrews-elementary-school": "Mustafa Ergün İlköğretim Okulu",
                     "andrews-street": "Antalya Caddesi",
                     "adams-street": "İsmet İnönü Caddesi",
                     "andrews-elementary-school": "Mustafa Ergün İlköğretim Okulu",
                     "andrews-street": "Antalya Caddesi",
                     "barrows-school": "Atatürk Ortaokulu",
                     "battle-street": "Bursa Caddesi",
                     "bennett-street": "Balıkesir Caddesi",
                     "barrows-school": "Atatürk Ortaokulu",
                     "battle-street": "Bursa Caddesi",
                     "bennett-street": "Balıkesir Caddesi",
-                    "bowman-park": "Kuğu Parkı",
-                    "collins-drive": "Çorum Caddesi",
-                    "conrail-railroad": "Demiryolu",
-                    "conservation-park": "Enver Dönmez Parkı",
+                    "bowman-park": "Gençlik Parkı",
+                    "collins-drive": "Çorum Sokak",
+                    "conrail-railroad": "Eskişehir Demiryolu",
+                    "conservation-park": "50. Yıl Parkı",
                     "constantine-street": "Kemal Sunal Caddesi",
                     "cushman-street": "Bülent Caddesi",
                     "constantine-street": "Kemal Sunal Caddesi",
                     "cushman-street": "Bülent Caddesi",
-                    "douglas-avenue": "Pera Bulvarı"
+                    "dollar-tree": "Yeşim Mağazası",
+                    "douglas-avenue": "Pera Bulvarı",
+                    "east-street": "Atatürk Caddesi",
+                    "elm-street": "Cumhuriyet Caddesi",
+                    "flower-street": "Erciyes Caddesi",
+                    "foster-street": "Yaka Sokak",
+                    "french-street": "Mevlana Caddesi",
+                    "garden-street": "Hasan Polatkan Caddesi",
+                    "gem-pawnbroker": "Lider Yatırım",
+                    "golden-finch-framing": "Göztepe Çerçeve",
+                    "grant-avenue": "Kırım Bulvarı",
+                    "hoffman-pond": "Mogan Gölü",
+                    "hoffman-street": "İsmail Gaspıralı Caddesi",
+                    "hook-avenue": "Sivrihisar Bulvarı",
+                    "jefferson-street": "Doktorlar Caddesi",
+                    "kelsey-street": "Gaffar Okan Sokağı",
+                    "lafayette-park": "Sazova Parkı",
+                    "las-coffee-cafe": "İstanbul Kafe",
+                    "lincoln-avenue": "İki Eylül Bulvarı",
+                    "lowrys-books": "Dost Kitabevi",
+                    "lynns-garage": "Barış Oto Tamir",
+                    "main-street-barbell": "Cep Herkülü Halter Salonu",
+                    "main-street-cafe": "Karikatür Kafe",
+                    "main-street-fitness": "Akademi Spor Salonu",
+                    "main-street": "Vatan Caddesi",
+                    "maple-street": "Hamamyolu Caddesi",
+                    "marina-park": "Marina Parkı",
+                    "market-street": "Yunus Emre Caddesi",
+                    "memory-isle-park": "Gezi Parkı",
+                    "memory-isle": "Sakız Adası",
+                    "michigan-avenue": "İstasyon Bulvarı",
+                    "middle-street": "Ziya Paşa Caddesi",
+                    "millard-street": "Süleyman Çakır Caddesi",
+                    "moore-street": "Kıbrıs Şehitleri Caddesi",
+                    "morris-avenue": "İsmet Paşa Bulvarı",
+                    "mural-mall": "Kentpark AVM",
+                    "paisanos-bar-and-grill": "Köşem Lokantası",
+                    "paisley-emporium": "Kızılay Ticaret Merkezi",
+                    "paparazzi-tattoo": "Ayvaz Dövme",
+                    "pealer-street": "Cengiz Topel Caddesi",
+                    "pine-street": "Güneş Sokak",
+                    "pizza-hut": "Pizza Hut",
+                    "portage-avenue": "Alparslan Türkeş Bulvarı",
+                    "portage-river": "Sakarya Nehri",
+                    "preferred-insurance-services": "Güneş Sigorta",
+                    "railroad-drive": "Korsan Sokak",
+                    "river-city-appliance": "Palabıyıklar Beyaz Eşya",
+                    "river-drive": "Asarcıklı Sokak",
+                    "river-road": "Taşköprü Yolu",
+                    "river-street": "Deliklitaş Caddesi",
+                    "riverside-cemetery": "Mezarlık",
+                    "riverwalk-trail": "Sahil Yürüyüş Yolu",
+                    "riviera-theatre": "Büyülü Fener Sineması",
+                    "rocky-river": "Manavgat Nehri",
+                    "saint-joseph-river": "Ilıca Nehri",
+                    "scidmore-park-petting-zoo": "Ankara Hayvanat Bahçesi",
+                    "scidmore-park": "Kuğulu Park",
+                    "scouter-park": "Kaykay Parkı",
+                    "sherwin-williams": "Yenilmez Hırdavat",
+                    "south-street": "Güney Sokak",
+                    "southern-michigan-bank": "Ziraat Bankası",
+                    "spring-street": "Balkan Caddesi",
+                    "sturgeon-river-road": "Emirdağ Yolu",
+                    "three-rivers-city-hall": "Emirdağ Hükümet Konağı",
+                    "three-rivers-elementary-school": "Mustafa Ergün İlköğretim Okulu",
+                    "three-rivers-fire-department": "Emirdağ İtfaiyesi",
+                    "three-rivers-high-school": "Cumhuriyet Lisesi",
+                    "three-rivers-middle-school": "Atatürk Ortaokulu",
+                    "three-rivers-municipal-airport": "Anadolu Havaalanı",
+                    "three-rivers-post-office": "Emirdağ Postanesi",
+                    "three-rivers-public-library": "Emirdağ Kütüphanesi",
+                    "three-rivers": "Emirdağ",
+                    "unique-jewelry": "Yılmaz Kuyumculuk",
+                    "walnut-street": "Esenli Caddesi",
+                    "washington-street": "Ulus Caddesi",
+                    "water-street": "Su Sokak",
+                    "west-street": "Dumlupınar Caddesi",
+                    "wheeler-street": "Salih Bozok Caddesi",
+                    "william-towing": "Çekici",
+                    "willow-drive": "Seyitgazi Sokak",
+                    "wood-street": "Aydın Sokak",
+                    "world-fare": "Nimet Abla"
                 }
             },
                 }
             },
+            "welcome": {
+                "title": "Merhaba",
+                "welcome": "Merhaba! Bu eğitim sana OpenStreetMap'i düzenleme konusunda temel bilgileri öğretecek.",
+                "practice": "Eğitimde yer alan bütün veriler alıştırma yapmak içindir. Yaptığın herhangi bir değişiklik kaydedilmeyecektir.",
+                "words": "Bu eğitimde yeni kavramlar tanıtılacaktır. Bu kavramlar *italik* yazı biçimi ile gösterilecektir."
+            },
             "navigation": {
             "navigation": {
-                "title": "Navigasyon"
+                "title": "Navigasyon",
+                "points_lines_areas": "Haritadaki nesneler *nokta, çizgi veya alan* ile gösterilir.",
+                "nodes_ways": "OpenStreetMap'te noktalar bazen *bağlantı noktası* olarak ifade edilir. Benzer şekilde çizgi ve alanlar da *yol* şeklinde ifade edilebilir.",
+                "choose_street": "**{name} ismini listeden seç.**",
+                "selected_street": "Güzel! {name} seçildi."
             },
             "points": {
             },
             "points": {
-                "title": "Noktalar"
+                "title": "Noktalar",
+                "choose_cafe": "**{preset} öğesini listeden seç.**"
             },
             "areas": {
             },
             "areas": {
-                "title": "Alanlar"
+                "title": "Alanlar",
+                "search_playground": "**'{preset}' ile arama yap.**",
+                "choose_playground": "**Listeden bir {preset} seç.**",
+                "choose_field": "**Listeden bir {field} seç.**",
+                "retry_add_field": "{field} seçmedin. Şimdi tekrar dene!"
             },
             "lines": {
             },
             "lines": {
-                "title": "Çizgiler"
+                "title": "Çizgiler",
+                "retry_intersect": "Yolun {name} ile kesişmesi gerekiyor. Şimdi tekrar dene!",
+                "choose_category_road": "**Listedene {category} kategorisini seç.**",
+                "did_name_road": "Herşey yolunda! Şimdi çizgilerin şekillerini nasıl düzenlenebileceğini öğreneceğiz.",
+                "retry_split": "Ayır tuşuna basmadın. Tekrar dene.",
+                "retry_delete": "Sil tuşuna basmadın. Tekrar dene."
+            },
+            "buildings": {
+                "title": "Binalar",
+                "retry_building": "Görünüşe göre bağlantı noktalarını binanın köşelerine yerleştirme konusunda sıkıntı yaşıyorsun. Tekrar dene.",
+                "choose_category_building": "**{category} kategorisini listeden seç.**",
+                "rightclick_building": "**Sağ tıklayarak oluşturduğun binayı seç ve seçenekleri göster.**",
+                "retry_square": "Kareleştir tuşuna basmadın. Tekrar dene.",
+                "search_tank": "**'{preset} ile arama yap'.**",
+                "choose_tank": "**Listeden {preset} öğesini seç.**",
+                "rightclick_tank": "**Sağ tıklayarak oluşturduğun depoyu seç ve seçenekleri göster.**",
+                "circle_tank": "**{button} tuşuna basarak depoyu yuvarlak hale getir.**",
+                "retry_circle": "You didn't click the Circularize button. Try again."
             },
             "startediting": {
                 "title": "Düzenlemeye Başla",
             },
             "startediting": {
                 "title": "Düzenlemeye Başla",
                 "start": "Haritayı düzenlemeye başla!"
             }
         },
                 "start": "Haritayı düzenlemeye başla!"
             }
         },
+        "shortcuts": {
+            "title": "Klavye kısayolları",
+            "key": {
+                "alt": "Alt",
+                "backspace": "Backspace",
+                "cmd": "Cmd",
+                "ctrl": "Ctrl",
+                "delete": "Delete",
+                "del": "Del",
+                "end": "End",
+                "enter": "Enter",
+                "esc": "Esc",
+                "home": "Home",
+                "pgdn": "PgDn",
+                "pgup": "PgUp",
+                "return": "Enter",
+                "shift": "Shift"
+            },
+            "gesture": {
+                "drag": "sürükle"
+            },
+            "or": "-veya-",
+            "browsing": {
+                "title": "Gözat",
+                "navigation": {
+                    "title": "Navigasyon",
+                    "pan": "Haritada dolaş",
+                    "pan_more": "Haritada hızlı biçimde dolaş",
+                    "zoom": "Yaklaş / Uzaklaş",
+                    "zoom_more": "Hızlı Biçimde Yaklaş / Uzaklaş"
+                },
+                "help": {
+                    "title": "Yardım",
+                    "help": "Yardımı göster",
+                    "keyboard": "Klavye kısayollarını göster"
+                },
+                "display_options": {
+                    "title": "Görüntü ayarları",
+                    "background": "Arka plan ayarlarını göster",
+                    "background_switch": "Önceki arka plana geç",
+                    "map_data": "Harita veri ayarları",
+                    "fullscreen": "Tam ekran moduna gir",
+                    "minimap": "Küçük haritayı aç/kapa"
+                },
+                "selecting": {
+                    "title": "Nesne seç",
+                    "select_one": "Bir nesne seç",
+                    "select_multi": "Birden fazla nesne seç",
+                    "lasso": "Nesnelerin etrafında bir seçim alanı çiz"
+                },
+                "with_selected": {
+                    "title": "Seçilmiş nesnelerle beraber",
+                    "infobox": "Ölçü kutusunu aç/kapa",
+                    "edit_menu": "Düzenleme menüsünü aç/kapa"
+                },
+                "vertex_selected": {
+                    "title": "Seçişmiş bağlantı noktalarıyla beraber",
+                    "previous": "Önceki noktaya git",
+                    "next": "Sonraki noktaya git",
+                    "first": "İlk noktaya git",
+                    "last": "Son noktaya git",
+                    "change_parent": "Parçası olduğu çizgiye geç"
+                }
+            },
+            "editing": {
+                "title": "Düzenleme",
+                "drawing": {
+                    "title": "Çizim",
+                    "add_point": "'Nokta ekle' modu",
+                    "add_line": "'Çizgi ekle' modu",
+                    "add_area": "'Alan ekle' modu",
+                    "place_point": "Bir nokta yerleştir",
+                    "stop_line": "Çizgi ya da alan çizimini tamamla"
+                },
+                "operations": {
+                    "title": "İşlemler",
+                    "continue_line": "Çizgiye seçilmiş noktadan devam et",
+                    "merge": "Seçilmiş nesneleri birleştir",
+                    "disconnect": "Nesneleri seçilmiş bağlantı noktasından ayır",
+                    "split": "Çizgiyi seçilmiş bağlantı noktasından ikiye böl",
+                    "reverse": "Çizgiyi ters çevir",
+                    "move": "Seçilmiş nesneleri taşı",
+                    "rotate": "Seçilmiş nesneleri dönder",
+                    "orthogonalize": "Çizgiyi düzleştir / Alanı kare haline getir",
+                    "circularize": "Çizgiyi veya alanı daire haline getir",
+                    "reflect_long": "Bu nesneleri uzun ekseninden yansıt",
+                    "reflect_short": "Bu nesneleri kısa ekseninden yansıt",
+                    "delete": "Seçilmiş nesneleri sil"
+                },
+                "commands": {
+                    "title": "Komutlar",
+                    "copy": "Seçilmiş nesneleri kopyala",
+                    "paste": "Kopyalanmış nesneleri yapıştır",
+                    "undo": "Son işlemi geri al",
+                    "redo": "Son işlemi tekrar uygula",
+                    "save": "Değişiklikleri Kaydet"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                 "information": {
                     "label": "Tür"
                 },
                 "information": {
                     "label": "Tür"
                 },
+                "inscription": {
+                    "label": "Yazıt"
+                },
                 "internet_access": {
                     "label": "İnternet Bağlantısı",
                     "options": {
                 "internet_access": {
                     "label": "İnternet Bağlantısı",
                     "options": {
                 "maxstay": {
                     "label": "En Fazla Kalma Süresi"
                 },
                 "maxstay": {
                     "label": "En Fazla Kalma Süresi"
                 },
+                "maxweight": {
+                    "label": "En Fazla Ağırlık"
+                },
                 "mtb/scale": {
                     "label": "Dağ Bisikleti Zorluk Derecesi",
                     "options": {
                 "mtb/scale": {
                     "label": "Dağ Bisikleti Zorluk Derecesi",
                     "options": {
                 "amenity": {
                     "name": "Tesis"
                 },
                 "amenity": {
                     "name": "Tesis"
                 },
+                "amenity/animal_boarding": {
+                    "name": "Yatılı Hayvan Bakım Yeri",
+                    "terms": "Yatılı Hayvan Bakım Yeri"
+                },
+                "amenity/animal_breeding": {
+                    "name": "Hayvan Islah Yeri",
+                    "terms": "Hayvan Islah Yeri"
+                },
                 "amenity/animal_shelter": {
                 "amenity/animal_shelter": {
-                    "name": "Hayvan Barinağı"
+                    "name": "Hayvan Barinağı",
+                    "terms": "Hayvan Barınağı"
                 },
                 "amenity/arts_centre": {
                     "name": "Sanat Merkezi",
                 },
                 "amenity/arts_centre": {
                     "name": "Sanat Merkezi",
                     "terms": "İçme Suyu, Sebil"
                 },
                 "amenity/driving_school": {
                     "terms": "İçme Suyu, Sebil"
                 },
                 "amenity/driving_school": {
-                    "name": "Sürücü Kursu"
+                    "name": "Sürücü Kursu",
+                    "terms": "Sürücü Okulu"
                 },
                 "amenity/embassy": {
                     "name": "Büyükelçilik",
                 },
                 "amenity/embassy": {
                     "name": "Büyükelçilik",
                     "name": "Park Yeri",
                     "terms": "Park Yeri"
                 },
                     "name": "Park Yeri",
                     "terms": "Park Yeri"
                 },
+                "amenity/pavilion": {
+                    "name": "Köşk",
+                    "terms": "Köşk, Pavyon, Müzikhol"
+                },
                 "amenity/pharmacy": {
                     "name": "Eczane",
                     "terms": "Eczane"
                 "amenity/pharmacy": {
                     "name": "Eczane",
                     "terms": "Eczane"
                     "name": "Üniversite Yerleşkesi",
                     "terms": "Üniversite Yerleşkesi, Üniversite Kampüsü"
                 },
                     "name": "Üniversite Yerleşkesi",
                     "terms": "Üniversite Yerleşkesi, Üniversite Kampüsü"
                 },
+                "amenity/vending_machine": {
+                    "name": "Otomatik Satış Makinası",
+                    "terms": "Otomatik Satış Makinası, Otomat"
+                },
                 "amenity/vending_machine/cigarettes": {
                     "name": "Sigara Otomatı",
                     "terms": "Sigara Otomatı"
                 "amenity/vending_machine/cigarettes": {
                     "name": "Sigara Otomatı",
                     "terms": "Sigara Otomatı"
                 "amenity/vending_machine/news_papers": {
                     "name": "Gazete Otomatı"
                 },
                 "amenity/vending_machine/news_papers": {
                     "name": "Gazete Otomatı"
                 },
+                "amenity/vending_machine/newspapers": {
+                    "name": "Gazete Satış Makinası",
+                    "terms": "Gazete Satış Makinası, Gazete Otomatı"
+                },
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "Posta Alma-Bırakma Makinası",
                     "terms": "Posta Alma-Bırakma Makinası"
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "Posta Alma-Bırakma Makinası",
                     "terms": "Posta Alma-Bırakma Makinası"
                     "name": "İçme Suyu",
                     "terms": "İçme Suyu, Sebil"
                 },
                     "name": "İçme Suyu",
                     "terms": "İçme Suyu, Sebil"
                 },
+                "amenity/watering_place": {
+                    "name": "Hayvan Yıkama Yeri",
+                    "terms": "Hayvan Yıkama Yeri"
+                },
                 "area": {
                     "name": "Alan",
                     "terms": "Alan, Bölge"
                 "area": {
                     "name": "Alan",
                     "terms": "Alan, Bölge"
                     "terms": "Kamp Ateş Alanı"
                 },
                 "club": {
                     "terms": "Kamp Ateş Alanı"
                 },
                 "club": {
-                    "name": "Klüb"
+                    "name": "Klüb",
+                    "terms": "Bar, Kulüp"
                 },
                 "craft": {
                     "name": "Zanaat",
                 },
                 "craft": {
                     "name": "Zanaat",
                     "name": "Elektrikçi",
                     "terms": "Elektrikçi"
                 },
                     "name": "Elektrikçi",
                     "terms": "Elektrikçi"
                 },
+                "craft/electronics_repair": {
+                    "name": "Elektronik Tamircisi",
+                    "terms": "Elektronik Tamircisi"
+                },
                 "craft/gardener": {
                     "name": "Bahçıvan",
                     "terms": "Bahçıvan"
                 "craft/gardener": {
                     "name": "Bahçıvan",
                     "terms": "Bahçıvan"
                     "name": "Bisiklet Yolu",
                     "terms": "Bisiklet Yolu"
                 },
                     "name": "Bisiklet Yolu",
                     "terms": "Bisiklet Yolu"
                 },
+                "highway/elevator": {
+                    "name": "Asansör",
+                    "terms": "Asansör"
+                },
                 "highway/footway": {
                     "name": "Yürüyüş Yolu",
                     "terms": "Yürüyüş Yolu, Yaya Yolu"
                 "highway/footway": {
                     "name": "Yürüyüş Yolu",
                     "terms": "Yürüyüş Yolu, Yaya Yolu"
                     "name": "Anayol Bağlantı Yolu",
                     "terms": "Anayol Bağlantı Yolu, Anayola Bağlanan Yol"
                 },
                     "name": "Anayol Bağlantı Yolu",
                     "terms": "Anayol Bağlantı Yolu, Anayola Bağlanan Yol"
                 },
+                "highway/raceway": {
+                    "name": "Araç Yarış Yolu",
+                    "terms": "Araç Yarış Yolu"
+                },
                 "highway/residential": {
                     "name": "Yerleşim Yeri Yolu",
                     "terms": "Yerleşim Yeri Yolu, Mahalle Arası Yol"
                 "highway/residential": {
                     "name": "Yerleşim Yeri Yolu",
                     "terms": "Yerleşim Yeri Yolu, Mahalle Arası Yol"
                     "name": "Servis Alanı",
                     "terms": "Servis Alanı, Tamir Alanı"
                 },
                     "name": "Servis Alanı",
                     "terms": "Servis Alanı, Tamir Alanı"
                 },
+                "highway/speed_camera": {
+                    "name": "Hız Kontrol Kamerası",
+                    "terms": "Hız Kontrol Kamerası, Radar Kamerası"
+                },
                 "highway/steps": {
                     "name": "Merdiven",
                     "terms": "Merdiven, Basamaklar"
                 "highway/steps": {
                     "name": "Merdiven",
                     "terms": "Merdiven, Basamaklar"
                     "terms": "Harabeler"
                 },
                 "historic/tomb": {
                     "terms": "Harabeler"
                 },
                 "historic/tomb": {
-                    "name": "Mezar"
+                    "name": "Mezar",
+                    "terms": "Türbe, Mezar, Kabir"
                 },
                 "historic/wayside_cross": {
                     "name": "Çarmıh",
                 },
                 "historic/wayside_cross": {
                     "name": "Çarmıh",
                     "terms": "Çimenlik, Yeşil Alan"
                 },
                 "landuse/harbour": {
                     "terms": "Çimenlik, Yeşil Alan"
                 },
                 "landuse/harbour": {
-                    "name": "Liman"
+                    "name": "Liman",
+                    "terms": "Liman"
                 },
                 "landuse/industrial": {
                     "name": "Sanayi Bölgesi",
                 },
                 "landuse/industrial": {
                     "name": "Sanayi Bölgesi",
                     "name": "Taşocağı",
                     "terms": "Taşocağı, Ocak"
                 },
                     "name": "Taşocağı",
                     "terms": "Taşocağı, Ocak"
                 },
+                "landuse/railway": {
+                    "name": "Demiryolu Koridoru",
+                    "terms": "Demiryolu Koridoru, Demiryolu Alanı"
+                },
                 "landuse/recreation_ground": {
                     "name": "Antreman Sahası",
                     "terms": "Antreman Sahası"
                 "landuse/recreation_ground": {
                     "name": "Antreman Sahası",
                     "terms": "Antreman Sahası"
                     "name": "Basketbol Sahası",
                     "terms": "Basketbol Sahası"
                 },
                     "name": "Basketbol Sahası",
                     "terms": "Basketbol Sahası"
                 },
+                "leisure/pitch/beachvolleyball": {
+                    "name": "Sahil Voleybolu Sahası",
+                    "terms": "Sahil Voleybolu Sahası"
+                },
                 "leisure/pitch/bowls": {
                     "name": "Açıkhava Top Oyun Sahası",
                     "terms": "Açıkhava Top Oyun Sahası"
                 },
                 "leisure/pitch/bowls": {
                     "name": "Açıkhava Top Oyun Sahası",
                     "terms": "Açıkhava Top Oyun Sahası"
                 },
+                "leisure/pitch/cricket": {
+                    "name": "Kriket Sahası",
+                    "terms": "Kriket Sahası"
+                },
                 "leisure/pitch/equestrian": {
                 "leisure/pitch/equestrian": {
-                    "name": "Binicilik Alanı"
+                    "name": "Binicilik Alanı",
+                    "terms": "At Binme Alanı"
                 },
                 "leisure/pitch/rugby_league": {
                     "name": "Ragbi Lig Sahası",
                 },
                 "leisure/pitch/rugby_league": {
                     "name": "Ragbi Lig Sahası",
                     "terms": "Futbol Sahası"
                 },
                 "leisure/pitch/table_tennis": {
                     "terms": "Futbol Sahası"
                 },
                 "leisure/pitch/table_tennis": {
-                    "name": "Masa Tennis"
+                    "name": "Masa Tennis",
+                    "terms": "Masa Tenisi"
                 },
                 "leisure/pitch/tennis": {
                     "name": "Tenis Sahası",
                 },
                 "leisure/pitch/tennis": {
                     "name": "Tenis Sahası",
                     "terms": "Tatil Yeri"
                 },
                 "leisure/running_track": {
                     "terms": "Tatil Yeri"
                 },
                 "leisure/running_track": {
-                    "name": "Yarış Pisti (motor spor hariç)"
+                    "name": "Yarış Pisti (motor spor hariç)",
+                    "terms": "Koşu Pisti"
                 },
                 "leisure/slipway": {
                     "name": "Gemi Kızağı",
                 },
                 "leisure/slipway": {
                     "name": "Gemi Kızağı",
                     "terms": "Yüzme Havuzu"
                 },
                 "leisure/track": {
                     "terms": "Yüzme Havuzu"
                 },
                 "leisure/track": {
-                    "name": "Yarış Pisti (motor spor hariç)"
+                    "name": "Yarış Pisti (motor spor hariç)",
+                    "terms": "Yarış Yolu"
                 },
                 "leisure/water_park": {
                     "name": "Su Parkı",
                 },
                 "leisure/water_park": {
                     "name": "Su Parkı",
                     "terms": "Deniz Feneri, Fener"
                 },
                 "man_made/mast": {
                     "terms": "Deniz Feneri, Fener"
                 },
                 "man_made/mast": {
-                    "name": "Direk"
+                    "name": "Direk",
+                    "terms": "Baz İstasyonu"
                 },
                 "man_made/observation": {
                     "name": "Gözetleme Kulesi",
                 },
                 "man_made/observation": {
                     "name": "Gözetleme Kulesi",
                     "terms": "Mahalle"
                 },
                 "place/quarter": {
                     "terms": "Mahalle"
                 },
                 "place/quarter": {
-                    "name": "Semt"
+                    "name": "Semt",
+                    "terms": "Mahalle, Muhit"
                 },
                 "place/square": {
                     "name": "Meydan",
                     "terms": "Meydan"
                 },
                 "place/suburb": {
                 },
                 "place/square": {
                     "name": "Meydan",
                     "terms": "Meydan"
                 },
                 "place/suburb": {
-                    "name": "Mahalle"
+                    "name": "Mahalle",
+                    "terms": "Semt"
                 },
                 "place/town": {
                     "name": "Kasaba",
                 },
                 "place/town": {
                     "name": "Kasaba",
                     "terms": "Tramvay"
                 },
                 "railway/tram_stop": {
                     "terms": "Tramvay"
                 },
                 "railway/tram_stop": {
-                    "name": "Tramvay Durağı"
+                    "name": "Tramvay Durağı",
+                    "terms": "Tramvay Durağı"
                 },
                 "relation": {
                     "name": "İlişki",
                 },
                 "relation": {
                     "name": "İlişki",
                     "name": "Antika Dükkanı",
                     "terms": "Antika Dükkanı"
                 },
                     "name": "Antika Dükkanı",
                     "terms": "Antika Dükkanı"
                 },
+                "shop/appliance": {
+                    "name": "Beyaz Eşya Mağazası",
+                    "terms": "Beyaz Eşya Mağazası"
+                },
                 "shop/art": {
                     "name": "Sanat Mağazası",
                     "terms": "Sanat Mağazası"
                 "shop/art": {
                     "name": "Sanat Mağazası",
                     "terms": "Sanat Mağazası"
                     "name": "Bahçe Düzenleme Mağazası",
                     "terms": "Bahçe Düzenleme Mağazası"
                 },
                     "name": "Bahçe Düzenleme Mağazası",
                     "terms": "Bahçe Düzenleme Mağazası"
                 },
+                "shop/gas": {
+                    "name": "Tüpçü",
+                    "terms": "Tüpçü"
+                },
                 "shop/gift": {
                     "name": "Hediye Mağazası",
                     "terms": "Hediye Mağazası"
                 "shop/gift": {
                     "name": "Hediye Mağazası",
                     "terms": "Hediye Mağazası"
                     "terms": "İkinciel Alım Satım Mağazası"
                 },
                 "shop/perfumery": {
                     "terms": "İkinciel Alım Satım Mağazası"
                 },
                 "shop/perfumery": {
-                    "name": "Parfümeri"
+                    "name": "Parfümeri",
+                    "terms": "Parfüm Mağazası"
                 },
                 "shop/pet": {
                     "name": "Evcil Hayvan Mağazası",
                 },
                 "shop/pet": {
                     "name": "Evcil Hayvan Mağazası",
index 40254d614731d4c0f84c860afd03739b916d76fb..58ef77312d3902ff62fdae81e5274f073f0f66a6 100644 (file)
                 "not_adjacent": "Ці обʼєкти не можуть бути обʼєднані, бо їх кінцеві точки не зʼєднані.",
                 "restriction": "Ці об’єкти не можуть бути об’єднані, принаймні один з них є членом звʼязку \"{relation}\".",
                 "incomplete_relation": "Ці об’єкти не можуть бути об’єднані, принаймні один з них завантажений не повністю.",
                 "not_adjacent": "Ці обʼєкти не можуть бути обʼєднані, бо їх кінцеві точки не зʼєднані.",
                 "restriction": "Ці об’єкти не можуть бути об’єднані, принаймні один з них є членом звʼязку \"{relation}\".",
                 "incomplete_relation": "Ці об’єкти не можуть бути об’єднані, принаймні один з них завантажений не повністю.",
-                "conflicting_tags": "Ці обʼєкти не можуть бути обʼєднані, бо вони мають теґи, значення яких не співпадають."
+                "conflicting_tags": "Ці обʼєкти не можуть бути обʼєднані, бо вони мають теґи, значення яких не збігаються."
             },
             "move": {
                 "title": "Пересунути",
             },
             "move": {
                 "title": "Пересунути",
             "description": "Налаштування тла",
             "percent_brightness": "прозорість {opacity}%",
             "none": "Пусте",
             "description": "Налаштування тла",
             "percent_brightness": "прозорість {opacity}%",
             "none": "Пусте",
-            "best_imagery": "Ð\9dайкÑ\80аÑ\88і супутникові знімки для цього місця",
+            "best_imagery": "Ð\9dайкÑ\80аÑ\89і супутникові знімки для цього місця",
             "switch": "Ввімкнути цей шар",
             "custom": "Власний фон",
             "custom_button": "Параметри власного фону",
             "switch": "Ввімкнути цей шар",
             "custom": "Власний фон",
             "custom_button": "Параметри власного фону",
         "help": {
             "title": "Довідка",
             "help": "# Довідка\n\nЦе редактор [OpenStreetMap](http://www.openstreetmap.org/) —\nвільної мапи світу, правити яку може кожен. Ви можете використовувати\nйого для додавання та виправлення даних, створюючи найкращу\nвідкриту мапу світу з вільними, доступними всім, картографічними даними.\n\nЗміни, які ви вносите до цієї мапи, будуть доступні всім\nіншим, хто використовує OpenStreetMap. Для того, щоб вносити\nзміни вам потрібно\n[Ввійти](https://www.openstreetmap.org/login).\n\n[Редактор iD](http://ideditor.com/) — є суспільним проектом з [сирцями\nдоступними на GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Довідка",
             "help": "# Довідка\n\nЦе редактор [OpenStreetMap](http://www.openstreetmap.org/) —\nвільної мапи світу, правити яку може кожен. Ви можете використовувати\nйого для додавання та виправлення даних, створюючи найкращу\nвідкриту мапу світу з вільними, доступними всім, картографічними даними.\n\nЗміни, які ви вносите до цієї мапи, будуть доступні всім\nіншим, хто використовує OpenStreetMap. Для того, щоб вносити\nзміни вам потрібно\n[Ввійти](https://www.openstreetmap.org/login).\n\n[Редактор iD](http://ideditor.com/) — є суспільним проектом з [сирцями\nдоступними на GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Ð ÐµÐ´Ð°Ð³Ñ\83ваннÑ\8f Ñ\82а Ð·Ð±ÐµÑ\80еженнÑ\8f\n\nЦей Ñ\80едакÑ\82оÑ\80 Ñ\81Ñ\82воÑ\80ений Ð¿ÐµÑ\80еважно Ð´Ð»Ñ\8f Ñ\80обоÑ\82и Ð¾Ð½Ð»Ð°Ð¹Ð½, Ñ\96 Ð²Ð¸ Ð·Ð°Ñ\80аз\nпÑ\80аÑ\86Ñ\8eÑ\94Ñ\82е Ð· Ð½Ð¸Ð¼ Ð½Ð° Ð²ÐµÐ±-Ñ\81айÑ\82Ñ\96.\n\n### Ð\92идÑ\96леннÑ\8f Ð¾Ð±â\80\99Ñ\94кÑ\82Ñ\96в\n\nÐ\94лÑ\8f Ð²Ð¸Ð´Ñ\96леннÑ\8f Ð¾Ð±â\80\99Ñ\94кÑ\82Ñ\96в Ð½Ð° Ð¼Ð°Ð¿Ñ\96, Ñ\82акиÑ\85 Ñ\8fк Ð´Ð¾Ñ\80оги Ñ\87и Ð¿Ð°Ð¼â\80\99Ñ\8fÑ\82ки, Ñ\82Ñ\80еба ÐºÐ»Ð°Ñ\86нÑ\83Ñ\82и\nпо Ð½Ð¸Ñ\85 Ð½Ð° Ð¼Ð°Ð¿Ñ\96. Ð\92идÑ\96ленÑ\96 Ð¾Ð±â\80\99Ñ\94кÑ\82и Ð±Ñ\83дÑ\83Ñ\82Ñ\8c Ð¿Ñ\96дÑ\81вÑ\96Ñ\87енÑ\96, Ð·â\80\99Ñ\8fвиÑ\82Ñ\8cÑ\81Ñ\8f Ð¿Ð°Ð½ÐµÐ»Ñ\8c Ð·\nподÑ\80обиÑ\86Ñ\8fми Ð¿Ñ\80о Ð½Ð¸Ñ\85 Ñ\82а Ð¼ÐµÐ½Ñ\8e Ñ\96з Ð¿ÐµÑ\80елÑ\96ком Ñ\82ого, Ñ\89о Ð¼Ð¾Ð¶Ð½Ð° Ð·Ñ\80обиÑ\82и.\n\nÐ\94лÑ\8f Ð²Ð¸Ð´Ñ\96леннÑ\8f ÐºÑ\96лÑ\8cкоÑ\85 Ð¾Ð±â\80\99Ñ\94кÑ\82Ñ\96в Ð½Ð°Ñ\82иÑ\81нÑ\96Ñ\82Ñ\8c 'Shift', Ð°Ð±Ð¾ ÐºÐ»Ð°Ñ\86нÑ\96Ñ\82Ñ\8c Ñ\82а Ð¿Ð¾Ñ\82Ñ\8fгнÑ\96Ñ\82Ñ\8c\nмиÑ\88еÑ\8e Ð¿Ð¾ Ð¼Ð°Ð¿Ñ\96. Ð\91Ñ\83дÑ\83Ñ\82Ñ\8c Ð²Ð¸Ð´Ñ\96ленÑ\96 Ð²Ñ\81Ñ\96 Ð¾Ð±â\80\99Ñ\94кÑ\82и, Ñ\89о Ð¿Ð¾Ñ\82Ñ\80апили Ñ\83 Ð¿Ñ\80Ñ\8fмокÑ\83Ñ\82ник\nвидÑ\96леннÑ\8f, Ñ\86е Ð´Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ\82Ñ\8c Ð²Ð°Ð¼ Ð²Ð¸ÐºÐ¾Ð½Ñ\83ваÑ\82и Ð´Ñ\96Ñ\97 Ð¾Ð´Ð½Ð¾Ñ\87аÑ\81но Ð½Ð°Ð´ ÐºÑ\96лÑ\8cкома\nобâ\80\99Ñ\94кÑ\82ами.\n\n### Ð\97беÑ\80еженнÑ\8f Ð¿Ñ\80авок\n\nÐ\9fÑ\96Ñ\81лÑ\8f Ñ\82ого Ñ\8fк Ð²Ð¸ Ð·Ñ\80обили Ð·Ð¼Ñ\96ни, Ð²Ð¸Ð¿Ñ\80авивÑ\88и Ð´Ð¾Ñ\80огÑ\83, Ñ\87и Ð±Ñ\83динок, Ð²Ð¾Ð½Ð¸ Ñ\94\nлокалÑ\8cними Ð´Ð¾ÐºÐ¸ Ð²Ð¸ Ð½Ðµ Ð·Ð±ÐµÑ\80ежеÑ\82е Ñ\97Ñ\85 Ð½Ð° Ñ\81еÑ\80веÑ\80Ñ\96. Ð\9dе Ñ\85вилÑ\8eйÑ\82еÑ\81Ñ\8c, Ñ\8fкÑ\89о Ð²Ð¸\nпÑ\80ипÑ\83Ñ\81Ñ\82илиÑ\81Ñ\8c Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸, Ð²Ð¸ Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81каÑ\81Ñ\83ваÑ\82и Ð·Ð¼Ñ\96ни Ð½Ð°Ñ\82иÑ\81нÑ\83вÑ\88и Ð½Ð° ÐºÐ½Ð¾Ð¿ÐºÑ\83\n'СкаÑ\81Ñ\83ваÑ\82и', Ð° Ñ\82акож Ð¿Ð¾Ð²ÐµÑ\80нÑ\83Ñ\82и Ð·Ð¼Ñ\96ни â\80\94 Ð½Ð°Ñ\82иÑ\81нÑ\83вÑ\88и 'Ð\9fовеÑ\80нÑ\83Ñ\82и'\n\nÐ\9dаÑ\82иÑ\81нÑ\96Ñ\82Ñ\8c 'Ð\97беÑ\80егÑ\82и', Ñ\89об Ð·Ð°ÐºÑ\96нÑ\87иÑ\82и Ð³Ñ\80Ñ\83пÑ\83 Ð¿Ñ\80авок, Ð½Ð°Ð¿Ñ\80иклад, Ñ\8fкÑ\89о Ð²Ð¸\nзакÑ\96нÑ\87или Ñ\80обоÑ\82Ñ\83 Ð½Ð°Ð´ Ð¾Ð´Ð½Ð¸Ð¼ Ñ\80айоном Ð¼Ñ\96Ñ\81Ñ\82а Ñ\96 Ð±Ð°Ð¶Ð°Ñ\94Ñ\82е Ð¿ÐµÑ\80ейÑ\82и Ð´Ð¾ Ñ\96нÑ\88ого. Ð\92и\nбÑ\83деÑ\82е Ð¼Ð°Ñ\82и Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ñ\96Ñ\81Ñ\82Ñ\8c Ð¿ÐµÑ\80еглÑ\8fнÑ\83Ñ\82и Ñ\82е, Ñ\89о Ð²Ð¸ Ð·Ñ\80обили, Ð° Ñ\80едакÑ\82оÑ\80\nзапÑ\80опонÑ\83Ñ\94 Ð²Ð°Ð¼ ÐºÐ¾Ñ\80иÑ\81нÑ\96 Ð¿Ð¾Ñ\80ади Ñ\82а Ð²Ð¸Ð´Ð°Ñ\81Ñ\82Ñ\8c Ð¿Ð¾Ð¿ÐµÑ\80едженнÑ\8f, Ñ\8fкÑ\89о Ð²Ð°Ñ\88Ñ\96\nпÑ\80авки Ð½Ðµ Ð²Ð¸Ð³Ð»Ñ\8fдаÑ\8eÑ\82Ñ\8c Ð¿Ñ\80авилÑ\8cними.\n\nЯкÑ\89о Ð²Ñ\81е Ð²Ð¸Ð³Ð»Ñ\8fдаÑ\94 Ð´Ð¾Ð±Ñ\80е, Ð²Ð¸ Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð¾Ð´Ð°Ñ\82и ÐºÐ¾Ñ\80оÑ\82ке Ð¿Ð¾Ñ\8fÑ\81неннÑ\8f Ñ\82ого, Ñ\89о Ð²Ð¸\nзÑ\80обили Ñ\82а Ð½Ð°Ñ\82иÑ\81нÑ\83Ñ\82и ÐºÐ½Ð¾Ð¿ÐºÑ\83 'Ð\97беÑ\80егÑ\82и' Ñ\89е Ñ\80аз, Ñ\89об Ð½Ð°Ð´Ñ\96Ñ\81лаÑ\82и Ð·Ð¼Ñ\96ни Ð´Ð¾\n[OpenStreetMap.org](http://www.openstreetmap.org/), Ð´Ðµ Ð²Ð¾Ð½Ð¸ Ñ\81Ñ\82анÑ\83Ñ\82Ñ\8c\nдоÑ\81Ñ\82Ñ\83пнÑ\96 Ð´Ð»Ñ\8f Ð²Ñ\81Ñ\96Ñ\85 Ñ\96нÑ\88иÑ\85 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в Ð´Ð»Ñ\8f Ð¿ÐµÑ\80еглÑ\8fдÑ\83 Ñ\82а Ð²Ð´Ð¾Ñ\81коналеннÑ\8f.\n\nЯкÑ\89о Ð²Ð¸ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е Ð·Ð°ÐºÑ\96нÑ\87иÑ\82и Ð²Ð°Ñ\88Ñ\96 Ð¿Ñ\80авки Ð·Ð° Ð¾Ð´Ð¸Ð½ Ñ\80аз, Ð²Ð¸ Ð¼Ð¾Ð¶ÐµÑ\82е Ð»Ð¸Ñ\88иÑ\82и\nвÑ\96кно Ð· Ñ\80едакÑ\82оÑ\80ом Ð²Ñ\96дкÑ\80иÑ\82им Ñ\96 Ð¿Ð¾Ð²ÐµÑ\80нÑ\83Ñ\82иÑ\81Ñ\8c (на Ñ\82омÑ\83 Ñ\81амомÑ\83 ÐºÐ¾Ð¼Ð¿â\80\99Ñ\8eÑ\82еÑ\80Ñ\96 Ñ\82а\nоглÑ\8fдаÑ\87Ñ\96) Ð´Ð¾ Ñ\80обоÑ\82и Ð¿Ð¾Ñ\82Ñ\96м â\80\94 Ñ\80едакÑ\82оÑ\80 Ð·Ð°Ð¿Ñ\80опонÑ\83Ñ\94 Ð²Ð°Ð¼ Ð²Ñ\96дновиÑ\82и Ð²Ð°Ñ\88Ñ\83\nÑ\80обоÑ\82Ñ\83.\n\n### Ð\9aоÑ\80иÑ\81Ñ\82Ñ\83ваннÑ\8f Ñ\80едакÑ\82оÑ\80ом\n\nÐ\9fеÑ\80елÑ\96к Ð´Ð¾Ñ\81Ñ\82Ñ\83пниÑ\85 ÐºÐ»Ð°Ð²Ñ\96Ñ\88ниÑ\85 ÐºÐ¾Ð¼Ð±Ñ\96наÑ\86Ñ\96й Ð¼Ð¾Ð¶Ð½Ð° Ð·Ð½Ð°Ð¹Ñ\82и [Ñ\82Ñ\83Ñ\82](http://wiki.openstreetmap.org/wiki/ID/Shortcuts).\n\n",
+            "editing_saving": "# Ð ÐµÐ´Ð°Ð³Ñ\83ваннÑ\8f Ñ\82а Ð·Ð±ÐµÑ\80еженнÑ\8f\n\nЦей Ñ\80едакÑ\82оÑ\80 Ñ\81Ñ\82воÑ\80ений Ð¿ÐµÑ\80еважно Ð´Ð»Ñ\8f Ñ\80обоÑ\82и Ð¾Ð½Ð»Ð°Ð¹Ð½, Ñ\96 Ð·Ð°Ñ\80аз Ð²Ð¸\nпÑ\80аÑ\86Ñ\8eÑ\94Ñ\82е Ð· Ð½Ð¸Ð¼ Ð½Ð° Ð²ÐµÐ±-Ñ\81айÑ\82Ñ\96.\n\n### Ð\92идÑ\96леннÑ\8f Ð¾Ð±â\80\99Ñ\94кÑ\82Ñ\96в\n\nÐ\94лÑ\8f Ð²Ð¸Ð´Ñ\96леннÑ\8f Ð¾Ð±â\80\99Ñ\94кÑ\82Ñ\96в Ð½Ð° Ð¼Ð°Ð¿Ñ\96, Ñ\82акиÑ\85 Ñ\8fк Ð´Ð¾Ñ\80оги Ñ\87и Ð¿Ð°Ð¼â\80\99Ñ\8fÑ\82ки, Ñ\82Ñ\80еба ÐºÐ»Ð°Ñ\86нÑ\83Ñ\82и\nпо Ð½Ð¸Ñ\85 Ð½Ð° Ð¼Ð°Ð¿Ñ\96. Ð\92идÑ\96ленÑ\96 Ð¾Ð±â\80\99Ñ\94кÑ\82и Ð±Ñ\83дÑ\83Ñ\82Ñ\8c Ð¿Ñ\96дÑ\81вÑ\96Ñ\87енÑ\96, Ð·â\80\99Ñ\8fвиÑ\82Ñ\8cÑ\81Ñ\8f Ð¿Ð°Ð½ÐµÐ»Ñ\8c Ð·\nподÑ\80обиÑ\86Ñ\8fми Ð¿Ñ\80о Ð½Ð¸Ñ\85 Ñ\82а Ð¼ÐµÐ½Ñ\8e Ñ\96з Ð¿ÐµÑ\80елÑ\96ком Ñ\82ого, Ñ\89о Ð¼Ð¾Ð¶Ð½Ð° Ð·Ñ\80обиÑ\82и.\n\nÐ\94лÑ\8f Ð²Ð¸Ð´Ñ\96леннÑ\8f ÐºÑ\96лÑ\8cкоÑ\85 Ð¾Ð±â\80\99Ñ\94кÑ\82Ñ\96в Ð½Ð°Ñ\82иÑ\81нÑ\96Ñ\82Ñ\8c 'Shift', Ð°Ð±Ð¾ ÐºÐ»Ð°Ñ\86нÑ\96Ñ\82Ñ\8c Ñ\82а Ð¿Ð¾Ñ\82Ñ\8fгнÑ\96Ñ\82Ñ\8c\nмиÑ\88еÑ\8e Ð¿Ð¾ Ð¼Ð°Ð¿Ñ\96. Ð\91Ñ\83дÑ\83Ñ\82Ñ\8c Ð²Ð¸Ð´Ñ\96ленÑ\96 Ð²Ñ\81Ñ\96 Ð¾Ð±â\80\99Ñ\94кÑ\82и, Ñ\89о Ð¿Ð¾Ñ\82Ñ\80апили Ñ\83 Ð¿Ñ\80Ñ\8fмокÑ\83Ñ\82ник\nвидÑ\96леннÑ\8f.\n\n### Ð\97беÑ\80еженнÑ\8f Ð¿Ñ\80авок\n\nÐ\9fÑ\96Ñ\81лÑ\8f Ñ\82ого Ñ\8fк Ð²Ð¸ Ð·Ñ\80обили Ð·Ð¼Ñ\96ни, Ð²Ð¸Ð¿Ñ\80авивÑ\88и Ð´Ð¾Ñ\80огÑ\83, Ñ\87и Ð±Ñ\83динок, Ð²Ð¾Ð½Ð¸\nзалиÑ\88аÑ\8eÑ\82Ñ\8cÑ\81Ñ\8f Ð½Ð° Ð²Ð°Ñ\88омÑ\83 ÐºÐ¾Ð¼Ð¿Ê¼Ñ\8eÑ\82еÑ\80Ñ\96, Ð´Ð¾ÐºÐ¸ Ð²Ð¸ Ð½Ðµ Ð·Ð±ÐµÑ\80ежеÑ\82е Ñ\97Ñ\85 Ð½Ð° Ñ\81еÑ\80веÑ\80Ñ\96.\nÐ\9dе Ñ\85вилÑ\8eйÑ\82еÑ\81Ñ\8c, Ñ\8fкÑ\89о Ð²Ð¸ Ð¿Ñ\80ипÑ\83Ñ\81Ñ\82илиÑ\81Ñ\8c Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ¸, Ð²Ð¸ Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\81каÑ\81Ñ\83ваÑ\82и\nзмÑ\96ни Ð½Ð°Ñ\82иÑ\81нÑ\83вÑ\88и Ð½Ð° ÐºÐ½Ð¾Ð¿ÐºÑ\83 'СкаÑ\81Ñ\83ваÑ\82и', Ð° Ñ\82акож Ð¿Ð¾Ð²ÐµÑ\80нÑ\83Ñ\82и Ð·Ð¼Ñ\96ни â\80\94\nнаÑ\82иÑ\81нÑ\83вÑ\88и 'Ð\9fовеÑ\80нÑ\83Ñ\82и'\n\nÐ\9dаÑ\82иÑ\81нÑ\96Ñ\82Ñ\8c 'Ð\97беÑ\80егÑ\82и', Ñ\89об Ð·Ð°ÐºÑ\96нÑ\87иÑ\82и Ð³Ñ\80Ñ\83пÑ\83 Ð¿Ñ\80авок, Ð½Ð°Ð¿Ñ\80иклад, Ñ\8fкÑ\89о Ð²Ð¸\nзакÑ\96нÑ\87или Ñ\80обоÑ\82Ñ\83 Ð½Ð°Ð´ Ð¾Ð´Ð½Ð¸Ð¼ Ñ\80айоном Ð¼Ñ\96Ñ\81Ñ\82а Ñ\96 Ð±Ð°Ð¶Ð°Ñ\94Ñ\82е Ð¿ÐµÑ\80ейÑ\82и Ð´Ð¾ Ñ\96нÑ\88ого. Ð\92и\nбÑ\83деÑ\82е Ð¼Ð°Ñ\82и Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ñ\96Ñ\81Ñ\82Ñ\8c Ð¿ÐµÑ\80еглÑ\8fнÑ\83Ñ\82и Ñ\82е, Ñ\89о Ð²Ð¸ Ð·Ñ\80обили, Ð° Ñ\80едакÑ\82оÑ\80\nзапÑ\80опонÑ\83Ñ\94 Ð²Ð°Ð¼ ÐºÐ¾Ñ\80иÑ\81нÑ\96 Ð¿Ð¾Ñ\80ади Ñ\82а Ð²Ð¸Ð´Ð°Ñ\81Ñ\82Ñ\8c Ð¿Ð¾Ð¿ÐµÑ\80едженнÑ\8f, Ñ\8fкÑ\89о Ð²Ð°Ñ\88Ñ\96\nпÑ\80авки Ð½Ðµ Ð²Ð¸Ð³Ð»Ñ\8fдаÑ\8eÑ\82Ñ\8c Ð¿Ñ\80авилÑ\8cними.\n\nЯкÑ\89о Ð²Ñ\81е Ð²Ð¸Ð³Ð»Ñ\8fдаÑ\94 Ð´Ð¾Ð±Ñ\80е, Ð²Ð¸ Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð¾Ð´Ð°Ñ\82и ÐºÐ¾Ñ\80оÑ\82ке Ð¿Ð¾Ñ\8fÑ\81неннÑ\8f Ñ\82ого, Ñ\89о Ð²Ð¸\nзÑ\80обили Ñ\82а Ð½Ð°Ñ\82иÑ\81нÑ\83Ñ\82и ÐºÐ½Ð¾Ð¿ÐºÑ\83 'Ð\97беÑ\80егÑ\82и' Ñ\89е Ñ\80аз, Ñ\89об Ð½Ð°Ð´Ñ\96Ñ\81лаÑ\82и Ð·Ð¼Ñ\96ни Ð´Ð¾\n[OpenStreetMap.org](http://www.openstreetmap.org/), Ð´Ðµ Ð²Ð¾Ð½Ð¸ Ñ\81Ñ\82анÑ\83Ñ\82Ñ\8c\nдоÑ\81Ñ\82Ñ\83пнÑ\96 Ð´Ð»Ñ\8f Ð²Ñ\81Ñ\96Ñ\85 Ñ\96нÑ\88иÑ\85 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в Ð´Ð»Ñ\8f Ð¿ÐµÑ\80еглÑ\8fдÑ\83 Ñ\82а Ð²Ð´Ð¾Ñ\81коналеннÑ\8f.\n\nЯкÑ\89о Ð²Ð¸ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е Ð·Ð°ÐºÑ\96нÑ\87иÑ\82и Ð²Ð°Ñ\88Ñ\96 Ð¿Ñ\80авки Ð·Ð° Ð¾Ð´Ð¸Ð½ Ñ\80аз, Ð²Ð¸ Ð¼Ð¾Ð¶ÐµÑ\82е Ð»Ð¸Ñ\88иÑ\82и\nвÑ\96кно Ð· Ñ\80едакÑ\82оÑ\80ом Ð²Ñ\96дкÑ\80иÑ\82им Ñ\96 Ð¿Ð¾Ð²ÐµÑ\80нÑ\83Ñ\82иÑ\81Ñ\8c (на Ñ\82омÑ\83 Ñ\81амомÑ\83 ÐºÐ¾Ð¼Ð¿â\80\99Ñ\8eÑ\82еÑ\80Ñ\96 Ñ\82а\nоглÑ\8fдаÑ\87Ñ\96) Ð´Ð¾ Ñ\80обоÑ\82и Ð¿Ð¾Ñ\82Ñ\96м â\80\94 Ñ\80едакÑ\82оÑ\80 Ð·Ð°Ð¿Ñ\80опонÑ\83Ñ\94 Ð²Ð°Ð¼ Ð²Ñ\96дновиÑ\82и Ð²Ð°Ñ\88Ñ\83\nÑ\80обоÑ\82Ñ\83.\n\n### Ð\9aоÑ\80иÑ\81Ñ\82Ñ\83ваннÑ\8f Ñ\80едакÑ\82оÑ\80ом\n\nÐ\9fеÑ\80елÑ\96к Ð´Ð¾Ñ\81Ñ\82Ñ\83пниÑ\85 ÐºÐ»Ð°Ð²Ñ\96Ñ\88ниÑ\85 ÐºÐ¾Ð¼Ð±Ñ\96наÑ\86Ñ\96й Ð¼Ð¾Ð¶Ð½Ð° Ð¿Ð¾Ð´Ð¸Ð²Ð¸Ñ\82иÑ\81Ñ\8c Ð½Ð°Ñ\82иÑ\81нÑ\83вÑ\88и ÐºÐ½Ð¾Ð¿ÐºÑ\83 `?`.\n\n",
             "roads": "# Дороги\n\nВи можете створювати, виправляти та вилучати дороги з допомогою\nцього редактора. Дороги можуть бути будь-якого типу: автомагістралі,\nстежки, велодоріжки та багато інших — все що частіше за все має\nперетин між собою, повинне бути нанесено на мапу.\n\n###  Виділення\n\nКлацніть по дорозі для того щоб її вибрати. Вона стані підсвіченою\nпо всій довжині, поряд на мапі з’явиться невеличке меню з інструментами,\nа на бічній панелі буде показано додаткову інформацію про дорогу.\n\n### Зміна\n\nДоволі часто вам будуть траплятись дороги, що не збігаються із дорогами\nна супутниковому знімку чи треками GPS. Ви можете виправити їхнє положення.\nАле спочатку вирівняйте положення знімку за треками GPS.\n\nПотім клацніть по дорозі, яку ви маєте намір змінити. Вона стане підсвіченою\nі на ній з’являться контрольні точки, які можна рухати, підлаштовуючи положення\nта форму дороги. Якщо вам потрібно додати нову точку, для підвищення деталізації,\nдодайте її подвійним клацанням на відрізку дороги.\n\nЯкщо дорога повинна з’єднуватись з іншою дорогою, але на мапі лінії не\nз’єднані, підтягніть одну із контрольних точок однієї дорого до іншої, для\nїх з’єднання. Мати з’єднані дороги — дуже важливо для мапи, а особливо\nдля впровадження можливості прокладання маршрутів.\n\nВи також можете обрати інструмент 'Перемістити' або натиснути 'M' для\nпереміщення всієї дороги, повторне клацання зберігає нове положення\nдороги.\n\n### Вилучення\n\nЯкщо дороги накреслені зовсім неправильно і це добре видно на супутникових\nзнімках, а, в ідеалі, ви точно знаєте що їх у цьому місці немає — ви можете\nїх вилучити, що призведе до їх вилучення з мапи.  Проте будьте уважними,\nвилучення, як і інші виправлення, призведуть до змін на мапі, що доступна\nкожному; також зауважте, що супутникові знімки з часом застарівають, отже\nновозбудована дорога буде на них відсутня.\n\nВи можете вилучити дорогу клацнувши на неї для виділення, потім натиснувши\nна значок із смітником чи натиснувши клавішу 'Delete'.\n\n### Створення\n\nЩо робити — знайшли місце де повинна бути дорога, а її там немає? Оберіть\nінструмент 'Лінія' зверху ліворуч або натисніть клавішу '2' для того, щоб\nрозпочати креслення ліній.\n\nКлацніть на початку дороги на мапі для того, щоб розпочати креслення. Якщо\nдорога відгалужується від наявної дороги, розпочніть з місця їх з’єднання.\n\nПотім клацайте вздовж дороги так щоб утворився правильний шлях, відповідно\nдо супутникових знімків та/чи треків GPS. Якщо дорога, яку ви креслите, перетинає\nіншу дорогу, з’єднуйте їх клацаючи в точці їх перехрещення. Для закінчення\nкреслення виконайте подвійне клацання мишею чи натисніть 'Enter' на\nклавіатурі.\n",
             "gps": "# GPS\n\nДані GPS є найнадійнішим джерелом даних для OpenStreetMap. Редактор\nпідтримує локальні треки – файли `.gpx` на вашому комп’ютері. Ви можете\nотримати GPS треки за допомогою численних застосунків для смартфонів\nтак само, як і з допомогою спеціального GPS-обладнання.\n\nДля того, щоб дізнатись як проводити збір GPS-даних прочитайте\n[Збір інформації за допомогою смртфону, GPS, або аркушу паперу](http://learnosm.org/en/mobile-mapping/).\n\nЩоб використати записаний трек для мапінгу, перетягніть GPX-файл з\nтреком на мапу в редакторі. Після того, як його буде розпізнано, він буде\nдоданий на мапу у вигляді світло-фіолетової лінії. Клацніть на меню 'Дані\nмапи' праворуч, щоб показати, приховати або масштабуватись до нового\nшару з GPX-треком.\n\nGPX трек не буде завантажений безпосередньо до OpenStreetMap, кращий\nспосіб його використання — креслити об’єкти на мапі, використовуючи його\nяк орієнтир для додавання об’єктів; трек також можна [завантажити на OpenStreetMap](http://www.openstreetmap.org/trace/create),\nдля використання іншими учасниками.\n",
             "imagery": "# Тло\n\nВикористання аерофотознімків є важливим засобом картографування.\nЗнімки, зроблені з літака, супутника, а також отримані з відкритих джерел\nдоступні в редакторі у меню 'Налаштування тла' праворуч.\n\nТипово вибраним шаром з супутниковими знімками є [Bing Maps](http://www.bing.com/maps/),\nале у різних місцях та на різних масштабах будуть доступні й інші джерела.\nДеякі країни, як, наприклад, Сполучені Штати, Франція, Данія,\nмають дуже високоякісні знімки певних територій.\n\nЗображення тла іноді є зміщеним відносно даних мапи через помилки\nпостачальників знімків. Якщо ви помітили, що дороги є зміщеними\nвідносно знімків, не кидайтесь пересувати їх так, щоб вони збіглися\nз дорогами на знімку. Спробуйте спочатку підлаштувати положення тла так,\nщоб воно збігалося з даними за допомогою підменю 'Виправити зсув'\nнаприкінці меню 'Налаштування тла'.\n",
             "roads": "# Дороги\n\nВи можете створювати, виправляти та вилучати дороги з допомогою\nцього редактора. Дороги можуть бути будь-якого типу: автомагістралі,\nстежки, велодоріжки та багато інших — все що частіше за все має\nперетин між собою, повинне бути нанесено на мапу.\n\n###  Виділення\n\nКлацніть по дорозі для того щоб її вибрати. Вона стані підсвіченою\nпо всій довжині, поряд на мапі з’явиться невеличке меню з інструментами,\nа на бічній панелі буде показано додаткову інформацію про дорогу.\n\n### Зміна\n\nДоволі часто вам будуть траплятись дороги, що не збігаються із дорогами\nна супутниковому знімку чи треками GPS. Ви можете виправити їхнє положення.\nАле спочатку вирівняйте положення знімку за треками GPS.\n\nПотім клацніть по дорозі, яку ви маєте намір змінити. Вона стане підсвіченою\nі на ній з’являться контрольні точки, які можна рухати, підлаштовуючи положення\nта форму дороги. Якщо вам потрібно додати нову точку, для підвищення деталізації,\nдодайте її подвійним клацанням на відрізку дороги.\n\nЯкщо дорога повинна з’єднуватись з іншою дорогою, але на мапі лінії не\nз’єднані, підтягніть одну із контрольних точок однієї дорого до іншої, для\nїх з’єднання. Мати з’єднані дороги — дуже важливо для мапи, а особливо\nдля впровадження можливості прокладання маршрутів.\n\nВи також можете обрати інструмент 'Перемістити' або натиснути 'M' для\nпереміщення всієї дороги, повторне клацання зберігає нове положення\nдороги.\n\n### Вилучення\n\nЯкщо дороги накреслені зовсім неправильно і це добре видно на супутникових\nзнімках, а, в ідеалі, ви точно знаєте що їх у цьому місці немає — ви можете\nїх вилучити, що призведе до їх вилучення з мапи.  Проте будьте уважними,\nвилучення, як і інші виправлення, призведуть до змін на мапі, що доступна\nкожному; також зауважте, що супутникові знімки з часом застарівають, отже\nновозбудована дорога буде на них відсутня.\n\nВи можете вилучити дорогу клацнувши на неї для виділення, потім натиснувши\nна значок із смітником чи натиснувши клавішу 'Delete'.\n\n### Створення\n\nЩо робити — знайшли місце де повинна бути дорога, а її там немає? Оберіть\nінструмент 'Лінія' зверху ліворуч або натисніть клавішу '2' для того, щоб\nрозпочати креслення ліній.\n\nКлацніть на початку дороги на мапі для того, щоб розпочати креслення. Якщо\nдорога відгалужується від наявної дороги, розпочніть з місця їх з’єднання.\n\nПотім клацайте вздовж дороги так щоб утворився правильний шлях, відповідно\nдо супутникових знімків та/чи треків GPS. Якщо дорога, яку ви креслите, перетинає\nіншу дорогу, з’єднуйте їх клацаючи в точці їх перехрещення. Для закінчення\nкреслення виконайте подвійне клацання мишею чи натисніть 'Enter' на\nклавіатурі.\n",
             "gps": "# GPS\n\nДані GPS є найнадійнішим джерелом даних для OpenStreetMap. Редактор\nпідтримує локальні треки – файли `.gpx` на вашому комп’ютері. Ви можете\nотримати GPS треки за допомогою численних застосунків для смартфонів\nтак само, як і з допомогою спеціального GPS-обладнання.\n\nДля того, щоб дізнатись як проводити збір GPS-даних прочитайте\n[Збір інформації за допомогою смртфону, GPS, або аркушу паперу](http://learnosm.org/en/mobile-mapping/).\n\nЩоб використати записаний трек для мапінгу, перетягніть GPX-файл з\nтреком на мапу в редакторі. Після того, як його буде розпізнано, він буде\nдоданий на мапу у вигляді світло-фіолетової лінії. Клацніть на меню 'Дані\nмапи' праворуч, щоб показати, приховати або масштабуватись до нового\nшару з GPX-треком.\n\nGPX трек не буде завантажений безпосередньо до OpenStreetMap, кращий\nспосіб його використання — креслити об’єкти на мапі, використовуючи його\nяк орієнтир для додавання об’єктів; трек також можна [завантажити на OpenStreetMap](http://www.openstreetmap.org/trace/create),\nдля використання іншими учасниками.\n",
             "imagery": "# Тло\n\nВикористання аерофотознімків є важливим засобом картографування.\nЗнімки, зроблені з літака, супутника, а також отримані з відкритих джерел\nдоступні в редакторі у меню 'Налаштування тла' праворуч.\n\nТипово вибраним шаром з супутниковими знімками є [Bing Maps](http://www.bing.com/maps/),\nале у різних місцях та на різних масштабах будуть доступні й інші джерела.\nДеякі країни, як, наприклад, Сполучені Штати, Франція, Данія,\nмають дуже високоякісні знімки певних територій.\n\nЗображення тла іноді є зміщеним відносно даних мапи через помилки\nпостачальників знімків. Якщо ви помітили, що дороги є зміщеними\nвідносно знімків, не кидайтесь пересувати їх так, щоб вони збіглися\nз дорогами на знімку. Спробуйте спочатку підлаштувати положення тла так,\nщоб воно збігалося з даними за допомогою підменю 'Виправити зсув'\nнаприкінці меню 'Налаштування тла'.\n",
                 "welcome": "Вітаємо! Це покрокове керівництво допоможе вам оволодіти основами редагування даних в OpenStreetMap",
                 "practice": "Всі дані, що є в цьому покроковому керівництві використовуються для тренування, і вони не будуть додані до основних даних проекту.",
                 "words": "Керівництво познайомить вас із новими словами та поняттями. Коли ви зустрінете нове слово, воно буде позначене *курсивом*.",
                 "welcome": "Вітаємо! Це покрокове керівництво допоможе вам оволодіти основами редагування даних в OpenStreetMap",
                 "practice": "Всі дані, що є в цьому покроковому керівництві використовуються для тренування, і вони не будуть додані до основних даних проекту.",
                 "words": "Керівництво познайомить вас із новими словами та поняттями. Коли ви зустрінете нове слово, воно буде позначене *курсивом*.",
-                "mouse": "Ви можете використовувати будь-який пристрій для редагування мапи, але для цілей цього керівництва ми маємо на у вазі, що у вас є миша з двома кнопками, лівою та правою. **Якщо ви бажаєте підʼєднати мишу зараз, зробіть це, і клацніть Так.**",
+                "mouse": "Ви можете використовувати будь-який пристрій для редагування мапи, але для цілей цього керівництва ми маємо на увазі, що у вас є миша з двома кнопками, лівою та правою. **Якщо ви бажаєте підʼєднати мишу зараз, зробіть це, і клацніть Так.**",
                 "leftclick": "Якщо вам буде запропоновано клацнути або зробити подвійне клацання мишею, мається на увазі ліва кнопка миші. У разі використання трекпаду – це може бути разове або подвійне торкання одним пальцем. **ЛКМ {num} раз(и).** ",
                 "rightclick": "Іноді вам буде запропоновано клацнути правою кнопкою миші. Це теж саме що  й Ctrl+Клацнути, або торкнутись двома пальцями трекпаду. Якщо на вашій клавіатурі є клавіша 'menu' – вона працює як клацяння правою кнопкою миші. **ПКМ {num} раз(и).**",
                 "chapters": "Поки що все гаразд! Ви можете використовувати кнопки знизу, щоб пропускати розділи, або щоб повернутись до початку розділу, у разі потреби. Розпочнемо! ** Клацніть '{next}' для продовження.**"
                 "leftclick": "Якщо вам буде запропоновано клацнути або зробити подвійне клацання мишею, мається на увазі ліва кнопка миші. У разі використання трекпаду – це може бути разове або подвійне торкання одним пальцем. **ЛКМ {num} раз(и).** ",
                 "rightclick": "Іноді вам буде запропоновано клацнути правою кнопкою миші. Це теж саме що  й Ctrl+Клацнути, або торкнутись двома пальцями трекпаду. Якщо на вашій клавіатурі є клавіша 'menu' – вона працює як клацяння правою кнопкою миші. **ПКМ {num} раз(и).**",
                 "chapters": "Поки що все гаразд! Ви можете використовувати кнопки знизу, щоб пропускати розділи, або щоб повернутись до початку розділу, у разі потреби. Розпочнемо! ** Клацніть '{next}' для продовження.**"
                 "choose_cafe": "**Виберіть {preset} зі списку.**",
                 "feature_editor": "Тепер наша точка позначена, як кафе. Використовуючи редактор об’єктів ви можете додати більше інформації про кафе.",
                 "add_name": "В OpenStreetMap, всі поля є необовʼязковими, і зазвичай, ви можете залишити їх пустими, якщо не впевнені, як їх заповнювати.{br}Давайте представимо, що ми знаємо, що це за кафе, і ми знаємо його назву. **Додайте назу кафе**",
                 "choose_cafe": "**Виберіть {preset} зі списку.**",
                 "feature_editor": "Тепер наша точка позначена, як кафе. Використовуючи редактор об’єктів ви можете додати більше інформації про кафе.",
                 "add_name": "В OpenStreetMap, всі поля є необовʼязковими, і зазвичай, ви можете залишити їх пустими, якщо не впевнені, як їх заповнювати.{br}Давайте представимо, що ми знаємо, що це за кафе, і ми знаємо його назву. **Додайте назу кафе**",
-                "add_close": "РедакÑ\82оÑ\80 Ð¾Ð±Ê¼Ñ\94кÑ\82Ñ\96в Ð·Ð°Ð¿Ð°Ð¼Ê¼Ñ\8fÑ\82овÑ\83Ñ\94 Ð²Ñ\81Ñ\96 Ð·Ð¼Ñ\96ни Ð°Ð²Ñ\82омаÑ\82иÑ\87но. **Ð\9fÑ\96Ñ\81лÑ\8f Ñ\82ого Ñ\8fк Ð²Ð¸ Ð´Ð¾Ð´Ð°Ð»Ð¸ Ð½Ð°Ð·Ð²Ñ\83, Ð½Ð°Ñ\82иÑ\81нÑ\96Ñ\82Ñ\8c Esc, Ð\92вÑ\96д, Ð°Ð±Ð¾ ÐºÐ»Ð°Ñ\86нÑ\96Ñ\82Ñ\8c Ð½Ð° {button}, Ñ\89об Ð·Ð°ÐºÑ\80иÑ\82и Ñ\80едакÑ\82оÑ\80 Ð¾Ð±Ê¼Ñ\94кÑ\82Ñ\96в**",
+                "add_close": "РедакÑ\82оÑ\80 Ð¾Ð±Ê¼Ñ\94кÑ\82Ñ\96в Ð·Ð°Ð¿Ð°Ð¼Ê¼Ñ\8fÑ\82овÑ\83Ñ\94 Ð·Ð¼Ñ\96ни Ð°Ð²Ñ\82омаÑ\82иÑ\87но. **Ð\9fÑ\96Ñ\81лÑ\8f Ñ\82ого, Ñ\8fк Ð²Ð¸ Ð·Ð°ÐºÑ\96нÑ\87иÑ\82е Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ\8f Ð½Ð°Ð·Ð²Ð¸, Ð½Ð°Ñ\82иÑ\81нÑ\96Ñ\82Ñ\8c EsÑ\81, Ð\92вÑ\96д, Ð°Ð±Ð¾ ÐºÐ»Ð°Ñ\86нÑ\96Ñ\82Ñ\8c Ð½Ð° ÐºÐ½Ð¾Ð¿ÐºÑ\83 {button}, Ñ\89об Ð·Ð°ÐºÑ\80иÑ\82и Ñ\80едакÑ\82оÑ\80 Ð¾Ð±Ê¼Ñ\94кÑ\82Ñ\96в.**",
                 "reselect": "Часто точки вже існують, але мають помилки чи не повну інформацію. Ми можемо змінювати наявні точки. **Виділить кафе, яке ви щойно створили.**",
                 "update": "Додаймо додаткову інформацію про наше кафе. Ви можете зазначити його назву, страви якої кухні подаються, адресу. **Змініть інформацію про кафе**",
                 "reselect": "Часто точки вже існують, але мають помилки чи не повну інформацію. Ми можемо змінювати наявні точки. **Виділить кафе, яке ви щойно створили.**",
                 "update": "Додаймо додаткову інформацію про наше кафе. Ви можете зазначити його назву, страви якої кухні подаються, адресу. **Змініть інформацію про кафе**",
-                "update_close": "**Після того як ви закінчите оновлення інформації про кафе, натисніть Esc, Ввід, або клацніть на {button}, щоб закрити редактор обʼєктів**",
+                "update_close": "**Після того, як ви закінчите оновлення кафе, натисніть Esc, Ввід або клацніть на кнопук {button}, щоб закрити редактор обʼєктів.**",
                 "rightclick": "Ви можете клацнути правою кнопкою миші на обʼєкті для того, щоб побачити *меню редагування*, яке містить перелік доступних операцій.  **Клацніть правою кнопкою миші, щоб вибрати точку, яку ви створили та подивитись меню редагування.**",
                 "delete": "Зазвичай ми вилучаємо з мапи обʼєкти, які більше не існують в реальному світі.{br}Вилучення обʼєкта в OpenStreetMap призведе до його вилучення зі всіх мап, якими користуються всі інші, тож переконайтесь, щоб обʼєкт, який ви вилучаєте, дійсно відсутній. **Клацніть на {button}, щоб вилучити точку.**",
                 "undo": "Ви можете скасовувати всі ваші зміни до того, як ви збережете їх в OpenStreetMap. **Клацніть кнопку {button}, щоб скасувати вилучення та повернути точку назад.**",
                 "rightclick": "Ви можете клацнути правою кнопкою миші на обʼєкті для того, щоб побачити *меню редагування*, яке містить перелік доступних операцій.  **Клацніть правою кнопкою миші, щоб вибрати точку, яку ви створили та подивитись меню редагування.**",
                 "delete": "Зазвичай ми вилучаємо з мапи обʼєкти, які більше не існують в реальному світі.{br}Вилучення обʼєкта в OpenStreetMap призведе до його вилучення зі всіх мап, якими користуються всі інші, тож переконайтесь, щоб обʼєкт, який ви вилучаєте, дійсно відсутній. **Клацніть на {button}, щоб вилучити точку.**",
                 "undo": "Ви можете скасовувати всі ваші зміни до того, як ви збережете їх в OpenStreetMap. **Клацніть кнопку {button}, щоб скасувати вилучення та повернути точку назад.**",
                 "add_playground": "*Полігони* використовуються, щоб показати межі об’єктів, наприклад: озер, будинків, території житлової забудови.{br}Їх також використовують для детальнішого нанесення на мапу об’єктів, які зазвичай позначаються точками. **Клацніть на кнопку {button} Полігон, для додавання нового обʼєкта.**",
                 "start_playground": "Нумо додамо ігровий майданчик на мапу, накресливши для цього полігон. Полігони кресляться додаванням точок по контуру об’єкта. **Клацніть або натисніть пробіл, щоб розпочати додавання точок полігону, на куті ігрового майданчика.**",
                 "continue_playground": "Продовжуйте креслити полігон, додаючи точки вздовж краю ігрового майданчика. Можливо використання спільних точок роазом з пішохідною доріжкою.{br}Порада: Для того, щоб уникнути прилипання точок до інших обʼєктів, натисніть та утримуйте Alt. **Продовжуйте креслення полігону ігрового майданчика**",
                 "add_playground": "*Полігони* використовуються, щоб показати межі об’єктів, наприклад: озер, будинків, території житлової забудови.{br}Їх також використовують для детальнішого нанесення на мапу об’єктів, які зазвичай позначаються точками. **Клацніть на кнопку {button} Полігон, для додавання нового обʼєкта.**",
                 "start_playground": "Нумо додамо ігровий майданчик на мапу, накресливши для цього полігон. Полігони кресляться додаванням точок по контуру об’єкта. **Клацніть або натисніть пробіл, щоб розпочати додавання точок полігону, на куті ігрового майданчика.**",
                 "continue_playground": "Продовжуйте креслити полігон, додаючи точки вздовж краю ігрового майданчика. Можливо використання спільних точок роазом з пішохідною доріжкою.{br}Порада: Для того, щоб уникнути прилипання точок до інших обʼєктів, натисніть та утримуйте Alt. **Продовжуйте креслення полігону ігрового майданчика**",
-                "finish_playground": "Закінчіть креслення полігону натиснувши Ввід, або клацніть знов на його першу або останню точку. **Закінчіть креслення полігону ігрового майданчика**",
+                "finish_playground": "Закінчіть креслення полігону, натиснувши Ввід або клацнувши на першу чи останню точку. **Закінчить креслення полігону для ігрового майданчика.**",
                 "search_playground": "**Знайдіть '{preset}'.**",
                 "choose_playground": "**Виберіть {preset} зі списку.**",
                 "add_field": "Цей ігровий майданчик не має назви, тож ми не будемо нічого додавати в поле Назва.{br}Замість цього додайте інші відомості про нього в поле Опис. **Відкрийте перелік в меню «Додати поле»**",
                 "search_playground": "**Знайдіть '{preset}'.**",
                 "choose_playground": "**Виберіть {preset} зі списку.**",
                 "add_field": "Цей ігровий майданчик не має назви, тож ми не будемо нічого додавати в поле Назва.{br}Замість цього додайте інші відомості про нього в поле Опис. **Відкрийте перелік в меню «Додати поле»**",
                 "intersect": "Клацайте мишею або натискайте пробіл для продовження креслення лінії.{br}Дороги, як і більшість ліній інших типів, є частиною більших мереж. Дуже важливо, щоб ці лінії були правильно зʼєднані, щоб застосунки для прокладання маршрутів працювали правильно. **Клацніть на {name} для зʼєднання двох ліній.**",
                 "retry_intersect": "Дорога повинна мати перехрестя з {name}. Спробуйте ще раз!",
                 "continue_line": "Продовжуйте креслити лінію нової дороги. Запамʼятайте, ви можете перетягувати та змінювати масштаб мапи за потреби.{br}Для того, щоб закінчити креслення, клацніть ще раз на останю точку. **Закінчіть креслення дороги.**",
                 "intersect": "Клацайте мишею або натискайте пробіл для продовження креслення лінії.{br}Дороги, як і більшість ліній інших типів, є частиною більших мереж. Дуже важливо, щоб ці лінії були правильно зʼєднані, щоб застосунки для прокладання маршрутів працювали правильно. **Клацніть на {name} для зʼєднання двох ліній.**",
                 "retry_intersect": "Дорога повинна мати перехрестя з {name}. Спробуйте ще раз!",
                 "continue_line": "Продовжуйте креслити лінію нової дороги. Запамʼятайте, ви можете перетягувати та змінювати масштаб мапи за потреби.{br}Для того, щоб закінчити креслення, клацніть ще раз на останю точку. **Закінчіть креслення дороги.**",
-                "choose_category_road": "**Виберіть {category} зі списку**",
+                "choose_category_road": "**Виберіть {category} зі списку.**",
                 "choose_preset_residential": "Існує багато різних типів доріг, ця – Вулиця. **Виберіть тип – {preset}** ",
                 "retry_preset_residential": "Ви не не обрали тип {preset}. **Клацніть тут, щоб спробувати ще раз**",
                 "choose_preset_residential": "Існує багато різних типів доріг, ця – Вулиця. **Виберіть тип – {preset}** ",
                 "retry_preset_residential": "Ви не не обрали тип {preset}. **Клацніть тут, щоб спробувати ще раз**",
-                "name_road": "**Ð\94одайÑ\82е Ð½Ð°Ð·Ð²Ñ\83 Ð´Ð¾Ñ\80оги Ñ\82а Ð½Ð°Ñ\82иÑ\81нÑ\96Ñ\82Ñ\8c Esc, Ð\92вÑ\96д, Ð°Ð±Ð¾ ÐºÐ»Ð°Ñ\86нÑ\96Ñ\82Ñ\8c Ð½Ð° ÐºÐ½Ð¾Ð¿ÐºÑ\83 {button}, Ñ\89об Ð·Ð°ÐºÑ\80иÑ\82и Ñ\80едакÑ\82оÑ\80 Ð¾Ð±Ê¼єктів.**",
+                "name_road": "**Ð\94одайÑ\82е Ð½Ð°Ð·Ð²Ñ\83 Ð´Ð¾Ñ\80озÑ\96, Ð¿Ð¾Ñ\82Ñ\96м Ð½Ð°Ñ\82иÑ\81нÑ\96Ñ\82Ñ\8c Esc, Ð\92вÑ\96д Ð°Ð±Ð¾ ÐºÐ»Ð°Ñ\86нÑ\96Ñ\82Ñ\8c Ð½Ð° ÐºÐ½Ð¾Ð¿ÐºÑ\83 {button}, Ñ\89об Ð·Ð°ÐºÑ\80иÑ\82и Ñ\80едакÑ\82оÑ\80 Ð¾Ð±â\80\99єктів.**",
                 "did_name_road": "Виглядає добре! Далі ви дізнаєтесь, як оновлювати форму ліній.",
                 "update_line": "Іноді виникає потреба змінити форму наявної лінії. Ось ця дорога виглядає не дуже добре.",
                 "add_node": "Ми можемо додавати точки для покращення геометрії ліній. Один зі способів додати точку до лінії – подвійне клацання на лінії в місці де потрібно її додати. **Подвійним клацанням додайте точку до лінії.**",
                 "did_name_road": "Виглядає добре! Далі ви дізнаєтесь, як оновлювати форму ліній.",
                 "update_line": "Іноді виникає потреба змінити форму наявної лінії. Ось ця дорога виглядає не дуже добре.",
                 "add_node": "Ми можемо додавати точки для покращення геометрії ліній. Один зі способів додати точку до лінії – подвійне клацання на лінії в місці де потрібно її додати. **Подвійним клацанням додайте точку до лінії.**",
                 "rightclick_tank": "**Клацніть правою кнопкою миші на резервуарі, який ви накреслили, щоб відкрити меню редагування.**",
                 "circle_tank": "**Клацніть кнопку {button}, щоб зробити резервуар циліндричної форми.**",
                 "retry_circle": "Ви не клацнули на кнопку Закруглити. Спробуйте ще.",
                 "rightclick_tank": "**Клацніть правою кнопкою миші на резервуарі, який ви накреслили, щоб відкрити меню редагування.**",
                 "circle_tank": "**Клацніть кнопку {button}, щоб зробити резервуар циліндричної форми.**",
                 "retry_circle": "Ви не клацнули на кнопку Закруглити. Спробуйте ще.",
-                "play": "Гарна робота!Спробуйте накресли кілька будинків, а також випробуйте інші команди з меню редагування. **Коли ви будете готові перейти до наступного розділу, клацніть '{next}'.**"
+                "play": "Гарна робота! Спробуйте накресли кілька будинків, а також випробуйте інші команди з меню редагування. **Коли ви будете готові перейти до наступного розділу, клацніть '{next}'.**"
             },
             "startediting": {
                 "title": "Розпочати редагування",
             },
             "startediting": {
                 "title": "Розпочати редагування",
                 "start": "Розпочати!"
             }
         },
                 "start": "Розпочати!"
             }
         },
+        "shortcuts": {
+            "title": "Клавішні комбінації",
+            "key": {
+                "alt": "Alt",
+                "backspace": "Backspace",
+                "cmd": "Cmd",
+                "ctrl": "Ctrl",
+                "delete": "Delete",
+                "del": "Del",
+                "end": "End",
+                "enter": "Enter",
+                "esc": "Esc",
+                "home": "Home",
+                "option": "Option",
+                "pause": "Pause",
+                "pgdn": "PgDn",
+                "pgup": "PgUp",
+                "return": "Return",
+                "shift": "Shift",
+                "space": "Space"
+            },
+            "gesture": {
+                "drag": "потягнути"
+            },
+            "or": "-або-",
+            "browsing": {
+                "title": "Пересування",
+                "navigation": {
+                    "title": "Навігація",
+                    "pan": "Перетягування мапи",
+                    "pan_more": "Пересунути мапу на один екран",
+                    "zoom": "Наблизитись / Віддалитись",
+                    "zoom_more": "Швидко Наблизитись / Віддалитись"
+                },
+                "help": {
+                    "title": "Довідка",
+                    "help": "Показати довідку/документацію",
+                    "keyboard": "Покзати комбінації клавіш"
+                },
+                "display_options": {
+                    "title": "Параметри відображення",
+                    "background": "Налаштування тла",
+                    "background_switch": "Перейти до останнього фонового зображення",
+                    "map_data": "Налаштування даних мапи",
+                    "fullscreen": "Перейти в повноекранний режим",
+                    "wireframe": "Каркасний режим",
+                    "minimap": "Показати мінімапу"
+                },
+                "selecting": {
+                    "title": "Виділення обʼєктів",
+                    "select_one": "ВІділення одного обʼєкта",
+                    "select_multi": "Виділення кількох обʼєктів",
+                    "lasso": "Виділення обʼєктів - \"Лассо\""
+                },
+                "with_selected": {
+                    "title": "Операції з виділеними обʼєктами",
+                    "infobox": "Інформація/Довжина обʼєкта",
+                    "edit_menu": "Меню редагування"
+                },
+                "vertex_selected": {
+                    "title": "Операції з виділеними точками",
+                    "previous": "Перейти до попередньої точки",
+                    "next": "Перейти до наступної точки",
+                    "first": "Перейти до першої точки",
+                    "last": "Перейти до останньої точки",
+                    "change_parent": "Обрати іншу лінію"
+                }
+            },
+            "editing": {
+                "title": "Редагування",
+                "drawing": {
+                    "title": "Креслення",
+                    "add_point": "Режим 'Додавання точок'",
+                    "add_line": "Режим 'Додавання ліній'",
+                    "add_area": "Режим 'Додавання полігонів'",
+                    "place_point": "Додати точку на мапу",
+                    "disable_snap": "Утримувати для вимкнення прилипання",
+                    "stop_line": "Закінчення креслення лінії/полігона"
+                },
+                "operations": {
+                    "title": "Операції",
+                    "continue_line": "Продовжити лінію від видаленої точки",
+                    "merge": "Обʼєднати (злити) виділені обʼєкти",
+                    "disconnect": "Розʼєднати обʼєкти у виділеній точці",
+                    "split": "Розрізати лінію на дві у виділеній точці",
+                    "reverse": "Розвернути напрямок лінії",
+                    "move": "Перемістити виділені обʼєкти",
+                    "rotate": "Обертання вибілених обʼєктів",
+                    "orthogonalize": "Спрямлення лініий / Випрямленя кутів",
+                    "circularize": "Зробити коло із замкненої лінії",
+                    "reflect_long": "Віддзеркалення обʼєктів через їх довгі сторони.",
+                    "reflect_short": "Віддзеркалення обʼєктів через їх короткі сторони.",
+                    "delete": "Вилучення виділенних обʼєктів"
+                },
+                "commands": {
+                    "title": "Команди",
+                    "copy": "Копіювання виділених обʼєктів",
+                    "paste": "Вставка скопійованих обʼєктів",
+                    "undo": "Скасувати останню дію",
+                    "redo": "Повернути останю дію",
+                    "save": "Зберегти зміни"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                     "label": "SSID (Назва мережі)"
                 },
                 "kerb": {
                     "label": "SSID (Назва мережі)"
                 },
                 "kerb": {
-                    "label": "Ð\97ʼÑ\97зд Ð· Ð±Ð¾Ñ\80дÑ\8eÑ\80а"
+                    "label": "Ð\91оÑ\80дÑ\8eÑ\80"
                 },
                 "lamp_type": {
                     "label": "Тип"
                 },
                 "lamp_type": {
                     "label": "Тип"
                 "maxstay": {
                     "label": "Максимальний час"
                 },
                 "maxstay": {
                     "label": "Максимальний час"
                 },
+                "maxweight": {
+                    "label": "Обмеження ваги"
+                },
                 "mtb/scale": {
                     "label": "Рівень складності для гірських велосипедів",
                     "options": {
                 "mtb/scale": {
                     "label": "Рівень складності для гірських велосипедів",
                     "options": {
                     "name": "Електрик",
                     "terms": "електрик, електрика, струм, напруга, опір"
                 },
                     "name": "Електрик",
                     "terms": "електрик, електрика, струм, напруга, опір"
                 },
+                "craft/electronics_repair": {
+                    "name": "Ремонт електроніки",
+                    "terms": "телевізор,комп'ютер,смартфон,планшет,гаджет"
+                },
                 "craft/gardener": {
                     "name": "Садівник",
                     "terms": "Садівник, сад, рослини, дерево. кущ"
                 "craft/gardener": {
                     "name": "Садівник",
                     "terms": "Садівник, сад, рослини, дерево. кущ"
                     "name": "Вело-доріжка",
                     "terms": "Cycle Path, dtkj-ljhsrf, веодоріжка"
                 },
                     "name": "Вело-доріжка",
                     "terms": "Cycle Path, dtkj-ljhsrf, веодоріжка"
                 },
+                "highway/elevator": {
+                    "name": "Ліфт",
+                    "terms": "ліфт,підйомник"
+                },
                 "highway/footway": {
                     "name": "Пішохідна доріжка",
                     "terms": "стежка,маршрут,доріжка,тротуар,пішохідна,шлях"
                 "highway/footway": {
                     "name": "Пішохідна доріжка",
                     "terms": "стежка,маршрут,доріжка,тротуар,пішохідна,шлях"
                     "name": "Антикварний магазин  ",
                     "terms": "антикваріат"
                 },
                     "name": "Антикварний магазин  ",
                     "terms": "антикваріат"
                 },
+                "shop/appliance": {
+                    "name": "Побутова техніка",
+                    "terms": "магазин,холодильник,пральна машина,кондиціонер,духовка,пічка,посудомийнк машина"
+                },
                 "shop/art": {
                     "name": "Художній салон",
                     "terms": "магазин,салон,картини,мистецтво,ремесла,вироби"
                 "shop/art": {
                     "name": "Художній салон",
                     "terms": "магазин,салон,картини,мистецтво,ремесла,вироби"
index 5e726524396a508e050d576ffa378023bf7fe59d..3e5fff516d4ea3d7ce6f14253527ed38bbd98ae3 100644 (file)
                 "description": "Di chuyển và thu phóng bản đồ."
             },
             "draw_area": {
                 "description": "Di chuyển và thu phóng bản đồ."
             },
             "draw_area": {
-                "tail": "Nhấn chuột để thêm nốt vào vùng. Nhấn nốt đầu tiên để hoàn thành vùng."
+                "tail": "Nhấn chuột để đặt các nốt của vùng. Nhấn chuột vào nốt đầu tiên để hoàn thành vùng."
             },
             "draw_line": {
             },
             "draw_line": {
-                "tail": "Nhấn chuột để thêm nốt vào đường kẻ. Nhấn vào đường khác để nối đường lại. Nhấn đúp để hoàn thành đường."
+                "tail": "Nhấn chuột để đặt thêm nốt vào đường kẻ. Nhấn vào đường khác để nối đường lại. Nhấn đúp để hoàn thành đường."
             }
         },
         "operations": {
             }
         },
         "operations": {
             "help_link_url": "https://wiki.openstreetmap.org/wiki/Vi:FAQ?setlang=vi#T.C3.B4i_v.E1.BB.ABa_thay_.C4.91.E1.BB.95i_b.E1.BA.A3n_.C4.91.E1.BB.93._L.C3.A0m_sao_xem_.C4.91.C6.B0.E1.BB.A3c_c.C3.A1c_thay_.C4.91.E1.BB.95i_c.E1.BB.A7a_t.C3.B4i.3F"
         },
         "confirm": {
             "help_link_url": "https://wiki.openstreetmap.org/wiki/Vi:FAQ?setlang=vi#T.C3.B4i_v.E1.BB.ABa_thay_.C4.91.E1.BB.95i_b.E1.BA.A3n_.C4.91.E1.BB.93._L.C3.A0m_sao_xem_.C4.91.C6.B0.E1.BB.A3c_c.C3.A1c_thay_.C4.91.E1.BB.95i_c.E1.BB.A7a_t.C3.B4i.3F"
         },
         "confirm": {
+            "okay": "OK",
             "cancel": "Hủy bỏ"
         },
         "splash": {
             "cancel": "Hủy bỏ"
         },
         "splash": {
         "validations": {
             "disconnected_highway": "Đường không nối liền",
             "disconnected_highway_tooltip": "Đường phải nối liền với đường khác hoặc lối ra vào tòa nhà.",
         "validations": {
             "disconnected_highway": "Đường không nối liền",
             "disconnected_highway_tooltip": "Đường phải nối liền với đường khác hoặc lối ra vào tòa nhà.",
+            "old_multipolygon": "Thẻ được gắn vào lối bên ngoài của tổ hợp đa giác",
+            "old_multipolygon_tooltip": "Kiểu tổ hợp đa giác này đã bị phản đối. Xin vui lòng gắn các thẻ vào chính tổ hợp đa giác thay vì lối bên ngoài.",
             "untagged_point": "Địa điểm không có thẻ",
             "untagged_point_tooltip": "Chọn loại điểm.",
             "untagged_line": "Đường kẻ không có thẻ",
             "untagged_point": "Địa điểm không có thẻ",
             "untagged_point_tooltip": "Chọn loại điểm.",
             "untagged_line": "Đường kẻ không có thẻ",
         "help": {
             "title": "Trợ giúp",
             "help": "# Trợ giúp\n\nĐây là trình vẽ của [OpenStreetMap](http://www.openstreetmap.org/), bản đồ có mã nguồn mở và dữ liệu mở cho phép mọi người cùng sửa đổi. Bạn có thể sử dụng chương trình này để bổ sung và cập nhật dữ liệu bản đồ tại khu vực của bạn. Bạn có thể cải tiến bản đồ thế giới mở để cho mọi người sử dụng.\n\nCác sửa đổi của bạn trên bản đồ này sẽ xuất hiện cho mọi người dùng OpenStreetMap. Để sửa bản đồ, bạn cần phải [đăng nhập](https://www.openstreetmap.org/login).\n\n[Trình vẽ iD](http://ideditor.com/) là một dự án cộng tác và xuất bản [tất cả mã nguồn tại GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "Trợ giúp",
             "help": "# Trợ giúp\n\nĐây là trình vẽ của [OpenStreetMap](http://www.openstreetmap.org/), bản đồ có mã nguồn mở và dữ liệu mở cho phép mọi người cùng sửa đổi. Bạn có thể sử dụng chương trình này để bổ sung và cập nhật dữ liệu bản đồ tại khu vực của bạn. Bạn có thể cải tiến bản đồ thế giới mở để cho mọi người sử dụng.\n\nCác sửa đổi của bạn trên bản đồ này sẽ xuất hiện cho mọi người dùng OpenStreetMap. Để sửa bản đồ, bạn cần phải [đăng nhập](https://www.openstreetmap.org/login).\n\n[Trình vẽ iD](http://ideditor.com/) là một dự án cộng tác và xuất bản [tất cả mã nguồn tại GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# Sửa đổi & Lưu giữ\n\nĐây là một chương trình vẽ trực tuyến, hiện tại bạn đang truy cập nó qua một trang Web.\n\n### Lựa chọn Đối tượng\n\nĐể lựa chọn một đối tượng, thí dụ con đường hay một điểm, nhấn chuột vào nó trên bản đồ. Khi đối tượng được chọn, bạn sẽ thấy một biểu mẫu ở bên phải chứa các chi tiết về đối tượng, cũng như một trình đơn giống bảng màu của họa sĩ chứa các tác vụ để thực hiện với đối tượng.\n\nĐể lựa chọn nhiều đối tượng cùng lúc, nhấn giữ phím Shift và nhấn chuột vào từng đối tượng một. Thay thế, nhấn giữ Shift và kéo chuột trên bản đồ để vẽ hộp bao. Các đối tượng nằm vào hộp này sẽ được chọn.\n\n### Lưu giữ Sửa đổi\n\nKhi bạn sửa đổi các tuyến đường, tòa nhà, và địa điểm, các thay đổi này được lưu giữ trên máy cho đến khi bạn đăng nó lên máy chủ. Đừng lo nhầm lẫn: chỉ việc nhấn vào các nút Hoàn tác và Làm lại.\n\nNhấn “Lưu” để hoàn thành các sửa đổi, thí dụ bạn vừa vẽ xong một khu và muốn bắt đầu vẽ khu mới. Trình vẽ sẽ trình bày các thay đổi để bạn xem lại, cũng như các gợi ý và cảnh báo nếu bạn đã sửa nhầm lẫn.\n\nSau khi vẽ xong, bạn sẽ nhập lời tóm lược các thay đổi và nhấn “Lưu” lần nữa để đăng các thay đổi lên [OpenStreetMap.org](http://www.openstreetmap.org/). Các thay đổi sẽ xuất hiện tại trang web này để mọi người xem và cập nhật nếu có sai sót.\n\nNếu bạn chưa xong mà cần rời khỏi máy tính, bạn có thể đóng trình vẽ này. Lần sau trở lại, trình vẽ này sẽ cho phép khôi phục các thay đổi chưa lưu của bạn (miễn là bạn sử dụng cùng máy tính và trình duyệt).\n\n### Sử dụng Chương trình\n\nXem [bảng phím tắt đầy đủ](http://wiki.openstreetmap.org/wiki/Vi:iD/Shortcuts?uselang=vi).\n",
+            "editing_saving": "# Sửa đổi & Lưu giữ\n\nĐây là một chương trình vẽ trực tuyến, hiện tại bạn đang truy cập nó qua một trang Web.\n\n### Lựa chọn Đối tượng\n\nĐể lựa chọn một đối tượng, thí dụ con đường hay một điểm, nhấn chuột vào nó trên bản đồ. Khi đối tượng được chọn, bạn sẽ thấy một biểu mẫu ở bên phải chứa các chi tiết về đối tượng, cũng như một trình đơn chứa các tác vụ để thực hiện với đối tượng.\n\nĐể lựa chọn nhiều đối tượng cùng lúc, nhấn giữ phím Shift và nhấn chuột vào từng đối tượng một. Thay thế, nhấn giữ Shift và kéo chuột trên bản đồ để vẽ hộp bao. Các đối tượng nằm vào hộp này sẽ được chọn.\n\n### Lưu giữ Sửa đổi\n\nKhi bạn sửa đổi các tuyến đường, tòa nhà, và địa điểm, các thay đổi này được lưu giữ trên máy cho đến khi bạn đăng nó lên máy chủ. Đừng lo nhầm lẫn: chỉ việc nhấn vào các nút “Hoàn tác” và “Làm lại”.\n\nNhấn “Lưu” để hoàn thành các sửa đổi, thí dụ bạn vừa vẽ xong một khu và muốn bắt đầu vẽ khu mới. Trình vẽ sẽ trình bày các thay đổi để bạn xem lại, cũng như các gợi ý và cảnh báo nếu bạn đã sửa nhầm lẫn.\n\nSau khi vẽ xong, bạn sẽ nhập lời tóm lược các thay đổi và nhấn “Lưu” lần nữa để đăng các thay đổi lên [OpenStreetMap.org](http://www.openstreetmap.org/). Các thay đổi sẽ xuất hiện tại trang web này để mọi người xem và cập nhật nếu có sai sót.\n\nNếu bạn chưa xong mà cần rời khỏi máy tính, bạn có thể đóng trình vẽ này. Lần sau trở lại, trình vẽ này sẽ cho phép khôi phục các thay đổi chưa lưu của bạn (miễn là bạn sử dụng cùng máy tính và trình duyệt).\n\n### Sử dụng Chương trình\n\nBấm phím `?` để xem bảng phím tắt đầy đủ.\n",
             "roads": "# Đường sá\n\nTrình vẽ này cho phép tạo, sửa, và xóa các con đường. Con đường không nhất thiết phải là đường phố: có thể vẽ đường cao tốc, đường mòn, đường đi bộ, đường xe đạp…\n\n### Lựa chọn\n\nNhấn vào con đường để lựa chọn nó. Con đường sẽ được tô sáng, một trình đơn công cụ sẽ xuất hiện bên cạnh đường, và thanh bên sẽ trình bày các chi tiết của con đường.\n\n### Sửa đổi\n\nNhiều khi bạn sẽ gặp những con đường bị chệch đối với hình nền hoặc tuyến đường GPS. Bạn có thể chỉnh lại các con đường này để chính xác hơn.\n\nTrước tiên, nhấn vào con đường cần chỉnh lại. Đường sẽ được tô sáng và các nốt sẽ xuất hiện để bạn kéo sang vị trí đúng hơn. Để thêm chi tiết, nhấn đúp vào một khúc đường chưa có nốt, và một nốt mới sẽ xuất hiện để bạn kéo.\n\nNếu con đường nối với đường khác trên thực tiếp, nhưng trên bản đồ thì chưa nối liền, hãy kéo một nốt của một con đường sang đường kia để nối liền hai con đường. Nối liền các đường tại giao lộ là một điều rất quan trọng tăng khả năng chỉ đường.\n\nĐể di chuyển toàn bộ con đường cùng lúc, nhấn vào công cụ “Di chuyển” hoặc nhấn phím tắt `M`, chuyển chuột sang vị trí mới, rồi nhấn chuột để hoàn thành việc di chuyển.\n\n### Xóa\n\nHãy tưởng tượng bạn gặp một con đường hoàn toàn sai: bạn không thấy được con đường trong hình ảnh trên không và, theo lý tưởng, cũng đã ghé vào chỗ đó để xác nhận rằng nó không tồn tại. Nếu trường hợp này, bạn có thể xóa con đường hoàn toàn khỏi bản đồ. Xin cẩn thận khi xóa đối tượng: giống như mọi sửa đổi khác, mọi người sẽ thấy được kết quả. Ngoài ra, hình ảnh trên không nhiều khi lỗi thời – con đường có thể mới xây – thành thử tốt nhất là ghé vào chỗ đó để quan sát chắc chắn, nếu có thể.\n\nĐể xóa một con đường, lựa chọn nó bằng cách nhấn vào nó, rồi nhấn vào hình thùng rác hoặc nhấn phím Delete.\n\n### Tạo mới\n\nBạn có tìm ra một con đường chưa được vẽ trên bản đồ? Hãy bắt đầu vẽ đường kẻ mới bằng cách nhấn vào nút “Đường” ở phía trên bên trái của trình vẽ, hoặc nhấn phím tắt `2`.\n\nNhấn vào bản đồ tại điểm bắt đầu của con đường. Hoặc nếu con đường chia ra từ đường khác đã tồn tại, trước tiên nhấn chuột tại giao lộ giữa hai con đường này.\n\nSau đó, nhấn chuột lần lượt theo lối đường dùng hình ảnh trên không hoặc tuyến đường GPS. Khi nào con đường giao với đường khác, nhấn chuột tại giao lộ để nối liền hai con đường này. Sau khi vẽ xong, nhấn đúp vào nốt cuối dùng hoặc nhấn phím Return hay Enter.\n",
             "gps": "# GPS\n\nHệ thống định vị toàn cầu, còn gọi GPS, là nguồn dữ liệu tin tưởng nhất trong dự án OpenStreetMap. Trình vẽ này hỗ trợ các tuyến đường thu thập được từ máy GPS, tức tập tin `.gpx` trên máy tính của bạn. Bạn có thể thu loại tuyến đường GPS này bằng một ứng dụng cài đặt trên điện thoại thông minh hoặc máy thu GPS.\n\nĐọc thêm về cách thu thập dữ liệu bằng GPS tại “[Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/)”.\n\nĐể sử dụng một tuyến đường GPX trong việc vẽ bản đồ, kéo thả tập tin GPX vào trình vẽ bản đồ này. Nếu trình vẽ nhận ra tuyến đường, tuyến đường sẽ được tô màu hồng sẫm trên bản đồ. Mở hộp “Dữ liệu Bản đồ” ở thanh công cụ bên phải để bật tắt hoặc thu phóng lớp GPX này.\n\nTuyến đường GPX không được tải trực tiếp lên OpenStreetMap. Cách tốt nhất để sử dụng nó là vạch đường theo nó trên bản đồ, cũng như [tải nó lên OpenStreetMap](http://www.openstreetmap.org/trace/create) để cho người khác sử dụng.\n",
             "imagery": "# Hình ảnh\n\nẢnh hàng không là tài nguyên quan trọng trong việc vẽ bản đồ. Có sẵn một số nguồn hình ảnh chụp từ máy bay và vệ tinh, cũng như một số nguồn thông tin mở, trong trình đơn “Tùy chọn Hình nền” ở bên phải của trình vẽ này.\n\nTheo mặc định, trình vẽ hiển thị lớp trên không của [Bản đồ Bing](http://www.bing.com/maps/), nhưng có sẵn nguồn khác tùy theo vị trí đang xem trong trình duyệt. Ngoài ra có hình ảnh rất rõ tại nhiều vùng ở một số quốc gia như Hoa Kỳ, Pháp, và Đan Mạch.\n\nHình ảnh đôi khi bị chệch đối với dữ liệu bản đồ vì dịch vụ hình ảnh có lỗi. Nếu bạn nhận thấy nhiều con đường bị chệch đối với hình nền, xin đừng di chuyển các đường này để trùng hợp với hình ảnh. Thay vì di chuyển các con đường, hãy chỉnh lại hình ảnh để phù hợp với dữ liệu tồn tại bằng cách nhấn “Chỉnh lại hình nền bị chệch” ở cuối hộp Tùy chọn Hình nền.\n",
             "roads": "# Đường sá\n\nTrình vẽ này cho phép tạo, sửa, và xóa các con đường. Con đường không nhất thiết phải là đường phố: có thể vẽ đường cao tốc, đường mòn, đường đi bộ, đường xe đạp…\n\n### Lựa chọn\n\nNhấn vào con đường để lựa chọn nó. Con đường sẽ được tô sáng, một trình đơn công cụ sẽ xuất hiện bên cạnh đường, và thanh bên sẽ trình bày các chi tiết của con đường.\n\n### Sửa đổi\n\nNhiều khi bạn sẽ gặp những con đường bị chệch đối với hình nền hoặc tuyến đường GPS. Bạn có thể chỉnh lại các con đường này để chính xác hơn.\n\nTrước tiên, nhấn vào con đường cần chỉnh lại. Đường sẽ được tô sáng và các nốt sẽ xuất hiện để bạn kéo sang vị trí đúng hơn. Để thêm chi tiết, nhấn đúp vào một khúc đường chưa có nốt, và một nốt mới sẽ xuất hiện để bạn kéo.\n\nNếu con đường nối với đường khác trên thực tiếp, nhưng trên bản đồ thì chưa nối liền, hãy kéo một nốt của một con đường sang đường kia để nối liền hai con đường. Nối liền các đường tại giao lộ là một điều rất quan trọng tăng khả năng chỉ đường.\n\nĐể di chuyển toàn bộ con đường cùng lúc, nhấn vào công cụ “Di chuyển” hoặc nhấn phím tắt `M`, chuyển chuột sang vị trí mới, rồi nhấn chuột để hoàn thành việc di chuyển.\n\n### Xóa\n\nHãy tưởng tượng bạn gặp một con đường hoàn toàn sai: bạn không thấy được con đường trong hình ảnh trên không và, theo lý tưởng, cũng đã ghé vào chỗ đó để xác nhận rằng nó không tồn tại. Nếu trường hợp này, bạn có thể xóa con đường hoàn toàn khỏi bản đồ. Xin cẩn thận khi xóa đối tượng: giống như mọi sửa đổi khác, mọi người sẽ thấy được kết quả. Ngoài ra, hình ảnh trên không nhiều khi lỗi thời – con đường có thể mới xây – thành thử tốt nhất là ghé vào chỗ đó để quan sát chắc chắn, nếu có thể.\n\nĐể xóa một con đường, lựa chọn nó bằng cách nhấn vào nó, rồi nhấn vào hình thùng rác hoặc nhấn phím Delete.\n\n### Tạo mới\n\nBạn có tìm ra một con đường chưa được vẽ trên bản đồ? Hãy bắt đầu vẽ đường kẻ mới bằng cách nhấn vào nút “Đường” ở phía trên bên trái của trình vẽ, hoặc nhấn phím tắt `2`.\n\nNhấn vào bản đồ tại điểm bắt đầu của con đường. Hoặc nếu con đường chia ra từ đường khác đã tồn tại, trước tiên nhấn chuột tại giao lộ giữa hai con đường này.\n\nSau đó, nhấn chuột lần lượt theo lối đường dùng hình ảnh trên không hoặc tuyến đường GPS. Khi nào con đường giao với đường khác, nhấn chuột tại giao lộ để nối liền hai con đường này. Sau khi vẽ xong, nhấn đúp vào nốt cuối dùng hoặc nhấn phím Return hay Enter.\n",
             "gps": "# GPS\n\nHệ thống định vị toàn cầu, còn gọi GPS, là nguồn dữ liệu tin tưởng nhất trong dự án OpenStreetMap. Trình vẽ này hỗ trợ các tuyến đường thu thập được từ máy GPS, tức tập tin `.gpx` trên máy tính của bạn. Bạn có thể thu loại tuyến đường GPS này bằng một ứng dụng cài đặt trên điện thoại thông minh hoặc máy thu GPS.\n\nĐọc thêm về cách thu thập dữ liệu bằng GPS tại “[Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/)”.\n\nĐể sử dụng một tuyến đường GPX trong việc vẽ bản đồ, kéo thả tập tin GPX vào trình vẽ bản đồ này. Nếu trình vẽ nhận ra tuyến đường, tuyến đường sẽ được tô màu hồng sẫm trên bản đồ. Mở hộp “Dữ liệu Bản đồ” ở thanh công cụ bên phải để bật tắt hoặc thu phóng lớp GPX này.\n\nTuyến đường GPX không được tải trực tiếp lên OpenStreetMap. Cách tốt nhất để sử dụng nó là vạch đường theo nó trên bản đồ, cũng như [tải nó lên OpenStreetMap](http://www.openstreetmap.org/trace/create) để cho người khác sử dụng.\n",
             "imagery": "# Hình ảnh\n\nẢnh hàng không là tài nguyên quan trọng trong việc vẽ bản đồ. Có sẵn một số nguồn hình ảnh chụp từ máy bay và vệ tinh, cũng như một số nguồn thông tin mở, trong trình đơn “Tùy chọn Hình nền” ở bên phải của trình vẽ này.\n\nTheo mặc định, trình vẽ hiển thị lớp trên không của [Bản đồ Bing](http://www.bing.com/maps/), nhưng có sẵn nguồn khác tùy theo vị trí đang xem trong trình duyệt. Ngoài ra có hình ảnh rất rõ tại nhiều vùng ở một số quốc gia như Hoa Kỳ, Pháp, và Đan Mạch.\n\nHình ảnh đôi khi bị chệch đối với dữ liệu bản đồ vì dịch vụ hình ảnh có lỗi. Nếu bạn nhận thấy nhiều con đường bị chệch đối với hình nền, xin đừng di chuyển các đường này để trùng hợp với hình ảnh. Thay vì di chuyển các con đường, hãy chỉnh lại hình ảnh để phù hợp với dữ liệu tồn tại bằng cách nhấn “Chỉnh lại hình nền bị chệch” ở cuối hộp Tùy chọn Hình nền.\n",
         },
         "intro": {
             "done": "xong",
         },
         "intro": {
             "done": "xong",
+            "ok": "OK",
             "graph": {
             "graph": {
-                "postcode": "221572"
+                "block_number": "<value for addr:block_number>",
+                "city": "<value for addr:city>",
+                "county": "<value for addr:county>",
+                "district": "Yên Phong",
+                "hamlet": "Nguyệt Cầu",
+                "neighbourhood": "<value for addr:neighbourhood>",
+                "postcode": "221572",
+                "province": "Bắc Ninh",
+                "quarter": "<value for addr:quarter>",
+                "state": "<value for addr:state>",
+                "subdistrict": "Tam Giang",
+                "suburb": "<value for addr:suburb>",
+                "countrycode": "vn",
+                "name": {
+                    "andrews-elementary-school": "Trường Tiểu học Nguyễn Văn A",
+                    "conrail-railroad": "Hà Nội – Đồng Đăng",
+                    "southern-michigan-bank": "Ngân hàng Bắc Ninh",
+                    "three-rivers-city-hall": "Tòa thị chính Tam Giang",
+                    "three-rivers-elementary-school": "Trường Tiểu học Tam Giang",
+                    "three-rivers-fire-department": "Đoàn Cứu hỏa Tam Giang",
+                    "three-rivers-high-school": "Trường Trung học phổ thông Tam Giang",
+                    "three-rivers-middle-school": "Trường Trung học cơ sở Tam Giang",
+                    "three-rivers-municipal-airport": "Sân bay Tam Giang",
+                    "three-rivers-post-office": "Bưu điện Tam Giang",
+                    "three-rivers-public-library": "Thư viện Tam Giang",
+                    "three-rivers": "Tam Giang"
+                }
+            },
+            "welcome": {
+                "title": "Chào mừng",
+                "welcome": "Chào mừng, trình hướng dẫn này sẽ dạy căn bản sửa đổi OpenStreetMap.",
+                "practice": "Tất cả những dữ liệu trong trình hướng dẫn này chỉ để tập thôi. Các thay đổi của bạn sẽ bị hủy bỏ khi thoát trình hướng dẫn này.",
+                "words": "Trình hướng dẫn này sẽ định nghĩa các thuật ngữ và khái niệm mới. Các thuật ngữ mới được *in nghiêng*.",
+                "mouse": "Bạn có thể sử dụng thiết bị đầu vào nào đó để sửa đổi bản đồ, nhưng trình hướng dẫn này cho rằng bạn sử dụng con chuột hoặc bàn di chuột có hai nút bên trái bên phải. **Nếu bạn muốn gắn chuột, hãy gắn nó vào bây giờ rồi bấm OK.**",
+                "leftclick": "Khi nào hướng dẫn này xin bạn nhấn hoặc nhấn đúp chuột, hãy nhấn hoặc nhấn đúp chuột trái. Nếu dùng bàn di chuột, bạn có thể phải nhấn hoặc chạm một lần vào bàn di chuột. **Nhấn chuột {num} lần.**",
+                "rightclick": "Đôi khi hướng dẫn sẽ xin bạn nhấn chuột phải. Tùy máy tính, bạn có thể phải nhấn chuột trái khi giữ phím Control, chạm hai ngón tay trên bàn di chuột, hoặc sử dụng phím “menu” trên bàn phím. **Nhấn chuột phải {num} lần.**",
+                "chapters": "Nếu muốn bỏ qua hoặc lặp lại phần nào, bấm các nút bên dưới. Hãy bắt đầu! **Bấm “{next}” để tiếp tục.**"
             },
             "navigation": {
             },
             "navigation": {
-                "title": "Điều hướng"
+                "title": "Điều hướng",
+                "drag": "Bản đồ ở giữa cho xem dữ liệu OpenStreetMap ở trên một hình nền.{br}Để đi tới đi lui, kéo thả và cuộn bản đồ, hoặc bấm các phím mũi tên trên bàn phím. **Kéo bản đồ này!**",
+                "zoom": "Cuộn để thu phóng bản đồ. Chuột thường có bánh xe ở giữa để cuộn lên xuống. Tùy bàn di chuột, bạn có thể phải vuốt hai ngón tay lên xuống hoặc vuốt cạnh bên phải. Thay thế, bạn có thể bấm các nút {plus} và {minus}. **Thu phóng bản đồ!**",
+                "features": "Từ *đối tượng* chỉ những gì xuất hiện trên bản đồ. Bạn có thể vẽ bất cứ vật tĩnh và cụ thể là một đối tượng trong OpenStreetMap.",
+                "points_lines_areas": "Các đối tượng bản đồ được vẽ dưới dạng *địa điểm, đường kẻ, hoặc vùng*.",
+                "nodes_ways": "Trong OpenStreetMap, các địa điểm đôi khi được gọi *nốt*, và các đường kẻ và vùng đôi khi được gọi *lối*.",
+                "click_townhall": "Nhấn chuột để chọn bất cứ đối tượng trên bản đồ. **Nhấn chuột vào địa điểm để chọn nó.**",
+                "selected_townhall": "Được rồi, địa điểm đã được chọn. Các đối tượng chớp chớp khi được chọn.",
+                "editor_townhall": "Khi nào đối tượng được chọn, *biểu mẫu* “Sửa đối tượng” xuất hiện ở thanh bên.",
+                "preset_townhall": "Cờ ngang ở trên biểu mẫu cho biết loại đối tượng. Địa điểm này là một {preset}.",
+                "fields_townhall": "Phần giữa của biểu mẫu có các *chi tiết* của đối tượng, chẳng hạn như tên và địa chỉ.",
+                "close_townhall": "**Bấm phím Esc hoặc bấm nút {button} ở góc phải bên trên để đóng biểu mẫu.**",
+                "search_street": "Bạn có thể tìm kiếm các đối tượng theo tên trong khu vực đang xem hoặc toàn thế giới. **Tìm “{name}”.**",
+                "choose_street": "**Chọn {name} trong danh sách để chọn nó.**",
+                "selected_street": "Được rồi, {name} được chọn.",
+                "editor_street": "Các chi tiết của con đường khác với các chi tiết của tòa thị chính.{br}Khi con đường này được chọn, biểu mẫu chứa các chi tiết như “{field1}” và “{field2}”. **Bấm phím Esc hoặc bấm nút {button} để đóng biểu mẫu.**",
+                "play": "Thử di chuyển bản đồ và chọn những đối tượng khác để biết thêm về các loại đối tượng thường được đóng góp vào OpenStreetMap. **Khi nào sẵn sàng đi tiếp đến phần sau, bấm “{next}”.**"
             },
             "points": {
             },
             "points": {
-                "title": "Địa điểm"
+                "title": "Địa điểm",
+                "add_point": "*Địa điểm* tương ứng với các nơi như cửa hàng, nhà hàng, đài tưởng niệm.{br}Nó chỉ ra một vị trí cụ thể và mô tả những gì thấy được tại vị trí đó. **Bấm nút {button} Điểm để thêm một địa điểm mới.**",
+                "place_point": "Để đặt địa điểm mới trên bản đồ, đưa con trỏ lên vị trí chính xác, rồi nhấn chuột trái hoặc bấm phím cách. **Đưa con trỏ lên tòa nhà này, rồi nhấn chuột trái hoặc bấm phím cách.**",
+                "search_cafe": "Có đủ thứ địa điểm. Bạn vừa đặt địa điểm ứng với một quán cà phê. **Tìm “{preset}”.**",
+                "choose_cafe": "**Chọn {preset} từ danh sách.**",
+                "feature_editor": "Địa điểm hiện là một quán cà phê. Bây giờ bạn có thể cung cấp thêm chi tiết về địa điểm này trong biểu mẫu.",
+                "add_name": "Trong OpenStreetMap, tất cả các trường văn bản là tùy chọn. Để trống trường nào mà bạn không biết rõ giá trị.{br}Hãy giả bộ quen với quán này và biết tên của nó. **Định rõ tên của quán cà phê.**",
+                "add_close": "Biểu mẫu sẽ tự động ghi nhớ các thay đổi của bạn. **Sau khi định rõ tên, bấm Esc, Enter, hoặc Return, hoặc bấm nút {button} để đóng biểu mẫu.**",
+                "reselect": "Nhiều khi một địa điểm đã tồn tại nhưng không chính xác hoặc không tròn vẹn. Bạn có thể sửa đổi địa điểm đã tồn tại. **Nhấn chuột để chọn quán cà phê mà bạn vừa tạo ra.**",
+                "update": "Hãy bổ sung thêm chi tiết về quán này. Bạn có thể thay đổi tên của nó, định rõ nền ẩm thực, hoặc định rõ địa chỉ. **Thay đổi chi tiết của quán cà phê.**",
+                "update_close": "**Sau khi cập nhật quán cà phê xong, bấm Esc, Enter, hoặc Return, hoặc bấm nút {button} để đóng biểu mẫu.**",
+                "rightclick": "Nhấn chuột phải vào đối tượng để xem *trình đơn sửa đổi* có các tác vụ có thể áp dụng vào đối tượng. **Nhấn chuột phải để chọn điểm mà bạn vừa tạo ra và hiển thị trình đơn sửa đổi.**",
+                "delete": "Đôi khi cần xóa các đối tượng không tồn tại trên thực tế.{br}Khi xóa đối tượng khỏi OpenStreetMap, nó được loại bỏ khỏi bản đồ công cộng, nên bạn phải chắc chắn rằng nó không còn tồn tại trước khi xóa nó khỏi bản đồ. **Bấm nút {button} để xóa địa điểm này.**",
+                "undo": "Bạn có thể lúc nào hoàn tác thay đổi nào cho tới khi lưu các thay đổi vào OpenStreetMap. **Bấm nút {button} để hoàn tác vụ xóa để cho địa điểm trở lại.**",
+                "play": "Giờ đây bạn đã biết cách tạo và sửa đổi địa điểm, hãy thử tạo vài điểm nữa! **Khi nào sẵn sàng đi tiếp đến phần sau, bấm “{next}”.**"
             },
             "areas": {
             },
             "areas": {
-                "title": "Vùng"
+                "title": "Vùng",
+                "add_playground": "*Vùng* cho biết hình dạng của các đa giác như hồ nước, tòa nhà, và khu vực dân cư.{br}Bạn có thể cung cấp nhiều chi tiết hơn dùng vùng so với địa điểm. **Bấm nút {button} Vùng để bắt đầu vẽ vùng mới.**",
+                "start_playground": "Hãy vẽ một vùng để thêm sân chơi này vào bản đồ. Để vẽ vùng, đặt các *nốt* theo đường biên của vùng. **Nhấn chuột hoặc bấm phím cách để đặt nốt đầu tiên vào một góc của sân chơi.**",
+                "continue_playground": "Để tiếp tục vẽ vùng này, đặt thêm nốt theo đường biên của sân chơi. Bạn có thể nối liền vùng với các đường dạo đã tồn tại.{br}Mẹo vặt: Bạn có thể giữ xuống phím Alt hoặc Option để tránh việc nối liền nốt với các đối tượng khác. **Tiếp tục vẽ vùng ứng với sân chơi này.**",
+                "finish_playground": "Để hoàn tất vùng, bấm Enter hoặc Return, hoặc nhấn chuột lần nữa vào nốt đầu tiên hoặc cuối dùng. **Vẽ xong vùng ứng với sân chơi.**",
+                "search_playground": "**Tìm “{preset}”.**",
+                "choose_playground": "**Chọn {preset} từ danh sách.**",
+                "add_field": "Sân chơi này không có tên chính thức, nên bạn sẽ để trống trường Tên.{br}Thay thế, hãy bổ sung chi tiết về sân chơi trong trường Miêu tả. **Mở trình đơn “Thêm chi tiết”.**",
+                "choose_field": "**Chọn {field} từ danh sách.**",
+                "retry_add_field": "Bạn không chọn trường {field}. Hãy thử lại.",
+                "describe_playground": "**Thêm lời miêu tả rồi bấm nút {button} để đóng biểu mẫu.**",
+                "play": "Tuyệt vời! Hãy thử vẽ vài vùng nữa và thử những loại vùng khác để thêm vào OpenStreetMap. **Khi nào sẵn sàng đi tiếp đến phần sau, bấm “{next}”.**"
             },
             "lines": {
             },
             "lines": {
-                "title": "Đường kẻ"
+                "title": "Đường kẻ",
+                "add_line": "*Đường kẻ* tương ứng với chẳng hạn các đường sá, đường sắt, dòng sông. **Bấm nút {button} Đường để bắt đầu vẽ đường mới.**",
+                "start_line": "Bản đồ chưa có con đường này – hãy vẽ nó!{br}Trong OpenStreetMap, chúng ta vẽ các đường kẻ theo giữa đường. Bạn có thể kéo vào thu phóng bản đồ nếu cần trong khi vẽ đường. **Nhấn chuột vào phía trên của con đường bị thiếu để bắt đầu vẽ đường kẻ mới.**",
+                "intersect": "Nhấn chuột hoặc bấm phím cách để thêm nốt và kéo dài đường kẻ.{br}Tương tự với nhiều loại đường kẻ, các đường bộ kết hợp nhau thành một mạng lớn hơn. Để cho các ứng dụng chỉ đường có thể hoạt động chính xác, xin chú ý nối liền các đường ở những giao lộ trên thực tế. **Nhấn vào con đường {name} để nối hai đường kẻ tại một giao lộ.**",
+                "retry_intersect": "Con đường phải giao với đường {name}. Hãy thử lại!",
+                "continue_line": "Tiếp tục vẽ đường kẻ mới theo con đường. Hãy nhớ rằng bạn có thể lúc nào kéo và thu phóng bản đồ.{br}Sau khi vẽ xong xuôi, nhấn chuột lần nữa vào nốt cuối cùng. **Hoàn tất việc vẽ con đường.**",
+                "choose_category_road": "**Chọn {category} từ danh sách.**",
+                "choose_preset_residential": "Có nhiều kiểu con đường; kiểu phổ biến nhất là ngõ dân cư. **Chọn kiểu con đường là {preset}.**",
+                "retry_preset_residential": "Bạn không chọn kiểu {preset}. **Nhấn chuột vào đây để thử lần nữa.**",
+                "name_road": "**Đặt tên cho con đường rồi bấm Esc, Enter, hay Return, hoặc bấm nút {button} để đóng biểu mẫu.**",
+                "did_name_road": "Được rồi, hãy tập thay đổi hình dạng đường kẻ.",
+                "update_line": "Đôi khi cần thay đổi hình dạng của một đường kẻ đã tồn tại. Đây có con đường không chính xác.",
+                "add_node": "Bạn có thể đặt thêm nốt vào đường kẻ này để làm cho nó chính xác hơn. Một cách đặt nốt là nhấn đúp vào đường kẻ tại vị trí muốn đặt nốt. **Nhấn đúp vào đường kẻ để đặt nốt mới.**",
+                "start_drag_endpoint": "Khi đường kẻ được chọn, bạn có thể kéo thả nốt nào dùng chuột trái để di chuyển nó. **Kéo điểm cuối đến giao lộ các con đường này.**",
+                "finish_drag_endpoint": "Nơi này có vẻ đúng. **Thả chuột trái để kết thúc tác vụ di chuyển.**",
+                "start_drag_midpoint": "Có các hình mũi tên nhỏ *nửa đường* giữa các nốt. Bạn cũng có thể tạo nốt mới bằng cách kéo một mũi tên nửa đường đến vị trí khác. **Kéo mũi tên nửa đường để tạo nốt mới dọc theo con đường.**",
+                "continue_drag_midpoint": "Đường kẻ này có vẻ đẹp hơn nhỉ? Hãy tiếp tục chỉnh lại đường kẻ này bằng cách nhấn đúp vào đường kẻ hoặc kéo mũi tên nửa đường cho đến khi nó trùng khớp với con đường. **Khi nào đường kẻ được hoàn thiện xong xuôi, bấm OK.**",
+                "delete_lines": "Bạn nên xóa các con đường không ứng với con đường thật.{br}Đây có một {street} được chính phủ thiết kế mà không bao giờ xây dựng. Chúng ta có thể xóa các đường kẻ thừa để cải thiện bản đồ.",
+                "rightclick_intersection": "Con đường thật cuối cùng là {street1}, nên phải *chia cắt* {street2} tại giao lộ này và xóa quãng đường về phía bắc. **Nhấn chuột trái vào nốt giao lộ.**",
+                "split_intersection": "**Bấm nút {button} để cắt đôi {street}.**",
+                "retry_split": "Bạn không bấm nút Chia cắt. Hãy thử lại.",
+                "did_split_multi": "OK, {street1} hiện đường cắt đôi. Hãy xóa quãng đường ở phía bắc. **Bấm phần bên trên của {street2} để chọn nó.**",
+                "did_split_single": "**Bấm phần bên trên của {street2} để chọn nó.**",
+                "multi_select": "{selected} đã được chọn. Hãy chọn {other1} cùng lúc. Để chọn nhiều đối tượng cùng lúc, nhấn chuột trái trong khi bấm giữ Shift. **Bấm giữ Shift và nhấn chuột vào {other2}.**",
+                "multi_rightclick": "OK, hai đường kẻ cần xóa đã được chọn. **Nhấn chuột phải vào một đường kẻ để hiển thị trình đơn sửa đổi.**",
+                "multi_delete": "**Bấm nút {button} để xóa các đường kẻ thừa.**",
+                "retry_delete": "Bạn không bấm nút Xóa. Hãy thử lại.",
+                "play": "Hay quá! Hãy tiếp tục tập sửa đổi vài đường kẻ nữa. **Khi nào sẵn sàng đi tiếp đến phần sau, bấm “{next}”.**"
+            },
+            "buildings": {
+                "title": "Tòa nhà",
+                "add_building": "OpenStreetMap là cơ sở dữ liệu tòa nhà lớn nhất trên thế giới.{br}Mời bạn giúp xây dựng cơ sở dữ liệu này bằng cách vẽ các tòa nhà chưa có trên bản đồ. **Bấm nút {button} Vùng để thêm vùng mới.**",
+                "start_building": "Hãy thêm căn nhà này vào bản đồ.{br}Vẽ vùng theo các tường bên ngoài tòa nhà. **Nhấn chuột hoặc bấm phím cách để đặt nốt đầu tiên vào một góc của tòa nhà.**",
+                "continue_building": "Tiếp tục đặt thêm nốt để vẽ tất cả tòa nhà. Nhớ có thể phóng to để nhìn rõ khi vẽ vùng.{br}Để hoàn thành tòa nhà, bấm Enter hay Return, hoặc nhấn chuột lần nữa vào nốt đầu tiên hoặc cuối cùng. **Hoàn thành tòa nhà.**",
+                "retry_building": "Hình như bạn vướng mắc khi đặt nốt vào các góc tòa nhà. Hãy thử lại.",
+                "choose_category_building": "**Chọn {category} từ danh sách.**",
+                "choose_preset_house": "Có nhiều kiểu tòa nhà; tòa nhà này rõ ràng là nhà ở.{br}Nếu bạn không chắc chắn nó là kiểu nào, bạn có thể chọn kiểu Tòa nhà bình thường không sao. **Chọn kiểu {preset}.**",
+                "close": "**Bấm Esc hoặc nút {button} để đóng biểu mẫu.**",
+                "rightclick_building": "**Nhấn chuột phải để chọn tòa nhà vừa vẽ và hiển thị trình đơn sửa đổi.**",
+                "square_building": "Hãy làm căn nhà này đẹp đẽ hơn. **Bấm nút {button} để làm gọn các góc của tòa nhà.**",
+                "retry_square": "Bạn không bấm nút Làm Vuông góc. Hãy thử lại.",
+                "done_square": "Để ý tòa nhà có vẻ gọn gàng hơn. Hãy xem một công cụ tiện ích nũa.",
+                "add_tank": "Thùng chứa nước này có hình dạng vòng tròn. **Bấm nút {button} Vùng để thêm vùng mới.**",
+                "start_tank": "Đừng lo, bạn không cần phải vẽ hình tròn hoàn hảo. Chỉ việc vẽ một vùng thô có vài nốt trên đường biên của thùng chứa nước. **Nhấn chuột hoặc bấm phím cách để đặt nốt đầu tiên vào đường biên của thùng chứa nước.**",
+                "continue_tank": "Đặt thêm vài nốt nữa chung quanh thùng chứa nước. Hình tròn sẽ bao gồm các nốt mà bạn đang đặt.{br}Để hoàn thành vùng, bấm Enter hay Return, hoặc nhấn chuột lần nữa vào nốt đầu tiên hoặc cuối cùng. **Hoàn thành thùng chứa nước.**",
+                "search_tank": "**Tìm “{preset}”.**",
+                "choose_tank": "**Chọn {preset} từ danh sách.**",
+                "rightclick_tank": "**Nhấn chuột phải để chọn thùng chứa nước vừa vẽ và hiển thị trình đơn sửa đổi.**",
+                "circle_tank": "**Bấm nút {button} để làm tròn thùng chứa nước này.**",
+                "retry_circle": "Bạn không bấm nút Làm Tròn góc. Hãy thử lại.",
+                "play": "Tuyệt vời! Hãy thử vẽ vài tòa nhà nữa và thử những tác vụ trong trình đơn sửa đổi. **Khi nào sẵn sàng đi tiếp đến phần sau, bấm “{next}”.**"
             },
             "startediting": {
                 "title": "Bắt đầu Sửa đổi",
             },
             "startediting": {
                 "title": "Bắt đầu Sửa đổi",
+                "help": "Bạn sẵn sàng sửa đổi OpenStreetMap!{br}Lúc nào muốn được hướng dẫn lại hoặc xem thêm tài liệu, chỉ việc bấm nút {button} Trợ giúp.",
                 "save": "Hãy nhớ lưu các thay đổi của bạn thường xuyên!",
                 "start": "Hãy bắt đầu vẽ bản đồ!"
             }
         },
                 "save": "Hãy nhớ lưu các thay đổi của bạn thường xuyên!",
                 "start": "Hãy bắt đầu vẽ bản đồ!"
             }
         },
+        "shortcuts": {
+            "title": "Phím tắt",
+            "key": {
+                "alt": "Alt",
+                "backspace": "Backspace",
+                "cmd": "Cmd",
+                "ctrl": "Ctrl",
+                "delete": "Delete",
+                "del": "Del",
+                "end": "End",
+                "enter": "Enter",
+                "esc": "Esc",
+                "home": "Home",
+                "option": "Option",
+                "pause": "Pause",
+                "pgdn": "PgDn",
+                "pgup": "PgUp",
+                "return": "Return",
+                "shift": "Shift",
+                "space": "Dấu cách"
+            },
+            "gesture": {
+                "drag": "kéo"
+            },
+            "or": "–hoặc–",
+            "browsing": {
+                "title": "Xem",
+                "navigation": {
+                    "title": "Điều hướng",
+                    "pan": "Di chuyển bản đồ",
+                    "pan_more": "Di chuyển bản đồ cả chiều rộng/cao màn hình",
+                    "zoom": "Thu phóng",
+                    "zoom_more": "Thu phóng rất nhiều"
+                },
+                "help": {
+                    "title": "Trợ giúp",
+                    "help": "Xem tài liệu trợ giúp",
+                    "keyboard": "Xem bảng phím tắt này"
+                },
+                "display_options": {
+                    "title": "Tùy chọn xem",
+                    "background": "Xem hộp chọn lớp nền",
+                    "background_switch": "Quay lại lớp nền trước",
+                    "map_data": "Xem hộp dữ liệu bản đồ",
+                    "fullscreen": "Bật chế độ toàn màn hình",
+                    "wireframe": "Bật/tắt chế độ khung lưới",
+                    "minimap": "Mở/đóng bản đồ nhỏ"
+                },
+                "selecting": {
+                    "title": "Chọn đối tượng",
+                    "select_one": "Chọn một đối tượng",
+                    "select_multi": "Chọn nhiều đối tượng cùng lúc",
+                    "lasso": "Vẽ vùng chọn chung quanh các đối tượng"
+                },
+                "with_selected": {
+                    "title": "Trong khi đối tượng được chọn",
+                    "infobox": "Bật/tắt hộp hộp kiểm tra/đo đạc",
+                    "edit_menu": "Bật/tắt trình đơn sửa đổi"
+                },
+                "vertex_selected": {
+                    "title": "Trong khi nốt được chọn",
+                    "previous": "Chọn nốt trước trong lối",
+                    "next": "Chọn nốt sau trong lối",
+                    "first": "Chọn nốt đầu tiên trong lối",
+                    "last": "Chọn nốt cuối cùng trong lối",
+                    "change_parent": "Luân chuyển qua các lối nối nhau tại nốt"
+                }
+            },
+            "editing": {
+                "title": "Sửa",
+                "drawing": {
+                    "title": "Vẽ",
+                    "add_point": "Chế độ “thêm địa điểm”",
+                    "add_line": "Chế độ “thêm đường kẻ”",
+                    "add_area": "Chế độ “thêm vùng”",
+                    "place_point": "Đặt địa điểm hoặc nốt",
+                    "disable_snap": "Giữ xuống để tránh nối liền với đối tượng khác khi đặt địa điểm hoặc nốt",
+                    "stop_line": "Kết thúc vẽ đường kẻ hoặc vùng"
+                },
+                "operations": {
+                    "title": "Thao tác",
+                    "continue_line": "Vẽ tiếp đường kẻ từ nốt được chọn",
+                    "merge": "Gộp các đối tượng được chọn",
+                    "disconnect": "Tháo gỡ các đối tượng tại nốt được chọn",
+                    "split": "Cắt đôi các đường kẻ tại nốt được chọn",
+                    "reverse": "Đảo ngược chiều đường kẻ",
+                    "move": "Di chuyển các đối tượng được chọn",
+                    "rotate": "Xoay đối tượng được chọn",
+                    "orthogonalize": "Làm thẳng đường kẻ được chọn, hoặc làm vuông góc vùng hoặc đường kẻ đóng được chọn",
+                    "circularize": "Làm tròn vùng hoặc đường kẻ đóng",
+                    "reflect_long": "Phản chiếu đối tượng qua trục dài",
+                    "reflect_short": "Phản chiếu đối tượng qua trục ngắn",
+                    "delete": "Xóa đối tượng hay nốt được chọn"
+                },
+                "commands": {
+                    "title": "Lệnh",
+                    "copy": "Sao chép các đối tượng được chọn",
+                    "paste": "Dán các đối tượng đã sao chép",
+                    "undo": "Hoàn tác thao tác cuối cùng",
+                    "redo": "Làm lại thao tác cuối cùng",
+                    "save": "Lưu các thay đổi"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                 "maxstay": {
                     "label": "Thời gian Ở Tối đa"
                 },
                 "maxstay": {
                     "label": "Thời gian Ở Tối đa"
                 },
+                "maxweight": {
+                    "label": "Trọng lượng Tối đa"
+                },
                 "mtb/scale": {
                     "label": "Độ hiểm trở Đạp xe Leo núi",
                     "options": {
                 "mtb/scale": {
                     "label": "Độ hiểm trở Đạp xe Leo núi",
                     "options": {
                     "name": "Lắp Điện",
                     "terms": "thợ lắp điện, người lắp điện, tho lap dien, nguoi lap dien"
                 },
                     "name": "Lắp Điện",
                     "terms": "thợ lắp điện, người lắp điện, tho lap dien, nguoi lap dien"
                 },
+                "craft/electronics_repair": {
+                    "name": "Tiệm Sửa Điện tử",
+                    "terms": "tiệm sửa điện tử, cửa hàng sửa điện tử, tiệm sửa đồ điện, cửa hàng sửa đồ điện, tiem sua dien tu, cua hang sua dien tu, tiem sua do dien, cua hang sua do dien"
+                },
                 "craft/gardener": {
                     "name": "Làm vườn",
                     "terms": "người làm vườn, người trồng hoa, người cắt cỏ, nguoi lam vuon, nguoi trong hoa, nguoi cat co"
                 "craft/gardener": {
                     "name": "Làm vườn",
                     "terms": "người làm vườn, người trồng hoa, người cắt cỏ, nguoi lam vuon, nguoi trong hoa, nguoi cat co"
                     "name": "Đường Xe đạp",
                     "terms": "đường xe đạp, đường mòn xe đạp, duong xe dap, duong mon xe dap"
                 },
                     "name": "Đường Xe đạp",
                     "terms": "đường xe đạp, đường mòn xe đạp, duong xe dap, duong mon xe dap"
                 },
+                "highway/elevator": {
+                    "name": "Thang máy",
+                    "terms": "thang máy, thang may"
+                },
                 "highway/footway": {
                     "name": "Đường Dạo",
                     "terms": "đường đi bộ, hè, vỉa hè, đường mòn, phố, đường đi dạo, đường dạo, duong di bo, he, via he, duong mon, pho, duong di dao, duong dao"
                 "highway/footway": {
                     "name": "Đường Dạo",
                     "terms": "đường đi bộ, hè, vỉa hè, đường mòn, phố, đường đi dạo, đường dạo, duong di bo, he, via he, duong mon, pho, duong di dao, duong dao"
                 },
                 "place/village": {
                     "name": "Làng",
                 },
                 "place/village": {
                     "name": "Làng",
-                    "terms": "làng, lang"
+                    "terms": "làng, thôn, ấp, lang, thon, ap"
                 },
                 "point": {
                     "name": "Địa điểm",
                 },
                 "point": {
                     "name": "Địa điểm",
                     "name": "Tiệm Đồ Cổ",
                     "terms": "tiệm đồ cổ, cửa hàng đồ cổ, cửa hiệu đồ cổ, người bán đồ cổ, chỗ bán đồ cổ, nơi bán đồ cổ, tiem do co, cua hang do co, cua hieu do co, nguoi ban do co, cho ban do co, noi ban do co"
                 },
                     "name": "Tiệm Đồ Cổ",
                     "terms": "tiệm đồ cổ, cửa hàng đồ cổ, cửa hiệu đồ cổ, người bán đồ cổ, chỗ bán đồ cổ, nơi bán đồ cổ, tiem do co, cua hang do co, cua hieu do co, nguoi ban do co, cho ban do co, noi ban do co"
                 },
+                "shop/appliance": {
+                    "name": "Tiệm Gia dụng",
+                    "terms": "tiệm gia dụng, tiệm đồ gia dụng, cửa hàng gia dụng, cửa hàng đồ gia dụng, tiem gia dung, tiem do gia dung, cua hang gia dung, cua hang do gia dung"
+                },
                 "shop/art": {
                     "name": "Tiệm Nghệ phẩm",
                     "terms": "tiệm nghệ phẩm, tiệm tác phẩm nghệ thuật, tiệm bức tranh, tiệm bức vẽ, cửa hàng nghệ phẩm, cửa hàng tác phẩm nghệ thuật, cửa hàng bức tranh, cửa hàng bức vẽ, quán nghệ phẩm, quán bức tranh, quán bức vẽ, nơi bán nghệ phẩm, nơi bán bức tranh, nơi bán bức vẽ, tiem nghe pham, tiem tac pham nghe thuat, tiem buc tranh, tiem buc ve, cua hang nghe pham, cua hang tac pham nghe thuat, cua hang buc tranh, cua hang buc ve, quan nghe pham, quan buc tranh, quan buc ve, noi ban nghe pham, noi ban buc tranh, noi ban buc ve"
                 "shop/art": {
                     "name": "Tiệm Nghệ phẩm",
                     "terms": "tiệm nghệ phẩm, tiệm tác phẩm nghệ thuật, tiệm bức tranh, tiệm bức vẽ, cửa hàng nghệ phẩm, cửa hàng tác phẩm nghệ thuật, cửa hàng bức tranh, cửa hàng bức vẽ, quán nghệ phẩm, quán bức tranh, quán bức vẽ, nơi bán nghệ phẩm, nơi bán bức tranh, nơi bán bức vẽ, tiem nghe pham, tiem tac pham nghe thuat, tiem buc tranh, tiem buc ve, cua hang nghe pham, cua hang tac pham nghe thuat, cua hang buc tranh, cua hang buc ve, quan nghe pham, quan buc tranh, quan buc ve, noi ban nghe pham, noi ban buc tranh, noi ban buc ve"
                     "terms": "tiệm thuốc lá điện tử, tiệm thuốc điện tử, cửa hàng thuốc lá điện tử, cửa hàng thuốc điện tử, tiem thuoc la dien tu, tiem thuoc dien tu, cua hang thuoc la dien tu, cua hang thuoc dien tu"
                 },
                 "shop/electronics": {
                     "terms": "tiệm thuốc lá điện tử, tiệm thuốc điện tử, cửa hàng thuốc lá điện tử, cửa hàng thuốc điện tử, tiem thuoc la dien tu, tiem thuoc dien tu, cua hang thuoc la dien tu, cua hang thuoc dien tu"
                 },
                 "shop/electronics": {
-                    "name": "Cửa hàng điện tử",
-                    "terms": "chỗ bán đồ điện, tiệm bán đồ điện, nơi bán đồ điện, cửa hàng bán đồ điện, cửa hiệu bán đồ điện, quầy bán đồ điện, cửa tiệm đồ điện, tiệm điện tử, cửa hàng điện tử, máy tính, vi tính, điện thoại, tivi, tv, máy giặt, máy lạnh, máy sưởi, loa, máy ảnh, máy chụp hình, cho ban do dien, tiem ban do dien, noi ban do dien, cua hang ban do dien, cua hieu ban do dien, quay ban do dien, cua tiem do dien, tiem dien tu, cua hang dien tu, may tinh, vi tinh, dien thoai, may giat, may lanh, may suoi, may anh, may chup hinh"
+                    "name": "Tiệm Điện tử",
+                    "terms": "tiệm điện tử, cửa hàng điện tử, tiệm đồ điện, cửa hàng đồ điện, máy tính, vi tính, điện thoại, tivi, tv, máy giặt, máy lạnh, máy sưởi, loa, máy ảnh, máy chụp hình, tiem dien tu, cua hang dien tu, tiem do dien, cua hang do dien, may tinh, vi tinh, dien thoai, may giat, may lanh, may suoi, may anh, may chup hinh"
                 },
                 "shop/erotic": {
                     "name": "Tiệm Bán đồ Khiêu dâm",
                 },
                 "shop/erotic": {
                     "name": "Tiệm Bán đồ Khiêu dâm",
                 },
                 "shop/hairdresser": {
                     "name": "Tiệm Làm tóc",
                 },
                 "shop/hairdresser": {
                     "name": "Tiệm Làm tóc",
-                    "terms": "chỗ làm tóc, tiệm làm tóc, nơi làm tóc, cửa hàng làm tóc, quầy làm tóc, cửa hiệu làm tóc, cửa tiệm làm tóc, cho lam toc, tiem lam toc, noi lam toc, cua hang lam toc, quay lam toc, cua hieu lam toc, cua tiem lam toc"
+                    "terms": "tiệm làm tóc, cửa hàng làm tóc, tiệm cắt tóc, cửa hàng cắt tóc, tiệm hớt tóc, cửa hàng hớt tóc, tiem lam toc, cua hang lam toc, tiem cat toc, cua hang cat toc, tiem hot toc, cua hang hot toc"
                 },
                 "shop/hardware": {
                     "name": "Tiệm Ngũ kim",
                 },
                 "shop/hardware": {
                     "name": "Tiệm Ngũ kim",
index 088158bddb7730d76eb0f4132d88467c1b33fa08..f7e5f4459e3067b6ef25d2385dd05e7f52a4b9ab 100644 (file)
         "help": {
             "title": "指南",
             "help": "# 指南\n\n爾個編器,係爲 [公家街圖](http://www.openstreetmap.org/)而做。 有世界地圖,任用亦改得。你可以用佢,喺你處加嘢改嘢。如此一來,裏面嘅料,人人可以公開任用,人人得益。\n\n邊個用公家街圖,都見得到你整嘅地圖。要改得到,就要開定個\n[簽入戶口](https://www.openstreetmap.org/login).\n\n[iD editor](http://ideditor.com/) 係合作而成, [程式碼放喺 GitHub](https://github.com/openstreetmap/iD).\n",
         "help": {
             "title": "指南",
             "help": "# 指南\n\n爾個編器,係爲 [公家街圖](http://www.openstreetmap.org/)而做。 有世界地圖,任用亦改得。你可以用佢,喺你處加嘢改嘢。如此一來,裏面嘅料,人人可以公開任用,人人得益。\n\n邊個用公家街圖,都見得到你整嘅地圖。要改得到,就要開定個\n[簽入戶口](https://www.openstreetmap.org/login).\n\n[iD editor](http://ideditor.com/) 係合作而成, [程式碼放喺 GitHub](https://github.com/openstreetmap/iD).\n",
-            "editing_saving": "# 改同記\n\n爾個程式,寫來上網用。你上緊嘅網站就係。\n\n### 㨂地貌\n\n㨂地圖地貌,好似路,名勝,就喺地圖撳佢一下。咁整着佢,顯眼啲,同埋有一大欄,講佢明細。亦有選單,你對地貌做得啲乜。\n\n要揀多個一件,就撳實【Shift】掣先,跟手撳落地貌,揀你想揀。又或者,拖個長方形出來,包住佢嘅點都着咗。\n\n### 記修改\n\n你修改路、屋宇及地方之時,爾啲修改只喺你部電腦上面,直至你送上街圖電腦記低。若你改錯,唔使擔心。你可以撳還原掣還原,重做掣重做。\n\n撳【記低】就完成一組修改。畀個例,你畫完個鎮,又會去畫另一度。咁你有機會去校閱你改過乜。同埋,若然有乜改得唔妥,程式亦會有用提議同警告。\n\n若然樣樣都妥當,咁你就打啲解釋,講下你改過乜,之後【記低】送修改上 [OpenStreetMap.org](http://www.openstreetmap.org/)。如此一來,人人都會睇到,等人再以此建立同改善。\n\n若你一次改唔晒,你都可以閂咗程式,下次返來,用同一部電腦同瀏覽器,程式會畀機會你囘復修改。\n\n###用製圖程式\n要睇捷鍵,可以睇[爾度]((http://wiki.openstreetmap.org/wiki/ID/Shortcuts))。\n",
             "roads": "# 路\n\n用個程式,你開得,整得,刪得啲路。路有幾種,徑、公路、山徑、單車徑等等,乜嘢相交一段都要畫面出來。\n\n### 揀\n\n撳一下條路,就揀到。個外形會見得明顯,亦有架生仔選單,外加邊註欄有多啲路嘅資料。\n\n### 改\n\n你耐不耐見到條路,同背景相,或全球定位系統行縱,並唔一致。你要調較到佢哋啱位。\n\n首先撳一下,你想改嗰條路。咁條路就會特別顯眼,同埋有一點點畀你畀拉到啱位。若你想加多幾點,更加仔細,就喺條路上面,無節嘅地方,快撳兩下,咁就會開多一節。\n\n若然條路要駁去其他路,之但係無駁妥,咁你就拖住一點,拉到其他路,整到聯埋。地圖來講,駁通啲路係咁緊要,同埋駕車搵路亦必須。\n\n你亦可以用【搬】爾個架生,或撳快掣【M】,一次過搬成條路,再撳多下,就記好搬動。\n\n### 刪\n\n若成條路都唔啱,你亦要望下衞星相,以及最好親身確認,佢真係唔喺度,你就可以刪咗佢,卽係由地圖度搬走。小心啲刪走地貌,同其他改法一樣,有時地貌係人人都見到,但係衞星相過晒時,新路未必見。\n\n你刪條路,就撳佢一下,揀咗佢。跟住撳垃圾筒公仔,或者撳快掣【Delete】。\n\n### 開新\n\n要搵地方,緊係要有條路,係咪?去程式左上角,咁住【綫】個公仔,或者撳快掣【2】,就開始畫綫。\n\n地圖度,撳住路頭個位開始畫。若然條路由原路分出,就由原路上面路口位,撳一下開始。\n\n撳嘅點,應該人係跟實條路,跟䘙星相,或跟全球定位系統行蹤。若果你條路,會橫過另一條,你就喺路口位,撳落另一條路上,就起咗個交叉點。你要畫完,就快撳兩下。又或者咁鍵盤【Return】或【Enter】掣。\n",
             "gps": "# 全球定位系統\n\n數據取自全球定位系統,係公家街圖至可靠來源。爾個造圖程式,用到本機行蹤,卽放你電腦嘅【.gpx】檔案。你收集全球定位系統行蹤,取自智能電話程式,或者個人全球定位系統儀。\n\n點去用全球定位系統測量,睇下 [製圖,用電話、用全球定位系統、用紙](http://learnosm.org/en/mobile-mapping/)。\n\n用GPX途徑製圖,拖GPX檔案落造圖程式。若然讀得明,佢會加入地圖,用鮮紫綫顯現。喺右邊,撳落【背景設定】選單。咁就開得,閂得,放大縮細新嘅GPX層。\n\n爾個GPX途徑,唔會直上公家街圖,最好用法,就係用佢製圖。按此加新地貌,亦可[傳上公家街圖](http://www.openstreetmap.org/trace/create)以作其他用途。\n",
             "imagery": "# 相\n\n航空相係地圖要源。佢哋飛機飛過,衞星望落等組合。網上有任用來源,可供使用。就喺右邊,【背景設定】之內。\n\n程式預先已有 [兵地圖](http://www.bing.com/maps/) 䘙星相層。你放大縮細去某啲地方,就有其他可用。某幾國,如美國、法國、丹麥等,國內某啲地方,有極精細嘅相。\n\n相有時同地圖資料有差距,爾個係供相者出錯。若你睇到多多路與背景移咗位,就唔好郁住。將啲相校好個位,同地圖資料吻合。要咁做,就去背景設定,撳【校正對位誤差】校好咗先。\n",
             "roads": "# 路\n\n用個程式,你開得,整得,刪得啲路。路有幾種,徑、公路、山徑、單車徑等等,乜嘢相交一段都要畫面出來。\n\n### 揀\n\n撳一下條路,就揀到。個外形會見得明顯,亦有架生仔選單,外加邊註欄有多啲路嘅資料。\n\n### 改\n\n你耐不耐見到條路,同背景相,或全球定位系統行縱,並唔一致。你要調較到佢哋啱位。\n\n首先撳一下,你想改嗰條路。咁條路就會特別顯眼,同埋有一點點畀你畀拉到啱位。若你想加多幾點,更加仔細,就喺條路上面,無節嘅地方,快撳兩下,咁就會開多一節。\n\n若然條路要駁去其他路,之但係無駁妥,咁你就拖住一點,拉到其他路,整到聯埋。地圖來講,駁通啲路係咁緊要,同埋駕車搵路亦必須。\n\n你亦可以用【搬】爾個架生,或撳快掣【M】,一次過搬成條路,再撳多下,就記好搬動。\n\n### 刪\n\n若成條路都唔啱,你亦要望下衞星相,以及最好親身確認,佢真係唔喺度,你就可以刪咗佢,卽係由地圖度搬走。小心啲刪走地貌,同其他改法一樣,有時地貌係人人都見到,但係衞星相過晒時,新路未必見。\n\n你刪條路,就撳佢一下,揀咗佢。跟住撳垃圾筒公仔,或者撳快掣【Delete】。\n\n### 開新\n\n要搵地方,緊係要有條路,係咪?去程式左上角,咁住【綫】個公仔,或者撳快掣【2】,就開始畫綫。\n\n地圖度,撳住路頭個位開始畫。若然條路由原路分出,就由原路上面路口位,撳一下開始。\n\n撳嘅點,應該人係跟實條路,跟䘙星相,或跟全球定位系統行蹤。若果你條路,會橫過另一條,你就喺路口位,撳落另一條路上,就起咗個交叉點。你要畫完,就快撳兩下。又或者咁鍵盤【Return】或【Enter】掣。\n",
             "gps": "# 全球定位系統\n\n數據取自全球定位系統,係公家街圖至可靠來源。爾個造圖程式,用到本機行蹤,卽放你電腦嘅【.gpx】檔案。你收集全球定位系統行蹤,取自智能電話程式,或者個人全球定位系統儀。\n\n點去用全球定位系統測量,睇下 [製圖,用電話、用全球定位系統、用紙](http://learnosm.org/en/mobile-mapping/)。\n\n用GPX途徑製圖,拖GPX檔案落造圖程式。若然讀得明,佢會加入地圖,用鮮紫綫顯現。喺右邊,撳落【背景設定】選單。咁就開得,閂得,放大縮細新嘅GPX層。\n\n爾個GPX途徑,唔會直上公家街圖,最好用法,就係用佢製圖。按此加新地貌,亦可[傳上公家街圖](http://www.openstreetmap.org/trace/create)以作其他用途。\n",
             "imagery": "# 相\n\n航空相係地圖要源。佢哋飛機飛過,衞星望落等組合。網上有任用來源,可供使用。就喺右邊,【背景設定】之內。\n\n程式預先已有 [兵地圖](http://www.bing.com/maps/) 䘙星相層。你放大縮細去某啲地方,就有其他可用。某幾國,如美國、法國、丹麥等,國內某啲地方,有極精細嘅相。\n\n相有時同地圖資料有差距,爾個係供相者出錯。若你睇到多多路與背景移咗位,就唔好郁住。將啲相校好個位,同地圖資料吻合。要咁做,就去背景設定,撳【校正對位誤差】校好咗先。\n",
                 "internet_access/fee": {
                     "label": "上網費"
                 },
                 "internet_access/fee": {
                     "label": "上網費"
                 },
-                "kerb": {
-                    "label": "下斜路緣"
-                },
                 "lamp_type": {
                     "label": "類"
                 },
                 "lamp_type": {
                     "label": "類"
                 },
index 4793231d7e87b4c3dc53fcb222c11a54ac986871..3c5f9f7170cf47d9992c4a204a06ba9c6802cee1 100644 (file)
         "help": {
             "title": "帮助",
             "help": "#帮助\n\n这是一个免费且可编辑的世界地图[OpenStreetMap](http://www.openstreetmap.org/)\n的编辑器,你可以用它来增加和更新你所在地区的数据,\n为全世界将这个开源、开放数据的世界地图变得更好。\n\n你在这张地图上的编辑将会被使用OpenStreetMap的所有人看到。\n你需要[登录](https://www.openstreetmap.org/login)才能编辑。\n\n本编辑器名为[iD](http://ideditor.com/),是一个[源码在GitHub上共享](https://github.com/openstreetmap/iD)\n的协作项目。\n",
         "help": {
             "title": "帮助",
             "help": "#帮助\n\n这是一个免费且可编辑的世界地图[OpenStreetMap](http://www.openstreetmap.org/)\n的编辑器,你可以用它来增加和更新你所在地区的数据,\n为全世界将这个开源、开放数据的世界地图变得更好。\n\n你在这张地图上的编辑将会被使用OpenStreetMap的所有人看到。\n你需要[登录](https://www.openstreetmap.org/login)才能编辑。\n\n本编辑器名为[iD](http://ideditor.com/),是一个[源码在GitHub上共享](https://github.com/openstreetmap/iD)\n的协作项目。\n",
-            "editing_saving": "# 编辑和保存\n\n本编辑器为在线编辑设计,您正在经由本网站使用它。\n\n### 选择要素\n\n您可以在地图上单击以选中一个要素,如道路或一个兴趣点。\n被选中的要素将被高亮显示,同时弹出一个显示其详细信息的面板,\n以及一个列出了可对该要素进行之操作的菜单。\n\n如需同时选中多个要素,您需要先按住 Shift 键。然后请多次点击选择全部的要素,\n或者在地图上画出一个长方形以圈出并选中长方形中所有的点。\n\n### 保存编辑内容\n\n当您做了比如编辑道路、建筑物或地点的更改后,\n这些更改在您将它们保存到服务器之前都只会保存在本地。\n无需担心犯错:您随时可以点击撤销按钮或重做按钮以撤销或重做更改。\n\n请点击“保存”按钮以结束一组编辑内容。例如,如果您刚完成了城镇的一个区域,\n正打算开始下一个区域的工作,这时您有机会重新检查之前完成的工作,\n同时编辑器会自动给出有用的建议。如果您的更改有一些问题,编辑器也会给出警告。\n\n如果一切正常,您可以在保存时写入一小段注释以解释上一阶段的工作内容,\n然后再次点击“保存”按钮以向\n[OpenStreetMap.org](http://www.openstreetmap.org/) 提交更改。\n在此之后,您的更改将对所有其它用户可见,其它用户也将以此为基础继续改进地图。\n\n如果您一时无法完成编辑内容,您可以关闭编辑器窗口。\n待稍后您返回 (至同一台计算机的同一个浏览器) 时,\n重新打开编辑器将会恢复您的工作进度。\n\n## 使用编辑器\n\n编辑器可用的键盘快捷键列表可以 [在此](http://wiki.openstreetmap.org/wiki/ID/Shortcuts) 找到。\n",
+            "editing_saving": "# 编辑和保存\n\n本编辑器为在线编辑设计,您正在经由本网站使用它。\n\n### 选择要素\n\n您可以在地图上单击以选中一个要素,如道路或一个兴趣点。\n被选中的要素将被高亮显示,同时弹出一个显示其详细信息的面板,\n以及一个列出了可对该要素进行之操作的菜单。\n\n如需同时选中多个要素,您需要先按住 Shift 键。然后请多次点击选择全部的要素,\n或者在地图上画出一个长方形以圈出并选中长方形中所有的点。\n\n### 保存编辑内容\n\n当您做了比如编辑道路、建筑物或地点的更改后,\n这些更改在您将它们保存到服务器之前都只会保存在本地。\n无需担心犯错:您随时可以点击撤销按钮或重做按钮以撤销或重做更改。\n\n请点击“保存”按钮以结束一组编辑内容。例如,如果您刚完成了城镇的一个区域,\n正打算开始下一个区域的工作,这时您有机会重新检查之前完成的工作,\n同时编辑器会自动给出有用的建议。如果您的更改有一些问题,编辑器也会给出警告。\n\n如果一切正常,您可以在保存时写入一小段注释以解释上一阶段的工作内容,\n然后再次点击“保存”按钮以向\n[OpenStreetMap.org](http://www.openstreetmap.org/) 提交更改。\n在此之后,您的更改将对所有其它用户可见,其它用户也将以此为基础继续改进地图。\n\n如果您一时无法完成编辑内容,您可以关闭编辑器窗口。\n待稍后您返回 (至同一台计算机的同一个浏览器) 时,\n重新打开编辑器将会恢复您的工作进度。\n\n## 使用编辑器\n\n您可以按下 `?` 键来查看键盘快捷键列表。\n",
             "roads": "# 道路\n\n您可以利用这个编辑器创建,修复,及删除道路。道路可以有很多种:路径,公路,郊游径,单车径,和更多- 任何经常使用的路段都可制图。\n\n### 选择道路\n\n点击图上的道路以选择该道路。道路的轮廓会以高亮度显示,而同时地图上会出现小工具选单,旁边亦会弹出面板,显示有关该道路的信息。\n\n### 编辑道路\n\n您或会经常注意到,道路并非对齐在背景中显示的卫星图像或GPS轨迹。您可以调整这些道路,让他们位于正确的位置。\n\n首先,点击您想编辑的道路。这会将道路以高亮度显示,并显示沿着这道路的节点,你可以拖曳这些节点到更好的位置。如果您想增加细节,可以为道路添加新的节点,点击两下道路上没有节点的部分,便可在该处増加节点。\n\n如果道路连接到另一条道路,但在地图上并未妥善连接,你可以拖曳道路的其中一个节点到另一条道路上,以连接两条道路。连接好道路,对地图非常重要,特别是对提供驾驶指示的应用程序而言,是必要的。\n\n您也可以点击'移动'工具或按`M`快速键,来移动整条道路,然后点击一下以完成移动的动作。\n\n### 删除道路\n\n如果一条道路完全不正确- 您看到它在卫星图像上不存在,并最好实地证实它根本不存在- 您可以将道路删除,这会从地图中将之移除。删除物件时务必要小心- 像任何其他的编辑,结果会被大家看见,而卫星图像往往会过时,因此该道路或许只是新建的。\n\n要删除道路,您可以点击它以选择,然后点击垃圾桶图标,或按'Delete' 键。\n\n### 绘制新道路\n\n发现某处应有一条道路,但地图上没有?点击编辑器左上方的'线'图标,或按下`2`快速键,以开始绘制线段。\n\n在地图上点击道路的开端,以开始绘制道路。如果道路从一条现有的道路分支出来,应点击两者连接的地方,以开始绘制。\n\n然后点击沿着道路的点,以根据卫星影像或GPS轨迹,正确地绘制道路。如果您绘制的道路如果与另一条道路交汇,请点击相交点以将它们连接起来。当您完成绘制后,可点击两下或按键盘上的'Return' 或'Enter' 键。\n",
             "gps": "# GPS\n\n户外采集的GPS轨迹是OpenStreetMap的重要数据源之一。本编辑器\n支持本地轨迹——即你的电脑上的.gpx文件。你可以用众多智能手机\n应用或者个人GPS硬件采集这种GPS轨迹。\n\n有关如何使用GPS测量的信息,请参见\n[用智能手机、GPS或纸质图测图](http://learnosm.org/en/mobile-mapping/)。\n\n要使用GPX轨迹制图,将GPX文件拖曳到编辑器上即可。\n如果可以识别,将以亮紫色线条在地图上显示。\n点击右侧“地图数据”菜单可以打开、关闭或者\n缩放到新添加的GPX图层。\n\nGPX轨迹不会被直接上传到OpenStreetMap——最佳的使用方法是\n将其展绘到地图上作为辅助来绘制新增的地图要素,\n或者将其[上传到OpenStreetMap](http://www.openstreetmap.org/trace/create)\n供他人使用。\n",
             "imagery": "# 影像\n\n航拍影像是绘制地图的一个重要资源。编辑器右侧「背景设置」菜单里提供了一组飞机航拍、卫星影像及自由编译的来源。\n\n默认情况下编辑器显示的是[必应地图](http://www.bing.com/maps/)的卫星图层,但当您移动或缩放地图到一个新的地理区域会得到新的来源。一些国家,比如美国、法国和丹麦,会在一些区域提供非常高质量的影像。\n\n影像有时会因为影像提供商的错误和地图数据存在偏移。如果您看到许多道路偏离背景,请不要立刻移动它们来匹配背景,您可以点击背景设置界面底部的「修复对齐」来调整影像以使它和已有数据吻合。\n",
             "roads": "# 道路\n\n您可以利用这个编辑器创建,修复,及删除道路。道路可以有很多种:路径,公路,郊游径,单车径,和更多- 任何经常使用的路段都可制图。\n\n### 选择道路\n\n点击图上的道路以选择该道路。道路的轮廓会以高亮度显示,而同时地图上会出现小工具选单,旁边亦会弹出面板,显示有关该道路的信息。\n\n### 编辑道路\n\n您或会经常注意到,道路并非对齐在背景中显示的卫星图像或GPS轨迹。您可以调整这些道路,让他们位于正确的位置。\n\n首先,点击您想编辑的道路。这会将道路以高亮度显示,并显示沿着这道路的节点,你可以拖曳这些节点到更好的位置。如果您想增加细节,可以为道路添加新的节点,点击两下道路上没有节点的部分,便可在该处増加节点。\n\n如果道路连接到另一条道路,但在地图上并未妥善连接,你可以拖曳道路的其中一个节点到另一条道路上,以连接两条道路。连接好道路,对地图非常重要,特别是对提供驾驶指示的应用程序而言,是必要的。\n\n您也可以点击'移动'工具或按`M`快速键,来移动整条道路,然后点击一下以完成移动的动作。\n\n### 删除道路\n\n如果一条道路完全不正确- 您看到它在卫星图像上不存在,并最好实地证实它根本不存在- 您可以将道路删除,这会从地图中将之移除。删除物件时务必要小心- 像任何其他的编辑,结果会被大家看见,而卫星图像往往会过时,因此该道路或许只是新建的。\n\n要删除道路,您可以点击它以选择,然后点击垃圾桶图标,或按'Delete' 键。\n\n### 绘制新道路\n\n发现某处应有一条道路,但地图上没有?点击编辑器左上方的'线'图标,或按下`2`快速键,以开始绘制线段。\n\n在地图上点击道路的开端,以开始绘制道路。如果道路从一条现有的道路分支出来,应点击两者连接的地方,以开始绘制。\n\n然后点击沿着道路的点,以根据卫星影像或GPS轨迹,正确地绘制道路。如果您绘制的道路如果与另一条道路交汇,请点击相交点以将它们连接起来。当您完成绘制后,可点击两下或按键盘上的'Return' 或'Enter' 键。\n",
             "gps": "# GPS\n\n户外采集的GPS轨迹是OpenStreetMap的重要数据源之一。本编辑器\n支持本地轨迹——即你的电脑上的.gpx文件。你可以用众多智能手机\n应用或者个人GPS硬件采集这种GPS轨迹。\n\n有关如何使用GPS测量的信息,请参见\n[用智能手机、GPS或纸质图测图](http://learnosm.org/en/mobile-mapping/)。\n\n要使用GPX轨迹制图,将GPX文件拖曳到编辑器上即可。\n如果可以识别,将以亮紫色线条在地图上显示。\n点击右侧“地图数据”菜单可以打开、关闭或者\n缩放到新添加的GPX图层。\n\nGPX轨迹不会被直接上传到OpenStreetMap——最佳的使用方法是\n将其展绘到地图上作为辅助来绘制新增的地图要素,\n或者将其[上传到OpenStreetMap](http://www.openstreetmap.org/trace/create)\n供他人使用。\n",
             "imagery": "# 影像\n\n航拍影像是绘制地图的一个重要资源。编辑器右侧「背景设置」菜单里提供了一组飞机航拍、卫星影像及自由编译的来源。\n\n默认情况下编辑器显示的是[必应地图](http://www.bing.com/maps/)的卫星图层,但当您移动或缩放地图到一个新的地理区域会得到新的来源。一些国家,比如美国、法国和丹麦,会在一些区域提供非常高质量的影像。\n\n影像有时会因为影像提供商的错误和地图数据存在偏移。如果您看到许多道路偏离背景,请不要立刻移动它们来匹配背景,您可以点击背景设置界面底部的「修复对齐」来调整影像以使它和已有数据吻合。\n",
                 "intersect": "点击或按空格键来为这根线添加更多节点。{br}道路以及许多其他类型的线,都是更大网络的组成部分。为了使导航应用能够正常工作,正确连接这些线是十分重要的。 **点击 {name} 来创建一个交叉口以连接这两根线。**",
                 "retry_intersect": "这条路需要和 {name} 相交。让我们再试一次!",
                 "continue_line": "继续为这条新的路绘制线。记住您可以在需要时拖动或缩放地图。{br}当您完成绘制之后,再次点击结束节点。 **完成绘制道路。**",
                 "intersect": "点击或按空格键来为这根线添加更多节点。{br}道路以及许多其他类型的线,都是更大网络的组成部分。为了使导航应用能够正常工作,正确连接这些线是十分重要的。 **点击 {name} 来创建一个交叉口以连接这两根线。**",
                 "retry_intersect": "这条路需要和 {name} 相交。让我们再试一次!",
                 "continue_line": "继续为这条新的路绘制线。记住您可以在需要时拖动或缩放地图。{br}当您完成绘制之后,再次点击结束节点。 **完成绘制道路。**",
-                "choose_category_road": "**在列表中选择 {category} **",
+                "choose_category_road": "**在列表中选择 {category} **",
                 "choose_preset_residential": "道路的类型多种多样,但这一条是住宅区道路。 **选择 {preset} 类型。**",
                 "retry_preset_residential": "您并未选择 {preset} 类型。 **点击此处重新选择。**",
                 "choose_preset_residential": "道路的类型多种多样,但这一条是住宅区道路。 **选择 {preset} 类型。**",
                 "retry_preset_residential": "您并未选择 {preset} 类型。 **点击此处重新选择。**",
-                "name_road": "**为这条路添加一个名称,然后按下 Esc 键、回车键或点击 {button} 按钮来关闭要素编辑器**",
+                "name_road": "**为这条路添加一个名称,然后按下 Esc 键、回车键或点击 {button} 按钮来关闭要素编辑器**",
                 "did_name_road": "看起来不错!下一步我们将学习如何更新线的形状。",
                 "update_line": "有时候您需要更改已有线的形状。这里有条道路看起来不太对劲。",
                 "add_node": "我们可以向这根线添加更多节点来改进它的形状。其中一种方式是双击这根线上您想添加节点的位置。 **双击这根线来添加新的节点。**",
                 "did_name_road": "看起来不错!下一步我们将学习如何更新线的形状。",
                 "update_line": "有时候您需要更改已有线的形状。这里有条道路看起来不太对劲。",
                 "add_node": "我们可以向这根线添加更多节点来改进它的形状。其中一种方式是双击这根线上您想添加节点的位置。 **双击这根线来添加新的节点。**",
                 "rightclick_intersection": "最后一条真实的街是 {street1} ,所以我们将把 {street2} 在这个交叉口 *分割* ,然后删除所有上面的部分。 **右键点击交叉口节点。**",
                 "split_intersection": "**点击 {button} 按钮来分割 {street}。**",
                 "retry_split": "您并未点击分割按钮。请重试。",
                 "rightclick_intersection": "最后一条真实的街是 {street1} ,所以我们将把 {street2} 在这个交叉口 *分割* ,然后删除所有上面的部分。 **右键点击交叉口节点。**",
                 "split_intersection": "**点击 {button} 按钮来分割 {street}。**",
                 "retry_split": "您并未点击分割按钮。请重试。",
-                "did_split_multi": "干得不错! {street1} 现在已经被分割成两段了。它的上半部分可以被删除。 **点击选中{street2}的上半部分。**",
+                "did_split_multi": "干得不错! {street1} 现在已经被分割成两段了。它的上半部分可以被删除。 **点击选中 {street2} 的上半部分。**",
                 "did_split_single": "**点击选中{street2}的上半部分。**",
                 "multi_select": "{selected} 现在已经被选中了。让我们一同选择 {other1} 。您可以在点击的同时按下 Shift 键来选中多个东西。 **按住 Shift 键并点击 {other2} 。**",
                 "multi_rightclick": "很好!两根需要删除的线都被选中了。 **右键点击其中一根线来显示编辑菜单。**",
                 "did_split_single": "**点击选中{street2}的上半部分。**",
                 "multi_select": "{selected} 现在已经被选中了。让我们一同选择 {other1} 。您可以在点击的同时按下 Shift 键来选中多个东西。 **按住 Shift 键并点击 {other2} 。**",
                 "multi_rightclick": "很好!两根需要删除的线都被选中了。 **右键点击其中一根线来显示编辑菜单。**",
                 "done_square": "看见了建筑物的边角是如何规整的吗?让我们学习另一个有用的小技巧。",
                 "add_tank": "接下来我们将勾画这个圆形储罐的轮廓。 **点击 {button} 面按钮来添加一个新的面。**",
                 "start_tank": "不用担心,您不需要画出一个完美的圆。只需要在储罐上画一个面,使其节点接触到储罐的边缘。 **点击或按空格键,在储罐的边缘处放置一个起始节点。**",
                 "done_square": "看见了建筑物的边角是如何规整的吗?让我们学习另一个有用的小技巧。",
                 "add_tank": "接下来我们将勾画这个圆形储罐的轮廓。 **点击 {button} 面按钮来添加一个新的面。**",
                 "start_tank": "不用担心,您不需要画出一个完美的圆。只需要在储罐上画一个面,使其节点接触到储罐的边缘。 **点击或按空格键,在储罐的边缘处放置一个起始节点。**",
-                "continue_tank": "在其边缘处添加一些更多的节点。{br}按回车键、或再次点击起始/结束节点来结束绘制该面。 **完成勾画该储罐的轮廓。**",
+                "continue_tank": "在其边缘处添加一些更多的节点。之后圆将会创建在您勾画的节点外部。{br}按回车键、或再次点击起始/结束节点来结束绘制该面。 **完成勾画该储罐的轮廓。**",
                 "search_tank": "**搜索 '{preset}' 。**",
                 "choose_tank": "**在列表中选择 {preset} 。**",
                 "rightclick_tank": "**右键点击选中您创建的储罐来显示编辑菜单。**",
                 "search_tank": "**搜索 '{preset}' 。**",
                 "choose_tank": "**在列表中选择 {preset} 。**",
                 "rightclick_tank": "**右键点击选中您创建的储罐来显示编辑菜单。**",
                 "start": "开始绘制地图!"
             }
         },
                 "start": "开始绘制地图!"
             }
         },
+        "shortcuts": {
+            "title": "键盘快捷键",
+            "tooltip": "显示键盘快捷键界面",
+            "key": {
+                "alt": "Alt",
+                "backspace": "Backspace",
+                "cmd": "Cmd",
+                "ctrl": "Ctrl",
+                "delete": "Delete",
+                "del": "Del",
+                "end": "End",
+                "enter": "回车",
+                "esc": "Esc",
+                "home": "Home",
+                "option": "Option",
+                "pause": "Pause",
+                "pgdn": "PgDn",
+                "pgup": "PgUp",
+                "return": "回车",
+                "shift": "Shift",
+                "space": "空格"
+            },
+            "gesture": {
+                "drag": "拖动"
+            },
+            "or": "-或-",
+            "browsing": {
+                "title": "浏览",
+                "navigation": {
+                    "title": "导航",
+                    "pan": "移动地图",
+                    "pan_more": "整屏移动地图",
+                    "zoom": "放大 / 缩小",
+                    "zoom_more": "快速放大 / 缩小"
+                },
+                "help": {
+                    "title": "帮助",
+                    "help": "显示帮助 / 参考文档",
+                    "keyboard": "显示键盘快捷键"
+                },
+                "display_options": {
+                    "title": "显示设定",
+                    "background": "显示背景设置",
+                    "background_switch": "切换回上一背景",
+                    "map_data": "显示地图数据设置",
+                    "fullscreen": "进入全屏模式",
+                    "wireframe": "切换线框模式",
+                    "minimap": "切换小地图"
+                },
+                "selecting": {
+                    "title": "选择要素",
+                    "select_one": "选择单个要素",
+                    "select_multi": "选择多个要素",
+                    "lasso": "在要素周围绘制套索"
+                },
+                "with_selected": {
+                    "title": "对选中的要素",
+                    "infobox": "切换信息 / 测量框",
+                    "edit_menu": "切换编辑菜单"
+                },
+                "vertex_selected": {
+                    "title": "对选中的节点",
+                    "previous": "跳至上一节点",
+                    "next": "跳至下一节点",
+                    "first": "跳至起始节点",
+                    "last": "跳至末端节点",
+                    "change_parent": "切换主路径"
+                }
+            },
+            "editing": {
+                "title": "编辑",
+                "drawing": {
+                    "title": "绘制",
+                    "add_point": "'增加 点' 模式",
+                    "add_line": "'增加 线' 模式",
+                    "add_area": "'增加 面' 模式",
+                    "place_point": "放置一个点",
+                    "disable_snap": "按住以禁用节点吸附",
+                    "stop_line": "完成绘制线或面"
+                },
+                "operations": {
+                    "title": "操作",
+                    "continue_line": "在选中节点上继续绘制线",
+                    "merge": "合并选中的要素",
+                    "disconnect": "在选中节点上分离要素",
+                    "split": "在选中节点上分割线",
+                    "reverse": "反转线的方向",
+                    "move": "移动选中的要素",
+                    "rotate": "旋转选中的要素",
+                    "orthogonalize": "将线拉直 / 直角化面",
+                    "circularize": "环状化闭合的线或面",
+                    "reflect_long": "沿要素的长轴翻转",
+                    "reflect_short": "沿要素的短轴翻转",
+                    "delete": "删除选中的要素"
+                },
+                "commands": {
+                    "title": "命令",
+                    "copy": "复制选中的要素",
+                    "paste": "粘贴已复制的要素",
+                    "undo": "撤销上一操作",
+                    "redo": "重做上一操作",
+                    "save": "保存更改"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                     "label": "SSID (网络名称)"
                 },
                 "kerb": {
                     "label": "SSID (网络名称)"
                 },
                 "kerb": {
-                    "label": "路缘坡道"
+                    "label": "路缘"
                 },
                 "lamp_type": {
                     "label": "类型"
                 },
                 "lamp_type": {
                     "label": "类型"
                 "maxstay": {
                     "label": "可停留时间"
                 },
                 "maxstay": {
                     "label": "可停留时间"
                 },
+                "maxweight": {
+                    "label": "最大重量"
+                },
                 "mtb/scale": {
                     "label": "山地自行车骑行难度",
                     "options": {
                 "mtb/scale": {
                     "label": "山地自行车骑行难度",
                     "options": {
                     "name": "甜食",
                     "terms": "甜食"
                 },
                     "name": "甜食",
                     "terms": "甜食"
                 },
+                "craft/distillery": {
+                    "name": "酿酒厂",
+                    "terms": "酿酒厂,蒸馏间,蒸馏,酒,酒精,酿酒,酿造"
+                },
                 "craft/dressmaker": {
                     "name": "女装裁缝",
                     "terms": "女装裁缝"
                 "craft/dressmaker": {
                     "name": "女装裁缝",
                     "terms": "女装裁缝"
                     "name": "电工",
                     "terms": "电工"
                 },
                     "name": "电工",
                     "terms": "电工"
                 },
+                "craft/electronics_repair": {
+                    "name": "电子用品修理商店",
+                    "terms": "电子修理商店,电子用品修理点"
+                },
                 "craft/gardener": {
                     "name": "园艺工",
                     "terms": "园艺工"
                 "craft/gardener": {
                     "name": "园艺工",
                     "terms": "园艺工"
                     "name": "自行车道",
                     "terms": "自行车,单车"
                 },
                     "name": "自行车道",
                     "terms": "自行车,单车"
                 },
+                "highway/elevator": {
+                    "name": "电梯",
+                    "terms": "电梯,直梯"
+                },
                 "highway/footway": {
                     "name": "独立人行道",
                     "terms": "独立人行道,人行道,步行径"
                 "highway/footway": {
                     "name": "独立人行道",
                     "terms": "独立人行道,人行道,步行径"
                     "name": "古董店",
                     "terms": "古董店"
                 },
                     "name": "古董店",
                     "terms": "古董店"
                 },
+                "shop/appliance": {
+                    "name": "家用电器店",
+                    "terms": "家,电器,电器店,家用"
+                },
                 "shop/art": {
                     "name": "艺术品店",
                     "terms": "艺术品店"
                 "shop/art": {
                     "name": "艺术品店",
                     "terms": "艺术品店"
index 5f94d052bc9e987493fb00935987b7a410bc9a45..69e4d5285a1b80e08d8423ef2337d4f76837c10d 100644 (file)
         "help": {
             "title": "說明",
             "help": "# 說明\n\n這是[OpenStreetMap]的編輯器 (http://www.openstreetmap.org/),\n免費而且可以編輯的世界地圖。你可以用來新增和更新\n在你附近的資料,令這個開放源碼和開放資料的地圖\n變得更好。\n你在這地圖裡所作的變更會令其他使用OpenStreetMap的人看得到。\n如要編輯,你需要[登入] (https://www.openstreetmap.org/login)。\n\n[iD 編輯器](http://ideditor.com/)是一個共同合作計劃,[原始碼可在GitHub找到](https://github.com/openstreetmap/iD)。\n",
         "help": {
             "title": "說明",
             "help": "# 說明\n\n這是[OpenStreetMap]的編輯器 (http://www.openstreetmap.org/),\n免費而且可以編輯的世界地圖。你可以用來新增和更新\n在你附近的資料,令這個開放源碼和開放資料的地圖\n變得更好。\n你在這地圖裡所作的變更會令其他使用OpenStreetMap的人看得到。\n如要編輯,你需要[登入] (https://www.openstreetmap.org/login)。\n\n[iD 編輯器](http://ideditor.com/)是一個共同合作計劃,[原始碼可在GitHub找到](https://github.com/openstreetmap/iD)。\n",
-            "editing_saving": "# 編輯和儲存\n\n這個編輯器主要是靠網上運作而你正在\n經網頁使用它。\n\n### 選擇特徵\n\n要選擇特徵一個地圖特徵,例如道路或興趣點,\n可以在地圖上按它一下。 這樣就可以突出標示你選擇的特徵並開啟有關\n的詳細面板和顯示你可做的動作的選單。\n\n要選擇多個特徵,按著'Shift'鍵,然後\n用滑鼠按你想選擇的特徵或者在地圖上拖曳畫出長方形,\n所有在長方形內的點就會被選。\n\n### 儲存編輯\n\n當你作了變更,例如編輯道路、建築物和地方,\n它們就會儲在你的裝置直至你把它們儲存在伺服器內。如果有錯\n亦不用擔心 - 你可以按還原鍵還原你的變更和重做鍵再做過你的變更。\n\n按 '儲存' 就可儲存一組的編輯 - 例如你已完成\n一個鎮的範圍和希望開始一個新的範圍。你亦有機會\n去復審你做過甚麼,而如果有些不太正確的編輯,\n編輯器還會提供有用的建議和警告。\n\n如果沒有問題,你就可以輸入一些短句解釋一下你所作的變更。\n然後按'儲存'就可將變更上傳到\n[OpenStreetMap.org](http://www.openstreetmap.org/), 其他使用者\n就會看得到和使其他人建立和作出改進。\n\n如果你不可以一次過完成你的編輯,你可以離開編輯器\n視窗並再次回來(使用同一個瀏覽器和電腦),\n編輯器就會復原你的工作。editor application will offer to restore your work.\n\n### 使用編輯器\n\n鍵盤快捷鍵列表可以在\n[這裡](http://wiki.openstreetmap.org/wiki/ID/Shortcuts)找到。\n",
             "roads": "# 道路\n\n你可以用編輯器創造、修改和刪除道路。道路有不同種類:\n行人路、公路、步行徑、單車徑等等 — 所有路段都可以畫出來。\n\n### 選擇\n\n按一下道路就可選擇。道路的輪廓就會顯現出來,\n小工具選單也會一併顯示在地圖上,\n而道路的更多資訊就會顯示在旁邊的版面。\n\n### 修改\n\n間中你會看到道路並不是與背景圖像或者\nGPS軌跡對齊。你可以調節這些道路,使它們\n在正確的地方。\n\n首先按一下你要更改的道路。道路會顯現出來,你可以\n拖拉道路上的控制點至更佳位置。如果\n你想使道路有更仔細顯示,你可以增加控制點,\n在道路上沒有節的地方按兩下,就可增加一個控制點。\n\n如果道路與另一道路相連,但不是妥善地在地圖上\n連接著,你可以拖拉其中一個控制點至另一條道路上\n,便它們連接。令道路連接是十分重要的,而且是\n駕駛方向的重要資訊。\n\n你可以按一下'移動'工具或者按'M'快速鍵去移動整條\n路,然後按多一下就會將那一次動作儲存。\n\n### 刪除\n\n如果道路完全不正確 — 你在衛星圖像裡看不到,\n而最好實地證實它並不存在 — 你就可以刪除\n它,從地圖中移除。刪除特徵時要特別小心 —\n與其他編輯一樣,每一個人都會看得到結果而衛星圖像\n通常都不是最新的,所以道路可能是新建的。\n\n你可以按一下想刪除的道路,然後\n按垃圾桶圖示或按'Delete'鍵。\n\n### 創造\n\n發現某個地方的道路不在嗎?按一下編輯器\n左上方的'綫'圖示或者按'2'快速鍵就可以\n開始繪畫一條新綫。\n\n在地圖上按一下就可以開始繪畫道路的開端。如果道路\n是現有道路的分支,你可以從分支處按一下開始繪畫。\n\n然後跟據衛星圖像或者GPS,沿著道路的點,\n使它跟著正確的路徑。如果你繪畫的道路與另一道路\n相交,在它們的相交點按一下就可將它們連接。當你\n完成繪畫,按兩下或者按'Return'或'Enter'鍵。\n\n",
             "gps": "# GPS\n\nGPS 追蹤是OpenStreetMap 的寶貴資料來源。這個編輯器\n支援你電腦內的 `.gpx` 檔案。使用智能電話的\n一些應用程式或個人GPS更體就可以搜集得到\n這類的GPS軌跡。\n\n要知道如何運用GPS測量,\n請參閱[用智能電話、GPS或紙繪地圖](http://learnosm.org/en/mobile-mapping/)。\n\n要使用GPX的軌跡繪畫地圖,拖放GPX檔案到編輯器上。\n如辨認得到,它就會於地圖上新增為鮮紫色的綫。\n按'地圖資料'選單右側就可顯示、\n隱藏或縮放這個新的GPX圖層。\n\nGPX軌跡不會直接上載至 OpenStreetMap - 最好的用法\n就要用來繪畫新的地圖、協助你新增特徵、\n或者用來[上載至OpenStreetMap](http://www.openstreetmap.org/trace/create)\n供其他使用者使用。\n",
             "imagery": "# 圖像\n\n航攝圖像是繪製地圖的重要資源。一系列的\n航攝圖像、衛星圖像和自由編輯的圖像資源\n可以從編輯器右方的'背景設定'選單中選擇。\n\n編輯器預設的衛星圖層是 [Bing Map](http://www.bing.com/maps/),\n但當你平移和縮放至一個新的地域,\n新的來源就可以使用。有一些國家,例如:\n美國、法國和丹麥當中的一些地方,會有高品質圖像。\n\n圖像有時與地圖資料有所偏差,這是由於圖像\n供應商的誤差。如果你看到很多的道路與圖像有平移錯位,\n不用立即移動它們以符合背景。你可以按背景設定底部的'校準'\n來調整圖像,讓它符合現有資料。\n",
             "roads": "# 道路\n\n你可以用編輯器創造、修改和刪除道路。道路有不同種類:\n行人路、公路、步行徑、單車徑等等 — 所有路段都可以畫出來。\n\n### 選擇\n\n按一下道路就可選擇。道路的輪廓就會顯現出來,\n小工具選單也會一併顯示在地圖上,\n而道路的更多資訊就會顯示在旁邊的版面。\n\n### 修改\n\n間中你會看到道路並不是與背景圖像或者\nGPS軌跡對齊。你可以調節這些道路,使它們\n在正確的地方。\n\n首先按一下你要更改的道路。道路會顯現出來,你可以\n拖拉道路上的控制點至更佳位置。如果\n你想使道路有更仔細顯示,你可以增加控制點,\n在道路上沒有節的地方按兩下,就可增加一個控制點。\n\n如果道路與另一道路相連,但不是妥善地在地圖上\n連接著,你可以拖拉其中一個控制點至另一條道路上\n,便它們連接。令道路連接是十分重要的,而且是\n駕駛方向的重要資訊。\n\n你可以按一下'移動'工具或者按'M'快速鍵去移動整條\n路,然後按多一下就會將那一次動作儲存。\n\n### 刪除\n\n如果道路完全不正確 — 你在衛星圖像裡看不到,\n而最好實地證實它並不存在 — 你就可以刪除\n它,從地圖中移除。刪除特徵時要特別小心 —\n與其他編輯一樣,每一個人都會看得到結果而衛星圖像\n通常都不是最新的,所以道路可能是新建的。\n\n你可以按一下想刪除的道路,然後\n按垃圾桶圖示或按'Delete'鍵。\n\n### 創造\n\n發現某個地方的道路不在嗎?按一下編輯器\n左上方的'綫'圖示或者按'2'快速鍵就可以\n開始繪畫一條新綫。\n\n在地圖上按一下就可以開始繪畫道路的開端。如果道路\n是現有道路的分支,你可以從分支處按一下開始繪畫。\n\n然後跟據衛星圖像或者GPS,沿著道路的點,\n使它跟著正確的路徑。如果你繪畫的道路與另一道路\n相交,在它們的相交點按一下就可將它們連接。當你\n完成繪畫,按兩下或者按'Return'或'Enter'鍵。\n\n",
             "gps": "# GPS\n\nGPS 追蹤是OpenStreetMap 的寶貴資料來源。這個編輯器\n支援你電腦內的 `.gpx` 檔案。使用智能電話的\n一些應用程式或個人GPS更體就可以搜集得到\n這類的GPS軌跡。\n\n要知道如何運用GPS測量,\n請參閱[用智能電話、GPS或紙繪地圖](http://learnosm.org/en/mobile-mapping/)。\n\n要使用GPX的軌跡繪畫地圖,拖放GPX檔案到編輯器上。\n如辨認得到,它就會於地圖上新增為鮮紫色的綫。\n按'地圖資料'選單右側就可顯示、\n隱藏或縮放這個新的GPX圖層。\n\nGPX軌跡不會直接上載至 OpenStreetMap - 最好的用法\n就要用來繪畫新的地圖、協助你新增特徵、\n或者用來[上載至OpenStreetMap](http://www.openstreetmap.org/trace/create)\n供其他使用者使用。\n",
             "imagery": "# 圖像\n\n航攝圖像是繪製地圖的重要資源。一系列的\n航攝圖像、衛星圖像和自由編輯的圖像資源\n可以從編輯器右方的'背景設定'選單中選擇。\n\n編輯器預設的衛星圖層是 [Bing Map](http://www.bing.com/maps/),\n但當你平移和縮放至一個新的地域,\n新的來源就可以使用。有一些國家,例如:\n美國、法國和丹麥當中的一些地方,會有高品質圖像。\n\n圖像有時與地圖資料有所偏差,這是由於圖像\n供應商的誤差。如果你看到很多的道路與圖像有平移錯位,\n不用立即移動它們以符合背景。你可以按背景設定底部的'校準'\n來調整圖像,讓它符合現有資料。\n",
                 "start": "開始制圖"
             }
         },
                 "start": "開始制圖"
             }
         },
+        "shortcuts": {
+            "title": "鍵盤快速鍵",
+            "browsing": {
+                "title": "瀏覽",
+                "navigation": {
+                    "title": "導航",
+                    "pan": "平移地圖",
+                    "zoom": "放大 / 縮小"
+                },
+                "help": {
+                    "title": "說明",
+                    "help": "顯示說明/文件",
+                    "keyboard": "顯示鍵盤快速鍵"
+                },
+                "display_options": {
+                    "title": "顯示選項",
+                    "background": "顯示背景選項",
+                    "background_switch": "轉換至上一個背景",
+                    "map_data": "顯示地圖資料選項",
+                    "minimap": "切換迷你地圖"
+                },
+                "selecting": {
+                    "title": "選擇特徵",
+                    "select_one": "選擇一個特徵",
+                    "select_multi": "選擇多個特徵"
+                },
+                "with_selected": {
+                    "edit_menu": "切換編輯選單"
+                }
+            },
+            "editing": {
+                "title": "編輯"
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                     "label": "種類"
                 },
                 "crop": {
                     "label": "種類"
                 },
                 "crop": {
-                    "label": "è£\81å\89ª"
+                    "label": "è¾²ä½\9cç\89©"
                 },
                 "crossing": {
                     "label": "種類"
                 },
                 "crossing": {
                     "label": "種類"
                 "maxstay": {
                     "label": "可停留時間"
                 },
                 "maxstay": {
                     "label": "可停留時間"
                 },
+                "maxweight": {
+                    "label": "最大承重"
+                },
                 "mtb/scale": {
                     "label": "越野單車徑難度",
                     "options": {
                 "mtb/scale": {
                     "label": "越野單車徑難度",
                     "options": {
                     "name": "大學範圍",
                     "terms": "大學,大專,大學用地"
                 },
                     "name": "大學範圍",
                     "terms": "大學,大專,大學用地"
                 },
+                "amenity/vending_machine": {
+                    "name": "售賣機",
+                    "terms": "Vending Machine,售賣機,自動售賣機,自動販賣機,販賣機"
+                },
                 "amenity/vending_machine/cigarettes": {
                     "name": "香煙售賣機",
                     "terms": "香煙售賣機"
                 "amenity/vending_machine/cigarettes": {
                     "name": "香煙售賣機",
                     "terms": "香煙售賣機"
                 "amenity/vending_machine/news_papers": {
                     "name": "報紙售賣機"
                 },
                 "amenity/vending_machine/news_papers": {
                     "name": "報紙售賣機"
                 },
+                "amenity/vending_machine/newspapers": {
+                    "name": "報紙售賣機",
+                    "terms": "Newspaper Vending Machine,報紙販賣機"
+                },
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "包裹領件/投寄機",
                     "terms": "包裹領件/投寄機"
                 "amenity/vending_machine/parcel_pickup_dropoff": {
                     "name": "包裹領件/投寄機",
                     "terms": "包裹領件/投寄機"
                     "name": "電工",
                     "terms": "電氣工程,電業工匠"
                 },
                     "name": "電工",
                     "terms": "電氣工程,電業工匠"
                 },
+                "craft/electronics_repair": {
+                    "name": "電子儀器維修店",
+                    "terms": "Electronics Repair Shop, 家電維修店"
+                },
                 "craft/gardener": {
                     "name": "園務工人",
                     "terms": "花王"
                 "craft/gardener": {
                     "name": "園務工人",
                     "terms": "花王"
                     "name": "單車徑",
                     "terms": "Cycle Path,單車徑,自行車道"
                 },
                     "name": "單車徑",
                     "terms": "Cycle Path,單車徑,自行車道"
                 },
+                "highway/elevator": {
+                    "name": "升降機",
+                    "terms": "Elevator, lift, 升降機"
+                },
                 "highway/footway": {
                     "name": "行人徑",
                     "terms": "Foot Path,步行徑,行人徑"
                 "highway/footway": {
                     "name": "行人徑",
                     "terms": "Foot Path,步行徑,行人徑"
                     "name": "古董店",
                     "terms": "古董店, 古玩店"
                 },
                     "name": "古董店",
                     "terms": "古董店, 古玩店"
                 },
+                "shop/appliance": {
+                    "name": "電器店",
+                    "terms": "Appliance Store,家電店,家用電器店"
+                },
                 "shop/art": {
                     "name": "藝術商店",
                     "terms": "藝術店,美術店,美術商店"
                 "shop/art": {
                     "name": "藝術商店",
                     "terms": "藝術店,美術店,美術商店"
index c8a73d0adcf7716c307cfb05bbffd6bd25d84130..5040f49f02c93d4221e015b72893da37d4e2f854 100644 (file)
         "help": {
             "title": "說明文件",
             "help": "# 說明\n\n這是[開放街圖](http://www.openstreetmap.org/)的編輯器。\n開放街圖是自由及可編輯的世界地圖。您可以用這個編輯器來添加和更新您所在區域的地圖資料,令這個開源和開放資料的世界地圖變得更好。\n\n您在地圖上所做的編輯,將會讓所有使用開放街圖的人看到。為了編輯,您需要先[登入](https://www.openstreetmap.org/login)。\n\n[iD編輯器](http://ideditor.com/) 採用開源方式合作開發的專案, [原始碼可在GitHub找到](https://github.com/openstreetmap/iD)。\n",
         "help": {
             "title": "說明文件",
             "help": "# 說明\n\n這是[開放街圖](http://www.openstreetmap.org/)的編輯器。\n開放街圖是自由及可編輯的世界地圖。您可以用這個編輯器來添加和更新您所在區域的地圖資料,令這個開源和開放資料的世界地圖變得更好。\n\n您在地圖上所做的編輯,將會讓所有使用開放街圖的人看到。為了編輯,您需要先[登入](https://www.openstreetmap.org/login)。\n\n[iD編輯器](http://ideditor.com/) 採用開源方式合作開發的專案, [原始碼可在GitHub找到](https://github.com/openstreetmap/iD)。\n",
-            "editing_saving": "# 編輯和儲存\n\n這個編輯器主要是設計用來線上編輯的,而你現在正透過網站使用它。\n\n### 選擇物件\n\n要選擇一個地圖上的物件,如道路或興趣點,可以在地圖上點選它。這會讓已選擇的物件醒目顯示,並開啟一個有著它的詳細資料的面板,且顯示一個你能對物件做什麼事的選單。\n\n要選擇多個物件,按住「Shift」鍵,然後點選您想選擇的物件;或是按住「Shift」鍵並在地圖上拖曳畫出一個矩形,這將畫出一個方塊並選擇在內部的所有點。\n\n### 儲存編輯\n\n當你做出修改像是編輯道路、建築物和場所,它們會被存放在本機直到你儲存至伺服器。別擔心如果你犯了錯,您可以按「撤銷」鈕修改,或按「重做」鈕重做被撤銷的修改。\n\n按「儲存」結束一組編輯-譬如你已經完成一塊城鎮中的區域,而且想在新的區域開始。您將有機會覆核你做的編輯,而若有些修改看起來有錯,編輯器將提供有幫助的建議和警告。\n\n如果一切都沒錯,您可以輸入一段簡短的注釋來解釋你做了什麼修改,然後再按一次「儲存」鈕把修改發布到 [OpenStreetMap.org](http://www.openstreetmap.org/),在那裡這些修改將可以被其他使用者看到並加以改進。\n\n如果你不能一次完成你的編輯,你可以離開編輯器視窗,再從同一個瀏覽器和電腦回來,編輯器將讓你選擇是否恢復你的編輯。\n\n### 使用這個編輯器\n\n[這裡](http://wiki.openstreetmap.org/wiki/ID/Shortcuts)有一個可用的鍵盤快速鍵清單。\n",
             "roads": "# 道路\n\n您可以利用這個編輯器創建,修復,及刪除道路。道路可以有很多種:行人路徑,公路,步道,單車路線等等 - 任何經常使用的路段都可製圖。\n\n### 選擇道路\n\n按圖上的道路以選擇該道路。道路的輪廓會以高亮度顯示,而同時地圖上會出現小工具選單,旁邊亦會彈出面板,顯示有關該道路的資訊。\n\n### 修改道路\n\n您或會經常注意到,道路並非對齊在背景中顯示的衛星圖像或GPS軌跡。您可以調整這些道路,讓他們位於正確的位置。\n\n首先,按您想修訂的道路。這會將道路以高亮度顯示,並顯示沿著這道路的節點,你可以拖曳這些節點到更好的位置。如果您想增加細節,可以為道路添加新的節點,點擊兩下道路上沒有節點的部分,便可在該處増加節點。\n\n如果道路連接到另一條道路,但在地圖上並未妥善連接,你可以拖曳道路的其中一個節點到另一條道路上,以連接兩條道路。連接好道路,對地圖非常重要,特別是對提供駕駛指示的應用程序而言,是必要的。\n\n您也可以按下'移動'工具或按`M`快速鍵,來移動整條道路,然後按一下以完成移動的動作。\n\n### 刪除道路\n\n如果一條道路完全不正確 - 您看到它在衛星圖像上不存在,並最好實地證實它根本不存在 - 您可以將道路刪除,這會從地圖中將之移除。刪除物件時務必要小心 - 像任何其他的編輯,結果會被大家看見,而衛星圖像往往會過時,因此該道路或許只是新建的。\n\n要刪除道路,您可以按住它以選擇,然後按下垃圾桶圖標,或按 ’Delete’ 鍵。\n\n### 繪製新道路\n\n發現某處應有一條道路,但地圖上沒有?按編輯器左上方的'線'按鈕,或按下`2`快速鍵,以開始繪製線段。\n\n在地圖上點擊道路的開端,以開始繪製道路。如果道路從一條現有的道路分支出來,應點擊兩者連接的地方,以開始繪製。\n\n然後按住沿著道路的點,以根據衛星影像或GPS軌跡,正確地繪製道路。如果您繪製的道路如果與另一條道路交匯,請點擊相交點以將它們連接起來。當您完成繪製後,可按兩下滑鼠或按鍵盤上的 'Return' 或 ’Enter’ 鍵。\n\n",
             "gps": "# GPS\n\nGPS 資料是 OpenStreetMap 最可靠的資料來源. 這個編輯器支援 `.gpx` 的軌跡檔。 你可以使用智慧型手機的程式或個人 GPS 硬體去搜集。\n\n關於如何進行 GPS 資料搜集, 可參考 [Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/)。\n\n當要使用 GPX 軌跡檔去繪圖時,你可以直接拖拉 GPX 檔案至地圖編輯器上,如果編輯器識別到軌跡檔時,它將用亮紫色把軌跡顯示在地圖上。你可以點擊右側的 'Map Data' 選單去顯示、隱藏或縮放這個軌跡所產生的圖層。\n\n這個 GPX 軌跡並沒有上傳至 OpenStreetMap,但這種方式適合於當你想把軌跡當成參考資料去繪製新的地圖時,當然你也可以[上傳軌跡至 OpenStreetMap](http://www.openstreetmap.org/trace/create) 供其它人使用。\n",
             "imagery": "# 圖像\n\n空照圖是繪製地圖重要的資料來源。在畫面右方的'背景圖像設定'選單中,可選擇使用的圖像,\n他們分別為空照圖、衛星影像和其他可自由編輯的圖像資源。\n\n編輯器預設使用[Bing Maps](http://www.bing.com/maps/)的衛星圖層,\n但當您平移或縮放地圖至一個新的地理區域,或可使用新的資源。\n在一些國家,像美國、法國和丹麥,部分區域有非常高品質的圖像。\n\n圖像會與地圖數據有所偏移。如果你看見很多的道路與背景有偏移,請不要立刻將它們全部搬移以與背景刎合。相反,你可以在「背景設定」選單中,點擊下方的「校準底圖」,以調整圖像以配合現有地圖數據。\n\n圖像有時候或會因為圖像提供者方面的誤差,與地圖資料有所偏移。\n如果您看到有很多路與背景是平移錯位的,請不要立刻將它們全部搬移以與背景刎合。\n您只需要點擊圖像設定介面底部的'校準'來調整圖像,讓它符合現有資料。\n",
             "roads": "# 道路\n\n您可以利用這個編輯器創建,修復,及刪除道路。道路可以有很多種:行人路徑,公路,步道,單車路線等等 - 任何經常使用的路段都可製圖。\n\n### 選擇道路\n\n按圖上的道路以選擇該道路。道路的輪廓會以高亮度顯示,而同時地圖上會出現小工具選單,旁邊亦會彈出面板,顯示有關該道路的資訊。\n\n### 修改道路\n\n您或會經常注意到,道路並非對齊在背景中顯示的衛星圖像或GPS軌跡。您可以調整這些道路,讓他們位於正確的位置。\n\n首先,按您想修訂的道路。這會將道路以高亮度顯示,並顯示沿著這道路的節點,你可以拖曳這些節點到更好的位置。如果您想增加細節,可以為道路添加新的節點,點擊兩下道路上沒有節點的部分,便可在該處増加節點。\n\n如果道路連接到另一條道路,但在地圖上並未妥善連接,你可以拖曳道路的其中一個節點到另一條道路上,以連接兩條道路。連接好道路,對地圖非常重要,特別是對提供駕駛指示的應用程序而言,是必要的。\n\n您也可以按下'移動'工具或按`M`快速鍵,來移動整條道路,然後按一下以完成移動的動作。\n\n### 刪除道路\n\n如果一條道路完全不正確 - 您看到它在衛星圖像上不存在,並最好實地證實它根本不存在 - 您可以將道路刪除,這會從地圖中將之移除。刪除物件時務必要小心 - 像任何其他的編輯,結果會被大家看見,而衛星圖像往往會過時,因此該道路或許只是新建的。\n\n要刪除道路,您可以按住它以選擇,然後按下垃圾桶圖標,或按 ’Delete’ 鍵。\n\n### 繪製新道路\n\n發現某處應有一條道路,但地圖上沒有?按編輯器左上方的'線'按鈕,或按下`2`快速鍵,以開始繪製線段。\n\n在地圖上點擊道路的開端,以開始繪製道路。如果道路從一條現有的道路分支出來,應點擊兩者連接的地方,以開始繪製。\n\n然後按住沿著道路的點,以根據衛星影像或GPS軌跡,正確地繪製道路。如果您繪製的道路如果與另一條道路交匯,請點擊相交點以將它們連接起來。當您完成繪製後,可按兩下滑鼠或按鍵盤上的 'Return' 或 ’Enter’ 鍵。\n\n",
             "gps": "# GPS\n\nGPS 資料是 OpenStreetMap 最可靠的資料來源. 這個編輯器支援 `.gpx` 的軌跡檔。 你可以使用智慧型手機的程式或個人 GPS 硬體去搜集。\n\n關於如何進行 GPS 資料搜集, 可參考 [Mapping with a smartphone, GPS, or paper](http://learnosm.org/en/mobile-mapping/)。\n\n當要使用 GPX 軌跡檔去繪圖時,你可以直接拖拉 GPX 檔案至地圖編輯器上,如果編輯器識別到軌跡檔時,它將用亮紫色把軌跡顯示在地圖上。你可以點擊右側的 'Map Data' 選單去顯示、隱藏或縮放這個軌跡所產生的圖層。\n\n這個 GPX 軌跡並沒有上傳至 OpenStreetMap,但這種方式適合於當你想把軌跡當成參考資料去繪製新的地圖時,當然你也可以[上傳軌跡至 OpenStreetMap](http://www.openstreetmap.org/trace/create) 供其它人使用。\n",
             "imagery": "# 圖像\n\n空照圖是繪製地圖重要的資料來源。在畫面右方的'背景圖像設定'選單中,可選擇使用的圖像,\n他們分別為空照圖、衛星影像和其他可自由編輯的圖像資源。\n\n編輯器預設使用[Bing Maps](http://www.bing.com/maps/)的衛星圖層,\n但當您平移或縮放地圖至一個新的地理區域,或可使用新的資源。\n在一些國家,像美國、法國和丹麥,部分區域有非常高品質的圖像。\n\n圖像會與地圖數據有所偏移。如果你看見很多的道路與背景有偏移,請不要立刻將它們全部搬移以與背景刎合。相反,你可以在「背景設定」選單中,點擊下方的「校準底圖」,以調整圖像以配合現有地圖數據。\n\n圖像有時候或會因為圖像提供者方面的誤差,與地圖資料有所偏移。\n如果您看到有很多路與背景是平移錯位的,請不要立刻將它們全部搬移以與背景刎合。\n您只需要點擊圖像設定介面底部的'校準'來調整圖像,讓它符合現有資料。\n",
                 "rightclick_intersection": "最後一條真實存在的道路是 {street1},所以我們*分割* {street2} 交叉口,移除上面的東西。**對著交叉口按右鍵。**",
                 "split_intersection": "**點 {button} 按鈕來分割 {street}。**",
                 "retry_split": "你沒有按分割按鈕。再試一下。",
                 "rightclick_intersection": "最後一條真實存在的道路是 {street1},所以我們*分割* {street2} 交叉口,移除上面的東西。**對著交叉口按右鍵。**",
                 "split_intersection": "**點 {button} 按鈕來分割 {street}。**",
                 "retry_split": "你沒有按分割按鈕。再試一下。",
-                "did_split_multi": "太棒了! {street1} 已經分割為兩段了。上半部可以被移除。**點選 {street2} 上半部來選取它。**",
+                "did_split_multi": "太棒了! {street1} 已經分割為兩段了。上半部可以被移除。**點選 {street2} 上半部來選取它。**",
                 "did_split_single": "**點 {street2} 上半部來選取它。**",
                 "multi_select": "已經選取 {selected}。讓我們選另一段 {other1}。你可以用 shift 點選方式多重選擇物件。**Shift 點選  {other2}。**",
                 "multi_rightclick": "太好了!兩條選取的線都被刪除了。**對著其中一條線按右鍵顯示編輯目錄。**",
                 "did_split_single": "**點 {street2} 上半部來選取它。**",
                 "multi_select": "已經選取 {selected}。讓我們選另一段 {other1}。你可以用 shift 點選方式多重選擇物件。**Shift 點選  {other2}。**",
                 "multi_rightclick": "太好了!兩條選取的線都被刪除了。**對著其中一條線按右鍵顯示編輯目錄。**",
                 "start": "開始製圖!"
             }
         },
                 "start": "開始製圖!"
             }
         },
+        "shortcuts": {
+            "title": "鍵盤快速鍵",
+            "browsing": {
+                "title": "瀏覽",
+                "navigation": {
+                    "title": "導航"
+                }
+            },
+            "editing": {
+                "title": "編輯",
+                "drawing": {
+                    "title": "繪製"
+                }
+            }
+        },
         "presets": {
             "categories": {
                 "category-barrier": {
         "presets": {
             "categories": {
                 "category-barrier": {
                 "maxstay": {
                     "label": "可停留時間"
                 },
                 "maxstay": {
                     "label": "可停留時間"
                 },
+                "maxweight": {
+                    "label": "最大承重"
+                },
                 "mtb/scale": {
                     "label": "越越單車難度",
                     "options": {
                 "mtb/scale": {
                     "label": "越越單車難度",
                     "options": {
                     "label": "服務時間"
                 },
                 "shelter": {
                     "label": "服務時間"
                 },
                 "shelter": {
-                    "label": "涼亭"
+                    "label": "æ\9c\89è\93\8bç¯\84å\9c\8d"
                 },
                 "shelter_type": {
                     "label": "種類"
                 },
                 "shelter_type": {
                     "label": "種類"
                     "name": "電氣工程",
                     "terms": "電氣工程"
                 },
                     "name": "電氣工程",
                     "terms": "電氣工程"
                 },
+                "craft/electronics_repair": {
+                    "name": "電器維修店",
+                    "terms": "維修店,修電器店"
+                },
                 "craft/gardener": {
                     "name": "園藝師",
                     "terms": "園藝師"
                 "craft/gardener": {
                     "name": "園藝師",
                     "terms": "園藝師"
                     "name": "單車路線",
                     "terms": "單車徑,腳踏車路線"
                 },
                     "name": "單車路線",
                     "terms": "單車徑,腳踏車路線"
                 },
+                "highway/elevator": {
+                    "name": "電梯",
+                    "terms": "電梯,升降梯"
+                },
                 "highway/footway": {
                     "name": "人行道",
                     "terms": "步行徑,人行步道"
                 "highway/footway": {
                     "name": "人行道",
                     "terms": "步行徑,人行步道"
                     "name": "古董店",
                     "terms": "古董商店"
                 },
                     "name": "古董店",
                     "terms": "古董商店"
                 },
+                "shop/appliance": {
+                    "name": "家用電器店",
+                    "terms": "家電店,電器店"
+                },
                 "shop/art": {
                     "name": "藝術商店",
                     "terms": "藝術商店"
                 "shop/art": {
                     "name": "藝術商店",
                     "terms": "藝術商店"
index 35f52a564abb38d5217d2563f202dfd7606cd3c2..8219d7ce2863188fb4e4053ffea7a1e34487d4f7 100644 (file)
@@ -395,6 +395,10 @@ process.off = noop;
 process.removeListener = noop;
 process.removeAllListeners = noop;
 process.emit = noop;
 process.removeListener = noop;
 process.removeAllListeners = noop;
 process.emit = noop;
+process.prependListener = noop;
+process.prependOnceListener = noop;
+
+process.listeners = function (name) { return [] }
 
 process.binding = function (name) {
     throw new Error('process.binding is not supported');
 
 process.binding = function (name) {
     throw new Error('process.binding is not supported');
@@ -3282,18 +3286,20 @@ var topLevel = typeof global !== 'undefined' ? global :
     typeof window !== 'undefined' ? window : {}
 var minDoc = require('min-document');
 
     typeof window !== 'undefined' ? window : {}
 var minDoc = require('min-document');
 
+var doccy;
+
 if (typeof document !== 'undefined') {
 if (typeof document !== 'undefined') {
-    module.exports = document;
+    doccy = document;
 } else {
 } else {
-    var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];
+    doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];
 
     if (!doccy) {
         doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;
     }
 
     if (!doccy) {
         doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;
     }
-
-    module.exports = doccy;
 }
 
 }
 
+module.exports = doccy;
+
 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
 
 },{"min-document":2}],15:[function(require,module,exports){
 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
 
 },{"min-document":2}],15:[function(require,module,exports){
@@ -5214,7 +5220,7 @@ var BehaviorSubject = (function (_super) {
 }(Subject_1.Subject));
 exports.BehaviorSubject = BehaviorSubject;
 
 }(Subject_1.Subject));
 exports.BehaviorSubject = BehaviorSubject;
 
-},{"./Subject":33,"./util/ObjectUnsubscribedError":158}],26:[function(require,module,exports){
+},{"./Subject":33,"./util/ObjectUnsubscribedError":159}],26:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -5465,7 +5471,10 @@ var Observable = (function () {
             throw new Error('no Promise impl found');
         }
         return new PromiseCtor(function (resolve, reject) {
             throw new Error('no Promise impl found');
         }
         return new PromiseCtor(function (resolve, reject) {
-            var subscription = _this.subscribe(function (value) {
+            // Must be declared in a separate statement to avoid a RefernceError when
+            // accessing subscription below in the closure due to Temporal Dead Zone.
+            var subscription;
+            subscription = _this.subscribe(function (value) {
                 if (subscription) {
                     // if there is a subscription, then we can surmise
                     // the next handling is asynchronous. Any errors thrown
                 if (subscription) {
                     // if there is a subscription, then we can surmise
                     // the next handling is asynchronous. Any errors thrown
@@ -5499,7 +5508,7 @@ var Observable = (function () {
      * @method Symbol.observable
      * @return {Observable} this instance of the observable
      */
      * @method Symbol.observable
      * @return {Observable} this instance of the observable
      */
-    Observable.prototype[observable_1.$$observable] = function () {
+    Observable.prototype[observable_1.observable] = function () {
         return this;
     };
     // HACK: Since TypeScript inherits static properties too, we have to
         return this;
     };
     // HACK: Since TypeScript inherits static properties too, we have to
@@ -5519,7 +5528,7 @@ var Observable = (function () {
 }());
 exports.Observable = Observable;
 
 }());
 exports.Observable = Observable;
 
-},{"./symbol/observable":153,"./util/root":170,"./util/toSubscriber":172}],29:[function(require,module,exports){
+},{"./symbol/observable":154,"./util/root":171,"./util/toSubscriber":173}],29:[function(require,module,exports){
 "use strict";
 exports.empty = {
     closed: true,
 "use strict";
 exports.empty = {
     closed: true,
@@ -5662,7 +5671,7 @@ var ReplayEvent = (function () {
     return ReplayEvent;
 }());
 
     return ReplayEvent;
 }());
 
-},{"./Subject":33,"./SubjectSubscription":34,"./Subscription":36,"./operator/observeOn":128,"./scheduler/queue":151,"./util/ObjectUnsubscribedError":158}],32:[function(require,module,exports){
+},{"./Subject":33,"./SubjectSubscription":34,"./Subscription":36,"./operator/observeOn":128,"./scheduler/queue":152,"./util/ObjectUnsubscribedError":159}],32:[function(require,module,exports){
 "use strict";
 /**
  * An execution context and a data structure to order tasks and schedule their
 "use strict";
 /**
  * An execution context and a data structure to order tasks and schedule their
@@ -5750,7 +5759,7 @@ var Subject = (function (_super) {
         this.hasError = false;
         this.thrownError = null;
     }
         this.hasError = false;
         this.thrownError = null;
     }
-    Subject.prototype[rxSubscriber_1.$$rxSubscriber] = function () {
+    Subject.prototype[rxSubscriber_1.rxSubscriber] = function () {
         return new SubjectSubscriber(this);
     };
     Subject.prototype.lift = function (operator) {
         return new SubjectSubscriber(this);
     };
     Subject.prototype.lift = function (operator) {
@@ -5881,7 +5890,7 @@ var AnonymousSubject = (function (_super) {
 }(Subject));
 exports.AnonymousSubject = AnonymousSubject;
 
 }(Subject));
 exports.AnonymousSubject = AnonymousSubject;
 
-},{"./Observable":28,"./SubjectSubscription":34,"./Subscriber":35,"./Subscription":36,"./symbol/rxSubscriber":154,"./util/ObjectUnsubscribedError":158}],34:[function(require,module,exports){
+},{"./Observable":28,"./SubjectSubscription":34,"./Subscriber":35,"./Subscription":36,"./symbol/rxSubscriber":155,"./util/ObjectUnsubscribedError":159}],34:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -5985,7 +5994,7 @@ var Subscriber = (function (_super) {
                 break;
         }
     }
                 break;
         }
     }
-    Subscriber.prototype[rxSubscriber_1.$$rxSubscriber] = function () { return this; };
+    Subscriber.prototype[rxSubscriber_1.rxSubscriber] = function () { return this; };
     /**
      * A static factory for a Subscriber, given a (potentially partial) definition
      * of an Observer.
     /**
      * A static factory for a Subscriber, given a (potentially partial) definition
      * of an Observer.
@@ -6087,14 +6096,16 @@ var SafeSubscriber = (function (_super) {
             next = observerOrNext;
         }
         else if (observerOrNext) {
             next = observerOrNext;
         }
         else if (observerOrNext) {
-            context = observerOrNext;
             next = observerOrNext.next;
             error = observerOrNext.error;
             complete = observerOrNext.complete;
             next = observerOrNext.next;
             error = observerOrNext.error;
             complete = observerOrNext.complete;
-            if (isFunction_1.isFunction(context.unsubscribe)) {
-                this.add(context.unsubscribe.bind(context));
+            if (observerOrNext !== Observer_1.empty) {
+                context = Object.create(observerOrNext);
+                if (isFunction_1.isFunction(context.unsubscribe)) {
+                    this.add(context.unsubscribe.bind(context));
+                }
+                context.unsubscribe = this.unsubscribe.bind(this);
             }
             }
-            context.unsubscribe = this.unsubscribe.bind(this);
         }
         this._context = context;
         this._next = next;
         }
         this._context = context;
         this._next = next;
@@ -6137,15 +6148,17 @@ var SafeSubscriber = (function (_super) {
         }
     };
     SafeSubscriber.prototype.complete = function () {
         }
     };
     SafeSubscriber.prototype.complete = function () {
+        var _this = this;
         if (!this.isStopped) {
             var _parentSubscriber = this._parentSubscriber;
             if (this._complete) {
         if (!this.isStopped) {
             var _parentSubscriber = this._parentSubscriber;
             if (this._complete) {
+                var wrappedComplete = function () { return _this._complete.call(_this._context); };
                 if (!_parentSubscriber.syncErrorThrowable) {
                 if (!_parentSubscriber.syncErrorThrowable) {
-                    this.__tryOrUnsub(this._complete);
+                    this.__tryOrUnsub(wrappedComplete);
                     this.unsubscribe();
                 }
                 else {
                     this.unsubscribe();
                 }
                 else {
-                    this.__tryOrSetError(_parentSubscriber, this._complete);
+                    this.__tryOrSetError(_parentSubscriber, wrappedComplete);
                     this.unsubscribe();
                 }
             }
                     this.unsubscribe();
                 }
             }
@@ -6183,7 +6196,7 @@ var SafeSubscriber = (function (_super) {
     return SafeSubscriber;
 }(Subscriber));
 
     return SafeSubscriber;
 }(Subscriber));
 
-},{"./Observer":29,"./Subscription":36,"./symbol/rxSubscriber":154,"./util/isFunction":165}],36:[function(require,module,exports){
+},{"./Observer":29,"./Subscription":36,"./symbol/rxSubscriber":155,"./util/isFunction":166}],36:[function(require,module,exports){
 "use strict";
 var isArray_1 = require('./util/isArray');
 var isObject_1 = require('./util/isObject');
 "use strict";
 var isArray_1 = require('./util/isArray');
 var isObject_1 = require('./util/isObject');
@@ -6377,7 +6390,7 @@ function flattenUnsubscriptionErrors(errors) {
     return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError_1.UnsubscriptionError) ? err.errors : err); }, []);
 }
 
     return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError_1.UnsubscriptionError) ? err.errors : err); }, []);
 }
 
-},{"./util/UnsubscriptionError":160,"./util/errorObject":161,"./util/isArray":162,"./util/isFunction":165,"./util/isObject":167,"./util/tryCatch":173}],37:[function(require,module,exports){
+},{"./util/UnsubscriptionError":161,"./util/errorObject":162,"./util/isArray":163,"./util/isFunction":166,"./util/isObject":168,"./util/tryCatch":174}],37:[function(require,module,exports){
 "use strict";
 var Observable_1 = require('../../Observable');
 var combineLatest_1 = require('../../observable/combineLatest');
 "use strict";
 var Observable_1 = require('../../Observable');
 var combineLatest_1 = require('../../observable/combineLatest');
@@ -6651,19 +6664,19 @@ var Observable_1 = require('../../Observable');
 var throttleTime_1 = require('../../operator/throttleTime');
 Observable_1.Observable.prototype.throttleTime = throttleTime_1.throttleTime;
 
 var throttleTime_1 = require('../../operator/throttleTime');
 Observable_1.Observable.prototype.throttleTime = throttleTime_1.throttleTime;
 
-},{"../../Observable":28,"../../operator/throttleTime":142}],82:[function(require,module,exports){
+},{"../../Observable":28,"../../operator/throttleTime":143}],82:[function(require,module,exports){
 "use strict";
 var Observable_1 = require('../../Observable');
 var withLatestFrom_1 = require('../../operator/withLatestFrom');
 Observable_1.Observable.prototype.withLatestFrom = withLatestFrom_1.withLatestFrom;
 
 "use strict";
 var Observable_1 = require('../../Observable');
 var withLatestFrom_1 = require('../../operator/withLatestFrom');
 Observable_1.Observable.prototype.withLatestFrom = withLatestFrom_1.withLatestFrom;
 
-},{"../../Observable":28,"../../operator/withLatestFrom":143}],83:[function(require,module,exports){
+},{"../../Observable":28,"../../operator/withLatestFrom":144}],83:[function(require,module,exports){
 "use strict";
 var Observable_1 = require('../../Observable');
 var zip_1 = require('../../operator/zip');
 Observable_1.Observable.prototype.zip = zip_1.zipProto;
 
 "use strict";
 var Observable_1 = require('../../Observable');
 var zip_1 = require('../../operator/zip');
 Observable_1.Observable.prototype.zip = zip_1.zipProto;
 
-},{"../../Observable":28,"../../operator/zip":144}],84:[function(require,module,exports){
+},{"../../Observable":28,"../../operator/zip":145}],84:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -6857,7 +6870,7 @@ var ArrayObservable = (function (_super) {
 }(Observable_1.Observable));
 exports.ArrayObservable = ArrayObservable;
 
 }(Observable_1.Observable));
 exports.ArrayObservable = ArrayObservable;
 
-},{"../Observable":28,"../util/isScheduler":169,"./EmptyObservable":88,"./ScalarObservable":94}],86:[function(require,module,exports){
+},{"../Observable":28,"../util/isScheduler":170,"./EmptyObservable":88,"./ScalarObservable":94}],86:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -6878,6 +6891,7 @@ var ConnectableObservable = (function (_super) {
         this.source = source;
         this.subjectFactory = subjectFactory;
         this._refCount = 0;
         this.source = source;
         this.subjectFactory = subjectFactory;
         this._refCount = 0;
+        this._isComplete = false;
     }
     ConnectableObservable.prototype._subscribe = function (subscriber) {
         return this.getSubject().subscribe(subscriber);
     }
     ConnectableObservable.prototype._subscribe = function (subscriber) {
         return this.getSubject().subscribe(subscriber);
@@ -6892,6 +6906,7 @@ var ConnectableObservable = (function (_super) {
     ConnectableObservable.prototype.connect = function () {
         var connection = this._connection;
         if (!connection) {
     ConnectableObservable.prototype.connect = function () {
         var connection = this._connection;
         if (!connection) {
+            this._isComplete = false;
             connection = this._connection = new Subscription_1.Subscription();
             connection.add(this.source
                 .subscribe(new ConnectableSubscriber(this.getSubject(), this)));
             connection = this._connection = new Subscription_1.Subscription();
             connection.add(this.source
                 .subscribe(new ConnectableSubscriber(this.getSubject(), this)));
@@ -6911,13 +6926,17 @@ var ConnectableObservable = (function (_super) {
     return ConnectableObservable;
 }(Observable_1.Observable));
 exports.ConnectableObservable = ConnectableObservable;
     return ConnectableObservable;
 }(Observable_1.Observable));
 exports.ConnectableObservable = ConnectableObservable;
+var connectableProto = ConnectableObservable.prototype;
 exports.connectableObservableDescriptor = {
     operator: { value: null },
     _refCount: { value: 0, writable: true },
 exports.connectableObservableDescriptor = {
     operator: { value: null },
     _refCount: { value: 0, writable: true },
-    _subscribe: { value: ConnectableObservable.prototype._subscribe },
-    getSubject: { value: ConnectableObservable.prototype.getSubject },
-    connect: { value: ConnectableObservable.prototype.connect },
-    refCount: { value: ConnectableObservable.prototype.refCount }
+    _subject: { value: null, writable: true },
+    _connection: { value: null, writable: true },
+    _subscribe: { value: connectableProto._subscribe },
+    _isComplete: { value: connectableProto._isComplete, writable: true },
+    getSubject: { value: connectableProto.getSubject },
+    connect: { value: connectableProto.connect },
+    refCount: { value: connectableProto.refCount }
 };
 var ConnectableSubscriber = (function (_super) {
     __extends(ConnectableSubscriber, _super);
 };
 var ConnectableSubscriber = (function (_super) {
     __extends(ConnectableSubscriber, _super);
@@ -6930,6 +6949,7 @@ var ConnectableSubscriber = (function (_super) {
         _super.prototype._error.call(this, err);
     };
     ConnectableSubscriber.prototype._complete = function () {
         _super.prototype._error.call(this, err);
     };
     ConnectableSubscriber.prototype._complete = function () {
+        this.connectable._isComplete = true;
         this._unsubscribe();
         _super.prototype._complete.call(this);
     };
         this._unsubscribe();
         _super.prototype._complete.call(this);
     };
@@ -7120,7 +7140,7 @@ var DeferSubscriber = (function (_super) {
     return DeferSubscriber;
 }(OuterSubscriber_1.OuterSubscriber));
 
     return DeferSubscriber;
 }(OuterSubscriber_1.OuterSubscriber));
 
-},{"../Observable":28,"../OuterSubscriber":30,"../util/subscribeToResult":171}],88:[function(require,module,exports){
+},{"../Observable":28,"../OuterSubscriber":30,"../util/subscribeToResult":172}],88:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -7426,7 +7446,7 @@ var FromEventObservable = (function (_super) {
 }(Observable_1.Observable));
 exports.FromEventObservable = FromEventObservable;
 
 }(Observable_1.Observable));
 exports.FromEventObservable = FromEventObservable;
 
-},{"../Observable":28,"../Subscription":36,"../util/errorObject":161,"../util/isFunction":165,"../util/tryCatch":173}],91:[function(require,module,exports){
+},{"../Observable":28,"../Subscription":36,"../util/errorObject":162,"../util/isFunction":166,"../util/tryCatch":174}],91:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -7514,7 +7534,7 @@ var FromObservable = (function (_super) {
      */
     FromObservable.create = function (ish, scheduler) {
         if (ish != null) {
      */
     FromObservable.create = function (ish, scheduler) {
         if (ish != null) {
-            if (typeof ish[observable_1.$$observable] === 'function') {
+            if (typeof ish[observable_1.observable] === 'function') {
                 if (ish instanceof Observable_1.Observable && !scheduler) {
                     return ish;
                 }
                 if (ish instanceof Observable_1.Observable && !scheduler) {
                     return ish;
                 }
@@ -7526,7 +7546,7 @@ var FromObservable = (function (_super) {
             else if (isPromise_1.isPromise(ish)) {
                 return new PromiseObservable_1.PromiseObservable(ish, scheduler);
             }
             else if (isPromise_1.isPromise(ish)) {
                 return new PromiseObservable_1.PromiseObservable(ish, scheduler);
             }
-            else if (typeof ish[iterator_1.$$iterator] === 'function' || typeof ish === 'string') {
+            else if (typeof ish[iterator_1.iterator] === 'function' || typeof ish === 'string') {
                 return new IteratorObservable_1.IteratorObservable(ish, scheduler);
             }
             else if (isArrayLike_1.isArrayLike(ish)) {
                 return new IteratorObservable_1.IteratorObservable(ish, scheduler);
             }
             else if (isArrayLike_1.isArrayLike(ish)) {
@@ -7539,17 +7559,17 @@ var FromObservable = (function (_super) {
         var ish = this.ish;
         var scheduler = this.scheduler;
         if (scheduler == null) {
         var ish = this.ish;
         var scheduler = this.scheduler;
         if (scheduler == null) {
-            return ish[observable_1.$$observable]().subscribe(subscriber);
+            return ish[observable_1.observable]().subscribe(subscriber);
         }
         else {
         }
         else {
-            return ish[observable_1.$$observable]().subscribe(new observeOn_1.ObserveOnSubscriber(subscriber, scheduler, 0));
+            return ish[observable_1.observable]().subscribe(new observeOn_1.ObserveOnSubscriber(subscriber, scheduler, 0));
         }
     };
     return FromObservable;
 }(Observable_1.Observable));
 exports.FromObservable = FromObservable;
 
         }
     };
     return FromObservable;
 }(Observable_1.Observable));
 exports.FromObservable = FromObservable;
 
-},{"../Observable":28,"../operator/observeOn":128,"../symbol/iterator":152,"../symbol/observable":153,"../util/isArray":162,"../util/isArrayLike":163,"../util/isPromise":168,"./ArrayLikeObservable":84,"./ArrayObservable":85,"./IteratorObservable":92,"./PromiseObservable":93}],92:[function(require,module,exports){
+},{"../Observable":28,"../operator/observeOn":128,"../symbol/iterator":153,"../symbol/observable":154,"../util/isArray":163,"../util/isArrayLike":164,"../util/isPromise":169,"./ArrayLikeObservable":84,"./ArrayObservable":85,"./IteratorObservable":92,"./PromiseObservable":93}],92:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -7636,7 +7656,7 @@ var StringIterator = (function () {
         this.idx = idx;
         this.len = len;
     }
         this.idx = idx;
         this.len = len;
     }
-    StringIterator.prototype[iterator_1.$$iterator] = function () { return (this); };
+    StringIterator.prototype[iterator_1.iterator] = function () { return (this); };
     StringIterator.prototype.next = function () {
         return this.idx < this.len ? {
             done: false,
     StringIterator.prototype.next = function () {
         return this.idx < this.len ? {
             done: false,
@@ -7656,7 +7676,7 @@ var ArrayIterator = (function () {
         this.idx = idx;
         this.len = len;
     }
         this.idx = idx;
         this.len = len;
     }
-    ArrayIterator.prototype[iterator_1.$$iterator] = function () { return this; };
+    ArrayIterator.prototype[iterator_1.iterator] = function () { return this; };
     ArrayIterator.prototype.next = function () {
         return this.idx < this.len ? {
             done: false,
     ArrayIterator.prototype.next = function () {
         return this.idx < this.len ? {
             done: false,
@@ -7669,7 +7689,7 @@ var ArrayIterator = (function () {
     return ArrayIterator;
 }());
 function getIterator(obj) {
     return ArrayIterator;
 }());
 function getIterator(obj) {
-    var i = obj[iterator_1.$$iterator];
+    var i = obj[iterator_1.iterator];
     if (!i && typeof obj === 'string') {
         return new StringIterator(obj);
     }
     if (!i && typeof obj === 'string') {
         return new StringIterator(obj);
     }
@@ -7679,7 +7699,7 @@ function getIterator(obj) {
     if (!i) {
         throw new TypeError('object is not iterable');
     }
     if (!i) {
         throw new TypeError('object is not iterable');
     }
-    return obj[iterator_1.$$iterator]();
+    return obj[iterator_1.iterator]();
 }
 var maxSafeInteger = Math.pow(2, 53) - 1;
 function toLength(o) {
 }
 var maxSafeInteger = Math.pow(2, 53) - 1;
 function toLength(o) {
@@ -7713,7 +7733,7 @@ function sign(value) {
     return valueAsNumber < 0 ? -1 : 1;
 }
 
     return valueAsNumber < 0 ? -1 : 1;
 }
 
-},{"../Observable":28,"../symbol/iterator":152,"../util/root":170}],93:[function(require,module,exports){
+},{"../Observable":28,"../symbol/iterator":153,"../util/root":171}],93:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -7752,7 +7772,7 @@ var PromiseObservable = (function (_super) {
      * @see {@link bindCallback}
      * @see {@link from}
      *
      * @see {@link bindCallback}
      * @see {@link from}
      *
-     * @param {Promise<T>} promise The promise to be converted.
+     * @param {PromiseLike<T>} promise The promise to be converted.
      * @param {Scheduler} [scheduler] An optional IScheduler to use for scheduling
      * the delivery of the resolved value (or the rejection).
      * @return {Observable<T>} An Observable which wraps the Promise.
      * @param {Scheduler} [scheduler] An optional IScheduler to use for scheduling
      * the delivery of the resolved value (or the rejection).
      * @return {Observable<T>} An Observable which wraps the Promise.
@@ -7835,7 +7855,7 @@ function dispatchError(arg) {
     }
 }
 
     }
 }
 
-},{"../Observable":28,"../util/root":170}],94:[function(require,module,exports){
+},{"../Observable":28,"../util/root":171}],94:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -8002,7 +8022,7 @@ var TimerObservable = (function (_super) {
 }(Observable_1.Observable));
 exports.TimerObservable = TimerObservable;
 
 }(Observable_1.Observable));
 exports.TimerObservable = TimerObservable;
 
-},{"../Observable":28,"../scheduler/async":150,"../util/isDate":164,"../util/isNumeric":166,"../util/isScheduler":169}],96:[function(require,module,exports){
+},{"../Observable":28,"../scheduler/async":151,"../util/isDate":165,"../util/isNumeric":167,"../util/isScheduler":170}],96:[function(require,module,exports){
 "use strict";
 var isScheduler_1 = require('../util/isScheduler');
 var isArray_1 = require('../util/isArray');
 "use strict";
 var isScheduler_1 = require('../util/isScheduler');
 var isArray_1 = require('../util/isArray');
@@ -8139,7 +8159,7 @@ function combineLatest() {
 }
 exports.combineLatest = combineLatest;
 
 }
 exports.combineLatest = combineLatest;
 
-},{"../operator/combineLatest":111,"../util/isArray":162,"../util/isScheduler":169,"./ArrayObservable":85}],97:[function(require,module,exports){
+},{"../operator/combineLatest":111,"../util/isArray":163,"../util/isScheduler":170,"./ArrayObservable":85}],97:[function(require,module,exports){
 "use strict";
 var DeferObservable_1 = require('./DeferObservable');
 exports.defer = DeferObservable_1.DeferObservable.create;
 "use strict";
 var DeferObservable_1 = require('./DeferObservable');
 exports.defer = DeferObservable_1.DeferObservable.create;
@@ -8189,7 +8209,7 @@ exports.timer = TimerObservable_1.TimerObservable.create;
 var zip_1 = require('../operator/zip');
 exports.zip = zip_1.zipStatic;
 
 var zip_1 = require('../operator/zip');
 exports.zip = zip_1.zipStatic;
 
-},{"../operator/zip":144}],107:[function(require,module,exports){
+},{"../operator/zip":145}],107:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -8266,7 +8286,7 @@ var BufferSubscriber = (function (_super) {
     return BufferSubscriber;
 }(OuterSubscriber_1.OuterSubscriber));
 
     return BufferSubscriber;
 }(OuterSubscriber_1.OuterSubscriber));
 
-},{"../OuterSubscriber":30,"../util/subscribeToResult":171}],108:[function(require,module,exports){
+},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],108:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -8324,9 +8344,15 @@ var BufferCountOperator = (function () {
     function BufferCountOperator(bufferSize, startBufferEvery) {
         this.bufferSize = bufferSize;
         this.startBufferEvery = startBufferEvery;
     function BufferCountOperator(bufferSize, startBufferEvery) {
         this.bufferSize = bufferSize;
         this.startBufferEvery = startBufferEvery;
+        if (!startBufferEvery || bufferSize === startBufferEvery) {
+            this.subscriberClass = BufferCountSubscriber;
+        }
+        else {
+            this.subscriberClass = BufferSkipCountSubscriber;
+        }
     }
     BufferCountOperator.prototype.call = function (subscriber, source) {
     }
     BufferCountOperator.prototype.call = function (subscriber, source) {
-        return source.subscribe(new BufferCountSubscriber(subscriber, this.bufferSize, this.startBufferEvery));
+        return source.subscribe(new this.subscriberClass(subscriber, this.bufferSize, this.startBufferEvery));
     };
     return BufferCountOperator;
 }());
     };
     return BufferCountOperator;
 }());
@@ -8337,18 +8363,46 @@ var BufferCountOperator = (function () {
  */
 var BufferCountSubscriber = (function (_super) {
     __extends(BufferCountSubscriber, _super);
  */
 var BufferCountSubscriber = (function (_super) {
     __extends(BufferCountSubscriber, _super);
-    function BufferCountSubscriber(destination, bufferSize, startBufferEvery) {
+    function BufferCountSubscriber(destination, bufferSize) {
+        _super.call(this, destination);
+        this.bufferSize = bufferSize;
+        this.buffer = [];
+    }
+    BufferCountSubscriber.prototype._next = function (value) {
+        var buffer = this.buffer;
+        buffer.push(value);
+        if (buffer.length == this.bufferSize) {
+            this.destination.next(buffer);
+            this.buffer = [];
+        }
+    };
+    BufferCountSubscriber.prototype._complete = function () {
+        var buffer = this.buffer;
+        if (buffer.length > 0) {
+            this.destination.next(buffer);
+        }
+        _super.prototype._complete.call(this);
+    };
+    return BufferCountSubscriber;
+}(Subscriber_1.Subscriber));
+/**
+ * We need this JSDoc comment for affecting ESDoc.
+ * @ignore
+ * @extends {Ignored}
+ */
+var BufferSkipCountSubscriber = (function (_super) {
+    __extends(BufferSkipCountSubscriber, _super);
+    function BufferSkipCountSubscriber(destination, bufferSize, startBufferEvery) {
         _super.call(this, destination);
         this.bufferSize = bufferSize;
         this.startBufferEvery = startBufferEvery;
         this.buffers = [];
         this.count = 0;
     }
         _super.call(this, destination);
         this.bufferSize = bufferSize;
         this.startBufferEvery = startBufferEvery;
         this.buffers = [];
         this.count = 0;
     }
-    BufferCountSubscriber.prototype._next = function (value) {
-        var count = this.count++;
-        var _a = this, destination = _a.destination, bufferSize = _a.bufferSize, startBufferEvery = _a.startBufferEvery, buffers = _a.buffers;
-        var startOn = (startBufferEvery == null) ? bufferSize : startBufferEvery;
-        if (count % startOn === 0) {
+    BufferSkipCountSubscriber.prototype._next = function (value) {
+        var _a = this, bufferSize = _a.bufferSize, startBufferEvery = _a.startBufferEvery, buffers = _a.buffers, count = _a.count;
+        this.count++;
+        if (count % startBufferEvery === 0) {
             buffers.push([]);
         }
         for (var i = buffers.length; i--;) {
             buffers.push([]);
         }
         for (var i = buffers.length; i--;) {
@@ -8356,13 +8410,12 @@ var BufferCountSubscriber = (function (_super) {
             buffer.push(value);
             if (buffer.length === bufferSize) {
                 buffers.splice(i, 1);
             buffer.push(value);
             if (buffer.length === bufferSize) {
                 buffers.splice(i, 1);
-                destination.next(buffer);
+                this.destination.next(buffer);
             }
         }
     };
             }
         }
     };
-    BufferCountSubscriber.prototype._complete = function () {
-        var destination = this.destination;
-        var buffers = this.buffers;
+    BufferSkipCountSubscriber.prototype._complete = function () {
+        var _a = this, buffers = _a.buffers, destination = _a.destination;
         while (buffers.length > 0) {
             var buffer = buffers.shift();
             if (buffer.length > 0) {
         while (buffers.length > 0) {
             var buffer = buffers.shift();
             if (buffer.length > 0) {
@@ -8371,7 +8424,7 @@ var BufferCountSubscriber = (function (_super) {
         }
         _super.prototype._complete.call(this);
     };
         }
         _super.prototype._complete.call(this);
     };
-    return BufferCountSubscriber;
+    return BufferSkipCountSubscriber;
 }(Subscriber_1.Subscriber));
 
 },{"../Subscriber":35}],109:[function(require,module,exports){
 }(Subscriber_1.Subscriber));
 
 },{"../Subscriber":35}],109:[function(require,module,exports){
@@ -8497,7 +8550,7 @@ var BufferWhenSubscriber = (function (_super) {
     return BufferWhenSubscriber;
 }(OuterSubscriber_1.OuterSubscriber));
 
     return BufferWhenSubscriber;
 }(OuterSubscriber_1.OuterSubscriber));
 
-},{"../OuterSubscriber":30,"../Subscription":36,"../util/errorObject":161,"../util/subscribeToResult":171,"../util/tryCatch":173}],110:[function(require,module,exports){
+},{"../OuterSubscriber":30,"../Subscription":36,"../util/errorObject":162,"../util/subscribeToResult":172,"../util/tryCatch":174}],110:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -8614,7 +8667,7 @@ var CatchSubscriber = (function (_super) {
     return CatchSubscriber;
 }(OuterSubscriber_1.OuterSubscriber));
 
     return CatchSubscriber;
 }(OuterSubscriber_1.OuterSubscriber));
 
-},{"../OuterSubscriber":30,"../util/subscribeToResult":171}],111:[function(require,module,exports){
+},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],111:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -8767,7 +8820,7 @@ var CombineLatestSubscriber = (function (_super) {
 }(OuterSubscriber_1.OuterSubscriber));
 exports.CombineLatestSubscriber = CombineLatestSubscriber;
 
 }(OuterSubscriber_1.OuterSubscriber));
 exports.CombineLatestSubscriber = CombineLatestSubscriber;
 
-},{"../OuterSubscriber":30,"../observable/ArrayObservable":85,"../util/isArray":162,"../util/subscribeToResult":171}],112:[function(require,module,exports){
+},{"../OuterSubscriber":30,"../observable/ArrayObservable":85,"../util/isArray":163,"../util/subscribeToResult":172}],112:[function(require,module,exports){
 "use strict";
 var Observable_1 = require('../Observable');
 var isScheduler_1 = require('../util/isScheduler');
 "use strict";
 var Observable_1 = require('../Observable');
 var isScheduler_1 = require('../util/isScheduler');
@@ -8942,7 +8995,7 @@ function concatStatic() {
 }
 exports.concatStatic = concatStatic;
 
 }
 exports.concatStatic = concatStatic;
 
-},{"../Observable":28,"../observable/ArrayObservable":85,"../util/isScheduler":169,"./mergeAll":125}],113:[function(require,module,exports){
+},{"../Observable":28,"../observable/ArrayObservable":85,"../util/isScheduler":170,"./mergeAll":125}],113:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -9059,7 +9112,7 @@ function dispatchNext(subscriber) {
     subscriber.debouncedNext();
 }
 
     subscriber.debouncedNext();
 }
 
-},{"../Subscriber":35,"../scheduler/async":150}],114:[function(require,module,exports){
+},{"../Subscriber":35,"../scheduler/async":151}],114:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -9195,7 +9248,7 @@ var DelayMessage = (function () {
     return DelayMessage;
 }());
 
     return DelayMessage;
 }());
 
-},{"../Notification":27,"../Subscriber":35,"../scheduler/async":150,"../util/isDate":164}],115:[function(require,module,exports){
+},{"../Notification":27,"../Subscriber":35,"../scheduler/async":151,"../util/isDate":165}],115:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -9316,7 +9369,7 @@ var DistinctSubscriber = (function (_super) {
 }(OuterSubscriber_1.OuterSubscriber));
 exports.DistinctSubscriber = DistinctSubscriber;
 
 }(OuterSubscriber_1.OuterSubscriber));
 exports.DistinctSubscriber = DistinctSubscriber;
 
-},{"../OuterSubscriber":30,"../util/Set":159,"../util/subscribeToResult":171}],116:[function(require,module,exports){
+},{"../OuterSubscriber":30,"../util/Set":160,"../util/subscribeToResult":172}],116:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -9425,7 +9478,7 @@ var DistinctUntilChangedSubscriber = (function (_super) {
     return DistinctUntilChangedSubscriber;
 }(Subscriber_1.Subscriber));
 
     return DistinctUntilChangedSubscriber;
 }(Subscriber_1.Subscriber));
 
-},{"../Subscriber":35,"../util/errorObject":161,"../util/tryCatch":173}],117:[function(require,module,exports){
+},{"../Subscriber":35,"../util/errorObject":162,"../util/tryCatch":174}],117:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -9439,7 +9492,7 @@ var Subscriber_1 = require('../Subscriber');
  * an Observable that is identical to the source.
  *
  * <span class="informal">Intercepts each emission on the source and runs a
  * an Observable that is identical to the source.
  *
  * <span class="informal">Intercepts each emission on the source and runs a
- * function, but returns an output which is identical to the source.</span>
+ * function, but returns an output which is identical to the source as long as errors don't occur.</span>
  *
  * <img src="./img/do.png" width="100%">
  *
  *
  * <img src="./img/do.png" width="100%">
  *
@@ -9691,7 +9744,7 @@ var ExpandSubscriber = (function (_super) {
 }(OuterSubscriber_1.OuterSubscriber));
 exports.ExpandSubscriber = ExpandSubscriber;
 
 }(OuterSubscriber_1.OuterSubscriber));
 exports.ExpandSubscriber = ExpandSubscriber;
 
-},{"../OuterSubscriber":30,"../util/errorObject":161,"../util/subscribeToResult":171,"../util/tryCatch":173}],119:[function(require,module,exports){
+},{"../OuterSubscriber":30,"../util/errorObject":162,"../util/subscribeToResult":172,"../util/tryCatch":174}],119:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -9982,7 +10035,7 @@ var FirstSubscriber = (function (_super) {
     return FirstSubscriber;
 }(Subscriber_1.Subscriber));
 
     return FirstSubscriber;
 }(Subscriber_1.Subscriber));
 
-},{"../Subscriber":35,"../util/EmptyError":157}],122:[function(require,module,exports){
+},{"../Subscriber":35,"../util/EmptyError":158}],122:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -10102,7 +10155,7 @@ var LastSubscriber = (function (_super) {
     return LastSubscriber;
 }(Subscriber_1.Subscriber));
 
     return LastSubscriber;
 }(Subscriber_1.Subscriber));
 
-},{"../Subscriber":35,"../util/EmptyError":157}],123:[function(require,module,exports){
+},{"../Subscriber":35,"../util/EmptyError":158}],123:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -10124,7 +10177,7 @@ var Subscriber_1 = require('../Subscriber');
  * applies a projection to each value and emits that projection in the output
  * Observable.
  *
  * applies a projection to each value and emits that projection in the output
  * Observable.
  *
- * @example <caption>Map every every click to the clientX position of that click</caption>
+ * @example <caption>Map every click to the clientX position of that click</caption>
  * var clicks = Rx.Observable.fromEvent(document, 'click');
  * var positions = clicks.map(ev => ev.clientX);
  * positions.subscribe(x => console.log(x));
  * var clicks = Rx.Observable.fromEvent(document, 'click');
  * var positions = clicks.map(ev => ev.clientX);
  * positions.subscribe(x => console.log(x));
@@ -10336,7 +10389,7 @@ function mergeStatic() {
 }
 exports.mergeStatic = mergeStatic;
 
 }
 exports.mergeStatic = mergeStatic;
 
-},{"../Observable":28,"../observable/ArrayObservable":85,"../util/isScheduler":169,"./mergeAll":125}],125:[function(require,module,exports){
+},{"../Observable":28,"../observable/ArrayObservable":85,"../util/isScheduler":170,"./mergeAll":125}],125:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -10448,7 +10501,7 @@ var MergeAllSubscriber = (function (_super) {
 }(OuterSubscriber_1.OuterSubscriber));
 exports.MergeAllSubscriber = MergeAllSubscriber;
 
 }(OuterSubscriber_1.OuterSubscriber));
 exports.MergeAllSubscriber = MergeAllSubscriber;
 
-},{"../OuterSubscriber":30,"../util/subscribeToResult":171}],126:[function(require,module,exports){
+},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],126:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -10620,7 +10673,7 @@ var MergeMapSubscriber = (function (_super) {
 }(OuterSubscriber_1.OuterSubscriber));
 exports.MergeMapSubscriber = MergeMapSubscriber;
 
 }(OuterSubscriber_1.OuterSubscriber));
 exports.MergeMapSubscriber = MergeMapSubscriber;
 
-},{"../OuterSubscriber":30,"../util/subscribeToResult":171}],127:[function(require,module,exports){
+},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],127:[function(require,module,exports){
 "use strict";
 var ConnectableObservable_1 = require('../observable/ConnectableObservable');
 /* tslint:enable:max-line-length */
 "use strict";
 var ConnectableObservable_1 = require('../observable/ConnectableObservable');
 /* tslint:enable:max-line-length */
@@ -10688,11 +10741,48 @@ var __extends = (this && this.__extends) || function (d, b) {
 var Subscriber_1 = require('../Subscriber');
 var Notification_1 = require('../Notification');
 /**
 var Subscriber_1 = require('../Subscriber');
 var Notification_1 = require('../Notification');
 /**
- * @see {@link Notification}
  *
  *
- * @param scheduler
- * @param delay
- * @return {Observable<R>|WebSocketSubject<T>|Observable<T>}
+ * Re-emits all notifications from source Observable with specified scheduler.
+ *
+ * <span class="informal">Ensure a specific scheduler is used, from outside of an Observable.</span>
+ *
+ * `observeOn` is an operator that accepts a scheduler as a first parameter, which will be used to reschedule
+ * notifications emitted by the source Observable. It might be useful, if you do not have control over
+ * internal scheduler of a given Observable, but want to control when its values are emitted nevertheless.
+ *
+ * Returned Observable emits the same notifications (nexted values, complete and error events) as the source Observable,
+ * but rescheduled with provided scheduler. Note that this doesn't mean that source Observables internal
+ * scheduler will be replaced in any way. Original scheduler still will be used, but when the source Observable emits
+ * notification, it will be immediately scheduled again - this time with scheduler passed to `observeOn`.
+ * An anti-pattern would be calling `observeOn` on Observable that emits lots of values synchronously, to split
+ * that emissions into asynchronous chunks. For this to happen, scheduler would have to be passed into the source
+ * Observable directly (usually into the operator that creates it). `observeOn` simply delays notifications a
+ * little bit more, to ensure that they are emitted at expected moments.
+ *
+ * As a matter of fact, `observeOn` accepts second parameter, which specifies in milliseconds with what delay notifications
+ * will be emitted. The main difference between {@link delay} operator and `observeOn` is that `observeOn`
+ * will delay all notifications - including error notifications - while `delay` will pass through error
+ * from source Observable immediately when it is emitted. In general it is highly recommended to use `delay` operator
+ * for any kind of delaying of values in the stream, while using `observeOn` to specify which scheduler should be used
+ * for notification emissions in general.
+ *
+ * @example <caption>Ensure values in subscribe are called just before browser repaint.</caption>
+ * const intervals = Rx.Observable.interval(10); // Intervals are scheduled
+ *                                               // with async scheduler by default...
+ *
+ * intervals
+ * .observeOn(Rx.Scheduler.animationFrame)       // ...but we will observe on animationFrame
+ * .subscribe(val => {                           // scheduler to ensure smooth animation.
+ *   someDiv.style.height = val + 'px';
+ * });
+ *
+ * @see {@link delay}
+ *
+ * @param {IScheduler} scheduler Scheduler that will be used to reschedule notifications from source Observable.
+ * @param {number} [delay] Number of milliseconds that states with what delay every notification should be rescheduled.
+ * @return {Observable<T>} Observable that emits the same notifications as the source Observable,
+ * but with provided scheduler.
+ *
  * @method observeOn
  * @owner Observable
  */
  * @method observeOn
  * @owner Observable
  */
@@ -11203,7 +11293,7 @@ var SkipUntilSubscriber = (function (_super) {
     return SkipUntilSubscriber;
 }(OuterSubscriber_1.OuterSubscriber));
 
     return SkipUntilSubscriber;
 }(OuterSubscriber_1.OuterSubscriber));
 
-},{"../OuterSubscriber":30,"../util/subscribeToResult":171}],137:[function(require,module,exports){
+},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],137:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -11317,7 +11407,7 @@ function startWith() {
 }
 exports.startWith = startWith;
 
 }
 exports.startWith = startWith;
 
-},{"../observable/ArrayObservable":85,"../observable/EmptyObservable":88,"../observable/ScalarObservable":94,"../util/isScheduler":169,"./concat":112}],139:[function(require,module,exports){
+},{"../observable/ArrayObservable":85,"../observable/EmptyObservable":88,"../observable/ScalarObservable":94,"../util/isScheduler":170,"./concat":112}],139:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -11458,7 +11548,7 @@ var SwitchMapSubscriber = (function (_super) {
     return SwitchMapSubscriber;
 }(OuterSubscriber_1.OuterSubscriber));
 
     return SwitchMapSubscriber;
 }(OuterSubscriber_1.OuterSubscriber));
 
-},{"../OuterSubscriber":30,"../util/subscribeToResult":171}],140:[function(require,module,exports){
+},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],140:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -11548,7 +11638,7 @@ var TakeSubscriber = (function (_super) {
     return TakeSubscriber;
 }(Subscriber_1.Subscriber));
 
     return TakeSubscriber;
 }(Subscriber_1.Subscriber));
 
-},{"../Subscriber":35,"../observable/EmptyObservable":88,"../util/ArgumentOutOfRangeError":156}],141:[function(require,module,exports){
+},{"../Subscriber":35,"../observable/EmptyObservable":88,"../util/ArgumentOutOfRangeError":157}],141:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -11624,7 +11714,150 @@ var TakeUntilSubscriber = (function (_super) {
     return TakeUntilSubscriber;
 }(OuterSubscriber_1.OuterSubscriber));
 
     return TakeUntilSubscriber;
 }(OuterSubscriber_1.OuterSubscriber));
 
-},{"../OuterSubscriber":30,"../util/subscribeToResult":171}],142:[function(require,module,exports){
+},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],142:[function(require,module,exports){
+"use strict";
+var __extends = (this && this.__extends) || function (d, b) {
+    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+    function __() { this.constructor = d; }
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+};
+var OuterSubscriber_1 = require('../OuterSubscriber');
+var subscribeToResult_1 = require('../util/subscribeToResult');
+exports.defaultThrottleConfig = {
+    leading: true,
+    trailing: false
+};
+/**
+ * Emits a value from the source Observable, then ignores subsequent source
+ * values for a duration determined by another Observable, then repeats this
+ * process.
+ *
+ * <span class="informal">It's like {@link throttleTime}, but the silencing
+ * duration is determined by a second Observable.</span>
+ *
+ * <img src="./img/throttle.png" width="100%">
+ *
+ * `throttle` emits the source Observable values on the output Observable
+ * when its internal timer is disabled, and ignores source values when the timer
+ * is enabled. Initially, the timer is disabled. As soon as the first source
+ * value arrives, it is forwarded to the output Observable, and then the timer
+ * is enabled by calling the `durationSelector` function with the source value,
+ * which returns the "duration" Observable. When the duration Observable emits a
+ * value or completes, the timer is disabled, and this process repeats for the
+ * next source value.
+ *
+ * @example <caption>Emit clicks at a rate of at most one click per second</caption>
+ * var clicks = Rx.Observable.fromEvent(document, 'click');
+ * var result = clicks.throttle(ev => Rx.Observable.interval(1000));
+ * result.subscribe(x => console.log(x));
+ *
+ * @see {@link audit}
+ * @see {@link debounce}
+ * @see {@link delayWhen}
+ * @see {@link sample}
+ * @see {@link throttleTime}
+ *
+ * @param {function(value: T): SubscribableOrPromise} durationSelector A function
+ * that receives a value from the source Observable, for computing the silencing
+ * duration for each source value, returned as an Observable or a Promise.
+ * @param {Object} config a configuration object to define `leading` and `trailing` behavior. Defaults
+ * to `{ leading: true, trailing: false }`.
+ * @return {Observable<T>} An Observable that performs the throttle operation to
+ * limit the rate of emissions from the source.
+ * @method throttle
+ * @owner Observable
+ */
+function throttle(durationSelector, config) {
+    if (config === void 0) { config = exports.defaultThrottleConfig; }
+    return this.lift(new ThrottleOperator(durationSelector, config.leading, config.trailing));
+}
+exports.throttle = throttle;
+var ThrottleOperator = (function () {
+    function ThrottleOperator(durationSelector, leading, trailing) {
+        this.durationSelector = durationSelector;
+        this.leading = leading;
+        this.trailing = trailing;
+    }
+    ThrottleOperator.prototype.call = function (subscriber, source) {
+        return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));
+    };
+    return ThrottleOperator;
+}());
+/**
+ * We need this JSDoc comment for affecting ESDoc
+ * @ignore
+ * @extends {Ignored}
+ */
+var ThrottleSubscriber = (function (_super) {
+    __extends(ThrottleSubscriber, _super);
+    function ThrottleSubscriber(destination, durationSelector, _leading, _trailing) {
+        _super.call(this, destination);
+        this.destination = destination;
+        this.durationSelector = durationSelector;
+        this._leading = _leading;
+        this._trailing = _trailing;
+        this._hasTrailingValue = false;
+    }
+    ThrottleSubscriber.prototype._next = function (value) {
+        if (this.throttled) {
+            if (this._trailing) {
+                this._hasTrailingValue = true;
+                this._trailingValue = value;
+            }
+        }
+        else {
+            var duration = this.tryDurationSelector(value);
+            if (duration) {
+                this.add(this.throttled = subscribeToResult_1.subscribeToResult(this, duration));
+            }
+            if (this._leading) {
+                this.destination.next(value);
+                if (this._trailing) {
+                    this._hasTrailingValue = true;
+                    this._trailingValue = value;
+                }
+            }
+        }
+    };
+    ThrottleSubscriber.prototype.tryDurationSelector = function (value) {
+        try {
+            return this.durationSelector(value);
+        }
+        catch (err) {
+            this.destination.error(err);
+            return null;
+        }
+    };
+    ThrottleSubscriber.prototype._unsubscribe = function () {
+        var _a = this, throttled = _a.throttled, _trailingValue = _a._trailingValue, _hasTrailingValue = _a._hasTrailingValue, _trailing = _a._trailing;
+        this._trailingValue = null;
+        this._hasTrailingValue = false;
+        if (throttled) {
+            this.remove(throttled);
+            this.throttled = null;
+            throttled.unsubscribe();
+        }
+    };
+    ThrottleSubscriber.prototype._sendTrailing = function () {
+        var _a = this, destination = _a.destination, throttled = _a.throttled, _trailing = _a._trailing, _trailingValue = _a._trailingValue, _hasTrailingValue = _a._hasTrailingValue;
+        if (throttled && _trailing && _hasTrailingValue) {
+            destination.next(_trailingValue);
+            this._trailingValue = null;
+            this._hasTrailingValue = false;
+        }
+    };
+    ThrottleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+        this._sendTrailing();
+        this._unsubscribe();
+    };
+    ThrottleSubscriber.prototype.notifyComplete = function () {
+        this._sendTrailing();
+        this._unsubscribe();
+    };
+    return ThrottleSubscriber;
+}(OuterSubscriber_1.OuterSubscriber));
+
+},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],143:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -11633,6 +11866,7 @@ var __extends = (this && this.__extends) || function (d, b) {
 };
 var Subscriber_1 = require('../Subscriber');
 var async_1 = require('../scheduler/async');
 };
 var Subscriber_1 = require('../Subscriber');
 var async_1 = require('../scheduler/async');
+var throttle_1 = require('./throttle');
 /**
  * Emits a value from the source Observable, then ignores subsequent source
  * values for `duration` milliseconds, then repeats this process.
 /**
  * Emits a value from the source Observable, then ignores subsequent source
  * values for `duration` milliseconds, then repeats this process.
@@ -11672,18 +11906,21 @@ var async_1 = require('../scheduler/async');
  * @method throttleTime
  * @owner Observable
  */
  * @method throttleTime
  * @owner Observable
  */
-function throttleTime(duration, scheduler) {
+function throttleTime(duration, scheduler, config) {
     if (scheduler === void 0) { scheduler = async_1.async; }
     if (scheduler === void 0) { scheduler = async_1.async; }
-    return this.lift(new ThrottleTimeOperator(duration, scheduler));
+    if (config === void 0) { config = throttle_1.defaultThrottleConfig; }
+    return this.lift(new ThrottleTimeOperator(duration, scheduler, config.leading, config.trailing));
 }
 exports.throttleTime = throttleTime;
 var ThrottleTimeOperator = (function () {
 }
 exports.throttleTime = throttleTime;
 var ThrottleTimeOperator = (function () {
-    function ThrottleTimeOperator(duration, scheduler) {
+    function ThrottleTimeOperator(duration, scheduler, leading, trailing) {
         this.duration = duration;
         this.scheduler = scheduler;
         this.duration = duration;
         this.scheduler = scheduler;
+        this.leading = leading;
+        this.trailing = trailing;
     }
     ThrottleTimeOperator.prototype.call = function (subscriber, source) {
     }
     ThrottleTimeOperator.prototype.call = function (subscriber, source) {
-        return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler));
+        return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler, this.leading, this.trailing));
     };
     return ThrottleTimeOperator;
 }());
     };
     return ThrottleTimeOperator;
 }());
@@ -11694,20 +11931,37 @@ var ThrottleTimeOperator = (function () {
  */
 var ThrottleTimeSubscriber = (function (_super) {
     __extends(ThrottleTimeSubscriber, _super);
  */
 var ThrottleTimeSubscriber = (function (_super) {
     __extends(ThrottleTimeSubscriber, _super);
-    function ThrottleTimeSubscriber(destination, duration, scheduler) {
+    function ThrottleTimeSubscriber(destination, duration, scheduler, leading, trailing) {
         _super.call(this, destination);
         this.duration = duration;
         this.scheduler = scheduler;
         _super.call(this, destination);
         this.duration = duration;
         this.scheduler = scheduler;
+        this.leading = leading;
+        this.trailing = trailing;
+        this._hasTrailingValue = false;
+        this._trailingValue = null;
     }
     ThrottleTimeSubscriber.prototype._next = function (value) {
     }
     ThrottleTimeSubscriber.prototype._next = function (value) {
-        if (!this.throttled) {
+        if (this.throttled) {
+            if (this.trailing) {
+                this._trailingValue = value;
+                this._hasTrailingValue = true;
+            }
+        }
+        else {
             this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this }));
             this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this }));
-            this.destination.next(value);
+            if (this.leading) {
+                this.destination.next(value);
+            }
         }
     };
     ThrottleTimeSubscriber.prototype.clearThrottle = function () {
         var throttled = this.throttled;
         if (throttled) {
         }
     };
     ThrottleTimeSubscriber.prototype.clearThrottle = function () {
         var throttled = this.throttled;
         if (throttled) {
+            if (this.trailing && this._hasTrailingValue) {
+                this.destination.next(this._trailingValue);
+                this._trailingValue = null;
+                this._hasTrailingValue = false;
+            }
             throttled.unsubscribe();
             this.remove(throttled);
             this.throttled = null;
             throttled.unsubscribe();
             this.remove(throttled);
             this.throttled = null;
@@ -11720,7 +11974,7 @@ function dispatchNext(arg) {
     subscriber.clearThrottle();
 }
 
     subscriber.clearThrottle();
 }
 
-},{"../Subscriber":35,"../scheduler/async":150}],143:[function(require,module,exports){
+},{"../Subscriber":35,"../scheduler/async":151,"./throttle":142}],144:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -11851,7 +12105,7 @@ var WithLatestFromSubscriber = (function (_super) {
     return WithLatestFromSubscriber;
 }(OuterSubscriber_1.OuterSubscriber));
 
     return WithLatestFromSubscriber;
 }(OuterSubscriber_1.OuterSubscriber));
 
-},{"../OuterSubscriber":30,"../util/subscribeToResult":171}],144:[function(require,module,exports){
+},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],145:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -11953,8 +12207,8 @@ var ZipSubscriber = (function (_super) {
         if (isArray_1.isArray(value)) {
             iterators.push(new StaticArrayIterator(value));
         }
         if (isArray_1.isArray(value)) {
             iterators.push(new StaticArrayIterator(value));
         }
-        else if (typeof value[iterator_1.$$iterator] === 'function') {
-            iterators.push(new StaticIterator(value[iterator_1.$$iterator]()));
+        else if (typeof value[iterator_1.iterator] === 'function') {
+            iterators.push(new StaticIterator(value[iterator_1.iterator]()));
         }
         else {
             iterators.push(new ZipBufferIterator(this.destination, this, value));
         }
         else {
             iterators.push(new ZipBufferIterator(this.destination, this, value));
@@ -11963,6 +12217,10 @@ var ZipSubscriber = (function (_super) {
     ZipSubscriber.prototype._complete = function () {
         var iterators = this.iterators;
         var len = iterators.length;
     ZipSubscriber.prototype._complete = function () {
         var iterators = this.iterators;
         var len = iterators.length;
+        if (len === 0) {
+            this.destination.complete();
+            return;
+        }
         this.active = len;
         for (var i = 0; i < len; i++) {
             var iterator = iterators[i];
         this.active = len;
         for (var i = 0; i < len; i++) {
             var iterator = iterators[i];
@@ -12057,7 +12315,7 @@ var StaticArrayIterator = (function () {
         this.length = 0;
         this.length = array.length;
     }
         this.length = 0;
         this.length = array.length;
     }
-    StaticArrayIterator.prototype[iterator_1.$$iterator] = function () {
+    StaticArrayIterator.prototype[iterator_1.iterator] = function () {
         return this;
     };
     StaticArrayIterator.prototype.next = function (value) {
         return this;
     };
     StaticArrayIterator.prototype.next = function (value) {
@@ -12088,7 +12346,7 @@ var ZipBufferIterator = (function (_super) {
         this.buffer = [];
         this.isComplete = false;
     }
         this.buffer = [];
         this.isComplete = false;
     }
-    ZipBufferIterator.prototype[iterator_1.$$iterator] = function () {
+    ZipBufferIterator.prototype[iterator_1.iterator] = function () {
         return this;
     };
     // NOTE: there is actually a name collision here with Subscriber.next and Iterator.next
         return this;
     };
     // NOTE: there is actually a name collision here with Subscriber.next and Iterator.next
@@ -12127,7 +12385,7 @@ var ZipBufferIterator = (function (_super) {
     return ZipBufferIterator;
 }(OuterSubscriber_1.OuterSubscriber));
 
     return ZipBufferIterator;
 }(OuterSubscriber_1.OuterSubscriber));
 
-},{"../OuterSubscriber":30,"../Subscriber":35,"../observable/ArrayObservable":85,"../symbol/iterator":152,"../util/isArray":162,"../util/subscribeToResult":171}],145:[function(require,module,exports){
+},{"../OuterSubscriber":30,"../Subscriber":35,"../observable/ArrayObservable":85,"../symbol/iterator":153,"../util/isArray":163,"../util/subscribeToResult":172}],146:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -12172,7 +12430,7 @@ var Action = (function (_super) {
 }(Subscription_1.Subscription));
 exports.Action = Action;
 
 }(Subscription_1.Subscription));
 exports.Action = Action;
 
-},{"../Subscription":36}],146:[function(require,module,exports){
+},{"../Subscription":36}],147:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -12242,11 +12500,11 @@ var AsyncAction = (function (_super) {
     AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
         if (delay === void 0) { delay = 0; }
         // If this action is rescheduled with the same delay time, don't clear the interval id.
     AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
         if (delay === void 0) { delay = 0; }
         // If this action is rescheduled with the same delay time, don't clear the interval id.
-        if (delay !== null && this.delay === delay) {
+        if (delay !== null && this.delay === delay && this.pending === false) {
             return id;
         }
         // Otherwise, if the action's delay time is different from the current delay,
             return id;
         }
         // Otherwise, if the action's delay time is different from the current delay,
-        // clear the interval id
+        // or the action has been rescheduled before it's executed, clear the interval id
         return root_1.root.clearInterval(id) && undefined || undefined;
     };
     /**
         return root_1.root.clearInterval(id) && undefined || undefined;
     };
     /**
@@ -12315,7 +12573,7 @@ var AsyncAction = (function (_super) {
 }(Action_1.Action));
 exports.AsyncAction = AsyncAction;
 
 }(Action_1.Action));
 exports.AsyncAction = AsyncAction;
 
-},{"../util/root":170,"./Action":145}],147:[function(require,module,exports){
+},{"../util/root":171,"./Action":146}],148:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -12367,7 +12625,7 @@ var AsyncScheduler = (function (_super) {
 }(Scheduler_1.Scheduler));
 exports.AsyncScheduler = AsyncScheduler;
 
 }(Scheduler_1.Scheduler));
 exports.AsyncScheduler = AsyncScheduler;
 
-},{"../Scheduler":32}],148:[function(require,module,exports){
+},{"../Scheduler":32}],149:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -12417,7 +12675,7 @@ var QueueAction = (function (_super) {
 }(AsyncAction_1.AsyncAction));
 exports.QueueAction = QueueAction;
 
 }(AsyncAction_1.AsyncAction));
 exports.QueueAction = QueueAction;
 
-},{"./AsyncAction":146}],149:[function(require,module,exports){
+},{"./AsyncAction":147}],150:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -12434,7 +12692,7 @@ var QueueScheduler = (function (_super) {
 }(AsyncScheduler_1.AsyncScheduler));
 exports.QueueScheduler = QueueScheduler;
 
 }(AsyncScheduler_1.AsyncScheduler));
 exports.QueueScheduler = QueueScheduler;
 
-},{"./AsyncScheduler":147}],150:[function(require,module,exports){
+},{"./AsyncScheduler":148}],151:[function(require,module,exports){
 "use strict";
 var AsyncAction_1 = require('./AsyncAction');
 var AsyncScheduler_1 = require('./AsyncScheduler');
 "use strict";
 var AsyncAction_1 = require('./AsyncAction');
 var AsyncScheduler_1 = require('./AsyncScheduler');
@@ -12482,7 +12740,7 @@ var AsyncScheduler_1 = require('./AsyncScheduler');
  */
 exports.async = new AsyncScheduler_1.AsyncScheduler(AsyncAction_1.AsyncAction);
 
  */
 exports.async = new AsyncScheduler_1.AsyncScheduler(AsyncAction_1.AsyncAction);
 
-},{"./AsyncAction":146,"./AsyncScheduler":147}],151:[function(require,module,exports){
+},{"./AsyncAction":147,"./AsyncScheduler":148}],152:[function(require,module,exports){
 "use strict";
 var QueueAction_1 = require('./QueueAction');
 var QueueScheduler_1 = require('./QueueScheduler');
 "use strict";
 var QueueAction_1 = require('./QueueAction');
 var QueueScheduler_1 = require('./QueueScheduler');
@@ -12549,7 +12807,7 @@ var QueueScheduler_1 = require('./QueueScheduler');
  */
 exports.queue = new QueueScheduler_1.QueueScheduler(QueueAction_1.QueueAction);
 
  */
 exports.queue = new QueueScheduler_1.QueueScheduler(QueueAction_1.QueueAction);
 
-},{"./QueueAction":148,"./QueueScheduler":149}],152:[function(require,module,exports){
+},{"./QueueAction":149,"./QueueScheduler":150}],153:[function(require,module,exports){
 "use strict";
 var root_1 = require('../util/root');
 function symbolIteratorPonyfill(root) {
 "use strict";
 var root_1 = require('../util/root');
 function symbolIteratorPonyfill(root) {
@@ -12582,9 +12840,13 @@ function symbolIteratorPonyfill(root) {
     }
 }
 exports.symbolIteratorPonyfill = symbolIteratorPonyfill;
     }
 }
 exports.symbolIteratorPonyfill = symbolIteratorPonyfill;
-exports.$$iterator = symbolIteratorPonyfill(root_1.root);
+exports.iterator = symbolIteratorPonyfill(root_1.root);
+/**
+ * @deprecated use iterator instead
+ */
+exports.$$iterator = exports.iterator;
 
 
-},{"../util/root":170}],153:[function(require,module,exports){
+},{"../util/root":171}],154:[function(require,module,exports){
 "use strict";
 var root_1 = require('../util/root');
 function getSymbolObservable(context) {
 "use strict";
 var root_1 = require('../util/root');
 function getSymbolObservable(context) {
@@ -12605,16 +12867,24 @@ function getSymbolObservable(context) {
     return $$observable;
 }
 exports.getSymbolObservable = getSymbolObservable;
     return $$observable;
 }
 exports.getSymbolObservable = getSymbolObservable;
-exports.$$observable = getSymbolObservable(root_1.root);
+exports.observable = getSymbolObservable(root_1.root);
+/**
+ * @deprecated use observable instead
+ */
+exports.$$observable = exports.observable;
 
 
-},{"../util/root":170}],154:[function(require,module,exports){
+},{"../util/root":171}],155:[function(require,module,exports){
 "use strict";
 var root_1 = require('../util/root');
 var Symbol = root_1.root.Symbol;
 "use strict";
 var root_1 = require('../util/root');
 var Symbol = root_1.root.Symbol;
-exports.$$rxSubscriber = (typeof Symbol === 'function' && typeof Symbol.for === 'function') ?
+exports.rxSubscriber = (typeof Symbol === 'function' && typeof Symbol.for === 'function') ?
     Symbol.for('rxSubscriber') : '@@rxSubscriber';
     Symbol.for('rxSubscriber') : '@@rxSubscriber';
+/**
+ * @deprecated use rxSubscriber instead
+ */
+exports.$$rxSubscriber = exports.rxSubscriber;
 
 
-},{"../util/root":170}],155:[function(require,module,exports){
+},{"../util/root":171}],156:[function(require,module,exports){
 "use strict";
 var root_1 = require('./root');
 var RequestAnimationFrameDefinition = (function () {
 "use strict";
 var root_1 = require('./root');
 var RequestAnimationFrameDefinition = (function () {
@@ -12649,7 +12919,7 @@ var RequestAnimationFrameDefinition = (function () {
 exports.RequestAnimationFrameDefinition = RequestAnimationFrameDefinition;
 exports.AnimationFrame = new RequestAnimationFrameDefinition(root_1.root);
 
 exports.RequestAnimationFrameDefinition = RequestAnimationFrameDefinition;
 exports.AnimationFrame = new RequestAnimationFrameDefinition(root_1.root);
 
-},{"./root":170}],156:[function(require,module,exports){
+},{"./root":171}],157:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -12678,7 +12948,7 @@ var ArgumentOutOfRangeError = (function (_super) {
 }(Error));
 exports.ArgumentOutOfRangeError = ArgumentOutOfRangeError;
 
 }(Error));
 exports.ArgumentOutOfRangeError = ArgumentOutOfRangeError;
 
-},{}],157:[function(require,module,exports){
+},{}],158:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -12707,7 +12977,7 @@ var EmptyError = (function (_super) {
 }(Error));
 exports.EmptyError = EmptyError;
 
 }(Error));
 exports.EmptyError = EmptyError;
 
-},{}],158:[function(require,module,exports){
+},{}],159:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -12735,7 +13005,7 @@ var ObjectUnsubscribedError = (function (_super) {
 }(Error));
 exports.ObjectUnsubscribedError = ObjectUnsubscribedError;
 
 }(Error));
 exports.ObjectUnsubscribedError = ObjectUnsubscribedError;
 
-},{}],159:[function(require,module,exports){
+},{}],160:[function(require,module,exports){
 "use strict";
 var root_1 = require('./root');
 function minimalSetImpl() {
 "use strict";
 var root_1 = require('./root');
 function minimalSetImpl() {
@@ -12769,7 +13039,7 @@ function minimalSetImpl() {
 exports.minimalSetImpl = minimalSetImpl;
 exports.Set = root_1.root.Set || minimalSetImpl();
 
 exports.minimalSetImpl = minimalSetImpl;
 exports.Set = root_1.root.Set || minimalSetImpl();
 
-},{"./root":170}],160:[function(require,module,exports){
+},{"./root":171}],161:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -12795,34 +13065,34 @@ var UnsubscriptionError = (function (_super) {
 }(Error));
 exports.UnsubscriptionError = UnsubscriptionError;
 
 }(Error));
 exports.UnsubscriptionError = UnsubscriptionError;
 
-},{}],161:[function(require,module,exports){
+},{}],162:[function(require,module,exports){
 "use strict";
 // typeof any so that it we don't have to cast when comparing a result to the error object
 exports.errorObject = { e: {} };
 
 "use strict";
 // typeof any so that it we don't have to cast when comparing a result to the error object
 exports.errorObject = { e: {} };
 
-},{}],162:[function(require,module,exports){
+},{}],163:[function(require,module,exports){
 "use strict";
 exports.isArray = Array.isArray || (function (x) { return x && typeof x.length === 'number'; });
 
 "use strict";
 exports.isArray = Array.isArray || (function (x) { return x && typeof x.length === 'number'; });
 
-},{}],163:[function(require,module,exports){
+},{}],164:[function(require,module,exports){
 "use strict";
 exports.isArrayLike = (function (x) { return x && typeof x.length === 'number'; });
 
 "use strict";
 exports.isArrayLike = (function (x) { return x && typeof x.length === 'number'; });
 
-},{}],164:[function(require,module,exports){
+},{}],165:[function(require,module,exports){
 "use strict";
 function isDate(value) {
     return value instanceof Date && !isNaN(+value);
 }
 exports.isDate = isDate;
 
 "use strict";
 function isDate(value) {
     return value instanceof Date && !isNaN(+value);
 }
 exports.isDate = isDate;
 
-},{}],165:[function(require,module,exports){
+},{}],166:[function(require,module,exports){
 "use strict";
 function isFunction(x) {
     return typeof x === 'function';
 }
 exports.isFunction = isFunction;
 
 "use strict";
 function isFunction(x) {
     return typeof x === 'function';
 }
 exports.isFunction = isFunction;
 
-},{}],166:[function(require,module,exports){
+},{}],167:[function(require,module,exports){
 "use strict";
 var isArray_1 = require('../util/isArray');
 function isNumeric(val) {
 "use strict";
 var isArray_1 = require('../util/isArray');
 function isNumeric(val) {
@@ -12835,45 +13105,51 @@ function isNumeric(val) {
 exports.isNumeric = isNumeric;
 ;
 
 exports.isNumeric = isNumeric;
 ;
 
-},{"../util/isArray":162}],167:[function(require,module,exports){
+},{"../util/isArray":163}],168:[function(require,module,exports){
 "use strict";
 function isObject(x) {
     return x != null && typeof x === 'object';
 }
 exports.isObject = isObject;
 
 "use strict";
 function isObject(x) {
     return x != null && typeof x === 'object';
 }
 exports.isObject = isObject;
 
-},{}],168:[function(require,module,exports){
+},{}],169:[function(require,module,exports){
 "use strict";
 function isPromise(value) {
     return value && typeof value.subscribe !== 'function' && typeof value.then === 'function';
 }
 exports.isPromise = isPromise;
 
 "use strict";
 function isPromise(value) {
     return value && typeof value.subscribe !== 'function' && typeof value.then === 'function';
 }
 exports.isPromise = isPromise;
 
-},{}],169:[function(require,module,exports){
+},{}],170:[function(require,module,exports){
 "use strict";
 function isScheduler(value) {
     return value && typeof value.schedule === 'function';
 }
 exports.isScheduler = isScheduler;
 
 "use strict";
 function isScheduler(value) {
     return value && typeof value.schedule === 'function';
 }
 exports.isScheduler = isScheduler;
 
-},{}],170:[function(require,module,exports){
+},{}],171:[function(require,module,exports){
 (function (global){
 "use strict";
 (function (global){
 "use strict";
-/**
- * window: browser in DOM main thread
- * self: browser in WebWorker
- * global: Node.js/other
- */
-exports.root = (typeof window == 'object' && window.window === window && window
-    || typeof self == 'object' && self.self === self && self
-    || typeof global == 'object' && global.global === global && global);
-if (!exports.root) {
-    throw new Error('RxJS could not find any global context (window, self, global)');
-}
+// CommonJS / Node have global context exposed as "global" variable.
+// We don't want to include the whole node.d.ts this this compilation unit so we'll just fake
+// the global "global" var for now.
+var __window = typeof window !== 'undefined' && window;
+var __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&
+    self instanceof WorkerGlobalScope && self;
+var __global = typeof global !== 'undefined' && global;
+var _root = __window || __global || __self;
+exports.root = _root;
+// Workaround Closure Compiler restriction: The body of a goog.module cannot use throw.
+// This is needed when used with angular/tsickle which inserts a goog.module statement.
+// Wrap in IIFE
+(function () {
+    if (!_root) {
+        throw new Error('RxJS could not find any global context (window, self, global)');
+    }
+})();
 
 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
 
 
 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
 
-},{}],171:[function(require,module,exports){
+},{}],172:[function(require,module,exports){
 "use strict";
 var root_1 = require('./root');
 var isArrayLike_1 = require('./isArrayLike');
 "use strict";
 var root_1 = require('./root');
 var isArrayLike_1 = require('./isArrayLike');
@@ -12919,8 +13195,8 @@ function subscribeToResult(outerSubscriber, result, outerValue, outerIndex) {
         });
         return destination;
     }
         });
         return destination;
     }
-    else if (result && typeof result[iterator_1.$$iterator] === 'function') {
-        var iterator = result[iterator_1.$$iterator]();
+    else if (result && typeof result[iterator_1.iterator] === 'function') {
+        var iterator = result[iterator_1.iterator]();
         do {
             var item = iterator.next();
             if (item.done) {
         do {
             var item = iterator.next();
             if (item.done) {
@@ -12933,8 +13209,8 @@ function subscribeToResult(outerSubscriber, result, outerValue, outerIndex) {
             }
         } while (true);
     }
             }
         } while (true);
     }
-    else if (result && typeof result[observable_1.$$observable] === 'function') {
-        var obs = result[observable_1.$$observable]();
+    else if (result && typeof result[observable_1.observable] === 'function') {
+        var obs = result[observable_1.observable]();
         if (typeof obs.subscribe !== 'function') {
             destination.error(new TypeError('Provided object does not correctly implement Symbol.observable'));
         }
         if (typeof obs.subscribe !== 'function') {
             destination.error(new TypeError('Provided object does not correctly implement Symbol.observable'));
         }
@@ -12952,7 +13228,7 @@ function subscribeToResult(outerSubscriber, result, outerValue, outerIndex) {
 }
 exports.subscribeToResult = subscribeToResult;
 
 }
 exports.subscribeToResult = subscribeToResult;
 
-},{"../InnerSubscriber":26,"../Observable":28,"../symbol/iterator":152,"../symbol/observable":153,"./isArrayLike":163,"./isObject":167,"./isPromise":168,"./root":170}],172:[function(require,module,exports){
+},{"../InnerSubscriber":26,"../Observable":28,"../symbol/iterator":153,"../symbol/observable":154,"./isArrayLike":164,"./isObject":168,"./isPromise":169,"./root":171}],173:[function(require,module,exports){
 "use strict";
 var Subscriber_1 = require('../Subscriber');
 var rxSubscriber_1 = require('../symbol/rxSubscriber');
 "use strict";
 var Subscriber_1 = require('../Subscriber');
 var rxSubscriber_1 = require('../symbol/rxSubscriber');
@@ -12962,8 +13238,8 @@ function toSubscriber(nextOrObserver, error, complete) {
         if (nextOrObserver instanceof Subscriber_1.Subscriber) {
             return nextOrObserver;
         }
         if (nextOrObserver instanceof Subscriber_1.Subscriber) {
             return nextOrObserver;
         }
-        if (nextOrObserver[rxSubscriber_1.$$rxSubscriber]) {
-            return nextOrObserver[rxSubscriber_1.$$rxSubscriber]();
+        if (nextOrObserver[rxSubscriber_1.rxSubscriber]) {
+            return nextOrObserver[rxSubscriber_1.rxSubscriber]();
         }
     }
     if (!nextOrObserver && !error && !complete) {
         }
     }
     if (!nextOrObserver && !error && !complete) {
@@ -12973,7 +13249,7 @@ function toSubscriber(nextOrObserver, error, complete) {
 }
 exports.toSubscriber = toSubscriber;
 
 }
 exports.toSubscriber = toSubscriber;
 
-},{"../Observer":29,"../Subscriber":35,"../symbol/rxSubscriber":154}],173:[function(require,module,exports){
+},{"../Observer":29,"../Subscriber":35,"../symbol/rxSubscriber":155}],174:[function(require,module,exports){
 "use strict";
 var errorObject_1 = require('./errorObject');
 var tryCatchTarget;
 "use strict";
 var errorObject_1 = require('./errorObject');
 var tryCatchTarget;
@@ -12993,7 +13269,7 @@ function tryCatch(fn) {
 exports.tryCatch = tryCatch;
 ;
 
 exports.tryCatch = tryCatch;
 ;
 
-},{"./errorObject":161}],174:[function(require,module,exports){
+},{"./errorObject":162}],175:[function(require,module,exports){
 // threejs.org/license
 (function(l,oa){"object"===typeof exports&&"undefined"!==typeof module?oa(exports):"function"===typeof define&&define.amd?define(["exports"],oa):oa(l.THREE=l.THREE||{})})(this,function(l){function oa(){}function C(a,b){this.x=a||0;this.y=b||0}function ea(a,b,c,d,e,f,g,h,k,m){Object.defineProperty(this,"id",{value:Oe++});this.uuid=Q.generateUUID();this.name="";this.image=void 0!==a?a:ea.DEFAULT_IMAGE;this.mipmaps=[];this.mapping=void 0!==b?b:ea.DEFAULT_MAPPING;this.wrapS=void 0!==c?c:1001;this.wrapT=
 void 0!==d?d:1001;this.magFilter=void 0!==e?e:1006;this.minFilter=void 0!==f?f:1008;this.anisotropy=void 0!==k?k:1;this.format=void 0!==g?g:1023;this.type=void 0!==h?h:1009;this.offset=new C(0,0);this.repeat=new C(1,1);this.generateMipmaps=!0;this.premultiplyAlpha=!1;this.flipY=!0;this.unpackAlignment=4;this.encoding=void 0!==m?m:3E3;this.version=0;this.onUpdate=null}function ga(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1}function Db(a,b,c){this.uuid=Q.generateUUID();this.width=
 // threejs.org/license
 (function(l,oa){"object"===typeof exports&&"undefined"!==typeof module?oa(exports):"function"===typeof define&&define.amd?define(["exports"],oa):oa(l.THREE=l.THREE||{})})(this,function(l){function oa(){}function C(a,b){this.x=a||0;this.y=b||0}function ea(a,b,c,d,e,f,g,h,k,m){Object.defineProperty(this,"id",{value:Oe++});this.uuid=Q.generateUUID();this.name="";this.image=void 0!==a?a:ea.DEFAULT_IMAGE;this.mipmaps=[];this.mapping=void 0!==b?b:ea.DEFAULT_MAPPING;this.wrapS=void 0!==c?c:1001;this.wrapT=
 void 0!==d?d:1001;this.magFilter=void 0!==e?e:1006;this.minFilter=void 0!==f?f:1008;this.anisotropy=void 0!==k?k:1;this.format=void 0!==g?g:1023;this.type=void 0!==h?h:1009;this.offset=new C(0,0);this.repeat=new C(1,1);this.generateMipmaps=!0;this.premultiplyAlpha=!1;this.flipY=!0;this.unpackAlignment=4;this.encoding=void 0!==m?m:3E3;this.version=0;this.onUpdate=null}function ga(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1}function Db(a,b,c){this.uuid=Q.generateUUID();this.width=
@@ -13856,7 +14132,7 @@ loadTextureCube:function(a,b,c,d){console.warn("THREE.ImageUtils.loadTextureCube
 l.Projector=function(){console.error("THREE.Projector has been moved to /examples/js/renderers/Projector.js.");this.projectVector=function(a,b){console.warn("THREE.Projector: .projectVector() is now vector.project().");a.project(b)};this.unprojectVector=function(a,b){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject().");a.unproject(b)};this.pickingRay=function(){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")}};l.CanvasRenderer=function(){console.error("THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js");
 this.domElement=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");this.clear=function(){};this.render=function(){};this.setClearColor=function(){};this.setSize=function(){}};Object.defineProperty(l,"__esModule",{value:!0})});
 
 l.Projector=function(){console.error("THREE.Projector has been moved to /examples/js/renderers/Projector.js.");this.projectVector=function(a,b){console.warn("THREE.Projector: .projectVector() is now vector.project().");a.project(b)};this.unprojectVector=function(a,b){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject().");a.unproject(b)};this.pickingRay=function(){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")}};l.CanvasRenderer=function(){console.error("THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js");
 this.domElement=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");this.clear=function(){};this.render=function(){};this.setClearColor=function(){};this.setSize=function(){}};Object.defineProperty(l,"__esModule",{value:!0})});
 
-},{}],175:[function(require,module,exports){
+},{}],176:[function(require,module,exports){
 //     Underscore.js 1.8.3
 //     http://underscorejs.org
 //     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
 //     Underscore.js 1.8.3
 //     http://underscorejs.org
 //     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
@@ -15406,7 +15682,7 @@ this.domElement=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"
   }
 }.call(this));
 
   }
 }.call(this));
 
-},{}],176:[function(require,module,exports){
+},{}],177:[function(require,module,exports){
 /*
  * Copyright (C) 2008 Apple Inc. All Rights Reserved.
  *
 /*
  * Copyright (C) 2008 Apple Inc. All Rights Reserved.
  *
@@ -15513,22 +15789,22 @@ UnitBezier.prototype.solve = function(x, epsilon) {
     return this.sampleCurveY(this.solveCurveX(x, epsilon));
 };
 
     return this.sampleCurveY(this.solveCurveX(x, epsilon));
 };
 
-},{}],177:[function(require,module,exports){
+},{}],178:[function(require,module,exports){
 var createElement = require("./vdom/create-element.js")
 
 module.exports = createElement
 
 var createElement = require("./vdom/create-element.js")
 
 module.exports = createElement
 
-},{"./vdom/create-element.js":183}],178:[function(require,module,exports){
+},{"./vdom/create-element.js":184}],179:[function(require,module,exports){
 var diff = require("./vtree/diff.js")
 
 module.exports = diff
 
 var diff = require("./vtree/diff.js")
 
 module.exports = diff
 
-},{"./vtree/diff.js":203}],179:[function(require,module,exports){
+},{"./vtree/diff.js":204}],180:[function(require,module,exports){
 var h = require("./virtual-hyperscript/index.js")
 
 module.exports = h
 
 var h = require("./virtual-hyperscript/index.js")
 
 module.exports = h
 
-},{"./virtual-hyperscript/index.js":190}],180:[function(require,module,exports){
+},{"./virtual-hyperscript/index.js":191}],181:[function(require,module,exports){
 var diff = require("./diff.js")
 var patch = require("./patch.js")
 var h = require("./h.js")
 var diff = require("./diff.js")
 var patch = require("./patch.js")
 var h = require("./h.js")
@@ -15545,12 +15821,12 @@ module.exports = {
     VText: VText
 }
 
     VText: VText
 }
 
-},{"./create-element.js":177,"./diff.js":178,"./h.js":179,"./patch.js":181,"./vnode/vnode.js":199,"./vnode/vtext.js":201}],181:[function(require,module,exports){
+},{"./create-element.js":178,"./diff.js":179,"./h.js":180,"./patch.js":182,"./vnode/vnode.js":200,"./vnode/vtext.js":202}],182:[function(require,module,exports){
 var patch = require("./vdom/patch.js")
 
 module.exports = patch
 
 var patch = require("./vdom/patch.js")
 
 module.exports = patch
 
-},{"./vdom/patch.js":186}],182:[function(require,module,exports){
+},{"./vdom/patch.js":187}],183:[function(require,module,exports){
 var isObject = require("is-object")
 var isHook = require("../vnode/is-vhook.js")
 
 var isObject = require("is-object")
 var isHook = require("../vnode/is-vhook.js")
 
@@ -15649,7 +15925,7 @@ function getPrototype(value) {
     }
 }
 
     }
 }
 
-},{"../vnode/is-vhook.js":194,"is-object":18}],183:[function(require,module,exports){
+},{"../vnode/is-vhook.js":195,"is-object":18}],184:[function(require,module,exports){
 var document = require("global/document")
 
 var applyProperties = require("./apply-properties")
 var document = require("global/document")
 
 var applyProperties = require("./apply-properties")
@@ -15697,7 +15973,7 @@ function createElement(vnode, opts) {
     return node
 }
 
     return node
 }
 
-},{"../vnode/handle-thunk.js":192,"../vnode/is-vnode.js":195,"../vnode/is-vtext.js":196,"../vnode/is-widget.js":197,"./apply-properties":182,"global/document":14}],184:[function(require,module,exports){
+},{"../vnode/handle-thunk.js":193,"../vnode/is-vnode.js":196,"../vnode/is-vtext.js":197,"../vnode/is-widget.js":198,"./apply-properties":183,"global/document":14}],185:[function(require,module,exports){
 // Maps a virtual DOM tree onto a real DOM tree in an efficient manner.
 // We don't want to read all of the DOM nodes in the tree so we use
 // the in-order tree indexing to eliminate recursion down certain branches.
 // Maps a virtual DOM tree onto a real DOM tree in an efficient manner.
 // We don't want to read all of the DOM nodes in the tree so we use
 // the in-order tree indexing to eliminate recursion down certain branches.
@@ -15784,7 +16060,7 @@ function ascending(a, b) {
     return a > b ? 1 : -1
 }
 
     return a > b ? 1 : -1
 }
 
-},{}],185:[function(require,module,exports){
+},{}],186:[function(require,module,exports){
 var applyProperties = require("./apply-properties")
 
 var isWidget = require("../vnode/is-widget.js")
 var applyProperties = require("./apply-properties")
 
 var isWidget = require("../vnode/is-widget.js")
@@ -15937,7 +16213,7 @@ function replaceRoot(oldRoot, newRoot) {
     return newRoot;
 }
 
     return newRoot;
 }
 
-},{"../vnode/is-widget.js":197,"../vnode/vpatch.js":200,"./apply-properties":182,"./update-widget":187}],186:[function(require,module,exports){
+},{"../vnode/is-widget.js":198,"../vnode/vpatch.js":201,"./apply-properties":183,"./update-widget":188}],187:[function(require,module,exports){
 var document = require("global/document")
 var isArray = require("x-is-array")
 
 var document = require("global/document")
 var isArray = require("x-is-array")
 
@@ -16019,7 +16295,7 @@ function patchIndices(patches) {
     return indices
 }
 
     return indices
 }
 
-},{"./create-element":183,"./dom-index":184,"./patch-op":185,"global/document":14,"x-is-array":222}],187:[function(require,module,exports){
+},{"./create-element":184,"./dom-index":185,"./patch-op":186,"global/document":14,"x-is-array":223}],188:[function(require,module,exports){
 var isWidget = require("../vnode/is-widget.js")
 
 module.exports = updateWidget
 var isWidget = require("../vnode/is-widget.js")
 
 module.exports = updateWidget
@@ -16036,7 +16312,7 @@ function updateWidget(a, b) {
     return false
 }
 
     return false
 }
 
-},{"../vnode/is-widget.js":197}],188:[function(require,module,exports){
+},{"../vnode/is-widget.js":198}],189:[function(require,module,exports){
 'use strict';
 
 var EvStore = require('ev-store');
 'use strict';
 
 var EvStore = require('ev-store');
@@ -16065,7 +16341,7 @@ EvHook.prototype.unhook = function(node, propertyName) {
     es[propName] = undefined;
 };
 
     es[propName] = undefined;
 };
 
-},{"ev-store":7}],189:[function(require,module,exports){
+},{"ev-store":7}],190:[function(require,module,exports){
 'use strict';
 
 module.exports = SoftSetHook;
 'use strict';
 
 module.exports = SoftSetHook;
@@ -16084,7 +16360,7 @@ SoftSetHook.prototype.hook = function (node, propertyName) {
     }
 };
 
     }
 };
 
-},{}],190:[function(require,module,exports){
+},{}],191:[function(require,module,exports){
 'use strict';
 
 var isArray = require('x-is-array');
 'use strict';
 
 var isArray = require('x-is-array');
@@ -16223,7 +16499,7 @@ function errorString(obj) {
     }
 }
 
     }
 }
 
-},{"../vnode/is-thunk":193,"../vnode/is-vhook":194,"../vnode/is-vnode":195,"../vnode/is-vtext":196,"../vnode/is-widget":197,"../vnode/vnode.js":199,"../vnode/vtext.js":201,"./hooks/ev-hook.js":188,"./hooks/soft-set-hook.js":189,"./parse-tag.js":191,"x-is-array":222}],191:[function(require,module,exports){
+},{"../vnode/is-thunk":194,"../vnode/is-vhook":195,"../vnode/is-vnode":196,"../vnode/is-vtext":197,"../vnode/is-widget":198,"../vnode/vnode.js":200,"../vnode/vtext.js":202,"./hooks/ev-hook.js":189,"./hooks/soft-set-hook.js":190,"./parse-tag.js":192,"x-is-array":223}],192:[function(require,module,exports){
 'use strict';
 
 var split = require('browser-split');
 'use strict';
 
 var split = require('browser-split');
@@ -16279,7 +16555,7 @@ function parseTag(tag, props) {
     return props.namespace ? tagName : tagName.toUpperCase();
 }
 
     return props.namespace ? tagName : tagName.toUpperCase();
 }
 
-},{"browser-split":3}],192:[function(require,module,exports){
+},{"browser-split":3}],193:[function(require,module,exports){
 var isVNode = require("./is-vnode")
 var isVText = require("./is-vtext")
 var isWidget = require("./is-widget")
 var isVNode = require("./is-vnode")
 var isVText = require("./is-vtext")
 var isWidget = require("./is-widget")
@@ -16321,14 +16597,14 @@ function renderThunk(thunk, previous) {
     return renderedThunk
 }
 
     return renderedThunk
 }
 
-},{"./is-thunk":193,"./is-vnode":195,"./is-vtext":196,"./is-widget":197}],193:[function(require,module,exports){
+},{"./is-thunk":194,"./is-vnode":196,"./is-vtext":197,"./is-widget":198}],194:[function(require,module,exports){
 module.exports = isThunk
 
 function isThunk(t) {
     return t && t.type === "Thunk"
 }
 
 module.exports = isThunk
 
 function isThunk(t) {
     return t && t.type === "Thunk"
 }
 
-},{}],194:[function(require,module,exports){
+},{}],195:[function(require,module,exports){
 module.exports = isHook
 
 function isHook(hook) {
 module.exports = isHook
 
 function isHook(hook) {
@@ -16337,7 +16613,7 @@ function isHook(hook) {
        typeof hook.unhook === "function" && !hook.hasOwnProperty("unhook"))
 }
 
        typeof hook.unhook === "function" && !hook.hasOwnProperty("unhook"))
 }
 
-},{}],195:[function(require,module,exports){
+},{}],196:[function(require,module,exports){
 var version = require("./version")
 
 module.exports = isVirtualNode
 var version = require("./version")
 
 module.exports = isVirtualNode
@@ -16346,7 +16622,7 @@ function isVirtualNode(x) {
     return x && x.type === "VirtualNode" && x.version === version
 }
 
     return x && x.type === "VirtualNode" && x.version === version
 }
 
-},{"./version":198}],196:[function(require,module,exports){
+},{"./version":199}],197:[function(require,module,exports){
 var version = require("./version")
 
 module.exports = isVirtualText
 var version = require("./version")
 
 module.exports = isVirtualText
@@ -16355,17 +16631,17 @@ function isVirtualText(x) {
     return x && x.type === "VirtualText" && x.version === version
 }
 
     return x && x.type === "VirtualText" && x.version === version
 }
 
-},{"./version":198}],197:[function(require,module,exports){
+},{"./version":199}],198:[function(require,module,exports){
 module.exports = isWidget
 
 function isWidget(w) {
     return w && w.type === "Widget"
 }
 
 module.exports = isWidget
 
 function isWidget(w) {
     return w && w.type === "Widget"
 }
 
-},{}],198:[function(require,module,exports){
+},{}],199:[function(require,module,exports){
 module.exports = "2"
 
 module.exports = "2"
 
-},{}],199:[function(require,module,exports){
+},{}],200:[function(require,module,exports){
 var version = require("./version")
 var isVNode = require("./is-vnode")
 var isWidget = require("./is-widget")
 var version = require("./version")
 var isVNode = require("./is-vnode")
 var isWidget = require("./is-widget")
@@ -16439,7 +16715,7 @@ function VirtualNode(tagName, properties, children, key, namespace) {
 VirtualNode.prototype.version = version
 VirtualNode.prototype.type = "VirtualNode"
 
 VirtualNode.prototype.version = version
 VirtualNode.prototype.type = "VirtualNode"
 
-},{"./is-thunk":193,"./is-vhook":194,"./is-vnode":195,"./is-widget":197,"./version":198}],200:[function(require,module,exports){
+},{"./is-thunk":194,"./is-vhook":195,"./is-vnode":196,"./is-widget":198,"./version":199}],201:[function(require,module,exports){
 var version = require("./version")
 
 VirtualPatch.NONE = 0
 var version = require("./version")
 
 VirtualPatch.NONE = 0
@@ -16463,7 +16739,7 @@ function VirtualPatch(type, vNode, patch) {
 VirtualPatch.prototype.version = version
 VirtualPatch.prototype.type = "VirtualPatch"
 
 VirtualPatch.prototype.version = version
 VirtualPatch.prototype.type = "VirtualPatch"
 
-},{"./version":198}],201:[function(require,module,exports){
+},{"./version":199}],202:[function(require,module,exports){
 var version = require("./version")
 
 module.exports = VirtualText
 var version = require("./version")
 
 module.exports = VirtualText
@@ -16475,7 +16751,7 @@ function VirtualText(text) {
 VirtualText.prototype.version = version
 VirtualText.prototype.type = "VirtualText"
 
 VirtualText.prototype.version = version
 VirtualText.prototype.type = "VirtualText"
 
-},{"./version":198}],202:[function(require,module,exports){
+},{"./version":199}],203:[function(require,module,exports){
 var isObject = require("is-object")
 var isHook = require("../vnode/is-vhook")
 
 var isObject = require("is-object")
 var isHook = require("../vnode/is-vhook")
 
@@ -16535,7 +16811,7 @@ function getPrototype(value) {
   }
 }
 
   }
 }
 
-},{"../vnode/is-vhook":194,"is-object":18}],203:[function(require,module,exports){
+},{"../vnode/is-vhook":195,"is-object":18}],204:[function(require,module,exports){
 var isArray = require("x-is-array")
 
 var VPatch = require("../vnode/vpatch")
 var isArray = require("x-is-array")
 
 var VPatch = require("../vnode/vpatch")
@@ -16964,7 +17240,7 @@ function appendPatch(apply, patch) {
     }
 }
 
     }
 }
 
-},{"../vnode/handle-thunk":192,"../vnode/is-thunk":193,"../vnode/is-vnode":195,"../vnode/is-vtext":196,"../vnode/is-widget":197,"../vnode/vpatch":200,"./diff-props":202,"x-is-array":222}],204:[function(require,module,exports){
+},{"../vnode/handle-thunk":193,"../vnode/is-thunk":194,"../vnode/is-vnode":196,"../vnode/is-vtext":197,"../vnode/is-widget":198,"../vnode/vpatch":201,"./diff-props":203,"x-is-array":223}],205:[function(require,module,exports){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
@@ -16983,7 +17259,7 @@ define(function (require) {
 });
 })(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); });
 
 });
 })(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); });
 
-},{"./Scheduler":205,"./env":217,"./makePromise":219}],205:[function(require,module,exports){
+},{"./Scheduler":206,"./env":218,"./makePromise":220}],206:[function(require,module,exports){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
@@ -17065,7 +17341,7 @@ define(function() {
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
 
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
 
-},{}],206:[function(require,module,exports){
+},{}],207:[function(require,module,exports){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
@@ -17093,7 +17369,7 @@ define(function() {
        return TimeoutError;
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
        return TimeoutError;
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
-},{}],207:[function(require,module,exports){
+},{}],208:[function(require,module,exports){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
@@ -17150,7 +17426,7 @@ define(function() {
 
 
 
 
 
 
-},{}],208:[function(require,module,exports){
+},{}],209:[function(require,module,exports){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
@@ -17451,7 +17727,7 @@ define(function(require) {
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
 
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
 
-},{"../apply":207,"../state":220}],209:[function(require,module,exports){
+},{"../apply":208,"../state":221}],210:[function(require,module,exports){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
@@ -17613,7 +17889,7 @@ define(function() {
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
 
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
 
-},{}],210:[function(require,module,exports){
+},{}],211:[function(require,module,exports){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
@@ -17642,7 +17918,7 @@ define(function() {
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
 
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
 
-},{}],211:[function(require,module,exports){
+},{}],212:[function(require,module,exports){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
@@ -17664,7 +17940,7 @@ define(function(require) {
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
 
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
 
-},{"../state":220}],212:[function(require,module,exports){
+},{"../state":221}],213:[function(require,module,exports){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
@@ -17731,7 +18007,7 @@ define(function() {
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
 
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
 
-},{}],213:[function(require,module,exports){
+},{}],214:[function(require,module,exports){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
@@ -17757,7 +18033,7 @@ define(function() {
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
 
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
 
-},{}],214:[function(require,module,exports){
+},{}],215:[function(require,module,exports){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
@@ -17837,7 +18113,7 @@ define(function(require) {
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
 
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
 
-},{"../TimeoutError":206,"../env":217}],215:[function(require,module,exports){
+},{"../TimeoutError":207,"../env":218}],216:[function(require,module,exports){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
@@ -17925,7 +18201,7 @@ define(function(require) {
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
 
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
 
-},{"../env":217,"../format":218}],216:[function(require,module,exports){
+},{"../env":218,"../format":219}],217:[function(require,module,exports){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
@@ -17965,7 +18241,7 @@ define(function() {
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
 
 
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
 
 
-},{}],217:[function(require,module,exports){
+},{}],218:[function(require,module,exports){
 (function (process){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 (function (process){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
@@ -18043,7 +18319,7 @@ define(function(require) {
 
 }).call(this,require('_process'))
 
 
 }).call(this,require('_process'))
 
-},{"_process":4}],218:[function(require,module,exports){
+},{"_process":4}],219:[function(require,module,exports){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
@@ -18101,7 +18377,7 @@ define(function() {
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
 
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
 
-},{}],219:[function(require,module,exports){
+},{}],220:[function(require,module,exports){
 (function (process){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 (function (process){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
@@ -19061,7 +19337,7 @@ define(function() {
 
 }).call(this,require('_process'))
 
 
 }).call(this,require('_process'))
 
-},{"_process":4}],220:[function(require,module,exports){
+},{"_process":4}],221:[function(require,module,exports){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 /** @author Brian Cavalier */
 /** @author John Hann */
@@ -19098,7 +19374,7 @@ define(function() {
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
 
 });
 }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
 
-},{}],221:[function(require,module,exports){
+},{}],222:[function(require,module,exports){
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 
 /**
 /** @license MIT License (c) copyright 2010-2014 original author or authors */
 
 /**
@@ -19328,7 +19604,7 @@ define(function (require) {
 });
 })(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); });
 
 });
 })(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); });
 
-},{"./lib/Promise":204,"./lib/TimeoutError":206,"./lib/apply":207,"./lib/decorators/array":208,"./lib/decorators/flow":209,"./lib/decorators/fold":210,"./lib/decorators/inspect":211,"./lib/decorators/iterate":212,"./lib/decorators/progress":213,"./lib/decorators/timed":214,"./lib/decorators/unhandledRejection":215,"./lib/decorators/with":216}],222:[function(require,module,exports){
+},{"./lib/Promise":205,"./lib/TimeoutError":207,"./lib/apply":208,"./lib/decorators/array":209,"./lib/decorators/flow":210,"./lib/decorators/fold":211,"./lib/decorators/inspect":212,"./lib/decorators/iterate":213,"./lib/decorators/progress":214,"./lib/decorators/timed":215,"./lib/decorators/unhandledRejection":216,"./lib/decorators/with":217}],223:[function(require,module,exports){
 var nativeIsArray = Array.isArray
 var toString = Object.prototype.toString
 
 var nativeIsArray = Array.isArray
 var toString = Object.prototype.toString
 
@@ -19338,14 +19614,14 @@ function isArray(obj) {
     return toString.call(obj) === "[object Array]"
 }
 
     return toString.call(obj) === "[object Array]"
 }
 
-},{}],223:[function(require,module,exports){
+},{}],224:[function(require,module,exports){
 "use strict";
 var APIv3_1 = require("./api/APIv3");
 exports.APIv3 = APIv3_1.APIv3;
 var ModelCreator_1 = require("./api/ModelCreator");
 exports.ModelCreator = ModelCreator_1.ModelCreator;
 
 "use strict";
 var APIv3_1 = require("./api/APIv3");
 exports.APIv3 = APIv3_1.APIv3;
 var ModelCreator_1 = require("./api/ModelCreator");
 exports.ModelCreator = ModelCreator_1.ModelCreator;
 
-},{"./api/APIv3":235,"./api/ModelCreator":236}],224:[function(require,module,exports){
+},{"./api/APIv3":236,"./api/ModelCreator":237}],225:[function(require,module,exports){
 "use strict";
 var Component_1 = require("./component/Component");
 exports.Component = Component_1.Component;
 "use strict";
 var Component_1 = require("./component/Component");
 exports.Component = Component_1.Component;
@@ -19464,7 +19740,7 @@ exports.PolygonGeometry = PolygonGeometry_1.PolygonGeometry;
 var GeometryTagError_1 = require("./component/tag/error/GeometryTagError");
 exports.GeometryTagError = GeometryTagError_1.GeometryTagError;
 
 var GeometryTagError_1 = require("./component/tag/error/GeometryTagError");
 exports.GeometryTagError = GeometryTagError_1.GeometryTagError;
 
-},{"./component/AttributionComponent":237,"./component/BackgroundComponent":238,"./component/BearingComponent":239,"./component/CacheComponent":240,"./component/Component":241,"./component/ComponentService":242,"./component/CoverComponent":243,"./component/DebugComponent":244,"./component/ImageComponent":245,"./component/KeyboardComponent":246,"./component/LoadingComponent":247,"./component/NavigationComponent":248,"./component/RouteComponent":249,"./component/StatsComponent":250,"./component/direction/DirectionComponent":251,"./component/direction/DirectionDOMCalculator":252,"./component/direction/DirectionDOMRenderer":253,"./component/imageplane/ImagePlaneComponent":254,"./component/imageplane/ImagePlaneFactory":255,"./component/imageplane/ImagePlaneGLRenderer":256,"./component/imageplane/ImagePlaneScene":257,"./component/imageplane/ImagePlaneShaders":258,"./component/imageplane/SliderComponent":259,"./component/marker/MarkerComponent":261,"./component/marker/MarkerScene":262,"./component/marker/MarkerSet":263,"./component/marker/marker/CircleMarker":264,"./component/marker/marker/Marker":265,"./component/marker/marker/SimpleMarker":266,"./component/mouse/DoubleClickZoomHandler":267,"./component/mouse/DragPanHandler":268,"./component/mouse/MouseComponent":269,"./component/mouse/MouseHandlerBase":270,"./component/mouse/ScrollZoomHandler":271,"./component/mouse/TouchZoomHandler":272,"./component/sequence/SequenceComponent":273,"./component/sequence/SequenceDOMInteraction":274,"./component/sequence/SequenceDOMRenderer":275,"./component/tag/TagComponent":277,"./component/tag/TagCreator":278,"./component/tag/TagDOMRenderer":279,"./component/tag/TagGLRenderer":280,"./component/tag/TagOperation":281,"./component/tag/TagSet":282,"./component/tag/error/GeometryTagError":283,"./component/tag/geometry/Geometry":284,"./component/tag/geometry/PointGeometry":285,"./component/tag/geometry/PolygonGeometry":286,"./component/tag/geometry/RectGeometry":287,"./component/tag/geometry/VertexGeometry":288,"./component/tag/tag/Alignment":289,"./component/tag/tag/OutlineCreateTag":290,"./component/tag/tag/OutlineRenderTag":291,"./component/tag/tag/OutlineTag":292,"./component/tag/tag/RenderTag":293,"./component/tag/tag/SpotRenderTag":294,"./component/tag/tag/SpotTag":295,"./component/tag/tag/Tag":296}],225:[function(require,module,exports){
+},{"./component/AttributionComponent":238,"./component/BackgroundComponent":239,"./component/BearingComponent":240,"./component/CacheComponent":241,"./component/Component":242,"./component/ComponentService":243,"./component/CoverComponent":244,"./component/DebugComponent":245,"./component/ImageComponent":246,"./component/KeyboardComponent":247,"./component/LoadingComponent":248,"./component/NavigationComponent":249,"./component/RouteComponent":250,"./component/StatsComponent":251,"./component/direction/DirectionComponent":252,"./component/direction/DirectionDOMCalculator":253,"./component/direction/DirectionDOMRenderer":254,"./component/imageplane/ImagePlaneComponent":255,"./component/imageplane/ImagePlaneFactory":256,"./component/imageplane/ImagePlaneGLRenderer":257,"./component/imageplane/ImagePlaneScene":258,"./component/imageplane/ImagePlaneShaders":259,"./component/imageplane/SliderComponent":260,"./component/marker/MarkerComponent":262,"./component/marker/MarkerScene":263,"./component/marker/MarkerSet":264,"./component/marker/marker/CircleMarker":265,"./component/marker/marker/Marker":266,"./component/marker/marker/SimpleMarker":267,"./component/mouse/DoubleClickZoomHandler":268,"./component/mouse/DragPanHandler":269,"./component/mouse/MouseComponent":270,"./component/mouse/MouseHandlerBase":271,"./component/mouse/ScrollZoomHandler":272,"./component/mouse/TouchZoomHandler":273,"./component/sequence/SequenceComponent":274,"./component/sequence/SequenceDOMInteraction":275,"./component/sequence/SequenceDOMRenderer":276,"./component/tag/TagComponent":278,"./component/tag/TagCreator":279,"./component/tag/TagDOMRenderer":280,"./component/tag/TagGLRenderer":281,"./component/tag/TagOperation":282,"./component/tag/TagSet":283,"./component/tag/error/GeometryTagError":284,"./component/tag/geometry/Geometry":285,"./component/tag/geometry/PointGeometry":286,"./component/tag/geometry/PolygonGeometry":287,"./component/tag/geometry/RectGeometry":288,"./component/tag/geometry/VertexGeometry":289,"./component/tag/tag/Alignment":290,"./component/tag/tag/OutlineCreateTag":291,"./component/tag/tag/OutlineRenderTag":292,"./component/tag/tag/OutlineTag":293,"./component/tag/tag/RenderTag":294,"./component/tag/tag/SpotRenderTag":295,"./component/tag/tag/SpotTag":296,"./component/tag/tag/Tag":297}],226:[function(require,module,exports){
 "use strict";
 var EdgeDirection_1 = require("./graph/edge/EdgeDirection");
 exports.EdgeDirection = EdgeDirection_1.EdgeDirection;
 "use strict";
 var EdgeDirection_1 = require("./graph/edge/EdgeDirection");
 exports.EdgeDirection = EdgeDirection_1.EdgeDirection;
@@ -19477,7 +19753,7 @@ exports.EdgeCalculatorCoefficients = EdgeCalculatorCoefficients_1.EdgeCalculator
 var EdgeCalculator_1 = require("./graph/edge/EdgeCalculator");
 exports.EdgeCalculator = EdgeCalculator_1.EdgeCalculator;
 
 var EdgeCalculator_1 = require("./graph/edge/EdgeCalculator");
 exports.EdgeCalculator = EdgeCalculator_1.EdgeCalculator;
 
-},{"./graph/edge/EdgeCalculator":314,"./graph/edge/EdgeCalculatorCoefficients":315,"./graph/edge/EdgeCalculatorDirections":316,"./graph/edge/EdgeCalculatorSettings":317,"./graph/edge/EdgeDirection":318}],226:[function(require,module,exports){
+},{"./graph/edge/EdgeCalculator":315,"./graph/edge/EdgeCalculatorCoefficients":316,"./graph/edge/EdgeCalculatorDirections":317,"./graph/edge/EdgeCalculatorSettings":318,"./graph/edge/EdgeDirection":319}],227:[function(require,module,exports){
 "use strict";
 var ArgumentMapillaryError_1 = require("./error/ArgumentMapillaryError");
 exports.ArgumentMapillaryError = ArgumentMapillaryError_1.ArgumentMapillaryError;
 "use strict";
 var ArgumentMapillaryError_1 = require("./error/ArgumentMapillaryError");
 exports.ArgumentMapillaryError = ArgumentMapillaryError_1.ArgumentMapillaryError;
@@ -19486,7 +19762,7 @@ exports.GraphMapillaryError = GraphMapillaryError_1.GraphMapillaryError;
 var MapillaryError_1 = require("./error/MapillaryError");
 exports.MapillaryError = MapillaryError_1.MapillaryError;
 
 var MapillaryError_1 = require("./error/MapillaryError");
 exports.MapillaryError = MapillaryError_1.MapillaryError;
 
-},{"./error/ArgumentMapillaryError":297,"./error/GraphMapillaryError":298,"./error/MapillaryError":299}],227:[function(require,module,exports){
+},{"./error/ArgumentMapillaryError":298,"./error/GraphMapillaryError":299,"./error/MapillaryError":300}],228:[function(require,module,exports){
 "use strict";
 var Camera_1 = require("./geo/Camera");
 exports.Camera = Camera_1.Camera;
 "use strict";
 var Camera_1 = require("./geo/Camera");
 exports.Camera = Camera_1.Camera;
@@ -19499,7 +19775,7 @@ exports.Spatial = Spatial_1.Spatial;
 var Transform_1 = require("./geo/Transform");
 exports.Transform = Transform_1.Transform;
 
 var Transform_1 = require("./geo/Transform");
 exports.Transform = Transform_1.Transform;
 
-},{"./geo/Camera":300,"./geo/GeoCoords":301,"./geo/Spatial":302,"./geo/Transform":303,"./geo/ViewportCoords":304}],228:[function(require,module,exports){
+},{"./geo/Camera":301,"./geo/GeoCoords":302,"./geo/Spatial":303,"./geo/Transform":304,"./geo/ViewportCoords":305}],229:[function(require,module,exports){
 "use strict";
 var FilterCreator_1 = require("./graph/FilterCreator");
 exports.FilterCreator = FilterCreator_1.FilterCreator;
 "use strict";
 var FilterCreator_1 = require("./graph/FilterCreator");
 exports.FilterCreator = FilterCreator_1.FilterCreator;
@@ -19520,7 +19796,7 @@ exports.NodeCache = NodeCache_1.NodeCache;
 var Sequence_1 = require("./graph/Sequence");
 exports.Sequence = Sequence_1.Sequence;
 
 var Sequence_1 = require("./graph/Sequence");
 exports.Sequence = Sequence_1.Sequence;
 
-},{"./graph/FilterCreator":305,"./graph/Graph":306,"./graph/GraphCalculator":307,"./graph/GraphService":308,"./graph/ImageLoadingService":309,"./graph/MeshReader":310,"./graph/Node":311,"./graph/NodeCache":312,"./graph/Sequence":313}],229:[function(require,module,exports){
+},{"./graph/FilterCreator":306,"./graph/Graph":307,"./graph/GraphCalculator":308,"./graph/GraphService":309,"./graph/ImageLoadingService":310,"./graph/MeshReader":311,"./graph/Node":312,"./graph/NodeCache":313,"./graph/Sequence":314}],230:[function(require,module,exports){
 /**
  * MapillaryJS is a WebGL JavaScript library for exploring street level imagery
  * @name Mapillary
 /**
  * MapillaryJS is a WebGL JavaScript library for exploring street level imagery
  * @name Mapillary
@@ -19538,7 +19814,7 @@ exports.TagComponent = TagComponent;
 var MarkerComponent = require("./component/marker/Marker");
 exports.MarkerComponent = MarkerComponent;
 
 var MarkerComponent = require("./component/marker/Marker");
 exports.MarkerComponent = MarkerComponent;
 
-},{"./Edge":225,"./Render":230,"./Viewer":234,"./component/marker/Marker":260,"./component/tag/Tag":276}],230:[function(require,module,exports){
+},{"./Edge":226,"./Render":231,"./Viewer":235,"./component/marker/Marker":261,"./component/tag/Tag":277}],231:[function(require,module,exports){
 "use strict";
 var DOMRenderer_1 = require("./render/DOMRenderer");
 exports.DOMRenderer = DOMRenderer_1.DOMRenderer;
 "use strict";
 var DOMRenderer_1 = require("./render/DOMRenderer");
 exports.DOMRenderer = DOMRenderer_1.DOMRenderer;
@@ -19553,7 +19829,7 @@ exports.RenderMode = RenderMode_1.RenderMode;
 var RenderService_1 = require("./render/RenderService");
 exports.RenderService = RenderService_1.RenderService;
 
 var RenderService_1 = require("./render/RenderService");
 exports.RenderService = RenderService_1.RenderService;
 
-},{"./render/DOMRenderer":319,"./render/GLRenderStage":320,"./render/GLRenderer":321,"./render/RenderCamera":322,"./render/RenderMode":323,"./render/RenderService":324}],231:[function(require,module,exports){
+},{"./render/DOMRenderer":320,"./render/GLRenderStage":321,"./render/GLRenderer":322,"./render/RenderCamera":323,"./render/RenderMode":324,"./render/RenderService":325}],232:[function(require,module,exports){
 "use strict";
 var State_1 = require("./state/State");
 exports.State = State_1.State;
 "use strict";
 var State_1 = require("./state/State");
 exports.State = State_1.State;
@@ -19568,7 +19844,7 @@ exports.TraversingState = TraversingState_1.TraversingState;
 var WaitingState_1 = require("./state/states/WaitingState");
 exports.WaitingState = WaitingState_1.WaitingState;
 
 var WaitingState_1 = require("./state/states/WaitingState");
 exports.WaitingState = WaitingState_1.WaitingState;
 
-},{"./state/State":325,"./state/StateContext":326,"./state/StateService":327,"./state/states/StateBase":328,"./state/states/TraversingState":329,"./state/states/WaitingState":330}],232:[function(require,module,exports){
+},{"./state/State":326,"./state/StateContext":327,"./state/StateService":328,"./state/states/StateBase":329,"./state/states/TraversingState":330,"./state/states/WaitingState":331}],233:[function(require,module,exports){
 "use strict";
 var ImageTileLoader_1 = require("./tiles/ImageTileLoader");
 exports.ImageTileLoader = ImageTileLoader_1.ImageTileLoader;
 "use strict";
 var ImageTileLoader_1 = require("./tiles/ImageTileLoader");
 exports.ImageTileLoader = ImageTileLoader_1.ImageTileLoader;
@@ -19579,7 +19855,7 @@ exports.TextureProvider = TextureProvider_1.TextureProvider;
 var RegionOfInterestCalculator_1 = require("./tiles/RegionOfInterestCalculator");
 exports.RegionOfInterestCalculator = RegionOfInterestCalculator_1.RegionOfInterestCalculator;
 
 var RegionOfInterestCalculator_1 = require("./tiles/RegionOfInterestCalculator");
 exports.RegionOfInterestCalculator = RegionOfInterestCalculator_1.RegionOfInterestCalculator;
 
-},{"./tiles/ImageTileLoader":331,"./tiles/ImageTileStore":332,"./tiles/RegionOfInterestCalculator":333,"./tiles/TextureProvider":334}],233:[function(require,module,exports){
+},{"./tiles/ImageTileLoader":332,"./tiles/ImageTileStore":333,"./tiles/RegionOfInterestCalculator":334,"./tiles/TextureProvider":335}],234:[function(require,module,exports){
 "use strict";
 var EventEmitter_1 = require("./utils/EventEmitter");
 exports.EventEmitter = EventEmitter_1.EventEmitter;
 "use strict";
 var EventEmitter_1 = require("./utils/EventEmitter");
 exports.EventEmitter = EventEmitter_1.EventEmitter;
@@ -19588,7 +19864,7 @@ exports.Settings = Settings_1.Settings;
 var Urls_1 = require("./utils/Urls");
 exports.Urls = Urls_1.Urls;
 
 var Urls_1 = require("./utils/Urls");
 exports.Urls = Urls_1.Urls;
 
-},{"./utils/EventEmitter":335,"./utils/Settings":336,"./utils/Urls":337}],234:[function(require,module,exports){
+},{"./utils/EventEmitter":336,"./utils/Settings":337,"./utils/Urls":338}],235:[function(require,module,exports){
 "use strict";
 var CacheService_1 = require("./viewer/CacheService");
 exports.CacheService = CacheService_1.CacheService;
 "use strict";
 var CacheService_1 = require("./viewer/CacheService");
 exports.CacheService = CacheService_1.CacheService;
@@ -19617,7 +19893,7 @@ exports.TouchService = TouchService_1.TouchService;
 var Viewer_1 = require("./viewer/Viewer");
 exports.Viewer = Viewer_1.Viewer;
 
 var Viewer_1 = require("./viewer/Viewer");
 exports.Viewer = Viewer_1.Viewer;
 
-},{"./viewer/CacheService":338,"./viewer/ComponentController":339,"./viewer/Container":340,"./viewer/ImageSize":341,"./viewer/LoadingService":342,"./viewer/MouseService":343,"./viewer/Navigator":344,"./viewer/Observer":345,"./viewer/Projection":346,"./viewer/SpriteAlignment":347,"./viewer/SpriteService":348,"./viewer/TouchService":349,"./viewer/Viewer":350}],235:[function(require,module,exports){
+},{"./viewer/CacheService":339,"./viewer/ComponentController":340,"./viewer/Container":341,"./viewer/ImageSize":342,"./viewer/LoadingService":343,"./viewer/MouseService":344,"./viewer/Navigator":345,"./viewer/Observer":346,"./viewer/Projection":347,"./viewer/SpriteAlignment":348,"./viewer/SpriteService":349,"./viewer/TouchService":350,"./viewer/Viewer":351}],236:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var Observable_1 = require("rxjs/Observable");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var Observable_1 = require("rxjs/Observable");
@@ -19824,7 +20100,7 @@ exports.APIv3 = APIv3;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = APIv3;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = APIv3;
 
-},{"../API":223,"rxjs/Observable":28,"rxjs/add/observable/defer":38,"rxjs/add/observable/fromPromise":42,"rxjs/add/operator/catch":51,"rxjs/add/operator/map":64}],236:[function(require,module,exports){
+},{"../API":224,"rxjs/Observable":28,"rxjs/add/observable/defer":38,"rxjs/add/observable/fromPromise":42,"rxjs/add/operator/catch":51,"rxjs/add/operator/map":64}],237:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var falcor = require("falcor");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var falcor = require("falcor");
@@ -19868,7 +20144,7 @@ exports.ModelCreator = ModelCreator;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ModelCreator;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ModelCreator;
 
-},{"../Utils":233,"falcor":13,"falcor-http-datasource":8}],237:[function(require,module,exports){
+},{"../Utils":234,"falcor":13,"falcor-http-datasource":8}],238:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -19918,7 +20194,7 @@ Component_1.ComponentService.register(AttributionComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = AttributionComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = AttributionComponent;
 
-},{"../Component":224,"virtual-dom":180}],238:[function(require,module,exports){
+},{"../Component":225,"virtual-dom":181}],239:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -19957,7 +20233,7 @@ Component_1.ComponentService.register(BackgroundComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = BackgroundComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = BackgroundComponent;
 
-},{"../Component":224,"virtual-dom":180}],239:[function(require,module,exports){
+},{"../Component":225,"virtual-dom":181}],240:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -20008,7 +20284,9 @@ var BearingComponent = (function (_super) {
         var cameraBearingFov$ = this._container.renderService.renderCamera$
             .map(function (rc) {
             var vFov = _this._spatial.degToRad(rc.perspective.fov);
         var cameraBearingFov$ = this._container.renderService.renderCamera$
             .map(function (rc) {
             var vFov = _this._spatial.degToRad(rc.perspective.fov);
-            var hFov = Math.atan(rc.perspective.aspect * Math.tan(0.5 * vFov)) * 2;
+            var hFov = rc.perspective.aspect === Number.POSITIVE_INFINITY ?
+                Math.PI :
+                Math.atan(rc.perspective.aspect * Math.tan(0.5 * vFov)) * 2;
             return [_this._spatial.azimuthalToBearing(rc.rotation.phi), hFov];
         })
             .distinctUntilChanged(function (a1, a2) {
             return [_this._spatial.azimuthalToBearing(rc.rotation.phi), hFov];
         })
             .distinctUntilChanged(function (a1, a2) {
@@ -20100,7 +20378,7 @@ Component_1.ComponentService.register(BearingComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = BearingComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = BearingComponent;
 
-},{"../Component":224,"../Geo":227,"rxjs/Observable":28,"virtual-dom":180}],240:[function(require,module,exports){
+},{"../Component":225,"../Geo":228,"rxjs/Observable":28,"virtual-dom":181}],241:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -20253,7 +20531,7 @@ Component_1.ComponentService.register(CacheComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = CacheComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = CacheComponent;
 
-},{"../Component":224,"../Edge":225,"rxjs/Observable":28,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/from":40,"rxjs/add/observable/merge":43,"rxjs/add/observable/of":44,"rxjs/add/observable/zip":47,"rxjs/add/operator/catch":51,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/distinct":56,"rxjs/add/operator/expand":59,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeAll":66,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/skip":74,"rxjs/add/operator/switchMap":78}],241:[function(require,module,exports){
+},{"../Component":225,"../Edge":226,"rxjs/Observable":28,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/from":40,"rxjs/add/observable/merge":43,"rxjs/add/observable/of":44,"rxjs/add/observable/zip":47,"rxjs/add/operator/catch":51,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/distinct":56,"rxjs/add/operator/expand":59,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeAll":66,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/skip":74,"rxjs/add/operator/switchMap":78}],242:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -20373,7 +20651,7 @@ exports.Component = Component;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Component;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Component;
 
-},{"../Utils":233,"rxjs/BehaviorSubject":25,"rxjs/Subject":33,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77}],242:[function(require,module,exports){
+},{"../Utils":234,"rxjs/BehaviorSubject":25,"rxjs/Subject":33,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77}],243:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var _ = require("underscore");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var _ = require("underscore");
@@ -20470,7 +20748,7 @@ exports.ComponentService = ComponentService;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ComponentService;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ComponentService;
 
-},{"../Error":226,"underscore":175}],243:[function(require,module,exports){
+},{"../Error":227,"underscore":176}],244:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -20550,7 +20828,7 @@ Component_1.ComponentService.registerCover(CoverComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = CoverComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = CoverComponent;
 
-},{"../Component":224,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/withLatestFrom":82,"virtual-dom":180}],244:[function(require,module,exports){
+},{"../Component":225,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/withLatestFrom":82,"virtual-dom":181}],245:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -20659,7 +20937,7 @@ Component_1.ComponentService.register(DebugComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = DebugComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = DebugComponent;
 
-},{"../Component":224,"rxjs/BehaviorSubject":25,"rxjs/add/operator/combineLatest":52,"underscore":175,"virtual-dom":180}],245:[function(require,module,exports){
+},{"../Component":225,"rxjs/BehaviorSubject":25,"rxjs/add/operator/combineLatest":52,"underscore":176,"virtual-dom":181}],246:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -20714,7 +20992,7 @@ Component_1.ComponentService.register(ImageComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ImageComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ImageComponent;
 
-},{"../Component":224,"rxjs/add/operator/combineLatest":52,"virtual-dom":180}],246:[function(require,module,exports){
+},{"../Component":225,"rxjs/add/operator/combineLatest":52,"virtual-dom":181}],247:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -20917,7 +21195,7 @@ Component_1.ComponentService.register(KeyboardComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = KeyboardComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = KeyboardComponent;
 
-},{"../Component":224,"../Edge":225,"../Geo":227,"rxjs/Observable":28,"rxjs/add/observable/fromEvent":41,"rxjs/add/operator/withLatestFrom":82}],247:[function(require,module,exports){
+},{"../Component":225,"../Edge":226,"../Geo":228,"rxjs/Observable":28,"rxjs/add/observable/fromEvent":41,"rxjs/add/operator/withLatestFrom":82}],248:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -20985,7 +21263,7 @@ Component_1.ComponentService.register(LoadingComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = LoadingComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = LoadingComponent;
 
-},{"../Component":224,"rxjs/add/operator/combineLatest":52,"underscore":175,"virtual-dom":180}],248:[function(require,module,exports){
+},{"../Component":225,"rxjs/add/operator/combineLatest":52,"underscore":176,"virtual-dom":181}],249:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -21061,7 +21339,7 @@ Component_1.ComponentService.register(NavigationComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = NavigationComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = NavigationComponent;
 
-},{"../Component":224,"../Edge":225,"rxjs/Observable":28,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"virtual-dom":180}],249:[function(require,module,exports){
+},{"../Component":225,"../Edge":226,"rxjs/Observable":28,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"virtual-dom":181}],250:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -21276,7 +21554,7 @@ Component_1.ComponentService.register(RouteComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = RouteComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = RouteComponent;
 
-},{"../Component":224,"rxjs/Observable":28,"rxjs/add/observable/fromPromise":42,"rxjs/add/observable/of":44,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/distinct":56,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/pluck":69,"rxjs/add/operator/scan":72,"underscore":175,"virtual-dom":180}],250:[function(require,module,exports){
+},{"../Component":225,"rxjs/Observable":28,"rxjs/add/observable/fromPromise":42,"rxjs/add/observable/of":44,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/distinct":56,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/pluck":69,"rxjs/add/operator/scan":72,"underscore":176,"virtual-dom":181}],251:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -21361,7 +21639,7 @@ Component_1.ComponentService.register(StatsComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = StatsComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = StatsComponent;
 
-},{"../Component":224,"rxjs/Observable":28,"rxjs/add/operator/buffer":48,"rxjs/add/operator/debounceTime":54,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/scan":72}],251:[function(require,module,exports){
+},{"../Component":225,"rxjs/Observable":28,"rxjs/add/operator/buffer":48,"rxjs/add/operator/debounceTime":54,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/scan":72}],252:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -21540,7 +21818,7 @@ Component_1.ComponentService.register(DirectionComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = DirectionComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = DirectionComponent;
 
-},{"../../Component":224,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/share":73,"virtual-dom":180}],252:[function(require,module,exports){
+},{"../../Component":225,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/share":73,"virtual-dom":181}],253:[function(require,module,exports){
 "use strict";
 var Geo_1 = require("../../Geo");
 /**
 "use strict";
 var Geo_1 = require("../../Geo");
 /**
@@ -21779,7 +22057,7 @@ exports.DirectionDOMCalculator = DirectionDOMCalculator;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = DirectionDOMCalculator;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = DirectionDOMCalculator;
 
-},{"../../Geo":227}],253:[function(require,module,exports){
+},{"../../Geo":228}],254:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var vd = require("virtual-dom");
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var vd = require("virtual-dom");
@@ -22146,7 +22424,7 @@ exports.DirectionDOMRenderer = DirectionDOMRenderer;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = DirectionDOMRenderer;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = DirectionDOMRenderer;
 
-},{"../../Component":224,"../../Edge":225,"../../Geo":227,"virtual-dom":180}],254:[function(require,module,exports){
+},{"../../Component":225,"../../Edge":226,"../../Geo":228,"virtual-dom":181}],255:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -22409,7 +22687,7 @@ Component_1.ComponentService.register(ImagePlaneComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ImagePlaneComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ImagePlaneComponent;
 
-},{"../../Component":224,"../../Render":230,"../../Tiles":232,"../../Utils":233,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/operator/catch":51,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/debounceTime":54,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/pairwise":68,"rxjs/add/operator/publish":70,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/skipWhile":76,"rxjs/add/operator/startWith":77,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/takeUntil":80,"rxjs/add/operator/withLatestFrom":82}],255:[function(require,module,exports){
+},{"../../Component":225,"../../Render":231,"../../Tiles":233,"../../Utils":234,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/operator/catch":51,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/debounceTime":54,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/pairwise":68,"rxjs/add/operator/publish":70,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/skipWhile":76,"rxjs/add/operator/startWith":77,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/takeUntil":80,"rxjs/add/operator/withLatestFrom":82}],256:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
@@ -22525,9 +22803,7 @@ var ImagePlaneFactory = (function () {
         return texture;
     };
     ImagePlaneFactory.prototype._useMesh = function (transform, node) {
         return texture;
     };
     ImagePlaneFactory.prototype._useMesh = function (transform, node) {
-        return node.mesh.vertices.length &&
-            transform.scale > 1e-2 &&
-            transform.scale < 50;
+        return node.mesh.vertices.length && transform.hasValidScale;
     };
     ImagePlaneFactory.prototype._getImageSphereGeo = function (transform, node) {
         var t = new THREE.Matrix4().getInverse(transform.srt);
     };
     ImagePlaneFactory.prototype._getImageSphereGeo = function (transform, node) {
         var t = new THREE.Matrix4().getInverse(transform.srt);
@@ -22640,7 +22916,7 @@ exports.ImagePlaneFactory = ImagePlaneFactory;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ImagePlaneFactory;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ImagePlaneFactory;
 
-},{"../../Component":224,"three":174}],256:[function(require,module,exports){
+},{"../../Component":225,"three":175}],257:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var Component_1 = require("../../Component");
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var Component_1 = require("../../Component");
@@ -22805,7 +23081,7 @@ exports.ImagePlaneGLRenderer = ImagePlaneGLRenderer;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ImagePlaneGLRenderer;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ImagePlaneGLRenderer;
 
-},{"../../Component":224,"../../Geo":227}],257:[function(require,module,exports){
+},{"../../Component":225,"../../Geo":228}],258:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
@@ -22882,7 +23158,7 @@ exports.ImagePlaneScene = ImagePlaneScene;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ImagePlaneScene;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ImagePlaneScene;
 
-},{"three":174}],258:[function(require,module,exports){
+},{"three":175}],259:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 
@@ -22902,7 +23178,7 @@ ImagePlaneShaders.perspective = {
 };
 exports.ImagePlaneShaders = ImagePlaneShaders;
 
 };
 exports.ImagePlaneShaders = ImagePlaneShaders;
 
-},{"path":21}],259:[function(require,module,exports){
+},{"path":21}],260:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -23336,7 +23612,7 @@ Component_1.ComponentService.register(SliderComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = SliderComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = SliderComponent;
 
-},{"../../Component":224,"../../Render":230,"../../State":231,"../../Utils":233,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/fromEvent":41,"rxjs/add/observable/of":44,"rxjs/add/observable/zip":47,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/scan":72,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/withLatestFrom":82,"rxjs/add/operator/zip":83,"virtual-dom":180}],260:[function(require,module,exports){
+},{"../../Component":225,"../../Render":231,"../../State":232,"../../Utils":234,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/fromEvent":41,"rxjs/add/observable/of":44,"rxjs/add/observable/zip":47,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/scan":72,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/withLatestFrom":82,"rxjs/add/operator/zip":83,"virtual-dom":181}],261:[function(require,module,exports){
 "use strict";
 var MarkerComponent_1 = require("./MarkerComponent");
 exports.MarkerComponent = MarkerComponent_1.MarkerComponent;
 "use strict";
 var MarkerComponent_1 = require("./MarkerComponent");
 exports.MarkerComponent = MarkerComponent_1.MarkerComponent;
@@ -23345,7 +23621,7 @@ exports.SimpleMarker = SimpleMarker_1.SimpleMarker;
 var CircleMarker_1 = require("./marker/CircleMarker");
 exports.CircleMarker = CircleMarker_1.CircleMarker;
 
 var CircleMarker_1 = require("./marker/CircleMarker");
 exports.CircleMarker = CircleMarker_1.CircleMarker;
 
-},{"./MarkerComponent":261,"./marker/CircleMarker":264,"./marker/SimpleMarker":266}],261:[function(require,module,exports){
+},{"./MarkerComponent":262,"./marker/CircleMarker":265,"./marker/SimpleMarker":267}],262:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -23454,7 +23730,7 @@ var MarkerComponent = (function (_super) {
     };
     /**
      * Returns the id of the interactive marker closest to the current camera
     };
     /**
      * Returns the id of the interactive marker closest to the current camera
-     * position ids for marker currently visible at the specified point.
+     * position at the specified point.
      *
      * @description Notice that the pixelPoint argument requires x, y
      * coordinates from pixel space.
      *
      * @description Notice that the pixelPoint argument requires x, y
      * coordinates from pixel space.
@@ -23463,11 +23739,11 @@ var MarkerComponent = (function (_super) {
      * events to get information out of the marker component.
      *
      * If no interactive geometry of an interactive marker exist at the pixel
      * events to get information out of the marker component.
      *
      * If no interactive geometry of an interactive marker exist at the pixel
-     * point, null will be returned.
+     * point, `null` will be returned.
      *
      * @param {Array<number>} pixelPoint - Pixel coordinates on the viewer element.
      * @returns {string} Id of the interactive marker closest to the camera. If no
      *
      * @param {Array<number>} pixelPoint - Pixel coordinates on the viewer element.
      * @returns {string} Id of the interactive marker closest to the camera. If no
-     * interactive marker exist at the pixel point, null will be returned.
+     * interactive marker exist at the pixel point, `null` will be returned.
      *
      * @example
      * ```
      *
      * @example
      * ```
@@ -23662,7 +23938,9 @@ var MarkerComponent = (function (_super) {
             .combineLatest(this._container.renderService.renderCamera$, this._container.mouseService.mouseMove$)
             .map(function (_a) {
             var render = _a[0], event = _a[1];
             .combineLatest(this._container.renderService.renderCamera$, this._container.mouseService.mouseMove$)
             .map(function (_a) {
             var render = _a[0], event = _a[1];
-            var viewport = _this._viewportCoords.canvasToViewport(event.clientX, event.clientY, _this._container.element);
+            var element = _this._container.element;
+            var _b = _this._viewportCoords.canvasPosition(event, element), canvasX = _b[0], canvasY = _b[1];
+            var viewport = _this._viewportCoords.canvasToViewport(canvasX, canvasY, element);
             var markerId = _this._markerScene.intersectObjects(viewport, render.perspective);
             return markerId;
         })
             var markerId = _this._markerScene.intersectObjects(viewport, render.perspective);
             return markerId;
         })
@@ -23717,8 +23995,10 @@ var MarkerComponent = (function (_super) {
             .map(function (_a) {
             var e = _a[0], id = _a[1], r = _a[2];
             var marker = _this._markerScene.get(id);
             .map(function (_a) {
             var e = _a[0], id = _a[1], r = _a[2];
             var marker = _this._markerScene.get(id);
-            var _b = _this._viewportCoords.projectToCanvas(marker.geometry.position.toArray(), _this._container.element, r.perspective), groundCanvasX = _b[0], groundCanvasY = _b[1];
-            var offset = [e.clientX - groundCanvasX, e.clientY - groundCanvasY];
+            var element = _this._container.element;
+            var _b = _this._viewportCoords.projectToCanvas(marker.geometry.position.toArray(), element, r.perspective), groundCanvasX = _b[0], groundCanvasY = _b[1];
+            var _c = _this._viewportCoords.canvasPosition(e, element), canvasX = _c[0], canvasY = _c[1];
+            var offset = [canvasX - groundCanvasX, canvasY - groundCanvasY];
             return [marker, offset, r];
         })
             .publishReplay(1)
             return [marker, offset, r];
         })
             .publishReplay(1)
@@ -23731,10 +24011,12 @@ var MarkerComponent = (function (_super) {
             if (!_this._markerScene.has(marker.id)) {
                 return;
             }
             if (!_this._markerScene.has(marker.id)) {
                 return;
             }
-            var groundX = event.clientX - offset[0];
-            var groundY = event.clientY - offset[1];
-            var _c = _this._viewportCoords
-                .canvasToViewport(groundX, groundY, _this._container.element), viewportX = _c[0], viewportY = _c[1];
+            var element = _this._container.element;
+            var _c = _this._viewportCoords.canvasPosition(event, element), canvasX = _c[0], canvasY = _c[1];
+            var groundX = canvasX - offset[0];
+            var groundY = canvasY - offset[1];
+            var _d = _this._viewportCoords
+                .canvasToViewport(groundX, groundY, element), viewportX = _d[0], viewportY = _d[1];
             var direction = new THREE.Vector3(viewportX, viewportY, 1)
                 .unproject(render.perspective)
                 .sub(render.perspective.position)
             var direction = new THREE.Vector3(viewportX, viewportY, 1)
                 .unproject(render.perspective)
                 .sub(render.perspective.position)
@@ -23748,8 +24030,8 @@ var MarkerComponent = (function (_super) {
                 .multiplyScalar(distance)
                 .add(render.perspective.position);
             intersection.z = render.perspective.position.z + _this._relativeGroundAltitude;
                 .multiplyScalar(distance)
                 .add(render.perspective.position);
             intersection.z = render.perspective.position.z + _this._relativeGroundAltitude;
-            var _d = _this._geoCoords
-                .enuToGeodetic(intersection.x, intersection.y, intersection.z, reference.lat, reference.lon, reference.alt), lat = _d[0], lon = _d[1];
+            var _e = _this._geoCoords
+                .enuToGeodetic(intersection.x, intersection.y, intersection.z, reference.lat, reference.lon, reference.alt), lat = _e[0], lon = _e[1];
             _this._markerScene.update(marker.id, intersection.toArray(), { lat: lat, lon: lon });
             _this._markerSet.update(marker);
             var markerEvent = { marker: marker, target: _this, type: MarkerComponent.changed };
             _this._markerScene.update(marker.id, intersection.toArray(), { lat: lat, lon: lon });
             _this._markerSet.update(marker);
             var markerEvent = { marker: marker, target: _this, type: MarkerComponent.changed };
@@ -23814,7 +24096,7 @@ Component_1.ComponentService.register(MarkerComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = MarkerComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = MarkerComponent;
 
-},{"../../Component":224,"../../Geo":227,"../../Graph":228,"../../Render":230,"rxjs/Observable":28,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"three":174,"when":221}],262:[function(require,module,exports){
+},{"../../Component":225,"../../Geo":228,"../../Graph":229,"../../Render":231,"rxjs/Observable":28,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"three":175,"when":222}],263:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
@@ -23937,7 +24219,7 @@ exports.MarkerScene = MarkerScene;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = MarkerScene;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = MarkerScene;
 
-},{"three":174}],263:[function(require,module,exports){
+},{"three":175}],264:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var rbush = require("rbush");
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var rbush = require("rbush");
@@ -24058,7 +24340,7 @@ exports.MarkerSet = MarkerSet;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = MarkerSet;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = MarkerSet;
 
-},{"rbush":24,"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72}],264:[function(require,module,exports){
+},{"rbush":24,"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72}],265:[function(require,module,exports){
 /// <reference path="../../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -24136,7 +24418,7 @@ exports.CircleMarker = CircleMarker;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = CircleMarker;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = CircleMarker;
 
-},{"../../../Component":224,"three":174}],265:[function(require,module,exports){
+},{"../../../Component":225,"three":175}],266:[function(require,module,exports){
 /// <reference path="../../../../typings/index.d.ts" />
 "use strict";
 /**
 /// <reference path="../../../../typings/index.d.ts" />
 "use strict";
 /**
@@ -24223,7 +24505,7 @@ exports.Marker = Marker;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Marker;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Marker;
 
-},{}],266:[function(require,module,exports){
+},{}],267:[function(require,module,exports){
 /// <reference path="../../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -24367,7 +24649,7 @@ exports.SimpleMarker = SimpleMarker;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = SimpleMarker;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = SimpleMarker;
 
-},{"../../../Component":224,"three":174}],267:[function(require,module,exports){
+},{"../../../Component":225,"three":175}],268:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -24378,6 +24660,16 @@ var Observable_1 = require("rxjs/Observable");
 var Component_1 = require("../../Component");
 /**
  * The `DoubleClickZoomHandler` allows the user to zoom the viewer photo at a point by double clicking.
 var Component_1 = require("../../Component");
 /**
  * The `DoubleClickZoomHandler` allows the user to zoom the viewer photo at a point by double clicking.
+ *
+ * @example
+ * ```
+ * var mouseComponent = viewer.getComponent("mouse");
+ *
+ * mouseComponent.doubleClickZoom.disable();
+ * mouseComponent.doubleClickZoom.enable();
+ *
+ * var isEnabled = mouseComponent.doubleClickZoom.isEnabled;
+ * ```
  */
 var DoubleClickZoomHandler = (function (_super) {
     __extends(DoubleClickZoomHandler, _super);
  */
 var DoubleClickZoomHandler = (function (_super) {
     __extends(DoubleClickZoomHandler, _super);
@@ -24416,7 +24708,7 @@ exports.DoubleClickZoomHandler = DoubleClickZoomHandler;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = DoubleClickZoomHandler;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = DoubleClickZoomHandler;
 
-},{"../../Component":224,"rxjs/Observable":28}],268:[function(require,module,exports){
+},{"../../Component":225,"rxjs/Observable":28}],269:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -24429,6 +24721,16 @@ var Observable_1 = require("rxjs/Observable");
 var Component_1 = require("../../Component");
 /**
  * The `DragPanHandler` allows the user to pan the viewer photo by clicking and dragging the cursor.
 var Component_1 = require("../../Component");
 /**
  * The `DragPanHandler` allows the user to pan the viewer photo by clicking and dragging the cursor.
+ *
+ * @example
+ * ```
+ * var mouseComponent = viewer.getComponent("mouse");
+ *
+ * mouseComponent.dragPan.disable();
+ * mouseComponent.dragPan.enable();
+ *
+ * var isEnabled = mouseComponent.dragPan.isEnabled;
+ * ```
  */
 var DragPanHandler = (function (_super) {
     __extends(DragPanHandler, _super);
  */
 var DragPanHandler = (function (_super) {
     __extends(DragPanHandler, _super);
@@ -24589,7 +24891,7 @@ exports.DragPanHandler = DragPanHandler;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = DragPanHandler;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = DragPanHandler;
 
-},{"../../Component":224,"rxjs/Observable":28,"three":174}],269:[function(require,module,exports){
+},{"../../Component":225,"rxjs/Observable":28,"three":175}],270:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -24722,6 +25024,12 @@ var MouseComponent = (function (_super) {
             var renderCamera = args[0];
             var perspectiveCamera = renderCamera.perspective;
             var transform = args[1];
             var renderCamera = args[0];
             var perspectiveCamera = renderCamera.perspective;
             var transform = args[1];
+            if (!transform.hasValidScale && renderCamera.camera.focal < 0.1) {
+                return;
+            }
+            if (renderCamera.perspective.aspect === 0 || renderCamera.perspective.aspect === Number.POSITIVE_INFINITY) {
+                return;
+            }
             var distanceThreshold = _this._basicDistanceThreshold / Math.pow(2, renderCamera.zoom);
             var basicCenter = _this._viewportCoords.viewportToBasic(0, 0, transform, perspectiveCamera);
             if (Math.abs(basicCenter[0] - 0.5) < distanceThreshold && Math.abs(basicCenter[1] - 0.5) < distanceThreshold) {
             var distanceThreshold = _this._basicDistanceThreshold / Math.pow(2, renderCamera.zoom);
             var basicCenter = _this._viewportCoords.viewportToBasic(0, 0, transform, perspectiveCamera);
             if (Math.abs(basicCenter[0] - 0.5) < distanceThreshold && Math.abs(basicCenter[1] - 0.5) < distanceThreshold) {
@@ -24785,7 +25093,7 @@ Component_1.ComponentService.register(MouseComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = MouseComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = MouseComponent;
 
-},{"../../Component":224,"../../Geo":227,"rxjs/Observable":28,"rxjs/add/observable/merge":43,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/withLatestFrom":82}],270:[function(require,module,exports){
+},{"../../Component":225,"../../Geo":228,"rxjs/Observable":28,"rxjs/add/observable/merge":43,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/withLatestFrom":82}],271:[function(require,module,exports){
 "use strict";
 var MouseHandlerBase = (function () {
     function MouseHandlerBase(component, container, navigator, viewportCoords) {
 "use strict";
 var MouseHandlerBase = (function () {
     function MouseHandlerBase(component, container, navigator, viewportCoords) {
@@ -24841,7 +25149,7 @@ exports.MouseHandlerBase = MouseHandlerBase;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = MouseHandlerBase;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = MouseHandlerBase;
 
-},{}],271:[function(require,module,exports){
+},{}],272:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -24851,6 +25159,16 @@ var __extends = (this && this.__extends) || function (d, b) {
 var Component_1 = require("../../Component");
 /**
  * The `ScrollZoomHandler` allows the user to zoom the viewer photo by scrolling.
 var Component_1 = require("../../Component");
 /**
  * The `ScrollZoomHandler` allows the user to zoom the viewer photo by scrolling.
+ *
+ * @example
+ * ```
+ * var mouseComponent = viewer.getComponent("mouse");
+ *
+ * mouseComponent.scrollZoom.disable();
+ * mouseComponent.scrollZoom.enable();
+ *
+ * var isEnabled = mouseComponent.scrollZoom.isEnabled;
+ * ```
  */
 var ScrollZoomHandler = (function (_super) {
     __extends(ScrollZoomHandler, _super);
  */
 var ScrollZoomHandler = (function (_super) {
     __extends(ScrollZoomHandler, _super);
@@ -24913,7 +25231,7 @@ exports.ScrollZoomHandler = ScrollZoomHandler;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ScrollZoomHandler;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ScrollZoomHandler;
 
-},{"../../Component":224}],272:[function(require,module,exports){
+},{"../../Component":225}],273:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -24925,6 +25243,16 @@ var Observable_1 = require("rxjs/Observable");
 var Component_1 = require("../../Component");
 /**
  * The `TouchZoomHandler` allows the user to zoom the viewer photo by pinching on a touchscreen.
 var Component_1 = require("../../Component");
 /**
  * The `TouchZoomHandler` allows the user to zoom the viewer photo by pinching on a touchscreen.
+ *
+ * @example
+ * ```
+ * var mouseComponent = viewer.getComponent("mouse");
+ *
+ * mouseComponent.touchZoom.disable();
+ * mouseComponent.touchZoom.enable();
+ *
+ * var isEnabled = mouseComponent.touchZoom.isEnabled;
+ * ```
  */
 var TouchZoomHandler = (function (_super) {
     __extends(TouchZoomHandler, _super);
  */
 var TouchZoomHandler = (function (_super) {
     __extends(TouchZoomHandler, _super);
@@ -24985,7 +25313,7 @@ exports.TouchZoomHandler = TouchZoomHandler;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = TouchZoomHandler;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = TouchZoomHandler;
 
-},{"../../Component":224,"rxjs/Observable":28}],273:[function(require,module,exports){
+},{"../../Component":225,"rxjs/Observable":28}],274:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -25332,7 +25660,7 @@ Component_1.ComponentService.register(SequenceComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = SequenceComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = SequenceComponent;
 
-},{"../../Component":224,"../../Edge":225,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/of":44,"rxjs/add/operator/bufferCount":49,"rxjs/add/operator/concat":53,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/finally":61,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/takeUntil":80,"rxjs/add/operator/withLatestFrom":82}],274:[function(require,module,exports){
+},{"../../Component":225,"../../Edge":226,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/of":44,"rxjs/add/operator/bufferCount":49,"rxjs/add/operator/concat":53,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/finally":61,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/takeUntil":80,"rxjs/add/operator/withLatestFrom":82}],275:[function(require,module,exports){
 "use strict";
 var Subject_1 = require("rxjs/Subject");
 var SequenceDOMInteraction = (function () {
 "use strict";
 var Subject_1 = require("rxjs/Subject");
 var SequenceDOMInteraction = (function () {
@@ -25360,7 +25688,7 @@ exports.SequenceDOMInteraction = SequenceDOMInteraction;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = SequenceDOMInteraction;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = SequenceDOMInteraction;
 
-},{"rxjs/Subject":33}],275:[function(require,module,exports){
+},{"rxjs/Subject":33}],276:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var vd = require("virtual-dom");
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var vd = require("virtual-dom");
@@ -25477,7 +25805,7 @@ exports.SequenceDOMRenderer = SequenceDOMRenderer;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = SequenceDOMRenderer;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = SequenceDOMRenderer;
 
-},{"../../Edge":225,"virtual-dom":180}],276:[function(require,module,exports){
+},{"../../Edge":226,"virtual-dom":181}],277:[function(require,module,exports){
 "use strict";
 var GeometryTagError_1 = require("./error/GeometryTagError");
 exports.GeometryTagError = GeometryTagError_1.GeometryTagError;
 "use strict";
 var GeometryTagError_1 = require("./error/GeometryTagError");
 exports.GeometryTagError = GeometryTagError_1.GeometryTagError;
@@ -25496,7 +25824,7 @@ exports.Alignment = Alignment_1.Alignment;
 var TagComponent_1 = require("./TagComponent");
 exports.TagComponent = TagComponent_1.TagComponent;
 
 var TagComponent_1 = require("./TagComponent");
 exports.TagComponent = TagComponent_1.TagComponent;
 
-},{"./TagComponent":277,"./error/GeometryTagError":283,"./geometry/PointGeometry":285,"./geometry/PolygonGeometry":286,"./geometry/RectGeometry":287,"./tag/Alignment":289,"./tag/OutlineTag":292,"./tag/SpotTag":295}],277:[function(require,module,exports){
+},{"./TagComponent":278,"./error/GeometryTagError":284,"./geometry/PointGeometry":286,"./geometry/PolygonGeometry":287,"./geometry/RectGeometry":288,"./tag/Alignment":290,"./tag/OutlineTag":293,"./tag/SpotTag":296}],278:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -26067,7 +26395,7 @@ Component_1.ComponentService.register(TagComponent);
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = TagComponent;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = TagComponent;
 
-},{"../../Component":224,"../../Geo":227,"../../Render":230,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/empty":39,"rxjs/add/observable/from":40,"rxjs/add/observable/merge":43,"rxjs/add/observable/of":44,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/concat":53,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/skip":74,"rxjs/add/operator/skipUntil":75,"rxjs/add/operator/startWith":77,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/take":79,"rxjs/add/operator/takeUntil":80,"rxjs/add/operator/withLatestFrom":82}],278:[function(require,module,exports){
+},{"../../Component":225,"../../Geo":228,"../../Render":231,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/empty":39,"rxjs/add/observable/from":40,"rxjs/add/observable/merge":43,"rxjs/add/observable/of":44,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/concat":53,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/skip":74,"rxjs/add/operator/skipUntil":75,"rxjs/add/operator/startWith":77,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/take":79,"rxjs/add/operator/takeUntil":80,"rxjs/add/operator/withLatestFrom":82}],279:[function(require,module,exports){
 "use strict";
 var Subject_1 = require("rxjs/Subject");
 require("rxjs/add/operator/map");
 "use strict";
 var Subject_1 = require("rxjs/Subject");
 require("rxjs/add/operator/map");
@@ -26157,7 +26485,7 @@ exports.TagCreator = TagCreator;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = TagCreator;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = TagCreator;
 
-},{"../../Component":224,"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/withLatestFrom":82}],279:[function(require,module,exports){
+},{"../../Component":225,"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/withLatestFrom":82}],280:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
@@ -26185,7 +26513,7 @@ var TagDOMRenderer = (function () {
 }());
 exports.TagDOMRenderer = TagDOMRenderer;
 
 }());
 exports.TagDOMRenderer = TagDOMRenderer;
 
-},{"three":174,"virtual-dom":180}],280:[function(require,module,exports){
+},{"three":175,"virtual-dom":181}],281:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
@@ -26278,7 +26606,7 @@ var TagGLRenderer = (function () {
 }());
 exports.TagGLRenderer = TagGLRenderer;
 
 }());
 exports.TagGLRenderer = TagGLRenderer;
 
-},{"three":174}],281:[function(require,module,exports){
+},{"three":175}],282:[function(require,module,exports){
 "use strict";
 var TagOperation;
 (function (TagOperation) {
 "use strict";
 var TagOperation;
 (function (TagOperation) {
@@ -26289,7 +26617,7 @@ var TagOperation;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = TagOperation;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = TagOperation;
 
-},{}],282:[function(require,module,exports){
+},{}],283:[function(require,module,exports){
 "use strict";
 var Subject_1 = require("rxjs/Subject");
 require("rxjs/add/operator/map");
 "use strict";
 var Subject_1 = require("rxjs/Subject");
 require("rxjs/add/operator/map");
@@ -26340,7 +26668,7 @@ exports.TagSet = TagSet;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = TagSet;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = TagSet;
 
-},{"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73}],283:[function(require,module,exports){
+},{"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73}],284:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -26361,7 +26689,7 @@ exports.GeometryTagError = GeometryTagError;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Error_1.MapillaryError;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Error_1.MapillaryError;
 
-},{"../../../Error":226}],284:[function(require,module,exports){
+},{"../../../Error":227}],285:[function(require,module,exports){
 "use strict";
 var Subject_1 = require("rxjs/Subject");
 /**
 "use strict";
 var Subject_1 = require("rxjs/Subject");
 /**
@@ -26399,7 +26727,7 @@ exports.Geometry = Geometry;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Geometry;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Geometry;
 
-},{"rxjs/Subject":33}],285:[function(require,module,exports){
+},{"rxjs/Subject":33}],286:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -26472,7 +26800,7 @@ var PointGeometry = (function (_super) {
 }(Component_1.Geometry));
 exports.PointGeometry = PointGeometry;
 
 }(Component_1.Geometry));
 exports.PointGeometry = PointGeometry;
 
-},{"../../../Component":224}],286:[function(require,module,exports){
+},{"../../../Component":225}],287:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -26705,7 +27033,7 @@ exports.PolygonGeometry = PolygonGeometry;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = PolygonGeometry;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = PolygonGeometry;
 
-},{"../../../Component":224}],287:[function(require,module,exports){
+},{"../../../Component":225}],288:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -27014,7 +27342,7 @@ exports.RectGeometry = RectGeometry;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = RectGeometry;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = RectGeometry;
 
-},{"../../../Component":224}],288:[function(require,module,exports){
+},{"../../../Component":225}],289:[function(require,module,exports){
 /// <reference path="../../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -27077,7 +27405,7 @@ exports.VertexGeometry = VertexGeometry;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = VertexGeometry;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = VertexGeometry;
 
-},{"../../../Component":224,"earcut":6}],289:[function(require,module,exports){
+},{"../../../Component":225,"earcut":6}],290:[function(require,module,exports){
 "use strict";
 var Alignment;
 (function (Alignment) {
 "use strict";
 var Alignment;
 (function (Alignment) {
@@ -27087,7 +27415,7 @@ var Alignment;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Alignment;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Alignment;
 
-},{}],290:[function(require,module,exports){
+},{}],291:[function(require,module,exports){
 /// <reference path="../../../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 /// <reference path="../../../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
@@ -27274,7 +27602,7 @@ exports.OutlineCreateTag = OutlineCreateTag;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = OutlineCreateTag;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = OutlineCreateTag;
 
-},{"../../../Component":224,"rxjs/Subject":33,"three":174,"virtual-dom":180}],291:[function(require,module,exports){
+},{"../../../Component":225,"rxjs/Subject":33,"three":175,"virtual-dom":181}],292:[function(require,module,exports){
 /// <reference path="../../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -27670,7 +27998,7 @@ var OutlineRenderTag = (function (_super) {
 }(Component_1.RenderTag));
 exports.OutlineRenderTag = OutlineRenderTag;
 
 }(Component_1.RenderTag));
 exports.OutlineRenderTag = OutlineRenderTag;
 
-},{"../../../Component":224,"../../../Viewer":234,"three":174,"virtual-dom":180}],292:[function(require,module,exports){
+},{"../../../Component":225,"../../../Viewer":235,"three":175,"virtual-dom":181}],293:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -28006,7 +28334,7 @@ exports.OutlineTag = OutlineTag;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = OutlineTag;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = OutlineTag;
 
-},{"../../../Component":224,"rxjs/Subject":33}],293:[function(require,module,exports){
+},{"../../../Component":225,"rxjs/Subject":33}],294:[function(require,module,exports){
 /// <reference path="../../../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 /// <reference path="../../../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
@@ -28065,7 +28393,7 @@ exports.RenderTag = RenderTag;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = RenderTag;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = RenderTag;
 
-},{"rxjs/Subject":33,"three":174}],294:[function(require,module,exports){
+},{"rxjs/Subject":33,"three":175}],295:[function(require,module,exports){
 /// <reference path="../../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -28173,7 +28501,7 @@ var SpotRenderTag = (function (_super) {
 }(Component_1.RenderTag));
 exports.SpotRenderTag = SpotRenderTag;
 
 }(Component_1.RenderTag));
 exports.SpotRenderTag = SpotRenderTag;
 
-},{"../../../Component":224,"../../../Viewer":234,"virtual-dom":180}],295:[function(require,module,exports){
+},{"../../../Component":225,"../../../Viewer":235,"virtual-dom":181}],296:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -28335,7 +28663,7 @@ exports.SpotTag = SpotTag;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = SpotTag;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = SpotTag;
 
-},{"../../../Component":224}],296:[function(require,module,exports){
+},{"../../../Component":225}],297:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -28445,7 +28773,7 @@ exports.Tag = Tag;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Tag;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Tag;
 
-},{"../../../Utils":233,"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/share":73}],297:[function(require,module,exports){
+},{"../../../Utils":234,"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/share":73}],298:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -28466,7 +28794,7 @@ exports.ArgumentMapillaryError = ArgumentMapillaryError;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ArgumentMapillaryError;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ArgumentMapillaryError;
 
-},{"./MapillaryError":299}],298:[function(require,module,exports){
+},{"./MapillaryError":300}],299:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -28487,7 +28815,7 @@ exports.GraphMapillaryError = GraphMapillaryError;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = GraphMapillaryError;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = GraphMapillaryError;
 
-},{"./MapillaryError":299}],299:[function(require,module,exports){
+},{"./MapillaryError":300}],300:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -28507,7 +28835,7 @@ exports.MapillaryError = MapillaryError;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = MapillaryError;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = MapillaryError;
 
-},{}],300:[function(require,module,exports){
+},{}],301:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
@@ -28656,7 +28984,7 @@ var Camera = (function () {
 }());
 exports.Camera = Camera;
 
 }());
 exports.Camera = Camera;
 
-},{"three":174}],301:[function(require,module,exports){
+},{"three":175}],302:[function(require,module,exports){
 "use strict";
 /**
  * @class GeoCoords
 "use strict";
 /**
  * @class GeoCoords
@@ -28880,7 +29208,7 @@ exports.GeoCoords = GeoCoords;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = GeoCoords;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = GeoCoords;
 
-},{}],302:[function(require,module,exports){
+},{}],303:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
@@ -29107,7 +29435,7 @@ exports.Spatial = Spatial;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Spatial;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Spatial;
 
-},{"three":174}],303:[function(require,module,exports){
+},{"three":175}],304:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
@@ -29283,6 +29611,17 @@ var Transform = (function () {
         enumerable: true,
         configurable: true
     });
         enumerable: true,
         configurable: true
     });
+    Object.defineProperty(Transform.prototype, "hasValidScale", {
+        /**
+         * Get has valid scale.
+         * @returns {boolean} Value indicating if the scale of the transform is valid.
+         */
+        get: function () {
+            return this._scale > 1e-2 && this._scale < 50;
+        },
+        enumerable: true,
+        configurable: true
+    });
     Object.defineProperty(Transform.prototype, "width", {
         /**
          * Get width.
     Object.defineProperty(Transform.prototype, "width", {
         /**
          * Get width.
@@ -29622,7 +29961,7 @@ var Transform = (function () {
 }());
 exports.Transform = Transform;
 
 }());
 exports.Transform = Transform;
 
-},{"three":174}],304:[function(require,module,exports){
+},{"three":175}],305:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
@@ -29947,7 +30286,7 @@ exports.ViewportCoords = ViewportCoords;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ViewportCoords;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ViewportCoords;
 
-},{"three":174}],305:[function(require,module,exports){
+},{"three":175}],306:[function(require,module,exports){
 "use strict";
 /**
  * @class Filter
 "use strict";
 /**
  * @class Filter
@@ -30035,7 +30374,7 @@ exports.FilterCreator = FilterCreator;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = FilterCreator;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = FilterCreator;
 
-},{}],306:[function(require,module,exports){
+},{}],307:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var rbush = require("rbush");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var rbush = require("rbush");
@@ -31035,7 +31374,7 @@ exports.Graph = Graph;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Graph;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Graph;
 
-},{"../Edge":225,"../Error":226,"../Graph":228,"rbush":24,"rxjs/Subject":33,"rxjs/add/observable/from":40,"rxjs/add/operator/catch":51,"rxjs/add/operator/do":58,"rxjs/add/operator/finally":61,"rxjs/add/operator/map":64,"rxjs/add/operator/publish":70}],307:[function(require,module,exports){
+},{"../Edge":226,"../Error":227,"../Graph":229,"rbush":24,"rxjs/Subject":33,"rxjs/add/observable/from":40,"rxjs/add/operator/catch":51,"rxjs/add/operator/do":58,"rxjs/add/operator/finally":61,"rxjs/add/operator/map":64,"rxjs/add/operator/publish":70}],308:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var geohash = require("latlon-geohash");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var geohash = require("latlon-geohash");
@@ -31197,7 +31536,7 @@ exports.GraphCalculator = GraphCalculator;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = GraphCalculator;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = GraphCalculator;
 
-},{"../Geo":227,"latlon-geohash":20,"three":174}],308:[function(require,module,exports){
+},{"../Geo":228,"latlon-geohash":20,"three":175}],309:[function(require,module,exports){
 "use strict";
 var Observable_1 = require("rxjs/Observable");
 var Subject_1 = require("rxjs/Subject");
 "use strict";
 var Observable_1 = require("rxjs/Observable");
 var Subject_1 = require("rxjs/Subject");
@@ -31502,7 +31841,7 @@ exports.GraphService = GraphService;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = GraphService;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = GraphService;
 
-},{"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/operator/catch":51,"rxjs/add/operator/concat":53,"rxjs/add/operator/do":58,"rxjs/add/operator/expand":59,"rxjs/add/operator/finally":61,"rxjs/add/operator/first":62,"rxjs/add/operator/last":63,"rxjs/add/operator/map":64,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/publishReplay":71}],309:[function(require,module,exports){
+},{"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/operator/catch":51,"rxjs/add/operator/concat":53,"rxjs/add/operator/do":58,"rxjs/add/operator/expand":59,"rxjs/add/operator/finally":61,"rxjs/add/operator/first":62,"rxjs/add/operator/last":63,"rxjs/add/operator/map":64,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/publishReplay":71}],310:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var Subject_1 = require("rxjs/Subject");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var Subject_1 = require("rxjs/Subject");
@@ -31536,7 +31875,7 @@ var ImageLoadingService = (function () {
 }());
 exports.ImageLoadingService = ImageLoadingService;
 
 }());
 exports.ImageLoadingService = ImageLoadingService;
 
-},{"rxjs/Subject":33}],310:[function(require,module,exports){
+},{"rxjs/Subject":33}],311:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var Pbf = require("pbf");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var Pbf = require("pbf");
@@ -31559,7 +31898,7 @@ var MeshReader = (function () {
 }());
 exports.MeshReader = MeshReader;
 
 }());
 exports.MeshReader = MeshReader;
 
-},{"pbf":22}],311:[function(require,module,exports){
+},{"pbf":22}],312:[function(require,module,exports){
 "use strict";
 require("rxjs/add/observable/combineLatest");
 require("rxjs/add/operator/map");
 "use strict";
 require("rxjs/add/observable/combineLatest");
 require("rxjs/add/operator/map");
@@ -32178,7 +32517,7 @@ exports.Node = Node;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Node;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Node;
 
-},{"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/map":64}],312:[function(require,module,exports){
+},{"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/map":64}],313:[function(require,module,exports){
 (function (Buffer){
 "use strict";
 var Subject_1 = require("rxjs/Subject");
 (function (Buffer){
 "use strict";
 var Subject_1 = require("rxjs/Subject");
@@ -32585,7 +32924,7 @@ exports.default = NodeCache;
 
 }).call(this,require("buffer").Buffer)
 
 
 }).call(this,require("buffer").Buffer)
 
-},{"../Graph":228,"../Utils":233,"buffer":5,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/publishReplay":71}],313:[function(require,module,exports){
+},{"../Graph":229,"../Utils":234,"buffer":5,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/publishReplay":71}],314:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var _ = require("underscore");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var _ = require("underscore");
@@ -32675,7 +33014,7 @@ exports.Sequence = Sequence;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Sequence;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Sequence;
 
-},{"underscore":175}],314:[function(require,module,exports){
+},{"underscore":176}],315:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
@@ -33260,7 +33599,7 @@ exports.EdgeCalculator = EdgeCalculator;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = EdgeCalculator;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = EdgeCalculator;
 
-},{"../../Edge":225,"../../Error":226,"../../Geo":227,"three":174}],315:[function(require,module,exports){
+},{"../../Edge":226,"../../Error":227,"../../Geo":228,"three":175}],316:[function(require,module,exports){
 "use strict";
 var EdgeCalculatorCoefficients = (function () {
     function EdgeCalculatorCoefficients() {
 "use strict";
 var EdgeCalculatorCoefficients = (function () {
     function EdgeCalculatorCoefficients() {
@@ -33286,7 +33625,7 @@ exports.EdgeCalculatorCoefficients = EdgeCalculatorCoefficients;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = EdgeCalculatorCoefficients;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = EdgeCalculatorCoefficients;
 
-},{}],316:[function(require,module,exports){
+},{}],317:[function(require,module,exports){
 "use strict";
 var Edge_1 = require("../../Edge");
 var EdgeCalculatorDirections = (function () {
 "use strict";
 var Edge_1 = require("../../Edge");
 var EdgeCalculatorDirections = (function () {
@@ -33358,7 +33697,7 @@ var EdgeCalculatorDirections = (function () {
 }());
 exports.EdgeCalculatorDirections = EdgeCalculatorDirections;
 
 }());
 exports.EdgeCalculatorDirections = EdgeCalculatorDirections;
 
-},{"../../Edge":225}],317:[function(require,module,exports){
+},{"../../Edge":226}],318:[function(require,module,exports){
 "use strict";
 var EdgeCalculatorSettings = (function () {
     function EdgeCalculatorSettings() {
 "use strict";
 var EdgeCalculatorSettings = (function () {
     function EdgeCalculatorSettings() {
@@ -33395,7 +33734,7 @@ exports.EdgeCalculatorSettings = EdgeCalculatorSettings;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = EdgeCalculatorSettings;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = EdgeCalculatorSettings;
 
-},{}],318:[function(require,module,exports){
+},{}],319:[function(require,module,exports){
 "use strict";
 /**
  * Enumeration for edge directions
 "use strict";
 /**
  * Enumeration for edge directions
@@ -33453,7 +33792,7 @@ var EdgeDirection;
 })(EdgeDirection = exports.EdgeDirection || (exports.EdgeDirection = {}));
 ;
 
 })(EdgeDirection = exports.EdgeDirection || (exports.EdgeDirection = {}));
 ;
 
-},{}],319:[function(require,module,exports){
+},{}],320:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var _ = require("underscore");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var _ = require("underscore");
@@ -33641,7 +33980,7 @@ exports.DOMRenderer = DOMRenderer;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = DOMRenderer;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = DOMRenderer;
 
-},{"../Render":230,"rxjs/Subject":33,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/pluck":69,"rxjs/add/operator/scan":72,"underscore":175,"virtual-dom":180}],320:[function(require,module,exports){
+},{"../Render":231,"rxjs/Subject":33,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/pluck":69,"rxjs/add/operator/scan":72,"underscore":176,"virtual-dom":181}],321:[function(require,module,exports){
 "use strict";
 var GLRenderStage;
 (function (GLRenderStage) {
 "use strict";
 var GLRenderStage;
 (function (GLRenderStage) {
@@ -33651,7 +33990,7 @@ var GLRenderStage;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = GLRenderStage;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = GLRenderStage;
 
-},{}],321:[function(require,module,exports){
+},{}],322:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
@@ -33899,14 +34238,14 @@ exports.GLRenderer = GLRenderer;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = GLRenderer;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = GLRenderer;
 
-},{"../Render":230,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/startWith":77,"three":174}],322:[function(require,module,exports){
+},{"../Render":231,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/startWith":77,"three":175}],323:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 var Geo_1 = require("../Geo");
 var Render_1 = require("../Render");
 var RenderCamera = (function () {
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 var Geo_1 = require("../Geo");
 var Render_1 = require("../Render");
 var RenderCamera = (function () {
-    function RenderCamera(perspectiveCameraAspect, renderMode) {
+    function RenderCamera(elementWidth, elementHeight, renderMode) {
         this.alpha = -1;
         this.zoom = 0;
         this._frameId = -1;
         this.alpha = -1;
         this.zoom = 0;
         this._frameId = -1;
@@ -33919,6 +34258,7 @@ var RenderCamera = (function () {
         this.renderMode = renderMode;
         this._spatial = new Geo_1.Spatial();
         this._camera = new Geo_1.Camera();
         this.renderMode = renderMode;
         this._spatial = new Geo_1.Spatial();
         this._camera = new Geo_1.Camera();
+        var perspectiveCameraAspect = this._getPerspectiveCameraAspect(elementWidth, elementHeight);
         this._perspective = new THREE.PerspectiveCamera(50, perspectiveCameraAspect, 0.4, 10000);
         this._perspective.matrixAutoUpdate = false;
         this._rotation = { phi: 0, theta: 0 };
         this._perspective = new THREE.PerspectiveCamera(50, perspectiveCameraAspect, 0.4, 10000);
         this._perspective.matrixAutoUpdate = false;
         this._rotation = { phi: 0, theta: 0 };
@@ -33965,6 +34305,11 @@ var RenderCamera = (function () {
         enumerable: true,
         configurable: true
     });
         enumerable: true,
         configurable: true
     });
+    RenderCamera.prototype.updateAspect = function (elementWidth, elementHeight) {
+        var perspectiveCameraAspect = this._getPerspectiveCameraAspect(elementWidth, elementHeight);
+        this._perspective.aspect = perspectiveCameraAspect;
+        this._changed = true;
+    };
     RenderCamera.prototype.updateProjection = function () {
         var currentAspect = this._getAspect(this.currentAspect, this.currentPano, this.perspective.aspect);
         var previousAspect = this._getAspect(this.previousAspect, this.previousPano, this.perspective.aspect);
     RenderCamera.prototype.updateProjection = function () {
         var currentAspect = this._getAspect(this.currentAspect, this.currentPano, this.perspective.aspect);
         var previousAspect = this._getAspect(this.previousAspect, this.previousPano, this.perspective.aspect);
@@ -34001,6 +34346,9 @@ var RenderCamera = (function () {
             coeff * nodeAspect;
         return aspect;
     };
             coeff * nodeAspect;
         return aspect;
     };
+    RenderCamera.prototype._getPerspectiveCameraAspect = function (elementWidth, elementHeight) {
+        return elementWidth === 0 ? 0 : elementWidth / elementHeight;
+    };
     RenderCamera.prototype._getRotation = function (camera) {
         var direction = camera.lookat.clone().sub(camera.position);
         var up = camera.up.clone();
     RenderCamera.prototype._getRotation = function (camera) {
         var direction = camera.lookat.clone().sub(camera.position);
         var up = camera.up.clone();
@@ -34016,7 +34364,7 @@ exports.RenderCamera = RenderCamera;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = RenderCamera;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = RenderCamera;
 
-},{"../Geo":227,"../Render":230,"three":174}],323:[function(require,module,exports){
+},{"../Geo":228,"../Render":231,"three":175}],324:[function(require,module,exports){
 "use strict";
 /**
  * Enumeration for render mode
 "use strict";
 /**
  * Enumeration for render mode
@@ -34052,7 +34400,7 @@ var RenderMode;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = RenderMode;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = RenderMode;
 
-},{}],324:[function(require,module,exports){
+},{}],325:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var Subject_1 = require("rxjs/Subject");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var Subject_1 = require("rxjs/Subject");
@@ -34094,7 +34442,7 @@ var RenderService = (function () {
         })
             .scan(function (rc, operation) {
             return operation(rc);
         })
             .scan(function (rc, operation) {
             return operation(rc);
-        }, new Render_1.RenderCamera(this._element.offsetWidth / this._element.offsetHeight, renderMode))
+        }, new Render_1.RenderCamera(this._element.offsetWidth, this._element.offsetHeight, renderMode))
             .publishReplay(1)
             .refCount();
         this._renderCameraFrame$ = this._currentFrame$
             .publishReplay(1)
             .refCount();
         this._renderCameraFrame$ = this._currentFrame$
@@ -34150,7 +34498,7 @@ var RenderService = (function () {
             .skip(1)
             .map(function (size) {
             return function (rc) {
             .skip(1)
             .map(function (size) {
             return function (rc) {
-                rc.perspective.aspect = size.width / size.height;
+                rc.updateAspect(size.width, size.height);
                 rc.updateProjection();
                 return rc;
             };
                 rc.updateProjection();
                 return rc;
             };
@@ -34228,7 +34576,7 @@ exports.RenderService = RenderService;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = RenderService;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = RenderService;
 
-},{"../Geo":227,"../Render":230,"rxjs/BehaviorSubject":25,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/skip":74,"rxjs/add/operator/startWith":77,"rxjs/add/operator/withLatestFrom":82}],325:[function(require,module,exports){
+},{"../Geo":228,"../Render":231,"rxjs/BehaviorSubject":25,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/skip":74,"rxjs/add/operator/startWith":77,"rxjs/add/operator/withLatestFrom":82}],326:[function(require,module,exports){
 "use strict";
 var State;
 (function (State) {
 "use strict";
 var State;
 (function (State) {
@@ -34238,7 +34586,7 @@ var State;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = State;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = State;
 
-},{}],326:[function(require,module,exports){
+},{}],327:[function(require,module,exports){
 "use strict";
 var State_1 = require("../State");
 var Geo_1 = require("../Geo");
 "use strict";
 var State_1 = require("../State");
 var Geo_1 = require("../Geo");
@@ -34428,7 +34776,7 @@ var StateContext = (function () {
 }());
 exports.StateContext = StateContext;
 
 }());
 exports.StateContext = StateContext;
 
-},{"../Geo":227,"../State":231}],327:[function(require,module,exports){
+},{"../Geo":228,"../State":232}],328:[function(require,module,exports){
 "use strict";
 var BehaviorSubject_1 = require("rxjs/BehaviorSubject");
 var Subject_1 = require("rxjs/Subject");
 "use strict";
 var BehaviorSubject_1 = require("rxjs/BehaviorSubject");
 var Subject_1 = require("rxjs/Subject");
@@ -34827,7 +35175,7 @@ var StateService = (function () {
 }());
 exports.StateService = StateService;
 
 }());
 exports.StateService = StateService;
 
-},{"../State":231,"rxjs/BehaviorSubject":25,"rxjs/Subject":33,"rxjs/add/operator/bufferCount":49,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/pairwise":68,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/withLatestFrom":82,"rxjs/util/AnimationFrame":155}],328:[function(require,module,exports){
+},{"../State":232,"rxjs/BehaviorSubject":25,"rxjs/Subject":33,"rxjs/add/operator/bufferCount":49,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/pairwise":68,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/withLatestFrom":82,"rxjs/util/AnimationFrame":156}],329:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var Error_1 = require("../../Error");
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var Error_1 = require("../../Error");
@@ -35140,7 +35488,7 @@ var StateBase = (function () {
 }());
 exports.StateBase = StateBase;
 
 }());
 exports.StateBase = StateBase;
 
-},{"../../Error":226,"../../Geo":227}],329:[function(require,module,exports){
+},{"../../Error":227,"../../Geo":228}],330:[function(require,module,exports){
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -35665,7 +36013,7 @@ var TraversingState = (function (_super) {
 }(State_1.StateBase));
 exports.TraversingState = TraversingState;
 
 }(State_1.StateBase));
 exports.TraversingState = TraversingState;
 
-},{"../../State":231,"three":174,"unitbezier":176}],330:[function(require,module,exports){
+},{"../../State":232,"three":175,"unitbezier":177}],331:[function(require,module,exports){
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
     for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -35736,7 +36084,7 @@ var WaitingState = (function (_super) {
 }(State_1.StateBase));
 exports.WaitingState = WaitingState;
 
 }(State_1.StateBase));
 exports.WaitingState = WaitingState;
 
-},{"../../State":231}],331:[function(require,module,exports){
+},{"../../State":232}],332:[function(require,module,exports){
 "use strict";
 var Observable_1 = require("rxjs/Observable");
 /**
 "use strict";
 var Observable_1 = require("rxjs/Observable");
 /**
@@ -35828,7 +36176,7 @@ exports.ImageTileLoader = ImageTileLoader;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ImageTileLoader;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ImageTileLoader;
 
-},{"rxjs/Observable":28}],332:[function(require,module,exports){
+},{"rxjs/Observable":28}],333:[function(require,module,exports){
 "use strict";
 /**
  * @class ImageTileStore
 "use strict";
 /**
  * @class ImageTileStore
@@ -35896,7 +36244,7 @@ exports.ImageTileStore = ImageTileStore;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ImageTileStore;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = ImageTileStore;
 
-},{}],333:[function(require,module,exports){
+},{}],334:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var Geo_1 = require("../Geo");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var Geo_1 = require("../Geo");
@@ -36037,7 +36385,7 @@ exports.RegionOfInterestCalculator = RegionOfInterestCalculator;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = RegionOfInterestCalculator;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = RegionOfInterestCalculator;
 
-},{"../Geo":227}],334:[function(require,module,exports){
+},{"../Geo":228}],335:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
@@ -36514,7 +36862,7 @@ exports.TextureProvider = TextureProvider;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = TextureProvider;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = TextureProvider;
 
-},{"rxjs/Subject":33,"three":174}],335:[function(require,module,exports){
+},{"rxjs/Subject":33,"three":175}],336:[function(require,module,exports){
 "use strict";
 var EventEmitter = (function () {
     function EventEmitter() {
 "use strict";
 var EventEmitter = (function () {
     function EventEmitter() {
@@ -36573,7 +36921,7 @@ exports.EventEmitter = EventEmitter;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = EventEmitter;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = EventEmitter;
 
-},{}],336:[function(require,module,exports){
+},{}],337:[function(require,module,exports){
 "use strict";
 var Viewer_1 = require("../Viewer");
 var Settings = (function () {
 "use strict";
 var Viewer_1 = require("../Viewer");
 var Settings = (function () {
@@ -36617,7 +36965,7 @@ exports.Settings = Settings;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Settings;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Settings;
 
-},{"../Viewer":234}],337:[function(require,module,exports){
+},{"../Viewer":235}],338:[function(require,module,exports){
 "use strict";
 var Urls = (function () {
     function Urls() {
 "use strict";
 var Urls = (function () {
     function Urls() {
@@ -36658,7 +37006,7 @@ exports.Urls = Urls;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Urls;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Urls;
 
-},{}],338:[function(require,module,exports){
+},{}],339:[function(require,module,exports){
 "use strict";
 require("rxjs/add/operator/bufferCount");
 require("rxjs/add/operator/delay");
 "use strict";
 require("rxjs/add/operator/bufferCount");
 require("rxjs/add/operator/delay");
@@ -36715,7 +37063,7 @@ exports.CacheService = CacheService;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = CacheService;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = CacheService;
 
-},{"rxjs/add/operator/bufferCount":49,"rxjs/add/operator/delay":55,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"rxjs/add/operator/switchMap":78}],339:[function(require,module,exports){
+},{"rxjs/add/operator/bufferCount":49,"rxjs/add/operator/delay":55,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"rxjs/add/operator/switchMap":78}],340:[function(require,module,exports){
 "use strict";
 var Component_1 = require("../Component");
 var ComponentController = (function () {
 "use strict";
 var Component_1 = require("../Component");
 var ComponentController = (function () {
@@ -36864,7 +37212,7 @@ var ComponentController = (function () {
 }());
 exports.ComponentController = ComponentController;
 
 }());
 exports.ComponentController = ComponentController;
 
-},{"../Component":224}],340:[function(require,module,exports){
+},{"../Component":225}],341:[function(require,module,exports){
 "use strict";
 var Render_1 = require("../Render");
 var Viewer_1 = require("../Viewer");
 "use strict";
 var Render_1 = require("../Render");
 var Viewer_1 = require("../Viewer");
@@ -36903,7 +37251,7 @@ exports.Container = Container;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Container;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Container;
 
-},{"../Render":230,"../Viewer":234}],341:[function(require,module,exports){
+},{"../Render":231,"../Viewer":235}],342:[function(require,module,exports){
 "use strict";
 /**
  * Enumeration for image sizes
 "use strict";
 /**
  * Enumeration for image sizes
@@ -36931,7 +37279,7 @@ var ImageSize;
     ImageSize[ImageSize["Size2048"] = 2048] = "Size2048";
 })(ImageSize = exports.ImageSize || (exports.ImageSize = {}));
 
     ImageSize[ImageSize["Size2048"] = 2048] = "Size2048";
 })(ImageSize = exports.ImageSize || (exports.ImageSize = {}));
 
-},{}],342:[function(require,module,exports){
+},{}],343:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var _ = require("underscore");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var _ = require("underscore");
@@ -36990,7 +37338,7 @@ exports.LoadingService = LoadingService;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = LoadingService;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = LoadingService;
 
-},{"rxjs/Subject":33,"rxjs/add/operator/debounceTime":54,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77,"underscore":175}],343:[function(require,module,exports){
+},{"rxjs/Subject":33,"rxjs/add/operator/debounceTime":54,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77,"underscore":176}],344:[function(require,module,exports){
 "use strict";
 var BehaviorSubject_1 = require("rxjs/BehaviorSubject");
 var Observable_1 = require("rxjs/Observable");
 "use strict";
 var BehaviorSubject_1 = require("rxjs/BehaviorSubject");
 var Observable_1 = require("rxjs/Observable");
@@ -37342,7 +37690,7 @@ exports.MouseService = MouseService;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = MouseService;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = MouseService;
 
-},{"../Geo":227,"rxjs/BehaviorSubject":25,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/fromEvent":41,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/withLatestFrom":82}],344:[function(require,module,exports){
+},{"../Geo":228,"rxjs/BehaviorSubject":25,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/fromEvent":41,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/withLatestFrom":82}],345:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var BehaviorSubject_1 = require("rxjs/BehaviorSubject");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var BehaviorSubject_1 = require("rxjs/BehaviorSubject");
@@ -37570,7 +37918,7 @@ exports.Navigator = Navigator;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Navigator;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Navigator;
 
-},{"../API":223,"../Edge":225,"../Graph":228,"../State":231,"../Viewer":234,"rxjs/BehaviorSubject":25,"rxjs/Observable":28,"rxjs/add/observable/throw":45,"rxjs/add/operator/do":58,"rxjs/add/operator/finally":61,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/mergeMap":67}],345:[function(require,module,exports){
+},{"../API":224,"../Edge":226,"../Graph":229,"../State":232,"../Viewer":235,"rxjs/BehaviorSubject":25,"rxjs/Observable":28,"rxjs/add/observable/throw":45,"rxjs/add/operator/do":58,"rxjs/add/operator/finally":61,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/mergeMap":67}],346:[function(require,module,exports){
 "use strict";
 var Observable_1 = require("rxjs/Observable");
 require("rxjs/add/observable/combineLatest");
 "use strict";
 var Observable_1 = require("rxjs/Observable");
 require("rxjs/add/observable/combineLatest");
@@ -37580,11 +37928,17 @@ require("rxjs/add/operator/throttleTime");
 var Viewer_1 = require("../Viewer");
 var Observer = (function () {
     function Observer(eventEmitter, navigator, container) {
 var Viewer_1 = require("../Viewer");
 var Observer = (function () {
     function Observer(eventEmitter, navigator, container) {
+        var _this = this;
         this._container = container;
         this._eventEmitter = eventEmitter;
         this._navigator = navigator;
         this._projection = new Viewer_1.Projection();
         this._started = false;
         this._container = container;
         this._eventEmitter = eventEmitter;
         this._navigator = navigator;
         this._projection = new Viewer_1.Projection();
         this._started = false;
+        // loading should always emit, also when cover is activated
+        this._navigator.loadingService.loading$
+            .subscribe(function (loading) {
+            _this._eventEmitter.fire(Viewer_1.Viewer.loadingchanged, loading);
+        });
     }
     Object.defineProperty(Observer.prototype, "started", {
         get: function () {
     }
     Object.defineProperty(Observer.prototype, "started", {
         get: function () {
@@ -37599,10 +37953,6 @@ var Observer = (function () {
             return;
         }
         this._started = true;
             return;
         }
         this._started = true;
-        this._loadingSubscription = this._navigator.loadingService.loading$
-            .subscribe(function (loading) {
-            _this._eventEmitter.fire(Viewer_1.Viewer.loadingchanged, loading);
-        });
         this._currentNodeSubscription = this._navigator.stateService.currentNodeExternal$
             .subscribe(function (node) {
             _this._eventEmitter.fire(Viewer_1.Viewer.nodechanged, node);
         this._currentNodeSubscription = this._navigator.stateService.currentNodeExternal$
             .subscribe(function (node) {
             _this._eventEmitter.fire(Viewer_1.Viewer.nodechanged, node);
@@ -37674,14 +38024,12 @@ var Observer = (function () {
         }
         this._started = false;
         this._bearingSubscription.unsubscribe();
         }
         this._started = false;
         this._bearingSubscription.unsubscribe();
-        this._loadingSubscription.unsubscribe();
         this._currentNodeSubscription.unsubscribe();
         this._moveSubscription.unsubscribe();
         this._sequenceEdgesSubscription.unsubscribe();
         this._spatialEdgesSubscription.unsubscribe();
         this._viewerMouseEventSubscription.unsubscribe();
         this._bearingSubscription = null;
         this._currentNodeSubscription.unsubscribe();
         this._moveSubscription.unsubscribe();
         this._sequenceEdgesSubscription.unsubscribe();
         this._spatialEdgesSubscription.unsubscribe();
         this._viewerMouseEventSubscription.unsubscribe();
         this._bearingSubscription = null;
-        this._loadingSubscription = null;
         this._currentNodeSubscription = null;
         this._moveSubscription = null;
         this._sequenceEdgesSubscription = null;
         this._currentNodeSubscription = null;
         this._moveSubscription = null;
         this._sequenceEdgesSubscription = null;
@@ -37710,7 +38058,7 @@ exports.Observer = Observer;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Observer;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Observer;
 
-},{"../Viewer":234,"rxjs/Observable":28,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"rxjs/add/operator/throttleTime":81}],346:[function(require,module,exports){
+},{"../Viewer":235,"rxjs/Observable":28,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"rxjs/add/operator/throttleTime":81}],347:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
@@ -37757,7 +38105,7 @@ exports.Projection = Projection;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Projection;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = Projection;
 
-},{"../Geo":227,"three":174}],347:[function(require,module,exports){
+},{"../Geo":228,"three":175}],348:[function(require,module,exports){
 "use strict";
 var SpriteAlignment;
 (function (SpriteAlignment) {
 "use strict";
 var SpriteAlignment;
 (function (SpriteAlignment) {
@@ -37768,7 +38116,7 @@ var SpriteAlignment;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = SpriteAlignment;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = SpriteAlignment;
 
-},{}],348:[function(require,module,exports){
+},{}],349:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var THREE = require("three");
@@ -37960,7 +38308,7 @@ exports.SpriteService = SpriteService;
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = SpriteService;
 
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.default = SpriteService;
 
-},{"../Viewer":234,"rxjs/Subject":33,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77,"three":174,"virtual-dom":180}],349:[function(require,module,exports){
+},{"../Viewer":235,"rxjs/Subject":33,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77,"three":175,"virtual-dom":181}],350:[function(require,module,exports){
 "use strict";
 var BehaviorSubject_1 = require("rxjs/BehaviorSubject");
 var Observable_1 = require("rxjs/Observable");
 "use strict";
 var BehaviorSubject_1 = require("rxjs/BehaviorSubject");
 var Observable_1 = require("rxjs/Observable");
@@ -38229,7 +38577,7 @@ var TouchService = (function () {
 }());
 exports.TouchService = TouchService;
 
 }());
 exports.TouchService = TouchService;
 
-},{"rxjs/BehaviorSubject":25,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/timer":46,"rxjs/add/operator/bufferWhen":50,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/scan":72,"rxjs/add/operator/switchMap":78}],350:[function(require,module,exports){
+},{"rxjs/BehaviorSubject":25,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/timer":46,"rxjs/add/operator/bufferWhen":50,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/scan":72,"rxjs/add/operator/switchMap":78}],351:[function(require,module,exports){
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
 /// <reference path="../../typings/index.d.ts" />
 "use strict";
 var __extends = (this && this.__extends) || function (d, b) {
@@ -38775,6 +39123,6 @@ Viewer.sequenceedgeschanged = "sequenceedgeschanged";
 Viewer.spatialedgeschanged = "spatialedgeschanged";
 exports.Viewer = Viewer;
 
 Viewer.spatialedgeschanged = "spatialedgeschanged";
 exports.Viewer = Viewer;
 
-},{"../Utils":233,"../Viewer":234,"when":221}]},{},[229])(229)
+},{"../Utils":234,"../Viewer":235,"when":222}]},{},[230])(230)
 });
 //# sourceMappingURL=mapillary.js.map
 });
 //# sourceMappingURL=mapillary.js.map
index ae1330388861cfd12709f4743c7d28e43b4c1da3..b9de102709c35dd954375b1f62ce529743a09ab7 100644 (file)
     "node_modules/rxjs/operator/switchMap.js",
     "node_modules/rxjs/operator/take.js",
     "node_modules/rxjs/operator/takeUntil.js",
     "node_modules/rxjs/operator/switchMap.js",
     "node_modules/rxjs/operator/take.js",
     "node_modules/rxjs/operator/takeUntil.js",
+    "node_modules/rxjs/operator/throttle.js",
     "node_modules/rxjs/operator/throttleTime.js",
     "node_modules/rxjs/operator/withLatestFrom.js",
     "node_modules/rxjs/operator/zip.js",
     "node_modules/rxjs/operator/throttleTime.js",
     "node_modules/rxjs/operator/withLatestFrom.js",
     "node_modules/rxjs/operator/zip.js",
     "src/viewer/Viewer.ts"
   ],
   "names": [],
     "src/viewer/Viewer.ts"
   ],
   "names": [],
-  "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClHA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACpLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7vDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC7NA;AACA;AACA;AACA;AACA;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACpPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1mBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChMA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvIA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;;ACHA;AACA;AACA;;ACFA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC71BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5gDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzGA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3aA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC37BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACRA,qCAAkC;AAA1B,wBAAA,KAAK,CAAA;AACb,mDAAgD;AAAxC,sCAAA,YAAY,CAAA;;;;ACDpB,mDAAgD;AAAxC,gCAAA,SAAS,CAAA;AACjB,iEAA8D;AAAtD,8CAAA,gBAAgB,CAAA;AACxB,yEAAsE;AAA9D,s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",
+  "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClHA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACxLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC7vDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC7NA;AACA;AACA;AACA;AACA;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACpPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AChOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1mBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChMA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvIA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;;ACHA;AACA;AACA;;ACFA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC71BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5gDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzGA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3aA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC37BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpOA;AACA;AACA;AACA;AACA;AACA;A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",
   "file": "generated.js",
   "sourceRoot": "",
   "sourcesContent": [
   "file": "generated.js",
   "sourceRoot": "",
   "sourcesContent": [
     "'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction placeHoldersCount (b64) {\n  var len = b64.length\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // the number of equal signs (place holders)\n  // if there are two placeholders, than the two characters before it\n  // represent one byte\n  // if there is only one, then the three characters before it represent 2 bytes\n  // this is just a cheap hack to not do indexOf twice\n  return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n  // base64 is 4/3 + up to two characters of the original data\n  return b64.length * 3 / 4 - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n  var i, j, l, tmp, placeHolders, arr\n  var len = b64.length\n  placeHolders = placeHoldersCount(b64)\n\n  arr = new Arr(len * 3 / 4 - placeHolders)\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  l = placeHolders > 0 ? len - 4 : len\n\n  var L = 0\n\n  for (i = 0, j = 0; i < l; i += 4, j += 3) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n    arr[L++] = (tmp >> 16) & 0xFF\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  if (placeHolders === 2) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[L++] = tmp & 0xFF\n  } else if (placeHolders === 1) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var output = ''\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    output += lookup[tmp >> 2]\n    output += lookup[(tmp << 4) & 0x3F]\n    output += '=='\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n    output += lookup[tmp >> 10]\n    output += lookup[(tmp >> 4) & 0x3F]\n    output += lookup[(tmp << 2) & 0x3F]\n    output += '='\n  }\n\n  parts.push(output)\n\n  return parts.join('')\n}\n",
     "",
     "/*!\n * Cross-Browser Split 1.1.1\n * Copyright 2007-2012 Steven Levithan <stevenlevithan.com>\n * Available under the MIT License\n * ECMAScript compliant, uniform cross-browser split method\n */\n\n/**\n * Splits a string into an array of strings using a regex or string separator. Matches of the\n * separator are not included in the result array. However, if `separator` is a regex that contains\n * capturing groups, backreferences are spliced into the result each time `separator` is matched.\n * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably\n * cross-browser.\n * @param {String} str String to split.\n * @param {RegExp|String} separator Regex or string to use for separating the string.\n * @param {Number} [limit] Maximum number of items to include in the result array.\n * @returns {Array} Array of substrings.\n * @example\n *\n * // Basic use\n * split('a b c d', ' ');\n * // -> ['a', 'b', 'c', 'd']\n *\n * // With limit\n * split('a b c d', ' ', 2);\n * // -> ['a', 'b']\n *\n * // Backreferences in result array\n * split('..word1 word2..', /([a-z]+)(\\d+)/i);\n * // -> ['..', 'word', '1', ' ', 'word', '2', '..']\n */\nmodule.exports = (function split(undef) {\n\n  var nativeSplit = String.prototype.split,\n    compliantExecNpcg = /()??/.exec(\"\")[1] === undef,\n    // NPCG: nonparticipating capturing group\n    self;\n\n  self = function(str, separator, limit) {\n    // If `separator` is not a regex, use `nativeSplit`\n    if (Object.prototype.toString.call(separator) !== \"[object RegExp]\") {\n      return nativeSplit.call(str, separator, limit);\n    }\n    var output = [],\n      flags = (separator.ignoreCase ? \"i\" : \"\") + (separator.multiline ? \"m\" : \"\") + (separator.extended ? \"x\" : \"\") + // Proposed for ES6\n      (separator.sticky ? \"y\" : \"\"),\n      // Firefox 3+\n      lastLastIndex = 0,\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      separator = new RegExp(separator.source, flags + \"g\"),\n      separator2, match, lastIndex, lastLength;\n    str += \"\"; // Type-convert\n    if (!compliantExecNpcg) {\n      // Doesn't need flags gy, but they don't hurt\n      separator2 = new RegExp(\"^\" + separator.source + \"$(?!\\\\s)\", flags);\n    }\n    /* Values for `limit`, per the spec:\n     * If undefined: 4294967295 // Math.pow(2, 32) - 1\n     * If 0, Infinity, or NaN: 0\n     * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;\n     * If negative number: 4294967296 - Math.floor(Math.abs(limit))\n     * If other: Type-convert, then use the above rules\n     */\n    limit = limit === undef ? -1 >>> 0 : // Math.pow(2, 32) - 1\n    limit >>> 0; // ToUint32(limit)\n    while (match = separator.exec(str)) {\n      // `separator.lastIndex` is not reliable cross-browser\n      lastIndex = match.index + match[0].length;\n      if (lastIndex > lastLastIndex) {\n        output.push(str.slice(lastLastIndex, match.index));\n        // Fix browsers whose `exec` methods don't consistently return `undefined` for\n        // nonparticipating capturing groups\n        if (!compliantExecNpcg && match.length > 1) {\n          match[0].replace(separator2, function() {\n            for (var i = 1; i < arguments.length - 2; i++) {\n              if (arguments[i] === undef) {\n                match[i] = undef;\n              }\n            }\n          });\n        }\n        if (match.length > 1 && match.index < str.length) {\n          Array.prototype.push.apply(output, match.slice(1));\n        }\n        lastLength = match[0].length;\n        lastLastIndex = lastIndex;\n        if (output.length >= limit) {\n          break;\n        }\n      }\n      if (separator.lastIndex === match.index) {\n        separator.lastIndex++; // Avoid an infinite loop\n      }\n    }\n    if (lastLastIndex === str.length) {\n      if (lastLength || !separator.test(\"\")) {\n        output.push(\"\");\n      }\n    } else {\n      output.push(str.slice(lastLastIndex));\n    }\n    return output.length > limit ? output.slice(0, limit) : output;\n  };\n\n  return self;\n})();\n",
     "'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction placeHoldersCount (b64) {\n  var len = b64.length\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // the number of equal signs (place holders)\n  // if there are two placeholders, than the two characters before it\n  // represent one byte\n  // if there is only one, then the three characters before it represent 2 bytes\n  // this is just a cheap hack to not do indexOf twice\n  return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n  // base64 is 4/3 + up to two characters of the original data\n  return b64.length * 3 / 4 - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n  var i, j, l, tmp, placeHolders, arr\n  var len = b64.length\n  placeHolders = placeHoldersCount(b64)\n\n  arr = new Arr(len * 3 / 4 - placeHolders)\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  l = placeHolders > 0 ? len - 4 : len\n\n  var L = 0\n\n  for (i = 0, j = 0; i < l; i += 4, j += 3) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n    arr[L++] = (tmp >> 16) & 0xFF\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  if (placeHolders === 2) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[L++] = tmp & 0xFF\n  } else if (placeHolders === 1) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var output = ''\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    output += lookup[tmp >> 2]\n    output += lookup[(tmp << 4) & 0x3F]\n    output += '=='\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n    output += lookup[tmp >> 10]\n    output += lookup[(tmp >> 4) & 0x3F]\n    output += lookup[(tmp << 2) & 0x3F]\n    output += '='\n  }\n\n  parts.push(output)\n\n  return parts.join('')\n}\n",
     "",
     "/*!\n * Cross-Browser Split 1.1.1\n * Copyright 2007-2012 Steven Levithan <stevenlevithan.com>\n * Available under the MIT License\n * ECMAScript compliant, uniform cross-browser split method\n */\n\n/**\n * Splits a string into an array of strings using a regex or string separator. Matches of the\n * separator are not included in the result array. However, if `separator` is a regex that contains\n * capturing groups, backreferences are spliced into the result each time `separator` is matched.\n * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably\n * cross-browser.\n * @param {String} str String to split.\n * @param {RegExp|String} separator Regex or string to use for separating the string.\n * @param {Number} [limit] Maximum number of items to include in the result array.\n * @returns {Array} Array of substrings.\n * @example\n *\n * // Basic use\n * split('a b c d', ' ');\n * // -> ['a', 'b', 'c', 'd']\n *\n * // With limit\n * split('a b c d', ' ', 2);\n * // -> ['a', 'b']\n *\n * // Backreferences in result array\n * split('..word1 word2..', /([a-z]+)(\\d+)/i);\n * // -> ['..', 'word', '1', ' ', 'word', '2', '..']\n */\nmodule.exports = (function split(undef) {\n\n  var nativeSplit = String.prototype.split,\n    compliantExecNpcg = /()??/.exec(\"\")[1] === undef,\n    // NPCG: nonparticipating capturing group\n    self;\n\n  self = function(str, separator, limit) {\n    // If `separator` is not a regex, use `nativeSplit`\n    if (Object.prototype.toString.call(separator) !== \"[object RegExp]\") {\n      return nativeSplit.call(str, separator, limit);\n    }\n    var output = [],\n      flags = (separator.ignoreCase ? \"i\" : \"\") + (separator.multiline ? \"m\" : \"\") + (separator.extended ? \"x\" : \"\") + // Proposed for ES6\n      (separator.sticky ? \"y\" : \"\"),\n      // Firefox 3+\n      lastLastIndex = 0,\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      separator = new RegExp(separator.source, flags + \"g\"),\n      separator2, match, lastIndex, lastLength;\n    str += \"\"; // Type-convert\n    if (!compliantExecNpcg) {\n      // Doesn't need flags gy, but they don't hurt\n      separator2 = new RegExp(\"^\" + separator.source + \"$(?!\\\\s)\", flags);\n    }\n    /* Values for `limit`, per the spec:\n     * If undefined: 4294967295 // Math.pow(2, 32) - 1\n     * If 0, Infinity, or NaN: 0\n     * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;\n     * If negative number: 4294967296 - Math.floor(Math.abs(limit))\n     * If other: Type-convert, then use the above rules\n     */\n    limit = limit === undef ? -1 >>> 0 : // Math.pow(2, 32) - 1\n    limit >>> 0; // ToUint32(limit)\n    while (match = separator.exec(str)) {\n      // `separator.lastIndex` is not reliable cross-browser\n      lastIndex = match.index + match[0].length;\n      if (lastIndex > lastLastIndex) {\n        output.push(str.slice(lastLastIndex, match.index));\n        // Fix browsers whose `exec` methods don't consistently return `undefined` for\n        // nonparticipating capturing groups\n        if (!compliantExecNpcg && match.length > 1) {\n          match[0].replace(separator2, function() {\n            for (var i = 1; i < arguments.length - 2; i++) {\n              if (arguments[i] === undef) {\n                match[i] = undef;\n              }\n            }\n          });\n        }\n        if (match.length > 1 && match.index < str.length) {\n          Array.prototype.push.apply(output, match.slice(1));\n        }\n        lastLength = match[0].length;\n        lastLastIndex = lastIndex;\n        if (output.length >= limit) {\n          break;\n        }\n      }\n      if (separator.lastIndex === match.index) {\n        separator.lastIndex++; // Avoid an infinite loop\n      }\n    }\n    if (lastLastIndex === str.length) {\n      if (lastLength || !separator.test(\"\")) {\n        output.push(\"\");\n      }\n    } else {\n      output.push(str.slice(lastLastIndex));\n    }\n    return output.length > limit ? output.slice(0, limit) : output;\n  };\n\n  return self;\n})();\n",
-    "// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n",
+    "// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n",
     "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n",
     "'use strict';\n\nmodule.exports = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n    dim = dim || 2;\n\n    var hasHoles = holeIndices && holeIndices.length,\n        outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n        outerNode = linkedList(data, 0, outerLen, dim, true),\n        triangles = [];\n\n    if (!outerNode) return triangles;\n\n    var minX, minY, maxX, maxY, x, y, size;\n\n    if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n    // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n    if (data.length > 80 * dim) {\n        minX = maxX = data[0];\n        minY = maxY = data[1];\n\n        for (var i = dim; i < outerLen; i += dim) {\n            x = data[i];\n            y = data[i + 1];\n            if (x < minX) minX = x;\n            if (y < minY) minY = y;\n            if (x > maxX) maxX = x;\n            if (y > maxY) maxY = y;\n        }\n\n        // minX, minY and size are later used to transform coords into integers for z-order calculation\n        size = Math.max(maxX - minX, maxY - minY);\n    }\n\n    earcutLinked(outerNode, triangles, dim, minX, minY, size);\n\n    return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n    var i, last;\n\n    if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n        for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n    } else {\n        for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n    }\n\n    if (last && equals(last, last.next)) {\n        removeNode(last);\n        last = last.next;\n    }\n\n    return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n    if (!start) return start;\n    if (!end) end = start;\n\n    var p = start,\n        again;\n    do {\n        again = false;\n\n        if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n            removeNode(p);\n            p = end = p.prev;\n            if (p === p.next) return null;\n            again = true;\n\n        } else {\n            p = p.next;\n        }\n    } while (again || p !== end);\n\n    return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, size, pass) {\n    if (!ear) return;\n\n    // interlink polygon nodes in z-order\n    if (!pass && size) indexCurve(ear, minX, minY, size);\n\n    var stop = ear,\n        prev, next;\n\n    // iterate through ears, slicing them one by one\n    while (ear.prev !== ear.next) {\n        prev = ear.prev;\n        next = ear.next;\n\n        if (size ? isEarHashed(ear, minX, minY, size) : isEar(ear)) {\n            // cut off the triangle\n            triangles.push(prev.i / dim);\n            triangles.push(ear.i / dim);\n            triangles.push(next.i / dim);\n\n            removeNode(ear);\n\n            // skipping the next vertice leads to less sliver triangles\n            ear = next.next;\n            stop = next.next;\n\n            continue;\n        }\n\n        ear = next;\n\n        // if we looped through the whole remaining polygon and can't find any more ears\n        if (ear === stop) {\n            // try filtering points and slicing again\n            if (!pass) {\n                earcutLinked(filterPoints(ear), triangles, dim, minX, minY, size, 1);\n\n            // if this didn't work, try curing all small self-intersections locally\n            } else if (pass === 1) {\n                ear = cureLocalIntersections(ear, triangles, dim);\n                earcutLinked(ear, triangles, dim, minX, minY, size, 2);\n\n            // as a last resort, try splitting the remaining polygon into two\n            } else if (pass === 2) {\n                splitEarcut(ear, triangles, dim, minX, minY, size);\n            }\n\n            break;\n        }\n    }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n    var a = ear.prev,\n        b = ear,\n        c = ear.next;\n\n    if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n    // now make sure we don't have other points inside the potential ear\n    var p = ear.next.next;\n\n    while (p !== ear.prev) {\n        if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n            area(p.prev, p, p.next) >= 0) return false;\n        p = p.next;\n    }\n\n    return true;\n}\n\nfunction isEarHashed(ear, minX, minY, size) {\n    var a = ear.prev,\n        b = ear,\n        c = ear.next;\n\n    if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n    // triangle bbox; min & max are calculated like this for speed\n    var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),\n        minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),\n        maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),\n        maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);\n\n    // z-order range for the current triangle bbox;\n    var minZ = zOrder(minTX, minTY, minX, minY, size),\n        maxZ = zOrder(maxTX, maxTY, minX, minY, size);\n\n    // first look for points inside the triangle in increasing z-order\n    var p = ear.nextZ;\n\n    while (p && p.z <= maxZ) {\n        if (p !== ear.prev && p !== ear.next &&\n            pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n            area(p.prev, p, p.next) >= 0) return false;\n        p = p.nextZ;\n    }\n\n    // then look for points in decreasing z-order\n    p = ear.prevZ;\n\n    while (p && p.z >= minZ) {\n        if (p !== ear.prev && p !== ear.next &&\n            pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n            area(p.prev, p, p.next) >= 0) return false;\n        p = p.prevZ;\n    }\n\n    return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n    var p = start;\n    do {\n        var a = p.prev,\n            b = p.next.next;\n\n        if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n            triangles.push(a.i / dim);\n            triangles.push(p.i / dim);\n            triangles.push(b.i / dim);\n\n            // remove two nodes involved\n            removeNode(p);\n            removeNode(p.next);\n\n            p = start = b;\n        }\n        p = p.next;\n    } while (p !== start);\n\n    return p;\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, size) {\n    // look for a valid diagonal that divides the polygon into two\n    var a = start;\n    do {\n        var b = a.next.next;\n        while (b !== a.prev) {\n            if (a.i !== b.i && isValidDiagonal(a, b)) {\n                // split the polygon in two by the diagonal\n                var c = splitPolygon(a, b);\n\n                // filter colinear points around the cuts\n                a = filterPoints(a, a.next);\n                c = filterPoints(c, c.next);\n\n                // run earcut on each half\n                earcutLinked(a, triangles, dim, minX, minY, size);\n                earcutLinked(c, triangles, dim, minX, minY, size);\n                return;\n            }\n            b = b.next;\n        }\n        a = a.next;\n    } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n    var queue = [],\n        i, len, start, end, list;\n\n    for (i = 0, len = holeIndices.length; i < len; i++) {\n        start = holeIndices[i] * dim;\n        end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n        list = linkedList(data, start, end, dim, false);\n        if (list === list.next) list.steiner = true;\n        queue.push(getLeftmost(list));\n    }\n\n    queue.sort(compareX);\n\n    // process holes from left to right\n    for (i = 0; i < queue.length; i++) {\n        eliminateHole(queue[i], outerNode);\n        outerNode = filterPoints(outerNode, outerNode.next);\n    }\n\n    return outerNode;\n}\n\nfunction compareX(a, b) {\n    return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n    outerNode = findHoleBridge(hole, outerNode);\n    if (outerNode) {\n        var b = splitPolygon(outerNode, hole);\n        filterPoints(b, b.next);\n    }\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n    var p = outerNode,\n        hx = hole.x,\n        hy = hole.y,\n        qx = -Infinity,\n        m;\n\n    // find a segment intersected by a ray from the hole's leftmost point to the left;\n    // segment's endpoint with lesser x will be potential connection point\n    do {\n        if (hy <= p.y && hy >= p.next.y) {\n            var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n            if (x <= hx && x > qx) {\n                qx = x;\n                if (x === hx) {\n                    if (hy === p.y) return p;\n                    if (hy === p.next.y) return p.next;\n                }\n                m = p.x < p.next.x ? p : p.next;\n            }\n        }\n        p = p.next;\n    } while (p !== outerNode);\n\n    if (!m) return null;\n\n    if (hx === qx) return m.prev; // hole touches outer segment; pick lower endpoint\n\n    // look for points inside the triangle of hole point, segment intersection and endpoint;\n    // if there are no points found, we have a valid connection;\n    // otherwise choose the point of the minimum angle with the ray as connection point\n\n    var stop = m,\n        mx = m.x,\n        my = m.y,\n        tanMin = Infinity,\n        tan;\n\n    p = m.next;\n\n    while (p !== stop) {\n        if (hx >= p.x && p.x >= mx &&\n                pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n            tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n            if ((tan < tanMin || (tan === tanMin && p.x > m.x)) && locallyInside(p, hole)) {\n                m = p;\n                tanMin = tan;\n            }\n        }\n\n        p = p.next;\n    }\n\n    return m;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, size) {\n    var p = start;\n    do {\n        if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, size);\n        p.prevZ = p.prev;\n        p.nextZ = p.next;\n        p = p.next;\n    } while (p !== start);\n\n    p.prevZ.nextZ = null;\n    p.prevZ = null;\n\n    sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n    var i, p, q, e, tail, numMerges, pSize, qSize,\n        inSize = 1;\n\n    do {\n        p = list;\n        list = null;\n        tail = null;\n        numMerges = 0;\n\n        while (p) {\n            numMerges++;\n            q = p;\n            pSize = 0;\n            for (i = 0; i < inSize; i++) {\n                pSize++;\n                q = q.nextZ;\n                if (!q) break;\n            }\n\n            qSize = inSize;\n\n            while (pSize > 0 || (qSize > 0 && q)) {\n\n                if (pSize === 0) {\n                    e = q;\n                    q = q.nextZ;\n                    qSize--;\n                } else if (qSize === 0 || !q) {\n                    e = p;\n                    p = p.nextZ;\n                    pSize--;\n                } else if (p.z <= q.z) {\n                    e = p;\n                    p = p.nextZ;\n                    pSize--;\n                } else {\n                    e = q;\n                    q = q.nextZ;\n                    qSize--;\n                }\n\n                if (tail) tail.nextZ = e;\n                else list = e;\n\n                e.prevZ = tail;\n                tail = e;\n            }\n\n            p = q;\n        }\n\n        tail.nextZ = null;\n        inSize *= 2;\n\n    } while (numMerges > 1);\n\n    return list;\n}\n\n// z-order of a point given coords and size of the data bounding box\nfunction zOrder(x, y, minX, minY, size) {\n    // coords are transformed into non-negative 15-bit integer range\n    x = 32767 * (x - minX) / size;\n    y = 32767 * (y - minY) / size;\n\n    x = (x | (x << 8)) & 0x00FF00FF;\n    x = (x | (x << 4)) & 0x0F0F0F0F;\n    x = (x | (x << 2)) & 0x33333333;\n    x = (x | (x << 1)) & 0x55555555;\n\n    y = (y | (y << 8)) & 0x00FF00FF;\n    y = (y | (y << 4)) & 0x0F0F0F0F;\n    y = (y | (y << 2)) & 0x33333333;\n    y = (y | (y << 1)) & 0x55555555;\n\n    return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n    var p = start,\n        leftmost = start;\n    do {\n        if (p.x < leftmost.x) leftmost = p;\n        p = p.next;\n    } while (p !== start);\n\n    return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n    return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&\n           (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&\n           (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n    return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) &&\n           locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b);\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n    return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n    return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n    if ((equals(p1, q1) && equals(p2, q2)) ||\n        (equals(p1, q2) && equals(p2, q1))) return true;\n    return area(p1, q1, p2) > 0 !== area(p1, q1, q2) > 0 &&\n           area(p2, q2, p1) > 0 !== area(p2, q2, q1) > 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n    var p = a;\n    do {\n        if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n                intersects(p, p.next, a, b)) return true;\n        p = p.next;\n    } while (p !== a);\n\n    return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n    return area(a.prev, a, a.next) < 0 ?\n        area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n        area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n    var p = a,\n        inside = false,\n        px = (a.x + b.x) / 2,\n        py = (a.y + b.y) / 2;\n    do {\n        if (((p.y > py) !== (p.next.y > py)) && (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n            inside = !inside;\n        p = p.next;\n    } while (p !== a);\n\n    return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n    var a2 = new Node(a.i, a.x, a.y),\n        b2 = new Node(b.i, b.x, b.y),\n        an = a.next,\n        bp = b.prev;\n\n    a.next = b;\n    b.prev = a;\n\n    a2.next = an;\n    an.prev = a2;\n\n    b2.next = a2;\n    a2.prev = b2;\n\n    bp.next = b2;\n    b2.prev = bp;\n\n    return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n    var p = new Node(i, x, y);\n\n    if (!last) {\n        p.prev = p;\n        p.next = p;\n\n    } else {\n        p.next = last.next;\n        p.prev = last;\n        last.next.prev = p;\n        last.next = p;\n    }\n    return p;\n}\n\nfunction removeNode(p) {\n    p.next.prev = p.prev;\n    p.prev.next = p.next;\n\n    if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n    if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n    // vertice index in coordinates array\n    this.i = i;\n\n    // vertex coordinates\n    this.x = x;\n    this.y = y;\n\n    // previous and next vertice nodes in a polygon ring\n    this.prev = null;\n    this.next = null;\n\n    // z-order curve value\n    this.z = null;\n\n    // previous and next nodes in z-order\n    this.prevZ = null;\n    this.nextZ = null;\n\n    // indicates whether this is a steiner point\n    this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n    var hasHoles = holeIndices && holeIndices.length;\n    var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n    var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n    if (hasHoles) {\n        for (var i = 0, len = holeIndices.length; i < len; i++) {\n            var start = holeIndices[i] * dim;\n            var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n            polygonArea -= Math.abs(signedArea(data, start, end, dim));\n        }\n    }\n\n    var trianglesArea = 0;\n    for (i = 0; i < triangles.length; i += 3) {\n        var a = triangles[i] * dim;\n        var b = triangles[i + 1] * dim;\n        var c = triangles[i + 2] * dim;\n        trianglesArea += Math.abs(\n            (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n            (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n    }\n\n    return polygonArea === 0 && trianglesArea === 0 ? 0 :\n        Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n    var sum = 0;\n    for (var i = start, j = end - dim; i < end; i += dim) {\n        sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n        j = i;\n    }\n    return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n    var dim = data[0][0].length,\n        result = {vertices: [], holes: [], dimensions: dim},\n        holeIndex = 0;\n\n    for (var i = 0; i < data.length; i++) {\n        for (var j = 0; j < data[i].length; j++) {\n            for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n        }\n        if (i > 0) {\n            holeIndex += data[i - 1].length;\n            result.holes.push(holeIndex);\n        }\n    }\n    return result;\n};\n",
     "'use strict';\n\nvar OneVersionConstraint = require('individual/one-version');\n\nvar MY_VERSION = '7';\nOneVersionConstraint('ev-store', MY_VERSION);\n\nvar hashKey = '__EV_STORE_KEY@' + MY_VERSION;\n\nmodule.exports = EvStore;\n\nfunction EvStore(elem) {\n    var hash = elem[hashKey];\n\n    if (!hash) {\n        hash = elem[hashKey] = {};\n    }\n\n    return hash;\n}\n",
     "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n",
     "'use strict';\n\nmodule.exports = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n    dim = dim || 2;\n\n    var hasHoles = holeIndices && holeIndices.length,\n        outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n        outerNode = linkedList(data, 0, outerLen, dim, true),\n        triangles = [];\n\n    if (!outerNode) return triangles;\n\n    var minX, minY, maxX, maxY, x, y, size;\n\n    if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n    // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n    if (data.length > 80 * dim) {\n        minX = maxX = data[0];\n        minY = maxY = data[1];\n\n        for (var i = dim; i < outerLen; i += dim) {\n            x = data[i];\n            y = data[i + 1];\n            if (x < minX) minX = x;\n            if (y < minY) minY = y;\n            if (x > maxX) maxX = x;\n            if (y > maxY) maxY = y;\n        }\n\n        // minX, minY and size are later used to transform coords into integers for z-order calculation\n        size = Math.max(maxX - minX, maxY - minY);\n    }\n\n    earcutLinked(outerNode, triangles, dim, minX, minY, size);\n\n    return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n    var i, last;\n\n    if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n        for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n    } else {\n        for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n    }\n\n    if (last && equals(last, last.next)) {\n        removeNode(last);\n        last = last.next;\n    }\n\n    return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n    if (!start) return start;\n    if (!end) end = start;\n\n    var p = start,\n        again;\n    do {\n        again = false;\n\n        if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n            removeNode(p);\n            p = end = p.prev;\n            if (p === p.next) return null;\n            again = true;\n\n        } else {\n            p = p.next;\n        }\n    } while (again || p !== end);\n\n    return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, size, pass) {\n    if (!ear) return;\n\n    // interlink polygon nodes in z-order\n    if (!pass && size) indexCurve(ear, minX, minY, size);\n\n    var stop = ear,\n        prev, next;\n\n    // iterate through ears, slicing them one by one\n    while (ear.prev !== ear.next) {\n        prev = ear.prev;\n        next = ear.next;\n\n        if (size ? isEarHashed(ear, minX, minY, size) : isEar(ear)) {\n            // cut off the triangle\n            triangles.push(prev.i / dim);\n            triangles.push(ear.i / dim);\n            triangles.push(next.i / dim);\n\n            removeNode(ear);\n\n            // skipping the next vertice leads to less sliver triangles\n            ear = next.next;\n            stop = next.next;\n\n            continue;\n        }\n\n        ear = next;\n\n        // if we looped through the whole remaining polygon and can't find any more ears\n        if (ear === stop) {\n            // try filtering points and slicing again\n            if (!pass) {\n                earcutLinked(filterPoints(ear), triangles, dim, minX, minY, size, 1);\n\n            // if this didn't work, try curing all small self-intersections locally\n            } else if (pass === 1) {\n                ear = cureLocalIntersections(ear, triangles, dim);\n                earcutLinked(ear, triangles, dim, minX, minY, size, 2);\n\n            // as a last resort, try splitting the remaining polygon into two\n            } else if (pass === 2) {\n                splitEarcut(ear, triangles, dim, minX, minY, size);\n            }\n\n            break;\n        }\n    }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n    var a = ear.prev,\n        b = ear,\n        c = ear.next;\n\n    if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n    // now make sure we don't have other points inside the potential ear\n    var p = ear.next.next;\n\n    while (p !== ear.prev) {\n        if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n            area(p.prev, p, p.next) >= 0) return false;\n        p = p.next;\n    }\n\n    return true;\n}\n\nfunction isEarHashed(ear, minX, minY, size) {\n    var a = ear.prev,\n        b = ear,\n        c = ear.next;\n\n    if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n    // triangle bbox; min & max are calculated like this for speed\n    var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),\n        minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),\n        maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),\n        maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);\n\n    // z-order range for the current triangle bbox;\n    var minZ = zOrder(minTX, minTY, minX, minY, size),\n        maxZ = zOrder(maxTX, maxTY, minX, minY, size);\n\n    // first look for points inside the triangle in increasing z-order\n    var p = ear.nextZ;\n\n    while (p && p.z <= maxZ) {\n        if (p !== ear.prev && p !== ear.next &&\n            pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n            area(p.prev, p, p.next) >= 0) return false;\n        p = p.nextZ;\n    }\n\n    // then look for points in decreasing z-order\n    p = ear.prevZ;\n\n    while (p && p.z >= minZ) {\n        if (p !== ear.prev && p !== ear.next &&\n            pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n            area(p.prev, p, p.next) >= 0) return false;\n        p = p.prevZ;\n    }\n\n    return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n    var p = start;\n    do {\n        var a = p.prev,\n            b = p.next.next;\n\n        if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n            triangles.push(a.i / dim);\n            triangles.push(p.i / dim);\n            triangles.push(b.i / dim);\n\n            // remove two nodes involved\n            removeNode(p);\n            removeNode(p.next);\n\n            p = start = b;\n        }\n        p = p.next;\n    } while (p !== start);\n\n    return p;\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, size) {\n    // look for a valid diagonal that divides the polygon into two\n    var a = start;\n    do {\n        var b = a.next.next;\n        while (b !== a.prev) {\n            if (a.i !== b.i && isValidDiagonal(a, b)) {\n                // split the polygon in two by the diagonal\n                var c = splitPolygon(a, b);\n\n                // filter colinear points around the cuts\n                a = filterPoints(a, a.next);\n                c = filterPoints(c, c.next);\n\n                // run earcut on each half\n                earcutLinked(a, triangles, dim, minX, minY, size);\n                earcutLinked(c, triangles, dim, minX, minY, size);\n                return;\n            }\n            b = b.next;\n        }\n        a = a.next;\n    } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n    var queue = [],\n        i, len, start, end, list;\n\n    for (i = 0, len = holeIndices.length; i < len; i++) {\n        start = holeIndices[i] * dim;\n        end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n        list = linkedList(data, start, end, dim, false);\n        if (list === list.next) list.steiner = true;\n        queue.push(getLeftmost(list));\n    }\n\n    queue.sort(compareX);\n\n    // process holes from left to right\n    for (i = 0; i < queue.length; i++) {\n        eliminateHole(queue[i], outerNode);\n        outerNode = filterPoints(outerNode, outerNode.next);\n    }\n\n    return outerNode;\n}\n\nfunction compareX(a, b) {\n    return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n    outerNode = findHoleBridge(hole, outerNode);\n    if (outerNode) {\n        var b = splitPolygon(outerNode, hole);\n        filterPoints(b, b.next);\n    }\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n    var p = outerNode,\n        hx = hole.x,\n        hy = hole.y,\n        qx = -Infinity,\n        m;\n\n    // find a segment intersected by a ray from the hole's leftmost point to the left;\n    // segment's endpoint with lesser x will be potential connection point\n    do {\n        if (hy <= p.y && hy >= p.next.y) {\n            var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n            if (x <= hx && x > qx) {\n                qx = x;\n                if (x === hx) {\n                    if (hy === p.y) return p;\n                    if (hy === p.next.y) return p.next;\n                }\n                m = p.x < p.next.x ? p : p.next;\n            }\n        }\n        p = p.next;\n    } while (p !== outerNode);\n\n    if (!m) return null;\n\n    if (hx === qx) return m.prev; // hole touches outer segment; pick lower endpoint\n\n    // look for points inside the triangle of hole point, segment intersection and endpoint;\n    // if there are no points found, we have a valid connection;\n    // otherwise choose the point of the minimum angle with the ray as connection point\n\n    var stop = m,\n        mx = m.x,\n        my = m.y,\n        tanMin = Infinity,\n        tan;\n\n    p = m.next;\n\n    while (p !== stop) {\n        if (hx >= p.x && p.x >= mx &&\n                pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n            tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n            if ((tan < tanMin || (tan === tanMin && p.x > m.x)) && locallyInside(p, hole)) {\n                m = p;\n                tanMin = tan;\n            }\n        }\n\n        p = p.next;\n    }\n\n    return m;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, size) {\n    var p = start;\n    do {\n        if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, size);\n        p.prevZ = p.prev;\n        p.nextZ = p.next;\n        p = p.next;\n    } while (p !== start);\n\n    p.prevZ.nextZ = null;\n    p.prevZ = null;\n\n    sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n    var i, p, q, e, tail, numMerges, pSize, qSize,\n        inSize = 1;\n\n    do {\n        p = list;\n        list = null;\n        tail = null;\n        numMerges = 0;\n\n        while (p) {\n            numMerges++;\n            q = p;\n            pSize = 0;\n            for (i = 0; i < inSize; i++) {\n                pSize++;\n                q = q.nextZ;\n                if (!q) break;\n            }\n\n            qSize = inSize;\n\n            while (pSize > 0 || (qSize > 0 && q)) {\n\n                if (pSize === 0) {\n                    e = q;\n                    q = q.nextZ;\n                    qSize--;\n                } else if (qSize === 0 || !q) {\n                    e = p;\n                    p = p.nextZ;\n                    pSize--;\n                } else if (p.z <= q.z) {\n                    e = p;\n                    p = p.nextZ;\n                    pSize--;\n                } else {\n                    e = q;\n                    q = q.nextZ;\n                    qSize--;\n                }\n\n                if (tail) tail.nextZ = e;\n                else list = e;\n\n                e.prevZ = tail;\n                tail = e;\n            }\n\n            p = q;\n        }\n\n        tail.nextZ = null;\n        inSize *= 2;\n\n    } while (numMerges > 1);\n\n    return list;\n}\n\n// z-order of a point given coords and size of the data bounding box\nfunction zOrder(x, y, minX, minY, size) {\n    // coords are transformed into non-negative 15-bit integer range\n    x = 32767 * (x - minX) / size;\n    y = 32767 * (y - minY) / size;\n\n    x = (x | (x << 8)) & 0x00FF00FF;\n    x = (x | (x << 4)) & 0x0F0F0F0F;\n    x = (x | (x << 2)) & 0x33333333;\n    x = (x | (x << 1)) & 0x55555555;\n\n    y = (y | (y << 8)) & 0x00FF00FF;\n    y = (y | (y << 4)) & 0x0F0F0F0F;\n    y = (y | (y << 2)) & 0x33333333;\n    y = (y | (y << 1)) & 0x55555555;\n\n    return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n    var p = start,\n        leftmost = start;\n    do {\n        if (p.x < leftmost.x) leftmost = p;\n        p = p.next;\n    } while (p !== start);\n\n    return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n    return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&\n           (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&\n           (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n    return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) &&\n           locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b);\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n    return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n    return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n    if ((equals(p1, q1) && equals(p2, q2)) ||\n        (equals(p1, q2) && equals(p2, q1))) return true;\n    return area(p1, q1, p2) > 0 !== area(p1, q1, q2) > 0 &&\n           area(p2, q2, p1) > 0 !== area(p2, q2, q1) > 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n    var p = a;\n    do {\n        if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n                intersects(p, p.next, a, b)) return true;\n        p = p.next;\n    } while (p !== a);\n\n    return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n    return area(a.prev, a, a.next) < 0 ?\n        area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n        area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n    var p = a,\n        inside = false,\n        px = (a.x + b.x) / 2,\n        py = (a.y + b.y) / 2;\n    do {\n        if (((p.y > py) !== (p.next.y > py)) && (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n            inside = !inside;\n        p = p.next;\n    } while (p !== a);\n\n    return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n    var a2 = new Node(a.i, a.x, a.y),\n        b2 = new Node(b.i, b.x, b.y),\n        an = a.next,\n        bp = b.prev;\n\n    a.next = b;\n    b.prev = a;\n\n    a2.next = an;\n    an.prev = a2;\n\n    b2.next = a2;\n    a2.prev = b2;\n\n    bp.next = b2;\n    b2.prev = bp;\n\n    return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n    var p = new Node(i, x, y);\n\n    if (!last) {\n        p.prev = p;\n        p.next = p;\n\n    } else {\n        p.next = last.next;\n        p.prev = last;\n        last.next.prev = p;\n        last.next = p;\n    }\n    return p;\n}\n\nfunction removeNode(p) {\n    p.next.prev = p.prev;\n    p.prev.next = p.next;\n\n    if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n    if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n    // vertice index in coordinates array\n    this.i = i;\n\n    // vertex coordinates\n    this.x = x;\n    this.y = y;\n\n    // previous and next vertice nodes in a polygon ring\n    this.prev = null;\n    this.next = null;\n\n    // z-order curve value\n    this.z = null;\n\n    // previous and next nodes in z-order\n    this.prevZ = null;\n    this.nextZ = null;\n\n    // indicates whether this is a steiner point\n    this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n    var hasHoles = holeIndices && holeIndices.length;\n    var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n    var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n    if (hasHoles) {\n        for (var i = 0, len = holeIndices.length; i < len; i++) {\n            var start = holeIndices[i] * dim;\n            var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n            polygonArea -= Math.abs(signedArea(data, start, end, dim));\n        }\n    }\n\n    var trianglesArea = 0;\n    for (i = 0; i < triangles.length; i += 3) {\n        var a = triangles[i] * dim;\n        var b = triangles[i + 1] * dim;\n        var c = triangles[i + 2] * dim;\n        trianglesArea += Math.abs(\n            (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n            (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n    }\n\n    return polygonArea === 0 && trianglesArea === 0 ? 0 :\n        Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n    var sum = 0;\n    for (var i = start, j = end - dim; i < end; i += dim) {\n        sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n        j = i;\n    }\n    return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n    var dim = data[0][0].length,\n        result = {vertices: [], holes: [], dimensions: dim},\n        holeIndex = 0;\n\n    for (var i = 0; i < data.length; i++) {\n        for (var j = 0; j < data[i].length; j++) {\n            for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n        }\n        if (i > 0) {\n            holeIndex += data[i - 1].length;\n            result.holes.push(holeIndex);\n        }\n    }\n    return result;\n};\n",
     "'use strict';\n\nvar OneVersionConstraint = require('individual/one-version');\n\nvar MY_VERSION = '7';\nOneVersionConstraint('ev-store', MY_VERSION);\n\nvar hashKey = '__EV_STORE_KEY@' + MY_VERSION;\n\nmodule.exports = EvStore;\n\nfunction EvStore(elem) {\n    var hash = elem[hashKey];\n\n    if (!hash) {\n        hash = elem[hashKey] = {};\n    }\n\n    return hash;\n}\n",
     "'use strict';\nmodule.exports = function getXMLHttpRequest() {\n  var progId,\n    progIds,\n    i;\n  if (global.XMLHttpRequest) {\n    return new global.XMLHttpRequest();\n  } else {\n    try {\n    progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];\n    for (i = 0; i < 3; i++) {\n      try {\n        progId = progIds[i];\n        if (new global.ActiveXObject(progId)) {\n          break;\n        }\n      } catch(e) { }\n    }\n    return new global.ActiveXObject(progId);\n    } catch (e) {\n    throw new Error('XMLHttpRequest is not supported by your browser');\n    }\n  }\n};\n",
     "'use strict';\nvar getXMLHttpRequest = require('./getXMLHttpRequest');\nvar getCORSRequest = require('./getCORSRequest');\nvar hasOwnProp = Object.prototype.hasOwnProperty;\n\nvar noop = function() {};\n\nfunction Observable() {}\n\nObservable.create = function(subscribe) {\n  var o = new Observable();\n\n  o.subscribe = function(onNext, onError, onCompleted) {\n\n    var observer;\n    var disposable;\n\n    if (typeof onNext === 'function') {\n        observer = {\n            onNext: onNext,\n            onError: (onError || noop),\n            onCompleted: (onCompleted || noop)\n        };\n    } else {\n        observer = onNext;\n    }\n\n    disposable = subscribe(observer);\n\n    if (typeof disposable === 'function') {\n      return {\n        dispose: disposable\n      };\n    } else {\n      return disposable;\n    }\n  };\n\n  return o;\n};\n\nfunction request(method, options, context) {\n  return Observable.create(function requestObserver(observer) {\n\n    var config = {\n      method: method || 'GET',\n      crossDomain: false,\n      async: true,\n      headers: {},\n      responseType: 'json'\n    };\n\n    var xhr,\n      isDone,\n      headers,\n      header,\n      prop;\n\n    for (prop in options) {\n      if (hasOwnProp.call(options, prop)) {\n        config[prop] = options[prop];\n      }\n    }\n\n    // Add request with Headers\n    if (!config.crossDomain && !config.headers['X-Requested-With']) {\n      config.headers['X-Requested-With'] = 'XMLHttpRequest';\n    }\n\n    // allow the user to mutate the config open\n    if (context.onBeforeRequest != null) {\n      context.onBeforeRequest(config);\n    }\n\n    // create xhr\n    try {\n      xhr = config.crossDomain ? getCORSRequest() : getXMLHttpRequest();\n    } catch (err) {\n      observer.onError(err);\n    }\n    try {\n      // Takes the url and opens the connection\n      if (config.user) {\n        xhr.open(config.method, config.url, config.async, config.user, config.password);\n      } else {\n        xhr.open(config.method, config.url, config.async);\n      }\n\n      // Sets timeout information\n      xhr.timeout = config.timeout;\n\n      // Anything but explicit false results in true.\n      xhr.withCredentials = config.withCredentials !== false;\n\n      // Fills the request headers\n      headers = config.headers;\n      for (header in headers) {\n        if (hasOwnProp.call(headers, header)) {\n          xhr.setRequestHeader(header, headers[header]);\n        }\n      }\n\n      if (config.responseType) {\n        try {\n          xhr.responseType = config.responseType;\n        } catch (e) {\n          // WebKit added support for the json responseType value on 09/03/2013\n          // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are\n          // known to throw when setting the value \"json\" as the response type. Other older\n          // browsers implementing the responseType\n          //\n          // The json response type can be ignored if not supported, because JSON payloads are\n          // parsed on the client-side regardless.\n          if (config.responseType !== 'json') {\n            throw e;\n          }\n        }\n      }\n\n      xhr.onreadystatechange = function onreadystatechange(e) {\n        // Complete\n        if (xhr.readyState === 4) {\n          if (!isDone) {\n            isDone = true;\n            onXhrLoad(observer, xhr, e);\n          }\n        }\n      };\n\n      // Timeout\n      xhr.ontimeout = function ontimeout(e) {\n        if (!isDone) {\n          isDone = true;\n          onXhrError(observer, xhr, 'timeout error', e);\n        }\n      };\n\n      // Send Request\n      xhr.send(config.data);\n\n    } catch (e) {\n      observer.onError(e);\n    }\n    // Dispose\n    return function dispose() {\n      // Doesn't work in IE9\n      if (!isDone && xhr.readyState !== 4) {\n        isDone = true;\n        xhr.abort();\n      }\n    };//Dispose\n  });\n}\n\n/*\n * General handling of ultimate failure (after appropriate retries)\n */\nfunction _handleXhrError(observer, textStatus, errorThrown) {\n  // IE9: cross-domain request may be considered errors\n  if (!errorThrown) {\n    errorThrown = new Error(textStatus);\n  }\n\n  observer.onError(errorThrown);\n}\n\nfunction onXhrLoad(observer, xhr, e) {\n  var responseData,\n    responseObject,\n    responseType;\n\n  // If there's no observer, the request has been (or is being) cancelled.\n  if (xhr && observer) {\n    responseType = xhr.responseType;\n    // responseText is the old-school way of retrieving response (supported by IE8 & 9)\n    // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)\n    responseData = ('response' in xhr) ? xhr.response : xhr.responseText;\n\n    // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)\n    var status = (xhr.status === 1223) ? 204 : xhr.status;\n\n    if (status >= 200 && status <= 399) {\n      try {\n        if (responseType !== 'json') {\n          responseData = JSON.parse(responseData || '');\n        }\n        if (typeof responseData === 'string') {\n          responseData = JSON.parse(responseData || '');\n        }\n      } catch (e) {\n        _handleXhrError(observer, 'invalid json', e);\n      }\n      observer.onNext(responseData);\n      observer.onCompleted();\n      return;\n\n    } else if (status === 401 || status === 403 || status === 407) {\n\n      return _handleXhrError(observer, responseData);\n\n    } else if (status === 410) {\n      // TODO: Retry ?\n      return _handleXhrError(observer, responseData);\n\n    } else if (status === 408 || status === 504) {\n      // TODO: Retry ?\n      return _handleXhrError(observer, responseData);\n\n    } else {\n\n      return _handleXhrError(observer, responseData || ('Response code ' + status));\n\n    }//if\n  }//if\n}//onXhrLoad\n\nfunction onXhrError(observer, xhr, status, e) {\n  _handleXhrError(observer, status || xhr.statusText || 'request error', e);\n}\n\nmodule.exports = request;\n",
     "!function(t){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=t();else if(\"function\"==typeof define&&define.amd)define([],t);else{var e;e=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,e.falcor=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a=\"function\"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error(\"Cannot find module '\"+s+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var p=n[s]={exports:{}};t[s][0].call(p.exports,function(e){var n=t[s][1][e];return o(n?n:e)},p,p.exports,e,t,n,r)}return n[s].exports}for(var i=\"function\"==typeof require&&require,s=0;s<r.length;s++)o(r[s]);return o}({1:[function(t,e,n){var r=t(32),o=t(130);r.atom=o.atom,r.ref=o.ref,r.error=o.error,r.pathValue=o.pathValue,r.HttpDataSource=t(125),e.exports=r},{125:125,130:130,32:32}],2:[function(t,e,n){function r(t){var e=t||{};this._root=e._root||new o(e),this._path=e.path||e._path||[],this._scheduler=e.scheduler||e._scheduler||new l,this._source=e.source||e._source,this._request=e.request||e._request||new s(this,this._scheduler),this._ID=N++,\"number\"==typeof e.maxSize?this._maxSize=e.maxSize:this._maxSize=e._maxSize||r.prototype._maxSize,\"number\"==typeof e.collectRatio?this._collectRatio=e.collectRatio:this._collectRatio=e._collectRatio||r.prototype._collectRatio,(e.boxed||e.hasOwnProperty(\"_boxed\"))&&(this._boxed=e.boxed||e._boxed),(e.materialized||e.hasOwnProperty(\"_materialized\"))&&(this._materialized=e.materialized||e._materialized),\"boolean\"==typeof e.treatErrorsAsValues?this._treatErrorsAsValues=e.treatErrorsAsValues:e.hasOwnProperty(\"_treatErrorsAsValues\")&&(this._treatErrorsAsValues=e._treatErrorsAsValues),e.cache&&this.setCache(e.cache)}var o=t(4),i=t(3),s=t(55),u=t(64),a=t(65),c=t(61),p=t(63),h=t(73),f=t(75),l=t(74),d=t(81),v=t(84),y=t(49),b=t(134),m=t(88),g=t(100),w=t(96),x=t(102),_=t(98),S=t(99),E=t(77),C=t(76),A=t(130),N=0,k=t(116),O=function(){},P=t(14),j=t(19),D={pathValue:!0,pathSyntax:!0,json:!0,jsonGraph:!0},q=t(72);e.exports=r,r.ref=A.ref,r.atom=A.atom,r.error=A.error,r.pathValue=A.pathValue,r.prototype.constructor=r,r.prototype._materialized=!1,r.prototype._boxed=!1,r.prototype._progressive=!1,r.prototype._treatErrorsAsValues=!1,r.prototype._maxSize=Math.pow(2,53)-1,r.prototype._collectRatio=.75,r.prototype.get=t(71),r.prototype._getWithPaths=t(70),r.prototype.set=function(){var t=k(arguments,D,\"set\");return t!==!0?new u(function(e){e.onError(t)}):this._set.apply(this,arguments)},r.prototype.preload=function(){var t=k(arguments,q,\"preload\");if(t!==!0)return new u(function(e){e.onError(t)});var e=Array.prototype.slice.call(arguments),n=this;return new u(function(t){return n.get.apply(n,e).subscribe(function(){},function(e){t.onError(e)},function(){t.onCompleted()})})},r.prototype._set=function(){var t,e=-1,n=arguments.length,r=arguments[n-1];for(w(r)?n-=1:r=void 0,t=new Array(n);++e<n;)t[e]=arguments[e];return a.create(this,t,r)},r.prototype.call=function(){var t,e=-1,n=arguments.length;for(t=new Array(n);++e<n;){var r=arguments[e];t[e]=r;var o=typeof r;if(e>1&&!Array.isArray(r)||0===e&&!Array.isArray(r)&&\"string\"!==o||1===e&&!Array.isArray(r)&&!x(r))return new u(function(t){t.onError(new Error(\"Invalid argument\"))})}return c.create(this,t)},r.prototype.invalidate=function(){var t,e=-1,n=arguments.length,r=arguments[n-1];for(t=new Array(n);++e<n;)if(t[e]=b.fromPath(arguments[e]),\"object\"!=typeof t[e])throw new Error(\"Invalid argument\");p.create(this,t,r).subscribe(O,function(t){throw t})},r.prototype.deref=t(5),r.prototype.getValue=t(16),r.prototype.setValue=t(79),r.prototype._getValueSync=t(24),r.prototype._setValueSync=t(80),r.prototype._derefSync=t(6),r.prototype.setCache=function(t){var e=this._root.cache;if(t!==e){var n=this._root,r=this._path;this._path=[],this._root.cache={},\"undefined\"!=typeof e&&y(n,n.expired,m(e),0),S(t)?C(this,[t]):_(t)?E(this,[t]):g(t)&&E(this,[{json:t}]),this._path=r}else\"undefined\"==typeof e&&(this._root.cache={});return this},r.prototype.getCache=function(){var t=v(arguments);if(0===t.length)return P(this._root.cache);var e=[{}],n=this._path;return j.getWithPathsAsJSONGraph(this,t,e),this._path=n,e[0].jsonGraph},r.prototype.getVersion=function(t){var e=t&&b.fromPath(t)||[];if(Array.isArray(e)===!1)throw new Error(\"Model#getVersion must be called with an Array path.\");return this._path.length&&(e=this._path.concat(e)),this._getVersion(this,e)},r.prototype._syncCheck=function(t){if(Boolean(this._source)&&this._root.syncRefCount<=0&&this._root.unsafeMode===!1)throw new Error(\"Model#\"+t+\" may only be called within the context of a request selector.\");return!0},r.prototype._clone=function(t){var e=new r(this);for(var n in t){var o=t[n];\"delete\"===o?delete e[n]:e[n]=o}return e.setCache=void 0,e},r.prototype.batch=function(t){var e=t;\"number\"==typeof e?e=new f(Math.round(Math.abs(e))):e&&e.schedule||(e=new h);var n=this._clone();return n._request=new s(n,e),n},r.prototype.unbatch=function(){var t=this._clone();return t._request=new s(t,new l),t},r.prototype.treatErrorsAsValues=function(){return this._clone({_treatErrorsAsValues:!0})},r.prototype.asDataSource=function(){return new i(this)},r.prototype._materialize=function(){return this._clone({_materialized:!0})},r.prototype._dematerialize=function(){return this._clone({_materialized:\"delete\"})},r.prototype.boxValues=function(){return this._clone({_boxed:!0})},r.prototype.unboxValues=function(){return this._clone({_boxed:\"delete\"})},r.prototype.withoutDataSource=function(){return this._clone({_source:\"delete\"})},r.prototype.toJSON=function(){return{$type:\"ref\",value:this._path}},r.prototype.getPath=function(){return d(this._path)},r.prototype._getBoundValue=t(13),r.prototype._getVersion=t(18),r.prototype._getValueSync=t(17),r.prototype._getPathValuesAsPathMap=j.getWithPathsAsPathMap,r.prototype._getPathValuesAsJSONG=j.getWithPathsAsJSONGraph,r.prototype._setPathValuesAsJSON=t(78),r.prototype._setPathValuesAsJSONG=t(78),r.prototype._setPathValuesAsPathMap=t(78),r.prototype._setPathValuesAsValues=t(78),r.prototype._setPathMapsAsJSON=t(77),r.prototype._setPathMapsAsJSONG=t(77),r.prototype._setPathMapsAsPathMap=t(77),r.prototype._setPathMapsAsValues=t(77),r.prototype._setJSONGsAsJSON=t(76),r.prototype._setJSONGsAsJSONG=t(76),r.prototype._setJSONGsAsPathMap=t(76),r.prototype._setJSONGsAsValues=t(76),r.prototype._setCache=t(77),r.prototype._invalidatePathValuesAsJSON=t(48),r.prototype._invalidatePathMapsAsJSON=t(47)},{100:100,102:102,116:116,13:13,130:130,134:134,14:14,16:16,17:17,18:18,19:19,24:24,3:3,4:4,47:47,48:48,49:49,5:5,55:55,6:6,61:61,63:63,64:64,65:65,70:70,71:71,72:72,73:73,74:74,75:75,76:76,77:77,78:78,79:79,80:80,81:81,84:84,88:88,96:96,98:98,99:99}],3:[function(t,e,n){function r(t){this._model=t._materialize().treatErrorsAsValues()}r.prototype.get=function(t){return this._model.get.apply(this._model,t)._toJSONG()},r.prototype.set=function(t){return this._model.set(t)._toJSONG()},r.prototype.call=function(t,e,n,r){var o=[t,e,n].concat(r);return this._model.call.apply(this._model,o)._toJSONG()},e.exports=r},{}],4:[function(t,e,n){function r(t){var e=t||{};this.syncRefCount=0,this.expired=e.expired||[],this.unsafeMode=e.unsafeMode||!1,this.collectionScheduler=e.collectionScheduler||new s,this.cache={},o(e.comparator)&&(this.comparator=e.comparator),o(e.errorSelector)&&(this.errorSelector=e.errorSelector),o(e.onChange)&&(this.onChange=e.onChange)}var o=t(96),i=t(91),s=t(74);r.prototype.errorSelector=function(t,e){return e},r.prototype.comparator=function(t,e){return i(t,\"value\")&&i(e,\"value\")?t.value===e.value&&t.$type===e.$type&&t.$expires===e.$expires:t===e},e.exports=r},{74:74,91:91,96:96}],5:[function(t,e,n){function r(t,e){var n,r=!1;try{++t._root.syncRefCount,n=t._derefSync(e)}catch(i){n=i,r=!0}finally{--t._root.syncRefCount}return r?o.Observable[\"throw\"](n):o.Observable[\"return\"](n)}var o=t(159),i=t(134);e.exports=function(t){for(var e=this,n=-1,s=arguments.length-1,u=new Array(s),a=i.fromPath(t);++n<s;)u[n]=i.fromPath(arguments[n+1]);if(0===s)throw new Error(\"Model#deref requires at least one value path.\");return o.Observable.defer(function(){return r(e,a)}).flatMap(function(t){if(Boolean(t)){if(s>0){var n=o.Observable.of(t);return t.get.apply(t,u)[\"catch\"](o.Observable.empty()).concat(n).last().flatMap(function(){return r(e,a)}).filter(function(t){return t})}return o.Observable[\"return\"](t)}if(s>0){var i=u.map(function(t){return a.concat(t)});return e.get.apply(e,i).concat(o.Observable.defer(function(){return r(e,a)})).last().filter(function(t){return t})}return o.Observable.empty()})}},{134:134,159:159}],6:[function(t,e,n){var r=t(134),o=t(13),i=t(8),s=t(118);e.exports=function(t){var e=r.fromPath(t);if(!Array.isArray(e))throw new Error(\"Model#derefSync must be called with an Array path.\");var n=o(this,this._path.concat(e),!1),u=n.path,a=n.value,c=n.found;if(c&&void 0!==a&&(a.$type!==s||void 0!==a.value)){if(a.$type)throw new i;return this._clone({_path:u})}}},{118:118,13:13,134:134,8:8}],7:[function(t,e,n){function r(){this.message=r.message,this.stack=(new Error).stack}r.prototype=new Error,r.prototype.name=\"BoundJSONGraphModelError\",r.message=\"It is not legal to use the JSON Graph format from a bound Model. JSON Graph format can only be used from a root model.\",e.exports=r},{}],8:[function(t,e,n){function r(t,e){this.message=i,this.stack=(new Error).stack,this.boundPath=t,this.shortedPath=e}var o=\"InvalidModelError\",i=\"The boundPath of the model is not valid since a value or error was found before the path end.\";r.prototype=new Error,r.prototype.name=o,r.message=i,e.exports=r},{}],9:[function(t,e,n){function r(t){this.message=\"An exception was thrown when making a request.\",this.stack=(new Error).stack,this.innerError=t}var o=\"InvalidSourceError\";r.prototype=new Error,r.prototype.name=o,r.is=function(t){return t&&t.name===o},e.exports=r},{}],10:[function(t,e,n){function r(){this.message=\"The allowed number of retries have been exceeded.\",this.stack=(new Error).stack}var o=\"MaxRetryExceededError\";r.prototype=new Error,r.prototype.name=o,r.is=function(t){return t&&t.name===o},e.exports=r},{}],11:[function(t,e,n){function r(t,e,n,r,o,h,f){for(var l,d,v=n,y=o,b=r,m=0;;){if(0===m&&b[c]?(m=y.length,d=b[c]):(l=y[m++],d=v[l]),d){var g=d.$type,w=g&&d.value||d;if(m<y.length){if(g){v=d;break}v=d;continue}if(v=d,g&&u(d))break;if(b[c]||i(b,d),g===a){f?s(t,d,h,null,null,null,y,y.length,f):p(t,d),m=0,y=w,b=d,v=e;continue}break}v=void 0;break}if(m<y.length&&void 0!==v){for(var x=[],_=0;m>_;_++)x[_]=y[_];y=x}return[v,y]}var o=t(26),i=o.create,s=t(22),u=t(27),a=t(120),c=t(33),p=t(29).promote;e.exports=r},{120:120,22:22,26:26,27:27,29:29,33:33}],12:[function(t,e,n){var r=t(15),o=t(8),i=t(7);e.exports=function(t,e){return function(n,s,u){var a,c,p,h=u[0],f={values:u,optimizedPaths:[]},l=n._root.cache,d=n._path,v=l,y=d.length,b=[];if(y){if(e)return{criticalError:new i};if(v=r(n,d),v.$type)return{criticalError:new o(d,d)};for(a=[],c=0;y>c;++c)a[c]=d[c]}else a=[],y=0;for(c=0,p=s.length;p>c;c++)t(n,l,v,s[c],0,h,f,b,a,y,e);return f}}},{15:15,7:7,8:8}],13:[function(t,e,n){var r=t(17),o=t(8);e.exports=function(t,e,n){var i,s,u,a,c,p=e,h=e;for(i=t._boxed,n=t._materialized,s=t._treatErrorsAsValues,t._boxed=!0,t._materialized=void 0===n||n,t._treatErrorsAsValues=!0,u=r(t,p.concat(null),!0),t._boxed=i,t._materialized=n,t._treatErrorsAsValues=s,p=u.optimizedPath,a=u.shorted,c=u.found,u=u.value;p.length&&null===p[p.length-1];)p.pop();if(c&&a)throw new o(h,p);return{path:p,value:u,shorted:a,found:c}}},{17:17,8:8}],14:[function(t,e,n){function r(t){var e,n,r,o={},i=Object.keys(t);for(n=0,r=i.length;r>n;n++)e=i[n],s(e)||(o[e]=t[e]);return o}function o(t,e,n){Object.keys(t).filter(function(e){return!s(e)&&t[e]}).forEach(function(n){var s=t[n],u=e[n];if(u||(u=e[n]={}),s.$type){var a,c=s.value&&\"object\"==typeof s.value,p=!t[i];return a=c||p?r(s):s.value,void(e[n]=a)}o(s,u,n)})}var i=t(37),s=t(97);e.exports=function(t){var e={};return o(t,e),e}},{37:37,97:97}],15:[function(t,e,n){e.exports=function(t,e){for(var n=t._root.cache,r=-1,o=e.length;++r<o&&n&&!n.$type;)n=n[e[r]];return n}},{}],16:[function(t,e,n){var r=t(64),o=t(134);e.exports=function(t){for(var e=o.fromPath(t),n=0,i=e.length;++n<i;)if(\"object\"==typeof e[n])return new r(function(t){t.onError(new Error(\"Paths must be simple paths\"))});var s=this;return new r(function(t){return s.get(e).subscribe(function(n){for(var r=n.json,o=-1,i=e.length;r&&++o<i;)r=r[e[o]];t.onNext(r)},function(e){t.onError(e)},function(){t.onCompleted()})})}},{134:134,64:64}],17:[function(t,e,n){var r=t(11),o=t(25),i=t(27),s=t(29).promote,u=t(120),a=t(118),c=t(119);e.exports=function(t,e,n){for(var p,h,f,l,d,v=t._root.cache,y=e.length,b=[],m=!1,g=!1,w=0,x=v,_=v,S=v,E=!0,C=!1;x&&y>w;){if(p=e[w++],null!==p&&(x=_[p],b[b.length]=p),!x){S=void 0,m=!0,E=!1;break}if(f=x.$type,f===a&&void 0===x.value){S=void 0,E=!1,m=y>w;break}if(y>w){if(f===u){if(i(x)){C=!0,S=void 0,E=!1;break}if(l=r(t,v,v,x,x.value),d=l[0],!d){S=void 0,x=void 0,E=!1;break}f=d.$type,x=d,b=l[1].slice(0)}if(f)break}else S=x;_=x}if(y>w&&!C){for(h=w;y>h;++h)if(null!==e[w]){g=!0;break}for(g?(m=!0,S=void 0):S=x,h=w;y>h;++h)null!==e[h]&&(b[b.length]=e[h])}if(S&&f&&(i(S)?S=void 0:s(t,S)),S&&f===c&&!t._treatErrorsAsValues)throw{path:w===y?e:e.slice(0,w),value:S.value};return S&&t._boxed?S=Boolean(f)&&!n?o(S):S:!S&&t._materialized?S={$type:a}:S&&(S=S.value),{value:S,shorted:m,optimizedPath:b,found:E}}},{11:11,118:118,119:119,120:120,25:25,27:27,29:29}],18:[function(t,e,n){var r=t(46);e.exports=function(t,e){var n=t._getValueSync({_boxed:!0,_root:t._root,_treatErrorsAsValues:t._treatErrorsAsValues},e,!0).value,o=n&&n[r];return null==o?-1:o}},{46:46}],19:[function(t,e,n){var r=t(12),o=t(31),i=r(o,!1),s=r(o,!0);e.exports={getValueSync:t(17),getBoundValue:t(13),getWithPathsAsPathMap:i,getWithPathsAsJSONGraph:s}},{12:12,13:13,17:17,31:31}],20:[function(t,e,n){var r=t(29),o=t(25),i=r.promote;e.exports=function(t,e,n,r,s){var u=e.value;s.errors||(s.errors=[]),t._boxed&&(u=o(e)),s.errors.push({path:r.slice(0,n+1),value:u}),i(t,e)}},{25:25,29:29}],21:[function(t,e,n){function r(t,e,n,r,o,i,s){s.requestedMissingPaths.push(r.slice(0,n).concat(e)),s.optimizedMissingPaths.push(o.slice(0,i).concat(e))}var o=t(30),i=o.fastCopy;e.exports=function(t,e,n,o,s,u,a){var c;o.requestedMissingPaths||(o.requestedMissingPaths=[],o.optimizedMissingPaths=[]),c=n<e.length?i(e,n):[],r(t,c,n,s,u,a,o)}},{30:30}],22:[function(t,e,n){var r=t(29),o=t(25),i=r.promote,s=t(120),u=t(118),a=t(119),c=t(37);e.exports=function(t,e,n,r,p,h,f,l,d,v){if(n){var y,b,m,g,w,x,_,S,E=!1;if(e&&i(t,e),e&&void 0!==e.value||(E=t._materialized),E)S={$type:u};else if(t._boxed)S=o(e);else if(e.$type===s||e.$type===a)S=d?o(e):e.value;else if(d){var C=e.value&&\"object\"==typeof e.value,A=!e[c];S=C||A?o(e):e.value}else S=e.value;if(p&&(p.hasValue=!0),d){for(w=n.jsonGraph,w||(w=n.jsonGraph={},n.paths=[]),y=0,b=l-1;b>y;y++)g=f[y],w[g]||(w[g]={}),w=w[g];g=f[y],w[g]=E?{$type:u}:S,h&&n.paths.push(h.slice(0,r))}else if(0===r)n.json=S;else{for(w=n.json,w||(w=n.json={}),y=0;r-1>y;y++)m=h[y],w[m]||(w[m]={}),x=w,_=m,w=w[m];m=h[y],null!==m?w[m]=S:x[_]=S}}}},{118:118,119:119,120:120,25:25,29:29,37:37}],23:[function(t,e,n){var r=t(27),o=t(26),i=t(29),s=o.remove,u=i.splice,a=t(119),c=t(20),p=t(22),h=t(21),f=t(28),l=t(35);e.exports=function(t,e,n,o,i,d,v,y,b,m,g){var w=e&&e.$type,x=e&&void 0===e.value;return e&&w?void(r(e)?(e[l]||(u(t,e),s(e)),h(t,n,o,d,v,y,b)):w===a?(g&&(v[o]=null),m||t._treatErrorsAsValues?p(t,e,i,o,d,v,y,b,m,g):c(t,e,o,v,d)):(g&&(v[o]=null),(!x||x&&t._materialized)&&p(t,e,i,o,d,v,y,b,m,g))):void(f(t)?p(t,e,i,o,d,v,y,b,m,g):h(t,n,o,d,v,y,b))}},{119:119,20:20,21:21,22:22,26:26,27:27,28:28,29:29,35:35}],24:[function(t,e,n){var r=t(134);e.exports=function(t){var e=r.fromPath(t);if(Array.isArray(e)===!1)throw new Error(\"Model#getValueSync must be called with an Array path.\");return this._path.length&&(e=this._path.concat(e)),this._syncCheck(\"getValueSync\")&&this._getValueSync(this,e).value}},{134:134}],25:[function(t,e,n){var r=t(40);e.exports=function(t){var e,n,o,i=Object.keys(t);for(e={},n=0,o=i.length;o>n;n++){var s=i[n];s[0]!==r&&(e[s]=t[s])}return e}},{40:40}],26:[function(t,e,n){function r(t,e){var n=e[a]||0;e[i+n]=t,e[a]=n+1,t[u]=n,t[s]=e}function o(t){var e=t[s];if(e){for(var n=t[u],r=e[a];r>n;)e[i+n]=e[i+n+1],++n;e[a]=r-1,t[s]=void 0,t[u]=void 0}}var i=t(43),s=t(33),u=t(42),a=t(44);e.exports={create:r,remove:o}},{33:33,42:42,43:43,44:44}],27:[function(t,e,n){var r=t(106);e.exports=function(t){var e=void 0===t.$expires&&-1||t.$expires;return-1!==e&&1!==e&&(0===e||e<r())}},{106:106}],28:[function(t,e,n){e.exports=function(t){return t._materialized&&!t._source}},{}],29:[function(t,e,n){function r(t,e){var n=t._root,r=n[i];if(r!==e){var o=e[a],s=e[u];s&&(s[a]=o),o&&(o[u]=s),e[a]=void 0,n[i]=e,e[u]=r,r[a]=e}}function o(t,e){var n=t._root,r=e[a],o=e[u];o&&(o[a]=r),r&&(r[u]=o),e[a]=void 0,e===n[i]&&(n[i]=void 0),e===n[s]&&(n[s]=void 0),e[c]=!0,n.expired.push(e)}var i=t(34),s=t(45),u=t(38),a=t(41),c=t(35);e.exports={promote:r,splice:o}},{34:34,35:35,38:38,41:41,45:45}],30:[function(t,e,n){function r(t,e){var n,r,o,i=[];for(r=0,o=e||0,n=t.length;n>o;r++,o++)i[r]=t[o];return i}function o(t,e){var n,r,o,i=[];for(n=0,r=t.length;r>n;n++)i[n]=t[n];for(o=0,r=e.length;r>o;o++)null!==e[o]&&(i[n++]=e[o]);return i}function i(t,e){var n,r,o,i=[];for(n=0,r=t.length;r>n;n++)i[n]=t[n];for(o=0,r=e.length;r>o;o++)i[n++]=e[o];return i}e.exports={fastCat:i,fastCatSkipNulls:o,fastCopy:r}},{}],31:[function(t,e,n){var r=t(11),o=t(23),i=t(27),s=t(143).iterateKeySet,u=t(120),a=t(29).promote;e.exports=function c(t,e,n,p,h,f,l,d,v,y,b,m){var g=m,w=v;if(!n||n&&n.$type||h===p.length)return void o(t,n,p,h,f,l,d,w,y,b,g);var x,_;x=p[h];var S=\"object\"==typeof x,E=h+1,C=!1,A=x;if(S&&(C={},A=s(x,C)),void 0!==A||!C.done){var N=y+1;do{g=!1;var k;null===A?k=n:(k=n[A],w[y]=A,d[h]=A);var O=w,P=N;if(k){var j=k.$type,D=j&&k.value||k;if(E<p.length&&j&&j===u&&!i(k)){b&&o(t,k,p,E,f,l,null,w,P,b,g),a(t,k);var q=r(t,e,e,k,D,f,b);g=!0,k=q[0];var R=q[1];for(O=[],P=R.length,_=0;P>_;++_)O[_]=R[_]}}c(t,e,k,p,E,f,l,d,O,P,b,g),C&&!C.done&&(A=s(x,C))}while(C&&!C.done)}}},{11:11,120:120,143:143,23:23,27:27,29:29}],32:[function(t,e,n){\"use strict\";function r(t){return new r.Model(t)}\"function\"==typeof Promise?r.Promise=Promise:r.Promise=t(151),e.exports=r,r.Model=t(2)},{151:151,2:2}],33:[function(t,e,n){e.exports=t(40)+\"context\"},{40:40}],34:[function(t,e,n){e.exports=t(40)+\"head\"},{40:40}],35:[function(t,e,n){e.exports=t(40)+\"invalidated\"},{40:40}],36:[function(t,e,n){e.exports=t(40)+\"key\"},{40:40}],37:[function(t,e,n){e.exports=\"$modelCreated\"},{}],38:[function(t,e,n){e.exports=t(40)+\"next\"},{40:40}],39:[function(t,e,n){e.exports=t(40)+\"parent\"},{40:40}],40:[function(t,e,n){e.exports=String.fromCharCode(30)},{}],41:[function(t,e,n){e.exports=t(40)+\"prev\"},{40:40}],42:[function(t,e,n){e.exports=t(40)+\"ref-index\"},{40:40}],43:[function(t,e,n){e.exports=t(40)+\"ref\"},{40:40}],44:[function(t,e,n){e.exports=t(40)+\"refs-length\"},{40:40}],45:[function(t,e,n){e.exports=t(40)+\"tail\"},{40:40}],46:[function(t,e,n){e.exports=t(40)+\"version\"},{40:40}],47:[function(t,e,n){function r(t,e,n,o,s,u,c,p,h,f){if(!_(t)&&!t.$type)for(var l in t)if(l[0]!==a&&\"$\"!==l[0]&&m(t,l)){var d=t[l],v=g(d)&&!d.$type,y=i(n,o,s,l,d,v,!1,u,c,p,h,f),w=y[0],x=y[1];w&&(v?r(d,e+1,n,x,w,u,c,p,h,f):A(w,x,l,p)&&C(x,b(w),p,u))}}function o(t,e,n,r,o,s,a,h){if(w(n))return S(n,o,s),[void 0,e];y(s,n);var d=n,v=n.value,b=e;if(n=n[p],null!=n)b=n[c]||e;else{var m=0,g=v.length-1;b=n=e;do{var x=v[m],E=g>m,C=i(e,b,n,x,t,E,!0,r,o,s,a,h);if(n=C[0],_(n))return C;b=C[1]}while(m++<g);if(d[p]!==n){var A=n[l]||0;n[l]=A+1,n[u+A]=d,d[p]=n,d[f]=A}}return[n,b]}function i(t,e,n,r,i,u,a,c,p,h,f,l){for(var v=n.$type;v===d;){var y=o(i,t,n,c,p,h,f,l);if(n=y[0],_(n))return y;e=y[1],v=n&&n.$type}if(void 0!==v)return[n,e];if(null==r){if(u)throw new Error(\"`null` is not allowed in branch key positions.\");n&&(r=n[s])}else e=n,n=e[r];return[n,e]}var s=t(36),u=t(43),a=t(40),c=t(39),p=t(33),h=t(46),f=t(42),l=t(44),d=t(120),v=t(13),y=t(50),b=t(88),m=t(91),g=t(100),w=t(95),x=t(96),_=t(102),S=t(86),E=t(92),C=t(115),A=t(109);e.exports=function(t,e){for(var n=t._root,o=n,i=n.expired,s=E(),u=n._comparator,a=n._errorSelector,p=t._path,f=n.cache,l=p.length?v(t,p).value:f,d=l[c]||f,y=f[h],b=-1,m=e.length;++b<m;){var g=e[b];r(g.json,0,f,d,l,s,i,o,u,a)}var w=f[h],_=n.onChange;x(_)&&y!==w&&_()}},{100:100,102:102,109:109,115:115,120:120,13:13,33:33,36:36,39:39,40:40,42:42,43:43,44:44,46:46,50:50,86:86,88:88,91:91,92:92,95:95,96:96}],48:[function(t,e,n){function r(t,e,n,o,s,u,a,c){var p={},h=e<t.length-1,f=t[e],l=x(f,p);do{var d=i(n,o,s,l,h,!1,u,a,c),v=d[0],b=d[1];v&&(h?r(t,e+1,n,b,v,u,a,c):E(v,b,l,c)&&S(b,y(v),c,u)),l=x(f,p)}while(!p.done)}function o(t,e,n,r,o){if(b(e))return w(e,r,o),[void 0,t];v(o,e);var s=e,p=e.value,l=t;if(e=e[c],null!=e)l=e[a]||t;else{var d=0,y=p.length-1;l=e=t;do{var m=p[d],x=y>d,_=i(t,l,e,m,x,!0,n,r,o);if(e=_[0],g(e))return _;l=_[1]}while(d++<y);if(s[c]!==e){var S=e[f]||0;e[f]=S+1,e[u+S]=s,s[c]=e,s[h]=S}}return[e,l]}function i(t,e,n,r,i,u,a,c,p){for(var h=n.$type;h===l;){var f=o(t,n,a,c,p);if(n=f[0],g(n))return f;e=f[1],h=n.$type}if(void 0!==h)return[n,e];if(null==r){if(i)throw new Error(\"`null` is not allowed in branch key positions.\");n&&(r=n[s])}else e=n,n=e[r];return[n,e]}var s=t(36),u=t(43),a=t(39),c=t(33),p=t(46),h=t(42),f=t(44),l=t(120),d=t(13),v=t(50),y=t(88),b=t(95),m=t(96),g=t(102),w=t(86),x=t(143).iterateKeySet,_=t(92),S=t(115),E=t(109);e.exports=function(t,e){for(var n=t._root,o=n,i=n.expired,s=_(),u=t._path,c=n.cache,h=u.length?d(t,u).value:c,f=h[a]||c,l=c[p],v=-1,y=e.length;++v<y;){var b=e[v];r(b,0,c,f,h,s,i,o)}var g=c[p],w=n.onChange;m(w)&&l!==g&&w()}},{102:102,109:109,115:115,120:120,13:13,143:143,33:33,36:36,39:39,42:42,43:43,44:44,46:46,50:50,86:86,88:88,92:92,95:95,96:96}],49:[function(t,e,n){var r=t(36),o=t(39),i=t(34),s=t(45),u=t(38),a=t(41),c=t(108),p=t(115);e.exports=function(t,e,n,h,f,l){var d=n,v=f;\"number\"!=typeof v&&(v=.75);var y,b,m,g=\"number\"==typeof l,w=h*v;for(b=e.pop();b;)m=b.$size||0,d-=m,g===!0?p(b,m,t,l):(y=b[o])&&c(b,y,b[r],t),b=e.pop();if(d>=h){var x=t[s];for(b=x;d>=w&&b;)x=x[a],m=b.$size||0,d-=m,g===!0&&p(b,m,t,l),b=x;t[s]=t[a]=b,null==b?t[i]=t[u]=void 0:b[u]=void 0}}},{108:108,115:115,34:34,36:36,38:38,39:39,41:41,45:45}],50:[function(t,e,n){var r=t(121),o=t(34),i=t(45),s=t(38),u=t(41),a=t(100);e.exports=function(t,e){if(a(e)&&e.$expires!==r){var n=t[o],c=t[i],p=e[s],h=e[u];e!==n&&(null!=p&&\"object\"==typeof p&&(p[u]=h),null!=h&&\"object\"==typeof h&&(h[s]=p),p=n,null!=n&&\"object\"==typeof n&&(n[u]=e),t[o]=t[s]=n=e,n[s]=p,n[u]=void 0),null!=c&&e!==c||(t[i]=t[u]=c=h||e)}return e}},{100:100,121:121,34:34,38:38,41:41,45:45}],51:[function(t,e,n){var r=t(34),o=t(45),i=t(38),s=t(41);e.exports=function(t,e){var n=t[r],u=t[o],a=e[i],c=e[s];null!=a&&\"object\"==typeof a&&(a[s]=c),null!=c&&\"object\"==typeof c&&(c[i]=a),e===n&&(t[r]=t[i]=a),e===u&&(t[o]=t[s]=c),e[i]=e[s]=void 0,n=u=a=c=void 0}},{34:34,38:38,41:41,45:45}],52:[function(t,e,n){function r(t,e){var n=!1;return function(){if(!n&&!t._disposed){n=!0,t._callbacks[e]=null,t._optimizedPaths[e]=[],t._requestedPaths[e]=[];var r=--t._count;0!==r||t.sent||(t._disposable.dispose(),t.requestQueue.removeRequest(t))}}}function o(t){for(var e=[],n=-1,r=0,o=t.length;o>r;++r)for(var i=t[r],s=0,u=i.length;u>s;++s)e[++n]=i[s];return e}var i=t(59),s=t(60),u=0,a=t(57).GetRequest,c=t(76),p=t(78),h=t(119),f=[],l=function(t,e){this.sent=!1,this.scheduled=!1,this.requestQueue=e,this.id=++u,this.type=a,this._scheduler=t,this._pathMap={},this._optimizedPaths=[],this._requestedPaths=[],this._callbacks=[],this._count=0,this._disposable=null,this._collapsed=null,this._disposed=!1};l.prototype={batch:function(t,e,n){var o=this,i=o._optimizedPaths,u=o._requestedPaths,a=o._callbacks,c=i.length;return i[c]=e,u[c]=t,a[c]=n,++o._count,o.scheduled||(o.scheduled=!0,o._disposable=o._scheduler.schedule(function(){s(o,i,function(t,e){if(o.requestQueue.removeRequest(o),o._disposed=!0,o._count){o._merge(u,t,e);for(var n=0,r=a.length;r>n;++n){var i=a[n];i&&i(t,e)}}})})),r(o,c)},add:function(t,e,n){var o,s,u=this,a=i(t,e,u._pathMap);a?(s=a[2],o=a[1]):(s=t,o=e);var c=!1,p=!1;if(o.length<e.length){c=!0;var h=u._callbacks.length;u._callbacks[h]=n,u._requestedPaths[h]=a[0],u._optimizedPaths[h]=[],++u._count,p=r(u,h)}return[c,s,o,p]},_merge:function(t,e,n){var r=this,i=r.requestQueue.model,s=i._root,u=s.errorSelector,a=s.comparator,l=i._path;i._path=f;var d=o(t);if(e){var v=e;v instanceof Error&&(v={message:v.message}),v.$type||(v={$type:h,value:v});var y=d.map(function(t){return{path:t,value:v}});p(i,y,null,u,a)}else c(i,[{paths:d,jsonGraph:n.jsonGraph}],null,u,a);i._path=l}},e.exports=l},{119:119,57:57,59:59,60:60,76:76,78:78}],53:[function(t,e,n){function r(){this.length=0,this.pending=!1,this.pathmaps=[],s.call(this,this._subscribe)}var o=t(159),i=o.Observer,s=o.Observable,u=o.Disposable,a=o.SerialDisposable,c=o.CompositeDisposable,p=t(9),h=t(143),f=h.iterateKeySet;r.create=function(t,e,n){var r=new this;return r.queue=t,r.model=e,r.index=n,r},r.prototype=Object.create(s.prototype),r.prototype.constructor=r,r.prototype.insertPath=function(t,e,n,r,o){var i=r||0,s=o||t.length-1,u=n||this.pathmaps[s+1]||(this.pathmaps[s+1]=Object.create(null));if(void 0===u||null===u)return!1;var a,c,p=t[i],h={};a=f(p,h);do{if(c=u[a],s>i){if(null==c){if(e)return!1;c=u[a]=Object.create(null)}if(this.insertPath(t,e,c,i+1,s)===!1)return!1}else u[a]=(c||0)+1,this.length+=1;h.done||(a=f(p,h))}while(!h.done);return!0},r.prototype.removePath=function(t,e,n,r){var o=n||0,i=r||t.length-1,s=e||this.pathmaps[i+1];if(void 0===s||null===s)return!0;var u,a,c=0,p=t[o],h={};u=f(p,h);do if(a=s[u],void 0!==a&&null!==a){if(i>o){c+=this.removePath(t,a,o+1,i);var l=void 0;for(l in a)break;void 0===l&&delete s[u]}else a=s[u]=(a||1)-1,0===a&&delete s[u],c+=1,this.length-=1;h.done||(u=f(p,h))}while(!h.done);return c},r.prototype.getSourceObserver=function(t){var e=this;return i.create(function(n){n.jsonGraph=n.jsonGraph||n.jsong||n.values||n.value,n.index=e.index,t.onNext(n)},function(e){t.onError(e)},function(){t.onCompleted()})},r.prototype._subscribe=function(t){var e=this,n=this.queue;e.pending=!0;var r=!1,o=new a,i=u.create(function(){r||(r=!0,n&&n._remove(e))}),s=new c(o,i);try{o.setDisposable(this.model._source[this.method](this.getSourceArgs()).subscribe(this.getSourceObserver(t)))}catch(h){throw new p(h)}return s},e.exports=r},{143:143,159:159,9:9}],54:[function(t,e,n){function r(t,e){this.total=0,this.model=t,this.requests=[],this.scheduler=e}var o=t(58),i=t(40),s=t(90),u=t(100),a=t(143);r.prototype.set=function(t){return t.paths=a.collapse(t.paths),o.create(this.model,t)},r.prototype._remove=function(t){var e=this.requests,n=e.indexOf(t);-1!==n&&e.splice(n,1)},r.prototype.distributePaths=function(t,e,n){var r,o,i=this.model,s=-1,u=t.length,a=-1,c=e.length,p=[];t:for(;++s<u;){var h=t[s];for(a=-1;++a<c;)if(o=e[a],o.insertPath(h,o.pending)){p[a]=o;continue t}r||(r=n.create(this,i,this.total++),e[a]=r,p[c++]=r),r.insertPath(h,!1)}var f=[],l=-1;for(a=-1;++a<c;)o=p[a],null!=o&&(f[++l]=o);return f},r.prototype.mergeJSONGraphs=function(t,e){var n=0,r=[],o=[],a=[],c=t.index,p=e.index;t.index=Math.max(c,p),r[-1]=t.jsonGraph||{},o[-1]=e.jsonGraph||{};t:for(;n>-1;){for(var h=r[n-1],f=o[n-1],l=a[n-1]||(a[n-1]=Object.keys(f));l.length>0;){var d=l.pop();if(d[0]!==i)if(h.hasOwnProperty(d)){var v=h[d],y=s(v),b=f[d],m=s(b);if(u(v)&&u(b)&&!y&&!m){r[n]=v,o[n]=b,n+=1;continue t}p>c&&(h[d]=b)}else h[d]=f[d]}n-=1}return t},e.exports=r},{100:100,143:143,40:40,58:58,90:90}],55:[function(t,e,n){function r(t,e){this.model=t,this.scheduler=e,this.requests=this._requests=[]}var o=t(54),i=t(56);r.prototype.get=i.prototype.get,r.prototype.removeRequest=i.prototype.removeRequest,r.prototype.set=o.prototype.set,r.prototype.call=o.prototype.call,e.exports=r},{54:54,56:56}],56:[function(t,e,n){function r(t,e){this.model=t,this.scheduler=e,this.requests=this._requests=[]}var o=t(57),i=t(52);r.prototype={setScheduler:function(t){this.scheduler=t},get:function(t,e,n){function r(){v||(--h,0===h&&n())}var s,u,a,c=this,p=[],h=0,f=c._requests,l=e,d=t,v=!1;for(s=0,u=f.length;u>s;++s)if(a=f[s],a.type===o.GetRequest){if(a.sent){var y=a.add(d,l,r);y[0]&&(d=y[1],l=y[2],p[p.length]=y[3],++h)}else a.batch(d,l,r),l=[],d=[],++h;if(!l.length)break}if(l.length){a=new i(c.scheduler,c),f[f.length]=a,++h;var b=a.batch(d,l,r);p[p.length]=b}return function(){if(!v&&0!==h){v=!0;for(var t=p.length,e=0;t>e;++e)p[e]()}}},removeRequest:function(t){for(var e=this._requests,n=e.length;--n>=0;)if(e[n].id===t.id){e.splice(n,1);break}}},e.exports=r},{52:52,57:57}],57:[function(t,e,n){e.exports={GetRequest:\"GET\"}},{}],58:[function(t,e,n){function r(){s.call(this)}var o=t(159),i=o.Observer,s=t(53),u=t(83),a=t(76),c=t(78),p=new Array(0);r.create=function(t,e){var n=new r;return n.model=t,n.jsonGraphEnvelope=e,n},r.prototype=Object.create(s.prototype),r.prototype.constructor=r,r.prototype.method=\"set\",r.prototype.insertPath=function(){return!1},r.prototype.removePath=function(){return 0},r.prototype.getSourceArgs=function(){return this.jsonGraphEnvelope},r.prototype.getSourceObserver=function(t){var e=this.model,n=e._path,r=this.jsonGraphEnvelope.paths,o=e._root,h=o.errorSelector,f=o.comparator;return s.prototype.getSourceObserver.call(this,i.create(function(o){e._path=p;var i=a(e,[{paths:r,jsonGraph:o.jsonGraph}],null,h,f);o.paths=i[1],e._path=n,t.onNext(o)},function(o){e._path=p,c(e,u(r,function(t){return{path:t,value:o}}),null,h,f),e._path=n,t.onError(o)},function(){t.onCompleted()}))},e.exports=r},{159:159,53:53,76:76,78:78,83:83}],59:[function(t,e,n){var r=t(143).hasIntersection,o=t(84);e.exports=function(t,e,n){for(var i=[],s=[],u=[],a=-1,c=-1,p=!1,h=0,f=e.length;f>h;++h){var l=e[h],d=n[l.length];d&&r(d,l,0)?(!p&&h>0&&(s=o(t,0,h),i=o(e,0,h)),u[++a]=t[h],p=!0):p&&(i[++c]=l,s[c]=t[h])}return p?[u,i,s]:null}},{143:143,84:84}],60:[function(t,e,n){var r=t(143),o=r.toTree,i=r.toPaths;e.exports=function(t,e,n){if(0===t._count)return void t.requestQueue.removeRequest(t);t.sent=!0,t.scheduled=!1;for(var r=t._pathMap,s=Object.keys(e),u=0,a=s.length;a>u;++u)for(var c=e[u],p=0,h=c.length;h>p;++p){var f=c[p],l=f.length;if(r[l]){var d=r[l];d[d.length]=f}else r[l]=[f]}for(var v=Object.keys(r),y=0,b=v.length;b>y;++y){var m=v[y];r[m]=o(r[m])}var g,w=t._collasped=i(r);t.requestQueue.model._source.get(w).subscribe(function(t){g=t},function(t){n(t,g)},function(){n(null,g)})}},{143:143}],61:[function(t,e,n){function r(t){u.call(this,t||i)}function o(t){return s.Observable.defer(function(){return t})}function i(t){function e(t){function e(t,e){if(Boolean(e.invalidated))t.invalidations.push(t.localThisPath.concat(e.path));else{var n=e.path,r=e.value;Boolean(r)&&\"object\"==typeof r&&r.$type===f?t.references.push({path:i(n),value:e.value}):t.values.push({path:i(n),value:e.value})}return t}function n(t){var e=t.values.concat(t.references);return e.length>0?o(g.set.apply(g,e)._toJSONG()).map(function(e){return{results:t,envelope:e}}):u[\"return\"]({results:t,envelope:{jsonGraph:{},paths:[]}})}function r(t){var e,n=t.envelope,r=t.results,c=r.values,p=r.references,h=r.invalidations,f=c.map(a).map(i),l=p.reduce(s,[]),d=b.map(i),v=l.concat(d);return e=v.length>0?o(m.get.apply(m,f.concat(v))._toJSONG()):u[\"return\"](n),e.doAction(function(t){t.invalidated=h})}function s(t,e){var n=e.path;return t.push.apply(t,y.map(function(t){return n.concat(t)})),t}function a(t){return t.path}var c=t&&t.localFn;if(\"function\"==typeof c){var p=t.model,h=p._path,l=c.apply(p,v).reduce(e,{values:[],references:[],invalidations:[],localThisPath:h}).flatMap(n).flatMap(r);return u[\"return\"](l)}return u.empty()}function n(t){function e(t){var e=t.invalidated;return e&&e.length&&m.invalidate.apply(m,e),t}return t&&\"object\"==typeof t?s.Observable.defer(function(){\nvar e;try{e=t.call(x,v,y,b)}catch(n){e=u[\"throw\"](new p(n))}return e}).map(e):u.empty()}function r(t){return o(g.set(t)).reduce(function(t){return t},null).map(function(){return{invalidated:t.invalidated,paths:t.paths.map(function(t){return t.slice(w.length)})}})}function i(t){return _.concat(t)}var c=this.args,l=this.model,d=h.fromPath(c[0]),v=c[1]||[],y=(c[2]||[]).map(h.fromPath),b=(c[3]||[]).map(h.fromPath),m=l._clone({_path:[]}),g=m.withoutDataSource(),w=l._path,x=w.concat(d),_=x.slice(0,-1),S=o(l.withoutDataSource().get(d)).map(function(t){for(var e=t.json,n=-1,r=d.length;e&&++n<r;)e=e[d[n]];var o=m._derefSync(_).boxValues();return{model:o,localFn:e}}).flatMap(e).defaultIfEmpty(n(l._source)).mergeAll().flatMap(r),E=new a;return E.add(S.subscribe(function(e){var n=e.paths,r=e.invalidated,i=l.get.apply(l,n);\"AsJSONG\"===t.outputFormat&&(i=o(i._toJSONG()).doAction(function(t){t.invalidated=r})),E.add(i.subscribe(t))},function(e){t.onError(e)})),E}var s=t(159)&&t(158),u=s.Observable,a=s.CompositeDisposable,c=t(64),p=t(9),h=t(134),f=t(120);r.create=c.create,r.prototype=Object.create(u.prototype),r.prototype.constructor=r,r.prototype.invokeSourceRequest=function(t){return this},r.prototype.ensureCollect=function(t){return this},r.prototype.initialize=function(){return this},e.exports=r},{120:120,134:134,158:158,159:159,64:64,9:9}],62:[function(t,e,n){function r(t){i.call(this,t)}var o=t(159),i=o.Observable,s=t(64),u=t(134),a=t(88),c=t(49),p=t(81),h=t(46),f=Array.isArray,l=t(101),d=t(98),v=t(99);r.create=s.create,r.prototype=Object.create(i.prototype),r.prototype.constructor=r,r.prototype.subscribeCount=0,r.prototype.subscribeLimit=10,r.prototype.initialize=function(){for(var t,e,n=this.model,r=this.outputFormat||\"AsPathMap\",o=this.isProgressive,i=[{}],s=[],a=this.args,c=-1,h=a.length;++c<h;){var y,b=a[c];f(b)||\"string\"==typeof b?(b=u.fromPath(b),y=\"PathValues\"):l(b)?(b.path=u.fromPath(b.path),y=\"PathValues\"):v(b)?y=\"JSONGs\":d(b)&&(y=\"PathMaps\"),e!==y&&(e=y,t={inputType:y,arguments:[]},s.push(t),t.values=i),t.arguments.push(b)}return this.boundPath=p(n._path),this.groups=s,this.outputFormat=r,this.isProgressive=o,this.isCompleted=!1,this.isMaster=null==n._source,this.values=i,this},r.prototype.invokeSourceRequest=function(t){return this},r.prototype.ensureCollect=function(t){var e=this[\"finally\"](function(){var e=t._root,n=e.cache;e.collectionScheduler.schedule(function(){c(e,e.expired,a(n),t._maxSize,t._collectRatio,n[h])})});return new this.constructor(function(t){return e.subscribe(t)})},e.exports=r},{101:101,134:134,159:159,46:46,49:49,64:64,81:81,88:88,98:98,99:99}],63:[function(t,e,n){function r(t){u.call(this,t||o)}function o(t){for(var e=this.model,n=this.method,r=this.groups,o=-1,i=r.length;++o<i;){var u=r[o],a=u.inputType,c=u.arguments;if(c.length>0){var p=\"_\"+n+a+\"AsJSON\",h=e[p];h(e,c)}}return t.onCompleted(),s.empty}var i=t(159),s=i.Disposable,u=t(62);r.create=u.create,r.prototype=Object.create(u.prototype),r.prototype.method=\"invalidate\",r.prototype.constructor=r,e.exports=r},{159:159,62:62}],64:[function(t,e,n){function r(t){this._subscribe=t}function o(t){var e=this.model,n=new this.type;return n.model=e,n.args=this.args,n.outputFormat=t.outputFormat||\"AsPathMap\",n.isProgressive=t.isProgressive||!1,n.subscribeCount=0,n.subscribeLimit=t.retryLimit||10,n.initialize().invokeSourceRequest(e).ensureCollect(e).subscribe(t)}var i=t(32),s=t(159)&&t(158),u=s.Observable,a=t(84),c=t(105),p={outputFormat:{value:\"AsJSONG\"}},h={isProgressive:{value:!0}};r.create=function(t,e){var n=new r(o);return n.args=e,n.type=this,n.model=t,n},r.prototype=Object.create(u.prototype),r.prototype.constructor=r,r.prototype._mixin=function(){var t=this,e=a(arguments);return new t.constructor(function(n){return t.subscribe(e.reduce(function(t,e){return Object.create(t,e)},n))})},r.prototype._toJSONG=function(){return this._mixin(p)},r.prototype.progressively=function(){return this._mixin(h)},r.prototype.subscribe=function(t,e,n){var r=t;r&&\"object\"==typeof r||(r={onNext:t||c,onError:e||c,onCompleted:n||c});var o=this._subscribe(r);switch(typeof o){case\"function\":return{dispose:o};case\"object\":return o||{dispose:c};default:return{dispose:c}}},r.prototype.then=function(t,e){var n=this;return new i.Promise(function(t,e){var r,o=!1;n.toArray().subscribe(function(t){r=t.length<=1?t[0]:t},function(t){o=!0,e(t)},function(){o===!1&&t(r)})}).then(t,e)},e.exports=r},{105:105,158:158,159:159,32:32,84:84}],65:[function(t,e,n){function r(t){l.call(this,t||o)}function o(t){return this.isCompleted?s.call(this,t):i.call(this,t)}function i(t){if(this.subscribeCount++>this.subscribeLimit)return t.onError(\"Loop kill switch thrown.\"),h.empty;for(var e=[],n=[],r=this.model,o=this.isMaster,i=r._root,c=this.outputFormat,p=i.errorSelector,f=this.method,l=this.groups,d=-1,y=l.length;++d<y;){var b=l[d],m=b.inputType,g=b.arguments;if(g.length>0){var w=\"_\"+f+m+c,x=r[w],_=x(r,g,null,p);n.push.apply(n,_[1]),\"PathValues\"===m?e.push.apply(e,g.map(u)):\"JSONGs\"===m?e.push.apply(e,v(g,a)):e.push.apply(e,_[0])}}return this.requestedPaths=e,o?(this.isCompleted=!0,s.call(this,t)):void t.onError({method:f,optimizedPaths:n,invokeSourceRequest:!0})}function s(t){var e=new f(this.model,this.requestedPaths);return\"AsJSONG\"===this.outputFormat&&(e=e._toJSONG()),this.isProgressive&&(e=e.progressively()),e.subscribe(t)}function u(t){return t.path}function a(t){return t.paths}var c=t(159),p=c.Observable,h=c.Disposable,f=t(67),l=t(62),d=t(9),v=t(82),y=new Array(0);r.create=l.create,r.prototype=Object.create(l.prototype),r.prototype.method=\"set\",r.prototype.constructor=r,r.prototype.invokeSourceRequest=function(t){var e=this,n=this[\"catch\"](function(r){var o;if(r&&r.invokeSourceRequest===!0){var i={},s=t._path,u=r.optimizedPaths;t._path=y,t._getPathValuesAsJSONG(t._materialize().withoutDataSource(),u,[i]),t._path=s,o=t._request.set(i)[\"do\"](function(t){e.isCompleted=u.length===t.paths.length},function(){e.isCompleted=!0}).materialize().flatMap(function(t){if(\"C\"===t.kind)return p.empty();if(\"E\"===t.kind){var e=t.exception;if(d.is(e))return p[\"throw\"](t.exception)}return n})}else o=p[\"throw\"](r);return o});return new this.constructor(function(t){return n.subscribe(t)})},e.exports=r},{159:159,62:62,67:67,82:82,9:9}],66:[function(t,e,n){var r=function(t){this.disposed=!1,this.currentDisposable=t};r.prototype={dispose:function(){if(!this.disposed&&this.currentDisposable){this.disposed=!0;var t=this.currentDisposable;t.dispose?t.dispose():t()}}},e.exports=r},{}],67:[function(t,e,n){var r=t(64),o=t(68),i=t(69),s={dispose:function(){}},u=t(159).Observable,a=e.exports=function(t,e,n,r){this.model=t,this.currentRemainingPaths=e,this.isJSONGraph=n||!1,this.isProgressive=r||!1};a.prototype=Object.create(u.prototype),a.prototype.subscribe=r.prototype.subscribe,a.prototype.then=r.prototype.then,a.prototype._toJSONG=function(){return new a(this.model,this.currentRemainingPaths,!0,this.isProgressive)},a.prototype.progressively=function(){return new a(this.model,this.currentRemainingPaths,this.isJSONGraph,!0)},a.prototype._subscribe=function(t){var e=[{}],n=[],r=t.isJSONG=this.isJSONGraph,u=this.isProgressive,a=o(this.model,this.currentRemainingPaths,t,u,r,e,n);return a?i(this,this.model,a,t,e,n,1):s}},{159:159,64:64,68:68,69:69}],68:[function(t,e,n){var r=t(19),o=r.getWithPathsAsJSONGraph,i=r.getWithPathsAsPathMap;e.exports=function(t,e,n,r,s,u,a){var c;if(c=s?o(t,e,u):i(t,e,u),c.criticalError)return n.onError(c.criticalError),null;var p=c.hasValue,h=!c.requestedMissingPaths||!t._source,f=u[0].json||u[0].jsonGraph;if(c.errors)for(var l=c.errors,d=a.length,v=0,y=l.length;y>v;++v,++d)a[d]=l[v];if(p&&r||f&&h)try{++t._root.syncRefCount,n.onNext(u[0])}catch(b){throw b}finally{--t._root.syncRefCount}return h?(a.length?n.onError(a):n.onCompleted(),null):c}},{19:19}],69:[function(t,e,n){var r=t(68),o=t(10),i=t(30).fastCat,s=t(49),u=t(88),a=t(66),c=t(46);e.exports=function p(t,e,n,h,f,l,d){if(10===d)throw new o;var v=e._request,y=n.requestedMissingPaths,b=n.optimizedMissingPaths,m=new a,g=[],w=e._path;if(w.length)for(var x=0,_=y.length;_>x;++x)g[x]=i(w,y[x]);else g=y;var S=v.get(g,b,function(){var n=r(e,y,h,t.isProgressive,t.isJSONGraph,f,l);if(n)m.currentDisposable=p(t,e,n,h,f,l,d+1);else{var o=e._root,i=o.cache,a=i[c];s(o,o.expired,u(i),e._maxSize,e._collectRatio,a)}});return m.currentDisposable=S,m}},{10:10,30:30,46:46,49:49,66:66,68:68,88:88}],70:[function(t,e,n){var r=t(67);e.exports=function(t){return new r(this,t)}},{67:67}],71:[function(t,e,n){var r=t(134),o=t(64),i=t(72),s=t(116),u=t(67);e.exports=function(){var t=s(arguments,i,\"get\");if(t!==!0)return new o(function(e){e.onError(t)});var e=r.fromPathsOrPathValues(arguments);return new u(this,e)}},{116:116,134:134,64:64,67:67,72:72}],72:[function(t,e,n){e.exports={path:!0,pathSyntax:!0}},{}],73:[function(t,e,n){function r(){}var o=t(123),i=t(159),s=i.Disposable;r.prototype.schedule=function(t){return o(t),s.empty},r.prototype.scheduleWithState=function(t,e){var n=this;return o(function(){e(n,t)}),s.empty},e.exports=r},{123:123,159:159}],74:[function(t,e,n){function r(){}var o=t(159),i=o.Disposable;r.prototype.schedule=function(t){return t(),i.empty},r.prototype.scheduleWithState=function(t,e){return e(this,t),i.empty},e.exports=r},{159:159}],75:[function(t,e,n){function r(t){this.delay=t}var o=t(159),i=o.Disposable;r.prototype.schedule=function(t){var e=setTimeout(t,this.delay);return i.create(function(){void 0!==e&&(clearTimeout(e),e=void 0)})},r.prototype.scheduleWithState=function(t,e){var n=this,r=setTimeout(function(){e(n,t)},this.delay);return i.create(function(){void 0!==r&&(clearTimeout(r),r=void 0)})},e.exports=r},{159:159}],76:[function(t,e,n){function r(t,e,n,o,s,u,a,c,p,h,f,d,v,y,b,g,w){for(var x={},_=e<t.length-1,S=t[e],E=m(S,x),C=d.index;;){f.depth=e;var A=i(n,o,s,u,a,c,E,_,!1,f,d,v,y,b,g,w);f[e]=E,f.index=e,d[d.index++]=E;var N=A[0],k=A[1];if(N&&(_?r(t,e+1,n,k,N,u,A[3],A[2],p,h,f,d,v,y,b,g,w):(l(b,N),p.push(f.slice(0,f.index+1)),h.push(d.slice(0,d.index)))),E=m(S,x),x.done)break;d.index=C}}function o(t,e,n,r,o,s,c,f,v,m,g){var w=e.value;if(s.splice(0,s.length),s.push.apply(s,w),d(e))return s.index=w.length,b(e,f,v),[void 0,t,r,n];l(v,e);var x=0,_=e,S=w.length-1,E=e=t,C=r=n;do{var A=w[x],N=S>x,k=i(t,E,e,n,C,r,A,N,!0,o,s,c,f,v,m,g);if(e=k[0],y(e))return s.index=x,k;E=k[1],r=k[2],C=k[3]}while(x++<S);if(s.index=x,_[a]!==e){var O=e[h]||0;e[h]=O+1,e[u+O]=_,_[a]=e,_[p]=O}return[e,E,r,C]}function i(t,e,n,r,i,u,a,c,p,h,l,d,v,b,m,g){for(var x=n.$type;x===f;){var _=o(t,n,r,u,h,l,d,v,b,m,g);if(n=_[0],y(n))return _;e=_[1],u=_[2],i=_[3],x=n.$type}if(void 0!==x)return[n,e,u,i];if(null==a){if(c)throw new Error(\"`null` is not allowed in branch key positions.\");n&&(a=n[s])}else e=n,i=u,n=e[a],u=i&&i[a];return n=w(e,n,u,a,h,l,d,v,b,m,g),[n,e,u,i]}var s=t(36),u=t(43),a=t(33),c=t(46),p=t(42),h=t(44),f=t(120),l=t(50),d=t(94),v=t(96),y=t(102),b=t(86),m=t(143).iterateKeySet,g=t(92),w=t(103);e.exports=function(t,e,n,o,i){for(var s=t._root,u=s,a=s.expired,p=g(),h=s.cache,f=h[c],l=[],d=[],y=[],b=[],m=-1,w=e.length;++m<w;)for(var x=e[m],_=x.paths,S=x.jsonGraph,E=-1,C=_.length;++E<C;){var A=_[E];d.index=0,r(A,0,h,h,h,S,S,S,y,b,l,d,p,a,u,i,o)}var N=h[c],k=s.onChange;return v(k)&&f!==N&&k(),[y,b]}},{102:102,103:103,120:120,143:143,33:33,36:36,42:42,43:43,44:44,46:46,50:50,86:86,92:92,94:94,96:96}],77:[function(t,e,n){function r(t,e,n,o,u,a,c,p,h,f,l,d,v,y){var b=s(t);if(b&&b.length)for(var g=0,x=b.length,_=h.index;;){var S=b[g],E=t[S],C=w(E)&&!E.$type;p.depth=e;var A=i(n,o,u,S,E,C,!1,p,h,f,l,d,v,y);p[e]=S,p.index=e,h[h.index++]=S;var N=A[0],k=A[1];if(N&&(C?r(E,e+1,n,k,N,a,c,p,h,f,l,d,v,y):(m(d,N),a.push(p.slice(0,p.index+1)),c.push(h.slice(0,h.index)))),++g>=x)break;h.index=_}}function o(t,e,n,r,o,s,u,c,f,v){var y=n.value;if(o.splice(0,o.length),o.push.apply(o,y),x(n))return o.index=y.length,E(n,u,c),[void 0,e];m(c,n);var b=n,g=e;if(n=n[h],null!=n)g=n[p]||e,o.index=y.length;else{var w=0,_=y.length-1;g=n=e;do{var C=y[w],A=_>w,N=i(e,g,n,C,t,A,!0,r,o,s,u,c,f,v);if(n=N[0],S(n))return o.index=w,N;g=N[1]}while(w++<_);if(o.index=w,b[h]!==n){var k=n[d]||0;n[d]=k+1,n[a+k]=b,b[h]=n,b[l]=k}}return[n,g]}function i(t,e,n,r,i,s,a,c,p,h,f,l,d,y){for(var b=n.$type;b===v;){var m=o(i,t,n,c,p,h,f,l,d,y);if(n=m[0],S(n))return m;e=m[1],b=n&&n.$type}if(void 0!==b)return[n,e];if(null==r){if(s)throw new Error(\"`null` is not allowed in branch key positions.\");n&&(r=n[u])}else e=n,n=e[r];return n=A(e,n,r,i,s,a,c,p,h,f,l,d,y),[n,e]}function s(t){if(w(t)&&!t.$type){var e=[],n=0;b(t)&&(e[n++]=\"length\");for(var r in t)r[0]!==c&&\"$\"!==r[0]&&g(t,r)&&(e[n++]=r);return e}}var u=t(36),a=t(43),c=t(40),p=t(39),h=t(33),f=t(46),l=t(42),d=t(44),v=t(120),y=t(13),b=Array.isArray,m=t(50),g=t(91),w=t(100),x=t(95),_=t(96),S=t(102),E=t(86),C=t(92),A=t(104);e.exports=function(t,e,n,o,i){for(var s=t._root,u=s,a=s.expired,c=C(),h=t._path,l=s.cache,d=h.length?y(t,h).value:l,v=d[p]||l,b=l[f],m=[],g=[],w=[],x=h.length,S=-1,E=e.length;++S<E;){var A=e[S],N=h.slice(0);N.index=x,r(A.json,0,l,v,d,g,w,m,N,c,a,u,i,o)}var k=l[f],O=s.onChange;return _(O)&&b!==k&&O(),[g,w]}},{100:100,102:102,104:104,120:120,13:13,33:33,36:36,39:39,40:40,42:42,43:43,44:44,46:46,50:50,86:86,91:91,92:92,95:95,96:96}],78:[function(t,e,n){function r(t,e,n,o,s,u,a,c,p,h,f,l,d,y,b){for(var m={},g=n<e.length-1,x=e[n],_=w(x,m),S=h.index;;){p.depth=n;var E=i(o,s,u,_,t,g,!1,p,h,f,l,d,y,b);p[n]=_,p.index=n,h[h.index++]=_;var C=E[0],A=E[1];if(C&&(g?r(t,e,n+1,o,A,C,a,c,p,h,f,l,d,y,b):(v(d,C),a.push(p.slice(0,p.index+1)),c.push(h.slice(0,h.index)))),_=w(x,m),m.done)break;h.index=S}}function o(t,e,n,r,o,s,p,l,d,b){var w=n.value;if(o.splice(0,o.length),o.push.apply(o,w),y(n))return o.index=w.length,g(n,p,l),[void 0,e];v(l,n);var x=n,_=e;if(n=n[c],null!=n)_=n[a]||e,o.index=w.length;else{var S=0,E=w.length-1;_=n=e;do{var C=w[S],A=E>S,N=i(e,_,n,C,t,A,!0,r,o,s,p,l,d,b);if(n=N[0],m(n))return o.index=S,N;_=N[1]}while(S++<E);if(o.index=S,x[c]!==n){var k=n[f]||0;n[f]=k+1,n[u+k]=x,x[c]=n,x[h]=k}}return[n,_]}function i(t,e,n,r,i,u,a,c,p,h,f,d,v,y){for(var b=n.$type;b===l;){var g=o(i,t,n,c,p,h,f,d,v,y);if(n=g[0],m(n))return g;e=g[1],b=n.$type}if(void 0!==b)return[n,e];if(null==r){if(u)throw new Error(\"`null` is not allowed in branch key positions.\");n&&(r=n[s])}else e=n,n=e[r];return n=_(e,n,r,i,u,a,c,p,h,f,d,v,y),[n,e]}var s=t(36),u=t(43),a=t(39),c=t(33),p=t(46),h=t(42),f=t(44),l=t(120),d=t(13),v=t(50),y=t(95),b=t(96),m=t(102),g=t(86),w=t(143).iterateKeySet,x=t(92),_=t(104);e.exports=function(t,e,n,o,i){for(var s=t._root,u=s,c=s.expired,h=x(),f=t._path,l=s.cache,v=f.length?d(t,f).value:l,y=v[a]||l,m=l[p],g=[],w=[],_=[],S=f.length,E=-1,C=e.length;++E<C;){var A=e[E],N=A.path,k=A.value,O=f.slice(0);O.index=S,r(k,N,0,l,y,v,w,_,g,O,h,c,u,i,o)}var P=l[p],j=s.onChange;return b(j)&&m!==P&&j(),[w,_]}},{102:102,104:104,120:120,13:13,143:143,33:33,36:36,39:39,42:42,43:43,44:44,46:46,50:50,86:86,92:92,95:95,96:96}],79:[function(t,e,n){var r=t(130),o=t(64),i=t(101);e.exports=function(t,e){for(var n=i(t)?t:r.pathValue(t,e),s=0,u=n.path,a=u.length;++s<a;)if(\"object\"==typeof u[s])return new o(function(t){t.onError(new Error(\"Paths must be simple paths\"))});var c=this;return new o(function(t){return c._set(n).subscribe(function(e){for(var n=e.json,r=-1,o=u.length;n&&++r<o;)n=n[u[r]];t.onNext(n)},function(e){t.onError(e)},function(){t.onCompleted()})})}},{101:101,130:130,64:64}],80:[function(t,e,n){var r=t(134),o=t(101),i=t(78);e.exports=function(t,e,n,s){var u=r.fromPath(t),a=e,c=n,p=s;if(o(u)?(p=c,c=a,a=u):a={path:u,value:a},o(a)===!1)throw new Error(\"Model#setValueSync must be called with an Array path.\");return\"function\"!=typeof c&&(c=this._root._errorSelector),\"function\"!=typeof p&&(p=this._root._comparator),this._syncCheck(\"setValueSync\")?(i(this,[a]),this._getValueSync(this,a.path).value):void 0}},{101:101,134:134,78:78}],81:[function(t,e,n){e.exports=function(t){if(!t)return t;for(var e=-1,n=t.length,r=[];++e<n;)r[e]=t[e];return r}},{}],82:[function(t,e,n){e.exports=function(t,e){for(var n=-1,r=-1,o=t.length,i=[];++r<o;)for(var s=e(t[r],r,t),u=-1,a=s.length;++u<a;)i[++n]=s[u];return i}},{}],83:[function(t,e,n){e.exports=function(t,e){for(var n=-1,r=t.length,o=new Array(r);++n<r;)o[n]=e(t[n],n,t);return o}},{}],84:[function(t,e,n){e.exports=function(t,e,n){var r=e||0,o=-1,i=t.length-r;0>i&&(i=0),n>0&&i>n&&(i=n);for(var s=new Array(i);++o<i;)s[o]=t[o+r];return s}},{}],85:[function(t,e,n){var r=t(40),o=t(91),i=Array.isArray,s=t(100);e.exports=function(t){var e=t;if(s(e)){e=i(t)?[]:{};var n=t;for(var u in n)u[0]!==r&&o(n,u)&&(e[u]=n[u])}return e}},{100:100,40:40,91:91}],86:[function(t,e,n){var r=t(51),o=t(35);e.exports=function(t,e,n){return t[o]||(t[o]=!0,e.push(t),r(n,t)),t}},{35:35,51:51}],87:[function(t,e,n){var r=t(100);e.exports=function(t){return r(t)&&t.$expires||void 0}},{100:100}],88:[function(t,e,n){var r=t(100);e.exports=function(t){return r(t)&&t.$size||0}},{100:100}],89:[function(t,e,n){var r=t(100);e.exports=function(t){return r(t)&&t.$timestamp||void 0}},{100:100}],90:[function(t,e,n){var r=t(100);e.exports=function(t,e){var n=r(t)&&t.$type||void 0;return e&&n?\"branch\":n}},{100:100}],91:[function(t,e,n){var r=t(100),o=Object.prototype.hasOwnProperty;e.exports=function(t,e){return r(t)&&o.call(t,e)}},{100:100}],92:[function(t,e,n){var r=1;e.exports=function(){return r++}},{}],93:[function(t,e,n){var r=t(36),o=t(39),i=t(46);e.exports=function(t,e,n,s){return t[r]=n,t[o]=e,t[i]=s,e[n]=t,t}},{36:36,39:39,46:46}],94:[function(t,e,n){var r=t(106),o=t(122),i=t(121);e.exports=function(t){var e=t.$expires;return null!=e&&e!==i&&e!==o&&e<r()}},{106:106,121:121,122:122}],95:[function(t,e,n){var r=t(106),o=t(122),i=t(121);e.exports=function(t){var e=t.$expires;return null!=e&&e!==i&&(e===o||e<r())}},{106:106,121:121,122:122}],96:[function(t,e,n){var r=\"function\";e.exports=function(t){return Boolean(t)&&typeof t===r}},{}],97:[function(t,e,n){var r=t(40);e.exports=function(t){return\"$size\"===t||t&&t.charAt(0)===r}},{40:40}],98:[function(t,e,n){var r=t(100);e.exports=function(t){return r(t)&&\"json\"in t}},{100:100}],99:[function(t,e,n){var r=Array.isArray,o=t(100);e.exports=function(t){return o(t)&&r(t.paths)&&(o(t.jsonGraph)||o(t.jsong)||o(t.json)||o(t.values)||o(t.value))}},{100:100}],100:[function(t,e,n){var r=\"object\";e.exports=function(t){return null!==t&&typeof t===r}},{}],101:[function(t,e,n){var r=Array.isArray,o=t(100);e.exports=function(t){return o(t)&&(r(t.path)||\"string\"==typeof t.path)}},{100:100}],102:[function(t,e,n){var r=\"object\";e.exports=function(t){return null==t||typeof t!==r}},{}],103:[function(t,e,n){var r=t(36),o=t(39),i=t(120),s=t(119),u=t(88),a=t(89),c=t(100),p=t(95),h=t(96),f=t(50),l=t(117),d=t(93),v=t(86),y=t(110),b=t(115),m=t(107);e.exports=function(t,e,n,g,w,x,_,S,E,C,A){var N,k,O,P,j,D,q;if(e===n){if(null===n)return e=l(n,void 0,n),t=b(t,-e.$size,E,_),e=d(e,t,g),f(E,e),e;if(void 0===n)return n;if(P=c(e),P&&(k=e.$type,null==k))return null==e[o]&&(e[r]=g,e[o]=t),e}else P=c(e),P&&(k=e.$type);if(k!==i){if(j=c(n),j&&(O=n.$type),P&&!k&&(null==n||j&&!O))return e}else{if(null==n)return p(e)?void v(e,S,E):e;if(j=c(n),j&&(O=n.$type,O===i))if(e===n){if(null!=e[o])return e}else if(D=e.$timestamp,q=n.$timestamp,!p(e)&&!p(n)&&D>q)return}if(k&&j&&!O)return d(y(e,n,t,g,E),t,g);if(O||!j){if(O===s&&h(A)&&(n=A(m(w,g),n)),O&&e===n)null==e[o]&&(e=l(e,k,e.value),t=b(t,-e.$size,E,_),e=d(e,t,g,_));else{var R=!0;!k&&P||(R=a(n)<a(e)==!1,(k||O)&&h(C)&&(R=!C(e,n,x.slice(0,x.index)))),R&&(n=l(n,O,O?n.value:n),N=u(e)-u(n),e=y(e,n,t,g,E),t=b(t,N,E,_),e=d(e,t,g,_))}p(e)?v(e,S,E):f(E,e)}else null==e&&(e=d(n,t,g));return e}},{100:100,107:107,110:110,115:115,117:117,119:119,120:120,36:36,39:39,50:50,86:86,88:88,89:89,93:93,95:95,96:96}],104:[function(t,e,n){var r=t(120),o=t(119),i=t(90),s=t(88),u=t(89),a=t(95),c=t(102),p=t(96),h=t(117),f=t(86),l=t(93),d=t(110),v=t(115),y=t(114),b=t(107);e.exports=function(t,e,n,m,g,w,x,_,S,E,C,A,N){var k=i(e,w);if(g||w)k&&a(e)&&(k=\"expired\",f(e,E,C)),(k&&k!==r||c(e))&&(e=d(e,{},t,n,C),e=l(e,t,n,S),e=y(e,S));else{var O=m,P=i(O),j=u(O)<u(e)==!1;if((k||P)&&p(A)&&(j=!A(e,O,_.slice(0,_.index))),j){P===o&&p(N)&&(O=N(b(x,n),O)),O=h(O,P,P?O.value:O);var D=s(e)-s(O);e=d(e,O,t,n,C),t=v(t,D,C,S),e=l(e,t,n,S)}}return e}},{102:102,107:107,110:110,114:114,115:115,117:117,119:119,120:120,86:86,88:88,89:89,90:90,93:93,95:95,96:96}],105:[function(t,e,n){e.exports=function(){}},{}],106:[function(t,e,n){e.exports=Date.now},{}],107:[function(t,e,n){e.exports=function(t,e){var n=t.slice(0,t.depth);return n[n.length]=e,n}},{}],108:[function(t,e,n){var r=t(120),o=t(39),i=t(51),s=t(100),u=t(112),a=t(113);e.exports=function(t,e,n,c){if(s(t)){var p=t.$type;return Boolean(p)&&(p===r&&a(t),i(c,t)),u(t),e[n]=t[o]=void 0,!0}return!1}},{100:100,112:112,113:113,120:120,39:39,51:51}],109:[function(t,e,n){var r=t(91),o=t(40),i=t(108);e.exports=function s(t,e,n,u){if(i(t,e,n,u)){if(null==t.$type)for(var a in t)a[0]!==o&&\"$\"!==a[0]&&r(t,a)&&s(t[a],t,a,u);return!0}return!1}},{108:108,40:40,91:91}],110:[function(t,e,n){var r=t(100),o=t(111),i=t(109);e.exports=function(t,e,n,s,u){return t===e?t:(r(t)&&(o(t,e),i(t,n,s,u)),n[s]=e,e)}},{100:100,109:109,111:111}],111:[function(t,e,n){var r=t(43),o=t(33),i=t(44);e.exports=function(t,e){for(var n=t[i]||0,s=e[i]||0,u=-1;++u<n;){var a=t[r+u];void 0!==a&&(a[o]=e,e[r+(s+u)]=a,t[r+u]=void 0)}return e[i]=n+s,t[i]=void 0,e}},{33:33,43:43,44:44}],112:[function(t,e,n){var r=t(43),o=t(33),i=t(42),s=t(44);e.exports=function(t){for(var e=-1,n=t[s]||0;++e<n;){var u=t[r+e];null!=u&&(u[o]=u[i]=t[r+e]=void 0)}return t[s]=void 0,t}},{33:33,42:42,43:43,44:44}],113:[function(t,e,n){var r=t(43),o=t(33),i=t(42),s=t(44);e.exports=function(t){var e=t[o];if(e){for(var n=(t[i]||0)-1,u=(e[s]||0)-1;++n<=u;)e[r+n]=e[r+(n+1)];e[s]=u,t[i]=t[o]=e=void 0}return t}},{33:33,42:42,43:43,44:44}],114:[function(t,e,n){var r=t(43),o=t(39),i=t(46),s=t(44);e.exports=function(t,e){var n=[t],u=0;do{var a=n[u--];if(a&&a[i]!==e){a[i]=e,n[u++]=a[o];for(var c=-1,p=a[s]||0;++c<p;)n[u++]=a[r+c]}}while(u>-1);return t}},{39:39,43:43,44:44,46:46}],115:[function(t,e,n){var r=t(36),o=t(46),i=t(39),s=t(108),u=t(114);e.exports=function(t,e,n,a){var c=t;do{var p=c[i],h=c.$size=(c.$size||0)-e;0>=h&&null!=p?s(c,p,c[r],n):c[o]!==a&&u(c,a),c=p}while(c);return t}},{108:108,114:114,36:36,39:39,46:46}],116:[function(t,e,n){var r=Array.isArray,o=t(101),i=t(99),s=t(98),u=t(134);e.exports=function(t,e,n){for(var a=0,c=t.length;c>a;++a){var p=t[a],h=!1;if(r(p)&&e.path?h=!0:\"string\"==typeof p&&e.pathSyntax?h=!0:o(p)&&e.pathValue?(p.path=u.fromPath(p.path),h=!0):i(p)&&e.jsonGraph?h=!0:s(p)&&e.json?h=!0:\"function\"==typeof p&&a+1===c&&e.selector&&(h=!0),!h)return new Error(\"Unrecognized argument \"+typeof p+\" [\"+String(p)+\"] to Model#\"+n)}return!0}},{101:101,134:134,98:98,99:99}],117:[function(t,e,n){var r=t(130),o=r.atom,i=t(106),s=t(122),u=t(37),a=50,c=t(85),p=Array.isArray,h=t(88),f=t(87);e.exports=function(t,e,n){var r=0,l=t,d=e;if(d?(l=c(l),r=h(l),l.$type=d):(l=o(n),d=l.$type,l[u]=!0),null==n)r=a+1;else if(null==r||0>=r)switch(typeof n){case\"object\":r=p(n)?a+n.length:a+1;break;case\"string\":r=a+n.length;break;default:r=a+1}var v=f(l);return\"number\"==typeof v&&s>v&&(l.$expires=i()+-1*v),l.$size=r,l}},{106:106,122:122,130:130,37:37,85:85,87:87,88:88}],118:[function(t,e,n){e.exports=\"atom\"},{}],119:[function(t,e,n){e.exports=\"error\"},{}],120:[function(t,e,n){e.exports=\"ref\"},{}],121:[function(t,e,n){e.exports=1},{}],122:[function(t,e,n){e.exports=0},{}],123:[function(t,e,n){\"use strict\";function r(){if(a.length)throw a.shift()}function o(t){var e;e=u.length?u.pop():new i,e.task=t,s(e)}function i(){this.task=null}var s=t(124),u=[],a=[],c=s.makeRequestCallFromTimer(r);e.exports=o,i.prototype.call=function(){try{this.task.call()}catch(t){o.onerror?o.onerror(t):(a.push(t),c())}finally{this.task=null,u[u.length]=this}}},{124:124}],124:[function(t,e,n){(function(t){\"use strict\";function n(t){u.length||(s(),a=!0),u[u.length]=t}function r(){for(;c<u.length;){var t=c;if(c+=1,u[t].call(),c>p){for(var e=0,n=u.length-c;n>e;e++)u[e]=u[e+c];u.length-=c,c=0}}u.length=0,c=0,a=!1}function o(t){var e=1,n=new h(t),r=document.createTextNode(\"\");return n.observe(r,{characterData:!0}),function(){e=-e,r.data=e}}function i(t){return function(){function e(){clearTimeout(n),clearInterval(r),t()}var n=setTimeout(e,0),r=setInterval(e,50)}}e.exports=n;var s,u=[],a=!1,c=0,p=1024,h=t.MutationObserver||t.WebKitMutationObserver;s=\"function\"==typeof h?o(r):i(r),n.requestFlush=s,n.makeRequestCallFromTimer=i}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],125:[function(t,e,n){\"use strict\";function r(t,e){var n;for(n in e)t[n]=e[n];return t}function o(t,e){if(this._jsongUrl=t,\"number\"==typeof e){var n={timeout:e};e=n}this._config=r({timeout:15e3,headers:{}},e||{})}var i=t(129),s=t(126);Array.isArray;o.prototype={constructor:o,buildQueryObject:s,get:function(t){var e=\"GET\",n=this.buildQueryObject(this._jsongUrl,e,{paths:t,method:\"get\"}),o=r(n,this._config),s=this;return i(e,o,s)},set:function(t){var e=\"POST\",n=this.buildQueryObject(this._jsongUrl,e,{jsonGraph:t,method:\"set\"}),o=r(n,this._config);o.headers[\"Content-Type\"]=\"application/x-www-form-urlencoded\";var s=this;return i(e,o,s)},call:function(t,e,n,o){e=e||[],n=n||[],o=o||[];var s=\"POST\",u=[];u.push(\"method=call\"),u.push(\"callPath=\"+encodeURIComponent(JSON.stringify(t))),u.push(\"arguments=\"+encodeURIComponent(JSON.stringify(e))),u.push(\"pathSuffixes=\"+encodeURIComponent(JSON.stringify(n))),u.push(\"paths=\"+encodeURIComponent(JSON.stringify(o)));var a=this.buildQueryObject(this._jsongUrl,s,u.join(\"&\")),c=r(a,this._config);c.headers[\"Content-Type\"]=\"application/x-www-form-urlencoded\";var p=this;return i(s,c,p)}},o.XMLHttpSource=o,o[\"default\"]=o,e.exports=o},{126:126,129:129}],126:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){var r,o=[],i={url:t},s=-1!==t.indexOf(\"?\"),u=s?\"&\":\"?\";return\"string\"==typeof n?o.push(n):(r=Object.keys(n),r.forEach(function(t){var e=\"object\"==typeof n[t]?JSON.stringify(n[t]):n[t];o.push(t+\"=\"+encodeURIComponent(e))})),\"GET\"===e?i.url+=u+o.join(\"&\"):i.data=o.join(\"&\"),i}},{}],127:[function(t,e,n){(function(t){\"use strict\";e.exports=function(){var e=new t.XMLHttpRequest;if(\"withCredentials\"in e)return e;if(t.XDomainRequest)return new XDomainRequest;throw new Error(\"CORS is not supported by your browser\")}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],128:[function(t,e,n){(function(t){\"use strict\";e.exports=function(){var e,n,r;if(t.XMLHttpRequest)return new t.XMLHttpRequest;try{for(n=[\"Msxml2.XMLHTTP\",\"Microsoft.XMLHTTP\",\"Msxml2.XMLHTTP.4.0\"],r=0;3>r;r++)try{if(e=n[r],new t.ActiveXObject(e))break}catch(o){}return new t.ActiveXObject(e)}catch(o){throw new Error(\"XMLHttpRequest is not supported by your browser\")}}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],129:[function(t,e,n){\"use strict\";function r(){}function o(t,e,n){return r.create(function(r){var o,i,h,f,l,d={method:t||\"GET\",crossDomain:!1,async:!0,headers:{},responseType:\"json\"};for(l in e)p.call(e,l)&&(d[l]=e[l]);d.crossDomain||d.headers[\"X-Requested-With\"]||(d.headers[\"X-Requested-With\"]=\"XMLHttpRequest\"),null!=n.onBeforeRequest&&n.onBeforeRequest(d);try{o=d.crossDomain?c():a()}catch(v){r.onError(v)}try{d.user?o.open(d.method,d.url,d.async,d.user,d.password):o.open(d.method,d.url,d.async),o.timeout=d.timeout,o.withCredentials=d.withCredentials!==!1,h=d.headers;for(f in h)p.call(h,f)&&o.setRequestHeader(f,h[f]);if(d.responseType)try{o.responseType=d.responseType}catch(y){if(\"json\"!==d.responseType)throw y}o.onreadystatechange=function(t){4===o.readyState&&(i||(i=!0,s(r,o,t)))},o.ontimeout=function(t){i||(i=!0,u(r,o,\"timeout error\",t))},o.send(d.data)}catch(y){r.onError(y)}return function(){i||4===o.readyState||(i=!0,o.abort())}})}function i(t,e,n){n||(n=new Error(e)),t.onError(n)}function s(t,e,n){var r,o;if(e&&t){o=e.responseType,r=\"response\"in e?e.response:e.responseText;var s=1223===e.status?204:e.status;if(s>=200&&399>=s){try{\"json\"!==o&&(r=JSON.parse(r||\"\")),\"string\"==typeof r&&(r=JSON.parse(r||\"\"))}catch(n){i(t,\"invalid json\",n)}return t.onNext(r),void t.onCompleted()}return 401===s||403===s||407===s?i(t,r):410===s?i(t,r):408===s||504===s?i(t,r):i(t,r||\"Response code \"+s)}}function u(t,e,n,r){i(t,n||e.statusText||\"request error\",r)}var a=t(128),c=t(127),p=Object.prototype.hasOwnProperty,h=function(){};r.create=function(t){var e=new r;return e.subscribe=function(e,n,r){var o,i;return o=\"function\"==typeof e?{onNext:e,onError:n||h,onCompleted:r||h}:e,i=t(o),\"function\"==typeof i?{dispose:i}:i},e},e.exports=o},{127:127,128:128}],130:[function(t,e,n){function r(t,e,n){var r=Object.create(null);if(null!=n){for(var o in n)r[o]=n[o];return r.$type=t,r.value=e,r}return{$type:t,value:e}}var o=t(134);e.exports={ref:function(t,e){return r(\"ref\",o.fromPath(t),e)},atom:function(t,e){return r(\"atom\",t,e)},undefined:function(){return r(\"atom\")},error:function(t,e){return r(\"error\",t,e)},pathValue:function(t,e){return{path:o.fromPath(t),value:e}},pathInvalidation:function(t){return{path:o.fromPath(t),invalidated:!0}}}},{134:134}],131:[function(t,e,n){e.exports={integers:\"integers\",ranges:\"ranges\",keys:\"keys\"}},{}],132:[function(t,e,n){var r={token:\"token\",dotSeparator:\".\",commaSeparator:\",\",openingBracket:\"[\",closingBracket:\"]\",openingBrace:\"{\",closingBrace:\"}\",escape:\"\\\\\",space:\" \",colon:\":\",quote:\"quote\",unknown:\"unknown\"};e.exports=r},{}],133:[function(t,e,n){e.exports={indexer:{nested:\"Indexers cannot be nested.\",needQuotes:\"unquoted indexers must be numeric.\",empty:\"cannot have empty indexers.\",leadingDot:\"Indexers cannot have leading dots.\",leadingComma:\"Indexers cannot have leading comma.\",requiresComma:\"Indexers require commas between indexer args.\",routedTokens:\"Only one token can be used per indexer when specifying routed tokens.\"},range:{precedingNaN:\"ranges must be preceded by numbers.\",suceedingNaN:\"ranges must be suceeded by numbers.\"},routed:{invalid:\"Invalid routed token.  only integers|ranges|keys are supported.\"},quote:{empty:\"cannot have empty quoted keys.\",illegalEscape:\"Invalid escape character.  Only quotes are escapable.\"},unexpectedToken:\"Unexpected token.\",invalidIdentifier:\"Invalid Identifier.\",invalidPath:\"Please provide a valid path.\",throwError:function(t,e,n){if(n)throw t+\" -- \"+e.parseString+\" with next token: \"+n;throw t+\" -- \"+e.parseString}}},{}],134:[function(t,e,n){var r=t(140),o=t(135),i=t(131),s=function(t,e){return o(new r(t,e))};e.exports=s,s.fromPathsOrPathValues=function(t,e){if(!t)return[];for(var n=[],r=0,o=t.length;o>r;r++)\"string\"==typeof t[r]?n[r]=s(t[r],e):\"string\"==typeof t[r].path?n[r]={path:s(t[r].path,e),value:t[r].value}:n[r]=t[r];return n},s.fromPath=function(t,e){return t?\"string\"==typeof t?s(t,e):t:[]},s.RoutedTokens=i},{131:131,135:135,140:140}],135:[function(t,e,n){var r=t(132),o=t(133),i=t(136);e.exports=function(t){for(var e=t.next(),n={},s=[];!e.done;){switch(e.type){case r.token:var u=+e.token[0];isNaN(u)||o.throwError(o.invalidIdentifier,t),s[s.length]=e.token;break;case r.dotSeparator:0===s.length&&o.throwError(o.unexpectedToken,t);break;case r.space:break;case r.openingBracket:i(t,e,n,s);break;default:o.throwError(o.unexpectedToken,t)}e=t.next()}return 0===s.length&&o.throwError(o.invalidPath,t),s}},{132:132,133:133,136:136}],136:[function(t,e,n){var r=t(132),o=t(133),i=o.indexer,s=t(138),u=t(137),a=t(139);e.exports=function(t,e,n,c){var p=t.next(),h=!1,f=1,l=!1;for(n.indexer=[];!p.done;){switch(p.type){case r.token:case r.quote:n.indexer.length===f&&o.throwError(i.requiresComma,t)}switch(p.type){case r.openingBrace:l=!0,a(t,p,n,c);break;case r.token:var d=+p.token;isNaN(d)&&o.throwError(i.needQuotes,t),n.indexer[n.indexer.length]=d;break;case r.dotSeparator:n.indexer.length||o.throwError(i.leadingDot,t),s(t,p,n,c);\nbreak;case r.space:break;case r.closingBracket:h=!0;break;case r.quote:u(t,p,n,c);break;case r.openingBracket:o.throwError(i.nested,t);break;case r.commaSeparator:++f;break;default:o.throwError(o.unexpectedToken,t)}if(h)break;p=t.next()}0===n.indexer.length&&o.throwError(i.empty,t),n.indexer.length>1&&l&&o.throwError(i.routedTokens,t),1===n.indexer.length&&(n.indexer=n.indexer[0]),c[c.length]=n.indexer,n.indexer=void 0}},{132:132,133:133,137:137,138:138,139:139}],137:[function(t,e,n){var r=t(132),o=t(133),i=o.quote;e.exports=function(t,e,n,s){for(var u=t.next(),a=\"\",c=e.token,p=!1,h=!1;!u.done;){switch(u.type){case r.token:case r.space:case r.dotSeparator:case r.commaSeparator:case r.openingBracket:case r.closingBracket:case r.openingBrace:case r.closingBrace:p&&o.throwError(i.illegalEscape,t),a+=u.token;break;case r.quote:p?(a+=u.token,p=!1):u.token!==c?a+=u.token:h=!0;break;case r.escape:p=!0;break;default:o.throwError(o.unexpectedToken,t)}if(h)break;u=t.next()}0===a.length&&o.throwError(i.empty,t),n.indexer[n.indexer.length]=a}},{132:132,133:133}],138:[function(t,e,n){var r=t(140),o=t(132),i=t(133);e.exports=function(t,e,n,s){var u,a=t.peek(),c=1,p=!1,h=!0,f=n.indexer.length-1,l=r.toNumber(n.indexer[f]);for(isNaN(l)&&i.throwError(i.range.precedingNaN,t);!p&&!a.done;){switch(a.type){case o.dotSeparator:3===c&&i.throwError(i.unexpectedToken,t),++c,3===c&&(h=!1);break;case o.token:u=r.toNumber(t.next().token),isNaN(u)&&i.throwError(i.range.suceedingNaN,t),p=!0;break;default:p=!0}if(p)break;t.next(),a=t.peek()}n.indexer[f]={from:l,to:h?u:u-1}}},{132:132,133:133,140:140}],139:[function(t,e,n){var r=t(132),o=t(131),i=t(133),s=i.routed;e.exports=function(t,e,n,u){var a=t.next(),c=!1,p=\"\";switch(a.token){case o.integers:case o.ranges:case o.keys:break;default:i.throwError(s.invalid,t)}var h=t.next();if(h.type===r.colon&&(c=!0,h=t.next(),h.type!==r.token&&i.throwError(s.invalid,t),p=h.token,h=t.next()),h.type===r.closingBrace){var f={type:a.token,named:c,name:p};n.indexer[n.indexer.length]=f}else i.throwError(s.invalid,t)}},{131:131,132:132,133:133}],140:[function(t,e,n){function r(t,e,n){return{token:t,done:n,type:e}}function o(t,e,n){var o,g=!1,w=\"\",x=n?m:b;do{if(o=e+1>=t.length)break;var _=t[e+1];if(void 0===_||-1!==x.indexOf(_)){if(w.length)break;++e;var S;switch(_){case s:S=i.dotSeparator;break;case u:S=i.commaSeparator;break;case a:S=i.openingBracket;break;case c:S=i.closingBracket;break;case p:S=i.openingBrace;break;case h:S=i.closingBrace;break;case y:S=i.space;break;case d:case v:S=i.quote;break;case l:S=i.escape;break;case f:S=i.colon;break;default:S=i.unknown}g=r(_,S,!1);break}w+=_,++e}while(!o);return!g&&w.length&&(g=r(w,i.token,!1)),g||(g={done:!0}),{token:g,idx:e}}var i=t(132),s=\".\",u=\",\",a=\"[\",c=\"]\",p=\"{\",h=\"}\",f=\":\",l=\"\\\\\",d='\"',v=\"'\",y=\" \",b=\"\\\\'\\\"[]., \",m=\"\\\\{}'\\\"[]., :\",g=e.exports=function(t,e){this._string=t,this._idx=-1,this._extended=e,this.parseString=\"\"};g.prototype={next:function(){var t=this._nextToken?this._nextToken:o(this._string,this._idx,this._extended);return this._idx=t.idx,this._nextToken=!1,this.parseString+=t.token.token,t.token},peek:function(){var t=this._nextToken?this._nextToken:o(this._string,this._idx,this._extended);return this._nextToken=t,t.token}},g.toNumber=function(t){return isNaN(+t)?NaN:+t}},{132:132}],141:[function(t,e,n){var r=t(147),o=t(148);e.exports=function(t){var e=t.reduce(function(t,e){var n=e.length;return t[n]||(t[n]=[]),t[n].push(e),t},{});return Object.keys(e).forEach(function(t){e[t]=o(e[t])}),r(e)}},{147:147,148:148}],142:[function(t,e,n){var r=t(144);e.exports=function o(t,e,n){for(var i=t,s=!0;s&&n<e.length;++n){var u=e[n],a=typeof u;if(u&&\"object\"===a){var c={},p=r(u,c),h=n+1;do{var f=i[p];s=void 0!==f,s&&(s=o(f,e,h)),p=r(u,c)}while(s&&!c.done);break}i=i[u],s=void 0!==i}return s}},{144:144}],143:[function(t,e,n){e.exports={iterateKeySet:t(144),toTree:t(148),toTreeWithUnion:t(149),pathsComplementFromTree:t(146),pathsComplementFromLengthTree:t(145),hasIntersection:t(142),toPaths:t(147),collapse:t(141)}},{141:141,142:142,144:144,145:145,146:146,147:147,148:148,149:149}],144:[function(t,e,n){function r(t,e){var n=e.from=t.from||0,r=e.to=t.to||\"number\"==typeof t.length&&e.from+t.length-1||0;e.rangeOffset=e.from,e.loaded=!0,n>r&&(e.empty=!0)}function o(t,e){e.done=!1;var n=e.isObject=!(!t||\"object\"!=typeof t);e.isArray=n&&i(t),e.arrayOffset=0}var i=Array.isArray;e.exports=function(t,e){if(void 0===e.isArray&&o(t,e),e.isArray){var n;do{e.loaded&&e.rangeOffset>e.to&&(++e.arrayOffset,e.loaded=!1);var i=e.arrayOffset,s=t.length;if(i>=s){e.done=!0;break}var u=t[e.arrayOffset],a=typeof u;if(\"object\"===a){if(e.loaded||r(u,e),e.empty)continue;n=e.rangeOffset++}else++e.arrayOffset,n=u}while(void 0===n);return n}return e.isObject?(e.loaded||r(t,e),e.rangeOffset>e.to?void(e.done=!0):e.rangeOffset++):(e.done=!0,t)}},{}],145:[function(t,e,n){var r=t(142);e.exports=function(t,e){for(var n=[],o=-1,i=0,s=t.length;s>i;++i){var u=t[i];r(e[u.length],u,0)||(n[++o]=u)}return n}},{142:142}],146:[function(t,e,n){var r=t(142);e.exports=function(t,e){for(var n=[],o=-1,i=0,s=t.length;s>i;++i)r(e,t[i],0)||(n[++o]=t[i]);return n}},{142:142}],147:[function(t,e,n){function r(t){return null!==t&&typeof t===f}function o(t,e,n){var r,i,s,u,h,f,l,d,v,y,b,m,g,w,x=c(String(e)),_=Object.create(null),S=[],E=-1,C=0,A=[],N=0;if(u=[],h=-1,n-1>e){for(f=a(t,u);++h<f;)r=u[h],i=o(t[r],e+1,n),s=i.code,_[s]?i=_[s]:(S[C++]=s,i=_[s]={keys:[],sets:i.sets}),x=c(x+r+s),p(r)&&i.keys.push(parseInt(r,10))||i.keys.push(r);for(;++E<C;)if(r=S[E],i=_[r],u=i.keys,f=u.length,f>0)for(l=i.sets,d=-1,v=l.length,g=u[0];++d<v;){for(y=l[d],b=-1,m=y.length,w=new Array(m+1),w[0]=f>1&&u||g;++b<m;)w[b+1]=y[b];A[N++]=w}}else for(f=a(t,u),f>1?A[N++]=[u]:A[N++]=u;++h<f;)x=c(x+u[h]);return{code:x,sets:A}}function i(t){for(var e=-1,n=t.length;++e<n;){var r=t[e];h(r)&&(t[e]=s(r))}return t}function s(t){for(var e=-1,n=t.length-1,r=n>0;++e<=n;){var o=t[e];if(!p(o)){r=!1;break}t[e]=parseInt(o,10)}if(r===!0){t.sort(u);var i=t[0],s=t[n];if(n>=s-i)return{from:i,to:s}}return t}function u(t,e){return t-e}function a(t,e,n){var r=0;for(var o in t)e[r++]=o;return r>1&&e.sort(n),r}function c(t){for(var e=5381,n=-1,r=t.length;++n<r;)e=(e<<5)+e+t.charCodeAt(n);return String(e)}function p(t){return!h(t)&&t-parseFloat(t)+1>=0}var h=Array.isArray,f=\"object\";e.exports=function(t){var e,n=[],s=0;for(var u in t)if(p(u)&&r(e=t[u]))for(var a=o(e,0,parseInt(u,10)).sets,c=-1,h=a.length;++c<h;)n[s++]=i(a[c]);return n}},{}],148:[function(t,e,n){function r(t,e,n){var i,s=e[n],u={},a=n+1;i=o(s,u);do{var c=t[i];c||(a===e.length?t[i]=null:c=t[i]={}),a<e.length&&r(c,e,a),u.done||(i=o(s,u))}while(!u.done)}var o=t(144);Array.isArray;e.exports=function(t){return t.reduce(function(t,e){return r(t,e,0),t},{})}},{144:144}],149:[function(t,e,n){},{}],150:[function(t,e,n){function r(){p=!1,u.length?c=u.concat(c):h=-1,c.length&&o()}function o(){if(!p){var t=setTimeout(r);p=!0;for(var e=c.length;e;){for(u=c,c=[];++h<e;)u&&u[h].run();h=-1,e=c.length}u=null,p=!1,clearTimeout(t)}}function i(t,e){this.fun=t,this.array=e}function s(){}var u,a=e.exports={},c=[],p=!1,h=-1;a.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];c.push(new i(t,e)),1!==c.length||p||setTimeout(o,0)},i.prototype.run=function(){this.fun.apply(null,this.array)},a.title=\"browser\",a.browser=!0,a.env={},a.argv=[],a.version=\"\",a.versions={},a.on=s,a.addListener=s,a.once=s,a.off=s,a.removeListener=s,a.removeAllListeners=s,a.emit=s,a.binding=function(t){throw new Error(\"process.binding is not supported\")},a.cwd=function(){return\"/\"},a.chdir=function(t){throw new Error(\"process.chdir is not supported\")},a.umask=function(){return 0}},{}],151:[function(t,e,n){\"use strict\";e.exports=t(156)},{156:156}],152:[function(t,e,n){\"use strict\";function r(){}function o(t){try{return t.then}catch(e){return y=e,b}}function i(t,e){try{return t(e)}catch(n){return y=n,b}}function s(t,e,n){try{t(e,n)}catch(r){return y=r,b}}function u(t){if(\"object\"!=typeof this)throw new TypeError(\"Promises must be constructed via new\");if(\"function\"!=typeof t)throw new TypeError(\"not a function\");this._37=0,this._12=null,this._59=[],t!==r&&d(t,this)}function a(t,e,n){return new t.constructor(function(o,i){var s=new u(r);s.then(o,i),c(t,new l(e,n,s))})}function c(t,e){for(;3===t._37;)t=t._12;return 0===t._37?void t._59.push(e):void v(function(){var n=1===t._37?e.onFulfilled:e.onRejected;if(null===n)return void(1===t._37?p(e.promise,t._12):h(e.promise,t._12));var r=i(n,t._12);r===b?h(e.promise,y):p(e.promise,r)})}function p(t,e){if(e===t)return h(t,new TypeError(\"A promise cannot be resolved with itself.\"));if(e&&(\"object\"==typeof e||\"function\"==typeof e)){var n=o(e);if(n===b)return h(t,y);if(n===t.then&&e instanceof u)return t._37=3,t._12=e,void f(t);if(\"function\"==typeof n)return void d(n.bind(e),t)}t._37=1,t._12=e,f(t)}function h(t,e){t._37=2,t._12=e,f(t)}function f(t){for(var e=0;e<t._59.length;e++)c(t,t._59[e]);t._59=null}function l(t,e,n){this.onFulfilled=\"function\"==typeof t?t:null,this.onRejected=\"function\"==typeof e?e:null,this.promise=n}function d(t,e){var n=!1,r=s(t,function(t){n||(n=!0,p(e,t))},function(t){n||(n=!0,h(e,t))});n||r!==b||(n=!0,h(e,y))}var v=t(124),y=null,b={};e.exports=u,u._99=r,u.prototype.then=function(t,e){if(this.constructor!==u)return a(this,t,e);var n=new u(r);return c(this,new l(t,e,n)),n}},{124:124}],153:[function(t,e,n){\"use strict\";var r=t(152);e.exports=r,r.prototype.done=function(t,e){var n=arguments.length?this.then.apply(this,arguments):this;n.then(null,function(t){setTimeout(function(){throw t},0)})}},{152:152}],154:[function(t,e,n){\"use strict\";function r(t){var e=new o(o._99);return e._37=1,e._12=t,e}var o=t(152);e.exports=o;var i=r(!0),s=r(!1),u=r(null),a=r(void 0),c=r(0),p=r(\"\");o.resolve=function(t){if(t instanceof o)return t;if(null===t)return u;if(void 0===t)return a;if(t===!0)return i;if(t===!1)return s;if(0===t)return c;if(\"\"===t)return p;if(\"object\"==typeof t||\"function\"==typeof t)try{var e=t.then;if(\"function\"==typeof e)return new o(e.bind(t))}catch(n){return new o(function(t,e){e(n)})}return r(t)},o.all=function(t){var e=Array.prototype.slice.call(t);return new o(function(t,n){function r(s,u){if(u&&(\"object\"==typeof u||\"function\"==typeof u)){if(u instanceof o&&u.then===o.prototype.then){for(;3===u._37;)u=u._12;return 1===u._37?r(s,u._12):(2===u._37&&n(u._12),void u.then(function(t){r(s,t)},n))}var a=u.then;if(\"function\"==typeof a){var c=new o(a.bind(u));return void c.then(function(t){r(s,t)},n)}}e[s]=u,0===--i&&t(e)}if(0===e.length)return t([]);for(var i=e.length,s=0;s<e.length;s++)r(s,e[s])})},o.reject=function(t){return new o(function(e,n){n(t)})},o.race=function(t){return new o(function(e,n){t.forEach(function(t){o.resolve(t).then(e,n)})})},o.prototype[\"catch\"]=function(t){return this.then(null,t)}},{152:152}],155:[function(t,e,n){\"use strict\";var r=t(152);e.exports=r,r.prototype[\"finally\"]=function(t){return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})}},{152:152}],156:[function(t,e,n){\"use strict\";e.exports=t(152),t(153),t(155),t(154),t(157)},{152:152,153:153,154:154,155:155,157:157}],157:[function(t,e,n){\"use strict\";var r=t(152),o=t(123);e.exports=r,r.denodeify=function(t,e){return e=e||1/0,function(){var n=this,o=Array.prototype.slice.call(arguments,0,e>0?e:0);return new r(function(e,r){o.push(function(t,n){t?r(t):e(n)});var i=t.apply(n,o);!i||\"object\"!=typeof i&&\"function\"!=typeof i||\"function\"!=typeof i.then||e(i)})}},r.nodeify=function(t){return function(){var e=Array.prototype.slice.call(arguments),n=\"function\"==typeof e[e.length-1]?e.pop():null,i=this;try{return t.apply(this,arguments).nodeify(n,i)}catch(s){if(null===n||\"undefined\"==typeof n)return new r(function(t,e){e(s)});o(function(){n.call(i,s)})}}},r.prototype.nodeify=function(t,e){return\"function\"!=typeof t?this:void this.then(function(n){o(function(){t.call(e,null,n)})},function(n){o(function(){t.call(e,n)})})}},{123:123,152:152}],158:[function(e,n,r){(function(o){(function(i){var s={\"boolean\":!1,\"function\":!0,object:!0,number:!1,string:!1,undefined:!1},u=s[typeof window]&&window||this,a=s[typeof r]&&r&&!r.nodeType&&r,c=s[typeof n]&&n&&!n.nodeType&&n,p=(c&&c.exports===a&&a,s[typeof o]&&o);!p||p.global!==p&&p.window!==p||(u=p),\"function\"==typeof t&&t.amd?t([\"rx\"],function(t,e){return i(u,e,t)}):\"object\"==typeof n&&n&&n.exports===a?n.exports=i(u,n.exports,e(159)):u.Rx=i(u,{},u.Rx)}).call(this,function(t,e,n,r){function o(){try{return l.apply(this,arguments)}catch(t){return M.e=t,M}}function i(t){if(!E(t))throw new TypeError(\"fn must be a function\");return l=t,o}function s(t,e,n){return new b(function(r){var o=!1,i=null,s=[];return t.subscribe(function(t){var u,a;try{a=e(t)}catch(c){return void r.onError(c)}if(u=0,o)try{u=n(a,i)}catch(p){return void r.onError(p)}else o=!0,i=a;u>0&&(i=a,s=[]),u>=0&&s.push(t)},function(t){r.onError(t)},function(){r.onNext(s),r.onCompleted()})},t)}function u(t){if(0===t.length)throw new D;return t[0]}function a(t,e,n,r){if(0>e)throw new R;return new b(function(o){var i=e;return t.subscribe(function(t){0===i--&&(o.onNext(t),o.onCompleted())},function(t){o.onError(t)},function(){n?(o.onNext(r),o.onCompleted()):o.onError(new R)})},t)}function c(t,e,n){return new b(function(r){var o=n,i=!1;return t.subscribe(function(t){i?r.onError(new Error(\"Sequence contains more than one element\")):(o=t,i=!0)},function(t){r.onError(t)},function(){i||e?(r.onNext(o),r.onCompleted()):r.onError(new D)})},t)}function p(t,e,n){return new b(function(r){return t.subscribe(function(t){r.onNext(t),r.onCompleted()},function(t){r.onError(t)},function(){e?(r.onNext(n),r.onCompleted()):r.onError(new D)})},t)}function h(t,e,n){return new b(function(r){var o=n,i=!1;return t.subscribe(function(t){o=t,i=!0},function(t){r.onError(t)},function(){i||e?(r.onNext(o),r.onCompleted()):r.onError(new D)})},t)}function f(t,e,n,o){var i=j(e,n,3);return new b(function(e){var n=0;return t.subscribe(function(r){var s;try{s=i(r,n,t)}catch(u){return void e.onError(u)}s?(e.onNext(o?n:r),e.onCompleted()):n++},function(t){e.onError(t)},function(){e.onNext(o?-1:r),e.onCompleted()})},t)}var l,d=n.Observable,v=d.prototype,y=n.CompositeDisposable,b=n.AnonymousObservable,m=n.Disposable.empty,g=(n.internals.isEqual,n.helpers),w=g.not,x=g.defaultComparer,_=g.identity,S=g.defaultSubComparer,E=g.isFunction,C=g.isPromise,A=g.isArrayLike,N=g.isIterable,k=n.internals.inherits,O=d.fromPromise,P=d.from,j=n.internals.bindCallback,D=n.EmptyError,q=n.ObservableBase,R=n.ArgumentOutOfRangeError,M={e:{}};v.aggregate=function(){var t,e,n=!1,r=this;return 2===arguments.length?(n=!0,e=arguments[0],t=arguments[1]):t=arguments[0],new b(function(o){var i,s,u;return r.subscribe(function(r){!u&&(u=!0);try{i?s=t(s,r):(s=n?t(e,r):r,i=!0)}catch(a){return o.onError(a)}},function(t){o.onError(t)},function(){u&&o.onNext(s),!u&&n&&o.onNext(e),!u&&!n&&o.onError(new D),o.onCompleted()})},r)};var T=function(t){function e(e,n,r,o){this.source=e,this.acc=n,this.hasSeed=r,this.seed=o,t.call(this)}function n(t,e){this.o=t,this.acc=e.acc,this.hasSeed=e.hasSeed,this.seed=e.seed,this.hasAccumulation=!1,this.result=null,this.hasValue=!1,this.isStopped=!1}return k(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t,this))},n.prototype.onNext=function(t){this.isStopped||(!this.hasValue&&(this.hasValue=!0),this.hasAccumulation?this.result=i(this.acc)(this.result,t):(this.result=this.hasSeed?i(this.acc)(this.seed,t):t,this.hasAccumulation=!0),this.result===M&&this.o.onError(this.result.e))},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.hasValue&&this.o.onNext(this.result),!this.hasValue&&this.hasSeed&&this.o.onNext(this.seed),!this.hasValue&&!this.hasSeed&&this.o.onError(new D),this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(q);return v.reduce=function(t){var e=!1;if(2===arguments.length){e=!0;var n=arguments[1]}return new T(this,t,e,n)},v.some=function(t,e){var n=this;return t?n.filter(t,e).some():new b(function(t){return n.subscribe(function(){t.onNext(!0),t.onCompleted()},function(e){t.onError(e)},function(){t.onNext(!1),t.onCompleted()})},n)},v.any=function(){return this.some.apply(this,arguments)},v.isEmpty=function(){return this.any().map(w)},v.every=function(t,e){return this.filter(function(e){return!t(e)},e).some().map(w)},v.all=function(){return this.every.apply(this,arguments)},v.includes=function(t,e){function n(t,e){return 0===t&&0===e||t===e||isNaN(t)&&isNaN(e)}var r=this;return new b(function(o){var i=0,s=+e||0;return Math.abs(s)===1/0&&(s=0),0>s?(o.onNext(!1),o.onCompleted(),m):r.subscribe(function(e){i++>=s&&n(e,t)&&(o.onNext(!0),o.onCompleted())},function(t){o.onError(t)},function(){o.onNext(!1),o.onCompleted()})},this)},v.contains=function(t,e){v.includes(t,e)},v.count=function(t,e){return t?this.filter(t,e).count():this.reduce(function(t){return t+1},0)},v.indexOf=function(t,e){var n=this;return new b(function(r){var o=0,i=+e||0;return Math.abs(i)===1/0&&(i=0),0>i?(r.onNext(-1),r.onCompleted(),m):n.subscribe(function(e){o>=i&&e===t&&(r.onNext(o),r.onCompleted()),o++},function(t){r.onError(t)},function(){r.onNext(-1),r.onCompleted()})},n)},v.sum=function(t,e){return t&&E(t)?this.map(t,e).sum():this.reduce(function(t,e){return t+e},0)},v.minBy=function(t,e){return e||(e=S),s(this,t,function(t,n){return-1*e(t,n)})},v.min=function(t){return this.minBy(_,t).map(function(t){return u(t)})},v.maxBy=function(t,e){return e||(e=S),s(this,t,e)},v.max=function(t){return this.maxBy(_,t).map(function(t){return u(t)})},v.average=function(t,e){return t&&E(t)?this.map(t,e).average():this.reduce(function(t,e){return{sum:t.sum+e,count:t.count+1}},{sum:0,count:0}).map(function(t){if(0===t.count)throw new D;return t.sum/t.count})},v.sequenceEqual=function(t,e){var n=this;return e||(e=x),new b(function(r){var o=!1,i=!1,s=[],u=[],a=n.subscribe(function(t){var n,o;if(u.length>0){o=u.shift();try{n=e(o,t)}catch(a){return void r.onError(a)}n||(r.onNext(!1),r.onCompleted())}else i?(r.onNext(!1),r.onCompleted()):s.push(t)},function(t){r.onError(t)},function(){o=!0,0===s.length&&(u.length>0?(r.onNext(!1),r.onCompleted()):i&&(r.onNext(!0),r.onCompleted()))});(A(t)||N(t))&&(t=P(t)),C(t)&&(t=O(t));var c=t.subscribe(function(t){var n;if(s.length>0){var i=s.shift();try{n=e(i,t)}catch(a){return void r.onError(a)}n||(r.onNext(!1),r.onCompleted())}else o?(r.onNext(!1),r.onCompleted()):u.push(t)},function(t){r.onError(t)},function(){i=!0,0===u.length&&(s.length>0?(r.onNext(!1),r.onCompleted()):o&&(r.onNext(!0),r.onCompleted()))});return new y(a,c)},n)},v.elementAt=function(t){return a(this,t,!1)},v.elementAtOrDefault=function(t,e){return a(this,t,!0,e)},v.single=function(t,e){return t&&E(t)?this.where(t,e).single():c(this,!1)},v.singleOrDefault=function(t,e,n){return t&&E(t)?this.filter(t,n).singleOrDefault(null,e):c(this,!0,e)},v.first=function(t,e){return t?this.where(t,e).first():p(this,!1)},v.firstOrDefault=function(t,e,n){return t?this.where(t).firstOrDefault(null,e):p(this,!0,e)},v.last=function(t,e){return t?this.where(t,e).last():h(this,!1)},v.lastOrDefault=function(t,e,n){return t?this.where(t,n).lastOrDefault(null,e):h(this,!0,e)},v.find=function(t,e){return f(this,t,e,!1)},v.findIndex=function(t,e){return f(this,t,e,!0)},v.toSet=function(){if(\"undefined\"==typeof t.Set)throw new TypeError;var e=this;return new b(function(n){var r=new t.Set;return e.subscribe(function(t){r.add(t)},function(t){n.onError(t)},function(){n.onNext(r),n.onCompleted()})},e)},v.toMap=function(e,n){if(\"undefined\"==typeof t.Map)throw new TypeError;var r=this;return new b(function(o){var i=new t.Map;return r.subscribe(function(t){var r;try{r=e(t)}catch(s){return void o.onError(s)}var u=t;if(n)try{u=n(t)}catch(s){return void o.onError(s)}i.set(r,u)},function(t){o.onError(t)},function(){o.onNext(i),o.onCompleted()})},r)},n})}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{159:159}],159:[function(e,n,r){(function(e,o){(function(i){function u(t){for(var e=[],n=0,r=t.length;r>n;n++)e.push(t[n]);return e}function a(t,e){if(ct&&e.stack&&\"object\"==typeof t&&null!==t&&t.stack&&-1===t.stack.indexOf(lt)){for(var n=[],r=e;r;r=r.source)r.stack&&n.unshift(r.stack);n.unshift(t.stack);var o=n.join(\"\\n\"+lt+\"\\n\");t.stack=c(o)}}function c(t){for(var e=t.split(\"\\n\"),n=[],r=0,o=e.length;o>r;r++){var i=e[r];p(i)||h(i)||!i||n.push(i)}return n.join(\"\\n\")}function p(t){var e=l(t);if(!e)return!1;var n=e[0],r=e[1];return n===ht&&r>=ft&&$n>=r}function h(t){return-1!==t.indexOf(\"(module.js:\")||-1!==t.indexOf(\"(node.js:\")}function f(){if(ct)try{throw new Error}catch(t){var e=t.stack.split(\"\\n\"),n=e[0].indexOf(\"@\")>0?e[1]:e[2],r=l(n);if(!r)return;return ht=r[0],r[1]}}function l(t){var e=/at .+ \\((.+):(\\d+):(?:\\d+)\\)$/.exec(t);if(e)return[e[1],Number(e[2])];var n=/at ([^ ]+):(\\d+):(?:\\d+)$/.exec(t);if(n)return[n[1],Number(n[2])];var r=/.*@(.+):(\\d+)$/.exec(t);return r?[r[1],Number(r[2])]:void 0}function d(t){var e=[];if(!Ht(t))return e;Ut.nonEnumArgs&&t.length&&Xt(t)&&(t=Yt.call(t));var n=Ut.enumPrototypes&&\"function\"==typeof t,r=Ut.enumErrorProps&&(t===Jt||t instanceof Error);for(var o in t)n&&\"prototype\"==o||r&&(\"message\"==o||\"name\"==o)||e.push(o);if(Ut.nonEnumShadows&&t!==It){var i=t.constructor,s=-1,u=kt;if(t===(i&&i.prototype))var a=t===Lt?$t:t===Jt?qt:Wt.call(t),c=Ft[a];for(;++s<u;)o=Nt[s],c&&c[o]||!zt.call(t,o)||e.push(o)}return e}function v(t,e,n){for(var r=-1,o=n(t),i=o.length;++r<i;){var s=o[r];if(e(t[s],s,t)===!1)break}return t}function y(t,e){return v(t,e,d)}function b(t){return\"function\"!=typeof t.toString&&\"string\"==typeof(t+\"\")}function m(t,e,n,r){if(t===e)return 0!==t||1/t==1/e;var o=typeof t,i=typeof e;if(t===t&&(null==t||null==e||\"function\"!=o&&\"object\"!=o&&\"function\"!=i&&\"object\"!=i))return!1;var s=Wt.call(t),u=Wt.call(e);if(s==Ot&&(s=Tt),u==Ot&&(u=Tt),s!=u)return!1;switch(s){case jt:case Dt:return+t==+e;case Mt:return t!=+t?e!=+e:0==t?1/t==1/e:t==+e;case Vt:case $t:return t==String(e)}var a=s==Pt;if(!a){if(s!=Tt||!Ut.nodeClass&&(b(t)||b(e)))return!1;var c=!Ut.argsObject&&Xt(t)?Object:t.constructor,p=!Ut.argsObject&&Xt(e)?Object:e.constructor;if(!(c==p||zt.call(t,\"constructor\")&&zt.call(e,\"constructor\")||at(c)&&c instanceof c&&at(p)&&p instanceof p||!(\"constructor\"in t&&\"constructor\"in e)))return!1}n||(n=[]),r||(r=[]);for(var h=n.length;h--;)if(n[h]==t)return r[h]==e;var f=0,l=!0;if(n.push(t),r.push(e),a){if(h=t.length,f=e.length,l=f==h)for(;f--;){var d=e[f];if(!(l=m(t[f],d,n,r)))break}}else y(e,function(e,o,i){return zt.call(i,o)?(f++,l=zt.call(t,o)&&m(t[o],e,n,r)):void 0}),l&&y(t,function(t,e,n){return zt.call(n,e)?l=--f>-1:void 0});return n.pop(),r.pop(),l}function g(t,e){for(var n=new Array(t),r=0;t>r;r++)n[r]=e();return n}function w(){try{return Qt.apply(this,arguments)}catch(t){return ne.e=t,ne}}function x(t){if(!at(t))throw new TypeError(\"fn must be a function\");return Qt=t,w}function _(t){throw t}function S(t,e){this.id=t,this.value=e}function E(t,e){this.scheduler=t,this.disposable=e,this.isDisposed=!1}function C(t,e){e.isDisposed||(e.isDisposed=!0,e.disposable.dispose())}function A(t){this._s=s}function N(t){this._s=s,this._l=s.length,this._i=0}function k(t){this._a=t}function O(t){this._a=t,this._l=q(t),this._i=0}function P(t){return\"number\"==typeof t&&X.isFinite(t)}function j(t){var e,n=t[xt];if(!n&&\"string\"==typeof t)return e=new A(t),e[xt]();if(!n&&t.length!==i)return e=new k(t),e[xt]();if(!n)throw new TypeError(\"Object is not iterable\");return t[xt]()}function D(t){var e=+t;return 0===e?e:isNaN(e)?e:0>e?-1:1}function q(t){var e=+t.length;return isNaN(e)?0:0!==e&&P(e)?(e=D(e)*Math.floor(Math.abs(e)),0>=e?0:e>en?en:e):e}function R(t,e){this.observer=t,this.parent=e}function M(t,e){return me(t)||(t=_e),new rn(e,t)}function T(t,e){this.observer=t,this.parent=e}function V(t,e){this.observer=t,this.parent=e}function $(t,e){return new qn(function(n){var r=new fe,o=new le;return o.setDisposable(r),r.setDisposable(t.subscribe(function(t){n.onNext(t)},function(t){try{var r=e(t)}catch(i){return n.onError(i)}ut(r)&&(r=Xe(r));var s=new fe;o.setDisposable(s),s.setDisposable(r.subscribe(n))},function(t){n.onCompleted(t)})),o},t)}function W(){return!1}function z(t,e){var n=this;return new qn(function(r){var o=0,i=t.length;return n.subscribe(function(n){if(i>o){var s=t[o++],u=x(e)(n,s);if(u===ne)return r.onError(u.e);r.onNext(u)}else r.onCompleted()},function(t){r.onError(t)},function(){r.onCompleted()})},n)}function W(){return!1}function G(){return[]}function W(){return!1}function J(){return[]}function I(t,e){this.observer=t,this.accumulator=e.accumulator,this.hasSeed=e.hasSeed,this.seed=e.seed,this.hasAccumulation=!1,this.accumulation=null,this.hasValue=!1,this.isStopped=!1}function L(t,e,n){var r=At(e,n,3);return t.map(function(e,n){var o=r(e,n,t);return ut(o)&&(o=Xe(o)),(Et(o)||St(o))&&(o=nn(o)),o}).concatAll()}function B(t,e,n){for(var r=0,o=t.length;o>r;r++)if(n(t[r],e))return r;return-1}function F(t){this.comparer=t,this.set=[]}function U(t,e,n){var r=At(e,n,3);return t.map(function(e,n){var o=r(e,n,t);return ut(o)&&(o=Xe(o)),(Et(o)||St(o))&&(o=nn(o)),o}).mergeAll()}var H={\"boolean\":!1,\"function\":!0,object:!0,number:!1,string:!1,undefined:!1},X=H[typeof window]&&window||this,Q=H[typeof r]&&r&&!r.nodeType&&r,K=H[typeof n]&&n&&!n.nodeType&&n,Y=K&&K.exports===Q&&Q,Z=H[typeof o]&&o;!Z||Z.global!==Z&&Z.window!==Z||(X=Z);var tt={internals:{},config:{Promise:X.Promise},helpers:{}},et=tt.helpers.noop=function(){},nt=(tt.helpers.notDefined=function(t){return\"undefined\"==typeof t},tt.helpers.identity=function(t){return t}),rt=(tt.helpers.pluck=function(t){return function(e){return e[t]}},tt.helpers.just=function(t){return function(){return t}},tt.helpers.defaultNow=Date.now),ot=tt.helpers.defaultComparer=function(t,e){return Kt(t,e)},it=tt.helpers.defaultSubComparer=function(t,e){return t>e?1:e>t?-1:0},st=(tt.helpers.defaultKeySerializer=function(t){return t.toString()},tt.helpers.defaultError=function(t){throw t}),ut=tt.helpers.isPromise=function(t){return!!t&&\"function\"!=typeof t.subscribe&&\"function\"==typeof t.then},at=(tt.helpers.asArray=function(){return Array.prototype.slice.call(arguments)},tt.helpers.not=function(t){return!t},tt.helpers.isFunction=function(){var t=function(t){return\"function\"==typeof t||!1};return t(/x/)&&(t=function(t){return\"function\"==typeof t&&\"[object Function]\"==Wt.call(t)}),t}());tt.config.longStackSupport=!1;var ct=!1;try{throw new Error}catch(pt){ct=!!pt.stack}var ht,ft=f(),lt=\"From previous event:\",dt=tt.EmptyError=function(){this.message=\"Sequence contains no elements.\",Error.call(this)};dt.prototype=Error.prototype;var vt=tt.ObjectDisposedError=function(){this.message=\"Object has been disposed\",Error.call(this)};vt.prototype=Error.prototype;var yt=tt.ArgumentOutOfRangeError=function(){this.message=\"Argument out of range\",Error.call(this)};yt.prototype=Error.prototype;var bt=tt.NotSupportedError=function(t){this.message=t||\"This operation is not supported\",Error.call(this)};bt.prototype=Error.prototype;var mt=tt.NotImplementedError=function(t){this.message=t||\"This operation is not implemented\",Error.call(this)};mt.prototype=Error.prototype;var gt=tt.helpers.notImplemented=function(){throw new mt},wt=tt.helpers.notSupported=function(){throw new bt},xt=\"function\"==typeof Symbol&&Symbol.iterator||\"_es6shim_iterator_\";X.Set&&\"function\"==typeof(new X.Set)[\"@@iterator\"]&&(xt=\"@@iterator\");var _t=tt.doneEnumerator={done:!0,value:i},St=tt.helpers.isIterable=function(t){return t[xt]!==i},Et=tt.helpers.isArrayLike=function(t){return t&&t.length!==i};tt.helpers.iterator=xt;var Ct,At=tt.internals.bindCallback=function(t,e,n){if(\"undefined\"==typeof e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}},Nt=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],kt=Nt.length,Ot=\"[object Arguments]\",Pt=\"[object Array]\",jt=\"[object Boolean]\",Dt=\"[object Date]\",qt=\"[object Error]\",Rt=\"[object Function]\",Mt=\"[object Number]\",Tt=\"[object Object]\",Vt=\"[object RegExp]\",$t=\"[object String]\",Wt=Object.prototype.toString,zt=Object.prototype.hasOwnProperty,Gt=Wt.call(arguments)==Ot,Jt=Error.prototype,It=Object.prototype,Lt=String.prototype,Bt=It.propertyIsEnumerable;try{Ct=!(Wt.call(document)==Tt&&!({toString:0}+\"\"))}catch(pt){Ct=!0}var Ft={};Ft[Pt]=Ft[Dt]=Ft[Mt]={constructor:!0,toLocaleString:!0,toString:!0,valueOf:!0},Ft[jt]=Ft[$t]={constructor:!0,toString:!0,valueOf:!0},Ft[qt]=Ft[Rt]=Ft[Vt]={constructor:!0,toString:!0},Ft[Tt]={constructor:!0};var Ut={};!function(){var t=function(){this.x=1},e=[];t.prototype={valueOf:1,y:1};for(var n in new t)e.push(n);for(n in arguments);Ut.enumErrorProps=Bt.call(Jt,\"message\")||Bt.call(Jt,\"name\"),Ut.enumPrototypes=Bt.call(t,\"prototype\"),Ut.nonEnumArgs=0!=n,Ut.nonEnumShadows=!/valueOf/.test(e)}(1);var Ht=tt.internals.isObject=function(t){var e=typeof t;return t&&(\"function\"==e||\"object\"==e)||!1},Xt=function(t){return t&&\"object\"==typeof t?Wt.call(t)==Ot:!1};Gt||(Xt=function(t){return t&&\"object\"==typeof t?zt.call(t,\"callee\"):!1});var Qt,Kt=tt.internals.isEqual=function(t,e){return m(t,e,[],[])},Yt=({}.hasOwnProperty,Array.prototype.slice),Zt=this.inherits=tt.internals.inherits=function(t,e){function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n},te=tt.internals.addProperties=function(t){for(var e=[],n=1,r=arguments.length;r>n;n++)e.push(arguments[n]);for(var o=0,i=e.length;i>o;o++){var s=e[o];for(var u in s)t[u]=s[u]}},ee=tt.internals.addRef=function(t,e){return new qn(function(n){return new ie(e.getDisposable(),t.subscribe(n))})},ne={e:{}};S.prototype.compareTo=function(t){var e=this.value.compareTo(t.value);return 0===e&&(e=this.id-t.id),e};var re=tt.internals.PriorityQueue=function(t){this.items=new Array(t),this.length=0},oe=re.prototype;oe.isHigherPriority=function(t,e){return this.items[t].compareTo(this.items[e])<0},oe.percolate=function(t){if(!(t>=this.length||0>t)){var e=t-1>>1;if(!(0>e||e===t)&&this.isHigherPriority(t,e)){var n=this.items[t];this.items[t]=this.items[e],this.items[e]=n,this.percolate(e)}}},oe.heapify=function(t){if(+t||(t=0),!(t>=this.length||0>t)){var e=2*t+1,n=2*t+2,r=t;if(e<this.length&&this.isHigherPriority(e,r)&&(r=e),n<this.length&&this.isHigherPriority(n,r)&&(r=n),r!==t){var o=this.items[t];this.items[t]=this.items[r],this.items[r]=o,this.heapify(r)}}},oe.peek=function(){return this.items[0].value},oe.removeAt=function(t){this.items[t]=this.items[--this.length],this.items[this.length]=i,this.heapify()},oe.dequeue=function(){var t=this.peek();return this.removeAt(0),t},oe.enqueue=function(t){var e=this.length++;this.items[e]=new S(re.count++,t),this.percolate(e)},oe.remove=function(t){for(var e=0;e<this.length;e++)if(this.items[e].value===t)return this.removeAt(e),!0;return!1},re.count=0;var ie=tt.CompositeDisposable=function(){var t,e,n=[];if(Array.isArray(arguments[0]))n=arguments[0],e=n.length;else for(e=arguments.length,n=new Array(e),t=0;e>t;t++)n[t]=arguments[t];for(t=0;e>t;t++)if(!pe(n[t]))throw new TypeError(\"Not a disposable\");this.disposables=n,this.isDisposed=!1,this.length=n.length},se=ie.prototype;se.add=function(t){this.isDisposed?t.dispose():(this.disposables.push(t),this.length++)},se.remove=function(t){var e=!1;if(!this.isDisposed){var n=this.disposables.indexOf(t);-1!==n&&(e=!0,this.disposables.splice(n,1),this.length--,t.dispose())}return e},se.dispose=function(){\nif(!this.isDisposed){this.isDisposed=!0;for(var t=this.disposables.length,e=new Array(t),n=0;t>n;n++)e[n]=this.disposables[n];for(this.disposables=[],this.length=0,n=0;t>n;n++)e[n].dispose()}};var ue=tt.Disposable=function(t){this.isDisposed=!1,this.action=t||et};ue.prototype.dispose=function(){this.isDisposed||(this.action(),this.isDisposed=!0)};var ae=ue.create=function(t){return new ue(t)},ce=ue.empty={dispose:et},pe=ue.isDisposable=function(t){return t&&at(t.dispose)},he=ue.checkDisposed=function(t){if(t.isDisposed)throw new vt},fe=tt.SingleAssignmentDisposable=function(){this.isDisposed=!1,this.current=null};fe.prototype.getDisposable=function(){return this.current},fe.prototype.setDisposable=function(t){if(this.current)throw new Error(\"Disposable has already been assigned\");var e=this.isDisposed;!e&&(this.current=t),e&&t&&t.dispose()},fe.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var t=this.current;this.current=null}t&&t.dispose()};var le=tt.SerialDisposable=function(){this.isDisposed=!1,this.current=null};le.prototype.getDisposable=function(){return this.current},le.prototype.setDisposable=function(t){var e=this.isDisposed;if(!e){var n=this.current;this.current=t}n&&n.dispose(),e&&t&&t.dispose()},le.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var t=this.current;this.current=null}t&&t.dispose()};var de=tt.RefCountDisposable=function(){function t(t){this.disposable=t,this.disposable.count++,this.isInnerDisposed=!1}function e(t){this.underlyingDisposable=t,this.isDisposed=!1,this.isPrimaryDisposed=!1,this.count=0}return t.prototype.dispose=function(){this.disposable.isDisposed||this.isInnerDisposed||(this.isInnerDisposed=!0,this.disposable.count--,0===this.disposable.count&&this.disposable.isPrimaryDisposed&&(this.disposable.isDisposed=!0,this.disposable.underlyingDisposable.dispose()))},e.prototype.dispose=function(){this.isDisposed||this.isPrimaryDisposed||(this.isPrimaryDisposed=!0,0===this.count&&(this.isDisposed=!0,this.underlyingDisposable.dispose()))},e.prototype.getDisposable=function(){return this.isDisposed?ce:new t(this)},e}();E.prototype.dispose=function(){this.scheduler.scheduleWithState(this,C)};var ve=tt.internals.ScheduledItem=function(t,e,n,r,o){this.scheduler=t,this.state=e,this.action=n,this.dueTime=r,this.comparer=o||it,this.disposable=new fe};ve.prototype.invoke=function(){this.disposable.setDisposable(this.invokeCore())},ve.prototype.compareTo=function(t){return this.comparer(this.dueTime,t.dueTime)},ve.prototype.isCancelled=function(){return this.disposable.isDisposed},ve.prototype.invokeCore=function(){return this.action(this.scheduler,this.state)};var ye=tt.Scheduler=function(){function t(t,e,n,r){this.now=t,this._schedule=e,this._scheduleRelative=n,this._scheduleAbsolute=r}function e(t,e){return e(),ce}t.isScheduler=function(e){return e instanceof t};var n=t.prototype;return n.schedule=function(t){return this._schedule(t,e)},n.scheduleWithState=function(t,e){return this._schedule(t,e)},n.scheduleWithRelative=function(t,n){return this._scheduleRelative(n,t,e)},n.scheduleWithRelativeAndState=function(t,e,n){return this._scheduleRelative(t,e,n)},n.scheduleWithAbsolute=function(t,n){return this._scheduleAbsolute(n,t,e)},n.scheduleWithAbsoluteAndState=function(t,e,n){return this._scheduleAbsolute(t,e,n)},t.now=rt,t.normalize=function(t){return 0>t&&(t=0),t},t}(),be=ye.normalize,me=ye.isScheduler;!function(t){function e(t,e){function n(e){o(e,function(e){var r=!1,o=!1,s=t.scheduleWithState(e,function(t,e){return r?i.remove(s):o=!0,n(e),ce});o||(i.add(s),r=!0)})}var r=e[0],o=e[1],i=new ie;return n(r),i}function n(t,e,n){function r(e){i(e,function(e,o){var i=!1,u=!1,a=t[n](e,o,function(t,e){return i?s.remove(a):u=!0,r(e),ce});u||(s.add(a),i=!0)})}var o=e[0],i=e[1],s=new ie;return r(o),s}function r(t,e){t(function(n){e(t,n)})}t.scheduleRecursive=function(t){return this.scheduleRecursiveWithState(t,r)},t.scheduleRecursiveWithState=function(t,n){return this.scheduleWithState([t,n],e)},t.scheduleRecursiveWithRelative=function(t,e){return this.scheduleRecursiveWithRelativeAndState(e,t,r)},t.scheduleRecursiveWithRelativeAndState=function(t,e,r){return this._scheduleRelative([t,r],e,function(t,e){return n(t,e,\"scheduleWithRelativeAndState\")})},t.scheduleRecursiveWithAbsolute=function(t,e){return this.scheduleRecursiveWithAbsoluteAndState(e,t,r)},t.scheduleRecursiveWithAbsoluteAndState=function(t,e,r){return this._scheduleAbsolute([t,r],e,function(t,e){return n(t,e,\"scheduleWithAbsoluteAndState\")})}}(ye.prototype),function(t){ye.prototype.schedulePeriodic=function(t,e){return this.schedulePeriodicWithState(null,t,e)},ye.prototype.schedulePeriodicWithState=function(t,e,n){if(\"undefined\"==typeof X.setInterval)throw new bt;e=be(e);var r=t,o=X.setInterval(function(){r=n(r)},e);return ae(function(){X.clearInterval(o)})}}(ye.prototype),function(t){t.catchError=t[\"catch\"]=function(t){return new Ae(this,t)}}(ye.prototype);var ge,we,xe=(tt.internals.SchedulePeriodicRecursive=function(){function t(t,e){e(0,this._period);try{this._state=this._action(this._state)}catch(n){throw this._cancel.dispose(),n}}function e(t,e,n,r){this._scheduler=t,this._state=e,this._period=n,this._action=r}return e.prototype.start=function(){var e=new fe;return this._cancel=e,e.setDisposable(this._scheduler.scheduleRecursiveWithRelativeAndState(0,this._period,t.bind(this))),e},e}(),ye.immediate=function(){function t(t,e){return e(this,t)}return new ye(rt,t,wt,wt)}()),_e=ye.currentThread=function(){function t(){for(;n.length>0;){var t=n.dequeue();!t.isCancelled()&&t.invoke()}}function e(e,r){var o=new ve(this,e,r,this.now());if(n)n.enqueue(o);else{n=new re(4),n.enqueue(o);var i=x(t)();if(n=null,i===ne)return _(i.e)}return o.disposable}var n,r=new ye(rt,e,wt,wt);return r.scheduleRequired=function(){return!n},r}(),Se=function(){var t,e=et;if(X.setTimeout)t=X.setTimeout,e=X.clearTimeout;else{if(!X.WScript)throw new bt;t=function(t,e){X.WScript.Sleep(e),t()}}return{setTimeout:t,clearTimeout:e}}(),Ee=Se.setTimeout,Ce=Se.clearTimeout;!function(){function t(e){if(s)Ee(function(){t(e)},0);else{var n=i[e];if(n){s=!0;var r=x(n)();if(we(e),s=!1,r===ne)return _(r.e)}}}function n(){if(!X.postMessage||X.importScripts)return!1;var t=!1,e=X.onmessage;return X.onmessage=function(){t=!0},X.postMessage(\"\",\"*\"),X.onmessage=e,t}function r(e){\"string\"==typeof e.data&&e.data.substring(0,c.length)===c&&t(e.data.substring(c.length))}var o=1,i={},s=!1;we=function(t){delete i[t]};var u=RegExp(\"^\"+String(Wt).replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\").replace(/toString| for [^\\]]+/g,\".*?\")+\"$\"),a=\"function\"==typeof(a=Z&&Y&&Z.setImmediate)&&!u.test(a)&&a;if(at(a))ge=function(e){var n=o++;return i[n]=e,a(function(){t(n)}),n};else if(\"undefined\"!=typeof e&&\"[object process]\"==={}.toString.call(e))ge=function(n){var r=o++;return i[r]=n,e.nextTick(function(){t(r)}),r};else if(n()){var c=\"ms.rx.schedule\"+Math.random();X.addEventListener?X.addEventListener(\"message\",r,!1):X.attachEvent?X.attachEvent(\"onmessage\",r):X.onmessage=r,ge=function(t){var e=o++;return i[e]=t,X.postMessage(c+currentId,\"*\"),e}}else if(X.MessageChannel){var p=new X.MessageChannel;p.port1.onmessage=function(e){t(e.data)},ge=function(t){var e=o++;return i[e]=t,p.port2.postMessage(e),e}}else ge=\"document\"in X&&\"onreadystatechange\"in X.document.createElement(\"script\")?function(e){var n=X.document.createElement(\"script\"),r=o++;return i[r]=e,n.onreadystatechange=function(){t(r),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},X.document.documentElement.appendChild(n),r}:function(e){var n=o++;return i[n]=e,Ee(function(){t(n)},0),n}}();var Ae=(ye.timeout=ye[\"default\"]=function(){function t(t,e){var n=this,r=new fe,o=ge(function(){!r.isDisposed&&r.setDisposable(e(n,t))});return new ie(r,ae(function(){we(o)}))}function e(t,e,n){var r=this,o=ye.normalize(e),i=new fe;if(0===o)return r.scheduleWithState(t,n);var s=Ee(function(){!i.isDisposed&&i.setDisposable(n(r,t))},o);return new ie(i,ae(function(){Ce(s)}))}function n(t,e,n){return this.scheduleWithRelativeAndState(t,e-this.now(),n)}return new ye(rt,t,e,n)}(),function(t){function e(t,e){return this._scheduler.scheduleWithState(t,this._wrap(e))}function n(t,e,n){return this._scheduler.scheduleWithRelativeAndState(t,e,this._wrap(n))}function r(t,e,n){return this._scheduler.scheduleWithAbsoluteAndState(t,e,this._wrap(n))}function o(o,i){this._scheduler=o,this._handler=i,this._recursiveOriginal=null,this._recursiveWrapper=null,t.call(this,this._scheduler.now.bind(this._scheduler),e,n,r)}return Zt(o,t),o.prototype._clone=function(t){return new o(t,this._handler)},o.prototype._wrap=function(t){var e=this;return function(n,r){try{return t(e._getRecursiveWrapper(n),r)}catch(o){if(!e._handler(o))throw o;return ce}}},o.prototype._getRecursiveWrapper=function(t){if(this._recursiveOriginal!==t){this._recursiveOriginal=t;var e=this._clone(t);e._recursiveOriginal=t,e._recursiveWrapper=e,this._recursiveWrapper=e}return this._recursiveWrapper},o.prototype.schedulePeriodicWithState=function(t,e,n){var r=this,o=!1,i=new fe;return i.setDisposable(this._scheduler.schedulePeriodicWithState(t,e,function(t){if(o)return null;try{return n(t)}catch(e){if(o=!0,!r._handler(e))throw e;return i.dispose(),null}})),i},o}(ye)),Ne=tt.Notification=function(){function t(t,e,n,r,o,i){this.kind=t,this.value=e,this.exception=n,this._accept=r,this._acceptObservable=o,this.toString=i}return t.prototype.accept=function(t,e,n){return t&&\"object\"==typeof t?this._acceptObservable(t):this._accept(t,e,n)},t.prototype.toObservable=function(t){var e=this;return me(t)||(t=xe),new qn(function(n){return t.scheduleWithState(e,function(t,e){e._acceptObservable(n),\"N\"===e.kind&&n.onCompleted()})})},t}(),ke=Ne.createOnNext=function(){function t(t){return t(this.value)}function e(t){return t.onNext(this.value)}function n(){return\"OnNext(\"+this.value+\")\"}return function(r){return new Ne(\"N\",r,null,t,e,n)}}(),Oe=Ne.createOnError=function(){function t(t,e){return e(this.exception)}function e(t){return t.onError(this.exception)}function n(){return\"OnError(\"+this.exception+\")\"}return function(r){return new Ne(\"E\",null,r,t,e,n)}}(),Pe=Ne.createOnCompleted=function(){function t(t,e,n){return n()}function e(t){return t.onCompleted()}function n(){return\"OnCompleted()\"}return function(){return new Ne(\"C\",null,null,t,e,n)}}(),je=tt.Observer=function(){};je.prototype.toNotifier=function(){var t=this;return function(e){return e.accept(t)}},je.prototype.asObserver=function(){return new Me(this.onNext.bind(this),this.onError.bind(this),this.onCompleted.bind(this))},je.prototype.checked=function(){return new Te(this)};var De=je.create=function(t,e,n){return t||(t=et),e||(e=st),n||(n=et),new Me(t,e,n)};je.fromNotifier=function(t,e){return new Me(function(n){return t.call(e,ke(n))},function(n){return t.call(e,Oe(n))},function(){return t.call(e,Pe())})},je.prototype.notifyOn=function(t){return new $e(t,this)},je.prototype.makeSafe=function(t){return new AnonymousSafeObserver(this._onNext,this._onError,this._onCompleted,t)};var qe,Re=tt.internals.AbstractObserver=function(t){function e(){this.isStopped=!1,t.call(this)}return Zt(e,t),e.prototype.next=gt,e.prototype.error=gt,e.prototype.completed=gt,e.prototype.onNext=function(t){this.isStopped||this.next(t)},e.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.error(t))},e.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.completed())},e.prototype.dispose=function(){this.isStopped=!0},e.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.error(t),!0)},e}(je),Me=tt.AnonymousObserver=function(t){function e(e,n,r){t.call(this),this._onNext=e,this._onError=n,this._onCompleted=r}return Zt(e,t),e.prototype.next=function(t){this._onNext(t)},e.prototype.error=function(t){this._onError(t)},e.prototype.completed=function(){this._onCompleted()},e}(Re),Te=function(t){function e(e){t.call(this),this._observer=e,this._state=0}Zt(e,t);var n=e.prototype;return n.onNext=function(t){this.checkAccess();var e=x(this._observer.onNext).call(this._observer,t);this._state=0,e===ne&&_(e.e)},n.onError=function(t){this.checkAccess();var e=x(this._observer.onError).call(this._observer,t);this._state=2,e===ne&&_(e.e)},n.onCompleted=function(){this.checkAccess();var t=x(this._observer.onCompleted).call(this._observer);this._state=2,t===ne&&_(t.e)},n.checkAccess=function(){if(1===this._state)throw new Error(\"Re-entrancy detected\");if(2===this._state)throw new Error(\"Observer completed\");0===this._state&&(this._state=1)},e}(je),Ve=tt.internals.ScheduledObserver=function(t){function e(e,n){t.call(this),this.scheduler=e,this.observer=n,this.isAcquired=!1,this.hasFaulted=!1,this.queue=[],this.disposable=new le}return Zt(e,t),e.prototype.next=function(t){var e=this;this.queue.push(function(){e.observer.onNext(t)})},e.prototype.error=function(t){var e=this;this.queue.push(function(){e.observer.onError(t)})},e.prototype.completed=function(){var t=this;this.queue.push(function(){t.observer.onCompleted()})},e.prototype.ensureActive=function(){var t=!1,e=this;!this.hasFaulted&&this.queue.length>0&&(t=!this.isAcquired,this.isAcquired=!0),t&&this.disposable.setDisposable(this.scheduler.scheduleRecursive(function(t){var n;if(!(e.queue.length>0))return void(e.isAcquired=!1);n=e.queue.shift();try{n()}catch(r){throw e.queue=[],e.hasFaulted=!0,r}t()}))},e.prototype.dispose=function(){t.prototype.dispose.call(this),this.disposable.dispose()},e}(Re),$e=function(t){function e(e,n,r){t.call(this,e,n),this._cancel=r}return Zt(e,t),e.prototype.next=function(e){t.prototype.next.call(this,e),this.ensureActive()},e.prototype.error=function(e){t.prototype.error.call(this,e),this.ensureActive()},e.prototype.completed=function(){t.prototype.completed.call(this),this.ensureActive()},e.prototype.dispose=function(){t.prototype.dispose.call(this),this._cancel&&this._cancel.dispose(),this._cancel=null},e}(Ve),We=tt.Observable=function(){function t(t){if(tt.config.longStackSupport&&ct){try{throw new Error}catch(e){this.stack=e.stack.substring(e.stack.indexOf(\"\\n\")+1)}var n=this;this._subscribe=function(e){var r=e.onError.bind(e);return e.onError=function(t){a(t,n),r(t)},t.call(n,e)}}else this._subscribe=t}return qe=t.prototype,qe.subscribe=qe.forEach=function(t,e,n){return this._subscribe(\"object\"==typeof t?t:De(t,e,n))},qe.subscribeOnNext=function(t,e){return this._subscribe(De(\"undefined\"!=typeof e?function(n){t.call(e,n)}:t))},qe.subscribeOnError=function(t,e){return this._subscribe(De(null,\"undefined\"!=typeof e?function(n){t.call(e,n)}:t))},qe.subscribeOnCompleted=function(t,e){return this._subscribe(De(null,null,\"undefined\"!=typeof e?function(){t.call(e)}:t))},t}(),ze=tt.ObservableBase=function(t){function e(t){return t&&at(t.dispose)?t:at(t)?ae(t):ce}function n(t,n){var r=n[0],o=n[1],i=x(o.subscribeCore).call(o,r);return i!==ne||r.fail(ne.e)?void r.setDisposable(e(i)):_(ne.e)}function r(t){var e=new Rn(t),r=[e,this];return _e.scheduleRequired()?_e.scheduleWithState(r,n):n(null,r),e}function o(){t.call(this,r)}return Zt(o,t),o.prototype.subscribeCore=gt,o}(We),Ge=tt.internals.Enumerable=function(){},Je=function(t){function e(e){this.sources=e,t.call(this)}function n(t,e,n){this.o=t,this.s=e,this.e=n,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){var e,r=new le,o=xe.scheduleRecursiveWithState(this.sources[xt](),function(o,i){if(!e){var s=x(o.next).call(o);if(s===ne)return t.onError(s.e);if(s.done)return t.onCompleted();var u=s.value;ut(u)&&(u=Xe(u));var a=new fe;r.setDisposable(a),a.setDisposable(u.subscribe(new n(t,i,o)))}});return new ie(r,o,ae(function(){e=!0}))},n.prototype.onNext=function(t){this.isStopped||this.o.onNext(t)},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.s(this.e))},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);Ge.prototype.concat=function(){return new Je(this)};var Ie=function(t){function e(e){this.sources=e,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e,n=this.sources[xt](),r=new le,o=xe.scheduleRecursiveWithState(null,function(o,i){if(!e){var s=x(n.next).call(n);if(s===ne)return t.onError(s.e);if(s.done)return null!==o?t.onError(o):t.onCompleted();var u=s.value;ut(u)&&(u=Xe(u));var a=new fe;r.setDisposable(a),a.setDisposable(u.subscribe(function(e){t.onNext(e)},i,function(){t.onCompleted()}))}});return new ie(r,o,ae(function(){e=!0}))},e}(ze);Ge.prototype.catchError=function(){return new Ie(this)},Ge.prototype.catchErrorWhen=function(t){var e=this;return new qn(function(n){var r,o,i=new Tn,s=new Tn,u=t(i),a=u.subscribe(s),c=e[xt](),p=new le,h=xe.scheduleRecursive(function(t){if(!r){var e=x(c.next).call(c);if(e===ne)return n.onError(e.e);if(e.done)return void(o?n.onError(o):n.onCompleted());var u=e.value;ut(u)&&(u=Xe(u));var a=new fe,h=new fe;p.setDisposable(new ie(h,a)),a.setDisposable(u.subscribe(function(t){n.onNext(t)},function(e){h.setDisposable(s.subscribe(t,function(t){n.onError(t)},function(){n.onCompleted()})),i.onNext(e)},function(){n.onCompleted()}))}});return new ie(a,p,h,ae(function(){r=!0}))})};var Le=function(t){function e(t,e){this.v=t,this.c=null==e?-1:e}function n(t){this.v=t.v,this.l=t.c}return Zt(e,t),e.prototype[xt]=function(){return new n(this)},n.prototype.next=function(){return 0===this.l?_t:(this.l>0&&this.l--,{done:!1,value:this.v})},e}(Ge),Be=Ge.repeat=function(t,e){return new Le(t,e)},Fe=function(t){function e(t,e,n){this.s=t,this.fn=e?At(e,n,3):null}function n(t){this.i=-1,this.s=t.s,this.l=this.s.length,this.fn=t.fn}return Zt(e,t),e.prototype[xt]=function(){return new n(this)},n.prototype.next=function(){return++this.i<this.l?{done:!1,value:this.fn?this.fn(this.s[this.i],this.i,this.s):this.s[this.i]}:_t},e}(Ge),Ue=Ge.of=function(t,e,n){return new Fe(t,e,n)};qe.observeOn=function(t){var e=this;return new qn(function(n){return e.subscribe(new $e(t,n))},e)},qe.subscribeOn=function(t){var e=this;return new qn(function(n){var r=new fe,o=new le;return o.setDisposable(r),r.setDisposable(t.schedule(function(){o.setDisposable(new E(t,e.subscribe(n)))})),o},e)};var He=function(t){function e(e){this.p=e,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.p.then(function(e){t.onNext(e),t.onCompleted()},function(e){t.onError(e)}),ce},e}(ze),Xe=We.fromPromise=function(t){return new He(t)};qe.toPromise=function(t){if(t||(t=tt.config.Promise),!t)throw new bt(\"Promise type not provided nor in Rx.config.Promise\");var e=this;return new t(function(t,n){var r,o=!1;e.subscribe(function(t){r=t,o=!0},n,function(){o&&t(r)})})};var Qe=function(t){function e(e){this.source=e,t.call(this)}function n(t){this.o=t,this.a=[],this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t))},n.prototype.onNext=function(t){this.isStopped||this.a.push(t)},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onNext(this.a),this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.toArray=function(){return new Qe(this)},We.create=We.createWithDisposable=function(t,e){return new qn(t,e)};var Ke=(We.defer=function(t){return new qn(function(e){var n;try{n=t()}catch(r){return dn(r).subscribe(e)}return ut(n)&&(n=Xe(n)),n.subscribe(e)})},function(t){function e(e){this.scheduler=e,t.call(this)}function n(t,e){this.observer=t,this.parent=e}function r(t,e){e.onCompleted()}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new n(t,this);return e.run()},n.prototype.run=function(){return this.parent.scheduler.scheduleWithState(this.observer,r)},e}(ze)),Ye=We.empty=function(t){return me(t)||(t=xe),new Ke(t)},Ze=function(t){function e(e,n,r){this.iterable=e,this.mapper=n,this.scheduler=r,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new tn(t,this);return e.run()},e}(ze),tn=function(){function t(t,e){this.observer=t,this.parent=e}return t.prototype.run=function(){function t(t,e){try{var i=n.next()}catch(s){return r.onError(s)}if(i.done)return r.onCompleted();var u=i.value;if(o)try{u=o(u,t)}catch(s){return r.onError(s)}r.onNext(u),e(t+1)}var e=Object(this.parent.iterable),n=j(e),r=this.observer,o=this.parent.mapper;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},t}(),en=Math.pow(2,53)-1;A.prototype[xt]=function(){return new N(this._s)},N.prototype[xt]=function(){return this},N.prototype.next=function(){return this._i<this._l?{done:!1,value:this._s.charAt(this._i++)}:_t},k.prototype[xt]=function(){return new O(this._a)},O.prototype[xt]=function(){return this},O.prototype.next=function(){return this._i<this._l?{done:!1,value:this._a[this._i++]}:_t};var nn=We.from=function(t,e,n,r){if(null==t)throw new Error(\"iterable cannot be null.\");if(e&&!at(e))throw new Error(\"mapFn when provided must be a function\");if(e)var o=At(e,n,2);return me(r)||(r=_e),new Ze(t,o,r)},rn=function(t){function e(e,n){this.args=e,this.scheduler=n,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new R(t,this);return e.run()},e}(ze);R.prototype.run=function(){function t(t,o){r>t?(e.onNext(n[t]),o(t+1)):e.onCompleted()}var e=this.observer,n=this.parent.args,r=n.length;return this.parent.scheduler.scheduleRecursiveWithState(0,t)};var on=We.fromArray=function(t,e){return me(e)||(e=_e),new rn(t,e)};We.generate=function(t,e,n,r,o){return me(o)||(o=_e),new qn(function(i){var s=!0;return o.scheduleRecursiveWithState(t,function(t,o){var u,a;try{s?s=!1:t=n(t),u=e(t),u&&(a=r(t))}catch(c){return i.onError(c)}u?(i.onNext(a),o(t)):i.onCompleted()})})};var sn=function(t){function e(){t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){return ce},e}(ze),un=We.never=function(){return new sn};We.of=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];return new rn(e,_e)},We.ofWithScheduler=function(t){for(var e=arguments.length,n=new Array(e-1),r=1;e>r;r++)n[r-1]=arguments[r];return new rn(n,t)};var an=function(t){function e(e,n){this.obj=e,this.keys=Object.keys(e),this.scheduler=n,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new T(t,this);return e.run()},e}(ze);T.prototype.run=function(){function t(t,i){if(o>t){var s=r[t];e.onNext([s,n[s]]),i(t+1)}else e.onCompleted()}var e=this.observer,n=this.parent.obj,r=this.parent.keys,o=r.length;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},We.pairs=function(t,e){return e||(e=_e),new an(t,e)};var cn=function(t){function e(e,n,r){this.start=e,this.rangeCount=n,this.scheduler=r,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new pn(t,this);return e.run()},e}(ze),pn=function(){function t(t,e){this.observer=t,this.parent=e}return t.prototype.run=function(){function t(t,o){n>t?(r.onNext(e+t),o(t+1)):r.onCompleted()}var e=this.parent.start,n=this.parent.rangeCount,r=this.observer;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},t}();We.range=function(t,e,n){return me(n)||(n=_e),new cn(t,e,n)};var hn=function(t){function e(e,n,r){this.value=e,this.repeatCount=null==n?-1:n,this.scheduler=r,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new V(t,this);return e.run()},e}(ze);V.prototype.run=function(){function t(t,r){return(-1===t||t>0)&&(e.onNext(n),t>0&&t--),0===t?e.onCompleted():void r(t)}var e=this.observer,n=this.parent.value;return this.parent.scheduler.scheduleRecursiveWithState(this.parent.repeatCount,t)},We.repeat=function(t,e,n){return me(n)||(n=_e),new hn(t,e,n)};var fn=function(t){function e(e,n){this.value=e,this.scheduler=n,t.call(this)}function n(t,e){this.observer=t,this.parent=e}function r(t,e){var n=e[0],r=e[1];r.onNext(n),r.onCompleted()}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new n(t,this);return e.run()},n.prototype.run=function(){return this.parent.scheduler.scheduleWithState([this.parent.value,this.observer],r)},e}(ze),ln=(We[\"return\"]=We.just=We.returnValue=function(t,e){return me(e)||(e=xe),new fn(t,e)},function(t){function e(e,n){this.error=e,this.scheduler=n,t.call(this)}function n(t,e){this.o=t,this.p=e}function r(t,e){var n=e[0],r=e[1];r.onError(n)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new n(t,this);return e.run()},n.prototype.run=function(){return this.p.scheduler.scheduleWithState([this.p.error,this.o],r)},e}(ze)),dn=We[\"throw\"]=We.throwError=We.throwException=function(t,e){return me(e)||(e=xe),new ln(t,e)};We.using=function(t,e){return new qn(function(n){var r,o,i=ce;try{r=t(),r&&(i=r),o=e(r)}catch(s){return new ie(dn(s).subscribe(n),i)}return new ie(o.subscribe(n),i)})},qe.amb=function(t){var e=this;return new qn(function(n){function r(){i||(i=s,c.dispose())}function o(){i||(i=u,a.dispose())}var i,s=\"L\",u=\"R\",a=new fe,c=new fe;return ut(t)&&(t=Xe(t)),a.setDisposable(e.subscribe(function(t){r(),i===s&&n.onNext(t)},function(t){r(),i===s&&n.onError(t)},function(){r(),i===s&&n.onCompleted()})),c.setDisposable(t.subscribe(function(t){o(),i===u&&n.onNext(t)},function(t){o(),i===u&&n.onError(t)},function(){o(),i===u&&n.onCompleted()})),new ie(a,c)})},We.amb=function(){function t(t,e){return t.amb(e)}var e=un(),n=[];if(Array.isArray(arguments[0]))n=arguments[0];else for(var r=0,o=arguments.length;o>r;r++)n.push(arguments[r]);for(var r=0,o=n.length;o>r;r++)e=t(e,n[r]);return e},qe[\"catch\"]=qe.catchError=qe.catchException=function(t){return\"function\"==typeof t?$(this,t):vn([this,t])};var vn=We.catchError=We[\"catch\"]=We.catchException=function(){var t=[];if(Array.isArray(arguments[0]))t=arguments[0];else for(var e=0,n=arguments.length;n>e;e++)t.push(arguments[e]);return Ue(t).catchError()};qe.combineLatest=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];return Array.isArray(e[0])?e[0].unshift(this):e.unshift(this),yn.apply(this,e)};var yn=We.combineLatest=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];var r=e.pop();return Array.isArray(e[0])&&(e=e[0]),new qn(function(t){function n(e){if(u[e]=!0,a||(a=u.every(nt))){try{var n=r.apply(null,p)}catch(o){return t.onError(o)}t.onNext(n)}else c.filter(function(t,n){return n!==e}).every(nt)&&t.onCompleted()}function o(e){c[e]=!0,c.every(nt)&&t.onCompleted()}for(var i=e.length,s=function(){return!1},u=g(i,s),a=!1,c=g(i,s),p=new Array(i),h=new Array(i),f=0;i>f;f++)!function(r){var i=e[r],s=new fe;ut(i)&&(i=Xe(i)),s.setDisposable(i.subscribe(function(t){p[r]=t,n(r)},function(e){t.onError(e)},function(){o(r)})),h[r]=s}(f);return new ie(h)},this)};qe.concat=function(){for(var t=[],e=0,n=arguments.length;n>e;e++)t.push(arguments[e]);return t.unshift(this),mn.apply(null,t)};var bn=function(t){function e(e){this.sources=e,t.call(this)}function n(t,e){this.sources=t,this.o=e}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new n(this.sources,t);return e.run()},n.prototype.run=function(){var t,e=new le,n=this.sources,r=n.length,o=this.o,i=xe.scheduleRecursiveWithState(0,function(i,s){if(!t){if(i===r)return o.onCompleted();var u=n[i];ut(u)&&(u=Xe(u));var a=new fe;e.setDisposable(a),a.setDisposable(u.subscribe(function(t){o.onNext(t)},function(t){o.onError(t)},function(){s(i+1)}))}});return new ie(e,i,ae(function(){t=!0}))},e}(ze),mn=We.concat=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{t=new Array(arguments.length);for(var e=0,n=arguments.length;n>e;e++)t[e]=arguments[e]}return new bn(t)};qe.concatAll=qe.concatObservable=function(){return this.merge(1)};var gn=function(t){function e(e,n){this.source=e,this.maxConcurrent=n,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new ie;return e.add(this.source.subscribe(new wn(t,this.maxConcurrent,e))),e},e}(ze),wn=function(){function t(t,e,n){this.o=t,this.max=e,this.g=n,this.done=!1,this.q=[],this.activeCount=0,this.isStopped=!1}function e(t,e){this.parent=t,this.sad=e,this.isStopped=!1}return t.prototype.handleSubscribe=function(t){var n=new fe;this.g.add(n),ut(t)&&(t=Xe(t)),n.setDisposable(t.subscribe(new e(this,n)))},t.prototype.onNext=function(t){this.isStopped||(this.activeCount<this.max?(this.activeCount++,this.handleSubscribe(t)):this.q.push(t))},t.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},t.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.done=!0,0===this.activeCount&&this.o.onCompleted())},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e.prototype.onNext=function(t){this.isStopped||this.parent.o.onNext(t)},e.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.parent.o.onError(t))},e.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=!0;var t=this.parent;t.g.remove(this.sad),t.q.length>0?t.handleSubscribe(t.q.shift()):(t.activeCount--,t.done&&0===t.activeCount&&t.o.onCompleted())}},e.prototype.dispose=function(){this.isStopped=!0},e.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(t),!0)},t}();qe.merge=function(t){return\"number\"!=typeof t?xn(this,t):new gn(this,t)};var xn=We.merge=function(){var t,e,n=[],r=arguments.length;if(arguments[0])if(me(arguments[0]))for(t=arguments[0],e=1;r>e;e++)n.push(arguments[e]);else for(t=xe,e=0;r>e;e++)n.push(arguments[e]);else for(t=xe,e=1;r>e;e++)n.push(arguments[e]);return Array.isArray(n[0])&&(n=n[0]),M(t,n).mergeAll()},_n=tt.CompositeError=function(t){this.name=\"NotImplementedError\",this.innerErrors=t,this.message=\"This contains multiple errors. Check the innerErrors\",Error.call(this)};_n.prototype=Error.prototype,We.mergeDelayError=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{var e=arguments.length;t=new Array(e);for(var n=0;e>n;n++)t[n]=arguments[n]}var r=M(null,t);return new qn(function(t){function e(){0===s.length?t.onCompleted():1===s.length?t.onError(s[0]):t.onError(new _n(s))}var n=new ie,o=new fe,i=!1,s=[];return n.add(o),o.setDisposable(r.subscribe(function(r){var o=new fe;n.add(o),ut(r)&&(r=Xe(r)),o.setDisposable(r.subscribe(function(e){t.onNext(e)},function(t){s.push(t),n.remove(o),i&&1===n.length&&e()},function(){n.remove(o),i&&1===n.length&&e()}))},function(t){s.push(t),i=!0,1===n.length&&e()},function(){i=!0,1===n.length&&e()})),n})};var Sn=function(t){function e(e){this.source=e,t.call(this)}function n(t,e){this.o=t,this.g=e,this.isStopped=!1,this.done=!1}function r(t,e,n){this.parent=t,this.g=e,this.sad=n,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new ie,r=new fe;return e.add(r),r.setDisposable(this.source.subscribe(new n(t,e))),e},n.prototype.onNext=function(t){if(!this.isStopped){var e=new fe;this.g.add(e),ut(t)&&(t=Xe(t)),e.setDisposable(t.subscribe(new r(this,this.g,e)))}},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.done=!0,1===this.g.length&&this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},r.prototype.onNext=function(t){this.isStopped||this.parent.o.onNext(t)},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.parent.o.onError(t))},r.prototype.onCompleted=function(){if(!this.isStopped){var t=this.parent;this.isStopped=!0,t.g.remove(this.sad),t.done&&1===t.g.length&&t.o.onCompleted()}},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(t),!0)},e}(ze);qe.mergeAll=qe.mergeObservable=function(){\nreturn new Sn(this)},qe.onErrorResumeNext=function(t){if(!t)throw new Error(\"Second observable is required\");return En([this,t])};var En=We.onErrorResumeNext=function(){var t=[];if(Array.isArray(arguments[0]))t=arguments[0];else for(var e=0,n=arguments.length;n>e;e++)t.push(arguments[e]);return new qn(function(e){var n=0,r=new le,o=xe.scheduleRecursive(function(o){var i,s;n<t.length?(i=t[n++],ut(i)&&(i=Xe(i)),s=new fe,r.setDisposable(s),s.setDisposable(i.subscribe(e.onNext.bind(e),o,o))):e.onCompleted()});return new ie(r,o)})};qe.skipUntil=function(t){var e=this;return new qn(function(n){var r=!1,o=new ie(e.subscribe(function(t){r&&n.onNext(t)},function(t){n.onError(t)},function(){r&&n.onCompleted()}));ut(t)&&(t=Xe(t));var i=new fe;return o.add(i),i.setDisposable(t.subscribe(function(){r=!0,i.dispose()},function(t){n.onError(t)},function(){i.dispose()})),o},e)};var Cn=function(t){function e(e){this.source=e,t.call(this)}function n(t,e){this.o=t,this.inner=e,this.stopped=!1,this.latest=0,this.hasLatest=!1,this.isStopped=!1}function r(t,e){this.parent=t,this.id=e,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new le,r=this.source.subscribe(new n(t,e));return new ie(r,e)},n.prototype.onNext=function(t){if(!this.isStopped){var e=new fe,n=++this.latest;this.hasLatest=!0,this.inner.setDisposable(e),ut(t)&&(t=Xe(t)),e.setDisposable(t.subscribe(new r(this,n)))}},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.stopped=!0,!this.hasLatest&&this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},r.prototype.onNext=function(t){this.isStopped||this.parent.latest===this.id&&this.parent.o.onNext(t)},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.parent.latest===this.id&&this.parent.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.parent.latest===this.id&&(this.parent.hasLatest=!1,this.parent.isStopped&&this.parent.o.onCompleted()))},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(t),!0)},e}(ze);qe[\"switch\"]=qe.switchLatest=function(){return new Cn(this)};var An=function(t){function e(e,n){this.source=e,this.other=ut(n)?Xe(n):n,t.call(this)}function n(t){this.o=t,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return new ie(this.source.subscribe(t),this.other.subscribe(new n(t)))},n.prototype.onNext=function(t){this.isStopped||this.o.onCompleted()},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){!this.isStopped&&(this.isStopped=!0)},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.takeUntil=function(t){return new An(this,t)},qe.withLatestFrom=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];var r=e.pop(),o=this;return Array.isArray(e[0])&&(e=e[0]),new qn(function(t){for(var n=e.length,i=g(n,W),s=!1,u=new Array(n),a=new Array(n+1),c=0;n>c;c++)!function(n){var r=e[n],o=new fe;ut(r)&&(r=Xe(r)),o.setDisposable(r.subscribe(function(t){u[n]=t,i[n]=!0,s=i.every(nt)},function(e){t.onError(e)},et)),a[n]=o}(c);var p=new fe;return p.setDisposable(o.subscribe(function(e){var n=[e].concat(u);if(s){var o=x(r).apply(null,n);return o===ne?t.onError(o.e):void t.onNext(o)}},function(e){t.onError(e)},function(){t.onCompleted()})),a[n]=p,new ie(a)},this)},qe.zip=function(){if(Array.isArray(arguments[0]))return z.apply(this,arguments);for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];var r=this,o=e.pop();return e.unshift(r),new qn(function(t){for(var n=e.length,i=g(n,G),s=g(n,W),u=new Array(n),a=0;n>a;a++)!function(n){var a=e[n],c=new fe;ut(a)&&(a=Xe(a)),c.setDisposable(a.subscribe(function(e){if(i[n].push(e),i.every(function(t){return t.length>0})){var u=i.map(function(t){return t.shift()}),a=x(o).apply(r,u);if(a===ne)return t.onError(a.e);t.onNext(a)}else s.filter(function(t,e){return e!==n}).every(nt)&&t.onCompleted()},function(e){t.onError(e)},function(){s[n]=!0,s.every(nt)&&t.onCompleted()})),u[n]=c}(a);return new ie(u)},r)},We.zip=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];var r=e.shift();return r.zip.apply(r,e)},We.zipArray=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{var e=arguments.length;t=new Array(e);for(var n=0;e>n;n++)t[n]=arguments[n]}return new qn(function(e){for(var n=t.length,r=g(n,J),o=g(n,W),i=new Array(n),s=0;n>s;s++)!function(n){i[n]=new fe,i[n].setDisposable(t[n].subscribe(function(t){if(r[n].push(t),r.every(function(t){return t.length>0})){var i=r.map(function(t){return t.shift()});e.onNext(i)}else if(o.filter(function(t,e){return e!==n}).every(nt))return e.onCompleted()},function(t){e.onError(t)},function(){o[n]=!0,o.every(nt)&&e.onCompleted()}))}(s);return new ie(i)})},qe.asObservable=function(){var t=this;return new qn(function(e){return t.subscribe(e)},t)},qe.bufferWithCount=function(t,e){return\"number\"!=typeof e&&(e=t),this.windowWithCount(t,e).selectMany(function(t){return t.toArray()}).where(function(t){return t.length>0})},qe.dematerialize=function(){var t=this;return new qn(function(e){return t.subscribe(function(t){return t.accept(e)},function(t){e.onError(t)},function(){e.onCompleted()})},this)},qe.distinctUntilChanged=function(t,e){var n=this;return e||(e=ot),new qn(function(r){var o,i=!1;return n.subscribe(function(n){var s=n;if(t&&(s=x(t)(n),s===ne))return r.onError(s.e);if(i){var u=x(e)(o,s);if(u===ne)return r.onError(u.e)}i&&u||(i=!0,o=s,r.onNext(n))},function(t){r.onError(t)},function(){r.onCompleted()})},this)};var Nn=function(t){function e(e,n,r,o){this.source=e,this.t=!n||at(n)?De(n||et,r||et,o||et):n,t.call(this)}function n(t,e){this.o=t,this.t=e,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t,this.t))},n.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.t.onNext).call(this.t,t);e===ne&&this.o.onError(e.e),this.o.onNext(t)}},n.prototype.onError=function(t){if(!this.isStopped){this.isStopped=!0;var e=x(this.t.onError).call(this.t,t);if(e===ne)return this.o.onError(e.e);this.o.onError(t)}},n.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=!0;var t=x(this.t.onCompleted).call(this.t);if(t===ne)return this.o.onError(t.e);this.o.onCompleted()}},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe[\"do\"]=qe.tap=qe.doAction=function(t,e,n){return new Nn(this,t,e,n)},qe.doOnNext=qe.tapOnNext=function(t,e){return this.tap(\"undefined\"!=typeof e?function(n){t.call(e,n)}:t)},qe.doOnError=qe.tapOnError=function(t,e){return this.tap(et,\"undefined\"!=typeof e?function(n){t.call(e,n)}:t)},qe.doOnCompleted=qe.tapOnCompleted=function(t,e){return this.tap(et,null,\"undefined\"!=typeof e?function(){t.call(e)}:t)},qe[\"finally\"]=qe.ensure=function(t){var e=this;return new qn(function(n){var r;try{r=e.subscribe(n)}catch(o){throw t(),o}return ae(function(){try{r.dispose()}catch(e){throw e}finally{t()}})},this)},qe.finallyAction=function(t){return this.ensure(t)};var kn=function(t){function e(e){this.source=e,t.call(this)}function n(t){this.o=t,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t))},n.prototype.onNext=et,n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.observer.onError(t),!0)},e}(ze);qe.ignoreElements=function(){return new kn(this)},qe.materialize=function(){var t=this;return new qn(function(e){return t.subscribe(function(t){e.onNext(ke(t))},function(t){e.onNext(Oe(t)),e.onCompleted()},function(){e.onNext(Pe()),e.onCompleted()})},t)},qe.repeat=function(t){return Be(this,t).concat()},qe.retry=function(t){return Be(this,t).catchError()},qe.retryWhen=function(t){return Be(this).catchErrorWhen(t)};var On=function(t){function e(e,n,r,o){this.source=e,this.accumulator=n,this.hasSeed=r,this.seed=o,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new I(t,this))},e}(ze);I.prototype.onNext=function(t){if(!this.isStopped){!this.hasValue&&(this.hasValue=!0);try{this.hasAccumulation?this.accumulation=this.accumulator(this.accumulation,t):(this.accumulation=this.hasSeed?this.accumulator(this.seed,t):t,this.hasAccumulation=!0)}catch(e){return this.observer.onError(e)}this.observer.onNext(this.accumulation)}},I.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.observer.onError(t))},I.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,!this.hasValue&&this.hasSeed&&this.observer.onNext(this.seed),this.observer.onCompleted())},I.prototype.dispose=function(){this.isStopped=!0},I.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.observer.onError(t),!0)},qe.scan=function(){var t,e,n=!1;return 2===arguments.length?(n=!0,t=arguments[0],e=arguments[1]):e=arguments[0],new On(this,e,n,t)},qe.skipLast=function(t){if(0>t)throw new yt;var e=this;return new qn(function(n){var r=[];return e.subscribe(function(e){r.push(e),r.length>t&&n.onNext(r.shift())},function(t){n.onError(t)},function(){n.onCompleted()})},e)},qe.startWith=function(){var t,e=0;arguments.length&&me(arguments[0])?(t=arguments[0],e=1):t=xe;for(var n=[],r=e,o=arguments.length;o>r;r++)n.push(arguments[r]);return Ue([on(n,t),this]).concat()},qe.takeLast=function(t){if(0>t)throw new yt;var e=this;return new qn(function(n){var r=[];return e.subscribe(function(e){r.push(e),r.length>t&&r.shift()},function(t){n.onError(t)},function(){for(;r.length>0;)n.onNext(r.shift());n.onCompleted()})},e)},qe.takeLastBuffer=function(t){var e=this;return new qn(function(n){var r=[];return e.subscribe(function(e){r.push(e),r.length>t&&r.shift()},function(t){n.onError(t)},function(){n.onNext(r),n.onCompleted()})},e)},qe.windowWithCount=function(t,e){var n=this;if(+t||(t=0),Math.abs(t)===1/0&&(t=0),0>=t)throw new yt;if(null==e&&(e=t),+e||(e=0),Math.abs(e)===1/0&&(e=0),0>=e)throw new yt;return new qn(function(r){function o(){var t=new Tn;a.push(t),r.onNext(ee(t,s))}var i=new fe,s=new de(i),u=0,a=[];return o(),i.setDisposable(n.subscribe(function(n){for(var r=0,i=a.length;i>r;r++)a[r].onNext(n);var s=u-t+1;s>=0&&s%e===0&&a.shift().onCompleted(),++u%e===0&&o()},function(t){for(;a.length>0;)a.shift().onError(t);r.onError(t)},function(){for(;a.length>0;)a.shift().onCompleted();r.onCompleted()})),s},n)},qe.selectConcat=qe.concatMap=function(t,e,n){return at(t)&&at(e)?this.concatMap(function(n,r){var o=t(n,r);return ut(o)&&(o=Xe(o)),(Et(o)||St(o))&&(o=nn(o)),o.map(function(t,o){return e(n,t,r,o)})}):at(t)?L(this,t,n):L(this,function(){return t})},qe.concatMapObserver=qe.selectConcatObserver=function(t,e,n,r){var o=this,i=At(t,r,2),s=At(e,r,1),u=At(n,r,0);return new qn(function(t){var e=0;return o.subscribe(function(n){var r;try{r=i(n,e++)}catch(o){return void t.onError(o)}ut(r)&&(r=Xe(r)),t.onNext(r)},function(e){var n;try{n=s(e)}catch(r){return void t.onError(r)}ut(n)&&(n=Xe(n)),t.onNext(n),t.onCompleted()},function(){var e;try{e=u()}catch(n){return void t.onError(n)}ut(e)&&(e=Xe(e)),t.onNext(e),t.onCompleted()})},this).concatAll()},qe.defaultIfEmpty=function(t){var e=this;return t===i&&(t=null),new qn(function(n){var r=!1;return e.subscribe(function(t){r=!0,n.onNext(t)},function(t){n.onError(t)},function(){!r&&n.onNext(t),n.onCompleted()})},e)},F.prototype.push=function(t){var e=-1===B(this.set,t,this.comparer);return e&&this.set.push(t),e},qe.distinct=function(t,e){var n=this;return e||(e=ot),new qn(function(r){var o=new F(e);return n.subscribe(function(e){var n=e;if(t)try{n=t(e)}catch(i){return void r.onError(i)}o.push(n)&&r.onNext(e)},function(t){r.onError(t)},function(){r.onCompleted()})},this)};var Pn=function(t){function e(e,n,r){this.source=e,this.selector=At(n,r,3),t.call(this)}function n(t,e){return function(n,r,o){return t.call(this,e.selector(n,r,o),r,o)}}function r(t,e,n){this.o=t,this.selector=e,this.source=n,this.i=0,this.isStopped=!1}return Zt(e,t),e.prototype.internalMap=function(t,r){return new e(this.source,n(t,this),r)},e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t,this.selector,this))},r.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.selector)(t,this.i++,this.source);return e===ne?this.o.onError(e.e):void this.o.onNext(e)}},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.map=qe.select=function(t,e){var n=\"function\"==typeof t?t:function(){return t};return this instanceof Pn?this.internalMap(n,e):new Pn(this,n,e)},qe.pluck=function(){var t=arguments,e=arguments.length;if(0===e)throw new Error(\"List of properties cannot be empty.\");return this.map(function(n){for(var r=n,o=0;e>o;o++){var s=r[t[o]];if(\"undefined\"==typeof s)return i;r=s}return r})},qe.flatMapObserver=qe.selectManyObserver=function(t,e,n,r){var o=this;return new qn(function(i){var s=0;return o.subscribe(function(e){var n;try{n=t.call(r,e,s++)}catch(o){return void i.onError(o)}ut(n)&&(n=Xe(n)),i.onNext(n)},function(t){var n;try{n=e.call(r,t)}catch(o){return void i.onError(o)}ut(n)&&(n=Xe(n)),i.onNext(n),i.onCompleted()},function(){var t;try{t=n.call(r)}catch(e){return void i.onError(e)}ut(t)&&(t=Xe(t)),i.onNext(t),i.onCompleted()})},o).mergeAll()},qe.selectMany=qe.flatMap=function(t,e,n){return at(t)&&at(e)?this.flatMap(function(n,r){var o=t(n,r);return ut(o)&&(o=Xe(o)),(Et(o)||St(o))&&(o=nn(o)),o.map(function(t,o){return e(n,t,r,o)})},n):at(t)?U(this,t,n):U(this,function(){return t})},qe.selectSwitch=qe.flatMapLatest=qe.switchMap=function(t,e){return this.select(t,e).switchLatest()};var jn=function(t){function e(e,n){this.source=e,this.skipCount=n,t.call(this)}function n(t,e){this.c=e,this.r=e,this.o=t,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t,this.skipCount))},n.prototype.onNext=function(t){this.isStopped||(this.r<=0?this.o.onNext(t):this.r--)},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.skip=function(t){if(0>t)throw new yt;return new jn(this,t)},qe.skipWhile=function(t,e){var n=this,r=At(t,e,3);return new qn(function(t){var e=0,o=!1;return n.subscribe(function(i){if(!o)try{o=!r(i,e++,n)}catch(s){return void t.onError(s)}o&&t.onNext(i)},function(e){t.onError(e)},function(){t.onCompleted()})},n)},qe.take=function(t,e){if(0>t)throw new yt;if(0===t)return Ye(e);var n=this;return new qn(function(e){var r=t;return n.subscribe(function(t){r-- >0&&(e.onNext(t),0>=r&&e.onCompleted())},function(t){e.onError(t)},function(){e.onCompleted()})},n)},qe.takeWhile=function(t,e){var n=this,r=At(t,e,3);return new qn(function(t){var e=0,o=!0;return n.subscribe(function(i){if(o){try{o=r(i,e++,n)}catch(s){return void t.onError(s)}o?t.onNext(i):t.onCompleted()}},function(e){t.onError(e)},function(){t.onCompleted()})},n)};var Dn=function(t){function e(e,n,r){this.source=e,this.predicate=At(n,r,3),t.call(this)}function n(t,e){return function(n,r,o){return e.predicate(n,r,o)&&t.call(this,n,r,o)}}function r(t,e,n){this.o=t,this.predicate=e,this.source=n,this.i=0,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t,this.predicate,this))},e.prototype.internalFilter=function(t,r){return new e(this.source,n(t,this),r)},r.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.predicate)(t,this.i++,this.source);return e===ne?this.o.onError(e.e):void(e&&this.o.onNext(t))}},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.filter=qe.where=function(t,e){return this instanceof Dn?this.internalFilter(t,e):new Dn(this,t,e)},qe.transduce=function(t){function e(t){return{\"@@transducer/init\":function(){return t},\"@@transducer/step\":function(t,e){return t.onNext(e)},\"@@transducer/result\":function(t){return t.onCompleted()}}}var n=this;return new qn(function(r){var o=t(e(r));return n.subscribe(function(t){try{o[\"@@transducer/step\"](r,t)}catch(e){r.onError(e)}},function(t){r.onError(t)},function(){o[\"@@transducer/result\"](r)})},n)};var qn=tt.AnonymousObservable=function(t){function e(t){return t&&at(t.dispose)?t:at(t)?ae(t):ce}function n(t,n){var r=n[0],o=n[1],i=x(o)(r);return i!==ne||r.fail(ne.e)?void r.setDisposable(e(i)):_(ne.e)}function r(e,r){function o(t){var r=new Rn(t),o=[r,e];return _e.scheduleRequired()?_e.scheduleWithState(o,n):n(null,o),r}this.source=r,t.call(this,o)}return Zt(r,t),r}(We),Rn=function(t){function e(e){t.call(this),this.observer=e,this.m=new fe}Zt(e,t);var n=e.prototype;return n.next=function(t){var e=x(this.observer.onNext).call(this.observer,t);e===ne&&(this.dispose(),_(e.e))},n.error=function(t){var e=x(this.observer.onError).call(this.observer,t);this.dispose(),e===ne&&_(e.e)},n.completed=function(){var t=x(this.observer.onCompleted).call(this.observer);this.dispose(),t===ne&&_(t.e)},n.setDisposable=function(t){this.m.setDisposable(t)},n.getDisposable=function(){return this.m.getDisposable()},n.dispose=function(){t.prototype.dispose.call(this),this.m.dispose()},e}(Re),Mn=function(t,e){this.subject=t,this.observer=e};Mn.prototype.dispose=function(){if(!this.subject.isDisposed&&null!==this.observer){var t=this.subject.observers.indexOf(this.observer);this.subject.observers.splice(t,1),this.observer=null}};var Tn=tt.Subject=function(t){function e(t){return he(this),this.isStopped?this.hasError?(t.onError(this.error),ce):(t.onCompleted(),ce):(this.observers.push(t),new Mn(this,t))}function n(){t.call(this,e),this.isDisposed=!1,this.isStopped=!1,this.observers=[],this.hasError=!1}return Zt(n,t),te(n.prototype,je.prototype,{hasObservers:function(){return this.observers.length>0},onCompleted:function(){if(he(this),!this.isStopped){this.isStopped=!0;for(var t=0,e=u(this.observers),n=e.length;n>t;t++)e[t].onCompleted();this.observers.length=0}},onError:function(t){if(he(this),!this.isStopped){this.isStopped=!0,this.error=t,this.hasError=!0;for(var e=0,n=u(this.observers),r=n.length;r>e;e++)n[e].onError(t);this.observers.length=0}},onNext:function(t){if(he(this),!this.isStopped)for(var e=0,n=u(this.observers),r=n.length;r>e;e++)n[e].onNext(t)},dispose:function(){this.isDisposed=!0,this.observers=null}}),n.create=function(t,e){return new Vn(t,e)},n}(We),Vn=(tt.AsyncSubject=function(t){function e(t){return he(this),this.isStopped?(this.hasError?t.onError(this.error):this.hasValue?(t.onNext(this.value),t.onCompleted()):t.onCompleted(),ce):(this.observers.push(t),new Mn(this,t))}function n(){t.call(this,e),this.isDisposed=!1,this.isStopped=!1,this.hasValue=!1,this.observers=[],this.hasError=!1}return Zt(n,t),te(n.prototype,je,{hasObservers:function(){return he(this),this.observers.length>0},onCompleted:function(){var t,e;if(he(this),!this.isStopped){this.isStopped=!0;var n=u(this.observers),e=n.length;if(this.hasValue)for(t=0;e>t;t++){var r=n[t];r.onNext(this.value),r.onCompleted()}else for(t=0;e>t;t++)n[t].onCompleted();this.observers.length=0}},onError:function(t){if(he(this),!this.isStopped){this.isStopped=!0,this.hasError=!0,this.error=t;for(var e=0,n=u(this.observers),r=n.length;r>e;e++)n[e].onError(t);this.observers.length=0}},onNext:function(t){he(this),this.isStopped||(this.value=t,this.hasValue=!0)},dispose:function(){this.isDisposed=!0,this.observers=null,this.exception=null,this.value=null}}),n}(We),tt.AnonymousSubject=function(t){function e(t){return this.observable.subscribe(t)}function n(n,r){this.observer=n,this.observable=r,t.call(this,e)}return Zt(n,t),te(n.prototype,je.prototype,{onCompleted:function(){this.observer.onCompleted()},onError:function(t){this.observer.onError(t)},onNext:function(t){this.observer.onNext(t)}}),n}(We));\"function\"==typeof t&&\"object\"==typeof t.amd&&t.amd?(X.Rx=tt,t(function(){return tt})):Q&&K?Y?(K.exports=tt).Rx=tt:Q.Rx=tt:X.Rx=tt;var $n=f()}).call(this)}).call(this,e(150),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{150:150}]},{},[1])(1)});",
     "'use strict';\nmodule.exports = function getXMLHttpRequest() {\n  var progId,\n    progIds,\n    i;\n  if (global.XMLHttpRequest) {\n    return new global.XMLHttpRequest();\n  } else {\n    try {\n    progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];\n    for (i = 0; i < 3; i++) {\n      try {\n        progId = progIds[i];\n        if (new global.ActiveXObject(progId)) {\n          break;\n        }\n      } catch(e) { }\n    }\n    return new global.ActiveXObject(progId);\n    } catch (e) {\n    throw new Error('XMLHttpRequest is not supported by your browser');\n    }\n  }\n};\n",
     "'use strict';\nvar getXMLHttpRequest = require('./getXMLHttpRequest');\nvar getCORSRequest = require('./getCORSRequest');\nvar hasOwnProp = Object.prototype.hasOwnProperty;\n\nvar noop = function() {};\n\nfunction Observable() {}\n\nObservable.create = function(subscribe) {\n  var o = new Observable();\n\n  o.subscribe = function(onNext, onError, onCompleted) {\n\n    var observer;\n    var disposable;\n\n    if (typeof onNext === 'function') {\n        observer = {\n            onNext: onNext,\n            onError: (onError || noop),\n            onCompleted: (onCompleted || noop)\n        };\n    } else {\n        observer = onNext;\n    }\n\n    disposable = subscribe(observer);\n\n    if (typeof disposable === 'function') {\n      return {\n        dispose: disposable\n      };\n    } else {\n      return disposable;\n    }\n  };\n\n  return o;\n};\n\nfunction request(method, options, context) {\n  return Observable.create(function requestObserver(observer) {\n\n    var config = {\n      method: method || 'GET',\n      crossDomain: false,\n      async: true,\n      headers: {},\n      responseType: 'json'\n    };\n\n    var xhr,\n      isDone,\n      headers,\n      header,\n      prop;\n\n    for (prop in options) {\n      if (hasOwnProp.call(options, prop)) {\n        config[prop] = options[prop];\n      }\n    }\n\n    // Add request with Headers\n    if (!config.crossDomain && !config.headers['X-Requested-With']) {\n      config.headers['X-Requested-With'] = 'XMLHttpRequest';\n    }\n\n    // allow the user to mutate the config open\n    if (context.onBeforeRequest != null) {\n      context.onBeforeRequest(config);\n    }\n\n    // create xhr\n    try {\n      xhr = config.crossDomain ? getCORSRequest() : getXMLHttpRequest();\n    } catch (err) {\n      observer.onError(err);\n    }\n    try {\n      // Takes the url and opens the connection\n      if (config.user) {\n        xhr.open(config.method, config.url, config.async, config.user, config.password);\n      } else {\n        xhr.open(config.method, config.url, config.async);\n      }\n\n      // Sets timeout information\n      xhr.timeout = config.timeout;\n\n      // Anything but explicit false results in true.\n      xhr.withCredentials = config.withCredentials !== false;\n\n      // Fills the request headers\n      headers = config.headers;\n      for (header in headers) {\n        if (hasOwnProp.call(headers, header)) {\n          xhr.setRequestHeader(header, headers[header]);\n        }\n      }\n\n      if (config.responseType) {\n        try {\n          xhr.responseType = config.responseType;\n        } catch (e) {\n          // WebKit added support for the json responseType value on 09/03/2013\n          // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are\n          // known to throw when setting the value \"json\" as the response type. Other older\n          // browsers implementing the responseType\n          //\n          // The json response type can be ignored if not supported, because JSON payloads are\n          // parsed on the client-side regardless.\n          if (config.responseType !== 'json') {\n            throw e;\n          }\n        }\n      }\n\n      xhr.onreadystatechange = function onreadystatechange(e) {\n        // Complete\n        if (xhr.readyState === 4) {\n          if (!isDone) {\n            isDone = true;\n            onXhrLoad(observer, xhr, e);\n          }\n        }\n      };\n\n      // Timeout\n      xhr.ontimeout = function ontimeout(e) {\n        if (!isDone) {\n          isDone = true;\n          onXhrError(observer, xhr, 'timeout error', e);\n        }\n      };\n\n      // Send Request\n      xhr.send(config.data);\n\n    } catch (e) {\n      observer.onError(e);\n    }\n    // Dispose\n    return function dispose() {\n      // Doesn't work in IE9\n      if (!isDone && xhr.readyState !== 4) {\n        isDone = true;\n        xhr.abort();\n      }\n    };//Dispose\n  });\n}\n\n/*\n * General handling of ultimate failure (after appropriate retries)\n */\nfunction _handleXhrError(observer, textStatus, errorThrown) {\n  // IE9: cross-domain request may be considered errors\n  if (!errorThrown) {\n    errorThrown = new Error(textStatus);\n  }\n\n  observer.onError(errorThrown);\n}\n\nfunction onXhrLoad(observer, xhr, e) {\n  var responseData,\n    responseObject,\n    responseType;\n\n  // If there's no observer, the request has been (or is being) cancelled.\n  if (xhr && observer) {\n    responseType = xhr.responseType;\n    // responseText is the old-school way of retrieving response (supported by IE8 & 9)\n    // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)\n    responseData = ('response' in xhr) ? xhr.response : xhr.responseText;\n\n    // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)\n    var status = (xhr.status === 1223) ? 204 : xhr.status;\n\n    if (status >= 200 && status <= 399) {\n      try {\n        if (responseType !== 'json') {\n          responseData = JSON.parse(responseData || '');\n        }\n        if (typeof responseData === 'string') {\n          responseData = JSON.parse(responseData || '');\n        }\n      } catch (e) {\n        _handleXhrError(observer, 'invalid json', e);\n      }\n      observer.onNext(responseData);\n      observer.onCompleted();\n      return;\n\n    } else if (status === 401 || status === 403 || status === 407) {\n\n      return _handleXhrError(observer, responseData);\n\n    } else if (status === 410) {\n      // TODO: Retry ?\n      return _handleXhrError(observer, responseData);\n\n    } else if (status === 408 || status === 504) {\n      // TODO: Retry ?\n      return _handleXhrError(observer, responseData);\n\n    } else {\n\n      return _handleXhrError(observer, responseData || ('Response code ' + status));\n\n    }//if\n  }//if\n}//onXhrLoad\n\nfunction onXhrError(observer, xhr, status, e) {\n  _handleXhrError(observer, status || xhr.statusText || 'request error', e);\n}\n\nmodule.exports = request;\n",
     "!function(t){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=t();else if(\"function\"==typeof define&&define.amd)define([],t);else{var e;e=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,e.falcor=t()}}(function(){var t;return function e(t,n,r){function o(s,u){if(!n[s]){if(!t[s]){var a=\"function\"==typeof require&&require;if(!u&&a)return a(s,!0);if(i)return i(s,!0);var c=new Error(\"Cannot find module '\"+s+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var p=n[s]={exports:{}};t[s][0].call(p.exports,function(e){var n=t[s][1][e];return o(n?n:e)},p,p.exports,e,t,n,r)}return n[s].exports}for(var i=\"function\"==typeof require&&require,s=0;s<r.length;s++)o(r[s]);return o}({1:[function(t,e,n){var r=t(32),o=t(130);r.atom=o.atom,r.ref=o.ref,r.error=o.error,r.pathValue=o.pathValue,r.HttpDataSource=t(125),e.exports=r},{125:125,130:130,32:32}],2:[function(t,e,n){function r(t){var e=t||{};this._root=e._root||new o(e),this._path=e.path||e._path||[],this._scheduler=e.scheduler||e._scheduler||new l,this._source=e.source||e._source,this._request=e.request||e._request||new s(this,this._scheduler),this._ID=N++,\"number\"==typeof e.maxSize?this._maxSize=e.maxSize:this._maxSize=e._maxSize||r.prototype._maxSize,\"number\"==typeof e.collectRatio?this._collectRatio=e.collectRatio:this._collectRatio=e._collectRatio||r.prototype._collectRatio,(e.boxed||e.hasOwnProperty(\"_boxed\"))&&(this._boxed=e.boxed||e._boxed),(e.materialized||e.hasOwnProperty(\"_materialized\"))&&(this._materialized=e.materialized||e._materialized),\"boolean\"==typeof e.treatErrorsAsValues?this._treatErrorsAsValues=e.treatErrorsAsValues:e.hasOwnProperty(\"_treatErrorsAsValues\")&&(this._treatErrorsAsValues=e._treatErrorsAsValues),e.cache&&this.setCache(e.cache)}var o=t(4),i=t(3),s=t(55),u=t(64),a=t(65),c=t(61),p=t(63),h=t(73),f=t(75),l=t(74),d=t(81),v=t(84),y=t(49),b=t(134),m=t(88),g=t(100),w=t(96),x=t(102),_=t(98),S=t(99),E=t(77),C=t(76),A=t(130),N=0,k=t(116),O=function(){},P=t(14),j=t(19),D={pathValue:!0,pathSyntax:!0,json:!0,jsonGraph:!0},q=t(72);e.exports=r,r.ref=A.ref,r.atom=A.atom,r.error=A.error,r.pathValue=A.pathValue,r.prototype.constructor=r,r.prototype._materialized=!1,r.prototype._boxed=!1,r.prototype._progressive=!1,r.prototype._treatErrorsAsValues=!1,r.prototype._maxSize=Math.pow(2,53)-1,r.prototype._collectRatio=.75,r.prototype.get=t(71),r.prototype._getWithPaths=t(70),r.prototype.set=function(){var t=k(arguments,D,\"set\");return t!==!0?new u(function(e){e.onError(t)}):this._set.apply(this,arguments)},r.prototype.preload=function(){var t=k(arguments,q,\"preload\");if(t!==!0)return new u(function(e){e.onError(t)});var e=Array.prototype.slice.call(arguments),n=this;return new u(function(t){return n.get.apply(n,e).subscribe(function(){},function(e){t.onError(e)},function(){t.onCompleted()})})},r.prototype._set=function(){var t,e=-1,n=arguments.length,r=arguments[n-1];for(w(r)?n-=1:r=void 0,t=new Array(n);++e<n;)t[e]=arguments[e];return a.create(this,t,r)},r.prototype.call=function(){var t,e=-1,n=arguments.length;for(t=new Array(n);++e<n;){var r=arguments[e];t[e]=r;var o=typeof r;if(e>1&&!Array.isArray(r)||0===e&&!Array.isArray(r)&&\"string\"!==o||1===e&&!Array.isArray(r)&&!x(r))return new u(function(t){t.onError(new Error(\"Invalid argument\"))})}return c.create(this,t)},r.prototype.invalidate=function(){var t,e=-1,n=arguments.length,r=arguments[n-1];for(t=new Array(n);++e<n;)if(t[e]=b.fromPath(arguments[e]),\"object\"!=typeof t[e])throw new Error(\"Invalid argument\");p.create(this,t,r).subscribe(O,function(t){throw t})},r.prototype.deref=t(5),r.prototype.getValue=t(16),r.prototype.setValue=t(79),r.prototype._getValueSync=t(24),r.prototype._setValueSync=t(80),r.prototype._derefSync=t(6),r.prototype.setCache=function(t){var e=this._root.cache;if(t!==e){var n=this._root,r=this._path;this._path=[],this._root.cache={},\"undefined\"!=typeof e&&y(n,n.expired,m(e),0),S(t)?C(this,[t]):_(t)?E(this,[t]):g(t)&&E(this,[{json:t}]),this._path=r}else\"undefined\"==typeof e&&(this._root.cache={});return this},r.prototype.getCache=function(){var t=v(arguments);if(0===t.length)return P(this._root.cache);var e=[{}],n=this._path;return j.getWithPathsAsJSONGraph(this,t,e),this._path=n,e[0].jsonGraph},r.prototype.getVersion=function(t){var e=t&&b.fromPath(t)||[];if(Array.isArray(e)===!1)throw new Error(\"Model#getVersion must be called with an Array path.\");return this._path.length&&(e=this._path.concat(e)),this._getVersion(this,e)},r.prototype._syncCheck=function(t){if(Boolean(this._source)&&this._root.syncRefCount<=0&&this._root.unsafeMode===!1)throw new Error(\"Model#\"+t+\" may only be called within the context of a request selector.\");return!0},r.prototype._clone=function(t){var e=new r(this);for(var n in t){var o=t[n];\"delete\"===o?delete e[n]:e[n]=o}return e.setCache=void 0,e},r.prototype.batch=function(t){var e=t;\"number\"==typeof e?e=new f(Math.round(Math.abs(e))):e&&e.schedule||(e=new h);var n=this._clone();return n._request=new s(n,e),n},r.prototype.unbatch=function(){var t=this._clone();return t._request=new s(t,new l),t},r.prototype.treatErrorsAsValues=function(){return this._clone({_treatErrorsAsValues:!0})},r.prototype.asDataSource=function(){return new i(this)},r.prototype._materialize=function(){return this._clone({_materialized:!0})},r.prototype._dematerialize=function(){return this._clone({_materialized:\"delete\"})},r.prototype.boxValues=function(){return this._clone({_boxed:!0})},r.prototype.unboxValues=function(){return this._clone({_boxed:\"delete\"})},r.prototype.withoutDataSource=function(){return this._clone({_source:\"delete\"})},r.prototype.toJSON=function(){return{$type:\"ref\",value:this._path}},r.prototype.getPath=function(){return d(this._path)},r.prototype._getBoundValue=t(13),r.prototype._getVersion=t(18),r.prototype._getValueSync=t(17),r.prototype._getPathValuesAsPathMap=j.getWithPathsAsPathMap,r.prototype._getPathValuesAsJSONG=j.getWithPathsAsJSONGraph,r.prototype._setPathValuesAsJSON=t(78),r.prototype._setPathValuesAsJSONG=t(78),r.prototype._setPathValuesAsPathMap=t(78),r.prototype._setPathValuesAsValues=t(78),r.prototype._setPathMapsAsJSON=t(77),r.prototype._setPathMapsAsJSONG=t(77),r.prototype._setPathMapsAsPathMap=t(77),r.prototype._setPathMapsAsValues=t(77),r.prototype._setJSONGsAsJSON=t(76),r.prototype._setJSONGsAsJSONG=t(76),r.prototype._setJSONGsAsPathMap=t(76),r.prototype._setJSONGsAsValues=t(76),r.prototype._setCache=t(77),r.prototype._invalidatePathValuesAsJSON=t(48),r.prototype._invalidatePathMapsAsJSON=t(47)},{100:100,102:102,116:116,13:13,130:130,134:134,14:14,16:16,17:17,18:18,19:19,24:24,3:3,4:4,47:47,48:48,49:49,5:5,55:55,6:6,61:61,63:63,64:64,65:65,70:70,71:71,72:72,73:73,74:74,75:75,76:76,77:77,78:78,79:79,80:80,81:81,84:84,88:88,96:96,98:98,99:99}],3:[function(t,e,n){function r(t){this._model=t._materialize().treatErrorsAsValues()}r.prototype.get=function(t){return this._model.get.apply(this._model,t)._toJSONG()},r.prototype.set=function(t){return this._model.set(t)._toJSONG()},r.prototype.call=function(t,e,n,r){var o=[t,e,n].concat(r);return this._model.call.apply(this._model,o)._toJSONG()},e.exports=r},{}],4:[function(t,e,n){function r(t){var e=t||{};this.syncRefCount=0,this.expired=e.expired||[],this.unsafeMode=e.unsafeMode||!1,this.collectionScheduler=e.collectionScheduler||new s,this.cache={},o(e.comparator)&&(this.comparator=e.comparator),o(e.errorSelector)&&(this.errorSelector=e.errorSelector),o(e.onChange)&&(this.onChange=e.onChange)}var o=t(96),i=t(91),s=t(74);r.prototype.errorSelector=function(t,e){return e},r.prototype.comparator=function(t,e){return i(t,\"value\")&&i(e,\"value\")?t.value===e.value&&t.$type===e.$type&&t.$expires===e.$expires:t===e},e.exports=r},{74:74,91:91,96:96}],5:[function(t,e,n){function r(t,e){var n,r=!1;try{++t._root.syncRefCount,n=t._derefSync(e)}catch(i){n=i,r=!0}finally{--t._root.syncRefCount}return r?o.Observable[\"throw\"](n):o.Observable[\"return\"](n)}var o=t(159),i=t(134);e.exports=function(t){for(var e=this,n=-1,s=arguments.length-1,u=new Array(s),a=i.fromPath(t);++n<s;)u[n]=i.fromPath(arguments[n+1]);if(0===s)throw new Error(\"Model#deref requires at least one value path.\");return o.Observable.defer(function(){return r(e,a)}).flatMap(function(t){if(Boolean(t)){if(s>0){var n=o.Observable.of(t);return t.get.apply(t,u)[\"catch\"](o.Observable.empty()).concat(n).last().flatMap(function(){return r(e,a)}).filter(function(t){return t})}return o.Observable[\"return\"](t)}if(s>0){var i=u.map(function(t){return a.concat(t)});return e.get.apply(e,i).concat(o.Observable.defer(function(){return r(e,a)})).last().filter(function(t){return t})}return o.Observable.empty()})}},{134:134,159:159}],6:[function(t,e,n){var r=t(134),o=t(13),i=t(8),s=t(118);e.exports=function(t){var e=r.fromPath(t);if(!Array.isArray(e))throw new Error(\"Model#derefSync must be called with an Array path.\");var n=o(this,this._path.concat(e),!1),u=n.path,a=n.value,c=n.found;if(c&&void 0!==a&&(a.$type!==s||void 0!==a.value)){if(a.$type)throw new i;return this._clone({_path:u})}}},{118:118,13:13,134:134,8:8}],7:[function(t,e,n){function r(){this.message=r.message,this.stack=(new Error).stack}r.prototype=new Error,r.prototype.name=\"BoundJSONGraphModelError\",r.message=\"It is not legal to use the JSON Graph format from a bound Model. JSON Graph format can only be used from a root model.\",e.exports=r},{}],8:[function(t,e,n){function r(t,e){this.message=i,this.stack=(new Error).stack,this.boundPath=t,this.shortedPath=e}var o=\"InvalidModelError\",i=\"The boundPath of the model is not valid since a value or error was found before the path end.\";r.prototype=new Error,r.prototype.name=o,r.message=i,e.exports=r},{}],9:[function(t,e,n){function r(t){this.message=\"An exception was thrown when making a request.\",this.stack=(new Error).stack,this.innerError=t}var o=\"InvalidSourceError\";r.prototype=new Error,r.prototype.name=o,r.is=function(t){return t&&t.name===o},e.exports=r},{}],10:[function(t,e,n){function r(){this.message=\"The allowed number of retries have been exceeded.\",this.stack=(new Error).stack}var o=\"MaxRetryExceededError\";r.prototype=new Error,r.prototype.name=o,r.is=function(t){return t&&t.name===o},e.exports=r},{}],11:[function(t,e,n){function r(t,e,n,r,o,h,f){for(var l,d,v=n,y=o,b=r,m=0;;){if(0===m&&b[c]?(m=y.length,d=b[c]):(l=y[m++],d=v[l]),d){var g=d.$type,w=g&&d.value||d;if(m<y.length){if(g){v=d;break}v=d;continue}if(v=d,g&&u(d))break;if(b[c]||i(b,d),g===a){f?s(t,d,h,null,null,null,y,y.length,f):p(t,d),m=0,y=w,b=d,v=e;continue}break}v=void 0;break}if(m<y.length&&void 0!==v){for(var x=[],_=0;m>_;_++)x[_]=y[_];y=x}return[v,y]}var o=t(26),i=o.create,s=t(22),u=t(27),a=t(120),c=t(33),p=t(29).promote;e.exports=r},{120:120,22:22,26:26,27:27,29:29,33:33}],12:[function(t,e,n){var r=t(15),o=t(8),i=t(7);e.exports=function(t,e){return function(n,s,u){var a,c,p,h=u[0],f={values:u,optimizedPaths:[]},l=n._root.cache,d=n._path,v=l,y=d.length,b=[];if(y){if(e)return{criticalError:new i};if(v=r(n,d),v.$type)return{criticalError:new o(d,d)};for(a=[],c=0;y>c;++c)a[c]=d[c]}else a=[],y=0;for(c=0,p=s.length;p>c;c++)t(n,l,v,s[c],0,h,f,b,a,y,e);return f}}},{15:15,7:7,8:8}],13:[function(t,e,n){var r=t(17),o=t(8);e.exports=function(t,e,n){var i,s,u,a,c,p=e,h=e;for(i=t._boxed,n=t._materialized,s=t._treatErrorsAsValues,t._boxed=!0,t._materialized=void 0===n||n,t._treatErrorsAsValues=!0,u=r(t,p.concat(null),!0),t._boxed=i,t._materialized=n,t._treatErrorsAsValues=s,p=u.optimizedPath,a=u.shorted,c=u.found,u=u.value;p.length&&null===p[p.length-1];)p.pop();if(c&&a)throw new o(h,p);return{path:p,value:u,shorted:a,found:c}}},{17:17,8:8}],14:[function(t,e,n){function r(t){var e,n,r,o={},i=Object.keys(t);for(n=0,r=i.length;r>n;n++)e=i[n],s(e)||(o[e]=t[e]);return o}function o(t,e,n){Object.keys(t).filter(function(e){return!s(e)&&t[e]}).forEach(function(n){var s=t[n],u=e[n];if(u||(u=e[n]={}),s.$type){var a,c=s.value&&\"object\"==typeof s.value,p=!t[i];return a=c||p?r(s):s.value,void(e[n]=a)}o(s,u,n)})}var i=t(37),s=t(97);e.exports=function(t){var e={};return o(t,e),e}},{37:37,97:97}],15:[function(t,e,n){e.exports=function(t,e){for(var n=t._root.cache,r=-1,o=e.length;++r<o&&n&&!n.$type;)n=n[e[r]];return n}},{}],16:[function(t,e,n){var r=t(64),o=t(134);e.exports=function(t){for(var e=o.fromPath(t),n=0,i=e.length;++n<i;)if(\"object\"==typeof e[n])return new r(function(t){t.onError(new Error(\"Paths must be simple paths\"))});var s=this;return new r(function(t){return s.get(e).subscribe(function(n){for(var r=n.json,o=-1,i=e.length;r&&++o<i;)r=r[e[o]];t.onNext(r)},function(e){t.onError(e)},function(){t.onCompleted()})})}},{134:134,64:64}],17:[function(t,e,n){var r=t(11),o=t(25),i=t(27),s=t(29).promote,u=t(120),a=t(118),c=t(119);e.exports=function(t,e,n){for(var p,h,f,l,d,v=t._root.cache,y=e.length,b=[],m=!1,g=!1,w=0,x=v,_=v,S=v,E=!0,C=!1;x&&y>w;){if(p=e[w++],null!==p&&(x=_[p],b[b.length]=p),!x){S=void 0,m=!0,E=!1;break}if(f=x.$type,f===a&&void 0===x.value){S=void 0,E=!1,m=y>w;break}if(y>w){if(f===u){if(i(x)){C=!0,S=void 0,E=!1;break}if(l=r(t,v,v,x,x.value),d=l[0],!d){S=void 0,x=void 0,E=!1;break}f=d.$type,x=d,b=l[1].slice(0)}if(f)break}else S=x;_=x}if(y>w&&!C){for(h=w;y>h;++h)if(null!==e[w]){g=!0;break}for(g?(m=!0,S=void 0):S=x,h=w;y>h;++h)null!==e[h]&&(b[b.length]=e[h])}if(S&&f&&(i(S)?S=void 0:s(t,S)),S&&f===c&&!t._treatErrorsAsValues)throw{path:w===y?e:e.slice(0,w),value:S.value};return S&&t._boxed?S=Boolean(f)&&!n?o(S):S:!S&&t._materialized?S={$type:a}:S&&(S=S.value),{value:S,shorted:m,optimizedPath:b,found:E}}},{11:11,118:118,119:119,120:120,25:25,27:27,29:29}],18:[function(t,e,n){var r=t(46);e.exports=function(t,e){var n=t._getValueSync({_boxed:!0,_root:t._root,_treatErrorsAsValues:t._treatErrorsAsValues},e,!0).value,o=n&&n[r];return null==o?-1:o}},{46:46}],19:[function(t,e,n){var r=t(12),o=t(31),i=r(o,!1),s=r(o,!0);e.exports={getValueSync:t(17),getBoundValue:t(13),getWithPathsAsPathMap:i,getWithPathsAsJSONGraph:s}},{12:12,13:13,17:17,31:31}],20:[function(t,e,n){var r=t(29),o=t(25),i=r.promote;e.exports=function(t,e,n,r,s){var u=e.value;s.errors||(s.errors=[]),t._boxed&&(u=o(e)),s.errors.push({path:r.slice(0,n+1),value:u}),i(t,e)}},{25:25,29:29}],21:[function(t,e,n){function r(t,e,n,r,o,i,s){s.requestedMissingPaths.push(r.slice(0,n).concat(e)),s.optimizedMissingPaths.push(o.slice(0,i).concat(e))}var o=t(30),i=o.fastCopy;e.exports=function(t,e,n,o,s,u,a){var c;o.requestedMissingPaths||(o.requestedMissingPaths=[],o.optimizedMissingPaths=[]),c=n<e.length?i(e,n):[],r(t,c,n,s,u,a,o)}},{30:30}],22:[function(t,e,n){var r=t(29),o=t(25),i=r.promote,s=t(120),u=t(118),a=t(119),c=t(37);e.exports=function(t,e,n,r,p,h,f,l,d,v){if(n){var y,b,m,g,w,x,_,S,E=!1;if(e&&i(t,e),e&&void 0!==e.value||(E=t._materialized),E)S={$type:u};else if(t._boxed)S=o(e);else if(e.$type===s||e.$type===a)S=d?o(e):e.value;else if(d){var C=e.value&&\"object\"==typeof e.value,A=!e[c];S=C||A?o(e):e.value}else S=e.value;if(p&&(p.hasValue=!0),d){for(w=n.jsonGraph,w||(w=n.jsonGraph={},n.paths=[]),y=0,b=l-1;b>y;y++)g=f[y],w[g]||(w[g]={}),w=w[g];g=f[y],w[g]=E?{$type:u}:S,h&&n.paths.push(h.slice(0,r))}else if(0===r)n.json=S;else{for(w=n.json,w||(w=n.json={}),y=0;r-1>y;y++)m=h[y],w[m]||(w[m]={}),x=w,_=m,w=w[m];m=h[y],null!==m?w[m]=S:x[_]=S}}}},{118:118,119:119,120:120,25:25,29:29,37:37}],23:[function(t,e,n){var r=t(27),o=t(26),i=t(29),s=o.remove,u=i.splice,a=t(119),c=t(20),p=t(22),h=t(21),f=t(28),l=t(35);e.exports=function(t,e,n,o,i,d,v,y,b,m,g){var w=e&&e.$type,x=e&&void 0===e.value;return e&&w?void(r(e)?(e[l]||(u(t,e),s(e)),h(t,n,o,d,v,y,b)):w===a?(g&&(v[o]=null),m||t._treatErrorsAsValues?p(t,e,i,o,d,v,y,b,m,g):c(t,e,o,v,d)):(g&&(v[o]=null),(!x||x&&t._materialized)&&p(t,e,i,o,d,v,y,b,m,g))):void(f(t)?p(t,e,i,o,d,v,y,b,m,g):h(t,n,o,d,v,y,b))}},{119:119,20:20,21:21,22:22,26:26,27:27,28:28,29:29,35:35}],24:[function(t,e,n){var r=t(134);e.exports=function(t){var e=r.fromPath(t);if(Array.isArray(e)===!1)throw new Error(\"Model#getValueSync must be called with an Array path.\");return this._path.length&&(e=this._path.concat(e)),this._syncCheck(\"getValueSync\")&&this._getValueSync(this,e).value}},{134:134}],25:[function(t,e,n){var r=t(40);e.exports=function(t){var e,n,o,i=Object.keys(t);for(e={},n=0,o=i.length;o>n;n++){var s=i[n];s[0]!==r&&(e[s]=t[s])}return e}},{40:40}],26:[function(t,e,n){function r(t,e){var n=e[a]||0;e[i+n]=t,e[a]=n+1,t[u]=n,t[s]=e}function o(t){var e=t[s];if(e){for(var n=t[u],r=e[a];r>n;)e[i+n]=e[i+n+1],++n;e[a]=r-1,t[s]=void 0,t[u]=void 0}}var i=t(43),s=t(33),u=t(42),a=t(44);e.exports={create:r,remove:o}},{33:33,42:42,43:43,44:44}],27:[function(t,e,n){var r=t(106);e.exports=function(t){var e=void 0===t.$expires&&-1||t.$expires;return-1!==e&&1!==e&&(0===e||e<r())}},{106:106}],28:[function(t,e,n){e.exports=function(t){return t._materialized&&!t._source}},{}],29:[function(t,e,n){function r(t,e){var n=t._root,r=n[i];if(r!==e){var o=e[a],s=e[u];s&&(s[a]=o),o&&(o[u]=s),e[a]=void 0,n[i]=e,e[u]=r,r[a]=e}}function o(t,e){var n=t._root,r=e[a],o=e[u];o&&(o[a]=r),r&&(r[u]=o),e[a]=void 0,e===n[i]&&(n[i]=void 0),e===n[s]&&(n[s]=void 0),e[c]=!0,n.expired.push(e)}var i=t(34),s=t(45),u=t(38),a=t(41),c=t(35);e.exports={promote:r,splice:o}},{34:34,35:35,38:38,41:41,45:45}],30:[function(t,e,n){function r(t,e){var n,r,o,i=[];for(r=0,o=e||0,n=t.length;n>o;r++,o++)i[r]=t[o];return i}function o(t,e){var n,r,o,i=[];for(n=0,r=t.length;r>n;n++)i[n]=t[n];for(o=0,r=e.length;r>o;o++)null!==e[o]&&(i[n++]=e[o]);return i}function i(t,e){var n,r,o,i=[];for(n=0,r=t.length;r>n;n++)i[n]=t[n];for(o=0,r=e.length;r>o;o++)i[n++]=e[o];return i}e.exports={fastCat:i,fastCatSkipNulls:o,fastCopy:r}},{}],31:[function(t,e,n){var r=t(11),o=t(23),i=t(27),s=t(143).iterateKeySet,u=t(120),a=t(29).promote;e.exports=function c(t,e,n,p,h,f,l,d,v,y,b,m){var g=m,w=v;if(!n||n&&n.$type||h===p.length)return void o(t,n,p,h,f,l,d,w,y,b,g);var x,_;x=p[h];var S=\"object\"==typeof x,E=h+1,C=!1,A=x;if(S&&(C={},A=s(x,C)),void 0!==A||!C.done){var N=y+1;do{g=!1;var k;null===A?k=n:(k=n[A],w[y]=A,d[h]=A);var O=w,P=N;if(k){var j=k.$type,D=j&&k.value||k;if(E<p.length&&j&&j===u&&!i(k)){b&&o(t,k,p,E,f,l,null,w,P,b,g),a(t,k);var q=r(t,e,e,k,D,f,b);g=!0,k=q[0];var R=q[1];for(O=[],P=R.length,_=0;P>_;++_)O[_]=R[_]}}c(t,e,k,p,E,f,l,d,O,P,b,g),C&&!C.done&&(A=s(x,C))}while(C&&!C.done)}}},{11:11,120:120,143:143,23:23,27:27,29:29}],32:[function(t,e,n){\"use strict\";function r(t){return new r.Model(t)}\"function\"==typeof Promise?r.Promise=Promise:r.Promise=t(151),e.exports=r,r.Model=t(2)},{151:151,2:2}],33:[function(t,e,n){e.exports=t(40)+\"context\"},{40:40}],34:[function(t,e,n){e.exports=t(40)+\"head\"},{40:40}],35:[function(t,e,n){e.exports=t(40)+\"invalidated\"},{40:40}],36:[function(t,e,n){e.exports=t(40)+\"key\"},{40:40}],37:[function(t,e,n){e.exports=\"$modelCreated\"},{}],38:[function(t,e,n){e.exports=t(40)+\"next\"},{40:40}],39:[function(t,e,n){e.exports=t(40)+\"parent\"},{40:40}],40:[function(t,e,n){e.exports=String.fromCharCode(30)},{}],41:[function(t,e,n){e.exports=t(40)+\"prev\"},{40:40}],42:[function(t,e,n){e.exports=t(40)+\"ref-index\"},{40:40}],43:[function(t,e,n){e.exports=t(40)+\"ref\"},{40:40}],44:[function(t,e,n){e.exports=t(40)+\"refs-length\"},{40:40}],45:[function(t,e,n){e.exports=t(40)+\"tail\"},{40:40}],46:[function(t,e,n){e.exports=t(40)+\"version\"},{40:40}],47:[function(t,e,n){function r(t,e,n,o,s,u,c,p,h,f){if(!_(t)&&!t.$type)for(var l in t)if(l[0]!==a&&\"$\"!==l[0]&&m(t,l)){var d=t[l],v=g(d)&&!d.$type,y=i(n,o,s,l,d,v,!1,u,c,p,h,f),w=y[0],x=y[1];w&&(v?r(d,e+1,n,x,w,u,c,p,h,f):A(w,x,l,p)&&C(x,b(w),p,u))}}function o(t,e,n,r,o,s,a,h){if(w(n))return S(n,o,s),[void 0,e];y(s,n);var d=n,v=n.value,b=e;if(n=n[p],null!=n)b=n[c]||e;else{var m=0,g=v.length-1;b=n=e;do{var x=v[m],E=g>m,C=i(e,b,n,x,t,E,!0,r,o,s,a,h);if(n=C[0],_(n))return C;b=C[1]}while(m++<g);if(d[p]!==n){var A=n[l]||0;n[l]=A+1,n[u+A]=d,d[p]=n,d[f]=A}}return[n,b]}function i(t,e,n,r,i,u,a,c,p,h,f,l){for(var v=n.$type;v===d;){var y=o(i,t,n,c,p,h,f,l);if(n=y[0],_(n))return y;e=y[1],v=n&&n.$type}if(void 0!==v)return[n,e];if(null==r){if(u)throw new Error(\"`null` is not allowed in branch key positions.\");n&&(r=n[s])}else e=n,n=e[r];return[n,e]}var s=t(36),u=t(43),a=t(40),c=t(39),p=t(33),h=t(46),f=t(42),l=t(44),d=t(120),v=t(13),y=t(50),b=t(88),m=t(91),g=t(100),w=t(95),x=t(96),_=t(102),S=t(86),E=t(92),C=t(115),A=t(109);e.exports=function(t,e){for(var n=t._root,o=n,i=n.expired,s=E(),u=n._comparator,a=n._errorSelector,p=t._path,f=n.cache,l=p.length?v(t,p).value:f,d=l[c]||f,y=f[h],b=-1,m=e.length;++b<m;){var g=e[b];r(g.json,0,f,d,l,s,i,o,u,a)}var w=f[h],_=n.onChange;x(_)&&y!==w&&_()}},{100:100,102:102,109:109,115:115,120:120,13:13,33:33,36:36,39:39,40:40,42:42,43:43,44:44,46:46,50:50,86:86,88:88,91:91,92:92,95:95,96:96}],48:[function(t,e,n){function r(t,e,n,o,s,u,a,c){var p={},h=e<t.length-1,f=t[e],l=x(f,p);do{var d=i(n,o,s,l,h,!1,u,a,c),v=d[0],b=d[1];v&&(h?r(t,e+1,n,b,v,u,a,c):E(v,b,l,c)&&S(b,y(v),c,u)),l=x(f,p)}while(!p.done)}function o(t,e,n,r,o){if(b(e))return w(e,r,o),[void 0,t];v(o,e);var s=e,p=e.value,l=t;if(e=e[c],null!=e)l=e[a]||t;else{var d=0,y=p.length-1;l=e=t;do{var m=p[d],x=y>d,_=i(t,l,e,m,x,!0,n,r,o);if(e=_[0],g(e))return _;l=_[1]}while(d++<y);if(s[c]!==e){var S=e[f]||0;e[f]=S+1,e[u+S]=s,s[c]=e,s[h]=S}}return[e,l]}function i(t,e,n,r,i,u,a,c,p){for(var h=n.$type;h===l;){var f=o(t,n,a,c,p);if(n=f[0],g(n))return f;e=f[1],h=n.$type}if(void 0!==h)return[n,e];if(null==r){if(i)throw new Error(\"`null` is not allowed in branch key positions.\");n&&(r=n[s])}else e=n,n=e[r];return[n,e]}var s=t(36),u=t(43),a=t(39),c=t(33),p=t(46),h=t(42),f=t(44),l=t(120),d=t(13),v=t(50),y=t(88),b=t(95),m=t(96),g=t(102),w=t(86),x=t(143).iterateKeySet,_=t(92),S=t(115),E=t(109);e.exports=function(t,e){for(var n=t._root,o=n,i=n.expired,s=_(),u=t._path,c=n.cache,h=u.length?d(t,u).value:c,f=h[a]||c,l=c[p],v=-1,y=e.length;++v<y;){var b=e[v];r(b,0,c,f,h,s,i,o)}var g=c[p],w=n.onChange;m(w)&&l!==g&&w()}},{102:102,109:109,115:115,120:120,13:13,143:143,33:33,36:36,39:39,42:42,43:43,44:44,46:46,50:50,86:86,88:88,92:92,95:95,96:96}],49:[function(t,e,n){var r=t(36),o=t(39),i=t(34),s=t(45),u=t(38),a=t(41),c=t(108),p=t(115);e.exports=function(t,e,n,h,f,l){var d=n,v=f;\"number\"!=typeof v&&(v=.75);var y,b,m,g=\"number\"==typeof l,w=h*v;for(b=e.pop();b;)m=b.$size||0,d-=m,g===!0?p(b,m,t,l):(y=b[o])&&c(b,y,b[r],t),b=e.pop();if(d>=h){var x=t[s];for(b=x;d>=w&&b;)x=x[a],m=b.$size||0,d-=m,g===!0&&p(b,m,t,l),b=x;t[s]=t[a]=b,null==b?t[i]=t[u]=void 0:b[u]=void 0}}},{108:108,115:115,34:34,36:36,38:38,39:39,41:41,45:45}],50:[function(t,e,n){var r=t(121),o=t(34),i=t(45),s=t(38),u=t(41),a=t(100);e.exports=function(t,e){if(a(e)&&e.$expires!==r){var n=t[o],c=t[i],p=e[s],h=e[u];e!==n&&(null!=p&&\"object\"==typeof p&&(p[u]=h),null!=h&&\"object\"==typeof h&&(h[s]=p),p=n,null!=n&&\"object\"==typeof n&&(n[u]=e),t[o]=t[s]=n=e,n[s]=p,n[u]=void 0),null!=c&&e!==c||(t[i]=t[u]=c=h||e)}return e}},{100:100,121:121,34:34,38:38,41:41,45:45}],51:[function(t,e,n){var r=t(34),o=t(45),i=t(38),s=t(41);e.exports=function(t,e){var n=t[r],u=t[o],a=e[i],c=e[s];null!=a&&\"object\"==typeof a&&(a[s]=c),null!=c&&\"object\"==typeof c&&(c[i]=a),e===n&&(t[r]=t[i]=a),e===u&&(t[o]=t[s]=c),e[i]=e[s]=void 0,n=u=a=c=void 0}},{34:34,38:38,41:41,45:45}],52:[function(t,e,n){function r(t,e){var n=!1;return function(){if(!n&&!t._disposed){n=!0,t._callbacks[e]=null,t._optimizedPaths[e]=[],t._requestedPaths[e]=[];var r=--t._count;0!==r||t.sent||(t._disposable.dispose(),t.requestQueue.removeRequest(t))}}}function o(t){for(var e=[],n=-1,r=0,o=t.length;o>r;++r)for(var i=t[r],s=0,u=i.length;u>s;++s)e[++n]=i[s];return e}var i=t(59),s=t(60),u=0,a=t(57).GetRequest,c=t(76),p=t(78),h=t(119),f=[],l=function(t,e){this.sent=!1,this.scheduled=!1,this.requestQueue=e,this.id=++u,this.type=a,this._scheduler=t,this._pathMap={},this._optimizedPaths=[],this._requestedPaths=[],this._callbacks=[],this._count=0,this._disposable=null,this._collapsed=null,this._disposed=!1};l.prototype={batch:function(t,e,n){var o=this,i=o._optimizedPaths,u=o._requestedPaths,a=o._callbacks,c=i.length;return i[c]=e,u[c]=t,a[c]=n,++o._count,o.scheduled||(o.scheduled=!0,o._disposable=o._scheduler.schedule(function(){s(o,i,function(t,e){if(o.requestQueue.removeRequest(o),o._disposed=!0,o._count){o._merge(u,t,e);for(var n=0,r=a.length;r>n;++n){var i=a[n];i&&i(t,e)}}})})),r(o,c)},add:function(t,e,n){var o,s,u=this,a=i(t,e,u._pathMap);a?(s=a[2],o=a[1]):(s=t,o=e);var c=!1,p=!1;if(o.length<e.length){c=!0;var h=u._callbacks.length;u._callbacks[h]=n,u._requestedPaths[h]=a[0],u._optimizedPaths[h]=[],++u._count,p=r(u,h)}return[c,s,o,p]},_merge:function(t,e,n){var r=this,i=r.requestQueue.model,s=i._root,u=s.errorSelector,a=s.comparator,l=i._path;i._path=f;var d=o(t);if(e){var v=e;v instanceof Error&&(v={message:v.message}),v.$type||(v={$type:h,value:v});var y=d.map(function(t){return{path:t,value:v}});p(i,y,null,u,a)}else c(i,[{paths:d,jsonGraph:n.jsonGraph}],null,u,a);i._path=l}},e.exports=l},{119:119,57:57,59:59,60:60,76:76,78:78}],53:[function(t,e,n){function r(){this.length=0,this.pending=!1,this.pathmaps=[],s.call(this,this._subscribe)}var o=t(159),i=o.Observer,s=o.Observable,u=o.Disposable,a=o.SerialDisposable,c=o.CompositeDisposable,p=t(9),h=t(143),f=h.iterateKeySet;r.create=function(t,e,n){var r=new this;return r.queue=t,r.model=e,r.index=n,r},r.prototype=Object.create(s.prototype),r.prototype.constructor=r,r.prototype.insertPath=function(t,e,n,r,o){var i=r||0,s=o||t.length-1,u=n||this.pathmaps[s+1]||(this.pathmaps[s+1]=Object.create(null));if(void 0===u||null===u)return!1;var a,c,p=t[i],h={};a=f(p,h);do{if(c=u[a],s>i){if(null==c){if(e)return!1;c=u[a]=Object.create(null)}if(this.insertPath(t,e,c,i+1,s)===!1)return!1}else u[a]=(c||0)+1,this.length+=1;h.done||(a=f(p,h))}while(!h.done);return!0},r.prototype.removePath=function(t,e,n,r){var o=n||0,i=r||t.length-1,s=e||this.pathmaps[i+1];if(void 0===s||null===s)return!0;var u,a,c=0,p=t[o],h={};u=f(p,h);do if(a=s[u],void 0!==a&&null!==a){if(i>o){c+=this.removePath(t,a,o+1,i);var l=void 0;for(l in a)break;void 0===l&&delete s[u]}else a=s[u]=(a||1)-1,0===a&&delete s[u],c+=1,this.length-=1;h.done||(u=f(p,h))}while(!h.done);return c},r.prototype.getSourceObserver=function(t){var e=this;return i.create(function(n){n.jsonGraph=n.jsonGraph||n.jsong||n.values||n.value,n.index=e.index,t.onNext(n)},function(e){t.onError(e)},function(){t.onCompleted()})},r.prototype._subscribe=function(t){var e=this,n=this.queue;e.pending=!0;var r=!1,o=new a,i=u.create(function(){r||(r=!0,n&&n._remove(e))}),s=new c(o,i);try{o.setDisposable(this.model._source[this.method](this.getSourceArgs()).subscribe(this.getSourceObserver(t)))}catch(h){throw new p(h)}return s},e.exports=r},{143:143,159:159,9:9}],54:[function(t,e,n){function r(t,e){this.total=0,this.model=t,this.requests=[],this.scheduler=e}var o=t(58),i=t(40),s=t(90),u=t(100),a=t(143);r.prototype.set=function(t){return t.paths=a.collapse(t.paths),o.create(this.model,t)},r.prototype._remove=function(t){var e=this.requests,n=e.indexOf(t);-1!==n&&e.splice(n,1)},r.prototype.distributePaths=function(t,e,n){var r,o,i=this.model,s=-1,u=t.length,a=-1,c=e.length,p=[];t:for(;++s<u;){var h=t[s];for(a=-1;++a<c;)if(o=e[a],o.insertPath(h,o.pending)){p[a]=o;continue t}r||(r=n.create(this,i,this.total++),e[a]=r,p[c++]=r),r.insertPath(h,!1)}var f=[],l=-1;for(a=-1;++a<c;)o=p[a],null!=o&&(f[++l]=o);return f},r.prototype.mergeJSONGraphs=function(t,e){var n=0,r=[],o=[],a=[],c=t.index,p=e.index;t.index=Math.max(c,p),r[-1]=t.jsonGraph||{},o[-1]=e.jsonGraph||{};t:for(;n>-1;){for(var h=r[n-1],f=o[n-1],l=a[n-1]||(a[n-1]=Object.keys(f));l.length>0;){var d=l.pop();if(d[0]!==i)if(h.hasOwnProperty(d)){var v=h[d],y=s(v),b=f[d],m=s(b);if(u(v)&&u(b)&&!y&&!m){r[n]=v,o[n]=b,n+=1;continue t}p>c&&(h[d]=b)}else h[d]=f[d]}n-=1}return t},e.exports=r},{100:100,143:143,40:40,58:58,90:90}],55:[function(t,e,n){function r(t,e){this.model=t,this.scheduler=e,this.requests=this._requests=[]}var o=t(54),i=t(56);r.prototype.get=i.prototype.get,r.prototype.removeRequest=i.prototype.removeRequest,r.prototype.set=o.prototype.set,r.prototype.call=o.prototype.call,e.exports=r},{54:54,56:56}],56:[function(t,e,n){function r(t,e){this.model=t,this.scheduler=e,this.requests=this._requests=[]}var o=t(57),i=t(52);r.prototype={setScheduler:function(t){this.scheduler=t},get:function(t,e,n){function r(){v||(--h,0===h&&n())}var s,u,a,c=this,p=[],h=0,f=c._requests,l=e,d=t,v=!1;for(s=0,u=f.length;u>s;++s)if(a=f[s],a.type===o.GetRequest){if(a.sent){var y=a.add(d,l,r);y[0]&&(d=y[1],l=y[2],p[p.length]=y[3],++h)}else a.batch(d,l,r),l=[],d=[],++h;if(!l.length)break}if(l.length){a=new i(c.scheduler,c),f[f.length]=a,++h;var b=a.batch(d,l,r);p[p.length]=b}return function(){if(!v&&0!==h){v=!0;for(var t=p.length,e=0;t>e;++e)p[e]()}}},removeRequest:function(t){for(var e=this._requests,n=e.length;--n>=0;)if(e[n].id===t.id){e.splice(n,1);break}}},e.exports=r},{52:52,57:57}],57:[function(t,e,n){e.exports={GetRequest:\"GET\"}},{}],58:[function(t,e,n){function r(){s.call(this)}var o=t(159),i=o.Observer,s=t(53),u=t(83),a=t(76),c=t(78),p=new Array(0);r.create=function(t,e){var n=new r;return n.model=t,n.jsonGraphEnvelope=e,n},r.prototype=Object.create(s.prototype),r.prototype.constructor=r,r.prototype.method=\"set\",r.prototype.insertPath=function(){return!1},r.prototype.removePath=function(){return 0},r.prototype.getSourceArgs=function(){return this.jsonGraphEnvelope},r.prototype.getSourceObserver=function(t){var e=this.model,n=e._path,r=this.jsonGraphEnvelope.paths,o=e._root,h=o.errorSelector,f=o.comparator;return s.prototype.getSourceObserver.call(this,i.create(function(o){e._path=p;var i=a(e,[{paths:r,jsonGraph:o.jsonGraph}],null,h,f);o.paths=i[1],e._path=n,t.onNext(o)},function(o){e._path=p,c(e,u(r,function(t){return{path:t,value:o}}),null,h,f),e._path=n,t.onError(o)},function(){t.onCompleted()}))},e.exports=r},{159:159,53:53,76:76,78:78,83:83}],59:[function(t,e,n){var r=t(143).hasIntersection,o=t(84);e.exports=function(t,e,n){for(var i=[],s=[],u=[],a=-1,c=-1,p=!1,h=0,f=e.length;f>h;++h){var l=e[h],d=n[l.length];d&&r(d,l,0)?(!p&&h>0&&(s=o(t,0,h),i=o(e,0,h)),u[++a]=t[h],p=!0):p&&(i[++c]=l,s[c]=t[h])}return p?[u,i,s]:null}},{143:143,84:84}],60:[function(t,e,n){var r=t(143),o=r.toTree,i=r.toPaths;e.exports=function(t,e,n){if(0===t._count)return void t.requestQueue.removeRequest(t);t.sent=!0,t.scheduled=!1;for(var r=t._pathMap,s=Object.keys(e),u=0,a=s.length;a>u;++u)for(var c=e[u],p=0,h=c.length;h>p;++p){var f=c[p],l=f.length;if(r[l]){var d=r[l];d[d.length]=f}else r[l]=[f]}for(var v=Object.keys(r),y=0,b=v.length;b>y;++y){var m=v[y];r[m]=o(r[m])}var g,w=t._collasped=i(r);t.requestQueue.model._source.get(w).subscribe(function(t){g=t},function(t){n(t,g)},function(){n(null,g)})}},{143:143}],61:[function(t,e,n){function r(t){u.call(this,t||i)}function o(t){return s.Observable.defer(function(){return t})}function i(t){function e(t){function e(t,e){if(Boolean(e.invalidated))t.invalidations.push(t.localThisPath.concat(e.path));else{var n=e.path,r=e.value;Boolean(r)&&\"object\"==typeof r&&r.$type===f?t.references.push({path:i(n),value:e.value}):t.values.push({path:i(n),value:e.value})}return t}function n(t){var e=t.values.concat(t.references);return e.length>0?o(g.set.apply(g,e)._toJSONG()).map(function(e){return{results:t,envelope:e}}):u[\"return\"]({results:t,envelope:{jsonGraph:{},paths:[]}})}function r(t){var e,n=t.envelope,r=t.results,c=r.values,p=r.references,h=r.invalidations,f=c.map(a).map(i),l=p.reduce(s,[]),d=b.map(i),v=l.concat(d);return e=v.length>0?o(m.get.apply(m,f.concat(v))._toJSONG()):u[\"return\"](n),e.doAction(function(t){t.invalidated=h})}function s(t,e){var n=e.path;return t.push.apply(t,y.map(function(t){return n.concat(t)})),t}function a(t){return t.path}var c=t&&t.localFn;if(\"function\"==typeof c){var p=t.model,h=p._path,l=c.apply(p,v).reduce(e,{values:[],references:[],invalidations:[],localThisPath:h}).flatMap(n).flatMap(r);return u[\"return\"](l)}return u.empty()}function n(t){function e(t){var e=t.invalidated;return e&&e.length&&m.invalidate.apply(m,e),t}return t&&\"object\"==typeof t?s.Observable.defer(function(){\nvar e;try{e=t.call(x,v,y,b)}catch(n){e=u[\"throw\"](new p(n))}return e}).map(e):u.empty()}function r(t){return o(g.set(t)).reduce(function(t){return t},null).map(function(){return{invalidated:t.invalidated,paths:t.paths.map(function(t){return t.slice(w.length)})}})}function i(t){return _.concat(t)}var c=this.args,l=this.model,d=h.fromPath(c[0]),v=c[1]||[],y=(c[2]||[]).map(h.fromPath),b=(c[3]||[]).map(h.fromPath),m=l._clone({_path:[]}),g=m.withoutDataSource(),w=l._path,x=w.concat(d),_=x.slice(0,-1),S=o(l.withoutDataSource().get(d)).map(function(t){for(var e=t.json,n=-1,r=d.length;e&&++n<r;)e=e[d[n]];var o=m._derefSync(_).boxValues();return{model:o,localFn:e}}).flatMap(e).defaultIfEmpty(n(l._source)).mergeAll().flatMap(r),E=new a;return E.add(S.subscribe(function(e){var n=e.paths,r=e.invalidated,i=l.get.apply(l,n);\"AsJSONG\"===t.outputFormat&&(i=o(i._toJSONG()).doAction(function(t){t.invalidated=r})),E.add(i.subscribe(t))},function(e){t.onError(e)})),E}var s=t(159)&&t(158),u=s.Observable,a=s.CompositeDisposable,c=t(64),p=t(9),h=t(134),f=t(120);r.create=c.create,r.prototype=Object.create(u.prototype),r.prototype.constructor=r,r.prototype.invokeSourceRequest=function(t){return this},r.prototype.ensureCollect=function(t){return this},r.prototype.initialize=function(){return this},e.exports=r},{120:120,134:134,158:158,159:159,64:64,9:9}],62:[function(t,e,n){function r(t){i.call(this,t)}var o=t(159),i=o.Observable,s=t(64),u=t(134),a=t(88),c=t(49),p=t(81),h=t(46),f=Array.isArray,l=t(101),d=t(98),v=t(99);r.create=s.create,r.prototype=Object.create(i.prototype),r.prototype.constructor=r,r.prototype.subscribeCount=0,r.prototype.subscribeLimit=10,r.prototype.initialize=function(){for(var t,e,n=this.model,r=this.outputFormat||\"AsPathMap\",o=this.isProgressive,i=[{}],s=[],a=this.args,c=-1,h=a.length;++c<h;){var y,b=a[c];f(b)||\"string\"==typeof b?(b=u.fromPath(b),y=\"PathValues\"):l(b)?(b.path=u.fromPath(b.path),y=\"PathValues\"):v(b)?y=\"JSONGs\":d(b)&&(y=\"PathMaps\"),e!==y&&(e=y,t={inputType:y,arguments:[]},s.push(t),t.values=i),t.arguments.push(b)}return this.boundPath=p(n._path),this.groups=s,this.outputFormat=r,this.isProgressive=o,this.isCompleted=!1,this.isMaster=null==n._source,this.values=i,this},r.prototype.invokeSourceRequest=function(t){return this},r.prototype.ensureCollect=function(t){var e=this[\"finally\"](function(){var e=t._root,n=e.cache;e.collectionScheduler.schedule(function(){c(e,e.expired,a(n),t._maxSize,t._collectRatio,n[h])})});return new this.constructor(function(t){return e.subscribe(t)})},e.exports=r},{101:101,134:134,159:159,46:46,49:49,64:64,81:81,88:88,98:98,99:99}],63:[function(t,e,n){function r(t){u.call(this,t||o)}function o(t){for(var e=this.model,n=this.method,r=this.groups,o=-1,i=r.length;++o<i;){var u=r[o],a=u.inputType,c=u.arguments;if(c.length>0){var p=\"_\"+n+a+\"AsJSON\",h=e[p];h(e,c)}}return t.onCompleted(),s.empty}var i=t(159),s=i.Disposable,u=t(62);r.create=u.create,r.prototype=Object.create(u.prototype),r.prototype.method=\"invalidate\",r.prototype.constructor=r,e.exports=r},{159:159,62:62}],64:[function(t,e,n){function r(t){this._subscribe=t}function o(t){var e=this.model,n=new this.type;return n.model=e,n.args=this.args,n.outputFormat=t.outputFormat||\"AsPathMap\",n.isProgressive=t.isProgressive||!1,n.subscribeCount=0,n.subscribeLimit=t.retryLimit||10,n.initialize().invokeSourceRequest(e).ensureCollect(e).subscribe(t)}var i=t(32),s=t(159)&&t(158),u=s.Observable,a=t(84),c=t(105),p={outputFormat:{value:\"AsJSONG\"}},h={isProgressive:{value:!0}};r.create=function(t,e){var n=new r(o);return n.args=e,n.type=this,n.model=t,n},r.prototype=Object.create(u.prototype),r.prototype.constructor=r,r.prototype._mixin=function(){var t=this,e=a(arguments);return new t.constructor(function(n){return t.subscribe(e.reduce(function(t,e){return Object.create(t,e)},n))})},r.prototype._toJSONG=function(){return this._mixin(p)},r.prototype.progressively=function(){return this._mixin(h)},r.prototype.subscribe=function(t,e,n){var r=t;r&&\"object\"==typeof r||(r={onNext:t||c,onError:e||c,onCompleted:n||c});var o=this._subscribe(r);switch(typeof o){case\"function\":return{dispose:o};case\"object\":return o||{dispose:c};default:return{dispose:c}}},r.prototype.then=function(t,e){var n=this;return new i.Promise(function(t,e){var r,o=!1;n.toArray().subscribe(function(t){r=t.length<=1?t[0]:t},function(t){o=!0,e(t)},function(){o===!1&&t(r)})}).then(t,e)},e.exports=r},{105:105,158:158,159:159,32:32,84:84}],65:[function(t,e,n){function r(t){l.call(this,t||o)}function o(t){return this.isCompleted?s.call(this,t):i.call(this,t)}function i(t){if(this.subscribeCount++>this.subscribeLimit)return t.onError(\"Loop kill switch thrown.\"),h.empty;for(var e=[],n=[],r=this.model,o=this.isMaster,i=r._root,c=this.outputFormat,p=i.errorSelector,f=this.method,l=this.groups,d=-1,y=l.length;++d<y;){var b=l[d],m=b.inputType,g=b.arguments;if(g.length>0){var w=\"_\"+f+m+c,x=r[w],_=x(r,g,null,p);n.push.apply(n,_[1]),\"PathValues\"===m?e.push.apply(e,g.map(u)):\"JSONGs\"===m?e.push.apply(e,v(g,a)):e.push.apply(e,_[0])}}return this.requestedPaths=e,o?(this.isCompleted=!0,s.call(this,t)):void t.onError({method:f,optimizedPaths:n,invokeSourceRequest:!0})}function s(t){var e=new f(this.model,this.requestedPaths);return\"AsJSONG\"===this.outputFormat&&(e=e._toJSONG()),this.isProgressive&&(e=e.progressively()),e.subscribe(t)}function u(t){return t.path}function a(t){return t.paths}var c=t(159),p=c.Observable,h=c.Disposable,f=t(67),l=t(62),d=t(9),v=t(82),y=new Array(0);r.create=l.create,r.prototype=Object.create(l.prototype),r.prototype.method=\"set\",r.prototype.constructor=r,r.prototype.invokeSourceRequest=function(t){var e=this,n=this[\"catch\"](function(r){var o;if(r&&r.invokeSourceRequest===!0){var i={},s=t._path,u=r.optimizedPaths;t._path=y,t._getPathValuesAsJSONG(t._materialize().withoutDataSource(),u,[i]),t._path=s,o=t._request.set(i)[\"do\"](function(t){e.isCompleted=u.length===t.paths.length},function(){e.isCompleted=!0}).materialize().flatMap(function(t){if(\"C\"===t.kind)return p.empty();if(\"E\"===t.kind){var e=t.exception;if(d.is(e))return p[\"throw\"](t.exception)}return n})}else o=p[\"throw\"](r);return o});return new this.constructor(function(t){return n.subscribe(t)})},e.exports=r},{159:159,62:62,67:67,82:82,9:9}],66:[function(t,e,n){var r=function(t){this.disposed=!1,this.currentDisposable=t};r.prototype={dispose:function(){if(!this.disposed&&this.currentDisposable){this.disposed=!0;var t=this.currentDisposable;t.dispose?t.dispose():t()}}},e.exports=r},{}],67:[function(t,e,n){var r=t(64),o=t(68),i=t(69),s={dispose:function(){}},u=t(159).Observable,a=e.exports=function(t,e,n,r){this.model=t,this.currentRemainingPaths=e,this.isJSONGraph=n||!1,this.isProgressive=r||!1};a.prototype=Object.create(u.prototype),a.prototype.subscribe=r.prototype.subscribe,a.prototype.then=r.prototype.then,a.prototype._toJSONG=function(){return new a(this.model,this.currentRemainingPaths,!0,this.isProgressive)},a.prototype.progressively=function(){return new a(this.model,this.currentRemainingPaths,this.isJSONGraph,!0)},a.prototype._subscribe=function(t){var e=[{}],n=[],r=t.isJSONG=this.isJSONGraph,u=this.isProgressive,a=o(this.model,this.currentRemainingPaths,t,u,r,e,n);return a?i(this,this.model,a,t,e,n,1):s}},{159:159,64:64,68:68,69:69}],68:[function(t,e,n){var r=t(19),o=r.getWithPathsAsJSONGraph,i=r.getWithPathsAsPathMap;e.exports=function(t,e,n,r,s,u,a){var c;if(c=s?o(t,e,u):i(t,e,u),c.criticalError)return n.onError(c.criticalError),null;var p=c.hasValue,h=!c.requestedMissingPaths||!t._source,f=u[0].json||u[0].jsonGraph;if(c.errors)for(var l=c.errors,d=a.length,v=0,y=l.length;y>v;++v,++d)a[d]=l[v];if(p&&r||f&&h)try{++t._root.syncRefCount,n.onNext(u[0])}catch(b){throw b}finally{--t._root.syncRefCount}return h?(a.length?n.onError(a):n.onCompleted(),null):c}},{19:19}],69:[function(t,e,n){var r=t(68),o=t(10),i=t(30).fastCat,s=t(49),u=t(88),a=t(66),c=t(46);e.exports=function p(t,e,n,h,f,l,d){if(10===d)throw new o;var v=e._request,y=n.requestedMissingPaths,b=n.optimizedMissingPaths,m=new a,g=[],w=e._path;if(w.length)for(var x=0,_=y.length;_>x;++x)g[x]=i(w,y[x]);else g=y;var S=v.get(g,b,function(){var n=r(e,y,h,t.isProgressive,t.isJSONGraph,f,l);if(n)m.currentDisposable=p(t,e,n,h,f,l,d+1);else{var o=e._root,i=o.cache,a=i[c];s(o,o.expired,u(i),e._maxSize,e._collectRatio,a)}});return m.currentDisposable=S,m}},{10:10,30:30,46:46,49:49,66:66,68:68,88:88}],70:[function(t,e,n){var r=t(67);e.exports=function(t){return new r(this,t)}},{67:67}],71:[function(t,e,n){var r=t(134),o=t(64),i=t(72),s=t(116),u=t(67);e.exports=function(){var t=s(arguments,i,\"get\");if(t!==!0)return new o(function(e){e.onError(t)});var e=r.fromPathsOrPathValues(arguments);return new u(this,e)}},{116:116,134:134,64:64,67:67,72:72}],72:[function(t,e,n){e.exports={path:!0,pathSyntax:!0}},{}],73:[function(t,e,n){function r(){}var o=t(123),i=t(159),s=i.Disposable;r.prototype.schedule=function(t){return o(t),s.empty},r.prototype.scheduleWithState=function(t,e){var n=this;return o(function(){e(n,t)}),s.empty},e.exports=r},{123:123,159:159}],74:[function(t,e,n){function r(){}var o=t(159),i=o.Disposable;r.prototype.schedule=function(t){return t(),i.empty},r.prototype.scheduleWithState=function(t,e){return e(this,t),i.empty},e.exports=r},{159:159}],75:[function(t,e,n){function r(t){this.delay=t}var o=t(159),i=o.Disposable;r.prototype.schedule=function(t){var e=setTimeout(t,this.delay);return i.create(function(){void 0!==e&&(clearTimeout(e),e=void 0)})},r.prototype.scheduleWithState=function(t,e){var n=this,r=setTimeout(function(){e(n,t)},this.delay);return i.create(function(){void 0!==r&&(clearTimeout(r),r=void 0)})},e.exports=r},{159:159}],76:[function(t,e,n){function r(t,e,n,o,s,u,a,c,p,h,f,d,v,y,b,g,w){for(var x={},_=e<t.length-1,S=t[e],E=m(S,x),C=d.index;;){f.depth=e;var A=i(n,o,s,u,a,c,E,_,!1,f,d,v,y,b,g,w);f[e]=E,f.index=e,d[d.index++]=E;var N=A[0],k=A[1];if(N&&(_?r(t,e+1,n,k,N,u,A[3],A[2],p,h,f,d,v,y,b,g,w):(l(b,N),p.push(f.slice(0,f.index+1)),h.push(d.slice(0,d.index)))),E=m(S,x),x.done)break;d.index=C}}function o(t,e,n,r,o,s,c,f,v,m,g){var w=e.value;if(s.splice(0,s.length),s.push.apply(s,w),d(e))return s.index=w.length,b(e,f,v),[void 0,t,r,n];l(v,e);var x=0,_=e,S=w.length-1,E=e=t,C=r=n;do{var A=w[x],N=S>x,k=i(t,E,e,n,C,r,A,N,!0,o,s,c,f,v,m,g);if(e=k[0],y(e))return s.index=x,k;E=k[1],r=k[2],C=k[3]}while(x++<S);if(s.index=x,_[a]!==e){var O=e[h]||0;e[h]=O+1,e[u+O]=_,_[a]=e,_[p]=O}return[e,E,r,C]}function i(t,e,n,r,i,u,a,c,p,h,l,d,v,b,m,g){for(var x=n.$type;x===f;){var _=o(t,n,r,u,h,l,d,v,b,m,g);if(n=_[0],y(n))return _;e=_[1],u=_[2],i=_[3],x=n.$type}if(void 0!==x)return[n,e,u,i];if(null==a){if(c)throw new Error(\"`null` is not allowed in branch key positions.\");n&&(a=n[s])}else e=n,i=u,n=e[a],u=i&&i[a];return n=w(e,n,u,a,h,l,d,v,b,m,g),[n,e,u,i]}var s=t(36),u=t(43),a=t(33),c=t(46),p=t(42),h=t(44),f=t(120),l=t(50),d=t(94),v=t(96),y=t(102),b=t(86),m=t(143).iterateKeySet,g=t(92),w=t(103);e.exports=function(t,e,n,o,i){for(var s=t._root,u=s,a=s.expired,p=g(),h=s.cache,f=h[c],l=[],d=[],y=[],b=[],m=-1,w=e.length;++m<w;)for(var x=e[m],_=x.paths,S=x.jsonGraph,E=-1,C=_.length;++E<C;){var A=_[E];d.index=0,r(A,0,h,h,h,S,S,S,y,b,l,d,p,a,u,i,o)}var N=h[c],k=s.onChange;return v(k)&&f!==N&&k(),[y,b]}},{102:102,103:103,120:120,143:143,33:33,36:36,42:42,43:43,44:44,46:46,50:50,86:86,92:92,94:94,96:96}],77:[function(t,e,n){function r(t,e,n,o,u,a,c,p,h,f,l,d,v,y){var b=s(t);if(b&&b.length)for(var g=0,x=b.length,_=h.index;;){var S=b[g],E=t[S],C=w(E)&&!E.$type;p.depth=e;var A=i(n,o,u,S,E,C,!1,p,h,f,l,d,v,y);p[e]=S,p.index=e,h[h.index++]=S;var N=A[0],k=A[1];if(N&&(C?r(E,e+1,n,k,N,a,c,p,h,f,l,d,v,y):(m(d,N),a.push(p.slice(0,p.index+1)),c.push(h.slice(0,h.index)))),++g>=x)break;h.index=_}}function o(t,e,n,r,o,s,u,c,f,v){var y=n.value;if(o.splice(0,o.length),o.push.apply(o,y),x(n))return o.index=y.length,E(n,u,c),[void 0,e];m(c,n);var b=n,g=e;if(n=n[h],null!=n)g=n[p]||e,o.index=y.length;else{var w=0,_=y.length-1;g=n=e;do{var C=y[w],A=_>w,N=i(e,g,n,C,t,A,!0,r,o,s,u,c,f,v);if(n=N[0],S(n))return o.index=w,N;g=N[1]}while(w++<_);if(o.index=w,b[h]!==n){var k=n[d]||0;n[d]=k+1,n[a+k]=b,b[h]=n,b[l]=k}}return[n,g]}function i(t,e,n,r,i,s,a,c,p,h,f,l,d,y){for(var b=n.$type;b===v;){var m=o(i,t,n,c,p,h,f,l,d,y);if(n=m[0],S(n))return m;e=m[1],b=n&&n.$type}if(void 0!==b)return[n,e];if(null==r){if(s)throw new Error(\"`null` is not allowed in branch key positions.\");n&&(r=n[u])}else e=n,n=e[r];return n=A(e,n,r,i,s,a,c,p,h,f,l,d,y),[n,e]}function s(t){if(w(t)&&!t.$type){var e=[],n=0;b(t)&&(e[n++]=\"length\");for(var r in t)r[0]!==c&&\"$\"!==r[0]&&g(t,r)&&(e[n++]=r);return e}}var u=t(36),a=t(43),c=t(40),p=t(39),h=t(33),f=t(46),l=t(42),d=t(44),v=t(120),y=t(13),b=Array.isArray,m=t(50),g=t(91),w=t(100),x=t(95),_=t(96),S=t(102),E=t(86),C=t(92),A=t(104);e.exports=function(t,e,n,o,i){for(var s=t._root,u=s,a=s.expired,c=C(),h=t._path,l=s.cache,d=h.length?y(t,h).value:l,v=d[p]||l,b=l[f],m=[],g=[],w=[],x=h.length,S=-1,E=e.length;++S<E;){var A=e[S],N=h.slice(0);N.index=x,r(A.json,0,l,v,d,g,w,m,N,c,a,u,i,o)}var k=l[f],O=s.onChange;return _(O)&&b!==k&&O(),[g,w]}},{100:100,102:102,104:104,120:120,13:13,33:33,36:36,39:39,40:40,42:42,43:43,44:44,46:46,50:50,86:86,91:91,92:92,95:95,96:96}],78:[function(t,e,n){function r(t,e,n,o,s,u,a,c,p,h,f,l,d,y,b){for(var m={},g=n<e.length-1,x=e[n],_=w(x,m),S=h.index;;){p.depth=n;var E=i(o,s,u,_,t,g,!1,p,h,f,l,d,y,b);p[n]=_,p.index=n,h[h.index++]=_;var C=E[0],A=E[1];if(C&&(g?r(t,e,n+1,o,A,C,a,c,p,h,f,l,d,y,b):(v(d,C),a.push(p.slice(0,p.index+1)),c.push(h.slice(0,h.index)))),_=w(x,m),m.done)break;h.index=S}}function o(t,e,n,r,o,s,p,l,d,b){var w=n.value;if(o.splice(0,o.length),o.push.apply(o,w),y(n))return o.index=w.length,g(n,p,l),[void 0,e];v(l,n);var x=n,_=e;if(n=n[c],null!=n)_=n[a]||e,o.index=w.length;else{var S=0,E=w.length-1;_=n=e;do{var C=w[S],A=E>S,N=i(e,_,n,C,t,A,!0,r,o,s,p,l,d,b);if(n=N[0],m(n))return o.index=S,N;_=N[1]}while(S++<E);if(o.index=S,x[c]!==n){var k=n[f]||0;n[f]=k+1,n[u+k]=x,x[c]=n,x[h]=k}}return[n,_]}function i(t,e,n,r,i,u,a,c,p,h,f,d,v,y){for(var b=n.$type;b===l;){var g=o(i,t,n,c,p,h,f,d,v,y);if(n=g[0],m(n))return g;e=g[1],b=n.$type}if(void 0!==b)return[n,e];if(null==r){if(u)throw new Error(\"`null` is not allowed in branch key positions.\");n&&(r=n[s])}else e=n,n=e[r];return n=_(e,n,r,i,u,a,c,p,h,f,d,v,y),[n,e]}var s=t(36),u=t(43),a=t(39),c=t(33),p=t(46),h=t(42),f=t(44),l=t(120),d=t(13),v=t(50),y=t(95),b=t(96),m=t(102),g=t(86),w=t(143).iterateKeySet,x=t(92),_=t(104);e.exports=function(t,e,n,o,i){for(var s=t._root,u=s,c=s.expired,h=x(),f=t._path,l=s.cache,v=f.length?d(t,f).value:l,y=v[a]||l,m=l[p],g=[],w=[],_=[],S=f.length,E=-1,C=e.length;++E<C;){var A=e[E],N=A.path,k=A.value,O=f.slice(0);O.index=S,r(k,N,0,l,y,v,w,_,g,O,h,c,u,i,o)}var P=l[p],j=s.onChange;return b(j)&&m!==P&&j(),[w,_]}},{102:102,104:104,120:120,13:13,143:143,33:33,36:36,39:39,42:42,43:43,44:44,46:46,50:50,86:86,92:92,95:95,96:96}],79:[function(t,e,n){var r=t(130),o=t(64),i=t(101);e.exports=function(t,e){for(var n=i(t)?t:r.pathValue(t,e),s=0,u=n.path,a=u.length;++s<a;)if(\"object\"==typeof u[s])return new o(function(t){t.onError(new Error(\"Paths must be simple paths\"))});var c=this;return new o(function(t){return c._set(n).subscribe(function(e){for(var n=e.json,r=-1,o=u.length;n&&++r<o;)n=n[u[r]];t.onNext(n)},function(e){t.onError(e)},function(){t.onCompleted()})})}},{101:101,130:130,64:64}],80:[function(t,e,n){var r=t(134),o=t(101),i=t(78);e.exports=function(t,e,n,s){var u=r.fromPath(t),a=e,c=n,p=s;if(o(u)?(p=c,c=a,a=u):a={path:u,value:a},o(a)===!1)throw new Error(\"Model#setValueSync must be called with an Array path.\");return\"function\"!=typeof c&&(c=this._root._errorSelector),\"function\"!=typeof p&&(p=this._root._comparator),this._syncCheck(\"setValueSync\")?(i(this,[a]),this._getValueSync(this,a.path).value):void 0}},{101:101,134:134,78:78}],81:[function(t,e,n){e.exports=function(t){if(!t)return t;for(var e=-1,n=t.length,r=[];++e<n;)r[e]=t[e];return r}},{}],82:[function(t,e,n){e.exports=function(t,e){for(var n=-1,r=-1,o=t.length,i=[];++r<o;)for(var s=e(t[r],r,t),u=-1,a=s.length;++u<a;)i[++n]=s[u];return i}},{}],83:[function(t,e,n){e.exports=function(t,e){for(var n=-1,r=t.length,o=new Array(r);++n<r;)o[n]=e(t[n],n,t);return o}},{}],84:[function(t,e,n){e.exports=function(t,e,n){var r=e||0,o=-1,i=t.length-r;0>i&&(i=0),n>0&&i>n&&(i=n);for(var s=new Array(i);++o<i;)s[o]=t[o+r];return s}},{}],85:[function(t,e,n){var r=t(40),o=t(91),i=Array.isArray,s=t(100);e.exports=function(t){var e=t;if(s(e)){e=i(t)?[]:{};var n=t;for(var u in n)u[0]!==r&&o(n,u)&&(e[u]=n[u])}return e}},{100:100,40:40,91:91}],86:[function(t,e,n){var r=t(51),o=t(35);e.exports=function(t,e,n){return t[o]||(t[o]=!0,e.push(t),r(n,t)),t}},{35:35,51:51}],87:[function(t,e,n){var r=t(100);e.exports=function(t){return r(t)&&t.$expires||void 0}},{100:100}],88:[function(t,e,n){var r=t(100);e.exports=function(t){return r(t)&&t.$size||0}},{100:100}],89:[function(t,e,n){var r=t(100);e.exports=function(t){return r(t)&&t.$timestamp||void 0}},{100:100}],90:[function(t,e,n){var r=t(100);e.exports=function(t,e){var n=r(t)&&t.$type||void 0;return e&&n?\"branch\":n}},{100:100}],91:[function(t,e,n){var r=t(100),o=Object.prototype.hasOwnProperty;e.exports=function(t,e){return r(t)&&o.call(t,e)}},{100:100}],92:[function(t,e,n){var r=1;e.exports=function(){return r++}},{}],93:[function(t,e,n){var r=t(36),o=t(39),i=t(46);e.exports=function(t,e,n,s){return t[r]=n,t[o]=e,t[i]=s,e[n]=t,t}},{36:36,39:39,46:46}],94:[function(t,e,n){var r=t(106),o=t(122),i=t(121);e.exports=function(t){var e=t.$expires;return null!=e&&e!==i&&e!==o&&e<r()}},{106:106,121:121,122:122}],95:[function(t,e,n){var r=t(106),o=t(122),i=t(121);e.exports=function(t){var e=t.$expires;return null!=e&&e!==i&&(e===o||e<r())}},{106:106,121:121,122:122}],96:[function(t,e,n){var r=\"function\";e.exports=function(t){return Boolean(t)&&typeof t===r}},{}],97:[function(t,e,n){var r=t(40);e.exports=function(t){return\"$size\"===t||t&&t.charAt(0)===r}},{40:40}],98:[function(t,e,n){var r=t(100);e.exports=function(t){return r(t)&&\"json\"in t}},{100:100}],99:[function(t,e,n){var r=Array.isArray,o=t(100);e.exports=function(t){return o(t)&&r(t.paths)&&(o(t.jsonGraph)||o(t.jsong)||o(t.json)||o(t.values)||o(t.value))}},{100:100}],100:[function(t,e,n){var r=\"object\";e.exports=function(t){return null!==t&&typeof t===r}},{}],101:[function(t,e,n){var r=Array.isArray,o=t(100);e.exports=function(t){return o(t)&&(r(t.path)||\"string\"==typeof t.path)}},{100:100}],102:[function(t,e,n){var r=\"object\";e.exports=function(t){return null==t||typeof t!==r}},{}],103:[function(t,e,n){var r=t(36),o=t(39),i=t(120),s=t(119),u=t(88),a=t(89),c=t(100),p=t(95),h=t(96),f=t(50),l=t(117),d=t(93),v=t(86),y=t(110),b=t(115),m=t(107);e.exports=function(t,e,n,g,w,x,_,S,E,C,A){var N,k,O,P,j,D,q;if(e===n){if(null===n)return e=l(n,void 0,n),t=b(t,-e.$size,E,_),e=d(e,t,g),f(E,e),e;if(void 0===n)return n;if(P=c(e),P&&(k=e.$type,null==k))return null==e[o]&&(e[r]=g,e[o]=t),e}else P=c(e),P&&(k=e.$type);if(k!==i){if(j=c(n),j&&(O=n.$type),P&&!k&&(null==n||j&&!O))return e}else{if(null==n)return p(e)?void v(e,S,E):e;if(j=c(n),j&&(O=n.$type,O===i))if(e===n){if(null!=e[o])return e}else if(D=e.$timestamp,q=n.$timestamp,!p(e)&&!p(n)&&D>q)return}if(k&&j&&!O)return d(y(e,n,t,g,E),t,g);if(O||!j){if(O===s&&h(A)&&(n=A(m(w,g),n)),O&&e===n)null==e[o]&&(e=l(e,k,e.value),t=b(t,-e.$size,E,_),e=d(e,t,g,_));else{var R=!0;!k&&P||(R=a(n)<a(e)==!1,(k||O)&&h(C)&&(R=!C(e,n,x.slice(0,x.index)))),R&&(n=l(n,O,O?n.value:n),N=u(e)-u(n),e=y(e,n,t,g,E),t=b(t,N,E,_),e=d(e,t,g,_))}p(e)?v(e,S,E):f(E,e)}else null==e&&(e=d(n,t,g));return e}},{100:100,107:107,110:110,115:115,117:117,119:119,120:120,36:36,39:39,50:50,86:86,88:88,89:89,93:93,95:95,96:96}],104:[function(t,e,n){var r=t(120),o=t(119),i=t(90),s=t(88),u=t(89),a=t(95),c=t(102),p=t(96),h=t(117),f=t(86),l=t(93),d=t(110),v=t(115),y=t(114),b=t(107);e.exports=function(t,e,n,m,g,w,x,_,S,E,C,A,N){var k=i(e,w);if(g||w)k&&a(e)&&(k=\"expired\",f(e,E,C)),(k&&k!==r||c(e))&&(e=d(e,{},t,n,C),e=l(e,t,n,S),e=y(e,S));else{var O=m,P=i(O),j=u(O)<u(e)==!1;if((k||P)&&p(A)&&(j=!A(e,O,_.slice(0,_.index))),j){P===o&&p(N)&&(O=N(b(x,n),O)),O=h(O,P,P?O.value:O);var D=s(e)-s(O);e=d(e,O,t,n,C),t=v(t,D,C,S),e=l(e,t,n,S)}}return e}},{102:102,107:107,110:110,114:114,115:115,117:117,119:119,120:120,86:86,88:88,89:89,90:90,93:93,95:95,96:96}],105:[function(t,e,n){e.exports=function(){}},{}],106:[function(t,e,n){e.exports=Date.now},{}],107:[function(t,e,n){e.exports=function(t,e){var n=t.slice(0,t.depth);return n[n.length]=e,n}},{}],108:[function(t,e,n){var r=t(120),o=t(39),i=t(51),s=t(100),u=t(112),a=t(113);e.exports=function(t,e,n,c){if(s(t)){var p=t.$type;return Boolean(p)&&(p===r&&a(t),i(c,t)),u(t),e[n]=t[o]=void 0,!0}return!1}},{100:100,112:112,113:113,120:120,39:39,51:51}],109:[function(t,e,n){var r=t(91),o=t(40),i=t(108);e.exports=function s(t,e,n,u){if(i(t,e,n,u)){if(null==t.$type)for(var a in t)a[0]!==o&&\"$\"!==a[0]&&r(t,a)&&s(t[a],t,a,u);return!0}return!1}},{108:108,40:40,91:91}],110:[function(t,e,n){var r=t(100),o=t(111),i=t(109);e.exports=function(t,e,n,s,u){return t===e?t:(r(t)&&(o(t,e),i(t,n,s,u)),n[s]=e,e)}},{100:100,109:109,111:111}],111:[function(t,e,n){var r=t(43),o=t(33),i=t(44);e.exports=function(t,e){for(var n=t[i]||0,s=e[i]||0,u=-1;++u<n;){var a=t[r+u];void 0!==a&&(a[o]=e,e[r+(s+u)]=a,t[r+u]=void 0)}return e[i]=n+s,t[i]=void 0,e}},{33:33,43:43,44:44}],112:[function(t,e,n){var r=t(43),o=t(33),i=t(42),s=t(44);e.exports=function(t){for(var e=-1,n=t[s]||0;++e<n;){var u=t[r+e];null!=u&&(u[o]=u[i]=t[r+e]=void 0)}return t[s]=void 0,t}},{33:33,42:42,43:43,44:44}],113:[function(t,e,n){var r=t(43),o=t(33),i=t(42),s=t(44);e.exports=function(t){var e=t[o];if(e){for(var n=(t[i]||0)-1,u=(e[s]||0)-1;++n<=u;)e[r+n]=e[r+(n+1)];e[s]=u,t[i]=t[o]=e=void 0}return t}},{33:33,42:42,43:43,44:44}],114:[function(t,e,n){var r=t(43),o=t(39),i=t(46),s=t(44);e.exports=function(t,e){var n=[t],u=0;do{var a=n[u--];if(a&&a[i]!==e){a[i]=e,n[u++]=a[o];for(var c=-1,p=a[s]||0;++c<p;)n[u++]=a[r+c]}}while(u>-1);return t}},{39:39,43:43,44:44,46:46}],115:[function(t,e,n){var r=t(36),o=t(46),i=t(39),s=t(108),u=t(114);e.exports=function(t,e,n,a){var c=t;do{var p=c[i],h=c.$size=(c.$size||0)-e;0>=h&&null!=p?s(c,p,c[r],n):c[o]!==a&&u(c,a),c=p}while(c);return t}},{108:108,114:114,36:36,39:39,46:46}],116:[function(t,e,n){var r=Array.isArray,o=t(101),i=t(99),s=t(98),u=t(134);e.exports=function(t,e,n){for(var a=0,c=t.length;c>a;++a){var p=t[a],h=!1;if(r(p)&&e.path?h=!0:\"string\"==typeof p&&e.pathSyntax?h=!0:o(p)&&e.pathValue?(p.path=u.fromPath(p.path),h=!0):i(p)&&e.jsonGraph?h=!0:s(p)&&e.json?h=!0:\"function\"==typeof p&&a+1===c&&e.selector&&(h=!0),!h)return new Error(\"Unrecognized argument \"+typeof p+\" [\"+String(p)+\"] to Model#\"+n)}return!0}},{101:101,134:134,98:98,99:99}],117:[function(t,e,n){var r=t(130),o=r.atom,i=t(106),s=t(122),u=t(37),a=50,c=t(85),p=Array.isArray,h=t(88),f=t(87);e.exports=function(t,e,n){var r=0,l=t,d=e;if(d?(l=c(l),r=h(l),l.$type=d):(l=o(n),d=l.$type,l[u]=!0),null==n)r=a+1;else if(null==r||0>=r)switch(typeof n){case\"object\":r=p(n)?a+n.length:a+1;break;case\"string\":r=a+n.length;break;default:r=a+1}var v=f(l);return\"number\"==typeof v&&s>v&&(l.$expires=i()+-1*v),l.$size=r,l}},{106:106,122:122,130:130,37:37,85:85,87:87,88:88}],118:[function(t,e,n){e.exports=\"atom\"},{}],119:[function(t,e,n){e.exports=\"error\"},{}],120:[function(t,e,n){e.exports=\"ref\"},{}],121:[function(t,e,n){e.exports=1},{}],122:[function(t,e,n){e.exports=0},{}],123:[function(t,e,n){\"use strict\";function r(){if(a.length)throw a.shift()}function o(t){var e;e=u.length?u.pop():new i,e.task=t,s(e)}function i(){this.task=null}var s=t(124),u=[],a=[],c=s.makeRequestCallFromTimer(r);e.exports=o,i.prototype.call=function(){try{this.task.call()}catch(t){o.onerror?o.onerror(t):(a.push(t),c())}finally{this.task=null,u[u.length]=this}}},{124:124}],124:[function(t,e,n){(function(t){\"use strict\";function n(t){u.length||(s(),a=!0),u[u.length]=t}function r(){for(;c<u.length;){var t=c;if(c+=1,u[t].call(),c>p){for(var e=0,n=u.length-c;n>e;e++)u[e]=u[e+c];u.length-=c,c=0}}u.length=0,c=0,a=!1}function o(t){var e=1,n=new h(t),r=document.createTextNode(\"\");return n.observe(r,{characterData:!0}),function(){e=-e,r.data=e}}function i(t){return function(){function e(){clearTimeout(n),clearInterval(r),t()}var n=setTimeout(e,0),r=setInterval(e,50)}}e.exports=n;var s,u=[],a=!1,c=0,p=1024,h=t.MutationObserver||t.WebKitMutationObserver;s=\"function\"==typeof h?o(r):i(r),n.requestFlush=s,n.makeRequestCallFromTimer=i}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],125:[function(t,e,n){\"use strict\";function r(t,e){var n;for(n in e)t[n]=e[n];return t}function o(t,e){if(this._jsongUrl=t,\"number\"==typeof e){var n={timeout:e};e=n}this._config=r({timeout:15e3,headers:{}},e||{})}var i=t(129),s=t(126);Array.isArray;o.prototype={constructor:o,buildQueryObject:s,get:function(t){var e=\"GET\",n=this.buildQueryObject(this._jsongUrl,e,{paths:t,method:\"get\"}),o=r(n,this._config),s=this;return i(e,o,s)},set:function(t){var e=\"POST\",n=this.buildQueryObject(this._jsongUrl,e,{jsonGraph:t,method:\"set\"}),o=r(n,this._config);o.headers[\"Content-Type\"]=\"application/x-www-form-urlencoded\";var s=this;return i(e,o,s)},call:function(t,e,n,o){e=e||[],n=n||[],o=o||[];var s=\"POST\",u=[];u.push(\"method=call\"),u.push(\"callPath=\"+encodeURIComponent(JSON.stringify(t))),u.push(\"arguments=\"+encodeURIComponent(JSON.stringify(e))),u.push(\"pathSuffixes=\"+encodeURIComponent(JSON.stringify(n))),u.push(\"paths=\"+encodeURIComponent(JSON.stringify(o)));var a=this.buildQueryObject(this._jsongUrl,s,u.join(\"&\")),c=r(a,this._config);c.headers[\"Content-Type\"]=\"application/x-www-form-urlencoded\";var p=this;return i(s,c,p)}},o.XMLHttpSource=o,o[\"default\"]=o,e.exports=o},{126:126,129:129}],126:[function(t,e,n){\"use strict\";e.exports=function(t,e,n){var r,o=[],i={url:t},s=-1!==t.indexOf(\"?\"),u=s?\"&\":\"?\";return\"string\"==typeof n?o.push(n):(r=Object.keys(n),r.forEach(function(t){var e=\"object\"==typeof n[t]?JSON.stringify(n[t]):n[t];o.push(t+\"=\"+encodeURIComponent(e))})),\"GET\"===e?i.url+=u+o.join(\"&\"):i.data=o.join(\"&\"),i}},{}],127:[function(t,e,n){(function(t){\"use strict\";e.exports=function(){var e=new t.XMLHttpRequest;if(\"withCredentials\"in e)return e;if(t.XDomainRequest)return new XDomainRequest;throw new Error(\"CORS is not supported by your browser\")}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],128:[function(t,e,n){(function(t){\"use strict\";e.exports=function(){var e,n,r;if(t.XMLHttpRequest)return new t.XMLHttpRequest;try{for(n=[\"Msxml2.XMLHTTP\",\"Microsoft.XMLHTTP\",\"Msxml2.XMLHTTP.4.0\"],r=0;3>r;r++)try{if(e=n[r],new t.ActiveXObject(e))break}catch(o){}return new t.ActiveXObject(e)}catch(o){throw new Error(\"XMLHttpRequest is not supported by your browser\")}}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],129:[function(t,e,n){\"use strict\";function r(){}function o(t,e,n){return r.create(function(r){var o,i,h,f,l,d={method:t||\"GET\",crossDomain:!1,async:!0,headers:{},responseType:\"json\"};for(l in e)p.call(e,l)&&(d[l]=e[l]);d.crossDomain||d.headers[\"X-Requested-With\"]||(d.headers[\"X-Requested-With\"]=\"XMLHttpRequest\"),null!=n.onBeforeRequest&&n.onBeforeRequest(d);try{o=d.crossDomain?c():a()}catch(v){r.onError(v)}try{d.user?o.open(d.method,d.url,d.async,d.user,d.password):o.open(d.method,d.url,d.async),o.timeout=d.timeout,o.withCredentials=d.withCredentials!==!1,h=d.headers;for(f in h)p.call(h,f)&&o.setRequestHeader(f,h[f]);if(d.responseType)try{o.responseType=d.responseType}catch(y){if(\"json\"!==d.responseType)throw y}o.onreadystatechange=function(t){4===o.readyState&&(i||(i=!0,s(r,o,t)))},o.ontimeout=function(t){i||(i=!0,u(r,o,\"timeout error\",t))},o.send(d.data)}catch(y){r.onError(y)}return function(){i||4===o.readyState||(i=!0,o.abort())}})}function i(t,e,n){n||(n=new Error(e)),t.onError(n)}function s(t,e,n){var r,o;if(e&&t){o=e.responseType,r=\"response\"in e?e.response:e.responseText;var s=1223===e.status?204:e.status;if(s>=200&&399>=s){try{\"json\"!==o&&(r=JSON.parse(r||\"\")),\"string\"==typeof r&&(r=JSON.parse(r||\"\"))}catch(n){i(t,\"invalid json\",n)}return t.onNext(r),void t.onCompleted()}return 401===s||403===s||407===s?i(t,r):410===s?i(t,r):408===s||504===s?i(t,r):i(t,r||\"Response code \"+s)}}function u(t,e,n,r){i(t,n||e.statusText||\"request error\",r)}var a=t(128),c=t(127),p=Object.prototype.hasOwnProperty,h=function(){};r.create=function(t){var e=new r;return e.subscribe=function(e,n,r){var o,i;return o=\"function\"==typeof e?{onNext:e,onError:n||h,onCompleted:r||h}:e,i=t(o),\"function\"==typeof i?{dispose:i}:i},e},e.exports=o},{127:127,128:128}],130:[function(t,e,n){function r(t,e,n){var r=Object.create(null);if(null!=n){for(var o in n)r[o]=n[o];return r.$type=t,r.value=e,r}return{$type:t,value:e}}var o=t(134);e.exports={ref:function(t,e){return r(\"ref\",o.fromPath(t),e)},atom:function(t,e){return r(\"atom\",t,e)},undefined:function(){return r(\"atom\")},error:function(t,e){return r(\"error\",t,e)},pathValue:function(t,e){return{path:o.fromPath(t),value:e}},pathInvalidation:function(t){return{path:o.fromPath(t),invalidated:!0}}}},{134:134}],131:[function(t,e,n){e.exports={integers:\"integers\",ranges:\"ranges\",keys:\"keys\"}},{}],132:[function(t,e,n){var r={token:\"token\",dotSeparator:\".\",commaSeparator:\",\",openingBracket:\"[\",closingBracket:\"]\",openingBrace:\"{\",closingBrace:\"}\",escape:\"\\\\\",space:\" \",colon:\":\",quote:\"quote\",unknown:\"unknown\"};e.exports=r},{}],133:[function(t,e,n){e.exports={indexer:{nested:\"Indexers cannot be nested.\",needQuotes:\"unquoted indexers must be numeric.\",empty:\"cannot have empty indexers.\",leadingDot:\"Indexers cannot have leading dots.\",leadingComma:\"Indexers cannot have leading comma.\",requiresComma:\"Indexers require commas between indexer args.\",routedTokens:\"Only one token can be used per indexer when specifying routed tokens.\"},range:{precedingNaN:\"ranges must be preceded by numbers.\",suceedingNaN:\"ranges must be suceeded by numbers.\"},routed:{invalid:\"Invalid routed token.  only integers|ranges|keys are supported.\"},quote:{empty:\"cannot have empty quoted keys.\",illegalEscape:\"Invalid escape character.  Only quotes are escapable.\"},unexpectedToken:\"Unexpected token.\",invalidIdentifier:\"Invalid Identifier.\",invalidPath:\"Please provide a valid path.\",throwError:function(t,e,n){if(n)throw t+\" -- \"+e.parseString+\" with next token: \"+n;throw t+\" -- \"+e.parseString}}},{}],134:[function(t,e,n){var r=t(140),o=t(135),i=t(131),s=function(t,e){return o(new r(t,e))};e.exports=s,s.fromPathsOrPathValues=function(t,e){if(!t)return[];for(var n=[],r=0,o=t.length;o>r;r++)\"string\"==typeof t[r]?n[r]=s(t[r],e):\"string\"==typeof t[r].path?n[r]={path:s(t[r].path,e),value:t[r].value}:n[r]=t[r];return n},s.fromPath=function(t,e){return t?\"string\"==typeof t?s(t,e):t:[]},s.RoutedTokens=i},{131:131,135:135,140:140}],135:[function(t,e,n){var r=t(132),o=t(133),i=t(136);e.exports=function(t){for(var e=t.next(),n={},s=[];!e.done;){switch(e.type){case r.token:var u=+e.token[0];isNaN(u)||o.throwError(o.invalidIdentifier,t),s[s.length]=e.token;break;case r.dotSeparator:0===s.length&&o.throwError(o.unexpectedToken,t);break;case r.space:break;case r.openingBracket:i(t,e,n,s);break;default:o.throwError(o.unexpectedToken,t)}e=t.next()}return 0===s.length&&o.throwError(o.invalidPath,t),s}},{132:132,133:133,136:136}],136:[function(t,e,n){var r=t(132),o=t(133),i=o.indexer,s=t(138),u=t(137),a=t(139);e.exports=function(t,e,n,c){var p=t.next(),h=!1,f=1,l=!1;for(n.indexer=[];!p.done;){switch(p.type){case r.token:case r.quote:n.indexer.length===f&&o.throwError(i.requiresComma,t)}switch(p.type){case r.openingBrace:l=!0,a(t,p,n,c);break;case r.token:var d=+p.token;isNaN(d)&&o.throwError(i.needQuotes,t),n.indexer[n.indexer.length]=d;break;case r.dotSeparator:n.indexer.length||o.throwError(i.leadingDot,t),s(t,p,n,c);\nbreak;case r.space:break;case r.closingBracket:h=!0;break;case r.quote:u(t,p,n,c);break;case r.openingBracket:o.throwError(i.nested,t);break;case r.commaSeparator:++f;break;default:o.throwError(o.unexpectedToken,t)}if(h)break;p=t.next()}0===n.indexer.length&&o.throwError(i.empty,t),n.indexer.length>1&&l&&o.throwError(i.routedTokens,t),1===n.indexer.length&&(n.indexer=n.indexer[0]),c[c.length]=n.indexer,n.indexer=void 0}},{132:132,133:133,137:137,138:138,139:139}],137:[function(t,e,n){var r=t(132),o=t(133),i=o.quote;e.exports=function(t,e,n,s){for(var u=t.next(),a=\"\",c=e.token,p=!1,h=!1;!u.done;){switch(u.type){case r.token:case r.space:case r.dotSeparator:case r.commaSeparator:case r.openingBracket:case r.closingBracket:case r.openingBrace:case r.closingBrace:p&&o.throwError(i.illegalEscape,t),a+=u.token;break;case r.quote:p?(a+=u.token,p=!1):u.token!==c?a+=u.token:h=!0;break;case r.escape:p=!0;break;default:o.throwError(o.unexpectedToken,t)}if(h)break;u=t.next()}0===a.length&&o.throwError(i.empty,t),n.indexer[n.indexer.length]=a}},{132:132,133:133}],138:[function(t,e,n){var r=t(140),o=t(132),i=t(133);e.exports=function(t,e,n,s){var u,a=t.peek(),c=1,p=!1,h=!0,f=n.indexer.length-1,l=r.toNumber(n.indexer[f]);for(isNaN(l)&&i.throwError(i.range.precedingNaN,t);!p&&!a.done;){switch(a.type){case o.dotSeparator:3===c&&i.throwError(i.unexpectedToken,t),++c,3===c&&(h=!1);break;case o.token:u=r.toNumber(t.next().token),isNaN(u)&&i.throwError(i.range.suceedingNaN,t),p=!0;break;default:p=!0}if(p)break;t.next(),a=t.peek()}n.indexer[f]={from:l,to:h?u:u-1}}},{132:132,133:133,140:140}],139:[function(t,e,n){var r=t(132),o=t(131),i=t(133),s=i.routed;e.exports=function(t,e,n,u){var a=t.next(),c=!1,p=\"\";switch(a.token){case o.integers:case o.ranges:case o.keys:break;default:i.throwError(s.invalid,t)}var h=t.next();if(h.type===r.colon&&(c=!0,h=t.next(),h.type!==r.token&&i.throwError(s.invalid,t),p=h.token,h=t.next()),h.type===r.closingBrace){var f={type:a.token,named:c,name:p};n.indexer[n.indexer.length]=f}else i.throwError(s.invalid,t)}},{131:131,132:132,133:133}],140:[function(t,e,n){function r(t,e,n){return{token:t,done:n,type:e}}function o(t,e,n){var o,g=!1,w=\"\",x=n?m:b;do{if(o=e+1>=t.length)break;var _=t[e+1];if(void 0===_||-1!==x.indexOf(_)){if(w.length)break;++e;var S;switch(_){case s:S=i.dotSeparator;break;case u:S=i.commaSeparator;break;case a:S=i.openingBracket;break;case c:S=i.closingBracket;break;case p:S=i.openingBrace;break;case h:S=i.closingBrace;break;case y:S=i.space;break;case d:case v:S=i.quote;break;case l:S=i.escape;break;case f:S=i.colon;break;default:S=i.unknown}g=r(_,S,!1);break}w+=_,++e}while(!o);return!g&&w.length&&(g=r(w,i.token,!1)),g||(g={done:!0}),{token:g,idx:e}}var i=t(132),s=\".\",u=\",\",a=\"[\",c=\"]\",p=\"{\",h=\"}\",f=\":\",l=\"\\\\\",d='\"',v=\"'\",y=\" \",b=\"\\\\'\\\"[]., \",m=\"\\\\{}'\\\"[]., :\",g=e.exports=function(t,e){this._string=t,this._idx=-1,this._extended=e,this.parseString=\"\"};g.prototype={next:function(){var t=this._nextToken?this._nextToken:o(this._string,this._idx,this._extended);return this._idx=t.idx,this._nextToken=!1,this.parseString+=t.token.token,t.token},peek:function(){var t=this._nextToken?this._nextToken:o(this._string,this._idx,this._extended);return this._nextToken=t,t.token}},g.toNumber=function(t){return isNaN(+t)?NaN:+t}},{132:132}],141:[function(t,e,n){var r=t(147),o=t(148);e.exports=function(t){var e=t.reduce(function(t,e){var n=e.length;return t[n]||(t[n]=[]),t[n].push(e),t},{});return Object.keys(e).forEach(function(t){e[t]=o(e[t])}),r(e)}},{147:147,148:148}],142:[function(t,e,n){var r=t(144);e.exports=function o(t,e,n){for(var i=t,s=!0;s&&n<e.length;++n){var u=e[n],a=typeof u;if(u&&\"object\"===a){var c={},p=r(u,c),h=n+1;do{var f=i[p];s=void 0!==f,s&&(s=o(f,e,h)),p=r(u,c)}while(s&&!c.done);break}i=i[u],s=void 0!==i}return s}},{144:144}],143:[function(t,e,n){e.exports={iterateKeySet:t(144),toTree:t(148),toTreeWithUnion:t(149),pathsComplementFromTree:t(146),pathsComplementFromLengthTree:t(145),hasIntersection:t(142),toPaths:t(147),collapse:t(141)}},{141:141,142:142,144:144,145:145,146:146,147:147,148:148,149:149}],144:[function(t,e,n){function r(t,e){var n=e.from=t.from||0,r=e.to=t.to||\"number\"==typeof t.length&&e.from+t.length-1||0;e.rangeOffset=e.from,e.loaded=!0,n>r&&(e.empty=!0)}function o(t,e){e.done=!1;var n=e.isObject=!(!t||\"object\"!=typeof t);e.isArray=n&&i(t),e.arrayOffset=0}var i=Array.isArray;e.exports=function(t,e){if(void 0===e.isArray&&o(t,e),e.isArray){var n;do{e.loaded&&e.rangeOffset>e.to&&(++e.arrayOffset,e.loaded=!1);var i=e.arrayOffset,s=t.length;if(i>=s){e.done=!0;break}var u=t[e.arrayOffset],a=typeof u;if(\"object\"===a){if(e.loaded||r(u,e),e.empty)continue;n=e.rangeOffset++}else++e.arrayOffset,n=u}while(void 0===n);return n}return e.isObject?(e.loaded||r(t,e),e.rangeOffset>e.to?void(e.done=!0):e.rangeOffset++):(e.done=!0,t)}},{}],145:[function(t,e,n){var r=t(142);e.exports=function(t,e){for(var n=[],o=-1,i=0,s=t.length;s>i;++i){var u=t[i];r(e[u.length],u,0)||(n[++o]=u)}return n}},{142:142}],146:[function(t,e,n){var r=t(142);e.exports=function(t,e){for(var n=[],o=-1,i=0,s=t.length;s>i;++i)r(e,t[i],0)||(n[++o]=t[i]);return n}},{142:142}],147:[function(t,e,n){function r(t){return null!==t&&typeof t===f}function o(t,e,n){var r,i,s,u,h,f,l,d,v,y,b,m,g,w,x=c(String(e)),_=Object.create(null),S=[],E=-1,C=0,A=[],N=0;if(u=[],h=-1,n-1>e){for(f=a(t,u);++h<f;)r=u[h],i=o(t[r],e+1,n),s=i.code,_[s]?i=_[s]:(S[C++]=s,i=_[s]={keys:[],sets:i.sets}),x=c(x+r+s),p(r)&&i.keys.push(parseInt(r,10))||i.keys.push(r);for(;++E<C;)if(r=S[E],i=_[r],u=i.keys,f=u.length,f>0)for(l=i.sets,d=-1,v=l.length,g=u[0];++d<v;){for(y=l[d],b=-1,m=y.length,w=new Array(m+1),w[0]=f>1&&u||g;++b<m;)w[b+1]=y[b];A[N++]=w}}else for(f=a(t,u),f>1?A[N++]=[u]:A[N++]=u;++h<f;)x=c(x+u[h]);return{code:x,sets:A}}function i(t){for(var e=-1,n=t.length;++e<n;){var r=t[e];h(r)&&(t[e]=s(r))}return t}function s(t){for(var e=-1,n=t.length-1,r=n>0;++e<=n;){var o=t[e];if(!p(o)){r=!1;break}t[e]=parseInt(o,10)}if(r===!0){t.sort(u);var i=t[0],s=t[n];if(n>=s-i)return{from:i,to:s}}return t}function u(t,e){return t-e}function a(t,e,n){var r=0;for(var o in t)e[r++]=o;return r>1&&e.sort(n),r}function c(t){for(var e=5381,n=-1,r=t.length;++n<r;)e=(e<<5)+e+t.charCodeAt(n);return String(e)}function p(t){return!h(t)&&t-parseFloat(t)+1>=0}var h=Array.isArray,f=\"object\";e.exports=function(t){var e,n=[],s=0;for(var u in t)if(p(u)&&r(e=t[u]))for(var a=o(e,0,parseInt(u,10)).sets,c=-1,h=a.length;++c<h;)n[s++]=i(a[c]);return n}},{}],148:[function(t,e,n){function r(t,e,n){var i,s=e[n],u={},a=n+1;i=o(s,u);do{var c=t[i];c||(a===e.length?t[i]=null:c=t[i]={}),a<e.length&&r(c,e,a),u.done||(i=o(s,u))}while(!u.done)}var o=t(144);Array.isArray;e.exports=function(t){return t.reduce(function(t,e){return r(t,e,0),t},{})}},{144:144}],149:[function(t,e,n){},{}],150:[function(t,e,n){function r(){p=!1,u.length?c=u.concat(c):h=-1,c.length&&o()}function o(){if(!p){var t=setTimeout(r);p=!0;for(var e=c.length;e;){for(u=c,c=[];++h<e;)u&&u[h].run();h=-1,e=c.length}u=null,p=!1,clearTimeout(t)}}function i(t,e){this.fun=t,this.array=e}function s(){}var u,a=e.exports={},c=[],p=!1,h=-1;a.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];c.push(new i(t,e)),1!==c.length||p||setTimeout(o,0)},i.prototype.run=function(){this.fun.apply(null,this.array)},a.title=\"browser\",a.browser=!0,a.env={},a.argv=[],a.version=\"\",a.versions={},a.on=s,a.addListener=s,a.once=s,a.off=s,a.removeListener=s,a.removeAllListeners=s,a.emit=s,a.binding=function(t){throw new Error(\"process.binding is not supported\")},a.cwd=function(){return\"/\"},a.chdir=function(t){throw new Error(\"process.chdir is not supported\")},a.umask=function(){return 0}},{}],151:[function(t,e,n){\"use strict\";e.exports=t(156)},{156:156}],152:[function(t,e,n){\"use strict\";function r(){}function o(t){try{return t.then}catch(e){return y=e,b}}function i(t,e){try{return t(e)}catch(n){return y=n,b}}function s(t,e,n){try{t(e,n)}catch(r){return y=r,b}}function u(t){if(\"object\"!=typeof this)throw new TypeError(\"Promises must be constructed via new\");if(\"function\"!=typeof t)throw new TypeError(\"not a function\");this._37=0,this._12=null,this._59=[],t!==r&&d(t,this)}function a(t,e,n){return new t.constructor(function(o,i){var s=new u(r);s.then(o,i),c(t,new l(e,n,s))})}function c(t,e){for(;3===t._37;)t=t._12;return 0===t._37?void t._59.push(e):void v(function(){var n=1===t._37?e.onFulfilled:e.onRejected;if(null===n)return void(1===t._37?p(e.promise,t._12):h(e.promise,t._12));var r=i(n,t._12);r===b?h(e.promise,y):p(e.promise,r)})}function p(t,e){if(e===t)return h(t,new TypeError(\"A promise cannot be resolved with itself.\"));if(e&&(\"object\"==typeof e||\"function\"==typeof e)){var n=o(e);if(n===b)return h(t,y);if(n===t.then&&e instanceof u)return t._37=3,t._12=e,void f(t);if(\"function\"==typeof n)return void d(n.bind(e),t)}t._37=1,t._12=e,f(t)}function h(t,e){t._37=2,t._12=e,f(t)}function f(t){for(var e=0;e<t._59.length;e++)c(t,t._59[e]);t._59=null}function l(t,e,n){this.onFulfilled=\"function\"==typeof t?t:null,this.onRejected=\"function\"==typeof e?e:null,this.promise=n}function d(t,e){var n=!1,r=s(t,function(t){n||(n=!0,p(e,t))},function(t){n||(n=!0,h(e,t))});n||r!==b||(n=!0,h(e,y))}var v=t(124),y=null,b={};e.exports=u,u._99=r,u.prototype.then=function(t,e){if(this.constructor!==u)return a(this,t,e);var n=new u(r);return c(this,new l(t,e,n)),n}},{124:124}],153:[function(t,e,n){\"use strict\";var r=t(152);e.exports=r,r.prototype.done=function(t,e){var n=arguments.length?this.then.apply(this,arguments):this;n.then(null,function(t){setTimeout(function(){throw t},0)})}},{152:152}],154:[function(t,e,n){\"use strict\";function r(t){var e=new o(o._99);return e._37=1,e._12=t,e}var o=t(152);e.exports=o;var i=r(!0),s=r(!1),u=r(null),a=r(void 0),c=r(0),p=r(\"\");o.resolve=function(t){if(t instanceof o)return t;if(null===t)return u;if(void 0===t)return a;if(t===!0)return i;if(t===!1)return s;if(0===t)return c;if(\"\"===t)return p;if(\"object\"==typeof t||\"function\"==typeof t)try{var e=t.then;if(\"function\"==typeof e)return new o(e.bind(t))}catch(n){return new o(function(t,e){e(n)})}return r(t)},o.all=function(t){var e=Array.prototype.slice.call(t);return new o(function(t,n){function r(s,u){if(u&&(\"object\"==typeof u||\"function\"==typeof u)){if(u instanceof o&&u.then===o.prototype.then){for(;3===u._37;)u=u._12;return 1===u._37?r(s,u._12):(2===u._37&&n(u._12),void u.then(function(t){r(s,t)},n))}var a=u.then;if(\"function\"==typeof a){var c=new o(a.bind(u));return void c.then(function(t){r(s,t)},n)}}e[s]=u,0===--i&&t(e)}if(0===e.length)return t([]);for(var i=e.length,s=0;s<e.length;s++)r(s,e[s])})},o.reject=function(t){return new o(function(e,n){n(t)})},o.race=function(t){return new o(function(e,n){t.forEach(function(t){o.resolve(t).then(e,n)})})},o.prototype[\"catch\"]=function(t){return this.then(null,t)}},{152:152}],155:[function(t,e,n){\"use strict\";var r=t(152);e.exports=r,r.prototype[\"finally\"]=function(t){return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})}},{152:152}],156:[function(t,e,n){\"use strict\";e.exports=t(152),t(153),t(155),t(154),t(157)},{152:152,153:153,154:154,155:155,157:157}],157:[function(t,e,n){\"use strict\";var r=t(152),o=t(123);e.exports=r,r.denodeify=function(t,e){return e=e||1/0,function(){var n=this,o=Array.prototype.slice.call(arguments,0,e>0?e:0);return new r(function(e,r){o.push(function(t,n){t?r(t):e(n)});var i=t.apply(n,o);!i||\"object\"!=typeof i&&\"function\"!=typeof i||\"function\"!=typeof i.then||e(i)})}},r.nodeify=function(t){return function(){var e=Array.prototype.slice.call(arguments),n=\"function\"==typeof e[e.length-1]?e.pop():null,i=this;try{return t.apply(this,arguments).nodeify(n,i)}catch(s){if(null===n||\"undefined\"==typeof n)return new r(function(t,e){e(s)});o(function(){n.call(i,s)})}}},r.prototype.nodeify=function(t,e){return\"function\"!=typeof t?this:void this.then(function(n){o(function(){t.call(e,null,n)})},function(n){o(function(){t.call(e,n)})})}},{123:123,152:152}],158:[function(e,n,r){(function(o){(function(i){var s={\"boolean\":!1,\"function\":!0,object:!0,number:!1,string:!1,undefined:!1},u=s[typeof window]&&window||this,a=s[typeof r]&&r&&!r.nodeType&&r,c=s[typeof n]&&n&&!n.nodeType&&n,p=(c&&c.exports===a&&a,s[typeof o]&&o);!p||p.global!==p&&p.window!==p||(u=p),\"function\"==typeof t&&t.amd?t([\"rx\"],function(t,e){return i(u,e,t)}):\"object\"==typeof n&&n&&n.exports===a?n.exports=i(u,n.exports,e(159)):u.Rx=i(u,{},u.Rx)}).call(this,function(t,e,n,r){function o(){try{return l.apply(this,arguments)}catch(t){return M.e=t,M}}function i(t){if(!E(t))throw new TypeError(\"fn must be a function\");return l=t,o}function s(t,e,n){return new b(function(r){var o=!1,i=null,s=[];return t.subscribe(function(t){var u,a;try{a=e(t)}catch(c){return void r.onError(c)}if(u=0,o)try{u=n(a,i)}catch(p){return void r.onError(p)}else o=!0,i=a;u>0&&(i=a,s=[]),u>=0&&s.push(t)},function(t){r.onError(t)},function(){r.onNext(s),r.onCompleted()})},t)}function u(t){if(0===t.length)throw new D;return t[0]}function a(t,e,n,r){if(0>e)throw new R;return new b(function(o){var i=e;return t.subscribe(function(t){0===i--&&(o.onNext(t),o.onCompleted())},function(t){o.onError(t)},function(){n?(o.onNext(r),o.onCompleted()):o.onError(new R)})},t)}function c(t,e,n){return new b(function(r){var o=n,i=!1;return t.subscribe(function(t){i?r.onError(new Error(\"Sequence contains more than one element\")):(o=t,i=!0)},function(t){r.onError(t)},function(){i||e?(r.onNext(o),r.onCompleted()):r.onError(new D)})},t)}function p(t,e,n){return new b(function(r){return t.subscribe(function(t){r.onNext(t),r.onCompleted()},function(t){r.onError(t)},function(){e?(r.onNext(n),r.onCompleted()):r.onError(new D)})},t)}function h(t,e,n){return new b(function(r){var o=n,i=!1;return t.subscribe(function(t){o=t,i=!0},function(t){r.onError(t)},function(){i||e?(r.onNext(o),r.onCompleted()):r.onError(new D)})},t)}function f(t,e,n,o){var i=j(e,n,3);return new b(function(e){var n=0;return t.subscribe(function(r){var s;try{s=i(r,n,t)}catch(u){return void e.onError(u)}s?(e.onNext(o?n:r),e.onCompleted()):n++},function(t){e.onError(t)},function(){e.onNext(o?-1:r),e.onCompleted()})},t)}var l,d=n.Observable,v=d.prototype,y=n.CompositeDisposable,b=n.AnonymousObservable,m=n.Disposable.empty,g=(n.internals.isEqual,n.helpers),w=g.not,x=g.defaultComparer,_=g.identity,S=g.defaultSubComparer,E=g.isFunction,C=g.isPromise,A=g.isArrayLike,N=g.isIterable,k=n.internals.inherits,O=d.fromPromise,P=d.from,j=n.internals.bindCallback,D=n.EmptyError,q=n.ObservableBase,R=n.ArgumentOutOfRangeError,M={e:{}};v.aggregate=function(){var t,e,n=!1,r=this;return 2===arguments.length?(n=!0,e=arguments[0],t=arguments[1]):t=arguments[0],new b(function(o){var i,s,u;return r.subscribe(function(r){!u&&(u=!0);try{i?s=t(s,r):(s=n?t(e,r):r,i=!0)}catch(a){return o.onError(a)}},function(t){o.onError(t)},function(){u&&o.onNext(s),!u&&n&&o.onNext(e),!u&&!n&&o.onError(new D),o.onCompleted()})},r)};var T=function(t){function e(e,n,r,o){this.source=e,this.acc=n,this.hasSeed=r,this.seed=o,t.call(this)}function n(t,e){this.o=t,this.acc=e.acc,this.hasSeed=e.hasSeed,this.seed=e.seed,this.hasAccumulation=!1,this.result=null,this.hasValue=!1,this.isStopped=!1}return k(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t,this))},n.prototype.onNext=function(t){this.isStopped||(!this.hasValue&&(this.hasValue=!0),this.hasAccumulation?this.result=i(this.acc)(this.result,t):(this.result=this.hasSeed?i(this.acc)(this.seed,t):t,this.hasAccumulation=!0),this.result===M&&this.o.onError(this.result.e))},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.hasValue&&this.o.onNext(this.result),!this.hasValue&&this.hasSeed&&this.o.onNext(this.seed),!this.hasValue&&!this.hasSeed&&this.o.onError(new D),this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(q);return v.reduce=function(t){var e=!1;if(2===arguments.length){e=!0;var n=arguments[1]}return new T(this,t,e,n)},v.some=function(t,e){var n=this;return t?n.filter(t,e).some():new b(function(t){return n.subscribe(function(){t.onNext(!0),t.onCompleted()},function(e){t.onError(e)},function(){t.onNext(!1),t.onCompleted()})},n)},v.any=function(){return this.some.apply(this,arguments)},v.isEmpty=function(){return this.any().map(w)},v.every=function(t,e){return this.filter(function(e){return!t(e)},e).some().map(w)},v.all=function(){return this.every.apply(this,arguments)},v.includes=function(t,e){function n(t,e){return 0===t&&0===e||t===e||isNaN(t)&&isNaN(e)}var r=this;return new b(function(o){var i=0,s=+e||0;return Math.abs(s)===1/0&&(s=0),0>s?(o.onNext(!1),o.onCompleted(),m):r.subscribe(function(e){i++>=s&&n(e,t)&&(o.onNext(!0),o.onCompleted())},function(t){o.onError(t)},function(){o.onNext(!1),o.onCompleted()})},this)},v.contains=function(t,e){v.includes(t,e)},v.count=function(t,e){return t?this.filter(t,e).count():this.reduce(function(t){return t+1},0)},v.indexOf=function(t,e){var n=this;return new b(function(r){var o=0,i=+e||0;return Math.abs(i)===1/0&&(i=0),0>i?(r.onNext(-1),r.onCompleted(),m):n.subscribe(function(e){o>=i&&e===t&&(r.onNext(o),r.onCompleted()),o++},function(t){r.onError(t)},function(){r.onNext(-1),r.onCompleted()})},n)},v.sum=function(t,e){return t&&E(t)?this.map(t,e).sum():this.reduce(function(t,e){return t+e},0)},v.minBy=function(t,e){return e||(e=S),s(this,t,function(t,n){return-1*e(t,n)})},v.min=function(t){return this.minBy(_,t).map(function(t){return u(t)})},v.maxBy=function(t,e){return e||(e=S),s(this,t,e)},v.max=function(t){return this.maxBy(_,t).map(function(t){return u(t)})},v.average=function(t,e){return t&&E(t)?this.map(t,e).average():this.reduce(function(t,e){return{sum:t.sum+e,count:t.count+1}},{sum:0,count:0}).map(function(t){if(0===t.count)throw new D;return t.sum/t.count})},v.sequenceEqual=function(t,e){var n=this;return e||(e=x),new b(function(r){var o=!1,i=!1,s=[],u=[],a=n.subscribe(function(t){var n,o;if(u.length>0){o=u.shift();try{n=e(o,t)}catch(a){return void r.onError(a)}n||(r.onNext(!1),r.onCompleted())}else i?(r.onNext(!1),r.onCompleted()):s.push(t)},function(t){r.onError(t)},function(){o=!0,0===s.length&&(u.length>0?(r.onNext(!1),r.onCompleted()):i&&(r.onNext(!0),r.onCompleted()))});(A(t)||N(t))&&(t=P(t)),C(t)&&(t=O(t));var c=t.subscribe(function(t){var n;if(s.length>0){var i=s.shift();try{n=e(i,t)}catch(a){return void r.onError(a)}n||(r.onNext(!1),r.onCompleted())}else o?(r.onNext(!1),r.onCompleted()):u.push(t)},function(t){r.onError(t)},function(){i=!0,0===u.length&&(s.length>0?(r.onNext(!1),r.onCompleted()):o&&(r.onNext(!0),r.onCompleted()))});return new y(a,c)},n)},v.elementAt=function(t){return a(this,t,!1)},v.elementAtOrDefault=function(t,e){return a(this,t,!0,e)},v.single=function(t,e){return t&&E(t)?this.where(t,e).single():c(this,!1)},v.singleOrDefault=function(t,e,n){return t&&E(t)?this.filter(t,n).singleOrDefault(null,e):c(this,!0,e)},v.first=function(t,e){return t?this.where(t,e).first():p(this,!1)},v.firstOrDefault=function(t,e,n){return t?this.where(t).firstOrDefault(null,e):p(this,!0,e)},v.last=function(t,e){return t?this.where(t,e).last():h(this,!1)},v.lastOrDefault=function(t,e,n){return t?this.where(t,n).lastOrDefault(null,e):h(this,!0,e)},v.find=function(t,e){return f(this,t,e,!1)},v.findIndex=function(t,e){return f(this,t,e,!0)},v.toSet=function(){if(\"undefined\"==typeof t.Set)throw new TypeError;var e=this;return new b(function(n){var r=new t.Set;return e.subscribe(function(t){r.add(t)},function(t){n.onError(t)},function(){n.onNext(r),n.onCompleted()})},e)},v.toMap=function(e,n){if(\"undefined\"==typeof t.Map)throw new TypeError;var r=this;return new b(function(o){var i=new t.Map;return r.subscribe(function(t){var r;try{r=e(t)}catch(s){return void o.onError(s)}var u=t;if(n)try{u=n(t)}catch(s){return void o.onError(s)}i.set(r,u)},function(t){o.onError(t)},function(){o.onNext(i),o.onCompleted()})},r)},n})}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{159:159}],159:[function(e,n,r){(function(e,o){(function(i){function u(t){for(var e=[],n=0,r=t.length;r>n;n++)e.push(t[n]);return e}function a(t,e){if(ct&&e.stack&&\"object\"==typeof t&&null!==t&&t.stack&&-1===t.stack.indexOf(lt)){for(var n=[],r=e;r;r=r.source)r.stack&&n.unshift(r.stack);n.unshift(t.stack);var o=n.join(\"\\n\"+lt+\"\\n\");t.stack=c(o)}}function c(t){for(var e=t.split(\"\\n\"),n=[],r=0,o=e.length;o>r;r++){var i=e[r];p(i)||h(i)||!i||n.push(i)}return n.join(\"\\n\")}function p(t){var e=l(t);if(!e)return!1;var n=e[0],r=e[1];return n===ht&&r>=ft&&$n>=r}function h(t){return-1!==t.indexOf(\"(module.js:\")||-1!==t.indexOf(\"(node.js:\")}function f(){if(ct)try{throw new Error}catch(t){var e=t.stack.split(\"\\n\"),n=e[0].indexOf(\"@\")>0?e[1]:e[2],r=l(n);if(!r)return;return ht=r[0],r[1]}}function l(t){var e=/at .+ \\((.+):(\\d+):(?:\\d+)\\)$/.exec(t);if(e)return[e[1],Number(e[2])];var n=/at ([^ ]+):(\\d+):(?:\\d+)$/.exec(t);if(n)return[n[1],Number(n[2])];var r=/.*@(.+):(\\d+)$/.exec(t);return r?[r[1],Number(r[2])]:void 0}function d(t){var e=[];if(!Ht(t))return e;Ut.nonEnumArgs&&t.length&&Xt(t)&&(t=Yt.call(t));var n=Ut.enumPrototypes&&\"function\"==typeof t,r=Ut.enumErrorProps&&(t===Jt||t instanceof Error);for(var o in t)n&&\"prototype\"==o||r&&(\"message\"==o||\"name\"==o)||e.push(o);if(Ut.nonEnumShadows&&t!==It){var i=t.constructor,s=-1,u=kt;if(t===(i&&i.prototype))var a=t===Lt?$t:t===Jt?qt:Wt.call(t),c=Ft[a];for(;++s<u;)o=Nt[s],c&&c[o]||!zt.call(t,o)||e.push(o)}return e}function v(t,e,n){for(var r=-1,o=n(t),i=o.length;++r<i;){var s=o[r];if(e(t[s],s,t)===!1)break}return t}function y(t,e){return v(t,e,d)}function b(t){return\"function\"!=typeof t.toString&&\"string\"==typeof(t+\"\")}function m(t,e,n,r){if(t===e)return 0!==t||1/t==1/e;var o=typeof t,i=typeof e;if(t===t&&(null==t||null==e||\"function\"!=o&&\"object\"!=o&&\"function\"!=i&&\"object\"!=i))return!1;var s=Wt.call(t),u=Wt.call(e);if(s==Ot&&(s=Tt),u==Ot&&(u=Tt),s!=u)return!1;switch(s){case jt:case Dt:return+t==+e;case Mt:return t!=+t?e!=+e:0==t?1/t==1/e:t==+e;case Vt:case $t:return t==String(e)}var a=s==Pt;if(!a){if(s!=Tt||!Ut.nodeClass&&(b(t)||b(e)))return!1;var c=!Ut.argsObject&&Xt(t)?Object:t.constructor,p=!Ut.argsObject&&Xt(e)?Object:e.constructor;if(!(c==p||zt.call(t,\"constructor\")&&zt.call(e,\"constructor\")||at(c)&&c instanceof c&&at(p)&&p instanceof p||!(\"constructor\"in t&&\"constructor\"in e)))return!1}n||(n=[]),r||(r=[]);for(var h=n.length;h--;)if(n[h]==t)return r[h]==e;var f=0,l=!0;if(n.push(t),r.push(e),a){if(h=t.length,f=e.length,l=f==h)for(;f--;){var d=e[f];if(!(l=m(t[f],d,n,r)))break}}else y(e,function(e,o,i){return zt.call(i,o)?(f++,l=zt.call(t,o)&&m(t[o],e,n,r)):void 0}),l&&y(t,function(t,e,n){return zt.call(n,e)?l=--f>-1:void 0});return n.pop(),r.pop(),l}function g(t,e){for(var n=new Array(t),r=0;t>r;r++)n[r]=e();return n}function w(){try{return Qt.apply(this,arguments)}catch(t){return ne.e=t,ne}}function x(t){if(!at(t))throw new TypeError(\"fn must be a function\");return Qt=t,w}function _(t){throw t}function S(t,e){this.id=t,this.value=e}function E(t,e){this.scheduler=t,this.disposable=e,this.isDisposed=!1}function C(t,e){e.isDisposed||(e.isDisposed=!0,e.disposable.dispose())}function A(t){this._s=s}function N(t){this._s=s,this._l=s.length,this._i=0}function k(t){this._a=t}function O(t){this._a=t,this._l=q(t),this._i=0}function P(t){return\"number\"==typeof t&&X.isFinite(t)}function j(t){var e,n=t[xt];if(!n&&\"string\"==typeof t)return e=new A(t),e[xt]();if(!n&&t.length!==i)return e=new k(t),e[xt]();if(!n)throw new TypeError(\"Object is not iterable\");return t[xt]()}function D(t){var e=+t;return 0===e?e:isNaN(e)?e:0>e?-1:1}function q(t){var e=+t.length;return isNaN(e)?0:0!==e&&P(e)?(e=D(e)*Math.floor(Math.abs(e)),0>=e?0:e>en?en:e):e}function R(t,e){this.observer=t,this.parent=e}function M(t,e){return me(t)||(t=_e),new rn(e,t)}function T(t,e){this.observer=t,this.parent=e}function V(t,e){this.observer=t,this.parent=e}function $(t,e){return new qn(function(n){var r=new fe,o=new le;return o.setDisposable(r),r.setDisposable(t.subscribe(function(t){n.onNext(t)},function(t){try{var r=e(t)}catch(i){return n.onError(i)}ut(r)&&(r=Xe(r));var s=new fe;o.setDisposable(s),s.setDisposable(r.subscribe(n))},function(t){n.onCompleted(t)})),o},t)}function W(){return!1}function z(t,e){var n=this;return new qn(function(r){var o=0,i=t.length;return n.subscribe(function(n){if(i>o){var s=t[o++],u=x(e)(n,s);if(u===ne)return r.onError(u.e);r.onNext(u)}else r.onCompleted()},function(t){r.onError(t)},function(){r.onCompleted()})},n)}function W(){return!1}function G(){return[]}function W(){return!1}function J(){return[]}function I(t,e){this.observer=t,this.accumulator=e.accumulator,this.hasSeed=e.hasSeed,this.seed=e.seed,this.hasAccumulation=!1,this.accumulation=null,this.hasValue=!1,this.isStopped=!1}function L(t,e,n){var r=At(e,n,3);return t.map(function(e,n){var o=r(e,n,t);return ut(o)&&(o=Xe(o)),(Et(o)||St(o))&&(o=nn(o)),o}).concatAll()}function B(t,e,n){for(var r=0,o=t.length;o>r;r++)if(n(t[r],e))return r;return-1}function F(t){this.comparer=t,this.set=[]}function U(t,e,n){var r=At(e,n,3);return t.map(function(e,n){var o=r(e,n,t);return ut(o)&&(o=Xe(o)),(Et(o)||St(o))&&(o=nn(o)),o}).mergeAll()}var H={\"boolean\":!1,\"function\":!0,object:!0,number:!1,string:!1,undefined:!1},X=H[typeof window]&&window||this,Q=H[typeof r]&&r&&!r.nodeType&&r,K=H[typeof n]&&n&&!n.nodeType&&n,Y=K&&K.exports===Q&&Q,Z=H[typeof o]&&o;!Z||Z.global!==Z&&Z.window!==Z||(X=Z);var tt={internals:{},config:{Promise:X.Promise},helpers:{}},et=tt.helpers.noop=function(){},nt=(tt.helpers.notDefined=function(t){return\"undefined\"==typeof t},tt.helpers.identity=function(t){return t}),rt=(tt.helpers.pluck=function(t){return function(e){return e[t]}},tt.helpers.just=function(t){return function(){return t}},tt.helpers.defaultNow=Date.now),ot=tt.helpers.defaultComparer=function(t,e){return Kt(t,e)},it=tt.helpers.defaultSubComparer=function(t,e){return t>e?1:e>t?-1:0},st=(tt.helpers.defaultKeySerializer=function(t){return t.toString()},tt.helpers.defaultError=function(t){throw t}),ut=tt.helpers.isPromise=function(t){return!!t&&\"function\"!=typeof t.subscribe&&\"function\"==typeof t.then},at=(tt.helpers.asArray=function(){return Array.prototype.slice.call(arguments)},tt.helpers.not=function(t){return!t},tt.helpers.isFunction=function(){var t=function(t){return\"function\"==typeof t||!1};return t(/x/)&&(t=function(t){return\"function\"==typeof t&&\"[object Function]\"==Wt.call(t)}),t}());tt.config.longStackSupport=!1;var ct=!1;try{throw new Error}catch(pt){ct=!!pt.stack}var ht,ft=f(),lt=\"From previous event:\",dt=tt.EmptyError=function(){this.message=\"Sequence contains no elements.\",Error.call(this)};dt.prototype=Error.prototype;var vt=tt.ObjectDisposedError=function(){this.message=\"Object has been disposed\",Error.call(this)};vt.prototype=Error.prototype;var yt=tt.ArgumentOutOfRangeError=function(){this.message=\"Argument out of range\",Error.call(this)};yt.prototype=Error.prototype;var bt=tt.NotSupportedError=function(t){this.message=t||\"This operation is not supported\",Error.call(this)};bt.prototype=Error.prototype;var mt=tt.NotImplementedError=function(t){this.message=t||\"This operation is not implemented\",Error.call(this)};mt.prototype=Error.prototype;var gt=tt.helpers.notImplemented=function(){throw new mt},wt=tt.helpers.notSupported=function(){throw new bt},xt=\"function\"==typeof Symbol&&Symbol.iterator||\"_es6shim_iterator_\";X.Set&&\"function\"==typeof(new X.Set)[\"@@iterator\"]&&(xt=\"@@iterator\");var _t=tt.doneEnumerator={done:!0,value:i},St=tt.helpers.isIterable=function(t){return t[xt]!==i},Et=tt.helpers.isArrayLike=function(t){return t&&t.length!==i};tt.helpers.iterator=xt;var Ct,At=tt.internals.bindCallback=function(t,e,n){if(\"undefined\"==typeof e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}},Nt=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],kt=Nt.length,Ot=\"[object Arguments]\",Pt=\"[object Array]\",jt=\"[object Boolean]\",Dt=\"[object Date]\",qt=\"[object Error]\",Rt=\"[object Function]\",Mt=\"[object Number]\",Tt=\"[object Object]\",Vt=\"[object RegExp]\",$t=\"[object String]\",Wt=Object.prototype.toString,zt=Object.prototype.hasOwnProperty,Gt=Wt.call(arguments)==Ot,Jt=Error.prototype,It=Object.prototype,Lt=String.prototype,Bt=It.propertyIsEnumerable;try{Ct=!(Wt.call(document)==Tt&&!({toString:0}+\"\"))}catch(pt){Ct=!0}var Ft={};Ft[Pt]=Ft[Dt]=Ft[Mt]={constructor:!0,toLocaleString:!0,toString:!0,valueOf:!0},Ft[jt]=Ft[$t]={constructor:!0,toString:!0,valueOf:!0},Ft[qt]=Ft[Rt]=Ft[Vt]={constructor:!0,toString:!0},Ft[Tt]={constructor:!0};var Ut={};!function(){var t=function(){this.x=1},e=[];t.prototype={valueOf:1,y:1};for(var n in new t)e.push(n);for(n in arguments);Ut.enumErrorProps=Bt.call(Jt,\"message\")||Bt.call(Jt,\"name\"),Ut.enumPrototypes=Bt.call(t,\"prototype\"),Ut.nonEnumArgs=0!=n,Ut.nonEnumShadows=!/valueOf/.test(e)}(1);var Ht=tt.internals.isObject=function(t){var e=typeof t;return t&&(\"function\"==e||\"object\"==e)||!1},Xt=function(t){return t&&\"object\"==typeof t?Wt.call(t)==Ot:!1};Gt||(Xt=function(t){return t&&\"object\"==typeof t?zt.call(t,\"callee\"):!1});var Qt,Kt=tt.internals.isEqual=function(t,e){return m(t,e,[],[])},Yt=({}.hasOwnProperty,Array.prototype.slice),Zt=this.inherits=tt.internals.inherits=function(t,e){function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n},te=tt.internals.addProperties=function(t){for(var e=[],n=1,r=arguments.length;r>n;n++)e.push(arguments[n]);for(var o=0,i=e.length;i>o;o++){var s=e[o];for(var u in s)t[u]=s[u]}},ee=tt.internals.addRef=function(t,e){return new qn(function(n){return new ie(e.getDisposable(),t.subscribe(n))})},ne={e:{}};S.prototype.compareTo=function(t){var e=this.value.compareTo(t.value);return 0===e&&(e=this.id-t.id),e};var re=tt.internals.PriorityQueue=function(t){this.items=new Array(t),this.length=0},oe=re.prototype;oe.isHigherPriority=function(t,e){return this.items[t].compareTo(this.items[e])<0},oe.percolate=function(t){if(!(t>=this.length||0>t)){var e=t-1>>1;if(!(0>e||e===t)&&this.isHigherPriority(t,e)){var n=this.items[t];this.items[t]=this.items[e],this.items[e]=n,this.percolate(e)}}},oe.heapify=function(t){if(+t||(t=0),!(t>=this.length||0>t)){var e=2*t+1,n=2*t+2,r=t;if(e<this.length&&this.isHigherPriority(e,r)&&(r=e),n<this.length&&this.isHigherPriority(n,r)&&(r=n),r!==t){var o=this.items[t];this.items[t]=this.items[r],this.items[r]=o,this.heapify(r)}}},oe.peek=function(){return this.items[0].value},oe.removeAt=function(t){this.items[t]=this.items[--this.length],this.items[this.length]=i,this.heapify()},oe.dequeue=function(){var t=this.peek();return this.removeAt(0),t},oe.enqueue=function(t){var e=this.length++;this.items[e]=new S(re.count++,t),this.percolate(e)},oe.remove=function(t){for(var e=0;e<this.length;e++)if(this.items[e].value===t)return this.removeAt(e),!0;return!1},re.count=0;var ie=tt.CompositeDisposable=function(){var t,e,n=[];if(Array.isArray(arguments[0]))n=arguments[0],e=n.length;else for(e=arguments.length,n=new Array(e),t=0;e>t;t++)n[t]=arguments[t];for(t=0;e>t;t++)if(!pe(n[t]))throw new TypeError(\"Not a disposable\");this.disposables=n,this.isDisposed=!1,this.length=n.length},se=ie.prototype;se.add=function(t){this.isDisposed?t.dispose():(this.disposables.push(t),this.length++)},se.remove=function(t){var e=!1;if(!this.isDisposed){var n=this.disposables.indexOf(t);-1!==n&&(e=!0,this.disposables.splice(n,1),this.length--,t.dispose())}return e},se.dispose=function(){\nif(!this.isDisposed){this.isDisposed=!0;for(var t=this.disposables.length,e=new Array(t),n=0;t>n;n++)e[n]=this.disposables[n];for(this.disposables=[],this.length=0,n=0;t>n;n++)e[n].dispose()}};var ue=tt.Disposable=function(t){this.isDisposed=!1,this.action=t||et};ue.prototype.dispose=function(){this.isDisposed||(this.action(),this.isDisposed=!0)};var ae=ue.create=function(t){return new ue(t)},ce=ue.empty={dispose:et},pe=ue.isDisposable=function(t){return t&&at(t.dispose)},he=ue.checkDisposed=function(t){if(t.isDisposed)throw new vt},fe=tt.SingleAssignmentDisposable=function(){this.isDisposed=!1,this.current=null};fe.prototype.getDisposable=function(){return this.current},fe.prototype.setDisposable=function(t){if(this.current)throw new Error(\"Disposable has already been assigned\");var e=this.isDisposed;!e&&(this.current=t),e&&t&&t.dispose()},fe.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var t=this.current;this.current=null}t&&t.dispose()};var le=tt.SerialDisposable=function(){this.isDisposed=!1,this.current=null};le.prototype.getDisposable=function(){return this.current},le.prototype.setDisposable=function(t){var e=this.isDisposed;if(!e){var n=this.current;this.current=t}n&&n.dispose(),e&&t&&t.dispose()},le.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var t=this.current;this.current=null}t&&t.dispose()};var de=tt.RefCountDisposable=function(){function t(t){this.disposable=t,this.disposable.count++,this.isInnerDisposed=!1}function e(t){this.underlyingDisposable=t,this.isDisposed=!1,this.isPrimaryDisposed=!1,this.count=0}return t.prototype.dispose=function(){this.disposable.isDisposed||this.isInnerDisposed||(this.isInnerDisposed=!0,this.disposable.count--,0===this.disposable.count&&this.disposable.isPrimaryDisposed&&(this.disposable.isDisposed=!0,this.disposable.underlyingDisposable.dispose()))},e.prototype.dispose=function(){this.isDisposed||this.isPrimaryDisposed||(this.isPrimaryDisposed=!0,0===this.count&&(this.isDisposed=!0,this.underlyingDisposable.dispose()))},e.prototype.getDisposable=function(){return this.isDisposed?ce:new t(this)},e}();E.prototype.dispose=function(){this.scheduler.scheduleWithState(this,C)};var ve=tt.internals.ScheduledItem=function(t,e,n,r,o){this.scheduler=t,this.state=e,this.action=n,this.dueTime=r,this.comparer=o||it,this.disposable=new fe};ve.prototype.invoke=function(){this.disposable.setDisposable(this.invokeCore())},ve.prototype.compareTo=function(t){return this.comparer(this.dueTime,t.dueTime)},ve.prototype.isCancelled=function(){return this.disposable.isDisposed},ve.prototype.invokeCore=function(){return this.action(this.scheduler,this.state)};var ye=tt.Scheduler=function(){function t(t,e,n,r){this.now=t,this._schedule=e,this._scheduleRelative=n,this._scheduleAbsolute=r}function e(t,e){return e(),ce}t.isScheduler=function(e){return e instanceof t};var n=t.prototype;return n.schedule=function(t){return this._schedule(t,e)},n.scheduleWithState=function(t,e){return this._schedule(t,e)},n.scheduleWithRelative=function(t,n){return this._scheduleRelative(n,t,e)},n.scheduleWithRelativeAndState=function(t,e,n){return this._scheduleRelative(t,e,n)},n.scheduleWithAbsolute=function(t,n){return this._scheduleAbsolute(n,t,e)},n.scheduleWithAbsoluteAndState=function(t,e,n){return this._scheduleAbsolute(t,e,n)},t.now=rt,t.normalize=function(t){return 0>t&&(t=0),t},t}(),be=ye.normalize,me=ye.isScheduler;!function(t){function e(t,e){function n(e){o(e,function(e){var r=!1,o=!1,s=t.scheduleWithState(e,function(t,e){return r?i.remove(s):o=!0,n(e),ce});o||(i.add(s),r=!0)})}var r=e[0],o=e[1],i=new ie;return n(r),i}function n(t,e,n){function r(e){i(e,function(e,o){var i=!1,u=!1,a=t[n](e,o,function(t,e){return i?s.remove(a):u=!0,r(e),ce});u||(s.add(a),i=!0)})}var o=e[0],i=e[1],s=new ie;return r(o),s}function r(t,e){t(function(n){e(t,n)})}t.scheduleRecursive=function(t){return this.scheduleRecursiveWithState(t,r)},t.scheduleRecursiveWithState=function(t,n){return this.scheduleWithState([t,n],e)},t.scheduleRecursiveWithRelative=function(t,e){return this.scheduleRecursiveWithRelativeAndState(e,t,r)},t.scheduleRecursiveWithRelativeAndState=function(t,e,r){return this._scheduleRelative([t,r],e,function(t,e){return n(t,e,\"scheduleWithRelativeAndState\")})},t.scheduleRecursiveWithAbsolute=function(t,e){return this.scheduleRecursiveWithAbsoluteAndState(e,t,r)},t.scheduleRecursiveWithAbsoluteAndState=function(t,e,r){return this._scheduleAbsolute([t,r],e,function(t,e){return n(t,e,\"scheduleWithAbsoluteAndState\")})}}(ye.prototype),function(t){ye.prototype.schedulePeriodic=function(t,e){return this.schedulePeriodicWithState(null,t,e)},ye.prototype.schedulePeriodicWithState=function(t,e,n){if(\"undefined\"==typeof X.setInterval)throw new bt;e=be(e);var r=t,o=X.setInterval(function(){r=n(r)},e);return ae(function(){X.clearInterval(o)})}}(ye.prototype),function(t){t.catchError=t[\"catch\"]=function(t){return new Ae(this,t)}}(ye.prototype);var ge,we,xe=(tt.internals.SchedulePeriodicRecursive=function(){function t(t,e){e(0,this._period);try{this._state=this._action(this._state)}catch(n){throw this._cancel.dispose(),n}}function e(t,e,n,r){this._scheduler=t,this._state=e,this._period=n,this._action=r}return e.prototype.start=function(){var e=new fe;return this._cancel=e,e.setDisposable(this._scheduler.scheduleRecursiveWithRelativeAndState(0,this._period,t.bind(this))),e},e}(),ye.immediate=function(){function t(t,e){return e(this,t)}return new ye(rt,t,wt,wt)}()),_e=ye.currentThread=function(){function t(){for(;n.length>0;){var t=n.dequeue();!t.isCancelled()&&t.invoke()}}function e(e,r){var o=new ve(this,e,r,this.now());if(n)n.enqueue(o);else{n=new re(4),n.enqueue(o);var i=x(t)();if(n=null,i===ne)return _(i.e)}return o.disposable}var n,r=new ye(rt,e,wt,wt);return r.scheduleRequired=function(){return!n},r}(),Se=function(){var t,e=et;if(X.setTimeout)t=X.setTimeout,e=X.clearTimeout;else{if(!X.WScript)throw new bt;t=function(t,e){X.WScript.Sleep(e),t()}}return{setTimeout:t,clearTimeout:e}}(),Ee=Se.setTimeout,Ce=Se.clearTimeout;!function(){function t(e){if(s)Ee(function(){t(e)},0);else{var n=i[e];if(n){s=!0;var r=x(n)();if(we(e),s=!1,r===ne)return _(r.e)}}}function n(){if(!X.postMessage||X.importScripts)return!1;var t=!1,e=X.onmessage;return X.onmessage=function(){t=!0},X.postMessage(\"\",\"*\"),X.onmessage=e,t}function r(e){\"string\"==typeof e.data&&e.data.substring(0,c.length)===c&&t(e.data.substring(c.length))}var o=1,i={},s=!1;we=function(t){delete i[t]};var u=RegExp(\"^\"+String(Wt).replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\").replace(/toString| for [^\\]]+/g,\".*?\")+\"$\"),a=\"function\"==typeof(a=Z&&Y&&Z.setImmediate)&&!u.test(a)&&a;if(at(a))ge=function(e){var n=o++;return i[n]=e,a(function(){t(n)}),n};else if(\"undefined\"!=typeof e&&\"[object process]\"==={}.toString.call(e))ge=function(n){var r=o++;return i[r]=n,e.nextTick(function(){t(r)}),r};else if(n()){var c=\"ms.rx.schedule\"+Math.random();X.addEventListener?X.addEventListener(\"message\",r,!1):X.attachEvent?X.attachEvent(\"onmessage\",r):X.onmessage=r,ge=function(t){var e=o++;return i[e]=t,X.postMessage(c+currentId,\"*\"),e}}else if(X.MessageChannel){var p=new X.MessageChannel;p.port1.onmessage=function(e){t(e.data)},ge=function(t){var e=o++;return i[e]=t,p.port2.postMessage(e),e}}else ge=\"document\"in X&&\"onreadystatechange\"in X.document.createElement(\"script\")?function(e){var n=X.document.createElement(\"script\"),r=o++;return i[r]=e,n.onreadystatechange=function(){t(r),n.onreadystatechange=null,n.parentNode.removeChild(n),n=null},X.document.documentElement.appendChild(n),r}:function(e){var n=o++;return i[n]=e,Ee(function(){t(n)},0),n}}();var Ae=(ye.timeout=ye[\"default\"]=function(){function t(t,e){var n=this,r=new fe,o=ge(function(){!r.isDisposed&&r.setDisposable(e(n,t))});return new ie(r,ae(function(){we(o)}))}function e(t,e,n){var r=this,o=ye.normalize(e),i=new fe;if(0===o)return r.scheduleWithState(t,n);var s=Ee(function(){!i.isDisposed&&i.setDisposable(n(r,t))},o);return new ie(i,ae(function(){Ce(s)}))}function n(t,e,n){return this.scheduleWithRelativeAndState(t,e-this.now(),n)}return new ye(rt,t,e,n)}(),function(t){function e(t,e){return this._scheduler.scheduleWithState(t,this._wrap(e))}function n(t,e,n){return this._scheduler.scheduleWithRelativeAndState(t,e,this._wrap(n))}function r(t,e,n){return this._scheduler.scheduleWithAbsoluteAndState(t,e,this._wrap(n))}function o(o,i){this._scheduler=o,this._handler=i,this._recursiveOriginal=null,this._recursiveWrapper=null,t.call(this,this._scheduler.now.bind(this._scheduler),e,n,r)}return Zt(o,t),o.prototype._clone=function(t){return new o(t,this._handler)},o.prototype._wrap=function(t){var e=this;return function(n,r){try{return t(e._getRecursiveWrapper(n),r)}catch(o){if(!e._handler(o))throw o;return ce}}},o.prototype._getRecursiveWrapper=function(t){if(this._recursiveOriginal!==t){this._recursiveOriginal=t;var e=this._clone(t);e._recursiveOriginal=t,e._recursiveWrapper=e,this._recursiveWrapper=e}return this._recursiveWrapper},o.prototype.schedulePeriodicWithState=function(t,e,n){var r=this,o=!1,i=new fe;return i.setDisposable(this._scheduler.schedulePeriodicWithState(t,e,function(t){if(o)return null;try{return n(t)}catch(e){if(o=!0,!r._handler(e))throw e;return i.dispose(),null}})),i},o}(ye)),Ne=tt.Notification=function(){function t(t,e,n,r,o,i){this.kind=t,this.value=e,this.exception=n,this._accept=r,this._acceptObservable=o,this.toString=i}return t.prototype.accept=function(t,e,n){return t&&\"object\"==typeof t?this._acceptObservable(t):this._accept(t,e,n)},t.prototype.toObservable=function(t){var e=this;return me(t)||(t=xe),new qn(function(n){return t.scheduleWithState(e,function(t,e){e._acceptObservable(n),\"N\"===e.kind&&n.onCompleted()})})},t}(),ke=Ne.createOnNext=function(){function t(t){return t(this.value)}function e(t){return t.onNext(this.value)}function n(){return\"OnNext(\"+this.value+\")\"}return function(r){return new Ne(\"N\",r,null,t,e,n)}}(),Oe=Ne.createOnError=function(){function t(t,e){return e(this.exception)}function e(t){return t.onError(this.exception)}function n(){return\"OnError(\"+this.exception+\")\"}return function(r){return new Ne(\"E\",null,r,t,e,n)}}(),Pe=Ne.createOnCompleted=function(){function t(t,e,n){return n()}function e(t){return t.onCompleted()}function n(){return\"OnCompleted()\"}return function(){return new Ne(\"C\",null,null,t,e,n)}}(),je=tt.Observer=function(){};je.prototype.toNotifier=function(){var t=this;return function(e){return e.accept(t)}},je.prototype.asObserver=function(){return new Me(this.onNext.bind(this),this.onError.bind(this),this.onCompleted.bind(this))},je.prototype.checked=function(){return new Te(this)};var De=je.create=function(t,e,n){return t||(t=et),e||(e=st),n||(n=et),new Me(t,e,n)};je.fromNotifier=function(t,e){return new Me(function(n){return t.call(e,ke(n))},function(n){return t.call(e,Oe(n))},function(){return t.call(e,Pe())})},je.prototype.notifyOn=function(t){return new $e(t,this)},je.prototype.makeSafe=function(t){return new AnonymousSafeObserver(this._onNext,this._onError,this._onCompleted,t)};var qe,Re=tt.internals.AbstractObserver=function(t){function e(){this.isStopped=!1,t.call(this)}return Zt(e,t),e.prototype.next=gt,e.prototype.error=gt,e.prototype.completed=gt,e.prototype.onNext=function(t){this.isStopped||this.next(t)},e.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.error(t))},e.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.completed())},e.prototype.dispose=function(){this.isStopped=!0},e.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.error(t),!0)},e}(je),Me=tt.AnonymousObserver=function(t){function e(e,n,r){t.call(this),this._onNext=e,this._onError=n,this._onCompleted=r}return Zt(e,t),e.prototype.next=function(t){this._onNext(t)},e.prototype.error=function(t){this._onError(t)},e.prototype.completed=function(){this._onCompleted()},e}(Re),Te=function(t){function e(e){t.call(this),this._observer=e,this._state=0}Zt(e,t);var n=e.prototype;return n.onNext=function(t){this.checkAccess();var e=x(this._observer.onNext).call(this._observer,t);this._state=0,e===ne&&_(e.e)},n.onError=function(t){this.checkAccess();var e=x(this._observer.onError).call(this._observer,t);this._state=2,e===ne&&_(e.e)},n.onCompleted=function(){this.checkAccess();var t=x(this._observer.onCompleted).call(this._observer);this._state=2,t===ne&&_(t.e)},n.checkAccess=function(){if(1===this._state)throw new Error(\"Re-entrancy detected\");if(2===this._state)throw new Error(\"Observer completed\");0===this._state&&(this._state=1)},e}(je),Ve=tt.internals.ScheduledObserver=function(t){function e(e,n){t.call(this),this.scheduler=e,this.observer=n,this.isAcquired=!1,this.hasFaulted=!1,this.queue=[],this.disposable=new le}return Zt(e,t),e.prototype.next=function(t){var e=this;this.queue.push(function(){e.observer.onNext(t)})},e.prototype.error=function(t){var e=this;this.queue.push(function(){e.observer.onError(t)})},e.prototype.completed=function(){var t=this;this.queue.push(function(){t.observer.onCompleted()})},e.prototype.ensureActive=function(){var t=!1,e=this;!this.hasFaulted&&this.queue.length>0&&(t=!this.isAcquired,this.isAcquired=!0),t&&this.disposable.setDisposable(this.scheduler.scheduleRecursive(function(t){var n;if(!(e.queue.length>0))return void(e.isAcquired=!1);n=e.queue.shift();try{n()}catch(r){throw e.queue=[],e.hasFaulted=!0,r}t()}))},e.prototype.dispose=function(){t.prototype.dispose.call(this),this.disposable.dispose()},e}(Re),$e=function(t){function e(e,n,r){t.call(this,e,n),this._cancel=r}return Zt(e,t),e.prototype.next=function(e){t.prototype.next.call(this,e),this.ensureActive()},e.prototype.error=function(e){t.prototype.error.call(this,e),this.ensureActive()},e.prototype.completed=function(){t.prototype.completed.call(this),this.ensureActive()},e.prototype.dispose=function(){t.prototype.dispose.call(this),this._cancel&&this._cancel.dispose(),this._cancel=null},e}(Ve),We=tt.Observable=function(){function t(t){if(tt.config.longStackSupport&&ct){try{throw new Error}catch(e){this.stack=e.stack.substring(e.stack.indexOf(\"\\n\")+1)}var n=this;this._subscribe=function(e){var r=e.onError.bind(e);return e.onError=function(t){a(t,n),r(t)},t.call(n,e)}}else this._subscribe=t}return qe=t.prototype,qe.subscribe=qe.forEach=function(t,e,n){return this._subscribe(\"object\"==typeof t?t:De(t,e,n))},qe.subscribeOnNext=function(t,e){return this._subscribe(De(\"undefined\"!=typeof e?function(n){t.call(e,n)}:t))},qe.subscribeOnError=function(t,e){return this._subscribe(De(null,\"undefined\"!=typeof e?function(n){t.call(e,n)}:t))},qe.subscribeOnCompleted=function(t,e){return this._subscribe(De(null,null,\"undefined\"!=typeof e?function(){t.call(e)}:t))},t}(),ze=tt.ObservableBase=function(t){function e(t){return t&&at(t.dispose)?t:at(t)?ae(t):ce}function n(t,n){var r=n[0],o=n[1],i=x(o.subscribeCore).call(o,r);return i!==ne||r.fail(ne.e)?void r.setDisposable(e(i)):_(ne.e)}function r(t){var e=new Rn(t),r=[e,this];return _e.scheduleRequired()?_e.scheduleWithState(r,n):n(null,r),e}function o(){t.call(this,r)}return Zt(o,t),o.prototype.subscribeCore=gt,o}(We),Ge=tt.internals.Enumerable=function(){},Je=function(t){function e(e){this.sources=e,t.call(this)}function n(t,e,n){this.o=t,this.s=e,this.e=n,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){var e,r=new le,o=xe.scheduleRecursiveWithState(this.sources[xt](),function(o,i){if(!e){var s=x(o.next).call(o);if(s===ne)return t.onError(s.e);if(s.done)return t.onCompleted();var u=s.value;ut(u)&&(u=Xe(u));var a=new fe;r.setDisposable(a),a.setDisposable(u.subscribe(new n(t,i,o)))}});return new ie(r,o,ae(function(){e=!0}))},n.prototype.onNext=function(t){this.isStopped||this.o.onNext(t)},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.s(this.e))},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);Ge.prototype.concat=function(){return new Je(this)};var Ie=function(t){function e(e){this.sources=e,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e,n=this.sources[xt](),r=new le,o=xe.scheduleRecursiveWithState(null,function(o,i){if(!e){var s=x(n.next).call(n);if(s===ne)return t.onError(s.e);if(s.done)return null!==o?t.onError(o):t.onCompleted();var u=s.value;ut(u)&&(u=Xe(u));var a=new fe;r.setDisposable(a),a.setDisposable(u.subscribe(function(e){t.onNext(e)},i,function(){t.onCompleted()}))}});return new ie(r,o,ae(function(){e=!0}))},e}(ze);Ge.prototype.catchError=function(){return new Ie(this)},Ge.prototype.catchErrorWhen=function(t){var e=this;return new qn(function(n){var r,o,i=new Tn,s=new Tn,u=t(i),a=u.subscribe(s),c=e[xt](),p=new le,h=xe.scheduleRecursive(function(t){if(!r){var e=x(c.next).call(c);if(e===ne)return n.onError(e.e);if(e.done)return void(o?n.onError(o):n.onCompleted());var u=e.value;ut(u)&&(u=Xe(u));var a=new fe,h=new fe;p.setDisposable(new ie(h,a)),a.setDisposable(u.subscribe(function(t){n.onNext(t)},function(e){h.setDisposable(s.subscribe(t,function(t){n.onError(t)},function(){n.onCompleted()})),i.onNext(e)},function(){n.onCompleted()}))}});return new ie(a,p,h,ae(function(){r=!0}))})};var Le=function(t){function e(t,e){this.v=t,this.c=null==e?-1:e}function n(t){this.v=t.v,this.l=t.c}return Zt(e,t),e.prototype[xt]=function(){return new n(this)},n.prototype.next=function(){return 0===this.l?_t:(this.l>0&&this.l--,{done:!1,value:this.v})},e}(Ge),Be=Ge.repeat=function(t,e){return new Le(t,e)},Fe=function(t){function e(t,e,n){this.s=t,this.fn=e?At(e,n,3):null}function n(t){this.i=-1,this.s=t.s,this.l=this.s.length,this.fn=t.fn}return Zt(e,t),e.prototype[xt]=function(){return new n(this)},n.prototype.next=function(){return++this.i<this.l?{done:!1,value:this.fn?this.fn(this.s[this.i],this.i,this.s):this.s[this.i]}:_t},e}(Ge),Ue=Ge.of=function(t,e,n){return new Fe(t,e,n)};qe.observeOn=function(t){var e=this;return new qn(function(n){return e.subscribe(new $e(t,n))},e)},qe.subscribeOn=function(t){var e=this;return new qn(function(n){var r=new fe,o=new le;return o.setDisposable(r),r.setDisposable(t.schedule(function(){o.setDisposable(new E(t,e.subscribe(n)))})),o},e)};var He=function(t){function e(e){this.p=e,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.p.then(function(e){t.onNext(e),t.onCompleted()},function(e){t.onError(e)}),ce},e}(ze),Xe=We.fromPromise=function(t){return new He(t)};qe.toPromise=function(t){if(t||(t=tt.config.Promise),!t)throw new bt(\"Promise type not provided nor in Rx.config.Promise\");var e=this;return new t(function(t,n){var r,o=!1;e.subscribe(function(t){r=t,o=!0},n,function(){o&&t(r)})})};var Qe=function(t){function e(e){this.source=e,t.call(this)}function n(t){this.o=t,this.a=[],this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t))},n.prototype.onNext=function(t){this.isStopped||this.a.push(t)},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onNext(this.a),this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.toArray=function(){return new Qe(this)},We.create=We.createWithDisposable=function(t,e){return new qn(t,e)};var Ke=(We.defer=function(t){return new qn(function(e){var n;try{n=t()}catch(r){return dn(r).subscribe(e)}return ut(n)&&(n=Xe(n)),n.subscribe(e)})},function(t){function e(e){this.scheduler=e,t.call(this)}function n(t,e){this.observer=t,this.parent=e}function r(t,e){e.onCompleted()}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new n(t,this);return e.run()},n.prototype.run=function(){return this.parent.scheduler.scheduleWithState(this.observer,r)},e}(ze)),Ye=We.empty=function(t){return me(t)||(t=xe),new Ke(t)},Ze=function(t){function e(e,n,r){this.iterable=e,this.mapper=n,this.scheduler=r,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new tn(t,this);return e.run()},e}(ze),tn=function(){function t(t,e){this.observer=t,this.parent=e}return t.prototype.run=function(){function t(t,e){try{var i=n.next()}catch(s){return r.onError(s)}if(i.done)return r.onCompleted();var u=i.value;if(o)try{u=o(u,t)}catch(s){return r.onError(s)}r.onNext(u),e(t+1)}var e=Object(this.parent.iterable),n=j(e),r=this.observer,o=this.parent.mapper;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},t}(),en=Math.pow(2,53)-1;A.prototype[xt]=function(){return new N(this._s)},N.prototype[xt]=function(){return this},N.prototype.next=function(){return this._i<this._l?{done:!1,value:this._s.charAt(this._i++)}:_t},k.prototype[xt]=function(){return new O(this._a)},O.prototype[xt]=function(){return this},O.prototype.next=function(){return this._i<this._l?{done:!1,value:this._a[this._i++]}:_t};var nn=We.from=function(t,e,n,r){if(null==t)throw new Error(\"iterable cannot be null.\");if(e&&!at(e))throw new Error(\"mapFn when provided must be a function\");if(e)var o=At(e,n,2);return me(r)||(r=_e),new Ze(t,o,r)},rn=function(t){function e(e,n){this.args=e,this.scheduler=n,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new R(t,this);return e.run()},e}(ze);R.prototype.run=function(){function t(t,o){r>t?(e.onNext(n[t]),o(t+1)):e.onCompleted()}var e=this.observer,n=this.parent.args,r=n.length;return this.parent.scheduler.scheduleRecursiveWithState(0,t)};var on=We.fromArray=function(t,e){return me(e)||(e=_e),new rn(t,e)};We.generate=function(t,e,n,r,o){return me(o)||(o=_e),new qn(function(i){var s=!0;return o.scheduleRecursiveWithState(t,function(t,o){var u,a;try{s?s=!1:t=n(t),u=e(t),u&&(a=r(t))}catch(c){return i.onError(c)}u?(i.onNext(a),o(t)):i.onCompleted()})})};var sn=function(t){function e(){t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){return ce},e}(ze),un=We.never=function(){return new sn};We.of=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];return new rn(e,_e)},We.ofWithScheduler=function(t){for(var e=arguments.length,n=new Array(e-1),r=1;e>r;r++)n[r-1]=arguments[r];return new rn(n,t)};var an=function(t){function e(e,n){this.obj=e,this.keys=Object.keys(e),this.scheduler=n,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new T(t,this);return e.run()},e}(ze);T.prototype.run=function(){function t(t,i){if(o>t){var s=r[t];e.onNext([s,n[s]]),i(t+1)}else e.onCompleted()}var e=this.observer,n=this.parent.obj,r=this.parent.keys,o=r.length;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},We.pairs=function(t,e){return e||(e=_e),new an(t,e)};var cn=function(t){function e(e,n,r){this.start=e,this.rangeCount=n,this.scheduler=r,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new pn(t,this);return e.run()},e}(ze),pn=function(){function t(t,e){this.observer=t,this.parent=e}return t.prototype.run=function(){function t(t,o){n>t?(r.onNext(e+t),o(t+1)):r.onCompleted()}var e=this.parent.start,n=this.parent.rangeCount,r=this.observer;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},t}();We.range=function(t,e,n){return me(n)||(n=_e),new cn(t,e,n)};var hn=function(t){function e(e,n,r){this.value=e,this.repeatCount=null==n?-1:n,this.scheduler=r,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new V(t,this);return e.run()},e}(ze);V.prototype.run=function(){function t(t,r){return(-1===t||t>0)&&(e.onNext(n),t>0&&t--),0===t?e.onCompleted():void r(t)}var e=this.observer,n=this.parent.value;return this.parent.scheduler.scheduleRecursiveWithState(this.parent.repeatCount,t)},We.repeat=function(t,e,n){return me(n)||(n=_e),new hn(t,e,n)};var fn=function(t){function e(e,n){this.value=e,this.scheduler=n,t.call(this)}function n(t,e){this.observer=t,this.parent=e}function r(t,e){var n=e[0],r=e[1];r.onNext(n),r.onCompleted()}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new n(t,this);return e.run()},n.prototype.run=function(){return this.parent.scheduler.scheduleWithState([this.parent.value,this.observer],r)},e}(ze),ln=(We[\"return\"]=We.just=We.returnValue=function(t,e){return me(e)||(e=xe),new fn(t,e)},function(t){function e(e,n){this.error=e,this.scheduler=n,t.call(this)}function n(t,e){this.o=t,this.p=e}function r(t,e){var n=e[0],r=e[1];r.onError(n)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new n(t,this);return e.run()},n.prototype.run=function(){return this.p.scheduler.scheduleWithState([this.p.error,this.o],r)},e}(ze)),dn=We[\"throw\"]=We.throwError=We.throwException=function(t,e){return me(e)||(e=xe),new ln(t,e)};We.using=function(t,e){return new qn(function(n){var r,o,i=ce;try{r=t(),r&&(i=r),o=e(r)}catch(s){return new ie(dn(s).subscribe(n),i)}return new ie(o.subscribe(n),i)})},qe.amb=function(t){var e=this;return new qn(function(n){function r(){i||(i=s,c.dispose())}function o(){i||(i=u,a.dispose())}var i,s=\"L\",u=\"R\",a=new fe,c=new fe;return ut(t)&&(t=Xe(t)),a.setDisposable(e.subscribe(function(t){r(),i===s&&n.onNext(t)},function(t){r(),i===s&&n.onError(t)},function(){r(),i===s&&n.onCompleted()})),c.setDisposable(t.subscribe(function(t){o(),i===u&&n.onNext(t)},function(t){o(),i===u&&n.onError(t)},function(){o(),i===u&&n.onCompleted()})),new ie(a,c)})},We.amb=function(){function t(t,e){return t.amb(e)}var e=un(),n=[];if(Array.isArray(arguments[0]))n=arguments[0];else for(var r=0,o=arguments.length;o>r;r++)n.push(arguments[r]);for(var r=0,o=n.length;o>r;r++)e=t(e,n[r]);return e},qe[\"catch\"]=qe.catchError=qe.catchException=function(t){return\"function\"==typeof t?$(this,t):vn([this,t])};var vn=We.catchError=We[\"catch\"]=We.catchException=function(){var t=[];if(Array.isArray(arguments[0]))t=arguments[0];else for(var e=0,n=arguments.length;n>e;e++)t.push(arguments[e]);return Ue(t).catchError()};qe.combineLatest=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];return Array.isArray(e[0])?e[0].unshift(this):e.unshift(this),yn.apply(this,e)};var yn=We.combineLatest=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];var r=e.pop();return Array.isArray(e[0])&&(e=e[0]),new qn(function(t){function n(e){if(u[e]=!0,a||(a=u.every(nt))){try{var n=r.apply(null,p)}catch(o){return t.onError(o)}t.onNext(n)}else c.filter(function(t,n){return n!==e}).every(nt)&&t.onCompleted()}function o(e){c[e]=!0,c.every(nt)&&t.onCompleted()}for(var i=e.length,s=function(){return!1},u=g(i,s),a=!1,c=g(i,s),p=new Array(i),h=new Array(i),f=0;i>f;f++)!function(r){var i=e[r],s=new fe;ut(i)&&(i=Xe(i)),s.setDisposable(i.subscribe(function(t){p[r]=t,n(r)},function(e){t.onError(e)},function(){o(r)})),h[r]=s}(f);return new ie(h)},this)};qe.concat=function(){for(var t=[],e=0,n=arguments.length;n>e;e++)t.push(arguments[e]);return t.unshift(this),mn.apply(null,t)};var bn=function(t){function e(e){this.sources=e,t.call(this)}function n(t,e){this.sources=t,this.o=e}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new n(this.sources,t);return e.run()},n.prototype.run=function(){var t,e=new le,n=this.sources,r=n.length,o=this.o,i=xe.scheduleRecursiveWithState(0,function(i,s){if(!t){if(i===r)return o.onCompleted();var u=n[i];ut(u)&&(u=Xe(u));var a=new fe;e.setDisposable(a),a.setDisposable(u.subscribe(function(t){o.onNext(t)},function(t){o.onError(t)},function(){s(i+1)}))}});return new ie(e,i,ae(function(){t=!0}))},e}(ze),mn=We.concat=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{t=new Array(arguments.length);for(var e=0,n=arguments.length;n>e;e++)t[e]=arguments[e]}return new bn(t)};qe.concatAll=qe.concatObservable=function(){return this.merge(1)};var gn=function(t){function e(e,n){this.source=e,this.maxConcurrent=n,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new ie;return e.add(this.source.subscribe(new wn(t,this.maxConcurrent,e))),e},e}(ze),wn=function(){function t(t,e,n){this.o=t,this.max=e,this.g=n,this.done=!1,this.q=[],this.activeCount=0,this.isStopped=!1}function e(t,e){this.parent=t,this.sad=e,this.isStopped=!1}return t.prototype.handleSubscribe=function(t){var n=new fe;this.g.add(n),ut(t)&&(t=Xe(t)),n.setDisposable(t.subscribe(new e(this,n)))},t.prototype.onNext=function(t){this.isStopped||(this.activeCount<this.max?(this.activeCount++,this.handleSubscribe(t)):this.q.push(t))},t.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},t.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.done=!0,0===this.activeCount&&this.o.onCompleted())},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e.prototype.onNext=function(t){this.isStopped||this.parent.o.onNext(t)},e.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.parent.o.onError(t))},e.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=!0;var t=this.parent;t.g.remove(this.sad),t.q.length>0?t.handleSubscribe(t.q.shift()):(t.activeCount--,t.done&&0===t.activeCount&&t.o.onCompleted())}},e.prototype.dispose=function(){this.isStopped=!0},e.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(t),!0)},t}();qe.merge=function(t){return\"number\"!=typeof t?xn(this,t):new gn(this,t)};var xn=We.merge=function(){var t,e,n=[],r=arguments.length;if(arguments[0])if(me(arguments[0]))for(t=arguments[0],e=1;r>e;e++)n.push(arguments[e]);else for(t=xe,e=0;r>e;e++)n.push(arguments[e]);else for(t=xe,e=1;r>e;e++)n.push(arguments[e]);return Array.isArray(n[0])&&(n=n[0]),M(t,n).mergeAll()},_n=tt.CompositeError=function(t){this.name=\"NotImplementedError\",this.innerErrors=t,this.message=\"This contains multiple errors. Check the innerErrors\",Error.call(this)};_n.prototype=Error.prototype,We.mergeDelayError=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{var e=arguments.length;t=new Array(e);for(var n=0;e>n;n++)t[n]=arguments[n]}var r=M(null,t);return new qn(function(t){function e(){0===s.length?t.onCompleted():1===s.length?t.onError(s[0]):t.onError(new _n(s))}var n=new ie,o=new fe,i=!1,s=[];return n.add(o),o.setDisposable(r.subscribe(function(r){var o=new fe;n.add(o),ut(r)&&(r=Xe(r)),o.setDisposable(r.subscribe(function(e){t.onNext(e)},function(t){s.push(t),n.remove(o),i&&1===n.length&&e()},function(){n.remove(o),i&&1===n.length&&e()}))},function(t){s.push(t),i=!0,1===n.length&&e()},function(){i=!0,1===n.length&&e()})),n})};var Sn=function(t){function e(e){this.source=e,t.call(this)}function n(t,e){this.o=t,this.g=e,this.isStopped=!1,this.done=!1}function r(t,e,n){this.parent=t,this.g=e,this.sad=n,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new ie,r=new fe;return e.add(r),r.setDisposable(this.source.subscribe(new n(t,e))),e},n.prototype.onNext=function(t){if(!this.isStopped){var e=new fe;this.g.add(e),ut(t)&&(t=Xe(t)),e.setDisposable(t.subscribe(new r(this,this.g,e)))}},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.done=!0,1===this.g.length&&this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},r.prototype.onNext=function(t){this.isStopped||this.parent.o.onNext(t)},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.parent.o.onError(t))},r.prototype.onCompleted=function(){if(!this.isStopped){var t=this.parent;this.isStopped=!0,t.g.remove(this.sad),t.done&&1===t.g.length&&t.o.onCompleted()}},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(t),!0)},e}(ze);qe.mergeAll=qe.mergeObservable=function(){\nreturn new Sn(this)},qe.onErrorResumeNext=function(t){if(!t)throw new Error(\"Second observable is required\");return En([this,t])};var En=We.onErrorResumeNext=function(){var t=[];if(Array.isArray(arguments[0]))t=arguments[0];else for(var e=0,n=arguments.length;n>e;e++)t.push(arguments[e]);return new qn(function(e){var n=0,r=new le,o=xe.scheduleRecursive(function(o){var i,s;n<t.length?(i=t[n++],ut(i)&&(i=Xe(i)),s=new fe,r.setDisposable(s),s.setDisposable(i.subscribe(e.onNext.bind(e),o,o))):e.onCompleted()});return new ie(r,o)})};qe.skipUntil=function(t){var e=this;return new qn(function(n){var r=!1,o=new ie(e.subscribe(function(t){r&&n.onNext(t)},function(t){n.onError(t)},function(){r&&n.onCompleted()}));ut(t)&&(t=Xe(t));var i=new fe;return o.add(i),i.setDisposable(t.subscribe(function(){r=!0,i.dispose()},function(t){n.onError(t)},function(){i.dispose()})),o},e)};var Cn=function(t){function e(e){this.source=e,t.call(this)}function n(t,e){this.o=t,this.inner=e,this.stopped=!1,this.latest=0,this.hasLatest=!1,this.isStopped=!1}function r(t,e){this.parent=t,this.id=e,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){var e=new le,r=this.source.subscribe(new n(t,e));return new ie(r,e)},n.prototype.onNext=function(t){if(!this.isStopped){var e=new fe,n=++this.latest;this.hasLatest=!0,this.inner.setDisposable(e),ut(t)&&(t=Xe(t)),e.setDisposable(t.subscribe(new r(this,n)))}},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.stopped=!0,!this.hasLatest&&this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},r.prototype.onNext=function(t){this.isStopped||this.parent.latest===this.id&&this.parent.o.onNext(t)},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.parent.latest===this.id&&this.parent.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.parent.latest===this.id&&(this.parent.hasLatest=!1,this.parent.isStopped&&this.parent.o.onCompleted()))},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.parent.o.onError(t),!0)},e}(ze);qe[\"switch\"]=qe.switchLatest=function(){return new Cn(this)};var An=function(t){function e(e,n){this.source=e,this.other=ut(n)?Xe(n):n,t.call(this)}function n(t){this.o=t,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return new ie(this.source.subscribe(t),this.other.subscribe(new n(t)))},n.prototype.onNext=function(t){this.isStopped||this.o.onCompleted()},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){!this.isStopped&&(this.isStopped=!0)},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.takeUntil=function(t){return new An(this,t)},qe.withLatestFrom=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];var r=e.pop(),o=this;return Array.isArray(e[0])&&(e=e[0]),new qn(function(t){for(var n=e.length,i=g(n,W),s=!1,u=new Array(n),a=new Array(n+1),c=0;n>c;c++)!function(n){var r=e[n],o=new fe;ut(r)&&(r=Xe(r)),o.setDisposable(r.subscribe(function(t){u[n]=t,i[n]=!0,s=i.every(nt)},function(e){t.onError(e)},et)),a[n]=o}(c);var p=new fe;return p.setDisposable(o.subscribe(function(e){var n=[e].concat(u);if(s){var o=x(r).apply(null,n);return o===ne?t.onError(o.e):void t.onNext(o)}},function(e){t.onError(e)},function(){t.onCompleted()})),a[n]=p,new ie(a)},this)},qe.zip=function(){if(Array.isArray(arguments[0]))return z.apply(this,arguments);for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];var r=this,o=e.pop();return e.unshift(r),new qn(function(t){for(var n=e.length,i=g(n,G),s=g(n,W),u=new Array(n),a=0;n>a;a++)!function(n){var a=e[n],c=new fe;ut(a)&&(a=Xe(a)),c.setDisposable(a.subscribe(function(e){if(i[n].push(e),i.every(function(t){return t.length>0})){var u=i.map(function(t){return t.shift()}),a=x(o).apply(r,u);if(a===ne)return t.onError(a.e);t.onNext(a)}else s.filter(function(t,e){return e!==n}).every(nt)&&t.onCompleted()},function(e){t.onError(e)},function(){s[n]=!0,s.every(nt)&&t.onCompleted()})),u[n]=c}(a);return new ie(u)},r)},We.zip=function(){for(var t=arguments.length,e=new Array(t),n=0;t>n;n++)e[n]=arguments[n];var r=e.shift();return r.zip.apply(r,e)},We.zipArray=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{var e=arguments.length;t=new Array(e);for(var n=0;e>n;n++)t[n]=arguments[n]}return new qn(function(e){for(var n=t.length,r=g(n,J),o=g(n,W),i=new Array(n),s=0;n>s;s++)!function(n){i[n]=new fe,i[n].setDisposable(t[n].subscribe(function(t){if(r[n].push(t),r.every(function(t){return t.length>0})){var i=r.map(function(t){return t.shift()});e.onNext(i)}else if(o.filter(function(t,e){return e!==n}).every(nt))return e.onCompleted()},function(t){e.onError(t)},function(){o[n]=!0,o.every(nt)&&e.onCompleted()}))}(s);return new ie(i)})},qe.asObservable=function(){var t=this;return new qn(function(e){return t.subscribe(e)},t)},qe.bufferWithCount=function(t,e){return\"number\"!=typeof e&&(e=t),this.windowWithCount(t,e).selectMany(function(t){return t.toArray()}).where(function(t){return t.length>0})},qe.dematerialize=function(){var t=this;return new qn(function(e){return t.subscribe(function(t){return t.accept(e)},function(t){e.onError(t)},function(){e.onCompleted()})},this)},qe.distinctUntilChanged=function(t,e){var n=this;return e||(e=ot),new qn(function(r){var o,i=!1;return n.subscribe(function(n){var s=n;if(t&&(s=x(t)(n),s===ne))return r.onError(s.e);if(i){var u=x(e)(o,s);if(u===ne)return r.onError(u.e)}i&&u||(i=!0,o=s,r.onNext(n))},function(t){r.onError(t)},function(){r.onCompleted()})},this)};var Nn=function(t){function e(e,n,r,o){this.source=e,this.t=!n||at(n)?De(n||et,r||et,o||et):n,t.call(this)}function n(t,e){this.o=t,this.t=e,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t,this.t))},n.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.t.onNext).call(this.t,t);e===ne&&this.o.onError(e.e),this.o.onNext(t)}},n.prototype.onError=function(t){if(!this.isStopped){this.isStopped=!0;var e=x(this.t.onError).call(this.t,t);if(e===ne)return this.o.onError(e.e);this.o.onError(t)}},n.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=!0;var t=x(this.t.onCompleted).call(this.t);if(t===ne)return this.o.onError(t.e);this.o.onCompleted()}},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe[\"do\"]=qe.tap=qe.doAction=function(t,e,n){return new Nn(this,t,e,n)},qe.doOnNext=qe.tapOnNext=function(t,e){return this.tap(\"undefined\"!=typeof e?function(n){t.call(e,n)}:t)},qe.doOnError=qe.tapOnError=function(t,e){return this.tap(et,\"undefined\"!=typeof e?function(n){t.call(e,n)}:t)},qe.doOnCompleted=qe.tapOnCompleted=function(t,e){return this.tap(et,null,\"undefined\"!=typeof e?function(){t.call(e)}:t)},qe[\"finally\"]=qe.ensure=function(t){var e=this;return new qn(function(n){var r;try{r=e.subscribe(n)}catch(o){throw t(),o}return ae(function(){try{r.dispose()}catch(e){throw e}finally{t()}})},this)},qe.finallyAction=function(t){return this.ensure(t)};var kn=function(t){function e(e){this.source=e,t.call(this)}function n(t){this.o=t,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t))},n.prototype.onNext=et,n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.observer.onError(t),!0)},e}(ze);qe.ignoreElements=function(){return new kn(this)},qe.materialize=function(){var t=this;return new qn(function(e){return t.subscribe(function(t){e.onNext(ke(t))},function(t){e.onNext(Oe(t)),e.onCompleted()},function(){e.onNext(Pe()),e.onCompleted()})},t)},qe.repeat=function(t){return Be(this,t).concat()},qe.retry=function(t){return Be(this,t).catchError()},qe.retryWhen=function(t){return Be(this).catchErrorWhen(t)};var On=function(t){function e(e,n,r,o){this.source=e,this.accumulator=n,this.hasSeed=r,this.seed=o,t.call(this)}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new I(t,this))},e}(ze);I.prototype.onNext=function(t){if(!this.isStopped){!this.hasValue&&(this.hasValue=!0);try{this.hasAccumulation?this.accumulation=this.accumulator(this.accumulation,t):(this.accumulation=this.hasSeed?this.accumulator(this.seed,t):t,this.hasAccumulation=!0)}catch(e){return this.observer.onError(e)}this.observer.onNext(this.accumulation)}},I.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.observer.onError(t))},I.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,!this.hasValue&&this.hasSeed&&this.observer.onNext(this.seed),this.observer.onCompleted())},I.prototype.dispose=function(){this.isStopped=!0},I.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.observer.onError(t),!0)},qe.scan=function(){var t,e,n=!1;return 2===arguments.length?(n=!0,t=arguments[0],e=arguments[1]):e=arguments[0],new On(this,e,n,t)},qe.skipLast=function(t){if(0>t)throw new yt;var e=this;return new qn(function(n){var r=[];return e.subscribe(function(e){r.push(e),r.length>t&&n.onNext(r.shift())},function(t){n.onError(t)},function(){n.onCompleted()})},e)},qe.startWith=function(){var t,e=0;arguments.length&&me(arguments[0])?(t=arguments[0],e=1):t=xe;for(var n=[],r=e,o=arguments.length;o>r;r++)n.push(arguments[r]);return Ue([on(n,t),this]).concat()},qe.takeLast=function(t){if(0>t)throw new yt;var e=this;return new qn(function(n){var r=[];return e.subscribe(function(e){r.push(e),r.length>t&&r.shift()},function(t){n.onError(t)},function(){for(;r.length>0;)n.onNext(r.shift());n.onCompleted()})},e)},qe.takeLastBuffer=function(t){var e=this;return new qn(function(n){var r=[];return e.subscribe(function(e){r.push(e),r.length>t&&r.shift()},function(t){n.onError(t)},function(){n.onNext(r),n.onCompleted()})},e)},qe.windowWithCount=function(t,e){var n=this;if(+t||(t=0),Math.abs(t)===1/0&&(t=0),0>=t)throw new yt;if(null==e&&(e=t),+e||(e=0),Math.abs(e)===1/0&&(e=0),0>=e)throw new yt;return new qn(function(r){function o(){var t=new Tn;a.push(t),r.onNext(ee(t,s))}var i=new fe,s=new de(i),u=0,a=[];return o(),i.setDisposable(n.subscribe(function(n){for(var r=0,i=a.length;i>r;r++)a[r].onNext(n);var s=u-t+1;s>=0&&s%e===0&&a.shift().onCompleted(),++u%e===0&&o()},function(t){for(;a.length>0;)a.shift().onError(t);r.onError(t)},function(){for(;a.length>0;)a.shift().onCompleted();r.onCompleted()})),s},n)},qe.selectConcat=qe.concatMap=function(t,e,n){return at(t)&&at(e)?this.concatMap(function(n,r){var o=t(n,r);return ut(o)&&(o=Xe(o)),(Et(o)||St(o))&&(o=nn(o)),o.map(function(t,o){return e(n,t,r,o)})}):at(t)?L(this,t,n):L(this,function(){return t})},qe.concatMapObserver=qe.selectConcatObserver=function(t,e,n,r){var o=this,i=At(t,r,2),s=At(e,r,1),u=At(n,r,0);return new qn(function(t){var e=0;return o.subscribe(function(n){var r;try{r=i(n,e++)}catch(o){return void t.onError(o)}ut(r)&&(r=Xe(r)),t.onNext(r)},function(e){var n;try{n=s(e)}catch(r){return void t.onError(r)}ut(n)&&(n=Xe(n)),t.onNext(n),t.onCompleted()},function(){var e;try{e=u()}catch(n){return void t.onError(n)}ut(e)&&(e=Xe(e)),t.onNext(e),t.onCompleted()})},this).concatAll()},qe.defaultIfEmpty=function(t){var e=this;return t===i&&(t=null),new qn(function(n){var r=!1;return e.subscribe(function(t){r=!0,n.onNext(t)},function(t){n.onError(t)},function(){!r&&n.onNext(t),n.onCompleted()})},e)},F.prototype.push=function(t){var e=-1===B(this.set,t,this.comparer);return e&&this.set.push(t),e},qe.distinct=function(t,e){var n=this;return e||(e=ot),new qn(function(r){var o=new F(e);return n.subscribe(function(e){var n=e;if(t)try{n=t(e)}catch(i){return void r.onError(i)}o.push(n)&&r.onNext(e)},function(t){r.onError(t)},function(){r.onCompleted()})},this)};var Pn=function(t){function e(e,n,r){this.source=e,this.selector=At(n,r,3),t.call(this)}function n(t,e){return function(n,r,o){return t.call(this,e.selector(n,r,o),r,o)}}function r(t,e,n){this.o=t,this.selector=e,this.source=n,this.i=0,this.isStopped=!1}return Zt(e,t),e.prototype.internalMap=function(t,r){return new e(this.source,n(t,this),r)},e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t,this.selector,this))},r.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.selector)(t,this.i++,this.source);return e===ne?this.o.onError(e.e):void this.o.onNext(e)}},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.map=qe.select=function(t,e){var n=\"function\"==typeof t?t:function(){return t};return this instanceof Pn?this.internalMap(n,e):new Pn(this,n,e)},qe.pluck=function(){var t=arguments,e=arguments.length;if(0===e)throw new Error(\"List of properties cannot be empty.\");return this.map(function(n){for(var r=n,o=0;e>o;o++){var s=r[t[o]];if(\"undefined\"==typeof s)return i;r=s}return r})},qe.flatMapObserver=qe.selectManyObserver=function(t,e,n,r){var o=this;return new qn(function(i){var s=0;return o.subscribe(function(e){var n;try{n=t.call(r,e,s++)}catch(o){return void i.onError(o)}ut(n)&&(n=Xe(n)),i.onNext(n)},function(t){var n;try{n=e.call(r,t)}catch(o){return void i.onError(o)}ut(n)&&(n=Xe(n)),i.onNext(n),i.onCompleted()},function(){var t;try{t=n.call(r)}catch(e){return void i.onError(e)}ut(t)&&(t=Xe(t)),i.onNext(t),i.onCompleted()})},o).mergeAll()},qe.selectMany=qe.flatMap=function(t,e,n){return at(t)&&at(e)?this.flatMap(function(n,r){var o=t(n,r);return ut(o)&&(o=Xe(o)),(Et(o)||St(o))&&(o=nn(o)),o.map(function(t,o){return e(n,t,r,o)})},n):at(t)?U(this,t,n):U(this,function(){return t})},qe.selectSwitch=qe.flatMapLatest=qe.switchMap=function(t,e){return this.select(t,e).switchLatest()};var jn=function(t){function e(e,n){this.source=e,this.skipCount=n,t.call(this)}function n(t,e){this.c=e,this.r=e,this.o=t,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t,this.skipCount))},n.prototype.onNext=function(t){this.isStopped||(this.r<=0?this.o.onNext(t):this.r--)},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.skip=function(t){if(0>t)throw new yt;return new jn(this,t)},qe.skipWhile=function(t,e){var n=this,r=At(t,e,3);return new qn(function(t){var e=0,o=!1;return n.subscribe(function(i){if(!o)try{o=!r(i,e++,n)}catch(s){return void t.onError(s)}o&&t.onNext(i)},function(e){t.onError(e)},function(){t.onCompleted()})},n)},qe.take=function(t,e){if(0>t)throw new yt;if(0===t)return Ye(e);var n=this;return new qn(function(e){var r=t;return n.subscribe(function(t){r-- >0&&(e.onNext(t),0>=r&&e.onCompleted())},function(t){e.onError(t)},function(){e.onCompleted()})},n)},qe.takeWhile=function(t,e){var n=this,r=At(t,e,3);return new qn(function(t){var e=0,o=!0;return n.subscribe(function(i){if(o){try{o=r(i,e++,n)}catch(s){return void t.onError(s)}o?t.onNext(i):t.onCompleted()}},function(e){t.onError(e)},function(){t.onCompleted()})},n)};var Dn=function(t){function e(e,n,r){this.source=e,this.predicate=At(n,r,3),t.call(this)}function n(t,e){return function(n,r,o){return e.predicate(n,r,o)&&t.call(this,n,r,o)}}function r(t,e,n){this.o=t,this.predicate=e,this.source=n,this.i=0,this.isStopped=!1}return Zt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t,this.predicate,this))},e.prototype.internalFilter=function(t,r){return new e(this.source,n(t,this),r)},r.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.predicate)(t,this.i++,this.source);return e===ne?this.o.onError(e.e):void(e&&this.o.onNext(t))}},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return this.isStopped?!1:(this.isStopped=!0,this.o.onError(t),!0)},e}(ze);qe.filter=qe.where=function(t,e){return this instanceof Dn?this.internalFilter(t,e):new Dn(this,t,e)},qe.transduce=function(t){function e(t){return{\"@@transducer/init\":function(){return t},\"@@transducer/step\":function(t,e){return t.onNext(e)},\"@@transducer/result\":function(t){return t.onCompleted()}}}var n=this;return new qn(function(r){var o=t(e(r));return n.subscribe(function(t){try{o[\"@@transducer/step\"](r,t)}catch(e){r.onError(e)}},function(t){r.onError(t)},function(){o[\"@@transducer/result\"](r)})},n)};var qn=tt.AnonymousObservable=function(t){function e(t){return t&&at(t.dispose)?t:at(t)?ae(t):ce}function n(t,n){var r=n[0],o=n[1],i=x(o)(r);return i!==ne||r.fail(ne.e)?void r.setDisposable(e(i)):_(ne.e)}function r(e,r){function o(t){var r=new Rn(t),o=[r,e];return _e.scheduleRequired()?_e.scheduleWithState(o,n):n(null,o),r}this.source=r,t.call(this,o)}return Zt(r,t),r}(We),Rn=function(t){function e(e){t.call(this),this.observer=e,this.m=new fe}Zt(e,t);var n=e.prototype;return n.next=function(t){var e=x(this.observer.onNext).call(this.observer,t);e===ne&&(this.dispose(),_(e.e))},n.error=function(t){var e=x(this.observer.onError).call(this.observer,t);this.dispose(),e===ne&&_(e.e)},n.completed=function(){var t=x(this.observer.onCompleted).call(this.observer);this.dispose(),t===ne&&_(t.e)},n.setDisposable=function(t){this.m.setDisposable(t)},n.getDisposable=function(){return this.m.getDisposable()},n.dispose=function(){t.prototype.dispose.call(this),this.m.dispose()},e}(Re),Mn=function(t,e){this.subject=t,this.observer=e};Mn.prototype.dispose=function(){if(!this.subject.isDisposed&&null!==this.observer){var t=this.subject.observers.indexOf(this.observer);this.subject.observers.splice(t,1),this.observer=null}};var Tn=tt.Subject=function(t){function e(t){return he(this),this.isStopped?this.hasError?(t.onError(this.error),ce):(t.onCompleted(),ce):(this.observers.push(t),new Mn(this,t))}function n(){t.call(this,e),this.isDisposed=!1,this.isStopped=!1,this.observers=[],this.hasError=!1}return Zt(n,t),te(n.prototype,je.prototype,{hasObservers:function(){return this.observers.length>0},onCompleted:function(){if(he(this),!this.isStopped){this.isStopped=!0;for(var t=0,e=u(this.observers),n=e.length;n>t;t++)e[t].onCompleted();this.observers.length=0}},onError:function(t){if(he(this),!this.isStopped){this.isStopped=!0,this.error=t,this.hasError=!0;for(var e=0,n=u(this.observers),r=n.length;r>e;e++)n[e].onError(t);this.observers.length=0}},onNext:function(t){if(he(this),!this.isStopped)for(var e=0,n=u(this.observers),r=n.length;r>e;e++)n[e].onNext(t)},dispose:function(){this.isDisposed=!0,this.observers=null}}),n.create=function(t,e){return new Vn(t,e)},n}(We),Vn=(tt.AsyncSubject=function(t){function e(t){return he(this),this.isStopped?(this.hasError?t.onError(this.error):this.hasValue?(t.onNext(this.value),t.onCompleted()):t.onCompleted(),ce):(this.observers.push(t),new Mn(this,t))}function n(){t.call(this,e),this.isDisposed=!1,this.isStopped=!1,this.hasValue=!1,this.observers=[],this.hasError=!1}return Zt(n,t),te(n.prototype,je,{hasObservers:function(){return he(this),this.observers.length>0},onCompleted:function(){var t,e;if(he(this),!this.isStopped){this.isStopped=!0;var n=u(this.observers),e=n.length;if(this.hasValue)for(t=0;e>t;t++){var r=n[t];r.onNext(this.value),r.onCompleted()}else for(t=0;e>t;t++)n[t].onCompleted();this.observers.length=0}},onError:function(t){if(he(this),!this.isStopped){this.isStopped=!0,this.hasError=!0,this.error=t;for(var e=0,n=u(this.observers),r=n.length;r>e;e++)n[e].onError(t);this.observers.length=0}},onNext:function(t){he(this),this.isStopped||(this.value=t,this.hasValue=!0)},dispose:function(){this.isDisposed=!0,this.observers=null,this.exception=null,this.value=null}}),n}(We),tt.AnonymousSubject=function(t){function e(t){return this.observable.subscribe(t)}function n(n,r){this.observer=n,this.observable=r,t.call(this,e)}return Zt(n,t),te(n.prototype,je.prototype,{onCompleted:function(){this.observer.onCompleted()},onError:function(t){this.observer.onError(t)},onNext:function(t){this.observer.onNext(t)}}),n}(We));\"function\"==typeof t&&\"object\"==typeof t.amd&&t.amd?(X.Rx=tt,t(function(){return tt})):Q&&K?Y?(K.exports=tt).Rx=tt:Q.Rx=tt:X.Rx=tt;var $n=f()}).call(this)}).call(this,e(150),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{150:150}]},{},[1])(1)});",
-    "var topLevel = typeof global !== 'undefined' ? global :\n    typeof window !== 'undefined' ? window : {}\nvar minDoc = require('min-document');\n\nif (typeof document !== 'undefined') {\n    module.exports = document;\n} else {\n    var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n    if (!doccy) {\n        doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n    }\n\n    module.exports = doccy;\n}\n",
+    "var topLevel = typeof global !== 'undefined' ? global :\n    typeof window !== 'undefined' ? window : {}\nvar minDoc = require('min-document');\n\nvar doccy;\n\nif (typeof document !== 'undefined') {\n    doccy = document;\n} else {\n    doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n    if (!doccy) {\n        doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n    }\n}\n\nmodule.exports = doccy;\n",
     "exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n",
     "'use strict';\n\n/*global window, global*/\n\nvar root = typeof window !== 'undefined' ?\n    window : typeof global !== 'undefined' ?\n    global : {};\n\nmodule.exports = Individual;\n\nfunction Individual(key, value) {\n    if (key in root) {\n        return root[key];\n    }\n\n    root[key] = value;\n\n    return value;\n}\n",
     "'use strict';\n\nvar Individual = require('./index.js');\n\nmodule.exports = OneVersion;\n\nfunction OneVersion(moduleName, version, defaultValue) {\n    var key = '__INDIVIDUAL_ONE_VERSION_' + moduleName;\n    var enforceKey = key + '_ENFORCE_SINGLETON';\n\n    var versionValue = Individual(enforceKey, version);\n\n    if (versionValue !== version) {\n        throw new Error('Can only have one copy of ' +\n            moduleName + '.\\n' +\n            'You already have version ' + versionValue +\n            ' installed.\\n' +\n            'This means you cannot install version ' + version);\n    }\n\n    return Individual(key, defaultValue);\n}\n",
     "exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n",
     "'use strict';\n\n/*global window, global*/\n\nvar root = typeof window !== 'undefined' ?\n    window : typeof global !== 'undefined' ?\n    global : {};\n\nmodule.exports = Individual;\n\nfunction Individual(key, value) {\n    if (key in root) {\n        return root[key];\n    }\n\n    root[key] = value;\n\n    return value;\n}\n",
     "'use strict';\n\nvar Individual = require('./index.js');\n\nmodule.exports = OneVersion;\n\nfunction OneVersion(moduleName, version, defaultValue) {\n    var key = '__INDIVIDUAL_ONE_VERSION_' + moduleName;\n    var enforceKey = key + '_ENFORCE_SINGLETON';\n\n    var versionValue = Individual(enforceKey, version);\n\n    if (versionValue !== version) {\n        throw new Error('Can only have one copy of ' +\n            moduleName + '.\\n' +\n            'You already have version ' + versionValue +\n            ' installed.\\n' +\n            'This means you cannot install version ' + version);\n    }\n\n    return Individual(key, defaultValue);\n}\n",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subject_1 = require('./Subject');\nvar ObjectUnsubscribedError_1 = require('./util/ObjectUnsubscribedError');\n/**\n * @class BehaviorSubject<T>\n */\nvar BehaviorSubject = (function (_super) {\n    __extends(BehaviorSubject, _super);\n    function BehaviorSubject(_value) {\n        _super.call(this);\n        this._value = _value;\n    }\n    Object.defineProperty(BehaviorSubject.prototype, \"value\", {\n        get: function () {\n            return this.getValue();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    BehaviorSubject.prototype._subscribe = function (subscriber) {\n        var subscription = _super.prototype._subscribe.call(this, subscriber);\n        if (subscription && !subscription.closed) {\n            subscriber.next(this._value);\n        }\n        return subscription;\n    };\n    BehaviorSubject.prototype.getValue = function () {\n        if (this.hasError) {\n            throw this.thrownError;\n        }\n        else if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        else {\n            return this._value;\n        }\n    };\n    BehaviorSubject.prototype.next = function (value) {\n        _super.prototype.next.call(this, this._value = value);\n    };\n    return BehaviorSubject;\n}(Subject_1.Subject));\nexports.BehaviorSubject = BehaviorSubject;\n//# sourceMappingURL=BehaviorSubject.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('./Subscriber');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar InnerSubscriber = (function (_super) {\n    __extends(InnerSubscriber, _super);\n    function InnerSubscriber(parent, outerValue, outerIndex) {\n        _super.call(this);\n        this.parent = parent;\n        this.outerValue = outerValue;\n        this.outerIndex = outerIndex;\n        this.index = 0;\n    }\n    InnerSubscriber.prototype._next = function (value) {\n        this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);\n    };\n    InnerSubscriber.prototype._error = function (error) {\n        this.parent.notifyError(error, this);\n        this.unsubscribe();\n    };\n    InnerSubscriber.prototype._complete = function () {\n        this.parent.notifyComplete(this);\n        this.unsubscribe();\n    };\n    return InnerSubscriber;\n}(Subscriber_1.Subscriber));\nexports.InnerSubscriber = InnerSubscriber;\n//# sourceMappingURL=InnerSubscriber.js.map",
     "\"use strict\";\nvar Observable_1 = require('./Observable');\n/**\n * Represents a push-based event or value that an {@link Observable} can emit.\n * This class is particularly useful for operators that manage notifications,\n * like {@link materialize}, {@link dematerialize}, {@link observeOn}, and\n * others. Besides wrapping the actual delivered value, it also annotates it\n * with metadata of, for instance, what type of push message it is (`next`,\n * `error`, or `complete`).\n *\n * @see {@link materialize}\n * @see {@link dematerialize}\n * @see {@link observeOn}\n *\n * @class Notification<T>\n */\nvar Notification = (function () {\n    function Notification(kind, value, error) {\n        this.kind = kind;\n        this.value = value;\n        this.error = error;\n        this.hasValue = kind === 'N';\n    }\n    /**\n     * Delivers to the given `observer` the value wrapped by this Notification.\n     * @param {Observer} observer\n     * @return\n     */\n    Notification.prototype.observe = function (observer) {\n        switch (this.kind) {\n            case 'N':\n                return observer.next && observer.next(this.value);\n            case 'E':\n                return observer.error && observer.error(this.error);\n            case 'C':\n                return observer.complete && observer.complete();\n        }\n    };\n    /**\n     * Given some {@link Observer} callbacks, deliver the value represented by the\n     * current Notification to the correctly corresponding callback.\n     * @param {function(value: T): void} next An Observer `next` callback.\n     * @param {function(err: any): void} [error] An Observer `error` callback.\n     * @param {function(): void} [complete] An Observer `complete` callback.\n     * @return {any}\n     */\n    Notification.prototype.do = function (next, error, complete) {\n        var kind = this.kind;\n        switch (kind) {\n            case 'N':\n                return next && next(this.value);\n            case 'E':\n                return error && error(this.error);\n            case 'C':\n                return complete && complete();\n        }\n    };\n    /**\n     * Takes an Observer or its individual callback functions, and calls `observe`\n     * or `do` methods accordingly.\n     * @param {Observer|function(value: T): void} nextOrObserver An Observer or\n     * the `next` callback.\n     * @param {function(err: any): void} [error] An Observer `error` callback.\n     * @param {function(): void} [complete] An Observer `complete` callback.\n     * @return {any}\n     */\n    Notification.prototype.accept = function (nextOrObserver, error, complete) {\n        if (nextOrObserver && typeof nextOrObserver.next === 'function') {\n            return this.observe(nextOrObserver);\n        }\n        else {\n            return this.do(nextOrObserver, error, complete);\n        }\n    };\n    /**\n     * Returns a simple Observable that just delivers the notification represented\n     * by this Notification instance.\n     * @return {any}\n     */\n    Notification.prototype.toObservable = function () {\n        var kind = this.kind;\n        switch (kind) {\n            case 'N':\n                return Observable_1.Observable.of(this.value);\n            case 'E':\n                return Observable_1.Observable.throw(this.error);\n            case 'C':\n                return Observable_1.Observable.empty();\n        }\n        throw new Error('unexpected notification kind value');\n    };\n    /**\n     * A shortcut to create a Notification instance of the type `next` from a\n     * given value.\n     * @param {T} value The `next` value.\n     * @return {Notification<T>} The \"next\" Notification representing the\n     * argument.\n     */\n    Notification.createNext = function (value) {\n        if (typeof value !== 'undefined') {\n            return new Notification('N', value);\n        }\n        return this.undefinedValueNotification;\n    };\n    /**\n     * A shortcut to create a Notification instance of the type `error` from a\n     * given error.\n     * @param {any} [err] The `error` error.\n     * @return {Notification<T>} The \"error\" Notification representing the\n     * argument.\n     */\n    Notification.createError = function (err) {\n        return new Notification('E', undefined, err);\n    };\n    /**\n     * A shortcut to create a Notification instance of the type `complete`.\n     * @return {Notification<any>} The valueless \"complete\" Notification.\n     */\n    Notification.createComplete = function () {\n        return this.completeNotification;\n    };\n    Notification.completeNotification = new Notification('C');\n    Notification.undefinedValueNotification = new Notification('N', undefined);\n    return Notification;\n}());\nexports.Notification = Notification;\n//# sourceMappingURL=Notification.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subject_1 = require('./Subject');\nvar ObjectUnsubscribedError_1 = require('./util/ObjectUnsubscribedError');\n/**\n * @class BehaviorSubject<T>\n */\nvar BehaviorSubject = (function (_super) {\n    __extends(BehaviorSubject, _super);\n    function BehaviorSubject(_value) {\n        _super.call(this);\n        this._value = _value;\n    }\n    Object.defineProperty(BehaviorSubject.prototype, \"value\", {\n        get: function () {\n            return this.getValue();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    BehaviorSubject.prototype._subscribe = function (subscriber) {\n        var subscription = _super.prototype._subscribe.call(this, subscriber);\n        if (subscription && !subscription.closed) {\n            subscriber.next(this._value);\n        }\n        return subscription;\n    };\n    BehaviorSubject.prototype.getValue = function () {\n        if (this.hasError) {\n            throw this.thrownError;\n        }\n        else if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        else {\n            return this._value;\n        }\n    };\n    BehaviorSubject.prototype.next = function (value) {\n        _super.prototype.next.call(this, this._value = value);\n    };\n    return BehaviorSubject;\n}(Subject_1.Subject));\nexports.BehaviorSubject = BehaviorSubject;\n//# sourceMappingURL=BehaviorSubject.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('./Subscriber');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar InnerSubscriber = (function (_super) {\n    __extends(InnerSubscriber, _super);\n    function InnerSubscriber(parent, outerValue, outerIndex) {\n        _super.call(this);\n        this.parent = parent;\n        this.outerValue = outerValue;\n        this.outerIndex = outerIndex;\n        this.index = 0;\n    }\n    InnerSubscriber.prototype._next = function (value) {\n        this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);\n    };\n    InnerSubscriber.prototype._error = function (error) {\n        this.parent.notifyError(error, this);\n        this.unsubscribe();\n    };\n    InnerSubscriber.prototype._complete = function () {\n        this.parent.notifyComplete(this);\n        this.unsubscribe();\n    };\n    return InnerSubscriber;\n}(Subscriber_1.Subscriber));\nexports.InnerSubscriber = InnerSubscriber;\n//# sourceMappingURL=InnerSubscriber.js.map",
     "\"use strict\";\nvar Observable_1 = require('./Observable');\n/**\n * Represents a push-based event or value that an {@link Observable} can emit.\n * This class is particularly useful for operators that manage notifications,\n * like {@link materialize}, {@link dematerialize}, {@link observeOn}, and\n * others. Besides wrapping the actual delivered value, it also annotates it\n * with metadata of, for instance, what type of push message it is (`next`,\n * `error`, or `complete`).\n *\n * @see {@link materialize}\n * @see {@link dematerialize}\n * @see {@link observeOn}\n *\n * @class Notification<T>\n */\nvar Notification = (function () {\n    function Notification(kind, value, error) {\n        this.kind = kind;\n        this.value = value;\n        this.error = error;\n        this.hasValue = kind === 'N';\n    }\n    /**\n     * Delivers to the given `observer` the value wrapped by this Notification.\n     * @param {Observer} observer\n     * @return\n     */\n    Notification.prototype.observe = function (observer) {\n        switch (this.kind) {\n            case 'N':\n                return observer.next && observer.next(this.value);\n            case 'E':\n                return observer.error && observer.error(this.error);\n            case 'C':\n                return observer.complete && observer.complete();\n        }\n    };\n    /**\n     * Given some {@link Observer} callbacks, deliver the value represented by the\n     * current Notification to the correctly corresponding callback.\n     * @param {function(value: T): void} next An Observer `next` callback.\n     * @param {function(err: any): void} [error] An Observer `error` callback.\n     * @param {function(): void} [complete] An Observer `complete` callback.\n     * @return {any}\n     */\n    Notification.prototype.do = function (next, error, complete) {\n        var kind = this.kind;\n        switch (kind) {\n            case 'N':\n                return next && next(this.value);\n            case 'E':\n                return error && error(this.error);\n            case 'C':\n                return complete && complete();\n        }\n    };\n    /**\n     * Takes an Observer or its individual callback functions, and calls `observe`\n     * or `do` methods accordingly.\n     * @param {Observer|function(value: T): void} nextOrObserver An Observer or\n     * the `next` callback.\n     * @param {function(err: any): void} [error] An Observer `error` callback.\n     * @param {function(): void} [complete] An Observer `complete` callback.\n     * @return {any}\n     */\n    Notification.prototype.accept = function (nextOrObserver, error, complete) {\n        if (nextOrObserver && typeof nextOrObserver.next === 'function') {\n            return this.observe(nextOrObserver);\n        }\n        else {\n            return this.do(nextOrObserver, error, complete);\n        }\n    };\n    /**\n     * Returns a simple Observable that just delivers the notification represented\n     * by this Notification instance.\n     * @return {any}\n     */\n    Notification.prototype.toObservable = function () {\n        var kind = this.kind;\n        switch (kind) {\n            case 'N':\n                return Observable_1.Observable.of(this.value);\n            case 'E':\n                return Observable_1.Observable.throw(this.error);\n            case 'C':\n                return Observable_1.Observable.empty();\n        }\n        throw new Error('unexpected notification kind value');\n    };\n    /**\n     * A shortcut to create a Notification instance of the type `next` from a\n     * given value.\n     * @param {T} value The `next` value.\n     * @return {Notification<T>} The \"next\" Notification representing the\n     * argument.\n     */\n    Notification.createNext = function (value) {\n        if (typeof value !== 'undefined') {\n            return new Notification('N', value);\n        }\n        return this.undefinedValueNotification;\n    };\n    /**\n     * A shortcut to create a Notification instance of the type `error` from a\n     * given error.\n     * @param {any} [err] The `error` error.\n     * @return {Notification<T>} The \"error\" Notification representing the\n     * argument.\n     */\n    Notification.createError = function (err) {\n        return new Notification('E', undefined, err);\n    };\n    /**\n     * A shortcut to create a Notification instance of the type `complete`.\n     * @return {Notification<any>} The valueless \"complete\" Notification.\n     */\n    Notification.createComplete = function () {\n        return this.completeNotification;\n    };\n    Notification.completeNotification = new Notification('C');\n    Notification.undefinedValueNotification = new Notification('N', undefined);\n    return Notification;\n}());\nexports.Notification = Notification;\n//# sourceMappingURL=Notification.js.map",
-    "\"use strict\";\nvar root_1 = require('./util/root');\nvar toSubscriber_1 = require('./util/toSubscriber');\nvar observable_1 = require('./symbol/observable');\n/**\n * A representation of any set of values over any amount of time. This the most basic building block\n * of RxJS.\n *\n * @class Observable<T>\n */\nvar Observable = (function () {\n    /**\n     * @constructor\n     * @param {Function} subscribe the function that is  called when the Observable is\n     * initially subscribed to. This function is given a Subscriber, to which new values\n     * can be `next`ed, or an `error` method can be called to raise an error, or\n     * `complete` can be called to notify of a successful completion.\n     */\n    function Observable(subscribe) {\n        this._isScalar = false;\n        if (subscribe) {\n            this._subscribe = subscribe;\n        }\n    }\n    /**\n     * Creates a new Observable, with this Observable as the source, and the passed\n     * operator defined as the new observable's operator.\n     * @method lift\n     * @param {Operator} operator the operator defining the operation to take on the observable\n     * @return {Observable} a new observable with the Operator applied\n     */\n    Observable.prototype.lift = function (operator) {\n        var observable = new Observable();\n        observable.source = this;\n        observable.operator = operator;\n        return observable;\n    };\n    Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n        var operator = this.operator;\n        var sink = toSubscriber_1.toSubscriber(observerOrNext, error, complete);\n        if (operator) {\n            operator.call(sink, this.source);\n        }\n        else {\n            sink.add(this._trySubscribe(sink));\n        }\n        if (sink.syncErrorThrowable) {\n            sink.syncErrorThrowable = false;\n            if (sink.syncErrorThrown) {\n                throw sink.syncErrorValue;\n            }\n        }\n        return sink;\n    };\n    Observable.prototype._trySubscribe = function (sink) {\n        try {\n            return this._subscribe(sink);\n        }\n        catch (err) {\n            sink.syncErrorThrown = true;\n            sink.syncErrorValue = err;\n            sink.error(err);\n        }\n    };\n    /**\n     * @method forEach\n     * @param {Function} next a handler for each value emitted by the observable\n     * @param {PromiseConstructor} [PromiseCtor] a constructor function used to instantiate the Promise\n     * @return {Promise} a promise that either resolves on observable completion or\n     *  rejects with the handled error\n     */\n    Observable.prototype.forEach = function (next, PromiseCtor) {\n        var _this = this;\n        if (!PromiseCtor) {\n            if (root_1.root.Rx && root_1.root.Rx.config && root_1.root.Rx.config.Promise) {\n                PromiseCtor = root_1.root.Rx.config.Promise;\n            }\n            else if (root_1.root.Promise) {\n                PromiseCtor = root_1.root.Promise;\n            }\n        }\n        if (!PromiseCtor) {\n            throw new Error('no Promise impl found');\n        }\n        return new PromiseCtor(function (resolve, reject) {\n            var subscription = _this.subscribe(function (value) {\n                if (subscription) {\n                    // if there is a subscription, then we can surmise\n                    // the next handling is asynchronous. Any errors thrown\n                    // need to be rejected explicitly and unsubscribe must be\n                    // called manually\n                    try {\n                        next(value);\n                    }\n                    catch (err) {\n                        reject(err);\n                        subscription.unsubscribe();\n                    }\n                }\n                else {\n                    // if there is NO subscription, then we're getting a nexted\n                    // value synchronously during subscription. We can just call it.\n                    // If it errors, Observable's `subscribe` will ensure the\n                    // unsubscription logic is called, then synchronously rethrow the error.\n                    // After that, Promise will trap the error and send it\n                    // down the rejection path.\n                    next(value);\n                }\n            }, reject, resolve);\n        });\n    };\n    Observable.prototype._subscribe = function (subscriber) {\n        return this.source.subscribe(subscriber);\n    };\n    /**\n     * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n     * @method Symbol.observable\n     * @return {Observable} this instance of the observable\n     */\n    Observable.prototype[observable_1.$$observable] = function () {\n        return this;\n    };\n    // HACK: Since TypeScript inherits static properties too, we have to\n    // fight against TypeScript here so Subject can have a different static create signature\n    /**\n     * Creates a new cold Observable by calling the Observable constructor\n     * @static true\n     * @owner Observable\n     * @method create\n     * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\n     * @return {Observable} a new cold observable\n     */\n    Observable.create = function (subscribe) {\n        return new Observable(subscribe);\n    };\n    return Observable;\n}());\nexports.Observable = Observable;\n//# sourceMappingURL=Observable.js.map",
+    "\"use strict\";\nvar root_1 = require('./util/root');\nvar toSubscriber_1 = require('./util/toSubscriber');\nvar observable_1 = require('./symbol/observable');\n/**\n * A representation of any set of values over any amount of time. This the most basic building block\n * of RxJS.\n *\n * @class Observable<T>\n */\nvar Observable = (function () {\n    /**\n     * @constructor\n     * @param {Function} subscribe the function that is  called when the Observable is\n     * initially subscribed to. This function is given a Subscriber, to which new values\n     * can be `next`ed, or an `error` method can be called to raise an error, or\n     * `complete` can be called to notify of a successful completion.\n     */\n    function Observable(subscribe) {\n        this._isScalar = false;\n        if (subscribe) {\n            this._subscribe = subscribe;\n        }\n    }\n    /**\n     * Creates a new Observable, with this Observable as the source, and the passed\n     * operator defined as the new observable's operator.\n     * @method lift\n     * @param {Operator} operator the operator defining the operation to take on the observable\n     * @return {Observable} a new observable with the Operator applied\n     */\n    Observable.prototype.lift = function (operator) {\n        var observable = new Observable();\n        observable.source = this;\n        observable.operator = operator;\n        return observable;\n    };\n    Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n        var operator = this.operator;\n        var sink = toSubscriber_1.toSubscriber(observerOrNext, error, complete);\n        if (operator) {\n            operator.call(sink, this.source);\n        }\n        else {\n            sink.add(this._trySubscribe(sink));\n        }\n        if (sink.syncErrorThrowable) {\n            sink.syncErrorThrowable = false;\n            if (sink.syncErrorThrown) {\n                throw sink.syncErrorValue;\n            }\n        }\n        return sink;\n    };\n    Observable.prototype._trySubscribe = function (sink) {\n        try {\n            return this._subscribe(sink);\n        }\n        catch (err) {\n            sink.syncErrorThrown = true;\n            sink.syncErrorValue = err;\n            sink.error(err);\n        }\n    };\n    /**\n     * @method forEach\n     * @param {Function} next a handler for each value emitted by the observable\n     * @param {PromiseConstructor} [PromiseCtor] a constructor function used to instantiate the Promise\n     * @return {Promise} a promise that either resolves on observable completion or\n     *  rejects with the handled error\n     */\n    Observable.prototype.forEach = function (next, PromiseCtor) {\n        var _this = this;\n        if (!PromiseCtor) {\n            if (root_1.root.Rx && root_1.root.Rx.config && root_1.root.Rx.config.Promise) {\n                PromiseCtor = root_1.root.Rx.config.Promise;\n            }\n            else if (root_1.root.Promise) {\n                PromiseCtor = root_1.root.Promise;\n            }\n        }\n        if (!PromiseCtor) {\n            throw new Error('no Promise impl found');\n        }\n        return new PromiseCtor(function (resolve, reject) {\n            // Must be declared in a separate statement to avoid a RefernceError when\n            // accessing subscription below in the closure due to Temporal Dead Zone.\n            var subscription;\n            subscription = _this.subscribe(function (value) {\n                if (subscription) {\n                    // if there is a subscription, then we can surmise\n                    // the next handling is asynchronous. Any errors thrown\n                    // need to be rejected explicitly and unsubscribe must be\n                    // called manually\n                    try {\n                        next(value);\n                    }\n                    catch (err) {\n                        reject(err);\n                        subscription.unsubscribe();\n                    }\n                }\n                else {\n                    // if there is NO subscription, then we're getting a nexted\n                    // value synchronously during subscription. We can just call it.\n                    // If it errors, Observable's `subscribe` will ensure the\n                    // unsubscription logic is called, then synchronously rethrow the error.\n                    // After that, Promise will trap the error and send it\n                    // down the rejection path.\n                    next(value);\n                }\n            }, reject, resolve);\n        });\n    };\n    Observable.prototype._subscribe = function (subscriber) {\n        return this.source.subscribe(subscriber);\n    };\n    /**\n     * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n     * @method Symbol.observable\n     * @return {Observable} this instance of the observable\n     */\n    Observable.prototype[observable_1.observable] = function () {\n        return this;\n    };\n    // HACK: Since TypeScript inherits static properties too, we have to\n    // fight against TypeScript here so Subject can have a different static create signature\n    /**\n     * Creates a new cold Observable by calling the Observable constructor\n     * @static true\n     * @owner Observable\n     * @method create\n     * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\n     * @return {Observable} a new cold observable\n     */\n    Observable.create = function (subscribe) {\n        return new Observable(subscribe);\n    };\n    return Observable;\n}());\nexports.Observable = Observable;\n//# sourceMappingURL=Observable.js.map",
     "\"use strict\";\nexports.empty = {\n    closed: true,\n    next: function (value) { },\n    error: function (err) { throw err; },\n    complete: function () { }\n};\n//# sourceMappingURL=Observer.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('./Subscriber');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar OuterSubscriber = (function (_super) {\n    __extends(OuterSubscriber, _super);\n    function OuterSubscriber() {\n        _super.apply(this, arguments);\n    }\n    OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        this.destination.next(innerValue);\n    };\n    OuterSubscriber.prototype.notifyError = function (error, innerSub) {\n        this.destination.error(error);\n    };\n    OuterSubscriber.prototype.notifyComplete = function (innerSub) {\n        this.destination.complete();\n    };\n    return OuterSubscriber;\n}(Subscriber_1.Subscriber));\nexports.OuterSubscriber = OuterSubscriber;\n//# sourceMappingURL=OuterSubscriber.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subject_1 = require('./Subject');\nvar queue_1 = require('./scheduler/queue');\nvar Subscription_1 = require('./Subscription');\nvar observeOn_1 = require('./operator/observeOn');\nvar ObjectUnsubscribedError_1 = require('./util/ObjectUnsubscribedError');\nvar SubjectSubscription_1 = require('./SubjectSubscription');\n/**\n * @class ReplaySubject<T>\n */\nvar ReplaySubject = (function (_super) {\n    __extends(ReplaySubject, _super);\n    function ReplaySubject(bufferSize, windowTime, scheduler) {\n        if (bufferSize === void 0) { bufferSize = Number.POSITIVE_INFINITY; }\n        if (windowTime === void 0) { windowTime = Number.POSITIVE_INFINITY; }\n        _super.call(this);\n        this.scheduler = scheduler;\n        this._events = [];\n        this._bufferSize = bufferSize < 1 ? 1 : bufferSize;\n        this._windowTime = windowTime < 1 ? 1 : windowTime;\n    }\n    ReplaySubject.prototype.next = function (value) {\n        var now = this._getNow();\n        this._events.push(new ReplayEvent(now, value));\n        this._trimBufferThenGetEvents();\n        _super.prototype.next.call(this, value);\n    };\n    ReplaySubject.prototype._subscribe = function (subscriber) {\n        var _events = this._trimBufferThenGetEvents();\n        var scheduler = this.scheduler;\n        var subscription;\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        else if (this.hasError) {\n            subscription = Subscription_1.Subscription.EMPTY;\n        }\n        else if (this.isStopped) {\n            subscription = Subscription_1.Subscription.EMPTY;\n        }\n        else {\n            this.observers.push(subscriber);\n            subscription = new SubjectSubscription_1.SubjectSubscription(this, subscriber);\n        }\n        if (scheduler) {\n            subscriber.add(subscriber = new observeOn_1.ObserveOnSubscriber(subscriber, scheduler));\n        }\n        var len = _events.length;\n        for (var i = 0; i < len && !subscriber.closed; i++) {\n            subscriber.next(_events[i].value);\n        }\n        if (this.hasError) {\n            subscriber.error(this.thrownError);\n        }\n        else if (this.isStopped) {\n            subscriber.complete();\n        }\n        return subscription;\n    };\n    ReplaySubject.prototype._getNow = function () {\n        return (this.scheduler || queue_1.queue).now();\n    };\n    ReplaySubject.prototype._trimBufferThenGetEvents = function () {\n        var now = this._getNow();\n        var _bufferSize = this._bufferSize;\n        var _windowTime = this._windowTime;\n        var _events = this._events;\n        var eventsCount = _events.length;\n        var spliceCount = 0;\n        // Trim events that fall out of the time window.\n        // Start at the front of the list. Break early once\n        // we encounter an event that falls within the window.\n        while (spliceCount < eventsCount) {\n            if ((now - _events[spliceCount].time) < _windowTime) {\n                break;\n            }\n            spliceCount++;\n        }\n        if (eventsCount > _bufferSize) {\n            spliceCount = Math.max(spliceCount, eventsCount - _bufferSize);\n        }\n        if (spliceCount > 0) {\n            _events.splice(0, spliceCount);\n        }\n        return _events;\n    };\n    return ReplaySubject;\n}(Subject_1.Subject));\nexports.ReplaySubject = ReplaySubject;\nvar ReplayEvent = (function () {\n    function ReplayEvent(time, value) {\n        this.time = time;\n        this.value = value;\n    }\n    return ReplayEvent;\n}());\n//# sourceMappingURL=ReplaySubject.js.map",
     "\"use strict\";\n/**\n * An execution context and a data structure to order tasks and schedule their\n * execution. Provides a notion of (potentially virtual) time, through the\n * `now()` getter method.\n *\n * Each unit of work in a Scheduler is called an {@link Action}.\n *\n * ```ts\n * class Scheduler {\n *   now(): number;\n *   schedule(work, delay?, state?): Subscription;\n * }\n * ```\n *\n * @class Scheduler\n */\nvar Scheduler = (function () {\n    function Scheduler(SchedulerAction, now) {\n        if (now === void 0) { now = Scheduler.now; }\n        this.SchedulerAction = SchedulerAction;\n        this.now = now;\n    }\n    /**\n     * Schedules a function, `work`, for execution. May happen at some point in\n     * the future, according to the `delay` parameter, if specified. May be passed\n     * some context object, `state`, which will be passed to the `work` function.\n     *\n     * The given arguments will be processed an stored as an Action object in a\n     * queue of actions.\n     *\n     * @param {function(state: ?T): ?Subscription} work A function representing a\n     * task, or some unit of work to be executed by the Scheduler.\n     * @param {number} [delay] Time to wait before executing the work, where the\n     * time unit is implicit and defined by the Scheduler itself.\n     * @param {T} [state] Some contextual data that the `work` function uses when\n     * called by the Scheduler.\n     * @return {Subscription} A subscription in order to be able to unsubscribe\n     * the scheduled work.\n     */\n    Scheduler.prototype.schedule = function (work, delay, state) {\n        if (delay === void 0) { delay = 0; }\n        return new this.SchedulerAction(this, work).schedule(state, delay);\n    };\n    Scheduler.now = Date.now ? Date.now : function () { return +new Date(); };\n    return Scheduler;\n}());\nexports.Scheduler = Scheduler;\n//# sourceMappingURL=Scheduler.js.map",
     "\"use strict\";\nexports.empty = {\n    closed: true,\n    next: function (value) { },\n    error: function (err) { throw err; },\n    complete: function () { }\n};\n//# sourceMappingURL=Observer.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('./Subscriber');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar OuterSubscriber = (function (_super) {\n    __extends(OuterSubscriber, _super);\n    function OuterSubscriber() {\n        _super.apply(this, arguments);\n    }\n    OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        this.destination.next(innerValue);\n    };\n    OuterSubscriber.prototype.notifyError = function (error, innerSub) {\n        this.destination.error(error);\n    };\n    OuterSubscriber.prototype.notifyComplete = function (innerSub) {\n        this.destination.complete();\n    };\n    return OuterSubscriber;\n}(Subscriber_1.Subscriber));\nexports.OuterSubscriber = OuterSubscriber;\n//# sourceMappingURL=OuterSubscriber.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subject_1 = require('./Subject');\nvar queue_1 = require('./scheduler/queue');\nvar Subscription_1 = require('./Subscription');\nvar observeOn_1 = require('./operator/observeOn');\nvar ObjectUnsubscribedError_1 = require('./util/ObjectUnsubscribedError');\nvar SubjectSubscription_1 = require('./SubjectSubscription');\n/**\n * @class ReplaySubject<T>\n */\nvar ReplaySubject = (function (_super) {\n    __extends(ReplaySubject, _super);\n    function ReplaySubject(bufferSize, windowTime, scheduler) {\n        if (bufferSize === void 0) { bufferSize = Number.POSITIVE_INFINITY; }\n        if (windowTime === void 0) { windowTime = Number.POSITIVE_INFINITY; }\n        _super.call(this);\n        this.scheduler = scheduler;\n        this._events = [];\n        this._bufferSize = bufferSize < 1 ? 1 : bufferSize;\n        this._windowTime = windowTime < 1 ? 1 : windowTime;\n    }\n    ReplaySubject.prototype.next = function (value) {\n        var now = this._getNow();\n        this._events.push(new ReplayEvent(now, value));\n        this._trimBufferThenGetEvents();\n        _super.prototype.next.call(this, value);\n    };\n    ReplaySubject.prototype._subscribe = function (subscriber) {\n        var _events = this._trimBufferThenGetEvents();\n        var scheduler = this.scheduler;\n        var subscription;\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        else if (this.hasError) {\n            subscription = Subscription_1.Subscription.EMPTY;\n        }\n        else if (this.isStopped) {\n            subscription = Subscription_1.Subscription.EMPTY;\n        }\n        else {\n            this.observers.push(subscriber);\n            subscription = new SubjectSubscription_1.SubjectSubscription(this, subscriber);\n        }\n        if (scheduler) {\n            subscriber.add(subscriber = new observeOn_1.ObserveOnSubscriber(subscriber, scheduler));\n        }\n        var len = _events.length;\n        for (var i = 0; i < len && !subscriber.closed; i++) {\n            subscriber.next(_events[i].value);\n        }\n        if (this.hasError) {\n            subscriber.error(this.thrownError);\n        }\n        else if (this.isStopped) {\n            subscriber.complete();\n        }\n        return subscription;\n    };\n    ReplaySubject.prototype._getNow = function () {\n        return (this.scheduler || queue_1.queue).now();\n    };\n    ReplaySubject.prototype._trimBufferThenGetEvents = function () {\n        var now = this._getNow();\n        var _bufferSize = this._bufferSize;\n        var _windowTime = this._windowTime;\n        var _events = this._events;\n        var eventsCount = _events.length;\n        var spliceCount = 0;\n        // Trim events that fall out of the time window.\n        // Start at the front of the list. Break early once\n        // we encounter an event that falls within the window.\n        while (spliceCount < eventsCount) {\n            if ((now - _events[spliceCount].time) < _windowTime) {\n                break;\n            }\n            spliceCount++;\n        }\n        if (eventsCount > _bufferSize) {\n            spliceCount = Math.max(spliceCount, eventsCount - _bufferSize);\n        }\n        if (spliceCount > 0) {\n            _events.splice(0, spliceCount);\n        }\n        return _events;\n    };\n    return ReplaySubject;\n}(Subject_1.Subject));\nexports.ReplaySubject = ReplaySubject;\nvar ReplayEvent = (function () {\n    function ReplayEvent(time, value) {\n        this.time = time;\n        this.value = value;\n    }\n    return ReplayEvent;\n}());\n//# sourceMappingURL=ReplaySubject.js.map",
     "\"use strict\";\n/**\n * An execution context and a data structure to order tasks and schedule their\n * execution. Provides a notion of (potentially virtual) time, through the\n * `now()` getter method.\n *\n * Each unit of work in a Scheduler is called an {@link Action}.\n *\n * ```ts\n * class Scheduler {\n *   now(): number;\n *   schedule(work, delay?, state?): Subscription;\n * }\n * ```\n *\n * @class Scheduler\n */\nvar Scheduler = (function () {\n    function Scheduler(SchedulerAction, now) {\n        if (now === void 0) { now = Scheduler.now; }\n        this.SchedulerAction = SchedulerAction;\n        this.now = now;\n    }\n    /**\n     * Schedules a function, `work`, for execution. May happen at some point in\n     * the future, according to the `delay` parameter, if specified. May be passed\n     * some context object, `state`, which will be passed to the `work` function.\n     *\n     * The given arguments will be processed an stored as an Action object in a\n     * queue of actions.\n     *\n     * @param {function(state: ?T): ?Subscription} work A function representing a\n     * task, or some unit of work to be executed by the Scheduler.\n     * @param {number} [delay] Time to wait before executing the work, where the\n     * time unit is implicit and defined by the Scheduler itself.\n     * @param {T} [state] Some contextual data that the `work` function uses when\n     * called by the Scheduler.\n     * @return {Subscription} A subscription in order to be able to unsubscribe\n     * the scheduled work.\n     */\n    Scheduler.prototype.schedule = function (work, delay, state) {\n        if (delay === void 0) { delay = 0; }\n        return new this.SchedulerAction(this, work).schedule(state, delay);\n    };\n    Scheduler.now = Date.now ? Date.now : function () { return +new Date(); };\n    return Scheduler;\n}());\nexports.Scheduler = Scheduler;\n//# sourceMappingURL=Scheduler.js.map",
-    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('./Observable');\nvar Subscriber_1 = require('./Subscriber');\nvar Subscription_1 = require('./Subscription');\nvar ObjectUnsubscribedError_1 = require('./util/ObjectUnsubscribedError');\nvar SubjectSubscription_1 = require('./SubjectSubscription');\nvar rxSubscriber_1 = require('./symbol/rxSubscriber');\n/**\n * @class SubjectSubscriber<T>\n */\nvar SubjectSubscriber = (function (_super) {\n    __extends(SubjectSubscriber, _super);\n    function SubjectSubscriber(destination) {\n        _super.call(this, destination);\n        this.destination = destination;\n    }\n    return SubjectSubscriber;\n}(Subscriber_1.Subscriber));\nexports.SubjectSubscriber = SubjectSubscriber;\n/**\n * @class Subject<T>\n */\nvar Subject = (function (_super) {\n    __extends(Subject, _super);\n    function Subject() {\n        _super.call(this);\n        this.observers = [];\n        this.closed = false;\n        this.isStopped = false;\n        this.hasError = false;\n        this.thrownError = null;\n    }\n    Subject.prototype[rxSubscriber_1.$$rxSubscriber] = function () {\n        return new SubjectSubscriber(this);\n    };\n    Subject.prototype.lift = function (operator) {\n        var subject = new AnonymousSubject(this, this);\n        subject.operator = operator;\n        return subject;\n    };\n    Subject.prototype.next = function (value) {\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        if (!this.isStopped) {\n            var observers = this.observers;\n            var len = observers.length;\n            var copy = observers.slice();\n            for (var i = 0; i < len; i++) {\n                copy[i].next(value);\n            }\n        }\n    };\n    Subject.prototype.error = function (err) {\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        this.hasError = true;\n        this.thrownError = err;\n        this.isStopped = true;\n        var observers = this.observers;\n        var len = observers.length;\n        var copy = observers.slice();\n        for (var i = 0; i < len; i++) {\n            copy[i].error(err);\n        }\n        this.observers.length = 0;\n    };\n    Subject.prototype.complete = function () {\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        this.isStopped = true;\n        var observers = this.observers;\n        var len = observers.length;\n        var copy = observers.slice();\n        for (var i = 0; i < len; i++) {\n            copy[i].complete();\n        }\n        this.observers.length = 0;\n    };\n    Subject.prototype.unsubscribe = function () {\n        this.isStopped = true;\n        this.closed = true;\n        this.observers = null;\n    };\n    Subject.prototype._trySubscribe = function (subscriber) {\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        else {\n            return _super.prototype._trySubscribe.call(this, subscriber);\n        }\n    };\n    Subject.prototype._subscribe = function (subscriber) {\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        else if (this.hasError) {\n            subscriber.error(this.thrownError);\n            return Subscription_1.Subscription.EMPTY;\n        }\n        else if (this.isStopped) {\n            subscriber.complete();\n            return Subscription_1.Subscription.EMPTY;\n        }\n        else {\n            this.observers.push(subscriber);\n            return new SubjectSubscription_1.SubjectSubscription(this, subscriber);\n        }\n    };\n    Subject.prototype.asObservable = function () {\n        var observable = new Observable_1.Observable();\n        observable.source = this;\n        return observable;\n    };\n    Subject.create = function (destination, source) {\n        return new AnonymousSubject(destination, source);\n    };\n    return Subject;\n}(Observable_1.Observable));\nexports.Subject = Subject;\n/**\n * @class AnonymousSubject<T>\n */\nvar AnonymousSubject = (function (_super) {\n    __extends(AnonymousSubject, _super);\n    function AnonymousSubject(destination, source) {\n        _super.call(this);\n        this.destination = destination;\n        this.source = source;\n    }\n    AnonymousSubject.prototype.next = function (value) {\n        var destination = this.destination;\n        if (destination && destination.next) {\n            destination.next(value);\n        }\n    };\n    AnonymousSubject.prototype.error = function (err) {\n        var destination = this.destination;\n        if (destination && destination.error) {\n            this.destination.error(err);\n        }\n    };\n    AnonymousSubject.prototype.complete = function () {\n        var destination = this.destination;\n        if (destination && destination.complete) {\n            this.destination.complete();\n        }\n    };\n    AnonymousSubject.prototype._subscribe = function (subscriber) {\n        var source = this.source;\n        if (source) {\n            return this.source.subscribe(subscriber);\n        }\n        else {\n            return Subscription_1.Subscription.EMPTY;\n        }\n    };\n    return AnonymousSubject;\n}(Subject));\nexports.AnonymousSubject = AnonymousSubject;\n//# sourceMappingURL=Subject.js.map",
+    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('./Observable');\nvar Subscriber_1 = require('./Subscriber');\nvar Subscription_1 = require('./Subscription');\nvar ObjectUnsubscribedError_1 = require('./util/ObjectUnsubscribedError');\nvar SubjectSubscription_1 = require('./SubjectSubscription');\nvar rxSubscriber_1 = require('./symbol/rxSubscriber');\n/**\n * @class SubjectSubscriber<T>\n */\nvar SubjectSubscriber = (function (_super) {\n    __extends(SubjectSubscriber, _super);\n    function SubjectSubscriber(destination) {\n        _super.call(this, destination);\n        this.destination = destination;\n    }\n    return SubjectSubscriber;\n}(Subscriber_1.Subscriber));\nexports.SubjectSubscriber = SubjectSubscriber;\n/**\n * @class Subject<T>\n */\nvar Subject = (function (_super) {\n    __extends(Subject, _super);\n    function Subject() {\n        _super.call(this);\n        this.observers = [];\n        this.closed = false;\n        this.isStopped = false;\n        this.hasError = false;\n        this.thrownError = null;\n    }\n    Subject.prototype[rxSubscriber_1.rxSubscriber] = function () {\n        return new SubjectSubscriber(this);\n    };\n    Subject.prototype.lift = function (operator) {\n        var subject = new AnonymousSubject(this, this);\n        subject.operator = operator;\n        return subject;\n    };\n    Subject.prototype.next = function (value) {\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        if (!this.isStopped) {\n            var observers = this.observers;\n            var len = observers.length;\n            var copy = observers.slice();\n            for (var i = 0; i < len; i++) {\n                copy[i].next(value);\n            }\n        }\n    };\n    Subject.prototype.error = function (err) {\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        this.hasError = true;\n        this.thrownError = err;\n        this.isStopped = true;\n        var observers = this.observers;\n        var len = observers.length;\n        var copy = observers.slice();\n        for (var i = 0; i < len; i++) {\n            copy[i].error(err);\n        }\n        this.observers.length = 0;\n    };\n    Subject.prototype.complete = function () {\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        this.isStopped = true;\n        var observers = this.observers;\n        var len = observers.length;\n        var copy = observers.slice();\n        for (var i = 0; i < len; i++) {\n            copy[i].complete();\n        }\n        this.observers.length = 0;\n    };\n    Subject.prototype.unsubscribe = function () {\n        this.isStopped = true;\n        this.closed = true;\n        this.observers = null;\n    };\n    Subject.prototype._trySubscribe = function (subscriber) {\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        else {\n            return _super.prototype._trySubscribe.call(this, subscriber);\n        }\n    };\n    Subject.prototype._subscribe = function (subscriber) {\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        else if (this.hasError) {\n            subscriber.error(this.thrownError);\n            return Subscription_1.Subscription.EMPTY;\n        }\n        else if (this.isStopped) {\n            subscriber.complete();\n            return Subscription_1.Subscription.EMPTY;\n        }\n        else {\n            this.observers.push(subscriber);\n            return new SubjectSubscription_1.SubjectSubscription(this, subscriber);\n        }\n    };\n    Subject.prototype.asObservable = function () {\n        var observable = new Observable_1.Observable();\n        observable.source = this;\n        return observable;\n    };\n    Subject.create = function (destination, source) {\n        return new AnonymousSubject(destination, source);\n    };\n    return Subject;\n}(Observable_1.Observable));\nexports.Subject = Subject;\n/**\n * @class AnonymousSubject<T>\n */\nvar AnonymousSubject = (function (_super) {\n    __extends(AnonymousSubject, _super);\n    function AnonymousSubject(destination, source) {\n        _super.call(this);\n        this.destination = destination;\n        this.source = source;\n    }\n    AnonymousSubject.prototype.next = function (value) {\n        var destination = this.destination;\n        if (destination && destination.next) {\n            destination.next(value);\n        }\n    };\n    AnonymousSubject.prototype.error = function (err) {\n        var destination = this.destination;\n        if (destination && destination.error) {\n            this.destination.error(err);\n        }\n    };\n    AnonymousSubject.prototype.complete = function () {\n        var destination = this.destination;\n        if (destination && destination.complete) {\n            this.destination.complete();\n        }\n    };\n    AnonymousSubject.prototype._subscribe = function (subscriber) {\n        var source = this.source;\n        if (source) {\n            return this.source.subscribe(subscriber);\n        }\n        else {\n            return Subscription_1.Subscription.EMPTY;\n        }\n    };\n    return AnonymousSubject;\n}(Subject));\nexports.AnonymousSubject = AnonymousSubject;\n//# sourceMappingURL=Subject.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscription_1 = require('./Subscription');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar SubjectSubscription = (function (_super) {\n    __extends(SubjectSubscription, _super);\n    function SubjectSubscription(subject, subscriber) {\n        _super.call(this);\n        this.subject = subject;\n        this.subscriber = subscriber;\n        this.closed = false;\n    }\n    SubjectSubscription.prototype.unsubscribe = function () {\n        if (this.closed) {\n            return;\n        }\n        this.closed = true;\n        var subject = this.subject;\n        var observers = subject.observers;\n        this.subject = null;\n        if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {\n            return;\n        }\n        var subscriberIndex = observers.indexOf(this.subscriber);\n        if (subscriberIndex !== -1) {\n            observers.splice(subscriberIndex, 1);\n        }\n    };\n    return SubjectSubscription;\n}(Subscription_1.Subscription));\nexports.SubjectSubscription = SubjectSubscription;\n//# sourceMappingURL=SubjectSubscription.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscription_1 = require('./Subscription');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar SubjectSubscription = (function (_super) {\n    __extends(SubjectSubscription, _super);\n    function SubjectSubscription(subject, subscriber) {\n        _super.call(this);\n        this.subject = subject;\n        this.subscriber = subscriber;\n        this.closed = false;\n    }\n    SubjectSubscription.prototype.unsubscribe = function () {\n        if (this.closed) {\n            return;\n        }\n        this.closed = true;\n        var subject = this.subject;\n        var observers = subject.observers;\n        this.subject = null;\n        if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {\n            return;\n        }\n        var subscriberIndex = observers.indexOf(this.subscriber);\n        if (subscriberIndex !== -1) {\n            observers.splice(subscriberIndex, 1);\n        }\n    };\n    return SubjectSubscription;\n}(Subscription_1.Subscription));\nexports.SubjectSubscription = SubjectSubscription;\n//# sourceMappingURL=SubjectSubscription.js.map",
-    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar isFunction_1 = require('./util/isFunction');\nvar Subscription_1 = require('./Subscription');\nvar Observer_1 = require('./Observer');\nvar rxSubscriber_1 = require('./symbol/rxSubscriber');\n/**\n * Implements the {@link Observer} interface and extends the\n * {@link Subscription} class. While the {@link Observer} is the public API for\n * consuming the values of an {@link Observable}, all Observers get converted to\n * a Subscriber, in order to provide Subscription-like capabilities such as\n * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for\n * implementing operators, but it is rarely used as a public API.\n *\n * @class Subscriber<T>\n */\nvar Subscriber = (function (_super) {\n    __extends(Subscriber, _super);\n    /**\n     * @param {Observer|function(value: T): void} [destinationOrNext] A partially\n     * defined Observer or a `next` callback function.\n     * @param {function(e: ?any): void} [error] The `error` callback of an\n     * Observer.\n     * @param {function(): void} [complete] The `complete` callback of an\n     * Observer.\n     */\n    function Subscriber(destinationOrNext, error, complete) {\n        _super.call(this);\n        this.syncErrorValue = null;\n        this.syncErrorThrown = false;\n        this.syncErrorThrowable = false;\n        this.isStopped = false;\n        switch (arguments.length) {\n            case 0:\n                this.destination = Observer_1.empty;\n                break;\n            case 1:\n                if (!destinationOrNext) {\n                    this.destination = Observer_1.empty;\n                    break;\n                }\n                if (typeof destinationOrNext === 'object') {\n                    if (destinationOrNext instanceof Subscriber) {\n                        this.destination = destinationOrNext;\n                        this.destination.add(this);\n                    }\n                    else {\n                        this.syncErrorThrowable = true;\n                        this.destination = new SafeSubscriber(this, destinationOrNext);\n                    }\n                    break;\n                }\n            default:\n                this.syncErrorThrowable = true;\n                this.destination = new SafeSubscriber(this, destinationOrNext, error, complete);\n                break;\n        }\n    }\n    Subscriber.prototype[rxSubscriber_1.$$rxSubscriber] = function () { return this; };\n    /**\n     * A static factory for a Subscriber, given a (potentially partial) definition\n     * of an Observer.\n     * @param {function(x: ?T): void} [next] The `next` callback of an Observer.\n     * @param {function(e: ?any): void} [error] The `error` callback of an\n     * Observer.\n     * @param {function(): void} [complete] The `complete` callback of an\n     * Observer.\n     * @return {Subscriber<T>} A Subscriber wrapping the (partially defined)\n     * Observer represented by the given arguments.\n     */\n    Subscriber.create = function (next, error, complete) {\n        var subscriber = new Subscriber(next, error, complete);\n        subscriber.syncErrorThrowable = false;\n        return subscriber;\n    };\n    /**\n     * The {@link Observer} callback to receive notifications of type `next` from\n     * the Observable, with a value. The Observable may call this method 0 or more\n     * times.\n     * @param {T} [value] The `next` value.\n     * @return {void}\n     */\n    Subscriber.prototype.next = function (value) {\n        if (!this.isStopped) {\n            this._next(value);\n        }\n    };\n    /**\n     * The {@link Observer} callback to receive notifications of type `error` from\n     * the Observable, with an attached {@link Error}. Notifies the Observer that\n     * the Observable has experienced an error condition.\n     * @param {any} [err] The `error` exception.\n     * @return {void}\n     */\n    Subscriber.prototype.error = function (err) {\n        if (!this.isStopped) {\n            this.isStopped = true;\n            this._error(err);\n        }\n    };\n    /**\n     * The {@link Observer} callback to receive a valueless notification of type\n     * `complete` from the Observable. Notifies the Observer that the Observable\n     * has finished sending push-based notifications.\n     * @return {void}\n     */\n    Subscriber.prototype.complete = function () {\n        if (!this.isStopped) {\n            this.isStopped = true;\n            this._complete();\n        }\n    };\n    Subscriber.prototype.unsubscribe = function () {\n        if (this.closed) {\n            return;\n        }\n        this.isStopped = true;\n        _super.prototype.unsubscribe.call(this);\n    };\n    Subscriber.prototype._next = function (value) {\n        this.destination.next(value);\n    };\n    Subscriber.prototype._error = function (err) {\n        this.destination.error(err);\n        this.unsubscribe();\n    };\n    Subscriber.prototype._complete = function () {\n        this.destination.complete();\n        this.unsubscribe();\n    };\n    Subscriber.prototype._unsubscribeAndRecycle = function () {\n        var _a = this, _parent = _a._parent, _parents = _a._parents;\n        this._parent = null;\n        this._parents = null;\n        this.unsubscribe();\n        this.closed = false;\n        this.isStopped = false;\n        this._parent = _parent;\n        this._parents = _parents;\n        return this;\n    };\n    return Subscriber;\n}(Subscription_1.Subscription));\nexports.Subscriber = Subscriber;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar SafeSubscriber = (function (_super) {\n    __extends(SafeSubscriber, _super);\n    function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {\n        _super.call(this);\n        this._parentSubscriber = _parentSubscriber;\n        var next;\n        var context = this;\n        if (isFunction_1.isFunction(observerOrNext)) {\n            next = observerOrNext;\n        }\n        else if (observerOrNext) {\n            context = observerOrNext;\n            next = observerOrNext.next;\n            error = observerOrNext.error;\n            complete = observerOrNext.complete;\n            if (isFunction_1.isFunction(context.unsubscribe)) {\n                this.add(context.unsubscribe.bind(context));\n            }\n            context.unsubscribe = this.unsubscribe.bind(this);\n        }\n        this._context = context;\n        this._next = next;\n        this._error = error;\n        this._complete = complete;\n    }\n    SafeSubscriber.prototype.next = function (value) {\n        if (!this.isStopped && this._next) {\n            var _parentSubscriber = this._parentSubscriber;\n            if (!_parentSubscriber.syncErrorThrowable) {\n                this.__tryOrUnsub(this._next, value);\n            }\n            else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {\n                this.unsubscribe();\n            }\n        }\n    };\n    SafeSubscriber.prototype.error = function (err) {\n        if (!this.isStopped) {\n            var _parentSubscriber = this._parentSubscriber;\n            if (this._error) {\n                if (!_parentSubscriber.syncErrorThrowable) {\n                    this.__tryOrUnsub(this._error, err);\n                    this.unsubscribe();\n                }\n                else {\n                    this.__tryOrSetError(_parentSubscriber, this._error, err);\n                    this.unsubscribe();\n                }\n            }\n            else if (!_parentSubscriber.syncErrorThrowable) {\n                this.unsubscribe();\n                throw err;\n            }\n            else {\n                _parentSubscriber.syncErrorValue = err;\n                _parentSubscriber.syncErrorThrown = true;\n                this.unsubscribe();\n            }\n        }\n    };\n    SafeSubscriber.prototype.complete = function () {\n        if (!this.isStopped) {\n            var _parentSubscriber = this._parentSubscriber;\n            if (this._complete) {\n                if (!_parentSubscriber.syncErrorThrowable) {\n                    this.__tryOrUnsub(this._complete);\n                    this.unsubscribe();\n                }\n                else {\n                    this.__tryOrSetError(_parentSubscriber, this._complete);\n                    this.unsubscribe();\n                }\n            }\n            else {\n                this.unsubscribe();\n            }\n        }\n    };\n    SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {\n        try {\n            fn.call(this._context, value);\n        }\n        catch (err) {\n            this.unsubscribe();\n            throw err;\n        }\n    };\n    SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {\n        try {\n            fn.call(this._context, value);\n        }\n        catch (err) {\n            parent.syncErrorValue = err;\n            parent.syncErrorThrown = true;\n            return true;\n        }\n        return false;\n    };\n    SafeSubscriber.prototype._unsubscribe = function () {\n        var _parentSubscriber = this._parentSubscriber;\n        this._context = null;\n        this._parentSubscriber = null;\n        _parentSubscriber.unsubscribe();\n    };\n    return SafeSubscriber;\n}(Subscriber));\n//# sourceMappingURL=Subscriber.js.map",
+    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar isFunction_1 = require('./util/isFunction');\nvar Subscription_1 = require('./Subscription');\nvar Observer_1 = require('./Observer');\nvar rxSubscriber_1 = require('./symbol/rxSubscriber');\n/**\n * Implements the {@link Observer} interface and extends the\n * {@link Subscription} class. While the {@link Observer} is the public API for\n * consuming the values of an {@link Observable}, all Observers get converted to\n * a Subscriber, in order to provide Subscription-like capabilities such as\n * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for\n * implementing operators, but it is rarely used as a public API.\n *\n * @class Subscriber<T>\n */\nvar Subscriber = (function (_super) {\n    __extends(Subscriber, _super);\n    /**\n     * @param {Observer|function(value: T): void} [destinationOrNext] A partially\n     * defined Observer or a `next` callback function.\n     * @param {function(e: ?any): void} [error] The `error` callback of an\n     * Observer.\n     * @param {function(): void} [complete] The `complete` callback of an\n     * Observer.\n     */\n    function Subscriber(destinationOrNext, error, complete) {\n        _super.call(this);\n        this.syncErrorValue = null;\n        this.syncErrorThrown = false;\n        this.syncErrorThrowable = false;\n        this.isStopped = false;\n        switch (arguments.length) {\n            case 0:\n                this.destination = Observer_1.empty;\n                break;\n            case 1:\n                if (!destinationOrNext) {\n                    this.destination = Observer_1.empty;\n                    break;\n                }\n                if (typeof destinationOrNext === 'object') {\n                    if (destinationOrNext instanceof Subscriber) {\n                        this.destination = destinationOrNext;\n                        this.destination.add(this);\n                    }\n                    else {\n                        this.syncErrorThrowable = true;\n                        this.destination = new SafeSubscriber(this, destinationOrNext);\n                    }\n                    break;\n                }\n            default:\n                this.syncErrorThrowable = true;\n                this.destination = new SafeSubscriber(this, destinationOrNext, error, complete);\n                break;\n        }\n    }\n    Subscriber.prototype[rxSubscriber_1.rxSubscriber] = function () { return this; };\n    /**\n     * A static factory for a Subscriber, given a (potentially partial) definition\n     * of an Observer.\n     * @param {function(x: ?T): void} [next] The `next` callback of an Observer.\n     * @param {function(e: ?any): void} [error] The `error` callback of an\n     * Observer.\n     * @param {function(): void} [complete] The `complete` callback of an\n     * Observer.\n     * @return {Subscriber<T>} A Subscriber wrapping the (partially defined)\n     * Observer represented by the given arguments.\n     */\n    Subscriber.create = function (next, error, complete) {\n        var subscriber = new Subscriber(next, error, complete);\n        subscriber.syncErrorThrowable = false;\n        return subscriber;\n    };\n    /**\n     * The {@link Observer} callback to receive notifications of type `next` from\n     * the Observable, with a value. The Observable may call this method 0 or more\n     * times.\n     * @param {T} [value] The `next` value.\n     * @return {void}\n     */\n    Subscriber.prototype.next = function (value) {\n        if (!this.isStopped) {\n            this._next(value);\n        }\n    };\n    /**\n     * The {@link Observer} callback to receive notifications of type `error` from\n     * the Observable, with an attached {@link Error}. Notifies the Observer that\n     * the Observable has experienced an error condition.\n     * @param {any} [err] The `error` exception.\n     * @return {void}\n     */\n    Subscriber.prototype.error = function (err) {\n        if (!this.isStopped) {\n            this.isStopped = true;\n            this._error(err);\n        }\n    };\n    /**\n     * The {@link Observer} callback to receive a valueless notification of type\n     * `complete` from the Observable. Notifies the Observer that the Observable\n     * has finished sending push-based notifications.\n     * @return {void}\n     */\n    Subscriber.prototype.complete = function () {\n        if (!this.isStopped) {\n            this.isStopped = true;\n            this._complete();\n        }\n    };\n    Subscriber.prototype.unsubscribe = function () {\n        if (this.closed) {\n            return;\n        }\n        this.isStopped = true;\n        _super.prototype.unsubscribe.call(this);\n    };\n    Subscriber.prototype._next = function (value) {\n        this.destination.next(value);\n    };\n    Subscriber.prototype._error = function (err) {\n        this.destination.error(err);\n        this.unsubscribe();\n    };\n    Subscriber.prototype._complete = function () {\n        this.destination.complete();\n        this.unsubscribe();\n    };\n    Subscriber.prototype._unsubscribeAndRecycle = function () {\n        var _a = this, _parent = _a._parent, _parents = _a._parents;\n        this._parent = null;\n        this._parents = null;\n        this.unsubscribe();\n        this.closed = false;\n        this.isStopped = false;\n        this._parent = _parent;\n        this._parents = _parents;\n        return this;\n    };\n    return Subscriber;\n}(Subscription_1.Subscription));\nexports.Subscriber = Subscriber;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar SafeSubscriber = (function (_super) {\n    __extends(SafeSubscriber, _super);\n    function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {\n        _super.call(this);\n        this._parentSubscriber = _parentSubscriber;\n        var next;\n        var context = this;\n        if (isFunction_1.isFunction(observerOrNext)) {\n            next = observerOrNext;\n        }\n        else if (observerOrNext) {\n            next = observerOrNext.next;\n            error = observerOrNext.error;\n            complete = observerOrNext.complete;\n            if (observerOrNext !== Observer_1.empty) {\n                context = Object.create(observerOrNext);\n                if (isFunction_1.isFunction(context.unsubscribe)) {\n                    this.add(context.unsubscribe.bind(context));\n                }\n                context.unsubscribe = this.unsubscribe.bind(this);\n            }\n        }\n        this._context = context;\n        this._next = next;\n        this._error = error;\n        this._complete = complete;\n    }\n    SafeSubscriber.prototype.next = function (value) {\n        if (!this.isStopped && this._next) {\n            var _parentSubscriber = this._parentSubscriber;\n            if (!_parentSubscriber.syncErrorThrowable) {\n                this.__tryOrUnsub(this._next, value);\n            }\n            else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {\n                this.unsubscribe();\n            }\n        }\n    };\n    SafeSubscriber.prototype.error = function (err) {\n        if (!this.isStopped) {\n            var _parentSubscriber = this._parentSubscriber;\n            if (this._error) {\n                if (!_parentSubscriber.syncErrorThrowable) {\n                    this.__tryOrUnsub(this._error, err);\n                    this.unsubscribe();\n                }\n                else {\n                    this.__tryOrSetError(_parentSubscriber, this._error, err);\n                    this.unsubscribe();\n                }\n            }\n            else if (!_parentSubscriber.syncErrorThrowable) {\n                this.unsubscribe();\n                throw err;\n            }\n            else {\n                _parentSubscriber.syncErrorValue = err;\n                _parentSubscriber.syncErrorThrown = true;\n                this.unsubscribe();\n            }\n        }\n    };\n    SafeSubscriber.prototype.complete = function () {\n        var _this = this;\n        if (!this.isStopped) {\n            var _parentSubscriber = this._parentSubscriber;\n            if (this._complete) {\n                var wrappedComplete = function () { return _this._complete.call(_this._context); };\n                if (!_parentSubscriber.syncErrorThrowable) {\n                    this.__tryOrUnsub(wrappedComplete);\n                    this.unsubscribe();\n                }\n                else {\n                    this.__tryOrSetError(_parentSubscriber, wrappedComplete);\n                    this.unsubscribe();\n                }\n            }\n            else {\n                this.unsubscribe();\n            }\n        }\n    };\n    SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {\n        try {\n            fn.call(this._context, value);\n        }\n        catch (err) {\n            this.unsubscribe();\n            throw err;\n        }\n    };\n    SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {\n        try {\n            fn.call(this._context, value);\n        }\n        catch (err) {\n            parent.syncErrorValue = err;\n            parent.syncErrorThrown = true;\n            return true;\n        }\n        return false;\n    };\n    SafeSubscriber.prototype._unsubscribe = function () {\n        var _parentSubscriber = this._parentSubscriber;\n        this._context = null;\n        this._parentSubscriber = null;\n        _parentSubscriber.unsubscribe();\n    };\n    return SafeSubscriber;\n}(Subscriber));\n//# sourceMappingURL=Subscriber.js.map",
     "\"use strict\";\nvar isArray_1 = require('./util/isArray');\nvar isObject_1 = require('./util/isObject');\nvar isFunction_1 = require('./util/isFunction');\nvar tryCatch_1 = require('./util/tryCatch');\nvar errorObject_1 = require('./util/errorObject');\nvar UnsubscriptionError_1 = require('./util/UnsubscriptionError');\n/**\n * Represents a disposable resource, such as the execution of an Observable. A\n * Subscription has one important method, `unsubscribe`, that takes no argument\n * and just disposes the resource held by the subscription.\n *\n * Additionally, subscriptions may be grouped together through the `add()`\n * method, which will attach a child Subscription to the current Subscription.\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\n * will be unsubscribed as well.\n *\n * @class Subscription\n */\nvar Subscription = (function () {\n    /**\n     * @param {function(): void} [unsubscribe] A function describing how to\n     * perform the disposal of resources when the `unsubscribe` method is called.\n     */\n    function Subscription(unsubscribe) {\n        /**\n         * A flag to indicate whether this Subscription has already been unsubscribed.\n         * @type {boolean}\n         */\n        this.closed = false;\n        this._parent = null;\n        this._parents = null;\n        this._subscriptions = null;\n        if (unsubscribe) {\n            this._unsubscribe = unsubscribe;\n        }\n    }\n    /**\n     * Disposes the resources held by the subscription. May, for instance, cancel\n     * an ongoing Observable execution or cancel any other type of work that\n     * started when the Subscription was created.\n     * @return {void}\n     */\n    Subscription.prototype.unsubscribe = function () {\n        var hasErrors = false;\n        var errors;\n        if (this.closed) {\n            return;\n        }\n        var _a = this, _parent = _a._parent, _parents = _a._parents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;\n        this.closed = true;\n        this._parent = null;\n        this._parents = null;\n        // null out _subscriptions first so any child subscriptions that attempt\n        // to remove themselves from this subscription will noop\n        this._subscriptions = null;\n        var index = -1;\n        var len = _parents ? _parents.length : 0;\n        // if this._parent is null, then so is this._parents, and we\n        // don't have to remove ourselves from any parent subscriptions.\n        while (_parent) {\n            _parent.remove(this);\n            // if this._parents is null or index >= len,\n            // then _parent is set to null, and the loop exits\n            _parent = ++index < len && _parents[index] || null;\n        }\n        if (isFunction_1.isFunction(_unsubscribe)) {\n            var trial = tryCatch_1.tryCatch(_unsubscribe).call(this);\n            if (trial === errorObject_1.errorObject) {\n                hasErrors = true;\n                errors = errors || (errorObject_1.errorObject.e instanceof UnsubscriptionError_1.UnsubscriptionError ?\n                    flattenUnsubscriptionErrors(errorObject_1.errorObject.e.errors) : [errorObject_1.errorObject.e]);\n            }\n        }\n        if (isArray_1.isArray(_subscriptions)) {\n            index = -1;\n            len = _subscriptions.length;\n            while (++index < len) {\n                var sub = _subscriptions[index];\n                if (isObject_1.isObject(sub)) {\n                    var trial = tryCatch_1.tryCatch(sub.unsubscribe).call(sub);\n                    if (trial === errorObject_1.errorObject) {\n                        hasErrors = true;\n                        errors = errors || [];\n                        var err = errorObject_1.errorObject.e;\n                        if (err instanceof UnsubscriptionError_1.UnsubscriptionError) {\n                            errors = errors.concat(flattenUnsubscriptionErrors(err.errors));\n                        }\n                        else {\n                            errors.push(err);\n                        }\n                    }\n                }\n            }\n        }\n        if (hasErrors) {\n            throw new UnsubscriptionError_1.UnsubscriptionError(errors);\n        }\n    };\n    /**\n     * Adds a tear down to be called during the unsubscribe() of this\n     * Subscription.\n     *\n     * If the tear down being added is a subscription that is already\n     * unsubscribed, is the same reference `add` is being called on, or is\n     * `Subscription.EMPTY`, it will not be added.\n     *\n     * If this subscription is already in an `closed` state, the passed\n     * tear down logic will be executed immediately.\n     *\n     * @param {TeardownLogic} teardown The additional logic to execute on\n     * teardown.\n     * @return {Subscription} Returns the Subscription used or created to be\n     * added to the inner subscriptions list. This Subscription can be used with\n     * `remove()` to remove the passed teardown logic from the inner subscriptions\n     * list.\n     */\n    Subscription.prototype.add = function (teardown) {\n        if (!teardown || (teardown === Subscription.EMPTY)) {\n            return Subscription.EMPTY;\n        }\n        if (teardown === this) {\n            return this;\n        }\n        var subscription = teardown;\n        switch (typeof teardown) {\n            case 'function':\n                subscription = new Subscription(teardown);\n            case 'object':\n                if (subscription.closed || typeof subscription.unsubscribe !== 'function') {\n                    return subscription;\n                }\n                else if (this.closed) {\n                    subscription.unsubscribe();\n                    return subscription;\n                }\n                else if (typeof subscription._addParent !== 'function' /* quack quack */) {\n                    var tmp = subscription;\n                    subscription = new Subscription();\n                    subscription._subscriptions = [tmp];\n                }\n                break;\n            default:\n                throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');\n        }\n        var subscriptions = this._subscriptions || (this._subscriptions = []);\n        subscriptions.push(subscription);\n        subscription._addParent(this);\n        return subscription;\n    };\n    /**\n     * Removes a Subscription from the internal list of subscriptions that will\n     * unsubscribe during the unsubscribe process of this Subscription.\n     * @param {Subscription} subscription The subscription to remove.\n     * @return {void}\n     */\n    Subscription.prototype.remove = function (subscription) {\n        var subscriptions = this._subscriptions;\n        if (subscriptions) {\n            var subscriptionIndex = subscriptions.indexOf(subscription);\n            if (subscriptionIndex !== -1) {\n                subscriptions.splice(subscriptionIndex, 1);\n            }\n        }\n    };\n    Subscription.prototype._addParent = function (parent) {\n        var _a = this, _parent = _a._parent, _parents = _a._parents;\n        if (!_parent || _parent === parent) {\n            // If we don't have a parent, or the new parent is the same as the\n            // current parent, then set this._parent to the new parent.\n            this._parent = parent;\n        }\n        else if (!_parents) {\n            // If there's already one parent, but not multiple, allocate an Array to\n            // store the rest of the parent Subscriptions.\n            this._parents = [parent];\n        }\n        else if (_parents.indexOf(parent) === -1) {\n            // Only add the new parent to the _parents list if it's not already there.\n            _parents.push(parent);\n        }\n    };\n    Subscription.EMPTY = (function (empty) {\n        empty.closed = true;\n        return empty;\n    }(new Subscription()));\n    return Subscription;\n}());\nexports.Subscription = Subscription;\nfunction flattenUnsubscriptionErrors(errors) {\n    return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError_1.UnsubscriptionError) ? err.errors : err); }, []);\n}\n//# sourceMappingURL=Subscription.js.map",
     "\"use strict\";\nvar Observable_1 = require('../../Observable');\nvar combineLatest_1 = require('../../observable/combineLatest');\nObservable_1.Observable.combineLatest = combineLatest_1.combineLatest;\n//# sourceMappingURL=combineLatest.js.map",
     "\"use strict\";\nvar Observable_1 = require('../../Observable');\nvar defer_1 = require('../../observable/defer');\nObservable_1.Observable.defer = defer_1.defer;\n//# sourceMappingURL=defer.js.map",
     "\"use strict\";\nvar isArray_1 = require('./util/isArray');\nvar isObject_1 = require('./util/isObject');\nvar isFunction_1 = require('./util/isFunction');\nvar tryCatch_1 = require('./util/tryCatch');\nvar errorObject_1 = require('./util/errorObject');\nvar UnsubscriptionError_1 = require('./util/UnsubscriptionError');\n/**\n * Represents a disposable resource, such as the execution of an Observable. A\n * Subscription has one important method, `unsubscribe`, that takes no argument\n * and just disposes the resource held by the subscription.\n *\n * Additionally, subscriptions may be grouped together through the `add()`\n * method, which will attach a child Subscription to the current Subscription.\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\n * will be unsubscribed as well.\n *\n * @class Subscription\n */\nvar Subscription = (function () {\n    /**\n     * @param {function(): void} [unsubscribe] A function describing how to\n     * perform the disposal of resources when the `unsubscribe` method is called.\n     */\n    function Subscription(unsubscribe) {\n        /**\n         * A flag to indicate whether this Subscription has already been unsubscribed.\n         * @type {boolean}\n         */\n        this.closed = false;\n        this._parent = null;\n        this._parents = null;\n        this._subscriptions = null;\n        if (unsubscribe) {\n            this._unsubscribe = unsubscribe;\n        }\n    }\n    /**\n     * Disposes the resources held by the subscription. May, for instance, cancel\n     * an ongoing Observable execution or cancel any other type of work that\n     * started when the Subscription was created.\n     * @return {void}\n     */\n    Subscription.prototype.unsubscribe = function () {\n        var hasErrors = false;\n        var errors;\n        if (this.closed) {\n            return;\n        }\n        var _a = this, _parent = _a._parent, _parents = _a._parents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;\n        this.closed = true;\n        this._parent = null;\n        this._parents = null;\n        // null out _subscriptions first so any child subscriptions that attempt\n        // to remove themselves from this subscription will noop\n        this._subscriptions = null;\n        var index = -1;\n        var len = _parents ? _parents.length : 0;\n        // if this._parent is null, then so is this._parents, and we\n        // don't have to remove ourselves from any parent subscriptions.\n        while (_parent) {\n            _parent.remove(this);\n            // if this._parents is null or index >= len,\n            // then _parent is set to null, and the loop exits\n            _parent = ++index < len && _parents[index] || null;\n        }\n        if (isFunction_1.isFunction(_unsubscribe)) {\n            var trial = tryCatch_1.tryCatch(_unsubscribe).call(this);\n            if (trial === errorObject_1.errorObject) {\n                hasErrors = true;\n                errors = errors || (errorObject_1.errorObject.e instanceof UnsubscriptionError_1.UnsubscriptionError ?\n                    flattenUnsubscriptionErrors(errorObject_1.errorObject.e.errors) : [errorObject_1.errorObject.e]);\n            }\n        }\n        if (isArray_1.isArray(_subscriptions)) {\n            index = -1;\n            len = _subscriptions.length;\n            while (++index < len) {\n                var sub = _subscriptions[index];\n                if (isObject_1.isObject(sub)) {\n                    var trial = tryCatch_1.tryCatch(sub.unsubscribe).call(sub);\n                    if (trial === errorObject_1.errorObject) {\n                        hasErrors = true;\n                        errors = errors || [];\n                        var err = errorObject_1.errorObject.e;\n                        if (err instanceof UnsubscriptionError_1.UnsubscriptionError) {\n                            errors = errors.concat(flattenUnsubscriptionErrors(err.errors));\n                        }\n                        else {\n                            errors.push(err);\n                        }\n                    }\n                }\n            }\n        }\n        if (hasErrors) {\n            throw new UnsubscriptionError_1.UnsubscriptionError(errors);\n        }\n    };\n    /**\n     * Adds a tear down to be called during the unsubscribe() of this\n     * Subscription.\n     *\n     * If the tear down being added is a subscription that is already\n     * unsubscribed, is the same reference `add` is being called on, or is\n     * `Subscription.EMPTY`, it will not be added.\n     *\n     * If this subscription is already in an `closed` state, the passed\n     * tear down logic will be executed immediately.\n     *\n     * @param {TeardownLogic} teardown The additional logic to execute on\n     * teardown.\n     * @return {Subscription} Returns the Subscription used or created to be\n     * added to the inner subscriptions list. This Subscription can be used with\n     * `remove()` to remove the passed teardown logic from the inner subscriptions\n     * list.\n     */\n    Subscription.prototype.add = function (teardown) {\n        if (!teardown || (teardown === Subscription.EMPTY)) {\n            return Subscription.EMPTY;\n        }\n        if (teardown === this) {\n            return this;\n        }\n        var subscription = teardown;\n        switch (typeof teardown) {\n            case 'function':\n                subscription = new Subscription(teardown);\n            case 'object':\n                if (subscription.closed || typeof subscription.unsubscribe !== 'function') {\n                    return subscription;\n                }\n                else if (this.closed) {\n                    subscription.unsubscribe();\n                    return subscription;\n                }\n                else if (typeof subscription._addParent !== 'function' /* quack quack */) {\n                    var tmp = subscription;\n                    subscription = new Subscription();\n                    subscription._subscriptions = [tmp];\n                }\n                break;\n            default:\n                throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');\n        }\n        var subscriptions = this._subscriptions || (this._subscriptions = []);\n        subscriptions.push(subscription);\n        subscription._addParent(this);\n        return subscription;\n    };\n    /**\n     * Removes a Subscription from the internal list of subscriptions that will\n     * unsubscribe during the unsubscribe process of this Subscription.\n     * @param {Subscription} subscription The subscription to remove.\n     * @return {void}\n     */\n    Subscription.prototype.remove = function (subscription) {\n        var subscriptions = this._subscriptions;\n        if (subscriptions) {\n            var subscriptionIndex = subscriptions.indexOf(subscription);\n            if (subscriptionIndex !== -1) {\n                subscriptions.splice(subscriptionIndex, 1);\n            }\n        }\n    };\n    Subscription.prototype._addParent = function (parent) {\n        var _a = this, _parent = _a._parent, _parents = _a._parents;\n        if (!_parent || _parent === parent) {\n            // If we don't have a parent, or the new parent is the same as the\n            // current parent, then set this._parent to the new parent.\n            this._parent = parent;\n        }\n        else if (!_parents) {\n            // If there's already one parent, but not multiple, allocate an Array to\n            // store the rest of the parent Subscriptions.\n            this._parents = [parent];\n        }\n        else if (_parents.indexOf(parent) === -1) {\n            // Only add the new parent to the _parents list if it's not already there.\n            _parents.push(parent);\n        }\n    };\n    Subscription.EMPTY = (function (empty) {\n        empty.closed = true;\n        return empty;\n    }(new Subscription()));\n    return Subscription;\n}());\nexports.Subscription = Subscription;\nfunction flattenUnsubscriptionErrors(errors) {\n    return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError_1.UnsubscriptionError) ? err.errors : err); }, []);\n}\n//# sourceMappingURL=Subscription.js.map",
     "\"use strict\";\nvar Observable_1 = require('../../Observable');\nvar combineLatest_1 = require('../../observable/combineLatest');\nObservable_1.Observable.combineLatest = combineLatest_1.combineLatest;\n//# sourceMappingURL=combineLatest.js.map",
     "\"use strict\";\nvar Observable_1 = require('../../Observable');\nvar defer_1 = require('../../observable/defer');\nObservable_1.Observable.defer = defer_1.defer;\n//# sourceMappingURL=defer.js.map",
     "\"use strict\";\nvar Observable_1 = require('../../Observable');\nvar zip_1 = require('../../operator/zip');\nObservable_1.Observable.prototype.zip = zip_1.zipProto;\n//# sourceMappingURL=zip.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('../Observable');\nvar ScalarObservable_1 = require('./ScalarObservable');\nvar EmptyObservable_1 = require('./EmptyObservable');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar ArrayLikeObservable = (function (_super) {\n    __extends(ArrayLikeObservable, _super);\n    function ArrayLikeObservable(arrayLike, scheduler) {\n        _super.call(this);\n        this.arrayLike = arrayLike;\n        this.scheduler = scheduler;\n        if (!scheduler && arrayLike.length === 1) {\n            this._isScalar = true;\n            this.value = arrayLike[0];\n        }\n    }\n    ArrayLikeObservable.create = function (arrayLike, scheduler) {\n        var length = arrayLike.length;\n        if (length === 0) {\n            return new EmptyObservable_1.EmptyObservable();\n        }\n        else if (length === 1) {\n            return new ScalarObservable_1.ScalarObservable(arrayLike[0], scheduler);\n        }\n        else {\n            return new ArrayLikeObservable(arrayLike, scheduler);\n        }\n    };\n    ArrayLikeObservable.dispatch = function (state) {\n        var arrayLike = state.arrayLike, index = state.index, length = state.length, subscriber = state.subscriber;\n        if (subscriber.closed) {\n            return;\n        }\n        if (index >= length) {\n            subscriber.complete();\n            return;\n        }\n        subscriber.next(arrayLike[index]);\n        state.index = index + 1;\n        this.schedule(state);\n    };\n    ArrayLikeObservable.prototype._subscribe = function (subscriber) {\n        var index = 0;\n        var _a = this, arrayLike = _a.arrayLike, scheduler = _a.scheduler;\n        var length = arrayLike.length;\n        if (scheduler) {\n            return scheduler.schedule(ArrayLikeObservable.dispatch, 0, {\n                arrayLike: arrayLike, index: index, length: length, subscriber: subscriber\n            });\n        }\n        else {\n            for (var i = 0; i < length && !subscriber.closed; i++) {\n                subscriber.next(arrayLike[i]);\n            }\n            subscriber.complete();\n        }\n    };\n    return ArrayLikeObservable;\n}(Observable_1.Observable));\nexports.ArrayLikeObservable = ArrayLikeObservable;\n//# sourceMappingURL=ArrayLikeObservable.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('../Observable');\nvar ScalarObservable_1 = require('./ScalarObservable');\nvar EmptyObservable_1 = require('./EmptyObservable');\nvar isScheduler_1 = require('../util/isScheduler');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar ArrayObservable = (function (_super) {\n    __extends(ArrayObservable, _super);\n    function ArrayObservable(array, scheduler) {\n        _super.call(this);\n        this.array = array;\n        this.scheduler = scheduler;\n        if (!scheduler && array.length === 1) {\n            this._isScalar = true;\n            this.value = array[0];\n        }\n    }\n    ArrayObservable.create = function (array, scheduler) {\n        return new ArrayObservable(array, scheduler);\n    };\n    /**\n     * Creates an Observable that emits some values you specify as arguments,\n     * immediately one after the other, and then emits a complete notification.\n     *\n     * <span class=\"informal\">Emits the arguments you provide, then completes.\n     * </span>\n     *\n     * <img src=\"./img/of.png\" width=\"100%\">\n     *\n     * This static operator is useful for creating a simple Observable that only\n     * emits the arguments given, and the complete notification thereafter. It can\n     * be used for composing with other Observables, such as with {@link concat}.\n     * By default, it uses a `null` IScheduler, which means the `next`\n     * notifications are sent synchronously, although with a different IScheduler\n     * it is possible to determine when those notifications will be delivered.\n     *\n     * @example <caption>Emit 10, 20, 30, then 'a', 'b', 'c', then start ticking every second.</caption>\n     * var numbers = Rx.Observable.of(10, 20, 30);\n     * var letters = Rx.Observable.of('a', 'b', 'c');\n     * var interval = Rx.Observable.interval(1000);\n     * var result = numbers.concat(letters).concat(interval);\n     * result.subscribe(x => console.log(x));\n     *\n     * @see {@link create}\n     * @see {@link empty}\n     * @see {@link never}\n     * @see {@link throw}\n     *\n     * @param {...T} values Arguments that represent `next` values to be emitted.\n     * @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling\n     * the emissions of the `next` notifications.\n     * @return {Observable<T>} An Observable that emits each given input value.\n     * @static true\n     * @name of\n     * @owner Observable\n     */\n    ArrayObservable.of = function () {\n        var array = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            array[_i - 0] = arguments[_i];\n        }\n        var scheduler = array[array.length - 1];\n        if (isScheduler_1.isScheduler(scheduler)) {\n            array.pop();\n        }\n        else {\n            scheduler = null;\n        }\n        var len = array.length;\n        if (len > 1) {\n            return new ArrayObservable(array, scheduler);\n        }\n        else if (len === 1) {\n            return new ScalarObservable_1.ScalarObservable(array[0], scheduler);\n        }\n        else {\n            return new EmptyObservable_1.EmptyObservable(scheduler);\n        }\n    };\n    ArrayObservable.dispatch = function (state) {\n        var array = state.array, index = state.index, count = state.count, subscriber = state.subscriber;\n        if (index >= count) {\n            subscriber.complete();\n            return;\n        }\n        subscriber.next(array[index]);\n        if (subscriber.closed) {\n            return;\n        }\n        state.index = index + 1;\n        this.schedule(state);\n    };\n    ArrayObservable.prototype._subscribe = function (subscriber) {\n        var index = 0;\n        var array = this.array;\n        var count = array.length;\n        var scheduler = this.scheduler;\n        if (scheduler) {\n            return scheduler.schedule(ArrayObservable.dispatch, 0, {\n                array: array, index: index, count: count, subscriber: subscriber\n            });\n        }\n        else {\n            for (var i = 0; i < count && !subscriber.closed; i++) {\n                subscriber.next(array[i]);\n            }\n            subscriber.complete();\n        }\n    };\n    return ArrayObservable;\n}(Observable_1.Observable));\nexports.ArrayObservable = ArrayObservable;\n//# sourceMappingURL=ArrayObservable.js.map",
     "\"use strict\";\nvar Observable_1 = require('../../Observable');\nvar zip_1 = require('../../operator/zip');\nObservable_1.Observable.prototype.zip = zip_1.zipProto;\n//# sourceMappingURL=zip.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('../Observable');\nvar ScalarObservable_1 = require('./ScalarObservable');\nvar EmptyObservable_1 = require('./EmptyObservable');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar ArrayLikeObservable = (function (_super) {\n    __extends(ArrayLikeObservable, _super);\n    function ArrayLikeObservable(arrayLike, scheduler) {\n        _super.call(this);\n        this.arrayLike = arrayLike;\n        this.scheduler = scheduler;\n        if (!scheduler && arrayLike.length === 1) {\n            this._isScalar = true;\n            this.value = arrayLike[0];\n        }\n    }\n    ArrayLikeObservable.create = function (arrayLike, scheduler) {\n        var length = arrayLike.length;\n        if (length === 0) {\n            return new EmptyObservable_1.EmptyObservable();\n        }\n        else if (length === 1) {\n            return new ScalarObservable_1.ScalarObservable(arrayLike[0], scheduler);\n        }\n        else {\n            return new ArrayLikeObservable(arrayLike, scheduler);\n        }\n    };\n    ArrayLikeObservable.dispatch = function (state) {\n        var arrayLike = state.arrayLike, index = state.index, length = state.length, subscriber = state.subscriber;\n        if (subscriber.closed) {\n            return;\n        }\n        if (index >= length) {\n            subscriber.complete();\n            return;\n        }\n        subscriber.next(arrayLike[index]);\n        state.index = index + 1;\n        this.schedule(state);\n    };\n    ArrayLikeObservable.prototype._subscribe = function (subscriber) {\n        var index = 0;\n        var _a = this, arrayLike = _a.arrayLike, scheduler = _a.scheduler;\n        var length = arrayLike.length;\n        if (scheduler) {\n            return scheduler.schedule(ArrayLikeObservable.dispatch, 0, {\n                arrayLike: arrayLike, index: index, length: length, subscriber: subscriber\n            });\n        }\n        else {\n            for (var i = 0; i < length && !subscriber.closed; i++) {\n                subscriber.next(arrayLike[i]);\n            }\n            subscriber.complete();\n        }\n    };\n    return ArrayLikeObservable;\n}(Observable_1.Observable));\nexports.ArrayLikeObservable = ArrayLikeObservable;\n//# sourceMappingURL=ArrayLikeObservable.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('../Observable');\nvar ScalarObservable_1 = require('./ScalarObservable');\nvar EmptyObservable_1 = require('./EmptyObservable');\nvar isScheduler_1 = require('../util/isScheduler');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar ArrayObservable = (function (_super) {\n    __extends(ArrayObservable, _super);\n    function ArrayObservable(array, scheduler) {\n        _super.call(this);\n        this.array = array;\n        this.scheduler = scheduler;\n        if (!scheduler && array.length === 1) {\n            this._isScalar = true;\n            this.value = array[0];\n        }\n    }\n    ArrayObservable.create = function (array, scheduler) {\n        return new ArrayObservable(array, scheduler);\n    };\n    /**\n     * Creates an Observable that emits some values you specify as arguments,\n     * immediately one after the other, and then emits a complete notification.\n     *\n     * <span class=\"informal\">Emits the arguments you provide, then completes.\n     * </span>\n     *\n     * <img src=\"./img/of.png\" width=\"100%\">\n     *\n     * This static operator is useful for creating a simple Observable that only\n     * emits the arguments given, and the complete notification thereafter. It can\n     * be used for composing with other Observables, such as with {@link concat}.\n     * By default, it uses a `null` IScheduler, which means the `next`\n     * notifications are sent synchronously, although with a different IScheduler\n     * it is possible to determine when those notifications will be delivered.\n     *\n     * @example <caption>Emit 10, 20, 30, then 'a', 'b', 'c', then start ticking every second.</caption>\n     * var numbers = Rx.Observable.of(10, 20, 30);\n     * var letters = Rx.Observable.of('a', 'b', 'c');\n     * var interval = Rx.Observable.interval(1000);\n     * var result = numbers.concat(letters).concat(interval);\n     * result.subscribe(x => console.log(x));\n     *\n     * @see {@link create}\n     * @see {@link empty}\n     * @see {@link never}\n     * @see {@link throw}\n     *\n     * @param {...T} values Arguments that represent `next` values to be emitted.\n     * @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling\n     * the emissions of the `next` notifications.\n     * @return {Observable<T>} An Observable that emits each given input value.\n     * @static true\n     * @name of\n     * @owner Observable\n     */\n    ArrayObservable.of = function () {\n        var array = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            array[_i - 0] = arguments[_i];\n        }\n        var scheduler = array[array.length - 1];\n        if (isScheduler_1.isScheduler(scheduler)) {\n            array.pop();\n        }\n        else {\n            scheduler = null;\n        }\n        var len = array.length;\n        if (len > 1) {\n            return new ArrayObservable(array, scheduler);\n        }\n        else if (len === 1) {\n            return new ScalarObservable_1.ScalarObservable(array[0], scheduler);\n        }\n        else {\n            return new EmptyObservable_1.EmptyObservable(scheduler);\n        }\n    };\n    ArrayObservable.dispatch = function (state) {\n        var array = state.array, index = state.index, count = state.count, subscriber = state.subscriber;\n        if (index >= count) {\n            subscriber.complete();\n            return;\n        }\n        subscriber.next(array[index]);\n        if (subscriber.closed) {\n            return;\n        }\n        state.index = index + 1;\n        this.schedule(state);\n    };\n    ArrayObservable.prototype._subscribe = function (subscriber) {\n        var index = 0;\n        var array = this.array;\n        var count = array.length;\n        var scheduler = this.scheduler;\n        if (scheduler) {\n            return scheduler.schedule(ArrayObservable.dispatch, 0, {\n                array: array, index: index, count: count, subscriber: subscriber\n            });\n        }\n        else {\n            for (var i = 0; i < count && !subscriber.closed; i++) {\n                subscriber.next(array[i]);\n            }\n            subscriber.complete();\n        }\n    };\n    return ArrayObservable;\n}(Observable_1.Observable));\nexports.ArrayObservable = ArrayObservable;\n//# sourceMappingURL=ArrayObservable.js.map",
-    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subject_1 = require('../Subject');\nvar Observable_1 = require('../Observable');\nvar Subscriber_1 = require('../Subscriber');\nvar Subscription_1 = require('../Subscription');\n/**\n * @class ConnectableObservable<T>\n */\nvar ConnectableObservable = (function (_super) {\n    __extends(ConnectableObservable, _super);\n    function ConnectableObservable(source, subjectFactory) {\n        _super.call(this);\n        this.source = source;\n        this.subjectFactory = subjectFactory;\n        this._refCount = 0;\n    }\n    ConnectableObservable.prototype._subscribe = function (subscriber) {\n        return this.getSubject().subscribe(subscriber);\n    };\n    ConnectableObservable.prototype.getSubject = function () {\n        var subject = this._subject;\n        if (!subject || subject.isStopped) {\n            this._subject = this.subjectFactory();\n        }\n        return this._subject;\n    };\n    ConnectableObservable.prototype.connect = function () {\n        var connection = this._connection;\n        if (!connection) {\n            connection = this._connection = new Subscription_1.Subscription();\n            connection.add(this.source\n                .subscribe(new ConnectableSubscriber(this.getSubject(), this)));\n            if (connection.closed) {\n                this._connection = null;\n                connection = Subscription_1.Subscription.EMPTY;\n            }\n            else {\n                this._connection = connection;\n            }\n        }\n        return connection;\n    };\n    ConnectableObservable.prototype.refCount = function () {\n        return this.lift(new RefCountOperator(this));\n    };\n    return ConnectableObservable;\n}(Observable_1.Observable));\nexports.ConnectableObservable = ConnectableObservable;\nexports.connectableObservableDescriptor = {\n    operator: { value: null },\n    _refCount: { value: 0, writable: true },\n    _subscribe: { value: ConnectableObservable.prototype._subscribe },\n    getSubject: { value: ConnectableObservable.prototype.getSubject },\n    connect: { value: ConnectableObservable.prototype.connect },\n    refCount: { value: ConnectableObservable.prototype.refCount }\n};\nvar ConnectableSubscriber = (function (_super) {\n    __extends(ConnectableSubscriber, _super);\n    function ConnectableSubscriber(destination, connectable) {\n        _super.call(this, destination);\n        this.connectable = connectable;\n    }\n    ConnectableSubscriber.prototype._error = function (err) {\n        this._unsubscribe();\n        _super.prototype._error.call(this, err);\n    };\n    ConnectableSubscriber.prototype._complete = function () {\n        this._unsubscribe();\n        _super.prototype._complete.call(this);\n    };\n    ConnectableSubscriber.prototype._unsubscribe = function () {\n        var connectable = this.connectable;\n        if (connectable) {\n            this.connectable = null;\n            var connection = connectable._connection;\n            connectable._refCount = 0;\n            connectable._subject = null;\n            connectable._connection = null;\n            if (connection) {\n                connection.unsubscribe();\n            }\n        }\n    };\n    return ConnectableSubscriber;\n}(Subject_1.SubjectSubscriber));\nvar RefCountOperator = (function () {\n    function RefCountOperator(connectable) {\n        this.connectable = connectable;\n    }\n    RefCountOperator.prototype.call = function (subscriber, source) {\n        var connectable = this.connectable;\n        connectable._refCount++;\n        var refCounter = new RefCountSubscriber(subscriber, connectable);\n        var subscription = source.subscribe(refCounter);\n        if (!refCounter.closed) {\n            refCounter.connection = connectable.connect();\n        }\n        return subscription;\n    };\n    return RefCountOperator;\n}());\nvar RefCountSubscriber = (function (_super) {\n    __extends(RefCountSubscriber, _super);\n    function RefCountSubscriber(destination, connectable) {\n        _super.call(this, destination);\n        this.connectable = connectable;\n    }\n    RefCountSubscriber.prototype._unsubscribe = function () {\n        var connectable = this.connectable;\n        if (!connectable) {\n            this.connection = null;\n            return;\n        }\n        this.connectable = null;\n        var refCount = connectable._refCount;\n        if (refCount <= 0) {\n            this.connection = null;\n            return;\n        }\n        connectable._refCount = refCount - 1;\n        if (refCount > 1) {\n            this.connection = null;\n            return;\n        }\n        ///\n        // Compare the local RefCountSubscriber's connection Subscription to the\n        // connection Subscription on the shared ConnectableObservable. In cases\n        // where the ConnectableObservable source synchronously emits values, and\n        // the RefCountSubscriber's downstream Observers synchronously unsubscribe,\n        // execution continues to here before the RefCountOperator has a chance to\n        // supply the RefCountSubscriber with the shared connection Subscription.\n        // For example:\n        // ```\n        // Observable.range(0, 10)\n        //   .publish()\n        //   .refCount()\n        //   .take(5)\n        //   .subscribe();\n        // ```\n        // In order to account for this case, RefCountSubscriber should only dispose\n        // the ConnectableObservable's shared connection Subscription if the\n        // connection Subscription exists, *and* either:\n        //   a. RefCountSubscriber doesn't have a reference to the shared connection\n        //      Subscription yet, or,\n        //   b. RefCountSubscriber's connection Subscription reference is identical\n        //      to the shared connection Subscription\n        ///\n        var connection = this.connection;\n        var sharedConnection = connectable._connection;\n        this.connection = null;\n        if (sharedConnection && (!connection || sharedConnection === connection)) {\n            sharedConnection.unsubscribe();\n        }\n    };\n    return RefCountSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=ConnectableObservable.js.map",
+    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subject_1 = require('../Subject');\nvar Observable_1 = require('../Observable');\nvar Subscriber_1 = require('../Subscriber');\nvar Subscription_1 = require('../Subscription');\n/**\n * @class ConnectableObservable<T>\n */\nvar ConnectableObservable = (function (_super) {\n    __extends(ConnectableObservable, _super);\n    function ConnectableObservable(source, subjectFactory) {\n        _super.call(this);\n        this.source = source;\n        this.subjectFactory = subjectFactory;\n        this._refCount = 0;\n        this._isComplete = false;\n    }\n    ConnectableObservable.prototype._subscribe = function (subscriber) {\n        return this.getSubject().subscribe(subscriber);\n    };\n    ConnectableObservable.prototype.getSubject = function () {\n        var subject = this._subject;\n        if (!subject || subject.isStopped) {\n            this._subject = this.subjectFactory();\n        }\n        return this._subject;\n    };\n    ConnectableObservable.prototype.connect = function () {\n        var connection = this._connection;\n        if (!connection) {\n            this._isComplete = false;\n            connection = this._connection = new Subscription_1.Subscription();\n            connection.add(this.source\n                .subscribe(new ConnectableSubscriber(this.getSubject(), this)));\n            if (connection.closed) {\n                this._connection = null;\n                connection = Subscription_1.Subscription.EMPTY;\n            }\n            else {\n                this._connection = connection;\n            }\n        }\n        return connection;\n    };\n    ConnectableObservable.prototype.refCount = function () {\n        return this.lift(new RefCountOperator(this));\n    };\n    return ConnectableObservable;\n}(Observable_1.Observable));\nexports.ConnectableObservable = ConnectableObservable;\nvar connectableProto = ConnectableObservable.prototype;\nexports.connectableObservableDescriptor = {\n    operator: { value: null },\n    _refCount: { value: 0, writable: true },\n    _subject: { value: null, writable: true },\n    _connection: { value: null, writable: true },\n    _subscribe: { value: connectableProto._subscribe },\n    _isComplete: { value: connectableProto._isComplete, writable: true },\n    getSubject: { value: connectableProto.getSubject },\n    connect: { value: connectableProto.connect },\n    refCount: { value: connectableProto.refCount }\n};\nvar ConnectableSubscriber = (function (_super) {\n    __extends(ConnectableSubscriber, _super);\n    function ConnectableSubscriber(destination, connectable) {\n        _super.call(this, destination);\n        this.connectable = connectable;\n    }\n    ConnectableSubscriber.prototype._error = function (err) {\n        this._unsubscribe();\n        _super.prototype._error.call(this, err);\n    };\n    ConnectableSubscriber.prototype._complete = function () {\n        this.connectable._isComplete = true;\n        this._unsubscribe();\n        _super.prototype._complete.call(this);\n    };\n    ConnectableSubscriber.prototype._unsubscribe = function () {\n        var connectable = this.connectable;\n        if (connectable) {\n            this.connectable = null;\n            var connection = connectable._connection;\n            connectable._refCount = 0;\n            connectable._subject = null;\n            connectable._connection = null;\n            if (connection) {\n                connection.unsubscribe();\n            }\n        }\n    };\n    return ConnectableSubscriber;\n}(Subject_1.SubjectSubscriber));\nvar RefCountOperator = (function () {\n    function RefCountOperator(connectable) {\n        this.connectable = connectable;\n    }\n    RefCountOperator.prototype.call = function (subscriber, source) {\n        var connectable = this.connectable;\n        connectable._refCount++;\n        var refCounter = new RefCountSubscriber(subscriber, connectable);\n        var subscription = source.subscribe(refCounter);\n        if (!refCounter.closed) {\n            refCounter.connection = connectable.connect();\n        }\n        return subscription;\n    };\n    return RefCountOperator;\n}());\nvar RefCountSubscriber = (function (_super) {\n    __extends(RefCountSubscriber, _super);\n    function RefCountSubscriber(destination, connectable) {\n        _super.call(this, destination);\n        this.connectable = connectable;\n    }\n    RefCountSubscriber.prototype._unsubscribe = function () {\n        var connectable = this.connectable;\n        if (!connectable) {\n            this.connection = null;\n            return;\n        }\n        this.connectable = null;\n        var refCount = connectable._refCount;\n        if (refCount <= 0) {\n            this.connection = null;\n            return;\n        }\n        connectable._refCount = refCount - 1;\n        if (refCount > 1) {\n            this.connection = null;\n            return;\n        }\n        ///\n        // Compare the local RefCountSubscriber's connection Subscription to the\n        // connection Subscription on the shared ConnectableObservable. In cases\n        // where the ConnectableObservable source synchronously emits values, and\n        // the RefCountSubscriber's downstream Observers synchronously unsubscribe,\n        // execution continues to here before the RefCountOperator has a chance to\n        // supply the RefCountSubscriber with the shared connection Subscription.\n        // For example:\n        // ```\n        // Observable.range(0, 10)\n        //   .publish()\n        //   .refCount()\n        //   .take(5)\n        //   .subscribe();\n        // ```\n        // In order to account for this case, RefCountSubscriber should only dispose\n        // the ConnectableObservable's shared connection Subscription if the\n        // connection Subscription exists, *and* either:\n        //   a. RefCountSubscriber doesn't have a reference to the shared connection\n        //      Subscription yet, or,\n        //   b. RefCountSubscriber's connection Subscription reference is identical\n        //      to the shared connection Subscription\n        ///\n        var connection = this.connection;\n        var sharedConnection = connectable._connection;\n        this.connection = null;\n        if (sharedConnection && (!connection || sharedConnection === connection)) {\n            sharedConnection.unsubscribe();\n        }\n    };\n    return RefCountSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=ConnectableObservable.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('../Observable');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\nvar OuterSubscriber_1 = require('../OuterSubscriber');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar DeferObservable = (function (_super) {\n    __extends(DeferObservable, _super);\n    function DeferObservable(observableFactory) {\n        _super.call(this);\n        this.observableFactory = observableFactory;\n    }\n    /**\n     * Creates an Observable that, on subscribe, calls an Observable factory to\n     * make an Observable for each new Observer.\n     *\n     * <span class=\"informal\">Creates the Observable lazily, that is, only when it\n     * is subscribed.\n     * </span>\n     *\n     * <img src=\"./img/defer.png\" width=\"100%\">\n     *\n     * `defer` allows you to create the Observable only when the Observer\n     * subscribes, and create a fresh Observable for each Observer. It waits until\n     * an Observer subscribes to it, and then it generates an Observable,\n     * typically with an Observable factory function. It does this afresh for each\n     * subscriber, so although each subscriber may think it is subscribing to the\n     * same Observable, in fact each subscriber gets its own individual\n     * Observable.\n     *\n     * @example <caption>Subscribe to either an Observable of clicks or an Observable of interval, at random</caption>\n     * var clicksOrInterval = Rx.Observable.defer(function () {\n     *   if (Math.random() > 0.5) {\n     *     return Rx.Observable.fromEvent(document, 'click');\n     *   } else {\n     *     return Rx.Observable.interval(1000);\n     *   }\n     * });\n     * clicksOrInterval.subscribe(x => console.log(x));\n     *\n     * // Results in the following behavior:\n     * // If the result of Math.random() is greater than 0.5 it will listen\n     * // for clicks anywhere on the \"document\"; when document is clicked it\n     * // will log a MouseEvent object to the console. If the result is less\n     * // than 0.5 it will emit ascending numbers, one every second(1000ms).\n     *\n     * @see {@link create}\n     *\n     * @param {function(): SubscribableOrPromise} observableFactory The Observable\n     * factory function to invoke for each Observer that subscribes to the output\n     * Observable. May also return a Promise, which will be converted on the fly\n     * to an Observable.\n     * @return {Observable} An Observable whose Observers' subscriptions trigger\n     * an invocation of the given Observable factory function.\n     * @static true\n     * @name defer\n     * @owner Observable\n     */\n    DeferObservable.create = function (observableFactory) {\n        return new DeferObservable(observableFactory);\n    };\n    DeferObservable.prototype._subscribe = function (subscriber) {\n        return new DeferSubscriber(subscriber, this.observableFactory);\n    };\n    return DeferObservable;\n}(Observable_1.Observable));\nexports.DeferObservable = DeferObservable;\nvar DeferSubscriber = (function (_super) {\n    __extends(DeferSubscriber, _super);\n    function DeferSubscriber(destination, factory) {\n        _super.call(this, destination);\n        this.factory = factory;\n        this.tryDefer();\n    }\n    DeferSubscriber.prototype.tryDefer = function () {\n        try {\n            this._callFactory();\n        }\n        catch (err) {\n            this._error(err);\n        }\n    };\n    DeferSubscriber.prototype._callFactory = function () {\n        var result = this.factory();\n        if (result) {\n            this.add(subscribeToResult_1.subscribeToResult(this, result));\n        }\n    };\n    return DeferSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=DeferObservable.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('../Observable');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar EmptyObservable = (function (_super) {\n    __extends(EmptyObservable, _super);\n    function EmptyObservable(scheduler) {\n        _super.call(this);\n        this.scheduler = scheduler;\n    }\n    /**\n     * Creates an Observable that emits no items to the Observer and immediately\n     * emits a complete notification.\n     *\n     * <span class=\"informal\">Just emits 'complete', and nothing else.\n     * </span>\n     *\n     * <img src=\"./img/empty.png\" width=\"100%\">\n     *\n     * This static operator is useful for creating a simple Observable that only\n     * emits the complete notification. It can be used for composing with other\n     * Observables, such as in a {@link mergeMap}.\n     *\n     * @example <caption>Emit the number 7, then complete.</caption>\n     * var result = Rx.Observable.empty().startWith(7);\n     * result.subscribe(x => console.log(x));\n     *\n     * @example <caption>Map and flatten only odd numbers to the sequence 'a', 'b', 'c'</caption>\n     * var interval = Rx.Observable.interval(1000);\n     * var result = interval.mergeMap(x =>\n     *   x % 2 === 1 ? Rx.Observable.of('a', 'b', 'c') : Rx.Observable.empty()\n     * );\n     * result.subscribe(x => console.log(x));\n     *\n     * // Results in the following to the console:\n     * // x is equal to the count on the interval eg(0,1,2,3,...)\n     * // x will occur every 1000ms\n     * // if x % 2 is equal to 1 print abc\n     * // if x % 2 is not equal to 1 nothing will be output\n     *\n     * @see {@link create}\n     * @see {@link never}\n     * @see {@link of}\n     * @see {@link throw}\n     *\n     * @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling\n     * the emission of the complete notification.\n     * @return {Observable} An \"empty\" Observable: emits only the complete\n     * notification.\n     * @static true\n     * @name empty\n     * @owner Observable\n     */\n    EmptyObservable.create = function (scheduler) {\n        return new EmptyObservable(scheduler);\n    };\n    EmptyObservable.dispatch = function (arg) {\n        var subscriber = arg.subscriber;\n        subscriber.complete();\n    };\n    EmptyObservable.prototype._subscribe = function (subscriber) {\n        var scheduler = this.scheduler;\n        if (scheduler) {\n            return scheduler.schedule(EmptyObservable.dispatch, 0, { subscriber: subscriber });\n        }\n        else {\n            subscriber.complete();\n        }\n    };\n    return EmptyObservable;\n}(Observable_1.Observable));\nexports.EmptyObservable = EmptyObservable;\n//# sourceMappingURL=EmptyObservable.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('../Observable');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar ErrorObservable = (function (_super) {\n    __extends(ErrorObservable, _super);\n    function ErrorObservable(error, scheduler) {\n        _super.call(this);\n        this.error = error;\n        this.scheduler = scheduler;\n    }\n    /**\n     * Creates an Observable that emits no items to the Observer and immediately\n     * emits an error notification.\n     *\n     * <span class=\"informal\">Just emits 'error', and nothing else.\n     * </span>\n     *\n     * <img src=\"./img/throw.png\" width=\"100%\">\n     *\n     * This static operator is useful for creating a simple Observable that only\n     * emits the error notification. It can be used for composing with other\n     * Observables, such as in a {@link mergeMap}.\n     *\n     * @example <caption>Emit the number 7, then emit an error.</caption>\n     * var result = Rx.Observable.throw(new Error('oops!')).startWith(7);\n     * result.subscribe(x => console.log(x), e => console.error(e));\n     *\n     * @example <caption>Map and flatten numbers to the sequence 'a', 'b', 'c', but throw an error for 13</caption>\n     * var interval = Rx.Observable.interval(1000);\n     * var result = interval.mergeMap(x =>\n     *   x === 13 ?\n     *     Rx.Observable.throw('Thirteens are bad') :\n     *     Rx.Observable.of('a', 'b', 'c')\n     * );\n     * result.subscribe(x => console.log(x), e => console.error(e));\n     *\n     * @see {@link create}\n     * @see {@link empty}\n     * @see {@link never}\n     * @see {@link of}\n     *\n     * @param {any} error The particular Error to pass to the error notification.\n     * @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling\n     * the emission of the error notification.\n     * @return {Observable} An error Observable: emits only the error notification\n     * using the given error argument.\n     * @static true\n     * @name throw\n     * @owner Observable\n     */\n    ErrorObservable.create = function (error, scheduler) {\n        return new ErrorObservable(error, scheduler);\n    };\n    ErrorObservable.dispatch = function (arg) {\n        var error = arg.error, subscriber = arg.subscriber;\n        subscriber.error(error);\n    };\n    ErrorObservable.prototype._subscribe = function (subscriber) {\n        var error = this.error;\n        var scheduler = this.scheduler;\n        if (scheduler) {\n            return scheduler.schedule(ErrorObservable.dispatch, 0, {\n                error: error, subscriber: subscriber\n            });\n        }\n        else {\n            subscriber.error(error);\n        }\n    };\n    return ErrorObservable;\n}(Observable_1.Observable));\nexports.ErrorObservable = ErrorObservable;\n//# sourceMappingURL=ErrorObservable.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('../Observable');\nvar tryCatch_1 = require('../util/tryCatch');\nvar isFunction_1 = require('../util/isFunction');\nvar errorObject_1 = require('../util/errorObject');\nvar Subscription_1 = require('../Subscription');\nvar toString = Object.prototype.toString;\nfunction isNodeStyleEventEmitter(sourceObj) {\n    return !!sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';\n}\nfunction isJQueryStyleEventEmitter(sourceObj) {\n    return !!sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';\n}\nfunction isNodeList(sourceObj) {\n    return !!sourceObj && toString.call(sourceObj) === '[object NodeList]';\n}\nfunction isHTMLCollection(sourceObj) {\n    return !!sourceObj && toString.call(sourceObj) === '[object HTMLCollection]';\n}\nfunction isEventTarget(sourceObj) {\n    return !!sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';\n}\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar FromEventObservable = (function (_super) {\n    __extends(FromEventObservable, _super);\n    function FromEventObservable(sourceObj, eventName, selector, options) {\n        _super.call(this);\n        this.sourceObj = sourceObj;\n        this.eventName = eventName;\n        this.selector = selector;\n        this.options = options;\n    }\n    /* tslint:enable:max-line-length */\n    /**\n     * Creates an Observable that emits events of a specific type coming from the\n     * given event target.\n     *\n     * <span class=\"informal\">Creates an Observable from DOM events, or Node\n     * EventEmitter events or others.</span>\n     *\n     * <img src=\"./img/fromEvent.png\" width=\"100%\">\n     *\n     * Creates an Observable by attaching an event listener to an \"event target\",\n     * which may be an object with `addEventListener` and `removeEventListener`,\n     * a Node.js EventEmitter, a jQuery style EventEmitter, a NodeList from the\n     * DOM, or an HTMLCollection from the DOM. The event handler is attached when\n     * the output Observable is subscribed, and removed when the Subscription is\n     * unsubscribed.\n     *\n     * @example <caption>Emits clicks happening on the DOM document</caption>\n     * var clicks = Rx.Observable.fromEvent(document, 'click');\n     * clicks.subscribe(x => console.log(x));\n     *\n     * // Results in:\n     * // MouseEvent object logged to console everytime a click\n     * // occurs on the document.\n     *\n     * @see {@link from}\n     * @see {@link fromEventPattern}\n     *\n     * @param {EventTargetLike} target The DOMElement, event target, Node.js\n     * EventEmitter, NodeList or HTMLCollection to attach the event handler to.\n     * @param {string} eventName The event name of interest, being emitted by the\n     * `target`.\n     * @param {EventListenerOptions} [options] Options to pass through to addEventListener\n     * @param {SelectorMethodSignature<T>} [selector] An optional function to\n     * post-process results. It takes the arguments from the event handler and\n     * should return a single value.\n     * @return {Observable<T>}\n     * @static true\n     * @name fromEvent\n     * @owner Observable\n     */\n    FromEventObservable.create = function (target, eventName, options, selector) {\n        if (isFunction_1.isFunction(options)) {\n            selector = options;\n            options = undefined;\n        }\n        return new FromEventObservable(target, eventName, selector, options);\n    };\n    FromEventObservable.setupSubscription = function (sourceObj, eventName, handler, subscriber, options) {\n        var unsubscribe;\n        if (isNodeList(sourceObj) || isHTMLCollection(sourceObj)) {\n            for (var i = 0, len = sourceObj.length; i < len; i++) {\n                FromEventObservable.setupSubscription(sourceObj[i], eventName, handler, subscriber, options);\n            }\n        }\n        else if (isEventTarget(sourceObj)) {\n            var source_1 = sourceObj;\n            sourceObj.addEventListener(eventName, handler, options);\n            unsubscribe = function () { return source_1.removeEventListener(eventName, handler); };\n        }\n        else if (isJQueryStyleEventEmitter(sourceObj)) {\n            var source_2 = sourceObj;\n            sourceObj.on(eventName, handler);\n            unsubscribe = function () { return source_2.off(eventName, handler); };\n        }\n        else if (isNodeStyleEventEmitter(sourceObj)) {\n            var source_3 = sourceObj;\n            sourceObj.addListener(eventName, handler);\n            unsubscribe = function () { return source_3.removeListener(eventName, handler); };\n        }\n        else {\n            throw new TypeError('Invalid event target');\n        }\n        subscriber.add(new Subscription_1.Subscription(unsubscribe));\n    };\n    FromEventObservable.prototype._subscribe = function (subscriber) {\n        var sourceObj = this.sourceObj;\n        var eventName = this.eventName;\n        var options = this.options;\n        var selector = this.selector;\n        var handler = selector ? function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i - 0] = arguments[_i];\n            }\n            var result = tryCatch_1.tryCatch(selector).apply(void 0, args);\n            if (result === errorObject_1.errorObject) {\n                subscriber.error(errorObject_1.errorObject.e);\n            }\n            else {\n                subscriber.next(result);\n            }\n        } : function (e) { return subscriber.next(e); };\n        FromEventObservable.setupSubscription(sourceObj, eventName, handler, subscriber, options);\n    };\n    return FromEventObservable;\n}(Observable_1.Observable));\nexports.FromEventObservable = FromEventObservable;\n//# sourceMappingURL=FromEventObservable.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('../Observable');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\nvar OuterSubscriber_1 = require('../OuterSubscriber');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar DeferObservable = (function (_super) {\n    __extends(DeferObservable, _super);\n    function DeferObservable(observableFactory) {\n        _super.call(this);\n        this.observableFactory = observableFactory;\n    }\n    /**\n     * Creates an Observable that, on subscribe, calls an Observable factory to\n     * make an Observable for each new Observer.\n     *\n     * <span class=\"informal\">Creates the Observable lazily, that is, only when it\n     * is subscribed.\n     * </span>\n     *\n     * <img src=\"./img/defer.png\" width=\"100%\">\n     *\n     * `defer` allows you to create the Observable only when the Observer\n     * subscribes, and create a fresh Observable for each Observer. It waits until\n     * an Observer subscribes to it, and then it generates an Observable,\n     * typically with an Observable factory function. It does this afresh for each\n     * subscriber, so although each subscriber may think it is subscribing to the\n     * same Observable, in fact each subscriber gets its own individual\n     * Observable.\n     *\n     * @example <caption>Subscribe to either an Observable of clicks or an Observable of interval, at random</caption>\n     * var clicksOrInterval = Rx.Observable.defer(function () {\n     *   if (Math.random() > 0.5) {\n     *     return Rx.Observable.fromEvent(document, 'click');\n     *   } else {\n     *     return Rx.Observable.interval(1000);\n     *   }\n     * });\n     * clicksOrInterval.subscribe(x => console.log(x));\n     *\n     * // Results in the following behavior:\n     * // If the result of Math.random() is greater than 0.5 it will listen\n     * // for clicks anywhere on the \"document\"; when document is clicked it\n     * // will log a MouseEvent object to the console. If the result is less\n     * // than 0.5 it will emit ascending numbers, one every second(1000ms).\n     *\n     * @see {@link create}\n     *\n     * @param {function(): SubscribableOrPromise} observableFactory The Observable\n     * factory function to invoke for each Observer that subscribes to the output\n     * Observable. May also return a Promise, which will be converted on the fly\n     * to an Observable.\n     * @return {Observable} An Observable whose Observers' subscriptions trigger\n     * an invocation of the given Observable factory function.\n     * @static true\n     * @name defer\n     * @owner Observable\n     */\n    DeferObservable.create = function (observableFactory) {\n        return new DeferObservable(observableFactory);\n    };\n    DeferObservable.prototype._subscribe = function (subscriber) {\n        return new DeferSubscriber(subscriber, this.observableFactory);\n    };\n    return DeferObservable;\n}(Observable_1.Observable));\nexports.DeferObservable = DeferObservable;\nvar DeferSubscriber = (function (_super) {\n    __extends(DeferSubscriber, _super);\n    function DeferSubscriber(destination, factory) {\n        _super.call(this, destination);\n        this.factory = factory;\n        this.tryDefer();\n    }\n    DeferSubscriber.prototype.tryDefer = function () {\n        try {\n            this._callFactory();\n        }\n        catch (err) {\n            this._error(err);\n        }\n    };\n    DeferSubscriber.prototype._callFactory = function () {\n        var result = this.factory();\n        if (result) {\n            this.add(subscribeToResult_1.subscribeToResult(this, result));\n        }\n    };\n    return DeferSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=DeferObservable.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('../Observable');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar EmptyObservable = (function (_super) {\n    __extends(EmptyObservable, _super);\n    function EmptyObservable(scheduler) {\n        _super.call(this);\n        this.scheduler = scheduler;\n    }\n    /**\n     * Creates an Observable that emits no items to the Observer and immediately\n     * emits a complete notification.\n     *\n     * <span class=\"informal\">Just emits 'complete', and nothing else.\n     * </span>\n     *\n     * <img src=\"./img/empty.png\" width=\"100%\">\n     *\n     * This static operator is useful for creating a simple Observable that only\n     * emits the complete notification. It can be used for composing with other\n     * Observables, such as in a {@link mergeMap}.\n     *\n     * @example <caption>Emit the number 7, then complete.</caption>\n     * var result = Rx.Observable.empty().startWith(7);\n     * result.subscribe(x => console.log(x));\n     *\n     * @example <caption>Map and flatten only odd numbers to the sequence 'a', 'b', 'c'</caption>\n     * var interval = Rx.Observable.interval(1000);\n     * var result = interval.mergeMap(x =>\n     *   x % 2 === 1 ? Rx.Observable.of('a', 'b', 'c') : Rx.Observable.empty()\n     * );\n     * result.subscribe(x => console.log(x));\n     *\n     * // Results in the following to the console:\n     * // x is equal to the count on the interval eg(0,1,2,3,...)\n     * // x will occur every 1000ms\n     * // if x % 2 is equal to 1 print abc\n     * // if x % 2 is not equal to 1 nothing will be output\n     *\n     * @see {@link create}\n     * @see {@link never}\n     * @see {@link of}\n     * @see {@link throw}\n     *\n     * @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling\n     * the emission of the complete notification.\n     * @return {Observable} An \"empty\" Observable: emits only the complete\n     * notification.\n     * @static true\n     * @name empty\n     * @owner Observable\n     */\n    EmptyObservable.create = function (scheduler) {\n        return new EmptyObservable(scheduler);\n    };\n    EmptyObservable.dispatch = function (arg) {\n        var subscriber = arg.subscriber;\n        subscriber.complete();\n    };\n    EmptyObservable.prototype._subscribe = function (subscriber) {\n        var scheduler = this.scheduler;\n        if (scheduler) {\n            return scheduler.schedule(EmptyObservable.dispatch, 0, { subscriber: subscriber });\n        }\n        else {\n            subscriber.complete();\n        }\n    };\n    return EmptyObservable;\n}(Observable_1.Observable));\nexports.EmptyObservable = EmptyObservable;\n//# sourceMappingURL=EmptyObservable.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('../Observable');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar ErrorObservable = (function (_super) {\n    __extends(ErrorObservable, _super);\n    function ErrorObservable(error, scheduler) {\n        _super.call(this);\n        this.error = error;\n        this.scheduler = scheduler;\n    }\n    /**\n     * Creates an Observable that emits no items to the Observer and immediately\n     * emits an error notification.\n     *\n     * <span class=\"informal\">Just emits 'error', and nothing else.\n     * </span>\n     *\n     * <img src=\"./img/throw.png\" width=\"100%\">\n     *\n     * This static operator is useful for creating a simple Observable that only\n     * emits the error notification. It can be used for composing with other\n     * Observables, such as in a {@link mergeMap}.\n     *\n     * @example <caption>Emit the number 7, then emit an error.</caption>\n     * var result = Rx.Observable.throw(new Error('oops!')).startWith(7);\n     * result.subscribe(x => console.log(x), e => console.error(e));\n     *\n     * @example <caption>Map and flatten numbers to the sequence 'a', 'b', 'c', but throw an error for 13</caption>\n     * var interval = Rx.Observable.interval(1000);\n     * var result = interval.mergeMap(x =>\n     *   x === 13 ?\n     *     Rx.Observable.throw('Thirteens are bad') :\n     *     Rx.Observable.of('a', 'b', 'c')\n     * );\n     * result.subscribe(x => console.log(x), e => console.error(e));\n     *\n     * @see {@link create}\n     * @see {@link empty}\n     * @see {@link never}\n     * @see {@link of}\n     *\n     * @param {any} error The particular Error to pass to the error notification.\n     * @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling\n     * the emission of the error notification.\n     * @return {Observable} An error Observable: emits only the error notification\n     * using the given error argument.\n     * @static true\n     * @name throw\n     * @owner Observable\n     */\n    ErrorObservable.create = function (error, scheduler) {\n        return new ErrorObservable(error, scheduler);\n    };\n    ErrorObservable.dispatch = function (arg) {\n        var error = arg.error, subscriber = arg.subscriber;\n        subscriber.error(error);\n    };\n    ErrorObservable.prototype._subscribe = function (subscriber) {\n        var error = this.error;\n        var scheduler = this.scheduler;\n        if (scheduler) {\n            return scheduler.schedule(ErrorObservable.dispatch, 0, {\n                error: error, subscriber: subscriber\n            });\n        }\n        else {\n            subscriber.error(error);\n        }\n    };\n    return ErrorObservable;\n}(Observable_1.Observable));\nexports.ErrorObservable = ErrorObservable;\n//# sourceMappingURL=ErrorObservable.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('../Observable');\nvar tryCatch_1 = require('../util/tryCatch');\nvar isFunction_1 = require('../util/isFunction');\nvar errorObject_1 = require('../util/errorObject');\nvar Subscription_1 = require('../Subscription');\nvar toString = Object.prototype.toString;\nfunction isNodeStyleEventEmitter(sourceObj) {\n    return !!sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';\n}\nfunction isJQueryStyleEventEmitter(sourceObj) {\n    return !!sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';\n}\nfunction isNodeList(sourceObj) {\n    return !!sourceObj && toString.call(sourceObj) === '[object NodeList]';\n}\nfunction isHTMLCollection(sourceObj) {\n    return !!sourceObj && toString.call(sourceObj) === '[object HTMLCollection]';\n}\nfunction isEventTarget(sourceObj) {\n    return !!sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';\n}\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar FromEventObservable = (function (_super) {\n    __extends(FromEventObservable, _super);\n    function FromEventObservable(sourceObj, eventName, selector, options) {\n        _super.call(this);\n        this.sourceObj = sourceObj;\n        this.eventName = eventName;\n        this.selector = selector;\n        this.options = options;\n    }\n    /* tslint:enable:max-line-length */\n    /**\n     * Creates an Observable that emits events of a specific type coming from the\n     * given event target.\n     *\n     * <span class=\"informal\">Creates an Observable from DOM events, or Node\n     * EventEmitter events or others.</span>\n     *\n     * <img src=\"./img/fromEvent.png\" width=\"100%\">\n     *\n     * Creates an Observable by attaching an event listener to an \"event target\",\n     * which may be an object with `addEventListener` and `removeEventListener`,\n     * a Node.js EventEmitter, a jQuery style EventEmitter, a NodeList from the\n     * DOM, or an HTMLCollection from the DOM. The event handler is attached when\n     * the output Observable is subscribed, and removed when the Subscription is\n     * unsubscribed.\n     *\n     * @example <caption>Emits clicks happening on the DOM document</caption>\n     * var clicks = Rx.Observable.fromEvent(document, 'click');\n     * clicks.subscribe(x => console.log(x));\n     *\n     * // Results in:\n     * // MouseEvent object logged to console everytime a click\n     * // occurs on the document.\n     *\n     * @see {@link from}\n     * @see {@link fromEventPattern}\n     *\n     * @param {EventTargetLike} target The DOMElement, event target, Node.js\n     * EventEmitter, NodeList or HTMLCollection to attach the event handler to.\n     * @param {string} eventName The event name of interest, being emitted by the\n     * `target`.\n     * @param {EventListenerOptions} [options] Options to pass through to addEventListener\n     * @param {SelectorMethodSignature<T>} [selector] An optional function to\n     * post-process results. It takes the arguments from the event handler and\n     * should return a single value.\n     * @return {Observable<T>}\n     * @static true\n     * @name fromEvent\n     * @owner Observable\n     */\n    FromEventObservable.create = function (target, eventName, options, selector) {\n        if (isFunction_1.isFunction(options)) {\n            selector = options;\n            options = undefined;\n        }\n        return new FromEventObservable(target, eventName, selector, options);\n    };\n    FromEventObservable.setupSubscription = function (sourceObj, eventName, handler, subscriber, options) {\n        var unsubscribe;\n        if (isNodeList(sourceObj) || isHTMLCollection(sourceObj)) {\n            for (var i = 0, len = sourceObj.length; i < len; i++) {\n                FromEventObservable.setupSubscription(sourceObj[i], eventName, handler, subscriber, options);\n            }\n        }\n        else if (isEventTarget(sourceObj)) {\n            var source_1 = sourceObj;\n            sourceObj.addEventListener(eventName, handler, options);\n            unsubscribe = function () { return source_1.removeEventListener(eventName, handler); };\n        }\n        else if (isJQueryStyleEventEmitter(sourceObj)) {\n            var source_2 = sourceObj;\n            sourceObj.on(eventName, handler);\n            unsubscribe = function () { return source_2.off(eventName, handler); };\n        }\n        else if (isNodeStyleEventEmitter(sourceObj)) {\n            var source_3 = sourceObj;\n            sourceObj.addListener(eventName, handler);\n            unsubscribe = function () { return source_3.removeListener(eventName, handler); };\n        }\n        else {\n            throw new TypeError('Invalid event target');\n        }\n        subscriber.add(new Subscription_1.Subscription(unsubscribe));\n    };\n    FromEventObservable.prototype._subscribe = function (subscriber) {\n        var sourceObj = this.sourceObj;\n        var eventName = this.eventName;\n        var options = this.options;\n        var selector = this.selector;\n        var handler = selector ? function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i - 0] = arguments[_i];\n            }\n            var result = tryCatch_1.tryCatch(selector).apply(void 0, args);\n            if (result === errorObject_1.errorObject) {\n                subscriber.error(errorObject_1.errorObject.e);\n            }\n            else {\n                subscriber.next(result);\n            }\n        } : function (e) { return subscriber.next(e); };\n        FromEventObservable.setupSubscription(sourceObj, eventName, handler, subscriber, options);\n    };\n    return FromEventObservable;\n}(Observable_1.Observable));\nexports.FromEventObservable = FromEventObservable;\n//# sourceMappingURL=FromEventObservable.js.map",
-    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar isArray_1 = require('../util/isArray');\nvar isArrayLike_1 = require('../util/isArrayLike');\nvar isPromise_1 = require('../util/isPromise');\nvar PromiseObservable_1 = require('./PromiseObservable');\nvar IteratorObservable_1 = require('./IteratorObservable');\nvar ArrayObservable_1 = require('./ArrayObservable');\nvar ArrayLikeObservable_1 = require('./ArrayLikeObservable');\nvar iterator_1 = require('../symbol/iterator');\nvar Observable_1 = require('../Observable');\nvar observeOn_1 = require('../operator/observeOn');\nvar observable_1 = require('../symbol/observable');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar FromObservable = (function (_super) {\n    __extends(FromObservable, _super);\n    function FromObservable(ish, scheduler) {\n        _super.call(this, null);\n        this.ish = ish;\n        this.scheduler = scheduler;\n    }\n    /**\n     * Creates an Observable from an Array, an array-like object, a Promise, an\n     * iterable object, or an Observable-like object.\n     *\n     * <span class=\"informal\">Converts almost anything to an Observable.</span>\n     *\n     * <img src=\"./img/from.png\" width=\"100%\">\n     *\n     * Convert various other objects and data types into Observables. `from`\n     * converts a Promise or an array-like or an\n     * [iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#iterable)\n     * object into an Observable that emits the items in that promise or array or\n     * iterable. A String, in this context, is treated as an array of characters.\n     * Observable-like objects (contains a function named with the ES2015 Symbol\n     * for Observable) can also be converted through this operator.\n     *\n     * @example <caption>Converts an array to an Observable</caption>\n     * var array = [10, 20, 30];\n     * var result = Rx.Observable.from(array);\n     * result.subscribe(x => console.log(x));\n     *\n     * // Results in the following:\n     * // 10 20 30\n     *\n     * @example <caption>Convert an infinite iterable (from a generator) to an Observable</caption>\n     * function* generateDoubles(seed) {\n     *   var i = seed;\n     *   while (true) {\n     *     yield i;\n     *     i = 2 * i; // double it\n     *   }\n     * }\n     *\n     * var iterator = generateDoubles(3);\n     * var result = Rx.Observable.from(iterator).take(10);\n     * result.subscribe(x => console.log(x));\n     *\n     * // Results in the following:\n     * // 3 6 12 24 48 96 192 384 768 1536\n     *\n     * @see {@link create}\n     * @see {@link fromEvent}\n     * @see {@link fromEventPattern}\n     * @see {@link fromPromise}\n     *\n     * @param {ObservableInput<T>} ish A subscribable object, a Promise, an\n     * Observable-like, an Array, an iterable or an array-like object to be\n     * converted.\n     * @param {Scheduler} [scheduler] The scheduler on which to schedule the\n     * emissions of values.\n     * @return {Observable<T>} The Observable whose values are originally from the\n     * input object that was converted.\n     * @static true\n     * @name from\n     * @owner Observable\n     */\n    FromObservable.create = function (ish, scheduler) {\n        if (ish != null) {\n            if (typeof ish[observable_1.$$observable] === 'function') {\n                if (ish instanceof Observable_1.Observable && !scheduler) {\n                    return ish;\n                }\n                return new FromObservable(ish, scheduler);\n            }\n            else if (isArray_1.isArray(ish)) {\n                return new ArrayObservable_1.ArrayObservable(ish, scheduler);\n            }\n            else if (isPromise_1.isPromise(ish)) {\n                return new PromiseObservable_1.PromiseObservable(ish, scheduler);\n            }\n            else if (typeof ish[iterator_1.$$iterator] === 'function' || typeof ish === 'string') {\n                return new IteratorObservable_1.IteratorObservable(ish, scheduler);\n            }\n            else if (isArrayLike_1.isArrayLike(ish)) {\n                return new ArrayLikeObservable_1.ArrayLikeObservable(ish, scheduler);\n            }\n        }\n        throw new TypeError((ish !== null && typeof ish || ish) + ' is not observable');\n    };\n    FromObservable.prototype._subscribe = function (subscriber) {\n        var ish = this.ish;\n        var scheduler = this.scheduler;\n        if (scheduler == null) {\n            return ish[observable_1.$$observable]().subscribe(subscriber);\n        }\n        else {\n            return ish[observable_1.$$observable]().subscribe(new observeOn_1.ObserveOnSubscriber(subscriber, scheduler, 0));\n        }\n    };\n    return FromObservable;\n}(Observable_1.Observable));\nexports.FromObservable = FromObservable;\n//# sourceMappingURL=FromObservable.js.map",
-    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar root_1 = require('../util/root');\nvar Observable_1 = require('../Observable');\nvar iterator_1 = require('../symbol/iterator');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar IteratorObservable = (function (_super) {\n    __extends(IteratorObservable, _super);\n    function IteratorObservable(iterator, scheduler) {\n        _super.call(this);\n        this.scheduler = scheduler;\n        if (iterator == null) {\n            throw new Error('iterator cannot be null.');\n        }\n        this.iterator = getIterator(iterator);\n    }\n    IteratorObservable.create = function (iterator, scheduler) {\n        return new IteratorObservable(iterator, scheduler);\n    };\n    IteratorObservable.dispatch = function (state) {\n        var index = state.index, hasError = state.hasError, iterator = state.iterator, subscriber = state.subscriber;\n        if (hasError) {\n            subscriber.error(state.error);\n            return;\n        }\n        var result = iterator.next();\n        if (result.done) {\n            subscriber.complete();\n            return;\n        }\n        subscriber.next(result.value);\n        state.index = index + 1;\n        if (subscriber.closed) {\n            if (typeof iterator.return === 'function') {\n                iterator.return();\n            }\n            return;\n        }\n        this.schedule(state);\n    };\n    IteratorObservable.prototype._subscribe = function (subscriber) {\n        var index = 0;\n        var _a = this, iterator = _a.iterator, scheduler = _a.scheduler;\n        if (scheduler) {\n            return scheduler.schedule(IteratorObservable.dispatch, 0, {\n                index: index, iterator: iterator, subscriber: subscriber\n            });\n        }\n        else {\n            do {\n                var result = iterator.next();\n                if (result.done) {\n                    subscriber.complete();\n                    break;\n                }\n                else {\n                    subscriber.next(result.value);\n                }\n                if (subscriber.closed) {\n                    if (typeof iterator.return === 'function') {\n                        iterator.return();\n                    }\n                    break;\n                }\n            } while (true);\n        }\n    };\n    return IteratorObservable;\n}(Observable_1.Observable));\nexports.IteratorObservable = IteratorObservable;\nvar StringIterator = (function () {\n    function StringIterator(str, idx, len) {\n        if (idx === void 0) { idx = 0; }\n        if (len === void 0) { len = str.length; }\n        this.str = str;\n        this.idx = idx;\n        this.len = len;\n    }\n    StringIterator.prototype[iterator_1.$$iterator] = function () { return (this); };\n    StringIterator.prototype.next = function () {\n        return this.idx < this.len ? {\n            done: false,\n            value: this.str.charAt(this.idx++)\n        } : {\n            done: true,\n            value: undefined\n        };\n    };\n    return StringIterator;\n}());\nvar ArrayIterator = (function () {\n    function ArrayIterator(arr, idx, len) {\n        if (idx === void 0) { idx = 0; }\n        if (len === void 0) { len = toLength(arr); }\n        this.arr = arr;\n        this.idx = idx;\n        this.len = len;\n    }\n    ArrayIterator.prototype[iterator_1.$$iterator] = function () { return this; };\n    ArrayIterator.prototype.next = function () {\n        return this.idx < this.len ? {\n            done: false,\n            value: this.arr[this.idx++]\n        } : {\n            done: true,\n            value: undefined\n        };\n    };\n    return ArrayIterator;\n}());\nfunction getIterator(obj) {\n    var i = obj[iterator_1.$$iterator];\n    if (!i && typeof obj === 'string') {\n        return new StringIterator(obj);\n    }\n    if (!i && obj.length !== undefined) {\n        return new ArrayIterator(obj);\n    }\n    if (!i) {\n        throw new TypeError('object is not iterable');\n    }\n    return obj[iterator_1.$$iterator]();\n}\nvar maxSafeInteger = Math.pow(2, 53) - 1;\nfunction toLength(o) {\n    var len = +o.length;\n    if (isNaN(len)) {\n        return 0;\n    }\n    if (len === 0 || !numberIsFinite(len)) {\n        return len;\n    }\n    len = sign(len) * Math.floor(Math.abs(len));\n    if (len <= 0) {\n        return 0;\n    }\n    if (len > maxSafeInteger) {\n        return maxSafeInteger;\n    }\n    return len;\n}\nfunction numberIsFinite(value) {\n    return typeof value === 'number' && root_1.root.isFinite(value);\n}\nfunction sign(value) {\n    var valueAsNumber = +value;\n    if (valueAsNumber === 0) {\n        return valueAsNumber;\n    }\n    if (isNaN(valueAsNumber)) {\n        return valueAsNumber;\n    }\n    return valueAsNumber < 0 ? -1 : 1;\n}\n//# sourceMappingURL=IteratorObservable.js.map",
-    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar root_1 = require('../util/root');\nvar Observable_1 = require('../Observable');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar PromiseObservable = (function (_super) {\n    __extends(PromiseObservable, _super);\n    function PromiseObservable(promise, scheduler) {\n        _super.call(this);\n        this.promise = promise;\n        this.scheduler = scheduler;\n    }\n    /**\n     * Converts a Promise to an Observable.\n     *\n     * <span class=\"informal\">Returns an Observable that just emits the Promise's\n     * resolved value, then completes.</span>\n     *\n     * Converts an ES2015 Promise or a Promises/A+ spec compliant Promise to an\n     * Observable. If the Promise resolves with a value, the output Observable\n     * emits that resolved value as a `next`, and then completes. If the Promise\n     * is rejected, then the output Observable emits the corresponding Error.\n     *\n     * @example <caption>Convert the Promise returned by Fetch to an Observable</caption>\n     * var result = Rx.Observable.fromPromise(fetch('http://myserver.com/'));\n     * result.subscribe(x => console.log(x), e => console.error(e));\n     *\n     * @see {@link bindCallback}\n     * @see {@link from}\n     *\n     * @param {Promise<T>} promise The promise to be converted.\n     * @param {Scheduler} [scheduler] An optional IScheduler to use for scheduling\n     * the delivery of the resolved value (or the rejection).\n     * @return {Observable<T>} An Observable which wraps the Promise.\n     * @static true\n     * @name fromPromise\n     * @owner Observable\n     */\n    PromiseObservable.create = function (promise, scheduler) {\n        return new PromiseObservable(promise, scheduler);\n    };\n    PromiseObservable.prototype._subscribe = function (subscriber) {\n        var _this = this;\n        var promise = this.promise;\n        var scheduler = this.scheduler;\n        if (scheduler == null) {\n            if (this._isScalar) {\n                if (!subscriber.closed) {\n                    subscriber.next(this.value);\n                    subscriber.complete();\n                }\n            }\n            else {\n                promise.then(function (value) {\n                    _this.value = value;\n                    _this._isScalar = true;\n                    if (!subscriber.closed) {\n                        subscriber.next(value);\n                        subscriber.complete();\n                    }\n                }, function (err) {\n                    if (!subscriber.closed) {\n                        subscriber.error(err);\n                    }\n                })\n                    .then(null, function (err) {\n                    // escape the promise trap, throw unhandled errors\n                    root_1.root.setTimeout(function () { throw err; });\n                });\n            }\n        }\n        else {\n            if (this._isScalar) {\n                if (!subscriber.closed) {\n                    return scheduler.schedule(dispatchNext, 0, { value: this.value, subscriber: subscriber });\n                }\n            }\n            else {\n                promise.then(function (value) {\n                    _this.value = value;\n                    _this._isScalar = true;\n                    if (!subscriber.closed) {\n                        subscriber.add(scheduler.schedule(dispatchNext, 0, { value: value, subscriber: subscriber }));\n                    }\n                }, function (err) {\n                    if (!subscriber.closed) {\n                        subscriber.add(scheduler.schedule(dispatchError, 0, { err: err, subscriber: subscriber }));\n                    }\n                })\n                    .then(null, function (err) {\n                    // escape the promise trap, throw unhandled errors\n                    root_1.root.setTimeout(function () { throw err; });\n                });\n            }\n        }\n    };\n    return PromiseObservable;\n}(Observable_1.Observable));\nexports.PromiseObservable = PromiseObservable;\nfunction dispatchNext(arg) {\n    var value = arg.value, subscriber = arg.subscriber;\n    if (!subscriber.closed) {\n        subscriber.next(value);\n        subscriber.complete();\n    }\n}\nfunction dispatchError(arg) {\n    var err = arg.err, subscriber = arg.subscriber;\n    if (!subscriber.closed) {\n        subscriber.error(err);\n    }\n}\n//# sourceMappingURL=PromiseObservable.js.map",
+    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar isArray_1 = require('../util/isArray');\nvar isArrayLike_1 = require('../util/isArrayLike');\nvar isPromise_1 = require('../util/isPromise');\nvar PromiseObservable_1 = require('./PromiseObservable');\nvar IteratorObservable_1 = require('./IteratorObservable');\nvar ArrayObservable_1 = require('./ArrayObservable');\nvar ArrayLikeObservable_1 = require('./ArrayLikeObservable');\nvar iterator_1 = require('../symbol/iterator');\nvar Observable_1 = require('../Observable');\nvar observeOn_1 = require('../operator/observeOn');\nvar observable_1 = require('../symbol/observable');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar FromObservable = (function (_super) {\n    __extends(FromObservable, _super);\n    function FromObservable(ish, scheduler) {\n        _super.call(this, null);\n        this.ish = ish;\n        this.scheduler = scheduler;\n    }\n    /**\n     * Creates an Observable from an Array, an array-like object, a Promise, an\n     * iterable object, or an Observable-like object.\n     *\n     * <span class=\"informal\">Converts almost anything to an Observable.</span>\n     *\n     * <img src=\"./img/from.png\" width=\"100%\">\n     *\n     * Convert various other objects and data types into Observables. `from`\n     * converts a Promise or an array-like or an\n     * [iterable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#iterable)\n     * object into an Observable that emits the items in that promise or array or\n     * iterable. A String, in this context, is treated as an array of characters.\n     * Observable-like objects (contains a function named with the ES2015 Symbol\n     * for Observable) can also be converted through this operator.\n     *\n     * @example <caption>Converts an array to an Observable</caption>\n     * var array = [10, 20, 30];\n     * var result = Rx.Observable.from(array);\n     * result.subscribe(x => console.log(x));\n     *\n     * // Results in the following:\n     * // 10 20 30\n     *\n     * @example <caption>Convert an infinite iterable (from a generator) to an Observable</caption>\n     * function* generateDoubles(seed) {\n     *   var i = seed;\n     *   while (true) {\n     *     yield i;\n     *     i = 2 * i; // double it\n     *   }\n     * }\n     *\n     * var iterator = generateDoubles(3);\n     * var result = Rx.Observable.from(iterator).take(10);\n     * result.subscribe(x => console.log(x));\n     *\n     * // Results in the following:\n     * // 3 6 12 24 48 96 192 384 768 1536\n     *\n     * @see {@link create}\n     * @see {@link fromEvent}\n     * @see {@link fromEventPattern}\n     * @see {@link fromPromise}\n     *\n     * @param {ObservableInput<T>} ish A subscribable object, a Promise, an\n     * Observable-like, an Array, an iterable or an array-like object to be\n     * converted.\n     * @param {Scheduler} [scheduler] The scheduler on which to schedule the\n     * emissions of values.\n     * @return {Observable<T>} The Observable whose values are originally from the\n     * input object that was converted.\n     * @static true\n     * @name from\n     * @owner Observable\n     */\n    FromObservable.create = function (ish, scheduler) {\n        if (ish != null) {\n            if (typeof ish[observable_1.observable] === 'function') {\n                if (ish instanceof Observable_1.Observable && !scheduler) {\n                    return ish;\n                }\n                return new FromObservable(ish, scheduler);\n            }\n            else if (isArray_1.isArray(ish)) {\n                return new ArrayObservable_1.ArrayObservable(ish, scheduler);\n            }\n            else if (isPromise_1.isPromise(ish)) {\n                return new PromiseObservable_1.PromiseObservable(ish, scheduler);\n            }\n            else if (typeof ish[iterator_1.iterator] === 'function' || typeof ish === 'string') {\n                return new IteratorObservable_1.IteratorObservable(ish, scheduler);\n            }\n            else if (isArrayLike_1.isArrayLike(ish)) {\n                return new ArrayLikeObservable_1.ArrayLikeObservable(ish, scheduler);\n            }\n        }\n        throw new TypeError((ish !== null && typeof ish || ish) + ' is not observable');\n    };\n    FromObservable.prototype._subscribe = function (subscriber) {\n        var ish = this.ish;\n        var scheduler = this.scheduler;\n        if (scheduler == null) {\n            return ish[observable_1.observable]().subscribe(subscriber);\n        }\n        else {\n            return ish[observable_1.observable]().subscribe(new observeOn_1.ObserveOnSubscriber(subscriber, scheduler, 0));\n        }\n    };\n    return FromObservable;\n}(Observable_1.Observable));\nexports.FromObservable = FromObservable;\n//# sourceMappingURL=FromObservable.js.map",
+    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar root_1 = require('../util/root');\nvar Observable_1 = require('../Observable');\nvar iterator_1 = require('../symbol/iterator');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar IteratorObservable = (function (_super) {\n    __extends(IteratorObservable, _super);\n    function IteratorObservable(iterator, scheduler) {\n        _super.call(this);\n        this.scheduler = scheduler;\n        if (iterator == null) {\n            throw new Error('iterator cannot be null.');\n        }\n        this.iterator = getIterator(iterator);\n    }\n    IteratorObservable.create = function (iterator, scheduler) {\n        return new IteratorObservable(iterator, scheduler);\n    };\n    IteratorObservable.dispatch = function (state) {\n        var index = state.index, hasError = state.hasError, iterator = state.iterator, subscriber = state.subscriber;\n        if (hasError) {\n            subscriber.error(state.error);\n            return;\n        }\n        var result = iterator.next();\n        if (result.done) {\n            subscriber.complete();\n            return;\n        }\n        subscriber.next(result.value);\n        state.index = index + 1;\n        if (subscriber.closed) {\n            if (typeof iterator.return === 'function') {\n                iterator.return();\n            }\n            return;\n        }\n        this.schedule(state);\n    };\n    IteratorObservable.prototype._subscribe = function (subscriber) {\n        var index = 0;\n        var _a = this, iterator = _a.iterator, scheduler = _a.scheduler;\n        if (scheduler) {\n            return scheduler.schedule(IteratorObservable.dispatch, 0, {\n                index: index, iterator: iterator, subscriber: subscriber\n            });\n        }\n        else {\n            do {\n                var result = iterator.next();\n                if (result.done) {\n                    subscriber.complete();\n                    break;\n                }\n                else {\n                    subscriber.next(result.value);\n                }\n                if (subscriber.closed) {\n                    if (typeof iterator.return === 'function') {\n                        iterator.return();\n                    }\n                    break;\n                }\n            } while (true);\n        }\n    };\n    return IteratorObservable;\n}(Observable_1.Observable));\nexports.IteratorObservable = IteratorObservable;\nvar StringIterator = (function () {\n    function StringIterator(str, idx, len) {\n        if (idx === void 0) { idx = 0; }\n        if (len === void 0) { len = str.length; }\n        this.str = str;\n        this.idx = idx;\n        this.len = len;\n    }\n    StringIterator.prototype[iterator_1.iterator] = function () { return (this); };\n    StringIterator.prototype.next = function () {\n        return this.idx < this.len ? {\n            done: false,\n            value: this.str.charAt(this.idx++)\n        } : {\n            done: true,\n            value: undefined\n        };\n    };\n    return StringIterator;\n}());\nvar ArrayIterator = (function () {\n    function ArrayIterator(arr, idx, len) {\n        if (idx === void 0) { idx = 0; }\n        if (len === void 0) { len = toLength(arr); }\n        this.arr = arr;\n        this.idx = idx;\n        this.len = len;\n    }\n    ArrayIterator.prototype[iterator_1.iterator] = function () { return this; };\n    ArrayIterator.prototype.next = function () {\n        return this.idx < this.len ? {\n            done: false,\n            value: this.arr[this.idx++]\n        } : {\n            done: true,\n            value: undefined\n        };\n    };\n    return ArrayIterator;\n}());\nfunction getIterator(obj) {\n    var i = obj[iterator_1.iterator];\n    if (!i && typeof obj === 'string') {\n        return new StringIterator(obj);\n    }\n    if (!i && obj.length !== undefined) {\n        return new ArrayIterator(obj);\n    }\n    if (!i) {\n        throw new TypeError('object is not iterable');\n    }\n    return obj[iterator_1.iterator]();\n}\nvar maxSafeInteger = Math.pow(2, 53) - 1;\nfunction toLength(o) {\n    var len = +o.length;\n    if (isNaN(len)) {\n        return 0;\n    }\n    if (len === 0 || !numberIsFinite(len)) {\n        return len;\n    }\n    len = sign(len) * Math.floor(Math.abs(len));\n    if (len <= 0) {\n        return 0;\n    }\n    if (len > maxSafeInteger) {\n        return maxSafeInteger;\n    }\n    return len;\n}\nfunction numberIsFinite(value) {\n    return typeof value === 'number' && root_1.root.isFinite(value);\n}\nfunction sign(value) {\n    var valueAsNumber = +value;\n    if (valueAsNumber === 0) {\n        return valueAsNumber;\n    }\n    if (isNaN(valueAsNumber)) {\n        return valueAsNumber;\n    }\n    return valueAsNumber < 0 ? -1 : 1;\n}\n//# sourceMappingURL=IteratorObservable.js.map",
+    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar root_1 = require('../util/root');\nvar Observable_1 = require('../Observable');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar PromiseObservable = (function (_super) {\n    __extends(PromiseObservable, _super);\n    function PromiseObservable(promise, scheduler) {\n        _super.call(this);\n        this.promise = promise;\n        this.scheduler = scheduler;\n    }\n    /**\n     * Converts a Promise to an Observable.\n     *\n     * <span class=\"informal\">Returns an Observable that just emits the Promise's\n     * resolved value, then completes.</span>\n     *\n     * Converts an ES2015 Promise or a Promises/A+ spec compliant Promise to an\n     * Observable. If the Promise resolves with a value, the output Observable\n     * emits that resolved value as a `next`, and then completes. If the Promise\n     * is rejected, then the output Observable emits the corresponding Error.\n     *\n     * @example <caption>Convert the Promise returned by Fetch to an Observable</caption>\n     * var result = Rx.Observable.fromPromise(fetch('http://myserver.com/'));\n     * result.subscribe(x => console.log(x), e => console.error(e));\n     *\n     * @see {@link bindCallback}\n     * @see {@link from}\n     *\n     * @param {PromiseLike<T>} promise The promise to be converted.\n     * @param {Scheduler} [scheduler] An optional IScheduler to use for scheduling\n     * the delivery of the resolved value (or the rejection).\n     * @return {Observable<T>} An Observable which wraps the Promise.\n     * @static true\n     * @name fromPromise\n     * @owner Observable\n     */\n    PromiseObservable.create = function (promise, scheduler) {\n        return new PromiseObservable(promise, scheduler);\n    };\n    PromiseObservable.prototype._subscribe = function (subscriber) {\n        var _this = this;\n        var promise = this.promise;\n        var scheduler = this.scheduler;\n        if (scheduler == null) {\n            if (this._isScalar) {\n                if (!subscriber.closed) {\n                    subscriber.next(this.value);\n                    subscriber.complete();\n                }\n            }\n            else {\n                promise.then(function (value) {\n                    _this.value = value;\n                    _this._isScalar = true;\n                    if (!subscriber.closed) {\n                        subscriber.next(value);\n                        subscriber.complete();\n                    }\n                }, function (err) {\n                    if (!subscriber.closed) {\n                        subscriber.error(err);\n                    }\n                })\n                    .then(null, function (err) {\n                    // escape the promise trap, throw unhandled errors\n                    root_1.root.setTimeout(function () { throw err; });\n                });\n            }\n        }\n        else {\n            if (this._isScalar) {\n                if (!subscriber.closed) {\n                    return scheduler.schedule(dispatchNext, 0, { value: this.value, subscriber: subscriber });\n                }\n            }\n            else {\n                promise.then(function (value) {\n                    _this.value = value;\n                    _this._isScalar = true;\n                    if (!subscriber.closed) {\n                        subscriber.add(scheduler.schedule(dispatchNext, 0, { value: value, subscriber: subscriber }));\n                    }\n                }, function (err) {\n                    if (!subscriber.closed) {\n                        subscriber.add(scheduler.schedule(dispatchError, 0, { err: err, subscriber: subscriber }));\n                    }\n                })\n                    .then(null, function (err) {\n                    // escape the promise trap, throw unhandled errors\n                    root_1.root.setTimeout(function () { throw err; });\n                });\n            }\n        }\n    };\n    return PromiseObservable;\n}(Observable_1.Observable));\nexports.PromiseObservable = PromiseObservable;\nfunction dispatchNext(arg) {\n    var value = arg.value, subscriber = arg.subscriber;\n    if (!subscriber.closed) {\n        subscriber.next(value);\n        subscriber.complete();\n    }\n}\nfunction dispatchError(arg) {\n    var err = arg.err, subscriber = arg.subscriber;\n    if (!subscriber.closed) {\n        subscriber.error(err);\n    }\n}\n//# sourceMappingURL=PromiseObservable.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('../Observable');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar ScalarObservable = (function (_super) {\n    __extends(ScalarObservable, _super);\n    function ScalarObservable(value, scheduler) {\n        _super.call(this);\n        this.value = value;\n        this.scheduler = scheduler;\n        this._isScalar = true;\n        if (scheduler) {\n            this._isScalar = false;\n        }\n    }\n    ScalarObservable.create = function (value, scheduler) {\n        return new ScalarObservable(value, scheduler);\n    };\n    ScalarObservable.dispatch = function (state) {\n        var done = state.done, value = state.value, subscriber = state.subscriber;\n        if (done) {\n            subscriber.complete();\n            return;\n        }\n        subscriber.next(value);\n        if (subscriber.closed) {\n            return;\n        }\n        state.done = true;\n        this.schedule(state);\n    };\n    ScalarObservable.prototype._subscribe = function (subscriber) {\n        var value = this.value;\n        var scheduler = this.scheduler;\n        if (scheduler) {\n            return scheduler.schedule(ScalarObservable.dispatch, 0, {\n                done: false, value: value, subscriber: subscriber\n            });\n        }\n        else {\n            subscriber.next(value);\n            if (!subscriber.closed) {\n                subscriber.complete();\n            }\n        }\n    };\n    return ScalarObservable;\n}(Observable_1.Observable));\nexports.ScalarObservable = ScalarObservable;\n//# sourceMappingURL=ScalarObservable.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar isNumeric_1 = require('../util/isNumeric');\nvar Observable_1 = require('../Observable');\nvar async_1 = require('../scheduler/async');\nvar isScheduler_1 = require('../util/isScheduler');\nvar isDate_1 = require('../util/isDate');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar TimerObservable = (function (_super) {\n    __extends(TimerObservable, _super);\n    function TimerObservable(dueTime, period, scheduler) {\n        if (dueTime === void 0) { dueTime = 0; }\n        _super.call(this);\n        this.period = -1;\n        this.dueTime = 0;\n        if (isNumeric_1.isNumeric(period)) {\n            this.period = Number(period) < 1 && 1 || Number(period);\n        }\n        else if (isScheduler_1.isScheduler(period)) {\n            scheduler = period;\n        }\n        if (!isScheduler_1.isScheduler(scheduler)) {\n            scheduler = async_1.async;\n        }\n        this.scheduler = scheduler;\n        this.dueTime = isDate_1.isDate(dueTime) ?\n            (+dueTime - this.scheduler.now()) :\n            dueTime;\n    }\n    /**\n     * Creates an Observable that starts emitting after an `initialDelay` and\n     * emits ever increasing numbers after each `period` of time thereafter.\n     *\n     * <span class=\"informal\">Its like {@link interval}, but you can specify when\n     * should the emissions start.</span>\n     *\n     * <img src=\"./img/timer.png\" width=\"100%\">\n     *\n     * `timer` returns an Observable that emits an infinite sequence of ascending\n     * integers, with a constant interval of time, `period` of your choosing\n     * between those emissions. The first emission happens after the specified\n     * `initialDelay`. The initial delay may be a {@link Date}. By default, this\n     * operator uses the `async` IScheduler to provide a notion of time, but you\n     * may pass any IScheduler to it. If `period` is not specified, the output\n     * Observable emits only one value, `0`. Otherwise, it emits an infinite\n     * sequence.\n     *\n     * @example <caption>Emits ascending numbers, one every second (1000ms), starting after 3 seconds</caption>\n     * var numbers = Rx.Observable.timer(3000, 1000);\n     * numbers.subscribe(x => console.log(x));\n     *\n     * @example <caption>Emits one number after five seconds</caption>\n     * var numbers = Rx.Observable.timer(5000);\n     * numbers.subscribe(x => console.log(x));\n     *\n     * @see {@link interval}\n     * @see {@link delay}\n     *\n     * @param {number|Date} initialDelay The initial delay time to wait before\n     * emitting the first value of `0`.\n     * @param {number} [period] The period of time between emissions of the\n     * subsequent numbers.\n     * @param {Scheduler} [scheduler=async] The IScheduler to use for scheduling\n     * the emission of values, and providing a notion of \"time\".\n     * @return {Observable} An Observable that emits a `0` after the\n     * `initialDelay` and ever increasing numbers after each `period` of time\n     * thereafter.\n     * @static true\n     * @name timer\n     * @owner Observable\n     */\n    TimerObservable.create = function (initialDelay, period, scheduler) {\n        if (initialDelay === void 0) { initialDelay = 0; }\n        return new TimerObservable(initialDelay, period, scheduler);\n    };\n    TimerObservable.dispatch = function (state) {\n        var index = state.index, period = state.period, subscriber = state.subscriber;\n        var action = this;\n        subscriber.next(index);\n        if (subscriber.closed) {\n            return;\n        }\n        else if (period === -1) {\n            return subscriber.complete();\n        }\n        state.index = index + 1;\n        action.schedule(state, period);\n    };\n    TimerObservable.prototype._subscribe = function (subscriber) {\n        var index = 0;\n        var _a = this, period = _a.period, dueTime = _a.dueTime, scheduler = _a.scheduler;\n        return scheduler.schedule(TimerObservable.dispatch, dueTime, {\n            index: index, period: period, subscriber: subscriber\n        });\n    };\n    return TimerObservable;\n}(Observable_1.Observable));\nexports.TimerObservable = TimerObservable;\n//# sourceMappingURL=TimerObservable.js.map",
     "\"use strict\";\nvar isScheduler_1 = require('../util/isScheduler');\nvar isArray_1 = require('../util/isArray');\nvar ArrayObservable_1 = require('./ArrayObservable');\nvar combineLatest_1 = require('../operator/combineLatest');\n/* tslint:enable:max-line-length */\n/**\n * Combines multiple Observables to create an Observable whose values are\n * calculated from the latest values of each of its input Observables.\n *\n * <span class=\"informal\">Whenever any input Observable emits a value, it\n * computes a formula using the latest values from all the inputs, then emits\n * the output of that formula.</span>\n *\n * <img src=\"./img/combineLatest.png\" width=\"100%\">\n *\n * `combineLatest` combines the values from all the Observables passed as\n * arguments. This is done by subscribing to each Observable in order and,\n * whenever any Observable emits, collecting an array of the most recent\n * values from each Observable. So if you pass `n` Observables to operator,\n * returned Observable will always emit an array of `n` values, in order\n * corresponding to order of passed Observables (value from the first Observable\n * on the first place and so on).\n *\n * Static version of `combineLatest` accepts either an array of Observables\n * or each Observable can be put directly as an argument. Note that array of\n * Observables is good choice, if you don't know beforehand how many Observables\n * you will combine. Passing empty array will result in Observable that\n * completes immediately.\n *\n * To ensure output array has always the same length, `combineLatest` will\n * actually wait for all input Observables to emit at least once,\n * before it starts emitting results. This means if some Observable emits\n * values before other Observables started emitting, all that values but last\n * will be lost. On the other hand, is some Observable does not emit value but\n * completes, resulting Observable will complete at the same moment without\n * emitting anything, since it will be now impossible to include value from\n * completed Observable in resulting array. Also, if some input Observable does\n * not emit any value and never completes, `combineLatest` will also never emit\n * and never complete, since, again, it will wait for all streams to emit some\n * value.\n *\n * If at least one Observable was passed to `combineLatest` and all passed Observables\n * emitted something, resulting Observable will complete when all combined\n * streams complete. So even if some Observable completes, result of\n * `combineLatest` will still emit values when other Observables do. In case\n * of completed Observable, its value from now on will always be the last\n * emitted value. On the other hand, if any Observable errors, `combineLatest`\n * will error immediately as well, and all other Observables will be unsubscribed.\n *\n * `combineLatest` accepts as optional parameter `project` function, which takes\n * as arguments all values that would normally be emitted by resulting Observable.\n * `project` can return any kind of value, which will be then emitted by Observable\n * instead of default array. Note that `project` does not take as argument that array\n * of values, but values themselves. That means default `project` can be imagined\n * as function that takes all its arguments and puts them into an array.\n *\n *\n * @example <caption>Combine two timer Observables</caption>\n * const firstTimer = Rx.Observable.timer(0, 1000); // emit 0, 1, 2... after every second, starting from now\n * const secondTimer = Rx.Observable.timer(500, 1000); // emit 0, 1, 2... after every second, starting 0,5s from now\n * const combinedTimers = Rx.Observable.combineLatest(firstTimer, secondTimer);\n * combinedTimers.subscribe(value => console.log(value));\n * // Logs\n * // [0, 0] after 0.5s\n * // [1, 0] after 1s\n * // [1, 1] after 1.5s\n * // [2, 1] after 2s\n *\n *\n * @example <caption>Combine an array of Observables</caption>\n * const observables = [1, 5, 10].map(\n *   n => Rx.Observable.of(n).delay(n * 1000).startWith(0) // emit 0 and then emit n after n seconds\n * );\n * const combined = Rx.Observable.combineLatest(observables);\n * combined.subscribe(value => console.log(value));\n * // Logs\n * // [0, 0, 0] immediately\n * // [1, 0, 0] after 1s\n * // [1, 5, 0] after 5s\n * // [1, 5, 10] after 10s\n *\n *\n * @example <caption>Use project function to dynamically calculate the Body-Mass Index</caption>\n * var weight = Rx.Observable.of(70, 72, 76, 79, 75);\n * var height = Rx.Observable.of(1.76, 1.77, 1.78);\n * var bmi = Rx.Observable.combineLatest(weight, height, (w, h) => w / (h * h));\n * bmi.subscribe(x => console.log('BMI is ' + x));\n *\n * // With output to console:\n * // BMI is 24.212293388429753\n * // BMI is 23.93948099205209\n * // BMI is 23.671253629592222\n *\n *\n * @see {@link combineAll}\n * @see {@link merge}\n * @see {@link withLatestFrom}\n *\n * @param {ObservableInput} observable1 An input Observable to combine with other Observables.\n * @param {ObservableInput} observable2 An input Observable to combine with other Observables.\n * More than one input Observables may be given as arguments\n * or an array of Observables may be given as the first argument.\n * @param {function} [project] An optional function to project the values from\n * the combined latest values into a new value on the output Observable.\n * @param {Scheduler} [scheduler=null] The IScheduler to use for subscribing to\n * each input Observable.\n * @return {Observable} An Observable of projected values from the most recent\n * values from each input Observable, or an array of the most recent values from\n * each input Observable.\n * @static true\n * @name combineLatest\n * @owner Observable\n */\nfunction combineLatest() {\n    var observables = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        observables[_i - 0] = arguments[_i];\n    }\n    var project = null;\n    var scheduler = null;\n    if (isScheduler_1.isScheduler(observables[observables.length - 1])) {\n        scheduler = observables.pop();\n    }\n    if (typeof observables[observables.length - 1] === 'function') {\n        project = observables.pop();\n    }\n    // if the first and only other argument besides the resultSelector is an array\n    // assume it's been called with `combineLatest([obs1, obs2, obs3], project)`\n    if (observables.length === 1 && isArray_1.isArray(observables[0])) {\n        observables = observables[0];\n    }\n    return new ArrayObservable_1.ArrayObservable(observables, scheduler).lift(new combineLatest_1.CombineLatestOperator(project));\n}\nexports.combineLatest = combineLatest;\n//# sourceMappingURL=combineLatest.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Observable_1 = require('../Observable');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar ScalarObservable = (function (_super) {\n    __extends(ScalarObservable, _super);\n    function ScalarObservable(value, scheduler) {\n        _super.call(this);\n        this.value = value;\n        this.scheduler = scheduler;\n        this._isScalar = true;\n        if (scheduler) {\n            this._isScalar = false;\n        }\n    }\n    ScalarObservable.create = function (value, scheduler) {\n        return new ScalarObservable(value, scheduler);\n    };\n    ScalarObservable.dispatch = function (state) {\n        var done = state.done, value = state.value, subscriber = state.subscriber;\n        if (done) {\n            subscriber.complete();\n            return;\n        }\n        subscriber.next(value);\n        if (subscriber.closed) {\n            return;\n        }\n        state.done = true;\n        this.schedule(state);\n    };\n    ScalarObservable.prototype._subscribe = function (subscriber) {\n        var value = this.value;\n        var scheduler = this.scheduler;\n        if (scheduler) {\n            return scheduler.schedule(ScalarObservable.dispatch, 0, {\n                done: false, value: value, subscriber: subscriber\n            });\n        }\n        else {\n            subscriber.next(value);\n            if (!subscriber.closed) {\n                subscriber.complete();\n            }\n        }\n    };\n    return ScalarObservable;\n}(Observable_1.Observable));\nexports.ScalarObservable = ScalarObservable;\n//# sourceMappingURL=ScalarObservable.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar isNumeric_1 = require('../util/isNumeric');\nvar Observable_1 = require('../Observable');\nvar async_1 = require('../scheduler/async');\nvar isScheduler_1 = require('../util/isScheduler');\nvar isDate_1 = require('../util/isDate');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @extends {Ignored}\n * @hide true\n */\nvar TimerObservable = (function (_super) {\n    __extends(TimerObservable, _super);\n    function TimerObservable(dueTime, period, scheduler) {\n        if (dueTime === void 0) { dueTime = 0; }\n        _super.call(this);\n        this.period = -1;\n        this.dueTime = 0;\n        if (isNumeric_1.isNumeric(period)) {\n            this.period = Number(period) < 1 && 1 || Number(period);\n        }\n        else if (isScheduler_1.isScheduler(period)) {\n            scheduler = period;\n        }\n        if (!isScheduler_1.isScheduler(scheduler)) {\n            scheduler = async_1.async;\n        }\n        this.scheduler = scheduler;\n        this.dueTime = isDate_1.isDate(dueTime) ?\n            (+dueTime - this.scheduler.now()) :\n            dueTime;\n    }\n    /**\n     * Creates an Observable that starts emitting after an `initialDelay` and\n     * emits ever increasing numbers after each `period` of time thereafter.\n     *\n     * <span class=\"informal\">Its like {@link interval}, but you can specify when\n     * should the emissions start.</span>\n     *\n     * <img src=\"./img/timer.png\" width=\"100%\">\n     *\n     * `timer` returns an Observable that emits an infinite sequence of ascending\n     * integers, with a constant interval of time, `period` of your choosing\n     * between those emissions. The first emission happens after the specified\n     * `initialDelay`. The initial delay may be a {@link Date}. By default, this\n     * operator uses the `async` IScheduler to provide a notion of time, but you\n     * may pass any IScheduler to it. If `period` is not specified, the output\n     * Observable emits only one value, `0`. Otherwise, it emits an infinite\n     * sequence.\n     *\n     * @example <caption>Emits ascending numbers, one every second (1000ms), starting after 3 seconds</caption>\n     * var numbers = Rx.Observable.timer(3000, 1000);\n     * numbers.subscribe(x => console.log(x));\n     *\n     * @example <caption>Emits one number after five seconds</caption>\n     * var numbers = Rx.Observable.timer(5000);\n     * numbers.subscribe(x => console.log(x));\n     *\n     * @see {@link interval}\n     * @see {@link delay}\n     *\n     * @param {number|Date} initialDelay The initial delay time to wait before\n     * emitting the first value of `0`.\n     * @param {number} [period] The period of time between emissions of the\n     * subsequent numbers.\n     * @param {Scheduler} [scheduler=async] The IScheduler to use for scheduling\n     * the emission of values, and providing a notion of \"time\".\n     * @return {Observable} An Observable that emits a `0` after the\n     * `initialDelay` and ever increasing numbers after each `period` of time\n     * thereafter.\n     * @static true\n     * @name timer\n     * @owner Observable\n     */\n    TimerObservable.create = function (initialDelay, period, scheduler) {\n        if (initialDelay === void 0) { initialDelay = 0; }\n        return new TimerObservable(initialDelay, period, scheduler);\n    };\n    TimerObservable.dispatch = function (state) {\n        var index = state.index, period = state.period, subscriber = state.subscriber;\n        var action = this;\n        subscriber.next(index);\n        if (subscriber.closed) {\n            return;\n        }\n        else if (period === -1) {\n            return subscriber.complete();\n        }\n        state.index = index + 1;\n        action.schedule(state, period);\n    };\n    TimerObservable.prototype._subscribe = function (subscriber) {\n        var index = 0;\n        var _a = this, period = _a.period, dueTime = _a.dueTime, scheduler = _a.scheduler;\n        return scheduler.schedule(TimerObservable.dispatch, dueTime, {\n            index: index, period: period, subscriber: subscriber\n        });\n    };\n    return TimerObservable;\n}(Observable_1.Observable));\nexports.TimerObservable = TimerObservable;\n//# sourceMappingURL=TimerObservable.js.map",
     "\"use strict\";\nvar isScheduler_1 = require('../util/isScheduler');\nvar isArray_1 = require('../util/isArray');\nvar ArrayObservable_1 = require('./ArrayObservable');\nvar combineLatest_1 = require('../operator/combineLatest');\n/* tslint:enable:max-line-length */\n/**\n * Combines multiple Observables to create an Observable whose values are\n * calculated from the latest values of each of its input Observables.\n *\n * <span class=\"informal\">Whenever any input Observable emits a value, it\n * computes a formula using the latest values from all the inputs, then emits\n * the output of that formula.</span>\n *\n * <img src=\"./img/combineLatest.png\" width=\"100%\">\n *\n * `combineLatest` combines the values from all the Observables passed as\n * arguments. This is done by subscribing to each Observable in order and,\n * whenever any Observable emits, collecting an array of the most recent\n * values from each Observable. So if you pass `n` Observables to operator,\n * returned Observable will always emit an array of `n` values, in order\n * corresponding to order of passed Observables (value from the first Observable\n * on the first place and so on).\n *\n * Static version of `combineLatest` accepts either an array of Observables\n * or each Observable can be put directly as an argument. Note that array of\n * Observables is good choice, if you don't know beforehand how many Observables\n * you will combine. Passing empty array will result in Observable that\n * completes immediately.\n *\n * To ensure output array has always the same length, `combineLatest` will\n * actually wait for all input Observables to emit at least once,\n * before it starts emitting results. This means if some Observable emits\n * values before other Observables started emitting, all that values but last\n * will be lost. On the other hand, is some Observable does not emit value but\n * completes, resulting Observable will complete at the same moment without\n * emitting anything, since it will be now impossible to include value from\n * completed Observable in resulting array. Also, if some input Observable does\n * not emit any value and never completes, `combineLatest` will also never emit\n * and never complete, since, again, it will wait for all streams to emit some\n * value.\n *\n * If at least one Observable was passed to `combineLatest` and all passed Observables\n * emitted something, resulting Observable will complete when all combined\n * streams complete. So even if some Observable completes, result of\n * `combineLatest` will still emit values when other Observables do. In case\n * of completed Observable, its value from now on will always be the last\n * emitted value. On the other hand, if any Observable errors, `combineLatest`\n * will error immediately as well, and all other Observables will be unsubscribed.\n *\n * `combineLatest` accepts as optional parameter `project` function, which takes\n * as arguments all values that would normally be emitted by resulting Observable.\n * `project` can return any kind of value, which will be then emitted by Observable\n * instead of default array. Note that `project` does not take as argument that array\n * of values, but values themselves. That means default `project` can be imagined\n * as function that takes all its arguments and puts them into an array.\n *\n *\n * @example <caption>Combine two timer Observables</caption>\n * const firstTimer = Rx.Observable.timer(0, 1000); // emit 0, 1, 2... after every second, starting from now\n * const secondTimer = Rx.Observable.timer(500, 1000); // emit 0, 1, 2... after every second, starting 0,5s from now\n * const combinedTimers = Rx.Observable.combineLatest(firstTimer, secondTimer);\n * combinedTimers.subscribe(value => console.log(value));\n * // Logs\n * // [0, 0] after 0.5s\n * // [1, 0] after 1s\n * // [1, 1] after 1.5s\n * // [2, 1] after 2s\n *\n *\n * @example <caption>Combine an array of Observables</caption>\n * const observables = [1, 5, 10].map(\n *   n => Rx.Observable.of(n).delay(n * 1000).startWith(0) // emit 0 and then emit n after n seconds\n * );\n * const combined = Rx.Observable.combineLatest(observables);\n * combined.subscribe(value => console.log(value));\n * // Logs\n * // [0, 0, 0] immediately\n * // [1, 0, 0] after 1s\n * // [1, 5, 0] after 5s\n * // [1, 5, 10] after 10s\n *\n *\n * @example <caption>Use project function to dynamically calculate the Body-Mass Index</caption>\n * var weight = Rx.Observable.of(70, 72, 76, 79, 75);\n * var height = Rx.Observable.of(1.76, 1.77, 1.78);\n * var bmi = Rx.Observable.combineLatest(weight, height, (w, h) => w / (h * h));\n * bmi.subscribe(x => console.log('BMI is ' + x));\n *\n * // With output to console:\n * // BMI is 24.212293388429753\n * // BMI is 23.93948099205209\n * // BMI is 23.671253629592222\n *\n *\n * @see {@link combineAll}\n * @see {@link merge}\n * @see {@link withLatestFrom}\n *\n * @param {ObservableInput} observable1 An input Observable to combine with other Observables.\n * @param {ObservableInput} observable2 An input Observable to combine with other Observables.\n * More than one input Observables may be given as arguments\n * or an array of Observables may be given as the first argument.\n * @param {function} [project] An optional function to project the values from\n * the combined latest values into a new value on the output Observable.\n * @param {Scheduler} [scheduler=null] The IScheduler to use for subscribing to\n * each input Observable.\n * @return {Observable} An Observable of projected values from the most recent\n * values from each input Observable, or an array of the most recent values from\n * each input Observable.\n * @static true\n * @name combineLatest\n * @owner Observable\n */\nfunction combineLatest() {\n    var observables = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        observables[_i - 0] = arguments[_i];\n    }\n    var project = null;\n    var scheduler = null;\n    if (isScheduler_1.isScheduler(observables[observables.length - 1])) {\n        scheduler = observables.pop();\n    }\n    if (typeof observables[observables.length - 1] === 'function') {\n        project = observables.pop();\n    }\n    // if the first and only other argument besides the resultSelector is an array\n    // assume it's been called with `combineLatest([obs1, obs2, obs3], project)`\n    if (observables.length === 1 && isArray_1.isArray(observables[0])) {\n        observables = observables[0];\n    }\n    return new ArrayObservable_1.ArrayObservable(observables, scheduler).lift(new combineLatest_1.CombineLatestOperator(project));\n}\nexports.combineLatest = combineLatest;\n//# sourceMappingURL=combineLatest.js.map",
     "\"use strict\";\nvar TimerObservable_1 = require('./TimerObservable');\nexports.timer = TimerObservable_1.TimerObservable.create;\n//# sourceMappingURL=timer.js.map",
     "\"use strict\";\nvar zip_1 = require('../operator/zip');\nexports.zip = zip_1.zipStatic;\n//# sourceMappingURL=zip.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\n/**\n * Buffers the source Observable values until `closingNotifier` emits.\n *\n * <span class=\"informal\">Collects values from the past as an array, and emits\n * that array only when another Observable emits.</span>\n *\n * <img src=\"./img/buffer.png\" width=\"100%\">\n *\n * Buffers the incoming Observable values until the given `closingNotifier`\n * Observable emits a value, at which point it emits the buffer on the output\n * Observable and starts a new buffer internally, awaiting the next time\n * `closingNotifier` emits.\n *\n * @example <caption>On every click, emit array of most recent interval events</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var interval = Rx.Observable.interval(1000);\n * var buffered = interval.buffer(clicks);\n * buffered.subscribe(x => console.log(x));\n *\n * @see {@link bufferCount}\n * @see {@link bufferTime}\n * @see {@link bufferToggle}\n * @see {@link bufferWhen}\n * @see {@link window}\n *\n * @param {Observable<any>} closingNotifier An Observable that signals the\n * buffer to be emitted on the output Observable.\n * @return {Observable<T[]>} An Observable of buffers, which are arrays of\n * values.\n * @method buffer\n * @owner Observable\n */\nfunction buffer(closingNotifier) {\n    return this.lift(new BufferOperator(closingNotifier));\n}\nexports.buffer = buffer;\nvar BufferOperator = (function () {\n    function BufferOperator(closingNotifier) {\n        this.closingNotifier = closingNotifier;\n    }\n    BufferOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new BufferSubscriber(subscriber, this.closingNotifier));\n    };\n    return BufferOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar BufferSubscriber = (function (_super) {\n    __extends(BufferSubscriber, _super);\n    function BufferSubscriber(destination, closingNotifier) {\n        _super.call(this, destination);\n        this.buffer = [];\n        this.add(subscribeToResult_1.subscribeToResult(this, closingNotifier));\n    }\n    BufferSubscriber.prototype._next = function (value) {\n        this.buffer.push(value);\n    };\n    BufferSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        var buffer = this.buffer;\n        this.buffer = [];\n        this.destination.next(buffer);\n    };\n    return BufferSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=buffer.js.map",
     "\"use strict\";\nvar TimerObservable_1 = require('./TimerObservable');\nexports.timer = TimerObservable_1.TimerObservable.create;\n//# sourceMappingURL=timer.js.map",
     "\"use strict\";\nvar zip_1 = require('../operator/zip');\nexports.zip = zip_1.zipStatic;\n//# sourceMappingURL=zip.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\n/**\n * Buffers the source Observable values until `closingNotifier` emits.\n *\n * <span class=\"informal\">Collects values from the past as an array, and emits\n * that array only when another Observable emits.</span>\n *\n * <img src=\"./img/buffer.png\" width=\"100%\">\n *\n * Buffers the incoming Observable values until the given `closingNotifier`\n * Observable emits a value, at which point it emits the buffer on the output\n * Observable and starts a new buffer internally, awaiting the next time\n * `closingNotifier` emits.\n *\n * @example <caption>On every click, emit array of most recent interval events</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var interval = Rx.Observable.interval(1000);\n * var buffered = interval.buffer(clicks);\n * buffered.subscribe(x => console.log(x));\n *\n * @see {@link bufferCount}\n * @see {@link bufferTime}\n * @see {@link bufferToggle}\n * @see {@link bufferWhen}\n * @see {@link window}\n *\n * @param {Observable<any>} closingNotifier An Observable that signals the\n * buffer to be emitted on the output Observable.\n * @return {Observable<T[]>} An Observable of buffers, which are arrays of\n * values.\n * @method buffer\n * @owner Observable\n */\nfunction buffer(closingNotifier) {\n    return this.lift(new BufferOperator(closingNotifier));\n}\nexports.buffer = buffer;\nvar BufferOperator = (function () {\n    function BufferOperator(closingNotifier) {\n        this.closingNotifier = closingNotifier;\n    }\n    BufferOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new BufferSubscriber(subscriber, this.closingNotifier));\n    };\n    return BufferOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar BufferSubscriber = (function (_super) {\n    __extends(BufferSubscriber, _super);\n    function BufferSubscriber(destination, closingNotifier) {\n        _super.call(this, destination);\n        this.buffer = [];\n        this.add(subscribeToResult_1.subscribeToResult(this, closingNotifier));\n    }\n    BufferSubscriber.prototype._next = function (value) {\n        this.buffer.push(value);\n    };\n    BufferSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        var buffer = this.buffer;\n        this.buffer = [];\n        this.destination.next(buffer);\n    };\n    return BufferSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=buffer.js.map",
-    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\n/**\n * Buffers the source Observable values until the size hits the maximum\n * `bufferSize` given.\n *\n * <span class=\"informal\">Collects values from the past as an array, and emits\n * that array only when its size reaches `bufferSize`.</span>\n *\n * <img src=\"./img/bufferCount.png\" width=\"100%\">\n *\n * Buffers a number of values from the source Observable by `bufferSize` then\n * emits the buffer and clears it, and starts a new buffer each\n * `startBufferEvery` values. If `startBufferEvery` is not provided or is\n * `null`, then new buffers are started immediately at the start of the source\n * and when each buffer closes and is emitted.\n *\n * @example <caption>Emit the last two click events as an array</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var buffered = clicks.bufferCount(2);\n * buffered.subscribe(x => console.log(x));\n *\n * @example <caption>On every click, emit the last two click events as an array</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var buffered = clicks.bufferCount(2, 1);\n * buffered.subscribe(x => console.log(x));\n *\n * @see {@link buffer}\n * @see {@link bufferTime}\n * @see {@link bufferToggle}\n * @see {@link bufferWhen}\n * @see {@link pairwise}\n * @see {@link windowCount}\n *\n * @param {number} bufferSize The maximum size of the buffer emitted.\n * @param {number} [startBufferEvery] Interval at which to start a new buffer.\n * For example if `startBufferEvery` is `2`, then a new buffer will be started\n * on every other value from the source. A new buffer is started at the\n * beginning of the source by default.\n * @return {Observable<T[]>} An Observable of arrays of buffered values.\n * @method bufferCount\n * @owner Observable\n */\nfunction bufferCount(bufferSize, startBufferEvery) {\n    if (startBufferEvery === void 0) { startBufferEvery = null; }\n    return this.lift(new BufferCountOperator(bufferSize, startBufferEvery));\n}\nexports.bufferCount = bufferCount;\nvar BufferCountOperator = (function () {\n    function BufferCountOperator(bufferSize, startBufferEvery) {\n        this.bufferSize = bufferSize;\n        this.startBufferEvery = startBufferEvery;\n    }\n    BufferCountOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new BufferCountSubscriber(subscriber, this.bufferSize, this.startBufferEvery));\n    };\n    return BufferCountOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar BufferCountSubscriber = (function (_super) {\n    __extends(BufferCountSubscriber, _super);\n    function BufferCountSubscriber(destination, bufferSize, startBufferEvery) {\n        _super.call(this, destination);\n        this.bufferSize = bufferSize;\n        this.startBufferEvery = startBufferEvery;\n        this.buffers = [];\n        this.count = 0;\n    }\n    BufferCountSubscriber.prototype._next = function (value) {\n        var count = this.count++;\n        var _a = this, destination = _a.destination, bufferSize = _a.bufferSize, startBufferEvery = _a.startBufferEvery, buffers = _a.buffers;\n        var startOn = (startBufferEvery == null) ? bufferSize : startBufferEvery;\n        if (count % startOn === 0) {\n            buffers.push([]);\n        }\n        for (var i = buffers.length; i--;) {\n            var buffer = buffers[i];\n            buffer.push(value);\n            if (buffer.length === bufferSize) {\n                buffers.splice(i, 1);\n                destination.next(buffer);\n            }\n        }\n    };\n    BufferCountSubscriber.prototype._complete = function () {\n        var destination = this.destination;\n        var buffers = this.buffers;\n        while (buffers.length > 0) {\n            var buffer = buffers.shift();\n            if (buffer.length > 0) {\n                destination.next(buffer);\n            }\n        }\n        _super.prototype._complete.call(this);\n    };\n    return BufferCountSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=bufferCount.js.map",
+    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\n/**\n * Buffers the source Observable values until the size hits the maximum\n * `bufferSize` given.\n *\n * <span class=\"informal\">Collects values from the past as an array, and emits\n * that array only when its size reaches `bufferSize`.</span>\n *\n * <img src=\"./img/bufferCount.png\" width=\"100%\">\n *\n * Buffers a number of values from the source Observable by `bufferSize` then\n * emits the buffer and clears it, and starts a new buffer each\n * `startBufferEvery` values. If `startBufferEvery` is not provided or is\n * `null`, then new buffers are started immediately at the start of the source\n * and when each buffer closes and is emitted.\n *\n * @example <caption>Emit the last two click events as an array</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var buffered = clicks.bufferCount(2);\n * buffered.subscribe(x => console.log(x));\n *\n * @example <caption>On every click, emit the last two click events as an array</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var buffered = clicks.bufferCount(2, 1);\n * buffered.subscribe(x => console.log(x));\n *\n * @see {@link buffer}\n * @see {@link bufferTime}\n * @see {@link bufferToggle}\n * @see {@link bufferWhen}\n * @see {@link pairwise}\n * @see {@link windowCount}\n *\n * @param {number} bufferSize The maximum size of the buffer emitted.\n * @param {number} [startBufferEvery] Interval at which to start a new buffer.\n * For example if `startBufferEvery` is `2`, then a new buffer will be started\n * on every other value from the source. A new buffer is started at the\n * beginning of the source by default.\n * @return {Observable<T[]>} An Observable of arrays of buffered values.\n * @method bufferCount\n * @owner Observable\n */\nfunction bufferCount(bufferSize, startBufferEvery) {\n    if (startBufferEvery === void 0) { startBufferEvery = null; }\n    return this.lift(new BufferCountOperator(bufferSize, startBufferEvery));\n}\nexports.bufferCount = bufferCount;\nvar BufferCountOperator = (function () {\n    function BufferCountOperator(bufferSize, startBufferEvery) {\n        this.bufferSize = bufferSize;\n        this.startBufferEvery = startBufferEvery;\n        if (!startBufferEvery || bufferSize === startBufferEvery) {\n            this.subscriberClass = BufferCountSubscriber;\n        }\n        else {\n            this.subscriberClass = BufferSkipCountSubscriber;\n        }\n    }\n    BufferCountOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new this.subscriberClass(subscriber, this.bufferSize, this.startBufferEvery));\n    };\n    return BufferCountOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar BufferCountSubscriber = (function (_super) {\n    __extends(BufferCountSubscriber, _super);\n    function BufferCountSubscriber(destination, bufferSize) {\n        _super.call(this, destination);\n        this.bufferSize = bufferSize;\n        this.buffer = [];\n    }\n    BufferCountSubscriber.prototype._next = function (value) {\n        var buffer = this.buffer;\n        buffer.push(value);\n        if (buffer.length == this.bufferSize) {\n            this.destination.next(buffer);\n            this.buffer = [];\n        }\n    };\n    BufferCountSubscriber.prototype._complete = function () {\n        var buffer = this.buffer;\n        if (buffer.length > 0) {\n            this.destination.next(buffer);\n        }\n        _super.prototype._complete.call(this);\n    };\n    return BufferCountSubscriber;\n}(Subscriber_1.Subscriber));\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar BufferSkipCountSubscriber = (function (_super) {\n    __extends(BufferSkipCountSubscriber, _super);\n    function BufferSkipCountSubscriber(destination, bufferSize, startBufferEvery) {\n        _super.call(this, destination);\n        this.bufferSize = bufferSize;\n        this.startBufferEvery = startBufferEvery;\n        this.buffers = [];\n        this.count = 0;\n    }\n    BufferSkipCountSubscriber.prototype._next = function (value) {\n        var _a = this, bufferSize = _a.bufferSize, startBufferEvery = _a.startBufferEvery, buffers = _a.buffers, count = _a.count;\n        this.count++;\n        if (count % startBufferEvery === 0) {\n            buffers.push([]);\n        }\n        for (var i = buffers.length; i--;) {\n            var buffer = buffers[i];\n            buffer.push(value);\n            if (buffer.length === bufferSize) {\n                buffers.splice(i, 1);\n                this.destination.next(buffer);\n            }\n        }\n    };\n    BufferSkipCountSubscriber.prototype._complete = function () {\n        var _a = this, buffers = _a.buffers, destination = _a.destination;\n        while (buffers.length > 0) {\n            var buffer = buffers.shift();\n            if (buffer.length > 0) {\n                destination.next(buffer);\n            }\n        }\n        _super.prototype._complete.call(this);\n    };\n    return BufferSkipCountSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=bufferCount.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscription_1 = require('../Subscription');\nvar tryCatch_1 = require('../util/tryCatch');\nvar errorObject_1 = require('../util/errorObject');\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\n/**\n * Buffers the source Observable values, using a factory function of closing\n * Observables to determine when to close, emit, and reset the buffer.\n *\n * <span class=\"informal\">Collects values from the past as an array. When it\n * starts collecting values, it calls a function that returns an Observable that\n * tells when to close the buffer and restart collecting.</span>\n *\n * <img src=\"./img/bufferWhen.png\" width=\"100%\">\n *\n * Opens a buffer immediately, then closes the buffer when the observable\n * returned by calling `closingSelector` function emits a value. When it closes\n * the buffer, it immediately opens a new buffer and repeats the process.\n *\n * @example <caption>Emit an array of the last clicks every [1-5] random seconds</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var buffered = clicks.bufferWhen(() =>\n *   Rx.Observable.interval(1000 + Math.random() * 4000)\n * );\n * buffered.subscribe(x => console.log(x));\n *\n * @see {@link buffer}\n * @see {@link bufferCount}\n * @see {@link bufferTime}\n * @see {@link bufferToggle}\n * @see {@link windowWhen}\n *\n * @param {function(): Observable} closingSelector A function that takes no\n * arguments and returns an Observable that signals buffer closure.\n * @return {Observable<T[]>} An observable of arrays of buffered values.\n * @method bufferWhen\n * @owner Observable\n */\nfunction bufferWhen(closingSelector) {\n    return this.lift(new BufferWhenOperator(closingSelector));\n}\nexports.bufferWhen = bufferWhen;\nvar BufferWhenOperator = (function () {\n    function BufferWhenOperator(closingSelector) {\n        this.closingSelector = closingSelector;\n    }\n    BufferWhenOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new BufferWhenSubscriber(subscriber, this.closingSelector));\n    };\n    return BufferWhenOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar BufferWhenSubscriber = (function (_super) {\n    __extends(BufferWhenSubscriber, _super);\n    function BufferWhenSubscriber(destination, closingSelector) {\n        _super.call(this, destination);\n        this.closingSelector = closingSelector;\n        this.subscribing = false;\n        this.openBuffer();\n    }\n    BufferWhenSubscriber.prototype._next = function (value) {\n        this.buffer.push(value);\n    };\n    BufferWhenSubscriber.prototype._complete = function () {\n        var buffer = this.buffer;\n        if (buffer) {\n            this.destination.next(buffer);\n        }\n        _super.prototype._complete.call(this);\n    };\n    BufferWhenSubscriber.prototype._unsubscribe = function () {\n        this.buffer = null;\n        this.subscribing = false;\n    };\n    BufferWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        this.openBuffer();\n    };\n    BufferWhenSubscriber.prototype.notifyComplete = function () {\n        if (this.subscribing) {\n            this.complete();\n        }\n        else {\n            this.openBuffer();\n        }\n    };\n    BufferWhenSubscriber.prototype.openBuffer = function () {\n        var closingSubscription = this.closingSubscription;\n        if (closingSubscription) {\n            this.remove(closingSubscription);\n            closingSubscription.unsubscribe();\n        }\n        var buffer = this.buffer;\n        if (this.buffer) {\n            this.destination.next(buffer);\n        }\n        this.buffer = [];\n        var closingNotifier = tryCatch_1.tryCatch(this.closingSelector)();\n        if (closingNotifier === errorObject_1.errorObject) {\n            this.error(errorObject_1.errorObject.e);\n        }\n        else {\n            closingSubscription = new Subscription_1.Subscription();\n            this.closingSubscription = closingSubscription;\n            this.add(closingSubscription);\n            this.subscribing = true;\n            closingSubscription.add(subscribeToResult_1.subscribeToResult(this, closingNotifier));\n            this.subscribing = false;\n        }\n    };\n    return BufferWhenSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=bufferWhen.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\n/**\n * Catches errors on the observable to be handled by returning a new observable or throwing an error.\n *\n * <img src=\"./img/catch.png\" width=\"100%\">\n *\n * @example <caption>Continues with a different Observable when there's an error</caption>\n *\n * Observable.of(1, 2, 3, 4, 5)\n *   .map(n => {\n * \t   if (n == 4) {\n * \t     throw 'four!';\n *     }\n *\t   return n;\n *   })\n *   .catch(err => Observable.of('I', 'II', 'III', 'IV', 'V'))\n *   .subscribe(x => console.log(x));\n *   // 1, 2, 3, I, II, III, IV, V\n *\n * @example <caption>Retries the caught source Observable again in case of error, similar to retry() operator</caption>\n *\n * Observable.of(1, 2, 3, 4, 5)\n *   .map(n => {\n * \t   if (n === 4) {\n * \t     throw 'four!';\n *     }\n * \t   return n;\n *   })\n *   .catch((err, caught) => caught)\n *   .take(30)\n *   .subscribe(x => console.log(x));\n *   // 1, 2, 3, 1, 2, 3, ...\n *\n * @example <caption>Throws a new error when the source Observable throws an error</caption>\n *\n * Observable.of(1, 2, 3, 4, 5)\n *   .map(n => {\n *     if (n == 4) {\n *       throw 'four!';\n *     }\n *     return n;\n *   })\n *   .catch(err => {\n *     throw 'error in source. Details: ' + err;\n *   })\n *   .subscribe(\n *     x => console.log(x),\n *     err => console.log(err)\n *   );\n *   // 1, 2, 3, error in source. Details: four!\n *\n * @param {function} selector a function that takes as arguments `err`, which is the error, and `caught`, which\n *  is the source observable, in case you'd like to \"retry\" that observable by returning it again. Whatever observable\n *  is returned by the `selector` will be used to continue the observable chain.\n * @return {Observable} An observable that originates from either the source or the observable returned by the\n *  catch `selector` function.\n * @method catch\n * @name catch\n * @owner Observable\n */\nfunction _catch(selector) {\n    var operator = new CatchOperator(selector);\n    var caught = this.lift(operator);\n    return (operator.caught = caught);\n}\nexports._catch = _catch;\nvar CatchOperator = (function () {\n    function CatchOperator(selector) {\n        this.selector = selector;\n    }\n    CatchOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));\n    };\n    return CatchOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar CatchSubscriber = (function (_super) {\n    __extends(CatchSubscriber, _super);\n    function CatchSubscriber(destination, selector, caught) {\n        _super.call(this, destination);\n        this.selector = selector;\n        this.caught = caught;\n    }\n    // NOTE: overriding `error` instead of `_error` because we don't want\n    // to have this flag this subscriber as `isStopped`. We can mimic the\n    // behavior of the RetrySubscriber (from the `retry` operator), where\n    // we unsubscribe from our source chain, reset our Subscriber flags,\n    // then subscribe to the selector result.\n    CatchSubscriber.prototype.error = function (err) {\n        if (!this.isStopped) {\n            var result = void 0;\n            try {\n                result = this.selector(err, this.caught);\n            }\n            catch (err2) {\n                _super.prototype.error.call(this, err2);\n                return;\n            }\n            this._unsubscribeAndRecycle();\n            this.add(subscribeToResult_1.subscribeToResult(this, result));\n        }\n    };\n    return CatchSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=catch.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar ArrayObservable_1 = require('../observable/ArrayObservable');\nvar isArray_1 = require('../util/isArray');\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\nvar none = {};\n/* tslint:enable:max-line-length */\n/**\n * Combines multiple Observables to create an Observable whose values are\n * calculated from the latest values of each of its input Observables.\n *\n * <span class=\"informal\">Whenever any input Observable emits a value, it\n * computes a formula using the latest values from all the inputs, then emits\n * the output of that formula.</span>\n *\n * <img src=\"./img/combineLatest.png\" width=\"100%\">\n *\n * `combineLatest` combines the values from this Observable with values from\n * Observables passed as arguments. This is done by subscribing to each\n * Observable, in order, and collecting an array of each of the most recent\n * values any time any of the input Observables emits, then either taking that\n * array and passing it as arguments to an optional `project` function and\n * emitting the return value of that, or just emitting the array of recent\n * values directly if there is no `project` function.\n *\n * @example <caption>Dynamically calculate the Body-Mass Index from an Observable of weight and one for height</caption>\n * var weight = Rx.Observable.of(70, 72, 76, 79, 75);\n * var height = Rx.Observable.of(1.76, 1.77, 1.78);\n * var bmi = weight.combineLatest(height, (w, h) => w / (h * h));\n * bmi.subscribe(x => console.log('BMI is ' + x));\n *\n * // With output to console:\n * // BMI is 24.212293388429753\n * // BMI is 23.93948099205209\n * // BMI is 23.671253629592222\n *\n * @see {@link combineAll}\n * @see {@link merge}\n * @see {@link withLatestFrom}\n *\n * @param {ObservableInput} other An input Observable to combine with the source\n * Observable. More than one input Observables may be given as argument.\n * @param {function} [project] An optional function to project the values from\n * the combined latest values into a new value on the output Observable.\n * @return {Observable} An Observable of projected values from the most recent\n * values from each input Observable, or an array of the most recent values from\n * each input Observable.\n * @method combineLatest\n * @owner Observable\n */\nfunction combineLatest() {\n    var observables = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        observables[_i - 0] = arguments[_i];\n    }\n    var project = null;\n    if (typeof observables[observables.length - 1] === 'function') {\n        project = observables.pop();\n    }\n    // if the first and only other argument besides the resultSelector is an array\n    // assume it's been called with `combineLatest([obs1, obs2, obs3], project)`\n    if (observables.length === 1 && isArray_1.isArray(observables[0])) {\n        observables = observables[0].slice();\n    }\n    observables.unshift(this);\n    return this.lift.call(new ArrayObservable_1.ArrayObservable(observables), new CombineLatestOperator(project));\n}\nexports.combineLatest = combineLatest;\nvar CombineLatestOperator = (function () {\n    function CombineLatestOperator(project) {\n        this.project = project;\n    }\n    CombineLatestOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new CombineLatestSubscriber(subscriber, this.project));\n    };\n    return CombineLatestOperator;\n}());\nexports.CombineLatestOperator = CombineLatestOperator;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar CombineLatestSubscriber = (function (_super) {\n    __extends(CombineLatestSubscriber, _super);\n    function CombineLatestSubscriber(destination, project) {\n        _super.call(this, destination);\n        this.project = project;\n        this.active = 0;\n        this.values = [];\n        this.observables = [];\n    }\n    CombineLatestSubscriber.prototype._next = function (observable) {\n        this.values.push(none);\n        this.observables.push(observable);\n    };\n    CombineLatestSubscriber.prototype._complete = function () {\n        var observables = this.observables;\n        var len = observables.length;\n        if (len === 0) {\n            this.destination.complete();\n        }\n        else {\n            this.active = len;\n            this.toRespond = len;\n            for (var i = 0; i < len; i++) {\n                var observable = observables[i];\n                this.add(subscribeToResult_1.subscribeToResult(this, observable, observable, i));\n            }\n        }\n    };\n    CombineLatestSubscriber.prototype.notifyComplete = function (unused) {\n        if ((this.active -= 1) === 0) {\n            this.destination.complete();\n        }\n    };\n    CombineLatestSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        var values = this.values;\n        var oldVal = values[outerIndex];\n        var toRespond = !this.toRespond\n            ? 0\n            : oldVal === none ? --this.toRespond : this.toRespond;\n        values[outerIndex] = innerValue;\n        if (toRespond === 0) {\n            if (this.project) {\n                this._tryProject(values);\n            }\n            else {\n                this.destination.next(values.slice());\n            }\n        }\n    };\n    CombineLatestSubscriber.prototype._tryProject = function (values) {\n        var result;\n        try {\n            result = this.project.apply(this, values);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.destination.next(result);\n    };\n    return CombineLatestSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\nexports.CombineLatestSubscriber = CombineLatestSubscriber;\n//# sourceMappingURL=combineLatest.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscription_1 = require('../Subscription');\nvar tryCatch_1 = require('../util/tryCatch');\nvar errorObject_1 = require('../util/errorObject');\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\n/**\n * Buffers the source Observable values, using a factory function of closing\n * Observables to determine when to close, emit, and reset the buffer.\n *\n * <span class=\"informal\">Collects values from the past as an array. When it\n * starts collecting values, it calls a function that returns an Observable that\n * tells when to close the buffer and restart collecting.</span>\n *\n * <img src=\"./img/bufferWhen.png\" width=\"100%\">\n *\n * Opens a buffer immediately, then closes the buffer when the observable\n * returned by calling `closingSelector` function emits a value. When it closes\n * the buffer, it immediately opens a new buffer and repeats the process.\n *\n * @example <caption>Emit an array of the last clicks every [1-5] random seconds</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var buffered = clicks.bufferWhen(() =>\n *   Rx.Observable.interval(1000 + Math.random() * 4000)\n * );\n * buffered.subscribe(x => console.log(x));\n *\n * @see {@link buffer}\n * @see {@link bufferCount}\n * @see {@link bufferTime}\n * @see {@link bufferToggle}\n * @see {@link windowWhen}\n *\n * @param {function(): Observable} closingSelector A function that takes no\n * arguments and returns an Observable that signals buffer closure.\n * @return {Observable<T[]>} An observable of arrays of buffered values.\n * @method bufferWhen\n * @owner Observable\n */\nfunction bufferWhen(closingSelector) {\n    return this.lift(new BufferWhenOperator(closingSelector));\n}\nexports.bufferWhen = bufferWhen;\nvar BufferWhenOperator = (function () {\n    function BufferWhenOperator(closingSelector) {\n        this.closingSelector = closingSelector;\n    }\n    BufferWhenOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new BufferWhenSubscriber(subscriber, this.closingSelector));\n    };\n    return BufferWhenOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar BufferWhenSubscriber = (function (_super) {\n    __extends(BufferWhenSubscriber, _super);\n    function BufferWhenSubscriber(destination, closingSelector) {\n        _super.call(this, destination);\n        this.closingSelector = closingSelector;\n        this.subscribing = false;\n        this.openBuffer();\n    }\n    BufferWhenSubscriber.prototype._next = function (value) {\n        this.buffer.push(value);\n    };\n    BufferWhenSubscriber.prototype._complete = function () {\n        var buffer = this.buffer;\n        if (buffer) {\n            this.destination.next(buffer);\n        }\n        _super.prototype._complete.call(this);\n    };\n    BufferWhenSubscriber.prototype._unsubscribe = function () {\n        this.buffer = null;\n        this.subscribing = false;\n    };\n    BufferWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        this.openBuffer();\n    };\n    BufferWhenSubscriber.prototype.notifyComplete = function () {\n        if (this.subscribing) {\n            this.complete();\n        }\n        else {\n            this.openBuffer();\n        }\n    };\n    BufferWhenSubscriber.prototype.openBuffer = function () {\n        var closingSubscription = this.closingSubscription;\n        if (closingSubscription) {\n            this.remove(closingSubscription);\n            closingSubscription.unsubscribe();\n        }\n        var buffer = this.buffer;\n        if (this.buffer) {\n            this.destination.next(buffer);\n        }\n        this.buffer = [];\n        var closingNotifier = tryCatch_1.tryCatch(this.closingSelector)();\n        if (closingNotifier === errorObject_1.errorObject) {\n            this.error(errorObject_1.errorObject.e);\n        }\n        else {\n            closingSubscription = new Subscription_1.Subscription();\n            this.closingSubscription = closingSubscription;\n            this.add(closingSubscription);\n            this.subscribing = true;\n            closingSubscription.add(subscribeToResult_1.subscribeToResult(this, closingNotifier));\n            this.subscribing = false;\n        }\n    };\n    return BufferWhenSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=bufferWhen.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\n/**\n * Catches errors on the observable to be handled by returning a new observable or throwing an error.\n *\n * <img src=\"./img/catch.png\" width=\"100%\">\n *\n * @example <caption>Continues with a different Observable when there's an error</caption>\n *\n * Observable.of(1, 2, 3, 4, 5)\n *   .map(n => {\n * \t   if (n == 4) {\n * \t     throw 'four!';\n *     }\n *\t   return n;\n *   })\n *   .catch(err => Observable.of('I', 'II', 'III', 'IV', 'V'))\n *   .subscribe(x => console.log(x));\n *   // 1, 2, 3, I, II, III, IV, V\n *\n * @example <caption>Retries the caught source Observable again in case of error, similar to retry() operator</caption>\n *\n * Observable.of(1, 2, 3, 4, 5)\n *   .map(n => {\n * \t   if (n === 4) {\n * \t     throw 'four!';\n *     }\n * \t   return n;\n *   })\n *   .catch((err, caught) => caught)\n *   .take(30)\n *   .subscribe(x => console.log(x));\n *   // 1, 2, 3, 1, 2, 3, ...\n *\n * @example <caption>Throws a new error when the source Observable throws an error</caption>\n *\n * Observable.of(1, 2, 3, 4, 5)\n *   .map(n => {\n *     if (n == 4) {\n *       throw 'four!';\n *     }\n *     return n;\n *   })\n *   .catch(err => {\n *     throw 'error in source. Details: ' + err;\n *   })\n *   .subscribe(\n *     x => console.log(x),\n *     err => console.log(err)\n *   );\n *   // 1, 2, 3, error in source. Details: four!\n *\n * @param {function} selector a function that takes as arguments `err`, which is the error, and `caught`, which\n *  is the source observable, in case you'd like to \"retry\" that observable by returning it again. Whatever observable\n *  is returned by the `selector` will be used to continue the observable chain.\n * @return {Observable} An observable that originates from either the source or the observable returned by the\n *  catch `selector` function.\n * @method catch\n * @name catch\n * @owner Observable\n */\nfunction _catch(selector) {\n    var operator = new CatchOperator(selector);\n    var caught = this.lift(operator);\n    return (operator.caught = caught);\n}\nexports._catch = _catch;\nvar CatchOperator = (function () {\n    function CatchOperator(selector) {\n        this.selector = selector;\n    }\n    CatchOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));\n    };\n    return CatchOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar CatchSubscriber = (function (_super) {\n    __extends(CatchSubscriber, _super);\n    function CatchSubscriber(destination, selector, caught) {\n        _super.call(this, destination);\n        this.selector = selector;\n        this.caught = caught;\n    }\n    // NOTE: overriding `error` instead of `_error` because we don't want\n    // to have this flag this subscriber as `isStopped`. We can mimic the\n    // behavior of the RetrySubscriber (from the `retry` operator), where\n    // we unsubscribe from our source chain, reset our Subscriber flags,\n    // then subscribe to the selector result.\n    CatchSubscriber.prototype.error = function (err) {\n        if (!this.isStopped) {\n            var result = void 0;\n            try {\n                result = this.selector(err, this.caught);\n            }\n            catch (err2) {\n                _super.prototype.error.call(this, err2);\n                return;\n            }\n            this._unsubscribeAndRecycle();\n            this.add(subscribeToResult_1.subscribeToResult(this, result));\n        }\n    };\n    return CatchSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=catch.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar ArrayObservable_1 = require('../observable/ArrayObservable');\nvar isArray_1 = require('../util/isArray');\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\nvar none = {};\n/* tslint:enable:max-line-length */\n/**\n * Combines multiple Observables to create an Observable whose values are\n * calculated from the latest values of each of its input Observables.\n *\n * <span class=\"informal\">Whenever any input Observable emits a value, it\n * computes a formula using the latest values from all the inputs, then emits\n * the output of that formula.</span>\n *\n * <img src=\"./img/combineLatest.png\" width=\"100%\">\n *\n * `combineLatest` combines the values from this Observable with values from\n * Observables passed as arguments. This is done by subscribing to each\n * Observable, in order, and collecting an array of each of the most recent\n * values any time any of the input Observables emits, then either taking that\n * array and passing it as arguments to an optional `project` function and\n * emitting the return value of that, or just emitting the array of recent\n * values directly if there is no `project` function.\n *\n * @example <caption>Dynamically calculate the Body-Mass Index from an Observable of weight and one for height</caption>\n * var weight = Rx.Observable.of(70, 72, 76, 79, 75);\n * var height = Rx.Observable.of(1.76, 1.77, 1.78);\n * var bmi = weight.combineLatest(height, (w, h) => w / (h * h));\n * bmi.subscribe(x => console.log('BMI is ' + x));\n *\n * // With output to console:\n * // BMI is 24.212293388429753\n * // BMI is 23.93948099205209\n * // BMI is 23.671253629592222\n *\n * @see {@link combineAll}\n * @see {@link merge}\n * @see {@link withLatestFrom}\n *\n * @param {ObservableInput} other An input Observable to combine with the source\n * Observable. More than one input Observables may be given as argument.\n * @param {function} [project] An optional function to project the values from\n * the combined latest values into a new value on the output Observable.\n * @return {Observable} An Observable of projected values from the most recent\n * values from each input Observable, or an array of the most recent values from\n * each input Observable.\n * @method combineLatest\n * @owner Observable\n */\nfunction combineLatest() {\n    var observables = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        observables[_i - 0] = arguments[_i];\n    }\n    var project = null;\n    if (typeof observables[observables.length - 1] === 'function') {\n        project = observables.pop();\n    }\n    // if the first and only other argument besides the resultSelector is an array\n    // assume it's been called with `combineLatest([obs1, obs2, obs3], project)`\n    if (observables.length === 1 && isArray_1.isArray(observables[0])) {\n        observables = observables[0].slice();\n    }\n    observables.unshift(this);\n    return this.lift.call(new ArrayObservable_1.ArrayObservable(observables), new CombineLatestOperator(project));\n}\nexports.combineLatest = combineLatest;\nvar CombineLatestOperator = (function () {\n    function CombineLatestOperator(project) {\n        this.project = project;\n    }\n    CombineLatestOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new CombineLatestSubscriber(subscriber, this.project));\n    };\n    return CombineLatestOperator;\n}());\nexports.CombineLatestOperator = CombineLatestOperator;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar CombineLatestSubscriber = (function (_super) {\n    __extends(CombineLatestSubscriber, _super);\n    function CombineLatestSubscriber(destination, project) {\n        _super.call(this, destination);\n        this.project = project;\n        this.active = 0;\n        this.values = [];\n        this.observables = [];\n    }\n    CombineLatestSubscriber.prototype._next = function (observable) {\n        this.values.push(none);\n        this.observables.push(observable);\n    };\n    CombineLatestSubscriber.prototype._complete = function () {\n        var observables = this.observables;\n        var len = observables.length;\n        if (len === 0) {\n            this.destination.complete();\n        }\n        else {\n            this.active = len;\n            this.toRespond = len;\n            for (var i = 0; i < len; i++) {\n                var observable = observables[i];\n                this.add(subscribeToResult_1.subscribeToResult(this, observable, observable, i));\n            }\n        }\n    };\n    CombineLatestSubscriber.prototype.notifyComplete = function (unused) {\n        if ((this.active -= 1) === 0) {\n            this.destination.complete();\n        }\n    };\n    CombineLatestSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        var values = this.values;\n        var oldVal = values[outerIndex];\n        var toRespond = !this.toRespond\n            ? 0\n            : oldVal === none ? --this.toRespond : this.toRespond;\n        values[outerIndex] = innerValue;\n        if (toRespond === 0) {\n            if (this.project) {\n                this._tryProject(values);\n            }\n            else {\n                this.destination.next(values.slice());\n            }\n        }\n    };\n    CombineLatestSubscriber.prototype._tryProject = function (values) {\n        var result;\n        try {\n            result = this.project.apply(this, values);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.destination.next(result);\n    };\n    return CombineLatestSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\nexports.CombineLatestSubscriber = CombineLatestSubscriber;\n//# sourceMappingURL=combineLatest.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar async_1 = require('../scheduler/async');\nvar isDate_1 = require('../util/isDate');\nvar Subscriber_1 = require('../Subscriber');\nvar Notification_1 = require('../Notification');\n/**\n * Delays the emission of items from the source Observable by a given timeout or\n * until a given Date.\n *\n * <span class=\"informal\">Time shifts each item by some specified amount of\n * milliseconds.</span>\n *\n * <img src=\"./img/delay.png\" width=\"100%\">\n *\n * If the delay argument is a Number, this operator time shifts the source\n * Observable by that amount of time expressed in milliseconds. The relative\n * time intervals between the values are preserved.\n *\n * If the delay argument is a Date, this operator time shifts the start of the\n * Observable execution until the given date occurs.\n *\n * @example <caption>Delay each click by one second</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var delayedClicks = clicks.delay(1000); // each click emitted after 1 second\n * delayedClicks.subscribe(x => console.log(x));\n *\n * @example <caption>Delay all clicks until a future date happens</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var date = new Date('March 15, 2050 12:00:00'); // in the future\n * var delayedClicks = clicks.delay(date); // click emitted only after that date\n * delayedClicks.subscribe(x => console.log(x));\n *\n * @see {@link debounceTime}\n * @see {@link delayWhen}\n *\n * @param {number|Date} delay The delay duration in milliseconds (a `number`) or\n * a `Date` until which the emission of the source items is delayed.\n * @param {Scheduler} [scheduler=async] The IScheduler to use for\n * managing the timers that handle the time-shift for each item.\n * @return {Observable} An Observable that delays the emissions of the source\n * Observable by the specified timeout or Date.\n * @method delay\n * @owner Observable\n */\nfunction delay(delay, scheduler) {\n    if (scheduler === void 0) { scheduler = async_1.async; }\n    var absoluteDelay = isDate_1.isDate(delay);\n    var delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay);\n    return this.lift(new DelayOperator(delayFor, scheduler));\n}\nexports.delay = delay;\nvar DelayOperator = (function () {\n    function DelayOperator(delay, scheduler) {\n        this.delay = delay;\n        this.scheduler = scheduler;\n    }\n    DelayOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));\n    };\n    return DelayOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar DelaySubscriber = (function (_super) {\n    __extends(DelaySubscriber, _super);\n    function DelaySubscriber(destination, delay, scheduler) {\n        _super.call(this, destination);\n        this.delay = delay;\n        this.scheduler = scheduler;\n        this.queue = [];\n        this.active = false;\n        this.errored = false;\n    }\n    DelaySubscriber.dispatch = function (state) {\n        var source = state.source;\n        var queue = source.queue;\n        var scheduler = state.scheduler;\n        var destination = state.destination;\n        while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) {\n            queue.shift().notification.observe(destination);\n        }\n        if (queue.length > 0) {\n            var delay_1 = Math.max(0, queue[0].time - scheduler.now());\n            this.schedule(state, delay_1);\n        }\n        else {\n            source.active = false;\n        }\n    };\n    DelaySubscriber.prototype._schedule = function (scheduler) {\n        this.active = true;\n        this.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {\n            source: this, destination: this.destination, scheduler: scheduler\n        }));\n    };\n    DelaySubscriber.prototype.scheduleNotification = function (notification) {\n        if (this.errored === true) {\n            return;\n        }\n        var scheduler = this.scheduler;\n        var message = new DelayMessage(scheduler.now() + this.delay, notification);\n        this.queue.push(message);\n        if (this.active === false) {\n            this._schedule(scheduler);\n        }\n    };\n    DelaySubscriber.prototype._next = function (value) {\n        this.scheduleNotification(Notification_1.Notification.createNext(value));\n    };\n    DelaySubscriber.prototype._error = function (err) {\n        this.errored = true;\n        this.queue = [];\n        this.destination.error(err);\n    };\n    DelaySubscriber.prototype._complete = function () {\n        this.scheduleNotification(Notification_1.Notification.createComplete());\n    };\n    return DelaySubscriber;\n}(Subscriber_1.Subscriber));\nvar DelayMessage = (function () {\n    function DelayMessage(time, notification) {\n        this.time = time;\n        this.notification = notification;\n    }\n    return DelayMessage;\n}());\n//# sourceMappingURL=delay.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\nvar Set_1 = require('../util/Set');\n/**\n * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from previous items.\n *\n * If a keySelector function is provided, then it will project each value from the source observable into a new value that it will\n * check for equality with previously projected values. If a keySelector function is not provided, it will use each value from the\n * source observable directly with an equality check against previous values.\n *\n * In JavaScript runtimes that support `Set`, this operator will use a `Set` to improve performance of the distinct value checking.\n *\n * In other runtimes, this operator will use a minimal implementation of `Set` that relies on an `Array` and `indexOf` under the\n * hood, so performance will degrade as more values are checked for distinction. Even in newer browsers, a long-running `distinct`\n * use might result in memory leaks. To help alleviate this in some scenarios, an optional `flushes` parameter is also provided so\n * that the internal `Set` can be \"flushed\", basically clearing it of values.\n *\n * @example <caption>A simple example with numbers</caption>\n * Observable.of(1, 1, 2, 2, 2, 1, 2, 3, 4, 3, 2, 1)\n *   .distinct()\n *   .subscribe(x => console.log(x)); // 1, 2, 3, 4\n *\n * @example <caption>An example using a keySelector function</caption>\n * interface Person {\n *    age: number,\n *    name: string\n * }\n *\n * Observable.of<Person>(\n *     { age: 4, name: 'Foo'},\n *     { age: 7, name: 'Bar'},\n *     { age: 5, name: 'Foo'})\n *     .distinct((p: Person) => p.name)\n *     .subscribe(x => console.log(x));\n *\n * // displays:\n * // { age: 4, name: 'Foo' }\n * // { age: 7, name: 'Bar' }\n *\n * @see {@link distinctUntilChanged}\n * @see {@link distinctUntilKeyChanged}\n *\n * @param {function} [keySelector] Optional function to select which value you want to check as distinct.\n * @param {Observable} [flushes] Optional Observable for flushing the internal HashSet of the operator.\n * @return {Observable} An Observable that emits items from the source Observable with distinct values.\n * @method distinct\n * @owner Observable\n */\nfunction distinct(keySelector, flushes) {\n    return this.lift(new DistinctOperator(keySelector, flushes));\n}\nexports.distinct = distinct;\nvar DistinctOperator = (function () {\n    function DistinctOperator(keySelector, flushes) {\n        this.keySelector = keySelector;\n        this.flushes = flushes;\n    }\n    DistinctOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));\n    };\n    return DistinctOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar DistinctSubscriber = (function (_super) {\n    __extends(DistinctSubscriber, _super);\n    function DistinctSubscriber(destination, keySelector, flushes) {\n        _super.call(this, destination);\n        this.keySelector = keySelector;\n        this.values = new Set_1.Set();\n        if (flushes) {\n            this.add(subscribeToResult_1.subscribeToResult(this, flushes));\n        }\n    }\n    DistinctSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        this.values.clear();\n    };\n    DistinctSubscriber.prototype.notifyError = function (error, innerSub) {\n        this._error(error);\n    };\n    DistinctSubscriber.prototype._next = function (value) {\n        if (this.keySelector) {\n            this._useKeySelector(value);\n        }\n        else {\n            this._finalizeNext(value, value);\n        }\n    };\n    DistinctSubscriber.prototype._useKeySelector = function (value) {\n        var key;\n        var destination = this.destination;\n        try {\n            key = this.keySelector(value);\n        }\n        catch (err) {\n            destination.error(err);\n            return;\n        }\n        this._finalizeNext(key, value);\n    };\n    DistinctSubscriber.prototype._finalizeNext = function (key, value) {\n        var values = this.values;\n        if (!values.has(key)) {\n            values.add(key);\n            this.destination.next(value);\n        }\n    };\n    return DistinctSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\nexports.DistinctSubscriber = DistinctSubscriber;\n//# sourceMappingURL=distinct.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\nvar tryCatch_1 = require('../util/tryCatch');\nvar errorObject_1 = require('../util/errorObject');\n/* tslint:enable:max-line-length */\n/**\n * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from the previous item.\n *\n * If a comparator function is provided, then it will be called for each item to test for whether or not that value should be emitted.\n *\n * If a comparator function is not provided, an equality check is used by default.\n *\n * @example <caption>A simple example with numbers</caption>\n * Observable.of(1, 1, 2, 2, 2, 1, 1, 2, 3, 3, 4)\n *   .distinctUntilChanged()\n *   .subscribe(x => console.log(x)); // 1, 2, 1, 2, 3, 4\n *\n * @example <caption>An example using a compare function</caption>\n * interface Person {\n *    age: number,\n *    name: string\n * }\n *\n * Observable.of<Person>(\n *     { age: 4, name: 'Foo'},\n *     { age: 7, name: 'Bar'},\n *     { age: 5, name: 'Foo'})\n *     { age: 6, name: 'Foo'})\n *     .distinctUntilChanged((p: Person, q: Person) => p.name === q.name)\n *     .subscribe(x => console.log(x));\n *\n * // displays:\n * // { age: 4, name: 'Foo' }\n * // { age: 7, name: 'Bar' }\n * // { age: 5, name: 'Foo' }\n *\n * @see {@link distinct}\n * @see {@link distinctUntilKeyChanged}\n *\n * @param {function} [compare] Optional comparison function called to test if an item is distinct from the previous item in the source.\n * @return {Observable} An Observable that emits items from the source Observable with distinct values.\n * @method distinctUntilChanged\n * @owner Observable\n */\nfunction distinctUntilChanged(compare, keySelector) {\n    return this.lift(new DistinctUntilChangedOperator(compare, keySelector));\n}\nexports.distinctUntilChanged = distinctUntilChanged;\nvar DistinctUntilChangedOperator = (function () {\n    function DistinctUntilChangedOperator(compare, keySelector) {\n        this.compare = compare;\n        this.keySelector = keySelector;\n    }\n    DistinctUntilChangedOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));\n    };\n    return DistinctUntilChangedOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar DistinctUntilChangedSubscriber = (function (_super) {\n    __extends(DistinctUntilChangedSubscriber, _super);\n    function DistinctUntilChangedSubscriber(destination, compare, keySelector) {\n        _super.call(this, destination);\n        this.keySelector = keySelector;\n        this.hasKey = false;\n        if (typeof compare === 'function') {\n            this.compare = compare;\n        }\n    }\n    DistinctUntilChangedSubscriber.prototype.compare = function (x, y) {\n        return x === y;\n    };\n    DistinctUntilChangedSubscriber.prototype._next = function (value) {\n        var keySelector = this.keySelector;\n        var key = value;\n        if (keySelector) {\n            key = tryCatch_1.tryCatch(this.keySelector)(value);\n            if (key === errorObject_1.errorObject) {\n                return this.destination.error(errorObject_1.errorObject.e);\n            }\n        }\n        var result = false;\n        if (this.hasKey) {\n            result = tryCatch_1.tryCatch(this.compare)(this.key, key);\n            if (result === errorObject_1.errorObject) {\n                return this.destination.error(errorObject_1.errorObject.e);\n            }\n        }\n        else {\n            this.hasKey = true;\n        }\n        if (Boolean(result) === false) {\n            this.key = key;\n            this.destination.next(value);\n        }\n    };\n    return DistinctUntilChangedSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=distinctUntilChanged.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar async_1 = require('../scheduler/async');\nvar isDate_1 = require('../util/isDate');\nvar Subscriber_1 = require('../Subscriber');\nvar Notification_1 = require('../Notification');\n/**\n * Delays the emission of items from the source Observable by a given timeout or\n * until a given Date.\n *\n * <span class=\"informal\">Time shifts each item by some specified amount of\n * milliseconds.</span>\n *\n * <img src=\"./img/delay.png\" width=\"100%\">\n *\n * If the delay argument is a Number, this operator time shifts the source\n * Observable by that amount of time expressed in milliseconds. The relative\n * time intervals between the values are preserved.\n *\n * If the delay argument is a Date, this operator time shifts the start of the\n * Observable execution until the given date occurs.\n *\n * @example <caption>Delay each click by one second</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var delayedClicks = clicks.delay(1000); // each click emitted after 1 second\n * delayedClicks.subscribe(x => console.log(x));\n *\n * @example <caption>Delay all clicks until a future date happens</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var date = new Date('March 15, 2050 12:00:00'); // in the future\n * var delayedClicks = clicks.delay(date); // click emitted only after that date\n * delayedClicks.subscribe(x => console.log(x));\n *\n * @see {@link debounceTime}\n * @see {@link delayWhen}\n *\n * @param {number|Date} delay The delay duration in milliseconds (a `number`) or\n * a `Date` until which the emission of the source items is delayed.\n * @param {Scheduler} [scheduler=async] The IScheduler to use for\n * managing the timers that handle the time-shift for each item.\n * @return {Observable} An Observable that delays the emissions of the source\n * Observable by the specified timeout or Date.\n * @method delay\n * @owner Observable\n */\nfunction delay(delay, scheduler) {\n    if (scheduler === void 0) { scheduler = async_1.async; }\n    var absoluteDelay = isDate_1.isDate(delay);\n    var delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay);\n    return this.lift(new DelayOperator(delayFor, scheduler));\n}\nexports.delay = delay;\nvar DelayOperator = (function () {\n    function DelayOperator(delay, scheduler) {\n        this.delay = delay;\n        this.scheduler = scheduler;\n    }\n    DelayOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));\n    };\n    return DelayOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar DelaySubscriber = (function (_super) {\n    __extends(DelaySubscriber, _super);\n    function DelaySubscriber(destination, delay, scheduler) {\n        _super.call(this, destination);\n        this.delay = delay;\n        this.scheduler = scheduler;\n        this.queue = [];\n        this.active = false;\n        this.errored = false;\n    }\n    DelaySubscriber.dispatch = function (state) {\n        var source = state.source;\n        var queue = source.queue;\n        var scheduler = state.scheduler;\n        var destination = state.destination;\n        while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) {\n            queue.shift().notification.observe(destination);\n        }\n        if (queue.length > 0) {\n            var delay_1 = Math.max(0, queue[0].time - scheduler.now());\n            this.schedule(state, delay_1);\n        }\n        else {\n            source.active = false;\n        }\n    };\n    DelaySubscriber.prototype._schedule = function (scheduler) {\n        this.active = true;\n        this.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {\n            source: this, destination: this.destination, scheduler: scheduler\n        }));\n    };\n    DelaySubscriber.prototype.scheduleNotification = function (notification) {\n        if (this.errored === true) {\n            return;\n        }\n        var scheduler = this.scheduler;\n        var message = new DelayMessage(scheduler.now() + this.delay, notification);\n        this.queue.push(message);\n        if (this.active === false) {\n            this._schedule(scheduler);\n        }\n    };\n    DelaySubscriber.prototype._next = function (value) {\n        this.scheduleNotification(Notification_1.Notification.createNext(value));\n    };\n    DelaySubscriber.prototype._error = function (err) {\n        this.errored = true;\n        this.queue = [];\n        this.destination.error(err);\n    };\n    DelaySubscriber.prototype._complete = function () {\n        this.scheduleNotification(Notification_1.Notification.createComplete());\n    };\n    return DelaySubscriber;\n}(Subscriber_1.Subscriber));\nvar DelayMessage = (function () {\n    function DelayMessage(time, notification) {\n        this.time = time;\n        this.notification = notification;\n    }\n    return DelayMessage;\n}());\n//# sourceMappingURL=delay.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\nvar Set_1 = require('../util/Set');\n/**\n * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from previous items.\n *\n * If a keySelector function is provided, then it will project each value from the source observable into a new value that it will\n * check for equality with previously projected values. If a keySelector function is not provided, it will use each value from the\n * source observable directly with an equality check against previous values.\n *\n * In JavaScript runtimes that support `Set`, this operator will use a `Set` to improve performance of the distinct value checking.\n *\n * In other runtimes, this operator will use a minimal implementation of `Set` that relies on an `Array` and `indexOf` under the\n * hood, so performance will degrade as more values are checked for distinction. Even in newer browsers, a long-running `distinct`\n * use might result in memory leaks. To help alleviate this in some scenarios, an optional `flushes` parameter is also provided so\n * that the internal `Set` can be \"flushed\", basically clearing it of values.\n *\n * @example <caption>A simple example with numbers</caption>\n * Observable.of(1, 1, 2, 2, 2, 1, 2, 3, 4, 3, 2, 1)\n *   .distinct()\n *   .subscribe(x => console.log(x)); // 1, 2, 3, 4\n *\n * @example <caption>An example using a keySelector function</caption>\n * interface Person {\n *    age: number,\n *    name: string\n * }\n *\n * Observable.of<Person>(\n *     { age: 4, name: 'Foo'},\n *     { age: 7, name: 'Bar'},\n *     { age: 5, name: 'Foo'})\n *     .distinct((p: Person) => p.name)\n *     .subscribe(x => console.log(x));\n *\n * // displays:\n * // { age: 4, name: 'Foo' }\n * // { age: 7, name: 'Bar' }\n *\n * @see {@link distinctUntilChanged}\n * @see {@link distinctUntilKeyChanged}\n *\n * @param {function} [keySelector] Optional function to select which value you want to check as distinct.\n * @param {Observable} [flushes] Optional Observable for flushing the internal HashSet of the operator.\n * @return {Observable} An Observable that emits items from the source Observable with distinct values.\n * @method distinct\n * @owner Observable\n */\nfunction distinct(keySelector, flushes) {\n    return this.lift(new DistinctOperator(keySelector, flushes));\n}\nexports.distinct = distinct;\nvar DistinctOperator = (function () {\n    function DistinctOperator(keySelector, flushes) {\n        this.keySelector = keySelector;\n        this.flushes = flushes;\n    }\n    DistinctOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));\n    };\n    return DistinctOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar DistinctSubscriber = (function (_super) {\n    __extends(DistinctSubscriber, _super);\n    function DistinctSubscriber(destination, keySelector, flushes) {\n        _super.call(this, destination);\n        this.keySelector = keySelector;\n        this.values = new Set_1.Set();\n        if (flushes) {\n            this.add(subscribeToResult_1.subscribeToResult(this, flushes));\n        }\n    }\n    DistinctSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        this.values.clear();\n    };\n    DistinctSubscriber.prototype.notifyError = function (error, innerSub) {\n        this._error(error);\n    };\n    DistinctSubscriber.prototype._next = function (value) {\n        if (this.keySelector) {\n            this._useKeySelector(value);\n        }\n        else {\n            this._finalizeNext(value, value);\n        }\n    };\n    DistinctSubscriber.prototype._useKeySelector = function (value) {\n        var key;\n        var destination = this.destination;\n        try {\n            key = this.keySelector(value);\n        }\n        catch (err) {\n            destination.error(err);\n            return;\n        }\n        this._finalizeNext(key, value);\n    };\n    DistinctSubscriber.prototype._finalizeNext = function (key, value) {\n        var values = this.values;\n        if (!values.has(key)) {\n            values.add(key);\n            this.destination.next(value);\n        }\n    };\n    return DistinctSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\nexports.DistinctSubscriber = DistinctSubscriber;\n//# sourceMappingURL=distinct.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\nvar tryCatch_1 = require('../util/tryCatch');\nvar errorObject_1 = require('../util/errorObject');\n/* tslint:enable:max-line-length */\n/**\n * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from the previous item.\n *\n * If a comparator function is provided, then it will be called for each item to test for whether or not that value should be emitted.\n *\n * If a comparator function is not provided, an equality check is used by default.\n *\n * @example <caption>A simple example with numbers</caption>\n * Observable.of(1, 1, 2, 2, 2, 1, 1, 2, 3, 3, 4)\n *   .distinctUntilChanged()\n *   .subscribe(x => console.log(x)); // 1, 2, 1, 2, 3, 4\n *\n * @example <caption>An example using a compare function</caption>\n * interface Person {\n *    age: number,\n *    name: string\n * }\n *\n * Observable.of<Person>(\n *     { age: 4, name: 'Foo'},\n *     { age: 7, name: 'Bar'},\n *     { age: 5, name: 'Foo'})\n *     { age: 6, name: 'Foo'})\n *     .distinctUntilChanged((p: Person, q: Person) => p.name === q.name)\n *     .subscribe(x => console.log(x));\n *\n * // displays:\n * // { age: 4, name: 'Foo' }\n * // { age: 7, name: 'Bar' }\n * // { age: 5, name: 'Foo' }\n *\n * @see {@link distinct}\n * @see {@link distinctUntilKeyChanged}\n *\n * @param {function} [compare] Optional comparison function called to test if an item is distinct from the previous item in the source.\n * @return {Observable} An Observable that emits items from the source Observable with distinct values.\n * @method distinctUntilChanged\n * @owner Observable\n */\nfunction distinctUntilChanged(compare, keySelector) {\n    return this.lift(new DistinctUntilChangedOperator(compare, keySelector));\n}\nexports.distinctUntilChanged = distinctUntilChanged;\nvar DistinctUntilChangedOperator = (function () {\n    function DistinctUntilChangedOperator(compare, keySelector) {\n        this.compare = compare;\n        this.keySelector = keySelector;\n    }\n    DistinctUntilChangedOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));\n    };\n    return DistinctUntilChangedOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar DistinctUntilChangedSubscriber = (function (_super) {\n    __extends(DistinctUntilChangedSubscriber, _super);\n    function DistinctUntilChangedSubscriber(destination, compare, keySelector) {\n        _super.call(this, destination);\n        this.keySelector = keySelector;\n        this.hasKey = false;\n        if (typeof compare === 'function') {\n            this.compare = compare;\n        }\n    }\n    DistinctUntilChangedSubscriber.prototype.compare = function (x, y) {\n        return x === y;\n    };\n    DistinctUntilChangedSubscriber.prototype._next = function (value) {\n        var keySelector = this.keySelector;\n        var key = value;\n        if (keySelector) {\n            key = tryCatch_1.tryCatch(this.keySelector)(value);\n            if (key === errorObject_1.errorObject) {\n                return this.destination.error(errorObject_1.errorObject.e);\n            }\n        }\n        var result = false;\n        if (this.hasKey) {\n            result = tryCatch_1.tryCatch(this.compare)(this.key, key);\n            if (result === errorObject_1.errorObject) {\n                return this.destination.error(errorObject_1.errorObject.e);\n            }\n        }\n        else {\n            this.hasKey = true;\n        }\n        if (Boolean(result) === false) {\n            this.key = key;\n            this.destination.next(value);\n        }\n    };\n    return DistinctUntilChangedSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=distinctUntilChanged.js.map",
-    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\n/* tslint:enable:max-line-length */\n/**\n * Perform a side effect for every emission on the source Observable, but return\n * an Observable that is identical to the source.\n *\n * <span class=\"informal\">Intercepts each emission on the source and runs a\n * function, but returns an output which is identical to the source.</span>\n *\n * <img src=\"./img/do.png\" width=\"100%\">\n *\n * Returns a mirrored Observable of the source Observable, but modified so that\n * the provided Observer is called to perform a side effect for every value,\n * error, and completion emitted by the source. Any errors that are thrown in\n * the aforementioned Observer or handlers are safely sent down the error path\n * of the output Observable.\n *\n * This operator is useful for debugging your Observables for the correct values\n * or performing other side effects.\n *\n * Note: this is different to a `subscribe` on the Observable. If the Observable\n * returned by `do` is not subscribed, the side effects specified by the\n * Observer will never happen. `do` therefore simply spies on existing\n * execution, it does not trigger an execution to happen like `subscribe` does.\n *\n * @example <caption>Map every every click to the clientX position of that click, while also logging the click event</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var positions = clicks\n *   .do(ev => console.log(ev))\n *   .map(ev => ev.clientX);\n * positions.subscribe(x => console.log(x));\n *\n * @see {@link map}\n * @see {@link subscribe}\n *\n * @param {Observer|function} [nextOrObserver] A normal Observer object or a\n * callback for `next`.\n * @param {function} [error] Callback for errors in the source.\n * @param {function} [complete] Callback for the completion of the source.\n * @return {Observable} An Observable identical to the source, but runs the\n * specified Observer or callback(s) for each item.\n * @method do\n * @name do\n * @owner Observable\n */\nfunction _do(nextOrObserver, error, complete) {\n    return this.lift(new DoOperator(nextOrObserver, error, complete));\n}\nexports._do = _do;\nvar DoOperator = (function () {\n    function DoOperator(nextOrObserver, error, complete) {\n        this.nextOrObserver = nextOrObserver;\n        this.error = error;\n        this.complete = complete;\n    }\n    DoOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new DoSubscriber(subscriber, this.nextOrObserver, this.error, this.complete));\n    };\n    return DoOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar DoSubscriber = (function (_super) {\n    __extends(DoSubscriber, _super);\n    function DoSubscriber(destination, nextOrObserver, error, complete) {\n        _super.call(this, destination);\n        var safeSubscriber = new Subscriber_1.Subscriber(nextOrObserver, error, complete);\n        safeSubscriber.syncErrorThrowable = true;\n        this.add(safeSubscriber);\n        this.safeSubscriber = safeSubscriber;\n    }\n    DoSubscriber.prototype._next = function (value) {\n        var safeSubscriber = this.safeSubscriber;\n        safeSubscriber.next(value);\n        if (safeSubscriber.syncErrorThrown) {\n            this.destination.error(safeSubscriber.syncErrorValue);\n        }\n        else {\n            this.destination.next(value);\n        }\n    };\n    DoSubscriber.prototype._error = function (err) {\n        var safeSubscriber = this.safeSubscriber;\n        safeSubscriber.error(err);\n        if (safeSubscriber.syncErrorThrown) {\n            this.destination.error(safeSubscriber.syncErrorValue);\n        }\n        else {\n            this.destination.error(err);\n        }\n    };\n    DoSubscriber.prototype._complete = function () {\n        var safeSubscriber = this.safeSubscriber;\n        safeSubscriber.complete();\n        if (safeSubscriber.syncErrorThrown) {\n            this.destination.error(safeSubscriber.syncErrorValue);\n        }\n        else {\n            this.destination.complete();\n        }\n    };\n    return DoSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=do.js.map",
+    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\n/* tslint:enable:max-line-length */\n/**\n * Perform a side effect for every emission on the source Observable, but return\n * an Observable that is identical to the source.\n *\n * <span class=\"informal\">Intercepts each emission on the source and runs a\n * function, but returns an output which is identical to the source as long as errors don't occur.</span>\n *\n * <img src=\"./img/do.png\" width=\"100%\">\n *\n * Returns a mirrored Observable of the source Observable, but modified so that\n * the provided Observer is called to perform a side effect for every value,\n * error, and completion emitted by the source. Any errors that are thrown in\n * the aforementioned Observer or handlers are safely sent down the error path\n * of the output Observable.\n *\n * This operator is useful for debugging your Observables for the correct values\n * or performing other side effects.\n *\n * Note: this is different to a `subscribe` on the Observable. If the Observable\n * returned by `do` is not subscribed, the side effects specified by the\n * Observer will never happen. `do` therefore simply spies on existing\n * execution, it does not trigger an execution to happen like `subscribe` does.\n *\n * @example <caption>Map every every click to the clientX position of that click, while also logging the click event</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var positions = clicks\n *   .do(ev => console.log(ev))\n *   .map(ev => ev.clientX);\n * positions.subscribe(x => console.log(x));\n *\n * @see {@link map}\n * @see {@link subscribe}\n *\n * @param {Observer|function} [nextOrObserver] A normal Observer object or a\n * callback for `next`.\n * @param {function} [error] Callback for errors in the source.\n * @param {function} [complete] Callback for the completion of the source.\n * @return {Observable} An Observable identical to the source, but runs the\n * specified Observer or callback(s) for each item.\n * @method do\n * @name do\n * @owner Observable\n */\nfunction _do(nextOrObserver, error, complete) {\n    return this.lift(new DoOperator(nextOrObserver, error, complete));\n}\nexports._do = _do;\nvar DoOperator = (function () {\n    function DoOperator(nextOrObserver, error, complete) {\n        this.nextOrObserver = nextOrObserver;\n        this.error = error;\n        this.complete = complete;\n    }\n    DoOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new DoSubscriber(subscriber, this.nextOrObserver, this.error, this.complete));\n    };\n    return DoOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar DoSubscriber = (function (_super) {\n    __extends(DoSubscriber, _super);\n    function DoSubscriber(destination, nextOrObserver, error, complete) {\n        _super.call(this, destination);\n        var safeSubscriber = new Subscriber_1.Subscriber(nextOrObserver, error, complete);\n        safeSubscriber.syncErrorThrowable = true;\n        this.add(safeSubscriber);\n        this.safeSubscriber = safeSubscriber;\n    }\n    DoSubscriber.prototype._next = function (value) {\n        var safeSubscriber = this.safeSubscriber;\n        safeSubscriber.next(value);\n        if (safeSubscriber.syncErrorThrown) {\n            this.destination.error(safeSubscriber.syncErrorValue);\n        }\n        else {\n            this.destination.next(value);\n        }\n    };\n    DoSubscriber.prototype._error = function (err) {\n        var safeSubscriber = this.safeSubscriber;\n        safeSubscriber.error(err);\n        if (safeSubscriber.syncErrorThrown) {\n            this.destination.error(safeSubscriber.syncErrorValue);\n        }\n        else {\n            this.destination.error(err);\n        }\n    };\n    DoSubscriber.prototype._complete = function () {\n        var safeSubscriber = this.safeSubscriber;\n        safeSubscriber.complete();\n        if (safeSubscriber.syncErrorThrown) {\n            this.destination.error(safeSubscriber.syncErrorValue);\n        }\n        else {\n            this.destination.complete();\n        }\n    };\n    return DoSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=do.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar tryCatch_1 = require('../util/tryCatch');\nvar errorObject_1 = require('../util/errorObject');\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\n/* tslint:enable:max-line-length */\n/**\n * Recursively projects each source value to an Observable which is merged in\n * the output Observable.\n *\n * <span class=\"informal\">It's similar to {@link mergeMap}, but applies the\n * projection function to every source value as well as every output value.\n * It's recursive.</span>\n *\n * <img src=\"./img/expand.png\" width=\"100%\">\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an Observable, and then merging those resulting Observables and\n * emitting the results of this merger. *Expand* will re-emit on the output\n * Observable every source value. Then, each output value is given to the\n * `project` function which returns an inner Observable to be merged on the\n * output Observable. Those output values resulting from the projection are also\n * given to the `project` function to produce new output values. This is how\n * *expand* behaves recursively.\n *\n * @example <caption>Start emitting the powers of two on every click, at most 10 of them</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var powersOfTwo = clicks\n *   .mapTo(1)\n *   .expand(x => Rx.Observable.of(2 * x).delay(1000))\n *   .take(10);\n * powersOfTwo.subscribe(x => console.log(x));\n *\n * @see {@link mergeMap}\n * @see {@link mergeScan}\n *\n * @param {function(value: T, index: number) => Observable} project A function\n * that, when applied to an item emitted by the source or the output Observable,\n * returns an Observable.\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input\n * Observables being subscribed to concurrently.\n * @param {Scheduler} [scheduler=null] The IScheduler to use for subscribing to\n * each projected inner Observable.\n * @return {Observable} An Observable that emits the source values and also\n * result of applying the projection function to each value emitted on the\n * output Observable and and merging the results of the Observables obtained\n * from this transformation.\n * @method expand\n * @owner Observable\n */\nfunction expand(project, concurrent, scheduler) {\n    if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }\n    if (scheduler === void 0) { scheduler = undefined; }\n    concurrent = (concurrent || 0) < 1 ? Number.POSITIVE_INFINITY : concurrent;\n    return this.lift(new ExpandOperator(project, concurrent, scheduler));\n}\nexports.expand = expand;\nvar ExpandOperator = (function () {\n    function ExpandOperator(project, concurrent, scheduler) {\n        this.project = project;\n        this.concurrent = concurrent;\n        this.scheduler = scheduler;\n    }\n    ExpandOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new ExpandSubscriber(subscriber, this.project, this.concurrent, this.scheduler));\n    };\n    return ExpandOperator;\n}());\nexports.ExpandOperator = ExpandOperator;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar ExpandSubscriber = (function (_super) {\n    __extends(ExpandSubscriber, _super);\n    function ExpandSubscriber(destination, project, concurrent, scheduler) {\n        _super.call(this, destination);\n        this.project = project;\n        this.concurrent = concurrent;\n        this.scheduler = scheduler;\n        this.index = 0;\n        this.active = 0;\n        this.hasCompleted = false;\n        if (concurrent < Number.POSITIVE_INFINITY) {\n            this.buffer = [];\n        }\n    }\n    ExpandSubscriber.dispatch = function (arg) {\n        var subscriber = arg.subscriber, result = arg.result, value = arg.value, index = arg.index;\n        subscriber.subscribeToProjection(result, value, index);\n    };\n    ExpandSubscriber.prototype._next = function (value) {\n        var destination = this.destination;\n        if (destination.closed) {\n            this._complete();\n            return;\n        }\n        var index = this.index++;\n        if (this.active < this.concurrent) {\n            destination.next(value);\n            var result = tryCatch_1.tryCatch(this.project)(value, index);\n            if (result === errorObject_1.errorObject) {\n                destination.error(errorObject_1.errorObject.e);\n            }\n            else if (!this.scheduler) {\n                this.subscribeToProjection(result, value, index);\n            }\n            else {\n                var state = { subscriber: this, result: result, value: value, index: index };\n                this.add(this.scheduler.schedule(ExpandSubscriber.dispatch, 0, state));\n            }\n        }\n        else {\n            this.buffer.push(value);\n        }\n    };\n    ExpandSubscriber.prototype.subscribeToProjection = function (result, value, index) {\n        this.active++;\n        this.add(subscribeToResult_1.subscribeToResult(this, result, value, index));\n    };\n    ExpandSubscriber.prototype._complete = function () {\n        this.hasCompleted = true;\n        if (this.hasCompleted && this.active === 0) {\n            this.destination.complete();\n        }\n    };\n    ExpandSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        this._next(innerValue);\n    };\n    ExpandSubscriber.prototype.notifyComplete = function (innerSub) {\n        var buffer = this.buffer;\n        this.remove(innerSub);\n        this.active--;\n        if (buffer && buffer.length > 0) {\n            this._next(buffer.shift());\n        }\n        if (this.hasCompleted && this.active === 0) {\n            this.destination.complete();\n        }\n    };\n    return ExpandSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\nexports.ExpandSubscriber = ExpandSubscriber;\n//# sourceMappingURL=expand.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\n/* tslint:enable:max-line-length */\n/**\n * Filter items emitted by the source Observable by only emitting those that\n * satisfy a specified predicate.\n *\n * <span class=\"informal\">Like\n * [Array.prototype.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter),\n * it only emits a value from the source if it passes a criterion function.</span>\n *\n * <img src=\"./img/filter.png\" width=\"100%\">\n *\n * Similar to the well-known `Array.prototype.filter` method, this operator\n * takes values from the source Observable, passes them through a `predicate`\n * function and only emits those values that yielded `true`.\n *\n * @example <caption>Emit only click events whose target was a DIV element</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var clicksOnDivs = clicks.filter(ev => ev.target.tagName === 'DIV');\n * clicksOnDivs.subscribe(x => console.log(x));\n *\n * @see {@link distinct}\n * @see {@link distinctUntilChanged}\n * @see {@link distinctUntilKeyChanged}\n * @see {@link ignoreElements}\n * @see {@link partition}\n * @see {@link skip}\n *\n * @param {function(value: T, index: number): boolean} predicate A function that\n * evaluates each value emitted by the source Observable. If it returns `true`,\n * the value is emitted, if `false` the value is not passed to the output\n * Observable. The `index` parameter is the number `i` for the i-th source\n * emission that has happened since the subscription, starting from the number\n * `0`.\n * @param {any} [thisArg] An optional argument to determine the value of `this`\n * in the `predicate` function.\n * @return {Observable} An Observable of values from the source that were\n * allowed by the `predicate` function.\n * @method filter\n * @owner Observable\n */\nfunction filter(predicate, thisArg) {\n    return this.lift(new FilterOperator(predicate, thisArg));\n}\nexports.filter = filter;\nvar FilterOperator = (function () {\n    function FilterOperator(predicate, thisArg) {\n        this.predicate = predicate;\n        this.thisArg = thisArg;\n    }\n    FilterOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg));\n    };\n    return FilterOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar FilterSubscriber = (function (_super) {\n    __extends(FilterSubscriber, _super);\n    function FilterSubscriber(destination, predicate, thisArg) {\n        _super.call(this, destination);\n        this.predicate = predicate;\n        this.thisArg = thisArg;\n        this.count = 0;\n        this.predicate = predicate;\n    }\n    // the try catch block below is left specifically for\n    // optimization and perf reasons. a tryCatcher is not necessary here.\n    FilterSubscriber.prototype._next = function (value) {\n        var result;\n        try {\n            result = this.predicate.call(this.thisArg, value, this.count++);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        if (result) {\n            this.destination.next(value);\n        }\n    };\n    return FilterSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=filter.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\nvar Subscription_1 = require('../Subscription');\n/**\n * Returns an Observable that mirrors the source Observable, but will call a specified function when\n * the source terminates on complete or error.\n * @param {function} callback Function to be called when source terminates.\n * @return {Observable} An Observable that mirrors the source, but will call the specified function on termination.\n * @method finally\n * @owner Observable\n */\nfunction _finally(callback) {\n    return this.lift(new FinallyOperator(callback));\n}\nexports._finally = _finally;\nvar FinallyOperator = (function () {\n    function FinallyOperator(callback) {\n        this.callback = callback;\n    }\n    FinallyOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new FinallySubscriber(subscriber, this.callback));\n    };\n    return FinallyOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar FinallySubscriber = (function (_super) {\n    __extends(FinallySubscriber, _super);\n    function FinallySubscriber(destination, callback) {\n        _super.call(this, destination);\n        this.add(new Subscription_1.Subscription(callback));\n    }\n    return FinallySubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=finally.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\nvar EmptyError_1 = require('../util/EmptyError');\n/**\n * Emits only the first value (or the first value that meets some condition)\n * emitted by the source Observable.\n *\n * <span class=\"informal\">Emits only the first value. Or emits only the first\n * value that passes some test.</span>\n *\n * <img src=\"./img/first.png\" width=\"100%\">\n *\n * If called with no arguments, `first` emits the first value of the source\n * Observable, then completes. If called with a `predicate` function, `first`\n * emits the first value of the source that matches the specified condition. It\n * may also take a `resultSelector` function to produce the output value from\n * the input value, and a `defaultValue` to emit in case the source completes\n * before it is able to emit a valid value. Throws an error if `defaultValue`\n * was not provided and a matching element is not found.\n *\n * @example <caption>Emit only the first click that happens on the DOM</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = clicks.first();\n * result.subscribe(x => console.log(x));\n *\n * @example <caption>Emits the first click that happens on a DIV</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = clicks.first(ev => ev.target.tagName === 'DIV');\n * result.subscribe(x => console.log(x));\n *\n * @see {@link filter}\n * @see {@link find}\n * @see {@link take}\n *\n * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`\n * callback if the Observable completes before any `next` notification was sent.\n *\n * @param {function(value: T, index: number, source: Observable<T>): boolean} [predicate]\n * An optional function called with each item to test for condition matching.\n * @param {function(value: T, index: number): R} [resultSelector] A function to\n * produce the value on the output Observable based on the values\n * and the indices of the source Observable. The arguments passed to this\n * function are:\n * - `value`: the value that was emitted on the source.\n * - `index`: the \"index\" of the value from the source.\n * @param {R} [defaultValue] The default value emitted in case no valid value\n * was found on the source.\n * @return {Observable<T|R>} An Observable of the first item that matches the\n * condition.\n * @method first\n * @owner Observable\n */\nfunction first(predicate, resultSelector, defaultValue) {\n    return this.lift(new FirstOperator(predicate, resultSelector, defaultValue, this));\n}\nexports.first = first;\nvar FirstOperator = (function () {\n    function FirstOperator(predicate, resultSelector, defaultValue, source) {\n        this.predicate = predicate;\n        this.resultSelector = resultSelector;\n        this.defaultValue = defaultValue;\n        this.source = source;\n    }\n    FirstOperator.prototype.call = function (observer, source) {\n        return source.subscribe(new FirstSubscriber(observer, this.predicate, this.resultSelector, this.defaultValue, this.source));\n    };\n    return FirstOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar FirstSubscriber = (function (_super) {\n    __extends(FirstSubscriber, _super);\n    function FirstSubscriber(destination, predicate, resultSelector, defaultValue, source) {\n        _super.call(this, destination);\n        this.predicate = predicate;\n        this.resultSelector = resultSelector;\n        this.defaultValue = defaultValue;\n        this.source = source;\n        this.index = 0;\n        this.hasCompleted = false;\n        this._emitted = false;\n    }\n    FirstSubscriber.prototype._next = function (value) {\n        var index = this.index++;\n        if (this.predicate) {\n            this._tryPredicate(value, index);\n        }\n        else {\n            this._emit(value, index);\n        }\n    };\n    FirstSubscriber.prototype._tryPredicate = function (value, index) {\n        var result;\n        try {\n            result = this.predicate(value, index, this.source);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        if (result) {\n            this._emit(value, index);\n        }\n    };\n    FirstSubscriber.prototype._emit = function (value, index) {\n        if (this.resultSelector) {\n            this._tryResultSelector(value, index);\n            return;\n        }\n        this._emitFinal(value);\n    };\n    FirstSubscriber.prototype._tryResultSelector = function (value, index) {\n        var result;\n        try {\n            result = this.resultSelector(value, index);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this._emitFinal(result);\n    };\n    FirstSubscriber.prototype._emitFinal = function (value) {\n        var destination = this.destination;\n        if (!this._emitted) {\n            this._emitted = true;\n            destination.next(value);\n            destination.complete();\n            this.hasCompleted = true;\n        }\n    };\n    FirstSubscriber.prototype._complete = function () {\n        var destination = this.destination;\n        if (!this.hasCompleted && typeof this.defaultValue !== 'undefined') {\n            destination.next(this.defaultValue);\n            destination.complete();\n        }\n        else if (!this.hasCompleted) {\n            destination.error(new EmptyError_1.EmptyError);\n        }\n    };\n    return FirstSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=first.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\nvar EmptyError_1 = require('../util/EmptyError');\n/* tslint:enable:max-line-length */\n/**\n * Returns an Observable that emits only the last item emitted by the source Observable.\n * It optionally takes a predicate function as a parameter, in which case, rather than emitting\n * the last item from the source Observable, the resulting Observable will emit the last item\n * from the source Observable that satisfies the predicate.\n *\n * <img src=\"./img/last.png\" width=\"100%\">\n *\n * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`\n * callback if the Observable completes before any `next` notification was sent.\n * @param {function} predicate - The condition any source emitted item has to satisfy.\n * @return {Observable} An Observable that emits only the last item satisfying the given condition\n * from the source, or an NoSuchElementException if no such items are emitted.\n * @throws - Throws if no items that match the predicate are emitted by the source Observable.\n * @method last\n * @owner Observable\n */\nfunction last(predicate, resultSelector, defaultValue) {\n    return this.lift(new LastOperator(predicate, resultSelector, defaultValue, this));\n}\nexports.last = last;\nvar LastOperator = (function () {\n    function LastOperator(predicate, resultSelector, defaultValue, source) {\n        this.predicate = predicate;\n        this.resultSelector = resultSelector;\n        this.defaultValue = defaultValue;\n        this.source = source;\n    }\n    LastOperator.prototype.call = function (observer, source) {\n        return source.subscribe(new LastSubscriber(observer, this.predicate, this.resultSelector, this.defaultValue, this.source));\n    };\n    return LastOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar LastSubscriber = (function (_super) {\n    __extends(LastSubscriber, _super);\n    function LastSubscriber(destination, predicate, resultSelector, defaultValue, source) {\n        _super.call(this, destination);\n        this.predicate = predicate;\n        this.resultSelector = resultSelector;\n        this.defaultValue = defaultValue;\n        this.source = source;\n        this.hasValue = false;\n        this.index = 0;\n        if (typeof defaultValue !== 'undefined') {\n            this.lastValue = defaultValue;\n            this.hasValue = true;\n        }\n    }\n    LastSubscriber.prototype._next = function (value) {\n        var index = this.index++;\n        if (this.predicate) {\n            this._tryPredicate(value, index);\n        }\n        else {\n            if (this.resultSelector) {\n                this._tryResultSelector(value, index);\n                return;\n            }\n            this.lastValue = value;\n            this.hasValue = true;\n        }\n    };\n    LastSubscriber.prototype._tryPredicate = function (value, index) {\n        var result;\n        try {\n            result = this.predicate(value, index, this.source);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        if (result) {\n            if (this.resultSelector) {\n                this._tryResultSelector(value, index);\n                return;\n            }\n            this.lastValue = value;\n            this.hasValue = true;\n        }\n    };\n    LastSubscriber.prototype._tryResultSelector = function (value, index) {\n        var result;\n        try {\n            result = this.resultSelector(value, index);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.lastValue = result;\n        this.hasValue = true;\n    };\n    LastSubscriber.prototype._complete = function () {\n        var destination = this.destination;\n        if (this.hasValue) {\n            destination.next(this.lastValue);\n            destination.complete();\n        }\n        else {\n            destination.error(new EmptyError_1.EmptyError);\n        }\n    };\n    return LastSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=last.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar tryCatch_1 = require('../util/tryCatch');\nvar errorObject_1 = require('../util/errorObject');\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\n/* tslint:enable:max-line-length */\n/**\n * Recursively projects each source value to an Observable which is merged in\n * the output Observable.\n *\n * <span class=\"informal\">It's similar to {@link mergeMap}, but applies the\n * projection function to every source value as well as every output value.\n * It's recursive.</span>\n *\n * <img src=\"./img/expand.png\" width=\"100%\">\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an Observable, and then merging those resulting Observables and\n * emitting the results of this merger. *Expand* will re-emit on the output\n * Observable every source value. Then, each output value is given to the\n * `project` function which returns an inner Observable to be merged on the\n * output Observable. Those output values resulting from the projection are also\n * given to the `project` function to produce new output values. This is how\n * *expand* behaves recursively.\n *\n * @example <caption>Start emitting the powers of two on every click, at most 10 of them</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var powersOfTwo = clicks\n *   .mapTo(1)\n *   .expand(x => Rx.Observable.of(2 * x).delay(1000))\n *   .take(10);\n * powersOfTwo.subscribe(x => console.log(x));\n *\n * @see {@link mergeMap}\n * @see {@link mergeScan}\n *\n * @param {function(value: T, index: number) => Observable} project A function\n * that, when applied to an item emitted by the source or the output Observable,\n * returns an Observable.\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input\n * Observables being subscribed to concurrently.\n * @param {Scheduler} [scheduler=null] The IScheduler to use for subscribing to\n * each projected inner Observable.\n * @return {Observable} An Observable that emits the source values and also\n * result of applying the projection function to each value emitted on the\n * output Observable and and merging the results of the Observables obtained\n * from this transformation.\n * @method expand\n * @owner Observable\n */\nfunction expand(project, concurrent, scheduler) {\n    if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }\n    if (scheduler === void 0) { scheduler = undefined; }\n    concurrent = (concurrent || 0) < 1 ? Number.POSITIVE_INFINITY : concurrent;\n    return this.lift(new ExpandOperator(project, concurrent, scheduler));\n}\nexports.expand = expand;\nvar ExpandOperator = (function () {\n    function ExpandOperator(project, concurrent, scheduler) {\n        this.project = project;\n        this.concurrent = concurrent;\n        this.scheduler = scheduler;\n    }\n    ExpandOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new ExpandSubscriber(subscriber, this.project, this.concurrent, this.scheduler));\n    };\n    return ExpandOperator;\n}());\nexports.ExpandOperator = ExpandOperator;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar ExpandSubscriber = (function (_super) {\n    __extends(ExpandSubscriber, _super);\n    function ExpandSubscriber(destination, project, concurrent, scheduler) {\n        _super.call(this, destination);\n        this.project = project;\n        this.concurrent = concurrent;\n        this.scheduler = scheduler;\n        this.index = 0;\n        this.active = 0;\n        this.hasCompleted = false;\n        if (concurrent < Number.POSITIVE_INFINITY) {\n            this.buffer = [];\n        }\n    }\n    ExpandSubscriber.dispatch = function (arg) {\n        var subscriber = arg.subscriber, result = arg.result, value = arg.value, index = arg.index;\n        subscriber.subscribeToProjection(result, value, index);\n    };\n    ExpandSubscriber.prototype._next = function (value) {\n        var destination = this.destination;\n        if (destination.closed) {\n            this._complete();\n            return;\n        }\n        var index = this.index++;\n        if (this.active < this.concurrent) {\n            destination.next(value);\n            var result = tryCatch_1.tryCatch(this.project)(value, index);\n            if (result === errorObject_1.errorObject) {\n                destination.error(errorObject_1.errorObject.e);\n            }\n            else if (!this.scheduler) {\n                this.subscribeToProjection(result, value, index);\n            }\n            else {\n                var state = { subscriber: this, result: result, value: value, index: index };\n                this.add(this.scheduler.schedule(ExpandSubscriber.dispatch, 0, state));\n            }\n        }\n        else {\n            this.buffer.push(value);\n        }\n    };\n    ExpandSubscriber.prototype.subscribeToProjection = function (result, value, index) {\n        this.active++;\n        this.add(subscribeToResult_1.subscribeToResult(this, result, value, index));\n    };\n    ExpandSubscriber.prototype._complete = function () {\n        this.hasCompleted = true;\n        if (this.hasCompleted && this.active === 0) {\n            this.destination.complete();\n        }\n    };\n    ExpandSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        this._next(innerValue);\n    };\n    ExpandSubscriber.prototype.notifyComplete = function (innerSub) {\n        var buffer = this.buffer;\n        this.remove(innerSub);\n        this.active--;\n        if (buffer && buffer.length > 0) {\n            this._next(buffer.shift());\n        }\n        if (this.hasCompleted && this.active === 0) {\n            this.destination.complete();\n        }\n    };\n    return ExpandSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\nexports.ExpandSubscriber = ExpandSubscriber;\n//# sourceMappingURL=expand.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\n/* tslint:enable:max-line-length */\n/**\n * Filter items emitted by the source Observable by only emitting those that\n * satisfy a specified predicate.\n *\n * <span class=\"informal\">Like\n * [Array.prototype.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter),\n * it only emits a value from the source if it passes a criterion function.</span>\n *\n * <img src=\"./img/filter.png\" width=\"100%\">\n *\n * Similar to the well-known `Array.prototype.filter` method, this operator\n * takes values from the source Observable, passes them through a `predicate`\n * function and only emits those values that yielded `true`.\n *\n * @example <caption>Emit only click events whose target was a DIV element</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var clicksOnDivs = clicks.filter(ev => ev.target.tagName === 'DIV');\n * clicksOnDivs.subscribe(x => console.log(x));\n *\n * @see {@link distinct}\n * @see {@link distinctUntilChanged}\n * @see {@link distinctUntilKeyChanged}\n * @see {@link ignoreElements}\n * @see {@link partition}\n * @see {@link skip}\n *\n * @param {function(value: T, index: number): boolean} predicate A function that\n * evaluates each value emitted by the source Observable. If it returns `true`,\n * the value is emitted, if `false` the value is not passed to the output\n * Observable. The `index` parameter is the number `i` for the i-th source\n * emission that has happened since the subscription, starting from the number\n * `0`.\n * @param {any} [thisArg] An optional argument to determine the value of `this`\n * in the `predicate` function.\n * @return {Observable} An Observable of values from the source that were\n * allowed by the `predicate` function.\n * @method filter\n * @owner Observable\n */\nfunction filter(predicate, thisArg) {\n    return this.lift(new FilterOperator(predicate, thisArg));\n}\nexports.filter = filter;\nvar FilterOperator = (function () {\n    function FilterOperator(predicate, thisArg) {\n        this.predicate = predicate;\n        this.thisArg = thisArg;\n    }\n    FilterOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg));\n    };\n    return FilterOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar FilterSubscriber = (function (_super) {\n    __extends(FilterSubscriber, _super);\n    function FilterSubscriber(destination, predicate, thisArg) {\n        _super.call(this, destination);\n        this.predicate = predicate;\n        this.thisArg = thisArg;\n        this.count = 0;\n        this.predicate = predicate;\n    }\n    // the try catch block below is left specifically for\n    // optimization and perf reasons. a tryCatcher is not necessary here.\n    FilterSubscriber.prototype._next = function (value) {\n        var result;\n        try {\n            result = this.predicate.call(this.thisArg, value, this.count++);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        if (result) {\n            this.destination.next(value);\n        }\n    };\n    return FilterSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=filter.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\nvar Subscription_1 = require('../Subscription');\n/**\n * Returns an Observable that mirrors the source Observable, but will call a specified function when\n * the source terminates on complete or error.\n * @param {function} callback Function to be called when source terminates.\n * @return {Observable} An Observable that mirrors the source, but will call the specified function on termination.\n * @method finally\n * @owner Observable\n */\nfunction _finally(callback) {\n    return this.lift(new FinallyOperator(callback));\n}\nexports._finally = _finally;\nvar FinallyOperator = (function () {\n    function FinallyOperator(callback) {\n        this.callback = callback;\n    }\n    FinallyOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new FinallySubscriber(subscriber, this.callback));\n    };\n    return FinallyOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar FinallySubscriber = (function (_super) {\n    __extends(FinallySubscriber, _super);\n    function FinallySubscriber(destination, callback) {\n        _super.call(this, destination);\n        this.add(new Subscription_1.Subscription(callback));\n    }\n    return FinallySubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=finally.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\nvar EmptyError_1 = require('../util/EmptyError');\n/**\n * Emits only the first value (or the first value that meets some condition)\n * emitted by the source Observable.\n *\n * <span class=\"informal\">Emits only the first value. Or emits only the first\n * value that passes some test.</span>\n *\n * <img src=\"./img/first.png\" width=\"100%\">\n *\n * If called with no arguments, `first` emits the first value of the source\n * Observable, then completes. If called with a `predicate` function, `first`\n * emits the first value of the source that matches the specified condition. It\n * may also take a `resultSelector` function to produce the output value from\n * the input value, and a `defaultValue` to emit in case the source completes\n * before it is able to emit a valid value. Throws an error if `defaultValue`\n * was not provided and a matching element is not found.\n *\n * @example <caption>Emit only the first click that happens on the DOM</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = clicks.first();\n * result.subscribe(x => console.log(x));\n *\n * @example <caption>Emits the first click that happens on a DIV</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = clicks.first(ev => ev.target.tagName === 'DIV');\n * result.subscribe(x => console.log(x));\n *\n * @see {@link filter}\n * @see {@link find}\n * @see {@link take}\n *\n * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`\n * callback if the Observable completes before any `next` notification was sent.\n *\n * @param {function(value: T, index: number, source: Observable<T>): boolean} [predicate]\n * An optional function called with each item to test for condition matching.\n * @param {function(value: T, index: number): R} [resultSelector] A function to\n * produce the value on the output Observable based on the values\n * and the indices of the source Observable. The arguments passed to this\n * function are:\n * - `value`: the value that was emitted on the source.\n * - `index`: the \"index\" of the value from the source.\n * @param {R} [defaultValue] The default value emitted in case no valid value\n * was found on the source.\n * @return {Observable<T|R>} An Observable of the first item that matches the\n * condition.\n * @method first\n * @owner Observable\n */\nfunction first(predicate, resultSelector, defaultValue) {\n    return this.lift(new FirstOperator(predicate, resultSelector, defaultValue, this));\n}\nexports.first = first;\nvar FirstOperator = (function () {\n    function FirstOperator(predicate, resultSelector, defaultValue, source) {\n        this.predicate = predicate;\n        this.resultSelector = resultSelector;\n        this.defaultValue = defaultValue;\n        this.source = source;\n    }\n    FirstOperator.prototype.call = function (observer, source) {\n        return source.subscribe(new FirstSubscriber(observer, this.predicate, this.resultSelector, this.defaultValue, this.source));\n    };\n    return FirstOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar FirstSubscriber = (function (_super) {\n    __extends(FirstSubscriber, _super);\n    function FirstSubscriber(destination, predicate, resultSelector, defaultValue, source) {\n        _super.call(this, destination);\n        this.predicate = predicate;\n        this.resultSelector = resultSelector;\n        this.defaultValue = defaultValue;\n        this.source = source;\n        this.index = 0;\n        this.hasCompleted = false;\n        this._emitted = false;\n    }\n    FirstSubscriber.prototype._next = function (value) {\n        var index = this.index++;\n        if (this.predicate) {\n            this._tryPredicate(value, index);\n        }\n        else {\n            this._emit(value, index);\n        }\n    };\n    FirstSubscriber.prototype._tryPredicate = function (value, index) {\n        var result;\n        try {\n            result = this.predicate(value, index, this.source);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        if (result) {\n            this._emit(value, index);\n        }\n    };\n    FirstSubscriber.prototype._emit = function (value, index) {\n        if (this.resultSelector) {\n            this._tryResultSelector(value, index);\n            return;\n        }\n        this._emitFinal(value);\n    };\n    FirstSubscriber.prototype._tryResultSelector = function (value, index) {\n        var result;\n        try {\n            result = this.resultSelector(value, index);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this._emitFinal(result);\n    };\n    FirstSubscriber.prototype._emitFinal = function (value) {\n        var destination = this.destination;\n        if (!this._emitted) {\n            this._emitted = true;\n            destination.next(value);\n            destination.complete();\n            this.hasCompleted = true;\n        }\n    };\n    FirstSubscriber.prototype._complete = function () {\n        var destination = this.destination;\n        if (!this.hasCompleted && typeof this.defaultValue !== 'undefined') {\n            destination.next(this.defaultValue);\n            destination.complete();\n        }\n        else if (!this.hasCompleted) {\n            destination.error(new EmptyError_1.EmptyError);\n        }\n    };\n    return FirstSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=first.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\nvar EmptyError_1 = require('../util/EmptyError');\n/* tslint:enable:max-line-length */\n/**\n * Returns an Observable that emits only the last item emitted by the source Observable.\n * It optionally takes a predicate function as a parameter, in which case, rather than emitting\n * the last item from the source Observable, the resulting Observable will emit the last item\n * from the source Observable that satisfies the predicate.\n *\n * <img src=\"./img/last.png\" width=\"100%\">\n *\n * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`\n * callback if the Observable completes before any `next` notification was sent.\n * @param {function} predicate - The condition any source emitted item has to satisfy.\n * @return {Observable} An Observable that emits only the last item satisfying the given condition\n * from the source, or an NoSuchElementException if no such items are emitted.\n * @throws - Throws if no items that match the predicate are emitted by the source Observable.\n * @method last\n * @owner Observable\n */\nfunction last(predicate, resultSelector, defaultValue) {\n    return this.lift(new LastOperator(predicate, resultSelector, defaultValue, this));\n}\nexports.last = last;\nvar LastOperator = (function () {\n    function LastOperator(predicate, resultSelector, defaultValue, source) {\n        this.predicate = predicate;\n        this.resultSelector = resultSelector;\n        this.defaultValue = defaultValue;\n        this.source = source;\n    }\n    LastOperator.prototype.call = function (observer, source) {\n        return source.subscribe(new LastSubscriber(observer, this.predicate, this.resultSelector, this.defaultValue, this.source));\n    };\n    return LastOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar LastSubscriber = (function (_super) {\n    __extends(LastSubscriber, _super);\n    function LastSubscriber(destination, predicate, resultSelector, defaultValue, source) {\n        _super.call(this, destination);\n        this.predicate = predicate;\n        this.resultSelector = resultSelector;\n        this.defaultValue = defaultValue;\n        this.source = source;\n        this.hasValue = false;\n        this.index = 0;\n        if (typeof defaultValue !== 'undefined') {\n            this.lastValue = defaultValue;\n            this.hasValue = true;\n        }\n    }\n    LastSubscriber.prototype._next = function (value) {\n        var index = this.index++;\n        if (this.predicate) {\n            this._tryPredicate(value, index);\n        }\n        else {\n            if (this.resultSelector) {\n                this._tryResultSelector(value, index);\n                return;\n            }\n            this.lastValue = value;\n            this.hasValue = true;\n        }\n    };\n    LastSubscriber.prototype._tryPredicate = function (value, index) {\n        var result;\n        try {\n            result = this.predicate(value, index, this.source);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        if (result) {\n            if (this.resultSelector) {\n                this._tryResultSelector(value, index);\n                return;\n            }\n            this.lastValue = value;\n            this.hasValue = true;\n        }\n    };\n    LastSubscriber.prototype._tryResultSelector = function (value, index) {\n        var result;\n        try {\n            result = this.resultSelector(value, index);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.lastValue = result;\n        this.hasValue = true;\n    };\n    LastSubscriber.prototype._complete = function () {\n        var destination = this.destination;\n        if (this.hasValue) {\n            destination.next(this.lastValue);\n            destination.complete();\n        }\n        else {\n            destination.error(new EmptyError_1.EmptyError);\n        }\n    };\n    return LastSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=last.js.map",
-    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\n/**\n * Applies a given `project` function to each value emitted by the source\n * Observable, and emits the resulting values as an Observable.\n *\n * <span class=\"informal\">Like [Array.prototype.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map),\n * it passes each source value through a transformation function to get\n * corresponding output values.</span>\n *\n * <img src=\"./img/map.png\" width=\"100%\">\n *\n * Similar to the well known `Array.prototype.map` function, this operator\n * applies a projection to each value and emits that projection in the output\n * Observable.\n *\n * @example <caption>Map every every click to the clientX position of that click</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var positions = clicks.map(ev => ev.clientX);\n * positions.subscribe(x => console.log(x));\n *\n * @see {@link mapTo}\n * @see {@link pluck}\n *\n * @param {function(value: T, index: number): R} project The function to apply\n * to each `value` emitted by the source Observable. The `index` parameter is\n * the number `i` for the i-th emission that has happened since the\n * subscription, starting from the number `0`.\n * @param {any} [thisArg] An optional argument to define what `this` is in the\n * `project` function.\n * @return {Observable<R>} An Observable that emits the values from the source\n * Observable transformed by the given `project` function.\n * @method map\n * @owner Observable\n */\nfunction map(project, thisArg) {\n    if (typeof project !== 'function') {\n        throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');\n    }\n    return this.lift(new MapOperator(project, thisArg));\n}\nexports.map = map;\nvar MapOperator = (function () {\n    function MapOperator(project, thisArg) {\n        this.project = project;\n        this.thisArg = thisArg;\n    }\n    MapOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));\n    };\n    return MapOperator;\n}());\nexports.MapOperator = MapOperator;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar MapSubscriber = (function (_super) {\n    __extends(MapSubscriber, _super);\n    function MapSubscriber(destination, project, thisArg) {\n        _super.call(this, destination);\n        this.project = project;\n        this.count = 0;\n        this.thisArg = thisArg || this;\n    }\n    // NOTE: This looks unoptimized, but it's actually purposefully NOT\n    // using try/catch optimizations.\n    MapSubscriber.prototype._next = function (value) {\n        var result;\n        try {\n            result = this.project.call(this.thisArg, value, this.count++);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.destination.next(result);\n    };\n    return MapSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=map.js.map",
+    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\n/**\n * Applies a given `project` function to each value emitted by the source\n * Observable, and emits the resulting values as an Observable.\n *\n * <span class=\"informal\">Like [Array.prototype.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map),\n * it passes each source value through a transformation function to get\n * corresponding output values.</span>\n *\n * <img src=\"./img/map.png\" width=\"100%\">\n *\n * Similar to the well known `Array.prototype.map` function, this operator\n * applies a projection to each value and emits that projection in the output\n * Observable.\n *\n * @example <caption>Map every click to the clientX position of that click</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var positions = clicks.map(ev => ev.clientX);\n * positions.subscribe(x => console.log(x));\n *\n * @see {@link mapTo}\n * @see {@link pluck}\n *\n * @param {function(value: T, index: number): R} project The function to apply\n * to each `value` emitted by the source Observable. The `index` parameter is\n * the number `i` for the i-th emission that has happened since the\n * subscription, starting from the number `0`.\n * @param {any} [thisArg] An optional argument to define what `this` is in the\n * `project` function.\n * @return {Observable<R>} An Observable that emits the values from the source\n * Observable transformed by the given `project` function.\n * @method map\n * @owner Observable\n */\nfunction map(project, thisArg) {\n    if (typeof project !== 'function') {\n        throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');\n    }\n    return this.lift(new MapOperator(project, thisArg));\n}\nexports.map = map;\nvar MapOperator = (function () {\n    function MapOperator(project, thisArg) {\n        this.project = project;\n        this.thisArg = thisArg;\n    }\n    MapOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));\n    };\n    return MapOperator;\n}());\nexports.MapOperator = MapOperator;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar MapSubscriber = (function (_super) {\n    __extends(MapSubscriber, _super);\n    function MapSubscriber(destination, project, thisArg) {\n        _super.call(this, destination);\n        this.project = project;\n        this.count = 0;\n        this.thisArg = thisArg || this;\n    }\n    // NOTE: This looks unoptimized, but it's actually purposefully NOT\n    // using try/catch optimizations.\n    MapSubscriber.prototype._next = function (value) {\n        var result;\n        try {\n            result = this.project.call(this.thisArg, value, this.count++);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.destination.next(result);\n    };\n    return MapSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=map.js.map",
     "\"use strict\";\nvar Observable_1 = require('../Observable');\nvar ArrayObservable_1 = require('../observable/ArrayObservable');\nvar mergeAll_1 = require('./mergeAll');\nvar isScheduler_1 = require('../util/isScheduler');\n/* tslint:enable:max-line-length */\n/**\n * Creates an output Observable which concurrently emits all values from every\n * given input Observable.\n *\n * <span class=\"informal\">Flattens multiple Observables together by blending\n * their values into one Observable.</span>\n *\n * <img src=\"./img/merge.png\" width=\"100%\">\n *\n * `merge` subscribes to each given input Observable (either the source or an\n * Observable given as argument), and simply forwards (without doing any\n * transformation) all the values from all the input Observables to the output\n * Observable. The output Observable only completes once all input Observables\n * have completed. Any error delivered by an input Observable will be immediately\n * emitted on the output Observable.\n *\n * @example <caption>Merge together two Observables: 1s interval and clicks</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var timer = Rx.Observable.interval(1000);\n * var clicksOrTimer = clicks.merge(timer);\n * clicksOrTimer.subscribe(x => console.log(x));\n *\n * @example <caption>Merge together 3 Observables, but only 2 run concurrently</caption>\n * var timer1 = Rx.Observable.interval(1000).take(10);\n * var timer2 = Rx.Observable.interval(2000).take(6);\n * var timer3 = Rx.Observable.interval(500).take(10);\n * var concurrent = 2; // the argument\n * var merged = timer1.merge(timer2, timer3, concurrent);\n * merged.subscribe(x => console.log(x));\n *\n * @see {@link mergeAll}\n * @see {@link mergeMap}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n *\n * @param {ObservableInput} other An input Observable to merge with the source\n * Observable. More than one input Observables may be given as argument.\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input\n * Observables being subscribed to concurrently.\n * @param {Scheduler} [scheduler=null] The IScheduler to use for managing\n * concurrency of input Observables.\n * @return {Observable} An Observable that emits items that are the result of\n * every input Observable.\n * @method merge\n * @owner Observable\n */\nfunction merge() {\n    var observables = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        observables[_i - 0] = arguments[_i];\n    }\n    return this.lift.call(mergeStatic.apply(void 0, [this].concat(observables)));\n}\nexports.merge = merge;\n/* tslint:enable:max-line-length */\n/**\n * Creates an output Observable which concurrently emits all values from every\n * given input Observable.\n *\n * <span class=\"informal\">Flattens multiple Observables together by blending\n * their values into one Observable.</span>\n *\n * <img src=\"./img/merge.png\" width=\"100%\">\n *\n * `merge` subscribes to each given input Observable (as arguments), and simply\n * forwards (without doing any transformation) all the values from all the input\n * Observables to the output Observable. The output Observable only completes\n * once all input Observables have completed. Any error delivered by an input\n * Observable will be immediately emitted on the output Observable.\n *\n * @example <caption>Merge together two Observables: 1s interval and clicks</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var timer = Rx.Observable.interval(1000);\n * var clicksOrTimer = Rx.Observable.merge(clicks, timer);\n * clicksOrTimer.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // timer will emit ascending values, one every second(1000ms) to console\n * // clicks logs MouseEvents to console everytime the \"document\" is clicked\n * // Since the two streams are merged you see these happening\n * // as they occur.\n *\n * @example <caption>Merge together 3 Observables, but only 2 run concurrently</caption>\n * var timer1 = Rx.Observable.interval(1000).take(10);\n * var timer2 = Rx.Observable.interval(2000).take(6);\n * var timer3 = Rx.Observable.interval(500).take(10);\n * var concurrent = 2; // the argument\n * var merged = Rx.Observable.merge(timer1, timer2, timer3, concurrent);\n * merged.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // - First timer1 and timer2 will run concurrently\n * // - timer1 will emit a value every 1000ms for 10 iterations\n * // - timer2 will emit a value every 2000ms for 6 iterations\n * // - after timer1 hits it's max iteration, timer2 will\n * //   continue, and timer3 will start to run concurrently with timer2\n * // - when timer2 hits it's max iteration it terminates, and\n * //   timer3 will continue to emit a value every 500ms until it is complete\n *\n * @see {@link mergeAll}\n * @see {@link mergeMap}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n *\n * @param {...ObservableInput} observables Input Observables to merge together.\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input\n * Observables being subscribed to concurrently.\n * @param {Scheduler} [scheduler=null] The IScheduler to use for managing\n * concurrency of input Observables.\n * @return {Observable} an Observable that emits items that are the result of\n * every input Observable.\n * @static true\n * @name merge\n * @owner Observable\n */\nfunction mergeStatic() {\n    var observables = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        observables[_i - 0] = arguments[_i];\n    }\n    var concurrent = Number.POSITIVE_INFINITY;\n    var scheduler = null;\n    var last = observables[observables.length - 1];\n    if (isScheduler_1.isScheduler(last)) {\n        scheduler = observables.pop();\n        if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {\n            concurrent = observables.pop();\n        }\n    }\n    else if (typeof last === 'number') {\n        concurrent = observables.pop();\n    }\n    if (scheduler === null && observables.length === 1 && observables[0] instanceof Observable_1.Observable) {\n        return observables[0];\n    }\n    return new ArrayObservable_1.ArrayObservable(observables, scheduler).lift(new mergeAll_1.MergeAllOperator(concurrent));\n}\nexports.mergeStatic = mergeStatic;\n//# sourceMappingURL=merge.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\n/**\n * Converts a higher-order Observable into a first-order Observable which\n * concurrently delivers all values that are emitted on the inner Observables.\n *\n * <span class=\"informal\">Flattens an Observable-of-Observables.</span>\n *\n * <img src=\"./img/mergeAll.png\" width=\"100%\">\n *\n * `mergeAll` subscribes to an Observable that emits Observables, also known as\n * a higher-order Observable. Each time it observes one of these emitted inner\n * Observables, it subscribes to that and delivers all the values from the\n * inner Observable on the output Observable. The output Observable only\n * completes once all inner Observables have completed. Any error delivered by\n * a inner Observable will be immediately emitted on the output Observable.\n *\n * @example <caption>Spawn a new interval Observable for each click event, and blend their outputs as one Observable</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000));\n * var firstOrder = higherOrder.mergeAll();\n * firstOrder.subscribe(x => console.log(x));\n *\n * @example <caption>Count from 0 to 9 every second for each click, but only allow 2 concurrent timers</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000).take(10));\n * var firstOrder = higherOrder.mergeAll(2);\n * firstOrder.subscribe(x => console.log(x));\n *\n * @see {@link combineAll}\n * @see {@link concatAll}\n * @see {@link exhaust}\n * @see {@link merge}\n * @see {@link mergeMap}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n * @see {@link switch}\n * @see {@link zipAll}\n *\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of inner\n * Observables being subscribed to concurrently.\n * @return {Observable} An Observable that emits values coming from all the\n * inner Observables emitted by the source Observable.\n * @method mergeAll\n * @owner Observable\n */\nfunction mergeAll(concurrent) {\n    if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }\n    return this.lift(new MergeAllOperator(concurrent));\n}\nexports.mergeAll = mergeAll;\nvar MergeAllOperator = (function () {\n    function MergeAllOperator(concurrent) {\n        this.concurrent = concurrent;\n    }\n    MergeAllOperator.prototype.call = function (observer, source) {\n        return source.subscribe(new MergeAllSubscriber(observer, this.concurrent));\n    };\n    return MergeAllOperator;\n}());\nexports.MergeAllOperator = MergeAllOperator;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar MergeAllSubscriber = (function (_super) {\n    __extends(MergeAllSubscriber, _super);\n    function MergeAllSubscriber(destination, concurrent) {\n        _super.call(this, destination);\n        this.concurrent = concurrent;\n        this.hasCompleted = false;\n        this.buffer = [];\n        this.active = 0;\n    }\n    MergeAllSubscriber.prototype._next = function (observable) {\n        if (this.active < this.concurrent) {\n            this.active++;\n            this.add(subscribeToResult_1.subscribeToResult(this, observable));\n        }\n        else {\n            this.buffer.push(observable);\n        }\n    };\n    MergeAllSubscriber.prototype._complete = function () {\n        this.hasCompleted = true;\n        if (this.active === 0 && this.buffer.length === 0) {\n            this.destination.complete();\n        }\n    };\n    MergeAllSubscriber.prototype.notifyComplete = function (innerSub) {\n        var buffer = this.buffer;\n        this.remove(innerSub);\n        this.active--;\n        if (buffer.length > 0) {\n            this._next(buffer.shift());\n        }\n        else if (this.active === 0 && this.hasCompleted) {\n            this.destination.complete();\n        }\n    };\n    return MergeAllSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\nexports.MergeAllSubscriber = MergeAllSubscriber;\n//# sourceMappingURL=mergeAll.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar subscribeToResult_1 = require('../util/subscribeToResult');\nvar OuterSubscriber_1 = require('../OuterSubscriber');\n/* tslint:enable:max-line-length */\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable.\n *\n * <span class=\"informal\">Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link mergeAll}.</span>\n *\n * <img src=\"./img/mergeMap.png\" width=\"100%\">\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an Observable, and then merging those resulting Observables and\n * emitting the results of this merger.\n *\n * @example <caption>Map and flatten each letter to an Observable ticking every 1 second</caption>\n * var letters = Rx.Observable.of('a', 'b', 'c');\n * var result = letters.mergeMap(x =>\n *   Rx.Observable.interval(1000).map(i => x+i)\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // a0\n * // b0\n * // c0\n * // a1\n * // b1\n * // c1\n * // continues to list a,b,c with respective ascending integers\n *\n * @see {@link concatMap}\n * @see {@link exhaustMap}\n * @see {@link merge}\n * @see {@link mergeAll}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n * @see {@link switchMap}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]\n * A function to produce the value on the output Observable based on the values\n * and the indices of the source (outer) emission and the inner Observable\n * emission. The arguments passed to this function are:\n * - `outerValue`: the value that came from the source\n * - `innerValue`: the value that came from the projected Observable\n * - `outerIndex`: the \"index\" of the value that came from the source\n * - `innerIndex`: the \"index\" of the value from the projected Observable\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input\n * Observables being subscribed to concurrently.\n * @return {Observable} An Observable that emits the result of applying the\n * projection function (and the optional `resultSelector`) to each item emitted\n * by the source Observable and merging the results of the Observables obtained\n * from this transformation.\n * @method mergeMap\n * @owner Observable\n */\nfunction mergeMap(project, resultSelector, concurrent) {\n    if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }\n    if (typeof resultSelector === 'number') {\n        concurrent = resultSelector;\n        resultSelector = null;\n    }\n    return this.lift(new MergeMapOperator(project, resultSelector, concurrent));\n}\nexports.mergeMap = mergeMap;\nvar MergeMapOperator = (function () {\n    function MergeMapOperator(project, resultSelector, concurrent) {\n        if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }\n        this.project = project;\n        this.resultSelector = resultSelector;\n        this.concurrent = concurrent;\n    }\n    MergeMapOperator.prototype.call = function (observer, source) {\n        return source.subscribe(new MergeMapSubscriber(observer, this.project, this.resultSelector, this.concurrent));\n    };\n    return MergeMapOperator;\n}());\nexports.MergeMapOperator = MergeMapOperator;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar MergeMapSubscriber = (function (_super) {\n    __extends(MergeMapSubscriber, _super);\n    function MergeMapSubscriber(destination, project, resultSelector, concurrent) {\n        if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }\n        _super.call(this, destination);\n        this.project = project;\n        this.resultSelector = resultSelector;\n        this.concurrent = concurrent;\n        this.hasCompleted = false;\n        this.buffer = [];\n        this.active = 0;\n        this.index = 0;\n    }\n    MergeMapSubscriber.prototype._next = function (value) {\n        if (this.active < this.concurrent) {\n            this._tryNext(value);\n        }\n        else {\n            this.buffer.push(value);\n        }\n    };\n    MergeMapSubscriber.prototype._tryNext = function (value) {\n        var result;\n        var index = this.index++;\n        try {\n            result = this.project(value, index);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.active++;\n        this._innerSub(result, value, index);\n    };\n    MergeMapSubscriber.prototype._innerSub = function (ish, value, index) {\n        this.add(subscribeToResult_1.subscribeToResult(this, ish, value, index));\n    };\n    MergeMapSubscriber.prototype._complete = function () {\n        this.hasCompleted = true;\n        if (this.active === 0 && this.buffer.length === 0) {\n            this.destination.complete();\n        }\n    };\n    MergeMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        if (this.resultSelector) {\n            this._notifyResultSelector(outerValue, innerValue, outerIndex, innerIndex);\n        }\n        else {\n            this.destination.next(innerValue);\n        }\n    };\n    MergeMapSubscriber.prototype._notifyResultSelector = function (outerValue, innerValue, outerIndex, innerIndex) {\n        var result;\n        try {\n            result = this.resultSelector(outerValue, innerValue, outerIndex, innerIndex);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.destination.next(result);\n    };\n    MergeMapSubscriber.prototype.notifyComplete = function (innerSub) {\n        var buffer = this.buffer;\n        this.remove(innerSub);\n        this.active--;\n        if (buffer.length > 0) {\n            this._next(buffer.shift());\n        }\n        else if (this.active === 0 && this.hasCompleted) {\n            this.destination.complete();\n        }\n    };\n    return MergeMapSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\nexports.MergeMapSubscriber = MergeMapSubscriber;\n//# sourceMappingURL=mergeMap.js.map",
     "\"use strict\";\nvar ConnectableObservable_1 = require('../observable/ConnectableObservable');\n/* tslint:enable:max-line-length */\n/**\n * Returns an Observable that emits the results of invoking a specified selector on items\n * emitted by a ConnectableObservable that shares a single subscription to the underlying stream.\n *\n * <img src=\"./img/multicast.png\" width=\"100%\">\n *\n * @param {Function|Subject} subjectOrSubjectFactory - Factory function to create an intermediate subject through\n * which the source sequence's elements will be multicast to the selector function\n * or Subject to push source elements into.\n * @param {Function} [selector] - Optional selector function that can use the multicasted source stream\n * as many times as needed, without causing multiple subscriptions to the source stream.\n * Subscribers to the given source will receive all notifications of the source from the\n * time of the subscription forward.\n * @return {Observable} An Observable that emits the results of invoking the selector\n * on the items emitted by a `ConnectableObservable` that shares a single subscription to\n * the underlying stream.\n * @method multicast\n * @owner Observable\n */\nfunction multicast(subjectOrSubjectFactory, selector) {\n    var subjectFactory;\n    if (typeof subjectOrSubjectFactory === 'function') {\n        subjectFactory = subjectOrSubjectFactory;\n    }\n    else {\n        subjectFactory = function subjectFactory() {\n            return subjectOrSubjectFactory;\n        };\n    }\n    if (typeof selector === 'function') {\n        return this.lift(new MulticastOperator(subjectFactory, selector));\n    }\n    var connectable = Object.create(this, ConnectableObservable_1.connectableObservableDescriptor);\n    connectable.source = this;\n    connectable.subjectFactory = subjectFactory;\n    return connectable;\n}\nexports.multicast = multicast;\nvar MulticastOperator = (function () {\n    function MulticastOperator(subjectFactory, selector) {\n        this.subjectFactory = subjectFactory;\n        this.selector = selector;\n    }\n    MulticastOperator.prototype.call = function (subscriber, source) {\n        var selector = this.selector;\n        var subject = this.subjectFactory();\n        var subscription = selector(subject).subscribe(subscriber);\n        subscription.add(source.subscribe(subject));\n        return subscription;\n    };\n    return MulticastOperator;\n}());\nexports.MulticastOperator = MulticastOperator;\n//# sourceMappingURL=multicast.js.map",
     "\"use strict\";\nvar Observable_1 = require('../Observable');\nvar ArrayObservable_1 = require('../observable/ArrayObservable');\nvar mergeAll_1 = require('./mergeAll');\nvar isScheduler_1 = require('../util/isScheduler');\n/* tslint:enable:max-line-length */\n/**\n * Creates an output Observable which concurrently emits all values from every\n * given input Observable.\n *\n * <span class=\"informal\">Flattens multiple Observables together by blending\n * their values into one Observable.</span>\n *\n * <img src=\"./img/merge.png\" width=\"100%\">\n *\n * `merge` subscribes to each given input Observable (either the source or an\n * Observable given as argument), and simply forwards (without doing any\n * transformation) all the values from all the input Observables to the output\n * Observable. The output Observable only completes once all input Observables\n * have completed. Any error delivered by an input Observable will be immediately\n * emitted on the output Observable.\n *\n * @example <caption>Merge together two Observables: 1s interval and clicks</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var timer = Rx.Observable.interval(1000);\n * var clicksOrTimer = clicks.merge(timer);\n * clicksOrTimer.subscribe(x => console.log(x));\n *\n * @example <caption>Merge together 3 Observables, but only 2 run concurrently</caption>\n * var timer1 = Rx.Observable.interval(1000).take(10);\n * var timer2 = Rx.Observable.interval(2000).take(6);\n * var timer3 = Rx.Observable.interval(500).take(10);\n * var concurrent = 2; // the argument\n * var merged = timer1.merge(timer2, timer3, concurrent);\n * merged.subscribe(x => console.log(x));\n *\n * @see {@link mergeAll}\n * @see {@link mergeMap}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n *\n * @param {ObservableInput} other An input Observable to merge with the source\n * Observable. More than one input Observables may be given as argument.\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input\n * Observables being subscribed to concurrently.\n * @param {Scheduler} [scheduler=null] The IScheduler to use for managing\n * concurrency of input Observables.\n * @return {Observable} An Observable that emits items that are the result of\n * every input Observable.\n * @method merge\n * @owner Observable\n */\nfunction merge() {\n    var observables = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        observables[_i - 0] = arguments[_i];\n    }\n    return this.lift.call(mergeStatic.apply(void 0, [this].concat(observables)));\n}\nexports.merge = merge;\n/* tslint:enable:max-line-length */\n/**\n * Creates an output Observable which concurrently emits all values from every\n * given input Observable.\n *\n * <span class=\"informal\">Flattens multiple Observables together by blending\n * their values into one Observable.</span>\n *\n * <img src=\"./img/merge.png\" width=\"100%\">\n *\n * `merge` subscribes to each given input Observable (as arguments), and simply\n * forwards (without doing any transformation) all the values from all the input\n * Observables to the output Observable. The output Observable only completes\n * once all input Observables have completed. Any error delivered by an input\n * Observable will be immediately emitted on the output Observable.\n *\n * @example <caption>Merge together two Observables: 1s interval and clicks</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var timer = Rx.Observable.interval(1000);\n * var clicksOrTimer = Rx.Observable.merge(clicks, timer);\n * clicksOrTimer.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // timer will emit ascending values, one every second(1000ms) to console\n * // clicks logs MouseEvents to console everytime the \"document\" is clicked\n * // Since the two streams are merged you see these happening\n * // as they occur.\n *\n * @example <caption>Merge together 3 Observables, but only 2 run concurrently</caption>\n * var timer1 = Rx.Observable.interval(1000).take(10);\n * var timer2 = Rx.Observable.interval(2000).take(6);\n * var timer3 = Rx.Observable.interval(500).take(10);\n * var concurrent = 2; // the argument\n * var merged = Rx.Observable.merge(timer1, timer2, timer3, concurrent);\n * merged.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // - First timer1 and timer2 will run concurrently\n * // - timer1 will emit a value every 1000ms for 10 iterations\n * // - timer2 will emit a value every 2000ms for 6 iterations\n * // - after timer1 hits it's max iteration, timer2 will\n * //   continue, and timer3 will start to run concurrently with timer2\n * // - when timer2 hits it's max iteration it terminates, and\n * //   timer3 will continue to emit a value every 500ms until it is complete\n *\n * @see {@link mergeAll}\n * @see {@link mergeMap}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n *\n * @param {...ObservableInput} observables Input Observables to merge together.\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input\n * Observables being subscribed to concurrently.\n * @param {Scheduler} [scheduler=null] The IScheduler to use for managing\n * concurrency of input Observables.\n * @return {Observable} an Observable that emits items that are the result of\n * every input Observable.\n * @static true\n * @name merge\n * @owner Observable\n */\nfunction mergeStatic() {\n    var observables = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        observables[_i - 0] = arguments[_i];\n    }\n    var concurrent = Number.POSITIVE_INFINITY;\n    var scheduler = null;\n    var last = observables[observables.length - 1];\n    if (isScheduler_1.isScheduler(last)) {\n        scheduler = observables.pop();\n        if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {\n            concurrent = observables.pop();\n        }\n    }\n    else if (typeof last === 'number') {\n        concurrent = observables.pop();\n    }\n    if (scheduler === null && observables.length === 1 && observables[0] instanceof Observable_1.Observable) {\n        return observables[0];\n    }\n    return new ArrayObservable_1.ArrayObservable(observables, scheduler).lift(new mergeAll_1.MergeAllOperator(concurrent));\n}\nexports.mergeStatic = mergeStatic;\n//# sourceMappingURL=merge.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\n/**\n * Converts a higher-order Observable into a first-order Observable which\n * concurrently delivers all values that are emitted on the inner Observables.\n *\n * <span class=\"informal\">Flattens an Observable-of-Observables.</span>\n *\n * <img src=\"./img/mergeAll.png\" width=\"100%\">\n *\n * `mergeAll` subscribes to an Observable that emits Observables, also known as\n * a higher-order Observable. Each time it observes one of these emitted inner\n * Observables, it subscribes to that and delivers all the values from the\n * inner Observable on the output Observable. The output Observable only\n * completes once all inner Observables have completed. Any error delivered by\n * a inner Observable will be immediately emitted on the output Observable.\n *\n * @example <caption>Spawn a new interval Observable for each click event, and blend their outputs as one Observable</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000));\n * var firstOrder = higherOrder.mergeAll();\n * firstOrder.subscribe(x => console.log(x));\n *\n * @example <caption>Count from 0 to 9 every second for each click, but only allow 2 concurrent timers</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var higherOrder = clicks.map((ev) => Rx.Observable.interval(1000).take(10));\n * var firstOrder = higherOrder.mergeAll(2);\n * firstOrder.subscribe(x => console.log(x));\n *\n * @see {@link combineAll}\n * @see {@link concatAll}\n * @see {@link exhaust}\n * @see {@link merge}\n * @see {@link mergeMap}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n * @see {@link switch}\n * @see {@link zipAll}\n *\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of inner\n * Observables being subscribed to concurrently.\n * @return {Observable} An Observable that emits values coming from all the\n * inner Observables emitted by the source Observable.\n * @method mergeAll\n * @owner Observable\n */\nfunction mergeAll(concurrent) {\n    if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }\n    return this.lift(new MergeAllOperator(concurrent));\n}\nexports.mergeAll = mergeAll;\nvar MergeAllOperator = (function () {\n    function MergeAllOperator(concurrent) {\n        this.concurrent = concurrent;\n    }\n    MergeAllOperator.prototype.call = function (observer, source) {\n        return source.subscribe(new MergeAllSubscriber(observer, this.concurrent));\n    };\n    return MergeAllOperator;\n}());\nexports.MergeAllOperator = MergeAllOperator;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar MergeAllSubscriber = (function (_super) {\n    __extends(MergeAllSubscriber, _super);\n    function MergeAllSubscriber(destination, concurrent) {\n        _super.call(this, destination);\n        this.concurrent = concurrent;\n        this.hasCompleted = false;\n        this.buffer = [];\n        this.active = 0;\n    }\n    MergeAllSubscriber.prototype._next = function (observable) {\n        if (this.active < this.concurrent) {\n            this.active++;\n            this.add(subscribeToResult_1.subscribeToResult(this, observable));\n        }\n        else {\n            this.buffer.push(observable);\n        }\n    };\n    MergeAllSubscriber.prototype._complete = function () {\n        this.hasCompleted = true;\n        if (this.active === 0 && this.buffer.length === 0) {\n            this.destination.complete();\n        }\n    };\n    MergeAllSubscriber.prototype.notifyComplete = function (innerSub) {\n        var buffer = this.buffer;\n        this.remove(innerSub);\n        this.active--;\n        if (buffer.length > 0) {\n            this._next(buffer.shift());\n        }\n        else if (this.active === 0 && this.hasCompleted) {\n            this.destination.complete();\n        }\n    };\n    return MergeAllSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\nexports.MergeAllSubscriber = MergeAllSubscriber;\n//# sourceMappingURL=mergeAll.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar subscribeToResult_1 = require('../util/subscribeToResult');\nvar OuterSubscriber_1 = require('../OuterSubscriber');\n/* tslint:enable:max-line-length */\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable.\n *\n * <span class=\"informal\">Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link mergeAll}.</span>\n *\n * <img src=\"./img/mergeMap.png\" width=\"100%\">\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an Observable, and then merging those resulting Observables and\n * emitting the results of this merger.\n *\n * @example <caption>Map and flatten each letter to an Observable ticking every 1 second</caption>\n * var letters = Rx.Observable.of('a', 'b', 'c');\n * var result = letters.mergeMap(x =>\n *   Rx.Observable.interval(1000).map(i => x+i)\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // a0\n * // b0\n * // c0\n * // a1\n * // b1\n * // c1\n * // continues to list a,b,c with respective ascending integers\n *\n * @see {@link concatMap}\n * @see {@link exhaustMap}\n * @see {@link merge}\n * @see {@link mergeAll}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n * @see {@link switchMap}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]\n * A function to produce the value on the output Observable based on the values\n * and the indices of the source (outer) emission and the inner Observable\n * emission. The arguments passed to this function are:\n * - `outerValue`: the value that came from the source\n * - `innerValue`: the value that came from the projected Observable\n * - `outerIndex`: the \"index\" of the value that came from the source\n * - `innerIndex`: the \"index\" of the value from the projected Observable\n * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input\n * Observables being subscribed to concurrently.\n * @return {Observable} An Observable that emits the result of applying the\n * projection function (and the optional `resultSelector`) to each item emitted\n * by the source Observable and merging the results of the Observables obtained\n * from this transformation.\n * @method mergeMap\n * @owner Observable\n */\nfunction mergeMap(project, resultSelector, concurrent) {\n    if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }\n    if (typeof resultSelector === 'number') {\n        concurrent = resultSelector;\n        resultSelector = null;\n    }\n    return this.lift(new MergeMapOperator(project, resultSelector, concurrent));\n}\nexports.mergeMap = mergeMap;\nvar MergeMapOperator = (function () {\n    function MergeMapOperator(project, resultSelector, concurrent) {\n        if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }\n        this.project = project;\n        this.resultSelector = resultSelector;\n        this.concurrent = concurrent;\n    }\n    MergeMapOperator.prototype.call = function (observer, source) {\n        return source.subscribe(new MergeMapSubscriber(observer, this.project, this.resultSelector, this.concurrent));\n    };\n    return MergeMapOperator;\n}());\nexports.MergeMapOperator = MergeMapOperator;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar MergeMapSubscriber = (function (_super) {\n    __extends(MergeMapSubscriber, _super);\n    function MergeMapSubscriber(destination, project, resultSelector, concurrent) {\n        if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }\n        _super.call(this, destination);\n        this.project = project;\n        this.resultSelector = resultSelector;\n        this.concurrent = concurrent;\n        this.hasCompleted = false;\n        this.buffer = [];\n        this.active = 0;\n        this.index = 0;\n    }\n    MergeMapSubscriber.prototype._next = function (value) {\n        if (this.active < this.concurrent) {\n            this._tryNext(value);\n        }\n        else {\n            this.buffer.push(value);\n        }\n    };\n    MergeMapSubscriber.prototype._tryNext = function (value) {\n        var result;\n        var index = this.index++;\n        try {\n            result = this.project(value, index);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.active++;\n        this._innerSub(result, value, index);\n    };\n    MergeMapSubscriber.prototype._innerSub = function (ish, value, index) {\n        this.add(subscribeToResult_1.subscribeToResult(this, ish, value, index));\n    };\n    MergeMapSubscriber.prototype._complete = function () {\n        this.hasCompleted = true;\n        if (this.active === 0 && this.buffer.length === 0) {\n            this.destination.complete();\n        }\n    };\n    MergeMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        if (this.resultSelector) {\n            this._notifyResultSelector(outerValue, innerValue, outerIndex, innerIndex);\n        }\n        else {\n            this.destination.next(innerValue);\n        }\n    };\n    MergeMapSubscriber.prototype._notifyResultSelector = function (outerValue, innerValue, outerIndex, innerIndex) {\n        var result;\n        try {\n            result = this.resultSelector(outerValue, innerValue, outerIndex, innerIndex);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.destination.next(result);\n    };\n    MergeMapSubscriber.prototype.notifyComplete = function (innerSub) {\n        var buffer = this.buffer;\n        this.remove(innerSub);\n        this.active--;\n        if (buffer.length > 0) {\n            this._next(buffer.shift());\n        }\n        else if (this.active === 0 && this.hasCompleted) {\n            this.destination.complete();\n        }\n    };\n    return MergeMapSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\nexports.MergeMapSubscriber = MergeMapSubscriber;\n//# sourceMappingURL=mergeMap.js.map",
     "\"use strict\";\nvar ConnectableObservable_1 = require('../observable/ConnectableObservable');\n/* tslint:enable:max-line-length */\n/**\n * Returns an Observable that emits the results of invoking a specified selector on items\n * emitted by a ConnectableObservable that shares a single subscription to the underlying stream.\n *\n * <img src=\"./img/multicast.png\" width=\"100%\">\n *\n * @param {Function|Subject} subjectOrSubjectFactory - Factory function to create an intermediate subject through\n * which the source sequence's elements will be multicast to the selector function\n * or Subject to push source elements into.\n * @param {Function} [selector] - Optional selector function that can use the multicasted source stream\n * as many times as needed, without causing multiple subscriptions to the source stream.\n * Subscribers to the given source will receive all notifications of the source from the\n * time of the subscription forward.\n * @return {Observable} An Observable that emits the results of invoking the selector\n * on the items emitted by a `ConnectableObservable` that shares a single subscription to\n * the underlying stream.\n * @method multicast\n * @owner Observable\n */\nfunction multicast(subjectOrSubjectFactory, selector) {\n    var subjectFactory;\n    if (typeof subjectOrSubjectFactory === 'function') {\n        subjectFactory = subjectOrSubjectFactory;\n    }\n    else {\n        subjectFactory = function subjectFactory() {\n            return subjectOrSubjectFactory;\n        };\n    }\n    if (typeof selector === 'function') {\n        return this.lift(new MulticastOperator(subjectFactory, selector));\n    }\n    var connectable = Object.create(this, ConnectableObservable_1.connectableObservableDescriptor);\n    connectable.source = this;\n    connectable.subjectFactory = subjectFactory;\n    return connectable;\n}\nexports.multicast = multicast;\nvar MulticastOperator = (function () {\n    function MulticastOperator(subjectFactory, selector) {\n        this.subjectFactory = subjectFactory;\n        this.selector = selector;\n    }\n    MulticastOperator.prototype.call = function (subscriber, source) {\n        var selector = this.selector;\n        var subject = this.subjectFactory();\n        var subscription = selector(subject).subscribe(subscriber);\n        subscription.add(source.subscribe(subject));\n        return subscription;\n    };\n    return MulticastOperator;\n}());\nexports.MulticastOperator = MulticastOperator;\n//# sourceMappingURL=multicast.js.map",
-    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\nvar Notification_1 = require('../Notification');\n/**\n * @see {@link Notification}\n *\n * @param scheduler\n * @param delay\n * @return {Observable<R>|WebSocketSubject<T>|Observable<T>}\n * @method observeOn\n * @owner Observable\n */\nfunction observeOn(scheduler, delay) {\n    if (delay === void 0) { delay = 0; }\n    return this.lift(new ObserveOnOperator(scheduler, delay));\n}\nexports.observeOn = observeOn;\nvar ObserveOnOperator = (function () {\n    function ObserveOnOperator(scheduler, delay) {\n        if (delay === void 0) { delay = 0; }\n        this.scheduler = scheduler;\n        this.delay = delay;\n    }\n    ObserveOnOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));\n    };\n    return ObserveOnOperator;\n}());\nexports.ObserveOnOperator = ObserveOnOperator;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar ObserveOnSubscriber = (function (_super) {\n    __extends(ObserveOnSubscriber, _super);\n    function ObserveOnSubscriber(destination, scheduler, delay) {\n        if (delay === void 0) { delay = 0; }\n        _super.call(this, destination);\n        this.scheduler = scheduler;\n        this.delay = delay;\n    }\n    ObserveOnSubscriber.dispatch = function (arg) {\n        var notification = arg.notification, destination = arg.destination;\n        notification.observe(destination);\n        this.unsubscribe();\n    };\n    ObserveOnSubscriber.prototype.scheduleMessage = function (notification) {\n        this.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));\n    };\n    ObserveOnSubscriber.prototype._next = function (value) {\n        this.scheduleMessage(Notification_1.Notification.createNext(value));\n    };\n    ObserveOnSubscriber.prototype._error = function (err) {\n        this.scheduleMessage(Notification_1.Notification.createError(err));\n    };\n    ObserveOnSubscriber.prototype._complete = function () {\n        this.scheduleMessage(Notification_1.Notification.createComplete());\n    };\n    return ObserveOnSubscriber;\n}(Subscriber_1.Subscriber));\nexports.ObserveOnSubscriber = ObserveOnSubscriber;\nvar ObserveOnMessage = (function () {\n    function ObserveOnMessage(notification, destination) {\n        this.notification = notification;\n        this.destination = destination;\n    }\n    return ObserveOnMessage;\n}());\nexports.ObserveOnMessage = ObserveOnMessage;\n//# sourceMappingURL=observeOn.js.map",
+    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\nvar Notification_1 = require('../Notification');\n/**\n *\n * Re-emits all notifications from source Observable with specified scheduler.\n *\n * <span class=\"informal\">Ensure a specific scheduler is used, from outside of an Observable.</span>\n *\n * `observeOn` is an operator that accepts a scheduler as a first parameter, which will be used to reschedule\n * notifications emitted by the source Observable. It might be useful, if you do not have control over\n * internal scheduler of a given Observable, but want to control when its values are emitted nevertheless.\n *\n * Returned Observable emits the same notifications (nexted values, complete and error events) as the source Observable,\n * but rescheduled with provided scheduler. Note that this doesn't mean that source Observables internal\n * scheduler will be replaced in any way. Original scheduler still will be used, but when the source Observable emits\n * notification, it will be immediately scheduled again - this time with scheduler passed to `observeOn`.\n * An anti-pattern would be calling `observeOn` on Observable that emits lots of values synchronously, to split\n * that emissions into asynchronous chunks. For this to happen, scheduler would have to be passed into the source\n * Observable directly (usually into the operator that creates it). `observeOn` simply delays notifications a\n * little bit more, to ensure that they are emitted at expected moments.\n *\n * As a matter of fact, `observeOn` accepts second parameter, which specifies in milliseconds with what delay notifications\n * will be emitted. The main difference between {@link delay} operator and `observeOn` is that `observeOn`\n * will delay all notifications - including error notifications - while `delay` will pass through error\n * from source Observable immediately when it is emitted. In general it is highly recommended to use `delay` operator\n * for any kind of delaying of values in the stream, while using `observeOn` to specify which scheduler should be used\n * for notification emissions in general.\n *\n * @example <caption>Ensure values in subscribe are called just before browser repaint.</caption>\n * const intervals = Rx.Observable.interval(10); // Intervals are scheduled\n *                                               // with async scheduler by default...\n *\n * intervals\n * .observeOn(Rx.Scheduler.animationFrame)       // ...but we will observe on animationFrame\n * .subscribe(val => {                           // scheduler to ensure smooth animation.\n *   someDiv.style.height = val + 'px';\n * });\n *\n * @see {@link delay}\n *\n * @param {IScheduler} scheduler Scheduler that will be used to reschedule notifications from source Observable.\n * @param {number} [delay] Number of milliseconds that states with what delay every notification should be rescheduled.\n * @return {Observable<T>} Observable that emits the same notifications as the source Observable,\n * but with provided scheduler.\n *\n * @method observeOn\n * @owner Observable\n */\nfunction observeOn(scheduler, delay) {\n    if (delay === void 0) { delay = 0; }\n    return this.lift(new ObserveOnOperator(scheduler, delay));\n}\nexports.observeOn = observeOn;\nvar ObserveOnOperator = (function () {\n    function ObserveOnOperator(scheduler, delay) {\n        if (delay === void 0) { delay = 0; }\n        this.scheduler = scheduler;\n        this.delay = delay;\n    }\n    ObserveOnOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));\n    };\n    return ObserveOnOperator;\n}());\nexports.ObserveOnOperator = ObserveOnOperator;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar ObserveOnSubscriber = (function (_super) {\n    __extends(ObserveOnSubscriber, _super);\n    function ObserveOnSubscriber(destination, scheduler, delay) {\n        if (delay === void 0) { delay = 0; }\n        _super.call(this, destination);\n        this.scheduler = scheduler;\n        this.delay = delay;\n    }\n    ObserveOnSubscriber.dispatch = function (arg) {\n        var notification = arg.notification, destination = arg.destination;\n        notification.observe(destination);\n        this.unsubscribe();\n    };\n    ObserveOnSubscriber.prototype.scheduleMessage = function (notification) {\n        this.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));\n    };\n    ObserveOnSubscriber.prototype._next = function (value) {\n        this.scheduleMessage(Notification_1.Notification.createNext(value));\n    };\n    ObserveOnSubscriber.prototype._error = function (err) {\n        this.scheduleMessage(Notification_1.Notification.createError(err));\n    };\n    ObserveOnSubscriber.prototype._complete = function () {\n        this.scheduleMessage(Notification_1.Notification.createComplete());\n    };\n    return ObserveOnSubscriber;\n}(Subscriber_1.Subscriber));\nexports.ObserveOnSubscriber = ObserveOnSubscriber;\nvar ObserveOnMessage = (function () {\n    function ObserveOnMessage(notification, destination) {\n        this.notification = notification;\n        this.destination = destination;\n    }\n    return ObserveOnMessage;\n}());\nexports.ObserveOnMessage = ObserveOnMessage;\n//# sourceMappingURL=observeOn.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\n/**\n * Groups pairs of consecutive emissions together and emits them as an array of\n * two values.\n *\n * <span class=\"informal\">Puts the current value and previous value together as\n * an array, and emits that.</span>\n *\n * <img src=\"./img/pairwise.png\" width=\"100%\">\n *\n * The Nth emission from the source Observable will cause the output Observable\n * to emit an array [(N-1)th, Nth] of the previous and the current value, as a\n * pair. For this reason, `pairwise` emits on the second and subsequent\n * emissions from the source Observable, but not on the first emission, because\n * there is no previous value in that case.\n *\n * @example <caption>On every click (starting from the second), emit the relative distance to the previous click</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var pairs = clicks.pairwise();\n * var distance = pairs.map(pair => {\n *   var x0 = pair[0].clientX;\n *   var y0 = pair[0].clientY;\n *   var x1 = pair[1].clientX;\n *   var y1 = pair[1].clientY;\n *   return Math.sqrt(Math.pow(x0 - x1, 2) + Math.pow(y0 - y1, 2));\n * });\n * distance.subscribe(x => console.log(x));\n *\n * @see {@link buffer}\n * @see {@link bufferCount}\n *\n * @return {Observable<Array<T>>} An Observable of pairs (as arrays) of\n * consecutive values from the source Observable.\n * @method pairwise\n * @owner Observable\n */\nfunction pairwise() {\n    return this.lift(new PairwiseOperator());\n}\nexports.pairwise = pairwise;\nvar PairwiseOperator = (function () {\n    function PairwiseOperator() {\n    }\n    PairwiseOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new PairwiseSubscriber(subscriber));\n    };\n    return PairwiseOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar PairwiseSubscriber = (function (_super) {\n    __extends(PairwiseSubscriber, _super);\n    function PairwiseSubscriber(destination) {\n        _super.call(this, destination);\n        this.hasPrev = false;\n    }\n    PairwiseSubscriber.prototype._next = function (value) {\n        if (this.hasPrev) {\n            this.destination.next([this.prev, value]);\n        }\n        else {\n            this.hasPrev = true;\n        }\n        this.prev = value;\n    };\n    return PairwiseSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=pairwise.js.map",
     "\"use strict\";\nvar map_1 = require('./map');\n/**\n * Maps each source value (an object) to its specified nested property.\n *\n * <span class=\"informal\">Like {@link map}, but meant only for picking one of\n * the nested properties of every emitted object.</span>\n *\n * <img src=\"./img/pluck.png\" width=\"100%\">\n *\n * Given a list of strings describing a path to an object property, retrieves\n * the value of a specified nested property from all values in the source\n * Observable. If a property can't be resolved, it will return `undefined` for\n * that value.\n *\n * @example <caption>Map every every click to the tagName of the clicked target element</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var tagNames = clicks.pluck('target', 'tagName');\n * tagNames.subscribe(x => console.log(x));\n *\n * @see {@link map}\n *\n * @param {...string} properties The nested properties to pluck from each source\n * value (an object).\n * @return {Observable} A new Observable of property values from the source values.\n * @method pluck\n * @owner Observable\n */\nfunction pluck() {\n    var properties = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        properties[_i - 0] = arguments[_i];\n    }\n    var length = properties.length;\n    if (length === 0) {\n        throw new Error('list of properties cannot be empty.');\n    }\n    return map_1.map.call(this, plucker(properties, length));\n}\nexports.pluck = pluck;\nfunction plucker(props, length) {\n    var mapper = function (x) {\n        var currentProp = x;\n        for (var i = 0; i < length; i++) {\n            var p = currentProp[props[i]];\n            if (typeof p !== 'undefined') {\n                currentProp = p;\n            }\n            else {\n                return undefined;\n            }\n        }\n        return currentProp;\n    };\n    return mapper;\n}\n//# sourceMappingURL=pluck.js.map",
     "\"use strict\";\nvar Subject_1 = require('../Subject');\nvar multicast_1 = require('./multicast');\n/* tslint:enable:max-line-length */\n/**\n * Returns a ConnectableObservable, which is a variety of Observable that waits until its connect method is called\n * before it begins emitting items to those Observers that have subscribed to it.\n *\n * <img src=\"./img/publish.png\" width=\"100%\">\n *\n * @param {Function} [selector] - Optional selector function which can use the multicasted source sequence as many times\n * as needed, without causing multiple subscriptions to the source sequence.\n * Subscribers to the given source will receive all notifications of the source from the time of the subscription on.\n * @return A ConnectableObservable that upon connection causes the source Observable to emit items to its Observers.\n * @method publish\n * @owner Observable\n */\nfunction publish(selector) {\n    return selector ? multicast_1.multicast.call(this, function () { return new Subject_1.Subject(); }, selector) :\n        multicast_1.multicast.call(this, new Subject_1.Subject());\n}\nexports.publish = publish;\n//# sourceMappingURL=publish.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\n/**\n * Groups pairs of consecutive emissions together and emits them as an array of\n * two values.\n *\n * <span class=\"informal\">Puts the current value and previous value together as\n * an array, and emits that.</span>\n *\n * <img src=\"./img/pairwise.png\" width=\"100%\">\n *\n * The Nth emission from the source Observable will cause the output Observable\n * to emit an array [(N-1)th, Nth] of the previous and the current value, as a\n * pair. For this reason, `pairwise` emits on the second and subsequent\n * emissions from the source Observable, but not on the first emission, because\n * there is no previous value in that case.\n *\n * @example <caption>On every click (starting from the second), emit the relative distance to the previous click</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var pairs = clicks.pairwise();\n * var distance = pairs.map(pair => {\n *   var x0 = pair[0].clientX;\n *   var y0 = pair[0].clientY;\n *   var x1 = pair[1].clientX;\n *   var y1 = pair[1].clientY;\n *   return Math.sqrt(Math.pow(x0 - x1, 2) + Math.pow(y0 - y1, 2));\n * });\n * distance.subscribe(x => console.log(x));\n *\n * @see {@link buffer}\n * @see {@link bufferCount}\n *\n * @return {Observable<Array<T>>} An Observable of pairs (as arrays) of\n * consecutive values from the source Observable.\n * @method pairwise\n * @owner Observable\n */\nfunction pairwise() {\n    return this.lift(new PairwiseOperator());\n}\nexports.pairwise = pairwise;\nvar PairwiseOperator = (function () {\n    function PairwiseOperator() {\n    }\n    PairwiseOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new PairwiseSubscriber(subscriber));\n    };\n    return PairwiseOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar PairwiseSubscriber = (function (_super) {\n    __extends(PairwiseSubscriber, _super);\n    function PairwiseSubscriber(destination) {\n        _super.call(this, destination);\n        this.hasPrev = false;\n    }\n    PairwiseSubscriber.prototype._next = function (value) {\n        if (this.hasPrev) {\n            this.destination.next([this.prev, value]);\n        }\n        else {\n            this.hasPrev = true;\n        }\n        this.prev = value;\n    };\n    return PairwiseSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=pairwise.js.map",
     "\"use strict\";\nvar map_1 = require('./map');\n/**\n * Maps each source value (an object) to its specified nested property.\n *\n * <span class=\"informal\">Like {@link map}, but meant only for picking one of\n * the nested properties of every emitted object.</span>\n *\n * <img src=\"./img/pluck.png\" width=\"100%\">\n *\n * Given a list of strings describing a path to an object property, retrieves\n * the value of a specified nested property from all values in the source\n * Observable. If a property can't be resolved, it will return `undefined` for\n * that value.\n *\n * @example <caption>Map every every click to the tagName of the clicked target element</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var tagNames = clicks.pluck('target', 'tagName');\n * tagNames.subscribe(x => console.log(x));\n *\n * @see {@link map}\n *\n * @param {...string} properties The nested properties to pluck from each source\n * value (an object).\n * @return {Observable} A new Observable of property values from the source values.\n * @method pluck\n * @owner Observable\n */\nfunction pluck() {\n    var properties = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        properties[_i - 0] = arguments[_i];\n    }\n    var length = properties.length;\n    if (length === 0) {\n        throw new Error('list of properties cannot be empty.');\n    }\n    return map_1.map.call(this, plucker(properties, length));\n}\nexports.pluck = pluck;\nfunction plucker(props, length) {\n    var mapper = function (x) {\n        var currentProp = x;\n        for (var i = 0; i < length; i++) {\n            var p = currentProp[props[i]];\n            if (typeof p !== 'undefined') {\n                currentProp = p;\n            }\n            else {\n                return undefined;\n            }\n        }\n        return currentProp;\n    };\n    return mapper;\n}\n//# sourceMappingURL=pluck.js.map",
     "\"use strict\";\nvar Subject_1 = require('../Subject');\nvar multicast_1 = require('./multicast');\n/* tslint:enable:max-line-length */\n/**\n * Returns a ConnectableObservable, which is a variety of Observable that waits until its connect method is called\n * before it begins emitting items to those Observers that have subscribed to it.\n *\n * <img src=\"./img/publish.png\" width=\"100%\">\n *\n * @param {Function} [selector] - Optional selector function which can use the multicasted source sequence as many times\n * as needed, without causing multiple subscriptions to the source sequence.\n * Subscribers to the given source will receive all notifications of the source from the time of the subscription on.\n * @return A ConnectableObservable that upon connection causes the source Observable to emit items to its Observers.\n * @method publish\n * @owner Observable\n */\nfunction publish(selector) {\n    return selector ? multicast_1.multicast.call(this, function () { return new Subject_1.Subject(); }, selector) :\n        multicast_1.multicast.call(this, new Subject_1.Subject());\n}\nexports.publish = publish;\n//# sourceMappingURL=publish.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\n/* tslint:enable:max-line-length */\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable, emitting values only from the most recently projected Observable.\n *\n * <span class=\"informal\">Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link switch}.</span>\n *\n * <img src=\"./img/switchMap.png\" width=\"100%\">\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an (so-called \"inner\") Observable. Each time it observes one of these\n * inner Observables, the output Observable begins emitting the items emitted by\n * that inner Observable. When a new inner Observable is emitted, `switchMap`\n * stops emitting items from the earlier-emitted inner Observable and begins\n * emitting items from the new one. It continues to behave like this for\n * subsequent inner Observables.\n *\n * @example <caption>Rerun an interval Observable on every click event</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = clicks.switchMap((ev) => Rx.Observable.interval(1000));\n * result.subscribe(x => console.log(x));\n *\n * @see {@link concatMap}\n * @see {@link exhaustMap}\n * @see {@link mergeMap}\n * @see {@link switch}\n * @see {@link switchMapTo}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]\n * A function to produce the value on the output Observable based on the values\n * and the indices of the source (outer) emission and the inner Observable\n * emission. The arguments passed to this function are:\n * - `outerValue`: the value that came from the source\n * - `innerValue`: the value that came from the projected Observable\n * - `outerIndex`: the \"index\" of the value that came from the source\n * - `innerIndex`: the \"index\" of the value from the projected Observable\n * @return {Observable} An Observable that emits the result of applying the\n * projection function (and the optional `resultSelector`) to each item emitted\n * by the source Observable and taking only the values from the most recently\n * projected inner Observable.\n * @method switchMap\n * @owner Observable\n */\nfunction switchMap(project, resultSelector) {\n    return this.lift(new SwitchMapOperator(project, resultSelector));\n}\nexports.switchMap = switchMap;\nvar SwitchMapOperator = (function () {\n    function SwitchMapOperator(project, resultSelector) {\n        this.project = project;\n        this.resultSelector = resultSelector;\n    }\n    SwitchMapOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new SwitchMapSubscriber(subscriber, this.project, this.resultSelector));\n    };\n    return SwitchMapOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar SwitchMapSubscriber = (function (_super) {\n    __extends(SwitchMapSubscriber, _super);\n    function SwitchMapSubscriber(destination, project, resultSelector) {\n        _super.call(this, destination);\n        this.project = project;\n        this.resultSelector = resultSelector;\n        this.index = 0;\n    }\n    SwitchMapSubscriber.prototype._next = function (value) {\n        var result;\n        var index = this.index++;\n        try {\n            result = this.project(value, index);\n        }\n        catch (error) {\n            this.destination.error(error);\n            return;\n        }\n        this._innerSub(result, value, index);\n    };\n    SwitchMapSubscriber.prototype._innerSub = function (result, value, index) {\n        var innerSubscription = this.innerSubscription;\n        if (innerSubscription) {\n            innerSubscription.unsubscribe();\n        }\n        this.add(this.innerSubscription = subscribeToResult_1.subscribeToResult(this, result, value, index));\n    };\n    SwitchMapSubscriber.prototype._complete = function () {\n        var innerSubscription = this.innerSubscription;\n        if (!innerSubscription || innerSubscription.closed) {\n            _super.prototype._complete.call(this);\n        }\n    };\n    SwitchMapSubscriber.prototype._unsubscribe = function () {\n        this.innerSubscription = null;\n    };\n    SwitchMapSubscriber.prototype.notifyComplete = function (innerSub) {\n        this.remove(innerSub);\n        this.innerSubscription = null;\n        if (this.isStopped) {\n            _super.prototype._complete.call(this);\n        }\n    };\n    SwitchMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        if (this.resultSelector) {\n            this._tryNotifyNext(outerValue, innerValue, outerIndex, innerIndex);\n        }\n        else {\n            this.destination.next(innerValue);\n        }\n    };\n    SwitchMapSubscriber.prototype._tryNotifyNext = function (outerValue, innerValue, outerIndex, innerIndex) {\n        var result;\n        try {\n            result = this.resultSelector(outerValue, innerValue, outerIndex, innerIndex);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.destination.next(result);\n    };\n    return SwitchMapSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=switchMap.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\nvar ArgumentOutOfRangeError_1 = require('../util/ArgumentOutOfRangeError');\nvar EmptyObservable_1 = require('../observable/EmptyObservable');\n/**\n * Emits only the first `count` values emitted by the source Observable.\n *\n * <span class=\"informal\">Takes the first `count` values from the source, then\n * completes.</span>\n *\n * <img src=\"./img/take.png\" width=\"100%\">\n *\n * `take` returns an Observable that emits only the first `count` values emitted\n * by the source Observable. If the source emits fewer than `count` values then\n * all of its values are emitted. After that, it completes, regardless if the\n * source completes.\n *\n * @example <caption>Take the first 5 seconds of an infinite 1-second interval Observable</caption>\n * var interval = Rx.Observable.interval(1000);\n * var five = interval.take(5);\n * five.subscribe(x => console.log(x));\n *\n * @see {@link takeLast}\n * @see {@link takeUntil}\n * @see {@link takeWhile}\n * @see {@link skip}\n *\n * @throws {ArgumentOutOfRangeError} When using `take(i)`, it delivers an\n * ArgumentOutOrRangeError to the Observer's `error` callback if `i < 0`.\n *\n * @param {number} count The maximum number of `next` values to emit.\n * @return {Observable<T>} An Observable that emits only the first `count`\n * values emitted by the source Observable, or all of the values from the source\n * if the source emits fewer than `count` values.\n * @method take\n * @owner Observable\n */\nfunction take(count) {\n    if (count === 0) {\n        return new EmptyObservable_1.EmptyObservable();\n    }\n    else {\n        return this.lift(new TakeOperator(count));\n    }\n}\nexports.take = take;\nvar TakeOperator = (function () {\n    function TakeOperator(total) {\n        this.total = total;\n        if (this.total < 0) {\n            throw new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError;\n        }\n    }\n    TakeOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new TakeSubscriber(subscriber, this.total));\n    };\n    return TakeOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar TakeSubscriber = (function (_super) {\n    __extends(TakeSubscriber, _super);\n    function TakeSubscriber(destination, total) {\n        _super.call(this, destination);\n        this.total = total;\n        this.count = 0;\n    }\n    TakeSubscriber.prototype._next = function (value) {\n        var total = this.total;\n        var count = ++this.count;\n        if (count <= total) {\n            this.destination.next(value);\n            if (count === total) {\n                this.destination.complete();\n                this.unsubscribe();\n            }\n        }\n    };\n    return TakeSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=take.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\n/**\n * Emits the values emitted by the source Observable until a `notifier`\n * Observable emits a value.\n *\n * <span class=\"informal\">Lets values pass until a second Observable,\n * `notifier`, emits something. Then, it completes.</span>\n *\n * <img src=\"./img/takeUntil.png\" width=\"100%\">\n *\n * `takeUntil` subscribes and begins mirroring the source Observable. It also\n * monitors a second Observable, `notifier` that you provide. If the `notifier`\n * emits a value or a complete notification, the output Observable stops\n * mirroring the source Observable and completes.\n *\n * @example <caption>Tick every second until the first click happens</caption>\n * var interval = Rx.Observable.interval(1000);\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = interval.takeUntil(clicks);\n * result.subscribe(x => console.log(x));\n *\n * @see {@link take}\n * @see {@link takeLast}\n * @see {@link takeWhile}\n * @see {@link skip}\n *\n * @param {Observable} notifier The Observable whose first emitted value will\n * cause the output Observable of `takeUntil` to stop emitting values from the\n * source Observable.\n * @return {Observable<T>} An Observable that emits the values from the source\n * Observable until such time as `notifier` emits its first value.\n * @method takeUntil\n * @owner Observable\n */\nfunction takeUntil(notifier) {\n    return this.lift(new TakeUntilOperator(notifier));\n}\nexports.takeUntil = takeUntil;\nvar TakeUntilOperator = (function () {\n    function TakeUntilOperator(notifier) {\n        this.notifier = notifier;\n    }\n    TakeUntilOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new TakeUntilSubscriber(subscriber, this.notifier));\n    };\n    return TakeUntilOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar TakeUntilSubscriber = (function (_super) {\n    __extends(TakeUntilSubscriber, _super);\n    function TakeUntilSubscriber(destination, notifier) {\n        _super.call(this, destination);\n        this.notifier = notifier;\n        this.add(subscribeToResult_1.subscribeToResult(this, notifier));\n    }\n    TakeUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        this.complete();\n    };\n    TakeUntilSubscriber.prototype.notifyComplete = function () {\n        // noop\n    };\n    return TakeUntilSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=takeUntil.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\n/* tslint:enable:max-line-length */\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable, emitting values only from the most recently projected Observable.\n *\n * <span class=\"informal\">Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link switch}.</span>\n *\n * <img src=\"./img/switchMap.png\" width=\"100%\">\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an (so-called \"inner\") Observable. Each time it observes one of these\n * inner Observables, the output Observable begins emitting the items emitted by\n * that inner Observable. When a new inner Observable is emitted, `switchMap`\n * stops emitting items from the earlier-emitted inner Observable and begins\n * emitting items from the new one. It continues to behave like this for\n * subsequent inner Observables.\n *\n * @example <caption>Rerun an interval Observable on every click event</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = clicks.switchMap((ev) => Rx.Observable.interval(1000));\n * result.subscribe(x => console.log(x));\n *\n * @see {@link concatMap}\n * @see {@link exhaustMap}\n * @see {@link mergeMap}\n * @see {@link switch}\n * @see {@link switchMapTo}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @param {function(outerValue: T, innerValue: I, outerIndex: number, innerIndex: number): any} [resultSelector]\n * A function to produce the value on the output Observable based on the values\n * and the indices of the source (outer) emission and the inner Observable\n * emission. The arguments passed to this function are:\n * - `outerValue`: the value that came from the source\n * - `innerValue`: the value that came from the projected Observable\n * - `outerIndex`: the \"index\" of the value that came from the source\n * - `innerIndex`: the \"index\" of the value from the projected Observable\n * @return {Observable} An Observable that emits the result of applying the\n * projection function (and the optional `resultSelector`) to each item emitted\n * by the source Observable and taking only the values from the most recently\n * projected inner Observable.\n * @method switchMap\n * @owner Observable\n */\nfunction switchMap(project, resultSelector) {\n    return this.lift(new SwitchMapOperator(project, resultSelector));\n}\nexports.switchMap = switchMap;\nvar SwitchMapOperator = (function () {\n    function SwitchMapOperator(project, resultSelector) {\n        this.project = project;\n        this.resultSelector = resultSelector;\n    }\n    SwitchMapOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new SwitchMapSubscriber(subscriber, this.project, this.resultSelector));\n    };\n    return SwitchMapOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar SwitchMapSubscriber = (function (_super) {\n    __extends(SwitchMapSubscriber, _super);\n    function SwitchMapSubscriber(destination, project, resultSelector) {\n        _super.call(this, destination);\n        this.project = project;\n        this.resultSelector = resultSelector;\n        this.index = 0;\n    }\n    SwitchMapSubscriber.prototype._next = function (value) {\n        var result;\n        var index = this.index++;\n        try {\n            result = this.project(value, index);\n        }\n        catch (error) {\n            this.destination.error(error);\n            return;\n        }\n        this._innerSub(result, value, index);\n    };\n    SwitchMapSubscriber.prototype._innerSub = function (result, value, index) {\n        var innerSubscription = this.innerSubscription;\n        if (innerSubscription) {\n            innerSubscription.unsubscribe();\n        }\n        this.add(this.innerSubscription = subscribeToResult_1.subscribeToResult(this, result, value, index));\n    };\n    SwitchMapSubscriber.prototype._complete = function () {\n        var innerSubscription = this.innerSubscription;\n        if (!innerSubscription || innerSubscription.closed) {\n            _super.prototype._complete.call(this);\n        }\n    };\n    SwitchMapSubscriber.prototype._unsubscribe = function () {\n        this.innerSubscription = null;\n    };\n    SwitchMapSubscriber.prototype.notifyComplete = function (innerSub) {\n        this.remove(innerSub);\n        this.innerSubscription = null;\n        if (this.isStopped) {\n            _super.prototype._complete.call(this);\n        }\n    };\n    SwitchMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        if (this.resultSelector) {\n            this._tryNotifyNext(outerValue, innerValue, outerIndex, innerIndex);\n        }\n        else {\n            this.destination.next(innerValue);\n        }\n    };\n    SwitchMapSubscriber.prototype._tryNotifyNext = function (outerValue, innerValue, outerIndex, innerIndex) {\n        var result;\n        try {\n            result = this.resultSelector(outerValue, innerValue, outerIndex, innerIndex);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.destination.next(result);\n    };\n    return SwitchMapSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=switchMap.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\nvar ArgumentOutOfRangeError_1 = require('../util/ArgumentOutOfRangeError');\nvar EmptyObservable_1 = require('../observable/EmptyObservable');\n/**\n * Emits only the first `count` values emitted by the source Observable.\n *\n * <span class=\"informal\">Takes the first `count` values from the source, then\n * completes.</span>\n *\n * <img src=\"./img/take.png\" width=\"100%\">\n *\n * `take` returns an Observable that emits only the first `count` values emitted\n * by the source Observable. If the source emits fewer than `count` values then\n * all of its values are emitted. After that, it completes, regardless if the\n * source completes.\n *\n * @example <caption>Take the first 5 seconds of an infinite 1-second interval Observable</caption>\n * var interval = Rx.Observable.interval(1000);\n * var five = interval.take(5);\n * five.subscribe(x => console.log(x));\n *\n * @see {@link takeLast}\n * @see {@link takeUntil}\n * @see {@link takeWhile}\n * @see {@link skip}\n *\n * @throws {ArgumentOutOfRangeError} When using `take(i)`, it delivers an\n * ArgumentOutOrRangeError to the Observer's `error` callback if `i < 0`.\n *\n * @param {number} count The maximum number of `next` values to emit.\n * @return {Observable<T>} An Observable that emits only the first `count`\n * values emitted by the source Observable, or all of the values from the source\n * if the source emits fewer than `count` values.\n * @method take\n * @owner Observable\n */\nfunction take(count) {\n    if (count === 0) {\n        return new EmptyObservable_1.EmptyObservable();\n    }\n    else {\n        return this.lift(new TakeOperator(count));\n    }\n}\nexports.take = take;\nvar TakeOperator = (function () {\n    function TakeOperator(total) {\n        this.total = total;\n        if (this.total < 0) {\n            throw new ArgumentOutOfRangeError_1.ArgumentOutOfRangeError;\n        }\n    }\n    TakeOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new TakeSubscriber(subscriber, this.total));\n    };\n    return TakeOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar TakeSubscriber = (function (_super) {\n    __extends(TakeSubscriber, _super);\n    function TakeSubscriber(destination, total) {\n        _super.call(this, destination);\n        this.total = total;\n        this.count = 0;\n    }\n    TakeSubscriber.prototype._next = function (value) {\n        var total = this.total;\n        var count = ++this.count;\n        if (count <= total) {\n            this.destination.next(value);\n            if (count === total) {\n                this.destination.complete();\n                this.unsubscribe();\n            }\n        }\n    };\n    return TakeSubscriber;\n}(Subscriber_1.Subscriber));\n//# sourceMappingURL=take.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\n/**\n * Emits the values emitted by the source Observable until a `notifier`\n * Observable emits a value.\n *\n * <span class=\"informal\">Lets values pass until a second Observable,\n * `notifier`, emits something. Then, it completes.</span>\n *\n * <img src=\"./img/takeUntil.png\" width=\"100%\">\n *\n * `takeUntil` subscribes and begins mirroring the source Observable. It also\n * monitors a second Observable, `notifier` that you provide. If the `notifier`\n * emits a value or a complete notification, the output Observable stops\n * mirroring the source Observable and completes.\n *\n * @example <caption>Tick every second until the first click happens</caption>\n * var interval = Rx.Observable.interval(1000);\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = interval.takeUntil(clicks);\n * result.subscribe(x => console.log(x));\n *\n * @see {@link take}\n * @see {@link takeLast}\n * @see {@link takeWhile}\n * @see {@link skip}\n *\n * @param {Observable} notifier The Observable whose first emitted value will\n * cause the output Observable of `takeUntil` to stop emitting values from the\n * source Observable.\n * @return {Observable<T>} An Observable that emits the values from the source\n * Observable until such time as `notifier` emits its first value.\n * @method takeUntil\n * @owner Observable\n */\nfunction takeUntil(notifier) {\n    return this.lift(new TakeUntilOperator(notifier));\n}\nexports.takeUntil = takeUntil;\nvar TakeUntilOperator = (function () {\n    function TakeUntilOperator(notifier) {\n        this.notifier = notifier;\n    }\n    TakeUntilOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new TakeUntilSubscriber(subscriber, this.notifier));\n    };\n    return TakeUntilOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar TakeUntilSubscriber = (function (_super) {\n    __extends(TakeUntilSubscriber, _super);\n    function TakeUntilSubscriber(destination, notifier) {\n        _super.call(this, destination);\n        this.notifier = notifier;\n        this.add(subscribeToResult_1.subscribeToResult(this, notifier));\n    }\n    TakeUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        this.complete();\n    };\n    TakeUntilSubscriber.prototype.notifyComplete = function () {\n        // noop\n    };\n    return TakeUntilSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=takeUntil.js.map",
-    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\nvar async_1 = require('../scheduler/async');\n/**\n * Emits a value from the source Observable, then ignores subsequent source\n * values for `duration` milliseconds, then repeats this process.\n *\n * <span class=\"informal\">Lets a value pass, then ignores source values for the\n * next `duration` milliseconds.</span>\n *\n * <img src=\"./img/throttleTime.png\" width=\"100%\">\n *\n * `throttleTime` emits the source Observable values on the output Observable\n * when its internal timer is disabled, and ignores source values when the timer\n * is enabled. Initially, the timer is disabled. As soon as the first source\n * value arrives, it is forwarded to the output Observable, and then the timer\n * is enabled. After `duration` milliseconds (or the time unit determined\n * internally by the optional `scheduler`) has passed, the timer is disabled,\n * and this process repeats for the next source value. Optionally takes a\n * {@link IScheduler} for managing timers.\n *\n * @example <caption>Emit clicks at a rate of at most one click per second</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = clicks.throttleTime(1000);\n * result.subscribe(x => console.log(x));\n *\n * @see {@link auditTime}\n * @see {@link debounceTime}\n * @see {@link delay}\n * @see {@link sampleTime}\n * @see {@link throttle}\n *\n * @param {number} duration Time to wait before emitting another value after\n * emitting the last value, measured in milliseconds or the time unit determined\n * internally by the optional `scheduler`.\n * @param {Scheduler} [scheduler=async] The {@link IScheduler} to use for\n * managing the timers that handle the sampling.\n * @return {Observable<T>} An Observable that performs the throttle operation to\n * limit the rate of emissions from the source.\n * @method throttleTime\n * @owner Observable\n */\nfunction throttleTime(duration, scheduler) {\n    if (scheduler === void 0) { scheduler = async_1.async; }\n    return this.lift(new ThrottleTimeOperator(duration, scheduler));\n}\nexports.throttleTime = throttleTime;\nvar ThrottleTimeOperator = (function () {\n    function ThrottleTimeOperator(duration, scheduler) {\n        this.duration = duration;\n        this.scheduler = scheduler;\n    }\n    ThrottleTimeOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler));\n    };\n    return ThrottleTimeOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar ThrottleTimeSubscriber = (function (_super) {\n    __extends(ThrottleTimeSubscriber, _super);\n    function ThrottleTimeSubscriber(destination, duration, scheduler) {\n        _super.call(this, destination);\n        this.duration = duration;\n        this.scheduler = scheduler;\n    }\n    ThrottleTimeSubscriber.prototype._next = function (value) {\n        if (!this.throttled) {\n            this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this }));\n            this.destination.next(value);\n        }\n    };\n    ThrottleTimeSubscriber.prototype.clearThrottle = function () {\n        var throttled = this.throttled;\n        if (throttled) {\n            throttled.unsubscribe();\n            this.remove(throttled);\n            this.throttled = null;\n        }\n    };\n    return ThrottleTimeSubscriber;\n}(Subscriber_1.Subscriber));\nfunction dispatchNext(arg) {\n    var subscriber = arg.subscriber;\n    subscriber.clearThrottle();\n}\n//# sourceMappingURL=throttleTime.js.map",
+    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\nexports.defaultThrottleConfig = {\n    leading: true,\n    trailing: false\n};\n/**\n * Emits a value from the source Observable, then ignores subsequent source\n * values for a duration determined by another Observable, then repeats this\n * process.\n *\n * <span class=\"informal\">It's like {@link throttleTime}, but the silencing\n * duration is determined by a second Observable.</span>\n *\n * <img src=\"./img/throttle.png\" width=\"100%\">\n *\n * `throttle` emits the source Observable values on the output Observable\n * when its internal timer is disabled, and ignores source values when the timer\n * is enabled. Initially, the timer is disabled. As soon as the first source\n * value arrives, it is forwarded to the output Observable, and then the timer\n * is enabled by calling the `durationSelector` function with the source value,\n * which returns the \"duration\" Observable. When the duration Observable emits a\n * value or completes, the timer is disabled, and this process repeats for the\n * next source value.\n *\n * @example <caption>Emit clicks at a rate of at most one click per second</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = clicks.throttle(ev => Rx.Observable.interval(1000));\n * result.subscribe(x => console.log(x));\n *\n * @see {@link audit}\n * @see {@link debounce}\n * @see {@link delayWhen}\n * @see {@link sample}\n * @see {@link throttleTime}\n *\n * @param {function(value: T): SubscribableOrPromise} durationSelector A function\n * that receives a value from the source Observable, for computing the silencing\n * duration for each source value, returned as an Observable or a Promise.\n * @param {Object} config a configuration object to define `leading` and `trailing` behavior. Defaults\n * to `{ leading: true, trailing: false }`.\n * @return {Observable<T>} An Observable that performs the throttle operation to\n * limit the rate of emissions from the source.\n * @method throttle\n * @owner Observable\n */\nfunction throttle(durationSelector, config) {\n    if (config === void 0) { config = exports.defaultThrottleConfig; }\n    return this.lift(new ThrottleOperator(durationSelector, config.leading, config.trailing));\n}\nexports.throttle = throttle;\nvar ThrottleOperator = (function () {\n    function ThrottleOperator(durationSelector, leading, trailing) {\n        this.durationSelector = durationSelector;\n        this.leading = leading;\n        this.trailing = trailing;\n    }\n    ThrottleOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));\n    };\n    return ThrottleOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc\n * @ignore\n * @extends {Ignored}\n */\nvar ThrottleSubscriber = (function (_super) {\n    __extends(ThrottleSubscriber, _super);\n    function ThrottleSubscriber(destination, durationSelector, _leading, _trailing) {\n        _super.call(this, destination);\n        this.destination = destination;\n        this.durationSelector = durationSelector;\n        this._leading = _leading;\n        this._trailing = _trailing;\n        this._hasTrailingValue = false;\n    }\n    ThrottleSubscriber.prototype._next = function (value) {\n        if (this.throttled) {\n            if (this._trailing) {\n                this._hasTrailingValue = true;\n                this._trailingValue = value;\n            }\n        }\n        else {\n            var duration = this.tryDurationSelector(value);\n            if (duration) {\n                this.add(this.throttled = subscribeToResult_1.subscribeToResult(this, duration));\n            }\n            if (this._leading) {\n                this.destination.next(value);\n                if (this._trailing) {\n                    this._hasTrailingValue = true;\n                    this._trailingValue = value;\n                }\n            }\n        }\n    };\n    ThrottleSubscriber.prototype.tryDurationSelector = function (value) {\n        try {\n            return this.durationSelector(value);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return null;\n        }\n    };\n    ThrottleSubscriber.prototype._unsubscribe = function () {\n        var _a = this, throttled = _a.throttled, _trailingValue = _a._trailingValue, _hasTrailingValue = _a._hasTrailingValue, _trailing = _a._trailing;\n        this._trailingValue = null;\n        this._hasTrailingValue = false;\n        if (throttled) {\n            this.remove(throttled);\n            this.throttled = null;\n            throttled.unsubscribe();\n        }\n    };\n    ThrottleSubscriber.prototype._sendTrailing = function () {\n        var _a = this, destination = _a.destination, throttled = _a.throttled, _trailing = _a._trailing, _trailingValue = _a._trailingValue, _hasTrailingValue = _a._hasTrailingValue;\n        if (throttled && _trailing && _hasTrailingValue) {\n            destination.next(_trailingValue);\n            this._trailingValue = null;\n            this._hasTrailingValue = false;\n        }\n    };\n    ThrottleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        this._sendTrailing();\n        this._unsubscribe();\n    };\n    ThrottleSubscriber.prototype.notifyComplete = function () {\n        this._sendTrailing();\n        this._unsubscribe();\n    };\n    return ThrottleSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=throttle.js.map",
+    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscriber_1 = require('../Subscriber');\nvar async_1 = require('../scheduler/async');\nvar throttle_1 = require('./throttle');\n/**\n * Emits a value from the source Observable, then ignores subsequent source\n * values for `duration` milliseconds, then repeats this process.\n *\n * <span class=\"informal\">Lets a value pass, then ignores source values for the\n * next `duration` milliseconds.</span>\n *\n * <img src=\"./img/throttleTime.png\" width=\"100%\">\n *\n * `throttleTime` emits the source Observable values on the output Observable\n * when its internal timer is disabled, and ignores source values when the timer\n * is enabled. Initially, the timer is disabled. As soon as the first source\n * value arrives, it is forwarded to the output Observable, and then the timer\n * is enabled. After `duration` milliseconds (or the time unit determined\n * internally by the optional `scheduler`) has passed, the timer is disabled,\n * and this process repeats for the next source value. Optionally takes a\n * {@link IScheduler} for managing timers.\n *\n * @example <caption>Emit clicks at a rate of at most one click per second</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var result = clicks.throttleTime(1000);\n * result.subscribe(x => console.log(x));\n *\n * @see {@link auditTime}\n * @see {@link debounceTime}\n * @see {@link delay}\n * @see {@link sampleTime}\n * @see {@link throttle}\n *\n * @param {number} duration Time to wait before emitting another value after\n * emitting the last value, measured in milliseconds or the time unit determined\n * internally by the optional `scheduler`.\n * @param {Scheduler} [scheduler=async] The {@link IScheduler} to use for\n * managing the timers that handle the sampling.\n * @return {Observable<T>} An Observable that performs the throttle operation to\n * limit the rate of emissions from the source.\n * @method throttleTime\n * @owner Observable\n */\nfunction throttleTime(duration, scheduler, config) {\n    if (scheduler === void 0) { scheduler = async_1.async; }\n    if (config === void 0) { config = throttle_1.defaultThrottleConfig; }\n    return this.lift(new ThrottleTimeOperator(duration, scheduler, config.leading, config.trailing));\n}\nexports.throttleTime = throttleTime;\nvar ThrottleTimeOperator = (function () {\n    function ThrottleTimeOperator(duration, scheduler, leading, trailing) {\n        this.duration = duration;\n        this.scheduler = scheduler;\n        this.leading = leading;\n        this.trailing = trailing;\n    }\n    ThrottleTimeOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler, this.leading, this.trailing));\n    };\n    return ThrottleTimeOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar ThrottleTimeSubscriber = (function (_super) {\n    __extends(ThrottleTimeSubscriber, _super);\n    function ThrottleTimeSubscriber(destination, duration, scheduler, leading, trailing) {\n        _super.call(this, destination);\n        this.duration = duration;\n        this.scheduler = scheduler;\n        this.leading = leading;\n        this.trailing = trailing;\n        this._hasTrailingValue = false;\n        this._trailingValue = null;\n    }\n    ThrottleTimeSubscriber.prototype._next = function (value) {\n        if (this.throttled) {\n            if (this.trailing) {\n                this._trailingValue = value;\n                this._hasTrailingValue = true;\n            }\n        }\n        else {\n            this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this }));\n            if (this.leading) {\n                this.destination.next(value);\n            }\n        }\n    };\n    ThrottleTimeSubscriber.prototype.clearThrottle = function () {\n        var throttled = this.throttled;\n        if (throttled) {\n            if (this.trailing && this._hasTrailingValue) {\n                this.destination.next(this._trailingValue);\n                this._trailingValue = null;\n                this._hasTrailingValue = false;\n            }\n            throttled.unsubscribe();\n            this.remove(throttled);\n            this.throttled = null;\n        }\n    };\n    return ThrottleTimeSubscriber;\n}(Subscriber_1.Subscriber));\nfunction dispatchNext(arg) {\n    var subscriber = arg.subscriber;\n    subscriber.clearThrottle();\n}\n//# sourceMappingURL=throttleTime.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\n/* tslint:enable:max-line-length */\n/**\n * Combines the source Observable with other Observables to create an Observable\n * whose values are calculated from the latest values of each, only when the\n * source emits.\n *\n * <span class=\"informal\">Whenever the source Observable emits a value, it\n * computes a formula using that value plus the latest values from other input\n * Observables, then emits the output of that formula.</span>\n *\n * <img src=\"./img/withLatestFrom.png\" width=\"100%\">\n *\n * `withLatestFrom` combines each value from the source Observable (the\n * instance) with the latest values from the other input Observables only when\n * the source emits a value, optionally using a `project` function to determine\n * the value to be emitted on the output Observable. All input Observables must\n * emit at least one value before the output Observable will emit a value.\n *\n * @example <caption>On every click event, emit an array with the latest timer event plus the click event</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var timer = Rx.Observable.interval(1000);\n * var result = clicks.withLatestFrom(timer);\n * result.subscribe(x => console.log(x));\n *\n * @see {@link combineLatest}\n *\n * @param {ObservableInput} other An input Observable to combine with the source\n * Observable. More than one input Observables may be given as argument.\n * @param {Function} [project] Projection function for combining values\n * together. Receives all values in order of the Observables passed, where the\n * first parameter is a value from the source Observable. (e.g.\n * `a.withLatestFrom(b, c, (a1, b1, c1) => a1 + b1 + c1)`). If this is not\n * passed, arrays will be emitted on the output Observable.\n * @return {Observable} An Observable of projected values from the most recent\n * values from each input Observable, or an array of the most recent values from\n * each input Observable.\n * @method withLatestFrom\n * @owner Observable\n */\nfunction withLatestFrom() {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i - 0] = arguments[_i];\n    }\n    var project;\n    if (typeof args[args.length - 1] === 'function') {\n        project = args.pop();\n    }\n    var observables = args;\n    return this.lift(new WithLatestFromOperator(observables, project));\n}\nexports.withLatestFrom = withLatestFrom;\nvar WithLatestFromOperator = (function () {\n    function WithLatestFromOperator(observables, project) {\n        this.observables = observables;\n        this.project = project;\n    }\n    WithLatestFromOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project));\n    };\n    return WithLatestFromOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar WithLatestFromSubscriber = (function (_super) {\n    __extends(WithLatestFromSubscriber, _super);\n    function WithLatestFromSubscriber(destination, observables, project) {\n        _super.call(this, destination);\n        this.observables = observables;\n        this.project = project;\n        this.toRespond = [];\n        var len = observables.length;\n        this.values = new Array(len);\n        for (var i = 0; i < len; i++) {\n            this.toRespond.push(i);\n        }\n        for (var i = 0; i < len; i++) {\n            var observable = observables[i];\n            this.add(subscribeToResult_1.subscribeToResult(this, observable, observable, i));\n        }\n    }\n    WithLatestFromSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        this.values[outerIndex] = innerValue;\n        var toRespond = this.toRespond;\n        if (toRespond.length > 0) {\n            var found = toRespond.indexOf(outerIndex);\n            if (found !== -1) {\n                toRespond.splice(found, 1);\n            }\n        }\n    };\n    WithLatestFromSubscriber.prototype.notifyComplete = function () {\n        // noop\n    };\n    WithLatestFromSubscriber.prototype._next = function (value) {\n        if (this.toRespond.length === 0) {\n            var args = [value].concat(this.values);\n            if (this.project) {\n                this._tryProject(args);\n            }\n            else {\n                this.destination.next(args);\n            }\n        }\n    };\n    WithLatestFromSubscriber.prototype._tryProject = function (args) {\n        var result;\n        try {\n            result = this.project.apply(this, args);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.destination.next(result);\n    };\n    return WithLatestFromSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=withLatestFrom.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\n/* tslint:enable:max-line-length */\n/**\n * Combines the source Observable with other Observables to create an Observable\n * whose values are calculated from the latest values of each, only when the\n * source emits.\n *\n * <span class=\"informal\">Whenever the source Observable emits a value, it\n * computes a formula using that value plus the latest values from other input\n * Observables, then emits the output of that formula.</span>\n *\n * <img src=\"./img/withLatestFrom.png\" width=\"100%\">\n *\n * `withLatestFrom` combines each value from the source Observable (the\n * instance) with the latest values from the other input Observables only when\n * the source emits a value, optionally using a `project` function to determine\n * the value to be emitted on the output Observable. All input Observables must\n * emit at least one value before the output Observable will emit a value.\n *\n * @example <caption>On every click event, emit an array with the latest timer event plus the click event</caption>\n * var clicks = Rx.Observable.fromEvent(document, 'click');\n * var timer = Rx.Observable.interval(1000);\n * var result = clicks.withLatestFrom(timer);\n * result.subscribe(x => console.log(x));\n *\n * @see {@link combineLatest}\n *\n * @param {ObservableInput} other An input Observable to combine with the source\n * Observable. More than one input Observables may be given as argument.\n * @param {Function} [project] Projection function for combining values\n * together. Receives all values in order of the Observables passed, where the\n * first parameter is a value from the source Observable. (e.g.\n * `a.withLatestFrom(b, c, (a1, b1, c1) => a1 + b1 + c1)`). If this is not\n * passed, arrays will be emitted on the output Observable.\n * @return {Observable} An Observable of projected values from the most recent\n * values from each input Observable, or an array of the most recent values from\n * each input Observable.\n * @method withLatestFrom\n * @owner Observable\n */\nfunction withLatestFrom() {\n    var args = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        args[_i - 0] = arguments[_i];\n    }\n    var project;\n    if (typeof args[args.length - 1] === 'function') {\n        project = args.pop();\n    }\n    var observables = args;\n    return this.lift(new WithLatestFromOperator(observables, project));\n}\nexports.withLatestFrom = withLatestFrom;\nvar WithLatestFromOperator = (function () {\n    function WithLatestFromOperator(observables, project) {\n        this.observables = observables;\n        this.project = project;\n    }\n    WithLatestFromOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project));\n    };\n    return WithLatestFromOperator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar WithLatestFromSubscriber = (function (_super) {\n    __extends(WithLatestFromSubscriber, _super);\n    function WithLatestFromSubscriber(destination, observables, project) {\n        _super.call(this, destination);\n        this.observables = observables;\n        this.project = project;\n        this.toRespond = [];\n        var len = observables.length;\n        this.values = new Array(len);\n        for (var i = 0; i < len; i++) {\n            this.toRespond.push(i);\n        }\n        for (var i = 0; i < len; i++) {\n            var observable = observables[i];\n            this.add(subscribeToResult_1.subscribeToResult(this, observable, observable, i));\n        }\n    }\n    WithLatestFromSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        this.values[outerIndex] = innerValue;\n        var toRespond = this.toRespond;\n        if (toRespond.length > 0) {\n            var found = toRespond.indexOf(outerIndex);\n            if (found !== -1) {\n                toRespond.splice(found, 1);\n            }\n        }\n    };\n    WithLatestFromSubscriber.prototype.notifyComplete = function () {\n        // noop\n    };\n    WithLatestFromSubscriber.prototype._next = function (value) {\n        if (this.toRespond.length === 0) {\n            var args = [value].concat(this.values);\n            if (this.project) {\n                this._tryProject(args);\n            }\n            else {\n                this.destination.next(args);\n            }\n        }\n    };\n    WithLatestFromSubscriber.prototype._tryProject = function (args) {\n        var result;\n        try {\n            result = this.project.apply(this, args);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.destination.next(result);\n    };\n    return WithLatestFromSubscriber;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=withLatestFrom.js.map",
-    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar ArrayObservable_1 = require('../observable/ArrayObservable');\nvar isArray_1 = require('../util/isArray');\nvar Subscriber_1 = require('../Subscriber');\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\nvar iterator_1 = require('../symbol/iterator');\n/* tslint:enable:max-line-length */\n/**\n * @param observables\n * @return {Observable<R>}\n * @method zip\n * @owner Observable\n */\nfunction zipProto() {\n    var observables = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        observables[_i - 0] = arguments[_i];\n    }\n    return this.lift.call(zipStatic.apply(void 0, [this].concat(observables)));\n}\nexports.zipProto = zipProto;\n/* tslint:enable:max-line-length */\n/**\n * Combines multiple Observables to create an Observable whose values are calculated from the values, in order, of each\n * of its input Observables.\n *\n * If the latest parameter is a function, this function is used to compute the created value from the input values.\n * Otherwise, an array of the input values is returned.\n *\n * @example <caption>Combine age and name from different sources</caption>\n *\n * let age$ = Observable.of<number>(27, 25, 29);\n * let name$ = Observable.of<string>('Foo', 'Bar', 'Beer');\n * let isDev$ = Observable.of<boolean>(true, true, false);\n *\n * Observable\n *     .zip(age$,\n *          name$,\n *          isDev$,\n *          (age: number, name: string, isDev: boolean) => ({ age, name, isDev }))\n *     .subscribe(x => console.log(x));\n *\n * // outputs\n * // { age: 27, name: 'Foo', isDev: true }\n * // { age: 25, name: 'Bar', isDev: true }\n * // { age: 29, name: 'Beer', isDev: false }\n *\n * @param observables\n * @return {Observable<R>}\n * @static true\n * @name zip\n * @owner Observable\n */\nfunction zipStatic() {\n    var observables = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        observables[_i - 0] = arguments[_i];\n    }\n    var project = observables[observables.length - 1];\n    if (typeof project === 'function') {\n        observables.pop();\n    }\n    return new ArrayObservable_1.ArrayObservable(observables).lift(new ZipOperator(project));\n}\nexports.zipStatic = zipStatic;\nvar ZipOperator = (function () {\n    function ZipOperator(project) {\n        this.project = project;\n    }\n    ZipOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new ZipSubscriber(subscriber, this.project));\n    };\n    return ZipOperator;\n}());\nexports.ZipOperator = ZipOperator;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar ZipSubscriber = (function (_super) {\n    __extends(ZipSubscriber, _super);\n    function ZipSubscriber(destination, project, values) {\n        if (values === void 0) { values = Object.create(null); }\n        _super.call(this, destination);\n        this.iterators = [];\n        this.active = 0;\n        this.project = (typeof project === 'function') ? project : null;\n        this.values = values;\n    }\n    ZipSubscriber.prototype._next = function (value) {\n        var iterators = this.iterators;\n        if (isArray_1.isArray(value)) {\n            iterators.push(new StaticArrayIterator(value));\n        }\n        else if (typeof value[iterator_1.$$iterator] === 'function') {\n            iterators.push(new StaticIterator(value[iterator_1.$$iterator]()));\n        }\n        else {\n            iterators.push(new ZipBufferIterator(this.destination, this, value));\n        }\n    };\n    ZipSubscriber.prototype._complete = function () {\n        var iterators = this.iterators;\n        var len = iterators.length;\n        this.active = len;\n        for (var i = 0; i < len; i++) {\n            var iterator = iterators[i];\n            if (iterator.stillUnsubscribed) {\n                this.add(iterator.subscribe(iterator, i));\n            }\n            else {\n                this.active--; // not an observable\n            }\n        }\n    };\n    ZipSubscriber.prototype.notifyInactive = function () {\n        this.active--;\n        if (this.active === 0) {\n            this.destination.complete();\n        }\n    };\n    ZipSubscriber.prototype.checkIterators = function () {\n        var iterators = this.iterators;\n        var len = iterators.length;\n        var destination = this.destination;\n        // abort if not all of them have values\n        for (var i = 0; i < len; i++) {\n            var iterator = iterators[i];\n            if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) {\n                return;\n            }\n        }\n        var shouldComplete = false;\n        var args = [];\n        for (var i = 0; i < len; i++) {\n            var iterator = iterators[i];\n            var result = iterator.next();\n            // check to see if it's completed now that you've gotten\n            // the next value.\n            if (iterator.hasCompleted()) {\n                shouldComplete = true;\n            }\n            if (result.done) {\n                destination.complete();\n                return;\n            }\n            args.push(result.value);\n        }\n        if (this.project) {\n            this._tryProject(args);\n        }\n        else {\n            destination.next(args);\n        }\n        if (shouldComplete) {\n            destination.complete();\n        }\n    };\n    ZipSubscriber.prototype._tryProject = function (args) {\n        var result;\n        try {\n            result = this.project.apply(this, args);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.destination.next(result);\n    };\n    return ZipSubscriber;\n}(Subscriber_1.Subscriber));\nexports.ZipSubscriber = ZipSubscriber;\nvar StaticIterator = (function () {\n    function StaticIterator(iterator) {\n        this.iterator = iterator;\n        this.nextResult = iterator.next();\n    }\n    StaticIterator.prototype.hasValue = function () {\n        return true;\n    };\n    StaticIterator.prototype.next = function () {\n        var result = this.nextResult;\n        this.nextResult = this.iterator.next();\n        return result;\n    };\n    StaticIterator.prototype.hasCompleted = function () {\n        var nextResult = this.nextResult;\n        return nextResult && nextResult.done;\n    };\n    return StaticIterator;\n}());\nvar StaticArrayIterator = (function () {\n    function StaticArrayIterator(array) {\n        this.array = array;\n        this.index = 0;\n        this.length = 0;\n        this.length = array.length;\n    }\n    StaticArrayIterator.prototype[iterator_1.$$iterator] = function () {\n        return this;\n    };\n    StaticArrayIterator.prototype.next = function (value) {\n        var i = this.index++;\n        var array = this.array;\n        return i < this.length ? { value: array[i], done: false } : { value: null, done: true };\n    };\n    StaticArrayIterator.prototype.hasValue = function () {\n        return this.array.length > this.index;\n    };\n    StaticArrayIterator.prototype.hasCompleted = function () {\n        return this.array.length === this.index;\n    };\n    return StaticArrayIterator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar ZipBufferIterator = (function (_super) {\n    __extends(ZipBufferIterator, _super);\n    function ZipBufferIterator(destination, parent, observable) {\n        _super.call(this, destination);\n        this.parent = parent;\n        this.observable = observable;\n        this.stillUnsubscribed = true;\n        this.buffer = [];\n        this.isComplete = false;\n    }\n    ZipBufferIterator.prototype[iterator_1.$$iterator] = function () {\n        return this;\n    };\n    // NOTE: there is actually a name collision here with Subscriber.next and Iterator.next\n    //    this is legit because `next()` will never be called by a subscription in this case.\n    ZipBufferIterator.prototype.next = function () {\n        var buffer = this.buffer;\n        if (buffer.length === 0 && this.isComplete) {\n            return { value: null, done: true };\n        }\n        else {\n            return { value: buffer.shift(), done: false };\n        }\n    };\n    ZipBufferIterator.prototype.hasValue = function () {\n        return this.buffer.length > 0;\n    };\n    ZipBufferIterator.prototype.hasCompleted = function () {\n        return this.buffer.length === 0 && this.isComplete;\n    };\n    ZipBufferIterator.prototype.notifyComplete = function () {\n        if (this.buffer.length > 0) {\n            this.isComplete = true;\n            this.parent.notifyInactive();\n        }\n        else {\n            this.destination.complete();\n        }\n    };\n    ZipBufferIterator.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        this.buffer.push(innerValue);\n        this.parent.checkIterators();\n    };\n    ZipBufferIterator.prototype.subscribe = function (value, index) {\n        return subscribeToResult_1.subscribeToResult(this, this.observable, this, index);\n    };\n    return ZipBufferIterator;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=zip.js.map",
+    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar ArrayObservable_1 = require('../observable/ArrayObservable');\nvar isArray_1 = require('../util/isArray');\nvar Subscriber_1 = require('../Subscriber');\nvar OuterSubscriber_1 = require('../OuterSubscriber');\nvar subscribeToResult_1 = require('../util/subscribeToResult');\nvar iterator_1 = require('../symbol/iterator');\n/* tslint:enable:max-line-length */\n/**\n * @param observables\n * @return {Observable<R>}\n * @method zip\n * @owner Observable\n */\nfunction zipProto() {\n    var observables = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        observables[_i - 0] = arguments[_i];\n    }\n    return this.lift.call(zipStatic.apply(void 0, [this].concat(observables)));\n}\nexports.zipProto = zipProto;\n/* tslint:enable:max-line-length */\n/**\n * Combines multiple Observables to create an Observable whose values are calculated from the values, in order, of each\n * of its input Observables.\n *\n * If the latest parameter is a function, this function is used to compute the created value from the input values.\n * Otherwise, an array of the input values is returned.\n *\n * @example <caption>Combine age and name from different sources</caption>\n *\n * let age$ = Observable.of<number>(27, 25, 29);\n * let name$ = Observable.of<string>('Foo', 'Bar', 'Beer');\n * let isDev$ = Observable.of<boolean>(true, true, false);\n *\n * Observable\n *     .zip(age$,\n *          name$,\n *          isDev$,\n *          (age: number, name: string, isDev: boolean) => ({ age, name, isDev }))\n *     .subscribe(x => console.log(x));\n *\n * // outputs\n * // { age: 27, name: 'Foo', isDev: true }\n * // { age: 25, name: 'Bar', isDev: true }\n * // { age: 29, name: 'Beer', isDev: false }\n *\n * @param observables\n * @return {Observable<R>}\n * @static true\n * @name zip\n * @owner Observable\n */\nfunction zipStatic() {\n    var observables = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        observables[_i - 0] = arguments[_i];\n    }\n    var project = observables[observables.length - 1];\n    if (typeof project === 'function') {\n        observables.pop();\n    }\n    return new ArrayObservable_1.ArrayObservable(observables).lift(new ZipOperator(project));\n}\nexports.zipStatic = zipStatic;\nvar ZipOperator = (function () {\n    function ZipOperator(project) {\n        this.project = project;\n    }\n    ZipOperator.prototype.call = function (subscriber, source) {\n        return source.subscribe(new ZipSubscriber(subscriber, this.project));\n    };\n    return ZipOperator;\n}());\nexports.ZipOperator = ZipOperator;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar ZipSubscriber = (function (_super) {\n    __extends(ZipSubscriber, _super);\n    function ZipSubscriber(destination, project, values) {\n        if (values === void 0) { values = Object.create(null); }\n        _super.call(this, destination);\n        this.iterators = [];\n        this.active = 0;\n        this.project = (typeof project === 'function') ? project : null;\n        this.values = values;\n    }\n    ZipSubscriber.prototype._next = function (value) {\n        var iterators = this.iterators;\n        if (isArray_1.isArray(value)) {\n            iterators.push(new StaticArrayIterator(value));\n        }\n        else if (typeof value[iterator_1.iterator] === 'function') {\n            iterators.push(new StaticIterator(value[iterator_1.iterator]()));\n        }\n        else {\n            iterators.push(new ZipBufferIterator(this.destination, this, value));\n        }\n    };\n    ZipSubscriber.prototype._complete = function () {\n        var iterators = this.iterators;\n        var len = iterators.length;\n        if (len === 0) {\n            this.destination.complete();\n            return;\n        }\n        this.active = len;\n        for (var i = 0; i < len; i++) {\n            var iterator = iterators[i];\n            if (iterator.stillUnsubscribed) {\n                this.add(iterator.subscribe(iterator, i));\n            }\n            else {\n                this.active--; // not an observable\n            }\n        }\n    };\n    ZipSubscriber.prototype.notifyInactive = function () {\n        this.active--;\n        if (this.active === 0) {\n            this.destination.complete();\n        }\n    };\n    ZipSubscriber.prototype.checkIterators = function () {\n        var iterators = this.iterators;\n        var len = iterators.length;\n        var destination = this.destination;\n        // abort if not all of them have values\n        for (var i = 0; i < len; i++) {\n            var iterator = iterators[i];\n            if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) {\n                return;\n            }\n        }\n        var shouldComplete = false;\n        var args = [];\n        for (var i = 0; i < len; i++) {\n            var iterator = iterators[i];\n            var result = iterator.next();\n            // check to see if it's completed now that you've gotten\n            // the next value.\n            if (iterator.hasCompleted()) {\n                shouldComplete = true;\n            }\n            if (result.done) {\n                destination.complete();\n                return;\n            }\n            args.push(result.value);\n        }\n        if (this.project) {\n            this._tryProject(args);\n        }\n        else {\n            destination.next(args);\n        }\n        if (shouldComplete) {\n            destination.complete();\n        }\n    };\n    ZipSubscriber.prototype._tryProject = function (args) {\n        var result;\n        try {\n            result = this.project.apply(this, args);\n        }\n        catch (err) {\n            this.destination.error(err);\n            return;\n        }\n        this.destination.next(result);\n    };\n    return ZipSubscriber;\n}(Subscriber_1.Subscriber));\nexports.ZipSubscriber = ZipSubscriber;\nvar StaticIterator = (function () {\n    function StaticIterator(iterator) {\n        this.iterator = iterator;\n        this.nextResult = iterator.next();\n    }\n    StaticIterator.prototype.hasValue = function () {\n        return true;\n    };\n    StaticIterator.prototype.next = function () {\n        var result = this.nextResult;\n        this.nextResult = this.iterator.next();\n        return result;\n    };\n    StaticIterator.prototype.hasCompleted = function () {\n        var nextResult = this.nextResult;\n        return nextResult && nextResult.done;\n    };\n    return StaticIterator;\n}());\nvar StaticArrayIterator = (function () {\n    function StaticArrayIterator(array) {\n        this.array = array;\n        this.index = 0;\n        this.length = 0;\n        this.length = array.length;\n    }\n    StaticArrayIterator.prototype[iterator_1.iterator] = function () {\n        return this;\n    };\n    StaticArrayIterator.prototype.next = function (value) {\n        var i = this.index++;\n        var array = this.array;\n        return i < this.length ? { value: array[i], done: false } : { value: null, done: true };\n    };\n    StaticArrayIterator.prototype.hasValue = function () {\n        return this.array.length > this.index;\n    };\n    StaticArrayIterator.prototype.hasCompleted = function () {\n        return this.array.length === this.index;\n    };\n    return StaticArrayIterator;\n}());\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar ZipBufferIterator = (function (_super) {\n    __extends(ZipBufferIterator, _super);\n    function ZipBufferIterator(destination, parent, observable) {\n        _super.call(this, destination);\n        this.parent = parent;\n        this.observable = observable;\n        this.stillUnsubscribed = true;\n        this.buffer = [];\n        this.isComplete = false;\n    }\n    ZipBufferIterator.prototype[iterator_1.iterator] = function () {\n        return this;\n    };\n    // NOTE: there is actually a name collision here with Subscriber.next and Iterator.next\n    //    this is legit because `next()` will never be called by a subscription in this case.\n    ZipBufferIterator.prototype.next = function () {\n        var buffer = this.buffer;\n        if (buffer.length === 0 && this.isComplete) {\n            return { value: null, done: true };\n        }\n        else {\n            return { value: buffer.shift(), done: false };\n        }\n    };\n    ZipBufferIterator.prototype.hasValue = function () {\n        return this.buffer.length > 0;\n    };\n    ZipBufferIterator.prototype.hasCompleted = function () {\n        return this.buffer.length === 0 && this.isComplete;\n    };\n    ZipBufferIterator.prototype.notifyComplete = function () {\n        if (this.buffer.length > 0) {\n            this.isComplete = true;\n            this.parent.notifyInactive();\n        }\n        else {\n            this.destination.complete();\n        }\n    };\n    ZipBufferIterator.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {\n        this.buffer.push(innerValue);\n        this.parent.checkIterators();\n    };\n    ZipBufferIterator.prototype.subscribe = function (value, index) {\n        return subscribeToResult_1.subscribeToResult(this, this.observable, this, index);\n    };\n    return ZipBufferIterator;\n}(OuterSubscriber_1.OuterSubscriber));\n//# sourceMappingURL=zip.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscription_1 = require('../Subscription');\n/**\n * A unit of work to be executed in a {@link Scheduler}. An action is typically\n * created from within a Scheduler and an RxJS user does not need to concern\n * themselves about creating and manipulating an Action.\n *\n * ```ts\n * class Action<T> extends Subscription {\n *   new (scheduler: Scheduler, work: (state?: T) => void);\n *   schedule(state?: T, delay: number = 0): Subscription;\n * }\n * ```\n *\n * @class Action<T>\n */\nvar Action = (function (_super) {\n    __extends(Action, _super);\n    function Action(scheduler, work) {\n        _super.call(this);\n    }\n    /**\n     * Schedules this action on its parent Scheduler for execution. May be passed\n     * some context object, `state`. May happen at some point in the future,\n     * according to the `delay` parameter, if specified.\n     * @param {T} [state] Some contextual data that the `work` function uses when\n     * called by the Scheduler.\n     * @param {number} [delay] Time to wait before executing the work, where the\n     * time unit is implicit and defined by the Scheduler.\n     * @return {void}\n     */\n    Action.prototype.schedule = function (state, delay) {\n        if (delay === void 0) { delay = 0; }\n        return this;\n    };\n    return Action;\n}(Subscription_1.Subscription));\nexports.Action = Action;\n//# sourceMappingURL=Action.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Subscription_1 = require('../Subscription');\n/**\n * A unit of work to be executed in a {@link Scheduler}. An action is typically\n * created from within a Scheduler and an RxJS user does not need to concern\n * themselves about creating and manipulating an Action.\n *\n * ```ts\n * class Action<T> extends Subscription {\n *   new (scheduler: Scheduler, work: (state?: T) => void);\n *   schedule(state?: T, delay: number = 0): Subscription;\n * }\n * ```\n *\n * @class Action<T>\n */\nvar Action = (function (_super) {\n    __extends(Action, _super);\n    function Action(scheduler, work) {\n        _super.call(this);\n    }\n    /**\n     * Schedules this action on its parent Scheduler for execution. May be passed\n     * some context object, `state`. May happen at some point in the future,\n     * according to the `delay` parameter, if specified.\n     * @param {T} [state] Some contextual data that the `work` function uses when\n     * called by the Scheduler.\n     * @param {number} [delay] Time to wait before executing the work, where the\n     * time unit is implicit and defined by the Scheduler.\n     * @return {void}\n     */\n    Action.prototype.schedule = function (state, delay) {\n        if (delay === void 0) { delay = 0; }\n        return this;\n    };\n    return Action;\n}(Subscription_1.Subscription));\nexports.Action = Action;\n//# sourceMappingURL=Action.js.map",
-    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar root_1 = require('../util/root');\nvar Action_1 = require('./Action');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar AsyncAction = (function (_super) {\n    __extends(AsyncAction, _super);\n    function AsyncAction(scheduler, work) {\n        _super.call(this, scheduler, work);\n        this.scheduler = scheduler;\n        this.work = work;\n        this.pending = false;\n    }\n    AsyncAction.prototype.schedule = function (state, delay) {\n        if (delay === void 0) { delay = 0; }\n        if (this.closed) {\n            return this;\n        }\n        // Always replace the current state with the new state.\n        this.state = state;\n        // Set the pending flag indicating that this action has been scheduled, or\n        // has recursively rescheduled itself.\n        this.pending = true;\n        var id = this.id;\n        var scheduler = this.scheduler;\n        //\n        // Important implementation note:\n        //\n        // Actions only execute once by default, unless rescheduled from within the\n        // scheduled callback. This allows us to implement single and repeat\n        // actions via the same code path, without adding API surface area, as well\n        // as mimic traditional recursion but across asynchronous boundaries.\n        //\n        // However, JS runtimes and timers distinguish between intervals achieved by\n        // serial `setTimeout` calls vs. a single `setInterval` call. An interval of\n        // serial `setTimeout` calls can be individually delayed, which delays\n        // scheduling the next `setTimeout`, and so on. `setInterval` attempts to\n        // guarantee the interval callback will be invoked more precisely to the\n        // interval period, regardless of load.\n        //\n        // Therefore, we use `setInterval` to schedule single and repeat actions.\n        // If the action reschedules itself with the same delay, the interval is not\n        // canceled. If the action doesn't reschedule, or reschedules with a\n        // different delay, the interval will be canceled after scheduled callback\n        // execution.\n        //\n        if (id != null) {\n            this.id = this.recycleAsyncId(scheduler, id, delay);\n        }\n        this.delay = delay;\n        // If this action has already an async Id, don't request a new one.\n        this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);\n        return this;\n    };\n    AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n        if (delay === void 0) { delay = 0; }\n        return root_1.root.setInterval(scheduler.flush.bind(scheduler, this), delay);\n    };\n    AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {\n        if (delay === void 0) { delay = 0; }\n        // If this action is rescheduled with the same delay time, don't clear the interval id.\n        if (delay !== null && this.delay === delay) {\n            return id;\n        }\n        // Otherwise, if the action's delay time is different from the current delay,\n        // clear the interval id\n        return root_1.root.clearInterval(id) && undefined || undefined;\n    };\n    /**\n     * Immediately executes this action and the `work` it contains.\n     * @return {any}\n     */\n    AsyncAction.prototype.execute = function (state, delay) {\n        if (this.closed) {\n            return new Error('executing a cancelled action');\n        }\n        this.pending = false;\n        var error = this._execute(state, delay);\n        if (error) {\n            return error;\n        }\n        else if (this.pending === false && this.id != null) {\n            // Dequeue if the action didn't reschedule itself. Don't call\n            // unsubscribe(), because the action could reschedule later.\n            // For example:\n            // ```\n            // scheduler.schedule(function doWork(counter) {\n            //   /* ... I'm a busy worker bee ... */\n            //   var originalAction = this;\n            //   /* wait 100ms before rescheduling the action */\n            //   setTimeout(function () {\n            //     originalAction.schedule(counter + 1);\n            //   }, 100);\n            // }, 1000);\n            // ```\n            this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n        }\n    };\n    AsyncAction.prototype._execute = function (state, delay) {\n        var errored = false;\n        var errorValue = undefined;\n        try {\n            this.work(state);\n        }\n        catch (e) {\n            errored = true;\n            errorValue = !!e && e || new Error(e);\n        }\n        if (errored) {\n            this.unsubscribe();\n            return errorValue;\n        }\n    };\n    AsyncAction.prototype._unsubscribe = function () {\n        var id = this.id;\n        var scheduler = this.scheduler;\n        var actions = scheduler.actions;\n        var index = actions.indexOf(this);\n        this.work = null;\n        this.delay = null;\n        this.state = null;\n        this.pending = false;\n        this.scheduler = null;\n        if (index !== -1) {\n            actions.splice(index, 1);\n        }\n        if (id != null) {\n            this.id = this.recycleAsyncId(scheduler, id, null);\n        }\n    };\n    return AsyncAction;\n}(Action_1.Action));\nexports.AsyncAction = AsyncAction;\n//# sourceMappingURL=AsyncAction.js.map",
+    "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar root_1 = require('../util/root');\nvar Action_1 = require('./Action');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar AsyncAction = (function (_super) {\n    __extends(AsyncAction, _super);\n    function AsyncAction(scheduler, work) {\n        _super.call(this, scheduler, work);\n        this.scheduler = scheduler;\n        this.work = work;\n        this.pending = false;\n    }\n    AsyncAction.prototype.schedule = function (state, delay) {\n        if (delay === void 0) { delay = 0; }\n        if (this.closed) {\n            return this;\n        }\n        // Always replace the current state with the new state.\n        this.state = state;\n        // Set the pending flag indicating that this action has been scheduled, or\n        // has recursively rescheduled itself.\n        this.pending = true;\n        var id = this.id;\n        var scheduler = this.scheduler;\n        //\n        // Important implementation note:\n        //\n        // Actions only execute once by default, unless rescheduled from within the\n        // scheduled callback. This allows us to implement single and repeat\n        // actions via the same code path, without adding API surface area, as well\n        // as mimic traditional recursion but across asynchronous boundaries.\n        //\n        // However, JS runtimes and timers distinguish between intervals achieved by\n        // serial `setTimeout` calls vs. a single `setInterval` call. An interval of\n        // serial `setTimeout` calls can be individually delayed, which delays\n        // scheduling the next `setTimeout`, and so on. `setInterval` attempts to\n        // guarantee the interval callback will be invoked more precisely to the\n        // interval period, regardless of load.\n        //\n        // Therefore, we use `setInterval` to schedule single and repeat actions.\n        // If the action reschedules itself with the same delay, the interval is not\n        // canceled. If the action doesn't reschedule, or reschedules with a\n        // different delay, the interval will be canceled after scheduled callback\n        // execution.\n        //\n        if (id != null) {\n            this.id = this.recycleAsyncId(scheduler, id, delay);\n        }\n        this.delay = delay;\n        // If this action has already an async Id, don't request a new one.\n        this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);\n        return this;\n    };\n    AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n        if (delay === void 0) { delay = 0; }\n        return root_1.root.setInterval(scheduler.flush.bind(scheduler, this), delay);\n    };\n    AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {\n        if (delay === void 0) { delay = 0; }\n        // If this action is rescheduled with the same delay time, don't clear the interval id.\n        if (delay !== null && this.delay === delay && this.pending === false) {\n            return id;\n        }\n        // Otherwise, if the action's delay time is different from the current delay,\n        // or the action has been rescheduled before it's executed, clear the interval id\n        return root_1.root.clearInterval(id) && undefined || undefined;\n    };\n    /**\n     * Immediately executes this action and the `work` it contains.\n     * @return {any}\n     */\n    AsyncAction.prototype.execute = function (state, delay) {\n        if (this.closed) {\n            return new Error('executing a cancelled action');\n        }\n        this.pending = false;\n        var error = this._execute(state, delay);\n        if (error) {\n            return error;\n        }\n        else if (this.pending === false && this.id != null) {\n            // Dequeue if the action didn't reschedule itself. Don't call\n            // unsubscribe(), because the action could reschedule later.\n            // For example:\n            // ```\n            // scheduler.schedule(function doWork(counter) {\n            //   /* ... I'm a busy worker bee ... */\n            //   var originalAction = this;\n            //   /* wait 100ms before rescheduling the action */\n            //   setTimeout(function () {\n            //     originalAction.schedule(counter + 1);\n            //   }, 100);\n            // }, 1000);\n            // ```\n            this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n        }\n    };\n    AsyncAction.prototype._execute = function (state, delay) {\n        var errored = false;\n        var errorValue = undefined;\n        try {\n            this.work(state);\n        }\n        catch (e) {\n            errored = true;\n            errorValue = !!e && e || new Error(e);\n        }\n        if (errored) {\n            this.unsubscribe();\n            return errorValue;\n        }\n    };\n    AsyncAction.prototype._unsubscribe = function () {\n        var id = this.id;\n        var scheduler = this.scheduler;\n        var actions = scheduler.actions;\n        var index = actions.indexOf(this);\n        this.work = null;\n        this.delay = null;\n        this.state = null;\n        this.pending = false;\n        this.scheduler = null;\n        if (index !== -1) {\n            actions.splice(index, 1);\n        }\n        if (id != null) {\n            this.id = this.recycleAsyncId(scheduler, id, null);\n        }\n    };\n    return AsyncAction;\n}(Action_1.Action));\nexports.AsyncAction = AsyncAction;\n//# sourceMappingURL=AsyncAction.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Scheduler_1 = require('../Scheduler');\nvar AsyncScheduler = (function (_super) {\n    __extends(AsyncScheduler, _super);\n    function AsyncScheduler() {\n        _super.apply(this, arguments);\n        this.actions = [];\n        /**\n         * A flag to indicate whether the Scheduler is currently executing a batch of\n         * queued actions.\n         * @type {boolean}\n         */\n        this.active = false;\n        /**\n         * An internal ID used to track the latest asynchronous task such as those\n         * coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and\n         * others.\n         * @type {any}\n         */\n        this.scheduled = undefined;\n    }\n    AsyncScheduler.prototype.flush = function (action) {\n        var actions = this.actions;\n        if (this.active) {\n            actions.push(action);\n            return;\n        }\n        var error;\n        this.active = true;\n        do {\n            if (error = action.execute(action.state, action.delay)) {\n                break;\n            }\n        } while (action = actions.shift()); // exhaust the scheduler queue\n        this.active = false;\n        if (error) {\n            while (action = actions.shift()) {\n                action.unsubscribe();\n            }\n            throw error;\n        }\n    };\n    return AsyncScheduler;\n}(Scheduler_1.Scheduler));\nexports.AsyncScheduler = AsyncScheduler;\n//# sourceMappingURL=AsyncScheduler.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar AsyncAction_1 = require('./AsyncAction');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar QueueAction = (function (_super) {\n    __extends(QueueAction, _super);\n    function QueueAction(scheduler, work) {\n        _super.call(this, scheduler, work);\n        this.scheduler = scheduler;\n        this.work = work;\n    }\n    QueueAction.prototype.schedule = function (state, delay) {\n        if (delay === void 0) { delay = 0; }\n        if (delay > 0) {\n            return _super.prototype.schedule.call(this, state, delay);\n        }\n        this.delay = delay;\n        this.state = state;\n        this.scheduler.flush(this);\n        return this;\n    };\n    QueueAction.prototype.execute = function (state, delay) {\n        return (delay > 0 || this.closed) ?\n            _super.prototype.execute.call(this, state, delay) :\n            this._execute(state, delay);\n    };\n    QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n        if (delay === void 0) { delay = 0; }\n        // If delay exists and is greater than 0, or if the delay is null (the\n        // action wasn't rescheduled) but was originally scheduled as an async\n        // action, then recycle as an async action.\n        if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {\n            return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);\n        }\n        // Otherwise flush the scheduler starting with this action.\n        return scheduler.flush(this);\n    };\n    return QueueAction;\n}(AsyncAction_1.AsyncAction));\nexports.QueueAction = QueueAction;\n//# sourceMappingURL=QueueAction.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar AsyncScheduler_1 = require('./AsyncScheduler');\nvar QueueScheduler = (function (_super) {\n    __extends(QueueScheduler, _super);\n    function QueueScheduler() {\n        _super.apply(this, arguments);\n    }\n    return QueueScheduler;\n}(AsyncScheduler_1.AsyncScheduler));\nexports.QueueScheduler = QueueScheduler;\n//# sourceMappingURL=QueueScheduler.js.map",
     "\"use strict\";\nvar AsyncAction_1 = require('./AsyncAction');\nvar AsyncScheduler_1 = require('./AsyncScheduler');\n/**\n *\n * Async Scheduler\n *\n * <span class=\"informal\">Schedule task as if you used setTimeout(task, duration)</span>\n *\n * `async` scheduler schedules tasks asynchronously, by putting them on the JavaScript\n * event loop queue. It is best used to delay tasks in time or to schedule tasks repeating\n * in intervals.\n *\n * If you just want to \"defer\" task, that is to perform it right after currently\n * executing synchronous code ends (commonly achieved by `setTimeout(deferredTask, 0)`),\n * better choice will be the {@link asap} scheduler.\n *\n * @example <caption>Use async scheduler to delay task</caption>\n * const task = () => console.log('it works!');\n *\n * Rx.Scheduler.async.schedule(task, 2000);\n *\n * // After 2 seconds logs:\n * // \"it works!\"\n *\n *\n * @example <caption>Use async scheduler to repeat task in intervals</caption>\n * function task(state) {\n *   console.log(state);\n *   this.schedule(state + 1, 1000); // `this` references currently executing Action,\n *                                   // which we reschedule with new state and delay\n * }\n *\n * Rx.Scheduler.async.schedule(task, 3000, 0);\n *\n * // Logs:\n * // 0 after 3s\n * // 1 after 4s\n * // 2 after 5s\n * // 3 after 6s\n *\n * @static true\n * @name async\n * @owner Scheduler\n */\nexports.async = new AsyncScheduler_1.AsyncScheduler(AsyncAction_1.AsyncAction);\n//# sourceMappingURL=async.js.map",
     "\"use strict\";\nvar QueueAction_1 = require('./QueueAction');\nvar QueueScheduler_1 = require('./QueueScheduler');\n/**\n *\n * Queue Scheduler\n *\n * <span class=\"informal\">Put every next task on a queue, instead of executing it immediately</span>\n *\n * `queue` scheduler, when used with delay, behaves the same as {@link async} scheduler.\n *\n * When used without delay, it schedules given task synchronously - executes it right when\n * it is scheduled. However when called recursively, that is when inside the scheduled task,\n * another task is scheduled with queue scheduler, instead of executing immediately as well,\n * that task will be put on a queue and wait for current one to finish.\n *\n * This means that when you execute task with `queue` scheduler, you are sure it will end\n * before any other task scheduled with that scheduler will start.\n *\n * @examples <caption>Schedule recursively first, then do something</caption>\n *\n * Rx.Scheduler.queue.schedule(() => {\n *   Rx.Scheduler.queue.schedule(() => console.log('second')); // will not happen now, but will be put on a queue\n *\n *   console.log('first');\n * });\n *\n * // Logs:\n * // \"first\"\n * // \"second\"\n *\n *\n * @example <caption>Reschedule itself recursively</caption>\n *\n * Rx.Scheduler.queue.schedule(function(state) {\n *   if (state !== 0) {\n *     console.log('before', state);\n *     this.schedule(state - 1); // `this` references currently executing Action,\n *                               // which we reschedule with new state\n *     console.log('after', state);\n *   }\n * }, 0, 3);\n *\n * // In scheduler that runs recursively, you would expect:\n * // \"before\", 3\n * // \"before\", 2\n * // \"before\", 1\n * // \"after\", 1\n * // \"after\", 2\n * // \"after\", 3\n *\n * // But with queue it logs:\n * // \"before\", 3\n * // \"after\", 3\n * // \"before\", 2\n * // \"after\", 2\n * // \"before\", 1\n * // \"after\", 1\n *\n *\n * @static true\n * @name queue\n * @owner Scheduler\n */\nexports.queue = new QueueScheduler_1.QueueScheduler(QueueAction_1.QueueAction);\n//# sourceMappingURL=queue.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar Scheduler_1 = require('../Scheduler');\nvar AsyncScheduler = (function (_super) {\n    __extends(AsyncScheduler, _super);\n    function AsyncScheduler() {\n        _super.apply(this, arguments);\n        this.actions = [];\n        /**\n         * A flag to indicate whether the Scheduler is currently executing a batch of\n         * queued actions.\n         * @type {boolean}\n         */\n        this.active = false;\n        /**\n         * An internal ID used to track the latest asynchronous task such as those\n         * coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and\n         * others.\n         * @type {any}\n         */\n        this.scheduled = undefined;\n    }\n    AsyncScheduler.prototype.flush = function (action) {\n        var actions = this.actions;\n        if (this.active) {\n            actions.push(action);\n            return;\n        }\n        var error;\n        this.active = true;\n        do {\n            if (error = action.execute(action.state, action.delay)) {\n                break;\n            }\n        } while (action = actions.shift()); // exhaust the scheduler queue\n        this.active = false;\n        if (error) {\n            while (action = actions.shift()) {\n                action.unsubscribe();\n            }\n            throw error;\n        }\n    };\n    return AsyncScheduler;\n}(Scheduler_1.Scheduler));\nexports.AsyncScheduler = AsyncScheduler;\n//# sourceMappingURL=AsyncScheduler.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar AsyncAction_1 = require('./AsyncAction');\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar QueueAction = (function (_super) {\n    __extends(QueueAction, _super);\n    function QueueAction(scheduler, work) {\n        _super.call(this, scheduler, work);\n        this.scheduler = scheduler;\n        this.work = work;\n    }\n    QueueAction.prototype.schedule = function (state, delay) {\n        if (delay === void 0) { delay = 0; }\n        if (delay > 0) {\n            return _super.prototype.schedule.call(this, state, delay);\n        }\n        this.delay = delay;\n        this.state = state;\n        this.scheduler.flush(this);\n        return this;\n    };\n    QueueAction.prototype.execute = function (state, delay) {\n        return (delay > 0 || this.closed) ?\n            _super.prototype.execute.call(this, state, delay) :\n            this._execute(state, delay);\n    };\n    QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) {\n        if (delay === void 0) { delay = 0; }\n        // If delay exists and is greater than 0, or if the delay is null (the\n        // action wasn't rescheduled) but was originally scheduled as an async\n        // action, then recycle as an async action.\n        if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {\n            return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);\n        }\n        // Otherwise flush the scheduler starting with this action.\n        return scheduler.flush(this);\n    };\n    return QueueAction;\n}(AsyncAction_1.AsyncAction));\nexports.QueueAction = QueueAction;\n//# sourceMappingURL=QueueAction.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar AsyncScheduler_1 = require('./AsyncScheduler');\nvar QueueScheduler = (function (_super) {\n    __extends(QueueScheduler, _super);\n    function QueueScheduler() {\n        _super.apply(this, arguments);\n    }\n    return QueueScheduler;\n}(AsyncScheduler_1.AsyncScheduler));\nexports.QueueScheduler = QueueScheduler;\n//# sourceMappingURL=QueueScheduler.js.map",
     "\"use strict\";\nvar AsyncAction_1 = require('./AsyncAction');\nvar AsyncScheduler_1 = require('./AsyncScheduler');\n/**\n *\n * Async Scheduler\n *\n * <span class=\"informal\">Schedule task as if you used setTimeout(task, duration)</span>\n *\n * `async` scheduler schedules tasks asynchronously, by putting them on the JavaScript\n * event loop queue. It is best used to delay tasks in time or to schedule tasks repeating\n * in intervals.\n *\n * If you just want to \"defer\" task, that is to perform it right after currently\n * executing synchronous code ends (commonly achieved by `setTimeout(deferredTask, 0)`),\n * better choice will be the {@link asap} scheduler.\n *\n * @example <caption>Use async scheduler to delay task</caption>\n * const task = () => console.log('it works!');\n *\n * Rx.Scheduler.async.schedule(task, 2000);\n *\n * // After 2 seconds logs:\n * // \"it works!\"\n *\n *\n * @example <caption>Use async scheduler to repeat task in intervals</caption>\n * function task(state) {\n *   console.log(state);\n *   this.schedule(state + 1, 1000); // `this` references currently executing Action,\n *                                   // which we reschedule with new state and delay\n * }\n *\n * Rx.Scheduler.async.schedule(task, 3000, 0);\n *\n * // Logs:\n * // 0 after 3s\n * // 1 after 4s\n * // 2 after 5s\n * // 3 after 6s\n *\n * @static true\n * @name async\n * @owner Scheduler\n */\nexports.async = new AsyncScheduler_1.AsyncScheduler(AsyncAction_1.AsyncAction);\n//# sourceMappingURL=async.js.map",
     "\"use strict\";\nvar QueueAction_1 = require('./QueueAction');\nvar QueueScheduler_1 = require('./QueueScheduler');\n/**\n *\n * Queue Scheduler\n *\n * <span class=\"informal\">Put every next task on a queue, instead of executing it immediately</span>\n *\n * `queue` scheduler, when used with delay, behaves the same as {@link async} scheduler.\n *\n * When used without delay, it schedules given task synchronously - executes it right when\n * it is scheduled. However when called recursively, that is when inside the scheduled task,\n * another task is scheduled with queue scheduler, instead of executing immediately as well,\n * that task will be put on a queue and wait for current one to finish.\n *\n * This means that when you execute task with `queue` scheduler, you are sure it will end\n * before any other task scheduled with that scheduler will start.\n *\n * @examples <caption>Schedule recursively first, then do something</caption>\n *\n * Rx.Scheduler.queue.schedule(() => {\n *   Rx.Scheduler.queue.schedule(() => console.log('second')); // will not happen now, but will be put on a queue\n *\n *   console.log('first');\n * });\n *\n * // Logs:\n * // \"first\"\n * // \"second\"\n *\n *\n * @example <caption>Reschedule itself recursively</caption>\n *\n * Rx.Scheduler.queue.schedule(function(state) {\n *   if (state !== 0) {\n *     console.log('before', state);\n *     this.schedule(state - 1); // `this` references currently executing Action,\n *                               // which we reschedule with new state\n *     console.log('after', state);\n *   }\n * }, 0, 3);\n *\n * // In scheduler that runs recursively, you would expect:\n * // \"before\", 3\n * // \"before\", 2\n * // \"before\", 1\n * // \"after\", 1\n * // \"after\", 2\n * // \"after\", 3\n *\n * // But with queue it logs:\n * // \"before\", 3\n * // \"after\", 3\n * // \"before\", 2\n * // \"after\", 2\n * // \"before\", 1\n * // \"after\", 1\n *\n *\n * @static true\n * @name queue\n * @owner Scheduler\n */\nexports.queue = new QueueScheduler_1.QueueScheduler(QueueAction_1.QueueAction);\n//# sourceMappingURL=queue.js.map",
-    "\"use strict\";\nvar root_1 = require('../util/root');\nfunction symbolIteratorPonyfill(root) {\n    var Symbol = root.Symbol;\n    if (typeof Symbol === 'function') {\n        if (!Symbol.iterator) {\n            Symbol.iterator = Symbol('iterator polyfill');\n        }\n        return Symbol.iterator;\n    }\n    else {\n        // [for Mozilla Gecko 27-35:](https://mzl.la/2ewE1zC)\n        var Set_1 = root.Set;\n        if (Set_1 && typeof new Set_1()['@@iterator'] === 'function') {\n            return '@@iterator';\n        }\n        var Map_1 = root.Map;\n        // required for compatability with es6-shim\n        if (Map_1) {\n            var keys = Object.getOwnPropertyNames(Map_1.prototype);\n            for (var i = 0; i < keys.length; ++i) {\n                var key = keys[i];\n                // according to spec, Map.prototype[@@iterator] and Map.orototype.entries must be equal.\n                if (key !== 'entries' && key !== 'size' && Map_1.prototype[key] === Map_1.prototype['entries']) {\n                    return key;\n                }\n            }\n        }\n        return '@@iterator';\n    }\n}\nexports.symbolIteratorPonyfill = symbolIteratorPonyfill;\nexports.$$iterator = symbolIteratorPonyfill(root_1.root);\n//# sourceMappingURL=iterator.js.map",
-    "\"use strict\";\nvar root_1 = require('../util/root');\nfunction getSymbolObservable(context) {\n    var $$observable;\n    var Symbol = context.Symbol;\n    if (typeof Symbol === 'function') {\n        if (Symbol.observable) {\n            $$observable = Symbol.observable;\n        }\n        else {\n            $$observable = Symbol('observable');\n            Symbol.observable = $$observable;\n        }\n    }\n    else {\n        $$observable = '@@observable';\n    }\n    return $$observable;\n}\nexports.getSymbolObservable = getSymbolObservable;\nexports.$$observable = getSymbolObservable(root_1.root);\n//# sourceMappingURL=observable.js.map",
-    "\"use strict\";\nvar root_1 = require('../util/root');\nvar Symbol = root_1.root.Symbol;\nexports.$$rxSubscriber = (typeof Symbol === 'function' && typeof Symbol.for === 'function') ?\n    Symbol.for('rxSubscriber') : '@@rxSubscriber';\n//# sourceMappingURL=rxSubscriber.js.map",
+    "\"use strict\";\nvar root_1 = require('../util/root');\nfunction symbolIteratorPonyfill(root) {\n    var Symbol = root.Symbol;\n    if (typeof Symbol === 'function') {\n        if (!Symbol.iterator) {\n            Symbol.iterator = Symbol('iterator polyfill');\n        }\n        return Symbol.iterator;\n    }\n    else {\n        // [for Mozilla Gecko 27-35:](https://mzl.la/2ewE1zC)\n        var Set_1 = root.Set;\n        if (Set_1 && typeof new Set_1()['@@iterator'] === 'function') {\n            return '@@iterator';\n        }\n        var Map_1 = root.Map;\n        // required for compatability with es6-shim\n        if (Map_1) {\n            var keys = Object.getOwnPropertyNames(Map_1.prototype);\n            for (var i = 0; i < keys.length; ++i) {\n                var key = keys[i];\n                // according to spec, Map.prototype[@@iterator] and Map.orototype.entries must be equal.\n                if (key !== 'entries' && key !== 'size' && Map_1.prototype[key] === Map_1.prototype['entries']) {\n                    return key;\n                }\n            }\n        }\n        return '@@iterator';\n    }\n}\nexports.symbolIteratorPonyfill = symbolIteratorPonyfill;\nexports.iterator = symbolIteratorPonyfill(root_1.root);\n/**\n * @deprecated use iterator instead\n */\nexports.$$iterator = exports.iterator;\n//# sourceMappingURL=iterator.js.map",
+    "\"use strict\";\nvar root_1 = require('../util/root');\nfunction getSymbolObservable(context) {\n    var $$observable;\n    var Symbol = context.Symbol;\n    if (typeof Symbol === 'function') {\n        if (Symbol.observable) {\n            $$observable = Symbol.observable;\n        }\n        else {\n            $$observable = Symbol('observable');\n            Symbol.observable = $$observable;\n        }\n    }\n    else {\n        $$observable = '@@observable';\n    }\n    return $$observable;\n}\nexports.getSymbolObservable = getSymbolObservable;\nexports.observable = getSymbolObservable(root_1.root);\n/**\n * @deprecated use observable instead\n */\nexports.$$observable = exports.observable;\n//# sourceMappingURL=observable.js.map",
+    "\"use strict\";\nvar root_1 = require('../util/root');\nvar Symbol = root_1.root.Symbol;\nexports.rxSubscriber = (typeof Symbol === 'function' && typeof Symbol.for === 'function') ?\n    Symbol.for('rxSubscriber') : '@@rxSubscriber';\n/**\n * @deprecated use rxSubscriber instead\n */\nexports.$$rxSubscriber = exports.rxSubscriber;\n//# sourceMappingURL=rxSubscriber.js.map",
     "\"use strict\";\nvar root_1 = require('./root');\nvar RequestAnimationFrameDefinition = (function () {\n    function RequestAnimationFrameDefinition(root) {\n        if (root.requestAnimationFrame) {\n            this.cancelAnimationFrame = root.cancelAnimationFrame.bind(root);\n            this.requestAnimationFrame = root.requestAnimationFrame.bind(root);\n        }\n        else if (root.mozRequestAnimationFrame) {\n            this.cancelAnimationFrame = root.mozCancelAnimationFrame.bind(root);\n            this.requestAnimationFrame = root.mozRequestAnimationFrame.bind(root);\n        }\n        else if (root.webkitRequestAnimationFrame) {\n            this.cancelAnimationFrame = root.webkitCancelAnimationFrame.bind(root);\n            this.requestAnimationFrame = root.webkitRequestAnimationFrame.bind(root);\n        }\n        else if (root.msRequestAnimationFrame) {\n            this.cancelAnimationFrame = root.msCancelAnimationFrame.bind(root);\n            this.requestAnimationFrame = root.msRequestAnimationFrame.bind(root);\n        }\n        else if (root.oRequestAnimationFrame) {\n            this.cancelAnimationFrame = root.oCancelAnimationFrame.bind(root);\n            this.requestAnimationFrame = root.oRequestAnimationFrame.bind(root);\n        }\n        else {\n            this.cancelAnimationFrame = root.clearTimeout.bind(root);\n            this.requestAnimationFrame = function (cb) { return root.setTimeout(cb, 1000 / 60); };\n        }\n    }\n    return RequestAnimationFrameDefinition;\n}());\nexports.RequestAnimationFrameDefinition = RequestAnimationFrameDefinition;\nexports.AnimationFrame = new RequestAnimationFrameDefinition(root_1.root);\n//# sourceMappingURL=AnimationFrame.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\n/**\n * An error thrown when an element was queried at a certain index of an\n * Observable, but no such index or position exists in that sequence.\n *\n * @see {@link elementAt}\n * @see {@link take}\n * @see {@link takeLast}\n *\n * @class ArgumentOutOfRangeError\n */\nvar ArgumentOutOfRangeError = (function (_super) {\n    __extends(ArgumentOutOfRangeError, _super);\n    function ArgumentOutOfRangeError() {\n        var err = _super.call(this, 'argument out of range');\n        this.name = err.name = 'ArgumentOutOfRangeError';\n        this.stack = err.stack;\n        this.message = err.message;\n    }\n    return ArgumentOutOfRangeError;\n}(Error));\nexports.ArgumentOutOfRangeError = ArgumentOutOfRangeError;\n//# sourceMappingURL=ArgumentOutOfRangeError.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\n/**\n * An error thrown when an Observable or a sequence was queried but has no\n * elements.\n *\n * @see {@link first}\n * @see {@link last}\n * @see {@link single}\n *\n * @class EmptyError\n */\nvar EmptyError = (function (_super) {\n    __extends(EmptyError, _super);\n    function EmptyError() {\n        var err = _super.call(this, 'no elements in sequence');\n        this.name = err.name = 'EmptyError';\n        this.stack = err.stack;\n        this.message = err.message;\n    }\n    return EmptyError;\n}(Error));\nexports.EmptyError = EmptyError;\n//# sourceMappingURL=EmptyError.js.map",
     "\"use strict\";\nvar root_1 = require('./root');\nvar RequestAnimationFrameDefinition = (function () {\n    function RequestAnimationFrameDefinition(root) {\n        if (root.requestAnimationFrame) {\n            this.cancelAnimationFrame = root.cancelAnimationFrame.bind(root);\n            this.requestAnimationFrame = root.requestAnimationFrame.bind(root);\n        }\n        else if (root.mozRequestAnimationFrame) {\n            this.cancelAnimationFrame = root.mozCancelAnimationFrame.bind(root);\n            this.requestAnimationFrame = root.mozRequestAnimationFrame.bind(root);\n        }\n        else if (root.webkitRequestAnimationFrame) {\n            this.cancelAnimationFrame = root.webkitCancelAnimationFrame.bind(root);\n            this.requestAnimationFrame = root.webkitRequestAnimationFrame.bind(root);\n        }\n        else if (root.msRequestAnimationFrame) {\n            this.cancelAnimationFrame = root.msCancelAnimationFrame.bind(root);\n            this.requestAnimationFrame = root.msRequestAnimationFrame.bind(root);\n        }\n        else if (root.oRequestAnimationFrame) {\n            this.cancelAnimationFrame = root.oCancelAnimationFrame.bind(root);\n            this.requestAnimationFrame = root.oRequestAnimationFrame.bind(root);\n        }\n        else {\n            this.cancelAnimationFrame = root.clearTimeout.bind(root);\n            this.requestAnimationFrame = function (cb) { return root.setTimeout(cb, 1000 / 60); };\n        }\n    }\n    return RequestAnimationFrameDefinition;\n}());\nexports.RequestAnimationFrameDefinition = RequestAnimationFrameDefinition;\nexports.AnimationFrame = new RequestAnimationFrameDefinition(root_1.root);\n//# sourceMappingURL=AnimationFrame.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\n/**\n * An error thrown when an element was queried at a certain index of an\n * Observable, but no such index or position exists in that sequence.\n *\n * @see {@link elementAt}\n * @see {@link take}\n * @see {@link takeLast}\n *\n * @class ArgumentOutOfRangeError\n */\nvar ArgumentOutOfRangeError = (function (_super) {\n    __extends(ArgumentOutOfRangeError, _super);\n    function ArgumentOutOfRangeError() {\n        var err = _super.call(this, 'argument out of range');\n        this.name = err.name = 'ArgumentOutOfRangeError';\n        this.stack = err.stack;\n        this.message = err.message;\n    }\n    return ArgumentOutOfRangeError;\n}(Error));\nexports.ArgumentOutOfRangeError = ArgumentOutOfRangeError;\n//# sourceMappingURL=ArgumentOutOfRangeError.js.map",
     "\"use strict\";\nvar __extends = (this && this.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\n/**\n * An error thrown when an Observable or a sequence was queried but has no\n * elements.\n *\n * @see {@link first}\n * @see {@link last}\n * @see {@link single}\n *\n * @class EmptyError\n */\nvar EmptyError = (function (_super) {\n    __extends(EmptyError, _super);\n    function EmptyError() {\n        var err = _super.call(this, 'no elements in sequence');\n        this.name = err.name = 'EmptyError';\n        this.stack = err.stack;\n        this.message = err.message;\n    }\n    return EmptyError;\n}(Error));\nexports.EmptyError = EmptyError;\n//# sourceMappingURL=EmptyError.js.map",
     "\"use strict\";\nfunction isObject(x) {\n    return x != null && typeof x === 'object';\n}\nexports.isObject = isObject;\n//# sourceMappingURL=isObject.js.map",
     "\"use strict\";\nfunction isPromise(value) {\n    return value && typeof value.subscribe !== 'function' && typeof value.then === 'function';\n}\nexports.isPromise = isPromise;\n//# sourceMappingURL=isPromise.js.map",
     "\"use strict\";\nfunction isScheduler(value) {\n    return value && typeof value.schedule === 'function';\n}\nexports.isScheduler = isScheduler;\n//# sourceMappingURL=isScheduler.js.map",
     "\"use strict\";\nfunction isObject(x) {\n    return x != null && typeof x === 'object';\n}\nexports.isObject = isObject;\n//# sourceMappingURL=isObject.js.map",
     "\"use strict\";\nfunction isPromise(value) {\n    return value && typeof value.subscribe !== 'function' && typeof value.then === 'function';\n}\nexports.isPromise = isPromise;\n//# sourceMappingURL=isPromise.js.map",
     "\"use strict\";\nfunction isScheduler(value) {\n    return value && typeof value.schedule === 'function';\n}\nexports.isScheduler = isScheduler;\n//# sourceMappingURL=isScheduler.js.map",
-    "\"use strict\";\n/**\n * window: browser in DOM main thread\n * self: browser in WebWorker\n * global: Node.js/other\n */\nexports.root = (typeof window == 'object' && window.window === window && window\n    || typeof self == 'object' && self.self === self && self\n    || typeof global == 'object' && global.global === global && global);\nif (!exports.root) {\n    throw new Error('RxJS could not find any global context (window, self, global)');\n}\n//# sourceMappingURL=root.js.map",
-    "\"use strict\";\nvar root_1 = require('./root');\nvar isArrayLike_1 = require('./isArrayLike');\nvar isPromise_1 = require('./isPromise');\nvar isObject_1 = require('./isObject');\nvar Observable_1 = require('../Observable');\nvar iterator_1 = require('../symbol/iterator');\nvar InnerSubscriber_1 = require('../InnerSubscriber');\nvar observable_1 = require('../symbol/observable');\nfunction subscribeToResult(outerSubscriber, result, outerValue, outerIndex) {\n    var destination = new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex);\n    if (destination.closed) {\n        return null;\n    }\n    if (result instanceof Observable_1.Observable) {\n        if (result._isScalar) {\n            destination.next(result.value);\n            destination.complete();\n            return null;\n        }\n        else {\n            return result.subscribe(destination);\n        }\n    }\n    else if (isArrayLike_1.isArrayLike(result)) {\n        for (var i = 0, len = result.length; i < len && !destination.closed; i++) {\n            destination.next(result[i]);\n        }\n        if (!destination.closed) {\n            destination.complete();\n        }\n    }\n    else if (isPromise_1.isPromise(result)) {\n        result.then(function (value) {\n            if (!destination.closed) {\n                destination.next(value);\n                destination.complete();\n            }\n        }, function (err) { return destination.error(err); })\n            .then(null, function (err) {\n            // Escaping the Promise trap: globally throw unhandled errors\n            root_1.root.setTimeout(function () { throw err; });\n        });\n        return destination;\n    }\n    else if (result && typeof result[iterator_1.$$iterator] === 'function') {\n        var iterator = result[iterator_1.$$iterator]();\n        do {\n            var item = iterator.next();\n            if (item.done) {\n                destination.complete();\n                break;\n            }\n            destination.next(item.value);\n            if (destination.closed) {\n                break;\n            }\n        } while (true);\n    }\n    else if (result && typeof result[observable_1.$$observable] === 'function') {\n        var obs = result[observable_1.$$observable]();\n        if (typeof obs.subscribe !== 'function') {\n            destination.error(new TypeError('Provided object does not correctly implement Symbol.observable'));\n        }\n        else {\n            return obs.subscribe(new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex));\n        }\n    }\n    else {\n        var value = isObject_1.isObject(result) ? 'an invalid object' : \"'\" + result + \"'\";\n        var msg = (\"You provided \" + value + \" where a stream was expected.\")\n            + ' You can provide an Observable, Promise, Array, or Iterable.';\n        destination.error(new TypeError(msg));\n    }\n    return null;\n}\nexports.subscribeToResult = subscribeToResult;\n//# sourceMappingURL=subscribeToResult.js.map",
-    "\"use strict\";\nvar Subscriber_1 = require('../Subscriber');\nvar rxSubscriber_1 = require('../symbol/rxSubscriber');\nvar Observer_1 = require('../Observer');\nfunction toSubscriber(nextOrObserver, error, complete) {\n    if (nextOrObserver) {\n        if (nextOrObserver instanceof Subscriber_1.Subscriber) {\n            return nextOrObserver;\n        }\n        if (nextOrObserver[rxSubscriber_1.$$rxSubscriber]) {\n            return nextOrObserver[rxSubscriber_1.$$rxSubscriber]();\n        }\n    }\n    if (!nextOrObserver && !error && !complete) {\n        return new Subscriber_1.Subscriber(Observer_1.empty);\n    }\n    return new Subscriber_1.Subscriber(nextOrObserver, error, complete);\n}\nexports.toSubscriber = toSubscriber;\n//# sourceMappingURL=toSubscriber.js.map",
+    "\"use strict\";\n// CommonJS / Node have global context exposed as \"global\" variable.\n// We don't want to include the whole node.d.ts this this compilation unit so we'll just fake\n// the global \"global\" var for now.\nvar __window = typeof window !== 'undefined' && window;\nvar __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&\n    self instanceof WorkerGlobalScope && self;\nvar __global = typeof global !== 'undefined' && global;\nvar _root = __window || __global || __self;\nexports.root = _root;\n// Workaround Closure Compiler restriction: The body of a goog.module cannot use throw.\n// This is needed when used with angular/tsickle which inserts a goog.module statement.\n// Wrap in IIFE\n(function () {\n    if (!_root) {\n        throw new Error('RxJS could not find any global context (window, self, global)');\n    }\n})();\n//# sourceMappingURL=root.js.map",
+    "\"use strict\";\nvar root_1 = require('./root');\nvar isArrayLike_1 = require('./isArrayLike');\nvar isPromise_1 = require('./isPromise');\nvar isObject_1 = require('./isObject');\nvar Observable_1 = require('../Observable');\nvar iterator_1 = require('../symbol/iterator');\nvar InnerSubscriber_1 = require('../InnerSubscriber');\nvar observable_1 = require('../symbol/observable');\nfunction subscribeToResult(outerSubscriber, result, outerValue, outerIndex) {\n    var destination = new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex);\n    if (destination.closed) {\n        return null;\n    }\n    if (result instanceof Observable_1.Observable) {\n        if (result._isScalar) {\n            destination.next(result.value);\n            destination.complete();\n            return null;\n        }\n        else {\n            return result.subscribe(destination);\n        }\n    }\n    else if (isArrayLike_1.isArrayLike(result)) {\n        for (var i = 0, len = result.length; i < len && !destination.closed; i++) {\n            destination.next(result[i]);\n        }\n        if (!destination.closed) {\n            destination.complete();\n        }\n    }\n    else if (isPromise_1.isPromise(result)) {\n        result.then(function (value) {\n            if (!destination.closed) {\n                destination.next(value);\n                destination.complete();\n            }\n        }, function (err) { return destination.error(err); })\n            .then(null, function (err) {\n            // Escaping the Promise trap: globally throw unhandled errors\n            root_1.root.setTimeout(function () { throw err; });\n        });\n        return destination;\n    }\n    else if (result && typeof result[iterator_1.iterator] === 'function') {\n        var iterator = result[iterator_1.iterator]();\n        do {\n            var item = iterator.next();\n            if (item.done) {\n                destination.complete();\n                break;\n            }\n            destination.next(item.value);\n            if (destination.closed) {\n                break;\n            }\n        } while (true);\n    }\n    else if (result && typeof result[observable_1.observable] === 'function') {\n        var obs = result[observable_1.observable]();\n        if (typeof obs.subscribe !== 'function') {\n            destination.error(new TypeError('Provided object does not correctly implement Symbol.observable'));\n        }\n        else {\n            return obs.subscribe(new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex));\n        }\n    }\n    else {\n        var value = isObject_1.isObject(result) ? 'an invalid object' : \"'\" + result + \"'\";\n        var msg = (\"You provided \" + value + \" where a stream was expected.\")\n            + ' You can provide an Observable, Promise, Array, or Iterable.';\n        destination.error(new TypeError(msg));\n    }\n    return null;\n}\nexports.subscribeToResult = subscribeToResult;\n//# sourceMappingURL=subscribeToResult.js.map",
+    "\"use strict\";\nvar Subscriber_1 = require('../Subscriber');\nvar rxSubscriber_1 = require('../symbol/rxSubscriber');\nvar Observer_1 = require('../Observer');\nfunction toSubscriber(nextOrObserver, error, complete) {\n    if (nextOrObserver) {\n        if (nextOrObserver instanceof Subscriber_1.Subscriber) {\n            return nextOrObserver;\n        }\n        if (nextOrObserver[rxSubscriber_1.rxSubscriber]) {\n            return nextOrObserver[rxSubscriber_1.rxSubscriber]();\n        }\n    }\n    if (!nextOrObserver && !error && !complete) {\n        return new Subscriber_1.Subscriber(Observer_1.empty);\n    }\n    return new Subscriber_1.Subscriber(nextOrObserver, error, complete);\n}\nexports.toSubscriber = toSubscriber;\n//# sourceMappingURL=toSubscriber.js.map",
     "\"use strict\";\nvar errorObject_1 = require('./errorObject');\nvar tryCatchTarget;\nfunction tryCatcher() {\n    try {\n        return tryCatchTarget.apply(this, arguments);\n    }\n    catch (e) {\n        errorObject_1.errorObject.e = e;\n        return errorObject_1.errorObject;\n    }\n}\nfunction tryCatch(fn) {\n    tryCatchTarget = fn;\n    return tryCatcher;\n}\nexports.tryCatch = tryCatch;\n;\n//# sourceMappingURL=tryCatch.js.map",
     "// threejs.org/license\n(function(l,oa){\"object\"===typeof exports&&\"undefined\"!==typeof module?oa(exports):\"function\"===typeof define&&define.amd?define([\"exports\"],oa):oa(l.THREE=l.THREE||{})})(this,function(l){function oa(){}function C(a,b){this.x=a||0;this.y=b||0}function ea(a,b,c,d,e,f,g,h,k,m){Object.defineProperty(this,\"id\",{value:Oe++});this.uuid=Q.generateUUID();this.name=\"\";this.image=void 0!==a?a:ea.DEFAULT_IMAGE;this.mipmaps=[];this.mapping=void 0!==b?b:ea.DEFAULT_MAPPING;this.wrapS=void 0!==c?c:1001;this.wrapT=\nvoid 0!==d?d:1001;this.magFilter=void 0!==e?e:1006;this.minFilter=void 0!==f?f:1008;this.anisotropy=void 0!==k?k:1;this.format=void 0!==g?g:1023;this.type=void 0!==h?h:1009;this.offset=new C(0,0);this.repeat=new C(1,1);this.generateMipmaps=!0;this.premultiplyAlpha=!1;this.flipY=!0;this.unpackAlignment=4;this.encoding=void 0!==m?m:3E3;this.version=0;this.onUpdate=null}function ga(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1}function Db(a,b,c){this.uuid=Q.generateUUID();this.width=\na;this.height=b;this.scissor=new ga(0,0,a,b);this.scissorTest=!1;this.viewport=new ga(0,0,a,b);c=c||{};void 0===c.minFilter&&(c.minFilter=1006);this.texture=new ea(void 0,void 0,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy,c.encoding);this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.depthTexture=void 0!==c.depthTexture?c.depthTexture:null}function Eb(a,b,c){Db.call(this,a,b,c);this.activeMipMapLevel=\nthis.activeCubeFace=0}function da(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._w=void 0!==d?d:1}function q(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}function H(){this.elements=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);0<arguments.length&&console.error(\"THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.\")}function Za(a,b,c,d,e,f,g,h,k,m){a=void 0!==a?a:[];ea.call(this,a,void 0!==b?b:301,c,d,e,f,g,h,k,m);this.flipY=!1}function Fb(a,b,c){var d=a[0];if(0>=\nd||0<d)return a;var e=b*c,f=pe[e];void 0===f&&(f=new Float32Array(e),pe[e]=f);if(0!==b)for(d.toArray(f,0),d=1,e=0;d!==b;++d)e+=c,a[d].toArray(f,e);return f}function qe(a,b){var c=re[b];void 0===c&&(c=new Int32Array(b),re[b]=c);for(var d=0;d!==b;++d)c[d]=a.allocTextureUnit();return c}function Pe(a,b){a.uniform1f(this.addr,b)}function Qe(a,b){a.uniform1i(this.addr,b)}function Re(a,b){void 0===b.x?a.uniform2fv(this.addr,b):a.uniform2f(this.addr,b.x,b.y)}function Se(a,b){void 0!==b.x?a.uniform3f(this.addr,\nb.x,b.y,b.z):void 0!==b.r?a.uniform3f(this.addr,b.r,b.g,b.b):a.uniform3fv(this.addr,b)}function Te(a,b){void 0===b.x?a.uniform4fv(this.addr,b):a.uniform4f(this.addr,b.x,b.y,b.z,b.w)}function Ue(a,b){a.uniformMatrix2fv(this.addr,!1,b.elements||b)}function Ve(a,b){a.uniformMatrix3fv(this.addr,!1,b.elements||b)}function We(a,b){a.uniformMatrix4fv(this.addr,!1,b.elements||b)}function Xe(a,b,c){var d=c.allocTextureUnit();a.uniform1i(this.addr,d);c.setTexture2D(b||se,d)}function Ye(a,b,c){var d=c.allocTextureUnit();\na.uniform1i(this.addr,d);c.setTextureCube(b||te,d)}function ue(a,b){a.uniform2iv(this.addr,b)}function ve(a,b){a.uniform3iv(this.addr,b)}function we(a,b){a.uniform4iv(this.addr,b)}function Ze(a){switch(a){case 5126:return Pe;case 35664:return Re;case 35665:return Se;case 35666:return Te;case 35674:return Ue;case 35675:return Ve;case 35676:return We;case 35678:return Xe;case 35680:return Ye;case 5124:case 35670:return Qe;case 35667:case 35671:return ue;case 35668:case 35672:return ve;case 35669:case 35673:return we}}\nfunction $e(a,b){a.uniform1fv(this.addr,b)}function af(a,b){a.uniform1iv(this.addr,b)}function bf(a,b){a.uniform2fv(this.addr,Fb(b,this.size,2))}function cf(a,b){a.uniform3fv(this.addr,Fb(b,this.size,3))}function df(a,b){a.uniform4fv(this.addr,Fb(b,this.size,4))}function ef(a,b){a.uniformMatrix2fv(this.addr,!1,Fb(b,this.size,4))}function ff(a,b){a.uniformMatrix3fv(this.addr,!1,Fb(b,this.size,9))}function gf(a,b){a.uniformMatrix4fv(this.addr,!1,Fb(b,this.size,16))}function hf(a,b,c){var d=b.length,\ne=qe(c,d);a.uniform1iv(this.addr,e);for(a=0;a!==d;++a)c.setTexture2D(b[a]||se,e[a])}function jf(a,b,c){var d=b.length,e=qe(c,d);a.uniform1iv(this.addr,e);for(a=0;a!==d;++a)c.setTextureCube(b[a]||te,e[a])}function kf(a){switch(a){case 5126:return $e;case 35664:return bf;case 35665:return cf;case 35666:return df;case 35674:return ef;case 35675:return ff;case 35676:return gf;case 35678:return hf;case 35680:return jf;case 5124:case 35670:return af;case 35667:case 35671:return ue;case 35668:case 35672:return ve;\ncase 35669:case 35673:return we}}function lf(a,b,c){this.id=a;this.addr=c;this.setValue=Ze(b.type)}function mf(a,b,c){this.id=a;this.addr=c;this.size=b.size;this.setValue=kf(b.type)}function xe(a){this.id=a;this.seq=[];this.map={}}function $a(a,b,c){this.seq=[];this.map={};this.renderer=c;c=a.getProgramParameter(b,a.ACTIVE_UNIFORMS);for(var d=0;d!==c;++d){var e=a.getActiveUniform(b,d),f=a.getUniformLocation(b,e.name),g=this,h=e.name,k=h.length;for(Id.lastIndex=0;;){var m=Id.exec(h),x=Id.lastIndex,\np=m[1],n=m[3];\"]\"===m[2]&&(p|=0);if(void 0===n||\"[\"===n&&x+2===k){h=g;e=void 0===n?new lf(p,e,f):new mf(p,e,f);h.seq.push(e);h.map[e.id]=e;break}else n=g.map[p],void 0===n&&(n=new xe(p),p=g,g=n,p.seq.push(g),p.map[g.id]=g),g=n}}}function N(a,b,c){return void 0===b&&void 0===c?this.set(a):this.setRGB(a,b,c)}function db(a,b,c,d,e,f,g,h,k,m,x,p){ea.call(this,null,f,g,h,k,m,d,e,x,p);this.image={data:a,width:b,height:c};this.magFilter=void 0!==k?k:1003;this.minFilter=void 0!==m?m:1003;this.flipY=this.generateMipmaps=\n!1;this.unpackAlignment=1}function pc(a,b){this.min=void 0!==a?a:new C(Infinity,Infinity);this.max=void 0!==b?b:new C(-Infinity,-Infinity)}function nf(a,b){var c,d,e,f,g,h,k,m,x,p,n=a.context,r=a.state,w,l,F,t,v,M;this.render=function(z,A,I){if(0!==b.length){z=new q;var E=I.w/I.z,K=.5*I.z,la=.5*I.w,J=16/I.w,ca=new C(J*E,J),Da=new q(1,1,0),eb=new C(1,1),Na=new pc;Na.min.set(I.x,I.y);Na.max.set(I.x+(I.z-16),I.y+(I.w-16));if(void 0===t){var J=new Float32Array([-1,-1,0,0,1,-1,1,0,1,1,1,1,-1,1,0,1]),O=\nnew Uint16Array([0,1,2,0,2,3]);w=n.createBuffer();l=n.createBuffer();n.bindBuffer(n.ARRAY_BUFFER,w);n.bufferData(n.ARRAY_BUFFER,J,n.STATIC_DRAW);n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,l);n.bufferData(n.ELEMENT_ARRAY_BUFFER,O,n.STATIC_DRAW);v=n.createTexture();M=n.createTexture();r.bindTexture(n.TEXTURE_2D,v);n.texImage2D(n.TEXTURE_2D,0,n.RGB,16,16,0,n.RGB,n.UNSIGNED_BYTE,null);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE);\nn.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST);r.bindTexture(n.TEXTURE_2D,M);n.texImage2D(n.TEXTURE_2D,0,n.RGBA,16,16,0,n.RGBA,n.UNSIGNED_BYTE,null);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST);var J=F={vertexShader:\"uniform lowp int renderType;\\nuniform vec3 screenPosition;\\nuniform vec2 scale;\\nuniform float rotation;\\nuniform sampler2D occlusionMap;\\nattribute vec2 position;\\nattribute vec2 uv;\\nvarying vec2 vUV;\\nvarying float vVisibility;\\nvoid main() {\\nvUV = uv;\\nvec2 pos = position;\\nif ( renderType == 2 ) {\\nvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );\\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );\\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );\\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );\\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );\\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );\\nvisibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );\\nvisibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );\\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );\\nvVisibility =        visibility.r / 9.0;\\nvVisibility *= 1.0 - visibility.g / 9.0;\\nvVisibility *=       visibility.b / 9.0;\\nvVisibility *= 1.0 - visibility.a / 9.0;\\npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\\npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\\n}\\ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\\n}\",\nfragmentShader:\"uniform lowp int renderType;\\nuniform sampler2D map;\\nuniform float opacity;\\nuniform vec3 color;\\nvarying vec2 vUV;\\nvarying float vVisibility;\\nvoid main() {\\nif ( renderType == 0 ) {\\ngl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );\\n} else if ( renderType == 1 ) {\\ngl_FragColor = texture2D( map, vUV );\\n} else {\\nvec4 texture = texture2D( map, vUV );\\ntexture.a *= opacity * vVisibility;\\ngl_FragColor = texture;\\ngl_FragColor.rgb *= color;\\n}\\n}\"},O=n.createProgram(),P=n.createShader(n.FRAGMENT_SHADER),\nR=n.createShader(n.VERTEX_SHADER),T=\"precision \"+a.getPrecision()+\" float;\\n\";n.shaderSource(P,T+J.fragmentShader);n.shaderSource(R,T+J.vertexShader);n.compileShader(P);n.compileShader(R);n.attachShader(O,P);n.attachShader(O,R);n.linkProgram(O);t=O;x=n.getAttribLocation(t,\"position\");p=n.getAttribLocation(t,\"uv\");c=n.getUniformLocation(t,\"renderType\");d=n.getUniformLocation(t,\"map\");e=n.getUniformLocation(t,\"occlusionMap\");f=n.getUniformLocation(t,\"opacity\");g=n.getUniformLocation(t,\"color\");h=n.getUniformLocation(t,\n\"scale\");k=n.getUniformLocation(t,\"rotation\");m=n.getUniformLocation(t,\"screenPosition\")}n.useProgram(t);r.initAttributes();r.enableAttribute(x);r.enableAttribute(p);r.disableUnusedAttributes();n.uniform1i(e,0);n.uniform1i(d,1);n.bindBuffer(n.ARRAY_BUFFER,w);n.vertexAttribPointer(x,2,n.FLOAT,!1,16,0);n.vertexAttribPointer(p,2,n.FLOAT,!1,16,8);n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,l);r.disable(n.CULL_FACE);r.setDepthWrite(!1);O=0;for(P=b.length;O<P;O++)if(J=16/I.w,ca.set(J*E,J),R=b[O],z.set(R.matrixWorld.elements[12],\nR.matrixWorld.elements[13],R.matrixWorld.elements[14]),z.applyMatrix4(A.matrixWorldInverse),z.applyProjection(A.projectionMatrix),Da.copy(z),eb.x=I.x+Da.x*K+K-8,eb.y=I.y+Da.y*la+la-8,!0===Na.containsPoint(eb)){r.activeTexture(n.TEXTURE0);r.bindTexture(n.TEXTURE_2D,null);r.activeTexture(n.TEXTURE1);r.bindTexture(n.TEXTURE_2D,v);n.copyTexImage2D(n.TEXTURE_2D,0,n.RGB,eb.x,eb.y,16,16,0);n.uniform1i(c,0);n.uniform2f(h,ca.x,ca.y);n.uniform3f(m,Da.x,Da.y,Da.z);r.disable(n.BLEND);r.enable(n.DEPTH_TEST);n.drawElements(n.TRIANGLES,\n6,n.UNSIGNED_SHORT,0);r.activeTexture(n.TEXTURE0);r.bindTexture(n.TEXTURE_2D,M);n.copyTexImage2D(n.TEXTURE_2D,0,n.RGBA,eb.x,eb.y,16,16,0);n.uniform1i(c,1);r.disable(n.DEPTH_TEST);r.activeTexture(n.TEXTURE1);r.bindTexture(n.TEXTURE_2D,v);n.drawElements(n.TRIANGLES,6,n.UNSIGNED_SHORT,0);R.positionScreen.copy(Da);R.customUpdateCallback?R.customUpdateCallback(R):R.updateLensFlares();n.uniform1i(c,2);r.enable(n.BLEND);for(var T=0,y=R.lensFlares.length;T<y;T++){var V=R.lensFlares[T];.001<V.opacity&&.001<\nV.scale&&(Da.x=V.x,Da.y=V.y,Da.z=V.z,J=V.size*V.scale/I.w,ca.x=J*E,ca.y=J,n.uniform3f(m,Da.x,Da.y,Da.z),n.uniform2f(h,ca.x,ca.y),n.uniform1f(k,V.rotation),n.uniform1f(f,V.opacity),n.uniform3f(g,V.color.r,V.color.g,V.color.b),r.setBlending(V.blending,V.blendEquation,V.blendSrc,V.blendDst),a.setTexture2D(V.texture,1),n.drawElements(n.TRIANGLES,6,n.UNSIGNED_SHORT,0))}}r.enable(n.CULL_FACE);r.enable(n.DEPTH_TEST);r.setDepthWrite(!0);a.resetGLState()}}}function of(a,b){var c,d,e,f,g,h,k,m,x,p,n,r,w,l,\nF,t,v;function M(a,b){return a.renderOrder!==b.renderOrder?a.renderOrder-b.renderOrder:a.z!==b.z?b.z-a.z:b.id-a.id}var z=a.context,A=a.state,I,E,K,la,J=new q,ca=new da,Da=new q;this.render=function(q,Na){if(0!==b.length){if(void 0===K){var O=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]),P=new Uint16Array([0,1,2,0,2,3]);I=z.createBuffer();E=z.createBuffer();z.bindBuffer(z.ARRAY_BUFFER,I);z.bufferData(z.ARRAY_BUFFER,O,z.STATIC_DRAW);z.bindBuffer(z.ELEMENT_ARRAY_BUFFER,E);z.bufferData(z.ELEMENT_ARRAY_BUFFER,\nP,z.STATIC_DRAW);var O=z.createProgram(),P=z.createShader(z.VERTEX_SHADER),R=z.createShader(z.FRAGMENT_SHADER);z.shaderSource(P,[\"precision \"+a.getPrecision()+\" float;\",\"uniform mat4 modelViewMatrix;\\nuniform mat4 projectionMatrix;\\nuniform float rotation;\\nuniform vec2 scale;\\nuniform vec2 uvOffset;\\nuniform vec2 uvScale;\\nattribute vec2 position;\\nattribute vec2 uv;\\nvarying vec2 vUV;\\nvoid main() {\\nvUV = uvOffset + uv * uvScale;\\nvec2 alignedPosition = position * scale;\\nvec2 rotatedPosition;\\nrotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\nrotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\nvec4 finalPosition;\\nfinalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\nfinalPosition.xy += rotatedPosition;\\nfinalPosition = projectionMatrix * finalPosition;\\ngl_Position = finalPosition;\\n}\"].join(\"\\n\"));\nz.shaderSource(R,[\"precision \"+a.getPrecision()+\" float;\",\"uniform vec3 color;\\nuniform sampler2D map;\\nuniform float opacity;\\nuniform int fogType;\\nuniform vec3 fogColor;\\nuniform float fogDensity;\\nuniform float fogNear;\\nuniform float fogFar;\\nuniform float alphaTest;\\nvarying vec2 vUV;\\nvoid main() {\\nvec4 texture = texture2D( map, vUV );\\nif ( texture.a < alphaTest ) discard;\\ngl_FragColor = vec4( color * texture.xyz, texture.a * opacity );\\nif ( fogType > 0 ) {\\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\\nfloat fogFactor = 0.0;\\nif ( fogType == 1 ) {\\nfogFactor = smoothstep( fogNear, fogFar, depth );\\n} else {\\nconst float LOG2 = 1.442695;\\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\\n}\\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\\n}\\n}\"].join(\"\\n\"));\nz.compileShader(P);z.compileShader(R);z.attachShader(O,P);z.attachShader(O,R);z.linkProgram(O);K=O;t=z.getAttribLocation(K,\"position\");v=z.getAttribLocation(K,\"uv\");c=z.getUniformLocation(K,\"uvOffset\");d=z.getUniformLocation(K,\"uvScale\");e=z.getUniformLocation(K,\"rotation\");f=z.getUniformLocation(K,\"scale\");g=z.getUniformLocation(K,\"color\");h=z.getUniformLocation(K,\"map\");k=z.getUniformLocation(K,\"opacity\");m=z.getUniformLocation(K,\"modelViewMatrix\");x=z.getUniformLocation(K,\"projectionMatrix\");p=\nz.getUniformLocation(K,\"fogType\");n=z.getUniformLocation(K,\"fogDensity\");r=z.getUniformLocation(K,\"fogNear\");w=z.getUniformLocation(K,\"fogFar\");l=z.getUniformLocation(K,\"fogColor\");F=z.getUniformLocation(K,\"alphaTest\");O=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\");O.width=8;O.height=8;P=O.getContext(\"2d\");P.fillStyle=\"white\";P.fillRect(0,0,8,8);la=new ea(O);la.needsUpdate=!0}z.useProgram(K);A.initAttributes();A.enableAttribute(t);A.enableAttribute(v);A.disableUnusedAttributes();\nA.disable(z.CULL_FACE);A.enable(z.BLEND);z.bindBuffer(z.ARRAY_BUFFER,I);z.vertexAttribPointer(t,2,z.FLOAT,!1,16,0);z.vertexAttribPointer(v,2,z.FLOAT,!1,16,8);z.bindBuffer(z.ELEMENT_ARRAY_BUFFER,E);z.uniformMatrix4fv(x,!1,Na.projectionMatrix.elements);A.activeTexture(z.TEXTURE0);z.uniform1i(h,0);P=O=0;(R=q.fog)?(z.uniform3f(l,R.color.r,R.color.g,R.color.b),R.isFog?(z.uniform1f(r,R.near),z.uniform1f(w,R.far),z.uniform1i(p,1),P=O=1):R.isFogExp2&&(z.uniform1f(n,R.density),z.uniform1i(p,2),P=O=2)):(z.uniform1i(p,\n0),P=O=0);for(var R=0,T=b.length;R<T;R++){var y=b[R];y.modelViewMatrix.multiplyMatrices(Na.matrixWorldInverse,y.matrixWorld);y.z=-y.modelViewMatrix.elements[14]}b.sort(M);for(var V=[],R=0,T=b.length;R<T;R++){var y=b[R],ra=y.material;!1!==ra.visible&&(z.uniform1f(F,ra.alphaTest),z.uniformMatrix4fv(m,!1,y.modelViewMatrix.elements),y.matrixWorld.decompose(J,ca,Da),V[0]=Da.x,V[1]=Da.y,y=0,q.fog&&ra.fog&&(y=P),O!==y&&(z.uniform1i(p,y),O=y),null!==ra.map?(z.uniform2f(c,ra.map.offset.x,ra.map.offset.y),\nz.uniform2f(d,ra.map.repeat.x,ra.map.repeat.y)):(z.uniform2f(c,0,0),z.uniform2f(d,1,1)),z.uniform1f(k,ra.opacity),z.uniform3f(g,ra.color.r,ra.color.g,ra.color.b),z.uniform1f(e,ra.rotation),z.uniform2fv(f,V),A.setBlending(ra.blending,ra.blendEquation,ra.blendSrc,ra.blendDst),A.setDepthTest(ra.depthTest),A.setDepthWrite(ra.depthWrite),ra.map?a.setTexture2D(ra.map,0):a.setTexture2D(la,0),z.drawElements(z.TRIANGLES,6,z.UNSIGNED_SHORT,0))}A.enable(z.CULL_FACE);a.resetGLState()}}}function W(){Object.defineProperty(this,\n\"id\",{value:pf++});this.uuid=Q.generateUUID();this.name=\"\";this.type=\"Material\";this.lights=this.fog=!0;this.blending=1;this.side=0;this.shading=2;this.vertexColors=0;this.opacity=1;this.transparent=!1;this.blendSrc=204;this.blendDst=205;this.blendEquation=100;this.blendEquationAlpha=this.blendDstAlpha=this.blendSrcAlpha=null;this.depthFunc=3;this.depthWrite=this.depthTest=!0;this.clippingPlanes=null;this.clipShadows=this.clipIntersection=!1;this.colorWrite=!0;this.precision=null;this.polygonOffset=\n!1;this.alphaTest=this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.premultipliedAlpha=!1;this.overdraw=0;this._needsUpdate=this.visible=!0}function Ia(a){W.call(this);this.type=\"ShaderMaterial\";this.defines={};this.uniforms={};this.vertexShader=\"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";this.fragmentShader=\"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";this.linewidth=1;this.wireframe=!1;this.wireframeLinewidth=1;this.morphNormals=\nthis.morphTargets=this.skinning=this.clipping=this.lights=this.fog=!1;this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1};this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]};this.index0AttributeName=void 0;void 0!==a&&(void 0!==a.attributes&&console.error(\"THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.\"),this.setValues(a))}function ab(a){W.call(this);this.type=\"MeshDepthMaterial\";this.depthPacking=3200;this.morphTargets=\nthis.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.lights=this.fog=!1;this.setValues(a)}function ya(a,b){this.min=void 0!==a?a:new q(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new q(-Infinity,-Infinity,-Infinity)}function Fa(a,b){this.center=void 0!==a?a:new q;this.radius=void 0!==b?b:0}function za(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]);0<arguments.length&&console.error(\"THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.\")}\nfunction ma(a,b){this.normal=void 0!==a?a:new q(1,0,0);this.constant=void 0!==b?b:0}function qc(a,b,c,d,e,f){this.planes=[void 0!==a?a:new ma,void 0!==b?b:new ma,void 0!==c?c:new ma,void 0!==d?d:new ma,void 0!==e?e:new ma,void 0!==f?f:new ma]}function ye(a,b,c,d){function e(b,c,d,e){var f=b.geometry,g;g=F;var h=b.customDepthMaterial;d&&(g=t,h=b.customDistanceMaterial);h?g=h:(h=!1,c.morphTargets&&(f&&f.isBufferGeometry?h=f.morphAttributes&&f.morphAttributes.position&&0<f.morphAttributes.position.length:\nf&&f.isGeometry&&(h=f.morphTargets&&0<f.morphTargets.length)),b=b.isSkinnedMesh&&c.skinning,f=0,h&&(f|=1),b&&(f|=2),g=g[f]);a.localClippingEnabled&&!0===c.clipShadows&&0!==c.clippingPlanes.length&&(f=g.uuid,h=c.uuid,b=v[f],void 0===b&&(b={},v[f]=b),f=b[h],void 0===f&&(f=g.clone(),b[h]=f),g=f);g.visible=c.visible;g.wireframe=c.wireframe;h=c.side;ca.renderSingleSided&&2==h&&(h=0);ca.renderReverseSided&&(0===h?h=1:1===h&&(h=0));g.side=h;g.clipShadows=c.clipShadows;g.clippingPlanes=c.clippingPlanes;g.wireframeLinewidth=\nc.wireframeLinewidth;g.linewidth=c.linewidth;d&&void 0!==g.uniforms.lightPos&&g.uniforms.lightPos.value.copy(e);return g}function f(a,b,c){if(!1!==a.visible){0!==(a.layers.mask&b.layers.mask)&&(a.isMesh||a.isLine||a.isPoints)&&a.castShadow&&(!1===a.frustumCulled||!0===k.intersectsObject(a))&&!0===a.material.visible&&(a.modelViewMatrix.multiplyMatrices(c.matrixWorldInverse,a.matrixWorld),l.push(a));a=a.children;for(var d=0,e=a.length;d<e;d++)f(a[d],b,c)}}var g=a.context,h=a.state,k=new qc,m=new H,\nx=b.shadows,p=new C,n=new C(d.maxTextureSize,d.maxTextureSize),r=new q,w=new q,l=[],F=Array(4),t=Array(4),v={},M=[new q(1,0,0),new q(-1,0,0),new q(0,0,1),new q(0,0,-1),new q(0,1,0),new q(0,-1,0)],z=[new q(0,1,0),new q(0,1,0),new q(0,1,0),new q(0,1,0),new q(0,0,1),new q(0,0,-1)],A=[new ga,new ga,new ga,new ga,new ga,new ga];b=new ab;b.depthPacking=3201;b.clipping=!0;d=Gb.distanceRGBA;for(var I=Ja.clone(d.uniforms),E=0;4!==E;++E){var K=0!==(E&1),la=0!==(E&2),J=b.clone();J.morphTargets=K;J.skinning=\nla;F[E]=J;K=new Ia({defines:{USE_SHADOWMAP:\"\"},uniforms:I,vertexShader:d.vertexShader,fragmentShader:d.fragmentShader,morphTargets:K,skinning:la,clipping:!0});t[E]=K}var ca=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=1;this.renderSingleSided=this.renderReverseSided=!0;this.render=function(b,d){if(!1!==ca.enabled&&(!1!==ca.autoUpdate||!1!==ca.needsUpdate)&&0!==x.length){h.buffers.color.setClear(1,1,1,1);h.disable(g.BLEND);h.setDepthTest(!0);h.setScissorTest(!1);for(var v,\nq,t=0,F=x.length;t<F;t++){var I=x[t],E=I.shadow;if(void 0===E)console.warn(\"THREE.WebGLShadowMap:\",I,\"has no shadow.\");else{var K=E.camera;p.copy(E.mapSize);p.min(n);if(I&&I.isPointLight){v=6;q=!0;var J=p.x,la=p.y;A[0].set(2*J,la,J,la);A[1].set(0,la,J,la);A[2].set(3*J,la,J,la);A[3].set(J,la,J,la);A[4].set(3*J,0,J,la);A[5].set(J,0,J,la);p.x*=4;p.y*=2}else v=1,q=!1;null===E.map&&(E.map=new Db(p.x,p.y,{minFilter:1003,magFilter:1003,format:1023}),K.updateProjectionMatrix());E.isSpotLightShadow&&E.update(I);\nE&&E.isRectAreaLightShadow&&E.update(I);J=E.map;E=E.matrix;w.setFromMatrixPosition(I.matrixWorld);K.position.copy(w);a.setRenderTarget(J);a.clear();for(J=0;J<v;J++){q?(r.copy(K.position),r.add(M[J]),K.up.copy(z[J]),K.lookAt(r),h.viewport(A[J])):(r.setFromMatrixPosition(I.target.matrixWorld),K.lookAt(r));K.updateMatrixWorld();K.matrixWorldInverse.getInverse(K.matrixWorld);E.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);E.multiply(K.projectionMatrix);E.multiply(K.matrixWorldInverse);m.multiplyMatrices(K.projectionMatrix,\nK.matrixWorldInverse);k.setFromMatrix(m);l.length=0;f(b,d,K);for(var la=0,y=l.length;la<y;la++){var C=l[la],Jd=c.update(C),Ta=C.material;if(Ta&&Ta.isMultiMaterial)for(var G=Jd.groups,Ta=Ta.materials,D=0,Ga=G.length;D<Ga;D++){var N=G[D],H=Ta[N.materialIndex];!0===H.visible&&(H=e(C,H,q,w),a.renderBufferDirect(K,null,Jd,H,C,N))}else H=e(C,Ta,q,w),a.renderBufferDirect(K,null,Jd,H,C,null)}}}}v=a.getClearColor();q=a.getClearAlpha();a.setClearColor(v,q);ca.needsUpdate=!1}}}function bb(a,b){this.origin=void 0!==\na?a:new q;this.direction=void 0!==b?b:new q}function cb(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._order=d||cb.DefaultOrder}function gd(){this.mask=1}function G(){Object.defineProperty(this,\"id\",{value:qf++});this.uuid=Q.generateUUID();this.name=\"\";this.type=\"Object3D\";this.parent=null;this.children=[];this.up=G.DefaultUp.clone();var a=new q,b=new cb,c=new da,d=new q(1,1,1);b.onChange(function(){c.setFromEuler(b,!1)});c.onChange(function(){b.setFromQuaternion(c,void 0,!1)});Object.defineProperties(this,\n{position:{enumerable:!0,value:a},rotation:{enumerable:!0,value:b},quaternion:{enumerable:!0,value:c},scale:{enumerable:!0,value:d},modelViewMatrix:{value:new H},normalMatrix:{value:new za}});this.matrix=new H;this.matrixWorld=new H;this.matrixAutoUpdate=G.DefaultMatrixAutoUpdate;this.matrixWorldNeedsUpdate=!1;this.layers=new gd;this.visible=!0;this.receiveShadow=this.castShadow=!1;this.frustumCulled=!0;this.renderOrder=0;this.userData={};this.onBeforeRender=function(){};this.onAfterRender=function(){}}\nfunction gb(a,b){this.start=void 0!==a?a:new q;this.end=void 0!==b?b:new q}function Aa(a,b,c){this.a=void 0!==a?a:new q;this.b=void 0!==b?b:new q;this.c=void 0!==c?c:new q}function ha(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d&&d.isVector3?d:new q;this.vertexNormals=Array.isArray(d)?d:[];this.color=e&&e.isColor?e:new N;this.vertexColors=Array.isArray(e)?e:[];this.materialIndex=void 0!==f?f:0}function Ka(a){W.call(this);this.type=\"MeshBasicMaterial\";this.color=new N(16777215);this.lightMap=\nthis.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.envMap=this.alphaMap=this.specularMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap=\"round\";this.lights=this.morphTargets=this.skinning=!1;this.setValues(a)}function y(a,b,c){if(Array.isArray(a))throw new TypeError(\"THREE.BufferAttribute: array should be a Typed Array.\");this.uuid=Q.generateUUID();this.array=a;\nthis.itemSize=b;this.count=void 0!==a?a.length/b:0;this.normalized=!0===c;this.dynamic=!1;this.updateRange={offset:0,count:-1};this.onUploadCallback=function(){};this.version=0}function rc(a,b){y.call(this,new Int8Array(a),b)}function sc(a,b){y.call(this,new Uint8Array(a),b)}function tc(a,b){y.call(this,new Uint8ClampedArray(a),b)}function uc(a,b){y.call(this,new Int16Array(a),b)}function Ra(a,b){y.call(this,new Uint16Array(a),b)}function vc(a,b){y.call(this,new Int32Array(a),b)}function Ua(a,b){y.call(this,\nnew Uint32Array(a),b)}function X(a,b){y.call(this,new Float32Array(a),b)}function wc(a,b){y.call(this,new Float64Array(a),b)}function ze(){this.indices=[];this.vertices=[];this.normals=[];this.colors=[];this.uvs=[];this.uvs2=[];this.groups=[];this.morphTargets={};this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.groupsNeedUpdate=this.uvsNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.verticesNeedUpdate=!1}function S(){Object.defineProperty(this,\"id\",\n{value:Kd++});this.uuid=Q.generateUUID();this.name=\"\";this.type=\"Geometry\";this.vertices=[];this.colors=[];this.faces=[];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphNormals=[];this.skinWeights=[];this.skinIndices=[];this.lineDistances=[];this.boundingSphere=this.boundingBox=null;this.groupsNeedUpdate=this.lineDistancesNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.uvsNeedUpdate=this.verticesNeedUpdate=this.elementsNeedUpdate=!1}function D(){Object.defineProperty(this,\"id\",\n{value:Kd++});this.uuid=Q.generateUUID();this.name=\"\";this.type=\"BufferGeometry\";this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity}}function Ba(a,b){G.call(this);this.type=\"Mesh\";this.geometry=void 0!==a?a:new D;this.material=void 0!==b?b:new Ka({color:16777215*Math.random()});this.drawMode=0;this.updateMorphTargets()}function hb(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,k,m,y,C){var Na=f/m,O=g/y,\nP=f/2,R=g/2,T=k/2;g=m+1;for(var G=y+1,V=f=0,D=new q,L=0;L<G;L++)for(var N=L*O-R,H=0;H<g;H++)D[a]=(H*Na-P)*d,D[b]=N*e,D[c]=T,p[w]=D.x,p[w+1]=D.y,p[w+2]=D.z,D[a]=0,D[b]=0,D[c]=0<k?1:-1,n[w]=D.x,n[w+1]=D.y,n[w+2]=D.z,r[l]=H/m,r[l+1]=1-L/y,w+=3,l+=2,f+=1;for(L=0;L<y;L++)for(H=0;H<m;H++)a=t+H+g*(L+1),b=t+(H+1)+g*(L+1),c=t+(H+1)+g*L,x[F]=t+H+g*L,x[F+1]=a,x[F+2]=c,x[F+3]=a,x[F+4]=b,x[F+5]=c,F+=6,V+=6;h.addGroup(v,V,C);v+=V;t+=f}D.call(this);this.type=\"BoxBufferGeometry\";this.parameters={width:a,height:b,\ndepth:c,widthSegments:d,heightSegments:e,depthSegments:f};var h=this;d=Math.floor(d)||1;e=Math.floor(e)||1;f=Math.floor(f)||1;var k=function(a,b,c){return a=0+(a+1)*(b+1)*2+(a+1)*(c+1)*2+(c+1)*(b+1)*2}(d,e,f),m=function(a,b,c){a=0+a*b*2+a*c*2+c*b*2;return 6*a}(d,e,f),x=new (65535<m?Uint32Array:Uint16Array)(m),p=new Float32Array(3*k),n=new Float32Array(3*k),r=new Float32Array(2*k),w=0,l=0,F=0,t=0,v=0;g(\"z\",\"y\",\"x\",-1,-1,c,b,a,f,e,0);g(\"z\",\"y\",\"x\",1,-1,c,b,-a,f,e,1);g(\"x\",\"z\",\"y\",1,1,a,c,b,d,f,2);g(\"x\",\n\"z\",\"y\",1,-1,a,c,-b,d,f,3);g(\"x\",\"y\",\"z\",1,-1,a,b,c,d,e,4);g(\"x\",\"y\",\"z\",-1,-1,a,b,-c,d,e,5);this.setIndex(new y(x,1));this.addAttribute(\"position\",new y(p,3));this.addAttribute(\"normal\",new y(n,3));this.addAttribute(\"uv\",new y(r,2))}function ib(a,b,c,d){D.call(this);this.type=\"PlaneBufferGeometry\";this.parameters={width:a,height:b,widthSegments:c,heightSegments:d};var e=a/2,f=b/2;c=Math.floor(c)||1;d=Math.floor(d)||1;var g=c+1,h=d+1,k=a/c,m=b/d;b=new Float32Array(g*h*3);a=new Float32Array(g*h*3);\nfor(var x=new Float32Array(g*h*2),p=0,n=0,r=0;r<h;r++)for(var w=r*m-f,l=0;l<g;l++)b[p]=l*k-e,b[p+1]=-w,a[p+2]=1,x[n]=l/c,x[n+1]=1-r/d,p+=3,n+=2;p=0;e=new (65535<b.length/3?Uint32Array:Uint16Array)(c*d*6);for(r=0;r<d;r++)for(l=0;l<c;l++)f=l+g*(r+1),h=l+1+g*(r+1),k=l+1+g*r,e[p]=l+g*r,e[p+1]=f,e[p+2]=k,e[p+3]=f,e[p+4]=h,e[p+5]=k,p+=6;this.setIndex(new y(e,1));this.addAttribute(\"position\",new y(b,3));this.addAttribute(\"normal\",new y(a,3));this.addAttribute(\"uv\",new y(x,2))}function sa(){G.call(this);\nthis.type=\"Camera\";this.matrixWorldInverse=new H;this.projectionMatrix=new H}function Ha(a,b,c,d){sa.call(this);this.type=\"PerspectiveCamera\";this.fov=void 0!==a?a:50;this.zoom=1;this.near=void 0!==c?c:.1;this.far=void 0!==d?d:2E3;this.focus=10;this.aspect=void 0!==b?b:1;this.view=null;this.filmGauge=35;this.filmOffset=0;this.updateProjectionMatrix()}function Hb(a,b,c,d,e,f){sa.call(this);this.type=\"OrthographicCamera\";this.zoom=1;this.view=null;this.left=a;this.right=b;this.top=c;this.bottom=d;this.near=\nvoid 0!==e?e:.1;this.far=void 0!==f?f:2E3;this.updateProjectionMatrix()}function rf(a,b,c){var d,e,f;return{setMode:function(a){d=a},setIndex:function(c){c.array instanceof Uint32Array&&b.get(\"OES_element_index_uint\")?(e=a.UNSIGNED_INT,f=4):c.array instanceof Uint16Array?(e=a.UNSIGNED_SHORT,f=2):(e=a.UNSIGNED_BYTE,f=1)},render:function(b,h){a.drawElements(d,h,e,b*f);c.calls++;c.vertices+=h;d===a.TRIANGLES&&(c.faces+=h/3)},renderInstances:function(g,h,k){var m=b.get(\"ANGLE_instanced_arrays\");null===\nm?console.error(\"THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\"):(m.drawElementsInstancedANGLE(d,k,e,h*f,g.maxInstancedCount),c.calls++,c.vertices+=k*g.maxInstancedCount,d===a.TRIANGLES&&(c.faces+=g.maxInstancedCount*k/3))}}}function sf(a,b,c){var d;return{setMode:function(a){d=a},render:function(b,f){a.drawArrays(d,b,f);c.calls++;c.vertices+=f;d===a.TRIANGLES&&(c.faces+=f/3)},renderInstances:function(e){var f=b.get(\"ANGLE_instanced_arrays\");\nif(null===f)console.error(\"THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\");else{var g=e.attributes.position,g=g.isInterleavedBufferAttribute?g.data.count:g.count;f.drawArraysInstancedANGLE(d,0,g,e.maxInstancedCount);c.calls++;c.vertices+=g*e.maxInstancedCount;d===a.TRIANGLES&&(c.faces+=e.maxInstancedCount*g/3)}}}}function tf(){var a={};return{get:function(b){if(void 0!==a[b.id])return a[b.id];var c;switch(b.type){case \"DirectionalLight\":c=\n{direction:new q,color:new N,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new C};break;case \"SpotLight\":c={position:new q,direction:new q,color:new N,distance:0,coneCos:0,penumbraCos:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new C};break;case \"PointLight\":c={position:new q,color:new N,distance:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new C};break;case \"HemisphereLight\":c={direction:new q,skyColor:new N,groundColor:new N};break;case \"RectAreaLight\":c=\n{color:new N,position:new q,halfWidth:new q,halfHeight:new q}}return a[b.id]=c}}}function uf(a){a=a.split(\"\\n\");for(var b=0;b<a.length;b++)a[b]=b+1+\": \"+a[b];return a.join(\"\\n\")}function Ae(a,b,c){var d=a.createShader(b);a.shaderSource(d,c);a.compileShader(d);!1===a.getShaderParameter(d,a.COMPILE_STATUS)&&console.error(\"THREE.WebGLShader: Shader couldn't compile.\");\"\"!==a.getShaderInfoLog(d)&&console.warn(\"THREE.WebGLShader: gl.getShaderInfoLog()\",b===a.VERTEX_SHADER?\"vertex\":\"fragment\",a.getShaderInfoLog(d),\nuf(c));return d}function Be(a){switch(a){case 3E3:return[\"Linear\",\"( value )\"];case 3001:return[\"sRGB\",\"( value )\"];case 3002:return[\"RGBE\",\"( value )\"];case 3004:return[\"RGBM\",\"( value, 7.0 )\"];case 3005:return[\"RGBM\",\"( value, 16.0 )\"];case 3006:return[\"RGBD\",\"( value, 256.0 )\"];case 3007:return[\"Gamma\",\"( value, float( GAMMA_FACTOR ) )\"];default:throw Error(\"unsupported encoding: \"+a);}}function Ld(a,b){var c=Be(b);return\"vec4 \"+a+\"( vec4 value ) { return \"+c[0]+\"ToLinear\"+c[1]+\"; }\"}function vf(a,\nb){var c=Be(b);return\"vec4 \"+a+\"( vec4 value ) { return LinearTo\"+c[0]+c[1]+\"; }\"}function wf(a,b){var c;switch(b){case 1:c=\"Linear\";break;case 2:c=\"Reinhard\";break;case 3:c=\"Uncharted2\";break;case 4:c=\"OptimizedCineon\";break;default:throw Error(\"unsupported toneMapping: \"+b);}return\"vec3 \"+a+\"( vec3 color ) { return \"+c+\"ToneMapping( color ); }\"}function xf(a,b,c){a=a||{};return[a.derivatives||b.envMapCubeUV||b.bumpMap||b.normalMap||b.flatShading?\"#extension GL_OES_standard_derivatives : enable\":\n\"\",(a.fragDepth||b.logarithmicDepthBuffer)&&c.get(\"EXT_frag_depth\")?\"#extension GL_EXT_frag_depth : enable\":\"\",a.drawBuffers&&c.get(\"WEBGL_draw_buffers\")?\"#extension GL_EXT_draw_buffers : require\":\"\",(a.shaderTextureLOD||b.envMap)&&c.get(\"EXT_shader_texture_lod\")?\"#extension GL_EXT_shader_texture_lod : enable\":\"\"].filter(xc).join(\"\\n\")}function yf(a){var b=[],c;for(c in a){var d=a[c];!1!==d&&b.push(\"#define \"+c+\" \"+d)}return b.join(\"\\n\")}function xc(a){return\"\"!==a}function Ce(a,b){return a.replace(/NUM_DIR_LIGHTS/g,\nb.numDirLights).replace(/NUM_SPOT_LIGHTS/g,b.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,b.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,b.numPointLights).replace(/NUM_HEMI_LIGHTS/g,b.numHemiLights)}function Md(a){return a.replace(/#include +<([\\w\\d.]+)>/g,function(a,c){var d=Z[c];if(void 0===d)throw Error(\"Can not resolve #include <\"+c+\">\");return Md(d)})}function De(a){return a.replace(/for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g,function(a,c,d,e){a=\"\";for(c=parseInt(c);c<\nparseInt(d);c++)a+=e.replace(/\\[ i \\]/g,\"[ \"+c+\" ]\");return a})}function zf(a,b,c,d){var e=a.context,f=c.extensions,g=c.defines,h=c.__webglShader.vertexShader,k=c.__webglShader.fragmentShader,m=\"SHADOWMAP_TYPE_BASIC\";1===d.shadowMapType?m=\"SHADOWMAP_TYPE_PCF\":2===d.shadowMapType&&(m=\"SHADOWMAP_TYPE_PCF_SOFT\");var x=\"ENVMAP_TYPE_CUBE\",p=\"ENVMAP_MODE_REFLECTION\",n=\"ENVMAP_BLENDING_MULTIPLY\";if(d.envMap){switch(c.envMap.mapping){case 301:case 302:x=\"ENVMAP_TYPE_CUBE\";break;case 306:case 307:x=\"ENVMAP_TYPE_CUBE_UV\";\nbreak;case 303:case 304:x=\"ENVMAP_TYPE_EQUIREC\";break;case 305:x=\"ENVMAP_TYPE_SPHERE\"}switch(c.envMap.mapping){case 302:case 304:p=\"ENVMAP_MODE_REFRACTION\"}switch(c.combine){case 0:n=\"ENVMAP_BLENDING_MULTIPLY\";break;case 1:n=\"ENVMAP_BLENDING_MIX\";break;case 2:n=\"ENVMAP_BLENDING_ADD\"}}var r=0<a.gammaFactor?a.gammaFactor:1,f=xf(f,d,a.extensions),l=yf(g),u=e.createProgram();c.isRawShaderMaterial?(g=[l,\"\\n\"].filter(xc).join(\"\\n\"),m=[f,l,\"\\n\"].filter(xc).join(\"\\n\")):(g=[\"precision \"+d.precision+\" float;\",\n\"precision \"+d.precision+\" int;\",\"#define SHADER_NAME \"+c.__webglShader.name,l,d.supportsVertexTextures?\"#define VERTEX_TEXTURES\":\"\",\"#define GAMMA_FACTOR \"+r,\"#define MAX_BONES \"+d.maxBones,d.map?\"#define USE_MAP\":\"\",d.envMap?\"#define USE_ENVMAP\":\"\",d.envMap?\"#define \"+p:\"\",d.lightMap?\"#define USE_LIGHTMAP\":\"\",d.aoMap?\"#define USE_AOMAP\":\"\",d.emissiveMap?\"#define USE_EMISSIVEMAP\":\"\",d.bumpMap?\"#define USE_BUMPMAP\":\"\",d.normalMap?\"#define USE_NORMALMAP\":\"\",d.displacementMap&&d.supportsVertexTextures?\n\"#define USE_DISPLACEMENTMAP\":\"\",d.specularMap?\"#define USE_SPECULARMAP\":\"\",d.roughnessMap?\"#define USE_ROUGHNESSMAP\":\"\",d.metalnessMap?\"#define USE_METALNESSMAP\":\"\",d.alphaMap?\"#define USE_ALPHAMAP\":\"\",d.vertexColors?\"#define USE_COLOR\":\"\",d.flatShading?\"#define FLAT_SHADED\":\"\",d.skinning?\"#define USE_SKINNING\":\"\",d.useVertexTexture?\"#define BONE_TEXTURE\":\"\",d.morphTargets?\"#define USE_MORPHTARGETS\":\"\",d.morphNormals&&!1===d.flatShading?\"#define USE_MORPHNORMALS\":\"\",d.doubleSided?\"#define DOUBLE_SIDED\":\n\"\",d.flipSided?\"#define FLIP_SIDED\":\"\",\"#define NUM_CLIPPING_PLANES \"+d.numClippingPlanes,d.shadowMapEnabled?\"#define USE_SHADOWMAP\":\"\",d.shadowMapEnabled?\"#define \"+m:\"\",d.sizeAttenuation?\"#define USE_SIZEATTENUATION\":\"\",d.logarithmicDepthBuffer?\"#define USE_LOGDEPTHBUF\":\"\",d.logarithmicDepthBuffer&&a.extensions.get(\"EXT_frag_depth\")?\"#define USE_LOGDEPTHBUF_EXT\":\"\",\"uniform mat4 modelMatrix;\",\"uniform mat4 modelViewMatrix;\",\"uniform mat4 projectionMatrix;\",\"uniform mat4 viewMatrix;\",\"uniform mat3 normalMatrix;\",\n\"uniform vec3 cameraPosition;\",\"attribute vec3 position;\",\"attribute vec3 normal;\",\"attribute vec2 uv;\",\"#ifdef USE_COLOR\",\"\\tattribute vec3 color;\",\"#endif\",\"#ifdef USE_MORPHTARGETS\",\"\\tattribute vec3 morphTarget0;\",\"\\tattribute vec3 morphTarget1;\",\"\\tattribute vec3 morphTarget2;\",\"\\tattribute vec3 morphTarget3;\",\"\\t#ifdef USE_MORPHNORMALS\",\"\\t\\tattribute vec3 morphNormal0;\",\"\\t\\tattribute vec3 morphNormal1;\",\"\\t\\tattribute vec3 morphNormal2;\",\"\\t\\tattribute vec3 morphNormal3;\",\"\\t#else\",\"\\t\\tattribute vec3 morphTarget4;\",\n\"\\t\\tattribute vec3 morphTarget5;\",\"\\t\\tattribute vec3 morphTarget6;\",\"\\t\\tattribute vec3 morphTarget7;\",\"\\t#endif\",\"#endif\",\"#ifdef USE_SKINNING\",\"\\tattribute vec4 skinIndex;\",\"\\tattribute vec4 skinWeight;\",\"#endif\",\"\\n\"].filter(xc).join(\"\\n\"),m=[f,\"precision \"+d.precision+\" float;\",\"precision \"+d.precision+\" int;\",\"#define SHADER_NAME \"+c.__webglShader.name,l,d.alphaTest?\"#define ALPHATEST \"+d.alphaTest:\"\",\"#define GAMMA_FACTOR \"+r,d.useFog&&d.fog?\"#define USE_FOG\":\"\",d.useFog&&d.fogExp?\"#define FOG_EXP2\":\n\"\",d.map?\"#define USE_MAP\":\"\",d.envMap?\"#define USE_ENVMAP\":\"\",d.envMap?\"#define \"+x:\"\",d.envMap?\"#define \"+p:\"\",d.envMap?\"#define \"+n:\"\",d.lightMap?\"#define USE_LIGHTMAP\":\"\",d.aoMap?\"#define USE_AOMAP\":\"\",d.emissiveMap?\"#define USE_EMISSIVEMAP\":\"\",d.bumpMap?\"#define USE_BUMPMAP\":\"\",d.normalMap?\"#define USE_NORMALMAP\":\"\",d.specularMap?\"#define USE_SPECULARMAP\":\"\",d.roughnessMap?\"#define USE_ROUGHNESSMAP\":\"\",d.metalnessMap?\"#define USE_METALNESSMAP\":\"\",d.alphaMap?\"#define USE_ALPHAMAP\":\"\",d.vertexColors?\n\"#define USE_COLOR\":\"\",d.gradientMap?\"#define USE_GRADIENTMAP\":\"\",d.flatShading?\"#define FLAT_SHADED\":\"\",d.doubleSided?\"#define DOUBLE_SIDED\":\"\",d.flipSided?\"#define FLIP_SIDED\":\"\",\"#define NUM_CLIPPING_PLANES \"+d.numClippingPlanes,\"#define UNION_CLIPPING_PLANES \"+(d.numClippingPlanes-d.numClipIntersection),d.shadowMapEnabled?\"#define USE_SHADOWMAP\":\"\",d.shadowMapEnabled?\"#define \"+m:\"\",d.premultipliedAlpha?\"#define PREMULTIPLIED_ALPHA\":\"\",d.physicallyCorrectLights?\"#define PHYSICALLY_CORRECT_LIGHTS\":\n\"\",d.logarithmicDepthBuffer?\"#define USE_LOGDEPTHBUF\":\"\",d.logarithmicDepthBuffer&&a.extensions.get(\"EXT_frag_depth\")?\"#define USE_LOGDEPTHBUF_EXT\":\"\",d.envMap&&a.extensions.get(\"EXT_shader_texture_lod\")?\"#define TEXTURE_LOD_EXT\":\"\",\"uniform mat4 viewMatrix;\",\"uniform vec3 cameraPosition;\",0!==d.toneMapping?\"#define TONE_MAPPING\":\"\",0!==d.toneMapping?Z.tonemapping_pars_fragment:\"\",0!==d.toneMapping?wf(\"toneMapping\",d.toneMapping):\"\",d.outputEncoding||d.mapEncoding||d.envMapEncoding||d.emissiveMapEncoding?\nZ.encodings_pars_fragment:\"\",d.mapEncoding?Ld(\"mapTexelToLinear\",d.mapEncoding):\"\",d.envMapEncoding?Ld(\"envMapTexelToLinear\",d.envMapEncoding):\"\",d.emissiveMapEncoding?Ld(\"emissiveMapTexelToLinear\",d.emissiveMapEncoding):\"\",d.outputEncoding?vf(\"linearToOutputTexel\",d.outputEncoding):\"\",d.depthPacking?\"#define DEPTH_PACKING \"+c.depthPacking:\"\",\"\\n\"].filter(xc).join(\"\\n\"));h=Md(h,d);h=Ce(h,d);k=Md(k,d);k=Ce(k,d);c.isShaderMaterial||(h=De(h),k=De(k));k=m+k;h=Ae(e,e.VERTEX_SHADER,g+h);k=Ae(e,e.FRAGMENT_SHADER,\nk);e.attachShader(u,h);e.attachShader(u,k);void 0!==c.index0AttributeName?e.bindAttribLocation(u,0,c.index0AttributeName):!0===d.morphTargets&&e.bindAttribLocation(u,0,\"position\");e.linkProgram(u);d=e.getProgramInfoLog(u);x=e.getShaderInfoLog(h);p=e.getShaderInfoLog(k);r=n=!0;if(!1===e.getProgramParameter(u,e.LINK_STATUS))n=!1,console.error(\"THREE.WebGLProgram: shader error: \",e.getError(),\"gl.VALIDATE_STATUS\",e.getProgramParameter(u,e.VALIDATE_STATUS),\"gl.getProgramInfoLog\",d,x,p);else if(\"\"!==d)console.warn(\"THREE.WebGLProgram: gl.getProgramInfoLog()\",\nd);else if(\"\"===x||\"\"===p)r=!1;r&&(this.diagnostics={runnable:n,material:c,programLog:d,vertexShader:{log:x,prefix:g},fragmentShader:{log:p,prefix:m}});e.deleteShader(h);e.deleteShader(k);var q;this.getUniforms=function(){void 0===q&&(q=new $a(e,u,a));return q};var t;this.getAttributes=function(){if(void 0===t){for(var a={},b=e.getProgramParameter(u,e.ACTIVE_ATTRIBUTES),c=0;c<b;c++){var d=e.getActiveAttrib(u,c).name;a[d]=e.getAttribLocation(u,d)}t=a}return t};this.destroy=function(){e.deleteProgram(u);\nthis.program=void 0};Object.defineProperties(this,{uniforms:{get:function(){console.warn(\"THREE.WebGLProgram: .uniforms is now .getUniforms().\");return this.getUniforms()}},attributes:{get:function(){console.warn(\"THREE.WebGLProgram: .attributes is now .getAttributes().\");return this.getAttributes()}}});this.id=Af++;this.code=b;this.usedTimes=1;this.program=u;this.vertexShader=h;this.fragmentShader=k;return this}function Bf(a,b){function c(a,b){var c;a?a.isTexture?c=a.encoding:a.isWebGLRenderTarget&&\n(console.warn(\"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\"),c=a.texture.encoding):c=3E3;3E3===c&&b&&(c=3007);return c}var d=[],e={MeshDepthMaterial:\"depth\",MeshNormalMaterial:\"normal\",MeshBasicMaterial:\"basic\",MeshLambertMaterial:\"lambert\",MeshPhongMaterial:\"phong\",MeshToonMaterial:\"phong\",MeshStandardMaterial:\"physical\",MeshPhysicalMaterial:\"physical\",LineBasicMaterial:\"basic\",LineDashedMaterial:\"dashed\",PointsMaterial:\"points\"},\nf=\"precision supportsVertexTextures map mapEncoding envMap envMapMode envMapEncoding lightMap aoMap emissiveMap emissiveMapEncoding bumpMap normalMap displacementMap specularMap roughnessMap metalnessMap gradientMap alphaMap combine vertexColors fog useFog fogExp flatShading sizeAttenuation logarithmicDepthBuffer skinning maxBones useVertexTexture morphTargets morphNormals maxMorphTargets maxMorphNormals premultipliedAlpha numDirLights numPointLights numSpotLights numHemiLights numRectAreaLights shadowMapEnabled shadowMapType toneMapping physicallyCorrectLights alphaTest doubleSided flipSided numClippingPlanes numClipIntersection depthPacking\".split(\" \");\nthis.getParameters=function(d,f,k,m,x,p){var n=e[d.type],r;b.floatVertexTextures&&p&&p.skeleton&&p.skeleton.useVertexTexture?r=1024:(r=Math.floor((b.maxVertexUniforms-20)/4),void 0!==p&&p&&p.isSkinnedMesh&&(r=Math.min(p.skeleton.bones.length,r),r<p.skeleton.bones.length&&console.warn(\"WebGLRenderer: too many bones - \"+p.skeleton.bones.length+\", this GPU supports just \"+r+\" (try OpenGL instead of ANGLE)\")));var l=a.getPrecision();null!==d.precision&&(l=b.getMaxPrecision(d.precision),l!==d.precision&&\nconsole.warn(\"THREE.WebGLProgram.getParameters:\",d.precision,\"not supported, using\",l,\"instead.\"));var u=a.getCurrentRenderTarget();return{shaderID:n,precision:l,supportsVertexTextures:b.vertexTextures,outputEncoding:c(u?u.texture:null,a.gammaOutput),map:!!d.map,mapEncoding:c(d.map,a.gammaInput),envMap:!!d.envMap,envMapMode:d.envMap&&d.envMap.mapping,envMapEncoding:c(d.envMap,a.gammaInput),envMapCubeUV:!!d.envMap&&(306===d.envMap.mapping||307===d.envMap.mapping),lightMap:!!d.lightMap,aoMap:!!d.aoMap,\nemissiveMap:!!d.emissiveMap,emissiveMapEncoding:c(d.emissiveMap,a.gammaInput),bumpMap:!!d.bumpMap,normalMap:!!d.normalMap,displacementMap:!!d.displacementMap,roughnessMap:!!d.roughnessMap,metalnessMap:!!d.metalnessMap,specularMap:!!d.specularMap,alphaMap:!!d.alphaMap,gradientMap:!!d.gradientMap,combine:d.combine,vertexColors:d.vertexColors,fog:!!k,useFog:d.fog,fogExp:k&&k.isFogExp2,flatShading:1===d.shading,sizeAttenuation:d.sizeAttenuation,logarithmicDepthBuffer:b.logarithmicDepthBuffer,skinning:d.skinning,\nmaxBones:r,useVertexTexture:b.floatVertexTextures&&p&&p.skeleton&&p.skeleton.useVertexTexture,morphTargets:d.morphTargets,morphNormals:d.morphNormals,maxMorphTargets:a.maxMorphTargets,maxMorphNormals:a.maxMorphNormals,numDirLights:f.directional.length,numPointLights:f.point.length,numSpotLights:f.spot.length,numRectAreaLights:f.rectArea.length,numHemiLights:f.hemi.length,numClippingPlanes:m,numClipIntersection:x,shadowMapEnabled:a.shadowMap.enabled&&p.receiveShadow&&0<f.shadows.length,shadowMapType:a.shadowMap.type,\ntoneMapping:a.toneMapping,physicallyCorrectLights:a.physicallyCorrectLights,premultipliedAlpha:d.premultipliedAlpha,alphaTest:d.alphaTest,doubleSided:2===d.side,flipSided:1===d.side,depthPacking:void 0!==d.depthPacking?d.depthPacking:!1}};this.getProgramCode=function(a,b){var c=[];b.shaderID?c.push(b.shaderID):(c.push(a.fragmentShader),c.push(a.vertexShader));if(void 0!==a.defines)for(var d in a.defines)c.push(d),c.push(a.defines[d]);for(d=0;d<f.length;d++)c.push(b[f[d]]);return c.join()};this.acquireProgram=\nfunction(b,c,e){for(var f,x=0,p=d.length;x<p;x++){var n=d[x];if(n.code===e){f=n;++f.usedTimes;break}}void 0===f&&(f=new zf(a,e,b,c),d.push(f));return f};this.releaseProgram=function(a){if(0===--a.usedTimes){var b=d.indexOf(a);d[b]=d[d.length-1];d.pop();a.destroy()}};this.programs=d}function Cf(a,b,c){function d(a){var h=a.target;a=f[h.id];null!==a.index&&e(a.index);var k=a.attributes,m;for(m in k)e(k[m]);h.removeEventListener(\"dispose\",d);delete f[h.id];m=b.get(h);m.wireframe&&e(m.wireframe);b[\"delete\"](h);\nh=b.get(a);h.wireframe&&e(h.wireframe);b[\"delete\"](a);c.memory.geometries--}function e(c){var d;d=c.isInterleavedBufferAttribute?b.get(c.data).__webglBuffer:b.get(c).__webglBuffer;void 0!==d&&(a.deleteBuffer(d),c.isInterleavedBufferAttribute?b[\"delete\"](c.data):b[\"delete\"](c))}var f={};return{get:function(a){var b=a.geometry;if(void 0!==f[b.id])return f[b.id];b.addEventListener(\"dispose\",d);var e;b.isBufferGeometry?e=b:b.isGeometry&&(void 0===b._bufferGeometry&&(b._bufferGeometry=(new D).setFromObject(a)),\ne=b._bufferGeometry);f[b.id]=e;c.memory.geometries++;return e}}}function Df(a,b,c){function d(c,d){var e=c.isInterleavedBufferAttribute?c.data:c,k=b.get(e);if(void 0===k.__webglBuffer){k.__webglBuffer=a.createBuffer();a.bindBuffer(d,k.__webglBuffer);a.bufferData(d,e.array,e.dynamic?a.DYNAMIC_DRAW:a.STATIC_DRAW);var m=a.FLOAT,x=e.array;x instanceof Float32Array?m=a.FLOAT:x instanceof Float64Array?console.warn(\"Unsupported data buffer format: Float64Array\"):x instanceof Uint16Array?m=a.UNSIGNED_SHORT:\nx instanceof Int16Array?m=a.SHORT:x instanceof Uint32Array?m=a.UNSIGNED_INT:x instanceof Int32Array?m=a.INT:x instanceof Int8Array?m=a.BYTE:x instanceof Uint8Array&&(m=a.UNSIGNED_BYTE);k.bytesPerElement=x.BYTES_PER_ELEMENT;k.type=m;k.version=e.version;e.onUploadCallback()}else k.version!==e.version&&(a.bindBuffer(d,k.__webglBuffer),!1===e.dynamic?a.bufferData(d,e.array,a.STATIC_DRAW):-1===e.updateRange.count?a.bufferSubData(d,0,e.array):0===e.updateRange.count?console.error(\"THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually.\"):\n(a.bufferSubData(d,e.updateRange.offset*e.array.BYTES_PER_ELEMENT,e.array.subarray(e.updateRange.offset,e.updateRange.offset+e.updateRange.count)),e.updateRange.count=0),k.version=e.version)}var e=new Cf(a,b,c);return{getAttributeBuffer:function(a){return a.isInterleavedBufferAttribute?b.get(a.data).__webglBuffer:b.get(a).__webglBuffer},getAttributeProperties:function(a){return a.isInterleavedBufferAttribute?b.get(a.data):b.get(a)},getWireframeAttribute:function(c){var e=b.get(c);if(void 0!==e.wireframe)return e.wireframe;\nvar h=[],k=c.index,m=c.attributes;c=m.position;if(null!==k)for(var k=k.array,m=0,x=k.length;m<x;m+=3){var p=k[m+0],n=k[m+1],r=k[m+2];h.push(p,n,n,r,r,p)}else for(k=m.position.array,m=0,x=k.length/3-1;m<x;m+=3)p=m+0,n=m+1,r=m+2,h.push(p,n,n,r,r,p);h=new y(new (65535<c.count?Uint32Array:Uint16Array)(h),1);d(h,a.ELEMENT_ARRAY_BUFFER);return e.wireframe=h},update:function(b){var c=e.get(b);b.geometry.isGeometry&&c.updateFromObject(b);b=c.index;var h=c.attributes;null!==b&&d(b,a.ELEMENT_ARRAY_BUFFER);\nfor(var k in h)d(h[k],a.ARRAY_BUFFER);b=c.morphAttributes;for(k in b)for(var h=b[k],m=0,x=h.length;m<x;m++)d(h[m],a.ARRAY_BUFFER);return c}}}function Ef(a,b,c,d,e,f,g){function h(a,b){if(a.width>b||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext(\"2d\").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn(\"THREE.WebGLRenderer: image is too big (\"+\na.width+\"x\"+a.height+\"). Resized to \"+d.width+\"x\"+d.height,a);return d}return a}function k(a){return Q.isPowerOfTwo(a.width)&&Q.isPowerOfTwo(a.height)}function m(b){return 1003===b||1004===b||1005===b?a.NEAREST:a.LINEAR}function x(b){b=b.target;b.removeEventListener(\"dispose\",x);a:{var c=d.get(b);if(b.image&&c.__image__webglTextureCube)a.deleteTexture(c.__image__webglTextureCube);else{if(void 0===c.__webglInit)break a;a.deleteTexture(c.__webglTexture)}d[\"delete\"](b)}q.textures--}function p(b){b=b.target;\nb.removeEventListener(\"dispose\",p);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLRenderTargetCube)for(e=0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer);d[\"delete\"](b.texture);d[\"delete\"](b)}q.textures--}function n(b,\ng){var m=d.get(b);if(0<b.version&&m.__version!==b.version){var n=b.image;if(void 0===n)console.warn(\"THREE.WebGLRenderer: Texture marked for update but image is undefined\",b);else if(!1===n.complete)console.warn(\"THREE.WebGLRenderer: Texture marked for update but image is incomplete\",b);else{void 0===m.__webglInit&&(m.__webglInit=!0,b.addEventListener(\"dispose\",x),m.__webglTexture=a.createTexture(),q.textures++);c.activeTexture(a.TEXTURE0+g);c.bindTexture(a.TEXTURE_2D,m.__webglTexture);a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,\nb.flipY);a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,b.premultiplyAlpha);a.pixelStorei(a.UNPACK_ALIGNMENT,b.unpackAlignment);var p=h(b.image,e.maxTextureSize);if((1001!==b.wrapS||1001!==b.wrapT||1003!==b.minFilter&&1006!==b.minFilter)&&!1===k(p))if(n=p,n instanceof HTMLImageElement||n instanceof HTMLCanvasElement){var l=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\");l.width=Q.nearestPowerOfTwo(n.width);l.height=Q.nearestPowerOfTwo(n.height);l.getContext(\"2d\").drawImage(n,0,0,\nl.width,l.height);console.warn(\"THREE.WebGLRenderer: image is not power of two (\"+n.width+\"x\"+n.height+\"). Resized to \"+l.width+\"x\"+l.height,n);p=l}else p=n;var n=k(p),l=f(b.format),w=f(b.type);r(a.TEXTURE_2D,b,n);var u=b.mipmaps;if(b.isDepthTexture){u=a.DEPTH_COMPONENT;if(1015===b.type){if(!t)throw Error(\"Float Depth Texture only supported in WebGL2.0\");u=a.DEPTH_COMPONENT32F}else t&&(u=a.DEPTH_COMPONENT16);1026===b.format&&u===a.DEPTH_COMPONENT&&1012!==b.type&&1014!==b.type&&(console.warn(\"THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.\"),\nb.type=1012,w=f(b.type));1027===b.format&&(u=a.DEPTH_STENCIL,1020!==b.type&&(console.warn(\"THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.\"),b.type=1020,w=f(b.type)));c.texImage2D(a.TEXTURE_2D,0,u,p.width,p.height,0,l,w,null)}else if(b.isDataTexture)if(0<u.length&&n){for(var J=0,ca=u.length;J<ca;J++)p=u[J],c.texImage2D(a.TEXTURE_2D,J,l,p.width,p.height,0,l,w,p.data);b.generateMipmaps=!1}else c.texImage2D(a.TEXTURE_2D,0,l,p.width,p.height,0,l,w,p.data);else if(b.isCompressedTexture)for(J=\n0,ca=u.length;J<ca;J++)p=u[J],1023!==b.format&&1022!==b.format?-1<c.getCompressedTextureFormats().indexOf(l)?c.compressedTexImage2D(a.TEXTURE_2D,J,l,p.width,p.height,0,p.data):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\"):c.texImage2D(a.TEXTURE_2D,J,l,p.width,p.height,0,l,w,p.data);else if(0<u.length&&n){J=0;for(ca=u.length;J<ca;J++)p=u[J],c.texImage2D(a.TEXTURE_2D,J,l,l,w,p);b.generateMipmaps=!1}else c.texImage2D(a.TEXTURE_2D,0,l,l,\nw,p);b.generateMipmaps&&n&&a.generateMipmap(a.TEXTURE_2D);m.__version=b.version;if(b.onUpdate)b.onUpdate(b);return}}c.activeTexture(a.TEXTURE0+g);c.bindTexture(a.TEXTURE_2D,m.__webglTexture)}function r(c,g,h){h?(a.texParameteri(c,a.TEXTURE_WRAP_S,f(g.wrapS)),a.texParameteri(c,a.TEXTURE_WRAP_T,f(g.wrapT)),a.texParameteri(c,a.TEXTURE_MAG_FILTER,f(g.magFilter)),a.texParameteri(c,a.TEXTURE_MIN_FILTER,f(g.minFilter))):(a.texParameteri(c,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(c,a.TEXTURE_WRAP_T,\na.CLAMP_TO_EDGE),1001===g.wrapS&&1001===g.wrapT||console.warn(\"THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.\",g),a.texParameteri(c,a.TEXTURE_MAG_FILTER,m(g.magFilter)),a.texParameteri(c,a.TEXTURE_MIN_FILTER,m(g.minFilter)),1003!==g.minFilter&&1006!==g.minFilter&&console.warn(\"THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.\",g));!(h=b.get(\"EXT_texture_filter_anisotropic\"))||\n1015===g.type&&null===b.get(\"OES_texture_float_linear\")||1016===g.type&&null===b.get(\"OES_texture_half_float_linear\")||!(1<g.anisotropy||d.get(g).__currentAnisotropy)||(a.texParameterf(c,h.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(g.anisotropy,e.getMaxAnisotropy())),d.get(g).__currentAnisotropy=g.anisotropy)}function l(b,e,g,h){var k=f(e.texture.format),m=f(e.texture.type);c.texImage2D(h,0,k,e.width,e.height,0,k,m,null);a.bindFramebuffer(a.FRAMEBUFFER,b);a.framebufferTexture2D(a.FRAMEBUFFER,g,h,d.get(e.texture).__webglTexture,\n0);a.bindFramebuffer(a.FRAMEBUFFER,null)}function u(b,c){a.bindRenderbuffer(a.RENDERBUFFER,b);c.depthBuffer&&!c.stencilBuffer?(a.renderbufferStorage(a.RENDERBUFFER,a.DEPTH_COMPONENT16,c.width,c.height),a.framebufferRenderbuffer(a.FRAMEBUFFER,a.DEPTH_ATTACHMENT,a.RENDERBUFFER,b)):c.depthBuffer&&c.stencilBuffer?(a.renderbufferStorage(a.RENDERBUFFER,a.DEPTH_STENCIL,c.width,c.height),a.framebufferRenderbuffer(a.FRAMEBUFFER,a.DEPTH_STENCIL_ATTACHMENT,a.RENDERBUFFER,b)):a.renderbufferStorage(a.RENDERBUFFER,\na.RGBA4,c.width,c.height);a.bindRenderbuffer(a.RENDERBUFFER,null)}var q=g.memory,t=\"undefined\"!==typeof WebGL2RenderingContext&&a instanceof WebGL2RenderingContext;this.setTexture2D=n;this.setTextureCube=function(b,g){var m=d.get(b);if(6===b.image.length)if(0<b.version&&m.__version!==b.version){m.__image__webglTextureCube||(b.addEventListener(\"dispose\",x),m.__image__webglTextureCube=a.createTexture(),q.textures++);c.activeTexture(a.TEXTURE0+g);c.bindTexture(a.TEXTURE_CUBE_MAP,m.__image__webglTextureCube);\na.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,b.flipY);for(var n=b&&b.isCompressedTexture,p=b.image[0]&&b.image[0].isDataTexture,l=[],w=0;6>w;w++)l[w]=n||p?p?b.image[w].image:b.image[w]:h(b.image[w],e.maxCubemapSize);var u=k(l[0]),t=f(b.format),ca=f(b.type);r(a.TEXTURE_CUBE_MAP,b,u);for(w=0;6>w;w++)if(n)for(var y,C=l[w].mipmaps,D=0,O=C.length;D<O;D++)y=C[D],1023!==b.format&&1022!==b.format?-1<c.getCompressedTextureFormats().indexOf(t)?c.compressedTexImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X+w,D,t,y.width,y.height,\n0,y.data):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()\"):c.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X+w,D,t,y.width,y.height,0,t,ca,y.data);else p?c.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X+w,0,t,l[w].width,l[w].height,0,t,ca,l[w].data):c.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X+w,0,t,t,ca,l[w]);b.generateMipmaps&&u&&a.generateMipmap(a.TEXTURE_CUBE_MAP);m.__version=b.version;if(b.onUpdate)b.onUpdate(b)}else c.activeTexture(a.TEXTURE0+\ng),c.bindTexture(a.TEXTURE_CUBE_MAP,m.__image__webglTextureCube)};this.setTextureCubeDynamic=function(b,e){c.activeTexture(a.TEXTURE0+e);c.bindTexture(a.TEXTURE_CUBE_MAP,d.get(b).__webglTexture)};this.setupRenderTarget=function(b){var e=d.get(b),f=d.get(b.texture);b.addEventListener(\"dispose\",p);f.__webglTexture=a.createTexture();q.textures++;var g=!0===b.isWebGLRenderTargetCube,h=k(b);if(g){e.__webglFramebuffer=[];for(var m=0;6>m;m++)e.__webglFramebuffer[m]=a.createFramebuffer()}else e.__webglFramebuffer=\na.createFramebuffer();if(g){c.bindTexture(a.TEXTURE_CUBE_MAP,f.__webglTexture);r(a.TEXTURE_CUBE_MAP,b.texture,h);for(m=0;6>m;m++)l(e.__webglFramebuffer[m],b,a.COLOR_ATTACHMENT0,a.TEXTURE_CUBE_MAP_POSITIVE_X+m);b.texture.generateMipmaps&&h&&a.generateMipmap(a.TEXTURE_CUBE_MAP);c.bindTexture(a.TEXTURE_CUBE_MAP,null)}else c.bindTexture(a.TEXTURE_2D,f.__webglTexture),r(a.TEXTURE_2D,b.texture,h),l(e.__webglFramebuffer,b,a.COLOR_ATTACHMENT0,a.TEXTURE_2D),b.texture.generateMipmaps&&h&&a.generateMipmap(a.TEXTURE_2D),\nc.bindTexture(a.TEXTURE_2D,null);if(b.depthBuffer){e=d.get(b);f=!0===b.isWebGLRenderTargetCube;if(b.depthTexture){if(f)throw Error(\"target.depthTexture not supported in Cube render targets\");if(b&&b.isWebGLRenderTargetCube)throw Error(\"Depth Texture with cube render targets is not supported!\");a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer);if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error(\"renderTarget.depthTexture must be an instance of THREE.DepthTexture\");d.get(b.depthTexture).__webglTexture&&\nb.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0);n(b.depthTexture,0);e=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER,a.DEPTH_ATTACHMENT,a.TEXTURE_2D,e,0);else if(1027===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER,a.DEPTH_STENCIL_ATTACHMENT,a.TEXTURE_2D,e,0);else throw Error(\"Unknown depthTexture format\");\n}else if(f)for(e.__webglDepthbuffer=[],f=0;6>f;f++)a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer[f]),e.__webglDepthbuffer[f]=a.createRenderbuffer(),u(e.__webglDepthbuffer[f],b);else a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer),e.__webglDepthbuffer=a.createRenderbuffer(),u(e.__webglDepthbuffer,b);a.bindFramebuffer(a.FRAMEBUFFER,null)}};this.updateRenderTargetMipmap=function(b){var e=b.texture;e.generateMipmaps&&k(b)&&1003!==e.minFilter&&1006!==e.minFilter&&(b=b&&b.isWebGLRenderTargetCube?\na.TEXTURE_CUBE_MAP:a.TEXTURE_2D,e=d.get(e).__webglTexture,c.bindTexture(b,e),a.generateMipmap(b),c.bindTexture(b,null))}}function Ff(){var a={};return{get:function(b){b=b.uuid;var c=a[b];void 0===c&&(c={},a[b]=c);return c},\"delete\":function(b){delete a[b.uuid]},clear:function(){a={}}}}function Gf(a,b,c){function d(b,c,d){var e=new Uint8Array(4),f=a.createTexture();a.bindTexture(b,f);a.texParameteri(b,a.TEXTURE_MIN_FILTER,a.NEAREST);a.texParameteri(b,a.TEXTURE_MAG_FILTER,a.NEAREST);for(b=0;b<d;b++)a.texImage2D(c+\nb,0,a.RGBA,1,1,0,a.RGBA,a.UNSIGNED_BYTE,e);return f}function e(b){!0!==v[b]&&(a.enable(b),v[b]=!0)}function f(b){!1!==v[b]&&(a.disable(b),v[b]=!1)}function g(b,d,g,h,k,m,n,p){0!==b?e(a.BLEND):f(a.BLEND);if(b!==z||p!==ca)2===b?p?(a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.ONE,a.ONE,a.ONE,a.ONE)):(a.blendEquation(a.FUNC_ADD),a.blendFunc(a.SRC_ALPHA,a.ONE)):3===b?p?(a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.ZERO,a.ZERO,a.ONE_MINUS_SRC_COLOR,a.ONE_MINUS_SRC_ALPHA)):\n(a.blendEquation(a.FUNC_ADD),a.blendFunc(a.ZERO,a.ONE_MINUS_SRC_COLOR)):4===b?p?(a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.ZERO,a.SRC_COLOR,a.ZERO,a.SRC_ALPHA)):(a.blendEquation(a.FUNC_ADD),a.blendFunc(a.ZERO,a.SRC_COLOR)):p?(a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.ONE,a.ONE_MINUS_SRC_ALPHA,a.ONE,a.ONE_MINUS_SRC_ALPHA)):(a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.SRC_ALPHA,a.ONE_MINUS_SRC_ALPHA,a.ONE,a.ONE_MINUS_SRC_ALPHA)),\nz=b,ca=p;if(5===b){k=k||d;m=m||g;n=n||h;if(d!==A||k!==K)a.blendEquationSeparate(c(d),c(k)),A=d,K=k;if(g!==I||h!==E||m!==y||n!==J)a.blendFuncSeparate(c(g),c(h),c(m),c(n)),I=g,E=h,y=m,J=n}else J=y=K=E=I=A=null}function h(a){n.setFunc(a)}function k(b){C!==b&&(b?a.frontFace(a.CW):a.frontFace(a.CCW),C=b)}function m(b){0!==b?(e(a.CULL_FACE),b!==D&&(1===b?a.cullFace(a.BACK):2===b?a.cullFace(a.FRONT):a.cullFace(a.FRONT_AND_BACK))):f(a.CULL_FACE);D=b}function x(b){void 0===b&&(b=a.TEXTURE0+T-1);V!==b&&(a.activeTexture(b),\nV=b)}var p=new function(){var b=!1,c=new ga,d=null,e=new ga;return{setMask:function(c){d===c||b||(a.colorMask(c,c,c,c),d=c)},setLocked:function(a){b=a},setClear:function(b,d,f,g,h){!0===h&&(b*=g,d*=g,f*=g);c.set(b,d,f,g);!1===e.equals(c)&&(a.clearColor(b,d,f,g),e.copy(c))},reset:function(){b=!1;d=null;e.set(0,0,0,1)}}},n=new function(){var b=!1,c=null,d=null,g=null;return{setTest:function(b){b?e(a.DEPTH_TEST):f(a.DEPTH_TEST)},setMask:function(d){c===d||b||(a.depthMask(d),c=d)},setFunc:function(b){if(d!==\nb){if(b)switch(b){case 0:a.depthFunc(a.NEVER);break;case 1:a.depthFunc(a.ALWAYS);break;case 2:a.depthFunc(a.LESS);break;case 3:a.depthFunc(a.LEQUAL);break;case 4:a.depthFunc(a.EQUAL);break;case 5:a.depthFunc(a.GEQUAL);break;case 6:a.depthFunc(a.GREATER);break;case 7:a.depthFunc(a.NOTEQUAL);break;default:a.depthFunc(a.LEQUAL)}else a.depthFunc(a.LEQUAL);d=b}},setLocked:function(a){b=a},setClear:function(b){g!==b&&(a.clearDepth(b),g=b)},reset:function(){b=!1;g=d=c=null}}},r=new function(){var b=!1,c=\nnull,d=null,g=null,h=null,k=null,m=null,n=null,p=null;return{setTest:function(b){b?e(a.STENCIL_TEST):f(a.STENCIL_TEST)},setMask:function(d){c===d||b||(a.stencilMask(d),c=d)},setFunc:function(b,c,e){if(d!==b||g!==c||h!==e)a.stencilFunc(b,c,e),d=b,g=c,h=e},setOp:function(b,c,d){if(k!==b||m!==c||n!==d)a.stencilOp(b,c,d),k=b,m=c,n=d},setLocked:function(a){b=a},setClear:function(b){p!==b&&(a.clearStencil(b),p=b)},reset:function(){b=!1;p=n=m=k=h=g=d=c=null}}},l=a.getParameter(a.MAX_VERTEX_ATTRIBS),u=new Uint8Array(l),\nq=new Uint8Array(l),t=new Uint8Array(l),v={},M=null,z=null,A=null,I=null,E=null,K=null,y=null,J=null,ca=!1,C=null,D=null,G=null,O=null,P=null,R=null,T=a.getParameter(a.MAX_TEXTURE_IMAGE_UNITS),l=parseFloat(/^WebGL\\ ([0-9])/.exec(a.getParameter(a.VERSION))[1]),H=1<=parseFloat(l),V=null,N={},L=new ga,S=new ga,Q={};Q[a.TEXTURE_2D]=d(a.TEXTURE_2D,a.TEXTURE_2D,1);Q[a.TEXTURE_CUBE_MAP]=d(a.TEXTURE_CUBE_MAP,a.TEXTURE_CUBE_MAP_POSITIVE_X,6);return{buffers:{color:p,depth:n,stencil:r},init:function(){p.setClear(0,\n0,0,1);n.setClear(1);r.setClear(0);e(a.DEPTH_TEST);h(3);k(!1);m(1);e(a.CULL_FACE);e(a.BLEND);g(1)},initAttributes:function(){for(var a=0,b=u.length;a<b;a++)u[a]=0},enableAttribute:function(c){u[c]=1;0===q[c]&&(a.enableVertexAttribArray(c),q[c]=1);0!==t[c]&&(b.get(\"ANGLE_instanced_arrays\").vertexAttribDivisorANGLE(c,0),t[c]=0)},enableAttributeAndDivisor:function(b,c,d){u[b]=1;0===q[b]&&(a.enableVertexAttribArray(b),q[b]=1);t[b]!==c&&(d.vertexAttribDivisorANGLE(b,c),t[b]=c)},disableUnusedAttributes:function(){for(var b=\n0,c=q.length;b!==c;++b)q[b]!==u[b]&&(a.disableVertexAttribArray(b),q[b]=0)},enable:e,disable:f,getCompressedTextureFormats:function(){if(null===M&&(M=[],b.get(\"WEBGL_compressed_texture_pvrtc\")||b.get(\"WEBGL_compressed_texture_s3tc\")||b.get(\"WEBGL_compressed_texture_etc1\")))for(var c=a.getParameter(a.COMPRESSED_TEXTURE_FORMATS),d=0;d<c.length;d++)M.push(c[d]);return M},setBlending:g,setColorWrite:function(a){p.setMask(a)},setDepthTest:function(a){n.setTest(a)},setDepthWrite:function(a){n.setMask(a)},\nsetDepthFunc:h,setStencilTest:function(a){r.setTest(a)},setStencilWrite:function(a){r.setMask(a)},setStencilFunc:function(a,b,c){r.setFunc(a,b,c)},setStencilOp:function(a,b,c){r.setOp(a,b,c)},setFlipSided:k,setCullFace:m,setLineWidth:function(b){b!==G&&(H&&a.lineWidth(b),G=b)},setPolygonOffset:function(b,c,d){if(b){if(e(a.POLYGON_OFFSET_FILL),O!==c||P!==d)a.polygonOffset(c,d),O=c,P=d}else f(a.POLYGON_OFFSET_FILL)},getScissorTest:function(){return R},setScissorTest:function(b){(R=b)?e(a.SCISSOR_TEST):\nf(a.SCISSOR_TEST)},activeTexture:x,bindTexture:function(b,c){null===V&&x();var d=N[V];void 0===d&&(d={type:void 0,texture:void 0},N[V]=d);if(d.type!==b||d.texture!==c)a.bindTexture(b,c||Q[b]),d.type=b,d.texture=c},compressedTexImage2D:function(){try{a.compressedTexImage2D.apply(a,arguments)}catch(b){console.error(b)}},texImage2D:function(){try{a.texImage2D.apply(a,arguments)}catch(b){console.error(b)}},scissor:function(b){!1===L.equals(b)&&(a.scissor(b.x,b.y,b.z,b.w),L.copy(b))},viewport:function(b){!1===\nS.equals(b)&&(a.viewport(b.x,b.y,b.z,b.w),S.copy(b))},reset:function(){for(var b=0;b<q.length;b++)1===q[b]&&(a.disableVertexAttribArray(b),q[b]=0);v={};V=M=null;N={};D=C=z=null;p.reset();n.reset();r.reset()}}}function Hf(a,b,c){function d(b){if(\"highp\"===b){if(0<a.getShaderPrecisionFormat(a.VERTEX_SHADER,a.HIGH_FLOAT).precision&&0<a.getShaderPrecisionFormat(a.FRAGMENT_SHADER,a.HIGH_FLOAT).precision)return\"highp\";b=\"mediump\"}return\"mediump\"===b&&0<a.getShaderPrecisionFormat(a.VERTEX_SHADER,a.MEDIUM_FLOAT).precision&&\n0<a.getShaderPrecisionFormat(a.FRAGMENT_SHADER,a.MEDIUM_FLOAT).precision?\"mediump\":\"lowp\"}var e,f=void 0!==c.precision?c.precision:\"highp\",g=d(f);g!==f&&(console.warn(\"THREE.WebGLRenderer:\",f,\"not supported, using\",g,\"instead.\"),f=g);c=!0===c.logarithmicDepthBuffer&&!!b.get(\"EXT_frag_depth\");var g=a.getParameter(a.MAX_TEXTURE_IMAGE_UNITS),h=a.getParameter(a.MAX_VERTEX_TEXTURE_IMAGE_UNITS),k=a.getParameter(a.MAX_TEXTURE_SIZE),m=a.getParameter(a.MAX_CUBE_MAP_TEXTURE_SIZE),x=a.getParameter(a.MAX_VERTEX_ATTRIBS),\np=a.getParameter(a.MAX_VERTEX_UNIFORM_VECTORS),n=a.getParameter(a.MAX_VARYING_VECTORS),r=a.getParameter(a.MAX_FRAGMENT_UNIFORM_VECTORS),l=0<h,u=!!b.get(\"OES_texture_float\");return{getMaxAnisotropy:function(){if(void 0!==e)return e;var c=b.get(\"EXT_texture_filter_anisotropic\");return e=null!==c?a.getParameter(c.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0},getMaxPrecision:d,precision:f,logarithmicDepthBuffer:c,maxTextures:g,maxVertexTextures:h,maxTextureSize:k,maxCubemapSize:m,maxAttributes:x,maxVertexUniforms:p,\nmaxVaryings:n,maxFragmentUniforms:r,vertexTextures:l,floatFragmentTextures:u,floatVertexTextures:l&&u}}function If(a){var b={};return{get:function(c){if(void 0!==b[c])return b[c];var d;switch(c){case \"WEBGL_depth_texture\":d=a.getExtension(\"WEBGL_depth_texture\")||a.getExtension(\"MOZ_WEBGL_depth_texture\")||a.getExtension(\"WEBKIT_WEBGL_depth_texture\");break;case \"EXT_texture_filter_anisotropic\":d=a.getExtension(\"EXT_texture_filter_anisotropic\")||a.getExtension(\"MOZ_EXT_texture_filter_anisotropic\")||\na.getExtension(\"WEBKIT_EXT_texture_filter_anisotropic\");break;case \"WEBGL_compressed_texture_s3tc\":d=a.getExtension(\"WEBGL_compressed_texture_s3tc\")||a.getExtension(\"MOZ_WEBGL_compressed_texture_s3tc\")||a.getExtension(\"WEBKIT_WEBGL_compressed_texture_s3tc\");break;case \"WEBGL_compressed_texture_pvrtc\":d=a.getExtension(\"WEBGL_compressed_texture_pvrtc\")||a.getExtension(\"WEBKIT_WEBGL_compressed_texture_pvrtc\");break;case \"WEBGL_compressed_texture_etc1\":d=a.getExtension(\"WEBGL_compressed_texture_etc1\");\nbreak;default:d=a.getExtension(c)}null===d&&console.warn(\"THREE.WebGLRenderer: \"+c+\" extension not supported.\");return b[c]=d}}}function Jf(){function a(){m.value!==d&&(m.value=d,m.needsUpdate=0<e);c.numPlanes=e;c.numIntersection=0}function b(a,b,d,e){var f=null!==a?a.length:0,g=null;if(0!==f){g=m.value;if(!0!==e||null===g){e=d+4*f;b=b.matrixWorldInverse;k.getNormalMatrix(b);if(null===g||g.length<e)g=new Float32Array(e);for(e=0;e!==f;++e,d+=4)h.copy(a[e]).applyMatrix4(b,k),h.normal.toArray(g,d),g[d+\n3]=h.constant}m.value=g;m.needsUpdate=!0}c.numPlanes=f;return g}var c=this,d=null,e=0,f=!1,g=!1,h=new ma,k=new za,m={value:null,needsUpdate:!1};this.uniform=m;this.numIntersection=this.numPlanes=0;this.init=function(a,c,g){var h=0!==a.length||c||0!==e||f;f=c;d=b(a,g,0);e=a.length;return h};this.beginShadows=function(){g=!0;b(null)};this.endShadows=function(){g=!1;a()};this.setState=function(c,h,k,r,l,u){if(!f||null===c||0===c.length||g&&!k)g?b(null):a();else{k=g?0:e;var q=4*k,t=l.clippingState||null;\nm.value=t;t=b(c,r,q,u);for(c=0;c!==q;++c)t[c]=d[c];l.clippingState=t;this.numIntersection=h?this.numPlanes:0;this.numPlanes+=k}}}function Nd(a){function b(){Y.init();Y.scissor(X.copy(fa).multiplyScalar(Sa));Y.viewport(Z.copy(ia).multiplyScalar(Sa));Y.buffers.color.setClear(Ga.r,Ga.g,Ga.b,fb,K)}function c(){W=Q=null;U=\"\";L=-1;Y.reset()}function d(a){a.preventDefault();c();b();ha.clear()}function e(a){a=a.target;a.removeEventListener(\"dispose\",e);f(a);ha[\"delete\"](a)}function f(a){var b=ha.get(a).program;\na.program=void 0;void 0!==b&&za.releaseProgram(b)}function g(a,b){return Math.abs(b[0])-Math.abs(a[0])}function h(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.program&&b.material.program&&a.material.program!==b.material.program?a.material.program.id-b.material.program.id:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function k(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-\nb.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function m(a,b,c,d,e){var f;c.transparent?(d=G,f=++Na):(d=ca,f=++C);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=ba.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:ba.z,group:e},d.push(f))}function x(a){if(!na.intersectsSphere(a))return!1;var b=da.numPlanes;if(0===b)return!0;var c=T.clippingPlanes,d=a.center;a=-a.radius;var e=0;do if(c[e].distanceToPoint(d)<a)return!1;while(++e!==b);return!0}function p(a,b){if(!1!==\na.visible){if(0!==(a.layers.mask&b.layers.mask))if(a.isLight)J.push(a);else if(a.isSprite){var c;(c=!1===a.frustumCulled)||(oa.center.set(0,0,0),oa.radius=.7071067811865476,oa.applyMatrix4(a.matrixWorld),c=!0===x(oa));c&&P.push(a)}else if(a.isLensFlare)R.push(a);else if(a.isImmediateRenderObject)!0===T.sortObjects&&(ba.setFromMatrixPosition(a.matrixWorld),ba.applyProjection(sa)),m(a,null,a.material,ba.z,null);else if(a.isMesh||a.isLine||a.isPoints)if(a.isSkinnedMesh&&a.skeleton.update(),(c=!1===a.frustumCulled)||\n(c=a.geometry,null===c.boundingSphere&&c.computeBoundingSphere(),oa.copy(c.boundingSphere).applyMatrix4(a.matrixWorld),c=!0===x(oa)),c){var d=a.material;if(!0===d.visible)if(!0===T.sortObjects&&(ba.setFromMatrixPosition(a.matrixWorld),ba.applyProjection(sa)),c=ta.update(a),d.isMultiMaterial)for(var e=c.groups,f=d.materials,d=0,g=e.length;d<g;d++){var h=e[d],k=f[h.materialIndex];!0===k.visible&&m(a,c,k,ba.z,h)}else m(a,c,d,ba.z,null)}c=a.children;d=0;for(g=c.length;d<g;d++)p(c[d],b)}}function n(a,\nb,c,d){for(var e=0,f=a.length;e<f;e++){var g=a[e],h=g.object,k=g.geometry,m=void 0===d?g.material:d,g=g.group;h.modelViewMatrix.multiplyMatrices(c.matrixWorldInverse,h.matrixWorld);h.normalMatrix.getNormalMatrix(h.modelViewMatrix);h.onBeforeRender(T,b,c,k,m,g);if(h.isImmediateRenderObject){r(m);var n=l(c,b.fog,m,h);U=\"\";h.render(function(a){T.renderBufferImmediate(a,n,m)})}else T.renderBufferDirect(c,b.fog,k,m,h,g);h.onAfterRender(T,b,c,k,m,g)}}function r(a){2===a.side?Y.disable(B.CULL_FACE):Y.enable(B.CULL_FACE);\nY.setFlipSided(1===a.side);!0===a.transparent?Y.setBlending(a.blending,a.blendEquation,a.blendSrc,a.blendDst,a.blendEquationAlpha,a.blendSrcAlpha,a.blendDstAlpha,a.premultipliedAlpha):Y.setBlending(0);Y.setDepthFunc(a.depthFunc);Y.setDepthTest(a.depthTest);Y.setDepthWrite(a.depthWrite);Y.setColorWrite(a.colorWrite);Y.setPolygonOffset(a.polygonOffset,a.polygonOffsetFactor,a.polygonOffsetUnits)}function l(a,b,c,d){ea=0;var g=ha.get(c);pa&&(ua||a!==W)&&da.setState(c.clippingPlanes,c.clipIntersection,\nc.clipShadows,a,g,a===W&&c.id===L);!1===c.needsUpdate&&(void 0===g.program?c.needsUpdate=!0:c.fog&&g.fog!==b?c.needsUpdate=!0:c.lights&&g.lightsHash!==aa.hash?c.needsUpdate=!0:void 0===g.numClippingPlanes||g.numClippingPlanes===da.numPlanes&&g.numIntersection===da.numIntersection||(c.needsUpdate=!0));if(c.needsUpdate){a:{var h=ha.get(c),k=za.getParameters(c,aa,b,da.numPlanes,da.numIntersection,d),m=za.getProgramCode(c,k),n=h.program,p=!0;if(void 0===n)c.addEventListener(\"dispose\",e);else if(n.code!==\nm)f(c);else if(void 0!==k.shaderID)break a;else p=!1;p&&(k.shaderID?(n=Gb[k.shaderID],h.__webglShader={name:c.type,uniforms:Ja.clone(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader}):h.__webglShader={name:c.type,uniforms:c.uniforms,vertexShader:c.vertexShader,fragmentShader:c.fragmentShader},c.__webglShader=h.__webglShader,n=za.acquireProgram(c,k,m),h.program=n,c.program=n);k=n.getAttributes();if(c.morphTargets)for(m=c.numSupportedMorphTargets=0;m<T.maxMorphTargets;m++)0<=\nk[\"morphTarget\"+m]&&c.numSupportedMorphTargets++;if(c.morphNormals)for(m=c.numSupportedMorphNormals=0;m<T.maxMorphNormals;m++)0<=k[\"morphNormal\"+m]&&c.numSupportedMorphNormals++;k=h.__webglShader.uniforms;if(!c.isShaderMaterial&&!c.isRawShaderMaterial||!0===c.clipping)h.numClippingPlanes=da.numPlanes,h.numIntersection=da.numIntersection,k.clippingPlanes=da.uniform;h.fog=b;h.lightsHash=aa.hash;c.lights&&(k.ambientLightColor.value=aa.ambient,k.directionalLights.value=aa.directional,k.spotLights.value=\naa.spot,k.rectAreaLights.value=aa.rectArea,k.pointLights.value=aa.point,k.hemisphereLights.value=aa.hemi,k.directionalShadowMap.value=aa.directionalShadowMap,k.directionalShadowMatrix.value=aa.directionalShadowMatrix,k.spotShadowMap.value=aa.spotShadowMap,k.spotShadowMatrix.value=aa.spotShadowMatrix,k.pointShadowMap.value=aa.pointShadowMap,k.pointShadowMatrix.value=aa.pointShadowMatrix);m=h.program.getUniforms();k=$a.seqWithValue(m.seq,k);h.uniformsList=k}c.needsUpdate=!1}var x=!1,p=n=!1,h=g.program,\nk=h.getUniforms(),m=g.__webglShader.uniforms;h.id!==Q&&(B.useProgram(h.program),Q=h.id,p=n=x=!0);c.id!==L&&(L=c.id,n=!0);if(x||a!==W){k.set(B,a,\"projectionMatrix\");ma.logarithmicDepthBuffer&&k.setValue(B,\"logDepthBufFC\",2/(Math.log(a.far+1)/Math.LN2));a!==W&&(W=a,p=n=!0);if(c.isShaderMaterial||c.isMeshPhongMaterial||c.isMeshStandardMaterial||c.envMap)x=k.map.cameraPosition,void 0!==x&&x.setValue(B,ba.setFromMatrixPosition(a.matrixWorld));(c.isMeshPhongMaterial||c.isMeshLambertMaterial||c.isMeshBasicMaterial||\nc.isMeshStandardMaterial||c.isShaderMaterial||c.skinning)&&k.setValue(B,\"viewMatrix\",a.matrixWorldInverse);k.set(B,T,\"toneMappingExposure\");k.set(B,T,\"toneMappingWhitePoint\")}c.skinning&&(k.setOptional(B,d,\"bindMatrix\"),k.setOptional(B,d,\"bindMatrixInverse\"),a=d.skeleton)&&(ma.floatVertexTextures&&a.useVertexTexture?(k.set(B,a,\"boneTexture\"),k.set(B,a,\"boneTextureWidth\"),k.set(B,a,\"boneTextureHeight\")):k.setOptional(B,a,\"boneMatrices\"));if(n){c.lights&&(a=p,m.ambientLightColor.needsUpdate=a,m.directionalLights.needsUpdate=\na,m.pointLights.needsUpdate=a,m.spotLights.needsUpdate=a,m.rectAreaLights.needsUpdate=a,m.hemisphereLights.needsUpdate=a);b&&c.fog&&(m.fogColor.value=b.color,b.isFog?(m.fogNear.value=b.near,m.fogFar.value=b.far):b.isFogExp2&&(m.fogDensity.value=b.density));if(c.isMeshBasicMaterial||c.isMeshLambertMaterial||c.isMeshPhongMaterial||c.isMeshStandardMaterial||c.isMeshNormalMaterial||c.isMeshDepthMaterial){m.opacity.value=c.opacity;m.diffuse.value=c.color;c.emissive&&m.emissive.value.copy(c.emissive).multiplyScalar(c.emissiveIntensity);\nm.map.value=c.map;m.specularMap.value=c.specularMap;m.alphaMap.value=c.alphaMap;c.lightMap&&(m.lightMap.value=c.lightMap,m.lightMapIntensity.value=c.lightMapIntensity);c.aoMap&&(m.aoMap.value=c.aoMap,m.aoMapIntensity.value=c.aoMapIntensity);var r;c.map?r=c.map:c.specularMap?r=c.specularMap:c.displacementMap?r=c.displacementMap:c.normalMap?r=c.normalMap:c.bumpMap?r=c.bumpMap:c.roughnessMap?r=c.roughnessMap:c.metalnessMap?r=c.metalnessMap:c.alphaMap?r=c.alphaMap:c.emissiveMap&&(r=c.emissiveMap);void 0!==\nr&&(r.isWebGLRenderTarget&&(r=r.texture),b=r.offset,r=r.repeat,m.offsetRepeat.value.set(b.x,b.y,r.x,r.y));m.envMap.value=c.envMap;m.flipEnvMap.value=c.envMap&&c.envMap.isCubeTexture?-1:1;m.reflectivity.value=c.reflectivity;m.refractionRatio.value=c.refractionRatio}c.isLineBasicMaterial?(m.diffuse.value=c.color,m.opacity.value=c.opacity):c.isLineDashedMaterial?(m.diffuse.value=c.color,m.opacity.value=c.opacity,m.dashSize.value=c.dashSize,m.totalSize.value=c.dashSize+c.gapSize,m.scale.value=c.scale):\nc.isPointsMaterial?(m.diffuse.value=c.color,m.opacity.value=c.opacity,m.size.value=c.size*Sa,m.scale.value=.5*yc,m.map.value=c.map,null!==c.map&&(r=c.map.offset,c=c.map.repeat,m.offsetRepeat.value.set(r.x,r.y,c.x,c.y))):c.isMeshLambertMaterial?c.emissiveMap&&(m.emissiveMap.value=c.emissiveMap):c.isMeshToonMaterial?(u(m,c),c.gradientMap&&(m.gradientMap.value=c.gradientMap)):c.isMeshPhongMaterial?u(m,c):c.isMeshPhysicalMaterial?(m.clearCoat.value=c.clearCoat,m.clearCoatRoughness.value=c.clearCoatRoughness,\nF(m,c)):c.isMeshStandardMaterial?F(m,c):c.isMeshDepthMaterial?c.displacementMap&&(m.displacementMap.value=c.displacementMap,m.displacementScale.value=c.displacementScale,m.displacementBias.value=c.displacementBias):c.isMeshNormalMaterial&&(c.bumpMap&&(m.bumpMap.value=c.bumpMap,m.bumpScale.value=c.bumpScale),c.normalMap&&(m.normalMap.value=c.normalMap,m.normalScale.value.copy(c.normalScale)),c.displacementMap&&(m.displacementMap.value=c.displacementMap,m.displacementScale.value=c.displacementScale,\nm.displacementBias.value=c.displacementBias));void 0!==m.ltcMat&&(m.ltcMat.value=THREE.UniformsLib.LTC_MAT_TEXTURE);void 0!==m.ltcMag&&(m.ltcMag.value=THREE.UniformsLib.LTC_MAG_TEXTURE);$a.upload(B,g.uniformsList,m,T)}k.set(B,d,\"modelViewMatrix\");k.set(B,d,\"normalMatrix\");k.setValue(B,\"modelMatrix\",d.matrixWorld);return h}function u(a,b){a.specular.value=b.specular;a.shininess.value=Math.max(b.shininess,1E-4);b.emissiveMap&&(a.emissiveMap.value=b.emissiveMap);b.bumpMap&&(a.bumpMap.value=b.bumpMap,\na.bumpScale.value=b.bumpScale);b.normalMap&&(a.normalMap.value=b.normalMap,a.normalScale.value.copy(b.normalScale));b.displacementMap&&(a.displacementMap.value=b.displacementMap,a.displacementScale.value=b.displacementScale,a.displacementBias.value=b.displacementBias)}function F(a,b){a.roughness.value=b.roughness;a.metalness.value=b.metalness;b.roughnessMap&&(a.roughnessMap.value=b.roughnessMap);b.metalnessMap&&(a.metalnessMap.value=b.metalnessMap);b.emissiveMap&&(a.emissiveMap.value=b.emissiveMap);\nb.bumpMap&&(a.bumpMap.value=b.bumpMap,a.bumpScale.value=b.bumpScale);b.normalMap&&(a.normalMap.value=b.normalMap,a.normalScale.value.copy(b.normalScale));b.displacementMap&&(a.displacementMap.value=b.displacementMap,a.displacementScale.value=b.displacementScale,a.displacementBias.value=b.displacementBias);b.envMap&&(a.envMapIntensity.value=b.envMapIntensity)}function t(a){var b;if(1E3===a)return B.REPEAT;if(1001===a)return B.CLAMP_TO_EDGE;if(1002===a)return B.MIRRORED_REPEAT;if(1003===a)return B.NEAREST;\nif(1004===a)return B.NEAREST_MIPMAP_NEAREST;if(1005===a)return B.NEAREST_MIPMAP_LINEAR;if(1006===a)return B.LINEAR;if(1007===a)return B.LINEAR_MIPMAP_NEAREST;if(1008===a)return B.LINEAR_MIPMAP_LINEAR;if(1009===a)return B.UNSIGNED_BYTE;if(1017===a)return B.UNSIGNED_SHORT_4_4_4_4;if(1018===a)return B.UNSIGNED_SHORT_5_5_5_1;if(1019===a)return B.UNSIGNED_SHORT_5_6_5;if(1010===a)return B.BYTE;if(1011===a)return B.SHORT;if(1012===a)return B.UNSIGNED_SHORT;if(1013===a)return B.INT;if(1014===a)return B.UNSIGNED_INT;\nif(1015===a)return B.FLOAT;if(1016===a&&(b=ja.get(\"OES_texture_half_float\"),null!==b))return b.HALF_FLOAT_OES;if(1021===a)return B.ALPHA;if(1022===a)return B.RGB;if(1023===a)return B.RGBA;if(1024===a)return B.LUMINANCE;if(1025===a)return B.LUMINANCE_ALPHA;if(1026===a)return B.DEPTH_COMPONENT;if(1027===a)return B.DEPTH_STENCIL;if(100===a)return B.FUNC_ADD;if(101===a)return B.FUNC_SUBTRACT;if(102===a)return B.FUNC_REVERSE_SUBTRACT;if(200===a)return B.ZERO;if(201===a)return B.ONE;if(202===a)return B.SRC_COLOR;\nif(203===a)return B.ONE_MINUS_SRC_COLOR;if(204===a)return B.SRC_ALPHA;if(205===a)return B.ONE_MINUS_SRC_ALPHA;if(206===a)return B.DST_ALPHA;if(207===a)return B.ONE_MINUS_DST_ALPHA;if(208===a)return B.DST_COLOR;if(209===a)return B.ONE_MINUS_DST_COLOR;if(210===a)return B.SRC_ALPHA_SATURATE;if(2001===a||2002===a||2003===a||2004===a)if(b=ja.get(\"WEBGL_compressed_texture_s3tc\"),null!==b){if(2001===a)return b.COMPRESSED_RGB_S3TC_DXT1_EXT;if(2002===a)return b.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(2003===a)return b.COMPRESSED_RGBA_S3TC_DXT3_EXT;\nif(2004===a)return b.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(2100===a||2101===a||2102===a||2103===a)if(b=ja.get(\"WEBGL_compressed_texture_pvrtc\"),null!==b){if(2100===a)return b.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(2101===a)return b.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(2102===a)return b.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(2103===a)return b.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(2151===a&&(b=ja.get(\"WEBGL_compressed_texture_etc1\"),null!==b))return b.COMPRESSED_RGB_ETC1_WEBGL;if(103===a||104===a)if(b=ja.get(\"EXT_blend_minmax\"),\nnull!==b){if(103===a)return b.MIN_EXT;if(104===a)return b.MAX_EXT}return 1020===a&&(b=ja.get(\"WEBGL_depth_texture\"),null!==b)?b.UNSIGNED_INT_24_8_WEBGL:0}console.log(\"THREE.WebGLRenderer\",\"83\");a=a||{};var v=void 0!==a.canvas?a.canvas:document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\"),M=void 0!==a.context?a.context:null,z=void 0!==a.alpha?a.alpha:!1,A=void 0!==a.depth?a.depth:!0,I=void 0!==a.stencil?a.stencil:!0,E=void 0!==a.antialias?a.antialias:!1,K=void 0!==a.premultipliedAlpha?\na.premultipliedAlpha:!0,y=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,J=[],ca=[],C=-1,G=[],Na=-1,O=new Float32Array(8),P=[],R=[];this.domElement=v;this.context=null;this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.clippingPlanes=[];this.localClippingEnabled=!1;this.gammaFactor=2;this.physicallyCorrectLights=this.gammaOutput=this.gammaInput=!1;this.toneMappingWhitePoint=this.toneMappingExposure=this.toneMapping=1;this.maxMorphTargets=\n8;this.maxMorphNormals=4;var T=this,Q=null,V=null,S=null,L=-1,U=\"\",W=null,X=new ga,Ta=null,Z=new ga,ea=0,Ga=new N(0),fb=0,fd=v.width,yc=v.height,Sa=1,fa=new ga(0,0,fd,yc),ka=!1,ia=new ga(0,0,fd,yc),na=new qc,da=new Jf,pa=!1,ua=!1,oa=new Fa,sa=new H,ba=new q,wa=new H,xa=new H,aa={hash:\"\",ambient:[0,0,0],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],shadows:[]},qa={calls:0,\nvertices:0,faces:0,points:0};this.info={render:qa,memory:{geometries:0,textures:0},programs:null};var B;try{z={alpha:z,depth:A,stencil:I,antialias:E,premultipliedAlpha:K,preserveDrawingBuffer:y};B=M||v.getContext(\"webgl\",z)||v.getContext(\"experimental-webgl\",z);if(null===B){if(null!==v.getContext(\"webgl\"))throw\"Error creating WebGL context with your selected attributes.\";throw\"Error creating WebGL context.\";}void 0===B.getShaderPrecisionFormat&&(B.getShaderPrecisionFormat=function(){return{rangeMin:1,\nrangeMax:1,precision:1}});v.addEventListener(\"webglcontextlost\",d,!1)}catch(Kf){console.error(\"THREE.WebGLRenderer: \"+Kf)}var ja=new If(B);ja.get(\"WEBGL_depth_texture\");ja.get(\"OES_texture_float\");ja.get(\"OES_texture_float_linear\");ja.get(\"OES_texture_half_float\");ja.get(\"OES_texture_half_float_linear\");ja.get(\"OES_standard_derivatives\");ja.get(\"ANGLE_instanced_arrays\");ja.get(\"OES_element_index_uint\")&&(D.MaxIndex=4294967296);var ma=new Hf(B,ja,a),Y=new Gf(B,ja,t),ha=new Ff,va=new Ef(B,ja,Y,ha,ma,\nt,this.info),ta=new Df(B,ha,this.info),za=new Bf(this,ma),Aa=new tf;this.info.programs=za.programs;var La=new sf(B,ja,qa),Ma=new rf(B,ja,qa),Oa=new Hb(-1,1,1,-1,0,1),Ca=new Ha,Ea=new Ba(new ib(2,2),new Ka({depthTest:!1,depthWrite:!1,fog:!1}));a=Gb.cube;var ya=new Ba(new hb(5,5,5),new Ia({uniforms:a.uniforms,vertexShader:a.vertexShader,fragmentShader:a.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1}));b();this.context=B;this.capabilities=ma;this.extensions=ja;this.properties=ha;this.state=\nY;var Pa=new ye(this,aa,ta,ma);this.shadowMap=Pa;var Qa=new of(this,P),Ra=new nf(this,R);this.getContext=function(){return B};this.getContextAttributes=function(){return B.getContextAttributes()};this.forceContextLoss=function(){ja.get(\"WEBGL_lose_context\").loseContext()};this.getMaxAnisotropy=function(){return ma.getMaxAnisotropy()};this.getPrecision=function(){return ma.precision};this.getPixelRatio=function(){return Sa};this.setPixelRatio=function(a){void 0!==a&&(Sa=a,this.setSize(ia.z,ia.w,!1))};\nthis.getSize=function(){return{width:fd,height:yc}};this.setSize=function(a,b,c){fd=a;yc=b;v.width=a*Sa;v.height=b*Sa;!1!==c&&(v.style.width=a+\"px\",v.style.height=b+\"px\");this.setViewport(0,0,a,b)};this.setViewport=function(a,b,c,d){Y.viewport(ia.set(a,b,c,d))};this.setScissor=function(a,b,c,d){Y.scissor(fa.set(a,b,c,d))};this.setScissorTest=function(a){Y.setScissorTest(ka=a)};this.getClearColor=function(){return Ga};this.setClearColor=function(a,b){Ga.set(a);fb=void 0!==b?b:1;Y.buffers.color.setClear(Ga.r,\nGa.g,Ga.b,fb,K)};this.getClearAlpha=function(){return fb};this.setClearAlpha=function(a){fb=a;Y.buffers.color.setClear(Ga.r,Ga.g,Ga.b,fb,K)};this.clear=function(a,b,c){var d=0;if(void 0===a||a)d|=B.COLOR_BUFFER_BIT;if(void 0===b||b)d|=B.DEPTH_BUFFER_BIT;if(void 0===c||c)d|=B.STENCIL_BUFFER_BIT;B.clear(d)};this.clearColor=function(){this.clear(!0,!1,!1)};this.clearDepth=function(){this.clear(!1,!0,!1)};this.clearStencil=function(){this.clear(!1,!1,!0)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);\nthis.clear(b,c,d)};this.resetGLState=c;this.dispose=function(){G=[];Na=-1;ca=[];C=-1;v.removeEventListener(\"webglcontextlost\",d,!1)};this.renderBufferImmediate=function(a,b,c){Y.initAttributes();var d=ha.get(a);a.hasPositions&&!d.position&&(d.position=B.createBuffer());a.hasNormals&&!d.normal&&(d.normal=B.createBuffer());a.hasUvs&&!d.uv&&(d.uv=B.createBuffer());a.hasColors&&!d.color&&(d.color=B.createBuffer());b=b.getAttributes();a.hasPositions&&(B.bindBuffer(B.ARRAY_BUFFER,d.position),B.bufferData(B.ARRAY_BUFFER,\na.positionArray,B.DYNAMIC_DRAW),Y.enableAttribute(b.position),B.vertexAttribPointer(b.position,3,B.FLOAT,!1,0,0));if(a.hasNormals){B.bindBuffer(B.ARRAY_BUFFER,d.normal);if(!c.isMeshPhongMaterial&&!c.isMeshStandardMaterial&&!c.isMeshNormalMaterial&&1===c.shading)for(var e=0,f=3*a.count;e<f;e+=9){var g=a.normalArray,h=(g[e+0]+g[e+3]+g[e+6])/3,k=(g[e+1]+g[e+4]+g[e+7])/3,m=(g[e+2]+g[e+5]+g[e+8])/3;g[e+0]=h;g[e+1]=k;g[e+2]=m;g[e+3]=h;g[e+4]=k;g[e+5]=m;g[e+6]=h;g[e+7]=k;g[e+8]=m}B.bufferData(B.ARRAY_BUFFER,\na.normalArray,B.DYNAMIC_DRAW);Y.enableAttribute(b.normal);B.vertexAttribPointer(b.normal,3,B.FLOAT,!1,0,0)}a.hasUvs&&c.map&&(B.bindBuffer(B.ARRAY_BUFFER,d.uv),B.bufferData(B.ARRAY_BUFFER,a.uvArray,B.DYNAMIC_DRAW),Y.enableAttribute(b.uv),B.vertexAttribPointer(b.uv,2,B.FLOAT,!1,0,0));a.hasColors&&0!==c.vertexColors&&(B.bindBuffer(B.ARRAY_BUFFER,d.color),B.bufferData(B.ARRAY_BUFFER,a.colorArray,B.DYNAMIC_DRAW),Y.enableAttribute(b.color),B.vertexAttribPointer(b.color,3,B.FLOAT,!1,0,0));Y.disableUnusedAttributes();\nB.drawArrays(B.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){r(d);var h=l(a,b,d,e),k=!1;a=c.id+\"_\"+h.id+\"_\"+d.wireframe;a!==U&&(U=a,k=!0);b=e.morphTargetInfluences;if(void 0!==b){var m=[];a=0;for(var n=b.length;a<n;a++)k=b[a],m.push([k,a]);m.sort(g);8<m.length&&(m.length=8);var p=c.morphAttributes;a=0;for(n=m.length;a<n;a++)k=m[a],O[a]=k[0],0!==k[0]?(b=k[1],!0===d.morphTargets&&p.position&&c.addAttribute(\"morphTarget\"+a,p.position[b]),!0===d.morphNormals&&p.normal&&\nc.addAttribute(\"morphNormal\"+a,p.normal[b])):(!0===d.morphTargets&&c.removeAttribute(\"morphTarget\"+a),!0===d.morphNormals&&c.removeAttribute(\"morphNormal\"+a));a=m.length;for(b=O.length;a<b;a++)O[a]=0;h.getUniforms().setValue(B,\"morphTargetInfluences\",O);k=!0}b=c.index;n=c.attributes.position;m=1;!0===d.wireframe&&(b=ta.getWireframeAttribute(c),m=2);null!==b?(a=Ma,a.setIndex(b)):a=La;if(k){a:{var k=void 0,x;if(c&&c.isInstancedBufferGeometry&&(x=ja.get(\"ANGLE_instanced_arrays\"),null===x)){console.error(\"THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\");\nbreak a}void 0===k&&(k=0);Y.initAttributes();var p=c.attributes,h=h.getAttributes(),u=d.defaultAttributeValues,q;for(q in h){var v=h[q];if(0<=v){var t=p[q];if(void 0!==t){var z=t.normalized,F=t.itemSize,I=ta.getAttributeProperties(t),E=I.__webglBuffer,M=I.type,I=I.bytesPerElement;if(t.isInterleavedBufferAttribute){var A=t.data,K=A.stride,t=t.offset;A&&A.isInstancedInterleavedBuffer?(Y.enableAttributeAndDivisor(v,A.meshPerAttribute,x),void 0===c.maxInstancedCount&&(c.maxInstancedCount=A.meshPerAttribute*\nA.count)):Y.enableAttribute(v);B.bindBuffer(B.ARRAY_BUFFER,E);B.vertexAttribPointer(v,F,M,z,K*I,(k*K+t)*I)}else t.isInstancedBufferAttribute?(Y.enableAttributeAndDivisor(v,t.meshPerAttribute,x),void 0===c.maxInstancedCount&&(c.maxInstancedCount=t.meshPerAttribute*t.count)):Y.enableAttribute(v),B.bindBuffer(B.ARRAY_BUFFER,E),B.vertexAttribPointer(v,F,M,z,0,k*F*I)}else if(void 0!==u&&(z=u[q],void 0!==z))switch(z.length){case 2:B.vertexAttrib2fv(v,z);break;case 3:B.vertexAttrib3fv(v,z);break;case 4:B.vertexAttrib4fv(v,\nz);break;default:B.vertexAttrib1fv(v,z)}}}Y.disableUnusedAttributes()}null!==b&&B.bindBuffer(B.ELEMENT_ARRAY_BUFFER,ta.getAttributeBuffer(b))}x=0;null!==b?x=b.count:void 0!==n&&(x=n.count);b=c.drawRange.start*m;n=null!==f?f.start*m:0;q=Math.max(b,n);f=Math.max(0,Math.min(x,b+c.drawRange.count*m,n+(null!==f?f.count*m:Infinity))-1-q+1);if(0!==f){if(e.isMesh)if(!0===d.wireframe)Y.setLineWidth(d.wireframeLinewidth*(null===V?Sa:1)),a.setMode(B.LINES);else switch(e.drawMode){case 0:a.setMode(B.TRIANGLES);\nbreak;case 1:a.setMode(B.TRIANGLE_STRIP);break;case 2:a.setMode(B.TRIANGLE_FAN)}else e.isLine?(d=d.linewidth,void 0===d&&(d=1),Y.setLineWidth(d*(null===V?Sa:1)),e.isLineSegments?a.setMode(B.LINES):a.setMode(B.LINE_STRIP)):e.isPoints&&a.setMode(B.POINTS);c&&c.isInstancedBufferGeometry?0<c.maxInstancedCount&&a.renderInstances(c,q,f):a.render(q,f)}};this.render=function(a,b,c,d){if(void 0!==b&&!0!==b.isCamera)console.error(\"THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.\");else{U=\n\"\";L=-1;W=null;!0===a.autoUpdate&&a.updateMatrixWorld();null===b.parent&&b.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);sa.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);na.setFromMatrix(sa);J.length=0;Na=C=-1;P.length=0;R.length=0;ua=this.localClippingEnabled;pa=da.init(this.clippingPlanes,ua,b);p(a,b);ca.length=C+1;G.length=Na+1;!0===T.sortObjects&&(ca.sort(h),G.sort(k));pa&&da.beginShadows();for(var e=J,f=0,g=0,m=e.length;g<m;g++){var x=e[g];x.castShadow&&(aa.shadows[f++]=\nx)}aa.shadows.length=f;Pa.render(a,b);for(var e=J,r=x=0,l=0,w,u,v,q,t=b.matrixWorldInverse,z=0,F=0,I=0,E=0,M=0,f=0,g=e.length;f<g;f++)if(m=e[f],w=m.color,u=m.intensity,v=m.distance,q=m.shadow&&m.shadow.map?m.shadow.map.texture:null,m.isAmbientLight)x+=w.r*u,r+=w.g*u,l+=w.b*u;else if(m.isDirectionalLight){var A=Aa.get(m);A.color.copy(m.color).multiplyScalar(m.intensity);A.direction.setFromMatrixPosition(m.matrixWorld);ba.setFromMatrixPosition(m.target.matrixWorld);A.direction.sub(ba);A.direction.transformDirection(t);\nif(A.shadow=m.castShadow)A.shadowBias=m.shadow.bias,A.shadowRadius=m.shadow.radius,A.shadowMapSize=m.shadow.mapSize;aa.directionalShadowMap[z]=q;aa.directionalShadowMatrix[z]=m.shadow.matrix;aa.directional[z++]=A}else if(m.isSpotLight){A=Aa.get(m);A.position.setFromMatrixPosition(m.matrixWorld);A.position.applyMatrix4(t);A.color.copy(w).multiplyScalar(u);A.distance=v;A.direction.setFromMatrixPosition(m.matrixWorld);ba.setFromMatrixPosition(m.target.matrixWorld);A.direction.sub(ba);A.direction.transformDirection(t);\nA.coneCos=Math.cos(m.angle);A.penumbraCos=Math.cos(m.angle*(1-m.penumbra));A.decay=0===m.distance?0:m.decay;if(A.shadow=m.castShadow)A.shadowBias=m.shadow.bias,A.shadowRadius=m.shadow.radius,A.shadowMapSize=m.shadow.mapSize;aa.spotShadowMap[I]=q;aa.spotShadowMatrix[I]=m.shadow.matrix;aa.spot[I++]=A}else if(m.isRectAreaLight)A=Aa.get(m),A.color.copy(w).multiplyScalar(u/(m.width*m.height)),A.position.setFromMatrixPosition(m.matrixWorld),A.position.applyMatrix4(t),xa.identity(),wa.copy(m.matrixWorld),\nwa.premultiply(t),xa.extractRotation(wa),A.halfWidth.set(.5*m.width,0,0),A.halfHeight.set(0,.5*m.height,0),A.halfWidth.applyMatrix4(xa),A.halfHeight.applyMatrix4(xa),aa.rectArea[E++]=A;else if(m.isPointLight){A=Aa.get(m);A.position.setFromMatrixPosition(m.matrixWorld);A.position.applyMatrix4(t);A.color.copy(m.color).multiplyScalar(m.intensity);A.distance=m.distance;A.decay=0===m.distance?0:m.decay;if(A.shadow=m.castShadow)A.shadowBias=m.shadow.bias,A.shadowRadius=m.shadow.radius,A.shadowMapSize=m.shadow.mapSize;\naa.pointShadowMap[F]=q;void 0===aa.pointShadowMatrix[F]&&(aa.pointShadowMatrix[F]=new H);ba.setFromMatrixPosition(m.matrixWorld).negate();aa.pointShadowMatrix[F].identity().setPosition(ba);aa.point[F++]=A}else m.isHemisphereLight&&(A=Aa.get(m),A.direction.setFromMatrixPosition(m.matrixWorld),A.direction.transformDirection(t),A.direction.normalize(),A.skyColor.copy(m.color).multiplyScalar(u),A.groundColor.copy(m.groundColor).multiplyScalar(u),aa.hemi[M++]=A);aa.ambient[0]=x;aa.ambient[1]=r;aa.ambient[2]=\nl;aa.directional.length=z;aa.spot.length=I;aa.rectArea.length=E;aa.point.length=F;aa.hemi.length=M;aa.hash=z+\",\"+F+\",\"+I+\",\"+E+\",\"+M+\",\"+aa.shadows.length;pa&&da.endShadows();qa.calls=0;qa.vertices=0;qa.faces=0;qa.points=0;void 0===c&&(c=null);this.setRenderTarget(c);e=a.background;null===e?Y.buffers.color.setClear(Ga.r,Ga.g,Ga.b,fb,K):e&&e.isColor&&(Y.buffers.color.setClear(e.r,e.g,e.b,1,K),d=!0);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);e&&e.isCubeTexture?\n(Ca.projectionMatrix.copy(b.projectionMatrix),Ca.matrixWorld.extractRotation(b.matrixWorld),Ca.matrixWorldInverse.getInverse(Ca.matrixWorld),ya.material.uniforms.tCube.value=e,ya.modelViewMatrix.multiplyMatrices(Ca.matrixWorldInverse,ya.matrixWorld),ta.update(ya),T.renderBufferDirect(Ca,null,ya.geometry,ya.material,ya,null)):e&&e.isTexture&&(Ea.material.map=e,ta.update(Ea),T.renderBufferDirect(Oa,null,Ea.geometry,Ea.material,Ea,null));a.overrideMaterial?(d=a.overrideMaterial,n(ca,a,b,d),n(G,a,b,d)):\n(Y.setBlending(0),n(ca,a,b),n(G,a,b));Qa.render(a,b);Ra.render(a,b,Z);c&&va.updateRenderTargetMipmap(c);Y.setDepthTest(!0);Y.setDepthWrite(!0);Y.setColorWrite(!0)}};this.setFaceCulling=function(a,b){Y.setCullFace(a);Y.setFlipSided(0===b)};this.allocTextureUnit=function(){var a=ea;a>=ma.maxTextures&&console.warn(\"WebGLRenderer: trying to use \"+a+\" texture units while this GPU supports only \"+ma.maxTextures);ea+=1;return a};this.setTexture2D=function(){var a=!1;return function(b,c){b&&b.isWebGLRenderTarget&&\n(a||(console.warn(\"THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead.\"),a=!0),b=b.texture);va.setTexture2D(b,c)}}();this.setTexture=function(){var a=!1;return function(b,c){a||(console.warn(\"THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead.\"),a=!0);va.setTexture2D(b,c)}}();this.setTextureCube=function(){var a=!1;return function(b,c){b&&b.isWebGLRenderTargetCube&&(a||(console.warn(\"THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead.\"),\na=!0),b=b.texture);b&&b.isCubeTexture||Array.isArray(b.image)&&6===b.image.length?va.setTextureCube(b,c):va.setTextureCubeDynamic(b,c)}}();this.getCurrentRenderTarget=function(){return V};this.setRenderTarget=function(a){(V=a)&&void 0===ha.get(a).__webglFramebuffer&&va.setupRenderTarget(a);var b=a&&a.isWebGLRenderTargetCube,c;a?(c=ha.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,X.copy(a.scissor),Ta=a.scissorTest,Z.copy(a.viewport)):(c=null,X.copy(fa).multiplyScalar(Sa),Ta=\nka,Z.copy(ia).multiplyScalar(Sa));S!==c&&(B.bindFramebuffer(B.FRAMEBUFFER,c),S=c);Y.scissor(X);Y.setScissorTest(Ta);Y.viewport(Z);b&&(b=ha.get(a.texture),B.framebufferTexture2D(B.FRAMEBUFFER,B.COLOR_ATTACHMENT0,B.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,f){if(!1===(a&&a.isWebGLRenderTarget))console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.\");else{var g=ha.get(a).__webglFramebuffer;\nif(g){var h=!1;g!==S&&(B.bindFramebuffer(B.FRAMEBUFFER,g),h=!0);try{var k=a.texture,m=k.format,n=k.type;1023!==m&&t(m)!==B.getParameter(B.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.\"):1009===n||t(n)===B.getParameter(B.IMPLEMENTATION_COLOR_READ_TYPE)||1015===n&&(ja.get(\"OES_texture_float\")||ja.get(\"WEBGL_color_buffer_float\"))||1016===n&&ja.get(\"EXT_color_buffer_half_float\")?B.checkFramebufferStatus(B.FRAMEBUFFER)===\nB.FRAMEBUFFER_COMPLETE?0<=b&&b<=a.width-d&&0<=c&&c<=a.height-e&&B.readPixels(b,c,d,e,t(m),t(n),f):console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.\"):console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.\")}finally{h&&B.bindFramebuffer(B.FRAMEBUFFER,S)}}}}}function Ib(a,b){this.name=\"\";this.color=new N(a);this.density=void 0!==b?b:2.5E-4}function Jb(a,\nb,c){this.name=\"\";this.color=new N(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3}function jb(){G.call(this);this.type=\"Scene\";this.overrideMaterial=this.fog=this.background=null;this.autoUpdate=!0}function Od(a,b,c,d,e){G.call(this);this.lensFlares=[];this.positionScreen=new q;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)}function kb(a){W.call(this);this.type=\"SpriteMaterial\";this.color=new N(16777215);this.map=null;this.rotation=0;this.lights=this.fog=!1;this.setValues(a)}\nfunction zc(a){G.call(this);this.type=\"Sprite\";this.material=void 0!==a?a:new kb}function Ac(){G.call(this);this.type=\"LOD\";Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function hd(a,b,c){this.useVertexTexture=void 0!==c?c:!0;this.identityMatrix=new H;a=a||[];this.bones=a.slice(0);this.useVertexTexture?(a=Math.sqrt(4*this.bones.length),a=Q.nextPowerOfTwo(Math.ceil(a)),this.boneTextureHeight=this.boneTextureWidth=a=Math.max(a,4),this.boneMatrices=new Float32Array(this.boneTextureWidth*\nthis.boneTextureHeight*4),this.boneTexture=new db(this.boneMatrices,this.boneTextureWidth,this.boneTextureHeight,1023,1015)):this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===b)this.calculateInverses();else if(this.bones.length===b.length)this.boneInverses=b.slice(0);else for(console.warn(\"THREE.Skeleton bonInverses is the wrong length.\"),this.boneInverses=[],b=0,a=this.bones.length;b<a;b++)this.boneInverses.push(new H)}function id(){G.call(this);this.type=\"Bone\"}function jd(a,\nb,c){Ba.call(this,a,b);this.type=\"SkinnedMesh\";this.bindMode=\"attached\";this.bindMatrix=new H;this.bindMatrixInverse=new H;a=[];if(this.geometry&&void 0!==this.geometry.bones){for(var d,e=0,f=this.geometry.bones.length;e<f;++e)d=this.geometry.bones[e],b=new id,a.push(b),b.name=d.name,b.position.fromArray(d.pos),b.quaternion.fromArray(d.rotq),void 0!==d.scl&&b.scale.fromArray(d.scl);e=0;for(f=this.geometry.bones.length;e<f;++e)d=this.geometry.bones[e],-1!==d.parent&&null!==d.parent&&void 0!==a[d.parent]?\na[d.parent].add(a[e]):this.add(a[e])}this.normalizeSkinWeights();this.updateMatrixWorld(!0);this.bind(new hd(a,void 0,c),this.matrixWorld)}function ia(a){W.call(this);this.type=\"LineBasicMaterial\";this.color=new N(16777215);this.linewidth=1;this.linejoin=this.linecap=\"round\";this.lights=!1;this.setValues(a)}function Va(a,b,c){if(1===c)return console.warn(\"THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead.\"),new fa(a,b);G.call(this);this.type=\"Line\";this.geometry=\nvoid 0!==a?a:new D;this.material=void 0!==b?b:new ia({color:16777215*Math.random()})}function fa(a,b){Va.call(this,a,b);this.type=\"LineSegments\"}function Oa(a){W.call(this);this.type=\"PointsMaterial\";this.color=new N(16777215);this.map=null;this.size=1;this.sizeAttenuation=!0;this.lights=!1;this.setValues(a)}function Kb(a,b){G.call(this);this.type=\"Points\";this.geometry=void 0!==a?a:new D;this.material=void 0!==b?b:new Oa({color:16777215*Math.random()})}function Bc(){G.call(this);this.type=\"Group\"}\nfunction kd(a,b,c,d,e,f,g,h,k){function m(){requestAnimationFrame(m);a.readyState>=a.HAVE_CURRENT_DATA&&(x.needsUpdate=!0)}ea.call(this,a,b,c,d,e,f,g,h,k);this.generateMipmaps=!1;var x=this;m()}function Lb(a,b,c,d,e,f,g,h,k,m,x,p){ea.call(this,null,f,g,h,k,m,d,e,x,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1}function ld(a,b,c,d,e,f,g,h,k){ea.call(this,a,b,c,d,e,f,g,h,k);this.needsUpdate=!0}function Cc(a,b,c,d,e,f,g,h,k,m){m=void 0!==m?m:1026;if(1026!==m&&1027!==\nm)throw Error(\"DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat\");void 0===c&&1026===m&&(c=1012);void 0===c&&1027===m&&(c=1020);ea.call(this,null,d,e,f,g,h,m,c,k);this.image={width:a,height:b};this.magFilter=void 0!==g?g:1003;this.minFilter=void 0!==h?h:1003;this.generateMipmaps=this.flipY=!1}function Mb(a){function b(a,b){return a-b}D.call(this);var c=[0,0],d={},e=[\"a\",\"b\",\"c\"];if(a&&a.isGeometry){var f=a.vertices,g=a.faces,h=0,k=new Uint32Array(6*g.length);a=0;for(var m=\ng.length;a<m;a++)for(var x=g[a],p=0;3>p;p++){c[0]=x[e[p]];c[1]=x[e[(p+1)%3]];c.sort(b);var n=c.toString();void 0===d[n]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[n]=!0,h++)}c=new Float32Array(6*h);a=0;for(m=h;a<m;a++)for(p=0;2>p;p++)d=f[k[2*a+p]],h=6*a+3*p,c[h+0]=d.x,c[h+1]=d.y,c[h+2]=d.z;this.addAttribute(\"position\",new y(c,3))}else if(a&&a.isBufferGeometry){if(null!==a.index){m=a.index.array;f=a.attributes.position;e=a.groups;h=0;0===e.length&&a.addGroup(0,m.length);k=new Uint32Array(2*m.length);g=0;for(x=\ne.length;g<x;++g){a=e[g];p=a.start;n=a.count;a=p;for(var r=p+n;a<r;a+=3)for(p=0;3>p;p++)c[0]=m[a+p],c[1]=m[a+(p+1)%3],c.sort(b),n=c.toString(),void 0===d[n]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[n]=!0,h++)}c=new Float32Array(6*h);a=0;for(m=h;a<m;a++)for(p=0;2>p;p++)h=6*a+3*p,d=k[2*a+p],c[h+0]=f.getX(d),c[h+1]=f.getY(d),c[h+2]=f.getZ(d)}else for(f=a.attributes.position.array,h=f.length/3,k=h/3,c=new Float32Array(6*h),a=0,m=k;a<m;a++)for(p=0;3>p;p++)h=18*a+6*p,k=9*a+3*p,c[h+0]=f[k],c[h+1]=f[k+1],c[h+2]=f[k+\n2],d=9*a+(p+1)%3*3,c[h+3]=f[d],c[h+4]=f[d+1],c[h+5]=f[d+2];this.addAttribute(\"position\",new y(c,3))}}function Nb(a,b,c){D.call(this);this.type=\"ParametricBufferGeometry\";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f,g,h,k,m,x=b+1;for(f=0;f<=c;f++)for(m=f/c,g=0;g<=b;g++)k=g/b,h=a(k,m),d.push(h.x,h.y,h.z),e.push(k,m);a=[];var p;for(f=0;f<c;f++)for(g=0;g<b;g++)h=f*x+g,k=f*x+g+1,m=(f+1)*x+g+1,p=(f+1)*x+g,a.push(h,k,p),a.push(k,m,p);this.setIndex(new (65535<a.length?Ua:Ra)(a,1));this.addAttribute(\"position\",\nnew X(d,3));this.addAttribute(\"uv\",new X(e,2));this.computeVertexNormals()}function Dc(a,b,c){S.call(this);this.type=\"ParametricGeometry\";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Nb(a,b,c));this.mergeVertices()}function xa(a,b,c,d){function e(a){h.push(a.x,a.y,a.z)}function f(b,c){var d=3*b;c.x=a[d+0];c.y=a[d+1];c.z=a[d+2]}function g(a,b,c,d){0>d&&1===a.x&&(k[b]=a.x-1);0===c.x&&0===c.z&&(k[b]=d/2/Math.PI+.5)}D.call(this);this.type=\"PolyhedronBufferGeometry\";this.parameters=\n{vertices:a,indices:b,radius:c,detail:d};c=c||1;var h=[],k=[];(function(a){for(var c=new q,d=new q,g=new q,h=0;h<b.length;h+=3){f(b[h+0],c);f(b[h+1],d);f(b[h+2],g);var k=c,l=d,F=g,t=Math.pow(2,a),v=[],M,z;for(M=0;M<=t;M++){v[M]=[];var A=k.clone().lerp(F,M/t),I=l.clone().lerp(F,M/t),E=t-M;for(z=0;z<=E;z++)v[M][z]=0===z&&M===t?A:A.clone().lerp(I,z/E)}for(M=0;M<t;M++)for(z=0;z<2*(t-M)-1;z++)k=Math.floor(z/2),0===z%2?(e(v[M][k+1]),e(v[M+1][k]),e(v[M][k])):(e(v[M][k+1]),e(v[M+1][k+1]),e(v[M+1][k]))}})(d||\n0);(function(a){for(var b=new q,c=0;c<h.length;c+=3)b.x=h[c+0],b.y=h[c+1],b.z=h[c+2],b.normalize().multiplyScalar(a),h[c+0]=b.x,h[c+1]=b.y,h[c+2]=b.z})(c);(function(){for(var a=new q,b=0;b<h.length;b+=3)a.x=h[b+0],a.y=h[b+1],a.z=h[b+2],k.push(Math.atan2(a.z,-a.x)/2/Math.PI+.5,1-(Math.atan2(-a.y,Math.sqrt(a.x*a.x+a.z*a.z))/Math.PI+.5));for(var a=new q,b=new q,c=new q,d=new q,e=new C,f=new C,l=new C,F=0,t=0;F<h.length;F+=9,t+=6){a.set(h[F+0],h[F+1],h[F+2]);b.set(h[F+3],h[F+4],h[F+5]);c.set(h[F+6],h[F+\n7],h[F+8]);e.set(k[t+0],k[t+1]);f.set(k[t+2],k[t+3]);l.set(k[t+4],k[t+5]);d.copy(a).add(b).add(c).divideScalar(3);var v=Math.atan2(d.z,-d.x);g(e,t+0,a,v);g(f,t+2,b,v);g(l,t+4,c,v)}for(a=0;a<k.length;a+=6)b=k[a+0],c=k[a+2],d=k[a+4],e=Math.min(b,c,d),.9<Math.max(b,c,d)&&.1>e&&(.2>b&&(k[a+0]+=1),.2>c&&(k[a+2]+=1),.2>d&&(k[a+4]+=1))})();this.addAttribute(\"position\",new X(h,3));this.addAttribute(\"normal\",new X(h.slice(),3));this.addAttribute(\"uv\",new X(k,2));this.normalizeNormals();this.boundingSphere=\nnew Fa(new q,c)}function Ob(a,b){xa.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type=\"TetrahedronBufferGeometry\";this.parameters={radius:a,detail:b}}function Ec(a,b){S.call(this);this.type=\"TetrahedronGeometry\";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Ob(a,b));this.mergeVertices()}function lb(a,b){xa.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type=\"OctahedronBufferGeometry\";\nthis.parameters={radius:a,detail:b}}function Fc(a,b){S.call(this);this.type=\"OctahedronGeometry\";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new lb(a,b));this.mergeVertices()}function Pb(a,b){var c=(1+Math.sqrt(5))/2;xa.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type=\"IcosahedronBufferGeometry\";\nthis.parameters={radius:a,detail:b}}function Gc(a,b){S.call(this);this.type=\"IcosahedronGeometry\";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Pb(a,b));this.mergeVertices()}function Qb(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;xa.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0,d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c,0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,\n0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type=\"DodecahedronBufferGeometry\";this.parameters={radius:a,detail:b}}function Hc(a,b){S.call(this);this.type=\"DodecahedronGeometry\";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Qb(a,b));this.mergeVertices()}function Ic(a,b,c,d){S.call(this);this.type=\"PolyhedronGeometry\";this.parameters={vertices:a,indices:b,\nradius:c,detail:d};this.fromBufferGeometry(new xa(a,b,c,d));this.mergeVertices()}function Rb(a,b,c,d,e){function f(e){var f=a.getPointAt(e/b),m=g.normals[e];e=g.binormals[e];for(p=0;p<=d;p++){var x=p/d*Math.PI*2,l=Math.sin(x),x=-Math.cos(x);k.x=x*m.x+l*e.x;k.y=x*m.y+l*e.y;k.z=x*m.z+l*e.z;k.normalize();r.push(k.x,k.y,k.z);h.x=f.x+c*k.x;h.y=f.y+c*k.y;h.z=f.z+c*k.z;n.push(h.x,h.y,h.z)}}D.call(this);this.type=\"TubeBufferGeometry\";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};\nb=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new q,k=new q,m=new C,x,p,n=[],r=[],l=[],u=[];for(x=0;x<b;x++)f(x);f(!1===e?b:0);for(x=0;x<=b;x++)for(p=0;p<=d;p++)m.x=x/b,m.y=p/d,l.push(m.x,m.y);(function(){for(p=1;p<=b;p++)for(x=1;x<=d;x++){var a=(d+1)*p+(x-1),c=(d+1)*p+x,e=(d+1)*(p-1)+x;u.push((d+1)*(p-1)+(x-1),a,e);u.push(a,c,e)}})();this.setIndex(new (65535<u.length?Ua:Ra)(u,1));this.addAttribute(\"position\",\nnew X(n,3));this.addAttribute(\"normal\",new X(r,3));this.addAttribute(\"uv\",new X(l,2))}function Jc(a,b,c,d,e,f){S.call(this);this.type=\"TubeGeometry\";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};void 0!==f&&console.warn(\"THREE.TubeGeometry: taper has been removed.\");a=new Rb(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function Sb(a,b,c,d,e,f){function g(a,b,c,d,e){var f=Math.sin(a);\nb=c/b*a;c=Math.cos(b);e.x=d*(2+c)*.5*Math.cos(a);e.y=d*(2+c)*f*.5;e.z=d*Math.sin(b)*.5}D.call(this);this.type=\"TorusKnotBufferGeometry\";this.parameters={radius:a,tube:b,tubularSegments:c,radialSegments:d,p:e,q:f};a=a||100;b=b||40;c=Math.floor(c)||64;d=Math.floor(d)||8;e=e||2;f=f||3;var h=(d+1)*(c+1),k=d*c*6,k=new y(new (65535<k?Uint32Array:Uint16Array)(k),1),m=new y(new Float32Array(3*h),3),x=new y(new Float32Array(3*h),3),h=new y(new Float32Array(2*h),2),p,n,r=0,l=0,u=new q,F=new q,t=new C,v=new q,\nM=new q,z=new q,A=new q,I=new q;for(p=0;p<=c;++p)for(n=p/c*e*Math.PI*2,g(n,e,f,a,v),g(n+.01,e,f,a,M),A.subVectors(M,v),I.addVectors(M,v),z.crossVectors(A,I),I.crossVectors(z,A),z.normalize(),I.normalize(),n=0;n<=d;++n){var E=n/d*Math.PI*2,K=-b*Math.cos(E),E=b*Math.sin(E);u.x=v.x+(K*I.x+E*z.x);u.y=v.y+(K*I.y+E*z.y);u.z=v.z+(K*I.z+E*z.z);m.setXYZ(r,u.x,u.y,u.z);F.subVectors(u,v).normalize();x.setXYZ(r,F.x,F.y,F.z);t.x=p/c;t.y=n/d;h.setXY(r,t.x,t.y);r++}for(n=1;n<=c;n++)for(p=1;p<=d;p++)a=(d+1)*n+(p-\n1),b=(d+1)*n+p,e=(d+1)*(n-1)+p,k.setX(l,(d+1)*(n-1)+(p-1)),l++,k.setX(l,a),l++,k.setX(l,e),l++,k.setX(l,a),l++,k.setX(l,b),l++,k.setX(l,e),l++;this.setIndex(k);this.addAttribute(\"position\",m);this.addAttribute(\"normal\",x);this.addAttribute(\"uv\",h)}function Kc(a,b,c,d,e,f,g){S.call(this);this.type=\"TorusKnotGeometry\";this.parameters={radius:a,tube:b,tubularSegments:c,radialSegments:d,p:e,q:f};void 0!==g&&console.warn(\"THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.\");\nthis.fromBufferGeometry(new Sb(a,b,c,d,e,f));this.mergeVertices()}function Tb(a,b,c,d,e){D.call(this);this.type=\"TorusBufferGeometry\";this.parameters={radius:a,tube:b,radialSegments:c,tubularSegments:d,arc:e};a=a||100;b=b||40;c=Math.floor(c)||8;d=Math.floor(d)||6;e=e||2*Math.PI;var f=(c+1)*(d+1),g=c*d*6,g=new (65535<g?Uint32Array:Uint16Array)(g),h=new Float32Array(3*f),k=new Float32Array(3*f),f=new Float32Array(2*f),m=0,x=0,p=0,n=new q,l=new q,w=new q,u,F;for(u=0;u<=c;u++)for(F=0;F<=d;F++){var t=\nF/d*e,v=u/c*Math.PI*2;l.x=(a+b*Math.cos(v))*Math.cos(t);l.y=(a+b*Math.cos(v))*Math.sin(t);l.z=b*Math.sin(v);h[m]=l.x;h[m+1]=l.y;h[m+2]=l.z;n.x=a*Math.cos(t);n.y=a*Math.sin(t);w.subVectors(l,n).normalize();k[m]=w.x;k[m+1]=w.y;k[m+2]=w.z;f[x]=F/d;f[x+1]=u/c;m+=3;x+=2}for(u=1;u<=c;u++)for(F=1;F<=d;F++)a=(d+1)*(u-1)+F-1,b=(d+1)*(u-1)+F,e=(d+1)*u+F,g[p]=(d+1)*u+F-1,g[p+1]=a,g[p+2]=e,g[p+3]=a,g[p+4]=b,g[p+5]=e,p+=6;this.setIndex(new y(g,1));this.addAttribute(\"position\",new y(h,3));this.addAttribute(\"normal\",\nnew y(k,3));this.addAttribute(\"uv\",new y(f,2))}function Lc(a,b,c,d,e){S.call(this);this.type=\"TorusGeometry\";this.parameters={radius:a,tube:b,radialSegments:c,tubularSegments:d,arc:e};this.fromBufferGeometry(new Tb(a,b,c,d,e))}function La(a,b){\"undefined\"!==typeof a&&(S.call(this),this.type=\"ExtrudeGeometry\",a=Array.isArray(a)?a:[a],this.addShapeList(a,b),this.computeFaceNormals())}function Mc(a,b){b=b||{};var c=b.font;if(!1===(c&&c.isFont))return console.error(\"THREE.TextGeometry: font parameter is not an instance of THREE.Font.\"),\nnew S;c=c.generateShapes(a,b.size,b.curveSegments);b.amount=void 0!==b.height?b.height:50;void 0===b.bevelThickness&&(b.bevelThickness=10);void 0===b.bevelSize&&(b.bevelSize=8);void 0===b.bevelEnabled&&(b.bevelEnabled=!1);La.call(this,c,b);this.type=\"TextGeometry\"}function mb(a,b,c,d,e,f,g){D.call(this);this.type=\"SphereBufferGeometry\";this.parameters={radius:a,widthSegments:b,heightSegments:c,phiStart:d,phiLength:e,thetaStart:f,thetaLength:g};a=a||50;b=Math.max(3,Math.floor(b)||8);c=Math.max(2,Math.floor(c)||\n6);d=void 0!==d?d:0;e=void 0!==e?e:2*Math.PI;f=void 0!==f?f:0;g=void 0!==g?g:Math.PI;for(var h=f+g,k=(b+1)*(c+1),m=new y(new Float32Array(3*k),3),x=new y(new Float32Array(3*k),3),k=new y(new Float32Array(2*k),2),p=0,n=[],l=new q,w=0;w<=c;w++){for(var u=[],F=w/c,t=0;t<=b;t++){var v=t/b,M=-a*Math.cos(d+v*e)*Math.sin(f+F*g),z=a*Math.cos(f+F*g),A=a*Math.sin(d+v*e)*Math.sin(f+F*g);l.set(M,z,A).normalize();m.setXYZ(p,M,z,A);x.setXYZ(p,l.x,l.y,l.z);k.setXY(p,v,1-F);u.push(p);p++}n.push(u)}d=[];for(w=0;w<\nc;w++)for(t=0;t<b;t++)e=n[w][t+1],g=n[w][t],p=n[w+1][t],l=n[w+1][t+1],(0!==w||0<f)&&d.push(e,g,l),(w!==c-1||h<Math.PI)&&d.push(g,p,l);this.setIndex(new (65535<m.count?Ua:Ra)(d,1));this.addAttribute(\"position\",m);this.addAttribute(\"normal\",x);this.addAttribute(\"uv\",k);this.boundingSphere=new Fa(new q,a)}function Nc(a,b,c,d,e,f,g){S.call(this);this.type=\"SphereGeometry\";this.parameters={radius:a,widthSegments:b,heightSegments:c,phiStart:d,phiLength:e,thetaStart:f,thetaLength:g};this.fromBufferGeometry(new mb(a,\nb,c,d,e,f,g))}function Ub(a,b,c,d,e,f){D.call(this);this.type=\"RingBufferGeometry\";this.parameters={innerRadius:a,outerRadius:b,thetaSegments:c,phiSegments:d,thetaStart:e,thetaLength:f};a=a||20;b=b||50;e=void 0!==e?e:0;f=void 0!==f?f:2*Math.PI;c=void 0!==c?Math.max(3,c):8;d=void 0!==d?Math.max(1,d):1;var g=(c+1)*(d+1),h=c*d*6,h=new y(new (65535<h?Uint32Array:Uint16Array)(h),1),k=new y(new Float32Array(3*g),3),m=new y(new Float32Array(3*g),3),g=new y(new Float32Array(2*g),2),x=0,p=0,n,l=a,w=(b-a)/\nd,u=new q,F=new C,t;for(a=0;a<=d;a++){for(t=0;t<=c;t++)n=e+t/c*f,u.x=l*Math.cos(n),u.y=l*Math.sin(n),k.setXYZ(x,u.x,u.y,u.z),m.setXYZ(x,0,0,1),F.x=(u.x/b+1)/2,F.y=(u.y/b+1)/2,g.setXY(x,F.x,F.y),x++;l+=w}for(a=0;a<d;a++)for(b=a*(c+1),t=0;t<c;t++)e=n=t+b,f=n+c+1,x=n+c+2,n+=1,h.setX(p,e),p++,h.setX(p,f),p++,h.setX(p,x),p++,h.setX(p,e),p++,h.setX(p,x),p++,h.setX(p,n),p++;this.setIndex(h);this.addAttribute(\"position\",k);this.addAttribute(\"normal\",m);this.addAttribute(\"uv\",g)}function Oc(a,b,c,d,e,f){S.call(this);\nthis.type=\"RingGeometry\";this.parameters={innerRadius:a,outerRadius:b,thetaSegments:c,phiSegments:d,thetaStart:e,thetaLength:f};this.fromBufferGeometry(new Ub(a,b,c,d,e,f))}function Pc(a,b,c,d){S.call(this);this.type=\"PlaneGeometry\";this.parameters={width:a,height:b,widthSegments:c,heightSegments:d};this.fromBufferGeometry(new ib(a,b,c,d))}function Vb(a,b,c,d){D.call(this);this.type=\"LatheBufferGeometry\";this.parameters={points:a,segments:b,phiStart:c,phiLength:d};b=Math.floor(b)||12;c=c||0;d=d||\n2*Math.PI;d=Q.clamp(d,0,2*Math.PI);for(var e=(b+1)*a.length,f=b*a.length*6,g=new y(new (65535<f?Uint32Array:Uint16Array)(f),1),h=new y(new Float32Array(3*e),3),k=new y(new Float32Array(2*e),2),m=0,x=0,p=1/b,n=new q,l=new C,e=0;e<=b;e++)for(var f=c+e*p*d,w=Math.sin(f),u=Math.cos(f),f=0;f<=a.length-1;f++)n.x=a[f].x*w,n.y=a[f].y,n.z=a[f].x*u,h.setXYZ(m,n.x,n.y,n.z),l.x=e/b,l.y=f/(a.length-1),k.setXY(m,l.x,l.y),m++;for(e=0;e<b;e++)for(f=0;f<a.length-1;f++)c=f+e*a.length,m=c+a.length,p=c+a.length+1,n=\nc+1,g.setX(x,c),x++,g.setX(x,m),x++,g.setX(x,n),x++,g.setX(x,m),x++,g.setX(x,p),x++,g.setX(x,n),x++;this.setIndex(g);this.addAttribute(\"position\",h);this.addAttribute(\"uv\",k);this.computeVertexNormals();if(d===2*Math.PI)for(d=this.attributes.normal.array,g=new q,h=new q,k=new q,c=b*a.length*3,f=e=0;e<a.length;e++,f+=3)g.x=d[f+0],g.y=d[f+1],g.z=d[f+2],h.x=d[c+f+0],h.y=d[c+f+1],h.z=d[c+f+2],k.addVectors(g,h).normalize(),d[f+0]=d[c+f+0]=k.x,d[f+1]=d[c+f+1]=k.y,d[f+2]=d[c+f+2]=k.z}function Qc(a,b,c,d){S.call(this);\nthis.type=\"LatheGeometry\";this.parameters={points:a,segments:b,phiStart:c,phiLength:d};this.fromBufferGeometry(new Vb(a,b,c,d));this.mergeVertices()}function Wb(a,b){function c(a){var c,h,m=d.length/3;a=a.extractPoints(b);var l=a.shape,u=a.holes;if(!1===pa.isClockWise(l))for(l=l.reverse(),a=0,c=u.length;a<c;a++)h=u[a],!0===pa.isClockWise(h)&&(u[a]=h.reverse());var q=pa.triangulateShape(l,u);a=0;for(c=u.length;a<c;a++)h=u[a],l=l.concat(h);a=0;for(c=l.length;a<c;a++)h=l[a],d.push(h.x,h.y,0),e.push(0,\n0,1),f.push(h.x,h.y);a=0;for(c=q.length;a<c;a++)l=q[a],g.push(l[0]+m,l[1]+m,l[2]+m),k+=3}D.call(this);this.type=\"ShapeBufferGeometry\";this.parameters={shapes:a,curveSegments:b};b=b||12;var d=[],e=[],f=[],g=[],h=0,k=0;if(!1===Array.isArray(a))c(a);else for(var m=0;m<a.length;m++)c(a[m]),this.addGroup(h,k,m),h+=k,k=0;this.setIndex(new (65535<g.length?Ua:Ra)(g,1));this.addAttribute(\"position\",new X(d,3));this.addAttribute(\"normal\",new X(e,3));this.addAttribute(\"uv\",new X(f,2))}function Xb(a,b){S.call(this);\nthis.type=\"ShapeGeometry\";\"object\"===typeof b&&(console.warn(\"THREE.ShapeGeometry: Options parameter has been removed.\"),b=b.curveSegments);this.parameters={shapes:a,curveSegments:b};this.fromBufferGeometry(new Wb(a,b));this.mergeVertices()}function Yb(a,b){function c(a,b){return a-b}D.call(this);var d=Math.cos(Q.DEG2RAD*(void 0!==b?b:1)),e=[0,0],f={},g=[\"a\",\"b\",\"c\"],h;a.isBufferGeometry?(h=new S,h.fromBufferGeometry(a)):h=a.clone();h.mergeVertices();h.computeFaceNormals();var k=h.vertices;h=h.faces;\nfor(var m=0,l=h.length;m<l;m++)for(var p=h[m],n=0;3>n;n++){e[0]=p[g[n]];e[1]=p[g[(n+1)%3]];e.sort(c);var r=e.toString();void 0===f[r]?f[r]={vert1:e[0],vert2:e[1],face1:m,face2:void 0}:f[r].face2=m}e=[];for(r in f)if(g=f[r],void 0===g.face2||h[g.face1].normal.dot(h[g.face2].normal)<=d)m=k[g.vert1],e.push(m.x),e.push(m.y),e.push(m.z),m=k[g.vert2],e.push(m.x),e.push(m.y),e.push(m.z);this.addAttribute(\"position\",new X(e,3))}function Wa(a,b,c,d,e,f,g,h){function k(c){var e,f,k,n=new C,p=new q,l=0,x=!0===\nc?a:b,M=!0===c?1:-1;f=t;for(e=1;e<=d;e++)w.setXYZ(t,0,z*M,0),u.setXYZ(t,0,M,0),n.x=.5,n.y=.5,F.setXY(t,n.x,n.y),t++;k=t;for(e=0;e<=d;e++){var y=e/d*h+g,D=Math.cos(y),y=Math.sin(y);p.x=x*y;p.y=z*M;p.z=x*D;w.setXYZ(t,p.x,p.y,p.z);u.setXYZ(t,0,M,0);n.x=.5*D+.5;n.y=.5*y*M+.5;F.setXY(t,n.x,n.y);t++}for(e=0;e<d;e++)n=f+e,p=k+e,!0===c?(r.setX(v,p),v++,r.setX(v,p+1)):(r.setX(v,p+1),v++,r.setX(v,p)),v++,r.setX(v,n),v++,l+=3;m.addGroup(A,l,!0===c?1:2);A+=l}D.call(this);this.type=\"CylinderBufferGeometry\";this.parameters=\n{radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};var m=this;a=void 0!==a?a:20;b=void 0!==b?b:20;c=void 0!==c?c:100;d=Math.floor(d)||8;e=Math.floor(e)||1;f=void 0!==f?f:!1;g=void 0!==g?g:0;h=void 0!==h?h:2*Math.PI;var l=0;!1===f&&(0<a&&l++,0<b&&l++);var p=function(){var a=(d+1)*(e+1);!1===f&&(a+=(d+1)*l+d*l);return a}(),n=function(){var a=d*e*6;!1===f&&(a+=d*l*3);return a}(),r=new y(new (65535<n?Uint32Array:Uint16Array)(n),1),w=new y(new Float32Array(3*\np),3),u=new y(new Float32Array(3*p),3),F=new y(new Float32Array(2*p),2),t=0,v=0,M=[],z=c/2,A=0;(function(){var f,k,n=new q,p=new q,l=0,x=(b-a)/c;for(k=0;k<=e;k++){var y=[],C=k/e,D=C*(b-a)+a;for(f=0;f<=d;f++){var G=f/d,P=G*h+g,R=Math.sin(P),P=Math.cos(P);p.x=D*R;p.y=-C*c+z;p.z=D*P;w.setXYZ(t,p.x,p.y,p.z);n.set(R,x,P).normalize();u.setXYZ(t,n.x,n.y,n.z);F.setXY(t,G,1-C);y.push(t);t++}M.push(y)}for(f=0;f<d;f++)for(k=0;k<e;k++)n=M[k+1][f],p=M[k+1][f+1],x=M[k][f+1],r.setX(v,M[k][f]),v++,r.setX(v,n),v++,\nr.setX(v,x),v++,r.setX(v,n),v++,r.setX(v,p),v++,r.setX(v,x),v++,l+=6;m.addGroup(A,l,0);A+=l})();!1===f&&(0<a&&k(!0),0<b&&k(!1));this.setIndex(r);this.addAttribute(\"position\",w);this.addAttribute(\"normal\",u);this.addAttribute(\"uv\",F)}function nb(a,b,c,d,e,f,g,h){S.call(this);this.type=\"CylinderGeometry\";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new Wa(a,b,c,d,e,f,g,h));this.mergeVertices()}\nfunction Rc(a,b,c,d,e,f,g){nb.call(this,0,a,b,c,d,e,f,g);this.type=\"ConeGeometry\";this.parameters={radius:a,height:b,radialSegments:c,heightSegments:d,openEnded:e,thetaStart:f,thetaLength:g}}function Sc(a,b,c,d,e,f,g){Wa.call(this,0,a,b,c,d,e,f,g);this.type=\"ConeBufferGeometry\";this.parameters={radius:a,height:b,radialSegments:c,heightSegments:d,openEnded:e,thetaStart:f,thetaLength:g}}function Zb(a,b,c,d){D.call(this);this.type=\"CircleBufferGeometry\";this.parameters={radius:a,segments:b,thetaStart:c,\nthetaLength:d};a=a||50;b=void 0!==b?Math.max(3,b):8;c=void 0!==c?c:0;d=void 0!==d?d:2*Math.PI;var e=b+2,f=new Float32Array(3*e),g=new Float32Array(3*e),e=new Float32Array(2*e);g[2]=1;e[0]=.5;e[1]=.5;for(var h=0,k=3,m=2;h<=b;h++,k+=3,m+=2){var l=c+h/b*d;f[k]=a*Math.cos(l);f[k+1]=a*Math.sin(l);g[k+2]=1;e[m]=(f[k]/a+1)/2;e[m+1]=(f[k+1]/a+1)/2}c=[];for(k=1;k<=b;k++)c.push(k,k+1,0);this.setIndex(new y(new Uint16Array(c),1));this.addAttribute(\"position\",new y(f,3));this.addAttribute(\"normal\",new y(g,3));\nthis.addAttribute(\"uv\",new y(e,2));this.boundingSphere=new Fa(new q,a)}function Tc(a,b,c,d){S.call(this);this.type=\"CircleGeometry\";this.parameters={radius:a,segments:b,thetaStart:c,thetaLength:d};this.fromBufferGeometry(new Zb(a,b,c,d))}function $b(a,b,c,d,e,f){S.call(this);this.type=\"BoxGeometry\";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new hb(a,b,c,d,e,f));this.mergeVertices()}function ac(){Ia.call(this,{uniforms:Ja.merge([U.lights,\n{opacity:{value:1}}]),vertexShader:Z.shadow_vert,fragmentShader:Z.shadow_frag});this.transparent=this.lights=!0;Object.defineProperties(this,{opacity:{enumerable:!0,get:function(){return this.uniforms.opacity.value},set:function(a){this.uniforms.opacity.value=a}}})}function bc(a){Ia.call(this,a);this.type=\"RawShaderMaterial\"}function Uc(a){this.uuid=Q.generateUUID();this.type=\"MultiMaterial\";this.materials=Array.isArray(a)?a:[];this.visible=!0}function Pa(a){W.call(this);this.defines={STANDARD:\"\"};\nthis.type=\"MeshStandardMaterial\";this.color=new N(16777215);this.metalness=this.roughness=.5;this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new N(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new C(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.envMap=this.alphaMap=this.metalnessMap=this.roughnessMap=null;this.envMapIntensity=1;this.refractionRatio=\n.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap=\"round\";this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)}function ob(a){Pa.call(this);this.defines={PHYSICAL:\"\"};this.type=\"MeshPhysicalMaterial\";this.reflectivity=.5;this.clearCoatRoughness=this.clearCoat=0;this.setValues(a)}function Ca(a){W.call(this);this.type=\"MeshPhongMaterial\";this.color=new N(16777215);this.specular=new N(1118481);this.shininess=30;this.lightMap=this.map=null;\nthis.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new N(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new C(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.envMap=this.alphaMap=this.specularMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap=\"round\";this.morphNormals=\nthis.morphTargets=this.skinning=!1;this.setValues(a)}function pb(a){Ca.call(this);this.defines={TOON:\"\"};this.type=\"MeshToonMaterial\";this.gradientMap=null;this.setValues(a)}function qb(a){W.call(this,a);this.type=\"MeshNormalMaterial\";this.bumpMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new C(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.morphNormals=this.morphTargets=this.skinning=this.lights=this.fog=\n!1;this.setValues(a)}function rb(a){W.call(this);this.type=\"MeshLambertMaterial\";this.color=new N(16777215);this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new N(0);this.emissiveIntensity=1;this.envMap=this.alphaMap=this.specularMap=this.emissiveMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap=\"round\";this.morphNormals=this.morphTargets=\nthis.skinning=!1;this.setValues(a)}function sb(a){W.call(this);this.type=\"LineDashedMaterial\";this.color=new N(16777215);this.scale=this.linewidth=1;this.dashSize=3;this.gapSize=1;this.lights=!1;this.setValues(a)}function Pd(a,b,c){var d=this,e=!1,f=0,g=0;this.onStart=void 0;this.onLoad=a;this.onProgress=b;this.onError=c;this.itemStart=function(a){g++;if(!1===e&&void 0!==d.onStart)d.onStart(a,f,g);e=!0};this.itemEnd=function(a){f++;if(void 0!==d.onProgress)d.onProgress(a,f,g);if(f===g&&(e=!1,void 0!==\nd.onLoad))d.onLoad()};this.itemError=function(a){if(void 0!==d.onError)d.onError(a)}}function Ma(a){this.manager=void 0!==a?a:va}function Ee(a){this.manager=void 0!==a?a:va;this._parser=null}function Qd(a){this.manager=void 0!==a?a:va;this._parser=null}function Vc(a){this.manager=void 0!==a?a:va}function Rd(a){this.manager=void 0!==a?a:va}function md(a){this.manager=void 0!==a?a:va}function na(a,b){G.call(this);this.type=\"Light\";this.color=new N(a);this.intensity=void 0!==b?b:1;this.receiveShadow=\nvoid 0}function nd(a,b,c){na.call(this,a,c);this.type=\"HemisphereLight\";this.castShadow=void 0;this.position.copy(G.DefaultUp);this.updateMatrix();this.groundColor=new N(b)}function tb(a){this.camera=a;this.bias=0;this.radius=1;this.mapSize=new C(512,512);this.map=null;this.matrix=new H}function od(){tb.call(this,new Ha(50,1,.5,500))}function pd(a,b,c,d,e,f){na.call(this,a,b);this.type=\"SpotLight\";this.position.copy(G.DefaultUp);this.updateMatrix();this.target=new G;Object.defineProperty(this,\"power\",\n{get:function(){return this.intensity*Math.PI},set:function(a){this.intensity=a/Math.PI}});this.distance=void 0!==c?c:0;this.angle=void 0!==d?d:Math.PI/3;this.penumbra=void 0!==e?e:0;this.decay=void 0!==f?f:1;this.shadow=new od}function qd(a,b,c,d){na.call(this,a,b);this.type=\"PointLight\";Object.defineProperty(this,\"power\",{get:function(){return 4*this.intensity*Math.PI},set:function(a){this.intensity=a/(4*Math.PI)}});this.distance=void 0!==c?c:0;this.decay=void 0!==d?d:1;this.shadow=new tb(new Ha(90,\n1,.5,500))}function rd(a){tb.call(this,new Hb(-5,5,5,-5,.5,500))}function sd(a,b){na.call(this,a,b);this.type=\"DirectionalLight\";this.position.copy(G.DefaultUp);this.updateMatrix();this.target=new G;this.shadow=new rd}function td(a,b){na.call(this,a,b);this.type=\"AmbientLight\";this.castShadow=void 0}function qa(a,b,c,d){this.parameterPositions=a;this._cachedIndex=0;this.resultBuffer=void 0!==d?d:new b.constructor(c);this.sampleValues=b;this.valueSize=c}function ud(a,b,c,d){qa.call(this,a,b,c,d);this._offsetNext=\nthis._weightNext=this._offsetPrev=this._weightPrev=-0}function Wc(a,b,c,d){qa.call(this,a,b,c,d)}function vd(a,b,c,d){qa.call(this,a,b,c,d)}function ub(a,b,c,d){if(void 0===a)throw Error(\"track name is undefined\");if(void 0===b||0===b.length)throw Error(\"no keyframes in track named \"+a);this.name=a;this.times=ba.convertArray(b,this.TimeBufferType);this.values=ba.convertArray(c,this.ValueBufferType);this.setInterpolation(d||this.DefaultInterpolation);this.validate();this.optimize()}function cc(a,b,\nc,d){ub.call(this,a,b,c,d)}function wd(a,b,c,d){qa.call(this,a,b,c,d)}function Xc(a,b,c,d){ub.call(this,a,b,c,d)}function dc(a,b,c,d){ub.call(this,a,b,c,d)}function xd(a,b,c,d){ub.call(this,a,b,c,d)}function yd(a,b,c){ub.call(this,a,b,c)}function zd(a,b,c,d){ub.call(this,a,b,c,d)}function vb(a,b,c,d){ub.apply(this,arguments)}function ta(a,b,c){this.name=a;this.tracks=c;this.duration=void 0!==b?b:-1;this.uuid=Q.generateUUID();0>this.duration&&this.resetDuration();this.optimize()}function Ad(a){this.manager=\nvoid 0!==a?a:va;this.textures={}}function Sd(a){this.manager=void 0!==a?a:va}function wb(){this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){}}function Td(a){\"boolean\"===typeof a&&(console.warn(\"THREE.JSONLoader: showStatus parameter has been removed from constructor.\"),a=void 0);this.manager=void 0!==a?a:va;this.withCredentials=!1}function Fe(a){this.manager=void 0!==a?a:va;this.texturePath=\"\"}function wa(){}function Qa(a,b){this.v1=a;this.v2=b}function Yc(){this.curves=\n[];this.autoClose=!1}function Xa(a,b,c,d,e,f,g,h){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g;this.aRotation=h||0}function xb(a){this.points=void 0===a?[]:a}function yb(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d}function zb(a,b,c){this.v0=a;this.v1=b;this.v2=c}function Ab(){Zc.apply(this,arguments);this.holes=[]}function Zc(a){Yc.call(this);this.currentPoint=new C;a&&this.fromPoints(a)}function Ud(){this.subPaths=[];this.currentPath=\nnull}function Vd(a){this.data=a}function Ge(a){this.manager=void 0!==a?a:va}function Wd(a){this.manager=void 0!==a?a:va}function Xd(a,b,c,d){na.call(this,a,b);this.type=\"RectAreaLight\";this.position.set(0,1,0);this.updateMatrix();this.width=void 0!==c?c:10;this.height=void 0!==d?d:10}function He(){this.type=\"StereoCamera\";this.aspect=1;this.eyeSep=.064;this.cameraL=new Ha;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new Ha;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=\n!1}function Bd(a,b,c){G.call(this);this.type=\"CubeCamera\";var d=new Ha(90,1,a,b);d.up.set(0,-1,0);d.lookAt(new q(1,0,0));this.add(d);var e=new Ha(90,1,a,b);e.up.set(0,-1,0);e.lookAt(new q(-1,0,0));this.add(e);var f=new Ha(90,1,a,b);f.up.set(0,0,1);f.lookAt(new q(0,1,0));this.add(f);var g=new Ha(90,1,a,b);g.up.set(0,0,-1);g.lookAt(new q(0,-1,0));this.add(g);var h=new Ha(90,1,a,b);h.up.set(0,-1,0);h.lookAt(new q(0,0,1));this.add(h);var k=new Ha(90,1,a,b);k.up.set(0,-1,0);k.lookAt(new q(0,0,-1));this.add(k);\nthis.renderTarget=new Eb(c,c,{format:1022,magFilter:1006,minFilter:1006});this.updateCubeMap=function(a,b){null===this.parent&&this.updateMatrixWorld();var c=this.renderTarget,n=c.texture.generateMipmaps;c.texture.generateMipmaps=!1;c.activeCubeFace=0;a.render(b,d,c);c.activeCubeFace=1;a.render(b,e,c);c.activeCubeFace=2;a.render(b,f,c);c.activeCubeFace=3;a.render(b,g,c);c.activeCubeFace=4;a.render(b,h,c);c.texture.generateMipmaps=n;c.activeCubeFace=5;a.render(b,k,c);a.setRenderTarget(null)}}function Yd(){G.call(this);\nthis.type=\"AudioListener\";this.context=Zd.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null}function ec(a){G.call(this);this.type=\"Audio\";this.context=a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.buffer=null;this.loop=!1;this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType=\"empty\";this.filters=[]}function $d(a){ec.call(this,a);this.panner=\nthis.context.createPanner();this.panner.connect(this.gain)}function ae(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)}function Cd(a,b,c){this.binding=a;this.valueSize=c;a=Float64Array;switch(b){case \"quaternion\":b=this._slerp;break;case \"string\":case \"bool\":a=Array;b=this._select;break;default:b=this._lerp}this.buffer=new a(4*c);this._mixBufferRegion=b;this.referenceCount=\nthis.useCount=this.cumulativeWeight=0}function ka(a,b,c){this.path=b;this.parsedPath=c||ka.parseTrackName(b);this.node=ka.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function be(a){this.uuid=Q.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var b={};this._indicesByUUID=b;for(var c=0,d=arguments.length;c!==d;++c)b[arguments[c].uuid]=c;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var e=this;this.stats={objects:{get total(){return e._objects.length},\nget inUse(){return this.total-e.nCachedObjects_}},get bindingsPerObject(){return e._bindings.length}}}function ce(a,b,c){this._mixer=a;this._clip=b;this._localRoot=c||null;a=b.tracks;b=a.length;c=Array(b);for(var d={endingStart:2400,endingEnd:2400},e=0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null;this.loop=\n2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity;this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function de(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function Dd(a,b){\"string\"===typeof a&&(console.warn(\"THREE.Uniform: Type parameter is no longer needed.\"),a=b);this.value=a}function Bb(){D.call(this);\nthis.type=\"InstancedBufferGeometry\";this.maxInstancedCount=void 0}function ee(a,b,c,d){this.uuid=Q.generateUUID();this.data=a;this.itemSize=b;this.offset=c;this.normalized=!0===d}function fc(a,b){this.uuid=Q.generateUUID();this.array=a;this.stride=b;this.count=void 0!==a?a.length/b:0;this.dynamic=!1;this.updateRange={offset:0,count:-1};this.onUploadCallback=function(){};this.version=0}function gc(a,b,c){fc.call(this,a,b);this.meshPerAttribute=c||1}function hc(a,b,c){y.call(this,a,b);this.meshPerAttribute=\nc||1}function fe(a,b,c,d){this.ray=new bb(a,b);this.near=c||0;this.far=d||Infinity;this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn(\"THREE.Raycaster: params.PointCloud has been renamed to params.Points.\");return this.Points}}})}function Ie(a,b){return a.distance-b.distance}function ge(a,b,c,d){if(!1!==a.visible&&(a.raycast(b,c),!0===d)){a=a.children;d=0;for(var e=a.length;d<e;d++)ge(a[d],b,c,!0)}}function he(a){this.autoStart=\nvoid 0!==a?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}function ie(a,b,c){this.radius=void 0!==a?a:1;this.phi=void 0!==b?b:0;this.theta=void 0!==c?c:0;return this}function je(a,b,c){this.radius=void 0!==a?a:1;this.theta=void 0!==b?b:0;this.y=void 0!==c?c:0;return this}function ua(a,b){Ba.call(this,a,b);this.animationsMap={};this.animationsList=[];var c=this.geometry.morphTargets.length;this.createAnimation(\"__default\",0,c-1,c/1);this.setAnimationWeight(\"__default\",1)}function $c(a){G.call(this);\nthis.material=a;this.render=function(a){}}function ad(a,b,c,d){this.object=a;this.size=void 0!==b?b:1;a=void 0!==c?c:16711680;d=void 0!==d?d:1;b=0;(c=this.object.geometry)&&c.isGeometry?b=3*c.faces.length:c&&c.isBufferGeometry&&(b=c.attributes.normal.count);c=new D;b=new X(6*b,3);c.addAttribute(\"position\",b);fa.call(this,c,new ia({color:a,linewidth:d}));this.matrixAutoUpdate=!1;this.update()}function ic(a){G.call(this);this.light=a;this.light.updateMatrixWorld();this.matrix=a.matrixWorld;this.matrixAutoUpdate=\n!1;a=new D;for(var b=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1],c=0,d=1;32>c;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f),1)}a.addAttribute(\"position\",new X(b,3));b=new ia({fog:!1});this.cone=new fa(a,b);this.add(this.cone);this.update()}function jc(a){this.bones=this.getBoneList(a);for(var b=new D,c=[],d=[],e=new N(0,0,1),f=new N(0,1,0),g=0;g<this.bones.length;g++){var h=this.bones[g];h.parent&&h.parent.isBone&&(c.push(0,\n0,0),c.push(0,0,0),d.push(e.r,e.g,e.b),d.push(f.r,f.g,f.b))}b.addAttribute(\"position\",new X(c,3));b.addAttribute(\"color\",new X(d,3));c=new ia({vertexColors:2,depthTest:!1,depthWrite:!1,transparent:!0});fa.call(this,b,c);this.root=a;this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.update()}function kc(a,b){this.light=a;this.light.updateMatrixWorld();var c=new mb(b,4,2),d=new Ka({wireframe:!0,fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);Ba.call(this,c,d);this.matrix=\nthis.light.matrixWorld;this.matrixAutoUpdate=!1}function lc(a){G.call(this);this.light=a;this.light.updateMatrixWorld();var b=new Ka({color:a.color,fog:!1});a=new Ka({color:a.color,fog:!1,wireframe:!0});var c=new D;c.addAttribute(\"position\",new y(new Float32Array(18),3));this.add(new Ba(c,b));this.add(new Ba(c,a));this.update()}function mc(a,b){G.call(this);this.light=a;this.light.updateMatrixWorld();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;var c=new lb(b);c.rotateY(.5*Math.PI);var d=new Ka({vertexColors:2,\nwireframe:!0}),e=c.getAttribute(\"position\"),e=new Float32Array(3*e.count);c.addAttribute(\"color\",new y(e,3));this.add(new Ba(c,d));this.update()}function bd(a,b,c,d){a=a||10;b=b||10;c=new N(void 0!==c?c:4473924);d=new N(void 0!==d?d:8947848);for(var e=b/2,f=2*a/b,g=[],h=[],k=0,m=0,l=-a;k<=b;k++,l+=f){g.push(-a,0,l,a,0,l);g.push(l,0,-a,l,0,a);var p=k===e?c:d;p.toArray(h,m);m+=3;p.toArray(h,m);m+=3;p.toArray(h,m);m+=3;p.toArray(h,m);m+=3}a=new D;a.addAttribute(\"position\",new X(g,3));a.addAttribute(\"color\",\nnew X(h,3));g=new ia({vertexColors:2});fa.call(this,a,g)}function Ed(a,b,c,d,e,f){a=a||10;b=b||16;c=c||8;d=d||64;e=new N(void 0!==e?e:4473924);f=new N(void 0!==f?f:8947848);var g=[],h=[],k,m,l,p,n;for(l=0;l<=b;l++)m=l/b*2*Math.PI,k=Math.sin(m)*a,m=Math.cos(m)*a,g.push(0,0,0),g.push(k,0,m),n=l&1?e:f,h.push(n.r,n.g,n.b),h.push(n.r,n.g,n.b);for(l=0;l<=c;l++)for(n=l&1?e:f,p=a-a/c*l,b=0;b<d;b++)m=b/d*2*Math.PI,k=Math.sin(m)*p,m=Math.cos(m)*p,g.push(k,0,m),h.push(n.r,n.g,n.b),m=(b+1)/d*2*Math.PI,k=Math.sin(m)*\np,m=Math.cos(m)*p,g.push(k,0,m),h.push(n.r,n.g,n.b);a=new D;a.addAttribute(\"position\",new X(g,3));a.addAttribute(\"color\",new X(h,3));g=new ia({vertexColors:2});fa.call(this,a,g)}function cd(a,b,c,d){this.object=a;this.size=void 0!==b?b:1;a=void 0!==c?c:16776960;d=void 0!==d?d:1;b=0;(c=this.object.geometry)&&c.isGeometry?b=c.faces.length:console.warn(\"THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.\");c=new D;b=new X(6*b,3);c.addAttribute(\"position\",\nb);fa.call(this,c,new ia({color:a,linewidth:d}));this.matrixAutoUpdate=!1;this.update()}function nc(a,b){G.call(this);this.light=a;this.light.updateMatrixWorld();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;void 0===b&&(b=1);var c=new D;c.addAttribute(\"position\",new X([-b,b,0,b,b,0,b,-b,0,-b,-b,0,-b,b,0],3));var d=new ia({fog:!1});this.add(new Va(c,d));c=new D;c.addAttribute(\"position\",new X([0,0,0,0,0,1],3));this.add(new Va(c,d));this.update()}function dd(a){function b(a,b,d){c(a,d);c(b,d)}\nfunction c(a,b){f.push(0,0,0);g.push(b.r,b.g,b.b);void 0===h[a]&&(h[a]=[]);h[a].push(f.length/3-1)}var d=new D,e=new ia({color:16777215,vertexColors:1}),f=[],g=[],h={},k=new N(16755200),m=new N(16711680),l=new N(43775),p=new N(16777215),n=new N(3355443);b(\"n1\",\"n2\",k);b(\"n2\",\"n4\",k);b(\"n4\",\"n3\",k);b(\"n3\",\"n1\",k);b(\"f1\",\"f2\",k);b(\"f2\",\"f4\",k);b(\"f4\",\"f3\",k);b(\"f3\",\"f1\",k);b(\"n1\",\"f1\",k);b(\"n2\",\"f2\",k);b(\"n3\",\"f3\",k);b(\"n4\",\"f4\",k);b(\"p\",\"n1\",m);b(\"p\",\"n2\",m);b(\"p\",\"n3\",m);b(\"p\",\"n4\",m);b(\"u1\",\"u2\",\nl);b(\"u2\",\"u3\",l);b(\"u3\",\"u1\",l);b(\"c\",\"t\",p);b(\"p\",\"c\",n);b(\"cn1\",\"cn2\",n);b(\"cn3\",\"cn4\",n);b(\"cf1\",\"cf2\",n);b(\"cf3\",\"cf4\",n);d.addAttribute(\"position\",new X(f,3));d.addAttribute(\"color\",new X(g,3));fa.call(this,d,e);this.camera=a;this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=h;this.update()}function oc(a,b){void 0===b&&(b=16776960);var c=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),\nd=new Float32Array(24),e=new D;e.setIndex(new y(c,1));e.addAttribute(\"position\",new y(d,3));fa.call(this,e,new ia({color:b}));void 0!==a&&this.update(a)}function Cb(a,b,c,d,e,f){G.call(this);void 0===d&&(d=16776960);void 0===c&&(c=1);void 0===e&&(e=.2*c);void 0===f&&(f=.2*e);this.position.copy(b);this.line=new Va(Je,new ia({color:d}));this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new Ba(Ke,new Ka({color:d}));this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(a);this.setLength(c,\ne,f)}function Fd(a){a=a||1;var b=[0,0,0,a,0,0,0,0,0,0,a,0,0,0,0,0,0,a];a=new D;a.addAttribute(\"position\",new X(b,3));a.addAttribute(\"color\",new X([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));b=new ia({vertexColors:2});fa.call(this,a,b)}function Gd(a,b,c,d,e,f){Xa.call(this,a,b,c,c,d,e,f)}function Le(a){console.warn(\"THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.\");ke.call(this,a);this.type=\"catmullrom\";this.closed=!0}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,\n-52));void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0<a?1:+a});void 0===Function.prototype.name&&Object.defineProperty(Function.prototype,\"name\",{get:function(){return this.toString().match(/^\\s*function\\s*([^\\(\\s]*)/)[1]}});void 0===Object.assign&&function(){Object.assign=function(a){if(void 0===a||null===a)throw new TypeError(\"Cannot convert undefined or null to object\");for(var b=Object(a),c=1;c<arguments.length;c++){var d=arguments[c];if(void 0!==d&&null!==d)for(var e in d)Object.prototype.hasOwnProperty.call(d,\ne)&&(b[e]=d[e])}return b}}();Object.assign(oa.prototype,{addEventListener:function(a,b){void 0===this._listeners&&(this._listeners={});var c=this._listeners;void 0===c[a]&&(c[a]=[]);-1===c[a].indexOf(b)&&c[a].push(b)},hasEventListener:function(a,b){if(void 0===this._listeners)return!1;var c=this._listeners;return void 0!==c[a]&&-1!==c[a].indexOf(b)},removeEventListener:function(a,b){if(void 0!==this._listeners){var c=this._listeners[a];if(void 0!==c){var d=c.indexOf(b);-1!==d&&c.splice(d,1)}}},dispatchEvent:function(a){if(void 0!==\nthis._listeners){var b=this._listeners[a.type];if(void 0!==b){a.target=this;var c=[],d,e=b.length;for(d=0;d<e;d++)c[d]=b[d];for(d=0;d<e;d++)c[d].call(this,a)}}}});var Me={NoBlending:0,NormalBlending:1,AdditiveBlending:2,SubtractiveBlending:3,MultiplyBlending:4,CustomBlending:5},Ne={UVMapping:300,CubeReflectionMapping:301,CubeRefractionMapping:302,EquirectangularReflectionMapping:303,EquirectangularRefractionMapping:304,SphericalReflectionMapping:305,CubeUVReflectionMapping:306,CubeUVRefractionMapping:307},\nle={RepeatWrapping:1E3,ClampToEdgeWrapping:1001,MirroredRepeatWrapping:1002},me={NearestFilter:1003,NearestMipMapNearestFilter:1004,NearestMipMapLinearFilter:1005,LinearFilter:1006,LinearMipMapNearestFilter:1007,LinearMipMapLinearFilter:1008},Q={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){var a=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\".split(\"\"),b=Array(36),c=0,d;return function(){for(var e=0;36>e;e++)8===e||13===e||18===e||23===e?b[e]=\"-\":14===e?b[e]=\"4\":\n(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19===e?d&3|8:d]);return b.join(\"\")}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+\n10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(a){return a*Q.DEG2RAD},radToDeg:function(a){return a*Q.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},nearestPowerOfTwo:function(a){return Math.pow(2,Math.round(Math.log(a)/Math.LN2))},nextPowerOfTwo:function(a){a--;a|=a>>1;a|=a>>2;a|=a>>4;a|=a>>8;a|=a>>16;a++;return a}};C.prototype={constructor:C,\nisVector2:!0,get width(){return this.x},set width(a){this.x=a},get height(){return this.y},set height(a){this.y=a},set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error(\"index is out of range: \"+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;\ndefault:throw Error(\"index is out of range: \"+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn(\"THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,\nb){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn(\"THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a):this.y=this.x=0;\nreturn this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new C,b=new C);a.set(c,\nc);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.multiplyScalar(Math.max(a,Math.min(b,c))/c)},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);\nreturn this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},\ndistanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},distanceToManhattan:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+\n1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromAttribute:function(a,b,c){void 0!==c&&console.warn(\"THREE.Vector2: offset has been removed from .fromAttribute().\");this.x=a.getX(b);this.y=a.getY(b);return this},rotateAround:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=this.x-a.x,f=this.y-a.y;this.x=e*c-f*d+a.x;this.y=e*d+f*c+a.y;return this}};var Oe=0;ea.DEFAULT_IMAGE=void 0;ea.DEFAULT_MAPPING=300;ea.prototype={constructor:ea,isTexture:!0,\nset needsUpdate(a){!0===a&&this.version++},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.image=a.image;this.mipmaps=a.mipmaps.slice(0);this.mapping=a.mapping;this.wrapS=a.wrapS;this.wrapT=a.wrapT;this.magFilter=a.magFilter;this.minFilter=a.minFilter;this.anisotropy=a.anisotropy;this.format=a.format;this.type=a.type;this.offset.copy(a.offset);this.repeat.copy(a.repeat);this.generateMipmaps=a.generateMipmaps;this.premultiplyAlpha=a.premultiplyAlpha;this.flipY=a.flipY;\nthis.unpackAlignment=a.unpackAlignment;this.encoding=a.encoding;return this},toJSON:function(a){if(void 0!==a.textures[this.uuid])return a.textures[this.uuid];var b={metadata:{version:4.4,type:\"Texture\",generator:\"Texture.toJSON\"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],wrap:[this.wrapS,this.wrapT],minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY};if(void 0!==this.image){var c=\nthis.image;void 0===c.uuid&&(c.uuid=Q.generateUUID());if(void 0===a.images[c.uuid]){var d=a.images,e=c.uuid,f=c.uuid,g;void 0!==c.toDataURL?g=c:(g=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\"),g.width=c.width,g.height=c.height,g.getContext(\"2d\").drawImage(c,0,0,c.width,c.height));g=2048<g.width||2048<g.height?g.toDataURL(\"image/jpeg\",.6):g.toDataURL(\"image/png\");d[e]={uuid:f,url:g}}b.image=c.uuid}return a.textures[this.uuid]=b},dispose:function(){this.dispatchEvent({type:\"dispose\"})},\ntransformUv:function(a){if(300===this.mapping){a.multiply(this.repeat);a.add(this.offset);if(0>a.x||1<a.x)switch(this.wrapS){case 1E3:a.x-=Math.floor(a.x);break;case 1001:a.x=0>a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1<a.y)switch(this.wrapT){case 1E3:a.y-=Math.floor(a.y);break;case 1001:a.y=0>a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)-a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}};Object.assign(ea.prototype,\noa.prototype);ga.prototype={constructor:ga,isVector4:!0,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error(\"index is out of range: \"+\na);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error(\"index is out of range: \"+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn(\"THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(a,\nb);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn(\"THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(a,b);this.x-=\na.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a,this.w*=a):this.w=this.z=this.y=this.x=0;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=\na[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d;a=a.elements;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],k=a[9];c=a[2];b=a[6];var m=a[10];if(.01>Math.abs(d-g)&&.01>Math.abs(f-c)&&.01>\nMath.abs(k-b)){if(.1>Math.abs(d+g)&&.1>Math.abs(f+c)&&.1>Math.abs(k+b)&&.1>Math.abs(e+h+m-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;m=(m+1)/2;d=(d+g)/4;f=(f+c)/4;k=(k+b)/4;e>h&&e>m?.01>e?(b=0,d=c=.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>m?.01>h?(b=.707106781,c=0,d=.707106781):(c=Math.sqrt(h),b=d/c,d=k/c):.01>m?(c=b=.707106781,d=0):(d=Math.sqrt(m),b=f/d,c=k/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-k)*(b-k)+(f-c)*(f-c)+(g-d)*(g-d));.001>Math.abs(a)&&(a=1);this.x=(b-k)/\na;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+m-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));\nthis.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new ga,b=new ga);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);\nthis.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*\nthis.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,\nb,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromAttribute:function(a,b,c){void 0!==c&&console.warn(\"THREE.Vector4: offset has been removed from .fromAttribute().\");this.x=a.getX(b);\nthis.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this}};Object.assign(Db.prototype,oa.prototype,{isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=\na.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:\"dispose\"})}});Eb.prototype=Object.create(Db.prototype);Eb.prototype.constructor=Eb;Eb.prototype.isWebGLRenderTargetCube=!0;da.prototype={constructor:da,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get w(){return this._w},set w(a){this._w=\na;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(a){this._x=a.x;this._y=a.y;this._z=a.z;this._w=a.w;this.onChangeCallback();return this},setFromEuler:function(a,b){if(!1===(a&&a.isEuler))throw Error(\"THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.\");var c=Math.cos(a._x/2),d=Math.cos(a._y/\n2),e=Math.cos(a._z/2),f=Math.sin(a._x/2),g=Math.sin(a._y/2),h=Math.sin(a._z/2),k=a.order;\"XYZ\"===k?(this._x=f*d*e+c*g*h,this._y=c*g*e-f*d*h,this._z=c*d*h+f*g*e,this._w=c*d*e-f*g*h):\"YXZ\"===k?(this._x=f*d*e+c*g*h,this._y=c*g*e-f*d*h,this._z=c*d*h-f*g*e,this._w=c*d*e+f*g*h):\"ZXY\"===k?(this._x=f*d*e-c*g*h,this._y=c*g*e+f*d*h,this._z=c*d*h+f*g*e,this._w=c*d*e-f*g*h):\"ZYX\"===k?(this._x=f*d*e-c*g*h,this._y=c*g*e+f*d*h,this._z=c*d*h-f*g*e,this._w=c*d*e+f*g*h):\"YZX\"===k?(this._x=f*d*e+c*g*h,this._y=c*g*e+\nf*d*h,this._z=c*d*h-f*g*e,this._w=c*d*e-f*g*h):\"XZY\"===k&&(this._x=f*d*e-c*g*h,this._y=c*g*e-f*d*h,this._z=c*d*h+f*g*e,this._w=c*d*e+f*g*h);if(!1!==b)this.onChangeCallback();return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c);this._x=a.x*d;this._y=a.y*d;this._z=a.z*d;this._w=Math.cos(c);this.onChangeCallback();return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],k=b[6],b=b[10],m=c+f+b;0<m?(c=.5/Math.sqrt(m+1),this._w=\n.25/c,this._x=(k-g)*c,this._y=(d-h)*c,this._z=(e-a)*c):c>f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y=.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a,b;return function(c,d){void 0===a&&(a=new q);b=c.dot(d)+1;1E-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,\nc.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;return this.normalize()}}(),inverse:function(){return this.conjugate().normalize()},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+\nthis._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn(\"THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.\"),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,\nb){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,k=b._z,m=b._w;this._x=c*m+f*g+d*k-e*h;this._y=d*m+f*h+e*g-c*k;this._z=e*m+f*k+c*h-d*g;this._w=f*m-c*g-d*h-e*k;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;var h=Math.sqrt(1-g*g);\nif(.001>Math.abs(h))return this._w=.5*(f+this._w),this._x=.5*(c+this._x),this._y=.5*(d+this._y),this._z=.5*(e+this._z),this;var k=Math.atan2(h,g),g=Math.sin((1-b)*k)/h,h=Math.sin(b*k)/h;this._w=f*g+this._w*h;this._x=c*g+this._x*h;this._y=d*g+this._y*h;this._z=e*g+this._z*h;this.onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];\nthis.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};Object.assign(da,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],m=c[d+2];c=c[d+3];d=e[f+0];var l=e[f+1],p=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==l||m!==p){f=1-g;var n=h*d+k*l+m*p+c*e,r=0<=\nn?1:-1,w=1-n*n;w>Number.EPSILON&&(w=Math.sqrt(w),n=Math.atan2(w,n*r),f=Math.sin(f*n)/w,g=Math.sin(g*n)/w);r*=g;h=h*f+d*r;k=k*f+l*r;m=m*f+p*r;c=c*f+e*r;f===1-g&&(g=1/Math.sqrt(h*h+k*k+m*m+c*c),h*=g,k*=g,m*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=m;a[b+3]=c}});q.prototype={constructor:q,isVector3:!0,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=\na;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error(\"index is out of range: \"+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error(\"index is out of range: \"+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn(\"THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),\nthis.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn(\"THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;\nreturn this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn(\"THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.\"),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},multiplyVectors:function(a,\nb){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a;return function(b){!1===(b&&b.isEuler)&&console.error(\"THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.\");void 0===a&&(a=new da);return this.applyQuaternion(a.setFromEuler(b))}}(),applyAxisAngle:function(){var a;return function(b,c){void 0===a&&(a=new da);return this.applyQuaternion(a.setFromAxisAngle(b,c))}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;\na=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*\nc+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,m=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-m*-f;this.y=k*a+b*-f+m*-e-h*-g;this.z=m*a+b*-g+h*-f-k*-e;return this},project:function(){var a;return function(b){void 0===a&&(a=new H);a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyProjection(a)}}(),unproject:function(){var a;return function(b){void 0===a&&(a=new H);\na.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyProjection(a)}}(),transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,\na.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new q,b=new q);a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.multiplyScalar(Math.max(a,\nMath.min(b,c))/c)},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):\nMath.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/\nthis.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},cross:function(a,b){if(void 0!==b)return console.warn(\"THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.\"),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){var c=\na.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g;this.y=e*f-c*h;this.z=c*g-d*f;return this},projectOnVector:function(a){var b=a.dot(this)/a.lengthSq();return this.copy(a).multiplyScalar(b)},projectOnPlane:function(){var a;return function(b){void 0===a&&(a=new q);a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a;return function(b){void 0===a&&(a=new q);return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*\na.lengthSq());return Math.acos(Q.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},distanceToManhattan:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromCylindrical:function(a){this.x=\na.radius*Math.sin(a.theta);this.y=a.y;this.z=a.radius*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){return this.setFromMatrixColumn(a,3)},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){if(\"number\"===typeof a){console.warn(\"THREE.Vector3: setFromMatrixColumn now expects ( matrix, index ).\");var c=\na;a=b;b=c}return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromAttribute:function(a,b,c){void 0!==c&&console.warn(\"THREE.Vector3: offset has been removed from .fromAttribute().\");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this}};\nH.prototype={constructor:H,isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,k,m,l,p,n,r,w,u){var q=this.elements;q[0]=a;q[4]=b;q[8]=c;q[12]=d;q[1]=e;q[5]=f;q[9]=g;q[13]=h;q[2]=k;q[6]=m;q[10]=l;q[14]=p;q[3]=n;q[7]=r;q[11]=w;q[15]=u;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new H).fromArray(this.elements)},copy:function(a){this.elements.set(a.elements);return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=\na[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x,b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(){var a;return function(b){void 0===a&&(a=new q);var c=this.elements,d=b.elements,e=1/a.setFromMatrixColumn(b,0).length(),f=1/a.setFromMatrixColumn(b,1).length();b=1/a.setFromMatrixColumn(b,2).length();c[0]=d[0]*e;\nc[1]=d[1]*e;c[2]=d[2]*e;c[4]=d[4]*f;c[5]=d[5]*f;c[6]=d[6]*f;c[8]=d[8]*b;c[9]=d[9]*b;c[10]=d[10]*b;return this}}(),makeRotationFromEuler:function(a){!1===(a&&a.isEuler)&&console.error(\"THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.\");var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c),c=Math.sin(c),g=Math.cos(d),d=Math.sin(d),h=Math.cos(e),e=Math.sin(e);if(\"XYZ\"===a.order){a=f*h;var k=f*e,m=c*h,l=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=k+m*d;b[5]=a-\nl*d;b[9]=-c*g;b[2]=l-a*d;b[6]=m+k*d;b[10]=f*g}else\"YXZ\"===a.order?(a=g*h,k=g*e,m=d*h,l=d*e,b[0]=a+l*c,b[4]=m*c-k,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=k*c-m,b[6]=l+a*c,b[10]=f*g):\"ZXY\"===a.order?(a=g*h,k=g*e,m=d*h,l=d*e,b[0]=a-l*c,b[4]=-f*e,b[8]=m+k*c,b[1]=k+m*c,b[5]=f*h,b[9]=l-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):\"ZYX\"===a.order?(a=f*h,k=f*e,m=c*h,l=c*e,b[0]=g*h,b[4]=m*d-k,b[8]=a*d+l,b[1]=g*e,b[5]=l*d+a,b[9]=k*d-m,b[2]=-d,b[6]=c*g,b[10]=f*g):\"YZX\"===a.order?(a=f*g,k=f*d,m=c*g,l=c*d,b[0]=g*h,b[4]=l-\na*e,b[8]=m*e+k,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=k*e+m,b[10]=a-l*e):\"XZY\"===a.order&&(a=f*g,k=f*d,m=c*g,l=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+l,b[5]=f*h,b[9]=k*e-m,b[2]=m*e-k,b[6]=c*h,b[10]=l*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=a.w,g=c+c,h=d+d,k=e+e;a=c*g;var m=c*h,c=c*k,l=d*h,d=d*k,e=e*k,g=f*g,h=f*h,f=f*k;b[0]=1-(l+e);b[4]=m-f;b[8]=c+h;b[1]=m+f;b[5]=1-(a+e);b[9]=d-g;b[2]=c-\nh;b[6]=d+g;b[10]=1-(a+l);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},lookAt:function(){var a,b,c;return function(d,e,f){void 0===a&&(a=new q,b=new q,c=new q);var g=this.elements;c.subVectors(d,e).normalize();0===c.lengthSq()&&(c.z=1);a.crossVectors(f,c).normalize();0===a.lengthSq()&&(c.z+=1E-4,a.crossVectors(f,c).normalize());b.crossVectors(c,a);g[0]=a.x;g[4]=b.x;g[8]=c.x;g[1]=a.y;g[5]=b.y;g[9]=c.y;g[2]=a.z;g[6]=b.z;g[10]=c.z;return this}}(),multiply:function(a,b){return void 0!==\nb?(console.warn(\"THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.\"),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],k=c[12],m=c[1],l=c[5],p=c[9],n=c[13],r=c[2],w=c[6],u=c[10],q=c[14],t=c[3],v=c[7],M=c[11],c=c[15],z=d[0],A=d[4],I=d[8],E=d[12],K=d[1],y=d[5],J=d[9],C=d[13],D=d[2],G=d[6],\nH=d[10],O=d[14],P=d[3],R=d[7],T=d[11],d=d[15];e[0]=f*z+g*K+h*D+k*P;e[4]=f*A+g*y+h*G+k*R;e[8]=f*I+g*J+h*H+k*T;e[12]=f*E+g*C+h*O+k*d;e[1]=m*z+l*K+p*D+n*P;e[5]=m*A+l*y+p*G+n*R;e[9]=m*I+l*J+p*H+n*T;e[13]=m*E+l*C+p*O+n*d;e[2]=r*z+w*K+u*D+q*P;e[6]=r*A+w*y+u*G+q*R;e[10]=r*I+w*J+u*H+q*T;e[14]=r*E+w*C+u*O+q*d;e[3]=t*z+v*K+M*D+c*P;e[7]=t*A+v*y+M*G+c*R;e[11]=t*I+v*J+M*H+c*T;e[15]=t*E+v*C+M*O+c*d;return this},multiplyToArray:function(a,b,c){var d=this.elements;this.multiplyMatrices(a,b);c[0]=d[0];c[1]=d[1];c[2]=\nd[2];c[3]=d[3];c[4]=d[4];c[5]=d[5];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12];c[13]=d[13];c[14]=d[14];c[15]=d[15];return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},applyToVector3Array:function(){var a;return function(b,c,d){void 0===a&&(a=new q);void 0===c&&(c=0);void 0===d&&(d=b.length);for(var e=0;e<d;e+=3,c+=\n3)a.fromArray(b,c),a.applyMatrix4(this),a.toArray(b,c);return b}}(),applyToBufferAttribute:function(){var a;return function(b){void 0===a&&(a=new q);for(var c=0,d=b.count;c<d;c++)a.x=b.getX(c),a.y=b.getY(c),a.z=b.getZ(c),a.applyMatrix4(this),b.setXYZ(c,a.x,a.y,a.z);return b}}(),determinant:function(){var a=this.elements,b=a[0],c=a[4],d=a[8],e=a[12],f=a[1],g=a[5],h=a[9],k=a[13],m=a[2],l=a[6],p=a[10],n=a[14];return a[3]*(+e*h*l-d*k*l-e*g*p+c*k*p+d*g*n-c*h*n)+a[7]*(+b*h*n-b*k*p+e*f*p-d*f*n+d*k*m-e*h*\nm)+a[11]*(+b*k*l-b*g*n-e*f*l+c*f*n+e*g*m-c*k*m)+a[15]*(-d*g*m-b*h*l+b*g*p+d*f*l-c*f*p+c*h*m)},transpose:function(){var a=this.elements,b;b=a[1];a[1]=a[4];a[4]=b;b=a[2];a[2]=a[8];a[8]=b;b=a[6];a[6]=a[9];a[9]=b;b=a[3];a[3]=a[12];a[12]=b;b=a[7];a[7]=a[13];a[13]=b;b=a[11];a[11]=a[14];a[14]=b;return this},setPosition:function(a){var b=this.elements;b[12]=a.x;b[13]=a.y;b[14]=a.z;return this},getInverse:function(a,b){var c=this.elements,d=a.elements,e=d[0],f=d[1],g=d[2],h=d[3],k=d[4],m=d[5],l=d[6],p=d[7],\nn=d[8],r=d[9],w=d[10],u=d[11],q=d[12],t=d[13],v=d[14],d=d[15],M=r*v*p-t*w*p+t*l*u-m*v*u-r*l*d+m*w*d,z=q*w*p-n*v*p-q*l*u+k*v*u+n*l*d-k*w*d,A=n*t*p-q*r*p+q*m*u-k*t*u-n*m*d+k*r*d,I=q*r*l-n*t*l-q*m*w+k*t*w+n*m*v-k*r*v,E=e*M+f*z+g*A+h*I;if(0===E){if(!0===b)throw Error(\"THREE.Matrix4.getInverse(): can't invert matrix, determinant is 0\");console.warn(\"THREE.Matrix4.getInverse(): can't invert matrix, determinant is 0\");return this.identity()}E=1/E;c[0]=M*E;c[1]=(t*w*h-r*v*h-t*g*u+f*v*u+r*g*d-f*w*d)*E;c[2]=\n(m*v*h-t*l*h+t*g*p-f*v*p-m*g*d+f*l*d)*E;c[3]=(r*l*h-m*w*h-r*g*p+f*w*p+m*g*u-f*l*u)*E;c[4]=z*E;c[5]=(n*v*h-q*w*h+q*g*u-e*v*u-n*g*d+e*w*d)*E;c[6]=(q*l*h-k*v*h-q*g*p+e*v*p+k*g*d-e*l*d)*E;c[7]=(k*w*h-n*l*h+n*g*p-e*w*p-k*g*u+e*l*u)*E;c[8]=A*E;c[9]=(q*r*h-n*t*h-q*f*u+e*t*u+n*f*d-e*r*d)*E;c[10]=(k*t*h-q*m*h+q*f*p-e*t*p-k*f*d+e*m*d)*E;c[11]=(n*m*h-k*r*h-n*f*p+e*r*p+k*f*u-e*m*u)*E;c[12]=I*E;c[13]=(n*t*g-q*r*g+q*f*w-e*t*w-n*f*v+e*r*v)*E;c[14]=(q*m*g-k*t*g-q*f*l+e*t*l+k*f*v-e*m*v)*E;c[15]=(k*r*g-n*m*g+n*f*l-\ne*r*l-k*f*w+e*m*w)*E;return this},scale:function(a){var b=this.elements,c=a.x,d=a.y;a=a.z;b[0]*=c;b[4]*=d;b[8]*=a;b[1]*=c;b[5]*=d;b[9]*=a;b[2]*=c;b[6]*=d;b[10]*=a;b[3]*=c;b[7]*=d;b[11]*=a;return this},getMaxScaleOnAxis:function(){var a=this.elements;return Math.sqrt(Math.max(a[0]*a[0]+a[1]*a[1]+a[2]*a[2],a[4]*a[4]+a[5]*a[5]+a[6]*a[6],a[8]*a[8]+a[9]*a[9]+a[10]*a[10]))},makeTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},makeRotationX:function(a){var b=Math.cos(a);\na=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},makeRotationY:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},makeRotationZ:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=1-c,f=a.x,g=a.y,h=a.z,k=e*f,m=e*g;this.set(k*f+c,k*g-d*h,k*h+d*g,0,k*g+d*h,m*g+c,m*h-d*f,0,k*h-d*g,m*h+d*f,e*h*h+c,0,0,0,0,1);return this},\nmakeScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},makeShear:function(a,b,c){this.set(1,b,c,0,a,1,c,0,a,b,1,0,0,0,0,1);return this},compose:function(a,b,c){this.makeRotationFromQuaternion(b);this.scale(c);this.setPosition(a);return this},decompose:function(){var a,b;return function(c,d,e){void 0===a&&(a=new q,b=new H);var f=this.elements,g=a.set(f[0],f[1],f[2]).length(),h=a.set(f[4],f[5],f[6]).length(),k=a.set(f[8],f[9],f[10]).length();0>this.determinant()&&(g=-g);c.x=\nf[12];c.y=f[13];c.z=f[14];b.elements.set(this.elements);c=1/g;var f=1/h,m=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=m;b.elements[9]*=m;b.elements[10]*=m;d.setFromRotationMatrix(b);e.x=g;e.y=h;e.z=k;return this}}(),makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c);g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=\n0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){a=c*Math.tan(Q.DEG2RAD*a*.5);var e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),m=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*m;g[14]=-((f+e)*m);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},\nfromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}};Za.prototype=Object.create(ea.prototype);Za.prototype.constructor=Za;Za.prototype.isCubeTexture=!0;Object.defineProperty(Za.prototype,\n\"images\",{get:function(){return this.image},set:function(a){this.image=a}});var se=new ea,te=new Za,pe=[],re=[];xe.prototype.setValue=function(a,b){for(var c=this.seq,d=0,e=c.length;d!==e;++d){var f=c[d];f.setValue(a,b[f.id])}};var Id=/([\\w\\d_]+)(\\])?(\\[|\\.)?/g;$a.prototype.setValue=function(a,b,c){b=this.map[b];void 0!==b&&b.setValue(a,c,this.renderer)};$a.prototype.set=function(a,b,c){var d=this.map[c];void 0!==d&&d.setValue(a,b[c],this.renderer)};$a.prototype.setOptional=function(a,b,c){b=b[c];\nvoid 0!==b&&this.setValue(a,c,b)};$a.upload=function(a,b,c,d){for(var e=0,f=b.length;e!==f;++e){var g=b[e],h=c[g.id];!1!==h.needsUpdate&&g.setValue(a,h.value,d)}};$a.seqWithValue=function(a,b){for(var c=[],d=0,e=a.length;d!==e;++d){var f=a[d];f.id in b&&c.push(f)}return c};var Ja={merge:function(a){for(var b={},c=0;c<a.length;c++){var d=this.clone(a[c]),e;for(e in d)b[e]=d[e]}return b},clone:function(a){var b={},c;for(c in a){b[c]={};for(var d in a[c]){var e=a[c][d];e&&(e.isColor||e.isMatrix3||e.isMatrix4||\ne.isVector2||e.isVector3||e.isVector4||e.isTexture)?b[c][d]=e.clone():Array.isArray(e)?b[c][d]=e.slice():b[c][d]=e}}return b}},Z={alphamap_fragment:\"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\\n\",alphamap_pars_fragment:\"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\\n\",alphatest_fragment:\"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\\n\",aomap_fragment:\"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\\t#endif\\n#endif\\n\",\naomap_pars_fragment:\"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\",begin_vertex:\"\\nvec3 transformed = vec3( position );\\n\",beginnormal_vertex:\"\\nvec3 objectNormal = vec3( normal );\\n\",bsdfs:\"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\t\\tif( decayExponent > 0.0 ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\t\\t\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\t\\t\\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t\\t\\treturn distanceFalloff * maxDistanceCutoffFactor;\\n#else\\n\\t\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n#endif\\n\\t\\t}\\n\\t\\treturn 1.0;\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( G * D );\\n}\\nvec2 ltcTextureCoords( const in GeometricContext geometry, const in float roughness ) {\\n\\tconst float LUT_SIZE  = 64.0;\\n\\tconst float LUT_SCALE = (LUT_SIZE - 1.0)/LUT_SIZE;\\n\\tconst float LUT_BIAS  = 0.5/LUT_SIZE;\\n\\tvec3 N = geometry.normal;\\n\\tvec3 V = geometry.viewDir;\\n\\tvec3 P = geometry.position;\\n\\tfloat theta = acos( dot( N, V ) );\\n\\tvec2 uv = vec2(\\n\\t\\tsqrt( saturate( roughness ) ),\\n\\t\\tsaturate( theta / ( 0.5 * PI ) ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nvoid clipQuadToHorizon( inout vec3 L[5], out int n ) {\\n\\tint config = 0;\\n\\tif ( L[0].z > 0.0 ) config += 1;\\n\\tif ( L[1].z > 0.0 ) config += 2;\\n\\tif ( L[2].z > 0.0 ) config += 4;\\n\\tif ( L[3].z > 0.0 ) config += 8;\\n\\tn = 0;\\n\\tif ( config == 0 ) {\\n\\t} else if ( config == 1 ) {\\n\\t\\tn = 3;\\n\\t\\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\\n\\t\\tL[2] = -L[3].z * L[0] + L[0].z * L[3];\\n\\t} else if ( config == 2 ) {\\n\\t\\tn = 3;\\n\\t\\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\\n\\t\\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\\n\\t} else if ( config == 3 ) {\\n\\t\\tn = 4;\\n\\t\\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\\n\\t\\tL[3] = -L[3].z * L[0] + L[0].z * L[3];\\n\\t} else if ( config == 4 ) {\\n\\t\\tn = 3;\\n\\t\\tL[0] = -L[3].z * L[2] + L[2].z * L[3];\\n\\t\\tL[1] = -L[1].z * L[2] + L[2].z * L[1];\\n\\t} else if ( config == 5 ) {\\n\\t\\tn = 0;\\n\\t} else if ( config == 6 ) {\\n\\t\\tn = 4;\\n\\t\\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\\n\\t\\tL[3] = -L[3].z * L[2] + L[2].z * L[3];\\n\\t} else if ( config == 7 ) {\\n\\t\\tn = 5;\\n\\t\\tL[4] = -L[3].z * L[0] + L[0].z * L[3];\\n\\t\\tL[3] = -L[3].z * L[2] + L[2].z * L[3];\\n\\t} else if ( config == 8 ) {\\n\\t\\tn = 3;\\n\\t\\tL[0] = -L[0].z * L[3] + L[3].z * L[0];\\n\\t\\tL[1] = -L[2].z * L[3] + L[3].z * L[2];\\n\\t\\tL[2] =  L[3];\\n\\t} else if ( config == 9 ) {\\n\\t\\tn = 4;\\n\\t\\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\\n\\t\\tL[2] = -L[2].z * L[3] + L[3].z * L[2];\\n\\t} else if ( config == 10 ) {\\n\\t\\tn = 0;\\n\\t} else if ( config == 11 ) {\\n\\t\\tn = 5;\\n\\t\\tL[4] = L[3];\\n\\t\\tL[3] = -L[2].z * L[3] + L[3].z * L[2];\\n\\t\\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\\n\\t} else if ( config == 12 ) {\\n\\t\\tn = 4;\\n\\t\\tL[1] = -L[1].z * L[2] + L[2].z * L[1];\\n\\t\\tL[0] = -L[0].z * L[3] + L[3].z * L[0];\\n\\t} else if ( config == 13 ) {\\n\\t\\tn = 5;\\n\\t\\tL[4] = L[3];\\n\\t\\tL[3] = L[2];\\n\\t\\tL[2] = -L[1].z * L[2] + L[2].z * L[1];\\n\\t\\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\\n\\t} else if ( config == 14 ) {\\n\\t\\tn = 5;\\n\\t\\tL[4] = -L[0].z * L[3] + L[3].z * L[0];\\n\\t\\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\\n\\t} else if ( config == 15 ) {\\n\\t\\tn = 4;\\n\\t}\\n\\tif ( n == 3 )\\n\\t\\tL[3] = L[0];\\n\\tif ( n == 4 )\\n\\t\\tL[4] = L[0];\\n}\\nfloat integrateLtcBrdfOverRectEdge( vec3 v1, vec3 v2 ) {\\n\\tfloat cosTheta = dot( v1, v2 );\\n\\tfloat theta = acos( cosTheta );\\n\\tfloat res = cross( v1, v2 ).z * ( ( theta > 0.001 ) ? theta / sin( theta ) : 1.0 );\\n\\treturn res;\\n}\\nvoid initRectPoints( const in vec3 pos, const in vec3 halfWidth, const in vec3 halfHeight, out vec3 rectPoints[4] ) {\\n\\trectPoints[0] = pos - halfWidth - halfHeight;\\n\\trectPoints[1] = pos + halfWidth - halfHeight;\\n\\trectPoints[2] = pos + halfWidth + halfHeight;\\n\\trectPoints[3] = pos - halfWidth + halfHeight;\\n}\\nvec3 integrateLtcBrdfOverRect( const in GeometricContext geometry, const in mat3 brdfMat, const in vec3 rectPoints[4] ) {\\n\\tvec3 N = geometry.normal;\\n\\tvec3 V = geometry.viewDir;\\n\\tvec3 P = geometry.position;\\n\\tvec3 T1, T2;\\n\\tT1 = normalize(V - N * dot( V, N ));\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 brdfWrtSurface = brdfMat * transpose( mat3( T1, T2, N ) );\\n\\tvec3 clippedRect[5];\\n\\tclippedRect[0] = brdfWrtSurface * ( rectPoints[0] - P );\\n\\tclippedRect[1] = brdfWrtSurface * ( rectPoints[1] - P );\\n\\tclippedRect[2] = brdfWrtSurface * ( rectPoints[2] - P );\\n\\tclippedRect[3] = brdfWrtSurface * ( rectPoints[3] - P );\\n\\tint n;\\n\\tclipQuadToHorizon(clippedRect, n);\\n\\tif ( n == 0 )\\n\\t\\treturn vec3( 0, 0, 0 );\\n\\tclippedRect[0] = normalize( clippedRect[0] );\\n\\tclippedRect[1] = normalize( clippedRect[1] );\\n\\tclippedRect[2] = normalize( clippedRect[2] );\\n\\tclippedRect[3] = normalize( clippedRect[3] );\\n\\tclippedRect[4] = normalize( clippedRect[4] );\\n\\tfloat sum = 0.0;\\n\\tsum += integrateLtcBrdfOverRectEdge( clippedRect[0], clippedRect[1] );\\n\\tsum += integrateLtcBrdfOverRectEdge( clippedRect[1], clippedRect[2] );\\n\\tsum += integrateLtcBrdfOverRectEdge( clippedRect[2], clippedRect[3] );\\n\\tif (n >= 4)\\n\\t\\tsum += integrateLtcBrdfOverRectEdge( clippedRect[3], clippedRect[4] );\\n\\tif (n == 5)\\n\\t\\tsum += integrateLtcBrdfOverRectEdge( clippedRect[4], clippedRect[0] );\\n\\tsum = max( 0.0, sum );\\n\\tvec3 Lo_i = vec3( sum, sum, sum );\\n\\treturn Lo_i;\\n}\\nvec3 Rect_Area_Light_Specular_Reflectance(\\n\\t\\tconst in GeometricContext geometry,\\n\\t\\tconst in vec3 lightPos, const in vec3 lightHalfWidth, const in vec3 lightHalfHeight,\\n\\t\\tconst in float roughness,\\n\\t\\tconst in sampler2D ltcMat, const in sampler2D ltcMag ) {\\n\\tvec3 rectPoints[4];\\n\\tinitRectPoints( lightPos, lightHalfWidth, lightHalfHeight, rectPoints );\\n\\tvec2 uv = ltcTextureCoords( geometry, roughness );\\n\\tvec4 brdfLtcApproxParams, t;\\n\\tbrdfLtcApproxParams = texture2D( ltcMat, uv );\\n\\tt = texture2D( ltcMat, uv );\\n\\tfloat brdfLtcScalar = texture2D( ltcMag, uv ).a;\\n\\tmat3 brdfLtcApproxMat = mat3(\\n\\t\\tvec3(   1,   0, t.y ),\\n\\t\\tvec3(   0, t.z,   0 ),\\n\\t\\tvec3( t.w,   0, t.x )\\n\\t);\\n\\tvec3 specularReflectance = integrateLtcBrdfOverRect( geometry, brdfLtcApproxMat, rectPoints );\\n\\tspecularReflectance *= brdfLtcScalar;\\n\\treturn specularReflectance;\\n}\\nvec3 Rect_Area_Light_Diffuse_Reflectance(\\n\\t\\tconst in GeometricContext geometry,\\n\\t\\tconst in vec3 lightPos, const in vec3 lightHalfWidth, const in vec3 lightHalfHeight ) {\\n\\tvec3 rectPoints[4];\\n\\tinitRectPoints( lightPos, lightHalfWidth, lightHalfHeight, rectPoints );\\n\\tmat3 diffuseBrdfMat = mat3(1);\\n\\tvec3 diffuseReflectance = integrateLtcBrdfOverRect( geometry, diffuseBrdfMat, rectPoints );\\n\\treturn diffuseReflectance;\\n}\\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\\n\\treturn specularColor * AB.x + AB.y;\\n}\\nfloat G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n\",\nbumpmap_pars_fragment:\"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\\n\\t\\tvec3 vSigmaX = dFdx( surf_pos );\\n\\t\\tvec3 vSigmaY = dFdy( surf_pos );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 );\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\\n\",\nclipping_planes_fragment:\"#if NUM_CLIPPING_PLANES > 0\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\\n\\t\\tvec4 plane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t\\t\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\\n\\t\\t\\tvec4 plane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\tif ( clipped ) discard;\\n\\t\\n\\t#endif\\n#endif\\n\",\nclipping_planes_pars_fragment:\"#if NUM_CLIPPING_PLANES > 0\\n\\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\t\\tvarying vec3 vViewPosition;\\n\\t#endif\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\\n\",clipping_planes_pars_vertex:\"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n\",clipping_planes_vertex:\"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n\",\ncolor_fragment:\"#ifdef USE_COLOR\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\",color_pars_fragment:\"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\\n\",color_pars_vertex:\"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\",color_vertex:\"#ifdef USE_COLOR\\n\\tvColor.xyz = color.xyz;\\n#endif\",common:\"#define PI 3.14159265359\\n#define PI2 6.28318530718\\n#define PI_HALF 1.5707963267949\\n#define RECIPROCAL_PI 0.31830988618\\n#define RECIPROCAL_PI2 0.15915494\\n#define LOG2 1.442695\\n#define EPSILON 1e-6\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract(sin(sn) * c);\\n}\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n};\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\n}\\nmat3 transpose( const in mat3 v ) {\\n\\tmat3 tmp;\\n\\ttmp[0] = vec3(v[0].x, v[1].x, v[2].x);\\n\\ttmp[1] = vec3(v[0].y, v[1].y, v[2].y);\\n\\ttmp[2] = vec3(v[0].z, v[1].z, v[2].z);\\n\\treturn tmp;\\n}\\n\",\ncube_uv_reflection_fragment:\"#ifdef ENVMAP_TYPE_CUBE_UV\\n#define cubeUV_textureSize (1024.0)\\nint getFaceFromDirection(vec3 direction) {\\n\\tvec3 absDirection = abs(direction);\\n\\tint face = -1;\\n\\tif( absDirection.x > absDirection.z ) {\\n\\t\\tif(absDirection.x > absDirection.y )\\n\\t\\t\\tface = direction.x > 0.0 ? 0 : 3;\\n\\t\\telse\\n\\t\\t\\tface = direction.y > 0.0 ? 1 : 4;\\n\\t}\\n\\telse {\\n\\t\\tif(absDirection.z > absDirection.y )\\n\\t\\t\\tface = direction.z > 0.0 ? 2 : 5;\\n\\t\\telse\\n\\t\\t\\tface = direction.y > 0.0 ? 1 : 4;\\n\\t}\\n\\treturn face;\\n}\\n#define cubeUV_maxLods1  (log2(cubeUV_textureSize*0.25) - 1.0)\\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\\n\\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\\n\\tfloat dxRoughness = dFdx(roughness);\\n\\tfloat dyRoughness = dFdy(roughness);\\n\\tvec3 dx = dFdx( vec * scale * dxRoughness );\\n\\tvec3 dy = dFdy( vec * scale * dyRoughness );\\n\\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\\n\\td = clamp(d, 1.0, cubeUV_rangeClamp);\\n\\tfloat mipLevel = 0.5 * log2(d);\\n\\treturn vec2(floor(mipLevel), fract(mipLevel));\\n}\\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\\n\\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\\n\\tfloat a = 16.0 * cubeUV_rcpTextureSize;\\n\\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\\n\\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\\n\\tfloat powScale = exp2_packed.x * exp2_packed.y;\\n\\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\\n\\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\\n\\tbool bRes = mipLevel == 0.0;\\n\\tscale =  bRes && (scale < a) ? a : scale;\\n\\tvec3 r;\\n\\tvec2 offset;\\n\\tint face = getFaceFromDirection(direction);\\n\\tfloat rcpPowScale = 1.0 / powScale;\\n\\tif( face == 0) {\\n\\t\\tr = vec3(direction.x, -direction.z, direction.y);\\n\\t\\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ?  a : offset.y;\\n\\t}\\n\\telse if( face == 1) {\\n\\t\\tr = vec3(direction.y, direction.x, direction.z);\\n\\t\\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ?  a : offset.y;\\n\\t}\\n\\telse if( face == 2) {\\n\\t\\tr = vec3(direction.z, direction.x, direction.y);\\n\\t\\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ?  a : offset.y;\\n\\t}\\n\\telse if( face == 3) {\\n\\t\\tr = vec3(direction.x, direction.z, direction.y);\\n\\t\\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ?  0.0 : offset.y;\\n\\t}\\n\\telse if( face == 4) {\\n\\t\\tr = vec3(direction.y, direction.x, -direction.z);\\n\\t\\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ?  0.0 : offset.y;\\n\\t}\\n\\telse {\\n\\t\\tr = vec3(direction.z, -direction.x, direction.y);\\n\\t\\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ?  0.0 : offset.y;\\n\\t}\\n\\tr = normalize(r);\\n\\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\\n\\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\\n\\tvec2 base = offset + vec2( texelOffset );\\n\\treturn base + s * ( scale - 2.0 * texelOffset );\\n}\\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\\n\\tfloat roughnessVal = roughness* cubeUV_maxLods3;\\n\\tfloat r1 = floor(roughnessVal);\\n\\tfloat r2 = r1 + 1.0;\\n\\tfloat t = fract(roughnessVal);\\n\\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\\n\\tfloat s = mipInfo.y;\\n\\tfloat level0 = mipInfo.x;\\n\\tfloat level1 = level0 + 1.0;\\n\\tlevel1 = level1 > 5.0 ? 5.0 : level1;\\n\\tlevel0 += min( floor( s + 0.5 ), 5.0 );\\n\\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\\n\\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\\n\\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\\n\\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\\n\\tvec4 result = mix(color10, color20, t);\\n\\treturn vec4(result.rgb, 1.0);\\n}\\n#endif\\n\",\ndefaultnormal_vertex:\"#ifdef FLIP_SIDED\\n\\tobjectNormal = -objectNormal;\\n#endif\\nvec3 transformedNormal = normalMatrix * objectNormal;\\n\",displacementmap_pars_vertex:\"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\\n\",displacementmap_vertex:\"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normal * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\\n#endif\\n\",emissivemap_fragment:\"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\\n\",\nemissivemap_pars_fragment:\"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\\n\",encodings_fragment:\"  gl_FragColor = linearToOutputTexel( gl_FragColor );\\n\",encodings_pars_fragment:\"\\nvec4 LinearToLinear( in vec4 value ) {\\n  return value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n  return vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n  return vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n  return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\\n}\\nvec4 LinearTosRGB( in vec4 value ) {\\n  return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\\n}\\nvec4 RGBEToLinear( in vec4 value ) {\\n  return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n  float maxComponent = max( max( value.r, value.g ), value.b );\\n  float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n  return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n  return vec4( value.xyz * value.w * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n  float maxRGB = max( value.x, max( value.g, value.b ) );\\n  float M      = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n  M            = ceil( M * 255.0 ) / 255.0;\\n  return vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n    return vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n    float maxRGB = max( value.x, max( value.g, value.b ) );\\n    float D      = max( maxRange / maxRGB, 1.0 );\\n    D            = min( floor( D ) / 255.0, 1.0 );\\n    return vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value )  {\\n  vec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\\n  Xp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\\n  vec4 vResult;\\n  vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n  float Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n  vResult.w = fract(Le);\\n  vResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\\n  return vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n  float Le = value.z * 255.0 + value.w;\\n  vec3 Xp_Y_XYZp;\\n  Xp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\\n  Xp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n  Xp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n  vec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\\n  return vec4( max(vRGB, 0.0), 1.0 );\\n}\\n\",\nenvmap_fragment:\"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\tvec2 sampleUV;\\n\\t\\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\\n\\t\\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\\t\\tvec4 envColor = texture2D( envMap, sampleUV );\\n\\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\\t\\tvec3 reflectView = flipNormal * normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\\n\\t\\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\tenvColor = envMapTexelToLinear( envColor );\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\\n\",\nenvmap_pars_fragment:\"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\\n\\tuniform float reflectivity;\\n\\tuniform float envMapIntensity;\\n#endif\\n#ifdef USE_ENVMAP\\n\\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\tuniform float flipEnvMap;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\\n\",\nenvmap_pars_vertex:\"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\\n\",envmap_vertex:\"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\n\",\nfog_fragment:\"#ifdef USE_FOG\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\\n\\t#else\\n\\t\\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\\n\\t#endif\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * depth * depth * LOG2 ) );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\\n\",fog_pars_fragment:\"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\",\ngradientmap_pars_fragment:\"#ifdef TOON\\n\\tuniform sampler2D gradientMap;\\n\\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\t\\tfloat dotNL = dot( normal, lightDirection );\\n\\t\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t\\t#ifdef USE_GRADIENTMAP\\n\\t\\t\\treturn texture2D( gradientMap, coord ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\",lightmap_fragment:\"#ifdef USE_LIGHTMAP\\n\\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n#endif\\n\",\nlightmap_pars_fragment:\"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\",lights_lambert_vertex:\"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\n#if NUM_POINT_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t}\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\",\nlights_pars:\"uniform vec3 ambientLightColor;\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treturn irradiance;\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tdirectLight.color = directionalLight.color;\\n\\t\\tdirectLight.direction = directionalLight.direction;\\n\\t\\tdirectLight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight  ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\\t\\tif ( angleCos > spotLight.coneCos ) {\\n\\t\\t\\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\t\\tdirectLight.color = spotLight.color;\\n\\t\\t\\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tdirectLight.visible = true;\\n\\t\\t} else {\\n\\t\\t\\tdirectLight.color = vec3( 0.0 );\\n\\t\\t\\tdirectLight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltcMat;\\tuniform sampler2D ltcMag;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\\n\\t\\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tirradiance *= PI;\\n\\t\\t#endif\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\\n#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\\n\\t\\t#else\\n\\t\\t\\tvec4 envMapColor = vec4( 0.0 );\\n\\t\\t#endif\\n\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t}\\n\\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\\n\\t\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\t\\tvec2 sampleUV;\\n\\t\\t\\tsampleUV.y = saturate( reflectVec.y * 0.5 + 0.5 );\\n\\t\\t\\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\\t\\t\\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\\n\",\nlights_phong_fragment:\"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\\n\",lights_phong_pars_fragment:\"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct BlinnPhongMaterial {\\n\\tvec3\\tdiffuseColor;\\n\\tvec3\\tspecularColor;\\n\\tfloat\\tspecularShininess;\\n\\tfloat\\tspecularStrength;\\n};\\n#if NUM_RECT_AREA_LIGHTS > 0\\n    void RE_Direct_RectArea_BlinnPhong( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n        vec3 matDiffColor = material.diffuseColor;\\n        vec3 matSpecColor = material.specularColor;\\n        vec3 lightColor   = rectAreaLight.color;\\n        float roughness = BlinnExponentToGGXRoughness( material.specularShininess );\\n        vec3 spec = Rect_Area_Light_Specular_Reflectance(\\n                geometry,\\n                rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,\\n                roughness,\\n                ltcMat, ltcMag );\\n        vec3 diff = Rect_Area_Light_Diffuse_Reflectance(\\n                geometry,\\n                rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );\\n        reflectedLight.directSpecular += lightColor * matSpecColor * spec / PI2;\\n        reflectedLight.directDiffuse  += lightColor * matDiffColor * diff / PI2;\\n    }\\n#endif\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t#ifdef TOON\\n\\t\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#else\\n\\t\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\t\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#endif\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\\n\",\nlights_physical_fragment:\"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\\n#ifdef STANDARD\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.clearCoat = saturate( clearCoat );\\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\\n#endif\\n\",\nlights_physical_pars_fragment:\"struct PhysicalMaterial {\\n\\tvec3\\tdiffuseColor;\\n\\tfloat\\tspecularRoughness;\\n\\tvec3\\tspecularColor;\\n\\t#ifndef STANDARD\\n\\t\\tfloat clearCoat;\\n\\t\\tfloat clearCoatRoughness;\\n\\t#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n    void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n        vec3 matDiffColor = material.diffuseColor;\\n        vec3 matSpecColor = material.specularColor;\\n        vec3 lightColor   = rectAreaLight.color;\\n        float roughness = material.specularRoughness;\\n        vec3 spec = Rect_Area_Light_Specular_Reflectance(\\n                geometry,\\n                rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,\\n                roughness,\\n                ltcMat, ltcMag );\\n        vec3 diff = Rect_Area_Light_Diffuse_Reflectance(\\n                geometry,\\n                rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );\\n        reflectedLight.directSpecular += lightColor * matSpecColor * spec;\\n        reflectedLight.directDiffuse  += lightColor * matDiffColor * diff;\\n    }\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\t#ifndef STANDARD\\n\\t\\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\\n\\t#else\\n\\t\\tfloat clearCoatDHR = 0.0;\\n\\t#endif\\n\\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\\n\\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\t#ifndef STANDARD\\n\\t\\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\\n\\t#endif\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t#ifndef STANDARD\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\tfloat dotNL = dotNV;\\n\\t\\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\\n\\t#else\\n\\t\\tfloat clearCoatDHR = 0.0;\\n\\t#endif\\n\\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\\n\\t#ifndef STANDARD\\n\\t\\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\\n\\t#endif\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\n#define Material_BlinnShininessExponent( material )   GGXRoughnessToBlinnExponent( material.specularRoughness )\\n#define Material_ClearCoat_BlinnShininessExponent( material )   GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\\n\",\nlights_template:\"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = normalize( vViewPosition );\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t}\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t \\tirradiance += getLightProbeIndirectIrradiance( geometry, 8 );\\n\\t#endif\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tvec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\\n\\t#ifndef STANDARD\\n\\t\\tvec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );\\n\\t#else\\n\\t\\tvec3 clearCoatRadiance = vec3( 0.0 );\\n\\t#endif\\n\\t\\t\\n\\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\\n#endif\\n\",\nlogdepthbuf_fragment:\"#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\\n\\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\\n#endif\",logdepthbuf_pars_fragment:\"#ifdef USE_LOGDEPTHBUF\\n\\tuniform float logDepthBufFC;\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t#endif\\n#endif\\n\",logdepthbuf_pars_vertex:\"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t#endif\\n\\tuniform float logDepthBufFC;\\n#endif\",logdepthbuf_vertex:\"#ifdef USE_LOGDEPTHBUF\\n\\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t#else\\n\\t\\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\\n\\t#endif\\n#endif\\n\",\nmap_fragment:\"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\\n\",map_pars_fragment:\"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n\",map_particle_fragment:\"#ifdef USE_MAP\\n\\tvec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n\",map_particle_pars_fragment:\"#ifdef USE_MAP\\n\\tuniform vec4 offsetRepeat;\\n\\tuniform sampler2D map;\\n#endif\\n\",\nmetalnessmap_fragment:\"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.r;\\n#endif\\n\",metalnessmap_pars_fragment:\"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\",morphnormal_vertex:\"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\\n#endif\\n\",\nmorphtarget_pars_vertex:\"#ifdef USE_MORPHTARGETS\\n\\t#ifndef USE_MORPHNORMALS\\n\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\",morphtarget_vertex:\"#ifdef USE_MORPHTARGETS\\n\\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\\n\\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\\n\\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\\n\\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\\n\\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\\n\\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\\n\\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\\n\",\nnormal_flip:\"#ifdef DOUBLE_SIDED\\n\\tfloat flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n#else\\n\\tfloat flipNormal = 1.0;\\n#endif\\n\",normal_fragment:\"#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal ) * flipNormal;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tnormal = perturbNormal2Arb( -vViewPosition, normal );\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n#endif\\n\",\nnormalmap_pars_fragment:\"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\\n\\t\\tvec3 q0 = dFdx( eye_pos.xyz );\\n\\t\\tvec3 q1 = dFdy( eye_pos.xyz );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\\n\\t\\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\\n\\t\\tvec3 N = normalize( surf_norm );\\n\\t\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t\\tmapN.xy = normalScale * mapN.xy;\\n\\t\\tmat3 tsn = mat3( S, T, N );\\n\\t\\treturn normalize( tsn * mapN );\\n\\t}\\n#endif\\n\",\npacking:\"vec3 packNormalToRGB( const in vec3 normal ) {\\n  return normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n  return 1.0 - 2.0 * rgb.xyz;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256.,  256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n  return ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\n  return linearClipZ * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n  return (( near + viewZ ) * far ) / (( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n  return ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\\n\",\npremultiplied_alpha_fragment:\"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\\n\",project_vertex:\"#ifdef USE_SKINNING\\n\\tvec4 mvPosition = modelViewMatrix * skinned;\\n#else\\n\\tvec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\\n#endif\\ngl_Position = projectionMatrix * mvPosition;\\n\",roughnessmap_fragment:\"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.r;\\n#endif\\n\",\nroughnessmap_pars_fragment:\"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\",shadowmap_pars_fragment:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\\n\\t#endif\\n    #if NUM_RECT_AREA_LIGHTS > 0\\n    #endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\\n\\t\\tconst vec2 offset = vec2( 0.0, 1.0 );\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / size;\\n\\t\\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\\n\\t\\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\\n\\t\\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\\n\\t\\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\\n\\t\\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\\n\\t\\tvec2 f = fract( uv * size + 0.5 );\\n\\t\\tfloat a = mix( lb, lt, f.y );\\n\\t\\tfloat b = mix( rb, rt, f.y );\\n\\t\\tfloat c = mix( a, b, f.x );\\n\\t\\treturn c;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn 1.0;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\",\nshadowmap_pars_vertex:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\\n\\t#endif\\n    #if NUM_RECT_AREA_LIGHTS > 0\\n    #endif\\n#endif\\n\",\nshadowmap_vertex:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n    #if NUM_RECT_AREA_LIGHTS > 0\\n    #endif\\n#endif\\n\",\nshadowmask_pars_fragment:\"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\tDirectionalLight directionalLight;\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\tSpotLight spotLight;\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\tPointLight pointLight;\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#if NUM_RECT_AREA_LIGHTS > 0\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\\n\",\nskinbase_vertex:\"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\",skinning_pars_vertex:\"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform sampler2D boneTexture;\\n\\t\\tuniform int boneTextureWidth;\\n\\t\\tuniform int boneTextureHeight;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureWidth ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureWidth ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureWidth );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureHeight );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\\n\",\nskinning_vertex:\"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\tskinned  = bindMatrixInverse * skinned;\\n#endif\\n\",skinnormal_vertex:\"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix  = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n#endif\\n\",\nspecularmap_fragment:\"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\",specularmap_pars_fragment:\"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\",tonemapping_fragment:\"#if defined( TONE_MAPPING )\\n  gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\\n\",tonemapping_pars_fragment:\"#define saturate(a) clamp( a, 0.0, 1.0 )\\nuniform float toneMappingExposure;\\nuniform float toneMappingWhitePoint;\\nvec3 LinearToneMapping( vec3 color ) {\\n  return toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n  color *= toneMappingExposure;\\n  return saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\\nvec3 Uncharted2ToneMapping( vec3 color ) {\\n  color *= toneMappingExposure;\\n  return saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n  color *= toneMappingExposure;\\n  color = max( vec3( 0.0 ), color - 0.004 );\\n  return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\n\",\nuv_pars_fragment:\"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvarying vec2 vUv;\\n#endif\",uv_pars_vertex:\"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvarying vec2 vUv;\\n\\tuniform vec4 offsetRepeat;\\n#endif\\n\",\nuv_vertex:\"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\\n#endif\",uv2_pars_fragment:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\",uv2_pars_vertex:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n#endif\",\nuv2_vertex:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = uv2;\\n#endif\",worldpos_vertex:\"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( PHYSICAL ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\\n\\t#ifdef USE_SKINNING\\n\\t\\tvec4 worldPosition = modelMatrix * skinned;\\n\\t#else\\n\\t\\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\\n\\t#endif\\n#endif\\n\",cube_frag:\"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\\n\\tgl_FragColor.a *= opacity;\\n}\\n\",\ncube_vert:\"varying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n}\\n\",depth_frag:\"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\\n\\t#endif\\n}\\n\",\ndepth_vert:\"#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n}\\n\",\ndistanceRGBA_frag:\"uniform vec3 lightPos;\\nvarying vec4 vWorldPosition;\\n#include <common>\\n#include <packing>\\n#include <clipping_planes_pars_fragment>\\nvoid main () {\\n\\t#include <clipping_planes_fragment>\\n\\tgl_FragColor = packDepthToRGBA( length( vWorldPosition.xyz - lightPos.xyz ) / 1000.0 );\\n}\\n\",distanceRGBA_vert:\"varying vec4 vWorldPosition;\\n#include <common>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <skinbase_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvWorldPosition = worldPosition;\\n}\\n\",\nequirect_frag:\"uniform sampler2D tEquirect;\\nuniform float tFlip;\\nvarying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvec3 direction = normalize( vWorldPosition );\\n\\tvec2 sampleUV;\\n\\tsampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );\\n\\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n}\\n\",equirect_vert:\"varying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n}\\n\",\nlinedashed_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <color_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\",\nlinedashed_vert:\"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\tvLineDistance = scale * lineDistance;\\n\\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n}\\n\",meshbasic_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include <aomap_fragment>\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include <normal_flip>\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\",\nmeshbasic_vert:\"#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_ENVMAP\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <envmap_vertex>\\n}\\n\",\nmeshlambert_frag:\"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars>\\n#include <fog_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <emissivemap_fragment>\\n\\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\\n\\t#include <lightmap_fragment>\\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include <normal_flip>\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\",\nmeshlambert_vert:\"#define LAMBERT\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <bsdfs>\\n#include <lights_pars>\\n#include <color_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <lights_lambert_vertex>\\n\\t#include <shadowmap_vertex>\\n}\\n\",\nmeshphong_frag:\"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <gradientmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars>\\n#include <lights_phong_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <normal_flip>\\n\\t#include <normal_fragment>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_phong_fragment>\\n\\t#include <lights_template>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\",\nmeshphong_vert:\"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <shadowmap_vertex>\\n}\\n\",\nmeshphysical_frag:\"#define PHYSICAL\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifndef STANDARD\\n\\tuniform float clearCoat;\\n\\tuniform float clearCoatRoughness;\\n#endif\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <cube_uv_reflection_fragment>\\n#include <lights_pars>\\n#include <lights_physical_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <roughnessmap_pars_fragment>\\n#include <metalnessmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <roughnessmap_fragment>\\n\\t#include <metalnessmap_fragment>\\n\\t#include <normal_flip>\\n\\t#include <normal_fragment>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_physical_fragment>\\n\\t#include <lights_template>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\",\nmeshphysical_vert:\"#define PHYSICAL\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n}\\n\",\nnormal_frag:\"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED  ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\nvoid main() {\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <normal_flip>\\n\\t#include <normal_fragment>\\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <encodings_fragment>\\n}\\n\",\nnormal_vert:\"#define NORMAL\\n#if defined( FLAT_SHADED  ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n#if defined( FLAT_SHADED  ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\\n\",\npoints_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <color_pars_fragment>\\n#include <map_particle_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_particle_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphatest_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\",\npoints_vert:\"uniform float size;\\nuniform float scale;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tgl_PointSize = size * ( scale / - mvPosition.z );\\n\\t#else\\n\\t\\tgl_PointSize = size;\\n\\t#endif\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n}\\n\",\nshadow_frag:\"uniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <bsdfs>\\n#include <lights_pars>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\nvoid main() {\\n\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, opacity * ( 1.0  - getShadowMask() ) );\\n}\\n\",shadow_vert:\"#include <shadowmap_pars_vertex>\\nvoid main() {\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n}\\n\"};N.prototype={constructor:N,\nisColor:!0,r:1,g:1,b:1,set:function(a){a&&a.isColor?this.copy(a):\"number\"===typeof a?this.setHex(a):\"string\"===typeof a&&this.setStyle(a);return this},setScalar:function(a){this.b=this.g=this.r=a;return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1<d&&--d;return d<1/6?a+6*(c-a)*d:.5>d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b,\nc,d){b=Q.euclideanModulo(b,1);c=Q.clamp(c,0,1);d=Q.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn(\"THREE.Color: Alpha component of \"+a+\" will be ignored.\")}var c;if(c=/^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec(a)){var d=c[2];switch(c[1]){case \"rgb\":case \"rgba\":if(c=/^(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec(d))return this.r=\nMath.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case \"hsl\":case \"hsla\":if(c=/^([0-9]*\\.?[0-9]+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec(d)){var d=parseFloat(c[1])/\n360,e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^\\#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0<a.length&&(c=Lf[a],void 0!==\nc?this.setHex(c):console.warn(\"THREE.Color: Unknown color \"+a));return this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(a){this.r=a.r;this.g=a.g;this.b=a.b;return this},copyGammaToLinear:function(a,b){void 0===b&&(b=2);this.r=Math.pow(a.r,b);this.g=Math.pow(a.g,b);this.b=Math.pow(a.b,b);return this},copyLinearToGamma:function(a,b){void 0===b&&(b=2);var c=0<b?1/b:1;this.r=Math.pow(a.r,c);this.g=Math.pow(a.g,c);this.b=Math.pow(a.b,c);return this},convertGammaToLinear:function(){var a=\nthis.r,b=this.g,c=this.b;this.r=a*a;this.g=b*b;this.b=c*c;return this},convertLinearToGamma:function(){this.r=Math.sqrt(this.r);this.g=Math.sqrt(this.g);this.b=Math.sqrt(this.b);return this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return(\"000000\"+this.getHex().toString(16)).slice(-6)},getHSL:function(a){a=a||{h:0,s:0,l:0};var b=this.r,c=this.g,d=this.b,e=Math.max(b,c,d),f=Math.min(b,c,d),g,h=(f+e)/2;if(f===e)f=g=0;else{var k=e-f,f=.5>=h?k/(e+f):\nk/(2-e-f);switch(e){case b:g=(c-d)/k+(c<d?6:0);break;case c:g=(d-b)/k+2;break;case d:g=(b-c)/k+4}g/=6}a.h=g;a.s=f;a.l=h;return a},getStyle:function(){return\"rgb(\"+(255*this.r|0)+\",\"+(255*this.g|0)+\",\"+(255*this.b|0)+\")\"},offsetHSL:function(a,b,c){var d=this.getHSL();d.h+=a;d.s+=b;d.l+=c;this.setHSL(d.h,d.s,d.l);return this},add:function(a){this.r+=a.r;this.g+=a.g;this.b+=a.b;return this},addColors:function(a,b){this.r=a.r+b.r;this.g=a.g+b.g;this.b=a.b+b.b;return this},addScalar:function(a){this.r+=\na;this.g+=a;this.b+=a;return this},sub:function(a){this.r=Math.max(0,this.r-a.r);this.g=Math.max(0,this.g-a.g);this.b=Math.max(0,this.b-a.b);return this},multiply:function(a){this.r*=a.r;this.g*=a.g;this.b*=a.b;return this},multiplyScalar:function(a){this.r*=a;this.g*=a;this.b*=a;return this},lerp:function(a,b){this.r+=(a.r-this.r)*b;this.g+=(a.g-this.g)*b;this.b+=(a.b-this.b)*b;return this},equals:function(a){return a.r===this.r&&a.g===this.g&&a.b===this.b},fromArray:function(a,b){void 0===b&&(b=\n0);this.r=a[b];this.g=a[b+1];this.b=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.r;a[b+1]=this.g;a[b+2]=this.b;return a},toJSON:function(){return this.getHex()}};var Lf={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,\ncornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,\nfloralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,\nlightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,\nmoccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,\nsilver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};db.prototype=Object.create(ea.prototype);db.prototype.constructor=db;db.prototype.isDataTexture=!0;var U={common:{diffuse:{value:new N(15658734)},opacity:{value:1},map:{value:null},offsetRepeat:{value:new ga(0,\n0,1,1)},specularMap:{value:null},alphaMap:{value:null},envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new C(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},\nroughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:2.5E-4},fogNear:{value:1},fogFar:{value:2E3},fogColor:{value:new N(16777215)}},lights:{ambientLightColor:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},\ndirection:{},distance:{},coneCos:{},penumbraCos:{},decay:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},\nwidth:{},height:{}}}},points:{diffuse:{value:new N(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},offsetRepeat:{value:new ga(0,0,1,1)}}},Gb={basic:{uniforms:Ja.merge([U.common,U.aomap,U.lightmap,U.fog]),vertexShader:Z.meshbasic_vert,fragmentShader:Z.meshbasic_frag},lambert:{uniforms:Ja.merge([U.common,U.aomap,U.lightmap,U.emissivemap,U.fog,U.lights,{emissive:{value:new N(0)}}]),vertexShader:Z.meshlambert_vert,fragmentShader:Z.meshlambert_frag},phong:{uniforms:Ja.merge([U.common,\nU.aomap,U.lightmap,U.emissivemap,U.bumpmap,U.normalmap,U.displacementmap,U.gradientmap,U.fog,U.lights,{emissive:{value:new N(0)},specular:{value:new N(1118481)},shininess:{value:30}}]),vertexShader:Z.meshphong_vert,fragmentShader:Z.meshphong_frag},standard:{uniforms:Ja.merge([U.common,U.aomap,U.lightmap,U.emissivemap,U.bumpmap,U.normalmap,U.displacementmap,U.roughnessmap,U.metalnessmap,U.fog,U.lights,{emissive:{value:new N(0)},roughness:{value:.5},metalness:{value:0},envMapIntensity:{value:1}}]),\nvertexShader:Z.meshphysical_vert,fragmentShader:Z.meshphysical_frag},points:{uniforms:Ja.merge([U.points,U.fog]),vertexShader:Z.points_vert,fragmentShader:Z.points_frag},dashed:{uniforms:Ja.merge([U.common,U.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Z.linedashed_vert,fragmentShader:Z.linedashed_frag},depth:{uniforms:Ja.merge([U.common,U.displacementmap]),vertexShader:Z.depth_vert,fragmentShader:Z.depth_frag},normal:{uniforms:Ja.merge([U.common,U.bumpmap,U.normalmap,\nU.displacementmap,{opacity:{value:1}}]),vertexShader:Z.normal_vert,fragmentShader:Z.normal_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Z.cube_vert,fragmentShader:Z.cube_frag},equirect:{uniforms:{tEquirect:{value:null},tFlip:{value:-1}},vertexShader:Z.equirect_vert,fragmentShader:Z.equirect_frag},distanceRGBA:{uniforms:{lightPos:{value:new q}},vertexShader:Z.distanceRGBA_vert,fragmentShader:Z.distanceRGBA_frag}};Gb.physical={uniforms:Ja.merge([Gb.standard.uniforms,\n{clearCoat:{value:0},clearCoatRoughness:{value:0}}]),vertexShader:Z.meshphysical_vert,fragmentShader:Z.meshphysical_frag};pc.prototype={constructor:pc,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;b<c;b++)this.expandByPoint(a[b]);return this},setFromCenterAndSize:function(){var a=new C;return function(b,c){var d=a.copy(c).multiplyScalar(.5);this.min.copy(b).sub(d);this.max.copy(b).add(d);return this}}(),clone:function(){return(new this.constructor).copy(this)},\ncopy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=this.min.y=Infinity;this.max.x=this.max.y=-Infinity;return this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y},getCenter:function(a){a=a||new C;return this.isEmpty()?a.set(0,0):a.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(a){a=a||new C;return this.isEmpty()?a.set(0,0):a.subVectors(this.max,this.min)},expandByPoint:function(a){this.min.min(a);this.max.max(a);\nreturn this},expandByVector:function(a){this.min.sub(a);this.max.add(a);return this},expandByScalar:function(a){this.min.addScalar(-a);this.max.addScalar(a);return this},containsPoint:function(a){return a.x<this.min.x||a.x>this.max.x||a.y<this.min.y||a.y>this.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y},getParameter:function(a,b){return(b||new C).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-\nthis.min.y))},intersectsBox:function(a){return a.max.x<this.min.x||a.min.x>this.max.x||a.max.y<this.min.y||a.min.y>this.max.y?!1:!0},clampPoint:function(a,b){return(b||new C).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new C;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);\nthis.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};var pf=0;W.prototype={constructor:W,isMaterial:!0,get needsUpdate(){return this._needsUpdate},set needsUpdate(a){!0===a&&this.update();this._needsUpdate=a},setValues:function(a){if(void 0!==a)for(var b in a){var c=a[b];if(void 0===c)console.warn(\"THREE.Material: '\"+b+\"' parameter is undefined.\");else{var d=this[b];void 0===d?console.warn(\"THREE.\"+this.type+\": '\"+b+\"' is not a property of this material.\"):\nd&&d.isColor?d.set(c):d&&d.isVector3&&c&&c.isVector3?d.copy(c):this[b]=\"overdraw\"===b?Number(c):c}}},toJSON:function(a){function b(a){var b=[],c;for(c in a){var d=a[c];delete d.metadata;b.push(d)}return b}var c=void 0===a;c&&(a={textures:{},images:{}});var d={metadata:{version:4.4,type:\"Material\",generator:\"Material.toJSON\"}};d.uuid=this.uuid;d.type=this.type;\"\"!==this.name&&(d.name=this.name);this.color&&this.color.isColor&&(d.color=this.color.getHex());void 0!==this.roughness&&(d.roughness=this.roughness);\nvoid 0!==this.metalness&&(d.metalness=this.metalness);this.emissive&&this.emissive.isColor&&(d.emissive=this.emissive.getHex());this.specular&&this.specular.isColor&&(d.specular=this.specular.getHex());void 0!==this.shininess&&(d.shininess=this.shininess);void 0!==this.clearCoat&&(d.clearCoat=this.clearCoat);void 0!==this.clearCoatRoughness&&(d.clearCoatRoughness=this.clearCoatRoughness);this.map&&this.map.isTexture&&(d.map=this.map.toJSON(a).uuid);this.alphaMap&&this.alphaMap.isTexture&&(d.alphaMap=\nthis.alphaMap.toJSON(a).uuid);this.lightMap&&this.lightMap.isTexture&&(d.lightMap=this.lightMap.toJSON(a).uuid);this.bumpMap&&this.bumpMap.isTexture&&(d.bumpMap=this.bumpMap.toJSON(a).uuid,d.bumpScale=this.bumpScale);this.normalMap&&this.normalMap.isTexture&&(d.normalMap=this.normalMap.toJSON(a).uuid,d.normalScale=this.normalScale.toArray());this.displacementMap&&this.displacementMap.isTexture&&(d.displacementMap=this.displacementMap.toJSON(a).uuid,d.displacementScale=this.displacementScale,d.displacementBias=\nthis.displacementBias);this.roughnessMap&&this.roughnessMap.isTexture&&(d.roughnessMap=this.roughnessMap.toJSON(a).uuid);this.metalnessMap&&this.metalnessMap.isTexture&&(d.metalnessMap=this.metalnessMap.toJSON(a).uuid);this.emissiveMap&&this.emissiveMap.isTexture&&(d.emissiveMap=this.emissiveMap.toJSON(a).uuid);this.specularMap&&this.specularMap.isTexture&&(d.specularMap=this.specularMap.toJSON(a).uuid);this.envMap&&this.envMap.isTexture&&(d.envMap=this.envMap.toJSON(a).uuid,d.reflectivity=this.reflectivity);\nthis.gradientMap&&this.gradientMap.isTexture&&(d.gradientMap=this.gradientMap.toJSON(a).uuid);void 0!==this.size&&(d.size=this.size);void 0!==this.sizeAttenuation&&(d.sizeAttenuation=this.sizeAttenuation);1!==this.blending&&(d.blending=this.blending);2!==this.shading&&(d.shading=this.shading);0!==this.side&&(d.side=this.side);0!==this.vertexColors&&(d.vertexColors=this.vertexColors);1>this.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;\nd.depthTest=this.depthTest;d.depthWrite=this.depthWrite;0<this.alphaTest&&(d.alphaTest=this.alphaTest);!0===this.premultipliedAlpha&&(d.premultipliedAlpha=this.premultipliedAlpha);!0===this.wireframe&&(d.wireframe=this.wireframe);1<this.wireframeLinewidth&&(d.wireframeLinewidth=this.wireframeLinewidth);\"round\"!==this.wireframeLinecap&&(d.wireframeLinecap=this.wireframeLinecap);\"round\"!==this.wireframeLinejoin&&(d.wireframeLinejoin=this.wireframeLinejoin);d.skinning=this.skinning;d.morphTargets=this.morphTargets;\nc&&(c=b(a.textures),a=b(a.images),0<c.length&&(d.textures=c),0<a.length&&(d.images=a));return d},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.name=a.name;this.fog=a.fog;this.lights=a.lights;this.blending=a.blending;this.side=a.side;this.shading=a.shading;this.vertexColors=a.vertexColors;this.opacity=a.opacity;this.transparent=a.transparent;this.blendSrc=a.blendSrc;this.blendDst=a.blendDst;this.blendEquation=a.blendEquation;this.blendSrcAlpha=a.blendSrcAlpha;this.blendDstAlpha=\na.blendDstAlpha;this.blendEquationAlpha=a.blendEquationAlpha;this.depthFunc=a.depthFunc;this.depthTest=a.depthTest;this.depthWrite=a.depthWrite;this.colorWrite=a.colorWrite;this.precision=a.precision;this.polygonOffset=a.polygonOffset;this.polygonOffsetFactor=a.polygonOffsetFactor;this.polygonOffsetUnits=a.polygonOffsetUnits;this.alphaTest=a.alphaTest;this.premultipliedAlpha=a.premultipliedAlpha;this.overdraw=a.overdraw;this.visible=a.visible;this.clipShadows=a.clipShadows;this.clipIntersection=a.clipIntersection;\na=a.clippingPlanes;var b=null;if(null!==a)for(var c=a.length,b=Array(c),d=0;d!==c;++d)b[d]=a[d].clone();this.clippingPlanes=b;return this},update:function(){this.dispatchEvent({type:\"update\"})},dispose:function(){this.dispatchEvent({type:\"dispose\"})}};Object.assign(W.prototype,oa.prototype);Ia.prototype=Object.create(W.prototype);Ia.prototype.constructor=Ia;Ia.prototype.isShaderMaterial=!0;Ia.prototype.copy=function(a){W.prototype.copy.call(this,a);this.fragmentShader=a.fragmentShader;this.vertexShader=\na.vertexShader;this.uniforms=Ja.clone(a.uniforms);this.defines=a.defines;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.lights=a.lights;this.clipping=a.clipping;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;this.extensions=a.extensions;return this};Ia.prototype.toJSON=function(a){a=W.prototype.toJSON.call(this,a);a.uniforms=this.uniforms;a.vertexShader=this.vertexShader;a.fragmentShader=this.fragmentShader;return a};ab.prototype=\nObject.create(W.prototype);ab.prototype.constructor=ab;ab.prototype.isMeshDepthMaterial=!0;ab.prototype.copy=function(a){W.prototype.copy.call(this,a);this.depthPacking=a.depthPacking;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;return this};ya.prototype=\n{constructor:ya,isBox3:!0,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.length;h<k;h+=3){var m=a[h],l=a[h+1],p=a[h+2];m<b&&(b=m);l<c&&(c=l);p<d&&(d=p);m>e&&(e=m);l>f&&(f=l);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.count;h<k;h++){var m=a.getX(h),\nl=a.getY(h),p=a.getZ(h);m<b&&(b=m);l<c&&(c=l);p<d&&(d=p);m>e&&(e=m);l>f&&(f=l);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;b<c;b++)this.expandByPoint(a[b]);return this},setFromCenterAndSize:function(){var a=new q;return function(b,c){var d=a.copy(c).multiplyScalar(.5);this.min.copy(b).sub(d);this.max.copy(b).add(d);return this}}(),setFromObject:function(){var a=new q;return function(b){var c=this;b.updateMatrixWorld(!0);this.makeEmpty();\nb.traverse(function(b){var e,f;e=b.geometry;if(void 0!==e)if(e.isGeometry){var g=e.vertices;e=0;for(f=g.length;e<f;e++)a.copy(g[e]),a.applyMatrix4(b.matrixWorld),c.expandByPoint(a)}else if(e.isBufferGeometry&&(g=e.attributes.position,void 0!==g))for(e=0,f=g.count;e<f;e++)a.fromAttribute(g,e).applyMatrix4(b.matrixWorld),c.expandByPoint(a)});return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=\nthis.min.y=this.min.z=Infinity;this.max.x=this.max.y=this.max.z=-Infinity;return this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z},getCenter:function(a){a=a||new q;return this.isEmpty()?a.set(0,0,0):a.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(a){a=a||new q;return this.isEmpty()?a.set(0,0,0):a.subVectors(this.max,this.min)},expandByPoint:function(a){this.min.min(a);this.max.max(a);return this},expandByVector:function(a){this.min.sub(a);\nthis.max.add(a);return this},expandByScalar:function(a){this.min.addScalar(-a);this.max.addScalar(a);return this},containsPoint:function(a){return a.x<this.min.x||a.x>this.max.x||a.y<this.min.y||a.y>this.max.y||a.z<this.min.z||a.z>this.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z},getParameter:function(a,b){return(b||new q).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/\n(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.x<this.min.x||a.min.x>this.max.x||a.max.y<this.min.y||a.min.y>this.max.y||a.max.z<this.min.z||a.min.z>this.max.z?!1:!0},intersectsSphere:function(){var a;return function(b){void 0===a&&(a=new q);this.clampPoint(b.center,a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){var b,c;0<a.normal.x?(b=a.normal.x*this.min.x,c=a.normal.x*this.max.x):(b=a.normal.x*\nthis.max.x,c=a.normal.x*this.min.x);0<a.normal.y?(b+=a.normal.y*this.min.y,c+=a.normal.y*this.max.y):(b+=a.normal.y*this.max.y,c+=a.normal.y*this.min.y);0<a.normal.z?(b+=a.normal.z*this.min.z,c+=a.normal.z*this.max.z):(b+=a.normal.z*this.max.z,c+=a.normal.z*this.min.z);return b<=a.constant&&c>=a.constant},clampPoint:function(a,b){return(b||new q).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new q;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),\ngetBoundingSphere:function(){var a=new q;return function(b){b=b||new Fa;this.getCenter(b.center);b.radius=.5*this.getSize(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new q,new q,new q,new q,new q,new q,new q,new q];return function(b){if(this.isEmpty())return this;a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);\na[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);\nreturn this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};Fa.prototype={constructor:Fa,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new ya;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).getCenter(d);for(var e=0,f=0,g=b.length;f<g;f++)e=Math.max(e,d.distanceToSquared(b[f]));this.radius=Math.sqrt(e);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.center.copy(a.center);\nthis.radius=a.radius;return this},empty:function(){return 0>=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(this.center.dot(a.normal)-a.constant)<=this.radius},\nclampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new q;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new ya;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&\na.radius===this.radius}};za.prototype={constructor:za,isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,k){var m=this.elements;m[0]=a;m[1]=d;m[2]=g;m[3]=b;m[4]=e;m[5]=h;m[6]=c;m[7]=f;m[8]=k;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(a){a=a.elements;this.set(a[0],a[3],a[6],a[1],a[4],a[7],a[2],a[5],a[8]);return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9],\na[2],a[6],a[10]);return this},applyToVector3Array:function(){var a;return function(b,c,d){void 0===a&&(a=new q);void 0===c&&(c=0);void 0===d&&(d=b.length);for(var e=0;e<d;e+=3,c+=3)a.fromArray(b,c),a.applyMatrix3(this),a.toArray(b,c);return b}}(),applyToBufferAttribute:function(){var a;return function(b){void 0===a&&(a=new q);for(var c=0,d=b.count;c<d;c++)a.x=b.getX(c),a.y=b.getY(c),a.z=b.getZ(c),a.applyMatrix3(this),b.setXYZ(c,a.x,a.y,a.z);return b}}(),multiplyScalar:function(a){var b=this.elements;\nb[0]*=a;b[3]*=a;b[6]*=a;b[1]*=a;b[4]*=a;b[7]*=a;b[2]*=a;b[5]*=a;b[8]*=a;return this},determinant:function(){var a=this.elements,b=a[0],c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],h=a[6],k=a[7],a=a[8];return b*f*a-b*g*k-c*e*a+c*g*h+d*e*k-d*f*h},getInverse:function(a,b){a&&a.isMatrix4&&console.error(\"THREE.Matrix3.getInverse no longer takes a Matrix4 argument.\");var c=a.elements,d=this.elements,e=c[0],f=c[1],g=c[2],h=c[3],k=c[4],m=c[5],l=c[6],p=c[7],c=c[8],n=c*k-m*p,r=m*l-c*h,w=p*h-k*l,q=e*n+f*r+g*w;if(0===\nq){if(!0===b)throw Error(\"THREE.Matrix3.getInverse(): can't invert matrix, determinant is 0\");console.warn(\"THREE.Matrix3.getInverse(): can't invert matrix, determinant is 0\");return this.identity()}q=1/q;d[0]=n*q;d[1]=(g*p-c*f)*q;d[2]=(m*f-g*k)*q;d[3]=r*q;d[4]=(c*e-g*l)*q;d[5]=(g*h-m*e)*q;d[6]=w*q;d[7]=(f*l-p*e)*q;d[8]=(k*e-f*h)*q;return this},transpose:function(){var a,b=this.elements;a=b[1];b[1]=b[3];b[3]=a;a=b[2];b[2]=b[6];b[6]=a;a=b[5];b[5]=b[7];b[7]=a;return this},getNormalMatrix:function(a){return this.setFromMatrix4(a).getInverse(this).transpose()},\ntransposeIntoArray:function(a){var b=this.elements;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;9>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}};ma.prototype={constructor:ma,set:function(a,b){this.normal.copy(a);\nthis.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new q,b=new q;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);\nthis.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,b){var c=this.distanceToPoint(a);return(b||\nnew q).copy(this.normal).multiplyScalar(c)},intersectLine:function(){var a=new q;return function(b,c){var d=c||new q,e=b.delta(a),f=this.normal.dot(e);if(0===f){if(0===this.distanceToPoint(b.start))return d.copy(b.start)}else return f=-(b.start.dot(this.normal)+this.constant)/f,0>f||1<f?void 0:d.copy(e).multiplyScalar(f).add(b.start)}}(),intersectsLine:function(a){var b=this.distanceToPoint(a.start);a=this.distanceToPoint(a.end);return 0>b&&0<a||0>a&&0<b},intersectsBox:function(a){return a.intersectsPlane(this)},\nintersectsSphere:function(a){return a.intersectsPlane(this)},coplanarPoint:function(a){return(a||new q).copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var a=new q,b=new za;return function(c,d){var e=this.coplanarPoint(a).applyMatrix4(c),f=d||b.getNormalMatrix(c),f=this.normal.applyMatrix3(f).normalize();this.constant=-e.dot(f);return this}}(),translate:function(a){this.constant-=a.dot(this.normal);return this},equals:function(a){return a.normal.equals(this.normal)&&a.constant===\nthis.constant}};qc.prototype={constructor:qc,set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],m=c[7],l=c[8],p=c[9],n=c[10],r=c[11],q=c[12],u=c[13],F=c[14],c=c[15];\nb[0].setComponents(f-a,m-g,r-l,c-q).normalize();b[1].setComponents(f+a,m+g,r+l,c+q).normalize();b[2].setComponents(f+d,m+h,r+p,c+u).normalize();b[3].setComponents(f-d,m-h,r-p,c-u).normalize();b[4].setComponents(f-e,m-k,r-n,c-F).normalize();b[5].setComponents(f+e,m+k,r+n,c+F).normalize();return this},intersectsObject:function(){var a=new Fa;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere).applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),\nintersectsSprite:function(){var a=new Fa;return function(b){a.center.set(0,0,0);a.radius=.7071067811865476;a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)<a)return!1;return!0},intersectsBox:function(){var a=new q,b=new q;return function(c){for(var d=this.planes,e=0;6>e;e++){var f=d[e];a.x=0<f.normal.x?c.min.x:c.max.x;b.x=0<f.normal.x?c.max.x:c.min.x;a.y=0<f.normal.y?\nc.min.y:c.max.y;b.y=0<f.normal.y?c.max.y:c.min.y;a.z=0<f.normal.z?c.min.z:c.max.z;b.z=0<f.normal.z?c.max.z:c.min.z;var g=f.distanceToPoint(a),f=f.distanceToPoint(b);if(0>g&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}};bb.prototype={constructor:bb,set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);\nthis.direction.copy(a.direction);return this},at:function(a,b){return(b||new q).copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize();return this},recast:function(){var a=new q;return function(b){this.origin.copy(this.at(b,a));return this}}(),closestPointToPoint:function(a,b){var c=b||new q;c.subVectors(a,this.origin);var d=c.dot(this.direction);return 0>d?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)},\ndistanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new q;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new q,b=new q,c=new q;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);\nvar h=.5*d.distanceTo(e),k=-this.direction.dot(b),m=c.dot(this.direction),l=-c.dot(b),p=c.lengthSq(),n=Math.abs(1-k*k),r;0<n?(d=k*l-m,e=k*m-l,r=h*n,0<=d?e>=-r?e<=r?(h=1/n,d*=h,e*=h,k=d*(d+k*e+2*m)+e*(k*d+e+2*l)+p):(e=h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+p):(e=-h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+p):e<=-r?(d=Math.max(0,-(-k*h+m)),e=0<d?-h:Math.min(Math.max(-h,-l),h),k=-d*d+e*(e+2*l)+p):e<=r?(d=0,e=Math.min(Math.max(-h,-l),h),k=e*(e+2*l)+p):(d=Math.max(0,-(k*h+m)),e=0<d?h:Math.min(Math.max(-h,\n-l),h),k=-d*d+e*(e+2*l)+p)):(e=0<k?-h:h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+p);f&&f.copy(this.direction).multiplyScalar(d).add(this.origin);g&&g.copy(b).multiplyScalar(e).add(a);return k}}(),intersectSphere:function(){var a=new q;return function(b,c){a.subVectors(b.center,this.origin);var d=a.dot(this.direction),e=a.dot(a)-d*d,f=b.radius*b.radius;if(e>f)return null;f=Math.sqrt(f-e);e=d-f;d+=f;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=\na.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){var c=this.distanceToPlane(a);return null===c?null:this.at(c,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c,d,e,f,g;d=1/this.direction.x;f=1/this.direction.y;g=1/this.direction.z;\nvar h=this.origin;0<=d?(c=(a.min.x-h.x)*d,d*=a.max.x-h.x):(c=(a.max.x-h.x)*d,d*=a.min.x-h.x);0<=f?(e=(a.min.y-h.y)*f,f*=a.max.y-h.y):(e=(a.max.y-h.y)*f,f*=a.min.y-h.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e;if(f<d||d!==d)d=f;0<=g?(e=(a.min.z-h.z)*g,g*=a.max.z-h.z):(e=(a.max.z-h.z)*g,g*=a.min.z-h.z);if(c>g||e>d)return null;if(e>c||c!==c)c=e;if(g<d||d!==d)d=g;return 0>d?null:this.at(0<=c?c:d,b)},intersectsBox:function(){var a=new q;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=\nnew q,b=new q,c=new q,d=new q;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0<f){if(h)return null;h=1}else if(0>f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);\nthis.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}};cb.RotationOrders=\"XYZ YZX ZXY XZY YXZ ZYX\".split(\" \");cb.DefaultOrder=\"XYZ\";cb.prototype={constructor:cb,isEuler:!0,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get order(){return this._order},\nset order(a){this._order=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=Q.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],m=e[9],l=e[2],p=e[6],e=e[10];b=b||\nthis._order;\"XYZ\"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-m,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(p,k),this._z=0)):\"YXZ\"===b?(this._x=Math.asin(-d(m,-1,1)),.99999>Math.abs(m)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-l,a),this._z=0)):\"ZXY\"===b?(this._x=Math.asin(d(p,-1,1)),.99999>Math.abs(p)?(this._y=Math.atan2(-l,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):\"ZYX\"===b?(this._y=Math.asin(-d(l,-1,1)),.99999>\nMath.abs(l)?(this._x=Math.atan2(p,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):\"YZX\"===b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-m,k),this._y=Math.atan2(-l,a)):(this._x=0,this._y=Math.atan2(g,e))):\"XZY\"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(p,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-m,e),this._y=0)):console.warn(\"THREE.Euler: .setFromRotationMatrix() given unsupported order: \"+b);this._order=b;if(!1!==c)this.onChangeCallback();\nreturn this},setFromQuaternion:function(){var a;return function(b,c,d){void 0===a&&(a=new H);a.makeRotationFromQuaternion(b);return this.setFromRotationMatrix(a,c,d)}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new da;return function(b){a.setFromEuler(this);return this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];\nthis._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new q(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};gd.prototype={constructor:gd,set:function(a){this.mask=1<<a},enable:function(a){this.mask|=1<<a},toggle:function(a){this.mask^=\n1<<a},disable:function(a){this.mask&=~(1<<a)},test:function(a){return 0!==(this.mask&a.mask)}};var qf=0;G.DefaultUp=new q(0,1,0);G.DefaultMatrixAutoUpdate=!0;Object.assign(G.prototype,oa.prototype,{isObject3D:!0,applyMatrix:function(a){this.matrix.multiplyMatrices(a,this.matrix);this.matrix.decompose(this.position,this.quaternion,this.scale)},setRotationFromAxisAngle:function(a,b){this.quaternion.setFromAxisAngle(a,b)},setRotationFromEuler:function(a){this.quaternion.setFromEuler(a,!0)},setRotationFromMatrix:function(a){this.quaternion.setFromRotationMatrix(a)},\nsetRotationFromQuaternion:function(a){this.quaternion.copy(a)},rotateOnAxis:function(){var a=new da;return function(b,c){a.setFromAxisAngle(b,c);this.quaternion.multiply(a);return this}}(),rotateX:function(){var a=new q(1,0,0);return function(b){return this.rotateOnAxis(a,b)}}(),rotateY:function(){var a=new q(0,1,0);return function(b){return this.rotateOnAxis(a,b)}}(),rotateZ:function(){var a=new q(0,0,1);return function(b){return this.rotateOnAxis(a,b)}}(),translateOnAxis:function(){var a=new q;\nreturn function(b,c){a.copy(b).applyQuaternion(this.quaternion);this.position.add(a.multiplyScalar(c));return this}}(),translateX:function(){var a=new q(1,0,0);return function(b){return this.translateOnAxis(a,b)}}(),translateY:function(){var a=new q(0,1,0);return function(b){return this.translateOnAxis(a,b)}}(),translateZ:function(){var a=new q(0,0,1);return function(b){return this.translateOnAxis(a,b)}}(),localToWorld:function(a){return a.applyMatrix4(this.matrixWorld)},worldToLocal:function(){var a=\nnew H;return function(b){return b.applyMatrix4(a.getInverse(this.matrixWorld))}}(),lookAt:function(){var a=new H;return function(b){a.lookAt(b,this.position,this.up);this.quaternion.setFromRotationMatrix(a)}}(),add:function(a){if(1<arguments.length){for(var b=0;b<arguments.length;b++)this.add(arguments[b]);return this}if(a===this)return console.error(\"THREE.Object3D.add: object can't be added as a child of itself.\",a),this;a&&a.isObject3D?(null!==a.parent&&a.parent.remove(a),a.parent=this,a.dispatchEvent({type:\"added\"}),\nthis.children.push(a)):console.error(\"THREE.Object3D.add: object not an instance of THREE.Object3D.\",a);return this},remove:function(a){if(1<arguments.length)for(var b=0;b<arguments.length;b++)this.remove(arguments[b]);b=this.children.indexOf(a);-1!==b&&(a.parent=null,a.dispatchEvent({type:\"removed\"}),this.children.splice(b,1))},getObjectById:function(a){return this.getObjectByProperty(\"id\",a)},getObjectByName:function(a){return this.getObjectByProperty(\"name\",a)},getObjectByProperty:function(a,b){if(this[a]===\nb)return this;for(var c=0,d=this.children.length;c<d;c++){var e=this.children[c].getObjectByProperty(a,b);if(void 0!==e)return e}},getWorldPosition:function(a){a=a||new q;this.updateMatrixWorld(!0);return a.setFromMatrixPosition(this.matrixWorld)},getWorldQuaternion:function(){var a=new q,b=new q;return function(c){c=c||new da;this.updateMatrixWorld(!0);this.matrixWorld.decompose(a,c,b);return c}}(),getWorldRotation:function(){var a=new da;return function(b){b=b||new cb;this.getWorldQuaternion(a);\nreturn b.setFromQuaternion(a,this.rotation.order,!1)}}(),getWorldScale:function(){var a=new q,b=new da;return function(c){c=c||new q;this.updateMatrixWorld(!0);this.matrixWorld.decompose(a,b,c);return c}}(),getWorldDirection:function(){var a=new da;return function(b){b=b||new q;this.getWorldQuaternion(a);return b.set(0,0,1).applyQuaternion(a)}}(),raycast:function(){},traverse:function(a){a(this);for(var b=this.children,c=0,d=b.length;c<d;c++)b[c].traverse(a)},traverseVisible:function(a){if(!1!==this.visible){a(this);\nfor(var b=this.children,c=0,d=b.length;c<d;c++)b[c].traverseVisible(a)}},traverseAncestors:function(a){var b=this.parent;null!==b&&(a(b),b.traverseAncestors(a))},updateMatrix:function(){this.matrix.compose(this.position,this.quaternion,this.scale);this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(a){!0===this.matrixAutoUpdate&&this.updateMatrix();if(!0===this.matrixWorldNeedsUpdate||!0===a)null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,\nthis.matrix),this.matrixWorldNeedsUpdate=!1,a=!0;for(var b=this.children,c=0,d=b.length;c<d;c++)b[c].updateMatrixWorld(a)},toJSON:function(a){function b(a){var b=[],c;for(c in a){var d=a[c];delete d.metadata;b.push(d)}return b}var c=void 0===a||\"\"===a,d={};c&&(a={geometries:{},materials:{},textures:{},images:{}},d.metadata={version:4.4,type:\"Object\",generator:\"Object3D.toJSON\"});var e={};e.uuid=this.uuid;e.type=this.type;\"\"!==this.name&&(e.name=this.name);\"{}\"!==JSON.stringify(this.userData)&&(e.userData=\nthis.userData);!0===this.castShadow&&(e.castShadow=!0);!0===this.receiveShadow&&(e.receiveShadow=!0);!1===this.visible&&(e.visible=!1);e.matrix=this.matrix.toArray();void 0!==this.geometry&&(void 0===a.geometries[this.geometry.uuid]&&(a.geometries[this.geometry.uuid]=this.geometry.toJSON(a)),e.geometry=this.geometry.uuid);void 0!==this.material&&(void 0===a.materials[this.material.uuid]&&(a.materials[this.material.uuid]=this.material.toJSON(a)),e.material=this.material.uuid);if(0<this.children.length){e.children=\n[];for(var f=0;f<this.children.length;f++)e.children.push(this.children[f].toJSON(a).object)}if(c){var c=b(a.geometries),f=b(a.materials),g=b(a.textures);a=b(a.images);0<c.length&&(d.geometries=c);0<f.length&&(d.materials=f);0<g.length&&(d.textures=g);0<a.length&&(d.images=a)}d.object=e;return d},clone:function(a){return(new this.constructor).copy(this,a)},copy:function(a,b){void 0===b&&(b=!0);this.name=a.name;this.up.copy(a.up);this.position.copy(a.position);this.quaternion.copy(a.quaternion);this.scale.copy(a.scale);\nthis.matrix.copy(a.matrix);this.matrixWorld.copy(a.matrixWorld);this.matrixAutoUpdate=a.matrixAutoUpdate;this.matrixWorldNeedsUpdate=a.matrixWorldNeedsUpdate;this.layers.mask=a.layers.mask;this.visible=a.visible;this.castShadow=a.castShadow;this.receiveShadow=a.receiveShadow;this.frustumCulled=a.frustumCulled;this.renderOrder=a.renderOrder;this.userData=JSON.parse(JSON.stringify(a.userData));if(!0===b)for(var c=0;c<a.children.length;c++)this.add(a.children[c].clone());return this}});gb.prototype=\n{constructor:gb,set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},getCenter:function(a){return(a||new q).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){return(a||new q).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},\nat:function(a,b){var c=b||new q;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new q,b=new q;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=Q.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new q;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);\nreturn this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}};Aa.normal=function(){var a=new q;return function(b,c,d,e){e=e||new q;e.subVectors(d,c);a.subVectors(b,c);e.cross(a);b=e.lengthSq();return 0<b?e.multiplyScalar(1/Math.sqrt(b)):e.set(0,0,0)}}();Aa.barycoordFromPoint=function(){var a=new q,b=new q,c=new q;return function(d,e,f,g,h){a.subVectors(g,e);b.subVectors(f,e);c.subVectors(d,e);d=a.dot(a);e=a.dot(b);f=a.dot(c);var k=b.dot(b);g=b.dot(c);var m=d*k-e*e;h=\nh||new q;if(0===m)return h.set(-2,-1,-1);m=1/m;k=(k*f-e*g)*m;d=(d*g-e*f)*m;return h.set(1-k-d,d,k)}}();Aa.containsPoint=function(){var a=new q;return function(b,c,d,e){b=Aa.barycoordFromPoint(b,c,d,e,a);return 0<=b.x&&0<=b.y&&1>=b.x+b.y}}();Aa.prototype={constructor:Aa,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},\ncopy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new q,b=new q;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new q).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return Aa.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new ma).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return Aa.barycoordFromPoint(a,\nthis.a,this.b,this.c,b)},containsPoint:function(a){return Aa.containsPoint(a,this.a,this.b,this.c)},closestPointToPoint:function(){var a,b,c,d;return function(e,f){void 0===a&&(a=new ma,b=[new gb,new gb,new gb],c=new q,d=new q);var g=f||new q,h=Infinity;a.setFromCoplanarPoints(this.a,this.b,this.c);a.projectPoint(e,c);if(!0===this.containsPoint(c))g.copy(c);else{b[0].set(this.a,this.b);b[1].set(this.b,this.c);b[2].set(this.c,this.a);for(var k=0;k<b.length;k++){b[k].closestPointToPoint(c,!0,d);var m=\nc.distanceToSquared(d);m<h&&(h=m,g.copy(d))}}return g}}(),equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}};ha.prototype={constructor:ha,clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a=a.a;this.b=a.b;this.c=a.c;this.normal.copy(a.normal);this.color.copy(a.color);this.materialIndex=a.materialIndex;for(var b=0,c=a.vertexNormals.length;b<c;b++)this.vertexNormals[b]=a.vertexNormals[b].clone();b=0;for(c=a.vertexColors.length;b<c;b++)this.vertexColors[b]=\na.vertexColors[b].clone();return this}};Ka.prototype=Object.create(W.prototype);Ka.prototype.constructor=Ka;Ka.prototype.isMeshBasicMaterial=!0;Ka.prototype.copy=function(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;\nthis.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;return this};y.prototype={constructor:y,isBufferAttribute:!0,set needsUpdate(a){!0===a&&this.version++},setArray:function(a){if(Array.isArray(a))throw new TypeError(\"THREE.BufferAttribute: array should be a Typed Array.\");this.count=void 0!==a?a.length/\nthis.itemSize:0;this.array=a},setDynamic:function(a){this.dynamic=a;return this},copy:function(a){this.array=new a.array.constructor(a.array);this.itemSize=a.itemSize;this.count=a.count;this.normalized=a.normalized;this.dynamic=a.dynamic;return this},copyAt:function(a,b,c){a*=this.itemSize;c*=b.itemSize;for(var d=0,e=this.itemSize;d<e;d++)this.array[a+d]=b.array[c+d];return this},copyArray:function(a){this.array.set(a);return this},copyColorsArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<\ne;d++){var f=a[d];void 0===f&&(console.warn(\"THREE.BufferAttribute.copyColorsArray(): color is undefined\",d),f=new N);b[c++]=f.r;b[c++]=f.g;b[c++]=f.b}return this},copyIndicesArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<e;d++){var f=a[d];b[c++]=f.a;b[c++]=f.b;b[c++]=f.c}return this},copyVector2sArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<e;d++){var f=a[d];void 0===f&&(console.warn(\"THREE.BufferAttribute.copyVector2sArray(): vector is undefined\",d),f=new C);b[c++]=f.x;\nb[c++]=f.y}return this},copyVector3sArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<e;d++){var f=a[d];void 0===f&&(console.warn(\"THREE.BufferAttribute.copyVector3sArray(): vector is undefined\",d),f=new q);b[c++]=f.x;b[c++]=f.y;b[c++]=f.z}return this},copyVector4sArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<e;d++){var f=a[d];void 0===f&&(console.warn(\"THREE.BufferAttribute.copyVector4sArray(): vector is undefined\",d),f=new ga);b[c++]=f.x;b[c++]=f.y;b[c++]=f.z;b[c++]=f.w}return this},\nset:function(a,b){void 0===b&&(b=0);this.array.set(a,b);return this},getX:function(a){return this.array[a*this.itemSize]},setX:function(a,b){this.array[a*this.itemSize]=b;return this},getY:function(a){return this.array[a*this.itemSize+1]},setY:function(a,b){this.array[a*this.itemSize+1]=b;return this},getZ:function(a){return this.array[a*this.itemSize+2]},setZ:function(a,b){this.array[a*this.itemSize+2]=b;return this},getW:function(a){return this.array[a*this.itemSize+3]},setW:function(a,b){this.array[a*\nthis.itemSize+3]=b;return this},setXY:function(a,b,c){a*=this.itemSize;this.array[a+0]=b;this.array[a+1]=c;return this},setXYZ:function(a,b,c,d){a*=this.itemSize;this.array[a+0]=b;this.array[a+1]=c;this.array[a+2]=d;return this},setXYZW:function(a,b,c,d,e){a*=this.itemSize;this.array[a+0]=b;this.array[a+1]=c;this.array[a+2]=d;this.array[a+3]=e;return this},onUpload:function(a){this.onUploadCallback=a;return this},clone:function(){return(new this.constructor).copy(this)}};rc.prototype=Object.create(y.prototype);\nrc.prototype.constructor=rc;sc.prototype=Object.create(y.prototype);sc.prototype.constructor=sc;tc.prototype=Object.create(y.prototype);tc.prototype.constructor=tc;uc.prototype=Object.create(y.prototype);uc.prototype.constructor=uc;Ra.prototype=Object.create(y.prototype);Ra.prototype.constructor=Ra;vc.prototype=Object.create(y.prototype);vc.prototype.constructor=vc;Ua.prototype=Object.create(y.prototype);Ua.prototype.constructor=Ua;X.prototype=Object.create(y.prototype);X.prototype.constructor=X;\nwc.prototype=Object.create(y.prototype);wc.prototype.constructor=wc;Object.assign(ze.prototype,{computeGroups:function(a){var b,c=[],d=void 0;a=a.faces;for(var e=0;e<a.length;e++){var f=a[e];f.materialIndex!==d&&(d=f.materialIndex,void 0!==b&&(b.count=3*e-b.start,c.push(b)),b={start:3*e,materialIndex:d})}void 0!==b&&(b.count=3*e-b.start,c.push(b));this.groups=c},fromGeometry:function(a){var b=a.faces,c=a.vertices,d=a.faceVertexUvs,e=d[0]&&0<d[0].length,f=d[1]&&0<d[1].length,g=a.morphTargets,h=g.length,\nk;if(0<h){k=[];for(var m=0;m<h;m++)k[m]=[];this.morphTargets.position=k}var l=a.morphNormals,p=l.length,n;if(0<p){n=[];for(m=0;m<p;m++)n[m]=[];this.morphTargets.normal=n}for(var r=a.skinIndices,q=a.skinWeights,u=r.length===c.length,F=q.length===c.length,m=0;m<b.length;m++){var t=b[m];this.vertices.push(c[t.a],c[t.b],c[t.c]);var v=t.vertexNormals;3===v.length?this.normals.push(v[0],v[1],v[2]):(v=t.normal,this.normals.push(v,v,v));v=t.vertexColors;3===v.length?this.colors.push(v[0],v[1],v[2]):(v=t.color,\nthis.colors.push(v,v,v));!0===e&&(v=d[0][m],void 0!==v?this.uvs.push(v[0],v[1],v[2]):(console.warn(\"THREE.DirectGeometry.fromGeometry(): Undefined vertexUv \",m),this.uvs.push(new C,new C,new C)));!0===f&&(v=d[1][m],void 0!==v?this.uvs2.push(v[0],v[1],v[2]):(console.warn(\"THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 \",m),this.uvs2.push(new C,new C,new C)));for(v=0;v<h;v++){var M=g[v].vertices;k[v].push(M[t.a],M[t.b],M[t.c])}for(v=0;v<p;v++)M=l[v].vertexNormals[m],n[v].push(M.a,M.b,M.c);\nu&&this.skinIndices.push(r[t.a],r[t.b],r[t.c]);F&&this.skinWeights.push(q[t.a],q[t.b],q[t.c])}this.computeGroups(a);this.verticesNeedUpdate=a.verticesNeedUpdate;this.normalsNeedUpdate=a.normalsNeedUpdate;this.colorsNeedUpdate=a.colorsNeedUpdate;this.uvsNeedUpdate=a.uvsNeedUpdate;this.groupsNeedUpdate=a.groupsNeedUpdate;return this}});Object.assign(S.prototype,oa.prototype,{isGeometry:!0,applyMatrix:function(a){for(var b=(new za).getNormalMatrix(a),c=0,d=this.vertices.length;c<d;c++)this.vertices[c].applyMatrix4(a);\nc=0;for(d=this.faces.length;c<d;c++){a=this.faces[c];a.normal.applyMatrix3(b).normalize();for(var e=0,f=a.vertexNormals.length;e<f;e++)a.vertexNormals[e].applyMatrix3(b).normalize()}null!==this.boundingBox&&this.computeBoundingBox();null!==this.boundingSphere&&this.computeBoundingSphere();this.normalsNeedUpdate=this.verticesNeedUpdate=!0;return this},rotateX:function(){var a;return function(b){void 0===a&&(a=new H);a.makeRotationX(b);this.applyMatrix(a);return this}}(),rotateY:function(){var a;return function(b){void 0===\na&&(a=new H);a.makeRotationY(b);this.applyMatrix(a);return this}}(),rotateZ:function(){var a;return function(b){void 0===a&&(a=new H);a.makeRotationZ(b);this.applyMatrix(a);return this}}(),translate:function(){var a;return function(b,c,d){void 0===a&&(a=new H);a.makeTranslation(b,c,d);this.applyMatrix(a);return this}}(),scale:function(){var a;return function(b,c,d){void 0===a&&(a=new H);a.makeScale(b,c,d);this.applyMatrix(a);return this}}(),lookAt:function(){var a;return function(b){void 0===a&&(a=\nnew G);a.lookAt(b);a.updateMatrix();this.applyMatrix(a.matrix)}}(),fromBufferGeometry:function(a){function b(a,b,d,e){var f=void 0!==g?[l[a].clone(),l[b].clone(),l[d].clone()]:[],r=void 0!==h?[c.colors[a].clone(),c.colors[b].clone(),c.colors[d].clone()]:[];e=new ha(a,b,d,f,r,e);c.faces.push(e);void 0!==k&&c.faceVertexUvs[0].push([p[a].clone(),p[b].clone(),p[d].clone()]);void 0!==m&&c.faceVertexUvs[1].push([n[a].clone(),n[b].clone(),n[d].clone()])}var c=this,d=null!==a.index?a.index.array:void 0,e=\na.attributes,f=e.position.array,g=void 0!==e.normal?e.normal.array:void 0,h=void 0!==e.color?e.color.array:void 0,k=void 0!==e.uv?e.uv.array:void 0,m=void 0!==e.uv2?e.uv2.array:void 0;void 0!==m&&(this.faceVertexUvs[1]=[]);for(var l=[],p=[],n=[],r=e=0;e<f.length;e+=3,r+=2)c.vertices.push(new q(f[e],f[e+1],f[e+2])),void 0!==g&&l.push(new q(g[e],g[e+1],g[e+2])),void 0!==h&&c.colors.push(new N(h[e],h[e+1],h[e+2])),void 0!==k&&p.push(new C(k[r],k[r+1])),void 0!==m&&n.push(new C(m[r],m[r+1]));if(void 0!==\nd)if(f=a.groups,0<f.length)for(e=0;e<f.length;e++)for(var w=f[e],u=w.start,F=w.count,r=u,u=u+F;r<u;r+=3)b(d[r],d[r+1],d[r+2],w.materialIndex);else for(e=0;e<d.length;e+=3)b(d[e],d[e+1],d[e+2]);else for(e=0;e<f.length/3;e+=3)b(e,e+1,e+2);this.computeFaceNormals();null!==a.boundingBox&&(this.boundingBox=a.boundingBox.clone());null!==a.boundingSphere&&(this.boundingSphere=a.boundingSphere.clone());return this},center:function(){this.computeBoundingBox();var a=this.boundingBox.getCenter().negate();this.translate(a.x,\na.y,a.z);return a},normalize:function(){this.computeBoundingSphere();var a=this.boundingSphere.center,b=this.boundingSphere.radius,b=0===b?1:1/b,c=new H;c.set(b,0,0,-b*a.x,0,b,0,-b*a.y,0,0,b,-b*a.z,0,0,0,1);this.applyMatrix(c);return this},computeFaceNormals:function(){for(var a=new q,b=new q,c=0,d=this.faces.length;c<d;c++){var e=this.faces[c],f=this.vertices[e.a],g=this.vertices[e.b];a.subVectors(this.vertices[e.c],g);b.subVectors(f,g);a.cross(b);a.normalize();e.normal.copy(a)}},computeVertexNormals:function(a){void 0===\na&&(a=!0);var b,c,d;d=Array(this.vertices.length);b=0;for(c=this.vertices.length;b<c;b++)d[b]=new q;if(a){var e,f,g,h=new q,k=new q;a=0;for(b=this.faces.length;a<b;a++)c=this.faces[a],e=this.vertices[c.a],f=this.vertices[c.b],g=this.vertices[c.c],h.subVectors(g,f),k.subVectors(e,f),h.cross(k),d[c.a].add(h),d[c.b].add(h),d[c.c].add(h)}else for(this.computeFaceNormals(),a=0,b=this.faces.length;a<b;a++)c=this.faces[a],d[c.a].add(c.normal),d[c.b].add(c.normal),d[c.c].add(c.normal);b=0;for(c=this.vertices.length;b<\nc;b++)d[b].normalize();a=0;for(b=this.faces.length;a<b;a++)c=this.faces[a],e=c.vertexNormals,3===e.length?(e[0].copy(d[c.a]),e[1].copy(d[c.b]),e[2].copy(d[c.c])):(e[0]=d[c.a].clone(),e[1]=d[c.b].clone(),e[2]=d[c.c].clone());0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var a,b,c;this.computeFaceNormals();a=0;for(b=this.faces.length;a<b;a++){c=this.faces[a];var d=c.vertexNormals;3===d.length?(d[0].copy(c.normal),d[1].copy(c.normal),d[2].copy(c.normal)):(d[0]=\nc.normal.clone(),d[1]=c.normal.clone(),d[2]=c.normal.clone())}0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){var a,b,c,d,e;c=0;for(d=this.faces.length;c<d;c++)for(e=this.faces[c],e.__originalFaceNormal?e.__originalFaceNormal.copy(e.normal):e.__originalFaceNormal=e.normal.clone(),e.__originalVertexNormals||(e.__originalVertexNormals=[]),a=0,b=e.vertexNormals.length;a<b;a++)e.__originalVertexNormals[a]?e.__originalVertexNormals[a].copy(e.vertexNormals[a]):e.__originalVertexNormals[a]=\ne.vertexNormals[a].clone();var f=new S;f.faces=this.faces;a=0;for(b=this.morphTargets.length;a<b;a++){if(!this.morphNormals[a]){this.morphNormals[a]={};this.morphNormals[a].faceNormals=[];this.morphNormals[a].vertexNormals=[];e=this.morphNormals[a].faceNormals;var g=this.morphNormals[a].vertexNormals,h,k;c=0;for(d=this.faces.length;c<d;c++)h=new q,k={a:new q,b:new q,c:new q},e.push(h),g.push(k)}g=this.morphNormals[a];f.vertices=this.morphTargets[a].vertices;f.computeFaceNormals();f.computeVertexNormals();\nc=0;for(d=this.faces.length;c<d;c++)e=this.faces[c],h=g.faceNormals[c],k=g.vertexNormals[c],h.copy(e.normal),k.a.copy(e.vertexNormals[0]),k.b.copy(e.vertexNormals[1]),k.c.copy(e.vertexNormals[2])}c=0;for(d=this.faces.length;c<d;c++)e=this.faces[c],e.normal=e.__originalFaceNormal,e.vertexNormals=e.__originalVertexNormals},computeLineDistances:function(){for(var a=0,b=this.vertices,c=0,d=b.length;c<d;c++)0<c&&(a+=b[c].distanceTo(b[c-1])),this.lineDistances[c]=a},computeBoundingBox:function(){null===\nthis.boundingBox&&(this.boundingBox=new ya);this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new Fa);this.boundingSphere.setFromPoints(this.vertices)},merge:function(a,b,c){if(!1===(a&&a.isGeometry))console.error(\"THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.\",a);else{var d,e=this.vertices.length,f=this.vertices,g=a.vertices,h=this.faces,k=a.faces,m=this.faceVertexUvs[0],l=a.faceVertexUvs[0],p=this.colors,\nn=a.colors;void 0===c&&(c=0);void 0!==b&&(d=(new za).getNormalMatrix(b));a=0;for(var r=g.length;a<r;a++){var q=g[a].clone();void 0!==b&&q.applyMatrix4(b);f.push(q)}a=0;for(r=n.length;a<r;a++)p.push(n[a].clone());a=0;for(r=k.length;a<r;a++){var g=k[a],u=g.vertexNormals,n=g.vertexColors,p=new ha(g.a+e,g.b+e,g.c+e);p.normal.copy(g.normal);void 0!==d&&p.normal.applyMatrix3(d).normalize();b=0;for(f=u.length;b<f;b++)q=u[b].clone(),void 0!==d&&q.applyMatrix3(d).normalize(),p.vertexNormals.push(q);p.color.copy(g.color);\nb=0;for(f=n.length;b<f;b++)q=n[b],p.vertexColors.push(q.clone());p.materialIndex=g.materialIndex+c;h.push(p)}a=0;for(r=l.length;a<r;a++)if(c=l[a],d=[],void 0!==c){b=0;for(f=c.length;b<f;b++)d.push(c[b].clone());m.push(d)}}},mergeMesh:function(a){!1===(a&&a.isMesh)?console.error(\"THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.\",a):(a.matrixAutoUpdate&&a.updateMatrix(),this.merge(a.geometry,a.matrix))},mergeVertices:function(){var a={},b=[],c=[],d,e=Math.pow(10,4),f,g;f=0;for(g=this.vertices.length;f<\ng;f++)d=this.vertices[f],d=Math.round(d.x*e)+\"_\"+Math.round(d.y*e)+\"_\"+Math.round(d.z*e),void 0===a[d]?(a[d]=f,b.push(this.vertices[f]),c[f]=b.length-1):c[f]=c[a[d]];a=[];f=0;for(g=this.faces.length;f<g;f++)for(e=this.faces[f],e.a=c[e.a],e.b=c[e.b],e.c=c[e.c],e=[e.a,e.b,e.c],d=0;3>d;d++)if(e[d]===e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e,1),c=0,g=this.faceVertexUvs.length;c<g;c++)this.faceVertexUvs[c].splice(e,1);f=this.vertices.length-b.length;this.vertices=\nb;return f},sortFacesByMaterialIndex:function(){for(var a=this.faces,b=a.length,c=0;c<b;c++)a[c]._id=c;a.sort(function(a,b){return a.materialIndex-b.materialIndex});var d=this.faceVertexUvs[0],e=this.faceVertexUvs[1],f,g;d&&d.length===b&&(f=[]);e&&e.length===b&&(g=[]);for(c=0;c<b;c++){var h=a[c]._id;f&&f.push(d[h]);g&&g.push(e[h])}f&&(this.faceVertexUvs[0]=f);g&&(this.faceVertexUvs[1]=g)},toJSON:function(){function a(a,b,c){return c?a|1<<b:a&~(1<<b)}function b(a){var b=a.x.toString()+a.y.toString()+\na.z.toString();if(void 0!==m[b])return m[b];m[b]=k.length/3;k.push(a.x,a.y,a.z);return m[b]}function c(a){var b=a.r.toString()+a.g.toString()+a.b.toString();if(void 0!==p[b])return p[b];p[b]=l.length;l.push(a.getHex());return p[b]}function d(a){var b=a.x.toString()+a.y.toString();if(void 0!==r[b])return r[b];r[b]=n.length/2;n.push(a.x,a.y);return r[b]}var e={metadata:{version:4.4,type:\"Geometry\",generator:\"Geometry.toJSON\"}};e.uuid=this.uuid;e.type=this.type;\"\"!==this.name&&(e.name=this.name);if(void 0!==\nthis.parameters){var f=this.parameters,g;for(g in f)void 0!==f[g]&&(e[g]=f[g]);return e}f=[];for(g=0;g<this.vertices.length;g++){var h=this.vertices[g];f.push(h.x,h.y,h.z)}var h=[],k=[],m={},l=[],p={},n=[],r={};for(g=0;g<this.faces.length;g++){var q=this.faces[g],u=void 0!==this.faceVertexUvs[0][g],F=0<q.normal.length(),t=0<q.vertexNormals.length,v=1!==q.color.r||1!==q.color.g||1!==q.color.b,M=0<q.vertexColors.length,z=0,z=a(z,0,0),z=a(z,1,!0),z=a(z,2,!1),z=a(z,3,u),z=a(z,4,F),z=a(z,5,t),z=a(z,6,\nv),z=a(z,7,M);h.push(z);h.push(q.a,q.b,q.c);h.push(q.materialIndex);u&&(u=this.faceVertexUvs[0][g],h.push(d(u[0]),d(u[1]),d(u[2])));F&&h.push(b(q.normal));t&&(F=q.vertexNormals,h.push(b(F[0]),b(F[1]),b(F[2])));v&&h.push(c(q.color));M&&(q=q.vertexColors,h.push(c(q[0]),c(q[1]),c(q[2])))}e.data={};e.data.vertices=f;e.data.normals=k;0<l.length&&(e.data.colors=l);0<n.length&&(e.data.uvs=[n]);e.data.faces=h;return e},clone:function(){return(new S).copy(this)},copy:function(a){this.vertices=[];this.faces=\n[];this.faceVertexUvs=[[]];this.colors=[];for(var b=a.vertices,c=0,d=b.length;c<d;c++)this.vertices.push(b[c].clone());b=a.colors;c=0;for(d=b.length;c<d;c++)this.colors.push(b[c].clone());b=a.faces;c=0;for(d=b.length;c<d;c++)this.faces.push(b[c].clone());c=0;for(d=a.faceVertexUvs.length;c<d;c++){b=a.faceVertexUvs[c];void 0===this.faceVertexUvs[c]&&(this.faceVertexUvs[c]=[]);for(var e=0,f=b.length;e<f;e++){for(var g=b[e],h=[],k=0,m=g.length;k<m;k++)h.push(g[k].clone());this.faceVertexUvs[c].push(h)}}return this},\ndispose:function(){this.dispatchEvent({type:\"dispose\"})}});var Kd=0;Object.assign(D.prototype,oa.prototype,{isBufferGeometry:!0,getIndex:function(){return this.index},setIndex:function(a){this.index=a},addAttribute:function(a,b,c){if(!1===(b&&b.isBufferAttribute)&&!1===(b&&b.isInterleavedBufferAttribute))console.warn(\"THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).\"),this.addAttribute(a,new y(b,c));else if(\"index\"===a)console.warn(\"THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.\"),\nthis.setIndex(b);else return this.attributes[a]=b,this},getAttribute:function(a){return this.attributes[a]},removeAttribute:function(a){delete this.attributes[a];return this},addGroup:function(a,b,c){this.groups.push({start:a,count:b,materialIndex:void 0!==c?c:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(a,b){this.drawRange.start=a;this.drawRange.count=b},applyMatrix:function(a){var b=this.attributes.position;void 0!==b&&(a.applyToVector3Array(b.array),b.needsUpdate=!0);b=this.attributes.normal;\nvoid 0!==b&&((new za).getNormalMatrix(a).applyToVector3Array(b.array),b.needsUpdate=!0);null!==this.boundingBox&&this.computeBoundingBox();null!==this.boundingSphere&&this.computeBoundingSphere();return this},rotateX:function(){var a;return function(b){void 0===a&&(a=new H);a.makeRotationX(b);this.applyMatrix(a);return this}}(),rotateY:function(){var a;return function(b){void 0===a&&(a=new H);a.makeRotationY(b);this.applyMatrix(a);return this}}(),rotateZ:function(){var a;return function(b){void 0===\na&&(a=new H);a.makeRotationZ(b);this.applyMatrix(a);return this}}(),translate:function(){var a;return function(b,c,d){void 0===a&&(a=new H);a.makeTranslation(b,c,d);this.applyMatrix(a);return this}}(),scale:function(){var a;return function(b,c,d){void 0===a&&(a=new H);a.makeScale(b,c,d);this.applyMatrix(a);return this}}(),lookAt:function(){var a;return function(b){void 0===a&&(a=new G);a.lookAt(b);a.updateMatrix();this.applyMatrix(a.matrix)}}(),center:function(){this.computeBoundingBox();var a=this.boundingBox.getCenter().negate();\nthis.translate(a.x,a.y,a.z);return a},setFromObject:function(a){var b=a.geometry;if(a.isPoints||a.isLine){a=new X(3*b.vertices.length,3);var c=new X(3*b.colors.length,3);this.addAttribute(\"position\",a.copyVector3sArray(b.vertices));this.addAttribute(\"color\",c.copyColorsArray(b.colors));b.lineDistances&&b.lineDistances.length===b.vertices.length&&(a=new X(b.lineDistances.length,1),this.addAttribute(\"lineDistance\",a.copyArray(b.lineDistances)));null!==b.boundingSphere&&(this.boundingSphere=b.boundingSphere.clone());\nnull!==b.boundingBox&&(this.boundingBox=b.boundingBox.clone())}else a.isMesh&&b&&b.isGeometry&&this.fromGeometry(b);return this},updateFromObject:function(a){var b=a.geometry;if(a.isMesh){var c=b.__directGeometry;!0===b.elementsNeedUpdate&&(c=void 0,b.elementsNeedUpdate=!1);if(void 0===c)return this.fromGeometry(b);c.verticesNeedUpdate=b.verticesNeedUpdate;c.normalsNeedUpdate=b.normalsNeedUpdate;c.colorsNeedUpdate=b.colorsNeedUpdate;c.uvsNeedUpdate=b.uvsNeedUpdate;c.groupsNeedUpdate=b.groupsNeedUpdate;\nb.verticesNeedUpdate=!1;b.normalsNeedUpdate=!1;b.colorsNeedUpdate=!1;b.uvsNeedUpdate=!1;b.groupsNeedUpdate=!1;b=c}!0===b.verticesNeedUpdate&&(c=this.attributes.position,void 0!==c&&(c.copyVector3sArray(b.vertices),c.needsUpdate=!0),b.verticesNeedUpdate=!1);!0===b.normalsNeedUpdate&&(c=this.attributes.normal,void 0!==c&&(c.copyVector3sArray(b.normals),c.needsUpdate=!0),b.normalsNeedUpdate=!1);!0===b.colorsNeedUpdate&&(c=this.attributes.color,void 0!==c&&(c.copyColorsArray(b.colors),c.needsUpdate=!0),\nb.colorsNeedUpdate=!1);b.uvsNeedUpdate&&(c=this.attributes.uv,void 0!==c&&(c.copyVector2sArray(b.uvs),c.needsUpdate=!0),b.uvsNeedUpdate=!1);b.lineDistancesNeedUpdate&&(c=this.attributes.lineDistance,void 0!==c&&(c.copyArray(b.lineDistances),c.needsUpdate=!0),b.lineDistancesNeedUpdate=!1);b.groupsNeedUpdate&&(b.computeGroups(a.geometry),this.groups=b.groups,b.groupsNeedUpdate=!1);return this},fromGeometry:function(a){a.__directGeometry=(new ze).fromGeometry(a);return this.fromDirectGeometry(a.__directGeometry)},\nfromDirectGeometry:function(a){var b=new Float32Array(3*a.vertices.length);this.addAttribute(\"position\",(new y(b,3)).copyVector3sArray(a.vertices));0<a.normals.length&&(b=new Float32Array(3*a.normals.length),this.addAttribute(\"normal\",(new y(b,3)).copyVector3sArray(a.normals)));0<a.colors.length&&(b=new Float32Array(3*a.colors.length),this.addAttribute(\"color\",(new y(b,3)).copyColorsArray(a.colors)));0<a.uvs.length&&(b=new Float32Array(2*a.uvs.length),this.addAttribute(\"uv\",(new y(b,2)).copyVector2sArray(a.uvs)));\n0<a.uvs2.length&&(b=new Float32Array(2*a.uvs2.length),this.addAttribute(\"uv2\",(new y(b,2)).copyVector2sArray(a.uvs2)));0<a.indices.length&&(b=new (65535<a.vertices.length?Uint32Array:Uint16Array)(3*a.indices.length),this.setIndex((new y(b,1)).copyIndicesArray(a.indices)));this.groups=a.groups;for(var c in a.morphTargets){for(var b=[],d=a.morphTargets[c],e=0,f=d.length;e<f;e++){var g=d[e],h=new X(3*g.length,3);b.push(h.copyVector3sArray(g))}this.morphAttributes[c]=b}0<a.skinIndices.length&&(c=new X(4*\na.skinIndices.length,4),this.addAttribute(\"skinIndex\",c.copyVector4sArray(a.skinIndices)));0<a.skinWeights.length&&(c=new X(4*a.skinWeights.length,4),this.addAttribute(\"skinWeight\",c.copyVector4sArray(a.skinWeights)));null!==a.boundingSphere&&(this.boundingSphere=a.boundingSphere.clone());null!==a.boundingBox&&(this.boundingBox=a.boundingBox.clone());return this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new ya);var a=this.attributes.position;void 0!==a?this.boundingBox.setFromBufferAttribute(a):\nthis.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.',this)},computeBoundingSphere:function(){var a=new ya,b=new q;return function(){null===this.boundingSphere&&(this.boundingSphere=new Fa);var c=this.attributes.position;if(c){var d=this.boundingSphere.center;a.setFromBufferAttribute(c);\na.getCenter(d);for(var e=0,f=0,g=c.count;f<g;f++)b.x=c.getX(f),b.y=c.getY(f),b.z=c.getZ(f),e=Math.max(e,d.distanceToSquared(b));this.boundingSphere.radius=Math.sqrt(e);isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.',this)}}}(),computeFaceNormals:function(){},computeVertexNormals:function(){var a=this.index,b=this.attributes,c=this.groups;if(b.position){var d=b.position.array;\nif(void 0===b.normal)this.addAttribute(\"normal\",new y(new Float32Array(d.length),3));else for(var e=b.normal.array,f=0,g=e.length;f<g;f++)e[f]=0;var e=b.normal.array,h,k,m,l=new q,p=new q,n=new q,r=new q,w=new q;if(a){a=a.array;0===c.length&&this.addGroup(0,a.length);for(var u=0,F=c.length;u<F;++u)for(f=c[u],g=f.start,h=f.count,f=g,g+=h;f<g;f+=3)h=3*a[f+0],k=3*a[f+1],m=3*a[f+2],l.fromArray(d,h),p.fromArray(d,k),n.fromArray(d,m),r.subVectors(n,p),w.subVectors(l,p),r.cross(w),e[h]+=r.x,e[h+1]+=r.y,\ne[h+2]+=r.z,e[k]+=r.x,e[k+1]+=r.y,e[k+2]+=r.z,e[m]+=r.x,e[m+1]+=r.y,e[m+2]+=r.z}else for(f=0,g=d.length;f<g;f+=9)l.fromArray(d,f),p.fromArray(d,f+3),n.fromArray(d,f+6),r.subVectors(n,p),w.subVectors(l,p),r.cross(w),e[f]=r.x,e[f+1]=r.y,e[f+2]=r.z,e[f+3]=r.x,e[f+4]=r.y,e[f+5]=r.z,e[f+6]=r.x,e[f+7]=r.y,e[f+8]=r.z;this.normalizeNormals();b.normal.needsUpdate=!0}},merge:function(a,b){if(!1===(a&&a.isBufferGeometry))console.error(\"THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.\",\na);else{void 0===b&&(b=0);var c=this.attributes,d;for(d in c)if(void 0!==a.attributes[d])for(var e=c[d].array,f=a.attributes[d],g=f.array,h=0,f=f.itemSize*b;h<g.length;h++,f++)e[f]=g[h];return this}},normalizeNormals:function(){for(var a=this.attributes.normal.array,b,c,d,e=0,f=a.length;e<f;e+=3)b=a[e],c=a[e+1],d=a[e+2],b=1/Math.sqrt(b*b+c*c+d*d),a[e]*=b,a[e+1]*=b,a[e+2]*=b},toNonIndexed:function(){if(null===this.index)return console.warn(\"THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.\"),\nthis;var a=new D,b=this.index.array,c=this.attributes,d;for(d in c){for(var e=c[d],f=e.array,e=e.itemSize,g=new f.constructor(b.length*e),h,k=0,m=0,l=b.length;m<l;m++){h=b[m]*e;for(var p=0;p<e;p++)g[k++]=f[h++]}a.addAttribute(d,new y(g,e))}return a},toJSON:function(){var a={metadata:{version:4.4,type:\"BufferGeometry\",generator:\"BufferGeometry.toJSON\"}};a.uuid=this.uuid;a.type=this.type;\"\"!==this.name&&(a.name=this.name);if(void 0!==this.parameters){var b=this.parameters,c;for(c in b)void 0!==b[c]&&\n(a[c]=b[c]);return a}a.data={attributes:{}};var d=this.index;null!==d&&(b=Array.prototype.slice.call(d.array),a.data.index={type:d.array.constructor.name,array:b});d=this.attributes;for(c in d){var e=d[c],b=Array.prototype.slice.call(e.array);a.data.attributes[c]={itemSize:e.itemSize,type:e.array.constructor.name,array:b,normalized:e.normalized}}c=this.groups;0<c.length&&(a.data.groups=JSON.parse(JSON.stringify(c)));c=this.boundingSphere;null!==c&&(a.data.boundingSphere={center:c.center.toArray(),\nradius:c.radius});return a},clone:function(){return(new D).copy(this)},copy:function(a){var b=a.index;null!==b&&this.setIndex(b.clone());var b=a.attributes,c;for(c in b)this.addAttribute(c,b[c].clone());a=a.groups;c=0;for(b=a.length;c<b;c++){var d=a[c];this.addGroup(d.start,d.count,d.materialIndex)}return this},dispose:function(){this.dispatchEvent({type:\"dispose\"})}});D.MaxIndex=65535;Ba.prototype=Object.assign(Object.create(G.prototype),{constructor:Ba,isMesh:!0,setDrawMode:function(a){this.drawMode=\na},copy:function(a){G.prototype.copy.call(this,a);this.drawMode=a.drawMode;return this},updateMorphTargets:function(){var a=this.geometry.morphTargets;if(void 0!==a&&0<a.length){this.morphTargetInfluences=[];this.morphTargetDictionary={};for(var b=0,c=a.length;b<c;b++)this.morphTargetInfluences.push(0),this.morphTargetDictionary[a[b].name]=b}},raycast:function(){function a(a,b,c,d,e,f,g){Aa.barycoordFromPoint(a,b,c,d,u);e.multiplyScalar(u.x);f.multiplyScalar(u.y);g.multiplyScalar(u.z);e.add(f).add(g);\nreturn e.clone()}function b(a,b,c,d,e,f,g){var h=a.material;if(null===(1===h.side?c.intersectTriangle(f,e,d,!0,g):c.intersectTriangle(d,e,f,2!==h.side,g)))return null;t.copy(g);t.applyMatrix4(a.matrixWorld);c=b.ray.origin.distanceTo(t);return c<b.near||c>b.far?null:{distance:c,point:t.clone(),object:a}}function c(c,d,e,f,m,l,p,q){g.fromArray(f,3*l);h.fromArray(f,3*p);k.fromArray(f,3*q);if(c=b(c,d,e,g,h,k,F))m&&(n.fromArray(m,2*l),r.fromArray(m,2*p),w.fromArray(m,2*q),c.uv=a(F,g,h,k,n,r,w)),c.face=\nnew ha(l,p,q,Aa.normal(g,h,k)),c.faceIndex=l;return c}var d=new H,e=new bb,f=new Fa,g=new q,h=new q,k=new q,m=new q,l=new q,p=new q,n=new C,r=new C,w=new C,u=new q,F=new q,t=new q;return function(q,u){var t=this.geometry,A=this.material,I=this.matrixWorld;if(void 0!==A&&(null===t.boundingSphere&&t.computeBoundingSphere(),f.copy(t.boundingSphere),f.applyMatrix4(I),!1!==q.ray.intersectsSphere(f)&&(d.getInverse(I),e.copy(q.ray).applyMatrix4(d),null===t.boundingBox||!1!==e.intersectsBox(t.boundingBox)))){var E,\nK;if(t.isBufferGeometry){var y,J,A=t.index,I=t.attributes,t=I.position.array;void 0!==I.uv&&(E=I.uv.array);if(null!==A)for(var I=A.array,C=0,D=I.length;C<D;C+=3){if(A=I[C],y=I[C+1],J=I[C+2],K=c(this,q,e,t,E,A,y,J))K.faceIndex=Math.floor(C/3),u.push(K)}else for(C=0,D=t.length;C<D;C+=9)if(A=C/3,y=A+1,J=A+2,K=c(this,q,e,t,E,A,y,J))K.index=A,u.push(K)}else if(t.isGeometry){var G,H,I=A&&A.isMultiMaterial,C=!0===I?A.materials:null,D=t.vertices;y=t.faces;J=t.faceVertexUvs[0];0<J.length&&(E=J);for(var O=\n0,P=y.length;O<P;O++){var R=y[O];K=!0===I?C[R.materialIndex]:A;if(void 0!==K){J=D[R.a];G=D[R.b];H=D[R.c];if(!0===K.morphTargets){K=t.morphTargets;var T=this.morphTargetInfluences;g.set(0,0,0);h.set(0,0,0);k.set(0,0,0);for(var N=0,V=K.length;N<V;N++){var S=T[N];if(0!==S){var L=K[N].vertices;g.addScaledVector(m.subVectors(L[R.a],J),S);h.addScaledVector(l.subVectors(L[R.b],G),S);k.addScaledVector(p.subVectors(L[R.c],H),S)}}g.add(J);h.add(G);k.add(H);J=g;G=h;H=k}if(K=b(this,q,e,J,G,H,F))E&&(T=E[O],n.copy(T[0]),\nr.copy(T[1]),w.copy(T[2]),K.uv=a(F,J,G,H,n,r,w)),K.face=R,K.faceIndex=O,u.push(K)}}}}}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});hb.prototype=Object.create(D.prototype);hb.prototype.constructor=hb;ib.prototype=Object.create(D.prototype);ib.prototype.constructor=ib;sa.prototype=Object.create(G.prototype);sa.prototype.constructor=sa;sa.prototype.isCamera=!0;sa.prototype.getWorldDirection=function(){var a=new da;return function(b){b=b||new q;this.getWorldQuaternion(a);\nreturn b.set(0,0,-1).applyQuaternion(a)}}();sa.prototype.lookAt=function(){var a=new H;return function(b){a.lookAt(this.position,b,this.up);this.quaternion.setFromRotationMatrix(a)}}();sa.prototype.clone=function(){return(new this.constructor).copy(this)};sa.prototype.copy=function(a){G.prototype.copy.call(this,a);this.matrixWorldInverse.copy(a.matrixWorldInverse);this.projectionMatrix.copy(a.projectionMatrix);return this};Ha.prototype=Object.assign(Object.create(sa.prototype),{constructor:Ha,isPerspectiveCamera:!0,\ncopy:function(a){sa.prototype.copy.call(this,a);this.fov=a.fov;this.zoom=a.zoom;this.near=a.near;this.far=a.far;this.focus=a.focus;this.aspect=a.aspect;this.view=null===a.view?null:Object.assign({},a.view);this.filmGauge=a.filmGauge;this.filmOffset=a.filmOffset;return this},setFocalLength:function(a){a=.5*this.getFilmHeight()/a;this.fov=2*Q.RAD2DEG*Math.atan(a);this.updateProjectionMatrix()},getFocalLength:function(){var a=Math.tan(.5*Q.DEG2RAD*this.fov);return.5*this.getFilmHeight()/a},getEffectiveFOV:function(){return 2*\nQ.RAD2DEG*Math.atan(Math.tan(.5*Q.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(a,b,c,d,e,f){this.aspect=a/b;this.view={fullWidth:a,fullHeight:b,offsetX:c,offsetY:d,width:e,height:f};this.updateProjectionMatrix()},clearViewOffset:function(){this.view=null;this.updateProjectionMatrix()},updateProjectionMatrix:function(){var a=this.near,b=a*Math.tan(.5*\nQ.DEG2RAD*this.fov)/this.zoom,c=2*b,d=this.aspect*c,e=-.5*d,f=this.view;if(null!==f)var g=f.fullWidth,h=f.fullHeight,e=e+f.offsetX*d/g,b=b-f.offsetY*c/h,d=f.width/g*d,c=f.height/h*c;f=this.filmOffset;0!==f&&(e+=a*f/this.getFilmWidth());this.projectionMatrix.makeFrustum(e,e+d,b-c,b,a,this.far)},toJSON:function(a){a=G.prototype.toJSON.call(this,a);a.object.fov=this.fov;a.object.zoom=this.zoom;a.object.near=this.near;a.object.far=this.far;a.object.focus=this.focus;a.object.aspect=this.aspect;null!==\nthis.view&&(a.object.view=Object.assign({},this.view));a.object.filmGauge=this.filmGauge;a.object.filmOffset=this.filmOffset;return a}});Hb.prototype=Object.assign(Object.create(sa.prototype),{constructor:Hb,isOrthographicCamera:!0,copy:function(a){sa.prototype.copy.call(this,a);this.left=a.left;this.right=a.right;this.top=a.top;this.bottom=a.bottom;this.near=a.near;this.far=a.far;this.zoom=a.zoom;this.view=null===a.view?null:Object.assign({},a.view);return this},setViewOffset:function(a,b,c,d,e,\nf){this.view={fullWidth:a,fullHeight:b,offsetX:c,offsetY:d,width:e,height:f};this.updateProjectionMatrix()},clearViewOffset:function(){this.view=null;this.updateProjectionMatrix()},updateProjectionMatrix:function(){var a=(this.right-this.left)/(2*this.zoom),b=(this.top-this.bottom)/(2*this.zoom),c=(this.right+this.left)/2,d=(this.top+this.bottom)/2,e=c-a,c=c+a,a=d+b,b=d-b;if(null!==this.view)var c=this.zoom/(this.view.width/this.view.fullWidth),b=this.zoom/(this.view.height/this.view.fullHeight),\nf=(this.right-this.left)/this.view.width,d=(this.top-this.bottom)/this.view.height,e=e+this.view.offsetX/c*f,c=e+this.view.width/c*f,a=a-this.view.offsetY/b*d,b=a-this.view.height/b*d;this.projectionMatrix.makeOrthographic(e,c,a,b,this.near,this.far)},toJSON:function(a){a=G.prototype.toJSON.call(this,a);a.object.zoom=this.zoom;a.object.left=this.left;a.object.right=this.right;a.object.top=this.top;a.object.bottom=this.bottom;a.object.near=this.near;a.object.far=this.far;null!==this.view&&(a.object.view=\nObject.assign({},this.view));return a}});var Af=0;Ib.prototype.isFogExp2=!0;Ib.prototype.clone=function(){return new Ib(this.color.getHex(),this.density)};Ib.prototype.toJSON=function(a){return{type:\"FogExp2\",color:this.color.getHex(),density:this.density}};Jb.prototype.isFog=!0;Jb.prototype.clone=function(){return new Jb(this.color.getHex(),this.near,this.far)};Jb.prototype.toJSON=function(a){return{type:\"Fog\",color:this.color.getHex(),near:this.near,far:this.far}};jb.prototype=Object.create(G.prototype);\njb.prototype.constructor=jb;jb.prototype.copy=function(a,b){G.prototype.copy.call(this,a,b);null!==a.background&&(this.background=a.background.clone());null!==a.fog&&(this.fog=a.fog.clone());null!==a.overrideMaterial&&(this.overrideMaterial=a.overrideMaterial.clone());this.autoUpdate=a.autoUpdate;this.matrixAutoUpdate=a.matrixAutoUpdate;return this};jb.prototype.toJSON=function(a){var b=G.prototype.toJSON.call(this,a);null!==this.background&&(b.object.background=this.background.toJSON(a));null!==\nthis.fog&&(b.object.fog=this.fog.toJSON());return b};Od.prototype=Object.assign(Object.create(G.prototype),{constructor:Od,isLensFlare:!0,copy:function(a){G.prototype.copy.call(this,a);this.positionScreen.copy(a.positionScreen);this.customUpdateCallback=a.customUpdateCallback;for(var b=0,c=a.lensFlares.length;b<c;b++)this.lensFlares.push(a.lensFlares[b]);return this},add:function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new N(16777215));void 0===d&&(d=1);\nc=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:0,opacity:f,color:e,blending:d})},updateLensFlares:function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;a<b;a++)c=this.lensFlares[a],c.x=this.positionScreen.x+d*c.distance,c.y=this.positionScreen.y+e*c.distance,c.wantedRotation=c.x*Math.PI*.25,c.rotation+=.25*(c.wantedRotation-c.rotation)}});kb.prototype=Object.create(W.prototype);kb.prototype.constructor=\nkb;kb.prototype.copy=function(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.rotation=a.rotation;return this};zc.prototype=Object.assign(Object.create(G.prototype),{constructor:zc,isSprite:!0,raycast:function(){var a=new q;return function(b,c){a.setFromMatrixPosition(this.matrixWorld);var d=b.ray.distanceSqToPoint(a);d>this.scale.x*this.scale.y/4||c.push({distance:Math.sqrt(d),point:this.position,face:null,object:this})}}(),clone:function(){return(new this.constructor(this.material)).copy(this)}});\nAc.prototype=Object.assign(Object.create(G.prototype),{constructor:Ac,copy:function(a){G.prototype.copy.call(this,a,!1);a=a.levels;for(var b=0,c=a.length;b<c;b++){var d=a[b];this.addLevel(d.object.clone(),d.distance)}return this},addLevel:function(a,b){void 0===b&&(b=0);b=Math.abs(b);for(var c=this.levels,d=0;d<c.length&&!(b<c[d].distance);d++);c.splice(d,0,{distance:b,object:a});this.add(a)},getObjectForDistance:function(a){for(var b=this.levels,c=1,d=b.length;c<d&&!(a<b[c].distance);c++);return b[c-\n1].object},raycast:function(){var a=new q;return function(b,c){a.setFromMatrixPosition(this.matrixWorld);var d=b.ray.origin.distanceTo(a);this.getObjectForDistance(d).raycast(b,c)}}(),update:function(){var a=new q,b=new q;return function(c){var d=this.levels;if(1<d.length){a.setFromMatrixPosition(c.matrixWorld);b.setFromMatrixPosition(this.matrixWorld);c=a.distanceTo(b);d[0].object.visible=!0;for(var e=1,f=d.length;e<f;e++)if(c>=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break;\nfor(;e<f;e++)d[e].object.visible=!1}}}(),toJSON:function(a){a=G.prototype.toJSON.call(this,a);a.object.levels=[];for(var b=this.levels,c=0,d=b.length;c<d;c++){var e=b[c];a.object.levels.push({object:e.object.uuid,distance:e.distance})}return a}});Object.assign(hd.prototype,{calculateInverses:function(){this.boneInverses=[];for(var a=0,b=this.bones.length;a<b;a++){var c=new H;this.bones[a]&&c.getInverse(this.bones[a].matrixWorld);this.boneInverses.push(c)}},pose:function(){for(var a,b=0,c=this.bones.length;b<\nc;b++)(a=this.bones[b])&&a.matrixWorld.getInverse(this.boneInverses[b]);b=0;for(c=this.bones.length;b<c;b++)if(a=this.bones[b])a.parent&&a.parent.isBone?(a.matrix.getInverse(a.parent.matrixWorld),a.matrix.multiply(a.matrixWorld)):a.matrix.copy(a.matrixWorld),a.matrix.decompose(a.position,a.quaternion,a.scale)},update:function(){var a=new H;return function(){for(var b=0,c=this.bones.length;b<c;b++)a.multiplyMatrices(this.bones[b]?this.bones[b].matrixWorld:this.identityMatrix,this.boneInverses[b]),\na.toArray(this.boneMatrices,16*b);this.useVertexTexture&&(this.boneTexture.needsUpdate=!0)}}(),clone:function(){return new hd(this.bones,this.boneInverses,this.useVertexTexture)}});id.prototype=Object.assign(Object.create(G.prototype),{constructor:id,isBone:!0});jd.prototype=Object.assign(Object.create(Ba.prototype),{constructor:jd,isSkinnedMesh:!0,bind:function(a,b){this.skeleton=a;void 0===b&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),b=this.matrixWorld);this.bindMatrix.copy(b);\nthis.bindMatrixInverse.getInverse(b)},pose:function(){this.skeleton.pose()},normalizeSkinWeights:function(){if(this.geometry&&this.geometry.isGeometry)for(var a=0;a<this.geometry.skinWeights.length;a++){var b=this.geometry.skinWeights[a],c=1/b.lengthManhattan();Infinity!==c?b.multiplyScalar(c):b.set(1,0,0,0)}else if(this.geometry&&this.geometry.isBufferGeometry)for(var b=new ga,d=this.geometry.attributes.skinWeight,a=0;a<d.count;a++)b.x=d.getX(a),b.y=d.getY(a),b.z=d.getZ(a),b.w=d.getW(a),c=1/b.lengthManhattan(),\nInfinity!==c?b.multiplyScalar(c):b.set(1,0,0,0),d.setXYZW(a,b.x,b.y,b.z,b.w)},updateMatrixWorld:function(a){Ba.prototype.updateMatrixWorld.call(this,!0);\"attached\"===this.bindMode?this.bindMatrixInverse.getInverse(this.matrixWorld):\"detached\"===this.bindMode?this.bindMatrixInverse.getInverse(this.bindMatrix):console.warn(\"THREE.SkinnedMesh unrecognized bindMode: \"+this.bindMode)},clone:function(){return(new this.constructor(this.geometry,this.material,this.skeleton.useVertexTexture)).copy(this)}});\nia.prototype=Object.create(W.prototype);ia.prototype.constructor=ia;ia.prototype.isLineBasicMaterial=!0;ia.prototype.copy=function(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.linewidth=a.linewidth;this.linecap=a.linecap;this.linejoin=a.linejoin;return this};Va.prototype=Object.assign(Object.create(G.prototype),{constructor:Va,isLine:!0,raycast:function(){var a=new H,b=new bb,c=new Fa;return function(d,e){var f=d.linePrecision,f=f*f,g=this.geometry,h=this.matrixWorld;null===g.boundingSphere&&\ng.computeBoundingSphere();c.copy(g.boundingSphere);c.applyMatrix4(h);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(h);b.copy(d.ray).applyMatrix4(a);var k=new q,m=new q,h=new q,l=new q,p=this&&this.isLineSegments?2:1;if(g.isBufferGeometry){var n=g.index,r=g.attributes.position.array;if(null!==n)for(var n=n.array,g=0,w=n.length-1;g<w;g+=p){var u=n[g+1];k.fromArray(r,3*n[g]);m.fromArray(r,3*u);u=b.distanceSqToSegment(k,m,l,h);u>f||(l.applyMatrix4(this.matrixWorld),u=d.ray.origin.distanceTo(l),u<d.near||\nu>d.far||e.push({distance:u,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else for(g=0,w=r.length/3-1;g<w;g+=p)k.fromArray(r,3*g),m.fromArray(r,3*g+3),u=b.distanceSqToSegment(k,m,l,h),u>f||(l.applyMatrix4(this.matrixWorld),u=d.ray.origin.distanceTo(l),u<d.near||u>d.far||e.push({distance:u,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g.isGeometry)for(k=g.vertices,m=k.length,g=0;g<m-1;g+=p)u=b.distanceSqToSegment(k[g],\nk[g+1],l,h),u>f||(l.applyMatrix4(this.matrixWorld),u=d.ray.origin.distanceTo(l),u<d.near||u>d.far||e.push({distance:u,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});fa.prototype=Object.assign(Object.create(Va.prototype),{constructor:fa,isLineSegments:!0});Oa.prototype=Object.create(W.prototype);Oa.prototype.constructor=Oa;Oa.prototype.isPointsMaterial=!0;Oa.prototype.copy=\nfunction(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.size=a.size;this.sizeAttenuation=a.sizeAttenuation;return this};Kb.prototype=Object.assign(Object.create(G.prototype),{constructor:Kb,isPoints:!0,raycast:function(){var a=new H,b=new bb,c=new Fa;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);if(f<l){var h=b.closestPointToPoint(a);h.applyMatrix4(k);var m=d.ray.origin.distanceTo(h);m<d.near||m>d.far||e.push({distance:m,distanceToRay:Math.sqrt(f),\npoint:h.clone(),index:c,face:null,object:g})}}var g=this,h=this.geometry,k=this.matrixWorld,m=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);var m=m/((this.scale.x+this.scale.y+this.scale.z)/3),l=m*m,m=new q;if(h.isBufferGeometry){var p=h.index,h=h.attributes.position.array;if(null!==p)for(var n=p.array,p=0,r=n.length;p<r;p++){var w=n[p];m.fromArray(h,\n3*w);f(m,w)}else for(p=0,n=h.length/3;p<n;p++)m.fromArray(h,3*p),f(m,p)}else for(m=h.vertices,p=0,n=m.length;p<n;p++)f(m[p],p)}}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});Bc.prototype=Object.assign(Object.create(G.prototype),{constructor:Bc});kd.prototype=Object.create(ea.prototype);kd.prototype.constructor=kd;Lb.prototype=Object.create(ea.prototype);Lb.prototype.constructor=Lb;Lb.prototype.isCompressedTexture=!0;ld.prototype=Object.create(ea.prototype);\nld.prototype.constructor=ld;Cc.prototype=Object.create(ea.prototype);Cc.prototype.constructor=Cc;Cc.prototype.isDepthTexture=!0;Mb.prototype=Object.create(D.prototype);Mb.prototype.constructor=Mb;Nb.prototype=Object.create(D.prototype);Nb.prototype.constructor=Nb;Dc.prototype=Object.create(S.prototype);Dc.prototype.constructor=Dc;xa.prototype=Object.create(D.prototype);xa.prototype.constructor=xa;Ob.prototype=Object.create(xa.prototype);Ob.prototype.constructor=Ob;Ec.prototype=Object.create(S.prototype);\nEc.prototype.constructor=Ec;lb.prototype=Object.create(xa.prototype);lb.prototype.constructor=lb;Fc.prototype=Object.create(S.prototype);Fc.prototype.constructor=Fc;Pb.prototype=Object.create(xa.prototype);Pb.prototype.constructor=Pb;Gc.prototype=Object.create(S.prototype);Gc.prototype.constructor=Gc;Qb.prototype=Object.create(xa.prototype);Qb.prototype.constructor=Qb;Hc.prototype=Object.create(S.prototype);Hc.prototype.constructor=Hc;Ic.prototype=Object.create(S.prototype);Ic.prototype.constructor=\nIc;Rb.prototype=Object.create(D.prototype);Rb.prototype.constructor=Rb;Jc.prototype=Object.create(S.prototype);Jc.prototype.constructor=Jc;Sb.prototype=Object.create(D.prototype);Sb.prototype.constructor=Sb;Kc.prototype=Object.create(S.prototype);Kc.prototype.constructor=Kc;Tb.prototype=Object.create(D.prototype);Tb.prototype.constructor=Tb;Lc.prototype=Object.create(S.prototype);Lc.prototype.constructor=Lc;var pa={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;e<b;d=e++)c+=a[d].x*a[e].y-a[e].x*\na[d].y;return.5*c},triangulate:function(){return function(a,b){var c=a.length;if(3>c)return null;var d=[],e=[],f=[],g,h,k;if(0<pa.area(a))for(h=0;h<c;h++)e[h]=h;else for(h=0;h<c;h++)e[h]=c-1-h;var m=2*c;for(h=c-1;2<c;){if(0>=m--){console.warn(\"THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()\");break}g=h;c<=g&&(g=0);h=g+1;c<=h&&(h=0);k=h+1;c<=k&&(k=0);var l;a:{var p,n,r,q,u,F,t,v;p=a[e[g]].x;n=a[e[g]].y;r=a[e[h]].x;q=a[e[h]].y;u=a[e[k]].x;F=a[e[k]].y;if(0>=(r-p)*(F-n)-(q-n)*(u-p))l=\n!1;else{var M,z,A,I,E,K,y,C,D,G;M=u-r;z=F-q;A=p-u;I=n-F;E=r-p;K=q-n;for(l=0;l<c;l++)if(t=a[e[l]].x,v=a[e[l]].y,!(t===p&&v===n||t===r&&v===q||t===u&&v===F)&&(y=t-p,C=v-n,D=t-r,G=v-q,t-=u,v-=F,D=M*G-z*D,y=E*C-K*y,C=A*v-I*t,D>=-Number.EPSILON&&C>=-Number.EPSILON&&y>=-Number.EPSILON)){l=!1;break a}l=!0}}if(l){d.push([a[e[g]],a[e[h]],a[e[k]]]);f.push([e[g],e[h],e[k]]);g=h;for(k=h+1;k<c;g++,k++)e[g]=e[k];c--;m=2*c}}return b?f:d}}(),triangulateShape:function(a,b){function c(a){var b=a.length;2<b&&a[b-1].equals(a[0])&&\na.pop()}function d(a,b,c){return a.x!==b.x?a.x<b.x?a.x<=c.x&&c.x<=b.x:b.x<=c.x&&c.x<=a.x:a.y<b.y?a.y<=c.y&&c.y<=b.y:b.y<=c.y&&c.y<=a.y}function e(a,b,c,e,f){var g=b.x-a.x,h=b.y-a.y,k=e.x-c.x,m=e.y-c.y,l=a.x-c.x,n=a.y-c.y,p=h*k-g*m,q=h*l-g*n;if(Math.abs(p)>Number.EPSILON){if(0<p){if(0>q||q>p)return[];k=m*l-k*n;if(0>k||k>p)return[]}else{if(0<q||q<p)return[];k=m*l-k*n;if(0<k||k<p)return[]}if(0===k)return!f||0!==q&&q!==p?[a]:[];if(k===p)return!f||0!==q&&q!==p?[b]:[];if(0===q)return[c];if(q===p)return[e];\nf=k/p;return[{x:a.x+f*g,y:a.y+f*h}]}if(0!==q||m*l!==k*n)return[];h=0===g&&0===h;k=0===k&&0===m;if(h&&k)return a.x!==c.x||a.y!==c.y?[]:[a];if(h)return d(c,e,a)?[a]:[];if(k)return d(a,b,c)?[c]:[];0!==g?(a.x<b.x?(g=a,k=a.x,h=b,a=b.x):(g=b,k=b.x,h=a,a=a.x),c.x<e.x?(b=c,p=c.x,m=e,c=e.x):(b=e,p=e.x,m=c,c=c.x)):(a.y<b.y?(g=a,k=a.y,h=b,a=b.y):(g=b,k=b.y,h=a,a=a.y),c.y<e.y?(b=c,p=c.y,m=e,c=e.y):(b=e,p=e.y,m=c,c=c.y));return k<=p?a<p?[]:a===p?f?[]:[b]:a<=c?[b,h]:[b,m]:k>c?[]:k===c?f?[]:[g]:a<=c?[g,h]:[g,m]}\nfunction f(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0<a?0<=e&&0<=b:0<=e||0<=b):0<e}c(a);b.forEach(c);var g,h,k,m,l,p={};k=a.concat();g=0;for(h=b.length;g<h;g++)Array.prototype.push.apply(k,b[g]);g=0;for(h=k.length;g<h;g++)l=k[g].x+\":\"+k[g].y,void 0!==p[l]&&console.warn(\"THREE.ShapeUtils: Duplicate point\",l,g),p[l]=g;g=function(a,b){function c(a,b){var d=h.length-1,e=a-1;0>e&&(e=d);var g=a+1;g>d&&(g=\n0);d=f(h[a],h[e],h[g],k[b]);if(!d)return!1;d=k.length-1;e=b-1;0>e&&(e=d);g=b+1;g>d&&(g=0);return(d=f(k[b],k[e],k[g],h[a]))?!0:!1}function d(a,b){var c,f;for(c=0;c<h.length;c++)if(f=c+1,f%=h.length,f=e(a,b,h[c],h[f],!0),0<f.length)return!0;return!1}function g(a,c){var d,f,h,k;for(d=0;d<m.length;d++)for(f=b[m[d]],h=0;h<f.length;h++)if(k=h+1,k%=f.length,k=e(a,c,f[h],f[k],!0),0<k.length)return!0;return!1}var h=a.concat(),k,m=[],l,n,p,q,x,y=[],C,D,G,H=0;for(l=b.length;H<l;H++)m.push(H);C=0;for(var O=2*\nm.length;0<m.length;){O--;if(0>O){console.log(\"Infinite Loop! Holes left:\"+m.length+\", Probably Hole outside Shape!\");break}for(n=C;n<h.length;n++){p=h[n];l=-1;for(H=0;H<m.length;H++)if(q=m[H],x=p.x+\":\"+p.y+\":\"+q,void 0===y[x]){k=b[q];for(D=0;D<k.length;D++)if(q=k[D],c(n,D)&&!d(p,q)&&!g(p,q)){l=D;m.splice(H,1);C=h.slice(0,n+1);q=h.slice(n);D=k.slice(l);G=k.slice(0,l+1);h=C.concat(D).concat(G).concat(q);C=n;break}if(0<=l)break;y[x]=!0}if(0<=l)break}}return h}(a,b);var n=pa.triangulate(g,!1);g=0;for(h=\nn.length;g<h;g++)for(m=n[g],k=0;3>k;k++)l=m[k].x+\":\"+m[k].y,l=p[l],void 0!==l&&(m[k]=l);return n.concat()},isClockWise:function(a){return 0>pa.area(a)},b2:function(){return function(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}}(),b3:function(){return function(a,b,c,d,e){var f=1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}}()};La.prototype=Object.create(S.prototype);La.prototype.constructor=La;La.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;d<c;d++)this.addShape(a[d],\nb)};La.prototype.addShape=function(a,b){function c(a,b,c){b||console.error(\"THREE.ExtrudeGeometry: vec does not exist\");return b.clone().multiplyScalar(c).add(a)}function d(a,b,c){var d,e,f;e=a.x-b.x;f=a.y-b.y;d=c.x-a.x;var g=c.y-a.y,h=e*e+f*f;if(Math.abs(e*g-f*d)>Number.EPSILON){var k=Math.sqrt(h),m=Math.sqrt(d*d+g*g),h=b.x-f/k;b=b.y+e/k;g=((c.x-g/m-h)*g-(c.y+d/m-b)*d)/(e*g-f*d);d=h+e*g-a.x;e=b+f*g-a.y;f=d*d+e*e;if(2>=f)return new C(d,e);f=Math.sqrt(f/2)}else a=!1,e>Number.EPSILON?d>Number.EPSILON&&\n(a=!0):e<-Number.EPSILON?d<-Number.EPSILON&&(a=!0):Math.sign(f)===Math.sign(g)&&(a=!0),a?(d=-f,f=Math.sqrt(h)):(d=e,e=f,f=Math.sqrt(h/2));return new C(d/f,e/f)}function e(a,b){var c,d;for(L=a.length;0<=--L;){c=L;d=L-1;0>d&&(d=a.length-1);var e,f=r+2*l;for(e=0;e<f;e++){var g=U*e,h=U*(e+1),k=b+c+g,g=b+d+g,m=b+d+h,h=b+c+h,k=k+J,g=g+J,m=m+J,h=h+J;G.faces.push(new ha(k,g,h,null,null,1));G.faces.push(new ha(g,m,h,null,null,1));k=t.generateSideWallUV(G,k,g,m,h);G.faceVertexUvs[0].push([k[0],k[1],k[3]]);\nG.faceVertexUvs[0].push([k[1],k[2],k[3]])}}}function f(a,b,c){G.vertices.push(new q(a,b,c))}function g(a,b,c){a+=J;b+=J;c+=J;G.faces.push(new ha(a,b,c,null,null,0));a=t.generateTopUV(G,a,b,c);G.faceVertexUvs[0].push(a)}var h=void 0!==b.amount?b.amount:100,k=void 0!==b.bevelThickness?b.bevelThickness:6,m=void 0!==b.bevelSize?b.bevelSize:k-2,l=void 0!==b.bevelSegments?b.bevelSegments:3,p=void 0!==b.bevelEnabled?b.bevelEnabled:!0,n=void 0!==b.curveSegments?b.curveSegments:12,r=void 0!==b.steps?b.steps:\n1,w=b.extrudePath,u,F=!1,t=void 0!==b.UVGenerator?b.UVGenerator:La.WorldUVGenerator,v,y,z,A;w&&(u=w.getSpacedPoints(r),F=!0,p=!1,v=void 0!==b.frames?b.frames:w.computeFrenetFrames(r,!1),y=new q,z=new q,A=new q);p||(m=k=l=0);var I,E,D,G=this,J=this.vertices.length,w=a.extractPoints(n),n=w.shape,H=w.holes;if(w=!pa.isClockWise(n)){n=n.reverse();E=0;for(D=H.length;E<D;E++)I=H[E],pa.isClockWise(I)&&(H[E]=I.reverse());w=!1}var N=pa.triangulateShape(n,H),S=n;E=0;for(D=H.length;E<D;E++)I=H[E],n=n.concat(I);\nvar Q,O,P,R,T,U=n.length,V,W=N.length,w=[],L=0;P=S.length;Q=P-1;for(O=L+1;L<P;L++,Q++,O++)Q===P&&(Q=0),O===P&&(O=0),w[L]=d(S[L],S[Q],S[O]);var X=[],Z,ba=w.concat();E=0;for(D=H.length;E<D;E++){I=H[E];Z=[];L=0;P=I.length;Q=P-1;for(O=L+1;L<P;L++,Q++,O++)Q===P&&(Q=0),O===P&&(O=0),Z[L]=d(I[L],I[Q],I[O]);X.push(Z);ba=ba.concat(Z)}for(Q=0;Q<l;Q++){P=Q/l;R=k*Math.cos(P*Math.PI/2);O=m*Math.sin(P*Math.PI/2);L=0;for(P=S.length;L<P;L++)T=c(S[L],w[L],O),f(T.x,T.y,-R);E=0;for(D=H.length;E<D;E++)for(I=H[E],Z=X[E],\nL=0,P=I.length;L<P;L++)T=c(I[L],Z[L],O),f(T.x,T.y,-R)}O=m;for(L=0;L<U;L++)T=p?c(n[L],ba[L],O):n[L],F?(z.copy(v.normals[0]).multiplyScalar(T.x),y.copy(v.binormals[0]).multiplyScalar(T.y),A.copy(u[0]).add(z).add(y),f(A.x,A.y,A.z)):f(T.x,T.y,0);for(P=1;P<=r;P++)for(L=0;L<U;L++)T=p?c(n[L],ba[L],O):n[L],F?(z.copy(v.normals[P]).multiplyScalar(T.x),y.copy(v.binormals[P]).multiplyScalar(T.y),A.copy(u[P]).add(z).add(y),f(A.x,A.y,A.z)):f(T.x,T.y,h/r*P);for(Q=l-1;0<=Q;Q--){P=Q/l;R=k*Math.cos(P*Math.PI/2);O=\nm*Math.sin(P*Math.PI/2);L=0;for(P=S.length;L<P;L++)T=c(S[L],w[L],O),f(T.x,T.y,h+R);E=0;for(D=H.length;E<D;E++)for(I=H[E],Z=X[E],L=0,P=I.length;L<P;L++)T=c(I[L],Z[L],O),F?f(T.x,T.y+u[r-1].y,u[r-1].x+R):f(T.x,T.y,h+R)}(function(){if(p){var a=0*U;for(L=0;L<W;L++)V=N[L],g(V[2]+a,V[1]+a,V[0]+a);a=U*(r+2*l);for(L=0;L<W;L++)V=N[L],g(V[0]+a,V[1]+a,V[2]+a)}else{for(L=0;L<W;L++)V=N[L],g(V[2],V[1],V[0]);for(L=0;L<W;L++)V=N[L],g(V[0]+U*r,V[1]+U*r,V[2]+U*r)}})();(function(){var a=0;e(S,a);a+=S.length;E=0;for(D=\nH.length;E<D;E++)I=H[E],e(I,a),a+=I.length})()};La.WorldUVGenerator={generateTopUV:function(a,b,c,d){a=a.vertices;b=a[b];c=a[c];d=a[d];return[new C(b.x,b.y),new C(c.x,c.y),new C(d.x,d.y)]},generateSideWallUV:function(a,b,c,d,e){a=a.vertices;b=a[b];c=a[c];d=a[d];e=a[e];return.01>Math.abs(b.y-c.y)?[new C(b.x,1-b.z),new C(c.x,1-c.z),new C(d.x,1-d.z),new C(e.x,1-e.z)]:[new C(b.y,1-b.z),new C(c.y,1-c.z),new C(d.y,1-d.z),new C(e.y,1-e.z)]}};Mc.prototype=Object.create(La.prototype);Mc.prototype.constructor=\nMc;mb.prototype=Object.create(D.prototype);mb.prototype.constructor=mb;Nc.prototype=Object.create(S.prototype);Nc.prototype.constructor=Nc;Ub.prototype=Object.create(D.prototype);Ub.prototype.constructor=Ub;Oc.prototype=Object.create(S.prototype);Oc.prototype.constructor=Oc;Pc.prototype=Object.create(S.prototype);Pc.prototype.constructor=Pc;Vb.prototype=Object.create(D.prototype);Vb.prototype.constructor=Vb;Qc.prototype=Object.create(S.prototype);Qc.prototype.constructor=Qc;Wb.prototype=Object.create(D.prototype);\nWb.prototype.constructor=Wb;Xb.prototype=Object.create(S.prototype);Xb.prototype.constructor=Xb;Yb.prototype=Object.create(D.prototype);Yb.prototype.constructor=Yb;Wa.prototype=Object.create(D.prototype);Wa.prototype.constructor=Wa;nb.prototype=Object.create(S.prototype);nb.prototype.constructor=nb;Rc.prototype=Object.create(nb.prototype);Rc.prototype.constructor=Rc;Sc.prototype=Object.create(Wa.prototype);Sc.prototype.constructor=Sc;Zb.prototype=Object.create(D.prototype);Zb.prototype.constructor=\nZb;Tc.prototype=Object.create(S.prototype);Tc.prototype.constructor=Tc;$b.prototype=Object.create(S.prototype);$b.prototype.constructor=$b;var Ea=Object.freeze({WireframeGeometry:Mb,ParametricGeometry:Dc,ParametricBufferGeometry:Nb,TetrahedronGeometry:Ec,TetrahedronBufferGeometry:Ob,OctahedronGeometry:Fc,OctahedronBufferGeometry:lb,IcosahedronGeometry:Gc,IcosahedronBufferGeometry:Pb,DodecahedronGeometry:Hc,DodecahedronBufferGeometry:Qb,PolyhedronGeometry:Ic,PolyhedronBufferGeometry:xa,TubeGeometry:Jc,\nTubeBufferGeometry:Rb,TorusKnotGeometry:Kc,TorusKnotBufferGeometry:Sb,TorusGeometry:Lc,TorusBufferGeometry:Tb,TextGeometry:Mc,SphereBufferGeometry:mb,SphereGeometry:Nc,RingGeometry:Oc,RingBufferGeometry:Ub,PlaneBufferGeometry:ib,PlaneGeometry:Pc,LatheGeometry:Qc,LatheBufferGeometry:Vb,ShapeGeometry:Xb,ShapeBufferGeometry:Wb,ExtrudeGeometry:La,EdgesGeometry:Yb,ConeGeometry:Rc,ConeBufferGeometry:Sc,CylinderGeometry:nb,CylinderBufferGeometry:Wa,CircleBufferGeometry:Zb,CircleGeometry:Tc,BoxBufferGeometry:hb,\nBoxGeometry:$b});ac.prototype=Object.create(Ia.prototype);ac.prototype.constructor=ac;ac.prototype.isShadowMaterial=!0;bc.prototype=Object.create(Ia.prototype);bc.prototype.constructor=bc;bc.prototype.isRawShaderMaterial=!0;Uc.prototype={constructor:Uc,isMultiMaterial:!0,toJSON:function(a){for(var b={metadata:{version:4.2,type:\"material\",generator:\"MaterialExporter\"},uuid:this.uuid,type:this.type,materials:[]},c=this.materials,d=0,e=c.length;d<e;d++){var f=c[d].toJSON(a);delete f.metadata;b.materials.push(f)}b.visible=\nthis.visible;return b},clone:function(){for(var a=new this.constructor,b=0;b<this.materials.length;b++)a.materials.push(this.materials[b].clone());a.visible=this.visible;return a}};Pa.prototype=Object.create(W.prototype);Pa.prototype.constructor=Pa;Pa.prototype.isMeshStandardMaterial=!0;Pa.prototype.copy=function(a){W.prototype.copy.call(this,a);this.defines={STANDARD:\"\"};this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=\na.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap=a.metalnessMap;this.alphaMap=a.alphaMap;\nthis.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};ob.prototype=Object.create(Pa.prototype);ob.prototype.constructor=ob;ob.prototype.isMeshPhysicalMaterial=!0;ob.prototype.copy=function(a){Pa.prototype.copy.call(this,\na);this.defines={PHYSICAL:\"\"};this.reflectivity=a.reflectivity;this.clearCoat=a.clearCoat;this.clearCoatRoughness=a.clearCoatRoughness;return this};Ca.prototype=Object.create(W.prototype);Ca.prototype.constructor=Ca;Ca.prototype.isMeshPhongMaterial=!0;Ca.prototype.copy=function(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=\na.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=\na.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};pb.prototype=Object.create(Ca.prototype);pb.prototype.constructor=pb;pb.prototype.isMeshToonMaterial=!0;pb.prototype.copy=function(a){Ca.prototype.copy.call(this,a);this.gradientMap=a.gradientMap;return this};qb.prototype=Object.create(W.prototype);\nqb.prototype.constructor=qb;qb.prototype.isMeshNormalMaterial=!0;qb.prototype.copy=function(a){W.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=\na.morphNormals;return this};rb.prototype=Object.create(W.prototype);rb.prototype.constructor=rb;rb.prototype.isMeshLambertMaterial=!0;rb.prototype.copy=function(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.specularMap=a.specularMap;this.alphaMap=\na.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};sb.prototype=Object.create(W.prototype);sb.prototype.constructor=sb;sb.prototype.isLineDashedMaterial=!0;sb.prototype.copy=\nfunction(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.linewidth=a.linewidth;this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var Mf=Object.freeze({ShadowMaterial:ac,SpriteMaterial:kb,RawShaderMaterial:bc,ShaderMaterial:Ia,PointsMaterial:Oa,MultiMaterial:Uc,MeshPhysicalMaterial:ob,MeshStandardMaterial:Pa,MeshPhongMaterial:Ca,MeshToonMaterial:pb,MeshNormalMaterial:qb,MeshLambertMaterial:rb,MeshDepthMaterial:ab,MeshBasicMaterial:Ka,LineDashedMaterial:sb,\nLineBasicMaterial:ia,Material:W}),ne={enabled:!1,files:{},add:function(a,b){!1!==this.enabled&&(this.files[a]=b)},get:function(a){if(!1!==this.enabled)return this.files[a]},remove:function(a){delete this.files[a]},clear:function(){this.files={}}},va=new Pd;Object.assign(Ma.prototype,{load:function(a,b,c,d){void 0===a&&(a=\"\");void 0!==this.path&&(a=this.path+a);var e=this,f=ne.get(a);if(void 0!==f)return e.manager.itemStart(a),setTimeout(function(){b&&b(f);e.manager.itemEnd(a)},0),f;var g=a.match(/^data:(.*?)(;base64)?,(.*)$/);\nif(g){var h=g[1],k=!!g[2],g=g[3],g=window.decodeURIComponent(g);k&&(g=window.atob(g));try{var m,l=(this.responseType||\"\").toLowerCase();switch(l){case \"arraybuffer\":case \"blob\":m=new ArrayBuffer(g.length);for(var p=new Uint8Array(m),k=0;k<g.length;k++)p[k]=g.charCodeAt(k);\"blob\"===l&&(m=new Blob([m],{type:h}));break;case \"document\":m=(new DOMParser).parseFromString(g,h);break;case \"json\":m=JSON.parse(g);break;default:m=g}window.setTimeout(function(){b&&b(m);e.manager.itemEnd(a)},0)}catch(q){window.setTimeout(function(){d&&\nd(q);e.manager.itemError(a)},0)}}else{var n=new XMLHttpRequest;n.open(\"GET\",a,!0);n.addEventListener(\"load\",function(c){var f=c.target.response;ne.add(a,f);200===this.status?(b&&b(f),e.manager.itemEnd(a)):0===this.status?(console.warn(\"THREE.FileLoader: HTTP Status 0 received.\"),b&&b(f),e.manager.itemEnd(a)):(d&&d(c),e.manager.itemError(a))},!1);void 0!==c&&n.addEventListener(\"progress\",function(a){c(a)},!1);n.addEventListener(\"error\",function(b){d&&d(b);e.manager.itemError(a)},!1);void 0!==this.responseType&&\n(n.responseType=this.responseType);void 0!==this.withCredentials&&(n.withCredentials=this.withCredentials);n.overrideMimeType&&n.overrideMimeType(void 0!==this.mimeType?this.mimeType:\"text/plain\");n.send(null)}e.manager.itemStart(a);return n},setPath:function(a){this.path=a;return this},setResponseType:function(a){this.responseType=a;return this},setWithCredentials:function(a){this.withCredentials=a;return this},setMimeType:function(a){this.mimeType=a;return this}});Object.assign(Ee.prototype,{load:function(a,\nb,c,d){function e(e){k.load(a[e],function(a){a=f._parser(a,!0);g[e]={width:a.width,height:a.height,format:a.format,mipmaps:a.mipmaps};m+=1;6===m&&(1===a.mipmapCount&&(h.minFilter=1006),h.format=a.format,h.needsUpdate=!0,b&&b(h))},c,d)}var f=this,g=[],h=new Lb;h.image=g;var k=new Ma(this.manager);k.setPath(this.path);k.setResponseType(\"arraybuffer\");if(Array.isArray(a))for(var m=0,l=0,p=a.length;l<p;++l)e(l);else k.load(a,function(a){a=f._parser(a,!0);if(a.isCubemap)for(var c=a.mipmaps.length/a.mipmapCount,\nd=0;d<c;d++){g[d]={mipmaps:[]};for(var e=0;e<a.mipmapCount;e++)g[d].mipmaps.push(a.mipmaps[d*a.mipmapCount+e]),g[d].format=a.format,g[d].width=a.width,g[d].height=a.height}else h.image.width=a.width,h.image.height=a.height,h.mipmaps=a.mipmaps;1===a.mipmapCount&&(h.minFilter=1006);h.format=a.format;h.needsUpdate=!0;b&&b(h)},c,d);return h},setPath:function(a){this.path=a;return this}});Object.assign(Qd.prototype,{load:function(a,b,c,d){var e=this,f=new db,g=new Ma(this.manager);g.setResponseType(\"arraybuffer\");\ng.load(a,function(a){if(a=e._parser(a))void 0!==a.image?f.image=a.image:void 0!==a.data&&(f.image.width=a.width,f.image.height=a.height,f.image.data=a.data),f.wrapS=void 0!==a.wrapS?a.wrapS:1001,f.wrapT=void 0!==a.wrapT?a.wrapT:1001,f.magFilter=void 0!==a.magFilter?a.magFilter:1006,f.minFilter=void 0!==a.minFilter?a.minFilter:1008,f.anisotropy=void 0!==a.anisotropy?a.anisotropy:1,void 0!==a.format&&(f.format=a.format),void 0!==a.type&&(f.type=a.type),void 0!==a.mipmaps&&(f.mipmaps=a.mipmaps),1===\na.mipmapCount&&(f.minFilter=1006),f.needsUpdate=!0,b&&b(f,a)},c,d);return f}});Object.assign(Vc.prototype,{load:function(a,b,c,d){var e=this,f=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"img\");f.onload=function(){f.onload=null;URL.revokeObjectURL(f.src);b&&b(f);e.manager.itemEnd(a)};f.onerror=d;if(0===a.indexOf(\"data:\"))f.src=a;else if(void 0!==this.crossOrigin)f.crossOrigin=this.crossOrigin,f.src=a;else{var g=new Ma;g.setPath(this.path);g.setResponseType(\"blob\");g.setWithCredentials(this.withCredentials);\ng.load(a,function(a){f.src=URL.createObjectURL(a)},c,d)}e.manager.itemStart(a);return f},setCrossOrigin:function(a){this.crossOrigin=a;return this},setWithCredentials:function(a){this.withCredentials=a;return this},setPath:function(a){this.path=a;return this}});Object.assign(Rd.prototype,{load:function(a,b,c,d){function e(c){g.load(a[c],function(a){f.images[c]=a;h++;6===h&&(f.needsUpdate=!0,b&&b(f))},void 0,d)}var f=new Za,g=new Vc(this.manager);g.setCrossOrigin(this.crossOrigin);g.setPath(this.path);\nvar h=0;for(c=0;c<a.length;++c)e(c);return f},setCrossOrigin:function(a){this.crossOrigin=a;return this},setPath:function(a){this.path=a;return this}});Object.assign(md.prototype,{load:function(a,b,c,d){var e=new ea,f=new Vc(this.manager);f.setCrossOrigin(this.crossOrigin);f.setWithCredentials(this.withCredentials);f.setPath(this.path);f.load(a,function(c){var d=0<a.search(/\\.(jpg|jpeg)$/)||0===a.search(/^data\\:image\\/jpeg/);e.format=d?1022:1023;e.image=c;e.needsUpdate=!0;void 0!==b&&b(e)},c,d);return e},\nsetCrossOrigin:function(a){this.crossOrigin=a;return this},setWithCredentials:function(a){this.withCredentials=a;return this},setPath:function(a){this.path=a;return this}});na.prototype=Object.assign(Object.create(G.prototype),{constructor:na,isLight:!0,copy:function(a){G.prototype.copy.call(this,a);this.color.copy(a.color);this.intensity=a.intensity;return this},toJSON:function(a){a=G.prototype.toJSON.call(this,a);a.object.color=this.color.getHex();a.object.intensity=this.intensity;void 0!==this.groundColor&&\n(a.object.groundColor=this.groundColor.getHex());void 0!==this.distance&&(a.object.distance=this.distance);void 0!==this.angle&&(a.object.angle=this.angle);void 0!==this.decay&&(a.object.decay=this.decay);void 0!==this.penumbra&&(a.object.penumbra=this.penumbra);void 0!==this.shadow&&(a.object.shadow=this.shadow.toJSON());return a}});nd.prototype=Object.assign(Object.create(na.prototype),{constructor:nd,isHemisphereLight:!0,copy:function(a){na.prototype.copy.call(this,a);this.groundColor.copy(a.groundColor);\nreturn this}});Object.assign(tb.prototype,{copy:function(a){this.camera=a.camera.clone();this.bias=a.bias;this.radius=a.radius;this.mapSize.copy(a.mapSize);return this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var a={};0!==this.bias&&(a.bias=this.bias);1!==this.radius&&(a.radius=this.radius);if(512!==this.mapSize.x||512!==this.mapSize.y)a.mapSize=this.mapSize.toArray();a.camera=this.camera.toJSON(!1).object;delete a.camera.matrix;return a}});od.prototype=Object.assign(Object.create(tb.prototype),\n{constructor:od,isSpotLightShadow:!0,update:function(a){var b=2*Q.RAD2DEG*a.angle,c=this.mapSize.width/this.mapSize.height;a=a.distance||500;var d=this.camera;if(b!==d.fov||c!==d.aspect||a!==d.far)d.fov=b,d.aspect=c,d.far=a,d.updateProjectionMatrix()}});pd.prototype=Object.assign(Object.create(na.prototype),{constructor:pd,isSpotLight:!0,copy:function(a){na.prototype.copy.call(this,a);this.distance=a.distance;this.angle=a.angle;this.penumbra=a.penumbra;this.decay=a.decay;this.target=a.target.clone();\nthis.shadow=a.shadow.clone();return this}});qd.prototype=Object.assign(Object.create(na.prototype),{constructor:qd,isPointLight:!0,copy:function(a){na.prototype.copy.call(this,a);this.distance=a.distance;this.decay=a.decay;this.shadow=a.shadow.clone();return this}});rd.prototype=Object.assign(Object.create(tb.prototype),{constructor:rd});sd.prototype=Object.assign(Object.create(na.prototype),{constructor:sd,isDirectionalLight:!0,copy:function(a){na.prototype.copy.call(this,a);this.target=a.target.clone();\nthis.shadow=a.shadow.clone();return this}});td.prototype=Object.assign(Object.create(na.prototype),{constructor:td,isAmbientLight:!0});var ba={arraySlice:function(a,b,c){return ba.isTypedArray(a)?new a.constructor(a.subarray(b,c)):a.slice(b,c)},convertArray:function(a,b,c){return!a||!c&&a.constructor===b?a:\"number\"===typeof b.BYTES_PER_ELEMENT?new b(a):Array.prototype.slice.call(a)},isTypedArray:function(a){return ArrayBuffer.isView(a)&&!(a instanceof DataView)},getKeyframeOrder:function(a){for(var b=\na.length,c=Array(b),d=0;d!==b;++d)c[d]=d;c.sort(function(b,c){return a[b]-a[c]});return c},sortedArray:function(a,b,c){for(var d=a.length,e=new a.constructor(d),f=0,g=0;g!==d;++f)for(var h=c[f]*b,k=0;k!==b;++k)e[g++]=a[h+k];return e},flattenJSON:function(a,b,c,d){for(var e=1,f=a[0];void 0!==f&&void 0===f[d];)f=a[e++];if(void 0!==f){var g=f[d];if(void 0!==g)if(Array.isArray(g)){do g=f[d],void 0!==g&&(b.push(f.time),c.push.apply(c,g)),f=a[e++];while(void 0!==f)}else if(void 0!==g.toArray){do g=f[d],\nvoid 0!==g&&(b.push(f.time),g.toArray(c,c.length)),f=a[e++];while(void 0!==f)}else{do g=f[d],void 0!==g&&(b.push(f.time),c.push(g)),f=a[e++];while(void 0!==f)}}}};qa.prototype={constructor:qa,evaluate:function(a){var b=this.parameterPositions,c=this._cachedIndex,d=b[c],e=b[c-1];a:{b:{c:{d:if(!(a<d)){for(var f=c+2;;){if(void 0===d){if(a<e)break d;this._cachedIndex=c=b.length;return this.afterEnd_(c-1,a,e)}if(c===f)break;e=d;d=b[++c];if(a<d)break b}d=b.length;break c}if(a>=e)break a;else{f=b[1];a<f&&\n(c=2,e=f);for(f=c-2;;){if(void 0===e)return this._cachedIndex=0,this.beforeStart_(0,a,d);if(c===f)break;d=e;e=b[--c-1];if(a>=e)break b}d=c;c=0}}for(;c<d;)e=c+d>>>1,a<b[e]?d=e:c=e+1;d=b[c];e=b[c-1];if(void 0===e)return this._cachedIndex=0,this.beforeStart_(0,a,d);if(void 0===d)return this._cachedIndex=c=b.length,this.afterEnd_(c-1,e,a)}this._cachedIndex=c;this.intervalChanged_(c,e,d)}return this.interpolate_(c,e,a,d)},settings:null,DefaultSettings_:{},getSettings_:function(){return this.settings||\nthis.DefaultSettings_},copySampleValue_:function(a){var b=this.resultBuffer,c=this.sampleValues,d=this.valueSize;a*=d;for(var e=0;e!==d;++e)b[e]=c[a+e];return b},interpolate_:function(a,b,c,d){throw Error(\"call to abstract method\");},intervalChanged_:function(a,b,c){}};Object.assign(qa.prototype,{beforeStart_:qa.prototype.copySampleValue_,afterEnd_:qa.prototype.copySampleValue_});ud.prototype=Object.assign(Object.create(qa.prototype),{constructor:ud,DefaultSettings_:{endingStart:2400,endingEnd:2400},\nintervalChanged_:function(a,b,c){var d=this.parameterPositions,e=a-2,f=a+1,g=d[e],h=d[f];if(void 0===g)switch(this.getSettings_().endingStart){case 2401:e=a;g=2*b-c;break;case 2402:e=d.length-2;g=b+d[e]-d[e+1];break;default:e=a,g=c}if(void 0===h)switch(this.getSettings_().endingEnd){case 2401:f=a;h=2*c-b;break;case 2402:f=1;h=c+d[1]-d[0];break;default:f=a-1,h=b}a=.5*(c-b);d=this.valueSize;this._weightPrev=a/(b-g);this._weightNext=a/(h-c);this._offsetPrev=e*d;this._offsetNext=f*d},interpolate_:function(a,\nb,c,d){var e=this.resultBuffer,f=this.sampleValues,g=this.valueSize;a*=g;var h=a-g,k=this._offsetPrev,m=this._offsetNext,l=this._weightPrev,p=this._weightNext,n=(c-b)/(d-b);c=n*n;d=c*n;b=-l*d+2*l*c-l*n;l=(1+l)*d+(-1.5-2*l)*c+(-.5+l)*n+1;n=(-1-p)*d+(1.5+p)*c+.5*n;p=p*d-p*c;for(c=0;c!==g;++c)e[c]=b*f[k+c]+l*f[h+c]+n*f[a+c]+p*f[m+c];return e}});Wc.prototype=Object.assign(Object.create(qa.prototype),{constructor:Wc,interpolate_:function(a,b,c,d){var e=this.resultBuffer,f=this.sampleValues,g=this.valueSize;\na*=g;var h=a-g;b=(c-b)/(d-b);c=1-b;for(d=0;d!==g;++d)e[d]=f[h+d]*c+f[a+d]*b;return e}});vd.prototype=Object.assign(Object.create(qa.prototype),{constructor:vd,interpolate_:function(a,b,c,d){return this.copySampleValue_(a-1)}});var Ya;Ya={TimeBufferType:Float32Array,ValueBufferType:Float32Array,DefaultInterpolation:2301,InterpolantFactoryMethodDiscrete:function(a){return new vd(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodLinear:function(a){return new Wc(this.times,this.values,\nthis.getValueSize(),a)},InterpolantFactoryMethodSmooth:function(a){return new ud(this.times,this.values,this.getValueSize(),a)},setInterpolation:function(a){var b;switch(a){case 2300:b=this.InterpolantFactoryMethodDiscrete;break;case 2301:b=this.InterpolantFactoryMethodLinear;break;case 2302:b=this.InterpolantFactoryMethodSmooth}if(void 0===b){b=\"unsupported interpolation for \"+this.ValueTypeName+\" keyframe track named \"+this.name;if(void 0===this.createInterpolant)if(a!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);\nelse throw Error(b);console.warn(b)}else this.createInterpolant=b},getInterpolation:function(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return 2300;case this.InterpolantFactoryMethodLinear:return 2301;case this.InterpolantFactoryMethodSmooth:return 2302}},getValueSize:function(){return this.values.length/this.times.length},shift:function(a){if(0!==a)for(var b=this.times,c=0,d=b.length;c!==d;++c)b[c]+=a;return this},scale:function(a){if(1!==a)for(var b=this.times,c=\n0,d=b.length;c!==d;++c)b[c]*=a;return this},trim:function(a,b){for(var c=this.times,d=c.length,e=0,f=d-1;e!==d&&c[e]<a;)++e;for(;-1!==f&&c[f]>b;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),d=this.getValueSize(),this.times=ba.arraySlice(c,e,f),this.values=ba.arraySlice(this.values,e*d,f*d);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error(\"invalid value size in track\",this),a=!1);var c=this.times,b=this.values,d=c.length;0===d&&(console.error(\"track is empty\",\nthis),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if(\"number\"===typeof g&&isNaN(g)){console.error(\"time is not a valid number\",this,f,g);a=!1;break}if(null!==e&&e>g){console.error(\"out of order keys\",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&ba.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error(\"value is not a valid number\",this,f,d);a=!1;break}return a},optimize:function(){for(var a=this.times,b=this.values,c=this.getValueSize(),d=2302===this.getInterpolation(),e=1,\nf=a.length-1,g=1;g<f;++g){var h=!1,k=a[g];if(k!==a[g+1]&&(1!==g||k!==k[0]))if(d)h=!0;else for(var m=g*c,l=m-c,p=m+c,k=0;k!==c;++k){var n=b[m+k];if(n!==b[l+k]||n!==b[p+k]){h=!0;break}}if(h){if(g!==e)for(a[e]=a[g],h=g*c,m=e*c,k=0;k!==c;++k)b[m+k]=b[h+k];++e}}if(0<f){a[e]=a[f];h=f*c;m=e*c;for(k=0;k!==c;++k)b[m+k]=b[h+k];++e}e!==a.length&&(this.times=ba.arraySlice(a,0,e),this.values=ba.arraySlice(b,0,e*c));return this}};cc.prototype=Object.assign(Object.create(Ya),{constructor:cc,ValueTypeName:\"vector\"});\nwd.prototype=Object.assign(Object.create(qa.prototype),{constructor:wd,interpolate_:function(a,b,c,d){var e=this.resultBuffer,f=this.sampleValues,g=this.valueSize;a*=g;b=(c-b)/(d-b);for(c=a+g;a!==c;a+=4)da.slerpFlat(e,0,f,a-g,f,a,b);return e}});Xc.prototype=Object.assign(Object.create(Ya),{constructor:Xc,ValueTypeName:\"quaternion\",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(a){return new wd(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodSmooth:void 0});\ndc.prototype=Object.assign(Object.create(Ya),{constructor:dc,ValueTypeName:\"number\"});xd.prototype=Object.assign(Object.create(Ya),{constructor:xd,ValueTypeName:\"string\",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});yd.prototype=Object.assign(Object.create(Ya),{constructor:yd,ValueTypeName:\"bool\",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});\nzd.prototype=Object.assign(Object.create(Ya),{constructor:zd,ValueTypeName:\"color\"});vb.prototype=Ya;Ya.constructor=vb;Object.assign(vb,{parse:function(a){if(void 0===a.type)throw Error(\"track type undefined, can not parse\");var b=vb._getTrackTypeForValueTypeName(a.type);if(void 0===a.times){var c=[],d=[];ba.flattenJSON(a.keys,c,d,\"value\");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)},toJSON:function(a){var b=a.constructor;if(void 0!==b.toJSON)b=\nb.toJSON(a);else{var b={name:a.name,times:ba.convertArray(a.times,Array),values:ba.convertArray(a.values,Array)},c=a.getInterpolation();c!==a.DefaultInterpolation&&(b.interpolation=c)}b.type=a.ValueTypeName;return b},_getTrackTypeForValueTypeName:function(a){switch(a.toLowerCase()){case \"scalar\":case \"double\":case \"float\":case \"number\":case \"integer\":return dc;case \"vector\":case \"vector2\":case \"vector3\":case \"vector4\":return cc;case \"color\":return zd;case \"quaternion\":return Xc;case \"bool\":case \"boolean\":return yd;\ncase \"string\":return xd}throw Error(\"Unsupported typeName: \"+a);}});ta.prototype={constructor:ta,resetDuration:function(){for(var a=0,b=0,c=this.tracks.length;b!==c;++b)var d=this.tracks[b],a=Math.max(a,d.times[d.times.length-1]);this.duration=a},trim:function(){for(var a=0;a<this.tracks.length;a++)this.tracks[a].trim(0,this.duration);return this},optimize:function(){for(var a=0;a<this.tracks.length;a++)this.tracks[a].optimize();return this}};Object.assign(ta,{parse:function(a){for(var b=[],c=a.tracks,\nd=1/(a.fps||1),e=0,f=c.length;e!==f;++e)b.push(vb.parse(c[e]).scale(d));return new ta(a.name,a.duration,b)},toJSON:function(a){var b=[],c=a.tracks;a={name:a.name,duration:a.duration,tracks:b};for(var d=0,e=c.length;d!==e;++d)b.push(vb.toJSON(c[d]));return a},CreateFromMorphTargetSequence:function(a,b,c,d){for(var e=b.length,f=[],g=0;g<e;g++){var h=[],k=[];h.push((g+e-1)%e,g,(g+1)%e);k.push(0,1,0);var m=ba.getKeyframeOrder(h),h=ba.sortedArray(h,1,m),k=ba.sortedArray(k,1,m);d||0!==h[0]||(h.push(e),\nk.push(k[0]));f.push((new dc(\".morphTargetInfluences[\"+b[g].name+\"]\",h,k)).scale(1/c))}return new ta(a,-1,f)},findByName:function(a,b){var c=a;Array.isArray(a)||(c=a.geometry&&a.geometry.animations||a.animations);for(var d=0;d<c.length;d++)if(c[d].name===b)return c[d];return null},CreateClipsFromMorphTargetSequences:function(a,b,c){for(var d={},e=/^([\\w-]*?)([\\d]+)$/,f=0,g=a.length;f<g;f++){var h=a[f],k=h.name.match(e);if(k&&1<k.length){var m=k[1];(k=d[m])||(d[m]=k=[]);k.push(h)}}a=[];for(m in d)a.push(ta.CreateFromMorphTargetSequence(m,\nd[m],b,c));return a},parseAnimation:function(a,b){if(!a)return console.error(\"  no animation in JSONLoader data\"),null;for(var c=function(a,b,c,d,e){if(0!==c.length){var f=[],g=[];ba.flattenJSON(c,f,g,d);0!==f.length&&e.push(new a(b,f,g))}},d=[],e=a.name||\"default\",f=a.length||-1,g=a.fps||30,h=a.hierarchy||[],k=0;k<h.length;k++){var m=h[k].keys;if(m&&0!==m.length)if(m[0].morphTargets){for(var f={},l=0;l<m.length;l++)if(m[l].morphTargets)for(var p=0;p<m[l].morphTargets.length;p++)f[m[l].morphTargets[p]]=\n-1;for(var n in f){for(var q=[],w=[],p=0;p!==m[l].morphTargets.length;++p){var u=m[l];q.push(u.time);w.push(u.morphTarget===n?1:0)}d.push(new dc(\".morphTargetInfluence[\"+n+\"]\",q,w))}f=f.length*(g||1)}else l=\".bones[\"+b[k].name+\"]\",c(cc,l+\".position\",m,\"pos\",d),c(Xc,l+\".quaternion\",m,\"rot\",d),c(cc,l+\".scale\",m,\"scl\",d)}return 0===d.length?null:new ta(e,f,d)}});Object.assign(Ad.prototype,{load:function(a,b,c,d){var e=this;(new Ma(e.manager)).load(a,function(a){b(e.parse(JSON.parse(a)))},c,d)},setTextures:function(a){this.textures=\na},parse:function(a){function b(a){void 0===c[a]&&console.warn(\"THREE.MaterialLoader: Undefined texture\",a);return c[a]}var c=this.textures,d=new Mf[a.type];void 0!==a.uuid&&(d.uuid=a.uuid);void 0!==a.name&&(d.name=a.name);void 0!==a.color&&d.color.setHex(a.color);void 0!==a.roughness&&(d.roughness=a.roughness);void 0!==a.metalness&&(d.metalness=a.metalness);void 0!==a.emissive&&d.emissive.setHex(a.emissive);void 0!==a.specular&&d.specular.setHex(a.specular);void 0!==a.shininess&&(d.shininess=a.shininess);\nvoid 0!==a.clearCoat&&(d.clearCoat=a.clearCoat);void 0!==a.clearCoatRoughness&&(d.clearCoatRoughness=a.clearCoatRoughness);void 0!==a.uniforms&&(d.uniforms=a.uniforms);void 0!==a.vertexShader&&(d.vertexShader=a.vertexShader);void 0!==a.fragmentShader&&(d.fragmentShader=a.fragmentShader);void 0!==a.vertexColors&&(d.vertexColors=a.vertexColors);void 0!==a.fog&&(d.fog=a.fog);void 0!==a.shading&&(d.shading=a.shading);void 0!==a.blending&&(d.blending=a.blending);void 0!==a.side&&(d.side=a.side);void 0!==\na.opacity&&(d.opacity=a.opacity);void 0!==a.transparent&&(d.transparent=a.transparent);void 0!==a.alphaTest&&(d.alphaTest=a.alphaTest);void 0!==a.depthTest&&(d.depthTest=a.depthTest);void 0!==a.depthWrite&&(d.depthWrite=a.depthWrite);void 0!==a.colorWrite&&(d.colorWrite=a.colorWrite);void 0!==a.wireframe&&(d.wireframe=a.wireframe);void 0!==a.wireframeLinewidth&&(d.wireframeLinewidth=a.wireframeLinewidth);void 0!==a.wireframeLinecap&&(d.wireframeLinecap=a.wireframeLinecap);void 0!==a.wireframeLinejoin&&\n(d.wireframeLinejoin=a.wireframeLinejoin);void 0!==a.skinning&&(d.skinning=a.skinning);void 0!==a.morphTargets&&(d.morphTargets=a.morphTargets);void 0!==a.size&&(d.size=a.size);void 0!==a.sizeAttenuation&&(d.sizeAttenuation=a.sizeAttenuation);void 0!==a.map&&(d.map=b(a.map));void 0!==a.alphaMap&&(d.alphaMap=b(a.alphaMap),d.transparent=!0);void 0!==a.bumpMap&&(d.bumpMap=b(a.bumpMap));void 0!==a.bumpScale&&(d.bumpScale=a.bumpScale);void 0!==a.normalMap&&(d.normalMap=b(a.normalMap));if(void 0!==a.normalScale){var e=\na.normalScale;!1===Array.isArray(e)&&(e=[e,e]);d.normalScale=(new C).fromArray(e)}void 0!==a.displacementMap&&(d.displacementMap=b(a.displacementMap));void 0!==a.displacementScale&&(d.displacementScale=a.displacementScale);void 0!==a.displacementBias&&(d.displacementBias=a.displacementBias);void 0!==a.roughnessMap&&(d.roughnessMap=b(a.roughnessMap));void 0!==a.metalnessMap&&(d.metalnessMap=b(a.metalnessMap));void 0!==a.emissiveMap&&(d.emissiveMap=b(a.emissiveMap));void 0!==a.emissiveIntensity&&(d.emissiveIntensity=\na.emissiveIntensity);void 0!==a.specularMap&&(d.specularMap=b(a.specularMap));void 0!==a.envMap&&(d.envMap=b(a.envMap));void 0!==a.reflectivity&&(d.reflectivity=a.reflectivity);void 0!==a.lightMap&&(d.lightMap=b(a.lightMap));void 0!==a.lightMapIntensity&&(d.lightMapIntensity=a.lightMapIntensity);void 0!==a.aoMap&&(d.aoMap=b(a.aoMap));void 0!==a.aoMapIntensity&&(d.aoMapIntensity=a.aoMapIntensity);void 0!==a.gradientMap&&(d.gradientMap=b(a.gradientMap));if(void 0!==a.materials)for(var e=0,f=a.materials.length;e<\nf;e++)d.materials.push(this.parse(a.materials[e]));return d}});Object.assign(Sd.prototype,{load:function(a,b,c,d){var e=this;(new Ma(e.manager)).load(a,function(a){b(e.parse(JSON.parse(a)))},c,d)},parse:function(a){var b=new D,c=a.data.index,d={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};void 0!==c&&(c=new d[c.type](c.array),\nb.setIndex(new y(c,1)));var e=a.data.attributes,f;for(f in e){var g=e[f],c=new d[g.type](g.array);b.addAttribute(f,new y(c,g.itemSize,g.normalized))}d=a.data.groups||a.data.drawcalls||a.data.offsets;if(void 0!==d)for(f=0,c=d.length;f!==c;++f)e=d[f],b.addGroup(e.start,e.count,e.materialIndex);a=a.data.boundingSphere;void 0!==a&&(d=new q,void 0!==a.center&&d.fromArray(a.center),b.boundingSphere=new Fa(d,a.radius));return b}});wb.prototype={constructor:wb,crossOrigin:void 0,extractUrlBase:function(a){a=\na.split(\"/\");if(1===a.length)return\"./\";a.pop();return a.join(\"/\")+\"/\"},initMaterials:function(a,b,c){for(var d=[],e=0;e<a.length;++e)d[e]=this.createMaterial(a[e],b,c);return d},createMaterial:function(){var a,b,c;return function(d,e,f){function g(a,c,d,g,k){a=e+a;var m=wb.Handlers.get(a);null!==m?a=m.load(a):(b.setCrossOrigin(f),a=b.load(a));void 0!==c&&(a.repeat.fromArray(c),1!==c[0]&&(a.wrapS=1E3),1!==c[1]&&(a.wrapT=1E3));void 0!==d&&a.offset.fromArray(d);void 0!==g&&(\"repeat\"===g[0]&&(a.wrapS=\n1E3),\"mirror\"===g[0]&&(a.wrapS=1002),\"repeat\"===g[1]&&(a.wrapT=1E3),\"mirror\"===g[1]&&(a.wrapT=1002));void 0!==k&&(a.anisotropy=k);c=Q.generateUUID();h[c]=a;return c}void 0===a&&(a=new N);void 0===b&&(b=new md);void 0===c&&(c=new Ad);var h={},k={uuid:Q.generateUUID(),type:\"MeshLambertMaterial\"},m;for(m in d){var l=d[m];switch(m){case \"DbgColor\":case \"DbgIndex\":case \"opticalDensity\":case \"illumination\":break;case \"DbgName\":k.name=l;break;case \"blending\":k.blending=Me[l];break;case \"colorAmbient\":case \"mapAmbient\":console.warn(\"THREE.Loader.createMaterial:\",\nm,\"is no longer supported.\");break;case \"colorDiffuse\":k.color=a.fromArray(l).getHex();break;case \"colorSpecular\":k.specular=a.fromArray(l).getHex();break;case \"colorEmissive\":k.emissive=a.fromArray(l).getHex();break;case \"specularCoef\":k.shininess=l;break;case \"shading\":\"basic\"===l.toLowerCase()&&(k.type=\"MeshBasicMaterial\");\"phong\"===l.toLowerCase()&&(k.type=\"MeshPhongMaterial\");\"standard\"===l.toLowerCase()&&(k.type=\"MeshStandardMaterial\");break;case \"mapDiffuse\":k.map=g(l,d.mapDiffuseRepeat,d.mapDiffuseOffset,\nd.mapDiffuseWrap,d.mapDiffuseAnisotropy);break;case \"mapDiffuseRepeat\":case \"mapDiffuseOffset\":case \"mapDiffuseWrap\":case \"mapDiffuseAnisotropy\":break;case \"mapEmissive\":k.emissiveMap=g(l,d.mapEmissiveRepeat,d.mapEmissiveOffset,d.mapEmissiveWrap,d.mapEmissiveAnisotropy);break;case \"mapEmissiveRepeat\":case \"mapEmissiveOffset\":case \"mapEmissiveWrap\":case \"mapEmissiveAnisotropy\":break;case \"mapLight\":k.lightMap=g(l,d.mapLightRepeat,d.mapLightOffset,d.mapLightWrap,d.mapLightAnisotropy);break;case \"mapLightRepeat\":case \"mapLightOffset\":case \"mapLightWrap\":case \"mapLightAnisotropy\":break;\ncase \"mapAO\":k.aoMap=g(l,d.mapAORepeat,d.mapAOOffset,d.mapAOWrap,d.mapAOAnisotropy);break;case \"mapAORepeat\":case \"mapAOOffset\":case \"mapAOWrap\":case \"mapAOAnisotropy\":break;case \"mapBump\":k.bumpMap=g(l,d.mapBumpRepeat,d.mapBumpOffset,d.mapBumpWrap,d.mapBumpAnisotropy);break;case \"mapBumpScale\":k.bumpScale=l;break;case \"mapBumpRepeat\":case \"mapBumpOffset\":case \"mapBumpWrap\":case \"mapBumpAnisotropy\":break;case \"mapNormal\":k.normalMap=g(l,d.mapNormalRepeat,d.mapNormalOffset,d.mapNormalWrap,d.mapNormalAnisotropy);\nbreak;case \"mapNormalFactor\":k.normalScale=[l,l];break;case \"mapNormalRepeat\":case \"mapNormalOffset\":case \"mapNormalWrap\":case \"mapNormalAnisotropy\":break;case \"mapSpecular\":k.specularMap=g(l,d.mapSpecularRepeat,d.mapSpecularOffset,d.mapSpecularWrap,d.mapSpecularAnisotropy);break;case \"mapSpecularRepeat\":case \"mapSpecularOffset\":case \"mapSpecularWrap\":case \"mapSpecularAnisotropy\":break;case \"mapMetalness\":k.metalnessMap=g(l,d.mapMetalnessRepeat,d.mapMetalnessOffset,d.mapMetalnessWrap,d.mapMetalnessAnisotropy);\nbreak;case \"mapMetalnessRepeat\":case \"mapMetalnessOffset\":case \"mapMetalnessWrap\":case \"mapMetalnessAnisotropy\":break;case \"mapRoughness\":k.roughnessMap=g(l,d.mapRoughnessRepeat,d.mapRoughnessOffset,d.mapRoughnessWrap,d.mapRoughnessAnisotropy);break;case \"mapRoughnessRepeat\":case \"mapRoughnessOffset\":case \"mapRoughnessWrap\":case \"mapRoughnessAnisotropy\":break;case \"mapAlpha\":k.alphaMap=g(l,d.mapAlphaRepeat,d.mapAlphaOffset,d.mapAlphaWrap,d.mapAlphaAnisotropy);break;case \"mapAlphaRepeat\":case \"mapAlphaOffset\":case \"mapAlphaWrap\":case \"mapAlphaAnisotropy\":break;\ncase \"flipSided\":k.side=1;break;case \"doubleSided\":k.side=2;break;case \"transparency\":console.warn(\"THREE.Loader.createMaterial: transparency has been renamed to opacity\");k.opacity=l;break;case \"depthTest\":case \"depthWrite\":case \"colorWrite\":case \"opacity\":case \"reflectivity\":case \"transparent\":case \"visible\":case \"wireframe\":k[m]=l;break;case \"vertexColors\":!0===l&&(k.vertexColors=2);\"face\"===l&&(k.vertexColors=1);break;default:console.error(\"THREE.Loader.createMaterial: Unsupported\",m,l)}}\"MeshBasicMaterial\"===\nk.type&&delete k.emissive;\"MeshPhongMaterial\"!==k.type&&delete k.specular;1>k.opacity&&(k.transparent=!0);c.setTextures(h);return c.parse(k)}}()};wb.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=this.handlers,c=0,d=b.length;c<d;c+=2){var e=b[c+1];if(b[c].test(a))return e}return null}};Object.assign(Td.prototype,{load:function(a,b,c,d){var e=this,f=this.texturePath&&\"string\"===typeof this.texturePath?this.texturePath:wb.prototype.extractUrlBase(a),g=new Ma(this.manager);\ng.setWithCredentials(this.withCredentials);g.load(a,function(c){c=JSON.parse(c);var d=c.metadata;if(void 0!==d&&(d=d.type,void 0!==d)){if(\"object\"===d.toLowerCase()){console.error(\"THREE.JSONLoader: \"+a+\" should be loaded with THREE.ObjectLoader instead.\");return}if(\"scene\"===d.toLowerCase()){console.error(\"THREE.JSONLoader: \"+a+\" should be loaded with THREE.SceneLoader instead.\");return}}c=e.parse(c,f);b(c.geometry,c.materials)},c,d)},setTexturePath:function(a){this.texturePath=a},parse:function(a,\nb){var c=new S,d=void 0!==a.scale?1/a.scale:1;(function(b){var d,g,h,k,m,l,p,n,r,w,u,F,t,v=a.faces;l=a.vertices;var y=a.normals,z=a.colors,A=0;if(void 0!==a.uvs){for(d=0;d<a.uvs.length;d++)a.uvs[d].length&&A++;for(d=0;d<A;d++)c.faceVertexUvs[d]=[]}k=0;for(m=l.length;k<m;)d=new q,d.x=l[k++]*b,d.y=l[k++]*b,d.z=l[k++]*b,c.vertices.push(d);k=0;for(m=v.length;k<m;)if(b=v[k++],r=b&1,h=b&2,d=b&8,p=b&16,w=b&32,l=b&64,b&=128,r){r=new ha;r.a=v[k];r.b=v[k+1];r.c=v[k+3];u=new ha;u.a=v[k+1];u.b=v[k+2];u.c=v[k+\n3];k+=4;h&&(h=v[k++],r.materialIndex=h,u.materialIndex=h);h=c.faces.length;if(d)for(d=0;d<A;d++)for(F=a.uvs[d],c.faceVertexUvs[d][h]=[],c.faceVertexUvs[d][h+1]=[],g=0;4>g;g++)n=v[k++],t=F[2*n],n=F[2*n+1],t=new C(t,n),2!==g&&c.faceVertexUvs[d][h].push(t),0!==g&&c.faceVertexUvs[d][h+1].push(t);p&&(p=3*v[k++],r.normal.set(y[p++],y[p++],y[p]),u.normal.copy(r.normal));if(w)for(d=0;4>d;d++)p=3*v[k++],w=new q(y[p++],y[p++],y[p]),2!==d&&r.vertexNormals.push(w),0!==d&&u.vertexNormals.push(w);l&&(l=v[k++],\nl=z[l],r.color.setHex(l),u.color.setHex(l));if(b)for(d=0;4>d;d++)l=v[k++],l=z[l],2!==d&&r.vertexColors.push(new N(l)),0!==d&&u.vertexColors.push(new N(l));c.faces.push(r);c.faces.push(u)}else{r=new ha;r.a=v[k++];r.b=v[k++];r.c=v[k++];h&&(h=v[k++],r.materialIndex=h);h=c.faces.length;if(d)for(d=0;d<A;d++)for(F=a.uvs[d],c.faceVertexUvs[d][h]=[],g=0;3>g;g++)n=v[k++],t=F[2*n],n=F[2*n+1],t=new C(t,n),c.faceVertexUvs[d][h].push(t);p&&(p=3*v[k++],r.normal.set(y[p++],y[p++],y[p]));if(w)for(d=0;3>d;d++)p=3*\nv[k++],w=new q(y[p++],y[p++],y[p]),r.vertexNormals.push(w);l&&(l=v[k++],r.color.setHex(z[l]));if(b)for(d=0;3>d;d++)l=v[k++],r.vertexColors.push(new N(z[l]));c.faces.push(r)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;d<g;d+=b)c.skinWeights.push(new ga(a.skinWeights[d],1<b?a.skinWeights[d+1]:0,2<b?a.skinWeights[d+2]:0,3<b?a.skinWeights[d+3]:0));if(a.skinIndices)for(d=0,g=a.skinIndices.length;d<g;d+=b)c.skinIndices.push(new ga(a.skinIndices[d],\n1<b?a.skinIndices[d+1]:0,2<b?a.skinIndices[d+2]:0,3<b?a.skinIndices[d+3]:0));c.bones=a.bones;c.bones&&0<c.bones.length&&(c.skinWeights.length!==c.skinIndices.length||c.skinIndices.length!==c.vertices.length)&&console.warn(\"When skinning, number of vertices (\"+c.vertices.length+\"), skinIndices (\"+c.skinIndices.length+\"), and skinWeights (\"+c.skinWeights.length+\") should match.\")})();(function(b){if(void 0!==a.morphTargets)for(var d=0,g=a.morphTargets.length;d<g;d++){c.morphTargets[d]={};c.morphTargets[d].name=\na.morphTargets[d].name;c.morphTargets[d].vertices=[];for(var h=c.morphTargets[d].vertices,k=a.morphTargets[d].vertices,m=0,l=k.length;m<l;m+=3){var p=new q;p.x=k[m]*b;p.y=k[m+1]*b;p.z=k[m+2]*b;h.push(p)}}if(void 0!==a.morphColors&&0<a.morphColors.length)for(console.warn('THREE.JSONLoader: \"morphColors\" no longer supported. Using them as face colors.'),b=c.faces,h=a.morphColors[0].colors,d=0,g=b.length;d<g;d++)b[d].color.fromArray(h,3*d)})(d);(function(){var b=[],d=[];void 0!==a.animation&&d.push(a.animation);\nvoid 0!==a.animations&&(a.animations.length?d=d.concat(a.animations):d.push(a.animations));for(var g=0;g<d.length;g++){var h=ta.parseAnimation(d[g],c.bones);h&&b.push(h)}c.morphTargets&&(d=ta.CreateClipsFromMorphTargetSequences(c.morphTargets,10),b=b.concat(d));0<b.length&&(c.animations=b)})();c.computeFaceNormals();c.computeBoundingSphere();if(void 0===a.materials||0===a.materials.length)return{geometry:c};d=wb.prototype.initMaterials(a.materials,b,this.crossOrigin);return{geometry:c,materials:d}}});\nObject.assign(Fe.prototype,{load:function(a,b,c,d){\"\"===this.texturePath&&(this.texturePath=a.substring(0,a.lastIndexOf(\"/\")+1));var e=this;(new Ma(e.manager)).load(a,function(c){var d=null;try{d=JSON.parse(c)}catch(h){console.error(\"THREE:ObjectLoader: Can't parse \"+a+\".\",h.message);return}c=d.metadata;void 0===c||void 0===c.type||\"geometry\"===c.type.toLowerCase()?console.error(\"THREE.ObjectLoader: Can't load \"+a+\". Use THREE.JSONLoader instead.\"):e.parse(d,b)},c,d)},setTexturePath:function(a){this.texturePath=\na},setCrossOrigin:function(a){this.crossOrigin=a},parse:function(a,b){var c=this.parseGeometries(a.geometries),d=this.parseImages(a.images,function(){void 0!==b&&b(e)}),d=this.parseTextures(a.textures,d),d=this.parseMaterials(a.materials,d),e=this.parseObject(a.object,c,d);a.animations&&(e.animations=this.parseAnimations(a.animations));void 0!==a.images&&0!==a.images.length||void 0===b||b(e);return e},parseGeometries:function(a){var b={};if(void 0!==a)for(var c=new Td,d=new Sd,e=0,f=a.length;e<f;e++){var g,\nh=a[e];switch(h.type){case \"PlaneGeometry\":case \"PlaneBufferGeometry\":g=new Ea[h.type](h.width,h.height,h.widthSegments,h.heightSegments);break;case \"BoxGeometry\":case \"BoxBufferGeometry\":case \"CubeGeometry\":g=new Ea[h.type](h.width,h.height,h.depth,h.widthSegments,h.heightSegments,h.depthSegments);break;case \"CircleGeometry\":case \"CircleBufferGeometry\":g=new Ea[h.type](h.radius,h.segments,h.thetaStart,h.thetaLength);break;case \"CylinderGeometry\":case \"CylinderBufferGeometry\":g=new Ea[h.type](h.radiusTop,\nh.radiusBottom,h.height,h.radialSegments,h.heightSegments,h.openEnded,h.thetaStart,h.thetaLength);break;case \"ConeGeometry\":case \"ConeBufferGeometry\":g=new Ea[h.type](h.radius,h.height,h.radialSegments,h.heightSegments,h.openEnded,h.thetaStart,h.thetaLength);break;case \"SphereGeometry\":case \"SphereBufferGeometry\":g=new Ea[h.type](h.radius,h.widthSegments,h.heightSegments,h.phiStart,h.phiLength,h.thetaStart,h.thetaLength);break;case \"DodecahedronGeometry\":case \"IcosahedronGeometry\":case \"OctahedronGeometry\":case \"TetrahedronGeometry\":g=\nnew Ea[h.type](h.radius,h.detail);break;case \"RingGeometry\":case \"RingBufferGeometry\":g=new Ea[h.type](h.innerRadius,h.outerRadius,h.thetaSegments,h.phiSegments,h.thetaStart,h.thetaLength);break;case \"TorusGeometry\":case \"TorusBufferGeometry\":g=new Ea[h.type](h.radius,h.tube,h.radialSegments,h.tubularSegments,h.arc);break;case \"TorusKnotGeometry\":case \"TorusKnotBufferGeometry\":g=new Ea[h.type](h.radius,h.tube,h.tubularSegments,h.radialSegments,h.p,h.q);break;case \"LatheGeometry\":case \"LatheBufferGeometry\":g=\nnew Ea[h.type](h.points,h.segments,h.phiStart,h.phiLength);break;case \"BufferGeometry\":g=d.parse(h);break;case \"Geometry\":g=c.parse(h.data,this.texturePath).geometry;break;default:console.warn('THREE.ObjectLoader: Unsupported geometry type \"'+h.type+'\"');continue}g.uuid=h.uuid;void 0!==h.name&&(g.name=h.name);b[h.uuid]=g}return b},parseMaterials:function(a,b){var c={};if(void 0!==a){var d=new Ad;d.setTextures(b);for(var e=0,f=a.length;e<f;e++){var g=d.parse(a[e]);c[g.uuid]=g}}return c},parseAnimations:function(a){for(var b=\n[],c=0;c<a.length;c++){var d=ta.parse(a[c]);b.push(d)}return b},parseImages:function(a,b){function c(a){d.manager.itemStart(a);return g.load(a,function(){d.manager.itemEnd(a)},void 0,function(){d.manager.itemError(a)})}var d=this,e={};if(void 0!==a&&0<a.length){var f=new Pd(b),g=new Vc(f);g.setCrossOrigin(this.crossOrigin);for(var f=0,h=a.length;f<h;f++){var k=a[f],m=/^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test(k.url)?k.url:d.texturePath+k.url;e[k.uuid]=c(m)}}return e},parseTextures:function(a,b){function c(a,\nb){if(\"number\"===typeof a)return a;console.warn(\"THREE.ObjectLoader.parseTexture: Constant should be in numeric form.\",a);return b[a]}var d={};if(void 0!==a)for(var e=0,f=a.length;e<f;e++){var g=a[e];void 0===g.image&&console.warn('THREE.ObjectLoader: No \"image\" specified for',g.uuid);void 0===b[g.image]&&console.warn(\"THREE.ObjectLoader: Undefined image\",g.image);var h=new ea(b[g.image]);h.needsUpdate=!0;h.uuid=g.uuid;void 0!==g.name&&(h.name=g.name);void 0!==g.mapping&&(h.mapping=c(g.mapping,Ne));\nvoid 0!==g.offset&&h.offset.fromArray(g.offset);void 0!==g.repeat&&h.repeat.fromArray(g.repeat);void 0!==g.wrap&&(h.wrapS=c(g.wrap[0],le),h.wrapT=c(g.wrap[1],le));void 0!==g.minFilter&&(h.minFilter=c(g.minFilter,me));void 0!==g.magFilter&&(h.magFilter=c(g.magFilter,me));void 0!==g.anisotropy&&(h.anisotropy=g.anisotropy);void 0!==g.flipY&&(h.flipY=g.flipY);d[g.uuid]=h}return d},parseObject:function(){var a=new H;return function(b,c,d){function e(a){void 0===c[a]&&console.warn(\"THREE.ObjectLoader: Undefined geometry\",\na);return c[a]}function f(a){if(void 0!==a)return void 0===d[a]&&console.warn(\"THREE.ObjectLoader: Undefined material\",a),d[a]}var g;switch(b.type){case \"Scene\":g=new jb;void 0!==b.background&&Number.isInteger(b.background)&&(g.background=new N(b.background));void 0!==b.fog&&(\"Fog\"===b.fog.type?g.fog=new Jb(b.fog.color,b.fog.near,b.fog.far):\"FogExp2\"===b.fog.type&&(g.fog=new Ib(b.fog.color,b.fog.density)));break;case \"PerspectiveCamera\":g=new Ha(b.fov,b.aspect,b.near,b.far);void 0!==b.focus&&(g.focus=\nb.focus);void 0!==b.zoom&&(g.zoom=b.zoom);void 0!==b.filmGauge&&(g.filmGauge=b.filmGauge);void 0!==b.filmOffset&&(g.filmOffset=b.filmOffset);void 0!==b.view&&(g.view=Object.assign({},b.view));break;case \"OrthographicCamera\":g=new Hb(b.left,b.right,b.top,b.bottom,b.near,b.far);break;case \"AmbientLight\":g=new td(b.color,b.intensity);break;case \"DirectionalLight\":g=new sd(b.color,b.intensity);break;case \"PointLight\":g=new qd(b.color,b.intensity,b.distance,b.decay);break;case \"SpotLight\":g=new pd(b.color,\nb.intensity,b.distance,b.angle,b.penumbra,b.decay);break;case \"HemisphereLight\":g=new nd(b.color,b.groundColor,b.intensity);break;case \"Mesh\":g=e(b.geometry);var h=f(b.material);g=g.bones&&0<g.bones.length?new jd(g,h):new Ba(g,h);break;case \"LOD\":g=new Ac;break;case \"Line\":g=new Va(e(b.geometry),f(b.material),b.mode);break;case \"LineSegments\":g=new fa(e(b.geometry),f(b.material));break;case \"PointCloud\":case \"Points\":g=new Kb(e(b.geometry),f(b.material));break;case \"Sprite\":g=new zc(f(b.material));\nbreak;case \"Group\":g=new Bc;break;case \"SkinnedMesh\":console.warn(\"THREE.ObjectLoader.parseObject() does not support SkinnedMesh type. Instantiates Object3D instead.\");default:g=new G}g.uuid=b.uuid;void 0!==b.name&&(g.name=b.name);void 0!==b.matrix?(a.fromArray(b.matrix),a.decompose(g.position,g.quaternion,g.scale)):(void 0!==b.position&&g.position.fromArray(b.position),void 0!==b.rotation&&g.rotation.fromArray(b.rotation),void 0!==b.quaternion&&g.quaternion.fromArray(b.quaternion),void 0!==b.scale&&\ng.scale.fromArray(b.scale));void 0!==b.castShadow&&(g.castShadow=b.castShadow);void 0!==b.receiveShadow&&(g.receiveShadow=b.receiveShadow);b.shadow&&(void 0!==b.shadow.bias&&(g.shadow.bias=b.shadow.bias),void 0!==b.shadow.radius&&(g.shadow.radius=b.shadow.radius),void 0!==b.shadow.mapSize&&g.shadow.mapSize.fromArray(b.shadow.mapSize),void 0!==b.shadow.camera&&(g.shadow.camera=this.parseObject(b.shadow.camera)));void 0!==b.visible&&(g.visible=b.visible);void 0!==b.userData&&(g.userData=b.userData);\nif(void 0!==b.children)for(var k in b.children)g.add(this.parseObject(b.children[k],c,d));if(\"LOD\"===b.type)for(b=b.levels,h=0;h<b.length;h++){var m=b[h];k=g.getObjectByProperty(\"uuid\",m.object);void 0!==k&&g.addLevel(k,m.distance)}return g}}()});wa.prototype={constructor:wa,getPoint:function(a){console.warn(\"THREE.Curve: Warning, getPoint() not implemented!\");return null},getPointAt:function(a){a=this.getUtoTmapping(a);return this.getPoint(a)},getPoints:function(a){a||(a=5);for(var b=[],c=0;c<=a;c++)b.push(this.getPoint(c/\na));return b},getSpacedPoints:function(a){a||(a=5);for(var b=[],c=0;c<=a;c++)b.push(this.getPointAt(c/a));return b},getLength:function(){var a=this.getLengths();return a[a.length-1]},getLengths:function(a){a||(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200);if(this.cacheArcLengths&&this.cacheArcLengths.length===a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),\nd=c;return this.cacheArcLengths=b},updateArcLengths:function(){this.needsUpdate=!0;this.getLengths()},getUtoTmapping:function(a,b){var c=this.getLengths(),d,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e-1,k;g<=h;)if(d=Math.floor(g+(h-g)/2),k=c[d]-f,0>k)g=d+1;else if(0<k)h=d-1;else{h=d;break}d=h;if(c[d]===f)return d/(e-1);g=c[d];return(d+(f-g)/(c[d+1]-g))/(e-1)},getTangent:function(a){var b=a-1E-4;a+=1E-4;0>b&&(b=0);1<a&&(a=1);b=this.getPoint(b);return this.getPoint(a).clone().sub(b).normalize()},getTangentAt:function(a){a=\nthis.getUtoTmapping(a);return this.getTangent(a)},computeFrenetFrames:function(a,b){var c=new q,d=[],e=[],f=[],g=new q,h=new H,k,m;for(k=0;k<=a;k++)m=k/a,d[k]=this.getTangentAt(m),d[k].normalize();e[0]=new q;f[0]=new q;k=Number.MAX_VALUE;m=Math.abs(d[0].x);var l=Math.abs(d[0].y),p=Math.abs(d[0].z);m<=k&&(k=m,c.set(1,0,0));l<=k&&(k=l,c.set(0,1,0));p<=k&&c.set(0,0,1);g.crossVectors(d[0],c).normalize();e[0].crossVectors(d[0],g);f[0].crossVectors(d[0],e[0]);for(k=1;k<=a;k++)e[k]=e[k-1].clone(),f[k]=f[k-\n1].clone(),g.crossVectors(d[k-1],d[k]),g.length()>Number.EPSILON&&(g.normalize(),c=Math.acos(Q.clamp(d[k-1].dot(d[k]),-1,1)),e[k].applyMatrix4(h.makeRotationAxis(g,c))),f[k].crossVectors(d[k],e[k]);if(!0===b)for(c=Math.acos(Q.clamp(e[0].dot(e[a]),-1,1)),c/=a,0<d[0].dot(g.crossVectors(e[0],e[a]))&&(c=-c),k=1;k<=a;k++)e[k].applyMatrix4(h.makeRotationAxis(d[k],c*k)),f[k].crossVectors(d[k],e[k]);return{tangents:d,normals:e,binormals:f}}};wa.create=function(a,b){a.prototype=Object.create(wa.prototype);\na.prototype.constructor=a;a.prototype.getPoint=b;return a};Qa.prototype=Object.create(wa.prototype);Qa.prototype.constructor=Qa;Qa.prototype.isLineCurve=!0;Qa.prototype.getPoint=function(a){if(1===a)return this.v2.clone();var b=this.v2.clone().sub(this.v1);b.multiplyScalar(a).add(this.v1);return b};Qa.prototype.getPointAt=function(a){return this.getPoint(a)};Qa.prototype.getTangent=function(a){return this.v2.clone().sub(this.v1).normalize()};Yc.prototype=Object.assign(Object.create(wa.prototype),\n{constructor:Yc,add:function(a){this.curves.push(a)},closePath:function(){var a=this.curves[0].getPoint(0),b=this.curves[this.curves.length-1].getPoint(1);a.equals(b)||this.curves.push(new Qa(b,a))},getPoint:function(a){var b=a*this.getLength(),c=this.getCurveLengths();for(a=0;a<c.length;){if(c[a]>=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0===c?0:1-b/c);a++}return null},getLength:function(){var a=this.getCurveLengths();return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=\n!0;this.cacheLengths=null;this.getLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;c<d;c++)b+=this.curves[c].getLength(),a.push(b);return this.cacheLengths=a},getSpacedPoints:function(a){a||(a=40);for(var b=[],c=0;c<=a;c++)b.push(this.getPoint(c/a));this.autoClose&&b.push(b[0]);return b},getPoints:function(a){a=a||12;for(var b=[],c,d=0,e=this.curves;d<e.length;d++)for(var f=\ne[d],f=f.getPoints(f&&f.isEllipseCurve?2*a:f&&f.isLineCurve?1:f&&f.isSplineCurve?a*f.points.length:a),g=0;g<f.length;g++){var h=f[g];c&&c.equals(h)||(b.push(h),c=h)}this.autoClose&&1<b.length&&!b[b.length-1].equals(b[0])&&b.push(b[0]);return b},createPointsGeometry:function(a){a=this.getPoints(a);return this.createGeometry(a)},createSpacedPointsGeometry:function(a){a=this.getSpacedPoints(a);return this.createGeometry(a)},createGeometry:function(a){for(var b=new S,c=0,d=a.length;c<d;c++){var e=a[c];\nb.vertices.push(new q(e.x,e.y,e.z||0))}return b}});Xa.prototype=Object.create(wa.prototype);Xa.prototype.constructor=Xa;Xa.prototype.isEllipseCurve=!0;Xa.prototype.getPoint=function(a){for(var b=2*Math.PI,c=this.aEndAngle-this.aStartAngle,d=Math.abs(c)<Number.EPSILON;0>c;)c+=b;for(;c>b;)c-=b;c<Number.EPSILON&&(c=d?0:b);!0!==this.aClockwise||d||(c=c===b?-b:c-b);b=this.aStartAngle+a*c;a=this.aX+this.xRadius*Math.cos(b);var e=this.aY+this.yRadius*Math.sin(b);0!==this.aRotation&&(b=Math.cos(this.aRotation),\nc=Math.sin(this.aRotation),d=a-this.aX,e-=this.aY,a=d*b-e*c+this.aX,e=d*c+e*b+this.aY);return new C(a,e)};var ed={tangentQuadraticBezier:function(a,b,c,d){return 2*(1-a)*(c-b)+2*a*(d-c)},tangentCubicBezier:function(a,b,c,d,e){return-3*b*(1-a)*(1-a)+3*c*(1-a)*(1-a)-6*a*c*(1-a)+6*a*d*(1-a)-3*a*a*d+3*a*a*e},tangentSpline:function(a,b,c,d,e){return 6*a*a-6*a+(3*a*a-4*a+1)+(-6*a*a+6*a)+(3*a*a-2*a)},interpolate:function(a,b,c,d,e){a=.5*(c-a);d=.5*(d-b);var f=e*e;return(2*b-2*c+a+d)*e*f+(-3*b+3*c-2*a-d)*\nf+a*e+b}};xb.prototype=Object.create(wa.prototype);xb.prototype.constructor=xb;xb.prototype.isSplineCurve=!0;xb.prototype.getPoint=function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0===c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=ed.interpolate;return new C(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a))};yb.prototype=Object.create(wa.prototype);yb.prototype.constructor=yb;yb.prototype.getPoint=function(a){var b=pa.b3;return new C(b(a,this.v0.x,\nthis.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y))};yb.prototype.getTangent=function(a){var b=ed.tangentCubicBezier;return(new C(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y))).normalize()};zb.prototype=Object.create(wa.prototype);zb.prototype.constructor=zb;zb.prototype.getPoint=function(a){var b=pa.b2;return new C(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y))};zb.prototype.getTangent=function(a){var b=\ned.tangentQuadraticBezier;return(new C(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y))).normalize()};var oe=Object.assign(Object.create(Yc.prototype),{fromPoints:function(a){this.moveTo(a[0].x,a[0].y);for(var b=1,c=a.length;b<c;b++)this.lineTo(a[b].x,a[b].y)},moveTo:function(a,b){this.currentPoint.set(a,b)},lineTo:function(a,b){var c=new Qa(this.currentPoint.clone(),new C(a,b));this.curves.push(c);this.currentPoint.set(a,b)},quadraticCurveTo:function(a,b,c,d){a=new zb(this.currentPoint.clone(),\nnew C(a,b),new C(c,d));this.curves.push(a);this.currentPoint.set(c,d)},bezierCurveTo:function(a,b,c,d,e,f){a=new yb(this.currentPoint.clone(),new C(a,b),new C(c,d),new C(e,f));this.curves.push(a);this.currentPoint.set(e,f)},splineThru:function(a){var b=[this.currentPoint.clone()].concat(a),b=new xb(b);this.curves.push(b);this.currentPoint.copy(a[a.length-1])},arc:function(a,b,c,d,e,f){this.absarc(a+this.currentPoint.x,b+this.currentPoint.y,c,d,e,f)},absarc:function(a,b,c,d,e,f){this.absellipse(a,\nb,c,c,d,e,f)},ellipse:function(a,b,c,d,e,f,g,h){this.absellipse(a+this.currentPoint.x,b+this.currentPoint.y,c,d,e,f,g,h)},absellipse:function(a,b,c,d,e,f,g,h){a=new Xa(a,b,c,d,e,f,g,h);0<this.curves.length&&(b=a.getPoint(0),b.equals(this.currentPoint)||this.lineTo(b.x,b.y));this.curves.push(a);a=a.getPoint(1);this.currentPoint.copy(a)}});Ab.prototype=Object.assign(Object.create(oe),{constructor:Ab,getPointsHoles:function(a){for(var b=[],c=0,d=this.holes.length;c<d;c++)b[c]=this.holes[c].getPoints(a);\nreturn b},extractAllPoints:function(a){return{shape:this.getPoints(a),holes:this.getPointsHoles(a)}},extractPoints:function(a){return this.extractAllPoints(a)}});Zc.prototype=oe;oe.constructor=Zc;Ud.prototype={moveTo:function(a,b){this.currentPath=new Zc;this.subPaths.push(this.currentPath);this.currentPath.moveTo(a,b)},lineTo:function(a,b){this.currentPath.lineTo(a,b)},quadraticCurveTo:function(a,b,c,d){this.currentPath.quadraticCurveTo(a,b,c,d)},bezierCurveTo:function(a,b,c,d,e,f){this.currentPath.bezierCurveTo(a,\nb,c,d,e,f)},splineThru:function(a){this.currentPath.splineThru(a)},toShapes:function(a,b){function c(a){for(var b=[],c=0,d=a.length;c<d;c++){var e=a[c],f=new Ab;f.curves=e.curves;b.push(f)}return b}function d(a,b){for(var c=b.length,d=!1,e=c-1,f=0;f<c;e=f++){var g=b[e],h=b[f],k=h.x-g.x,m=h.y-g.y;if(Math.abs(m)>Number.EPSILON){if(0>m&&(g=b[f],k=-k,h=b[e],m=-m),!(a.y<g.y||a.y>h.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=m*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=\na.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=pa.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);var g,h,k,m=[];if(1===f.length)return h=f[0],k=new Ab,k.curves=h.curves,m.push(k),m;var l=!e(f[0].getPoints()),l=a?!l:l;k=[];var p=[],n=[],q=0,w;p[q]=void 0;n[q]=[];for(var u=0,y=f.length;u<y;u++)h=f[u],w=h.getPoints(),g=e(w),(g=a?!g:g)?(!l&&p[q]&&q++,p[q]={s:new Ab,p:w},p[q].s.curves=h.curves,l&&q++,n[q]=[]):n[q].push({h:h,p:w[0]});if(!p[0])return c(f);if(1<p.length){u=\n!1;h=[];e=0;for(f=p.length;e<f;e++)k[e]=[];e=0;for(f=p.length;e<f;e++)for(g=n[e],l=0;l<g.length;l++){q=g[l];w=!0;for(y=0;y<p.length;y++)d(q.p,p[y].p)&&(e!==y&&h.push({froms:e,tos:y,hole:l}),w?(w=!1,k[y].push(q)):u=!0);w&&k[e].push(q)}0<h.length&&(u||(n=k))}u=0;for(e=p.length;u<e;u++)for(k=p[u].s,m.push(k),h=n[u],f=0,g=h.length;f<g;f++)k.holes.push(h[f].h);return m}};Object.assign(Vd.prototype,{isFont:!0,generateShapes:function(a,b,c){void 0===b&&(b=100);void 0===c&&(c=4);var d=this.data;a=String(a).split(\"\");\nvar e=b/d.resolution,f=0;b=[];for(var g=0;g<a.length;g++){var h;h=e;var k=f,m=d.glyphs[a[g]]||d.glyphs[\"?\"];if(m){var l=new Ud,p=[],n=pa.b2,q=pa.b3,w,u,y,t,v,D,z,A;if(m.o)for(var C=m._cachedOutline||(m._cachedOutline=m.o.split(\" \")),E=0,G=C.length;E<G;)switch(C[E++]){case \"m\":w=C[E++]*h+k;u=C[E++]*h;l.moveTo(w,u);break;case \"l\":w=C[E++]*h+k;u=C[E++]*h;l.lineTo(w,u);break;case \"q\":w=C[E++]*h+k;u=C[E++]*h;v=C[E++]*h+k;D=C[E++]*h;l.quadraticCurveTo(v,D,w,u);if(t=p[p.length-1]){y=t.x;t=t.y;for(var H=\n1;H<=c;H++){var J=H/c;n(J,y,v,w);n(J,t,D,u)}}break;case \"b\":if(w=C[E++]*h+k,u=C[E++]*h,v=C[E++]*h+k,D=C[E++]*h,z=C[E++]*h+k,A=C[E++]*h,l.bezierCurveTo(v,D,z,A,w,u),t=p[p.length-1])for(y=t.x,t=t.y,H=1;H<=c;H++)J=H/c,q(J,y,v,z,w),q(J,t,D,A,u)}h={offset:m.ha*h,path:l}}else h=void 0;f+=h.offset;b.push(h.path)}c=[];d=0;for(a=b.length;d<a;d++)Array.prototype.push.apply(c,b[d].toShapes());return c}});Object.assign(Ge.prototype,{load:function(a,b,c,d){var e=this;(new Ma(this.manager)).load(a,function(a){var c;\ntry{c=JSON.parse(a)}catch(d){console.warn(\"THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.\"),c=JSON.parse(a.substring(65,a.length-2))}a=e.parse(c);b&&b(a)},c,d)},parse:function(a){return new Vd(a)}});var Hd,Zd={getContext:function(){void 0===Hd&&(Hd=new (window.AudioContext||window.webkitAudioContext));return Hd},setContext:function(a){Hd=a}};Object.assign(Wd.prototype,{load:function(a,b,c,d){var e=new Ma(this.manager);e.setResponseType(\"arraybuffer\");e.load(a,\nfunction(a){Zd.getContext().decodeAudioData(a,function(a){b(a)})},c,d)}});Xd.prototype=Object.assign(Object.create(na.prototype),{constructor:Xd,isRectAreaLight:!0,copy:function(a){na.prototype.copy.call(this,a);this.width=a.width;this.height=a.height;return this}});Object.assign(He.prototype,{update:function(){var a,b,c,d,e,f,g,h=new H,k=new H;return function(m){if(a!==this||b!==m.focus||c!==m.fov||d!==m.aspect*this.aspect||e!==m.near||f!==m.far||g!==m.zoom){a=this;b=m.focus;c=m.fov;d=m.aspect*this.aspect;\ne=m.near;f=m.far;g=m.zoom;var l=m.projectionMatrix.clone(),p=this.eyeSep/2,n=p*e/b,q=e*Math.tan(Q.DEG2RAD*c*.5)/g,w;k.elements[12]=-p;h.elements[12]=p;p=-q*d+n;w=q*d+n;l.elements[0]=2*e/(w-p);l.elements[8]=(w+p)/(w-p);this.cameraL.projectionMatrix.copy(l);p=-q*d-n;w=q*d-n;l.elements[0]=2*e/(w-p);l.elements[8]=(w+p)/(w-p);this.cameraR.projectionMatrix.copy(l)}this.cameraL.matrixWorld.copy(m.matrixWorld).multiply(k);this.cameraR.matrixWorld.copy(m.matrixWorld).multiply(h)}}()});Bd.prototype=Object.create(G.prototype);\nBd.prototype.constructor=Bd;Yd.prototype=Object.assign(Object.create(G.prototype),{constructor:Yd,getInput:function(){return this.gain},removeFilter:function(){null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null)},getFilter:function(){return this.filter},setFilter:function(a){null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination);\nthis.filter=a;this.gain.connect(this.filter);this.filter.connect(this.context.destination)},getMasterVolume:function(){return this.gain.gain.value},setMasterVolume:function(a){this.gain.gain.value=a},updateMatrixWorld:function(){var a=new q,b=new da,c=new q,d=new q;return function(e){G.prototype.updateMatrixWorld.call(this,e);e=this.context.listener;var f=this.up;this.matrixWorld.decompose(a,b,c);d.set(0,0,-1).applyQuaternion(b);e.positionX?(e.positionX.setValueAtTime(a.x,this.context.currentTime),\ne.positionY.setValueAtTime(a.y,this.context.currentTime),e.positionZ.setValueAtTime(a.z,this.context.currentTime),e.forwardX.setValueAtTime(d.x,this.context.currentTime),e.forwardY.setValueAtTime(d.y,this.context.currentTime),e.forwardZ.setValueAtTime(d.z,this.context.currentTime),e.upX.setValueAtTime(f.x,this.context.currentTime),e.upY.setValueAtTime(f.y,this.context.currentTime),e.upZ.setValueAtTime(f.z,this.context.currentTime)):(e.setPosition(a.x,a.y,a.z),e.setOrientation(d.x,d.y,d.z,f.x,f.y,\nf.z))}}()});ec.prototype=Object.assign(Object.create(G.prototype),{constructor:ec,getOutput:function(){return this.gain},setNodeSource:function(a){this.hasPlaybackControl=!1;this.sourceType=\"audioNode\";this.source=a;this.connect();return this},setBuffer:function(a){this.buffer=a;this.sourceType=\"buffer\";this.autoplay&&this.play();return this},play:function(){if(!0===this.isPlaying)console.warn(\"THREE.Audio: Audio is already playing.\");else if(!1===this.hasPlaybackControl)console.warn(\"THREE.Audio: this Audio has no playback control.\");\nelse{var a=this.context.createBufferSource();a.buffer=this.buffer;a.loop=this.loop;a.onended=this.onEnded.bind(this);a.playbackRate.setValueAtTime(this.playbackRate,this.startTime);a.start(0,this.startTime);this.isPlaying=!0;this.source=a;return this.connect()}},pause:function(){if(!1===this.hasPlaybackControl)console.warn(\"THREE.Audio: this Audio has no playback control.\");else return this.source.stop(),this.startTime=this.context.currentTime,this.isPlaying=!1,this},stop:function(){if(!1===this.hasPlaybackControl)console.warn(\"THREE.Audio: this Audio has no playback control.\");\nelse return this.source.stop(),this.startTime=0,this.isPlaying=!1,this},connect:function(){if(0<this.filters.length){this.source.connect(this.filters[0]);for(var a=1,b=this.filters.length;a<b;a++)this.filters[a-1].connect(this.filters[a]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this},disconnect:function(){if(0<this.filters.length){this.source.disconnect(this.filters[0]);for(var a=1,b=this.filters.length;a<b;a++)this.filters[a-\n1].disconnect(this.filters[a]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this},getFilters:function(){return this.filters},setFilters:function(a){a||(a=[]);!0===this.isPlaying?(this.disconnect(),this.filters=a,this.connect()):this.filters=a;return this},getFilter:function(){return this.getFilters()[0]},setFilter:function(a){return this.setFilters(a?[a]:[])},setPlaybackRate:function(a){if(!1===this.hasPlaybackControl)console.warn(\"THREE.Audio: this Audio has no playback control.\");\nelse return this.playbackRate=a,!0===this.isPlaying&&this.source.playbackRate.setValueAtTime(this.playbackRate,this.context.currentTime),this},getPlaybackRate:function(){return this.playbackRate},onEnded:function(){this.isPlaying=!1},getLoop:function(){return!1===this.hasPlaybackControl?(console.warn(\"THREE.Audio: this Audio has no playback control.\"),!1):this.loop},setLoop:function(a){if(!1===this.hasPlaybackControl)console.warn(\"THREE.Audio: this Audio has no playback control.\");else return this.loop=\na,!0===this.isPlaying&&(this.source.loop=this.loop),this},getVolume:function(){return this.gain.gain.value},setVolume:function(a){this.gain.gain.value=a;return this}});$d.prototype=Object.assign(Object.create(ec.prototype),{constructor:$d,getOutput:function(){return this.panner},getRefDistance:function(){return this.panner.refDistance},setRefDistance:function(a){this.panner.refDistance=a},getRolloffFactor:function(){return this.panner.rolloffFactor},setRolloffFactor:function(a){this.panner.rolloffFactor=\na},getDistanceModel:function(){return this.panner.distanceModel},setDistanceModel:function(a){this.panner.distanceModel=a},getMaxDistance:function(){return this.panner.maxDistance},setMaxDistance:function(a){this.panner.maxDistance=a},updateMatrixWorld:function(){var a=new q;return function(b){G.prototype.updateMatrixWorld.call(this,b);a.setFromMatrixPosition(this.matrixWorld);this.panner.setPosition(a.x,a.y,a.z)}}()});Object.assign(ae.prototype,{getFrequencyData:function(){this.analyser.getByteFrequencyData(this.data);\nreturn this.data},getAverageFrequency:function(){for(var a=0,b=this.getFrequencyData(),c=0;c<b.length;c++)a+=b[c];return a/b.length}});Cd.prototype={constructor:Cd,accumulate:function(a,b){var c=this.buffer,d=this.valueSize,e=a*d+d,f=this.cumulativeWeight;if(0===f){for(f=0;f!==d;++f)c[e+f]=c[f];f=b}else f+=b,this._mixBufferRegion(c,e,0,b/f,d);this.cumulativeWeight=f},apply:function(a){var b=this.valueSize,c=this.buffer;a=a*b+b;var d=this.cumulativeWeight,e=this.binding;this.cumulativeWeight=0;1>d&&\nthis._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d,e){da.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=\n1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}};ka.prototype={constructor:ka,getValue:function(a,b){this.bind();this.getValue(a,b)},setValue:function(a,b){this.bind();this.setValue(a,b)},bind:function(){var a=this.node,b=this.parsedPath,c=b.objectName,d=b.propertyName,e=b.propertyIndex;a||(this.node=a=ka.findNode(this.rootNode,b.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(a){if(c){var f=b.objectIndex;switch(c){case \"materials\":if(!a.material){console.error(\"  can not bind to material as node does not have a material\",\nthis);return}if(!a.material.materials){console.error(\"  can not bind to material.materials as node.material does not have a materials array\",this);return}a=a.material.materials;break;case \"bones\":if(!a.skeleton){console.error(\"  can not bind to bones as node does not have a skeleton\",this);return}a=a.skeleton.bones;for(c=0;c<a.length;c++)if(a[c].name===f){f=c;break}break;default:if(void 0===a[c]){console.error(\"  can not bind to objectName of node, undefined\",this);return}a=a[c]}if(void 0!==f){if(void 0===\na[f]){console.error(\"  trying to bind to objectIndex of objectName, but is undefined:\",this,a);return}a=a[f]}}f=a[d];if(void 0===f)console.error(\"  trying to update property for track: \"+b.nodeName+\".\"+d+\" but it wasn't found.\",a);else{b=this.Versioning.None;void 0!==a.needsUpdate?(b=this.Versioning.NeedsUpdate,this.targetObject=a):void 0!==a.matrixWorldNeedsUpdate&&(b=this.Versioning.MatrixWorldNeedsUpdate,this.targetObject=a);c=this.BindingType.Direct;if(void 0!==e){if(\"morphTargetInfluences\"===\nd){if(!a.geometry){console.error(\"  can not bind to morphTargetInfluences becasuse node does not have a geometry\",this);return}if(!a.geometry.morphTargets){console.error(\"  can not bind to morphTargetInfluences becasuse node does not have a geometry.morphTargets\",this);return}for(c=0;c<this.node.geometry.morphTargets.length;c++)if(a.geometry.morphTargets[c].name===e){e=c;break}}c=this.BindingType.ArrayElement;this.resolvedProperty=f;this.propertyIndex=e}else void 0!==f.fromArray&&void 0!==f.toArray?\n(c=this.BindingType.HasFromToArray,this.resolvedProperty=f):void 0!==f.length?(c=this.BindingType.EntireArray,this.resolvedProperty=f):this.propertyName=d;this.getValue=this.GetterByBindingType[c];this.setValue=this.SetterByBindingTypeAndVersioning[c][b]}}else console.error(\"  trying to update node for track: \"+this.path+\" but it wasn't found.\")},unbind:function(){this.node=null;this.getValue=this._getValue_unbound;this.setValue=this._setValue_unbound}};Object.assign(ka.prototype,{_getValue_unavailable:function(){},\n_setValue_unavailable:function(){},_getValue_unbound:ka.prototype.getValue,_setValue_unbound:ka.prototype.setValue,BindingType:{Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Versioning:{None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},GetterByBindingType:[function(a,b){a[b]=this.node[this.propertyName]},function(a,b){for(var c=this.resolvedProperty,d=0,e=c.length;d!==e;++d)a[b++]=c[d]},function(a,b){a[b]=this.resolvedProperty[this.propertyIndex]},function(a,b){this.resolvedProperty.toArray(a,\nb)}],SetterByBindingTypeAndVersioning:[[function(a,b){this.node[this.propertyName]=a[b]},function(a,b){this.node[this.propertyName]=a[b];this.targetObject.needsUpdate=!0},function(a,b){this.node[this.propertyName]=a[b];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(a,b){for(var c=this.resolvedProperty,d=0,e=c.length;d!==e;++d)c[d]=a[b++]},function(a,b){for(var c=this.resolvedProperty,d=0,e=c.length;d!==e;++d)c[d]=a[b++];this.targetObject.needsUpdate=!0},function(a,b){for(var c=this.resolvedProperty,\nd=0,e=c.length;d!==e;++d)c[d]=a[b++];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(a,b){this.resolvedProperty[this.propertyIndex]=a[b]},function(a,b){this.resolvedProperty[this.propertyIndex]=a[b];this.targetObject.needsUpdate=!0},function(a,b){this.resolvedProperty[this.propertyIndex]=a[b];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(a,b){this.resolvedProperty.fromArray(a,b)},function(a,b){this.resolvedProperty.fromArray(a,b);this.targetObject.needsUpdate=!0},function(a,b){this.resolvedProperty.fromArray(a,\nb);this.targetObject.matrixWorldNeedsUpdate=!0}]]});ka.Composite=function(a,b,c){c=c||ka.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)};ka.Composite.prototype={constructor:ka.Composite,getValue:function(a,b){this.bind();var c=this._bindings[this._targetGroup.nCachedObjects_];void 0!==c&&c.getValue(a,b)},setValue:function(a,b){for(var c=this._bindings,d=this._targetGroup.nCachedObjects_,e=c.length;d!==e;++d)c[d].setValue(a,b)},bind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,\nc=a.length;b!==c;++b)a[b].bind()},unbind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].unbind()}};ka.create=function(a,b,c){return a&&a.isAnimationObjectGroup?new ka.Composite(a,b,c):new ka(a,b,c)};ka.parseTrackName=function(a){var b=/^((?:[\\w-]+[\\/:])*)([\\w-]+)?(?:\\.([\\w-]+)(?:\\[(.+)\\])?)?\\.([\\w-]+)(?:\\[(.+)\\])?$/.exec(a);if(!b)throw Error(\"cannot parse trackName at all: \"+a);b={nodeName:b[2],objectName:b[3],objectIndex:b[4],propertyName:b[5],propertyIndex:b[6]};\nif(null===b.propertyName||0===b.propertyName.length)throw Error(\"can not parse propertyName from trackName: \"+a);return b};ka.findNode=function(a,b){if(!b||\"\"===b||\"root\"===b||\".\"===b||-1===b||b===a.name||b===a.uuid)return a;if(a.skeleton){var c=function(a){for(var c=0;c<a.bones.length;c++){var d=a.bones[c];if(d.name===b)return d}return null}(a.skeleton);if(c)return c}if(a.children){var d=function(a){for(var c=0;c<a.length;c++){var g=a[c];if(g.name===b||g.uuid===b||(g=d(g.children)))return g}return null};\nif(c=d(a.children))return c}return null};be.prototype={constructor:be,isAnimationObjectGroup:!0,add:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._paths,g=this._parsedPaths,h=this._bindings,k=h.length,l=0,q=arguments.length;l!==q;++l){var p=arguments[l],n=p.uuid,r=e[n];if(void 0===r){r=c++;e[n]=r;b.push(p);for(var n=0,w=k;n!==w;++n)h[n].push(new ka(p,f[n],g[n]))}else if(r<d){var u=--d,w=b[u];e[w.uuid]=r;b[r]=w;e[n]=u;b[u]=p;n=0;for(w=k;n!==w;++n){var y=\nh[n],t=y[r];y[r]=y[u];void 0===t&&(t=new ka(p,f[n],g[n]));y[u]=t}}else void 0!==b[r]&&console.error(\"Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes...\")}this.nCachedObjects_=d},remove:function(a){for(var b=this._objects,c=this.nCachedObjects_,d=this._indicesByUUID,e=this._bindings,f=e.length,g=0,h=arguments.length;g!==h;++g){var k=arguments[g],l=k.uuid,q=d[l];if(void 0!==q&&q>=c){var p=c++,n=b[p];d[n.uuid]=q;b[q]=n;d[l]=p;b[p]=\nk;k=0;for(l=f;k!==l;++k){var n=e[k],r=n[q];n[q]=n[p];n[p]=r}}}this.nCachedObjects_=c},uncache:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._bindings,g=f.length,h=0,k=arguments.length;h!==k;++h){var l=arguments[h].uuid,q=e[l];if(void 0!==q)if(delete e[l],q<d){var l=--d,p=b[l],n=--c,r=b[n];e[p.uuid]=q;b[q]=p;e[r.uuid]=l;b[l]=r;b.pop();p=0;for(r=g;p!==r;++p){var w=f[p],u=w[n];w[q]=w[l];w[l]=u;w.pop()}}else for(n=--c,r=b[n],e[r.uuid]=q,b[q]=r,b.pop(),\np=0,r=g;p!==r;++p)w=f[p],w[q]=w[n],w.pop()}this.nCachedObjects_=d},subscribe_:function(a,b){var c=this._bindingsIndicesByPath,d=c[a],e=this._bindings;if(void 0!==d)return e[d];var f=this._paths,g=this._parsedPaths,h=this._objects,k=this.nCachedObjects_,l=Array(h.length),d=e.length;c[a]=d;f.push(a);g.push(b);e.push(l);c=k;for(d=h.length;c!==d;++c)l[c]=new ka(h[c],a,b);return l},unsubscribe_:function(a){var b=this._bindingsIndicesByPath,c=b[a];if(void 0!==c){var d=this._paths,e=this._parsedPaths,f=\nthis._bindings,g=f.length-1,h=f[g];b[a[g]]=c;f[c]=h;f.pop();e[c]=e[g];e.pop();d[c]=d[g];d.pop()}}};ce.prototype={constructor:ce,play:function(){this._mixer._activateAction(this);return this},stop:function(){this._mixer._deactivateAction(this);return this.reset()},reset:function(){this.paused=!1;this.enabled=!0;this.time=0;this._loopCount=-1;this._startTime=null;return this.stopFading().stopWarping()},isRunning:function(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&\nthis._mixer._isActiveAction(this)},isScheduled:function(){return this._mixer._isActiveAction(this)},startAt:function(a){this._startTime=a;return this},setLoop:function(a,b){this.loop=a;this.repetitions=b;return this},setEffectiveWeight:function(a){this.weight=a;this._effectiveWeight=this.enabled?a:0;return this.stopFading()},getEffectiveWeight:function(){return this._effectiveWeight},fadeIn:function(a){return this._scheduleFading(a,0,1)},fadeOut:function(a){return this._scheduleFading(a,1,0)},crossFadeFrom:function(a,\nb,c){a.fadeOut(b);this.fadeIn(b);if(c){c=this._clip.duration;var d=a._clip.duration,e=c/d;a.warp(1,d/c,b);this.warp(e,1,b)}return this},crossFadeTo:function(a,b,c){return a.crossFadeFrom(this,b,c)},stopFading:function(){var a=this._weightInterpolant;null!==a&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(a));return this},setEffectiveTimeScale:function(a){this.timeScale=a;this._effectiveTimeScale=this.paused?0:a;return this.stopWarping()},getEffectiveTimeScale:function(){return this._effectiveTimeScale},\nsetDuration:function(a){this.timeScale=this._clip.duration/a;return this.stopWarping()},syncWith:function(a){this.time=a.time;this.timeScale=a.timeScale;return this.stopWarping()},halt:function(a){return this.warp(this._effectiveTimeScale,0,a)},warp:function(a,b,c){var d=this._mixer,e=d.time,f=this._timeScaleInterpolant,g=this.timeScale;null===f&&(this._timeScaleInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;d[1]=e+c;f[0]=a/g;f[1]=b/g;return this},stopWarping:function(){var a=\nthis._timeScaleInterpolant;null!==a&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(a));return this},getMixer:function(){return this._mixer},getClip:function(){return this._clip},getRoot:function(){return this._localRoot||this._mixer._root},_update:function(a,b,c,d){var e=this._startTime;if(null!==e){b=(a-e)*c;if(0>b||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0<a){b=this._interpolants;for(var e=this._propertyBindings,\nf=0,g=b.length;f!==g;++f)b[f].evaluate(c),e[f].accumulate(d,a)}},_updateWeight:function(a){var b=0;if(this.enabled){var b=this.weight,c=this._weightInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===\nb?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount;if(2200===d)a:{if(-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1)),b>=c)b=c;else if(0>b)b=0;else break a;this.clampWhenFinished?this.paused=!0:this.enabled=!1;this._mixer.dispatchEvent({type:\"finished\",action:this,direction:0>a?-1:1})}else{d=2202===d;-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,\nd)):this._setEndings(0===this.repetitions,!0,d));if(b>=c||0>b){var f=Math.floor(b/c),b=b-c*f,e=e+Math.abs(f),g=this.repetitions-e;0>g?(this.clampWhenFinished?this.paused=!0:this.enabled=!1,b=0<a?c:0,this._mixer.dispatchEvent({type:\"finished\",action:this,direction:0<a?1:-1})):(0===g?(a=0>a,this._setEndings(a,!a,d)):this._setEndings(!1,!1,d),this._loopCount=e,this._mixer.dispatchEvent({type:\"loop\",action:this,loopDelta:f}))}if(d&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,\nb,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd?2401:2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}};Object.assign(de.prototype,oa.prototype,{clipAction:function(a,b){var c=b||this._root,\nd=c.uuid,e=\"string\"===typeof a?ta.findByName(c,a):a,c=null!==e?e.uuid:a,f=this._actionsByClip[c],g=null;if(void 0!==f){g=f.actionByRoot[d];if(void 0!==g)return g;g=f.knownActions[0];null===e&&(e=g._clip)}if(null===e)return null;e=new ce(this,e,b);this._bindAction(e,g);this._addInactiveAction(e,c,d);return e},existingAction:function(a,b){var c=b||this._root,d=c.uuid,c=\"string\"===typeof a?ta.findByName(c,a):a,c=this._actionsByClip[c?c.uuid:a];return void 0!==c?c.actionByRoot[d]||null:null},stopAllAction:function(){for(var a=\nthis._actions,b=this._nActiveActions,c=this._bindings,d=this._nActiveBindings,e=this._nActiveBindings=this._nActiveActions=0;e!==b;++e)a[e].reset();for(e=0;e!==d;++e)c[e].useCount=0;return this},update:function(a){a*=this.timeScale;for(var b=this._actions,c=this._nActiveActions,d=this.time+=a,e=Math.sign(a),f=this._accuIndex^=1,g=0;g!==c;++g){var h=b[g];h.enabled&&h._update(d,a,e,f)}a=this._bindings;b=this._nActiveBindings;for(g=0;g!==b;++g)a[g].apply(f);return this},getRoot:function(){return this._root},\nuncacheClip:function(a){var b=this._actions;a=a.uuid;var c=this._actionsByClip,d=c[a];if(void 0!==d){for(var d=d.knownActions,e=0,f=d.length;e!==f;++e){var g=d[e];this._deactivateAction(g);var h=g._cacheIndex,k=b[b.length-1];g._cacheIndex=null;g._byClipCacheIndex=null;k._cacheIndex=h;b[h]=k;b.pop();this._removeInactiveBindingsForAction(g)}delete c[a]}},uncacheRoot:function(a){a=a.uuid;var b=this._actionsByClip,c;for(c in b){var d=b[c].actionByRoot[a];void 0!==d&&(this._deactivateAction(d),this._removeInactiveAction(d))}c=\nthis._bindingsByRootAndName[a];if(void 0!==c)for(var e in c)a=c[e],a.restoreOriginalState(),this._removeInactiveBinding(a)},uncacheAction:function(a,b){var c=this.existingAction(a,b);null!==c&&(this._deactivateAction(c),this._removeInactiveAction(c))}});Object.assign(de.prototype,{_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings,g=a._interpolants,h=c.uuid,k=this._bindingsByRootAndName,l=k[h];void 0===l&&(l={},k[h]=l);for(k=0;k!==e;++k){var q=\nd[k],p=q.name,n=l[p];if(void 0===n){n=f[k];if(void 0!==n){null===n._cacheIndex&&(++n.referenceCount,this._addInactiveBinding(n,h,p));continue}n=new Cd(ka.create(c,p,b&&b._propertyBindings[k].binding.parsedPath),q.ValueTypeName,q.getValueSize());++n.referenceCount;this._addInactiveBinding(n,h,p)}f[k]=n;g[k].resultBuffer=n.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.uuid,d=this._actionsByClip[c];this._bindAction(a,\nd&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip=\n{};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;\nreturn null!==a&&a<this._nActiveActions},_addInactiveAction:function(a,b,c){var d=this._actions,e=this._actionsByClip,f=e[b];void 0===f?(f={knownActions:[a],actionByRoot:{}},a._byClipCacheIndex=0,e[b]=f):(b=f.knownActions,a._byClipCacheIndex=b.length,b.push(a));a._cacheIndex=d.length;d.push(a);f.actionByRoot[c]=a},_removeInactiveAction:function(a){var b=this._actions,c=b[b.length-1],d=a._cacheIndex;c._cacheIndex=d;b[d]=c;b.pop();a._cacheIndex=null;var c=a._clip.uuid,d=this._actionsByClip,e=d[c],f=\ne.knownActions,g=f[f.length-1],h=a._byClipCacheIndex;g._byClipCacheIndex=h;f[h]=g;f.pop();a._byClipCacheIndex=null;delete e.actionByRoot[(b._localRoot||this._root).uuid];0===f.length&&delete d[c];this._removeInactiveBindingsForAction(a)},_removeInactiveBindingsForAction:function(a){a=a._propertyBindings;for(var b=0,c=a.length;b!==c;++b){var d=a[b];0===--d.referenceCount&&this._removeInactiveBinding(d)}},_lendAction:function(a){var b=this._actions,c=a._cacheIndex,d=this._nActiveActions++,e=b[d];a._cacheIndex=\nd;b[d]=a;e._cacheIndex=c;b[c]=e},_takeBackAction:function(a){var b=this._actions,c=a._cacheIndex,d=--this._nActiveActions,e=b[d];a._cacheIndex=d;b[d]=a;e._cacheIndex=c;b[c]=e},_addInactiveBinding:function(a,b,c){var d=this._bindingsByRootAndName,e=d[b],f=this._bindings;void 0===e&&(e={},d[b]=e);e[c]=a;a._cacheIndex=f.length;f.push(a)},_removeInactiveBinding:function(a){var b=this._bindings,c=a.binding,d=c.rootNode.uuid,c=c.path,e=this._bindingsByRootAndName,f=e[d],g=b[b.length-1];a=a._cacheIndex;\ng._cacheIndex=a;b[a]=g;b.pop();delete f[c];a:{for(var h in f)break a;delete e[d]}},_lendBinding:function(a){var b=this._bindings,c=a._cacheIndex,d=this._nActiveBindings++,e=b[d];a._cacheIndex=d;b[d]=a;e._cacheIndex=c;b[c]=e},_takeBackBinding:function(a){var b=this._bindings,c=a._cacheIndex,d=--this._nActiveBindings,e=b[d];a._cacheIndex=d;b[d]=a;e._cacheIndex=c;b[c]=e},_lendControlInterpolant:function(){var a=this._controlInterpolants,b=this._nActiveControlInterpolants++,c=a[b];void 0===c&&(c=new Wc(new Float32Array(2),\nnew Float32Array(2),1,this._controlInterpolantsResultBuffer),c.__cacheIndex=b,a[b]=c);return c},_takeBackControlInterpolant:function(a){var b=this._controlInterpolants,c=a.__cacheIndex,d=--this._nActiveControlInterpolants,e=b[d];a.__cacheIndex=d;b[d]=a;e.__cacheIndex=c;b[c]=e},_controlInterpolantsResultBuffer:new Float32Array(1)});Dd.prototype.clone=function(){return new Dd(void 0===this.value.clone?this.value:this.value.clone())};Bb.prototype=Object.create(D.prototype);Bb.prototype.constructor=Bb;\nBb.prototype.isInstancedBufferGeometry=!0;Bb.prototype.addGroup=function(a,b,c){this.groups.push({start:a,count:b,materialIndex:c})};Bb.prototype.copy=function(a){var b=a.index;null!==b&&this.setIndex(b.clone());var b=a.attributes,c;for(c in b)this.addAttribute(c,b[c].clone());a=a.groups;c=0;for(b=a.length;c<b;c++){var d=a[c];this.addGroup(d.start,d.count,d.materialIndex)}return this};ee.prototype={constructor:ee,isInterleavedBufferAttribute:!0,get count(){return this.data.count},get array(){return this.data.array},\nsetX:function(a,b){this.data.array[a*this.data.stride+this.offset]=b;return this},setY:function(a,b){this.data.array[a*this.data.stride+this.offset+1]=b;return this},setZ:function(a,b){this.data.array[a*this.data.stride+this.offset+2]=b;return this},setW:function(a,b){this.data.array[a*this.data.stride+this.offset+3]=b;return this},getX:function(a){return this.data.array[a*this.data.stride+this.offset]},getY:function(a){return this.data.array[a*this.data.stride+this.offset+1]},getZ:function(a){return this.data.array[a*\nthis.data.stride+this.offset+2]},getW:function(a){return this.data.array[a*this.data.stride+this.offset+3]},setXY:function(a,b,c){a=a*this.data.stride+this.offset;this.data.array[a+0]=b;this.data.array[a+1]=c;return this},setXYZ:function(a,b,c,d){a=a*this.data.stride+this.offset;this.data.array[a+0]=b;this.data.array[a+1]=c;this.data.array[a+2]=d;return this},setXYZW:function(a,b,c,d,e){a=a*this.data.stride+this.offset;this.data.array[a+0]=b;this.data.array[a+1]=c;this.data.array[a+2]=d;this.data.array[a+\n3]=e;return this}};fc.prototype={constructor:fc,isInterleavedBuffer:!0,set needsUpdate(a){!0===a&&this.version++},setArray:function(a){if(Array.isArray(a))throw new TypeError(\"THREE.BufferAttribute: array should be a Typed Array.\");this.count=void 0!==a?a.length/this.stride:0;this.array=a},setDynamic:function(a){this.dynamic=a;return this},copy:function(a){this.array=new a.array.constructor(a.array);this.count=a.count;this.stride=a.stride;this.dynamic=a.dynamic;return this},copyAt:function(a,b,c){a*=\nthis.stride;c*=b.stride;for(var d=0,e=this.stride;d<e;d++)this.array[a+d]=b.array[c+d];return this},set:function(a,b){void 0===b&&(b=0);this.array.set(a,b);return this},clone:function(){return(new this.constructor).copy(this)},onUpload:function(a){this.onUploadCallback=a;return this}};gc.prototype=Object.create(fc.prototype);gc.prototype.constructor=gc;gc.prototype.isInstancedInterleavedBuffer=!0;gc.prototype.copy=function(a){fc.prototype.copy.call(this,a);this.meshPerAttribute=a.meshPerAttribute;\nreturn this};hc.prototype=Object.create(y.prototype);hc.prototype.constructor=hc;hc.prototype.isInstancedBufferAttribute=!0;hc.prototype.copy=function(a){y.prototype.copy.call(this,a);this.meshPerAttribute=a.meshPerAttribute;return this};fe.prototype={constructor:fe,linePrecision:1,set:function(a,b){this.ray.set(a,b)},setFromCamera:function(a,b){b&&b.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(b.matrixWorld),this.ray.direction.set(a.x,a.y,.5).unproject(b).sub(this.ray.origin).normalize()):\nb&&b.isOrthographicCamera?(this.ray.origin.set(a.x,a.y,(b.near+b.far)/(b.near-b.far)).unproject(b),this.ray.direction.set(0,0,-1).transformDirection(b.matrixWorld)):console.error(\"THREE.Raycaster: Unsupported camera type.\")},intersectObject:function(a,b){var c=[];ge(a,this,c,b);c.sort(Ie);return c},intersectObjects:function(a,b){var c=[];if(!1===Array.isArray(a))return console.warn(\"THREE.Raycaster.intersectObjects: objects is not an Array.\"),c;for(var d=0,e=a.length;d<e;d++)ge(a[d],this,c,b);c.sort(Ie);\nreturn c}};he.prototype={constructor:he,start:function(){this.oldTime=this.startTime=(performance||Date).now();this.elapsedTime=0;this.running=!0},stop:function(){this.getElapsedTime();this.running=!1},getElapsedTime:function(){this.getDelta();return this.elapsedTime},getDelta:function(){var a=0;this.autoStart&&!this.running&&this.start();if(this.running){var b=(performance||Date).now(),a=(b-this.oldTime)/1E3;this.oldTime=b;this.elapsedTime+=a}return a}};ie.prototype={constructor:ie,set:function(a,\nb,c){this.radius=a;this.phi=b;this.theta=c;return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.radius=a.radius;this.phi=a.phi;this.theta=a.theta;return this},makeSafe:function(){this.phi=Math.max(1E-6,Math.min(Math.PI-1E-6,this.phi));return this},setFromVector3:function(a){this.radius=a.length();0===this.radius?this.phi=this.theta=0:(this.theta=Math.atan2(a.x,a.z),this.phi=Math.acos(Q.clamp(a.y/this.radius,-1,1)));return this}};je.prototype={constructor:je,\nset:function(a,b,c){this.radius=a;this.theta=b;this.y=c;return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.radius=a.radius;this.theta=a.theta;this.y=a.y;return this},setFromVector3:function(a){this.radius=Math.sqrt(a.x*a.x+a.z*a.z);this.theta=Math.atan2(a.x,a.z);this.y=a.y;return this}};ua.prototype=Object.create(Ba.prototype);ua.prototype.constructor=ua;ua.prototype.createAnimation=function(a,b,c,d){b={start:b,end:c,length:c-b+1,fps:d,duration:(c-b)/d,lastFrame:0,\ncurrentFrame:0,active:!1,time:0,direction:1,weight:1,directionBackwards:!1,mirroredLoop:!1};this.animationsMap[a]=b;this.animationsList.push(b)};ua.prototype.autoCreateAnimations=function(a){for(var b=/([a-z]+)_?(\\d+)/i,c,d={},e=this.geometry,f=0,g=e.morphTargets.length;f<g;f++){var h=e.morphTargets[f].name.match(b);if(h&&1<h.length){var k=h[1];d[k]||(d[k]={start:Infinity,end:-Infinity});h=d[k];f<h.start&&(h.start=f);f>h.end&&(h.end=f);c||(c=k)}}for(k in d)h=d[k],this.createAnimation(k,h.start,h.end,\na);this.firstAnimation=c};ua.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};ua.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};ua.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)};ua.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/\nc.duration)};ua.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};ua.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};ua.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b};ua.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};ua.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn(\"THREE.MorphBlendMesh: animation[\"+\na+\"] undefined in .playAnimation()\")};ua.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1};ua.prototype.update=function(a){for(var b=0,c=this.animationsList.length;b<c;b++){var d=this.animationsList[b];if(d.active){var e=d.duration/d.length;d.time+=d.direction*a;if(d.mirroredLoop){if(d.time>d.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=\nd.duration);var f=d.start+Q.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight;f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);d.currentFrame!==d.lastFrame?(this.morphTargetInfluences[d.currentFrame]=e*g,this.morphTargetInfluences[d.lastFrame]=(1-e)*g):this.morphTargetInfluences[d.currentFrame]=g}}};$c.prototype=Object.create(G.prototype);\n$c.prototype.constructor=$c;$c.prototype.isImmediateRenderObject=!0;ad.prototype=Object.create(fa.prototype);ad.prototype.constructor=ad;ad.prototype.update=function(){var a=new q,b=new q,c=new za;return function(){var d=[\"a\",\"b\",\"c\"];this.object.updateMatrixWorld(!0);c.getNormalMatrix(this.object.matrixWorld);var e=this.object.matrixWorld,f=this.geometry.attributes.position,g=this.object.geometry;if(g&&g.isGeometry)for(var h=g.vertices,k=g.faces,l=g=0,q=k.length;l<q;l++)for(var p=k[l],n=0,r=p.vertexNormals.length;n<\nr;n++){var w=p.vertexNormals[n];a.copy(h[p[d[n]]]).applyMatrix4(e);b.copy(w).applyMatrix3(c).normalize().multiplyScalar(this.size).add(a);f.setXYZ(g,a.x,a.y,a.z);g+=1;f.setXYZ(g,b.x,b.y,b.z);g+=1}else if(g&&g.isBufferGeometry)for(d=g.attributes.position,h=g.attributes.normal,n=g=0,r=d.count;n<r;n++)a.set(d.getX(n),d.getY(n),d.getZ(n)).applyMatrix4(e),b.set(h.getX(n),h.getY(n),h.getZ(n)),b.applyMatrix3(c).normalize().multiplyScalar(this.size).add(a),f.setXYZ(g,a.x,a.y,a.z),g+=1,f.setXYZ(g,b.x,b.y,\nb.z),g+=1;f.needsUpdate=!0;return this}}();ic.prototype=Object.create(G.prototype);ic.prototype.constructor=ic;ic.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};ic.prototype.update=function(){var a=new q,b=new q;return function(){var c=this.light.distance?this.light.distance:1E3,d=c*Math.tan(this.light.angle);this.cone.scale.set(d,d,c);a.setFromMatrixPosition(this.light.matrixWorld);b.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(b.sub(a));\nthis.cone.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)}}();jc.prototype=Object.create(fa.prototype);jc.prototype.constructor=jc;jc.prototype.getBoneList=function(a){var b=[];a&&a.isBone&&b.push(a);for(var c=0;c<a.children.length;c++)b.push.apply(b,this.getBoneList(a.children[c]));return b};jc.prototype.update=function(){var a=new q,b=new H,c=new H;return function(){var d=this.geometry,e=d.getAttribute(\"position\");c.getInverse(this.root.matrixWorld);for(var f=0,g=0;f<\nthis.bones.length;f++){var h=this.bones[f];h.parent&&h.parent.isBone&&(b.multiplyMatrices(c,h.matrixWorld),a.setFromMatrixPosition(b),e.setXYZ(g,a.x,a.y,a.z),b.multiplyMatrices(c,h.parent.matrixWorld),a.setFromMatrixPosition(b),e.setXYZ(g+1,a.x,a.y,a.z),g+=2)}d.getAttribute(\"position\").needsUpdate=!0}}();kc.prototype=Object.create(Ba.prototype);kc.prototype.constructor=kc;kc.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};kc.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)};\nlc.prototype=Object.create(G.prototype);lc.prototype.constructor=lc;lc.prototype.dispose=function(){this.children[0].geometry.dispose();this.children[0].material.dispose();this.children[1].geometry.dispose();this.children[1].material.dispose()};lc.prototype.update=function(){var a=new q,b=new q;return function(){var c=this.children[0],d=this.children[1];if(this.light.target){a.setFromMatrixPosition(this.light.matrixWorld);b.setFromMatrixPosition(this.light.target.matrixWorld);var e=b.clone().sub(a);\nc.lookAt(e);d.lookAt(e)}c.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);d.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);var d=.5*this.light.width,e=.5*this.light.height,c=c.geometry.getAttribute(\"position\"),f=c.array;f[0]=d;f[1]=-e;f[2]=0;f[3]=d;f[4]=e;f[5]=0;f[6]=-d;f[7]=e;f[8]=0;f[9]=-d;f[10]=e;f[11]=0;f[12]=-d;f[13]=-e;f[14]=0;f[15]=d;f[16]=-e;f[17]=0;c.needsUpdate=!0}}();mc.prototype=Object.create(G.prototype);mc.prototype.constructor=\nmc;mc.prototype.dispose=function(){this.children[0].geometry.dispose();this.children[0].material.dispose()};mc.prototype.update=function(){var a=new q,b=new N,c=new N;return function(){var d=this.children[0],e=d.geometry.getAttribute(\"color\");b.copy(this.light.color).multiplyScalar(this.light.intensity);c.copy(this.light.groundColor).multiplyScalar(this.light.intensity);for(var f=0,g=e.count;f<g;f++){var h=f<g/2?b:c;e.setXYZ(f,h.r,h.g,h.b)}d.lookAt(a.setFromMatrixPosition(this.light.matrixWorld).negate());\ne.needsUpdate=!0}}();bd.prototype=Object.create(fa.prototype);bd.prototype.constructor=bd;Ed.prototype=Object.create(fa.prototype);Ed.prototype.constructor=Ed;cd.prototype=Object.create(fa.prototype);cd.prototype.constructor=cd;cd.prototype.update=function(){var a=new q,b=new q,c=new za;return function(){this.object.updateMatrixWorld(!0);c.getNormalMatrix(this.object.matrixWorld);for(var d=this.object.matrixWorld,e=this.geometry.attributes.position,f=this.object.geometry,g=f.vertices,f=f.faces,h=\n0,k=0,l=f.length;k<l;k++){var q=f[k],p=q.normal;a.copy(g[q.a]).add(g[q.b]).add(g[q.c]).divideScalar(3).applyMatrix4(d);b.copy(p).applyMatrix3(c).normalize().multiplyScalar(this.size).add(a);e.setXYZ(h,a.x,a.y,a.z);h+=1;e.setXYZ(h,b.x,b.y,b.z);h+=1}e.needsUpdate=!0;return this}}();nc.prototype=Object.create(G.prototype);nc.prototype.constructor=nc;nc.prototype.dispose=function(){var a=this.children[0],b=this.children[1];a.geometry.dispose();a.material.dispose();b.geometry.dispose();b.material.dispose()};\nnc.prototype.update=function(){var a=new q,b=new q,c=new q;return function(){a.setFromMatrixPosition(this.light.matrixWorld);b.setFromMatrixPosition(this.light.target.matrixWorld);c.subVectors(b,a);var d=this.children[0],e=this.children[1];d.lookAt(c);d.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);e.lookAt(c);e.scale.z=c.length()}}();dd.prototype=Object.create(fa.prototype);dd.prototype.constructor=dd;dd.prototype.update=function(){function a(a,g,h,k){d.set(g,h,k).unproject(e);\na=c[a];if(void 0!==a)for(g=b.getAttribute(\"position\"),h=0,k=a.length;h<k;h++)g.setXYZ(a[h],d.x,d.y,d.z)}var b,c,d=new q,e=new sa;return function(){b=this.geometry;c=this.pointMap;e.projectionMatrix.copy(this.camera.projectionMatrix);a(\"c\",0,0,-1);a(\"t\",0,0,1);a(\"n1\",-1,-1,-1);a(\"n2\",1,-1,-1);a(\"n3\",-1,1,-1);a(\"n4\",1,1,-1);a(\"f1\",-1,-1,1);a(\"f2\",1,-1,1);a(\"f3\",-1,1,1);a(\"f4\",1,1,1);a(\"u1\",.7,1.1,-1);a(\"u2\",-.7,1.1,-1);a(\"u3\",0,2,-1);a(\"cf1\",-1,0,1);a(\"cf2\",1,0,1);a(\"cf3\",0,-1,1);a(\"cf4\",0,1,1);a(\"cn1\",\n-1,0,-1);a(\"cn2\",1,0,-1);a(\"cn3\",0,-1,-1);a(\"cn4\",0,1,-1);b.getAttribute(\"position\").needsUpdate=!0}}();oc.prototype=Object.create(fa.prototype);oc.prototype.constructor=oc;oc.prototype.update=function(){var a=new ya;return function(b){b&&b.isBox3?a.copy(b):a.setFromObject(b);if(!a.isEmpty()){b=a.min;var c=a.max,d=this.geometry.attributes.position,e=d.array;e[0]=c.x;e[1]=c.y;e[2]=c.z;e[3]=b.x;e[4]=c.y;e[5]=c.z;e[6]=b.x;e[7]=b.y;e[8]=c.z;e[9]=c.x;e[10]=b.y;e[11]=c.z;e[12]=c.x;e[13]=c.y;e[14]=b.z;e[15]=\nb.x;e[16]=c.y;e[17]=b.z;e[18]=b.x;e[19]=b.y;e[20]=b.z;e[21]=c.x;e[22]=b.y;e[23]=b.z;d.needsUpdate=!0;this.geometry.computeBoundingSphere()}}}();var Je=new D;Je.addAttribute(\"position\",new X([0,0,0,0,1,0],3));var Ke=new Wa(0,.5,1,5,1);Ke.translate(0,-.5,0);Cb.prototype=Object.create(G.prototype);Cb.prototype.constructor=Cb;Cb.prototype.setDirection=function(){var a=new q,b;return function(c){.99999<c.y?this.quaternion.set(0,0,0,1):-.99999>c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),\nb=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();Cb.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};Cb.prototype.setColor=function(a){this.line.material.color.copy(a);this.cone.material.color.copy(a)};Fd.prototype=Object.create(fa.prototype);Fd.prototype.constructor=Fd;var ke=function(){function a(){}var b=new q,c=new a,\nd=new a,e=new a;a.prototype.init=function(a,b,c,d){this.c0=a;this.c1=c;this.c2=-3*a+3*b-2*c-d;this.c3=2*a-2*b+c+d};a.prototype.initNonuniformCatmullRom=function(a,b,c,d,e,l,p){this.init(b,c,((b-a)/e-(c-a)/(e+l)+(c-b)/l)*l,((c-b)/l-(d-b)/(l+p)+(d-c)/p)*l)};a.prototype.initCatmullRom=function(a,b,c,d,e){this.init(b,c,e*(c-a),e*(d-b))};a.prototype.calc=function(a){var b=a*a;return this.c0+this.c1*a+this.c2*b+this.c3*b*a};return wa.create(function(a){this.points=a||[];this.closed=!1},function(a){var g=\nthis.points,h,k;k=g.length;2>k&&console.log(\"duh, you need at least 2 points\");a*=k-(this.closed?0:1);h=Math.floor(a);a-=h;this.closed?h+=0<h?0:(Math.floor(Math.abs(h)/g.length)+1)*g.length:0===a&&h===k-1&&(h=k-2,a=1);var l,x,p;this.closed||0<h?l=g[(h-1)%k]:(b.subVectors(g[0],g[1]).add(g[0]),l=b);x=g[h%k];p=g[(h+1)%k];this.closed||h+2<k?g=g[(h+2)%k]:(b.subVectors(g[k-1],g[k-2]).add(g[k-1]),g=b);if(void 0===this.type||\"centripetal\"===this.type||\"chordal\"===this.type){var n=\"chordal\"===this.type?.5:\n.25;k=Math.pow(l.distanceToSquared(x),n);h=Math.pow(x.distanceToSquared(p),n);n=Math.pow(p.distanceToSquared(g),n);1E-4>h&&(h=1);1E-4>k&&(k=h);1E-4>n&&(n=h);c.initNonuniformCatmullRom(l.x,x.x,p.x,g.x,k,h,n);d.initNonuniformCatmullRom(l.y,x.y,p.y,g.y,k,h,n);e.initNonuniformCatmullRom(l.z,x.z,p.z,g.z,k,h,n)}else\"catmullrom\"===this.type&&(k=void 0!==this.tension?this.tension:.5,c.initCatmullRom(l.x,x.x,p.x,g.x,k),d.initCatmullRom(l.y,x.y,p.y,g.y,k),e.initCatmullRom(l.z,x.z,p.z,g.z,k));return new q(c.calc(a),\nd.calc(a),e.calc(a))})}(),Nf=wa.create(function(a){console.warn(\"THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3\");this.points=void 0===a?[]:a},function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0==c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=ed.interpolate;return new q(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a),c(d.z,e.z,f.z,b.z,a))}),Of=wa.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b=\npa.b3;return new q(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y),b(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z))}),Pf=wa.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b=pa.b2;return new q(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y),b(a,this.v0.z,this.v1.z,this.v2.z))}),Qf=wa.create(function(a,b){this.v1=a;this.v2=b},function(a){if(1===a)return this.v2.clone();var b=new q;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);\nb.add(this.v1);return b});Gd.prototype=Object.create(Xa.prototype);Gd.prototype.constructor=Gd;Le.prototype=Object.create(ke.prototype);bd.prototype.setColors=function(){console.error(\"THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.\")};Object.assign(pc.prototype,{center:function(a){console.warn(\"THREE.Box2: .center() has been renamed to .getCenter().\");return this.getCenter(a)},empty:function(){console.warn(\"THREE.Box2: .empty() has been renamed to .isEmpty().\");\nreturn this.isEmpty()},isIntersectionBox:function(a){console.warn(\"THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().\");return this.intersectsBox(a)},size:function(a){console.warn(\"THREE.Box2: .size() has been renamed to .getSize().\");return this.getSize(a)}});Object.assign(ya.prototype,{center:function(a){console.warn(\"THREE.Box3: .center() has been renamed to .getCenter().\");return this.getCenter(a)},empty:function(){console.warn(\"THREE.Box3: .empty() has been renamed to .isEmpty().\");\nreturn this.isEmpty()},isIntersectionBox:function(a){console.warn(\"THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().\");return this.intersectsBox(a)},isIntersectionSphere:function(a){console.warn(\"THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().\");return this.intersectsSphere(a)},size:function(a){console.warn(\"THREE.Box3: .size() has been renamed to .getSize().\");return this.getSize(a)}});gb.prototype.center=function(a){console.warn(\"THREE.Line3: .center() has been renamed to .getCenter().\");\nreturn this.getCenter(a)};Q.random16=function(){console.warn(\"THREE.Math.random16() has been deprecated. Use Math.random() instead.\");return Math.random()};Object.assign(za.prototype,{flattenToArrayOffset:function(a,b){console.warn(\"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\");return this.toArray(a,b)},multiplyVector3:function(a){console.warn(\"THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.\");return a.applyMatrix3(this)},\nmultiplyVector3Array:function(a){console.warn(\"THREE.Matrix3: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.\");return this.applyToVector3Array(a)},applyToBuffer:function(a,b,c){console.warn(\"THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.\");return this.applyToBufferAttribute(a)}});Object.assign(H.prototype,{extractPosition:function(a){console.warn(\"THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().\");\nreturn this.copyPosition(a)},flattenToArrayOffset:function(a,b){console.warn(\"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\");return this.toArray(a,b)},getPosition:function(){var a;return function(){void 0===a&&(a=new q);console.warn(\"THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.\");return a.setFromMatrixColumn(this,3)}}(),setRotationFromQuaternion:function(a){console.warn(\"THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().\");\nreturn this.makeRotationFromQuaternion(a)},multiplyVector3:function(a){console.warn(\"THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead.\");return a.applyProjection(this)},multiplyVector4:function(a){console.warn(\"THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.\");return a.applyMatrix4(this)},multiplyVector3Array:function(a){console.warn(\"THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.\");\nreturn this.applyToVector3Array(a)},rotateAxis:function(a){console.warn(\"THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.\");a.transformDirection(this)},crossVector:function(a){console.warn(\"THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.\");return a.applyMatrix4(this)},translate:function(){console.error(\"THREE.Matrix4: .translate() has been removed.\")},rotateX:function(){console.error(\"THREE.Matrix4: .rotateX() has been removed.\")},\nrotateY:function(){console.error(\"THREE.Matrix4: .rotateY() has been removed.\")},rotateZ:function(){console.error(\"THREE.Matrix4: .rotateZ() has been removed.\")},rotateByAxis:function(){console.error(\"THREE.Matrix4: .rotateByAxis() has been removed.\")},applyToBuffer:function(a,b,c){console.warn(\"THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.\");return this.applyToBufferAttribute(a)}});ma.prototype.isIntersectionLine=function(a){console.warn(\"THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().\");\nreturn this.intersectsLine(a)};da.prototype.multiplyVector3=function(a){console.warn(\"THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.\");return a.applyQuaternion(this)};Object.assign(bb.prototype,{isIntersectionBox:function(a){console.warn(\"THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().\");return this.intersectsBox(a)},isIntersectionPlane:function(a){console.warn(\"THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().\");\nreturn this.intersectsPlane(a)},isIntersectionSphere:function(a){console.warn(\"THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().\");return this.intersectsSphere(a)}});Object.assign(Ab.prototype,{extrude:function(a){console.warn(\"THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.\");return new La(this,a)},makeGeometry:function(a){console.warn(\"THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.\");return new Xb(this,a)}});Object.assign(q.prototype,\n{setEulerFromRotationMatrix:function(){console.error(\"THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.\")},setEulerFromQuaternion:function(){console.error(\"THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.\")},getPositionFromMatrix:function(a){console.warn(\"THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().\");return this.setFromMatrixPosition(a)},getScaleFromMatrix:function(a){console.warn(\"THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().\");\nreturn this.setFromMatrixScale(a)},getColumnFromMatrix:function(a,b){console.warn(\"THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().\");return this.setFromMatrixColumn(b,a)}});S.prototype.computeTangents=function(){console.warn(\"THREE.Geometry: .computeTangents() has been removed.\")};Object.assign(G.prototype,{getChildByName:function(a){console.warn(\"THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().\");return this.getObjectByName(a)},renderDepth:function(){console.warn(\"THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.\")},\ntranslate:function(a,b){console.warn(\"THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.\");return this.translateOnAxis(b,a)}});Object.defineProperties(G.prototype,{eulerOrder:{get:function(){console.warn(\"THREE.Object3D: .eulerOrder is now .rotation.order.\");return this.rotation.order},set:function(a){console.warn(\"THREE.Object3D: .eulerOrder is now .rotation.order.\");this.rotation.order=a}},useQuaternion:{get:function(){console.warn(\"THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.\")},\nset:function(){console.warn(\"THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.\")}}});Object.defineProperties(Ac.prototype,{objects:{get:function(){console.warn(\"THREE.LOD: .objects has been renamed to .levels.\");return this.levels}}});Ha.prototype.setLens=function(a,b){console.warn(\"THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.\");void 0!==b&&(this.filmGauge=b);this.setFocalLength(a)};Object.defineProperties(na.prototype,\n{onlyShadow:{set:function(){console.warn(\"THREE.Light: .onlyShadow has been removed.\")}},shadowCameraFov:{set:function(a){console.warn(\"THREE.Light: .shadowCameraFov is now .shadow.camera.fov.\");this.shadow.camera.fov=a}},shadowCameraLeft:{set:function(a){console.warn(\"THREE.Light: .shadowCameraLeft is now .shadow.camera.left.\");this.shadow.camera.left=a}},shadowCameraRight:{set:function(a){console.warn(\"THREE.Light: .shadowCameraRight is now .shadow.camera.right.\");this.shadow.camera.right=a}},shadowCameraTop:{set:function(a){console.warn(\"THREE.Light: .shadowCameraTop is now .shadow.camera.top.\");\nthis.shadow.camera.top=a}},shadowCameraBottom:{set:function(a){console.warn(\"THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.\");this.shadow.camera.bottom=a}},shadowCameraNear:{set:function(a){console.warn(\"THREE.Light: .shadowCameraNear is now .shadow.camera.near.\");this.shadow.camera.near=a}},shadowCameraFar:{set:function(a){console.warn(\"THREE.Light: .shadowCameraFar is now .shadow.camera.far.\");this.shadow.camera.far=a}},shadowCameraVisible:{set:function(){console.warn(\"THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.\")}},\nshadowBias:{set:function(a){console.warn(\"THREE.Light: .shadowBias is now .shadow.bias.\");this.shadow.bias=a}},shadowDarkness:{set:function(){console.warn(\"THREE.Light: .shadowDarkness has been removed.\")}},shadowMapWidth:{set:function(a){console.warn(\"THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.\");this.shadow.mapSize.width=a}},shadowMapHeight:{set:function(a){console.warn(\"THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.\");this.shadow.mapSize.height=a}}});Object.defineProperties(y.prototype,\n{length:{get:function(){console.warn(\"THREE.BufferAttribute: .length has been deprecated. Use .count instead.\");return this.array.length}}});Object.assign(D.prototype,{addIndex:function(a){console.warn(\"THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().\");this.setIndex(a)},addDrawCall:function(a,b,c){void 0!==c&&console.warn(\"THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.\");console.warn(\"THREE.BufferGeometry: .addDrawCall() is now .addGroup().\");this.addGroup(a,\nb)},clearDrawCalls:function(){console.warn(\"THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().\");this.clearGroups()},computeTangents:function(){console.warn(\"THREE.BufferGeometry: .computeTangents() has been removed.\")},computeOffsets:function(){console.warn(\"THREE.BufferGeometry: .computeOffsets() has been removed.\")}});Object.defineProperties(D.prototype,{drawcalls:{get:function(){console.error(\"THREE.BufferGeometry: .drawcalls has been renamed to .groups.\");return this.groups}},offsets:{get:function(){console.warn(\"THREE.BufferGeometry: .offsets has been renamed to .groups.\");\nreturn this.groups}}});Object.defineProperties(Dd.prototype,{dynamic:{set:function(){console.warn(\"THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.\")}},onUpdate:{value:function(){console.warn(\"THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.\");return this}}});Object.defineProperties(W.prototype,{wrapAround:{get:function(){console.warn(\"THREE.\"+this.type+\": .wrapAround has been removed.\")},set:function(){console.warn(\"THREE.\"+this.type+\n\": .wrapAround has been removed.\")}},wrapRGB:{get:function(){console.warn(\"THREE.\"+this.type+\": .wrapRGB has been removed.\");return new N}}});Object.defineProperties(Ca.prototype,{metal:{get:function(){console.warn(\"THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.\");return!1},set:function(){console.warn(\"THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead\")}}});Object.defineProperties(Ia.prototype,{derivatives:{get:function(){console.warn(\"THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.\");\nreturn this.extensions.derivatives},set:function(a){console.warn(\"THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.\");this.extensions.derivatives=a}}});oa.prototype=Object.assign(Object.create({constructor:oa,apply:function(a){console.warn(\"THREE.EventDispatcher: .apply is deprecated, just inherit or Object.assign the prototype to mix-in.\");Object.assign(a,this)}}),oa.prototype);Object.assign(Nd.prototype,{supportsFloatTextures:function(){console.warn(\"THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).\");\nreturn this.extensions.get(\"OES_texture_float\")},supportsHalfFloatTextures:function(){console.warn(\"THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' ).\");return this.extensions.get(\"OES_texture_half_float\")},supportsStandardDerivatives:function(){console.warn(\"THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).\");return this.extensions.get(\"OES_standard_derivatives\")},supportsCompressedTextureS3TC:function(){console.warn(\"THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' ).\");\nreturn this.extensions.get(\"WEBGL_compressed_texture_s3tc\")},supportsCompressedTexturePVRTC:function(){console.warn(\"THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' ).\");return this.extensions.get(\"WEBGL_compressed_texture_pvrtc\")},supportsBlendMinMax:function(){console.warn(\"THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' ).\");return this.extensions.get(\"EXT_blend_minmax\")},supportsVertexTextures:function(){console.warn(\"THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.\");\nreturn this.capabilities.vertexTextures},supportsInstancedArrays:function(){console.warn(\"THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' ).\");return this.extensions.get(\"ANGLE_instanced_arrays\")},enableScissorTest:function(a){console.warn(\"THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().\");this.setScissorTest(a)},initMaterial:function(){console.warn(\"THREE.WebGLRenderer: .initMaterial() has been removed.\")},addPrePlugin:function(){console.warn(\"THREE.WebGLRenderer: .addPrePlugin() has been removed.\")},\naddPostPlugin:function(){console.warn(\"THREE.WebGLRenderer: .addPostPlugin() has been removed.\")},updateShadowMap:function(){console.warn(\"THREE.WebGLRenderer: .updateShadowMap() has been removed.\")}});Object.defineProperties(Nd.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(a){console.warn(\"THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.\");this.shadowMap.enabled=a}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(a){console.warn(\"THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.\");\nthis.shadowMap.type=a}},shadowMapCullFace:{get:function(){return this.shadowMap.cullFace},set:function(a){console.warn(\"THREE.WebGLRenderer: .shadowMapCullFace is now .shadowMap.cullFace.\");this.shadowMap.cullFace=a}}});Object.defineProperties(ye.prototype,{cullFace:{get:function(){return this.renderReverseSided?2:1},set:function(a){a=1!==a;console.warn(\"WebGLRenderer: .shadowMap.cullFace is deprecated. Set .shadowMap.renderReverseSided to \"+a+\".\");this.renderReverseSided=a}}});Object.defineProperties(Db.prototype,\n{wrapS:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.\");return this.texture.wrapS},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.\");this.texture.wrapS=a}},wrapT:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.\");return this.texture.wrapT},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.\");this.texture.wrapT=a}},magFilter:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.\");\nreturn this.texture.magFilter},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.\");this.texture.magFilter=a}},minFilter:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.\");return this.texture.minFilter},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.\");this.texture.minFilter=a}},anisotropy:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.\");\nreturn this.texture.anisotropy},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.\");this.texture.anisotropy=a}},offset:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .offset is now .texture.offset.\");return this.texture.offset},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .offset is now .texture.offset.\");this.texture.offset=a}},repeat:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .repeat is now .texture.repeat.\");return this.texture.repeat},\nset:function(a){console.warn(\"THREE.WebGLRenderTarget: .repeat is now .texture.repeat.\");this.texture.repeat=a}},format:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .format is now .texture.format.\");return this.texture.format},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .format is now .texture.format.\");this.texture.format=a}},type:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .type is now .texture.type.\");return this.texture.type},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .type is now .texture.type.\");\nthis.texture.type=a}},generateMipmaps:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.\");return this.texture.generateMipmaps},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.\");this.texture.generateMipmaps=a}}});ec.prototype.load=function(a){console.warn(\"THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.\");var b=this;(new Wd).load(a,function(a){b.setBuffer(a)});return this};\nae.prototype.getData=function(){console.warn(\"THREE.AudioAnalyser: .getData() is now .getFrequencyData().\");return this.getFrequencyData()};l.WebGLRenderTargetCube=Eb;l.WebGLRenderTarget=Db;l.WebGLRenderer=Nd;l.ShaderLib=Gb;l.UniformsLib=U;l.UniformsUtils=Ja;l.ShaderChunk=Z;l.FogExp2=Ib;l.Fog=Jb;l.Scene=jb;l.LensFlare=Od;l.Sprite=zc;l.LOD=Ac;l.SkinnedMesh=jd;l.Skeleton=hd;l.Bone=id;l.Mesh=Ba;l.LineSegments=fa;l.Line=Va;l.Points=Kb;l.Group=Bc;l.VideoTexture=kd;l.DataTexture=db;l.CompressedTexture=\nLb;l.CubeTexture=Za;l.CanvasTexture=ld;l.DepthTexture=Cc;l.Texture=ea;l.CompressedTextureLoader=Ee;l.BinaryTextureLoader=Qd;l.DataTextureLoader=Qd;l.CubeTextureLoader=Rd;l.TextureLoader=md;l.ObjectLoader=Fe;l.MaterialLoader=Ad;l.BufferGeometryLoader=Sd;l.DefaultLoadingManager=va;l.LoadingManager=Pd;l.JSONLoader=Td;l.ImageLoader=Vc;l.FontLoader=Ge;l.FileLoader=Ma;l.Loader=wb;l.Cache=ne;l.AudioLoader=Wd;l.SpotLightShadow=od;l.SpotLight=pd;l.PointLight=qd;l.RectAreaLight=Xd;l.HemisphereLight=nd;l.DirectionalLightShadow=\nrd;l.DirectionalLight=sd;l.AmbientLight=td;l.LightShadow=tb;l.Light=na;l.StereoCamera=He;l.PerspectiveCamera=Ha;l.OrthographicCamera=Hb;l.CubeCamera=Bd;l.Camera=sa;l.AudioListener=Yd;l.PositionalAudio=$d;l.AudioContext=Zd;l.AudioAnalyser=ae;l.Audio=ec;l.VectorKeyframeTrack=cc;l.StringKeyframeTrack=xd;l.QuaternionKeyframeTrack=Xc;l.NumberKeyframeTrack=dc;l.ColorKeyframeTrack=zd;l.BooleanKeyframeTrack=yd;l.PropertyMixer=Cd;l.PropertyBinding=ka;l.KeyframeTrack=vb;l.AnimationUtils=ba;l.AnimationObjectGroup=\nbe;l.AnimationMixer=de;l.AnimationClip=ta;l.Uniform=Dd;l.InstancedBufferGeometry=Bb;l.BufferGeometry=D;l.GeometryIdCount=function(){return Kd++};l.Geometry=S;l.InterleavedBufferAttribute=ee;l.InstancedInterleavedBuffer=gc;l.InterleavedBuffer=fc;l.InstancedBufferAttribute=hc;l.Face3=ha;l.Object3D=G;l.Raycaster=fe;l.Layers=gd;l.EventDispatcher=oa;l.Clock=he;l.QuaternionLinearInterpolant=wd;l.LinearInterpolant=Wc;l.DiscreteInterpolant=vd;l.CubicInterpolant=ud;l.Interpolant=qa;l.Triangle=Aa;l.Spline=\nfunction(a){function b(a,b,c,d,e,f,g){a=.5*(c-a);d=.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b}this.points=a;var c=[],d={x:0,y:0,z:0},e,f,g,h,k,l,x,p,n;this.initFromArray=function(a){this.points=[];for(var b=0;b<a.length;b++)this.points[b]={x:a[b][0],y:a[b][1],z:a[b][2]}};this.getPoint=function(a){e=(this.points.length-1)*a;f=Math.floor(e);g=e-f;c[0]=0===f?f:f-1;c[1]=f;c[2]=f>this.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1:f+2;l=this.points[c[0]];\nx=this.points[c[1]];p=this.points[c[2]];n=this.points[c[3]];h=g*g;k=g*h;d.x=b(l.x,x.x,p.x,n.x,g,h,k);d.y=b(l.y,x.y,p.y,n.y,g,h,k);d.z=b(l.z,x.z,p.z,n.z,g,h,k);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a<c;a++)b=this.points[a],d[a]=[b.x,b.y,b.z];return d};this.getLength=function(a){var b,c,d,e=0,f=new q,g=new q,h=[],k=0;h[0]=0;a||(a=100);c=this.points.length*a;f.copy(this.points[0]);for(a=1;a<c;a++)b=a/c,d=this.getPoint(b),g.copy(d),k+=g.distanceTo(f),\nf.copy(d),b*=this.points.length-1,b=Math.floor(b),b!==e&&(h[b]=k,e=b);h[h.length]=k;return{chunks:h,total:k}};this.reparametrizeByArcLength=function(a){var b,c,d,e,f,g,h=[],k=new q,l=this.getLength();h.push(k.copy(this.points[0]).clone());for(b=1;b<this.points.length;b++){c=l.chunks[b]-l.chunks[b-1];g=Math.ceil(a*c/l.total);e=(b-1)/(this.points.length-1);f=b/(this.points.length-1);for(c=1;c<g-1;c++)d=e+1/g*c*(f-e),d=this.getPoint(d),h.push(k.copy(d).clone());h.push(k.copy(this.points[b]).clone())}this.points=\nh}};l.Math=Q;l.Spherical=ie;l.Cylindrical=je;l.Plane=ma;l.Frustum=qc;l.Sphere=Fa;l.Ray=bb;l.Matrix4=H;l.Matrix3=za;l.Box3=ya;l.Box2=pc;l.Line3=gb;l.Euler=cb;l.Vector4=ga;l.Vector3=q;l.Vector2=C;l.Quaternion=da;l.Color=N;l.MorphBlendMesh=ua;l.ImmediateRenderObject=$c;l.VertexNormalsHelper=ad;l.SpotLightHelper=ic;l.SkeletonHelper=jc;l.PointLightHelper=kc;l.RectAreaLightHelper=lc;l.HemisphereLightHelper=mc;l.GridHelper=bd;l.PolarGridHelper=Ed;l.FaceNormalsHelper=cd;l.DirectionalLightHelper=nc;l.CameraHelper=\ndd;l.BoxHelper=oc;l.ArrowHelper=Cb;l.AxisHelper=Fd;l.CatmullRomCurve3=ke;l.SplineCurve3=Nf;l.CubicBezierCurve3=Of;l.QuadraticBezierCurve3=Pf;l.LineCurve3=Qf;l.ArcCurve=Gd;l.EllipseCurve=Xa;l.SplineCurve=xb;l.CubicBezierCurve=yb;l.QuadraticBezierCurve=zb;l.LineCurve=Qa;l.Shape=Ab;l.ShapePath=Ud;l.Path=Zc;l.Font=Vd;l.CurvePath=Yc;l.Curve=wa;l.ShapeUtils=pa;l.SceneUtils={createMultiMaterialObject:function(a,b){for(var c=new Bc,d=0,e=b.length;d<e;d++)c.add(new Ba(a,b[d]));return c},detach:function(a,\nb,c){a.applyMatrix(b.matrixWorld);b.remove(a);c.add(a)},attach:function(a,b,c){var d=new H;d.getInverse(c.matrixWorld);a.applyMatrix(d);b.remove(a);c.add(a)}};l.CurveUtils=ed;l.WireframeGeometry=Mb;l.ParametricGeometry=Dc;l.ParametricBufferGeometry=Nb;l.TetrahedronGeometry=Ec;l.TetrahedronBufferGeometry=Ob;l.OctahedronGeometry=Fc;l.OctahedronBufferGeometry=lb;l.IcosahedronGeometry=Gc;l.IcosahedronBufferGeometry=Pb;l.DodecahedronGeometry=Hc;l.DodecahedronBufferGeometry=Qb;l.PolyhedronGeometry=Ic;l.PolyhedronBufferGeometry=\nxa;l.TubeGeometry=Jc;l.TubeBufferGeometry=Rb;l.TorusKnotGeometry=Kc;l.TorusKnotBufferGeometry=Sb;l.TorusGeometry=Lc;l.TorusBufferGeometry=Tb;l.TextGeometry=Mc;l.SphereBufferGeometry=mb;l.SphereGeometry=Nc;l.RingGeometry=Oc;l.RingBufferGeometry=Ub;l.PlaneBufferGeometry=ib;l.PlaneGeometry=Pc;l.LatheGeometry=Qc;l.LatheBufferGeometry=Vb;l.ShapeGeometry=Xb;l.ShapeBufferGeometry=Wb;l.ExtrudeGeometry=La;l.EdgesGeometry=Yb;l.ConeGeometry=Rc;l.ConeBufferGeometry=Sc;l.CylinderGeometry=nb;l.CylinderBufferGeometry=\nWa;l.CircleBufferGeometry=Zb;l.CircleGeometry=Tc;l.BoxBufferGeometry=hb;l.BoxGeometry=$b;l.ShadowMaterial=ac;l.SpriteMaterial=kb;l.RawShaderMaterial=bc;l.ShaderMaterial=Ia;l.PointsMaterial=Oa;l.MultiMaterial=Uc;l.MeshPhysicalMaterial=ob;l.MeshStandardMaterial=Pa;l.MeshPhongMaterial=Ca;l.MeshToonMaterial=pb;l.MeshNormalMaterial=qb;l.MeshLambertMaterial=rb;l.MeshDepthMaterial=ab;l.MeshBasicMaterial=Ka;l.LineDashedMaterial=sb;l.LineBasicMaterial=ia;l.Material=W;l.Float64BufferAttribute=wc;l.Float32BufferAttribute=\nX;l.Uint32BufferAttribute=Ua;l.Int32BufferAttribute=vc;l.Uint16BufferAttribute=Ra;l.Int16BufferAttribute=uc;l.Uint8ClampedBufferAttribute=tc;l.Uint8BufferAttribute=sc;l.Int8BufferAttribute=rc;l.BufferAttribute=y;l.REVISION=\"83\";l.MOUSE={LEFT:0,MIDDLE:1,RIGHT:2};l.CullFaceNone=0;l.CullFaceBack=1;l.CullFaceFront=2;l.CullFaceFrontBack=3;l.FrontFaceDirectionCW=0;l.FrontFaceDirectionCCW=1;l.BasicShadowMap=0;l.PCFShadowMap=1;l.PCFSoftShadowMap=2;l.FrontSide=0;l.BackSide=1;l.DoubleSide=2;l.FlatShading=1;\nl.SmoothShading=2;l.NoColors=0;l.FaceColors=1;l.VertexColors=2;l.NoBlending=0;l.NormalBlending=1;l.AdditiveBlending=2;l.SubtractiveBlending=3;l.MultiplyBlending=4;l.CustomBlending=5;l.BlendingMode=Me;l.AddEquation=100;l.SubtractEquation=101;l.ReverseSubtractEquation=102;l.MinEquation=103;l.MaxEquation=104;l.ZeroFactor=200;l.OneFactor=201;l.SrcColorFactor=202;l.OneMinusSrcColorFactor=203;l.SrcAlphaFactor=204;l.OneMinusSrcAlphaFactor=205;l.DstAlphaFactor=206;l.OneMinusDstAlphaFactor=207;l.DstColorFactor=\n208;l.OneMinusDstColorFactor=209;l.SrcAlphaSaturateFactor=210;l.NeverDepth=0;l.AlwaysDepth=1;l.LessDepth=2;l.LessEqualDepth=3;l.EqualDepth=4;l.GreaterEqualDepth=5;l.GreaterDepth=6;l.NotEqualDepth=7;l.MultiplyOperation=0;l.MixOperation=1;l.AddOperation=2;l.NoToneMapping=0;l.LinearToneMapping=1;l.ReinhardToneMapping=2;l.Uncharted2ToneMapping=3;l.CineonToneMapping=4;l.UVMapping=300;l.CubeReflectionMapping=301;l.CubeRefractionMapping=302;l.EquirectangularReflectionMapping=303;l.EquirectangularRefractionMapping=\n304;l.SphericalReflectionMapping=305;l.CubeUVReflectionMapping=306;l.CubeUVRefractionMapping=307;l.TextureMapping=Ne;l.RepeatWrapping=1E3;l.ClampToEdgeWrapping=1001;l.MirroredRepeatWrapping=1002;l.TextureWrapping=le;l.NearestFilter=1003;l.NearestMipMapNearestFilter=1004;l.NearestMipMapLinearFilter=1005;l.LinearFilter=1006;l.LinearMipMapNearestFilter=1007;l.LinearMipMapLinearFilter=1008;l.TextureFilter=me;l.UnsignedByteType=1009;l.ByteType=1010;l.ShortType=1011;l.UnsignedShortType=1012;l.IntType=1013;\nl.UnsignedIntType=1014;l.FloatType=1015;l.HalfFloatType=1016;l.UnsignedShort4444Type=1017;l.UnsignedShort5551Type=1018;l.UnsignedShort565Type=1019;l.UnsignedInt248Type=1020;l.AlphaFormat=1021;l.RGBFormat=1022;l.RGBAFormat=1023;l.LuminanceFormat=1024;l.LuminanceAlphaFormat=1025;l.RGBEFormat=1023;l.DepthFormat=1026;l.DepthStencilFormat=1027;l.RGB_S3TC_DXT1_Format=2001;l.RGBA_S3TC_DXT1_Format=2002;l.RGBA_S3TC_DXT3_Format=2003;l.RGBA_S3TC_DXT5_Format=2004;l.RGB_PVRTC_4BPPV1_Format=2100;l.RGB_PVRTC_2BPPV1_Format=\n2101;l.RGBA_PVRTC_4BPPV1_Format=2102;l.RGBA_PVRTC_2BPPV1_Format=2103;l.RGB_ETC1_Format=2151;l.LoopOnce=2200;l.LoopRepeat=2201;l.LoopPingPong=2202;l.InterpolateDiscrete=2300;l.InterpolateLinear=2301;l.InterpolateSmooth=2302;l.ZeroCurvatureEnding=2400;l.ZeroSlopeEnding=2401;l.WrapAroundEnding=2402;l.TrianglesDrawMode=0;l.TriangleStripDrawMode=1;l.TriangleFanDrawMode=2;l.LinearEncoding=3E3;l.sRGBEncoding=3001;l.GammaEncoding=3007;l.RGBEEncoding=3002;l.LogLuvEncoding=3003;l.RGBM7Encoding=3004;l.RGBM16Encoding=\n3005;l.RGBDEncoding=3006;l.BasicDepthPacking=3200;l.RGBADepthPacking=3201;l.CubeGeometry=$b;l.Face4=function(a,b,c,d,e,f,g){console.warn(\"THREE.Face4 has been removed. A THREE.Face3 will be created instead.\");return new ha(a,b,c,e,f,g)};l.LineStrip=0;l.LinePieces=1;l.MeshFaceMaterial=function(a){console.warn(\"THREE.MeshFaceMaterial has been renamed to THREE.MultiMaterial.\");return new Uc(a)};l.PointCloud=function(a,b){console.warn(\"THREE.PointCloud has been renamed to THREE.Points.\");return new Kb(a,\nb)};l.Particle=function(a){console.warn(\"THREE.Particle has been renamed to THREE.Sprite.\");return new zc(a)};l.ParticleSystem=function(a,b){console.warn(\"THREE.ParticleSystem has been renamed to THREE.Points.\");return new Kb(a,b)};l.PointCloudMaterial=function(a){console.warn(\"THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.\");return new Oa(a)};l.ParticleBasicMaterial=function(a){console.warn(\"THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.\");return new Oa(a)};\nl.ParticleSystemMaterial=function(a){console.warn(\"THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.\");return new Oa(a)};l.Vertex=function(a,b,c){console.warn(\"THREE.Vertex has been removed. Use THREE.Vector3 instead.\");return new q(a,b,c)};l.DynamicBufferAttribute=function(a,b){console.warn(\"THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.\");return(new y(a,b)).setDynamic(!0)};l.Int8Attribute=function(a,b){console.warn(\"THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.\");\nreturn new rc(a,b)};l.Uint8Attribute=function(a,b){console.warn(\"THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.\");return new sc(a,b)};l.Uint8ClampedAttribute=function(a,b){console.warn(\"THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.\");return new tc(a,b)};l.Int16Attribute=function(a,b){console.warn(\"THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.\");return new uc(a,b)};l.Uint16Attribute=\nfunction(a,b){console.warn(\"THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.\");return new Ra(a,b)};l.Int32Attribute=function(a,b){console.warn(\"THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.\");return new vc(a,b)};l.Uint32Attribute=function(a,b){console.warn(\"THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.\");return new Ua(a,b)};l.Float32Attribute=function(a,b){console.warn(\"THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.\");\nreturn new X(a,b)};l.Float64Attribute=function(a,b){console.warn(\"THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.\");return new wc(a,b)};l.ClosedSplineCurve3=Le;l.BoundingBoxHelper=function(a,b){console.warn(\"THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.\");return new oc(a,b)};l.EdgesHelper=function(a,b){console.warn(\"THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.\");return new fa(new Yb(a.geometry),new ia({color:void 0!==\nb?b:16777215}))};l.WireframeHelper=function(a,b){console.warn(\"THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.\");return new fa(new Mb(a.geometry),new ia({color:void 0!==b?b:16777215}))};l.XHRLoader=function(a){console.warn(\"THREE.XHRLoader has been renamed to THREE.FileLoader.\");return new Ma(a)};l.GeometryUtils={merge:function(a,b,c){console.warn(\"THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.\");\nvar d;b.isMesh&&(b.matrixAutoUpdate&&b.updateMatrix(),d=b.matrix,b=b.geometry);a.merge(b,d,c)},center:function(a){console.warn(\"THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.\");return a.center()}};l.ImageUtils={crossOrigin:void 0,loadTexture:function(a,b,c,d){console.warn(\"THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.\");var e=new md;e.setCrossOrigin(this.crossOrigin);a=e.load(a,c,void 0,d);b&&(a.mapping=b);return a},\nloadTextureCube:function(a,b,c,d){console.warn(\"THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.\");var e=new Rd;e.setCrossOrigin(this.crossOrigin);a=e.load(a,c,void 0,d);b&&(a.mapping=b);return a},loadCompressedTexture:function(){console.error(\"THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.\")},loadCompressedTextureCube:function(){console.error(\"THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.\")}};\nl.Projector=function(){console.error(\"THREE.Projector has been moved to /examples/js/renderers/Projector.js.\");this.projectVector=function(a,b){console.warn(\"THREE.Projector: .projectVector() is now vector.project().\");a.project(b)};this.unprojectVector=function(a,b){console.warn(\"THREE.Projector: .unprojectVector() is now vector.unproject().\");a.unproject(b)};this.pickingRay=function(){console.error(\"THREE.Projector: .pickingRay() is now raycaster.setFromCamera().\")}};l.CanvasRenderer=function(){console.error(\"THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js\");\nthis.domElement=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\");this.clear=function(){};this.render=function(){};this.setClearColor=function(){};this.setSize=function(){}};Object.defineProperty(l,\"__esModule\",{value:!0})});\n",
     "//     Underscore.js 1.8.3\n//     http://underscorejs.org\n//     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n//     Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n  // Baseline setup\n  // --------------\n\n  // Establish the root object, `window` in the browser, or `exports` on the server.\n  var root = this;\n\n  // Save the previous value of the `_` variable.\n  var previousUnderscore = root._;\n\n  // Save bytes in the minified (but not gzipped) version:\n  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n  // Create quick reference variables for speed access to core prototypes.\n  var\n    push             = ArrayProto.push,\n    slice            = ArrayProto.slice,\n    toString         = ObjProto.toString,\n    hasOwnProperty   = ObjProto.hasOwnProperty;\n\n  // All **ECMAScript 5** native function implementations that we hope to use\n  // are declared here.\n  var\n    nativeIsArray      = Array.isArray,\n    nativeKeys         = Object.keys,\n    nativeBind         = FuncProto.bind,\n    nativeCreate       = Object.create;\n\n  // Naked function reference for surrogate-prototype-swapping.\n  var Ctor = function(){};\n\n  // Create a safe reference to the Underscore object for use below.\n  var _ = function(obj) {\n    if (obj instanceof _) return obj;\n    if (!(this instanceof _)) return new _(obj);\n    this._wrapped = obj;\n  };\n\n  // Export the Underscore object for **Node.js**, with\n  // backwards-compatibility for the old `require()` API. If we're in\n  // the browser, add `_` as a global object.\n  if (typeof exports !== 'undefined') {\n    if (typeof module !== 'undefined' && module.exports) {\n      exports = module.exports = _;\n    }\n    exports._ = _;\n  } else {\n    root._ = _;\n  }\n\n  // Current version.\n  _.VERSION = '1.8.3';\n\n  // Internal function that returns an efficient (for current engines) version\n  // of the passed-in callback, to be repeatedly applied in other Underscore\n  // functions.\n  var optimizeCb = function(func, context, argCount) {\n    if (context === void 0) return func;\n    switch (argCount == null ? 3 : argCount) {\n      case 1: return function(value) {\n        return func.call(context, value);\n      };\n      case 2: return function(value, other) {\n        return func.call(context, value, other);\n      };\n      case 3: return function(value, index, collection) {\n        return func.call(context, value, index, collection);\n      };\n      case 4: return function(accumulator, value, index, collection) {\n        return func.call(context, accumulator, value, index, collection);\n      };\n    }\n    return function() {\n      return func.apply(context, arguments);\n    };\n  };\n\n  // A mostly-internal function to generate callbacks that can be applied\n  // to each element in a collection, returning the desired result — either\n  // identity, an arbitrary callback, a property matcher, or a property accessor.\n  var cb = function(value, context, argCount) {\n    if (value == null) return _.identity;\n    if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n    if (_.isObject(value)) return _.matcher(value);\n    return _.property(value);\n  };\n  _.iteratee = function(value, context) {\n    return cb(value, context, Infinity);\n  };\n\n  // An internal function for creating assigner functions.\n  var createAssigner = function(keysFunc, undefinedOnly) {\n    return function(obj) {\n      var length = arguments.length;\n      if (length < 2 || obj == null) return obj;\n      for (var index = 1; index < length; index++) {\n        var source = arguments[index],\n            keys = keysFunc(source),\n            l = keys.length;\n        for (var i = 0; i < l; i++) {\n          var key = keys[i];\n          if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n        }\n      }\n      return obj;\n    };\n  };\n\n  // An internal function for creating a new object that inherits from another.\n  var baseCreate = function(prototype) {\n    if (!_.isObject(prototype)) return {};\n    if (nativeCreate) return nativeCreate(prototype);\n    Ctor.prototype = prototype;\n    var result = new Ctor;\n    Ctor.prototype = null;\n    return result;\n  };\n\n  var property = function(key) {\n    return function(obj) {\n      return obj == null ? void 0 : obj[key];\n    };\n  };\n\n  // Helper for collection methods to determine whether a collection\n  // should be iterated as an array or as an object\n  // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n  // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n  var getLength = property('length');\n  var isArrayLike = function(collection) {\n    var length = getLength(collection);\n    return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n  };\n\n  // Collection Functions\n  // --------------------\n\n  // The cornerstone, an `each` implementation, aka `forEach`.\n  // Handles raw objects in addition to array-likes. Treats all\n  // sparse array-likes as if they were dense.\n  _.each = _.forEach = function(obj, iteratee, context) {\n    iteratee = optimizeCb(iteratee, context);\n    var i, length;\n    if (isArrayLike(obj)) {\n      for (i = 0, length = obj.length; i < length; i++) {\n        iteratee(obj[i], i, obj);\n      }\n    } else {\n      var keys = _.keys(obj);\n      for (i = 0, length = keys.length; i < length; i++) {\n        iteratee(obj[keys[i]], keys[i], obj);\n      }\n    }\n    return obj;\n  };\n\n  // Return the results of applying the iteratee to each element.\n  _.map = _.collect = function(obj, iteratee, context) {\n    iteratee = cb(iteratee, context);\n    var keys = !isArrayLike(obj) && _.keys(obj),\n        length = (keys || obj).length,\n        results = Array(length);\n    for (var index = 0; index < length; index++) {\n      var currentKey = keys ? keys[index] : index;\n      results[index] = iteratee(obj[currentKey], currentKey, obj);\n    }\n    return results;\n  };\n\n  // Create a reducing function iterating left or right.\n  function createReduce(dir) {\n    // Optimized iterator function as using arguments.length\n    // in the main function will deoptimize the, see #1991.\n    function iterator(obj, iteratee, memo, keys, index, length) {\n      for (; index >= 0 && index < length; index += dir) {\n        var currentKey = keys ? keys[index] : index;\n        memo = iteratee(memo, obj[currentKey], currentKey, obj);\n      }\n      return memo;\n    }\n\n    return function(obj, iteratee, memo, context) {\n      iteratee = optimizeCb(iteratee, context, 4);\n      var keys = !isArrayLike(obj) && _.keys(obj),\n          length = (keys || obj).length,\n          index = dir > 0 ? 0 : length - 1;\n      // Determine the initial value if none is provided.\n      if (arguments.length < 3) {\n        memo = obj[keys ? keys[index] : index];\n        index += dir;\n      }\n      return iterator(obj, iteratee, memo, keys, index, length);\n    };\n  }\n\n  // **Reduce** builds up a single result from a list of values, aka `inject`,\n  // or `foldl`.\n  _.reduce = _.foldl = _.inject = createReduce(1);\n\n  // The right-associative version of reduce, also known as `foldr`.\n  _.reduceRight = _.foldr = createReduce(-1);\n\n  // Return the first value which passes a truth test. Aliased as `detect`.\n  _.find = _.detect = function(obj, predicate, context) {\n    var key;\n    if (isArrayLike(obj)) {\n      key = _.findIndex(obj, predicate, context);\n    } else {\n      key = _.findKey(obj, predicate, context);\n    }\n    if (key !== void 0 && key !== -1) return obj[key];\n  };\n\n  // Return all the elements that pass a truth test.\n  // Aliased as `select`.\n  _.filter = _.select = function(obj, predicate, context) {\n    var results = [];\n    predicate = cb(predicate, context);\n    _.each(obj, function(value, index, list) {\n      if (predicate(value, index, list)) results.push(value);\n    });\n    return results;\n  };\n\n  // Return all the elements for which a truth test fails.\n  _.reject = function(obj, predicate, context) {\n    return _.filter(obj, _.negate(cb(predicate)), context);\n  };\n\n  // Determine whether all of the elements match a truth test.\n  // Aliased as `all`.\n  _.every = _.all = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var keys = !isArrayLike(obj) && _.keys(obj),\n        length = (keys || obj).length;\n    for (var index = 0; index < length; index++) {\n      var currentKey = keys ? keys[index] : index;\n      if (!predicate(obj[currentKey], currentKey, obj)) return false;\n    }\n    return true;\n  };\n\n  // Determine if at least one element in the object matches a truth test.\n  // Aliased as `any`.\n  _.some = _.any = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var keys = !isArrayLike(obj) && _.keys(obj),\n        length = (keys || obj).length;\n    for (var index = 0; index < length; index++) {\n      var currentKey = keys ? keys[index] : index;\n      if (predicate(obj[currentKey], currentKey, obj)) return true;\n    }\n    return false;\n  };\n\n  // Determine if the array or object contains a given item (using `===`).\n  // Aliased as `includes` and `include`.\n  _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n    if (!isArrayLike(obj)) obj = _.values(obj);\n    if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n    return _.indexOf(obj, item, fromIndex) >= 0;\n  };\n\n  // Invoke a method (with arguments) on every item in a collection.\n  _.invoke = function(obj, method) {\n    var args = slice.call(arguments, 2);\n    var isFunc = _.isFunction(method);\n    return _.map(obj, function(value) {\n      var func = isFunc ? method : value[method];\n      return func == null ? func : func.apply(value, args);\n    });\n  };\n\n  // Convenience version of a common use case of `map`: fetching a property.\n  _.pluck = function(obj, key) {\n    return _.map(obj, _.property(key));\n  };\n\n  // Convenience version of a common use case of `filter`: selecting only objects\n  // containing specific `key:value` pairs.\n  _.where = function(obj, attrs) {\n    return _.filter(obj, _.matcher(attrs));\n  };\n\n  // Convenience version of a common use case of `find`: getting the first object\n  // containing specific `key:value` pairs.\n  _.findWhere = function(obj, attrs) {\n    return _.find(obj, _.matcher(attrs));\n  };\n\n  // Return the maximum element (or element-based computation).\n  _.max = function(obj, iteratee, context) {\n    var result = -Infinity, lastComputed = -Infinity,\n        value, computed;\n    if (iteratee == null && obj != null) {\n      obj = isArrayLike(obj) ? obj : _.values(obj);\n      for (var i = 0, length = obj.length; i < length; i++) {\n        value = obj[i];\n        if (value > result) {\n          result = value;\n        }\n      }\n    } else {\n      iteratee = cb(iteratee, context);\n      _.each(obj, function(value, index, list) {\n        computed = iteratee(value, index, list);\n        if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n          result = value;\n          lastComputed = computed;\n        }\n      });\n    }\n    return result;\n  };\n\n  // Return the minimum element (or element-based computation).\n  _.min = function(obj, iteratee, context) {\n    var result = Infinity, lastComputed = Infinity,\n        value, computed;\n    if (iteratee == null && obj != null) {\n      obj = isArrayLike(obj) ? obj : _.values(obj);\n      for (var i = 0, length = obj.length; i < length; i++) {\n        value = obj[i];\n        if (value < result) {\n          result = value;\n        }\n      }\n    } else {\n      iteratee = cb(iteratee, context);\n      _.each(obj, function(value, index, list) {\n        computed = iteratee(value, index, list);\n        if (computed < lastComputed || computed === Infinity && result === Infinity) {\n          result = value;\n          lastComputed = computed;\n        }\n      });\n    }\n    return result;\n  };\n\n  // Shuffle a collection, using the modern version of the\n  // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n  _.shuffle = function(obj) {\n    var set = isArrayLike(obj) ? obj : _.values(obj);\n    var length = set.length;\n    var shuffled = Array(length);\n    for (var index = 0, rand; index < length; index++) {\n      rand = _.random(0, index);\n      if (rand !== index) shuffled[index] = shuffled[rand];\n      shuffled[rand] = set[index];\n    }\n    return shuffled;\n  };\n\n  // Sample **n** random values from a collection.\n  // If **n** is not specified, returns a single random element.\n  // The internal `guard` argument allows it to work with `map`.\n  _.sample = function(obj, n, guard) {\n    if (n == null || guard) {\n      if (!isArrayLike(obj)) obj = _.values(obj);\n      return obj[_.random(obj.length - 1)];\n    }\n    return _.shuffle(obj).slice(0, Math.max(0, n));\n  };\n\n  // Sort the object's values by a criterion produced by an iteratee.\n  _.sortBy = function(obj, iteratee, context) {\n    iteratee = cb(iteratee, context);\n    return _.pluck(_.map(obj, function(value, index, list) {\n      return {\n        value: value,\n        index: index,\n        criteria: iteratee(value, index, list)\n      };\n    }).sort(function(left, right) {\n      var a = left.criteria;\n      var b = right.criteria;\n      if (a !== b) {\n        if (a > b || a === void 0) return 1;\n        if (a < b || b === void 0) return -1;\n      }\n      return left.index - right.index;\n    }), 'value');\n  };\n\n  // An internal function used for aggregate \"group by\" operations.\n  var group = function(behavior) {\n    return function(obj, iteratee, context) {\n      var result = {};\n      iteratee = cb(iteratee, context);\n      _.each(obj, function(value, index) {\n        var key = iteratee(value, index, obj);\n        behavior(result, value, key);\n      });\n      return result;\n    };\n  };\n\n  // Groups the object's values by a criterion. Pass either a string attribute\n  // to group by, or a function that returns the criterion.\n  _.groupBy = group(function(result, value, key) {\n    if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n  });\n\n  // Indexes the object's values by a criterion, similar to `groupBy`, but for\n  // when you know that your index values will be unique.\n  _.indexBy = group(function(result, value, key) {\n    result[key] = value;\n  });\n\n  // Counts instances of an object that group by a certain criterion. Pass\n  // either a string attribute to count by, or a function that returns the\n  // criterion.\n  _.countBy = group(function(result, value, key) {\n    if (_.has(result, key)) result[key]++; else result[key] = 1;\n  });\n\n  // Safely create a real, live array from anything iterable.\n  _.toArray = function(obj) {\n    if (!obj) return [];\n    if (_.isArray(obj)) return slice.call(obj);\n    if (isArrayLike(obj)) return _.map(obj, _.identity);\n    return _.values(obj);\n  };\n\n  // Return the number of elements in an object.\n  _.size = function(obj) {\n    if (obj == null) return 0;\n    return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n  };\n\n  // Split a collection into two arrays: one whose elements all satisfy the given\n  // predicate, and one whose elements all do not satisfy the predicate.\n  _.partition = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var pass = [], fail = [];\n    _.each(obj, function(value, key, obj) {\n      (predicate(value, key, obj) ? pass : fail).push(value);\n    });\n    return [pass, fail];\n  };\n\n  // Array Functions\n  // ---------------\n\n  // Get the first element of an array. Passing **n** will return the first N\n  // values in the array. Aliased as `head` and `take`. The **guard** check\n  // allows it to work with `_.map`.\n  _.first = _.head = _.take = function(array, n, guard) {\n    if (array == null) return void 0;\n    if (n == null || guard) return array[0];\n    return _.initial(array, array.length - n);\n  };\n\n  // Returns everything but the last entry of the array. Especially useful on\n  // the arguments object. Passing **n** will return all the values in\n  // the array, excluding the last N.\n  _.initial = function(array, n, guard) {\n    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n  };\n\n  // Get the last element of an array. Passing **n** will return the last N\n  // values in the array.\n  _.last = function(array, n, guard) {\n    if (array == null) return void 0;\n    if (n == null || guard) return array[array.length - 1];\n    return _.rest(array, Math.max(0, array.length - n));\n  };\n\n  // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n  // Especially useful on the arguments object. Passing an **n** will return\n  // the rest N values in the array.\n  _.rest = _.tail = _.drop = function(array, n, guard) {\n    return slice.call(array, n == null || guard ? 1 : n);\n  };\n\n  // Trim out all falsy values from an array.\n  _.compact = function(array) {\n    return _.filter(array, _.identity);\n  };\n\n  // Internal implementation of a recursive `flatten` function.\n  var flatten = function(input, shallow, strict, startIndex) {\n    var output = [], idx = 0;\n    for (var i = startIndex || 0, length = getLength(input); i < length; i++) {\n      var value = input[i];\n      if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n        //flatten current level of array or arguments object\n        if (!shallow) value = flatten(value, shallow, strict);\n        var j = 0, len = value.length;\n        output.length += len;\n        while (j < len) {\n          output[idx++] = value[j++];\n        }\n      } else if (!strict) {\n        output[idx++] = value;\n      }\n    }\n    return output;\n  };\n\n  // Flatten out an array, either recursively (by default), or just one level.\n  _.flatten = function(array, shallow) {\n    return flatten(array, shallow, false);\n  };\n\n  // Return a version of the array that does not contain the specified value(s).\n  _.without = function(array) {\n    return _.difference(array, slice.call(arguments, 1));\n  };\n\n  // Produce a duplicate-free version of the array. If the array has already\n  // been sorted, you have the option of using a faster algorithm.\n  // Aliased as `unique`.\n  _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n    if (!_.isBoolean(isSorted)) {\n      context = iteratee;\n      iteratee = isSorted;\n      isSorted = false;\n    }\n    if (iteratee != null) iteratee = cb(iteratee, context);\n    var result = [];\n    var seen = [];\n    for (var i = 0, length = getLength(array); i < length; i++) {\n      var value = array[i],\n          computed = iteratee ? iteratee(value, i, array) : value;\n      if (isSorted) {\n        if (!i || seen !== computed) result.push(value);\n        seen = computed;\n      } else if (iteratee) {\n        if (!_.contains(seen, computed)) {\n          seen.push(computed);\n          result.push(value);\n        }\n      } else if (!_.contains(result, value)) {\n        result.push(value);\n      }\n    }\n    return result;\n  };\n\n  // Produce an array that contains the union: each distinct element from all of\n  // the passed-in arrays.\n  _.union = function() {\n    return _.uniq(flatten(arguments, true, true));\n  };\n\n  // Produce an array that contains every item shared between all the\n  // passed-in arrays.\n  _.intersection = function(array) {\n    var result = [];\n    var argsLength = arguments.length;\n    for (var i = 0, length = getLength(array); i < length; i++) {\n      var item = array[i];\n      if (_.contains(result, item)) continue;\n      for (var j = 1; j < argsLength; j++) {\n        if (!_.contains(arguments[j], item)) break;\n      }\n      if (j === argsLength) result.push(item);\n    }\n    return result;\n  };\n\n  // Take the difference between one array and a number of other arrays.\n  // Only the elements present in just the first array will remain.\n  _.difference = function(array) {\n    var rest = flatten(arguments, true, true, 1);\n    return _.filter(array, function(value){\n      return !_.contains(rest, value);\n    });\n  };\n\n  // Zip together multiple lists into a single array -- elements that share\n  // an index go together.\n  _.zip = function() {\n    return _.unzip(arguments);\n  };\n\n  // Complement of _.zip. Unzip accepts an array of arrays and groups\n  // each array's elements on shared indices\n  _.unzip = function(array) {\n    var length = array && _.max(array, getLength).length || 0;\n    var result = Array(length);\n\n    for (var index = 0; index < length; index++) {\n      result[index] = _.pluck(array, index);\n    }\n    return result;\n  };\n\n  // Converts lists into objects. Pass either a single array of `[key, value]`\n  // pairs, or two parallel arrays of the same length -- one of keys, and one of\n  // the corresponding values.\n  _.object = function(list, values) {\n    var result = {};\n    for (var i = 0, length = getLength(list); i < length; i++) {\n      if (values) {\n        result[list[i]] = values[i];\n      } else {\n        result[list[i][0]] = list[i][1];\n      }\n    }\n    return result;\n  };\n\n  // Generator function to create the findIndex and findLastIndex functions\n  function createPredicateIndexFinder(dir) {\n    return function(array, predicate, context) {\n      predicate = cb(predicate, context);\n      var length = getLength(array);\n      var index = dir > 0 ? 0 : length - 1;\n      for (; index >= 0 && index < length; index += dir) {\n        if (predicate(array[index], index, array)) return index;\n      }\n      return -1;\n    };\n  }\n\n  // Returns the first index on an array-like that passes a predicate test\n  _.findIndex = createPredicateIndexFinder(1);\n  _.findLastIndex = createPredicateIndexFinder(-1);\n\n  // Use a comparator function to figure out the smallest index at which\n  // an object should be inserted so as to maintain order. Uses binary search.\n  _.sortedIndex = function(array, obj, iteratee, context) {\n    iteratee = cb(iteratee, context, 1);\n    var value = iteratee(obj);\n    var low = 0, high = getLength(array);\n    while (low < high) {\n      var mid = Math.floor((low + high) / 2);\n      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n    }\n    return low;\n  };\n\n  // Generator function to create the indexOf and lastIndexOf functions\n  function createIndexFinder(dir, predicateFind, sortedIndex) {\n    return function(array, item, idx) {\n      var i = 0, length = getLength(array);\n      if (typeof idx == 'number') {\n        if (dir > 0) {\n            i = idx >= 0 ? idx : Math.max(idx + length, i);\n        } else {\n            length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n        }\n      } else if (sortedIndex && idx && length) {\n        idx = sortedIndex(array, item);\n        return array[idx] === item ? idx : -1;\n      }\n      if (item !== item) {\n        idx = predicateFind(slice.call(array, i, length), _.isNaN);\n        return idx >= 0 ? idx + i : -1;\n      }\n      for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n        if (array[idx] === item) return idx;\n      }\n      return -1;\n    };\n  }\n\n  // Return the position of the first occurrence of an item in an array,\n  // or -1 if the item is not included in the array.\n  // If the array is large and already in sort order, pass `true`\n  // for **isSorted** to use binary search.\n  _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n  _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n  // Generate an integer Array containing an arithmetic progression. A port of\n  // the native Python `range()` function. See\n  // [the Python documentation](http://docs.python.org/library/functions.html#range).\n  _.range = function(start, stop, step) {\n    if (stop == null) {\n      stop = start || 0;\n      start = 0;\n    }\n    step = step || 1;\n\n    var length = Math.max(Math.ceil((stop - start) / step), 0);\n    var range = Array(length);\n\n    for (var idx = 0; idx < length; idx++, start += step) {\n      range[idx] = start;\n    }\n\n    return range;\n  };\n\n  // Function (ahem) Functions\n  // ------------------\n\n  // Determines whether to execute a function as a constructor\n  // or a normal function with the provided arguments\n  var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n    var self = baseCreate(sourceFunc.prototype);\n    var result = sourceFunc.apply(self, args);\n    if (_.isObject(result)) return result;\n    return self;\n  };\n\n  // Create a function bound to a given object (assigning `this`, and arguments,\n  // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n  // available.\n  _.bind = function(func, context) {\n    if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n    if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n    var args = slice.call(arguments, 2);\n    var bound = function() {\n      return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n    };\n    return bound;\n  };\n\n  // Partially apply a function by creating a version that has had some of its\n  // arguments pre-filled, without changing its dynamic `this` context. _ acts\n  // as a placeholder, allowing any combination of arguments to be pre-filled.\n  _.partial = function(func) {\n    var boundArgs = slice.call(arguments, 1);\n    var bound = function() {\n      var position = 0, length = boundArgs.length;\n      var args = Array(length);\n      for (var i = 0; i < length; i++) {\n        args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n      }\n      while (position < arguments.length) args.push(arguments[position++]);\n      return executeBound(func, bound, this, this, args);\n    };\n    return bound;\n  };\n\n  // Bind a number of an object's methods to that object. Remaining arguments\n  // are the method names to be bound. Useful for ensuring that all callbacks\n  // defined on an object belong to it.\n  _.bindAll = function(obj) {\n    var i, length = arguments.length, key;\n    if (length <= 1) throw new Error('bindAll must be passed function names');\n    for (i = 1; i < length; i++) {\n      key = arguments[i];\n      obj[key] = _.bind(obj[key], obj);\n    }\n    return obj;\n  };\n\n  // Memoize an expensive function by storing its results.\n  _.memoize = function(func, hasher) {\n    var memoize = function(key) {\n      var cache = memoize.cache;\n      var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n      if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n      return cache[address];\n    };\n    memoize.cache = {};\n    return memoize;\n  };\n\n  // Delays a function for the given number of milliseconds, and then calls\n  // it with the arguments supplied.\n  _.delay = function(func, wait) {\n    var args = slice.call(arguments, 2);\n    return setTimeout(function(){\n      return func.apply(null, args);\n    }, wait);\n  };\n\n  // Defers a function, scheduling it to run after the current call stack has\n  // cleared.\n  _.defer = _.partial(_.delay, _, 1);\n\n  // Returns a function, that, when invoked, will only be triggered at most once\n  // during a given window of time. Normally, the throttled function will run\n  // as much as it can, without ever going more than once per `wait` duration;\n  // but if you'd like to disable the execution on the leading edge, pass\n  // `{leading: false}`. To disable execution on the trailing edge, ditto.\n  _.throttle = function(func, wait, options) {\n    var context, args, result;\n    var timeout = null;\n    var previous = 0;\n    if (!options) options = {};\n    var later = function() {\n      previous = options.leading === false ? 0 : _.now();\n      timeout = null;\n      result = func.apply(context, args);\n      if (!timeout) context = args = null;\n    };\n    return function() {\n      var now = _.now();\n      if (!previous && options.leading === false) previous = now;\n      var remaining = wait - (now - previous);\n      context = this;\n      args = arguments;\n      if (remaining <= 0 || remaining > wait) {\n        if (timeout) {\n          clearTimeout(timeout);\n          timeout = null;\n        }\n        previous = now;\n        result = func.apply(context, args);\n        if (!timeout) context = args = null;\n      } else if (!timeout && options.trailing !== false) {\n        timeout = setTimeout(later, remaining);\n      }\n      return result;\n    };\n  };\n\n  // Returns a function, that, as long as it continues to be invoked, will not\n  // be triggered. The function will be called after it stops being called for\n  // N milliseconds. If `immediate` is passed, trigger the function on the\n  // leading edge, instead of the trailing.\n  _.debounce = function(func, wait, immediate) {\n    var timeout, args, context, timestamp, result;\n\n    var later = function() {\n      var last = _.now() - timestamp;\n\n      if (last < wait && last >= 0) {\n        timeout = setTimeout(later, wait - last);\n      } else {\n        timeout = null;\n        if (!immediate) {\n          result = func.apply(context, args);\n          if (!timeout) context = args = null;\n        }\n      }\n    };\n\n    return function() {\n      context = this;\n      args = arguments;\n      timestamp = _.now();\n      var callNow = immediate && !timeout;\n      if (!timeout) timeout = setTimeout(later, wait);\n      if (callNow) {\n        result = func.apply(context, args);\n        context = args = null;\n      }\n\n      return result;\n    };\n  };\n\n  // Returns the first function passed as an argument to the second,\n  // allowing you to adjust arguments, run code before and after, and\n  // conditionally execute the original function.\n  _.wrap = function(func, wrapper) {\n    return _.partial(wrapper, func);\n  };\n\n  // Returns a negated version of the passed-in predicate.\n  _.negate = function(predicate) {\n    return function() {\n      return !predicate.apply(this, arguments);\n    };\n  };\n\n  // Returns a function that is the composition of a list of functions, each\n  // consuming the return value of the function that follows.\n  _.compose = function() {\n    var args = arguments;\n    var start = args.length - 1;\n    return function() {\n      var i = start;\n      var result = args[start].apply(this, arguments);\n      while (i--) result = args[i].call(this, result);\n      return result;\n    };\n  };\n\n  // Returns a function that will only be executed on and after the Nth call.\n  _.after = function(times, func) {\n    return function() {\n      if (--times < 1) {\n        return func.apply(this, arguments);\n      }\n    };\n  };\n\n  // Returns a function that will only be executed up to (but not including) the Nth call.\n  _.before = function(times, func) {\n    var memo;\n    return function() {\n      if (--times > 0) {\n        memo = func.apply(this, arguments);\n      }\n      if (times <= 1) func = null;\n      return memo;\n    };\n  };\n\n  // Returns a function that will be executed at most one time, no matter how\n  // often you call it. Useful for lazy initialization.\n  _.once = _.partial(_.before, 2);\n\n  // Object Functions\n  // ----------------\n\n  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n                      'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n  function collectNonEnumProps(obj, keys) {\n    var nonEnumIdx = nonEnumerableProps.length;\n    var constructor = obj.constructor;\n    var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\n    // Constructor is a special case.\n    var prop = 'constructor';\n    if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n    while (nonEnumIdx--) {\n      prop = nonEnumerableProps[nonEnumIdx];\n      if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n        keys.push(prop);\n      }\n    }\n  }\n\n  // Retrieve the names of an object's own properties.\n  // Delegates to **ECMAScript 5**'s native `Object.keys`\n  _.keys = function(obj) {\n    if (!_.isObject(obj)) return [];\n    if (nativeKeys) return nativeKeys(obj);\n    var keys = [];\n    for (var key in obj) if (_.has(obj, key)) keys.push(key);\n    // Ahem, IE < 9.\n    if (hasEnumBug) collectNonEnumProps(obj, keys);\n    return keys;\n  };\n\n  // Retrieve all the property names of an object.\n  _.allKeys = function(obj) {\n    if (!_.isObject(obj)) return [];\n    var keys = [];\n    for (var key in obj) keys.push(key);\n    // Ahem, IE < 9.\n    if (hasEnumBug) collectNonEnumProps(obj, keys);\n    return keys;\n  };\n\n  // Retrieve the values of an object's properties.\n  _.values = function(obj) {\n    var keys = _.keys(obj);\n    var length = keys.length;\n    var values = Array(length);\n    for (var i = 0; i < length; i++) {\n      values[i] = obj[keys[i]];\n    }\n    return values;\n  };\n\n  // Returns the results of applying the iteratee to each element of the object\n  // In contrast to _.map it returns an object\n  _.mapObject = function(obj, iteratee, context) {\n    iteratee = cb(iteratee, context);\n    var keys =  _.keys(obj),\n          length = keys.length,\n          results = {},\n          currentKey;\n      for (var index = 0; index < length; index++) {\n        currentKey = keys[index];\n        results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n      }\n      return results;\n  };\n\n  // Convert an object into a list of `[key, value]` pairs.\n  _.pairs = function(obj) {\n    var keys = _.keys(obj);\n    var length = keys.length;\n    var pairs = Array(length);\n    for (var i = 0; i < length; i++) {\n      pairs[i] = [keys[i], obj[keys[i]]];\n    }\n    return pairs;\n  };\n\n  // Invert the keys and values of an object. The values must be serializable.\n  _.invert = function(obj) {\n    var result = {};\n    var keys = _.keys(obj);\n    for (var i = 0, length = keys.length; i < length; i++) {\n      result[obj[keys[i]]] = keys[i];\n    }\n    return result;\n  };\n\n  // Return a sorted list of the function names available on the object.\n  // Aliased as `methods`\n  _.functions = _.methods = function(obj) {\n    var names = [];\n    for (var key in obj) {\n      if (_.isFunction(obj[key])) names.push(key);\n    }\n    return names.sort();\n  };\n\n  // Extend a given object with all the properties in passed-in object(s).\n  _.extend = createAssigner(_.allKeys);\n\n  // Assigns a given object with all the own properties in the passed-in object(s)\n  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n  _.extendOwn = _.assign = createAssigner(_.keys);\n\n  // Returns the first key on an object that passes a predicate test\n  _.findKey = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var keys = _.keys(obj), key;\n    for (var i = 0, length = keys.length; i < length; i++) {\n      key = keys[i];\n      if (predicate(obj[key], key, obj)) return key;\n    }\n  };\n\n  // Return a copy of the object only containing the whitelisted properties.\n  _.pick = function(object, oiteratee, context) {\n    var result = {}, obj = object, iteratee, keys;\n    if (obj == null) return result;\n    if (_.isFunction(oiteratee)) {\n      keys = _.allKeys(obj);\n      iteratee = optimizeCb(oiteratee, context);\n    } else {\n      keys = flatten(arguments, false, false, 1);\n      iteratee = function(value, key, obj) { return key in obj; };\n      obj = Object(obj);\n    }\n    for (var i = 0, length = keys.length; i < length; i++) {\n      var key = keys[i];\n      var value = obj[key];\n      if (iteratee(value, key, obj)) result[key] = value;\n    }\n    return result;\n  };\n\n   // Return a copy of the object without the blacklisted properties.\n  _.omit = function(obj, iteratee, context) {\n    if (_.isFunction(iteratee)) {\n      iteratee = _.negate(iteratee);\n    } else {\n      var keys = _.map(flatten(arguments, false, false, 1), String);\n      iteratee = function(value, key) {\n        return !_.contains(keys, key);\n      };\n    }\n    return _.pick(obj, iteratee, context);\n  };\n\n  // Fill in a given object with default properties.\n  _.defaults = createAssigner(_.allKeys, true);\n\n  // Creates an object that inherits from the given prototype object.\n  // If additional properties are provided then they will be added to the\n  // created object.\n  _.create = function(prototype, props) {\n    var result = baseCreate(prototype);\n    if (props) _.extendOwn(result, props);\n    return result;\n  };\n\n  // Create a (shallow-cloned) duplicate of an object.\n  _.clone = function(obj) {\n    if (!_.isObject(obj)) return obj;\n    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n  };\n\n  // Invokes interceptor with the obj, and then returns obj.\n  // The primary purpose of this method is to \"tap into\" a method chain, in\n  // order to perform operations on intermediate results within the chain.\n  _.tap = function(obj, interceptor) {\n    interceptor(obj);\n    return obj;\n  };\n\n  // Returns whether an object has a given set of `key:value` pairs.\n  _.isMatch = function(object, attrs) {\n    var keys = _.keys(attrs), length = keys.length;\n    if (object == null) return !length;\n    var obj = Object(object);\n    for (var i = 0; i < length; i++) {\n      var key = keys[i];\n      if (attrs[key] !== obj[key] || !(key in obj)) return false;\n    }\n    return true;\n  };\n\n\n  // Internal recursive comparison function for `isEqual`.\n  var eq = function(a, b, aStack, bStack) {\n    // Identical objects are equal. `0 === -0`, but they aren't identical.\n    // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n    if (a === b) return a !== 0 || 1 / a === 1 / b;\n    // A strict comparison is necessary because `null == undefined`.\n    if (a == null || b == null) return a === b;\n    // Unwrap any wrapped objects.\n    if (a instanceof _) a = a._wrapped;\n    if (b instanceof _) b = b._wrapped;\n    // Compare `[[Class]]` names.\n    var className = toString.call(a);\n    if (className !== toString.call(b)) return false;\n    switch (className) {\n      // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n      case '[object RegExp]':\n      // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n      case '[object String]':\n        // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n        // equivalent to `new String(\"5\")`.\n        return '' + a === '' + b;\n      case '[object Number]':\n        // `NaN`s are equivalent, but non-reflexive.\n        // Object(NaN) is equivalent to NaN\n        if (+a !== +a) return +b !== +b;\n        // An `egal` comparison is performed for other numeric values.\n        return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n      case '[object Date]':\n      case '[object Boolean]':\n        // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n        // millisecond representations. Note that invalid dates with millisecond representations\n        // of `NaN` are not equivalent.\n        return +a === +b;\n    }\n\n    var areArrays = className === '[object Array]';\n    if (!areArrays) {\n      if (typeof a != 'object' || typeof b != 'object') return false;\n\n      // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n      // from different frames are.\n      var aCtor = a.constructor, bCtor = b.constructor;\n      if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n                               _.isFunction(bCtor) && bCtor instanceof bCtor)\n                          && ('constructor' in a && 'constructor' in b)) {\n        return false;\n      }\n    }\n    // Assume equality for cyclic structures. The algorithm for detecting cyclic\n    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n    // Initializing stack of traversed objects.\n    // It's done here since we only need them for objects and arrays comparison.\n    aStack = aStack || [];\n    bStack = bStack || [];\n    var length = aStack.length;\n    while (length--) {\n      // Linear search. Performance is inversely proportional to the number of\n      // unique nested structures.\n      if (aStack[length] === a) return bStack[length] === b;\n    }\n\n    // Add the first object to the stack of traversed objects.\n    aStack.push(a);\n    bStack.push(b);\n\n    // Recursively compare objects and arrays.\n    if (areArrays) {\n      // Compare array lengths to determine if a deep comparison is necessary.\n      length = a.length;\n      if (length !== b.length) return false;\n      // Deep compare the contents, ignoring non-numeric properties.\n      while (length--) {\n        if (!eq(a[length], b[length], aStack, bStack)) return false;\n      }\n    } else {\n      // Deep compare objects.\n      var keys = _.keys(a), key;\n      length = keys.length;\n      // Ensure that both objects contain the same number of properties before comparing deep equality.\n      if (_.keys(b).length !== length) return false;\n      while (length--) {\n        // Deep compare each member\n        key = keys[length];\n        if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n      }\n    }\n    // Remove the first object from the stack of traversed objects.\n    aStack.pop();\n    bStack.pop();\n    return true;\n  };\n\n  // Perform a deep comparison to check if two objects are equal.\n  _.isEqual = function(a, b) {\n    return eq(a, b);\n  };\n\n  // Is a given array, string, or object empty?\n  // An \"empty\" object has no enumerable own-properties.\n  _.isEmpty = function(obj) {\n    if (obj == null) return true;\n    if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n    return _.keys(obj).length === 0;\n  };\n\n  // Is a given value a DOM element?\n  _.isElement = function(obj) {\n    return !!(obj && obj.nodeType === 1);\n  };\n\n  // Is a given value an array?\n  // Delegates to ECMA5's native Array.isArray\n  _.isArray = nativeIsArray || function(obj) {\n    return toString.call(obj) === '[object Array]';\n  };\n\n  // Is a given variable an object?\n  _.isObject = function(obj) {\n    var type = typeof obj;\n    return type === 'function' || type === 'object' && !!obj;\n  };\n\n  // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n  _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n    _['is' + name] = function(obj) {\n      return toString.call(obj) === '[object ' + name + ']';\n    };\n  });\n\n  // Define a fallback version of the method in browsers (ahem, IE < 9), where\n  // there isn't any inspectable \"Arguments\" type.\n  if (!_.isArguments(arguments)) {\n    _.isArguments = function(obj) {\n      return _.has(obj, 'callee');\n    };\n  }\n\n  // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n  // IE 11 (#1621), and in Safari 8 (#1929).\n  if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n    _.isFunction = function(obj) {\n      return typeof obj == 'function' || false;\n    };\n  }\n\n  // Is a given object a finite number?\n  _.isFinite = function(obj) {\n    return isFinite(obj) && !isNaN(parseFloat(obj));\n  };\n\n  // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n  _.isNaN = function(obj) {\n    return _.isNumber(obj) && obj !== +obj;\n  };\n\n  // Is a given value a boolean?\n  _.isBoolean = function(obj) {\n    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n  };\n\n  // Is a given value equal to null?\n  _.isNull = function(obj) {\n    return obj === null;\n  };\n\n  // Is a given variable undefined?\n  _.isUndefined = function(obj) {\n    return obj === void 0;\n  };\n\n  // Shortcut function for checking if an object has a given property directly\n  // on itself (in other words, not on a prototype).\n  _.has = function(obj, key) {\n    return obj != null && hasOwnProperty.call(obj, key);\n  };\n\n  // Utility Functions\n  // -----------------\n\n  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n  // previous owner. Returns a reference to the Underscore object.\n  _.noConflict = function() {\n    root._ = previousUnderscore;\n    return this;\n  };\n\n  // Keep the identity function around for default iteratees.\n  _.identity = function(value) {\n    return value;\n  };\n\n  // Predicate-generating functions. Often useful outside of Underscore.\n  _.constant = function(value) {\n    return function() {\n      return value;\n    };\n  };\n\n  _.noop = function(){};\n\n  _.property = property;\n\n  // Generates a function for a given object that returns a given property.\n  _.propertyOf = function(obj) {\n    return obj == null ? function(){} : function(key) {\n      return obj[key];\n    };\n  };\n\n  // Returns a predicate for checking whether an object has a given set of\n  // `key:value` pairs.\n  _.matcher = _.matches = function(attrs) {\n    attrs = _.extendOwn({}, attrs);\n    return function(obj) {\n      return _.isMatch(obj, attrs);\n    };\n  };\n\n  // Run a function **n** times.\n  _.times = function(n, iteratee, context) {\n    var accum = Array(Math.max(0, n));\n    iteratee = optimizeCb(iteratee, context, 1);\n    for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n    return accum;\n  };\n\n  // Return a random integer between min and max (inclusive).\n  _.random = function(min, max) {\n    if (max == null) {\n      max = min;\n      min = 0;\n    }\n    return min + Math.floor(Math.random() * (max - min + 1));\n  };\n\n  // A (possibly faster) way to get the current timestamp as an integer.\n  _.now = Date.now || function() {\n    return new Date().getTime();\n  };\n\n   // List of HTML entities for escaping.\n  var escapeMap = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#x27;',\n    '`': '&#x60;'\n  };\n  var unescapeMap = _.invert(escapeMap);\n\n  // Functions for escaping and unescaping strings to/from HTML interpolation.\n  var createEscaper = function(map) {\n    var escaper = function(match) {\n      return map[match];\n    };\n    // Regexes for identifying a key that needs to be escaped\n    var source = '(?:' + _.keys(map).join('|') + ')';\n    var testRegexp = RegExp(source);\n    var replaceRegexp = RegExp(source, 'g');\n    return function(string) {\n      string = string == null ? '' : '' + string;\n      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n    };\n  };\n  _.escape = createEscaper(escapeMap);\n  _.unescape = createEscaper(unescapeMap);\n\n  // If the value of the named `property` is a function then invoke it with the\n  // `object` as context; otherwise, return it.\n  _.result = function(object, property, fallback) {\n    var value = object == null ? void 0 : object[property];\n    if (value === void 0) {\n      value = fallback;\n    }\n    return _.isFunction(value) ? value.call(object) : value;\n  };\n\n  // Generate a unique integer id (unique within the entire client session).\n  // Useful for temporary DOM ids.\n  var idCounter = 0;\n  _.uniqueId = function(prefix) {\n    var id = ++idCounter + '';\n    return prefix ? prefix + id : id;\n  };\n\n  // By default, Underscore uses ERB-style template delimiters, change the\n  // following template settings to use alternative delimiters.\n  _.templateSettings = {\n    evaluate    : /<%([\\s\\S]+?)%>/g,\n    interpolate : /<%=([\\s\\S]+?)%>/g,\n    escape      : /<%-([\\s\\S]+?)%>/g\n  };\n\n  // When customizing `templateSettings`, if you don't want to define an\n  // interpolation, evaluation or escaping regex, we need one that is\n  // guaranteed not to match.\n  var noMatch = /(.)^/;\n\n  // Certain characters need to be escaped so that they can be put into a\n  // string literal.\n  var escapes = {\n    \"'\":      \"'\",\n    '\\\\':     '\\\\',\n    '\\r':     'r',\n    '\\n':     'n',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n  var escapeChar = function(match) {\n    return '\\\\' + escapes[match];\n  };\n\n  // JavaScript micro-templating, similar to John Resig's implementation.\n  // Underscore templating handles arbitrary delimiters, preserves whitespace,\n  // and correctly escapes quotes within interpolated code.\n  // NB: `oldSettings` only exists for backwards compatibility.\n  _.template = function(text, settings, oldSettings) {\n    if (!settings && oldSettings) settings = oldSettings;\n    settings = _.defaults({}, settings, _.templateSettings);\n\n    // Combine delimiters into one regular expression via alternation.\n    var matcher = RegExp([\n      (settings.escape || noMatch).source,\n      (settings.interpolate || noMatch).source,\n      (settings.evaluate || noMatch).source\n    ].join('|') + '|$', 'g');\n\n    // Compile the template source, escaping string literals appropriately.\n    var index = 0;\n    var source = \"__p+='\";\n    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n      source += text.slice(index, offset).replace(escaper, escapeChar);\n      index = offset + match.length;\n\n      if (escape) {\n        source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n      } else if (interpolate) {\n        source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n      } else if (evaluate) {\n        source += \"';\\n\" + evaluate + \"\\n__p+='\";\n      }\n\n      // Adobe VMs need the match returned to produce the correct offest.\n      return match;\n    });\n    source += \"';\\n\";\n\n    // If a variable is not specified, place data values in local scope.\n    if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n    source = \"var __t,__p='',__j=Array.prototype.join,\" +\n      \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n      source + 'return __p;\\n';\n\n    try {\n      var render = new Function(settings.variable || 'obj', '_', source);\n    } catch (e) {\n      e.source = source;\n      throw e;\n    }\n\n    var template = function(data) {\n      return render.call(this, data, _);\n    };\n\n    // Provide the compiled source as a convenience for precompilation.\n    var argument = settings.variable || 'obj';\n    template.source = 'function(' + argument + '){\\n' + source + '}';\n\n    return template;\n  };\n\n  // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n  _.chain = function(obj) {\n    var instance = _(obj);\n    instance._chain = true;\n    return instance;\n  };\n\n  // OOP\n  // ---------------\n  // If Underscore is called as a function, it returns a wrapped object that\n  // can be used OO-style. This wrapper holds altered versions of all the\n  // underscore functions. Wrapped objects may be chained.\n\n  // Helper function to continue chaining intermediate results.\n  var result = function(instance, obj) {\n    return instance._chain ? _(obj).chain() : obj;\n  };\n\n  // Add your own custom functions to the Underscore object.\n  _.mixin = function(obj) {\n    _.each(_.functions(obj), function(name) {\n      var func = _[name] = obj[name];\n      _.prototype[name] = function() {\n        var args = [this._wrapped];\n        push.apply(args, arguments);\n        return result(this, func.apply(_, args));\n      };\n    });\n  };\n\n  // Add all of the Underscore functions to the wrapper object.\n  _.mixin(_);\n\n  // Add all mutator Array functions to the wrapper.\n  _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n    var method = ArrayProto[name];\n    _.prototype[name] = function() {\n      var obj = this._wrapped;\n      method.apply(obj, arguments);\n      if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n      return result(this, obj);\n    };\n  });\n\n  // Add all accessor Array functions to the wrapper.\n  _.each(['concat', 'join', 'slice'], function(name) {\n    var method = ArrayProto[name];\n    _.prototype[name] = function() {\n      return result(this, method.apply(this._wrapped, arguments));\n    };\n  });\n\n  // Extracts the result from a wrapped and chained object.\n  _.prototype.value = function() {\n    return this._wrapped;\n  };\n\n  // Provide unwrapping proxy for some methods used in engine operations\n  // such as arithmetic and JSON stringification.\n  _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n  _.prototype.toString = function() {\n    return '' + this._wrapped;\n  };\n\n  // AMD registration happens at the end for compatibility with AMD loaders\n  // that may not enforce next-turn semantics on modules. Even though general\n  // practice for AMD registration is to be anonymous, underscore registers\n  // as a named module because, like jQuery, it is a base library that is\n  // popular enough to be bundled in a third party lib, but not be part of\n  // an AMD load request. Those cases could generate an error when an\n  // anonymous define() is called outside of a loader request.\n  if (typeof define === 'function' && define.amd) {\n    define('underscore', [], function() {\n      return _;\n    });\n  }\n}.call(this));\n",
     "\"use strict\";\nvar errorObject_1 = require('./errorObject');\nvar tryCatchTarget;\nfunction tryCatcher() {\n    try {\n        return tryCatchTarget.apply(this, arguments);\n    }\n    catch (e) {\n        errorObject_1.errorObject.e = e;\n        return errorObject_1.errorObject;\n    }\n}\nfunction tryCatch(fn) {\n    tryCatchTarget = fn;\n    return tryCatcher;\n}\nexports.tryCatch = tryCatch;\n;\n//# sourceMappingURL=tryCatch.js.map",
     "// threejs.org/license\n(function(l,oa){\"object\"===typeof exports&&\"undefined\"!==typeof module?oa(exports):\"function\"===typeof define&&define.amd?define([\"exports\"],oa):oa(l.THREE=l.THREE||{})})(this,function(l){function oa(){}function C(a,b){this.x=a||0;this.y=b||0}function ea(a,b,c,d,e,f,g,h,k,m){Object.defineProperty(this,\"id\",{value:Oe++});this.uuid=Q.generateUUID();this.name=\"\";this.image=void 0!==a?a:ea.DEFAULT_IMAGE;this.mipmaps=[];this.mapping=void 0!==b?b:ea.DEFAULT_MAPPING;this.wrapS=void 0!==c?c:1001;this.wrapT=\nvoid 0!==d?d:1001;this.magFilter=void 0!==e?e:1006;this.minFilter=void 0!==f?f:1008;this.anisotropy=void 0!==k?k:1;this.format=void 0!==g?g:1023;this.type=void 0!==h?h:1009;this.offset=new C(0,0);this.repeat=new C(1,1);this.generateMipmaps=!0;this.premultiplyAlpha=!1;this.flipY=!0;this.unpackAlignment=4;this.encoding=void 0!==m?m:3E3;this.version=0;this.onUpdate=null}function ga(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1}function Db(a,b,c){this.uuid=Q.generateUUID();this.width=\na;this.height=b;this.scissor=new ga(0,0,a,b);this.scissorTest=!1;this.viewport=new ga(0,0,a,b);c=c||{};void 0===c.minFilter&&(c.minFilter=1006);this.texture=new ea(void 0,void 0,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy,c.encoding);this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.depthTexture=void 0!==c.depthTexture?c.depthTexture:null}function Eb(a,b,c){Db.call(this,a,b,c);this.activeMipMapLevel=\nthis.activeCubeFace=0}function da(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._w=void 0!==d?d:1}function q(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}function H(){this.elements=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);0<arguments.length&&console.error(\"THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.\")}function Za(a,b,c,d,e,f,g,h,k,m){a=void 0!==a?a:[];ea.call(this,a,void 0!==b?b:301,c,d,e,f,g,h,k,m);this.flipY=!1}function Fb(a,b,c){var d=a[0];if(0>=\nd||0<d)return a;var e=b*c,f=pe[e];void 0===f&&(f=new Float32Array(e),pe[e]=f);if(0!==b)for(d.toArray(f,0),d=1,e=0;d!==b;++d)e+=c,a[d].toArray(f,e);return f}function qe(a,b){var c=re[b];void 0===c&&(c=new Int32Array(b),re[b]=c);for(var d=0;d!==b;++d)c[d]=a.allocTextureUnit();return c}function Pe(a,b){a.uniform1f(this.addr,b)}function Qe(a,b){a.uniform1i(this.addr,b)}function Re(a,b){void 0===b.x?a.uniform2fv(this.addr,b):a.uniform2f(this.addr,b.x,b.y)}function Se(a,b){void 0!==b.x?a.uniform3f(this.addr,\nb.x,b.y,b.z):void 0!==b.r?a.uniform3f(this.addr,b.r,b.g,b.b):a.uniform3fv(this.addr,b)}function Te(a,b){void 0===b.x?a.uniform4fv(this.addr,b):a.uniform4f(this.addr,b.x,b.y,b.z,b.w)}function Ue(a,b){a.uniformMatrix2fv(this.addr,!1,b.elements||b)}function Ve(a,b){a.uniformMatrix3fv(this.addr,!1,b.elements||b)}function We(a,b){a.uniformMatrix4fv(this.addr,!1,b.elements||b)}function Xe(a,b,c){var d=c.allocTextureUnit();a.uniform1i(this.addr,d);c.setTexture2D(b||se,d)}function Ye(a,b,c){var d=c.allocTextureUnit();\na.uniform1i(this.addr,d);c.setTextureCube(b||te,d)}function ue(a,b){a.uniform2iv(this.addr,b)}function ve(a,b){a.uniform3iv(this.addr,b)}function we(a,b){a.uniform4iv(this.addr,b)}function Ze(a){switch(a){case 5126:return Pe;case 35664:return Re;case 35665:return Se;case 35666:return Te;case 35674:return Ue;case 35675:return Ve;case 35676:return We;case 35678:return Xe;case 35680:return Ye;case 5124:case 35670:return Qe;case 35667:case 35671:return ue;case 35668:case 35672:return ve;case 35669:case 35673:return we}}\nfunction $e(a,b){a.uniform1fv(this.addr,b)}function af(a,b){a.uniform1iv(this.addr,b)}function bf(a,b){a.uniform2fv(this.addr,Fb(b,this.size,2))}function cf(a,b){a.uniform3fv(this.addr,Fb(b,this.size,3))}function df(a,b){a.uniform4fv(this.addr,Fb(b,this.size,4))}function ef(a,b){a.uniformMatrix2fv(this.addr,!1,Fb(b,this.size,4))}function ff(a,b){a.uniformMatrix3fv(this.addr,!1,Fb(b,this.size,9))}function gf(a,b){a.uniformMatrix4fv(this.addr,!1,Fb(b,this.size,16))}function hf(a,b,c){var d=b.length,\ne=qe(c,d);a.uniform1iv(this.addr,e);for(a=0;a!==d;++a)c.setTexture2D(b[a]||se,e[a])}function jf(a,b,c){var d=b.length,e=qe(c,d);a.uniform1iv(this.addr,e);for(a=0;a!==d;++a)c.setTextureCube(b[a]||te,e[a])}function kf(a){switch(a){case 5126:return $e;case 35664:return bf;case 35665:return cf;case 35666:return df;case 35674:return ef;case 35675:return ff;case 35676:return gf;case 35678:return hf;case 35680:return jf;case 5124:case 35670:return af;case 35667:case 35671:return ue;case 35668:case 35672:return ve;\ncase 35669:case 35673:return we}}function lf(a,b,c){this.id=a;this.addr=c;this.setValue=Ze(b.type)}function mf(a,b,c){this.id=a;this.addr=c;this.size=b.size;this.setValue=kf(b.type)}function xe(a){this.id=a;this.seq=[];this.map={}}function $a(a,b,c){this.seq=[];this.map={};this.renderer=c;c=a.getProgramParameter(b,a.ACTIVE_UNIFORMS);for(var d=0;d!==c;++d){var e=a.getActiveUniform(b,d),f=a.getUniformLocation(b,e.name),g=this,h=e.name,k=h.length;for(Id.lastIndex=0;;){var m=Id.exec(h),x=Id.lastIndex,\np=m[1],n=m[3];\"]\"===m[2]&&(p|=0);if(void 0===n||\"[\"===n&&x+2===k){h=g;e=void 0===n?new lf(p,e,f):new mf(p,e,f);h.seq.push(e);h.map[e.id]=e;break}else n=g.map[p],void 0===n&&(n=new xe(p),p=g,g=n,p.seq.push(g),p.map[g.id]=g),g=n}}}function N(a,b,c){return void 0===b&&void 0===c?this.set(a):this.setRGB(a,b,c)}function db(a,b,c,d,e,f,g,h,k,m,x,p){ea.call(this,null,f,g,h,k,m,d,e,x,p);this.image={data:a,width:b,height:c};this.magFilter=void 0!==k?k:1003;this.minFilter=void 0!==m?m:1003;this.flipY=this.generateMipmaps=\n!1;this.unpackAlignment=1}function pc(a,b){this.min=void 0!==a?a:new C(Infinity,Infinity);this.max=void 0!==b?b:new C(-Infinity,-Infinity)}function nf(a,b){var c,d,e,f,g,h,k,m,x,p,n=a.context,r=a.state,w,l,F,t,v,M;this.render=function(z,A,I){if(0!==b.length){z=new q;var E=I.w/I.z,K=.5*I.z,la=.5*I.w,J=16/I.w,ca=new C(J*E,J),Da=new q(1,1,0),eb=new C(1,1),Na=new pc;Na.min.set(I.x,I.y);Na.max.set(I.x+(I.z-16),I.y+(I.w-16));if(void 0===t){var J=new Float32Array([-1,-1,0,0,1,-1,1,0,1,1,1,1,-1,1,0,1]),O=\nnew Uint16Array([0,1,2,0,2,3]);w=n.createBuffer();l=n.createBuffer();n.bindBuffer(n.ARRAY_BUFFER,w);n.bufferData(n.ARRAY_BUFFER,J,n.STATIC_DRAW);n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,l);n.bufferData(n.ELEMENT_ARRAY_BUFFER,O,n.STATIC_DRAW);v=n.createTexture();M=n.createTexture();r.bindTexture(n.TEXTURE_2D,v);n.texImage2D(n.TEXTURE_2D,0,n.RGB,16,16,0,n.RGB,n.UNSIGNED_BYTE,null);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE);\nn.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST);r.bindTexture(n.TEXTURE_2D,M);n.texImage2D(n.TEXTURE_2D,0,n.RGBA,16,16,0,n.RGBA,n.UNSIGNED_BYTE,null);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST);var J=F={vertexShader:\"uniform lowp int renderType;\\nuniform vec3 screenPosition;\\nuniform vec2 scale;\\nuniform float rotation;\\nuniform sampler2D occlusionMap;\\nattribute vec2 position;\\nattribute vec2 uv;\\nvarying vec2 vUV;\\nvarying float vVisibility;\\nvoid main() {\\nvUV = uv;\\nvec2 pos = position;\\nif ( renderType == 2 ) {\\nvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );\\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );\\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );\\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );\\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );\\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );\\nvisibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );\\nvisibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );\\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );\\nvVisibility =        visibility.r / 9.0;\\nvVisibility *= 1.0 - visibility.g / 9.0;\\nvVisibility *=       visibility.b / 9.0;\\nvVisibility *= 1.0 - visibility.a / 9.0;\\npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\\npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\\n}\\ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\\n}\",\nfragmentShader:\"uniform lowp int renderType;\\nuniform sampler2D map;\\nuniform float opacity;\\nuniform vec3 color;\\nvarying vec2 vUV;\\nvarying float vVisibility;\\nvoid main() {\\nif ( renderType == 0 ) {\\ngl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );\\n} else if ( renderType == 1 ) {\\ngl_FragColor = texture2D( map, vUV );\\n} else {\\nvec4 texture = texture2D( map, vUV );\\ntexture.a *= opacity * vVisibility;\\ngl_FragColor = texture;\\ngl_FragColor.rgb *= color;\\n}\\n}\"},O=n.createProgram(),P=n.createShader(n.FRAGMENT_SHADER),\nR=n.createShader(n.VERTEX_SHADER),T=\"precision \"+a.getPrecision()+\" float;\\n\";n.shaderSource(P,T+J.fragmentShader);n.shaderSource(R,T+J.vertexShader);n.compileShader(P);n.compileShader(R);n.attachShader(O,P);n.attachShader(O,R);n.linkProgram(O);t=O;x=n.getAttribLocation(t,\"position\");p=n.getAttribLocation(t,\"uv\");c=n.getUniformLocation(t,\"renderType\");d=n.getUniformLocation(t,\"map\");e=n.getUniformLocation(t,\"occlusionMap\");f=n.getUniformLocation(t,\"opacity\");g=n.getUniformLocation(t,\"color\");h=n.getUniformLocation(t,\n\"scale\");k=n.getUniformLocation(t,\"rotation\");m=n.getUniformLocation(t,\"screenPosition\")}n.useProgram(t);r.initAttributes();r.enableAttribute(x);r.enableAttribute(p);r.disableUnusedAttributes();n.uniform1i(e,0);n.uniform1i(d,1);n.bindBuffer(n.ARRAY_BUFFER,w);n.vertexAttribPointer(x,2,n.FLOAT,!1,16,0);n.vertexAttribPointer(p,2,n.FLOAT,!1,16,8);n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,l);r.disable(n.CULL_FACE);r.setDepthWrite(!1);O=0;for(P=b.length;O<P;O++)if(J=16/I.w,ca.set(J*E,J),R=b[O],z.set(R.matrixWorld.elements[12],\nR.matrixWorld.elements[13],R.matrixWorld.elements[14]),z.applyMatrix4(A.matrixWorldInverse),z.applyProjection(A.projectionMatrix),Da.copy(z),eb.x=I.x+Da.x*K+K-8,eb.y=I.y+Da.y*la+la-8,!0===Na.containsPoint(eb)){r.activeTexture(n.TEXTURE0);r.bindTexture(n.TEXTURE_2D,null);r.activeTexture(n.TEXTURE1);r.bindTexture(n.TEXTURE_2D,v);n.copyTexImage2D(n.TEXTURE_2D,0,n.RGB,eb.x,eb.y,16,16,0);n.uniform1i(c,0);n.uniform2f(h,ca.x,ca.y);n.uniform3f(m,Da.x,Da.y,Da.z);r.disable(n.BLEND);r.enable(n.DEPTH_TEST);n.drawElements(n.TRIANGLES,\n6,n.UNSIGNED_SHORT,0);r.activeTexture(n.TEXTURE0);r.bindTexture(n.TEXTURE_2D,M);n.copyTexImage2D(n.TEXTURE_2D,0,n.RGBA,eb.x,eb.y,16,16,0);n.uniform1i(c,1);r.disable(n.DEPTH_TEST);r.activeTexture(n.TEXTURE1);r.bindTexture(n.TEXTURE_2D,v);n.drawElements(n.TRIANGLES,6,n.UNSIGNED_SHORT,0);R.positionScreen.copy(Da);R.customUpdateCallback?R.customUpdateCallback(R):R.updateLensFlares();n.uniform1i(c,2);r.enable(n.BLEND);for(var T=0,y=R.lensFlares.length;T<y;T++){var V=R.lensFlares[T];.001<V.opacity&&.001<\nV.scale&&(Da.x=V.x,Da.y=V.y,Da.z=V.z,J=V.size*V.scale/I.w,ca.x=J*E,ca.y=J,n.uniform3f(m,Da.x,Da.y,Da.z),n.uniform2f(h,ca.x,ca.y),n.uniform1f(k,V.rotation),n.uniform1f(f,V.opacity),n.uniform3f(g,V.color.r,V.color.g,V.color.b),r.setBlending(V.blending,V.blendEquation,V.blendSrc,V.blendDst),a.setTexture2D(V.texture,1),n.drawElements(n.TRIANGLES,6,n.UNSIGNED_SHORT,0))}}r.enable(n.CULL_FACE);r.enable(n.DEPTH_TEST);r.setDepthWrite(!0);a.resetGLState()}}}function of(a,b){var c,d,e,f,g,h,k,m,x,p,n,r,w,l,\nF,t,v;function M(a,b){return a.renderOrder!==b.renderOrder?a.renderOrder-b.renderOrder:a.z!==b.z?b.z-a.z:b.id-a.id}var z=a.context,A=a.state,I,E,K,la,J=new q,ca=new da,Da=new q;this.render=function(q,Na){if(0!==b.length){if(void 0===K){var O=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]),P=new Uint16Array([0,1,2,0,2,3]);I=z.createBuffer();E=z.createBuffer();z.bindBuffer(z.ARRAY_BUFFER,I);z.bufferData(z.ARRAY_BUFFER,O,z.STATIC_DRAW);z.bindBuffer(z.ELEMENT_ARRAY_BUFFER,E);z.bufferData(z.ELEMENT_ARRAY_BUFFER,\nP,z.STATIC_DRAW);var O=z.createProgram(),P=z.createShader(z.VERTEX_SHADER),R=z.createShader(z.FRAGMENT_SHADER);z.shaderSource(P,[\"precision \"+a.getPrecision()+\" float;\",\"uniform mat4 modelViewMatrix;\\nuniform mat4 projectionMatrix;\\nuniform float rotation;\\nuniform vec2 scale;\\nuniform vec2 uvOffset;\\nuniform vec2 uvScale;\\nattribute vec2 position;\\nattribute vec2 uv;\\nvarying vec2 vUV;\\nvoid main() {\\nvUV = uvOffset + uv * uvScale;\\nvec2 alignedPosition = position * scale;\\nvec2 rotatedPosition;\\nrotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\nrotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\nvec4 finalPosition;\\nfinalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\nfinalPosition.xy += rotatedPosition;\\nfinalPosition = projectionMatrix * finalPosition;\\ngl_Position = finalPosition;\\n}\"].join(\"\\n\"));\nz.shaderSource(R,[\"precision \"+a.getPrecision()+\" float;\",\"uniform vec3 color;\\nuniform sampler2D map;\\nuniform float opacity;\\nuniform int fogType;\\nuniform vec3 fogColor;\\nuniform float fogDensity;\\nuniform float fogNear;\\nuniform float fogFar;\\nuniform float alphaTest;\\nvarying vec2 vUV;\\nvoid main() {\\nvec4 texture = texture2D( map, vUV );\\nif ( texture.a < alphaTest ) discard;\\ngl_FragColor = vec4( color * texture.xyz, texture.a * opacity );\\nif ( fogType > 0 ) {\\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\\nfloat fogFactor = 0.0;\\nif ( fogType == 1 ) {\\nfogFactor = smoothstep( fogNear, fogFar, depth );\\n} else {\\nconst float LOG2 = 1.442695;\\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\\n}\\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\\n}\\n}\"].join(\"\\n\"));\nz.compileShader(P);z.compileShader(R);z.attachShader(O,P);z.attachShader(O,R);z.linkProgram(O);K=O;t=z.getAttribLocation(K,\"position\");v=z.getAttribLocation(K,\"uv\");c=z.getUniformLocation(K,\"uvOffset\");d=z.getUniformLocation(K,\"uvScale\");e=z.getUniformLocation(K,\"rotation\");f=z.getUniformLocation(K,\"scale\");g=z.getUniformLocation(K,\"color\");h=z.getUniformLocation(K,\"map\");k=z.getUniformLocation(K,\"opacity\");m=z.getUniformLocation(K,\"modelViewMatrix\");x=z.getUniformLocation(K,\"projectionMatrix\");p=\nz.getUniformLocation(K,\"fogType\");n=z.getUniformLocation(K,\"fogDensity\");r=z.getUniformLocation(K,\"fogNear\");w=z.getUniformLocation(K,\"fogFar\");l=z.getUniformLocation(K,\"fogColor\");F=z.getUniformLocation(K,\"alphaTest\");O=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\");O.width=8;O.height=8;P=O.getContext(\"2d\");P.fillStyle=\"white\";P.fillRect(0,0,8,8);la=new ea(O);la.needsUpdate=!0}z.useProgram(K);A.initAttributes();A.enableAttribute(t);A.enableAttribute(v);A.disableUnusedAttributes();\nA.disable(z.CULL_FACE);A.enable(z.BLEND);z.bindBuffer(z.ARRAY_BUFFER,I);z.vertexAttribPointer(t,2,z.FLOAT,!1,16,0);z.vertexAttribPointer(v,2,z.FLOAT,!1,16,8);z.bindBuffer(z.ELEMENT_ARRAY_BUFFER,E);z.uniformMatrix4fv(x,!1,Na.projectionMatrix.elements);A.activeTexture(z.TEXTURE0);z.uniform1i(h,0);P=O=0;(R=q.fog)?(z.uniform3f(l,R.color.r,R.color.g,R.color.b),R.isFog?(z.uniform1f(r,R.near),z.uniform1f(w,R.far),z.uniform1i(p,1),P=O=1):R.isFogExp2&&(z.uniform1f(n,R.density),z.uniform1i(p,2),P=O=2)):(z.uniform1i(p,\n0),P=O=0);for(var R=0,T=b.length;R<T;R++){var y=b[R];y.modelViewMatrix.multiplyMatrices(Na.matrixWorldInverse,y.matrixWorld);y.z=-y.modelViewMatrix.elements[14]}b.sort(M);for(var V=[],R=0,T=b.length;R<T;R++){var y=b[R],ra=y.material;!1!==ra.visible&&(z.uniform1f(F,ra.alphaTest),z.uniformMatrix4fv(m,!1,y.modelViewMatrix.elements),y.matrixWorld.decompose(J,ca,Da),V[0]=Da.x,V[1]=Da.y,y=0,q.fog&&ra.fog&&(y=P),O!==y&&(z.uniform1i(p,y),O=y),null!==ra.map?(z.uniform2f(c,ra.map.offset.x,ra.map.offset.y),\nz.uniform2f(d,ra.map.repeat.x,ra.map.repeat.y)):(z.uniform2f(c,0,0),z.uniform2f(d,1,1)),z.uniform1f(k,ra.opacity),z.uniform3f(g,ra.color.r,ra.color.g,ra.color.b),z.uniform1f(e,ra.rotation),z.uniform2fv(f,V),A.setBlending(ra.blending,ra.blendEquation,ra.blendSrc,ra.blendDst),A.setDepthTest(ra.depthTest),A.setDepthWrite(ra.depthWrite),ra.map?a.setTexture2D(ra.map,0):a.setTexture2D(la,0),z.drawElements(z.TRIANGLES,6,z.UNSIGNED_SHORT,0))}A.enable(z.CULL_FACE);a.resetGLState()}}}function W(){Object.defineProperty(this,\n\"id\",{value:pf++});this.uuid=Q.generateUUID();this.name=\"\";this.type=\"Material\";this.lights=this.fog=!0;this.blending=1;this.side=0;this.shading=2;this.vertexColors=0;this.opacity=1;this.transparent=!1;this.blendSrc=204;this.blendDst=205;this.blendEquation=100;this.blendEquationAlpha=this.blendDstAlpha=this.blendSrcAlpha=null;this.depthFunc=3;this.depthWrite=this.depthTest=!0;this.clippingPlanes=null;this.clipShadows=this.clipIntersection=!1;this.colorWrite=!0;this.precision=null;this.polygonOffset=\n!1;this.alphaTest=this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.premultipliedAlpha=!1;this.overdraw=0;this._needsUpdate=this.visible=!0}function Ia(a){W.call(this);this.type=\"ShaderMaterial\";this.defines={};this.uniforms={};this.vertexShader=\"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";this.fragmentShader=\"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";this.linewidth=1;this.wireframe=!1;this.wireframeLinewidth=1;this.morphNormals=\nthis.morphTargets=this.skinning=this.clipping=this.lights=this.fog=!1;this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1};this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]};this.index0AttributeName=void 0;void 0!==a&&(void 0!==a.attributes&&console.error(\"THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.\"),this.setValues(a))}function ab(a){W.call(this);this.type=\"MeshDepthMaterial\";this.depthPacking=3200;this.morphTargets=\nthis.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.lights=this.fog=!1;this.setValues(a)}function ya(a,b){this.min=void 0!==a?a:new q(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new q(-Infinity,-Infinity,-Infinity)}function Fa(a,b){this.center=void 0!==a?a:new q;this.radius=void 0!==b?b:0}function za(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]);0<arguments.length&&console.error(\"THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.\")}\nfunction ma(a,b){this.normal=void 0!==a?a:new q(1,0,0);this.constant=void 0!==b?b:0}function qc(a,b,c,d,e,f){this.planes=[void 0!==a?a:new ma,void 0!==b?b:new ma,void 0!==c?c:new ma,void 0!==d?d:new ma,void 0!==e?e:new ma,void 0!==f?f:new ma]}function ye(a,b,c,d){function e(b,c,d,e){var f=b.geometry,g;g=F;var h=b.customDepthMaterial;d&&(g=t,h=b.customDistanceMaterial);h?g=h:(h=!1,c.morphTargets&&(f&&f.isBufferGeometry?h=f.morphAttributes&&f.morphAttributes.position&&0<f.morphAttributes.position.length:\nf&&f.isGeometry&&(h=f.morphTargets&&0<f.morphTargets.length)),b=b.isSkinnedMesh&&c.skinning,f=0,h&&(f|=1),b&&(f|=2),g=g[f]);a.localClippingEnabled&&!0===c.clipShadows&&0!==c.clippingPlanes.length&&(f=g.uuid,h=c.uuid,b=v[f],void 0===b&&(b={},v[f]=b),f=b[h],void 0===f&&(f=g.clone(),b[h]=f),g=f);g.visible=c.visible;g.wireframe=c.wireframe;h=c.side;ca.renderSingleSided&&2==h&&(h=0);ca.renderReverseSided&&(0===h?h=1:1===h&&(h=0));g.side=h;g.clipShadows=c.clipShadows;g.clippingPlanes=c.clippingPlanes;g.wireframeLinewidth=\nc.wireframeLinewidth;g.linewidth=c.linewidth;d&&void 0!==g.uniforms.lightPos&&g.uniforms.lightPos.value.copy(e);return g}function f(a,b,c){if(!1!==a.visible){0!==(a.layers.mask&b.layers.mask)&&(a.isMesh||a.isLine||a.isPoints)&&a.castShadow&&(!1===a.frustumCulled||!0===k.intersectsObject(a))&&!0===a.material.visible&&(a.modelViewMatrix.multiplyMatrices(c.matrixWorldInverse,a.matrixWorld),l.push(a));a=a.children;for(var d=0,e=a.length;d<e;d++)f(a[d],b,c)}}var g=a.context,h=a.state,k=new qc,m=new H,\nx=b.shadows,p=new C,n=new C(d.maxTextureSize,d.maxTextureSize),r=new q,w=new q,l=[],F=Array(4),t=Array(4),v={},M=[new q(1,0,0),new q(-1,0,0),new q(0,0,1),new q(0,0,-1),new q(0,1,0),new q(0,-1,0)],z=[new q(0,1,0),new q(0,1,0),new q(0,1,0),new q(0,1,0),new q(0,0,1),new q(0,0,-1)],A=[new ga,new ga,new ga,new ga,new ga,new ga];b=new ab;b.depthPacking=3201;b.clipping=!0;d=Gb.distanceRGBA;for(var I=Ja.clone(d.uniforms),E=0;4!==E;++E){var K=0!==(E&1),la=0!==(E&2),J=b.clone();J.morphTargets=K;J.skinning=\nla;F[E]=J;K=new Ia({defines:{USE_SHADOWMAP:\"\"},uniforms:I,vertexShader:d.vertexShader,fragmentShader:d.fragmentShader,morphTargets:K,skinning:la,clipping:!0});t[E]=K}var ca=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=1;this.renderSingleSided=this.renderReverseSided=!0;this.render=function(b,d){if(!1!==ca.enabled&&(!1!==ca.autoUpdate||!1!==ca.needsUpdate)&&0!==x.length){h.buffers.color.setClear(1,1,1,1);h.disable(g.BLEND);h.setDepthTest(!0);h.setScissorTest(!1);for(var v,\nq,t=0,F=x.length;t<F;t++){var I=x[t],E=I.shadow;if(void 0===E)console.warn(\"THREE.WebGLShadowMap:\",I,\"has no shadow.\");else{var K=E.camera;p.copy(E.mapSize);p.min(n);if(I&&I.isPointLight){v=6;q=!0;var J=p.x,la=p.y;A[0].set(2*J,la,J,la);A[1].set(0,la,J,la);A[2].set(3*J,la,J,la);A[3].set(J,la,J,la);A[4].set(3*J,0,J,la);A[5].set(J,0,J,la);p.x*=4;p.y*=2}else v=1,q=!1;null===E.map&&(E.map=new Db(p.x,p.y,{minFilter:1003,magFilter:1003,format:1023}),K.updateProjectionMatrix());E.isSpotLightShadow&&E.update(I);\nE&&E.isRectAreaLightShadow&&E.update(I);J=E.map;E=E.matrix;w.setFromMatrixPosition(I.matrixWorld);K.position.copy(w);a.setRenderTarget(J);a.clear();for(J=0;J<v;J++){q?(r.copy(K.position),r.add(M[J]),K.up.copy(z[J]),K.lookAt(r),h.viewport(A[J])):(r.setFromMatrixPosition(I.target.matrixWorld),K.lookAt(r));K.updateMatrixWorld();K.matrixWorldInverse.getInverse(K.matrixWorld);E.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);E.multiply(K.projectionMatrix);E.multiply(K.matrixWorldInverse);m.multiplyMatrices(K.projectionMatrix,\nK.matrixWorldInverse);k.setFromMatrix(m);l.length=0;f(b,d,K);for(var la=0,y=l.length;la<y;la++){var C=l[la],Jd=c.update(C),Ta=C.material;if(Ta&&Ta.isMultiMaterial)for(var G=Jd.groups,Ta=Ta.materials,D=0,Ga=G.length;D<Ga;D++){var N=G[D],H=Ta[N.materialIndex];!0===H.visible&&(H=e(C,H,q,w),a.renderBufferDirect(K,null,Jd,H,C,N))}else H=e(C,Ta,q,w),a.renderBufferDirect(K,null,Jd,H,C,null)}}}}v=a.getClearColor();q=a.getClearAlpha();a.setClearColor(v,q);ca.needsUpdate=!1}}}function bb(a,b){this.origin=void 0!==\na?a:new q;this.direction=void 0!==b?b:new q}function cb(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._order=d||cb.DefaultOrder}function gd(){this.mask=1}function G(){Object.defineProperty(this,\"id\",{value:qf++});this.uuid=Q.generateUUID();this.name=\"\";this.type=\"Object3D\";this.parent=null;this.children=[];this.up=G.DefaultUp.clone();var a=new q,b=new cb,c=new da,d=new q(1,1,1);b.onChange(function(){c.setFromEuler(b,!1)});c.onChange(function(){b.setFromQuaternion(c,void 0,!1)});Object.defineProperties(this,\n{position:{enumerable:!0,value:a},rotation:{enumerable:!0,value:b},quaternion:{enumerable:!0,value:c},scale:{enumerable:!0,value:d},modelViewMatrix:{value:new H},normalMatrix:{value:new za}});this.matrix=new H;this.matrixWorld=new H;this.matrixAutoUpdate=G.DefaultMatrixAutoUpdate;this.matrixWorldNeedsUpdate=!1;this.layers=new gd;this.visible=!0;this.receiveShadow=this.castShadow=!1;this.frustumCulled=!0;this.renderOrder=0;this.userData={};this.onBeforeRender=function(){};this.onAfterRender=function(){}}\nfunction gb(a,b){this.start=void 0!==a?a:new q;this.end=void 0!==b?b:new q}function Aa(a,b,c){this.a=void 0!==a?a:new q;this.b=void 0!==b?b:new q;this.c=void 0!==c?c:new q}function ha(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d&&d.isVector3?d:new q;this.vertexNormals=Array.isArray(d)?d:[];this.color=e&&e.isColor?e:new N;this.vertexColors=Array.isArray(e)?e:[];this.materialIndex=void 0!==f?f:0}function Ka(a){W.call(this);this.type=\"MeshBasicMaterial\";this.color=new N(16777215);this.lightMap=\nthis.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.envMap=this.alphaMap=this.specularMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap=\"round\";this.lights=this.morphTargets=this.skinning=!1;this.setValues(a)}function y(a,b,c){if(Array.isArray(a))throw new TypeError(\"THREE.BufferAttribute: array should be a Typed Array.\");this.uuid=Q.generateUUID();this.array=a;\nthis.itemSize=b;this.count=void 0!==a?a.length/b:0;this.normalized=!0===c;this.dynamic=!1;this.updateRange={offset:0,count:-1};this.onUploadCallback=function(){};this.version=0}function rc(a,b){y.call(this,new Int8Array(a),b)}function sc(a,b){y.call(this,new Uint8Array(a),b)}function tc(a,b){y.call(this,new Uint8ClampedArray(a),b)}function uc(a,b){y.call(this,new Int16Array(a),b)}function Ra(a,b){y.call(this,new Uint16Array(a),b)}function vc(a,b){y.call(this,new Int32Array(a),b)}function Ua(a,b){y.call(this,\nnew Uint32Array(a),b)}function X(a,b){y.call(this,new Float32Array(a),b)}function wc(a,b){y.call(this,new Float64Array(a),b)}function ze(){this.indices=[];this.vertices=[];this.normals=[];this.colors=[];this.uvs=[];this.uvs2=[];this.groups=[];this.morphTargets={};this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.groupsNeedUpdate=this.uvsNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.verticesNeedUpdate=!1}function S(){Object.defineProperty(this,\"id\",\n{value:Kd++});this.uuid=Q.generateUUID();this.name=\"\";this.type=\"Geometry\";this.vertices=[];this.colors=[];this.faces=[];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphNormals=[];this.skinWeights=[];this.skinIndices=[];this.lineDistances=[];this.boundingSphere=this.boundingBox=null;this.groupsNeedUpdate=this.lineDistancesNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.uvsNeedUpdate=this.verticesNeedUpdate=this.elementsNeedUpdate=!1}function D(){Object.defineProperty(this,\"id\",\n{value:Kd++});this.uuid=Q.generateUUID();this.name=\"\";this.type=\"BufferGeometry\";this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity}}function Ba(a,b){G.call(this);this.type=\"Mesh\";this.geometry=void 0!==a?a:new D;this.material=void 0!==b?b:new Ka({color:16777215*Math.random()});this.drawMode=0;this.updateMorphTargets()}function hb(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,k,m,y,C){var Na=f/m,O=g/y,\nP=f/2,R=g/2,T=k/2;g=m+1;for(var G=y+1,V=f=0,D=new q,L=0;L<G;L++)for(var N=L*O-R,H=0;H<g;H++)D[a]=(H*Na-P)*d,D[b]=N*e,D[c]=T,p[w]=D.x,p[w+1]=D.y,p[w+2]=D.z,D[a]=0,D[b]=0,D[c]=0<k?1:-1,n[w]=D.x,n[w+1]=D.y,n[w+2]=D.z,r[l]=H/m,r[l+1]=1-L/y,w+=3,l+=2,f+=1;for(L=0;L<y;L++)for(H=0;H<m;H++)a=t+H+g*(L+1),b=t+(H+1)+g*(L+1),c=t+(H+1)+g*L,x[F]=t+H+g*L,x[F+1]=a,x[F+2]=c,x[F+3]=a,x[F+4]=b,x[F+5]=c,F+=6,V+=6;h.addGroup(v,V,C);v+=V;t+=f}D.call(this);this.type=\"BoxBufferGeometry\";this.parameters={width:a,height:b,\ndepth:c,widthSegments:d,heightSegments:e,depthSegments:f};var h=this;d=Math.floor(d)||1;e=Math.floor(e)||1;f=Math.floor(f)||1;var k=function(a,b,c){return a=0+(a+1)*(b+1)*2+(a+1)*(c+1)*2+(c+1)*(b+1)*2}(d,e,f),m=function(a,b,c){a=0+a*b*2+a*c*2+c*b*2;return 6*a}(d,e,f),x=new (65535<m?Uint32Array:Uint16Array)(m),p=new Float32Array(3*k),n=new Float32Array(3*k),r=new Float32Array(2*k),w=0,l=0,F=0,t=0,v=0;g(\"z\",\"y\",\"x\",-1,-1,c,b,a,f,e,0);g(\"z\",\"y\",\"x\",1,-1,c,b,-a,f,e,1);g(\"x\",\"z\",\"y\",1,1,a,c,b,d,f,2);g(\"x\",\n\"z\",\"y\",1,-1,a,c,-b,d,f,3);g(\"x\",\"y\",\"z\",1,-1,a,b,c,d,e,4);g(\"x\",\"y\",\"z\",-1,-1,a,b,-c,d,e,5);this.setIndex(new y(x,1));this.addAttribute(\"position\",new y(p,3));this.addAttribute(\"normal\",new y(n,3));this.addAttribute(\"uv\",new y(r,2))}function ib(a,b,c,d){D.call(this);this.type=\"PlaneBufferGeometry\";this.parameters={width:a,height:b,widthSegments:c,heightSegments:d};var e=a/2,f=b/2;c=Math.floor(c)||1;d=Math.floor(d)||1;var g=c+1,h=d+1,k=a/c,m=b/d;b=new Float32Array(g*h*3);a=new Float32Array(g*h*3);\nfor(var x=new Float32Array(g*h*2),p=0,n=0,r=0;r<h;r++)for(var w=r*m-f,l=0;l<g;l++)b[p]=l*k-e,b[p+1]=-w,a[p+2]=1,x[n]=l/c,x[n+1]=1-r/d,p+=3,n+=2;p=0;e=new (65535<b.length/3?Uint32Array:Uint16Array)(c*d*6);for(r=0;r<d;r++)for(l=0;l<c;l++)f=l+g*(r+1),h=l+1+g*(r+1),k=l+1+g*r,e[p]=l+g*r,e[p+1]=f,e[p+2]=k,e[p+3]=f,e[p+4]=h,e[p+5]=k,p+=6;this.setIndex(new y(e,1));this.addAttribute(\"position\",new y(b,3));this.addAttribute(\"normal\",new y(a,3));this.addAttribute(\"uv\",new y(x,2))}function sa(){G.call(this);\nthis.type=\"Camera\";this.matrixWorldInverse=new H;this.projectionMatrix=new H}function Ha(a,b,c,d){sa.call(this);this.type=\"PerspectiveCamera\";this.fov=void 0!==a?a:50;this.zoom=1;this.near=void 0!==c?c:.1;this.far=void 0!==d?d:2E3;this.focus=10;this.aspect=void 0!==b?b:1;this.view=null;this.filmGauge=35;this.filmOffset=0;this.updateProjectionMatrix()}function Hb(a,b,c,d,e,f){sa.call(this);this.type=\"OrthographicCamera\";this.zoom=1;this.view=null;this.left=a;this.right=b;this.top=c;this.bottom=d;this.near=\nvoid 0!==e?e:.1;this.far=void 0!==f?f:2E3;this.updateProjectionMatrix()}function rf(a,b,c){var d,e,f;return{setMode:function(a){d=a},setIndex:function(c){c.array instanceof Uint32Array&&b.get(\"OES_element_index_uint\")?(e=a.UNSIGNED_INT,f=4):c.array instanceof Uint16Array?(e=a.UNSIGNED_SHORT,f=2):(e=a.UNSIGNED_BYTE,f=1)},render:function(b,h){a.drawElements(d,h,e,b*f);c.calls++;c.vertices+=h;d===a.TRIANGLES&&(c.faces+=h/3)},renderInstances:function(g,h,k){var m=b.get(\"ANGLE_instanced_arrays\");null===\nm?console.error(\"THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\"):(m.drawElementsInstancedANGLE(d,k,e,h*f,g.maxInstancedCount),c.calls++,c.vertices+=k*g.maxInstancedCount,d===a.TRIANGLES&&(c.faces+=g.maxInstancedCount*k/3))}}}function sf(a,b,c){var d;return{setMode:function(a){d=a},render:function(b,f){a.drawArrays(d,b,f);c.calls++;c.vertices+=f;d===a.TRIANGLES&&(c.faces+=f/3)},renderInstances:function(e){var f=b.get(\"ANGLE_instanced_arrays\");\nif(null===f)console.error(\"THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\");else{var g=e.attributes.position,g=g.isInterleavedBufferAttribute?g.data.count:g.count;f.drawArraysInstancedANGLE(d,0,g,e.maxInstancedCount);c.calls++;c.vertices+=g*e.maxInstancedCount;d===a.TRIANGLES&&(c.faces+=e.maxInstancedCount*g/3)}}}}function tf(){var a={};return{get:function(b){if(void 0!==a[b.id])return a[b.id];var c;switch(b.type){case \"DirectionalLight\":c=\n{direction:new q,color:new N,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new C};break;case \"SpotLight\":c={position:new q,direction:new q,color:new N,distance:0,coneCos:0,penumbraCos:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new C};break;case \"PointLight\":c={position:new q,color:new N,distance:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new C};break;case \"HemisphereLight\":c={direction:new q,skyColor:new N,groundColor:new N};break;case \"RectAreaLight\":c=\n{color:new N,position:new q,halfWidth:new q,halfHeight:new q}}return a[b.id]=c}}}function uf(a){a=a.split(\"\\n\");for(var b=0;b<a.length;b++)a[b]=b+1+\": \"+a[b];return a.join(\"\\n\")}function Ae(a,b,c){var d=a.createShader(b);a.shaderSource(d,c);a.compileShader(d);!1===a.getShaderParameter(d,a.COMPILE_STATUS)&&console.error(\"THREE.WebGLShader: Shader couldn't compile.\");\"\"!==a.getShaderInfoLog(d)&&console.warn(\"THREE.WebGLShader: gl.getShaderInfoLog()\",b===a.VERTEX_SHADER?\"vertex\":\"fragment\",a.getShaderInfoLog(d),\nuf(c));return d}function Be(a){switch(a){case 3E3:return[\"Linear\",\"( value )\"];case 3001:return[\"sRGB\",\"( value )\"];case 3002:return[\"RGBE\",\"( value )\"];case 3004:return[\"RGBM\",\"( value, 7.0 )\"];case 3005:return[\"RGBM\",\"( value, 16.0 )\"];case 3006:return[\"RGBD\",\"( value, 256.0 )\"];case 3007:return[\"Gamma\",\"( value, float( GAMMA_FACTOR ) )\"];default:throw Error(\"unsupported encoding: \"+a);}}function Ld(a,b){var c=Be(b);return\"vec4 \"+a+\"( vec4 value ) { return \"+c[0]+\"ToLinear\"+c[1]+\"; }\"}function vf(a,\nb){var c=Be(b);return\"vec4 \"+a+\"( vec4 value ) { return LinearTo\"+c[0]+c[1]+\"; }\"}function wf(a,b){var c;switch(b){case 1:c=\"Linear\";break;case 2:c=\"Reinhard\";break;case 3:c=\"Uncharted2\";break;case 4:c=\"OptimizedCineon\";break;default:throw Error(\"unsupported toneMapping: \"+b);}return\"vec3 \"+a+\"( vec3 color ) { return \"+c+\"ToneMapping( color ); }\"}function xf(a,b,c){a=a||{};return[a.derivatives||b.envMapCubeUV||b.bumpMap||b.normalMap||b.flatShading?\"#extension GL_OES_standard_derivatives : enable\":\n\"\",(a.fragDepth||b.logarithmicDepthBuffer)&&c.get(\"EXT_frag_depth\")?\"#extension GL_EXT_frag_depth : enable\":\"\",a.drawBuffers&&c.get(\"WEBGL_draw_buffers\")?\"#extension GL_EXT_draw_buffers : require\":\"\",(a.shaderTextureLOD||b.envMap)&&c.get(\"EXT_shader_texture_lod\")?\"#extension GL_EXT_shader_texture_lod : enable\":\"\"].filter(xc).join(\"\\n\")}function yf(a){var b=[],c;for(c in a){var d=a[c];!1!==d&&b.push(\"#define \"+c+\" \"+d)}return b.join(\"\\n\")}function xc(a){return\"\"!==a}function Ce(a,b){return a.replace(/NUM_DIR_LIGHTS/g,\nb.numDirLights).replace(/NUM_SPOT_LIGHTS/g,b.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,b.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,b.numPointLights).replace(/NUM_HEMI_LIGHTS/g,b.numHemiLights)}function Md(a){return a.replace(/#include +<([\\w\\d.]+)>/g,function(a,c){var d=Z[c];if(void 0===d)throw Error(\"Can not resolve #include <\"+c+\">\");return Md(d)})}function De(a){return a.replace(/for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g,function(a,c,d,e){a=\"\";for(c=parseInt(c);c<\nparseInt(d);c++)a+=e.replace(/\\[ i \\]/g,\"[ \"+c+\" ]\");return a})}function zf(a,b,c,d){var e=a.context,f=c.extensions,g=c.defines,h=c.__webglShader.vertexShader,k=c.__webglShader.fragmentShader,m=\"SHADOWMAP_TYPE_BASIC\";1===d.shadowMapType?m=\"SHADOWMAP_TYPE_PCF\":2===d.shadowMapType&&(m=\"SHADOWMAP_TYPE_PCF_SOFT\");var x=\"ENVMAP_TYPE_CUBE\",p=\"ENVMAP_MODE_REFLECTION\",n=\"ENVMAP_BLENDING_MULTIPLY\";if(d.envMap){switch(c.envMap.mapping){case 301:case 302:x=\"ENVMAP_TYPE_CUBE\";break;case 306:case 307:x=\"ENVMAP_TYPE_CUBE_UV\";\nbreak;case 303:case 304:x=\"ENVMAP_TYPE_EQUIREC\";break;case 305:x=\"ENVMAP_TYPE_SPHERE\"}switch(c.envMap.mapping){case 302:case 304:p=\"ENVMAP_MODE_REFRACTION\"}switch(c.combine){case 0:n=\"ENVMAP_BLENDING_MULTIPLY\";break;case 1:n=\"ENVMAP_BLENDING_MIX\";break;case 2:n=\"ENVMAP_BLENDING_ADD\"}}var r=0<a.gammaFactor?a.gammaFactor:1,f=xf(f,d,a.extensions),l=yf(g),u=e.createProgram();c.isRawShaderMaterial?(g=[l,\"\\n\"].filter(xc).join(\"\\n\"),m=[f,l,\"\\n\"].filter(xc).join(\"\\n\")):(g=[\"precision \"+d.precision+\" float;\",\n\"precision \"+d.precision+\" int;\",\"#define SHADER_NAME \"+c.__webglShader.name,l,d.supportsVertexTextures?\"#define VERTEX_TEXTURES\":\"\",\"#define GAMMA_FACTOR \"+r,\"#define MAX_BONES \"+d.maxBones,d.map?\"#define USE_MAP\":\"\",d.envMap?\"#define USE_ENVMAP\":\"\",d.envMap?\"#define \"+p:\"\",d.lightMap?\"#define USE_LIGHTMAP\":\"\",d.aoMap?\"#define USE_AOMAP\":\"\",d.emissiveMap?\"#define USE_EMISSIVEMAP\":\"\",d.bumpMap?\"#define USE_BUMPMAP\":\"\",d.normalMap?\"#define USE_NORMALMAP\":\"\",d.displacementMap&&d.supportsVertexTextures?\n\"#define USE_DISPLACEMENTMAP\":\"\",d.specularMap?\"#define USE_SPECULARMAP\":\"\",d.roughnessMap?\"#define USE_ROUGHNESSMAP\":\"\",d.metalnessMap?\"#define USE_METALNESSMAP\":\"\",d.alphaMap?\"#define USE_ALPHAMAP\":\"\",d.vertexColors?\"#define USE_COLOR\":\"\",d.flatShading?\"#define FLAT_SHADED\":\"\",d.skinning?\"#define USE_SKINNING\":\"\",d.useVertexTexture?\"#define BONE_TEXTURE\":\"\",d.morphTargets?\"#define USE_MORPHTARGETS\":\"\",d.morphNormals&&!1===d.flatShading?\"#define USE_MORPHNORMALS\":\"\",d.doubleSided?\"#define DOUBLE_SIDED\":\n\"\",d.flipSided?\"#define FLIP_SIDED\":\"\",\"#define NUM_CLIPPING_PLANES \"+d.numClippingPlanes,d.shadowMapEnabled?\"#define USE_SHADOWMAP\":\"\",d.shadowMapEnabled?\"#define \"+m:\"\",d.sizeAttenuation?\"#define USE_SIZEATTENUATION\":\"\",d.logarithmicDepthBuffer?\"#define USE_LOGDEPTHBUF\":\"\",d.logarithmicDepthBuffer&&a.extensions.get(\"EXT_frag_depth\")?\"#define USE_LOGDEPTHBUF_EXT\":\"\",\"uniform mat4 modelMatrix;\",\"uniform mat4 modelViewMatrix;\",\"uniform mat4 projectionMatrix;\",\"uniform mat4 viewMatrix;\",\"uniform mat3 normalMatrix;\",\n\"uniform vec3 cameraPosition;\",\"attribute vec3 position;\",\"attribute vec3 normal;\",\"attribute vec2 uv;\",\"#ifdef USE_COLOR\",\"\\tattribute vec3 color;\",\"#endif\",\"#ifdef USE_MORPHTARGETS\",\"\\tattribute vec3 morphTarget0;\",\"\\tattribute vec3 morphTarget1;\",\"\\tattribute vec3 morphTarget2;\",\"\\tattribute vec3 morphTarget3;\",\"\\t#ifdef USE_MORPHNORMALS\",\"\\t\\tattribute vec3 morphNormal0;\",\"\\t\\tattribute vec3 morphNormal1;\",\"\\t\\tattribute vec3 morphNormal2;\",\"\\t\\tattribute vec3 morphNormal3;\",\"\\t#else\",\"\\t\\tattribute vec3 morphTarget4;\",\n\"\\t\\tattribute vec3 morphTarget5;\",\"\\t\\tattribute vec3 morphTarget6;\",\"\\t\\tattribute vec3 morphTarget7;\",\"\\t#endif\",\"#endif\",\"#ifdef USE_SKINNING\",\"\\tattribute vec4 skinIndex;\",\"\\tattribute vec4 skinWeight;\",\"#endif\",\"\\n\"].filter(xc).join(\"\\n\"),m=[f,\"precision \"+d.precision+\" float;\",\"precision \"+d.precision+\" int;\",\"#define SHADER_NAME \"+c.__webglShader.name,l,d.alphaTest?\"#define ALPHATEST \"+d.alphaTest:\"\",\"#define GAMMA_FACTOR \"+r,d.useFog&&d.fog?\"#define USE_FOG\":\"\",d.useFog&&d.fogExp?\"#define FOG_EXP2\":\n\"\",d.map?\"#define USE_MAP\":\"\",d.envMap?\"#define USE_ENVMAP\":\"\",d.envMap?\"#define \"+x:\"\",d.envMap?\"#define \"+p:\"\",d.envMap?\"#define \"+n:\"\",d.lightMap?\"#define USE_LIGHTMAP\":\"\",d.aoMap?\"#define USE_AOMAP\":\"\",d.emissiveMap?\"#define USE_EMISSIVEMAP\":\"\",d.bumpMap?\"#define USE_BUMPMAP\":\"\",d.normalMap?\"#define USE_NORMALMAP\":\"\",d.specularMap?\"#define USE_SPECULARMAP\":\"\",d.roughnessMap?\"#define USE_ROUGHNESSMAP\":\"\",d.metalnessMap?\"#define USE_METALNESSMAP\":\"\",d.alphaMap?\"#define USE_ALPHAMAP\":\"\",d.vertexColors?\n\"#define USE_COLOR\":\"\",d.gradientMap?\"#define USE_GRADIENTMAP\":\"\",d.flatShading?\"#define FLAT_SHADED\":\"\",d.doubleSided?\"#define DOUBLE_SIDED\":\"\",d.flipSided?\"#define FLIP_SIDED\":\"\",\"#define NUM_CLIPPING_PLANES \"+d.numClippingPlanes,\"#define UNION_CLIPPING_PLANES \"+(d.numClippingPlanes-d.numClipIntersection),d.shadowMapEnabled?\"#define USE_SHADOWMAP\":\"\",d.shadowMapEnabled?\"#define \"+m:\"\",d.premultipliedAlpha?\"#define PREMULTIPLIED_ALPHA\":\"\",d.physicallyCorrectLights?\"#define PHYSICALLY_CORRECT_LIGHTS\":\n\"\",d.logarithmicDepthBuffer?\"#define USE_LOGDEPTHBUF\":\"\",d.logarithmicDepthBuffer&&a.extensions.get(\"EXT_frag_depth\")?\"#define USE_LOGDEPTHBUF_EXT\":\"\",d.envMap&&a.extensions.get(\"EXT_shader_texture_lod\")?\"#define TEXTURE_LOD_EXT\":\"\",\"uniform mat4 viewMatrix;\",\"uniform vec3 cameraPosition;\",0!==d.toneMapping?\"#define TONE_MAPPING\":\"\",0!==d.toneMapping?Z.tonemapping_pars_fragment:\"\",0!==d.toneMapping?wf(\"toneMapping\",d.toneMapping):\"\",d.outputEncoding||d.mapEncoding||d.envMapEncoding||d.emissiveMapEncoding?\nZ.encodings_pars_fragment:\"\",d.mapEncoding?Ld(\"mapTexelToLinear\",d.mapEncoding):\"\",d.envMapEncoding?Ld(\"envMapTexelToLinear\",d.envMapEncoding):\"\",d.emissiveMapEncoding?Ld(\"emissiveMapTexelToLinear\",d.emissiveMapEncoding):\"\",d.outputEncoding?vf(\"linearToOutputTexel\",d.outputEncoding):\"\",d.depthPacking?\"#define DEPTH_PACKING \"+c.depthPacking:\"\",\"\\n\"].filter(xc).join(\"\\n\"));h=Md(h,d);h=Ce(h,d);k=Md(k,d);k=Ce(k,d);c.isShaderMaterial||(h=De(h),k=De(k));k=m+k;h=Ae(e,e.VERTEX_SHADER,g+h);k=Ae(e,e.FRAGMENT_SHADER,\nk);e.attachShader(u,h);e.attachShader(u,k);void 0!==c.index0AttributeName?e.bindAttribLocation(u,0,c.index0AttributeName):!0===d.morphTargets&&e.bindAttribLocation(u,0,\"position\");e.linkProgram(u);d=e.getProgramInfoLog(u);x=e.getShaderInfoLog(h);p=e.getShaderInfoLog(k);r=n=!0;if(!1===e.getProgramParameter(u,e.LINK_STATUS))n=!1,console.error(\"THREE.WebGLProgram: shader error: \",e.getError(),\"gl.VALIDATE_STATUS\",e.getProgramParameter(u,e.VALIDATE_STATUS),\"gl.getProgramInfoLog\",d,x,p);else if(\"\"!==d)console.warn(\"THREE.WebGLProgram: gl.getProgramInfoLog()\",\nd);else if(\"\"===x||\"\"===p)r=!1;r&&(this.diagnostics={runnable:n,material:c,programLog:d,vertexShader:{log:x,prefix:g},fragmentShader:{log:p,prefix:m}});e.deleteShader(h);e.deleteShader(k);var q;this.getUniforms=function(){void 0===q&&(q=new $a(e,u,a));return q};var t;this.getAttributes=function(){if(void 0===t){for(var a={},b=e.getProgramParameter(u,e.ACTIVE_ATTRIBUTES),c=0;c<b;c++){var d=e.getActiveAttrib(u,c).name;a[d]=e.getAttribLocation(u,d)}t=a}return t};this.destroy=function(){e.deleteProgram(u);\nthis.program=void 0};Object.defineProperties(this,{uniforms:{get:function(){console.warn(\"THREE.WebGLProgram: .uniforms is now .getUniforms().\");return this.getUniforms()}},attributes:{get:function(){console.warn(\"THREE.WebGLProgram: .attributes is now .getAttributes().\");return this.getAttributes()}}});this.id=Af++;this.code=b;this.usedTimes=1;this.program=u;this.vertexShader=h;this.fragmentShader=k;return this}function Bf(a,b){function c(a,b){var c;a?a.isTexture?c=a.encoding:a.isWebGLRenderTarget&&\n(console.warn(\"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\"),c=a.texture.encoding):c=3E3;3E3===c&&b&&(c=3007);return c}var d=[],e={MeshDepthMaterial:\"depth\",MeshNormalMaterial:\"normal\",MeshBasicMaterial:\"basic\",MeshLambertMaterial:\"lambert\",MeshPhongMaterial:\"phong\",MeshToonMaterial:\"phong\",MeshStandardMaterial:\"physical\",MeshPhysicalMaterial:\"physical\",LineBasicMaterial:\"basic\",LineDashedMaterial:\"dashed\",PointsMaterial:\"points\"},\nf=\"precision supportsVertexTextures map mapEncoding envMap envMapMode envMapEncoding lightMap aoMap emissiveMap emissiveMapEncoding bumpMap normalMap displacementMap specularMap roughnessMap metalnessMap gradientMap alphaMap combine vertexColors fog useFog fogExp flatShading sizeAttenuation logarithmicDepthBuffer skinning maxBones useVertexTexture morphTargets morphNormals maxMorphTargets maxMorphNormals premultipliedAlpha numDirLights numPointLights numSpotLights numHemiLights numRectAreaLights shadowMapEnabled shadowMapType toneMapping physicallyCorrectLights alphaTest doubleSided flipSided numClippingPlanes numClipIntersection depthPacking\".split(\" \");\nthis.getParameters=function(d,f,k,m,x,p){var n=e[d.type],r;b.floatVertexTextures&&p&&p.skeleton&&p.skeleton.useVertexTexture?r=1024:(r=Math.floor((b.maxVertexUniforms-20)/4),void 0!==p&&p&&p.isSkinnedMesh&&(r=Math.min(p.skeleton.bones.length,r),r<p.skeleton.bones.length&&console.warn(\"WebGLRenderer: too many bones - \"+p.skeleton.bones.length+\", this GPU supports just \"+r+\" (try OpenGL instead of ANGLE)\")));var l=a.getPrecision();null!==d.precision&&(l=b.getMaxPrecision(d.precision),l!==d.precision&&\nconsole.warn(\"THREE.WebGLProgram.getParameters:\",d.precision,\"not supported, using\",l,\"instead.\"));var u=a.getCurrentRenderTarget();return{shaderID:n,precision:l,supportsVertexTextures:b.vertexTextures,outputEncoding:c(u?u.texture:null,a.gammaOutput),map:!!d.map,mapEncoding:c(d.map,a.gammaInput),envMap:!!d.envMap,envMapMode:d.envMap&&d.envMap.mapping,envMapEncoding:c(d.envMap,a.gammaInput),envMapCubeUV:!!d.envMap&&(306===d.envMap.mapping||307===d.envMap.mapping),lightMap:!!d.lightMap,aoMap:!!d.aoMap,\nemissiveMap:!!d.emissiveMap,emissiveMapEncoding:c(d.emissiveMap,a.gammaInput),bumpMap:!!d.bumpMap,normalMap:!!d.normalMap,displacementMap:!!d.displacementMap,roughnessMap:!!d.roughnessMap,metalnessMap:!!d.metalnessMap,specularMap:!!d.specularMap,alphaMap:!!d.alphaMap,gradientMap:!!d.gradientMap,combine:d.combine,vertexColors:d.vertexColors,fog:!!k,useFog:d.fog,fogExp:k&&k.isFogExp2,flatShading:1===d.shading,sizeAttenuation:d.sizeAttenuation,logarithmicDepthBuffer:b.logarithmicDepthBuffer,skinning:d.skinning,\nmaxBones:r,useVertexTexture:b.floatVertexTextures&&p&&p.skeleton&&p.skeleton.useVertexTexture,morphTargets:d.morphTargets,morphNormals:d.morphNormals,maxMorphTargets:a.maxMorphTargets,maxMorphNormals:a.maxMorphNormals,numDirLights:f.directional.length,numPointLights:f.point.length,numSpotLights:f.spot.length,numRectAreaLights:f.rectArea.length,numHemiLights:f.hemi.length,numClippingPlanes:m,numClipIntersection:x,shadowMapEnabled:a.shadowMap.enabled&&p.receiveShadow&&0<f.shadows.length,shadowMapType:a.shadowMap.type,\ntoneMapping:a.toneMapping,physicallyCorrectLights:a.physicallyCorrectLights,premultipliedAlpha:d.premultipliedAlpha,alphaTest:d.alphaTest,doubleSided:2===d.side,flipSided:1===d.side,depthPacking:void 0!==d.depthPacking?d.depthPacking:!1}};this.getProgramCode=function(a,b){var c=[];b.shaderID?c.push(b.shaderID):(c.push(a.fragmentShader),c.push(a.vertexShader));if(void 0!==a.defines)for(var d in a.defines)c.push(d),c.push(a.defines[d]);for(d=0;d<f.length;d++)c.push(b[f[d]]);return c.join()};this.acquireProgram=\nfunction(b,c,e){for(var f,x=0,p=d.length;x<p;x++){var n=d[x];if(n.code===e){f=n;++f.usedTimes;break}}void 0===f&&(f=new zf(a,e,b,c),d.push(f));return f};this.releaseProgram=function(a){if(0===--a.usedTimes){var b=d.indexOf(a);d[b]=d[d.length-1];d.pop();a.destroy()}};this.programs=d}function Cf(a,b,c){function d(a){var h=a.target;a=f[h.id];null!==a.index&&e(a.index);var k=a.attributes,m;for(m in k)e(k[m]);h.removeEventListener(\"dispose\",d);delete f[h.id];m=b.get(h);m.wireframe&&e(m.wireframe);b[\"delete\"](h);\nh=b.get(a);h.wireframe&&e(h.wireframe);b[\"delete\"](a);c.memory.geometries--}function e(c){var d;d=c.isInterleavedBufferAttribute?b.get(c.data).__webglBuffer:b.get(c).__webglBuffer;void 0!==d&&(a.deleteBuffer(d),c.isInterleavedBufferAttribute?b[\"delete\"](c.data):b[\"delete\"](c))}var f={};return{get:function(a){var b=a.geometry;if(void 0!==f[b.id])return f[b.id];b.addEventListener(\"dispose\",d);var e;b.isBufferGeometry?e=b:b.isGeometry&&(void 0===b._bufferGeometry&&(b._bufferGeometry=(new D).setFromObject(a)),\ne=b._bufferGeometry);f[b.id]=e;c.memory.geometries++;return e}}}function Df(a,b,c){function d(c,d){var e=c.isInterleavedBufferAttribute?c.data:c,k=b.get(e);if(void 0===k.__webglBuffer){k.__webglBuffer=a.createBuffer();a.bindBuffer(d,k.__webglBuffer);a.bufferData(d,e.array,e.dynamic?a.DYNAMIC_DRAW:a.STATIC_DRAW);var m=a.FLOAT,x=e.array;x instanceof Float32Array?m=a.FLOAT:x instanceof Float64Array?console.warn(\"Unsupported data buffer format: Float64Array\"):x instanceof Uint16Array?m=a.UNSIGNED_SHORT:\nx instanceof Int16Array?m=a.SHORT:x instanceof Uint32Array?m=a.UNSIGNED_INT:x instanceof Int32Array?m=a.INT:x instanceof Int8Array?m=a.BYTE:x instanceof Uint8Array&&(m=a.UNSIGNED_BYTE);k.bytesPerElement=x.BYTES_PER_ELEMENT;k.type=m;k.version=e.version;e.onUploadCallback()}else k.version!==e.version&&(a.bindBuffer(d,k.__webglBuffer),!1===e.dynamic?a.bufferData(d,e.array,a.STATIC_DRAW):-1===e.updateRange.count?a.bufferSubData(d,0,e.array):0===e.updateRange.count?console.error(\"THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually.\"):\n(a.bufferSubData(d,e.updateRange.offset*e.array.BYTES_PER_ELEMENT,e.array.subarray(e.updateRange.offset,e.updateRange.offset+e.updateRange.count)),e.updateRange.count=0),k.version=e.version)}var e=new Cf(a,b,c);return{getAttributeBuffer:function(a){return a.isInterleavedBufferAttribute?b.get(a.data).__webglBuffer:b.get(a).__webglBuffer},getAttributeProperties:function(a){return a.isInterleavedBufferAttribute?b.get(a.data):b.get(a)},getWireframeAttribute:function(c){var e=b.get(c);if(void 0!==e.wireframe)return e.wireframe;\nvar h=[],k=c.index,m=c.attributes;c=m.position;if(null!==k)for(var k=k.array,m=0,x=k.length;m<x;m+=3){var p=k[m+0],n=k[m+1],r=k[m+2];h.push(p,n,n,r,r,p)}else for(k=m.position.array,m=0,x=k.length/3-1;m<x;m+=3)p=m+0,n=m+1,r=m+2,h.push(p,n,n,r,r,p);h=new y(new (65535<c.count?Uint32Array:Uint16Array)(h),1);d(h,a.ELEMENT_ARRAY_BUFFER);return e.wireframe=h},update:function(b){var c=e.get(b);b.geometry.isGeometry&&c.updateFromObject(b);b=c.index;var h=c.attributes;null!==b&&d(b,a.ELEMENT_ARRAY_BUFFER);\nfor(var k in h)d(h[k],a.ARRAY_BUFFER);b=c.morphAttributes;for(k in b)for(var h=b[k],m=0,x=h.length;m<x;m++)d(h[m],a.ARRAY_BUFFER);return c}}}function Ef(a,b,c,d,e,f,g){function h(a,b){if(a.width>b||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext(\"2d\").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn(\"THREE.WebGLRenderer: image is too big (\"+\na.width+\"x\"+a.height+\"). Resized to \"+d.width+\"x\"+d.height,a);return d}return a}function k(a){return Q.isPowerOfTwo(a.width)&&Q.isPowerOfTwo(a.height)}function m(b){return 1003===b||1004===b||1005===b?a.NEAREST:a.LINEAR}function x(b){b=b.target;b.removeEventListener(\"dispose\",x);a:{var c=d.get(b);if(b.image&&c.__image__webglTextureCube)a.deleteTexture(c.__image__webglTextureCube);else{if(void 0===c.__webglInit)break a;a.deleteTexture(c.__webglTexture)}d[\"delete\"](b)}q.textures--}function p(b){b=b.target;\nb.removeEventListener(\"dispose\",p);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLRenderTargetCube)for(e=0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer);d[\"delete\"](b.texture);d[\"delete\"](b)}q.textures--}function n(b,\ng){var m=d.get(b);if(0<b.version&&m.__version!==b.version){var n=b.image;if(void 0===n)console.warn(\"THREE.WebGLRenderer: Texture marked for update but image is undefined\",b);else if(!1===n.complete)console.warn(\"THREE.WebGLRenderer: Texture marked for update but image is incomplete\",b);else{void 0===m.__webglInit&&(m.__webglInit=!0,b.addEventListener(\"dispose\",x),m.__webglTexture=a.createTexture(),q.textures++);c.activeTexture(a.TEXTURE0+g);c.bindTexture(a.TEXTURE_2D,m.__webglTexture);a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,\nb.flipY);a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,b.premultiplyAlpha);a.pixelStorei(a.UNPACK_ALIGNMENT,b.unpackAlignment);var p=h(b.image,e.maxTextureSize);if((1001!==b.wrapS||1001!==b.wrapT||1003!==b.minFilter&&1006!==b.minFilter)&&!1===k(p))if(n=p,n instanceof HTMLImageElement||n instanceof HTMLCanvasElement){var l=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\");l.width=Q.nearestPowerOfTwo(n.width);l.height=Q.nearestPowerOfTwo(n.height);l.getContext(\"2d\").drawImage(n,0,0,\nl.width,l.height);console.warn(\"THREE.WebGLRenderer: image is not power of two (\"+n.width+\"x\"+n.height+\"). Resized to \"+l.width+\"x\"+l.height,n);p=l}else p=n;var n=k(p),l=f(b.format),w=f(b.type);r(a.TEXTURE_2D,b,n);var u=b.mipmaps;if(b.isDepthTexture){u=a.DEPTH_COMPONENT;if(1015===b.type){if(!t)throw Error(\"Float Depth Texture only supported in WebGL2.0\");u=a.DEPTH_COMPONENT32F}else t&&(u=a.DEPTH_COMPONENT16);1026===b.format&&u===a.DEPTH_COMPONENT&&1012!==b.type&&1014!==b.type&&(console.warn(\"THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.\"),\nb.type=1012,w=f(b.type));1027===b.format&&(u=a.DEPTH_STENCIL,1020!==b.type&&(console.warn(\"THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.\"),b.type=1020,w=f(b.type)));c.texImage2D(a.TEXTURE_2D,0,u,p.width,p.height,0,l,w,null)}else if(b.isDataTexture)if(0<u.length&&n){for(var J=0,ca=u.length;J<ca;J++)p=u[J],c.texImage2D(a.TEXTURE_2D,J,l,p.width,p.height,0,l,w,p.data);b.generateMipmaps=!1}else c.texImage2D(a.TEXTURE_2D,0,l,p.width,p.height,0,l,w,p.data);else if(b.isCompressedTexture)for(J=\n0,ca=u.length;J<ca;J++)p=u[J],1023!==b.format&&1022!==b.format?-1<c.getCompressedTextureFormats().indexOf(l)?c.compressedTexImage2D(a.TEXTURE_2D,J,l,p.width,p.height,0,p.data):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\"):c.texImage2D(a.TEXTURE_2D,J,l,p.width,p.height,0,l,w,p.data);else if(0<u.length&&n){J=0;for(ca=u.length;J<ca;J++)p=u[J],c.texImage2D(a.TEXTURE_2D,J,l,l,w,p);b.generateMipmaps=!1}else c.texImage2D(a.TEXTURE_2D,0,l,l,\nw,p);b.generateMipmaps&&n&&a.generateMipmap(a.TEXTURE_2D);m.__version=b.version;if(b.onUpdate)b.onUpdate(b);return}}c.activeTexture(a.TEXTURE0+g);c.bindTexture(a.TEXTURE_2D,m.__webglTexture)}function r(c,g,h){h?(a.texParameteri(c,a.TEXTURE_WRAP_S,f(g.wrapS)),a.texParameteri(c,a.TEXTURE_WRAP_T,f(g.wrapT)),a.texParameteri(c,a.TEXTURE_MAG_FILTER,f(g.magFilter)),a.texParameteri(c,a.TEXTURE_MIN_FILTER,f(g.minFilter))):(a.texParameteri(c,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(c,a.TEXTURE_WRAP_T,\na.CLAMP_TO_EDGE),1001===g.wrapS&&1001===g.wrapT||console.warn(\"THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.\",g),a.texParameteri(c,a.TEXTURE_MAG_FILTER,m(g.magFilter)),a.texParameteri(c,a.TEXTURE_MIN_FILTER,m(g.minFilter)),1003!==g.minFilter&&1006!==g.minFilter&&console.warn(\"THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.\",g));!(h=b.get(\"EXT_texture_filter_anisotropic\"))||\n1015===g.type&&null===b.get(\"OES_texture_float_linear\")||1016===g.type&&null===b.get(\"OES_texture_half_float_linear\")||!(1<g.anisotropy||d.get(g).__currentAnisotropy)||(a.texParameterf(c,h.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(g.anisotropy,e.getMaxAnisotropy())),d.get(g).__currentAnisotropy=g.anisotropy)}function l(b,e,g,h){var k=f(e.texture.format),m=f(e.texture.type);c.texImage2D(h,0,k,e.width,e.height,0,k,m,null);a.bindFramebuffer(a.FRAMEBUFFER,b);a.framebufferTexture2D(a.FRAMEBUFFER,g,h,d.get(e.texture).__webglTexture,\n0);a.bindFramebuffer(a.FRAMEBUFFER,null)}function u(b,c){a.bindRenderbuffer(a.RENDERBUFFER,b);c.depthBuffer&&!c.stencilBuffer?(a.renderbufferStorage(a.RENDERBUFFER,a.DEPTH_COMPONENT16,c.width,c.height),a.framebufferRenderbuffer(a.FRAMEBUFFER,a.DEPTH_ATTACHMENT,a.RENDERBUFFER,b)):c.depthBuffer&&c.stencilBuffer?(a.renderbufferStorage(a.RENDERBUFFER,a.DEPTH_STENCIL,c.width,c.height),a.framebufferRenderbuffer(a.FRAMEBUFFER,a.DEPTH_STENCIL_ATTACHMENT,a.RENDERBUFFER,b)):a.renderbufferStorage(a.RENDERBUFFER,\na.RGBA4,c.width,c.height);a.bindRenderbuffer(a.RENDERBUFFER,null)}var q=g.memory,t=\"undefined\"!==typeof WebGL2RenderingContext&&a instanceof WebGL2RenderingContext;this.setTexture2D=n;this.setTextureCube=function(b,g){var m=d.get(b);if(6===b.image.length)if(0<b.version&&m.__version!==b.version){m.__image__webglTextureCube||(b.addEventListener(\"dispose\",x),m.__image__webglTextureCube=a.createTexture(),q.textures++);c.activeTexture(a.TEXTURE0+g);c.bindTexture(a.TEXTURE_CUBE_MAP,m.__image__webglTextureCube);\na.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,b.flipY);for(var n=b&&b.isCompressedTexture,p=b.image[0]&&b.image[0].isDataTexture,l=[],w=0;6>w;w++)l[w]=n||p?p?b.image[w].image:b.image[w]:h(b.image[w],e.maxCubemapSize);var u=k(l[0]),t=f(b.format),ca=f(b.type);r(a.TEXTURE_CUBE_MAP,b,u);for(w=0;6>w;w++)if(n)for(var y,C=l[w].mipmaps,D=0,O=C.length;D<O;D++)y=C[D],1023!==b.format&&1022!==b.format?-1<c.getCompressedTextureFormats().indexOf(t)?c.compressedTexImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X+w,D,t,y.width,y.height,\n0,y.data):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()\"):c.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X+w,D,t,y.width,y.height,0,t,ca,y.data);else p?c.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X+w,0,t,l[w].width,l[w].height,0,t,ca,l[w].data):c.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X+w,0,t,t,ca,l[w]);b.generateMipmaps&&u&&a.generateMipmap(a.TEXTURE_CUBE_MAP);m.__version=b.version;if(b.onUpdate)b.onUpdate(b)}else c.activeTexture(a.TEXTURE0+\ng),c.bindTexture(a.TEXTURE_CUBE_MAP,m.__image__webglTextureCube)};this.setTextureCubeDynamic=function(b,e){c.activeTexture(a.TEXTURE0+e);c.bindTexture(a.TEXTURE_CUBE_MAP,d.get(b).__webglTexture)};this.setupRenderTarget=function(b){var e=d.get(b),f=d.get(b.texture);b.addEventListener(\"dispose\",p);f.__webglTexture=a.createTexture();q.textures++;var g=!0===b.isWebGLRenderTargetCube,h=k(b);if(g){e.__webglFramebuffer=[];for(var m=0;6>m;m++)e.__webglFramebuffer[m]=a.createFramebuffer()}else e.__webglFramebuffer=\na.createFramebuffer();if(g){c.bindTexture(a.TEXTURE_CUBE_MAP,f.__webglTexture);r(a.TEXTURE_CUBE_MAP,b.texture,h);for(m=0;6>m;m++)l(e.__webglFramebuffer[m],b,a.COLOR_ATTACHMENT0,a.TEXTURE_CUBE_MAP_POSITIVE_X+m);b.texture.generateMipmaps&&h&&a.generateMipmap(a.TEXTURE_CUBE_MAP);c.bindTexture(a.TEXTURE_CUBE_MAP,null)}else c.bindTexture(a.TEXTURE_2D,f.__webglTexture),r(a.TEXTURE_2D,b.texture,h),l(e.__webglFramebuffer,b,a.COLOR_ATTACHMENT0,a.TEXTURE_2D),b.texture.generateMipmaps&&h&&a.generateMipmap(a.TEXTURE_2D),\nc.bindTexture(a.TEXTURE_2D,null);if(b.depthBuffer){e=d.get(b);f=!0===b.isWebGLRenderTargetCube;if(b.depthTexture){if(f)throw Error(\"target.depthTexture not supported in Cube render targets\");if(b&&b.isWebGLRenderTargetCube)throw Error(\"Depth Texture with cube render targets is not supported!\");a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer);if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error(\"renderTarget.depthTexture must be an instance of THREE.DepthTexture\");d.get(b.depthTexture).__webglTexture&&\nb.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0);n(b.depthTexture,0);e=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER,a.DEPTH_ATTACHMENT,a.TEXTURE_2D,e,0);else if(1027===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER,a.DEPTH_STENCIL_ATTACHMENT,a.TEXTURE_2D,e,0);else throw Error(\"Unknown depthTexture format\");\n}else if(f)for(e.__webglDepthbuffer=[],f=0;6>f;f++)a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer[f]),e.__webglDepthbuffer[f]=a.createRenderbuffer(),u(e.__webglDepthbuffer[f],b);else a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer),e.__webglDepthbuffer=a.createRenderbuffer(),u(e.__webglDepthbuffer,b);a.bindFramebuffer(a.FRAMEBUFFER,null)}};this.updateRenderTargetMipmap=function(b){var e=b.texture;e.generateMipmaps&&k(b)&&1003!==e.minFilter&&1006!==e.minFilter&&(b=b&&b.isWebGLRenderTargetCube?\na.TEXTURE_CUBE_MAP:a.TEXTURE_2D,e=d.get(e).__webglTexture,c.bindTexture(b,e),a.generateMipmap(b),c.bindTexture(b,null))}}function Ff(){var a={};return{get:function(b){b=b.uuid;var c=a[b];void 0===c&&(c={},a[b]=c);return c},\"delete\":function(b){delete a[b.uuid]},clear:function(){a={}}}}function Gf(a,b,c){function d(b,c,d){var e=new Uint8Array(4),f=a.createTexture();a.bindTexture(b,f);a.texParameteri(b,a.TEXTURE_MIN_FILTER,a.NEAREST);a.texParameteri(b,a.TEXTURE_MAG_FILTER,a.NEAREST);for(b=0;b<d;b++)a.texImage2D(c+\nb,0,a.RGBA,1,1,0,a.RGBA,a.UNSIGNED_BYTE,e);return f}function e(b){!0!==v[b]&&(a.enable(b),v[b]=!0)}function f(b){!1!==v[b]&&(a.disable(b),v[b]=!1)}function g(b,d,g,h,k,m,n,p){0!==b?e(a.BLEND):f(a.BLEND);if(b!==z||p!==ca)2===b?p?(a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.ONE,a.ONE,a.ONE,a.ONE)):(a.blendEquation(a.FUNC_ADD),a.blendFunc(a.SRC_ALPHA,a.ONE)):3===b?p?(a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.ZERO,a.ZERO,a.ONE_MINUS_SRC_COLOR,a.ONE_MINUS_SRC_ALPHA)):\n(a.blendEquation(a.FUNC_ADD),a.blendFunc(a.ZERO,a.ONE_MINUS_SRC_COLOR)):4===b?p?(a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.ZERO,a.SRC_COLOR,a.ZERO,a.SRC_ALPHA)):(a.blendEquation(a.FUNC_ADD),a.blendFunc(a.ZERO,a.SRC_COLOR)):p?(a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.ONE,a.ONE_MINUS_SRC_ALPHA,a.ONE,a.ONE_MINUS_SRC_ALPHA)):(a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.SRC_ALPHA,a.ONE_MINUS_SRC_ALPHA,a.ONE,a.ONE_MINUS_SRC_ALPHA)),\nz=b,ca=p;if(5===b){k=k||d;m=m||g;n=n||h;if(d!==A||k!==K)a.blendEquationSeparate(c(d),c(k)),A=d,K=k;if(g!==I||h!==E||m!==y||n!==J)a.blendFuncSeparate(c(g),c(h),c(m),c(n)),I=g,E=h,y=m,J=n}else J=y=K=E=I=A=null}function h(a){n.setFunc(a)}function k(b){C!==b&&(b?a.frontFace(a.CW):a.frontFace(a.CCW),C=b)}function m(b){0!==b?(e(a.CULL_FACE),b!==D&&(1===b?a.cullFace(a.BACK):2===b?a.cullFace(a.FRONT):a.cullFace(a.FRONT_AND_BACK))):f(a.CULL_FACE);D=b}function x(b){void 0===b&&(b=a.TEXTURE0+T-1);V!==b&&(a.activeTexture(b),\nV=b)}var p=new function(){var b=!1,c=new ga,d=null,e=new ga;return{setMask:function(c){d===c||b||(a.colorMask(c,c,c,c),d=c)},setLocked:function(a){b=a},setClear:function(b,d,f,g,h){!0===h&&(b*=g,d*=g,f*=g);c.set(b,d,f,g);!1===e.equals(c)&&(a.clearColor(b,d,f,g),e.copy(c))},reset:function(){b=!1;d=null;e.set(0,0,0,1)}}},n=new function(){var b=!1,c=null,d=null,g=null;return{setTest:function(b){b?e(a.DEPTH_TEST):f(a.DEPTH_TEST)},setMask:function(d){c===d||b||(a.depthMask(d),c=d)},setFunc:function(b){if(d!==\nb){if(b)switch(b){case 0:a.depthFunc(a.NEVER);break;case 1:a.depthFunc(a.ALWAYS);break;case 2:a.depthFunc(a.LESS);break;case 3:a.depthFunc(a.LEQUAL);break;case 4:a.depthFunc(a.EQUAL);break;case 5:a.depthFunc(a.GEQUAL);break;case 6:a.depthFunc(a.GREATER);break;case 7:a.depthFunc(a.NOTEQUAL);break;default:a.depthFunc(a.LEQUAL)}else a.depthFunc(a.LEQUAL);d=b}},setLocked:function(a){b=a},setClear:function(b){g!==b&&(a.clearDepth(b),g=b)},reset:function(){b=!1;g=d=c=null}}},r=new function(){var b=!1,c=\nnull,d=null,g=null,h=null,k=null,m=null,n=null,p=null;return{setTest:function(b){b?e(a.STENCIL_TEST):f(a.STENCIL_TEST)},setMask:function(d){c===d||b||(a.stencilMask(d),c=d)},setFunc:function(b,c,e){if(d!==b||g!==c||h!==e)a.stencilFunc(b,c,e),d=b,g=c,h=e},setOp:function(b,c,d){if(k!==b||m!==c||n!==d)a.stencilOp(b,c,d),k=b,m=c,n=d},setLocked:function(a){b=a},setClear:function(b){p!==b&&(a.clearStencil(b),p=b)},reset:function(){b=!1;p=n=m=k=h=g=d=c=null}}},l=a.getParameter(a.MAX_VERTEX_ATTRIBS),u=new Uint8Array(l),\nq=new Uint8Array(l),t=new Uint8Array(l),v={},M=null,z=null,A=null,I=null,E=null,K=null,y=null,J=null,ca=!1,C=null,D=null,G=null,O=null,P=null,R=null,T=a.getParameter(a.MAX_TEXTURE_IMAGE_UNITS),l=parseFloat(/^WebGL\\ ([0-9])/.exec(a.getParameter(a.VERSION))[1]),H=1<=parseFloat(l),V=null,N={},L=new ga,S=new ga,Q={};Q[a.TEXTURE_2D]=d(a.TEXTURE_2D,a.TEXTURE_2D,1);Q[a.TEXTURE_CUBE_MAP]=d(a.TEXTURE_CUBE_MAP,a.TEXTURE_CUBE_MAP_POSITIVE_X,6);return{buffers:{color:p,depth:n,stencil:r},init:function(){p.setClear(0,\n0,0,1);n.setClear(1);r.setClear(0);e(a.DEPTH_TEST);h(3);k(!1);m(1);e(a.CULL_FACE);e(a.BLEND);g(1)},initAttributes:function(){for(var a=0,b=u.length;a<b;a++)u[a]=0},enableAttribute:function(c){u[c]=1;0===q[c]&&(a.enableVertexAttribArray(c),q[c]=1);0!==t[c]&&(b.get(\"ANGLE_instanced_arrays\").vertexAttribDivisorANGLE(c,0),t[c]=0)},enableAttributeAndDivisor:function(b,c,d){u[b]=1;0===q[b]&&(a.enableVertexAttribArray(b),q[b]=1);t[b]!==c&&(d.vertexAttribDivisorANGLE(b,c),t[b]=c)},disableUnusedAttributes:function(){for(var b=\n0,c=q.length;b!==c;++b)q[b]!==u[b]&&(a.disableVertexAttribArray(b),q[b]=0)},enable:e,disable:f,getCompressedTextureFormats:function(){if(null===M&&(M=[],b.get(\"WEBGL_compressed_texture_pvrtc\")||b.get(\"WEBGL_compressed_texture_s3tc\")||b.get(\"WEBGL_compressed_texture_etc1\")))for(var c=a.getParameter(a.COMPRESSED_TEXTURE_FORMATS),d=0;d<c.length;d++)M.push(c[d]);return M},setBlending:g,setColorWrite:function(a){p.setMask(a)},setDepthTest:function(a){n.setTest(a)},setDepthWrite:function(a){n.setMask(a)},\nsetDepthFunc:h,setStencilTest:function(a){r.setTest(a)},setStencilWrite:function(a){r.setMask(a)},setStencilFunc:function(a,b,c){r.setFunc(a,b,c)},setStencilOp:function(a,b,c){r.setOp(a,b,c)},setFlipSided:k,setCullFace:m,setLineWidth:function(b){b!==G&&(H&&a.lineWidth(b),G=b)},setPolygonOffset:function(b,c,d){if(b){if(e(a.POLYGON_OFFSET_FILL),O!==c||P!==d)a.polygonOffset(c,d),O=c,P=d}else f(a.POLYGON_OFFSET_FILL)},getScissorTest:function(){return R},setScissorTest:function(b){(R=b)?e(a.SCISSOR_TEST):\nf(a.SCISSOR_TEST)},activeTexture:x,bindTexture:function(b,c){null===V&&x();var d=N[V];void 0===d&&(d={type:void 0,texture:void 0},N[V]=d);if(d.type!==b||d.texture!==c)a.bindTexture(b,c||Q[b]),d.type=b,d.texture=c},compressedTexImage2D:function(){try{a.compressedTexImage2D.apply(a,arguments)}catch(b){console.error(b)}},texImage2D:function(){try{a.texImage2D.apply(a,arguments)}catch(b){console.error(b)}},scissor:function(b){!1===L.equals(b)&&(a.scissor(b.x,b.y,b.z,b.w),L.copy(b))},viewport:function(b){!1===\nS.equals(b)&&(a.viewport(b.x,b.y,b.z,b.w),S.copy(b))},reset:function(){for(var b=0;b<q.length;b++)1===q[b]&&(a.disableVertexAttribArray(b),q[b]=0);v={};V=M=null;N={};D=C=z=null;p.reset();n.reset();r.reset()}}}function Hf(a,b,c){function d(b){if(\"highp\"===b){if(0<a.getShaderPrecisionFormat(a.VERTEX_SHADER,a.HIGH_FLOAT).precision&&0<a.getShaderPrecisionFormat(a.FRAGMENT_SHADER,a.HIGH_FLOAT).precision)return\"highp\";b=\"mediump\"}return\"mediump\"===b&&0<a.getShaderPrecisionFormat(a.VERTEX_SHADER,a.MEDIUM_FLOAT).precision&&\n0<a.getShaderPrecisionFormat(a.FRAGMENT_SHADER,a.MEDIUM_FLOAT).precision?\"mediump\":\"lowp\"}var e,f=void 0!==c.precision?c.precision:\"highp\",g=d(f);g!==f&&(console.warn(\"THREE.WebGLRenderer:\",f,\"not supported, using\",g,\"instead.\"),f=g);c=!0===c.logarithmicDepthBuffer&&!!b.get(\"EXT_frag_depth\");var g=a.getParameter(a.MAX_TEXTURE_IMAGE_UNITS),h=a.getParameter(a.MAX_VERTEX_TEXTURE_IMAGE_UNITS),k=a.getParameter(a.MAX_TEXTURE_SIZE),m=a.getParameter(a.MAX_CUBE_MAP_TEXTURE_SIZE),x=a.getParameter(a.MAX_VERTEX_ATTRIBS),\np=a.getParameter(a.MAX_VERTEX_UNIFORM_VECTORS),n=a.getParameter(a.MAX_VARYING_VECTORS),r=a.getParameter(a.MAX_FRAGMENT_UNIFORM_VECTORS),l=0<h,u=!!b.get(\"OES_texture_float\");return{getMaxAnisotropy:function(){if(void 0!==e)return e;var c=b.get(\"EXT_texture_filter_anisotropic\");return e=null!==c?a.getParameter(c.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0},getMaxPrecision:d,precision:f,logarithmicDepthBuffer:c,maxTextures:g,maxVertexTextures:h,maxTextureSize:k,maxCubemapSize:m,maxAttributes:x,maxVertexUniforms:p,\nmaxVaryings:n,maxFragmentUniforms:r,vertexTextures:l,floatFragmentTextures:u,floatVertexTextures:l&&u}}function If(a){var b={};return{get:function(c){if(void 0!==b[c])return b[c];var d;switch(c){case \"WEBGL_depth_texture\":d=a.getExtension(\"WEBGL_depth_texture\")||a.getExtension(\"MOZ_WEBGL_depth_texture\")||a.getExtension(\"WEBKIT_WEBGL_depth_texture\");break;case \"EXT_texture_filter_anisotropic\":d=a.getExtension(\"EXT_texture_filter_anisotropic\")||a.getExtension(\"MOZ_EXT_texture_filter_anisotropic\")||\na.getExtension(\"WEBKIT_EXT_texture_filter_anisotropic\");break;case \"WEBGL_compressed_texture_s3tc\":d=a.getExtension(\"WEBGL_compressed_texture_s3tc\")||a.getExtension(\"MOZ_WEBGL_compressed_texture_s3tc\")||a.getExtension(\"WEBKIT_WEBGL_compressed_texture_s3tc\");break;case \"WEBGL_compressed_texture_pvrtc\":d=a.getExtension(\"WEBGL_compressed_texture_pvrtc\")||a.getExtension(\"WEBKIT_WEBGL_compressed_texture_pvrtc\");break;case \"WEBGL_compressed_texture_etc1\":d=a.getExtension(\"WEBGL_compressed_texture_etc1\");\nbreak;default:d=a.getExtension(c)}null===d&&console.warn(\"THREE.WebGLRenderer: \"+c+\" extension not supported.\");return b[c]=d}}}function Jf(){function a(){m.value!==d&&(m.value=d,m.needsUpdate=0<e);c.numPlanes=e;c.numIntersection=0}function b(a,b,d,e){var f=null!==a?a.length:0,g=null;if(0!==f){g=m.value;if(!0!==e||null===g){e=d+4*f;b=b.matrixWorldInverse;k.getNormalMatrix(b);if(null===g||g.length<e)g=new Float32Array(e);for(e=0;e!==f;++e,d+=4)h.copy(a[e]).applyMatrix4(b,k),h.normal.toArray(g,d),g[d+\n3]=h.constant}m.value=g;m.needsUpdate=!0}c.numPlanes=f;return g}var c=this,d=null,e=0,f=!1,g=!1,h=new ma,k=new za,m={value:null,needsUpdate:!1};this.uniform=m;this.numIntersection=this.numPlanes=0;this.init=function(a,c,g){var h=0!==a.length||c||0!==e||f;f=c;d=b(a,g,0);e=a.length;return h};this.beginShadows=function(){g=!0;b(null)};this.endShadows=function(){g=!1;a()};this.setState=function(c,h,k,r,l,u){if(!f||null===c||0===c.length||g&&!k)g?b(null):a();else{k=g?0:e;var q=4*k,t=l.clippingState||null;\nm.value=t;t=b(c,r,q,u);for(c=0;c!==q;++c)t[c]=d[c];l.clippingState=t;this.numIntersection=h?this.numPlanes:0;this.numPlanes+=k}}}function Nd(a){function b(){Y.init();Y.scissor(X.copy(fa).multiplyScalar(Sa));Y.viewport(Z.copy(ia).multiplyScalar(Sa));Y.buffers.color.setClear(Ga.r,Ga.g,Ga.b,fb,K)}function c(){W=Q=null;U=\"\";L=-1;Y.reset()}function d(a){a.preventDefault();c();b();ha.clear()}function e(a){a=a.target;a.removeEventListener(\"dispose\",e);f(a);ha[\"delete\"](a)}function f(a){var b=ha.get(a).program;\na.program=void 0;void 0!==b&&za.releaseProgram(b)}function g(a,b){return Math.abs(b[0])-Math.abs(a[0])}function h(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.program&&b.material.program&&a.material.program!==b.material.program?a.material.program.id-b.material.program.id:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function k(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-\nb.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function m(a,b,c,d,e){var f;c.transparent?(d=G,f=++Na):(d=ca,f=++C);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=ba.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:ba.z,group:e},d.push(f))}function x(a){if(!na.intersectsSphere(a))return!1;var b=da.numPlanes;if(0===b)return!0;var c=T.clippingPlanes,d=a.center;a=-a.radius;var e=0;do if(c[e].distanceToPoint(d)<a)return!1;while(++e!==b);return!0}function p(a,b){if(!1!==\na.visible){if(0!==(a.layers.mask&b.layers.mask))if(a.isLight)J.push(a);else if(a.isSprite){var c;(c=!1===a.frustumCulled)||(oa.center.set(0,0,0),oa.radius=.7071067811865476,oa.applyMatrix4(a.matrixWorld),c=!0===x(oa));c&&P.push(a)}else if(a.isLensFlare)R.push(a);else if(a.isImmediateRenderObject)!0===T.sortObjects&&(ba.setFromMatrixPosition(a.matrixWorld),ba.applyProjection(sa)),m(a,null,a.material,ba.z,null);else if(a.isMesh||a.isLine||a.isPoints)if(a.isSkinnedMesh&&a.skeleton.update(),(c=!1===a.frustumCulled)||\n(c=a.geometry,null===c.boundingSphere&&c.computeBoundingSphere(),oa.copy(c.boundingSphere).applyMatrix4(a.matrixWorld),c=!0===x(oa)),c){var d=a.material;if(!0===d.visible)if(!0===T.sortObjects&&(ba.setFromMatrixPosition(a.matrixWorld),ba.applyProjection(sa)),c=ta.update(a),d.isMultiMaterial)for(var e=c.groups,f=d.materials,d=0,g=e.length;d<g;d++){var h=e[d],k=f[h.materialIndex];!0===k.visible&&m(a,c,k,ba.z,h)}else m(a,c,d,ba.z,null)}c=a.children;d=0;for(g=c.length;d<g;d++)p(c[d],b)}}function n(a,\nb,c,d){for(var e=0,f=a.length;e<f;e++){var g=a[e],h=g.object,k=g.geometry,m=void 0===d?g.material:d,g=g.group;h.modelViewMatrix.multiplyMatrices(c.matrixWorldInverse,h.matrixWorld);h.normalMatrix.getNormalMatrix(h.modelViewMatrix);h.onBeforeRender(T,b,c,k,m,g);if(h.isImmediateRenderObject){r(m);var n=l(c,b.fog,m,h);U=\"\";h.render(function(a){T.renderBufferImmediate(a,n,m)})}else T.renderBufferDirect(c,b.fog,k,m,h,g);h.onAfterRender(T,b,c,k,m,g)}}function r(a){2===a.side?Y.disable(B.CULL_FACE):Y.enable(B.CULL_FACE);\nY.setFlipSided(1===a.side);!0===a.transparent?Y.setBlending(a.blending,a.blendEquation,a.blendSrc,a.blendDst,a.blendEquationAlpha,a.blendSrcAlpha,a.blendDstAlpha,a.premultipliedAlpha):Y.setBlending(0);Y.setDepthFunc(a.depthFunc);Y.setDepthTest(a.depthTest);Y.setDepthWrite(a.depthWrite);Y.setColorWrite(a.colorWrite);Y.setPolygonOffset(a.polygonOffset,a.polygonOffsetFactor,a.polygonOffsetUnits)}function l(a,b,c,d){ea=0;var g=ha.get(c);pa&&(ua||a!==W)&&da.setState(c.clippingPlanes,c.clipIntersection,\nc.clipShadows,a,g,a===W&&c.id===L);!1===c.needsUpdate&&(void 0===g.program?c.needsUpdate=!0:c.fog&&g.fog!==b?c.needsUpdate=!0:c.lights&&g.lightsHash!==aa.hash?c.needsUpdate=!0:void 0===g.numClippingPlanes||g.numClippingPlanes===da.numPlanes&&g.numIntersection===da.numIntersection||(c.needsUpdate=!0));if(c.needsUpdate){a:{var h=ha.get(c),k=za.getParameters(c,aa,b,da.numPlanes,da.numIntersection,d),m=za.getProgramCode(c,k),n=h.program,p=!0;if(void 0===n)c.addEventListener(\"dispose\",e);else if(n.code!==\nm)f(c);else if(void 0!==k.shaderID)break a;else p=!1;p&&(k.shaderID?(n=Gb[k.shaderID],h.__webglShader={name:c.type,uniforms:Ja.clone(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader}):h.__webglShader={name:c.type,uniforms:c.uniforms,vertexShader:c.vertexShader,fragmentShader:c.fragmentShader},c.__webglShader=h.__webglShader,n=za.acquireProgram(c,k,m),h.program=n,c.program=n);k=n.getAttributes();if(c.morphTargets)for(m=c.numSupportedMorphTargets=0;m<T.maxMorphTargets;m++)0<=\nk[\"morphTarget\"+m]&&c.numSupportedMorphTargets++;if(c.morphNormals)for(m=c.numSupportedMorphNormals=0;m<T.maxMorphNormals;m++)0<=k[\"morphNormal\"+m]&&c.numSupportedMorphNormals++;k=h.__webglShader.uniforms;if(!c.isShaderMaterial&&!c.isRawShaderMaterial||!0===c.clipping)h.numClippingPlanes=da.numPlanes,h.numIntersection=da.numIntersection,k.clippingPlanes=da.uniform;h.fog=b;h.lightsHash=aa.hash;c.lights&&(k.ambientLightColor.value=aa.ambient,k.directionalLights.value=aa.directional,k.spotLights.value=\naa.spot,k.rectAreaLights.value=aa.rectArea,k.pointLights.value=aa.point,k.hemisphereLights.value=aa.hemi,k.directionalShadowMap.value=aa.directionalShadowMap,k.directionalShadowMatrix.value=aa.directionalShadowMatrix,k.spotShadowMap.value=aa.spotShadowMap,k.spotShadowMatrix.value=aa.spotShadowMatrix,k.pointShadowMap.value=aa.pointShadowMap,k.pointShadowMatrix.value=aa.pointShadowMatrix);m=h.program.getUniforms();k=$a.seqWithValue(m.seq,k);h.uniformsList=k}c.needsUpdate=!1}var x=!1,p=n=!1,h=g.program,\nk=h.getUniforms(),m=g.__webglShader.uniforms;h.id!==Q&&(B.useProgram(h.program),Q=h.id,p=n=x=!0);c.id!==L&&(L=c.id,n=!0);if(x||a!==W){k.set(B,a,\"projectionMatrix\");ma.logarithmicDepthBuffer&&k.setValue(B,\"logDepthBufFC\",2/(Math.log(a.far+1)/Math.LN2));a!==W&&(W=a,p=n=!0);if(c.isShaderMaterial||c.isMeshPhongMaterial||c.isMeshStandardMaterial||c.envMap)x=k.map.cameraPosition,void 0!==x&&x.setValue(B,ba.setFromMatrixPosition(a.matrixWorld));(c.isMeshPhongMaterial||c.isMeshLambertMaterial||c.isMeshBasicMaterial||\nc.isMeshStandardMaterial||c.isShaderMaterial||c.skinning)&&k.setValue(B,\"viewMatrix\",a.matrixWorldInverse);k.set(B,T,\"toneMappingExposure\");k.set(B,T,\"toneMappingWhitePoint\")}c.skinning&&(k.setOptional(B,d,\"bindMatrix\"),k.setOptional(B,d,\"bindMatrixInverse\"),a=d.skeleton)&&(ma.floatVertexTextures&&a.useVertexTexture?(k.set(B,a,\"boneTexture\"),k.set(B,a,\"boneTextureWidth\"),k.set(B,a,\"boneTextureHeight\")):k.setOptional(B,a,\"boneMatrices\"));if(n){c.lights&&(a=p,m.ambientLightColor.needsUpdate=a,m.directionalLights.needsUpdate=\na,m.pointLights.needsUpdate=a,m.spotLights.needsUpdate=a,m.rectAreaLights.needsUpdate=a,m.hemisphereLights.needsUpdate=a);b&&c.fog&&(m.fogColor.value=b.color,b.isFog?(m.fogNear.value=b.near,m.fogFar.value=b.far):b.isFogExp2&&(m.fogDensity.value=b.density));if(c.isMeshBasicMaterial||c.isMeshLambertMaterial||c.isMeshPhongMaterial||c.isMeshStandardMaterial||c.isMeshNormalMaterial||c.isMeshDepthMaterial){m.opacity.value=c.opacity;m.diffuse.value=c.color;c.emissive&&m.emissive.value.copy(c.emissive).multiplyScalar(c.emissiveIntensity);\nm.map.value=c.map;m.specularMap.value=c.specularMap;m.alphaMap.value=c.alphaMap;c.lightMap&&(m.lightMap.value=c.lightMap,m.lightMapIntensity.value=c.lightMapIntensity);c.aoMap&&(m.aoMap.value=c.aoMap,m.aoMapIntensity.value=c.aoMapIntensity);var r;c.map?r=c.map:c.specularMap?r=c.specularMap:c.displacementMap?r=c.displacementMap:c.normalMap?r=c.normalMap:c.bumpMap?r=c.bumpMap:c.roughnessMap?r=c.roughnessMap:c.metalnessMap?r=c.metalnessMap:c.alphaMap?r=c.alphaMap:c.emissiveMap&&(r=c.emissiveMap);void 0!==\nr&&(r.isWebGLRenderTarget&&(r=r.texture),b=r.offset,r=r.repeat,m.offsetRepeat.value.set(b.x,b.y,r.x,r.y));m.envMap.value=c.envMap;m.flipEnvMap.value=c.envMap&&c.envMap.isCubeTexture?-1:1;m.reflectivity.value=c.reflectivity;m.refractionRatio.value=c.refractionRatio}c.isLineBasicMaterial?(m.diffuse.value=c.color,m.opacity.value=c.opacity):c.isLineDashedMaterial?(m.diffuse.value=c.color,m.opacity.value=c.opacity,m.dashSize.value=c.dashSize,m.totalSize.value=c.dashSize+c.gapSize,m.scale.value=c.scale):\nc.isPointsMaterial?(m.diffuse.value=c.color,m.opacity.value=c.opacity,m.size.value=c.size*Sa,m.scale.value=.5*yc,m.map.value=c.map,null!==c.map&&(r=c.map.offset,c=c.map.repeat,m.offsetRepeat.value.set(r.x,r.y,c.x,c.y))):c.isMeshLambertMaterial?c.emissiveMap&&(m.emissiveMap.value=c.emissiveMap):c.isMeshToonMaterial?(u(m,c),c.gradientMap&&(m.gradientMap.value=c.gradientMap)):c.isMeshPhongMaterial?u(m,c):c.isMeshPhysicalMaterial?(m.clearCoat.value=c.clearCoat,m.clearCoatRoughness.value=c.clearCoatRoughness,\nF(m,c)):c.isMeshStandardMaterial?F(m,c):c.isMeshDepthMaterial?c.displacementMap&&(m.displacementMap.value=c.displacementMap,m.displacementScale.value=c.displacementScale,m.displacementBias.value=c.displacementBias):c.isMeshNormalMaterial&&(c.bumpMap&&(m.bumpMap.value=c.bumpMap,m.bumpScale.value=c.bumpScale),c.normalMap&&(m.normalMap.value=c.normalMap,m.normalScale.value.copy(c.normalScale)),c.displacementMap&&(m.displacementMap.value=c.displacementMap,m.displacementScale.value=c.displacementScale,\nm.displacementBias.value=c.displacementBias));void 0!==m.ltcMat&&(m.ltcMat.value=THREE.UniformsLib.LTC_MAT_TEXTURE);void 0!==m.ltcMag&&(m.ltcMag.value=THREE.UniformsLib.LTC_MAG_TEXTURE);$a.upload(B,g.uniformsList,m,T)}k.set(B,d,\"modelViewMatrix\");k.set(B,d,\"normalMatrix\");k.setValue(B,\"modelMatrix\",d.matrixWorld);return h}function u(a,b){a.specular.value=b.specular;a.shininess.value=Math.max(b.shininess,1E-4);b.emissiveMap&&(a.emissiveMap.value=b.emissiveMap);b.bumpMap&&(a.bumpMap.value=b.bumpMap,\na.bumpScale.value=b.bumpScale);b.normalMap&&(a.normalMap.value=b.normalMap,a.normalScale.value.copy(b.normalScale));b.displacementMap&&(a.displacementMap.value=b.displacementMap,a.displacementScale.value=b.displacementScale,a.displacementBias.value=b.displacementBias)}function F(a,b){a.roughness.value=b.roughness;a.metalness.value=b.metalness;b.roughnessMap&&(a.roughnessMap.value=b.roughnessMap);b.metalnessMap&&(a.metalnessMap.value=b.metalnessMap);b.emissiveMap&&(a.emissiveMap.value=b.emissiveMap);\nb.bumpMap&&(a.bumpMap.value=b.bumpMap,a.bumpScale.value=b.bumpScale);b.normalMap&&(a.normalMap.value=b.normalMap,a.normalScale.value.copy(b.normalScale));b.displacementMap&&(a.displacementMap.value=b.displacementMap,a.displacementScale.value=b.displacementScale,a.displacementBias.value=b.displacementBias);b.envMap&&(a.envMapIntensity.value=b.envMapIntensity)}function t(a){var b;if(1E3===a)return B.REPEAT;if(1001===a)return B.CLAMP_TO_EDGE;if(1002===a)return B.MIRRORED_REPEAT;if(1003===a)return B.NEAREST;\nif(1004===a)return B.NEAREST_MIPMAP_NEAREST;if(1005===a)return B.NEAREST_MIPMAP_LINEAR;if(1006===a)return B.LINEAR;if(1007===a)return B.LINEAR_MIPMAP_NEAREST;if(1008===a)return B.LINEAR_MIPMAP_LINEAR;if(1009===a)return B.UNSIGNED_BYTE;if(1017===a)return B.UNSIGNED_SHORT_4_4_4_4;if(1018===a)return B.UNSIGNED_SHORT_5_5_5_1;if(1019===a)return B.UNSIGNED_SHORT_5_6_5;if(1010===a)return B.BYTE;if(1011===a)return B.SHORT;if(1012===a)return B.UNSIGNED_SHORT;if(1013===a)return B.INT;if(1014===a)return B.UNSIGNED_INT;\nif(1015===a)return B.FLOAT;if(1016===a&&(b=ja.get(\"OES_texture_half_float\"),null!==b))return b.HALF_FLOAT_OES;if(1021===a)return B.ALPHA;if(1022===a)return B.RGB;if(1023===a)return B.RGBA;if(1024===a)return B.LUMINANCE;if(1025===a)return B.LUMINANCE_ALPHA;if(1026===a)return B.DEPTH_COMPONENT;if(1027===a)return B.DEPTH_STENCIL;if(100===a)return B.FUNC_ADD;if(101===a)return B.FUNC_SUBTRACT;if(102===a)return B.FUNC_REVERSE_SUBTRACT;if(200===a)return B.ZERO;if(201===a)return B.ONE;if(202===a)return B.SRC_COLOR;\nif(203===a)return B.ONE_MINUS_SRC_COLOR;if(204===a)return B.SRC_ALPHA;if(205===a)return B.ONE_MINUS_SRC_ALPHA;if(206===a)return B.DST_ALPHA;if(207===a)return B.ONE_MINUS_DST_ALPHA;if(208===a)return B.DST_COLOR;if(209===a)return B.ONE_MINUS_DST_COLOR;if(210===a)return B.SRC_ALPHA_SATURATE;if(2001===a||2002===a||2003===a||2004===a)if(b=ja.get(\"WEBGL_compressed_texture_s3tc\"),null!==b){if(2001===a)return b.COMPRESSED_RGB_S3TC_DXT1_EXT;if(2002===a)return b.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(2003===a)return b.COMPRESSED_RGBA_S3TC_DXT3_EXT;\nif(2004===a)return b.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(2100===a||2101===a||2102===a||2103===a)if(b=ja.get(\"WEBGL_compressed_texture_pvrtc\"),null!==b){if(2100===a)return b.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(2101===a)return b.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(2102===a)return b.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(2103===a)return b.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(2151===a&&(b=ja.get(\"WEBGL_compressed_texture_etc1\"),null!==b))return b.COMPRESSED_RGB_ETC1_WEBGL;if(103===a||104===a)if(b=ja.get(\"EXT_blend_minmax\"),\nnull!==b){if(103===a)return b.MIN_EXT;if(104===a)return b.MAX_EXT}return 1020===a&&(b=ja.get(\"WEBGL_depth_texture\"),null!==b)?b.UNSIGNED_INT_24_8_WEBGL:0}console.log(\"THREE.WebGLRenderer\",\"83\");a=a||{};var v=void 0!==a.canvas?a.canvas:document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\"),M=void 0!==a.context?a.context:null,z=void 0!==a.alpha?a.alpha:!1,A=void 0!==a.depth?a.depth:!0,I=void 0!==a.stencil?a.stencil:!0,E=void 0!==a.antialias?a.antialias:!1,K=void 0!==a.premultipliedAlpha?\na.premultipliedAlpha:!0,y=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,J=[],ca=[],C=-1,G=[],Na=-1,O=new Float32Array(8),P=[],R=[];this.domElement=v;this.context=null;this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.clippingPlanes=[];this.localClippingEnabled=!1;this.gammaFactor=2;this.physicallyCorrectLights=this.gammaOutput=this.gammaInput=!1;this.toneMappingWhitePoint=this.toneMappingExposure=this.toneMapping=1;this.maxMorphTargets=\n8;this.maxMorphNormals=4;var T=this,Q=null,V=null,S=null,L=-1,U=\"\",W=null,X=new ga,Ta=null,Z=new ga,ea=0,Ga=new N(0),fb=0,fd=v.width,yc=v.height,Sa=1,fa=new ga(0,0,fd,yc),ka=!1,ia=new ga(0,0,fd,yc),na=new qc,da=new Jf,pa=!1,ua=!1,oa=new Fa,sa=new H,ba=new q,wa=new H,xa=new H,aa={hash:\"\",ambient:[0,0,0],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],shadows:[]},qa={calls:0,\nvertices:0,faces:0,points:0};this.info={render:qa,memory:{geometries:0,textures:0},programs:null};var B;try{z={alpha:z,depth:A,stencil:I,antialias:E,premultipliedAlpha:K,preserveDrawingBuffer:y};B=M||v.getContext(\"webgl\",z)||v.getContext(\"experimental-webgl\",z);if(null===B){if(null!==v.getContext(\"webgl\"))throw\"Error creating WebGL context with your selected attributes.\";throw\"Error creating WebGL context.\";}void 0===B.getShaderPrecisionFormat&&(B.getShaderPrecisionFormat=function(){return{rangeMin:1,\nrangeMax:1,precision:1}});v.addEventListener(\"webglcontextlost\",d,!1)}catch(Kf){console.error(\"THREE.WebGLRenderer: \"+Kf)}var ja=new If(B);ja.get(\"WEBGL_depth_texture\");ja.get(\"OES_texture_float\");ja.get(\"OES_texture_float_linear\");ja.get(\"OES_texture_half_float\");ja.get(\"OES_texture_half_float_linear\");ja.get(\"OES_standard_derivatives\");ja.get(\"ANGLE_instanced_arrays\");ja.get(\"OES_element_index_uint\")&&(D.MaxIndex=4294967296);var ma=new Hf(B,ja,a),Y=new Gf(B,ja,t),ha=new Ff,va=new Ef(B,ja,Y,ha,ma,\nt,this.info),ta=new Df(B,ha,this.info),za=new Bf(this,ma),Aa=new tf;this.info.programs=za.programs;var La=new sf(B,ja,qa),Ma=new rf(B,ja,qa),Oa=new Hb(-1,1,1,-1,0,1),Ca=new Ha,Ea=new Ba(new ib(2,2),new Ka({depthTest:!1,depthWrite:!1,fog:!1}));a=Gb.cube;var ya=new Ba(new hb(5,5,5),new Ia({uniforms:a.uniforms,vertexShader:a.vertexShader,fragmentShader:a.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1}));b();this.context=B;this.capabilities=ma;this.extensions=ja;this.properties=ha;this.state=\nY;var Pa=new ye(this,aa,ta,ma);this.shadowMap=Pa;var Qa=new of(this,P),Ra=new nf(this,R);this.getContext=function(){return B};this.getContextAttributes=function(){return B.getContextAttributes()};this.forceContextLoss=function(){ja.get(\"WEBGL_lose_context\").loseContext()};this.getMaxAnisotropy=function(){return ma.getMaxAnisotropy()};this.getPrecision=function(){return ma.precision};this.getPixelRatio=function(){return Sa};this.setPixelRatio=function(a){void 0!==a&&(Sa=a,this.setSize(ia.z,ia.w,!1))};\nthis.getSize=function(){return{width:fd,height:yc}};this.setSize=function(a,b,c){fd=a;yc=b;v.width=a*Sa;v.height=b*Sa;!1!==c&&(v.style.width=a+\"px\",v.style.height=b+\"px\");this.setViewport(0,0,a,b)};this.setViewport=function(a,b,c,d){Y.viewport(ia.set(a,b,c,d))};this.setScissor=function(a,b,c,d){Y.scissor(fa.set(a,b,c,d))};this.setScissorTest=function(a){Y.setScissorTest(ka=a)};this.getClearColor=function(){return Ga};this.setClearColor=function(a,b){Ga.set(a);fb=void 0!==b?b:1;Y.buffers.color.setClear(Ga.r,\nGa.g,Ga.b,fb,K)};this.getClearAlpha=function(){return fb};this.setClearAlpha=function(a){fb=a;Y.buffers.color.setClear(Ga.r,Ga.g,Ga.b,fb,K)};this.clear=function(a,b,c){var d=0;if(void 0===a||a)d|=B.COLOR_BUFFER_BIT;if(void 0===b||b)d|=B.DEPTH_BUFFER_BIT;if(void 0===c||c)d|=B.STENCIL_BUFFER_BIT;B.clear(d)};this.clearColor=function(){this.clear(!0,!1,!1)};this.clearDepth=function(){this.clear(!1,!0,!1)};this.clearStencil=function(){this.clear(!1,!1,!0)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);\nthis.clear(b,c,d)};this.resetGLState=c;this.dispose=function(){G=[];Na=-1;ca=[];C=-1;v.removeEventListener(\"webglcontextlost\",d,!1)};this.renderBufferImmediate=function(a,b,c){Y.initAttributes();var d=ha.get(a);a.hasPositions&&!d.position&&(d.position=B.createBuffer());a.hasNormals&&!d.normal&&(d.normal=B.createBuffer());a.hasUvs&&!d.uv&&(d.uv=B.createBuffer());a.hasColors&&!d.color&&(d.color=B.createBuffer());b=b.getAttributes();a.hasPositions&&(B.bindBuffer(B.ARRAY_BUFFER,d.position),B.bufferData(B.ARRAY_BUFFER,\na.positionArray,B.DYNAMIC_DRAW),Y.enableAttribute(b.position),B.vertexAttribPointer(b.position,3,B.FLOAT,!1,0,0));if(a.hasNormals){B.bindBuffer(B.ARRAY_BUFFER,d.normal);if(!c.isMeshPhongMaterial&&!c.isMeshStandardMaterial&&!c.isMeshNormalMaterial&&1===c.shading)for(var e=0,f=3*a.count;e<f;e+=9){var g=a.normalArray,h=(g[e+0]+g[e+3]+g[e+6])/3,k=(g[e+1]+g[e+4]+g[e+7])/3,m=(g[e+2]+g[e+5]+g[e+8])/3;g[e+0]=h;g[e+1]=k;g[e+2]=m;g[e+3]=h;g[e+4]=k;g[e+5]=m;g[e+6]=h;g[e+7]=k;g[e+8]=m}B.bufferData(B.ARRAY_BUFFER,\na.normalArray,B.DYNAMIC_DRAW);Y.enableAttribute(b.normal);B.vertexAttribPointer(b.normal,3,B.FLOAT,!1,0,0)}a.hasUvs&&c.map&&(B.bindBuffer(B.ARRAY_BUFFER,d.uv),B.bufferData(B.ARRAY_BUFFER,a.uvArray,B.DYNAMIC_DRAW),Y.enableAttribute(b.uv),B.vertexAttribPointer(b.uv,2,B.FLOAT,!1,0,0));a.hasColors&&0!==c.vertexColors&&(B.bindBuffer(B.ARRAY_BUFFER,d.color),B.bufferData(B.ARRAY_BUFFER,a.colorArray,B.DYNAMIC_DRAW),Y.enableAttribute(b.color),B.vertexAttribPointer(b.color,3,B.FLOAT,!1,0,0));Y.disableUnusedAttributes();\nB.drawArrays(B.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){r(d);var h=l(a,b,d,e),k=!1;a=c.id+\"_\"+h.id+\"_\"+d.wireframe;a!==U&&(U=a,k=!0);b=e.morphTargetInfluences;if(void 0!==b){var m=[];a=0;for(var n=b.length;a<n;a++)k=b[a],m.push([k,a]);m.sort(g);8<m.length&&(m.length=8);var p=c.morphAttributes;a=0;for(n=m.length;a<n;a++)k=m[a],O[a]=k[0],0!==k[0]?(b=k[1],!0===d.morphTargets&&p.position&&c.addAttribute(\"morphTarget\"+a,p.position[b]),!0===d.morphNormals&&p.normal&&\nc.addAttribute(\"morphNormal\"+a,p.normal[b])):(!0===d.morphTargets&&c.removeAttribute(\"morphTarget\"+a),!0===d.morphNormals&&c.removeAttribute(\"morphNormal\"+a));a=m.length;for(b=O.length;a<b;a++)O[a]=0;h.getUniforms().setValue(B,\"morphTargetInfluences\",O);k=!0}b=c.index;n=c.attributes.position;m=1;!0===d.wireframe&&(b=ta.getWireframeAttribute(c),m=2);null!==b?(a=Ma,a.setIndex(b)):a=La;if(k){a:{var k=void 0,x;if(c&&c.isInstancedBufferGeometry&&(x=ja.get(\"ANGLE_instanced_arrays\"),null===x)){console.error(\"THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\");\nbreak a}void 0===k&&(k=0);Y.initAttributes();var p=c.attributes,h=h.getAttributes(),u=d.defaultAttributeValues,q;for(q in h){var v=h[q];if(0<=v){var t=p[q];if(void 0!==t){var z=t.normalized,F=t.itemSize,I=ta.getAttributeProperties(t),E=I.__webglBuffer,M=I.type,I=I.bytesPerElement;if(t.isInterleavedBufferAttribute){var A=t.data,K=A.stride,t=t.offset;A&&A.isInstancedInterleavedBuffer?(Y.enableAttributeAndDivisor(v,A.meshPerAttribute,x),void 0===c.maxInstancedCount&&(c.maxInstancedCount=A.meshPerAttribute*\nA.count)):Y.enableAttribute(v);B.bindBuffer(B.ARRAY_BUFFER,E);B.vertexAttribPointer(v,F,M,z,K*I,(k*K+t)*I)}else t.isInstancedBufferAttribute?(Y.enableAttributeAndDivisor(v,t.meshPerAttribute,x),void 0===c.maxInstancedCount&&(c.maxInstancedCount=t.meshPerAttribute*t.count)):Y.enableAttribute(v),B.bindBuffer(B.ARRAY_BUFFER,E),B.vertexAttribPointer(v,F,M,z,0,k*F*I)}else if(void 0!==u&&(z=u[q],void 0!==z))switch(z.length){case 2:B.vertexAttrib2fv(v,z);break;case 3:B.vertexAttrib3fv(v,z);break;case 4:B.vertexAttrib4fv(v,\nz);break;default:B.vertexAttrib1fv(v,z)}}}Y.disableUnusedAttributes()}null!==b&&B.bindBuffer(B.ELEMENT_ARRAY_BUFFER,ta.getAttributeBuffer(b))}x=0;null!==b?x=b.count:void 0!==n&&(x=n.count);b=c.drawRange.start*m;n=null!==f?f.start*m:0;q=Math.max(b,n);f=Math.max(0,Math.min(x,b+c.drawRange.count*m,n+(null!==f?f.count*m:Infinity))-1-q+1);if(0!==f){if(e.isMesh)if(!0===d.wireframe)Y.setLineWidth(d.wireframeLinewidth*(null===V?Sa:1)),a.setMode(B.LINES);else switch(e.drawMode){case 0:a.setMode(B.TRIANGLES);\nbreak;case 1:a.setMode(B.TRIANGLE_STRIP);break;case 2:a.setMode(B.TRIANGLE_FAN)}else e.isLine?(d=d.linewidth,void 0===d&&(d=1),Y.setLineWidth(d*(null===V?Sa:1)),e.isLineSegments?a.setMode(B.LINES):a.setMode(B.LINE_STRIP)):e.isPoints&&a.setMode(B.POINTS);c&&c.isInstancedBufferGeometry?0<c.maxInstancedCount&&a.renderInstances(c,q,f):a.render(q,f)}};this.render=function(a,b,c,d){if(void 0!==b&&!0!==b.isCamera)console.error(\"THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.\");else{U=\n\"\";L=-1;W=null;!0===a.autoUpdate&&a.updateMatrixWorld();null===b.parent&&b.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);sa.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);na.setFromMatrix(sa);J.length=0;Na=C=-1;P.length=0;R.length=0;ua=this.localClippingEnabled;pa=da.init(this.clippingPlanes,ua,b);p(a,b);ca.length=C+1;G.length=Na+1;!0===T.sortObjects&&(ca.sort(h),G.sort(k));pa&&da.beginShadows();for(var e=J,f=0,g=0,m=e.length;g<m;g++){var x=e[g];x.castShadow&&(aa.shadows[f++]=\nx)}aa.shadows.length=f;Pa.render(a,b);for(var e=J,r=x=0,l=0,w,u,v,q,t=b.matrixWorldInverse,z=0,F=0,I=0,E=0,M=0,f=0,g=e.length;f<g;f++)if(m=e[f],w=m.color,u=m.intensity,v=m.distance,q=m.shadow&&m.shadow.map?m.shadow.map.texture:null,m.isAmbientLight)x+=w.r*u,r+=w.g*u,l+=w.b*u;else if(m.isDirectionalLight){var A=Aa.get(m);A.color.copy(m.color).multiplyScalar(m.intensity);A.direction.setFromMatrixPosition(m.matrixWorld);ba.setFromMatrixPosition(m.target.matrixWorld);A.direction.sub(ba);A.direction.transformDirection(t);\nif(A.shadow=m.castShadow)A.shadowBias=m.shadow.bias,A.shadowRadius=m.shadow.radius,A.shadowMapSize=m.shadow.mapSize;aa.directionalShadowMap[z]=q;aa.directionalShadowMatrix[z]=m.shadow.matrix;aa.directional[z++]=A}else if(m.isSpotLight){A=Aa.get(m);A.position.setFromMatrixPosition(m.matrixWorld);A.position.applyMatrix4(t);A.color.copy(w).multiplyScalar(u);A.distance=v;A.direction.setFromMatrixPosition(m.matrixWorld);ba.setFromMatrixPosition(m.target.matrixWorld);A.direction.sub(ba);A.direction.transformDirection(t);\nA.coneCos=Math.cos(m.angle);A.penumbraCos=Math.cos(m.angle*(1-m.penumbra));A.decay=0===m.distance?0:m.decay;if(A.shadow=m.castShadow)A.shadowBias=m.shadow.bias,A.shadowRadius=m.shadow.radius,A.shadowMapSize=m.shadow.mapSize;aa.spotShadowMap[I]=q;aa.spotShadowMatrix[I]=m.shadow.matrix;aa.spot[I++]=A}else if(m.isRectAreaLight)A=Aa.get(m),A.color.copy(w).multiplyScalar(u/(m.width*m.height)),A.position.setFromMatrixPosition(m.matrixWorld),A.position.applyMatrix4(t),xa.identity(),wa.copy(m.matrixWorld),\nwa.premultiply(t),xa.extractRotation(wa),A.halfWidth.set(.5*m.width,0,0),A.halfHeight.set(0,.5*m.height,0),A.halfWidth.applyMatrix4(xa),A.halfHeight.applyMatrix4(xa),aa.rectArea[E++]=A;else if(m.isPointLight){A=Aa.get(m);A.position.setFromMatrixPosition(m.matrixWorld);A.position.applyMatrix4(t);A.color.copy(m.color).multiplyScalar(m.intensity);A.distance=m.distance;A.decay=0===m.distance?0:m.decay;if(A.shadow=m.castShadow)A.shadowBias=m.shadow.bias,A.shadowRadius=m.shadow.radius,A.shadowMapSize=m.shadow.mapSize;\naa.pointShadowMap[F]=q;void 0===aa.pointShadowMatrix[F]&&(aa.pointShadowMatrix[F]=new H);ba.setFromMatrixPosition(m.matrixWorld).negate();aa.pointShadowMatrix[F].identity().setPosition(ba);aa.point[F++]=A}else m.isHemisphereLight&&(A=Aa.get(m),A.direction.setFromMatrixPosition(m.matrixWorld),A.direction.transformDirection(t),A.direction.normalize(),A.skyColor.copy(m.color).multiplyScalar(u),A.groundColor.copy(m.groundColor).multiplyScalar(u),aa.hemi[M++]=A);aa.ambient[0]=x;aa.ambient[1]=r;aa.ambient[2]=\nl;aa.directional.length=z;aa.spot.length=I;aa.rectArea.length=E;aa.point.length=F;aa.hemi.length=M;aa.hash=z+\",\"+F+\",\"+I+\",\"+E+\",\"+M+\",\"+aa.shadows.length;pa&&da.endShadows();qa.calls=0;qa.vertices=0;qa.faces=0;qa.points=0;void 0===c&&(c=null);this.setRenderTarget(c);e=a.background;null===e?Y.buffers.color.setClear(Ga.r,Ga.g,Ga.b,fb,K):e&&e.isColor&&(Y.buffers.color.setClear(e.r,e.g,e.b,1,K),d=!0);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);e&&e.isCubeTexture?\n(Ca.projectionMatrix.copy(b.projectionMatrix),Ca.matrixWorld.extractRotation(b.matrixWorld),Ca.matrixWorldInverse.getInverse(Ca.matrixWorld),ya.material.uniforms.tCube.value=e,ya.modelViewMatrix.multiplyMatrices(Ca.matrixWorldInverse,ya.matrixWorld),ta.update(ya),T.renderBufferDirect(Ca,null,ya.geometry,ya.material,ya,null)):e&&e.isTexture&&(Ea.material.map=e,ta.update(Ea),T.renderBufferDirect(Oa,null,Ea.geometry,Ea.material,Ea,null));a.overrideMaterial?(d=a.overrideMaterial,n(ca,a,b,d),n(G,a,b,d)):\n(Y.setBlending(0),n(ca,a,b),n(G,a,b));Qa.render(a,b);Ra.render(a,b,Z);c&&va.updateRenderTargetMipmap(c);Y.setDepthTest(!0);Y.setDepthWrite(!0);Y.setColorWrite(!0)}};this.setFaceCulling=function(a,b){Y.setCullFace(a);Y.setFlipSided(0===b)};this.allocTextureUnit=function(){var a=ea;a>=ma.maxTextures&&console.warn(\"WebGLRenderer: trying to use \"+a+\" texture units while this GPU supports only \"+ma.maxTextures);ea+=1;return a};this.setTexture2D=function(){var a=!1;return function(b,c){b&&b.isWebGLRenderTarget&&\n(a||(console.warn(\"THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead.\"),a=!0),b=b.texture);va.setTexture2D(b,c)}}();this.setTexture=function(){var a=!1;return function(b,c){a||(console.warn(\"THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead.\"),a=!0);va.setTexture2D(b,c)}}();this.setTextureCube=function(){var a=!1;return function(b,c){b&&b.isWebGLRenderTargetCube&&(a||(console.warn(\"THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead.\"),\na=!0),b=b.texture);b&&b.isCubeTexture||Array.isArray(b.image)&&6===b.image.length?va.setTextureCube(b,c):va.setTextureCubeDynamic(b,c)}}();this.getCurrentRenderTarget=function(){return V};this.setRenderTarget=function(a){(V=a)&&void 0===ha.get(a).__webglFramebuffer&&va.setupRenderTarget(a);var b=a&&a.isWebGLRenderTargetCube,c;a?(c=ha.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,X.copy(a.scissor),Ta=a.scissorTest,Z.copy(a.viewport)):(c=null,X.copy(fa).multiplyScalar(Sa),Ta=\nka,Z.copy(ia).multiplyScalar(Sa));S!==c&&(B.bindFramebuffer(B.FRAMEBUFFER,c),S=c);Y.scissor(X);Y.setScissorTest(Ta);Y.viewport(Z);b&&(b=ha.get(a.texture),B.framebufferTexture2D(B.FRAMEBUFFER,B.COLOR_ATTACHMENT0,B.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,f){if(!1===(a&&a.isWebGLRenderTarget))console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.\");else{var g=ha.get(a).__webglFramebuffer;\nif(g){var h=!1;g!==S&&(B.bindFramebuffer(B.FRAMEBUFFER,g),h=!0);try{var k=a.texture,m=k.format,n=k.type;1023!==m&&t(m)!==B.getParameter(B.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.\"):1009===n||t(n)===B.getParameter(B.IMPLEMENTATION_COLOR_READ_TYPE)||1015===n&&(ja.get(\"OES_texture_float\")||ja.get(\"WEBGL_color_buffer_float\"))||1016===n&&ja.get(\"EXT_color_buffer_half_float\")?B.checkFramebufferStatus(B.FRAMEBUFFER)===\nB.FRAMEBUFFER_COMPLETE?0<=b&&b<=a.width-d&&0<=c&&c<=a.height-e&&B.readPixels(b,c,d,e,t(m),t(n),f):console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.\"):console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.\")}finally{h&&B.bindFramebuffer(B.FRAMEBUFFER,S)}}}}}function Ib(a,b){this.name=\"\";this.color=new N(a);this.density=void 0!==b?b:2.5E-4}function Jb(a,\nb,c){this.name=\"\";this.color=new N(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3}function jb(){G.call(this);this.type=\"Scene\";this.overrideMaterial=this.fog=this.background=null;this.autoUpdate=!0}function Od(a,b,c,d,e){G.call(this);this.lensFlares=[];this.positionScreen=new q;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)}function kb(a){W.call(this);this.type=\"SpriteMaterial\";this.color=new N(16777215);this.map=null;this.rotation=0;this.lights=this.fog=!1;this.setValues(a)}\nfunction zc(a){G.call(this);this.type=\"Sprite\";this.material=void 0!==a?a:new kb}function Ac(){G.call(this);this.type=\"LOD\";Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function hd(a,b,c){this.useVertexTexture=void 0!==c?c:!0;this.identityMatrix=new H;a=a||[];this.bones=a.slice(0);this.useVertexTexture?(a=Math.sqrt(4*this.bones.length),a=Q.nextPowerOfTwo(Math.ceil(a)),this.boneTextureHeight=this.boneTextureWidth=a=Math.max(a,4),this.boneMatrices=new Float32Array(this.boneTextureWidth*\nthis.boneTextureHeight*4),this.boneTexture=new db(this.boneMatrices,this.boneTextureWidth,this.boneTextureHeight,1023,1015)):this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===b)this.calculateInverses();else if(this.bones.length===b.length)this.boneInverses=b.slice(0);else for(console.warn(\"THREE.Skeleton bonInverses is the wrong length.\"),this.boneInverses=[],b=0,a=this.bones.length;b<a;b++)this.boneInverses.push(new H)}function id(){G.call(this);this.type=\"Bone\"}function jd(a,\nb,c){Ba.call(this,a,b);this.type=\"SkinnedMesh\";this.bindMode=\"attached\";this.bindMatrix=new H;this.bindMatrixInverse=new H;a=[];if(this.geometry&&void 0!==this.geometry.bones){for(var d,e=0,f=this.geometry.bones.length;e<f;++e)d=this.geometry.bones[e],b=new id,a.push(b),b.name=d.name,b.position.fromArray(d.pos),b.quaternion.fromArray(d.rotq),void 0!==d.scl&&b.scale.fromArray(d.scl);e=0;for(f=this.geometry.bones.length;e<f;++e)d=this.geometry.bones[e],-1!==d.parent&&null!==d.parent&&void 0!==a[d.parent]?\na[d.parent].add(a[e]):this.add(a[e])}this.normalizeSkinWeights();this.updateMatrixWorld(!0);this.bind(new hd(a,void 0,c),this.matrixWorld)}function ia(a){W.call(this);this.type=\"LineBasicMaterial\";this.color=new N(16777215);this.linewidth=1;this.linejoin=this.linecap=\"round\";this.lights=!1;this.setValues(a)}function Va(a,b,c){if(1===c)return console.warn(\"THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead.\"),new fa(a,b);G.call(this);this.type=\"Line\";this.geometry=\nvoid 0!==a?a:new D;this.material=void 0!==b?b:new ia({color:16777215*Math.random()})}function fa(a,b){Va.call(this,a,b);this.type=\"LineSegments\"}function Oa(a){W.call(this);this.type=\"PointsMaterial\";this.color=new N(16777215);this.map=null;this.size=1;this.sizeAttenuation=!0;this.lights=!1;this.setValues(a)}function Kb(a,b){G.call(this);this.type=\"Points\";this.geometry=void 0!==a?a:new D;this.material=void 0!==b?b:new Oa({color:16777215*Math.random()})}function Bc(){G.call(this);this.type=\"Group\"}\nfunction kd(a,b,c,d,e,f,g,h,k){function m(){requestAnimationFrame(m);a.readyState>=a.HAVE_CURRENT_DATA&&(x.needsUpdate=!0)}ea.call(this,a,b,c,d,e,f,g,h,k);this.generateMipmaps=!1;var x=this;m()}function Lb(a,b,c,d,e,f,g,h,k,m,x,p){ea.call(this,null,f,g,h,k,m,d,e,x,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1}function ld(a,b,c,d,e,f,g,h,k){ea.call(this,a,b,c,d,e,f,g,h,k);this.needsUpdate=!0}function Cc(a,b,c,d,e,f,g,h,k,m){m=void 0!==m?m:1026;if(1026!==m&&1027!==\nm)throw Error(\"DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat\");void 0===c&&1026===m&&(c=1012);void 0===c&&1027===m&&(c=1020);ea.call(this,null,d,e,f,g,h,m,c,k);this.image={width:a,height:b};this.magFilter=void 0!==g?g:1003;this.minFilter=void 0!==h?h:1003;this.generateMipmaps=this.flipY=!1}function Mb(a){function b(a,b){return a-b}D.call(this);var c=[0,0],d={},e=[\"a\",\"b\",\"c\"];if(a&&a.isGeometry){var f=a.vertices,g=a.faces,h=0,k=new Uint32Array(6*g.length);a=0;for(var m=\ng.length;a<m;a++)for(var x=g[a],p=0;3>p;p++){c[0]=x[e[p]];c[1]=x[e[(p+1)%3]];c.sort(b);var n=c.toString();void 0===d[n]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[n]=!0,h++)}c=new Float32Array(6*h);a=0;for(m=h;a<m;a++)for(p=0;2>p;p++)d=f[k[2*a+p]],h=6*a+3*p,c[h+0]=d.x,c[h+1]=d.y,c[h+2]=d.z;this.addAttribute(\"position\",new y(c,3))}else if(a&&a.isBufferGeometry){if(null!==a.index){m=a.index.array;f=a.attributes.position;e=a.groups;h=0;0===e.length&&a.addGroup(0,m.length);k=new Uint32Array(2*m.length);g=0;for(x=\ne.length;g<x;++g){a=e[g];p=a.start;n=a.count;a=p;for(var r=p+n;a<r;a+=3)for(p=0;3>p;p++)c[0]=m[a+p],c[1]=m[a+(p+1)%3],c.sort(b),n=c.toString(),void 0===d[n]&&(k[2*h]=c[0],k[2*h+1]=c[1],d[n]=!0,h++)}c=new Float32Array(6*h);a=0;for(m=h;a<m;a++)for(p=0;2>p;p++)h=6*a+3*p,d=k[2*a+p],c[h+0]=f.getX(d),c[h+1]=f.getY(d),c[h+2]=f.getZ(d)}else for(f=a.attributes.position.array,h=f.length/3,k=h/3,c=new Float32Array(6*h),a=0,m=k;a<m;a++)for(p=0;3>p;p++)h=18*a+6*p,k=9*a+3*p,c[h+0]=f[k],c[h+1]=f[k+1],c[h+2]=f[k+\n2],d=9*a+(p+1)%3*3,c[h+3]=f[d],c[h+4]=f[d+1],c[h+5]=f[d+2];this.addAttribute(\"position\",new y(c,3))}}function Nb(a,b,c){D.call(this);this.type=\"ParametricBufferGeometry\";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f,g,h,k,m,x=b+1;for(f=0;f<=c;f++)for(m=f/c,g=0;g<=b;g++)k=g/b,h=a(k,m),d.push(h.x,h.y,h.z),e.push(k,m);a=[];var p;for(f=0;f<c;f++)for(g=0;g<b;g++)h=f*x+g,k=f*x+g+1,m=(f+1)*x+g+1,p=(f+1)*x+g,a.push(h,k,p),a.push(k,m,p);this.setIndex(new (65535<a.length?Ua:Ra)(a,1));this.addAttribute(\"position\",\nnew X(d,3));this.addAttribute(\"uv\",new X(e,2));this.computeVertexNormals()}function Dc(a,b,c){S.call(this);this.type=\"ParametricGeometry\";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Nb(a,b,c));this.mergeVertices()}function xa(a,b,c,d){function e(a){h.push(a.x,a.y,a.z)}function f(b,c){var d=3*b;c.x=a[d+0];c.y=a[d+1];c.z=a[d+2]}function g(a,b,c,d){0>d&&1===a.x&&(k[b]=a.x-1);0===c.x&&0===c.z&&(k[b]=d/2/Math.PI+.5)}D.call(this);this.type=\"PolyhedronBufferGeometry\";this.parameters=\n{vertices:a,indices:b,radius:c,detail:d};c=c||1;var h=[],k=[];(function(a){for(var c=new q,d=new q,g=new q,h=0;h<b.length;h+=3){f(b[h+0],c);f(b[h+1],d);f(b[h+2],g);var k=c,l=d,F=g,t=Math.pow(2,a),v=[],M,z;for(M=0;M<=t;M++){v[M]=[];var A=k.clone().lerp(F,M/t),I=l.clone().lerp(F,M/t),E=t-M;for(z=0;z<=E;z++)v[M][z]=0===z&&M===t?A:A.clone().lerp(I,z/E)}for(M=0;M<t;M++)for(z=0;z<2*(t-M)-1;z++)k=Math.floor(z/2),0===z%2?(e(v[M][k+1]),e(v[M+1][k]),e(v[M][k])):(e(v[M][k+1]),e(v[M+1][k+1]),e(v[M+1][k]))}})(d||\n0);(function(a){for(var b=new q,c=0;c<h.length;c+=3)b.x=h[c+0],b.y=h[c+1],b.z=h[c+2],b.normalize().multiplyScalar(a),h[c+0]=b.x,h[c+1]=b.y,h[c+2]=b.z})(c);(function(){for(var a=new q,b=0;b<h.length;b+=3)a.x=h[b+0],a.y=h[b+1],a.z=h[b+2],k.push(Math.atan2(a.z,-a.x)/2/Math.PI+.5,1-(Math.atan2(-a.y,Math.sqrt(a.x*a.x+a.z*a.z))/Math.PI+.5));for(var a=new q,b=new q,c=new q,d=new q,e=new C,f=new C,l=new C,F=0,t=0;F<h.length;F+=9,t+=6){a.set(h[F+0],h[F+1],h[F+2]);b.set(h[F+3],h[F+4],h[F+5]);c.set(h[F+6],h[F+\n7],h[F+8]);e.set(k[t+0],k[t+1]);f.set(k[t+2],k[t+3]);l.set(k[t+4],k[t+5]);d.copy(a).add(b).add(c).divideScalar(3);var v=Math.atan2(d.z,-d.x);g(e,t+0,a,v);g(f,t+2,b,v);g(l,t+4,c,v)}for(a=0;a<k.length;a+=6)b=k[a+0],c=k[a+2],d=k[a+4],e=Math.min(b,c,d),.9<Math.max(b,c,d)&&.1>e&&(.2>b&&(k[a+0]+=1),.2>c&&(k[a+2]+=1),.2>d&&(k[a+4]+=1))})();this.addAttribute(\"position\",new X(h,3));this.addAttribute(\"normal\",new X(h.slice(),3));this.addAttribute(\"uv\",new X(k,2));this.normalizeNormals();this.boundingSphere=\nnew Fa(new q,c)}function Ob(a,b){xa.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type=\"TetrahedronBufferGeometry\";this.parameters={radius:a,detail:b}}function Ec(a,b){S.call(this);this.type=\"TetrahedronGeometry\";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Ob(a,b));this.mergeVertices()}function lb(a,b){xa.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type=\"OctahedronBufferGeometry\";\nthis.parameters={radius:a,detail:b}}function Fc(a,b){S.call(this);this.type=\"OctahedronGeometry\";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new lb(a,b));this.mergeVertices()}function Pb(a,b){var c=(1+Math.sqrt(5))/2;xa.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type=\"IcosahedronBufferGeometry\";\nthis.parameters={radius:a,detail:b}}function Gc(a,b){S.call(this);this.type=\"IcosahedronGeometry\";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Pb(a,b));this.mergeVertices()}function Qb(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;xa.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0,d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c,0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,\n0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type=\"DodecahedronBufferGeometry\";this.parameters={radius:a,detail:b}}function Hc(a,b){S.call(this);this.type=\"DodecahedronGeometry\";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Qb(a,b));this.mergeVertices()}function Ic(a,b,c,d){S.call(this);this.type=\"PolyhedronGeometry\";this.parameters={vertices:a,indices:b,\nradius:c,detail:d};this.fromBufferGeometry(new xa(a,b,c,d));this.mergeVertices()}function Rb(a,b,c,d,e){function f(e){var f=a.getPointAt(e/b),m=g.normals[e];e=g.binormals[e];for(p=0;p<=d;p++){var x=p/d*Math.PI*2,l=Math.sin(x),x=-Math.cos(x);k.x=x*m.x+l*e.x;k.y=x*m.y+l*e.y;k.z=x*m.z+l*e.z;k.normalize();r.push(k.x,k.y,k.z);h.x=f.x+c*k.x;h.y=f.y+c*k.y;h.z=f.z+c*k.z;n.push(h.x,h.y,h.z)}}D.call(this);this.type=\"TubeBufferGeometry\";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};\nb=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new q,k=new q,m=new C,x,p,n=[],r=[],l=[],u=[];for(x=0;x<b;x++)f(x);f(!1===e?b:0);for(x=0;x<=b;x++)for(p=0;p<=d;p++)m.x=x/b,m.y=p/d,l.push(m.x,m.y);(function(){for(p=1;p<=b;p++)for(x=1;x<=d;x++){var a=(d+1)*p+(x-1),c=(d+1)*p+x,e=(d+1)*(p-1)+x;u.push((d+1)*(p-1)+(x-1),a,e);u.push(a,c,e)}})();this.setIndex(new (65535<u.length?Ua:Ra)(u,1));this.addAttribute(\"position\",\nnew X(n,3));this.addAttribute(\"normal\",new X(r,3));this.addAttribute(\"uv\",new X(l,2))}function Jc(a,b,c,d,e,f){S.call(this);this.type=\"TubeGeometry\";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};void 0!==f&&console.warn(\"THREE.TubeGeometry: taper has been removed.\");a=new Rb(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function Sb(a,b,c,d,e,f){function g(a,b,c,d,e){var f=Math.sin(a);\nb=c/b*a;c=Math.cos(b);e.x=d*(2+c)*.5*Math.cos(a);e.y=d*(2+c)*f*.5;e.z=d*Math.sin(b)*.5}D.call(this);this.type=\"TorusKnotBufferGeometry\";this.parameters={radius:a,tube:b,tubularSegments:c,radialSegments:d,p:e,q:f};a=a||100;b=b||40;c=Math.floor(c)||64;d=Math.floor(d)||8;e=e||2;f=f||3;var h=(d+1)*(c+1),k=d*c*6,k=new y(new (65535<k?Uint32Array:Uint16Array)(k),1),m=new y(new Float32Array(3*h),3),x=new y(new Float32Array(3*h),3),h=new y(new Float32Array(2*h),2),p,n,r=0,l=0,u=new q,F=new q,t=new C,v=new q,\nM=new q,z=new q,A=new q,I=new q;for(p=0;p<=c;++p)for(n=p/c*e*Math.PI*2,g(n,e,f,a,v),g(n+.01,e,f,a,M),A.subVectors(M,v),I.addVectors(M,v),z.crossVectors(A,I),I.crossVectors(z,A),z.normalize(),I.normalize(),n=0;n<=d;++n){var E=n/d*Math.PI*2,K=-b*Math.cos(E),E=b*Math.sin(E);u.x=v.x+(K*I.x+E*z.x);u.y=v.y+(K*I.y+E*z.y);u.z=v.z+(K*I.z+E*z.z);m.setXYZ(r,u.x,u.y,u.z);F.subVectors(u,v).normalize();x.setXYZ(r,F.x,F.y,F.z);t.x=p/c;t.y=n/d;h.setXY(r,t.x,t.y);r++}for(n=1;n<=c;n++)for(p=1;p<=d;p++)a=(d+1)*n+(p-\n1),b=(d+1)*n+p,e=(d+1)*(n-1)+p,k.setX(l,(d+1)*(n-1)+(p-1)),l++,k.setX(l,a),l++,k.setX(l,e),l++,k.setX(l,a),l++,k.setX(l,b),l++,k.setX(l,e),l++;this.setIndex(k);this.addAttribute(\"position\",m);this.addAttribute(\"normal\",x);this.addAttribute(\"uv\",h)}function Kc(a,b,c,d,e,f,g){S.call(this);this.type=\"TorusKnotGeometry\";this.parameters={radius:a,tube:b,tubularSegments:c,radialSegments:d,p:e,q:f};void 0!==g&&console.warn(\"THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.\");\nthis.fromBufferGeometry(new Sb(a,b,c,d,e,f));this.mergeVertices()}function Tb(a,b,c,d,e){D.call(this);this.type=\"TorusBufferGeometry\";this.parameters={radius:a,tube:b,radialSegments:c,tubularSegments:d,arc:e};a=a||100;b=b||40;c=Math.floor(c)||8;d=Math.floor(d)||6;e=e||2*Math.PI;var f=(c+1)*(d+1),g=c*d*6,g=new (65535<g?Uint32Array:Uint16Array)(g),h=new Float32Array(3*f),k=new Float32Array(3*f),f=new Float32Array(2*f),m=0,x=0,p=0,n=new q,l=new q,w=new q,u,F;for(u=0;u<=c;u++)for(F=0;F<=d;F++){var t=\nF/d*e,v=u/c*Math.PI*2;l.x=(a+b*Math.cos(v))*Math.cos(t);l.y=(a+b*Math.cos(v))*Math.sin(t);l.z=b*Math.sin(v);h[m]=l.x;h[m+1]=l.y;h[m+2]=l.z;n.x=a*Math.cos(t);n.y=a*Math.sin(t);w.subVectors(l,n).normalize();k[m]=w.x;k[m+1]=w.y;k[m+2]=w.z;f[x]=F/d;f[x+1]=u/c;m+=3;x+=2}for(u=1;u<=c;u++)for(F=1;F<=d;F++)a=(d+1)*(u-1)+F-1,b=(d+1)*(u-1)+F,e=(d+1)*u+F,g[p]=(d+1)*u+F-1,g[p+1]=a,g[p+2]=e,g[p+3]=a,g[p+4]=b,g[p+5]=e,p+=6;this.setIndex(new y(g,1));this.addAttribute(\"position\",new y(h,3));this.addAttribute(\"normal\",\nnew y(k,3));this.addAttribute(\"uv\",new y(f,2))}function Lc(a,b,c,d,e){S.call(this);this.type=\"TorusGeometry\";this.parameters={radius:a,tube:b,radialSegments:c,tubularSegments:d,arc:e};this.fromBufferGeometry(new Tb(a,b,c,d,e))}function La(a,b){\"undefined\"!==typeof a&&(S.call(this),this.type=\"ExtrudeGeometry\",a=Array.isArray(a)?a:[a],this.addShapeList(a,b),this.computeFaceNormals())}function Mc(a,b){b=b||{};var c=b.font;if(!1===(c&&c.isFont))return console.error(\"THREE.TextGeometry: font parameter is not an instance of THREE.Font.\"),\nnew S;c=c.generateShapes(a,b.size,b.curveSegments);b.amount=void 0!==b.height?b.height:50;void 0===b.bevelThickness&&(b.bevelThickness=10);void 0===b.bevelSize&&(b.bevelSize=8);void 0===b.bevelEnabled&&(b.bevelEnabled=!1);La.call(this,c,b);this.type=\"TextGeometry\"}function mb(a,b,c,d,e,f,g){D.call(this);this.type=\"SphereBufferGeometry\";this.parameters={radius:a,widthSegments:b,heightSegments:c,phiStart:d,phiLength:e,thetaStart:f,thetaLength:g};a=a||50;b=Math.max(3,Math.floor(b)||8);c=Math.max(2,Math.floor(c)||\n6);d=void 0!==d?d:0;e=void 0!==e?e:2*Math.PI;f=void 0!==f?f:0;g=void 0!==g?g:Math.PI;for(var h=f+g,k=(b+1)*(c+1),m=new y(new Float32Array(3*k),3),x=new y(new Float32Array(3*k),3),k=new y(new Float32Array(2*k),2),p=0,n=[],l=new q,w=0;w<=c;w++){for(var u=[],F=w/c,t=0;t<=b;t++){var v=t/b,M=-a*Math.cos(d+v*e)*Math.sin(f+F*g),z=a*Math.cos(f+F*g),A=a*Math.sin(d+v*e)*Math.sin(f+F*g);l.set(M,z,A).normalize();m.setXYZ(p,M,z,A);x.setXYZ(p,l.x,l.y,l.z);k.setXY(p,v,1-F);u.push(p);p++}n.push(u)}d=[];for(w=0;w<\nc;w++)for(t=0;t<b;t++)e=n[w][t+1],g=n[w][t],p=n[w+1][t],l=n[w+1][t+1],(0!==w||0<f)&&d.push(e,g,l),(w!==c-1||h<Math.PI)&&d.push(g,p,l);this.setIndex(new (65535<m.count?Ua:Ra)(d,1));this.addAttribute(\"position\",m);this.addAttribute(\"normal\",x);this.addAttribute(\"uv\",k);this.boundingSphere=new Fa(new q,a)}function Nc(a,b,c,d,e,f,g){S.call(this);this.type=\"SphereGeometry\";this.parameters={radius:a,widthSegments:b,heightSegments:c,phiStart:d,phiLength:e,thetaStart:f,thetaLength:g};this.fromBufferGeometry(new mb(a,\nb,c,d,e,f,g))}function Ub(a,b,c,d,e,f){D.call(this);this.type=\"RingBufferGeometry\";this.parameters={innerRadius:a,outerRadius:b,thetaSegments:c,phiSegments:d,thetaStart:e,thetaLength:f};a=a||20;b=b||50;e=void 0!==e?e:0;f=void 0!==f?f:2*Math.PI;c=void 0!==c?Math.max(3,c):8;d=void 0!==d?Math.max(1,d):1;var g=(c+1)*(d+1),h=c*d*6,h=new y(new (65535<h?Uint32Array:Uint16Array)(h),1),k=new y(new Float32Array(3*g),3),m=new y(new Float32Array(3*g),3),g=new y(new Float32Array(2*g),2),x=0,p=0,n,l=a,w=(b-a)/\nd,u=new q,F=new C,t;for(a=0;a<=d;a++){for(t=0;t<=c;t++)n=e+t/c*f,u.x=l*Math.cos(n),u.y=l*Math.sin(n),k.setXYZ(x,u.x,u.y,u.z),m.setXYZ(x,0,0,1),F.x=(u.x/b+1)/2,F.y=(u.y/b+1)/2,g.setXY(x,F.x,F.y),x++;l+=w}for(a=0;a<d;a++)for(b=a*(c+1),t=0;t<c;t++)e=n=t+b,f=n+c+1,x=n+c+2,n+=1,h.setX(p,e),p++,h.setX(p,f),p++,h.setX(p,x),p++,h.setX(p,e),p++,h.setX(p,x),p++,h.setX(p,n),p++;this.setIndex(h);this.addAttribute(\"position\",k);this.addAttribute(\"normal\",m);this.addAttribute(\"uv\",g)}function Oc(a,b,c,d,e,f){S.call(this);\nthis.type=\"RingGeometry\";this.parameters={innerRadius:a,outerRadius:b,thetaSegments:c,phiSegments:d,thetaStart:e,thetaLength:f};this.fromBufferGeometry(new Ub(a,b,c,d,e,f))}function Pc(a,b,c,d){S.call(this);this.type=\"PlaneGeometry\";this.parameters={width:a,height:b,widthSegments:c,heightSegments:d};this.fromBufferGeometry(new ib(a,b,c,d))}function Vb(a,b,c,d){D.call(this);this.type=\"LatheBufferGeometry\";this.parameters={points:a,segments:b,phiStart:c,phiLength:d};b=Math.floor(b)||12;c=c||0;d=d||\n2*Math.PI;d=Q.clamp(d,0,2*Math.PI);for(var e=(b+1)*a.length,f=b*a.length*6,g=new y(new (65535<f?Uint32Array:Uint16Array)(f),1),h=new y(new Float32Array(3*e),3),k=new y(new Float32Array(2*e),2),m=0,x=0,p=1/b,n=new q,l=new C,e=0;e<=b;e++)for(var f=c+e*p*d,w=Math.sin(f),u=Math.cos(f),f=0;f<=a.length-1;f++)n.x=a[f].x*w,n.y=a[f].y,n.z=a[f].x*u,h.setXYZ(m,n.x,n.y,n.z),l.x=e/b,l.y=f/(a.length-1),k.setXY(m,l.x,l.y),m++;for(e=0;e<b;e++)for(f=0;f<a.length-1;f++)c=f+e*a.length,m=c+a.length,p=c+a.length+1,n=\nc+1,g.setX(x,c),x++,g.setX(x,m),x++,g.setX(x,n),x++,g.setX(x,m),x++,g.setX(x,p),x++,g.setX(x,n),x++;this.setIndex(g);this.addAttribute(\"position\",h);this.addAttribute(\"uv\",k);this.computeVertexNormals();if(d===2*Math.PI)for(d=this.attributes.normal.array,g=new q,h=new q,k=new q,c=b*a.length*3,f=e=0;e<a.length;e++,f+=3)g.x=d[f+0],g.y=d[f+1],g.z=d[f+2],h.x=d[c+f+0],h.y=d[c+f+1],h.z=d[c+f+2],k.addVectors(g,h).normalize(),d[f+0]=d[c+f+0]=k.x,d[f+1]=d[c+f+1]=k.y,d[f+2]=d[c+f+2]=k.z}function Qc(a,b,c,d){S.call(this);\nthis.type=\"LatheGeometry\";this.parameters={points:a,segments:b,phiStart:c,phiLength:d};this.fromBufferGeometry(new Vb(a,b,c,d));this.mergeVertices()}function Wb(a,b){function c(a){var c,h,m=d.length/3;a=a.extractPoints(b);var l=a.shape,u=a.holes;if(!1===pa.isClockWise(l))for(l=l.reverse(),a=0,c=u.length;a<c;a++)h=u[a],!0===pa.isClockWise(h)&&(u[a]=h.reverse());var q=pa.triangulateShape(l,u);a=0;for(c=u.length;a<c;a++)h=u[a],l=l.concat(h);a=0;for(c=l.length;a<c;a++)h=l[a],d.push(h.x,h.y,0),e.push(0,\n0,1),f.push(h.x,h.y);a=0;for(c=q.length;a<c;a++)l=q[a],g.push(l[0]+m,l[1]+m,l[2]+m),k+=3}D.call(this);this.type=\"ShapeBufferGeometry\";this.parameters={shapes:a,curveSegments:b};b=b||12;var d=[],e=[],f=[],g=[],h=0,k=0;if(!1===Array.isArray(a))c(a);else for(var m=0;m<a.length;m++)c(a[m]),this.addGroup(h,k,m),h+=k,k=0;this.setIndex(new (65535<g.length?Ua:Ra)(g,1));this.addAttribute(\"position\",new X(d,3));this.addAttribute(\"normal\",new X(e,3));this.addAttribute(\"uv\",new X(f,2))}function Xb(a,b){S.call(this);\nthis.type=\"ShapeGeometry\";\"object\"===typeof b&&(console.warn(\"THREE.ShapeGeometry: Options parameter has been removed.\"),b=b.curveSegments);this.parameters={shapes:a,curveSegments:b};this.fromBufferGeometry(new Wb(a,b));this.mergeVertices()}function Yb(a,b){function c(a,b){return a-b}D.call(this);var d=Math.cos(Q.DEG2RAD*(void 0!==b?b:1)),e=[0,0],f={},g=[\"a\",\"b\",\"c\"],h;a.isBufferGeometry?(h=new S,h.fromBufferGeometry(a)):h=a.clone();h.mergeVertices();h.computeFaceNormals();var k=h.vertices;h=h.faces;\nfor(var m=0,l=h.length;m<l;m++)for(var p=h[m],n=0;3>n;n++){e[0]=p[g[n]];e[1]=p[g[(n+1)%3]];e.sort(c);var r=e.toString();void 0===f[r]?f[r]={vert1:e[0],vert2:e[1],face1:m,face2:void 0}:f[r].face2=m}e=[];for(r in f)if(g=f[r],void 0===g.face2||h[g.face1].normal.dot(h[g.face2].normal)<=d)m=k[g.vert1],e.push(m.x),e.push(m.y),e.push(m.z),m=k[g.vert2],e.push(m.x),e.push(m.y),e.push(m.z);this.addAttribute(\"position\",new X(e,3))}function Wa(a,b,c,d,e,f,g,h){function k(c){var e,f,k,n=new C,p=new q,l=0,x=!0===\nc?a:b,M=!0===c?1:-1;f=t;for(e=1;e<=d;e++)w.setXYZ(t,0,z*M,0),u.setXYZ(t,0,M,0),n.x=.5,n.y=.5,F.setXY(t,n.x,n.y),t++;k=t;for(e=0;e<=d;e++){var y=e/d*h+g,D=Math.cos(y),y=Math.sin(y);p.x=x*y;p.y=z*M;p.z=x*D;w.setXYZ(t,p.x,p.y,p.z);u.setXYZ(t,0,M,0);n.x=.5*D+.5;n.y=.5*y*M+.5;F.setXY(t,n.x,n.y);t++}for(e=0;e<d;e++)n=f+e,p=k+e,!0===c?(r.setX(v,p),v++,r.setX(v,p+1)):(r.setX(v,p+1),v++,r.setX(v,p)),v++,r.setX(v,n),v++,l+=3;m.addGroup(A,l,!0===c?1:2);A+=l}D.call(this);this.type=\"CylinderBufferGeometry\";this.parameters=\n{radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};var m=this;a=void 0!==a?a:20;b=void 0!==b?b:20;c=void 0!==c?c:100;d=Math.floor(d)||8;e=Math.floor(e)||1;f=void 0!==f?f:!1;g=void 0!==g?g:0;h=void 0!==h?h:2*Math.PI;var l=0;!1===f&&(0<a&&l++,0<b&&l++);var p=function(){var a=(d+1)*(e+1);!1===f&&(a+=(d+1)*l+d*l);return a}(),n=function(){var a=d*e*6;!1===f&&(a+=d*l*3);return a}(),r=new y(new (65535<n?Uint32Array:Uint16Array)(n),1),w=new y(new Float32Array(3*\np),3),u=new y(new Float32Array(3*p),3),F=new y(new Float32Array(2*p),2),t=0,v=0,M=[],z=c/2,A=0;(function(){var f,k,n=new q,p=new q,l=0,x=(b-a)/c;for(k=0;k<=e;k++){var y=[],C=k/e,D=C*(b-a)+a;for(f=0;f<=d;f++){var G=f/d,P=G*h+g,R=Math.sin(P),P=Math.cos(P);p.x=D*R;p.y=-C*c+z;p.z=D*P;w.setXYZ(t,p.x,p.y,p.z);n.set(R,x,P).normalize();u.setXYZ(t,n.x,n.y,n.z);F.setXY(t,G,1-C);y.push(t);t++}M.push(y)}for(f=0;f<d;f++)for(k=0;k<e;k++)n=M[k+1][f],p=M[k+1][f+1],x=M[k][f+1],r.setX(v,M[k][f]),v++,r.setX(v,n),v++,\nr.setX(v,x),v++,r.setX(v,n),v++,r.setX(v,p),v++,r.setX(v,x),v++,l+=6;m.addGroup(A,l,0);A+=l})();!1===f&&(0<a&&k(!0),0<b&&k(!1));this.setIndex(r);this.addAttribute(\"position\",w);this.addAttribute(\"normal\",u);this.addAttribute(\"uv\",F)}function nb(a,b,c,d,e,f,g,h){S.call(this);this.type=\"CylinderGeometry\";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new Wa(a,b,c,d,e,f,g,h));this.mergeVertices()}\nfunction Rc(a,b,c,d,e,f,g){nb.call(this,0,a,b,c,d,e,f,g);this.type=\"ConeGeometry\";this.parameters={radius:a,height:b,radialSegments:c,heightSegments:d,openEnded:e,thetaStart:f,thetaLength:g}}function Sc(a,b,c,d,e,f,g){Wa.call(this,0,a,b,c,d,e,f,g);this.type=\"ConeBufferGeometry\";this.parameters={radius:a,height:b,radialSegments:c,heightSegments:d,openEnded:e,thetaStart:f,thetaLength:g}}function Zb(a,b,c,d){D.call(this);this.type=\"CircleBufferGeometry\";this.parameters={radius:a,segments:b,thetaStart:c,\nthetaLength:d};a=a||50;b=void 0!==b?Math.max(3,b):8;c=void 0!==c?c:0;d=void 0!==d?d:2*Math.PI;var e=b+2,f=new Float32Array(3*e),g=new Float32Array(3*e),e=new Float32Array(2*e);g[2]=1;e[0]=.5;e[1]=.5;for(var h=0,k=3,m=2;h<=b;h++,k+=3,m+=2){var l=c+h/b*d;f[k]=a*Math.cos(l);f[k+1]=a*Math.sin(l);g[k+2]=1;e[m]=(f[k]/a+1)/2;e[m+1]=(f[k+1]/a+1)/2}c=[];for(k=1;k<=b;k++)c.push(k,k+1,0);this.setIndex(new y(new Uint16Array(c),1));this.addAttribute(\"position\",new y(f,3));this.addAttribute(\"normal\",new y(g,3));\nthis.addAttribute(\"uv\",new y(e,2));this.boundingSphere=new Fa(new q,a)}function Tc(a,b,c,d){S.call(this);this.type=\"CircleGeometry\";this.parameters={radius:a,segments:b,thetaStart:c,thetaLength:d};this.fromBufferGeometry(new Zb(a,b,c,d))}function $b(a,b,c,d,e,f){S.call(this);this.type=\"BoxGeometry\";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new hb(a,b,c,d,e,f));this.mergeVertices()}function ac(){Ia.call(this,{uniforms:Ja.merge([U.lights,\n{opacity:{value:1}}]),vertexShader:Z.shadow_vert,fragmentShader:Z.shadow_frag});this.transparent=this.lights=!0;Object.defineProperties(this,{opacity:{enumerable:!0,get:function(){return this.uniforms.opacity.value},set:function(a){this.uniforms.opacity.value=a}}})}function bc(a){Ia.call(this,a);this.type=\"RawShaderMaterial\"}function Uc(a){this.uuid=Q.generateUUID();this.type=\"MultiMaterial\";this.materials=Array.isArray(a)?a:[];this.visible=!0}function Pa(a){W.call(this);this.defines={STANDARD:\"\"};\nthis.type=\"MeshStandardMaterial\";this.color=new N(16777215);this.metalness=this.roughness=.5;this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new N(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new C(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.envMap=this.alphaMap=this.metalnessMap=this.roughnessMap=null;this.envMapIntensity=1;this.refractionRatio=\n.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap=\"round\";this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)}function ob(a){Pa.call(this);this.defines={PHYSICAL:\"\"};this.type=\"MeshPhysicalMaterial\";this.reflectivity=.5;this.clearCoatRoughness=this.clearCoat=0;this.setValues(a)}function Ca(a){W.call(this);this.type=\"MeshPhongMaterial\";this.color=new N(16777215);this.specular=new N(1118481);this.shininess=30;this.lightMap=this.map=null;\nthis.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new N(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new C(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.envMap=this.alphaMap=this.specularMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap=\"round\";this.morphNormals=\nthis.morphTargets=this.skinning=!1;this.setValues(a)}function pb(a){Ca.call(this);this.defines={TOON:\"\"};this.type=\"MeshToonMaterial\";this.gradientMap=null;this.setValues(a)}function qb(a){W.call(this,a);this.type=\"MeshNormalMaterial\";this.bumpMap=null;this.bumpScale=1;this.normalMap=null;this.normalScale=new C(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.morphNormals=this.morphTargets=this.skinning=this.lights=this.fog=\n!1;this.setValues(a)}function rb(a){W.call(this);this.type=\"MeshLambertMaterial\";this.color=new N(16777215);this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new N(0);this.emissiveIntensity=1;this.envMap=this.alphaMap=this.specularMap=this.emissiveMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap=\"round\";this.morphNormals=this.morphTargets=\nthis.skinning=!1;this.setValues(a)}function sb(a){W.call(this);this.type=\"LineDashedMaterial\";this.color=new N(16777215);this.scale=this.linewidth=1;this.dashSize=3;this.gapSize=1;this.lights=!1;this.setValues(a)}function Pd(a,b,c){var d=this,e=!1,f=0,g=0;this.onStart=void 0;this.onLoad=a;this.onProgress=b;this.onError=c;this.itemStart=function(a){g++;if(!1===e&&void 0!==d.onStart)d.onStart(a,f,g);e=!0};this.itemEnd=function(a){f++;if(void 0!==d.onProgress)d.onProgress(a,f,g);if(f===g&&(e=!1,void 0!==\nd.onLoad))d.onLoad()};this.itemError=function(a){if(void 0!==d.onError)d.onError(a)}}function Ma(a){this.manager=void 0!==a?a:va}function Ee(a){this.manager=void 0!==a?a:va;this._parser=null}function Qd(a){this.manager=void 0!==a?a:va;this._parser=null}function Vc(a){this.manager=void 0!==a?a:va}function Rd(a){this.manager=void 0!==a?a:va}function md(a){this.manager=void 0!==a?a:va}function na(a,b){G.call(this);this.type=\"Light\";this.color=new N(a);this.intensity=void 0!==b?b:1;this.receiveShadow=\nvoid 0}function nd(a,b,c){na.call(this,a,c);this.type=\"HemisphereLight\";this.castShadow=void 0;this.position.copy(G.DefaultUp);this.updateMatrix();this.groundColor=new N(b)}function tb(a){this.camera=a;this.bias=0;this.radius=1;this.mapSize=new C(512,512);this.map=null;this.matrix=new H}function od(){tb.call(this,new Ha(50,1,.5,500))}function pd(a,b,c,d,e,f){na.call(this,a,b);this.type=\"SpotLight\";this.position.copy(G.DefaultUp);this.updateMatrix();this.target=new G;Object.defineProperty(this,\"power\",\n{get:function(){return this.intensity*Math.PI},set:function(a){this.intensity=a/Math.PI}});this.distance=void 0!==c?c:0;this.angle=void 0!==d?d:Math.PI/3;this.penumbra=void 0!==e?e:0;this.decay=void 0!==f?f:1;this.shadow=new od}function qd(a,b,c,d){na.call(this,a,b);this.type=\"PointLight\";Object.defineProperty(this,\"power\",{get:function(){return 4*this.intensity*Math.PI},set:function(a){this.intensity=a/(4*Math.PI)}});this.distance=void 0!==c?c:0;this.decay=void 0!==d?d:1;this.shadow=new tb(new Ha(90,\n1,.5,500))}function rd(a){tb.call(this,new Hb(-5,5,5,-5,.5,500))}function sd(a,b){na.call(this,a,b);this.type=\"DirectionalLight\";this.position.copy(G.DefaultUp);this.updateMatrix();this.target=new G;this.shadow=new rd}function td(a,b){na.call(this,a,b);this.type=\"AmbientLight\";this.castShadow=void 0}function qa(a,b,c,d){this.parameterPositions=a;this._cachedIndex=0;this.resultBuffer=void 0!==d?d:new b.constructor(c);this.sampleValues=b;this.valueSize=c}function ud(a,b,c,d){qa.call(this,a,b,c,d);this._offsetNext=\nthis._weightNext=this._offsetPrev=this._weightPrev=-0}function Wc(a,b,c,d){qa.call(this,a,b,c,d)}function vd(a,b,c,d){qa.call(this,a,b,c,d)}function ub(a,b,c,d){if(void 0===a)throw Error(\"track name is undefined\");if(void 0===b||0===b.length)throw Error(\"no keyframes in track named \"+a);this.name=a;this.times=ba.convertArray(b,this.TimeBufferType);this.values=ba.convertArray(c,this.ValueBufferType);this.setInterpolation(d||this.DefaultInterpolation);this.validate();this.optimize()}function cc(a,b,\nc,d){ub.call(this,a,b,c,d)}function wd(a,b,c,d){qa.call(this,a,b,c,d)}function Xc(a,b,c,d){ub.call(this,a,b,c,d)}function dc(a,b,c,d){ub.call(this,a,b,c,d)}function xd(a,b,c,d){ub.call(this,a,b,c,d)}function yd(a,b,c){ub.call(this,a,b,c)}function zd(a,b,c,d){ub.call(this,a,b,c,d)}function vb(a,b,c,d){ub.apply(this,arguments)}function ta(a,b,c){this.name=a;this.tracks=c;this.duration=void 0!==b?b:-1;this.uuid=Q.generateUUID();0>this.duration&&this.resetDuration();this.optimize()}function Ad(a){this.manager=\nvoid 0!==a?a:va;this.textures={}}function Sd(a){this.manager=void 0!==a?a:va}function wb(){this.onLoadStart=function(){};this.onLoadProgress=function(){};this.onLoadComplete=function(){}}function Td(a){\"boolean\"===typeof a&&(console.warn(\"THREE.JSONLoader: showStatus parameter has been removed from constructor.\"),a=void 0);this.manager=void 0!==a?a:va;this.withCredentials=!1}function Fe(a){this.manager=void 0!==a?a:va;this.texturePath=\"\"}function wa(){}function Qa(a,b){this.v1=a;this.v2=b}function Yc(){this.curves=\n[];this.autoClose=!1}function Xa(a,b,c,d,e,f,g,h){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g;this.aRotation=h||0}function xb(a){this.points=void 0===a?[]:a}function yb(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d}function zb(a,b,c){this.v0=a;this.v1=b;this.v2=c}function Ab(){Zc.apply(this,arguments);this.holes=[]}function Zc(a){Yc.call(this);this.currentPoint=new C;a&&this.fromPoints(a)}function Ud(){this.subPaths=[];this.currentPath=\nnull}function Vd(a){this.data=a}function Ge(a){this.manager=void 0!==a?a:va}function Wd(a){this.manager=void 0!==a?a:va}function Xd(a,b,c,d){na.call(this,a,b);this.type=\"RectAreaLight\";this.position.set(0,1,0);this.updateMatrix();this.width=void 0!==c?c:10;this.height=void 0!==d?d:10}function He(){this.type=\"StereoCamera\";this.aspect=1;this.eyeSep=.064;this.cameraL=new Ha;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new Ha;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=\n!1}function Bd(a,b,c){G.call(this);this.type=\"CubeCamera\";var d=new Ha(90,1,a,b);d.up.set(0,-1,0);d.lookAt(new q(1,0,0));this.add(d);var e=new Ha(90,1,a,b);e.up.set(0,-1,0);e.lookAt(new q(-1,0,0));this.add(e);var f=new Ha(90,1,a,b);f.up.set(0,0,1);f.lookAt(new q(0,1,0));this.add(f);var g=new Ha(90,1,a,b);g.up.set(0,0,-1);g.lookAt(new q(0,-1,0));this.add(g);var h=new Ha(90,1,a,b);h.up.set(0,-1,0);h.lookAt(new q(0,0,1));this.add(h);var k=new Ha(90,1,a,b);k.up.set(0,-1,0);k.lookAt(new q(0,0,-1));this.add(k);\nthis.renderTarget=new Eb(c,c,{format:1022,magFilter:1006,minFilter:1006});this.updateCubeMap=function(a,b){null===this.parent&&this.updateMatrixWorld();var c=this.renderTarget,n=c.texture.generateMipmaps;c.texture.generateMipmaps=!1;c.activeCubeFace=0;a.render(b,d,c);c.activeCubeFace=1;a.render(b,e,c);c.activeCubeFace=2;a.render(b,f,c);c.activeCubeFace=3;a.render(b,g,c);c.activeCubeFace=4;a.render(b,h,c);c.texture.generateMipmaps=n;c.activeCubeFace=5;a.render(b,k,c);a.setRenderTarget(null)}}function Yd(){G.call(this);\nthis.type=\"AudioListener\";this.context=Zd.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null}function ec(a){G.call(this);this.type=\"Audio\";this.context=a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.buffer=null;this.loop=!1;this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType=\"empty\";this.filters=[]}function $d(a){ec.call(this,a);this.panner=\nthis.context.createPanner();this.panner.connect(this.gain)}function ae(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)}function Cd(a,b,c){this.binding=a;this.valueSize=c;a=Float64Array;switch(b){case \"quaternion\":b=this._slerp;break;case \"string\":case \"bool\":a=Array;b=this._select;break;default:b=this._lerp}this.buffer=new a(4*c);this._mixBufferRegion=b;this.referenceCount=\nthis.useCount=this.cumulativeWeight=0}function ka(a,b,c){this.path=b;this.parsedPath=c||ka.parseTrackName(b);this.node=ka.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function be(a){this.uuid=Q.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var b={};this._indicesByUUID=b;for(var c=0,d=arguments.length;c!==d;++c)b[arguments[c].uuid]=c;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var e=this;this.stats={objects:{get total(){return e._objects.length},\nget inUse(){return this.total-e.nCachedObjects_}},get bindingsPerObject(){return e._bindings.length}}}function ce(a,b,c){this._mixer=a;this._clip=b;this._localRoot=c||null;a=b.tracks;b=a.length;c=Array(b);for(var d={endingStart:2400,endingEnd:2400},e=0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null;this.loop=\n2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity;this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function de(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function Dd(a,b){\"string\"===typeof a&&(console.warn(\"THREE.Uniform: Type parameter is no longer needed.\"),a=b);this.value=a}function Bb(){D.call(this);\nthis.type=\"InstancedBufferGeometry\";this.maxInstancedCount=void 0}function ee(a,b,c,d){this.uuid=Q.generateUUID();this.data=a;this.itemSize=b;this.offset=c;this.normalized=!0===d}function fc(a,b){this.uuid=Q.generateUUID();this.array=a;this.stride=b;this.count=void 0!==a?a.length/b:0;this.dynamic=!1;this.updateRange={offset:0,count:-1};this.onUploadCallback=function(){};this.version=0}function gc(a,b,c){fc.call(this,a,b);this.meshPerAttribute=c||1}function hc(a,b,c){y.call(this,a,b);this.meshPerAttribute=\nc||1}function fe(a,b,c,d){this.ray=new bb(a,b);this.near=c||0;this.far=d||Infinity;this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn(\"THREE.Raycaster: params.PointCloud has been renamed to params.Points.\");return this.Points}}})}function Ie(a,b){return a.distance-b.distance}function ge(a,b,c,d){if(!1!==a.visible&&(a.raycast(b,c),!0===d)){a=a.children;d=0;for(var e=a.length;d<e;d++)ge(a[d],b,c,!0)}}function he(a){this.autoStart=\nvoid 0!==a?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}function ie(a,b,c){this.radius=void 0!==a?a:1;this.phi=void 0!==b?b:0;this.theta=void 0!==c?c:0;return this}function je(a,b,c){this.radius=void 0!==a?a:1;this.theta=void 0!==b?b:0;this.y=void 0!==c?c:0;return this}function ua(a,b){Ba.call(this,a,b);this.animationsMap={};this.animationsList=[];var c=this.geometry.morphTargets.length;this.createAnimation(\"__default\",0,c-1,c/1);this.setAnimationWeight(\"__default\",1)}function $c(a){G.call(this);\nthis.material=a;this.render=function(a){}}function ad(a,b,c,d){this.object=a;this.size=void 0!==b?b:1;a=void 0!==c?c:16711680;d=void 0!==d?d:1;b=0;(c=this.object.geometry)&&c.isGeometry?b=3*c.faces.length:c&&c.isBufferGeometry&&(b=c.attributes.normal.count);c=new D;b=new X(6*b,3);c.addAttribute(\"position\",b);fa.call(this,c,new ia({color:a,linewidth:d}));this.matrixAutoUpdate=!1;this.update()}function ic(a){G.call(this);this.light=a;this.light.updateMatrixWorld();this.matrix=a.matrixWorld;this.matrixAutoUpdate=\n!1;a=new D;for(var b=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1],c=0,d=1;32>c;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f),1)}a.addAttribute(\"position\",new X(b,3));b=new ia({fog:!1});this.cone=new fa(a,b);this.add(this.cone);this.update()}function jc(a){this.bones=this.getBoneList(a);for(var b=new D,c=[],d=[],e=new N(0,0,1),f=new N(0,1,0),g=0;g<this.bones.length;g++){var h=this.bones[g];h.parent&&h.parent.isBone&&(c.push(0,\n0,0),c.push(0,0,0),d.push(e.r,e.g,e.b),d.push(f.r,f.g,f.b))}b.addAttribute(\"position\",new X(c,3));b.addAttribute(\"color\",new X(d,3));c=new ia({vertexColors:2,depthTest:!1,depthWrite:!1,transparent:!0});fa.call(this,b,c);this.root=a;this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.update()}function kc(a,b){this.light=a;this.light.updateMatrixWorld();var c=new mb(b,4,2),d=new Ka({wireframe:!0,fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);Ba.call(this,c,d);this.matrix=\nthis.light.matrixWorld;this.matrixAutoUpdate=!1}function lc(a){G.call(this);this.light=a;this.light.updateMatrixWorld();var b=new Ka({color:a.color,fog:!1});a=new Ka({color:a.color,fog:!1,wireframe:!0});var c=new D;c.addAttribute(\"position\",new y(new Float32Array(18),3));this.add(new Ba(c,b));this.add(new Ba(c,a));this.update()}function mc(a,b){G.call(this);this.light=a;this.light.updateMatrixWorld();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;var c=new lb(b);c.rotateY(.5*Math.PI);var d=new Ka({vertexColors:2,\nwireframe:!0}),e=c.getAttribute(\"position\"),e=new Float32Array(3*e.count);c.addAttribute(\"color\",new y(e,3));this.add(new Ba(c,d));this.update()}function bd(a,b,c,d){a=a||10;b=b||10;c=new N(void 0!==c?c:4473924);d=new N(void 0!==d?d:8947848);for(var e=b/2,f=2*a/b,g=[],h=[],k=0,m=0,l=-a;k<=b;k++,l+=f){g.push(-a,0,l,a,0,l);g.push(l,0,-a,l,0,a);var p=k===e?c:d;p.toArray(h,m);m+=3;p.toArray(h,m);m+=3;p.toArray(h,m);m+=3;p.toArray(h,m);m+=3}a=new D;a.addAttribute(\"position\",new X(g,3));a.addAttribute(\"color\",\nnew X(h,3));g=new ia({vertexColors:2});fa.call(this,a,g)}function Ed(a,b,c,d,e,f){a=a||10;b=b||16;c=c||8;d=d||64;e=new N(void 0!==e?e:4473924);f=new N(void 0!==f?f:8947848);var g=[],h=[],k,m,l,p,n;for(l=0;l<=b;l++)m=l/b*2*Math.PI,k=Math.sin(m)*a,m=Math.cos(m)*a,g.push(0,0,0),g.push(k,0,m),n=l&1?e:f,h.push(n.r,n.g,n.b),h.push(n.r,n.g,n.b);for(l=0;l<=c;l++)for(n=l&1?e:f,p=a-a/c*l,b=0;b<d;b++)m=b/d*2*Math.PI,k=Math.sin(m)*p,m=Math.cos(m)*p,g.push(k,0,m),h.push(n.r,n.g,n.b),m=(b+1)/d*2*Math.PI,k=Math.sin(m)*\np,m=Math.cos(m)*p,g.push(k,0,m),h.push(n.r,n.g,n.b);a=new D;a.addAttribute(\"position\",new X(g,3));a.addAttribute(\"color\",new X(h,3));g=new ia({vertexColors:2});fa.call(this,a,g)}function cd(a,b,c,d){this.object=a;this.size=void 0!==b?b:1;a=void 0!==c?c:16776960;d=void 0!==d?d:1;b=0;(c=this.object.geometry)&&c.isGeometry?b=c.faces.length:console.warn(\"THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.\");c=new D;b=new X(6*b,3);c.addAttribute(\"position\",\nb);fa.call(this,c,new ia({color:a,linewidth:d}));this.matrixAutoUpdate=!1;this.update()}function nc(a,b){G.call(this);this.light=a;this.light.updateMatrixWorld();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;void 0===b&&(b=1);var c=new D;c.addAttribute(\"position\",new X([-b,b,0,b,b,0,b,-b,0,-b,-b,0,-b,b,0],3));var d=new ia({fog:!1});this.add(new Va(c,d));c=new D;c.addAttribute(\"position\",new X([0,0,0,0,0,1],3));this.add(new Va(c,d));this.update()}function dd(a){function b(a,b,d){c(a,d);c(b,d)}\nfunction c(a,b){f.push(0,0,0);g.push(b.r,b.g,b.b);void 0===h[a]&&(h[a]=[]);h[a].push(f.length/3-1)}var d=new D,e=new ia({color:16777215,vertexColors:1}),f=[],g=[],h={},k=new N(16755200),m=new N(16711680),l=new N(43775),p=new N(16777215),n=new N(3355443);b(\"n1\",\"n2\",k);b(\"n2\",\"n4\",k);b(\"n4\",\"n3\",k);b(\"n3\",\"n1\",k);b(\"f1\",\"f2\",k);b(\"f2\",\"f4\",k);b(\"f4\",\"f3\",k);b(\"f3\",\"f1\",k);b(\"n1\",\"f1\",k);b(\"n2\",\"f2\",k);b(\"n3\",\"f3\",k);b(\"n4\",\"f4\",k);b(\"p\",\"n1\",m);b(\"p\",\"n2\",m);b(\"p\",\"n3\",m);b(\"p\",\"n4\",m);b(\"u1\",\"u2\",\nl);b(\"u2\",\"u3\",l);b(\"u3\",\"u1\",l);b(\"c\",\"t\",p);b(\"p\",\"c\",n);b(\"cn1\",\"cn2\",n);b(\"cn3\",\"cn4\",n);b(\"cf1\",\"cf2\",n);b(\"cf3\",\"cf4\",n);d.addAttribute(\"position\",new X(f,3));d.addAttribute(\"color\",new X(g,3));fa.call(this,d,e);this.camera=a;this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=h;this.update()}function oc(a,b){void 0===b&&(b=16776960);var c=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),\nd=new Float32Array(24),e=new D;e.setIndex(new y(c,1));e.addAttribute(\"position\",new y(d,3));fa.call(this,e,new ia({color:b}));void 0!==a&&this.update(a)}function Cb(a,b,c,d,e,f){G.call(this);void 0===d&&(d=16776960);void 0===c&&(c=1);void 0===e&&(e=.2*c);void 0===f&&(f=.2*e);this.position.copy(b);this.line=new Va(Je,new ia({color:d}));this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new Ba(Ke,new Ka({color:d}));this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(a);this.setLength(c,\ne,f)}function Fd(a){a=a||1;var b=[0,0,0,a,0,0,0,0,0,0,a,0,0,0,0,0,0,a];a=new D;a.addAttribute(\"position\",new X(b,3));a.addAttribute(\"color\",new X([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));b=new ia({vertexColors:2});fa.call(this,a,b)}function Gd(a,b,c,d,e,f){Xa.call(this,a,b,c,c,d,e,f)}function Le(a){console.warn(\"THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.\");ke.call(this,a);this.type=\"catmullrom\";this.closed=!0}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,\n-52));void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0<a?1:+a});void 0===Function.prototype.name&&Object.defineProperty(Function.prototype,\"name\",{get:function(){return this.toString().match(/^\\s*function\\s*([^\\(\\s]*)/)[1]}});void 0===Object.assign&&function(){Object.assign=function(a){if(void 0===a||null===a)throw new TypeError(\"Cannot convert undefined or null to object\");for(var b=Object(a),c=1;c<arguments.length;c++){var d=arguments[c];if(void 0!==d&&null!==d)for(var e in d)Object.prototype.hasOwnProperty.call(d,\ne)&&(b[e]=d[e])}return b}}();Object.assign(oa.prototype,{addEventListener:function(a,b){void 0===this._listeners&&(this._listeners={});var c=this._listeners;void 0===c[a]&&(c[a]=[]);-1===c[a].indexOf(b)&&c[a].push(b)},hasEventListener:function(a,b){if(void 0===this._listeners)return!1;var c=this._listeners;return void 0!==c[a]&&-1!==c[a].indexOf(b)},removeEventListener:function(a,b){if(void 0!==this._listeners){var c=this._listeners[a];if(void 0!==c){var d=c.indexOf(b);-1!==d&&c.splice(d,1)}}},dispatchEvent:function(a){if(void 0!==\nthis._listeners){var b=this._listeners[a.type];if(void 0!==b){a.target=this;var c=[],d,e=b.length;for(d=0;d<e;d++)c[d]=b[d];for(d=0;d<e;d++)c[d].call(this,a)}}}});var Me={NoBlending:0,NormalBlending:1,AdditiveBlending:2,SubtractiveBlending:3,MultiplyBlending:4,CustomBlending:5},Ne={UVMapping:300,CubeReflectionMapping:301,CubeRefractionMapping:302,EquirectangularReflectionMapping:303,EquirectangularRefractionMapping:304,SphericalReflectionMapping:305,CubeUVReflectionMapping:306,CubeUVRefractionMapping:307},\nle={RepeatWrapping:1E3,ClampToEdgeWrapping:1001,MirroredRepeatWrapping:1002},me={NearestFilter:1003,NearestMipMapNearestFilter:1004,NearestMipMapLinearFilter:1005,LinearFilter:1006,LinearMipMapNearestFilter:1007,LinearMipMapLinearFilter:1008},Q={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){var a=\"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\".split(\"\"),b=Array(36),c=0,d;return function(){for(var e=0;36>e;e++)8===e||13===e||18===e||23===e?b[e]=\"-\":14===e?b[e]=\"4\":\n(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19===e?d&3|8:d]);return b.join(\"\")}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+\n10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(a){return a*Q.DEG2RAD},radToDeg:function(a){return a*Q.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},nearestPowerOfTwo:function(a){return Math.pow(2,Math.round(Math.log(a)/Math.LN2))},nextPowerOfTwo:function(a){a--;a|=a>>1;a|=a>>2;a|=a>>4;a|=a>>8;a|=a>>16;a++;return a}};C.prototype={constructor:C,\nisVector2:!0,get width(){return this.x},set width(a){this.x=a},get height(){return this.y},set height(a){this.y=a},set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error(\"index is out of range: \"+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;\ndefault:throw Error(\"index is out of range: \"+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn(\"THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,\nb){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn(\"THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a):this.y=this.x=0;\nreturn this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new C,b=new C);a.set(c,\nc);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.multiplyScalar(Math.max(a,Math.min(b,c))/c)},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);\nreturn this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},\ndistanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},distanceToManhattan:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+\n1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromAttribute:function(a,b,c){void 0!==c&&console.warn(\"THREE.Vector2: offset has been removed from .fromAttribute().\");this.x=a.getX(b);this.y=a.getY(b);return this},rotateAround:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=this.x-a.x,f=this.y-a.y;this.x=e*c-f*d+a.x;this.y=e*d+f*c+a.y;return this}};var Oe=0;ea.DEFAULT_IMAGE=void 0;ea.DEFAULT_MAPPING=300;ea.prototype={constructor:ea,isTexture:!0,\nset needsUpdate(a){!0===a&&this.version++},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.image=a.image;this.mipmaps=a.mipmaps.slice(0);this.mapping=a.mapping;this.wrapS=a.wrapS;this.wrapT=a.wrapT;this.magFilter=a.magFilter;this.minFilter=a.minFilter;this.anisotropy=a.anisotropy;this.format=a.format;this.type=a.type;this.offset.copy(a.offset);this.repeat.copy(a.repeat);this.generateMipmaps=a.generateMipmaps;this.premultiplyAlpha=a.premultiplyAlpha;this.flipY=a.flipY;\nthis.unpackAlignment=a.unpackAlignment;this.encoding=a.encoding;return this},toJSON:function(a){if(void 0!==a.textures[this.uuid])return a.textures[this.uuid];var b={metadata:{version:4.4,type:\"Texture\",generator:\"Texture.toJSON\"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],wrap:[this.wrapS,this.wrapT],minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY};if(void 0!==this.image){var c=\nthis.image;void 0===c.uuid&&(c.uuid=Q.generateUUID());if(void 0===a.images[c.uuid]){var d=a.images,e=c.uuid,f=c.uuid,g;void 0!==c.toDataURL?g=c:(g=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\"),g.width=c.width,g.height=c.height,g.getContext(\"2d\").drawImage(c,0,0,c.width,c.height));g=2048<g.width||2048<g.height?g.toDataURL(\"image/jpeg\",.6):g.toDataURL(\"image/png\");d[e]={uuid:f,url:g}}b.image=c.uuid}return a.textures[this.uuid]=b},dispose:function(){this.dispatchEvent({type:\"dispose\"})},\ntransformUv:function(a){if(300===this.mapping){a.multiply(this.repeat);a.add(this.offset);if(0>a.x||1<a.x)switch(this.wrapS){case 1E3:a.x-=Math.floor(a.x);break;case 1001:a.x=0>a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1<a.y)switch(this.wrapT){case 1E3:a.y-=Math.floor(a.y);break;case 1001:a.y=0>a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)-a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}};Object.assign(ea.prototype,\noa.prototype);ga.prototype={constructor:ga,isVector4:!0,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error(\"index is out of range: \"+\na);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error(\"index is out of range: \"+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn(\"THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(a,\nb);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn(\"THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(a,b);this.x-=\na.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a,this.w*=a):this.w=this.z=this.y=this.x=0;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=\na[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d;a=a.elements;var e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],k=a[9];c=a[2];b=a[6];var m=a[10];if(.01>Math.abs(d-g)&&.01>Math.abs(f-c)&&.01>\nMath.abs(k-b)){if(.1>Math.abs(d+g)&&.1>Math.abs(f+c)&&.1>Math.abs(k+b)&&.1>Math.abs(e+h+m-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;m=(m+1)/2;d=(d+g)/4;f=(f+c)/4;k=(k+b)/4;e>h&&e>m?.01>e?(b=0,d=c=.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>m?.01>h?(b=.707106781,c=0,d=.707106781):(c=Math.sqrt(h),b=d/c,d=k/c):.01>m?(c=b=.707106781,d=0):(d=Math.sqrt(m),b=f/d,c=k/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-k)*(b-k)+(f-c)*(f-c)+(g-d)*(g-d));.001>Math.abs(a)&&(a=1);this.x=(b-k)/\na;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+m-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));\nthis.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new ga,b=new ga);a.set(c,c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);\nthis.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*\nthis.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/this.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,\nb,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromAttribute:function(a,b,c){void 0!==c&&console.warn(\"THREE.Vector4: offset has been removed from .fromAttribute().\");this.x=a.getX(b);\nthis.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this}};Object.assign(Db.prototype,oa.prototype,{isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=\na.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:\"dispose\"})}});Eb.prototype=Object.create(Db.prototype);Eb.prototype.constructor=Eb;Eb.prototype.isWebGLRenderTargetCube=!0;da.prototype={constructor:da,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get w(){return this._w},set w(a){this._w=\na;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(a){this._x=a.x;this._y=a.y;this._z=a.z;this._w=a.w;this.onChangeCallback();return this},setFromEuler:function(a,b){if(!1===(a&&a.isEuler))throw Error(\"THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.\");var c=Math.cos(a._x/2),d=Math.cos(a._y/\n2),e=Math.cos(a._z/2),f=Math.sin(a._x/2),g=Math.sin(a._y/2),h=Math.sin(a._z/2),k=a.order;\"XYZ\"===k?(this._x=f*d*e+c*g*h,this._y=c*g*e-f*d*h,this._z=c*d*h+f*g*e,this._w=c*d*e-f*g*h):\"YXZ\"===k?(this._x=f*d*e+c*g*h,this._y=c*g*e-f*d*h,this._z=c*d*h-f*g*e,this._w=c*d*e+f*g*h):\"ZXY\"===k?(this._x=f*d*e-c*g*h,this._y=c*g*e+f*d*h,this._z=c*d*h+f*g*e,this._w=c*d*e-f*g*h):\"ZYX\"===k?(this._x=f*d*e-c*g*h,this._y=c*g*e+f*d*h,this._z=c*d*h-f*g*e,this._w=c*d*e+f*g*h):\"YZX\"===k?(this._x=f*d*e+c*g*h,this._y=c*g*e+\nf*d*h,this._z=c*d*h-f*g*e,this._w=c*d*e-f*g*h):\"XZY\"===k&&(this._x=f*d*e-c*g*h,this._y=c*g*e-f*d*h,this._z=c*d*h+f*g*e,this._w=c*d*e+f*g*h);if(!1!==b)this.onChangeCallback();return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c);this._x=a.x*d;this._y=a.y*d;this._z=a.z*d;this._w=Math.cos(c);this.onChangeCallback();return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],k=b[6],b=b[10],m=c+f+b;0<m?(c=.5/Math.sqrt(m+1),this._w=\n.25/c,this._x=(k-g)*c,this._y=(d-h)*c,this._z=(e-a)*c):c>f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y=.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a,b;return function(c,d){void 0===a&&(a=new q);b=c.dot(d)+1;1E-6>b?(b=0,Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,\nc.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;return this.normalize()}}(),inverse:function(){return this.conjugate().normalize()},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+\nthis._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn(\"THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.\"),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,\nb){var c=a._x,d=a._y,e=a._z,f=a._w,g=b._x,h=b._y,k=b._z,m=b._w;this._x=c*m+f*g+d*k-e*h;this._y=d*m+f*h+e*g-c*k;this._z=e*m+f*k+c*h-d*g;this._w=f*m-c*g-d*h-e*k;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;var h=Math.sqrt(1-g*g);\nif(.001>Math.abs(h))return this._w=.5*(f+this._w),this._x=.5*(c+this._x),this._y=.5*(d+this._y),this._z=.5*(e+this._z),this;var k=Math.atan2(h,g),g=Math.sin((1-b)*k)/h,h=Math.sin(b*k)/h;this._w=f*g+this._w*h;this._x=c*g+this._x*h;this._y=d*g+this._y*h;this._z=e*g+this._z*h;this.onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];\nthis.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};Object.assign(da,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],m=c[d+2];c=c[d+3];d=e[f+0];var l=e[f+1],p=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==l||m!==p){f=1-g;var n=h*d+k*l+m*p+c*e,r=0<=\nn?1:-1,w=1-n*n;w>Number.EPSILON&&(w=Math.sqrt(w),n=Math.atan2(w,n*r),f=Math.sin(f*n)/w,g=Math.sin(g*n)/w);r*=g;h=h*f+d*r;k=k*f+l*r;m=m*f+p*r;c=c*f+e*r;f===1-g&&(g=1/Math.sqrt(h*h+k*k+m*m+c*c),h*=g,k*=g,m*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=m;a[b+3]=c}});q.prototype={constructor:q,isVector3:!0,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=\na;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error(\"index is out of range: \"+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error(\"index is out of range: \"+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn(\"THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),\nthis.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn(\"THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;\nreturn this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn(\"THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.\"),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){isFinite(a)?(this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},multiplyVectors:function(a,\nb){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var a;return function(b){!1===(b&&b.isEuler)&&console.error(\"THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.\");void 0===a&&(a=new da);return this.applyQuaternion(a.setFromEuler(b))}}(),applyAxisAngle:function(){var a;return function(b,c){void 0===a&&(a=new da);return this.applyQuaternion(a.setFromAxisAngle(b,c))}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;\na=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*\nc+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,m=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-m*-f;this.y=k*a+b*-f+m*-e-h*-g;this.z=m*a+b*-g+h*-f-k*-e;return this},project:function(){var a;return function(b){void 0===a&&(a=new H);a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyProjection(a)}}(),unproject:function(){var a;return function(b){void 0===a&&(a=new H);\na.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyProjection(a)}}(),transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,\na.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new q,b=new q);a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.multiplyScalar(Math.max(a,\nMath.min(b,c))/c)},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):\nMath.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.multiplyScalar(a/\nthis.length())},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},cross:function(a,b){if(void 0!==b)return console.warn(\"THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.\"),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){var c=\na.x,d=a.y,e=a.z,f=b.x,g=b.y,h=b.z;this.x=d*h-e*g;this.y=e*f-c*h;this.z=c*g-d*f;return this},projectOnVector:function(a){var b=a.dot(this)/a.lengthSq();return this.copy(a).multiplyScalar(b)},projectOnPlane:function(){var a;return function(b){void 0===a&&(a=new q);a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a;return function(b){void 0===a&&(a=new q);return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*\na.lengthSq());return Math.acos(Q.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},distanceToManhattan:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromCylindrical:function(a){this.x=\na.radius*Math.sin(a.theta);this.y=a.y;this.z=a.radius*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){return this.setFromMatrixColumn(a,3)},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){if(\"number\"===typeof a){console.warn(\"THREE.Vector3: setFromMatrixColumn now expects ( matrix, index ).\");var c=\na;a=b;b=c}return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromAttribute:function(a,b,c){void 0!==c&&console.warn(\"THREE.Vector3: offset has been removed from .fromAttribute().\");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this}};\nH.prototype={constructor:H,isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,k,m,l,p,n,r,w,u){var q=this.elements;q[0]=a;q[4]=b;q[8]=c;q[12]=d;q[1]=e;q[5]=f;q[9]=g;q[13]=h;q[2]=k;q[6]=m;q[10]=l;q[14]=p;q[3]=n;q[7]=r;q[11]=w;q[15]=u;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new H).fromArray(this.elements)},copy:function(a){this.elements.set(a.elements);return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=\na[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x,b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(){var a;return function(b){void 0===a&&(a=new q);var c=this.elements,d=b.elements,e=1/a.setFromMatrixColumn(b,0).length(),f=1/a.setFromMatrixColumn(b,1).length();b=1/a.setFromMatrixColumn(b,2).length();c[0]=d[0]*e;\nc[1]=d[1]*e;c[2]=d[2]*e;c[4]=d[4]*f;c[5]=d[5]*f;c[6]=d[6]*f;c[8]=d[8]*b;c[9]=d[9]*b;c[10]=d[10]*b;return this}}(),makeRotationFromEuler:function(a){!1===(a&&a.isEuler)&&console.error(\"THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.\");var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c),c=Math.sin(c),g=Math.cos(d),d=Math.sin(d),h=Math.cos(e),e=Math.sin(e);if(\"XYZ\"===a.order){a=f*h;var k=f*e,m=c*h,l=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=k+m*d;b[5]=a-\nl*d;b[9]=-c*g;b[2]=l-a*d;b[6]=m+k*d;b[10]=f*g}else\"YXZ\"===a.order?(a=g*h,k=g*e,m=d*h,l=d*e,b[0]=a+l*c,b[4]=m*c-k,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=k*c-m,b[6]=l+a*c,b[10]=f*g):\"ZXY\"===a.order?(a=g*h,k=g*e,m=d*h,l=d*e,b[0]=a-l*c,b[4]=-f*e,b[8]=m+k*c,b[1]=k+m*c,b[5]=f*h,b[9]=l-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):\"ZYX\"===a.order?(a=f*h,k=f*e,m=c*h,l=c*e,b[0]=g*h,b[4]=m*d-k,b[8]=a*d+l,b[1]=g*e,b[5]=l*d+a,b[9]=k*d-m,b[2]=-d,b[6]=c*g,b[10]=f*g):\"YZX\"===a.order?(a=f*g,k=f*d,m=c*g,l=c*d,b[0]=g*h,b[4]=l-\na*e,b[8]=m*e+k,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=k*e+m,b[10]=a-l*e):\"XZY\"===a.order&&(a=f*g,k=f*d,m=c*g,l=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+l,b[5]=f*h,b[9]=k*e-m,b[2]=m*e-k,b[6]=c*h,b[10]=l*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=a.w,g=c+c,h=d+d,k=e+e;a=c*g;var m=c*h,c=c*k,l=d*h,d=d*k,e=e*k,g=f*g,h=f*h,f=f*k;b[0]=1-(l+e);b[4]=m-f;b[8]=c+h;b[1]=m+f;b[5]=1-(a+e);b[9]=d-g;b[2]=c-\nh;b[6]=d+g;b[10]=1-(a+l);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},lookAt:function(){var a,b,c;return function(d,e,f){void 0===a&&(a=new q,b=new q,c=new q);var g=this.elements;c.subVectors(d,e).normalize();0===c.lengthSq()&&(c.z=1);a.crossVectors(f,c).normalize();0===a.lengthSq()&&(c.z+=1E-4,a.crossVectors(f,c).normalize());b.crossVectors(c,a);g[0]=a.x;g[4]=b.x;g[8]=c.x;g[1]=a.y;g[5]=b.y;g[9]=c.y;g[2]=a.z;g[6]=b.z;g[10]=c.z;return this}}(),multiply:function(a,b){return void 0!==\nb?(console.warn(\"THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.\"),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],k=c[12],m=c[1],l=c[5],p=c[9],n=c[13],r=c[2],w=c[6],u=c[10],q=c[14],t=c[3],v=c[7],M=c[11],c=c[15],z=d[0],A=d[4],I=d[8],E=d[12],K=d[1],y=d[5],J=d[9],C=d[13],D=d[2],G=d[6],\nH=d[10],O=d[14],P=d[3],R=d[7],T=d[11],d=d[15];e[0]=f*z+g*K+h*D+k*P;e[4]=f*A+g*y+h*G+k*R;e[8]=f*I+g*J+h*H+k*T;e[12]=f*E+g*C+h*O+k*d;e[1]=m*z+l*K+p*D+n*P;e[5]=m*A+l*y+p*G+n*R;e[9]=m*I+l*J+p*H+n*T;e[13]=m*E+l*C+p*O+n*d;e[2]=r*z+w*K+u*D+q*P;e[6]=r*A+w*y+u*G+q*R;e[10]=r*I+w*J+u*H+q*T;e[14]=r*E+w*C+u*O+q*d;e[3]=t*z+v*K+M*D+c*P;e[7]=t*A+v*y+M*G+c*R;e[11]=t*I+v*J+M*H+c*T;e[15]=t*E+v*C+M*O+c*d;return this},multiplyToArray:function(a,b,c){var d=this.elements;this.multiplyMatrices(a,b);c[0]=d[0];c[1]=d[1];c[2]=\nd[2];c[3]=d[3];c[4]=d[4];c[5]=d[5];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12];c[13]=d[13];c[14]=d[14];c[15]=d[15];return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},applyToVector3Array:function(){var a;return function(b,c,d){void 0===a&&(a=new q);void 0===c&&(c=0);void 0===d&&(d=b.length);for(var e=0;e<d;e+=3,c+=\n3)a.fromArray(b,c),a.applyMatrix4(this),a.toArray(b,c);return b}}(),applyToBufferAttribute:function(){var a;return function(b){void 0===a&&(a=new q);for(var c=0,d=b.count;c<d;c++)a.x=b.getX(c),a.y=b.getY(c),a.z=b.getZ(c),a.applyMatrix4(this),b.setXYZ(c,a.x,a.y,a.z);return b}}(),determinant:function(){var a=this.elements,b=a[0],c=a[4],d=a[8],e=a[12],f=a[1],g=a[5],h=a[9],k=a[13],m=a[2],l=a[6],p=a[10],n=a[14];return a[3]*(+e*h*l-d*k*l-e*g*p+c*k*p+d*g*n-c*h*n)+a[7]*(+b*h*n-b*k*p+e*f*p-d*f*n+d*k*m-e*h*\nm)+a[11]*(+b*k*l-b*g*n-e*f*l+c*f*n+e*g*m-c*k*m)+a[15]*(-d*g*m-b*h*l+b*g*p+d*f*l-c*f*p+c*h*m)},transpose:function(){var a=this.elements,b;b=a[1];a[1]=a[4];a[4]=b;b=a[2];a[2]=a[8];a[8]=b;b=a[6];a[6]=a[9];a[9]=b;b=a[3];a[3]=a[12];a[12]=b;b=a[7];a[7]=a[13];a[13]=b;b=a[11];a[11]=a[14];a[14]=b;return this},setPosition:function(a){var b=this.elements;b[12]=a.x;b[13]=a.y;b[14]=a.z;return this},getInverse:function(a,b){var c=this.elements,d=a.elements,e=d[0],f=d[1],g=d[2],h=d[3],k=d[4],m=d[5],l=d[6],p=d[7],\nn=d[8],r=d[9],w=d[10],u=d[11],q=d[12],t=d[13],v=d[14],d=d[15],M=r*v*p-t*w*p+t*l*u-m*v*u-r*l*d+m*w*d,z=q*w*p-n*v*p-q*l*u+k*v*u+n*l*d-k*w*d,A=n*t*p-q*r*p+q*m*u-k*t*u-n*m*d+k*r*d,I=q*r*l-n*t*l-q*m*w+k*t*w+n*m*v-k*r*v,E=e*M+f*z+g*A+h*I;if(0===E){if(!0===b)throw Error(\"THREE.Matrix4.getInverse(): can't invert matrix, determinant is 0\");console.warn(\"THREE.Matrix4.getInverse(): can't invert matrix, determinant is 0\");return this.identity()}E=1/E;c[0]=M*E;c[1]=(t*w*h-r*v*h-t*g*u+f*v*u+r*g*d-f*w*d)*E;c[2]=\n(m*v*h-t*l*h+t*g*p-f*v*p-m*g*d+f*l*d)*E;c[3]=(r*l*h-m*w*h-r*g*p+f*w*p+m*g*u-f*l*u)*E;c[4]=z*E;c[5]=(n*v*h-q*w*h+q*g*u-e*v*u-n*g*d+e*w*d)*E;c[6]=(q*l*h-k*v*h-q*g*p+e*v*p+k*g*d-e*l*d)*E;c[7]=(k*w*h-n*l*h+n*g*p-e*w*p-k*g*u+e*l*u)*E;c[8]=A*E;c[9]=(q*r*h-n*t*h-q*f*u+e*t*u+n*f*d-e*r*d)*E;c[10]=(k*t*h-q*m*h+q*f*p-e*t*p-k*f*d+e*m*d)*E;c[11]=(n*m*h-k*r*h-n*f*p+e*r*p+k*f*u-e*m*u)*E;c[12]=I*E;c[13]=(n*t*g-q*r*g+q*f*w-e*t*w-n*f*v+e*r*v)*E;c[14]=(q*m*g-k*t*g-q*f*l+e*t*l+k*f*v-e*m*v)*E;c[15]=(k*r*g-n*m*g+n*f*l-\ne*r*l-k*f*w+e*m*w)*E;return this},scale:function(a){var b=this.elements,c=a.x,d=a.y;a=a.z;b[0]*=c;b[4]*=d;b[8]*=a;b[1]*=c;b[5]*=d;b[9]*=a;b[2]*=c;b[6]*=d;b[10]*=a;b[3]*=c;b[7]*=d;b[11]*=a;return this},getMaxScaleOnAxis:function(){var a=this.elements;return Math.sqrt(Math.max(a[0]*a[0]+a[1]*a[1]+a[2]*a[2],a[4]*a[4]+a[5]*a[5]+a[6]*a[6],a[8]*a[8]+a[9]*a[9]+a[10]*a[10]))},makeTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},makeRotationX:function(a){var b=Math.cos(a);\na=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},makeRotationY:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},makeRotationZ:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=1-c,f=a.x,g=a.y,h=a.z,k=e*f,m=e*g;this.set(k*f+c,k*g-d*h,k*h+d*g,0,k*g+d*h,m*g+c,m*h-d*f,0,k*h-d*g,m*h+d*f,e*h*h+c,0,0,0,0,1);return this},\nmakeScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},makeShear:function(a,b,c){this.set(1,b,c,0,a,1,c,0,a,b,1,0,0,0,0,1);return this},compose:function(a,b,c){this.makeRotationFromQuaternion(b);this.scale(c);this.setPosition(a);return this},decompose:function(){var a,b;return function(c,d,e){void 0===a&&(a=new q,b=new H);var f=this.elements,g=a.set(f[0],f[1],f[2]).length(),h=a.set(f[4],f[5],f[6]).length(),k=a.set(f[8],f[9],f[10]).length();0>this.determinant()&&(g=-g);c.x=\nf[12];c.y=f[13];c.z=f[14];b.elements.set(this.elements);c=1/g;var f=1/h,m=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=m;b.elements[9]*=m;b.elements[10]*=m;d.setFromRotationMatrix(b);e.x=g;e.y=h;e.z=k;return this}}(),makeFrustum:function(a,b,c,d,e,f){var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(d-c);g[9]=(d+c)/(d-c);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=\n0;g[11]=-1;g[15]=0;return this},makePerspective:function(a,b,c,d){a=c*Math.tan(Q.DEG2RAD*a*.5);var e=-a;return this.makeFrustum(e*b,a*b,e,a,c,d)},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),m=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*m;g[14]=-((f+e)*m);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},\nfromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}};Za.prototype=Object.create(ea.prototype);Za.prototype.constructor=Za;Za.prototype.isCubeTexture=!0;Object.defineProperty(Za.prototype,\n\"images\",{get:function(){return this.image},set:function(a){this.image=a}});var se=new ea,te=new Za,pe=[],re=[];xe.prototype.setValue=function(a,b){for(var c=this.seq,d=0,e=c.length;d!==e;++d){var f=c[d];f.setValue(a,b[f.id])}};var Id=/([\\w\\d_]+)(\\])?(\\[|\\.)?/g;$a.prototype.setValue=function(a,b,c){b=this.map[b];void 0!==b&&b.setValue(a,c,this.renderer)};$a.prototype.set=function(a,b,c){var d=this.map[c];void 0!==d&&d.setValue(a,b[c],this.renderer)};$a.prototype.setOptional=function(a,b,c){b=b[c];\nvoid 0!==b&&this.setValue(a,c,b)};$a.upload=function(a,b,c,d){for(var e=0,f=b.length;e!==f;++e){var g=b[e],h=c[g.id];!1!==h.needsUpdate&&g.setValue(a,h.value,d)}};$a.seqWithValue=function(a,b){for(var c=[],d=0,e=a.length;d!==e;++d){var f=a[d];f.id in b&&c.push(f)}return c};var Ja={merge:function(a){for(var b={},c=0;c<a.length;c++){var d=this.clone(a[c]),e;for(e in d)b[e]=d[e]}return b},clone:function(a){var b={},c;for(c in a){b[c]={};for(var d in a[c]){var e=a[c][d];e&&(e.isColor||e.isMatrix3||e.isMatrix4||\ne.isVector2||e.isVector3||e.isVector4||e.isTexture)?b[c][d]=e.clone():Array.isArray(e)?b[c][d]=e.slice():b[c][d]=e}}return b}},Z={alphamap_fragment:\"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\\n\",alphamap_pars_fragment:\"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\\n\",alphatest_fragment:\"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\\n\",aomap_fragment:\"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\\t#endif\\n#endif\\n\",\naomap_pars_fragment:\"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\",begin_vertex:\"\\nvec3 transformed = vec3( position );\\n\",beginnormal_vertex:\"\\nvec3 objectNormal = vec3( normal );\\n\",bsdfs:\"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\t\\tif( decayExponent > 0.0 ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\t\\t\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\t\\t\\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t\\t\\treturn distanceFalloff * maxDistanceCutoffFactor;\\n#else\\n\\t\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n#endif\\n\\t\\t}\\n\\t\\treturn 1.0;\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( G * D );\\n}\\nvec2 ltcTextureCoords( const in GeometricContext geometry, const in float roughness ) {\\n\\tconst float LUT_SIZE  = 64.0;\\n\\tconst float LUT_SCALE = (LUT_SIZE - 1.0)/LUT_SIZE;\\n\\tconst float LUT_BIAS  = 0.5/LUT_SIZE;\\n\\tvec3 N = geometry.normal;\\n\\tvec3 V = geometry.viewDir;\\n\\tvec3 P = geometry.position;\\n\\tfloat theta = acos( dot( N, V ) );\\n\\tvec2 uv = vec2(\\n\\t\\tsqrt( saturate( roughness ) ),\\n\\t\\tsaturate( theta / ( 0.5 * PI ) ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nvoid clipQuadToHorizon( inout vec3 L[5], out int n ) {\\n\\tint config = 0;\\n\\tif ( L[0].z > 0.0 ) config += 1;\\n\\tif ( L[1].z > 0.0 ) config += 2;\\n\\tif ( L[2].z > 0.0 ) config += 4;\\n\\tif ( L[3].z > 0.0 ) config += 8;\\n\\tn = 0;\\n\\tif ( config == 0 ) {\\n\\t} else if ( config == 1 ) {\\n\\t\\tn = 3;\\n\\t\\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\\n\\t\\tL[2] = -L[3].z * L[0] + L[0].z * L[3];\\n\\t} else if ( config == 2 ) {\\n\\t\\tn = 3;\\n\\t\\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\\n\\t\\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\\n\\t} else if ( config == 3 ) {\\n\\t\\tn = 4;\\n\\t\\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\\n\\t\\tL[3] = -L[3].z * L[0] + L[0].z * L[3];\\n\\t} else if ( config == 4 ) {\\n\\t\\tn = 3;\\n\\t\\tL[0] = -L[3].z * L[2] + L[2].z * L[3];\\n\\t\\tL[1] = -L[1].z * L[2] + L[2].z * L[1];\\n\\t} else if ( config == 5 ) {\\n\\t\\tn = 0;\\n\\t} else if ( config == 6 ) {\\n\\t\\tn = 4;\\n\\t\\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\\n\\t\\tL[3] = -L[3].z * L[2] + L[2].z * L[3];\\n\\t} else if ( config == 7 ) {\\n\\t\\tn = 5;\\n\\t\\tL[4] = -L[3].z * L[0] + L[0].z * L[3];\\n\\t\\tL[3] = -L[3].z * L[2] + L[2].z * L[3];\\n\\t} else if ( config == 8 ) {\\n\\t\\tn = 3;\\n\\t\\tL[0] = -L[0].z * L[3] + L[3].z * L[0];\\n\\t\\tL[1] = -L[2].z * L[3] + L[3].z * L[2];\\n\\t\\tL[2] =  L[3];\\n\\t} else if ( config == 9 ) {\\n\\t\\tn = 4;\\n\\t\\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\\n\\t\\tL[2] = -L[2].z * L[3] + L[3].z * L[2];\\n\\t} else if ( config == 10 ) {\\n\\t\\tn = 0;\\n\\t} else if ( config == 11 ) {\\n\\t\\tn = 5;\\n\\t\\tL[4] = L[3];\\n\\t\\tL[3] = -L[2].z * L[3] + L[3].z * L[2];\\n\\t\\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\\n\\t} else if ( config == 12 ) {\\n\\t\\tn = 4;\\n\\t\\tL[1] = -L[1].z * L[2] + L[2].z * L[1];\\n\\t\\tL[0] = -L[0].z * L[3] + L[3].z * L[0];\\n\\t} else if ( config == 13 ) {\\n\\t\\tn = 5;\\n\\t\\tL[4] = L[3];\\n\\t\\tL[3] = L[2];\\n\\t\\tL[2] = -L[1].z * L[2] + L[2].z * L[1];\\n\\t\\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\\n\\t} else if ( config == 14 ) {\\n\\t\\tn = 5;\\n\\t\\tL[4] = -L[0].z * L[3] + L[3].z * L[0];\\n\\t\\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\\n\\t} else if ( config == 15 ) {\\n\\t\\tn = 4;\\n\\t}\\n\\tif ( n == 3 )\\n\\t\\tL[3] = L[0];\\n\\tif ( n == 4 )\\n\\t\\tL[4] = L[0];\\n}\\nfloat integrateLtcBrdfOverRectEdge( vec3 v1, vec3 v2 ) {\\n\\tfloat cosTheta = dot( v1, v2 );\\n\\tfloat theta = acos( cosTheta );\\n\\tfloat res = cross( v1, v2 ).z * ( ( theta > 0.001 ) ? theta / sin( theta ) : 1.0 );\\n\\treturn res;\\n}\\nvoid initRectPoints( const in vec3 pos, const in vec3 halfWidth, const in vec3 halfHeight, out vec3 rectPoints[4] ) {\\n\\trectPoints[0] = pos - halfWidth - halfHeight;\\n\\trectPoints[1] = pos + halfWidth - halfHeight;\\n\\trectPoints[2] = pos + halfWidth + halfHeight;\\n\\trectPoints[3] = pos - halfWidth + halfHeight;\\n}\\nvec3 integrateLtcBrdfOverRect( const in GeometricContext geometry, const in mat3 brdfMat, const in vec3 rectPoints[4] ) {\\n\\tvec3 N = geometry.normal;\\n\\tvec3 V = geometry.viewDir;\\n\\tvec3 P = geometry.position;\\n\\tvec3 T1, T2;\\n\\tT1 = normalize(V - N * dot( V, N ));\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 brdfWrtSurface = brdfMat * transpose( mat3( T1, T2, N ) );\\n\\tvec3 clippedRect[5];\\n\\tclippedRect[0] = brdfWrtSurface * ( rectPoints[0] - P );\\n\\tclippedRect[1] = brdfWrtSurface * ( rectPoints[1] - P );\\n\\tclippedRect[2] = brdfWrtSurface * ( rectPoints[2] - P );\\n\\tclippedRect[3] = brdfWrtSurface * ( rectPoints[3] - P );\\n\\tint n;\\n\\tclipQuadToHorizon(clippedRect, n);\\n\\tif ( n == 0 )\\n\\t\\treturn vec3( 0, 0, 0 );\\n\\tclippedRect[0] = normalize( clippedRect[0] );\\n\\tclippedRect[1] = normalize( clippedRect[1] );\\n\\tclippedRect[2] = normalize( clippedRect[2] );\\n\\tclippedRect[3] = normalize( clippedRect[3] );\\n\\tclippedRect[4] = normalize( clippedRect[4] );\\n\\tfloat sum = 0.0;\\n\\tsum += integrateLtcBrdfOverRectEdge( clippedRect[0], clippedRect[1] );\\n\\tsum += integrateLtcBrdfOverRectEdge( clippedRect[1], clippedRect[2] );\\n\\tsum += integrateLtcBrdfOverRectEdge( clippedRect[2], clippedRect[3] );\\n\\tif (n >= 4)\\n\\t\\tsum += integrateLtcBrdfOverRectEdge( clippedRect[3], clippedRect[4] );\\n\\tif (n == 5)\\n\\t\\tsum += integrateLtcBrdfOverRectEdge( clippedRect[4], clippedRect[0] );\\n\\tsum = max( 0.0, sum );\\n\\tvec3 Lo_i = vec3( sum, sum, sum );\\n\\treturn Lo_i;\\n}\\nvec3 Rect_Area_Light_Specular_Reflectance(\\n\\t\\tconst in GeometricContext geometry,\\n\\t\\tconst in vec3 lightPos, const in vec3 lightHalfWidth, const in vec3 lightHalfHeight,\\n\\t\\tconst in float roughness,\\n\\t\\tconst in sampler2D ltcMat, const in sampler2D ltcMag ) {\\n\\tvec3 rectPoints[4];\\n\\tinitRectPoints( lightPos, lightHalfWidth, lightHalfHeight, rectPoints );\\n\\tvec2 uv = ltcTextureCoords( geometry, roughness );\\n\\tvec4 brdfLtcApproxParams, t;\\n\\tbrdfLtcApproxParams = texture2D( ltcMat, uv );\\n\\tt = texture2D( ltcMat, uv );\\n\\tfloat brdfLtcScalar = texture2D( ltcMag, uv ).a;\\n\\tmat3 brdfLtcApproxMat = mat3(\\n\\t\\tvec3(   1,   0, t.y ),\\n\\t\\tvec3(   0, t.z,   0 ),\\n\\t\\tvec3( t.w,   0, t.x )\\n\\t);\\n\\tvec3 specularReflectance = integrateLtcBrdfOverRect( geometry, brdfLtcApproxMat, rectPoints );\\n\\tspecularReflectance *= brdfLtcScalar;\\n\\treturn specularReflectance;\\n}\\nvec3 Rect_Area_Light_Diffuse_Reflectance(\\n\\t\\tconst in GeometricContext geometry,\\n\\t\\tconst in vec3 lightPos, const in vec3 lightHalfWidth, const in vec3 lightHalfHeight ) {\\n\\tvec3 rectPoints[4];\\n\\tinitRectPoints( lightPos, lightHalfWidth, lightHalfHeight, rectPoints );\\n\\tmat3 diffuseBrdfMat = mat3(1);\\n\\tvec3 diffuseReflectance = integrateLtcBrdfOverRect( geometry, diffuseBrdfMat, rectPoints );\\n\\treturn diffuseReflectance;\\n}\\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\\n\\treturn specularColor * AB.x + AB.y;\\n}\\nfloat G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n\",\nbumpmap_pars_fragment:\"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\\n\\t\\tvec3 vSigmaX = dFdx( surf_pos );\\n\\t\\tvec3 vSigmaY = dFdy( surf_pos );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 );\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\\n\",\nclipping_planes_fragment:\"#if NUM_CLIPPING_PLANES > 0\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\\n\\t\\tvec4 plane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t\\t\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\\n\\t\\t\\tvec4 plane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\tif ( clipped ) discard;\\n\\t\\n\\t#endif\\n#endif\\n\",\nclipping_planes_pars_fragment:\"#if NUM_CLIPPING_PLANES > 0\\n\\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\t\\tvarying vec3 vViewPosition;\\n\\t#endif\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\\n\",clipping_planes_pars_vertex:\"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n\",clipping_planes_vertex:\"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n\",\ncolor_fragment:\"#ifdef USE_COLOR\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\",color_pars_fragment:\"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\\n\",color_pars_vertex:\"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\",color_vertex:\"#ifdef USE_COLOR\\n\\tvColor.xyz = color.xyz;\\n#endif\",common:\"#define PI 3.14159265359\\n#define PI2 6.28318530718\\n#define PI_HALF 1.5707963267949\\n#define RECIPROCAL_PI 0.31830988618\\n#define RECIPROCAL_PI2 0.15915494\\n#define LOG2 1.442695\\n#define EPSILON 1e-6\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract(sin(sn) * c);\\n}\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n};\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\n}\\nmat3 transpose( const in mat3 v ) {\\n\\tmat3 tmp;\\n\\ttmp[0] = vec3(v[0].x, v[1].x, v[2].x);\\n\\ttmp[1] = vec3(v[0].y, v[1].y, v[2].y);\\n\\ttmp[2] = vec3(v[0].z, v[1].z, v[2].z);\\n\\treturn tmp;\\n}\\n\",\ncube_uv_reflection_fragment:\"#ifdef ENVMAP_TYPE_CUBE_UV\\n#define cubeUV_textureSize (1024.0)\\nint getFaceFromDirection(vec3 direction) {\\n\\tvec3 absDirection = abs(direction);\\n\\tint face = -1;\\n\\tif( absDirection.x > absDirection.z ) {\\n\\t\\tif(absDirection.x > absDirection.y )\\n\\t\\t\\tface = direction.x > 0.0 ? 0 : 3;\\n\\t\\telse\\n\\t\\t\\tface = direction.y > 0.0 ? 1 : 4;\\n\\t}\\n\\telse {\\n\\t\\tif(absDirection.z > absDirection.y )\\n\\t\\t\\tface = direction.z > 0.0 ? 2 : 5;\\n\\t\\telse\\n\\t\\t\\tface = direction.y > 0.0 ? 1 : 4;\\n\\t}\\n\\treturn face;\\n}\\n#define cubeUV_maxLods1  (log2(cubeUV_textureSize*0.25) - 1.0)\\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\\n\\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\\n\\tfloat dxRoughness = dFdx(roughness);\\n\\tfloat dyRoughness = dFdy(roughness);\\n\\tvec3 dx = dFdx( vec * scale * dxRoughness );\\n\\tvec3 dy = dFdy( vec * scale * dyRoughness );\\n\\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\\n\\td = clamp(d, 1.0, cubeUV_rangeClamp);\\n\\tfloat mipLevel = 0.5 * log2(d);\\n\\treturn vec2(floor(mipLevel), fract(mipLevel));\\n}\\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\\n\\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\\n\\tfloat a = 16.0 * cubeUV_rcpTextureSize;\\n\\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\\n\\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\\n\\tfloat powScale = exp2_packed.x * exp2_packed.y;\\n\\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\\n\\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\\n\\tbool bRes = mipLevel == 0.0;\\n\\tscale =  bRes && (scale < a) ? a : scale;\\n\\tvec3 r;\\n\\tvec2 offset;\\n\\tint face = getFaceFromDirection(direction);\\n\\tfloat rcpPowScale = 1.0 / powScale;\\n\\tif( face == 0) {\\n\\t\\tr = vec3(direction.x, -direction.z, direction.y);\\n\\t\\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ?  a : offset.y;\\n\\t}\\n\\telse if( face == 1) {\\n\\t\\tr = vec3(direction.y, direction.x, direction.z);\\n\\t\\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ?  a : offset.y;\\n\\t}\\n\\telse if( face == 2) {\\n\\t\\tr = vec3(direction.z, direction.x, direction.y);\\n\\t\\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ?  a : offset.y;\\n\\t}\\n\\telse if( face == 3) {\\n\\t\\tr = vec3(direction.x, direction.z, direction.y);\\n\\t\\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ?  0.0 : offset.y;\\n\\t}\\n\\telse if( face == 4) {\\n\\t\\tr = vec3(direction.y, direction.x, -direction.z);\\n\\t\\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ?  0.0 : offset.y;\\n\\t}\\n\\telse {\\n\\t\\tr = vec3(direction.z, -direction.x, direction.y);\\n\\t\\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ?  0.0 : offset.y;\\n\\t}\\n\\tr = normalize(r);\\n\\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\\n\\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\\n\\tvec2 base = offset + vec2( texelOffset );\\n\\treturn base + s * ( scale - 2.0 * texelOffset );\\n}\\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\\n\\tfloat roughnessVal = roughness* cubeUV_maxLods3;\\n\\tfloat r1 = floor(roughnessVal);\\n\\tfloat r2 = r1 + 1.0;\\n\\tfloat t = fract(roughnessVal);\\n\\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\\n\\tfloat s = mipInfo.y;\\n\\tfloat level0 = mipInfo.x;\\n\\tfloat level1 = level0 + 1.0;\\n\\tlevel1 = level1 > 5.0 ? 5.0 : level1;\\n\\tlevel0 += min( floor( s + 0.5 ), 5.0 );\\n\\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\\n\\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\\n\\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\\n\\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\\n\\tvec4 result = mix(color10, color20, t);\\n\\treturn vec4(result.rgb, 1.0);\\n}\\n#endif\\n\",\ndefaultnormal_vertex:\"#ifdef FLIP_SIDED\\n\\tobjectNormal = -objectNormal;\\n#endif\\nvec3 transformedNormal = normalMatrix * objectNormal;\\n\",displacementmap_pars_vertex:\"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\\n\",displacementmap_vertex:\"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normal * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\\n#endif\\n\",emissivemap_fragment:\"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\\n\",\nemissivemap_pars_fragment:\"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\\n\",encodings_fragment:\"  gl_FragColor = linearToOutputTexel( gl_FragColor );\\n\",encodings_pars_fragment:\"\\nvec4 LinearToLinear( in vec4 value ) {\\n  return value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n  return vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n  return vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n  return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\\n}\\nvec4 LinearTosRGB( in vec4 value ) {\\n  return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\\n}\\nvec4 RGBEToLinear( in vec4 value ) {\\n  return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n  float maxComponent = max( max( value.r, value.g ), value.b );\\n  float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n  return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n  return vec4( value.xyz * value.w * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n  float maxRGB = max( value.x, max( value.g, value.b ) );\\n  float M      = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n  M            = ceil( M * 255.0 ) / 255.0;\\n  return vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n    return vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n    float maxRGB = max( value.x, max( value.g, value.b ) );\\n    float D      = max( maxRange / maxRGB, 1.0 );\\n    D            = min( floor( D ) / 255.0, 1.0 );\\n    return vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value )  {\\n  vec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\\n  Xp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\\n  vec4 vResult;\\n  vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n  float Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n  vResult.w = fract(Le);\\n  vResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\\n  return vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n  float Le = value.z * 255.0 + value.w;\\n  vec3 Xp_Y_XYZp;\\n  Xp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\\n  Xp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n  Xp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n  vec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\\n  return vec4( max(vRGB, 0.0), 1.0 );\\n}\\n\",\nenvmap_fragment:\"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\tvec2 sampleUV;\\n\\t\\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\\n\\t\\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\\t\\tvec4 envColor = texture2D( envMap, sampleUV );\\n\\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\\t\\tvec3 reflectView = flipNormal * normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\\n\\t\\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\tenvColor = envMapTexelToLinear( envColor );\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\\n\",\nenvmap_pars_fragment:\"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\\n\\tuniform float reflectivity;\\n\\tuniform float envMapIntensity;\\n#endif\\n#ifdef USE_ENVMAP\\n\\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\tuniform float flipEnvMap;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\\n\",\nenvmap_pars_vertex:\"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\\n\",envmap_vertex:\"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\n\",\nfog_fragment:\"#ifdef USE_FOG\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\\n\\t#else\\n\\t\\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\\n\\t#endif\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * depth * depth * LOG2 ) );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\\n\",fog_pars_fragment:\"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\",\ngradientmap_pars_fragment:\"#ifdef TOON\\n\\tuniform sampler2D gradientMap;\\n\\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\t\\tfloat dotNL = dot( normal, lightDirection );\\n\\t\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t\\t#ifdef USE_GRADIENTMAP\\n\\t\\t\\treturn texture2D( gradientMap, coord ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\",lightmap_fragment:\"#ifdef USE_LIGHTMAP\\n\\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n#endif\\n\",\nlightmap_pars_fragment:\"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\",lights_lambert_vertex:\"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\n#if NUM_POINT_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t}\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\",\nlights_pars:\"uniform vec3 ambientLightColor;\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treturn irradiance;\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tdirectLight.color = directionalLight.color;\\n\\t\\tdirectLight.direction = directionalLight.direction;\\n\\t\\tdirectLight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight  ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\\t\\tif ( angleCos > spotLight.coneCos ) {\\n\\t\\t\\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\t\\tdirectLight.color = spotLight.color;\\n\\t\\t\\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tdirectLight.visible = true;\\n\\t\\t} else {\\n\\t\\t\\tdirectLight.color = vec3( 0.0 );\\n\\t\\t\\tdirectLight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltcMat;\\tuniform sampler2D ltcMag;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\\n\\t\\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tirradiance *= PI;\\n\\t\\t#endif\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\\n#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\\n\\t\\t#else\\n\\t\\t\\tvec4 envMapColor = vec4( 0.0 );\\n\\t\\t#endif\\n\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t}\\n\\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\\n\\t\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\t\\tvec2 sampleUV;\\n\\t\\t\\tsampleUV.y = saturate( reflectVec.y * 0.5 + 0.5 );\\n\\t\\t\\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\\t\\t\\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\\n\",\nlights_phong_fragment:\"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\\n\",lights_phong_pars_fragment:\"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct BlinnPhongMaterial {\\n\\tvec3\\tdiffuseColor;\\n\\tvec3\\tspecularColor;\\n\\tfloat\\tspecularShininess;\\n\\tfloat\\tspecularStrength;\\n};\\n#if NUM_RECT_AREA_LIGHTS > 0\\n    void RE_Direct_RectArea_BlinnPhong( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n        vec3 matDiffColor = material.diffuseColor;\\n        vec3 matSpecColor = material.specularColor;\\n        vec3 lightColor   = rectAreaLight.color;\\n        float roughness = BlinnExponentToGGXRoughness( material.specularShininess );\\n        vec3 spec = Rect_Area_Light_Specular_Reflectance(\\n                geometry,\\n                rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,\\n                roughness,\\n                ltcMat, ltcMag );\\n        vec3 diff = Rect_Area_Light_Diffuse_Reflectance(\\n                geometry,\\n                rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );\\n        reflectedLight.directSpecular += lightColor * matSpecColor * spec / PI2;\\n        reflectedLight.directDiffuse  += lightColor * matDiffColor * diff / PI2;\\n    }\\n#endif\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t#ifdef TOON\\n\\t\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#else\\n\\t\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\t\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#endif\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\\n\",\nlights_physical_fragment:\"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\\n#ifdef STANDARD\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.clearCoat = saturate( clearCoat );\\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\\n#endif\\n\",\nlights_physical_pars_fragment:\"struct PhysicalMaterial {\\n\\tvec3\\tdiffuseColor;\\n\\tfloat\\tspecularRoughness;\\n\\tvec3\\tspecularColor;\\n\\t#ifndef STANDARD\\n\\t\\tfloat clearCoat;\\n\\t\\tfloat clearCoatRoughness;\\n\\t#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n    void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n        vec3 matDiffColor = material.diffuseColor;\\n        vec3 matSpecColor = material.specularColor;\\n        vec3 lightColor   = rectAreaLight.color;\\n        float roughness = material.specularRoughness;\\n        vec3 spec = Rect_Area_Light_Specular_Reflectance(\\n                geometry,\\n                rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,\\n                roughness,\\n                ltcMat, ltcMag );\\n        vec3 diff = Rect_Area_Light_Diffuse_Reflectance(\\n                geometry,\\n                rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );\\n        reflectedLight.directSpecular += lightColor * matSpecColor * spec;\\n        reflectedLight.directDiffuse  += lightColor * matDiffColor * diff;\\n    }\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\t#ifndef STANDARD\\n\\t\\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\\n\\t#else\\n\\t\\tfloat clearCoatDHR = 0.0;\\n\\t#endif\\n\\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\\n\\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\t#ifndef STANDARD\\n\\t\\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\\n\\t#endif\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t#ifndef STANDARD\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\tfloat dotNL = dotNV;\\n\\t\\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\\n\\t#else\\n\\t\\tfloat clearCoatDHR = 0.0;\\n\\t#endif\\n\\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\\n\\t#ifndef STANDARD\\n\\t\\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\\n\\t#endif\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\n#define Material_BlinnShininessExponent( material )   GGXRoughnessToBlinnExponent( material.specularRoughness )\\n#define Material_ClearCoat_BlinnShininessExponent( material )   GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\\n\",\nlights_template:\"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = normalize( vViewPosition );\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t}\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t \\tirradiance += getLightProbeIndirectIrradiance( geometry, 8 );\\n\\t#endif\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tvec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\\n\\t#ifndef STANDARD\\n\\t\\tvec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );\\n\\t#else\\n\\t\\tvec3 clearCoatRadiance = vec3( 0.0 );\\n\\t#endif\\n\\t\\t\\n\\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\\n#endif\\n\",\nlogdepthbuf_fragment:\"#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\\n\\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\\n#endif\",logdepthbuf_pars_fragment:\"#ifdef USE_LOGDEPTHBUF\\n\\tuniform float logDepthBufFC;\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t#endif\\n#endif\\n\",logdepthbuf_pars_vertex:\"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t#endif\\n\\tuniform float logDepthBufFC;\\n#endif\",logdepthbuf_vertex:\"#ifdef USE_LOGDEPTHBUF\\n\\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t#else\\n\\t\\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\\n\\t#endif\\n#endif\\n\",\nmap_fragment:\"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\\n\",map_pars_fragment:\"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n\",map_particle_fragment:\"#ifdef USE_MAP\\n\\tvec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n\",map_particle_pars_fragment:\"#ifdef USE_MAP\\n\\tuniform vec4 offsetRepeat;\\n\\tuniform sampler2D map;\\n#endif\\n\",\nmetalnessmap_fragment:\"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.r;\\n#endif\\n\",metalnessmap_pars_fragment:\"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\",morphnormal_vertex:\"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\\n#endif\\n\",\nmorphtarget_pars_vertex:\"#ifdef USE_MORPHTARGETS\\n\\t#ifndef USE_MORPHNORMALS\\n\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\",morphtarget_vertex:\"#ifdef USE_MORPHTARGETS\\n\\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\\n\\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\\n\\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\\n\\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\\n\\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\\n\\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\\n\\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\\n\",\nnormal_flip:\"#ifdef DOUBLE_SIDED\\n\\tfloat flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n#else\\n\\tfloat flipNormal = 1.0;\\n#endif\\n\",normal_fragment:\"#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal ) * flipNormal;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tnormal = perturbNormal2Arb( -vViewPosition, normal );\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n#endif\\n\",\nnormalmap_pars_fragment:\"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\\n\\t\\tvec3 q0 = dFdx( eye_pos.xyz );\\n\\t\\tvec3 q1 = dFdy( eye_pos.xyz );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\\n\\t\\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\\n\\t\\tvec3 N = normalize( surf_norm );\\n\\t\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t\\tmapN.xy = normalScale * mapN.xy;\\n\\t\\tmat3 tsn = mat3( S, T, N );\\n\\t\\treturn normalize( tsn * mapN );\\n\\t}\\n#endif\\n\",\npacking:\"vec3 packNormalToRGB( const in vec3 normal ) {\\n  return normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n  return 1.0 - 2.0 * rgb.xyz;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256.,  256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n  return ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\n  return linearClipZ * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n  return (( near + viewZ ) * far ) / (( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n  return ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\\n\",\npremultiplied_alpha_fragment:\"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\\n\",project_vertex:\"#ifdef USE_SKINNING\\n\\tvec4 mvPosition = modelViewMatrix * skinned;\\n#else\\n\\tvec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\\n#endif\\ngl_Position = projectionMatrix * mvPosition;\\n\",roughnessmap_fragment:\"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.r;\\n#endif\\n\",\nroughnessmap_pars_fragment:\"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\",shadowmap_pars_fragment:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\\n\\t#endif\\n    #if NUM_RECT_AREA_LIGHTS > 0\\n    #endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\\n\\t\\tconst vec2 offset = vec2( 0.0, 1.0 );\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / size;\\n\\t\\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\\n\\t\\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\\n\\t\\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\\n\\t\\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\\n\\t\\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\\n\\t\\tvec2 f = fract( uv * size + 0.5 );\\n\\t\\tfloat a = mix( lb, lt, f.y );\\n\\t\\tfloat b = mix( rb, rt, f.y );\\n\\t\\tfloat c = mix( a, b, f.x );\\n\\t\\treturn c;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn 1.0;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\",\nshadowmap_pars_vertex:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\\n\\t#endif\\n    #if NUM_RECT_AREA_LIGHTS > 0\\n    #endif\\n#endif\\n\",\nshadowmap_vertex:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n    #if NUM_RECT_AREA_LIGHTS > 0\\n    #endif\\n#endif\\n\",\nshadowmask_pars_fragment:\"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\tDirectionalLight directionalLight;\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\tSpotLight spotLight;\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\tPointLight pointLight;\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#if NUM_RECT_AREA_LIGHTS > 0\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\\n\",\nskinbase_vertex:\"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\",skinning_pars_vertex:\"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform sampler2D boneTexture;\\n\\t\\tuniform int boneTextureWidth;\\n\\t\\tuniform int boneTextureHeight;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureWidth ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureWidth ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureWidth );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureHeight );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\\n\",\nskinning_vertex:\"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\tskinned  = bindMatrixInverse * skinned;\\n#endif\\n\",skinnormal_vertex:\"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix  = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n#endif\\n\",\nspecularmap_fragment:\"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\",specularmap_pars_fragment:\"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\",tonemapping_fragment:\"#if defined( TONE_MAPPING )\\n  gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\\n\",tonemapping_pars_fragment:\"#define saturate(a) clamp( a, 0.0, 1.0 )\\nuniform float toneMappingExposure;\\nuniform float toneMappingWhitePoint;\\nvec3 LinearToneMapping( vec3 color ) {\\n  return toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n  color *= toneMappingExposure;\\n  return saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\\nvec3 Uncharted2ToneMapping( vec3 color ) {\\n  color *= toneMappingExposure;\\n  return saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n  color *= toneMappingExposure;\\n  color = max( vec3( 0.0 ), color - 0.004 );\\n  return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\n\",\nuv_pars_fragment:\"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvarying vec2 vUv;\\n#endif\",uv_pars_vertex:\"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvarying vec2 vUv;\\n\\tuniform vec4 offsetRepeat;\\n#endif\\n\",\nuv_vertex:\"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\\n#endif\",uv2_pars_fragment:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\",uv2_pars_vertex:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n#endif\",\nuv2_vertex:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = uv2;\\n#endif\",worldpos_vertex:\"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( PHYSICAL ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\\n\\t#ifdef USE_SKINNING\\n\\t\\tvec4 worldPosition = modelMatrix * skinned;\\n\\t#else\\n\\t\\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\\n\\t#endif\\n#endif\\n\",cube_frag:\"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\\n\\tgl_FragColor.a *= opacity;\\n}\\n\",\ncube_vert:\"varying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n}\\n\",depth_frag:\"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include <map_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <logdepthbuf_fragment>\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\\n\\t#endif\\n}\\n\",\ndepth_vert:\"#include <common>\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n}\\n\",\ndistanceRGBA_frag:\"uniform vec3 lightPos;\\nvarying vec4 vWorldPosition;\\n#include <common>\\n#include <packing>\\n#include <clipping_planes_pars_fragment>\\nvoid main () {\\n\\t#include <clipping_planes_fragment>\\n\\tgl_FragColor = packDepthToRGBA( length( vWorldPosition.xyz - lightPos.xyz ) / 1000.0 );\\n}\\n\",distanceRGBA_vert:\"varying vec4 vWorldPosition;\\n#include <common>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <skinbase_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvWorldPosition = worldPosition;\\n}\\n\",\nequirect_frag:\"uniform sampler2D tEquirect;\\nuniform float tFlip;\\nvarying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvec3 direction = normalize( vWorldPosition );\\n\\tvec2 sampleUV;\\n\\tsampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );\\n\\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n}\\n\",equirect_vert:\"varying vec3 vWorldPosition;\\n#include <common>\\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n}\\n\",\nlinedashed_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <color_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\",\nlinedashed_vert:\"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\tvLineDistance = scale * lineDistance;\\n\\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n}\\n\",meshbasic_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include <aomap_fragment>\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include <normal_flip>\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\",\nmeshbasic_vert:\"#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#ifdef USE_ENVMAP\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#endif\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <envmap_vertex>\\n}\\n\",\nmeshlambert_frag:\"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars>\\n#include <fog_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <emissivemap_fragment>\\n\\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\\n\\t#include <lightmap_fragment>\\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include <normal_flip>\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\",\nmeshlambert_vert:\"#define LAMBERT\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <bsdfs>\\n#include <lights_pars>\\n#include <color_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <lights_lambert_vertex>\\n\\t#include <shadowmap_vertex>\\n}\\n\",\nmeshphong_frag:\"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <gradientmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <lights_pars>\\n#include <lights_phong_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <normal_flip>\\n\\t#include <normal_fragment>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_phong_fragment>\\n\\t#include <lights_template>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include <envmap_fragment>\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\",\nmeshphong_vert:\"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <envmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <envmap_vertex>\\n\\t#include <shadowmap_vertex>\\n}\\n\",\nmeshphysical_frag:\"#define PHYSICAL\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifndef STANDARD\\n\\tuniform float clearCoat;\\n\\tuniform float clearCoatRoughness;\\n#endif\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <packing>\\n#include <color_pars_fragment>\\n#include <uv_pars_fragment>\\n#include <uv2_pars_fragment>\\n#include <map_pars_fragment>\\n#include <alphamap_pars_fragment>\\n#include <aomap_pars_fragment>\\n#include <lightmap_pars_fragment>\\n#include <emissivemap_pars_fragment>\\n#include <envmap_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <bsdfs>\\n#include <cube_uv_reflection_fragment>\\n#include <lights_pars>\\n#include <lights_physical_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <roughnessmap_pars_fragment>\\n#include <metalnessmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphamap_fragment>\\n\\t#include <alphatest_fragment>\\n\\t#include <specularmap_fragment>\\n\\t#include <roughnessmap_fragment>\\n\\t#include <metalnessmap_fragment>\\n\\t#include <normal_flip>\\n\\t#include <normal_fragment>\\n\\t#include <emissivemap_fragment>\\n\\t#include <lights_physical_fragment>\\n\\t#include <lights_template>\\n\\t#include <aomap_fragment>\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\",\nmeshphysical_vert:\"#define PHYSICAL\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <common>\\n#include <uv_pars_vertex>\\n#include <uv2_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <color_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <specularmap_pars_fragment>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <uv2_vertex>\\n\\t#include <color_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n}\\n\",\nnormal_frag:\"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED  ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <packing>\\n#include <uv_pars_fragment>\\n#include <bumpmap_pars_fragment>\\n#include <normalmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\nvoid main() {\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <normal_flip>\\n\\t#include <normal_fragment>\\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <encodings_fragment>\\n}\\n\",\nnormal_vert:\"#define NORMAL\\n#if defined( FLAT_SHADED  ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include <uv_pars_vertex>\\n#include <displacementmap_pars_vertex>\\n#include <morphtarget_pars_vertex>\\n#include <skinning_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\nvoid main() {\\n\\t#include <uv_vertex>\\n\\t#include <beginnormal_vertex>\\n\\t#include <morphnormal_vertex>\\n\\t#include <skinbase_vertex>\\n\\t#include <skinnormal_vertex>\\n\\t#include <defaultnormal_vertex>\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include <begin_vertex>\\n\\t#include <displacementmap_vertex>\\n\\t#include <morphtarget_vertex>\\n\\t#include <skinning_vertex>\\n\\t#include <project_vertex>\\n\\t#include <logdepthbuf_vertex>\\n#if defined( FLAT_SHADED  ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\\n\",\npoints_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <color_pars_fragment>\\n#include <map_particle_pars_fragment>\\n#include <fog_pars_fragment>\\n#include <shadowmap_pars_fragment>\\n#include <logdepthbuf_pars_fragment>\\n#include <clipping_planes_pars_fragment>\\nvoid main() {\\n\\t#include <clipping_planes_fragment>\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include <logdepthbuf_fragment>\\n\\t#include <map_particle_fragment>\\n\\t#include <color_fragment>\\n\\t#include <alphatest_fragment>\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include <premultiplied_alpha_fragment>\\n\\t#include <tonemapping_fragment>\\n\\t#include <encodings_fragment>\\n\\t#include <fog_fragment>\\n}\\n\",\npoints_vert:\"uniform float size;\\nuniform float scale;\\n#include <common>\\n#include <color_pars_vertex>\\n#include <shadowmap_pars_vertex>\\n#include <logdepthbuf_pars_vertex>\\n#include <clipping_planes_pars_vertex>\\nvoid main() {\\n\\t#include <color_vertex>\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tgl_PointSize = size * ( scale / - mvPosition.z );\\n\\t#else\\n\\t\\tgl_PointSize = size;\\n\\t#endif\\n\\t#include <logdepthbuf_vertex>\\n\\t#include <clipping_planes_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n}\\n\",\nshadow_frag:\"uniform float opacity;\\n#include <common>\\n#include <packing>\\n#include <bsdfs>\\n#include <lights_pars>\\n#include <shadowmap_pars_fragment>\\n#include <shadowmask_pars_fragment>\\nvoid main() {\\n\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, opacity * ( 1.0  - getShadowMask() ) );\\n}\\n\",shadow_vert:\"#include <shadowmap_pars_vertex>\\nvoid main() {\\n\\t#include <begin_vertex>\\n\\t#include <project_vertex>\\n\\t#include <worldpos_vertex>\\n\\t#include <shadowmap_vertex>\\n}\\n\"};N.prototype={constructor:N,\nisColor:!0,r:1,g:1,b:1,set:function(a){a&&a.isColor?this.copy(a):\"number\"===typeof a?this.setHex(a):\"string\"===typeof a&&this.setStyle(a);return this},setScalar:function(a){this.b=this.g=this.r=a;return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1<d&&--d;return d<1/6?a+6*(c-a)*d:.5>d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b,\nc,d){b=Q.euclideanModulo(b,1);c=Q.clamp(c,0,1);d=Q.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn(\"THREE.Color: Alpha component of \"+a+\" will be ignored.\")}var c;if(c=/^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec(a)){var d=c[2];switch(c[1]){case \"rgb\":case \"rgba\":if(c=/^(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec(d))return this.r=\nMath.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case \"hsl\":case \"hsla\":if(c=/^([0-9]*\\.?[0-9]+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec(d)){var d=parseFloat(c[1])/\n360,e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^\\#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0<a.length&&(c=Lf[a],void 0!==\nc?this.setHex(c):console.warn(\"THREE.Color: Unknown color \"+a));return this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(a){this.r=a.r;this.g=a.g;this.b=a.b;return this},copyGammaToLinear:function(a,b){void 0===b&&(b=2);this.r=Math.pow(a.r,b);this.g=Math.pow(a.g,b);this.b=Math.pow(a.b,b);return this},copyLinearToGamma:function(a,b){void 0===b&&(b=2);var c=0<b?1/b:1;this.r=Math.pow(a.r,c);this.g=Math.pow(a.g,c);this.b=Math.pow(a.b,c);return this},convertGammaToLinear:function(){var a=\nthis.r,b=this.g,c=this.b;this.r=a*a;this.g=b*b;this.b=c*c;return this},convertLinearToGamma:function(){this.r=Math.sqrt(this.r);this.g=Math.sqrt(this.g);this.b=Math.sqrt(this.b);return this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return(\"000000\"+this.getHex().toString(16)).slice(-6)},getHSL:function(a){a=a||{h:0,s:0,l:0};var b=this.r,c=this.g,d=this.b,e=Math.max(b,c,d),f=Math.min(b,c,d),g,h=(f+e)/2;if(f===e)f=g=0;else{var k=e-f,f=.5>=h?k/(e+f):\nk/(2-e-f);switch(e){case b:g=(c-d)/k+(c<d?6:0);break;case c:g=(d-b)/k+2;break;case d:g=(b-c)/k+4}g/=6}a.h=g;a.s=f;a.l=h;return a},getStyle:function(){return\"rgb(\"+(255*this.r|0)+\",\"+(255*this.g|0)+\",\"+(255*this.b|0)+\")\"},offsetHSL:function(a,b,c){var d=this.getHSL();d.h+=a;d.s+=b;d.l+=c;this.setHSL(d.h,d.s,d.l);return this},add:function(a){this.r+=a.r;this.g+=a.g;this.b+=a.b;return this},addColors:function(a,b){this.r=a.r+b.r;this.g=a.g+b.g;this.b=a.b+b.b;return this},addScalar:function(a){this.r+=\na;this.g+=a;this.b+=a;return this},sub:function(a){this.r=Math.max(0,this.r-a.r);this.g=Math.max(0,this.g-a.g);this.b=Math.max(0,this.b-a.b);return this},multiply:function(a){this.r*=a.r;this.g*=a.g;this.b*=a.b;return this},multiplyScalar:function(a){this.r*=a;this.g*=a;this.b*=a;return this},lerp:function(a,b){this.r+=(a.r-this.r)*b;this.g+=(a.g-this.g)*b;this.b+=(a.b-this.b)*b;return this},equals:function(a){return a.r===this.r&&a.g===this.g&&a.b===this.b},fromArray:function(a,b){void 0===b&&(b=\n0);this.r=a[b];this.g=a[b+1];this.b=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.r;a[b+1]=this.g;a[b+2]=this.b;return a},toJSON:function(){return this.getHex()}};var Lf={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,\ncornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,\nfloralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,\nlightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,\nmoccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,\nsilver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};db.prototype=Object.create(ea.prototype);db.prototype.constructor=db;db.prototype.isDataTexture=!0;var U={common:{diffuse:{value:new N(15658734)},opacity:{value:1},map:{value:null},offsetRepeat:{value:new ga(0,\n0,1,1)},specularMap:{value:null},alphaMap:{value:null},envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new C(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},\nroughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:2.5E-4},fogNear:{value:1},fogFar:{value:2E3},fogColor:{value:new N(16777215)}},lights:{ambientLightColor:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},\ndirection:{},distance:{},coneCos:{},penumbraCos:{},decay:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},\nwidth:{},height:{}}}},points:{diffuse:{value:new N(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},offsetRepeat:{value:new ga(0,0,1,1)}}},Gb={basic:{uniforms:Ja.merge([U.common,U.aomap,U.lightmap,U.fog]),vertexShader:Z.meshbasic_vert,fragmentShader:Z.meshbasic_frag},lambert:{uniforms:Ja.merge([U.common,U.aomap,U.lightmap,U.emissivemap,U.fog,U.lights,{emissive:{value:new N(0)}}]),vertexShader:Z.meshlambert_vert,fragmentShader:Z.meshlambert_frag},phong:{uniforms:Ja.merge([U.common,\nU.aomap,U.lightmap,U.emissivemap,U.bumpmap,U.normalmap,U.displacementmap,U.gradientmap,U.fog,U.lights,{emissive:{value:new N(0)},specular:{value:new N(1118481)},shininess:{value:30}}]),vertexShader:Z.meshphong_vert,fragmentShader:Z.meshphong_frag},standard:{uniforms:Ja.merge([U.common,U.aomap,U.lightmap,U.emissivemap,U.bumpmap,U.normalmap,U.displacementmap,U.roughnessmap,U.metalnessmap,U.fog,U.lights,{emissive:{value:new N(0)},roughness:{value:.5},metalness:{value:0},envMapIntensity:{value:1}}]),\nvertexShader:Z.meshphysical_vert,fragmentShader:Z.meshphysical_frag},points:{uniforms:Ja.merge([U.points,U.fog]),vertexShader:Z.points_vert,fragmentShader:Z.points_frag},dashed:{uniforms:Ja.merge([U.common,U.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Z.linedashed_vert,fragmentShader:Z.linedashed_frag},depth:{uniforms:Ja.merge([U.common,U.displacementmap]),vertexShader:Z.depth_vert,fragmentShader:Z.depth_frag},normal:{uniforms:Ja.merge([U.common,U.bumpmap,U.normalmap,\nU.displacementmap,{opacity:{value:1}}]),vertexShader:Z.normal_vert,fragmentShader:Z.normal_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Z.cube_vert,fragmentShader:Z.cube_frag},equirect:{uniforms:{tEquirect:{value:null},tFlip:{value:-1}},vertexShader:Z.equirect_vert,fragmentShader:Z.equirect_frag},distanceRGBA:{uniforms:{lightPos:{value:new q}},vertexShader:Z.distanceRGBA_vert,fragmentShader:Z.distanceRGBA_frag}};Gb.physical={uniforms:Ja.merge([Gb.standard.uniforms,\n{clearCoat:{value:0},clearCoatRoughness:{value:0}}]),vertexShader:Z.meshphysical_vert,fragmentShader:Z.meshphysical_frag};pc.prototype={constructor:pc,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;b<c;b++)this.expandByPoint(a[b]);return this},setFromCenterAndSize:function(){var a=new C;return function(b,c){var d=a.copy(c).multiplyScalar(.5);this.min.copy(b).sub(d);this.max.copy(b).add(d);return this}}(),clone:function(){return(new this.constructor).copy(this)},\ncopy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=this.min.y=Infinity;this.max.x=this.max.y=-Infinity;return this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y},getCenter:function(a){a=a||new C;return this.isEmpty()?a.set(0,0):a.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(a){a=a||new C;return this.isEmpty()?a.set(0,0):a.subVectors(this.max,this.min)},expandByPoint:function(a){this.min.min(a);this.max.max(a);\nreturn this},expandByVector:function(a){this.min.sub(a);this.max.add(a);return this},expandByScalar:function(a){this.min.addScalar(-a);this.max.addScalar(a);return this},containsPoint:function(a){return a.x<this.min.x||a.x>this.max.x||a.y<this.min.y||a.y>this.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y},getParameter:function(a,b){return(b||new C).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-\nthis.min.y))},intersectsBox:function(a){return a.max.x<this.min.x||a.min.x>this.max.x||a.max.y<this.min.y||a.min.y>this.max.y?!1:!0},clampPoint:function(a,b){return(b||new C).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new C;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);\nthis.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};var pf=0;W.prototype={constructor:W,isMaterial:!0,get needsUpdate(){return this._needsUpdate},set needsUpdate(a){!0===a&&this.update();this._needsUpdate=a},setValues:function(a){if(void 0!==a)for(var b in a){var c=a[b];if(void 0===c)console.warn(\"THREE.Material: '\"+b+\"' parameter is undefined.\");else{var d=this[b];void 0===d?console.warn(\"THREE.\"+this.type+\": '\"+b+\"' is not a property of this material.\"):\nd&&d.isColor?d.set(c):d&&d.isVector3&&c&&c.isVector3?d.copy(c):this[b]=\"overdraw\"===b?Number(c):c}}},toJSON:function(a){function b(a){var b=[],c;for(c in a){var d=a[c];delete d.metadata;b.push(d)}return b}var c=void 0===a;c&&(a={textures:{},images:{}});var d={metadata:{version:4.4,type:\"Material\",generator:\"Material.toJSON\"}};d.uuid=this.uuid;d.type=this.type;\"\"!==this.name&&(d.name=this.name);this.color&&this.color.isColor&&(d.color=this.color.getHex());void 0!==this.roughness&&(d.roughness=this.roughness);\nvoid 0!==this.metalness&&(d.metalness=this.metalness);this.emissive&&this.emissive.isColor&&(d.emissive=this.emissive.getHex());this.specular&&this.specular.isColor&&(d.specular=this.specular.getHex());void 0!==this.shininess&&(d.shininess=this.shininess);void 0!==this.clearCoat&&(d.clearCoat=this.clearCoat);void 0!==this.clearCoatRoughness&&(d.clearCoatRoughness=this.clearCoatRoughness);this.map&&this.map.isTexture&&(d.map=this.map.toJSON(a).uuid);this.alphaMap&&this.alphaMap.isTexture&&(d.alphaMap=\nthis.alphaMap.toJSON(a).uuid);this.lightMap&&this.lightMap.isTexture&&(d.lightMap=this.lightMap.toJSON(a).uuid);this.bumpMap&&this.bumpMap.isTexture&&(d.bumpMap=this.bumpMap.toJSON(a).uuid,d.bumpScale=this.bumpScale);this.normalMap&&this.normalMap.isTexture&&(d.normalMap=this.normalMap.toJSON(a).uuid,d.normalScale=this.normalScale.toArray());this.displacementMap&&this.displacementMap.isTexture&&(d.displacementMap=this.displacementMap.toJSON(a).uuid,d.displacementScale=this.displacementScale,d.displacementBias=\nthis.displacementBias);this.roughnessMap&&this.roughnessMap.isTexture&&(d.roughnessMap=this.roughnessMap.toJSON(a).uuid);this.metalnessMap&&this.metalnessMap.isTexture&&(d.metalnessMap=this.metalnessMap.toJSON(a).uuid);this.emissiveMap&&this.emissiveMap.isTexture&&(d.emissiveMap=this.emissiveMap.toJSON(a).uuid);this.specularMap&&this.specularMap.isTexture&&(d.specularMap=this.specularMap.toJSON(a).uuid);this.envMap&&this.envMap.isTexture&&(d.envMap=this.envMap.toJSON(a).uuid,d.reflectivity=this.reflectivity);\nthis.gradientMap&&this.gradientMap.isTexture&&(d.gradientMap=this.gradientMap.toJSON(a).uuid);void 0!==this.size&&(d.size=this.size);void 0!==this.sizeAttenuation&&(d.sizeAttenuation=this.sizeAttenuation);1!==this.blending&&(d.blending=this.blending);2!==this.shading&&(d.shading=this.shading);0!==this.side&&(d.side=this.side);0!==this.vertexColors&&(d.vertexColors=this.vertexColors);1>this.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;\nd.depthTest=this.depthTest;d.depthWrite=this.depthWrite;0<this.alphaTest&&(d.alphaTest=this.alphaTest);!0===this.premultipliedAlpha&&(d.premultipliedAlpha=this.premultipliedAlpha);!0===this.wireframe&&(d.wireframe=this.wireframe);1<this.wireframeLinewidth&&(d.wireframeLinewidth=this.wireframeLinewidth);\"round\"!==this.wireframeLinecap&&(d.wireframeLinecap=this.wireframeLinecap);\"round\"!==this.wireframeLinejoin&&(d.wireframeLinejoin=this.wireframeLinejoin);d.skinning=this.skinning;d.morphTargets=this.morphTargets;\nc&&(c=b(a.textures),a=b(a.images),0<c.length&&(d.textures=c),0<a.length&&(d.images=a));return d},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.name=a.name;this.fog=a.fog;this.lights=a.lights;this.blending=a.blending;this.side=a.side;this.shading=a.shading;this.vertexColors=a.vertexColors;this.opacity=a.opacity;this.transparent=a.transparent;this.blendSrc=a.blendSrc;this.blendDst=a.blendDst;this.blendEquation=a.blendEquation;this.blendSrcAlpha=a.blendSrcAlpha;this.blendDstAlpha=\na.blendDstAlpha;this.blendEquationAlpha=a.blendEquationAlpha;this.depthFunc=a.depthFunc;this.depthTest=a.depthTest;this.depthWrite=a.depthWrite;this.colorWrite=a.colorWrite;this.precision=a.precision;this.polygonOffset=a.polygonOffset;this.polygonOffsetFactor=a.polygonOffsetFactor;this.polygonOffsetUnits=a.polygonOffsetUnits;this.alphaTest=a.alphaTest;this.premultipliedAlpha=a.premultipliedAlpha;this.overdraw=a.overdraw;this.visible=a.visible;this.clipShadows=a.clipShadows;this.clipIntersection=a.clipIntersection;\na=a.clippingPlanes;var b=null;if(null!==a)for(var c=a.length,b=Array(c),d=0;d!==c;++d)b[d]=a[d].clone();this.clippingPlanes=b;return this},update:function(){this.dispatchEvent({type:\"update\"})},dispose:function(){this.dispatchEvent({type:\"dispose\"})}};Object.assign(W.prototype,oa.prototype);Ia.prototype=Object.create(W.prototype);Ia.prototype.constructor=Ia;Ia.prototype.isShaderMaterial=!0;Ia.prototype.copy=function(a){W.prototype.copy.call(this,a);this.fragmentShader=a.fragmentShader;this.vertexShader=\na.vertexShader;this.uniforms=Ja.clone(a.uniforms);this.defines=a.defines;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.lights=a.lights;this.clipping=a.clipping;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;this.extensions=a.extensions;return this};Ia.prototype.toJSON=function(a){a=W.prototype.toJSON.call(this,a);a.uniforms=this.uniforms;a.vertexShader=this.vertexShader;a.fragmentShader=this.fragmentShader;return a};ab.prototype=\nObject.create(W.prototype);ab.prototype.constructor=ab;ab.prototype.isMeshDepthMaterial=!0;ab.prototype.copy=function(a){W.prototype.copy.call(this,a);this.depthPacking=a.depthPacking;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;return this};ya.prototype=\n{constructor:ya,isBox3:!0,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.length;h<k;h+=3){var m=a[h],l=a[h+1],p=a[h+2];m<b&&(b=m);l<c&&(c=l);p<d&&(d=p);m>e&&(e=m);l>f&&(f=l);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.count;h<k;h++){var m=a.getX(h),\nl=a.getY(h),p=a.getZ(h);m<b&&(b=m);l<c&&(c=l);p<d&&(d=p);m>e&&(e=m);l>f&&(f=l);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g)},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;b<c;b++)this.expandByPoint(a[b]);return this},setFromCenterAndSize:function(){var a=new q;return function(b,c){var d=a.copy(c).multiplyScalar(.5);this.min.copy(b).sub(d);this.max.copy(b).add(d);return this}}(),setFromObject:function(){var a=new q;return function(b){var c=this;b.updateMatrixWorld(!0);this.makeEmpty();\nb.traverse(function(b){var e,f;e=b.geometry;if(void 0!==e)if(e.isGeometry){var g=e.vertices;e=0;for(f=g.length;e<f;e++)a.copy(g[e]),a.applyMatrix4(b.matrixWorld),c.expandByPoint(a)}else if(e.isBufferGeometry&&(g=e.attributes.position,void 0!==g))for(e=0,f=g.count;e<f;e++)a.fromAttribute(g,e).applyMatrix4(b.matrixWorld),c.expandByPoint(a)});return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=\nthis.min.y=this.min.z=Infinity;this.max.x=this.max.y=this.max.z=-Infinity;return this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z},getCenter:function(a){a=a||new q;return this.isEmpty()?a.set(0,0,0):a.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(a){a=a||new q;return this.isEmpty()?a.set(0,0,0):a.subVectors(this.max,this.min)},expandByPoint:function(a){this.min.min(a);this.max.max(a);return this},expandByVector:function(a){this.min.sub(a);\nthis.max.add(a);return this},expandByScalar:function(a){this.min.addScalar(-a);this.max.addScalar(a);return this},containsPoint:function(a){return a.x<this.min.x||a.x>this.max.x||a.y<this.min.y||a.y>this.max.y||a.z<this.min.z||a.z>this.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z},getParameter:function(a,b){return(b||new q).set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/\n(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.x<this.min.x||a.min.x>this.max.x||a.max.y<this.min.y||a.min.y>this.max.y||a.max.z<this.min.z||a.min.z>this.max.z?!1:!0},intersectsSphere:function(){var a;return function(b){void 0===a&&(a=new q);this.clampPoint(b.center,a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){var b,c;0<a.normal.x?(b=a.normal.x*this.min.x,c=a.normal.x*this.max.x):(b=a.normal.x*\nthis.max.x,c=a.normal.x*this.min.x);0<a.normal.y?(b+=a.normal.y*this.min.y,c+=a.normal.y*this.max.y):(b+=a.normal.y*this.max.y,c+=a.normal.y*this.min.y);0<a.normal.z?(b+=a.normal.z*this.min.z,c+=a.normal.z*this.max.z):(b+=a.normal.z*this.max.z,c+=a.normal.z*this.min.z);return b<=a.constant&&c>=a.constant},clampPoint:function(a,b){return(b||new q).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new q;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),\ngetBoundingSphere:function(){var a=new q;return function(b){b=b||new Fa;this.getCenter(b.center);b.radius=.5*this.getSize(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new q,new q,new q,new q,new q,new q,new q,new q];return function(b){if(this.isEmpty())return this;a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);\na[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);\nreturn this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}};Fa.prototype={constructor:Fa,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new ya;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).getCenter(d);for(var e=0,f=0,g=b.length;f<g;f++)e=Math.max(e,d.distanceToSquared(b[f]));this.radius=Math.sqrt(e);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.center.copy(a.center);\nthis.radius=a.radius;return this},empty:function(){return 0>=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(this.center.dot(a.normal)-a.constant)<=this.radius},\nclampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new q;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new ya;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&\na.radius===this.radius}};za.prototype={constructor:za,isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,k){var m=this.elements;m[0]=a;m[1]=d;m[2]=g;m[3]=b;m[4]=e;m[5]=h;m[6]=c;m[7]=f;m[8]=k;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(a){a=a.elements;this.set(a[0],a[3],a[6],a[1],a[4],a[7],a[2],a[5],a[8]);return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9],\na[2],a[6],a[10]);return this},applyToVector3Array:function(){var a;return function(b,c,d){void 0===a&&(a=new q);void 0===c&&(c=0);void 0===d&&(d=b.length);for(var e=0;e<d;e+=3,c+=3)a.fromArray(b,c),a.applyMatrix3(this),a.toArray(b,c);return b}}(),applyToBufferAttribute:function(){var a;return function(b){void 0===a&&(a=new q);for(var c=0,d=b.count;c<d;c++)a.x=b.getX(c),a.y=b.getY(c),a.z=b.getZ(c),a.applyMatrix3(this),b.setXYZ(c,a.x,a.y,a.z);return b}}(),multiplyScalar:function(a){var b=this.elements;\nb[0]*=a;b[3]*=a;b[6]*=a;b[1]*=a;b[4]*=a;b[7]*=a;b[2]*=a;b[5]*=a;b[8]*=a;return this},determinant:function(){var a=this.elements,b=a[0],c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],h=a[6],k=a[7],a=a[8];return b*f*a-b*g*k-c*e*a+c*g*h+d*e*k-d*f*h},getInverse:function(a,b){a&&a.isMatrix4&&console.error(\"THREE.Matrix3.getInverse no longer takes a Matrix4 argument.\");var c=a.elements,d=this.elements,e=c[0],f=c[1],g=c[2],h=c[3],k=c[4],m=c[5],l=c[6],p=c[7],c=c[8],n=c*k-m*p,r=m*l-c*h,w=p*h-k*l,q=e*n+f*r+g*w;if(0===\nq){if(!0===b)throw Error(\"THREE.Matrix3.getInverse(): can't invert matrix, determinant is 0\");console.warn(\"THREE.Matrix3.getInverse(): can't invert matrix, determinant is 0\");return this.identity()}q=1/q;d[0]=n*q;d[1]=(g*p-c*f)*q;d[2]=(m*f-g*k)*q;d[3]=r*q;d[4]=(c*e-g*l)*q;d[5]=(g*h-m*e)*q;d[6]=w*q;d[7]=(f*l-p*e)*q;d[8]=(k*e-f*h)*q;return this},transpose:function(){var a,b=this.elements;a=b[1];b[1]=b[3];b[3]=a;a=b[2];b[2]=b[6];b[6]=a;a=b[5];b[5]=b[7];b[7]=a;return this},getNormalMatrix:function(a){return this.setFromMatrix4(a).getInverse(this).transpose()},\ntransposeIntoArray:function(a){var b=this.elements;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;9>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}};ma.prototype={constructor:ma,set:function(a,b){this.normal.copy(a);\nthis.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new q,b=new q;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);\nthis.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a,b){var c=this.distanceToPoint(a);return(b||\nnew q).copy(this.normal).multiplyScalar(c)},intersectLine:function(){var a=new q;return function(b,c){var d=c||new q,e=b.delta(a),f=this.normal.dot(e);if(0===f){if(0===this.distanceToPoint(b.start))return d.copy(b.start)}else return f=-(b.start.dot(this.normal)+this.constant)/f,0>f||1<f?void 0:d.copy(e).multiplyScalar(f).add(b.start)}}(),intersectsLine:function(a){var b=this.distanceToPoint(a.start);a=this.distanceToPoint(a.end);return 0>b&&0<a||0>a&&0<b},intersectsBox:function(a){return a.intersectsPlane(this)},\nintersectsSphere:function(a){return a.intersectsPlane(this)},coplanarPoint:function(a){return(a||new q).copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var a=new q,b=new za;return function(c,d){var e=this.coplanarPoint(a).applyMatrix4(c),f=d||b.getNormalMatrix(c),f=this.normal.applyMatrix3(f).normalize();this.constant=-e.dot(f);return this}}(),translate:function(a){this.constant-=a.dot(this.normal);return this},equals:function(a){return a.normal.equals(this.normal)&&a.constant===\nthis.constant}};qc.prototype={constructor:qc,set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],k=c[6],m=c[7],l=c[8],p=c[9],n=c[10],r=c[11],q=c[12],u=c[13],F=c[14],c=c[15];\nb[0].setComponents(f-a,m-g,r-l,c-q).normalize();b[1].setComponents(f+a,m+g,r+l,c+q).normalize();b[2].setComponents(f+d,m+h,r+p,c+u).normalize();b[3].setComponents(f-d,m-h,r-p,c-u).normalize();b[4].setComponents(f-e,m-k,r-n,c-F).normalize();b[5].setComponents(f+e,m+k,r+n,c+F).normalize();return this},intersectsObject:function(){var a=new Fa;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere).applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),\nintersectsSprite:function(){var a=new Fa;return function(b){a.center.set(0,0,0);a.radius=.7071067811865476;a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)<a)return!1;return!0},intersectsBox:function(){var a=new q,b=new q;return function(c){for(var d=this.planes,e=0;6>e;e++){var f=d[e];a.x=0<f.normal.x?c.min.x:c.max.x;b.x=0<f.normal.x?c.max.x:c.min.x;a.y=0<f.normal.y?\nc.min.y:c.max.y;b.y=0<f.normal.y?c.max.y:c.min.y;a.z=0<f.normal.z?c.min.z:c.max.z;b.z=0<f.normal.z?c.max.z:c.min.z;var g=f.distanceToPoint(a),f=f.distanceToPoint(b);if(0>g&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}};bb.prototype={constructor:bb,set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);\nthis.direction.copy(a.direction);return this},at:function(a,b){return(b||new q).copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize();return this},recast:function(){var a=new q;return function(b){this.origin.copy(this.at(b,a));return this}}(),closestPointToPoint:function(a,b){var c=b||new q;c.subVectors(a,this.origin);var d=c.dot(this.direction);return 0>d?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)},\ndistanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new q;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new q,b=new q,c=new q;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5);b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);\nvar h=.5*d.distanceTo(e),k=-this.direction.dot(b),m=c.dot(this.direction),l=-c.dot(b),p=c.lengthSq(),n=Math.abs(1-k*k),r;0<n?(d=k*l-m,e=k*m-l,r=h*n,0<=d?e>=-r?e<=r?(h=1/n,d*=h,e*=h,k=d*(d+k*e+2*m)+e*(k*d+e+2*l)+p):(e=h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+p):(e=-h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+p):e<=-r?(d=Math.max(0,-(-k*h+m)),e=0<d?-h:Math.min(Math.max(-h,-l),h),k=-d*d+e*(e+2*l)+p):e<=r?(d=0,e=Math.min(Math.max(-h,-l),h),k=e*(e+2*l)+p):(d=Math.max(0,-(k*h+m)),e=0<d?h:Math.min(Math.max(-h,\n-l),h),k=-d*d+e*(e+2*l)+p)):(e=0<k?-h:h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+p);f&&f.copy(this.direction).multiplyScalar(d).add(this.origin);g&&g.copy(b).multiplyScalar(e).add(a);return k}}(),intersectSphere:function(){var a=new q;return function(b,c){a.subVectors(b.center,this.origin);var d=a.dot(this.direction),e=a.dot(a)-d*d,f=b.radius*b.radius;if(e>f)return null;f=Math.sqrt(f-e);e=d-f;d+=f;return 0>e&&0>d?null:0>e?this.at(d,c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=\na.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){var c=this.distanceToPlane(a);return null===c?null:this.at(c,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c,d,e,f,g;d=1/this.direction.x;f=1/this.direction.y;g=1/this.direction.z;\nvar h=this.origin;0<=d?(c=(a.min.x-h.x)*d,d*=a.max.x-h.x):(c=(a.max.x-h.x)*d,d*=a.min.x-h.x);0<=f?(e=(a.min.y-h.y)*f,f*=a.max.y-h.y):(e=(a.max.y-h.y)*f,f*=a.min.y-h.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e;if(f<d||d!==d)d=f;0<=g?(e=(a.min.z-h.z)*g,g*=a.max.z-h.z):(e=(a.max.z-h.z)*g,g*=a.min.z-h.z);if(c>g||e>d)return null;if(e>c||c!==c)c=e;if(g<d||d!==d)d=g;return 0>d?null:this.at(0<=c?c:d,b)},intersectsBox:function(){var a=new q;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=\nnew q,b=new q,c=new q,d=new q;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0<f){if(h)return null;h=1}else if(0>f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(),applyMatrix4:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);\nthis.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}};cb.RotationOrders=\"XYZ YZX ZXY XZY YXZ ZYX\".split(\" \");cb.DefaultOrder=\"XYZ\";cb.prototype={constructor:cb,isEuler:!0,get x(){return this._x},set x(a){this._x=a;this.onChangeCallback()},get y(){return this._y},set y(a){this._y=a;this.onChangeCallback()},get z(){return this._z},set z(a){this._z=a;this.onChangeCallback()},get order(){return this._order},\nset order(a){this._order=a;this.onChangeCallback()},set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this.onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=Q.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],k=e[5],m=e[9],l=e[2],p=e[6],e=e[10];b=b||\nthis._order;\"XYZ\"===b?(this._y=Math.asin(d(g,-1,1)),.99999>Math.abs(g)?(this._x=Math.atan2(-m,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(p,k),this._z=0)):\"YXZ\"===b?(this._x=Math.asin(-d(m,-1,1)),.99999>Math.abs(m)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-l,a),this._z=0)):\"ZXY\"===b?(this._x=Math.asin(d(p,-1,1)),.99999>Math.abs(p)?(this._y=Math.atan2(-l,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):\"ZYX\"===b?(this._y=Math.asin(-d(l,-1,1)),.99999>\nMath.abs(l)?(this._x=Math.atan2(p,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):\"YZX\"===b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-m,k),this._y=Math.atan2(-l,a)):(this._x=0,this._y=Math.atan2(g,e))):\"XZY\"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(p,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-m,e),this._y=0)):console.warn(\"THREE.Euler: .setFromRotationMatrix() given unsupported order: \"+b);this._order=b;if(!1!==c)this.onChangeCallback();\nreturn this},setFromQuaternion:function(){var a;return function(b,c,d){void 0===a&&(a=new H);a.makeRotationFromQuaternion(b);return this.setFromRotationMatrix(a,c,d)}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new da;return function(b){a.setFromEuler(this);return this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];\nthis._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new q(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}};gd.prototype={constructor:gd,set:function(a){this.mask=1<<a},enable:function(a){this.mask|=1<<a},toggle:function(a){this.mask^=\n1<<a},disable:function(a){this.mask&=~(1<<a)},test:function(a){return 0!==(this.mask&a.mask)}};var qf=0;G.DefaultUp=new q(0,1,0);G.DefaultMatrixAutoUpdate=!0;Object.assign(G.prototype,oa.prototype,{isObject3D:!0,applyMatrix:function(a){this.matrix.multiplyMatrices(a,this.matrix);this.matrix.decompose(this.position,this.quaternion,this.scale)},setRotationFromAxisAngle:function(a,b){this.quaternion.setFromAxisAngle(a,b)},setRotationFromEuler:function(a){this.quaternion.setFromEuler(a,!0)},setRotationFromMatrix:function(a){this.quaternion.setFromRotationMatrix(a)},\nsetRotationFromQuaternion:function(a){this.quaternion.copy(a)},rotateOnAxis:function(){var a=new da;return function(b,c){a.setFromAxisAngle(b,c);this.quaternion.multiply(a);return this}}(),rotateX:function(){var a=new q(1,0,0);return function(b){return this.rotateOnAxis(a,b)}}(),rotateY:function(){var a=new q(0,1,0);return function(b){return this.rotateOnAxis(a,b)}}(),rotateZ:function(){var a=new q(0,0,1);return function(b){return this.rotateOnAxis(a,b)}}(),translateOnAxis:function(){var a=new q;\nreturn function(b,c){a.copy(b).applyQuaternion(this.quaternion);this.position.add(a.multiplyScalar(c));return this}}(),translateX:function(){var a=new q(1,0,0);return function(b){return this.translateOnAxis(a,b)}}(),translateY:function(){var a=new q(0,1,0);return function(b){return this.translateOnAxis(a,b)}}(),translateZ:function(){var a=new q(0,0,1);return function(b){return this.translateOnAxis(a,b)}}(),localToWorld:function(a){return a.applyMatrix4(this.matrixWorld)},worldToLocal:function(){var a=\nnew H;return function(b){return b.applyMatrix4(a.getInverse(this.matrixWorld))}}(),lookAt:function(){var a=new H;return function(b){a.lookAt(b,this.position,this.up);this.quaternion.setFromRotationMatrix(a)}}(),add:function(a){if(1<arguments.length){for(var b=0;b<arguments.length;b++)this.add(arguments[b]);return this}if(a===this)return console.error(\"THREE.Object3D.add: object can't be added as a child of itself.\",a),this;a&&a.isObject3D?(null!==a.parent&&a.parent.remove(a),a.parent=this,a.dispatchEvent({type:\"added\"}),\nthis.children.push(a)):console.error(\"THREE.Object3D.add: object not an instance of THREE.Object3D.\",a);return this},remove:function(a){if(1<arguments.length)for(var b=0;b<arguments.length;b++)this.remove(arguments[b]);b=this.children.indexOf(a);-1!==b&&(a.parent=null,a.dispatchEvent({type:\"removed\"}),this.children.splice(b,1))},getObjectById:function(a){return this.getObjectByProperty(\"id\",a)},getObjectByName:function(a){return this.getObjectByProperty(\"name\",a)},getObjectByProperty:function(a,b){if(this[a]===\nb)return this;for(var c=0,d=this.children.length;c<d;c++){var e=this.children[c].getObjectByProperty(a,b);if(void 0!==e)return e}},getWorldPosition:function(a){a=a||new q;this.updateMatrixWorld(!0);return a.setFromMatrixPosition(this.matrixWorld)},getWorldQuaternion:function(){var a=new q,b=new q;return function(c){c=c||new da;this.updateMatrixWorld(!0);this.matrixWorld.decompose(a,c,b);return c}}(),getWorldRotation:function(){var a=new da;return function(b){b=b||new cb;this.getWorldQuaternion(a);\nreturn b.setFromQuaternion(a,this.rotation.order,!1)}}(),getWorldScale:function(){var a=new q,b=new da;return function(c){c=c||new q;this.updateMatrixWorld(!0);this.matrixWorld.decompose(a,b,c);return c}}(),getWorldDirection:function(){var a=new da;return function(b){b=b||new q;this.getWorldQuaternion(a);return b.set(0,0,1).applyQuaternion(a)}}(),raycast:function(){},traverse:function(a){a(this);for(var b=this.children,c=0,d=b.length;c<d;c++)b[c].traverse(a)},traverseVisible:function(a){if(!1!==this.visible){a(this);\nfor(var b=this.children,c=0,d=b.length;c<d;c++)b[c].traverseVisible(a)}},traverseAncestors:function(a){var b=this.parent;null!==b&&(a(b),b.traverseAncestors(a))},updateMatrix:function(){this.matrix.compose(this.position,this.quaternion,this.scale);this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(a){!0===this.matrixAutoUpdate&&this.updateMatrix();if(!0===this.matrixWorldNeedsUpdate||!0===a)null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,\nthis.matrix),this.matrixWorldNeedsUpdate=!1,a=!0;for(var b=this.children,c=0,d=b.length;c<d;c++)b[c].updateMatrixWorld(a)},toJSON:function(a){function b(a){var b=[],c;for(c in a){var d=a[c];delete d.metadata;b.push(d)}return b}var c=void 0===a||\"\"===a,d={};c&&(a={geometries:{},materials:{},textures:{},images:{}},d.metadata={version:4.4,type:\"Object\",generator:\"Object3D.toJSON\"});var e={};e.uuid=this.uuid;e.type=this.type;\"\"!==this.name&&(e.name=this.name);\"{}\"!==JSON.stringify(this.userData)&&(e.userData=\nthis.userData);!0===this.castShadow&&(e.castShadow=!0);!0===this.receiveShadow&&(e.receiveShadow=!0);!1===this.visible&&(e.visible=!1);e.matrix=this.matrix.toArray();void 0!==this.geometry&&(void 0===a.geometries[this.geometry.uuid]&&(a.geometries[this.geometry.uuid]=this.geometry.toJSON(a)),e.geometry=this.geometry.uuid);void 0!==this.material&&(void 0===a.materials[this.material.uuid]&&(a.materials[this.material.uuid]=this.material.toJSON(a)),e.material=this.material.uuid);if(0<this.children.length){e.children=\n[];for(var f=0;f<this.children.length;f++)e.children.push(this.children[f].toJSON(a).object)}if(c){var c=b(a.geometries),f=b(a.materials),g=b(a.textures);a=b(a.images);0<c.length&&(d.geometries=c);0<f.length&&(d.materials=f);0<g.length&&(d.textures=g);0<a.length&&(d.images=a)}d.object=e;return d},clone:function(a){return(new this.constructor).copy(this,a)},copy:function(a,b){void 0===b&&(b=!0);this.name=a.name;this.up.copy(a.up);this.position.copy(a.position);this.quaternion.copy(a.quaternion);this.scale.copy(a.scale);\nthis.matrix.copy(a.matrix);this.matrixWorld.copy(a.matrixWorld);this.matrixAutoUpdate=a.matrixAutoUpdate;this.matrixWorldNeedsUpdate=a.matrixWorldNeedsUpdate;this.layers.mask=a.layers.mask;this.visible=a.visible;this.castShadow=a.castShadow;this.receiveShadow=a.receiveShadow;this.frustumCulled=a.frustumCulled;this.renderOrder=a.renderOrder;this.userData=JSON.parse(JSON.stringify(a.userData));if(!0===b)for(var c=0;c<a.children.length;c++)this.add(a.children[c].clone());return this}});gb.prototype=\n{constructor:gb,set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},getCenter:function(a){return(a||new q).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){return(a||new q).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},\nat:function(a,b){var c=b||new q;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new q,b=new q;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=Q.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new q;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);\nreturn this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}};Aa.normal=function(){var a=new q;return function(b,c,d,e){e=e||new q;e.subVectors(d,c);a.subVectors(b,c);e.cross(a);b=e.lengthSq();return 0<b?e.multiplyScalar(1/Math.sqrt(b)):e.set(0,0,0)}}();Aa.barycoordFromPoint=function(){var a=new q,b=new q,c=new q;return function(d,e,f,g,h){a.subVectors(g,e);b.subVectors(f,e);c.subVectors(d,e);d=a.dot(a);e=a.dot(b);f=a.dot(c);var k=b.dot(b);g=b.dot(c);var m=d*k-e*e;h=\nh||new q;if(0===m)return h.set(-2,-1,-1);m=1/m;k=(k*f-e*g)*m;d=(d*g-e*f)*m;return h.set(1-k-d,d,k)}}();Aa.containsPoint=function(){var a=new q;return function(b,c,d,e){b=Aa.barycoordFromPoint(b,c,d,e,a);return 0<=b.x&&0<=b.y&&1>=b.x+b.y}}();Aa.prototype={constructor:Aa,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},\ncopy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new q,b=new q;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),midpoint:function(a){return(a||new q).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return Aa.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new ma).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return Aa.barycoordFromPoint(a,\nthis.a,this.b,this.c,b)},containsPoint:function(a){return Aa.containsPoint(a,this.a,this.b,this.c)},closestPointToPoint:function(){var a,b,c,d;return function(e,f){void 0===a&&(a=new ma,b=[new gb,new gb,new gb],c=new q,d=new q);var g=f||new q,h=Infinity;a.setFromCoplanarPoints(this.a,this.b,this.c);a.projectPoint(e,c);if(!0===this.containsPoint(c))g.copy(c);else{b[0].set(this.a,this.b);b[1].set(this.b,this.c);b[2].set(this.c,this.a);for(var k=0;k<b.length;k++){b[k].closestPointToPoint(c,!0,d);var m=\nc.distanceToSquared(d);m<h&&(h=m,g.copy(d))}}return g}}(),equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}};ha.prototype={constructor:ha,clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a=a.a;this.b=a.b;this.c=a.c;this.normal.copy(a.normal);this.color.copy(a.color);this.materialIndex=a.materialIndex;for(var b=0,c=a.vertexNormals.length;b<c;b++)this.vertexNormals[b]=a.vertexNormals[b].clone();b=0;for(c=a.vertexColors.length;b<c;b++)this.vertexColors[b]=\na.vertexColors[b].clone();return this}};Ka.prototype=Object.create(W.prototype);Ka.prototype.constructor=Ka;Ka.prototype.isMeshBasicMaterial=!0;Ka.prototype.copy=function(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;\nthis.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;return this};y.prototype={constructor:y,isBufferAttribute:!0,set needsUpdate(a){!0===a&&this.version++},setArray:function(a){if(Array.isArray(a))throw new TypeError(\"THREE.BufferAttribute: array should be a Typed Array.\");this.count=void 0!==a?a.length/\nthis.itemSize:0;this.array=a},setDynamic:function(a){this.dynamic=a;return this},copy:function(a){this.array=new a.array.constructor(a.array);this.itemSize=a.itemSize;this.count=a.count;this.normalized=a.normalized;this.dynamic=a.dynamic;return this},copyAt:function(a,b,c){a*=this.itemSize;c*=b.itemSize;for(var d=0,e=this.itemSize;d<e;d++)this.array[a+d]=b.array[c+d];return this},copyArray:function(a){this.array.set(a);return this},copyColorsArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<\ne;d++){var f=a[d];void 0===f&&(console.warn(\"THREE.BufferAttribute.copyColorsArray(): color is undefined\",d),f=new N);b[c++]=f.r;b[c++]=f.g;b[c++]=f.b}return this},copyIndicesArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<e;d++){var f=a[d];b[c++]=f.a;b[c++]=f.b;b[c++]=f.c}return this},copyVector2sArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<e;d++){var f=a[d];void 0===f&&(console.warn(\"THREE.BufferAttribute.copyVector2sArray(): vector is undefined\",d),f=new C);b[c++]=f.x;\nb[c++]=f.y}return this},copyVector3sArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<e;d++){var f=a[d];void 0===f&&(console.warn(\"THREE.BufferAttribute.copyVector3sArray(): vector is undefined\",d),f=new q);b[c++]=f.x;b[c++]=f.y;b[c++]=f.z}return this},copyVector4sArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<e;d++){var f=a[d];void 0===f&&(console.warn(\"THREE.BufferAttribute.copyVector4sArray(): vector is undefined\",d),f=new ga);b[c++]=f.x;b[c++]=f.y;b[c++]=f.z;b[c++]=f.w}return this},\nset:function(a,b){void 0===b&&(b=0);this.array.set(a,b);return this},getX:function(a){return this.array[a*this.itemSize]},setX:function(a,b){this.array[a*this.itemSize]=b;return this},getY:function(a){return this.array[a*this.itemSize+1]},setY:function(a,b){this.array[a*this.itemSize+1]=b;return this},getZ:function(a){return this.array[a*this.itemSize+2]},setZ:function(a,b){this.array[a*this.itemSize+2]=b;return this},getW:function(a){return this.array[a*this.itemSize+3]},setW:function(a,b){this.array[a*\nthis.itemSize+3]=b;return this},setXY:function(a,b,c){a*=this.itemSize;this.array[a+0]=b;this.array[a+1]=c;return this},setXYZ:function(a,b,c,d){a*=this.itemSize;this.array[a+0]=b;this.array[a+1]=c;this.array[a+2]=d;return this},setXYZW:function(a,b,c,d,e){a*=this.itemSize;this.array[a+0]=b;this.array[a+1]=c;this.array[a+2]=d;this.array[a+3]=e;return this},onUpload:function(a){this.onUploadCallback=a;return this},clone:function(){return(new this.constructor).copy(this)}};rc.prototype=Object.create(y.prototype);\nrc.prototype.constructor=rc;sc.prototype=Object.create(y.prototype);sc.prototype.constructor=sc;tc.prototype=Object.create(y.prototype);tc.prototype.constructor=tc;uc.prototype=Object.create(y.prototype);uc.prototype.constructor=uc;Ra.prototype=Object.create(y.prototype);Ra.prototype.constructor=Ra;vc.prototype=Object.create(y.prototype);vc.prototype.constructor=vc;Ua.prototype=Object.create(y.prototype);Ua.prototype.constructor=Ua;X.prototype=Object.create(y.prototype);X.prototype.constructor=X;\nwc.prototype=Object.create(y.prototype);wc.prototype.constructor=wc;Object.assign(ze.prototype,{computeGroups:function(a){var b,c=[],d=void 0;a=a.faces;for(var e=0;e<a.length;e++){var f=a[e];f.materialIndex!==d&&(d=f.materialIndex,void 0!==b&&(b.count=3*e-b.start,c.push(b)),b={start:3*e,materialIndex:d})}void 0!==b&&(b.count=3*e-b.start,c.push(b));this.groups=c},fromGeometry:function(a){var b=a.faces,c=a.vertices,d=a.faceVertexUvs,e=d[0]&&0<d[0].length,f=d[1]&&0<d[1].length,g=a.morphTargets,h=g.length,\nk;if(0<h){k=[];for(var m=0;m<h;m++)k[m]=[];this.morphTargets.position=k}var l=a.morphNormals,p=l.length,n;if(0<p){n=[];for(m=0;m<p;m++)n[m]=[];this.morphTargets.normal=n}for(var r=a.skinIndices,q=a.skinWeights,u=r.length===c.length,F=q.length===c.length,m=0;m<b.length;m++){var t=b[m];this.vertices.push(c[t.a],c[t.b],c[t.c]);var v=t.vertexNormals;3===v.length?this.normals.push(v[0],v[1],v[2]):(v=t.normal,this.normals.push(v,v,v));v=t.vertexColors;3===v.length?this.colors.push(v[0],v[1],v[2]):(v=t.color,\nthis.colors.push(v,v,v));!0===e&&(v=d[0][m],void 0!==v?this.uvs.push(v[0],v[1],v[2]):(console.warn(\"THREE.DirectGeometry.fromGeometry(): Undefined vertexUv \",m),this.uvs.push(new C,new C,new C)));!0===f&&(v=d[1][m],void 0!==v?this.uvs2.push(v[0],v[1],v[2]):(console.warn(\"THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 \",m),this.uvs2.push(new C,new C,new C)));for(v=0;v<h;v++){var M=g[v].vertices;k[v].push(M[t.a],M[t.b],M[t.c])}for(v=0;v<p;v++)M=l[v].vertexNormals[m],n[v].push(M.a,M.b,M.c);\nu&&this.skinIndices.push(r[t.a],r[t.b],r[t.c]);F&&this.skinWeights.push(q[t.a],q[t.b],q[t.c])}this.computeGroups(a);this.verticesNeedUpdate=a.verticesNeedUpdate;this.normalsNeedUpdate=a.normalsNeedUpdate;this.colorsNeedUpdate=a.colorsNeedUpdate;this.uvsNeedUpdate=a.uvsNeedUpdate;this.groupsNeedUpdate=a.groupsNeedUpdate;return this}});Object.assign(S.prototype,oa.prototype,{isGeometry:!0,applyMatrix:function(a){for(var b=(new za).getNormalMatrix(a),c=0,d=this.vertices.length;c<d;c++)this.vertices[c].applyMatrix4(a);\nc=0;for(d=this.faces.length;c<d;c++){a=this.faces[c];a.normal.applyMatrix3(b).normalize();for(var e=0,f=a.vertexNormals.length;e<f;e++)a.vertexNormals[e].applyMatrix3(b).normalize()}null!==this.boundingBox&&this.computeBoundingBox();null!==this.boundingSphere&&this.computeBoundingSphere();this.normalsNeedUpdate=this.verticesNeedUpdate=!0;return this},rotateX:function(){var a;return function(b){void 0===a&&(a=new H);a.makeRotationX(b);this.applyMatrix(a);return this}}(),rotateY:function(){var a;return function(b){void 0===\na&&(a=new H);a.makeRotationY(b);this.applyMatrix(a);return this}}(),rotateZ:function(){var a;return function(b){void 0===a&&(a=new H);a.makeRotationZ(b);this.applyMatrix(a);return this}}(),translate:function(){var a;return function(b,c,d){void 0===a&&(a=new H);a.makeTranslation(b,c,d);this.applyMatrix(a);return this}}(),scale:function(){var a;return function(b,c,d){void 0===a&&(a=new H);a.makeScale(b,c,d);this.applyMatrix(a);return this}}(),lookAt:function(){var a;return function(b){void 0===a&&(a=\nnew G);a.lookAt(b);a.updateMatrix();this.applyMatrix(a.matrix)}}(),fromBufferGeometry:function(a){function b(a,b,d,e){var f=void 0!==g?[l[a].clone(),l[b].clone(),l[d].clone()]:[],r=void 0!==h?[c.colors[a].clone(),c.colors[b].clone(),c.colors[d].clone()]:[];e=new ha(a,b,d,f,r,e);c.faces.push(e);void 0!==k&&c.faceVertexUvs[0].push([p[a].clone(),p[b].clone(),p[d].clone()]);void 0!==m&&c.faceVertexUvs[1].push([n[a].clone(),n[b].clone(),n[d].clone()])}var c=this,d=null!==a.index?a.index.array:void 0,e=\na.attributes,f=e.position.array,g=void 0!==e.normal?e.normal.array:void 0,h=void 0!==e.color?e.color.array:void 0,k=void 0!==e.uv?e.uv.array:void 0,m=void 0!==e.uv2?e.uv2.array:void 0;void 0!==m&&(this.faceVertexUvs[1]=[]);for(var l=[],p=[],n=[],r=e=0;e<f.length;e+=3,r+=2)c.vertices.push(new q(f[e],f[e+1],f[e+2])),void 0!==g&&l.push(new q(g[e],g[e+1],g[e+2])),void 0!==h&&c.colors.push(new N(h[e],h[e+1],h[e+2])),void 0!==k&&p.push(new C(k[r],k[r+1])),void 0!==m&&n.push(new C(m[r],m[r+1]));if(void 0!==\nd)if(f=a.groups,0<f.length)for(e=0;e<f.length;e++)for(var w=f[e],u=w.start,F=w.count,r=u,u=u+F;r<u;r+=3)b(d[r],d[r+1],d[r+2],w.materialIndex);else for(e=0;e<d.length;e+=3)b(d[e],d[e+1],d[e+2]);else for(e=0;e<f.length/3;e+=3)b(e,e+1,e+2);this.computeFaceNormals();null!==a.boundingBox&&(this.boundingBox=a.boundingBox.clone());null!==a.boundingSphere&&(this.boundingSphere=a.boundingSphere.clone());return this},center:function(){this.computeBoundingBox();var a=this.boundingBox.getCenter().negate();this.translate(a.x,\na.y,a.z);return a},normalize:function(){this.computeBoundingSphere();var a=this.boundingSphere.center,b=this.boundingSphere.radius,b=0===b?1:1/b,c=new H;c.set(b,0,0,-b*a.x,0,b,0,-b*a.y,0,0,b,-b*a.z,0,0,0,1);this.applyMatrix(c);return this},computeFaceNormals:function(){for(var a=new q,b=new q,c=0,d=this.faces.length;c<d;c++){var e=this.faces[c],f=this.vertices[e.a],g=this.vertices[e.b];a.subVectors(this.vertices[e.c],g);b.subVectors(f,g);a.cross(b);a.normalize();e.normal.copy(a)}},computeVertexNormals:function(a){void 0===\na&&(a=!0);var b,c,d;d=Array(this.vertices.length);b=0;for(c=this.vertices.length;b<c;b++)d[b]=new q;if(a){var e,f,g,h=new q,k=new q;a=0;for(b=this.faces.length;a<b;a++)c=this.faces[a],e=this.vertices[c.a],f=this.vertices[c.b],g=this.vertices[c.c],h.subVectors(g,f),k.subVectors(e,f),h.cross(k),d[c.a].add(h),d[c.b].add(h),d[c.c].add(h)}else for(this.computeFaceNormals(),a=0,b=this.faces.length;a<b;a++)c=this.faces[a],d[c.a].add(c.normal),d[c.b].add(c.normal),d[c.c].add(c.normal);b=0;for(c=this.vertices.length;b<\nc;b++)d[b].normalize();a=0;for(b=this.faces.length;a<b;a++)c=this.faces[a],e=c.vertexNormals,3===e.length?(e[0].copy(d[c.a]),e[1].copy(d[c.b]),e[2].copy(d[c.c])):(e[0]=d[c.a].clone(),e[1]=d[c.b].clone(),e[2]=d[c.c].clone());0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var a,b,c;this.computeFaceNormals();a=0;for(b=this.faces.length;a<b;a++){c=this.faces[a];var d=c.vertexNormals;3===d.length?(d[0].copy(c.normal),d[1].copy(c.normal),d[2].copy(c.normal)):(d[0]=\nc.normal.clone(),d[1]=c.normal.clone(),d[2]=c.normal.clone())}0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){var a,b,c,d,e;c=0;for(d=this.faces.length;c<d;c++)for(e=this.faces[c],e.__originalFaceNormal?e.__originalFaceNormal.copy(e.normal):e.__originalFaceNormal=e.normal.clone(),e.__originalVertexNormals||(e.__originalVertexNormals=[]),a=0,b=e.vertexNormals.length;a<b;a++)e.__originalVertexNormals[a]?e.__originalVertexNormals[a].copy(e.vertexNormals[a]):e.__originalVertexNormals[a]=\ne.vertexNormals[a].clone();var f=new S;f.faces=this.faces;a=0;for(b=this.morphTargets.length;a<b;a++){if(!this.morphNormals[a]){this.morphNormals[a]={};this.morphNormals[a].faceNormals=[];this.morphNormals[a].vertexNormals=[];e=this.morphNormals[a].faceNormals;var g=this.morphNormals[a].vertexNormals,h,k;c=0;for(d=this.faces.length;c<d;c++)h=new q,k={a:new q,b:new q,c:new q},e.push(h),g.push(k)}g=this.morphNormals[a];f.vertices=this.morphTargets[a].vertices;f.computeFaceNormals();f.computeVertexNormals();\nc=0;for(d=this.faces.length;c<d;c++)e=this.faces[c],h=g.faceNormals[c],k=g.vertexNormals[c],h.copy(e.normal),k.a.copy(e.vertexNormals[0]),k.b.copy(e.vertexNormals[1]),k.c.copy(e.vertexNormals[2])}c=0;for(d=this.faces.length;c<d;c++)e=this.faces[c],e.normal=e.__originalFaceNormal,e.vertexNormals=e.__originalVertexNormals},computeLineDistances:function(){for(var a=0,b=this.vertices,c=0,d=b.length;c<d;c++)0<c&&(a+=b[c].distanceTo(b[c-1])),this.lineDistances[c]=a},computeBoundingBox:function(){null===\nthis.boundingBox&&(this.boundingBox=new ya);this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new Fa);this.boundingSphere.setFromPoints(this.vertices)},merge:function(a,b,c){if(!1===(a&&a.isGeometry))console.error(\"THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.\",a);else{var d,e=this.vertices.length,f=this.vertices,g=a.vertices,h=this.faces,k=a.faces,m=this.faceVertexUvs[0],l=a.faceVertexUvs[0],p=this.colors,\nn=a.colors;void 0===c&&(c=0);void 0!==b&&(d=(new za).getNormalMatrix(b));a=0;for(var r=g.length;a<r;a++){var q=g[a].clone();void 0!==b&&q.applyMatrix4(b);f.push(q)}a=0;for(r=n.length;a<r;a++)p.push(n[a].clone());a=0;for(r=k.length;a<r;a++){var g=k[a],u=g.vertexNormals,n=g.vertexColors,p=new ha(g.a+e,g.b+e,g.c+e);p.normal.copy(g.normal);void 0!==d&&p.normal.applyMatrix3(d).normalize();b=0;for(f=u.length;b<f;b++)q=u[b].clone(),void 0!==d&&q.applyMatrix3(d).normalize(),p.vertexNormals.push(q);p.color.copy(g.color);\nb=0;for(f=n.length;b<f;b++)q=n[b],p.vertexColors.push(q.clone());p.materialIndex=g.materialIndex+c;h.push(p)}a=0;for(r=l.length;a<r;a++)if(c=l[a],d=[],void 0!==c){b=0;for(f=c.length;b<f;b++)d.push(c[b].clone());m.push(d)}}},mergeMesh:function(a){!1===(a&&a.isMesh)?console.error(\"THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.\",a):(a.matrixAutoUpdate&&a.updateMatrix(),this.merge(a.geometry,a.matrix))},mergeVertices:function(){var a={},b=[],c=[],d,e=Math.pow(10,4),f,g;f=0;for(g=this.vertices.length;f<\ng;f++)d=this.vertices[f],d=Math.round(d.x*e)+\"_\"+Math.round(d.y*e)+\"_\"+Math.round(d.z*e),void 0===a[d]?(a[d]=f,b.push(this.vertices[f]),c[f]=b.length-1):c[f]=c[a[d]];a=[];f=0;for(g=this.faces.length;f<g;f++)for(e=this.faces[f],e.a=c[e.a],e.b=c[e.b],e.c=c[e.c],e=[e.a,e.b,e.c],d=0;3>d;d++)if(e[d]===e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e,1),c=0,g=this.faceVertexUvs.length;c<g;c++)this.faceVertexUvs[c].splice(e,1);f=this.vertices.length-b.length;this.vertices=\nb;return f},sortFacesByMaterialIndex:function(){for(var a=this.faces,b=a.length,c=0;c<b;c++)a[c]._id=c;a.sort(function(a,b){return a.materialIndex-b.materialIndex});var d=this.faceVertexUvs[0],e=this.faceVertexUvs[1],f,g;d&&d.length===b&&(f=[]);e&&e.length===b&&(g=[]);for(c=0;c<b;c++){var h=a[c]._id;f&&f.push(d[h]);g&&g.push(e[h])}f&&(this.faceVertexUvs[0]=f);g&&(this.faceVertexUvs[1]=g)},toJSON:function(){function a(a,b,c){return c?a|1<<b:a&~(1<<b)}function b(a){var b=a.x.toString()+a.y.toString()+\na.z.toString();if(void 0!==m[b])return m[b];m[b]=k.length/3;k.push(a.x,a.y,a.z);return m[b]}function c(a){var b=a.r.toString()+a.g.toString()+a.b.toString();if(void 0!==p[b])return p[b];p[b]=l.length;l.push(a.getHex());return p[b]}function d(a){var b=a.x.toString()+a.y.toString();if(void 0!==r[b])return r[b];r[b]=n.length/2;n.push(a.x,a.y);return r[b]}var e={metadata:{version:4.4,type:\"Geometry\",generator:\"Geometry.toJSON\"}};e.uuid=this.uuid;e.type=this.type;\"\"!==this.name&&(e.name=this.name);if(void 0!==\nthis.parameters){var f=this.parameters,g;for(g in f)void 0!==f[g]&&(e[g]=f[g]);return e}f=[];for(g=0;g<this.vertices.length;g++){var h=this.vertices[g];f.push(h.x,h.y,h.z)}var h=[],k=[],m={},l=[],p={},n=[],r={};for(g=0;g<this.faces.length;g++){var q=this.faces[g],u=void 0!==this.faceVertexUvs[0][g],F=0<q.normal.length(),t=0<q.vertexNormals.length,v=1!==q.color.r||1!==q.color.g||1!==q.color.b,M=0<q.vertexColors.length,z=0,z=a(z,0,0),z=a(z,1,!0),z=a(z,2,!1),z=a(z,3,u),z=a(z,4,F),z=a(z,5,t),z=a(z,6,\nv),z=a(z,7,M);h.push(z);h.push(q.a,q.b,q.c);h.push(q.materialIndex);u&&(u=this.faceVertexUvs[0][g],h.push(d(u[0]),d(u[1]),d(u[2])));F&&h.push(b(q.normal));t&&(F=q.vertexNormals,h.push(b(F[0]),b(F[1]),b(F[2])));v&&h.push(c(q.color));M&&(q=q.vertexColors,h.push(c(q[0]),c(q[1]),c(q[2])))}e.data={};e.data.vertices=f;e.data.normals=k;0<l.length&&(e.data.colors=l);0<n.length&&(e.data.uvs=[n]);e.data.faces=h;return e},clone:function(){return(new S).copy(this)},copy:function(a){this.vertices=[];this.faces=\n[];this.faceVertexUvs=[[]];this.colors=[];for(var b=a.vertices,c=0,d=b.length;c<d;c++)this.vertices.push(b[c].clone());b=a.colors;c=0;for(d=b.length;c<d;c++)this.colors.push(b[c].clone());b=a.faces;c=0;for(d=b.length;c<d;c++)this.faces.push(b[c].clone());c=0;for(d=a.faceVertexUvs.length;c<d;c++){b=a.faceVertexUvs[c];void 0===this.faceVertexUvs[c]&&(this.faceVertexUvs[c]=[]);for(var e=0,f=b.length;e<f;e++){for(var g=b[e],h=[],k=0,m=g.length;k<m;k++)h.push(g[k].clone());this.faceVertexUvs[c].push(h)}}return this},\ndispose:function(){this.dispatchEvent({type:\"dispose\"})}});var Kd=0;Object.assign(D.prototype,oa.prototype,{isBufferGeometry:!0,getIndex:function(){return this.index},setIndex:function(a){this.index=a},addAttribute:function(a,b,c){if(!1===(b&&b.isBufferAttribute)&&!1===(b&&b.isInterleavedBufferAttribute))console.warn(\"THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).\"),this.addAttribute(a,new y(b,c));else if(\"index\"===a)console.warn(\"THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.\"),\nthis.setIndex(b);else return this.attributes[a]=b,this},getAttribute:function(a){return this.attributes[a]},removeAttribute:function(a){delete this.attributes[a];return this},addGroup:function(a,b,c){this.groups.push({start:a,count:b,materialIndex:void 0!==c?c:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(a,b){this.drawRange.start=a;this.drawRange.count=b},applyMatrix:function(a){var b=this.attributes.position;void 0!==b&&(a.applyToVector3Array(b.array),b.needsUpdate=!0);b=this.attributes.normal;\nvoid 0!==b&&((new za).getNormalMatrix(a).applyToVector3Array(b.array),b.needsUpdate=!0);null!==this.boundingBox&&this.computeBoundingBox();null!==this.boundingSphere&&this.computeBoundingSphere();return this},rotateX:function(){var a;return function(b){void 0===a&&(a=new H);a.makeRotationX(b);this.applyMatrix(a);return this}}(),rotateY:function(){var a;return function(b){void 0===a&&(a=new H);a.makeRotationY(b);this.applyMatrix(a);return this}}(),rotateZ:function(){var a;return function(b){void 0===\na&&(a=new H);a.makeRotationZ(b);this.applyMatrix(a);return this}}(),translate:function(){var a;return function(b,c,d){void 0===a&&(a=new H);a.makeTranslation(b,c,d);this.applyMatrix(a);return this}}(),scale:function(){var a;return function(b,c,d){void 0===a&&(a=new H);a.makeScale(b,c,d);this.applyMatrix(a);return this}}(),lookAt:function(){var a;return function(b){void 0===a&&(a=new G);a.lookAt(b);a.updateMatrix();this.applyMatrix(a.matrix)}}(),center:function(){this.computeBoundingBox();var a=this.boundingBox.getCenter().negate();\nthis.translate(a.x,a.y,a.z);return a},setFromObject:function(a){var b=a.geometry;if(a.isPoints||a.isLine){a=new X(3*b.vertices.length,3);var c=new X(3*b.colors.length,3);this.addAttribute(\"position\",a.copyVector3sArray(b.vertices));this.addAttribute(\"color\",c.copyColorsArray(b.colors));b.lineDistances&&b.lineDistances.length===b.vertices.length&&(a=new X(b.lineDistances.length,1),this.addAttribute(\"lineDistance\",a.copyArray(b.lineDistances)));null!==b.boundingSphere&&(this.boundingSphere=b.boundingSphere.clone());\nnull!==b.boundingBox&&(this.boundingBox=b.boundingBox.clone())}else a.isMesh&&b&&b.isGeometry&&this.fromGeometry(b);return this},updateFromObject:function(a){var b=a.geometry;if(a.isMesh){var c=b.__directGeometry;!0===b.elementsNeedUpdate&&(c=void 0,b.elementsNeedUpdate=!1);if(void 0===c)return this.fromGeometry(b);c.verticesNeedUpdate=b.verticesNeedUpdate;c.normalsNeedUpdate=b.normalsNeedUpdate;c.colorsNeedUpdate=b.colorsNeedUpdate;c.uvsNeedUpdate=b.uvsNeedUpdate;c.groupsNeedUpdate=b.groupsNeedUpdate;\nb.verticesNeedUpdate=!1;b.normalsNeedUpdate=!1;b.colorsNeedUpdate=!1;b.uvsNeedUpdate=!1;b.groupsNeedUpdate=!1;b=c}!0===b.verticesNeedUpdate&&(c=this.attributes.position,void 0!==c&&(c.copyVector3sArray(b.vertices),c.needsUpdate=!0),b.verticesNeedUpdate=!1);!0===b.normalsNeedUpdate&&(c=this.attributes.normal,void 0!==c&&(c.copyVector3sArray(b.normals),c.needsUpdate=!0),b.normalsNeedUpdate=!1);!0===b.colorsNeedUpdate&&(c=this.attributes.color,void 0!==c&&(c.copyColorsArray(b.colors),c.needsUpdate=!0),\nb.colorsNeedUpdate=!1);b.uvsNeedUpdate&&(c=this.attributes.uv,void 0!==c&&(c.copyVector2sArray(b.uvs),c.needsUpdate=!0),b.uvsNeedUpdate=!1);b.lineDistancesNeedUpdate&&(c=this.attributes.lineDistance,void 0!==c&&(c.copyArray(b.lineDistances),c.needsUpdate=!0),b.lineDistancesNeedUpdate=!1);b.groupsNeedUpdate&&(b.computeGroups(a.geometry),this.groups=b.groups,b.groupsNeedUpdate=!1);return this},fromGeometry:function(a){a.__directGeometry=(new ze).fromGeometry(a);return this.fromDirectGeometry(a.__directGeometry)},\nfromDirectGeometry:function(a){var b=new Float32Array(3*a.vertices.length);this.addAttribute(\"position\",(new y(b,3)).copyVector3sArray(a.vertices));0<a.normals.length&&(b=new Float32Array(3*a.normals.length),this.addAttribute(\"normal\",(new y(b,3)).copyVector3sArray(a.normals)));0<a.colors.length&&(b=new Float32Array(3*a.colors.length),this.addAttribute(\"color\",(new y(b,3)).copyColorsArray(a.colors)));0<a.uvs.length&&(b=new Float32Array(2*a.uvs.length),this.addAttribute(\"uv\",(new y(b,2)).copyVector2sArray(a.uvs)));\n0<a.uvs2.length&&(b=new Float32Array(2*a.uvs2.length),this.addAttribute(\"uv2\",(new y(b,2)).copyVector2sArray(a.uvs2)));0<a.indices.length&&(b=new (65535<a.vertices.length?Uint32Array:Uint16Array)(3*a.indices.length),this.setIndex((new y(b,1)).copyIndicesArray(a.indices)));this.groups=a.groups;for(var c in a.morphTargets){for(var b=[],d=a.morphTargets[c],e=0,f=d.length;e<f;e++){var g=d[e],h=new X(3*g.length,3);b.push(h.copyVector3sArray(g))}this.morphAttributes[c]=b}0<a.skinIndices.length&&(c=new X(4*\na.skinIndices.length,4),this.addAttribute(\"skinIndex\",c.copyVector4sArray(a.skinIndices)));0<a.skinWeights.length&&(c=new X(4*a.skinWeights.length,4),this.addAttribute(\"skinWeight\",c.copyVector4sArray(a.skinWeights)));null!==a.boundingSphere&&(this.boundingSphere=a.boundingSphere.clone());null!==a.boundingBox&&(this.boundingBox=a.boundingBox.clone());return this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new ya);var a=this.attributes.position;void 0!==a?this.boundingBox.setFromBufferAttribute(a):\nthis.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.',this)},computeBoundingSphere:function(){var a=new ya,b=new q;return function(){null===this.boundingSphere&&(this.boundingSphere=new Fa);var c=this.attributes.position;if(c){var d=this.boundingSphere.center;a.setFromBufferAttribute(c);\na.getCenter(d);for(var e=0,f=0,g=c.count;f<g;f++)b.x=c.getX(f),b.y=c.getY(f),b.z=c.getZ(f),e=Math.max(e,d.distanceToSquared(b));this.boundingSphere.radius=Math.sqrt(e);isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.',this)}}}(),computeFaceNormals:function(){},computeVertexNormals:function(){var a=this.index,b=this.attributes,c=this.groups;if(b.position){var d=b.position.array;\nif(void 0===b.normal)this.addAttribute(\"normal\",new y(new Float32Array(d.length),3));else for(var e=b.normal.array,f=0,g=e.length;f<g;f++)e[f]=0;var e=b.normal.array,h,k,m,l=new q,p=new q,n=new q,r=new q,w=new q;if(a){a=a.array;0===c.length&&this.addGroup(0,a.length);for(var u=0,F=c.length;u<F;++u)for(f=c[u],g=f.start,h=f.count,f=g,g+=h;f<g;f+=3)h=3*a[f+0],k=3*a[f+1],m=3*a[f+2],l.fromArray(d,h),p.fromArray(d,k),n.fromArray(d,m),r.subVectors(n,p),w.subVectors(l,p),r.cross(w),e[h]+=r.x,e[h+1]+=r.y,\ne[h+2]+=r.z,e[k]+=r.x,e[k+1]+=r.y,e[k+2]+=r.z,e[m]+=r.x,e[m+1]+=r.y,e[m+2]+=r.z}else for(f=0,g=d.length;f<g;f+=9)l.fromArray(d,f),p.fromArray(d,f+3),n.fromArray(d,f+6),r.subVectors(n,p),w.subVectors(l,p),r.cross(w),e[f]=r.x,e[f+1]=r.y,e[f+2]=r.z,e[f+3]=r.x,e[f+4]=r.y,e[f+5]=r.z,e[f+6]=r.x,e[f+7]=r.y,e[f+8]=r.z;this.normalizeNormals();b.normal.needsUpdate=!0}},merge:function(a,b){if(!1===(a&&a.isBufferGeometry))console.error(\"THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.\",\na);else{void 0===b&&(b=0);var c=this.attributes,d;for(d in c)if(void 0!==a.attributes[d])for(var e=c[d].array,f=a.attributes[d],g=f.array,h=0,f=f.itemSize*b;h<g.length;h++,f++)e[f]=g[h];return this}},normalizeNormals:function(){for(var a=this.attributes.normal.array,b,c,d,e=0,f=a.length;e<f;e+=3)b=a[e],c=a[e+1],d=a[e+2],b=1/Math.sqrt(b*b+c*c+d*d),a[e]*=b,a[e+1]*=b,a[e+2]*=b},toNonIndexed:function(){if(null===this.index)return console.warn(\"THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.\"),\nthis;var a=new D,b=this.index.array,c=this.attributes,d;for(d in c){for(var e=c[d],f=e.array,e=e.itemSize,g=new f.constructor(b.length*e),h,k=0,m=0,l=b.length;m<l;m++){h=b[m]*e;for(var p=0;p<e;p++)g[k++]=f[h++]}a.addAttribute(d,new y(g,e))}return a},toJSON:function(){var a={metadata:{version:4.4,type:\"BufferGeometry\",generator:\"BufferGeometry.toJSON\"}};a.uuid=this.uuid;a.type=this.type;\"\"!==this.name&&(a.name=this.name);if(void 0!==this.parameters){var b=this.parameters,c;for(c in b)void 0!==b[c]&&\n(a[c]=b[c]);return a}a.data={attributes:{}};var d=this.index;null!==d&&(b=Array.prototype.slice.call(d.array),a.data.index={type:d.array.constructor.name,array:b});d=this.attributes;for(c in d){var e=d[c],b=Array.prototype.slice.call(e.array);a.data.attributes[c]={itemSize:e.itemSize,type:e.array.constructor.name,array:b,normalized:e.normalized}}c=this.groups;0<c.length&&(a.data.groups=JSON.parse(JSON.stringify(c)));c=this.boundingSphere;null!==c&&(a.data.boundingSphere={center:c.center.toArray(),\nradius:c.radius});return a},clone:function(){return(new D).copy(this)},copy:function(a){var b=a.index;null!==b&&this.setIndex(b.clone());var b=a.attributes,c;for(c in b)this.addAttribute(c,b[c].clone());a=a.groups;c=0;for(b=a.length;c<b;c++){var d=a[c];this.addGroup(d.start,d.count,d.materialIndex)}return this},dispose:function(){this.dispatchEvent({type:\"dispose\"})}});D.MaxIndex=65535;Ba.prototype=Object.assign(Object.create(G.prototype),{constructor:Ba,isMesh:!0,setDrawMode:function(a){this.drawMode=\na},copy:function(a){G.prototype.copy.call(this,a);this.drawMode=a.drawMode;return this},updateMorphTargets:function(){var a=this.geometry.morphTargets;if(void 0!==a&&0<a.length){this.morphTargetInfluences=[];this.morphTargetDictionary={};for(var b=0,c=a.length;b<c;b++)this.morphTargetInfluences.push(0),this.morphTargetDictionary[a[b].name]=b}},raycast:function(){function a(a,b,c,d,e,f,g){Aa.barycoordFromPoint(a,b,c,d,u);e.multiplyScalar(u.x);f.multiplyScalar(u.y);g.multiplyScalar(u.z);e.add(f).add(g);\nreturn e.clone()}function b(a,b,c,d,e,f,g){var h=a.material;if(null===(1===h.side?c.intersectTriangle(f,e,d,!0,g):c.intersectTriangle(d,e,f,2!==h.side,g)))return null;t.copy(g);t.applyMatrix4(a.matrixWorld);c=b.ray.origin.distanceTo(t);return c<b.near||c>b.far?null:{distance:c,point:t.clone(),object:a}}function c(c,d,e,f,m,l,p,q){g.fromArray(f,3*l);h.fromArray(f,3*p);k.fromArray(f,3*q);if(c=b(c,d,e,g,h,k,F))m&&(n.fromArray(m,2*l),r.fromArray(m,2*p),w.fromArray(m,2*q),c.uv=a(F,g,h,k,n,r,w)),c.face=\nnew ha(l,p,q,Aa.normal(g,h,k)),c.faceIndex=l;return c}var d=new H,e=new bb,f=new Fa,g=new q,h=new q,k=new q,m=new q,l=new q,p=new q,n=new C,r=new C,w=new C,u=new q,F=new q,t=new q;return function(q,u){var t=this.geometry,A=this.material,I=this.matrixWorld;if(void 0!==A&&(null===t.boundingSphere&&t.computeBoundingSphere(),f.copy(t.boundingSphere),f.applyMatrix4(I),!1!==q.ray.intersectsSphere(f)&&(d.getInverse(I),e.copy(q.ray).applyMatrix4(d),null===t.boundingBox||!1!==e.intersectsBox(t.boundingBox)))){var E,\nK;if(t.isBufferGeometry){var y,J,A=t.index,I=t.attributes,t=I.position.array;void 0!==I.uv&&(E=I.uv.array);if(null!==A)for(var I=A.array,C=0,D=I.length;C<D;C+=3){if(A=I[C],y=I[C+1],J=I[C+2],K=c(this,q,e,t,E,A,y,J))K.faceIndex=Math.floor(C/3),u.push(K)}else for(C=0,D=t.length;C<D;C+=9)if(A=C/3,y=A+1,J=A+2,K=c(this,q,e,t,E,A,y,J))K.index=A,u.push(K)}else if(t.isGeometry){var G,H,I=A&&A.isMultiMaterial,C=!0===I?A.materials:null,D=t.vertices;y=t.faces;J=t.faceVertexUvs[0];0<J.length&&(E=J);for(var O=\n0,P=y.length;O<P;O++){var R=y[O];K=!0===I?C[R.materialIndex]:A;if(void 0!==K){J=D[R.a];G=D[R.b];H=D[R.c];if(!0===K.morphTargets){K=t.morphTargets;var T=this.morphTargetInfluences;g.set(0,0,0);h.set(0,0,0);k.set(0,0,0);for(var N=0,V=K.length;N<V;N++){var S=T[N];if(0!==S){var L=K[N].vertices;g.addScaledVector(m.subVectors(L[R.a],J),S);h.addScaledVector(l.subVectors(L[R.b],G),S);k.addScaledVector(p.subVectors(L[R.c],H),S)}}g.add(J);h.add(G);k.add(H);J=g;G=h;H=k}if(K=b(this,q,e,J,G,H,F))E&&(T=E[O],n.copy(T[0]),\nr.copy(T[1]),w.copy(T[2]),K.uv=a(F,J,G,H,n,r,w)),K.face=R,K.faceIndex=O,u.push(K)}}}}}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});hb.prototype=Object.create(D.prototype);hb.prototype.constructor=hb;ib.prototype=Object.create(D.prototype);ib.prototype.constructor=ib;sa.prototype=Object.create(G.prototype);sa.prototype.constructor=sa;sa.prototype.isCamera=!0;sa.prototype.getWorldDirection=function(){var a=new da;return function(b){b=b||new q;this.getWorldQuaternion(a);\nreturn b.set(0,0,-1).applyQuaternion(a)}}();sa.prototype.lookAt=function(){var a=new H;return function(b){a.lookAt(this.position,b,this.up);this.quaternion.setFromRotationMatrix(a)}}();sa.prototype.clone=function(){return(new this.constructor).copy(this)};sa.prototype.copy=function(a){G.prototype.copy.call(this,a);this.matrixWorldInverse.copy(a.matrixWorldInverse);this.projectionMatrix.copy(a.projectionMatrix);return this};Ha.prototype=Object.assign(Object.create(sa.prototype),{constructor:Ha,isPerspectiveCamera:!0,\ncopy:function(a){sa.prototype.copy.call(this,a);this.fov=a.fov;this.zoom=a.zoom;this.near=a.near;this.far=a.far;this.focus=a.focus;this.aspect=a.aspect;this.view=null===a.view?null:Object.assign({},a.view);this.filmGauge=a.filmGauge;this.filmOffset=a.filmOffset;return this},setFocalLength:function(a){a=.5*this.getFilmHeight()/a;this.fov=2*Q.RAD2DEG*Math.atan(a);this.updateProjectionMatrix()},getFocalLength:function(){var a=Math.tan(.5*Q.DEG2RAD*this.fov);return.5*this.getFilmHeight()/a},getEffectiveFOV:function(){return 2*\nQ.RAD2DEG*Math.atan(Math.tan(.5*Q.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(a,b,c,d,e,f){this.aspect=a/b;this.view={fullWidth:a,fullHeight:b,offsetX:c,offsetY:d,width:e,height:f};this.updateProjectionMatrix()},clearViewOffset:function(){this.view=null;this.updateProjectionMatrix()},updateProjectionMatrix:function(){var a=this.near,b=a*Math.tan(.5*\nQ.DEG2RAD*this.fov)/this.zoom,c=2*b,d=this.aspect*c,e=-.5*d,f=this.view;if(null!==f)var g=f.fullWidth,h=f.fullHeight,e=e+f.offsetX*d/g,b=b-f.offsetY*c/h,d=f.width/g*d,c=f.height/h*c;f=this.filmOffset;0!==f&&(e+=a*f/this.getFilmWidth());this.projectionMatrix.makeFrustum(e,e+d,b-c,b,a,this.far)},toJSON:function(a){a=G.prototype.toJSON.call(this,a);a.object.fov=this.fov;a.object.zoom=this.zoom;a.object.near=this.near;a.object.far=this.far;a.object.focus=this.focus;a.object.aspect=this.aspect;null!==\nthis.view&&(a.object.view=Object.assign({},this.view));a.object.filmGauge=this.filmGauge;a.object.filmOffset=this.filmOffset;return a}});Hb.prototype=Object.assign(Object.create(sa.prototype),{constructor:Hb,isOrthographicCamera:!0,copy:function(a){sa.prototype.copy.call(this,a);this.left=a.left;this.right=a.right;this.top=a.top;this.bottom=a.bottom;this.near=a.near;this.far=a.far;this.zoom=a.zoom;this.view=null===a.view?null:Object.assign({},a.view);return this},setViewOffset:function(a,b,c,d,e,\nf){this.view={fullWidth:a,fullHeight:b,offsetX:c,offsetY:d,width:e,height:f};this.updateProjectionMatrix()},clearViewOffset:function(){this.view=null;this.updateProjectionMatrix()},updateProjectionMatrix:function(){var a=(this.right-this.left)/(2*this.zoom),b=(this.top-this.bottom)/(2*this.zoom),c=(this.right+this.left)/2,d=(this.top+this.bottom)/2,e=c-a,c=c+a,a=d+b,b=d-b;if(null!==this.view)var c=this.zoom/(this.view.width/this.view.fullWidth),b=this.zoom/(this.view.height/this.view.fullHeight),\nf=(this.right-this.left)/this.view.width,d=(this.top-this.bottom)/this.view.height,e=e+this.view.offsetX/c*f,c=e+this.view.width/c*f,a=a-this.view.offsetY/b*d,b=a-this.view.height/b*d;this.projectionMatrix.makeOrthographic(e,c,a,b,this.near,this.far)},toJSON:function(a){a=G.prototype.toJSON.call(this,a);a.object.zoom=this.zoom;a.object.left=this.left;a.object.right=this.right;a.object.top=this.top;a.object.bottom=this.bottom;a.object.near=this.near;a.object.far=this.far;null!==this.view&&(a.object.view=\nObject.assign({},this.view));return a}});var Af=0;Ib.prototype.isFogExp2=!0;Ib.prototype.clone=function(){return new Ib(this.color.getHex(),this.density)};Ib.prototype.toJSON=function(a){return{type:\"FogExp2\",color:this.color.getHex(),density:this.density}};Jb.prototype.isFog=!0;Jb.prototype.clone=function(){return new Jb(this.color.getHex(),this.near,this.far)};Jb.prototype.toJSON=function(a){return{type:\"Fog\",color:this.color.getHex(),near:this.near,far:this.far}};jb.prototype=Object.create(G.prototype);\njb.prototype.constructor=jb;jb.prototype.copy=function(a,b){G.prototype.copy.call(this,a,b);null!==a.background&&(this.background=a.background.clone());null!==a.fog&&(this.fog=a.fog.clone());null!==a.overrideMaterial&&(this.overrideMaterial=a.overrideMaterial.clone());this.autoUpdate=a.autoUpdate;this.matrixAutoUpdate=a.matrixAutoUpdate;return this};jb.prototype.toJSON=function(a){var b=G.prototype.toJSON.call(this,a);null!==this.background&&(b.object.background=this.background.toJSON(a));null!==\nthis.fog&&(b.object.fog=this.fog.toJSON());return b};Od.prototype=Object.assign(Object.create(G.prototype),{constructor:Od,isLensFlare:!0,copy:function(a){G.prototype.copy.call(this,a);this.positionScreen.copy(a.positionScreen);this.customUpdateCallback=a.customUpdateCallback;for(var b=0,c=a.lensFlares.length;b<c;b++)this.lensFlares.push(a.lensFlares[b]);return this},add:function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new N(16777215));void 0===d&&(d=1);\nc=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:0,opacity:f,color:e,blending:d})},updateLensFlares:function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;a<b;a++)c=this.lensFlares[a],c.x=this.positionScreen.x+d*c.distance,c.y=this.positionScreen.y+e*c.distance,c.wantedRotation=c.x*Math.PI*.25,c.rotation+=.25*(c.wantedRotation-c.rotation)}});kb.prototype=Object.create(W.prototype);kb.prototype.constructor=\nkb;kb.prototype.copy=function(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.rotation=a.rotation;return this};zc.prototype=Object.assign(Object.create(G.prototype),{constructor:zc,isSprite:!0,raycast:function(){var a=new q;return function(b,c){a.setFromMatrixPosition(this.matrixWorld);var d=b.ray.distanceSqToPoint(a);d>this.scale.x*this.scale.y/4||c.push({distance:Math.sqrt(d),point:this.position,face:null,object:this})}}(),clone:function(){return(new this.constructor(this.material)).copy(this)}});\nAc.prototype=Object.assign(Object.create(G.prototype),{constructor:Ac,copy:function(a){G.prototype.copy.call(this,a,!1);a=a.levels;for(var b=0,c=a.length;b<c;b++){var d=a[b];this.addLevel(d.object.clone(),d.distance)}return this},addLevel:function(a,b){void 0===b&&(b=0);b=Math.abs(b);for(var c=this.levels,d=0;d<c.length&&!(b<c[d].distance);d++);c.splice(d,0,{distance:b,object:a});this.add(a)},getObjectForDistance:function(a){for(var b=this.levels,c=1,d=b.length;c<d&&!(a<b[c].distance);c++);return b[c-\n1].object},raycast:function(){var a=new q;return function(b,c){a.setFromMatrixPosition(this.matrixWorld);var d=b.ray.origin.distanceTo(a);this.getObjectForDistance(d).raycast(b,c)}}(),update:function(){var a=new q,b=new q;return function(c){var d=this.levels;if(1<d.length){a.setFromMatrixPosition(c.matrixWorld);b.setFromMatrixPosition(this.matrixWorld);c=a.distanceTo(b);d[0].object.visible=!0;for(var e=1,f=d.length;e<f;e++)if(c>=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break;\nfor(;e<f;e++)d[e].object.visible=!1}}}(),toJSON:function(a){a=G.prototype.toJSON.call(this,a);a.object.levels=[];for(var b=this.levels,c=0,d=b.length;c<d;c++){var e=b[c];a.object.levels.push({object:e.object.uuid,distance:e.distance})}return a}});Object.assign(hd.prototype,{calculateInverses:function(){this.boneInverses=[];for(var a=0,b=this.bones.length;a<b;a++){var c=new H;this.bones[a]&&c.getInverse(this.bones[a].matrixWorld);this.boneInverses.push(c)}},pose:function(){for(var a,b=0,c=this.bones.length;b<\nc;b++)(a=this.bones[b])&&a.matrixWorld.getInverse(this.boneInverses[b]);b=0;for(c=this.bones.length;b<c;b++)if(a=this.bones[b])a.parent&&a.parent.isBone?(a.matrix.getInverse(a.parent.matrixWorld),a.matrix.multiply(a.matrixWorld)):a.matrix.copy(a.matrixWorld),a.matrix.decompose(a.position,a.quaternion,a.scale)},update:function(){var a=new H;return function(){for(var b=0,c=this.bones.length;b<c;b++)a.multiplyMatrices(this.bones[b]?this.bones[b].matrixWorld:this.identityMatrix,this.boneInverses[b]),\na.toArray(this.boneMatrices,16*b);this.useVertexTexture&&(this.boneTexture.needsUpdate=!0)}}(),clone:function(){return new hd(this.bones,this.boneInverses,this.useVertexTexture)}});id.prototype=Object.assign(Object.create(G.prototype),{constructor:id,isBone:!0});jd.prototype=Object.assign(Object.create(Ba.prototype),{constructor:jd,isSkinnedMesh:!0,bind:function(a,b){this.skeleton=a;void 0===b&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),b=this.matrixWorld);this.bindMatrix.copy(b);\nthis.bindMatrixInverse.getInverse(b)},pose:function(){this.skeleton.pose()},normalizeSkinWeights:function(){if(this.geometry&&this.geometry.isGeometry)for(var a=0;a<this.geometry.skinWeights.length;a++){var b=this.geometry.skinWeights[a],c=1/b.lengthManhattan();Infinity!==c?b.multiplyScalar(c):b.set(1,0,0,0)}else if(this.geometry&&this.geometry.isBufferGeometry)for(var b=new ga,d=this.geometry.attributes.skinWeight,a=0;a<d.count;a++)b.x=d.getX(a),b.y=d.getY(a),b.z=d.getZ(a),b.w=d.getW(a),c=1/b.lengthManhattan(),\nInfinity!==c?b.multiplyScalar(c):b.set(1,0,0,0),d.setXYZW(a,b.x,b.y,b.z,b.w)},updateMatrixWorld:function(a){Ba.prototype.updateMatrixWorld.call(this,!0);\"attached\"===this.bindMode?this.bindMatrixInverse.getInverse(this.matrixWorld):\"detached\"===this.bindMode?this.bindMatrixInverse.getInverse(this.bindMatrix):console.warn(\"THREE.SkinnedMesh unrecognized bindMode: \"+this.bindMode)},clone:function(){return(new this.constructor(this.geometry,this.material,this.skeleton.useVertexTexture)).copy(this)}});\nia.prototype=Object.create(W.prototype);ia.prototype.constructor=ia;ia.prototype.isLineBasicMaterial=!0;ia.prototype.copy=function(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.linewidth=a.linewidth;this.linecap=a.linecap;this.linejoin=a.linejoin;return this};Va.prototype=Object.assign(Object.create(G.prototype),{constructor:Va,isLine:!0,raycast:function(){var a=new H,b=new bb,c=new Fa;return function(d,e){var f=d.linePrecision,f=f*f,g=this.geometry,h=this.matrixWorld;null===g.boundingSphere&&\ng.computeBoundingSphere();c.copy(g.boundingSphere);c.applyMatrix4(h);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(h);b.copy(d.ray).applyMatrix4(a);var k=new q,m=new q,h=new q,l=new q,p=this&&this.isLineSegments?2:1;if(g.isBufferGeometry){var n=g.index,r=g.attributes.position.array;if(null!==n)for(var n=n.array,g=0,w=n.length-1;g<w;g+=p){var u=n[g+1];k.fromArray(r,3*n[g]);m.fromArray(r,3*u);u=b.distanceSqToSegment(k,m,l,h);u>f||(l.applyMatrix4(this.matrixWorld),u=d.ray.origin.distanceTo(l),u<d.near||\nu>d.far||e.push({distance:u,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else for(g=0,w=r.length/3-1;g<w;g+=p)k.fromArray(r,3*g),m.fromArray(r,3*g+3),u=b.distanceSqToSegment(k,m,l,h),u>f||(l.applyMatrix4(this.matrixWorld),u=d.ray.origin.distanceTo(l),u<d.near||u>d.far||e.push({distance:u,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}else if(g.isGeometry)for(k=g.vertices,m=k.length,g=0;g<m-1;g+=p)u=b.distanceSqToSegment(k[g],\nk[g+1],l,h),u>f||(l.applyMatrix4(this.matrixWorld),u=d.ray.origin.distanceTo(l),u<d.near||u>d.far||e.push({distance:u,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});fa.prototype=Object.assign(Object.create(Va.prototype),{constructor:fa,isLineSegments:!0});Oa.prototype=Object.create(W.prototype);Oa.prototype.constructor=Oa;Oa.prototype.isPointsMaterial=!0;Oa.prototype.copy=\nfunction(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.size=a.size;this.sizeAttenuation=a.sizeAttenuation;return this};Kb.prototype=Object.assign(Object.create(G.prototype),{constructor:Kb,isPoints:!0,raycast:function(){var a=new H,b=new bb,c=new Fa;return function(d,e){function f(a,c){var f=b.distanceSqToPoint(a);if(f<l){var h=b.closestPointToPoint(a);h.applyMatrix4(k);var m=d.ray.origin.distanceTo(h);m<d.near||m>d.far||e.push({distance:m,distanceToRay:Math.sqrt(f),\npoint:h.clone(),index:c,face:null,object:g})}}var g=this,h=this.geometry,k=this.matrixWorld,m=d.params.Points.threshold;null===h.boundingSphere&&h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k);if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);var m=m/((this.scale.x+this.scale.y+this.scale.z)/3),l=m*m,m=new q;if(h.isBufferGeometry){var p=h.index,h=h.attributes.position.array;if(null!==p)for(var n=p.array,p=0,r=n.length;p<r;p++){var w=n[p];m.fromArray(h,\n3*w);f(m,w)}else for(p=0,n=h.length/3;p<n;p++)m.fromArray(h,3*p),f(m,p)}else for(m=h.vertices,p=0,n=m.length;p<n;p++)f(m[p],p)}}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});Bc.prototype=Object.assign(Object.create(G.prototype),{constructor:Bc});kd.prototype=Object.create(ea.prototype);kd.prototype.constructor=kd;Lb.prototype=Object.create(ea.prototype);Lb.prototype.constructor=Lb;Lb.prototype.isCompressedTexture=!0;ld.prototype=Object.create(ea.prototype);\nld.prototype.constructor=ld;Cc.prototype=Object.create(ea.prototype);Cc.prototype.constructor=Cc;Cc.prototype.isDepthTexture=!0;Mb.prototype=Object.create(D.prototype);Mb.prototype.constructor=Mb;Nb.prototype=Object.create(D.prototype);Nb.prototype.constructor=Nb;Dc.prototype=Object.create(S.prototype);Dc.prototype.constructor=Dc;xa.prototype=Object.create(D.prototype);xa.prototype.constructor=xa;Ob.prototype=Object.create(xa.prototype);Ob.prototype.constructor=Ob;Ec.prototype=Object.create(S.prototype);\nEc.prototype.constructor=Ec;lb.prototype=Object.create(xa.prototype);lb.prototype.constructor=lb;Fc.prototype=Object.create(S.prototype);Fc.prototype.constructor=Fc;Pb.prototype=Object.create(xa.prototype);Pb.prototype.constructor=Pb;Gc.prototype=Object.create(S.prototype);Gc.prototype.constructor=Gc;Qb.prototype=Object.create(xa.prototype);Qb.prototype.constructor=Qb;Hc.prototype=Object.create(S.prototype);Hc.prototype.constructor=Hc;Ic.prototype=Object.create(S.prototype);Ic.prototype.constructor=\nIc;Rb.prototype=Object.create(D.prototype);Rb.prototype.constructor=Rb;Jc.prototype=Object.create(S.prototype);Jc.prototype.constructor=Jc;Sb.prototype=Object.create(D.prototype);Sb.prototype.constructor=Sb;Kc.prototype=Object.create(S.prototype);Kc.prototype.constructor=Kc;Tb.prototype=Object.create(D.prototype);Tb.prototype.constructor=Tb;Lc.prototype=Object.create(S.prototype);Lc.prototype.constructor=Lc;var pa={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;e<b;d=e++)c+=a[d].x*a[e].y-a[e].x*\na[d].y;return.5*c},triangulate:function(){return function(a,b){var c=a.length;if(3>c)return null;var d=[],e=[],f=[],g,h,k;if(0<pa.area(a))for(h=0;h<c;h++)e[h]=h;else for(h=0;h<c;h++)e[h]=c-1-h;var m=2*c;for(h=c-1;2<c;){if(0>=m--){console.warn(\"THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()\");break}g=h;c<=g&&(g=0);h=g+1;c<=h&&(h=0);k=h+1;c<=k&&(k=0);var l;a:{var p,n,r,q,u,F,t,v;p=a[e[g]].x;n=a[e[g]].y;r=a[e[h]].x;q=a[e[h]].y;u=a[e[k]].x;F=a[e[k]].y;if(0>=(r-p)*(F-n)-(q-n)*(u-p))l=\n!1;else{var M,z,A,I,E,K,y,C,D,G;M=u-r;z=F-q;A=p-u;I=n-F;E=r-p;K=q-n;for(l=0;l<c;l++)if(t=a[e[l]].x,v=a[e[l]].y,!(t===p&&v===n||t===r&&v===q||t===u&&v===F)&&(y=t-p,C=v-n,D=t-r,G=v-q,t-=u,v-=F,D=M*G-z*D,y=E*C-K*y,C=A*v-I*t,D>=-Number.EPSILON&&C>=-Number.EPSILON&&y>=-Number.EPSILON)){l=!1;break a}l=!0}}if(l){d.push([a[e[g]],a[e[h]],a[e[k]]]);f.push([e[g],e[h],e[k]]);g=h;for(k=h+1;k<c;g++,k++)e[g]=e[k];c--;m=2*c}}return b?f:d}}(),triangulateShape:function(a,b){function c(a){var b=a.length;2<b&&a[b-1].equals(a[0])&&\na.pop()}function d(a,b,c){return a.x!==b.x?a.x<b.x?a.x<=c.x&&c.x<=b.x:b.x<=c.x&&c.x<=a.x:a.y<b.y?a.y<=c.y&&c.y<=b.y:b.y<=c.y&&c.y<=a.y}function e(a,b,c,e,f){var g=b.x-a.x,h=b.y-a.y,k=e.x-c.x,m=e.y-c.y,l=a.x-c.x,n=a.y-c.y,p=h*k-g*m,q=h*l-g*n;if(Math.abs(p)>Number.EPSILON){if(0<p){if(0>q||q>p)return[];k=m*l-k*n;if(0>k||k>p)return[]}else{if(0<q||q<p)return[];k=m*l-k*n;if(0<k||k<p)return[]}if(0===k)return!f||0!==q&&q!==p?[a]:[];if(k===p)return!f||0!==q&&q!==p?[b]:[];if(0===q)return[c];if(q===p)return[e];\nf=k/p;return[{x:a.x+f*g,y:a.y+f*h}]}if(0!==q||m*l!==k*n)return[];h=0===g&&0===h;k=0===k&&0===m;if(h&&k)return a.x!==c.x||a.y!==c.y?[]:[a];if(h)return d(c,e,a)?[a]:[];if(k)return d(a,b,c)?[c]:[];0!==g?(a.x<b.x?(g=a,k=a.x,h=b,a=b.x):(g=b,k=b.x,h=a,a=a.x),c.x<e.x?(b=c,p=c.x,m=e,c=e.x):(b=e,p=e.x,m=c,c=c.x)):(a.y<b.y?(g=a,k=a.y,h=b,a=b.y):(g=b,k=b.y,h=a,a=a.y),c.y<e.y?(b=c,p=c.y,m=e,c=e.y):(b=e,p=e.y,m=c,c=c.y));return k<=p?a<p?[]:a===p?f?[]:[b]:a<=c?[b,h]:[b,m]:k>c?[]:k===c?f?[]:[g]:a<=c?[g,h]:[g,m]}\nfunction f(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0<a?0<=e&&0<=b:0<=e||0<=b):0<e}c(a);b.forEach(c);var g,h,k,m,l,p={};k=a.concat();g=0;for(h=b.length;g<h;g++)Array.prototype.push.apply(k,b[g]);g=0;for(h=k.length;g<h;g++)l=k[g].x+\":\"+k[g].y,void 0!==p[l]&&console.warn(\"THREE.ShapeUtils: Duplicate point\",l,g),p[l]=g;g=function(a,b){function c(a,b){var d=h.length-1,e=a-1;0>e&&(e=d);var g=a+1;g>d&&(g=\n0);d=f(h[a],h[e],h[g],k[b]);if(!d)return!1;d=k.length-1;e=b-1;0>e&&(e=d);g=b+1;g>d&&(g=0);return(d=f(k[b],k[e],k[g],h[a]))?!0:!1}function d(a,b){var c,f;for(c=0;c<h.length;c++)if(f=c+1,f%=h.length,f=e(a,b,h[c],h[f],!0),0<f.length)return!0;return!1}function g(a,c){var d,f,h,k;for(d=0;d<m.length;d++)for(f=b[m[d]],h=0;h<f.length;h++)if(k=h+1,k%=f.length,k=e(a,c,f[h],f[k],!0),0<k.length)return!0;return!1}var h=a.concat(),k,m=[],l,n,p,q,x,y=[],C,D,G,H=0;for(l=b.length;H<l;H++)m.push(H);C=0;for(var O=2*\nm.length;0<m.length;){O--;if(0>O){console.log(\"Infinite Loop! Holes left:\"+m.length+\", Probably Hole outside Shape!\");break}for(n=C;n<h.length;n++){p=h[n];l=-1;for(H=0;H<m.length;H++)if(q=m[H],x=p.x+\":\"+p.y+\":\"+q,void 0===y[x]){k=b[q];for(D=0;D<k.length;D++)if(q=k[D],c(n,D)&&!d(p,q)&&!g(p,q)){l=D;m.splice(H,1);C=h.slice(0,n+1);q=h.slice(n);D=k.slice(l);G=k.slice(0,l+1);h=C.concat(D).concat(G).concat(q);C=n;break}if(0<=l)break;y[x]=!0}if(0<=l)break}}return h}(a,b);var n=pa.triangulate(g,!1);g=0;for(h=\nn.length;g<h;g++)for(m=n[g],k=0;3>k;k++)l=m[k].x+\":\"+m[k].y,l=p[l],void 0!==l&&(m[k]=l);return n.concat()},isClockWise:function(a){return 0>pa.area(a)},b2:function(){return function(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}}(),b3:function(){return function(a,b,c,d,e){var f=1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}}()};La.prototype=Object.create(S.prototype);La.prototype.constructor=La;La.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;d<c;d++)this.addShape(a[d],\nb)};La.prototype.addShape=function(a,b){function c(a,b,c){b||console.error(\"THREE.ExtrudeGeometry: vec does not exist\");return b.clone().multiplyScalar(c).add(a)}function d(a,b,c){var d,e,f;e=a.x-b.x;f=a.y-b.y;d=c.x-a.x;var g=c.y-a.y,h=e*e+f*f;if(Math.abs(e*g-f*d)>Number.EPSILON){var k=Math.sqrt(h),m=Math.sqrt(d*d+g*g),h=b.x-f/k;b=b.y+e/k;g=((c.x-g/m-h)*g-(c.y+d/m-b)*d)/(e*g-f*d);d=h+e*g-a.x;e=b+f*g-a.y;f=d*d+e*e;if(2>=f)return new C(d,e);f=Math.sqrt(f/2)}else a=!1,e>Number.EPSILON?d>Number.EPSILON&&\n(a=!0):e<-Number.EPSILON?d<-Number.EPSILON&&(a=!0):Math.sign(f)===Math.sign(g)&&(a=!0),a?(d=-f,f=Math.sqrt(h)):(d=e,e=f,f=Math.sqrt(h/2));return new C(d/f,e/f)}function e(a,b){var c,d;for(L=a.length;0<=--L;){c=L;d=L-1;0>d&&(d=a.length-1);var e,f=r+2*l;for(e=0;e<f;e++){var g=U*e,h=U*(e+1),k=b+c+g,g=b+d+g,m=b+d+h,h=b+c+h,k=k+J,g=g+J,m=m+J,h=h+J;G.faces.push(new ha(k,g,h,null,null,1));G.faces.push(new ha(g,m,h,null,null,1));k=t.generateSideWallUV(G,k,g,m,h);G.faceVertexUvs[0].push([k[0],k[1],k[3]]);\nG.faceVertexUvs[0].push([k[1],k[2],k[3]])}}}function f(a,b,c){G.vertices.push(new q(a,b,c))}function g(a,b,c){a+=J;b+=J;c+=J;G.faces.push(new ha(a,b,c,null,null,0));a=t.generateTopUV(G,a,b,c);G.faceVertexUvs[0].push(a)}var h=void 0!==b.amount?b.amount:100,k=void 0!==b.bevelThickness?b.bevelThickness:6,m=void 0!==b.bevelSize?b.bevelSize:k-2,l=void 0!==b.bevelSegments?b.bevelSegments:3,p=void 0!==b.bevelEnabled?b.bevelEnabled:!0,n=void 0!==b.curveSegments?b.curveSegments:12,r=void 0!==b.steps?b.steps:\n1,w=b.extrudePath,u,F=!1,t=void 0!==b.UVGenerator?b.UVGenerator:La.WorldUVGenerator,v,y,z,A;w&&(u=w.getSpacedPoints(r),F=!0,p=!1,v=void 0!==b.frames?b.frames:w.computeFrenetFrames(r,!1),y=new q,z=new q,A=new q);p||(m=k=l=0);var I,E,D,G=this,J=this.vertices.length,w=a.extractPoints(n),n=w.shape,H=w.holes;if(w=!pa.isClockWise(n)){n=n.reverse();E=0;for(D=H.length;E<D;E++)I=H[E],pa.isClockWise(I)&&(H[E]=I.reverse());w=!1}var N=pa.triangulateShape(n,H),S=n;E=0;for(D=H.length;E<D;E++)I=H[E],n=n.concat(I);\nvar Q,O,P,R,T,U=n.length,V,W=N.length,w=[],L=0;P=S.length;Q=P-1;for(O=L+1;L<P;L++,Q++,O++)Q===P&&(Q=0),O===P&&(O=0),w[L]=d(S[L],S[Q],S[O]);var X=[],Z,ba=w.concat();E=0;for(D=H.length;E<D;E++){I=H[E];Z=[];L=0;P=I.length;Q=P-1;for(O=L+1;L<P;L++,Q++,O++)Q===P&&(Q=0),O===P&&(O=0),Z[L]=d(I[L],I[Q],I[O]);X.push(Z);ba=ba.concat(Z)}for(Q=0;Q<l;Q++){P=Q/l;R=k*Math.cos(P*Math.PI/2);O=m*Math.sin(P*Math.PI/2);L=0;for(P=S.length;L<P;L++)T=c(S[L],w[L],O),f(T.x,T.y,-R);E=0;for(D=H.length;E<D;E++)for(I=H[E],Z=X[E],\nL=0,P=I.length;L<P;L++)T=c(I[L],Z[L],O),f(T.x,T.y,-R)}O=m;for(L=0;L<U;L++)T=p?c(n[L],ba[L],O):n[L],F?(z.copy(v.normals[0]).multiplyScalar(T.x),y.copy(v.binormals[0]).multiplyScalar(T.y),A.copy(u[0]).add(z).add(y),f(A.x,A.y,A.z)):f(T.x,T.y,0);for(P=1;P<=r;P++)for(L=0;L<U;L++)T=p?c(n[L],ba[L],O):n[L],F?(z.copy(v.normals[P]).multiplyScalar(T.x),y.copy(v.binormals[P]).multiplyScalar(T.y),A.copy(u[P]).add(z).add(y),f(A.x,A.y,A.z)):f(T.x,T.y,h/r*P);for(Q=l-1;0<=Q;Q--){P=Q/l;R=k*Math.cos(P*Math.PI/2);O=\nm*Math.sin(P*Math.PI/2);L=0;for(P=S.length;L<P;L++)T=c(S[L],w[L],O),f(T.x,T.y,h+R);E=0;for(D=H.length;E<D;E++)for(I=H[E],Z=X[E],L=0,P=I.length;L<P;L++)T=c(I[L],Z[L],O),F?f(T.x,T.y+u[r-1].y,u[r-1].x+R):f(T.x,T.y,h+R)}(function(){if(p){var a=0*U;for(L=0;L<W;L++)V=N[L],g(V[2]+a,V[1]+a,V[0]+a);a=U*(r+2*l);for(L=0;L<W;L++)V=N[L],g(V[0]+a,V[1]+a,V[2]+a)}else{for(L=0;L<W;L++)V=N[L],g(V[2],V[1],V[0]);for(L=0;L<W;L++)V=N[L],g(V[0]+U*r,V[1]+U*r,V[2]+U*r)}})();(function(){var a=0;e(S,a);a+=S.length;E=0;for(D=\nH.length;E<D;E++)I=H[E],e(I,a),a+=I.length})()};La.WorldUVGenerator={generateTopUV:function(a,b,c,d){a=a.vertices;b=a[b];c=a[c];d=a[d];return[new C(b.x,b.y),new C(c.x,c.y),new C(d.x,d.y)]},generateSideWallUV:function(a,b,c,d,e){a=a.vertices;b=a[b];c=a[c];d=a[d];e=a[e];return.01>Math.abs(b.y-c.y)?[new C(b.x,1-b.z),new C(c.x,1-c.z),new C(d.x,1-d.z),new C(e.x,1-e.z)]:[new C(b.y,1-b.z),new C(c.y,1-c.z),new C(d.y,1-d.z),new C(e.y,1-e.z)]}};Mc.prototype=Object.create(La.prototype);Mc.prototype.constructor=\nMc;mb.prototype=Object.create(D.prototype);mb.prototype.constructor=mb;Nc.prototype=Object.create(S.prototype);Nc.prototype.constructor=Nc;Ub.prototype=Object.create(D.prototype);Ub.prototype.constructor=Ub;Oc.prototype=Object.create(S.prototype);Oc.prototype.constructor=Oc;Pc.prototype=Object.create(S.prototype);Pc.prototype.constructor=Pc;Vb.prototype=Object.create(D.prototype);Vb.prototype.constructor=Vb;Qc.prototype=Object.create(S.prototype);Qc.prototype.constructor=Qc;Wb.prototype=Object.create(D.prototype);\nWb.prototype.constructor=Wb;Xb.prototype=Object.create(S.prototype);Xb.prototype.constructor=Xb;Yb.prototype=Object.create(D.prototype);Yb.prototype.constructor=Yb;Wa.prototype=Object.create(D.prototype);Wa.prototype.constructor=Wa;nb.prototype=Object.create(S.prototype);nb.prototype.constructor=nb;Rc.prototype=Object.create(nb.prototype);Rc.prototype.constructor=Rc;Sc.prototype=Object.create(Wa.prototype);Sc.prototype.constructor=Sc;Zb.prototype=Object.create(D.prototype);Zb.prototype.constructor=\nZb;Tc.prototype=Object.create(S.prototype);Tc.prototype.constructor=Tc;$b.prototype=Object.create(S.prototype);$b.prototype.constructor=$b;var Ea=Object.freeze({WireframeGeometry:Mb,ParametricGeometry:Dc,ParametricBufferGeometry:Nb,TetrahedronGeometry:Ec,TetrahedronBufferGeometry:Ob,OctahedronGeometry:Fc,OctahedronBufferGeometry:lb,IcosahedronGeometry:Gc,IcosahedronBufferGeometry:Pb,DodecahedronGeometry:Hc,DodecahedronBufferGeometry:Qb,PolyhedronGeometry:Ic,PolyhedronBufferGeometry:xa,TubeGeometry:Jc,\nTubeBufferGeometry:Rb,TorusKnotGeometry:Kc,TorusKnotBufferGeometry:Sb,TorusGeometry:Lc,TorusBufferGeometry:Tb,TextGeometry:Mc,SphereBufferGeometry:mb,SphereGeometry:Nc,RingGeometry:Oc,RingBufferGeometry:Ub,PlaneBufferGeometry:ib,PlaneGeometry:Pc,LatheGeometry:Qc,LatheBufferGeometry:Vb,ShapeGeometry:Xb,ShapeBufferGeometry:Wb,ExtrudeGeometry:La,EdgesGeometry:Yb,ConeGeometry:Rc,ConeBufferGeometry:Sc,CylinderGeometry:nb,CylinderBufferGeometry:Wa,CircleBufferGeometry:Zb,CircleGeometry:Tc,BoxBufferGeometry:hb,\nBoxGeometry:$b});ac.prototype=Object.create(Ia.prototype);ac.prototype.constructor=ac;ac.prototype.isShadowMaterial=!0;bc.prototype=Object.create(Ia.prototype);bc.prototype.constructor=bc;bc.prototype.isRawShaderMaterial=!0;Uc.prototype={constructor:Uc,isMultiMaterial:!0,toJSON:function(a){for(var b={metadata:{version:4.2,type:\"material\",generator:\"MaterialExporter\"},uuid:this.uuid,type:this.type,materials:[]},c=this.materials,d=0,e=c.length;d<e;d++){var f=c[d].toJSON(a);delete f.metadata;b.materials.push(f)}b.visible=\nthis.visible;return b},clone:function(){for(var a=new this.constructor,b=0;b<this.materials.length;b++)a.materials.push(this.materials[b].clone());a.visible=this.visible;return a}};Pa.prototype=Object.create(W.prototype);Pa.prototype.constructor=Pa;Pa.prototype.isMeshStandardMaterial=!0;Pa.prototype.copy=function(a){W.prototype.copy.call(this,a);this.defines={STANDARD:\"\"};this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=\na.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap=a.metalnessMap;this.alphaMap=a.alphaMap;\nthis.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};ob.prototype=Object.create(Pa.prototype);ob.prototype.constructor=ob;ob.prototype.isMeshPhysicalMaterial=!0;ob.prototype.copy=function(a){Pa.prototype.copy.call(this,\na);this.defines={PHYSICAL:\"\"};this.reflectivity=a.reflectivity;this.clearCoat=a.clearCoat;this.clearCoatRoughness=a.clearCoatRoughness;return this};Ca.prototype=Object.create(W.prototype);Ca.prototype.constructor=Ca;Ca.prototype.isMeshPhongMaterial=!0;Ca.prototype.copy=function(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=\na.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=\na.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};pb.prototype=Object.create(Ca.prototype);pb.prototype.constructor=pb;pb.prototype.isMeshToonMaterial=!0;pb.prototype.copy=function(a){Ca.prototype.copy.call(this,a);this.gradientMap=a.gradientMap;return this};qb.prototype=Object.create(W.prototype);\nqb.prototype.constructor=qb;qb.prototype.isMeshNormalMaterial=!0;qb.prototype.copy=function(a){W.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=\na.morphNormals;return this};rb.prototype=Object.create(W.prototype);rb.prototype.constructor=rb;rb.prototype.isMeshLambertMaterial=!0;rb.prototype.copy=function(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.specularMap=a.specularMap;this.alphaMap=\na.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};sb.prototype=Object.create(W.prototype);sb.prototype.constructor=sb;sb.prototype.isLineDashedMaterial=!0;sb.prototype.copy=\nfunction(a){W.prototype.copy.call(this,a);this.color.copy(a.color);this.linewidth=a.linewidth;this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var Mf=Object.freeze({ShadowMaterial:ac,SpriteMaterial:kb,RawShaderMaterial:bc,ShaderMaterial:Ia,PointsMaterial:Oa,MultiMaterial:Uc,MeshPhysicalMaterial:ob,MeshStandardMaterial:Pa,MeshPhongMaterial:Ca,MeshToonMaterial:pb,MeshNormalMaterial:qb,MeshLambertMaterial:rb,MeshDepthMaterial:ab,MeshBasicMaterial:Ka,LineDashedMaterial:sb,\nLineBasicMaterial:ia,Material:W}),ne={enabled:!1,files:{},add:function(a,b){!1!==this.enabled&&(this.files[a]=b)},get:function(a){if(!1!==this.enabled)return this.files[a]},remove:function(a){delete this.files[a]},clear:function(){this.files={}}},va=new Pd;Object.assign(Ma.prototype,{load:function(a,b,c,d){void 0===a&&(a=\"\");void 0!==this.path&&(a=this.path+a);var e=this,f=ne.get(a);if(void 0!==f)return e.manager.itemStart(a),setTimeout(function(){b&&b(f);e.manager.itemEnd(a)},0),f;var g=a.match(/^data:(.*?)(;base64)?,(.*)$/);\nif(g){var h=g[1],k=!!g[2],g=g[3],g=window.decodeURIComponent(g);k&&(g=window.atob(g));try{var m,l=(this.responseType||\"\").toLowerCase();switch(l){case \"arraybuffer\":case \"blob\":m=new ArrayBuffer(g.length);for(var p=new Uint8Array(m),k=0;k<g.length;k++)p[k]=g.charCodeAt(k);\"blob\"===l&&(m=new Blob([m],{type:h}));break;case \"document\":m=(new DOMParser).parseFromString(g,h);break;case \"json\":m=JSON.parse(g);break;default:m=g}window.setTimeout(function(){b&&b(m);e.manager.itemEnd(a)},0)}catch(q){window.setTimeout(function(){d&&\nd(q);e.manager.itemError(a)},0)}}else{var n=new XMLHttpRequest;n.open(\"GET\",a,!0);n.addEventListener(\"load\",function(c){var f=c.target.response;ne.add(a,f);200===this.status?(b&&b(f),e.manager.itemEnd(a)):0===this.status?(console.warn(\"THREE.FileLoader: HTTP Status 0 received.\"),b&&b(f),e.manager.itemEnd(a)):(d&&d(c),e.manager.itemError(a))},!1);void 0!==c&&n.addEventListener(\"progress\",function(a){c(a)},!1);n.addEventListener(\"error\",function(b){d&&d(b);e.manager.itemError(a)},!1);void 0!==this.responseType&&\n(n.responseType=this.responseType);void 0!==this.withCredentials&&(n.withCredentials=this.withCredentials);n.overrideMimeType&&n.overrideMimeType(void 0!==this.mimeType?this.mimeType:\"text/plain\");n.send(null)}e.manager.itemStart(a);return n},setPath:function(a){this.path=a;return this},setResponseType:function(a){this.responseType=a;return this},setWithCredentials:function(a){this.withCredentials=a;return this},setMimeType:function(a){this.mimeType=a;return this}});Object.assign(Ee.prototype,{load:function(a,\nb,c,d){function e(e){k.load(a[e],function(a){a=f._parser(a,!0);g[e]={width:a.width,height:a.height,format:a.format,mipmaps:a.mipmaps};m+=1;6===m&&(1===a.mipmapCount&&(h.minFilter=1006),h.format=a.format,h.needsUpdate=!0,b&&b(h))},c,d)}var f=this,g=[],h=new Lb;h.image=g;var k=new Ma(this.manager);k.setPath(this.path);k.setResponseType(\"arraybuffer\");if(Array.isArray(a))for(var m=0,l=0,p=a.length;l<p;++l)e(l);else k.load(a,function(a){a=f._parser(a,!0);if(a.isCubemap)for(var c=a.mipmaps.length/a.mipmapCount,\nd=0;d<c;d++){g[d]={mipmaps:[]};for(var e=0;e<a.mipmapCount;e++)g[d].mipmaps.push(a.mipmaps[d*a.mipmapCount+e]),g[d].format=a.format,g[d].width=a.width,g[d].height=a.height}else h.image.width=a.width,h.image.height=a.height,h.mipmaps=a.mipmaps;1===a.mipmapCount&&(h.minFilter=1006);h.format=a.format;h.needsUpdate=!0;b&&b(h)},c,d);return h},setPath:function(a){this.path=a;return this}});Object.assign(Qd.prototype,{load:function(a,b,c,d){var e=this,f=new db,g=new Ma(this.manager);g.setResponseType(\"arraybuffer\");\ng.load(a,function(a){if(a=e._parser(a))void 0!==a.image?f.image=a.image:void 0!==a.data&&(f.image.width=a.width,f.image.height=a.height,f.image.data=a.data),f.wrapS=void 0!==a.wrapS?a.wrapS:1001,f.wrapT=void 0!==a.wrapT?a.wrapT:1001,f.magFilter=void 0!==a.magFilter?a.magFilter:1006,f.minFilter=void 0!==a.minFilter?a.minFilter:1008,f.anisotropy=void 0!==a.anisotropy?a.anisotropy:1,void 0!==a.format&&(f.format=a.format),void 0!==a.type&&(f.type=a.type),void 0!==a.mipmaps&&(f.mipmaps=a.mipmaps),1===\na.mipmapCount&&(f.minFilter=1006),f.needsUpdate=!0,b&&b(f,a)},c,d);return f}});Object.assign(Vc.prototype,{load:function(a,b,c,d){var e=this,f=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"img\");f.onload=function(){f.onload=null;URL.revokeObjectURL(f.src);b&&b(f);e.manager.itemEnd(a)};f.onerror=d;if(0===a.indexOf(\"data:\"))f.src=a;else if(void 0!==this.crossOrigin)f.crossOrigin=this.crossOrigin,f.src=a;else{var g=new Ma;g.setPath(this.path);g.setResponseType(\"blob\");g.setWithCredentials(this.withCredentials);\ng.load(a,function(a){f.src=URL.createObjectURL(a)},c,d)}e.manager.itemStart(a);return f},setCrossOrigin:function(a){this.crossOrigin=a;return this},setWithCredentials:function(a){this.withCredentials=a;return this},setPath:function(a){this.path=a;return this}});Object.assign(Rd.prototype,{load:function(a,b,c,d){function e(c){g.load(a[c],function(a){f.images[c]=a;h++;6===h&&(f.needsUpdate=!0,b&&b(f))},void 0,d)}var f=new Za,g=new Vc(this.manager);g.setCrossOrigin(this.crossOrigin);g.setPath(this.path);\nvar h=0;for(c=0;c<a.length;++c)e(c);return f},setCrossOrigin:function(a){this.crossOrigin=a;return this},setPath:function(a){this.path=a;return this}});Object.assign(md.prototype,{load:function(a,b,c,d){var e=new ea,f=new Vc(this.manager);f.setCrossOrigin(this.crossOrigin);f.setWithCredentials(this.withCredentials);f.setPath(this.path);f.load(a,function(c){var d=0<a.search(/\\.(jpg|jpeg)$/)||0===a.search(/^data\\:image\\/jpeg/);e.format=d?1022:1023;e.image=c;e.needsUpdate=!0;void 0!==b&&b(e)},c,d);return e},\nsetCrossOrigin:function(a){this.crossOrigin=a;return this},setWithCredentials:function(a){this.withCredentials=a;return this},setPath:function(a){this.path=a;return this}});na.prototype=Object.assign(Object.create(G.prototype),{constructor:na,isLight:!0,copy:function(a){G.prototype.copy.call(this,a);this.color.copy(a.color);this.intensity=a.intensity;return this},toJSON:function(a){a=G.prototype.toJSON.call(this,a);a.object.color=this.color.getHex();a.object.intensity=this.intensity;void 0!==this.groundColor&&\n(a.object.groundColor=this.groundColor.getHex());void 0!==this.distance&&(a.object.distance=this.distance);void 0!==this.angle&&(a.object.angle=this.angle);void 0!==this.decay&&(a.object.decay=this.decay);void 0!==this.penumbra&&(a.object.penumbra=this.penumbra);void 0!==this.shadow&&(a.object.shadow=this.shadow.toJSON());return a}});nd.prototype=Object.assign(Object.create(na.prototype),{constructor:nd,isHemisphereLight:!0,copy:function(a){na.prototype.copy.call(this,a);this.groundColor.copy(a.groundColor);\nreturn this}});Object.assign(tb.prototype,{copy:function(a){this.camera=a.camera.clone();this.bias=a.bias;this.radius=a.radius;this.mapSize.copy(a.mapSize);return this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var a={};0!==this.bias&&(a.bias=this.bias);1!==this.radius&&(a.radius=this.radius);if(512!==this.mapSize.x||512!==this.mapSize.y)a.mapSize=this.mapSize.toArray();a.camera=this.camera.toJSON(!1).object;delete a.camera.matrix;return a}});od.prototype=Object.assign(Object.create(tb.prototype),\n{constructor:od,isSpotLightShadow:!0,update:function(a){var b=2*Q.RAD2DEG*a.angle,c=this.mapSize.width/this.mapSize.height;a=a.distance||500;var d=this.camera;if(b!==d.fov||c!==d.aspect||a!==d.far)d.fov=b,d.aspect=c,d.far=a,d.updateProjectionMatrix()}});pd.prototype=Object.assign(Object.create(na.prototype),{constructor:pd,isSpotLight:!0,copy:function(a){na.prototype.copy.call(this,a);this.distance=a.distance;this.angle=a.angle;this.penumbra=a.penumbra;this.decay=a.decay;this.target=a.target.clone();\nthis.shadow=a.shadow.clone();return this}});qd.prototype=Object.assign(Object.create(na.prototype),{constructor:qd,isPointLight:!0,copy:function(a){na.prototype.copy.call(this,a);this.distance=a.distance;this.decay=a.decay;this.shadow=a.shadow.clone();return this}});rd.prototype=Object.assign(Object.create(tb.prototype),{constructor:rd});sd.prototype=Object.assign(Object.create(na.prototype),{constructor:sd,isDirectionalLight:!0,copy:function(a){na.prototype.copy.call(this,a);this.target=a.target.clone();\nthis.shadow=a.shadow.clone();return this}});td.prototype=Object.assign(Object.create(na.prototype),{constructor:td,isAmbientLight:!0});var ba={arraySlice:function(a,b,c){return ba.isTypedArray(a)?new a.constructor(a.subarray(b,c)):a.slice(b,c)},convertArray:function(a,b,c){return!a||!c&&a.constructor===b?a:\"number\"===typeof b.BYTES_PER_ELEMENT?new b(a):Array.prototype.slice.call(a)},isTypedArray:function(a){return ArrayBuffer.isView(a)&&!(a instanceof DataView)},getKeyframeOrder:function(a){for(var b=\na.length,c=Array(b),d=0;d!==b;++d)c[d]=d;c.sort(function(b,c){return a[b]-a[c]});return c},sortedArray:function(a,b,c){for(var d=a.length,e=new a.constructor(d),f=0,g=0;g!==d;++f)for(var h=c[f]*b,k=0;k!==b;++k)e[g++]=a[h+k];return e},flattenJSON:function(a,b,c,d){for(var e=1,f=a[0];void 0!==f&&void 0===f[d];)f=a[e++];if(void 0!==f){var g=f[d];if(void 0!==g)if(Array.isArray(g)){do g=f[d],void 0!==g&&(b.push(f.time),c.push.apply(c,g)),f=a[e++];while(void 0!==f)}else if(void 0!==g.toArray){do g=f[d],\nvoid 0!==g&&(b.push(f.time),g.toArray(c,c.length)),f=a[e++];while(void 0!==f)}else{do g=f[d],void 0!==g&&(b.push(f.time),c.push(g)),f=a[e++];while(void 0!==f)}}}};qa.prototype={constructor:qa,evaluate:function(a){var b=this.parameterPositions,c=this._cachedIndex,d=b[c],e=b[c-1];a:{b:{c:{d:if(!(a<d)){for(var f=c+2;;){if(void 0===d){if(a<e)break d;this._cachedIndex=c=b.length;return this.afterEnd_(c-1,a,e)}if(c===f)break;e=d;d=b[++c];if(a<d)break b}d=b.length;break c}if(a>=e)break a;else{f=b[1];a<f&&\n(c=2,e=f);for(f=c-2;;){if(void 0===e)return this._cachedIndex=0,this.beforeStart_(0,a,d);if(c===f)break;d=e;e=b[--c-1];if(a>=e)break b}d=c;c=0}}for(;c<d;)e=c+d>>>1,a<b[e]?d=e:c=e+1;d=b[c];e=b[c-1];if(void 0===e)return this._cachedIndex=0,this.beforeStart_(0,a,d);if(void 0===d)return this._cachedIndex=c=b.length,this.afterEnd_(c-1,e,a)}this._cachedIndex=c;this.intervalChanged_(c,e,d)}return this.interpolate_(c,e,a,d)},settings:null,DefaultSettings_:{},getSettings_:function(){return this.settings||\nthis.DefaultSettings_},copySampleValue_:function(a){var b=this.resultBuffer,c=this.sampleValues,d=this.valueSize;a*=d;for(var e=0;e!==d;++e)b[e]=c[a+e];return b},interpolate_:function(a,b,c,d){throw Error(\"call to abstract method\");},intervalChanged_:function(a,b,c){}};Object.assign(qa.prototype,{beforeStart_:qa.prototype.copySampleValue_,afterEnd_:qa.prototype.copySampleValue_});ud.prototype=Object.assign(Object.create(qa.prototype),{constructor:ud,DefaultSettings_:{endingStart:2400,endingEnd:2400},\nintervalChanged_:function(a,b,c){var d=this.parameterPositions,e=a-2,f=a+1,g=d[e],h=d[f];if(void 0===g)switch(this.getSettings_().endingStart){case 2401:e=a;g=2*b-c;break;case 2402:e=d.length-2;g=b+d[e]-d[e+1];break;default:e=a,g=c}if(void 0===h)switch(this.getSettings_().endingEnd){case 2401:f=a;h=2*c-b;break;case 2402:f=1;h=c+d[1]-d[0];break;default:f=a-1,h=b}a=.5*(c-b);d=this.valueSize;this._weightPrev=a/(b-g);this._weightNext=a/(h-c);this._offsetPrev=e*d;this._offsetNext=f*d},interpolate_:function(a,\nb,c,d){var e=this.resultBuffer,f=this.sampleValues,g=this.valueSize;a*=g;var h=a-g,k=this._offsetPrev,m=this._offsetNext,l=this._weightPrev,p=this._weightNext,n=(c-b)/(d-b);c=n*n;d=c*n;b=-l*d+2*l*c-l*n;l=(1+l)*d+(-1.5-2*l)*c+(-.5+l)*n+1;n=(-1-p)*d+(1.5+p)*c+.5*n;p=p*d-p*c;for(c=0;c!==g;++c)e[c]=b*f[k+c]+l*f[h+c]+n*f[a+c]+p*f[m+c];return e}});Wc.prototype=Object.assign(Object.create(qa.prototype),{constructor:Wc,interpolate_:function(a,b,c,d){var e=this.resultBuffer,f=this.sampleValues,g=this.valueSize;\na*=g;var h=a-g;b=(c-b)/(d-b);c=1-b;for(d=0;d!==g;++d)e[d]=f[h+d]*c+f[a+d]*b;return e}});vd.prototype=Object.assign(Object.create(qa.prototype),{constructor:vd,interpolate_:function(a,b,c,d){return this.copySampleValue_(a-1)}});var Ya;Ya={TimeBufferType:Float32Array,ValueBufferType:Float32Array,DefaultInterpolation:2301,InterpolantFactoryMethodDiscrete:function(a){return new vd(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodLinear:function(a){return new Wc(this.times,this.values,\nthis.getValueSize(),a)},InterpolantFactoryMethodSmooth:function(a){return new ud(this.times,this.values,this.getValueSize(),a)},setInterpolation:function(a){var b;switch(a){case 2300:b=this.InterpolantFactoryMethodDiscrete;break;case 2301:b=this.InterpolantFactoryMethodLinear;break;case 2302:b=this.InterpolantFactoryMethodSmooth}if(void 0===b){b=\"unsupported interpolation for \"+this.ValueTypeName+\" keyframe track named \"+this.name;if(void 0===this.createInterpolant)if(a!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);\nelse throw Error(b);console.warn(b)}else this.createInterpolant=b},getInterpolation:function(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return 2300;case this.InterpolantFactoryMethodLinear:return 2301;case this.InterpolantFactoryMethodSmooth:return 2302}},getValueSize:function(){return this.values.length/this.times.length},shift:function(a){if(0!==a)for(var b=this.times,c=0,d=b.length;c!==d;++c)b[c]+=a;return this},scale:function(a){if(1!==a)for(var b=this.times,c=\n0,d=b.length;c!==d;++c)b[c]*=a;return this},trim:function(a,b){for(var c=this.times,d=c.length,e=0,f=d-1;e!==d&&c[e]<a;)++e;for(;-1!==f&&c[f]>b;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),d=this.getValueSize(),this.times=ba.arraySlice(c,e,f),this.values=ba.arraySlice(this.values,e*d,f*d);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error(\"invalid value size in track\",this),a=!1);var c=this.times,b=this.values,d=c.length;0===d&&(console.error(\"track is empty\",\nthis),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if(\"number\"===typeof g&&isNaN(g)){console.error(\"time is not a valid number\",this,f,g);a=!1;break}if(null!==e&&e>g){console.error(\"out of order keys\",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&ba.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error(\"value is not a valid number\",this,f,d);a=!1;break}return a},optimize:function(){for(var a=this.times,b=this.values,c=this.getValueSize(),d=2302===this.getInterpolation(),e=1,\nf=a.length-1,g=1;g<f;++g){var h=!1,k=a[g];if(k!==a[g+1]&&(1!==g||k!==k[0]))if(d)h=!0;else for(var m=g*c,l=m-c,p=m+c,k=0;k!==c;++k){var n=b[m+k];if(n!==b[l+k]||n!==b[p+k]){h=!0;break}}if(h){if(g!==e)for(a[e]=a[g],h=g*c,m=e*c,k=0;k!==c;++k)b[m+k]=b[h+k];++e}}if(0<f){a[e]=a[f];h=f*c;m=e*c;for(k=0;k!==c;++k)b[m+k]=b[h+k];++e}e!==a.length&&(this.times=ba.arraySlice(a,0,e),this.values=ba.arraySlice(b,0,e*c));return this}};cc.prototype=Object.assign(Object.create(Ya),{constructor:cc,ValueTypeName:\"vector\"});\nwd.prototype=Object.assign(Object.create(qa.prototype),{constructor:wd,interpolate_:function(a,b,c,d){var e=this.resultBuffer,f=this.sampleValues,g=this.valueSize;a*=g;b=(c-b)/(d-b);for(c=a+g;a!==c;a+=4)da.slerpFlat(e,0,f,a-g,f,a,b);return e}});Xc.prototype=Object.assign(Object.create(Ya),{constructor:Xc,ValueTypeName:\"quaternion\",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(a){return new wd(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodSmooth:void 0});\ndc.prototype=Object.assign(Object.create(Ya),{constructor:dc,ValueTypeName:\"number\"});xd.prototype=Object.assign(Object.create(Ya),{constructor:xd,ValueTypeName:\"string\",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});yd.prototype=Object.assign(Object.create(Ya),{constructor:yd,ValueTypeName:\"bool\",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});\nzd.prototype=Object.assign(Object.create(Ya),{constructor:zd,ValueTypeName:\"color\"});vb.prototype=Ya;Ya.constructor=vb;Object.assign(vb,{parse:function(a){if(void 0===a.type)throw Error(\"track type undefined, can not parse\");var b=vb._getTrackTypeForValueTypeName(a.type);if(void 0===a.times){var c=[],d=[];ba.flattenJSON(a.keys,c,d,\"value\");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)},toJSON:function(a){var b=a.constructor;if(void 0!==b.toJSON)b=\nb.toJSON(a);else{var b={name:a.name,times:ba.convertArray(a.times,Array),values:ba.convertArray(a.values,Array)},c=a.getInterpolation();c!==a.DefaultInterpolation&&(b.interpolation=c)}b.type=a.ValueTypeName;return b},_getTrackTypeForValueTypeName:function(a){switch(a.toLowerCase()){case \"scalar\":case \"double\":case \"float\":case \"number\":case \"integer\":return dc;case \"vector\":case \"vector2\":case \"vector3\":case \"vector4\":return cc;case \"color\":return zd;case \"quaternion\":return Xc;case \"bool\":case \"boolean\":return yd;\ncase \"string\":return xd}throw Error(\"Unsupported typeName: \"+a);}});ta.prototype={constructor:ta,resetDuration:function(){for(var a=0,b=0,c=this.tracks.length;b!==c;++b)var d=this.tracks[b],a=Math.max(a,d.times[d.times.length-1]);this.duration=a},trim:function(){for(var a=0;a<this.tracks.length;a++)this.tracks[a].trim(0,this.duration);return this},optimize:function(){for(var a=0;a<this.tracks.length;a++)this.tracks[a].optimize();return this}};Object.assign(ta,{parse:function(a){for(var b=[],c=a.tracks,\nd=1/(a.fps||1),e=0,f=c.length;e!==f;++e)b.push(vb.parse(c[e]).scale(d));return new ta(a.name,a.duration,b)},toJSON:function(a){var b=[],c=a.tracks;a={name:a.name,duration:a.duration,tracks:b};for(var d=0,e=c.length;d!==e;++d)b.push(vb.toJSON(c[d]));return a},CreateFromMorphTargetSequence:function(a,b,c,d){for(var e=b.length,f=[],g=0;g<e;g++){var h=[],k=[];h.push((g+e-1)%e,g,(g+1)%e);k.push(0,1,0);var m=ba.getKeyframeOrder(h),h=ba.sortedArray(h,1,m),k=ba.sortedArray(k,1,m);d||0!==h[0]||(h.push(e),\nk.push(k[0]));f.push((new dc(\".morphTargetInfluences[\"+b[g].name+\"]\",h,k)).scale(1/c))}return new ta(a,-1,f)},findByName:function(a,b){var c=a;Array.isArray(a)||(c=a.geometry&&a.geometry.animations||a.animations);for(var d=0;d<c.length;d++)if(c[d].name===b)return c[d];return null},CreateClipsFromMorphTargetSequences:function(a,b,c){for(var d={},e=/^([\\w-]*?)([\\d]+)$/,f=0,g=a.length;f<g;f++){var h=a[f],k=h.name.match(e);if(k&&1<k.length){var m=k[1];(k=d[m])||(d[m]=k=[]);k.push(h)}}a=[];for(m in d)a.push(ta.CreateFromMorphTargetSequence(m,\nd[m],b,c));return a},parseAnimation:function(a,b){if(!a)return console.error(\"  no animation in JSONLoader data\"),null;for(var c=function(a,b,c,d,e){if(0!==c.length){var f=[],g=[];ba.flattenJSON(c,f,g,d);0!==f.length&&e.push(new a(b,f,g))}},d=[],e=a.name||\"default\",f=a.length||-1,g=a.fps||30,h=a.hierarchy||[],k=0;k<h.length;k++){var m=h[k].keys;if(m&&0!==m.length)if(m[0].morphTargets){for(var f={},l=0;l<m.length;l++)if(m[l].morphTargets)for(var p=0;p<m[l].morphTargets.length;p++)f[m[l].morphTargets[p]]=\n-1;for(var n in f){for(var q=[],w=[],p=0;p!==m[l].morphTargets.length;++p){var u=m[l];q.push(u.time);w.push(u.morphTarget===n?1:0)}d.push(new dc(\".morphTargetInfluence[\"+n+\"]\",q,w))}f=f.length*(g||1)}else l=\".bones[\"+b[k].name+\"]\",c(cc,l+\".position\",m,\"pos\",d),c(Xc,l+\".quaternion\",m,\"rot\",d),c(cc,l+\".scale\",m,\"scl\",d)}return 0===d.length?null:new ta(e,f,d)}});Object.assign(Ad.prototype,{load:function(a,b,c,d){var e=this;(new Ma(e.manager)).load(a,function(a){b(e.parse(JSON.parse(a)))},c,d)},setTextures:function(a){this.textures=\na},parse:function(a){function b(a){void 0===c[a]&&console.warn(\"THREE.MaterialLoader: Undefined texture\",a);return c[a]}var c=this.textures,d=new Mf[a.type];void 0!==a.uuid&&(d.uuid=a.uuid);void 0!==a.name&&(d.name=a.name);void 0!==a.color&&d.color.setHex(a.color);void 0!==a.roughness&&(d.roughness=a.roughness);void 0!==a.metalness&&(d.metalness=a.metalness);void 0!==a.emissive&&d.emissive.setHex(a.emissive);void 0!==a.specular&&d.specular.setHex(a.specular);void 0!==a.shininess&&(d.shininess=a.shininess);\nvoid 0!==a.clearCoat&&(d.clearCoat=a.clearCoat);void 0!==a.clearCoatRoughness&&(d.clearCoatRoughness=a.clearCoatRoughness);void 0!==a.uniforms&&(d.uniforms=a.uniforms);void 0!==a.vertexShader&&(d.vertexShader=a.vertexShader);void 0!==a.fragmentShader&&(d.fragmentShader=a.fragmentShader);void 0!==a.vertexColors&&(d.vertexColors=a.vertexColors);void 0!==a.fog&&(d.fog=a.fog);void 0!==a.shading&&(d.shading=a.shading);void 0!==a.blending&&(d.blending=a.blending);void 0!==a.side&&(d.side=a.side);void 0!==\na.opacity&&(d.opacity=a.opacity);void 0!==a.transparent&&(d.transparent=a.transparent);void 0!==a.alphaTest&&(d.alphaTest=a.alphaTest);void 0!==a.depthTest&&(d.depthTest=a.depthTest);void 0!==a.depthWrite&&(d.depthWrite=a.depthWrite);void 0!==a.colorWrite&&(d.colorWrite=a.colorWrite);void 0!==a.wireframe&&(d.wireframe=a.wireframe);void 0!==a.wireframeLinewidth&&(d.wireframeLinewidth=a.wireframeLinewidth);void 0!==a.wireframeLinecap&&(d.wireframeLinecap=a.wireframeLinecap);void 0!==a.wireframeLinejoin&&\n(d.wireframeLinejoin=a.wireframeLinejoin);void 0!==a.skinning&&(d.skinning=a.skinning);void 0!==a.morphTargets&&(d.morphTargets=a.morphTargets);void 0!==a.size&&(d.size=a.size);void 0!==a.sizeAttenuation&&(d.sizeAttenuation=a.sizeAttenuation);void 0!==a.map&&(d.map=b(a.map));void 0!==a.alphaMap&&(d.alphaMap=b(a.alphaMap),d.transparent=!0);void 0!==a.bumpMap&&(d.bumpMap=b(a.bumpMap));void 0!==a.bumpScale&&(d.bumpScale=a.bumpScale);void 0!==a.normalMap&&(d.normalMap=b(a.normalMap));if(void 0!==a.normalScale){var e=\na.normalScale;!1===Array.isArray(e)&&(e=[e,e]);d.normalScale=(new C).fromArray(e)}void 0!==a.displacementMap&&(d.displacementMap=b(a.displacementMap));void 0!==a.displacementScale&&(d.displacementScale=a.displacementScale);void 0!==a.displacementBias&&(d.displacementBias=a.displacementBias);void 0!==a.roughnessMap&&(d.roughnessMap=b(a.roughnessMap));void 0!==a.metalnessMap&&(d.metalnessMap=b(a.metalnessMap));void 0!==a.emissiveMap&&(d.emissiveMap=b(a.emissiveMap));void 0!==a.emissiveIntensity&&(d.emissiveIntensity=\na.emissiveIntensity);void 0!==a.specularMap&&(d.specularMap=b(a.specularMap));void 0!==a.envMap&&(d.envMap=b(a.envMap));void 0!==a.reflectivity&&(d.reflectivity=a.reflectivity);void 0!==a.lightMap&&(d.lightMap=b(a.lightMap));void 0!==a.lightMapIntensity&&(d.lightMapIntensity=a.lightMapIntensity);void 0!==a.aoMap&&(d.aoMap=b(a.aoMap));void 0!==a.aoMapIntensity&&(d.aoMapIntensity=a.aoMapIntensity);void 0!==a.gradientMap&&(d.gradientMap=b(a.gradientMap));if(void 0!==a.materials)for(var e=0,f=a.materials.length;e<\nf;e++)d.materials.push(this.parse(a.materials[e]));return d}});Object.assign(Sd.prototype,{load:function(a,b,c,d){var e=this;(new Ma(e.manager)).load(a,function(a){b(e.parse(JSON.parse(a)))},c,d)},parse:function(a){var b=new D,c=a.data.index,d={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};void 0!==c&&(c=new d[c.type](c.array),\nb.setIndex(new y(c,1)));var e=a.data.attributes,f;for(f in e){var g=e[f],c=new d[g.type](g.array);b.addAttribute(f,new y(c,g.itemSize,g.normalized))}d=a.data.groups||a.data.drawcalls||a.data.offsets;if(void 0!==d)for(f=0,c=d.length;f!==c;++f)e=d[f],b.addGroup(e.start,e.count,e.materialIndex);a=a.data.boundingSphere;void 0!==a&&(d=new q,void 0!==a.center&&d.fromArray(a.center),b.boundingSphere=new Fa(d,a.radius));return b}});wb.prototype={constructor:wb,crossOrigin:void 0,extractUrlBase:function(a){a=\na.split(\"/\");if(1===a.length)return\"./\";a.pop();return a.join(\"/\")+\"/\"},initMaterials:function(a,b,c){for(var d=[],e=0;e<a.length;++e)d[e]=this.createMaterial(a[e],b,c);return d},createMaterial:function(){var a,b,c;return function(d,e,f){function g(a,c,d,g,k){a=e+a;var m=wb.Handlers.get(a);null!==m?a=m.load(a):(b.setCrossOrigin(f),a=b.load(a));void 0!==c&&(a.repeat.fromArray(c),1!==c[0]&&(a.wrapS=1E3),1!==c[1]&&(a.wrapT=1E3));void 0!==d&&a.offset.fromArray(d);void 0!==g&&(\"repeat\"===g[0]&&(a.wrapS=\n1E3),\"mirror\"===g[0]&&(a.wrapS=1002),\"repeat\"===g[1]&&(a.wrapT=1E3),\"mirror\"===g[1]&&(a.wrapT=1002));void 0!==k&&(a.anisotropy=k);c=Q.generateUUID();h[c]=a;return c}void 0===a&&(a=new N);void 0===b&&(b=new md);void 0===c&&(c=new Ad);var h={},k={uuid:Q.generateUUID(),type:\"MeshLambertMaterial\"},m;for(m in d){var l=d[m];switch(m){case \"DbgColor\":case \"DbgIndex\":case \"opticalDensity\":case \"illumination\":break;case \"DbgName\":k.name=l;break;case \"blending\":k.blending=Me[l];break;case \"colorAmbient\":case \"mapAmbient\":console.warn(\"THREE.Loader.createMaterial:\",\nm,\"is no longer supported.\");break;case \"colorDiffuse\":k.color=a.fromArray(l).getHex();break;case \"colorSpecular\":k.specular=a.fromArray(l).getHex();break;case \"colorEmissive\":k.emissive=a.fromArray(l).getHex();break;case \"specularCoef\":k.shininess=l;break;case \"shading\":\"basic\"===l.toLowerCase()&&(k.type=\"MeshBasicMaterial\");\"phong\"===l.toLowerCase()&&(k.type=\"MeshPhongMaterial\");\"standard\"===l.toLowerCase()&&(k.type=\"MeshStandardMaterial\");break;case \"mapDiffuse\":k.map=g(l,d.mapDiffuseRepeat,d.mapDiffuseOffset,\nd.mapDiffuseWrap,d.mapDiffuseAnisotropy);break;case \"mapDiffuseRepeat\":case \"mapDiffuseOffset\":case \"mapDiffuseWrap\":case \"mapDiffuseAnisotropy\":break;case \"mapEmissive\":k.emissiveMap=g(l,d.mapEmissiveRepeat,d.mapEmissiveOffset,d.mapEmissiveWrap,d.mapEmissiveAnisotropy);break;case \"mapEmissiveRepeat\":case \"mapEmissiveOffset\":case \"mapEmissiveWrap\":case \"mapEmissiveAnisotropy\":break;case \"mapLight\":k.lightMap=g(l,d.mapLightRepeat,d.mapLightOffset,d.mapLightWrap,d.mapLightAnisotropy);break;case \"mapLightRepeat\":case \"mapLightOffset\":case \"mapLightWrap\":case \"mapLightAnisotropy\":break;\ncase \"mapAO\":k.aoMap=g(l,d.mapAORepeat,d.mapAOOffset,d.mapAOWrap,d.mapAOAnisotropy);break;case \"mapAORepeat\":case \"mapAOOffset\":case \"mapAOWrap\":case \"mapAOAnisotropy\":break;case \"mapBump\":k.bumpMap=g(l,d.mapBumpRepeat,d.mapBumpOffset,d.mapBumpWrap,d.mapBumpAnisotropy);break;case \"mapBumpScale\":k.bumpScale=l;break;case \"mapBumpRepeat\":case \"mapBumpOffset\":case \"mapBumpWrap\":case \"mapBumpAnisotropy\":break;case \"mapNormal\":k.normalMap=g(l,d.mapNormalRepeat,d.mapNormalOffset,d.mapNormalWrap,d.mapNormalAnisotropy);\nbreak;case \"mapNormalFactor\":k.normalScale=[l,l];break;case \"mapNormalRepeat\":case \"mapNormalOffset\":case \"mapNormalWrap\":case \"mapNormalAnisotropy\":break;case \"mapSpecular\":k.specularMap=g(l,d.mapSpecularRepeat,d.mapSpecularOffset,d.mapSpecularWrap,d.mapSpecularAnisotropy);break;case \"mapSpecularRepeat\":case \"mapSpecularOffset\":case \"mapSpecularWrap\":case \"mapSpecularAnisotropy\":break;case \"mapMetalness\":k.metalnessMap=g(l,d.mapMetalnessRepeat,d.mapMetalnessOffset,d.mapMetalnessWrap,d.mapMetalnessAnisotropy);\nbreak;case \"mapMetalnessRepeat\":case \"mapMetalnessOffset\":case \"mapMetalnessWrap\":case \"mapMetalnessAnisotropy\":break;case \"mapRoughness\":k.roughnessMap=g(l,d.mapRoughnessRepeat,d.mapRoughnessOffset,d.mapRoughnessWrap,d.mapRoughnessAnisotropy);break;case \"mapRoughnessRepeat\":case \"mapRoughnessOffset\":case \"mapRoughnessWrap\":case \"mapRoughnessAnisotropy\":break;case \"mapAlpha\":k.alphaMap=g(l,d.mapAlphaRepeat,d.mapAlphaOffset,d.mapAlphaWrap,d.mapAlphaAnisotropy);break;case \"mapAlphaRepeat\":case \"mapAlphaOffset\":case \"mapAlphaWrap\":case \"mapAlphaAnisotropy\":break;\ncase \"flipSided\":k.side=1;break;case \"doubleSided\":k.side=2;break;case \"transparency\":console.warn(\"THREE.Loader.createMaterial: transparency has been renamed to opacity\");k.opacity=l;break;case \"depthTest\":case \"depthWrite\":case \"colorWrite\":case \"opacity\":case \"reflectivity\":case \"transparent\":case \"visible\":case \"wireframe\":k[m]=l;break;case \"vertexColors\":!0===l&&(k.vertexColors=2);\"face\"===l&&(k.vertexColors=1);break;default:console.error(\"THREE.Loader.createMaterial: Unsupported\",m,l)}}\"MeshBasicMaterial\"===\nk.type&&delete k.emissive;\"MeshPhongMaterial\"!==k.type&&delete k.specular;1>k.opacity&&(k.transparent=!0);c.setTextures(h);return c.parse(k)}}()};wb.Handlers={handlers:[],add:function(a,b){this.handlers.push(a,b)},get:function(a){for(var b=this.handlers,c=0,d=b.length;c<d;c+=2){var e=b[c+1];if(b[c].test(a))return e}return null}};Object.assign(Td.prototype,{load:function(a,b,c,d){var e=this,f=this.texturePath&&\"string\"===typeof this.texturePath?this.texturePath:wb.prototype.extractUrlBase(a),g=new Ma(this.manager);\ng.setWithCredentials(this.withCredentials);g.load(a,function(c){c=JSON.parse(c);var d=c.metadata;if(void 0!==d&&(d=d.type,void 0!==d)){if(\"object\"===d.toLowerCase()){console.error(\"THREE.JSONLoader: \"+a+\" should be loaded with THREE.ObjectLoader instead.\");return}if(\"scene\"===d.toLowerCase()){console.error(\"THREE.JSONLoader: \"+a+\" should be loaded with THREE.SceneLoader instead.\");return}}c=e.parse(c,f);b(c.geometry,c.materials)},c,d)},setTexturePath:function(a){this.texturePath=a},parse:function(a,\nb){var c=new S,d=void 0!==a.scale?1/a.scale:1;(function(b){var d,g,h,k,m,l,p,n,r,w,u,F,t,v=a.faces;l=a.vertices;var y=a.normals,z=a.colors,A=0;if(void 0!==a.uvs){for(d=0;d<a.uvs.length;d++)a.uvs[d].length&&A++;for(d=0;d<A;d++)c.faceVertexUvs[d]=[]}k=0;for(m=l.length;k<m;)d=new q,d.x=l[k++]*b,d.y=l[k++]*b,d.z=l[k++]*b,c.vertices.push(d);k=0;for(m=v.length;k<m;)if(b=v[k++],r=b&1,h=b&2,d=b&8,p=b&16,w=b&32,l=b&64,b&=128,r){r=new ha;r.a=v[k];r.b=v[k+1];r.c=v[k+3];u=new ha;u.a=v[k+1];u.b=v[k+2];u.c=v[k+\n3];k+=4;h&&(h=v[k++],r.materialIndex=h,u.materialIndex=h);h=c.faces.length;if(d)for(d=0;d<A;d++)for(F=a.uvs[d],c.faceVertexUvs[d][h]=[],c.faceVertexUvs[d][h+1]=[],g=0;4>g;g++)n=v[k++],t=F[2*n],n=F[2*n+1],t=new C(t,n),2!==g&&c.faceVertexUvs[d][h].push(t),0!==g&&c.faceVertexUvs[d][h+1].push(t);p&&(p=3*v[k++],r.normal.set(y[p++],y[p++],y[p]),u.normal.copy(r.normal));if(w)for(d=0;4>d;d++)p=3*v[k++],w=new q(y[p++],y[p++],y[p]),2!==d&&r.vertexNormals.push(w),0!==d&&u.vertexNormals.push(w);l&&(l=v[k++],\nl=z[l],r.color.setHex(l),u.color.setHex(l));if(b)for(d=0;4>d;d++)l=v[k++],l=z[l],2!==d&&r.vertexColors.push(new N(l)),0!==d&&u.vertexColors.push(new N(l));c.faces.push(r);c.faces.push(u)}else{r=new ha;r.a=v[k++];r.b=v[k++];r.c=v[k++];h&&(h=v[k++],r.materialIndex=h);h=c.faces.length;if(d)for(d=0;d<A;d++)for(F=a.uvs[d],c.faceVertexUvs[d][h]=[],g=0;3>g;g++)n=v[k++],t=F[2*n],n=F[2*n+1],t=new C(t,n),c.faceVertexUvs[d][h].push(t);p&&(p=3*v[k++],r.normal.set(y[p++],y[p++],y[p]));if(w)for(d=0;3>d;d++)p=3*\nv[k++],w=new q(y[p++],y[p++],y[p]),r.vertexNormals.push(w);l&&(l=v[k++],r.color.setHex(z[l]));if(b)for(d=0;3>d;d++)l=v[k++],r.vertexColors.push(new N(z[l]));c.faces.push(r)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;d<g;d+=b)c.skinWeights.push(new ga(a.skinWeights[d],1<b?a.skinWeights[d+1]:0,2<b?a.skinWeights[d+2]:0,3<b?a.skinWeights[d+3]:0));if(a.skinIndices)for(d=0,g=a.skinIndices.length;d<g;d+=b)c.skinIndices.push(new ga(a.skinIndices[d],\n1<b?a.skinIndices[d+1]:0,2<b?a.skinIndices[d+2]:0,3<b?a.skinIndices[d+3]:0));c.bones=a.bones;c.bones&&0<c.bones.length&&(c.skinWeights.length!==c.skinIndices.length||c.skinIndices.length!==c.vertices.length)&&console.warn(\"When skinning, number of vertices (\"+c.vertices.length+\"), skinIndices (\"+c.skinIndices.length+\"), and skinWeights (\"+c.skinWeights.length+\") should match.\")})();(function(b){if(void 0!==a.morphTargets)for(var d=0,g=a.morphTargets.length;d<g;d++){c.morphTargets[d]={};c.morphTargets[d].name=\na.morphTargets[d].name;c.morphTargets[d].vertices=[];for(var h=c.morphTargets[d].vertices,k=a.morphTargets[d].vertices,m=0,l=k.length;m<l;m+=3){var p=new q;p.x=k[m]*b;p.y=k[m+1]*b;p.z=k[m+2]*b;h.push(p)}}if(void 0!==a.morphColors&&0<a.morphColors.length)for(console.warn('THREE.JSONLoader: \"morphColors\" no longer supported. Using them as face colors.'),b=c.faces,h=a.morphColors[0].colors,d=0,g=b.length;d<g;d++)b[d].color.fromArray(h,3*d)})(d);(function(){var b=[],d=[];void 0!==a.animation&&d.push(a.animation);\nvoid 0!==a.animations&&(a.animations.length?d=d.concat(a.animations):d.push(a.animations));for(var g=0;g<d.length;g++){var h=ta.parseAnimation(d[g],c.bones);h&&b.push(h)}c.morphTargets&&(d=ta.CreateClipsFromMorphTargetSequences(c.morphTargets,10),b=b.concat(d));0<b.length&&(c.animations=b)})();c.computeFaceNormals();c.computeBoundingSphere();if(void 0===a.materials||0===a.materials.length)return{geometry:c};d=wb.prototype.initMaterials(a.materials,b,this.crossOrigin);return{geometry:c,materials:d}}});\nObject.assign(Fe.prototype,{load:function(a,b,c,d){\"\"===this.texturePath&&(this.texturePath=a.substring(0,a.lastIndexOf(\"/\")+1));var e=this;(new Ma(e.manager)).load(a,function(c){var d=null;try{d=JSON.parse(c)}catch(h){console.error(\"THREE:ObjectLoader: Can't parse \"+a+\".\",h.message);return}c=d.metadata;void 0===c||void 0===c.type||\"geometry\"===c.type.toLowerCase()?console.error(\"THREE.ObjectLoader: Can't load \"+a+\". Use THREE.JSONLoader instead.\"):e.parse(d,b)},c,d)},setTexturePath:function(a){this.texturePath=\na},setCrossOrigin:function(a){this.crossOrigin=a},parse:function(a,b){var c=this.parseGeometries(a.geometries),d=this.parseImages(a.images,function(){void 0!==b&&b(e)}),d=this.parseTextures(a.textures,d),d=this.parseMaterials(a.materials,d),e=this.parseObject(a.object,c,d);a.animations&&(e.animations=this.parseAnimations(a.animations));void 0!==a.images&&0!==a.images.length||void 0===b||b(e);return e},parseGeometries:function(a){var b={};if(void 0!==a)for(var c=new Td,d=new Sd,e=0,f=a.length;e<f;e++){var g,\nh=a[e];switch(h.type){case \"PlaneGeometry\":case \"PlaneBufferGeometry\":g=new Ea[h.type](h.width,h.height,h.widthSegments,h.heightSegments);break;case \"BoxGeometry\":case \"BoxBufferGeometry\":case \"CubeGeometry\":g=new Ea[h.type](h.width,h.height,h.depth,h.widthSegments,h.heightSegments,h.depthSegments);break;case \"CircleGeometry\":case \"CircleBufferGeometry\":g=new Ea[h.type](h.radius,h.segments,h.thetaStart,h.thetaLength);break;case \"CylinderGeometry\":case \"CylinderBufferGeometry\":g=new Ea[h.type](h.radiusTop,\nh.radiusBottom,h.height,h.radialSegments,h.heightSegments,h.openEnded,h.thetaStart,h.thetaLength);break;case \"ConeGeometry\":case \"ConeBufferGeometry\":g=new Ea[h.type](h.radius,h.height,h.radialSegments,h.heightSegments,h.openEnded,h.thetaStart,h.thetaLength);break;case \"SphereGeometry\":case \"SphereBufferGeometry\":g=new Ea[h.type](h.radius,h.widthSegments,h.heightSegments,h.phiStart,h.phiLength,h.thetaStart,h.thetaLength);break;case \"DodecahedronGeometry\":case \"IcosahedronGeometry\":case \"OctahedronGeometry\":case \"TetrahedronGeometry\":g=\nnew Ea[h.type](h.radius,h.detail);break;case \"RingGeometry\":case \"RingBufferGeometry\":g=new Ea[h.type](h.innerRadius,h.outerRadius,h.thetaSegments,h.phiSegments,h.thetaStart,h.thetaLength);break;case \"TorusGeometry\":case \"TorusBufferGeometry\":g=new Ea[h.type](h.radius,h.tube,h.radialSegments,h.tubularSegments,h.arc);break;case \"TorusKnotGeometry\":case \"TorusKnotBufferGeometry\":g=new Ea[h.type](h.radius,h.tube,h.tubularSegments,h.radialSegments,h.p,h.q);break;case \"LatheGeometry\":case \"LatheBufferGeometry\":g=\nnew Ea[h.type](h.points,h.segments,h.phiStart,h.phiLength);break;case \"BufferGeometry\":g=d.parse(h);break;case \"Geometry\":g=c.parse(h.data,this.texturePath).geometry;break;default:console.warn('THREE.ObjectLoader: Unsupported geometry type \"'+h.type+'\"');continue}g.uuid=h.uuid;void 0!==h.name&&(g.name=h.name);b[h.uuid]=g}return b},parseMaterials:function(a,b){var c={};if(void 0!==a){var d=new Ad;d.setTextures(b);for(var e=0,f=a.length;e<f;e++){var g=d.parse(a[e]);c[g.uuid]=g}}return c},parseAnimations:function(a){for(var b=\n[],c=0;c<a.length;c++){var d=ta.parse(a[c]);b.push(d)}return b},parseImages:function(a,b){function c(a){d.manager.itemStart(a);return g.load(a,function(){d.manager.itemEnd(a)},void 0,function(){d.manager.itemError(a)})}var d=this,e={};if(void 0!==a&&0<a.length){var f=new Pd(b),g=new Vc(f);g.setCrossOrigin(this.crossOrigin);for(var f=0,h=a.length;f<h;f++){var k=a[f],m=/^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test(k.url)?k.url:d.texturePath+k.url;e[k.uuid]=c(m)}}return e},parseTextures:function(a,b){function c(a,\nb){if(\"number\"===typeof a)return a;console.warn(\"THREE.ObjectLoader.parseTexture: Constant should be in numeric form.\",a);return b[a]}var d={};if(void 0!==a)for(var e=0,f=a.length;e<f;e++){var g=a[e];void 0===g.image&&console.warn('THREE.ObjectLoader: No \"image\" specified for',g.uuid);void 0===b[g.image]&&console.warn(\"THREE.ObjectLoader: Undefined image\",g.image);var h=new ea(b[g.image]);h.needsUpdate=!0;h.uuid=g.uuid;void 0!==g.name&&(h.name=g.name);void 0!==g.mapping&&(h.mapping=c(g.mapping,Ne));\nvoid 0!==g.offset&&h.offset.fromArray(g.offset);void 0!==g.repeat&&h.repeat.fromArray(g.repeat);void 0!==g.wrap&&(h.wrapS=c(g.wrap[0],le),h.wrapT=c(g.wrap[1],le));void 0!==g.minFilter&&(h.minFilter=c(g.minFilter,me));void 0!==g.magFilter&&(h.magFilter=c(g.magFilter,me));void 0!==g.anisotropy&&(h.anisotropy=g.anisotropy);void 0!==g.flipY&&(h.flipY=g.flipY);d[g.uuid]=h}return d},parseObject:function(){var a=new H;return function(b,c,d){function e(a){void 0===c[a]&&console.warn(\"THREE.ObjectLoader: Undefined geometry\",\na);return c[a]}function f(a){if(void 0!==a)return void 0===d[a]&&console.warn(\"THREE.ObjectLoader: Undefined material\",a),d[a]}var g;switch(b.type){case \"Scene\":g=new jb;void 0!==b.background&&Number.isInteger(b.background)&&(g.background=new N(b.background));void 0!==b.fog&&(\"Fog\"===b.fog.type?g.fog=new Jb(b.fog.color,b.fog.near,b.fog.far):\"FogExp2\"===b.fog.type&&(g.fog=new Ib(b.fog.color,b.fog.density)));break;case \"PerspectiveCamera\":g=new Ha(b.fov,b.aspect,b.near,b.far);void 0!==b.focus&&(g.focus=\nb.focus);void 0!==b.zoom&&(g.zoom=b.zoom);void 0!==b.filmGauge&&(g.filmGauge=b.filmGauge);void 0!==b.filmOffset&&(g.filmOffset=b.filmOffset);void 0!==b.view&&(g.view=Object.assign({},b.view));break;case \"OrthographicCamera\":g=new Hb(b.left,b.right,b.top,b.bottom,b.near,b.far);break;case \"AmbientLight\":g=new td(b.color,b.intensity);break;case \"DirectionalLight\":g=new sd(b.color,b.intensity);break;case \"PointLight\":g=new qd(b.color,b.intensity,b.distance,b.decay);break;case \"SpotLight\":g=new pd(b.color,\nb.intensity,b.distance,b.angle,b.penumbra,b.decay);break;case \"HemisphereLight\":g=new nd(b.color,b.groundColor,b.intensity);break;case \"Mesh\":g=e(b.geometry);var h=f(b.material);g=g.bones&&0<g.bones.length?new jd(g,h):new Ba(g,h);break;case \"LOD\":g=new Ac;break;case \"Line\":g=new Va(e(b.geometry),f(b.material),b.mode);break;case \"LineSegments\":g=new fa(e(b.geometry),f(b.material));break;case \"PointCloud\":case \"Points\":g=new Kb(e(b.geometry),f(b.material));break;case \"Sprite\":g=new zc(f(b.material));\nbreak;case \"Group\":g=new Bc;break;case \"SkinnedMesh\":console.warn(\"THREE.ObjectLoader.parseObject() does not support SkinnedMesh type. Instantiates Object3D instead.\");default:g=new G}g.uuid=b.uuid;void 0!==b.name&&(g.name=b.name);void 0!==b.matrix?(a.fromArray(b.matrix),a.decompose(g.position,g.quaternion,g.scale)):(void 0!==b.position&&g.position.fromArray(b.position),void 0!==b.rotation&&g.rotation.fromArray(b.rotation),void 0!==b.quaternion&&g.quaternion.fromArray(b.quaternion),void 0!==b.scale&&\ng.scale.fromArray(b.scale));void 0!==b.castShadow&&(g.castShadow=b.castShadow);void 0!==b.receiveShadow&&(g.receiveShadow=b.receiveShadow);b.shadow&&(void 0!==b.shadow.bias&&(g.shadow.bias=b.shadow.bias),void 0!==b.shadow.radius&&(g.shadow.radius=b.shadow.radius),void 0!==b.shadow.mapSize&&g.shadow.mapSize.fromArray(b.shadow.mapSize),void 0!==b.shadow.camera&&(g.shadow.camera=this.parseObject(b.shadow.camera)));void 0!==b.visible&&(g.visible=b.visible);void 0!==b.userData&&(g.userData=b.userData);\nif(void 0!==b.children)for(var k in b.children)g.add(this.parseObject(b.children[k],c,d));if(\"LOD\"===b.type)for(b=b.levels,h=0;h<b.length;h++){var m=b[h];k=g.getObjectByProperty(\"uuid\",m.object);void 0!==k&&g.addLevel(k,m.distance)}return g}}()});wa.prototype={constructor:wa,getPoint:function(a){console.warn(\"THREE.Curve: Warning, getPoint() not implemented!\");return null},getPointAt:function(a){a=this.getUtoTmapping(a);return this.getPoint(a)},getPoints:function(a){a||(a=5);for(var b=[],c=0;c<=a;c++)b.push(this.getPoint(c/\na));return b},getSpacedPoints:function(a){a||(a=5);for(var b=[],c=0;c<=a;c++)b.push(this.getPointAt(c/a));return b},getLength:function(){var a=this.getLengths();return a[a.length-1]},getLengths:function(a){a||(a=this.__arcLengthDivisions?this.__arcLengthDivisions:200);if(this.cacheArcLengths&&this.cacheArcLengths.length===a+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),\nd=c;return this.cacheArcLengths=b},updateArcLengths:function(){this.needsUpdate=!0;this.getLengths()},getUtoTmapping:function(a,b){var c=this.getLengths(),d,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e-1,k;g<=h;)if(d=Math.floor(g+(h-g)/2),k=c[d]-f,0>k)g=d+1;else if(0<k)h=d-1;else{h=d;break}d=h;if(c[d]===f)return d/(e-1);g=c[d];return(d+(f-g)/(c[d+1]-g))/(e-1)},getTangent:function(a){var b=a-1E-4;a+=1E-4;0>b&&(b=0);1<a&&(a=1);b=this.getPoint(b);return this.getPoint(a).clone().sub(b).normalize()},getTangentAt:function(a){a=\nthis.getUtoTmapping(a);return this.getTangent(a)},computeFrenetFrames:function(a,b){var c=new q,d=[],e=[],f=[],g=new q,h=new H,k,m;for(k=0;k<=a;k++)m=k/a,d[k]=this.getTangentAt(m),d[k].normalize();e[0]=new q;f[0]=new q;k=Number.MAX_VALUE;m=Math.abs(d[0].x);var l=Math.abs(d[0].y),p=Math.abs(d[0].z);m<=k&&(k=m,c.set(1,0,0));l<=k&&(k=l,c.set(0,1,0));p<=k&&c.set(0,0,1);g.crossVectors(d[0],c).normalize();e[0].crossVectors(d[0],g);f[0].crossVectors(d[0],e[0]);for(k=1;k<=a;k++)e[k]=e[k-1].clone(),f[k]=f[k-\n1].clone(),g.crossVectors(d[k-1],d[k]),g.length()>Number.EPSILON&&(g.normalize(),c=Math.acos(Q.clamp(d[k-1].dot(d[k]),-1,1)),e[k].applyMatrix4(h.makeRotationAxis(g,c))),f[k].crossVectors(d[k],e[k]);if(!0===b)for(c=Math.acos(Q.clamp(e[0].dot(e[a]),-1,1)),c/=a,0<d[0].dot(g.crossVectors(e[0],e[a]))&&(c=-c),k=1;k<=a;k++)e[k].applyMatrix4(h.makeRotationAxis(d[k],c*k)),f[k].crossVectors(d[k],e[k]);return{tangents:d,normals:e,binormals:f}}};wa.create=function(a,b){a.prototype=Object.create(wa.prototype);\na.prototype.constructor=a;a.prototype.getPoint=b;return a};Qa.prototype=Object.create(wa.prototype);Qa.prototype.constructor=Qa;Qa.prototype.isLineCurve=!0;Qa.prototype.getPoint=function(a){if(1===a)return this.v2.clone();var b=this.v2.clone().sub(this.v1);b.multiplyScalar(a).add(this.v1);return b};Qa.prototype.getPointAt=function(a){return this.getPoint(a)};Qa.prototype.getTangent=function(a){return this.v2.clone().sub(this.v1).normalize()};Yc.prototype=Object.assign(Object.create(wa.prototype),\n{constructor:Yc,add:function(a){this.curves.push(a)},closePath:function(){var a=this.curves[0].getPoint(0),b=this.curves[this.curves.length-1].getPoint(1);a.equals(b)||this.curves.push(new Qa(b,a))},getPoint:function(a){var b=a*this.getLength(),c=this.getCurveLengths();for(a=0;a<c.length;){if(c[a]>=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0===c?0:1-b/c);a++}return null},getLength:function(){var a=this.getCurveLengths();return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=\n!0;this.cacheLengths=null;this.getLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;c<d;c++)b+=this.curves[c].getLength(),a.push(b);return this.cacheLengths=a},getSpacedPoints:function(a){a||(a=40);for(var b=[],c=0;c<=a;c++)b.push(this.getPoint(c/a));this.autoClose&&b.push(b[0]);return b},getPoints:function(a){a=a||12;for(var b=[],c,d=0,e=this.curves;d<e.length;d++)for(var f=\ne[d],f=f.getPoints(f&&f.isEllipseCurve?2*a:f&&f.isLineCurve?1:f&&f.isSplineCurve?a*f.points.length:a),g=0;g<f.length;g++){var h=f[g];c&&c.equals(h)||(b.push(h),c=h)}this.autoClose&&1<b.length&&!b[b.length-1].equals(b[0])&&b.push(b[0]);return b},createPointsGeometry:function(a){a=this.getPoints(a);return this.createGeometry(a)},createSpacedPointsGeometry:function(a){a=this.getSpacedPoints(a);return this.createGeometry(a)},createGeometry:function(a){for(var b=new S,c=0,d=a.length;c<d;c++){var e=a[c];\nb.vertices.push(new q(e.x,e.y,e.z||0))}return b}});Xa.prototype=Object.create(wa.prototype);Xa.prototype.constructor=Xa;Xa.prototype.isEllipseCurve=!0;Xa.prototype.getPoint=function(a){for(var b=2*Math.PI,c=this.aEndAngle-this.aStartAngle,d=Math.abs(c)<Number.EPSILON;0>c;)c+=b;for(;c>b;)c-=b;c<Number.EPSILON&&(c=d?0:b);!0!==this.aClockwise||d||(c=c===b?-b:c-b);b=this.aStartAngle+a*c;a=this.aX+this.xRadius*Math.cos(b);var e=this.aY+this.yRadius*Math.sin(b);0!==this.aRotation&&(b=Math.cos(this.aRotation),\nc=Math.sin(this.aRotation),d=a-this.aX,e-=this.aY,a=d*b-e*c+this.aX,e=d*c+e*b+this.aY);return new C(a,e)};var ed={tangentQuadraticBezier:function(a,b,c,d){return 2*(1-a)*(c-b)+2*a*(d-c)},tangentCubicBezier:function(a,b,c,d,e){return-3*b*(1-a)*(1-a)+3*c*(1-a)*(1-a)-6*a*c*(1-a)+6*a*d*(1-a)-3*a*a*d+3*a*a*e},tangentSpline:function(a,b,c,d,e){return 6*a*a-6*a+(3*a*a-4*a+1)+(-6*a*a+6*a)+(3*a*a-2*a)},interpolate:function(a,b,c,d,e){a=.5*(c-a);d=.5*(d-b);var f=e*e;return(2*b-2*c+a+d)*e*f+(-3*b+3*c-2*a-d)*\nf+a*e+b}};xb.prototype=Object.create(wa.prototype);xb.prototype.constructor=xb;xb.prototype.isSplineCurve=!0;xb.prototype.getPoint=function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0===c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=ed.interpolate;return new C(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a))};yb.prototype=Object.create(wa.prototype);yb.prototype.constructor=yb;yb.prototype.getPoint=function(a){var b=pa.b3;return new C(b(a,this.v0.x,\nthis.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y))};yb.prototype.getTangent=function(a){var b=ed.tangentCubicBezier;return(new C(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y))).normalize()};zb.prototype=Object.create(wa.prototype);zb.prototype.constructor=zb;zb.prototype.getPoint=function(a){var b=pa.b2;return new C(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y))};zb.prototype.getTangent=function(a){var b=\ned.tangentQuadraticBezier;return(new C(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y))).normalize()};var oe=Object.assign(Object.create(Yc.prototype),{fromPoints:function(a){this.moveTo(a[0].x,a[0].y);for(var b=1,c=a.length;b<c;b++)this.lineTo(a[b].x,a[b].y)},moveTo:function(a,b){this.currentPoint.set(a,b)},lineTo:function(a,b){var c=new Qa(this.currentPoint.clone(),new C(a,b));this.curves.push(c);this.currentPoint.set(a,b)},quadraticCurveTo:function(a,b,c,d){a=new zb(this.currentPoint.clone(),\nnew C(a,b),new C(c,d));this.curves.push(a);this.currentPoint.set(c,d)},bezierCurveTo:function(a,b,c,d,e,f){a=new yb(this.currentPoint.clone(),new C(a,b),new C(c,d),new C(e,f));this.curves.push(a);this.currentPoint.set(e,f)},splineThru:function(a){var b=[this.currentPoint.clone()].concat(a),b=new xb(b);this.curves.push(b);this.currentPoint.copy(a[a.length-1])},arc:function(a,b,c,d,e,f){this.absarc(a+this.currentPoint.x,b+this.currentPoint.y,c,d,e,f)},absarc:function(a,b,c,d,e,f){this.absellipse(a,\nb,c,c,d,e,f)},ellipse:function(a,b,c,d,e,f,g,h){this.absellipse(a+this.currentPoint.x,b+this.currentPoint.y,c,d,e,f,g,h)},absellipse:function(a,b,c,d,e,f,g,h){a=new Xa(a,b,c,d,e,f,g,h);0<this.curves.length&&(b=a.getPoint(0),b.equals(this.currentPoint)||this.lineTo(b.x,b.y));this.curves.push(a);a=a.getPoint(1);this.currentPoint.copy(a)}});Ab.prototype=Object.assign(Object.create(oe),{constructor:Ab,getPointsHoles:function(a){for(var b=[],c=0,d=this.holes.length;c<d;c++)b[c]=this.holes[c].getPoints(a);\nreturn b},extractAllPoints:function(a){return{shape:this.getPoints(a),holes:this.getPointsHoles(a)}},extractPoints:function(a){return this.extractAllPoints(a)}});Zc.prototype=oe;oe.constructor=Zc;Ud.prototype={moveTo:function(a,b){this.currentPath=new Zc;this.subPaths.push(this.currentPath);this.currentPath.moveTo(a,b)},lineTo:function(a,b){this.currentPath.lineTo(a,b)},quadraticCurveTo:function(a,b,c,d){this.currentPath.quadraticCurveTo(a,b,c,d)},bezierCurveTo:function(a,b,c,d,e,f){this.currentPath.bezierCurveTo(a,\nb,c,d,e,f)},splineThru:function(a){this.currentPath.splineThru(a)},toShapes:function(a,b){function c(a){for(var b=[],c=0,d=a.length;c<d;c++){var e=a[c],f=new Ab;f.curves=e.curves;b.push(f)}return b}function d(a,b){for(var c=b.length,d=!1,e=c-1,f=0;f<c;e=f++){var g=b[e],h=b[f],k=h.x-g.x,m=h.y-g.y;if(Math.abs(m)>Number.EPSILON){if(0>m&&(g=b[f],k=-k,h=b[e],m=-m),!(a.y<g.y||a.y>h.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=m*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=\na.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=pa.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);var g,h,k,m=[];if(1===f.length)return h=f[0],k=new Ab,k.curves=h.curves,m.push(k),m;var l=!e(f[0].getPoints()),l=a?!l:l;k=[];var p=[],n=[],q=0,w;p[q]=void 0;n[q]=[];for(var u=0,y=f.length;u<y;u++)h=f[u],w=h.getPoints(),g=e(w),(g=a?!g:g)?(!l&&p[q]&&q++,p[q]={s:new Ab,p:w},p[q].s.curves=h.curves,l&&q++,n[q]=[]):n[q].push({h:h,p:w[0]});if(!p[0])return c(f);if(1<p.length){u=\n!1;h=[];e=0;for(f=p.length;e<f;e++)k[e]=[];e=0;for(f=p.length;e<f;e++)for(g=n[e],l=0;l<g.length;l++){q=g[l];w=!0;for(y=0;y<p.length;y++)d(q.p,p[y].p)&&(e!==y&&h.push({froms:e,tos:y,hole:l}),w?(w=!1,k[y].push(q)):u=!0);w&&k[e].push(q)}0<h.length&&(u||(n=k))}u=0;for(e=p.length;u<e;u++)for(k=p[u].s,m.push(k),h=n[u],f=0,g=h.length;f<g;f++)k.holes.push(h[f].h);return m}};Object.assign(Vd.prototype,{isFont:!0,generateShapes:function(a,b,c){void 0===b&&(b=100);void 0===c&&(c=4);var d=this.data;a=String(a).split(\"\");\nvar e=b/d.resolution,f=0;b=[];for(var g=0;g<a.length;g++){var h;h=e;var k=f,m=d.glyphs[a[g]]||d.glyphs[\"?\"];if(m){var l=new Ud,p=[],n=pa.b2,q=pa.b3,w,u,y,t,v,D,z,A;if(m.o)for(var C=m._cachedOutline||(m._cachedOutline=m.o.split(\" \")),E=0,G=C.length;E<G;)switch(C[E++]){case \"m\":w=C[E++]*h+k;u=C[E++]*h;l.moveTo(w,u);break;case \"l\":w=C[E++]*h+k;u=C[E++]*h;l.lineTo(w,u);break;case \"q\":w=C[E++]*h+k;u=C[E++]*h;v=C[E++]*h+k;D=C[E++]*h;l.quadraticCurveTo(v,D,w,u);if(t=p[p.length-1]){y=t.x;t=t.y;for(var H=\n1;H<=c;H++){var J=H/c;n(J,y,v,w);n(J,t,D,u)}}break;case \"b\":if(w=C[E++]*h+k,u=C[E++]*h,v=C[E++]*h+k,D=C[E++]*h,z=C[E++]*h+k,A=C[E++]*h,l.bezierCurveTo(v,D,z,A,w,u),t=p[p.length-1])for(y=t.x,t=t.y,H=1;H<=c;H++)J=H/c,q(J,y,v,z,w),q(J,t,D,A,u)}h={offset:m.ha*h,path:l}}else h=void 0;f+=h.offset;b.push(h.path)}c=[];d=0;for(a=b.length;d<a;d++)Array.prototype.push.apply(c,b[d].toShapes());return c}});Object.assign(Ge.prototype,{load:function(a,b,c,d){var e=this;(new Ma(this.manager)).load(a,function(a){var c;\ntry{c=JSON.parse(a)}catch(d){console.warn(\"THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.\"),c=JSON.parse(a.substring(65,a.length-2))}a=e.parse(c);b&&b(a)},c,d)},parse:function(a){return new Vd(a)}});var Hd,Zd={getContext:function(){void 0===Hd&&(Hd=new (window.AudioContext||window.webkitAudioContext));return Hd},setContext:function(a){Hd=a}};Object.assign(Wd.prototype,{load:function(a,b,c,d){var e=new Ma(this.manager);e.setResponseType(\"arraybuffer\");e.load(a,\nfunction(a){Zd.getContext().decodeAudioData(a,function(a){b(a)})},c,d)}});Xd.prototype=Object.assign(Object.create(na.prototype),{constructor:Xd,isRectAreaLight:!0,copy:function(a){na.prototype.copy.call(this,a);this.width=a.width;this.height=a.height;return this}});Object.assign(He.prototype,{update:function(){var a,b,c,d,e,f,g,h=new H,k=new H;return function(m){if(a!==this||b!==m.focus||c!==m.fov||d!==m.aspect*this.aspect||e!==m.near||f!==m.far||g!==m.zoom){a=this;b=m.focus;c=m.fov;d=m.aspect*this.aspect;\ne=m.near;f=m.far;g=m.zoom;var l=m.projectionMatrix.clone(),p=this.eyeSep/2,n=p*e/b,q=e*Math.tan(Q.DEG2RAD*c*.5)/g,w;k.elements[12]=-p;h.elements[12]=p;p=-q*d+n;w=q*d+n;l.elements[0]=2*e/(w-p);l.elements[8]=(w+p)/(w-p);this.cameraL.projectionMatrix.copy(l);p=-q*d-n;w=q*d-n;l.elements[0]=2*e/(w-p);l.elements[8]=(w+p)/(w-p);this.cameraR.projectionMatrix.copy(l)}this.cameraL.matrixWorld.copy(m.matrixWorld).multiply(k);this.cameraR.matrixWorld.copy(m.matrixWorld).multiply(h)}}()});Bd.prototype=Object.create(G.prototype);\nBd.prototype.constructor=Bd;Yd.prototype=Object.assign(Object.create(G.prototype),{constructor:Yd,getInput:function(){return this.gain},removeFilter:function(){null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null)},getFilter:function(){return this.filter},setFilter:function(a){null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination);\nthis.filter=a;this.gain.connect(this.filter);this.filter.connect(this.context.destination)},getMasterVolume:function(){return this.gain.gain.value},setMasterVolume:function(a){this.gain.gain.value=a},updateMatrixWorld:function(){var a=new q,b=new da,c=new q,d=new q;return function(e){G.prototype.updateMatrixWorld.call(this,e);e=this.context.listener;var f=this.up;this.matrixWorld.decompose(a,b,c);d.set(0,0,-1).applyQuaternion(b);e.positionX?(e.positionX.setValueAtTime(a.x,this.context.currentTime),\ne.positionY.setValueAtTime(a.y,this.context.currentTime),e.positionZ.setValueAtTime(a.z,this.context.currentTime),e.forwardX.setValueAtTime(d.x,this.context.currentTime),e.forwardY.setValueAtTime(d.y,this.context.currentTime),e.forwardZ.setValueAtTime(d.z,this.context.currentTime),e.upX.setValueAtTime(f.x,this.context.currentTime),e.upY.setValueAtTime(f.y,this.context.currentTime),e.upZ.setValueAtTime(f.z,this.context.currentTime)):(e.setPosition(a.x,a.y,a.z),e.setOrientation(d.x,d.y,d.z,f.x,f.y,\nf.z))}}()});ec.prototype=Object.assign(Object.create(G.prototype),{constructor:ec,getOutput:function(){return this.gain},setNodeSource:function(a){this.hasPlaybackControl=!1;this.sourceType=\"audioNode\";this.source=a;this.connect();return this},setBuffer:function(a){this.buffer=a;this.sourceType=\"buffer\";this.autoplay&&this.play();return this},play:function(){if(!0===this.isPlaying)console.warn(\"THREE.Audio: Audio is already playing.\");else if(!1===this.hasPlaybackControl)console.warn(\"THREE.Audio: this Audio has no playback control.\");\nelse{var a=this.context.createBufferSource();a.buffer=this.buffer;a.loop=this.loop;a.onended=this.onEnded.bind(this);a.playbackRate.setValueAtTime(this.playbackRate,this.startTime);a.start(0,this.startTime);this.isPlaying=!0;this.source=a;return this.connect()}},pause:function(){if(!1===this.hasPlaybackControl)console.warn(\"THREE.Audio: this Audio has no playback control.\");else return this.source.stop(),this.startTime=this.context.currentTime,this.isPlaying=!1,this},stop:function(){if(!1===this.hasPlaybackControl)console.warn(\"THREE.Audio: this Audio has no playback control.\");\nelse return this.source.stop(),this.startTime=0,this.isPlaying=!1,this},connect:function(){if(0<this.filters.length){this.source.connect(this.filters[0]);for(var a=1,b=this.filters.length;a<b;a++)this.filters[a-1].connect(this.filters[a]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this},disconnect:function(){if(0<this.filters.length){this.source.disconnect(this.filters[0]);for(var a=1,b=this.filters.length;a<b;a++)this.filters[a-\n1].disconnect(this.filters[a]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this},getFilters:function(){return this.filters},setFilters:function(a){a||(a=[]);!0===this.isPlaying?(this.disconnect(),this.filters=a,this.connect()):this.filters=a;return this},getFilter:function(){return this.getFilters()[0]},setFilter:function(a){return this.setFilters(a?[a]:[])},setPlaybackRate:function(a){if(!1===this.hasPlaybackControl)console.warn(\"THREE.Audio: this Audio has no playback control.\");\nelse return this.playbackRate=a,!0===this.isPlaying&&this.source.playbackRate.setValueAtTime(this.playbackRate,this.context.currentTime),this},getPlaybackRate:function(){return this.playbackRate},onEnded:function(){this.isPlaying=!1},getLoop:function(){return!1===this.hasPlaybackControl?(console.warn(\"THREE.Audio: this Audio has no playback control.\"),!1):this.loop},setLoop:function(a){if(!1===this.hasPlaybackControl)console.warn(\"THREE.Audio: this Audio has no playback control.\");else return this.loop=\na,!0===this.isPlaying&&(this.source.loop=this.loop),this},getVolume:function(){return this.gain.gain.value},setVolume:function(a){this.gain.gain.value=a;return this}});$d.prototype=Object.assign(Object.create(ec.prototype),{constructor:$d,getOutput:function(){return this.panner},getRefDistance:function(){return this.panner.refDistance},setRefDistance:function(a){this.panner.refDistance=a},getRolloffFactor:function(){return this.panner.rolloffFactor},setRolloffFactor:function(a){this.panner.rolloffFactor=\na},getDistanceModel:function(){return this.panner.distanceModel},setDistanceModel:function(a){this.panner.distanceModel=a},getMaxDistance:function(){return this.panner.maxDistance},setMaxDistance:function(a){this.panner.maxDistance=a},updateMatrixWorld:function(){var a=new q;return function(b){G.prototype.updateMatrixWorld.call(this,b);a.setFromMatrixPosition(this.matrixWorld);this.panner.setPosition(a.x,a.y,a.z)}}()});Object.assign(ae.prototype,{getFrequencyData:function(){this.analyser.getByteFrequencyData(this.data);\nreturn this.data},getAverageFrequency:function(){for(var a=0,b=this.getFrequencyData(),c=0;c<b.length;c++)a+=b[c];return a/b.length}});Cd.prototype={constructor:Cd,accumulate:function(a,b){var c=this.buffer,d=this.valueSize,e=a*d+d,f=this.cumulativeWeight;if(0===f){for(f=0;f!==d;++f)c[e+f]=c[f];f=b}else f+=b,this._mixBufferRegion(c,e,0,b/f,d);this.cumulativeWeight=f},apply:function(a){var b=this.valueSize,c=this.buffer;a=a*b+b;var d=this.cumulativeWeight,e=this.binding;this.cumulativeWeight=0;1>d&&\nthis._mixBufferRegion(c,a,3*b,1-d,b);for(var d=b,f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d,e){da.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=\n1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}};ka.prototype={constructor:ka,getValue:function(a,b){this.bind();this.getValue(a,b)},setValue:function(a,b){this.bind();this.setValue(a,b)},bind:function(){var a=this.node,b=this.parsedPath,c=b.objectName,d=b.propertyName,e=b.propertyIndex;a||(this.node=a=ka.findNode(this.rootNode,b.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(a){if(c){var f=b.objectIndex;switch(c){case \"materials\":if(!a.material){console.error(\"  can not bind to material as node does not have a material\",\nthis);return}if(!a.material.materials){console.error(\"  can not bind to material.materials as node.material does not have a materials array\",this);return}a=a.material.materials;break;case \"bones\":if(!a.skeleton){console.error(\"  can not bind to bones as node does not have a skeleton\",this);return}a=a.skeleton.bones;for(c=0;c<a.length;c++)if(a[c].name===f){f=c;break}break;default:if(void 0===a[c]){console.error(\"  can not bind to objectName of node, undefined\",this);return}a=a[c]}if(void 0!==f){if(void 0===\na[f]){console.error(\"  trying to bind to objectIndex of objectName, but is undefined:\",this,a);return}a=a[f]}}f=a[d];if(void 0===f)console.error(\"  trying to update property for track: \"+b.nodeName+\".\"+d+\" but it wasn't found.\",a);else{b=this.Versioning.None;void 0!==a.needsUpdate?(b=this.Versioning.NeedsUpdate,this.targetObject=a):void 0!==a.matrixWorldNeedsUpdate&&(b=this.Versioning.MatrixWorldNeedsUpdate,this.targetObject=a);c=this.BindingType.Direct;if(void 0!==e){if(\"morphTargetInfluences\"===\nd){if(!a.geometry){console.error(\"  can not bind to morphTargetInfluences becasuse node does not have a geometry\",this);return}if(!a.geometry.morphTargets){console.error(\"  can not bind to morphTargetInfluences becasuse node does not have a geometry.morphTargets\",this);return}for(c=0;c<this.node.geometry.morphTargets.length;c++)if(a.geometry.morphTargets[c].name===e){e=c;break}}c=this.BindingType.ArrayElement;this.resolvedProperty=f;this.propertyIndex=e}else void 0!==f.fromArray&&void 0!==f.toArray?\n(c=this.BindingType.HasFromToArray,this.resolvedProperty=f):void 0!==f.length?(c=this.BindingType.EntireArray,this.resolvedProperty=f):this.propertyName=d;this.getValue=this.GetterByBindingType[c];this.setValue=this.SetterByBindingTypeAndVersioning[c][b]}}else console.error(\"  trying to update node for track: \"+this.path+\" but it wasn't found.\")},unbind:function(){this.node=null;this.getValue=this._getValue_unbound;this.setValue=this._setValue_unbound}};Object.assign(ka.prototype,{_getValue_unavailable:function(){},\n_setValue_unavailable:function(){},_getValue_unbound:ka.prototype.getValue,_setValue_unbound:ka.prototype.setValue,BindingType:{Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Versioning:{None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},GetterByBindingType:[function(a,b){a[b]=this.node[this.propertyName]},function(a,b){for(var c=this.resolvedProperty,d=0,e=c.length;d!==e;++d)a[b++]=c[d]},function(a,b){a[b]=this.resolvedProperty[this.propertyIndex]},function(a,b){this.resolvedProperty.toArray(a,\nb)}],SetterByBindingTypeAndVersioning:[[function(a,b){this.node[this.propertyName]=a[b]},function(a,b){this.node[this.propertyName]=a[b];this.targetObject.needsUpdate=!0},function(a,b){this.node[this.propertyName]=a[b];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(a,b){for(var c=this.resolvedProperty,d=0,e=c.length;d!==e;++d)c[d]=a[b++]},function(a,b){for(var c=this.resolvedProperty,d=0,e=c.length;d!==e;++d)c[d]=a[b++];this.targetObject.needsUpdate=!0},function(a,b){for(var c=this.resolvedProperty,\nd=0,e=c.length;d!==e;++d)c[d]=a[b++];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(a,b){this.resolvedProperty[this.propertyIndex]=a[b]},function(a,b){this.resolvedProperty[this.propertyIndex]=a[b];this.targetObject.needsUpdate=!0},function(a,b){this.resolvedProperty[this.propertyIndex]=a[b];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(a,b){this.resolvedProperty.fromArray(a,b)},function(a,b){this.resolvedProperty.fromArray(a,b);this.targetObject.needsUpdate=!0},function(a,b){this.resolvedProperty.fromArray(a,\nb);this.targetObject.matrixWorldNeedsUpdate=!0}]]});ka.Composite=function(a,b,c){c=c||ka.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)};ka.Composite.prototype={constructor:ka.Composite,getValue:function(a,b){this.bind();var c=this._bindings[this._targetGroup.nCachedObjects_];void 0!==c&&c.getValue(a,b)},setValue:function(a,b){for(var c=this._bindings,d=this._targetGroup.nCachedObjects_,e=c.length;d!==e;++d)c[d].setValue(a,b)},bind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,\nc=a.length;b!==c;++b)a[b].bind()},unbind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].unbind()}};ka.create=function(a,b,c){return a&&a.isAnimationObjectGroup?new ka.Composite(a,b,c):new ka(a,b,c)};ka.parseTrackName=function(a){var b=/^((?:[\\w-]+[\\/:])*)([\\w-]+)?(?:\\.([\\w-]+)(?:\\[(.+)\\])?)?\\.([\\w-]+)(?:\\[(.+)\\])?$/.exec(a);if(!b)throw Error(\"cannot parse trackName at all: \"+a);b={nodeName:b[2],objectName:b[3],objectIndex:b[4],propertyName:b[5],propertyIndex:b[6]};\nif(null===b.propertyName||0===b.propertyName.length)throw Error(\"can not parse propertyName from trackName: \"+a);return b};ka.findNode=function(a,b){if(!b||\"\"===b||\"root\"===b||\".\"===b||-1===b||b===a.name||b===a.uuid)return a;if(a.skeleton){var c=function(a){for(var c=0;c<a.bones.length;c++){var d=a.bones[c];if(d.name===b)return d}return null}(a.skeleton);if(c)return c}if(a.children){var d=function(a){for(var c=0;c<a.length;c++){var g=a[c];if(g.name===b||g.uuid===b||(g=d(g.children)))return g}return null};\nif(c=d(a.children))return c}return null};be.prototype={constructor:be,isAnimationObjectGroup:!0,add:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._paths,g=this._parsedPaths,h=this._bindings,k=h.length,l=0,q=arguments.length;l!==q;++l){var p=arguments[l],n=p.uuid,r=e[n];if(void 0===r){r=c++;e[n]=r;b.push(p);for(var n=0,w=k;n!==w;++n)h[n].push(new ka(p,f[n],g[n]))}else if(r<d){var u=--d,w=b[u];e[w.uuid]=r;b[r]=w;e[n]=u;b[u]=p;n=0;for(w=k;n!==w;++n){var y=\nh[n],t=y[r];y[r]=y[u];void 0===t&&(t=new ka(p,f[n],g[n]));y[u]=t}}else void 0!==b[r]&&console.error(\"Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes...\")}this.nCachedObjects_=d},remove:function(a){for(var b=this._objects,c=this.nCachedObjects_,d=this._indicesByUUID,e=this._bindings,f=e.length,g=0,h=arguments.length;g!==h;++g){var k=arguments[g],l=k.uuid,q=d[l];if(void 0!==q&&q>=c){var p=c++,n=b[p];d[n.uuid]=q;b[q]=n;d[l]=p;b[p]=\nk;k=0;for(l=f;k!==l;++k){var n=e[k],r=n[q];n[q]=n[p];n[p]=r}}}this.nCachedObjects_=c},uncache:function(a){for(var b=this._objects,c=b.length,d=this.nCachedObjects_,e=this._indicesByUUID,f=this._bindings,g=f.length,h=0,k=arguments.length;h!==k;++h){var l=arguments[h].uuid,q=e[l];if(void 0!==q)if(delete e[l],q<d){var l=--d,p=b[l],n=--c,r=b[n];e[p.uuid]=q;b[q]=p;e[r.uuid]=l;b[l]=r;b.pop();p=0;for(r=g;p!==r;++p){var w=f[p],u=w[n];w[q]=w[l];w[l]=u;w.pop()}}else for(n=--c,r=b[n],e[r.uuid]=q,b[q]=r,b.pop(),\np=0,r=g;p!==r;++p)w=f[p],w[q]=w[n],w.pop()}this.nCachedObjects_=d},subscribe_:function(a,b){var c=this._bindingsIndicesByPath,d=c[a],e=this._bindings;if(void 0!==d)return e[d];var f=this._paths,g=this._parsedPaths,h=this._objects,k=this.nCachedObjects_,l=Array(h.length),d=e.length;c[a]=d;f.push(a);g.push(b);e.push(l);c=k;for(d=h.length;c!==d;++c)l[c]=new ka(h[c],a,b);return l},unsubscribe_:function(a){var b=this._bindingsIndicesByPath,c=b[a];if(void 0!==c){var d=this._paths,e=this._parsedPaths,f=\nthis._bindings,g=f.length-1,h=f[g];b[a[g]]=c;f[c]=h;f.pop();e[c]=e[g];e.pop();d[c]=d[g];d.pop()}}};ce.prototype={constructor:ce,play:function(){this._mixer._activateAction(this);return this},stop:function(){this._mixer._deactivateAction(this);return this.reset()},reset:function(){this.paused=!1;this.enabled=!0;this.time=0;this._loopCount=-1;this._startTime=null;return this.stopFading().stopWarping()},isRunning:function(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&\nthis._mixer._isActiveAction(this)},isScheduled:function(){return this._mixer._isActiveAction(this)},startAt:function(a){this._startTime=a;return this},setLoop:function(a,b){this.loop=a;this.repetitions=b;return this},setEffectiveWeight:function(a){this.weight=a;this._effectiveWeight=this.enabled?a:0;return this.stopFading()},getEffectiveWeight:function(){return this._effectiveWeight},fadeIn:function(a){return this._scheduleFading(a,0,1)},fadeOut:function(a){return this._scheduleFading(a,1,0)},crossFadeFrom:function(a,\nb,c){a.fadeOut(b);this.fadeIn(b);if(c){c=this._clip.duration;var d=a._clip.duration,e=c/d;a.warp(1,d/c,b);this.warp(e,1,b)}return this},crossFadeTo:function(a,b,c){return a.crossFadeFrom(this,b,c)},stopFading:function(){var a=this._weightInterpolant;null!==a&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(a));return this},setEffectiveTimeScale:function(a){this.timeScale=a;this._effectiveTimeScale=this.paused?0:a;return this.stopWarping()},getEffectiveTimeScale:function(){return this._effectiveTimeScale},\nsetDuration:function(a){this.timeScale=this._clip.duration/a;return this.stopWarping()},syncWith:function(a){this.time=a.time;this.timeScale=a.timeScale;return this.stopWarping()},halt:function(a){return this.warp(this._effectiveTimeScale,0,a)},warp:function(a,b,c){var d=this._mixer,e=d.time,f=this._timeScaleInterpolant,g=this.timeScale;null===f&&(this._timeScaleInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;d[1]=e+c;f[0]=a/g;f[1]=b/g;return this},stopWarping:function(){var a=\nthis._timeScaleInterpolant;null!==a&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(a));return this},getMixer:function(){return this._mixer},getClip:function(){return this._clip},getRoot:function(){return this._localRoot||this._mixer._root},_update:function(a,b,c,d){var e=this._startTime;if(null!==e){b=(a-e)*c;if(0>b||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0<a){b=this._interpolants;for(var e=this._propertyBindings,\nf=0,g=b.length;f!==g;++f)b[f].evaluate(c),e[f].accumulate(d,a)}},_updateWeight:function(a){var b=0;if(this.enabled){var b=this.weight,c=this._weightInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){var b=this.timeScale,c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0],b=b*d;a>c.parameterPositions[1]&&(this.stopWarping(),0===\nb?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a;if(0===a)return b;var c=this._clip.duration,d=this.loop,e=this._loopCount;if(2200===d)a:{if(-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1)),b>=c)b=c;else if(0>b)b=0;else break a;this.clampWhenFinished?this.paused=!0:this.enabled=!1;this._mixer.dispatchEvent({type:\"finished\",action:this,direction:0>a?-1:1})}else{d=2202===d;-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,\nd)):this._setEndings(0===this.repetitions,!0,d));if(b>=c||0>b){var f=Math.floor(b/c),b=b-c*f,e=e+Math.abs(f),g=this.repetitions-e;0>g?(this.clampWhenFinished?this.paused=!0:this.enabled=!1,b=0<a?c:0,this._mixer.dispatchEvent({type:\"finished\",action:this,direction:0<a?1:-1})):(0===g?(a=0>a,this._setEndings(a,!a,d)):this._setEndings(!1,!1,d),this._loopCount=e,this._mixer.dispatchEvent({type:\"loop\",action:this,loopDelta:f}))}if(d&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,\nb,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd?2401:2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}};Object.assign(de.prototype,oa.prototype,{clipAction:function(a,b){var c=b||this._root,\nd=c.uuid,e=\"string\"===typeof a?ta.findByName(c,a):a,c=null!==e?e.uuid:a,f=this._actionsByClip[c],g=null;if(void 0!==f){g=f.actionByRoot[d];if(void 0!==g)return g;g=f.knownActions[0];null===e&&(e=g._clip)}if(null===e)return null;e=new ce(this,e,b);this._bindAction(e,g);this._addInactiveAction(e,c,d);return e},existingAction:function(a,b){var c=b||this._root,d=c.uuid,c=\"string\"===typeof a?ta.findByName(c,a):a,c=this._actionsByClip[c?c.uuid:a];return void 0!==c?c.actionByRoot[d]||null:null},stopAllAction:function(){for(var a=\nthis._actions,b=this._nActiveActions,c=this._bindings,d=this._nActiveBindings,e=this._nActiveBindings=this._nActiveActions=0;e!==b;++e)a[e].reset();for(e=0;e!==d;++e)c[e].useCount=0;return this},update:function(a){a*=this.timeScale;for(var b=this._actions,c=this._nActiveActions,d=this.time+=a,e=Math.sign(a),f=this._accuIndex^=1,g=0;g!==c;++g){var h=b[g];h.enabled&&h._update(d,a,e,f)}a=this._bindings;b=this._nActiveBindings;for(g=0;g!==b;++g)a[g].apply(f);return this},getRoot:function(){return this._root},\nuncacheClip:function(a){var b=this._actions;a=a.uuid;var c=this._actionsByClip,d=c[a];if(void 0!==d){for(var d=d.knownActions,e=0,f=d.length;e!==f;++e){var g=d[e];this._deactivateAction(g);var h=g._cacheIndex,k=b[b.length-1];g._cacheIndex=null;g._byClipCacheIndex=null;k._cacheIndex=h;b[h]=k;b.pop();this._removeInactiveBindingsForAction(g)}delete c[a]}},uncacheRoot:function(a){a=a.uuid;var b=this._actionsByClip,c;for(c in b){var d=b[c].actionByRoot[a];void 0!==d&&(this._deactivateAction(d),this._removeInactiveAction(d))}c=\nthis._bindingsByRootAndName[a];if(void 0!==c)for(var e in c)a=c[e],a.restoreOriginalState(),this._removeInactiveBinding(a)},uncacheAction:function(a,b){var c=this.existingAction(a,b);null!==c&&(this._deactivateAction(c),this._removeInactiveAction(c))}});Object.assign(de.prototype,{_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings,g=a._interpolants,h=c.uuid,k=this._bindingsByRootAndName,l=k[h];void 0===l&&(l={},k[h]=l);for(k=0;k!==e;++k){var q=\nd[k],p=q.name,n=l[p];if(void 0===n){n=f[k];if(void 0!==n){null===n._cacheIndex&&(++n.referenceCount,this._addInactiveBinding(n,h,p));continue}n=new Cd(ka.create(c,p,b&&b._propertyBindings[k].binding.parsedPath),q.ValueTypeName,q.getValueSize());++n.referenceCount;this._addInactiveBinding(n,h,p)}f[k]=n;g[k].resultBuffer=n.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.uuid,d=this._actionsByClip[c];this._bindAction(a,\nd&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip=\n{};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},_isActiveAction:function(a){a=a._cacheIndex;\nreturn null!==a&&a<this._nActiveActions},_addInactiveAction:function(a,b,c){var d=this._actions,e=this._actionsByClip,f=e[b];void 0===f?(f={knownActions:[a],actionByRoot:{}},a._byClipCacheIndex=0,e[b]=f):(b=f.knownActions,a._byClipCacheIndex=b.length,b.push(a));a._cacheIndex=d.length;d.push(a);f.actionByRoot[c]=a},_removeInactiveAction:function(a){var b=this._actions,c=b[b.length-1],d=a._cacheIndex;c._cacheIndex=d;b[d]=c;b.pop();a._cacheIndex=null;var c=a._clip.uuid,d=this._actionsByClip,e=d[c],f=\ne.knownActions,g=f[f.length-1],h=a._byClipCacheIndex;g._byClipCacheIndex=h;f[h]=g;f.pop();a._byClipCacheIndex=null;delete e.actionByRoot[(b._localRoot||this._root).uuid];0===f.length&&delete d[c];this._removeInactiveBindingsForAction(a)},_removeInactiveBindingsForAction:function(a){a=a._propertyBindings;for(var b=0,c=a.length;b!==c;++b){var d=a[b];0===--d.referenceCount&&this._removeInactiveBinding(d)}},_lendAction:function(a){var b=this._actions,c=a._cacheIndex,d=this._nActiveActions++,e=b[d];a._cacheIndex=\nd;b[d]=a;e._cacheIndex=c;b[c]=e},_takeBackAction:function(a){var b=this._actions,c=a._cacheIndex,d=--this._nActiveActions,e=b[d];a._cacheIndex=d;b[d]=a;e._cacheIndex=c;b[c]=e},_addInactiveBinding:function(a,b,c){var d=this._bindingsByRootAndName,e=d[b],f=this._bindings;void 0===e&&(e={},d[b]=e);e[c]=a;a._cacheIndex=f.length;f.push(a)},_removeInactiveBinding:function(a){var b=this._bindings,c=a.binding,d=c.rootNode.uuid,c=c.path,e=this._bindingsByRootAndName,f=e[d],g=b[b.length-1];a=a._cacheIndex;\ng._cacheIndex=a;b[a]=g;b.pop();delete f[c];a:{for(var h in f)break a;delete e[d]}},_lendBinding:function(a){var b=this._bindings,c=a._cacheIndex,d=this._nActiveBindings++,e=b[d];a._cacheIndex=d;b[d]=a;e._cacheIndex=c;b[c]=e},_takeBackBinding:function(a){var b=this._bindings,c=a._cacheIndex,d=--this._nActiveBindings,e=b[d];a._cacheIndex=d;b[d]=a;e._cacheIndex=c;b[c]=e},_lendControlInterpolant:function(){var a=this._controlInterpolants,b=this._nActiveControlInterpolants++,c=a[b];void 0===c&&(c=new Wc(new Float32Array(2),\nnew Float32Array(2),1,this._controlInterpolantsResultBuffer),c.__cacheIndex=b,a[b]=c);return c},_takeBackControlInterpolant:function(a){var b=this._controlInterpolants,c=a.__cacheIndex,d=--this._nActiveControlInterpolants,e=b[d];a.__cacheIndex=d;b[d]=a;e.__cacheIndex=c;b[c]=e},_controlInterpolantsResultBuffer:new Float32Array(1)});Dd.prototype.clone=function(){return new Dd(void 0===this.value.clone?this.value:this.value.clone())};Bb.prototype=Object.create(D.prototype);Bb.prototype.constructor=Bb;\nBb.prototype.isInstancedBufferGeometry=!0;Bb.prototype.addGroup=function(a,b,c){this.groups.push({start:a,count:b,materialIndex:c})};Bb.prototype.copy=function(a){var b=a.index;null!==b&&this.setIndex(b.clone());var b=a.attributes,c;for(c in b)this.addAttribute(c,b[c].clone());a=a.groups;c=0;for(b=a.length;c<b;c++){var d=a[c];this.addGroup(d.start,d.count,d.materialIndex)}return this};ee.prototype={constructor:ee,isInterleavedBufferAttribute:!0,get count(){return this.data.count},get array(){return this.data.array},\nsetX:function(a,b){this.data.array[a*this.data.stride+this.offset]=b;return this},setY:function(a,b){this.data.array[a*this.data.stride+this.offset+1]=b;return this},setZ:function(a,b){this.data.array[a*this.data.stride+this.offset+2]=b;return this},setW:function(a,b){this.data.array[a*this.data.stride+this.offset+3]=b;return this},getX:function(a){return this.data.array[a*this.data.stride+this.offset]},getY:function(a){return this.data.array[a*this.data.stride+this.offset+1]},getZ:function(a){return this.data.array[a*\nthis.data.stride+this.offset+2]},getW:function(a){return this.data.array[a*this.data.stride+this.offset+3]},setXY:function(a,b,c){a=a*this.data.stride+this.offset;this.data.array[a+0]=b;this.data.array[a+1]=c;return this},setXYZ:function(a,b,c,d){a=a*this.data.stride+this.offset;this.data.array[a+0]=b;this.data.array[a+1]=c;this.data.array[a+2]=d;return this},setXYZW:function(a,b,c,d,e){a=a*this.data.stride+this.offset;this.data.array[a+0]=b;this.data.array[a+1]=c;this.data.array[a+2]=d;this.data.array[a+\n3]=e;return this}};fc.prototype={constructor:fc,isInterleavedBuffer:!0,set needsUpdate(a){!0===a&&this.version++},setArray:function(a){if(Array.isArray(a))throw new TypeError(\"THREE.BufferAttribute: array should be a Typed Array.\");this.count=void 0!==a?a.length/this.stride:0;this.array=a},setDynamic:function(a){this.dynamic=a;return this},copy:function(a){this.array=new a.array.constructor(a.array);this.count=a.count;this.stride=a.stride;this.dynamic=a.dynamic;return this},copyAt:function(a,b,c){a*=\nthis.stride;c*=b.stride;for(var d=0,e=this.stride;d<e;d++)this.array[a+d]=b.array[c+d];return this},set:function(a,b){void 0===b&&(b=0);this.array.set(a,b);return this},clone:function(){return(new this.constructor).copy(this)},onUpload:function(a){this.onUploadCallback=a;return this}};gc.prototype=Object.create(fc.prototype);gc.prototype.constructor=gc;gc.prototype.isInstancedInterleavedBuffer=!0;gc.prototype.copy=function(a){fc.prototype.copy.call(this,a);this.meshPerAttribute=a.meshPerAttribute;\nreturn this};hc.prototype=Object.create(y.prototype);hc.prototype.constructor=hc;hc.prototype.isInstancedBufferAttribute=!0;hc.prototype.copy=function(a){y.prototype.copy.call(this,a);this.meshPerAttribute=a.meshPerAttribute;return this};fe.prototype={constructor:fe,linePrecision:1,set:function(a,b){this.ray.set(a,b)},setFromCamera:function(a,b){b&&b.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(b.matrixWorld),this.ray.direction.set(a.x,a.y,.5).unproject(b).sub(this.ray.origin).normalize()):\nb&&b.isOrthographicCamera?(this.ray.origin.set(a.x,a.y,(b.near+b.far)/(b.near-b.far)).unproject(b),this.ray.direction.set(0,0,-1).transformDirection(b.matrixWorld)):console.error(\"THREE.Raycaster: Unsupported camera type.\")},intersectObject:function(a,b){var c=[];ge(a,this,c,b);c.sort(Ie);return c},intersectObjects:function(a,b){var c=[];if(!1===Array.isArray(a))return console.warn(\"THREE.Raycaster.intersectObjects: objects is not an Array.\"),c;for(var d=0,e=a.length;d<e;d++)ge(a[d],this,c,b);c.sort(Ie);\nreturn c}};he.prototype={constructor:he,start:function(){this.oldTime=this.startTime=(performance||Date).now();this.elapsedTime=0;this.running=!0},stop:function(){this.getElapsedTime();this.running=!1},getElapsedTime:function(){this.getDelta();return this.elapsedTime},getDelta:function(){var a=0;this.autoStart&&!this.running&&this.start();if(this.running){var b=(performance||Date).now(),a=(b-this.oldTime)/1E3;this.oldTime=b;this.elapsedTime+=a}return a}};ie.prototype={constructor:ie,set:function(a,\nb,c){this.radius=a;this.phi=b;this.theta=c;return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.radius=a.radius;this.phi=a.phi;this.theta=a.theta;return this},makeSafe:function(){this.phi=Math.max(1E-6,Math.min(Math.PI-1E-6,this.phi));return this},setFromVector3:function(a){this.radius=a.length();0===this.radius?this.phi=this.theta=0:(this.theta=Math.atan2(a.x,a.z),this.phi=Math.acos(Q.clamp(a.y/this.radius,-1,1)));return this}};je.prototype={constructor:je,\nset:function(a,b,c){this.radius=a;this.theta=b;this.y=c;return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.radius=a.radius;this.theta=a.theta;this.y=a.y;return this},setFromVector3:function(a){this.radius=Math.sqrt(a.x*a.x+a.z*a.z);this.theta=Math.atan2(a.x,a.z);this.y=a.y;return this}};ua.prototype=Object.create(Ba.prototype);ua.prototype.constructor=ua;ua.prototype.createAnimation=function(a,b,c,d){b={start:b,end:c,length:c-b+1,fps:d,duration:(c-b)/d,lastFrame:0,\ncurrentFrame:0,active:!1,time:0,direction:1,weight:1,directionBackwards:!1,mirroredLoop:!1};this.animationsMap[a]=b;this.animationsList.push(b)};ua.prototype.autoCreateAnimations=function(a){for(var b=/([a-z]+)_?(\\d+)/i,c,d={},e=this.geometry,f=0,g=e.morphTargets.length;f<g;f++){var h=e.morphTargets[f].name.match(b);if(h&&1<h.length){var k=h[1];d[k]||(d[k]={start:Infinity,end:-Infinity});h=d[k];f<h.start&&(h.start=f);f>h.end&&(h.end=f);c||(c=k)}}for(k in d)h=d[k],this.createAnimation(k,h.start,h.end,\na);this.firstAnimation=c};ua.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};ua.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};ua.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)};ua.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/\nc.duration)};ua.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};ua.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};ua.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b};ua.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};ua.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn(\"THREE.MorphBlendMesh: animation[\"+\na+\"] undefined in .playAnimation()\")};ua.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1};ua.prototype.update=function(a){for(var b=0,c=this.animationsList.length;b<c;b++){var d=this.animationsList[b];if(d.active){var e=d.duration/d.length;d.time+=d.direction*a;if(d.mirroredLoop){if(d.time>d.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=\nd.duration);var f=d.start+Q.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight;f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);d.currentFrame!==d.lastFrame?(this.morphTargetInfluences[d.currentFrame]=e*g,this.morphTargetInfluences[d.lastFrame]=(1-e)*g):this.morphTargetInfluences[d.currentFrame]=g}}};$c.prototype=Object.create(G.prototype);\n$c.prototype.constructor=$c;$c.prototype.isImmediateRenderObject=!0;ad.prototype=Object.create(fa.prototype);ad.prototype.constructor=ad;ad.prototype.update=function(){var a=new q,b=new q,c=new za;return function(){var d=[\"a\",\"b\",\"c\"];this.object.updateMatrixWorld(!0);c.getNormalMatrix(this.object.matrixWorld);var e=this.object.matrixWorld,f=this.geometry.attributes.position,g=this.object.geometry;if(g&&g.isGeometry)for(var h=g.vertices,k=g.faces,l=g=0,q=k.length;l<q;l++)for(var p=k[l],n=0,r=p.vertexNormals.length;n<\nr;n++){var w=p.vertexNormals[n];a.copy(h[p[d[n]]]).applyMatrix4(e);b.copy(w).applyMatrix3(c).normalize().multiplyScalar(this.size).add(a);f.setXYZ(g,a.x,a.y,a.z);g+=1;f.setXYZ(g,b.x,b.y,b.z);g+=1}else if(g&&g.isBufferGeometry)for(d=g.attributes.position,h=g.attributes.normal,n=g=0,r=d.count;n<r;n++)a.set(d.getX(n),d.getY(n),d.getZ(n)).applyMatrix4(e),b.set(h.getX(n),h.getY(n),h.getZ(n)),b.applyMatrix3(c).normalize().multiplyScalar(this.size).add(a),f.setXYZ(g,a.x,a.y,a.z),g+=1,f.setXYZ(g,b.x,b.y,\nb.z),g+=1;f.needsUpdate=!0;return this}}();ic.prototype=Object.create(G.prototype);ic.prototype.constructor=ic;ic.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};ic.prototype.update=function(){var a=new q,b=new q;return function(){var c=this.light.distance?this.light.distance:1E3,d=c*Math.tan(this.light.angle);this.cone.scale.set(d,d,c);a.setFromMatrixPosition(this.light.matrixWorld);b.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(b.sub(a));\nthis.cone.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)}}();jc.prototype=Object.create(fa.prototype);jc.prototype.constructor=jc;jc.prototype.getBoneList=function(a){var b=[];a&&a.isBone&&b.push(a);for(var c=0;c<a.children.length;c++)b.push.apply(b,this.getBoneList(a.children[c]));return b};jc.prototype.update=function(){var a=new q,b=new H,c=new H;return function(){var d=this.geometry,e=d.getAttribute(\"position\");c.getInverse(this.root.matrixWorld);for(var f=0,g=0;f<\nthis.bones.length;f++){var h=this.bones[f];h.parent&&h.parent.isBone&&(b.multiplyMatrices(c,h.matrixWorld),a.setFromMatrixPosition(b),e.setXYZ(g,a.x,a.y,a.z),b.multiplyMatrices(c,h.parent.matrixWorld),a.setFromMatrixPosition(b),e.setXYZ(g+1,a.x,a.y,a.z),g+=2)}d.getAttribute(\"position\").needsUpdate=!0}}();kc.prototype=Object.create(Ba.prototype);kc.prototype.constructor=kc;kc.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};kc.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)};\nlc.prototype=Object.create(G.prototype);lc.prototype.constructor=lc;lc.prototype.dispose=function(){this.children[0].geometry.dispose();this.children[0].material.dispose();this.children[1].geometry.dispose();this.children[1].material.dispose()};lc.prototype.update=function(){var a=new q,b=new q;return function(){var c=this.children[0],d=this.children[1];if(this.light.target){a.setFromMatrixPosition(this.light.matrixWorld);b.setFromMatrixPosition(this.light.target.matrixWorld);var e=b.clone().sub(a);\nc.lookAt(e);d.lookAt(e)}c.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);d.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);var d=.5*this.light.width,e=.5*this.light.height,c=c.geometry.getAttribute(\"position\"),f=c.array;f[0]=d;f[1]=-e;f[2]=0;f[3]=d;f[4]=e;f[5]=0;f[6]=-d;f[7]=e;f[8]=0;f[9]=-d;f[10]=e;f[11]=0;f[12]=-d;f[13]=-e;f[14]=0;f[15]=d;f[16]=-e;f[17]=0;c.needsUpdate=!0}}();mc.prototype=Object.create(G.prototype);mc.prototype.constructor=\nmc;mc.prototype.dispose=function(){this.children[0].geometry.dispose();this.children[0].material.dispose()};mc.prototype.update=function(){var a=new q,b=new N,c=new N;return function(){var d=this.children[0],e=d.geometry.getAttribute(\"color\");b.copy(this.light.color).multiplyScalar(this.light.intensity);c.copy(this.light.groundColor).multiplyScalar(this.light.intensity);for(var f=0,g=e.count;f<g;f++){var h=f<g/2?b:c;e.setXYZ(f,h.r,h.g,h.b)}d.lookAt(a.setFromMatrixPosition(this.light.matrixWorld).negate());\ne.needsUpdate=!0}}();bd.prototype=Object.create(fa.prototype);bd.prototype.constructor=bd;Ed.prototype=Object.create(fa.prototype);Ed.prototype.constructor=Ed;cd.prototype=Object.create(fa.prototype);cd.prototype.constructor=cd;cd.prototype.update=function(){var a=new q,b=new q,c=new za;return function(){this.object.updateMatrixWorld(!0);c.getNormalMatrix(this.object.matrixWorld);for(var d=this.object.matrixWorld,e=this.geometry.attributes.position,f=this.object.geometry,g=f.vertices,f=f.faces,h=\n0,k=0,l=f.length;k<l;k++){var q=f[k],p=q.normal;a.copy(g[q.a]).add(g[q.b]).add(g[q.c]).divideScalar(3).applyMatrix4(d);b.copy(p).applyMatrix3(c).normalize().multiplyScalar(this.size).add(a);e.setXYZ(h,a.x,a.y,a.z);h+=1;e.setXYZ(h,b.x,b.y,b.z);h+=1}e.needsUpdate=!0;return this}}();nc.prototype=Object.create(G.prototype);nc.prototype.constructor=nc;nc.prototype.dispose=function(){var a=this.children[0],b=this.children[1];a.geometry.dispose();a.material.dispose();b.geometry.dispose();b.material.dispose()};\nnc.prototype.update=function(){var a=new q,b=new q,c=new q;return function(){a.setFromMatrixPosition(this.light.matrixWorld);b.setFromMatrixPosition(this.light.target.matrixWorld);c.subVectors(b,a);var d=this.children[0],e=this.children[1];d.lookAt(c);d.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);e.lookAt(c);e.scale.z=c.length()}}();dd.prototype=Object.create(fa.prototype);dd.prototype.constructor=dd;dd.prototype.update=function(){function a(a,g,h,k){d.set(g,h,k).unproject(e);\na=c[a];if(void 0!==a)for(g=b.getAttribute(\"position\"),h=0,k=a.length;h<k;h++)g.setXYZ(a[h],d.x,d.y,d.z)}var b,c,d=new q,e=new sa;return function(){b=this.geometry;c=this.pointMap;e.projectionMatrix.copy(this.camera.projectionMatrix);a(\"c\",0,0,-1);a(\"t\",0,0,1);a(\"n1\",-1,-1,-1);a(\"n2\",1,-1,-1);a(\"n3\",-1,1,-1);a(\"n4\",1,1,-1);a(\"f1\",-1,-1,1);a(\"f2\",1,-1,1);a(\"f3\",-1,1,1);a(\"f4\",1,1,1);a(\"u1\",.7,1.1,-1);a(\"u2\",-.7,1.1,-1);a(\"u3\",0,2,-1);a(\"cf1\",-1,0,1);a(\"cf2\",1,0,1);a(\"cf3\",0,-1,1);a(\"cf4\",0,1,1);a(\"cn1\",\n-1,0,-1);a(\"cn2\",1,0,-1);a(\"cn3\",0,-1,-1);a(\"cn4\",0,1,-1);b.getAttribute(\"position\").needsUpdate=!0}}();oc.prototype=Object.create(fa.prototype);oc.prototype.constructor=oc;oc.prototype.update=function(){var a=new ya;return function(b){b&&b.isBox3?a.copy(b):a.setFromObject(b);if(!a.isEmpty()){b=a.min;var c=a.max,d=this.geometry.attributes.position,e=d.array;e[0]=c.x;e[1]=c.y;e[2]=c.z;e[3]=b.x;e[4]=c.y;e[5]=c.z;e[6]=b.x;e[7]=b.y;e[8]=c.z;e[9]=c.x;e[10]=b.y;e[11]=c.z;e[12]=c.x;e[13]=c.y;e[14]=b.z;e[15]=\nb.x;e[16]=c.y;e[17]=b.z;e[18]=b.x;e[19]=b.y;e[20]=b.z;e[21]=c.x;e[22]=b.y;e[23]=b.z;d.needsUpdate=!0;this.geometry.computeBoundingSphere()}}}();var Je=new D;Je.addAttribute(\"position\",new X([0,0,0,0,1,0],3));var Ke=new Wa(0,.5,1,5,1);Ke.translate(0,-.5,0);Cb.prototype=Object.create(G.prototype);Cb.prototype.constructor=Cb;Cb.prototype.setDirection=function(){var a=new q,b;return function(c){.99999<c.y?this.quaternion.set(0,0,0,1):-.99999>c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),\nb=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();Cb.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};Cb.prototype.setColor=function(a){this.line.material.color.copy(a);this.cone.material.color.copy(a)};Fd.prototype=Object.create(fa.prototype);Fd.prototype.constructor=Fd;var ke=function(){function a(){}var b=new q,c=new a,\nd=new a,e=new a;a.prototype.init=function(a,b,c,d){this.c0=a;this.c1=c;this.c2=-3*a+3*b-2*c-d;this.c3=2*a-2*b+c+d};a.prototype.initNonuniformCatmullRom=function(a,b,c,d,e,l,p){this.init(b,c,((b-a)/e-(c-a)/(e+l)+(c-b)/l)*l,((c-b)/l-(d-b)/(l+p)+(d-c)/p)*l)};a.prototype.initCatmullRom=function(a,b,c,d,e){this.init(b,c,e*(c-a),e*(d-b))};a.prototype.calc=function(a){var b=a*a;return this.c0+this.c1*a+this.c2*b+this.c3*b*a};return wa.create(function(a){this.points=a||[];this.closed=!1},function(a){var g=\nthis.points,h,k;k=g.length;2>k&&console.log(\"duh, you need at least 2 points\");a*=k-(this.closed?0:1);h=Math.floor(a);a-=h;this.closed?h+=0<h?0:(Math.floor(Math.abs(h)/g.length)+1)*g.length:0===a&&h===k-1&&(h=k-2,a=1);var l,x,p;this.closed||0<h?l=g[(h-1)%k]:(b.subVectors(g[0],g[1]).add(g[0]),l=b);x=g[h%k];p=g[(h+1)%k];this.closed||h+2<k?g=g[(h+2)%k]:(b.subVectors(g[k-1],g[k-2]).add(g[k-1]),g=b);if(void 0===this.type||\"centripetal\"===this.type||\"chordal\"===this.type){var n=\"chordal\"===this.type?.5:\n.25;k=Math.pow(l.distanceToSquared(x),n);h=Math.pow(x.distanceToSquared(p),n);n=Math.pow(p.distanceToSquared(g),n);1E-4>h&&(h=1);1E-4>k&&(k=h);1E-4>n&&(n=h);c.initNonuniformCatmullRom(l.x,x.x,p.x,g.x,k,h,n);d.initNonuniformCatmullRom(l.y,x.y,p.y,g.y,k,h,n);e.initNonuniformCatmullRom(l.z,x.z,p.z,g.z,k,h,n)}else\"catmullrom\"===this.type&&(k=void 0!==this.tension?this.tension:.5,c.initCatmullRom(l.x,x.x,p.x,g.x,k),d.initCatmullRom(l.y,x.y,p.y,g.y,k),e.initCatmullRom(l.z,x.z,p.z,g.z,k));return new q(c.calc(a),\nd.calc(a),e.calc(a))})}(),Nf=wa.create(function(a){console.warn(\"THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3\");this.points=void 0===a?[]:a},function(a){var b=this.points;a*=b.length-1;var c=Math.floor(a);a-=c;var d=b[0==c?c:c-1],e=b[c],f=b[c>b.length-2?b.length-1:c+1],b=b[c>b.length-3?b.length-1:c+2],c=ed.interpolate;return new q(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a),c(d.z,e.z,f.z,b.z,a))}),Of=wa.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b=\npa.b3;return new q(b(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x),b(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y),b(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z))}),Pf=wa.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b=pa.b2;return new q(b(a,this.v0.x,this.v1.x,this.v2.x),b(a,this.v0.y,this.v1.y,this.v2.y),b(a,this.v0.z,this.v1.z,this.v2.z))}),Qf=wa.create(function(a,b){this.v1=a;this.v2=b},function(a){if(1===a)return this.v2.clone();var b=new q;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);\nb.add(this.v1);return b});Gd.prototype=Object.create(Xa.prototype);Gd.prototype.constructor=Gd;Le.prototype=Object.create(ke.prototype);bd.prototype.setColors=function(){console.error(\"THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.\")};Object.assign(pc.prototype,{center:function(a){console.warn(\"THREE.Box2: .center() has been renamed to .getCenter().\");return this.getCenter(a)},empty:function(){console.warn(\"THREE.Box2: .empty() has been renamed to .isEmpty().\");\nreturn this.isEmpty()},isIntersectionBox:function(a){console.warn(\"THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().\");return this.intersectsBox(a)},size:function(a){console.warn(\"THREE.Box2: .size() has been renamed to .getSize().\");return this.getSize(a)}});Object.assign(ya.prototype,{center:function(a){console.warn(\"THREE.Box3: .center() has been renamed to .getCenter().\");return this.getCenter(a)},empty:function(){console.warn(\"THREE.Box3: .empty() has been renamed to .isEmpty().\");\nreturn this.isEmpty()},isIntersectionBox:function(a){console.warn(\"THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().\");return this.intersectsBox(a)},isIntersectionSphere:function(a){console.warn(\"THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().\");return this.intersectsSphere(a)},size:function(a){console.warn(\"THREE.Box3: .size() has been renamed to .getSize().\");return this.getSize(a)}});gb.prototype.center=function(a){console.warn(\"THREE.Line3: .center() has been renamed to .getCenter().\");\nreturn this.getCenter(a)};Q.random16=function(){console.warn(\"THREE.Math.random16() has been deprecated. Use Math.random() instead.\");return Math.random()};Object.assign(za.prototype,{flattenToArrayOffset:function(a,b){console.warn(\"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\");return this.toArray(a,b)},multiplyVector3:function(a){console.warn(\"THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.\");return a.applyMatrix3(this)},\nmultiplyVector3Array:function(a){console.warn(\"THREE.Matrix3: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.\");return this.applyToVector3Array(a)},applyToBuffer:function(a,b,c){console.warn(\"THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.\");return this.applyToBufferAttribute(a)}});Object.assign(H.prototype,{extractPosition:function(a){console.warn(\"THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().\");\nreturn this.copyPosition(a)},flattenToArrayOffset:function(a,b){console.warn(\"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\");return this.toArray(a,b)},getPosition:function(){var a;return function(){void 0===a&&(a=new q);console.warn(\"THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.\");return a.setFromMatrixColumn(this,3)}}(),setRotationFromQuaternion:function(a){console.warn(\"THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().\");\nreturn this.makeRotationFromQuaternion(a)},multiplyVector3:function(a){console.warn(\"THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead.\");return a.applyProjection(this)},multiplyVector4:function(a){console.warn(\"THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.\");return a.applyMatrix4(this)},multiplyVector3Array:function(a){console.warn(\"THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.\");\nreturn this.applyToVector3Array(a)},rotateAxis:function(a){console.warn(\"THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.\");a.transformDirection(this)},crossVector:function(a){console.warn(\"THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.\");return a.applyMatrix4(this)},translate:function(){console.error(\"THREE.Matrix4: .translate() has been removed.\")},rotateX:function(){console.error(\"THREE.Matrix4: .rotateX() has been removed.\")},\nrotateY:function(){console.error(\"THREE.Matrix4: .rotateY() has been removed.\")},rotateZ:function(){console.error(\"THREE.Matrix4: .rotateZ() has been removed.\")},rotateByAxis:function(){console.error(\"THREE.Matrix4: .rotateByAxis() has been removed.\")},applyToBuffer:function(a,b,c){console.warn(\"THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.\");return this.applyToBufferAttribute(a)}});ma.prototype.isIntersectionLine=function(a){console.warn(\"THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().\");\nreturn this.intersectsLine(a)};da.prototype.multiplyVector3=function(a){console.warn(\"THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.\");return a.applyQuaternion(this)};Object.assign(bb.prototype,{isIntersectionBox:function(a){console.warn(\"THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().\");return this.intersectsBox(a)},isIntersectionPlane:function(a){console.warn(\"THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().\");\nreturn this.intersectsPlane(a)},isIntersectionSphere:function(a){console.warn(\"THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().\");return this.intersectsSphere(a)}});Object.assign(Ab.prototype,{extrude:function(a){console.warn(\"THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.\");return new La(this,a)},makeGeometry:function(a){console.warn(\"THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.\");return new Xb(this,a)}});Object.assign(q.prototype,\n{setEulerFromRotationMatrix:function(){console.error(\"THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.\")},setEulerFromQuaternion:function(){console.error(\"THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.\")},getPositionFromMatrix:function(a){console.warn(\"THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().\");return this.setFromMatrixPosition(a)},getScaleFromMatrix:function(a){console.warn(\"THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().\");\nreturn this.setFromMatrixScale(a)},getColumnFromMatrix:function(a,b){console.warn(\"THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().\");return this.setFromMatrixColumn(b,a)}});S.prototype.computeTangents=function(){console.warn(\"THREE.Geometry: .computeTangents() has been removed.\")};Object.assign(G.prototype,{getChildByName:function(a){console.warn(\"THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().\");return this.getObjectByName(a)},renderDepth:function(){console.warn(\"THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.\")},\ntranslate:function(a,b){console.warn(\"THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.\");return this.translateOnAxis(b,a)}});Object.defineProperties(G.prototype,{eulerOrder:{get:function(){console.warn(\"THREE.Object3D: .eulerOrder is now .rotation.order.\");return this.rotation.order},set:function(a){console.warn(\"THREE.Object3D: .eulerOrder is now .rotation.order.\");this.rotation.order=a}},useQuaternion:{get:function(){console.warn(\"THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.\")},\nset:function(){console.warn(\"THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.\")}}});Object.defineProperties(Ac.prototype,{objects:{get:function(){console.warn(\"THREE.LOD: .objects has been renamed to .levels.\");return this.levels}}});Ha.prototype.setLens=function(a,b){console.warn(\"THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.\");void 0!==b&&(this.filmGauge=b);this.setFocalLength(a)};Object.defineProperties(na.prototype,\n{onlyShadow:{set:function(){console.warn(\"THREE.Light: .onlyShadow has been removed.\")}},shadowCameraFov:{set:function(a){console.warn(\"THREE.Light: .shadowCameraFov is now .shadow.camera.fov.\");this.shadow.camera.fov=a}},shadowCameraLeft:{set:function(a){console.warn(\"THREE.Light: .shadowCameraLeft is now .shadow.camera.left.\");this.shadow.camera.left=a}},shadowCameraRight:{set:function(a){console.warn(\"THREE.Light: .shadowCameraRight is now .shadow.camera.right.\");this.shadow.camera.right=a}},shadowCameraTop:{set:function(a){console.warn(\"THREE.Light: .shadowCameraTop is now .shadow.camera.top.\");\nthis.shadow.camera.top=a}},shadowCameraBottom:{set:function(a){console.warn(\"THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.\");this.shadow.camera.bottom=a}},shadowCameraNear:{set:function(a){console.warn(\"THREE.Light: .shadowCameraNear is now .shadow.camera.near.\");this.shadow.camera.near=a}},shadowCameraFar:{set:function(a){console.warn(\"THREE.Light: .shadowCameraFar is now .shadow.camera.far.\");this.shadow.camera.far=a}},shadowCameraVisible:{set:function(){console.warn(\"THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.\")}},\nshadowBias:{set:function(a){console.warn(\"THREE.Light: .shadowBias is now .shadow.bias.\");this.shadow.bias=a}},shadowDarkness:{set:function(){console.warn(\"THREE.Light: .shadowDarkness has been removed.\")}},shadowMapWidth:{set:function(a){console.warn(\"THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.\");this.shadow.mapSize.width=a}},shadowMapHeight:{set:function(a){console.warn(\"THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.\");this.shadow.mapSize.height=a}}});Object.defineProperties(y.prototype,\n{length:{get:function(){console.warn(\"THREE.BufferAttribute: .length has been deprecated. Use .count instead.\");return this.array.length}}});Object.assign(D.prototype,{addIndex:function(a){console.warn(\"THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().\");this.setIndex(a)},addDrawCall:function(a,b,c){void 0!==c&&console.warn(\"THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.\");console.warn(\"THREE.BufferGeometry: .addDrawCall() is now .addGroup().\");this.addGroup(a,\nb)},clearDrawCalls:function(){console.warn(\"THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().\");this.clearGroups()},computeTangents:function(){console.warn(\"THREE.BufferGeometry: .computeTangents() has been removed.\")},computeOffsets:function(){console.warn(\"THREE.BufferGeometry: .computeOffsets() has been removed.\")}});Object.defineProperties(D.prototype,{drawcalls:{get:function(){console.error(\"THREE.BufferGeometry: .drawcalls has been renamed to .groups.\");return this.groups}},offsets:{get:function(){console.warn(\"THREE.BufferGeometry: .offsets has been renamed to .groups.\");\nreturn this.groups}}});Object.defineProperties(Dd.prototype,{dynamic:{set:function(){console.warn(\"THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.\")}},onUpdate:{value:function(){console.warn(\"THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.\");return this}}});Object.defineProperties(W.prototype,{wrapAround:{get:function(){console.warn(\"THREE.\"+this.type+\": .wrapAround has been removed.\")},set:function(){console.warn(\"THREE.\"+this.type+\n\": .wrapAround has been removed.\")}},wrapRGB:{get:function(){console.warn(\"THREE.\"+this.type+\": .wrapRGB has been removed.\");return new N}}});Object.defineProperties(Ca.prototype,{metal:{get:function(){console.warn(\"THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.\");return!1},set:function(){console.warn(\"THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead\")}}});Object.defineProperties(Ia.prototype,{derivatives:{get:function(){console.warn(\"THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.\");\nreturn this.extensions.derivatives},set:function(a){console.warn(\"THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.\");this.extensions.derivatives=a}}});oa.prototype=Object.assign(Object.create({constructor:oa,apply:function(a){console.warn(\"THREE.EventDispatcher: .apply is deprecated, just inherit or Object.assign the prototype to mix-in.\");Object.assign(a,this)}}),oa.prototype);Object.assign(Nd.prototype,{supportsFloatTextures:function(){console.warn(\"THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).\");\nreturn this.extensions.get(\"OES_texture_float\")},supportsHalfFloatTextures:function(){console.warn(\"THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' ).\");return this.extensions.get(\"OES_texture_half_float\")},supportsStandardDerivatives:function(){console.warn(\"THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).\");return this.extensions.get(\"OES_standard_derivatives\")},supportsCompressedTextureS3TC:function(){console.warn(\"THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' ).\");\nreturn this.extensions.get(\"WEBGL_compressed_texture_s3tc\")},supportsCompressedTexturePVRTC:function(){console.warn(\"THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' ).\");return this.extensions.get(\"WEBGL_compressed_texture_pvrtc\")},supportsBlendMinMax:function(){console.warn(\"THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' ).\");return this.extensions.get(\"EXT_blend_minmax\")},supportsVertexTextures:function(){console.warn(\"THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.\");\nreturn this.capabilities.vertexTextures},supportsInstancedArrays:function(){console.warn(\"THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' ).\");return this.extensions.get(\"ANGLE_instanced_arrays\")},enableScissorTest:function(a){console.warn(\"THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().\");this.setScissorTest(a)},initMaterial:function(){console.warn(\"THREE.WebGLRenderer: .initMaterial() has been removed.\")},addPrePlugin:function(){console.warn(\"THREE.WebGLRenderer: .addPrePlugin() has been removed.\")},\naddPostPlugin:function(){console.warn(\"THREE.WebGLRenderer: .addPostPlugin() has been removed.\")},updateShadowMap:function(){console.warn(\"THREE.WebGLRenderer: .updateShadowMap() has been removed.\")}});Object.defineProperties(Nd.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(a){console.warn(\"THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.\");this.shadowMap.enabled=a}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(a){console.warn(\"THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.\");\nthis.shadowMap.type=a}},shadowMapCullFace:{get:function(){return this.shadowMap.cullFace},set:function(a){console.warn(\"THREE.WebGLRenderer: .shadowMapCullFace is now .shadowMap.cullFace.\");this.shadowMap.cullFace=a}}});Object.defineProperties(ye.prototype,{cullFace:{get:function(){return this.renderReverseSided?2:1},set:function(a){a=1!==a;console.warn(\"WebGLRenderer: .shadowMap.cullFace is deprecated. Set .shadowMap.renderReverseSided to \"+a+\".\");this.renderReverseSided=a}}});Object.defineProperties(Db.prototype,\n{wrapS:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.\");return this.texture.wrapS},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.\");this.texture.wrapS=a}},wrapT:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.\");return this.texture.wrapT},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.\");this.texture.wrapT=a}},magFilter:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.\");\nreturn this.texture.magFilter},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.\");this.texture.magFilter=a}},minFilter:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.\");return this.texture.minFilter},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.\");this.texture.minFilter=a}},anisotropy:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.\");\nreturn this.texture.anisotropy},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.\");this.texture.anisotropy=a}},offset:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .offset is now .texture.offset.\");return this.texture.offset},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .offset is now .texture.offset.\");this.texture.offset=a}},repeat:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .repeat is now .texture.repeat.\");return this.texture.repeat},\nset:function(a){console.warn(\"THREE.WebGLRenderTarget: .repeat is now .texture.repeat.\");this.texture.repeat=a}},format:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .format is now .texture.format.\");return this.texture.format},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .format is now .texture.format.\");this.texture.format=a}},type:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .type is now .texture.type.\");return this.texture.type},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .type is now .texture.type.\");\nthis.texture.type=a}},generateMipmaps:{get:function(){console.warn(\"THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.\");return this.texture.generateMipmaps},set:function(a){console.warn(\"THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.\");this.texture.generateMipmaps=a}}});ec.prototype.load=function(a){console.warn(\"THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.\");var b=this;(new Wd).load(a,function(a){b.setBuffer(a)});return this};\nae.prototype.getData=function(){console.warn(\"THREE.AudioAnalyser: .getData() is now .getFrequencyData().\");return this.getFrequencyData()};l.WebGLRenderTargetCube=Eb;l.WebGLRenderTarget=Db;l.WebGLRenderer=Nd;l.ShaderLib=Gb;l.UniformsLib=U;l.UniformsUtils=Ja;l.ShaderChunk=Z;l.FogExp2=Ib;l.Fog=Jb;l.Scene=jb;l.LensFlare=Od;l.Sprite=zc;l.LOD=Ac;l.SkinnedMesh=jd;l.Skeleton=hd;l.Bone=id;l.Mesh=Ba;l.LineSegments=fa;l.Line=Va;l.Points=Kb;l.Group=Bc;l.VideoTexture=kd;l.DataTexture=db;l.CompressedTexture=\nLb;l.CubeTexture=Za;l.CanvasTexture=ld;l.DepthTexture=Cc;l.Texture=ea;l.CompressedTextureLoader=Ee;l.BinaryTextureLoader=Qd;l.DataTextureLoader=Qd;l.CubeTextureLoader=Rd;l.TextureLoader=md;l.ObjectLoader=Fe;l.MaterialLoader=Ad;l.BufferGeometryLoader=Sd;l.DefaultLoadingManager=va;l.LoadingManager=Pd;l.JSONLoader=Td;l.ImageLoader=Vc;l.FontLoader=Ge;l.FileLoader=Ma;l.Loader=wb;l.Cache=ne;l.AudioLoader=Wd;l.SpotLightShadow=od;l.SpotLight=pd;l.PointLight=qd;l.RectAreaLight=Xd;l.HemisphereLight=nd;l.DirectionalLightShadow=\nrd;l.DirectionalLight=sd;l.AmbientLight=td;l.LightShadow=tb;l.Light=na;l.StereoCamera=He;l.PerspectiveCamera=Ha;l.OrthographicCamera=Hb;l.CubeCamera=Bd;l.Camera=sa;l.AudioListener=Yd;l.PositionalAudio=$d;l.AudioContext=Zd;l.AudioAnalyser=ae;l.Audio=ec;l.VectorKeyframeTrack=cc;l.StringKeyframeTrack=xd;l.QuaternionKeyframeTrack=Xc;l.NumberKeyframeTrack=dc;l.ColorKeyframeTrack=zd;l.BooleanKeyframeTrack=yd;l.PropertyMixer=Cd;l.PropertyBinding=ka;l.KeyframeTrack=vb;l.AnimationUtils=ba;l.AnimationObjectGroup=\nbe;l.AnimationMixer=de;l.AnimationClip=ta;l.Uniform=Dd;l.InstancedBufferGeometry=Bb;l.BufferGeometry=D;l.GeometryIdCount=function(){return Kd++};l.Geometry=S;l.InterleavedBufferAttribute=ee;l.InstancedInterleavedBuffer=gc;l.InterleavedBuffer=fc;l.InstancedBufferAttribute=hc;l.Face3=ha;l.Object3D=G;l.Raycaster=fe;l.Layers=gd;l.EventDispatcher=oa;l.Clock=he;l.QuaternionLinearInterpolant=wd;l.LinearInterpolant=Wc;l.DiscreteInterpolant=vd;l.CubicInterpolant=ud;l.Interpolant=qa;l.Triangle=Aa;l.Spline=\nfunction(a){function b(a,b,c,d,e,f,g){a=.5*(c-a);d=.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b}this.points=a;var c=[],d={x:0,y:0,z:0},e,f,g,h,k,l,x,p,n;this.initFromArray=function(a){this.points=[];for(var b=0;b<a.length;b++)this.points[b]={x:a[b][0],y:a[b][1],z:a[b][2]}};this.getPoint=function(a){e=(this.points.length-1)*a;f=Math.floor(e);g=e-f;c[0]=0===f?f:f-1;c[1]=f;c[2]=f>this.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1:f+2;l=this.points[c[0]];\nx=this.points[c[1]];p=this.points[c[2]];n=this.points[c[3]];h=g*g;k=g*h;d.x=b(l.x,x.x,p.x,n.x,g,h,k);d.y=b(l.y,x.y,p.y,n.y,g,h,k);d.z=b(l.z,x.z,p.z,n.z,g,h,k);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a<c;a++)b=this.points[a],d[a]=[b.x,b.y,b.z];return d};this.getLength=function(a){var b,c,d,e=0,f=new q,g=new q,h=[],k=0;h[0]=0;a||(a=100);c=this.points.length*a;f.copy(this.points[0]);for(a=1;a<c;a++)b=a/c,d=this.getPoint(b),g.copy(d),k+=g.distanceTo(f),\nf.copy(d),b*=this.points.length-1,b=Math.floor(b),b!==e&&(h[b]=k,e=b);h[h.length]=k;return{chunks:h,total:k}};this.reparametrizeByArcLength=function(a){var b,c,d,e,f,g,h=[],k=new q,l=this.getLength();h.push(k.copy(this.points[0]).clone());for(b=1;b<this.points.length;b++){c=l.chunks[b]-l.chunks[b-1];g=Math.ceil(a*c/l.total);e=(b-1)/(this.points.length-1);f=b/(this.points.length-1);for(c=1;c<g-1;c++)d=e+1/g*c*(f-e),d=this.getPoint(d),h.push(k.copy(d).clone());h.push(k.copy(this.points[b]).clone())}this.points=\nh}};l.Math=Q;l.Spherical=ie;l.Cylindrical=je;l.Plane=ma;l.Frustum=qc;l.Sphere=Fa;l.Ray=bb;l.Matrix4=H;l.Matrix3=za;l.Box3=ya;l.Box2=pc;l.Line3=gb;l.Euler=cb;l.Vector4=ga;l.Vector3=q;l.Vector2=C;l.Quaternion=da;l.Color=N;l.MorphBlendMesh=ua;l.ImmediateRenderObject=$c;l.VertexNormalsHelper=ad;l.SpotLightHelper=ic;l.SkeletonHelper=jc;l.PointLightHelper=kc;l.RectAreaLightHelper=lc;l.HemisphereLightHelper=mc;l.GridHelper=bd;l.PolarGridHelper=Ed;l.FaceNormalsHelper=cd;l.DirectionalLightHelper=nc;l.CameraHelper=\ndd;l.BoxHelper=oc;l.ArrowHelper=Cb;l.AxisHelper=Fd;l.CatmullRomCurve3=ke;l.SplineCurve3=Nf;l.CubicBezierCurve3=Of;l.QuadraticBezierCurve3=Pf;l.LineCurve3=Qf;l.ArcCurve=Gd;l.EllipseCurve=Xa;l.SplineCurve=xb;l.CubicBezierCurve=yb;l.QuadraticBezierCurve=zb;l.LineCurve=Qa;l.Shape=Ab;l.ShapePath=Ud;l.Path=Zc;l.Font=Vd;l.CurvePath=Yc;l.Curve=wa;l.ShapeUtils=pa;l.SceneUtils={createMultiMaterialObject:function(a,b){for(var c=new Bc,d=0,e=b.length;d<e;d++)c.add(new Ba(a,b[d]));return c},detach:function(a,\nb,c){a.applyMatrix(b.matrixWorld);b.remove(a);c.add(a)},attach:function(a,b,c){var d=new H;d.getInverse(c.matrixWorld);a.applyMatrix(d);b.remove(a);c.add(a)}};l.CurveUtils=ed;l.WireframeGeometry=Mb;l.ParametricGeometry=Dc;l.ParametricBufferGeometry=Nb;l.TetrahedronGeometry=Ec;l.TetrahedronBufferGeometry=Ob;l.OctahedronGeometry=Fc;l.OctahedronBufferGeometry=lb;l.IcosahedronGeometry=Gc;l.IcosahedronBufferGeometry=Pb;l.DodecahedronGeometry=Hc;l.DodecahedronBufferGeometry=Qb;l.PolyhedronGeometry=Ic;l.PolyhedronBufferGeometry=\nxa;l.TubeGeometry=Jc;l.TubeBufferGeometry=Rb;l.TorusKnotGeometry=Kc;l.TorusKnotBufferGeometry=Sb;l.TorusGeometry=Lc;l.TorusBufferGeometry=Tb;l.TextGeometry=Mc;l.SphereBufferGeometry=mb;l.SphereGeometry=Nc;l.RingGeometry=Oc;l.RingBufferGeometry=Ub;l.PlaneBufferGeometry=ib;l.PlaneGeometry=Pc;l.LatheGeometry=Qc;l.LatheBufferGeometry=Vb;l.ShapeGeometry=Xb;l.ShapeBufferGeometry=Wb;l.ExtrudeGeometry=La;l.EdgesGeometry=Yb;l.ConeGeometry=Rc;l.ConeBufferGeometry=Sc;l.CylinderGeometry=nb;l.CylinderBufferGeometry=\nWa;l.CircleBufferGeometry=Zb;l.CircleGeometry=Tc;l.BoxBufferGeometry=hb;l.BoxGeometry=$b;l.ShadowMaterial=ac;l.SpriteMaterial=kb;l.RawShaderMaterial=bc;l.ShaderMaterial=Ia;l.PointsMaterial=Oa;l.MultiMaterial=Uc;l.MeshPhysicalMaterial=ob;l.MeshStandardMaterial=Pa;l.MeshPhongMaterial=Ca;l.MeshToonMaterial=pb;l.MeshNormalMaterial=qb;l.MeshLambertMaterial=rb;l.MeshDepthMaterial=ab;l.MeshBasicMaterial=Ka;l.LineDashedMaterial=sb;l.LineBasicMaterial=ia;l.Material=W;l.Float64BufferAttribute=wc;l.Float32BufferAttribute=\nX;l.Uint32BufferAttribute=Ua;l.Int32BufferAttribute=vc;l.Uint16BufferAttribute=Ra;l.Int16BufferAttribute=uc;l.Uint8ClampedBufferAttribute=tc;l.Uint8BufferAttribute=sc;l.Int8BufferAttribute=rc;l.BufferAttribute=y;l.REVISION=\"83\";l.MOUSE={LEFT:0,MIDDLE:1,RIGHT:2};l.CullFaceNone=0;l.CullFaceBack=1;l.CullFaceFront=2;l.CullFaceFrontBack=3;l.FrontFaceDirectionCW=0;l.FrontFaceDirectionCCW=1;l.BasicShadowMap=0;l.PCFShadowMap=1;l.PCFSoftShadowMap=2;l.FrontSide=0;l.BackSide=1;l.DoubleSide=2;l.FlatShading=1;\nl.SmoothShading=2;l.NoColors=0;l.FaceColors=1;l.VertexColors=2;l.NoBlending=0;l.NormalBlending=1;l.AdditiveBlending=2;l.SubtractiveBlending=3;l.MultiplyBlending=4;l.CustomBlending=5;l.BlendingMode=Me;l.AddEquation=100;l.SubtractEquation=101;l.ReverseSubtractEquation=102;l.MinEquation=103;l.MaxEquation=104;l.ZeroFactor=200;l.OneFactor=201;l.SrcColorFactor=202;l.OneMinusSrcColorFactor=203;l.SrcAlphaFactor=204;l.OneMinusSrcAlphaFactor=205;l.DstAlphaFactor=206;l.OneMinusDstAlphaFactor=207;l.DstColorFactor=\n208;l.OneMinusDstColorFactor=209;l.SrcAlphaSaturateFactor=210;l.NeverDepth=0;l.AlwaysDepth=1;l.LessDepth=2;l.LessEqualDepth=3;l.EqualDepth=4;l.GreaterEqualDepth=5;l.GreaterDepth=6;l.NotEqualDepth=7;l.MultiplyOperation=0;l.MixOperation=1;l.AddOperation=2;l.NoToneMapping=0;l.LinearToneMapping=1;l.ReinhardToneMapping=2;l.Uncharted2ToneMapping=3;l.CineonToneMapping=4;l.UVMapping=300;l.CubeReflectionMapping=301;l.CubeRefractionMapping=302;l.EquirectangularReflectionMapping=303;l.EquirectangularRefractionMapping=\n304;l.SphericalReflectionMapping=305;l.CubeUVReflectionMapping=306;l.CubeUVRefractionMapping=307;l.TextureMapping=Ne;l.RepeatWrapping=1E3;l.ClampToEdgeWrapping=1001;l.MirroredRepeatWrapping=1002;l.TextureWrapping=le;l.NearestFilter=1003;l.NearestMipMapNearestFilter=1004;l.NearestMipMapLinearFilter=1005;l.LinearFilter=1006;l.LinearMipMapNearestFilter=1007;l.LinearMipMapLinearFilter=1008;l.TextureFilter=me;l.UnsignedByteType=1009;l.ByteType=1010;l.ShortType=1011;l.UnsignedShortType=1012;l.IntType=1013;\nl.UnsignedIntType=1014;l.FloatType=1015;l.HalfFloatType=1016;l.UnsignedShort4444Type=1017;l.UnsignedShort5551Type=1018;l.UnsignedShort565Type=1019;l.UnsignedInt248Type=1020;l.AlphaFormat=1021;l.RGBFormat=1022;l.RGBAFormat=1023;l.LuminanceFormat=1024;l.LuminanceAlphaFormat=1025;l.RGBEFormat=1023;l.DepthFormat=1026;l.DepthStencilFormat=1027;l.RGB_S3TC_DXT1_Format=2001;l.RGBA_S3TC_DXT1_Format=2002;l.RGBA_S3TC_DXT3_Format=2003;l.RGBA_S3TC_DXT5_Format=2004;l.RGB_PVRTC_4BPPV1_Format=2100;l.RGB_PVRTC_2BPPV1_Format=\n2101;l.RGBA_PVRTC_4BPPV1_Format=2102;l.RGBA_PVRTC_2BPPV1_Format=2103;l.RGB_ETC1_Format=2151;l.LoopOnce=2200;l.LoopRepeat=2201;l.LoopPingPong=2202;l.InterpolateDiscrete=2300;l.InterpolateLinear=2301;l.InterpolateSmooth=2302;l.ZeroCurvatureEnding=2400;l.ZeroSlopeEnding=2401;l.WrapAroundEnding=2402;l.TrianglesDrawMode=0;l.TriangleStripDrawMode=1;l.TriangleFanDrawMode=2;l.LinearEncoding=3E3;l.sRGBEncoding=3001;l.GammaEncoding=3007;l.RGBEEncoding=3002;l.LogLuvEncoding=3003;l.RGBM7Encoding=3004;l.RGBM16Encoding=\n3005;l.RGBDEncoding=3006;l.BasicDepthPacking=3200;l.RGBADepthPacking=3201;l.CubeGeometry=$b;l.Face4=function(a,b,c,d,e,f,g){console.warn(\"THREE.Face4 has been removed. A THREE.Face3 will be created instead.\");return new ha(a,b,c,e,f,g)};l.LineStrip=0;l.LinePieces=1;l.MeshFaceMaterial=function(a){console.warn(\"THREE.MeshFaceMaterial has been renamed to THREE.MultiMaterial.\");return new Uc(a)};l.PointCloud=function(a,b){console.warn(\"THREE.PointCloud has been renamed to THREE.Points.\");return new Kb(a,\nb)};l.Particle=function(a){console.warn(\"THREE.Particle has been renamed to THREE.Sprite.\");return new zc(a)};l.ParticleSystem=function(a,b){console.warn(\"THREE.ParticleSystem has been renamed to THREE.Points.\");return new Kb(a,b)};l.PointCloudMaterial=function(a){console.warn(\"THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.\");return new Oa(a)};l.ParticleBasicMaterial=function(a){console.warn(\"THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.\");return new Oa(a)};\nl.ParticleSystemMaterial=function(a){console.warn(\"THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.\");return new Oa(a)};l.Vertex=function(a,b,c){console.warn(\"THREE.Vertex has been removed. Use THREE.Vector3 instead.\");return new q(a,b,c)};l.DynamicBufferAttribute=function(a,b){console.warn(\"THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.\");return(new y(a,b)).setDynamic(!0)};l.Int8Attribute=function(a,b){console.warn(\"THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.\");\nreturn new rc(a,b)};l.Uint8Attribute=function(a,b){console.warn(\"THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.\");return new sc(a,b)};l.Uint8ClampedAttribute=function(a,b){console.warn(\"THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.\");return new tc(a,b)};l.Int16Attribute=function(a,b){console.warn(\"THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.\");return new uc(a,b)};l.Uint16Attribute=\nfunction(a,b){console.warn(\"THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.\");return new Ra(a,b)};l.Int32Attribute=function(a,b){console.warn(\"THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.\");return new vc(a,b)};l.Uint32Attribute=function(a,b){console.warn(\"THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.\");return new Ua(a,b)};l.Float32Attribute=function(a,b){console.warn(\"THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.\");\nreturn new X(a,b)};l.Float64Attribute=function(a,b){console.warn(\"THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.\");return new wc(a,b)};l.ClosedSplineCurve3=Le;l.BoundingBoxHelper=function(a,b){console.warn(\"THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.\");return new oc(a,b)};l.EdgesHelper=function(a,b){console.warn(\"THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.\");return new fa(new Yb(a.geometry),new ia({color:void 0!==\nb?b:16777215}))};l.WireframeHelper=function(a,b){console.warn(\"THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.\");return new fa(new Mb(a.geometry),new ia({color:void 0!==b?b:16777215}))};l.XHRLoader=function(a){console.warn(\"THREE.XHRLoader has been renamed to THREE.FileLoader.\");return new Ma(a)};l.GeometryUtils={merge:function(a,b,c){console.warn(\"THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.\");\nvar d;b.isMesh&&(b.matrixAutoUpdate&&b.updateMatrix(),d=b.matrix,b=b.geometry);a.merge(b,d,c)},center:function(a){console.warn(\"THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.\");return a.center()}};l.ImageUtils={crossOrigin:void 0,loadTexture:function(a,b,c,d){console.warn(\"THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.\");var e=new md;e.setCrossOrigin(this.crossOrigin);a=e.load(a,c,void 0,d);b&&(a.mapping=b);return a},\nloadTextureCube:function(a,b,c,d){console.warn(\"THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.\");var e=new Rd;e.setCrossOrigin(this.crossOrigin);a=e.load(a,c,void 0,d);b&&(a.mapping=b);return a},loadCompressedTexture:function(){console.error(\"THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.\")},loadCompressedTextureCube:function(){console.error(\"THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.\")}};\nl.Projector=function(){console.error(\"THREE.Projector has been moved to /examples/js/renderers/Projector.js.\");this.projectVector=function(a,b){console.warn(\"THREE.Projector: .projectVector() is now vector.project().\");a.project(b)};this.unprojectVector=function(a,b){console.warn(\"THREE.Projector: .unprojectVector() is now vector.unproject().\");a.unproject(b)};this.pickingRay=function(){console.error(\"THREE.Projector: .pickingRay() is now raycaster.setFromCamera().\")}};l.CanvasRenderer=function(){console.error(\"THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js\");\nthis.domElement=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\");this.clear=function(){};this.render=function(){};this.setClearColor=function(){};this.setSize=function(){}};Object.defineProperty(l,\"__esModule\",{value:!0})});\n",
     "//     Underscore.js 1.8.3\n//     http://underscorejs.org\n//     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n//     Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n  // Baseline setup\n  // --------------\n\n  // Establish the root object, `window` in the browser, or `exports` on the server.\n  var root = this;\n\n  // Save the previous value of the `_` variable.\n  var previousUnderscore = root._;\n\n  // Save bytes in the minified (but not gzipped) version:\n  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n  // Create quick reference variables for speed access to core prototypes.\n  var\n    push             = ArrayProto.push,\n    slice            = ArrayProto.slice,\n    toString         = ObjProto.toString,\n    hasOwnProperty   = ObjProto.hasOwnProperty;\n\n  // All **ECMAScript 5** native function implementations that we hope to use\n  // are declared here.\n  var\n    nativeIsArray      = Array.isArray,\n    nativeKeys         = Object.keys,\n    nativeBind         = FuncProto.bind,\n    nativeCreate       = Object.create;\n\n  // Naked function reference for surrogate-prototype-swapping.\n  var Ctor = function(){};\n\n  // Create a safe reference to the Underscore object for use below.\n  var _ = function(obj) {\n    if (obj instanceof _) return obj;\n    if (!(this instanceof _)) return new _(obj);\n    this._wrapped = obj;\n  };\n\n  // Export the Underscore object for **Node.js**, with\n  // backwards-compatibility for the old `require()` API. If we're in\n  // the browser, add `_` as a global object.\n  if (typeof exports !== 'undefined') {\n    if (typeof module !== 'undefined' && module.exports) {\n      exports = module.exports = _;\n    }\n    exports._ = _;\n  } else {\n    root._ = _;\n  }\n\n  // Current version.\n  _.VERSION = '1.8.3';\n\n  // Internal function that returns an efficient (for current engines) version\n  // of the passed-in callback, to be repeatedly applied in other Underscore\n  // functions.\n  var optimizeCb = function(func, context, argCount) {\n    if (context === void 0) return func;\n    switch (argCount == null ? 3 : argCount) {\n      case 1: return function(value) {\n        return func.call(context, value);\n      };\n      case 2: return function(value, other) {\n        return func.call(context, value, other);\n      };\n      case 3: return function(value, index, collection) {\n        return func.call(context, value, index, collection);\n      };\n      case 4: return function(accumulator, value, index, collection) {\n        return func.call(context, accumulator, value, index, collection);\n      };\n    }\n    return function() {\n      return func.apply(context, arguments);\n    };\n  };\n\n  // A mostly-internal function to generate callbacks that can be applied\n  // to each element in a collection, returning the desired result — either\n  // identity, an arbitrary callback, a property matcher, or a property accessor.\n  var cb = function(value, context, argCount) {\n    if (value == null) return _.identity;\n    if (_.isFunction(value)) return optimizeCb(value, context, argCount);\n    if (_.isObject(value)) return _.matcher(value);\n    return _.property(value);\n  };\n  _.iteratee = function(value, context) {\n    return cb(value, context, Infinity);\n  };\n\n  // An internal function for creating assigner functions.\n  var createAssigner = function(keysFunc, undefinedOnly) {\n    return function(obj) {\n      var length = arguments.length;\n      if (length < 2 || obj == null) return obj;\n      for (var index = 1; index < length; index++) {\n        var source = arguments[index],\n            keys = keysFunc(source),\n            l = keys.length;\n        for (var i = 0; i < l; i++) {\n          var key = keys[i];\n          if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];\n        }\n      }\n      return obj;\n    };\n  };\n\n  // An internal function for creating a new object that inherits from another.\n  var baseCreate = function(prototype) {\n    if (!_.isObject(prototype)) return {};\n    if (nativeCreate) return nativeCreate(prototype);\n    Ctor.prototype = prototype;\n    var result = new Ctor;\n    Ctor.prototype = null;\n    return result;\n  };\n\n  var property = function(key) {\n    return function(obj) {\n      return obj == null ? void 0 : obj[key];\n    };\n  };\n\n  // Helper for collection methods to determine whether a collection\n  // should be iterated as an array or as an object\n  // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n  // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\n  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\n  var getLength = property('length');\n  var isArrayLike = function(collection) {\n    var length = getLength(collection);\n    return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n  };\n\n  // Collection Functions\n  // --------------------\n\n  // The cornerstone, an `each` implementation, aka `forEach`.\n  // Handles raw objects in addition to array-likes. Treats all\n  // sparse array-likes as if they were dense.\n  _.each = _.forEach = function(obj, iteratee, context) {\n    iteratee = optimizeCb(iteratee, context);\n    var i, length;\n    if (isArrayLike(obj)) {\n      for (i = 0, length = obj.length; i < length; i++) {\n        iteratee(obj[i], i, obj);\n      }\n    } else {\n      var keys = _.keys(obj);\n      for (i = 0, length = keys.length; i < length; i++) {\n        iteratee(obj[keys[i]], keys[i], obj);\n      }\n    }\n    return obj;\n  };\n\n  // Return the results of applying the iteratee to each element.\n  _.map = _.collect = function(obj, iteratee, context) {\n    iteratee = cb(iteratee, context);\n    var keys = !isArrayLike(obj) && _.keys(obj),\n        length = (keys || obj).length,\n        results = Array(length);\n    for (var index = 0; index < length; index++) {\n      var currentKey = keys ? keys[index] : index;\n      results[index] = iteratee(obj[currentKey], currentKey, obj);\n    }\n    return results;\n  };\n\n  // Create a reducing function iterating left or right.\n  function createReduce(dir) {\n    // Optimized iterator function as using arguments.length\n    // in the main function will deoptimize the, see #1991.\n    function iterator(obj, iteratee, memo, keys, index, length) {\n      for (; index >= 0 && index < length; index += dir) {\n        var currentKey = keys ? keys[index] : index;\n        memo = iteratee(memo, obj[currentKey], currentKey, obj);\n      }\n      return memo;\n    }\n\n    return function(obj, iteratee, memo, context) {\n      iteratee = optimizeCb(iteratee, context, 4);\n      var keys = !isArrayLike(obj) && _.keys(obj),\n          length = (keys || obj).length,\n          index = dir > 0 ? 0 : length - 1;\n      // Determine the initial value if none is provided.\n      if (arguments.length < 3) {\n        memo = obj[keys ? keys[index] : index];\n        index += dir;\n      }\n      return iterator(obj, iteratee, memo, keys, index, length);\n    };\n  }\n\n  // **Reduce** builds up a single result from a list of values, aka `inject`,\n  // or `foldl`.\n  _.reduce = _.foldl = _.inject = createReduce(1);\n\n  // The right-associative version of reduce, also known as `foldr`.\n  _.reduceRight = _.foldr = createReduce(-1);\n\n  // Return the first value which passes a truth test. Aliased as `detect`.\n  _.find = _.detect = function(obj, predicate, context) {\n    var key;\n    if (isArrayLike(obj)) {\n      key = _.findIndex(obj, predicate, context);\n    } else {\n      key = _.findKey(obj, predicate, context);\n    }\n    if (key !== void 0 && key !== -1) return obj[key];\n  };\n\n  // Return all the elements that pass a truth test.\n  // Aliased as `select`.\n  _.filter = _.select = function(obj, predicate, context) {\n    var results = [];\n    predicate = cb(predicate, context);\n    _.each(obj, function(value, index, list) {\n      if (predicate(value, index, list)) results.push(value);\n    });\n    return results;\n  };\n\n  // Return all the elements for which a truth test fails.\n  _.reject = function(obj, predicate, context) {\n    return _.filter(obj, _.negate(cb(predicate)), context);\n  };\n\n  // Determine whether all of the elements match a truth test.\n  // Aliased as `all`.\n  _.every = _.all = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var keys = !isArrayLike(obj) && _.keys(obj),\n        length = (keys || obj).length;\n    for (var index = 0; index < length; index++) {\n      var currentKey = keys ? keys[index] : index;\n      if (!predicate(obj[currentKey], currentKey, obj)) return false;\n    }\n    return true;\n  };\n\n  // Determine if at least one element in the object matches a truth test.\n  // Aliased as `any`.\n  _.some = _.any = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var keys = !isArrayLike(obj) && _.keys(obj),\n        length = (keys || obj).length;\n    for (var index = 0; index < length; index++) {\n      var currentKey = keys ? keys[index] : index;\n      if (predicate(obj[currentKey], currentKey, obj)) return true;\n    }\n    return false;\n  };\n\n  // Determine if the array or object contains a given item (using `===`).\n  // Aliased as `includes` and `include`.\n  _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {\n    if (!isArrayLike(obj)) obj = _.values(obj);\n    if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n    return _.indexOf(obj, item, fromIndex) >= 0;\n  };\n\n  // Invoke a method (with arguments) on every item in a collection.\n  _.invoke = function(obj, method) {\n    var args = slice.call(arguments, 2);\n    var isFunc = _.isFunction(method);\n    return _.map(obj, function(value) {\n      var func = isFunc ? method : value[method];\n      return func == null ? func : func.apply(value, args);\n    });\n  };\n\n  // Convenience version of a common use case of `map`: fetching a property.\n  _.pluck = function(obj, key) {\n    return _.map(obj, _.property(key));\n  };\n\n  // Convenience version of a common use case of `filter`: selecting only objects\n  // containing specific `key:value` pairs.\n  _.where = function(obj, attrs) {\n    return _.filter(obj, _.matcher(attrs));\n  };\n\n  // Convenience version of a common use case of `find`: getting the first object\n  // containing specific `key:value` pairs.\n  _.findWhere = function(obj, attrs) {\n    return _.find(obj, _.matcher(attrs));\n  };\n\n  // Return the maximum element (or element-based computation).\n  _.max = function(obj, iteratee, context) {\n    var result = -Infinity, lastComputed = -Infinity,\n        value, computed;\n    if (iteratee == null && obj != null) {\n      obj = isArrayLike(obj) ? obj : _.values(obj);\n      for (var i = 0, length = obj.length; i < length; i++) {\n        value = obj[i];\n        if (value > result) {\n          result = value;\n        }\n      }\n    } else {\n      iteratee = cb(iteratee, context);\n      _.each(obj, function(value, index, list) {\n        computed = iteratee(value, index, list);\n        if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n          result = value;\n          lastComputed = computed;\n        }\n      });\n    }\n    return result;\n  };\n\n  // Return the minimum element (or element-based computation).\n  _.min = function(obj, iteratee, context) {\n    var result = Infinity, lastComputed = Infinity,\n        value, computed;\n    if (iteratee == null && obj != null) {\n      obj = isArrayLike(obj) ? obj : _.values(obj);\n      for (var i = 0, length = obj.length; i < length; i++) {\n        value = obj[i];\n        if (value < result) {\n          result = value;\n        }\n      }\n    } else {\n      iteratee = cb(iteratee, context);\n      _.each(obj, function(value, index, list) {\n        computed = iteratee(value, index, list);\n        if (computed < lastComputed || computed === Infinity && result === Infinity) {\n          result = value;\n          lastComputed = computed;\n        }\n      });\n    }\n    return result;\n  };\n\n  // Shuffle a collection, using the modern version of the\n  // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n  _.shuffle = function(obj) {\n    var set = isArrayLike(obj) ? obj : _.values(obj);\n    var length = set.length;\n    var shuffled = Array(length);\n    for (var index = 0, rand; index < length; index++) {\n      rand = _.random(0, index);\n      if (rand !== index) shuffled[index] = shuffled[rand];\n      shuffled[rand] = set[index];\n    }\n    return shuffled;\n  };\n\n  // Sample **n** random values from a collection.\n  // If **n** is not specified, returns a single random element.\n  // The internal `guard` argument allows it to work with `map`.\n  _.sample = function(obj, n, guard) {\n    if (n == null || guard) {\n      if (!isArrayLike(obj)) obj = _.values(obj);\n      return obj[_.random(obj.length - 1)];\n    }\n    return _.shuffle(obj).slice(0, Math.max(0, n));\n  };\n\n  // Sort the object's values by a criterion produced by an iteratee.\n  _.sortBy = function(obj, iteratee, context) {\n    iteratee = cb(iteratee, context);\n    return _.pluck(_.map(obj, function(value, index, list) {\n      return {\n        value: value,\n        index: index,\n        criteria: iteratee(value, index, list)\n      };\n    }).sort(function(left, right) {\n      var a = left.criteria;\n      var b = right.criteria;\n      if (a !== b) {\n        if (a > b || a === void 0) return 1;\n        if (a < b || b === void 0) return -1;\n      }\n      return left.index - right.index;\n    }), 'value');\n  };\n\n  // An internal function used for aggregate \"group by\" operations.\n  var group = function(behavior) {\n    return function(obj, iteratee, context) {\n      var result = {};\n      iteratee = cb(iteratee, context);\n      _.each(obj, function(value, index) {\n        var key = iteratee(value, index, obj);\n        behavior(result, value, key);\n      });\n      return result;\n    };\n  };\n\n  // Groups the object's values by a criterion. Pass either a string attribute\n  // to group by, or a function that returns the criterion.\n  _.groupBy = group(function(result, value, key) {\n    if (_.has(result, key)) result[key].push(value); else result[key] = [value];\n  });\n\n  // Indexes the object's values by a criterion, similar to `groupBy`, but for\n  // when you know that your index values will be unique.\n  _.indexBy = group(function(result, value, key) {\n    result[key] = value;\n  });\n\n  // Counts instances of an object that group by a certain criterion. Pass\n  // either a string attribute to count by, or a function that returns the\n  // criterion.\n  _.countBy = group(function(result, value, key) {\n    if (_.has(result, key)) result[key]++; else result[key] = 1;\n  });\n\n  // Safely create a real, live array from anything iterable.\n  _.toArray = function(obj) {\n    if (!obj) return [];\n    if (_.isArray(obj)) return slice.call(obj);\n    if (isArrayLike(obj)) return _.map(obj, _.identity);\n    return _.values(obj);\n  };\n\n  // Return the number of elements in an object.\n  _.size = function(obj) {\n    if (obj == null) return 0;\n    return isArrayLike(obj) ? obj.length : _.keys(obj).length;\n  };\n\n  // Split a collection into two arrays: one whose elements all satisfy the given\n  // predicate, and one whose elements all do not satisfy the predicate.\n  _.partition = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var pass = [], fail = [];\n    _.each(obj, function(value, key, obj) {\n      (predicate(value, key, obj) ? pass : fail).push(value);\n    });\n    return [pass, fail];\n  };\n\n  // Array Functions\n  // ---------------\n\n  // Get the first element of an array. Passing **n** will return the first N\n  // values in the array. Aliased as `head` and `take`. The **guard** check\n  // allows it to work with `_.map`.\n  _.first = _.head = _.take = function(array, n, guard) {\n    if (array == null) return void 0;\n    if (n == null || guard) return array[0];\n    return _.initial(array, array.length - n);\n  };\n\n  // Returns everything but the last entry of the array. Especially useful on\n  // the arguments object. Passing **n** will return all the values in\n  // the array, excluding the last N.\n  _.initial = function(array, n, guard) {\n    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n  };\n\n  // Get the last element of an array. Passing **n** will return the last N\n  // values in the array.\n  _.last = function(array, n, guard) {\n    if (array == null) return void 0;\n    if (n == null || guard) return array[array.length - 1];\n    return _.rest(array, Math.max(0, array.length - n));\n  };\n\n  // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n  // Especially useful on the arguments object. Passing an **n** will return\n  // the rest N values in the array.\n  _.rest = _.tail = _.drop = function(array, n, guard) {\n    return slice.call(array, n == null || guard ? 1 : n);\n  };\n\n  // Trim out all falsy values from an array.\n  _.compact = function(array) {\n    return _.filter(array, _.identity);\n  };\n\n  // Internal implementation of a recursive `flatten` function.\n  var flatten = function(input, shallow, strict, startIndex) {\n    var output = [], idx = 0;\n    for (var i = startIndex || 0, length = getLength(input); i < length; i++) {\n      var value = input[i];\n      if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {\n        //flatten current level of array or arguments object\n        if (!shallow) value = flatten(value, shallow, strict);\n        var j = 0, len = value.length;\n        output.length += len;\n        while (j < len) {\n          output[idx++] = value[j++];\n        }\n      } else if (!strict) {\n        output[idx++] = value;\n      }\n    }\n    return output;\n  };\n\n  // Flatten out an array, either recursively (by default), or just one level.\n  _.flatten = function(array, shallow) {\n    return flatten(array, shallow, false);\n  };\n\n  // Return a version of the array that does not contain the specified value(s).\n  _.without = function(array) {\n    return _.difference(array, slice.call(arguments, 1));\n  };\n\n  // Produce a duplicate-free version of the array. If the array has already\n  // been sorted, you have the option of using a faster algorithm.\n  // Aliased as `unique`.\n  _.uniq = _.unique = function(array, isSorted, iteratee, context) {\n    if (!_.isBoolean(isSorted)) {\n      context = iteratee;\n      iteratee = isSorted;\n      isSorted = false;\n    }\n    if (iteratee != null) iteratee = cb(iteratee, context);\n    var result = [];\n    var seen = [];\n    for (var i = 0, length = getLength(array); i < length; i++) {\n      var value = array[i],\n          computed = iteratee ? iteratee(value, i, array) : value;\n      if (isSorted) {\n        if (!i || seen !== computed) result.push(value);\n        seen = computed;\n      } else if (iteratee) {\n        if (!_.contains(seen, computed)) {\n          seen.push(computed);\n          result.push(value);\n        }\n      } else if (!_.contains(result, value)) {\n        result.push(value);\n      }\n    }\n    return result;\n  };\n\n  // Produce an array that contains the union: each distinct element from all of\n  // the passed-in arrays.\n  _.union = function() {\n    return _.uniq(flatten(arguments, true, true));\n  };\n\n  // Produce an array that contains every item shared between all the\n  // passed-in arrays.\n  _.intersection = function(array) {\n    var result = [];\n    var argsLength = arguments.length;\n    for (var i = 0, length = getLength(array); i < length; i++) {\n      var item = array[i];\n      if (_.contains(result, item)) continue;\n      for (var j = 1; j < argsLength; j++) {\n        if (!_.contains(arguments[j], item)) break;\n      }\n      if (j === argsLength) result.push(item);\n    }\n    return result;\n  };\n\n  // Take the difference between one array and a number of other arrays.\n  // Only the elements present in just the first array will remain.\n  _.difference = function(array) {\n    var rest = flatten(arguments, true, true, 1);\n    return _.filter(array, function(value){\n      return !_.contains(rest, value);\n    });\n  };\n\n  // Zip together multiple lists into a single array -- elements that share\n  // an index go together.\n  _.zip = function() {\n    return _.unzip(arguments);\n  };\n\n  // Complement of _.zip. Unzip accepts an array of arrays and groups\n  // each array's elements on shared indices\n  _.unzip = function(array) {\n    var length = array && _.max(array, getLength).length || 0;\n    var result = Array(length);\n\n    for (var index = 0; index < length; index++) {\n      result[index] = _.pluck(array, index);\n    }\n    return result;\n  };\n\n  // Converts lists into objects. Pass either a single array of `[key, value]`\n  // pairs, or two parallel arrays of the same length -- one of keys, and one of\n  // the corresponding values.\n  _.object = function(list, values) {\n    var result = {};\n    for (var i = 0, length = getLength(list); i < length; i++) {\n      if (values) {\n        result[list[i]] = values[i];\n      } else {\n        result[list[i][0]] = list[i][1];\n      }\n    }\n    return result;\n  };\n\n  // Generator function to create the findIndex and findLastIndex functions\n  function createPredicateIndexFinder(dir) {\n    return function(array, predicate, context) {\n      predicate = cb(predicate, context);\n      var length = getLength(array);\n      var index = dir > 0 ? 0 : length - 1;\n      for (; index >= 0 && index < length; index += dir) {\n        if (predicate(array[index], index, array)) return index;\n      }\n      return -1;\n    };\n  }\n\n  // Returns the first index on an array-like that passes a predicate test\n  _.findIndex = createPredicateIndexFinder(1);\n  _.findLastIndex = createPredicateIndexFinder(-1);\n\n  // Use a comparator function to figure out the smallest index at which\n  // an object should be inserted so as to maintain order. Uses binary search.\n  _.sortedIndex = function(array, obj, iteratee, context) {\n    iteratee = cb(iteratee, context, 1);\n    var value = iteratee(obj);\n    var low = 0, high = getLength(array);\n    while (low < high) {\n      var mid = Math.floor((low + high) / 2);\n      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n    }\n    return low;\n  };\n\n  // Generator function to create the indexOf and lastIndexOf functions\n  function createIndexFinder(dir, predicateFind, sortedIndex) {\n    return function(array, item, idx) {\n      var i = 0, length = getLength(array);\n      if (typeof idx == 'number') {\n        if (dir > 0) {\n            i = idx >= 0 ? idx : Math.max(idx + length, i);\n        } else {\n            length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n        }\n      } else if (sortedIndex && idx && length) {\n        idx = sortedIndex(array, item);\n        return array[idx] === item ? idx : -1;\n      }\n      if (item !== item) {\n        idx = predicateFind(slice.call(array, i, length), _.isNaN);\n        return idx >= 0 ? idx + i : -1;\n      }\n      for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n        if (array[idx] === item) return idx;\n      }\n      return -1;\n    };\n  }\n\n  // Return the position of the first occurrence of an item in an array,\n  // or -1 if the item is not included in the array.\n  // If the array is large and already in sort order, pass `true`\n  // for **isSorted** to use binary search.\n  _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);\n  _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);\n\n  // Generate an integer Array containing an arithmetic progression. A port of\n  // the native Python `range()` function. See\n  // [the Python documentation](http://docs.python.org/library/functions.html#range).\n  _.range = function(start, stop, step) {\n    if (stop == null) {\n      stop = start || 0;\n      start = 0;\n    }\n    step = step || 1;\n\n    var length = Math.max(Math.ceil((stop - start) / step), 0);\n    var range = Array(length);\n\n    for (var idx = 0; idx < length; idx++, start += step) {\n      range[idx] = start;\n    }\n\n    return range;\n  };\n\n  // Function (ahem) Functions\n  // ------------------\n\n  // Determines whether to execute a function as a constructor\n  // or a normal function with the provided arguments\n  var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {\n    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n    var self = baseCreate(sourceFunc.prototype);\n    var result = sourceFunc.apply(self, args);\n    if (_.isObject(result)) return result;\n    return self;\n  };\n\n  // Create a function bound to a given object (assigning `this`, and arguments,\n  // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n  // available.\n  _.bind = function(func, context) {\n    if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n    if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');\n    var args = slice.call(arguments, 2);\n    var bound = function() {\n      return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));\n    };\n    return bound;\n  };\n\n  // Partially apply a function by creating a version that has had some of its\n  // arguments pre-filled, without changing its dynamic `this` context. _ acts\n  // as a placeholder, allowing any combination of arguments to be pre-filled.\n  _.partial = function(func) {\n    var boundArgs = slice.call(arguments, 1);\n    var bound = function() {\n      var position = 0, length = boundArgs.length;\n      var args = Array(length);\n      for (var i = 0; i < length; i++) {\n        args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];\n      }\n      while (position < arguments.length) args.push(arguments[position++]);\n      return executeBound(func, bound, this, this, args);\n    };\n    return bound;\n  };\n\n  // Bind a number of an object's methods to that object. Remaining arguments\n  // are the method names to be bound. Useful for ensuring that all callbacks\n  // defined on an object belong to it.\n  _.bindAll = function(obj) {\n    var i, length = arguments.length, key;\n    if (length <= 1) throw new Error('bindAll must be passed function names');\n    for (i = 1; i < length; i++) {\n      key = arguments[i];\n      obj[key] = _.bind(obj[key], obj);\n    }\n    return obj;\n  };\n\n  // Memoize an expensive function by storing its results.\n  _.memoize = function(func, hasher) {\n    var memoize = function(key) {\n      var cache = memoize.cache;\n      var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n      if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);\n      return cache[address];\n    };\n    memoize.cache = {};\n    return memoize;\n  };\n\n  // Delays a function for the given number of milliseconds, and then calls\n  // it with the arguments supplied.\n  _.delay = function(func, wait) {\n    var args = slice.call(arguments, 2);\n    return setTimeout(function(){\n      return func.apply(null, args);\n    }, wait);\n  };\n\n  // Defers a function, scheduling it to run after the current call stack has\n  // cleared.\n  _.defer = _.partial(_.delay, _, 1);\n\n  // Returns a function, that, when invoked, will only be triggered at most once\n  // during a given window of time. Normally, the throttled function will run\n  // as much as it can, without ever going more than once per `wait` duration;\n  // but if you'd like to disable the execution on the leading edge, pass\n  // `{leading: false}`. To disable execution on the trailing edge, ditto.\n  _.throttle = function(func, wait, options) {\n    var context, args, result;\n    var timeout = null;\n    var previous = 0;\n    if (!options) options = {};\n    var later = function() {\n      previous = options.leading === false ? 0 : _.now();\n      timeout = null;\n      result = func.apply(context, args);\n      if (!timeout) context = args = null;\n    };\n    return function() {\n      var now = _.now();\n      if (!previous && options.leading === false) previous = now;\n      var remaining = wait - (now - previous);\n      context = this;\n      args = arguments;\n      if (remaining <= 0 || remaining > wait) {\n        if (timeout) {\n          clearTimeout(timeout);\n          timeout = null;\n        }\n        previous = now;\n        result = func.apply(context, args);\n        if (!timeout) context = args = null;\n      } else if (!timeout && options.trailing !== false) {\n        timeout = setTimeout(later, remaining);\n      }\n      return result;\n    };\n  };\n\n  // Returns a function, that, as long as it continues to be invoked, will not\n  // be triggered. The function will be called after it stops being called for\n  // N milliseconds. If `immediate` is passed, trigger the function on the\n  // leading edge, instead of the trailing.\n  _.debounce = function(func, wait, immediate) {\n    var timeout, args, context, timestamp, result;\n\n    var later = function() {\n      var last = _.now() - timestamp;\n\n      if (last < wait && last >= 0) {\n        timeout = setTimeout(later, wait - last);\n      } else {\n        timeout = null;\n        if (!immediate) {\n          result = func.apply(context, args);\n          if (!timeout) context = args = null;\n        }\n      }\n    };\n\n    return function() {\n      context = this;\n      args = arguments;\n      timestamp = _.now();\n      var callNow = immediate && !timeout;\n      if (!timeout) timeout = setTimeout(later, wait);\n      if (callNow) {\n        result = func.apply(context, args);\n        context = args = null;\n      }\n\n      return result;\n    };\n  };\n\n  // Returns the first function passed as an argument to the second,\n  // allowing you to adjust arguments, run code before and after, and\n  // conditionally execute the original function.\n  _.wrap = function(func, wrapper) {\n    return _.partial(wrapper, func);\n  };\n\n  // Returns a negated version of the passed-in predicate.\n  _.negate = function(predicate) {\n    return function() {\n      return !predicate.apply(this, arguments);\n    };\n  };\n\n  // Returns a function that is the composition of a list of functions, each\n  // consuming the return value of the function that follows.\n  _.compose = function() {\n    var args = arguments;\n    var start = args.length - 1;\n    return function() {\n      var i = start;\n      var result = args[start].apply(this, arguments);\n      while (i--) result = args[i].call(this, result);\n      return result;\n    };\n  };\n\n  // Returns a function that will only be executed on and after the Nth call.\n  _.after = function(times, func) {\n    return function() {\n      if (--times < 1) {\n        return func.apply(this, arguments);\n      }\n    };\n  };\n\n  // Returns a function that will only be executed up to (but not including) the Nth call.\n  _.before = function(times, func) {\n    var memo;\n    return function() {\n      if (--times > 0) {\n        memo = func.apply(this, arguments);\n      }\n      if (times <= 1) func = null;\n      return memo;\n    };\n  };\n\n  // Returns a function that will be executed at most one time, no matter how\n  // often you call it. Useful for lazy initialization.\n  _.once = _.partial(_.before, 2);\n\n  // Object Functions\n  // ----------------\n\n  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\n  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\n  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n                      'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\n  function collectNonEnumProps(obj, keys) {\n    var nonEnumIdx = nonEnumerableProps.length;\n    var constructor = obj.constructor;\n    var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;\n\n    // Constructor is a special case.\n    var prop = 'constructor';\n    if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);\n\n    while (nonEnumIdx--) {\n      prop = nonEnumerableProps[nonEnumIdx];\n      if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {\n        keys.push(prop);\n      }\n    }\n  }\n\n  // Retrieve the names of an object's own properties.\n  // Delegates to **ECMAScript 5**'s native `Object.keys`\n  _.keys = function(obj) {\n    if (!_.isObject(obj)) return [];\n    if (nativeKeys) return nativeKeys(obj);\n    var keys = [];\n    for (var key in obj) if (_.has(obj, key)) keys.push(key);\n    // Ahem, IE < 9.\n    if (hasEnumBug) collectNonEnumProps(obj, keys);\n    return keys;\n  };\n\n  // Retrieve all the property names of an object.\n  _.allKeys = function(obj) {\n    if (!_.isObject(obj)) return [];\n    var keys = [];\n    for (var key in obj) keys.push(key);\n    // Ahem, IE < 9.\n    if (hasEnumBug) collectNonEnumProps(obj, keys);\n    return keys;\n  };\n\n  // Retrieve the values of an object's properties.\n  _.values = function(obj) {\n    var keys = _.keys(obj);\n    var length = keys.length;\n    var values = Array(length);\n    for (var i = 0; i < length; i++) {\n      values[i] = obj[keys[i]];\n    }\n    return values;\n  };\n\n  // Returns the results of applying the iteratee to each element of the object\n  // In contrast to _.map it returns an object\n  _.mapObject = function(obj, iteratee, context) {\n    iteratee = cb(iteratee, context);\n    var keys =  _.keys(obj),\n          length = keys.length,\n          results = {},\n          currentKey;\n      for (var index = 0; index < length; index++) {\n        currentKey = keys[index];\n        results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n      }\n      return results;\n  };\n\n  // Convert an object into a list of `[key, value]` pairs.\n  _.pairs = function(obj) {\n    var keys = _.keys(obj);\n    var length = keys.length;\n    var pairs = Array(length);\n    for (var i = 0; i < length; i++) {\n      pairs[i] = [keys[i], obj[keys[i]]];\n    }\n    return pairs;\n  };\n\n  // Invert the keys and values of an object. The values must be serializable.\n  _.invert = function(obj) {\n    var result = {};\n    var keys = _.keys(obj);\n    for (var i = 0, length = keys.length; i < length; i++) {\n      result[obj[keys[i]]] = keys[i];\n    }\n    return result;\n  };\n\n  // Return a sorted list of the function names available on the object.\n  // Aliased as `methods`\n  _.functions = _.methods = function(obj) {\n    var names = [];\n    for (var key in obj) {\n      if (_.isFunction(obj[key])) names.push(key);\n    }\n    return names.sort();\n  };\n\n  // Extend a given object with all the properties in passed-in object(s).\n  _.extend = createAssigner(_.allKeys);\n\n  // Assigns a given object with all the own properties in the passed-in object(s)\n  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\n  _.extendOwn = _.assign = createAssigner(_.keys);\n\n  // Returns the first key on an object that passes a predicate test\n  _.findKey = function(obj, predicate, context) {\n    predicate = cb(predicate, context);\n    var keys = _.keys(obj), key;\n    for (var i = 0, length = keys.length; i < length; i++) {\n      key = keys[i];\n      if (predicate(obj[key], key, obj)) return key;\n    }\n  };\n\n  // Return a copy of the object only containing the whitelisted properties.\n  _.pick = function(object, oiteratee, context) {\n    var result = {}, obj = object, iteratee, keys;\n    if (obj == null) return result;\n    if (_.isFunction(oiteratee)) {\n      keys = _.allKeys(obj);\n      iteratee = optimizeCb(oiteratee, context);\n    } else {\n      keys = flatten(arguments, false, false, 1);\n      iteratee = function(value, key, obj) { return key in obj; };\n      obj = Object(obj);\n    }\n    for (var i = 0, length = keys.length; i < length; i++) {\n      var key = keys[i];\n      var value = obj[key];\n      if (iteratee(value, key, obj)) result[key] = value;\n    }\n    return result;\n  };\n\n   // Return a copy of the object without the blacklisted properties.\n  _.omit = function(obj, iteratee, context) {\n    if (_.isFunction(iteratee)) {\n      iteratee = _.negate(iteratee);\n    } else {\n      var keys = _.map(flatten(arguments, false, false, 1), String);\n      iteratee = function(value, key) {\n        return !_.contains(keys, key);\n      };\n    }\n    return _.pick(obj, iteratee, context);\n  };\n\n  // Fill in a given object with default properties.\n  _.defaults = createAssigner(_.allKeys, true);\n\n  // Creates an object that inherits from the given prototype object.\n  // If additional properties are provided then they will be added to the\n  // created object.\n  _.create = function(prototype, props) {\n    var result = baseCreate(prototype);\n    if (props) _.extendOwn(result, props);\n    return result;\n  };\n\n  // Create a (shallow-cloned) duplicate of an object.\n  _.clone = function(obj) {\n    if (!_.isObject(obj)) return obj;\n    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n  };\n\n  // Invokes interceptor with the obj, and then returns obj.\n  // The primary purpose of this method is to \"tap into\" a method chain, in\n  // order to perform operations on intermediate results within the chain.\n  _.tap = function(obj, interceptor) {\n    interceptor(obj);\n    return obj;\n  };\n\n  // Returns whether an object has a given set of `key:value` pairs.\n  _.isMatch = function(object, attrs) {\n    var keys = _.keys(attrs), length = keys.length;\n    if (object == null) return !length;\n    var obj = Object(object);\n    for (var i = 0; i < length; i++) {\n      var key = keys[i];\n      if (attrs[key] !== obj[key] || !(key in obj)) return false;\n    }\n    return true;\n  };\n\n\n  // Internal recursive comparison function for `isEqual`.\n  var eq = function(a, b, aStack, bStack) {\n    // Identical objects are equal. `0 === -0`, but they aren't identical.\n    // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n    if (a === b) return a !== 0 || 1 / a === 1 / b;\n    // A strict comparison is necessary because `null == undefined`.\n    if (a == null || b == null) return a === b;\n    // Unwrap any wrapped objects.\n    if (a instanceof _) a = a._wrapped;\n    if (b instanceof _) b = b._wrapped;\n    // Compare `[[Class]]` names.\n    var className = toString.call(a);\n    if (className !== toString.call(b)) return false;\n    switch (className) {\n      // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n      case '[object RegExp]':\n      // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n      case '[object String]':\n        // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n        // equivalent to `new String(\"5\")`.\n        return '' + a === '' + b;\n      case '[object Number]':\n        // `NaN`s are equivalent, but non-reflexive.\n        // Object(NaN) is equivalent to NaN\n        if (+a !== +a) return +b !== +b;\n        // An `egal` comparison is performed for other numeric values.\n        return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n      case '[object Date]':\n      case '[object Boolean]':\n        // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n        // millisecond representations. Note that invalid dates with millisecond representations\n        // of `NaN` are not equivalent.\n        return +a === +b;\n    }\n\n    var areArrays = className === '[object Array]';\n    if (!areArrays) {\n      if (typeof a != 'object' || typeof b != 'object') return false;\n\n      // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n      // from different frames are.\n      var aCtor = a.constructor, bCtor = b.constructor;\n      if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&\n                               _.isFunction(bCtor) && bCtor instanceof bCtor)\n                          && ('constructor' in a && 'constructor' in b)) {\n        return false;\n      }\n    }\n    // Assume equality for cyclic structures. The algorithm for detecting cyclic\n    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n    // Initializing stack of traversed objects.\n    // It's done here since we only need them for objects and arrays comparison.\n    aStack = aStack || [];\n    bStack = bStack || [];\n    var length = aStack.length;\n    while (length--) {\n      // Linear search. Performance is inversely proportional to the number of\n      // unique nested structures.\n      if (aStack[length] === a) return bStack[length] === b;\n    }\n\n    // Add the first object to the stack of traversed objects.\n    aStack.push(a);\n    bStack.push(b);\n\n    // Recursively compare objects and arrays.\n    if (areArrays) {\n      // Compare array lengths to determine if a deep comparison is necessary.\n      length = a.length;\n      if (length !== b.length) return false;\n      // Deep compare the contents, ignoring non-numeric properties.\n      while (length--) {\n        if (!eq(a[length], b[length], aStack, bStack)) return false;\n      }\n    } else {\n      // Deep compare objects.\n      var keys = _.keys(a), key;\n      length = keys.length;\n      // Ensure that both objects contain the same number of properties before comparing deep equality.\n      if (_.keys(b).length !== length) return false;\n      while (length--) {\n        // Deep compare each member\n        key = keys[length];\n        if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n      }\n    }\n    // Remove the first object from the stack of traversed objects.\n    aStack.pop();\n    bStack.pop();\n    return true;\n  };\n\n  // Perform a deep comparison to check if two objects are equal.\n  _.isEqual = function(a, b) {\n    return eq(a, b);\n  };\n\n  // Is a given array, string, or object empty?\n  // An \"empty\" object has no enumerable own-properties.\n  _.isEmpty = function(obj) {\n    if (obj == null) return true;\n    if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;\n    return _.keys(obj).length === 0;\n  };\n\n  // Is a given value a DOM element?\n  _.isElement = function(obj) {\n    return !!(obj && obj.nodeType === 1);\n  };\n\n  // Is a given value an array?\n  // Delegates to ECMA5's native Array.isArray\n  _.isArray = nativeIsArray || function(obj) {\n    return toString.call(obj) === '[object Array]';\n  };\n\n  // Is a given variable an object?\n  _.isObject = function(obj) {\n    var type = typeof obj;\n    return type === 'function' || type === 'object' && !!obj;\n  };\n\n  // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.\n  _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {\n    _['is' + name] = function(obj) {\n      return toString.call(obj) === '[object ' + name + ']';\n    };\n  });\n\n  // Define a fallback version of the method in browsers (ahem, IE < 9), where\n  // there isn't any inspectable \"Arguments\" type.\n  if (!_.isArguments(arguments)) {\n    _.isArguments = function(obj) {\n      return _.has(obj, 'callee');\n    };\n  }\n\n  // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n  // IE 11 (#1621), and in Safari 8 (#1929).\n  if (typeof /./ != 'function' && typeof Int8Array != 'object') {\n    _.isFunction = function(obj) {\n      return typeof obj == 'function' || false;\n    };\n  }\n\n  // Is a given object a finite number?\n  _.isFinite = function(obj) {\n    return isFinite(obj) && !isNaN(parseFloat(obj));\n  };\n\n  // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n  _.isNaN = function(obj) {\n    return _.isNumber(obj) && obj !== +obj;\n  };\n\n  // Is a given value a boolean?\n  _.isBoolean = function(obj) {\n    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n  };\n\n  // Is a given value equal to null?\n  _.isNull = function(obj) {\n    return obj === null;\n  };\n\n  // Is a given variable undefined?\n  _.isUndefined = function(obj) {\n    return obj === void 0;\n  };\n\n  // Shortcut function for checking if an object has a given property directly\n  // on itself (in other words, not on a prototype).\n  _.has = function(obj, key) {\n    return obj != null && hasOwnProperty.call(obj, key);\n  };\n\n  // Utility Functions\n  // -----------------\n\n  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n  // previous owner. Returns a reference to the Underscore object.\n  _.noConflict = function() {\n    root._ = previousUnderscore;\n    return this;\n  };\n\n  // Keep the identity function around for default iteratees.\n  _.identity = function(value) {\n    return value;\n  };\n\n  // Predicate-generating functions. Often useful outside of Underscore.\n  _.constant = function(value) {\n    return function() {\n      return value;\n    };\n  };\n\n  _.noop = function(){};\n\n  _.property = property;\n\n  // Generates a function for a given object that returns a given property.\n  _.propertyOf = function(obj) {\n    return obj == null ? function(){} : function(key) {\n      return obj[key];\n    };\n  };\n\n  // Returns a predicate for checking whether an object has a given set of\n  // `key:value` pairs.\n  _.matcher = _.matches = function(attrs) {\n    attrs = _.extendOwn({}, attrs);\n    return function(obj) {\n      return _.isMatch(obj, attrs);\n    };\n  };\n\n  // Run a function **n** times.\n  _.times = function(n, iteratee, context) {\n    var accum = Array(Math.max(0, n));\n    iteratee = optimizeCb(iteratee, context, 1);\n    for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n    return accum;\n  };\n\n  // Return a random integer between min and max (inclusive).\n  _.random = function(min, max) {\n    if (max == null) {\n      max = min;\n      min = 0;\n    }\n    return min + Math.floor(Math.random() * (max - min + 1));\n  };\n\n  // A (possibly faster) way to get the current timestamp as an integer.\n  _.now = Date.now || function() {\n    return new Date().getTime();\n  };\n\n   // List of HTML entities for escaping.\n  var escapeMap = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#x27;',\n    '`': '&#x60;'\n  };\n  var unescapeMap = _.invert(escapeMap);\n\n  // Functions for escaping and unescaping strings to/from HTML interpolation.\n  var createEscaper = function(map) {\n    var escaper = function(match) {\n      return map[match];\n    };\n    // Regexes for identifying a key that needs to be escaped\n    var source = '(?:' + _.keys(map).join('|') + ')';\n    var testRegexp = RegExp(source);\n    var replaceRegexp = RegExp(source, 'g');\n    return function(string) {\n      string = string == null ? '' : '' + string;\n      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n    };\n  };\n  _.escape = createEscaper(escapeMap);\n  _.unescape = createEscaper(unescapeMap);\n\n  // If the value of the named `property` is a function then invoke it with the\n  // `object` as context; otherwise, return it.\n  _.result = function(object, property, fallback) {\n    var value = object == null ? void 0 : object[property];\n    if (value === void 0) {\n      value = fallback;\n    }\n    return _.isFunction(value) ? value.call(object) : value;\n  };\n\n  // Generate a unique integer id (unique within the entire client session).\n  // Useful for temporary DOM ids.\n  var idCounter = 0;\n  _.uniqueId = function(prefix) {\n    var id = ++idCounter + '';\n    return prefix ? prefix + id : id;\n  };\n\n  // By default, Underscore uses ERB-style template delimiters, change the\n  // following template settings to use alternative delimiters.\n  _.templateSettings = {\n    evaluate    : /<%([\\s\\S]+?)%>/g,\n    interpolate : /<%=([\\s\\S]+?)%>/g,\n    escape      : /<%-([\\s\\S]+?)%>/g\n  };\n\n  // When customizing `templateSettings`, if you don't want to define an\n  // interpolation, evaluation or escaping regex, we need one that is\n  // guaranteed not to match.\n  var noMatch = /(.)^/;\n\n  // Certain characters need to be escaped so that they can be put into a\n  // string literal.\n  var escapes = {\n    \"'\":      \"'\",\n    '\\\\':     '\\\\',\n    '\\r':     'r',\n    '\\n':     'n',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  var escaper = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\n  var escapeChar = function(match) {\n    return '\\\\' + escapes[match];\n  };\n\n  // JavaScript micro-templating, similar to John Resig's implementation.\n  // Underscore templating handles arbitrary delimiters, preserves whitespace,\n  // and correctly escapes quotes within interpolated code.\n  // NB: `oldSettings` only exists for backwards compatibility.\n  _.template = function(text, settings, oldSettings) {\n    if (!settings && oldSettings) settings = oldSettings;\n    settings = _.defaults({}, settings, _.templateSettings);\n\n    // Combine delimiters into one regular expression via alternation.\n    var matcher = RegExp([\n      (settings.escape || noMatch).source,\n      (settings.interpolate || noMatch).source,\n      (settings.evaluate || noMatch).source\n    ].join('|') + '|$', 'g');\n\n    // Compile the template source, escaping string literals appropriately.\n    var index = 0;\n    var source = \"__p+='\";\n    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n      source += text.slice(index, offset).replace(escaper, escapeChar);\n      index = offset + match.length;\n\n      if (escape) {\n        source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n      } else if (interpolate) {\n        source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n      } else if (evaluate) {\n        source += \"';\\n\" + evaluate + \"\\n__p+='\";\n      }\n\n      // Adobe VMs need the match returned to produce the correct offest.\n      return match;\n    });\n    source += \"';\\n\";\n\n    // If a variable is not specified, place data values in local scope.\n    if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n    source = \"var __t,__p='',__j=Array.prototype.join,\" +\n      \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n      source + 'return __p;\\n';\n\n    try {\n      var render = new Function(settings.variable || 'obj', '_', source);\n    } catch (e) {\n      e.source = source;\n      throw e;\n    }\n\n    var template = function(data) {\n      return render.call(this, data, _);\n    };\n\n    // Provide the compiled source as a convenience for precompilation.\n    var argument = settings.variable || 'obj';\n    template.source = 'function(' + argument + '){\\n' + source + '}';\n\n    return template;\n  };\n\n  // Add a \"chain\" function. Start chaining a wrapped Underscore object.\n  _.chain = function(obj) {\n    var instance = _(obj);\n    instance._chain = true;\n    return instance;\n  };\n\n  // OOP\n  // ---------------\n  // If Underscore is called as a function, it returns a wrapped object that\n  // can be used OO-style. This wrapper holds altered versions of all the\n  // underscore functions. Wrapped objects may be chained.\n\n  // Helper function to continue chaining intermediate results.\n  var result = function(instance, obj) {\n    return instance._chain ? _(obj).chain() : obj;\n  };\n\n  // Add your own custom functions to the Underscore object.\n  _.mixin = function(obj) {\n    _.each(_.functions(obj), function(name) {\n      var func = _[name] = obj[name];\n      _.prototype[name] = function() {\n        var args = [this._wrapped];\n        push.apply(args, arguments);\n        return result(this, func.apply(_, args));\n      };\n    });\n  };\n\n  // Add all of the Underscore functions to the wrapper object.\n  _.mixin(_);\n\n  // Add all mutator Array functions to the wrapper.\n  _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n    var method = ArrayProto[name];\n    _.prototype[name] = function() {\n      var obj = this._wrapped;\n      method.apply(obj, arguments);\n      if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n      return result(this, obj);\n    };\n  });\n\n  // Add all accessor Array functions to the wrapper.\n  _.each(['concat', 'join', 'slice'], function(name) {\n    var method = ArrayProto[name];\n    _.prototype[name] = function() {\n      return result(this, method.apply(this._wrapped, arguments));\n    };\n  });\n\n  // Extracts the result from a wrapped and chained object.\n  _.prototype.value = function() {\n    return this._wrapped;\n  };\n\n  // Provide unwrapping proxy for some methods used in engine operations\n  // such as arithmetic and JSON stringification.\n  _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n  _.prototype.toString = function() {\n    return '' + this._wrapped;\n  };\n\n  // AMD registration happens at the end for compatibility with AMD loaders\n  // that may not enforce next-turn semantics on modules. Even though general\n  // practice for AMD registration is to be anonymous, underscore registers\n  // as a named module because, like jQuery, it is a base library that is\n  // popular enough to be bundled in a third party lib, but not be part of\n  // an AMD load request. Those cases could generate an error when an\n  // anonymous define() is called outside of a loader request.\n  if (typeof define === 'function' && define.amd) {\n    define('underscore', [], function() {\n      return _;\n    });\n  }\n}.call(this));\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as falcor from \"falcor\";\nimport * as HttpDataSource from \"falcor-http-datasource\";\n\nimport {Urls} from \"../Utils\";\n\ntype HttpDataSourceConfiguration = {\n    crossDomain: boolean;\n    withCredentials: boolean;\n    headers?: { [key: string]: string } ;\n}\n\n/**\n * @class ModelCreator\n *\n * @classdesc Creates API models.\n */\nexport class ModelCreator {\n    /**\n     * Creates a Falcor model.\n     *\n     * @description Max cache size will be set to 16 MB. Authorization\n     * header will be added if bearer token is supplied.\n     *\n     * @param {number} clientId - Client id for API requests.\n     * @param {number} [token] - Optional bearer token for API requests of\n     * protected resources.\n     * @returns {falcor.Model} Falcor model for HTTP requests.\n     */\n    public createModel(clientId: string, token?: string): falcor.Model {\n        const configuration: HttpDataSourceConfiguration = {\n            crossDomain: true,\n            withCredentials: false,\n        };\n\n        if (token != null) {\n            configuration.headers = { \"Authorization\": `Bearer ${token}` };\n        }\n\n        return new falcor.Model({\n            maxSize: 16 * 1024 * 1024,\n            source: new HttpDataSource(Urls.falcorModel(clientId), configuration),\n        });\n    }\n}\n\nexport default ModelCreator;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as vd from \"virtual-dom\";\n\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport {Container, Navigator} from \"../Viewer\";\nimport {Node} from \"../Graph\";\n\nimport {ComponentService, Component, IComponentConfiguration} from \"../Component\";\nimport {IVNodeHash} from \"../Render\";\n\nexport class AttributionComponent extends Component<IComponentConfiguration> {\n    public static componentName: string = \"attribution\";\n    private _disposable: Subscription;\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n    }\n\n    protected _activate(): void {\n        this._disposable = this._navigator.stateService.currentNode$\n            .map(\n                (node: Node): IVNodeHash => {\n                    return {name: this._name, vnode: this._getAttributionNode(node.username, node.key)};\n                })\n            .subscribe(this._container.domRenderer.render$);\n    }\n\n    protected _deactivate(): void {\n        this._disposable.unsubscribe();\n    }\n\n    protected _getDefaultConfiguration(): IComponentConfiguration {\n        return {};\n    }\n\n    private _getAttributionNode(username: string, photoId: string): vd.VNode {\n        return vd.h(\"div.Attribution\", {}, [\n            vd.h(\"a\", {href: `https://www.mapillary.com/app/user/${username}`,\n                       target: \"_blank\",\n                       textContent: `@${username}`,\n                      },\n                 []),\n            vd.h(\"span\", {textContent: \"|\"}, []),\n            vd.h(\"a\", {href: `https://www.mapillary.com/app/?pKey=${photoId}&focus=photo`,\n                       target: \"_blank\",\n                       textContent: \"mapillary.com\",\n                      },\n                 []),\n        ]);\n    }\n}\n\nComponentService.register(AttributionComponent);\nexport default AttributionComponent;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as vd from \"virtual-dom\";\n\nimport {Container, Navigator} from \"../Viewer\";\n\nimport {ComponentService, Component, IComponentConfiguration} from \"../Component\";\n\nexport class BackgroundComponent extends Component<IComponentConfiguration> {\n    public static componentName: string = \"background\";\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n    }\n\n    protected _activate(): void {\n        this._container.domRenderer.render$\n            .next({name: this._name, vnode: this._getBackgroundNode(\"The viewer can't display the given photo.\")});\n    }\n\n    protected _deactivate(): void {\n        return;\n    }\n\n    protected _getDefaultConfiguration(): IComponentConfiguration {\n        return {};\n    }\n\n    private _getBackgroundNode(notice: string): vd.VNode {\n        // todo: add condition for when to display the DOM node\n        return vd.h(\"div.BackgroundWrapper\", {}, [\n            vd.h(\"p\", {textContent: notice}, []),\n        ]);\n    }\n}\n\nComponentService.register(BackgroundComponent);\nexport default BackgroundComponent;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as falcor from \"falcor\";\nimport * as HttpDataSource from \"falcor-http-datasource\";\n\nimport {Urls} from \"../Utils\";\n\ntype HttpDataSourceConfiguration = {\n    crossDomain: boolean;\n    withCredentials: boolean;\n    headers?: { [key: string]: string } ;\n}\n\n/**\n * @class ModelCreator\n *\n * @classdesc Creates API models.\n */\nexport class ModelCreator {\n    /**\n     * Creates a Falcor model.\n     *\n     * @description Max cache size will be set to 16 MB. Authorization\n     * header will be added if bearer token is supplied.\n     *\n     * @param {number} clientId - Client id for API requests.\n     * @param {number} [token] - Optional bearer token for API requests of\n     * protected resources.\n     * @returns {falcor.Model} Falcor model for HTTP requests.\n     */\n    public createModel(clientId: string, token?: string): falcor.Model {\n        const configuration: HttpDataSourceConfiguration = {\n            crossDomain: true,\n            withCredentials: false,\n        };\n\n        if (token != null) {\n            configuration.headers = { \"Authorization\": `Bearer ${token}` };\n        }\n\n        return new falcor.Model({\n            maxSize: 16 * 1024 * 1024,\n            source: new HttpDataSource(Urls.falcorModel(clientId), configuration),\n        });\n    }\n}\n\nexport default ModelCreator;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as vd from \"virtual-dom\";\n\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport {Container, Navigator} from \"../Viewer\";\nimport {Node} from \"../Graph\";\n\nimport {ComponentService, Component, IComponentConfiguration} from \"../Component\";\nimport {IVNodeHash} from \"../Render\";\n\nexport class AttributionComponent extends Component<IComponentConfiguration> {\n    public static componentName: string = \"attribution\";\n    private _disposable: Subscription;\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n    }\n\n    protected _activate(): void {\n        this._disposable = this._navigator.stateService.currentNode$\n            .map(\n                (node: Node): IVNodeHash => {\n                    return {name: this._name, vnode: this._getAttributionNode(node.username, node.key)};\n                })\n            .subscribe(this._container.domRenderer.render$);\n    }\n\n    protected _deactivate(): void {\n        this._disposable.unsubscribe();\n    }\n\n    protected _getDefaultConfiguration(): IComponentConfiguration {\n        return {};\n    }\n\n    private _getAttributionNode(username: string, photoId: string): vd.VNode {\n        return vd.h(\"div.Attribution\", {}, [\n            vd.h(\"a\", {href: `https://www.mapillary.com/app/user/${username}`,\n                       target: \"_blank\",\n                       textContent: `@${username}`,\n                      },\n                 []),\n            vd.h(\"span\", {textContent: \"|\"}, []),\n            vd.h(\"a\", {href: `https://www.mapillary.com/app/?pKey=${photoId}&focus=photo`,\n                       target: \"_blank\",\n                       textContent: \"mapillary.com\",\n                      },\n                 []),\n        ]);\n    }\n}\n\nComponentService.register(AttributionComponent);\nexport default AttributionComponent;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as vd from \"virtual-dom\";\n\nimport {Container, Navigator} from \"../Viewer\";\n\nimport {ComponentService, Component, IComponentConfiguration} from \"../Component\";\n\nexport class BackgroundComponent extends Component<IComponentConfiguration> {\n    public static componentName: string = \"background\";\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n    }\n\n    protected _activate(): void {\n        this._container.domRenderer.render$\n            .next({name: this._name, vnode: this._getBackgroundNode(\"The viewer can't display the given photo.\")});\n    }\n\n    protected _deactivate(): void {\n        return;\n    }\n\n    protected _getDefaultConfiguration(): IComponentConfiguration {\n        return {};\n    }\n\n    private _getBackgroundNode(notice: string): vd.VNode {\n        // todo: add condition for when to display the DOM node\n        return vd.h(\"div.BackgroundWrapper\", {}, [\n            vd.h(\"p\", {textContent: notice}, []),\n        ]);\n    }\n}\n\nComponentService.register(BackgroundComponent);\nexport default BackgroundComponent;\n",
-    "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as vd from \"virtual-dom\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport {\n    Component,\n    ComponentService,\n    IComponentConfiguration,\n} from \"../Component\";\nimport {\n    Spatial,\n    Transform,\n} from \"../Geo\";\nimport {Node} from \"../Graph\";\nimport {\n    IVNodeHash,\n    RenderCamera,\n} from \"../Render\";\nimport {IFrame} from \"../State\";\nimport {\n    Container,\n    Navigator,\n} from \"../Viewer\";\n\nexport class BearingComponent extends Component<IComponentConfiguration> {\n    public static componentName: string = \"bearing\";\n\n    private _spatial: Spatial;\n    private _svgNamespace: string;\n    private _distinctThreshold: number;\n\n    private _renderSubscription: Subscription;\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n\n        this._spatial = new Spatial();\n        this._svgNamespace = \"http://www.w3.org/2000/svg\";\n        this._distinctThreshold = Math.PI / 90;\n    }\n\n    protected _activate(): void {\n        let nodeBearingFov$: Observable<[number, number]> = this._navigator.stateService.currentState$\n            .distinctUntilChanged(\n                undefined,\n                (frame: IFrame): string => {\n                    return frame.state.currentNode.key;\n                })\n            .map(\n                (frame: IFrame): [number, number] => {\n                    let node: Node = frame.state.currentNode;\n                    let transform: Transform = frame.state.currentTransform;\n\n                    if (node.pano) {\n                        let hFov: number = 2 * Math.PI * node.gpano.CroppedAreaImageWidthPixels / node.gpano.FullPanoWidthPixels;\n\n                        return [this._spatial.degToRad(node.ca), hFov];\n                    }\n\n                    let size: number = Math.max(transform.basicWidth, transform.basicHeight);\n\n                    if (size <= 0) {\n                        console.warn(\n                            `Original image size (${transform.basicWidth}, ${transform.basicHeight}) is invalid (${node.key}. ` +\n                            \"Not showing available fov.\");\n                    }\n\n                    let hFov: number = size > 0 ?\n                        2 * Math.atan(0.5 * transform.basicWidth / (size * transform.focal)) :\n                        0;\n\n                    return [this._spatial.degToRad(node.ca), hFov];\n                })\n            .distinctUntilChanged(\n                (a1: [number, number], a2: [number, number]): boolean => {\n                    return Math.abs(a2[0] - a1[0]) < this._distinctThreshold &&\n                        Math.abs(a2[1] - a1[1]) < this._distinctThreshold;\n                });\n\n        let cameraBearingFov$: Observable<[number, number]> = this._container.renderService.renderCamera$\n            .map(\n                (rc: RenderCamera): [number, number] => {\n                    let vFov: number = this._spatial.degToRad(rc.perspective.fov);\n                    let hFov: number = Math.atan(rc.perspective.aspect * Math.tan(0.5 * vFov)) * 2;\n\n                    return [this._spatial.azimuthalToBearing(rc.rotation.phi), hFov];\n                })\n            .distinctUntilChanged(\n                (a1: [number, number], a2: [number, number]): boolean => {\n                    return Math.abs(a2[0] - a1[0]) < this._distinctThreshold &&\n                        Math.abs(a2[1] - a1[1]) < this._distinctThreshold;\n                });\n\n        this._renderSubscription = Observable\n            .combineLatest(\n                nodeBearingFov$,\n                cameraBearingFov$)\n            .map(\n                (args: [[number, number], [number, number]]): IVNodeHash => {\n                    let background: vd.VNode = vd.h(\n                        \"div.BearingIndicatorBackground\",\n                        { oncontextmenu: (event: MouseEvent): void => { event.preventDefault(); } },\n                        [\n                            vd.h(\"div.BearingIndicatorBackgroundRectangle\", {}, []),\n                            vd.h(\"div.BearingIndicatorBackgroundCircle\", {}, []),\n                        ]);\n\n                    let north: vd.VNode = vd.h(\"div.BearingIndicatorNorth\", {}, []);\n\n                    let nodeSector: vd.VNode = this._createCircleSector(args[0][0], args[0][1], \"#000\");\n                    let cameraSector: vd.VNode = this._createCircleSector(args[1][0], args[1][1], \"#fff\");\n\n                    let compass: vd.VNode = this._createCircleSectorCompass(nodeSector, cameraSector);\n\n                    return {\n                        name: this._name,\n                        vnode: vd.h(\n                            \"div.BearingIndicator\",\n                            {},\n                            [\n                                background,\n                                north,\n                                compass,\n                            ]),\n                    };\n                })\n            .subscribe(this._container.domRenderer.render$);\n    }\n\n    protected _deactivate(): void {\n        this._renderSubscription.unsubscribe();\n    }\n\n    protected _getDefaultConfiguration(): IComponentConfiguration {\n        return {};\n    }\n\n    private _createCircleSectorCompass(nodeSector: vd.VNode, cameraSector: vd.VNode): vd.VNode {\n        let group: vd.VNode =\n            vd.h(\n                \"g\",\n                {\n                    attributes: { transform: \"translate(1,1)\" },\n                    namespace: this._svgNamespace,\n                },\n                [nodeSector, cameraSector]);\n\n        let centerCircle: vd.VNode =\n             vd.h(\n                \"circle\",\n                {\n                    attributes: {\n                        cx: \"1\",\n                        cy: \"1\",\n                        fill: \"#abb1b9\",\n                        r: \"0.291667\",\n                        stroke: \"#000\",\n                        \"stroke-width\": \"0.0833333\",\n                    },\n                    namespace: this._svgNamespace,\n                },\n                []);\n\n        let svg: vd.VNode =\n            vd.h(\n                \"svg\",\n                {\n                    attributes: { viewBox: \"0 0 2 2\" },\n                    namespace: this._svgNamespace,\n                    style: {\n                        bottom: \"4px\",\n                        height: \"48px\",\n                        left: \"4px\",\n                        position: \"absolute\",\n                        width: \"48px\",\n                    },\n                },\n                [group, centerCircle]);\n\n        return svg;\n    }\n\n    private _createCircleSector(bearing: number, fov: number, fill: string): vd.VNode {\n        if (fov > 2 * Math.PI - Math.PI / 90) {\n            return vd.h(\n            \"circle\",\n            {\n                attributes: { cx: \"0\", cy: \"0\", fill: fill, r: \"1\" },\n                namespace: this._svgNamespace,\n            },\n            []);\n        }\n\n        let arcStart: number = bearing - fov / 2 - Math.PI / 2;\n        let arcEnd: number = arcStart + fov;\n\n        let startX: number = Math.cos(arcStart);\n        let startY: number = Math.sin(arcStart);\n\n        let endX: number = Math.cos(arcEnd);\n        let endY: number = Math.sin(arcEnd);\n\n        let largeArc: number = fov >= Math.PI ? 1 : 0;\n\n        let description: string = `M 0 0 ${startX} ${startY} A 1 1 0 ${largeArc} 1 ${endX} ${endY}`;\n\n        return vd.h(\n            \"path\",\n            {\n                attributes: { d: description, fill: fill },\n                namespace: this._svgNamespace,\n            },\n            []);\n    }\n}\n\nComponentService.register(BearingComponent);\nexport default BearingComponent;\n",
+    "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as vd from \"virtual-dom\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport {\n    Component,\n    ComponentService,\n    IComponentConfiguration,\n} from \"../Component\";\nimport {\n    Spatial,\n    Transform,\n} from \"../Geo\";\nimport {Node} from \"../Graph\";\nimport {\n    IVNodeHash,\n    RenderCamera,\n} from \"../Render\";\nimport {IFrame} from \"../State\";\nimport {\n    Container,\n    Navigator,\n} from \"../Viewer\";\n\nexport class BearingComponent extends Component<IComponentConfiguration> {\n    public static componentName: string = \"bearing\";\n\n    private _spatial: Spatial;\n    private _svgNamespace: string;\n    private _distinctThreshold: number;\n\n    private _renderSubscription: Subscription;\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n\n        this._spatial = new Spatial();\n        this._svgNamespace = \"http://www.w3.org/2000/svg\";\n        this._distinctThreshold = Math.PI / 90;\n    }\n\n    protected _activate(): void {\n        let nodeBearingFov$: Observable<[number, number]> = this._navigator.stateService.currentState$\n            .distinctUntilChanged(\n                undefined,\n                (frame: IFrame): string => {\n                    return frame.state.currentNode.key;\n                })\n            .map(\n                (frame: IFrame): [number, number] => {\n                    let node: Node = frame.state.currentNode;\n                    let transform: Transform = frame.state.currentTransform;\n\n                    if (node.pano) {\n                        let hFov: number = 2 * Math.PI * node.gpano.CroppedAreaImageWidthPixels / node.gpano.FullPanoWidthPixels;\n\n                        return [this._spatial.degToRad(node.ca), hFov];\n                    }\n\n                    let size: number = Math.max(transform.basicWidth, transform.basicHeight);\n\n                    if (size <= 0) {\n                        console.warn(\n                            `Original image size (${transform.basicWidth}, ${transform.basicHeight}) is invalid (${node.key}. ` +\n                            \"Not showing available fov.\");\n                    }\n\n                    let hFov: number = size > 0 ?\n                        2 * Math.atan(0.5 * transform.basicWidth / (size * transform.focal)) :\n                        0;\n\n                    return [this._spatial.degToRad(node.ca), hFov];\n                })\n            .distinctUntilChanged(\n                (a1: [number, number], a2: [number, number]): boolean => {\n                    return Math.abs(a2[0] - a1[0]) < this._distinctThreshold &&\n                        Math.abs(a2[1] - a1[1]) < this._distinctThreshold;\n                });\n\n        let cameraBearingFov$: Observable<[number, number]> = this._container.renderService.renderCamera$\n            .map(\n                (rc: RenderCamera): [number, number] => {\n                    let vFov: number = this._spatial.degToRad(rc.perspective.fov);\n                    let hFov: number = rc.perspective.aspect === Number.POSITIVE_INFINITY ?\n                        Math.PI :\n                        Math.atan(rc.perspective.aspect * Math.tan(0.5 * vFov)) * 2;\n\n                    return [this._spatial.azimuthalToBearing(rc.rotation.phi), hFov];\n                })\n            .distinctUntilChanged(\n                (a1: [number, number], a2: [number, number]): boolean => {\n                    return Math.abs(a2[0] - a1[0]) < this._distinctThreshold &&\n                        Math.abs(a2[1] - a1[1]) < this._distinctThreshold;\n                });\n\n        this._renderSubscription = Observable\n            .combineLatest(\n                nodeBearingFov$,\n                cameraBearingFov$)\n            .map(\n                (args: [[number, number], [number, number]]): IVNodeHash => {\n                    let background: vd.VNode = vd.h(\n                        \"div.BearingIndicatorBackground\",\n                        { oncontextmenu: (event: MouseEvent): void => { event.preventDefault(); } },\n                        [\n                            vd.h(\"div.BearingIndicatorBackgroundRectangle\", {}, []),\n                            vd.h(\"div.BearingIndicatorBackgroundCircle\", {}, []),\n                        ]);\n\n                    let north: vd.VNode = vd.h(\"div.BearingIndicatorNorth\", {}, []);\n\n                    let nodeSector: vd.VNode = this._createCircleSector(args[0][0], args[0][1], \"#000\");\n                    let cameraSector: vd.VNode = this._createCircleSector(args[1][0], args[1][1], \"#fff\");\n\n                    let compass: vd.VNode = this._createCircleSectorCompass(nodeSector, cameraSector);\n\n                    return {\n                        name: this._name,\n                        vnode: vd.h(\n                            \"div.BearingIndicator\",\n                            {},\n                            [\n                                background,\n                                north,\n                                compass,\n                            ]),\n                    };\n                })\n            .subscribe(this._container.domRenderer.render$);\n    }\n\n    protected _deactivate(): void {\n        this._renderSubscription.unsubscribe();\n    }\n\n    protected _getDefaultConfiguration(): IComponentConfiguration {\n        return {};\n    }\n\n    private _createCircleSectorCompass(nodeSector: vd.VNode, cameraSector: vd.VNode): vd.VNode {\n        let group: vd.VNode =\n            vd.h(\n                \"g\",\n                {\n                    attributes: { transform: \"translate(1,1)\" },\n                    namespace: this._svgNamespace,\n                },\n                [nodeSector, cameraSector]);\n\n        let centerCircle: vd.VNode =\n             vd.h(\n                \"circle\",\n                {\n                    attributes: {\n                        cx: \"1\",\n                        cy: \"1\",\n                        fill: \"#abb1b9\",\n                        r: \"0.291667\",\n                        stroke: \"#000\",\n                        \"stroke-width\": \"0.0833333\",\n                    },\n                    namespace: this._svgNamespace,\n                },\n                []);\n\n        let svg: vd.VNode =\n            vd.h(\n                \"svg\",\n                {\n                    attributes: { viewBox: \"0 0 2 2\" },\n                    namespace: this._svgNamespace,\n                    style: {\n                        bottom: \"4px\",\n                        height: \"48px\",\n                        left: \"4px\",\n                        position: \"absolute\",\n                        width: \"48px\",\n                    },\n                },\n                [group, centerCircle]);\n\n        return svg;\n    }\n\n    private _createCircleSector(bearing: number, fov: number, fill: string): vd.VNode {\n        if (fov > 2 * Math.PI - Math.PI / 90) {\n            return vd.h(\n            \"circle\",\n            {\n                attributes: { cx: \"0\", cy: \"0\", fill: fill, r: \"1\" },\n                namespace: this._svgNamespace,\n            },\n            []);\n        }\n\n        let arcStart: number = bearing - fov / 2 - Math.PI / 2;\n        let arcEnd: number = arcStart + fov;\n\n        let startX: number = Math.cos(arcStart);\n        let startY: number = Math.sin(arcStart);\n\n        let endX: number = Math.cos(arcEnd);\n        let endY: number = Math.sin(arcEnd);\n\n        let largeArc: number = fov >= Math.PI ? 1 : 0;\n\n        let description: string = `M 0 0 ${startX} ${startY} A 1 1 0 ${largeArc} 1 ${endX} ${endY}`;\n\n        return vd.h(\n            \"path\",\n            {\n                attributes: { d: description, fill: fill },\n                namespace: this._svgNamespace,\n            },\n            []);\n    }\n}\n\nComponentService.register(BearingComponent);\nexport default BearingComponent;\n",
     "import {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport \"rxjs/add/observable/combineLatest\";\nimport \"rxjs/add/observable/from\";\nimport \"rxjs/add/observable/merge\";\nimport \"rxjs/add/observable/of\";\nimport \"rxjs/add/observable/zip\";\n\nimport \"rxjs/add/operator/catch\";\nimport \"rxjs/add/operator/combineLatest\";\nimport \"rxjs/add/operator/distinct\";\nimport \"rxjs/add/operator/expand\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/merge\";\nimport \"rxjs/add/operator/mergeMap\";\nimport \"rxjs/add/operator/mergeAll\";\nimport \"rxjs/add/operator/skip\";\nimport \"rxjs/add/operator/switchMap\";\n\nimport {EdgeDirection, IEdge} from \"../Edge\";\nimport {IEdgeStatus, Node} from \"../Graph\";\nimport {ComponentService, Component, ICacheConfiguration, ICacheDepth} from \"../Component\";\nimport {Container, Navigator} from \"../Viewer\";\n\ntype NodeDepth = [Node, number];\n\ntype EdgesDepth = [IEdge[], number]\n\nexport class CacheComponent extends Component<ICacheConfiguration> {\n    public static componentName: string = \"cache\";\n\n    private _sequenceSubscription: Subscription;\n    private _spatialSubscription: Subscription;\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n    }\n\n    /**\n     * Set the cache depth.\n     *\n     * Configures the cache depth. The cache depth can be different for\n     * different edge direction types.\n     *\n     * @param {ICacheDepth} depth - Cache depth structure.\n     */\n    public setDepth(depth: ICacheDepth): void {\n        this.configure({ depth: depth });\n    }\n\n    protected _activate(): void {\n        this._sequenceSubscription = Observable\n            .combineLatest(\n                this._navigator.stateService.currentNode$\n                    .switchMap(\n                        (node: Node): Observable<IEdgeStatus> => {\n                            return node.sequenceEdges$;\n                        })\n                    .filter(\n                        (status: IEdgeStatus): boolean => {\n                            return status.cached;\n                        }),\n                this._configuration$)\n            .switchMap(\n                (nc: [IEdgeStatus, ICacheConfiguration]): Observable<EdgesDepth> => {\n                    let status: IEdgeStatus = nc[0];\n                    let configuration: ICacheConfiguration = nc[1];\n\n                    let sequenceDepth: number = Math.max(0, Math.min(4, configuration.depth.sequence));\n\n                    let next$: Observable<EdgesDepth> = this._cache$(status.edges, EdgeDirection.Next, sequenceDepth);\n                    let prev$: Observable<EdgesDepth> = this._cache$(status.edges, EdgeDirection.Prev, sequenceDepth);\n\n                    return Observable\n                        .merge<EdgesDepth>(\n                            next$,\n                            prev$)\n                        .catch(\n                            (error: Error, caught: Observable<EdgesDepth>): Observable<EdgesDepth> => {\n                                console.error(\"Failed to cache sequence edges.\", error);\n\n                                return Observable.empty<EdgesDepth>();\n                            });\n                 })\n            .subscribe(() => { /*noop*/ });\n\n        this._spatialSubscription = this._navigator.stateService.currentNode$\n                .switchMap(\n                    (node: Node): Observable<[Node, IEdgeStatus]> => {\n                        return Observable\n                            .combineLatest(\n                                Observable.of<Node>(node),\n                                node.spatialEdges$\n                                    .filter(\n                                        (status: IEdgeStatus): boolean => {\n                                            return status.cached;\n                                        }));\n                    })\n                .combineLatest(\n                    this._configuration$,\n                    (ns: [Node, IEdgeStatus], configuration: ICacheConfiguration):\n                        [Node, IEdgeStatus, ICacheConfiguration] => {\n                            return [ns[0], ns[1], configuration];\n                        })\n            .switchMap(\n                (args: [Node, IEdgeStatus, ICacheConfiguration]): Observable<EdgesDepth> => {\n                    let node: Node = args[0];\n                    let edges: IEdge[] = args[1].edges;\n                    let depth: ICacheDepth = args[2].depth;\n\n                    let panoDepth: number = Math.max(0, Math.min(2, depth.pano));\n                    let stepDepth: number = node.pano ? 0 : Math.max(0, Math.min(3, depth.step));\n                    let turnDepth: number = node.pano ? 0 : Math.max(0, Math.min(1, depth.turn));\n\n                    let pano$: Observable<EdgesDepth> = this._cache$(edges, EdgeDirection.Pano, panoDepth);\n\n                    let forward$: Observable<EdgesDepth> = this._cache$(edges, EdgeDirection.StepForward, stepDepth);\n                    let backward$: Observable<EdgesDepth> = this._cache$(edges, EdgeDirection.StepBackward, stepDepth);\n                    let left$: Observable<EdgesDepth> = this._cache$(edges, EdgeDirection.StepLeft, stepDepth);\n                    let right$: Observable<EdgesDepth> = this._cache$(edges, EdgeDirection.StepRight, stepDepth);\n\n                    let turnLeft$: Observable<EdgesDepth> = this._cache$(edges, EdgeDirection.TurnLeft, turnDepth);\n                    let turnRight$: Observable<EdgesDepth> = this._cache$(edges, EdgeDirection.TurnRight, turnDepth);\n                    let turnU$: Observable<EdgesDepth> = this._cache$(edges, EdgeDirection.TurnU, turnDepth);\n\n                    return Observable\n                        .merge<EdgesDepth>(\n                            forward$,\n                            backward$,\n                            left$,\n                            right$,\n                            pano$,\n                            turnLeft$,\n                            turnRight$,\n                            turnU$)\n                        .catch(\n                            (error: Error, caught: Observable<EdgesDepth>): Observable<EdgesDepth> => {\n                                console.error(\"Failed to cache spatial edges.\", error);\n\n                                return Observable.empty<EdgesDepth>();\n                            });\n                })\n            .subscribe(() => { /*noop*/ });\n    }\n\n    protected _deactivate(): void {\n        this._sequenceSubscription.unsubscribe();\n        this._spatialSubscription.unsubscribe();\n    }\n\n    protected _getDefaultConfiguration(): ICacheConfiguration {\n        return { depth: { pano: 1, sequence: 2, step: 1, turn: 0 } };\n    }\n\n    private _cache$(edges: IEdge[], direction: EdgeDirection, depth: number): Observable<EdgesDepth> {\n        return Observable\n            .zip(\n                Observable.of<IEdge[]>(edges),\n                Observable.of<number>(depth))\n            .expand(\n                (ed: EdgesDepth): Observable<EdgesDepth> => {\n                    let es: IEdge[] = ed[0];\n                    let d: number = ed[1];\n\n                    let edgesDepths$: Observable<EdgesDepth>[] = [];\n\n                    if (d > 0) {\n                        for (let edge of es) {\n                            if (edge.data.direction === direction) {\n                                edgesDepths$.push(\n                                    Observable\n                                        .zip(\n                                            this._navigator.graphService.cacheNode$(edge.to)\n                                                .mergeMap(\n                                                    (n: Node): Observable<IEdge[]> => {\n                                                        return this._nodeToEdges$(n, direction);\n                                                    }),\n                                            Observable.of<number>(d - 1)\n                                ));\n                            }\n                        }\n                    }\n\n                    return Observable\n                        .from<Observable<EdgesDepth>>(edgesDepths$)\n                        .mergeAll();\n                })\n            .skip(1);\n    }\n\n    private _nodeToEdges$(node: Node, direction: EdgeDirection): Observable<IEdge[]> {\n       return ([EdgeDirection.Next, EdgeDirection.Prev].indexOf(direction) > -1 ?\n            node.sequenceEdges$ :\n            node.spatialEdges$)\n                .first(\n                    (status: IEdgeStatus): boolean => {\n                        return status.cached;\n                    })\n                .map(\n                    (status: IEdgeStatus): IEdge[] => {\n                        return status.edges;\n                    });\n    }\n}\n\nComponentService.register(CacheComponent);\nexport default CacheComponent;\n",
     "import {BehaviorSubject} from \"rxjs/BehaviorSubject\";\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/startWith\";\n\nimport {IComponentConfiguration} from \"../Component\";\nimport {Container, Navigator} from \"../Viewer\";\nimport {EventEmitter} from \"../Utils\";\n\nexport abstract class Component<TConfiguration extends IComponentConfiguration> extends EventEmitter {\n    /**\n     * Component name. Used when interacting with component through the Viewer's API.\n     */\n    public static componentName: string = \"not_worthy\";\n\n    protected _activated: boolean;\n    protected _container: Container;\n    protected _name: string;\n    protected _navigator: Navigator;\n\n    protected _activated$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n    protected _configuration$: Observable<TConfiguration>;\n    protected _configurationSubject$: Subject<TConfiguration> = new Subject<TConfiguration>();\n\n    constructor (name: string, container: Container, navigator: Navigator) {\n        super();\n\n        this._activated = false;\n        this._container = container;\n        this._name = name;\n        this._navigator = navigator;\n\n        this._configuration$ =\n            this._configurationSubject$\n                .startWith(this.defaultConfiguration)\n                .scan(\n                    (conf: TConfiguration, newConf: TConfiguration): TConfiguration => {\n                        for (let key in newConf) {\n                            if (newConf.hasOwnProperty(key)) {\n                                conf[key] = <any>newConf[key];\n                            }\n                        }\n\n                        return conf;\n                    })\n                .publishReplay(1)\n                .refCount();\n\n        this._configuration$.subscribe(() => { /*noop*/ });\n    }\n\n    public get activated(): boolean {\n        return this._activated;\n    }\n\n    public get activated$(): Observable<boolean> {\n        return this._activated$;\n    }\n\n    /**\n     * Get default configuration.\n     *\n     * @returns {TConfiguration} Default configuration for component.\n     */\n    public get defaultConfiguration(): TConfiguration {\n        return this._getDefaultConfiguration();\n    }\n\n    public get configuration$(): Observable<TConfiguration> {\n        return this._configuration$;\n    }\n\n    public get name(): string {\n        return this._name;\n    }\n\n    public activate(conf?: TConfiguration): void {\n        if (this._activated) {\n            return;\n        }\n\n        if (conf !== undefined) {\n            this._configurationSubject$.next(conf);\n        }\n\n        this._activated = true;\n        this._activate();\n        this._activated$.next(true);\n    };\n\n    public configure(conf: TConfiguration): void {\n        this._configurationSubject$.next(conf);\n    }\n\n    public deactivate(): void {\n        if (!this._activated) {\n            return;\n        }\n\n        this._activated = false;\n        this._deactivate();\n        this._container.domRenderer.clear(this._name);\n        this._container.glRenderer.clear(this._name);\n        this._activated$.next(false);\n    };\n\n    /**\n     * Detect the viewer's new width and height and resize the component's\n     * rendered elements accordingly if applicable.\n     */\n    public resize(): void { return; }\n\n    protected abstract _activate(): void;\n\n    protected abstract _deactivate(): void;\n\n    protected abstract _getDefaultConfiguration(): TConfiguration;\n}\n\nexport default Component;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as _ from \"underscore\";\n\nimport {ArgumentMapillaryError} from \"../Error\";\nimport {Container, Navigator} from \"../Viewer\";\nimport {CoverComponent, Component, IComponentConfiguration} from \"../Component\";\n\ninterface IActiveComponent {\n    active: boolean;\n    component: Component<IComponentConfiguration>;\n}\n\nexport class ComponentService {\n    public static registeredCoverComponent: typeof CoverComponent;\n    public static registeredComponents: {[key: string]: typeof Component} = {};\n\n    private _container: Container;\n    private _coverActivated: boolean;\n    private _coverComponent: CoverComponent;\n    private _navigator: Navigator;\n    private _components: {[key: string]: IActiveComponent} = {};\n\n    public static register(component: typeof Component): void {\n        if (ComponentService.registeredComponents[component.componentName] === undefined) {\n            ComponentService.registeredComponents[component.componentName] = component;\n        }\n    }\n\n    public static registerCover(coverComponent: typeof CoverComponent): void {\n        ComponentService.registeredCoverComponent = coverComponent;\n    }\n\n    constructor (container: Container, navigator: Navigator) {\n        this._container = container;\n        this._navigator = navigator;\n\n        for (let component of _.values(ComponentService.registeredComponents)) {\n            this._components[component.componentName] = {\n                active: false,\n                component: new component(component.componentName, container, navigator),\n            };\n        }\n\n        this._coverComponent = new ComponentService.registeredCoverComponent(\"cover\", container, navigator);\n        this._coverComponent.activate();\n        this._coverActivated = true;\n    }\n\n    public activateCover(): void {\n        if (this._coverActivated) {\n            return;\n        }\n        this._coverActivated = true;\n\n        for (let component of _.values(this._components)) {\n            if (component.active) {\n                component.component.deactivate();\n            }\n        }\n        return;\n    }\n\n    public deactivateCover(): void {\n        if (!this._coverActivated) {\n            return;\n        }\n        this._coverActivated = false;\n\n        for (let component of _.values(this._components)) {\n            if (component.active) {\n                component.component.activate();\n            }\n        }\n        return;\n    }\n\n    public activate(name: string): void {\n        this._checkName(name);\n        this._components[name].active = true;\n        if (!this._coverActivated) {\n            this.get(name).activate();\n        }\n    }\n\n    public configure<TConfiguration extends IComponentConfiguration>(name: string, conf: TConfiguration): void {\n        this._checkName(name);\n        this.get(name).configure(conf);\n    }\n\n    public deactivate(name: string): void {\n        this._checkName(name);\n        this._components[name].active = false;\n        if (!this._coverActivated) {\n            this.get(name).deactivate();\n        }\n    }\n\n    public resize(): void {\n        for (let component of _.values(this._components)) {\n            component.component.resize();\n        }\n    }\n\n    public get<TComponent extends Component<IComponentConfiguration>>(name: string): TComponent {\n        return <TComponent>this._components[name].component;\n    }\n\n    public getCover(): CoverComponent {\n        return this._coverComponent;\n    }\n\n    private _checkName(name: string): void {\n        if (!(name in this._components)) {\n            throw new ArgumentMapillaryError(`Component does not exist: ${name}`);\n        }\n    }\n}\n\nexport default ComponentService;\n",
     "import {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport \"rxjs/add/observable/combineLatest\";\nimport \"rxjs/add/observable/from\";\nimport \"rxjs/add/observable/merge\";\nimport \"rxjs/add/observable/of\";\nimport \"rxjs/add/observable/zip\";\n\nimport \"rxjs/add/operator/catch\";\nimport \"rxjs/add/operator/combineLatest\";\nimport \"rxjs/add/operator/distinct\";\nimport \"rxjs/add/operator/expand\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/merge\";\nimport \"rxjs/add/operator/mergeMap\";\nimport \"rxjs/add/operator/mergeAll\";\nimport \"rxjs/add/operator/skip\";\nimport \"rxjs/add/operator/switchMap\";\n\nimport {EdgeDirection, IEdge} from \"../Edge\";\nimport {IEdgeStatus, Node} from \"../Graph\";\nimport {ComponentService, Component, ICacheConfiguration, ICacheDepth} from \"../Component\";\nimport {Container, Navigator} from \"../Viewer\";\n\ntype NodeDepth = [Node, number];\n\ntype EdgesDepth = [IEdge[], number]\n\nexport class CacheComponent extends Component<ICacheConfiguration> {\n    public static componentName: string = \"cache\";\n\n    private _sequenceSubscription: Subscription;\n    private _spatialSubscription: Subscription;\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n    }\n\n    /**\n     * Set the cache depth.\n     *\n     * Configures the cache depth. The cache depth can be different for\n     * different edge direction types.\n     *\n     * @param {ICacheDepth} depth - Cache depth structure.\n     */\n    public setDepth(depth: ICacheDepth): void {\n        this.configure({ depth: depth });\n    }\n\n    protected _activate(): void {\n        this._sequenceSubscription = Observable\n            .combineLatest(\n                this._navigator.stateService.currentNode$\n                    .switchMap(\n                        (node: Node): Observable<IEdgeStatus> => {\n                            return node.sequenceEdges$;\n                        })\n                    .filter(\n                        (status: IEdgeStatus): boolean => {\n                            return status.cached;\n                        }),\n                this._configuration$)\n            .switchMap(\n                (nc: [IEdgeStatus, ICacheConfiguration]): Observable<EdgesDepth> => {\n                    let status: IEdgeStatus = nc[0];\n                    let configuration: ICacheConfiguration = nc[1];\n\n                    let sequenceDepth: number = Math.max(0, Math.min(4, configuration.depth.sequence));\n\n                    let next$: Observable<EdgesDepth> = this._cache$(status.edges, EdgeDirection.Next, sequenceDepth);\n                    let prev$: Observable<EdgesDepth> = this._cache$(status.edges, EdgeDirection.Prev, sequenceDepth);\n\n                    return Observable\n                        .merge<EdgesDepth>(\n                            next$,\n                            prev$)\n                        .catch(\n                            (error: Error, caught: Observable<EdgesDepth>): Observable<EdgesDepth> => {\n                                console.error(\"Failed to cache sequence edges.\", error);\n\n                                return Observable.empty<EdgesDepth>();\n                            });\n                 })\n            .subscribe(() => { /*noop*/ });\n\n        this._spatialSubscription = this._navigator.stateService.currentNode$\n                .switchMap(\n                    (node: Node): Observable<[Node, IEdgeStatus]> => {\n                        return Observable\n                            .combineLatest(\n                                Observable.of<Node>(node),\n                                node.spatialEdges$\n                                    .filter(\n                                        (status: IEdgeStatus): boolean => {\n                                            return status.cached;\n                                        }));\n                    })\n                .combineLatest(\n                    this._configuration$,\n                    (ns: [Node, IEdgeStatus], configuration: ICacheConfiguration):\n                        [Node, IEdgeStatus, ICacheConfiguration] => {\n                            return [ns[0], ns[1], configuration];\n                        })\n            .switchMap(\n                (args: [Node, IEdgeStatus, ICacheConfiguration]): Observable<EdgesDepth> => {\n                    let node: Node = args[0];\n                    let edges: IEdge[] = args[1].edges;\n                    let depth: ICacheDepth = args[2].depth;\n\n                    let panoDepth: number = Math.max(0, Math.min(2, depth.pano));\n                    let stepDepth: number = node.pano ? 0 : Math.max(0, Math.min(3, depth.step));\n                    let turnDepth: number = node.pano ? 0 : Math.max(0, Math.min(1, depth.turn));\n\n                    let pano$: Observable<EdgesDepth> = this._cache$(edges, EdgeDirection.Pano, panoDepth);\n\n                    let forward$: Observable<EdgesDepth> = this._cache$(edges, EdgeDirection.StepForward, stepDepth);\n                    let backward$: Observable<EdgesDepth> = this._cache$(edges, EdgeDirection.StepBackward, stepDepth);\n                    let left$: Observable<EdgesDepth> = this._cache$(edges, EdgeDirection.StepLeft, stepDepth);\n                    let right$: Observable<EdgesDepth> = this._cache$(edges, EdgeDirection.StepRight, stepDepth);\n\n                    let turnLeft$: Observable<EdgesDepth> = this._cache$(edges, EdgeDirection.TurnLeft, turnDepth);\n                    let turnRight$: Observable<EdgesDepth> = this._cache$(edges, EdgeDirection.TurnRight, turnDepth);\n                    let turnU$: Observable<EdgesDepth> = this._cache$(edges, EdgeDirection.TurnU, turnDepth);\n\n                    return Observable\n                        .merge<EdgesDepth>(\n                            forward$,\n                            backward$,\n                            left$,\n                            right$,\n                            pano$,\n                            turnLeft$,\n                            turnRight$,\n                            turnU$)\n                        .catch(\n                            (error: Error, caught: Observable<EdgesDepth>): Observable<EdgesDepth> => {\n                                console.error(\"Failed to cache spatial edges.\", error);\n\n                                return Observable.empty<EdgesDepth>();\n                            });\n                })\n            .subscribe(() => { /*noop*/ });\n    }\n\n    protected _deactivate(): void {\n        this._sequenceSubscription.unsubscribe();\n        this._spatialSubscription.unsubscribe();\n    }\n\n    protected _getDefaultConfiguration(): ICacheConfiguration {\n        return { depth: { pano: 1, sequence: 2, step: 1, turn: 0 } };\n    }\n\n    private _cache$(edges: IEdge[], direction: EdgeDirection, depth: number): Observable<EdgesDepth> {\n        return Observable\n            .zip(\n                Observable.of<IEdge[]>(edges),\n                Observable.of<number>(depth))\n            .expand(\n                (ed: EdgesDepth): Observable<EdgesDepth> => {\n                    let es: IEdge[] = ed[0];\n                    let d: number = ed[1];\n\n                    let edgesDepths$: Observable<EdgesDepth>[] = [];\n\n                    if (d > 0) {\n                        for (let edge of es) {\n                            if (edge.data.direction === direction) {\n                                edgesDepths$.push(\n                                    Observable\n                                        .zip(\n                                            this._navigator.graphService.cacheNode$(edge.to)\n                                                .mergeMap(\n                                                    (n: Node): Observable<IEdge[]> => {\n                                                        return this._nodeToEdges$(n, direction);\n                                                    }),\n                                            Observable.of<number>(d - 1)\n                                ));\n                            }\n                        }\n                    }\n\n                    return Observable\n                        .from<Observable<EdgesDepth>>(edgesDepths$)\n                        .mergeAll();\n                })\n            .skip(1);\n    }\n\n    private _nodeToEdges$(node: Node, direction: EdgeDirection): Observable<IEdge[]> {\n       return ([EdgeDirection.Next, EdgeDirection.Prev].indexOf(direction) > -1 ?\n            node.sequenceEdges$ :\n            node.spatialEdges$)\n                .first(\n                    (status: IEdgeStatus): boolean => {\n                        return status.cached;\n                    })\n                .map(\n                    (status: IEdgeStatus): IEdge[] => {\n                        return status.edges;\n                    });\n    }\n}\n\nComponentService.register(CacheComponent);\nexport default CacheComponent;\n",
     "import {BehaviorSubject} from \"rxjs/BehaviorSubject\";\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/startWith\";\n\nimport {IComponentConfiguration} from \"../Component\";\nimport {Container, Navigator} from \"../Viewer\";\nimport {EventEmitter} from \"../Utils\";\n\nexport abstract class Component<TConfiguration extends IComponentConfiguration> extends EventEmitter {\n    /**\n     * Component name. Used when interacting with component through the Viewer's API.\n     */\n    public static componentName: string = \"not_worthy\";\n\n    protected _activated: boolean;\n    protected _container: Container;\n    protected _name: string;\n    protected _navigator: Navigator;\n\n    protected _activated$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n    protected _configuration$: Observable<TConfiguration>;\n    protected _configurationSubject$: Subject<TConfiguration> = new Subject<TConfiguration>();\n\n    constructor (name: string, container: Container, navigator: Navigator) {\n        super();\n\n        this._activated = false;\n        this._container = container;\n        this._name = name;\n        this._navigator = navigator;\n\n        this._configuration$ =\n            this._configurationSubject$\n                .startWith(this.defaultConfiguration)\n                .scan(\n                    (conf: TConfiguration, newConf: TConfiguration): TConfiguration => {\n                        for (let key in newConf) {\n                            if (newConf.hasOwnProperty(key)) {\n                                conf[key] = <any>newConf[key];\n                            }\n                        }\n\n                        return conf;\n                    })\n                .publishReplay(1)\n                .refCount();\n\n        this._configuration$.subscribe(() => { /*noop*/ });\n    }\n\n    public get activated(): boolean {\n        return this._activated;\n    }\n\n    public get activated$(): Observable<boolean> {\n        return this._activated$;\n    }\n\n    /**\n     * Get default configuration.\n     *\n     * @returns {TConfiguration} Default configuration for component.\n     */\n    public get defaultConfiguration(): TConfiguration {\n        return this._getDefaultConfiguration();\n    }\n\n    public get configuration$(): Observable<TConfiguration> {\n        return this._configuration$;\n    }\n\n    public get name(): string {\n        return this._name;\n    }\n\n    public activate(conf?: TConfiguration): void {\n        if (this._activated) {\n            return;\n        }\n\n        if (conf !== undefined) {\n            this._configurationSubject$.next(conf);\n        }\n\n        this._activated = true;\n        this._activate();\n        this._activated$.next(true);\n    };\n\n    public configure(conf: TConfiguration): void {\n        this._configurationSubject$.next(conf);\n    }\n\n    public deactivate(): void {\n        if (!this._activated) {\n            return;\n        }\n\n        this._activated = false;\n        this._deactivate();\n        this._container.domRenderer.clear(this._name);\n        this._container.glRenderer.clear(this._name);\n        this._activated$.next(false);\n    };\n\n    /**\n     * Detect the viewer's new width and height and resize the component's\n     * rendered elements accordingly if applicable.\n     */\n    public resize(): void { return; }\n\n    protected abstract _activate(): void;\n\n    protected abstract _deactivate(): void;\n\n    protected abstract _getDefaultConfiguration(): TConfiguration;\n}\n\nexport default Component;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as _ from \"underscore\";\n\nimport {ArgumentMapillaryError} from \"../Error\";\nimport {Container, Navigator} from \"../Viewer\";\nimport {CoverComponent, Component, IComponentConfiguration} from \"../Component\";\n\ninterface IActiveComponent {\n    active: boolean;\n    component: Component<IComponentConfiguration>;\n}\n\nexport class ComponentService {\n    public static registeredCoverComponent: typeof CoverComponent;\n    public static registeredComponents: {[key: string]: typeof Component} = {};\n\n    private _container: Container;\n    private _coverActivated: boolean;\n    private _coverComponent: CoverComponent;\n    private _navigator: Navigator;\n    private _components: {[key: string]: IActiveComponent} = {};\n\n    public static register(component: typeof Component): void {\n        if (ComponentService.registeredComponents[component.componentName] === undefined) {\n            ComponentService.registeredComponents[component.componentName] = component;\n        }\n    }\n\n    public static registerCover(coverComponent: typeof CoverComponent): void {\n        ComponentService.registeredCoverComponent = coverComponent;\n    }\n\n    constructor (container: Container, navigator: Navigator) {\n        this._container = container;\n        this._navigator = navigator;\n\n        for (let component of _.values(ComponentService.registeredComponents)) {\n            this._components[component.componentName] = {\n                active: false,\n                component: new component(component.componentName, container, navigator),\n            };\n        }\n\n        this._coverComponent = new ComponentService.registeredCoverComponent(\"cover\", container, navigator);\n        this._coverComponent.activate();\n        this._coverActivated = true;\n    }\n\n    public activateCover(): void {\n        if (this._coverActivated) {\n            return;\n        }\n        this._coverActivated = true;\n\n        for (let component of _.values(this._components)) {\n            if (component.active) {\n                component.component.deactivate();\n            }\n        }\n        return;\n    }\n\n    public deactivateCover(): void {\n        if (!this._coverActivated) {\n            return;\n        }\n        this._coverActivated = false;\n\n        for (let component of _.values(this._components)) {\n            if (component.active) {\n                component.component.activate();\n            }\n        }\n        return;\n    }\n\n    public activate(name: string): void {\n        this._checkName(name);\n        this._components[name].active = true;\n        if (!this._coverActivated) {\n            this.get(name).activate();\n        }\n    }\n\n    public configure<TConfiguration extends IComponentConfiguration>(name: string, conf: TConfiguration): void {\n        this._checkName(name);\n        this.get(name).configure(conf);\n    }\n\n    public deactivate(name: string): void {\n        this._checkName(name);\n        this._components[name].active = false;\n        if (!this._coverActivated) {\n            this.get(name).deactivate();\n        }\n    }\n\n    public resize(): void {\n        for (let component of _.values(this._components)) {\n            component.component.resize();\n        }\n    }\n\n    public get<TComponent extends Component<IComponentConfiguration>>(name: string): TComponent {\n        return <TComponent>this._components[name].component;\n    }\n\n    public getCover(): CoverComponent {\n        return this._coverComponent;\n    }\n\n    private _checkName(name: string): void {\n        if (!(name in this._components)) {\n            throw new ArgumentMapillaryError(`Component does not exist: ${name}`);\n        }\n    }\n}\n\nexport default ComponentService;\n",
     "import {IDirectionConfiguration} from \"../../Component\";\nimport {Spatial} from \"../../Geo\";\n\n/**\n * @class DirectionDOMCalculator\n * @classdesc Helper class for calculating DOM CSS properties.\n */\nexport class DirectionDOMCalculator {\n    private _spatial: Spatial;\n\n    private _elementWidth: number;\n    private _elementHeight: number;\n\n    private _minWidth: number;\n    private _maxWidth: number;\n\n    private _minThresholdWidth: number;\n    private _maxThresholdWidth: number;\n    private _minThresholdHeight: number;\n    private _maxThresholdHeight: number;\n\n    private _containerWidth: number;\n    private _containerWidthCss: string;\n    private _containerMarginCss: string;\n    private _containerLeftCss: string;\n    private _containerHeight: number;\n    private _containerHeightCss: string;\n    private _containerBottomCss: string;\n\n    private _stepCircleSize: number;\n    private _stepCircleSizeCss: string;\n    private _stepCircleMarginCss: string;\n\n    private _turnCircleSize: number;\n    private _turnCircleSizeCss: string;\n\n    private _outerRadius: number;\n    private _innerRadius: number;\n\n    private _shadowOffset: number;\n\n    constructor(configuration: IDirectionConfiguration, element: HTMLElement) {\n        this._spatial = new Spatial();\n\n        this._minThresholdWidth = 320;\n        this._maxThresholdWidth = 1480;\n        this._minThresholdHeight = 240;\n        this._maxThresholdHeight = 820;\n\n        this._configure(configuration);\n        this._resize(element);\n        this._reset();\n    }\n\n    public get minWidth(): number {\n        return this._minWidth;\n    }\n\n    public get maxWidth(): number {\n        return this._maxWidth;\n    }\n\n    public get containerWidth(): number {\n        return this._containerWidth;\n    }\n\n    public get containerWidthCss(): string {\n        return this._containerWidthCss;\n    }\n\n    public get containerMarginCss(): string {\n        return this._containerMarginCss;\n    }\n\n    public get containerLeftCss(): string {\n        return this._containerLeftCss;\n    }\n\n    public get containerHeight(): number {\n        return this._containerHeight;\n    }\n\n    public get containerHeightCss(): string {\n        return this._containerHeightCss;\n    }\n\n    public get containerBottomCss(): string {\n        return this._containerBottomCss;\n    }\n\n    public get stepCircleSize(): number {\n        return this._stepCircleSize;\n    }\n\n    public get stepCircleSizeCss(): string {\n        return this._stepCircleSizeCss;\n    }\n\n    public get stepCircleMarginCss(): string {\n        return this._stepCircleMarginCss;\n    }\n\n    public get turnCircleSize(): number {\n        return this._turnCircleSize;\n    }\n\n    public get turnCircleSizeCss(): string {\n        return this._turnCircleSizeCss;\n    }\n\n    public get outerRadius(): number {\n        return this._outerRadius;\n    }\n\n    public get innerRadius(): number {\n        return this._innerRadius;\n    }\n\n    public get shadowOffset(): number {\n        return this._shadowOffset;\n    }\n\n    /**\n     * Configures the min and max width values.\n     *\n     * @param {IDirectionConfiguration} configuration Configuration\n     * with min and max width values.\n     */\n    public configure(configuration: IDirectionConfiguration): void {\n        this._configure(configuration);\n        this._reset();\n    }\n\n    /**\n     * Resizes all properties according to the width and height\n     * of the element.\n     *\n     * @param {HTMLElement} element The container element from which to extract\n     * the width and height.\n     */\n    public resize(element: HTMLElement): void {\n        this._resize(element);\n        this._reset();\n    }\n\n    /**\n     * Calculates the coordinates on the unit circle for an angle.\n     *\n     * @param {number} angle Angle in radians.\n     * @returns {Array<number>} The x and y coordinates on the unit circle.\n     */\n    public angleToCoordinates(angle: number): Array<number> {\n        return [Math.cos(angle), Math.sin(angle)];\n    }\n\n    /**\n     * Calculates the coordinates on the unit circle for the\n     * relative angle between the first and second angle.\n     *\n     * @param {number} first Angle in radians.\n     * @param {number} second Angle in radians.\n     * @returns {Array<number>} The x and y coordinates on the unit circle\n     * for the relative angle between the first and second angle.\n     */\n    public relativeAngleToCoordiantes(first: number, second: number): Array<number> {\n        let relativeAngle: number = this._spatial.wrapAngle(first - second);\n\n        return this.angleToCoordinates(relativeAngle);\n    }\n\n    private _configure(configuration: IDirectionConfiguration): void {\n        this._minWidth = configuration.minWidth;\n        this._maxWidth = this._getMaxWidth(configuration.minWidth, configuration.maxWidth);\n    }\n\n    private _resize(element: HTMLElement): void {\n        this._elementWidth = element.offsetWidth;\n        this._elementHeight = element.offsetHeight;\n    }\n\n    private _reset(): void {\n        this._containerWidth = this._getContainerWidth(this._elementWidth, this._elementHeight);\n        this._containerHeight = this._getContainerHeight(this.containerWidth);\n        this._stepCircleSize = this._getStepCircleDiameter(this._containerHeight);\n        this._turnCircleSize = this._getTurnCircleDiameter(this.containerHeight);\n        this._outerRadius = this._getOuterRadius(this._containerHeight);\n        this._innerRadius = this._getInnerRadius(this._containerHeight);\n\n        this._shadowOffset = 3;\n\n        this._containerWidthCss = this._numberToCssPixels(this._containerWidth);\n        this._containerMarginCss = this._numberToCssPixels(-0.5 * this._containerWidth);\n        this._containerLeftCss = this._numberToCssPixels(Math.floor(0.5 * this._elementWidth));\n        this._containerHeightCss = this._numberToCssPixels(this._containerHeight);\n        this._containerBottomCss = this._numberToCssPixels(Math.floor(-0.08 * this._containerHeight));\n        this._stepCircleSizeCss = this._numberToCssPixels(this._stepCircleSize);\n        this._stepCircleMarginCss = this._numberToCssPixels(-0.5 * this._stepCircleSize);\n        this._turnCircleSizeCss = this._numberToCssPixels(this._turnCircleSize);\n    }\n\n    private _getContainerWidth(elementWidth: number, elementHeight: number): number {\n        let relativeWidth: number =\n            (elementWidth - this._minThresholdWidth) / (this._maxThresholdWidth - this._minThresholdWidth);\n        let relativeHeight: number =\n            (elementHeight - this._minThresholdHeight) / (this._maxThresholdHeight - this._minThresholdHeight);\n\n        let coeff: number = Math.max(0, Math.min(1, Math.min(relativeWidth, relativeHeight)));\n\n        coeff = 0.04 * Math.round(25 * coeff);\n\n        return this._minWidth + coeff * (this._maxWidth - this._minWidth);\n    }\n\n    private _getContainerHeight(containerWidth: number): number {\n        return 0.77 * containerWidth;\n    }\n\n    private _getStepCircleDiameter(containerHeight: number): number {\n        return 0.34 * containerHeight;\n    }\n\n    private _getTurnCircleDiameter(containerHeight: number): number {\n        return 0.3 * containerHeight;\n    }\n\n    private _getOuterRadius(containerHeight: number): number {\n        return 0.31 * containerHeight;\n    }\n\n    private _getInnerRadius(containerHeight: number): number {\n        return 0.125 * containerHeight;\n    }\n\n    private _numberToCssPixels(value: number): string {\n        return value + \"px\";\n    }\n\n    private _getMaxWidth(value: number, minWidth: number): number {\n        return value > minWidth ? value : minWidth;\n    }\n}\n\nexport default DirectionDOMCalculator;\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as vd from \"virtual-dom\";\n\nimport {DirectionDOMCalculator, IDirectionConfiguration} from \"../../Component\";\nimport {EdgeDirection, IEdge} from \"../../Edge\";\nimport {Spatial} from \"../../Geo\";\nimport {IEdgeStatus, Node, Sequence} from \"../../Graph\";\nimport {RenderCamera} from \"../../Render\";\nimport {IRotation} from \"../../State\";\nimport {Navigator} from \"../../Viewer\";\n\n/**\n * @class DirectionDOMRenderer\n * @classdesc DOM renderer for direction arrows.\n */\nexport class DirectionDOMRenderer {\n    private _spatial: Spatial;\n    private _calculator: DirectionDOMCalculator;\n\n    private _node: Node;\n\n    private _rotation: IRotation;\n    private _epsilon: number;\n\n    private _highlightKey: string;\n    private _distinguishSequence: boolean;\n\n    private _needsRender: boolean;\n\n    private _stepEdges: IEdge[];\n    private _turnEdges: IEdge[];\n    private _panoEdges: IEdge[];\n    private _sequenceEdgeKeys: string[];\n\n    private _stepDirections: EdgeDirection[];\n    private _turnDirections: EdgeDirection[];\n    private _turnNames: {[dir: number]: string};\n\n    private _isEdge: boolean = false;\n\n    constructor(configuration: IDirectionConfiguration, element: HTMLElement) {\n        this._spatial = new Spatial();\n        this._calculator = new DirectionDOMCalculator(configuration, element);\n\n        this._node = null;\n\n        this._rotation = { phi: 0, theta: 0 };\n        this._epsilon = 0.5 * Math.PI / 180;\n\n        this._highlightKey = null;\n        this._distinguishSequence = false;\n\n        this._needsRender = false;\n\n        this._stepEdges = [];\n        this._turnEdges = [];\n        this._panoEdges = [];\n        this._sequenceEdgeKeys = [];\n\n        this._stepDirections = [\n            EdgeDirection.StepForward,\n            EdgeDirection.StepBackward,\n            EdgeDirection.StepLeft,\n            EdgeDirection.StepRight,\n        ];\n\n        this._turnDirections = [\n            EdgeDirection.TurnLeft,\n            EdgeDirection.TurnRight,\n            EdgeDirection.TurnU,\n        ];\n\n        this._turnNames = {};\n        this._turnNames[EdgeDirection.TurnLeft] = \"TurnLeft\";\n        this._turnNames[EdgeDirection.TurnRight] = \"TurnRight\";\n        this._turnNames[EdgeDirection.TurnU] = \"TurnAround\";\n\n        // detects IE 8-11, then Edge 20+.\n        let isIE: boolean = !!(<any>document).documentMode;\n        this._isEdge = !isIE && !!(<any>window).StyleMedia;\n    }\n\n    /**\n     * Get needs render.\n     *\n     * @returns {boolean} Value indicating whether render should be called.\n     */\n    public get needsRender(): boolean {\n        return this._needsRender;\n    }\n\n    /**\n     * Renders virtual DOM elements.\n     *\n     * @description Calling render resets the needs render property.\n     */\n    public render(navigator: Navigator): vd.VNode {\n        this._needsRender = false;\n\n        let rotation: IRotation = this._rotation;\n\n        let steps: vd.VNode[] = [];\n        let turns: vd.VNode[] = [];\n\n        if (this._node.pano) {\n            steps = steps.concat(this._createPanoArrows(navigator, rotation));\n        } else {\n            steps = steps.concat(this._createPerspectiveToPanoArrows(navigator, rotation));\n            steps = steps.concat(this._createStepArrows(navigator, rotation));\n            turns = turns.concat(this._createTurnArrows(navigator));\n        }\n\n        return this._getContainer(steps, turns, rotation);\n    }\n\n    public setEdges(edgeStatus: IEdgeStatus, sequence: Sequence): void {\n        this._setEdges(edgeStatus, sequence);\n\n        this._setNeedsRender();\n    }\n\n    /**\n     * Set node for which to show edges.\n     *\n     * @param {Node} node\n     */\n    public setNode(node: Node): void {\n        this._node = node;\n        this._clearEdges();\n\n        this._setNeedsRender();\n    }\n\n    /**\n     * Set the render camera to use for calculating rotations.\n     *\n     * @param {RenderCamera} renderCamera\n     */\n    public setRenderCamera(renderCamera: RenderCamera): void {\n        let rotation: IRotation = renderCamera.rotation;\n\n        if (Math.abs(rotation.phi - this._rotation.phi) < this._epsilon) {\n            return;\n        }\n\n        this._rotation = rotation;\n\n        this._setNeedsRender();\n    }\n\n    /**\n     * Set configuration values.\n     *\n     * @param {IDirectionConfiguration} configuration\n     */\n    public setConfiguration(configuration: IDirectionConfiguration): void {\n        let needsRender: boolean = false;\n        if (this._highlightKey !== configuration.highlightKey ||\n            this._distinguishSequence !== configuration.distinguishSequence) {\n            this._highlightKey = configuration.highlightKey;\n            this._distinguishSequence = configuration.distinguishSequence;\n\n            needsRender = true;\n        }\n\n        if (this._calculator.minWidth !== configuration.minWidth ||\n            this._calculator.maxWidth !== configuration.maxWidth) {\n            this._calculator.configure(configuration);\n            needsRender = true;\n        }\n\n        if (needsRender) {\n            this._setNeedsRender();\n        }\n    }\n\n    /**\n     * Detect the element's width and height and resize\n     * elements accordingly.\n     *\n     * @param {HTMLElement} element Viewer container element.\n     */\n    public resize(element: HTMLElement): void {\n        this._calculator.resize(element);\n\n        this._setNeedsRender();\n    }\n\n    private _setNeedsRender(): void {\n        if (this._node != null) {\n            this._needsRender = true;\n        }\n    }\n\n    private _clearEdges(): void {\n        this._stepEdges = [];\n        this._turnEdges = [];\n        this._panoEdges = [];\n        this._sequenceEdgeKeys = [];\n    }\n\n    private _setEdges(edgeStatus: IEdgeStatus, sequence: Sequence): void {\n        this._stepEdges = [];\n        this._turnEdges = [];\n        this._panoEdges = [];\n        this._sequenceEdgeKeys = [];\n\n        for (let edge of edgeStatus.edges) {\n            let direction: EdgeDirection = edge.data.direction;\n\n            if (this._stepDirections.indexOf(direction) > -1) {\n                this._stepEdges.push(edge);\n                continue;\n            }\n\n            if (this._turnDirections.indexOf(direction) > -1) {\n                this._turnEdges.push(edge);\n                continue;\n            }\n\n            if (edge.data.direction === EdgeDirection.Pano) {\n                this._panoEdges.push(edge);\n            }\n        }\n\n        if (this._distinguishSequence && sequence != null) {\n            let edges: IEdge[] = this._panoEdges\n                .concat(this._stepEdges)\n                .concat(this._turnEdges);\n\n            for (let edge of edges) {\n                let edgeKey: string = edge.to;\n\n                for (let sequenceKey of sequence.keys) {\n                    if (sequenceKey === edgeKey) {\n                        this._sequenceEdgeKeys.push(edgeKey);\n                        break;\n                    }\n                }\n            }\n        }\n    }\n\n    private _createPanoArrows(navigator: Navigator, rotation: IRotation): Array<vd.VNode> {\n        let arrows: Array<vd.VNode> = [];\n\n        for (let panoEdge of this._panoEdges) {\n            arrows.push(\n                this._createVNodeByKey(\n                    navigator,\n                    panoEdge.to,\n                    panoEdge.data.worldMotionAzimuth,\n                    rotation,\n                    this._calculator.outerRadius,\n                    \"DirectionsArrowPano\"));\n        }\n\n        for (let stepEdge of this._stepEdges) {\n            arrows.push(\n                this._createPanoToPerspectiveArrow(\n                    navigator,\n                    stepEdge.to,\n                    stepEdge.data.worldMotionAzimuth,\n                    rotation,\n                    stepEdge.data.direction));\n        }\n\n        return arrows;\n    }\n\n    private _createPanoToPerspectiveArrow(\n        navigator: Navigator,\n        key: string,\n        azimuth: number,\n        rotation: IRotation,\n        direction: EdgeDirection): vd.VNode {\n\n        let threshold: number = Math.PI / 8;\n\n        let relativePhi: number = rotation.phi;\n\n        switch (direction) {\n            case EdgeDirection.StepBackward:\n                relativePhi = rotation.phi - Math.PI;\n                break;\n            case EdgeDirection.StepLeft:\n                relativePhi = rotation.phi + Math.PI / 2;\n                break;\n            case EdgeDirection.StepRight:\n                relativePhi = rotation.phi - Math.PI / 2;\n                break;\n            default:\n                break;\n        }\n\n        if (Math.abs(this._spatial.wrapAngle(azimuth - relativePhi)) < threshold) {\n            return this._createVNodeByKey(\n                navigator,\n                key,\n                azimuth,\n                rotation,\n                this._calculator.outerRadius,\n                \"DirectionsArrowStep\");\n        }\n\n        return this._createVNodeDisabled(key, azimuth, rotation);\n    }\n\n    private _createPerspectiveToPanoArrows(navigator: Navigator, rotation: IRotation): Array<vd.VNode> {\n        let arrows: Array<vd.VNode> = [];\n\n        for (let panoEdge of this._panoEdges) {\n            arrows.push(\n                this._createVNodeByKey(\n                    navigator,\n                    panoEdge.to,\n                    panoEdge.data.worldMotionAzimuth,\n                    rotation,\n                    this._calculator.innerRadius,\n                    \"DirectionsArrowPano\",\n                    true));\n        }\n\n        return arrows;\n    }\n\n    private _createStepArrows(navigator: Navigator, rotation: IRotation): Array<vd.VNode> {\n        let arrows: Array<vd.VNode> = [];\n\n        for (let stepEdge of this._stepEdges) {\n            arrows.push(\n                this._createVNodeByDirection(\n                    navigator,\n                    stepEdge.to,\n                    stepEdge.data.worldMotionAzimuth,\n                    rotation,\n                    stepEdge.data.direction));\n        }\n\n        return arrows;\n    }\n\n\n    private _createTurnArrows(navigator: Navigator): Array<vd.VNode> {\n        let turns: Array<vd.VNode> = [];\n\n        for (let turnEdge of this._turnEdges) {\n            let direction: EdgeDirection = turnEdge.data.direction;\n            let name: string = this._turnNames[direction];\n\n            turns.push(\n                this._createVNodeByTurn(\n                    navigator,\n                    turnEdge.to,\n                    name,\n                    direction));\n        }\n\n        return turns;\n    }\n\n    private _createVNodeByKey(\n        navigator: Navigator,\n        key: string,\n        azimuth: number,\n        rotation: IRotation,\n        offset: number,\n        className: string,\n        shiftVertically?: boolean): vd.VNode {\n\n        let onClick: (e: Event) => void =\n            (e: Event): void => {\n                navigator.moveToKey$(key)\n                    .subscribe(\n                        (node: Node): void => { return; },\n                        (error: Error): void => { console.error(error); });\n            };\n\n        return this._createVNode(\n            key,\n            azimuth,\n            rotation,\n            offset,\n            className,\n            \"DirectionsCircle\",\n            onClick,\n            shiftVertically);\n    }\n\n    private _createVNodeByDirection(\n        navigator: Navigator,\n        key: string,\n        azimuth: number,\n        rotation: IRotation,\n        direction: EdgeDirection): vd.VNode {\n\n        let onClick: (e: Event) => void =\n            (e: Event): void => {\n                navigator.moveDir$(direction)\n                    .subscribe(\n                        (node: Node): void => { return; },\n                        (error: Error): void => { console.error(error); });\n            };\n\n        return this._createVNode(\n            key,\n            azimuth,\n            rotation,\n            this._calculator.outerRadius,\n            \"DirectionsArrowStep\",\n            \"DirectionsCircle\",\n            onClick);\n    }\n\n    private _createVNodeByTurn(\n        navigator: Navigator,\n        key: string,\n        className: string,\n        direction: EdgeDirection): vd.VNode {\n\n        let onClick: (e: Event) => void =\n            (e: Event): void => {\n                navigator.moveDir$(direction)\n                    .subscribe(\n                        (node: Node): void => { return; },\n                        (error: Error): void => { console.error(error); });\n            };\n\n        let style: any = {\n            height: this._calculator.turnCircleSizeCss,\n            transform: \"rotate(0)\", // apply transform to preserve 3D\n            width: this._calculator.turnCircleSizeCss,\n        };\n\n        switch (direction) {\n            case EdgeDirection.TurnLeft:\n                style.left = \"5px\";\n                style.top = \"5px\";\n                break;\n            case EdgeDirection.TurnRight:\n                style.right = \"5px\";\n                style.top = \"5px\";\n                break;\n            case EdgeDirection.TurnU:\n                style.left = \"5px\";\n                style.bottom = \"5px\";\n                break;\n            default:\n                break;\n        }\n\n        let circleProperties: vd.createProperties = {\n            attributes: {\n                \"data-key\": key,\n            },\n            onclick: onClick,\n            style: style,\n        };\n\n        let circleClassName: string = \"TurnCircle\";\n\n        if (this._sequenceEdgeKeys.indexOf(key) > -1) {\n            circleClassName += \"Sequence\";\n        }\n\n        if (this._highlightKey === key) {\n            circleClassName += \"Highlight\";\n        }\n\n        let turn: vd.VNode = vd.h(`div.${className}`, {}, []);\n\n        return vd.h(\"div.\" + circleClassName, circleProperties, [turn]);\n    }\n\n    private _createVNodeDisabled(key: string, azimuth: number, rotation: IRotation): vd.VNode {\n        return this._createVNode(\n            key,\n            azimuth,\n            rotation,\n            this._calculator.outerRadius,\n            \"DirectionsArrowDisabled\",\n            \"DirectionsCircleDisabled\");\n    }\n\n    private _createVNode(\n        key: string,\n        azimuth: number,\n        rotation: IRotation,\n        radius: number,\n        className: string,\n        circleClassName: string,\n        onClick?: (e: Event) => void,\n        shiftVertically?: boolean): vd.VNode {\n\n        let translation: Array<number> = this._calculator.angleToCoordinates(azimuth - rotation.phi);\n\n        // rotate 90 degrees clockwise and flip over X-axis\n        let translationX: number = Math.round(-radius * translation[1] + 0.5 * this._calculator.containerWidth);\n        let translationY: number = Math.round(-radius * translation[0] + 0.5 * this._calculator.containerHeight);\n\n        let shadowTranslation: Array<number> = this._calculator.relativeAngleToCoordiantes(azimuth, rotation.phi);\n        let shadowOffset: number = this._calculator.shadowOffset;\n        let shadowTranslationX: number = -shadowOffset * shadowTranslation[1];\n        let shadowTranslationY: number = shadowOffset * shadowTranslation[0];\n\n        let filter: string = `drop-shadow(${shadowTranslationX}px ${shadowTranslationY}px 1px rgba(0,0,0,0.8))`;\n\n        let properties: vd.createProperties = {\n            style: {\n                \"-webkit-filter\": filter,\n                filter: filter,\n            },\n        };\n\n        let chevron: vd.VNode = vd.h(\"div.\" + className, properties, []);\n\n        let azimuthDeg: number = -this._spatial.radToDeg(azimuth - rotation.phi);\n        let circleTransform: string = shiftVertically ?\n            `translate(${translationX}px, ${translationY}px) rotate(${azimuthDeg}deg) translateZ(-0.01px)` :\n            `translate(${translationX}px, ${translationY}px) rotate(${azimuthDeg}deg)`;\n\n        let circleProperties: vd.createProperties = {\n            attributes: { \"data-key\": key },\n            onclick: onClick,\n            style: {\n                height: this._calculator.stepCircleSizeCss,\n                marginLeft: this._calculator.stepCircleMarginCss,\n                marginTop: this._calculator.stepCircleMarginCss,\n                transform: circleTransform,\n                width: this._calculator.stepCircleSizeCss,\n            },\n        };\n\n        if (this._sequenceEdgeKeys.indexOf(key) > -1) {\n            circleClassName += \"Sequence\";\n        }\n\n        if (this._highlightKey === key) {\n            circleClassName += \"Highlight\";\n        }\n\n        return vd.h(\"div.\" + circleClassName, circleProperties, [chevron]);\n    }\n\n    private _getContainer(\n        steps: vd.VNode[],\n        turns: vd.VNode[],\n        rotation: IRotation): vd.VNode {\n\n        // edge does not handle hover on perspective transforms.\n        let transform: string = this._isEdge ?\n            \"rotateX(60deg)\" :\n            `perspective(${this._calculator.containerWidthCss}) rotateX(60deg)`;\n\n        let properties: vd.createProperties = {\n            oncontextmenu: (event: MouseEvent): void => { event.preventDefault(); },\n            style: {\n                bottom: this._calculator.containerBottomCss,\n                height: this._calculator.containerHeightCss,\n                left: this._calculator.containerLeftCss,\n                marginLeft: this._calculator.containerMarginCss,\n                transform: transform,\n                width: this._calculator.containerWidthCss,\n            },\n        };\n\n        return vd.h(\"div.DirectionsPerspective\", properties, turns.concat(steps));\n    }\n}\n\nexport default DirectionDOMRenderer;\n",
     "import {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/operator/catch\";\nimport \"rxjs/add/operator/combineLatest\";\nimport \"rxjs/add/operator/debounceTime\";\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/pairwise\";\nimport \"rxjs/add/operator/publish\";\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/skipWhile\";\nimport \"rxjs/add/operator/startWith\";\nimport \"rxjs/add/operator/switchMap\";\nimport \"rxjs/add/operator/takeUntil\";\nimport \"rxjs/add/operator/withLatestFrom\";\n\nimport {\n    ComponentService,\n    Component,\n    IImagePlaneConfiguration,\n    ImagePlaneGLRenderer,\n} from \"../../Component\";\nimport {\n    Transform,\n} from \"../../Geo\";\nimport {\n    ICurrentState,\n    IFrame,\n} from \"../../State\";\nimport {\n    Container,\n    Navigator,\n    ImageSize,\n} from \"../../Viewer\";\nimport {\n    GLRenderStage,\n    IGLRenderHash,\n    ISize,\n    RenderCamera,\n} from \"../../Render\";\nimport {Node} from \"../../Graph\";\nimport {\n    ImageTileLoader,\n    ImageTileStore,\n    IRegionOfInterest,\n    RegionOfInterestCalculator,\n    TextureProvider,\n} from \"../../Tiles\";\nimport {\n    Settings,\n    Urls,\n} from \"../../Utils\";\n\ninterface IImagePlaneGLRendererOperation {\n    (renderer: ImagePlaneGLRenderer): ImagePlaneGLRenderer;\n}\n\ntype PositionLookat = [THREE.Vector3, THREE.Vector3, number];\n\nexport class ImagePlaneComponent extends Component<IImagePlaneConfiguration> {\n    public static componentName: string = \"imagePlane\";\n\n    private _rendererOperation$: Subject<IImagePlaneGLRendererOperation>;\n    private _renderer$: Observable<ImagePlaneGLRenderer>;\n    private _rendererCreator$: Subject<void>;\n    private _rendererDisposer$: Subject<void>;\n\n    private _abortTextureProviderSubscription: Subscription;\n    private _hasTextureSubscription: Subscription;\n    private _rendererSubscription: Subscription;\n    private _setRegionOfInterestSubscription: Subscription;\n    private _setTextureProviderSubscription: Subscription;\n    private _stateSubscription: Subscription;\n    private _textureProviderSubscription: Subscription;\n    private _updateBackgroundSubscription: Subscription;\n    private _updateTextureImageSubscription: Subscription;\n\n    private _imageTileLoader: ImageTileLoader;\n    private _roiCalculator: RegionOfInterestCalculator;\n\n    constructor (name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n\n        this._imageTileLoader = new ImageTileLoader(Urls.tileScheme, Urls.tileDomain, Urls.origin);\n        this._roiCalculator = new RegionOfInterestCalculator();\n\n        this._rendererOperation$ = new Subject<IImagePlaneGLRendererOperation>();\n        this._rendererCreator$ = new Subject<void>();\n        this._rendererDisposer$ = new Subject<void>();\n\n        this._renderer$ = this._rendererOperation$\n            .scan(\n                (renderer: ImagePlaneGLRenderer, operation: IImagePlaneGLRendererOperation): ImagePlaneGLRenderer => {\n                    return operation(renderer);\n                },\n                null)\n            .filter(\n                (renderer: ImagePlaneGLRenderer): boolean => {\n                    return renderer != null;\n                })\n            .distinctUntilChanged(\n                undefined,\n                (renderer: ImagePlaneGLRenderer): number => {\n                    return renderer.frameId;\n                });\n\n        this._rendererCreator$\n            .map(\n                (): IImagePlaneGLRendererOperation => {\n                    return (renderer: ImagePlaneGLRenderer): ImagePlaneGLRenderer => {\n                        if (renderer != null) {\n                            throw new Error(\"Multiple image plane states can not be created at the same time\");\n                        }\n\n                        return new ImagePlaneGLRenderer();\n                    };\n                })\n            .subscribe(this._rendererOperation$);\n\n        this._rendererDisposer$\n            .map(\n                (): IImagePlaneGLRendererOperation => {\n                    return (renderer: ImagePlaneGLRenderer): ImagePlaneGLRenderer => {\n                        renderer.dispose();\n\n                        return null;\n                    };\n                })\n            .subscribe(this._rendererOperation$);\n    }\n\n    protected _activate(): void {\n        this._rendererSubscription = this._renderer$\n            .map(\n                (renderer: ImagePlaneGLRenderer): IGLRenderHash => {\n                    let renderHash: IGLRenderHash = {\n                        name: this._name,\n                        render: {\n                            frameId: renderer.frameId,\n                            needsRender: renderer.needsRender,\n                            render: renderer.render.bind(renderer),\n                            stage: GLRenderStage.Background,\n                        },\n                    };\n\n                    renderer.clearNeedsRender();\n\n                    return renderHash;\n                })\n            .subscribe(this._container.glRenderer.render$);\n\n        this._rendererCreator$.next(null);\n\n        this._stateSubscription = this._navigator.stateService.currentState$\n            .map(\n                (frame: IFrame): IImagePlaneGLRendererOperation => {\n                    return (renderer: ImagePlaneGLRenderer): ImagePlaneGLRenderer => {\n                        renderer.updateFrame(frame);\n\n                        return renderer;\n                    };\n                })\n            .subscribe(this._rendererOperation$);\n\n        let textureProvider$: Observable<TextureProvider> = this._navigator.stateService.currentState$\n            .distinctUntilChanged(\n                undefined,\n                (frame: IFrame): string => {\n                    return frame.state.currentNode.key;\n                })\n            .combineLatest(this._configuration$)\n            .filter(\n                (args: [IFrame, IImagePlaneConfiguration]): boolean => {\n                    return args[1].imageTiling === true;\n                })\n            .map(\n                (args: [IFrame, IImagePlaneConfiguration]): IFrame => {\n                    return args[0];\n                })\n            .withLatestFrom(\n                this._container.glRenderer.webGLRenderer$,\n                this._container.renderService.size$)\n            .map(\n                (args: [IFrame, THREE.WebGLRenderer, ISize]): TextureProvider => {\n                    let state: ICurrentState = args[0].state;\n                    let renderer: THREE.WebGLRenderer = args[1];\n                    let viewportSize: ISize = args[2];\n\n                    let currentNode: Node = state.currentNode;\n                    let currentTransform: Transform = state.currentTransform;\n                    let tileSize: number = Math.max(viewportSize.width, viewportSize.height) > 1024 ? 1024 : 512;\n\n                    return new TextureProvider(\n                        currentNode.key,\n                        currentTransform.basicWidth,\n                        currentTransform.basicHeight,\n                        tileSize,\n                        currentNode.image,\n                        this._imageTileLoader,\n                        new ImageTileStore(),\n                        renderer);\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._textureProviderSubscription = textureProvider$.subscribe(() => { /*noop*/ });\n\n        this._setTextureProviderSubscription = textureProvider$\n            .map(\n                (provider: TextureProvider): IImagePlaneGLRendererOperation => {\n                    return (renderer: ImagePlaneGLRenderer): ImagePlaneGLRenderer => {\n                        renderer.setTextureProvider(provider.key, provider);\n\n                        return renderer;\n                    };\n                })\n            .subscribe(this._rendererOperation$);\n\n        this._abortTextureProviderSubscription = textureProvider$\n            .pairwise()\n            .subscribe(\n                (pair: [TextureProvider, TextureProvider]): void => {\n                    let previous: TextureProvider = pair[0];\n                    previous.abort();\n                });\n\n        let roiTrigger$: Observable<[RenderCamera, ISize, Transform]> = this._container.renderService.renderCameraFrame$\n            .map(\n                (renderCamera: RenderCamera): PositionLookat => {\n                    return [\n                        renderCamera.camera.position.clone(),\n                        renderCamera.camera.lookat.clone(),\n                        renderCamera.zoom.valueOf()];\n                })\n            .pairwise()\n            .skipWhile(\n                (pls: [PositionLookat, PositionLookat]): boolean => {\n                    return pls[1][2] - pls[0][2] < 0 || pls[1][2] === 0;\n                })\n            .map(\n                (pls: [PositionLookat, PositionLookat]): boolean => {\n                    let samePosition: boolean = pls[0][0].equals(pls[1][0]);\n                    let sameLookat: boolean = pls[0][1].equals(pls[1][1]);\n                    let sameZoom: boolean = pls[0][2] === pls[1][2];\n\n                    return samePosition && sameLookat && sameZoom;\n                })\n            .distinctUntilChanged()\n            .filter(\n                (stalled: boolean): boolean => {\n                    return stalled;\n                })\n            .switchMap(\n                (stalled: boolean): Observable<RenderCamera> => {\n                    return this._container.renderService.renderCameraFrame$\n                        .first();\n                })\n            .withLatestFrom(\n                this._container.renderService.size$,\n                this._navigator.stateService.currentTransform$);\n\n        this._setRegionOfInterestSubscription = textureProvider$\n            .switchMap(\n                (provider: TextureProvider): Observable<[IRegionOfInterest, TextureProvider]> => {\n                    return roiTrigger$\n                        .map(\n                            (args: [RenderCamera, ISize, Transform]): [IRegionOfInterest, TextureProvider] => {\n                                return [\n                                    this._roiCalculator.computeRegionOfInterest(args[0], args[1], args[2]),\n                                    provider,\n                                ];\n                            });\n                })\n            .filter(\n                (args: [IRegionOfInterest, TextureProvider]): boolean => {\n                    return !args[1].disposed;\n                })\n            .subscribe(\n                (args: [IRegionOfInterest, TextureProvider]): void => {\n                    let roi: IRegionOfInterest = args[0];\n                    let provider: TextureProvider = args[1];\n\n                    provider.setRegionOfInterest(roi);\n                });\n\n        let hasTexture$: Observable<boolean> = textureProvider$\n            .switchMap(\n                (provider: TextureProvider): Observable<boolean> => {\n                    return provider.hasTexture$;\n                })\n            .startWith(false)\n            .publishReplay(1)\n            .refCount();\n\n        this._hasTextureSubscription = hasTexture$.subscribe(() => { /*noop*/ });\n\n        let nodeImage$: Observable<[HTMLImageElement, Node]> = this._navigator.stateService.currentNode$\n            .debounceTime(1000)\n            .withLatestFrom(hasTexture$)\n            .filter(\n                (args: [Node, boolean]): boolean => {\n                    return !args[1];\n                })\n            .map(\n                (args: [Node, boolean]): Node => {\n                    return args[0];\n                })\n            .filter(\n                (node: Node): boolean => {\n                    return node.pano ?\n                        Settings.maxImageSize > Settings.basePanoramaSize :\n                        Settings.maxImageSize > Settings.baseImageSize;\n                })\n            .switchMap(\n                (node: Node): Observable<[HTMLImageElement, Node]> => {\n                    let baseImageSize: ImageSize = node.pano ?\n                        Settings.basePanoramaSize :\n                        Settings.baseImageSize;\n\n                    if (Math.max(node.image.width, node.image.height) > baseImageSize) {\n                        return Observable.empty<[HTMLImageElement, Node]>();\n                    }\n\n                    let image$: Observable<[HTMLImageElement, Node]> = node\n                        .cacheImage$(Settings.maxImageSize)\n                            .map(\n                                (n: Node): [HTMLImageElement, Node] => {\n                                    return [n.image, n];\n                                });\n\n                    return image$\n                        .takeUntil(\n                            hasTexture$\n                                .filter(\n                                    (hasTexture: boolean): boolean => {\n\n                                        return hasTexture;\n                                    }))\n                        .catch(\n                            (error: Error, caught: Observable<[HTMLImageElement, Node]>):\n                                Observable<[HTMLImageElement, Node]> => {\n                                console.error(`Failed to fetch high res image (${node.key})`, error);\n\n                                return Observable.empty<[HTMLImageElement, Node]>();\n                            });\n                })\n            .publish()\n            .refCount();\n\n        this._updateBackgroundSubscription = nodeImage$\n            .withLatestFrom(textureProvider$)\n            .subscribe(\n                (args: [[HTMLImageElement, Node], TextureProvider]): void => {\n                    if (args[0][1].key !== args[1].key ||\n                        args[1].disposed) {\n                        return;\n                    }\n\n                    args[1].updateBackground(args[0][0]);\n                });\n\n        this._updateTextureImageSubscription = nodeImage$\n            .map(\n                (imn: [HTMLImageElement, Node]): IImagePlaneGLRendererOperation => {\n                    return (renderer: ImagePlaneGLRenderer): ImagePlaneGLRenderer => {\n                        renderer.updateTextureImage(imn[0], imn[1]);\n\n                        return renderer;\n                    };\n                })\n            .subscribe(this._rendererOperation$);\n    }\n\n    protected _deactivate(): void {\n        this._rendererDisposer$.next(null);\n\n        this._abortTextureProviderSubscription.unsubscribe();\n        this._hasTextureSubscription.unsubscribe();\n        this._rendererSubscription.unsubscribe();\n        this._setRegionOfInterestSubscription.unsubscribe();\n        this._setTextureProviderSubscription.unsubscribe();\n        this._stateSubscription.unsubscribe();\n        this._textureProviderSubscription.unsubscribe();\n        this._updateBackgroundSubscription.unsubscribe();\n        this._updateTextureImageSubscription.unsubscribe();\n    }\n\n    protected _getDefaultConfiguration(): IImagePlaneConfiguration {\n        return { imageTiling: false };\n    }\n}\n\nComponentService.register(ImagePlaneComponent);\nexport default ImagePlaneComponent;\n",
     "import {IDirectionConfiguration} from \"../../Component\";\nimport {Spatial} from \"../../Geo\";\n\n/**\n * @class DirectionDOMCalculator\n * @classdesc Helper class for calculating DOM CSS properties.\n */\nexport class DirectionDOMCalculator {\n    private _spatial: Spatial;\n\n    private _elementWidth: number;\n    private _elementHeight: number;\n\n    private _minWidth: number;\n    private _maxWidth: number;\n\n    private _minThresholdWidth: number;\n    private _maxThresholdWidth: number;\n    private _minThresholdHeight: number;\n    private _maxThresholdHeight: number;\n\n    private _containerWidth: number;\n    private _containerWidthCss: string;\n    private _containerMarginCss: string;\n    private _containerLeftCss: string;\n    private _containerHeight: number;\n    private _containerHeightCss: string;\n    private _containerBottomCss: string;\n\n    private _stepCircleSize: number;\n    private _stepCircleSizeCss: string;\n    private _stepCircleMarginCss: string;\n\n    private _turnCircleSize: number;\n    private _turnCircleSizeCss: string;\n\n    private _outerRadius: number;\n    private _innerRadius: number;\n\n    private _shadowOffset: number;\n\n    constructor(configuration: IDirectionConfiguration, element: HTMLElement) {\n        this._spatial = new Spatial();\n\n        this._minThresholdWidth = 320;\n        this._maxThresholdWidth = 1480;\n        this._minThresholdHeight = 240;\n        this._maxThresholdHeight = 820;\n\n        this._configure(configuration);\n        this._resize(element);\n        this._reset();\n    }\n\n    public get minWidth(): number {\n        return this._minWidth;\n    }\n\n    public get maxWidth(): number {\n        return this._maxWidth;\n    }\n\n    public get containerWidth(): number {\n        return this._containerWidth;\n    }\n\n    public get containerWidthCss(): string {\n        return this._containerWidthCss;\n    }\n\n    public get containerMarginCss(): string {\n        return this._containerMarginCss;\n    }\n\n    public get containerLeftCss(): string {\n        return this._containerLeftCss;\n    }\n\n    public get containerHeight(): number {\n        return this._containerHeight;\n    }\n\n    public get containerHeightCss(): string {\n        return this._containerHeightCss;\n    }\n\n    public get containerBottomCss(): string {\n        return this._containerBottomCss;\n    }\n\n    public get stepCircleSize(): number {\n        return this._stepCircleSize;\n    }\n\n    public get stepCircleSizeCss(): string {\n        return this._stepCircleSizeCss;\n    }\n\n    public get stepCircleMarginCss(): string {\n        return this._stepCircleMarginCss;\n    }\n\n    public get turnCircleSize(): number {\n        return this._turnCircleSize;\n    }\n\n    public get turnCircleSizeCss(): string {\n        return this._turnCircleSizeCss;\n    }\n\n    public get outerRadius(): number {\n        return this._outerRadius;\n    }\n\n    public get innerRadius(): number {\n        return this._innerRadius;\n    }\n\n    public get shadowOffset(): number {\n        return this._shadowOffset;\n    }\n\n    /**\n     * Configures the min and max width values.\n     *\n     * @param {IDirectionConfiguration} configuration Configuration\n     * with min and max width values.\n     */\n    public configure(configuration: IDirectionConfiguration): void {\n        this._configure(configuration);\n        this._reset();\n    }\n\n    /**\n     * Resizes all properties according to the width and height\n     * of the element.\n     *\n     * @param {HTMLElement} element The container element from which to extract\n     * the width and height.\n     */\n    public resize(element: HTMLElement): void {\n        this._resize(element);\n        this._reset();\n    }\n\n    /**\n     * Calculates the coordinates on the unit circle for an angle.\n     *\n     * @param {number} angle Angle in radians.\n     * @returns {Array<number>} The x and y coordinates on the unit circle.\n     */\n    public angleToCoordinates(angle: number): Array<number> {\n        return [Math.cos(angle), Math.sin(angle)];\n    }\n\n    /**\n     * Calculates the coordinates on the unit circle for the\n     * relative angle between the first and second angle.\n     *\n     * @param {number} first Angle in radians.\n     * @param {number} second Angle in radians.\n     * @returns {Array<number>} The x and y coordinates on the unit circle\n     * for the relative angle between the first and second angle.\n     */\n    public relativeAngleToCoordiantes(first: number, second: number): Array<number> {\n        let relativeAngle: number = this._spatial.wrapAngle(first - second);\n\n        return this.angleToCoordinates(relativeAngle);\n    }\n\n    private _configure(configuration: IDirectionConfiguration): void {\n        this._minWidth = configuration.minWidth;\n        this._maxWidth = this._getMaxWidth(configuration.minWidth, configuration.maxWidth);\n    }\n\n    private _resize(element: HTMLElement): void {\n        this._elementWidth = element.offsetWidth;\n        this._elementHeight = element.offsetHeight;\n    }\n\n    private _reset(): void {\n        this._containerWidth = this._getContainerWidth(this._elementWidth, this._elementHeight);\n        this._containerHeight = this._getContainerHeight(this.containerWidth);\n        this._stepCircleSize = this._getStepCircleDiameter(this._containerHeight);\n        this._turnCircleSize = this._getTurnCircleDiameter(this.containerHeight);\n        this._outerRadius = this._getOuterRadius(this._containerHeight);\n        this._innerRadius = this._getInnerRadius(this._containerHeight);\n\n        this._shadowOffset = 3;\n\n        this._containerWidthCss = this._numberToCssPixels(this._containerWidth);\n        this._containerMarginCss = this._numberToCssPixels(-0.5 * this._containerWidth);\n        this._containerLeftCss = this._numberToCssPixels(Math.floor(0.5 * this._elementWidth));\n        this._containerHeightCss = this._numberToCssPixels(this._containerHeight);\n        this._containerBottomCss = this._numberToCssPixels(Math.floor(-0.08 * this._containerHeight));\n        this._stepCircleSizeCss = this._numberToCssPixels(this._stepCircleSize);\n        this._stepCircleMarginCss = this._numberToCssPixels(-0.5 * this._stepCircleSize);\n        this._turnCircleSizeCss = this._numberToCssPixels(this._turnCircleSize);\n    }\n\n    private _getContainerWidth(elementWidth: number, elementHeight: number): number {\n        let relativeWidth: number =\n            (elementWidth - this._minThresholdWidth) / (this._maxThresholdWidth - this._minThresholdWidth);\n        let relativeHeight: number =\n            (elementHeight - this._minThresholdHeight) / (this._maxThresholdHeight - this._minThresholdHeight);\n\n        let coeff: number = Math.max(0, Math.min(1, Math.min(relativeWidth, relativeHeight)));\n\n        coeff = 0.04 * Math.round(25 * coeff);\n\n        return this._minWidth + coeff * (this._maxWidth - this._minWidth);\n    }\n\n    private _getContainerHeight(containerWidth: number): number {\n        return 0.77 * containerWidth;\n    }\n\n    private _getStepCircleDiameter(containerHeight: number): number {\n        return 0.34 * containerHeight;\n    }\n\n    private _getTurnCircleDiameter(containerHeight: number): number {\n        return 0.3 * containerHeight;\n    }\n\n    private _getOuterRadius(containerHeight: number): number {\n        return 0.31 * containerHeight;\n    }\n\n    private _getInnerRadius(containerHeight: number): number {\n        return 0.125 * containerHeight;\n    }\n\n    private _numberToCssPixels(value: number): string {\n        return value + \"px\";\n    }\n\n    private _getMaxWidth(value: number, minWidth: number): number {\n        return value > minWidth ? value : minWidth;\n    }\n}\n\nexport default DirectionDOMCalculator;\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as vd from \"virtual-dom\";\n\nimport {DirectionDOMCalculator, IDirectionConfiguration} from \"../../Component\";\nimport {EdgeDirection, IEdge} from \"../../Edge\";\nimport {Spatial} from \"../../Geo\";\nimport {IEdgeStatus, Node, Sequence} from \"../../Graph\";\nimport {RenderCamera} from \"../../Render\";\nimport {IRotation} from \"../../State\";\nimport {Navigator} from \"../../Viewer\";\n\n/**\n * @class DirectionDOMRenderer\n * @classdesc DOM renderer for direction arrows.\n */\nexport class DirectionDOMRenderer {\n    private _spatial: Spatial;\n    private _calculator: DirectionDOMCalculator;\n\n    private _node: Node;\n\n    private _rotation: IRotation;\n    private _epsilon: number;\n\n    private _highlightKey: string;\n    private _distinguishSequence: boolean;\n\n    private _needsRender: boolean;\n\n    private _stepEdges: IEdge[];\n    private _turnEdges: IEdge[];\n    private _panoEdges: IEdge[];\n    private _sequenceEdgeKeys: string[];\n\n    private _stepDirections: EdgeDirection[];\n    private _turnDirections: EdgeDirection[];\n    private _turnNames: {[dir: number]: string};\n\n    private _isEdge: boolean = false;\n\n    constructor(configuration: IDirectionConfiguration, element: HTMLElement) {\n        this._spatial = new Spatial();\n        this._calculator = new DirectionDOMCalculator(configuration, element);\n\n        this._node = null;\n\n        this._rotation = { phi: 0, theta: 0 };\n        this._epsilon = 0.5 * Math.PI / 180;\n\n        this._highlightKey = null;\n        this._distinguishSequence = false;\n\n        this._needsRender = false;\n\n        this._stepEdges = [];\n        this._turnEdges = [];\n        this._panoEdges = [];\n        this._sequenceEdgeKeys = [];\n\n        this._stepDirections = [\n            EdgeDirection.StepForward,\n            EdgeDirection.StepBackward,\n            EdgeDirection.StepLeft,\n            EdgeDirection.StepRight,\n        ];\n\n        this._turnDirections = [\n            EdgeDirection.TurnLeft,\n            EdgeDirection.TurnRight,\n            EdgeDirection.TurnU,\n        ];\n\n        this._turnNames = {};\n        this._turnNames[EdgeDirection.TurnLeft] = \"TurnLeft\";\n        this._turnNames[EdgeDirection.TurnRight] = \"TurnRight\";\n        this._turnNames[EdgeDirection.TurnU] = \"TurnAround\";\n\n        // detects IE 8-11, then Edge 20+.\n        let isIE: boolean = !!(<any>document).documentMode;\n        this._isEdge = !isIE && !!(<any>window).StyleMedia;\n    }\n\n    /**\n     * Get needs render.\n     *\n     * @returns {boolean} Value indicating whether render should be called.\n     */\n    public get needsRender(): boolean {\n        return this._needsRender;\n    }\n\n    /**\n     * Renders virtual DOM elements.\n     *\n     * @description Calling render resets the needs render property.\n     */\n    public render(navigator: Navigator): vd.VNode {\n        this._needsRender = false;\n\n        let rotation: IRotation = this._rotation;\n\n        let steps: vd.VNode[] = [];\n        let turns: vd.VNode[] = [];\n\n        if (this._node.pano) {\n            steps = steps.concat(this._createPanoArrows(navigator, rotation));\n        } else {\n            steps = steps.concat(this._createPerspectiveToPanoArrows(navigator, rotation));\n            steps = steps.concat(this._createStepArrows(navigator, rotation));\n            turns = turns.concat(this._createTurnArrows(navigator));\n        }\n\n        return this._getContainer(steps, turns, rotation);\n    }\n\n    public setEdges(edgeStatus: IEdgeStatus, sequence: Sequence): void {\n        this._setEdges(edgeStatus, sequence);\n\n        this._setNeedsRender();\n    }\n\n    /**\n     * Set node for which to show edges.\n     *\n     * @param {Node} node\n     */\n    public setNode(node: Node): void {\n        this._node = node;\n        this._clearEdges();\n\n        this._setNeedsRender();\n    }\n\n    /**\n     * Set the render camera to use for calculating rotations.\n     *\n     * @param {RenderCamera} renderCamera\n     */\n    public setRenderCamera(renderCamera: RenderCamera): void {\n        let rotation: IRotation = renderCamera.rotation;\n\n        if (Math.abs(rotation.phi - this._rotation.phi) < this._epsilon) {\n            return;\n        }\n\n        this._rotation = rotation;\n\n        this._setNeedsRender();\n    }\n\n    /**\n     * Set configuration values.\n     *\n     * @param {IDirectionConfiguration} configuration\n     */\n    public setConfiguration(configuration: IDirectionConfiguration): void {\n        let needsRender: boolean = false;\n        if (this._highlightKey !== configuration.highlightKey ||\n            this._distinguishSequence !== configuration.distinguishSequence) {\n            this._highlightKey = configuration.highlightKey;\n            this._distinguishSequence = configuration.distinguishSequence;\n\n            needsRender = true;\n        }\n\n        if (this._calculator.minWidth !== configuration.minWidth ||\n            this._calculator.maxWidth !== configuration.maxWidth) {\n            this._calculator.configure(configuration);\n            needsRender = true;\n        }\n\n        if (needsRender) {\n            this._setNeedsRender();\n        }\n    }\n\n    /**\n     * Detect the element's width and height and resize\n     * elements accordingly.\n     *\n     * @param {HTMLElement} element Viewer container element.\n     */\n    public resize(element: HTMLElement): void {\n        this._calculator.resize(element);\n\n        this._setNeedsRender();\n    }\n\n    private _setNeedsRender(): void {\n        if (this._node != null) {\n            this._needsRender = true;\n        }\n    }\n\n    private _clearEdges(): void {\n        this._stepEdges = [];\n        this._turnEdges = [];\n        this._panoEdges = [];\n        this._sequenceEdgeKeys = [];\n    }\n\n    private _setEdges(edgeStatus: IEdgeStatus, sequence: Sequence): void {\n        this._stepEdges = [];\n        this._turnEdges = [];\n        this._panoEdges = [];\n        this._sequenceEdgeKeys = [];\n\n        for (let edge of edgeStatus.edges) {\n            let direction: EdgeDirection = edge.data.direction;\n\n            if (this._stepDirections.indexOf(direction) > -1) {\n                this._stepEdges.push(edge);\n                continue;\n            }\n\n            if (this._turnDirections.indexOf(direction) > -1) {\n                this._turnEdges.push(edge);\n                continue;\n            }\n\n            if (edge.data.direction === EdgeDirection.Pano) {\n                this._panoEdges.push(edge);\n            }\n        }\n\n        if (this._distinguishSequence && sequence != null) {\n            let edges: IEdge[] = this._panoEdges\n                .concat(this._stepEdges)\n                .concat(this._turnEdges);\n\n            for (let edge of edges) {\n                let edgeKey: string = edge.to;\n\n                for (let sequenceKey of sequence.keys) {\n                    if (sequenceKey === edgeKey) {\n                        this._sequenceEdgeKeys.push(edgeKey);\n                        break;\n                    }\n                }\n            }\n        }\n    }\n\n    private _createPanoArrows(navigator: Navigator, rotation: IRotation): Array<vd.VNode> {\n        let arrows: Array<vd.VNode> = [];\n\n        for (let panoEdge of this._panoEdges) {\n            arrows.push(\n                this._createVNodeByKey(\n                    navigator,\n                    panoEdge.to,\n                    panoEdge.data.worldMotionAzimuth,\n                    rotation,\n                    this._calculator.outerRadius,\n                    \"DirectionsArrowPano\"));\n        }\n\n        for (let stepEdge of this._stepEdges) {\n            arrows.push(\n                this._createPanoToPerspectiveArrow(\n                    navigator,\n                    stepEdge.to,\n                    stepEdge.data.worldMotionAzimuth,\n                    rotation,\n                    stepEdge.data.direction));\n        }\n\n        return arrows;\n    }\n\n    private _createPanoToPerspectiveArrow(\n        navigator: Navigator,\n        key: string,\n        azimuth: number,\n        rotation: IRotation,\n        direction: EdgeDirection): vd.VNode {\n\n        let threshold: number = Math.PI / 8;\n\n        let relativePhi: number = rotation.phi;\n\n        switch (direction) {\n            case EdgeDirection.StepBackward:\n                relativePhi = rotation.phi - Math.PI;\n                break;\n            case EdgeDirection.StepLeft:\n                relativePhi = rotation.phi + Math.PI / 2;\n                break;\n            case EdgeDirection.StepRight:\n                relativePhi = rotation.phi - Math.PI / 2;\n                break;\n            default:\n                break;\n        }\n\n        if (Math.abs(this._spatial.wrapAngle(azimuth - relativePhi)) < threshold) {\n            return this._createVNodeByKey(\n                navigator,\n                key,\n                azimuth,\n                rotation,\n                this._calculator.outerRadius,\n                \"DirectionsArrowStep\");\n        }\n\n        return this._createVNodeDisabled(key, azimuth, rotation);\n    }\n\n    private _createPerspectiveToPanoArrows(navigator: Navigator, rotation: IRotation): Array<vd.VNode> {\n        let arrows: Array<vd.VNode> = [];\n\n        for (let panoEdge of this._panoEdges) {\n            arrows.push(\n                this._createVNodeByKey(\n                    navigator,\n                    panoEdge.to,\n                    panoEdge.data.worldMotionAzimuth,\n                    rotation,\n                    this._calculator.innerRadius,\n                    \"DirectionsArrowPano\",\n                    true));\n        }\n\n        return arrows;\n    }\n\n    private _createStepArrows(navigator: Navigator, rotation: IRotation): Array<vd.VNode> {\n        let arrows: Array<vd.VNode> = [];\n\n        for (let stepEdge of this._stepEdges) {\n            arrows.push(\n                this._createVNodeByDirection(\n                    navigator,\n                    stepEdge.to,\n                    stepEdge.data.worldMotionAzimuth,\n                    rotation,\n                    stepEdge.data.direction));\n        }\n\n        return arrows;\n    }\n\n\n    private _createTurnArrows(navigator: Navigator): Array<vd.VNode> {\n        let turns: Array<vd.VNode> = [];\n\n        for (let turnEdge of this._turnEdges) {\n            let direction: EdgeDirection = turnEdge.data.direction;\n            let name: string = this._turnNames[direction];\n\n            turns.push(\n                this._createVNodeByTurn(\n                    navigator,\n                    turnEdge.to,\n                    name,\n                    direction));\n        }\n\n        return turns;\n    }\n\n    private _createVNodeByKey(\n        navigator: Navigator,\n        key: string,\n        azimuth: number,\n        rotation: IRotation,\n        offset: number,\n        className: string,\n        shiftVertically?: boolean): vd.VNode {\n\n        let onClick: (e: Event) => void =\n            (e: Event): void => {\n                navigator.moveToKey$(key)\n                    .subscribe(\n                        (node: Node): void => { return; },\n                        (error: Error): void => { console.error(error); });\n            };\n\n        return this._createVNode(\n            key,\n            azimuth,\n            rotation,\n            offset,\n            className,\n            \"DirectionsCircle\",\n            onClick,\n            shiftVertically);\n    }\n\n    private _createVNodeByDirection(\n        navigator: Navigator,\n        key: string,\n        azimuth: number,\n        rotation: IRotation,\n        direction: EdgeDirection): vd.VNode {\n\n        let onClick: (e: Event) => void =\n            (e: Event): void => {\n                navigator.moveDir$(direction)\n                    .subscribe(\n                        (node: Node): void => { return; },\n                        (error: Error): void => { console.error(error); });\n            };\n\n        return this._createVNode(\n            key,\n            azimuth,\n            rotation,\n            this._calculator.outerRadius,\n            \"DirectionsArrowStep\",\n            \"DirectionsCircle\",\n            onClick);\n    }\n\n    private _createVNodeByTurn(\n        navigator: Navigator,\n        key: string,\n        className: string,\n        direction: EdgeDirection): vd.VNode {\n\n        let onClick: (e: Event) => void =\n            (e: Event): void => {\n                navigator.moveDir$(direction)\n                    .subscribe(\n                        (node: Node): void => { return; },\n                        (error: Error): void => { console.error(error); });\n            };\n\n        let style: any = {\n            height: this._calculator.turnCircleSizeCss,\n            transform: \"rotate(0)\", // apply transform to preserve 3D\n            width: this._calculator.turnCircleSizeCss,\n        };\n\n        switch (direction) {\n            case EdgeDirection.TurnLeft:\n                style.left = \"5px\";\n                style.top = \"5px\";\n                break;\n            case EdgeDirection.TurnRight:\n                style.right = \"5px\";\n                style.top = \"5px\";\n                break;\n            case EdgeDirection.TurnU:\n                style.left = \"5px\";\n                style.bottom = \"5px\";\n                break;\n            default:\n                break;\n        }\n\n        let circleProperties: vd.createProperties = {\n            attributes: {\n                \"data-key\": key,\n            },\n            onclick: onClick,\n            style: style,\n        };\n\n        let circleClassName: string = \"TurnCircle\";\n\n        if (this._sequenceEdgeKeys.indexOf(key) > -1) {\n            circleClassName += \"Sequence\";\n        }\n\n        if (this._highlightKey === key) {\n            circleClassName += \"Highlight\";\n        }\n\n        let turn: vd.VNode = vd.h(`div.${className}`, {}, []);\n\n        return vd.h(\"div.\" + circleClassName, circleProperties, [turn]);\n    }\n\n    private _createVNodeDisabled(key: string, azimuth: number, rotation: IRotation): vd.VNode {\n        return this._createVNode(\n            key,\n            azimuth,\n            rotation,\n            this._calculator.outerRadius,\n            \"DirectionsArrowDisabled\",\n            \"DirectionsCircleDisabled\");\n    }\n\n    private _createVNode(\n        key: string,\n        azimuth: number,\n        rotation: IRotation,\n        radius: number,\n        className: string,\n        circleClassName: string,\n        onClick?: (e: Event) => void,\n        shiftVertically?: boolean): vd.VNode {\n\n        let translation: Array<number> = this._calculator.angleToCoordinates(azimuth - rotation.phi);\n\n        // rotate 90 degrees clockwise and flip over X-axis\n        let translationX: number = Math.round(-radius * translation[1] + 0.5 * this._calculator.containerWidth);\n        let translationY: number = Math.round(-radius * translation[0] + 0.5 * this._calculator.containerHeight);\n\n        let shadowTranslation: Array<number> = this._calculator.relativeAngleToCoordiantes(azimuth, rotation.phi);\n        let shadowOffset: number = this._calculator.shadowOffset;\n        let shadowTranslationX: number = -shadowOffset * shadowTranslation[1];\n        let shadowTranslationY: number = shadowOffset * shadowTranslation[0];\n\n        let filter: string = `drop-shadow(${shadowTranslationX}px ${shadowTranslationY}px 1px rgba(0,0,0,0.8))`;\n\n        let properties: vd.createProperties = {\n            style: {\n                \"-webkit-filter\": filter,\n                filter: filter,\n            },\n        };\n\n        let chevron: vd.VNode = vd.h(\"div.\" + className, properties, []);\n\n        let azimuthDeg: number = -this._spatial.radToDeg(azimuth - rotation.phi);\n        let circleTransform: string = shiftVertically ?\n            `translate(${translationX}px, ${translationY}px) rotate(${azimuthDeg}deg) translateZ(-0.01px)` :\n            `translate(${translationX}px, ${translationY}px) rotate(${azimuthDeg}deg)`;\n\n        let circleProperties: vd.createProperties = {\n            attributes: { \"data-key\": key },\n            onclick: onClick,\n            style: {\n                height: this._calculator.stepCircleSizeCss,\n                marginLeft: this._calculator.stepCircleMarginCss,\n                marginTop: this._calculator.stepCircleMarginCss,\n                transform: circleTransform,\n                width: this._calculator.stepCircleSizeCss,\n            },\n        };\n\n        if (this._sequenceEdgeKeys.indexOf(key) > -1) {\n            circleClassName += \"Sequence\";\n        }\n\n        if (this._highlightKey === key) {\n            circleClassName += \"Highlight\";\n        }\n\n        return vd.h(\"div.\" + circleClassName, circleProperties, [chevron]);\n    }\n\n    private _getContainer(\n        steps: vd.VNode[],\n        turns: vd.VNode[],\n        rotation: IRotation): vd.VNode {\n\n        // edge does not handle hover on perspective transforms.\n        let transform: string = this._isEdge ?\n            \"rotateX(60deg)\" :\n            `perspective(${this._calculator.containerWidthCss}) rotateX(60deg)`;\n\n        let properties: vd.createProperties = {\n            oncontextmenu: (event: MouseEvent): void => { event.preventDefault(); },\n            style: {\n                bottom: this._calculator.containerBottomCss,\n                height: this._calculator.containerHeightCss,\n                left: this._calculator.containerLeftCss,\n                marginLeft: this._calculator.containerMarginCss,\n                transform: transform,\n                width: this._calculator.containerWidthCss,\n            },\n        };\n\n        return vd.h(\"div.DirectionsPerspective\", properties, turns.concat(steps));\n    }\n}\n\nexport default DirectionDOMRenderer;\n",
     "import {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/operator/catch\";\nimport \"rxjs/add/operator/combineLatest\";\nimport \"rxjs/add/operator/debounceTime\";\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/pairwise\";\nimport \"rxjs/add/operator/publish\";\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/skipWhile\";\nimport \"rxjs/add/operator/startWith\";\nimport \"rxjs/add/operator/switchMap\";\nimport \"rxjs/add/operator/takeUntil\";\nimport \"rxjs/add/operator/withLatestFrom\";\n\nimport {\n    ComponentService,\n    Component,\n    IImagePlaneConfiguration,\n    ImagePlaneGLRenderer,\n} from \"../../Component\";\nimport {\n    Transform,\n} from \"../../Geo\";\nimport {\n    ICurrentState,\n    IFrame,\n} from \"../../State\";\nimport {\n    Container,\n    Navigator,\n    ImageSize,\n} from \"../../Viewer\";\nimport {\n    GLRenderStage,\n    IGLRenderHash,\n    ISize,\n    RenderCamera,\n} from \"../../Render\";\nimport {Node} from \"../../Graph\";\nimport {\n    ImageTileLoader,\n    ImageTileStore,\n    IRegionOfInterest,\n    RegionOfInterestCalculator,\n    TextureProvider,\n} from \"../../Tiles\";\nimport {\n    Settings,\n    Urls,\n} from \"../../Utils\";\n\ninterface IImagePlaneGLRendererOperation {\n    (renderer: ImagePlaneGLRenderer): ImagePlaneGLRenderer;\n}\n\ntype PositionLookat = [THREE.Vector3, THREE.Vector3, number];\n\nexport class ImagePlaneComponent extends Component<IImagePlaneConfiguration> {\n    public static componentName: string = \"imagePlane\";\n\n    private _rendererOperation$: Subject<IImagePlaneGLRendererOperation>;\n    private _renderer$: Observable<ImagePlaneGLRenderer>;\n    private _rendererCreator$: Subject<void>;\n    private _rendererDisposer$: Subject<void>;\n\n    private _abortTextureProviderSubscription: Subscription;\n    private _hasTextureSubscription: Subscription;\n    private _rendererSubscription: Subscription;\n    private _setRegionOfInterestSubscription: Subscription;\n    private _setTextureProviderSubscription: Subscription;\n    private _stateSubscription: Subscription;\n    private _textureProviderSubscription: Subscription;\n    private _updateBackgroundSubscription: Subscription;\n    private _updateTextureImageSubscription: Subscription;\n\n    private _imageTileLoader: ImageTileLoader;\n    private _roiCalculator: RegionOfInterestCalculator;\n\n    constructor (name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n\n        this._imageTileLoader = new ImageTileLoader(Urls.tileScheme, Urls.tileDomain, Urls.origin);\n        this._roiCalculator = new RegionOfInterestCalculator();\n\n        this._rendererOperation$ = new Subject<IImagePlaneGLRendererOperation>();\n        this._rendererCreator$ = new Subject<void>();\n        this._rendererDisposer$ = new Subject<void>();\n\n        this._renderer$ = this._rendererOperation$\n            .scan(\n                (renderer: ImagePlaneGLRenderer, operation: IImagePlaneGLRendererOperation): ImagePlaneGLRenderer => {\n                    return operation(renderer);\n                },\n                null)\n            .filter(\n                (renderer: ImagePlaneGLRenderer): boolean => {\n                    return renderer != null;\n                })\n            .distinctUntilChanged(\n                undefined,\n                (renderer: ImagePlaneGLRenderer): number => {\n                    return renderer.frameId;\n                });\n\n        this._rendererCreator$\n            .map(\n                (): IImagePlaneGLRendererOperation => {\n                    return (renderer: ImagePlaneGLRenderer): ImagePlaneGLRenderer => {\n                        if (renderer != null) {\n                            throw new Error(\"Multiple image plane states can not be created at the same time\");\n                        }\n\n                        return new ImagePlaneGLRenderer();\n                    };\n                })\n            .subscribe(this._rendererOperation$);\n\n        this._rendererDisposer$\n            .map(\n                (): IImagePlaneGLRendererOperation => {\n                    return (renderer: ImagePlaneGLRenderer): ImagePlaneGLRenderer => {\n                        renderer.dispose();\n\n                        return null;\n                    };\n                })\n            .subscribe(this._rendererOperation$);\n    }\n\n    protected _activate(): void {\n        this._rendererSubscription = this._renderer$\n            .map(\n                (renderer: ImagePlaneGLRenderer): IGLRenderHash => {\n                    let renderHash: IGLRenderHash = {\n                        name: this._name,\n                        render: {\n                            frameId: renderer.frameId,\n                            needsRender: renderer.needsRender,\n                            render: renderer.render.bind(renderer),\n                            stage: GLRenderStage.Background,\n                        },\n                    };\n\n                    renderer.clearNeedsRender();\n\n                    return renderHash;\n                })\n            .subscribe(this._container.glRenderer.render$);\n\n        this._rendererCreator$.next(null);\n\n        this._stateSubscription = this._navigator.stateService.currentState$\n            .map(\n                (frame: IFrame): IImagePlaneGLRendererOperation => {\n                    return (renderer: ImagePlaneGLRenderer): ImagePlaneGLRenderer => {\n                        renderer.updateFrame(frame);\n\n                        return renderer;\n                    };\n                })\n            .subscribe(this._rendererOperation$);\n\n        let textureProvider$: Observable<TextureProvider> = this._navigator.stateService.currentState$\n            .distinctUntilChanged(\n                undefined,\n                (frame: IFrame): string => {\n                    return frame.state.currentNode.key;\n                })\n            .combineLatest(this._configuration$)\n            .filter(\n                (args: [IFrame, IImagePlaneConfiguration]): boolean => {\n                    return args[1].imageTiling === true;\n                })\n            .map(\n                (args: [IFrame, IImagePlaneConfiguration]): IFrame => {\n                    return args[0];\n                })\n            .withLatestFrom(\n                this._container.glRenderer.webGLRenderer$,\n                this._container.renderService.size$)\n            .map(\n                (args: [IFrame, THREE.WebGLRenderer, ISize]): TextureProvider => {\n                    let state: ICurrentState = args[0].state;\n                    let renderer: THREE.WebGLRenderer = args[1];\n                    let viewportSize: ISize = args[2];\n\n                    let currentNode: Node = state.currentNode;\n                    let currentTransform: Transform = state.currentTransform;\n                    let tileSize: number = Math.max(viewportSize.width, viewportSize.height) > 1024 ? 1024 : 512;\n\n                    return new TextureProvider(\n                        currentNode.key,\n                        currentTransform.basicWidth,\n                        currentTransform.basicHeight,\n                        tileSize,\n                        currentNode.image,\n                        this._imageTileLoader,\n                        new ImageTileStore(),\n                        renderer);\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._textureProviderSubscription = textureProvider$.subscribe(() => { /*noop*/ });\n\n        this._setTextureProviderSubscription = textureProvider$\n            .map(\n                (provider: TextureProvider): IImagePlaneGLRendererOperation => {\n                    return (renderer: ImagePlaneGLRenderer): ImagePlaneGLRenderer => {\n                        renderer.setTextureProvider(provider.key, provider);\n\n                        return renderer;\n                    };\n                })\n            .subscribe(this._rendererOperation$);\n\n        this._abortTextureProviderSubscription = textureProvider$\n            .pairwise()\n            .subscribe(\n                (pair: [TextureProvider, TextureProvider]): void => {\n                    let previous: TextureProvider = pair[0];\n                    previous.abort();\n                });\n\n        let roiTrigger$: Observable<[RenderCamera, ISize, Transform]> = this._container.renderService.renderCameraFrame$\n            .map(\n                (renderCamera: RenderCamera): PositionLookat => {\n                    return [\n                        renderCamera.camera.position.clone(),\n                        renderCamera.camera.lookat.clone(),\n                        renderCamera.zoom.valueOf()];\n                })\n            .pairwise()\n            .skipWhile(\n                (pls: [PositionLookat, PositionLookat]): boolean => {\n                    return pls[1][2] - pls[0][2] < 0 || pls[1][2] === 0;\n                })\n            .map(\n                (pls: [PositionLookat, PositionLookat]): boolean => {\n                    let samePosition: boolean = pls[0][0].equals(pls[1][0]);\n                    let sameLookat: boolean = pls[0][1].equals(pls[1][1]);\n                    let sameZoom: boolean = pls[0][2] === pls[1][2];\n\n                    return samePosition && sameLookat && sameZoom;\n                })\n            .distinctUntilChanged()\n            .filter(\n                (stalled: boolean): boolean => {\n                    return stalled;\n                })\n            .switchMap(\n                (stalled: boolean): Observable<RenderCamera> => {\n                    return this._container.renderService.renderCameraFrame$\n                        .first();\n                })\n            .withLatestFrom(\n                this._container.renderService.size$,\n                this._navigator.stateService.currentTransform$);\n\n        this._setRegionOfInterestSubscription = textureProvider$\n            .switchMap(\n                (provider: TextureProvider): Observable<[IRegionOfInterest, TextureProvider]> => {\n                    return roiTrigger$\n                        .map(\n                            (args: [RenderCamera, ISize, Transform]): [IRegionOfInterest, TextureProvider] => {\n                                return [\n                                    this._roiCalculator.computeRegionOfInterest(args[0], args[1], args[2]),\n                                    provider,\n                                ];\n                            });\n                })\n            .filter(\n                (args: [IRegionOfInterest, TextureProvider]): boolean => {\n                    return !args[1].disposed;\n                })\n            .subscribe(\n                (args: [IRegionOfInterest, TextureProvider]): void => {\n                    let roi: IRegionOfInterest = args[0];\n                    let provider: TextureProvider = args[1];\n\n                    provider.setRegionOfInterest(roi);\n                });\n\n        let hasTexture$: Observable<boolean> = textureProvider$\n            .switchMap(\n                (provider: TextureProvider): Observable<boolean> => {\n                    return provider.hasTexture$;\n                })\n            .startWith(false)\n            .publishReplay(1)\n            .refCount();\n\n        this._hasTextureSubscription = hasTexture$.subscribe(() => { /*noop*/ });\n\n        let nodeImage$: Observable<[HTMLImageElement, Node]> = this._navigator.stateService.currentNode$\n            .debounceTime(1000)\n            .withLatestFrom(hasTexture$)\n            .filter(\n                (args: [Node, boolean]): boolean => {\n                    return !args[1];\n                })\n            .map(\n                (args: [Node, boolean]): Node => {\n                    return args[0];\n                })\n            .filter(\n                (node: Node): boolean => {\n                    return node.pano ?\n                        Settings.maxImageSize > Settings.basePanoramaSize :\n                        Settings.maxImageSize > Settings.baseImageSize;\n                })\n            .switchMap(\n                (node: Node): Observable<[HTMLImageElement, Node]> => {\n                    let baseImageSize: ImageSize = node.pano ?\n                        Settings.basePanoramaSize :\n                        Settings.baseImageSize;\n\n                    if (Math.max(node.image.width, node.image.height) > baseImageSize) {\n                        return Observable.empty<[HTMLImageElement, Node]>();\n                    }\n\n                    let image$: Observable<[HTMLImageElement, Node]> = node\n                        .cacheImage$(Settings.maxImageSize)\n                            .map(\n                                (n: Node): [HTMLImageElement, Node] => {\n                                    return [n.image, n];\n                                });\n\n                    return image$\n                        .takeUntil(\n                            hasTexture$\n                                .filter(\n                                    (hasTexture: boolean): boolean => {\n\n                                        return hasTexture;\n                                    }))\n                        .catch(\n                            (error: Error, caught: Observable<[HTMLImageElement, Node]>):\n                                Observable<[HTMLImageElement, Node]> => {\n                                console.error(`Failed to fetch high res image (${node.key})`, error);\n\n                                return Observable.empty<[HTMLImageElement, Node]>();\n                            });\n                })\n            .publish()\n            .refCount();\n\n        this._updateBackgroundSubscription = nodeImage$\n            .withLatestFrom(textureProvider$)\n            .subscribe(\n                (args: [[HTMLImageElement, Node], TextureProvider]): void => {\n                    if (args[0][1].key !== args[1].key ||\n                        args[1].disposed) {\n                        return;\n                    }\n\n                    args[1].updateBackground(args[0][0]);\n                });\n\n        this._updateTextureImageSubscription = nodeImage$\n            .map(\n                (imn: [HTMLImageElement, Node]): IImagePlaneGLRendererOperation => {\n                    return (renderer: ImagePlaneGLRenderer): ImagePlaneGLRenderer => {\n                        renderer.updateTextureImage(imn[0], imn[1]);\n\n                        return renderer;\n                    };\n                })\n            .subscribe(this._rendererOperation$);\n    }\n\n    protected _deactivate(): void {\n        this._rendererDisposer$.next(null);\n\n        this._abortTextureProviderSubscription.unsubscribe();\n        this._hasTextureSubscription.unsubscribe();\n        this._rendererSubscription.unsubscribe();\n        this._setRegionOfInterestSubscription.unsubscribe();\n        this._setTextureProviderSubscription.unsubscribe();\n        this._stateSubscription.unsubscribe();\n        this._textureProviderSubscription.unsubscribe();\n        this._updateBackgroundSubscription.unsubscribe();\n        this._updateTextureImageSubscription.unsubscribe();\n    }\n\n    protected _getDefaultConfiguration(): IImagePlaneConfiguration {\n        return { imageTiling: false };\n    }\n}\n\nComponentService.register(ImagePlaneComponent);\nexport default ImagePlaneComponent;\n",
-    "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {IGPano} from \"../../API\";\nimport {Transform} from \"../../Geo\";\nimport {Node} from \"../../Graph\";\nimport {ImagePlaneShaders} from \"../../Component\";\n\nexport class ImagePlaneFactory {\n    private _imagePlaneDepth: number;\n    private _imageSphereRadius: number;\n\n    constructor(imagePlaneDepth?: number, imageSphereRadius?: number) {\n        this._imagePlaneDepth = imagePlaneDepth != null ? imagePlaneDepth : 200;\n        this._imageSphereRadius = imageSphereRadius != null ? imageSphereRadius : 200;\n    }\n\n    public createMesh(node: Node, transform: Transform): THREE.Mesh {\n        let mesh: THREE.Mesh = node.pano ?\n            this._createImageSphere(node, transform) :\n            this._createImagePlane(node, transform);\n\n        return mesh;\n    }\n\n    private _createImageSphere(node: Node, transform: Transform): THREE.Mesh {\n        let texture: THREE.Texture = this._createTexture(node.image);\n        let materialParameters: THREE.ShaderMaterialParameters = this._createSphereMaterialParameters(transform, texture);\n        let material: THREE.ShaderMaterial = new THREE.ShaderMaterial(materialParameters);\n\n        let mesh: THREE.Mesh = this._useMesh(transform, node) ?\n            new THREE.Mesh(this._getImageSphereGeo(transform, node), material) :\n            new THREE.Mesh(this._getFlatImageSphereGeo(transform), material);\n\n        return mesh;\n    }\n\n    private _createImagePlane(node: Node, transform: Transform): THREE.Mesh {\n        let texture: THREE.Texture = this._createTexture(node.image);\n        let materialParameters: THREE.ShaderMaterialParameters = this._createPlaneMaterialParameters(transform, texture);\n        let material: THREE.ShaderMaterial = new THREE.ShaderMaterial(materialParameters);\n\n        let geometry: THREE.BufferGeometry = this._useMesh(transform, node) ?\n            this._getImagePlaneGeo(transform, node) :\n            this._getFlatImagePlaneGeo(transform);\n\n        return new THREE.Mesh(geometry, material);\n    }\n\n    private _createSphereMaterialParameters(transform: Transform, texture: THREE.Texture): THREE.ShaderMaterialParameters {\n        let gpano: IGPano = transform.gpano;\n\n        let halfCroppedWidth: number = (gpano.FullPanoWidthPixels - gpano.CroppedAreaImageWidthPixels) / 2;\n        let phiShift: number = 2 * Math.PI * (gpano.CroppedAreaLeftPixels - halfCroppedWidth) / gpano.FullPanoWidthPixels;\n        let phiLength: number = 2 * Math.PI * gpano.CroppedAreaImageWidthPixels / gpano.FullPanoWidthPixels;\n\n        let halfCroppedHeight: number = (gpano.FullPanoHeightPixels - gpano.CroppedAreaImageHeightPixels) / 2;\n        let thetaShift: number = Math.PI * (halfCroppedHeight - gpano.CroppedAreaTopPixels) / gpano.FullPanoHeightPixels;\n        let thetaLength: number = Math.PI * gpano.CroppedAreaImageHeightPixels / gpano.FullPanoHeightPixels;\n\n        let materialParameters: THREE.ShaderMaterialParameters = {\n            depthWrite: false,\n            fragmentShader: ImagePlaneShaders.equirectangular.fragment,\n            side: THREE.DoubleSide,\n            transparent: true,\n            uniforms: {\n                opacity: {\n                    type: \"f\",\n                    value: 1,\n                },\n                phiLength: {\n                    type: \"f\",\n                    value: phiLength,\n                },\n                phiShift: {\n                    type: \"f\",\n                    value: phiShift,\n                },\n                projectorMat: {\n                    type: \"m4\",\n                    value: transform.rt,\n                },\n                projectorTex: {\n                    type: \"t\",\n                    value: texture,\n                },\n                thetaLength: {\n                    type: \"f\",\n                    value: thetaLength,\n                },\n                thetaShift: {\n                    type: \"f\",\n                    value: thetaShift,\n                },\n            },\n            vertexShader: ImagePlaneShaders.equirectangular.vertex,\n        };\n\n        return materialParameters;\n    }\n\n    private _createPlaneMaterialParameters(transform: Transform, texture: THREE.Texture): THREE.ShaderMaterialParameters {\n        let materialParameters: THREE.ShaderMaterialParameters = {\n            depthWrite: false,\n            fragmentShader: ImagePlaneShaders.perspective.fragment,\n            side: THREE.DoubleSide,\n            transparent: true,\n            uniforms: {\n                bbox: {\n                    type: \"v4\",\n                    value: new THREE.Vector4(0, 0, 1, 1),\n                },\n                opacity: {\n                    type: \"f\",\n                    value: 1,\n                },\n                projectorMat: {\n                    type: \"m4\",\n                    value: transform.projectorMatrix(),\n                },\n                projectorTex: {\n                    type: \"t\",\n                    value: texture,\n                },\n            },\n            vertexShader: ImagePlaneShaders.perspective.vertex,\n        };\n\n        return materialParameters;\n    }\n\n    private _createTexture(image: HTMLImageElement): THREE.Texture {\n        let texture: THREE.Texture = new THREE.Texture(image);\n        texture.minFilter = THREE.LinearFilter;\n        texture.needsUpdate = true;\n\n        return texture;\n    }\n\n    private _useMesh(transform: Transform, node: Node): boolean {\n        return node.mesh.vertices.length &&\n            transform.scale > 1e-2 &&\n            transform.scale < 50;\n    }\n\n    private _getImageSphereGeo(transform: Transform, node: Node): THREE.BufferGeometry {\n        let t: THREE.Matrix4 = new THREE.Matrix4().getInverse(transform.srt);\n\n        // push everything at least 5 meters in front of the camera\n        let minZ: number = 5.0 * transform.scale;\n        let maxZ: number = this._imageSphereRadius * transform.scale;\n\n        let vertices: number[] = node.mesh.vertices;\n        let numVertices: number = vertices.length / 3;\n        let positions: Float32Array = new Float32Array(vertices.length);\n        for (let i: number = 0; i < numVertices; ++i) {\n            let index: number = 3 * i;\n            let x: number = vertices[index + 0];\n            let y: number = vertices[index + 1];\n            let z: number = vertices[index + 2];\n\n            let l: number = Math.sqrt(x * x + y * y + z * z);\n            let boundedL: number = Math.max(minZ, Math.min(l, maxZ));\n            let factor: number = boundedL / l;\n            let p: THREE.Vector3 = new THREE.Vector3(x * factor, y * factor, z * factor);\n\n            p.applyMatrix4(t);\n\n            positions[index + 0] = p.x;\n            positions[index + 1] = p.y;\n            positions[index + 2] = p.z;\n        }\n\n        let faces: number[] = node.mesh.faces;\n        let indices: Uint16Array = new Uint16Array(faces.length);\n        for (let i: number = 0; i < faces.length; ++i) {\n            indices[i] = faces[i];\n        }\n\n        let geometry: THREE.BufferGeometry = new THREE.BufferGeometry();\n\n        geometry.addAttribute(\"position\", new THREE.BufferAttribute(positions, 3));\n        geometry.setIndex(new THREE.BufferAttribute(indices, 1));\n\n        return geometry;\n    }\n\n    private _getImagePlaneGeo(transform: Transform, node: Node): THREE.BufferGeometry {\n        let t: THREE.Matrix4 = new THREE.Matrix4().getInverse(transform.srt);\n\n        // push everything at least 5 meters in front of the camera\n        let minZ: number = 5.0 * transform.scale;\n        let maxZ: number = this._imagePlaneDepth * transform.scale;\n\n        let vertices: number[] = node.mesh.vertices;\n        let numVertices: number = vertices.length / 3;\n        let positions: Float32Array = new Float32Array(vertices.length);\n        for (let i: number = 0; i < numVertices; ++i) {\n            let index: number = 3 * i;\n            let x: number = vertices[index + 0];\n            let y: number = vertices[index + 1];\n            let z: number = vertices[index + 2];\n\n            let boundedZ: number = Math.max(minZ, Math.min(z, maxZ));\n            let factor: number = boundedZ / z;\n            let p: THREE.Vector3 = new THREE.Vector3(x * factor, y * factor, boundedZ);\n\n            p.applyMatrix4(t);\n\n            positions[index + 0] = p.x;\n            positions[index + 1] = p.y;\n            positions[index + 2] = p.z;\n        }\n\n        let faces: number[] = node.mesh.faces;\n        let indices: Uint16Array = new Uint16Array(faces.length);\n        for (let i: number = 0; i < faces.length; ++i) {\n            indices[i] = faces[i];\n        }\n\n        let geometry: THREE.BufferGeometry = new THREE.BufferGeometry();\n\n        geometry.addAttribute(\"position\", new THREE.BufferAttribute(positions, 3));\n        geometry.setIndex(new THREE.BufferAttribute(indices, 1));\n\n        return geometry;\n    }\n\n    private _getFlatImageSphereGeo(transform: Transform): THREE.Geometry {\n        let gpano: IGPano = transform.gpano;\n        let phiStart: number = 2 * Math.PI * gpano.CroppedAreaLeftPixels / gpano.FullPanoWidthPixels;\n        let phiLength: number = 2 * Math.PI * gpano.CroppedAreaImageWidthPixels / gpano.FullPanoWidthPixels;\n        let thetaStart: number = Math.PI *\n            (gpano.FullPanoHeightPixels - gpano.CroppedAreaImageHeightPixels - gpano.CroppedAreaTopPixels) /\n            gpano.FullPanoHeightPixels;\n        let thetaLength: number = Math.PI * gpano.CroppedAreaImageHeightPixels / gpano.FullPanoHeightPixels;\n        let geometry: THREE.SphereGeometry = new THREE.SphereGeometry(\n            this._imageSphereRadius,\n            20,\n            40,\n            phiStart - Math.PI / 2,\n            phiLength,\n            thetaStart,\n            thetaLength\n        );\n\n        geometry.applyMatrix(new THREE.Matrix4().getInverse(transform.rt));\n\n        return geometry;\n    }\n\n    private _getFlatImagePlaneGeo(transform: Transform): THREE.BufferGeometry {\n        let width: number = transform.width;\n        let height: number = transform.height;\n        let size: number = Math.max(width, height);\n        let dx: number = width / 2.0 / size;\n        let dy: number = height / 2.0 / size;\n\n        let vertices: number[][] = [];\n        vertices.push(transform.unprojectSfM([-dx, -dy], this._imagePlaneDepth));\n        vertices.push(transform.unprojectSfM([dx, -dy], this._imagePlaneDepth));\n        vertices.push(transform.unprojectSfM([dx, dy], this._imagePlaneDepth));\n        vertices.push(transform.unprojectSfM([-dx, dy], this._imagePlaneDepth));\n\n        let positions: Float32Array = new Float32Array(12);\n        for (let i: number = 0; i < vertices.length; i++) {\n            let index: number = 3 * i;\n            positions[index + 0] = vertices[i][0];\n            positions[index + 1] = vertices[i][1];\n            positions[index + 2] = vertices[i][2];\n        }\n\n        let indices: Uint16Array = new Uint16Array(6);\n        indices[0] = 0;\n        indices[1] = 1;\n        indices[2] = 3;\n        indices[3] = 1;\n        indices[4] = 2;\n        indices[5] = 3;\n\n        let geometry: THREE.BufferGeometry = new THREE.BufferGeometry();\n\n        geometry.addAttribute(\"position\", new THREE.BufferAttribute(positions, 3));\n        geometry.setIndex(new THREE.BufferAttribute(indices, 1));\n\n        return geometry;\n    }\n}\n\nexport default ImagePlaneFactory;\n",
+    "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {IGPano} from \"../../API\";\nimport {Transform} from \"../../Geo\";\nimport {Node} from \"../../Graph\";\nimport {ImagePlaneShaders} from \"../../Component\";\n\nexport class ImagePlaneFactory {\n    private _imagePlaneDepth: number;\n    private _imageSphereRadius: number;\n\n    constructor(imagePlaneDepth?: number, imageSphereRadius?: number) {\n        this._imagePlaneDepth = imagePlaneDepth != null ? imagePlaneDepth : 200;\n        this._imageSphereRadius = imageSphereRadius != null ? imageSphereRadius : 200;\n    }\n\n    public createMesh(node: Node, transform: Transform): THREE.Mesh {\n        let mesh: THREE.Mesh = node.pano ?\n            this._createImageSphere(node, transform) :\n            this._createImagePlane(node, transform);\n\n        return mesh;\n    }\n\n    private _createImageSphere(node: Node, transform: Transform): THREE.Mesh {\n        let texture: THREE.Texture = this._createTexture(node.image);\n        let materialParameters: THREE.ShaderMaterialParameters = this._createSphereMaterialParameters(transform, texture);\n        let material: THREE.ShaderMaterial = new THREE.ShaderMaterial(materialParameters);\n\n        let mesh: THREE.Mesh = this._useMesh(transform, node) ?\n            new THREE.Mesh(this._getImageSphereGeo(transform, node), material) :\n            new THREE.Mesh(this._getFlatImageSphereGeo(transform), material);\n\n        return mesh;\n    }\n\n    private _createImagePlane(node: Node, transform: Transform): THREE.Mesh {\n        let texture: THREE.Texture = this._createTexture(node.image);\n        let materialParameters: THREE.ShaderMaterialParameters = this._createPlaneMaterialParameters(transform, texture);\n        let material: THREE.ShaderMaterial = new THREE.ShaderMaterial(materialParameters);\n\n        let geometry: THREE.BufferGeometry = this._useMesh(transform, node) ?\n            this._getImagePlaneGeo(transform, node) :\n            this._getFlatImagePlaneGeo(transform);\n\n        return new THREE.Mesh(geometry, material);\n    }\n\n    private _createSphereMaterialParameters(transform: Transform, texture: THREE.Texture): THREE.ShaderMaterialParameters {\n        let gpano: IGPano = transform.gpano;\n\n        let halfCroppedWidth: number = (gpano.FullPanoWidthPixels - gpano.CroppedAreaImageWidthPixels) / 2;\n        let phiShift: number = 2 * Math.PI * (gpano.CroppedAreaLeftPixels - halfCroppedWidth) / gpano.FullPanoWidthPixels;\n        let phiLength: number = 2 * Math.PI * gpano.CroppedAreaImageWidthPixels / gpano.FullPanoWidthPixels;\n\n        let halfCroppedHeight: number = (gpano.FullPanoHeightPixels - gpano.CroppedAreaImageHeightPixels) / 2;\n        let thetaShift: number = Math.PI * (halfCroppedHeight - gpano.CroppedAreaTopPixels) / gpano.FullPanoHeightPixels;\n        let thetaLength: number = Math.PI * gpano.CroppedAreaImageHeightPixels / gpano.FullPanoHeightPixels;\n\n        let materialParameters: THREE.ShaderMaterialParameters = {\n            depthWrite: false,\n            fragmentShader: ImagePlaneShaders.equirectangular.fragment,\n            side: THREE.DoubleSide,\n            transparent: true,\n            uniforms: {\n                opacity: {\n                    type: \"f\",\n                    value: 1,\n                },\n                phiLength: {\n                    type: \"f\",\n                    value: phiLength,\n                },\n                phiShift: {\n                    type: \"f\",\n                    value: phiShift,\n                },\n                projectorMat: {\n                    type: \"m4\",\n                    value: transform.rt,\n                },\n                projectorTex: {\n                    type: \"t\",\n                    value: texture,\n                },\n                thetaLength: {\n                    type: \"f\",\n                    value: thetaLength,\n                },\n                thetaShift: {\n                    type: \"f\",\n                    value: thetaShift,\n                },\n            },\n            vertexShader: ImagePlaneShaders.equirectangular.vertex,\n        };\n\n        return materialParameters;\n    }\n\n    private _createPlaneMaterialParameters(transform: Transform, texture: THREE.Texture): THREE.ShaderMaterialParameters {\n        let materialParameters: THREE.ShaderMaterialParameters = {\n            depthWrite: false,\n            fragmentShader: ImagePlaneShaders.perspective.fragment,\n            side: THREE.DoubleSide,\n            transparent: true,\n            uniforms: {\n                bbox: {\n                    type: \"v4\",\n                    value: new THREE.Vector4(0, 0, 1, 1),\n                },\n                opacity: {\n                    type: \"f\",\n                    value: 1,\n                },\n                projectorMat: {\n                    type: \"m4\",\n                    value: transform.projectorMatrix(),\n                },\n                projectorTex: {\n                    type: \"t\",\n                    value: texture,\n                },\n            },\n            vertexShader: ImagePlaneShaders.perspective.vertex,\n        };\n\n        return materialParameters;\n    }\n\n    private _createTexture(image: HTMLImageElement): THREE.Texture {\n        let texture: THREE.Texture = new THREE.Texture(image);\n        texture.minFilter = THREE.LinearFilter;\n        texture.needsUpdate = true;\n\n        return texture;\n    }\n\n    private _useMesh(transform: Transform, node: Node): boolean {\n        return node.mesh.vertices.length && transform.hasValidScale;\n    }\n\n    private _getImageSphereGeo(transform: Transform, node: Node): THREE.BufferGeometry {\n        let t: THREE.Matrix4 = new THREE.Matrix4().getInverse(transform.srt);\n\n        // push everything at least 5 meters in front of the camera\n        let minZ: number = 5.0 * transform.scale;\n        let maxZ: number = this._imageSphereRadius * transform.scale;\n\n        let vertices: number[] = node.mesh.vertices;\n        let numVertices: number = vertices.length / 3;\n        let positions: Float32Array = new Float32Array(vertices.length);\n        for (let i: number = 0; i < numVertices; ++i) {\n            let index: number = 3 * i;\n            let x: number = vertices[index + 0];\n            let y: number = vertices[index + 1];\n            let z: number = vertices[index + 2];\n\n            let l: number = Math.sqrt(x * x + y * y + z * z);\n            let boundedL: number = Math.max(minZ, Math.min(l, maxZ));\n            let factor: number = boundedL / l;\n            let p: THREE.Vector3 = new THREE.Vector3(x * factor, y * factor, z * factor);\n\n            p.applyMatrix4(t);\n\n            positions[index + 0] = p.x;\n            positions[index + 1] = p.y;\n            positions[index + 2] = p.z;\n        }\n\n        let faces: number[] = node.mesh.faces;\n        let indices: Uint16Array = new Uint16Array(faces.length);\n        for (let i: number = 0; i < faces.length; ++i) {\n            indices[i] = faces[i];\n        }\n\n        let geometry: THREE.BufferGeometry = new THREE.BufferGeometry();\n\n        geometry.addAttribute(\"position\", new THREE.BufferAttribute(positions, 3));\n        geometry.setIndex(new THREE.BufferAttribute(indices, 1));\n\n        return geometry;\n    }\n\n    private _getImagePlaneGeo(transform: Transform, node: Node): THREE.BufferGeometry {\n        let t: THREE.Matrix4 = new THREE.Matrix4().getInverse(transform.srt);\n\n        // push everything at least 5 meters in front of the camera\n        let minZ: number = 5.0 * transform.scale;\n        let maxZ: number = this._imagePlaneDepth * transform.scale;\n\n        let vertices: number[] = node.mesh.vertices;\n        let numVertices: number = vertices.length / 3;\n        let positions: Float32Array = new Float32Array(vertices.length);\n        for (let i: number = 0; i < numVertices; ++i) {\n            let index: number = 3 * i;\n            let x: number = vertices[index + 0];\n            let y: number = vertices[index + 1];\n            let z: number = vertices[index + 2];\n\n            let boundedZ: number = Math.max(minZ, Math.min(z, maxZ));\n            let factor: number = boundedZ / z;\n            let p: THREE.Vector3 = new THREE.Vector3(x * factor, y * factor, boundedZ);\n\n            p.applyMatrix4(t);\n\n            positions[index + 0] = p.x;\n            positions[index + 1] = p.y;\n            positions[index + 2] = p.z;\n        }\n\n        let faces: number[] = node.mesh.faces;\n        let indices: Uint16Array = new Uint16Array(faces.length);\n        for (let i: number = 0; i < faces.length; ++i) {\n            indices[i] = faces[i];\n        }\n\n        let geometry: THREE.BufferGeometry = new THREE.BufferGeometry();\n\n        geometry.addAttribute(\"position\", new THREE.BufferAttribute(positions, 3));\n        geometry.setIndex(new THREE.BufferAttribute(indices, 1));\n\n        return geometry;\n    }\n\n    private _getFlatImageSphereGeo(transform: Transform): THREE.Geometry {\n        let gpano: IGPano = transform.gpano;\n        let phiStart: number = 2 * Math.PI * gpano.CroppedAreaLeftPixels / gpano.FullPanoWidthPixels;\n        let phiLength: number = 2 * Math.PI * gpano.CroppedAreaImageWidthPixels / gpano.FullPanoWidthPixels;\n        let thetaStart: number = Math.PI *\n            (gpano.FullPanoHeightPixels - gpano.CroppedAreaImageHeightPixels - gpano.CroppedAreaTopPixels) /\n            gpano.FullPanoHeightPixels;\n        let thetaLength: number = Math.PI * gpano.CroppedAreaImageHeightPixels / gpano.FullPanoHeightPixels;\n        let geometry: THREE.SphereGeometry = new THREE.SphereGeometry(\n            this._imageSphereRadius,\n            20,\n            40,\n            phiStart - Math.PI / 2,\n            phiLength,\n            thetaStart,\n            thetaLength\n        );\n\n        geometry.applyMatrix(new THREE.Matrix4().getInverse(transform.rt));\n\n        return geometry;\n    }\n\n    private _getFlatImagePlaneGeo(transform: Transform): THREE.BufferGeometry {\n        let width: number = transform.width;\n        let height: number = transform.height;\n        let size: number = Math.max(width, height);\n        let dx: number = width / 2.0 / size;\n        let dy: number = height / 2.0 / size;\n\n        let vertices: number[][] = [];\n        vertices.push(transform.unprojectSfM([-dx, -dy], this._imagePlaneDepth));\n        vertices.push(transform.unprojectSfM([dx, -dy], this._imagePlaneDepth));\n        vertices.push(transform.unprojectSfM([dx, dy], this._imagePlaneDepth));\n        vertices.push(transform.unprojectSfM([-dx, dy], this._imagePlaneDepth));\n\n        let positions: Float32Array = new Float32Array(12);\n        for (let i: number = 0; i < vertices.length; i++) {\n            let index: number = 3 * i;\n            positions[index + 0] = vertices[i][0];\n            positions[index + 1] = vertices[i][1];\n            positions[index + 2] = vertices[i][2];\n        }\n\n        let indices: Uint16Array = new Uint16Array(6);\n        indices[0] = 0;\n        indices[1] = 1;\n        indices[2] = 3;\n        indices[3] = 1;\n        indices[4] = 2;\n        indices[5] = 3;\n\n        let geometry: THREE.BufferGeometry = new THREE.BufferGeometry();\n\n        geometry.addAttribute(\"position\", new THREE.BufferAttribute(positions, 3));\n        geometry.setIndex(new THREE.BufferAttribute(indices, 1));\n\n        return geometry;\n    }\n}\n\nexport default ImagePlaneFactory;\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport {\n    ImagePlaneScene,\n    ImagePlaneFactory,\n    IShaderMaterial,\n} from \"../../Component\";\nimport {Camera} from \"../../Geo\";\nimport {Node} from \"../../Graph\";\nimport {\n    ICurrentState,\n    IFrame,\n} from \"../../State\";\nimport {TextureProvider} from \"../../Tiles\";\n\nexport class ImagePlaneGLRenderer {\n    private _imagePlaneFactory: ImagePlaneFactory;\n    private _imagePlaneScene: ImagePlaneScene;\n\n    private _alpha: number;\n    private _alphaOld: number;\n    private _fadeOutSpeed: number;\n    private _lastCamera: Camera;\n    private _epsilon: number;\n\n    private _currentKey: string;\n    private _previousKey: string;\n    private _providerDisposers: { [key: string]: () => void };\n\n    private _frameId: number;\n    private _needsRender: boolean;\n\n    constructor() {\n        this._imagePlaneFactory = new ImagePlaneFactory();\n        this._imagePlaneScene = new ImagePlaneScene();\n\n        this._alpha = 0;\n        this._alphaOld = 0;\n        this._fadeOutSpeed = 0.05;\n        this._lastCamera = new Camera();\n        this._epsilon = 0.000001;\n\n        this._currentKey = null;\n        this._previousKey = null;\n        this._providerDisposers = {};\n\n        this._frameId = 0;\n        this._needsRender = false;\n    }\n\n    public get frameId(): number {\n        return this._frameId;\n    }\n\n    public get needsRender(): boolean {\n        return this._needsRender;\n    }\n\n    public indicateNeedsRender(): void {\n        this._needsRender = true;\n    }\n\n    public updateFrame(frame: IFrame): void {\n        this._updateFrameId(frame.id);\n        this._needsRender = this._updateAlpha(frame.state.alpha) || this._needsRender;\n        this._needsRender = this._updateAlphaOld(frame.state.alpha) || this._needsRender;\n        this._needsRender = this._updateImagePlanes(frame.state) || this._needsRender;\n    }\n\n    public setTextureProvider(key: string, provider: TextureProvider): void {\n        if (key !== this._currentKey) {\n            return;\n        }\n\n        let createdSubscription: Subscription = provider.textureCreated$\n            .subscribe(\n                (texture: THREE.Texture): void => {\n                    this._updateTexture(texture);\n                });\n\n        let updatedSubscription: Subscription = provider.textureUpdated$\n            .subscribe(\n                (updated: boolean): void => {\n                    this._needsRender = true;\n                });\n\n        let dispose: () => void = (): void => {\n            createdSubscription.unsubscribe();\n            updatedSubscription.unsubscribe();\n            provider.dispose();\n        };\n\n        if (key in this._providerDisposers) {\n            let disposeProvider: () => void = this._providerDisposers[key];\n            disposeProvider();\n\n            delete this._providerDisposers[key];\n        }\n\n        this._providerDisposers[key] = dispose;\n    }\n\n    public _updateTexture(texture: THREE.Texture): void {\n        this._needsRender = true;\n\n        for (let plane of this._imagePlaneScene.imagePlanes) {\n            let material: IShaderMaterial = <IShaderMaterial>plane.material;\n\n            let oldTexture: THREE.Texture = <THREE.Texture>material.uniforms.projectorTex.value;\n            material.uniforms.projectorTex.value = null;\n            oldTexture.dispose();\n\n            material.uniforms.projectorTex.value = texture;\n        }\n    }\n\n    public updateTextureImage(image: HTMLImageElement, node?: Node): void {\n        if (this._currentKey !== node.key) {\n            return;\n        }\n\n        this._needsRender = true;\n\n        for (let plane of this._imagePlaneScene.imagePlanes) {\n            let material: IShaderMaterial = <IShaderMaterial>plane.material;\n            let texture: THREE.Texture = <THREE.Texture>material.uniforms.projectorTex.value;\n\n            texture.image = image;\n            texture.needsUpdate = true;\n        }\n    }\n\n    public render(\n        perspectiveCamera: THREE.PerspectiveCamera,\n        renderer: THREE.WebGLRenderer): void {\n        let planeAlpha: number = this._imagePlaneScene.imagePlanesOld.length ? 1 : this._alpha;\n\n        for (let plane of this._imagePlaneScene.imagePlanes) {\n            (<IShaderMaterial>plane.material).uniforms.opacity.value = planeAlpha;\n        }\n\n        for (let plane of this._imagePlaneScene.imagePlanesOld) {\n            (<IShaderMaterial>plane.material).uniforms.opacity.value = this._alphaOld;\n        }\n\n        renderer.render(this._imagePlaneScene.scene, perspectiveCamera);\n        renderer.render(this._imagePlaneScene.sceneOld, perspectiveCamera);\n\n        for (let plane of this._imagePlaneScene.imagePlanes) {\n            (<IShaderMaterial>plane.material).uniforms.opacity.value = this._alpha;\n        }\n\n        renderer.render(this._imagePlaneScene.scene, perspectiveCamera);\n    }\n\n    public clearNeedsRender(): void {\n        this._needsRender = false;\n    }\n\n    public dispose(): void {\n        this._imagePlaneScene.clear();\n    }\n\n    private _updateFrameId(frameId: number): void {\n        this._frameId = frameId;\n    }\n\n    private _updateAlpha(alpha: number): boolean {\n        if (alpha === this._alpha) {\n            return false;\n        }\n\n        this._alpha = alpha;\n\n        return true;\n    }\n\n    private _updateAlphaOld(alpha: number): boolean {\n        if (alpha < 1 || this._alphaOld === 0) {\n            return false;\n        }\n\n        this._alphaOld = Math.max(0, this._alphaOld - this._fadeOutSpeed);\n\n        return true;\n    }\n\n    private _updateImagePlanes(state: ICurrentState): boolean {\n        if (state.currentNode == null || state.currentNode.key === this._currentKey) {\n            return false;\n        }\n\n        let previousKey: string = state.previousNode != null ? state.previousNode.key : null;\n        let currentKey: string = state.currentNode.key;\n\n        if (this._previousKey !== previousKey &&\n            this._previousKey !== currentKey &&\n            this._previousKey in this._providerDisposers) {\n\n            let disposeProvider: () => void = this._providerDisposers[this._previousKey];\n            disposeProvider();\n\n            delete this._providerDisposers[this._previousKey];\n        }\n\n        if (previousKey != null) {\n            if (previousKey !== this._currentKey && previousKey !== this._previousKey) {\n                let previousMesh: THREE.Mesh =\n                    this._imagePlaneFactory.createMesh(state.previousNode, state.previousTransform);\n\n                this._imagePlaneScene.updateImagePlanes([previousMesh]);\n            }\n\n            this._previousKey = previousKey;\n        }\n\n        this._currentKey = currentKey;\n        let currentMesh: THREE.Mesh =\n            this._imagePlaneFactory.createMesh(state.currentNode, state.currentTransform);\n\n        this._imagePlaneScene.updateImagePlanes([currentMesh]);\n\n        this._alphaOld = 1;\n\n        return true;\n    }\n}\n\nexport default ImagePlaneGLRenderer;\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {IShaderMaterial} from \"../../Component\";\n\nexport class ImagePlaneScene {\n    public scene: THREE.Scene;\n    public sceneOld: THREE.Scene;\n\n    public imagePlanes: THREE.Mesh[];\n    public imagePlanesOld: THREE.Mesh[];\n\n    constructor() {\n        this.scene = new THREE.Scene();\n        this.sceneOld = new THREE.Scene();\n\n        this.imagePlanes = [];\n        this.imagePlanesOld = [];\n    }\n\n    public updateImagePlanes(planes: THREE.Mesh[]): void {\n        this._dispose(this.imagePlanesOld, this.sceneOld);\n\n        for (let plane of this.imagePlanes) {\n            this.scene.remove(plane);\n            this.sceneOld.add(plane);\n        }\n\n        for (let plane of planes) {\n            this.scene.add(plane);\n        }\n\n        this.imagePlanesOld = this.imagePlanes;\n        this.imagePlanes = planes;\n    }\n\n    public addImagePlanes(planes: THREE.Mesh[]): void {\n        for (let plane of planes) {\n            this.scene.add(plane);\n            this.imagePlanes.push(plane);\n        }\n    }\n\n    public addImagePlanesOld(planes: THREE.Mesh[]): void {\n        for (let plane of planes) {\n            this.sceneOld.add(plane);\n            this.imagePlanesOld.push(plane);\n        }\n    }\n\n    public setImagePlanes(planes: THREE.Mesh[]): void {\n        this._clear();\n        this.addImagePlanes(planes);\n    }\n\n    public setImagePlanesOld(planes: THREE.Mesh[]): void {\n        this._clearOld();\n        this.addImagePlanesOld(planes);\n    }\n\n    public clear(): void {\n        this._clear();\n        this._clearOld();\n    }\n\n    private _clear(): void {\n        this._dispose(this.imagePlanes, this.scene);\n        this.imagePlanes.length = 0;\n    }\n\n    private _clearOld(): void {\n        this._dispose(this.imagePlanesOld, this.sceneOld);\n        this.imagePlanesOld.length = 0;\n    }\n\n    private _dispose(planes: THREE.Mesh[], scene: THREE.Scene): void {\n        for (let plane of planes) {\n            scene.remove(plane);\n            plane.geometry.dispose();\n            plane.material.dispose();\n            let texture: THREE.Texture = (<IShaderMaterial>plane.material).uniforms.projectorTex.value;\n            if (texture != null) {\n                texture.dispose();\n            }\n        }\n    }\n}\n\nexport default ImagePlaneScene;\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as fs from \"fs\";\nimport * as path from \"path\";\n\nimport {IShader} from \"../../Component\";\n\nexport class ImagePlaneShaders {\n    public static equirectangular: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./shaders/equirectangular.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./shaders/equirectangular.vertex.glsl\"), \"utf8\"),\n    };\n    public static perspective: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./shaders/perspective.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./shaders/perspective.vertex.glsl\"), \"utf8\"),\n    };\n}\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\nimport * as vd from \"virtual-dom\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/observable/combineLatest\";\nimport \"rxjs/add/observable/fromEvent\";\nimport \"rxjs/add/observable/of\";\nimport \"rxjs/add/observable/zip\";\n\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/first\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/merge\";\nimport \"rxjs/add/operator/mergeMap\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/switchMap\";\nimport \"rxjs/add/operator/withLatestFrom\";\nimport \"rxjs/add/operator/zip\";\n\nimport {Node} from \"../../Graph\";\nimport {\n    ICurrentState,\n    IFrame,\n    State,\n} from \"../../State\";\nimport {\n    Container,\n    ImageSize,\n    Navigator,\n} from \"../../Viewer\";\nimport {\n    IGLRenderHash,\n    GLRenderStage,\n    IVNodeHash,\n} from \"../../Render\";\nimport {Settings} from \"../../Utils\";\nimport {\n    IBBoxShaderMaterial,\n    Component,\n    ComponentService,\n    ImagePlaneScene,\n    ImagePlaneFactory,\n    ISliderKeys,\n    ISliderConfiguration,\n    IShaderMaterial,\n} from \"../../Component\";\n\ninterface ISliderNodes {\n    background: Node;\n    foreground: Node;\n}\n\ninterface ISliderCombination {\n    nodes: ISliderNodes;\n    state: ICurrentState;\n}\n\ninterface ISliderStateOperation {\n    (sliderState: SliderState): SliderState;\n}\n\nclass SliderState {\n    private _imagePlaneFactory: ImagePlaneFactory;\n    private _imagePlaneScene: ImagePlaneScene;\n\n    private _currentKey: string;\n    private _previousKey: string;\n    private _currentPano: boolean;\n\n    private _frameId: number;\n\n    private _glNeedsRender: boolean;\n    private _domNeedsRender: boolean;\n    private _sliderVisible: boolean;\n\n    private _curtain: number;\n\n    constructor() {\n        this._imagePlaneFactory = new ImagePlaneFactory();\n        this._imagePlaneScene = new ImagePlaneScene();\n\n        this._currentKey = null;\n        this._previousKey = null;\n        this._currentPano = false;\n\n        this._frameId = 0;\n\n        this._glNeedsRender = false;\n        this._domNeedsRender = true;\n\n        this._curtain = 1;\n    }\n\n    public get frameId(): number {\n        return this._frameId;\n    }\n\n    public get curtain(): number {\n        return this._curtain;\n    }\n\n    public get glNeedsRender(): boolean {\n        return this._glNeedsRender;\n    }\n\n    public get domNeedsRender(): boolean {\n        return this._domNeedsRender;\n    }\n\n    public get sliderVisible(): boolean {\n        return this._sliderVisible;\n    }\n\n    public set sliderVisible(value: boolean) {\n        this._sliderVisible = value;\n        this._domNeedsRender = true;\n    }\n\n    public get disabled(): boolean {\n        return this._currentKey == null ||\n            this._previousKey == null ||\n            this._currentPano;\n    }\n\n    public update(frame: IFrame): void {\n        this._updateFrameId(frame.id);\n        let needsRender: boolean = this._updateImagePlanes(frame.state);\n\n        this._domNeedsRender = needsRender || this._domNeedsRender;\n\n        needsRender = this._updateCurtain(frame.state.alpha) || needsRender;\n        this._glNeedsRender = needsRender || this._glNeedsRender;\n    }\n\n    public updateTexture(image: HTMLImageElement, node: Node): void {\n        let imagePlanes: THREE.Mesh[] = node.key === this._currentKey ?\n            this._imagePlaneScene.imagePlanes :\n            node.key === this._previousKey ?\n                this._imagePlaneScene.imagePlanesOld :\n                [];\n\n        if (imagePlanes.length === 0) {\n            return;\n        }\n\n        this._glNeedsRender = true;\n\n        for (let plane of imagePlanes) {\n            let material: IShaderMaterial = <IShaderMaterial>plane.material;\n            let texture: THREE.Texture = <THREE.Texture>material.uniforms.projectorTex.value;\n\n            texture.image = image;\n            texture.needsUpdate = true;\n        }\n    }\n\n    public render(\n        perspectiveCamera: THREE.PerspectiveCamera,\n        renderer: THREE.WebGLRenderer): void {\n\n        if (!this.disabled) {\n            renderer.render(this._imagePlaneScene.sceneOld, perspectiveCamera);\n        }\n\n        renderer.render(this._imagePlaneScene.scene, perspectiveCamera);\n    }\n\n    public dispose(): void {\n        this._imagePlaneScene.clear();\n    }\n\n    public clearGLNeedsRender(): void {\n        this._glNeedsRender = false;\n    }\n\n    public clearDomNeedsRender(): void {\n        this._domNeedsRender = false;\n    }\n\n    private _updateFrameId(frameId: number): void {\n        this._frameId = frameId;\n    }\n\n    private _updateImagePlanes(state: ICurrentState): boolean {\n        if (state.currentNode == null) {\n            return;\n        }\n\n        let needsRender: boolean = false;\n\n        if (state.previousNode != null && this._previousKey !== state.previousNode.key) {\n            needsRender = true;\n\n            this._previousKey = state.previousNode.key;\n            this._imagePlaneScene.setImagePlanesOld([\n                this._imagePlaneFactory.createMesh(state.previousNode, state.previousTransform),\n            ]);\n        }\n\n        if (this._currentKey !== state.currentNode.key) {\n            needsRender = true;\n\n            this._currentKey = state.currentNode.key;\n            this._currentPano = state.currentNode.pano;\n            this._imagePlaneScene.setImagePlanes([\n                this._imagePlaneFactory.createMesh(state.currentNode, state.currentTransform),\n            ]);\n\n            if (!this.disabled) {\n                this._updateBbox();\n            }\n        }\n\n        return needsRender;\n    }\n\n    private _updateCurtain(alpha: number): boolean {\n        if (this.disabled ||\n            Math.abs(this._curtain - alpha) < 0.001) {\n            return false;\n        }\n\n        this._curtain = alpha;\n        this._updateBbox();\n\n        return true;\n    }\n\n    private _updateBbox(): void {\n        for (let plane of this._imagePlaneScene.imagePlanes) {\n            let shaderMaterial: IBBoxShaderMaterial = <IBBoxShaderMaterial>plane.material;\n            let bbox: THREE.Vector4 = <THREE.Vector4>shaderMaterial.uniforms.bbox.value;\n\n            bbox.z = this._curtain;\n        }\n    }\n}\n\nexport class SliderComponent extends Component<ISliderConfiguration> {\n    public static componentName: string = \"slider\";\n\n    private _sliderStateOperation$: Subject<ISliderStateOperation>;\n    private _sliderState$: Observable<SliderState>;\n    private _sliderStateCreator$: Subject<void>;\n    private _sliderStateDisposer$: Subject<void>;\n\n    private _setKeysSubscription: Subscription;\n    private _setSliderVisibleSubscription: Subscription;\n\n    private _stateSubscription: Subscription;\n    private _glRenderSubscription: Subscription;\n    private _domRenderSubscription: Subscription;\n    private _nodeSubscription: Subscription;\n\n    /**\n     * Create a new slider component instance.\n     * @class SliderComponent\n     */\n    constructor (name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n\n        this._sliderStateOperation$ = new Subject<ISliderStateOperation>();\n        this._sliderStateCreator$ = new Subject<void>();\n        this._sliderStateDisposer$ = new Subject<void>();\n\n        this._sliderState$ = this._sliderStateOperation$\n            .scan(\n                (sliderState: SliderState, operation: ISliderStateOperation): SliderState => {\n                    return operation(sliderState);\n                },\n                null)\n            .filter(\n                (sliderState: SliderState): boolean => {\n                    return sliderState != null;\n                })\n            .distinctUntilChanged(\n                undefined,\n                (sliderState: SliderState): number => {\n                    return sliderState.frameId;\n                });\n\n        this._sliderStateCreator$\n            .map(\n                (): ISliderStateOperation => {\n                    return (sliderState: SliderState): SliderState => {\n                        if (sliderState != null) {\n                            throw new Error(\"Multiple slider states can not be created at the same time\");\n                        }\n\n                        return new SliderState();\n                    };\n                })\n            .subscribe(this._sliderStateOperation$);\n\n        this._sliderStateDisposer$\n            .map(\n                (): ISliderStateOperation => {\n                    return (sliderState: SliderState): SliderState => {\n                        sliderState.dispose();\n\n                        return null;\n                    };\n                })\n            .subscribe(this._sliderStateOperation$);\n    }\n\n    /**\n     * Set the image keys.\n     *\n     * Configures the component to show the image planes for the supplied image keys.\n     *\n     * @param {keys} ISliderKeys - Slider keys object specifying the images to be shown in the foreground and the background.\n     */\n    public setKeys(keys: ISliderKeys): void {\n        this.configure({ keys: keys });\n    }\n\n    /**\n     * Set the initial position.\n     *\n     * Configures the intial position of the slider. The inital position value will be used when the component is activated.\n     *\n     * @param {number} initialPosition - Initial slider position.\n     */\n    public setInitialPosition(initialPosition: number): void {\n        this.configure({ initialPosition: initialPosition });\n    }\n\n    /**\n     * Set the value controlling if the slider is visible.\n     *\n     * @param {boolean} sliderVisible - Value indicating if the slider should be visible or not.\n     */\n    public setSliderVisible(sliderVisible: boolean): void {\n        this.configure({ sliderVisible: sliderVisible });\n    }\n\n    protected _activate(): void {\n        Observable\n            .combineLatest<State, ISliderConfiguration>(\n                this._navigator.stateService.state$,\n                this._configuration$)\n            .first()\n            .subscribe(\n                ([state, configuration]: [State, ISliderConfiguration]): void => {\n                    if (state === State.Traversing) {\n                        this._navigator.stateService.wait();\n\n                        let position: number = configuration.initialPosition;\n                        this._navigator.stateService.moveTo(position != null ? position : 1);\n                    }\n                });\n\n        this._glRenderSubscription = this._sliderState$\n            .map(\n                (sliderState: SliderState): IGLRenderHash => {\n                    let renderHash: IGLRenderHash = {\n                        name: this._name,\n                        render: {\n                            frameId: sliderState.frameId,\n                            needsRender: sliderState.glNeedsRender,\n                            render: sliderState.render.bind(sliderState),\n                            stage: GLRenderStage.Background,\n                        },\n                    };\n\n                    sliderState.clearGLNeedsRender();\n\n                    return renderHash;\n                })\n            .subscribe(this._container.glRenderer.render$);\n\n        this._domRenderSubscription = this._sliderState$\n            .filter(\n                (sliderState: SliderState): boolean => {\n                    return sliderState.domNeedsRender;\n                })\n            .map(\n                (sliderState: SliderState): IVNodeHash => {\n                    let sliderInput: vd.VNode = vd.h(\n                        \"input.SliderControl\",\n                        {\n                            max: 1000,\n                            min: 0,\n                            oninput: (e: Event): void => {\n                                const curtain: number = Number((<HTMLInputElement>e.target).value) / 1000;\n                                this._navigator.stateService.moveTo(curtain);\n                            },\n                            type: \"range\",\n                            value: 1000 * sliderState.curtain,\n                        },\n                        []);\n\n                    let vNode: vd.VNode = sliderState.disabled || !sliderState.sliderVisible ?\n                        null :\n                        vd.h(\"div.SliderWrapper\", {}, [sliderInput]);\n\n                    let hash: IVNodeHash = {\n                        name: this._name,\n                        vnode: vNode,\n                    };\n\n                    sliderState.clearDomNeedsRender();\n\n                    return hash;\n                })\n            .subscribe(this._container.domRenderer.render$);\n\n        this._sliderStateCreator$.next(null);\n\n        this._stateSubscription = this._navigator.stateService.currentState$\n            .map(\n                (frame: IFrame): ISliderStateOperation => {\n                    return (sliderState: SliderState): SliderState => {\n                        sliderState.update(frame);\n\n                        return sliderState;\n                    };\n                })\n            .subscribe(this._sliderStateOperation$);\n\n        this._setSliderVisibleSubscription = this._configuration$\n            .map(\n                (configuration: ISliderConfiguration): boolean => {\n                    return configuration.sliderVisible == null || configuration.sliderVisible;\n                })\n            .distinctUntilChanged()\n            .map(\n                (sliderVisible: boolean): ISliderStateOperation => {\n                    return (sliderState: SliderState): SliderState => {\n                        sliderState.sliderVisible = sliderVisible;\n\n                        return sliderState;\n                    };\n                })\n            .subscribe(this._sliderStateOperation$);\n\n        this._setKeysSubscription = this._configuration$\n            .filter(\n                (configuration: ISliderConfiguration): boolean => {\n                    return configuration.keys != null;\n                })\n            .switchMap(\n                (configuration: ISliderConfiguration): Observable<ISliderCombination> => {\n                    return Observable\n                        .zip(\n                            this._catchCacheNode$(configuration.keys.background),\n                            this._catchCacheNode$(configuration.keys.foreground))\n                        .map(\n                            (nodes: [Node, Node]): ISliderNodes => {\n                                return { background: nodes[0], foreground: nodes[1] };\n                            })\n                        .zip(this._navigator.stateService.currentState$.first())\n                        .map(\n                            (nf: [ISliderNodes, IFrame]): ISliderCombination => {\n                                return { nodes: nf[0], state: nf[1].state };\n                            });\n                })\n            .subscribe(\n                (co: ISliderCombination): void => {\n                    if (co.state.currentNode != null &&\n                        co.state.previousNode != null &&\n                        co.state.currentNode.key === co.nodes.foreground.key &&\n                        co.state.previousNode.key === co.nodes.background.key) {\n                        return;\n                    }\n\n                    if (co.state.currentNode.key === co.nodes.background.key) {\n                        this._navigator.stateService.setNodes([co.nodes.foreground]);\n                        return;\n                    }\n\n                    if (co.state.currentNode.key === co.nodes.foreground.key &&\n                        co.state.trajectory.length === 1) {\n                        this._navigator.stateService.prependNodes([co.nodes.background]);\n                        return;\n                    }\n\n                    this._navigator.stateService.setNodes([co.nodes.background]);\n                    this._navigator.stateService.setNodes([co.nodes.foreground]);\n                },\n                (e: Error): void => {\n                    console.error(e);\n                });\n\n        let previousNode$: Observable<Node> = this._navigator.stateService.currentState$\n            .map(\n                (frame: IFrame): Node => {\n                    return frame.state.previousNode;\n                })\n            .filter(\n                (node: Node): boolean => {\n                    return node != null;\n                })\n            .distinctUntilChanged(\n                undefined,\n                (node: Node): string => {\n                    return node.key;\n                });\n\n        this._nodeSubscription = Observable\n            .merge(\n                previousNode$,\n                this._navigator.stateService.currentNode$)\n            .filter(\n                (node: Node): boolean => {\n                    return node.pano ?\n                        Settings.maxImageSize > Settings.basePanoramaSize :\n                        Settings.maxImageSize > Settings.baseImageSize;\n                })\n            .mergeMap(\n                (node: Node): Observable<[HTMLImageElement, Node]> => {\n                    let baseImageSize: ImageSize = node.pano ?\n                        Settings.basePanoramaSize :\n                        Settings.baseImageSize;\n\n                    if (Math.max(node.image.width, node.image.height) > baseImageSize) {\n                        return Observable.empty<[HTMLImageElement, Node]>();\n                    }\n\n                    return node.cacheImage$(Settings.maxImageSize)\n                            .map(\n                                (n: Node): [HTMLImageElement, Node] => {\n                                    return [n.image, n];\n                                })\n                            .catch(\n                                (error: Error, caught: Observable<[HTMLImageElement, Node]>):\n                                    Observable<[HTMLImageElement, Node]> => {\n                                    console.error(`Failed to fetch high res slider image (${node.key})`, error);\n\n                                    return Observable.empty<[HTMLImageElement, Node]>();\n                                });\n                })\n            .map(\n                ([element, node]: [HTMLImageElement, Node]): ISliderStateOperation => {\n                    return (sliderState: SliderState): SliderState => {\n                        sliderState.updateTexture(element, node);\n\n                        return sliderState;\n                    };\n                })\n            .subscribe(this._sliderStateOperation$);\n    }\n\n    protected _deactivate(): void {\n        this._navigator.stateService.state$\n            .first()\n            .subscribe(\n                (state: State): void => {\n                    if (state === State.Waiting) {\n                        this._navigator.stateService.traverse();\n                    }\n                });\n\n        this._sliderStateDisposer$.next(null);\n\n        this._setKeysSubscription.unsubscribe();\n        this._setSliderVisibleSubscription.unsubscribe();\n        this._stateSubscription.unsubscribe();\n        this._glRenderSubscription.unsubscribe();\n        this._domRenderSubscription.unsubscribe();\n        this._nodeSubscription.unsubscribe();\n\n        this.configure({ keys: null });\n    }\n\n    protected _getDefaultConfiguration(): ISliderConfiguration {\n        return {};\n    }\n\n    private _catchCacheNode$(key: string): Observable<Node> {\n        return this._navigator.graphService.cacheNode$(key)\n            .catch(\n                (error: Error, caught: Observable<Node>): Observable<Node> => {\n                    console.error(`Failed to cache slider node (${key})`, error);\n\n                    return Observable.empty<Node>();\n                });\n    }\n}\n\nComponentService.register(SliderComponent);\nexport default SliderComponent;\n",
     "export {MarkerComponent} from \"./MarkerComponent\";\nexport {SimpleMarker} from \"./marker/SimpleMarker\";\nexport {CircleMarker} from \"./marker/CircleMarker\";\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport {\n    ImagePlaneScene,\n    ImagePlaneFactory,\n    IShaderMaterial,\n} from \"../../Component\";\nimport {Camera} from \"../../Geo\";\nimport {Node} from \"../../Graph\";\nimport {\n    ICurrentState,\n    IFrame,\n} from \"../../State\";\nimport {TextureProvider} from \"../../Tiles\";\n\nexport class ImagePlaneGLRenderer {\n    private _imagePlaneFactory: ImagePlaneFactory;\n    private _imagePlaneScene: ImagePlaneScene;\n\n    private _alpha: number;\n    private _alphaOld: number;\n    private _fadeOutSpeed: number;\n    private _lastCamera: Camera;\n    private _epsilon: number;\n\n    private _currentKey: string;\n    private _previousKey: string;\n    private _providerDisposers: { [key: string]: () => void };\n\n    private _frameId: number;\n    private _needsRender: boolean;\n\n    constructor() {\n        this._imagePlaneFactory = new ImagePlaneFactory();\n        this._imagePlaneScene = new ImagePlaneScene();\n\n        this._alpha = 0;\n        this._alphaOld = 0;\n        this._fadeOutSpeed = 0.05;\n        this._lastCamera = new Camera();\n        this._epsilon = 0.000001;\n\n        this._currentKey = null;\n        this._previousKey = null;\n        this._providerDisposers = {};\n\n        this._frameId = 0;\n        this._needsRender = false;\n    }\n\n    public get frameId(): number {\n        return this._frameId;\n    }\n\n    public get needsRender(): boolean {\n        return this._needsRender;\n    }\n\n    public indicateNeedsRender(): void {\n        this._needsRender = true;\n    }\n\n    public updateFrame(frame: IFrame): void {\n        this._updateFrameId(frame.id);\n        this._needsRender = this._updateAlpha(frame.state.alpha) || this._needsRender;\n        this._needsRender = this._updateAlphaOld(frame.state.alpha) || this._needsRender;\n        this._needsRender = this._updateImagePlanes(frame.state) || this._needsRender;\n    }\n\n    public setTextureProvider(key: string, provider: TextureProvider): void {\n        if (key !== this._currentKey) {\n            return;\n        }\n\n        let createdSubscription: Subscription = provider.textureCreated$\n            .subscribe(\n                (texture: THREE.Texture): void => {\n                    this._updateTexture(texture);\n                });\n\n        let updatedSubscription: Subscription = provider.textureUpdated$\n            .subscribe(\n                (updated: boolean): void => {\n                    this._needsRender = true;\n                });\n\n        let dispose: () => void = (): void => {\n            createdSubscription.unsubscribe();\n            updatedSubscription.unsubscribe();\n            provider.dispose();\n        };\n\n        if (key in this._providerDisposers) {\n            let disposeProvider: () => void = this._providerDisposers[key];\n            disposeProvider();\n\n            delete this._providerDisposers[key];\n        }\n\n        this._providerDisposers[key] = dispose;\n    }\n\n    public _updateTexture(texture: THREE.Texture): void {\n        this._needsRender = true;\n\n        for (let plane of this._imagePlaneScene.imagePlanes) {\n            let material: IShaderMaterial = <IShaderMaterial>plane.material;\n\n            let oldTexture: THREE.Texture = <THREE.Texture>material.uniforms.projectorTex.value;\n            material.uniforms.projectorTex.value = null;\n            oldTexture.dispose();\n\n            material.uniforms.projectorTex.value = texture;\n        }\n    }\n\n    public updateTextureImage(image: HTMLImageElement, node?: Node): void {\n        if (this._currentKey !== node.key) {\n            return;\n        }\n\n        this._needsRender = true;\n\n        for (let plane of this._imagePlaneScene.imagePlanes) {\n            let material: IShaderMaterial = <IShaderMaterial>plane.material;\n            let texture: THREE.Texture = <THREE.Texture>material.uniforms.projectorTex.value;\n\n            texture.image = image;\n            texture.needsUpdate = true;\n        }\n    }\n\n    public render(\n        perspectiveCamera: THREE.PerspectiveCamera,\n        renderer: THREE.WebGLRenderer): void {\n        let planeAlpha: number = this._imagePlaneScene.imagePlanesOld.length ? 1 : this._alpha;\n\n        for (let plane of this._imagePlaneScene.imagePlanes) {\n            (<IShaderMaterial>plane.material).uniforms.opacity.value = planeAlpha;\n        }\n\n        for (let plane of this._imagePlaneScene.imagePlanesOld) {\n            (<IShaderMaterial>plane.material).uniforms.opacity.value = this._alphaOld;\n        }\n\n        renderer.render(this._imagePlaneScene.scene, perspectiveCamera);\n        renderer.render(this._imagePlaneScene.sceneOld, perspectiveCamera);\n\n        for (let plane of this._imagePlaneScene.imagePlanes) {\n            (<IShaderMaterial>plane.material).uniforms.opacity.value = this._alpha;\n        }\n\n        renderer.render(this._imagePlaneScene.scene, perspectiveCamera);\n    }\n\n    public clearNeedsRender(): void {\n        this._needsRender = false;\n    }\n\n    public dispose(): void {\n        this._imagePlaneScene.clear();\n    }\n\n    private _updateFrameId(frameId: number): void {\n        this._frameId = frameId;\n    }\n\n    private _updateAlpha(alpha: number): boolean {\n        if (alpha === this._alpha) {\n            return false;\n        }\n\n        this._alpha = alpha;\n\n        return true;\n    }\n\n    private _updateAlphaOld(alpha: number): boolean {\n        if (alpha < 1 || this._alphaOld === 0) {\n            return false;\n        }\n\n        this._alphaOld = Math.max(0, this._alphaOld - this._fadeOutSpeed);\n\n        return true;\n    }\n\n    private _updateImagePlanes(state: ICurrentState): boolean {\n        if (state.currentNode == null || state.currentNode.key === this._currentKey) {\n            return false;\n        }\n\n        let previousKey: string = state.previousNode != null ? state.previousNode.key : null;\n        let currentKey: string = state.currentNode.key;\n\n        if (this._previousKey !== previousKey &&\n            this._previousKey !== currentKey &&\n            this._previousKey in this._providerDisposers) {\n\n            let disposeProvider: () => void = this._providerDisposers[this._previousKey];\n            disposeProvider();\n\n            delete this._providerDisposers[this._previousKey];\n        }\n\n        if (previousKey != null) {\n            if (previousKey !== this._currentKey && previousKey !== this._previousKey) {\n                let previousMesh: THREE.Mesh =\n                    this._imagePlaneFactory.createMesh(state.previousNode, state.previousTransform);\n\n                this._imagePlaneScene.updateImagePlanes([previousMesh]);\n            }\n\n            this._previousKey = previousKey;\n        }\n\n        this._currentKey = currentKey;\n        let currentMesh: THREE.Mesh =\n            this._imagePlaneFactory.createMesh(state.currentNode, state.currentTransform);\n\n        this._imagePlaneScene.updateImagePlanes([currentMesh]);\n\n        this._alphaOld = 1;\n\n        return true;\n    }\n}\n\nexport default ImagePlaneGLRenderer;\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {IShaderMaterial} from \"../../Component\";\n\nexport class ImagePlaneScene {\n    public scene: THREE.Scene;\n    public sceneOld: THREE.Scene;\n\n    public imagePlanes: THREE.Mesh[];\n    public imagePlanesOld: THREE.Mesh[];\n\n    constructor() {\n        this.scene = new THREE.Scene();\n        this.sceneOld = new THREE.Scene();\n\n        this.imagePlanes = [];\n        this.imagePlanesOld = [];\n    }\n\n    public updateImagePlanes(planes: THREE.Mesh[]): void {\n        this._dispose(this.imagePlanesOld, this.sceneOld);\n\n        for (let plane of this.imagePlanes) {\n            this.scene.remove(plane);\n            this.sceneOld.add(plane);\n        }\n\n        for (let plane of planes) {\n            this.scene.add(plane);\n        }\n\n        this.imagePlanesOld = this.imagePlanes;\n        this.imagePlanes = planes;\n    }\n\n    public addImagePlanes(planes: THREE.Mesh[]): void {\n        for (let plane of planes) {\n            this.scene.add(plane);\n            this.imagePlanes.push(plane);\n        }\n    }\n\n    public addImagePlanesOld(planes: THREE.Mesh[]): void {\n        for (let plane of planes) {\n            this.sceneOld.add(plane);\n            this.imagePlanesOld.push(plane);\n        }\n    }\n\n    public setImagePlanes(planes: THREE.Mesh[]): void {\n        this._clear();\n        this.addImagePlanes(planes);\n    }\n\n    public setImagePlanesOld(planes: THREE.Mesh[]): void {\n        this._clearOld();\n        this.addImagePlanesOld(planes);\n    }\n\n    public clear(): void {\n        this._clear();\n        this._clearOld();\n    }\n\n    private _clear(): void {\n        this._dispose(this.imagePlanes, this.scene);\n        this.imagePlanes.length = 0;\n    }\n\n    private _clearOld(): void {\n        this._dispose(this.imagePlanesOld, this.sceneOld);\n        this.imagePlanesOld.length = 0;\n    }\n\n    private _dispose(planes: THREE.Mesh[], scene: THREE.Scene): void {\n        for (let plane of planes) {\n            scene.remove(plane);\n            plane.geometry.dispose();\n            plane.material.dispose();\n            let texture: THREE.Texture = (<IShaderMaterial>plane.material).uniforms.projectorTex.value;\n            if (texture != null) {\n                texture.dispose();\n            }\n        }\n    }\n}\n\nexport default ImagePlaneScene;\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as fs from \"fs\";\nimport * as path from \"path\";\n\nimport {IShader} from \"../../Component\";\n\nexport class ImagePlaneShaders {\n    public static equirectangular: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./shaders/equirectangular.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./shaders/equirectangular.vertex.glsl\"), \"utf8\"),\n    };\n    public static perspective: IShader = {\n        fragment: fs.readFileSync(path.join(__dirname, \"./shaders/perspective.fragment.glsl\"), \"utf8\"),\n        vertex: fs.readFileSync(path.join(__dirname, \"./shaders/perspective.vertex.glsl\"), \"utf8\"),\n    };\n}\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\nimport * as vd from \"virtual-dom\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/observable/combineLatest\";\nimport \"rxjs/add/observable/fromEvent\";\nimport \"rxjs/add/observable/of\";\nimport \"rxjs/add/observable/zip\";\n\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/first\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/merge\";\nimport \"rxjs/add/operator/mergeMap\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/switchMap\";\nimport \"rxjs/add/operator/withLatestFrom\";\nimport \"rxjs/add/operator/zip\";\n\nimport {Node} from \"../../Graph\";\nimport {\n    ICurrentState,\n    IFrame,\n    State,\n} from \"../../State\";\nimport {\n    Container,\n    ImageSize,\n    Navigator,\n} from \"../../Viewer\";\nimport {\n    IGLRenderHash,\n    GLRenderStage,\n    IVNodeHash,\n} from \"../../Render\";\nimport {Settings} from \"../../Utils\";\nimport {\n    IBBoxShaderMaterial,\n    Component,\n    ComponentService,\n    ImagePlaneScene,\n    ImagePlaneFactory,\n    ISliderKeys,\n    ISliderConfiguration,\n    IShaderMaterial,\n} from \"../../Component\";\n\ninterface ISliderNodes {\n    background: Node;\n    foreground: Node;\n}\n\ninterface ISliderCombination {\n    nodes: ISliderNodes;\n    state: ICurrentState;\n}\n\ninterface ISliderStateOperation {\n    (sliderState: SliderState): SliderState;\n}\n\nclass SliderState {\n    private _imagePlaneFactory: ImagePlaneFactory;\n    private _imagePlaneScene: ImagePlaneScene;\n\n    private _currentKey: string;\n    private _previousKey: string;\n    private _currentPano: boolean;\n\n    private _frameId: number;\n\n    private _glNeedsRender: boolean;\n    private _domNeedsRender: boolean;\n    private _sliderVisible: boolean;\n\n    private _curtain: number;\n\n    constructor() {\n        this._imagePlaneFactory = new ImagePlaneFactory();\n        this._imagePlaneScene = new ImagePlaneScene();\n\n        this._currentKey = null;\n        this._previousKey = null;\n        this._currentPano = false;\n\n        this._frameId = 0;\n\n        this._glNeedsRender = false;\n        this._domNeedsRender = true;\n\n        this._curtain = 1;\n    }\n\n    public get frameId(): number {\n        return this._frameId;\n    }\n\n    public get curtain(): number {\n        return this._curtain;\n    }\n\n    public get glNeedsRender(): boolean {\n        return this._glNeedsRender;\n    }\n\n    public get domNeedsRender(): boolean {\n        return this._domNeedsRender;\n    }\n\n    public get sliderVisible(): boolean {\n        return this._sliderVisible;\n    }\n\n    public set sliderVisible(value: boolean) {\n        this._sliderVisible = value;\n        this._domNeedsRender = true;\n    }\n\n    public get disabled(): boolean {\n        return this._currentKey == null ||\n            this._previousKey == null ||\n            this._currentPano;\n    }\n\n    public update(frame: IFrame): void {\n        this._updateFrameId(frame.id);\n        let needsRender: boolean = this._updateImagePlanes(frame.state);\n\n        this._domNeedsRender = needsRender || this._domNeedsRender;\n\n        needsRender = this._updateCurtain(frame.state.alpha) || needsRender;\n        this._glNeedsRender = needsRender || this._glNeedsRender;\n    }\n\n    public updateTexture(image: HTMLImageElement, node: Node): void {\n        let imagePlanes: THREE.Mesh[] = node.key === this._currentKey ?\n            this._imagePlaneScene.imagePlanes :\n            node.key === this._previousKey ?\n                this._imagePlaneScene.imagePlanesOld :\n                [];\n\n        if (imagePlanes.length === 0) {\n            return;\n        }\n\n        this._glNeedsRender = true;\n\n        for (let plane of imagePlanes) {\n            let material: IShaderMaterial = <IShaderMaterial>plane.material;\n            let texture: THREE.Texture = <THREE.Texture>material.uniforms.projectorTex.value;\n\n            texture.image = image;\n            texture.needsUpdate = true;\n        }\n    }\n\n    public render(\n        perspectiveCamera: THREE.PerspectiveCamera,\n        renderer: THREE.WebGLRenderer): void {\n\n        if (!this.disabled) {\n            renderer.render(this._imagePlaneScene.sceneOld, perspectiveCamera);\n        }\n\n        renderer.render(this._imagePlaneScene.scene, perspectiveCamera);\n    }\n\n    public dispose(): void {\n        this._imagePlaneScene.clear();\n    }\n\n    public clearGLNeedsRender(): void {\n        this._glNeedsRender = false;\n    }\n\n    public clearDomNeedsRender(): void {\n        this._domNeedsRender = false;\n    }\n\n    private _updateFrameId(frameId: number): void {\n        this._frameId = frameId;\n    }\n\n    private _updateImagePlanes(state: ICurrentState): boolean {\n        if (state.currentNode == null) {\n            return;\n        }\n\n        let needsRender: boolean = false;\n\n        if (state.previousNode != null && this._previousKey !== state.previousNode.key) {\n            needsRender = true;\n\n            this._previousKey = state.previousNode.key;\n            this._imagePlaneScene.setImagePlanesOld([\n                this._imagePlaneFactory.createMesh(state.previousNode, state.previousTransform),\n            ]);\n        }\n\n        if (this._currentKey !== state.currentNode.key) {\n            needsRender = true;\n\n            this._currentKey = state.currentNode.key;\n            this._currentPano = state.currentNode.pano;\n            this._imagePlaneScene.setImagePlanes([\n                this._imagePlaneFactory.createMesh(state.currentNode, state.currentTransform),\n            ]);\n\n            if (!this.disabled) {\n                this._updateBbox();\n            }\n        }\n\n        return needsRender;\n    }\n\n    private _updateCurtain(alpha: number): boolean {\n        if (this.disabled ||\n            Math.abs(this._curtain - alpha) < 0.001) {\n            return false;\n        }\n\n        this._curtain = alpha;\n        this._updateBbox();\n\n        return true;\n    }\n\n    private _updateBbox(): void {\n        for (let plane of this._imagePlaneScene.imagePlanes) {\n            let shaderMaterial: IBBoxShaderMaterial = <IBBoxShaderMaterial>plane.material;\n            let bbox: THREE.Vector4 = <THREE.Vector4>shaderMaterial.uniforms.bbox.value;\n\n            bbox.z = this._curtain;\n        }\n    }\n}\n\nexport class SliderComponent extends Component<ISliderConfiguration> {\n    public static componentName: string = \"slider\";\n\n    private _sliderStateOperation$: Subject<ISliderStateOperation>;\n    private _sliderState$: Observable<SliderState>;\n    private _sliderStateCreator$: Subject<void>;\n    private _sliderStateDisposer$: Subject<void>;\n\n    private _setKeysSubscription: Subscription;\n    private _setSliderVisibleSubscription: Subscription;\n\n    private _stateSubscription: Subscription;\n    private _glRenderSubscription: Subscription;\n    private _domRenderSubscription: Subscription;\n    private _nodeSubscription: Subscription;\n\n    /**\n     * Create a new slider component instance.\n     * @class SliderComponent\n     */\n    constructor (name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n\n        this._sliderStateOperation$ = new Subject<ISliderStateOperation>();\n        this._sliderStateCreator$ = new Subject<void>();\n        this._sliderStateDisposer$ = new Subject<void>();\n\n        this._sliderState$ = this._sliderStateOperation$\n            .scan(\n                (sliderState: SliderState, operation: ISliderStateOperation): SliderState => {\n                    return operation(sliderState);\n                },\n                null)\n            .filter(\n                (sliderState: SliderState): boolean => {\n                    return sliderState != null;\n                })\n            .distinctUntilChanged(\n                undefined,\n                (sliderState: SliderState): number => {\n                    return sliderState.frameId;\n                });\n\n        this._sliderStateCreator$\n            .map(\n                (): ISliderStateOperation => {\n                    return (sliderState: SliderState): SliderState => {\n                        if (sliderState != null) {\n                            throw new Error(\"Multiple slider states can not be created at the same time\");\n                        }\n\n                        return new SliderState();\n                    };\n                })\n            .subscribe(this._sliderStateOperation$);\n\n        this._sliderStateDisposer$\n            .map(\n                (): ISliderStateOperation => {\n                    return (sliderState: SliderState): SliderState => {\n                        sliderState.dispose();\n\n                        return null;\n                    };\n                })\n            .subscribe(this._sliderStateOperation$);\n    }\n\n    /**\n     * Set the image keys.\n     *\n     * Configures the component to show the image planes for the supplied image keys.\n     *\n     * @param {keys} ISliderKeys - Slider keys object specifying the images to be shown in the foreground and the background.\n     */\n    public setKeys(keys: ISliderKeys): void {\n        this.configure({ keys: keys });\n    }\n\n    /**\n     * Set the initial position.\n     *\n     * Configures the intial position of the slider. The inital position value will be used when the component is activated.\n     *\n     * @param {number} initialPosition - Initial slider position.\n     */\n    public setInitialPosition(initialPosition: number): void {\n        this.configure({ initialPosition: initialPosition });\n    }\n\n    /**\n     * Set the value controlling if the slider is visible.\n     *\n     * @param {boolean} sliderVisible - Value indicating if the slider should be visible or not.\n     */\n    public setSliderVisible(sliderVisible: boolean): void {\n        this.configure({ sliderVisible: sliderVisible });\n    }\n\n    protected _activate(): void {\n        Observable\n            .combineLatest<State, ISliderConfiguration>(\n                this._navigator.stateService.state$,\n                this._configuration$)\n            .first()\n            .subscribe(\n                ([state, configuration]: [State, ISliderConfiguration]): void => {\n                    if (state === State.Traversing) {\n                        this._navigator.stateService.wait();\n\n                        let position: number = configuration.initialPosition;\n                        this._navigator.stateService.moveTo(position != null ? position : 1);\n                    }\n                });\n\n        this._glRenderSubscription = this._sliderState$\n            .map(\n                (sliderState: SliderState): IGLRenderHash => {\n                    let renderHash: IGLRenderHash = {\n                        name: this._name,\n                        render: {\n                            frameId: sliderState.frameId,\n                            needsRender: sliderState.glNeedsRender,\n                            render: sliderState.render.bind(sliderState),\n                            stage: GLRenderStage.Background,\n                        },\n                    };\n\n                    sliderState.clearGLNeedsRender();\n\n                    return renderHash;\n                })\n            .subscribe(this._container.glRenderer.render$);\n\n        this._domRenderSubscription = this._sliderState$\n            .filter(\n                (sliderState: SliderState): boolean => {\n                    return sliderState.domNeedsRender;\n                })\n            .map(\n                (sliderState: SliderState): IVNodeHash => {\n                    let sliderInput: vd.VNode = vd.h(\n                        \"input.SliderControl\",\n                        {\n                            max: 1000,\n                            min: 0,\n                            oninput: (e: Event): void => {\n                                const curtain: number = Number((<HTMLInputElement>e.target).value) / 1000;\n                                this._navigator.stateService.moveTo(curtain);\n                            },\n                            type: \"range\",\n                            value: 1000 * sliderState.curtain,\n                        },\n                        []);\n\n                    let vNode: vd.VNode = sliderState.disabled || !sliderState.sliderVisible ?\n                        null :\n                        vd.h(\"div.SliderWrapper\", {}, [sliderInput]);\n\n                    let hash: IVNodeHash = {\n                        name: this._name,\n                        vnode: vNode,\n                    };\n\n                    sliderState.clearDomNeedsRender();\n\n                    return hash;\n                })\n            .subscribe(this._container.domRenderer.render$);\n\n        this._sliderStateCreator$.next(null);\n\n        this._stateSubscription = this._navigator.stateService.currentState$\n            .map(\n                (frame: IFrame): ISliderStateOperation => {\n                    return (sliderState: SliderState): SliderState => {\n                        sliderState.update(frame);\n\n                        return sliderState;\n                    };\n                })\n            .subscribe(this._sliderStateOperation$);\n\n        this._setSliderVisibleSubscription = this._configuration$\n            .map(\n                (configuration: ISliderConfiguration): boolean => {\n                    return configuration.sliderVisible == null || configuration.sliderVisible;\n                })\n            .distinctUntilChanged()\n            .map(\n                (sliderVisible: boolean): ISliderStateOperation => {\n                    return (sliderState: SliderState): SliderState => {\n                        sliderState.sliderVisible = sliderVisible;\n\n                        return sliderState;\n                    };\n                })\n            .subscribe(this._sliderStateOperation$);\n\n        this._setKeysSubscription = this._configuration$\n            .filter(\n                (configuration: ISliderConfiguration): boolean => {\n                    return configuration.keys != null;\n                })\n            .switchMap(\n                (configuration: ISliderConfiguration): Observable<ISliderCombination> => {\n                    return Observable\n                        .zip(\n                            this._catchCacheNode$(configuration.keys.background),\n                            this._catchCacheNode$(configuration.keys.foreground))\n                        .map(\n                            (nodes: [Node, Node]): ISliderNodes => {\n                                return { background: nodes[0], foreground: nodes[1] };\n                            })\n                        .zip(this._navigator.stateService.currentState$.first())\n                        .map(\n                            (nf: [ISliderNodes, IFrame]): ISliderCombination => {\n                                return { nodes: nf[0], state: nf[1].state };\n                            });\n                })\n            .subscribe(\n                (co: ISliderCombination): void => {\n                    if (co.state.currentNode != null &&\n                        co.state.previousNode != null &&\n                        co.state.currentNode.key === co.nodes.foreground.key &&\n                        co.state.previousNode.key === co.nodes.background.key) {\n                        return;\n                    }\n\n                    if (co.state.currentNode.key === co.nodes.background.key) {\n                        this._navigator.stateService.setNodes([co.nodes.foreground]);\n                        return;\n                    }\n\n                    if (co.state.currentNode.key === co.nodes.foreground.key &&\n                        co.state.trajectory.length === 1) {\n                        this._navigator.stateService.prependNodes([co.nodes.background]);\n                        return;\n                    }\n\n                    this._navigator.stateService.setNodes([co.nodes.background]);\n                    this._navigator.stateService.setNodes([co.nodes.foreground]);\n                },\n                (e: Error): void => {\n                    console.error(e);\n                });\n\n        let previousNode$: Observable<Node> = this._navigator.stateService.currentState$\n            .map(\n                (frame: IFrame): Node => {\n                    return frame.state.previousNode;\n                })\n            .filter(\n                (node: Node): boolean => {\n                    return node != null;\n                })\n            .distinctUntilChanged(\n                undefined,\n                (node: Node): string => {\n                    return node.key;\n                });\n\n        this._nodeSubscription = Observable\n            .merge(\n                previousNode$,\n                this._navigator.stateService.currentNode$)\n            .filter(\n                (node: Node): boolean => {\n                    return node.pano ?\n                        Settings.maxImageSize > Settings.basePanoramaSize :\n                        Settings.maxImageSize > Settings.baseImageSize;\n                })\n            .mergeMap(\n                (node: Node): Observable<[HTMLImageElement, Node]> => {\n                    let baseImageSize: ImageSize = node.pano ?\n                        Settings.basePanoramaSize :\n                        Settings.baseImageSize;\n\n                    if (Math.max(node.image.width, node.image.height) > baseImageSize) {\n                        return Observable.empty<[HTMLImageElement, Node]>();\n                    }\n\n                    return node.cacheImage$(Settings.maxImageSize)\n                            .map(\n                                (n: Node): [HTMLImageElement, Node] => {\n                                    return [n.image, n];\n                                })\n                            .catch(\n                                (error: Error, caught: Observable<[HTMLImageElement, Node]>):\n                                    Observable<[HTMLImageElement, Node]> => {\n                                    console.error(`Failed to fetch high res slider image (${node.key})`, error);\n\n                                    return Observable.empty<[HTMLImageElement, Node]>();\n                                });\n                })\n            .map(\n                ([element, node]: [HTMLImageElement, Node]): ISliderStateOperation => {\n                    return (sliderState: SliderState): SliderState => {\n                        sliderState.updateTexture(element, node);\n\n                        return sliderState;\n                    };\n                })\n            .subscribe(this._sliderStateOperation$);\n    }\n\n    protected _deactivate(): void {\n        this._navigator.stateService.state$\n            .first()\n            .subscribe(\n                (state: State): void => {\n                    if (state === State.Waiting) {\n                        this._navigator.stateService.traverse();\n                    }\n                });\n\n        this._sliderStateDisposer$.next(null);\n\n        this._setKeysSubscription.unsubscribe();\n        this._setSliderVisibleSubscription.unsubscribe();\n        this._stateSubscription.unsubscribe();\n        this._glRenderSubscription.unsubscribe();\n        this._domRenderSubscription.unsubscribe();\n        this._nodeSubscription.unsubscribe();\n\n        this.configure({ keys: null });\n    }\n\n    protected _getDefaultConfiguration(): ISliderConfiguration {\n        return {};\n    }\n\n    private _catchCacheNode$(key: string): Observable<Node> {\n        return this._navigator.graphService.cacheNode$(key)\n            .catch(\n                (error: Error, caught: Observable<Node>): Observable<Node> => {\n                    console.error(`Failed to cache slider node (${key})`, error);\n\n                    return Observable.empty<Node>();\n                });\n    }\n}\n\nComponentService.register(SliderComponent);\nexport default SliderComponent;\n",
     "export {MarkerComponent} from \"./MarkerComponent\";\nexport {SimpleMarker} from \"./marker/SimpleMarker\";\nexport {CircleMarker} from \"./marker/CircleMarker\";\n",
-    "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\nimport * as when from \"when\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport \"rxjs/add/observable/combineLatest\";\n\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/map\";\n\nimport {ILatLon} from \"../../API\";\nimport {\n    IMarkerConfiguration,\n    IMarkerEvent,\n    Marker,\n    MarkerScene,\n    MarkerSet,\n    ComponentService,\n    Component,\n} from \"../../Component\";\nimport {IFrame} from \"../../State\";\nimport {\n    Container,\n    Navigator,\n} from \"../../Viewer\";\nimport {\n    IGLRenderHash,\n    GLRenderStage,\n    RenderCamera,\n} from \"../../Render\";\nimport {\n    GraphCalculator,\n    Node,\n} from \"../../Graph\";\nimport {\n    GeoCoords,\n    ILatLonAlt,\n    ViewportCoords,\n} from \"../../Geo\";\n\n\n/**\n * @class MarkerComponent\n *\n * @classdesc Component for showing and editing 3D marker objects.\n *\n * The `add` method is used for adding new markers or replacing\n * markers already in the set.\n *\n * If a marker already in the set has the same\n * id as one of the markers added, the old marker will be removed\n * the added marker will take its place.\n *\n * It is not possible to update markers in the set by updating any properties\n * directly on the marker object. Markers need to be replaced by\n * re-adding them for updates to geographic position or configuration\n * to be reflected.\n *\n * Markers added to the marker component can be either interactive\n * or non-interactive. Different marker types define their behavior.\n * Markers with interaction support can be configured with options\n * to respond to dragging inside the viewer and be detected when\n * retrieving markers from pixel points with the `getMarkerIdAt` method.\n *\n * To retrive and use the marker component\n *\n * @example\n * ```\n * var markerComponent = viewer.getComponent(\"marker\");\n * ```\n */\nexport class MarkerComponent extends Component<IMarkerConfiguration> {\n    public static componentName: string = \"marker\";\n\n    /**\n     * Fired when the position of a marker is changed.\n     * @event\n     * @type {IMarkerEvent} markerEvent - Marker event data.\n     * @example\n     * ```\n     * markerComponent.on(\"changed\", function(e) {\n     *     console.log(e.marker.id, e.marker.latLon);\n     * });\n     * ```\n     */\n    public static changed: string = \"changed\";\n\n    /**\n     * Fired when a marker drag interaction starts.\n     * @event\n     * @type {IMarkerEvent} markerEvent - Marker event data.\n     * @example\n     * ```\n     * markerComponent.on(\"dragstart\", function(e) {\n     *     console.log(e.marker.id, e.marker.latLon);\n     * });\n     * ```\n     */\n    public static dragstart: string = \"dragstart\";\n\n    /**\n     * Fired when a marker drag interaction ends.\n     * @event\n     * @type {IMarkerEvent} markerEvent - Marker event data.\n     * @example\n     * ```\n     * markerComponent.on(\"dragend\", function(e) {\n     *     console.log(e.marker.id, e.marker.latLon);\n     * });\n     * ```\n     */\n    public static dragend: string = \"dragend\";\n\n    private _relativeGroundAltitude: number;\n\n    private _geoCoords: GeoCoords;\n    private _graphCalculator: GraphCalculator;\n    private _markerScene: MarkerScene;\n    private _markerSet: MarkerSet;\n    private _viewportCoords: ViewportCoords;\n\n    private _adjustHeightSubscription: Subscription;\n    private _dragEventSubscription: Subscription;\n    private _markersUpdatedSubscription: Subscription;\n    private _mouseClaimSubscription: Subscription;\n    private _referenceSubscription: Subscription;\n    private _renderSubscription: Subscription;\n    private _setChangedSubscription: Subscription;\n    private _updateMarkerSubscription: Subscription;\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n\n        this._relativeGroundAltitude = -2;\n\n        this._geoCoords = new GeoCoords();\n        this._graphCalculator = new GraphCalculator();\n        this._markerScene = new MarkerScene();\n        this._markerSet = new MarkerSet();\n        this._viewportCoords = new ViewportCoords();\n    }\n\n    /**\n     * Add markers to the marker set or replace markers in the marker set.\n     *\n     * @description If a marker already in the set has the same\n     * id as one of the markers added, the old marker will be removed\n     * the added marker will take its place.\n     *\n     * Any marker inside the visible bounding bbox\n     * will be initialized and placed in the viewer.\n     *\n     * @param {Array<Marker>} markers - Markers to add.\n     *\n     * @example ```markerComponent.add([marker1, marker2]);```\n     */\n    public add(markers: Marker[]): void {\n        this._markerSet.add(markers);\n    }\n\n    /**\n     * Check if a marker exist in the marker set.\n     *\n     * @param {string} markerId - Id of the marker.\n     *\n     * @example ```var markerExists = markerComponent.has(\"markerId\");```\n     */\n    public has(markerId: string): boolean {\n        return this._markerSet.has(markerId);\n    }\n\n    /**\n     * Returns the marker in the marker set with the specified id, or\n     * undefined if the id matches no marker.\n     *\n     * @param {string} markerId - Id of the marker.\n     *\n     * @example ```var marker = markerComponent.get(\"markerId\");```\n     *\n     */\n    public get(markerId: string): Marker {\n        return this._markerSet.get(markerId);\n    }\n\n\n    /**\n     * Returns an array of all markers.\n     *\n     * @example ```var markers = markerComponent.getAll();```\n     */\n    public getAll(): Marker[] {\n        return this._markerSet.getAll();\n    }\n\n    /**\n     * Returns the id of the interactive marker closest to the current camera\n     * position ids for marker currently visible at the specified point.\n     *\n     * @description Notice that the pixelPoint argument requires x, y\n     * coordinates from pixel space.\n     *\n     * With this function, you can use the coordinates provided by mouse\n     * events to get information out of the marker component.\n     *\n     * If no interactive geometry of an interactive marker exist at the pixel\n     * point, null will be returned.\n     *\n     * @param {Array<number>} pixelPoint - Pixel coordinates on the viewer element.\n     * @returns {string} Id of the interactive marker closest to the camera. If no\n     * interactive marker exist at the pixel point, null will be returned.\n     *\n     * @example\n     * ```\n     * markerComponent.getMarkerIdAt([100, 100])\n     *     .then((markerId) => { console.log(markerId); });\n     * ```\n     */\n    public getMarkerIdAt(pixelPoint: number[]): when.Promise<string> {\n        return when.promise<string>((resolve: any, reject: any): void => {\n            this._container.renderService.renderCamera$\n                .first()\n                .map(\n                    (render: RenderCamera): string => {\n                        const viewport: number[] = this._viewportCoords\n                            .canvasToViewport(\n                                pixelPoint[0],\n                                pixelPoint[1],\n                                this._container.element);\n\n                        const id: string = this._markerScene.intersectObjects(viewport, render.perspective);\n\n                        return id;\n                    })\n                .subscribe(\n                    (id: string): void => {\n                        resolve(id);\n                    },\n                    (error: Error): void => {\n                        reject(error);\n                    });\n        });\n    }\n\n    /**\n     * Remove markers with the specified ids from the marker set.\n     *\n     * @param {Array<string>} markerIds - Ids for markers to remove.\n     *\n     * @example ```markerComponent.remove([\"id-1\", \"id-2\"]);```\n     */\n    public remove(markerIds: string[]): void {\n        this._markerSet.remove(markerIds);\n    }\n\n    /**\n     * Remove all markers from the marker set.\n     *\n     * @example ```markerComponent.removeAll();```\n     */\n    public removeAll(): void {\n        this._markerSet.removeAll();\n    }\n\n    protected _activate(): void {\n        const groundAltitude$: Observable<number> = this._navigator.stateService.currentState$\n            .map(\n                (frame: IFrame): number => {\n                    return frame.state.camera.position.z + this._relativeGroundAltitude;\n                })\n            .distinctUntilChanged(\n                (a1: number, a2: number): boolean => {\n                    return Math.abs(a1 - a2) < 0.01;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        const geoInitiated$: Observable<void> = Observable\n            .combineLatest(\n                groundAltitude$,\n                this._navigator.stateService.reference$)\n            .first()\n            .map((): void => { /* noop */ })\n            .publishReplay(1)\n            .refCount();\n\n        const clampedConfiguration$: Observable<IMarkerConfiguration> = this._configuration$\n            .map(\n                (configuration: IMarkerConfiguration): IMarkerConfiguration => {\n                    return { visibleBBoxSize: Math.max(1, Math.min(200, configuration.visibleBBoxSize)) };\n                });\n\n        const currentlatLon$: Observable<ILatLon> = this._navigator.stateService.currentNode$\n            .map((node: Node): ILatLon => { return node.latLon; })\n            .publishReplay(1)\n            .refCount();\n\n        const visibleBBox$: Observable<[ILatLon, ILatLon]> = Observable\n            .combineLatest(\n                clampedConfiguration$,\n                currentlatLon$)\n            .map(\n                ([configuration, latLon]: [IMarkerConfiguration, ILatLon]): [ILatLon, ILatLon] => {\n                    return this._graphCalculator\n                        .boundingBoxCorners(latLon, configuration.visibleBBoxSize / 2);\n                })\n            .publishReplay(1)\n            .refCount();\n\n        const visibleMarkers$: Observable<Marker[]> = Observable\n            .combineLatest(\n                Observable\n                    .of<MarkerSet>(this._markerSet)\n                    .concat(this._markerSet.changed$),\n                visibleBBox$)\n            .map(\n                ([set, bbox]: [MarkerSet, [ILatLon, ILatLon]]): Marker[] => {\n                    return set.search(bbox);\n                });\n\n        this._setChangedSubscription = geoInitiated$\n            .switchMap(\n                (): Observable<[Marker[], ILatLonAlt, number]> => {\n                    return visibleMarkers$\n                        .withLatestFrom(\n                            this._navigator.stateService.reference$,\n                            groundAltitude$);\n                })\n            .subscribe(\n                ([markers, reference, alt]: [Marker[], ILatLonAlt, number]): void => {\n                    const geoCoords: GeoCoords = this._geoCoords;\n                    const markerScene: MarkerScene = this._markerScene;\n                    const sceneMarkers: { [id: string]: Marker } = markerScene.markers;\n                    const markersToRemove: { [id: string]: Marker } = Object.assign({}, sceneMarkers);\n\n                    for (const marker of markers) {\n                         if (marker.id in sceneMarkers) {\n                            delete markersToRemove[marker.id];\n                        } else {\n                            const point3d: number[] = geoCoords\n                                .geodeticToEnu(\n                                    marker.latLon.lat,\n                                    marker.latLon.lon,\n                                    reference.alt + alt,\n                                    reference.lat,\n                                    reference.lon,\n                                    reference.alt);\n\n                            markerScene.add(marker, point3d);\n                        }\n                    }\n\n                    for (const id in markersToRemove) {\n                        if (!markersToRemove.hasOwnProperty(id)) {\n                            continue;\n                        }\n\n                        markerScene.remove(id);\n                    }\n                });\n\n        this._markersUpdatedSubscription = geoInitiated$\n            .switchMap(\n                (): Observable<[Marker[], [ILatLon, ILatLon], ILatLonAlt, number]> => {\n                    return this._markerSet.updated$\n                        .withLatestFrom(\n                            visibleBBox$,\n                            this._navigator.stateService.reference$,\n                            groundAltitude$);\n                })\n            .subscribe(\n                ([markers, [sw, ne], reference, alt]: [Marker[], [ILatLon, ILatLon], ILatLonAlt, number]): void => {\n                    const geoCoords: GeoCoords = this._geoCoords;\n                    const markerScene: MarkerScene = this._markerScene;\n\n                    for (const marker of markers) {\n                        const exists: boolean = markerScene.has(marker.id);\n                        const visible: boolean = marker.latLon.lat > sw.lat &&\n                            marker.latLon.lat < ne.lat &&\n                            marker.latLon.lon > sw.lon &&\n                            marker.latLon.lon < ne.lon;\n\n                        if (visible) {\n                            const point3d: number[] = geoCoords\n                                .geodeticToEnu(\n                                    marker.latLon.lat,\n                                    marker.latLon.lon,\n                                    reference.alt + alt,\n                                    reference.lat,\n                                    reference.lon,\n                                    reference.alt);\n\n                            markerScene.add(marker, point3d);\n                        } else if (!visible && exists) {\n                            markerScene.remove(marker.id);\n                        }\n                    }\n                });\n\n        this._referenceSubscription = this._navigator.stateService.reference$\n            .skip(1)\n            .withLatestFrom(groundAltitude$)\n            .subscribe(\n                ([reference, alt]: [ILatLonAlt, number]): void => {\n                    const geoCoords: GeoCoords = this._geoCoords;\n                    const markerScene: MarkerScene = this._markerScene;\n\n                    for (const marker of markerScene.getAll()) {\n                        const point3d: number[] = geoCoords\n                                .geodeticToEnu(\n                                    marker.latLon.lat,\n                                    marker.latLon.lon,\n                                    reference.alt + alt,\n                                    reference.lat,\n                                    reference.lon,\n                                    reference.alt);\n\n                        markerScene.update(marker.id, point3d);\n                    }\n                });\n\n        this._adjustHeightSubscription = groundAltitude$\n            .skip(1)\n            .withLatestFrom(\n                this._navigator.stateService.reference$,\n                currentlatLon$)\n            .subscribe(\n                ([alt, reference, latLon]: [number, ILatLonAlt, ILatLon]): void => {\n                    const geoCoords: GeoCoords = this._geoCoords;\n                    const markerScene: MarkerScene = this._markerScene;\n\n                    const position: number[] = geoCoords\n                        .geodeticToEnu(\n                            latLon.lat,\n                            latLon.lon,\n                            reference.alt + alt,\n                            reference.lat,\n                            reference.lon,\n                            reference.alt);\n\n                    for (const marker of markerScene.getAll()) {\n                        const point3d: number[] = geoCoords\n                                .geodeticToEnu(\n                                    marker.latLon.lat,\n                                    marker.latLon.lon,\n                                    reference.alt + alt,\n                                    reference.lat,\n                                    reference.lon,\n                                    reference.alt);\n\n                        const distanceX: number = point3d[0] - position[0];\n                        const distanceY: number = point3d[1] - position[1];\n\n                        const groundDistance: number = Math.sqrt(distanceX * distanceX + distanceY * distanceY);\n                        if (groundDistance > 50) {\n                            continue;\n                        }\n\n                        markerScene.lerpAltitude(marker.id, alt, Math.min(1, Math.max(0, 1.2 - 1.2 * groundDistance / 50)));\n                    }\n                });\n\n        this._renderSubscription = this._navigator.stateService.currentState$\n            .map(\n                (frame: IFrame): IGLRenderHash => {\n                    const scene: MarkerScene = this._markerScene;\n\n                    return {\n                        name: this._name,\n                        render: {\n                            frameId: frame.id,\n                            needsRender: scene.needsRender,\n                            render: scene.render.bind(scene),\n                            stage: GLRenderStage.Foreground,\n                        },\n                    };\n                })\n            .subscribe(this._container.glRenderer.render$);\n\n        const hoveredMarkerId$: Observable<string> = Observable\n            .combineLatest(\n                this._container.renderService.renderCamera$,\n                this._container.mouseService.mouseMove$)\n            .map(\n                ([render, event]: [RenderCamera, MouseEvent]): string => {\n                    const viewport: number[] = this._viewportCoords.canvasToViewport(\n                        event.clientX,\n                        event.clientY,\n                        this._container.element);\n\n                    const markerId: string = this._markerScene.intersectObjects(viewport, render.perspective);\n\n                    return markerId;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        const draggingStarted$: Observable<boolean> =\n             this._container.mouseService\n                .filtered$(this._name, this._container.mouseService.mouseDragStart$)\n                .map(\n                    (event: MouseEvent): boolean => {\n                        return true;\n                    });\n\n        const draggingStopped$: Observable<boolean> =\n             this._container.mouseService\n                .filtered$(this._name, this._container.mouseService.mouseDragEnd$)\n                .map(\n                    (event: MouseEvent): boolean => {\n                        return false;\n                    });\n\n        const dragging$: Observable<boolean> = Observable\n            .merge(\n                draggingStarted$,\n                draggingStopped$)\n            .startWith(false);\n\n        this._dragEventSubscription = draggingStarted$\n            .withLatestFrom(hoveredMarkerId$)\n            .merge(Observable\n                .combineLatest(\n                    draggingStopped$,\n                    Observable.of<string>(null)))\n            .startWith([false, null])\n            .pairwise()\n            .subscribe(\n                ([previous, current]: [boolean, string][]): void => {\n                    const dragging: boolean = current[0];\n                    const eventType: string = dragging ? MarkerComponent.dragstart : MarkerComponent.dragend;\n                    const id: string = dragging ? current[1] : previous[1];\n                    const marker: Marker = this._markerScene.get(id);\n                    const markerEvent: IMarkerEvent = { marker: marker, target: this, type: eventType };\n\n                    this.fire(eventType, markerEvent);\n                });\n\n        this._mouseClaimSubscription = Observable\n            .combineLatest(\n                this._container.mouseService.active$,\n                hoveredMarkerId$,\n                dragging$)\n            .map(\n                ([active, markerId, dragging]: [boolean, string, boolean]): boolean => {\n                    return (!active && markerId != null) || dragging;\n                })\n            .distinctUntilChanged()\n            .subscribe(\n                (hovered: boolean): void => {\n                    if (hovered) {\n                        this._container.mouseService.claimMouse(this._name, 1);\n                    } else {\n                        this._container.mouseService.unclaimMouse(this._name);\n                    }\n                });\n\n        const offset$: Observable<[Marker, number[], RenderCamera]> = this._container.mouseService\n            .filtered$(this._name, this._container.mouseService.mouseDragStart$)\n            .withLatestFrom(\n                hoveredMarkerId$,\n                this._container.renderService.renderCamera$)\n            .map(\n                ([e, id, r]: [MouseEvent, string, RenderCamera]): [Marker, number[], RenderCamera] => {\n                    const marker: Marker = this._markerScene.get(id);\n                    const [groundCanvasX, groundCanvasY]: number[] =\n                        this._viewportCoords.projectToCanvas(\n                            marker.geometry.position.toArray(),\n                            this._container.element,\n                            r.perspective);\n\n                    const offset: number[] = [e.clientX - groundCanvasX, e.clientY - groundCanvasY];\n\n                    return [marker, offset, r];\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._updateMarkerSubscription = this._container.mouseService\n            .filtered$(this._name, this._container.mouseService.mouseDrag$)\n            .withLatestFrom(\n                offset$,\n                this._navigator.stateService.reference$,\n                clampedConfiguration$)\n            .subscribe(\n                ([event, [marker, offset, render], reference, configuration]:\n                    [MouseEvent, [Marker, number[], RenderCamera], ILatLonAlt, IMarkerConfiguration]): void => {\n                    if (!this._markerScene.has(marker.id)) {\n                        return;\n                    }\n\n                    const groundX: number = event.clientX - offset[0];\n                    const groundY: number = event.clientY - offset[1];\n\n                    const [viewportX, viewportY]: number[] = this._viewportCoords\n                        .canvasToViewport(\n                            groundX,\n                            groundY,\n                            this._container.element);\n\n                    const direction: THREE.Vector3 = new THREE.Vector3(viewportX, viewportY, 1)\n                        .unproject(render.perspective)\n                        .sub(render.perspective.position)\n                        .normalize();\n\n                    const distance: number = Math.min(\n                        this._relativeGroundAltitude / direction.z,\n                        configuration.visibleBBoxSize / 2 - 0.1);\n\n                    if (distance < 0) {\n                        return;\n                    }\n\n                    const intersection: THREE.Vector3 = direction\n                        .clone()\n                        .multiplyScalar(distance)\n                        .add(render.perspective.position);\n\n                    intersection.z = render.perspective.position.z + this._relativeGroundAltitude;\n\n                    const [lat, lon]: number[] = this._geoCoords\n                        .enuToGeodetic(\n                            intersection.x,\n                            intersection.y,\n                            intersection.z,\n                            reference.lat,\n                            reference.lon,\n                            reference.alt);\n\n                    this._markerScene.update(marker.id, intersection.toArray(), { lat: lat, lon: lon });\n                    this._markerSet.update(marker);\n\n                    const markerEvent: IMarkerEvent = { marker: marker, target: this, type: MarkerComponent.changed };\n                    this.fire(MarkerComponent.changed, markerEvent);\n                });\n    }\n\n    protected _deactivate(): void {\n        this._adjustHeightSubscription.unsubscribe();\n        this._dragEventSubscription.unsubscribe();\n        this._markersUpdatedSubscription.unsubscribe();\n        this._mouseClaimSubscription.unsubscribe();\n        this._referenceSubscription.unsubscribe();\n        this._renderSubscription.unsubscribe();\n        this._setChangedSubscription.unsubscribe();\n        this._updateMarkerSubscription.unsubscribe();\n\n        this._markerScene.clear();\n    }\n\n    protected _getDefaultConfiguration(): IMarkerConfiguration {\n        return { visibleBBoxSize: 100 };\n    }\n}\n\nComponentService.register(MarkerComponent);\nexport default MarkerComponent;\n",
+    "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\nimport * as when from \"when\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport \"rxjs/add/observable/combineLatest\";\n\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/map\";\n\nimport {ILatLon} from \"../../API\";\nimport {\n    IMarkerConfiguration,\n    IMarkerEvent,\n    Marker,\n    MarkerScene,\n    MarkerSet,\n    ComponentService,\n    Component,\n} from \"../../Component\";\nimport {IFrame} from \"../../State\";\nimport {\n    Container,\n    Navigator,\n} from \"../../Viewer\";\nimport {\n    IGLRenderHash,\n    GLRenderStage,\n    RenderCamera,\n} from \"../../Render\";\nimport {\n    GraphCalculator,\n    Node,\n} from \"../../Graph\";\nimport {\n    GeoCoords,\n    ILatLonAlt,\n    ViewportCoords,\n} from \"../../Geo\";\n\n\n/**\n * @class MarkerComponent\n *\n * @classdesc Component for showing and editing 3D marker objects.\n *\n * The `add` method is used for adding new markers or replacing\n * markers already in the set.\n *\n * If a marker already in the set has the same\n * id as one of the markers added, the old marker will be removed\n * the added marker will take its place.\n *\n * It is not possible to update markers in the set by updating any properties\n * directly on the marker object. Markers need to be replaced by\n * re-adding them for updates to geographic position or configuration\n * to be reflected.\n *\n * Markers added to the marker component can be either interactive\n * or non-interactive. Different marker types define their behavior.\n * Markers with interaction support can be configured with options\n * to respond to dragging inside the viewer and be detected when\n * retrieving markers from pixel points with the `getMarkerIdAt` method.\n *\n * To retrive and use the marker component\n *\n * @example\n * ```\n * var markerComponent = viewer.getComponent(\"marker\");\n * ```\n */\nexport class MarkerComponent extends Component<IMarkerConfiguration> {\n    public static componentName: string = \"marker\";\n\n    /**\n     * Fired when the position of a marker is changed.\n     * @event\n     * @type {IMarkerEvent} markerEvent - Marker event data.\n     * @example\n     * ```\n     * markerComponent.on(\"changed\", function(e) {\n     *     console.log(e.marker.id, e.marker.latLon);\n     * });\n     * ```\n     */\n    public static changed: string = \"changed\";\n\n    /**\n     * Fired when a marker drag interaction starts.\n     * @event\n     * @type {IMarkerEvent} markerEvent - Marker event data.\n     * @example\n     * ```\n     * markerComponent.on(\"dragstart\", function(e) {\n     *     console.log(e.marker.id, e.marker.latLon);\n     * });\n     * ```\n     */\n    public static dragstart: string = \"dragstart\";\n\n    /**\n     * Fired when a marker drag interaction ends.\n     * @event\n     * @type {IMarkerEvent} markerEvent - Marker event data.\n     * @example\n     * ```\n     * markerComponent.on(\"dragend\", function(e) {\n     *     console.log(e.marker.id, e.marker.latLon);\n     * });\n     * ```\n     */\n    public static dragend: string = \"dragend\";\n\n    private _relativeGroundAltitude: number;\n\n    private _geoCoords: GeoCoords;\n    private _graphCalculator: GraphCalculator;\n    private _markerScene: MarkerScene;\n    private _markerSet: MarkerSet;\n    private _viewportCoords: ViewportCoords;\n\n    private _adjustHeightSubscription: Subscription;\n    private _dragEventSubscription: Subscription;\n    private _markersUpdatedSubscription: Subscription;\n    private _mouseClaimSubscription: Subscription;\n    private _referenceSubscription: Subscription;\n    private _renderSubscription: Subscription;\n    private _setChangedSubscription: Subscription;\n    private _updateMarkerSubscription: Subscription;\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n\n        this._relativeGroundAltitude = -2;\n\n        this._geoCoords = new GeoCoords();\n        this._graphCalculator = new GraphCalculator();\n        this._markerScene = new MarkerScene();\n        this._markerSet = new MarkerSet();\n        this._viewportCoords = new ViewportCoords();\n    }\n\n    /**\n     * Add markers to the marker set or replace markers in the marker set.\n     *\n     * @description If a marker already in the set has the same\n     * id as one of the markers added, the old marker will be removed\n     * the added marker will take its place.\n     *\n     * Any marker inside the visible bounding bbox\n     * will be initialized and placed in the viewer.\n     *\n     * @param {Array<Marker>} markers - Markers to add.\n     *\n     * @example ```markerComponent.add([marker1, marker2]);```\n     */\n    public add(markers: Marker[]): void {\n        this._markerSet.add(markers);\n    }\n\n    /**\n     * Check if a marker exist in the marker set.\n     *\n     * @param {string} markerId - Id of the marker.\n     *\n     * @example ```var markerExists = markerComponent.has(\"markerId\");```\n     */\n    public has(markerId: string): boolean {\n        return this._markerSet.has(markerId);\n    }\n\n    /**\n     * Returns the marker in the marker set with the specified id, or\n     * undefined if the id matches no marker.\n     *\n     * @param {string} markerId - Id of the marker.\n     *\n     * @example ```var marker = markerComponent.get(\"markerId\");```\n     *\n     */\n    public get(markerId: string): Marker {\n        return this._markerSet.get(markerId);\n    }\n\n\n    /**\n     * Returns an array of all markers.\n     *\n     * @example ```var markers = markerComponent.getAll();```\n     */\n    public getAll(): Marker[] {\n        return this._markerSet.getAll();\n    }\n\n    /**\n     * Returns the id of the interactive marker closest to the current camera\n     * position at the specified point.\n     *\n     * @description Notice that the pixelPoint argument requires x, y\n     * coordinates from pixel space.\n     *\n     * With this function, you can use the coordinates provided by mouse\n     * events to get information out of the marker component.\n     *\n     * If no interactive geometry of an interactive marker exist at the pixel\n     * point, `null` will be returned.\n     *\n     * @param {Array<number>} pixelPoint - Pixel coordinates on the viewer element.\n     * @returns {string} Id of the interactive marker closest to the camera. If no\n     * interactive marker exist at the pixel point, `null` will be returned.\n     *\n     * @example\n     * ```\n     * markerComponent.getMarkerIdAt([100, 100])\n     *     .then((markerId) => { console.log(markerId); });\n     * ```\n     */\n    public getMarkerIdAt(pixelPoint: number[]): when.Promise<string> {\n        return when.promise<string>((resolve: any, reject: any): void => {\n            this._container.renderService.renderCamera$\n                .first()\n                .map(\n                    (render: RenderCamera): string => {\n                        const viewport: number[] = this._viewportCoords\n                            .canvasToViewport(\n                                pixelPoint[0],\n                                pixelPoint[1],\n                                this._container.element);\n\n                        const id: string = this._markerScene.intersectObjects(viewport, render.perspective);\n\n                        return id;\n                    })\n                .subscribe(\n                    (id: string): void => {\n                        resolve(id);\n                    },\n                    (error: Error): void => {\n                        reject(error);\n                    });\n        });\n    }\n\n    /**\n     * Remove markers with the specified ids from the marker set.\n     *\n     * @param {Array<string>} markerIds - Ids for markers to remove.\n     *\n     * @example ```markerComponent.remove([\"id-1\", \"id-2\"]);```\n     */\n    public remove(markerIds: string[]): void {\n        this._markerSet.remove(markerIds);\n    }\n\n    /**\n     * Remove all markers from the marker set.\n     *\n     * @example ```markerComponent.removeAll();```\n     */\n    public removeAll(): void {\n        this._markerSet.removeAll();\n    }\n\n    protected _activate(): void {\n        const groundAltitude$: Observable<number> = this._navigator.stateService.currentState$\n            .map(\n                (frame: IFrame): number => {\n                    return frame.state.camera.position.z + this._relativeGroundAltitude;\n                })\n            .distinctUntilChanged(\n                (a1: number, a2: number): boolean => {\n                    return Math.abs(a1 - a2) < 0.01;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        const geoInitiated$: Observable<void> = Observable\n            .combineLatest(\n                groundAltitude$,\n                this._navigator.stateService.reference$)\n            .first()\n            .map((): void => { /* noop */ })\n            .publishReplay(1)\n            .refCount();\n\n        const clampedConfiguration$: Observable<IMarkerConfiguration> = this._configuration$\n            .map(\n                (configuration: IMarkerConfiguration): IMarkerConfiguration => {\n                    return { visibleBBoxSize: Math.max(1, Math.min(200, configuration.visibleBBoxSize)) };\n                });\n\n        const currentlatLon$: Observable<ILatLon> = this._navigator.stateService.currentNode$\n            .map((node: Node): ILatLon => { return node.latLon; })\n            .publishReplay(1)\n            .refCount();\n\n        const visibleBBox$: Observable<[ILatLon, ILatLon]> = Observable\n            .combineLatest(\n                clampedConfiguration$,\n                currentlatLon$)\n            .map(\n                ([configuration, latLon]: [IMarkerConfiguration, ILatLon]): [ILatLon, ILatLon] => {\n                    return this._graphCalculator\n                        .boundingBoxCorners(latLon, configuration.visibleBBoxSize / 2);\n                })\n            .publishReplay(1)\n            .refCount();\n\n        const visibleMarkers$: Observable<Marker[]> = Observable\n            .combineLatest(\n                Observable\n                    .of<MarkerSet>(this._markerSet)\n                    .concat(this._markerSet.changed$),\n                visibleBBox$)\n            .map(\n                ([set, bbox]: [MarkerSet, [ILatLon, ILatLon]]): Marker[] => {\n                    return set.search(bbox);\n                });\n\n        this._setChangedSubscription = geoInitiated$\n            .switchMap(\n                (): Observable<[Marker[], ILatLonAlt, number]> => {\n                    return visibleMarkers$\n                        .withLatestFrom(\n                            this._navigator.stateService.reference$,\n                            groundAltitude$);\n                })\n            .subscribe(\n                ([markers, reference, alt]: [Marker[], ILatLonAlt, number]): void => {\n                    const geoCoords: GeoCoords = this._geoCoords;\n                    const markerScene: MarkerScene = this._markerScene;\n                    const sceneMarkers: { [id: string]: Marker } = markerScene.markers;\n                    const markersToRemove: { [id: string]: Marker } = Object.assign({}, sceneMarkers);\n\n                    for (const marker of markers) {\n                         if (marker.id in sceneMarkers) {\n                            delete markersToRemove[marker.id];\n                        } else {\n                            const point3d: number[] = geoCoords\n                                .geodeticToEnu(\n                                    marker.latLon.lat,\n                                    marker.latLon.lon,\n                                    reference.alt + alt,\n                                    reference.lat,\n                                    reference.lon,\n                                    reference.alt);\n\n                            markerScene.add(marker, point3d);\n                        }\n                    }\n\n                    for (const id in markersToRemove) {\n                        if (!markersToRemove.hasOwnProperty(id)) {\n                            continue;\n                        }\n\n                        markerScene.remove(id);\n                    }\n                });\n\n        this._markersUpdatedSubscription = geoInitiated$\n            .switchMap(\n                (): Observable<[Marker[], [ILatLon, ILatLon], ILatLonAlt, number]> => {\n                    return this._markerSet.updated$\n                        .withLatestFrom(\n                            visibleBBox$,\n                            this._navigator.stateService.reference$,\n                            groundAltitude$);\n                })\n            .subscribe(\n                ([markers, [sw, ne], reference, alt]: [Marker[], [ILatLon, ILatLon], ILatLonAlt, number]): void => {\n                    const geoCoords: GeoCoords = this._geoCoords;\n                    const markerScene: MarkerScene = this._markerScene;\n\n                    for (const marker of markers) {\n                        const exists: boolean = markerScene.has(marker.id);\n                        const visible: boolean = marker.latLon.lat > sw.lat &&\n                            marker.latLon.lat < ne.lat &&\n                            marker.latLon.lon > sw.lon &&\n                            marker.latLon.lon < ne.lon;\n\n                        if (visible) {\n                            const point3d: number[] = geoCoords\n                                .geodeticToEnu(\n                                    marker.latLon.lat,\n                                    marker.latLon.lon,\n                                    reference.alt + alt,\n                                    reference.lat,\n                                    reference.lon,\n                                    reference.alt);\n\n                            markerScene.add(marker, point3d);\n                        } else if (!visible && exists) {\n                            markerScene.remove(marker.id);\n                        }\n                    }\n                });\n\n        this._referenceSubscription = this._navigator.stateService.reference$\n            .skip(1)\n            .withLatestFrom(groundAltitude$)\n            .subscribe(\n                ([reference, alt]: [ILatLonAlt, number]): void => {\n                    const geoCoords: GeoCoords = this._geoCoords;\n                    const markerScene: MarkerScene = this._markerScene;\n\n                    for (const marker of markerScene.getAll()) {\n                        const point3d: number[] = geoCoords\n                                .geodeticToEnu(\n                                    marker.latLon.lat,\n                                    marker.latLon.lon,\n                                    reference.alt + alt,\n                                    reference.lat,\n                                    reference.lon,\n                                    reference.alt);\n\n                        markerScene.update(marker.id, point3d);\n                    }\n                });\n\n        this._adjustHeightSubscription = groundAltitude$\n            .skip(1)\n            .withLatestFrom(\n                this._navigator.stateService.reference$,\n                currentlatLon$)\n            .subscribe(\n                ([alt, reference, latLon]: [number, ILatLonAlt, ILatLon]): void => {\n                    const geoCoords: GeoCoords = this._geoCoords;\n                    const markerScene: MarkerScene = this._markerScene;\n\n                    const position: number[] = geoCoords\n                        .geodeticToEnu(\n                            latLon.lat,\n                            latLon.lon,\n                            reference.alt + alt,\n                            reference.lat,\n                            reference.lon,\n                            reference.alt);\n\n                    for (const marker of markerScene.getAll()) {\n                        const point3d: number[] = geoCoords\n                                .geodeticToEnu(\n                                    marker.latLon.lat,\n                                    marker.latLon.lon,\n                                    reference.alt + alt,\n                                    reference.lat,\n                                    reference.lon,\n                                    reference.alt);\n\n                        const distanceX: number = point3d[0] - position[0];\n                        const distanceY: number = point3d[1] - position[1];\n\n                        const groundDistance: number = Math.sqrt(distanceX * distanceX + distanceY * distanceY);\n                        if (groundDistance > 50) {\n                            continue;\n                        }\n\n                        markerScene.lerpAltitude(marker.id, alt, Math.min(1, Math.max(0, 1.2 - 1.2 * groundDistance / 50)));\n                    }\n                });\n\n        this._renderSubscription = this._navigator.stateService.currentState$\n            .map(\n                (frame: IFrame): IGLRenderHash => {\n                    const scene: MarkerScene = this._markerScene;\n\n                    return {\n                        name: this._name,\n                        render: {\n                            frameId: frame.id,\n                            needsRender: scene.needsRender,\n                            render: scene.render.bind(scene),\n                            stage: GLRenderStage.Foreground,\n                        },\n                    };\n                })\n            .subscribe(this._container.glRenderer.render$);\n\n        const hoveredMarkerId$: Observable<string> = Observable\n            .combineLatest(\n                this._container.renderService.renderCamera$,\n                this._container.mouseService.mouseMove$)\n            .map(\n                ([render, event]: [RenderCamera, MouseEvent]): string => {\n                    const element: HTMLElement = this._container.element;\n                    const [canvasX, canvasY]: number[] = this._viewportCoords.canvasPosition(event, element);\n                    const viewport: number[] = this._viewportCoords.canvasToViewport(\n                        canvasX,\n                        canvasY,\n                        element);\n\n                    const markerId: string = this._markerScene.intersectObjects(viewport, render.perspective);\n\n                    return markerId;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        const draggingStarted$: Observable<boolean> =\n             this._container.mouseService\n                .filtered$(this._name, this._container.mouseService.mouseDragStart$)\n                .map(\n                    (event: MouseEvent): boolean => {\n                        return true;\n                    });\n\n        const draggingStopped$: Observable<boolean> =\n             this._container.mouseService\n                .filtered$(this._name, this._container.mouseService.mouseDragEnd$)\n                .map(\n                    (event: MouseEvent): boolean => {\n                        return false;\n                    });\n\n        const dragging$: Observable<boolean> = Observable\n            .merge(\n                draggingStarted$,\n                draggingStopped$)\n            .startWith(false);\n\n        this._dragEventSubscription = draggingStarted$\n            .withLatestFrom(hoveredMarkerId$)\n            .merge(Observable\n                .combineLatest(\n                    draggingStopped$,\n                    Observable.of<string>(null)))\n            .startWith([false, null])\n            .pairwise()\n            .subscribe(\n                ([previous, current]: [boolean, string][]): void => {\n                    const dragging: boolean = current[0];\n                    const eventType: string = dragging ? MarkerComponent.dragstart : MarkerComponent.dragend;\n                    const id: string = dragging ? current[1] : previous[1];\n                    const marker: Marker = this._markerScene.get(id);\n                    const markerEvent: IMarkerEvent = { marker: marker, target: this, type: eventType };\n\n                    this.fire(eventType, markerEvent);\n                });\n\n        this._mouseClaimSubscription = Observable\n            .combineLatest(\n                this._container.mouseService.active$,\n                hoveredMarkerId$,\n                dragging$)\n            .map(\n                ([active, markerId, dragging]: [boolean, string, boolean]): boolean => {\n                    return (!active && markerId != null) || dragging;\n                })\n            .distinctUntilChanged()\n            .subscribe(\n                (hovered: boolean): void => {\n                    if (hovered) {\n                        this._container.mouseService.claimMouse(this._name, 1);\n                    } else {\n                        this._container.mouseService.unclaimMouse(this._name);\n                    }\n                });\n\n        const offset$: Observable<[Marker, number[], RenderCamera]> = this._container.mouseService\n            .filtered$(this._name, this._container.mouseService.mouseDragStart$)\n            .withLatestFrom(\n                hoveredMarkerId$,\n                this._container.renderService.renderCamera$)\n            .map(\n                ([e, id, r]: [MouseEvent, string, RenderCamera]): [Marker, number[], RenderCamera] => {\n                    const marker: Marker = this._markerScene.get(id);\n                    const element: HTMLElement = this._container.element;\n\n                    const [groundCanvasX, groundCanvasY]: number[] =\n                        this._viewportCoords.projectToCanvas(\n                            marker.geometry.position.toArray(),\n                            element,\n                            r.perspective);\n\n                    const [canvasX, canvasY]: number[] = this._viewportCoords.canvasPosition(e, element);\n\n                    const offset: number[] = [canvasX - groundCanvasX, canvasY - groundCanvasY];\n\n                    return [marker, offset, r];\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._updateMarkerSubscription = this._container.mouseService\n            .filtered$(this._name, this._container.mouseService.mouseDrag$)\n            .withLatestFrom(\n                offset$,\n                this._navigator.stateService.reference$,\n                clampedConfiguration$)\n            .subscribe(\n                ([event, [marker, offset, render], reference, configuration]:\n                    [MouseEvent, [Marker, number[], RenderCamera], ILatLonAlt, IMarkerConfiguration]): void => {\n                    if (!this._markerScene.has(marker.id)) {\n                        return;\n                    }\n\n                    const element: HTMLElement = this._container.element;\n                    const [canvasX, canvasY]: number[] = this._viewportCoords.canvasPosition(event, element);\n\n                    const groundX: number = canvasX - offset[0];\n                    const groundY: number = canvasY - offset[1];\n\n                    const [viewportX, viewportY]: number[] = this._viewportCoords\n                        .canvasToViewport(\n                            groundX,\n                            groundY,\n                            element);\n\n                    const direction: THREE.Vector3 = new THREE.Vector3(viewportX, viewportY, 1)\n                        .unproject(render.perspective)\n                        .sub(render.perspective.position)\n                        .normalize();\n\n                    const distance: number = Math.min(\n                        this._relativeGroundAltitude / direction.z,\n                        configuration.visibleBBoxSize / 2 - 0.1);\n\n                    if (distance < 0) {\n                        return;\n                    }\n\n                    const intersection: THREE.Vector3 = direction\n                        .clone()\n                        .multiplyScalar(distance)\n                        .add(render.perspective.position);\n\n                    intersection.z = render.perspective.position.z + this._relativeGroundAltitude;\n\n                    const [lat, lon]: number[] = this._geoCoords\n                        .enuToGeodetic(\n                            intersection.x,\n                            intersection.y,\n                            intersection.z,\n                            reference.lat,\n                            reference.lon,\n                            reference.alt);\n\n                    this._markerScene.update(marker.id, intersection.toArray(), { lat: lat, lon: lon });\n                    this._markerSet.update(marker);\n\n                    const markerEvent: IMarkerEvent = { marker: marker, target: this, type: MarkerComponent.changed };\n                    this.fire(MarkerComponent.changed, markerEvent);\n                });\n    }\n\n    protected _deactivate(): void {\n        this._adjustHeightSubscription.unsubscribe();\n        this._dragEventSubscription.unsubscribe();\n        this._markersUpdatedSubscription.unsubscribe();\n        this._mouseClaimSubscription.unsubscribe();\n        this._referenceSubscription.unsubscribe();\n        this._renderSubscription.unsubscribe();\n        this._setChangedSubscription.unsubscribe();\n        this._updateMarkerSubscription.unsubscribe();\n\n        this._markerScene.clear();\n    }\n\n    protected _getDefaultConfiguration(): IMarkerConfiguration {\n        return { visibleBBoxSize: 100 };\n    }\n}\n\nComponentService.register(MarkerComponent);\nexport default MarkerComponent;\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {ILatLon} from \"../../API\";\nimport {Marker} from \"../../Component\";\n\nexport class MarkerScene {\n    private _needsRender: boolean;\n    private _interactiveObjects: THREE.Object3D[];\n    private _markers: { [key: string]: Marker };\n    private _objectMarkers: { [id: string]: string };\n    private _raycaster: THREE.Raycaster;\n    private _scene: THREE.Scene;\n\n    constructor(scene?: THREE.Scene, raycaster?: THREE.Raycaster) {\n        this._needsRender = false;\n        this._interactiveObjects = [];\n        this._markers = {};\n        this._objectMarkers = {};\n        this._raycaster = !!raycaster ? raycaster : new THREE.Raycaster();\n        this._scene = !!scene ? scene : new THREE.Scene();\n    }\n\n    public get markers(): { [key: string]: Marker } {\n        return this._markers;\n    }\n\n    public get needsRender(): boolean {\n        return this._needsRender;\n    }\n\n    public add(marker: Marker, position: number[]): void {\n        if (marker.id in this._markers) {\n            this._dispose(marker.id);\n        }\n\n        marker.createGeometry(position);\n        this._scene.add(marker.geometry);\n        this._markers[marker.id] = marker;\n        for (let interactiveObject of marker.getInteractiveObjects()) {\n            this._interactiveObjects.push(interactiveObject);\n            this._objectMarkers[interactiveObject.uuid] = marker.id;\n        }\n\n        this._needsRender = true;\n    }\n\n    public clear(): void {\n        for (const id in this._markers) {\n            if (!this._markers.hasOwnProperty) {\n                continue;\n            }\n\n            this._dispose(id);\n        }\n\n        this._needsRender = true;\n    }\n\n    public get(id: string): Marker {\n        return this._markers[id];\n    }\n\n    public getAll(): Marker[] {\n        return Object\n            .keys(this._markers)\n            .map((id: string): Marker => { return this._markers[id]; });\n    }\n\n    public has(id: string): boolean {\n        return id in this._markers;\n    }\n\n    public intersectObjects([viewportX, viewportY]: number[], camera: THREE.Camera): string {\n        this._raycaster.setFromCamera(new THREE.Vector2(viewportX, viewportY), camera);\n\n        const intersects: THREE.Intersection[] = this._raycaster.intersectObjects(this._interactiveObjects);\n        for (const intersect of intersects) {\n            if (intersect.object.uuid in this._objectMarkers) {\n                return this._objectMarkers[intersect.object.uuid];\n            }\n        }\n\n        return null;\n    }\n\n    public lerpAltitude(id: string, alt: number, alpha: number): void {\n        if (!(id in this._markers)) {\n            return;\n        }\n\n        this._markers[id].lerpAltitude(alt, alpha);\n\n        this._needsRender = true;\n    }\n\n    public remove(id: string): void {\n        if (!(id in this._markers)) {\n            return;\n        }\n\n        this._dispose(id);\n\n        this._needsRender = true;\n    }\n\n    public render(\n        perspectiveCamera: THREE.PerspectiveCamera,\n        renderer: THREE.WebGLRenderer): void {\n\n        renderer.render(this._scene, perspectiveCamera);\n\n        this._needsRender = false;\n    }\n\n    public update(id: string, position: number[], latLon?: ILatLon): void {\n        if (!(id in this._markers)) {\n            return;\n        }\n\n        const marker: Marker = this._markers[id];\n        marker.updatePosition(position, latLon);\n\n        this._needsRender = true;\n    }\n\n    private _dispose(id: string): void {\n        const marker: Marker = this._markers[id];\n        this._scene.remove(marker.geometry);\n        for (let interactiveObject of marker.getInteractiveObjects()) {\n            const index: number = this._interactiveObjects.indexOf(interactiveObject);\n            if (index !== -1) {\n                this._interactiveObjects.splice(index, 1);\n            } else {\n                console.warn(`Object does not exist (${interactiveObject.id}) for ${id}`);\n            }\n\n            delete this._objectMarkers[interactiveObject.uuid];\n        }\n\n        marker.disposeGeometry();\n\n        delete this._markers[id];\n    }\n}\n\nexport default MarkerScene;\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as rbush from \"rbush\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\n\nimport {ILatLon} from \"../../API\";\nimport {Marker} from \"../../Component\";\n\ntype MarkerIndexItem = {\n    lat: number;\n    lon: number;\n    marker: Marker;\n};\n\ntype MarkerIndex = rbush.RBush<MarkerIndexItem>;\n\nexport class MarkerSet {\n    private _hash: { [id: string]: MarkerIndexItem };\n    private _index: MarkerIndex;\n\n    private _indexChanged$: Subject<MarkerSet>;\n    private _updated$: Subject<Marker[]>;\n\n    constructor() {\n        this._hash = {};\n        this._index = rbush<MarkerIndexItem>(16, [\".lon\", \".lat\", \".lon\", \".lat\"]);\n\n        this._indexChanged$ = new Subject<MarkerSet>();\n        this._updated$ = new Subject<Marker[]>();\n    }\n\n    public get changed$(): Observable<MarkerSet> {\n        return this._indexChanged$;\n    }\n\n    public get updated$(): Observable<Marker[]> {\n        return this._updated$;\n    }\n\n    public add(markers: Marker[]): void {\n        const updated: Marker[] = [];\n        const hash: { [id: string]: MarkerIndexItem } = this._hash;\n        const index: MarkerIndex = this._index;\n\n        for (const marker of markers) {\n            const id: string = marker.id;\n\n            if (id in hash) {\n                index.remove(hash[id]);\n                updated.push(marker);\n            }\n\n            const item: MarkerIndexItem = {\n                lat: marker.latLon.lat,\n                lon: marker.latLon.lon,\n                marker: marker,\n            };\n\n            hash[id] = item;\n            index.insert(item);\n        }\n\n        if (updated.length > 0) {\n            this._updated$.next(updated);\n        }\n\n        if (markers.length > updated.length) {\n            this._indexChanged$.next(this);\n        }\n    }\n\n    public has(id: string): boolean {\n        return id in this._hash;\n    }\n\n    public get(id: string): Marker {\n        return this.has(id) ? this._hash[id].marker : undefined;\n    }\n\n    public getAll(): Marker[] {\n        return this._index\n            .all()\n            .map(\n                (indexItem: MarkerIndexItem): Marker => {\n                    return indexItem.marker;\n                });\n    }\n\n    public remove(ids: string[]): void {\n        const hash: { [id: string]: MarkerIndexItem } = this._hash;\n        const index: MarkerIndex = this._index;\n\n        let changed: boolean = false;\n        for (const id of ids) {\n            if (!(id in hash)) {\n                continue;\n            }\n\n            const item: MarkerIndexItem = hash[id];\n            index.remove(item);\n            delete hash[id];\n            changed = true;\n        }\n\n        if (changed) {\n            this._indexChanged$.next(this);\n        }\n    }\n\n    public removeAll(): void {\n        this._hash = {};\n        this._index.clear();\n\n        this._indexChanged$.next(this);\n    }\n\n    public search([sw, ne]: [ILatLon, ILatLon]): Marker[] {\n        return this._index\n            .search({ maxX: ne.lon, maxY: ne.lat, minX: sw.lon, minY: sw.lat })\n            .map(\n                (indexItem: MarkerIndexItem): Marker => {\n                    return indexItem.marker;\n                });\n    }\n\n    public update(marker: Marker): void {\n        const hash: { [id: string]: MarkerIndexItem } = this._hash;\n        const index: MarkerIndex = this._index;\n        const id: string = marker.id;\n\n        if (!(id in hash)) {\n            return;\n        }\n\n        index.remove(hash[id]);\n\n        const item: MarkerIndexItem = {\n            lat: marker.latLon.lat,\n            lon: marker.latLon.lon,\n            marker: marker,\n        };\n\n        hash[id] = item;\n        index.insert(item);\n    }\n}\n\nexport default MarkerSet;\n",
     "/// <reference path=\"../../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {ILatLon} from \"../../../API\";\nimport {\n    ICircleMarkerOptions,\n    Marker,\n} from \"../../../Component\";\n\n/**\n * @class CircleMarker\n *\n * @classdesc Non-interactive marker with a flat circle shape. The circle\n * marker can not be configured to be interactive.\n *\n * Circle marker properties can not be updated after creation.\n *\n * To create and add one `CircleMarker` with default configuration\n * and one with configuration use\n *\n * @example\n * ```\n * var defaultMarker = new Mapillary.MarkerComponent.CircleMarker(\n *     \"id-1\",\n *     { lat: 0, lon: 0, });\n *\n * var configuredMarker = new Mapillary.MarkerComponent.CircleMarker(\n *     \"id-2\",\n *     { lat: 0, lon: 0, },\n *     {\n *         color: \"#0Ff\",\n *         opacity: 0.3,\n *         radius: 0.7,\n *     });\n *\n * markerComponent.add([defaultMarker, configuredMarker]);\n * ```\n */\nexport class CircleMarker extends Marker {\n    private _color: number | string;\n    private _opacity: number;\n    private _radius: number;\n\n    constructor(id: string, latLon: ILatLon, options?: ICircleMarkerOptions) {\n        super(id, latLon);\n\n        options = !!options ? options : {};\n        this._color = options.color != null ? options.color : 0xffffff;\n        this._opacity = options.opacity != null ? options.opacity : 0.4;\n        this._radius = options.radius != null ? options.radius : 1;\n    }\n\n    protected _createGeometry(position: number[]): void {\n        const circle: THREE.Mesh = new THREE.Mesh(\n            new THREE.CircleGeometry(this._radius, 16),\n            new THREE.MeshBasicMaterial({\n                color: this._color,\n                opacity: this._opacity,\n                transparent: true,\n            }));\n\n        circle.up.fromArray([0, 0, 1]);\n        circle.renderOrder = -1;\n\n        const group: THREE.Object3D = new THREE.Object3D();\n        group.add(circle);\n        group.position.fromArray(position);\n\n        this._geometry = group;\n    }\n\n    protected _disposeGeometry(): void {\n        for (let mesh of <THREE.Mesh[]>this._geometry.children) {\n            mesh.geometry.dispose();\n            mesh.material.dispose();\n        }\n    }\n\n    protected _getInteractiveObjects(): THREE.Object3D[] {\n        return [];\n    }\n}\n\nexport default CircleMarker;\n",
     "/// <reference path=\"../../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {ILatLon} from \"../../../API\";\n\n/**\n * @class Marker\n *\n * @classdesc Represents an abstract marker class that should be extended\n * by marker implementations used in the marker component.\n */\nexport abstract class Marker {\n    protected _id: string;\n    protected _geometry: THREE.Object3D;\n    protected _latLon: ILatLon;\n\n    constructor(id: string, latLon: ILatLon) {\n        this._id = id;\n        this._latLon = latLon;\n    }\n\n    /**\n     * Get id.\n     * @returns {string} The id of the marker.\n     */\n    public get id(): string {\n        return this._id;\n    }\n\n    public get geometry(): THREE.Object3D {\n        return this._geometry;\n    }\n\n    /**\n     * Get lat lon.\n     * @returns {ILatLon} The geographic coordinates of the marker.\n     */\n    public get latLon(): ILatLon {\n        return this._latLon;\n    }\n\n    public createGeometry(position: number[]): void {\n        if (!!this._geometry) {\n            return;\n        }\n\n        this._createGeometry(position);\n\n        // update matrix world if raycasting occurs before first render\n        this._geometry.updateMatrixWorld(true);\n    }\n\n    public disposeGeometry(): void {\n        if (!this._geometry) {\n            return;\n        }\n\n        this._disposeGeometry();\n\n        this._geometry = undefined;\n    }\n\n    public getInteractiveObjects(): THREE.Object3D[] {\n        if (!this._geometry) {\n            return [];\n        }\n\n        return this._getInteractiveObjects();\n    }\n\n    public lerpAltitude(alt: number, alpha: number): void {\n        if (!this._geometry) {\n            return;\n        }\n\n        this._geometry.position.z = (1 - alpha) * this._geometry.position.z + alpha * alt;\n    }\n\n    public updatePosition(position: number[], latLon?: ILatLon): void {\n        if (!!latLon) {\n            this._latLon.lat = latLon.lat;\n            this._latLon.lon = latLon.lon;\n        }\n\n        if (!this._geometry) {\n            return;\n        }\n\n        this._geometry.position.fromArray(position);\n        this._geometry.updateMatrixWorld(true);\n    }\n\n    protected abstract _createGeometry(position: number[]): void;\n\n    protected abstract _disposeGeometry(): void;\n\n    protected abstract _getInteractiveObjects(): THREE.Object3D[];\n}\n\nexport default Marker;\n",
     "/// <reference path=\"../../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {ILatLon} from \"../../../API\";\nimport {\n    ISimpleMarkerOptions,\n    Marker,\n} from \"../../../Component\";\n\n/**\n * @class SimpleMarker\n *\n * @classdesc Interactive marker with ice cream shape. The sphere\n * inside the ice cream can be configured to be interactive.\n *\n * Simple marker properties can not be updated after creation.\n *\n * To create and add one `SimpleMarker` with default configuration\n * (non-interactive) and one interactive with configuration use\n *\n * @example\n * ```\n * var defaultMarker = new Mapillary.MarkerComponent.SimpleMarker(\n *     \"id-1\",\n *     { lat: 0, lon: 0, });\n *\n * var interactiveMarker = new Mapillary.MarkerComponent.SimpleMarker(\n *     \"id-2\",\n *     { lat: 0, lon: 0, },\n *     {\n *         ballColor: \"#00f\",\n *         ballOpacity: 0.5,\n *         color: \"#00f\",\n *         interactive: true,\n *         opacity: 0.3,\n *         radius: 0.7,\n *     });\n *\n * markerComponent.add([defaultMarker, interactiveMarker]);\n * ```\n */\nexport class SimpleMarker extends Marker {\n    private _ballColor: number | string;\n    private _ballOpacity: number;\n    private _circleToRayAngle: number;\n    private _color: number | string;\n    private _interactive: boolean;\n    private _opacity: number;\n    private _radius: number;\n\n    constructor(id: string, latLon: ILatLon, options?: ISimpleMarkerOptions) {\n        super(id, latLon);\n\n        options = !!options ? options : {};\n        this._ballColor = options.ballColor != null ? options.ballColor : 0xff0000;\n        this._ballOpacity = options.ballOpacity != null ? options.ballOpacity : 0.8;\n        this._circleToRayAngle = 2;\n        this._color = options.color != null ? options.color : 0xff0000;\n        this._interactive = !!options.interactive;\n        this._opacity = options.opacity != null ? options.opacity : 0.4;\n        this._radius = options.radius != null ? options.radius : 1;\n    }\n\n    protected _createGeometry(position: number[]): void {\n        const radius: number = this._radius;\n        const cone: THREE.Mesh = new THREE.Mesh(\n            this._markerGeometry(radius, 8, 8),\n            new THREE.MeshBasicMaterial({\n                color: this._color,\n                opacity: this._opacity,\n                shading: THREE.SmoothShading,\n                transparent: true,\n            }));\n\n        cone.renderOrder = 1;\n\n        const ball: THREE.Mesh = new THREE.Mesh(\n            new THREE.SphereGeometry(radius / 2, 8, 8),\n            new THREE.MeshBasicMaterial({\n                color: this._ballColor,\n                opacity: this._ballOpacity,\n                shading: THREE.SmoothShading,\n                transparent: true,\n            }));\n\n        ball.position.z = this._markerHeight(radius);\n\n        const group: THREE.Object3D = new THREE.Object3D();\n        group.add(ball);\n        group.add(cone);\n        group.position.fromArray(position);\n\n        this._geometry = group;\n    }\n\n    protected _disposeGeometry(): void {\n        for (let mesh of <THREE.Mesh[]>this._geometry.children) {\n            mesh.geometry.dispose();\n            mesh.material.dispose();\n        }\n    }\n\n    protected _getInteractiveObjects(): THREE.Object3D[] {\n        return this._interactive ? [this._geometry.children[0]] : [];\n    }\n\n    private _markerHeight(radius: number): number {\n        let t: number = Math.tan(Math.PI - this._circleToRayAngle);\n        return radius * Math.sqrt(1 + t * t);\n    }\n\n    private _markerGeometry(radius: number, widthSegments: number, heightSegments: number ): THREE.Geometry {\n        let geometry: THREE.Geometry = new THREE.Geometry();\n\n        widthSegments = Math.max(3, Math.floor(widthSegments) || 8);\n        heightSegments = Math.max(2, Math.floor(heightSegments) || 6);\n        let height: number = this._markerHeight(radius);\n\n        let vertices: any[] = [];\n\n        for (let y: number = 0; y <= heightSegments; ++y) {\n\n            let verticesRow: any[] = [];\n\n            for (let x: number = 0; x <= widthSegments; ++x) {\n                let u: number = x / widthSegments * Math.PI * 2;\n                let v: number = y / heightSegments * Math.PI;\n\n                let r: number;\n                if (v < this._circleToRayAngle) {\n                    r = radius;\n                } else {\n                    let t: number = Math.tan(v - this._circleToRayAngle);\n                    r = radius * Math.sqrt(1 + t * t);\n                }\n\n                let vertex: THREE.Vector3 = new THREE.Vector3();\n                vertex.x = r * Math.cos(u) * Math.sin(v);\n                vertex.y = r * Math.sin(u) * Math.sin(v);\n                vertex.z = r * Math.cos(v) + height;\n\n                geometry.vertices.push(vertex);\n                verticesRow.push(geometry.vertices.length - 1);\n            }\n            vertices.push(verticesRow);\n        }\n\n        for (let y: number = 0; y < heightSegments; ++y) {\n            for (let x: number = 0; x < widthSegments; ++x) {\n                let v1: number = vertices[y][x + 1];\n                let v2: number = vertices[y][x];\n                let v3: number = vertices[y + 1][x];\n                let v4: number = vertices[y + 1][x + 1];\n\n                let n1: THREE.Vector3 = geometry.vertices[v1].clone().normalize();\n                let n2: THREE.Vector3 = geometry.vertices[v2].clone().normalize();\n                let n3: THREE.Vector3 = geometry.vertices[v3].clone().normalize();\n                let n4: THREE.Vector3 = geometry.vertices[v4].clone().normalize();\n\n                geometry.faces.push(new THREE.Face3(v1, v2, v4, [n1, n2, n4]));\n                geometry.faces.push(new THREE.Face3(v2, v3, v4, [n2.clone(), n3, n4.clone()]));\n            }\n        }\n\n        geometry.computeFaceNormals();\n        geometry.boundingSphere = new THREE.Sphere(new THREE.Vector3(), radius + height);\n\n        return geometry;\n    }\n}\n\nexport default SimpleMarker;\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {ILatLon} from \"../../API\";\nimport {Marker} from \"../../Component\";\n\nexport class MarkerScene {\n    private _needsRender: boolean;\n    private _interactiveObjects: THREE.Object3D[];\n    private _markers: { [key: string]: Marker };\n    private _objectMarkers: { [id: string]: string };\n    private _raycaster: THREE.Raycaster;\n    private _scene: THREE.Scene;\n\n    constructor(scene?: THREE.Scene, raycaster?: THREE.Raycaster) {\n        this._needsRender = false;\n        this._interactiveObjects = [];\n        this._markers = {};\n        this._objectMarkers = {};\n        this._raycaster = !!raycaster ? raycaster : new THREE.Raycaster();\n        this._scene = !!scene ? scene : new THREE.Scene();\n    }\n\n    public get markers(): { [key: string]: Marker } {\n        return this._markers;\n    }\n\n    public get needsRender(): boolean {\n        return this._needsRender;\n    }\n\n    public add(marker: Marker, position: number[]): void {\n        if (marker.id in this._markers) {\n            this._dispose(marker.id);\n        }\n\n        marker.createGeometry(position);\n        this._scene.add(marker.geometry);\n        this._markers[marker.id] = marker;\n        for (let interactiveObject of marker.getInteractiveObjects()) {\n            this._interactiveObjects.push(interactiveObject);\n            this._objectMarkers[interactiveObject.uuid] = marker.id;\n        }\n\n        this._needsRender = true;\n    }\n\n    public clear(): void {\n        for (const id in this._markers) {\n            if (!this._markers.hasOwnProperty) {\n                continue;\n            }\n\n            this._dispose(id);\n        }\n\n        this._needsRender = true;\n    }\n\n    public get(id: string): Marker {\n        return this._markers[id];\n    }\n\n    public getAll(): Marker[] {\n        return Object\n            .keys(this._markers)\n            .map((id: string): Marker => { return this._markers[id]; });\n    }\n\n    public has(id: string): boolean {\n        return id in this._markers;\n    }\n\n    public intersectObjects([viewportX, viewportY]: number[], camera: THREE.Camera): string {\n        this._raycaster.setFromCamera(new THREE.Vector2(viewportX, viewportY), camera);\n\n        const intersects: THREE.Intersection[] = this._raycaster.intersectObjects(this._interactiveObjects);\n        for (const intersect of intersects) {\n            if (intersect.object.uuid in this._objectMarkers) {\n                return this._objectMarkers[intersect.object.uuid];\n            }\n        }\n\n        return null;\n    }\n\n    public lerpAltitude(id: string, alt: number, alpha: number): void {\n        if (!(id in this._markers)) {\n            return;\n        }\n\n        this._markers[id].lerpAltitude(alt, alpha);\n\n        this._needsRender = true;\n    }\n\n    public remove(id: string): void {\n        if (!(id in this._markers)) {\n            return;\n        }\n\n        this._dispose(id);\n\n        this._needsRender = true;\n    }\n\n    public render(\n        perspectiveCamera: THREE.PerspectiveCamera,\n        renderer: THREE.WebGLRenderer): void {\n\n        renderer.render(this._scene, perspectiveCamera);\n\n        this._needsRender = false;\n    }\n\n    public update(id: string, position: number[], latLon?: ILatLon): void {\n        if (!(id in this._markers)) {\n            return;\n        }\n\n        const marker: Marker = this._markers[id];\n        marker.updatePosition(position, latLon);\n\n        this._needsRender = true;\n    }\n\n    private _dispose(id: string): void {\n        const marker: Marker = this._markers[id];\n        this._scene.remove(marker.geometry);\n        for (let interactiveObject of marker.getInteractiveObjects()) {\n            const index: number = this._interactiveObjects.indexOf(interactiveObject);\n            if (index !== -1) {\n                this._interactiveObjects.splice(index, 1);\n            } else {\n                console.warn(`Object does not exist (${interactiveObject.id}) for ${id}`);\n            }\n\n            delete this._objectMarkers[interactiveObject.uuid];\n        }\n\n        marker.disposeGeometry();\n\n        delete this._markers[id];\n    }\n}\n\nexport default MarkerScene;\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as rbush from \"rbush\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\n\nimport {ILatLon} from \"../../API\";\nimport {Marker} from \"../../Component\";\n\ntype MarkerIndexItem = {\n    lat: number;\n    lon: number;\n    marker: Marker;\n};\n\ntype MarkerIndex = rbush.RBush<MarkerIndexItem>;\n\nexport class MarkerSet {\n    private _hash: { [id: string]: MarkerIndexItem };\n    private _index: MarkerIndex;\n\n    private _indexChanged$: Subject<MarkerSet>;\n    private _updated$: Subject<Marker[]>;\n\n    constructor() {\n        this._hash = {};\n        this._index = rbush<MarkerIndexItem>(16, [\".lon\", \".lat\", \".lon\", \".lat\"]);\n\n        this._indexChanged$ = new Subject<MarkerSet>();\n        this._updated$ = new Subject<Marker[]>();\n    }\n\n    public get changed$(): Observable<MarkerSet> {\n        return this._indexChanged$;\n    }\n\n    public get updated$(): Observable<Marker[]> {\n        return this._updated$;\n    }\n\n    public add(markers: Marker[]): void {\n        const updated: Marker[] = [];\n        const hash: { [id: string]: MarkerIndexItem } = this._hash;\n        const index: MarkerIndex = this._index;\n\n        for (const marker of markers) {\n            const id: string = marker.id;\n\n            if (id in hash) {\n                index.remove(hash[id]);\n                updated.push(marker);\n            }\n\n            const item: MarkerIndexItem = {\n                lat: marker.latLon.lat,\n                lon: marker.latLon.lon,\n                marker: marker,\n            };\n\n            hash[id] = item;\n            index.insert(item);\n        }\n\n        if (updated.length > 0) {\n            this._updated$.next(updated);\n        }\n\n        if (markers.length > updated.length) {\n            this._indexChanged$.next(this);\n        }\n    }\n\n    public has(id: string): boolean {\n        return id in this._hash;\n    }\n\n    public get(id: string): Marker {\n        return this.has(id) ? this._hash[id].marker : undefined;\n    }\n\n    public getAll(): Marker[] {\n        return this._index\n            .all()\n            .map(\n                (indexItem: MarkerIndexItem): Marker => {\n                    return indexItem.marker;\n                });\n    }\n\n    public remove(ids: string[]): void {\n        const hash: { [id: string]: MarkerIndexItem } = this._hash;\n        const index: MarkerIndex = this._index;\n\n        let changed: boolean = false;\n        for (const id of ids) {\n            if (!(id in hash)) {\n                continue;\n            }\n\n            const item: MarkerIndexItem = hash[id];\n            index.remove(item);\n            delete hash[id];\n            changed = true;\n        }\n\n        if (changed) {\n            this._indexChanged$.next(this);\n        }\n    }\n\n    public removeAll(): void {\n        this._hash = {};\n        this._index.clear();\n\n        this._indexChanged$.next(this);\n    }\n\n    public search([sw, ne]: [ILatLon, ILatLon]): Marker[] {\n        return this._index\n            .search({ maxX: ne.lon, maxY: ne.lat, minX: sw.lon, minY: sw.lat })\n            .map(\n                (indexItem: MarkerIndexItem): Marker => {\n                    return indexItem.marker;\n                });\n    }\n\n    public update(marker: Marker): void {\n        const hash: { [id: string]: MarkerIndexItem } = this._hash;\n        const index: MarkerIndex = this._index;\n        const id: string = marker.id;\n\n        if (!(id in hash)) {\n            return;\n        }\n\n        index.remove(hash[id]);\n\n        const item: MarkerIndexItem = {\n            lat: marker.latLon.lat,\n            lon: marker.latLon.lon,\n            marker: marker,\n        };\n\n        hash[id] = item;\n        index.insert(item);\n    }\n}\n\nexport default MarkerSet;\n",
     "/// <reference path=\"../../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {ILatLon} from \"../../../API\";\nimport {\n    ICircleMarkerOptions,\n    Marker,\n} from \"../../../Component\";\n\n/**\n * @class CircleMarker\n *\n * @classdesc Non-interactive marker with a flat circle shape. The circle\n * marker can not be configured to be interactive.\n *\n * Circle marker properties can not be updated after creation.\n *\n * To create and add one `CircleMarker` with default configuration\n * and one with configuration use\n *\n * @example\n * ```\n * var defaultMarker = new Mapillary.MarkerComponent.CircleMarker(\n *     \"id-1\",\n *     { lat: 0, lon: 0, });\n *\n * var configuredMarker = new Mapillary.MarkerComponent.CircleMarker(\n *     \"id-2\",\n *     { lat: 0, lon: 0, },\n *     {\n *         color: \"#0Ff\",\n *         opacity: 0.3,\n *         radius: 0.7,\n *     });\n *\n * markerComponent.add([defaultMarker, configuredMarker]);\n * ```\n */\nexport class CircleMarker extends Marker {\n    private _color: number | string;\n    private _opacity: number;\n    private _radius: number;\n\n    constructor(id: string, latLon: ILatLon, options?: ICircleMarkerOptions) {\n        super(id, latLon);\n\n        options = !!options ? options : {};\n        this._color = options.color != null ? options.color : 0xffffff;\n        this._opacity = options.opacity != null ? options.opacity : 0.4;\n        this._radius = options.radius != null ? options.radius : 1;\n    }\n\n    protected _createGeometry(position: number[]): void {\n        const circle: THREE.Mesh = new THREE.Mesh(\n            new THREE.CircleGeometry(this._radius, 16),\n            new THREE.MeshBasicMaterial({\n                color: this._color,\n                opacity: this._opacity,\n                transparent: true,\n            }));\n\n        circle.up.fromArray([0, 0, 1]);\n        circle.renderOrder = -1;\n\n        const group: THREE.Object3D = new THREE.Object3D();\n        group.add(circle);\n        group.position.fromArray(position);\n\n        this._geometry = group;\n    }\n\n    protected _disposeGeometry(): void {\n        for (let mesh of <THREE.Mesh[]>this._geometry.children) {\n            mesh.geometry.dispose();\n            mesh.material.dispose();\n        }\n    }\n\n    protected _getInteractiveObjects(): THREE.Object3D[] {\n        return [];\n    }\n}\n\nexport default CircleMarker;\n",
     "/// <reference path=\"../../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {ILatLon} from \"../../../API\";\n\n/**\n * @class Marker\n *\n * @classdesc Represents an abstract marker class that should be extended\n * by marker implementations used in the marker component.\n */\nexport abstract class Marker {\n    protected _id: string;\n    protected _geometry: THREE.Object3D;\n    protected _latLon: ILatLon;\n\n    constructor(id: string, latLon: ILatLon) {\n        this._id = id;\n        this._latLon = latLon;\n    }\n\n    /**\n     * Get id.\n     * @returns {string} The id of the marker.\n     */\n    public get id(): string {\n        return this._id;\n    }\n\n    public get geometry(): THREE.Object3D {\n        return this._geometry;\n    }\n\n    /**\n     * Get lat lon.\n     * @returns {ILatLon} The geographic coordinates of the marker.\n     */\n    public get latLon(): ILatLon {\n        return this._latLon;\n    }\n\n    public createGeometry(position: number[]): void {\n        if (!!this._geometry) {\n            return;\n        }\n\n        this._createGeometry(position);\n\n        // update matrix world if raycasting occurs before first render\n        this._geometry.updateMatrixWorld(true);\n    }\n\n    public disposeGeometry(): void {\n        if (!this._geometry) {\n            return;\n        }\n\n        this._disposeGeometry();\n\n        this._geometry = undefined;\n    }\n\n    public getInteractiveObjects(): THREE.Object3D[] {\n        if (!this._geometry) {\n            return [];\n        }\n\n        return this._getInteractiveObjects();\n    }\n\n    public lerpAltitude(alt: number, alpha: number): void {\n        if (!this._geometry) {\n            return;\n        }\n\n        this._geometry.position.z = (1 - alpha) * this._geometry.position.z + alpha * alt;\n    }\n\n    public updatePosition(position: number[], latLon?: ILatLon): void {\n        if (!!latLon) {\n            this._latLon.lat = latLon.lat;\n            this._latLon.lon = latLon.lon;\n        }\n\n        if (!this._geometry) {\n            return;\n        }\n\n        this._geometry.position.fromArray(position);\n        this._geometry.updateMatrixWorld(true);\n    }\n\n    protected abstract _createGeometry(position: number[]): void;\n\n    protected abstract _disposeGeometry(): void;\n\n    protected abstract _getInteractiveObjects(): THREE.Object3D[];\n}\n\nexport default Marker;\n",
     "/// <reference path=\"../../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {ILatLon} from \"../../../API\";\nimport {\n    ISimpleMarkerOptions,\n    Marker,\n} from \"../../../Component\";\n\n/**\n * @class SimpleMarker\n *\n * @classdesc Interactive marker with ice cream shape. The sphere\n * inside the ice cream can be configured to be interactive.\n *\n * Simple marker properties can not be updated after creation.\n *\n * To create and add one `SimpleMarker` with default configuration\n * (non-interactive) and one interactive with configuration use\n *\n * @example\n * ```\n * var defaultMarker = new Mapillary.MarkerComponent.SimpleMarker(\n *     \"id-1\",\n *     { lat: 0, lon: 0, });\n *\n * var interactiveMarker = new Mapillary.MarkerComponent.SimpleMarker(\n *     \"id-2\",\n *     { lat: 0, lon: 0, },\n *     {\n *         ballColor: \"#00f\",\n *         ballOpacity: 0.5,\n *         color: \"#00f\",\n *         interactive: true,\n *         opacity: 0.3,\n *         radius: 0.7,\n *     });\n *\n * markerComponent.add([defaultMarker, interactiveMarker]);\n * ```\n */\nexport class SimpleMarker extends Marker {\n    private _ballColor: number | string;\n    private _ballOpacity: number;\n    private _circleToRayAngle: number;\n    private _color: number | string;\n    private _interactive: boolean;\n    private _opacity: number;\n    private _radius: number;\n\n    constructor(id: string, latLon: ILatLon, options?: ISimpleMarkerOptions) {\n        super(id, latLon);\n\n        options = !!options ? options : {};\n        this._ballColor = options.ballColor != null ? options.ballColor : 0xff0000;\n        this._ballOpacity = options.ballOpacity != null ? options.ballOpacity : 0.8;\n        this._circleToRayAngle = 2;\n        this._color = options.color != null ? options.color : 0xff0000;\n        this._interactive = !!options.interactive;\n        this._opacity = options.opacity != null ? options.opacity : 0.4;\n        this._radius = options.radius != null ? options.radius : 1;\n    }\n\n    protected _createGeometry(position: number[]): void {\n        const radius: number = this._radius;\n        const cone: THREE.Mesh = new THREE.Mesh(\n            this._markerGeometry(radius, 8, 8),\n            new THREE.MeshBasicMaterial({\n                color: this._color,\n                opacity: this._opacity,\n                shading: THREE.SmoothShading,\n                transparent: true,\n            }));\n\n        cone.renderOrder = 1;\n\n        const ball: THREE.Mesh = new THREE.Mesh(\n            new THREE.SphereGeometry(radius / 2, 8, 8),\n            new THREE.MeshBasicMaterial({\n                color: this._ballColor,\n                opacity: this._ballOpacity,\n                shading: THREE.SmoothShading,\n                transparent: true,\n            }));\n\n        ball.position.z = this._markerHeight(radius);\n\n        const group: THREE.Object3D = new THREE.Object3D();\n        group.add(ball);\n        group.add(cone);\n        group.position.fromArray(position);\n\n        this._geometry = group;\n    }\n\n    protected _disposeGeometry(): void {\n        for (let mesh of <THREE.Mesh[]>this._geometry.children) {\n            mesh.geometry.dispose();\n            mesh.material.dispose();\n        }\n    }\n\n    protected _getInteractiveObjects(): THREE.Object3D[] {\n        return this._interactive ? [this._geometry.children[0]] : [];\n    }\n\n    private _markerHeight(radius: number): number {\n        let t: number = Math.tan(Math.PI - this._circleToRayAngle);\n        return radius * Math.sqrt(1 + t * t);\n    }\n\n    private _markerGeometry(radius: number, widthSegments: number, heightSegments: number ): THREE.Geometry {\n        let geometry: THREE.Geometry = new THREE.Geometry();\n\n        widthSegments = Math.max(3, Math.floor(widthSegments) || 8);\n        heightSegments = Math.max(2, Math.floor(heightSegments) || 6);\n        let height: number = this._markerHeight(radius);\n\n        let vertices: any[] = [];\n\n        for (let y: number = 0; y <= heightSegments; ++y) {\n\n            let verticesRow: any[] = [];\n\n            for (let x: number = 0; x <= widthSegments; ++x) {\n                let u: number = x / widthSegments * Math.PI * 2;\n                let v: number = y / heightSegments * Math.PI;\n\n                let r: number;\n                if (v < this._circleToRayAngle) {\n                    r = radius;\n                } else {\n                    let t: number = Math.tan(v - this._circleToRayAngle);\n                    r = radius * Math.sqrt(1 + t * t);\n                }\n\n                let vertex: THREE.Vector3 = new THREE.Vector3();\n                vertex.x = r * Math.cos(u) * Math.sin(v);\n                vertex.y = r * Math.sin(u) * Math.sin(v);\n                vertex.z = r * Math.cos(v) + height;\n\n                geometry.vertices.push(vertex);\n                verticesRow.push(geometry.vertices.length - 1);\n            }\n            vertices.push(verticesRow);\n        }\n\n        for (let y: number = 0; y < heightSegments; ++y) {\n            for (let x: number = 0; x < widthSegments; ++x) {\n                let v1: number = vertices[y][x + 1];\n                let v2: number = vertices[y][x];\n                let v3: number = vertices[y + 1][x];\n                let v4: number = vertices[y + 1][x + 1];\n\n                let n1: THREE.Vector3 = geometry.vertices[v1].clone().normalize();\n                let n2: THREE.Vector3 = geometry.vertices[v2].clone().normalize();\n                let n3: THREE.Vector3 = geometry.vertices[v3].clone().normalize();\n                let n4: THREE.Vector3 = geometry.vertices[v4].clone().normalize();\n\n                geometry.faces.push(new THREE.Face3(v1, v2, v4, [n1, n2, n4]));\n                geometry.faces.push(new THREE.Face3(v2, v3, v4, [n2.clone(), n3, n4.clone()]));\n            }\n        }\n\n        geometry.computeFaceNormals();\n        geometry.boundingSphere = new THREE.Sphere(new THREE.Vector3(), radius + height);\n\n        return geometry;\n    }\n}\n\nexport default SimpleMarker;\n",
-    "import {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport {\n    IMouseConfiguration,\n    MouseHandlerBase,\n    ClientTouch,\n} from \"../../Component\";\nimport {Transform} from \"../../Geo\";\nimport {RenderCamera} from \"../../Render\";\n\n/**\n * The `DoubleClickZoomHandler` allows the user to zoom the viewer photo at a point by double clicking.\n */\nexport class DoubleClickZoomHandler extends MouseHandlerBase<IMouseConfiguration> {\n    private _zoomSubscription: Subscription;\n\n    protected _enable(): void {\n        this._zoomSubscription = Observable\n            .merge(\n                this._container.mouseService\n                    .filtered$(this._component.name, this._container.mouseService.dblClick$),\n                this._container.touchService.doubleTap$\n                    .map(\n                        (e: TouchEvent): ClientTouch => {\n                            let touch: Touch = e.touches[0];\n                            return { clientX: touch.clientX, clientY: touch.clientY, shiftKey: e.shiftKey };\n                        }))\n            .withLatestFrom(\n                this._container.renderService.renderCamera$,\n                this._navigator.stateService.currentTransform$)\n            .subscribe(\n                ([event, render, transform]: [MouseEvent | ClientTouch, RenderCamera, Transform]): void => {\n                    const element: HTMLElement = this._container.element;\n\n                    const [canvasX, canvasY]: number[] = this._viewportCoords.canvasPosition(event, element);\n\n                    const unprojected: THREE.Vector3 =\n                        this._viewportCoords.unprojectFromCanvas(\n                            canvasX,\n                            canvasY,\n                            element,\n                            render.perspective);\n\n                    const reference: number[] = transform.projectBasic(unprojected.toArray());\n                    const delta: number = !!(<{ shiftKey: boolean }>event).shiftKey ? -1 : 1;\n\n                    this._navigator.stateService.zoomIn(delta, reference);\n                });\n    }\n\n    protected _disable(): void {\n        this._zoomSubscription.unsubscribe();\n    }\n\n    protected _getConfiguration(enable: boolean): IMouseConfiguration {\n        return { doubleClickZoom: enable };\n    }\n}\n\nexport default DoubleClickZoomHandler;\n",
-    "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport {\n    Component,\n    IMouseConfiguration,\n    MouseHandlerBase,\n    MouseTouchPair,\n} from \"../../Component\";\nimport {\n    Camera,\n    Spatial,\n    Transform,\n    ViewportCoords,\n} from \"../../Geo\";\nimport {\n    RenderCamera,\n} from \"../../Render\";\nimport {IFrame} from \"../../State\";\nimport {\n    Container,\n    Navigator,\n} from \"../../Viewer\";\n\n/**\n * The `DragPanHandler` allows the user to pan the viewer photo by clicking and dragging the cursor.\n */\nexport class DragPanHandler extends MouseHandlerBase<IMouseConfiguration> {\n    private _spatial: Spatial;\n\n    private _basicRotationThreshold: number;\n    private _forceCoeff: number;\n\n    private _activeMouseSubscription: Subscription;\n    private _activeTouchSubscription: Subscription;\n    private _preventDefaultSubscription: Subscription;\n    private _rotateBasicSubscription: Subscription;\n\n    constructor(\n        component: Component<IMouseConfiguration>,\n        container: Container,\n        navigator: Navigator,\n        viewportCoords: ViewportCoords,\n        spatial: Spatial) {\n        super(component, container, navigator, viewportCoords);\n\n        this._spatial = spatial;\n\n        this._basicRotationThreshold = 5e-2;\n        this._forceCoeff = 2e-1;\n    }\n\n    protected _enable(): void {\n        this._preventDefaultSubscription = Observable.merge(\n            this._container.mouseService.mouseDragStart$,\n            this._container.mouseService.mouseDrag$,\n            this._container.touchService.touchMove$)\n            .subscribe(\n                (event: MouseEvent | TouchEvent): void => {\n                    event.preventDefault(); // prevent selection of content outside the viewer\n                });\n\n        let draggingStarted$: Observable<boolean> =\n             this._container.mouseService\n                .filtered$(this._component.name, this._container.mouseService.mouseDragStart$)\n                .map(\n                    (event: MouseEvent): boolean => {\n                        return true;\n                    });\n\n        let draggingStopped$: Observable<boolean> =\n             this._container.mouseService\n                .filtered$(this._component.name, this._container.mouseService.mouseDragEnd$)\n                .map(\n                    (event: MouseEvent): boolean => {\n                        return false;\n                    });\n\n        this._activeMouseSubscription = Observable\n            .merge(\n                draggingStarted$,\n                draggingStopped$)\n            .subscribe(this._container.mouseService.activate$);\n\n        let touchMovingStarted$: Observable<boolean> =\n            this._container.touchService.singleTouchDragStart$\n                .map(\n                    (event: TouchEvent): boolean => {\n                        return true;\n                    });\n\n        let touchMovingStopped$: Observable<boolean> =\n            this._container.touchService.singleTouchDragEnd$\n                .map(\n                    (event: TouchEvent): boolean => {\n                        return false;\n                    });\n\n        this._activeTouchSubscription = Observable\n            .merge(\n                touchMovingStarted$,\n                touchMovingStopped$)\n            .subscribe(this._container.touchService.activate$);\n\n        this._rotateBasicSubscription = this._navigator.stateService.currentState$\n            .map(\n                (frame: IFrame): boolean => {\n                    return frame.state.currentNode.fullPano || frame.state.nodesAhead < 1;\n                })\n            .distinctUntilChanged()\n            .switchMap(\n                (enable: boolean): Observable<MouseTouchPair> => {\n                    if (!enable) {\n                        return Observable.empty<MouseTouchPair>();\n                    }\n\n                    let mouseDrag$: Observable<[MouseEvent, MouseEvent]> = Observable\n                        .merge(\n                            this._container.mouseService.filtered$(this._component.name, this._container.mouseService.mouseDragStart$),\n                            this._container.mouseService.filtered$(this._component.name, this._container.mouseService.mouseDrag$),\n                            this._container.mouseService.filtered$(this._component.name, this._container.mouseService.mouseDragEnd$)\n                                .map((e: MouseEvent): MouseEvent => { return null; }))\n                        .pairwise()\n                        .filter(\n                            (pair: [MouseEvent, MouseEvent]): boolean => {\n                                return pair[0] != null && pair[1] != null;\n                            });\n\n                    let singleTouchDrag$: Observable<[Touch, Touch]> = Observable\n                        .merge(\n                            this._container.touchService.singleTouchDragStart$,\n                            this._container.touchService.singleTouchDrag$,\n                            this._container.touchService.singleTouchDragEnd$.map((t: TouchEvent): TouchEvent => { return null; }))\n                        .map(\n                            (event: TouchEvent): Touch => {\n                                return event != null && event.touches.length > 0 ?\n                                    event.touches[0] : null;\n                            })\n                        .pairwise()\n                        .filter(\n                            (pair: [Touch, Touch]): boolean => {\n                                return pair[0] != null && pair[1] != null;\n                            });\n\n                    return Observable\n                        .merge(\n                            mouseDrag$,\n                            singleTouchDrag$);\n                })\n            .withLatestFrom(\n                this._container.renderService.renderCamera$,\n                this._navigator.stateService.currentTransform$,\n                this._navigator.stateService.currentCamera$)\n            .map(\n                ([events, render, transform, c]: [MouseTouchPair, RenderCamera, Transform, Camera]): number[] => {\n                    let camera: Camera = c.clone();\n\n                    let previousEvent: MouseEvent | Touch = events[0];\n                    let event: MouseEvent | Touch = events[1];\n\n                    let movementX: number = event.clientX - previousEvent.clientX;\n                    let movementY: number = event.clientY - previousEvent.clientY;\n\n                    let element: HTMLElement = this._container.element;\n\n                    let [canvasX, canvasY]: number[] = this._viewportCoords.canvasPosition(event, element);\n\n                    let currentDirection: THREE.Vector3 =\n                        this._viewportCoords.unprojectFromCanvas(\n                            canvasX,\n                            canvasY,\n                            element,\n                            render.perspective)\n                                .sub(render.perspective.position);\n\n                    let directionX: THREE.Vector3 =\n                        this._viewportCoords.unprojectFromCanvas(\n                            canvasX - movementX,\n                            canvasY,\n                            element,\n                            render.perspective)\n                                .sub(render.perspective.position);\n\n                    let directionY: THREE.Vector3 =\n                        this._viewportCoords.unprojectFromCanvas(\n                            canvasX,\n                            canvasY - movementY,\n                            element,\n                            render.perspective)\n                                .sub(render.perspective.position);\n\n                    let deltaPhi: number = (movementX > 0 ? 1 : -1) * directionX.angleTo(currentDirection);\n                    let deltaTheta: number = (movementY > 0 ? -1 : 1) * directionY.angleTo(currentDirection);\n\n                    let upQuaternion: THREE.Quaternion = new THREE.Quaternion().setFromUnitVectors(camera.up, new THREE.Vector3(0, 0, 1));\n                    let upQuaternionInverse: THREE.Quaternion = upQuaternion.clone().inverse();\n\n                    let offset: THREE.Vector3 = new THREE.Vector3();\n                    offset.copy(camera.lookat).sub(camera.position);\n                    offset.applyQuaternion(upQuaternion);\n                    let length: number = offset.length();\n\n                    let phi: number = Math.atan2(offset.y, offset.x);\n                    phi += deltaPhi;\n\n                    let theta: number = Math.atan2(Math.sqrt(offset.x * offset.x + offset.y * offset.y), offset.z);\n                    theta += deltaTheta;\n                    theta = Math.max(0.01, Math.min(Math.PI - 0.01, theta));\n\n                    offset.x = Math.sin(theta) * Math.cos(phi);\n                    offset.y = Math.sin(theta) * Math.sin(phi);\n                    offset.z = Math.cos(theta);\n                    offset.applyQuaternion(upQuaternionInverse);\n\n                    let lookat: THREE.Vector3 = new THREE.Vector3().copy(camera.position).add(offset.multiplyScalar(length));\n\n                    let basic: number[] = transform.projectBasic(lookat.toArray());\n                    let original: number[] = transform.projectBasic(camera.lookat.toArray());\n\n                    let x: number = basic[0] - original[0];\n                    let y: number = basic[1] - original[1];\n\n                    if (Math.abs(x) > 1) {\n                        x = 0;\n                    } else if (x > 0.5) {\n                        x = x - 1;\n                    } else if (x < -0.5) {\n                        x = x + 1;\n                    }\n\n                    let rotationThreshold: number = this._basicRotationThreshold;\n\n                    x = this._spatial.clamp(x, -rotationThreshold, rotationThreshold);\n                    y = this._spatial.clamp(y, -rotationThreshold, rotationThreshold);\n\n                    if (transform.fullPano) {\n                        return [x, y];\n                    }\n\n                    let pixelDistances: number[] =\n                        this._viewportCoords.getPixelDistances(\n                            this._container.element,\n                            transform,\n                            render.perspective);\n\n                    let coeff: number = this._forceCoeff;\n\n                    if (pixelDistances[0] > 0 && y < 0 && basic[1] < 0.5) {\n                        y /= Math.max(1, coeff * pixelDistances[0]);\n                    }\n\n                    if (pixelDistances[1] > 0 && x > 0 && basic[0] > 0.5) {\n                        x /= Math.max(1, coeff * pixelDistances[1]);\n                    }\n\n                    if (pixelDistances[2] > 0 && y > 0 && basic[1] > 0.5) {\n                        y /= Math.max(1, coeff * pixelDistances[2]);\n                    }\n\n                    if (pixelDistances[3] > 0 && x < 0 && basic[0] < 0.5) {\n                        x /= Math.max(1, coeff * pixelDistances[3]);\n                    }\n\n                    return [x, y];\n                })\n            .subscribe(\n                (basicRotation: number[]): void => {\n                    this._navigator.stateService.rotateBasic(basicRotation);\n                });\n    }\n\n    protected _disable(): void {\n        this._activeMouseSubscription.unsubscribe();\n        this._activeTouchSubscription.unsubscribe();\n        this._preventDefaultSubscription.unsubscribe();\n        this._rotateBasicSubscription.unsubscribe();\n\n        this._activeMouseSubscription = null;\n        this._activeTouchSubscription = null;\n        this._rotateBasicSubscription = null;\n    }\n\n    protected _getConfiguration(enable: boolean): IMouseConfiguration {\n        return { dragPan: enable };\n    }\n}\n\nexport default DragPanHandler;\n",
-    "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport \"rxjs/add/observable/merge\";\n\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/withLatestFrom\";\n\nimport {\n    ComponentService,\n    Component,\n    DoubleClickZoomHandler,\n    DragPanHandler,\n    IMouseConfiguration,\n    ScrollZoomHandler,\n    TouchZoomHandler,\n} from \"../../Component\";\nimport {\n    ViewportCoords,\n    Spatial,\n    Transform,\n} from \"../../Geo\";\nimport {RenderCamera} from \"../../Render\";\nimport {IFrame} from \"../../State\";\nimport {\n    Container,\n    Navigator,\n} from \"../../Viewer\";\n\n/**\n * @class MouseComponent\n *\n * @classdesc Component handling mouse and touch events for camera movement.\n */\nexport class MouseComponent extends Component<IMouseConfiguration> {\n    /** @inheritdoc */\n    public static componentName: string = \"mouse\";\n\n    private _basicDistanceThreshold: number;\n    private _basicRotationThreshold: number;\n    private _bounceCoeff: number;\n\n    private _viewportCoords: ViewportCoords;\n    private _spatial: Spatial;\n\n    private _doubleClickZoomHandler: DoubleClickZoomHandler;\n    private _dragPanHandler: DragPanHandler;\n    private _scrollZoomHandler: ScrollZoomHandler;\n    private _touchZoomHandler: TouchZoomHandler;\n\n    private _bounceSubscription: Subscription;\n    private _configurationSubscription: Subscription;\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n\n        this._basicDistanceThreshold = 1e-3;\n        this._basicRotationThreshold = 5e-2;\n        this._bounceCoeff = 1e-1;\n\n        let spatial: Spatial = new Spatial();\n        let viewportCoords: ViewportCoords = new ViewportCoords();\n\n        this._spatial = spatial;\n        this._viewportCoords = viewportCoords;\n\n        this._doubleClickZoomHandler = new DoubleClickZoomHandler(this, container, navigator, viewportCoords);\n        this._dragPanHandler = new DragPanHandler(this, container, navigator, viewportCoords, spatial);\n        this._scrollZoomHandler = new ScrollZoomHandler(this, container, navigator, viewportCoords);\n        this._touchZoomHandler = new TouchZoomHandler(this, container, navigator, viewportCoords);\n    }\n\n    /**\n     * Get double click zoom.\n     *\n     * @returns {DoubleClickZoomHandler} The double click zoom handler.\n     */\n    public get doubleClickZoom(): DoubleClickZoomHandler {\n        return this._doubleClickZoomHandler;\n    }\n\n    /**\n     * Get drag pan.\n     *\n     * @returns {DragPanHandler} The drag pan handler.\n     */\n    public get dragPan(): DragPanHandler {\n        return this._dragPanHandler;\n    }\n\n    /**\n     * Get scroll zoom.\n     *\n     * @returns {ScrollZoomHandler} The scroll zoom handler.\n     */\n    public get scrollZoom(): ScrollZoomHandler {\n        return this._scrollZoomHandler;\n    }\n\n    /**\n     * Get touch zoom.\n     *\n     * @returns {TouchZoomHandler} The touch zoom handler.\n     */\n    public get touchZoom(): TouchZoomHandler {\n        return this._touchZoomHandler;\n    }\n\n    protected _activate(): void {\n        this._configurationSubscription = this._configuration$\n            .subscribe(\n                (configuration: IMouseConfiguration): void => {\n                    if (configuration.doubleClickZoom) {\n                        this._doubleClickZoomHandler.enable();\n                    } else {\n                        this._doubleClickZoomHandler.disable();\n                    }\n\n                    if (configuration.dragPan) {\n                        this._dragPanHandler.enable();\n                    } else {\n                        this._dragPanHandler.disable();\n                    }\n\n                    if (configuration.scrollZoom) {\n                        this._scrollZoomHandler.enable();\n                    } else {\n                        this._scrollZoomHandler.disable();\n                    }\n\n                    if (configuration.touchZoom) {\n                        this._touchZoomHandler.enable();\n                    } else {\n                        this._touchZoomHandler.disable();\n                    }\n                });\n\n        const inTransition$: Observable<boolean> = this._navigator.stateService.currentState$\n            .map(\n                (frame: IFrame): boolean => {\n                    return frame.state.alpha < 1;\n                });\n\n        this._bounceSubscription = Observable\n            .combineLatest(\n                inTransition$,\n                this._navigator.stateService.inTranslation$,\n                this._container.mouseService.active$,\n                this._container.touchService.active$)\n            .map(\n                (noForce: boolean[]): boolean => {\n                    return noForce[0] || noForce[1] || noForce[2] || noForce[3];\n                })\n            .distinctUntilChanged()\n            .switchMap(\n                (noForce: boolean): Observable<[RenderCamera, Transform]> => {\n                    return noForce ?\n                        Observable.empty() :\n                        Observable.combineLatest(\n                            this._container.renderService.renderCamera$,\n                            this._navigator.stateService.currentTransform$.first());\n                })\n            .subscribe(\n                (args: [RenderCamera, Transform]): void => {\n                    let renderCamera: RenderCamera = args[0];\n                    let perspectiveCamera: THREE.PerspectiveCamera = renderCamera.perspective;\n                    let transform: Transform = args[1];\n\n                    let distanceThreshold: number = this._basicDistanceThreshold / Math.pow(2, renderCamera.zoom);\n\n                    let basicCenter: number[] = this._viewportCoords.viewportToBasic(0, 0, transform, perspectiveCamera);\n\n                    if (Math.abs(basicCenter[0] - 0.5) < distanceThreshold && Math.abs(basicCenter[1] - 0.5) < distanceThreshold) {\n                        return;\n                    }\n\n                    let basicDistances: number[] = this._viewportCoords.getBasicDistances(transform, perspectiveCamera);\n\n                    let basicX: number = 0;\n                    let basicY: number = 0;\n\n                    if (basicDistances[0] < distanceThreshold && basicDistances[1] < distanceThreshold &&\n                        basicDistances[2] < distanceThreshold && basicDistances[3] < distanceThreshold) {\n                        return;\n                    }\n\n                    if (Math.abs(basicDistances[0] - basicDistances[2]) < distanceThreshold &&\n                        Math.abs(basicDistances[1] - basicDistances[3]) < distanceThreshold) {\n                        return;\n                    }\n\n                    let coeff: number = this._bounceCoeff;\n\n                    if (basicDistances[1] > 0 && basicDistances[3] === 0) {\n                        basicX = -coeff * basicDistances[1];\n                    } else if (basicDistances[1] === 0 && basicDistances[3] > 0) {\n                        basicX = coeff * basicDistances[3];\n                    } else if (basicDistances[1] > 0 && basicDistances[3] > 0) {\n                        basicX = coeff * (basicDistances[3] - basicDistances[1]) / 2;\n                    }\n\n                    if (basicDistances[0] > 0 && basicDistances[2] === 0) {\n                        basicY = coeff * basicDistances[0];\n                    } else if (basicDistances[0] === 0 && basicDistances[2] > 0) {\n                        basicY = -coeff * basicDistances[2];\n                    } else if (basicDistances[0] > 0 && basicDistances[2] > 0) {\n                        basicY = coeff * (basicDistances[0] - basicDistances[2]) / 2;\n                    }\n\n                    let rotationThreshold: number = this._basicRotationThreshold;\n\n                    basicX = this._spatial.clamp(basicX, -rotationThreshold, rotationThreshold);\n                    basicY = this._spatial.clamp(basicY, -rotationThreshold, rotationThreshold);\n\n                    this._navigator.stateService.rotateBasicUnbounded([basicX, basicY]);\n                });\n\n        this._container.mouseService.claimMouse(this._name, 0);\n    }\n\n    protected _deactivate(): void {\n        this._container.mouseService.unclaimMouse(this._name);\n\n        this._bounceSubscription.unsubscribe();\n        this._configurationSubscription.unsubscribe();\n\n        this._doubleClickZoomHandler.disable();\n        this._dragPanHandler.disable();\n        this._scrollZoomHandler.disable();\n        this._touchZoomHandler.disable();\n    }\n\n    protected _getDefaultConfiguration(): IMouseConfiguration {\n        return { doubleClickZoom: true, dragPan: true, scrollZoom: true, touchZoom: true };\n    }\n}\n\nComponentService.register(MouseComponent);\nexport default MouseComponent;\n",
+    "import {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport {\n    IMouseConfiguration,\n    MouseHandlerBase,\n    ClientTouch,\n} from \"../../Component\";\nimport {Transform} from \"../../Geo\";\nimport {RenderCamera} from \"../../Render\";\n\n/**\n * The `DoubleClickZoomHandler` allows the user to zoom the viewer photo at a point by double clicking.\n *\n * @example\n * ```\n * var mouseComponent = viewer.getComponent(\"mouse\");\n *\n * mouseComponent.doubleClickZoom.disable();\n * mouseComponent.doubleClickZoom.enable();\n *\n * var isEnabled = mouseComponent.doubleClickZoom.isEnabled;\n * ```\n */\nexport class DoubleClickZoomHandler extends MouseHandlerBase<IMouseConfiguration> {\n    private _zoomSubscription: Subscription;\n\n    protected _enable(): void {\n        this._zoomSubscription = Observable\n            .merge(\n                this._container.mouseService\n                    .filtered$(this._component.name, this._container.mouseService.dblClick$),\n                this._container.touchService.doubleTap$\n                    .map(\n                        (e: TouchEvent): ClientTouch => {\n                            let touch: Touch = e.touches[0];\n                            return { clientX: touch.clientX, clientY: touch.clientY, shiftKey: e.shiftKey };\n                        }))\n            .withLatestFrom(\n                this._container.renderService.renderCamera$,\n                this._navigator.stateService.currentTransform$)\n            .subscribe(\n                ([event, render, transform]: [MouseEvent | ClientTouch, RenderCamera, Transform]): void => {\n                    const element: HTMLElement = this._container.element;\n\n                    const [canvasX, canvasY]: number[] = this._viewportCoords.canvasPosition(event, element);\n\n                    const unprojected: THREE.Vector3 =\n                        this._viewportCoords.unprojectFromCanvas(\n                            canvasX,\n                            canvasY,\n                            element,\n                            render.perspective);\n\n                    const reference: number[] = transform.projectBasic(unprojected.toArray());\n                    const delta: number = !!(<{ shiftKey: boolean }>event).shiftKey ? -1 : 1;\n\n                    this._navigator.stateService.zoomIn(delta, reference);\n                });\n    }\n\n    protected _disable(): void {\n        this._zoomSubscription.unsubscribe();\n    }\n\n    protected _getConfiguration(enable: boolean): IMouseConfiguration {\n        return { doubleClickZoom: enable };\n    }\n}\n\nexport default DoubleClickZoomHandler;\n",
+    "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport {\n    Component,\n    IMouseConfiguration,\n    MouseHandlerBase,\n    MouseTouchPair,\n} from \"../../Component\";\nimport {\n    Camera,\n    Spatial,\n    Transform,\n    ViewportCoords,\n} from \"../../Geo\";\nimport {\n    RenderCamera,\n} from \"../../Render\";\nimport {IFrame} from \"../../State\";\nimport {\n    Container,\n    Navigator,\n} from \"../../Viewer\";\n\n/**\n * The `DragPanHandler` allows the user to pan the viewer photo by clicking and dragging the cursor.\n *\n * @example\n * ```\n * var mouseComponent = viewer.getComponent(\"mouse\");\n *\n * mouseComponent.dragPan.disable();\n * mouseComponent.dragPan.enable();\n *\n * var isEnabled = mouseComponent.dragPan.isEnabled;\n * ```\n */\nexport class DragPanHandler extends MouseHandlerBase<IMouseConfiguration> {\n    private _spatial: Spatial;\n\n    private _basicRotationThreshold: number;\n    private _forceCoeff: number;\n\n    private _activeMouseSubscription: Subscription;\n    private _activeTouchSubscription: Subscription;\n    private _preventDefaultSubscription: Subscription;\n    private _rotateBasicSubscription: Subscription;\n\n    constructor(\n        component: Component<IMouseConfiguration>,\n        container: Container,\n        navigator: Navigator,\n        viewportCoords: ViewportCoords,\n        spatial: Spatial) {\n        super(component, container, navigator, viewportCoords);\n\n        this._spatial = spatial;\n\n        this._basicRotationThreshold = 5e-2;\n        this._forceCoeff = 2e-1;\n    }\n\n    protected _enable(): void {\n        this._preventDefaultSubscription = Observable.merge(\n            this._container.mouseService.mouseDragStart$,\n            this._container.mouseService.mouseDrag$,\n            this._container.touchService.touchMove$)\n            .subscribe(\n                (event: MouseEvent | TouchEvent): void => {\n                    event.preventDefault(); // prevent selection of content outside the viewer\n                });\n\n        let draggingStarted$: Observable<boolean> =\n             this._container.mouseService\n                .filtered$(this._component.name, this._container.mouseService.mouseDragStart$)\n                .map(\n                    (event: MouseEvent): boolean => {\n                        return true;\n                    });\n\n        let draggingStopped$: Observable<boolean> =\n             this._container.mouseService\n                .filtered$(this._component.name, this._container.mouseService.mouseDragEnd$)\n                .map(\n                    (event: MouseEvent): boolean => {\n                        return false;\n                    });\n\n        this._activeMouseSubscription = Observable\n            .merge(\n                draggingStarted$,\n                draggingStopped$)\n            .subscribe(this._container.mouseService.activate$);\n\n        let touchMovingStarted$: Observable<boolean> =\n            this._container.touchService.singleTouchDragStart$\n                .map(\n                    (event: TouchEvent): boolean => {\n                        return true;\n                    });\n\n        let touchMovingStopped$: Observable<boolean> =\n            this._container.touchService.singleTouchDragEnd$\n                .map(\n                    (event: TouchEvent): boolean => {\n                        return false;\n                    });\n\n        this._activeTouchSubscription = Observable\n            .merge(\n                touchMovingStarted$,\n                touchMovingStopped$)\n            .subscribe(this._container.touchService.activate$);\n\n        this._rotateBasicSubscription = this._navigator.stateService.currentState$\n            .map(\n                (frame: IFrame): boolean => {\n                    return frame.state.currentNode.fullPano || frame.state.nodesAhead < 1;\n                })\n            .distinctUntilChanged()\n            .switchMap(\n                (enable: boolean): Observable<MouseTouchPair> => {\n                    if (!enable) {\n                        return Observable.empty<MouseTouchPair>();\n                    }\n\n                    let mouseDrag$: Observable<[MouseEvent, MouseEvent]> = Observable\n                        .merge(\n                            this._container.mouseService.filtered$(this._component.name, this._container.mouseService.mouseDragStart$),\n                            this._container.mouseService.filtered$(this._component.name, this._container.mouseService.mouseDrag$),\n                            this._container.mouseService.filtered$(this._component.name, this._container.mouseService.mouseDragEnd$)\n                                .map((e: MouseEvent): MouseEvent => { return null; }))\n                        .pairwise()\n                        .filter(\n                            (pair: [MouseEvent, MouseEvent]): boolean => {\n                                return pair[0] != null && pair[1] != null;\n                            });\n\n                    let singleTouchDrag$: Observable<[Touch, Touch]> = Observable\n                        .merge(\n                            this._container.touchService.singleTouchDragStart$,\n                            this._container.touchService.singleTouchDrag$,\n                            this._container.touchService.singleTouchDragEnd$.map((t: TouchEvent): TouchEvent => { return null; }))\n                        .map(\n                            (event: TouchEvent): Touch => {\n                                return event != null && event.touches.length > 0 ?\n                                    event.touches[0] : null;\n                            })\n                        .pairwise()\n                        .filter(\n                            (pair: [Touch, Touch]): boolean => {\n                                return pair[0] != null && pair[1] != null;\n                            });\n\n                    return Observable\n                        .merge(\n                            mouseDrag$,\n                            singleTouchDrag$);\n                })\n            .withLatestFrom(\n                this._container.renderService.renderCamera$,\n                this._navigator.stateService.currentTransform$,\n                this._navigator.stateService.currentCamera$)\n            .map(\n                ([events, render, transform, c]: [MouseTouchPair, RenderCamera, Transform, Camera]): number[] => {\n                    let camera: Camera = c.clone();\n\n                    let previousEvent: MouseEvent | Touch = events[0];\n                    let event: MouseEvent | Touch = events[1];\n\n                    let movementX: number = event.clientX - previousEvent.clientX;\n                    let movementY: number = event.clientY - previousEvent.clientY;\n\n                    let element: HTMLElement = this._container.element;\n\n                    let [canvasX, canvasY]: number[] = this._viewportCoords.canvasPosition(event, element);\n\n                    let currentDirection: THREE.Vector3 =\n                        this._viewportCoords.unprojectFromCanvas(\n                            canvasX,\n                            canvasY,\n                            element,\n                            render.perspective)\n                                .sub(render.perspective.position);\n\n                    let directionX: THREE.Vector3 =\n                        this._viewportCoords.unprojectFromCanvas(\n                            canvasX - movementX,\n                            canvasY,\n                            element,\n                            render.perspective)\n                                .sub(render.perspective.position);\n\n                    let directionY: THREE.Vector3 =\n                        this._viewportCoords.unprojectFromCanvas(\n                            canvasX,\n                            canvasY - movementY,\n                            element,\n                            render.perspective)\n                                .sub(render.perspective.position);\n\n                    let deltaPhi: number = (movementX > 0 ? 1 : -1) * directionX.angleTo(currentDirection);\n                    let deltaTheta: number = (movementY > 0 ? -1 : 1) * directionY.angleTo(currentDirection);\n\n                    let upQuaternion: THREE.Quaternion = new THREE.Quaternion().setFromUnitVectors(camera.up, new THREE.Vector3(0, 0, 1));\n                    let upQuaternionInverse: THREE.Quaternion = upQuaternion.clone().inverse();\n\n                    let offset: THREE.Vector3 = new THREE.Vector3();\n                    offset.copy(camera.lookat).sub(camera.position);\n                    offset.applyQuaternion(upQuaternion);\n                    let length: number = offset.length();\n\n                    let phi: number = Math.atan2(offset.y, offset.x);\n                    phi += deltaPhi;\n\n                    let theta: number = Math.atan2(Math.sqrt(offset.x * offset.x + offset.y * offset.y), offset.z);\n                    theta += deltaTheta;\n                    theta = Math.max(0.01, Math.min(Math.PI - 0.01, theta));\n\n                    offset.x = Math.sin(theta) * Math.cos(phi);\n                    offset.y = Math.sin(theta) * Math.sin(phi);\n                    offset.z = Math.cos(theta);\n                    offset.applyQuaternion(upQuaternionInverse);\n\n                    let lookat: THREE.Vector3 = new THREE.Vector3().copy(camera.position).add(offset.multiplyScalar(length));\n\n                    let basic: number[] = transform.projectBasic(lookat.toArray());\n                    let original: number[] = transform.projectBasic(camera.lookat.toArray());\n\n                    let x: number = basic[0] - original[0];\n                    let y: number = basic[1] - original[1];\n\n                    if (Math.abs(x) > 1) {\n                        x = 0;\n                    } else if (x > 0.5) {\n                        x = x - 1;\n                    } else if (x < -0.5) {\n                        x = x + 1;\n                    }\n\n                    let rotationThreshold: number = this._basicRotationThreshold;\n\n                    x = this._spatial.clamp(x, -rotationThreshold, rotationThreshold);\n                    y = this._spatial.clamp(y, -rotationThreshold, rotationThreshold);\n\n                    if (transform.fullPano) {\n                        return [x, y];\n                    }\n\n                    let pixelDistances: number[] =\n                        this._viewportCoords.getPixelDistances(\n                            this._container.element,\n                            transform,\n                            render.perspective);\n\n                    let coeff: number = this._forceCoeff;\n\n                    if (pixelDistances[0] > 0 && y < 0 && basic[1] < 0.5) {\n                        y /= Math.max(1, coeff * pixelDistances[0]);\n                    }\n\n                    if (pixelDistances[1] > 0 && x > 0 && basic[0] > 0.5) {\n                        x /= Math.max(1, coeff * pixelDistances[1]);\n                    }\n\n                    if (pixelDistances[2] > 0 && y > 0 && basic[1] > 0.5) {\n                        y /= Math.max(1, coeff * pixelDistances[2]);\n                    }\n\n                    if (pixelDistances[3] > 0 && x < 0 && basic[0] < 0.5) {\n                        x /= Math.max(1, coeff * pixelDistances[3]);\n                    }\n\n                    return [x, y];\n                })\n            .subscribe(\n                (basicRotation: number[]): void => {\n                    this._navigator.stateService.rotateBasic(basicRotation);\n                });\n    }\n\n    protected _disable(): void {\n        this._activeMouseSubscription.unsubscribe();\n        this._activeTouchSubscription.unsubscribe();\n        this._preventDefaultSubscription.unsubscribe();\n        this._rotateBasicSubscription.unsubscribe();\n\n        this._activeMouseSubscription = null;\n        this._activeTouchSubscription = null;\n        this._rotateBasicSubscription = null;\n    }\n\n    protected _getConfiguration(enable: boolean): IMouseConfiguration {\n        return { dragPan: enable };\n    }\n}\n\nexport default DragPanHandler;\n",
+    "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport \"rxjs/add/observable/merge\";\n\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/withLatestFrom\";\n\nimport {\n    ComponentService,\n    Component,\n    DoubleClickZoomHandler,\n    DragPanHandler,\n    IMouseConfiguration,\n    ScrollZoomHandler,\n    TouchZoomHandler,\n} from \"../../Component\";\nimport {\n    ViewportCoords,\n    Spatial,\n    Transform,\n} from \"../../Geo\";\nimport {RenderCamera} from \"../../Render\";\nimport {IFrame} from \"../../State\";\nimport {\n    Container,\n    Navigator,\n} from \"../../Viewer\";\n\n/**\n * @class MouseComponent\n *\n * @classdesc Component handling mouse and touch events for camera movement.\n */\nexport class MouseComponent extends Component<IMouseConfiguration> {\n    /** @inheritdoc */\n    public static componentName: string = \"mouse\";\n\n    private _basicDistanceThreshold: number;\n    private _basicRotationThreshold: number;\n    private _bounceCoeff: number;\n\n    private _viewportCoords: ViewportCoords;\n    private _spatial: Spatial;\n\n    private _doubleClickZoomHandler: DoubleClickZoomHandler;\n    private _dragPanHandler: DragPanHandler;\n    private _scrollZoomHandler: ScrollZoomHandler;\n    private _touchZoomHandler: TouchZoomHandler;\n\n    private _bounceSubscription: Subscription;\n    private _configurationSubscription: Subscription;\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n\n        this._basicDistanceThreshold = 1e-3;\n        this._basicRotationThreshold = 5e-2;\n        this._bounceCoeff = 1e-1;\n\n        let spatial: Spatial = new Spatial();\n        let viewportCoords: ViewportCoords = new ViewportCoords();\n\n        this._spatial = spatial;\n        this._viewportCoords = viewportCoords;\n\n        this._doubleClickZoomHandler = new DoubleClickZoomHandler(this, container, navigator, viewportCoords);\n        this._dragPanHandler = new DragPanHandler(this, container, navigator, viewportCoords, spatial);\n        this._scrollZoomHandler = new ScrollZoomHandler(this, container, navigator, viewportCoords);\n        this._touchZoomHandler = new TouchZoomHandler(this, container, navigator, viewportCoords);\n    }\n\n    /**\n     * Get double click zoom.\n     *\n     * @returns {DoubleClickZoomHandler} The double click zoom handler.\n     */\n    public get doubleClickZoom(): DoubleClickZoomHandler {\n        return this._doubleClickZoomHandler;\n    }\n\n    /**\n     * Get drag pan.\n     *\n     * @returns {DragPanHandler} The drag pan handler.\n     */\n    public get dragPan(): DragPanHandler {\n        return this._dragPanHandler;\n    }\n\n    /**\n     * Get scroll zoom.\n     *\n     * @returns {ScrollZoomHandler} The scroll zoom handler.\n     */\n    public get scrollZoom(): ScrollZoomHandler {\n        return this._scrollZoomHandler;\n    }\n\n    /**\n     * Get touch zoom.\n     *\n     * @returns {TouchZoomHandler} The touch zoom handler.\n     */\n    public get touchZoom(): TouchZoomHandler {\n        return this._touchZoomHandler;\n    }\n\n    protected _activate(): void {\n        this._configurationSubscription = this._configuration$\n            .subscribe(\n                (configuration: IMouseConfiguration): void => {\n                    if (configuration.doubleClickZoom) {\n                        this._doubleClickZoomHandler.enable();\n                    } else {\n                        this._doubleClickZoomHandler.disable();\n                    }\n\n                    if (configuration.dragPan) {\n                        this._dragPanHandler.enable();\n                    } else {\n                        this._dragPanHandler.disable();\n                    }\n\n                    if (configuration.scrollZoom) {\n                        this._scrollZoomHandler.enable();\n                    } else {\n                        this._scrollZoomHandler.disable();\n                    }\n\n                    if (configuration.touchZoom) {\n                        this._touchZoomHandler.enable();\n                    } else {\n                        this._touchZoomHandler.disable();\n                    }\n                });\n\n        const inTransition$: Observable<boolean> = this._navigator.stateService.currentState$\n            .map(\n                (frame: IFrame): boolean => {\n                    return frame.state.alpha < 1;\n                });\n\n        this._bounceSubscription = Observable\n            .combineLatest(\n                inTransition$,\n                this._navigator.stateService.inTranslation$,\n                this._container.mouseService.active$,\n                this._container.touchService.active$)\n            .map(\n                (noForce: boolean[]): boolean => {\n                    return noForce[0] || noForce[1] || noForce[2] || noForce[3];\n                })\n            .distinctUntilChanged()\n            .switchMap(\n                (noForce: boolean): Observable<[RenderCamera, Transform]> => {\n                    return noForce ?\n                        Observable.empty() :\n                        Observable.combineLatest(\n                            this._container.renderService.renderCamera$,\n                            this._navigator.stateService.currentTransform$.first());\n                })\n            .subscribe(\n                (args: [RenderCamera, Transform]): void => {\n                    let renderCamera: RenderCamera = args[0];\n                    let perspectiveCamera: THREE.PerspectiveCamera = renderCamera.perspective;\n                    let transform: Transform = args[1];\n\n                    if (!transform.hasValidScale && renderCamera.camera.focal < 0.1) {\n                        return;\n                    }\n\n                    if (renderCamera.perspective.aspect === 0 || renderCamera.perspective.aspect === Number.POSITIVE_INFINITY) {\n                        return;\n                    }\n\n                    let distanceThreshold: number = this._basicDistanceThreshold / Math.pow(2, renderCamera.zoom);\n                    let basicCenter: number[] = this._viewportCoords.viewportToBasic(0, 0, transform, perspectiveCamera);\n\n                    if (Math.abs(basicCenter[0] - 0.5) < distanceThreshold && Math.abs(basicCenter[1] - 0.5) < distanceThreshold) {\n                        return;\n                    }\n\n                    let basicDistances: number[] = this._viewportCoords.getBasicDistances(transform, perspectiveCamera);\n                    let basicX: number = 0;\n                    let basicY: number = 0;\n\n                    if (basicDistances[0] < distanceThreshold && basicDistances[1] < distanceThreshold &&\n                        basicDistances[2] < distanceThreshold && basicDistances[3] < distanceThreshold) {\n                        return;\n                    }\n\n                    if (Math.abs(basicDistances[0] - basicDistances[2]) < distanceThreshold &&\n                        Math.abs(basicDistances[1] - basicDistances[3]) < distanceThreshold) {\n                        return;\n                    }\n\n                    let coeff: number = this._bounceCoeff;\n\n                    if (basicDistances[1] > 0 && basicDistances[3] === 0) {\n                        basicX = -coeff * basicDistances[1];\n                    } else if (basicDistances[1] === 0 && basicDistances[3] > 0) {\n                        basicX = coeff * basicDistances[3];\n                    } else if (basicDistances[1] > 0 && basicDistances[3] > 0) {\n                        basicX = coeff * (basicDistances[3] - basicDistances[1]) / 2;\n                    }\n\n                    if (basicDistances[0] > 0 && basicDistances[2] === 0) {\n                        basicY = coeff * basicDistances[0];\n                    } else if (basicDistances[0] === 0 && basicDistances[2] > 0) {\n                        basicY = -coeff * basicDistances[2];\n                    } else if (basicDistances[0] > 0 && basicDistances[2] > 0) {\n                        basicY = coeff * (basicDistances[0] - basicDistances[2]) / 2;\n                    }\n\n                    let rotationThreshold: number = this._basicRotationThreshold;\n\n                    basicX = this._spatial.clamp(basicX, -rotationThreshold, rotationThreshold);\n                    basicY = this._spatial.clamp(basicY, -rotationThreshold, rotationThreshold);\n\n                    this._navigator.stateService.rotateBasicUnbounded([basicX, basicY]);\n                });\n\n        this._container.mouseService.claimMouse(this._name, 0);\n    }\n\n    protected _deactivate(): void {\n        this._container.mouseService.unclaimMouse(this._name);\n\n        this._bounceSubscription.unsubscribe();\n        this._configurationSubscription.unsubscribe();\n\n        this._doubleClickZoomHandler.disable();\n        this._dragPanHandler.disable();\n        this._scrollZoomHandler.disable();\n        this._touchZoomHandler.disable();\n    }\n\n    protected _getDefaultConfiguration(): IMouseConfiguration {\n        return { doubleClickZoom: true, dragPan: true, scrollZoom: true, touchZoom: true };\n    }\n}\n\nComponentService.register(MouseComponent);\nexport default MouseComponent;\n",
     "import {\n    Component,\n    IComponentConfiguration,\n} from \"../../Component\";\nimport {ViewportCoords} from \"../../Geo\";\nimport {\n    Container,\n    Navigator,\n} from \"../../Viewer\";\n\nexport abstract class MouseHandlerBase<TConfiguration extends IComponentConfiguration> {\n    protected _component: Component<TConfiguration>;\n    protected _container: Container;\n    protected _navigator: Navigator;\n    protected _viewportCoords: ViewportCoords;\n\n    protected _enabled: boolean;\n\n    constructor(component: Component<TConfiguration>, container: Container, navigator: Navigator, viewportCoords: ViewportCoords) {\n        this._component = component;\n        this._container = container;\n        this._navigator = navigator;\n        this._viewportCoords = viewportCoords;\n\n        this._enabled = false;\n    }\n\n    /**\n     * Returns a Boolean indicating whether the interaction is enabled.\n     *\n     * @returns {boolean} `true` if the interaction is enabled.\n     */\n    public get isEnabled(): boolean {\n        return this._enabled;\n    }\n\n    /**\n     * Enables the interaction.\n     *\n     * @example ```mouseComponent.<handler-name>.enable();```\n     */\n    public enable(): void {\n        if (this._enabled || !this._component.activated) { return; }\n\n        this._enable();\n        this._enabled = true;\n\n        this._component.configure(this._getConfiguration(true));\n    }\n\n    /**\n     * Disables the interaction.\n     *\n     * @example ```mouseComponent.<handler-name>.disable();```\n     */\n    public disable(): void {\n        if (!this._enabled) { return; }\n\n        this._disable();\n        this._enabled = false;\n\n        if (this._component.activated) {\n            this._component.configure(this._getConfiguration(false));\n        }\n    }\n\n    protected abstract _enable(): void;\n\n    protected abstract _disable(): void;\n\n    protected abstract _getConfiguration(enable: boolean): TConfiguration;\n}\n\nexport default MouseHandlerBase;\n",
     "import {\n    Component,\n    IComponentConfiguration,\n} from \"../../Component\";\nimport {ViewportCoords} from \"../../Geo\";\nimport {\n    Container,\n    Navigator,\n} from \"../../Viewer\";\n\nexport abstract class MouseHandlerBase<TConfiguration extends IComponentConfiguration> {\n    protected _component: Component<TConfiguration>;\n    protected _container: Container;\n    protected _navigator: Navigator;\n    protected _viewportCoords: ViewportCoords;\n\n    protected _enabled: boolean;\n\n    constructor(component: Component<TConfiguration>, container: Container, navigator: Navigator, viewportCoords: ViewportCoords) {\n        this._component = component;\n        this._container = container;\n        this._navigator = navigator;\n        this._viewportCoords = viewportCoords;\n\n        this._enabled = false;\n    }\n\n    /**\n     * Returns a Boolean indicating whether the interaction is enabled.\n     *\n     * @returns {boolean} `true` if the interaction is enabled.\n     */\n    public get isEnabled(): boolean {\n        return this._enabled;\n    }\n\n    /**\n     * Enables the interaction.\n     *\n     * @example ```mouseComponent.<handler-name>.enable();```\n     */\n    public enable(): void {\n        if (this._enabled || !this._component.activated) { return; }\n\n        this._enable();\n        this._enabled = true;\n\n        this._component.configure(this._getConfiguration(true));\n    }\n\n    /**\n     * Disables the interaction.\n     *\n     * @example ```mouseComponent.<handler-name>.disable();```\n     */\n    public disable(): void {\n        if (!this._enabled) { return; }\n\n        this._disable();\n        this._enabled = false;\n\n        if (this._component.activated) {\n            this._component.configure(this._getConfiguration(false));\n        }\n    }\n\n    protected abstract _enable(): void;\n\n    protected abstract _disable(): void;\n\n    protected abstract _getConfiguration(enable: boolean): TConfiguration;\n}\n\nexport default MouseHandlerBase;\n",
-    "import {Subscription} from \"rxjs/Subscription\";\n\nimport {\n    IMouseConfiguration,\n    MouseHandlerBase,\n} from \"../../Component\";\nimport {Transform} from \"../../Geo\";\nimport {RenderCamera} from \"../../Render\";\nimport {\n    ICurrentState,\n    IFrame,\n} from \"../../State\";\n\n/**\n * The `ScrollZoomHandler` allows the user to zoom the viewer photo by scrolling.\n */\nexport class ScrollZoomHandler extends MouseHandlerBase<IMouseConfiguration> {\n    private _preventDefaultSubscription: Subscription;\n    private _zoomSubscription: Subscription;\n\n    protected _enable(): void {\n        this._preventDefaultSubscription = this._container.mouseService.mouseWheel$\n            .subscribe(\n                (event: WheelEvent): void => {\n                    event.preventDefault();\n                });\n\n        this._zoomSubscription = this._container.mouseService\n            .filtered$(this._component.name, this._container.mouseService.mouseWheel$)\n            .withLatestFrom(\n                this._navigator.stateService.currentState$,\n                (w: WheelEvent, f: IFrame): [WheelEvent, IFrame] => {\n                    return [w, f];\n                })\n            .filter(\n                (args: [WheelEvent, IFrame]): boolean => {\n                    let state: ICurrentState = args[1].state;\n                    return state.currentNode.fullPano || state.nodesAhead < 1;\n                })\n            .map(\n                (args: [WheelEvent, IFrame]): WheelEvent => {\n                    return args[0];\n                })\n            .withLatestFrom(\n                this._container.renderService.renderCamera$,\n                this._navigator.stateService.currentTransform$,\n                (w: WheelEvent, r: RenderCamera, t: Transform): [WheelEvent, RenderCamera, Transform] => {\n                    return [w, r, t];\n                })\n            .subscribe(\n                (args: [WheelEvent, RenderCamera, Transform]): void => {\n                    let event: WheelEvent = args[0];\n                    let render: RenderCamera = args[1];\n                    let transform: Transform = args[2];\n\n                    let element: HTMLElement = this._container.element;\n\n                    let [canvasX, canvasY]: number[] = this._viewportCoords.canvasPosition(event, element);\n\n                    let unprojected: THREE.Vector3 =\n                        this._viewportCoords.unprojectFromCanvas(\n                            canvasX,\n                            canvasY,\n                            element,\n                            render.perspective);\n\n                    let reference: number[] = transform.projectBasic(unprojected.toArray());\n\n                    let deltaY: number = event.deltaY;\n                    if (event.deltaMode === 1) {\n                        deltaY = 40 * deltaY;\n                    } else if (event.deltaMode === 2) {\n                        deltaY = 800 * deltaY;\n                    }\n\n                    const canvasSize: number[] = this._viewportCoords.containerToCanvas(element);\n\n                    let zoom: number = -3 * deltaY / canvasSize[1];\n\n                    this._navigator.stateService.zoomIn(zoom, reference);\n                });\n    }\n\n    protected _disable(): void {\n        this._preventDefaultSubscription.unsubscribe();\n        this._zoomSubscription.unsubscribe();\n\n        this._preventDefaultSubscription = null;\n        this._zoomSubscription = null;\n    }\n\n    protected _getConfiguration(enable: boolean): IMouseConfiguration {\n        return { scrollZoom: enable };\n    }\n}\n\nexport default ScrollZoomHandler;\n",
-    "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport {\n    IMouseConfiguration,\n    MouseHandlerBase,\n} from \"../../Component\";\nimport {Transform} from \"../../Geo\";\nimport {RenderCamera} from \"../../Render\";\nimport {\n    ICurrentState,\n    IFrame,\n} from \"../../State\";\nimport {IPinch} from \"../../Viewer\";\n\n/**\n * The `TouchZoomHandler` allows the user to zoom the viewer photo by pinching on a touchscreen.\n */\nexport class TouchZoomHandler extends MouseHandlerBase<IMouseConfiguration> {\n    private _activeSubscription: Subscription;\n    private _preventDefaultSubscription: Subscription;\n    private _zoomSubscription: Subscription;\n\n    protected _enable(): void {\n        this._preventDefaultSubscription = this._container.touchService.pinch$\n            .subscribe(\n                (pinch: IPinch): void => {\n                    pinch.originalEvent.preventDefault();\n                });\n\n        let pinchStarted$: Observable<boolean> =\n            this._container.touchService.pinchStart$\n                .map(\n                    (event: TouchEvent): boolean => {\n                        return true;\n                    });\n\n        let pinchStopped$: Observable<boolean> =\n            this._container.touchService.pinchEnd$\n                .map(\n                    (event: TouchEvent): boolean => {\n                        return false;\n                    });\n\n        this._activeSubscription = Observable\n            .merge(\n                pinchStarted$,\n                pinchStopped$)\n            .subscribe(this._container.touchService.activate$);\n\n        this._zoomSubscription = this._container.touchService.pinch$\n            .withLatestFrom(this._navigator.stateService.currentState$)\n            .filter(\n                (args: [IPinch, IFrame]): boolean => {\n                    let state: ICurrentState = args[1].state;\n                    return state.currentNode.fullPano || state.nodesAhead < 1;\n                })\n            .map(\n                (args: [IPinch, IFrame]): IPinch => {\n                    return args[0];\n                })\n            .withLatestFrom(\n                this._container.renderService.renderCamera$,\n                this._navigator.stateService.currentTransform$)\n            .subscribe(\n                ([pinch, render, transform]: [IPinch, RenderCamera, Transform]): void => {\n                    let element: HTMLElement = this._container.element;\n\n\n                    let [canvasX, canvasY]: number[] = this._viewportCoords.canvasPosition(pinch, element);\n\n                    let unprojected: THREE.Vector3 =\n                        this._viewportCoords.unprojectFromCanvas(\n                            canvasX,\n                            canvasY,\n                            element,\n                            render.perspective);\n\n                    let reference: number[] = transform.projectBasic(unprojected.toArray());\n\n                    const [canvasWidth, canvasHeight]: number[] = this._viewportCoords.containerToCanvas(element);\n                    let zoom: number = 3 * pinch.distanceChange / Math.min(canvasWidth, canvasHeight);\n\n                    this._navigator.stateService.zoomIn(zoom, reference);\n                });\n    }\n\n    protected _disable(): void {\n        this._activeSubscription.unsubscribe();\n        this._preventDefaultSubscription.unsubscribe();\n        this._zoomSubscription.unsubscribe();\n\n        this._preventDefaultSubscription = null;\n        this._zoomSubscription = null;\n    }\n\n    protected _getConfiguration(enable: boolean): IMouseConfiguration {\n        return { touchZoom: enable };\n    }\n}\n\nexport default TouchZoomHandler;\n",
+    "import {Subscription} from \"rxjs/Subscription\";\n\nimport {\n    IMouseConfiguration,\n    MouseHandlerBase,\n} from \"../../Component\";\nimport {Transform} from \"../../Geo\";\nimport {RenderCamera} from \"../../Render\";\nimport {\n    ICurrentState,\n    IFrame,\n} from \"../../State\";\n\n/**\n * The `ScrollZoomHandler` allows the user to zoom the viewer photo by scrolling.\n *\n * @example\n * ```\n * var mouseComponent = viewer.getComponent(\"mouse\");\n *\n * mouseComponent.scrollZoom.disable();\n * mouseComponent.scrollZoom.enable();\n *\n * var isEnabled = mouseComponent.scrollZoom.isEnabled;\n * ```\n */\nexport class ScrollZoomHandler extends MouseHandlerBase<IMouseConfiguration> {\n    private _preventDefaultSubscription: Subscription;\n    private _zoomSubscription: Subscription;\n\n    protected _enable(): void {\n        this._preventDefaultSubscription = this._container.mouseService.mouseWheel$\n            .subscribe(\n                (event: WheelEvent): void => {\n                    event.preventDefault();\n                });\n\n        this._zoomSubscription = this._container.mouseService\n            .filtered$(this._component.name, this._container.mouseService.mouseWheel$)\n            .withLatestFrom(\n                this._navigator.stateService.currentState$,\n                (w: WheelEvent, f: IFrame): [WheelEvent, IFrame] => {\n                    return [w, f];\n                })\n            .filter(\n                (args: [WheelEvent, IFrame]): boolean => {\n                    let state: ICurrentState = args[1].state;\n                    return state.currentNode.fullPano || state.nodesAhead < 1;\n                })\n            .map(\n                (args: [WheelEvent, IFrame]): WheelEvent => {\n                    return args[0];\n                })\n            .withLatestFrom(\n                this._container.renderService.renderCamera$,\n                this._navigator.stateService.currentTransform$,\n                (w: WheelEvent, r: RenderCamera, t: Transform): [WheelEvent, RenderCamera, Transform] => {\n                    return [w, r, t];\n                })\n            .subscribe(\n                (args: [WheelEvent, RenderCamera, Transform]): void => {\n                    let event: WheelEvent = args[0];\n                    let render: RenderCamera = args[1];\n                    let transform: Transform = args[2];\n\n                    let element: HTMLElement = this._container.element;\n\n                    let [canvasX, canvasY]: number[] = this._viewportCoords.canvasPosition(event, element);\n\n                    let unprojected: THREE.Vector3 =\n                        this._viewportCoords.unprojectFromCanvas(\n                            canvasX,\n                            canvasY,\n                            element,\n                            render.perspective);\n\n                    let reference: number[] = transform.projectBasic(unprojected.toArray());\n\n                    let deltaY: number = event.deltaY;\n                    if (event.deltaMode === 1) {\n                        deltaY = 40 * deltaY;\n                    } else if (event.deltaMode === 2) {\n                        deltaY = 800 * deltaY;\n                    }\n\n                    const canvasSize: number[] = this._viewportCoords.containerToCanvas(element);\n\n                    let zoom: number = -3 * deltaY / canvasSize[1];\n\n                    this._navigator.stateService.zoomIn(zoom, reference);\n                });\n    }\n\n    protected _disable(): void {\n        this._preventDefaultSubscription.unsubscribe();\n        this._zoomSubscription.unsubscribe();\n\n        this._preventDefaultSubscription = null;\n        this._zoomSubscription = null;\n    }\n\n    protected _getConfiguration(enable: boolean): IMouseConfiguration {\n        return { scrollZoom: enable };\n    }\n}\n\nexport default ScrollZoomHandler;\n",
+    "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport {\n    IMouseConfiguration,\n    MouseHandlerBase,\n} from \"../../Component\";\nimport {Transform} from \"../../Geo\";\nimport {RenderCamera} from \"../../Render\";\nimport {\n    ICurrentState,\n    IFrame,\n} from \"../../State\";\nimport {IPinch} from \"../../Viewer\";\n\n/**\n * The `TouchZoomHandler` allows the user to zoom the viewer photo by pinching on a touchscreen.\n *\n * @example\n * ```\n * var mouseComponent = viewer.getComponent(\"mouse\");\n *\n * mouseComponent.touchZoom.disable();\n * mouseComponent.touchZoom.enable();\n *\n * var isEnabled = mouseComponent.touchZoom.isEnabled;\n * ```\n */\nexport class TouchZoomHandler extends MouseHandlerBase<IMouseConfiguration> {\n    private _activeSubscription: Subscription;\n    private _preventDefaultSubscription: Subscription;\n    private _zoomSubscription: Subscription;\n\n    protected _enable(): void {\n        this._preventDefaultSubscription = this._container.touchService.pinch$\n            .subscribe(\n                (pinch: IPinch): void => {\n                    pinch.originalEvent.preventDefault();\n                });\n\n        let pinchStarted$: Observable<boolean> =\n            this._container.touchService.pinchStart$\n                .map(\n                    (event: TouchEvent): boolean => {\n                        return true;\n                    });\n\n        let pinchStopped$: Observable<boolean> =\n            this._container.touchService.pinchEnd$\n                .map(\n                    (event: TouchEvent): boolean => {\n                        return false;\n                    });\n\n        this._activeSubscription = Observable\n            .merge(\n                pinchStarted$,\n                pinchStopped$)\n            .subscribe(this._container.touchService.activate$);\n\n        this._zoomSubscription = this._container.touchService.pinch$\n            .withLatestFrom(this._navigator.stateService.currentState$)\n            .filter(\n                (args: [IPinch, IFrame]): boolean => {\n                    let state: ICurrentState = args[1].state;\n                    return state.currentNode.fullPano || state.nodesAhead < 1;\n                })\n            .map(\n                (args: [IPinch, IFrame]): IPinch => {\n                    return args[0];\n                })\n            .withLatestFrom(\n                this._container.renderService.renderCamera$,\n                this._navigator.stateService.currentTransform$)\n            .subscribe(\n                ([pinch, render, transform]: [IPinch, RenderCamera, Transform]): void => {\n                    let element: HTMLElement = this._container.element;\n\n\n                    let [canvasX, canvasY]: number[] = this._viewportCoords.canvasPosition(pinch, element);\n\n                    let unprojected: THREE.Vector3 =\n                        this._viewportCoords.unprojectFromCanvas(\n                            canvasX,\n                            canvasY,\n                            element,\n                            render.perspective);\n\n                    let reference: number[] = transform.projectBasic(unprojected.toArray());\n\n                    const [canvasWidth, canvasHeight]: number[] = this._viewportCoords.containerToCanvas(element);\n                    let zoom: number = 3 * pinch.distanceChange / Math.min(canvasWidth, canvasHeight);\n\n                    this._navigator.stateService.zoomIn(zoom, reference);\n                });\n    }\n\n    protected _disable(): void {\n        this._activeSubscription.unsubscribe();\n        this._preventDefaultSubscription.unsubscribe();\n        this._zoomSubscription.unsubscribe();\n\n        this._preventDefaultSubscription = null;\n        this._zoomSubscription = null;\n    }\n\n    protected _getConfiguration(enable: boolean): IMouseConfiguration {\n        return { touchZoom: enable };\n    }\n}\n\nexport default TouchZoomHandler;\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as vd from \"virtual-dom\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/observable/combineLatest\";\nimport \"rxjs/add/observable/of\";\n\nimport \"rxjs/add/operator/bufferCount\";\nimport \"rxjs/add/operator/concat\";\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/finally\";\nimport \"rxjs/add/operator/first\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/share\";\nimport \"rxjs/add/operator/switchMap\";\nimport \"rxjs/add/operator/takeUntil\";\nimport \"rxjs/add/operator/withLatestFrom\";\n\nimport {\n    Component,\n    ComponentService,\n    ISequenceConfiguration,\n    SequenceDOMRenderer,\n    SequenceDOMInteraction,\n} from \"../../Component\";\nimport {EdgeDirection} from \"../../Edge\";\nimport {IEdgeStatus, Node} from \"../../Graph\";\nimport {IVNodeHash} from \"../../Render\";\nimport {IFrame} from \"../../State\";\nimport {Container, Navigator} from \"../../Viewer\";\n\ninterface IConfigurationOperation {\n    (configuration: ISequenceConfiguration): ISequenceConfiguration;\n}\n\n/**\n * @class SequenceComponent\n * @classdesc Component showing navigation arrows for sequence directions\n * as well as playing button. Exposes an API to start and stop play.\n */\nexport class SequenceComponent extends Component<ISequenceConfiguration> {\n    /** @inheritdoc */\n    public static componentName: string = \"sequence\";\n\n    /**\n     * Event fired when playing starts or stops.\n     *\n     * @event PlayerComponent#playingchanged\n     * @type {boolean} Indicates whether the player is playing.\n     */\n    public static playingchanged: string = \"playingchanged\";\n\n    private _sequenceDOMRenderer: SequenceDOMRenderer;\n    private _sequenceDOMInteraction: SequenceDOMInteraction;\n    private _nodesAhead: number = 5;\n\n    private _configurationOperation$: Subject<IConfigurationOperation> = new Subject<IConfigurationOperation>();\n    private _hoveredKeySubject$: Subject<string>;\n    private _hoveredKey$: Observable<string>;\n    private _containerWidth$: Subject<number>;\n    private _edgeStatus$: Observable<IEdgeStatus>;\n\n    private _configurationSubscription: Subscription;\n    private _renderSubscription: Subscription;\n    private _containerWidthSubscription: Subscription;\n    private _hoveredKeySubscription: Subscription;\n\n    private _playingSubscription: Subscription;\n    private _clearSubscription: Subscription;\n    private _stopSubscription: Subscription;\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n\n        this._sequenceDOMRenderer = new SequenceDOMRenderer(container.element);\n        this._sequenceDOMInteraction = new SequenceDOMInteraction();\n\n        this._containerWidth$ = new Subject<number>();\n        this._hoveredKeySubject$ = new Subject<string>();\n\n        this._hoveredKey$ = this._hoveredKeySubject$.share();\n\n        this._edgeStatus$ = this._navigator.stateService.currentNode$\n            .switchMap(\n                (node: Node): Observable<IEdgeStatus> => {\n                    return node.sequenceEdges$;\n                })\n            .publishReplay(1)\n            .refCount();\n    }\n\n    /**\n     * Get hovered key observable.\n     *\n     * @description An observable emitting the key of the node for the direction\n     * arrow that is being hovered. When the mouse leaves a direction arrow null\n     * is emitted.\n     *\n     * @returns {Observable<string>}\n     */\n    public get hoveredKey$(): Observable<string> {\n        return this._hoveredKey$;\n    }\n\n    /**\n     * Start playing.\n     *\n     * @fires PlayerComponent#playingchanged\n     */\n    public play(): void {\n        this.configure({ playing: true });\n    }\n\n    /**\n     * Stop playing.\n     *\n     * @fires PlayerComponent#playingchanged\n     */\n    public stop(): void {\n        this.configure({ playing: false });\n    }\n\n    /**\n     * Set the direction to follow when playing.\n     *\n     * @param {EdgeDirection} direction - The direction that will be followed when playing.\n     */\n    public setDirection(direction: EdgeDirection): void {\n        this.configure({ direction: direction });\n    }\n\n    /**\n     * Set highlight key.\n     *\n     * @description The arrow pointing towards the node corresponding to the\n     * highlight key will be highlighted.\n     *\n     * @param {string} highlightKey Key of node to be highlighted if existing.\n     */\n    public setHighlightKey(highlightKey: string): void {\n        this.configure({ highlightKey: highlightKey });\n    }\n\n    /**\n     * Set max width of container element.\n     *\n     * @description Set max width of the container element holding\n     * the sequence navigation elements. If the min width is larger than the\n     * max width the min width value will be used.\n     *\n     * The container element is automatically resized when the resize\n     * method on the Viewer class is called.\n     *\n     * @param {number} minWidth\n     */\n    public setMaxWidth(maxWidth: number): void {\n        this.configure({ maxWidth: maxWidth });\n    }\n\n    /**\n     * Set min width of container element.\n     *\n     * @description Set min width of the container element holding\n     * the sequence navigation elements. If the min width is larger than the\n     * max width the min width value will be used.\n     *\n     * The container element is automatically resized when the resize\n     * method on the Viewer class is called.\n     *\n     * @param {number} minWidth\n     */\n    public setMinWidth(minWidth: number): void {\n        this.configure({ minWidth: minWidth });\n    }\n\n    /**\n     * Set the value indicating whether the sequence UI elements should be visible.\n     *\n     * @param {boolean} visible\n     */\n    public setVisible(visible: boolean): void {\n        this.configure({ visible: visible });\n    }\n\n    /** @inheritdoc */\n    public resize(): void {\n        this._configuration$\n            .first()\n            .map(\n                (configuration: ISequenceConfiguration): number => {\n                    return this._sequenceDOMRenderer.getContainerWidth(\n                        this._container.element,\n                        configuration);\n                })\n            .subscribe(\n                (containerWidth: number): void => {\n                    this._containerWidth$.next(containerWidth);\n                });\n    }\n\n    protected _activate(): void {\n        this._renderSubscription = Observable\n            .combineLatest(\n                this._edgeStatus$,\n                this._configuration$,\n                this._containerWidth$)\n            .map(\n                (ec: [IEdgeStatus, ISequenceConfiguration, number]): IVNodeHash => {\n                    let edgeStatus: IEdgeStatus = ec[0];\n                    let configuration: ISequenceConfiguration = ec[1];\n                    let containerWidth: number = ec[2];\n\n                    let vNode: vd.VNode = this._sequenceDOMRenderer\n                        .render(\n                            edgeStatus,\n                            configuration,\n                            containerWidth,\n                            this,\n                            this._sequenceDOMInteraction,\n                            this._navigator);\n\n                    return {name: this._name, vnode: vNode };\n                })\n            .subscribe(this._container.domRenderer.render$);\n\n        this._containerWidthSubscription = this._configuration$\n            .distinctUntilChanged(\n                (value1: [number, number], value2: [number, number]): boolean => {\n                    return value1[0] === value2[0] && value1[1] === value2[1];\n                },\n                (configuration: ISequenceConfiguration) => {\n                    return [configuration.minWidth, configuration.maxWidth];\n                })\n            .map(\n                (configuration: ISequenceConfiguration): number => {\n                    return this._sequenceDOMRenderer.getContainerWidth(\n                        this._container.element,\n                        configuration);\n                })\n            .subscribe(this._containerWidth$);\n\n        this._configurationSubscription = this._configurationOperation$\n            .scan<ISequenceConfiguration>(\n                (configuration: ISequenceConfiguration, operation: IConfigurationOperation): ISequenceConfiguration => {\n                    return operation(configuration);\n                },\n                { playing: false })\n            .finally(\n                (): void => {\n                    if (this._playingSubscription != null) {\n                        this._navigator.stateService.cutNodes();\n                        this._stop();\n                    }\n                })\n            .subscribe(() => { /*noop*/ });\n\n        this._configuration$\n            .map(\n                (newConfiguration: ISequenceConfiguration) => {\n                    return (configuration: ISequenceConfiguration): ISequenceConfiguration => {\n                        if (newConfiguration.playing !== configuration.playing) {\n\n                            this._navigator.stateService.cutNodes();\n\n                            if (newConfiguration.playing) {\n                                this._play();\n                            } else {\n                                this._stop();\n                            }\n                        }\n\n                        configuration.playing = newConfiguration.playing;\n\n                        return configuration;\n                    };\n                })\n            .subscribe(this._configurationOperation$);\n\n        this._stopSubscription = this._configuration$\n            .switchMap(\n                (configuration: ISequenceConfiguration): Observable<[IEdgeStatus, EdgeDirection]> => {\n                    let edgeStatus$: Observable<IEdgeStatus> = configuration.playing ?\n                        this._edgeStatus$ :\n                        Observable.empty<IEdgeStatus>();\n\n                    let edgeDirection$: Observable<EdgeDirection> = Observable\n                        .of(configuration.direction);\n\n                    return Observable\n                        .combineLatest<IEdgeStatus, EdgeDirection>(edgeStatus$, edgeDirection$);\n                })\n            .map(\n                (ne: [IEdgeStatus, EdgeDirection]): boolean => {\n                    let edgeStatus: IEdgeStatus = ne[0];\n                    let direction: EdgeDirection = ne[1];\n\n                    if (!edgeStatus.cached) {\n                        return true;\n                    }\n\n                    for (let edge of edgeStatus.edges) {\n                        if (edge.data.direction === direction) {\n                            return true;\n                        }\n                    }\n\n                    return false;\n                })\n            .filter(\n                (hasEdge: boolean): boolean => {\n                    return !hasEdge;\n                })\n            .map(\n                (hasEdge: boolean): ISequenceConfiguration => {\n                    return { playing: false };\n                })\n            .subscribe(this._configurationSubject$);\n\n        this._hoveredKeySubscription = this._sequenceDOMInteraction.mouseEnterDirection$\n            .switchMap(\n                (direction: EdgeDirection): Observable<string> => {\n                    return this._edgeStatus$\n                        .map(\n                            (edgeStatus: IEdgeStatus): string => {\n                                for (let edge of edgeStatus.edges) {\n                                    if (edge.data.direction === direction) {\n                                        return edge.to;\n                                    }\n                                }\n\n                                return null;\n                            })\n                        .takeUntil(this._sequenceDOMInteraction.mouseLeaveDirection$)\n                        .concat<string>(Observable.of<string>(null));\n                })\n            .distinctUntilChanged()\n            .subscribe(this._hoveredKeySubject$);\n    }\n\n    protected _deactivate(): void {\n        this._stopSubscription.unsubscribe();\n        this._renderSubscription.unsubscribe();\n        this._configurationSubscription.unsubscribe();\n        this._containerWidthSubscription.unsubscribe();\n        this._hoveredKeySubscription.unsubscribe();\n\n        this.stop();\n    }\n\n    protected _getDefaultConfiguration(): ISequenceConfiguration {\n        return {\n            direction: EdgeDirection.Next,\n            maxWidth: 117,\n            minWidth: 70,\n            playing: false,\n            visible: true,\n        };\n    }\n\n    private _play(): void {\n        this._playingSubscription = this._navigator.stateService.currentState$\n            .filter(\n                (frame: IFrame): boolean => {\n                    return frame.state.nodesAhead < this._nodesAhead;\n                })\n            .map(\n                (frame: IFrame): Node => {\n                    return frame.state.lastNode;\n                })\n            .distinctUntilChanged(\n                undefined,\n                (lastNode: Node): string => {\n                    return lastNode.key;\n                })\n            .withLatestFrom(\n                this._configuration$,\n                (lastNode: Node, configuration: ISequenceConfiguration): [Node, EdgeDirection] => {\n                    return [lastNode, configuration.direction];\n                })\n            .switchMap(\n                (nd: [Node, EdgeDirection]): Observable<[IEdgeStatus, EdgeDirection]> => {\n                    return ([EdgeDirection.Next, EdgeDirection.Prev].indexOf(nd[1]) > -1 ?\n                            nd[0].sequenceEdges$ :\n                            nd[0].spatialEdges$)\n                        .filter(\n                            (status: IEdgeStatus): boolean => {\n                                return status.cached;\n                            })\n                        .zip(\n                            Observable.of<EdgeDirection>(nd[1]),\n                            (status: IEdgeStatus, direction: EdgeDirection): [IEdgeStatus, EdgeDirection] => {\n                                return [status, direction];\n                            });\n                })\n            .map(\n                (ed: [IEdgeStatus, EdgeDirection]): string => {\n                    let direction: EdgeDirection = ed[1];\n\n                    for (let edge of ed[0].edges) {\n                        if (edge.data.direction === direction) {\n                            return edge.to;\n                        }\n                    }\n\n                    return null;\n                })\n            .filter(\n                (key: string): boolean => {\n                    return key != null;\n                })\n            .switchMap(\n                (key: string): Observable<Node> => {\n                    return this._navigator.graphService.cacheNode$(key);\n                })\n            .subscribe(\n                (node: Node): void => {\n                    this._navigator.stateService.appendNodes([node]);\n                },\n                (error: Error): void => {\n                    console.error(error);\n                    this.stop();\n                }\n            );\n\n        this._clearSubscription = this._navigator.stateService.currentNode$\n            .bufferCount(1, 7)\n            .subscribe(\n                (nodes: Node[]): void => {\n                    this._navigator.stateService.clearPriorNodes();\n                });\n\n        this.fire(SequenceComponent.playingchanged, true);\n    }\n\n    private _stop(): void {\n        this._playingSubscription.unsubscribe();\n        this._playingSubscription = null;\n\n        this._clearSubscription.unsubscribe();\n        this._clearSubscription = null;\n\n        this.fire(SequenceComponent.playingchanged, false);\n    }\n}\n\nComponentService.register(SequenceComponent);\nexport default SequenceComponent;\n",
     "import {Subject} from \"rxjs/Subject\";\n\nimport {EdgeDirection} from \"../../Edge\";\n\nexport class SequenceDOMInteraction {\n    private _mouseEnterDirection$: Subject<EdgeDirection>;\n    private _mouseLeaveDirection$: Subject<EdgeDirection>;\n\n    constructor() {\n        this._mouseEnterDirection$ = new Subject<EdgeDirection>();\n        this._mouseLeaveDirection$ = new Subject<EdgeDirection>();\n    }\n\n    public get mouseEnterDirection$(): Subject<EdgeDirection> {\n        return this._mouseEnterDirection$;\n    }\n\n    public get mouseLeaveDirection$(): Subject<EdgeDirection> {\n        return this._mouseLeaveDirection$;\n    }\n}\n\nexport default SequenceDOMInteraction;\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as vd from \"virtual-dom\";\n\nimport {\n    ISequenceConfiguration,\n    SequenceComponent,\n    SequenceDOMInteraction,\n} from \"../../Component\";\nimport {EdgeDirection} from \"../../Edge\";\nimport {IEdgeStatus, Node} from \"../../Graph\";\nimport {Navigator} from \"../../Viewer\";\n\nexport class SequenceDOMRenderer {\n    private _minThresholdWidth: number;\n    private _maxThresholdWidth: number;\n    private _minThresholdHeight: number;\n    private _maxThresholdHeight: number;\n\n    constructor(element: HTMLElement) {\n        this._minThresholdWidth = 320;\n        this._maxThresholdWidth = 1480;\n        this._minThresholdHeight = 240;\n        this._maxThresholdHeight = 820;\n    }\n\n    public render(\n        edgeStatus: IEdgeStatus,\n        configuration: ISequenceConfiguration,\n        containerWidth: number,\n        component: SequenceComponent,\n        interaction: SequenceDOMInteraction,\n        navigator: Navigator): vd.VNode {\n\n        if (configuration.visible === false) {\n            return vd.h(\"div.SequenceContainer\", {}, []);\n        }\n\n        let nextKey: string = null;\n        let prevKey: string = null;\n\n        for (let edge of edgeStatus.edges) {\n            if (edge.data.direction === EdgeDirection.Next) {\n                nextKey = edge.to;\n            }\n\n            if (edge.data.direction === EdgeDirection.Prev) {\n                prevKey = edge.to;\n            }\n        }\n\n        let playingButton: vd.VNode = this._createPlayingButton(nextKey, prevKey, configuration, component);\n        let arrows: vd.VNode[] = this._createSequenceArrows(nextKey, prevKey, configuration, interaction, navigator);\n\n        let containerProperties: vd.createProperties = {\n            oncontextmenu: (event: MouseEvent): void => { event.preventDefault(); },\n            style: { height: (0.27 * containerWidth) + \"px\", width: containerWidth + \"px\" },\n        };\n\n        return vd.h(\"div.SequenceContainer\", containerProperties, arrows.concat([playingButton]));\n    }\n\n    public getContainerWidth(element: HTMLElement, configuration: ISequenceConfiguration): number {\n        let elementWidth: number = element.offsetWidth;\n        let elementHeight: number = element.offsetHeight;\n\n        let minWidth: number = configuration.minWidth;\n        let maxWidth: number = configuration.maxWidth;\n        if (maxWidth < minWidth) {\n            maxWidth = minWidth;\n        }\n\n        let relativeWidth: number =\n            (elementWidth - this._minThresholdWidth) / (this._maxThresholdWidth - this._minThresholdWidth);\n        let relativeHeight: number =\n            (elementHeight - this._minThresholdHeight) / (this._maxThresholdHeight - this._minThresholdHeight);\n\n        let coeff: number = Math.max(0, Math.min(1, Math.min(relativeWidth, relativeHeight)));\n\n        return minWidth + coeff * (maxWidth - minWidth);\n    }\n\n    private _createPlayingButton(\n        nextKey: string,\n        prevKey: string,\n        configuration: ISequenceConfiguration,\n        component: SequenceComponent): vd.VNode {\n\n        let canPlay: boolean = configuration.direction === EdgeDirection.Next && nextKey != null ||\n            configuration.direction === EdgeDirection.Prev && prevKey != null;\n\n        let onclick: (e: Event) => void = configuration.playing ?\n            (e: Event): void => { component.stop(); } :\n            canPlay ? (e: Event): void => { component.play(); } : null;\n\n        let buttonProperties: vd.createProperties = {\n            onclick: onclick,\n            style: {\n\n            },\n        };\n\n        let iconClass: string = configuration.playing ?\n            \"Stop\" :\n            canPlay ? \"Play\" : \"PlayDisabled\";\n\n        let icon: vd.VNode = vd.h(\"div.SequenceComponentIcon\", { className: iconClass }, []);\n\n        let buttonClass: string = canPlay ? \"SequencePlay\" : \"SequencePlayDisabled\";\n\n        return vd.h(\"div.\" + buttonClass, buttonProperties, [icon]);\n    }\n\n    private _createSequenceArrows(\n        nextKey: string,\n        prevKey: string,\n        configuration: ISequenceConfiguration,\n        interaction: SequenceDOMInteraction,\n        navigator: Navigator): vd.VNode[] {\n\n        let nextProperties: vd.createProperties = {\n            onclick: nextKey != null ?\n                (e: Event): void => {\n                    navigator.moveDir$(EdgeDirection.Next)\n                        .subscribe(\n                            (node: Node): void => { return; },\n                            (error: Error): void => { console.error(error); });\n                } :\n                null,\n            onmouseenter: (e: MouseEvent): void => { interaction.mouseEnterDirection$.next(EdgeDirection.Next); },\n            onmouseleave: (e: MouseEvent): void => { interaction.mouseLeaveDirection$.next(EdgeDirection.Next); },\n            style: {\n\n            },\n        };\n\n        let prevProperties: vd.createProperties = {\n            onclick: prevKey != null ?\n                (e: Event): void => {\n                    navigator.moveDir$(EdgeDirection.Prev)\n                        .subscribe(\n                            (node: Node): void => { return; },\n                            (error: Error): void => { console.error(error); });\n                } :\n                null,\n            onmouseenter: (e: MouseEvent): void => { interaction.mouseEnterDirection$.next(EdgeDirection.Prev); },\n            onmouseleave: (e: MouseEvent): void => { interaction.mouseLeaveDirection$.next(EdgeDirection.Prev); },\n            style: {\n\n            },\n        };\n\n        let nextClass: string = this._getStepClassName(EdgeDirection.Next, nextKey, configuration.highlightKey);\n        let prevClass: string = this._getStepClassName(EdgeDirection.Prev, prevKey, configuration.highlightKey);\n\n        let nextIcon: vd.VNode = vd.h(\"div.SequenceComponentIcon\", []);\n        let prevIcon: vd.VNode = vd.h(\"div.SequenceComponentIcon\", []);\n\n        return [\n            vd.h(\"div.\" + nextClass, nextProperties, [nextIcon]),\n            vd.h(\"div.\" + prevClass, prevProperties, [prevIcon]),\n        ];\n    }\n\n    private _getStepClassName(direction: EdgeDirection, key: string, highlightKey: string): string {\n        let className: string = direction === EdgeDirection.Next ?\n            \"SequenceStepNext\" :\n            \"SequenceStepPrev\";\n\n        if (key == null) {\n            className += \"Disabled\";\n        } else {\n            if (highlightKey === key) {\n                className += \"Highlight\";\n            }\n        }\n\n        return className;\n    }\n}\n\nexport default SequenceDOMRenderer;\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as vd from \"virtual-dom\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/observable/combineLatest\";\nimport \"rxjs/add/observable/of\";\n\nimport \"rxjs/add/operator/bufferCount\";\nimport \"rxjs/add/operator/concat\";\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/finally\";\nimport \"rxjs/add/operator/first\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/share\";\nimport \"rxjs/add/operator/switchMap\";\nimport \"rxjs/add/operator/takeUntil\";\nimport \"rxjs/add/operator/withLatestFrom\";\n\nimport {\n    Component,\n    ComponentService,\n    ISequenceConfiguration,\n    SequenceDOMRenderer,\n    SequenceDOMInteraction,\n} from \"../../Component\";\nimport {EdgeDirection} from \"../../Edge\";\nimport {IEdgeStatus, Node} from \"../../Graph\";\nimport {IVNodeHash} from \"../../Render\";\nimport {IFrame} from \"../../State\";\nimport {Container, Navigator} from \"../../Viewer\";\n\ninterface IConfigurationOperation {\n    (configuration: ISequenceConfiguration): ISequenceConfiguration;\n}\n\n/**\n * @class SequenceComponent\n * @classdesc Component showing navigation arrows for sequence directions\n * as well as playing button. Exposes an API to start and stop play.\n */\nexport class SequenceComponent extends Component<ISequenceConfiguration> {\n    /** @inheritdoc */\n    public static componentName: string = \"sequence\";\n\n    /**\n     * Event fired when playing starts or stops.\n     *\n     * @event PlayerComponent#playingchanged\n     * @type {boolean} Indicates whether the player is playing.\n     */\n    public static playingchanged: string = \"playingchanged\";\n\n    private _sequenceDOMRenderer: SequenceDOMRenderer;\n    private _sequenceDOMInteraction: SequenceDOMInteraction;\n    private _nodesAhead: number = 5;\n\n    private _configurationOperation$: Subject<IConfigurationOperation> = new Subject<IConfigurationOperation>();\n    private _hoveredKeySubject$: Subject<string>;\n    private _hoveredKey$: Observable<string>;\n    private _containerWidth$: Subject<number>;\n    private _edgeStatus$: Observable<IEdgeStatus>;\n\n    private _configurationSubscription: Subscription;\n    private _renderSubscription: Subscription;\n    private _containerWidthSubscription: Subscription;\n    private _hoveredKeySubscription: Subscription;\n\n    private _playingSubscription: Subscription;\n    private _clearSubscription: Subscription;\n    private _stopSubscription: Subscription;\n\n    constructor(name: string, container: Container, navigator: Navigator) {\n        super(name, container, navigator);\n\n        this._sequenceDOMRenderer = new SequenceDOMRenderer(container.element);\n        this._sequenceDOMInteraction = new SequenceDOMInteraction();\n\n        this._containerWidth$ = new Subject<number>();\n        this._hoveredKeySubject$ = new Subject<string>();\n\n        this._hoveredKey$ = this._hoveredKeySubject$.share();\n\n        this._edgeStatus$ = this._navigator.stateService.currentNode$\n            .switchMap(\n                (node: Node): Observable<IEdgeStatus> => {\n                    return node.sequenceEdges$;\n                })\n            .publishReplay(1)\n            .refCount();\n    }\n\n    /**\n     * Get hovered key observable.\n     *\n     * @description An observable emitting the key of the node for the direction\n     * arrow that is being hovered. When the mouse leaves a direction arrow null\n     * is emitted.\n     *\n     * @returns {Observable<string>}\n     */\n    public get hoveredKey$(): Observable<string> {\n        return this._hoveredKey$;\n    }\n\n    /**\n     * Start playing.\n     *\n     * @fires PlayerComponent#playingchanged\n     */\n    public play(): void {\n        this.configure({ playing: true });\n    }\n\n    /**\n     * Stop playing.\n     *\n     * @fires PlayerComponent#playingchanged\n     */\n    public stop(): void {\n        this.configure({ playing: false });\n    }\n\n    /**\n     * Set the direction to follow when playing.\n     *\n     * @param {EdgeDirection} direction - The direction that will be followed when playing.\n     */\n    public setDirection(direction: EdgeDirection): void {\n        this.configure({ direction: direction });\n    }\n\n    /**\n     * Set highlight key.\n     *\n     * @description The arrow pointing towards the node corresponding to the\n     * highlight key will be highlighted.\n     *\n     * @param {string} highlightKey Key of node to be highlighted if existing.\n     */\n    public setHighlightKey(highlightKey: string): void {\n        this.configure({ highlightKey: highlightKey });\n    }\n\n    /**\n     * Set max width of container element.\n     *\n     * @description Set max width of the container element holding\n     * the sequence navigation elements. If the min width is larger than the\n     * max width the min width value will be used.\n     *\n     * The container element is automatically resized when the resize\n     * method on the Viewer class is called.\n     *\n     * @param {number} minWidth\n     */\n    public setMaxWidth(maxWidth: number): void {\n        this.configure({ maxWidth: maxWidth });\n    }\n\n    /**\n     * Set min width of container element.\n     *\n     * @description Set min width of the container element holding\n     * the sequence navigation elements. If the min width is larger than the\n     * max width the min width value will be used.\n     *\n     * The container element is automatically resized when the resize\n     * method on the Viewer class is called.\n     *\n     * @param {number} minWidth\n     */\n    public setMinWidth(minWidth: number): void {\n        this.configure({ minWidth: minWidth });\n    }\n\n    /**\n     * Set the value indicating whether the sequence UI elements should be visible.\n     *\n     * @param {boolean} visible\n     */\n    public setVisible(visible: boolean): void {\n        this.configure({ visible: visible });\n    }\n\n    /** @inheritdoc */\n    public resize(): void {\n        this._configuration$\n            .first()\n            .map(\n                (configuration: ISequenceConfiguration): number => {\n                    return this._sequenceDOMRenderer.getContainerWidth(\n                        this._container.element,\n                        configuration);\n                })\n            .subscribe(\n                (containerWidth: number): void => {\n                    this._containerWidth$.next(containerWidth);\n                });\n    }\n\n    protected _activate(): void {\n        this._renderSubscription = Observable\n            .combineLatest(\n                this._edgeStatus$,\n                this._configuration$,\n                this._containerWidth$)\n            .map(\n                (ec: [IEdgeStatus, ISequenceConfiguration, number]): IVNodeHash => {\n                    let edgeStatus: IEdgeStatus = ec[0];\n                    let configuration: ISequenceConfiguration = ec[1];\n                    let containerWidth: number = ec[2];\n\n                    let vNode: vd.VNode = this._sequenceDOMRenderer\n                        .render(\n                            edgeStatus,\n                            configuration,\n                            containerWidth,\n                            this,\n                            this._sequenceDOMInteraction,\n                            this._navigator);\n\n                    return {name: this._name, vnode: vNode };\n                })\n            .subscribe(this._container.domRenderer.render$);\n\n        this._containerWidthSubscription = this._configuration$\n            .distinctUntilChanged(\n                (value1: [number, number], value2: [number, number]): boolean => {\n                    return value1[0] === value2[0] && value1[1] === value2[1];\n                },\n                (configuration: ISequenceConfiguration) => {\n                    return [configuration.minWidth, configuration.maxWidth];\n                })\n            .map(\n                (configuration: ISequenceConfiguration): number => {\n                    return this._sequenceDOMRenderer.getContainerWidth(\n                        this._container.element,\n                        configuration);\n                })\n            .subscribe(this._containerWidth$);\n\n        this._configurationSubscription = this._configurationOperation$\n            .scan<ISequenceConfiguration>(\n                (configuration: ISequenceConfiguration, operation: IConfigurationOperation): ISequenceConfiguration => {\n                    return operation(configuration);\n                },\n                { playing: false })\n            .finally(\n                (): void => {\n                    if (this._playingSubscription != null) {\n                        this._navigator.stateService.cutNodes();\n                        this._stop();\n                    }\n                })\n            .subscribe(() => { /*noop*/ });\n\n        this._configuration$\n            .map(\n                (newConfiguration: ISequenceConfiguration) => {\n                    return (configuration: ISequenceConfiguration): ISequenceConfiguration => {\n                        if (newConfiguration.playing !== configuration.playing) {\n\n                            this._navigator.stateService.cutNodes();\n\n                            if (newConfiguration.playing) {\n                                this._play();\n                            } else {\n                                this._stop();\n                            }\n                        }\n\n                        configuration.playing = newConfiguration.playing;\n\n                        return configuration;\n                    };\n                })\n            .subscribe(this._configurationOperation$);\n\n        this._stopSubscription = this._configuration$\n            .switchMap(\n                (configuration: ISequenceConfiguration): Observable<[IEdgeStatus, EdgeDirection]> => {\n                    let edgeStatus$: Observable<IEdgeStatus> = configuration.playing ?\n                        this._edgeStatus$ :\n                        Observable.empty<IEdgeStatus>();\n\n                    let edgeDirection$: Observable<EdgeDirection> = Observable\n                        .of(configuration.direction);\n\n                    return Observable\n                        .combineLatest<IEdgeStatus, EdgeDirection>(edgeStatus$, edgeDirection$);\n                })\n            .map(\n                (ne: [IEdgeStatus, EdgeDirection]): boolean => {\n                    let edgeStatus: IEdgeStatus = ne[0];\n                    let direction: EdgeDirection = ne[1];\n\n                    if (!edgeStatus.cached) {\n                        return true;\n                    }\n\n                    for (let edge of edgeStatus.edges) {\n                        if (edge.data.direction === direction) {\n                            return true;\n                        }\n                    }\n\n                    return false;\n                })\n            .filter(\n                (hasEdge: boolean): boolean => {\n                    return !hasEdge;\n                })\n            .map(\n                (hasEdge: boolean): ISequenceConfiguration => {\n                    return { playing: false };\n                })\n            .subscribe(this._configurationSubject$);\n\n        this._hoveredKeySubscription = this._sequenceDOMInteraction.mouseEnterDirection$\n            .switchMap(\n                (direction: EdgeDirection): Observable<string> => {\n                    return this._edgeStatus$\n                        .map(\n                            (edgeStatus: IEdgeStatus): string => {\n                                for (let edge of edgeStatus.edges) {\n                                    if (edge.data.direction === direction) {\n                                        return edge.to;\n                                    }\n                                }\n\n                                return null;\n                            })\n                        .takeUntil(this._sequenceDOMInteraction.mouseLeaveDirection$)\n                        .concat<string>(Observable.of<string>(null));\n                })\n            .distinctUntilChanged()\n            .subscribe(this._hoveredKeySubject$);\n    }\n\n    protected _deactivate(): void {\n        this._stopSubscription.unsubscribe();\n        this._renderSubscription.unsubscribe();\n        this._configurationSubscription.unsubscribe();\n        this._containerWidthSubscription.unsubscribe();\n        this._hoveredKeySubscription.unsubscribe();\n\n        this.stop();\n    }\n\n    protected _getDefaultConfiguration(): ISequenceConfiguration {\n        return {\n            direction: EdgeDirection.Next,\n            maxWidth: 117,\n            minWidth: 70,\n            playing: false,\n            visible: true,\n        };\n    }\n\n    private _play(): void {\n        this._playingSubscription = this._navigator.stateService.currentState$\n            .filter(\n                (frame: IFrame): boolean => {\n                    return frame.state.nodesAhead < this._nodesAhead;\n                })\n            .map(\n                (frame: IFrame): Node => {\n                    return frame.state.lastNode;\n                })\n            .distinctUntilChanged(\n                undefined,\n                (lastNode: Node): string => {\n                    return lastNode.key;\n                })\n            .withLatestFrom(\n                this._configuration$,\n                (lastNode: Node, configuration: ISequenceConfiguration): [Node, EdgeDirection] => {\n                    return [lastNode, configuration.direction];\n                })\n            .switchMap(\n                (nd: [Node, EdgeDirection]): Observable<[IEdgeStatus, EdgeDirection]> => {\n                    return ([EdgeDirection.Next, EdgeDirection.Prev].indexOf(nd[1]) > -1 ?\n                            nd[0].sequenceEdges$ :\n                            nd[0].spatialEdges$)\n                        .filter(\n                            (status: IEdgeStatus): boolean => {\n                                return status.cached;\n                            })\n                        .zip(\n                            Observable.of<EdgeDirection>(nd[1]),\n                            (status: IEdgeStatus, direction: EdgeDirection): [IEdgeStatus, EdgeDirection] => {\n                                return [status, direction];\n                            });\n                })\n            .map(\n                (ed: [IEdgeStatus, EdgeDirection]): string => {\n                    let direction: EdgeDirection = ed[1];\n\n                    for (let edge of ed[0].edges) {\n                        if (edge.data.direction === direction) {\n                            return edge.to;\n                        }\n                    }\n\n                    return null;\n                })\n            .filter(\n                (key: string): boolean => {\n                    return key != null;\n                })\n            .switchMap(\n                (key: string): Observable<Node> => {\n                    return this._navigator.graphService.cacheNode$(key);\n                })\n            .subscribe(\n                (node: Node): void => {\n                    this._navigator.stateService.appendNodes([node]);\n                },\n                (error: Error): void => {\n                    console.error(error);\n                    this.stop();\n                }\n            );\n\n        this._clearSubscription = this._navigator.stateService.currentNode$\n            .bufferCount(1, 7)\n            .subscribe(\n                (nodes: Node[]): void => {\n                    this._navigator.stateService.clearPriorNodes();\n                });\n\n        this.fire(SequenceComponent.playingchanged, true);\n    }\n\n    private _stop(): void {\n        this._playingSubscription.unsubscribe();\n        this._playingSubscription = null;\n\n        this._clearSubscription.unsubscribe();\n        this._clearSubscription = null;\n\n        this.fire(SequenceComponent.playingchanged, false);\n    }\n}\n\nComponentService.register(SequenceComponent);\nexport default SequenceComponent;\n",
     "import {Subject} from \"rxjs/Subject\";\n\nimport {EdgeDirection} from \"../../Edge\";\n\nexport class SequenceDOMInteraction {\n    private _mouseEnterDirection$: Subject<EdgeDirection>;\n    private _mouseLeaveDirection$: Subject<EdgeDirection>;\n\n    constructor() {\n        this._mouseEnterDirection$ = new Subject<EdgeDirection>();\n        this._mouseLeaveDirection$ = new Subject<EdgeDirection>();\n    }\n\n    public get mouseEnterDirection$(): Subject<EdgeDirection> {\n        return this._mouseEnterDirection$;\n    }\n\n    public get mouseLeaveDirection$(): Subject<EdgeDirection> {\n        return this._mouseLeaveDirection$;\n    }\n}\n\nexport default SequenceDOMInteraction;\n",
     "/// <reference path=\"../../../typings/index.d.ts\" />\n\nimport * as vd from \"virtual-dom\";\n\nimport {\n    ISequenceConfiguration,\n    SequenceComponent,\n    SequenceDOMInteraction,\n} from \"../../Component\";\nimport {EdgeDirection} from \"../../Edge\";\nimport {IEdgeStatus, Node} from \"../../Graph\";\nimport {Navigator} from \"../../Viewer\";\n\nexport class SequenceDOMRenderer {\n    private _minThresholdWidth: number;\n    private _maxThresholdWidth: number;\n    private _minThresholdHeight: number;\n    private _maxThresholdHeight: number;\n\n    constructor(element: HTMLElement) {\n        this._minThresholdWidth = 320;\n        this._maxThresholdWidth = 1480;\n        this._minThresholdHeight = 240;\n        this._maxThresholdHeight = 820;\n    }\n\n    public render(\n        edgeStatus: IEdgeStatus,\n        configuration: ISequenceConfiguration,\n        containerWidth: number,\n        component: SequenceComponent,\n        interaction: SequenceDOMInteraction,\n        navigator: Navigator): vd.VNode {\n\n        if (configuration.visible === false) {\n            return vd.h(\"div.SequenceContainer\", {}, []);\n        }\n\n        let nextKey: string = null;\n        let prevKey: string = null;\n\n        for (let edge of edgeStatus.edges) {\n            if (edge.data.direction === EdgeDirection.Next) {\n                nextKey = edge.to;\n            }\n\n            if (edge.data.direction === EdgeDirection.Prev) {\n                prevKey = edge.to;\n            }\n        }\n\n        let playingButton: vd.VNode = this._createPlayingButton(nextKey, prevKey, configuration, component);\n        let arrows: vd.VNode[] = this._createSequenceArrows(nextKey, prevKey, configuration, interaction, navigator);\n\n        let containerProperties: vd.createProperties = {\n            oncontextmenu: (event: MouseEvent): void => { event.preventDefault(); },\n            style: { height: (0.27 * containerWidth) + \"px\", width: containerWidth + \"px\" },\n        };\n\n        return vd.h(\"div.SequenceContainer\", containerProperties, arrows.concat([playingButton]));\n    }\n\n    public getContainerWidth(element: HTMLElement, configuration: ISequenceConfiguration): number {\n        let elementWidth: number = element.offsetWidth;\n        let elementHeight: number = element.offsetHeight;\n\n        let minWidth: number = configuration.minWidth;\n        let maxWidth: number = configuration.maxWidth;\n        if (maxWidth < minWidth) {\n            maxWidth = minWidth;\n        }\n\n        let relativeWidth: number =\n            (elementWidth - this._minThresholdWidth) / (this._maxThresholdWidth - this._minThresholdWidth);\n        let relativeHeight: number =\n            (elementHeight - this._minThresholdHeight) / (this._maxThresholdHeight - this._minThresholdHeight);\n\n        let coeff: number = Math.max(0, Math.min(1, Math.min(relativeWidth, relativeHeight)));\n\n        return minWidth + coeff * (maxWidth - minWidth);\n    }\n\n    private _createPlayingButton(\n        nextKey: string,\n        prevKey: string,\n        configuration: ISequenceConfiguration,\n        component: SequenceComponent): vd.VNode {\n\n        let canPlay: boolean = configuration.direction === EdgeDirection.Next && nextKey != null ||\n            configuration.direction === EdgeDirection.Prev && prevKey != null;\n\n        let onclick: (e: Event) => void = configuration.playing ?\n            (e: Event): void => { component.stop(); } :\n            canPlay ? (e: Event): void => { component.play(); } : null;\n\n        let buttonProperties: vd.createProperties = {\n            onclick: onclick,\n            style: {\n\n            },\n        };\n\n        let iconClass: string = configuration.playing ?\n            \"Stop\" :\n            canPlay ? \"Play\" : \"PlayDisabled\";\n\n        let icon: vd.VNode = vd.h(\"div.SequenceComponentIcon\", { className: iconClass }, []);\n\n        let buttonClass: string = canPlay ? \"SequencePlay\" : \"SequencePlayDisabled\";\n\n        return vd.h(\"div.\" + buttonClass, buttonProperties, [icon]);\n    }\n\n    private _createSequenceArrows(\n        nextKey: string,\n        prevKey: string,\n        configuration: ISequenceConfiguration,\n        interaction: SequenceDOMInteraction,\n        navigator: Navigator): vd.VNode[] {\n\n        let nextProperties: vd.createProperties = {\n            onclick: nextKey != null ?\n                (e: Event): void => {\n                    navigator.moveDir$(EdgeDirection.Next)\n                        .subscribe(\n                            (node: Node): void => { return; },\n                            (error: Error): void => { console.error(error); });\n                } :\n                null,\n            onmouseenter: (e: MouseEvent): void => { interaction.mouseEnterDirection$.next(EdgeDirection.Next); },\n            onmouseleave: (e: MouseEvent): void => { interaction.mouseLeaveDirection$.next(EdgeDirection.Next); },\n            style: {\n\n            },\n        };\n\n        let prevProperties: vd.createProperties = {\n            onclick: prevKey != null ?\n                (e: Event): void => {\n                    navigator.moveDir$(EdgeDirection.Prev)\n                        .subscribe(\n                            (node: Node): void => { return; },\n                            (error: Error): void => { console.error(error); });\n                } :\n                null,\n            onmouseenter: (e: MouseEvent): void => { interaction.mouseEnterDirection$.next(EdgeDirection.Prev); },\n            onmouseleave: (e: MouseEvent): void => { interaction.mouseLeaveDirection$.next(EdgeDirection.Prev); },\n            style: {\n\n            },\n        };\n\n        let nextClass: string = this._getStepClassName(EdgeDirection.Next, nextKey, configuration.highlightKey);\n        let prevClass: string = this._getStepClassName(EdgeDirection.Prev, prevKey, configuration.highlightKey);\n\n        let nextIcon: vd.VNode = vd.h(\"div.SequenceComponentIcon\", []);\n        let prevIcon: vd.VNode = vd.h(\"div.SequenceComponentIcon\", []);\n\n        return [\n            vd.h(\"div.\" + nextClass, nextProperties, [nextIcon]),\n            vd.h(\"div.\" + prevClass, prevProperties, [prevIcon]),\n        ];\n    }\n\n    private _getStepClassName(direction: EdgeDirection, key: string, highlightKey: string): string {\n        let className: string = direction === EdgeDirection.Next ?\n            \"SequenceStepNext\" :\n            \"SequenceStepPrev\";\n\n        if (key == null) {\n            className += \"Disabled\";\n        } else {\n            if (highlightKey === key) {\n                className += \"Highlight\";\n            }\n        }\n\n        return className;\n    }\n}\n\nexport default SequenceDOMRenderer;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {Transform} from \"../Geo\";\n\n/**\n * @class Camera\n *\n * @classdesc Holds information about a camera.\n */\nexport class Camera {\n    private _position: THREE.Vector3;\n    private _lookat: THREE.Vector3;\n    private _up: THREE.Vector3;\n    private _focal: number;\n\n    /**\n     * Create a new camera instance.\n     * @param {Transform} [transform] - Optional transform instance.\n     */\n    constructor(transform?: Transform) {\n        if (transform != null) {\n            this._position = new THREE.Vector3().fromArray(transform.unprojectSfM([0, 0], 0));\n            this._lookat = new THREE.Vector3().fromArray(transform.unprojectSfM([0, 0], 10));\n            this._up = transform.upVector();\n            this._focal = this._getFocal(transform);\n        } else {\n            this._position = new THREE.Vector3(0, 0, 0);\n            this._lookat = new THREE.Vector3(0, 0, 1);\n            this._up = new THREE.Vector3(0, -1, 0);\n            this._focal = 1;\n        }\n    }\n\n   /**\n    * Get position.\n    * @returns {THREE.Vector3} The position vector.\n    */\n    public get position(): THREE.Vector3 {\n        return this._position;\n    }\n\n   /**\n    * Get lookat.\n    * @returns {THREE.Vector3} The lookat vector.\n    */\n    public get lookat(): THREE.Vector3 {\n        return this._lookat;\n    }\n\n   /**\n    * Get up.\n    * @returns {THREE.Vector3} The up vector.\n    */\n    public get up(): THREE.Vector3 {\n        return this._up;\n    }\n\n   /**\n    * Get focal.\n    * @returns {number} The focal length.\n    */\n    public get focal(): number {\n        return this._focal;\n    }\n\n   /**\n    * Set focal.\n    */\n    public set focal(value: number) {\n        this._focal = value;\n    }\n\n    /**\n     * Update this camera to the linearly interpolated value of two other cameras.\n     *\n     * @param {Camera} a - First camera.\n     * @param {Camera} b - Second camera.\n     * @param {number} alpha - Interpolation value on the interval [0, 1].\n     */\n    public lerpCameras(a: Camera, b: Camera, alpha: number): void {\n      this._position.subVectors(b.position, a.position).multiplyScalar(alpha).add(a.position);\n      this._lookat.subVectors(b.lookat, a.lookat).multiplyScalar(alpha).add(a.lookat);\n      this._up.subVectors(b.up, a.up).multiplyScalar(alpha).add(a.up);\n      this._focal = (1 - alpha) * a.focal + alpha * b.focal;\n    }\n\n    /**\n     * Copy the properties of another camera to this camera.\n     *\n     * @param {Camera} other - Another camera.\n     */\n    public copy(other: Camera): void {\n        this._position.copy(other.position);\n        this._lookat.copy(other.lookat);\n        this._up.copy(other.up);\n        this._focal = other.focal;\n    }\n\n    /**\n     * Clone this camera.\n     *\n     * @returns {Camera} A camera with cloned properties equal to this camera.\n     */\n    public clone(): Camera {\n        let camera: Camera = new Camera();\n\n        camera.position.copy(this._position);\n        camera.lookat.copy(this._lookat);\n        camera.up.copy(this._up);\n        camera.focal = this._focal;\n\n        return camera;\n    }\n\n    /**\n     * Determine the distance between this camera and another camera.\n     *\n     * @param {Camera} other - Another camera.\n     * @returns {number} The distance between the cameras.\n     */\n    public diff(other: Camera): number {\n        let pd: number = this._position.distanceToSquared(other.position);\n        let ld: number = this._lookat.distanceToSquared(other.lookat);\n        let ud: number = this._up.distanceToSquared(other.up);\n        let fd: number = 100 * Math.abs(this._focal - other.focal);\n\n        return Math.max(pd, ld, ud, fd);\n    }\n\n    /**\n     * Get the focal length based on the transform.\n     *\n     * @description Returns the focal length of the transform if gpano info is not available.\n     * Returns a focal length corresponding to a vertical fov clamped to [45, 90] degrees based on\n     * the gpano information if available.\n     *\n     * @returns {number} Focal length.\n     */\n    private _getFocal(transform: Transform): number {\n        if (transform.gpano == null) {\n            return transform.focal;\n        }\n\n        let vFov: number = Math.PI * transform.gpano.CroppedAreaImageHeightPixels / transform.gpano.FullPanoHeightPixels;\n        let focal: number = 0.5 / Math.tan(vFov / 2);\n\n        return Math.min(1 / (2 * (Math.sqrt(2) - 1)), Math.max(0.5, focal));\n    }\n}\n",
     "/**\n * @class GeoCoords\n *\n * @classdesc Converts coordinates between the geodetic (WGS84),\n * Earth-Centered, Earth-Fixed (ECEF) and local topocentric\n * East, North, Up (ENU) reference frames.\n *\n * The WGS84 has latitude (degrees), longitude (degrees) and\n * altitude (meters) values.\n *\n * The ECEF Z-axis pierces the north pole and the\n * XY-axis defines the equatorial plane. The X-axis extends\n * from the geocenter to the intersection of the Equator and\n * the Greenwich Meridian. All values in meters.\n *\n * The WGS84 parameters are:\n *\n * a = 6378137\n * b = a * (1 - f)\n * f = 1 / 298.257223563\n * e = Math.sqrt((a^2 - b^2) / a^2)\n * e' = Math.sqrt((a^2 - b^2) / b^2)\n *\n * The WGS84 to ECEF conversion is performed using the following:\n *\n * X = (N - h) * cos(phi) * cos(lambda)\n * Y = (N + h) * cos(phi) * sin(lambda)\n * Z = (b^2 * N / a^2 + h) * sin(phi)\n *\n * where\n *\n * phi = latitude\n * lambda = longitude\n * h = height above ellipsoid (altitude)\n * N = Radius of curvature (meters)\n *   = a / Math.sqrt(1 - e^2 * sin(phi)^2)\n *\n * The ECEF to WGS84 conversion is performed using the following:\n *\n * phi = arctan((Z + e'^2 * b * sin(theta)^3) / (p - e^2 * a * cos(theta)^3))\n * lambda = arctan(Y / X)\n * h = p / cos(phi) - N\n *\n * where\n *\n * p = Math.sqrt(X^2 + Y^2)\n * theta = arctan(Z * a / p * b)\n *\n * In the ENU reference frame the x-axis points to the\n * East, the y-axis to the North and the z-axis Up. All values\n * in meters.\n *\n * The ECEF to ENU conversion is performed using the following:\n *\n * | x |   |       -sin(lambda_r)                cos(lambda_r)             0      | | X - X_r |\n * | y | = | -sin(phi_r) * cos(lambda_r)  -sin(phi_r) * sin(lambda_r)  cos(phi_r) | | Y - Y_r |\n * | z |   |  cos(phi_r) * cos(lambda_r)   cos(phi_r) * sin(lambda_r)  sin(phi_r) | | Z - Z_r |\n *\n * where\n *\n * phi_r = latitude of reference\n * lambda_r = longitude of reference\n * X_r, Y_r, Z_r = ECEF coordinates of reference\n *\n * The ENU to ECEF conversion is performed by solving the above equation for X, Y, Z.\n *\n * WGS84 to ENU and ENU to WGS84 are two step conversions with ECEF calculated in\n * the first step for both conversions.\n */\nexport class GeoCoords {\n    private _wgs84a: number = 6378137.0;\n    private _wgs84b: number = 6356752.31424518;\n\n    /**\n     * Convert coordinates from geodetic (WGS84) reference to local topocentric\n     * (ENU) reference.\n     *\n     * @param {number} lat Latitude in degrees.\n     * @param {number} lon Longitude in degrees.\n     * @param {number} alt Altitude in meters.\n     * @param {number} refLat Reference latitude in degrees.\n     * @param {number} refLon Reference longitude in degrees.\n     * @param {number} refAlt Reference altitude in meters.\n     * @returns {Array<number>} The x, y, z local topocentric ENU coordinates.\n     */\n    public geodeticToEnu(\n        lat: number,\n        lon: number,\n        alt: number,\n        refLat: number,\n        refLon: number,\n        refAlt: number): number[] {\n\n        let ecef: number[] = this.geodeticToEcef(lat, lon, alt);\n\n        return this.ecefToEnu(ecef[0], ecef[1], ecef[2], refLat, refLon, refAlt);\n    }\n\n    /**\n     * Convert coordinates from local topocentric (ENU) reference to\n     * geodetic (WGS84) reference.\n     *\n     * @param {number} x Topocentric ENU coordinate in East direction.\n     * @param {number} y Topocentric ENU coordinate in North direction.\n     * @param {number} z Topocentric ENU coordinate in Up direction.\n     * @param {number} refLat Reference latitude in degrees.\n     * @param {number} refLon Reference longitude in degrees.\n     * @param {number} refAlt Reference altitude in meters.\n     * @returns {Array<number>} The latitude and longitude in degrees\n     *                          as well as altitude in meters.\n     */\n    public enuToGeodetic(\n        x: number,\n        y: number,\n        z: number,\n        refLat: number,\n        refLon: number,\n        refAlt: number): number[] {\n\n        let ecef: number[] = this.enuToEcef(x, y, z, refLat, refLon, refAlt);\n\n        return this.ecefToGeodetic(ecef[0], ecef[1], ecef[2]);\n    }\n\n    /**\n     * Convert coordinates from Earth-Centered, Earth-Fixed (ECEF) reference\n     * to local topocentric (ENU) reference.\n     *\n     * @param {number} X ECEF X-value.\n     * @param {number} Y ECEF Y-value.\n     * @param {number} Z ECEF Z-value.\n     * @param {number} refLat Reference latitude in degrees.\n     * @param {number} refLon Reference longitude in degrees.\n     * @param {number} refAlt Reference altitude in meters.\n     * @returns {Array<number>} The x, y, z topocentric ENU coordinates in East, North\n     * and Up directions respectively.\n     */\n    public ecefToEnu(\n        X: number,\n        Y: number,\n        Z: number,\n        refLat: number,\n        refLon: number,\n        refAlt: number): number[] {\n\n        let refEcef: number[] = this.geodeticToEcef(refLat, refLon, refAlt);\n\n        let V: number[] = [X - refEcef[0], Y - refEcef[1], Z - refEcef[2]];\n\n        refLat = refLat * Math.PI / 180.0;\n        refLon = refLon * Math.PI / 180.0;\n\n        let cosLat: number = Math.cos(refLat);\n        let sinLat: number = Math.sin(refLat);\n        let cosLon: number = Math.cos(refLon);\n        let sinLon: number = Math.sin(refLon);\n\n        let x: number = -sinLon * V[0] + cosLon * V[1];\n        let y: number = -sinLat * cosLon * V[0] - sinLat * sinLon * V[1] + cosLat * V[2];\n        let z: number = cosLat * cosLon * V[0] + cosLat * sinLon * V[1] + sinLat * V[2];\n\n        return [x, y, z];\n    }\n\n    /**\n     * Convert coordinates from local topocentric (ENU) reference\n     * to Earth-Centered, Earth-Fixed (ECEF) reference.\n     *\n     * @param {number} x Topocentric ENU coordinate in East direction.\n     * @param {number} y Topocentric ENU coordinate in North direction.\n     * @param {number} z Topocentric ENU coordinate in Up direction.\n     * @param {number} refLat Reference latitude in degrees.\n     * @param {number} refLon Reference longitude in degrees.\n     * @param {number} refAlt Reference altitude in meters.\n     * @returns {Array<number>} The X, Y, Z ECEF coordinates.\n     */\n    public enuToEcef(\n        x: number,\n        y: number,\n        z: number,\n        refLat: number,\n        refLon: number,\n        refAlt: number): number[] {\n\n        let refEcef: number[] = this.geodeticToEcef(refLat, refLon, refAlt);\n\n        refLat = refLat * Math.PI / 180.0;\n        refLon = refLon * Math.PI / 180.0;\n\n        let cosLat: number = Math.cos(refLat);\n        let sinLat: number = Math.sin(refLat);\n        let cosLon: number = Math.cos(refLon);\n        let sinLon: number = Math.sin(refLon);\n\n        let X: number = -sinLon * x - sinLat * cosLon * y + cosLat * cosLon * z + refEcef[0];\n        let Y: number = cosLon * x - sinLat * sinLon * y + cosLat * sinLon * z + refEcef[1];\n        let Z: number = cosLat * y + sinLat * z + refEcef[2];\n\n        return [X, Y, Z];\n    }\n\n    /**\n     * Convert coordinates from geodetic reference (WGS84) to Earth-Centered,\n     * Earth-Fixed (ECEF) reference.\n     *\n     * @param {number} lat Latitude in degrees.\n     * @param {number} lon Longitude in degrees.\n     * @param {number} alt Altitude in meters.\n     * @returns {Array<number>} The X, Y, Z ECEF coordinates.\n     */\n    public geodeticToEcef(lat: number, lon: number, alt: number): number[] {\n        let a: number = this._wgs84a;\n        let b: number = this._wgs84b;\n\n        lat = lat * Math.PI / 180.0;\n        lon = lon * Math.PI / 180.0;\n\n        let cosLat: number = Math.cos(lat);\n        let sinLat: number = Math.sin(lat);\n        let cosLon: number = Math.cos(lon);\n        let sinLon: number = Math.sin(lon);\n\n        let a2: number = a * a;\n        let b2: number = b * b;\n\n        let L: number = 1.0 / Math.sqrt(a2 * cosLat * cosLat + b2 * sinLat * sinLat);\n\n        let nhcl: number = (a2 * L + alt) * cosLat;\n\n        let X: number = nhcl * cosLon;\n        let Y: number = nhcl * sinLon;\n        let Z: number = (b2 * L + alt) * sinLat;\n\n        return [X, Y, Z];\n    }\n\n    /**\n     * Convert coordinates from Earth-Centered, Earth-Fixed (ECEF) reference\n     * to geodetic reference (WGS84).\n     *\n     * @param {number} X ECEF X-value.\n     * @param {number} Y ECEF Y-value.\n     * @param {number} Z ECEF Z-value.\n     * @returns {Array<number>} The latitude and longitude in degrees\n     *                          as well as altitude in meters.\n     */\n    public ecefToGeodetic(X: number, Y: number, Z: number): number[] {\n        let a: number = this._wgs84a;\n        let b: number = this._wgs84b;\n\n        let a2: number = a * a;\n        let b2: number = b * b;\n\n        let a2mb2: number = a2 - b2;\n\n        let ea: number = Math.sqrt(a2mb2 / a2);\n        let eb: number = Math.sqrt(a2mb2 / b2);\n\n        let p: number = Math.sqrt(X * X + Y * Y);\n        let theta: number = Math.atan2(Z * a, p * b);\n\n        let sinTheta: number = Math.sin(theta);\n        let cosTheta: number = Math.cos(theta);\n\n        let lon: number = Math.atan2(Y, X);\n        let lat: number =\n            Math.atan2(Z + eb * eb * b * sinTheta * sinTheta * sinTheta,\n                       p - ea * ea * a * cosTheta * cosTheta * cosTheta);\n\n        let sinLat: number = Math.sin(lat);\n        let cosLat: number = Math.cos(lat);\n\n        let N: number = a / Math.sqrt(1 - ea * ea * sinLat * sinLat);\n        let alt: number = p / cosLat - N;\n\n        return [lat * 180.0 / Math.PI, lon * 180.0 / Math.PI, alt];\n    }\n}\n\nexport default GeoCoords;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\n/**\n * @class Spatial\n *\n * @classdesc Provides methods for scalar, vector and matrix calculations.\n */\nexport class Spatial {\n    private _epsilon: number = 1e-9;\n\n    /**\n     * Converts azimuthal phi rotation (counter-clockwise with origin on X-axis) to\n     * bearing (clockwise with origin at north or Y-axis).\n     *\n     * @param {number} phi - Azimuthal phi angle in radians.\n     * @returns {number} Bearing in radians.\n     */\n    public azimuthalToBearing(phi: number): number {\n         return -phi + Math.PI / 2;\n    }\n\n    /**\n     * Converts degrees to radians.\n     *\n     * @param {number} deg - Degrees.\n     * @returns {number} Radians.\n     */\n    public degToRad(deg: number): number {\n        return Math.PI * deg / 180;\n    }\n\n    /**\n     * Converts radians to degrees.\n     *\n     * @param {number} rad - Radians.\n     * @returns {number} Degrees.\n     */\n    public radToDeg(rad: number): number {\n        return 180 * rad / Math.PI;\n    }\n\n    /**\n     * Creates a rotation matrix from an angle-axis vector.\n     *\n     * @param {Array<number>} angleAxis - Angle-axis representation of a rotation.\n     * @returns {THREE.Matrix4} Rotation matrix.\n     */\n    public rotationMatrix(angleAxis: number[]): THREE.Matrix4 {\n        let axis: THREE.Vector3 =\n            new THREE.Vector3(angleAxis[0], angleAxis[1], angleAxis[2]);\n        let angle: number = axis.length();\n\n        axis.normalize();\n\n        return new THREE.Matrix4().makeRotationAxis(axis, angle);\n    }\n\n    /**\n     * Rotates a vector according to a angle-axis rotation vector.\n     *\n     * @param {Array<number>} vector - Vector to rotate.\n     * @param {Array<number>} angleAxis - Angle-axis representation of a rotation.\n     * @returns {THREE.Vector3} Rotated vector.\n     */\n    public rotate(vector: number[], angleAxis: number[]): THREE.Vector3 {\n        let v: THREE.Vector3 = new THREE.Vector3(vector[0], vector[1], vector[2]);\n        let rotationMatrix: THREE.Matrix4 = this.rotationMatrix(angleAxis);\n        v.applyMatrix4(rotationMatrix);\n\n        return v;\n    }\n\n    /**\n     * Calculates the optical center from a rotation vector\n     * on the angle-axis representation and a translation vector\n     * according to C = -R^T t.\n     *\n     * @param {Array<number>} rotation - Angle-axis representation of a rotation.\n     * @param {Array<number>} translation - Translation vector.\n     * @returns {THREE.Vector3} Optical center.\n     */\n    public opticalCenter(rotation: number[], translation: number[]): THREE.Vector3 {\n        let angleAxis: number[] = [-rotation[0], -rotation[1], -rotation[2]];\n        let vector: number[] = [-translation[0], -translation[1], -translation[2]];\n\n        return this.rotate(vector, angleAxis);\n    }\n\n    /**\n     * Calculates the viewing direction from a rotation vector\n     * on the angle-axis representation.\n     *\n     * @param {number[]} rotation - Angle-axis representation of a rotation.\n     * @returns {THREE.Vector3} Viewing direction.\n     */\n    public viewingDirection(rotation: number[]): THREE.Vector3 {\n        let angleAxis: number[] = [-rotation[0], -rotation[1], -rotation[2]];\n\n        return this.rotate([0, 0, 1], angleAxis);\n    }\n\n    /**\n     * Wrap a number on the interval [min, max].\n     *\n     * @param {number} value - Value to wrap.\n     * @param {number} min - Lower endpoint of interval.\n     * @param {number} max - Upper endpoint of interval.\n     * @returns {number} The wrapped number.\n     */\n    public wrap(value: number, min: number, max: number): number {\n        if (max < min) {\n            throw new Error(\"Invalid arguments: max must be larger than min.\");\n        }\n\n        let interval: number = (max - min);\n\n        while (value > max || value < min) {\n            if (value > max) {\n                value = value - interval;\n            } else if (value < min) {\n                value = value + interval;\n            }\n        }\n\n        return value;\n    }\n\n    /**\n     * Wrap an angle on the interval [-Pi, Pi].\n     *\n     * @param {number} angle - Value to wrap.\n     * @returns {number} Wrapped angle.\n     */\n    public wrapAngle(angle: number): number {\n        return this.wrap(angle, -Math.PI, Math.PI);\n    }\n\n    /**\n     * Limit the value to the interval [min, max] by changing the value to\n     * the nearest available one when it is outside the interval.\n     *\n     * @param {number} value - Value to clamp.\n     * @param {number} min - Minimum of the interval.\n     * @param {number} max - Maximum of the interval.\n     * @returns {number} Clamped value.\n     */\n    public clamp(value: number, min: number, max: number): number {\n        if (value < min) {\n            return min;\n        }\n\n        if (value > max) {\n            return max;\n        }\n\n        return value;\n    }\n\n    /**\n     * Calculates the counter-clockwise angle from the first\n     * vector (x1, y1)^T to the second (x2, y2)^T.\n     *\n     * @param {number} x1 - X coordinate of first vector.\n     * @param {number} y1 - Y coordinate of first vector.\n     * @param {number} x2 - X coordinate of second vector.\n     * @param {number} y2 - Y coordinate of second vector.\n     * @returns {number} Counter clockwise angle between the vectors.\n     */\n    public angleBetweenVector2(x1: number, y1: number, x2: number, y2: number): number {\n        let angle: number = Math.atan2(y2, x2) - Math.atan2(y1, x1);\n\n        return this.wrapAngle(angle);\n    }\n\n    /**\n     * Calculates the minimum (absolute) angle change for rotation\n     * from one angle to another on the [-Pi, Pi] interval.\n     *\n     * @param {number} angle1 - Start angle.\n     * @param {number} angle2 - Destination angle.\n     * @returns {number} Absolute angle change between angles.\n     */\n    public angleDifference(angle1: number, angle2: number): number {\n        let angle: number = angle2 - angle1;\n\n        return this.wrapAngle(angle);\n    }\n\n    /**\n     * Calculates the relative rotation angle between two\n     * angle-axis vectors.\n     *\n     * @param {number} rotation1 - First angle-axis vector.\n     * @param {number} rotation2 - Second angle-axis vector.\n     * @returns {number} Relative rotation angle.\n     */\n    public relativeRotationAngle(rotation1: number[], rotation2: number[]): number {\n        let R1T: THREE.Matrix4 = this.rotationMatrix(\n            [-rotation1[0], -rotation1[1], -rotation1[2]]);\n        let R2: THREE.Matrix4 = this.rotationMatrix(rotation2);\n\n        let R: THREE.Matrix4 = R1T.multiply(R2);\n        let elements: Float32Array = R.elements;\n\n        // from Tr(R) = 1 + 2*cos(theta)\n        let theta: number = Math.acos((elements[0] + elements[5] + elements[10] - 1) / 2);\n\n        return theta;\n    }\n\n    /**\n     * Calculates the angle from a vector to a plane.\n     *\n     * @param {Array<number>} vector - The vector.\n     * @param {Array<number>} planeNormal - Normal of the plane.\n     * @returns {number} Angle from between plane and vector.\n     */\n    public angleToPlane(vector: number[], planeNormal: number[]): number {\n        let v: THREE.Vector3 = new THREE.Vector3().fromArray(vector);\n        let norm: number = v.length();\n\n        if (norm < this._epsilon) {\n            return 0;\n        }\n\n        let projection: number = v.dot(new THREE.Vector3().fromArray(planeNormal));\n\n        return Math.asin(projection / norm);\n    }\n\n    /**\n     * Calculates the distance between two coordinates\n     * (latitude longitude pairs) in meters according to\n     * the haversine formula.\n     *\n     * @param {number} lat1 - Latitude of the first coordinate.\n     * @param {number} lon1 - Longitude of the first coordinate.\n     * @param {number} lat2 - Latitude of the second coordinate.\n     * @param {number} lon2 - Longitude of the second coordinate.\n     * @returns {number} Distance between lat lon positions.\n     */\n    public distanceFromLatLon(lat1: number, lon1: number, lat2: number, lon2: number): number {\n        let r: number = 6371000;\n        let dLat: number = this.degToRad(lat2 - lat1);\n        let dLon: number = this.degToRad(lon2 - lon1);\n\n        let hav: number =\n            Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n            Math.cos(lat1) * Math.cos(lat2) *\n            Math.sin(dLon / 2) * Math.sin(dLon / 2);\n\n        let d: number = 2 * r * Math.atan2(Math.sqrt(hav), Math.sqrt(1 - hav));\n\n        return d;\n    }\n}\n\nexport default Spatial;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {Transform} from \"../Geo\";\n\n/**\n * @class Camera\n *\n * @classdesc Holds information about a camera.\n */\nexport class Camera {\n    private _position: THREE.Vector3;\n    private _lookat: THREE.Vector3;\n    private _up: THREE.Vector3;\n    private _focal: number;\n\n    /**\n     * Create a new camera instance.\n     * @param {Transform} [transform] - Optional transform instance.\n     */\n    constructor(transform?: Transform) {\n        if (transform != null) {\n            this._position = new THREE.Vector3().fromArray(transform.unprojectSfM([0, 0], 0));\n            this._lookat = new THREE.Vector3().fromArray(transform.unprojectSfM([0, 0], 10));\n            this._up = transform.upVector();\n            this._focal = this._getFocal(transform);\n        } else {\n            this._position = new THREE.Vector3(0, 0, 0);\n            this._lookat = new THREE.Vector3(0, 0, 1);\n            this._up = new THREE.Vector3(0, -1, 0);\n            this._focal = 1;\n        }\n    }\n\n   /**\n    * Get position.\n    * @returns {THREE.Vector3} The position vector.\n    */\n    public get position(): THREE.Vector3 {\n        return this._position;\n    }\n\n   /**\n    * Get lookat.\n    * @returns {THREE.Vector3} The lookat vector.\n    */\n    public get lookat(): THREE.Vector3 {\n        return this._lookat;\n    }\n\n   /**\n    * Get up.\n    * @returns {THREE.Vector3} The up vector.\n    */\n    public get up(): THREE.Vector3 {\n        return this._up;\n    }\n\n   /**\n    * Get focal.\n    * @returns {number} The focal length.\n    */\n    public get focal(): number {\n        return this._focal;\n    }\n\n   /**\n    * Set focal.\n    */\n    public set focal(value: number) {\n        this._focal = value;\n    }\n\n    /**\n     * Update this camera to the linearly interpolated value of two other cameras.\n     *\n     * @param {Camera} a - First camera.\n     * @param {Camera} b - Second camera.\n     * @param {number} alpha - Interpolation value on the interval [0, 1].\n     */\n    public lerpCameras(a: Camera, b: Camera, alpha: number): void {\n      this._position.subVectors(b.position, a.position).multiplyScalar(alpha).add(a.position);\n      this._lookat.subVectors(b.lookat, a.lookat).multiplyScalar(alpha).add(a.lookat);\n      this._up.subVectors(b.up, a.up).multiplyScalar(alpha).add(a.up);\n      this._focal = (1 - alpha) * a.focal + alpha * b.focal;\n    }\n\n    /**\n     * Copy the properties of another camera to this camera.\n     *\n     * @param {Camera} other - Another camera.\n     */\n    public copy(other: Camera): void {\n        this._position.copy(other.position);\n        this._lookat.copy(other.lookat);\n        this._up.copy(other.up);\n        this._focal = other.focal;\n    }\n\n    /**\n     * Clone this camera.\n     *\n     * @returns {Camera} A camera with cloned properties equal to this camera.\n     */\n    public clone(): Camera {\n        let camera: Camera = new Camera();\n\n        camera.position.copy(this._position);\n        camera.lookat.copy(this._lookat);\n        camera.up.copy(this._up);\n        camera.focal = this._focal;\n\n        return camera;\n    }\n\n    /**\n     * Determine the distance between this camera and another camera.\n     *\n     * @param {Camera} other - Another camera.\n     * @returns {number} The distance between the cameras.\n     */\n    public diff(other: Camera): number {\n        let pd: number = this._position.distanceToSquared(other.position);\n        let ld: number = this._lookat.distanceToSquared(other.lookat);\n        let ud: number = this._up.distanceToSquared(other.up);\n        let fd: number = 100 * Math.abs(this._focal - other.focal);\n\n        return Math.max(pd, ld, ud, fd);\n    }\n\n    /**\n     * Get the focal length based on the transform.\n     *\n     * @description Returns the focal length of the transform if gpano info is not available.\n     * Returns a focal length corresponding to a vertical fov clamped to [45, 90] degrees based on\n     * the gpano information if available.\n     *\n     * @returns {number} Focal length.\n     */\n    private _getFocal(transform: Transform): number {\n        if (transform.gpano == null) {\n            return transform.focal;\n        }\n\n        let vFov: number = Math.PI * transform.gpano.CroppedAreaImageHeightPixels / transform.gpano.FullPanoHeightPixels;\n        let focal: number = 0.5 / Math.tan(vFov / 2);\n\n        return Math.min(1 / (2 * (Math.sqrt(2) - 1)), Math.max(0.5, focal));\n    }\n}\n",
     "/**\n * @class GeoCoords\n *\n * @classdesc Converts coordinates between the geodetic (WGS84),\n * Earth-Centered, Earth-Fixed (ECEF) and local topocentric\n * East, North, Up (ENU) reference frames.\n *\n * The WGS84 has latitude (degrees), longitude (degrees) and\n * altitude (meters) values.\n *\n * The ECEF Z-axis pierces the north pole and the\n * XY-axis defines the equatorial plane. The X-axis extends\n * from the geocenter to the intersection of the Equator and\n * the Greenwich Meridian. All values in meters.\n *\n * The WGS84 parameters are:\n *\n * a = 6378137\n * b = a * (1 - f)\n * f = 1 / 298.257223563\n * e = Math.sqrt((a^2 - b^2) / a^2)\n * e' = Math.sqrt((a^2 - b^2) / b^2)\n *\n * The WGS84 to ECEF conversion is performed using the following:\n *\n * X = (N - h) * cos(phi) * cos(lambda)\n * Y = (N + h) * cos(phi) * sin(lambda)\n * Z = (b^2 * N / a^2 + h) * sin(phi)\n *\n * where\n *\n * phi = latitude\n * lambda = longitude\n * h = height above ellipsoid (altitude)\n * N = Radius of curvature (meters)\n *   = a / Math.sqrt(1 - e^2 * sin(phi)^2)\n *\n * The ECEF to WGS84 conversion is performed using the following:\n *\n * phi = arctan((Z + e'^2 * b * sin(theta)^3) / (p - e^2 * a * cos(theta)^3))\n * lambda = arctan(Y / X)\n * h = p / cos(phi) - N\n *\n * where\n *\n * p = Math.sqrt(X^2 + Y^2)\n * theta = arctan(Z * a / p * b)\n *\n * In the ENU reference frame the x-axis points to the\n * East, the y-axis to the North and the z-axis Up. All values\n * in meters.\n *\n * The ECEF to ENU conversion is performed using the following:\n *\n * | x |   |       -sin(lambda_r)                cos(lambda_r)             0      | | X - X_r |\n * | y | = | -sin(phi_r) * cos(lambda_r)  -sin(phi_r) * sin(lambda_r)  cos(phi_r) | | Y - Y_r |\n * | z |   |  cos(phi_r) * cos(lambda_r)   cos(phi_r) * sin(lambda_r)  sin(phi_r) | | Z - Z_r |\n *\n * where\n *\n * phi_r = latitude of reference\n * lambda_r = longitude of reference\n * X_r, Y_r, Z_r = ECEF coordinates of reference\n *\n * The ENU to ECEF conversion is performed by solving the above equation for X, Y, Z.\n *\n * WGS84 to ENU and ENU to WGS84 are two step conversions with ECEF calculated in\n * the first step for both conversions.\n */\nexport class GeoCoords {\n    private _wgs84a: number = 6378137.0;\n    private _wgs84b: number = 6356752.31424518;\n\n    /**\n     * Convert coordinates from geodetic (WGS84) reference to local topocentric\n     * (ENU) reference.\n     *\n     * @param {number} lat Latitude in degrees.\n     * @param {number} lon Longitude in degrees.\n     * @param {number} alt Altitude in meters.\n     * @param {number} refLat Reference latitude in degrees.\n     * @param {number} refLon Reference longitude in degrees.\n     * @param {number} refAlt Reference altitude in meters.\n     * @returns {Array<number>} The x, y, z local topocentric ENU coordinates.\n     */\n    public geodeticToEnu(\n        lat: number,\n        lon: number,\n        alt: number,\n        refLat: number,\n        refLon: number,\n        refAlt: number): number[] {\n\n        let ecef: number[] = this.geodeticToEcef(lat, lon, alt);\n\n        return this.ecefToEnu(ecef[0], ecef[1], ecef[2], refLat, refLon, refAlt);\n    }\n\n    /**\n     * Convert coordinates from local topocentric (ENU) reference to\n     * geodetic (WGS84) reference.\n     *\n     * @param {number} x Topocentric ENU coordinate in East direction.\n     * @param {number} y Topocentric ENU coordinate in North direction.\n     * @param {number} z Topocentric ENU coordinate in Up direction.\n     * @param {number} refLat Reference latitude in degrees.\n     * @param {number} refLon Reference longitude in degrees.\n     * @param {number} refAlt Reference altitude in meters.\n     * @returns {Array<number>} The latitude and longitude in degrees\n     *                          as well as altitude in meters.\n     */\n    public enuToGeodetic(\n        x: number,\n        y: number,\n        z: number,\n        refLat: number,\n        refLon: number,\n        refAlt: number): number[] {\n\n        let ecef: number[] = this.enuToEcef(x, y, z, refLat, refLon, refAlt);\n\n        return this.ecefToGeodetic(ecef[0], ecef[1], ecef[2]);\n    }\n\n    /**\n     * Convert coordinates from Earth-Centered, Earth-Fixed (ECEF) reference\n     * to local topocentric (ENU) reference.\n     *\n     * @param {number} X ECEF X-value.\n     * @param {number} Y ECEF Y-value.\n     * @param {number} Z ECEF Z-value.\n     * @param {number} refLat Reference latitude in degrees.\n     * @param {number} refLon Reference longitude in degrees.\n     * @param {number} refAlt Reference altitude in meters.\n     * @returns {Array<number>} The x, y, z topocentric ENU coordinates in East, North\n     * and Up directions respectively.\n     */\n    public ecefToEnu(\n        X: number,\n        Y: number,\n        Z: number,\n        refLat: number,\n        refLon: number,\n        refAlt: number): number[] {\n\n        let refEcef: number[] = this.geodeticToEcef(refLat, refLon, refAlt);\n\n        let V: number[] = [X - refEcef[0], Y - refEcef[1], Z - refEcef[2]];\n\n        refLat = refLat * Math.PI / 180.0;\n        refLon = refLon * Math.PI / 180.0;\n\n        let cosLat: number = Math.cos(refLat);\n        let sinLat: number = Math.sin(refLat);\n        let cosLon: number = Math.cos(refLon);\n        let sinLon: number = Math.sin(refLon);\n\n        let x: number = -sinLon * V[0] + cosLon * V[1];\n        let y: number = -sinLat * cosLon * V[0] - sinLat * sinLon * V[1] + cosLat * V[2];\n        let z: number = cosLat * cosLon * V[0] + cosLat * sinLon * V[1] + sinLat * V[2];\n\n        return [x, y, z];\n    }\n\n    /**\n     * Convert coordinates from local topocentric (ENU) reference\n     * to Earth-Centered, Earth-Fixed (ECEF) reference.\n     *\n     * @param {number} x Topocentric ENU coordinate in East direction.\n     * @param {number} y Topocentric ENU coordinate in North direction.\n     * @param {number} z Topocentric ENU coordinate in Up direction.\n     * @param {number} refLat Reference latitude in degrees.\n     * @param {number} refLon Reference longitude in degrees.\n     * @param {number} refAlt Reference altitude in meters.\n     * @returns {Array<number>} The X, Y, Z ECEF coordinates.\n     */\n    public enuToEcef(\n        x: number,\n        y: number,\n        z: number,\n        refLat: number,\n        refLon: number,\n        refAlt: number): number[] {\n\n        let refEcef: number[] = this.geodeticToEcef(refLat, refLon, refAlt);\n\n        refLat = refLat * Math.PI / 180.0;\n        refLon = refLon * Math.PI / 180.0;\n\n        let cosLat: number = Math.cos(refLat);\n        let sinLat: number = Math.sin(refLat);\n        let cosLon: number = Math.cos(refLon);\n        let sinLon: number = Math.sin(refLon);\n\n        let X: number = -sinLon * x - sinLat * cosLon * y + cosLat * cosLon * z + refEcef[0];\n        let Y: number = cosLon * x - sinLat * sinLon * y + cosLat * sinLon * z + refEcef[1];\n        let Z: number = cosLat * y + sinLat * z + refEcef[2];\n\n        return [X, Y, Z];\n    }\n\n    /**\n     * Convert coordinates from geodetic reference (WGS84) to Earth-Centered,\n     * Earth-Fixed (ECEF) reference.\n     *\n     * @param {number} lat Latitude in degrees.\n     * @param {number} lon Longitude in degrees.\n     * @param {number} alt Altitude in meters.\n     * @returns {Array<number>} The X, Y, Z ECEF coordinates.\n     */\n    public geodeticToEcef(lat: number, lon: number, alt: number): number[] {\n        let a: number = this._wgs84a;\n        let b: number = this._wgs84b;\n\n        lat = lat * Math.PI / 180.0;\n        lon = lon * Math.PI / 180.0;\n\n        let cosLat: number = Math.cos(lat);\n        let sinLat: number = Math.sin(lat);\n        let cosLon: number = Math.cos(lon);\n        let sinLon: number = Math.sin(lon);\n\n        let a2: number = a * a;\n        let b2: number = b * b;\n\n        let L: number = 1.0 / Math.sqrt(a2 * cosLat * cosLat + b2 * sinLat * sinLat);\n\n        let nhcl: number = (a2 * L + alt) * cosLat;\n\n        let X: number = nhcl * cosLon;\n        let Y: number = nhcl * sinLon;\n        let Z: number = (b2 * L + alt) * sinLat;\n\n        return [X, Y, Z];\n    }\n\n    /**\n     * Convert coordinates from Earth-Centered, Earth-Fixed (ECEF) reference\n     * to geodetic reference (WGS84).\n     *\n     * @param {number} X ECEF X-value.\n     * @param {number} Y ECEF Y-value.\n     * @param {number} Z ECEF Z-value.\n     * @returns {Array<number>} The latitude and longitude in degrees\n     *                          as well as altitude in meters.\n     */\n    public ecefToGeodetic(X: number, Y: number, Z: number): number[] {\n        let a: number = this._wgs84a;\n        let b: number = this._wgs84b;\n\n        let a2: number = a * a;\n        let b2: number = b * b;\n\n        let a2mb2: number = a2 - b2;\n\n        let ea: number = Math.sqrt(a2mb2 / a2);\n        let eb: number = Math.sqrt(a2mb2 / b2);\n\n        let p: number = Math.sqrt(X * X + Y * Y);\n        let theta: number = Math.atan2(Z * a, p * b);\n\n        let sinTheta: number = Math.sin(theta);\n        let cosTheta: number = Math.cos(theta);\n\n        let lon: number = Math.atan2(Y, X);\n        let lat: number =\n            Math.atan2(Z + eb * eb * b * sinTheta * sinTheta * sinTheta,\n                       p - ea * ea * a * cosTheta * cosTheta * cosTheta);\n\n        let sinLat: number = Math.sin(lat);\n        let cosLat: number = Math.cos(lat);\n\n        let N: number = a / Math.sqrt(1 - ea * ea * sinLat * sinLat);\n        let alt: number = p / cosLat - N;\n\n        return [lat * 180.0 / Math.PI, lon * 180.0 / Math.PI, alt];\n    }\n}\n\nexport default GeoCoords;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\n/**\n * @class Spatial\n *\n * @classdesc Provides methods for scalar, vector and matrix calculations.\n */\nexport class Spatial {\n    private _epsilon: number = 1e-9;\n\n    /**\n     * Converts azimuthal phi rotation (counter-clockwise with origin on X-axis) to\n     * bearing (clockwise with origin at north or Y-axis).\n     *\n     * @param {number} phi - Azimuthal phi angle in radians.\n     * @returns {number} Bearing in radians.\n     */\n    public azimuthalToBearing(phi: number): number {\n         return -phi + Math.PI / 2;\n    }\n\n    /**\n     * Converts degrees to radians.\n     *\n     * @param {number} deg - Degrees.\n     * @returns {number} Radians.\n     */\n    public degToRad(deg: number): number {\n        return Math.PI * deg / 180;\n    }\n\n    /**\n     * Converts radians to degrees.\n     *\n     * @param {number} rad - Radians.\n     * @returns {number} Degrees.\n     */\n    public radToDeg(rad: number): number {\n        return 180 * rad / Math.PI;\n    }\n\n    /**\n     * Creates a rotation matrix from an angle-axis vector.\n     *\n     * @param {Array<number>} angleAxis - Angle-axis representation of a rotation.\n     * @returns {THREE.Matrix4} Rotation matrix.\n     */\n    public rotationMatrix(angleAxis: number[]): THREE.Matrix4 {\n        let axis: THREE.Vector3 =\n            new THREE.Vector3(angleAxis[0], angleAxis[1], angleAxis[2]);\n        let angle: number = axis.length();\n\n        axis.normalize();\n\n        return new THREE.Matrix4().makeRotationAxis(axis, angle);\n    }\n\n    /**\n     * Rotates a vector according to a angle-axis rotation vector.\n     *\n     * @param {Array<number>} vector - Vector to rotate.\n     * @param {Array<number>} angleAxis - Angle-axis representation of a rotation.\n     * @returns {THREE.Vector3} Rotated vector.\n     */\n    public rotate(vector: number[], angleAxis: number[]): THREE.Vector3 {\n        let v: THREE.Vector3 = new THREE.Vector3(vector[0], vector[1], vector[2]);\n        let rotationMatrix: THREE.Matrix4 = this.rotationMatrix(angleAxis);\n        v.applyMatrix4(rotationMatrix);\n\n        return v;\n    }\n\n    /**\n     * Calculates the optical center from a rotation vector\n     * on the angle-axis representation and a translation vector\n     * according to C = -R^T t.\n     *\n     * @param {Array<number>} rotation - Angle-axis representation of a rotation.\n     * @param {Array<number>} translation - Translation vector.\n     * @returns {THREE.Vector3} Optical center.\n     */\n    public opticalCenter(rotation: number[], translation: number[]): THREE.Vector3 {\n        let angleAxis: number[] = [-rotation[0], -rotation[1], -rotation[2]];\n        let vector: number[] = [-translation[0], -translation[1], -translation[2]];\n\n        return this.rotate(vector, angleAxis);\n    }\n\n    /**\n     * Calculates the viewing direction from a rotation vector\n     * on the angle-axis representation.\n     *\n     * @param {number[]} rotation - Angle-axis representation of a rotation.\n     * @returns {THREE.Vector3} Viewing direction.\n     */\n    public viewingDirection(rotation: number[]): THREE.Vector3 {\n        let angleAxis: number[] = [-rotation[0], -rotation[1], -rotation[2]];\n\n        return this.rotate([0, 0, 1], angleAxis);\n    }\n\n    /**\n     * Wrap a number on the interval [min, max].\n     *\n     * @param {number} value - Value to wrap.\n     * @param {number} min - Lower endpoint of interval.\n     * @param {number} max - Upper endpoint of interval.\n     * @returns {number} The wrapped number.\n     */\n    public wrap(value: number, min: number, max: number): number {\n        if (max < min) {\n            throw new Error(\"Invalid arguments: max must be larger than min.\");\n        }\n\n        let interval: number = (max - min);\n\n        while (value > max || value < min) {\n            if (value > max) {\n                value = value - interval;\n            } else if (value < min) {\n                value = value + interval;\n            }\n        }\n\n        return value;\n    }\n\n    /**\n     * Wrap an angle on the interval [-Pi, Pi].\n     *\n     * @param {number} angle - Value to wrap.\n     * @returns {number} Wrapped angle.\n     */\n    public wrapAngle(angle: number): number {\n        return this.wrap(angle, -Math.PI, Math.PI);\n    }\n\n    /**\n     * Limit the value to the interval [min, max] by changing the value to\n     * the nearest available one when it is outside the interval.\n     *\n     * @param {number} value - Value to clamp.\n     * @param {number} min - Minimum of the interval.\n     * @param {number} max - Maximum of the interval.\n     * @returns {number} Clamped value.\n     */\n    public clamp(value: number, min: number, max: number): number {\n        if (value < min) {\n            return min;\n        }\n\n        if (value > max) {\n            return max;\n        }\n\n        return value;\n    }\n\n    /**\n     * Calculates the counter-clockwise angle from the first\n     * vector (x1, y1)^T to the second (x2, y2)^T.\n     *\n     * @param {number} x1 - X coordinate of first vector.\n     * @param {number} y1 - Y coordinate of first vector.\n     * @param {number} x2 - X coordinate of second vector.\n     * @param {number} y2 - Y coordinate of second vector.\n     * @returns {number} Counter clockwise angle between the vectors.\n     */\n    public angleBetweenVector2(x1: number, y1: number, x2: number, y2: number): number {\n        let angle: number = Math.atan2(y2, x2) - Math.atan2(y1, x1);\n\n        return this.wrapAngle(angle);\n    }\n\n    /**\n     * Calculates the minimum (absolute) angle change for rotation\n     * from one angle to another on the [-Pi, Pi] interval.\n     *\n     * @param {number} angle1 - Start angle.\n     * @param {number} angle2 - Destination angle.\n     * @returns {number} Absolute angle change between angles.\n     */\n    public angleDifference(angle1: number, angle2: number): number {\n        let angle: number = angle2 - angle1;\n\n        return this.wrapAngle(angle);\n    }\n\n    /**\n     * Calculates the relative rotation angle between two\n     * angle-axis vectors.\n     *\n     * @param {number} rotation1 - First angle-axis vector.\n     * @param {number} rotation2 - Second angle-axis vector.\n     * @returns {number} Relative rotation angle.\n     */\n    public relativeRotationAngle(rotation1: number[], rotation2: number[]): number {\n        let R1T: THREE.Matrix4 = this.rotationMatrix(\n            [-rotation1[0], -rotation1[1], -rotation1[2]]);\n        let R2: THREE.Matrix4 = this.rotationMatrix(rotation2);\n\n        let R: THREE.Matrix4 = R1T.multiply(R2);\n        let elements: Float32Array = R.elements;\n\n        // from Tr(R) = 1 + 2*cos(theta)\n        let theta: number = Math.acos((elements[0] + elements[5] + elements[10] - 1) / 2);\n\n        return theta;\n    }\n\n    /**\n     * Calculates the angle from a vector to a plane.\n     *\n     * @param {Array<number>} vector - The vector.\n     * @param {Array<number>} planeNormal - Normal of the plane.\n     * @returns {number} Angle from between plane and vector.\n     */\n    public angleToPlane(vector: number[], planeNormal: number[]): number {\n        let v: THREE.Vector3 = new THREE.Vector3().fromArray(vector);\n        let norm: number = v.length();\n\n        if (norm < this._epsilon) {\n            return 0;\n        }\n\n        let projection: number = v.dot(new THREE.Vector3().fromArray(planeNormal));\n\n        return Math.asin(projection / norm);\n    }\n\n    /**\n     * Calculates the distance between two coordinates\n     * (latitude longitude pairs) in meters according to\n     * the haversine formula.\n     *\n     * @param {number} lat1 - Latitude of the first coordinate.\n     * @param {number} lon1 - Longitude of the first coordinate.\n     * @param {number} lat2 - Latitude of the second coordinate.\n     * @param {number} lon2 - Longitude of the second coordinate.\n     * @returns {number} Distance between lat lon positions.\n     */\n    public distanceFromLatLon(lat1: number, lon1: number, lat2: number, lon2: number): number {\n        let r: number = 6371000;\n        let dLat: number = this.degToRad(lat2 - lat1);\n        let dLon: number = this.degToRad(lon2 - lon1);\n\n        let hav: number =\n            Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n            Math.cos(lat1) * Math.cos(lat2) *\n            Math.sin(dLon / 2) * Math.sin(dLon / 2);\n\n        let d: number = 2 * r * Math.atan2(Math.sqrt(hav), Math.sqrt(1 - hav));\n\n        return d;\n    }\n}\n\nexport default Spatial;\n",
-    "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {IGPano} from \"../API\";\nimport {Node} from \"../Graph\";\n\n/**\n * @class Transform\n *\n * @classdesc Class used for calculating coordinate transformations\n * and projections.\n */\nexport class Transform {\n    private _width: number;\n    private _height: number;\n    private _focal: number;\n    private _orientation: number;\n    private _scale: number;\n    private _basicWidth: number;\n    private _basicHeight: number;\n    private _basicAspect: number;\n\n    private _gpano: IGPano;\n\n    private _rt: THREE.Matrix4;\n    private _srt: THREE.Matrix4;\n\n    /**\n     * Create a new transform instance.\n     * @param {Node} apiNavImIm - Node properties.\n     * @param {HTMLImageElement} image - Node image.\n     * @param {Array<number>} translation - Node translation vector in three dimensions.\n     */\n    constructor(node: Node, image: HTMLImageElement, translation: number[]) {\n        this._orientation = this._getValue(node.orientation, 1);\n\n        let imageWidth: number = image != null ? image.width : 4;\n        let imageHeight: number = image != null ? image.height : 3;\n        let keepOrientation: boolean = this._orientation < 5;\n\n        this._width = this._getValue(node.width, keepOrientation ? imageWidth : imageHeight);\n        this._height = this._getValue(node.height, keepOrientation ? imageHeight : imageWidth);\n\n        this._basicAspect = keepOrientation ?\n             this._width / this._height :\n             this._height / this._width;\n\n        this._basicWidth = keepOrientation ? node.width : node.height;\n        this._basicHeight = keepOrientation ? node.height : node.width;\n\n        this._focal = this._getValue(node.focal, 1);\n        this._scale = this._getValue(node.scale, 0);\n\n        this._gpano = node.gpano != null ? node.gpano : null;\n\n        this._rt = this._getRt(node.rotation, translation);\n        this._srt = this._getSrt(this._rt, this._scale);\n    }\n\n    /**\n     * Get basic aspect.\n     * @returns {number} The orientation adjusted aspect ratio.\n     */\n    public get basicAspect(): number {\n        return this._basicAspect;\n    }\n\n    /**\n     * Get basic height.\n     *\n     * @description Does not fall back to node image height but\n     * uses original value from API so can be faulty.\n     *\n     * @returns {number} The height of the basic version image\n     * (adjusted for orientation).\n     */\n    public get basicHeight(): number {\n        return this._basicHeight;\n    }\n\n    /**\n     * Get basic width.\n     *\n     * @description Does not fall back to node image width but\n     * uses original value from API so can be faulty.\n     *\n     * @returns {number} The width of the basic version image\n     * (adjusted for orientation).\n     */\n    public get basicWidth(): number {\n        return this._basicWidth;\n    }\n\n    /**\n     * Get focal.\n     * @returns {number} The node focal length.\n     */\n    public get focal(): number {\n        return this._focal;\n    }\n\n    /**\n     * Get fullPano.\n     *\n     * @returns {boolean} Value indicating whether the node is a complete\n     * 360 panorama.\n     */\n    public get fullPano(): boolean {\n        return this._gpano != null &&\n            this._gpano.CroppedAreaLeftPixels === 0 &&\n            this._gpano.CroppedAreaTopPixels === 0 &&\n            this._gpano.CroppedAreaImageWidthPixels === this._gpano.FullPanoWidthPixels &&\n            this._gpano.CroppedAreaImageHeightPixels === this._gpano.FullPanoHeightPixels;\n    }\n\n    /**\n     * Get gpano.\n     * @returns {number} The node gpano information.\n     */\n    public get gpano(): IGPano {\n        return this._gpano;\n    }\n\n    /**\n     * Get height.\n     *\n     * @description Falls back to the node image height if\n     * the API data is faulty.\n     *\n     * @returns {number} The orientation adjusted image height.\n     */\n    public get height(): number {\n        return this._height;\n    }\n\n    /**\n     * Get orientation.\n     * @returns {number} The image orientation.\n     */\n    public get orientation(): number {\n        return this._orientation;\n    }\n\n    /**\n     * Get rt.\n     * @returns {THREE.Matrix4} The extrinsic camera matrix.\n     */\n    public get rt(): THREE.Matrix4 {\n        return this._rt;\n    }\n\n    /**\n     * Get srt.\n     * @returns {THREE.Matrix4} The scaled extrinsic camera matrix.\n     */\n    public get srt(): THREE.Matrix4 {\n        return this._srt;\n    }\n\n    /**\n     * Get scale.\n     * @returns {number} The node atomic reconstruction scale.\n     */\n    public get scale(): number {\n        return this._scale;\n    }\n\n    /**\n     * Get width.\n     *\n     * @description Falls back to the node image width if\n     * the API data is faulty.\n     *\n     * @returns {number} The orientation adjusted image width.\n     */\n    public get width(): number {\n        return this._width;\n    }\n\n    /**\n     * Calculate the up vector for the node transform.\n     *\n     * @returns {THREE.Vector3} Normalized and orientation adjusted up vector.\n     */\n    public upVector(): THREE.Vector3 {\n        let rte: Float32Array = this._rt.elements;\n\n        switch (this._orientation) {\n            case 1:\n                return new THREE.Vector3(-rte[1], -rte[5], -rte[9]);\n            case 3:\n                return new THREE.Vector3(rte[1],  rte[5],  rte[9]);\n            case 6:\n                return new THREE.Vector3(-rte[0], -rte[4], -rte[8]);\n            case 8:\n                return new THREE.Vector3(rte[0],  rte[4],  rte[8]);\n            default:\n                return new THREE.Vector3(-rte[1], -rte[5], -rte[9]);\n        }\n    }\n\n    /**\n     * Calculate projector matrix for projecting 3D points to texture map\n     * coordinates (u and v).\n     *\n     * @returns {THREE.Matrix4} Projection matrix for 3D point to texture\n     * map coordinate calculations.\n     */\n    public projectorMatrix(): THREE.Matrix4 {\n        let projector: THREE.Matrix4 = this._normalizedToTextureMatrix();\n\n        let f: number = this._focal;\n        let projection: THREE.Matrix4 = new THREE.Matrix4().set(\n            f, 0, 0, 0,\n            0, f, 0, 0,\n            0, 0, 0, 0,\n            0, 0, 1, 0\n        );\n\n        projector.multiply(projection);\n        projector.multiply(this._rt);\n\n        return projector;\n    }\n\n    /**\n     * Project 3D world coordinates to basic coordinates.\n     *\n     * @param {Array<number>} point3d - 3D world coordinates.\n     * @return {Array<number>} 2D basic coordinates.\n     */\n    public projectBasic(point3d: number[]): number[] {\n        let sfm: number[] = this.projectSfM(point3d);\n        return this._sfmToBasic(sfm);\n    }\n\n    /**\n     * Unproject basic coordinates to 3D world coordinates.\n     *\n     * @param {Array<number>} basic - 2D basic coordinates.\n     * @param {Array<number>} distance - Depth to unproject from camera center.\n     * @returns {Array<number>} Unprojected 3D world coordinates.\n     */\n    public unprojectBasic(basic: number[], distance: number): number[] {\n        let sfm: number[] = this._basicToSfm(basic);\n        return this.unprojectSfM(sfm, distance);\n    }\n\n    /**\n     * Project 3D world coordinates to SfM coordinates.\n     *\n     * @param {Array<number>} point3d - 3D world coordinates.\n     * @return {Array<number>} 2D SfM coordinates.\n     */\n    public projectSfM(point3d: number[]): number[] {\n        let v: THREE.Vector4 = new THREE.Vector4(point3d[0], point3d[1], point3d[2], 1);\n        v.applyMatrix4(this._rt);\n        return this._bearingToSfm([v.x, v.y, v.z]);\n    }\n\n    /**\n     * Unproject SfM coordinates to a 3D world coordinates.\n     *\n     * @param {Array<number>} sfm - 2D SfM coordinates.\n     * @param {Array<number>} distance - Depth to unproject from camera center.\n     * @returns {Array<number>} Unprojected 3D world coordinates.\n     */\n    public unprojectSfM(sfm: number[], distance: number): number[] {\n        let bearing: number[] = this._sfmToBearing(sfm);\n        let v: THREE.Vector4 = new THREE.Vector4(\n            distance * bearing[0],\n            distance * bearing[1],\n            distance * bearing[2],\n            1);\n        v.applyMatrix4(new THREE.Matrix4().getInverse(this._rt));\n        return [v.x / v.w, v.y / v.w, v.z / v.w];\n    }\n\n    /**\n     * Transform SfM coordinates to bearing vector (3D cartesian\n     * coordinates on the unit sphere).\n     *\n     * @param {Array<number>} sfm - 2D SfM coordinates.\n     * @returns {Array<number>} Bearing vector (3D cartesian coordinates\n     * on the unit sphere).\n     */\n    private _sfmToBearing(sfm: number[]): number[] {\n        if (this._fullPano()) {\n            let lon: number = sfm[0] * 2 * Math.PI;\n            let lat: number = -sfm[1] * 2 * Math.PI;\n            let x: number = Math.cos(lat) * Math.sin(lon);\n            let y: number = -Math.sin(lat);\n            let z: number = Math.cos(lat) * Math.cos(lon);\n            return [x, y, z];\n        } else if (this._gpano) {\n            let size: number = Math.max(this.gpano.CroppedAreaImageWidthPixels, this.gpano.CroppedAreaImageHeightPixels);\n            let fullPanoPixel: number[] = [\n                sfm[0] * size + this.gpano.CroppedAreaImageWidthPixels / 2 + this.gpano.CroppedAreaLeftPixels,\n                sfm[1] * size + this.gpano.CroppedAreaImageHeightPixels / 2 + this.gpano.CroppedAreaTopPixels,\n            ];\n            let lon: number = 2 * Math.PI * (fullPanoPixel[0] / this.gpano.FullPanoWidthPixels - 0.5);\n            let lat: number = - Math.PI * (fullPanoPixel[1] / this.gpano.FullPanoHeightPixels - 0.5);\n            let x: number = Math.cos(lat) * Math.sin(lon);\n            let y: number = -Math.sin(lat);\n            let z: number = Math.cos(lat) * Math.cos(lon);\n            return [x, y, z];\n        } else {\n            let v: THREE.Vector3 = new THREE.Vector3(sfm[0], sfm[1], this._focal);\n            v.normalize();\n            return [v.x, v.y, v.z];\n        }\n    }\n\n    /**\n     * Transform bearing vector (3D cartesian coordiantes on the unit sphere) to\n     * SfM coordinates.\n     *\n     * @param {Array<number>} bearing - Bearing vector (3D cartesian coordinates on the\n     * unit sphere).\n     * @returns {Array<number>} 2D SfM coordinates.\n     */\n    private _bearingToSfm(bearing: number[]): number[] {\n        if (this._fullPano()) {\n            let x: number = bearing[0];\n            let y: number = bearing[1];\n            let z: number = bearing[2];\n            let lon: number = Math.atan2(x, z);\n            let lat: number = Math.atan2(-y, Math.sqrt(x * x + z * z));\n            return [lon / (2 * Math.PI), -lat / (2 * Math.PI)];\n        } else if (this._gpano) {\n            let x: number = bearing[0];\n            let y: number = bearing[1];\n            let z: number = bearing[2];\n            let lon: number = Math.atan2(x, z);\n            let lat: number = Math.atan2(-y, Math.sqrt(x * x + z * z));\n            let fullPanoPixel: number[] = [\n                (lon / (2 * Math.PI) + 0.5) * this.gpano.FullPanoWidthPixels,\n                (- lat / Math.PI + 0.5) * this.gpano.FullPanoHeightPixels,\n            ];\n            let size: number = Math.max(this.gpano.CroppedAreaImageWidthPixels, this.gpano.CroppedAreaImageHeightPixels);\n            return [\n                (fullPanoPixel[0] - this.gpano.CroppedAreaLeftPixels - this.gpano.CroppedAreaImageWidthPixels / 2) / size,\n                (fullPanoPixel[1] - this.gpano.CroppedAreaTopPixels - this.gpano.CroppedAreaImageHeightPixels / 2) / size,\n            ];\n        } else {\n            if (bearing[2] > 0) {\n                return [\n                    bearing[0] * this._focal / bearing[2],\n                    bearing[1] * this._focal / bearing[2],\n                ];\n            } else {\n                return [\n                    bearing[0] < 0 ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,\n                    bearing[1] < 0 ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,\n                ];\n            }\n        }\n    }\n\n    /**\n     * Convert basic coordinates to SfM coordinates.\n     *\n     * @param {Array<number>} basic - 2D basic coordinates.\n     * @returns {Array<number>} 2D SfM coordinates.\n     */\n    private _basicToSfm(basic: number[]): number[] {\n        let rotatedX: number;\n        let rotatedY: number;\n\n        switch (this._orientation) {\n            case 1:\n                rotatedX = basic[0];\n                rotatedY = basic[1];\n                break;\n            case 3:\n                rotatedX = 1 - basic[0];\n                rotatedY = 1 - basic[1];\n                break;\n            case 6:\n                rotatedX = basic[1];\n                rotatedY = 1 - basic[0];\n                break;\n            case 8:\n                rotatedX = 1 - basic[1];\n                rotatedY = basic[0];\n                break;\n            default:\n                rotatedX = basic[0];\n                rotatedY = basic[1];\n                break;\n        }\n\n        let w: number = this._width;\n        let h: number = this._height;\n        let s: number = Math.max(w, h);\n        let sfmX: number = rotatedX * w / s - w / s / 2;\n        let sfmY: number = rotatedY * h / s - h / s / 2;\n\n        return [sfmX, sfmY];\n    }\n\n    /**\n     * Convert SfM coordinates to basic coordinates.\n     *\n     * @param {Array<number>} sfm - 2D SfM coordinates.\n     * @returns {Array<number>} 2D basic coordinates.\n     */\n    private _sfmToBasic(sfm: number[]): number[] {\n        let w: number = this._width;\n        let h: number = this._height;\n        let s: number = Math.max(w, h);\n        let rotatedX: number = (sfm[0] + w / s / 2) / w * s;\n        let rotatedY: number = (sfm[1] + h / s / 2) / h * s;\n\n        let basicX: number;\n        let basicY: number;\n\n        switch (this._orientation) {\n            case 1:\n                basicX = rotatedX;\n                basicY = rotatedY;\n                break;\n            case 3:\n                basicX = 1 - rotatedX;\n                basicY = 1 - rotatedY;\n                break;\n            case 6:\n                basicX = 1 - rotatedY;\n                basicY = rotatedX;\n                break;\n            case 8:\n                basicX = rotatedY;\n                basicY = 1 - rotatedX;\n                break;\n            default:\n                basicX = rotatedX;\n                basicY = rotatedY;\n                break;\n        }\n\n        return [basicX, basicY];\n    }\n\n    /**\n     * Determines if the gpano information indicates a full panorama.\n     *\n     * @returns {boolean} Value determining if the gpano information indicates\n     * a full panorama.\n     */\n    private _fullPano(): boolean {\n        return this.gpano != null &&\n            this.gpano.CroppedAreaLeftPixels === 0 &&\n            this.gpano.CroppedAreaTopPixels === 0 &&\n            this.gpano.CroppedAreaImageWidthPixels === this.gpano.FullPanoWidthPixels &&\n            this.gpano.CroppedAreaImageHeightPixels === this.gpano.FullPanoHeightPixels;\n    }\n\n    /**\n     * Checks a value and returns it if it exists and is larger than 0.\n     * Fallbacks if it is null.\n     *\n     * @param {number} value - Value to check.\n     * @param {number} fallback - Value to fall back to.\n     * @returns {number} The value or its fallback value if it is not defined or negative.\n     */\n    private _getValue(value: number, fallback: number): number {\n        return value != null && value > 0 ? value : fallback;\n    }\n\n    /**\n     * Creates the extrinsic camera matrix [ R | t ].\n     *\n     * @param {Array<number>} rotation - Rotation vector in angle axis representation.\n     * @param {Array<number>} translation - Translation vector.\n     * @returns {THREE.Matrix4} Extrisic camera matrix.\n     */\n    private _getRt(rotation: number[], translation: number[]): THREE.Matrix4 {\n        let axis: THREE.Vector3 = new THREE.Vector3(rotation[0], rotation[1], rotation[2]);\n        let angle: number = axis.length();\n        axis.normalize();\n\n        let rt: THREE.Matrix4 = new THREE.Matrix4();\n        rt.makeRotationAxis(axis, angle);\n        rt.setPosition(\n            new THREE.Vector3(\n                translation[0],\n                translation[1],\n                translation[2]));\n\n        return rt;\n    }\n\n    /**\n     * Calculates the scaled extrinsic camera matrix scale * [ R | t ].\n     *\n     * @param {THREE.Matrix4} rt - Extrisic camera matrix.\n     * @param {number} scale - Scale factor.\n     * @returns {THREE.Matrix4} Scaled extrisic camera matrix.\n     */\n    private _getSrt(rt: THREE.Matrix4, scale: number): THREE.Matrix4 {\n        let srt: THREE.Matrix4 = rt.clone();\n        let elements: Float32Array = srt.elements;\n\n        elements[12] = scale * elements[12];\n        elements[13] = scale * elements[13];\n        elements[14] = scale * elements[14];\n\n        srt.scale(new THREE.Vector3(scale, scale, scale));\n\n        return srt;\n    }\n\n    /**\n     * Calculate a transformation matrix from normalized coordinates for\n     * texture map coordinates.\n     *\n     * @returns {THREE.Matrix4} Normalized coordinates to texture map\n     * coordinates transformation matrix.\n     */\n    private _normalizedToTextureMatrix(): THREE.Matrix4 {\n        let size: number = Math.max(this._width, this._height);\n        let w: number = size / this._width;\n        let h: number = size / this._height;\n\n        switch (this._orientation) {\n            case 1:\n                return new THREE.Matrix4().set(w, 0, 0, 0.5, 0, -h, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1);\n            case 3:\n                return new THREE.Matrix4().set(-w, 0, 0, 0.5, 0, h, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1);\n            case 6:\n                return new THREE.Matrix4().set( 0, -h, 0, 0.5, -w, 0, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1);\n            case 8:\n                return new THREE.Matrix4().set(0, h, 0, 0.5, w, 0, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1);\n            default:\n                return new THREE.Matrix4().set(w, 0, 0, 0.5, 0, -h, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1);\n        }\n    }\n}\n",
+    "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {IGPano} from \"../API\";\nimport {Node} from \"../Graph\";\n\n/**\n * @class Transform\n *\n * @classdesc Class used for calculating coordinate transformations\n * and projections.\n */\nexport class Transform {\n    private _width: number;\n    private _height: number;\n    private _focal: number;\n    private _orientation: number;\n    private _scale: number;\n    private _basicWidth: number;\n    private _basicHeight: number;\n    private _basicAspect: number;\n\n    private _gpano: IGPano;\n\n    private _rt: THREE.Matrix4;\n    private _srt: THREE.Matrix4;\n\n    /**\n     * Create a new transform instance.\n     * @param {Node} apiNavImIm - Node properties.\n     * @param {HTMLImageElement} image - Node image.\n     * @param {Array<number>} translation - Node translation vector in three dimensions.\n     */\n    constructor(node: Node, image: HTMLImageElement, translation: number[]) {\n        this._orientation = this._getValue(node.orientation, 1);\n\n        let imageWidth: number = image != null ? image.width : 4;\n        let imageHeight: number = image != null ? image.height : 3;\n        let keepOrientation: boolean = this._orientation < 5;\n\n        this._width = this._getValue(node.width, keepOrientation ? imageWidth : imageHeight);\n        this._height = this._getValue(node.height, keepOrientation ? imageHeight : imageWidth);\n\n        this._basicAspect = keepOrientation ?\n             this._width / this._height :\n             this._height / this._width;\n\n        this._basicWidth = keepOrientation ? node.width : node.height;\n        this._basicHeight = keepOrientation ? node.height : node.width;\n\n        this._focal = this._getValue(node.focal, 1);\n        this._scale = this._getValue(node.scale, 0);\n\n        this._gpano = node.gpano != null ? node.gpano : null;\n\n        this._rt = this._getRt(node.rotation, translation);\n        this._srt = this._getSrt(this._rt, this._scale);\n    }\n\n    /**\n     * Get basic aspect.\n     * @returns {number} The orientation adjusted aspect ratio.\n     */\n    public get basicAspect(): number {\n        return this._basicAspect;\n    }\n\n    /**\n     * Get basic height.\n     *\n     * @description Does not fall back to node image height but\n     * uses original value from API so can be faulty.\n     *\n     * @returns {number} The height of the basic version image\n     * (adjusted for orientation).\n     */\n    public get basicHeight(): number {\n        return this._basicHeight;\n    }\n\n    /**\n     * Get basic width.\n     *\n     * @description Does not fall back to node image width but\n     * uses original value from API so can be faulty.\n     *\n     * @returns {number} The width of the basic version image\n     * (adjusted for orientation).\n     */\n    public get basicWidth(): number {\n        return this._basicWidth;\n    }\n\n    /**\n     * Get focal.\n     * @returns {number} The node focal length.\n     */\n    public get focal(): number {\n        return this._focal;\n    }\n\n    /**\n     * Get fullPano.\n     *\n     * @returns {boolean} Value indicating whether the node is a complete\n     * 360 panorama.\n     */\n    public get fullPano(): boolean {\n        return this._gpano != null &&\n            this._gpano.CroppedAreaLeftPixels === 0 &&\n            this._gpano.CroppedAreaTopPixels === 0 &&\n            this._gpano.CroppedAreaImageWidthPixels === this._gpano.FullPanoWidthPixels &&\n            this._gpano.CroppedAreaImageHeightPixels === this._gpano.FullPanoHeightPixels;\n    }\n\n    /**\n     * Get gpano.\n     * @returns {number} The node gpano information.\n     */\n    public get gpano(): IGPano {\n        return this._gpano;\n    }\n\n    /**\n     * Get height.\n     *\n     * @description Falls back to the node image height if\n     * the API data is faulty.\n     *\n     * @returns {number} The orientation adjusted image height.\n     */\n    public get height(): number {\n        return this._height;\n    }\n\n    /**\n     * Get orientation.\n     * @returns {number} The image orientation.\n     */\n    public get orientation(): number {\n        return this._orientation;\n    }\n\n    /**\n     * Get rt.\n     * @returns {THREE.Matrix4} The extrinsic camera matrix.\n     */\n    public get rt(): THREE.Matrix4 {\n        return this._rt;\n    }\n\n    /**\n     * Get srt.\n     * @returns {THREE.Matrix4} The scaled extrinsic camera matrix.\n     */\n    public get srt(): THREE.Matrix4 {\n        return this._srt;\n    }\n\n    /**\n     * Get scale.\n     * @returns {number} The node atomic reconstruction scale.\n     */\n    public get scale(): number {\n        return this._scale;\n    }\n\n    /**\n     * Get has valid scale.\n     * @returns {boolean} Value indicating if the scale of the transform is valid.\n     */\n    public get hasValidScale(): boolean {\n        return this._scale > 1e-2 && this._scale < 50;\n    }\n\n    /**\n     * Get width.\n     *\n     * @description Falls back to the node image width if\n     * the API data is faulty.\n     *\n     * @returns {number} The orientation adjusted image width.\n     */\n    public get width(): number {\n        return this._width;\n    }\n\n    /**\n     * Calculate the up vector for the node transform.\n     *\n     * @returns {THREE.Vector3} Normalized and orientation adjusted up vector.\n     */\n    public upVector(): THREE.Vector3 {\n        let rte: Float32Array = this._rt.elements;\n\n        switch (this._orientation) {\n            case 1:\n                return new THREE.Vector3(-rte[1], -rte[5], -rte[9]);\n            case 3:\n                return new THREE.Vector3(rte[1],  rte[5],  rte[9]);\n            case 6:\n                return new THREE.Vector3(-rte[0], -rte[4], -rte[8]);\n            case 8:\n                return new THREE.Vector3(rte[0],  rte[4],  rte[8]);\n            default:\n                return new THREE.Vector3(-rte[1], -rte[5], -rte[9]);\n        }\n    }\n\n    /**\n     * Calculate projector matrix for projecting 3D points to texture map\n     * coordinates (u and v).\n     *\n     * @returns {THREE.Matrix4} Projection matrix for 3D point to texture\n     * map coordinate calculations.\n     */\n    public projectorMatrix(): THREE.Matrix4 {\n        let projector: THREE.Matrix4 = this._normalizedToTextureMatrix();\n\n        let f: number = this._focal;\n        let projection: THREE.Matrix4 = new THREE.Matrix4().set(\n            f, 0, 0, 0,\n            0, f, 0, 0,\n            0, 0, 0, 0,\n            0, 0, 1, 0\n        );\n\n        projector.multiply(projection);\n        projector.multiply(this._rt);\n\n        return projector;\n    }\n\n    /**\n     * Project 3D world coordinates to basic coordinates.\n     *\n     * @param {Array<number>} point3d - 3D world coordinates.\n     * @return {Array<number>} 2D basic coordinates.\n     */\n    public projectBasic(point3d: number[]): number[] {\n        let sfm: number[] = this.projectSfM(point3d);\n        return this._sfmToBasic(sfm);\n    }\n\n    /**\n     * Unproject basic coordinates to 3D world coordinates.\n     *\n     * @param {Array<number>} basic - 2D basic coordinates.\n     * @param {Array<number>} distance - Depth to unproject from camera center.\n     * @returns {Array<number>} Unprojected 3D world coordinates.\n     */\n    public unprojectBasic(basic: number[], distance: number): number[] {\n        let sfm: number[] = this._basicToSfm(basic);\n        return this.unprojectSfM(sfm, distance);\n    }\n\n    /**\n     * Project 3D world coordinates to SfM coordinates.\n     *\n     * @param {Array<number>} point3d - 3D world coordinates.\n     * @return {Array<number>} 2D SfM coordinates.\n     */\n    public projectSfM(point3d: number[]): number[] {\n        let v: THREE.Vector4 = new THREE.Vector4(point3d[0], point3d[1], point3d[2], 1);\n        v.applyMatrix4(this._rt);\n        return this._bearingToSfm([v.x, v.y, v.z]);\n    }\n\n    /**\n     * Unproject SfM coordinates to a 3D world coordinates.\n     *\n     * @param {Array<number>} sfm - 2D SfM coordinates.\n     * @param {Array<number>} distance - Depth to unproject from camera center.\n     * @returns {Array<number>} Unprojected 3D world coordinates.\n     */\n    public unprojectSfM(sfm: number[], distance: number): number[] {\n        let bearing: number[] = this._sfmToBearing(sfm);\n        let v: THREE.Vector4 = new THREE.Vector4(\n            distance * bearing[0],\n            distance * bearing[1],\n            distance * bearing[2],\n            1);\n        v.applyMatrix4(new THREE.Matrix4().getInverse(this._rt));\n        return [v.x / v.w, v.y / v.w, v.z / v.w];\n    }\n\n    /**\n     * Transform SfM coordinates to bearing vector (3D cartesian\n     * coordinates on the unit sphere).\n     *\n     * @param {Array<number>} sfm - 2D SfM coordinates.\n     * @returns {Array<number>} Bearing vector (3D cartesian coordinates\n     * on the unit sphere).\n     */\n    private _sfmToBearing(sfm: number[]): number[] {\n        if (this._fullPano()) {\n            let lon: number = sfm[0] * 2 * Math.PI;\n            let lat: number = -sfm[1] * 2 * Math.PI;\n            let x: number = Math.cos(lat) * Math.sin(lon);\n            let y: number = -Math.sin(lat);\n            let z: number = Math.cos(lat) * Math.cos(lon);\n            return [x, y, z];\n        } else if (this._gpano) {\n            let size: number = Math.max(this.gpano.CroppedAreaImageWidthPixels, this.gpano.CroppedAreaImageHeightPixels);\n            let fullPanoPixel: number[] = [\n                sfm[0] * size + this.gpano.CroppedAreaImageWidthPixels / 2 + this.gpano.CroppedAreaLeftPixels,\n                sfm[1] * size + this.gpano.CroppedAreaImageHeightPixels / 2 + this.gpano.CroppedAreaTopPixels,\n            ];\n            let lon: number = 2 * Math.PI * (fullPanoPixel[0] / this.gpano.FullPanoWidthPixels - 0.5);\n            let lat: number = - Math.PI * (fullPanoPixel[1] / this.gpano.FullPanoHeightPixels - 0.5);\n            let x: number = Math.cos(lat) * Math.sin(lon);\n            let y: number = -Math.sin(lat);\n            let z: number = Math.cos(lat) * Math.cos(lon);\n            return [x, y, z];\n        } else {\n            let v: THREE.Vector3 = new THREE.Vector3(sfm[0], sfm[1], this._focal);\n            v.normalize();\n            return [v.x, v.y, v.z];\n        }\n    }\n\n    /**\n     * Transform bearing vector (3D cartesian coordiantes on the unit sphere) to\n     * SfM coordinates.\n     *\n     * @param {Array<number>} bearing - Bearing vector (3D cartesian coordinates on the\n     * unit sphere).\n     * @returns {Array<number>} 2D SfM coordinates.\n     */\n    private _bearingToSfm(bearing: number[]): number[] {\n        if (this._fullPano()) {\n            let x: number = bearing[0];\n            let y: number = bearing[1];\n            let z: number = bearing[2];\n            let lon: number = Math.atan2(x, z);\n            let lat: number = Math.atan2(-y, Math.sqrt(x * x + z * z));\n            return [lon / (2 * Math.PI), -lat / (2 * Math.PI)];\n        } else if (this._gpano) {\n            let x: number = bearing[0];\n            let y: number = bearing[1];\n            let z: number = bearing[2];\n            let lon: number = Math.atan2(x, z);\n            let lat: number = Math.atan2(-y, Math.sqrt(x * x + z * z));\n            let fullPanoPixel: number[] = [\n                (lon / (2 * Math.PI) + 0.5) * this.gpano.FullPanoWidthPixels,\n                (- lat / Math.PI + 0.5) * this.gpano.FullPanoHeightPixels,\n            ];\n            let size: number = Math.max(this.gpano.CroppedAreaImageWidthPixels, this.gpano.CroppedAreaImageHeightPixels);\n            return [\n                (fullPanoPixel[0] - this.gpano.CroppedAreaLeftPixels - this.gpano.CroppedAreaImageWidthPixels / 2) / size,\n                (fullPanoPixel[1] - this.gpano.CroppedAreaTopPixels - this.gpano.CroppedAreaImageHeightPixels / 2) / size,\n            ];\n        } else {\n            if (bearing[2] > 0) {\n                return [\n                    bearing[0] * this._focal / bearing[2],\n                    bearing[1] * this._focal / bearing[2],\n                ];\n            } else {\n                return [\n                    bearing[0] < 0 ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,\n                    bearing[1] < 0 ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY,\n                ];\n            }\n        }\n    }\n\n    /**\n     * Convert basic coordinates to SfM coordinates.\n     *\n     * @param {Array<number>} basic - 2D basic coordinates.\n     * @returns {Array<number>} 2D SfM coordinates.\n     */\n    private _basicToSfm(basic: number[]): number[] {\n        let rotatedX: number;\n        let rotatedY: number;\n\n        switch (this._orientation) {\n            case 1:\n                rotatedX = basic[0];\n                rotatedY = basic[1];\n                break;\n            case 3:\n                rotatedX = 1 - basic[0];\n                rotatedY = 1 - basic[1];\n                break;\n            case 6:\n                rotatedX = basic[1];\n                rotatedY = 1 - basic[0];\n                break;\n            case 8:\n                rotatedX = 1 - basic[1];\n                rotatedY = basic[0];\n                break;\n            default:\n                rotatedX = basic[0];\n                rotatedY = basic[1];\n                break;\n        }\n\n        let w: number = this._width;\n        let h: number = this._height;\n        let s: number = Math.max(w, h);\n        let sfmX: number = rotatedX * w / s - w / s / 2;\n        let sfmY: number = rotatedY * h / s - h / s / 2;\n\n        return [sfmX, sfmY];\n    }\n\n    /**\n     * Convert SfM coordinates to basic coordinates.\n     *\n     * @param {Array<number>} sfm - 2D SfM coordinates.\n     * @returns {Array<number>} 2D basic coordinates.\n     */\n    private _sfmToBasic(sfm: number[]): number[] {\n        let w: number = this._width;\n        let h: number = this._height;\n        let s: number = Math.max(w, h);\n        let rotatedX: number = (sfm[0] + w / s / 2) / w * s;\n        let rotatedY: number = (sfm[1] + h / s / 2) / h * s;\n\n        let basicX: number;\n        let basicY: number;\n\n        switch (this._orientation) {\n            case 1:\n                basicX = rotatedX;\n                basicY = rotatedY;\n                break;\n            case 3:\n                basicX = 1 - rotatedX;\n                basicY = 1 - rotatedY;\n                break;\n            case 6:\n                basicX = 1 - rotatedY;\n                basicY = rotatedX;\n                break;\n            case 8:\n                basicX = rotatedY;\n                basicY = 1 - rotatedX;\n                break;\n            default:\n                basicX = rotatedX;\n                basicY = rotatedY;\n                break;\n        }\n\n        return [basicX, basicY];\n    }\n\n    /**\n     * Determines if the gpano information indicates a full panorama.\n     *\n     * @returns {boolean} Value determining if the gpano information indicates\n     * a full panorama.\n     */\n    private _fullPano(): boolean {\n        return this.gpano != null &&\n            this.gpano.CroppedAreaLeftPixels === 0 &&\n            this.gpano.CroppedAreaTopPixels === 0 &&\n            this.gpano.CroppedAreaImageWidthPixels === this.gpano.FullPanoWidthPixels &&\n            this.gpano.CroppedAreaImageHeightPixels === this.gpano.FullPanoHeightPixels;\n    }\n\n    /**\n     * Checks a value and returns it if it exists and is larger than 0.\n     * Fallbacks if it is null.\n     *\n     * @param {number} value - Value to check.\n     * @param {number} fallback - Value to fall back to.\n     * @returns {number} The value or its fallback value if it is not defined or negative.\n     */\n    private _getValue(value: number, fallback: number): number {\n        return value != null && value > 0 ? value : fallback;\n    }\n\n    /**\n     * Creates the extrinsic camera matrix [ R | t ].\n     *\n     * @param {Array<number>} rotation - Rotation vector in angle axis representation.\n     * @param {Array<number>} translation - Translation vector.\n     * @returns {THREE.Matrix4} Extrisic camera matrix.\n     */\n    private _getRt(rotation: number[], translation: number[]): THREE.Matrix4 {\n        let axis: THREE.Vector3 = new THREE.Vector3(rotation[0], rotation[1], rotation[2]);\n        let angle: number = axis.length();\n        axis.normalize();\n\n        let rt: THREE.Matrix4 = new THREE.Matrix4();\n        rt.makeRotationAxis(axis, angle);\n        rt.setPosition(\n            new THREE.Vector3(\n                translation[0],\n                translation[1],\n                translation[2]));\n\n        return rt;\n    }\n\n    /**\n     * Calculates the scaled extrinsic camera matrix scale * [ R | t ].\n     *\n     * @param {THREE.Matrix4} rt - Extrisic camera matrix.\n     * @param {number} scale - Scale factor.\n     * @returns {THREE.Matrix4} Scaled extrisic camera matrix.\n     */\n    private _getSrt(rt: THREE.Matrix4, scale: number): THREE.Matrix4 {\n        let srt: THREE.Matrix4 = rt.clone();\n        let elements: Float32Array = srt.elements;\n\n        elements[12] = scale * elements[12];\n        elements[13] = scale * elements[13];\n        elements[14] = scale * elements[14];\n\n        srt.scale(new THREE.Vector3(scale, scale, scale));\n\n        return srt;\n    }\n\n    /**\n     * Calculate a transformation matrix from normalized coordinates for\n     * texture map coordinates.\n     *\n     * @returns {THREE.Matrix4} Normalized coordinates to texture map\n     * coordinates transformation matrix.\n     */\n    private _normalizedToTextureMatrix(): THREE.Matrix4 {\n        let size: number = Math.max(this._width, this._height);\n        let w: number = size / this._width;\n        let h: number = size / this._height;\n\n        switch (this._orientation) {\n            case 1:\n                return new THREE.Matrix4().set(w, 0, 0, 0.5, 0, -h, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1);\n            case 3:\n                return new THREE.Matrix4().set(-w, 0, 0, 0.5, 0, h, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1);\n            case 6:\n                return new THREE.Matrix4().set( 0, -h, 0, 0.5, -w, 0, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1);\n            case 8:\n                return new THREE.Matrix4().set(0, h, 0, 0.5, w, 0, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1);\n            default:\n                return new THREE.Matrix4().set(w, 0, 0, 0.5, 0, -h, 0, 0.5, 0, 0, 1, 0, 0, 0, 0, 1);\n        }\n    }\n}\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {Transform} from \"../Geo\";\n\n/**\n * @class ViewportCoords\n *\n * @classdesc Provides methods for calculating 2D coordinate conversions\n * as well as 3D projection and unprojection.\n *\n * Basic coordinates are 2D coordinates on the [0, 1] interval and\n * have the origin point, (0, 0), at the top left corner and the\n * maximum value, (1, 1), at the bottom right corner of the original\n * photo.\n *\n * Viewport coordinates are 2D coordinates on the [-1, 1] interval and\n * have the origin point in the center. The bottom left corner point is\n * (-1, -1) and the top right corner point is (1, 1).\n *\n * Canvas coordiantes are 2D pixel coordinates on the [0, canvasWidth] and\n * [0, canvasHeight] intervals. The origin point (0, 0) is in the top left\n * corner and the maximum value is (canvasWidth, canvasHeight) is in the\n * bottom right corner.\n *\n * 3D coordinates are in the topocentric world reference frame.\n */\nexport class ViewportCoords {\n    private _unprojectDepth: number = 200;\n\n    /**\n     * Convert basic coordinates to canvas coordinates.\n     *\n     * @description Transform origin and perspective camera position needs to be the\n     * equal for reliable return value.\n     *\n     * @param {number} basicX - Basic X coordinate.\n     * @param {number} basicY - Basic Y coordinate.\n     * @param {HTMLElement} container - The viewer container.\n     * @param {Transform} transform - Transform of the node to unproject from.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} 2D canvas coordinates.\n     */\n    public basicToCanvas(\n        basicX: number,\n        basicY: number,\n        container: HTMLElement,\n        transform: Transform,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        number[] {\n\n        const point3d: number[] = transform.unprojectBasic([basicX, basicY], this._unprojectDepth);\n        const canvas: number[] = this.projectToCanvas(point3d, container, perspectiveCamera);\n\n        return canvas;\n    }\n\n    /**\n     * Convert basic coordinates to viewport coordinates.\n     *\n     * @description Transform origin and perspective camera position needs to be the\n     * equal for reliable return value.\n     *\n     * @param {number} basicX - Basic X coordinate.\n     * @param {number} basicY - Basic Y coordinate.\n     * @param {Transform} transform - Transform of the node to unproject from.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} 2D viewport coordinates.\n     */\n    public basicToViewport(\n        basicX: number,\n        basicY: number,\n        transform: Transform,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        number[] {\n\n        const point3d: number[] = transform.unprojectBasic([basicX, basicY], this._unprojectDepth);\n        const viewport: number[] = this.projectToViewport(point3d, perspectiveCamera);\n\n        return viewport;\n    }\n\n    /**\n     * Get canvas pixel position from event.\n     *\n     * @param {Event} event - Event containing clientX and clientY properties.\n     * @param {HTMLElement} element - HTML element.\n     * @returns {Array<number>} 2D canvas coordinates.\n     */\n    public canvasPosition(event: { clientX: number, clientY: number }, element: HTMLElement): number[] {\n        const clientRect: ClientRect = element.getBoundingClientRect();\n\n        const canvasX: number = event.clientX - clientRect.left - element.clientLeft;\n        const canvasY: number = event.clientY - clientRect.top - element.clientTop;\n\n        return [canvasX, canvasY];\n    }\n\n    /**\n     * Convert canvas coordinates to basic coordinates.\n     *\n     * @description Transform origin and perspective camera position needs to be the\n     * equal for reliable return value.\n     *\n     * @param {number} canvasX - Canvas X coordinate.\n     * @param {number} canvasY - Canvas Y coordinate.\n     * @param {HTMLElement} container - The viewer container.\n     * @param {Transform} transform - Transform of the node to unproject from.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} 2D basic coordinates.\n     */\n    public canvasToBasic(\n        canvasX: number,\n        canvasY: number,\n        container: HTMLElement,\n        transform: Transform,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        number[] {\n\n        const point3d: number[] =\n            this.unprojectFromCanvas(canvasX, canvasY, container, perspectiveCamera)\n                .toArray();\n\n        const basic: number[] = transform.projectBasic(point3d);\n\n        return basic;\n    }\n\n    /**\n     * Convert canvas coordinates to viewport coordinates.\n     *\n     * @param {number} canvasX - Canvas X coordinate.\n     * @param {number} canvasY - Canvas Y coordinate.\n     * @param {HTMLElement} container - The viewer container.\n     * @returns {Array<number>} 2D viewport coordinates.\n     */\n    public canvasToViewport(\n        canvasX: number,\n        canvasY: number,\n        container: HTMLElement):\n        number[] {\n\n        const [canvasWidth, canvasHeight]: number[] = this.containerToCanvas(container);\n        const viewportX: number = 2 * canvasX / canvasWidth - 1;\n        const viewportY: number = 1 - 2 * canvasY / canvasHeight;\n\n        return [viewportX, viewportY];\n    }\n\n    /**\n     * Determines the width and height of the container in canvas coordinates.\n     *\n     * @param {HTMLElement} container - The viewer container.\n     * @returns {Array<number>} 2D canvas coordinates.\n     */\n    public containerToCanvas(container: HTMLElement): number[] {\n        return [container.offsetWidth, container.offsetHeight];\n    }\n\n    /**\n     * Determine basic distances from image to canvas corners.\n     *\n     * @description Transform origin and perspective camera position needs to be the\n     * equal for reliable return value.\n     *\n     * Determines the smallest basic distance for every side of the canvas.\n     *\n     * @param {Transform} transform - Transform of the node to unproject from.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} Array of basic distances as [top, right, bottom, left].\n     */\n    public getBasicDistances(\n        transform: Transform,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        number[] {\n\n        const topLeftBasic: number[] = this.viewportToBasic(-1, 1, transform, perspectiveCamera);\n        const topRightBasic: number[] = this.viewportToBasic(1, 1, transform, perspectiveCamera);\n        const bottomRightBasic: number[] = this.viewportToBasic(1, -1, transform, perspectiveCamera);\n        const bottomLeftBasic: number[] = this.viewportToBasic(-1, -1, transform, perspectiveCamera);\n\n        let topBasicDistance: number = 0;\n        let rightBasicDistance: number = 0;\n        let bottomBasicDistance: number = 0;\n        let leftBasicDistance: number = 0;\n\n        if (topLeftBasic[1] < 0 && topRightBasic[1] < 0) {\n            topBasicDistance = topLeftBasic[1] > topRightBasic[1] ?\n                -topLeftBasic[1] :\n                -topRightBasic[1];\n        }\n\n        if (topRightBasic[0] > 1 && bottomRightBasic[0] > 1) {\n            rightBasicDistance = topRightBasic[0] < bottomRightBasic[0] ?\n                topRightBasic[0] - 1 :\n                bottomRightBasic[0] - 1;\n        }\n\n        if (bottomRightBasic[1] > 1 && bottomLeftBasic[1] > 1) {\n            bottomBasicDistance = bottomRightBasic[1] < bottomLeftBasic[1] ?\n                bottomRightBasic[1] - 1 :\n                bottomLeftBasic[1] - 1;\n        }\n\n        if (bottomLeftBasic[0] < 0 && topLeftBasic[0] < 0) {\n            leftBasicDistance = bottomLeftBasic[0] > topLeftBasic[0] ?\n                -bottomLeftBasic[0] :\n                -topLeftBasic[0];\n        }\n\n        return [topBasicDistance, rightBasicDistance, bottomBasicDistance, leftBasicDistance];\n    }\n\n    /**\n     * Determine pixel distances from image to canvas corners.\n     *\n     * @description Transform origin and perspective camera position needs to be the\n     * equal for reliable return value.\n     *\n     * Determines the smallest pixel distance for every side of the canvas.\n     *\n     * @param {HTMLElement} container - The viewer container.\n     * @param {Transform} transform - Transform of the node to unproject from.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} Array of pixel distances as [top, right, bottom, left].\n     */\n    public getPixelDistances(\n        container: HTMLElement,\n        transform: Transform,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        number[] {\n\n        const topLeftBasic: number[] = this.viewportToBasic(-1, 1, transform, perspectiveCamera);\n        const topRightBasic: number[] = this.viewportToBasic(1, 1, transform, perspectiveCamera);\n        const bottomRightBasic: number[] = this.viewportToBasic(1, -1, transform, perspectiveCamera);\n        const bottomLeftBasic: number[] = this.viewportToBasic(-1, -1, transform, perspectiveCamera);\n\n        let topPixelDistance: number = 0;\n        let rightPixelDistance: number = 0;\n        let bottomPixelDistance: number = 0;\n        let leftPixelDistance: number = 0;\n\n        const [canvasWidth, canvasHeight]: number[] = this.containerToCanvas(container);\n\n        if (topLeftBasic[1] < 0 && topRightBasic[1] < 0) {\n            const basicX: number = topLeftBasic[1] > topRightBasic[1] ?\n                topLeftBasic[0] :\n                topRightBasic[0];\n\n            const canvas: number[] = this.basicToCanvas(basicX, 0, container, transform, perspectiveCamera);\n\n            topPixelDistance = canvas[1] > 0 ? canvas[1] : 0;\n        }\n\n        if (topRightBasic[0] > 1 && bottomRightBasic[0] > 1) {\n            const basicY: number = topRightBasic[0] < bottomRightBasic[0] ?\n                topRightBasic[1] :\n                bottomRightBasic[1];\n\n            const canvas: number[] = this.basicToCanvas(1, basicY, container, transform, perspectiveCamera);\n\n            rightPixelDistance = canvas[0] < canvasWidth ? canvasWidth - canvas[0] : 0;\n        }\n\n        if (bottomRightBasic[1] > 1 && bottomLeftBasic[1] > 1) {\n            const basicX: number = bottomRightBasic[1] < bottomLeftBasic[1] ?\n                bottomRightBasic[0] :\n                bottomLeftBasic[0];\n\n            const canvas: number[] = this.basicToCanvas(basicX, 1, container, transform, perspectiveCamera);\n\n            bottomPixelDistance = canvas[1] < canvasHeight ? canvasHeight - canvas[1] : 0;\n        }\n\n        if (bottomLeftBasic[0] < 0 && topLeftBasic[0] < 0) {\n            const basicY: number = bottomLeftBasic[0] > topLeftBasic[0] ?\n                bottomLeftBasic[1] :\n                topLeftBasic[1];\n\n            const canvas: number[] = this.basicToCanvas(0, basicY, container, transform, perspectiveCamera);\n\n            leftPixelDistance = canvas[0] > 0 ? canvas[0] : 0;\n        }\n\n        return [topPixelDistance, rightPixelDistance, bottomPixelDistance, leftPixelDistance];\n    }\n\n    /**\n     * Determine if an event occured inside an element.\n     *\n     * @param {Event} event - Event containing clientX and clientY properties.\n     * @param {HTMLElement} element - HTML element.\n     * @returns {boolean} Value indicating if the event occured inside the element or not.\n     */\n    public insideElement(event: { clientX: number, clientY: number }, element: HTMLElement): boolean {\n        const clientRect: ClientRect = element.getBoundingClientRect();\n\n        const minX: number = clientRect.left + element.clientLeft;\n        const maxX: number = minX + element.clientWidth;\n        const minY: number = clientRect.top + element.clientTop;\n        const maxY: number = minY + element.clientHeight;\n\n        return event.clientX > minX &&\n            event.clientX < maxX &&\n            event.clientY > minY &&\n            event.clientY < maxY;\n    }\n\n    /**\n     * Project 3D world coordinates to canvas coordinates.\n     *\n     * @param {Array<number>} point3D - 3D world coordinates.\n     * @param {HTMLElement} container - The viewer container.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} 2D canvas coordinates.\n     */\n    public projectToCanvas(\n        point3d: number[],\n        container: HTMLElement,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        number[] {\n\n        const viewport: number[] = this.projectToViewport(point3d, perspectiveCamera);\n        const canvas: number[] =\n            this.viewportToCanvas(viewport[0], viewport[1], container);\n\n        return canvas;\n    }\n\n    /**\n     * Project 3D world coordinates to viewport coordinates.\n     *\n     * @param {Array<number>} point3D - 3D world coordinates.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} 2D viewport coordinates.\n     */\n    public projectToViewport(\n        point3d: number[],\n        perspectiveCamera: THREE.PerspectiveCamera):\n        number[] {\n\n        const viewport: THREE.Vector3 =\n            new THREE.Vector3(point3d[0], point3d[1], point3d[2])\n                .project(perspectiveCamera);\n\n        return [viewport.x, viewport.y];\n    }\n\n    /**\n     * Uproject canvas coordinates to 3D world coordinates.\n     *\n     * @param {number} canvasX - Canvas X coordinate.\n     * @param {number} canvasY - Canvas Y coordinate.\n     * @param {HTMLElement} container - The viewer container.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} 3D world coordinates.\n     */\n    public unprojectFromCanvas(\n        canvasX: number,\n        canvasY: number,\n        container: HTMLElement,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        THREE.Vector3 {\n\n        const viewport: number[] =\n            this.canvasToViewport(canvasX, canvasY, container);\n\n        const point3d: THREE.Vector3 =\n            this.unprojectFromViewport(viewport[0], viewport[1], perspectiveCamera);\n\n        return point3d;\n    }\n\n    /**\n     * Unproject viewport coordinates to 3D world coordinates.\n     *\n     * @param {number} viewportX - Viewport X coordinate.\n     * @param {number} viewportY - Viewport Y coordinate.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} 3D world coordinates.\n     */\n    public unprojectFromViewport(\n        viewportX: number,\n        viewportY: number,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        THREE.Vector3 {\n\n        const point3d: THREE.Vector3 =\n            new THREE.Vector3(viewportX, viewportY, 1)\n                .unproject(perspectiveCamera);\n\n        return point3d;\n    }\n\n    /**\n     * Convert viewport coordinates to basic coordinates.\n     *\n     * @description Transform origin and perspective camera position needs to be the\n     * equal for reliable return value.\n     *\n     * @param {number} viewportX - Viewport X coordinate.\n     * @param {number} viewportY - Viewport Y coordinate.\n     * @param {Transform} transform - Transform of the node to unproject from.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} 2D basic coordinates.\n     */\n    public viewportToBasic(\n        viewportX: number,\n        viewportY: number,\n        transform: Transform,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        number[] {\n\n        const point3d: number[] =\n            new THREE.Vector3(viewportX, viewportY, 1)\n                .unproject(perspectiveCamera)\n                .toArray();\n\n        const basic: number[] = transform.projectBasic(point3d);\n\n        return basic;\n    }\n\n    /**\n     * Convert viewport coordinates to canvas coordinates.\n     *\n     * @param {number} viewportX - Viewport X coordinate.\n     * @param {number} viewportY - Viewport Y coordinate.\n     * @param {HTMLElement} container - The viewer container.\n     * @returns {Array<number>} 2D canvas coordinates.\n     */\n    public viewportToCanvas(\n        viewportX: number,\n        viewportY: number,\n        container: HTMLElement):\n        number[] {\n\n        const [canvasWidth, canvasHeight]: number[] = this.containerToCanvas(container);\n        const canvasX: number = canvasWidth * (viewportX + 1) / 2;\n        const canvasY: number = -canvasHeight * (viewportY - 1) / 2;\n\n        return [canvasX, canvasY];\n    }\n}\n\nexport default ViewportCoords;\n",
     "import {\n    FilterExpression,\n    FilterOperation,\n    FilterOperator,\n    FilterValue,\n    Node,\n} from \"../Graph\";\nimport {Func} from \"../Utils\";\n\nexport type FilterFunction = Func<Node, boolean>;\n\n/**\n * @class Filter\n *\n * @classdesc Represents a class for creating node filters. Implementation and\n * definitions based on https://github.com/mapbox/feature-filter.\n */\nexport class FilterCreator {\n    /**\n     * Create a filter from a filter expression.\n     *\n     * @description The following filters are supported:\n     *\n     * Comparison\n     * `==`\n     * `!=`\n     * `<`\n     * `<=`\n     * `>`\n     * `>=`\n     *\n     * Set membership\n     * `in`\n     * `!in`\n     *\n     * Combining\n     * `all`\n     *\n     * @param {FilterExpression} filter - Comparison, set membership or combinding filter\n     * expression.\n     * @returns {FilterFunction} Function taking a node and returning a boolean that\n     * indicates whether the node passed the test or not.\n     */\n    public createFilter(filter: FilterExpression): FilterFunction {\n        return <FilterFunction>new Function(\"node\", \"return \" + this._compile(filter) + \";\");\n    }\n\n    private _compile(filter: FilterExpression): string {\n        if (filter == null || filter.length <= 1) {\n            return \"true\";\n        }\n\n        const operator: FilterOperator = <FilterOperator>filter[0];\n        const operation: string =\n            operator === \"==\" ? this._compileComparisonOp(\"===\", <string>filter[1], filter[2], false) :\n            operator === \"!=\" ? this._compileComparisonOp(\"!==\", <string>filter[1], filter[2], false) :\n            operator === \">\" ||\n            operator === \">=\" ||\n            operator === \"<\" ||\n            operator === \"<=\" ? this._compileComparisonOp(operator, <string>filter[1], filter[2], true) :\n            operator === \"in\" ?\n                this._compileInOp<FilterValue>(<string>filter[1], <FilterValue[]>filter.slice(2)) :\n            operator === \"!in\" ?\n                this._compileNegation(\n                    this._compileInOp<FilterValue>(<string>filter[1], <FilterValue[]>filter.slice(2))) :\n            operator === \"all\" ? this._compileLogicalOp(<FilterOperation[]>filter.slice(1), \"&&\") :\n            \"true\";\n\n        return \"(\" + operation + \")\";\n    }\n\n    private _compare<T>(a: T, b: T): number {\n        return a < b ? -1 : a > b ? 1 : 0;\n    }\n\n    private _compileComparisonOp<T>(operator: string, property: string, value: T, checkType: boolean): string {\n        const left: string = this._compilePropertyReference(property);\n        const right: string = JSON.stringify(value);\n\n        return (checkType ? \"typeof \" + left + \"===typeof \" + right + \"&&\" : \"\") + left + operator + right;\n    }\n\n    private _compileInOp<T>(property: string, values: T[]): string {\n        const compare: (a: T, b: T) => number = this._compare;\n        const left: string = JSON.stringify(values.sort(compare));\n        const right: string = this._compilePropertyReference(property);\n\n        return left + \".indexOf(\" + right + \")!==-1\";\n    }\n\n    private _compileLogicalOp(filters: FilterOperation[], operator: string): string {\n        const compile: (filter: FilterExpression) => string = this._compile.bind(this);\n\n        return filters.map<string>(compile).join(operator);\n    }\n\n    private _compileNegation(expression: string): string {\n        return \"!(\" + expression + \")\";\n    }\n\n    private _compilePropertyReference(property: string): string {\n        return \"node[\" + JSON.stringify(property) + \"]\";\n    }\n}\n\nexport default FilterCreator;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as rbush from \"rbush\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/observable/from\";\n\nimport \"rxjs/add/operator/catch\";\nimport \"rxjs/add/operator/do\";\nimport \"rxjs/add/operator/finally\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/publish\";\n\nimport {\n    APIv3,\n    ICoreNode,\n    IFillNode,\n    IFullNode,\n    ILatLon,\n    ISequence,\n} from \"../API\";\nimport {\n    IEdge,\n    IPotentialEdge,\n    EdgeCalculator,\n} from \"../Edge\";\nimport {GraphMapillaryError} from \"../Error\";\nimport {\n    FilterCreator,\n    FilterExpression,\n    FilterFunction,\n    IGraphConfiguration,\n    Node,\n    NodeCache,\n    Sequence,\n    GraphCalculator,\n} from \"../Graph\";\n\ntype NodeIndexItem = {\n    lat: number;\n    lon: number;\n    node: Node;\n}\n\ntype NodeTiles = {\n    cache: string[];\n    caching: string[];\n}\n\ntype SpatialArea = {\n    all: { [key: string]: Node };\n    cacheKeys: string[];\n    cacheNodes: { [key: string]: Node };\n}\n\ntype NodeAccess = {\n    node: Node;\n    accessed: number;\n}\n\ntype TileAccess = {\n    nodes: Node[];\n    accessed: number;\n}\n\ntype SequenceAccess = {\n    sequence: Sequence;\n    accessed: number;\n}\n\n/**\n * @class Graph\n *\n * @classdesc Represents a graph of nodes with edges.\n */\nexport class Graph {\n    private _apiV3: APIv3;\n\n    /**\n     * Nodes that have initialized cache with a timestamp of last access.\n     */\n    private _cachedNodes: { [key: string]: NodeAccess };\n\n    /**\n     * Nodes for which the required tiles are cached.\n     */\n    private _cachedNodeTiles: { [key: string]: boolean };\n\n    /**\n     * Nodes for which the spatial edges are cached.\n     */\n    private _cachedSpatialEdges: { [key: string]: Node };\n\n    /**\n     * Cached tiles with a timestamp of last access.\n     */\n    private _cachedTiles: { [h: string]: TileAccess };\n\n    /**\n     * Nodes for which fill properties are being retreived.\n     */\n    private _cachingFill$: { [key: string]: Observable<Graph> };\n\n    /**\n     * Nodes for which full properties are being retrieved.\n     */\n    private _cachingFull$: { [key: string]: Observable<Graph> };\n\n    /**\n     * Sequences that are being retrieved.\n     */\n    private _cachingSequences$: { [sequenceKey: string]: Observable<Graph> };\n\n    /**\n     * Nodes for which the spatial area fill properties are being retrieved.\n     */\n    private _cachingSpatialArea$: { [key: string]: Observable<Graph>[] };\n\n    /**\n     * Tiles that are being retrieved.\n     */\n    private _cachingTiles$: { [h: string]: Observable<Graph> };\n\n    private _changed$: Subject<Graph>;\n\n    private _defaultAlt: number;\n    private _edgeCalculator: EdgeCalculator;\n    private _filter: FilterFunction;\n    private _filterCreator: FilterCreator;\n    private _graphCalculator: GraphCalculator;\n    private _configuration: IGraphConfiguration;\n\n    /**\n     * All nodes in the graph.\n     */\n    private _nodes: { [key: string]: Node };\n\n    /**\n     * Contains all nodes in the graph. Used for fast spatial lookups.\n     */\n    private _nodeIndex: rbush.RBush<NodeIndexItem>;\n\n    /**\n     * All node index items sorted in tiles for easy uncache.\n     */\n    private _nodeIndexTiles: { [h: string]: NodeIndexItem[] };\n\n    /**\n     * Node to tile dictionary for easy tile access updates.\n     */\n    private _nodeToTile: { [key: string]: string };\n\n    /**\n     * Nodes retrieved before tiles, stored on tile level.\n     */\n    private _preStored: { [h: string]:  { [key: string]: Node }; };\n\n    /**\n     * Tiles required for a node to retrive spatial area.\n     */\n    private _requiredNodeTiles: { [key: string]: NodeTiles };\n\n    /**\n     * Other nodes required for node to calculate spatial edges.\n     */\n    private _requiredSpatialArea: { [key: string]: SpatialArea };\n\n    /**\n     * All sequences in graph with a timestamp of last access.\n     */\n    private _sequences: { [skey: string]: SequenceAccess };\n\n    private _tilePrecision: number;\n    private _tileThreshold: number;\n\n    /**\n     * Create a new graph instance.\n     *\n     * @param {APIv3} [apiV3] - API instance for retrieving data.\n     * @param {rbush.RBush<NodeIndexItem>} [nodeIndex] - Node index for fast spatial retreival.\n     * @param {GraphCalculator} [graphCalculator] - Instance for graph calculations.\n     * @param {EdgeCalculator} [edgeCalculator] - Instance for edge calculations.\n     * @param {FilterCreator} [filterCreator] - Instance for  filter creation.\n     * @param {IGraphConfiguration} [configuration] - Configuration struct.\n     */\n    constructor(\n        apiV3: APIv3,\n        nodeIndex?: rbush.RBush<NodeIndexItem>,\n        graphCalculator?: GraphCalculator,\n        edgeCalculator?: EdgeCalculator,\n        filterCreator?: FilterCreator,\n        configuration?: IGraphConfiguration) {\n\n        this._apiV3 = apiV3;\n\n        this._cachedNodes = {};\n        this._cachedNodeTiles = {};\n        this._cachedSpatialEdges = {};\n        this._cachedTiles = {};\n\n        this._cachingFill$ = {};\n        this._cachingFull$ = {};\n        this._cachingSequences$ = {};\n        this._cachingSpatialArea$ = {};\n        this._cachingTiles$ = {};\n\n        this._changed$ = new Subject<Graph>();\n\n        this._defaultAlt = 2;\n        this._edgeCalculator = edgeCalculator != null ? edgeCalculator : new EdgeCalculator();\n        this._filterCreator = filterCreator != null ? filterCreator : new FilterCreator();\n        this._filter = this._filterCreator.createFilter(undefined);\n        this._graphCalculator = graphCalculator != null ? graphCalculator : new GraphCalculator();\n        this._configuration = configuration != null ?\n            configuration :\n            {\n                maxSequences: 50,\n                maxUnusedNodes: 100,\n                maxUnusedTiles: 20,\n            };\n\n        this._nodes = {};\n        this._nodeIndex = nodeIndex != null ? nodeIndex : rbush<NodeIndexItem>(16, [\".lat\", \".lon\", \".lat\", \".lon\"]);\n        this._nodeIndexTiles = {};\n        this._nodeToTile = {};\n\n        this._preStored = {};\n\n        this._requiredNodeTiles = {};\n        this._requiredSpatialArea = {};\n\n        this._sequences = {};\n\n        this._tilePrecision = 7;\n        this._tileThreshold = 20;\n    }\n\n    /**\n     * Get changed$.\n     *\n     * @returns {Observable<Graph>} Observable emitting\n     * the graph every time it has changed.\n     */\n    public get changed$(): Observable<Graph> {\n        return this._changed$;\n    }\n\n    /**\n     * Retrieve and cache node fill properties.\n     *\n     * @param {string} key - Key of node to fill.\n     * @returns {Observable<Graph>} Observable emitting the graph\n     * when the node has been updated.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public cacheFill$(key: string): Observable<Graph> {\n        if (key in this._cachingFull$) {\n            throw new GraphMapillaryError(`Cannot fill node while caching full (${key}).`);\n        }\n\n        if (!this.hasNode(key)) {\n            throw new GraphMapillaryError(`Cannot fill node that does not exist in graph (${key}).`);\n        }\n\n        if (key in this._cachingFill$) {\n            return this._cachingFill$[key];\n        }\n\n        let node: Node = this.getNode(key);\n        if (node.full) {\n            throw new GraphMapillaryError(`Cannot fill node that is already full (${key}).`);\n        }\n\n        this._cachingFill$[key] = this._apiV3.imageByKeyFill$([key])\n            .do(\n                (imageByKeyFill: { [key: string]: IFillNode }): void => {\n                    if (!node.full) {\n                        this._makeFull(node, imageByKeyFill[key]);\n                    }\n\n                    delete this._cachingFill$[key];\n                })\n            .map(\n                (imageByKeyFill: { [key: string]: IFillNode }): Graph => {\n                    return this;\n                })\n            .finally(\n                (): void => {\n                    if (key in this._cachingFill$) {\n                        delete this._cachingFill$[key];\n                    }\n\n                    this._changed$.next(this);\n                })\n            .publish()\n            .refCount();\n\n        return this._cachingFill$[key];\n    }\n\n    /**\n     * Retrieve and cache full node properties.\n     *\n     * @param {string} key - Key of node to fill.\n     * @returns {Observable<Graph>} Observable emitting the graph\n     * when the node has been updated.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public cacheFull$(key: string): Observable<Graph> {\n        if (key in this._cachingFull$) {\n            return this._cachingFull$[key];\n        }\n\n        if (this.hasNode(key)) {\n            throw new GraphMapillaryError(`Cannot cache full node that already exist in graph (${key}).`);\n        }\n\n        this._cachingFull$[key] = this._apiV3.imageByKeyFull$([key])\n            .do(\n                (imageByKeyFull: { [key: string]: IFullNode }): void => {\n                    let fn: IFullNode = imageByKeyFull[key];\n\n                    if (this.hasNode(key)) {\n                        let node: Node = this.getNode(key);\n\n                        if (!node.full) {\n                            this._makeFull(node, fn);\n                        }\n                    } else {\n                        if (fn.sequence == null || fn.sequence.key == null) {\n                            throw new GraphMapillaryError(`Node has no sequence (${key}).`);\n                        }\n\n                        let node: Node = new Node(fn);\n                        this._makeFull(node, fn);\n\n                        let h: string = this._graphCalculator.encodeH(node.originalLatLon, this._tilePrecision);\n                        this._preStore(h, node);\n                        this._setNode(node);\n\n                        delete this._cachingFull$[key];\n                    }\n                })\n            .map(\n                (imageByKeyFull: { [key: string]: IFullNode }): Graph => {\n                    return this;\n                })\n            .finally(\n                (): void => {\n                    if (key in this._cachingFull$) {\n                        delete this._cachingFull$[key];\n                    }\n\n                    this._changed$.next(this);\n                })\n            .publish()\n            .refCount();\n\n        return this._cachingFull$[key];\n    }\n\n    /**\n     * Retrieve and cache a node sequence.\n     *\n     * @param {string} key - Key of node for which to retrieve sequence.\n     * @returns {Observable<Graph>} Observable emitting the graph\n     * when the sequence has been retrieved.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public cacheNodeSequence$(key: string): Observable<Graph> {\n        if (!this.hasNode(key)) {\n            throw new GraphMapillaryError(`Cannot cache sequence edges of node that does not exist in graph (${key}).`);\n        }\n\n        let node: Node = this.getNode(key);\n        if (node.sequenceKey in this._sequences) {\n            throw new GraphMapillaryError(`Sequence already cached (${key}), (${node.sequenceKey}).`);\n        }\n\n        return this._cacheSequence$(node.sequenceKey);\n    }\n\n    /**\n     * Retrieve and cache a sequence.\n     *\n     * @param {string} sequenceKey - Key of sequence to cache.\n     * @returns {Observable<Graph>} Observable emitting the graph\n     * when the sequence has been retrieved.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public cacheSequence$(sequenceKey: string): Observable<Graph> {\n        if (sequenceKey in this._sequences) {\n            throw new GraphMapillaryError(`Sequence already cached (${sequenceKey})`);\n        }\n\n        return this._cacheSequence$(sequenceKey);\n    }\n\n    /**\n     * Cache sequence edges for a node.\n     *\n     * @param {string} key - Key of node.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public cacheSequenceEdges(key: string): void {\n        let node: Node = this.getNode(key);\n\n        if (!(node.sequenceKey in this._sequences)) {\n            throw new GraphMapillaryError(`Sequence is not cached (${key}), (${node.sequenceKey})`);\n        }\n\n        let sequence: Sequence = this._sequences[node.sequenceKey].sequence;\n        let edges: IEdge[] = this._edgeCalculator.computeSequenceEdges(node, sequence);\n\n        node.cacheSequenceEdges(edges);\n    }\n\n    /**\n     * Retrieve and cache full nodes for a node spatial area.\n     *\n     * @param {string} key - Key of node for which to retrieve sequence.\n     * @returns {Observable<Graph>} Observable emitting the graph\n     * when the nodes in the spatial area has been made full.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public cacheSpatialArea$(key: string): Observable<Graph>[] {\n        if (!this.hasNode(key)) {\n            throw new GraphMapillaryError(`Cannot cache spatial area of node that does not exist in graph (${key}).`);\n        }\n\n        if (key in this._cachedSpatialEdges) {\n            throw new GraphMapillaryError(`Node already spatially cached (${key}).`);\n        }\n\n        if (!(key in this._requiredSpatialArea)) {\n            throw new GraphMapillaryError(`Spatial area not determined (${key}).`);\n        }\n\n        let spatialArea: SpatialArea = this._requiredSpatialArea[key];\n        if (Object.keys(spatialArea.cacheNodes).length === 0) {\n            throw new GraphMapillaryError(`Spatial nodes already cached (${key}).`);\n        }\n\n        if (key in this._cachingSpatialArea$) {\n            return this._cachingSpatialArea$[key];\n        }\n\n        let batches: string[][] = [];\n        while (spatialArea.cacheKeys.length > 0) {\n            batches.push(spatialArea.cacheKeys.splice(0, 200));\n        }\n\n        let batchesToCache: number = batches.length;\n        let spatialNodes$: Observable<Graph>[] = [];\n\n        for (let batch of batches) {\n            let spatialNodeBatch$: Observable<Graph> = this._apiV3.imageByKeyFill$(batch)\n                .do(\n                    (imageByKeyFill: { [key: string]: IFillNode }): void => {\n                        for (let fillKey in imageByKeyFill) {\n                            if (!imageByKeyFill.hasOwnProperty(fillKey)) {\n                                continue;\n                            }\n\n                            let spatialNode: Node = spatialArea.cacheNodes[fillKey];\n                            if (spatialNode.full) {\n                                delete spatialArea.cacheNodes[fillKey];\n                                continue;\n                            }\n\n                            let fillNode: IFillNode = imageByKeyFill[fillKey];\n                            this._makeFull(spatialNode, fillNode);\n\n                            delete spatialArea.cacheNodes[fillKey];\n                        }\n\n                        if (--batchesToCache === 0) {\n                            delete this._cachingSpatialArea$[key];\n                        }\n                    })\n                .map(\n                    (imageByKeyFill: { [key: string]: IFillNode }): Graph => {\n                        return this;\n                    })\n                .catch(\n                    (error: Error): Observable<Graph> => {\n                        for (let batchKey of batch) {\n                            if (batchKey in spatialArea.all) {\n                                delete spatialArea.all[batchKey];\n                            }\n\n                            if (batchKey in spatialArea.cacheNodes) {\n                                delete spatialArea.cacheNodes[batchKey];\n                            }\n                        }\n\n                        if (--batchesToCache === 0) {\n                            delete this._cachingSpatialArea$[key];\n                        }\n\n                        throw error;\n                    })\n                .finally(\n                    (): void => {\n                        if (Object.keys(spatialArea.cacheNodes).length === 0) {\n                            this._changed$.next(this);\n                        }\n                    })\n                .publish()\n                .refCount();\n\n            spatialNodes$.push(spatialNodeBatch$);\n        }\n\n        this._cachingSpatialArea$[key] = spatialNodes$;\n\n        return spatialNodes$;\n    }\n\n    /**\n     * Cache spatial edges for a node.\n     *\n     * @param {string} key - Key of node.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public cacheSpatialEdges(key: string): void {\n        if (key in this._cachedSpatialEdges) {\n             throw new GraphMapillaryError(`Spatial edges already cached (${key}).`);\n        }\n\n        let node: Node = this.getNode(key);\n        let sequence: Sequence = this._sequences[node.sequenceKey].sequence;\n\n        let fallbackKeys: string[] = [];\n        let prevKey: string = sequence.findPrevKey(node.key);\n        if (prevKey != null) {\n            fallbackKeys.push(prevKey);\n        }\n\n        let nextKey: string = sequence.findNextKey(node.key);\n        if (nextKey != null) {\n            fallbackKeys.push(nextKey);\n        }\n\n        let allSpatialNodes: { [key: string]: Node } = this._requiredSpatialArea[key].all;\n        let potentialNodes: Node[] = [];\n        let filter: FilterFunction = this._filter;\n        for (let spatialNodeKey in allSpatialNodes) {\n            if (!allSpatialNodes.hasOwnProperty(spatialNodeKey)) {\n                continue;\n            }\n\n            let spatialNode: Node = allSpatialNodes[spatialNodeKey];\n\n            if (filter(spatialNode)) {\n                potentialNodes.push(spatialNode);\n            }\n        }\n\n        let potentialEdges: IPotentialEdge[] =\n            this._edgeCalculator.getPotentialEdges(node, potentialNodes, fallbackKeys);\n\n        let edges: IEdge[] =\n            this._edgeCalculator.computeStepEdges(\n                node,\n                potentialEdges,\n                prevKey,\n                nextKey);\n\n        edges = edges.concat(this._edgeCalculator.computeTurnEdges(node, potentialEdges));\n        edges = edges.concat(this._edgeCalculator.computePanoEdges(node, potentialEdges));\n        edges = edges.concat(this._edgeCalculator.computePerspectiveToPanoEdges(node, potentialEdges));\n        edges = edges.concat(this._edgeCalculator.computeSimilarEdges(node, potentialEdges));\n\n        node.cacheSpatialEdges(edges);\n\n        this._cachedSpatialEdges[key] = node;\n        delete this._requiredSpatialArea[key];\n        delete this._cachedNodeTiles[key];\n    }\n\n    /**\n     * Retrieve and cache geohash tiles for a node.\n     *\n     * @param {string} key - Key of node for which to retrieve tiles.\n     * @returns {Observable<Graph>} Observable emitting the graph\n     * when the tiles required for the node has been cached.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public cacheTiles$(key: string): Observable<Graph>[] {\n        if (key in this._cachedNodeTiles) {\n            throw new GraphMapillaryError(`Tiles already cached (${key}).`);\n        }\n\n        if (key in this._cachedSpatialEdges) {\n            throw new GraphMapillaryError(`Spatial edges already cached so tiles considered cached (${key}).`);\n        }\n\n        if (!(key in this._requiredNodeTiles)) {\n            throw new GraphMapillaryError(`Tiles have not been determined (${key}).`);\n        }\n\n        let nodeTiles: NodeTiles = this._requiredNodeTiles[key];\n        if (nodeTiles.cache.length === 0 &&\n            nodeTiles.caching.length === 0) {\n            throw new GraphMapillaryError(`Tiles already cached (${key}).`);\n        }\n\n        if (!this.hasNode(key)) {\n            throw new GraphMapillaryError(`Cannot cache tiles of node that does not exist in graph (${key}).`);\n        }\n\n        let hs: string[] = nodeTiles.cache.slice();\n        nodeTiles.caching = this._requiredNodeTiles[key].caching.concat(hs);\n        nodeTiles.cache = [];\n\n        let cacheTiles$: Observable<Graph>[] = [];\n\n        for (let h of nodeTiles.caching) {\n            let cacheTile$: Observable<Graph> = null;\n            if (h in this._cachingTiles$) {\n                cacheTile$ = this._cachingTiles$[h];\n            } else {\n                cacheTile$ = this._apiV3.imagesByH$([h])\n                    .do(\n                        (imagesByH: { [key: string]: { [index: string]: ICoreNode } }): void => {\n                            let coreNodes: { [index: string]: ICoreNode } = imagesByH[h];\n\n                            if (h in this._cachedTiles) {\n                                return;\n                            }\n\n                            this._nodeIndexTiles[h] = [];\n                            this._cachedTiles[h] = { accessed: new Date().getTime(), nodes: [] };\n                            let hCache: Node[] = this._cachedTiles[h].nodes;\n                            let preStored: { [key: string]: Node } = this._removeFromPreStore(h);\n\n                            for (let index in coreNodes) {\n                                if (!coreNodes.hasOwnProperty(index)) {\n                                    continue;\n                                }\n\n                                let coreNode: ICoreNode = coreNodes[index];\n\n                                if (coreNode == null) {\n                                    break;\n                                }\n\n                                if (coreNode.sequence == null ||\n                                    coreNode.sequence.key == null) {\n                                    console.warn(`Sequence missing, discarding (${coreNode.key})`);\n\n                                    continue;\n                                }\n\n                                if (preStored != null && coreNode.key in preStored) {\n                                    let node: Node = preStored[coreNode.key];\n                                    delete preStored[coreNode.key];\n\n                                    hCache.push(node);\n\n                                    let nodeIndexItem: NodeIndexItem = {\n                                        lat: node.latLon.lat,\n                                        lon: node.latLon.lon,\n                                        node: node,\n                                    };\n\n                                    this._nodeIndex.insert(nodeIndexItem);\n                                    this._nodeIndexTiles[h].push(nodeIndexItem);\n                                    this._nodeToTile[node.key] = h;\n\n                                    continue;\n                                }\n\n                                let node: Node = new Node(coreNode);\n\n                                hCache.push(node);\n\n                                let nodeIndexItem: NodeIndexItem = {\n                                    lat: node.latLon.lat,\n                                    lon: node.latLon.lon,\n                                    node: node,\n                                };\n\n                                this._nodeIndex.insert(nodeIndexItem);\n                                this._nodeIndexTiles[h].push(nodeIndexItem);\n                                this._nodeToTile[node.key] = h;\n\n                                this._setNode(node);\n                            }\n\n                            delete this._cachingTiles$[h];\n                        })\n                    .map(\n                        (imagesByH: { [key: string]: { [index: string]: ICoreNode } }): Graph => {\n                            return this;\n                        })\n                    .catch(\n                        (error: Error): Observable<Graph> => {\n                            delete this._cachingTiles$[h];\n\n                            throw error;\n                        })\n                    .publish()\n                    .refCount();\n\n                this._cachingTiles$[h] = cacheTile$;\n            }\n\n            cacheTiles$.push(\n                cacheTile$\n                    .do(\n                        (graph: Graph): void => {\n                            let index: number = nodeTiles.caching.indexOf(h);\n                            if (index > -1) {\n                                nodeTiles.caching.splice(index, 1);\n                            }\n\n                            if (nodeTiles.caching.length === 0 &&\n                                nodeTiles.cache.length === 0) {\n                                delete this._requiredNodeTiles[key];\n\n                                this._cachedNodeTiles[key] = true;\n                            }\n                        })\n                    .catch(\n                        (error: Error): Observable<Graph> => {\n                            let index: number = nodeTiles.caching.indexOf(h);\n                            if (index > -1) {\n                                nodeTiles.caching.splice(index, 1);\n                            }\n\n                            if (nodeTiles.caching.length === 0 &&\n                                nodeTiles.cache.length === 0) {\n                                delete this._requiredNodeTiles[key];\n\n                                this._cachedNodeTiles[key] = true;\n                            }\n\n                            throw error;\n                        })\n                    .finally(\n                        (): void => {\n                            this._changed$.next(this);\n                        })\n                    .publish()\n                    .refCount());\n        }\n\n        return cacheTiles$;\n    }\n\n    /**\n     * Initialize the cache for a node.\n     *\n     * @param {string} key - Key of node.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public initializeCache(key: string): void {\n        if (key in this._cachedNodes) {\n            throw new GraphMapillaryError(`Node already in cache (${key}).`);\n        }\n\n        let node: Node = this.getNode(key);\n        node.initializeCache(new NodeCache());\n\n        let accessed: number = new Date().getTime();\n        this._cachedNodes[key] = { accessed: accessed, node: node };\n\n        this._updateCachedTileAccess(key, accessed);\n    }\n\n    /**\n     * Get a value indicating if the graph is fill caching a node.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if the node is being fill cached.\n     */\n    public isCachingFill(key: string): boolean {\n        return key in this._cachingFill$;\n    }\n\n    /**\n     * Get a value indicating if the graph is fully caching a node.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if the node is being fully cached.\n     */\n    public isCachingFull(key: string): boolean {\n        return key in this._cachingFull$;\n    }\n\n    /**\n     * Get a value indicating if the graph is caching a sequence of a node.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if the sequence of a node is\n     * being cached.\n     */\n    public isCachingNodeSequence(key: string): boolean {\n        let node: Node = this.getNode(key);\n\n        return node.sequenceKey in this._cachingSequences$;\n    }\n\n    /**\n     * Get a value indicating if the graph is caching a sequence.\n     *\n     * @param {string} sequenceKey - Key of sequence.\n     * @returns {boolean} Value indicating if the sequence is\n     * being cached.\n     */\n    public isCachingSequence(sequenceKey: string): boolean {\n        return sequenceKey in this._cachingSequences$;\n    }\n\n    /**\n     * Get a value indicating if the graph is caching the tiles\n     * required for calculating spatial edges of a node.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if the tiles of\n     * a node are being cached.\n     */\n    public isCachingTiles(key: string): boolean {\n        return key in this._requiredNodeTiles &&\n            this._requiredNodeTiles[key].cache.length === 0 &&\n            this._requiredNodeTiles[key].caching.length > 0;\n    }\n\n    /**\n     * Get a value indicating if the cache has been initialized\n     * for a node.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if the cache has been\n     * initialized for a node.\n     */\n    public hasInitializedCache(key: string): boolean {\n        return key in this._cachedNodes;\n    }\n\n    /**\n     * Get a value indicating if a node exist in the graph.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if a node exist in the graph.\n     */\n    public hasNode(key: string): boolean {\n        let accessed: number = new Date().getTime();\n\n        this._updateCachedNodeAccess(key, accessed);\n        this._updateCachedTileAccess(key, accessed);\n\n        return key in this._nodes;\n    }\n\n    /**\n     * Get a value indicating if a node sequence exist in the graph.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if a node sequence exist\n     * in the graph.\n     */\n    public hasNodeSequence(key: string): boolean {\n        let node: Node = this.getNode(key);\n        let sequenceKey: string = node.sequenceKey;\n\n        let hasNodeSequence: boolean = sequenceKey in this._sequences;\n\n        if (hasNodeSequence) {\n            this._sequences[sequenceKey].accessed = new Date().getTime();\n        }\n\n        return hasNodeSequence;\n    }\n\n    /**\n     * Get a value indicating if a sequence exist in the graph.\n     *\n     * @param {string} sequenceKey - Key of sequence.\n     * @returns {boolean} Value indicating if a sequence exist\n     * in the graph.\n     */\n    public hasSequence(sequenceKey: string): boolean {\n        let hasSequence: boolean = sequenceKey in this._sequences;\n\n        if (hasSequence) {\n            this._sequences[sequenceKey].accessed = new Date().getTime();\n        }\n\n        return hasSequence;\n    }\n\n    /**\n     * Get a value indicating if the graph has fully cached\n     * all nodes in the spatial area of a node.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if the spatial area\n     * of a node has been cached.\n     */\n    public hasSpatialArea(key: string): boolean {\n        if (!this.hasNode(key)) {\n            throw new GraphMapillaryError(`Spatial area nodes cannot be determined if node not in graph (${key}).`);\n        }\n\n        if (key in this._cachedSpatialEdges) {\n            return true;\n        }\n\n        if (key in this._requiredSpatialArea) {\n            return Object.keys(this._requiredSpatialArea[key].cacheNodes).length === 0;\n        }\n\n        let node: Node = this.getNode(key);\n        let bbox: [ILatLon, ILatLon] = this._graphCalculator.boundingBoxCorners(node.latLon, this._tileThreshold);\n\n        let spatialItems: NodeIndexItem[] = this._nodeIndex.search({\n            maxX: bbox[1].lat,\n            maxY: bbox[1].lon,\n            minX: bbox[0].lat,\n            minY: bbox[0].lon,\n        });\n\n        let spatialNodes: SpatialArea = {\n            all: {},\n            cacheKeys: [],\n            cacheNodes: {},\n        };\n\n        for (let spatialItem of spatialItems) {\n            spatialNodes.all[spatialItem.node.key] = spatialItem.node;\n\n            if (!spatialItem.node.full) {\n                spatialNodes.cacheKeys.push(spatialItem.node.key);\n                spatialNodes.cacheNodes[spatialItem.node.key] = spatialItem.node;\n            }\n        }\n\n        this._requiredSpatialArea[key] = spatialNodes;\n\n        return spatialNodes.cacheKeys.length === 0;\n    }\n\n    /**\n     * Get a value indicating if the graph has a tiles required\n     * for a node.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if the the tiles required\n     * by a node has been cached.\n     */\n    public hasTiles(key: string): boolean {\n        if (key in this._cachedNodeTiles) {\n            return true;\n        }\n\n        if (key in this._cachedSpatialEdges) {\n            return true;\n        }\n\n        if (!this.hasNode(key)) {\n            throw new GraphMapillaryError(`Node does not exist in graph (${key}).`);\n        }\n\n        let nodeTiles: NodeTiles = { cache: [], caching: [] };\n\n        if (!(key in this._requiredNodeTiles)) {\n            let node: Node = this.getNode(key);\n            nodeTiles.cache = this._graphCalculator\n                .encodeHs(\n                    node.latLon,\n                    this._tilePrecision,\n                    this._tileThreshold)\n                .filter(\n                    (h: string): boolean => {\n                        return !(h in this._cachedTiles);\n                    });\n\n            if (nodeTiles.cache.length > 0) {\n                this._requiredNodeTiles[key] = nodeTiles;\n            }\n        } else {\n            nodeTiles = this._requiredNodeTiles[key];\n        }\n\n        return nodeTiles.cache.length === 0 && nodeTiles.caching.length === 0;\n    }\n\n    /**\n     * Get a node.\n     *\n     * @param {string} key - Key of node.\n     * @returns {Node} Retrieved node.\n     */\n    public getNode(key: string): Node {\n        let accessed: number = new Date().getTime();\n\n        this._updateCachedNodeAccess(key, accessed);\n        this._updateCachedTileAccess(key, accessed);\n\n        return this._nodes[key];\n    }\n\n    /**\n     * Get a sequence.\n     *\n     * @param {string} sequenceKey - Key of sequence.\n     * @returns {Node} Retrieved sequence.\n     */\n    public getSequence(sequenceKey: string): Sequence {\n        let sequenceAccess: SequenceAccess = this._sequences[sequenceKey];\n        sequenceAccess.accessed = new Date().getTime();\n\n        return sequenceAccess.sequence;\n    }\n\n    /**\n     * Reset all spatial edges of the graph nodes.\n     */\n    public resetSpatialEdges(): void {\n        let cachedKeys: string[] = Object.keys(this._cachedSpatialEdges);\n\n        for (let cachedKey of cachedKeys) {\n            let node: Node = this._cachedSpatialEdges[cachedKey];\n            node.resetSpatialEdges();\n\n            delete this._cachedSpatialEdges[cachedKey];\n        }\n    }\n\n    /**\n     * Reset the complete graph but keep the nodes corresponding\n     * to the supplied keys. All other nodes will be disposed.\n     *\n     * @param {Array<string>} keepKeys - Keys for nodes to keep\n     * in graph after reset.\n     */\n    public reset(keepKeys: string[]): void {\n        const nodes: Node[] = [];\n        for (const key of keepKeys) {\n            if (!this.hasNode(key)) {\n                throw new Error(`Node does not exist ${key}`);\n            }\n\n            const node: Node = this.getNode(key);\n            node.resetSequenceEdges();\n            node.resetSpatialEdges();\n            nodes.push(node);\n        }\n\n        for (let cachedKey of Object.keys(this._cachedNodes)) {\n            if (keepKeys.indexOf(cachedKey) !== -1) {\n                continue;\n            }\n\n            this._cachedNodes[cachedKey].node.dispose();\n            delete this._cachedNodes[cachedKey];\n        }\n\n        this._cachedNodeTiles = {};\n        this._cachedSpatialEdges = {};\n        this._cachedTiles = {};\n\n        this._cachingFill$ = {};\n        this._cachingFull$ = {};\n        this._cachingSequences$ = {};\n        this._cachingSpatialArea$ = {};\n        this._cachingTiles$ = {};\n\n        this._nodes = {};\n        this._nodeToTile = {};\n\n        this._preStored = {};\n\n        for (const node of nodes) {\n            this._nodes[node.key] = node;\n\n            const h: string = this._graphCalculator.encodeH(node.originalLatLon, this._tilePrecision);\n            this._preStore(h, node);\n        }\n\n        this._requiredNodeTiles = {};\n        this._requiredSpatialArea = {};\n\n        this._sequences = {};\n\n        this._nodeIndexTiles = {};\n        this._nodeIndex.clear();\n    }\n\n    /**\n     * Set the spatial node filter.\n     *\n     * @param {FilterExpression} filter - Filter expression to be applied\n     * when calculating spatial edges.\n     */\n    public setFilter(filter: FilterExpression): void {\n        this._filter = this._filterCreator.createFilter(filter);\n    }\n\n    /**\n     * Uncache the graph according to the graph configuration.\n     *\n     * @description Uncaches unused tiles, unused nodes and\n     * sequences according to the numbers specified in the\n     * graph configuration. Sequences does not have a direct\n     * reference to either tiles or nodes and may be uncached\n     * even if they are related to the nodes that should be kept.\n     *\n     * @param {Array<string>} keepKeys - Keys of nodes to keep in\n     * graph unrelated to last access. Tiles related to those keys\n     * will also be kept in graph.\n     */\n    public uncache(keepKeys: string[]): void {\n        let keysInUse: { [key: string]: boolean } = {};\n\n        this._addNewKeys(keysInUse, this._cachingFull$);\n        this._addNewKeys(keysInUse, this._cachingFill$);\n        this._addNewKeys(keysInUse, this._cachingTiles$);\n        this._addNewKeys(keysInUse, this._cachingSpatialArea$);\n        this._addNewKeys(keysInUse, this._requiredNodeTiles);\n        this._addNewKeys(keysInUse, this._requiredSpatialArea);\n\n        for (let key of keepKeys) {\n            if (key in keysInUse) {\n                continue;\n            }\n\n            keysInUse[key] = true;\n        }\n\n        let keepHs: { [h: string]: boolean } = {};\n        for (let key in keysInUse) {\n            if (!keysInUse.hasOwnProperty(key)) {\n                continue;\n            }\n\n            let node: Node = this._nodes[key];\n\n            let nodeHs: string[] = this._graphCalculator.encodeHs(node.latLon);\n            for (let nodeH of nodeHs) {\n                if (!(nodeH in keepHs)) {\n                    keepHs[nodeH] = true;\n                }\n            }\n        }\n\n        let potentialHs: [string, TileAccess][] = [];\n        for (let h in this._cachedTiles) {\n            if (!this._cachedTiles.hasOwnProperty(h) || h in keepHs) {\n                continue;\n            }\n\n            potentialHs.push([h, this._cachedTiles[h]]);\n        }\n\n        let uncacheHs: string[] = potentialHs\n            .sort(\n                (h1: [string, TileAccess], h2: [string, TileAccess]): number => {\n                    return h2[1].accessed - h1[1].accessed;\n                })\n            .slice(this._configuration.maxUnusedTiles)\n            .map(\n                (h: [string, TileAccess]): string => {\n                    return h[0];\n                });\n\n        for (let uncacheH of uncacheHs) {\n            this._uncacheTile(uncacheH);\n        }\n\n        let potentialNodes: NodeAccess[] = [];\n        for (let key in this._cachedNodes) {\n            if (!this._cachedNodes.hasOwnProperty(key) || key in keysInUse) {\n                continue;\n            }\n\n            potentialNodes.push(this._cachedNodes[key]);\n        }\n\n        let uncacheNodes: NodeAccess[] = potentialNodes\n            .sort(\n                (n1: NodeAccess, n2: NodeAccess): number => {\n                    return n2.accessed - n1.accessed;\n                })\n            .slice(this._configuration.maxUnusedNodes);\n\n        for (let nodeAccess of uncacheNodes) {\n            nodeAccess.node.uncache();\n            let key: string = nodeAccess.node.key;\n            delete this._cachedNodes[key];\n\n            if (key in this._cachedNodeTiles) {\n                delete this._cachedNodeTiles[key];\n            }\n\n            if (key in this._cachedSpatialEdges) {\n                delete this._cachedSpatialEdges[key];\n            }\n        }\n\n        let potentialSequences: SequenceAccess[] = [];\n        for (let sequenceKey in this._sequences) {\n            if (!this._sequences.hasOwnProperty(sequenceKey) ||\n                sequenceKey in this._cachingSequences$) {\n                continue;\n            }\n\n            potentialSequences.push(this._sequences[sequenceKey]);\n        }\n\n        let uncacheSequences: SequenceAccess[] = potentialSequences\n            .sort(\n                (s1: SequenceAccess, s2: SequenceAccess): number => {\n                    return s2.accessed - s1.accessed;\n                })\n            .slice(this._configuration.maxSequences);\n\n        for (let sequenceAccess of uncacheSequences) {\n            let sequenceKey: string = sequenceAccess.sequence.key;\n\n            delete this._sequences[sequenceKey];\n\n            sequenceAccess.sequence.dispose();\n        }\n    }\n\n    private _addNewKeys<T>(keys: { [key: string]: boolean }, dict: { [key: string]: T }): void {\n        for (let key in dict) {\n            if (!dict.hasOwnProperty(key) || !this.hasNode(key)) {\n                continue;\n            }\n\n            if (!(key in keys)) {\n                keys[key] = true;\n            }\n        }\n    }\n\n    private _cacheSequence$(sequenceKey: string): Observable<Graph> {\n        if (sequenceKey in this._cachingSequences$) {\n            return this._cachingSequences$[sequenceKey];\n        }\n\n        this._cachingSequences$[sequenceKey] = this._apiV3.sequenceByKey$([sequenceKey])\n            .do(\n                (sequenceByKey: { [sequenceKey: string]: ISequence }): void => {\n                    if (!(sequenceKey in this._sequences)) {\n                        this._sequences[sequenceKey] = {\n                            accessed: new Date().getTime(),\n                            sequence: new Sequence(sequenceByKey[sequenceKey]),\n                        };\n                    }\n\n                    delete this._cachingSequences$[sequenceKey];\n                })\n            .map(\n                (sequenceByKey: { [sequenceKey: string]: ISequence }): Graph => {\n                    return this;\n                })\n            .finally(\n                (): void => {\n                    if (sequenceKey in this._cachingSequences$) {\n                        delete this._cachingSequences$[sequenceKey];\n                    }\n\n                    this._changed$.next(this);\n                })\n            .publish()\n            .refCount();\n\n        return this._cachingSequences$[sequenceKey];\n    }\n\n    private _makeFull(node: Node, fillNode: IFillNode): void {\n        if (fillNode.calt == null) {\n            fillNode.calt = this._defaultAlt;\n        }\n\n        if (fillNode.c_rotation == null) {\n            fillNode.c_rotation = this._graphCalculator.rotationFromCompass(fillNode.ca, fillNode.orientation);\n        }\n\n        node.makeFull(fillNode);\n    }\n\n    private _preStore(h: string, node: Node): void {\n        if (!(h in this._preStored)) {\n            this._preStored[h] = {};\n        }\n\n        this._preStored[h][node.key] = node;\n    }\n\n    private _removeFromPreStore(h: string): { [key: string]: Node } {\n        let preStored: { [key: string]: Node } = null;\n\n        if (h in this._preStored) {\n            preStored = this._preStored[h];\n            delete this._preStored[h];\n        }\n\n        return preStored;\n    }\n\n    private _setNode(node: Node): void {\n        let key: string = node.key;\n\n        if (this.hasNode(key)) {\n            throw new GraphMapillaryError(`Node already exist (${key}).`);\n        }\n\n        this._nodes[key] = node;\n    }\n\n    private _uncacheTile(h: string): void {\n        for (let node of this._cachedTiles[h].nodes) {\n            let key: string = node.key;\n\n            delete this._nodes[key];\n            delete this._nodeToTile[key];\n\n            if (key in this._cachedNodes) {\n                delete this._cachedNodes[key];\n            }\n\n            if (key in this._cachedNodeTiles) {\n                delete this._cachedNodeTiles[key];\n            }\n\n            if (key in this._cachedSpatialEdges) {\n                delete this._cachedSpatialEdges[key];\n            }\n\n            node.dispose();\n        }\n\n        for (let nodeIndexItem of this._nodeIndexTiles[h]) {\n            this._nodeIndex.remove(nodeIndexItem);\n        }\n\n        delete this._nodeIndexTiles[h];\n        delete this._cachedTiles[h];\n    }\n\n    private _updateCachedTileAccess(key: string, accessed: number): void {\n        if (key in this._nodeToTile) {\n            this._cachedTiles[this._nodeToTile[key]].accessed = accessed;\n        }\n    }\n\n    private _updateCachedNodeAccess(key: string, accessed: number): void {\n        if (key in this._cachedNodes) {\n            this._cachedNodes[key].accessed = accessed;\n        }\n    }\n}\n\nexport default Graph;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {Transform} from \"../Geo\";\n\n/**\n * @class ViewportCoords\n *\n * @classdesc Provides methods for calculating 2D coordinate conversions\n * as well as 3D projection and unprojection.\n *\n * Basic coordinates are 2D coordinates on the [0, 1] interval and\n * have the origin point, (0, 0), at the top left corner and the\n * maximum value, (1, 1), at the bottom right corner of the original\n * photo.\n *\n * Viewport coordinates are 2D coordinates on the [-1, 1] interval and\n * have the origin point in the center. The bottom left corner point is\n * (-1, -1) and the top right corner point is (1, 1).\n *\n * Canvas coordiantes are 2D pixel coordinates on the [0, canvasWidth] and\n * [0, canvasHeight] intervals. The origin point (0, 0) is in the top left\n * corner and the maximum value is (canvasWidth, canvasHeight) is in the\n * bottom right corner.\n *\n * 3D coordinates are in the topocentric world reference frame.\n */\nexport class ViewportCoords {\n    private _unprojectDepth: number = 200;\n\n    /**\n     * Convert basic coordinates to canvas coordinates.\n     *\n     * @description Transform origin and perspective camera position needs to be the\n     * equal for reliable return value.\n     *\n     * @param {number} basicX - Basic X coordinate.\n     * @param {number} basicY - Basic Y coordinate.\n     * @param {HTMLElement} container - The viewer container.\n     * @param {Transform} transform - Transform of the node to unproject from.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} 2D canvas coordinates.\n     */\n    public basicToCanvas(\n        basicX: number,\n        basicY: number,\n        container: HTMLElement,\n        transform: Transform,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        number[] {\n\n        const point3d: number[] = transform.unprojectBasic([basicX, basicY], this._unprojectDepth);\n        const canvas: number[] = this.projectToCanvas(point3d, container, perspectiveCamera);\n\n        return canvas;\n    }\n\n    /**\n     * Convert basic coordinates to viewport coordinates.\n     *\n     * @description Transform origin and perspective camera position needs to be the\n     * equal for reliable return value.\n     *\n     * @param {number} basicX - Basic X coordinate.\n     * @param {number} basicY - Basic Y coordinate.\n     * @param {Transform} transform - Transform of the node to unproject from.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} 2D viewport coordinates.\n     */\n    public basicToViewport(\n        basicX: number,\n        basicY: number,\n        transform: Transform,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        number[] {\n\n        const point3d: number[] = transform.unprojectBasic([basicX, basicY], this._unprojectDepth);\n        const viewport: number[] = this.projectToViewport(point3d, perspectiveCamera);\n\n        return viewport;\n    }\n\n    /**\n     * Get canvas pixel position from event.\n     *\n     * @param {Event} event - Event containing clientX and clientY properties.\n     * @param {HTMLElement} element - HTML element.\n     * @returns {Array<number>} 2D canvas coordinates.\n     */\n    public canvasPosition(event: { clientX: number, clientY: number }, element: HTMLElement): number[] {\n        const clientRect: ClientRect = element.getBoundingClientRect();\n\n        const canvasX: number = event.clientX - clientRect.left - element.clientLeft;\n        const canvasY: number = event.clientY - clientRect.top - element.clientTop;\n\n        return [canvasX, canvasY];\n    }\n\n    /**\n     * Convert canvas coordinates to basic coordinates.\n     *\n     * @description Transform origin and perspective camera position needs to be the\n     * equal for reliable return value.\n     *\n     * @param {number} canvasX - Canvas X coordinate.\n     * @param {number} canvasY - Canvas Y coordinate.\n     * @param {HTMLElement} container - The viewer container.\n     * @param {Transform} transform - Transform of the node to unproject from.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} 2D basic coordinates.\n     */\n    public canvasToBasic(\n        canvasX: number,\n        canvasY: number,\n        container: HTMLElement,\n        transform: Transform,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        number[] {\n\n        const point3d: number[] =\n            this.unprojectFromCanvas(canvasX, canvasY, container, perspectiveCamera)\n                .toArray();\n\n        const basic: number[] = transform.projectBasic(point3d);\n\n        return basic;\n    }\n\n    /**\n     * Convert canvas coordinates to viewport coordinates.\n     *\n     * @param {number} canvasX - Canvas X coordinate.\n     * @param {number} canvasY - Canvas Y coordinate.\n     * @param {HTMLElement} container - The viewer container.\n     * @returns {Array<number>} 2D viewport coordinates.\n     */\n    public canvasToViewport(\n        canvasX: number,\n        canvasY: number,\n        container: HTMLElement):\n        number[] {\n\n        const [canvasWidth, canvasHeight]: number[] = this.containerToCanvas(container);\n        const viewportX: number = 2 * canvasX / canvasWidth - 1;\n        const viewportY: number = 1 - 2 * canvasY / canvasHeight;\n\n        return [viewportX, viewportY];\n    }\n\n    /**\n     * Determines the width and height of the container in canvas coordinates.\n     *\n     * @param {HTMLElement} container - The viewer container.\n     * @returns {Array<number>} 2D canvas coordinates.\n     */\n    public containerToCanvas(container: HTMLElement): number[] {\n        return [container.offsetWidth, container.offsetHeight];\n    }\n\n    /**\n     * Determine basic distances from image to canvas corners.\n     *\n     * @description Transform origin and perspective camera position needs to be the\n     * equal for reliable return value.\n     *\n     * Determines the smallest basic distance for every side of the canvas.\n     *\n     * @param {Transform} transform - Transform of the node to unproject from.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} Array of basic distances as [top, right, bottom, left].\n     */\n    public getBasicDistances(\n        transform: Transform,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        number[] {\n\n        const topLeftBasic: number[] = this.viewportToBasic(-1, 1, transform, perspectiveCamera);\n        const topRightBasic: number[] = this.viewportToBasic(1, 1, transform, perspectiveCamera);\n        const bottomRightBasic: number[] = this.viewportToBasic(1, -1, transform, perspectiveCamera);\n        const bottomLeftBasic: number[] = this.viewportToBasic(-1, -1, transform, perspectiveCamera);\n\n        let topBasicDistance: number = 0;\n        let rightBasicDistance: number = 0;\n        let bottomBasicDistance: number = 0;\n        let leftBasicDistance: number = 0;\n\n        if (topLeftBasic[1] < 0 && topRightBasic[1] < 0) {\n            topBasicDistance = topLeftBasic[1] > topRightBasic[1] ?\n                -topLeftBasic[1] :\n                -topRightBasic[1];\n        }\n\n        if (topRightBasic[0] > 1 && bottomRightBasic[0] > 1) {\n            rightBasicDistance = topRightBasic[0] < bottomRightBasic[0] ?\n                topRightBasic[0] - 1 :\n                bottomRightBasic[0] - 1;\n        }\n\n        if (bottomRightBasic[1] > 1 && bottomLeftBasic[1] > 1) {\n            bottomBasicDistance = bottomRightBasic[1] < bottomLeftBasic[1] ?\n                bottomRightBasic[1] - 1 :\n                bottomLeftBasic[1] - 1;\n        }\n\n        if (bottomLeftBasic[0] < 0 && topLeftBasic[0] < 0) {\n            leftBasicDistance = bottomLeftBasic[0] > topLeftBasic[0] ?\n                -bottomLeftBasic[0] :\n                -topLeftBasic[0];\n        }\n\n        return [topBasicDistance, rightBasicDistance, bottomBasicDistance, leftBasicDistance];\n    }\n\n    /**\n     * Determine pixel distances from image to canvas corners.\n     *\n     * @description Transform origin and perspective camera position needs to be the\n     * equal for reliable return value.\n     *\n     * Determines the smallest pixel distance for every side of the canvas.\n     *\n     * @param {HTMLElement} container - The viewer container.\n     * @param {Transform} transform - Transform of the node to unproject from.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} Array of pixel distances as [top, right, bottom, left].\n     */\n    public getPixelDistances(\n        container: HTMLElement,\n        transform: Transform,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        number[] {\n\n        const topLeftBasic: number[] = this.viewportToBasic(-1, 1, transform, perspectiveCamera);\n        const topRightBasic: number[] = this.viewportToBasic(1, 1, transform, perspectiveCamera);\n        const bottomRightBasic: number[] = this.viewportToBasic(1, -1, transform, perspectiveCamera);\n        const bottomLeftBasic: number[] = this.viewportToBasic(-1, -1, transform, perspectiveCamera);\n\n        let topPixelDistance: number = 0;\n        let rightPixelDistance: number = 0;\n        let bottomPixelDistance: number = 0;\n        let leftPixelDistance: number = 0;\n\n        const [canvasWidth, canvasHeight]: number[] = this.containerToCanvas(container);\n\n        if (topLeftBasic[1] < 0 && topRightBasic[1] < 0) {\n            const basicX: number = topLeftBasic[1] > topRightBasic[1] ?\n                topLeftBasic[0] :\n                topRightBasic[0];\n\n            const canvas: number[] = this.basicToCanvas(basicX, 0, container, transform, perspectiveCamera);\n\n            topPixelDistance = canvas[1] > 0 ? canvas[1] : 0;\n        }\n\n        if (topRightBasic[0] > 1 && bottomRightBasic[0] > 1) {\n            const basicY: number = topRightBasic[0] < bottomRightBasic[0] ?\n                topRightBasic[1] :\n                bottomRightBasic[1];\n\n            const canvas: number[] = this.basicToCanvas(1, basicY, container, transform, perspectiveCamera);\n\n            rightPixelDistance = canvas[0] < canvasWidth ? canvasWidth - canvas[0] : 0;\n        }\n\n        if (bottomRightBasic[1] > 1 && bottomLeftBasic[1] > 1) {\n            const basicX: number = bottomRightBasic[1] < bottomLeftBasic[1] ?\n                bottomRightBasic[0] :\n                bottomLeftBasic[0];\n\n            const canvas: number[] = this.basicToCanvas(basicX, 1, container, transform, perspectiveCamera);\n\n            bottomPixelDistance = canvas[1] < canvasHeight ? canvasHeight - canvas[1] : 0;\n        }\n\n        if (bottomLeftBasic[0] < 0 && topLeftBasic[0] < 0) {\n            const basicY: number = bottomLeftBasic[0] > topLeftBasic[0] ?\n                bottomLeftBasic[1] :\n                topLeftBasic[1];\n\n            const canvas: number[] = this.basicToCanvas(0, basicY, container, transform, perspectiveCamera);\n\n            leftPixelDistance = canvas[0] > 0 ? canvas[0] : 0;\n        }\n\n        return [topPixelDistance, rightPixelDistance, bottomPixelDistance, leftPixelDistance];\n    }\n\n    /**\n     * Determine if an event occured inside an element.\n     *\n     * @param {Event} event - Event containing clientX and clientY properties.\n     * @param {HTMLElement} element - HTML element.\n     * @returns {boolean} Value indicating if the event occured inside the element or not.\n     */\n    public insideElement(event: { clientX: number, clientY: number }, element: HTMLElement): boolean {\n        const clientRect: ClientRect = element.getBoundingClientRect();\n\n        const minX: number = clientRect.left + element.clientLeft;\n        const maxX: number = minX + element.clientWidth;\n        const minY: number = clientRect.top + element.clientTop;\n        const maxY: number = minY + element.clientHeight;\n\n        return event.clientX > minX &&\n            event.clientX < maxX &&\n            event.clientY > minY &&\n            event.clientY < maxY;\n    }\n\n    /**\n     * Project 3D world coordinates to canvas coordinates.\n     *\n     * @param {Array<number>} point3D - 3D world coordinates.\n     * @param {HTMLElement} container - The viewer container.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} 2D canvas coordinates.\n     */\n    public projectToCanvas(\n        point3d: number[],\n        container: HTMLElement,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        number[] {\n\n        const viewport: number[] = this.projectToViewport(point3d, perspectiveCamera);\n        const canvas: number[] =\n            this.viewportToCanvas(viewport[0], viewport[1], container);\n\n        return canvas;\n    }\n\n    /**\n     * Project 3D world coordinates to viewport coordinates.\n     *\n     * @param {Array<number>} point3D - 3D world coordinates.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} 2D viewport coordinates.\n     */\n    public projectToViewport(\n        point3d: number[],\n        perspectiveCamera: THREE.PerspectiveCamera):\n        number[] {\n\n        const viewport: THREE.Vector3 =\n            new THREE.Vector3(point3d[0], point3d[1], point3d[2])\n                .project(perspectiveCamera);\n\n        return [viewport.x, viewport.y];\n    }\n\n    /**\n     * Uproject canvas coordinates to 3D world coordinates.\n     *\n     * @param {number} canvasX - Canvas X coordinate.\n     * @param {number} canvasY - Canvas Y coordinate.\n     * @param {HTMLElement} container - The viewer container.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} 3D world coordinates.\n     */\n    public unprojectFromCanvas(\n        canvasX: number,\n        canvasY: number,\n        container: HTMLElement,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        THREE.Vector3 {\n\n        const viewport: number[] =\n            this.canvasToViewport(canvasX, canvasY, container);\n\n        const point3d: THREE.Vector3 =\n            this.unprojectFromViewport(viewport[0], viewport[1], perspectiveCamera);\n\n        return point3d;\n    }\n\n    /**\n     * Unproject viewport coordinates to 3D world coordinates.\n     *\n     * @param {number} viewportX - Viewport X coordinate.\n     * @param {number} viewportY - Viewport Y coordinate.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} 3D world coordinates.\n     */\n    public unprojectFromViewport(\n        viewportX: number,\n        viewportY: number,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        THREE.Vector3 {\n\n        const point3d: THREE.Vector3 =\n            new THREE.Vector3(viewportX, viewportY, 1)\n                .unproject(perspectiveCamera);\n\n        return point3d;\n    }\n\n    /**\n     * Convert viewport coordinates to basic coordinates.\n     *\n     * @description Transform origin and perspective camera position needs to be the\n     * equal for reliable return value.\n     *\n     * @param {number} viewportX - Viewport X coordinate.\n     * @param {number} viewportY - Viewport Y coordinate.\n     * @param {Transform} transform - Transform of the node to unproject from.\n     * @param {THREE.PerspectiveCamera} perspectiveCamera - Perspective camera used in rendering.\n     * @returns {Array<number>} 2D basic coordinates.\n     */\n    public viewportToBasic(\n        viewportX: number,\n        viewportY: number,\n        transform: Transform,\n        perspectiveCamera: THREE.PerspectiveCamera):\n        number[] {\n\n        const point3d: number[] =\n            new THREE.Vector3(viewportX, viewportY, 1)\n                .unproject(perspectiveCamera)\n                .toArray();\n\n        const basic: number[] = transform.projectBasic(point3d);\n\n        return basic;\n    }\n\n    /**\n     * Convert viewport coordinates to canvas coordinates.\n     *\n     * @param {number} viewportX - Viewport X coordinate.\n     * @param {number} viewportY - Viewport Y coordinate.\n     * @param {HTMLElement} container - The viewer container.\n     * @returns {Array<number>} 2D canvas coordinates.\n     */\n    public viewportToCanvas(\n        viewportX: number,\n        viewportY: number,\n        container: HTMLElement):\n        number[] {\n\n        const [canvasWidth, canvasHeight]: number[] = this.containerToCanvas(container);\n        const canvasX: number = canvasWidth * (viewportX + 1) / 2;\n        const canvasY: number = -canvasHeight * (viewportY - 1) / 2;\n\n        return [canvasX, canvasY];\n    }\n}\n\nexport default ViewportCoords;\n",
     "import {\n    FilterExpression,\n    FilterOperation,\n    FilterOperator,\n    FilterValue,\n    Node,\n} from \"../Graph\";\nimport {Func} from \"../Utils\";\n\nexport type FilterFunction = Func<Node, boolean>;\n\n/**\n * @class Filter\n *\n * @classdesc Represents a class for creating node filters. Implementation and\n * definitions based on https://github.com/mapbox/feature-filter.\n */\nexport class FilterCreator {\n    /**\n     * Create a filter from a filter expression.\n     *\n     * @description The following filters are supported:\n     *\n     * Comparison\n     * `==`\n     * `!=`\n     * `<`\n     * `<=`\n     * `>`\n     * `>=`\n     *\n     * Set membership\n     * `in`\n     * `!in`\n     *\n     * Combining\n     * `all`\n     *\n     * @param {FilterExpression} filter - Comparison, set membership or combinding filter\n     * expression.\n     * @returns {FilterFunction} Function taking a node and returning a boolean that\n     * indicates whether the node passed the test or not.\n     */\n    public createFilter(filter: FilterExpression): FilterFunction {\n        return <FilterFunction>new Function(\"node\", \"return \" + this._compile(filter) + \";\");\n    }\n\n    private _compile(filter: FilterExpression): string {\n        if (filter == null || filter.length <= 1) {\n            return \"true\";\n        }\n\n        const operator: FilterOperator = <FilterOperator>filter[0];\n        const operation: string =\n            operator === \"==\" ? this._compileComparisonOp(\"===\", <string>filter[1], filter[2], false) :\n            operator === \"!=\" ? this._compileComparisonOp(\"!==\", <string>filter[1], filter[2], false) :\n            operator === \">\" ||\n            operator === \">=\" ||\n            operator === \"<\" ||\n            operator === \"<=\" ? this._compileComparisonOp(operator, <string>filter[1], filter[2], true) :\n            operator === \"in\" ?\n                this._compileInOp<FilterValue>(<string>filter[1], <FilterValue[]>filter.slice(2)) :\n            operator === \"!in\" ?\n                this._compileNegation(\n                    this._compileInOp<FilterValue>(<string>filter[1], <FilterValue[]>filter.slice(2))) :\n            operator === \"all\" ? this._compileLogicalOp(<FilterOperation[]>filter.slice(1), \"&&\") :\n            \"true\";\n\n        return \"(\" + operation + \")\";\n    }\n\n    private _compare<T>(a: T, b: T): number {\n        return a < b ? -1 : a > b ? 1 : 0;\n    }\n\n    private _compileComparisonOp<T>(operator: string, property: string, value: T, checkType: boolean): string {\n        const left: string = this._compilePropertyReference(property);\n        const right: string = JSON.stringify(value);\n\n        return (checkType ? \"typeof \" + left + \"===typeof \" + right + \"&&\" : \"\") + left + operator + right;\n    }\n\n    private _compileInOp<T>(property: string, values: T[]): string {\n        const compare: (a: T, b: T) => number = this._compare;\n        const left: string = JSON.stringify(values.sort(compare));\n        const right: string = this._compilePropertyReference(property);\n\n        return left + \".indexOf(\" + right + \")!==-1\";\n    }\n\n    private _compileLogicalOp(filters: FilterOperation[], operator: string): string {\n        const compile: (filter: FilterExpression) => string = this._compile.bind(this);\n\n        return filters.map<string>(compile).join(operator);\n    }\n\n    private _compileNegation(expression: string): string {\n        return \"!(\" + expression + \")\";\n    }\n\n    private _compilePropertyReference(property: string): string {\n        return \"node[\" + JSON.stringify(property) + \"]\";\n    }\n}\n\nexport default FilterCreator;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as rbush from \"rbush\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/observable/from\";\n\nimport \"rxjs/add/operator/catch\";\nimport \"rxjs/add/operator/do\";\nimport \"rxjs/add/operator/finally\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/publish\";\n\nimport {\n    APIv3,\n    ICoreNode,\n    IFillNode,\n    IFullNode,\n    ILatLon,\n    ISequence,\n} from \"../API\";\nimport {\n    IEdge,\n    IPotentialEdge,\n    EdgeCalculator,\n} from \"../Edge\";\nimport {GraphMapillaryError} from \"../Error\";\nimport {\n    FilterCreator,\n    FilterExpression,\n    FilterFunction,\n    IGraphConfiguration,\n    Node,\n    NodeCache,\n    Sequence,\n    GraphCalculator,\n} from \"../Graph\";\n\ntype NodeIndexItem = {\n    lat: number;\n    lon: number;\n    node: Node;\n}\n\ntype NodeTiles = {\n    cache: string[];\n    caching: string[];\n}\n\ntype SpatialArea = {\n    all: { [key: string]: Node };\n    cacheKeys: string[];\n    cacheNodes: { [key: string]: Node };\n}\n\ntype NodeAccess = {\n    node: Node;\n    accessed: number;\n}\n\ntype TileAccess = {\n    nodes: Node[];\n    accessed: number;\n}\n\ntype SequenceAccess = {\n    sequence: Sequence;\n    accessed: number;\n}\n\n/**\n * @class Graph\n *\n * @classdesc Represents a graph of nodes with edges.\n */\nexport class Graph {\n    private _apiV3: APIv3;\n\n    /**\n     * Nodes that have initialized cache with a timestamp of last access.\n     */\n    private _cachedNodes: { [key: string]: NodeAccess };\n\n    /**\n     * Nodes for which the required tiles are cached.\n     */\n    private _cachedNodeTiles: { [key: string]: boolean };\n\n    /**\n     * Nodes for which the spatial edges are cached.\n     */\n    private _cachedSpatialEdges: { [key: string]: Node };\n\n    /**\n     * Cached tiles with a timestamp of last access.\n     */\n    private _cachedTiles: { [h: string]: TileAccess };\n\n    /**\n     * Nodes for which fill properties are being retreived.\n     */\n    private _cachingFill$: { [key: string]: Observable<Graph> };\n\n    /**\n     * Nodes for which full properties are being retrieved.\n     */\n    private _cachingFull$: { [key: string]: Observable<Graph> };\n\n    /**\n     * Sequences that are being retrieved.\n     */\n    private _cachingSequences$: { [sequenceKey: string]: Observable<Graph> };\n\n    /**\n     * Nodes for which the spatial area fill properties are being retrieved.\n     */\n    private _cachingSpatialArea$: { [key: string]: Observable<Graph>[] };\n\n    /**\n     * Tiles that are being retrieved.\n     */\n    private _cachingTiles$: { [h: string]: Observable<Graph> };\n\n    private _changed$: Subject<Graph>;\n\n    private _defaultAlt: number;\n    private _edgeCalculator: EdgeCalculator;\n    private _filter: FilterFunction;\n    private _filterCreator: FilterCreator;\n    private _graphCalculator: GraphCalculator;\n    private _configuration: IGraphConfiguration;\n\n    /**\n     * All nodes in the graph.\n     */\n    private _nodes: { [key: string]: Node };\n\n    /**\n     * Contains all nodes in the graph. Used for fast spatial lookups.\n     */\n    private _nodeIndex: rbush.RBush<NodeIndexItem>;\n\n    /**\n     * All node index items sorted in tiles for easy uncache.\n     */\n    private _nodeIndexTiles: { [h: string]: NodeIndexItem[] };\n\n    /**\n     * Node to tile dictionary for easy tile access updates.\n     */\n    private _nodeToTile: { [key: string]: string };\n\n    /**\n     * Nodes retrieved before tiles, stored on tile level.\n     */\n    private _preStored: { [h: string]:  { [key: string]: Node }; };\n\n    /**\n     * Tiles required for a node to retrive spatial area.\n     */\n    private _requiredNodeTiles: { [key: string]: NodeTiles };\n\n    /**\n     * Other nodes required for node to calculate spatial edges.\n     */\n    private _requiredSpatialArea: { [key: string]: SpatialArea };\n\n    /**\n     * All sequences in graph with a timestamp of last access.\n     */\n    private _sequences: { [skey: string]: SequenceAccess };\n\n    private _tilePrecision: number;\n    private _tileThreshold: number;\n\n    /**\n     * Create a new graph instance.\n     *\n     * @param {APIv3} [apiV3] - API instance for retrieving data.\n     * @param {rbush.RBush<NodeIndexItem>} [nodeIndex] - Node index for fast spatial retreival.\n     * @param {GraphCalculator} [graphCalculator] - Instance for graph calculations.\n     * @param {EdgeCalculator} [edgeCalculator] - Instance for edge calculations.\n     * @param {FilterCreator} [filterCreator] - Instance for  filter creation.\n     * @param {IGraphConfiguration} [configuration] - Configuration struct.\n     */\n    constructor(\n        apiV3: APIv3,\n        nodeIndex?: rbush.RBush<NodeIndexItem>,\n        graphCalculator?: GraphCalculator,\n        edgeCalculator?: EdgeCalculator,\n        filterCreator?: FilterCreator,\n        configuration?: IGraphConfiguration) {\n\n        this._apiV3 = apiV3;\n\n        this._cachedNodes = {};\n        this._cachedNodeTiles = {};\n        this._cachedSpatialEdges = {};\n        this._cachedTiles = {};\n\n        this._cachingFill$ = {};\n        this._cachingFull$ = {};\n        this._cachingSequences$ = {};\n        this._cachingSpatialArea$ = {};\n        this._cachingTiles$ = {};\n\n        this._changed$ = new Subject<Graph>();\n\n        this._defaultAlt = 2;\n        this._edgeCalculator = edgeCalculator != null ? edgeCalculator : new EdgeCalculator();\n        this._filterCreator = filterCreator != null ? filterCreator : new FilterCreator();\n        this._filter = this._filterCreator.createFilter(undefined);\n        this._graphCalculator = graphCalculator != null ? graphCalculator : new GraphCalculator();\n        this._configuration = configuration != null ?\n            configuration :\n            {\n                maxSequences: 50,\n                maxUnusedNodes: 100,\n                maxUnusedTiles: 20,\n            };\n\n        this._nodes = {};\n        this._nodeIndex = nodeIndex != null ? nodeIndex : rbush<NodeIndexItem>(16, [\".lat\", \".lon\", \".lat\", \".lon\"]);\n        this._nodeIndexTiles = {};\n        this._nodeToTile = {};\n\n        this._preStored = {};\n\n        this._requiredNodeTiles = {};\n        this._requiredSpatialArea = {};\n\n        this._sequences = {};\n\n        this._tilePrecision = 7;\n        this._tileThreshold = 20;\n    }\n\n    /**\n     * Get changed$.\n     *\n     * @returns {Observable<Graph>} Observable emitting\n     * the graph every time it has changed.\n     */\n    public get changed$(): Observable<Graph> {\n        return this._changed$;\n    }\n\n    /**\n     * Retrieve and cache node fill properties.\n     *\n     * @param {string} key - Key of node to fill.\n     * @returns {Observable<Graph>} Observable emitting the graph\n     * when the node has been updated.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public cacheFill$(key: string): Observable<Graph> {\n        if (key in this._cachingFull$) {\n            throw new GraphMapillaryError(`Cannot fill node while caching full (${key}).`);\n        }\n\n        if (!this.hasNode(key)) {\n            throw new GraphMapillaryError(`Cannot fill node that does not exist in graph (${key}).`);\n        }\n\n        if (key in this._cachingFill$) {\n            return this._cachingFill$[key];\n        }\n\n        let node: Node = this.getNode(key);\n        if (node.full) {\n            throw new GraphMapillaryError(`Cannot fill node that is already full (${key}).`);\n        }\n\n        this._cachingFill$[key] = this._apiV3.imageByKeyFill$([key])\n            .do(\n                (imageByKeyFill: { [key: string]: IFillNode }): void => {\n                    if (!node.full) {\n                        this._makeFull(node, imageByKeyFill[key]);\n                    }\n\n                    delete this._cachingFill$[key];\n                })\n            .map(\n                (imageByKeyFill: { [key: string]: IFillNode }): Graph => {\n                    return this;\n                })\n            .finally(\n                (): void => {\n                    if (key in this._cachingFill$) {\n                        delete this._cachingFill$[key];\n                    }\n\n                    this._changed$.next(this);\n                })\n            .publish()\n            .refCount();\n\n        return this._cachingFill$[key];\n    }\n\n    /**\n     * Retrieve and cache full node properties.\n     *\n     * @param {string} key - Key of node to fill.\n     * @returns {Observable<Graph>} Observable emitting the graph\n     * when the node has been updated.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public cacheFull$(key: string): Observable<Graph> {\n        if (key in this._cachingFull$) {\n            return this._cachingFull$[key];\n        }\n\n        if (this.hasNode(key)) {\n            throw new GraphMapillaryError(`Cannot cache full node that already exist in graph (${key}).`);\n        }\n\n        this._cachingFull$[key] = this._apiV3.imageByKeyFull$([key])\n            .do(\n                (imageByKeyFull: { [key: string]: IFullNode }): void => {\n                    let fn: IFullNode = imageByKeyFull[key];\n\n                    if (this.hasNode(key)) {\n                        let node: Node = this.getNode(key);\n\n                        if (!node.full) {\n                            this._makeFull(node, fn);\n                        }\n                    } else {\n                        if (fn.sequence == null || fn.sequence.key == null) {\n                            throw new GraphMapillaryError(`Node has no sequence (${key}).`);\n                        }\n\n                        let node: Node = new Node(fn);\n                        this._makeFull(node, fn);\n\n                        let h: string = this._graphCalculator.encodeH(node.originalLatLon, this._tilePrecision);\n                        this._preStore(h, node);\n                        this._setNode(node);\n\n                        delete this._cachingFull$[key];\n                    }\n                })\n            .map(\n                (imageByKeyFull: { [key: string]: IFullNode }): Graph => {\n                    return this;\n                })\n            .finally(\n                (): void => {\n                    if (key in this._cachingFull$) {\n                        delete this._cachingFull$[key];\n                    }\n\n                    this._changed$.next(this);\n                })\n            .publish()\n            .refCount();\n\n        return this._cachingFull$[key];\n    }\n\n    /**\n     * Retrieve and cache a node sequence.\n     *\n     * @param {string} key - Key of node for which to retrieve sequence.\n     * @returns {Observable<Graph>} Observable emitting the graph\n     * when the sequence has been retrieved.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public cacheNodeSequence$(key: string): Observable<Graph> {\n        if (!this.hasNode(key)) {\n            throw new GraphMapillaryError(`Cannot cache sequence edges of node that does not exist in graph (${key}).`);\n        }\n\n        let node: Node = this.getNode(key);\n        if (node.sequenceKey in this._sequences) {\n            throw new GraphMapillaryError(`Sequence already cached (${key}), (${node.sequenceKey}).`);\n        }\n\n        return this._cacheSequence$(node.sequenceKey);\n    }\n\n    /**\n     * Retrieve and cache a sequence.\n     *\n     * @param {string} sequenceKey - Key of sequence to cache.\n     * @returns {Observable<Graph>} Observable emitting the graph\n     * when the sequence has been retrieved.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public cacheSequence$(sequenceKey: string): Observable<Graph> {\n        if (sequenceKey in this._sequences) {\n            throw new GraphMapillaryError(`Sequence already cached (${sequenceKey})`);\n        }\n\n        return this._cacheSequence$(sequenceKey);\n    }\n\n    /**\n     * Cache sequence edges for a node.\n     *\n     * @param {string} key - Key of node.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public cacheSequenceEdges(key: string): void {\n        let node: Node = this.getNode(key);\n\n        if (!(node.sequenceKey in this._sequences)) {\n            throw new GraphMapillaryError(`Sequence is not cached (${key}), (${node.sequenceKey})`);\n        }\n\n        let sequence: Sequence = this._sequences[node.sequenceKey].sequence;\n        let edges: IEdge[] = this._edgeCalculator.computeSequenceEdges(node, sequence);\n\n        node.cacheSequenceEdges(edges);\n    }\n\n    /**\n     * Retrieve and cache full nodes for a node spatial area.\n     *\n     * @param {string} key - Key of node for which to retrieve sequence.\n     * @returns {Observable<Graph>} Observable emitting the graph\n     * when the nodes in the spatial area has been made full.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public cacheSpatialArea$(key: string): Observable<Graph>[] {\n        if (!this.hasNode(key)) {\n            throw new GraphMapillaryError(`Cannot cache spatial area of node that does not exist in graph (${key}).`);\n        }\n\n        if (key in this._cachedSpatialEdges) {\n            throw new GraphMapillaryError(`Node already spatially cached (${key}).`);\n        }\n\n        if (!(key in this._requiredSpatialArea)) {\n            throw new GraphMapillaryError(`Spatial area not determined (${key}).`);\n        }\n\n        let spatialArea: SpatialArea = this._requiredSpatialArea[key];\n        if (Object.keys(spatialArea.cacheNodes).length === 0) {\n            throw new GraphMapillaryError(`Spatial nodes already cached (${key}).`);\n        }\n\n        if (key in this._cachingSpatialArea$) {\n            return this._cachingSpatialArea$[key];\n        }\n\n        let batches: string[][] = [];\n        while (spatialArea.cacheKeys.length > 0) {\n            batches.push(spatialArea.cacheKeys.splice(0, 200));\n        }\n\n        let batchesToCache: number = batches.length;\n        let spatialNodes$: Observable<Graph>[] = [];\n\n        for (let batch of batches) {\n            let spatialNodeBatch$: Observable<Graph> = this._apiV3.imageByKeyFill$(batch)\n                .do(\n                    (imageByKeyFill: { [key: string]: IFillNode }): void => {\n                        for (let fillKey in imageByKeyFill) {\n                            if (!imageByKeyFill.hasOwnProperty(fillKey)) {\n                                continue;\n                            }\n\n                            let spatialNode: Node = spatialArea.cacheNodes[fillKey];\n                            if (spatialNode.full) {\n                                delete spatialArea.cacheNodes[fillKey];\n                                continue;\n                            }\n\n                            let fillNode: IFillNode = imageByKeyFill[fillKey];\n                            this._makeFull(spatialNode, fillNode);\n\n                            delete spatialArea.cacheNodes[fillKey];\n                        }\n\n                        if (--batchesToCache === 0) {\n                            delete this._cachingSpatialArea$[key];\n                        }\n                    })\n                .map(\n                    (imageByKeyFill: { [key: string]: IFillNode }): Graph => {\n                        return this;\n                    })\n                .catch(\n                    (error: Error): Observable<Graph> => {\n                        for (let batchKey of batch) {\n                            if (batchKey in spatialArea.all) {\n                                delete spatialArea.all[batchKey];\n                            }\n\n                            if (batchKey in spatialArea.cacheNodes) {\n                                delete spatialArea.cacheNodes[batchKey];\n                            }\n                        }\n\n                        if (--batchesToCache === 0) {\n                            delete this._cachingSpatialArea$[key];\n                        }\n\n                        throw error;\n                    })\n                .finally(\n                    (): void => {\n                        if (Object.keys(spatialArea.cacheNodes).length === 0) {\n                            this._changed$.next(this);\n                        }\n                    })\n                .publish()\n                .refCount();\n\n            spatialNodes$.push(spatialNodeBatch$);\n        }\n\n        this._cachingSpatialArea$[key] = spatialNodes$;\n\n        return spatialNodes$;\n    }\n\n    /**\n     * Cache spatial edges for a node.\n     *\n     * @param {string} key - Key of node.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public cacheSpatialEdges(key: string): void {\n        if (key in this._cachedSpatialEdges) {\n             throw new GraphMapillaryError(`Spatial edges already cached (${key}).`);\n        }\n\n        let node: Node = this.getNode(key);\n        let sequence: Sequence = this._sequences[node.sequenceKey].sequence;\n\n        let fallbackKeys: string[] = [];\n        let prevKey: string = sequence.findPrevKey(node.key);\n        if (prevKey != null) {\n            fallbackKeys.push(prevKey);\n        }\n\n        let nextKey: string = sequence.findNextKey(node.key);\n        if (nextKey != null) {\n            fallbackKeys.push(nextKey);\n        }\n\n        let allSpatialNodes: { [key: string]: Node } = this._requiredSpatialArea[key].all;\n        let potentialNodes: Node[] = [];\n        let filter: FilterFunction = this._filter;\n        for (let spatialNodeKey in allSpatialNodes) {\n            if (!allSpatialNodes.hasOwnProperty(spatialNodeKey)) {\n                continue;\n            }\n\n            let spatialNode: Node = allSpatialNodes[spatialNodeKey];\n\n            if (filter(spatialNode)) {\n                potentialNodes.push(spatialNode);\n            }\n        }\n\n        let potentialEdges: IPotentialEdge[] =\n            this._edgeCalculator.getPotentialEdges(node, potentialNodes, fallbackKeys);\n\n        let edges: IEdge[] =\n            this._edgeCalculator.computeStepEdges(\n                node,\n                potentialEdges,\n                prevKey,\n                nextKey);\n\n        edges = edges.concat(this._edgeCalculator.computeTurnEdges(node, potentialEdges));\n        edges = edges.concat(this._edgeCalculator.computePanoEdges(node, potentialEdges));\n        edges = edges.concat(this._edgeCalculator.computePerspectiveToPanoEdges(node, potentialEdges));\n        edges = edges.concat(this._edgeCalculator.computeSimilarEdges(node, potentialEdges));\n\n        node.cacheSpatialEdges(edges);\n\n        this._cachedSpatialEdges[key] = node;\n        delete this._requiredSpatialArea[key];\n        delete this._cachedNodeTiles[key];\n    }\n\n    /**\n     * Retrieve and cache geohash tiles for a node.\n     *\n     * @param {string} key - Key of node for which to retrieve tiles.\n     * @returns {Observable<Graph>} Observable emitting the graph\n     * when the tiles required for the node has been cached.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public cacheTiles$(key: string): Observable<Graph>[] {\n        if (key in this._cachedNodeTiles) {\n            throw new GraphMapillaryError(`Tiles already cached (${key}).`);\n        }\n\n        if (key in this._cachedSpatialEdges) {\n            throw new GraphMapillaryError(`Spatial edges already cached so tiles considered cached (${key}).`);\n        }\n\n        if (!(key in this._requiredNodeTiles)) {\n            throw new GraphMapillaryError(`Tiles have not been determined (${key}).`);\n        }\n\n        let nodeTiles: NodeTiles = this._requiredNodeTiles[key];\n        if (nodeTiles.cache.length === 0 &&\n            nodeTiles.caching.length === 0) {\n            throw new GraphMapillaryError(`Tiles already cached (${key}).`);\n        }\n\n        if (!this.hasNode(key)) {\n            throw new GraphMapillaryError(`Cannot cache tiles of node that does not exist in graph (${key}).`);\n        }\n\n        let hs: string[] = nodeTiles.cache.slice();\n        nodeTiles.caching = this._requiredNodeTiles[key].caching.concat(hs);\n        nodeTiles.cache = [];\n\n        let cacheTiles$: Observable<Graph>[] = [];\n\n        for (let h of nodeTiles.caching) {\n            let cacheTile$: Observable<Graph> = null;\n            if (h in this._cachingTiles$) {\n                cacheTile$ = this._cachingTiles$[h];\n            } else {\n                cacheTile$ = this._apiV3.imagesByH$([h])\n                    .do(\n                        (imagesByH: { [key: string]: { [index: string]: ICoreNode } }): void => {\n                            let coreNodes: { [index: string]: ICoreNode } = imagesByH[h];\n\n                            if (h in this._cachedTiles) {\n                                return;\n                            }\n\n                            this._nodeIndexTiles[h] = [];\n                            this._cachedTiles[h] = { accessed: new Date().getTime(), nodes: [] };\n                            let hCache: Node[] = this._cachedTiles[h].nodes;\n                            let preStored: { [key: string]: Node } = this._removeFromPreStore(h);\n\n                            for (let index in coreNodes) {\n                                if (!coreNodes.hasOwnProperty(index)) {\n                                    continue;\n                                }\n\n                                let coreNode: ICoreNode = coreNodes[index];\n\n                                if (coreNode == null) {\n                                    break;\n                                }\n\n                                if (coreNode.sequence == null ||\n                                    coreNode.sequence.key == null) {\n                                    console.warn(`Sequence missing, discarding (${coreNode.key})`);\n\n                                    continue;\n                                }\n\n                                if (preStored != null && coreNode.key in preStored) {\n                                    let node: Node = preStored[coreNode.key];\n                                    delete preStored[coreNode.key];\n\n                                    hCache.push(node);\n\n                                    let nodeIndexItem: NodeIndexItem = {\n                                        lat: node.latLon.lat,\n                                        lon: node.latLon.lon,\n                                        node: node,\n                                    };\n\n                                    this._nodeIndex.insert(nodeIndexItem);\n                                    this._nodeIndexTiles[h].push(nodeIndexItem);\n                                    this._nodeToTile[node.key] = h;\n\n                                    continue;\n                                }\n\n                                let node: Node = new Node(coreNode);\n\n                                hCache.push(node);\n\n                                let nodeIndexItem: NodeIndexItem = {\n                                    lat: node.latLon.lat,\n                                    lon: node.latLon.lon,\n                                    node: node,\n                                };\n\n                                this._nodeIndex.insert(nodeIndexItem);\n                                this._nodeIndexTiles[h].push(nodeIndexItem);\n                                this._nodeToTile[node.key] = h;\n\n                                this._setNode(node);\n                            }\n\n                            delete this._cachingTiles$[h];\n                        })\n                    .map(\n                        (imagesByH: { [key: string]: { [index: string]: ICoreNode } }): Graph => {\n                            return this;\n                        })\n                    .catch(\n                        (error: Error): Observable<Graph> => {\n                            delete this._cachingTiles$[h];\n\n                            throw error;\n                        })\n                    .publish()\n                    .refCount();\n\n                this._cachingTiles$[h] = cacheTile$;\n            }\n\n            cacheTiles$.push(\n                cacheTile$\n                    .do(\n                        (graph: Graph): void => {\n                            let index: number = nodeTiles.caching.indexOf(h);\n                            if (index > -1) {\n                                nodeTiles.caching.splice(index, 1);\n                            }\n\n                            if (nodeTiles.caching.length === 0 &&\n                                nodeTiles.cache.length === 0) {\n                                delete this._requiredNodeTiles[key];\n\n                                this._cachedNodeTiles[key] = true;\n                            }\n                        })\n                    .catch(\n                        (error: Error): Observable<Graph> => {\n                            let index: number = nodeTiles.caching.indexOf(h);\n                            if (index > -1) {\n                                nodeTiles.caching.splice(index, 1);\n                            }\n\n                            if (nodeTiles.caching.length === 0 &&\n                                nodeTiles.cache.length === 0) {\n                                delete this._requiredNodeTiles[key];\n\n                                this._cachedNodeTiles[key] = true;\n                            }\n\n                            throw error;\n                        })\n                    .finally(\n                        (): void => {\n                            this._changed$.next(this);\n                        })\n                    .publish()\n                    .refCount());\n        }\n\n        return cacheTiles$;\n    }\n\n    /**\n     * Initialize the cache for a node.\n     *\n     * @param {string} key - Key of node.\n     * @throws {GraphMapillaryError} When the operation is not valid on the\n     * current graph.\n     */\n    public initializeCache(key: string): void {\n        if (key in this._cachedNodes) {\n            throw new GraphMapillaryError(`Node already in cache (${key}).`);\n        }\n\n        let node: Node = this.getNode(key);\n        node.initializeCache(new NodeCache());\n\n        let accessed: number = new Date().getTime();\n        this._cachedNodes[key] = { accessed: accessed, node: node };\n\n        this._updateCachedTileAccess(key, accessed);\n    }\n\n    /**\n     * Get a value indicating if the graph is fill caching a node.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if the node is being fill cached.\n     */\n    public isCachingFill(key: string): boolean {\n        return key in this._cachingFill$;\n    }\n\n    /**\n     * Get a value indicating if the graph is fully caching a node.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if the node is being fully cached.\n     */\n    public isCachingFull(key: string): boolean {\n        return key in this._cachingFull$;\n    }\n\n    /**\n     * Get a value indicating if the graph is caching a sequence of a node.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if the sequence of a node is\n     * being cached.\n     */\n    public isCachingNodeSequence(key: string): boolean {\n        let node: Node = this.getNode(key);\n\n        return node.sequenceKey in this._cachingSequences$;\n    }\n\n    /**\n     * Get a value indicating if the graph is caching a sequence.\n     *\n     * @param {string} sequenceKey - Key of sequence.\n     * @returns {boolean} Value indicating if the sequence is\n     * being cached.\n     */\n    public isCachingSequence(sequenceKey: string): boolean {\n        return sequenceKey in this._cachingSequences$;\n    }\n\n    /**\n     * Get a value indicating if the graph is caching the tiles\n     * required for calculating spatial edges of a node.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if the tiles of\n     * a node are being cached.\n     */\n    public isCachingTiles(key: string): boolean {\n        return key in this._requiredNodeTiles &&\n            this._requiredNodeTiles[key].cache.length === 0 &&\n            this._requiredNodeTiles[key].caching.length > 0;\n    }\n\n    /**\n     * Get a value indicating if the cache has been initialized\n     * for a node.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if the cache has been\n     * initialized for a node.\n     */\n    public hasInitializedCache(key: string): boolean {\n        return key in this._cachedNodes;\n    }\n\n    /**\n     * Get a value indicating if a node exist in the graph.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if a node exist in the graph.\n     */\n    public hasNode(key: string): boolean {\n        let accessed: number = new Date().getTime();\n\n        this._updateCachedNodeAccess(key, accessed);\n        this._updateCachedTileAccess(key, accessed);\n\n        return key in this._nodes;\n    }\n\n    /**\n     * Get a value indicating if a node sequence exist in the graph.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if a node sequence exist\n     * in the graph.\n     */\n    public hasNodeSequence(key: string): boolean {\n        let node: Node = this.getNode(key);\n        let sequenceKey: string = node.sequenceKey;\n\n        let hasNodeSequence: boolean = sequenceKey in this._sequences;\n\n        if (hasNodeSequence) {\n            this._sequences[sequenceKey].accessed = new Date().getTime();\n        }\n\n        return hasNodeSequence;\n    }\n\n    /**\n     * Get a value indicating if a sequence exist in the graph.\n     *\n     * @param {string} sequenceKey - Key of sequence.\n     * @returns {boolean} Value indicating if a sequence exist\n     * in the graph.\n     */\n    public hasSequence(sequenceKey: string): boolean {\n        let hasSequence: boolean = sequenceKey in this._sequences;\n\n        if (hasSequence) {\n            this._sequences[sequenceKey].accessed = new Date().getTime();\n        }\n\n        return hasSequence;\n    }\n\n    /**\n     * Get a value indicating if the graph has fully cached\n     * all nodes in the spatial area of a node.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if the spatial area\n     * of a node has been cached.\n     */\n    public hasSpatialArea(key: string): boolean {\n        if (!this.hasNode(key)) {\n            throw new GraphMapillaryError(`Spatial area nodes cannot be determined if node not in graph (${key}).`);\n        }\n\n        if (key in this._cachedSpatialEdges) {\n            return true;\n        }\n\n        if (key in this._requiredSpatialArea) {\n            return Object.keys(this._requiredSpatialArea[key].cacheNodes).length === 0;\n        }\n\n        let node: Node = this.getNode(key);\n        let bbox: [ILatLon, ILatLon] = this._graphCalculator.boundingBoxCorners(node.latLon, this._tileThreshold);\n\n        let spatialItems: NodeIndexItem[] = this._nodeIndex.search({\n            maxX: bbox[1].lat,\n            maxY: bbox[1].lon,\n            minX: bbox[0].lat,\n            minY: bbox[0].lon,\n        });\n\n        let spatialNodes: SpatialArea = {\n            all: {},\n            cacheKeys: [],\n            cacheNodes: {},\n        };\n\n        for (let spatialItem of spatialItems) {\n            spatialNodes.all[spatialItem.node.key] = spatialItem.node;\n\n            if (!spatialItem.node.full) {\n                spatialNodes.cacheKeys.push(spatialItem.node.key);\n                spatialNodes.cacheNodes[spatialItem.node.key] = spatialItem.node;\n            }\n        }\n\n        this._requiredSpatialArea[key] = spatialNodes;\n\n        return spatialNodes.cacheKeys.length === 0;\n    }\n\n    /**\n     * Get a value indicating if the graph has a tiles required\n     * for a node.\n     *\n     * @param {string} key - Key of node.\n     * @returns {boolean} Value indicating if the the tiles required\n     * by a node has been cached.\n     */\n    public hasTiles(key: string): boolean {\n        if (key in this._cachedNodeTiles) {\n            return true;\n        }\n\n        if (key in this._cachedSpatialEdges) {\n            return true;\n        }\n\n        if (!this.hasNode(key)) {\n            throw new GraphMapillaryError(`Node does not exist in graph (${key}).`);\n        }\n\n        let nodeTiles: NodeTiles = { cache: [], caching: [] };\n\n        if (!(key in this._requiredNodeTiles)) {\n            let node: Node = this.getNode(key);\n            nodeTiles.cache = this._graphCalculator\n                .encodeHs(\n                    node.latLon,\n                    this._tilePrecision,\n                    this._tileThreshold)\n                .filter(\n                    (h: string): boolean => {\n                        return !(h in this._cachedTiles);\n                    });\n\n            if (nodeTiles.cache.length > 0) {\n                this._requiredNodeTiles[key] = nodeTiles;\n            }\n        } else {\n            nodeTiles = this._requiredNodeTiles[key];\n        }\n\n        return nodeTiles.cache.length === 0 && nodeTiles.caching.length === 0;\n    }\n\n    /**\n     * Get a node.\n     *\n     * @param {string} key - Key of node.\n     * @returns {Node} Retrieved node.\n     */\n    public getNode(key: string): Node {\n        let accessed: number = new Date().getTime();\n\n        this._updateCachedNodeAccess(key, accessed);\n        this._updateCachedTileAccess(key, accessed);\n\n        return this._nodes[key];\n    }\n\n    /**\n     * Get a sequence.\n     *\n     * @param {string} sequenceKey - Key of sequence.\n     * @returns {Node} Retrieved sequence.\n     */\n    public getSequence(sequenceKey: string): Sequence {\n        let sequenceAccess: SequenceAccess = this._sequences[sequenceKey];\n        sequenceAccess.accessed = new Date().getTime();\n\n        return sequenceAccess.sequence;\n    }\n\n    /**\n     * Reset all spatial edges of the graph nodes.\n     */\n    public resetSpatialEdges(): void {\n        let cachedKeys: string[] = Object.keys(this._cachedSpatialEdges);\n\n        for (let cachedKey of cachedKeys) {\n            let node: Node = this._cachedSpatialEdges[cachedKey];\n            node.resetSpatialEdges();\n\n            delete this._cachedSpatialEdges[cachedKey];\n        }\n    }\n\n    /**\n     * Reset the complete graph but keep the nodes corresponding\n     * to the supplied keys. All other nodes will be disposed.\n     *\n     * @param {Array<string>} keepKeys - Keys for nodes to keep\n     * in graph after reset.\n     */\n    public reset(keepKeys: string[]): void {\n        const nodes: Node[] = [];\n        for (const key of keepKeys) {\n            if (!this.hasNode(key)) {\n                throw new Error(`Node does not exist ${key}`);\n            }\n\n            const node: Node = this.getNode(key);\n            node.resetSequenceEdges();\n            node.resetSpatialEdges();\n            nodes.push(node);\n        }\n\n        for (let cachedKey of Object.keys(this._cachedNodes)) {\n            if (keepKeys.indexOf(cachedKey) !== -1) {\n                continue;\n            }\n\n            this._cachedNodes[cachedKey].node.dispose();\n            delete this._cachedNodes[cachedKey];\n        }\n\n        this._cachedNodeTiles = {};\n        this._cachedSpatialEdges = {};\n        this._cachedTiles = {};\n\n        this._cachingFill$ = {};\n        this._cachingFull$ = {};\n        this._cachingSequences$ = {};\n        this._cachingSpatialArea$ = {};\n        this._cachingTiles$ = {};\n\n        this._nodes = {};\n        this._nodeToTile = {};\n\n        this._preStored = {};\n\n        for (const node of nodes) {\n            this._nodes[node.key] = node;\n\n            const h: string = this._graphCalculator.encodeH(node.originalLatLon, this._tilePrecision);\n            this._preStore(h, node);\n        }\n\n        this._requiredNodeTiles = {};\n        this._requiredSpatialArea = {};\n\n        this._sequences = {};\n\n        this._nodeIndexTiles = {};\n        this._nodeIndex.clear();\n    }\n\n    /**\n     * Set the spatial node filter.\n     *\n     * @param {FilterExpression} filter - Filter expression to be applied\n     * when calculating spatial edges.\n     */\n    public setFilter(filter: FilterExpression): void {\n        this._filter = this._filterCreator.createFilter(filter);\n    }\n\n    /**\n     * Uncache the graph according to the graph configuration.\n     *\n     * @description Uncaches unused tiles, unused nodes and\n     * sequences according to the numbers specified in the\n     * graph configuration. Sequences does not have a direct\n     * reference to either tiles or nodes and may be uncached\n     * even if they are related to the nodes that should be kept.\n     *\n     * @param {Array<string>} keepKeys - Keys of nodes to keep in\n     * graph unrelated to last access. Tiles related to those keys\n     * will also be kept in graph.\n     */\n    public uncache(keepKeys: string[]): void {\n        let keysInUse: { [key: string]: boolean } = {};\n\n        this._addNewKeys(keysInUse, this._cachingFull$);\n        this._addNewKeys(keysInUse, this._cachingFill$);\n        this._addNewKeys(keysInUse, this._cachingTiles$);\n        this._addNewKeys(keysInUse, this._cachingSpatialArea$);\n        this._addNewKeys(keysInUse, this._requiredNodeTiles);\n        this._addNewKeys(keysInUse, this._requiredSpatialArea);\n\n        for (let key of keepKeys) {\n            if (key in keysInUse) {\n                continue;\n            }\n\n            keysInUse[key] = true;\n        }\n\n        let keepHs: { [h: string]: boolean } = {};\n        for (let key in keysInUse) {\n            if (!keysInUse.hasOwnProperty(key)) {\n                continue;\n            }\n\n            let node: Node = this._nodes[key];\n\n            let nodeHs: string[] = this._graphCalculator.encodeHs(node.latLon);\n            for (let nodeH of nodeHs) {\n                if (!(nodeH in keepHs)) {\n                    keepHs[nodeH] = true;\n                }\n            }\n        }\n\n        let potentialHs: [string, TileAccess][] = [];\n        for (let h in this._cachedTiles) {\n            if (!this._cachedTiles.hasOwnProperty(h) || h in keepHs) {\n                continue;\n            }\n\n            potentialHs.push([h, this._cachedTiles[h]]);\n        }\n\n        let uncacheHs: string[] = potentialHs\n            .sort(\n                (h1: [string, TileAccess], h2: [string, TileAccess]): number => {\n                    return h2[1].accessed - h1[1].accessed;\n                })\n            .slice(this._configuration.maxUnusedTiles)\n            .map(\n                (h: [string, TileAccess]): string => {\n                    return h[0];\n                });\n\n        for (let uncacheH of uncacheHs) {\n            this._uncacheTile(uncacheH);\n        }\n\n        let potentialNodes: NodeAccess[] = [];\n        for (let key in this._cachedNodes) {\n            if (!this._cachedNodes.hasOwnProperty(key) || key in keysInUse) {\n                continue;\n            }\n\n            potentialNodes.push(this._cachedNodes[key]);\n        }\n\n        let uncacheNodes: NodeAccess[] = potentialNodes\n            .sort(\n                (n1: NodeAccess, n2: NodeAccess): number => {\n                    return n2.accessed - n1.accessed;\n                })\n            .slice(this._configuration.maxUnusedNodes);\n\n        for (let nodeAccess of uncacheNodes) {\n            nodeAccess.node.uncache();\n            let key: string = nodeAccess.node.key;\n            delete this._cachedNodes[key];\n\n            if (key in this._cachedNodeTiles) {\n                delete this._cachedNodeTiles[key];\n            }\n\n            if (key in this._cachedSpatialEdges) {\n                delete this._cachedSpatialEdges[key];\n            }\n        }\n\n        let potentialSequences: SequenceAccess[] = [];\n        for (let sequenceKey in this._sequences) {\n            if (!this._sequences.hasOwnProperty(sequenceKey) ||\n                sequenceKey in this._cachingSequences$) {\n                continue;\n            }\n\n            potentialSequences.push(this._sequences[sequenceKey]);\n        }\n\n        let uncacheSequences: SequenceAccess[] = potentialSequences\n            .sort(\n                (s1: SequenceAccess, s2: SequenceAccess): number => {\n                    return s2.accessed - s1.accessed;\n                })\n            .slice(this._configuration.maxSequences);\n\n        for (let sequenceAccess of uncacheSequences) {\n            let sequenceKey: string = sequenceAccess.sequence.key;\n\n            delete this._sequences[sequenceKey];\n\n            sequenceAccess.sequence.dispose();\n        }\n    }\n\n    private _addNewKeys<T>(keys: { [key: string]: boolean }, dict: { [key: string]: T }): void {\n        for (let key in dict) {\n            if (!dict.hasOwnProperty(key) || !this.hasNode(key)) {\n                continue;\n            }\n\n            if (!(key in keys)) {\n                keys[key] = true;\n            }\n        }\n    }\n\n    private _cacheSequence$(sequenceKey: string): Observable<Graph> {\n        if (sequenceKey in this._cachingSequences$) {\n            return this._cachingSequences$[sequenceKey];\n        }\n\n        this._cachingSequences$[sequenceKey] = this._apiV3.sequenceByKey$([sequenceKey])\n            .do(\n                (sequenceByKey: { [sequenceKey: string]: ISequence }): void => {\n                    if (!(sequenceKey in this._sequences)) {\n                        this._sequences[sequenceKey] = {\n                            accessed: new Date().getTime(),\n                            sequence: new Sequence(sequenceByKey[sequenceKey]),\n                        };\n                    }\n\n                    delete this._cachingSequences$[sequenceKey];\n                })\n            .map(\n                (sequenceByKey: { [sequenceKey: string]: ISequence }): Graph => {\n                    return this;\n                })\n            .finally(\n                (): void => {\n                    if (sequenceKey in this._cachingSequences$) {\n                        delete this._cachingSequences$[sequenceKey];\n                    }\n\n                    this._changed$.next(this);\n                })\n            .publish()\n            .refCount();\n\n        return this._cachingSequences$[sequenceKey];\n    }\n\n    private _makeFull(node: Node, fillNode: IFillNode): void {\n        if (fillNode.calt == null) {\n            fillNode.calt = this._defaultAlt;\n        }\n\n        if (fillNode.c_rotation == null) {\n            fillNode.c_rotation = this._graphCalculator.rotationFromCompass(fillNode.ca, fillNode.orientation);\n        }\n\n        node.makeFull(fillNode);\n    }\n\n    private _preStore(h: string, node: Node): void {\n        if (!(h in this._preStored)) {\n            this._preStored[h] = {};\n        }\n\n        this._preStored[h][node.key] = node;\n    }\n\n    private _removeFromPreStore(h: string): { [key: string]: Node } {\n        let preStored: { [key: string]: Node } = null;\n\n        if (h in this._preStored) {\n            preStored = this._preStored[h];\n            delete this._preStored[h];\n        }\n\n        return preStored;\n    }\n\n    private _setNode(node: Node): void {\n        let key: string = node.key;\n\n        if (this.hasNode(key)) {\n            throw new GraphMapillaryError(`Node already exist (${key}).`);\n        }\n\n        this._nodes[key] = node;\n    }\n\n    private _uncacheTile(h: string): void {\n        for (let node of this._cachedTiles[h].nodes) {\n            let key: string = node.key;\n\n            delete this._nodes[key];\n            delete this._nodeToTile[key];\n\n            if (key in this._cachedNodes) {\n                delete this._cachedNodes[key];\n            }\n\n            if (key in this._cachedNodeTiles) {\n                delete this._cachedNodeTiles[key];\n            }\n\n            if (key in this._cachedSpatialEdges) {\n                delete this._cachedSpatialEdges[key];\n            }\n\n            node.dispose();\n        }\n\n        for (let nodeIndexItem of this._nodeIndexTiles[h]) {\n            this._nodeIndex.remove(nodeIndexItem);\n        }\n\n        delete this._nodeIndexTiles[h];\n        delete this._cachedTiles[h];\n    }\n\n    private _updateCachedTileAccess(key: string, accessed: number): void {\n        if (key in this._nodeToTile) {\n            this._cachedTiles[this._nodeToTile[key]].accessed = accessed;\n        }\n    }\n\n    private _updateCachedNodeAccess(key: string, accessed: number): void {\n        if (key in this._cachedNodes) {\n            this._cachedNodes[key].accessed = accessed;\n        }\n    }\n}\n\nexport default Graph;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as _ from \"underscore\";\nimport * as vd from \"virtual-dom\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/operator/combineLatest\";\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/pluck\";\nimport \"rxjs/add/operator/scan\";\n\nimport {ISize, IVNodeHash, RenderMode, RenderService} from \"../Render\";\nimport {IFrame} from \"../State\";\n\ninterface INodePatch {\n    vnode: vd.VNode;\n    vpatch: vd.VPatch[];\n}\n\ninterface IVNodeHashes {\n    [name: string]: vd.VNode;\n}\n\ninterface IOffset {\n    bottom: number;\n    left: number;\n    right: number;\n    top: number;\n}\n\ninterface IAdaptive {\n    elementHeight: number;\n    elementWidth: number;\n    imageAspect: number;\n    renderMode: RenderMode;\n}\n\ninterface IAdaptiveOperation {\n    (adaptive: IAdaptive): IAdaptive;\n}\n\nexport class DOMRenderer {\n    private _renderService: RenderService;\n    private _currentFrame$: Observable<IFrame>;\n\n    private _adaptiveOperation$: Subject<IAdaptiveOperation> = new Subject<IAdaptiveOperation>();\n    private _offset$: Observable<IOffset>;\n\n    private _element$: Observable<Element>;\n    private _vPatch$: Observable<vd.VPatch[]>;\n    private _vNode$: Observable<vd.VNode>;\n    private _render$: Subject<IVNodeHash> = new Subject<IVNodeHash>();\n    private _renderAdaptive$: Subject<IVNodeHash> = new Subject<IVNodeHash>();\n\n    constructor (element: HTMLElement, renderService: RenderService, currentFrame$: Observable<IFrame>) {\n        this._renderService = renderService;\n        this._currentFrame$ = currentFrame$;\n\n        let rootNode: Element = vd.create(vd.h(\"div.domRenderer\", []));\n        element.appendChild(rootNode);\n\n        this._offset$ = this._adaptiveOperation$\n            .scan(\n                (adaptive: IAdaptive, operation: IAdaptiveOperation): IAdaptive => {\n                    return operation(adaptive);\n                },\n                {\n                    elementHeight: element.offsetHeight,\n                    elementWidth: element.offsetWidth,\n                    imageAspect: 0,\n                    renderMode: RenderMode.Fill,\n                })\n            .filter(\n                (adaptive: IAdaptive): boolean => {\n                    return adaptive.imageAspect > 0 && adaptive.elementWidth > 0 && adaptive.elementHeight > 0;\n                })\n            .map(\n                (adaptive: IAdaptive): IOffset => {\n                    let elementAspect: number = adaptive.elementWidth / adaptive.elementHeight;\n                    let ratio: number = adaptive.imageAspect / elementAspect;\n\n                    let verticalOffset: number = 0;\n                    let horizontalOffset: number = 0;\n\n                    if (adaptive.renderMode === RenderMode.Letterbox) {\n                        if (adaptive.imageAspect > elementAspect) {\n                            verticalOffset = adaptive.elementHeight * (1 - 1 / ratio) / 2;\n                        } else {\n                            horizontalOffset = adaptive.elementWidth * (1 - ratio) / 2;\n                        }\n                    } else {\n                        if (adaptive.imageAspect > elementAspect) {\n                            horizontalOffset = -adaptive.elementWidth * (ratio - 1) / 2;\n                        } else {\n                            verticalOffset = -adaptive.elementHeight * (1 / ratio - 1) / 2;\n                        }\n                    }\n\n                    return {\n                        bottom: verticalOffset,\n                        left: horizontalOffset,\n                        right: horizontalOffset,\n                        top: verticalOffset,\n                    };\n                });\n\n        this._currentFrame$\n            .filter(\n                (frame: IFrame): boolean => {\n                    return frame.state.currentNode != null;\n                })\n            .distinctUntilChanged(\n                (k1: string, k2: string): boolean => {\n                    return k1 === k2;\n                },\n                (frame: IFrame): string => {\n                    return frame.state.currentNode.key;\n                })\n            .map(\n                (frame: IFrame): number => {\n                    return frame.state.currentTransform.basicAspect;\n                })\n            .map(\n                 (aspect: number): IAdaptiveOperation => {\n                    return (adaptive: IAdaptive): IAdaptive => {\n                        adaptive.imageAspect = aspect;\n\n                        return adaptive;\n                    };\n                })\n            .subscribe(this._adaptiveOperation$);\n\n        this._renderAdaptive$\n            .scan(\n                (vNodeHashes: IVNodeHashes, vNodeHash: IVNodeHash): IVNodeHashes => {\n                    if (vNodeHash.vnode == null) {\n                        delete vNodeHashes[vNodeHash.name];\n                    } else {\n                        vNodeHashes[vNodeHash.name] = vNodeHash.vnode;\n                    }\n                    return vNodeHashes;\n                },\n                {})\n            .combineLatest(this._offset$)\n            .map(\n                (vo: [IVNodeHashes, IOffset]): IVNodeHash => {\n                    let vNodes: vd.VNode[] = _.values(vo[0]);\n                    let offset: IOffset = vo[1];\n\n                    let properties: vd.createProperties = {\n                        style: {\n                            bottom: offset.bottom + \"px\",\n                            left: offset.left + \"px\",\n                            \"pointer-events\": \"none\",\n                            position: \"absolute\",\n                            right: offset.right + \"px\",\n                            top: offset.top + \"px\",\n                        },\n                    };\n\n                    return {\n                        name: \"adaptiveDomRenderer\",\n                        vnode: vd.h(\"div.adaptiveDomRenderer\", properties, vNodes),\n                    };\n                })\n            .subscribe(this._render$);\n\n        this._vNode$ = this._render$\n            .scan(\n                (vNodeHashes: IVNodeHashes, vNodeHash: IVNodeHash): IVNodeHashes => {\n                    if (vNodeHash.vnode == null) {\n                        delete vNodeHashes[vNodeHash.name];\n                    } else {\n                        vNodeHashes[vNodeHash.name] = vNodeHash.vnode;\n                    }\n\n                    return vNodeHashes;\n                },\n                {})\n            .map(\n                (vNodeHashes: IVNodeHashes): vd.VNode => {\n                    let vNodes: vd.VNode[] = _.values(vNodeHashes);\n                    return vd.h(\"div.domRenderer\", vNodes);\n                });\n\n        this._vPatch$ = this._vNode$\n            .scan(\n                (nodePatch: INodePatch, vNode: vd.VNode): INodePatch => {\n                    nodePatch.vpatch = vd.diff(nodePatch.vnode, vNode);\n                    nodePatch.vnode = vNode;\n                    return nodePatch;\n                },\n                {vnode: vd.h(\"div.domRenderer\", []), vpatch: null})\n            .pluck<INodePatch, vd.VPatch[]>(\"vpatch\");\n\n        this._element$ = this._vPatch$\n            .scan(\n                (oldElement: Element, vPatch: vd.VPatch[]): Element => {\n                    return vd.patch(oldElement, vPatch);\n                },\n                rootNode)\n            .publishReplay(1)\n            .refCount();\n\n        this._element$.subscribe(() => { /*noop*/ });\n\n        this._renderService.size$\n            .map(\n                (size: ISize): IAdaptiveOperation => {\n                    return (adaptive: IAdaptive): IAdaptive => {\n                        adaptive.elementWidth = size.width;\n                        adaptive.elementHeight = size.height;\n\n                        return adaptive;\n                    };\n                })\n            .subscribe(this._adaptiveOperation$);\n\n        this._renderService.renderMode$\n            .map(\n                (renderMode: RenderMode): IAdaptiveOperation => {\n                    return (adaptive: IAdaptive): IAdaptive => {\n                        adaptive.renderMode = renderMode;\n\n                        return adaptive;\n                    };\n                })\n            .subscribe(this._adaptiveOperation$);\n    }\n\n    public get element$(): Observable<Element> {\n        return this._element$;\n    }\n\n    public get render$(): Subject<IVNodeHash> {\n        return this._render$;\n    }\n\n    public get renderAdaptive$(): Subject<IVNodeHash> {\n        return this._renderAdaptive$;\n    }\n\n    public clear(name: string): void {\n        this._renderAdaptive$.next({name: name, vnode: null});\n        this._render$.next({name: name, vnode: null});\n    }\n}\n\nexport default DOMRenderer;\n",
     "export enum GLRenderStage {\n    Background,\n    Foreground\n}\n\nexport default GLRenderStage;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport \"rxjs/add/observable/combineLatest\";\n\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/first\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/merge\";\nimport \"rxjs/add/operator/mergeMap\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/share\";\nimport \"rxjs/add/operator/startWith\";\n\nimport {\n    GLRenderStage,\n    IGLRenderFunction,\n    IGLRender,\n    IGLRenderHash,\n    RenderCamera,\n    RenderService,\n    ISize,\n} from \"../Render\";\n\ninterface IGLRenderer {\n    needsRender: boolean;\n    renderer: THREE.WebGLRenderer;\n}\n\ninterface IRenderCamera {\n    frameId: number;\n    needsRender: boolean;\n    perspective: THREE.PerspectiveCamera;\n}\n\ninterface IGLRenderHashes {\n    [name: string]: IGLRender;\n}\n\ninterface IEraser {\n    needsRender: boolean;\n}\n\ninterface IGLRendererOperation {\n    (renderer: IGLRenderer): IGLRenderer;\n}\n\ninterface IRenderCameraOperation {\n    (camera: IRenderCamera): IRenderCamera;\n}\n\ninterface IGLRenderHashesOperation extends Function {\n    (hashes: IGLRenderHashes): IGLRenderHashes;\n}\n\ninterface IEraserOperation {\n    (eraser: IEraser): IEraser;\n}\n\ninterface ICombination {\n    camera: IRenderCamera;\n    eraser: IEraser;\n    renderer: IGLRenderer;\n    renders: IGLRender[];\n}\n\nexport class GLRenderer {\n    private _renderService: RenderService;\n\n    private _renderFrame$: Subject<RenderCamera> = new Subject<RenderCamera>();\n\n    private _renderCameraOperation$: Subject<IRenderCameraOperation> = new Subject<IRenderCameraOperation>();\n    private _renderCamera$: Observable<IRenderCamera>;\n\n    private _render$: Subject<IGLRenderHash> = new Subject<IGLRenderHash>();\n    private _clear$: Subject<string> = new Subject<string>();\n    private _renderOperation$: Subject<IGLRenderHashesOperation> = new Subject<IGLRenderHashesOperation>();\n    private _renderCollection$: Observable<IGLRenderHashes>;\n\n    private _rendererOperation$: Subject<IGLRendererOperation> = new Subject<IGLRendererOperation>();\n    private _renderer$: Observable<IGLRenderer>;\n\n    private _eraserOperation$: Subject<IEraserOperation> = new Subject<IEraserOperation>();\n    private _eraser$: Observable<IEraser>;\n\n    private _webGLRenderer$: Observable<THREE.WebGLRenderer>;\n\n    private _renderFrameSubscription: Subscription;\n\n    constructor (canvasContainer: HTMLElement, renderService: RenderService) {\n        this._renderService = renderService;\n\n        this._renderer$ = this._rendererOperation$\n            .scan(\n                (renderer: IGLRenderer, operation: IGLRendererOperation): IGLRenderer => {\n                    return operation(renderer);\n                },\n                { needsRender: false, renderer: null });\n\n        this._renderCollection$ = this._renderOperation$\n            .scan(\n                (hashes: IGLRenderHashes, operation: IGLRenderHashesOperation): IGLRenderHashes => {\n                    return operation(hashes);\n                },\n                {})\n            .share();\n\n        this._renderCamera$ = this._renderCameraOperation$\n            .scan(\n                (rc: IRenderCamera, operation: IRenderCameraOperation): IRenderCamera => {\n                    return operation(rc);\n                },\n                { frameId: -1, needsRender: false, perspective: null });\n\n        this._eraser$ = this._eraserOperation$\n            .startWith(\n                (eraser: IEraser): IEraser => {\n                    return eraser;\n                })\n            .scan(\n                (eraser: IEraser, operation: IEraserOperation): IEraser => {\n                    return operation(eraser);\n                },\n                { needsRender: false });\n\n        Observable\n            .combineLatest<ICombination>(\n                [this._renderer$, this._renderCollection$, this._renderCamera$, this._eraser$],\n                (renderer: IGLRenderer, hashes: IGLRenderHashes, rc: IRenderCamera, eraser: IEraser): ICombination => {\n                    let renders: IGLRender[] = Object.keys(hashes)\n                        .map((key: string): IGLRender => {\n                            return hashes[key];\n                        });\n\n                    return { camera: rc, eraser: eraser, renderer: renderer, renders: renders };\n                })\n            .filter(\n                (co: ICombination): boolean => {\n                    let needsRender: boolean =\n                        co.renderer.needsRender ||\n                        co.camera.needsRender ||\n                        co.eraser.needsRender;\n\n                    let frameId: number = co.camera.frameId;\n\n                    for (let render of co.renders) {\n                        if (render.frameId !== frameId) {\n                            return false;\n                        }\n\n                        needsRender = needsRender || render.needsRender;\n                    }\n\n                    return needsRender;\n                })\n            .distinctUntilChanged(\n                (n1: number, n2: number): boolean => {\n                    return n1 === n2;\n                },\n                (co: ICombination): number => {\n                    return co.eraser.needsRender ? -1 : co.camera.frameId;\n                })\n            .subscribe(\n                (co: ICombination): void => {\n                    co.renderer.needsRender = false;\n                    co.camera.needsRender = false;\n                    co.eraser.needsRender = false;\n\n                    let perspectiveCamera: THREE.PerspectiveCamera = co.camera.perspective;\n\n                    let backgroundRenders: IGLRenderFunction[] = [];\n                    let foregroundRenders: IGLRenderFunction[] = [];\n\n                    for (let render of co.renders) {\n                        if (render.stage === GLRenderStage.Background) {\n                            backgroundRenders.push(render.render);\n                        } else if (render.stage === GLRenderStage.Foreground) {\n                            foregroundRenders.push(render.render);\n                        }\n                    }\n\n                    let renderer: THREE.WebGLRenderer = co.renderer.renderer;\n\n                    renderer.clear();\n\n                    for (let render of backgroundRenders) {\n                        render(perspectiveCamera, renderer);\n                    }\n\n                    renderer.clearDepth();\n\n                    for (let render of foregroundRenders) {\n                        render(perspectiveCamera, renderer);\n                    }\n                });\n\n        this._renderFrame$\n            .map(\n                (rc: RenderCamera): IRenderCameraOperation => {\n                    return (irc: IRenderCamera): IRenderCamera => {\n                        irc.frameId = rc.frameId;\n                        irc.perspective = rc.perspective;\n\n                        if (rc.changed === true) {\n                            irc.needsRender = true;\n                        }\n\n                        return irc;\n                    };\n                })\n            .subscribe(this._renderCameraOperation$);\n\n        this._renderFrameSubscribe();\n\n        let renderHash$: Observable<IGLRenderHashesOperation> = this._render$\n            .map(\n                (hash: IGLRenderHash) => {\n                    return (hashes: IGLRenderHashes): IGLRenderHashes => {\n                        hashes[hash.name] = hash.render;\n\n                        return hashes;\n                    };\n                });\n\n        let clearHash$: Observable<IGLRenderHashesOperation> = this._clear$\n            .map(\n                (name: string) => {\n                    return (hashes: IGLRenderHashes): IGLRenderHashes => {\n                        delete hashes[name];\n\n                        return hashes;\n                    };\n                });\n\n        Observable\n            .merge(renderHash$, clearHash$)\n            .subscribe(this._renderOperation$);\n\n        this._webGLRenderer$ = this._render$\n            .first()\n            .map(\n                (hash: IGLRenderHash): THREE.WebGLRenderer => {\n                    let element: HTMLElement = renderService.element;\n\n                    let webGLRenderer: THREE.WebGLRenderer = new THREE.WebGLRenderer();\n                    webGLRenderer.setPixelRatio(window.devicePixelRatio);\n                    webGLRenderer.setSize(element.offsetWidth, element.offsetHeight);\n                    webGLRenderer.setClearColor(new THREE.Color(0x202020), 1.0);\n                    webGLRenderer.autoClear = false;\n                    webGLRenderer.domElement.style.position = \"absolute\";\n\n                    canvasContainer.appendChild(webGLRenderer.domElement);\n\n                    return webGLRenderer;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._webGLRenderer$.subscribe(() => { /*noop*/ });\n\n        let createRenderer$: Observable<IGLRendererOperation> = this._webGLRenderer$\n            .first()\n            .map(\n                (webGLRenderer: THREE.WebGLRenderer): IGLRendererOperation => {\n                    return (renderer: IGLRenderer): IGLRenderer => {\n                        renderer.needsRender = true;\n                        renderer.renderer = webGLRenderer;\n\n                        return renderer;\n                    };\n                });\n\n        let resizeRenderer$: Observable<IGLRendererOperation> = this._renderService.size$\n            .map(\n                (size: ISize): IGLRendererOperation => {\n                    return (renderer: IGLRenderer): IGLRenderer => {\n                        if (renderer.renderer == null) {\n                            return renderer;\n                        }\n\n                        renderer.renderer.setSize(size.width, size.height);\n                        renderer.needsRender = true;\n\n                        return renderer;\n                    };\n                });\n\n        let clearRenderer$: Observable<IGLRendererOperation> = this._clear$\n            .map(\n                (name: string) => {\n                    return (renderer: IGLRenderer): IGLRenderer => {\n                        if (renderer.renderer == null) {\n                            return renderer;\n                        }\n\n                        renderer.needsRender = true;\n\n                        return renderer;\n                    };\n                });\n\n        Observable\n            .merge(createRenderer$, resizeRenderer$, clearRenderer$)\n            .subscribe(this._rendererOperation$);\n\n        let renderCollectionEmpty$: Observable<IGLRenderHashes> = this._renderCollection$\n            .filter(\n                (hashes: IGLRenderHashes): boolean => {\n                    return Object.keys(hashes).length === 0;\n                })\n            .share();\n\n        renderCollectionEmpty$\n            .subscribe(\n                (hashes: IGLRenderHashes): void => {\n                    if (this._renderFrameSubscription == null) {\n                        return;\n                    }\n\n                    this._renderFrameSubscription.unsubscribe();\n                    this._renderFrameSubscription = null;\n\n                    this._renderFrameSubscribe();\n                });\n\n        renderCollectionEmpty$\n            .map(\n                (hashes: IGLRenderHashes): IEraserOperation => {\n                    return (eraser: IEraser): IEraser => {\n                        eraser.needsRender = true;\n\n                        return eraser;\n                    };\n                })\n            .subscribe(this._eraserOperation$);\n    }\n\n    public get render$(): Subject<IGLRenderHash> {\n        return this._render$;\n    }\n\n    public get webGLRenderer$(): Observable<THREE.WebGLRenderer> {\n        return this._webGLRenderer$;\n    }\n\n    public clear(name: string): void {\n        this._clear$.next(name);\n    }\n\n    private _renderFrameSubscribe(): void {\n        this._render$\n            .first()\n            .map(\n                (renderHash: IGLRenderHash): IRenderCameraOperation => {\n                    return (irc: IRenderCamera): IRenderCamera => {\n                        irc.needsRender = true;\n\n                        return irc;\n                    };\n                })\n             .subscribe(\n                (operation: IRenderCameraOperation): void => {\n                    this._renderCameraOperation$.next(operation);\n                });\n\n        this._renderFrameSubscription = this._render$\n            .first()\n            .mergeMap(\n                (hash: IGLRenderHash): Observable<RenderCamera> => {\n                    return this._renderService.renderCameraFrame$;\n                })\n            .subscribe(this._renderFrame$);\n    }\n}\n\nexport default GLRenderer;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as _ from \"underscore\";\nimport * as vd from \"virtual-dom\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/operator/combineLatest\";\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/pluck\";\nimport \"rxjs/add/operator/scan\";\n\nimport {ISize, IVNodeHash, RenderMode, RenderService} from \"../Render\";\nimport {IFrame} from \"../State\";\n\ninterface INodePatch {\n    vnode: vd.VNode;\n    vpatch: vd.VPatch[];\n}\n\ninterface IVNodeHashes {\n    [name: string]: vd.VNode;\n}\n\ninterface IOffset {\n    bottom: number;\n    left: number;\n    right: number;\n    top: number;\n}\n\ninterface IAdaptive {\n    elementHeight: number;\n    elementWidth: number;\n    imageAspect: number;\n    renderMode: RenderMode;\n}\n\ninterface IAdaptiveOperation {\n    (adaptive: IAdaptive): IAdaptive;\n}\n\nexport class DOMRenderer {\n    private _renderService: RenderService;\n    private _currentFrame$: Observable<IFrame>;\n\n    private _adaptiveOperation$: Subject<IAdaptiveOperation> = new Subject<IAdaptiveOperation>();\n    private _offset$: Observable<IOffset>;\n\n    private _element$: Observable<Element>;\n    private _vPatch$: Observable<vd.VPatch[]>;\n    private _vNode$: Observable<vd.VNode>;\n    private _render$: Subject<IVNodeHash> = new Subject<IVNodeHash>();\n    private _renderAdaptive$: Subject<IVNodeHash> = new Subject<IVNodeHash>();\n\n    constructor (element: HTMLElement, renderService: RenderService, currentFrame$: Observable<IFrame>) {\n        this._renderService = renderService;\n        this._currentFrame$ = currentFrame$;\n\n        let rootNode: Element = vd.create(vd.h(\"div.domRenderer\", []));\n        element.appendChild(rootNode);\n\n        this._offset$ = this._adaptiveOperation$\n            .scan(\n                (adaptive: IAdaptive, operation: IAdaptiveOperation): IAdaptive => {\n                    return operation(adaptive);\n                },\n                {\n                    elementHeight: element.offsetHeight,\n                    elementWidth: element.offsetWidth,\n                    imageAspect: 0,\n                    renderMode: RenderMode.Fill,\n                })\n            .filter(\n                (adaptive: IAdaptive): boolean => {\n                    return adaptive.imageAspect > 0 && adaptive.elementWidth > 0 && adaptive.elementHeight > 0;\n                })\n            .map(\n                (adaptive: IAdaptive): IOffset => {\n                    let elementAspect: number = adaptive.elementWidth / adaptive.elementHeight;\n                    let ratio: number = adaptive.imageAspect / elementAspect;\n\n                    let verticalOffset: number = 0;\n                    let horizontalOffset: number = 0;\n\n                    if (adaptive.renderMode === RenderMode.Letterbox) {\n                        if (adaptive.imageAspect > elementAspect) {\n                            verticalOffset = adaptive.elementHeight * (1 - 1 / ratio) / 2;\n                        } else {\n                            horizontalOffset = adaptive.elementWidth * (1 - ratio) / 2;\n                        }\n                    } else {\n                        if (adaptive.imageAspect > elementAspect) {\n                            horizontalOffset = -adaptive.elementWidth * (ratio - 1) / 2;\n                        } else {\n                            verticalOffset = -adaptive.elementHeight * (1 / ratio - 1) / 2;\n                        }\n                    }\n\n                    return {\n                        bottom: verticalOffset,\n                        left: horizontalOffset,\n                        right: horizontalOffset,\n                        top: verticalOffset,\n                    };\n                });\n\n        this._currentFrame$\n            .filter(\n                (frame: IFrame): boolean => {\n                    return frame.state.currentNode != null;\n                })\n            .distinctUntilChanged(\n                (k1: string, k2: string): boolean => {\n                    return k1 === k2;\n                },\n                (frame: IFrame): string => {\n                    return frame.state.currentNode.key;\n                })\n            .map(\n                (frame: IFrame): number => {\n                    return frame.state.currentTransform.basicAspect;\n                })\n            .map(\n                 (aspect: number): IAdaptiveOperation => {\n                    return (adaptive: IAdaptive): IAdaptive => {\n                        adaptive.imageAspect = aspect;\n\n                        return adaptive;\n                    };\n                })\n            .subscribe(this._adaptiveOperation$);\n\n        this._renderAdaptive$\n            .scan(\n                (vNodeHashes: IVNodeHashes, vNodeHash: IVNodeHash): IVNodeHashes => {\n                    if (vNodeHash.vnode == null) {\n                        delete vNodeHashes[vNodeHash.name];\n                    } else {\n                        vNodeHashes[vNodeHash.name] = vNodeHash.vnode;\n                    }\n                    return vNodeHashes;\n                },\n                {})\n            .combineLatest(this._offset$)\n            .map(\n                (vo: [IVNodeHashes, IOffset]): IVNodeHash => {\n                    let vNodes: vd.VNode[] = _.values(vo[0]);\n                    let offset: IOffset = vo[1];\n\n                    let properties: vd.createProperties = {\n                        style: {\n                            bottom: offset.bottom + \"px\",\n                            left: offset.left + \"px\",\n                            \"pointer-events\": \"none\",\n                            position: \"absolute\",\n                            right: offset.right + \"px\",\n                            top: offset.top + \"px\",\n                        },\n                    };\n\n                    return {\n                        name: \"adaptiveDomRenderer\",\n                        vnode: vd.h(\"div.adaptiveDomRenderer\", properties, vNodes),\n                    };\n                })\n            .subscribe(this._render$);\n\n        this._vNode$ = this._render$\n            .scan(\n                (vNodeHashes: IVNodeHashes, vNodeHash: IVNodeHash): IVNodeHashes => {\n                    if (vNodeHash.vnode == null) {\n                        delete vNodeHashes[vNodeHash.name];\n                    } else {\n                        vNodeHashes[vNodeHash.name] = vNodeHash.vnode;\n                    }\n\n                    return vNodeHashes;\n                },\n                {})\n            .map(\n                (vNodeHashes: IVNodeHashes): vd.VNode => {\n                    let vNodes: vd.VNode[] = _.values(vNodeHashes);\n                    return vd.h(\"div.domRenderer\", vNodes);\n                });\n\n        this._vPatch$ = this._vNode$\n            .scan(\n                (nodePatch: INodePatch, vNode: vd.VNode): INodePatch => {\n                    nodePatch.vpatch = vd.diff(nodePatch.vnode, vNode);\n                    nodePatch.vnode = vNode;\n                    return nodePatch;\n                },\n                {vnode: vd.h(\"div.domRenderer\", []), vpatch: null})\n            .pluck<INodePatch, vd.VPatch[]>(\"vpatch\");\n\n        this._element$ = this._vPatch$\n            .scan(\n                (oldElement: Element, vPatch: vd.VPatch[]): Element => {\n                    return vd.patch(oldElement, vPatch);\n                },\n                rootNode)\n            .publishReplay(1)\n            .refCount();\n\n        this._element$.subscribe(() => { /*noop*/ });\n\n        this._renderService.size$\n            .map(\n                (size: ISize): IAdaptiveOperation => {\n                    return (adaptive: IAdaptive): IAdaptive => {\n                        adaptive.elementWidth = size.width;\n                        adaptive.elementHeight = size.height;\n\n                        return adaptive;\n                    };\n                })\n            .subscribe(this._adaptiveOperation$);\n\n        this._renderService.renderMode$\n            .map(\n                (renderMode: RenderMode): IAdaptiveOperation => {\n                    return (adaptive: IAdaptive): IAdaptive => {\n                        adaptive.renderMode = renderMode;\n\n                        return adaptive;\n                    };\n                })\n            .subscribe(this._adaptiveOperation$);\n    }\n\n    public get element$(): Observable<Element> {\n        return this._element$;\n    }\n\n    public get render$(): Subject<IVNodeHash> {\n        return this._render$;\n    }\n\n    public get renderAdaptive$(): Subject<IVNodeHash> {\n        return this._renderAdaptive$;\n    }\n\n    public clear(name: string): void {\n        this._renderAdaptive$.next({name: name, vnode: null});\n        this._render$.next({name: name, vnode: null});\n    }\n}\n\nexport default DOMRenderer;\n",
     "export enum GLRenderStage {\n    Background,\n    Foreground\n}\n\nexport default GLRenderStage;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport \"rxjs/add/observable/combineLatest\";\n\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/first\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/merge\";\nimport \"rxjs/add/operator/mergeMap\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/share\";\nimport \"rxjs/add/operator/startWith\";\n\nimport {\n    GLRenderStage,\n    IGLRenderFunction,\n    IGLRender,\n    IGLRenderHash,\n    RenderCamera,\n    RenderService,\n    ISize,\n} from \"../Render\";\n\ninterface IGLRenderer {\n    needsRender: boolean;\n    renderer: THREE.WebGLRenderer;\n}\n\ninterface IRenderCamera {\n    frameId: number;\n    needsRender: boolean;\n    perspective: THREE.PerspectiveCamera;\n}\n\ninterface IGLRenderHashes {\n    [name: string]: IGLRender;\n}\n\ninterface IEraser {\n    needsRender: boolean;\n}\n\ninterface IGLRendererOperation {\n    (renderer: IGLRenderer): IGLRenderer;\n}\n\ninterface IRenderCameraOperation {\n    (camera: IRenderCamera): IRenderCamera;\n}\n\ninterface IGLRenderHashesOperation extends Function {\n    (hashes: IGLRenderHashes): IGLRenderHashes;\n}\n\ninterface IEraserOperation {\n    (eraser: IEraser): IEraser;\n}\n\ninterface ICombination {\n    camera: IRenderCamera;\n    eraser: IEraser;\n    renderer: IGLRenderer;\n    renders: IGLRender[];\n}\n\nexport class GLRenderer {\n    private _renderService: RenderService;\n\n    private _renderFrame$: Subject<RenderCamera> = new Subject<RenderCamera>();\n\n    private _renderCameraOperation$: Subject<IRenderCameraOperation> = new Subject<IRenderCameraOperation>();\n    private _renderCamera$: Observable<IRenderCamera>;\n\n    private _render$: Subject<IGLRenderHash> = new Subject<IGLRenderHash>();\n    private _clear$: Subject<string> = new Subject<string>();\n    private _renderOperation$: Subject<IGLRenderHashesOperation> = new Subject<IGLRenderHashesOperation>();\n    private _renderCollection$: Observable<IGLRenderHashes>;\n\n    private _rendererOperation$: Subject<IGLRendererOperation> = new Subject<IGLRendererOperation>();\n    private _renderer$: Observable<IGLRenderer>;\n\n    private _eraserOperation$: Subject<IEraserOperation> = new Subject<IEraserOperation>();\n    private _eraser$: Observable<IEraser>;\n\n    private _webGLRenderer$: Observable<THREE.WebGLRenderer>;\n\n    private _renderFrameSubscription: Subscription;\n\n    constructor (canvasContainer: HTMLElement, renderService: RenderService) {\n        this._renderService = renderService;\n\n        this._renderer$ = this._rendererOperation$\n            .scan(\n                (renderer: IGLRenderer, operation: IGLRendererOperation): IGLRenderer => {\n                    return operation(renderer);\n                },\n                { needsRender: false, renderer: null });\n\n        this._renderCollection$ = this._renderOperation$\n            .scan(\n                (hashes: IGLRenderHashes, operation: IGLRenderHashesOperation): IGLRenderHashes => {\n                    return operation(hashes);\n                },\n                {})\n            .share();\n\n        this._renderCamera$ = this._renderCameraOperation$\n            .scan(\n                (rc: IRenderCamera, operation: IRenderCameraOperation): IRenderCamera => {\n                    return operation(rc);\n                },\n                { frameId: -1, needsRender: false, perspective: null });\n\n        this._eraser$ = this._eraserOperation$\n            .startWith(\n                (eraser: IEraser): IEraser => {\n                    return eraser;\n                })\n            .scan(\n                (eraser: IEraser, operation: IEraserOperation): IEraser => {\n                    return operation(eraser);\n                },\n                { needsRender: false });\n\n        Observable\n            .combineLatest<ICombination>(\n                [this._renderer$, this._renderCollection$, this._renderCamera$, this._eraser$],\n                (renderer: IGLRenderer, hashes: IGLRenderHashes, rc: IRenderCamera, eraser: IEraser): ICombination => {\n                    let renders: IGLRender[] = Object.keys(hashes)\n                        .map((key: string): IGLRender => {\n                            return hashes[key];\n                        });\n\n                    return { camera: rc, eraser: eraser, renderer: renderer, renders: renders };\n                })\n            .filter(\n                (co: ICombination): boolean => {\n                    let needsRender: boolean =\n                        co.renderer.needsRender ||\n                        co.camera.needsRender ||\n                        co.eraser.needsRender;\n\n                    let frameId: number = co.camera.frameId;\n\n                    for (let render of co.renders) {\n                        if (render.frameId !== frameId) {\n                            return false;\n                        }\n\n                        needsRender = needsRender || render.needsRender;\n                    }\n\n                    return needsRender;\n                })\n            .distinctUntilChanged(\n                (n1: number, n2: number): boolean => {\n                    return n1 === n2;\n                },\n                (co: ICombination): number => {\n                    return co.eraser.needsRender ? -1 : co.camera.frameId;\n                })\n            .subscribe(\n                (co: ICombination): void => {\n                    co.renderer.needsRender = false;\n                    co.camera.needsRender = false;\n                    co.eraser.needsRender = false;\n\n                    let perspectiveCamera: THREE.PerspectiveCamera = co.camera.perspective;\n\n                    let backgroundRenders: IGLRenderFunction[] = [];\n                    let foregroundRenders: IGLRenderFunction[] = [];\n\n                    for (let render of co.renders) {\n                        if (render.stage === GLRenderStage.Background) {\n                            backgroundRenders.push(render.render);\n                        } else if (render.stage === GLRenderStage.Foreground) {\n                            foregroundRenders.push(render.render);\n                        }\n                    }\n\n                    let renderer: THREE.WebGLRenderer = co.renderer.renderer;\n\n                    renderer.clear();\n\n                    for (let render of backgroundRenders) {\n                        render(perspectiveCamera, renderer);\n                    }\n\n                    renderer.clearDepth();\n\n                    for (let render of foregroundRenders) {\n                        render(perspectiveCamera, renderer);\n                    }\n                });\n\n        this._renderFrame$\n            .map(\n                (rc: RenderCamera): IRenderCameraOperation => {\n                    return (irc: IRenderCamera): IRenderCamera => {\n                        irc.frameId = rc.frameId;\n                        irc.perspective = rc.perspective;\n\n                        if (rc.changed === true) {\n                            irc.needsRender = true;\n                        }\n\n                        return irc;\n                    };\n                })\n            .subscribe(this._renderCameraOperation$);\n\n        this._renderFrameSubscribe();\n\n        let renderHash$: Observable<IGLRenderHashesOperation> = this._render$\n            .map(\n                (hash: IGLRenderHash) => {\n                    return (hashes: IGLRenderHashes): IGLRenderHashes => {\n                        hashes[hash.name] = hash.render;\n\n                        return hashes;\n                    };\n                });\n\n        let clearHash$: Observable<IGLRenderHashesOperation> = this._clear$\n            .map(\n                (name: string) => {\n                    return (hashes: IGLRenderHashes): IGLRenderHashes => {\n                        delete hashes[name];\n\n                        return hashes;\n                    };\n                });\n\n        Observable\n            .merge(renderHash$, clearHash$)\n            .subscribe(this._renderOperation$);\n\n        this._webGLRenderer$ = this._render$\n            .first()\n            .map(\n                (hash: IGLRenderHash): THREE.WebGLRenderer => {\n                    let element: HTMLElement = renderService.element;\n\n                    let webGLRenderer: THREE.WebGLRenderer = new THREE.WebGLRenderer();\n                    webGLRenderer.setPixelRatio(window.devicePixelRatio);\n                    webGLRenderer.setSize(element.offsetWidth, element.offsetHeight);\n                    webGLRenderer.setClearColor(new THREE.Color(0x202020), 1.0);\n                    webGLRenderer.autoClear = false;\n                    webGLRenderer.domElement.style.position = \"absolute\";\n\n                    canvasContainer.appendChild(webGLRenderer.domElement);\n\n                    return webGLRenderer;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._webGLRenderer$.subscribe(() => { /*noop*/ });\n\n        let createRenderer$: Observable<IGLRendererOperation> = this._webGLRenderer$\n            .first()\n            .map(\n                (webGLRenderer: THREE.WebGLRenderer): IGLRendererOperation => {\n                    return (renderer: IGLRenderer): IGLRenderer => {\n                        renderer.needsRender = true;\n                        renderer.renderer = webGLRenderer;\n\n                        return renderer;\n                    };\n                });\n\n        let resizeRenderer$: Observable<IGLRendererOperation> = this._renderService.size$\n            .map(\n                (size: ISize): IGLRendererOperation => {\n                    return (renderer: IGLRenderer): IGLRenderer => {\n                        if (renderer.renderer == null) {\n                            return renderer;\n                        }\n\n                        renderer.renderer.setSize(size.width, size.height);\n                        renderer.needsRender = true;\n\n                        return renderer;\n                    };\n                });\n\n        let clearRenderer$: Observable<IGLRendererOperation> = this._clear$\n            .map(\n                (name: string) => {\n                    return (renderer: IGLRenderer): IGLRenderer => {\n                        if (renderer.renderer == null) {\n                            return renderer;\n                        }\n\n                        renderer.needsRender = true;\n\n                        return renderer;\n                    };\n                });\n\n        Observable\n            .merge(createRenderer$, resizeRenderer$, clearRenderer$)\n            .subscribe(this._rendererOperation$);\n\n        let renderCollectionEmpty$: Observable<IGLRenderHashes> = this._renderCollection$\n            .filter(\n                (hashes: IGLRenderHashes): boolean => {\n                    return Object.keys(hashes).length === 0;\n                })\n            .share();\n\n        renderCollectionEmpty$\n            .subscribe(\n                (hashes: IGLRenderHashes): void => {\n                    if (this._renderFrameSubscription == null) {\n                        return;\n                    }\n\n                    this._renderFrameSubscription.unsubscribe();\n                    this._renderFrameSubscription = null;\n\n                    this._renderFrameSubscribe();\n                });\n\n        renderCollectionEmpty$\n            .map(\n                (hashes: IGLRenderHashes): IEraserOperation => {\n                    return (eraser: IEraser): IEraser => {\n                        eraser.needsRender = true;\n\n                        return eraser;\n                    };\n                })\n            .subscribe(this._eraserOperation$);\n    }\n\n    public get render$(): Subject<IGLRenderHash> {\n        return this._render$;\n    }\n\n    public get webGLRenderer$(): Observable<THREE.WebGLRenderer> {\n        return this._webGLRenderer$;\n    }\n\n    public clear(name: string): void {\n        this._clear$.next(name);\n    }\n\n    private _renderFrameSubscribe(): void {\n        this._render$\n            .first()\n            .map(\n                (renderHash: IGLRenderHash): IRenderCameraOperation => {\n                    return (irc: IRenderCamera): IRenderCamera => {\n                        irc.needsRender = true;\n\n                        return irc;\n                    };\n                })\n             .subscribe(\n                (operation: IRenderCameraOperation): void => {\n                    this._renderCameraOperation$.next(operation);\n                });\n\n        this._renderFrameSubscription = this._render$\n            .first()\n            .mergeMap(\n                (hash: IGLRenderHash): Observable<RenderCamera> => {\n                    return this._renderService.renderCameraFrame$;\n                })\n            .subscribe(this._renderFrame$);\n    }\n}\n\nexport default GLRenderer;\n",
-    "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {\n    Camera,\n    Spatial,\n} from \"../Geo\";\nimport {RenderMode} from \"../Render\";\nimport {IRotation} from \"../State\";\n\nexport class RenderCamera {\n    public alpha: number;\n    public zoom: number;\n    public currentAspect: number;\n    public currentPano: boolean;\n    public previousAspect: number;\n    public previousPano: boolean;\n    public renderMode: RenderMode;\n\n    private _spatial: Spatial;\n\n    private _camera: Camera;\n    private _perspective: THREE.PerspectiveCamera;\n    private _rotation: IRotation;\n\n    private _frameId: number;\n\n    private _changed: boolean;\n    private _changedForFrame: number;\n\n    constructor(perspectiveCameraAspect: number, renderMode: RenderMode) {\n        this.alpha = -1;\n        this.zoom = 0;\n\n        this._frameId = -1;\n\n        this._changed = false;\n        this._changedForFrame = -1;\n\n        this.currentAspect = 1;\n        this.currentPano = false;\n        this.previousAspect = 1;\n        this.previousPano = false;\n\n        this.renderMode = renderMode;\n\n        this._spatial = new Spatial();\n\n        this._camera = new Camera();\n        this._perspective = new THREE.PerspectiveCamera(\n            50,\n            perspectiveCameraAspect,\n            0.4,\n            10000);\n\n        this._perspective.matrixAutoUpdate = false;\n\n        this._rotation = { phi: 0, theta: 0 };\n    }\n\n    public get camera(): Camera {\n        return this._camera;\n    }\n\n    public get changed(): boolean {\n        return this.frameId === this._changedForFrame;\n    }\n\n    public get frameId(): number {\n        return this._frameId;\n    }\n\n    public set frameId(value: number) {\n        this._frameId = value;\n\n        if (this._changed) {\n            this._changed = false;\n            this._changedForFrame = value;\n        }\n    }\n\n    public get perspective(): THREE.PerspectiveCamera {\n        return this._perspective;\n    }\n\n    public get rotation(): IRotation {\n        return this._rotation;\n    }\n\n    public updateProjection(): void {\n        let currentAspect: number = this._getAspect(\n            this.currentAspect,\n            this.currentPano,\n            this.perspective.aspect);\n\n        let previousAspect: number = this._getAspect(\n            this.previousAspect,\n            this.previousPano,\n            this.perspective.aspect);\n\n        let aspect: number = (1 - this.alpha) * previousAspect + this.alpha * currentAspect;\n\n        let verticalFov: number = this._getVerticalFov(aspect, this._camera.focal, this.zoom);\n\n        this._perspective.fov = verticalFov;\n        this._perspective.updateProjectionMatrix();\n\n        this._changed = true;\n    }\n\n    public updatePerspective(camera: Camera): void {\n        this._perspective.up.copy(camera.up);\n        this._perspective.position.copy(camera.position);\n        this._perspective.lookAt(camera.lookat);\n\n        this._perspective.updateMatrix();\n        this._perspective.updateMatrixWorld(false);\n\n        this._changed = true;\n    }\n\n    public updateRotation(camera: Camera): void {\n        this._rotation = this._getRotation(camera);\n    }\n\n    private _getVerticalFov(aspect: number, focal: number, zoom: number): number {\n        return 2 * Math.atan(0.5 / (Math.pow(2, zoom) * aspect * focal)) * 180 / Math.PI;\n    }\n\n    private _getAspect(\n        nodeAspect: number,\n        pano: boolean,\n        perspectiveCameraAspect: number): number {\n\n        if (pano) {\n            return 1;\n        }\n\n        let coeff: number = Math.max(1, 1 / nodeAspect);\n\n        let usePerspective: boolean = this.renderMode === RenderMode.Letterbox ?\n            nodeAspect > perspectiveCameraAspect :\n            nodeAspect < perspectiveCameraAspect;\n\n        let aspect: number = usePerspective ?\n            coeff * perspectiveCameraAspect :\n            coeff * nodeAspect;\n\n        return aspect;\n    }\n\n    private _getRotation(camera: Camera): IRotation {\n        let direction: THREE.Vector3 = camera.lookat.clone().sub(camera.position);\n        let up: THREE.Vector3 = camera.up.clone();\n\n        let upProjection: number = direction.clone().dot(up);\n        let planeProjection: THREE.Vector3 = direction.clone().sub(up.clone().multiplyScalar(upProjection));\n\n        let phi: number = Math.atan2(planeProjection.y, planeProjection.x);\n        let theta: number = Math.PI / 2 - this._spatial.angleToPlane(direction.toArray(), [0, 0, 1]);\n\n        return { phi: phi, theta: theta };\n    }\n}\n\nexport default RenderCamera;\n",
+    "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {\n    Camera,\n    Spatial,\n} from \"../Geo\";\nimport {RenderMode} from \"../Render\";\nimport {IRotation} from \"../State\";\n\nexport class RenderCamera {\n    public alpha: number;\n    public zoom: number;\n    public currentAspect: number;\n    public currentPano: boolean;\n    public previousAspect: number;\n    public previousPano: boolean;\n    public renderMode: RenderMode;\n\n    private _spatial: Spatial;\n\n    private _camera: Camera;\n    private _perspective: THREE.PerspectiveCamera;\n    private _rotation: IRotation;\n\n    private _frameId: number;\n\n    private _changed: boolean;\n    private _changedForFrame: number;\n\n    constructor(elementWidth: number, elementHeight: number, renderMode: RenderMode) {\n        this.alpha = -1;\n        this.zoom = 0;\n\n        this._frameId = -1;\n\n        this._changed = false;\n        this._changedForFrame = -1;\n\n        this.currentAspect = 1;\n        this.currentPano = false;\n        this.previousAspect = 1;\n        this.previousPano = false;\n\n        this.renderMode = renderMode;\n\n        this._spatial = new Spatial();\n\n        this._camera = new Camera();\n\n        const perspectiveCameraAspect: number =\n            this._getPerspectiveCameraAspect(elementWidth, elementHeight);\n\n        this._perspective = new THREE.PerspectiveCamera(\n            50,\n            perspectiveCameraAspect,\n            0.4,\n            10000);\n\n        this._perspective.matrixAutoUpdate = false;\n\n        this._rotation = { phi: 0, theta: 0 };\n    }\n\n    public get camera(): Camera {\n        return this._camera;\n    }\n\n    public get changed(): boolean {\n        return this.frameId === this._changedForFrame;\n    }\n\n    public get frameId(): number {\n        return this._frameId;\n    }\n\n    public set frameId(value: number) {\n        this._frameId = value;\n\n        if (this._changed) {\n            this._changed = false;\n            this._changedForFrame = value;\n        }\n    }\n\n    public get perspective(): THREE.PerspectiveCamera {\n        return this._perspective;\n    }\n\n    public get rotation(): IRotation {\n        return this._rotation;\n    }\n\n    public updateAspect(elementWidth: number, elementHeight: number): void {\n        const perspectiveCameraAspect: number =\n            this._getPerspectiveCameraAspect(elementWidth, elementHeight);\n\n        this._perspective.aspect = perspectiveCameraAspect;\n\n        this._changed = true;\n    }\n\n    public updateProjection(): void {\n        let currentAspect: number = this._getAspect(\n            this.currentAspect,\n            this.currentPano,\n            this.perspective.aspect);\n\n        let previousAspect: number = this._getAspect(\n            this.previousAspect,\n            this.previousPano,\n            this.perspective.aspect);\n\n        let aspect: number = (1 - this.alpha) * previousAspect + this.alpha * currentAspect;\n\n        let verticalFov: number = this._getVerticalFov(aspect, this._camera.focal, this.zoom);\n\n        this._perspective.fov = verticalFov;\n        this._perspective.updateProjectionMatrix();\n\n        this._changed = true;\n    }\n\n    public updatePerspective(camera: Camera): void {\n        this._perspective.up.copy(camera.up);\n        this._perspective.position.copy(camera.position);\n        this._perspective.lookAt(camera.lookat);\n\n        this._perspective.updateMatrix();\n        this._perspective.updateMatrixWorld(false);\n\n        this._changed = true;\n    }\n\n    public updateRotation(camera: Camera): void {\n        this._rotation = this._getRotation(camera);\n    }\n\n    private _getVerticalFov(aspect: number, focal: number, zoom: number): number {\n        return 2 * Math.atan(0.5 / (Math.pow(2, zoom) * aspect * focal)) * 180 / Math.PI;\n    }\n\n    private _getAspect(\n        nodeAspect: number,\n        pano: boolean,\n        perspectiveCameraAspect: number): number {\n\n        if (pano) {\n            return 1;\n        }\n\n        let coeff: number = Math.max(1, 1 / nodeAspect);\n\n        let usePerspective: boolean = this.renderMode === RenderMode.Letterbox ?\n            nodeAspect > perspectiveCameraAspect :\n            nodeAspect < perspectiveCameraAspect;\n\n        let aspect: number = usePerspective ?\n            coeff * perspectiveCameraAspect :\n            coeff * nodeAspect;\n\n        return aspect;\n    }\n\n    private _getPerspectiveCameraAspect(elementWidth: number, elementHeight: number): number {\n        return elementWidth === 0 ? 0 : elementWidth / elementHeight;\n    }\n\n    private _getRotation(camera: Camera): IRotation {\n        let direction: THREE.Vector3 = camera.lookat.clone().sub(camera.position);\n        let up: THREE.Vector3 = camera.up.clone();\n\n        let upProjection: number = direction.clone().dot(up);\n        let planeProjection: THREE.Vector3 = direction.clone().sub(up.clone().multiplyScalar(upProjection));\n\n        let phi: number = Math.atan2(planeProjection.y, planeProjection.x);\n        let theta: number = Math.PI / 2 - this._spatial.angleToPlane(direction.toArray(), [0, 0, 1]);\n\n        return { phi: phi, theta: theta };\n    }\n}\n\nexport default RenderCamera;\n",
     "/**\n * Enumeration for render mode\n * @enum {number}\n * @readonly\n * @description Modes for specifying how rendering is done\n * in the viewer. All modes preserves the original aspect\n * ratio of the images.\n */\nexport enum RenderMode {\n\n    /**\n     * Displays all content within the viewer.\n     *\n     * @description Black bars shown on both\n     * sides of the content. Bars are shown\n     * either below and above or to the left\n     * and right of the content depending on\n     * the aspect ratio relation between the\n     * image and the viewer.\n     */\n    Letterbox,\n\n    /**\n     * Fills the viewer by cropping content.\n     *\n     * @description Cropping is done either\n     * in horizontal or vertical direction\n     * depending on the aspect ratio relation\n     * between the image and the viewer.\n     */\n    Fill,\n}\n\nexport default RenderMode;\n",
     "/**\n * Enumeration for render mode\n * @enum {number}\n * @readonly\n * @description Modes for specifying how rendering is done\n * in the viewer. All modes preserves the original aspect\n * ratio of the images.\n */\nexport enum RenderMode {\n\n    /**\n     * Displays all content within the viewer.\n     *\n     * @description Black bars shown on both\n     * sides of the content. Bars are shown\n     * either below and above or to the left\n     * and right of the content depending on\n     * the aspect ratio relation between the\n     * image and the viewer.\n     */\n    Letterbox,\n\n    /**\n     * Fills the viewer by cropping content.\n     *\n     * @description Cropping is done either\n     * in horizontal or vertical direction\n     * depending on the aspect ratio relation\n     * between the image and the viewer.\n     */\n    Fill,\n}\n\nexport default RenderMode;\n",
-    "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\nimport {BehaviorSubject} from \"rxjs/BehaviorSubject\";\n\nimport \"rxjs/add/observable/combineLatest\";\n\nimport \"rxjs/add/operator/do\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/skip\";\nimport \"rxjs/add/operator/startWith\";\nimport \"rxjs/add/operator/withLatestFrom\";\n\nimport {Camera, Spatial, Transform} from \"../Geo\";\nimport {Node} from \"../Graph\";\nimport {RenderCamera, RenderMode, ISize} from \"../Render\";\nimport {IFrame} from \"../State\";\n\ninterface IRenderCameraOperation {\n    (rc: RenderCamera): RenderCamera;\n}\n\nexport class RenderService {\n    private _bearing$: Observable<number>;\n\n    private _element: HTMLElement;\n    private _currentFrame$: Observable<IFrame>;\n\n    private _renderCameraOperation$: Subject<IRenderCameraOperation>;\n    private _renderCameraHolder$: Observable<RenderCamera>;\n    private _renderCameraFrame$: Observable<RenderCamera>;\n    private _renderCamera$: Observable<RenderCamera>;\n\n    private _resize$: Subject<void>;\n    private _size$: BehaviorSubject<ISize>;\n\n    private _spatial: Spatial;\n\n    private _renderMode$: BehaviorSubject<RenderMode>;\n\n    constructor(element: HTMLElement, currentFrame$: Observable<IFrame>, renderMode: RenderMode) {\n        this._element = element;\n        this._currentFrame$ = currentFrame$;\n\n        this._spatial = new Spatial();\n\n        renderMode = renderMode != null ? renderMode : RenderMode.Fill;\n\n        this._resize$ = new Subject<void>();\n        this._renderCameraOperation$ = new Subject<IRenderCameraOperation>();\n\n        this._size$ =\n            new BehaviorSubject<ISize>(\n                {\n                    height: this._element.offsetHeight,\n                    width: this._element.offsetWidth,\n                });\n\n        this._resize$\n            .map(\n                (): ISize => {\n                    return { height: this._element.offsetHeight, width: this._element.offsetWidth };\n                })\n            .subscribe(this._size$);\n\n        this._renderMode$ = new BehaviorSubject<RenderMode>(renderMode);\n\n        this._renderCameraHolder$ = this._renderCameraOperation$\n            .startWith(\n                (rc: RenderCamera): RenderCamera => {\n                    return rc;\n                })\n            .scan(\n                (rc: RenderCamera, operation: IRenderCameraOperation): RenderCamera => {\n                    return operation(rc);\n                },\n                new RenderCamera(this._element.offsetWidth / this._element.offsetHeight, renderMode))\n            .publishReplay(1)\n            .refCount();\n\n        this._renderCameraFrame$ = this._currentFrame$\n            .withLatestFrom(\n                this._renderCameraHolder$,\n                (frame: IFrame, renderCamera: RenderCamera): [IFrame, RenderCamera] => {\n                    return [frame, renderCamera];\n                })\n            .do(\n                (args: [IFrame, RenderCamera]): void => {\n                    let frame: IFrame = args[0];\n                    let rc: RenderCamera = args[1];\n\n                    let camera: Camera = frame.state.camera;\n\n                    if (rc.alpha !== frame.state.alpha ||\n                        rc.zoom !== frame.state.zoom ||\n                        rc.camera.diff(camera) > 1e-9) {\n\n                        let currentTransform: Transform = frame.state.currentTransform;\n                        let previousTransform: Transform =\n                            frame.state.previousTransform != null ?\n                                frame.state.previousTransform :\n                                frame.state.currentTransform;\n\n                        let previousNode: Node =\n                            frame.state.previousNode != null ?\n                                frame.state.previousNode :\n                                frame.state.currentNode;\n\n                        rc.currentAspect = currentTransform.basicAspect;\n                        rc.currentPano = frame.state.currentNode.pano;\n                        rc.previousAspect = previousTransform.basicAspect;\n                        rc.previousPano = previousNode.pano;\n\n                        rc.alpha = frame.state.alpha;\n                        rc.zoom = frame.state.zoom;\n\n                        rc.camera.copy(camera);\n                        rc.updatePerspective(camera);\n                        rc.updateRotation(camera);\n\n                        rc.updateProjection();\n                    }\n\n                    rc.frameId = frame.id;\n                })\n            .map(\n                (args: [IFrame, RenderCamera]): RenderCamera => {\n                    return args[1];\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._renderCamera$ = this._renderCameraFrame$\n            .filter(\n                (rc: RenderCamera): boolean => {\n                    return rc.changed;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._bearing$ = this._renderCamera$\n            .map(\n                (renderCamera: RenderCamera): number => {\n                    let bearing: number =\n                        this._spatial.radToDeg(\n                            this._spatial.azimuthalToBearing(renderCamera.rotation.phi));\n\n                    return this._spatial.wrap(bearing, 0, 360);\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._size$\n            .skip(1)\n            .map(\n                (size: ISize) => {\n                    return (rc: RenderCamera): RenderCamera => {\n                        rc.perspective.aspect = size.width / size.height;\n                        rc.updateProjection();\n\n                        return rc;\n                    };\n                })\n            .subscribe(this._renderCameraOperation$);\n\n        this._renderMode$\n            .skip(1)\n            .map(\n                (rm: RenderMode) => {\n                    return (rc: RenderCamera): RenderCamera => {\n                        rc.renderMode = rm;\n                        rc.updateProjection();\n\n                        return rc;\n                    };\n                })\n            .subscribe(this._renderCameraOperation$);\n\n        this._bearing$.subscribe(() => { /*noop*/ });\n        this._renderCameraHolder$.subscribe(() => { /*noop*/ });\n        this._size$.subscribe(() => { /*noop*/ });\n        this._renderMode$.subscribe(() => { /*noop*/ });\n        this._renderCamera$.subscribe(() => { /*noop*/ });\n        this._renderCameraFrame$.subscribe(() => { /*noop*/ });\n    }\n\n    public get bearing$(): Observable<number> {\n        return this._bearing$;\n    }\n\n    public get element(): HTMLElement {\n        return this._element;\n    }\n\n    public get resize$(): Subject<void> {\n        return this._resize$;\n    }\n\n    public get size$(): Observable<ISize> {\n        return this._size$;\n    }\n\n    public get renderMode$(): Subject<RenderMode> {\n        return this._renderMode$;\n    }\n\n    public get renderCameraFrame$(): Observable<RenderCamera> {\n        return this._renderCameraFrame$;\n    }\n\n    public get renderCamera$(): Observable<RenderCamera> {\n        return this._renderCamera$;\n    }\n}\n\nexport default RenderService;\n",
+    "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\nimport {BehaviorSubject} from \"rxjs/BehaviorSubject\";\n\nimport \"rxjs/add/observable/combineLatest\";\n\nimport \"rxjs/add/operator/do\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/skip\";\nimport \"rxjs/add/operator/startWith\";\nimport \"rxjs/add/operator/withLatestFrom\";\n\nimport {Camera, Spatial, Transform} from \"../Geo\";\nimport {Node} from \"../Graph\";\nimport {RenderCamera, RenderMode, ISize} from \"../Render\";\nimport {IFrame} from \"../State\";\n\ninterface IRenderCameraOperation {\n    (rc: RenderCamera): RenderCamera;\n}\n\nexport class RenderService {\n    private _bearing$: Observable<number>;\n\n    private _element: HTMLElement;\n    private _currentFrame$: Observable<IFrame>;\n\n    private _renderCameraOperation$: Subject<IRenderCameraOperation>;\n    private _renderCameraHolder$: Observable<RenderCamera>;\n    private _renderCameraFrame$: Observable<RenderCamera>;\n    private _renderCamera$: Observable<RenderCamera>;\n\n    private _resize$: Subject<void>;\n    private _size$: BehaviorSubject<ISize>;\n\n    private _spatial: Spatial;\n\n    private _renderMode$: BehaviorSubject<RenderMode>;\n\n    constructor(element: HTMLElement, currentFrame$: Observable<IFrame>, renderMode: RenderMode) {\n        this._element = element;\n        this._currentFrame$ = currentFrame$;\n\n        this._spatial = new Spatial();\n\n        renderMode = renderMode != null ? renderMode : RenderMode.Fill;\n\n        this._resize$ = new Subject<void>();\n        this._renderCameraOperation$ = new Subject<IRenderCameraOperation>();\n\n        this._size$ =\n            new BehaviorSubject<ISize>(\n                {\n                    height: this._element.offsetHeight,\n                    width: this._element.offsetWidth,\n                });\n\n        this._resize$\n            .map(\n                (): ISize => {\n                    return { height: this._element.offsetHeight, width: this._element.offsetWidth };\n                })\n            .subscribe(this._size$);\n\n        this._renderMode$ = new BehaviorSubject<RenderMode>(renderMode);\n\n        this._renderCameraHolder$ = this._renderCameraOperation$\n            .startWith(\n                (rc: RenderCamera): RenderCamera => {\n                    return rc;\n                })\n            .scan(\n                (rc: RenderCamera, operation: IRenderCameraOperation): RenderCamera => {\n                    return operation(rc);\n                },\n                new RenderCamera(this._element.offsetWidth, this._element.offsetHeight, renderMode))\n            .publishReplay(1)\n            .refCount();\n\n        this._renderCameraFrame$ = this._currentFrame$\n            .withLatestFrom(\n                this._renderCameraHolder$,\n                (frame: IFrame, renderCamera: RenderCamera): [IFrame, RenderCamera] => {\n                    return [frame, renderCamera];\n                })\n            .do(\n                (args: [IFrame, RenderCamera]): void => {\n                    let frame: IFrame = args[0];\n                    let rc: RenderCamera = args[1];\n\n                    let camera: Camera = frame.state.camera;\n\n                    if (rc.alpha !== frame.state.alpha ||\n                        rc.zoom !== frame.state.zoom ||\n                        rc.camera.diff(camera) > 1e-9) {\n\n                        let currentTransform: Transform = frame.state.currentTransform;\n                        let previousTransform: Transform =\n                            frame.state.previousTransform != null ?\n                                frame.state.previousTransform :\n                                frame.state.currentTransform;\n\n                        let previousNode: Node =\n                            frame.state.previousNode != null ?\n                                frame.state.previousNode :\n                                frame.state.currentNode;\n\n                        rc.currentAspect = currentTransform.basicAspect;\n                        rc.currentPano = frame.state.currentNode.pano;\n                        rc.previousAspect = previousTransform.basicAspect;\n                        rc.previousPano = previousNode.pano;\n\n                        rc.alpha = frame.state.alpha;\n                        rc.zoom = frame.state.zoom;\n\n                        rc.camera.copy(camera);\n                        rc.updatePerspective(camera);\n                        rc.updateRotation(camera);\n\n                        rc.updateProjection();\n                    }\n\n                    rc.frameId = frame.id;\n                })\n            .map(\n                (args: [IFrame, RenderCamera]): RenderCamera => {\n                    return args[1];\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._renderCamera$ = this._renderCameraFrame$\n            .filter(\n                (rc: RenderCamera): boolean => {\n                    return rc.changed;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._bearing$ = this._renderCamera$\n            .map(\n                (renderCamera: RenderCamera): number => {\n                    let bearing: number =\n                        this._spatial.radToDeg(\n                            this._spatial.azimuthalToBearing(renderCamera.rotation.phi));\n\n                    return this._spatial.wrap(bearing, 0, 360);\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._size$\n            .skip(1)\n            .map(\n                (size: ISize) => {\n                    return (rc: RenderCamera): RenderCamera => {\n                        rc.updateAspect(size.width, size.height);\n                        rc.updateProjection();\n\n                        return rc;\n                    };\n                })\n            .subscribe(this._renderCameraOperation$);\n\n        this._renderMode$\n            .skip(1)\n            .map(\n                (rm: RenderMode) => {\n                    return (rc: RenderCamera): RenderCamera => {\n                        rc.renderMode = rm;\n                        rc.updateProjection();\n\n                        return rc;\n                    };\n                })\n            .subscribe(this._renderCameraOperation$);\n\n        this._bearing$.subscribe(() => { /*noop*/ });\n        this._renderCameraHolder$.subscribe(() => { /*noop*/ });\n        this._size$.subscribe(() => { /*noop*/ });\n        this._renderMode$.subscribe(() => { /*noop*/ });\n        this._renderCamera$.subscribe(() => { /*noop*/ });\n        this._renderCameraFrame$.subscribe(() => { /*noop*/ });\n    }\n\n    public get bearing$(): Observable<number> {\n        return this._bearing$;\n    }\n\n    public get element(): HTMLElement {\n        return this._element;\n    }\n\n    public get resize$(): Subject<void> {\n        return this._resize$;\n    }\n\n    public get size$(): Observable<ISize> {\n        return this._size$;\n    }\n\n    public get renderMode$(): Subject<RenderMode> {\n        return this._renderMode$;\n    }\n\n    public get renderCameraFrame$(): Observable<RenderCamera> {\n        return this._renderCameraFrame$;\n    }\n\n    public get renderCamera$(): Observable<RenderCamera> {\n        return this._renderCamera$;\n    }\n}\n\nexport default RenderService;\n",
     "export enum State {\n    Traversing,\n    Waiting,\n}\n\nexport default State;\n",
     "import {\n    IStateContext,\n    StateBase,\n    State,\n    TraversingState,\n    WaitingState,\n    IRotation,\n} from \"../State\";\nimport {Node} from \"../Graph\";\nimport {Camera, ILatLonAlt, Transform} from \"../Geo\";\n\nexport class StateContext implements IStateContext {\n    private _state: StateBase;\n\n    constructor() {\n        this._state = new TraversingState({\n            alpha: 1,\n            camera: new Camera(),\n            currentIndex: -1,\n            reference: { alt: 0, lat: 0, lon: 0 },\n            trajectory: [],\n            zoom: 0,\n        });\n    }\n\n    public traverse(): void {\n        this._state = this._state.traverse();\n    }\n\n    public wait(): void {\n        this._state = this._state.wait();\n    }\n\n    public get state(): State {\n        if (this._state instanceof TraversingState) {\n            return State.Traversing;\n        } else if (this._state instanceof WaitingState) {\n            return State.Waiting;\n        }\n\n        throw new Error(\"Invalid state\");\n    }\n\n    public get reference(): ILatLonAlt {\n        return this._state.reference;\n    }\n\n    public get alpha(): number {\n        return this._state.alpha;\n    }\n\n    public get camera(): Camera {\n        return this._state.camera;\n    }\n\n    public get zoom(): number {\n        return this._state.zoom;\n    }\n\n    public get currentNode(): Node {\n        return this._state.currentNode;\n    }\n\n    public get previousNode(): Node {\n        return this._state.previousNode;\n    }\n\n    public get currentCamera(): Camera {\n        return this._state.currentCamera;\n    }\n\n    public get currentTransform(): Transform {\n        return this._state.currentTransform;\n    }\n\n    public get previousTransform(): Transform {\n        return this._state.previousTransform;\n    }\n\n    public get trajectory(): Node[] {\n        return this._state.trajectory;\n    }\n\n    public get currentIndex(): number {\n        return this._state.currentIndex;\n    }\n\n    public get lastNode(): Node {\n        return this._state.trajectory[this._state.trajectory.length - 1];\n    }\n\n    public get nodesAhead(): number {\n        return this._state.trajectory.length - 1 - this._state.currentIndex;\n    }\n\n    public get motionless(): boolean {\n        return this._state.motionless;\n    }\n\n    public getCenter(): number[] {\n        return this._state.getCenter();\n    }\n\n    public setCenter(center: number[]): void {\n        this._state.setCenter(center);\n    }\n\n    public setZoom(zoom: number): void {\n        this._state.setZoom(zoom);\n    }\n\n    public update(fps: number): void {\n        this._state.update(fps);\n    }\n\n    public append(nodes: Node[]): void {\n        this._state.append(nodes);\n    }\n\n    public prepend(nodes: Node[]): void {\n        this._state.prepend(nodes);\n    }\n\n    public remove(n: number): void {\n        this._state.remove(n);\n    }\n\n    public clear(): void {\n        this._state.clear();\n    }\n\n    public clearPrior(): void {\n        this._state.clearPrior();\n    }\n\n    public cut(): void {\n        this._state.cut();\n    }\n\n    public set(nodes: Node[]): void {\n        this._state.set(nodes);\n    }\n\n    public rotate(delta: IRotation): void {\n        this._state.rotate(delta);\n    }\n\n    public rotateBasic(basicRotation: number[]): void {\n        this._state.rotateBasic(basicRotation);\n    }\n\n    public rotateBasicUnbounded(basicRotation: number[]): void {\n        this._state.rotateBasicUnbounded(basicRotation);\n    }\n\n    public rotateToBasic(basic: number[]): void {\n        this._state.rotateToBasic(basic);\n    }\n\n    public move(delta: number): void {\n        this._state.move(delta);\n    }\n\n    public moveTo(delta: number): void {\n        this._state.moveTo(delta);\n    }\n\n    public zoomIn(delta: number, reference: number[]): void {\n        this._state.zoomIn(delta, reference);\n    }\n}\n",
     "import {BehaviorSubject} from \"rxjs/BehaviorSubject\";\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\nimport {RequestAnimationFrameDefinition} from \"rxjs/util/AnimationFrame\";\n\nimport \"rxjs/add/operator/bufferCount\";\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/do\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/first\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/pairwise\";\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/startWith\";\nimport \"rxjs/add/operator/switchMap\";\nimport \"rxjs/add/operator/withLatestFrom\";\n\nimport {ILatLon} from \"../API\";\nimport {Node} from \"../Graph\";\nimport {\n    Camera,\n    ILatLonAlt,\n    Transform,\n} from \"../Geo\";\nimport {\n    IStateContext,\n    IFrame,\n    IRotation,\n    StateContext,\n    State,\n} from \"../State\";\n\ninterface IContextOperation {\n    (context: IStateContext): IStateContext;\n}\n\ninterface IContextAction {\n    (context: IStateContext): void;\n}\n\ninterface IMovingOperation {\n    (moving: boolean): boolean;\n}\n\nexport class StateService {\n    private _start$: Subject<void>;\n\n    private _frame$: Subject<number>;\n\n    private _contextOperation$: BehaviorSubject<IContextOperation>;\n    private _context$: Observable<IStateContext>;\n    private _fps$: Observable<number>;\n    private _state$: Observable<State>;\n\n    private _currentState$: Observable<IFrame>;\n    private _lastState$: Observable<IFrame>;\n    private _currentNode$: Observable<Node>;\n    private _currentNodeExternal$: Observable<Node>;\n    private _currentCamera$: Observable<Camera>;\n    private _currentKey$: BehaviorSubject<string>;\n    private _currentTransform$: Observable<Transform>;\n    private _reference$: Observable<ILatLonAlt>;\n\n    private _inMotionOperation$: Subject<boolean>;\n    private _inMotion$: Observable<boolean>;\n\n    private _inTranslationOperation$: Subject<boolean>;\n    private _inTranslation$: Observable<boolean>;\n\n    private _appendNode$: Subject<Node> = new Subject<Node>();\n\n    private _frameGenerator: RequestAnimationFrameDefinition;\n    private _frameId: number;\n\n    private _fpsSampleRate: number;\n\n    constructor () {\n        this._start$ = new Subject<void>();\n        this._frame$ = new Subject<number>();\n        this._fpsSampleRate = 30;\n\n        this._contextOperation$ = new BehaviorSubject<IContextOperation>(\n            (context: IStateContext): IStateContext => {\n                return context;\n            });\n\n        this._context$ = this._contextOperation$\n            .scan(\n                (context: IStateContext, operation: IContextOperation): IStateContext => {\n                    return operation(context);\n                },\n                new StateContext())\n            .publishReplay(1)\n            .refCount();\n\n        this._state$ = this._context$\n            .map(\n                (context: IStateContext): State => {\n                    return context.state;\n                })\n            .distinctUntilChanged()\n            .publishReplay(1)\n            .refCount();\n\n        this._fps$ = this._start$\n            .switchMap(\n                (): Observable<number> => {\n                    return this._frame$\n                        .bufferCount(1, this._fpsSampleRate)\n                        .map(\n                            (frameIds: number[]): number => {\n                                return new Date().getTime();\n                            })\n                        .pairwise()\n                        .map(\n                            (times: [number, number]): number => {\n                                return Math.max(20, 1000 * this._fpsSampleRate / (times[1] - times[0]));\n                            })\n                        .startWith(60);\n                })\n            .share();\n\n        this._currentState$ = this._frame$\n            .withLatestFrom(\n                this._fps$,\n                this._context$,\n                (frameId: number, fps: number, context: IStateContext): [number, number, IStateContext] => {\n                    return [frameId, fps, context];\n                })\n            .filter(\n                (fc: [number, number, IStateContext]): boolean => {\n                    return fc[2].currentNode != null;\n                })\n            .do(\n                (fc: [number, number, IStateContext]): void => {\n                    fc[2].update(fc[1]);\n                })\n            .map(\n                (fc: [number, number, IStateContext]): IFrame => {\n                    return { fps: fc[1], id: fc[0], state: fc[2] };\n                })\n            .share();\n\n        this._lastState$ = this._currentState$\n            .publishReplay(1)\n            .refCount();\n\n        let nodeChanged$: Observable<IFrame> = this._currentState$\n            .distinctUntilChanged(\n                undefined,\n                (f: IFrame): string => {\n                    return f.state.currentNode.key;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        let nodeChangedSubject$: Subject<IFrame> = new Subject<IFrame>();\n\n        nodeChanged$\n            .subscribe(nodeChangedSubject$);\n\n        this._currentKey$ = new BehaviorSubject<string>(null);\n\n        nodeChangedSubject$\n            .map(\n                (f: IFrame): string => {\n                    return f.state.currentNode.key;\n                })\n            .subscribe(this._currentKey$);\n\n        this._currentNode$ = nodeChangedSubject$\n            .map(\n                (f: IFrame): Node => {\n                    return f.state.currentNode;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._currentCamera$ = nodeChangedSubject$\n            .map(\n                (f: IFrame): Camera => {\n                    return f.state.currentCamera;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._currentTransform$ = nodeChangedSubject$\n            .map(\n                (f: IFrame): Transform => {\n                    return f.state.currentTransform;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._reference$ = nodeChangedSubject$\n            .map(\n                (f: IFrame): ILatLonAlt => {\n                    return f.state.reference;\n                })\n            .distinctUntilChanged(\n                (r1: ILatLon, r2: ILatLon): boolean => {\n                    return r1.lat === r2.lat && r1.lon === r2.lon;\n                },\n                (reference: ILatLonAlt): ILatLon => {\n                    return { lat: reference.lat, lon: reference.lon };\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._currentNodeExternal$ = nodeChanged$\n            .map(\n                (f: IFrame): Node => {\n                    return f.state.currentNode;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._appendNode$\n            .map(\n                (node: Node) => {\n                    return (context: IStateContext): IStateContext => {\n                        context.append([node]);\n\n                        return context;\n                    };\n                })\n            .subscribe(this._contextOperation$);\n\n        this._inMotionOperation$ = new Subject<boolean>();\n\n        nodeChanged$\n            .map(\n                (frame: IFrame): boolean => {\n                    return true;\n                })\n            .subscribe(this._inMotionOperation$);\n\n        this._inMotionOperation$\n            .distinctUntilChanged()\n            .filter(\n                (moving: boolean): boolean => {\n                    return moving;\n                })\n            .switchMap(\n                (moving: boolean): Observable<boolean> => {\n                    return this._currentState$\n                        .filter(\n                            (frame: IFrame): boolean => {\n                                return frame.state.nodesAhead === 0;\n                            })\n                        .map(\n                            (frame: IFrame): [Camera, number] => {\n                                return [frame.state.camera.clone(), frame.state.zoom];\n                            })\n                        .pairwise()\n                        .map(\n                            (pair: [[Camera, number], [Camera, number]]): boolean => {\n                                let c1: Camera = pair[0][0];\n                                let c2: Camera = pair[1][0];\n\n                                let z1: number = pair[0][1];\n                                let z2: number = pair[1][1];\n\n                                return c1.diff(c2) > 1e-5 || Math.abs(z1 - z2) > 1e-5;\n                            })\n                        .first(\n                            (changed: boolean): boolean => {\n                                return !changed;\n                            });\n                })\n            .subscribe(this._inMotionOperation$);\n\n        this._inMotion$ = this._inMotionOperation$\n            .distinctUntilChanged()\n            .publishReplay(1)\n            .refCount();\n\n        this._inTranslationOperation$ = new Subject<boolean>();\n\n        nodeChanged$\n            .map(\n                (frame: IFrame): boolean => {\n                    return true;\n                })\n            .subscribe(this._inTranslationOperation$);\n\n        this._inTranslationOperation$\n            .distinctUntilChanged()\n            .filter(\n                (inTranslation: boolean): boolean => {\n                    return inTranslation;\n                })\n            .switchMap(\n                (inTranslation: boolean): Observable<boolean> => {\n                    return this._currentState$\n                        .filter(\n                            (frame: IFrame): boolean => {\n                                return frame.state.nodesAhead === 0;\n                            })\n                        .map(\n                            (frame: IFrame): THREE.Vector3 => {\n                                return frame.state.camera.position.clone();\n                            })\n                        .pairwise()\n                        .map(\n                            (pair: [THREE.Vector3, THREE.Vector3]): boolean => {\n                                return pair[0].distanceToSquared(pair[1]) !== 0;\n                            })\n                        .first(\n                            (changed: boolean): boolean => {\n                                return !changed;\n                            });\n                })\n            .subscribe(this._inTranslationOperation$);\n\n        this._inTranslation$ = this._inTranslationOperation$\n            .distinctUntilChanged()\n            .publishReplay(1)\n            .refCount();\n\n        this._state$.subscribe(() => { /*noop*/ });\n        this._currentNode$.subscribe(() => { /*noop*/ });\n        this._currentCamera$.subscribe(() => { /*noop*/ });\n        this._currentTransform$.subscribe(() => { /*noop*/ });\n        this._reference$.subscribe(() => { /*noop*/ });\n        this._currentNodeExternal$.subscribe(() => { /*noop*/ });\n        this._lastState$.subscribe(() => { /*noop*/ });\n        this._inMotion$.subscribe(() => { /*noop*/ });\n        this._inTranslation$.subscribe(() => { /*noop*/ });\n\n        this._frameId = null;\n        this._frameGenerator = new RequestAnimationFrameDefinition(window);\n    }\n\n    public get currentState$(): Observable<IFrame> {\n        return this._currentState$;\n    }\n\n    public get currentNode$(): Observable<Node> {\n        return this._currentNode$;\n    }\n\n    public get currentKey$(): Observable<string> {\n        return this._currentKey$;\n    }\n\n    public get currentNodeExternal$(): Observable<Node> {\n        return this._currentNodeExternal$;\n    }\n\n    public get currentCamera$(): Observable<Camera> {\n        return this._currentCamera$;\n    }\n\n    public get currentTransform$(): Observable<Transform> {\n        return this._currentTransform$;\n    }\n\n    public get state$(): Observable<State> {\n        return this._state$;\n    }\n\n    public get reference$(): Observable<ILatLonAlt> {\n        return this._reference$;\n    }\n\n    public get inMotion$(): Observable<boolean> {\n        return this._inMotion$;\n    }\n\n    public get inTranslation$(): Observable<boolean> {\n        return this._inTranslation$;\n    }\n\n    public get appendNode$(): Subject<Node> {\n        return this._appendNode$;\n    }\n\n    public traverse(): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.traverse(); });\n    }\n\n    public wait(): void {\n        this._invokeContextOperation((context: IStateContext) => { context.wait(); });\n    }\n\n    public appendNodes(nodes: Node[]): void {\n        this._invokeContextOperation((context: IStateContext) => { context.append(nodes); });\n    }\n\n    public prependNodes(nodes: Node[]): void {\n        this._invokeContextOperation((context: IStateContext) => { context.prepend(nodes); });\n    }\n\n    public removeNodes(n: number): void {\n        this._invokeContextOperation((context: IStateContext) => { context.remove(n); });\n    }\n\n    public clearNodes(): void {\n        this._invokeContextOperation((context: IStateContext) => { context.clear(); });\n    }\n\n    public clearPriorNodes(): void {\n        this._invokeContextOperation((context: IStateContext) => { context.clearPrior(); });\n    }\n\n    public cutNodes(): void {\n        this._invokeContextOperation((context: IStateContext) => { context.cut(); });\n    }\n\n    public setNodes(nodes: Node[]): void {\n        this._invokeContextOperation((context: IStateContext) => { context.set(nodes); });\n    }\n\n    public rotate(delta: IRotation): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.rotate(delta); });\n    }\n\n    public rotateBasic(basicRotation: number[]): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.rotateBasic(basicRotation); });\n    }\n\n    public rotateBasicUnbounded(basicRotation: number[]): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.rotateBasicUnbounded(basicRotation); });\n    }\n\n    public rotateToBasic(basic: number[]): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.rotateToBasic(basic); });\n    }\n\n    public move(delta: number): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.move(delta); });\n    }\n\n    public moveTo(position: number): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.moveTo(position); });\n    }\n\n    /**\n     * Change zoom level while keeping the reference point position approximately static.\n     *\n     * @parameter {number} delta - Change in zoom level.\n     * @parameter {Array<number>} reference - Reference point in basic coordinates.\n     */\n    public zoomIn(delta: number, reference: number[]): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.zoomIn(delta, reference); });\n    }\n\n    public getCenter(): Observable<number[]> {\n        return this._lastState$\n            .first()\n            .map(\n                (frame: IFrame): number[] => {\n                    return (<IStateContext>frame.state).getCenter();\n                });\n    }\n\n    public getZoom(): Observable<number> {\n        return this._lastState$\n            .first()\n            .map(\n                (frame: IFrame): number => {\n                    return frame.state.zoom;\n                });\n    }\n\n    public setCenter(center: number[]): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.setCenter(center); });\n    }\n\n    public setZoom(zoom: number): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.setZoom(zoom); });\n    }\n\n    public start(): void {\n        if (this._frameId == null) {\n            this._start$.next(null);\n            this._frameId = this._frameGenerator.requestAnimationFrame(this._frame.bind(this));\n            this._frame$.next(this._frameId);\n        }\n    }\n\n    public stop(): void {\n        if (this._frameId != null) {\n            this._frameGenerator.cancelAnimationFrame(this._frameId);\n            this._frameId = null;\n        }\n    }\n\n    private _invokeContextOperation(action: (context: IStateContext) => void): void {\n        this._contextOperation$\n            .next(\n                (context: IStateContext): IStateContext => {\n                    action(context);\n\n                    return context;\n                });\n    }\n\n    private _frame(time: number): void {\n        this._frameId = this._frameGenerator.requestAnimationFrame(this._frame.bind(this));\n        this._frame$.next(this._frameId);\n    }\n}\n",
     "export enum State {\n    Traversing,\n    Waiting,\n}\n\nexport default State;\n",
     "import {\n    IStateContext,\n    StateBase,\n    State,\n    TraversingState,\n    WaitingState,\n    IRotation,\n} from \"../State\";\nimport {Node} from \"../Graph\";\nimport {Camera, ILatLonAlt, Transform} from \"../Geo\";\n\nexport class StateContext implements IStateContext {\n    private _state: StateBase;\n\n    constructor() {\n        this._state = new TraversingState({\n            alpha: 1,\n            camera: new Camera(),\n            currentIndex: -1,\n            reference: { alt: 0, lat: 0, lon: 0 },\n            trajectory: [],\n            zoom: 0,\n        });\n    }\n\n    public traverse(): void {\n        this._state = this._state.traverse();\n    }\n\n    public wait(): void {\n        this._state = this._state.wait();\n    }\n\n    public get state(): State {\n        if (this._state instanceof TraversingState) {\n            return State.Traversing;\n        } else if (this._state instanceof WaitingState) {\n            return State.Waiting;\n        }\n\n        throw new Error(\"Invalid state\");\n    }\n\n    public get reference(): ILatLonAlt {\n        return this._state.reference;\n    }\n\n    public get alpha(): number {\n        return this._state.alpha;\n    }\n\n    public get camera(): Camera {\n        return this._state.camera;\n    }\n\n    public get zoom(): number {\n        return this._state.zoom;\n    }\n\n    public get currentNode(): Node {\n        return this._state.currentNode;\n    }\n\n    public get previousNode(): Node {\n        return this._state.previousNode;\n    }\n\n    public get currentCamera(): Camera {\n        return this._state.currentCamera;\n    }\n\n    public get currentTransform(): Transform {\n        return this._state.currentTransform;\n    }\n\n    public get previousTransform(): Transform {\n        return this._state.previousTransform;\n    }\n\n    public get trajectory(): Node[] {\n        return this._state.trajectory;\n    }\n\n    public get currentIndex(): number {\n        return this._state.currentIndex;\n    }\n\n    public get lastNode(): Node {\n        return this._state.trajectory[this._state.trajectory.length - 1];\n    }\n\n    public get nodesAhead(): number {\n        return this._state.trajectory.length - 1 - this._state.currentIndex;\n    }\n\n    public get motionless(): boolean {\n        return this._state.motionless;\n    }\n\n    public getCenter(): number[] {\n        return this._state.getCenter();\n    }\n\n    public setCenter(center: number[]): void {\n        this._state.setCenter(center);\n    }\n\n    public setZoom(zoom: number): void {\n        this._state.setZoom(zoom);\n    }\n\n    public update(fps: number): void {\n        this._state.update(fps);\n    }\n\n    public append(nodes: Node[]): void {\n        this._state.append(nodes);\n    }\n\n    public prepend(nodes: Node[]): void {\n        this._state.prepend(nodes);\n    }\n\n    public remove(n: number): void {\n        this._state.remove(n);\n    }\n\n    public clear(): void {\n        this._state.clear();\n    }\n\n    public clearPrior(): void {\n        this._state.clearPrior();\n    }\n\n    public cut(): void {\n        this._state.cut();\n    }\n\n    public set(nodes: Node[]): void {\n        this._state.set(nodes);\n    }\n\n    public rotate(delta: IRotation): void {\n        this._state.rotate(delta);\n    }\n\n    public rotateBasic(basicRotation: number[]): void {\n        this._state.rotateBasic(basicRotation);\n    }\n\n    public rotateBasicUnbounded(basicRotation: number[]): void {\n        this._state.rotateBasicUnbounded(basicRotation);\n    }\n\n    public rotateToBasic(basic: number[]): void {\n        this._state.rotateToBasic(basic);\n    }\n\n    public move(delta: number): void {\n        this._state.move(delta);\n    }\n\n    public moveTo(delta: number): void {\n        this._state.moveTo(delta);\n    }\n\n    public zoomIn(delta: number, reference: number[]): void {\n        this._state.zoomIn(delta, reference);\n    }\n}\n",
     "import {BehaviorSubject} from \"rxjs/BehaviorSubject\";\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\nimport {RequestAnimationFrameDefinition} from \"rxjs/util/AnimationFrame\";\n\nimport \"rxjs/add/operator/bufferCount\";\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/do\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/first\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/pairwise\";\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/startWith\";\nimport \"rxjs/add/operator/switchMap\";\nimport \"rxjs/add/operator/withLatestFrom\";\n\nimport {ILatLon} from \"../API\";\nimport {Node} from \"../Graph\";\nimport {\n    Camera,\n    ILatLonAlt,\n    Transform,\n} from \"../Geo\";\nimport {\n    IStateContext,\n    IFrame,\n    IRotation,\n    StateContext,\n    State,\n} from \"../State\";\n\ninterface IContextOperation {\n    (context: IStateContext): IStateContext;\n}\n\ninterface IContextAction {\n    (context: IStateContext): void;\n}\n\ninterface IMovingOperation {\n    (moving: boolean): boolean;\n}\n\nexport class StateService {\n    private _start$: Subject<void>;\n\n    private _frame$: Subject<number>;\n\n    private _contextOperation$: BehaviorSubject<IContextOperation>;\n    private _context$: Observable<IStateContext>;\n    private _fps$: Observable<number>;\n    private _state$: Observable<State>;\n\n    private _currentState$: Observable<IFrame>;\n    private _lastState$: Observable<IFrame>;\n    private _currentNode$: Observable<Node>;\n    private _currentNodeExternal$: Observable<Node>;\n    private _currentCamera$: Observable<Camera>;\n    private _currentKey$: BehaviorSubject<string>;\n    private _currentTransform$: Observable<Transform>;\n    private _reference$: Observable<ILatLonAlt>;\n\n    private _inMotionOperation$: Subject<boolean>;\n    private _inMotion$: Observable<boolean>;\n\n    private _inTranslationOperation$: Subject<boolean>;\n    private _inTranslation$: Observable<boolean>;\n\n    private _appendNode$: Subject<Node> = new Subject<Node>();\n\n    private _frameGenerator: RequestAnimationFrameDefinition;\n    private _frameId: number;\n\n    private _fpsSampleRate: number;\n\n    constructor () {\n        this._start$ = new Subject<void>();\n        this._frame$ = new Subject<number>();\n        this._fpsSampleRate = 30;\n\n        this._contextOperation$ = new BehaviorSubject<IContextOperation>(\n            (context: IStateContext): IStateContext => {\n                return context;\n            });\n\n        this._context$ = this._contextOperation$\n            .scan(\n                (context: IStateContext, operation: IContextOperation): IStateContext => {\n                    return operation(context);\n                },\n                new StateContext())\n            .publishReplay(1)\n            .refCount();\n\n        this._state$ = this._context$\n            .map(\n                (context: IStateContext): State => {\n                    return context.state;\n                })\n            .distinctUntilChanged()\n            .publishReplay(1)\n            .refCount();\n\n        this._fps$ = this._start$\n            .switchMap(\n                (): Observable<number> => {\n                    return this._frame$\n                        .bufferCount(1, this._fpsSampleRate)\n                        .map(\n                            (frameIds: number[]): number => {\n                                return new Date().getTime();\n                            })\n                        .pairwise()\n                        .map(\n                            (times: [number, number]): number => {\n                                return Math.max(20, 1000 * this._fpsSampleRate / (times[1] - times[0]));\n                            })\n                        .startWith(60);\n                })\n            .share();\n\n        this._currentState$ = this._frame$\n            .withLatestFrom(\n                this._fps$,\n                this._context$,\n                (frameId: number, fps: number, context: IStateContext): [number, number, IStateContext] => {\n                    return [frameId, fps, context];\n                })\n            .filter(\n                (fc: [number, number, IStateContext]): boolean => {\n                    return fc[2].currentNode != null;\n                })\n            .do(\n                (fc: [number, number, IStateContext]): void => {\n                    fc[2].update(fc[1]);\n                })\n            .map(\n                (fc: [number, number, IStateContext]): IFrame => {\n                    return { fps: fc[1], id: fc[0], state: fc[2] };\n                })\n            .share();\n\n        this._lastState$ = this._currentState$\n            .publishReplay(1)\n            .refCount();\n\n        let nodeChanged$: Observable<IFrame> = this._currentState$\n            .distinctUntilChanged(\n                undefined,\n                (f: IFrame): string => {\n                    return f.state.currentNode.key;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        let nodeChangedSubject$: Subject<IFrame> = new Subject<IFrame>();\n\n        nodeChanged$\n            .subscribe(nodeChangedSubject$);\n\n        this._currentKey$ = new BehaviorSubject<string>(null);\n\n        nodeChangedSubject$\n            .map(\n                (f: IFrame): string => {\n                    return f.state.currentNode.key;\n                })\n            .subscribe(this._currentKey$);\n\n        this._currentNode$ = nodeChangedSubject$\n            .map(\n                (f: IFrame): Node => {\n                    return f.state.currentNode;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._currentCamera$ = nodeChangedSubject$\n            .map(\n                (f: IFrame): Camera => {\n                    return f.state.currentCamera;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._currentTransform$ = nodeChangedSubject$\n            .map(\n                (f: IFrame): Transform => {\n                    return f.state.currentTransform;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._reference$ = nodeChangedSubject$\n            .map(\n                (f: IFrame): ILatLonAlt => {\n                    return f.state.reference;\n                })\n            .distinctUntilChanged(\n                (r1: ILatLon, r2: ILatLon): boolean => {\n                    return r1.lat === r2.lat && r1.lon === r2.lon;\n                },\n                (reference: ILatLonAlt): ILatLon => {\n                    return { lat: reference.lat, lon: reference.lon };\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._currentNodeExternal$ = nodeChanged$\n            .map(\n                (f: IFrame): Node => {\n                    return f.state.currentNode;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._appendNode$\n            .map(\n                (node: Node) => {\n                    return (context: IStateContext): IStateContext => {\n                        context.append([node]);\n\n                        return context;\n                    };\n                })\n            .subscribe(this._contextOperation$);\n\n        this._inMotionOperation$ = new Subject<boolean>();\n\n        nodeChanged$\n            .map(\n                (frame: IFrame): boolean => {\n                    return true;\n                })\n            .subscribe(this._inMotionOperation$);\n\n        this._inMotionOperation$\n            .distinctUntilChanged()\n            .filter(\n                (moving: boolean): boolean => {\n                    return moving;\n                })\n            .switchMap(\n                (moving: boolean): Observable<boolean> => {\n                    return this._currentState$\n                        .filter(\n                            (frame: IFrame): boolean => {\n                                return frame.state.nodesAhead === 0;\n                            })\n                        .map(\n                            (frame: IFrame): [Camera, number] => {\n                                return [frame.state.camera.clone(), frame.state.zoom];\n                            })\n                        .pairwise()\n                        .map(\n                            (pair: [[Camera, number], [Camera, number]]): boolean => {\n                                let c1: Camera = pair[0][0];\n                                let c2: Camera = pair[1][0];\n\n                                let z1: number = pair[0][1];\n                                let z2: number = pair[1][1];\n\n                                return c1.diff(c2) > 1e-5 || Math.abs(z1 - z2) > 1e-5;\n                            })\n                        .first(\n                            (changed: boolean): boolean => {\n                                return !changed;\n                            });\n                })\n            .subscribe(this._inMotionOperation$);\n\n        this._inMotion$ = this._inMotionOperation$\n            .distinctUntilChanged()\n            .publishReplay(1)\n            .refCount();\n\n        this._inTranslationOperation$ = new Subject<boolean>();\n\n        nodeChanged$\n            .map(\n                (frame: IFrame): boolean => {\n                    return true;\n                })\n            .subscribe(this._inTranslationOperation$);\n\n        this._inTranslationOperation$\n            .distinctUntilChanged()\n            .filter(\n                (inTranslation: boolean): boolean => {\n                    return inTranslation;\n                })\n            .switchMap(\n                (inTranslation: boolean): Observable<boolean> => {\n                    return this._currentState$\n                        .filter(\n                            (frame: IFrame): boolean => {\n                                return frame.state.nodesAhead === 0;\n                            })\n                        .map(\n                            (frame: IFrame): THREE.Vector3 => {\n                                return frame.state.camera.position.clone();\n                            })\n                        .pairwise()\n                        .map(\n                            (pair: [THREE.Vector3, THREE.Vector3]): boolean => {\n                                return pair[0].distanceToSquared(pair[1]) !== 0;\n                            })\n                        .first(\n                            (changed: boolean): boolean => {\n                                return !changed;\n                            });\n                })\n            .subscribe(this._inTranslationOperation$);\n\n        this._inTranslation$ = this._inTranslationOperation$\n            .distinctUntilChanged()\n            .publishReplay(1)\n            .refCount();\n\n        this._state$.subscribe(() => { /*noop*/ });\n        this._currentNode$.subscribe(() => { /*noop*/ });\n        this._currentCamera$.subscribe(() => { /*noop*/ });\n        this._currentTransform$.subscribe(() => { /*noop*/ });\n        this._reference$.subscribe(() => { /*noop*/ });\n        this._currentNodeExternal$.subscribe(() => { /*noop*/ });\n        this._lastState$.subscribe(() => { /*noop*/ });\n        this._inMotion$.subscribe(() => { /*noop*/ });\n        this._inTranslation$.subscribe(() => { /*noop*/ });\n\n        this._frameId = null;\n        this._frameGenerator = new RequestAnimationFrameDefinition(window);\n    }\n\n    public get currentState$(): Observable<IFrame> {\n        return this._currentState$;\n    }\n\n    public get currentNode$(): Observable<Node> {\n        return this._currentNode$;\n    }\n\n    public get currentKey$(): Observable<string> {\n        return this._currentKey$;\n    }\n\n    public get currentNodeExternal$(): Observable<Node> {\n        return this._currentNodeExternal$;\n    }\n\n    public get currentCamera$(): Observable<Camera> {\n        return this._currentCamera$;\n    }\n\n    public get currentTransform$(): Observable<Transform> {\n        return this._currentTransform$;\n    }\n\n    public get state$(): Observable<State> {\n        return this._state$;\n    }\n\n    public get reference$(): Observable<ILatLonAlt> {\n        return this._reference$;\n    }\n\n    public get inMotion$(): Observable<boolean> {\n        return this._inMotion$;\n    }\n\n    public get inTranslation$(): Observable<boolean> {\n        return this._inTranslation$;\n    }\n\n    public get appendNode$(): Subject<Node> {\n        return this._appendNode$;\n    }\n\n    public traverse(): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.traverse(); });\n    }\n\n    public wait(): void {\n        this._invokeContextOperation((context: IStateContext) => { context.wait(); });\n    }\n\n    public appendNodes(nodes: Node[]): void {\n        this._invokeContextOperation((context: IStateContext) => { context.append(nodes); });\n    }\n\n    public prependNodes(nodes: Node[]): void {\n        this._invokeContextOperation((context: IStateContext) => { context.prepend(nodes); });\n    }\n\n    public removeNodes(n: number): void {\n        this._invokeContextOperation((context: IStateContext) => { context.remove(n); });\n    }\n\n    public clearNodes(): void {\n        this._invokeContextOperation((context: IStateContext) => { context.clear(); });\n    }\n\n    public clearPriorNodes(): void {\n        this._invokeContextOperation((context: IStateContext) => { context.clearPrior(); });\n    }\n\n    public cutNodes(): void {\n        this._invokeContextOperation((context: IStateContext) => { context.cut(); });\n    }\n\n    public setNodes(nodes: Node[]): void {\n        this._invokeContextOperation((context: IStateContext) => { context.set(nodes); });\n    }\n\n    public rotate(delta: IRotation): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.rotate(delta); });\n    }\n\n    public rotateBasic(basicRotation: number[]): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.rotateBasic(basicRotation); });\n    }\n\n    public rotateBasicUnbounded(basicRotation: number[]): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.rotateBasicUnbounded(basicRotation); });\n    }\n\n    public rotateToBasic(basic: number[]): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.rotateToBasic(basic); });\n    }\n\n    public move(delta: number): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.move(delta); });\n    }\n\n    public moveTo(position: number): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.moveTo(position); });\n    }\n\n    /**\n     * Change zoom level while keeping the reference point position approximately static.\n     *\n     * @parameter {number} delta - Change in zoom level.\n     * @parameter {Array<number>} reference - Reference point in basic coordinates.\n     */\n    public zoomIn(delta: number, reference: number[]): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.zoomIn(delta, reference); });\n    }\n\n    public getCenter(): Observable<number[]> {\n        return this._lastState$\n            .first()\n            .map(\n                (frame: IFrame): number[] => {\n                    return (<IStateContext>frame.state).getCenter();\n                });\n    }\n\n    public getZoom(): Observable<number> {\n        return this._lastState$\n            .first()\n            .map(\n                (frame: IFrame): number => {\n                    return frame.state.zoom;\n                });\n    }\n\n    public setCenter(center: number[]): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.setCenter(center); });\n    }\n\n    public setZoom(zoom: number): void {\n        this._inMotionOperation$.next(true);\n        this._invokeContextOperation((context: IStateContext) => { context.setZoom(zoom); });\n    }\n\n    public start(): void {\n        if (this._frameId == null) {\n            this._start$.next(null);\n            this._frameId = this._frameGenerator.requestAnimationFrame(this._frame.bind(this));\n            this._frame$.next(this._frameId);\n        }\n    }\n\n    public stop(): void {\n        if (this._frameId != null) {\n            this._frameGenerator.cancelAnimationFrame(this._frameId);\n            this._frameId = null;\n        }\n    }\n\n    private _invokeContextOperation(action: (context: IStateContext) => void): void {\n        this._contextOperation$\n            .next(\n                (context: IStateContext): IStateContext => {\n                    action(context);\n\n                    return context;\n                });\n    }\n\n    private _frame(time: number): void {\n        this._frameId = this._frameGenerator.requestAnimationFrame(this._frame.bind(this));\n        this._frame$.next(this._frameId);\n    }\n}\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as _ from \"underscore\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/operator/debounceTime\";\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/startWith\";\n\ninterface ILoader {\n    task: string;\n    loading: boolean;\n}\n\nexport class LoadingService {\n    private _loaders$: Observable<{[key: string]: boolean}>;\n    private _loadersSubject$: Subject<any> = new Subject<any>();\n\n    constructor () {\n        this._loaders$ = this._loadersSubject$\n            .scan(\n                (loaders: {[key: string]: boolean}, loader: ILoader): {[key: string]: boolean} => {\n                    if (loader.task !== undefined) {\n                        loaders[loader.task] = loader.loading;\n                    }\n                    return loaders;\n                },\n                {})\n            .startWith({})\n            .publishReplay(1)\n            .refCount();\n    }\n\n    public get loading$(): Observable<boolean> {\n        return this._loaders$\n            .map(\n                (loaders: {[key: string]: boolean}): boolean => {\n                    return _.reduce(\n                        loaders,\n                        (loader: boolean, acc: boolean) => {\n                            return (loader || acc);\n                        },\n                        false);\n                })\n            .debounceTime(100)\n            .distinctUntilChanged();\n    }\n\n    public taskLoading$(task: string): Observable<boolean> {\n        return this._loaders$\n            .map(\n                (loaders: {[key: string]: boolean}): boolean => {\n                    return !!loaders[task];\n                })\n            .debounceTime(100)\n            .distinctUntilChanged();\n    }\n\n    public startLoading(task: string): void {\n        this._loadersSubject$.next({loading: true, task: task});\n    }\n\n    public stopLoading(task: string): void {\n        this._loadersSubject$.next({loading: false, task: task});\n    }\n}\n\nexport default LoadingService;\n",
     "import {BehaviorSubject} from \"rxjs/BehaviorSubject\";\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/observable/fromEvent\";\n\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/merge\";\nimport \"rxjs/add/operator/mergeMap\";\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/switchMap\";\nimport \"rxjs/add/operator/withLatestFrom\";\n\nimport {ViewportCoords} from \"../Geo\";\nimport {IMouseClaim} from \"../Viewer\";\n\nexport class MouseService {\n    private _container: HTMLElement;\n    private _canvasContainer: HTMLElement;\n    private _viewportCoords: ViewportCoords;\n\n    private _activeSubject$: BehaviorSubject<boolean>;\n    private _active$: Observable<boolean>;\n\n    private _documentMouseDown$: Observable<MouseEvent>;\n    private _documentMouseMove$: Observable<MouseEvent>;\n    private _documentMouseUp$: Observable<MouseEvent>;\n\n    private _documentCanvasMouseDown$: Observable<MouseEvent>;\n    private _documentCanvasMouseMove$: Observable<MouseEvent>;\n    private _documentCanvasMouseDragStart$: Observable<MouseEvent>;\n    private _documentCanvasMouseDrag$: Observable<MouseEvent>;\n    private _documentCanvasMouseDragEnd$: Observable<MouseEvent>;\n\n    private _mouseDown$: Observable<MouseEvent>;\n    private _mouseMove$: Observable<MouseEvent>;\n    private _mouseLeave$: Observable<MouseEvent>;\n    private _mouseUp$: Observable<MouseEvent>;\n    private _mouseOut$: Observable<MouseEvent>;\n    private _mouseOver$: Observable<MouseEvent>;\n\n    private _contextMenu$: Observable<MouseEvent>;\n    private _consistentContextMenu$: Observable<MouseEvent>;\n    private _click$: Observable<MouseEvent>;\n    private _dblClick$: Observable<MouseEvent>;\n\n    private _mouseWheel$: Observable<WheelEvent>;\n\n    private _mouseDragStart$: Observable<MouseEvent>;\n    private _mouseDrag$: Observable<MouseEvent>;\n    private _mouseDragEnd$: Observable<MouseEvent>;\n\n    private _staticClick$: Observable<MouseEvent>;\n\n    private _claimMouse$: Subject<IMouseClaim>;\n    private _mouseOwner$: Observable<string>;\n\n    constructor(canvasContainer: HTMLElement, container: HTMLElement, viewportCoords?: ViewportCoords) {\n        this._canvasContainer = canvasContainer;\n        this._container = container;\n        this._viewportCoords = viewportCoords != null ? viewportCoords : new ViewportCoords();\n\n        this._activeSubject$ = new BehaviorSubject<boolean>(false);\n\n        this._active$ = this._activeSubject$\n            .distinctUntilChanged()\n            .publishReplay(1)\n            .refCount();\n\n        this._claimMouse$ = new Subject<IMouseClaim>();\n\n        this._documentMouseDown$ = Observable.fromEvent<MouseEvent>(document, \"mousedown\")\n            .filter(\n                (event: MouseEvent): boolean => {\n                    return this._viewportCoords.insideElement(event, this._container);\n                })\n            .share();\n\n        this._documentMouseMove$ = Observable.fromEvent<MouseEvent>(document, \"mousemove\");\n        this._documentMouseUp$ = Observable.fromEvent<MouseEvent>(document, \"mouseup\");\n\n        this._documentCanvasMouseMove$ = this._documentMouseMove$\n            .filter(\n                (event: MouseEvent): boolean => {\n                    return this._viewportCoords.insideElement(event, this._container);\n                })\n            .share();\n\n        this._mouseDown$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"mousedown\");\n        this._mouseLeave$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"mouseleave\");\n        this._mouseMove$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"mousemove\");\n        this._mouseUp$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"mouseup\");\n        this._mouseOut$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"mouseout\");\n        this._mouseOver$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"mouseover\");\n\n        this._click$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"click\");\n\n        this._dblClick$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"dblclick\");\n        this._dblClick$\n            .subscribe(\n                (event: MouseEvent): void => {\n                    event.preventDefault();\n                });\n\n        this._contextMenu$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"contextmenu\");\n        this._contextMenu$\n            .subscribe(\n                (event: MouseEvent): void => {\n                    event.preventDefault();\n                });\n\n        this._mouseWheel$ = Observable.fromEvent<WheelEvent>(document, \"wheel\")\n            .filter(\n                (event: WheelEvent): boolean => {\n                    return this._viewportCoords.insideElement(event, this._container);\n                })\n            .share();\n\n        this._consistentContextMenu$ = Observable\n            .merge(\n                this._mouseDown$,\n                this._mouseMove$,\n                this._mouseOut$,\n                this._mouseUp$,\n                this._contextMenu$)\n            .bufferCount(3, 1)\n            .filter(\n                (events: MouseEvent[]): boolean => {\n                    // fire context menu on mouse up both on mac and windows\n                    return events[0].type === \"mousedown\" &&\n                        events[1].type === \"contextmenu\" &&\n                        events[2].type === \"mouseup\";\n                })\n            .map(\n                (events: MouseEvent[]): MouseEvent => {\n                    return events[1];\n                })\n            .share();\n\n        let dragStop$: Observable<MouseEvent> = Observable\n            .merge<MouseEvent>(\n                this._documentMouseUp$.filter(\n                    (e: MouseEvent): boolean => {\n                        return e.button === 0;\n                    }))\n            .share();\n\n        let leftButtonDown$: Observable<MouseEvent> = this._mouseDown$\n            .filter(\n                (e: MouseEvent): boolean => {\n                    return e.button === 0;\n                })\n            .share();\n\n        this._mouseDragStart$ = leftButtonDown$\n            .mergeMap(\n                (e: MouseEvent): Observable<MouseEvent> => {\n                    return this._documentMouseMove$\n                        .takeUntil(dragStop$)\n                        .take(1);\n                });\n\n        this._mouseDrag$ = leftButtonDown$\n            .mergeMap(\n                (e: MouseEvent): Observable<MouseEvent> => {\n                    return this._documentMouseMove$\n                        .skip(1)\n                        .takeUntil(dragStop$);\n                });\n\n        this._mouseDragEnd$ = this._mouseDragStart$\n            .mergeMap(\n                (e: MouseEvent): Observable<MouseEvent> => {\n                    return dragStop$.first();\n                });\n\n        this._documentCanvasMouseDown$ = this._documentMouseDown$\n            .filter(\n                (e: MouseEvent): boolean => {\n                    return this._viewportCoords.insideElement(e, this._container);\n                })\n            .share();\n\n        let documentCanvasLeftButtonDown$: Observable<MouseEvent> = this._documentCanvasMouseDown$\n            .filter(\n                (e: MouseEvent): boolean => {\n                    return e.button === 0;\n                })\n            .share();\n\n        this._documentCanvasMouseDragStart$ = documentCanvasLeftButtonDown$\n            .mergeMap(\n                (e: MouseEvent): Observable<MouseEvent> => {\n                    return this._documentCanvasMouseMove$\n                        .takeUntil(dragStop$)\n                        .take(1);\n                });\n\n        this._documentCanvasMouseDrag$ = documentCanvasLeftButtonDown$\n            .mergeMap(\n                (e: MouseEvent): Observable<MouseEvent> => {\n                    return this._documentCanvasMouseMove$\n                        .skip(1)\n                        .takeUntil(dragStop$);\n                });\n\n        this._documentCanvasMouseDragEnd$ = this._documentCanvasMouseDragStart$\n            .mergeMap(\n                (e: MouseEvent): Observable<MouseEvent> => {\n                    return dragStop$.first();\n                });\n\n        this._staticClick$ = this._mouseDown$\n            .switchMap(\n                (e: MouseEvent): Observable<MouseEvent> => {\n                    return this._click$\n                        .takeUntil(this._mouseMove$)\n                        .take(1);\n                });\n\n        this._mouseOwner$ = this._claimMouse$\n            .scan(\n                (claims: {[key: string]: number}, mouseClaim: IMouseClaim): {[key: string]: number} => {\n                    if (mouseClaim.zindex == null) {\n                        delete claims[mouseClaim.name];\n                    } else {\n                        claims[mouseClaim.name] = mouseClaim.zindex;\n                    }\n                    return claims;\n                },\n                {})\n            .map(\n                (claims: {[key: string]: number}): string => {\n                    let owner: string = null;\n                    let curZ: number = -1;\n\n                    for (let name in claims) {\n                        if (claims.hasOwnProperty(name)) {\n                            if (claims[name] > curZ) {\n                                curZ = claims[name];\n                                owner = name;\n                            }\n                        }\n                    }\n                    return owner;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._mouseOwner$.subscribe(() => { /* noop */ });\n    }\n\n    public get active$(): Observable<boolean> {\n        return this._active$;\n    }\n\n    public get activate$(): Subject<boolean> {\n        return this._activeSubject$;\n    }\n\n    public get documentCanvasMouseDown$(): Observable<MouseEvent> {\n        return this._documentCanvasMouseDown$;\n    }\n\n    public get documentCanvasMouseMove$(): Observable<MouseEvent> {\n        return this._documentCanvasMouseMove$;\n    }\n\n    public get documentCanvasMouseDragStart$(): Observable<MouseEvent> {\n        return this._documentCanvasMouseDragStart$;\n    }\n\n    public get documentCanvasMouseDrag$(): Observable<MouseEvent> {\n        return this._documentCanvasMouseDrag$;\n    }\n\n    public get documentCanvasMouseDragEnd$(): Observable<MouseEvent> {\n        return this._documentCanvasMouseDragEnd$;\n    }\n\n    public get documentMouseMove$(): Observable<MouseEvent> {\n        return this._documentMouseMove$;\n    }\n\n    public get documentMouseUp$(): Observable<MouseEvent> {\n        return this._documentMouseUp$;\n    }\n\n    public get mouseOwner$(): Observable<string> {\n        return this._mouseOwner$;\n    }\n\n    public get mouseDown$(): Observable<MouseEvent> {\n        return this._mouseDown$;\n    }\n\n    public get mouseMove$(): Observable<MouseEvent> {\n        return this._mouseMove$;\n    }\n\n    public get mouseLeave$(): Observable<MouseEvent> {\n        return this._mouseLeave$;\n    }\n\n    public get mouseOut$(): Observable<MouseEvent> {\n        return this._mouseOut$;\n    }\n\n    public get mouseOver$(): Observable<MouseEvent> {\n        return this._mouseOver$;\n    }\n\n    public get mouseUp$(): Observable<MouseEvent> {\n        return this._mouseUp$;\n    }\n\n    public get click$(): Observable<MouseEvent> {\n        return this._click$;\n    }\n\n    public get dblClick$(): Observable<MouseEvent> {\n        return this._dblClick$;\n    }\n\n    public get contextMenu$(): Observable<MouseEvent> {\n        return this._consistentContextMenu$;\n    }\n\n    public get mouseWheel$(): Observable<WheelEvent> {\n        return this._mouseWheel$;\n    }\n\n    public get mouseDragStart$(): Observable<MouseEvent> {\n        return this._mouseDragStart$;\n    }\n\n    public get mouseDrag$(): Observable<MouseEvent> {\n        return this._mouseDrag$;\n    }\n\n    public get mouseDragEnd$(): Observable<MouseEvent> {\n        return this._mouseDragEnd$;\n    }\n\n    public get staticClick$(): Observable<MouseEvent> {\n        return this._staticClick$;\n    }\n\n    public claimMouse(name: string, zindex: number): void {\n        this._claimMouse$.next({name: name, zindex: zindex});\n    }\n\n    public unclaimMouse(name: string): void {\n        this._claimMouse$.next({name: name, zindex: null});\n    }\n\n    public filtered$<T>(name: string, observable$: Observable<T>): Observable<T> {\n        return observable$\n            .withLatestFrom(\n                this.mouseOwner$,\n                (event: T, owner: string): [T, string] => {\n                    return [event, owner];\n                })\n            .filter(\n                (eo: [T, string]): boolean => {\n                    return eo[1] === name;\n                })\n            .map(\n                (eo: [T, string]): T => {\n                    return eo[0];\n                });\n    }\n}\n\nexport default MouseService;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport {BehaviorSubject} from \"rxjs/BehaviorSubject\";\nimport {Observable} from \"rxjs/Observable\";\n\nimport \"rxjs/add/observable/throw\";\n\nimport \"rxjs/add/operator/do\";\nimport \"rxjs/add/operator/finally\";\nimport \"rxjs/add/operator/first\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/mergeMap\";\n\nimport {\n    APIv3,\n    IFullNode,\n    ILatLon,\n} from \"../API\";\nimport {\n    FilterExpression,\n    Graph,\n    GraphService,\n    IEdgeStatus,\n    ImageLoadingService,\n    Node,\n} from \"../Graph\";\nimport {EdgeDirection} from \"../Edge\";\nimport {\n    StateService,\n    IFrame,\n} from \"../State\";\nimport {\n    CacheService,\n    LoadingService,\n} from \"../Viewer\";\n\nexport class Navigator {\n    private _apiV3: APIv3;\n\n    private _cacheService: CacheService;\n    private _graphService: GraphService;\n    private _imageLoadingService: ImageLoadingService;\n    private _loadingService: LoadingService;\n    private _loadingName: string;\n    private _stateService: StateService;\n\n    private _keyRequested$: BehaviorSubject<string>;\n    private _movedToKey$: BehaviorSubject<string>;\n    private _dirRequested$: BehaviorSubject<EdgeDirection>;\n    private _latLonRequested$: BehaviorSubject<ILatLon>;\n\n    constructor (\n        clientId: string,\n        token?: string,\n        apiV3?: APIv3,\n        graphService?: GraphService,\n        imageLoadingService?: ImageLoadingService,\n        loadingService?: LoadingService,\n        stateService?: StateService,\n        cacheService?: CacheService) {\n\n        this._apiV3 = apiV3 != null ? apiV3 : new APIv3(clientId, token);\n\n        this._imageLoadingService = imageLoadingService != null ? imageLoadingService : new ImageLoadingService();\n\n        this._graphService = graphService != null ?\n            graphService :\n            new GraphService(new Graph(this.apiV3), this._imageLoadingService);\n\n        this._loadingService = loadingService != null ? loadingService : new LoadingService();\n        this._loadingName = \"navigator\";\n\n        this._stateService = stateService != null ? stateService : new StateService();\n\n        this._cacheService = cacheService != null ?\n            cacheService :\n            new CacheService(this._graphService, this._stateService);\n\n        this._cacheService.start();\n\n        this._keyRequested$ = new BehaviorSubject<string>(null);\n        this._movedToKey$ = new BehaviorSubject<string>(null);\n        this._dirRequested$ = new BehaviorSubject<EdgeDirection>(null);\n        this._latLonRequested$ = new BehaviorSubject<ILatLon>(null);\n    }\n\n    public get apiV3(): APIv3 {\n        return this._apiV3;\n    }\n\n    public get graphService(): GraphService {\n        return this._graphService;\n    }\n\n    public get imageLoadingService(): ImageLoadingService {\n        return this._imageLoadingService;\n    }\n\n    public get keyRequested$(): Observable<string> {\n        return this._keyRequested$;\n    }\n\n    public get loadingService(): LoadingService {\n        return this._loadingService;\n    }\n\n    public get movedToKey$(): Observable<string> {\n        return this._movedToKey$;\n    }\n\n    public get stateService(): StateService {\n        return this._stateService;\n    }\n\n    public moveToKey$(key: string): Observable<Node> {\n        this.loadingService.startLoading(this._loadingName);\n        this._keyRequested$.next(key);\n\n        return this._graphService.cacheNode$(key)\n            .do(\n                (node: Node) => {\n                    this.stateService.setNodes([node]);\n                    this._movedToKey$.next(node.key);\n                })\n            .finally(\n                (): void => {\n                    this.loadingService.stopLoading(this._loadingName);\n                });\n    }\n\n    public moveDir$(direction: EdgeDirection): Observable<Node> {\n        this.loadingService.startLoading(this._loadingName);\n        this._dirRequested$.next(direction);\n\n        return this.stateService.currentNode$\n            .first()\n            .mergeMap(\n                (node: Node): Observable<string> => {\n                    return ([EdgeDirection.Next, EdgeDirection.Prev].indexOf(direction) > -1 ?\n                        node.sequenceEdges$ :\n                        node.spatialEdges$)\n                            .first()\n                            .map(\n                                (status: IEdgeStatus): string => {\n                                    for (let edge of status.edges) {\n                                        if (edge.data.direction === direction) {\n                                            return edge.to;\n                                        }\n                                    }\n\n                                    return null;\n                                });\n                })\n            .mergeMap(\n                (directionKey: string) => {\n                    if (directionKey == null) {\n                        this.loadingService.stopLoading(this._loadingName);\n\n                        return Observable\n                            .throw(new Error(`Direction (${direction}) does not exist for current node.`));\n                    }\n\n                    return this.moveToKey$(directionKey);\n                });\n    }\n\n    public moveCloseTo$(lat: number, lon: number): Observable<Node> {\n        this.loadingService.startLoading(this._loadingName);\n        this._latLonRequested$.next({lat: lat, lon: lon});\n\n        return this.apiV3.imageCloseTo$(lat, lon)\n            .mergeMap(\n                (fullNode: IFullNode): Observable<Node> => {\n                    if (fullNode == null) {\n                        this.loadingService.stopLoading(this._loadingName);\n\n                        return Observable\n                            .throw(new Error(`No image found close to lat ${lat}, lon ${lon}.`));\n                    }\n\n                    return this.moveToKey$(fullNode.key);\n                });\n    }\n\n    public setFilter$(filter: FilterExpression): Observable<void> {\n        this._stateService.clearNodes();\n\n        return this._movedToKey$\n            .first()\n            .mergeMap(\n                (key: string): Observable<Node> => {\n                    if (key != null) {\n                        return this._trajectoryKeys$()\n                            .mergeMap(\n                                (keys: string[]): Observable<Node> => {\n                                    return this._graphService.setFilter$(filter)\n                                        .mergeMap(\n                                            (graph: Graph): Observable<Node> => {\n                                                return this._cacheKeys$(keys);\n                                            });\n                                })\n                            .last();\n                    }\n\n                    return this._keyRequested$\n                        .mergeMap(\n                            (requestedKey: string): Observable<Node> => {\n                                if (requestedKey != null) {\n                                    return this._graphService.setFilter$(filter)\n                                        .mergeMap(\n                                            (graph: Graph): Observable<Node> => {\n                                                return this._graphService.cacheNode$(requestedKey);\n                                            });\n                                }\n\n                                return this._graphService.setFilter$(filter)\n                                    .map(\n                                        (graph: Graph): Node => {\n                                            return undefined;\n                                        });\n                            });\n                })\n            .map(\n                (node: Node): void => {\n                    return undefined;\n                });\n    }\n\n    public setToken$(token?: string): Observable<void> {\n        this._stateService.clearNodes();\n\n        return this._movedToKey$\n            .first()\n            .do(\n                (key: string): void => {\n                    this._apiV3.setToken(token);\n                })\n            .mergeMap(\n                (key: string): Observable<void> => {\n                    return key == null ?\n                        this._graphService.reset$([])\n                            .map(\n                                (graph: Graph): void => {\n                                    return undefined;\n                                }) :\n                        this._trajectoryKeys$()\n                            .mergeMap(\n                                (keys: string[]): Observable<Node> => {\n                                    return this._graphService.reset$(keys)\n                                        .mergeMap(\n                                            (graph: Graph): Observable<Node> => {\n                                                return this._cacheKeys$(keys);\n                                            });\n                                })\n                            .last()\n                            .map(\n                                (node: Node): void => {\n                                    return undefined;\n                                });\n                    });\n    }\n\n    private _cacheKeys$(keys: string[]): Observable<Node> {\n        let cacheNodes$: Observable<Node>[] = keys\n            .map(\n                (key: string): Observable<Node> => {\n                        return this._graphService.cacheNode$(key);\n                });\n\n        return Observable\n            .from<Observable<Node>>(cacheNodes$)\n            .mergeAll();\n    }\n\n    private _trajectoryKeys$(): Observable<string[]> {\n        return this._stateService.currentState$\n            .first()\n            .map(\n                (frame: IFrame): string[] => {\n                    return frame.state.trajectory\n                            .map(\n                                (node: Node): string => {\n                                    return node.key;\n                                });\n                });\n    }\n}\n\nexport default Navigator;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as _ from \"underscore\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/operator/debounceTime\";\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/startWith\";\n\ninterface ILoader {\n    task: string;\n    loading: boolean;\n}\n\nexport class LoadingService {\n    private _loaders$: Observable<{[key: string]: boolean}>;\n    private _loadersSubject$: Subject<any> = new Subject<any>();\n\n    constructor () {\n        this._loaders$ = this._loadersSubject$\n            .scan(\n                (loaders: {[key: string]: boolean}, loader: ILoader): {[key: string]: boolean} => {\n                    if (loader.task !== undefined) {\n                        loaders[loader.task] = loader.loading;\n                    }\n                    return loaders;\n                },\n                {})\n            .startWith({})\n            .publishReplay(1)\n            .refCount();\n    }\n\n    public get loading$(): Observable<boolean> {\n        return this._loaders$\n            .map(\n                (loaders: {[key: string]: boolean}): boolean => {\n                    return _.reduce(\n                        loaders,\n                        (loader: boolean, acc: boolean) => {\n                            return (loader || acc);\n                        },\n                        false);\n                })\n            .debounceTime(100)\n            .distinctUntilChanged();\n    }\n\n    public taskLoading$(task: string): Observable<boolean> {\n        return this._loaders$\n            .map(\n                (loaders: {[key: string]: boolean}): boolean => {\n                    return !!loaders[task];\n                })\n            .debounceTime(100)\n            .distinctUntilChanged();\n    }\n\n    public startLoading(task: string): void {\n        this._loadersSubject$.next({loading: true, task: task});\n    }\n\n    public stopLoading(task: string): void {\n        this._loadersSubject$.next({loading: false, task: task});\n    }\n}\n\nexport default LoadingService;\n",
     "import {BehaviorSubject} from \"rxjs/BehaviorSubject\";\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/observable/fromEvent\";\n\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/filter\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/merge\";\nimport \"rxjs/add/operator/mergeMap\";\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/switchMap\";\nimport \"rxjs/add/operator/withLatestFrom\";\n\nimport {ViewportCoords} from \"../Geo\";\nimport {IMouseClaim} from \"../Viewer\";\n\nexport class MouseService {\n    private _container: HTMLElement;\n    private _canvasContainer: HTMLElement;\n    private _viewportCoords: ViewportCoords;\n\n    private _activeSubject$: BehaviorSubject<boolean>;\n    private _active$: Observable<boolean>;\n\n    private _documentMouseDown$: Observable<MouseEvent>;\n    private _documentMouseMove$: Observable<MouseEvent>;\n    private _documentMouseUp$: Observable<MouseEvent>;\n\n    private _documentCanvasMouseDown$: Observable<MouseEvent>;\n    private _documentCanvasMouseMove$: Observable<MouseEvent>;\n    private _documentCanvasMouseDragStart$: Observable<MouseEvent>;\n    private _documentCanvasMouseDrag$: Observable<MouseEvent>;\n    private _documentCanvasMouseDragEnd$: Observable<MouseEvent>;\n\n    private _mouseDown$: Observable<MouseEvent>;\n    private _mouseMove$: Observable<MouseEvent>;\n    private _mouseLeave$: Observable<MouseEvent>;\n    private _mouseUp$: Observable<MouseEvent>;\n    private _mouseOut$: Observable<MouseEvent>;\n    private _mouseOver$: Observable<MouseEvent>;\n\n    private _contextMenu$: Observable<MouseEvent>;\n    private _consistentContextMenu$: Observable<MouseEvent>;\n    private _click$: Observable<MouseEvent>;\n    private _dblClick$: Observable<MouseEvent>;\n\n    private _mouseWheel$: Observable<WheelEvent>;\n\n    private _mouseDragStart$: Observable<MouseEvent>;\n    private _mouseDrag$: Observable<MouseEvent>;\n    private _mouseDragEnd$: Observable<MouseEvent>;\n\n    private _staticClick$: Observable<MouseEvent>;\n\n    private _claimMouse$: Subject<IMouseClaim>;\n    private _mouseOwner$: Observable<string>;\n\n    constructor(canvasContainer: HTMLElement, container: HTMLElement, viewportCoords?: ViewportCoords) {\n        this._canvasContainer = canvasContainer;\n        this._container = container;\n        this._viewportCoords = viewportCoords != null ? viewportCoords : new ViewportCoords();\n\n        this._activeSubject$ = new BehaviorSubject<boolean>(false);\n\n        this._active$ = this._activeSubject$\n            .distinctUntilChanged()\n            .publishReplay(1)\n            .refCount();\n\n        this._claimMouse$ = new Subject<IMouseClaim>();\n\n        this._documentMouseDown$ = Observable.fromEvent<MouseEvent>(document, \"mousedown\")\n            .filter(\n                (event: MouseEvent): boolean => {\n                    return this._viewportCoords.insideElement(event, this._container);\n                })\n            .share();\n\n        this._documentMouseMove$ = Observable.fromEvent<MouseEvent>(document, \"mousemove\");\n        this._documentMouseUp$ = Observable.fromEvent<MouseEvent>(document, \"mouseup\");\n\n        this._documentCanvasMouseMove$ = this._documentMouseMove$\n            .filter(\n                (event: MouseEvent): boolean => {\n                    return this._viewportCoords.insideElement(event, this._container);\n                })\n            .share();\n\n        this._mouseDown$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"mousedown\");\n        this._mouseLeave$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"mouseleave\");\n        this._mouseMove$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"mousemove\");\n        this._mouseUp$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"mouseup\");\n        this._mouseOut$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"mouseout\");\n        this._mouseOver$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"mouseover\");\n\n        this._click$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"click\");\n\n        this._dblClick$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"dblclick\");\n        this._dblClick$\n            .subscribe(\n                (event: MouseEvent): void => {\n                    event.preventDefault();\n                });\n\n        this._contextMenu$ = Observable.fromEvent<MouseEvent>(canvasContainer, \"contextmenu\");\n        this._contextMenu$\n            .subscribe(\n                (event: MouseEvent): void => {\n                    event.preventDefault();\n                });\n\n        this._mouseWheel$ = Observable.fromEvent<WheelEvent>(document, \"wheel\")\n            .filter(\n                (event: WheelEvent): boolean => {\n                    return this._viewportCoords.insideElement(event, this._container);\n                })\n            .share();\n\n        this._consistentContextMenu$ = Observable\n            .merge(\n                this._mouseDown$,\n                this._mouseMove$,\n                this._mouseOut$,\n                this._mouseUp$,\n                this._contextMenu$)\n            .bufferCount(3, 1)\n            .filter(\n                (events: MouseEvent[]): boolean => {\n                    // fire context menu on mouse up both on mac and windows\n                    return events[0].type === \"mousedown\" &&\n                        events[1].type === \"contextmenu\" &&\n                        events[2].type === \"mouseup\";\n                })\n            .map(\n                (events: MouseEvent[]): MouseEvent => {\n                    return events[1];\n                })\n            .share();\n\n        let dragStop$: Observable<MouseEvent> = Observable\n            .merge<MouseEvent>(\n                this._documentMouseUp$.filter(\n                    (e: MouseEvent): boolean => {\n                        return e.button === 0;\n                    }))\n            .share();\n\n        let leftButtonDown$: Observable<MouseEvent> = this._mouseDown$\n            .filter(\n                (e: MouseEvent): boolean => {\n                    return e.button === 0;\n                })\n            .share();\n\n        this._mouseDragStart$ = leftButtonDown$\n            .mergeMap(\n                (e: MouseEvent): Observable<MouseEvent> => {\n                    return this._documentMouseMove$\n                        .takeUntil(dragStop$)\n                        .take(1);\n                });\n\n        this._mouseDrag$ = leftButtonDown$\n            .mergeMap(\n                (e: MouseEvent): Observable<MouseEvent> => {\n                    return this._documentMouseMove$\n                        .skip(1)\n                        .takeUntil(dragStop$);\n                });\n\n        this._mouseDragEnd$ = this._mouseDragStart$\n            .mergeMap(\n                (e: MouseEvent): Observable<MouseEvent> => {\n                    return dragStop$.first();\n                });\n\n        this._documentCanvasMouseDown$ = this._documentMouseDown$\n            .filter(\n                (e: MouseEvent): boolean => {\n                    return this._viewportCoords.insideElement(e, this._container);\n                })\n            .share();\n\n        let documentCanvasLeftButtonDown$: Observable<MouseEvent> = this._documentCanvasMouseDown$\n            .filter(\n                (e: MouseEvent): boolean => {\n                    return e.button === 0;\n                })\n            .share();\n\n        this._documentCanvasMouseDragStart$ = documentCanvasLeftButtonDown$\n            .mergeMap(\n                (e: MouseEvent): Observable<MouseEvent> => {\n                    return this._documentCanvasMouseMove$\n                        .takeUntil(dragStop$)\n                        .take(1);\n                });\n\n        this._documentCanvasMouseDrag$ = documentCanvasLeftButtonDown$\n            .mergeMap(\n                (e: MouseEvent): Observable<MouseEvent> => {\n                    return this._documentCanvasMouseMove$\n                        .skip(1)\n                        .takeUntil(dragStop$);\n                });\n\n        this._documentCanvasMouseDragEnd$ = this._documentCanvasMouseDragStart$\n            .mergeMap(\n                (e: MouseEvent): Observable<MouseEvent> => {\n                    return dragStop$.first();\n                });\n\n        this._staticClick$ = this._mouseDown$\n            .switchMap(\n                (e: MouseEvent): Observable<MouseEvent> => {\n                    return this._click$\n                        .takeUntil(this._mouseMove$)\n                        .take(1);\n                });\n\n        this._mouseOwner$ = this._claimMouse$\n            .scan(\n                (claims: {[key: string]: number}, mouseClaim: IMouseClaim): {[key: string]: number} => {\n                    if (mouseClaim.zindex == null) {\n                        delete claims[mouseClaim.name];\n                    } else {\n                        claims[mouseClaim.name] = mouseClaim.zindex;\n                    }\n                    return claims;\n                },\n                {})\n            .map(\n                (claims: {[key: string]: number}): string => {\n                    let owner: string = null;\n                    let curZ: number = -1;\n\n                    for (let name in claims) {\n                        if (claims.hasOwnProperty(name)) {\n                            if (claims[name] > curZ) {\n                                curZ = claims[name];\n                                owner = name;\n                            }\n                        }\n                    }\n                    return owner;\n                })\n            .publishReplay(1)\n            .refCount();\n\n        this._mouseOwner$.subscribe(() => { /* noop */ });\n    }\n\n    public get active$(): Observable<boolean> {\n        return this._active$;\n    }\n\n    public get activate$(): Subject<boolean> {\n        return this._activeSubject$;\n    }\n\n    public get documentCanvasMouseDown$(): Observable<MouseEvent> {\n        return this._documentCanvasMouseDown$;\n    }\n\n    public get documentCanvasMouseMove$(): Observable<MouseEvent> {\n        return this._documentCanvasMouseMove$;\n    }\n\n    public get documentCanvasMouseDragStart$(): Observable<MouseEvent> {\n        return this._documentCanvasMouseDragStart$;\n    }\n\n    public get documentCanvasMouseDrag$(): Observable<MouseEvent> {\n        return this._documentCanvasMouseDrag$;\n    }\n\n    public get documentCanvasMouseDragEnd$(): Observable<MouseEvent> {\n        return this._documentCanvasMouseDragEnd$;\n    }\n\n    public get documentMouseMove$(): Observable<MouseEvent> {\n        return this._documentMouseMove$;\n    }\n\n    public get documentMouseUp$(): Observable<MouseEvent> {\n        return this._documentMouseUp$;\n    }\n\n    public get mouseOwner$(): Observable<string> {\n        return this._mouseOwner$;\n    }\n\n    public get mouseDown$(): Observable<MouseEvent> {\n        return this._mouseDown$;\n    }\n\n    public get mouseMove$(): Observable<MouseEvent> {\n        return this._mouseMove$;\n    }\n\n    public get mouseLeave$(): Observable<MouseEvent> {\n        return this._mouseLeave$;\n    }\n\n    public get mouseOut$(): Observable<MouseEvent> {\n        return this._mouseOut$;\n    }\n\n    public get mouseOver$(): Observable<MouseEvent> {\n        return this._mouseOver$;\n    }\n\n    public get mouseUp$(): Observable<MouseEvent> {\n        return this._mouseUp$;\n    }\n\n    public get click$(): Observable<MouseEvent> {\n        return this._click$;\n    }\n\n    public get dblClick$(): Observable<MouseEvent> {\n        return this._dblClick$;\n    }\n\n    public get contextMenu$(): Observable<MouseEvent> {\n        return this._consistentContextMenu$;\n    }\n\n    public get mouseWheel$(): Observable<WheelEvent> {\n        return this._mouseWheel$;\n    }\n\n    public get mouseDragStart$(): Observable<MouseEvent> {\n        return this._mouseDragStart$;\n    }\n\n    public get mouseDrag$(): Observable<MouseEvent> {\n        return this._mouseDrag$;\n    }\n\n    public get mouseDragEnd$(): Observable<MouseEvent> {\n        return this._mouseDragEnd$;\n    }\n\n    public get staticClick$(): Observable<MouseEvent> {\n        return this._staticClick$;\n    }\n\n    public claimMouse(name: string, zindex: number): void {\n        this._claimMouse$.next({name: name, zindex: zindex});\n    }\n\n    public unclaimMouse(name: string): void {\n        this._claimMouse$.next({name: name, zindex: null});\n    }\n\n    public filtered$<T>(name: string, observable$: Observable<T>): Observable<T> {\n        return observable$\n            .withLatestFrom(\n                this.mouseOwner$,\n                (event: T, owner: string): [T, string] => {\n                    return [event, owner];\n                })\n            .filter(\n                (eo: [T, string]): boolean => {\n                    return eo[1] === name;\n                })\n            .map(\n                (eo: [T, string]): T => {\n                    return eo[0];\n                });\n    }\n}\n\nexport default MouseService;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport {BehaviorSubject} from \"rxjs/BehaviorSubject\";\nimport {Observable} from \"rxjs/Observable\";\n\nimport \"rxjs/add/observable/throw\";\n\nimport \"rxjs/add/operator/do\";\nimport \"rxjs/add/operator/finally\";\nimport \"rxjs/add/operator/first\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/mergeMap\";\n\nimport {\n    APIv3,\n    IFullNode,\n    ILatLon,\n} from \"../API\";\nimport {\n    FilterExpression,\n    Graph,\n    GraphService,\n    IEdgeStatus,\n    ImageLoadingService,\n    Node,\n} from \"../Graph\";\nimport {EdgeDirection} from \"../Edge\";\nimport {\n    StateService,\n    IFrame,\n} from \"../State\";\nimport {\n    CacheService,\n    LoadingService,\n} from \"../Viewer\";\n\nexport class Navigator {\n    private _apiV3: APIv3;\n\n    private _cacheService: CacheService;\n    private _graphService: GraphService;\n    private _imageLoadingService: ImageLoadingService;\n    private _loadingService: LoadingService;\n    private _loadingName: string;\n    private _stateService: StateService;\n\n    private _keyRequested$: BehaviorSubject<string>;\n    private _movedToKey$: BehaviorSubject<string>;\n    private _dirRequested$: BehaviorSubject<EdgeDirection>;\n    private _latLonRequested$: BehaviorSubject<ILatLon>;\n\n    constructor (\n        clientId: string,\n        token?: string,\n        apiV3?: APIv3,\n        graphService?: GraphService,\n        imageLoadingService?: ImageLoadingService,\n        loadingService?: LoadingService,\n        stateService?: StateService,\n        cacheService?: CacheService) {\n\n        this._apiV3 = apiV3 != null ? apiV3 : new APIv3(clientId, token);\n\n        this._imageLoadingService = imageLoadingService != null ? imageLoadingService : new ImageLoadingService();\n\n        this._graphService = graphService != null ?\n            graphService :\n            new GraphService(new Graph(this.apiV3), this._imageLoadingService);\n\n        this._loadingService = loadingService != null ? loadingService : new LoadingService();\n        this._loadingName = \"navigator\";\n\n        this._stateService = stateService != null ? stateService : new StateService();\n\n        this._cacheService = cacheService != null ?\n            cacheService :\n            new CacheService(this._graphService, this._stateService);\n\n        this._cacheService.start();\n\n        this._keyRequested$ = new BehaviorSubject<string>(null);\n        this._movedToKey$ = new BehaviorSubject<string>(null);\n        this._dirRequested$ = new BehaviorSubject<EdgeDirection>(null);\n        this._latLonRequested$ = new BehaviorSubject<ILatLon>(null);\n    }\n\n    public get apiV3(): APIv3 {\n        return this._apiV3;\n    }\n\n    public get graphService(): GraphService {\n        return this._graphService;\n    }\n\n    public get imageLoadingService(): ImageLoadingService {\n        return this._imageLoadingService;\n    }\n\n    public get keyRequested$(): Observable<string> {\n        return this._keyRequested$;\n    }\n\n    public get loadingService(): LoadingService {\n        return this._loadingService;\n    }\n\n    public get movedToKey$(): Observable<string> {\n        return this._movedToKey$;\n    }\n\n    public get stateService(): StateService {\n        return this._stateService;\n    }\n\n    public moveToKey$(key: string): Observable<Node> {\n        this.loadingService.startLoading(this._loadingName);\n        this._keyRequested$.next(key);\n\n        return this._graphService.cacheNode$(key)\n            .do(\n                (node: Node) => {\n                    this.stateService.setNodes([node]);\n                    this._movedToKey$.next(node.key);\n                })\n            .finally(\n                (): void => {\n                    this.loadingService.stopLoading(this._loadingName);\n                });\n    }\n\n    public moveDir$(direction: EdgeDirection): Observable<Node> {\n        this.loadingService.startLoading(this._loadingName);\n        this._dirRequested$.next(direction);\n\n        return this.stateService.currentNode$\n            .first()\n            .mergeMap(\n                (node: Node): Observable<string> => {\n                    return ([EdgeDirection.Next, EdgeDirection.Prev].indexOf(direction) > -1 ?\n                        node.sequenceEdges$ :\n                        node.spatialEdges$)\n                            .first()\n                            .map(\n                                (status: IEdgeStatus): string => {\n                                    for (let edge of status.edges) {\n                                        if (edge.data.direction === direction) {\n                                            return edge.to;\n                                        }\n                                    }\n\n                                    return null;\n                                });\n                })\n            .mergeMap(\n                (directionKey: string) => {\n                    if (directionKey == null) {\n                        this.loadingService.stopLoading(this._loadingName);\n\n                        return Observable\n                            .throw(new Error(`Direction (${direction}) does not exist for current node.`));\n                    }\n\n                    return this.moveToKey$(directionKey);\n                });\n    }\n\n    public moveCloseTo$(lat: number, lon: number): Observable<Node> {\n        this.loadingService.startLoading(this._loadingName);\n        this._latLonRequested$.next({lat: lat, lon: lon});\n\n        return this.apiV3.imageCloseTo$(lat, lon)\n            .mergeMap(\n                (fullNode: IFullNode): Observable<Node> => {\n                    if (fullNode == null) {\n                        this.loadingService.stopLoading(this._loadingName);\n\n                        return Observable\n                            .throw(new Error(`No image found close to lat ${lat}, lon ${lon}.`));\n                    }\n\n                    return this.moveToKey$(fullNode.key);\n                });\n    }\n\n    public setFilter$(filter: FilterExpression): Observable<void> {\n        this._stateService.clearNodes();\n\n        return this._movedToKey$\n            .first()\n            .mergeMap(\n                (key: string): Observable<Node> => {\n                    if (key != null) {\n                        return this._trajectoryKeys$()\n                            .mergeMap(\n                                (keys: string[]): Observable<Node> => {\n                                    return this._graphService.setFilter$(filter)\n                                        .mergeMap(\n                                            (graph: Graph): Observable<Node> => {\n                                                return this._cacheKeys$(keys);\n                                            });\n                                })\n                            .last();\n                    }\n\n                    return this._keyRequested$\n                        .mergeMap(\n                            (requestedKey: string): Observable<Node> => {\n                                if (requestedKey != null) {\n                                    return this._graphService.setFilter$(filter)\n                                        .mergeMap(\n                                            (graph: Graph): Observable<Node> => {\n                                                return this._graphService.cacheNode$(requestedKey);\n                                            });\n                                }\n\n                                return this._graphService.setFilter$(filter)\n                                    .map(\n                                        (graph: Graph): Node => {\n                                            return undefined;\n                                        });\n                            });\n                })\n            .map(\n                (node: Node): void => {\n                    return undefined;\n                });\n    }\n\n    public setToken$(token?: string): Observable<void> {\n        this._stateService.clearNodes();\n\n        return this._movedToKey$\n            .first()\n            .do(\n                (key: string): void => {\n                    this._apiV3.setToken(token);\n                })\n            .mergeMap(\n                (key: string): Observable<void> => {\n                    return key == null ?\n                        this._graphService.reset$([])\n                            .map(\n                                (graph: Graph): void => {\n                                    return undefined;\n                                }) :\n                        this._trajectoryKeys$()\n                            .mergeMap(\n                                (keys: string[]): Observable<Node> => {\n                                    return this._graphService.reset$(keys)\n                                        .mergeMap(\n                                            (graph: Graph): Observable<Node> => {\n                                                return this._cacheKeys$(keys);\n                                            });\n                                })\n                            .last()\n                            .map(\n                                (node: Node): void => {\n                                    return undefined;\n                                });\n                    });\n    }\n\n    private _cacheKeys$(keys: string[]): Observable<Node> {\n        let cacheNodes$: Observable<Node>[] = keys\n            .map(\n                (key: string): Observable<Node> => {\n                        return this._graphService.cacheNode$(key);\n                });\n\n        return Observable\n            .from<Observable<Node>>(cacheNodes$)\n            .mergeAll();\n    }\n\n    private _trajectoryKeys$(): Observable<string[]> {\n        return this._stateService.currentState$\n            .first()\n            .map(\n                (frame: IFrame): string[] => {\n                    return frame.state.trajectory\n                            .map(\n                                (node: Node): string => {\n                                    return node.key;\n                                });\n                });\n    }\n}\n\nexport default Navigator;\n",
-    "import {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport \"rxjs/add/observable/combineLatest\";\n\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/throttleTime\";\n\nimport {ILatLon} from \"../API\";\nimport {\n    ILatLonAlt,\n    Transform,\n} from \"../Geo\";\nimport {\n    IEdgeStatus,\n    Node,\n} from \"../Graph\";\nimport {RenderCamera} from \"../Render\";\nimport {EventEmitter} from \"../Utils\";\nimport {\n    Container,\n    IUnprojection,\n    IViewerMouseEvent,\n    Navigator,\n    Projection,\n    Viewer,\n} from \"../Viewer\";\n\nexport class Observer {\n    private _started: boolean;\n\n    private _bearingSubscription: Subscription;\n    private _currentNodeSubscription: Subscription;\n    private _loadingSubscription: Subscription;\n    private _moveSubscription: Subscription;\n    private _sequenceEdgesSubscription: Subscription;\n    private _spatialEdgesSubscription: Subscription;\n    private _viewerMouseEventSubscription: Subscription;\n\n    private _container: Container;\n    private _eventEmitter: EventEmitter;\n    private _navigator: Navigator;\n    private _projection: Projection;\n\n    constructor(eventEmitter: EventEmitter, navigator: Navigator, container: Container) {\n        this._container = container;\n        this._eventEmitter = eventEmitter;\n        this._navigator = navigator;\n        this._projection = new Projection();\n\n        this._started = false;\n    }\n\n    public get started(): boolean {\n        return this._started;\n    }\n\n    public startEmit(): void {\n        if (this._started) {\n            return;\n        }\n\n        this._started = true;\n\n        this._loadingSubscription = this._navigator.loadingService.loading$\n            .subscribe((loading: boolean): void => {\n                this._eventEmitter.fire(Viewer.loadingchanged, loading);\n            });\n\n        this._currentNodeSubscription = this._navigator.stateService.currentNodeExternal$\n            .subscribe((node: Node): void => {\n                this._eventEmitter.fire(Viewer.nodechanged, node);\n            });\n\n        this._sequenceEdgesSubscription = this._navigator.stateService.currentNodeExternal$\n            .switchMap(\n                (node: Node): Observable<IEdgeStatus> => {\n                    return node.sequenceEdges$;\n                })\n            .subscribe(\n                (status: IEdgeStatus): void => {\n                    this._eventEmitter.fire(Viewer.sequenceedgeschanged, status);\n                });\n\n        this._spatialEdgesSubscription = this._navigator.stateService.currentNodeExternal$\n            .switchMap(\n                (node: Node): Observable<IEdgeStatus> => {\n                    return node.spatialEdges$;\n                })\n            .subscribe(\n                (status: IEdgeStatus): void => {\n                    this._eventEmitter.fire(Viewer.spatialedgeschanged, status);\n                });\n\n        this._moveSubscription = Observable\n            .combineLatest(\n                this._navigator.stateService.inMotion$,\n                this._container.mouseService.active$,\n                this._container.touchService.active$)\n            .map(\n                (values: boolean[]): boolean => {\n                    return values[0] || values[1] || values[2];\n                })\n            .distinctUntilChanged()\n            .subscribe(\n                (started: boolean) => {\n                    if (started) {\n                        this._eventEmitter.fire(Viewer.movestart, null);\n                    } else {\n                        this._eventEmitter.fire(Viewer.moveend, null);\n                    }\n                });\n\n        this._bearingSubscription = this._container.renderService.bearing$\n            .throttleTime(100)\n            .distinctUntilChanged(\n                (b1: number, b2: number): boolean => {\n                    return Math.abs(b2 - b1) < 1;\n                })\n            .subscribe(\n                (bearing): void => {\n                    this._eventEmitter.fire(Viewer.bearingchanged, bearing);\n                 });\n\n        const mouseMove$: Observable<MouseEvent> = this._container.mouseService.active$\n            .switchMap(\n                (active: boolean): Observable<MouseEvent> => {\n                    return active ?\n                        Observable.empty<MouseEvent>() :\n                        this._container.mouseService.mouseMove$;\n                });\n\n        this._viewerMouseEventSubscription = Observable\n            .merge(\n                this._mapMouseEvent$(Viewer.click, this._container.mouseService.staticClick$),\n                this._mapMouseEvent$(Viewer.contextmenu, this._container.mouseService.contextMenu$),\n                this._mapMouseEvent$(Viewer.dblclick, this._container.mouseService.dblClick$),\n                this._mapMouseEvent$(Viewer.mousedown, this._container.mouseService.mouseDown$),\n                this._mapMouseEvent$(Viewer.mousemove, mouseMove$),\n                this._mapMouseEvent$(Viewer.mouseout, this._container.mouseService.mouseOut$),\n                this._mapMouseEvent$(Viewer.mouseover, this._container.mouseService.mouseOver$),\n                this._mapMouseEvent$(Viewer.mouseup, this._container.mouseService.mouseUp$))\n            .withLatestFrom(\n                this._container.renderService.renderCamera$,\n                this._navigator.stateService.reference$,\n                this._navigator.stateService.currentTransform$)\n            .map(\n                ([[type, event], render, reference, transform]:\n                [[string, MouseEvent], RenderCamera, ILatLonAlt, Transform]): IViewerMouseEvent => {\n                    const unprojection: IUnprojection =\n                        this._projection.unprojectFromEvent(\n                            event,\n                            this._container.element,\n                            render,\n                            reference,\n                            transform);\n\n                    return  {\n                        basicPoint: unprojection.basicPoint,\n                        latLon: unprojection.latLon,\n                        originalEvent: event,\n                        pixelPoint: unprojection.pixelPoint,\n                        target: <Viewer>this._eventEmitter,\n                        type: type,\n                    };\n                })\n            .subscribe(\n                (event: IViewerMouseEvent): void => {\n                    this._eventEmitter.fire(event.type, event);\n                });\n    }\n\n    public stopEmit(): void {\n        if (!this.started) {\n            return;\n        }\n\n        this._started = false;\n\n        this._bearingSubscription.unsubscribe();\n        this._loadingSubscription.unsubscribe();\n        this._currentNodeSubscription.unsubscribe();\n        this._moveSubscription.unsubscribe();\n        this._sequenceEdgesSubscription.unsubscribe();\n        this._spatialEdgesSubscription.unsubscribe();\n        this._viewerMouseEventSubscription.unsubscribe();\n\n        this._bearingSubscription = null;\n        this._loadingSubscription = null;\n        this._currentNodeSubscription = null;\n        this._moveSubscription = null;\n        this._sequenceEdgesSubscription = null;\n        this._spatialEdgesSubscription = null;\n        this._viewerMouseEventSubscription = null;\n    }\n\n    public unproject$(pixelPoint: number[]): Observable<ILatLon> {\n        return Observable\n            .combineLatest(\n                this._container.renderService.renderCamera$,\n                this._navigator.stateService.reference$,\n                this._navigator.stateService.currentTransform$)\n            .first()\n            .map(\n                ([render, reference, transform]: [RenderCamera, ILatLonAlt, Transform]): ILatLon => {\n                    const unprojection: IUnprojection =\n                        this._projection.unprojectFromCanvas(\n                            pixelPoint,\n                            this._container.element,\n                            render,\n                            reference,\n                            transform);\n\n                    return unprojection.latLon;\n                });\n    }\n\n    private _mapMouseEvent$(type: string, mouseEvent$: Observable<MouseEvent>): Observable<[string, MouseEvent]> {\n        return mouseEvent$.map(\n            (event: MouseEvent): [string, MouseEvent] => {\n                return [type, event];\n            });\n    }\n}\n\nexport default Observer;\n",
+    "import {Observable} from \"rxjs/Observable\";\nimport {Subscription} from \"rxjs/Subscription\";\n\nimport \"rxjs/add/observable/combineLatest\";\n\nimport \"rxjs/add/operator/distinctUntilChanged\";\nimport \"rxjs/add/operator/map\";\nimport \"rxjs/add/operator/throttleTime\";\n\nimport {ILatLon} from \"../API\";\nimport {\n    ILatLonAlt,\n    Transform,\n} from \"../Geo\";\nimport {\n    IEdgeStatus,\n    Node,\n} from \"../Graph\";\nimport {RenderCamera} from \"../Render\";\nimport {EventEmitter} from \"../Utils\";\nimport {\n    Container,\n    IUnprojection,\n    IViewerMouseEvent,\n    Navigator,\n    Projection,\n    Viewer,\n} from \"../Viewer\";\n\nexport class Observer {\n    private _started: boolean;\n\n    private _bearingSubscription: Subscription;\n    private _currentNodeSubscription: Subscription;\n    private _moveSubscription: Subscription;\n    private _sequenceEdgesSubscription: Subscription;\n    private _spatialEdgesSubscription: Subscription;\n    private _viewerMouseEventSubscription: Subscription;\n\n    private _container: Container;\n    private _eventEmitter: EventEmitter;\n    private _navigator: Navigator;\n    private _projection: Projection;\n\n    constructor(eventEmitter: EventEmitter, navigator: Navigator, container: Container) {\n        this._container = container;\n        this._eventEmitter = eventEmitter;\n        this._navigator = navigator;\n        this._projection = new Projection();\n\n        this._started = false;\n\n        // loading should always emit, also when cover is activated\n        this._navigator.loadingService.loading$\n            .subscribe((loading: boolean): void => {\n                this._eventEmitter.fire(Viewer.loadingchanged, loading);\n            });\n    }\n\n    public get started(): boolean {\n        return this._started;\n    }\n\n    public startEmit(): void {\n        if (this._started) {\n            return;\n        }\n\n        this._started = true;\n\n        this._currentNodeSubscription = this._navigator.stateService.currentNodeExternal$\n            .subscribe((node: Node): void => {\n                this._eventEmitter.fire(Viewer.nodechanged, node);\n            });\n\n        this._sequenceEdgesSubscription = this._navigator.stateService.currentNodeExternal$\n            .switchMap(\n                (node: Node): Observable<IEdgeStatus> => {\n                    return node.sequenceEdges$;\n                })\n            .subscribe(\n                (status: IEdgeStatus): void => {\n                    this._eventEmitter.fire(Viewer.sequenceedgeschanged, status);\n                });\n\n        this._spatialEdgesSubscription = this._navigator.stateService.currentNodeExternal$\n            .switchMap(\n                (node: Node): Observable<IEdgeStatus> => {\n                    return node.spatialEdges$;\n                })\n            .subscribe(\n                (status: IEdgeStatus): void => {\n                    this._eventEmitter.fire(Viewer.spatialedgeschanged, status);\n                });\n\n        this._moveSubscription = Observable\n            .combineLatest(\n                this._navigator.stateService.inMotion$,\n                this._container.mouseService.active$,\n                this._container.touchService.active$)\n            .map(\n                (values: boolean[]): boolean => {\n                    return values[0] || values[1] || values[2];\n                })\n            .distinctUntilChanged()\n            .subscribe(\n                (started: boolean) => {\n                    if (started) {\n                        this._eventEmitter.fire(Viewer.movestart, null);\n                    } else {\n                        this._eventEmitter.fire(Viewer.moveend, null);\n                    }\n                });\n\n        this._bearingSubscription = this._container.renderService.bearing$\n            .throttleTime(100)\n            .distinctUntilChanged(\n                (b1: number, b2: number): boolean => {\n                    return Math.abs(b2 - b1) < 1;\n                })\n            .subscribe(\n                (bearing): void => {\n                    this._eventEmitter.fire(Viewer.bearingchanged, bearing);\n                 });\n\n        const mouseMove$: Observable<MouseEvent> = this._container.mouseService.active$\n            .switchMap(\n                (active: boolean): Observable<MouseEvent> => {\n                    return active ?\n                        Observable.empty<MouseEvent>() :\n                        this._container.mouseService.mouseMove$;\n                });\n\n        this._viewerMouseEventSubscription = Observable\n            .merge(\n                this._mapMouseEvent$(Viewer.click, this._container.mouseService.staticClick$),\n                this._mapMouseEvent$(Viewer.contextmenu, this._container.mouseService.contextMenu$),\n                this._mapMouseEvent$(Viewer.dblclick, this._container.mouseService.dblClick$),\n                this._mapMouseEvent$(Viewer.mousedown, this._container.mouseService.mouseDown$),\n                this._mapMouseEvent$(Viewer.mousemove, mouseMove$),\n                this._mapMouseEvent$(Viewer.mouseout, this._container.mouseService.mouseOut$),\n                this._mapMouseEvent$(Viewer.mouseover, this._container.mouseService.mouseOver$),\n                this._mapMouseEvent$(Viewer.mouseup, this._container.mouseService.mouseUp$))\n            .withLatestFrom(\n                this._container.renderService.renderCamera$,\n                this._navigator.stateService.reference$,\n                this._navigator.stateService.currentTransform$)\n            .map(\n                ([[type, event], render, reference, transform]:\n                [[string, MouseEvent], RenderCamera, ILatLonAlt, Transform]): IViewerMouseEvent => {\n                    const unprojection: IUnprojection =\n                        this._projection.unprojectFromEvent(\n                            event,\n                            this._container.element,\n                            render,\n                            reference,\n                            transform);\n\n                    return  {\n                        basicPoint: unprojection.basicPoint,\n                        latLon: unprojection.latLon,\n                        originalEvent: event,\n                        pixelPoint: unprojection.pixelPoint,\n                        target: <Viewer>this._eventEmitter,\n                        type: type,\n                    };\n                })\n            .subscribe(\n                (event: IViewerMouseEvent): void => {\n                    this._eventEmitter.fire(event.type, event);\n                });\n    }\n\n    public stopEmit(): void {\n        if (!this.started) {\n            return;\n        }\n\n        this._started = false;\n\n        this._bearingSubscription.unsubscribe();\n        this._currentNodeSubscription.unsubscribe();\n        this._moveSubscription.unsubscribe();\n        this._sequenceEdgesSubscription.unsubscribe();\n        this._spatialEdgesSubscription.unsubscribe();\n        this._viewerMouseEventSubscription.unsubscribe();\n\n        this._bearingSubscription = null;\n        this._currentNodeSubscription = null;\n        this._moveSubscription = null;\n        this._sequenceEdgesSubscription = null;\n        this._spatialEdgesSubscription = null;\n        this._viewerMouseEventSubscription = null;\n    }\n\n    public unproject$(pixelPoint: number[]): Observable<ILatLon> {\n        return Observable\n            .combineLatest(\n                this._container.renderService.renderCamera$,\n                this._navigator.stateService.reference$,\n                this._navigator.stateService.currentTransform$)\n            .first()\n            .map(\n                ([render, reference, transform]: [RenderCamera, ILatLonAlt, Transform]): ILatLon => {\n                    const unprojection: IUnprojection =\n                        this._projection.unprojectFromCanvas(\n                            pixelPoint,\n                            this._container.element,\n                            render,\n                            reference,\n                            transform);\n\n                    return unprojection.latLon;\n                });\n    }\n\n    private _mapMouseEvent$(type: string, mouseEvent$: Observable<MouseEvent>): Observable<[string, MouseEvent]> {\n        return mouseEvent$.map(\n            (event: MouseEvent): [string, MouseEvent] => {\n                return [type, event];\n            });\n    }\n}\n\nexport default Observer;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {ILatLon} from \"../API\";\nimport {\n    GeoCoords,\n    ILatLonAlt,\n    Transform,\n    ViewportCoords,\n} from \"../Geo\";\nimport {RenderCamera} from \"../Render\";\nimport {IUnprojection} from \"../Viewer\";\n\nexport class Projection {\n    private _geoCoords: GeoCoords;\n    private _viewportCoords: ViewportCoords;\n\n    constructor(geoCoords?: GeoCoords, viewportCoords?: ViewportCoords) {\n        this._geoCoords = !!geoCoords ? geoCoords : new GeoCoords();\n        this._viewportCoords = !!viewportCoords ? viewportCoords : new ViewportCoords();\n    }\n\n    public unprojectFromEvent(\n        event: MouseEvent | Touch,\n        container: HTMLElement,\n        renderCamera: RenderCamera,\n        reference: ILatLonAlt,\n        transform: Transform): IUnprojection {\n\n        const pixelPoint: number[] = this._viewportCoords.canvasPosition(event, container);\n\n        return this.unprojectFromCanvas(pixelPoint, container, renderCamera, reference, transform);\n    }\n\n    public unprojectFromCanvas(\n        pixelPoint: number[],\n        container: HTMLElement,\n        render: RenderCamera,\n        reference: ILatLonAlt,\n        transform: Transform): IUnprojection {\n\n        const canvasX: number = pixelPoint[0];\n        const canvasY: number = pixelPoint[1];\n\n        const [viewportX, viewportY]: number[] =\n            this._viewportCoords.canvasToViewport(canvasX, canvasY, container);\n\n        const point3d: THREE.Vector3 = new THREE.Vector3(viewportX, viewportY, 1)\n            .unproject(render.perspective);\n\n        let basicPoint: number[] = transform.projectBasic(point3d.toArray());\n        if (basicPoint[0] < 0 || basicPoint[0] > 1 || basicPoint[1] < 0 || basicPoint[1] > 1) {\n            basicPoint = null;\n        }\n\n        const direction3d: THREE.Vector3 = point3d.clone().sub(render.camera.position).normalize();\n        const dist: number = -2 / direction3d.z;\n\n        let latLon: ILatLon = null;\n        if (dist > 0 && dist < 100 && !!basicPoint) {\n            const point: THREE.Vector3 = direction3d.clone().multiplyScalar(dist).add(render.camera.position);\n            const latLonArray: number[] = this._geoCoords\n                .enuToGeodetic(\n                    point.x,\n                    point.y,\n                    point.z,\n                    reference.lat,\n                    reference.lon,\n                    reference.alt)\n                .slice(0, 2);\n\n            latLon = { lat: latLonArray[0], lon: latLonArray[1] };\n        }\n\n        const unprojection: IUnprojection = {\n            basicPoint: basicPoint,\n            latLon: latLon,\n            pixelPoint: [canvasX, canvasY],\n        };\n\n        return unprojection;\n    }\n}\n\nexport default Projection;\n",
     "export enum SpriteAlignment {\n    Center = 0,\n    Start = 1,\n    End = 2,\n}\n\nexport default SpriteAlignment;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\nimport * as vd from \"virtual-dom\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/startWith\";\n\nimport {ISpriteAtlas, SpriteAlignment} from \"../Viewer\";\n\nclass SpriteAtlas implements ISpriteAtlas {\n    private _image: HTMLImageElement;\n    private _texture: THREE.Texture;\n    private _json: ISprites;\n\n    public set json(value: ISprites) {\n        this._json = value;\n    }\n\n    public set image(value: HTMLImageElement) {\n        this._image = value;\n        this._texture = new THREE.Texture(this._image);\n        this._texture.minFilter = THREE.NearestFilter;\n    }\n\n    public get loaded(): boolean {\n        return !!(this._image && this._json);\n    }\n\n    public getGLSprite(name: string): THREE.Object3D {\n        if (!this.loaded) {\n            throw new Error(\"Sprites cannot be retrieved before the atlas is loaded.\");\n        }\n\n        let definition: ISprite = this._json[name];\n\n        if (!definition) {\n            console.warn(\"Sprite with key\" + name + \"does not exist in sprite definition.\");\n\n            return new THREE.Object3D();\n        }\n\n        let texture: THREE.Texture = this._texture.clone();\n        texture.needsUpdate = true;\n\n        let width: number = this._image.width;\n        let height: number = this._image.height;\n\n\n        texture.offset.x = definition.x / width;\n        texture.offset.y = (height - definition.y - definition.height) / height;\n        texture.repeat.x = definition.width / width;\n        texture.repeat.y = definition.height / height;\n\n        let material: THREE.SpriteMaterial = new THREE.SpriteMaterial({ map: texture });\n\n        return new THREE.Sprite(material);\n    }\n\n    public getDOMSprite(\n        name: string,\n        horizontalAlign?: SpriteAlignment,\n        verticalAlign?: SpriteAlignment): vd.VNode {\n\n        if (!this.loaded) {\n            throw new Error(\"Sprites cannot be retrieved before the atlas is loaded.\");\n        }\n\n        if (horizontalAlign == null) {\n            horizontalAlign = SpriteAlignment.Start;\n        }\n\n        if (verticalAlign == null) {\n            verticalAlign = SpriteAlignment.Start;\n        }\n\n        let definition: ISprite = this._json[name];\n\n        if (!definition) {\n            console.warn(\"Sprite with key\" + name + \"does not exist in sprite definition.\");\n\n            return vd.h(\"div\", {}, []);\n        }\n\n        let clipTop: number = definition.y;\n        let clipRigth: number = definition.x + definition.width;\n        let clipBottom: number = definition.y + definition.height;\n        let clipLeft: number = definition.x;\n\n        let left: number = -definition.x;\n        let top: number = -definition.y;\n\n        let height: number = this._image.height;\n        let width: number = this._image.width;\n\n        switch (horizontalAlign) {\n            case SpriteAlignment.Center:\n                left -= definition.width / 2;\n                break;\n            case SpriteAlignment.End:\n                left -= definition.width;\n                break;\n            case SpriteAlignment.Start:\n                break;\n            default:\n                break;\n        }\n\n        switch (verticalAlign) {\n            case SpriteAlignment.Center:\n                top -= definition.height / 2;\n                break;\n            case SpriteAlignment.End:\n                top -= definition.height;\n                break;\n            case SpriteAlignment.Start:\n                break;\n            default:\n                break;\n        }\n\n        let pixelRatioInverse: number = 1 / definition.pixelRatio;\n\n        clipTop *= pixelRatioInverse;\n        clipRigth *= pixelRatioInverse;\n        clipBottom *= pixelRatioInverse;\n        clipLeft *= pixelRatioInverse;\n        left *= pixelRatioInverse;\n        top *= pixelRatioInverse;\n        height *= pixelRatioInverse;\n        width *= pixelRatioInverse;\n\n        let properties: vd.createProperties = {\n            src: this._image.src,\n            style: {\n                clip: `rect(${clipTop}px, ${clipRigth}px, ${clipBottom}px, ${clipLeft}px)`,\n                height: `${height}px`,\n                left: `${left}px`,\n                position: \"absolute\",\n                top: `${top}px`,\n                width: `${width}px`,\n            },\n        };\n\n        return vd.h(\"img\", properties, []);\n    }\n}\n\ninterface ISprite {\n    width: number;\n    height: number;\n    x: number;\n    y: number;\n    pixelRatio: number;\n}\n\ninterface ISprites {\n    [key: string]: ISprite;\n}\n\ninterface ISpriteAtlasOperation {\n    (atlas: SpriteAtlas): SpriteAtlas;\n}\n\nexport class SpriteService {\n    private _retina: boolean;\n\n    private _spriteAtlasOperation$: Subject<ISpriteAtlasOperation>;\n    private _spriteAtlas$: Observable<SpriteAtlas>;\n\n    constructor(sprite?: string) {\n        this._retina = window.devicePixelRatio > 1;\n\n        this._spriteAtlasOperation$ = new Subject<ISpriteAtlasOperation>();\n\n        this._spriteAtlas$ = this._spriteAtlasOperation$\n            .startWith(\n                (atlas: SpriteAtlas): SpriteAtlas => {\n                    return atlas;\n                })\n            .scan(\n                (atlas: SpriteAtlas, operation: ISpriteAtlasOperation): SpriteAtlas => {\n                    return operation(atlas);\n                },\n                new SpriteAtlas())\n            .publishReplay(1)\n            .refCount();\n\n        this._spriteAtlas$.subscribe(() => { /*noop*/ });\n\n        if (sprite == null) {\n            return;\n        }\n\n        let format: string = this._retina ? \"@2x\" : \"\";\n\n        let imageXmlHTTP: XMLHttpRequest = new XMLHttpRequest();\n        imageXmlHTTP.open(\"GET\", sprite + format + \".png\", true);\n        imageXmlHTTP.responseType = \"arraybuffer\";\n        imageXmlHTTP.onload = () => {\n            let image: HTMLImageElement = new Image();\n            image.onload = () => {\n                this._spriteAtlasOperation$.next(\n                    (atlas: SpriteAtlas): SpriteAtlas => {\n                        atlas.image = image;\n\n                        return atlas;\n                    });\n            };\n\n            let blob: Blob = new Blob([imageXmlHTTP.response]);\n            image.src = window.URL.createObjectURL(blob);\n        };\n\n        imageXmlHTTP.onerror = (error: Event) => {\n            console.error(new Error(`Failed to fetch sprite sheet (${sprite}${format}.png)`));\n        };\n\n        imageXmlHTTP.send();\n\n        let jsonXmlHTTP: XMLHttpRequest = new XMLHttpRequest();\n        jsonXmlHTTP.open(\"GET\", sprite + format + \".json\", true);\n        jsonXmlHTTP.responseType = \"text\";\n        jsonXmlHTTP.onload = () => {\n            let json: ISprites = <ISprites>JSON.parse(jsonXmlHTTP.response);\n\n            this._spriteAtlasOperation$.next(\n                    (atlas: SpriteAtlas): SpriteAtlas => {\n                        atlas.json = json;\n\n                        return atlas;\n                    });\n        };\n\n        jsonXmlHTTP.onerror = (error: Event) => {\n            console.error(new Error(`Failed to fetch sheet (${sprite}${format}.json)`));\n        };\n\n        jsonXmlHTTP.send();\n    }\n\n    public get spriteAtlas$(): Observable<ISpriteAtlas> {\n        return this._spriteAtlas$;\n    }\n}\n\nexport default SpriteService;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\n\nimport {ILatLon} from \"../API\";\nimport {\n    GeoCoords,\n    ILatLonAlt,\n    Transform,\n    ViewportCoords,\n} from \"../Geo\";\nimport {RenderCamera} from \"../Render\";\nimport {IUnprojection} from \"../Viewer\";\n\nexport class Projection {\n    private _geoCoords: GeoCoords;\n    private _viewportCoords: ViewportCoords;\n\n    constructor(geoCoords?: GeoCoords, viewportCoords?: ViewportCoords) {\n        this._geoCoords = !!geoCoords ? geoCoords : new GeoCoords();\n        this._viewportCoords = !!viewportCoords ? viewportCoords : new ViewportCoords();\n    }\n\n    public unprojectFromEvent(\n        event: MouseEvent | Touch,\n        container: HTMLElement,\n        renderCamera: RenderCamera,\n        reference: ILatLonAlt,\n        transform: Transform): IUnprojection {\n\n        const pixelPoint: number[] = this._viewportCoords.canvasPosition(event, container);\n\n        return this.unprojectFromCanvas(pixelPoint, container, renderCamera, reference, transform);\n    }\n\n    public unprojectFromCanvas(\n        pixelPoint: number[],\n        container: HTMLElement,\n        render: RenderCamera,\n        reference: ILatLonAlt,\n        transform: Transform): IUnprojection {\n\n        const canvasX: number = pixelPoint[0];\n        const canvasY: number = pixelPoint[1];\n\n        const [viewportX, viewportY]: number[] =\n            this._viewportCoords.canvasToViewport(canvasX, canvasY, container);\n\n        const point3d: THREE.Vector3 = new THREE.Vector3(viewportX, viewportY, 1)\n            .unproject(render.perspective);\n\n        let basicPoint: number[] = transform.projectBasic(point3d.toArray());\n        if (basicPoint[0] < 0 || basicPoint[0] > 1 || basicPoint[1] < 0 || basicPoint[1] > 1) {\n            basicPoint = null;\n        }\n\n        const direction3d: THREE.Vector3 = point3d.clone().sub(render.camera.position).normalize();\n        const dist: number = -2 / direction3d.z;\n\n        let latLon: ILatLon = null;\n        if (dist > 0 && dist < 100 && !!basicPoint) {\n            const point: THREE.Vector3 = direction3d.clone().multiplyScalar(dist).add(render.camera.position);\n            const latLonArray: number[] = this._geoCoords\n                .enuToGeodetic(\n                    point.x,\n                    point.y,\n                    point.z,\n                    reference.lat,\n                    reference.lon,\n                    reference.alt)\n                .slice(0, 2);\n\n            latLon = { lat: latLonArray[0], lon: latLonArray[1] };\n        }\n\n        const unprojection: IUnprojection = {\n            basicPoint: basicPoint,\n            latLon: latLon,\n            pixelPoint: [canvasX, canvasY],\n        };\n\n        return unprojection;\n    }\n}\n\nexport default Projection;\n",
     "export enum SpriteAlignment {\n    Center = 0,\n    Start = 1,\n    End = 2,\n}\n\nexport default SpriteAlignment;\n",
     "/// <reference path=\"../../typings/index.d.ts\" />\n\nimport * as THREE from \"three\";\nimport * as vd from \"virtual-dom\";\n\nimport {Observable} from \"rxjs/Observable\";\nimport {Subject} from \"rxjs/Subject\";\n\nimport \"rxjs/add/operator/publishReplay\";\nimport \"rxjs/add/operator/scan\";\nimport \"rxjs/add/operator/startWith\";\n\nimport {ISpriteAtlas, SpriteAlignment} from \"../Viewer\";\n\nclass SpriteAtlas implements ISpriteAtlas {\n    private _image: HTMLImageElement;\n    private _texture: THREE.Texture;\n    private _json: ISprites;\n\n    public set json(value: ISprites) {\n        this._json = value;\n    }\n\n    public set image(value: HTMLImageElement) {\n        this._image = value;\n        this._texture = new THREE.Texture(this._image);\n        this._texture.minFilter = THREE.NearestFilter;\n    }\n\n    public get loaded(): boolean {\n        return !!(this._image && this._json);\n    }\n\n    public getGLSprite(name: string): THREE.Object3D {\n        if (!this.loaded) {\n            throw new Error(\"Sprites cannot be retrieved before the atlas is loaded.\");\n        }\n\n        let definition: ISprite = this._json[name];\n\n        if (!definition) {\n            console.warn(\"Sprite with key\" + name + \"does not exist in sprite definition.\");\n\n            return new THREE.Object3D();\n        }\n\n        let texture: THREE.Texture = this._texture.clone();\n        texture.needsUpdate = true;\n\n        let width: number = this._image.width;\n        let height: number = this._image.height;\n\n\n        texture.offset.x = definition.x / width;\n        texture.offset.y = (height - definition.y - definition.height) / height;\n        texture.repeat.x = definition.width / width;\n        texture.repeat.y = definition.height / height;\n\n        let material: THREE.SpriteMaterial = new THREE.SpriteMaterial({ map: texture });\n\n        return new THREE.Sprite(material);\n    }\n\n    public getDOMSprite(\n        name: string,\n        horizontalAlign?: SpriteAlignment,\n        verticalAlign?: SpriteAlignment): vd.VNode {\n\n        if (!this.loaded) {\n            throw new Error(\"Sprites cannot be retrieved before the atlas is loaded.\");\n        }\n\n        if (horizontalAlign == null) {\n            horizontalAlign = SpriteAlignment.Start;\n        }\n\n        if (verticalAlign == null) {\n            verticalAlign = SpriteAlignment.Start;\n        }\n\n        let definition: ISprite = this._json[name];\n\n        if (!definition) {\n            console.warn(\"Sprite with key\" + name + \"does not exist in sprite definition.\");\n\n            return vd.h(\"div\", {}, []);\n        }\n\n        let clipTop: number = definition.y;\n        let clipRigth: number = definition.x + definition.width;\n        let clipBottom: number = definition.y + definition.height;\n        let clipLeft: number = definition.x;\n\n        let left: number = -definition.x;\n        let top: number = -definition.y;\n\n        let height: number = this._image.height;\n        let width: number = this._image.width;\n\n        switch (horizontalAlign) {\n            case SpriteAlignment.Center:\n                left -= definition.width / 2;\n                break;\n            case SpriteAlignment.End:\n                left -= definition.width;\n                break;\n            case SpriteAlignment.Start:\n                break;\n            default:\n                break;\n        }\n\n        switch (verticalAlign) {\n            case SpriteAlignment.Center:\n                top -= definition.height / 2;\n                break;\n            case SpriteAlignment.End:\n                top -= definition.height;\n                break;\n            case SpriteAlignment.Start:\n                break;\n            default:\n                break;\n        }\n\n        let pixelRatioInverse: number = 1 / definition.pixelRatio;\n\n        clipTop *= pixelRatioInverse;\n        clipRigth *= pixelRatioInverse;\n        clipBottom *= pixelRatioInverse;\n        clipLeft *= pixelRatioInverse;\n        left *= pixelRatioInverse;\n        top *= pixelRatioInverse;\n        height *= pixelRatioInverse;\n        width *= pixelRatioInverse;\n\n        let properties: vd.createProperties = {\n            src: this._image.src,\n            style: {\n                clip: `rect(${clipTop}px, ${clipRigth}px, ${clipBottom}px, ${clipLeft}px)`,\n                height: `${height}px`,\n                left: `${left}px`,\n                position: \"absolute\",\n                top: `${top}px`,\n                width: `${width}px`,\n            },\n        };\n\n        return vd.h(\"img\", properties, []);\n    }\n}\n\ninterface ISprite {\n    width: number;\n    height: number;\n    x: number;\n    y: number;\n    pixelRatio: number;\n}\n\ninterface ISprites {\n    [key: string]: ISprite;\n}\n\ninterface ISpriteAtlasOperation {\n    (atlas: SpriteAtlas): SpriteAtlas;\n}\n\nexport class SpriteService {\n    private _retina: boolean;\n\n    private _spriteAtlasOperation$: Subject<ISpriteAtlasOperation>;\n    private _spriteAtlas$: Observable<SpriteAtlas>;\n\n    constructor(sprite?: string) {\n        this._retina = window.devicePixelRatio > 1;\n\n        this._spriteAtlasOperation$ = new Subject<ISpriteAtlasOperation>();\n\n        this._spriteAtlas$ = this._spriteAtlasOperation$\n            .startWith(\n                (atlas: SpriteAtlas): SpriteAtlas => {\n                    return atlas;\n                })\n            .scan(\n                (atlas: SpriteAtlas, operation: ISpriteAtlasOperation): SpriteAtlas => {\n                    return operation(atlas);\n                },\n                new SpriteAtlas())\n            .publishReplay(1)\n            .refCount();\n\n        this._spriteAtlas$.subscribe(() => { /*noop*/ });\n\n        if (sprite == null) {\n            return;\n        }\n\n        let format: string = this._retina ? \"@2x\" : \"\";\n\n        let imageXmlHTTP: XMLHttpRequest = new XMLHttpRequest();\n        imageXmlHTTP.open(\"GET\", sprite + format + \".png\", true);\n        imageXmlHTTP.responseType = \"arraybuffer\";\n        imageXmlHTTP.onload = () => {\n            let image: HTMLImageElement = new Image();\n            image.onload = () => {\n                this._spriteAtlasOperation$.next(\n                    (atlas: SpriteAtlas): SpriteAtlas => {\n                        atlas.image = image;\n\n                        return atlas;\n                    });\n            };\n\n            let blob: Blob = new Blob([imageXmlHTTP.response]);\n            image.src = window.URL.createObjectURL(blob);\n        };\n\n        imageXmlHTTP.onerror = (error: Event) => {\n            console.error(new Error(`Failed to fetch sprite sheet (${sprite}${format}.png)`));\n        };\n\n        imageXmlHTTP.send();\n\n        let jsonXmlHTTP: XMLHttpRequest = new XMLHttpRequest();\n        jsonXmlHTTP.open(\"GET\", sprite + format + \".json\", true);\n        jsonXmlHTTP.responseType = \"text\";\n        jsonXmlHTTP.onload = () => {\n            let json: ISprites = <ISprites>JSON.parse(jsonXmlHTTP.response);\n\n            this._spriteAtlasOperation$.next(\n                    (atlas: SpriteAtlas): SpriteAtlas => {\n                        atlas.json = json;\n\n                        return atlas;\n                    });\n        };\n\n        jsonXmlHTTP.onerror = (error: Event) => {\n            console.error(new Error(`Failed to fetch sheet (${sprite}${format}.json)`));\n        };\n\n        jsonXmlHTTP.send();\n    }\n\n    public get spriteAtlas$(): Observable<ISpriteAtlas> {\n        return this._spriteAtlas$;\n    }\n}\n\nexport default SpriteService;\n",
index e6c138d416e813996be43b62fd492d3edafb7218..396a4f6c02924a89f41d6b092246fbd487aa1a86 100644 (file)
@@ -1,38 +1,39 @@
-!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Mapillary=t()}}(function(){var t;return function t(e,r,n){function i(a,s){if(!r[a]){if(!e[a]){var c="function"==typeof require&&require;if(!s&&c)return c(a,!0);if(o)return o(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var h=r[a]={exports:{}};e[a][0].call(h.exports,function(t){var r=e[a][1][t];return i(r?r:t)},h,h.exports,t,e,r,n)}return r[a].exports}for(var o="function"==typeof require&&require,a=0;a<n.length;a++)i(n[a]);return i}({1:[function(t,e,r){"use strict";function n(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[e-2]?2:"="===t[e-1]?1:0}function i(t){return 3*t.length/4-n(t)}function o(t){var e,r,i,o,a,s,c=t.length;a=n(t),s=new l(3*c/4-a),i=a>0?c-4:c;var u=0;for(e=0,r=0;e<i;e+=4,r+=3)o=h[t.charCodeAt(e)]<<18|h[t.charCodeAt(e+1)]<<12|h[t.charCodeAt(e+2)]<<6|h[t.charCodeAt(e+3)],s[u++]=o>>16&255,s[u++]=o>>8&255,s[u++]=255&o;return 2===a?(o=h[t.charCodeAt(e)]<<2|h[t.charCodeAt(e+1)]>>4,s[u++]=255&o):1===a&&(o=h[t.charCodeAt(e)]<<10|h[t.charCodeAt(e+1)]<<4|h[t.charCodeAt(e+2)]>>2,s[u++]=o>>8&255,s[u++]=255&o),s}function a(t){return u[t>>18&63]+u[t>>12&63]+u[t>>6&63]+u[63&t]}function s(t,e,r){for(var n,i=[],o=e;o<r;o+=3)n=(t[o]<<16)+(t[o+1]<<8)+t[o+2],i.push(a(n));return i.join("")}function c(t){for(var e,r=t.length,n=r%3,i="",o=[],a=0,c=r-n;a<c;a+=16383)o.push(s(t,a,a+16383>c?c:a+16383));return 1===n?(e=t[r-1],i+=u[e>>2],i+=u[e<<4&63],i+="=="):2===n&&(e=(t[r-2]<<8)+t[r-1],i+=u[e>>10],i+=u[e>>4&63],i+=u[e<<2&63],i+="="),o.push(i),o.join("")}r.byteLength=i,r.toByteArray=o,r.fromByteArray=c;for(var u=[],h=[],l="undefined"!=typeof Uint8Array?Uint8Array:Array,p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=0,d=p.length;f<d;++f)u[f]=p[f],h[p.charCodeAt(f)]=f;h["-".charCodeAt(0)]=62,h["_".charCodeAt(0)]=63},{}],2:[function(t,e,r){},{}],3:[function(t,e,r){e.exports=function(t){var e=String.prototype.split,r=/()??/.exec("")[1]===t;return function(n,i,o){if("[object RegExp]"!==Object.prototype.toString.call(i))return e.call(n,i,o);var a,s,c,u,h=[],l=(i.ignoreCase?"i":"")+(i.multiline?"m":"")+(i.extended?"x":"")+(i.sticky?"y":""),p=0,i=new RegExp(i.source,l+"g");for(n+="",r||(a=new RegExp("^"+i.source+"$(?!\\s)",l)),o=o===t?-1>>>0:o>>>0;(s=i.exec(n))&&!((c=s.index+s[0].length)>p&&(h.push(n.slice(p,s.index)),!r&&s.length>1&&s[0].replace(a,function(){for(var e=1;e<arguments.length-2;e++)arguments[e]===t&&(s[e]=t)}),s.length>1&&s.index<n.length&&Array.prototype.push.apply(h,s.slice(1)),u=s[0].length,p=c,h.length>=o));)i.lastIndex===s.index&&i.lastIndex++;return p===n.length?!u&&i.test("")||h.push(""):h.push(n.slice(p)),h.length>o?h.slice(0,o):h}}()},{}],4:[function(t,e,r){function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function o(t){if(l===setTimeout)return setTimeout(t,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(t,0);try{return l(t,0)}catch(e){try{return l.call(null,t,0)}catch(e){return l.call(this,t,0)}}}function a(t){if(p===clearTimeout)return clearTimeout(t);if((p===i||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(t);try{return p(t)}catch(e){try{return p.call(null,t)}catch(e){return p.call(this,t)}}}function s(){v&&d&&(v=!1,d.length?m=d.concat(m):g=-1,m.length&&c())}function c(){if(!v){var t=o(s);v=!0;for(var e=m.length;e;){for(d=m,m=[];++g<e;)d&&d[g].run();g=-1,e=m.length}d=null,v=!1,a(t)}}function u(t,e){this.fun=t,this.array=e}function h(){}var l,p,f=e.exports={};!function(){try{l="function"==typeof setTimeout?setTimeout:n}catch(t){l=n}try{p="function"==typeof clearTimeout?clearTimeout:i}catch(t){p=i}}();var d,m=[],v=!1,g=-1;f.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];m.push(new u(t,e)),1!==m.length||v||o(c)},u.prototype.run=function(){this.fun.apply(null,this.array)},f.title="browser",f.browser=!0,f.env={},f.argv=[],f.version="",f.versions={},f.on=h,f.addListener=h,f.once=h,f.off=h,f.removeListener=h,f.removeAllListeners=h,f.emit=h,f.binding=function(t){throw new Error("process.binding is not supported")},f.cwd=function(){return"/"},f.chdir=function(t){throw new Error("process.chdir is not supported")},f.umask=function(){return 0}},{}],5:[function(t,e,r){(function(e){"use strict";function n(){return o.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function i(t,e){if(n()<e)throw new RangeError("Invalid typed array length");return o.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e),t.__proto__=o.prototype):(null===t&&(t=new o(e)),t.length=e),t}function o(t,e,r){if(!(o.TYPED_ARRAY_SUPPORT||this instanceof o))return new o(t,e,r);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return u(this,t)}return a(this,t,e,r)}function a(t,e,r,n){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?p(t,e,r,n):"string"==typeof e?h(t,e,r):f(t,e)}function s(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function c(t,e,r,n){return s(e),e<=0?i(t,e):void 0!==r?"string"==typeof n?i(t,e).fill(r,n):i(t,e).fill(r):i(t,e)}function u(t,e){if(s(e),t=i(t,e<0?0:0|d(e)),!o.TYPED_ARRAY_SUPPORT)for(var r=0;r<e;++r)t[r]=0;return t}function h(t,e,r){if("string"==typeof r&&""!==r||(r="utf8"),!o.isEncoding(r))throw new TypeError('"encoding" must be a valid string encoding');var n=0|v(e,r);t=i(t,n);var a=t.write(e,r);return a!==n&&(t=t.slice(0,a)),t}function l(t,e){var r=e.length<0?0:0|d(e.length);t=i(t,r);for(var n=0;n<r;n+=1)t[n]=255&e[n];return t}function p(t,e,r,n){if(e.byteLength,r<0||e.byteLength<r)throw new RangeError("'offset' is out of bounds");if(e.byteLength<r+(n||0))throw new RangeError("'length' is out of bounds");return e=void 0===r&&void 0===n?new Uint8Array(e):void 0===n?new Uint8Array(e,r):new Uint8Array(e,r,n),o.TYPED_ARRAY_SUPPORT?(t=e,t.__proto__=o.prototype):t=l(t,e),t}function f(t,e){if(o.isBuffer(e)){var r=0|d(e.length);return t=i(t,r),0===t.length?t:(e.copy(t,0,0,r),t)}if(e){if("undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return"number"!=typeof e.length||Y(e.length)?i(t,0):l(t,e);if("Buffer"===e.type&&J(e.data))return l(t,e.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function d(t){if(t>=n())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+n().toString(16)+" bytes");return 0|t}function m(t){return+t!=t&&(t=0),o.alloc(+t)}function v(t,e){if(o.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return V(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return q(t).length;default:if(n)return V(t).length;e=(""+e).toLowerCase(),n=!0}}function g(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if(r>>>=0,e>>>=0,r<=e)return"";for(t||(t="utf8");;)switch(t){case"hex":return R(this,e,r);case"utf8":case"utf-8":return O(this,e,r);case"ascii":return A(this,e,r);case"latin1":case"binary":return j(this,e,r);case"base64":return C(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function y(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function b(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=o.from(e,n)),o.isBuffer(e))return 0===e.length?-1:_(t,e,r,n,i);if("number"==typeof e)return e&=255,o.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):_(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function _(t,e,r,n,i){function o(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}var a=1,s=t.length,c=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;a=2,s/=2,c/=2,r/=2}var u;if(i){var h=-1;for(u=r;u<s;u++)if(o(t,u)===o(e,h===-1?0:u-h)){if(h===-1&&(h=u),u-h+1===c)return h*a}else h!==-1&&(u-=u-h),h=-1}else for(r+c>s&&(r=s-c),u=r;u>=0;u--){for(var l=!0,p=0;p<c;p++)if(o(t,u+p)!==o(e,p)){l=!1;break}if(l)return u}return-1}function x(t,e,r,n){r=Number(r)||0;var i=t.length-r;n?(n=Number(n))>i&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a<n;++a){var s=parseInt(e.substr(2*a,2),16);if(isNaN(s))return a;t[r+a]=s}return a}function w(t,e,r,n){return X(V(e,t.length-r),t,r,n)}function S(t,e,r,n){return X(H(e),t,r,n)}function M(t,e,r,n){return S(t,e,r,n)}function E(t,e,r,n){return X(q(e),t,r,n)}function T(t,e,r,n){return X(W(e,t.length-r),t,r,n)}function C(t,e,r){return 0===e&&r===t.length?K.fromByteArray(t):K.fromByteArray(t.slice(e,r))}function O(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i<r;){var o=t[i],a=null,s=o>239?4:o>223?3:o>191?2:1;if(i+s<=r){var c,u,h,l;switch(s){case 1:o<128&&(a=o);break;case 2:c=t[i+1],128==(192&c)&&(l=(31&o)<<6|63&c)>127&&(a=l);break;case 3:c=t[i+1],u=t[i+2],128==(192&c)&&128==(192&u)&&(l=(15&o)<<12|(63&c)<<6|63&u)>2047&&(l<55296||l>57343)&&(a=l);break;case 4:c=t[i+1],u=t[i+2],h=t[i+3],128==(192&c)&&128==(192&u)&&128==(192&h)&&(l=(15&o)<<18|(63&c)<<12|(63&u)<<6|63&h)>65535&&l<1114112&&(a=l)}}null===a?(a=65533,s=1):a>65535&&(a-=65536,n.push(a>>>10&1023|55296),a=56320|1023&a),n.push(a),i+=s}return P(n)}function P(t){var e=t.length;if(e<=Q)return String.fromCharCode.apply(String,t);for(var r="",n=0;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=Q));return r}function A(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function j(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function R(t,e,r){var n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);for(var i="",o=e;o<r;++o)i+=G(t[o]);return i}function L(t,e,r){for(var n=t.slice(e,r),i="",o=0;o<n.length;o+=2)i+=String.fromCharCode(n[o]+256*n[o+1]);return i}function N(t,e,r){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>r)throw new RangeError("Trying to access beyond buffer length")}function I(t,e,r,n,i,a){if(!o.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||e<a)throw new RangeError('"value" argument is out of bounds');if(r+n>t.length)throw new RangeError("Index out of range")}function D(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i<o;++i)t[r+i]=(e&255<<8*(n?i:1-i))>>>8*(n?i:1-i)}function k(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i<o;++i)t[r+i]=e>>>8*(n?i:3-i)&255}function F(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function U(t,e,r,n,i){return i||F(t,e,r,4,3.4028234663852886e38,-3.4028234663852886e38),Z.write(t,e,r,n,23,4),r+4}function B(t,e,r,n,i){return i||F(t,e,r,8,1.7976931348623157e308,-1.7976931348623157e308),Z.write(t,e,r,n,52,8),r+8}function z(t){if(t=$(t).replace(tt,""),t.length<2)return"";for(;t.length%4!=0;)t+="=";return t}function $(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function G(t){return t<16?"0"+t.toString(16):t.toString(16)}function V(t,e){e=e||1/0;for(var r,n=t.length,i=null,o=[],a=0;a<n;++a){if((r=t.charCodeAt(a))>55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function H(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}function W(t,e){for(var r,n,i,o=[],a=0;a<t.length&&!((e-=2)<0);++a)r=t.charCodeAt(a),n=r>>8,i=r%256,o.push(i),o.push(n);return o}function q(t){return K.toByteArray(z(t))}function X(t,e,r,n){for(var i=0;i<n&&!(i+r>=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function Y(t){return t!==t}var K=t("base64-js"),Z=t("ieee754"),J=t("isarray");r.Buffer=o,r.SlowBuffer=m,r.INSPECT_MAX_BYTES=50,o.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}(),r.kMaxLength=n(),o.poolSize=8192,o._augment=function(t){return t.__proto__=o.prototype,t},o.from=function(t,e,r){return a(null,t,e,r)},o.TYPED_ARRAY_SUPPORT&&(o.prototype.__proto__=Uint8Array.prototype,o.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&o[Symbol.species]===o&&Object.defineProperty(o,Symbol.species,{value:null,configurable:!0})),o.alloc=function(t,e,r){return c(null,t,e,r)},o.allocUnsafe=function(t){return u(null,t)},o.allocUnsafeSlow=function(t){return u(null,t)},o.isBuffer=function(t){return!(null==t||!t._isBuffer)},o.compare=function(t,e){if(!o.isBuffer(t)||!o.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var r=t.length,n=e.length,i=0,a=Math.min(r,n);i<a;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0},o.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},o.concat=function(t,e){if(!J(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return o.alloc(0);var r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;var n=o.allocUnsafe(e),i=0;for(r=0;r<t.length;++r){var a=t[r];if(!o.isBuffer(a))throw new TypeError('"list" argument must be an Array of Buffers');a.copy(n,i),i+=a.length}return n},o.byteLength=v,o.prototype._isBuffer=!0,o.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)y(this,e,e+1);return this},o.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)y(this,e,e+3),y(this,e+1,e+2);return this},o.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)y(this,e,e+7),y(this,e+1,e+6),y(this,e+2,e+5),y(this,e+3,e+4);return this},o.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?O(this,0,t):g.apply(this,arguments)},o.prototype.equals=function(t){if(!o.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===o.compare(this,t)},o.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),"<Buffer "+t+">"},o.prototype.compare=function(t,e,r,n,i){if(!o.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(e>>>=0,r>>>=0,n>>>=0,i>>>=0,this===t)return 0;for(var a=i-n,s=r-e,c=Math.min(a,s),u=this.slice(n,i),h=t.slice(e,r),l=0;l<c;++l)if(u[l]!==h[l]){a=u[l],s=h[l];break}return a<s?-1:s<a?1:0},o.prototype.includes=function(t,e,r){return this.indexOf(t,e,r)!==-1},o.prototype.indexOf=function(t,e,r){return b(this,t,e,r,!0)},o.prototype.lastIndexOf=function(t,e,r){return b(this,t,e,r,!1)},o.prototype.write=function(t,e,r,n){if(void 0===e)n="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(r)?(r|=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return x(this,t,e,r);case"utf8":case"utf-8":return w(this,t,e,r);case"ascii":return S(this,t,e,r);case"latin1":case"binary":return M(this,t,e,r);case"base64":return E(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Q=4096;o.prototype.slice=function(t,e){var r=this.length;t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);var n;if(o.TYPED_ARRAY_SUPPORT)n=this.subarray(t,e),n.__proto__=o.prototype;else{var i=e-t;n=new o(i,void 0);for(var a=0;a<i;++a)n[a]=this[a+t]}return n},o.prototype.readUIntLE=function(t,e,r){t|=0,e|=0,r||N(t,e,this.length);for(var n=this[t],i=1,o=0;++o<e&&(i*=256);)n+=this[t+o]*i;return n},o.prototype.readUIntBE=function(t,e,r){t|=0,e|=0,r||N(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},o.prototype.readUInt8=function(t,e){return e||N(t,1,this.length),this[t]},o.prototype.readUInt16LE=function(t,e){return e||N(t,2,this.length),this[t]|this[t+1]<<8},o.prototype.readUInt16BE=function(t,e){return e||N(t,2,this.length),this[t]<<8|this[t+1]},o.prototype.readUInt32LE=function(t,e){return e||N(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},o.prototype.readUInt32BE=function(t,e){return e||N(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},o.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||N(t,e,this.length);for(var n=this[t],i=1,o=0;++o<e&&(i*=256);)n+=this[t+o]*i;return i*=128,n>=i&&(n-=Math.pow(2,8*e)),n},o.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||N(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},o.prototype.readInt8=function(t,e){return e||N(t,1,this.length),128&this[t]?(255-this[t]+1)*-1:this[t]},o.prototype.readInt16LE=function(t,e){e||N(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt16BE=function(t,e){e||N(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt32LE=function(t,e){return e||N(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},o.prototype.readInt32BE=function(t,e){return e||N(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},o.prototype.readFloatLE=function(t,e){return e||N(t,4,this.length),Z.read(this,t,!0,23,4)},o.prototype.readFloatBE=function(t,e){return e||N(t,4,this.length),Z.read(this,t,!1,23,4)},o.prototype.readDoubleLE=function(t,e){return e||N(t,8,this.length),Z.read(this,t,!0,52,8)},o.prototype.readDoubleBE=function(t,e){return e||N(t,8,this.length),Z.read(this,t,!1,52,8)},o.prototype.writeUIntLE=function(t,e,r,n){if(t=+t,e|=0,r|=0,!n){I(this,t,e,r,Math.pow(2,8*r)-1,0)}var i=1,o=0;for(this[e]=255&t;++o<r&&(i*=256);)this[e+o]=t/i&255;return e+r},o.prototype.writeUIntBE=function(t,e,r,n){if(t=+t,e|=0,r|=0,!n){I(this,t,e,r,Math.pow(2,8*r)-1,0)}var i=r-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+r},o.prototype.writeUInt8=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,1,255,0),o.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},o.prototype.writeUInt16LE=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,2,65535,0),o.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):D(this,t,e,!0),e+2},o.prototype.writeUInt16BE=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,2,65535,0),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):D(this,t,e,!1),e+2},o.prototype.writeUInt32LE=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,4,4294967295,0),o.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):k(this,t,e,!0),e+4},o.prototype.writeUInt32BE=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,4,4294967295,0),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):k(this,t,e,!1),e+4},o.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);I(this,t,e,r,i-1,-i)}var o=0,a=1,s=0;for(this[e]=255&t;++o<r&&(a*=256);)t<0&&0===s&&0!==this[e+o-1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+r},o.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);I(this,t,e,r,i-1,-i)}var o=r-1,a=1,s=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+r},o.prototype.writeInt8=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,1,127,-128),o.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},o.prototype.writeInt16LE=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,2,32767,-32768),o.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):D(this,t,e,!0),e+2},o.prototype.writeInt16BE=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,2,32767,-32768),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):D(this,t,e,!1),e+2},o.prototype.writeInt32LE=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,4,2147483647,-2147483648),o.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):k(this,t,e,!0),e+4},o.prototype.writeInt32BE=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):k(this,t,e,!1),e+4},o.prototype.writeFloatLE=function(t,e,r){return U(this,t,e,!0,r)},o.prototype.writeFloatBE=function(t,e,r){return U(this,t,e,!1,r)},o.prototype.writeDoubleLE=function(t,e,r){return B(this,t,e,!0,r)},o.prototype.writeDoubleBE=function(t,e,r){return B(this,t,e,!1,r)},o.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);var i,a=n-r;if(this===t&&r<e&&e<n)for(i=a-1;i>=0;--i)t[i+e]=this[i+r];else if(a<1e3||!o.TYPED_ARRAY_SUPPORT)for(i=0;i<a;++i)t[i+e]=this[i+r];else Uint8Array.prototype.set.call(t,this.subarray(r,r+a),e);return a},o.prototype.fill=function(t,e,r,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!o.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<r)throw new RangeError("Out of range index");if(r<=e)return this;e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0);var a;if("number"==typeof t)for(a=e;a<r;++a)this[a]=t;else{var s=o.isBuffer(t)?t:V(new o(t,n).toString()),c=s.length;for(a=0;a<r-e;++a)this[a+e]=s[a%c]}return this};var tt=/[^+\/0-9A-Za-z-_]/g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":1,ieee754:15,isarray:19}],6:[function(t,e,r){"use strict";function n(t,e,r){r=r||2;var n=e&&e.length,o=n?e[0]*r:t.length,s=i(t,0,o,r,!0),c=[];if(!s)return c;var u,h,p,f,d,m,v;if(n&&(s=l(t,e,s,r)),t.length>80*r){u=p=t[0],h=f=t[1];for(var g=r;g<o;g+=r)d=t[g],m=t[g+1],d<u&&(u=d),m<h&&(h=m),d>p&&(p=d),m>f&&(f=m);v=Math.max(p-u,f-h)}return a(s,c,r,u,h,v),c}function i(t,e,r,n,i){var o,a;if(i===j(t,e,r,n)>0)for(o=e;o<r;o+=n)a=O(o,t[o],t[o+1],a);else for(o=r-n;o>=e;o-=n)a=O(o,t[o],t[o+1],a);return a&&w(a,a.next)&&(P(a),a=a.next),a}function o(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!w(n,n.next)&&0!==x(n.prev,n,n.next))n=n.next;else{if(P(n),(n=e=n.prev)===n.next)return null;r=!0}}while(r||n!==e);return e}function a(t,e,r,n,i,l,p){if(t){!p&&l&&m(t,n,i,l);for(var f,d,v=t;t.prev!==t.next;)if(f=t.prev,d=t.next,l?c(t,n,i,l):s(t))e.push(f.i/r),e.push(t.i/r),e.push(d.i/r),P(t),t=d.next,v=d.next;else if((t=d)===v){p?1===p?(t=u(t,e,r),a(t,e,r,n,i,l,2)):2===p&&h(t,e,r,n,i,l):a(o(t),e,r,n,i,l,1);break}}}function s(t){var e=t.prev,r=t,n=t.next;if(x(e,r,n)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(b(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)&&x(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function c(t,e,r,n){var i=t.prev,o=t,a=t.next;if(x(i,o,a)>=0)return!1;for(var s=i.x<o.x?i.x<a.x?i.x:a.x:o.x<a.x?o.x:a.x,c=i.y<o.y?i.y<a.y?i.y:a.y:o.y<a.y?o.y:a.y,u=i.x>o.x?i.x>a.x?i.x:a.x:o.x>a.x?o.x:a.x,h=i.y>o.y?i.y>a.y?i.y:a.y:o.y>a.y?o.y:a.y,l=g(s,c,e,r,n),p=g(u,h,e,r,n),f=t.nextZ;f&&f.z<=p;){if(f!==t.prev&&f!==t.next&&b(i.x,i.y,o.x,o.y,a.x,a.y,f.x,f.y)&&x(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(f=t.prevZ;f&&f.z>=l;){if(f!==t.prev&&f!==t.next&&b(i.x,i.y,o.x,o.y,a.x,a.y,f.x,f.y)&&x(f.prev,f,f.next)>=0)return!1;f=f.prevZ}return!0}function u(t,e,r){var n=t;do{var i=n.prev,o=n.next.next;!w(i,o)&&S(i,n,n.next,o)&&E(i,o)&&E(o,i)&&(e.push(i.i/r),e.push(n.i/r),e.push(o.i/r),P(n),P(n.next),n=t=o),n=n.next}while(n!==t);return n}function h(t,e,r,n,i,s){var c=t;do{for(var u=c.next.next;u!==c.prev;){if(c.i!==u.i&&_(c,u)){var h=C(c,u);return c=o(c,c.next),h=o(h,h.next),a(c,e,r,n,i,s),void a(h,e,r,n,i,s)}u=u.next}c=c.next}while(c!==t)}function l(t,e,r,n){var a,s,c,u,h,l=[];for(a=0,s=e.length;a<s;a++)c=e[a]*n,u=a<s-1?e[a+1]*n:t.length,h=i(t,c,u,n,!1),h===h.next&&(h.steiner=!0),l.push(y(h));for(l.sort(p),a=0;a<l.length;a++)f(l[a],r),r=o(r,r.next);return r}function p(t,e){return t.x-e.x}function f(t,e){if(e=d(t,e)){var r=C(e,t);o(r,r.next)}}function d(t,e){var r,n=e,i=t.x,o=t.y,a=-(1/0);do{if(o<=n.y&&o>=n.next.y){var s=n.x+(o-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>a){if(a=s,s===i){if(o===n.y)return n;if(o===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(i===a)return r.prev;var c,u=r,h=r.x,l=r.y,p=1/0;for(n=r.next;n!==u;)i>=n.x&&n.x>=h&&b(o<l?i:a,o,h,l,o<l?a:i,o,n.x,n.y)&&((c=Math.abs(o-n.y)/(i-n.x))<p||c===p&&n.x>r.x)&&E(n,t)&&(r=n,p=c),n=n.next;return r}function m(t,e,r,n){var i=t;do{null===i.z&&(i.z=g(i.x,i.y,e,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,v(i)}function v(t){var e,r,n,i,o,a,s,c,u=1;do{for(r=t,t=null,o=null,a=0;r;){for(a++,n=r,s=0,e=0;e<u&&(s++,n=n.nextZ);e++);for(c=u;s>0||c>0&&n;)0===s?(i=n,n=n.nextZ,c--):0!==c&&n?r.z<=n.z?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,c--):(i=r,r=r.nextZ,s--),o?o.nextZ=i:t=i,i.prevZ=o,o=i;r=n}o.nextZ=null,u*=2}while(a>1);return t}function g(t,e,r,n,i){return t=32767*(t-r)/i,e=32767*(e-n)/i,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do{e.x<r.x&&(r=e),e=e.next}while(e!==t);return r}function b(t,e,r,n,i,o,a,s){return(i-a)*(e-s)-(t-a)*(o-s)>=0&&(t-a)*(n-s)-(r-a)*(e-s)>=0&&(r-a)*(o-s)-(i-a)*(n-s)>=0}function _(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!M(t,e)&&E(t,e)&&E(e,t)&&T(t,e)}function x(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function w(t,e){return t.x===e.x&&t.y===e.y}function S(t,e,r,n){return!!(w(t,e)&&w(r,n)||w(t,n)&&w(r,e))||x(t,e,r)>0!=x(t,e,n)>0&&x(r,n,t)>0!=x(r,n,e)>0}function M(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&S(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function E(t,e){return x(t.prev,t,t.next)<0?x(t,e,t.next)>=0&&x(t,t.prev,e)>=0:x(t,e,t.prev)<0||x(t,t.next,e)<0}function T(t,e){var r=t,n=!1,i=(t.x+e.x)/2,o=(t.y+e.y)/2;do{r.y>o!=r.next.y>o&&i<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}function C(t,e){var r=new A(t.i,t.x,t.y),n=new A(e.i,e.x,e.y),i=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=i,i.prev=r,n.next=r,r.prev=n,o.next=n,n.prev=o,n}function O(t,e,r,n){var i=new A(t,e,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function P(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function A(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function j(t,e,r,n){for(var i=0,o=e,a=r-n;o<r;o+=n)i+=(t[a]-t[o])*(t[o+1]+t[a+1]),a=o;return i}e.exports=n,n.deviation=function(t,e,r,n){var i=e&&e.length,o=i?e[0]*r:t.length,a=Math.abs(j(t,0,o,r));if(i)for(var s=0,c=e.length;s<c;s++){var u=e[s]*r,h=s<c-1?e[s+1]*r:t.length;a-=Math.abs(j(t,u,h,r))}var l=0;for(s=0;s<n.length;s+=3){var p=n[s]*r,f=n[s+1]*r,d=n[s+2]*r;l+=Math.abs((t[p]-t[d])*(t[f+1]-t[p+1])-(t[p]-t[f])*(t[d+1]-t[p+1]))}return 0===a&&0===l?0:Math.abs((l-a)/a)},n.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},n=0,i=0;i<t.length;i++){for(var o=0;o<t[i].length;o++)for(var a=0;a<e;a++)r.vertices.push(t[i][o][a]);i>0&&(n+=t[i-1].length,r.holes.push(n))}return r}},{}],7:[function(t,e,r){"use strict";function n(t){var e=t[o];return e||(e=t[o]={}),e}var i=t("individual/one-version");i("ev-store","7");var o="__EV_STORE_KEY@7";e.exports=n},{"individual/one-version":17}],8:[function(t,e,r){"use strict";function n(t,e){var r;for(r in e)t[r]=e[r];return t}function i(t,e){if(this._jsongUrl=t,"number"==typeof e){e={timeout:e}}this._config=n({timeout:15e3,headers:{}},e||{})}var o=t("./request"),a=t("./buildQueryObject");Array.isArray;i.prototype={constructor:i,buildQueryObject:a,get:function(t){var e=this.buildQueryObject(this._jsongUrl,"GET",{paths:t,method:"get"}),r=n(e,this._config);return o("GET",r,this)},set:function(t){var e=this.buildQueryObject(this._jsongUrl,"POST",{jsonGraph:t,method:"set"}),r=n(e,this._config);return r.headers["Content-Type"]="application/x-www-form-urlencoded",o("POST",r,this)},call:function(t,e,r,i){e=e||[],r=r||[],i=i||[];var a=[];a.push("method=call"),a.push("callPath="+encodeURIComponent(JSON.stringify(t))),a.push("arguments="+encodeURIComponent(JSON.stringify(e))),a.push("pathSuffixes="+encodeURIComponent(JSON.stringify(r))),a.push("paths="+encodeURIComponent(JSON.stringify(i)));var s=this.buildQueryObject(this._jsongUrl,"POST",a.join("&")),c=n(s,this._config);return c.headers["Content-Type"]="application/x-www-form-urlencoded",o("POST",c,this)}},i.XMLHttpSource=i,i.default=i,e.exports=i},{"./buildQueryObject":9,"./request":12}],9:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n,i=[],o={url:t},a=t.indexOf("?")!==-1,s=a?"&":"?";return"string"==typeof r?i.push(r):(n=Object.keys(r),n.forEach(function(t){
-var e="object"==typeof r[t]?JSON.stringify(r[t]):r[t];i.push(t+"="+encodeURIComponent(e))})),"GET"===e?o.url+=s+i.join("&"):o.data=i.join("&"),o}},{}],10:[function(t,e,r){(function(t){"use strict";e.exports=function(){var e=new t.XMLHttpRequest;if("withCredentials"in e)return e;if(t.XDomainRequest)return new XDomainRequest;throw new Error("CORS is not supported by your browser")}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],11:[function(t,e,r){(function(t){"use strict";e.exports=function(){var e,r,n;if(t.XMLHttpRequest)return new t.XMLHttpRequest;try{for(r=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],n=0;n<3;n++)try{if(e=r[n],new t.ActiveXObject(e))break}catch(t){}return new t.ActiveXObject(e)}catch(t){throw new Error("XMLHttpRequest is not supported by your browser")}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],12:[function(t,e,r){"use strict";function n(){}function i(t,e,r){return n.create(function(n){var i,o,l,p,f,d={method:t||"GET",crossDomain:!1,async:!0,headers:{},responseType:"json"};for(f in e)h.call(e,f)&&(d[f]=e[f]);d.crossDomain||d.headers["X-Requested-With"]||(d.headers["X-Requested-With"]="XMLHttpRequest"),null!=r.onBeforeRequest&&r.onBeforeRequest(d);try{i=d.crossDomain?u():c()}catch(t){n.onError(t)}try{d.user?i.open(d.method,d.url,d.async,d.user,d.password):i.open(d.method,d.url,d.async),i.timeout=d.timeout,i.withCredentials=d.withCredentials!==!1,l=d.headers;for(p in l)h.call(l,p)&&i.setRequestHeader(p,l[p]);if(d.responseType)try{i.responseType=d.responseType}catch(t){if("json"!==d.responseType)throw t}i.onreadystatechange=function(t){4===i.readyState&&(o||(o=!0,a(n,i,t)))},i.ontimeout=function(t){o||(o=!0,s(n,i,"timeout error",t))},i.send(d.data)}catch(t){n.onError(t)}return function(){o||4===i.readyState||(o=!0,i.abort())}})}function o(t,e,r){r||(r=new Error(e)),t.onError(r)}function a(t,e,r){var n,i;if(e&&t){i=e.responseType,n="response"in e?e.response:e.responseText;var a=1223===e.status?204:e.status;if(a>=200&&a<=399){try{"json"!==i&&(n=JSON.parse(n||"")),"string"==typeof n&&(n=JSON.parse(n||""))}catch(e){o(t,"invalid json",e)}return t.onNext(n),void t.onCompleted()}return 401===a||403===a||407===a?o(t,n):410===a?o(t,n):408===a||504===a?o(t,n):o(t,n||"Response code "+a)}}function s(t,e,r,n){o(t,r||e.statusText||"request error",n)}var c=t("./getXMLHttpRequest"),u=t("./getCORSRequest"),h=Object.prototype.hasOwnProperty,l=function(){};n.create=function(t){var e=new n;return e.subscribe=function(e,r,n){var i,o;return i="function"==typeof e?{onNext:e,onError:r||l,onCompleted:n||l}:e,o=t(i),"function"==typeof o?{dispose:o}:o},e},e.exports=i},{"./getCORSRequest":10,"./getXMLHttpRequest":11}],13:[function(e,r,n){(function(i){!function(e){if("object"==typeof n&&void 0!==r)r.exports=e();else if("function"==typeof t&&t.amd)t([],e);else{var o;o="undefined"!=typeof window?window:void 0!==i?i:"undefined"!=typeof self?self:this,o.falcor=e()}}(function(){var t;return function t(r,n,i){function o(s,c){if(!n[s]){if(!r[s]){var u="function"==typeof e&&e;if(!c&&u)return u(s,!0);if(a)return a(s,!0);var h=new Error("Cannot find module '"+s+"'");throw h.code="MODULE_NOT_FOUND",h}var l=n[s]={exports:{}};r[s][0].call(l.exports,function(t){var e=r[s][1][t];return o(e?e:t)},l,l.exports,t,r,n,i)}return n[s].exports}for(var a="function"==typeof e&&e,s=0;s<i.length;s++)o(i[s]);return o}({1:[function(t,e,r){var n=t(32),i=t(130);n.atom=i.atom,n.ref=i.ref,n.error=i.error,n.pathValue=i.pathValue,n.HttpDataSource=t(125),e.exports=n},{125:125,130:130,32:32}],2:[function(t,e,r){function n(t){var e=t||{};this._root=e._root||new i(e),this._path=e.path||e._path||[],this._scheduler=e.scheduler||e._scheduler||new f,this._source=e.source||e._source,this._request=e.request||e._request||new a(this,this._scheduler),this._ID=C++,"number"==typeof e.maxSize?this._maxSize=e.maxSize:this._maxSize=e._maxSize||n.prototype._maxSize,"number"==typeof e.collectRatio?this._collectRatio=e.collectRatio:this._collectRatio=e._collectRatio||n.prototype._collectRatio,(e.boxed||e.hasOwnProperty("_boxed"))&&(this._boxed=e.boxed||e._boxed),(e.materialized||e.hasOwnProperty("_materialized"))&&(this._materialized=e.materialized||e._materialized),"boolean"==typeof e.treatErrorsAsValues?this._treatErrorsAsValues=e.treatErrorsAsValues:e.hasOwnProperty("_treatErrorsAsValues")&&(this._treatErrorsAsValues=e._treatErrorsAsValues),e.cache&&this.setCache(e.cache)}var i=t(4),o=t(3),a=t(55),s=t(64),c=t(65),u=t(61),h=t(63),l=t(73),p=t(75),f=t(74),d=t(81),m=t(84),v=t(49),g=t(134),y=t(88),b=t(100),_=t(96),x=t(102),w=t(98),S=t(99),M=t(77),E=t(76),T=t(130),C=0,O=t(116),P=function(){},A=t(14),j=t(19),R={pathValue:!0,pathSyntax:!0,json:!0,jsonGraph:!0},L=t(72);e.exports=n,n.ref=T.ref,n.atom=T.atom,n.error=T.error,n.pathValue=T.pathValue,n.prototype.constructor=n,n.prototype._materialized=!1,n.prototype._boxed=!1,n.prototype._progressive=!1,n.prototype._treatErrorsAsValues=!1,n.prototype._maxSize=Math.pow(2,53)-1,n.prototype._collectRatio=.75,n.prototype.get=t(71),n.prototype._getWithPaths=t(70),n.prototype.set=function(){var t=O(arguments,R,"set");return t!==!0?new s(function(e){e.onError(t)}):this._set.apply(this,arguments)},n.prototype.preload=function(){var t=O(arguments,L,"preload");if(t!==!0)return new s(function(e){e.onError(t)});var e=Array.prototype.slice.call(arguments),r=this;return new s(function(t){return r.get.apply(r,e).subscribe(function(){},function(e){t.onError(e)},function(){t.onCompleted()})})},n.prototype._set=function(){var t,e=-1,r=arguments.length,n=arguments[r-1];for(_(n)?r-=1:n=void 0,t=new Array(r);++e<r;)t[e]=arguments[e];return c.create(this,t,n)},n.prototype.call=function(){var t,e=-1,r=arguments.length;for(t=new Array(r);++e<r;){var n=arguments[e];t[e]=n;var i=typeof n;if(e>1&&!Array.isArray(n)||0===e&&!Array.isArray(n)&&"string"!==i||1===e&&!Array.isArray(n)&&!x(n))return new s(function(t){t.onError(new Error("Invalid argument"))})}return u.create(this,t)},n.prototype.invalidate=function(){var t,e=-1,r=arguments.length,n=arguments[r-1];for(t=new Array(r);++e<r;)if(t[e]=g.fromPath(arguments[e]),"object"!=typeof t[e])throw new Error("Invalid argument");h.create(this,t,n).subscribe(P,function(t){throw t})},n.prototype.deref=t(5),n.prototype.getValue=t(16),n.prototype.setValue=t(79),n.prototype._getValueSync=t(24),n.prototype._setValueSync=t(80),n.prototype._derefSync=t(6),n.prototype.setCache=function(t){var e=this._root.cache;if(t!==e){var r=this._root,n=this._path;this._path=[],this._root.cache={},void 0!==e&&v(r,r.expired,y(e),0),S(t)?E(this,[t]):w(t)?M(this,[t]):b(t)&&M(this,[{json:t}]),this._path=n}else void 0===e&&(this._root.cache={});return this},n.prototype.getCache=function(){var t=m(arguments);if(0===t.length)return A(this._root.cache);var e=[{}],r=this._path;return j.getWithPathsAsJSONGraph(this,t,e),this._path=r,e[0].jsonGraph},n.prototype.getVersion=function(t){var e=t&&g.fromPath(t)||[];if(Array.isArray(e)===!1)throw new Error("Model#getVersion must be called with an Array path.");return this._path.length&&(e=this._path.concat(e)),this._getVersion(this,e)},n.prototype._syncCheck=function(t){if(Boolean(this._source)&&this._root.syncRefCount<=0&&this._root.unsafeMode===!1)throw new Error("Model#"+t+" may only be called within the context of a request selector.");return!0},n.prototype._clone=function(t){var e=new n(this);for(var r in t){var i=t[r];"delete"===i?delete e[r]:e[r]=i}return e.setCache=void 0,e},n.prototype.batch=function(t){var e=t;"number"==typeof e?e=new p(Math.round(Math.abs(e))):e&&e.schedule||(e=new l);var r=this._clone();return r._request=new a(r,e),r},n.prototype.unbatch=function(){var t=this._clone();return t._request=new a(t,new f),t},n.prototype.treatErrorsAsValues=function(){return this._clone({_treatErrorsAsValues:!0})},n.prototype.asDataSource=function(){return new o(this)},n.prototype._materialize=function(){return this._clone({_materialized:!0})},n.prototype._dematerialize=function(){return this._clone({_materialized:"delete"})},n.prototype.boxValues=function(){return this._clone({_boxed:!0})},n.prototype.unboxValues=function(){return this._clone({_boxed:"delete"})},n.prototype.withoutDataSource=function(){return this._clone({_source:"delete"})},n.prototype.toJSON=function(){return{$type:"ref",value:this._path}},n.prototype.getPath=function(){return d(this._path)},n.prototype._getBoundValue=t(13),n.prototype._getVersion=t(18),n.prototype._getValueSync=t(17),n.prototype._getPathValuesAsPathMap=j.getWithPathsAsPathMap,n.prototype._getPathValuesAsJSONG=j.getWithPathsAsJSONGraph,n.prototype._setPathValuesAsJSON=t(78),n.prototype._setPathValuesAsJSONG=t(78),n.prototype._setPathValuesAsPathMap=t(78),n.prototype._setPathValuesAsValues=t(78),n.prototype._setPathMapsAsJSON=t(77),n.prototype._setPathMapsAsJSONG=t(77),n.prototype._setPathMapsAsPathMap=t(77),n.prototype._setPathMapsAsValues=t(77),n.prototype._setJSONGsAsJSON=t(76),n.prototype._setJSONGsAsJSONG=t(76),n.prototype._setJSONGsAsPathMap=t(76),n.prototype._setJSONGsAsValues=t(76),n.prototype._setCache=t(77),n.prototype._invalidatePathValuesAsJSON=t(48),n.prototype._invalidatePathMapsAsJSON=t(47)},{100:100,102:102,116:116,13:13,130:130,134:134,14:14,16:16,17:17,18:18,19:19,24:24,3:3,4:4,47:47,48:48,49:49,5:5,55:55,6:6,61:61,63:63,64:64,65:65,70:70,71:71,72:72,73:73,74:74,75:75,76:76,77:77,78:78,79:79,80:80,81:81,84:84,88:88,96:96,98:98,99:99}],3:[function(t,e,r){function n(t){this._model=t._materialize().treatErrorsAsValues()}n.prototype.get=function(t){return this._model.get.apply(this._model,t)._toJSONG()},n.prototype.set=function(t){return this._model.set(t)._toJSONG()},n.prototype.call=function(t,e,r,n){var i=[t,e,r].concat(n);return this._model.call.apply(this._model,i)._toJSONG()},e.exports=n},{}],4:[function(t,e,r){function n(t){var e=t||{};this.syncRefCount=0,this.expired=e.expired||[],this.unsafeMode=e.unsafeMode||!1,this.collectionScheduler=e.collectionScheduler||new a,this.cache={},i(e.comparator)&&(this.comparator=e.comparator),i(e.errorSelector)&&(this.errorSelector=e.errorSelector),i(e.onChange)&&(this.onChange=e.onChange)}var i=t(96),o=t(91),a=t(74);n.prototype.errorSelector=function(t,e){return e},n.prototype.comparator=function(t,e){return o(t,"value")&&o(e,"value")?t.value===e.value&&t.$type===e.$type&&t.$expires===e.$expires:t===e},e.exports=n},{74:74,91:91,96:96}],5:[function(t,e,r){function n(t,e){var r,n=!1;try{++t._root.syncRefCount,r=t._derefSync(e)}catch(t){r=t,n=!0}finally{--t._root.syncRefCount}return n?i.Observable.throw(r):i.Observable.return(r)}var i=t(159),o=t(134);e.exports=function(t){for(var e=this,r=-1,a=arguments.length-1,s=new Array(a),c=o.fromPath(t);++r<a;)s[r]=o.fromPath(arguments[r+1]);if(0===a)throw new Error("Model#deref requires at least one value path.");return i.Observable.defer(function(){return n(e,c)}).flatMap(function(t){if(Boolean(t)){if(a>0){var r=i.Observable.of(t);return t.get.apply(t,s).catch(i.Observable.empty()).concat(r).last().flatMap(function(){return n(e,c)}).filter(function(t){return t})}return i.Observable.return(t)}if(a>0){var o=s.map(function(t){return c.concat(t)});return e.get.apply(e,o).concat(i.Observable.defer(function(){return n(e,c)})).last().filter(function(t){return t})}return i.Observable.empty()})}},{134:134,159:159}],6:[function(t,e,r){var n=t(134),i=t(13),o=t(8),a=t(118);e.exports=function(t){var e=n.fromPath(t);if(!Array.isArray(e))throw new Error("Model#derefSync must be called with an Array path.");var r=i(this,this._path.concat(e),!1),s=r.path,c=r.value;if(r.found&&void 0!==c&&(c.$type!==a||void 0!==c.value)){if(c.$type)throw new o;return this._clone({_path:s})}}},{118:118,13:13,134:134,8:8}],7:[function(t,e,r){function n(){this.message=n.message,this.stack=(new Error).stack}n.prototype=new Error,n.prototype.name="BoundJSONGraphModelError",n.message="It is not legal to use the JSON Graph format from a bound Model. JSON Graph format can only be used from a root model.",e.exports=n},{}],8:[function(t,e,r){function n(t,e){this.message=i,this.stack=(new Error).stack,this.boundPath=t,this.shortedPath=e}var i="The boundPath of the model is not valid since a value or error was found before the path end.";n.prototype=new Error,n.prototype.name="InvalidModelError",n.message=i,e.exports=n},{}],9:[function(t,e,r){function n(t){this.message="An exception was thrown when making a request.",this.stack=(new Error).stack,this.innerError=t}var i="InvalidSourceError";n.prototype=new Error,n.prototype.name=i,n.is=function(t){return t&&t.name===i},e.exports=n},{}],10:[function(t,e,r){function n(){this.message="The allowed number of retries have been exceeded.",this.stack=(new Error).stack}var i="MaxRetryExceededError";n.prototype=new Error,n.prototype.name=i,n.is=function(t){return t&&t.name===i},e.exports=n},{}],11:[function(t,e,r){function n(t,e,r,n,i,l,p){for(var f,d,m=r,v=i,g=n,y=0;;){if(0===y&&g[u]?(y=v.length,d=g[u]):(f=v[y++],d=m[f]),d){var b=d.$type,_=b&&d.value||d;if(y<v.length){if(b){m=d;break}m=d;continue}if(m=d,b&&s(d))break;if(g[u]||o(g,d),b===c){p?a(t,d,l,null,null,null,v,v.length,p):h(t,d),y=0,v=_,g=d,m=e;continue}break}m=void 0;break}if(y<v.length&&void 0!==m){for(var x=[],w=0;y>w;w++)x[w]=v[w];v=x}return[m,v]}var i=t(26),o=i.create,a=t(22),s=t(27),c=t(120),u=t(33),h=t(29).promote;e.exports=n},{120:120,22:22,26:26,27:27,29:29,33:33}],12:[function(t,e,r){var n=t(15),i=t(8),o=t(7);e.exports=function(t,e){return function(r,a,s){var c,u,h,l=s[0],p={values:s,optimizedPaths:[]},f=r._root.cache,d=r._path,m=f,v=d.length,g=[];if(v){if(e)return{criticalError:new o};if(m=n(r,d),m.$type)return{criticalError:new i(d,d)};for(c=[],u=0;v>u;++u)c[u]=d[u]}else c=[],v=0;for(u=0,h=a.length;h>u;u++)t(r,f,m,a[u],0,l,p,g,c,v,e);return p}}},{15:15,7:7,8:8}],13:[function(t,e,r){var n=t(17),i=t(8);e.exports=function(t,e,r){var o,a,s,c,u,h=e,l=e;for(o=t._boxed,r=t._materialized,a=t._treatErrorsAsValues,t._boxed=!0,t._materialized=void 0===r||r,t._treatErrorsAsValues=!0,s=n(t,h.concat(null),!0),t._boxed=o,t._materialized=r,t._treatErrorsAsValues=a,h=s.optimizedPath,c=s.shorted,u=s.found,s=s.value;h.length&&null===h[h.length-1];)h.pop();if(u&&c)throw new i(l,h);return{path:h,value:s,shorted:c,found:u}}},{17:17,8:8}],14:[function(t,e,r){function n(t){var e,r,n,i={},o=Object.keys(t);for(r=0,n=o.length;n>r;r++)e=o[r],a(e)||(i[e]=t[e]);return i}function i(t,e,r){Object.keys(t).filter(function(e){return!a(e)&&t[e]}).forEach(function(r){var a=t[r],s=e[r];if(s||(s=e[r]={}),a.$type){var c,u=a.value&&"object"==typeof a.value,h=!t[o];return c=u||h?n(a):a.value,void(e[r]=c)}i(a,s,r)})}var o=t(37),a=t(97);e.exports=function(t){var e={};return i(t,e),e}},{37:37,97:97}],15:[function(t,e,r){e.exports=function(t,e){for(var r=t._root.cache,n=-1,i=e.length;++n<i&&r&&!r.$type;)r=r[e[n]];return r}},{}],16:[function(t,e,r){var n=t(64),i=t(134);e.exports=function(t){for(var e=i.fromPath(t),r=0,o=e.length;++r<o;)if("object"==typeof e[r])return new n(function(t){t.onError(new Error("Paths must be simple paths"))});var a=this;return new n(function(t){return a.get(e).subscribe(function(r){for(var n=r.json,i=-1,o=e.length;n&&++i<o;)n=n[e[i]];t.onNext(n)},function(e){t.onError(e)},function(){t.onCompleted()})})}},{134:134,64:64}],17:[function(t,e,r){var n=t(11),i=t(25),o=t(27),a=t(29).promote,s=t(120),c=t(118),u=t(119);e.exports=function(t,e,r){for(var h,l,p,f,d,m=t._root.cache,v=e.length,g=[],y=!1,b=!1,_=0,x=m,w=m,S=m,M=!0,E=!1;x&&v>_;){if(h=e[_++],null!==h&&(x=w[h],g[g.length]=h),!x){S=void 0,y=!0,M=!1;break}if((p=x.$type)===c&&void 0===x.value){S=void 0,M=!1,y=v>_;break}if(v>_){if(p===s){if(o(x)){E=!0,S=void 0,M=!1;break}if(f=n(t,m,m,x,x.value),!(d=f[0])){S=void 0,x=void 0,M=!1;break}p=d.$type,x=d,g=f[1].slice(0)}if(p)break}else S=x;w=x}if(v>_&&!E){for(l=_;v>l;++l)if(null!==e[_]){b=!0;break}for(b?(y=!0,S=void 0):S=x,l=_;v>l;++l)null!==e[l]&&(g[g.length]=e[l])}if(S&&p&&(o(S)?S=void 0:a(t,S)),S&&p===u&&!t._treatErrorsAsValues)throw{path:_===v?e:e.slice(0,_),value:S.value};return S&&t._boxed?S=Boolean(p)&&!r?i(S):S:!S&&t._materialized?S={$type:c}:S&&(S=S.value),{value:S,shorted:y,optimizedPath:g,found:M}}},{11:11,118:118,119:119,120:120,25:25,27:27,29:29}],18:[function(t,e,r){var n=t(46);e.exports=function(t,e){var r=t._getValueSync({_boxed:!0,_root:t._root,_treatErrorsAsValues:t._treatErrorsAsValues},e,!0).value,i=r&&r[n];return null==i?-1:i}},{46:46}],19:[function(t,e,r){var n=t(12),i=t(31),o=n(i,!1),a=n(i,!0);e.exports={getValueSync:t(17),getBoundValue:t(13),getWithPathsAsPathMap:o,getWithPathsAsJSONGraph:a}},{12:12,13:13,17:17,31:31}],20:[function(t,e,r){var n=t(29),i=t(25),o=n.promote;e.exports=function(t,e,r,n,a){var s=e.value;a.errors||(a.errors=[]),t._boxed&&(s=i(e)),a.errors.push({path:n.slice(0,r+1),value:s}),o(t,e)}},{25:25,29:29}],21:[function(t,e,r){function n(t,e,r,n,i,o,a){a.requestedMissingPaths.push(n.slice(0,r).concat(e)),a.optimizedMissingPaths.push(i.slice(0,o).concat(e))}var i=t(30),o=i.fastCopy;e.exports=function(t,e,r,i,a,s,c){var u;i.requestedMissingPaths||(i.requestedMissingPaths=[],i.optimizedMissingPaths=[]),u=r<e.length?o(e,r):[],n(t,u,r,a,s,c,i)}},{30:30}],22:[function(t,e,r){var n=t(29),i=t(25),o=n.promote,a=t(120),s=t(118),c=t(119),u=t(37);e.exports=function(t,e,r,n,h,l,p,f,d,m){if(r){var v,g,y,b,_,x,w,S,M=!1;if(e&&o(t,e),e&&void 0!==e.value||(M=t._materialized),M)S={$type:s};else if(t._boxed)S=i(e);else if(e.$type===a||e.$type===c)S=d?i(e):e.value;else if(d){var E=e.value&&"object"==typeof e.value,T=!e[u];S=E||T?i(e):e.value}else S=e.value;if(h&&(h.hasValue=!0),d){for(_=r.jsonGraph,_||(_=r.jsonGraph={},r.paths=[]),v=0,g=f-1;g>v;v++)b=p[v],_[b]||(_[b]={}),_=_[b];b=p[v],_[b]=M?{$type:s}:S,l&&r.paths.push(l.slice(0,n))}else if(0===n)r.json=S;else{for(_=r.json,_||(_=r.json={}),v=0;n-1>v;v++)y=l[v],_[y]||(_[y]={}),x=_,w=y,_=_[y];y=l[v],null!==y?_[y]=S:x[w]=S}}}},{118:118,119:119,120:120,25:25,29:29,37:37}],23:[function(t,e,r){var n=t(27),i=t(26),o=t(29),a=i.remove,s=o.splice,c=t(119),u=t(20),h=t(22),l=t(21),p=t(28),f=t(35);e.exports=function(t,e,r,i,o,d,m,v,g,y,b){var _=e&&e.$type,x=e&&void 0===e.value;return e&&_?void(n(e)?(e[f]||(s(t,e),a(e)),l(t,r,i,d,m,v,g)):_===c?(b&&(m[i]=null),y||t._treatErrorsAsValues?h(t,e,o,i,d,m,v,g,y,b):u(t,e,i,m,d)):(b&&(m[i]=null),(!x||x&&t._materialized)&&h(t,e,o,i,d,m,v,g,y,b))):void(p(t)?h(t,e,o,i,d,m,v,g,y,b):l(t,r,i,d,m,v,g))}},{119:119,20:20,21:21,22:22,26:26,27:27,28:28,29:29,35:35}],24:[function(t,e,r){var n=t(134);e.exports=function(t){var e=n.fromPath(t);if(Array.isArray(e)===!1)throw new Error("Model#getValueSync must be called with an Array path.");return this._path.length&&(e=this._path.concat(e)),this._syncCheck("getValueSync")&&this._getValueSync(this,e).value}},{134:134}],25:[function(t,e,r){var n=t(40);e.exports=function(t){var e,r,i,o=Object.keys(t);for(e={},r=0,i=o.length;i>r;r++){var a=o[r];a[0]!==n&&(e[a]=t[a])}return e}},{40:40}],26:[function(t,e,r){function n(t,e){var r=e[c]||0;e[o+r]=t,e[c]=r+1,t[s]=r,t[a]=e}function i(t){var e=t[a];if(e){for(var r=t[s],n=e[c];n>r;)e[o+r]=e[o+r+1],++r;e[c]=n-1,t[a]=void 0,t[s]=void 0}}var o=t(43),a=t(33),s=t(42),c=t(44);e.exports={create:n,remove:i}},{33:33,42:42,43:43,44:44}],27:[function(t,e,r){var n=t(106);e.exports=function(t){var e=void 0===t.$expires&&-1||t.$expires;return-1!==e&&1!==e&&(0===e||e<n())}},{106:106}],28:[function(t,e,r){e.exports=function(t){return t._materialized&&!t._source}},{}],29:[function(t,e,r){function n(t,e){var r=t._root,n=r[o];if(n!==e){var i=e[c],a=e[s];a&&(a[c]=i),i&&(i[s]=a),e[c]=void 0,r[o]=e,e[s]=n,n[c]=e}}function i(t,e){var r=t._root,n=e[c],i=e[s];i&&(i[c]=n),n&&(n[s]=i),e[c]=void 0,e===r[o]&&(r[o]=void 0),e===r[a]&&(r[a]=void 0),e[u]=!0,r.expired.push(e)}var o=t(34),a=t(45),s=t(38),c=t(41),u=t(35);e.exports={promote:n,splice:i}},{34:34,35:35,38:38,41:41,45:45}],30:[function(t,e,r){function n(t,e){var r,n,i,o=[];for(n=0,i=e||0,r=t.length;r>i;n++,i++)o[n]=t[i];return o}function i(t,e){var r,n,i,o=[];for(r=0,n=t.length;n>r;r++)o[r]=t[r];for(i=0,n=e.length;n>i;i++)null!==e[i]&&(o[r++]=e[i]);return o}function o(t,e){var r,n,i,o=[];for(r=0,n=t.length;n>r;r++)o[r]=t[r];for(i=0,n=e.length;n>i;i++)o[r++]=e[i];return o}e.exports={fastCat:o,fastCatSkipNulls:i,fastCopy:n}},{}],31:[function(t,e,r){var n=t(11),i=t(23),o=t(27),a=t(143).iterateKeySet,s=t(120),c=t(29).promote;e.exports=function t(e,r,u,h,l,p,f,d,m,v,g,y){var b=y,_=m;if(!u||u&&u.$type||l===h.length)return void i(e,u,h,l,p,f,d,_,v,g,b);var x,w;x=h[l];var S="object"==typeof x,M=l+1,E=!1,T=x;if(S&&(E={},T=a(x,E)),void 0!==T||!E.done){var C=v+1;do{b=!1;var O;null===T?O=u:(O=u[T],_[v]=T,d[l]=T);var P=_,A=C;if(O){var j=O.$type,R=j&&O.value||O;if(M<h.length&&j&&j===s&&!o(O)){g&&i(e,O,h,M,p,f,null,_,A,g,b),c(e,O);var L=n(e,r,r,O,R,p,g);b=!0,O=L[0];var N=L[1];for(P=[],A=N.length,w=0;A>w;++w)P[w]=N[w]}}t(e,r,O,h,M,p,f,d,P,A,g,b),E&&!E.done&&(T=a(x,E))}while(E&&!E.done)}}},{11:11,120:120,143:143,23:23,27:27,29:29}],32:[function(t,e,r){"use strict";function n(t){return new n.Model(t)}"function"==typeof Promise?n.Promise=Promise:n.Promise=t(151),e.exports=n,n.Model=t(2)},{151:151,2:2}],33:[function(t,e,r){e.exports=t(40)+"context"},{40:40}],34:[function(t,e,r){e.exports=t(40)+"head"},{40:40}],35:[function(t,e,r){e.exports=t(40)+"invalidated"},{40:40}],36:[function(t,e,r){e.exports=t(40)+"key"},{40:40}],37:[function(t,e,r){e.exports="$modelCreated"},{}],38:[function(t,e,r){e.exports=t(40)+"next"},{40:40}],39:[function(t,e,r){e.exports=t(40)+"parent"},{40:40}],40:[function(t,e,r){e.exports=String.fromCharCode(30)},{}],41:[function(t,e,r){e.exports=t(40)+"prev"},{40:40}],42:[function(t,e,r){e.exports=t(40)+"ref-index"},{40:40}],43:[function(t,e,r){e.exports=t(40)+"ref"},{40:40}],44:[function(t,e,r){e.exports=t(40)+"refs-length"},{40:40}],45:[function(t,e,r){e.exports=t(40)+"tail"},{40:40}],46:[function(t,e,r){e.exports=t(40)+"version"},{40:40}],47:[function(t,e,r){function n(t,e,r,i,a,s,u,h,l,p){if(!w(t)&&!t.$type)for(var f in t)if(f[0]!==c&&"$"!==f[0]&&y(t,f)){var d=t[f],m=b(d)&&!d.$type,v=o(r,i,a,f,d,m,!1,s,u,h,l,p),_=v[0],x=v[1];_&&(m?n(d,e+1,r,x,_,s,u,h,l,p):T(_,x,f,h)&&E(x,g(_),h,s))}}function i(t,e,r,n,i,a,c,l){if(_(r))return S(r,i,a),[void 0,e];v(a,r);var d=r,m=r.value,g=e;if(null!=(r=r[h]))g=r[u]||e;else{var y=0,b=m.length-1;g=r=e;do{var x=m[y],M=b>y,E=o(e,g,r,x,t,M,!0,n,i,a,c,l);if(r=E[0],w(r))return E;g=E[1]}while(y++<b);if(d[h]!==r){var T=r[f]||0;r[f]=T+1,r[s+T]=d,d[h]=r,d[p]=T}}return[r,g]}function o(t,e,r,n,o,s,c,u,h,l,p,f){for(var m=r.$type;m===d;){var v=i(o,t,r,u,h,l,p,f);if(r=v[0],w(r))return v;e=v[1],m=r&&r.$type}if(void 0!==m)return[r,e];if(null==n){if(s)throw new Error("`null` is not allowed in branch key positions.");r&&(n=r[a])}else e=r,r=e[n];return[r,e]}var a=t(36),s=t(43),c=t(40),u=t(39),h=t(33),l=t(46),p=t(42),f=t(44),d=t(120),m=t(13),v=t(50),g=t(88),y=t(91),b=t(100),_=t(95),x=t(96),w=t(102),S=t(86),M=t(92),E=t(115),T=t(109);e.exports=function(t,e){for(var r=t._root,i=r,o=r.expired,a=M(),s=r._comparator,c=r._errorSelector,h=t._path,p=r.cache,f=h.length?m(t,h).value:p,d=f[u]||p,v=p[l],g=-1,y=e.length;++g<y;){n(e[g].json,0,p,d,f,a,o,i,s,c)}var b=p[l],_=r.onChange;x(_)&&v!==b&&_()}},{100:100,102:102,109:109,115:115,120:120,13:13,33:33,36:36,39:39,40:40,42:42,43:43,44:44,46:46,50:50,86:86,88:88,91:91,92:92,95:95,96:96}],48:[function(t,e,r){function n(t,e,r,i,a,s,c,u){var h={},l=e<t.length-1,p=t[e],f=x(p,h);do{var d=o(r,i,a,f,l,!1,s,c,u),m=d[0],g=d[1];m&&(l?n(t,e+1,r,g,m,s,c,u):M(m,g,f,u)&&S(g,v(m),u,s)),f=x(p,h)}while(!h.done)}function i(t,e,r,n,i){if(g(e))return _(e,n,i),[void 0,t];m(i,e);var a=e,h=e.value,f=t;if(null!=(e=e[u]))f=e[c]||t;else{var d=0,v=h.length-1;f=e=t;do{var y=h[d],x=v>d,w=o(t,f,e,y,x,!0,r,n,i);if(e=w[0],b(e))return w;f=w[1]}while(d++<v);if(a[u]!==e){var S=e[p]||0;e[p]=S+1,e[s+S]=a,a[u]=e,a[l]=S}}return[e,f]}function o(t,e,r,n,o,s,c,u,h){for(var l=r.$type;l===f;){var p=i(t,r,c,u,h);if(r=p[0],b(r))return p;e=p[1],l=r.$type}if(void 0!==l)return[r,e];if(null==n){if(o)throw new Error("`null` is not allowed in branch key positions.");r&&(n=r[a])}else e=r,r=e[n];return[r,e]}var a=t(36),s=t(43),c=t(39),u=t(33),h=t(46),l=t(42),p=t(44),f=t(120),d=t(13),m=t(50),v=t(88),g=t(95),y=t(96),b=t(102),_=t(86),x=t(143).iterateKeySet,w=t(92),S=t(115),M=t(109);e.exports=function(t,e){for(var r=t._root,i=r,o=r.expired,a=w(),s=t._path,u=r.cache,l=s.length?d(t,s).value:u,p=l[c]||u,f=u[h],m=-1,v=e.length;++m<v;){n(e[m],0,u,p,l,a,o,i)}var g=u[h],b=r.onChange;y(b)&&f!==g&&b()}},{102:102,109:109,115:115,120:120,13:13,143:143,33:33,36:36,39:39,42:42,43:43,44:44,46:46,50:50,86:86,88:88,92:92,95:95,96:96}],49:[function(t,e,r){var n=t(36),i=t(39),o=t(34),a=t(45),s=t(38),c=t(41),u=t(108),h=t(115);e.exports=function(t,e,r,l,p,f){var d=r,m=p;"number"!=typeof m&&(m=.75);var v,g,y,b="number"==typeof f,_=l*m;for(g=e.pop();g;)y=g.$size||0,d-=y,b===!0?h(g,y,t,f):(v=g[i])&&u(g,v,g[n],t),g=e.pop();if(d>=l){var x=t[a];for(g=x;d>=_&&g;)x=x[c],y=g.$size||0,d-=y,b===!0&&h(g,y,t,f),g=x;t[a]=t[c]=g,null==g?t[o]=t[s]=void 0:g[s]=void 0}}},{108:108,115:115,34:34,36:36,38:38,39:39,41:41,45:45}],50:[function(t,e,r){var n=t(121),i=t(34),o=t(45),a=t(38),s=t(41),c=t(100);e.exports=function(t,e){if(c(e)&&e.$expires!==n){var r=t[i],u=t[o],h=e[a],l=e[s];e!==r&&(null!=h&&"object"==typeof h&&(h[s]=l),null!=l&&"object"==typeof l&&(l[a]=h),h=r,null!=r&&"object"==typeof r&&(r[s]=e),t[i]=t[a]=r=e,r[a]=h,r[s]=void 0),null!=u&&e!==u||(t[o]=t[s]=u=l||e)}return e}},{100:100,121:121,34:34,38:38,41:41,45:45}],51:[function(t,e,r){var n=t(34),i=t(45),o=t(38),a=t(41);e.exports=function(t,e){var r=t[n],s=t[i],c=e[o],u=e[a];null!=c&&"object"==typeof c&&(c[a]=u),null!=u&&"object"==typeof u&&(u[o]=c),e===r&&(t[n]=t[o]=c),e===s&&(t[i]=t[a]=u),e[o]=e[a]=void 0,r=s=c=u=void 0}},{34:34,38:38,41:41,45:45}],52:[function(t,e,r){function n(t,e){var r=!1;return function(){if(!r&&!t._disposed){r=!0,t._callbacks[e]=null,t._optimizedPaths[e]=[],t._requestedPaths[e]=[];0!==--t._count||t.sent||(t._disposable.dispose(),t.requestQueue.removeRequest(t))}}}function i(t){for(var e=[],r=-1,n=0,i=t.length;i>n;++n)for(var o=t[n],a=0,s=o.length;s>a;++a)e[++r]=o[a];return e}var o=t(59),a=t(60),s=0,c=t(57).GetRequest,u=t(76),h=t(78),l=t(119),p=[],f=function(t,e){this.sent=!1,this.scheduled=!1,this.requestQueue=e,this.id=++s,this.type=c,this._scheduler=t,this._pathMap={},this._optimizedPaths=[],this._requestedPaths=[],this._callbacks=[],this._count=0,this._disposable=null,this._collapsed=null,this._disposed=!1};f.prototype={batch:function(t,e,r){var i=this,o=i._optimizedPaths,s=i._requestedPaths,c=i._callbacks,u=o.length;return o[u]=e,s[u]=t,c[u]=r,++i._count,i.scheduled||(i.scheduled=!0,i._disposable=i._scheduler.schedule(function(){a(i,o,function(t,e){if(i.requestQueue.removeRequest(i),i._disposed=!0,i._count){i._merge(s,t,e);for(var r=0,n=c.length;n>r;++r){var o=c[r];o&&o(t,e)}}})})),n(i,u)},add:function(t,e,r){var i,a,s=this,c=o(t,e,s._pathMap);c?(a=c[2],i=c[1]):(a=t,i=e);var u=!1,h=!1;if(i.length<e.length){u=!0;var l=s._callbacks.length;s._callbacks[l]=r,s._requestedPaths[l]=c[0],s._optimizedPaths[l]=[],++s._count,h=n(s,l)}return[u,a,i,h]},_merge:function(t,e,r){var n=this,o=n.requestQueue.model,a=o._root,s=a.errorSelector,c=a.comparator,f=o._path;o._path=p;var d=i(t);if(e){var m=e;m instanceof Error&&(m={message:m.message}),m.$type||(m={$type:l,value:m});var v=d.map(function(t){return{path:t,value:m}});h(o,v,null,s,c)}else u(o,[{paths:d,jsonGraph:r.jsonGraph}],null,s,c);o._path=f}},e.exports=f},{119:119,57:57,59:59,60:60,76:76,78:78}],53:[function(t,e,r){function n(){this.length=0,this.pending=!1,this.pathmaps=[],a.call(this,this._subscribe)}var i=t(159),o=i.Observer,a=i.Observable,s=i.Disposable,c=i.SerialDisposable,u=i.CompositeDisposable,h=t(9),l=t(143),p=l.iterateKeySet;n.create=function(t,e,r){var n=new this;return n.queue=t,n.model=e,n.index=r,n},n.prototype=Object.create(a.prototype),n.prototype.constructor=n,n.prototype.insertPath=function(t,e,r,n,i){var o=n||0,a=i||t.length-1,s=r||this.pathmaps[a+1]||(this.pathmaps[a+1]=Object.create(null));if(void 0===s||null===s)return!1;var c,u,h=t[o],l={};c=p(h,l);do{if(u=s[c],a>o){if(null==u){if(e)return!1;u=s[c]=Object.create(null)}if(this.insertPath(t,e,u,o+1,a)===!1)return!1}else s[c]=(u||0)+1,this.length+=1;l.done||(c=p(h,l))}while(!l.done);return!0},n.prototype.removePath=function(t,e,r,n){var i=r||0,o=n||t.length-1,a=e||this.pathmaps[o+1];if(void 0===a||null===a)return!0;var s,c,u=0,h=t[i],l={};s=p(h,l);do{if(void 0!==(c=a[s])&&null!==c){if(o>i){u+=this.removePath(t,c,i+1,o);var f=void 0;for(f in c)break;void 0===f&&delete a[s]}else c=a[s]=(c||1)-1,0===c&&delete a[s],u+=1,this.length-=1;l.done||(s=p(h,l))}}while(!l.done);return u},n.prototype.getSourceObserver=function(t){var e=this;return o.create(function(r){r.jsonGraph=r.jsonGraph||r.jsong||r.values||r.value,r.index=e.index,t.onNext(r)},function(e){t.onError(e)},function(){t.onCompleted()})},n.prototype._subscribe=function(t){var e=this,r=this.queue;e.pending=!0;var n=!1,i=new c,o=s.create(function(){n||(n=!0,r&&r._remove(e))}),a=new u(i,o);try{i.setDisposable(this.model._source[this.method](this.getSourceArgs()).subscribe(this.getSourceObserver(t)))}catch(t){throw new h(t)}return a},e.exports=n},{143:143,159:159,9:9}],54:[function(t,e,r){function n(t,e){this.total=0,this.model=t,this.requests=[],this.scheduler=e}var i=t(58),o=t(40),a=t(90),s=t(100),c=t(143);n.prototype.set=function(t){return t.paths=c.collapse(t.paths),i.create(this.model,t)},n.prototype._remove=function(t){var e=this.requests,r=e.indexOf(t);-1!==r&&e.splice(r,1)},n.prototype.distributePaths=function(t,e,r){var n,i,o=this.model,a=-1,s=t.length,c=-1,u=e.length,h=[];t:for(;++a<s;){var l=t[a];for(c=-1;++c<u;)if(i=e[c],i.insertPath(l,i.pending)){h[c]=i;continue t}n||(n=r.create(this,o,this.total++),e[c]=n,h[u++]=n),n.insertPath(l,!1)}var p=[],f=-1;for(c=-1;++c<u;)null!=(i=h[c])&&(p[++f]=i);return p},n.prototype.mergeJSONGraphs=function(t,e){var r=0,n=[],i=[],c=[],u=t.index,h=e.index;t.index=Math.max(u,h),n[-1]=t.jsonGraph||{},i[-1]=e.jsonGraph||{};t:for(;r>-1;){for(var l=n[r-1],p=i[r-1],f=c[r-1]||(c[r-1]=Object.keys(p));f.length>0;){var d=f.pop();if(d[0]!==o)if(l.hasOwnProperty(d)){var m=l[d],v=a(m),g=p[d],y=a(g);if(s(m)&&s(g)&&!v&&!y){n[r]=m,i[r]=g,r+=1;continue t}h>u&&(l[d]=g)}else l[d]=p[d]}r-=1}return t},e.exports=n},{100:100,143:143,40:40,58:58,90:90}],55:[function(t,e,r){function n(t,e){this.model=t,this.scheduler=e,this.requests=this._requests=[]}var i=t(54),o=t(56);n.prototype.get=o.prototype.get,n.prototype.removeRequest=o.prototype.removeRequest,n.prototype.set=i.prototype.set,n.prototype.call=i.prototype.call,e.exports=n},{54:54,56:56}],56:[function(t,e,r){function n(t,e){this.model=t,this.scheduler=e,this.requests=this._requests=[]}var i=t(57),o=t(52);n.prototype={setScheduler:function(t){this.scheduler=t},get:function(t,e,r){function n(){m||0===--l&&r()}var a,s,c,u=this,h=[],l=0,p=u._requests,f=e,d=t,m=!1;for(a=0,s=p.length;s>a;++a)if(c=p[a],c.type===i.GetRequest){if(c.sent){var v=c.add(d,f,n);v[0]&&(d=v[1],f=v[2],h[h.length]=v[3],++l)}else c.batch(d,f,n),f=[],d=[],++l;if(!f.length)break}if(f.length){c=new o(u.scheduler,u),p[p.length]=c,++l;var g=c.batch(d,f,n);h[h.length]=g}return function(){if(!m&&0!==l){m=!0;for(var t=h.length,e=0;t>e;++e)h[e]()}}},removeRequest:function(t){for(var e=this._requests,r=e.length;--r>=0;)if(e[r].id===t.id){e.splice(r,1);break}}},e.exports=n},{52:52,57:57}],57:[function(t,e,r){e.exports={GetRequest:"GET"}},{}],58:[function(t,e,r){function n(){a.call(this)}var i=t(159),o=i.Observer,a=t(53),s=t(83),c=t(76),u=t(78),h=new Array(0);n.create=function(t,e){var r=new n;return r.model=t,r.jsonGraphEnvelope=e,r},n.prototype=Object.create(a.prototype),n.prototype.constructor=n,n.prototype.method="set",n.prototype.insertPath=function(){return!1},n.prototype.removePath=function(){return 0},
-n.prototype.getSourceArgs=function(){return this.jsonGraphEnvelope},n.prototype.getSourceObserver=function(t){var e=this.model,r=e._path,n=this.jsonGraphEnvelope.paths,i=e._root,l=i.errorSelector,p=i.comparator;return a.prototype.getSourceObserver.call(this,o.create(function(i){e._path=h;var o=c(e,[{paths:n,jsonGraph:i.jsonGraph}],null,l,p);i.paths=o[1],e._path=r,t.onNext(i)},function(i){e._path=h,u(e,s(n,function(t){return{path:t,value:i}}),null,l,p),e._path=r,t.onError(i)},function(){t.onCompleted()}))},e.exports=n},{159:159,53:53,76:76,78:78,83:83}],59:[function(t,e,r){var n=t(143).hasIntersection,i=t(84);e.exports=function(t,e,r){for(var o=[],a=[],s=[],c=-1,u=-1,h=!1,l=0,p=e.length;p>l;++l){var f=e[l],d=r[f.length];d&&n(d,f,0)?(!h&&l>0&&(a=i(t,0,l),o=i(e,0,l)),s[++c]=t[l],h=!0):h&&(o[++u]=f,a[u]=t[l])}return h?[s,o,a]:null}},{143:143,84:84}],60:[function(t,e,r){var n=t(143),i=n.toTree,o=n.toPaths;e.exports=function(t,e,r){if(0===t._count)return void t.requestQueue.removeRequest(t);t.sent=!0,t.scheduled=!1;for(var n=t._pathMap,a=Object.keys(e),s=0,c=a.length;c>s;++s)for(var u=e[s],h=0,l=u.length;l>h;++h){var p=u[h],f=p.length;if(n[f]){var d=n[f];d[d.length]=p}else n[f]=[p]}for(var m=Object.keys(n),v=0,g=m.length;g>v;++v){var y=m[v];n[y]=i(n[y])}var b,_=t._collasped=o(n);t.requestQueue.model._source.get(_).subscribe(function(t){b=t},function(t){r(t,b)},function(){r(null,b)})}},{143:143}],61:[function(t,e,r){function n(t){s.call(this,t||o)}function i(t){return a.Observable.defer(function(){return t})}function o(t){function e(t){function e(t,e){if(Boolean(e.invalidated))t.invalidations.push(t.localThisPath.concat(e.path));else{var r=e.path,i=e.value;Boolean(i)&&"object"==typeof i&&i.$type===p?t.references.push({path:n(r),value:e.value}):t.values.push({path:n(r),value:e.value})}return t}function r(t){var e=t.values.concat(t.references);return e.length>0?i(y.set.apply(y,e)._toJSONG()).map(function(e){return{results:t,envelope:e}}):s.return({results:t,envelope:{jsonGraph:{},paths:[]}})}function o(t){var e,r=t.envelope,o=t.results,u=o.values,h=o.references,l=o.invalidations,p=u.map(c).map(n),f=h.reduce(a,[]),d=v.map(n),m=f.concat(d);return e=m.length>0?i(g.get.apply(g,p.concat(m))._toJSONG()):s.return(r),e.doAction(function(t){t.invalidated=l})}function a(t,e){var r=e.path;return t.push.apply(t,m.map(function(t){return r.concat(t)})),t}function c(t){return t.path}var u=t&&t.localFn;if("function"==typeof u){var h=t.model,l=h._path,f=u.apply(h,d).reduce(e,{values:[],references:[],invalidations:[],localThisPath:l}).flatMap(r).flatMap(o);return s.return(f)}return s.empty()}function r(t){return i(y.set(t)).reduce(function(t){return t},null).map(function(){return{invalidated:t.invalidated,paths:t.paths.map(function(t){return t.slice(b.length)})}})}function n(t){return x.concat(t)}var o=this.args,u=this.model,f=l.fromPath(o[0]),d=o[1]||[],m=(o[2]||[]).map(l.fromPath),v=(o[3]||[]).map(l.fromPath),g=u._clone({_path:[]}),y=g.withoutDataSource(),b=u._path,_=b.concat(f),x=_.slice(0,-1),w=i(u.withoutDataSource().get(f)).map(function(t){for(var e=t.json,r=-1,n=f.length;e&&++r<n;)e=e[f[r]];return{model:g._derefSync(x).boxValues(),localFn:e}}).flatMap(e).defaultIfEmpty(function(t){function e(t){var e=t.invalidated;return e&&e.length&&g.invalidate.apply(g,e),t}return t&&"object"==typeof t?a.Observable.defer(function(){var e;try{e=t.call(_,d,m,v)}catch(t){e=s.throw(new h(t))}return e}).map(e):s.empty()}(u._source)).mergeAll().flatMap(r),S=new c;return S.add(w.subscribe(function(e){var r=e.paths,n=e.invalidated,o=u.get.apply(u,r);"AsJSONG"===t.outputFormat&&(o=i(o._toJSONG()).doAction(function(t){t.invalidated=n})),S.add(o.subscribe(t))},function(e){t.onError(e)})),S}var a=t(159)&&t(158),s=a.Observable,c=a.CompositeDisposable,u=t(64),h=t(9),l=t(134),p=t(120);n.create=u.create,n.prototype=Object.create(s.prototype),n.prototype.constructor=n,n.prototype.invokeSourceRequest=function(t){return this},n.prototype.ensureCollect=function(t){return this},n.prototype.initialize=function(){return this},e.exports=n},{120:120,134:134,158:158,159:159,64:64,9:9}],62:[function(t,e,r){function n(t){o.call(this,t)}var i=t(159),o=i.Observable,a=t(64),s=t(134),c=t(88),u=t(49),h=t(81),l=t(46),p=Array.isArray,f=t(101),d=t(98),m=t(99);n.create=a.create,n.prototype=Object.create(o.prototype),n.prototype.constructor=n,n.prototype.subscribeCount=0,n.prototype.subscribeLimit=10,n.prototype.initialize=function(){for(var t,e,r=this.model,n=this.outputFormat||"AsPathMap",i=this.isProgressive,o=[{}],a=[],c=this.args,u=-1,l=c.length;++u<l;){var v,g=c[u];p(g)||"string"==typeof g?(g=s.fromPath(g),v="PathValues"):f(g)?(g.path=s.fromPath(g.path),v="PathValues"):m(g)?v="JSONGs":d(g)&&(v="PathMaps"),e!==v&&(e=v,t={inputType:v,arguments:[]},a.push(t),t.values=o),t.arguments.push(g)}return this.boundPath=h(r._path),this.groups=a,this.outputFormat=n,this.isProgressive=i,this.isCompleted=!1,this.isMaster=null==r._source,this.values=o,this},n.prototype.invokeSourceRequest=function(t){return this},n.prototype.ensureCollect=function(t){var e=this.finally(function(){var e=t._root,r=e.cache;e.collectionScheduler.schedule(function(){u(e,e.expired,c(r),t._maxSize,t._collectRatio,r[l])})});return new this.constructor(function(t){return e.subscribe(t)})},e.exports=n},{101:101,134:134,159:159,46:46,49:49,64:64,81:81,88:88,98:98,99:99}],63:[function(t,e,r){function n(t){s.call(this,t||i)}function i(t){for(var e=this.model,r=this.method,n=this.groups,i=-1,o=n.length;++i<o;){var s=n[i],c=s.inputType,u=s.arguments;if(u.length>0){(0,e["_"+r+c+"AsJSON"])(e,u)}}return t.onCompleted(),a.empty}var o=t(159),a=o.Disposable,s=t(62);n.create=s.create,n.prototype=Object.create(s.prototype),n.prototype.method="invalidate",n.prototype.constructor=n,e.exports=n},{159:159,62:62}],64:[function(t,e,r){function n(t){this._subscribe=t}function i(t){var e=this.model,r=new this.type;return r.model=e,r.args=this.args,r.outputFormat=t.outputFormat||"AsPathMap",r.isProgressive=t.isProgressive||!1,r.subscribeCount=0,r.subscribeLimit=t.retryLimit||10,r.initialize().invokeSourceRequest(e).ensureCollect(e).subscribe(t)}var o=t(32),a=t(159)&&t(158),s=a.Observable,c=t(84),u=t(105),h={outputFormat:{value:"AsJSONG"}},l={isProgressive:{value:!0}};n.create=function(t,e){var r=new n(i);return r.args=e,r.type=this,r.model=t,r},n.prototype=Object.create(s.prototype),n.prototype.constructor=n,n.prototype._mixin=function(){var t=this,e=c(arguments);return new t.constructor(function(r){return t.subscribe(e.reduce(function(t,e){return Object.create(t,e)},r))})},n.prototype._toJSONG=function(){return this._mixin(h)},n.prototype.progressively=function(){return this._mixin(l)},n.prototype.subscribe=function(t,e,r){var n=t;n&&"object"==typeof n||(n={onNext:t||u,onError:e||u,onCompleted:r||u});var i=this._subscribe(n);switch(typeof i){case"function":return{dispose:i};case"object":return i||{dispose:u};default:return{dispose:u}}},n.prototype.then=function(t,e){var r=this;return new o.Promise(function(t,e){var n,i=!1;r.toArray().subscribe(function(t){n=t.length<=1?t[0]:t},function(t){i=!0,e(t)},function(){i===!1&&t(n)})}).then(t,e)},e.exports=n},{105:105,158:158,159:159,32:32,84:84}],65:[function(t,e,r){function n(t){f.call(this,t||i)}function i(t){return this.isCompleted?a.call(this,t):o.call(this,t)}function o(t){if(this.subscribeCount++>this.subscribeLimit)return t.onError("Loop kill switch thrown."),l.empty;for(var e=[],r=[],n=this.model,i=this.isMaster,o=n._root,u=this.outputFormat,h=o.errorSelector,p=this.method,f=this.groups,d=-1,v=f.length;++d<v;){var g=f[d],y=g.inputType,b=g.arguments;if(b.length>0){var _="_"+p+y+u,x=n[_],w=x(n,b,null,h);r.push.apply(r,w[1]),"PathValues"===y?e.push.apply(e,b.map(s)):"JSONGs"===y?e.push.apply(e,m(b,c)):e.push.apply(e,w[0])}}return this.requestedPaths=e,i?(this.isCompleted=!0,a.call(this,t)):void t.onError({method:p,optimizedPaths:r,invokeSourceRequest:!0})}function a(t){var e=new p(this.model,this.requestedPaths);return"AsJSONG"===this.outputFormat&&(e=e._toJSONG()),this.isProgressive&&(e=e.progressively()),e.subscribe(t)}function s(t){return t.path}function c(t){return t.paths}var u=t(159),h=u.Observable,l=u.Disposable,p=t(67),f=t(62),d=t(9),m=t(82),v=new Array(0);n.create=f.create,n.prototype=Object.create(f.prototype),n.prototype.method="set",n.prototype.constructor=n,n.prototype.invokeSourceRequest=function(t){var e=this,r=this.catch(function(n){var i;if(n&&n.invokeSourceRequest===!0){var o={},a=t._path,s=n.optimizedPaths;t._path=v,t._getPathValuesAsJSONG(t._materialize().withoutDataSource(),s,[o]),t._path=a,i=t._request.set(o).do(function(t){e.isCompleted=s.length===t.paths.length},function(){e.isCompleted=!0}).materialize().flatMap(function(t){if("C"===t.kind)return h.empty();if("E"===t.kind){var e=t.exception;if(d.is(e))return h.throw(t.exception)}return r})}else i=h.throw(n);return i});return new this.constructor(function(t){return r.subscribe(t)})},e.exports=n},{159:159,62:62,67:67,82:82,9:9}],66:[function(t,e,r){var n=function(t){this.disposed=!1,this.currentDisposable=t};n.prototype={dispose:function(){if(!this.disposed&&this.currentDisposable){this.disposed=!0;var t=this.currentDisposable;t.dispose?t.dispose():t()}}},e.exports=n},{}],67:[function(t,e,r){var n=t(64),i=t(68),o=t(69),a={dispose:function(){}},s=t(159).Observable,c=e.exports=function(t,e,r,n){this.model=t,this.currentRemainingPaths=e,this.isJSONGraph=r||!1,this.isProgressive=n||!1};c.prototype=Object.create(s.prototype),c.prototype.subscribe=n.prototype.subscribe,c.prototype.then=n.prototype.then,c.prototype._toJSONG=function(){return new c(this.model,this.currentRemainingPaths,!0,this.isProgressive)},c.prototype.progressively=function(){return new c(this.model,this.currentRemainingPaths,this.isJSONGraph,!0)},c.prototype._subscribe=function(t){var e=[{}],r=[],n=t.isJSONG=this.isJSONGraph,s=this.isProgressive,c=i(this.model,this.currentRemainingPaths,t,s,n,e,r);return c?o(this,this.model,c,t,e,r,1):a}},{159:159,64:64,68:68,69:69}],68:[function(t,e,r){var n=t(19),i=n.getWithPathsAsJSONGraph,o=n.getWithPathsAsPathMap;e.exports=function(t,e,r,n,a,s,c){var u;if(u=a?i(t,e,s):o(t,e,s),u.criticalError)return r.onError(u.criticalError),null;var h=u.hasValue,l=!u.requestedMissingPaths||!t._source,p=s[0].json||s[0].jsonGraph;if(u.errors)for(var f=u.errors,d=c.length,m=0,v=f.length;v>m;++m,++d)c[d]=f[m];if(h&&n||p&&l)try{++t._root.syncRefCount,r.onNext(s[0])}catch(t){throw t}finally{--t._root.syncRefCount}return l?(c.length?r.onError(c):r.onCompleted(),null):u}},{19:19}],69:[function(t,e,r){var n=t(68),i=t(10),o=t(30).fastCat,a=t(49),s=t(88),c=t(66),u=t(46);e.exports=function t(e,r,h,l,p,f,d){if(10===d)throw new i;var m=r._request,v=h.requestedMissingPaths,g=h.optimizedMissingPaths,y=new c,b=[],_=r._path;if(_.length)for(var x=0,w=v.length;w>x;++x)b[x]=o(_,v[x]);else b=v;var S=m.get(b,g,function(){var i=n(r,v,l,e.isProgressive,e.isJSONGraph,p,f);if(i)y.currentDisposable=t(e,r,i,l,p,f,d+1);else{var o=r._root,c=o.cache,h=c[u];a(o,o.expired,s(c),r._maxSize,r._collectRatio,h)}});return y.currentDisposable=S,y}},{10:10,30:30,46:46,49:49,66:66,68:68,88:88}],70:[function(t,e,r){var n=t(67);e.exports=function(t){return new n(this,t)}},{67:67}],71:[function(t,e,r){var n=t(134),i=t(64),o=t(72),a=t(116),s=t(67);e.exports=function(){var t=a(arguments,o,"get");if(t!==!0)return new i(function(e){e.onError(t)});var e=n.fromPathsOrPathValues(arguments);return new s(this,e)}},{116:116,134:134,64:64,67:67,72:72}],72:[function(t,e,r){e.exports={path:!0,pathSyntax:!0}},{}],73:[function(t,e,r){function n(){}var i=t(123),o=t(159),a=o.Disposable;n.prototype.schedule=function(t){return i(t),a.empty},n.prototype.scheduleWithState=function(t,e){var r=this;return i(function(){e(r,t)}),a.empty},e.exports=n},{123:123,159:159}],74:[function(t,e,r){function n(){}var i=t(159),o=i.Disposable;n.prototype.schedule=function(t){return t(),o.empty},n.prototype.scheduleWithState=function(t,e){return e(this,t),o.empty},e.exports=n},{159:159}],75:[function(t,e,r){function n(t){this.delay=t}var i=t(159),o=i.Disposable;n.prototype.schedule=function(t){var e=setTimeout(t,this.delay);return o.create(function(){void 0!==e&&(clearTimeout(e),e=void 0)})},n.prototype.scheduleWithState=function(t,e){var r=this,n=setTimeout(function(){e(r,t)},this.delay);return o.create(function(){void 0!==n&&(clearTimeout(n),n=void 0)})},e.exports=n},{159:159}],76:[function(t,e,r){function n(t,e,r,i,a,s,c,u,h,l,p,d,m,v,g,b,_){for(var x={},w=e<t.length-1,S=t[e],M=y(S,x),E=d.index;;){p.depth=e;var T=o(r,i,a,s,c,u,M,w,!1,p,d,m,v,g,b,_);p[e]=M,p.index=e,d[d.index++]=M;var C=T[0],O=T[1];if(C&&(w?n(t,e+1,r,O,C,s,T[3],T[2],h,l,p,d,m,v,g,b,_):(f(g,C),h.push(p.slice(0,p.index+1)),l.push(d.slice(0,d.index)))),M=y(S,x),x.done)break;d.index=E}}function i(t,e,r,n,i,a,u,p,m,y,b){var _=e.value;if(a.splice(0,a.length),a.push.apply(a,_),d(e))return a.index=_.length,g(e,p,m),[void 0,t,n,r];f(m,e);var x=0,w=e,S=_.length-1,M=e=t,E=n=r;do{var T=_[x],C=S>x,O=o(t,M,e,r,E,n,T,C,!0,i,a,u,p,m,y,b);if(e=O[0],v(e))return a.index=x,O;M=O[1],n=O[2],E=O[3]}while(x++<S);if(a.index=x,w[c]!==e){var P=e[l]||0;e[l]=P+1,e[s+P]=w,w[c]=e,w[h]=P}return[e,M,n,E]}function o(t,e,r,n,o,s,c,u,h,l,f,d,m,g,y,b){for(var x=r.$type;x===p;){var w=i(t,r,n,s,l,f,d,m,g,y,b);if(r=w[0],v(r))return w;e=w[1],s=w[2],o=w[3],x=r.$type}if(void 0!==x)return[r,e,s,o];if(null==c){if(u)throw new Error("`null` is not allowed in branch key positions.");r&&(c=r[a])}else e=r,o=s,r=e[c],s=o&&o[c];return r=_(e,r,s,c,l,f,d,m,g,y,b),[r,e,s,o]}var a=t(36),s=t(43),c=t(33),u=t(46),h=t(42),l=t(44),p=t(120),f=t(50),d=t(94),m=t(96),v=t(102),g=t(86),y=t(143).iterateKeySet,b=t(92),_=t(103);e.exports=function(t,e,r,i,o){for(var a=t._root,s=a,c=a.expired,h=b(),l=a.cache,p=l[u],f=[],d=[],v=[],g=[],y=-1,_=e.length;++y<_;)for(var x=e[y],w=x.paths,S=x.jsonGraph,M=-1,E=w.length;++M<E;){var T=w[M];d.index=0,n(T,0,l,l,l,S,S,S,v,g,f,d,h,c,s,o,i)}var C=l[u],O=a.onChange;return m(O)&&p!==C&&O(),[v,g]}},{102:102,103:103,120:120,143:143,33:33,36:36,42:42,43:43,44:44,46:46,50:50,86:86,92:92,94:94,96:96}],77:[function(t,e,r){function n(t,e,r,i,s,c,u,h,l,p,f,d,m,v){var g=a(t);if(g&&g.length)for(var b=0,x=g.length,w=l.index;;){var S=g[b],M=t[S],E=_(M)&&!M.$type;h.depth=e;var T=o(r,i,s,S,M,E,!1,h,l,p,f,d,m,v);h[e]=S,h.index=e,l[l.index++]=S;var C=T[0],O=T[1];if(C&&(E?n(M,e+1,r,O,C,c,u,h,l,p,f,d,m,v):(y(d,C),c.push(h.slice(0,h.index+1)),u.push(l.slice(0,l.index)))),++b>=x)break;l.index=w}}function i(t,e,r,n,i,a,s,u,p,m){var v=r.value;if(i.splice(0,i.length),i.push.apply(i,v),x(r))return i.index=v.length,M(r,s,u),[void 0,e];y(u,r);var g=r,b=e;if(null!=(r=r[l]))b=r[h]||e,i.index=v.length;else{var _=0,w=v.length-1;b=r=e;do{var E=v[_],T=w>_,C=o(e,b,r,E,t,T,!0,n,i,a,s,u,p,m);if(r=C[0],S(r))return i.index=_,C;b=C[1]}while(_++<w);if(i.index=_,g[l]!==r){var O=r[d]||0;r[d]=O+1,r[c+O]=g,g[l]=r,g[f]=O}}return[r,b]}function o(t,e,r,n,o,a,c,u,h,l,p,f,d,v){for(var g=r.$type;g===m;){var y=i(o,t,r,u,h,l,p,f,d,v);if(r=y[0],S(r))return y;e=y[1],g=r&&r.$type}if(void 0!==g)return[r,e];if(null==n){if(a)throw new Error("`null` is not allowed in branch key positions.");r&&(n=r[s])}else e=r,r=e[n];return r=T(e,r,n,o,a,c,u,h,l,p,f,d,v),[r,e]}function a(t){if(_(t)&&!t.$type){var e=[],r=0;g(t)&&(e[r++]="length");for(var n in t)n[0]!==u&&"$"!==n[0]&&b(t,n)&&(e[r++]=n);return e}}var s=t(36),c=t(43),u=t(40),h=t(39),l=t(33),p=t(46),f=t(42),d=t(44),m=t(120),v=t(13),g=Array.isArray,y=t(50),b=t(91),_=t(100),x=t(95),w=t(96),S=t(102),M=t(86),E=t(92),T=t(104);e.exports=function(t,e,r,i,o){for(var a=t._root,s=a,c=a.expired,u=E(),l=t._path,f=a.cache,d=l.length?v(t,l).value:f,m=d[h]||f,g=f[p],y=[],b=[],_=[],x=l.length,S=-1,M=e.length;++S<M;){var T=e[S],C=l.slice(0);C.index=x,n(T.json,0,f,m,d,b,_,y,C,u,c,s,o,i)}var O=f[p],P=a.onChange;return w(P)&&g!==O&&P(),[b,_]}},{100:100,102:102,104:104,120:120,13:13,33:33,36:36,39:39,40:40,42:42,43:43,44:44,46:46,50:50,86:86,91:91,92:92,95:95,96:96}],78:[function(t,e,r){function n(t,e,r,i,a,s,c,u,h,l,p,f,d,v,g){for(var y={},b=r<e.length-1,x=e[r],w=_(x,y),S=l.index;;){h.depth=r;var M=o(i,a,s,w,t,b,!1,h,l,p,f,d,v,g);h[r]=w,h.index=r,l[l.index++]=w;var E=M[0],T=M[1];if(E&&(b?n(t,e,r+1,i,T,E,c,u,h,l,p,f,d,v,g):(m(d,E),c.push(h.slice(0,h.index+1)),u.push(l.slice(0,l.index)))),w=_(x,y),y.done)break;l.index=S}}function i(t,e,r,n,i,a,h,f,d,g){var _=r.value;if(i.splice(0,i.length),i.push.apply(i,_),v(r))return i.index=_.length,b(r,h,f),[void 0,e];m(f,r);var x=r,w=e;if(null!=(r=r[u]))w=r[c]||e,i.index=_.length;else{var S=0,M=_.length-1;w=r=e;do{var E=_[S],T=M>S,C=o(e,w,r,E,t,T,!0,n,i,a,h,f,d,g);if(r=C[0],y(r))return i.index=S,C;w=C[1]}while(S++<M);if(i.index=S,x[u]!==r){var O=r[p]||0;r[p]=O+1,r[s+O]=x,x[u]=r,x[l]=O}}return[r,w]}function o(t,e,r,n,o,s,c,u,h,l,p,d,m,v){for(var g=r.$type;g===f;){var b=i(o,t,r,u,h,l,p,d,m,v);if(r=b[0],y(r))return b;e=b[1],g=r.$type}if(void 0!==g)return[r,e];if(null==n){if(s)throw new Error("`null` is not allowed in branch key positions.");r&&(n=r[a])}else e=r,r=e[n];return r=w(e,r,n,o,s,c,u,h,l,p,d,m,v),[r,e]}var a=t(36),s=t(43),c=t(39),u=t(33),h=t(46),l=t(42),p=t(44),f=t(120),d=t(13),m=t(50),v=t(95),g=t(96),y=t(102),b=t(86),_=t(143).iterateKeySet,x=t(92),w=t(104);e.exports=function(t,e,r,i,o){for(var a=t._root,s=a,u=a.expired,l=x(),p=t._path,f=a.cache,m=p.length?d(t,p).value:f,v=m[c]||f,y=f[h],b=[],_=[],w=[],S=p.length,M=-1,E=e.length;++M<E;){var T=e[M],C=T.path,O=T.value,P=p.slice(0);P.index=S,n(O,C,0,f,v,m,_,w,b,P,l,u,s,o,i)}var A=f[h],j=a.onChange;return g(j)&&y!==A&&j(),[_,w]}},{102:102,104:104,120:120,13:13,143:143,33:33,36:36,39:39,42:42,43:43,44:44,46:46,50:50,86:86,92:92,95:95,96:96}],79:[function(t,e,r){var n=t(130),i=t(64),o=t(101);e.exports=function(t,e){for(var r=o(t)?t:n.pathValue(t,e),a=0,s=r.path,c=s.length;++a<c;)if("object"==typeof s[a])return new i(function(t){t.onError(new Error("Paths must be simple paths"))});var u=this;return new i(function(t){return u._set(r).subscribe(function(e){for(var r=e.json,n=-1,i=s.length;r&&++n<i;)r=r[s[n]];t.onNext(r)},function(e){t.onError(e)},function(){t.onCompleted()})})}},{101:101,130:130,64:64}],80:[function(t,e,r){var n=t(134),i=t(101),o=t(78);e.exports=function(t,e,r,a){var s=n.fromPath(t),c=e,u=r,h=a;if(i(s)?(h=u,u=c,c=s):c={path:s,value:c},i(c)===!1)throw new Error("Model#setValueSync must be called with an Array path.");return"function"!=typeof u&&(u=this._root._errorSelector),"function"!=typeof h&&(h=this._root._comparator),this._syncCheck("setValueSync")?(o(this,[c]),this._getValueSync(this,c.path).value):void 0}},{101:101,134:134,78:78}],81:[function(t,e,r){e.exports=function(t){if(!t)return t;for(var e=-1,r=t.length,n=[];++e<r;)n[e]=t[e];return n}},{}],82:[function(t,e,r){e.exports=function(t,e){for(var r=-1,n=-1,i=t.length,o=[];++n<i;)for(var a=e(t[n],n,t),s=-1,c=a.length;++s<c;)o[++r]=a[s];return o}},{}],83:[function(t,e,r){e.exports=function(t,e){for(var r=-1,n=t.length,i=new Array(n);++r<n;)i[r]=e(t[r],r,t);return i}},{}],84:[function(t,e,r){e.exports=function(t,e,r){var n=e||0,i=-1,o=t.length-n;0>o&&(o=0),r>0&&o>r&&(o=r);for(var a=new Array(o);++i<o;)a[i]=t[i+n];return a}},{}],85:[function(t,e,r){var n=t(40),i=t(91),o=Array.isArray,a=t(100);e.exports=function(t){var e=t;if(a(e)){e=o(t)?[]:{};var r=t;for(var s in r)s[0]!==n&&i(r,s)&&(e[s]=r[s])}return e}},{100:100,40:40,91:91}],86:[function(t,e,r){var n=t(51),i=t(35);e.exports=function(t,e,r){return t[i]||(t[i]=!0,e.push(t),n(r,t)),t}},{35:35,51:51}],87:[function(t,e,r){var n=t(100);e.exports=function(t){return n(t)&&t.$expires||void 0}},{100:100}],88:[function(t,e,r){var n=t(100);e.exports=function(t){return n(t)&&t.$size||0}},{100:100}],89:[function(t,e,r){var n=t(100);e.exports=function(t){return n(t)&&t.$timestamp||void 0}},{100:100}],90:[function(t,e,r){var n=t(100);e.exports=function(t,e){var r=n(t)&&t.$type||void 0;return e&&r?"branch":r}},{100:100}],91:[function(t,e,r){var n=t(100),i=Object.prototype.hasOwnProperty;e.exports=function(t,e){return n(t)&&i.call(t,e)}},{100:100}],92:[function(t,e,r){var n=1;e.exports=function(){return n++}},{}],93:[function(t,e,r){var n=t(36),i=t(39),o=t(46);e.exports=function(t,e,r,a){return t[n]=r,t[i]=e,t[o]=a,e[r]=t,t}},{36:36,39:39,46:46}],94:[function(t,e,r){var n=t(106),i=t(122),o=t(121);e.exports=function(t){var e=t.$expires;return null!=e&&e!==o&&e!==i&&e<n()}},{106:106,121:121,122:122}],95:[function(t,e,r){var n=t(106),i=t(122),o=t(121);e.exports=function(t){var e=t.$expires;return null!=e&&e!==o&&(e===i||e<n())}},{106:106,121:121,122:122}],96:[function(t,e,r){e.exports=function(t){return Boolean(t)&&"function"==typeof t}},{}],97:[function(t,e,r){var n=t(40);e.exports=function(t){return"$size"===t||t&&t.charAt(0)===n}},{40:40}],98:[function(t,e,r){var n=t(100);e.exports=function(t){return n(t)&&"json"in t}},{100:100}],99:[function(t,e,r){var n=Array.isArray,i=t(100);e.exports=function(t){return i(t)&&n(t.paths)&&(i(t.jsonGraph)||i(t.jsong)||i(t.json)||i(t.values)||i(t.value))}},{100:100}],100:[function(t,e,r){e.exports=function(t){return null!==t&&"object"==typeof t}},{}],101:[function(t,e,r){var n=Array.isArray,i=t(100);e.exports=function(t){return i(t)&&(n(t.path)||"string"==typeof t.path)}},{100:100}],102:[function(t,e,r){e.exports=function(t){return null==t||"object"!=typeof t}},{}],103:[function(t,e,r){var n=t(36),i=t(39),o=t(120),a=t(119),s=t(88),c=t(89),u=t(100),h=t(95),l=t(96),p=t(50),f=t(117),d=t(93),m=t(86),v=t(110),g=t(115),y=t(107);e.exports=function(t,e,r,b,_,x,w,S,M,E,T){var C,O,P,A,j,R,L;if(e===r){if(null===r)return e=f(r,void 0,r),t=g(t,-e.$size,M,w),e=d(e,t,b),p(M,e),e;if(void 0===r)return r;if((A=u(e))&&null==(O=e.$type))return null==e[i]&&(e[n]=b,e[i]=t),e}else(A=u(e))&&(O=e.$type);if(O!==o){if(j=u(r),j&&(P=r.$type),A&&!O&&(null==r||j&&!P))return e}else{if(null==r)return h(e)?void m(e,S,M):e;if((j=u(r))&&(P=r.$type)===o)if(e===r){if(null!=e[i])return e}else if(R=e.$timestamp,L=r.$timestamp,!h(e)&&!h(r)&&R>L)return}if(O&&j&&!P)return d(v(e,r,t,b,M),t,b);if(P||!j){if(P===a&&l(T)&&(r=T(y(_,b),r)),P&&e===r)null==e[i]&&(e=f(e,O,e.value),t=g(t,-e.$size,M,w),e=d(e,t,b,w));else{var N=!0;!O&&A||(N=c(r)<c(e)==0,(O||P)&&l(E)&&(N=!E(e,r,x.slice(0,x.index)))),N&&(r=f(r,P,P?r.value:r),C=s(e)-s(r),e=v(e,r,t,b,M),t=g(t,C,M,w),e=d(e,t,b,w))}h(e)?m(e,S,M):p(M,e)}else null==e&&(e=d(r,t,b));return e}},{100:100,107:107,110:110,115:115,117:117,119:119,120:120,36:36,39:39,50:50,86:86,88:88,89:89,93:93,95:95,96:96}],104:[function(t,e,r){var n=t(120),i=t(119),o=t(90),a=t(88),s=t(89),c=t(95),u=t(102),h=t(96),l=t(117),p=t(86),f=t(93),d=t(110),m=t(115),v=t(114),g=t(107);e.exports=function(t,e,r,y,b,_,x,w,S,M,E,T,C){var O=o(e,_);if(b||_)O&&c(e)&&(O="expired",p(e,M,E)),(O&&O!==n||u(e))&&(e=d(e,{},t,r,E),e=f(e,t,r,S),e=v(e,S));else{var P=y,A=o(P),j=s(P)<s(e)==0;if((O||A)&&h(T)&&(j=!T(e,P,w.slice(0,w.index))),j){A===i&&h(C)&&(P=C(g(x,r),P)),P=l(P,A,A?P.value:P);var R=a(e)-a(P);e=d(e,P,t,r,E),t=m(t,R,E,S),e=f(e,t,r,S)}}return e}},{102:102,107:107,110:110,114:114,115:115,117:117,119:119,120:120,86:86,88:88,89:89,90:90,93:93,95:95,96:96}],105:[function(t,e,r){e.exports=function(){}},{}],106:[function(t,e,r){e.exports=Date.now},{}],107:[function(t,e,r){e.exports=function(t,e){var r=t.slice(0,t.depth);return r[r.length]=e,r}},{}],108:[function(t,e,r){var n=t(120),i=t(39),o=t(51),a=t(100),s=t(112),c=t(113);e.exports=function(t,e,r,u){if(a(t)){var h=t.$type;return Boolean(h)&&(h===n&&c(t),o(u,t)),s(t),e[r]=t[i]=void 0,!0}return!1}},{100:100,112:112,113:113,120:120,39:39,51:51}],109:[function(t,e,r){var n=t(91),i=t(40),o=t(108);e.exports=function t(e,r,a,s){if(o(e,r,a,s)){if(null==e.$type)for(var c in e)c[0]!==i&&"$"!==c[0]&&n(e,c)&&t(e[c],e,c,s);return!0}return!1}},{108:108,40:40,91:91}],110:[function(t,e,r){var n=t(100),i=t(111),o=t(109);e.exports=function(t,e,r,a,s){return t===e?t:(n(t)&&(i(t,e),o(t,r,a,s)),r[a]=e,e)}},{100:100,109:109,111:111}],111:[function(t,e,r){var n=t(43),i=t(33),o=t(44);e.exports=function(t,e){for(var r=t[o]||0,a=e[o]||0,s=-1;++s<r;){var c=t[n+s];void 0!==c&&(c[i]=e,e[n+(a+s)]=c,t[n+s]=void 0)}return e[o]=r+a,t[o]=void 0,e}},{33:33,43:43,44:44}],112:[function(t,e,r){var n=t(43),i=t(33),o=t(42),a=t(44);e.exports=function(t){for(var e=-1,r=t[a]||0;++e<r;){var s=t[n+e];null!=s&&(s[i]=s[o]=t[n+e]=void 0)}return t[a]=void 0,t}},{33:33,42:42,43:43,44:44}],113:[function(t,e,r){var n=t(43),i=t(33),o=t(42),a=t(44);e.exports=function(t){var e=t[i];if(e){for(var r=(t[o]||0)-1,s=(e[a]||0)-1;++r<=s;)e[n+r]=e[n+(r+1)];e[a]=s,t[o]=t[i]=e=void 0}return t}},{33:33,42:42,43:43,44:44}],114:[function(t,e,r){var n=t(43),i=t(39),o=t(46),a=t(44);e.exports=function(t,e){var r=[t],s=0;do{var c=r[s--];if(c&&c[o]!==e){c[o]=e,r[s++]=c[i];for(var u=-1,h=c[a]||0;++u<h;)r[s++]=c[n+u]}}while(s>-1);return t}},{39:39,43:43,44:44,46:46}],115:[function(t,e,r){var n=t(36),i=t(46),o=t(39),a=t(108),s=t(114);e.exports=function(t,e,r,c){var u=t;do{var h=u[o];0>=(u.$size=(u.$size||0)-e)&&null!=h?a(u,h,u[n],r):u[i]!==c&&s(u,c),u=h}while(u);return t}},{108:108,114:114,36:36,39:39,46:46}],116:[function(t,e,r){var n=Array.isArray,i=t(101),o=t(99),a=t(98),s=t(134);e.exports=function(t,e,r){for(var c=0,u=t.length;u>c;++c){var h=t[c],l=!1;if(n(h)&&e.path?l=!0:"string"==typeof h&&e.pathSyntax?l=!0:i(h)&&e.pathValue?(h.path=s.fromPath(h.path),l=!0):o(h)&&e.jsonGraph?l=!0:a(h)&&e.json?l=!0:"function"==typeof h&&c+1===u&&e.selector&&(l=!0),!l)return new Error("Unrecognized argument "+typeof h+" ["+String(h)+"] to Model#"+r)}return!0}},{101:101,134:134,98:98,99:99}],117:[function(t,e,r){var n=t(130),i=n.atom,o=t(106),a=t(122),s=t(37),c=t(85),u=Array.isArray,h=t(88),l=t(87);e.exports=function(t,e,r){var n=0,p=t,f=e;if(f?(p=c(p),n=h(p),p.$type=f):(p=i(r),f=p.$type,p[s]=!0),null==r)n=51;else if(null==n||0>=n)switch(typeof r){case"object":n=u(r)?50+r.length:51;break;case"string":n=50+r.length;break;default:n=51}var d=l(p);return"number"==typeof d&&a>d&&(p.$expires=o()+-1*d),p.$size=n,p}},{106:106,122:122,130:130,37:37,85:85,87:87,88:88}],118:[function(t,e,r){e.exports="atom"},{}],119:[function(t,e,r){e.exports="error"},{}],120:[function(t,e,r){e.exports="ref"},{}],121:[function(t,e,r){e.exports=1},{}],122:[function(t,e,r){e.exports=0},{}],123:[function(t,e,r){"use strict";function n(){if(c.length)throw c.shift()}function i(t){var e;e=s.length?s.pop():new o,e.task=t,a(e)}function o(){this.task=null}var a=t(124),s=[],c=[],u=a.makeRequestCallFromTimer(n);e.exports=i,o.prototype.call=function(){try{this.task.call()}catch(t){i.onerror?i.onerror(t):(c.push(t),u())}finally{this.task=null,s[s.length]=this}}},{124:124}],124:[function(t,e,r){(function(t){"use strict";function r(t){a.length||(o(),s=!0),a[a.length]=t}function n(){for(;c<a.length;){var t=c;if(c+=1,a[t].call(),c>u){for(var e=0,r=a.length-c;r>e;e++)a[e]=a[e+c];a.length-=c,c=0}}a.length=0,c=0,s=!1}function i(t){return function(){function e(){clearTimeout(r),clearInterval(n),t()}var r=setTimeout(e,0),n=setInterval(e,50)}}e.exports=r;var o,a=[],s=!1,c=0,u=1024,h=t.MutationObserver||t.WebKitMutationObserver;o="function"==typeof h?function(t){var e=1,r=new h(t),n=document.createTextNode("");return r.observe(n,{characterData:!0}),function(){e=-e,n.data=e}}(n):i(n),r.requestFlush=o,r.makeRequestCallFromTimer=i}).call(this,void 0!==i?i:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],125:[function(t,e,r){"use strict";function n(t,e){var r;for(r in e)t[r]=e[r];return t}function i(t,e){if(this._jsongUrl=t,"number"==typeof e){e={timeout:e}}this._config=n({timeout:15e3,headers:{}},e||{})}var o=t(129),a=t(126);Array.isArray,i.prototype={constructor:i,buildQueryObject:a,get:function(t){var e=this.buildQueryObject(this._jsongUrl,"GET",{paths:t,method:"get"}),r=n(e,this._config);return o("GET",r,this)},set:function(t){var e="POST",r=this.buildQueryObject(this._jsongUrl,e,{jsonGraph:t,method:"set"}),i=n(r,this._config);return i.headers["Content-Type"]="application/x-www-form-urlencoded",o(e,i,this)},call:function(t,e,r,i){e=e||[],r=r||[],i=i||[];var a="POST",s=[];s.push("method=call"),s.push("callPath="+encodeURIComponent(JSON.stringify(t))),s.push("arguments="+encodeURIComponent(JSON.stringify(e))),s.push("pathSuffixes="+encodeURIComponent(JSON.stringify(r))),s.push("paths="+encodeURIComponent(JSON.stringify(i)));var c=this.buildQueryObject(this._jsongUrl,a,s.join("&")),u=n(c,this._config);return u.headers["Content-Type"]="application/x-www-form-urlencoded",o(a,u,this)}},i.XMLHttpSource=i,i.default=i,e.exports=i},{126:126,129:129}],126:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n,i=[],o={url:t},a=-1!==t.indexOf("?"),s=a?"&":"?";return"string"==typeof r?i.push(r):(n=Object.keys(r),n.forEach(function(t){var e="object"==typeof r[t]?JSON.stringify(r[t]):r[t];i.push(t+"="+encodeURIComponent(e))})),"GET"===e?o.url+=s+i.join("&"):o.data=i.join("&"),o}},{}],127:[function(t,e,r){(function(t){"use strict";e.exports=function(){var e=new t.XMLHttpRequest;if("withCredentials"in e)return e;if(t.XDomainRequest)return new XDomainRequest;throw new Error("CORS is not supported by your browser")}}).call(this,void 0!==i?i:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],128:[function(t,e,r){(function(t){"use strict";e.exports=function(){var e,r,n;if(t.XMLHttpRequest)return new t.XMLHttpRequest;try{for(r=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],n=0;3>n;n++)try{if(e=r[n],new t.ActiveXObject(e))break}catch(t){}return new t.ActiveXObject(e)}catch(t){throw new Error("XMLHttpRequest is not supported by your browser")}}}).call(this,void 0!==i?i:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],129:[function(t,e,r){"use strict";function n(){}function i(t,e,r){return n.create(function(n){var i,o,l,p,f,d={method:t||"GET",crossDomain:!1,async:!0,headers:{},responseType:"json"};for(f in e)h.call(e,f)&&(d[f]=e[f]);d.crossDomain||d.headers["X-Requested-With"]||(d.headers["X-Requested-With"]="XMLHttpRequest"),null!=r.onBeforeRequest&&r.onBeforeRequest(d);try{i=d.crossDomain?u():c()}catch(t){n.onError(t)}try{d.user?i.open(d.method,d.url,d.async,d.user,d.password):i.open(d.method,d.url,d.async),i.timeout=d.timeout,i.withCredentials=d.withCredentials!==!1,l=d.headers;for(p in l)h.call(l,p)&&i.setRequestHeader(p,l[p]);if(d.responseType)try{i.responseType=d.responseType}catch(t){if("json"!==d.responseType)throw t}i.onreadystatechange=function(t){4===i.readyState&&(o||(o=!0,a(n,i,t)))},i.ontimeout=function(t){o||(o=!0,s(n,i,"timeout error",t))},i.send(d.data)}catch(t){n.onError(t)}return function(){o||4===i.readyState||(o=!0,i.abort())}})}function o(t,e,r){r||(r=new Error(e)),t.onError(r)}function a(t,e,r){var n,i;if(e&&t){i=e.responseType,n="response"in e?e.response:e.responseText;var a=1223===e.status?204:e.status;if(a>=200&&399>=a){try{"json"!==i&&(n=JSON.parse(n||"")),"string"==typeof n&&(n=JSON.parse(n||""))}catch(e){o(t,"invalid json",e)}return t.onNext(n),void t.onCompleted()}return 401===a||403===a||407===a?o(t,n):410===a?o(t,n):408===a||504===a?o(t,n):o(t,n||"Response code "+a)}}function s(t,e,r,n){o(t,r||e.statusText||"request error",n)}var c=t(128),u=t(127),h=Object.prototype.hasOwnProperty,l=function(){};n.create=function(t){var e=new n;return e.subscribe=function(e,r,n){var i,o;return i="function"==typeof e?{onNext:e,onError:r||l,onCompleted:n||l}:e,o=t(i),"function"==typeof o?{dispose:o}:o},e},e.exports=i},{127:127,128:128}],130:[function(t,e,r){function n(t,e,r){var n=Object.create(null);if(null!=r){for(var i in r)n[i]=r[i];return n.$type=t,n.value=e,n}return{$type:t,value:e}}var i=t(134);e.exports={ref:function(t,e){return n("ref",i.fromPath(t),e)},atom:function(t,e){return n("atom",t,e)},undefined:function(){return n("atom")},error:function(t,e){return n("error",t,e)},pathValue:function(t,e){return{path:i.fromPath(t),value:e}},pathInvalidation:function(t){return{path:i.fromPath(t),invalidated:!0}}}},{134:134}],131:[function(t,e,r){e.exports={integers:"integers",ranges:"ranges",keys:"keys"}},{}],
-132:[function(t,e,r){var n={token:"token",dotSeparator:".",commaSeparator:",",openingBracket:"[",closingBracket:"]",openingBrace:"{",closingBrace:"}",escape:"\\",space:" ",colon:":",quote:"quote",unknown:"unknown"};e.exports=n},{}],133:[function(t,e,r){e.exports={indexer:{nested:"Indexers cannot be nested.",needQuotes:"unquoted indexers must be numeric.",empty:"cannot have empty indexers.",leadingDot:"Indexers cannot have leading dots.",leadingComma:"Indexers cannot have leading comma.",requiresComma:"Indexers require commas between indexer args.",routedTokens:"Only one token can be used per indexer when specifying routed tokens."},range:{precedingNaN:"ranges must be preceded by numbers.",suceedingNaN:"ranges must be suceeded by numbers."},routed:{invalid:"Invalid routed token.  only integers|ranges|keys are supported."},quote:{empty:"cannot have empty quoted keys.",illegalEscape:"Invalid escape character.  Only quotes are escapable."},unexpectedToken:"Unexpected token.",invalidIdentifier:"Invalid Identifier.",invalidPath:"Please provide a valid path.",throwError:function(t,e,r){if(r)throw t+" -- "+e.parseString+" with next token: "+r;throw t+" -- "+e.parseString}}},{}],134:[function(t,e,r){var n=t(140),i=t(135),o=t(131),a=function(t,e){return i(new n(t,e))};e.exports=a,a.fromPathsOrPathValues=function(t,e){if(!t)return[];for(var r=[],n=0,i=t.length;i>n;n++)"string"==typeof t[n]?r[n]=a(t[n],e):"string"==typeof t[n].path?r[n]={path:a(t[n].path,e),value:t[n].value}:r[n]=t[n];return r},a.fromPath=function(t,e){return t?"string"==typeof t?a(t,e):t:[]},a.RoutedTokens=o},{131:131,135:135,140:140}],135:[function(t,e,r){var n=t(132),i=t(133),o=t(136);e.exports=function(t){for(var e=t.next(),r={},a=[];!e.done;){switch(e.type){case n.token:var s=+e.token[0];isNaN(s)||i.throwError(i.invalidIdentifier,t),a[a.length]=e.token;break;case n.dotSeparator:0===a.length&&i.throwError(i.unexpectedToken,t);break;case n.space:break;case n.openingBracket:o(t,e,r,a);break;default:i.throwError(i.unexpectedToken,t)}e=t.next()}return 0===a.length&&i.throwError(i.invalidPath,t),a}},{132:132,133:133,136:136}],136:[function(t,e,r){var n=t(132),i=t(133),o=i.indexer,a=t(138),s=t(137),c=t(139);e.exports=function(t,e,r,u){var h=t.next(),l=!1,p=1,f=!1;for(r.indexer=[];!h.done;){switch(h.type){case n.token:case n.quote:r.indexer.length===p&&i.throwError(o.requiresComma,t)}switch(h.type){case n.openingBrace:f=!0,c(t,h,r,u);break;case n.token:var d=+h.token;isNaN(d)&&i.throwError(o.needQuotes,t),r.indexer[r.indexer.length]=d;break;case n.dotSeparator:r.indexer.length||i.throwError(o.leadingDot,t),a(t,h,r,u);break;case n.space:break;case n.closingBracket:l=!0;break;case n.quote:s(t,h,r,u);break;case n.openingBracket:i.throwError(o.nested,t);break;case n.commaSeparator:++p;break;default:i.throwError(i.unexpectedToken,t)}if(l)break;h=t.next()}0===r.indexer.length&&i.throwError(o.empty,t),r.indexer.length>1&&f&&i.throwError(o.routedTokens,t),1===r.indexer.length&&(r.indexer=r.indexer[0]),u[u.length]=r.indexer,r.indexer=void 0}},{132:132,133:133,137:137,138:138,139:139}],137:[function(t,e,r){var n=t(132),i=t(133),o=i.quote;e.exports=function(t,e,r,a){for(var s=t.next(),c="",u=e.token,h=!1,l=!1;!s.done;){switch(s.type){case n.token:case n.space:case n.dotSeparator:case n.commaSeparator:case n.openingBracket:case n.closingBracket:case n.openingBrace:case n.closingBrace:h&&i.throwError(o.illegalEscape,t),c+=s.token;break;case n.quote:h?(c+=s.token,h=!1):s.token!==u?c+=s.token:l=!0;break;case n.escape:h=!0;break;default:i.throwError(i.unexpectedToken,t)}if(l)break;s=t.next()}0===c.length&&i.throwError(o.empty,t),r.indexer[r.indexer.length]=c}},{132:132,133:133}],138:[function(t,e,r){var n=t(140),i=t(132),o=t(133);e.exports=function(t,e,r,a){var s,c=t.peek(),u=1,h=!1,l=!0,p=r.indexer.length-1,f=n.toNumber(r.indexer[p]);for(isNaN(f)&&o.throwError(o.range.precedingNaN,t);!h&&!c.done;){switch(c.type){case i.dotSeparator:3===u&&o.throwError(o.unexpectedToken,t),3===++u&&(l=!1);break;case i.token:s=n.toNumber(t.next().token),isNaN(s)&&o.throwError(o.range.suceedingNaN,t),h=!0;break;default:h=!0}if(h)break;t.next(),c=t.peek()}r.indexer[p]={from:f,to:l?s:s-1}}},{132:132,133:133,140:140}],139:[function(t,e,r){var n=t(132),i=t(131),o=t(133),a=o.routed;e.exports=function(t,e,r,s){var c=t.next(),u=!1,h="";switch(c.token){case i.integers:case i.ranges:case i.keys:break;default:o.throwError(a.invalid,t)}var l=t.next();if(l.type===n.colon&&(u=!0,l=t.next(),l.type!==n.token&&o.throwError(a.invalid,t),h=l.token,l=t.next()),l.type===n.closingBrace){var p={type:c.token,named:u,name:h};r.indexer[r.indexer.length]=p}else o.throwError(a.invalid,t)}},{131:131,132:132,133:133}],140:[function(t,e,r){function n(t,e,r){return{token:t,done:r,type:e}}function i(t,e,r){var i,b=!1,_="",x=r?y:g;do{if(i=e+1>=t.length)break;var w=t[e+1];if(void 0===w||-1!==x.indexOf(w)){if(_.length)break;++e;var S;switch(w){case a:S=o.dotSeparator;break;case s:S=o.commaSeparator;break;case c:S=o.openingBracket;break;case u:S=o.closingBracket;break;case h:S=o.openingBrace;break;case l:S=o.closingBrace;break;case v:S=o.space;break;case d:case m:S=o.quote;break;case f:S=o.escape;break;case p:S=o.colon;break;default:S=o.unknown}b=n(w,S,!1);break}_+=w,++e}while(!i);return!b&&_.length&&(b=n(_,o.token,!1)),b||(b={done:!0}),{token:b,idx:e}}var o=t(132),a=".",s=",",c="[",u="]",h="{",l="}",p=":",f="\\",d='"',m="'",v=" ",g="\\'\"[]., ",y="\\{}'\"[]., :",b=e.exports=function(t,e){this._string=t,this._idx=-1,this._extended=e,this.parseString=""};b.prototype={next:function(){var t=this._nextToken?this._nextToken:i(this._string,this._idx,this._extended);return this._idx=t.idx,this._nextToken=!1,this.parseString+=t.token.token,t.token},peek:function(){var t=this._nextToken?this._nextToken:i(this._string,this._idx,this._extended);return this._nextToken=t,t.token}},b.toNumber=function(t){return isNaN(+t)?NaN:+t}},{132:132}],141:[function(t,e,r){var n=t(147),i=t(148);e.exports=function(t){var e=t.reduce(function(t,e){var r=e.length;return t[r]||(t[r]=[]),t[r].push(e),t},{});return Object.keys(e).forEach(function(t){e[t]=i(e[t])}),n(e)}},{147:147,148:148}],142:[function(t,e,r){var n=t(144);e.exports=function t(e,r,i){for(var o=e,a=!0;a&&i<r.length;++i){var s=r[i],c=typeof s;if(s&&"object"===c){var u={},h=n(s,u),l=i+1;do{var p=o[h];a=void 0!==p,a&&(a=t(p,r,l)),h=n(s,u)}while(a&&!u.done);break}o=o[s],a=void 0!==o}return a}},{144:144}],143:[function(t,e,r){e.exports={iterateKeySet:t(144),toTree:t(148),toTreeWithUnion:t(149),pathsComplementFromTree:t(146),pathsComplementFromLengthTree:t(145),hasIntersection:t(142),toPaths:t(147),collapse:t(141)}},{141:141,142:142,144:144,145:145,146:146,147:147,148:148,149:149}],144:[function(t,e,r){function n(t,e){var r=e.from=t.from||0,n=e.to=t.to||"number"==typeof t.length&&e.from+t.length-1||0;e.rangeOffset=e.from,e.loaded=!0,r>n&&(e.empty=!0)}function i(t,e){e.done=!1;var r=e.isObject=!(!t||"object"!=typeof t);e.isArray=r&&o(t),e.arrayOffset=0}var o=Array.isArray;e.exports=function(t,e){if(void 0===e.isArray&&i(t,e),e.isArray){var r;do{e.loaded&&e.rangeOffset>e.to&&(++e.arrayOffset,e.loaded=!1);if(e.arrayOffset>=t.length){e.done=!0;break}var o=t[e.arrayOffset];if("object"===typeof o){if(e.loaded||n(o,e),e.empty)continue;r=e.rangeOffset++}else++e.arrayOffset,r=o}while(void 0===r);return r}return e.isObject?(e.loaded||n(t,e),e.rangeOffset>e.to?void(e.done=!0):e.rangeOffset++):(e.done=!0,t)}},{}],145:[function(t,e,r){var n=t(142);e.exports=function(t,e){for(var r=[],i=-1,o=0,a=t.length;a>o;++o){var s=t[o];n(e[s.length],s,0)||(r[++i]=s)}return r}},{142:142}],146:[function(t,e,r){var n=t(142);e.exports=function(t,e){for(var r=[],i=-1,o=0,a=t.length;a>o;++o)n(e,t[o],0)||(r[++i]=t[o]);return r}},{142:142}],147:[function(t,e,r){function n(t){return null!==t&&typeof t===p}function i(t,e,r){var n,o,a,s,l,p,f,d,m,v,g,y,b,_,x=u(String(e)),w=Object.create(null),S=[],M=-1,E=0,T=[],C=0;if(s=[],l=-1,r-1>e){for(p=c(t,s);++l<p;)n=s[l],o=i(t[n],e+1,r),a=o.code,w[a]?o=w[a]:(S[E++]=a,o=w[a]={keys:[],sets:o.sets}),x=u(x+n+a),h(n)&&o.keys.push(parseInt(n,10))||o.keys.push(n);for(;++M<E;)if(n=S[M],o=w[n],s=o.keys,(p=s.length)>0)for(f=o.sets,d=-1,m=f.length,b=s[0];++d<m;){for(v=f[d],g=-1,y=v.length,_=new Array(y+1),_[0]=p>1&&s||b;++g<y;)_[g+1]=v[g];T[C++]=_}}else for(p=c(t,s),T[C++]=p>1?[s]:s;++l<p;)x=u(x+s[l]);return{code:x,sets:T}}function o(t){for(var e=-1,r=t.length;++e<r;){var n=t[e];l(n)&&(t[e]=a(n))}return t}function a(t){for(var e=-1,r=t.length-1,n=r>0;++e<=r;){var i=t[e];if(!h(i)){n=!1;break}t[e]=parseInt(i,10)}if(n===!0){t.sort(s);var o=t[0],a=t[r];if(r>=a-o)return{from:o,to:a}}return t}function s(t,e){return t-e}function c(t,e,r){var n=0;for(var i in t)e[n++]=i;return n>1&&e.sort(r),n}function u(t){for(var e=5381,r=-1,n=t.length;++r<n;)e=(e<<5)+e+t.charCodeAt(r);return String(e)}function h(t){return!l(t)&&t-parseFloat(t)+1>=0}var l=Array.isArray,p="object";e.exports=function(t){var e,r=[],a=0;for(var s in t)if(h(s)&&n(e=t[s]))for(var c=i(e,0,parseInt(s,10)).sets,u=-1,l=c.length;++u<l;)r[a++]=o(c[u]);return r}},{}],148:[function(t,e,r){function n(t,e,r){var o,a=e[r],s={},c=r+1;o=i(a,s);do{var u=t[o];u||(c===e.length?t[o]=null:u=t[o]={}),c<e.length&&n(u,e,c),s.done||(o=i(a,s))}while(!s.done)}var i=t(144);Array.isArray,e.exports=function(t){return t.reduce(function(t,e){return n(t,e,0),t},{})}},{144:144}],149:[function(t,e,r){},{}],150:[function(t,e,r){function n(){h=!1,s.length?u=s.concat(u):l=-1,u.length&&i()}function i(){if(!h){var t=setTimeout(n);h=!0;for(var e=u.length;e;){for(s=u,u=[];++l<e;)s&&s[l].run();l=-1,e=u.length}s=null,h=!1,clearTimeout(t)}}function o(t,e){this.fun=t,this.array=e}function a(){}var s,c=e.exports={},u=[],h=!1,l=-1;c.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];u.push(new o(t,e)),1!==u.length||h||setTimeout(i,0)},o.prototype.run=function(){this.fun.apply(null,this.array)},c.title="browser",c.browser=!0,c.env={},c.argv=[],c.version="",c.versions={},c.on=a,c.addListener=a,c.once=a,c.off=a,c.removeListener=a,c.removeAllListeners=a,c.emit=a,c.binding=function(t){throw new Error("process.binding is not supported")},c.cwd=function(){return"/"},c.chdir=function(t){throw new Error("process.chdir is not supported")},c.umask=function(){return 0}},{}],151:[function(t,e,r){"use strict";e.exports=t(156)},{156:156}],152:[function(t,e,r){"use strict";function n(){}function i(t){try{return t.then}catch(t){return v=t,g}}function o(t,e){try{return t(e)}catch(t){return v=t,g}}function a(t,e,r){try{t(e,r)}catch(t){return v=t,g}}function s(t){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._37=0,this._12=null,this._59=[],t!==n&&d(t,this)}function c(t,e,r){return new t.constructor(function(i,o){var a=new s(n);a.then(i,o),u(t,new f(e,r,a))})}function u(t,e){for(;3===t._37;)t=t._12;return 0===t._37?void t._59.push(e):void m(function(){var r=1===t._37?e.onFulfilled:e.onRejected;if(null===r)return void(1===t._37?h(e.promise,t._12):l(e.promise,t._12));var n=o(r,t._12);n===g?l(e.promise,v):h(e.promise,n)})}function h(t,e){if(e===t)return l(t,new TypeError("A promise cannot be resolved with itself."));if(e&&("object"==typeof e||"function"==typeof e)){var r=i(e);if(r===g)return l(t,v);if(r===t.then&&e instanceof s)return t._37=3,t._12=e,void p(t);if("function"==typeof r)return void d(r.bind(e),t)}t._37=1,t._12=e,p(t)}function l(t,e){t._37=2,t._12=e,p(t)}function p(t){for(var e=0;e<t._59.length;e++)u(t,t._59[e]);t._59=null}function f(t,e,r){this.onFulfilled="function"==typeof t?t:null,this.onRejected="function"==typeof e?e:null,this.promise=r}function d(t,e){var r=!1,n=a(t,function(t){r||(r=!0,h(e,t))},function(t){r||(r=!0,l(e,t))});r||n!==g||(r=!0,l(e,v))}var m=t(124),v=null,g={};e.exports=s,s._99=n,s.prototype.then=function(t,e){if(this.constructor!==s)return c(this,t,e);var r=new s(n);return u(this,new f(t,e,r)),r}},{124:124}],153:[function(t,e,r){"use strict";var n=t(152);e.exports=n,n.prototype.done=function(t,e){(arguments.length?this.then.apply(this,arguments):this).then(null,function(t){setTimeout(function(){throw t},0)})}},{152:152}],154:[function(t,e,r){"use strict";function n(t){var e=new i(i._99);return e._37=1,e._12=t,e}var i=t(152);e.exports=i;var o=n(!0),a=n(!1),s=n(null),c=n(void 0),u=n(0),h=n("");i.resolve=function(t){if(t instanceof i)return t;if(null===t)return s;if(void 0===t)return c;if(t===!0)return o;if(t===!1)return a;if(0===t)return u;if(""===t)return h;if("object"==typeof t||"function"==typeof t)try{var e=t.then;if("function"==typeof e)return new i(e.bind(t))}catch(t){return new i(function(e,r){r(t)})}return n(t)},i.all=function(t){var e=Array.prototype.slice.call(t);return new i(function(t,r){function n(a,s){if(s&&("object"==typeof s||"function"==typeof s)){if(s instanceof i&&s.then===i.prototype.then){for(;3===s._37;)s=s._12;return 1===s._37?n(a,s._12):(2===s._37&&r(s._12),void s.then(function(t){n(a,t)},r))}var c=s.then;if("function"==typeof c){return void new i(c.bind(s)).then(function(t){n(a,t)},r)}}e[a]=s,0==--o&&t(e)}if(0===e.length)return t([]);for(var o=e.length,a=0;a<e.length;a++)n(a,e[a])})},i.reject=function(t){return new i(function(e,r){r(t)})},i.race=function(t){return new i(function(e,r){t.forEach(function(t){i.resolve(t).then(e,r)})})},i.prototype.catch=function(t){return this.then(null,t)}},{152:152}],155:[function(t,e,r){"use strict";var n=t(152);e.exports=n,n.prototype.finally=function(t){return this.then(function(e){return n.resolve(t()).then(function(){return e})},function(e){return n.resolve(t()).then(function(){throw e})})}},{152:152}],156:[function(t,e,r){"use strict";e.exports=t(152),t(153),t(155),t(154),t(157)},{152:152,153:153,154:154,155:155,157:157}],157:[function(t,e,r){"use strict";var n=t(152),i=t(123);e.exports=n,n.denodeify=function(t,e){return e=e||1/0,function(){var r=this,i=Array.prototype.slice.call(arguments,0,e>0?e:0);return new n(function(e,n){i.push(function(t,r){t?n(t):e(r)});var o=t.apply(r,i);!o||"object"!=typeof o&&"function"!=typeof o||"function"!=typeof o.then||e(o)})}},n.nodeify=function(t){return function(){var e=Array.prototype.slice.call(arguments),r="function"==typeof e[e.length-1]?e.pop():null,o=this;try{return t.apply(this,arguments).nodeify(r,o)}catch(t){if(null===r||void 0===r)return new n(function(e,r){r(t)});i(function(){r.call(o,t)})}}},n.prototype.nodeify=function(t,e){return"function"!=typeof t?this:void this.then(function(r){i(function(){t.call(e,null,r)})},function(r){i(function(){t.call(e,r)})})}},{123:123,152:152}],158:[function(e,r,n){(function(i){(function(o){var a={boolean:!1,function:!0,object:!0,number:!1,string:!1,undefined:!1},s=a[typeof window]&&window||this,c=a[typeof n]&&n&&!n.nodeType&&n,u=a[typeof r]&&r&&!r.nodeType&&r,h=(u&&u.exports,a[typeof i]&&i);!h||h.global!==h&&h.window!==h||(s=h),"function"==typeof t&&t.amd?t(["rx"],function(t,e){return o(s,e,t)}):"object"==typeof r&&r&&r.exports===c?r.exports=o(s,r.exports,e(159)):s.Rx=o(s,{},s.Rx)}).call(this,function(t,e,r,n){function i(){try{return f.apply(this,arguments)}catch(t){return I.e=t,I}}function o(t){if(!M(t))throw new TypeError("fn must be a function");return f=t,i}function a(t,e,r){return new g(function(n){var i=!1,o=null,a=[];return t.subscribe(function(t){var s,c;try{c=e(t)}catch(t){return void n.onError(t)}if(s=0,i)try{s=r(c,o)}catch(t){return void n.onError(t)}else i=!0,o=c;s>0&&(o=c,a=[]),s>=0&&a.push(t)},function(t){n.onError(t)},function(){n.onNext(a),n.onCompleted()})},t)}function s(t){if(0===t.length)throw new R;return t[0]}function c(t,e,r,n){if(0>e)throw new N;return new g(function(i){var o=e;return t.subscribe(function(t){0==o--&&(i.onNext(t),i.onCompleted())},function(t){i.onError(t)},function(){r?(i.onNext(n),i.onCompleted()):i.onError(new N)})},t)}function u(t,e,r){return new g(function(n){var i=r,o=!1;return t.subscribe(function(t){o?n.onError(new Error("Sequence contains more than one element")):(i=t,o=!0)},function(t){n.onError(t)},function(){o||e?(n.onNext(i),n.onCompleted()):n.onError(new R)})},t)}function h(t,e,r){return new g(function(n){return t.subscribe(function(t){n.onNext(t),n.onCompleted()},function(t){n.onError(t)},function(){e?(n.onNext(r),n.onCompleted()):n.onError(new R)})},t)}function l(t,e,r){return new g(function(n){var i=r,o=!1;return t.subscribe(function(t){i=t,o=!0},function(t){n.onError(t)},function(){o||e?(n.onNext(i),n.onCompleted()):n.onError(new R)})},t)}function p(t,e,r,i){var o=j(e,r,3);return new g(function(e){var r=0;return t.subscribe(function(n){var a;try{a=o(n,r,t)}catch(t){return void e.onError(t)}a?(e.onNext(i?r:n),e.onCompleted()):r++},function(t){e.onError(t)},function(){e.onNext(i?-1:n),e.onCompleted()})},t)}var f,d=r.Observable,m=d.prototype,v=r.CompositeDisposable,g=r.AnonymousObservable,y=r.Disposable.empty,b=(r.internals.isEqual,r.helpers),_=b.not,x=b.defaultComparer,w=b.identity,S=b.defaultSubComparer,M=b.isFunction,E=b.isPromise,T=b.isArrayLike,C=b.isIterable,O=r.internals.inherits,P=d.fromPromise,A=d.from,j=r.internals.bindCallback,R=r.EmptyError,L=r.ObservableBase,N=r.ArgumentOutOfRangeError,I={e:{}};m.aggregate=function(){var t,e,r=!1,n=this;return 2===arguments.length?(r=!0,e=arguments[0],t=arguments[1]):t=arguments[0],new g(function(i){var o,a,s;return n.subscribe(function(n){!s&&(s=!0);try{o?a=t(a,n):(a=r?t(e,n):n,o=!0)}catch(t){return i.onError(t)}},function(t){i.onError(t)},function(){s&&i.onNext(a),!s&&r&&i.onNext(e),!s&&!r&&i.onError(new R),i.onCompleted()})},n)};var D=function(t){function e(e,r,n,i){this.source=e,this.acc=r,this.hasSeed=n,this.seed=i,t.call(this)}function r(t,e){this.o=t,this.acc=e.acc,this.hasSeed=e.hasSeed,this.seed=e.seed,this.hasAccumulation=!1,this.result=null,this.hasValue=!1,this.isStopped=!1}return O(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t,this))},r.prototype.onNext=function(t){this.isStopped||(!this.hasValue&&(this.hasValue=!0),this.hasAccumulation?this.result=o(this.acc)(this.result,t):(this.result=this.hasSeed?o(this.acc)(this.seed,t):t,this.hasAccumulation=!0),this.result===I&&this.o.onError(this.result.e))},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.hasValue&&this.o.onNext(this.result),!this.hasValue&&this.hasSeed&&this.o.onNext(this.seed),!this.hasValue&&!this.hasSeed&&this.o.onError(new R),this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e}(L);return m.reduce=function(t){var e=!1;if(2===arguments.length){e=!0;var r=arguments[1]}return new D(this,t,e,r)},m.some=function(t,e){var r=this;return t?r.filter(t,e).some():new g(function(t){return r.subscribe(function(){t.onNext(!0),t.onCompleted()},function(e){t.onError(e)},function(){t.onNext(!1),t.onCompleted()})},r)},m.any=function(){return this.some.apply(this,arguments)},m.isEmpty=function(){return this.any().map(_)},m.every=function(t,e){return this.filter(function(e){return!t(e)},e).some().map(_)},m.all=function(){return this.every.apply(this,arguments)},m.includes=function(t,e){function r(t,e){return 0===t&&0===e||t===e||isNaN(t)&&isNaN(e)}var n=this;return new g(function(i){var o=0,a=+e||0;return Math.abs(a)===1/0&&(a=0),0>a?(i.onNext(!1),i.onCompleted(),y):n.subscribe(function(e){o++>=a&&r(e,t)&&(i.onNext(!0),i.onCompleted())},function(t){i.onError(t)},function(){i.onNext(!1),i.onCompleted()})},this)},m.contains=function(t,e){m.includes(t,e)},m.count=function(t,e){return t?this.filter(t,e).count():this.reduce(function(t){return t+1},0)},m.indexOf=function(t,e){var r=this;return new g(function(n){var i=0,o=+e||0;return Math.abs(o)===1/0&&(o=0),0>o?(n.onNext(-1),n.onCompleted(),y):r.subscribe(function(e){i>=o&&e===t&&(n.onNext(i),n.onCompleted()),i++},function(t){n.onError(t)},function(){n.onNext(-1),n.onCompleted()})},r)},m.sum=function(t,e){return t&&M(t)?this.map(t,e).sum():this.reduce(function(t,e){return t+e},0)},m.minBy=function(t,e){return e||(e=S),a(this,t,function(t,r){return-1*e(t,r)})},m.min=function(t){return this.minBy(w,t).map(function(t){return s(t)})},m.maxBy=function(t,e){return e||(e=S),a(this,t,e)},m.max=function(t){return this.maxBy(w,t).map(function(t){return s(t)})},m.average=function(t,e){return t&&M(t)?this.map(t,e).average():this.reduce(function(t,e){return{sum:t.sum+e,count:t.count+1}},{sum:0,count:0}).map(function(t){if(0===t.count)throw new R;return t.sum/t.count})},m.sequenceEqual=function(t,e){var r=this;return e||(e=x),new g(function(n){var i=!1,o=!1,a=[],s=[],c=r.subscribe(function(t){var r,i;if(s.length>0){i=s.shift();try{r=e(i,t)}catch(t){return void n.onError(t)}r||(n.onNext(!1),n.onCompleted())}else o?(n.onNext(!1),n.onCompleted()):a.push(t)},function(t){n.onError(t)},function(){i=!0,0===a.length&&(s.length>0?(n.onNext(!1),n.onCompleted()):o&&(n.onNext(!0),n.onCompleted()))});(T(t)||C(t))&&(t=A(t)),E(t)&&(t=P(t));var u=t.subscribe(function(t){var r;if(a.length>0){var o=a.shift();try{r=e(o,t)}catch(t){return void n.onError(t)}r||(n.onNext(!1),n.onCompleted())}else i?(n.onNext(!1),n.onCompleted()):s.push(t)},function(t){n.onError(t)},function(){o=!0,0===s.length&&(a.length>0?(n.onNext(!1),n.onCompleted()):i&&(n.onNext(!0),n.onCompleted()))});return new v(c,u)},r)},m.elementAt=function(t){return c(this,t,!1)},m.elementAtOrDefault=function(t,e){return c(this,t,!0,e)},m.single=function(t,e){return t&&M(t)?this.where(t,e).single():u(this,!1)},m.singleOrDefault=function(t,e,r){return t&&M(t)?this.filter(t,r).singleOrDefault(null,e):u(this,!0,e)},m.first=function(t,e){return t?this.where(t,e).first():h(this,!1)},m.firstOrDefault=function(t,e,r){return t?this.where(t).firstOrDefault(null,e):h(this,!0,e)},m.last=function(t,e){return t?this.where(t,e).last():l(this,!1)},m.lastOrDefault=function(t,e,r){return t?this.where(t,r).lastOrDefault(null,e):l(this,!0,e)},m.find=function(t,e){return p(this,t,e,!1)},m.findIndex=function(t,e){return p(this,t,e,!0)},m.toSet=function(){if(void 0===t.Set)throw new TypeError;var e=this;return new g(function(r){var n=new t.Set;return e.subscribe(function(t){n.add(t)},function(t){r.onError(t)},function(){r.onNext(n),r.onCompleted()})},e)},m.toMap=function(e,r){if(void 0===t.Map)throw new TypeError;var n=this;return new g(function(i){var o=new t.Map;return n.subscribe(function(t){var n;try{n=e(t)}catch(t){return void i.onError(t)}var a=t;if(r)try{a=r(t)}catch(t){return void i.onError(t)}o.set(n,a)},function(t){i.onError(t)},function(){i.onNext(o),i.onCompleted()})},n)},r})}).call(this,void 0!==i?i:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{159:159}],159:[function(e,r,n){(function(e,i){(function(o){function a(t){for(var e=[],r=0,n=t.length;n>r;r++)e.push(t[r]);return e}function c(t,e){if(ut&&e.stack&&"object"==typeof t&&null!==t&&t.stack&&-1===t.stack.indexOf(pt)){for(var r=[],n=e;n;n=n.source)n.stack&&r.unshift(n.stack);r.unshift(t.stack);var i=r.join("\n"+pt+"\n");t.stack=u(i)}}function u(t){for(var e=t.split("\n"),r=[],n=0,i=e.length;i>n;n++){var o=e[n];h(o)||l(o)||!o||r.push(o)}return r.join("\n")}function h(t){var e=f(t);if(!e)return!1;var r=e[0],n=e[1];return r===ht&&n>=lt&&Lr>=n}function l(t){return-1!==t.indexOf("(module.js:")||-1!==t.indexOf("(node.js:")}function p(){if(ut)try{throw new Error}catch(n){var t=n.stack.split("\n"),e=t[0].indexOf("@")>0?t[1]:t[2],r=f(e);if(!r)return;return ht=r[0],r[1]}}function f(t){var e=/at .+ \((.+):(\d+):(?:\d+)\)$/.exec(t);if(e)return[e[1],Number(e[2])];var r=/at ([^ ]+):(\d+):(?:\d+)$/.exec(t);if(r)return[r[1],Number(r[2])];var n=/.*@(.+):(\d+)$/.exec(t);return n?[n[1],Number(n[2])]:void 0}function d(t){var e=[];if(!Vt(t))return e;Gt.nonEnumArgs&&t.length&&Ht(t)&&(t=Xt.call(t));var r=Gt.enumPrototypes&&"function"==typeof t,n=Gt.enumErrorProps&&(t===Ft||t instanceof Error);for(var i in t)r&&"prototype"==i||n&&("message"==i||"name"==i)||e.push(i);if(Gt.nonEnumShadows&&t!==Ut){var o=t.constructor,a=-1,s=Et;if(t===(o&&o.prototype))var c=t===Bt?Nt:t===Ft?At:It.call(t),u=$t[c];for(;++a<s;)i=Mt[a],u&&u[i]||!Dt.call(t,i)||e.push(i)}return e}function m(t,e,r){for(var n=-1,i=r(t),o=i.length;++n<o;){var a=i[n];if(e(t[a],a,t)===!1)break}return t}function v(t,e){return m(t,e,d)}function g(t){return"function"!=typeof t.toString&&"string"==typeof(t+"")}function y(t,e,r,n){if(t===e)return 0!==t||1/t==1/e;var i=typeof t,o=typeof e;if(t===t&&(null==t||null==e||"function"!=i&&"object"!=i&&"function"!=o&&"object"!=o))return!1;var a=It.call(t),s=It.call(e);if(a==Tt&&(a=Rt),s==Tt&&(s=Rt),a!=s)return!1;switch(a){case Ot:case Pt:return+t==+e;case jt:return t!=+t?e!=+e:0==t?1/t==1/e:t==+e;case Lt:case Nt:return t==String(e)}var c=a==Ct;if(!c){if(a!=Rt||!Gt.nodeClass&&(g(t)||g(e)))return!1;var u=!Gt.argsObject&&Ht(t)?Object:t.constructor,h=!Gt.argsObject&&Ht(e)?Object:e.constructor;if(!(u==h||Dt.call(t,"constructor")&&Dt.call(e,"constructor")||ct(u)&&u instanceof u&&ct(h)&&h instanceof h)&&("constructor"in t&&"constructor"in e))return!1}r||(r=[]),n||(n=[]);for(var l=r.length;l--;)if(r[l]==t)return n[l]==e;var p=0,f=!0;if(r.push(t),n.push(e),c){if(l=t.length,p=e.length,f=p==l)for(;p--;){var d=e[p];if(!(f=y(t[p],d,r,n)))break}}else v(e,function(e,i,o){return Dt.call(o,i)?(p++,f=Dt.call(t,i)&&y(t[i],e,r,n)):void 0}),f&&v(t,function(t,e,r){return Dt.call(r,e)?f=--p>-1:void 0});return r.pop(),n.pop(),f}function b(t,e){for(var r=new Array(t),n=0;t>n;n++)r[n]=e();return r}function _(){try{return Wt.apply(this,arguments)}catch(t){return Jt.e=t,Jt}}function x(t){if(!ct(t))throw new TypeError("fn must be a function");return Wt=t,_}function w(t){throw t}function S(t,e){this.id=t,this.value=e}function M(t,e){this.scheduler=t,this.disposable=e,this.isDisposed=!1}function E(t,e){e.isDisposed||(e.isDisposed=!0,e.disposable.dispose())}function T(t){this._s=s}function C(t){this._s=s,this._l=s.length,this._i=0}function O(t){this._a=t}function P(t){this._a=t,this._l=L(t),this._i=0}function A(t){return"number"==typeof t&&Y.isFinite(t)}function j(t){var e,r=t[bt];if(!r&&"string"==typeof t)return e=new T(t),e[bt]();if(!r&&t.length!==o)return e=new O(t),e[bt]();if(!r)throw new TypeError("Object is not iterable");return t[bt]()}function R(t){var e=+t;return 0===e?e:isNaN(e)?e:0>e?-1:1}function L(t){var e=+t.length;return isNaN(e)?0:0!==e&&A(e)?(e=R(e)*Math.floor(Math.abs(e)),0>=e?0:e>Ze?Ze:e):e}function N(t,e){this.observer=t,this.parent=e}function I(t,e){return de(t)||(t=ye),new Qe(e,t)}function D(t,e){this.observer=t,this.parent=e}function k(t,e){this.observer=t,this.parent=e}function F(t,e){return new Or(function(r){var n=new ce,i=new ue;return i.setDisposable(n),n.setDisposable(t.subscribe(function(t){r.onNext(t)},function(t){try{var n=e(t)}catch(t){return r.onError(t)}st(n)&&(n=He(n));var o=new ce;i.setDisposable(o),o.setDisposable(n.subscribe(r))},function(t){r.onCompleted(t)})),i},t)}function U(){return!1}function B(t,e){var r=this;return new Or(function(n){var i=0,o=t.length;return r.subscribe(function(r){if(o>i){var a=t[i++],s=x(e)(r,a);if(s===Jt)return n.onError(s.e);n.onNext(s)}else n.onCompleted()},function(t){n.onError(t)},function(){n.onCompleted()})},r)}function U(){return!1}function z(){return[]}function U(){return!1}function $(){return[]}function G(t,e){this.observer=t,this.accumulator=e.accumulator,this.hasSeed=e.hasSeed,this.seed=e.seed,this.hasAccumulation=!1,this.accumulation=null,this.hasValue=!1,this.isStopped=!1}function V(t,e,r){var n=St(e,r,3);return t.map(function(e,r){var i=n(e,r,t);return st(i)&&(i=He(i)),(wt(i)||xt(i))&&(i=Je(i)),i}).concatAll()}function H(t,e,r){for(var n=0,i=t.length;i>n;n++)if(r(t[n],e))return n;return-1}function W(t){this.comparer=t,this.set=[]}function q(t,e,r){var n=St(e,r,3);return t.map(function(e,r){var i=n(e,r,t);return st(i)&&(i=He(i)),(wt(i)||xt(i))&&(i=Je(i)),i}).mergeAll()}var X={boolean:!1,function:!0,object:!0,number:!1,string:!1,undefined:!1},Y=X[typeof window]&&window||this,K=X[typeof n]&&n&&!n.nodeType&&n,Z=X[typeof r]&&r&&!r.nodeType&&r,J=Z&&Z.exports===K&&K,Q=X[typeof i]&&i;!Q||Q.global!==Q&&Q.window!==Q||(Y=Q);var tt={internals:{},config:{Promise:Y.Promise},helpers:{}},et=tt.helpers.noop=function(){},rt=(tt.helpers.notDefined=function(t){return void 0===t},tt.helpers.identity=function(t){return t}),nt=(tt.helpers.pluck=function(t){return function(e){return e[t]}},tt.helpers.just=function(t){return function(){return t}},tt.helpers.defaultNow=Date.now),it=tt.helpers.defaultComparer=function(t,e){return qt(t,e)},ot=tt.helpers.defaultSubComparer=function(t,e){return t>e?1:e>t?-1:0},at=(tt.helpers.defaultKeySerializer=function(t){return t.toString()},tt.helpers.defaultError=function(t){throw t}),st=tt.helpers.isPromise=function(t){return!!t&&"function"!=typeof t.subscribe&&"function"==typeof t.then},ct=(tt.helpers.asArray=function(){return Array.prototype.slice.call(arguments)},tt.helpers.not=function(t){return!t},tt.helpers.isFunction=function(){var t=function(t){return"function"==typeof t||!1};return t(/x/)&&(t=function(t){return"function"==typeof t&&"[object Function]"==It.call(t)}),t}());tt.config.longStackSupport=!1;var ut=!1;try{throw new Error}catch(t){ut=!!t.stack}var ht,lt=p(),pt="From previous event:";(tt.EmptyError=function(){this.message="Sequence contains no elements.",Error.call(this)}).prototype=Error.prototype;var ft=tt.ObjectDisposedError=function(){this.message="Object has been disposed",Error.call(this)};ft.prototype=Error.prototype;var dt=tt.ArgumentOutOfRangeError=function(){this.message="Argument out of range",Error.call(this)};dt.prototype=Error.prototype;var mt=tt.NotSupportedError=function(t){this.message=t||"This operation is not supported",Error.call(this)};mt.prototype=Error.prototype;var vt=tt.NotImplementedError=function(t){this.message=t||"This operation is not implemented",Error.call(this)};vt.prototype=Error.prototype;var gt=tt.helpers.notImplemented=function(){throw new vt},yt=tt.helpers.notSupported=function(){throw new mt},bt="function"==typeof Symbol&&Symbol.iterator||"_es6shim_iterator_";Y.Set&&"function"==typeof(new Y.Set)["@@iterator"]&&(bt="@@iterator");var _t=tt.doneEnumerator={done:!0,value:o},xt=tt.helpers.isIterable=function(t){return t[bt]!==o},wt=tt.helpers.isArrayLike=function(t){return t&&t.length!==o};tt.helpers.iterator=bt;var St=tt.internals.bindCallback=function(t,e,r){if(void 0===e)return t;switch(r){case 0:return function(){return t.call(e)};case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}},Mt=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],Et=Mt.length,Tt="[object Arguments]",Ct="[object Array]",Ot="[object Boolean]",Pt="[object Date]",At="[object Error]",jt="[object Number]",Rt="[object Object]",Lt="[object RegExp]",Nt="[object String]",It=Object.prototype.toString,Dt=Object.prototype.hasOwnProperty,kt=It.call(arguments)==Tt,Ft=Error.prototype,Ut=Object.prototype,Bt=String.prototype,zt=Ut.propertyIsEnumerable;try{!(It.call(document)==Rt&&!({toString:0}+""))}catch(t){!0}var $t={};$t[Ct]=$t[Pt]=$t[jt]={constructor:!0,toLocaleString:!0,toString:!0,valueOf:!0},$t[Ot]=$t[Nt]={constructor:!0,toString:!0,valueOf:!0},$t[At]=$t["[object Function]"]=$t[Lt]={constructor:!0,toString:!0},$t[Rt]={constructor:!0};var Gt={};!function(){var t=function(){this.x=1},e=[];t.prototype={valueOf:1,y:1};for(var r in new t)e.push(r);for(r in arguments);Gt.enumErrorProps=zt.call(Ft,"message")||zt.call(Ft,"name"),Gt.enumPrototypes=zt.call(t,"prototype"),Gt.nonEnumArgs=0!=r,Gt.nonEnumShadows=!/valueOf/.test(e)}(1);var Vt=tt.internals.isObject=function(t){var e=typeof t;return t&&("function"==e||"object"==e)||!1},Ht=function(t){
-return!(!t||"object"!=typeof t)&&It.call(t)==Tt};kt||(Ht=function(t){return!(!t||"object"!=typeof t)&&Dt.call(t,"callee")});var Wt,qt=tt.internals.isEqual=function(t,e){return y(t,e,[],[])},Xt=({}.hasOwnProperty,Array.prototype.slice),Yt=this.inherits=tt.internals.inherits=function(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r},Kt=tt.internals.addProperties=function(t){for(var e=[],r=1,n=arguments.length;n>r;r++)e.push(arguments[r]);for(var i=0,o=e.length;o>i;i++){var a=e[i];for(var s in a)t[s]=a[s]}},Zt=tt.internals.addRef=function(t,e){return new Or(function(r){return new ee(e.getDisposable(),t.subscribe(r))})},Jt={e:{}};S.prototype.compareTo=function(t){var e=this.value.compareTo(t.value);return 0===e&&(e=this.id-t.id),e};var Qt=tt.internals.PriorityQueue=function(t){this.items=new Array(t),this.length=0},te=Qt.prototype;te.isHigherPriority=function(t,e){return this.items[t].compareTo(this.items[e])<0},te.percolate=function(t){if(!(t>=this.length||0>t)){var e=t-1>>1;if(!(0>e||e===t)&&this.isHigherPriority(t,e)){var r=this.items[t];this.items[t]=this.items[e],this.items[e]=r,this.percolate(e)}}},te.heapify=function(t){if(+t||(t=0),!(t>=this.length||0>t)){var e=2*t+1,r=2*t+2,n=t;if(e<this.length&&this.isHigherPriority(e,n)&&(n=e),r<this.length&&this.isHigherPriority(r,n)&&(n=r),n!==t){var i=this.items[t];this.items[t]=this.items[n],this.items[n]=i,this.heapify(n)}}},te.peek=function(){return this.items[0].value},te.removeAt=function(t){this.items[t]=this.items[--this.length],this.items[this.length]=o,this.heapify()},te.dequeue=function(){var t=this.peek();return this.removeAt(0),t},te.enqueue=function(t){var e=this.length++;this.items[e]=new S(Qt.count++,t),this.percolate(e)},te.remove=function(t){for(var e=0;e<this.length;e++)if(this.items[e].value===t)return this.removeAt(e),!0;return!1},Qt.count=0;var ee=tt.CompositeDisposable=function(){var t,e,r=[];if(Array.isArray(arguments[0]))r=arguments[0],e=r.length;else for(e=arguments.length,r=new Array(e),t=0;e>t;t++)r[t]=arguments[t];for(t=0;e>t;t++)if(!ae(r[t]))throw new TypeError("Not a disposable");this.disposables=r,this.isDisposed=!1,this.length=r.length},re=ee.prototype;re.add=function(t){this.isDisposed?t.dispose():(this.disposables.push(t),this.length++)},re.remove=function(t){var e=!1;if(!this.isDisposed){var r=this.disposables.indexOf(t);-1!==r&&(e=!0,this.disposables.splice(r,1),this.length--,t.dispose())}return e},re.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;for(var t=this.disposables.length,e=new Array(t),r=0;t>r;r++)e[r]=this.disposables[r];for(this.disposables=[],this.length=0,r=0;t>r;r++)e[r].dispose()}};var ne=tt.Disposable=function(t){this.isDisposed=!1,this.action=t||et};ne.prototype.dispose=function(){this.isDisposed||(this.action(),this.isDisposed=!0)};var ie=ne.create=function(t){return new ne(t)},oe=ne.empty={dispose:et},ae=ne.isDisposable=function(t){return t&&ct(t.dispose)},se=ne.checkDisposed=function(t){if(t.isDisposed)throw new ft},ce=tt.SingleAssignmentDisposable=function(){this.isDisposed=!1,this.current=null};ce.prototype.getDisposable=function(){return this.current},ce.prototype.setDisposable=function(t){if(this.current)throw new Error("Disposable has already been assigned");var e=this.isDisposed;!e&&(this.current=t),e&&t&&t.dispose()},ce.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var t=this.current;this.current=null}t&&t.dispose()};var ue=tt.SerialDisposable=function(){this.isDisposed=!1,this.current=null};ue.prototype.getDisposable=function(){return this.current},ue.prototype.setDisposable=function(t){var e=this.isDisposed;if(!e){var r=this.current;this.current=t}r&&r.dispose(),e&&t&&t.dispose()},ue.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var t=this.current;this.current=null}t&&t.dispose()};var he=tt.RefCountDisposable=function(){function t(t){this.disposable=t,this.disposable.count++,this.isInnerDisposed=!1}function e(t){this.underlyingDisposable=t,this.isDisposed=!1,this.isPrimaryDisposed=!1,this.count=0}return t.prototype.dispose=function(){this.disposable.isDisposed||this.isInnerDisposed||(this.isInnerDisposed=!0,0===--this.disposable.count&&this.disposable.isPrimaryDisposed&&(this.disposable.isDisposed=!0,this.disposable.underlyingDisposable.dispose()))},e.prototype.dispose=function(){this.isDisposed||this.isPrimaryDisposed||(this.isPrimaryDisposed=!0,0===this.count&&(this.isDisposed=!0,this.underlyingDisposable.dispose()))},e.prototype.getDisposable=function(){return this.isDisposed?oe:new t(this)},e}();M.prototype.dispose=function(){this.scheduler.scheduleWithState(this,E)};var le=tt.internals.ScheduledItem=function(t,e,r,n,i){this.scheduler=t,this.state=e,this.action=r,this.dueTime=n,this.comparer=i||ot,this.disposable=new ce};le.prototype.invoke=function(){this.disposable.setDisposable(this.invokeCore())},le.prototype.compareTo=function(t){return this.comparer(this.dueTime,t.dueTime)},le.prototype.isCancelled=function(){return this.disposable.isDisposed},le.prototype.invokeCore=function(){return this.action(this.scheduler,this.state)};var pe=tt.Scheduler=function(){function t(t,e,r,n){this.now=t,this._schedule=e,this._scheduleRelative=r,this._scheduleAbsolute=n}function e(t,e){return e(),oe}t.isScheduler=function(e){return e instanceof t};var r=t.prototype;return r.schedule=function(t){return this._schedule(t,e)},r.scheduleWithState=function(t,e){return this._schedule(t,e)},r.scheduleWithRelative=function(t,r){return this._scheduleRelative(r,t,e)},r.scheduleWithRelativeAndState=function(t,e,r){return this._scheduleRelative(t,e,r)},r.scheduleWithAbsolute=function(t,r){return this._scheduleAbsolute(r,t,e)},r.scheduleWithAbsoluteAndState=function(t,e,r){return this._scheduleAbsolute(t,e,r)},t.now=nt,t.normalize=function(t){return 0>t&&(t=0),t},t}(),fe=pe.normalize,de=pe.isScheduler;!function(t){function e(t,e){function r(e){i(e,function(e){var n=!1,i=!1,a=t.scheduleWithState(e,function(t,e){return n?o.remove(a):i=!0,r(e),oe});i||(o.add(a),n=!0)})}var n=e[0],i=e[1],o=new ee;return r(n),o}function r(t,e,r){function n(e){o(e,function(e,i){var o=!1,s=!1,c=t[r](e,i,function(t,e){return o?a.remove(c):s=!0,n(e),oe});s||(a.add(c),o=!0)})}var i=e[0],o=e[1],a=new ee;return n(i),a}function n(t,e){t(function(r){e(t,r)})}t.scheduleRecursive=function(t){return this.scheduleRecursiveWithState(t,n)},t.scheduleRecursiveWithState=function(t,r){return this.scheduleWithState([t,r],e)},t.scheduleRecursiveWithRelative=function(t,e){return this.scheduleRecursiveWithRelativeAndState(e,t,n)},t.scheduleRecursiveWithRelativeAndState=function(t,e,n){return this._scheduleRelative([t,n],e,function(t,e){return r(t,e,"scheduleWithRelativeAndState")})},t.scheduleRecursiveWithAbsolute=function(t,e){return this.scheduleRecursiveWithAbsoluteAndState(e,t,n)},t.scheduleRecursiveWithAbsoluteAndState=function(t,e,n){return this._scheduleAbsolute([t,n],e,function(t,e){return r(t,e,"scheduleWithAbsoluteAndState")})}}(pe.prototype),function(t){pe.prototype.schedulePeriodic=function(t,e){return this.schedulePeriodicWithState(null,t,e)},pe.prototype.schedulePeriodicWithState=function(t,e,r){if(void 0===Y.setInterval)throw new mt;e=fe(e);var n=t,i=Y.setInterval(function(){n=r(n)},e);return ie(function(){Y.clearInterval(i)})}}(pe.prototype),function(t){t.catchError=t.catch=function(t){return new we(this,t)}}(pe.prototype);var me,ve,ge=(tt.internals.SchedulePeriodicRecursive=function(){function t(t,e){e(0,this._period);try{this._state=this._action(this._state)}catch(t){throw this._cancel.dispose(),t}}function e(t,e,r,n){this._scheduler=t,this._state=e,this._period=r,this._action=n}return e.prototype.start=function(){var e=new ce;return this._cancel=e,e.setDisposable(this._scheduler.scheduleRecursiveWithRelativeAndState(0,this._period,t.bind(this))),e},e}(),pe.immediate=function(){function t(t,e){return e(this,t)}return new pe(nt,t,yt,yt)}()),ye=pe.currentThread=function(){function t(){for(;r.length>0;){var t=r.dequeue();!t.isCancelled()&&t.invoke()}}function e(e,n){var i=new le(this,e,n,this.now());if(r)r.enqueue(i);else{r=new Qt(4),r.enqueue(i);var o=x(t)();if(r=null,o===Jt)return w(o.e)}return i.disposable}var r,n=new pe(nt,e,yt,yt);return n.scheduleRequired=function(){return!r},n}(),be=function(){var t,e=et;if(Y.setTimeout)t=Y.setTimeout,e=Y.clearTimeout;else{if(!Y.WScript)throw new mt;t=function(t,e){Y.WScript.Sleep(e),t()}}return{setTimeout:t,clearTimeout:e}}(),_e=be.setTimeout,xe=be.clearTimeout;!function(){function t(e){if(o)_e(function(){t(e)},0);else{var r=i[e];if(r){o=!0;var n=x(r)();if(ve(e),o=!1,n===Jt)return w(n.e)}}}function r(e){"string"==typeof e.data&&e.data.substring(0,c.length)===c&&t(e.data.substring(c.length))}var n=1,i={},o=!1;ve=function(t){delete i[t]};var a=RegExp("^"+String(It).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString| for [^\]]+/g,".*?")+"$"),s="function"==typeof(s=Q&&J&&Q.setImmediate)&&!a.test(s)&&s;if(ct(s))me=function(e){var r=n++;return i[r]=e,s(function(){t(r)}),r};else if(void 0!==e&&"[object process]"==={}.toString.call(e))me=function(r){var o=n++;return i[o]=r,e.nextTick(function(){t(o)}),o};else if(function(){if(!Y.postMessage||Y.importScripts)return!1;var t=!1,e=Y.onmessage;return Y.onmessage=function(){t=!0},Y.postMessage("","*"),Y.onmessage=e,t}()){var c="ms.rx.schedule"+Math.random();Y.addEventListener?Y.addEventListener("message",r,!1):Y.attachEvent?Y.attachEvent("onmessage",r):Y.onmessage=r,me=function(t){var e=n++;return i[e]=t,Y.postMessage(c+currentId,"*"),e}}else if(Y.MessageChannel){var u=new Y.MessageChannel;u.port1.onmessage=function(e){t(e.data)},me=function(t){var e=n++;return i[e]=t,u.port2.postMessage(e),e}}else me="document"in Y&&"onreadystatechange"in Y.document.createElement("script")?function(e){var r=Y.document.createElement("script"),o=n++;return i[o]=e,r.onreadystatechange=function(){t(o),r.onreadystatechange=null,r.parentNode.removeChild(r),r=null},Y.document.documentElement.appendChild(r),o}:function(e){var r=n++;return i[r]=e,_e(function(){t(r)},0),r}}();var we=(pe.timeout=pe.default=function(){function t(t,e){var r=this,n=new ce,i=me(function(){!n.isDisposed&&n.setDisposable(e(r,t))});return new ee(n,ie(function(){ve(i)}))}function e(t,e,r){var n=this,i=pe.normalize(e),o=new ce;if(0===i)return n.scheduleWithState(t,r);var a=_e(function(){!o.isDisposed&&o.setDisposable(r(n,t))},i);return new ee(o,ie(function(){xe(a)}))}function r(t,e,r){return this.scheduleWithRelativeAndState(t,e-this.now(),r)}return new pe(nt,t,e,r)}(),function(t){function e(t,e){return this._scheduler.scheduleWithState(t,this._wrap(e))}function r(t,e,r){return this._scheduler.scheduleWithRelativeAndState(t,e,this._wrap(r))}function n(t,e,r){return this._scheduler.scheduleWithAbsoluteAndState(t,e,this._wrap(r))}function i(i,o){this._scheduler=i,this._handler=o,this._recursiveOriginal=null,this._recursiveWrapper=null,t.call(this,this._scheduler.now.bind(this._scheduler),e,r,n)}return Yt(i,t),i.prototype._clone=function(t){return new i(t,this._handler)},i.prototype._wrap=function(t){var e=this;return function(r,n){try{return t(e._getRecursiveWrapper(r),n)}catch(t){if(!e._handler(t))throw t;return oe}}},i.prototype._getRecursiveWrapper=function(t){if(this._recursiveOriginal!==t){this._recursiveOriginal=t;var e=this._clone(t);e._recursiveOriginal=t,e._recursiveWrapper=e,this._recursiveWrapper=e}return this._recursiveWrapper},i.prototype.schedulePeriodicWithState=function(t,e,r){var n=this,i=!1,o=new ce;return o.setDisposable(this._scheduler.schedulePeriodicWithState(t,e,function(t){if(i)return null;try{return r(t)}catch(t){if(i=!0,!n._handler(t))throw t;return o.dispose(),null}})),o},i}(pe)),Se=tt.Notification=function(){function t(t,e,r,n,i,o){this.kind=t,this.value=e,this.exception=r,this._accept=n,this._acceptObservable=i,this.toString=o}return t.prototype.accept=function(t,e,r){return t&&"object"==typeof t?this._acceptObservable(t):this._accept(t,e,r)},t.prototype.toObservable=function(t){var e=this;return de(t)||(t=ge),new Or(function(r){return t.scheduleWithState(e,function(t,e){e._acceptObservable(r),"N"===e.kind&&r.onCompleted()})})},t}(),Me=Se.createOnNext=function(){function t(t){return t(this.value)}function e(t){return t.onNext(this.value)}function r(){return"OnNext("+this.value+")"}return function(n){return new Se("N",n,null,t,e,r)}}(),Ee=Se.createOnError=function(){function t(t,e){return e(this.exception)}function e(t){return t.onError(this.exception)}function r(){return"OnError("+this.exception+")"}return function(n){return new Se("E",null,n,t,e,r)}}(),Te=Se.createOnCompleted=function(){function t(t,e,r){return r()}function e(t){return t.onCompleted()}function r(){return"OnCompleted()"}return function(){return new Se("C",null,null,t,e,r)}}(),Ce=tt.Observer=function(){};Ce.prototype.toNotifier=function(){var t=this;return function(e){return e.accept(t)}},Ce.prototype.asObserver=function(){return new je(this.onNext.bind(this),this.onError.bind(this),this.onCompleted.bind(this))},Ce.prototype.checked=function(){return new Re(this)};var Oe=Ce.create=function(t,e,r){return t||(t=et),e||(e=at),r||(r=et),new je(t,e,r)};Ce.fromNotifier=function(t,e){return new je(function(r){return t.call(e,Me(r))},function(r){return t.call(e,Ee(r))},function(){return t.call(e,Te())})},Ce.prototype.notifyOn=function(t){return new Ne(t,this)},Ce.prototype.makeSafe=function(t){return new AnonymousSafeObserver(this._onNext,this._onError,this._onCompleted,t)};var Pe,Ae=tt.internals.AbstractObserver=function(t){function e(){this.isStopped=!1,t.call(this)}return Yt(e,t),e.prototype.next=gt,e.prototype.error=gt,e.prototype.completed=gt,e.prototype.onNext=function(t){this.isStopped||this.next(t)},e.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.error(t))},e.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.completed())},e.prototype.dispose=function(){this.isStopped=!0},e.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.error(t),!0)},e}(Ce),je=tt.AnonymousObserver=function(t){function e(e,r,n){t.call(this),this._onNext=e,this._onError=r,this._onCompleted=n}return Yt(e,t),e.prototype.next=function(t){this._onNext(t)},e.prototype.error=function(t){this._onError(t)},e.prototype.completed=function(){this._onCompleted()},e}(Ae),Re=function(t){function e(e){t.call(this),this._observer=e,this._state=0}Yt(e,t);var r=e.prototype;return r.onNext=function(t){this.checkAccess();var e=x(this._observer.onNext).call(this._observer,t);this._state=0,e===Jt&&w(e.e)},r.onError=function(t){this.checkAccess();var e=x(this._observer.onError).call(this._observer,t);this._state=2,e===Jt&&w(e.e)},r.onCompleted=function(){this.checkAccess();var t=x(this._observer.onCompleted).call(this._observer);this._state=2,t===Jt&&w(t.e)},r.checkAccess=function(){if(1===this._state)throw new Error("Re-entrancy detected");if(2===this._state)throw new Error("Observer completed");0===this._state&&(this._state=1)},e}(Ce),Le=tt.internals.ScheduledObserver=function(t){function e(e,r){t.call(this),this.scheduler=e,this.observer=r,this.isAcquired=!1,this.hasFaulted=!1,this.queue=[],this.disposable=new ue}return Yt(e,t),e.prototype.next=function(t){var e=this;this.queue.push(function(){e.observer.onNext(t)})},e.prototype.error=function(t){var e=this;this.queue.push(function(){e.observer.onError(t)})},e.prototype.completed=function(){var t=this;this.queue.push(function(){t.observer.onCompleted()})},e.prototype.ensureActive=function(){var t=!1,e=this;!this.hasFaulted&&this.queue.length>0&&(t=!this.isAcquired,this.isAcquired=!0),t&&this.disposable.setDisposable(this.scheduler.scheduleRecursive(function(t){var r;if(!(e.queue.length>0))return void(e.isAcquired=!1);r=e.queue.shift();try{r()}catch(t){throw e.queue=[],e.hasFaulted=!0,t}t()}))},e.prototype.dispose=function(){t.prototype.dispose.call(this),this.disposable.dispose()},e}(Ae),Ne=function(t){function e(e,r,n){t.call(this,e,r),this._cancel=n}return Yt(e,t),e.prototype.next=function(e){t.prototype.next.call(this,e),this.ensureActive()},e.prototype.error=function(e){t.prototype.error.call(this,e),this.ensureActive()},e.prototype.completed=function(){t.prototype.completed.call(this),this.ensureActive()},e.prototype.dispose=function(){t.prototype.dispose.call(this),this._cancel&&this._cancel.dispose(),this._cancel=null},e}(Le),Ie=tt.Observable=function(){function t(t){if(tt.config.longStackSupport&&ut){try{throw new Error}catch(t){this.stack=t.stack.substring(t.stack.indexOf("\n")+1)}var e=this;this._subscribe=function(r){var n=r.onError.bind(r);return r.onError=function(t){c(t,e),n(t)},t.call(e,r)}}else this._subscribe=t}return Pe=t.prototype,Pe.subscribe=Pe.forEach=function(t,e,r){return this._subscribe("object"==typeof t?t:Oe(t,e,r))},Pe.subscribeOnNext=function(t,e){return this._subscribe(Oe(void 0!==e?function(r){t.call(e,r)}:t))},Pe.subscribeOnError=function(t,e){return this._subscribe(Oe(null,void 0!==e?function(r){t.call(e,r)}:t))},Pe.subscribeOnCompleted=function(t,e){return this._subscribe(Oe(null,null,void 0!==e?function(){t.call(e)}:t))},t}(),De=tt.ObservableBase=function(t){function e(t){return t&&ct(t.dispose)?t:ct(t)?ie(t):oe}function r(t,r){var n=r[0],i=r[1],o=x(i.subscribeCore).call(i,n);return o!==Jt||n.fail(Jt.e)?void n.setDisposable(e(o)):w(Jt.e)}function n(t){var e=new Pr(t),n=[e,this];return ye.scheduleRequired()?ye.scheduleWithState(n,r):r(null,n),e}function i(){t.call(this,n)}return Yt(i,t),i.prototype.subscribeCore=gt,i}(Ie),ke=tt.internals.Enumerable=function(){},Fe=function(t){function e(e){this.sources=e,t.call(this)}function r(t,e,r){this.o=t,this.s=e,this.e=r,this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){var e,n=new ue,i=ge.scheduleRecursiveWithState(this.sources[bt](),function(i,o){if(!e){var a=x(i.next).call(i);if(a===Jt)return t.onError(a.e);if(a.done)return t.onCompleted();var s=a.value;st(s)&&(s=He(s));var c=new ce;n.setDisposable(c),c.setDisposable(s.subscribe(new r(t,o,i)))}});return new ee(n,i,ie(function(){e=!0}))},r.prototype.onNext=function(t){this.isStopped||this.o.onNext(t)},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.s(this.e))},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e}(De);ke.prototype.concat=function(){return new Fe(this)};var Ue=function(t){function e(e){this.sources=e,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){var e,r=this.sources[bt](),n=new ue,i=ge.scheduleRecursiveWithState(null,function(i,o){if(!e){var a=x(r.next).call(r);if(a===Jt)return t.onError(a.e);if(a.done)return null!==i?t.onError(i):t.onCompleted();var s=a.value;st(s)&&(s=He(s));var c=new ce;n.setDisposable(c),c.setDisposable(s.subscribe(function(e){t.onNext(e)},o,function(){t.onCompleted()}))}});return new ee(n,i,ie(function(){e=!0}))},e}(De);ke.prototype.catchError=function(){return new Ue(this)},ke.prototype.catchErrorWhen=function(t){var e=this;return new Or(function(r){var n,i=new jr,o=new jr,a=t(i),s=a.subscribe(o),c=e[bt](),u=new ue,h=ge.scheduleRecursive(function(t){if(!n){var e=x(c.next).call(c);if(e===Jt)return r.onError(e.e);if(e.done)return void r.onCompleted();var a=e.value;st(a)&&(a=He(a));var s=new ce,h=new ce;u.setDisposable(new ee(h,s)),s.setDisposable(a.subscribe(function(t){r.onNext(t)},function(e){h.setDisposable(o.subscribe(t,function(t){r.onError(t)},function(){r.onCompleted()})),i.onNext(e)},function(){r.onCompleted()}))}});return new ee(s,u,h,ie(function(){n=!0}))})};var Be=function(t){function e(t,e){this.v=t,this.c=null==e?-1:e}function r(t){this.v=t.v,this.l=t.c}return Yt(e,t),e.prototype[bt]=function(){return new r(this)},r.prototype.next=function(){return 0===this.l?_t:(this.l>0&&this.l--,{done:!1,value:this.v})},e}(ke),ze=ke.repeat=function(t,e){return new Be(t,e)},$e=function(t){function e(t,e,r){this.s=t,this.fn=e?St(e,r,3):null}function r(t){this.i=-1,this.s=t.s,this.l=this.s.length,this.fn=t.fn}return Yt(e,t),e.prototype[bt]=function(){return new r(this)},r.prototype.next=function(){return++this.i<this.l?{done:!1,value:this.fn?this.fn(this.s[this.i],this.i,this.s):this.s[this.i]}:_t},e}(ke),Ge=ke.of=function(t,e,r){return new $e(t,e,r)};Pe.observeOn=function(t){var e=this;return new Or(function(r){return e.subscribe(new Ne(t,r))},e)},Pe.subscribeOn=function(t){var e=this;return new Or(function(r){var n=new ce,i=new ue;return i.setDisposable(n),n.setDisposable(t.schedule(function(){i.setDisposable(new M(t,e.subscribe(r)))})),i},e)};var Ve=function(t){function e(e){this.p=e,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){return this.p.then(function(e){t.onNext(e),t.onCompleted()},function(e){t.onError(e)}),oe},e}(De),He=Ie.fromPromise=function(t){return new Ve(t)};Pe.toPromise=function(t){if(t||(t=tt.config.Promise),!t)throw new mt("Promise type not provided nor in Rx.config.Promise");var e=this;return new t(function(t,r){var n,i=!1;e.subscribe(function(t){n=t,i=!0},r,function(){i&&t(n)})})};var We=function(t){function e(e){this.source=e,t.call(this)}function r(t){this.o=t,this.a=[],this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t))},r.prototype.onNext=function(t){this.isStopped||this.a.push(t)},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onNext(this.a),this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e}(De);Pe.toArray=function(){return new We(this)},Ie.create=Ie.createWithDisposable=function(t,e){return new Or(t,e)};var qe=(Ie.defer=function(t){return new Or(function(e){var r;try{r=t()}catch(t){return ur(t).subscribe(e)}return st(r)&&(r=He(r)),r.subscribe(e)})},function(t){function e(e){this.scheduler=e,t.call(this)}function r(t,e){this.observer=t,this.parent=e}function n(t,e){e.onCompleted()}return Yt(e,t),e.prototype.subscribeCore=function(t){return new r(t,this).run()},r.prototype.run=function(){return this.parent.scheduler.scheduleWithState(this.observer,n)},e}(De)),Xe=Ie.empty=function(t){return de(t)||(t=ge),new qe(t)},Ye=function(t){function e(e,r,n){this.iterable=e,this.mapper=r,this.scheduler=n,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){return new Ke(t,this).run()},e}(De),Ke=function(){function t(t,e){this.observer=t,this.parent=e}return t.prototype.run=function(){function t(t,e){try{var o=r.next()}catch(t){return n.onError(t)}if(o.done)return n.onCompleted();var a=o.value;if(i)try{a=i(a,t)}catch(t){return n.onError(t)}n.onNext(a),e(t+1)}var e=Object(this.parent.iterable),r=j(e),n=this.observer,i=this.parent.mapper;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},t}(),Ze=Math.pow(2,53)-1;T.prototype[bt]=function(){return new C(this._s)},C.prototype[bt]=function(){return this},C.prototype.next=function(){return this._i<this._l?{done:!1,value:this._s.charAt(this._i++)}:_t},O.prototype[bt]=function(){return new P(this._a)},P.prototype[bt]=function(){return this},P.prototype.next=function(){return this._i<this._l?{done:!1,value:this._a[this._i++]}:_t};var Je=Ie.from=function(t,e,r,n){if(null==t)throw new Error("iterable cannot be null.");if(e&&!ct(e))throw new Error("mapFn when provided must be a function");if(e)var i=St(e,r,2);return de(n)||(n=ye),new Ye(t,i,n)},Qe=function(t){function e(e,r){this.args=e,this.scheduler=r,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){return new N(t,this).run()},e}(De);N.prototype.run=function(){function t(t,i){n>t?(e.onNext(r[t]),i(t+1)):e.onCompleted()}var e=this.observer,r=this.parent.args,n=r.length;return this.parent.scheduler.scheduleRecursiveWithState(0,t)};var tr=Ie.fromArray=function(t,e){return de(e)||(e=ye),new Qe(t,e)};Ie.generate=function(t,e,r,n,i){return de(i)||(i=ye),new Or(function(o){var a=!0;return i.scheduleRecursiveWithState(t,function(t,i){var s,c;try{a?a=!1:t=r(t),(s=e(t))&&(c=n(t))}catch(t){return o.onError(t)}s?(o.onNext(c),i(t)):o.onCompleted()})})};var er=function(t){function e(){t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){return oe},e}(De),rr=Ie.never=function(){return new er};Ie.of=function(){for(var t=arguments.length,e=new Array(t),r=0;t>r;r++)e[r]=arguments[r];return new Qe(e,ye)},Ie.ofWithScheduler=function(t){for(var e=arguments.length,r=new Array(e-1),n=1;e>n;n++)r[n-1]=arguments[n];return new Qe(r,t)};var nr=function(t){function e(e,r){this.obj=e,this.keys=Object.keys(e),this.scheduler=r,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){return new D(t,this).run()},e}(De);D.prototype.run=function(){function t(t,o){if(i>t){var a=n[t];e.onNext([a,r[a]]),o(t+1)}else e.onCompleted()}var e=this.observer,r=this.parent.obj,n=this.parent.keys,i=n.length;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},Ie.pairs=function(t,e){return e||(e=ye),new nr(t,e)};var ir=function(t){function e(e,r,n){this.start=e,this.rangeCount=r,this.scheduler=n,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){return new or(t,this).run()},e}(De),or=function(){function t(t,e){this.observer=t,this.parent=e}return t.prototype.run=function(){function t(t,i){r>t?(n.onNext(e+t),i(t+1)):n.onCompleted()}var e=this.parent.start,r=this.parent.rangeCount,n=this.observer;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},t}();Ie.range=function(t,e,r){return de(r)||(r=ye),new ir(t,e,r)};var ar=function(t){function e(e,r,n){this.value=e,this.repeatCount=null==r?-1:r,this.scheduler=n,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){return new k(t,this).run()},e}(De);k.prototype.run=function(){function t(t,n){return(-1===t||t>0)&&(e.onNext(r),t>0&&t--),0===t?e.onCompleted():void n(t)}var e=this.observer,r=this.parent.value;return this.parent.scheduler.scheduleRecursiveWithState(this.parent.repeatCount,t)},Ie.repeat=function(t,e,r){return de(r)||(r=ye),new ar(t,e,r)};var sr=function(t){function e(e,r){this.value=e,this.scheduler=r,t.call(this)}function r(t,e){this.observer=t,this.parent=e}function n(t,e){var r=e[0],n=e[1];n.onNext(r),n.onCompleted()}return Yt(e,t),e.prototype.subscribeCore=function(t){return new r(t,this).run()},r.prototype.run=function(){return this.parent.scheduler.scheduleWithState([this.parent.value,this.observer],n)},e}(De),cr=(Ie.return=Ie.just=Ie.returnValue=function(t,e){return de(e)||(e=ge),new sr(t,e)},function(t){function e(e,r){this.error=e,this.scheduler=r,t.call(this)}function r(t,e){this.o=t,this.p=e}function n(t,e){var r=e[0];e[1].onError(r)}return Yt(e,t),e.prototype.subscribeCore=function(t){return new r(t,this).run()},r.prototype.run=function(){return this.p.scheduler.scheduleWithState([this.p.error,this.o],n)},e}(De)),ur=Ie.throw=Ie.throwError=Ie.throwException=function(t,e){return de(e)||(e=ge),new cr(t,e)};Ie.using=function(t,e){return new Or(function(r){var n,i,o=oe;try{n=t(),n&&(o=n),i=e(n)}catch(t){return new ee(ur(t).subscribe(r),o)}return new ee(i.subscribe(r),o)})},Pe.amb=function(t){var e=this;return new Or(function(r){function n(){o||(o=a,u.dispose())}function i(){o||(o=s,c.dispose())}var o,a="L",s="R",c=new ce,u=new ce;return st(t)&&(t=He(t)),c.setDisposable(e.subscribe(function(t){n(),o===a&&r.onNext(t)},function(t){n(),o===a&&r.onError(t)},function(){n(),o===a&&r.onCompleted()})),u.setDisposable(t.subscribe(function(t){i(),o===s&&r.onNext(t)},function(t){i(),o===s&&r.onError(t)},function(){i(),o===s&&r.onCompleted()})),new ee(c,u)})},Ie.amb=function(){var t=rr(),e=[];if(Array.isArray(arguments[0]))e=arguments[0];else for(var r=0,n=arguments.length;n>r;r++)e.push(arguments[r]);for(var r=0,n=e.length;n>r;r++)t=function(t,e){return t.amb(e)}(t,e[r]);return t},Pe.catch=Pe.catchError=Pe.catchException=function(t){return"function"==typeof t?F(this,t):hr([this,t])};var hr=Ie.catchError=Ie.catch=Ie.catchException=function(){var t=[];if(Array.isArray(arguments[0]))t=arguments[0];else for(var e=0,r=arguments.length;r>e;e++)t.push(arguments[e]);return Ge(t).catchError()};Pe.combineLatest=function(){for(var t=arguments.length,e=new Array(t),r=0;t>r;r++)e[r]=arguments[r];return Array.isArray(e[0])?e[0].unshift(this):e.unshift(this),lr.apply(this,e)};var lr=Ie.combineLatest=function(){for(var t=arguments.length,e=new Array(t),r=0;t>r;r++)e[r]=arguments[r];var n=e.pop();return Array.isArray(e[0])&&(e=e[0]),new Or(function(t){function r(e){if(s[e]=!0,c||(c=s.every(rt))){try{var r=n.apply(null,h)}catch(e){return t.onError(e)}t.onNext(r)}else u.filter(function(t,r){return r!==e}).every(rt)&&t.onCompleted()}function i(e){u[e]=!0,u.every(rt)&&t.onCompleted()}for(var o=e.length,a=function(){return!1},s=b(o,a),c=!1,u=b(o,a),h=new Array(o),l=new Array(o),p=0;o>p;p++)!function(n){var o=e[n],a=new ce;st(o)&&(o=He(o)),a.setDisposable(o.subscribe(function(t){h[n]=t,r(n)},function(e){t.onError(e)},function(){i(n)})),l[n]=a}(p);return new ee(l)},this)};Pe.concat=function(){for(var t=[],e=0,r=arguments.length;r>e;e++)t.push(arguments[e]);return t.unshift(this),fr.apply(null,t)};var pr=function(t){function e(e){this.sources=e,t.call(this)}function r(t,e){this.sources=t,this.o=e}return Yt(e,t),e.prototype.subscribeCore=function(t){return new r(this.sources,t).run()},r.prototype.run=function(){var t,e=new ue,r=this.sources,n=r.length,i=this.o,o=ge.scheduleRecursiveWithState(0,function(o,a){if(!t){if(o===n)return i.onCompleted();var s=r[o];st(s)&&(s=He(s));var c=new ce;e.setDisposable(c),c.setDisposable(s.subscribe(function(t){i.onNext(t)},function(t){i.onError(t)},function(){a(o+1)}))}});return new ee(e,o,ie(function(){t=!0}))},e}(De),fr=Ie.concat=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{t=new Array(arguments.length);for(var e=0,r=arguments.length;r>e;e++)t[e]=arguments[e]}return new pr(t)};Pe.concatAll=Pe.concatObservable=function(){return this.merge(1)};var dr=function(t){function e(e,r){this.source=e,this.maxConcurrent=r,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){var e=new ee;return e.add(this.source.subscribe(new mr(t,this.maxConcurrent,e))),e},e}(De),mr=function(){function t(t,e,r){this.o=t,this.max=e,this.g=r,this.done=!1,this.q=[],this.activeCount=0,this.isStopped=!1}function e(t,e){this.parent=t,this.sad=e,this.isStopped=!1}return t.prototype.handleSubscribe=function(t){var r=new ce;this.g.add(r),st(t)&&(t=He(t)),r.setDisposable(t.subscribe(new e(this,r)))},t.prototype.onNext=function(t){this.isStopped||(this.activeCount<this.max?(this.activeCount++,this.handleSubscribe(t)):this.q.push(t))},t.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},t.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.done=!0,0===this.activeCount&&this.o.onCompleted())},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e.prototype.onNext=function(t){this.isStopped||this.parent.o.onNext(t)},e.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.parent.o.onError(t))},e.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=!0;var t=this.parent;t.g.remove(this.sad),t.q.length>0?t.handleSubscribe(t.q.shift()):(t.activeCount--,t.done&&0===t.activeCount&&t.o.onCompleted())}},e.prototype.dispose=function(){this.isStopped=!0},e.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.parent.o.onError(t),!0)},t}();Pe.merge=function(t){return"number"!=typeof t?vr(this,t):new dr(this,t)};var vr=Ie.merge=function(){var t,e,r=[],n=arguments.length;if(arguments[0])if(de(arguments[0]))for(t=arguments[0],e=1;n>e;e++)r.push(arguments[e]);else for(t=ge,e=0;n>e;e++)r.push(arguments[e]);else for(t=ge,
-e=1;n>e;e++)r.push(arguments[e]);return Array.isArray(r[0])&&(r=r[0]),I(t,r).mergeAll()},gr=tt.CompositeError=function(t){this.name="NotImplementedError",this.innerErrors=t,this.message="This contains multiple errors. Check the innerErrors",Error.call(this)};gr.prototype=Error.prototype,Ie.mergeDelayError=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{var e=arguments.length;t=new Array(e);for(var r=0;e>r;r++)t[r]=arguments[r]}var n=I(null,t);return new Or(function(t){function e(){0===a.length?t.onCompleted():1===a.length?t.onError(a[0]):t.onError(new gr(a))}var r=new ee,i=new ce,o=!1,a=[];return r.add(i),i.setDisposable(n.subscribe(function(n){var i=new ce;r.add(i),st(n)&&(n=He(n)),i.setDisposable(n.subscribe(function(e){t.onNext(e)},function(t){a.push(t),r.remove(i),o&&1===r.length&&e()},function(){r.remove(i),o&&1===r.length&&e()}))},function(t){a.push(t),o=!0,1===r.length&&e()},function(){o=!0,1===r.length&&e()})),r})};var yr=function(t){function e(e){this.source=e,t.call(this)}function r(t,e){this.o=t,this.g=e,this.isStopped=!1,this.done=!1}function n(t,e,r){this.parent=t,this.g=e,this.sad=r,this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){var e=new ee,n=new ce;return e.add(n),n.setDisposable(this.source.subscribe(new r(t,e))),e},r.prototype.onNext=function(t){if(!this.isStopped){var e=new ce;this.g.add(e),st(t)&&(t=He(t)),e.setDisposable(t.subscribe(new n(this,this.g,e)))}},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.done=!0,1===this.g.length&&this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},n.prototype.onNext=function(t){this.isStopped||this.parent.o.onNext(t)},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.parent.o.onError(t))},n.prototype.onCompleted=function(){if(!this.isStopped){var t=this.parent;this.isStopped=!0,t.g.remove(this.sad),t.done&&1===t.g.length&&t.o.onCompleted()}},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.parent.o.onError(t),!0)},e}(De);Pe.mergeAll=Pe.mergeObservable=function(){return new yr(this)},Pe.onErrorResumeNext=function(t){if(!t)throw new Error("Second observable is required");return br([this,t])};var br=Ie.onErrorResumeNext=function(){var t=[];if(Array.isArray(arguments[0]))t=arguments[0];else for(var e=0,r=arguments.length;r>e;e++)t.push(arguments[e]);return new Or(function(e){var r=0,n=new ue,i=ge.scheduleRecursive(function(i){var o,a;r<t.length?(o=t[r++],st(o)&&(o=He(o)),a=new ce,n.setDisposable(a),a.setDisposable(o.subscribe(e.onNext.bind(e),i,i))):e.onCompleted()});return new ee(n,i)})};Pe.skipUntil=function(t){var e=this;return new Or(function(r){var n=!1,i=new ee(e.subscribe(function(t){n&&r.onNext(t)},function(t){r.onError(t)},function(){n&&r.onCompleted()}));st(t)&&(t=He(t));var o=new ce;return i.add(o),o.setDisposable(t.subscribe(function(){n=!0,o.dispose()},function(t){r.onError(t)},function(){o.dispose()})),i},e)};var _r=function(t){function e(e){this.source=e,t.call(this)}function r(t,e){this.o=t,this.inner=e,this.stopped=!1,this.latest=0,this.hasLatest=!1,this.isStopped=!1}function n(t,e){this.parent=t,this.id=e,this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){var e=new ue,n=this.source.subscribe(new r(t,e));return new ee(n,e)},r.prototype.onNext=function(t){if(!this.isStopped){var e=new ce,r=++this.latest;this.hasLatest=!0,this.inner.setDisposable(e),st(t)&&(t=He(t)),e.setDisposable(t.subscribe(new n(this,r)))}},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.stopped=!0,!this.hasLatest&&this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},n.prototype.onNext=function(t){this.isStopped||this.parent.latest===this.id&&this.parent.o.onNext(t)},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.parent.latest===this.id&&this.parent.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.parent.latest===this.id&&(this.parent.hasLatest=!1,this.parent.isStopped&&this.parent.o.onCompleted()))},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.parent.o.onError(t),!0)},e}(De);Pe.switch=Pe.switchLatest=function(){return new _r(this)};var xr=function(t){function e(e,r){this.source=e,this.other=st(r)?He(r):r,t.call(this)}function r(t){this.o=t,this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){return new ee(this.source.subscribe(t),this.other.subscribe(new r(t)))},r.prototype.onNext=function(t){this.isStopped||this.o.onCompleted()},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){!this.isStopped&&(this.isStopped=!0)},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e}(De);Pe.takeUntil=function(t){return new xr(this,t)},Pe.withLatestFrom=function(){for(var t=arguments.length,e=new Array(t),r=0;t>r;r++)e[r]=arguments[r];var n=e.pop(),i=this;return Array.isArray(e[0])&&(e=e[0]),new Or(function(t){for(var r=e.length,o=b(r,U),a=!1,s=new Array(r),c=new Array(r+1),u=0;r>u;u++)!function(r){var n=e[r],i=new ce;st(n)&&(n=He(n)),i.setDisposable(n.subscribe(function(t){s[r]=t,o[r]=!0,a=o.every(rt)},function(e){t.onError(e)},et)),c[r]=i}(u);var h=new ce;return h.setDisposable(i.subscribe(function(e){var r=[e].concat(s);if(a){var i=x(n).apply(null,r);return i===Jt?t.onError(i.e):void t.onNext(i)}},function(e){t.onError(e)},function(){t.onCompleted()})),c[r]=h,new ee(c)},this)},Pe.zip=function(){if(Array.isArray(arguments[0]))return B.apply(this,arguments);for(var t=arguments.length,e=new Array(t),r=0;t>r;r++)e[r]=arguments[r];var n=this,i=e.pop();return e.unshift(n),new Or(function(t){for(var r=e.length,o=b(r,z),a=b(r,U),s=new Array(r),c=0;r>c;c++)!function(r){var c=e[r],u=new ce;st(c)&&(c=He(c)),u.setDisposable(c.subscribe(function(e){if(o[r].push(e),o.every(function(t){return t.length>0})){var s=o.map(function(t){return t.shift()}),c=x(i).apply(n,s);if(c===Jt)return t.onError(c.e);t.onNext(c)}else a.filter(function(t,e){return e!==r}).every(rt)&&t.onCompleted()},function(e){t.onError(e)},function(){a[r]=!0,a.every(rt)&&t.onCompleted()})),s[r]=u}(c);return new ee(s)},n)},Ie.zip=function(){for(var t=arguments.length,e=new Array(t),r=0;t>r;r++)e[r]=arguments[r];var n=e.shift();return n.zip.apply(n,e)},Ie.zipArray=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{var e=arguments.length;t=new Array(e);for(var r=0;e>r;r++)t[r]=arguments[r]}return new Or(function(e){for(var r=t.length,n=b(r,$),i=b(r,U),o=new Array(r),a=0;r>a;a++)!function(r){o[r]=new ce,o[r].setDisposable(t[r].subscribe(function(t){if(n[r].push(t),n.every(function(t){return t.length>0})){var o=n.map(function(t){return t.shift()});e.onNext(o)}else if(i.filter(function(t,e){return e!==r}).every(rt))return e.onCompleted()},function(t){e.onError(t)},function(){i[r]=!0,i.every(rt)&&e.onCompleted()}))}(a);return new ee(o)})},Pe.asObservable=function(){var t=this;return new Or(function(e){return t.subscribe(e)},t)},Pe.bufferWithCount=function(t,e){return"number"!=typeof e&&(e=t),this.windowWithCount(t,e).selectMany(function(t){return t.toArray()}).where(function(t){return t.length>0})},Pe.dematerialize=function(){var t=this;return new Or(function(e){return t.subscribe(function(t){return t.accept(e)},function(t){e.onError(t)},function(){e.onCompleted()})},this)},Pe.distinctUntilChanged=function(t,e){var r=this;return e||(e=it),new Or(function(n){var i,o=!1;return r.subscribe(function(r){var a=r;if(t&&(a=x(t)(r))===Jt)return n.onError(a.e);if(o){var s=x(e)(i,a);if(s===Jt)return n.onError(s.e)}o&&s||(o=!0,i=a,n.onNext(r))},function(t){n.onError(t)},function(){n.onCompleted()})},this)};var wr=function(t){function e(e,r,n,i){this.source=e,this.t=!r||ct(r)?Oe(r||et,n||et,i||et):r,t.call(this)}function r(t,e){this.o=t,this.t=e,this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t,this.t))},r.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.t.onNext).call(this.t,t);e===Jt&&this.o.onError(e.e),this.o.onNext(t)}},r.prototype.onError=function(t){if(!this.isStopped){this.isStopped=!0;var e=x(this.t.onError).call(this.t,t);if(e===Jt)return this.o.onError(e.e);this.o.onError(t)}},r.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=!0;var t=x(this.t.onCompleted).call(this.t);if(t===Jt)return this.o.onError(t.e);this.o.onCompleted()}},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e}(De);Pe.do=Pe.tap=Pe.doAction=function(t,e,r){return new wr(this,t,e,r)},Pe.doOnNext=Pe.tapOnNext=function(t,e){return this.tap(void 0!==e?function(r){t.call(e,r)}:t)},Pe.doOnError=Pe.tapOnError=function(t,e){return this.tap(et,void 0!==e?function(r){t.call(e,r)}:t)},Pe.doOnCompleted=Pe.tapOnCompleted=function(t,e){return this.tap(et,null,void 0!==e?function(){t.call(e)}:t)},Pe.finally=Pe.ensure=function(t){var e=this;return new Or(function(r){var n;try{n=e.subscribe(r)}catch(e){throw t(),e}return ie(function(){try{n.dispose()}catch(t){throw t}finally{t()}})},this)},Pe.finallyAction=function(t){return this.ensure(t)};var Sr=function(t){function e(e){this.source=e,t.call(this)}function r(t){this.o=t,this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t))},r.prototype.onNext=et,r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.observer.onError(t),!0)},e}(De);Pe.ignoreElements=function(){return new Sr(this)},Pe.materialize=function(){var t=this;return new Or(function(e){return t.subscribe(function(t){e.onNext(Me(t))},function(t){e.onNext(Ee(t)),e.onCompleted()},function(){e.onNext(Te()),e.onCompleted()})},t)},Pe.repeat=function(t){return ze(this,t).concat()},Pe.retry=function(t){return ze(this,t).catchError()},Pe.retryWhen=function(t){return ze(this).catchErrorWhen(t)};var Mr=function(t){function e(e,r,n,i){this.source=e,this.accumulator=r,this.hasSeed=n,this.seed=i,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new G(t,this))},e}(De);G.prototype.onNext=function(t){if(!this.isStopped){!this.hasValue&&(this.hasValue=!0);try{this.hasAccumulation?this.accumulation=this.accumulator(this.accumulation,t):(this.accumulation=this.hasSeed?this.accumulator(this.seed,t):t,this.hasAccumulation=!0)}catch(t){return this.observer.onError(t)}this.observer.onNext(this.accumulation)}},G.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.observer.onError(t))},G.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,!this.hasValue&&this.hasSeed&&this.observer.onNext(this.seed),this.observer.onCompleted())},G.prototype.dispose=function(){this.isStopped=!0},G.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.observer.onError(t),!0)},Pe.scan=function(){var t,e,r=!1;return 2===arguments.length?(r=!0,t=arguments[0],e=arguments[1]):e=arguments[0],new Mr(this,e,r,t)},Pe.skipLast=function(t){if(0>t)throw new dt;var e=this;return new Or(function(r){var n=[];return e.subscribe(function(e){n.push(e),n.length>t&&r.onNext(n.shift())},function(t){r.onError(t)},function(){r.onCompleted()})},e)},Pe.startWith=function(){var t,e=0;arguments.length&&de(arguments[0])?(t=arguments[0],e=1):t=ge;for(var r=[],n=e,i=arguments.length;i>n;n++)r.push(arguments[n]);return Ge([tr(r,t),this]).concat()},Pe.takeLast=function(t){if(0>t)throw new dt;var e=this;return new Or(function(r){var n=[];return e.subscribe(function(e){n.push(e),n.length>t&&n.shift()},function(t){r.onError(t)},function(){for(;n.length>0;)r.onNext(n.shift());r.onCompleted()})},e)},Pe.takeLastBuffer=function(t){var e=this;return new Or(function(r){var n=[];return e.subscribe(function(e){n.push(e),n.length>t&&n.shift()},function(t){r.onError(t)},function(){r.onNext(n),r.onCompleted()})},e)},Pe.windowWithCount=function(t,e){var r=this;if(+t||(t=0),Math.abs(t)===1/0&&(t=0),0>=t)throw new dt;if(null==e&&(e=t),+e||(e=0),Math.abs(e)===1/0&&(e=0),0>=e)throw new dt;return new Or(function(n){function i(){var t=new jr;c.push(t),n.onNext(Zt(t,a))}var o=new ce,a=new he(o),s=0,c=[];return i(),o.setDisposable(r.subscribe(function(r){for(var n=0,o=c.length;o>n;n++)c[n].onNext(r);var a=s-t+1;a>=0&&a%e==0&&c.shift().onCompleted(),++s%e==0&&i()},function(t){for(;c.length>0;)c.shift().onError(t);n.onError(t)},function(){for(;c.length>0;)c.shift().onCompleted();n.onCompleted()})),a},r)},Pe.selectConcat=Pe.concatMap=function(t,e,r){return ct(t)&&ct(e)?this.concatMap(function(r,n){var i=t(r,n);return st(i)&&(i=He(i)),(wt(i)||xt(i))&&(i=Je(i)),i.map(function(t,i){return e(r,t,n,i)})}):ct(t)?V(this,t,r):V(this,function(){return t})},Pe.concatMapObserver=Pe.selectConcatObserver=function(t,e,r,n){var i=this,o=St(t,n,2),a=St(e,n,1),s=St(r,n,0);return new Or(function(t){var e=0;return i.subscribe(function(r){var n;try{n=o(r,e++)}catch(e){return void t.onError(e)}st(n)&&(n=He(n)),t.onNext(n)},function(e){var r;try{r=a(e)}catch(e){return void t.onError(e)}st(r)&&(r=He(r)),t.onNext(r),t.onCompleted()},function(){var e;try{e=s()}catch(e){return void t.onError(e)}st(e)&&(e=He(e)),t.onNext(e),t.onCompleted()})},this).concatAll()},Pe.defaultIfEmpty=function(t){var e=this;return t===o&&(t=null),new Or(function(r){var n=!1;return e.subscribe(function(t){n=!0,r.onNext(t)},function(t){r.onError(t)},function(){!n&&r.onNext(t),r.onCompleted()})},e)},W.prototype.push=function(t){var e=-1===H(this.set,t,this.comparer);return e&&this.set.push(t),e},Pe.distinct=function(t,e){var r=this;return e||(e=it),new Or(function(n){var i=new W(e);return r.subscribe(function(e){var r=e;if(t)try{r=t(e)}catch(t){return void n.onError(t)}i.push(r)&&n.onNext(e)},function(t){n.onError(t)},function(){n.onCompleted()})},this)};var Er=function(t){function e(e,r,n){this.source=e,this.selector=St(r,n,3),t.call(this)}function r(t,e){return function(r,n,i){return t.call(this,e.selector(r,n,i),n,i)}}function n(t,e,r){this.o=t,this.selector=e,this.source=r,this.i=0,this.isStopped=!1}return Yt(e,t),e.prototype.internalMap=function(t,n){return new e(this.source,r(t,this),n)},e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t,this.selector,this))},n.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.selector)(t,this.i++,this.source);return e===Jt?this.o.onError(e.e):void this.o.onNext(e)}},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e}(De);Pe.map=Pe.select=function(t,e){var r="function"==typeof t?t:function(){return t};return this instanceof Er?this.internalMap(r,e):new Er(this,r,e)},Pe.pluck=function(){var t=arguments,e=arguments.length;if(0===e)throw new Error("List of properties cannot be empty.");return this.map(function(r){for(var n=r,i=0;e>i;i++){var a=n[t[i]];if(void 0===a)return o;n=a}return n})},Pe.flatMapObserver=Pe.selectManyObserver=function(t,e,r,n){var i=this;return new Or(function(o){var a=0;return i.subscribe(function(e){var r;try{r=t.call(n,e,a++)}catch(t){return void o.onError(t)}st(r)&&(r=He(r)),o.onNext(r)},function(t){var r;try{r=e.call(n,t)}catch(t){return void o.onError(t)}st(r)&&(r=He(r)),o.onNext(r),o.onCompleted()},function(){var t;try{t=r.call(n)}catch(t){return void o.onError(t)}st(t)&&(t=He(t)),o.onNext(t),o.onCompleted()})},i).mergeAll()},Pe.selectMany=Pe.flatMap=function(t,e,r){return ct(t)&&ct(e)?this.flatMap(function(r,n){var i=t(r,n);return st(i)&&(i=He(i)),(wt(i)||xt(i))&&(i=Je(i)),i.map(function(t,i){return e(r,t,n,i)})},r):ct(t)?q(this,t,r):q(this,function(){return t})},Pe.selectSwitch=Pe.flatMapLatest=Pe.switchMap=function(t,e){return this.select(t,e).switchLatest()};var Tr=function(t){function e(e,r){this.source=e,this.skipCount=r,t.call(this)}function r(t,e){this.c=e,this.r=e,this.o=t,this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t,this.skipCount))},r.prototype.onNext=function(t){this.isStopped||(this.r<=0?this.o.onNext(t):this.r--)},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e}(De);Pe.skip=function(t){if(0>t)throw new dt;return new Tr(this,t)},Pe.skipWhile=function(t,e){var r=this,n=St(t,e,3);return new Or(function(t){var e=0,i=!1;return r.subscribe(function(o){if(!i)try{i=!n(o,e++,r)}catch(e){return void t.onError(e)}i&&t.onNext(o)},function(e){t.onError(e)},function(){t.onCompleted()})},r)},Pe.take=function(t,e){if(0>t)throw new dt;if(0===t)return Xe(e);var r=this;return new Or(function(e){var n=t;return r.subscribe(function(t){n-- >0&&(e.onNext(t),0>=n&&e.onCompleted())},function(t){e.onError(t)},function(){e.onCompleted()})},r)},Pe.takeWhile=function(t,e){var r=this,n=St(t,e,3);return new Or(function(t){var e=0,i=!0;return r.subscribe(function(o){if(i){try{i=n(o,e++,r)}catch(e){return void t.onError(e)}i?t.onNext(o):t.onCompleted()}},function(e){t.onError(e)},function(){t.onCompleted()})},r)};var Cr=function(t){function e(e,r,n){this.source=e,this.predicate=St(r,n,3),t.call(this)}function r(t,e){return function(r,n,i){return e.predicate(r,n,i)&&t.call(this,r,n,i)}}function n(t,e,r){this.o=t,this.predicate=e,this.source=r,this.i=0,this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t,this.predicate,this))},e.prototype.internalFilter=function(t,n){return new e(this.source,r(t,this),n)},n.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.predicate)(t,this.i++,this.source);return e===Jt?this.o.onError(e.e):void(e&&this.o.onNext(t))}},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e}(De);Pe.filter=Pe.where=function(t,e){return this instanceof Cr?this.internalFilter(t,e):new Cr(this,t,e)},Pe.transduce=function(t){function e(t){return{"@@transducer/init":function(){return t},"@@transducer/step":function(t,e){return t.onNext(e)},"@@transducer/result":function(t){return t.onCompleted()}}}var r=this;return new Or(function(n){var i=t(e(n));return r.subscribe(function(t){try{i["@@transducer/step"](n,t)}catch(t){n.onError(t)}},function(t){n.onError(t)},function(){i["@@transducer/result"](n)})},r)};var Or=tt.AnonymousObservable=function(t){function e(t){return t&&ct(t.dispose)?t:ct(t)?ie(t):oe}function r(t,r){var n=r[0],i=r[1],o=x(i)(n);return o!==Jt||n.fail(Jt.e)?void n.setDisposable(e(o)):w(Jt.e)}function n(e,n){function i(t){var n=new Pr(t),i=[n,e];return ye.scheduleRequired()?ye.scheduleWithState(i,r):r(null,i),n}this.source=n,t.call(this,i)}return Yt(n,t),n}(Ie),Pr=function(t){function e(e){t.call(this),this.observer=e,this.m=new ce}Yt(e,t);var r=e.prototype;return r.next=function(t){var e=x(this.observer.onNext).call(this.observer,t);e===Jt&&(this.dispose(),w(e.e))},r.error=function(t){var e=x(this.observer.onError).call(this.observer,t);this.dispose(),e===Jt&&w(e.e)},r.completed=function(){var t=x(this.observer.onCompleted).call(this.observer);this.dispose(),t===Jt&&w(t.e)},r.setDisposable=function(t){this.m.setDisposable(t)},r.getDisposable=function(){return this.m.getDisposable()},r.dispose=function(){t.prototype.dispose.call(this),this.m.dispose()},e}(Ae),Ar=function(t,e){this.subject=t,this.observer=e};Ar.prototype.dispose=function(){if(!this.subject.isDisposed&&null!==this.observer){var t=this.subject.observers.indexOf(this.observer);this.subject.observers.splice(t,1),this.observer=null}};var jr=tt.Subject=function(t){function e(t){return se(this),this.isStopped?this.hasError?(t.onError(this.error),oe):(t.onCompleted(),oe):(this.observers.push(t),new Ar(this,t))}function r(){t.call(this,e),this.isDisposed=!1,this.isStopped=!1,this.observers=[],this.hasError=!1}return Yt(r,t),Kt(r.prototype,Ce.prototype,{hasObservers:function(){return this.observers.length>0},onCompleted:function(){if(se(this),!this.isStopped){this.isStopped=!0;for(var t=0,e=a(this.observers),r=e.length;r>t;t++)e[t].onCompleted();this.observers.length=0}},onError:function(t){if(se(this),!this.isStopped){this.isStopped=!0,this.error=t,this.hasError=!0;for(var e=0,r=a(this.observers),n=r.length;n>e;e++)r[e].onError(t);this.observers.length=0}},onNext:function(t){if(se(this),!this.isStopped)for(var e=0,r=a(this.observers),n=r.length;n>e;e++)r[e].onNext(t)},dispose:function(){this.isDisposed=!0,this.observers=null}}),r.create=function(t,e){return new Rr(t,e)},r}(Ie),Rr=(tt.AsyncSubject=function(t){function e(t){return se(this),this.isStopped?(this.hasError?t.onError(this.error):this.hasValue?(t.onNext(this.value),t.onCompleted()):t.onCompleted(),oe):(this.observers.push(t),new Ar(this,t))}function r(){t.call(this,e),this.isDisposed=!1,this.isStopped=!1,this.hasValue=!1,this.observers=[],this.hasError=!1}return Yt(r,t),Kt(r.prototype,Ce,{hasObservers:function(){return se(this),this.observers.length>0},onCompleted:function(){var t,e;if(se(this),!this.isStopped){this.isStopped=!0;var r=a(this.observers),e=r.length;if(this.hasValue)for(t=0;e>t;t++){var n=r[t];n.onNext(this.value),n.onCompleted()}else for(t=0;e>t;t++)r[t].onCompleted();this.observers.length=0}},onError:function(t){if(se(this),!this.isStopped){this.isStopped=!0,this.hasError=!0,this.error=t;for(var e=0,r=a(this.observers),n=r.length;n>e;e++)r[e].onError(t);this.observers.length=0}},onNext:function(t){se(this),this.isStopped||(this.value=t,this.hasValue=!0)},dispose:function(){this.isDisposed=!0,this.observers=null,this.exception=null,this.value=null}}),r}(Ie),tt.AnonymousSubject=function(t){function e(t){return this.observable.subscribe(t)}function r(r,n){this.observer=r,this.observable=n,t.call(this,e)}return Yt(r,t),Kt(r.prototype,Ce.prototype,{onCompleted:function(){this.observer.onCompleted()},onError:function(t){this.observer.onError(t)},onNext:function(t){this.observer.onNext(t)}}),r}(Ie));"function"==typeof t&&"object"==typeof t.amd&&t.amd?(Y.Rx=tt,t(function(){return tt})):K&&Z?J?(Z.exports=tt).Rx=tt:K.Rx=tt:Y.Rx=tt;var Lr=p()}).call(this)}).call(this,e(150),void 0!==i?i:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{150:150}]},{},[1])(1)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],14:[function(t,e,r){(function(r){var n=void 0!==r?r:"undefined"!=typeof window?window:{},i=t("min-document");if("undefined"!=typeof document)e.exports=document;else{var o=n["__GLOBAL_DOCUMENT_CACHE@4"];o||(o=n["__GLOBAL_DOCUMENT_CACHE@4"]=i),e.exports=o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"min-document":2}],15:[function(t,e,r){r.read=function(t,e,r,n,i){var o,a,s=8*i-n-1,c=(1<<s)-1,u=c>>1,h=-7,l=r?i-1:0,p=r?-1:1,f=t[e+l];for(l+=p,o=f&(1<<-h)-1,f>>=-h,h+=s;h>0;o=256*o+t[e+l],l+=p,h-=8);for(a=o&(1<<-h)-1,o>>=-h,h+=n;h>0;a=256*a+t[e+l],l+=p,h-=8);if(0===o)o=1-u;else{if(o===c)return a?NaN:1/0*(f?-1:1);a+=Math.pow(2,n),o-=u}return(f?-1:1)*a*Math.pow(2,o-n)},r.write=function(t,e,r,n,i,o){var a,s,c,u=8*o-i-1,h=(1<<u)-1,l=h>>1,p=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=n?0:o-1,d=n?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=h):(a=Math.floor(Math.log(e)/Math.LN2),e*(c=Math.pow(2,-a))<1&&(a--,c*=2),e+=a+l>=1?p/c:p*Math.pow(2,1-l),e*c>=2&&(a++,c/=2),a+l>=h?(s=0,a=h):a+l>=1?(s=(e*c-1)*Math.pow(2,i),a+=l):(s=e*Math.pow(2,l-1)*Math.pow(2,i),a=0));i>=8;t[r+f]=255&s,f+=d,s/=256,i-=8);for(a=a<<i|s,u+=i;u>0;t[r+f]=255&a,f+=d,a/=256,u-=8);t[r+f-d]|=128*m}},{}],16:[function(t,e,r){(function(t){"use strict";function r(t,e){return t in n?n[t]:(n[t]=e,e)}var n="undefined"!=typeof window?window:void 0!==t?t:{};e.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],17:[function(t,e,r){"use strict";function n(t,e,r){var n="__INDIVIDUAL_ONE_VERSION_"+t,o=n+"_ENFORCE_SINGLETON",a=i(o,e);if(a!==e)throw new Error("Can only have one copy of "+t+".\nYou already have version "+a+" installed.\nThis means you cannot install version "+e);return i(n,r)}var i=t("./index.js");e.exports=n},{"./index.js":16}],18:[function(t,e,r){"use strict";e.exports=function(t){return"object"==typeof t&&null!==t}},{}],19:[function(t,e,r){var n={}.toString;e.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},{}],20:[function(t,e,r){"use strict";var n={};n.base32="0123456789bcdefghjkmnpqrstuvwxyz",n.encode=function(t,e,r){if(void 0===r){for(var i=1;i<=12;i++){var o=n.encode(t,e,i),a=n.decode(o);if(a.lat==t&&a.lon==e)return o}r=12}if(t=Number(t),e=Number(e),r=Number(r),isNaN(t)||isNaN(e)||isNaN(r))throw new Error("Invalid geohash");for(var s=0,c=0,u=!0,h="",l=-90,p=90,f=-180,d=180;h.length<r;){if(u){var m=(f+d)/2;e>=m?(s=2*s+1,f=m):(s*=2,d=m)}else{var v=(l+p)/2;t>=v?(s=2*s+1,l=v):(s*=2,p=v)}u=!u,5==++c&&(h+=n.base32.charAt(s),c=0,s=0)}return h},n.decode=function(t){var e=n.bounds(t),r=e.sw.lat,i=e.sw.lon,o=e.ne.lat,a=e.ne.lon,s=(r+o)/2,c=(i+a)/2;return s=s.toFixed(Math.floor(2-Math.log(o-r)/Math.LN10)),c=c.toFixed(Math.floor(2-Math.log(a-i)/Math.LN10)),{lat:Number(s),lon:Number(c)}},n.bounds=function(t){if(0===t.length)throw new Error("Invalid geohash");t=t.toLowerCase();for(var e=!0,r=-90,i=90,o=-180,a=180,s=0;s<t.length;s++){var c=t.charAt(s),u=n.base32.indexOf(c);if(u==-1)throw new Error("Invalid geohash");for(var h=4;h>=0;h--){var l=u>>h&1;if(e){var p=(o+a)/2;1==l?o=p:a=p}else{var f=(r+i)/2;1==l?r=f:i=f}e=!e}}return{sw:{lat:r,lon:o},ne:{lat:i,lon:a}}},n.adjacent=function(t,e){if(t=t.toLowerCase(),e=e.toLowerCase(),0===t.length)throw new Error("Invalid geohash");if("nsew".indexOf(e)==-1)throw new Error("Invalid direction");var r={n:["p0r21436x8zb9dcf5h7kjnmqesgutwvy","bc01fg45238967deuvhjyznpkmstqrwx"],s:["14365h7k9dcfesgujnmqp0r2twvyx8zb","238967debc01fg45kmstqrwxuvhjyznp"],e:["bc01fg45238967deuvhjyznpkmstqrwx","p0r21436x8zb9dcf5h7kjnmqesgutwvy"],w:["238967debc01fg45kmstqrwxuvhjyznp","14365h7k9dcfesgujnmqp0r2twvyx8zb"]},i={n:["prxz","bcfguvyz"],s:["028b","0145hjnp"],e:["bcfguvyz","prxz"],w:["0145hjnp","028b"]},o=t.slice(-1),a=t.slice(0,-1),s=t.length%2;return i[e][s].indexOf(o)!=-1&&""!==a&&(a=n.adjacent(a,e)),a+n.base32.charAt(r[e][s].indexOf(o))},n.neighbours=function(t){return{n:n.adjacent(t,"n"),ne:n.adjacent(n.adjacent(t,"n"),"e"),e:n.adjacent(t,"e"),se:n.adjacent(n.adjacent(t,"s"),"e"),s:n.adjacent(t,"s"),sw:n.adjacent(n.adjacent(t,"s"),"w"),w:n.adjacent(t,"w"),nw:n.adjacent(n.adjacent(t,"n"),"w")}},void 0!==e&&e.exports&&(e.exports=n)},{}],21:[function(t,e,r){(function(t){function e(t,e){for(var r=0,n=t.length-1;n>=0;n--){var i=t[n];"."===i?t.splice(n,1):".."===i?(t.splice(n,1),r++):r&&(t.splice(n,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function n(t,e){if(t.filter)return t.filter(e);for(var r=[],n=0;n<t.length;n++)e(t[n],n,t)&&r.push(t[n]);return r}var i=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,o=function(t){return i.exec(t).slice(1)};r.resolve=function(){for(var r="",i=!1,o=arguments.length-1;o>=-1&&!i;o--){var a=o>=0?arguments[o]:t.cwd();if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(r=a+"/"+r,i="/"===a.charAt(0))}return r=e(n(r.split("/"),function(t){return!!t}),!i).join("/"),(i?"/":"")+r||"."},r.normalize=function(t){var i=r.isAbsolute(t),o="/"===a(t,-1);return t=e(n(t.split("/"),function(t){return!!t}),!i).join("/"),t||i||(t="."),t&&o&&(t+="/"),(i?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(n(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function n(t){for(var e=0;e<t.length&&""===t[e];e++);for(var r=t.length-1;r>=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var i=n(t.split("/")),o=n(e.split("/")),a=Math.min(i.length,o.length),s=a,c=0;c<a;c++)if(i[c]!==o[c]){s=c;break}for(var u=[],c=s;c<i.length;c++)u.push("..");return u=u.concat(o.slice(s)),u.join("/")},r.sep="/",r.delimiter=":",r.dirname=function(t){var e=o(t),r=e[0],n=e[1];return r||n?(n&&(n=n.substr(0,n.length-1)),r+n):"."},r.basename=function(t,e){var r=o(t)[2];return e&&r.substr(-1*e.length)===e&&(r=r.substr(0,r.length-e.length)),r},r.extname=function(t){return o(t)[3]};var a="b"==="ab".substr(-1)?function(t,e,r){return t.substr(e,r)}:function(t,e,r){return e<0&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:4}],22:[function(t,e,r){"use strict";function n(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}function i(t,e,r){var n,i,o=r.buf;if(i=o[r.pos++],n=(112&i)>>4,i<128)return a(t,n,e);if(i=o[r.pos++],n|=(127&i)<<3,i<128)return a(t,n,e);if(i=o[r.pos++],n|=(127&i)<<10,i<128)return a(t,n,e);if(i=o[r.pos++],n|=(127&i)<<17,i<128)return a(t,n,e);if(i=o[r.pos++],n|=(127&i)<<24,i<128)return a(t,n,e);if(i=o[r.pos++],n|=(1&i)<<31,i<128)return a(t,n,e);throw new Error("Expected varint not more than 10 bytes")}function o(t){return t.type===n.Bytes?t.readVarint()+t.pos:t.pos+1}function a(t,e,r){return r?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function s(t,e){var r,n;if(t>=0?(r=t%4294967296|0,n=t/4294967296|0):(r=~(-t%4294967296),n=~(-t/4294967296),4294967295^r?r=r+1|0:(r=0,n=n+1|0)),t>=0x10000000000000000||t<-0x10000000000000000)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),c(r,n,e),u(n,e)}function c(t,e,r){r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos]=127&t}function u(t,e){var r=(7&t)<<4;e.buf[e.pos++]|=r|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t)))))}function h(t,e,r){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.ceil(Math.log(e)/(7*Math.LN2));r.realloc(n);for(var i=r.pos-1;i>=t;i--)r.buf[i+n]=r.buf[i]}function l(t,e){for(var r=0;r<t.length;r++)e.writeVarint(t[r])}function p(t,e){for(var r=0;r<t.length;r++)e.writeSVarint(t[r])}function f(t,e){for(var r=0;r<t.length;r++)e.writeFloat(t[r])}function d(t,e){for(var r=0;r<t.length;r++)e.writeDouble(t[r])}function m(t,e){for(var r=0;r<t.length;r++)e.writeBoolean(t[r])}function v(t,e){for(var r=0;r<t.length;r++)e.writeFixed32(t[r])}function g(t,e){
-for(var r=0;r<t.length;r++)e.writeSFixed32(t[r])}function y(t,e){for(var r=0;r<t.length;r++)e.writeFixed64(t[r])}function b(t,e){for(var r=0;r<t.length;r++)e.writeSFixed64(t[r])}function _(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+16777216*t[e+3]}function x(t,e,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function w(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}function S(t,e,r){for(var n="",i=e;i<r;){var o=t[i],a=null,s=o>239?4:o>223?3:o>191?2:1;if(i+s>r)break;var c,u,h;1===s?o<128&&(a=o):2===s?128==(192&(c=t[i+1]))&&(a=(31&o)<<6|63&c)<=127&&(a=null):3===s?(c=t[i+1],u=t[i+2],128==(192&c)&&128==(192&u)&&((a=(15&o)<<12|(63&c)<<6|63&u)<=2047||a>=55296&&a<=57343)&&(a=null)):4===s&&(c=t[i+1],u=t[i+2],h=t[i+3],128==(192&c)&&128==(192&u)&&128==(192&h)&&((a=(15&o)<<18|(63&c)<<12|(63&u)<<6|63&h)<=65535||a>=1114112)&&(a=null)),null===a?(a=65533,s=1):a>65535&&(a-=65536,n+=String.fromCharCode(a>>>10&1023|55296),a=56320|1023&a),n+=String.fromCharCode(a),i+=s}return n}function M(t,e,r){for(var n,i,o=0;o<e.length;o++){if((n=e.charCodeAt(o))>55295&&n<57344){if(!i){n>56319||o+1===e.length?(t[r++]=239,t[r++]=191,t[r++]=189):i=n;continue}if(n<56320){t[r++]=239,t[r++]=191,t[r++]=189,i=n;continue}n=i-55296<<10|n-56320|65536,i=null}else i&&(t[r++]=239,t[r++]=191,t[r++]=189,i=null);n<128?t[r++]=n:(n<2048?t[r++]=n>>6|192:(n<65536?t[r++]=n>>12|224:(t[r++]=n>>18|240,t[r++]=n>>12&63|128),t[r++]=n>>6&63|128),t[r++]=63&n|128)}return r}e.exports=n;var E=t("ieee754");n.Varint=0,n.Fixed64=1,n.Bytes=2,n.Fixed32=5;n.prototype={destroy:function(){this.buf=null},readFields:function(t,e,r){for(r=r||this.length;this.pos<r;){var n=this.readVarint(),i=n>>3,o=this.pos;this.type=7&n,t(i,e,this),this.pos===o&&this.skip(n)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=_(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=w(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=_(this.buf,this.pos)+4294967296*_(this.buf,this.pos+4);return this.pos+=8,t},readSFixed64:function(){var t=_(this.buf,this.pos)+4294967296*w(this.buf,this.pos+4);return this.pos+=8,t},readFloat:function(){var t=E.read(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=E.read(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,r,n=this.buf;return r=n[this.pos++],e=127&r,r<128?e:(r=n[this.pos++],e|=(127&r)<<7,r<128?e:(r=n[this.pos++],e|=(127&r)<<14,r<128?e:(r=n[this.pos++],e|=(127&r)<<21,r<128?e:(r=n[this.pos],e|=(15&r)<<28,i(e,t,this)))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=S(this.buf,this.pos,t);return this.pos=t,e},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){var r=o(this);for(t=t||[];this.pos<r;)t.push(this.readVarint(e));return t},readPackedSVarint:function(t){var e=o(this);for(t=t||[];this.pos<e;)t.push(this.readSVarint());return t},readPackedBoolean:function(t){var e=o(this);for(t=t||[];this.pos<e;)t.push(this.readBoolean());return t},readPackedFloat:function(t){var e=o(this);for(t=t||[];this.pos<e;)t.push(this.readFloat());return t},readPackedDouble:function(t){var e=o(this);for(t=t||[];this.pos<e;)t.push(this.readDouble());return t},readPackedFixed32:function(t){var e=o(this);for(t=t||[];this.pos<e;)t.push(this.readFixed32());return t},readPackedSFixed32:function(t){var e=o(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed32());return t},readPackedFixed64:function(t){var e=o(this);for(t=t||[];this.pos<e;)t.push(this.readFixed64());return t},readPackedSFixed64:function(t){var e=o(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed64());return t},skip:function(t){var e=7&t;if(e===n.Varint)for(;this.buf[this.pos++]>127;);else if(e===n.Bytes)this.pos=this.readVarint()+this.pos;else if(e===n.Fixed32)this.pos+=4;else{if(e!==n.Fixed64)throw new Error("Unimplemented type: "+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e<this.pos+t;)e*=2;if(e!==this.length){var r=new Uint8Array(e);r.set(this.buf),this.buf=r,this.length=e}},finish:function(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)},writeFixed32:function(t){this.realloc(4),x(this.buf,t,this.pos),this.pos+=4},writeSFixed32:function(t){this.realloc(4),x(this.buf,t,this.pos),this.pos+=4},writeFixed64:function(t){this.realloc(8),x(this.buf,t&-1,this.pos),x(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8},writeSFixed64:function(t){this.realloc(8),x(this.buf,t&-1,this.pos),x(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8},writeVarint:function(t){if((t=+t||0)>268435455||t<0)return void s(t,this);this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127)))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=M(this.buf,t,this.pos);var r=this.pos-e;r>=128&&h(e,r,this),this.pos=e-1,this.writeVarint(r),this.pos+=r},writeFloat:function(t){this.realloc(4),E.write(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),E.write(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var r=0;r<e;r++)this.buf[this.pos++]=t[r]},writeRawMessage:function(t,e){this.pos++;var r=this.pos;t(e,this);var n=this.pos-r;n>=128&&h(r,n,this),this.pos=r-1,this.writeVarint(n),this.pos+=n},writeMessage:function(t,e,r){this.writeTag(t,n.Bytes),this.writeRawMessage(e,r)},writePackedVarint:function(t,e){this.writeMessage(t,l,e)},writePackedSVarint:function(t,e){this.writeMessage(t,p,e)},writePackedBoolean:function(t,e){this.writeMessage(t,m,e)},writePackedFloat:function(t,e){this.writeMessage(t,f,e)},writePackedDouble:function(t,e){this.writeMessage(t,d,e)},writePackedFixed32:function(t,e){this.writeMessage(t,v,e)},writePackedSFixed32:function(t,e){this.writeMessage(t,g,e)},writePackedFixed64:function(t,e){this.writeMessage(t,y,e)},writePackedSFixed64:function(t,e){this.writeMessage(t,b,e)},writeBytesField:function(t,e){this.writeTag(t,n.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,n.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,n.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,n.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,n.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,n.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,n.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,n.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,n.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,n.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}}},{ieee754:15}],23:[function(t,e,r){"use strict";function n(t,e,r,a,s){for(r=r||0,a=a||t.length-1,s=s||o;a>r;){if(a-r>600){var c=a-r+1,u=e-r+1,h=Math.log(c),l=.5*Math.exp(2*h/3),p=.5*Math.sqrt(h*l*(c-l)/c)*(u-c/2<0?-1:1);n(t,e,Math.max(r,Math.floor(e-u*l/c+p)),Math.min(a,Math.floor(e+(c-u)*l/c+p)),s)}var f=t[e],d=r,m=a;for(i(t,r,e),s(t[a],f)>0&&i(t,r,a);d<m;){for(i(t,d,m),d++,m--;s(t[d],f)<0;)d++;for(;s(t[m],f)>0;)m--}0===s(t[r],f)?i(t,r,m):(m++,i(t,m,a)),m<=e&&(r=m+1),e<=m&&(a=m-1)}}function i(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function o(t,e){return t<e?-1:t>e?1:0}e.exports=n},{}],24:[function(t,e,r){"use strict";function n(t,e){if(!(this instanceof n))return new n(t,e);this._maxEntries=Math.max(4,t||9),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),e&&this._initFormat(e),this.clear()}function i(t,e,r){if(!r)return e.indexOf(t);for(var n=0;n<e.length;n++)if(r(t,e[n]))return n;return-1}function o(t,e){a(t,0,t.children.length,e,t)}function a(t,e,r,n,i){i||(i=v(null)),i.minX=1/0,i.minY=1/0,i.maxX=-(1/0),i.maxY=-(1/0);for(var o,a=e;a<r;a++)o=t.children[a],s(i,t.leaf?n(o):o);return i}function s(t,e){return t.minX=Math.min(t.minX,e.minX),t.minY=Math.min(t.minY,e.minY),t.maxX=Math.max(t.maxX,e.maxX),t.maxY=Math.max(t.maxY,e.maxY),t}function c(t,e){return t.minX-e.minX}function u(t,e){return t.minY-e.minY}function h(t){return(t.maxX-t.minX)*(t.maxY-t.minY)}function l(t){return t.maxX-t.minX+(t.maxY-t.minY)}function p(t,e){return(Math.max(e.maxX,t.maxX)-Math.min(e.minX,t.minX))*(Math.max(e.maxY,t.maxY)-Math.min(e.minY,t.minY))}function f(t,e){var r=Math.max(t.minX,e.minX),n=Math.max(t.minY,e.minY),i=Math.min(t.maxX,e.maxX),o=Math.min(t.maxY,e.maxY);return Math.max(0,i-r)*Math.max(0,o-n)}function d(t,e){return t.minX<=e.minX&&t.minY<=e.minY&&e.maxX<=t.maxX&&e.maxY<=t.maxY}function m(t,e){return e.minX<=t.maxX&&e.minY<=t.maxY&&e.maxX>=t.minX&&e.maxY>=t.minY}function v(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-(1/0),maxY:-(1/0)}}function g(t,e,r,n,i){for(var o,a=[e,r];a.length;)r=a.pop(),e=a.pop(),r-e<=n||(o=e+Math.ceil((r-e)/n/2)*n,y(t,o,e,r,i),a.push(e,o,o,r))}e.exports=n;var y=t("quickselect");n.prototype={all:function(){return this._all(this.data,[])},search:function(t){var e=this.data,r=[],n=this.toBBox;if(!m(t,e))return r;for(var i,o,a,s,c=[];e;){for(i=0,o=e.children.length;i<o;i++)a=e.children[i],s=e.leaf?n(a):a,m(t,s)&&(e.leaf?r.push(a):d(t,s)?this._all(a,r):c.push(a));e=c.pop()}return r},collides:function(t){var e=this.data,r=this.toBBox;if(!m(t,e))return!1;for(var n,i,o,a,s=[];e;){for(n=0,i=e.children.length;n<i;n++)if(o=e.children[n],a=e.leaf?r(o):o,m(t,a)){if(e.leaf||d(t,a))return!0;s.push(o)}e=s.pop()}return!1},load:function(t){if(!t||!t.length)return this;if(t.length<this._minEntries){for(var e=0,r=t.length;e<r;e++)this.insert(t[e]);return this}var n=this._build(t.slice(),0,t.length-1,0);if(this.data.children.length)if(this.data.height===n.height)this._splitRoot(this.data,n);else{if(this.data.height<n.height){var i=this.data;this.data=n,n=i}this._insert(n,this.data.height-n.height-1,!0)}else this.data=n;return this},insert:function(t){return t&&this._insert(t,this.data.height-1),this},clear:function(){return this.data=v([]),this},remove:function(t,e){if(!t)return this;for(var r,n,o,a,s=this.data,c=this.toBBox(t),u=[],h=[];s||u.length;){if(s||(s=u.pop(),n=u[u.length-1],r=h.pop(),a=!0),s.leaf&&(o=i(t,s.children,e))!==-1)return s.children.splice(o,1),u.push(s),this._condense(u),this;a||s.leaf||!d(s,c)?n?(r++,s=n.children[r],a=!1):s=null:(u.push(s),h.push(r),r=0,n=s,s=s.children[0])}return this},toBBox:function(t){return t},compareMinX:c,compareMinY:u,toJSON:function(){return this.data},fromJSON:function(t){return this.data=t,this},_all:function(t,e){for(var r=[];t;)t.leaf?e.push.apply(e,t.children):r.push.apply(r,t.children),t=r.pop();return e},_build:function(t,e,r,n){var i,a=r-e+1,s=this._maxEntries;if(a<=s)return i=v(t.slice(e,r+1)),o(i,this.toBBox),i;n||(n=Math.ceil(Math.log(a)/Math.log(s)),s=Math.ceil(a/Math.pow(s,n-1))),i=v([]),i.leaf=!1,i.height=n;var c,u,h,l,p=Math.ceil(a/s),f=p*Math.ceil(Math.sqrt(s));for(g(t,e,r,f,this.compareMinX),c=e;c<=r;c+=f)for(h=Math.min(c+f-1,r),g(t,c,h,p,this.compareMinY),u=c;u<=h;u+=p)l=Math.min(u+p-1,h),i.children.push(this._build(t,u,l,n-1));return o(i,this.toBBox),i},_chooseSubtree:function(t,e,r,n){for(var i,o,a,s,c,u,l,f;;){if(n.push(e),e.leaf||n.length-1===r)break;for(l=f=1/0,i=0,o=e.children.length;i<o;i++)a=e.children[i],c=h(a),u=p(t,a)-c,u<f?(f=u,l=c<l?c:l,s=a):u===f&&c<l&&(l=c,s=a);e=s||e.children[0]}return e},_insert:function(t,e,r){var n=this.toBBox,i=r?t:n(t),o=[],a=this._chooseSubtree(i,this.data,e,o);for(a.children.push(t),s(a,i);e>=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(i,o,e)},_split:function(t,e){var r=t[e],n=r.children.length,i=this._minEntries;this._chooseSplitAxis(r,i,n);var a=this._chooseSplitIndex(r,i,n),s=v(r.children.splice(a,r.children.length-a));s.height=r.height,s.leaf=r.leaf,o(r,this.toBBox),o(s,this.toBBox),e?t[e-1].children.push(s):this._splitRoot(r,s)},_splitRoot:function(t,e){this.data=v([t,e]),this.data.height=t.height+1,this.data.leaf=!1,o(this.data,this.toBBox)},_chooseSplitIndex:function(t,e,r){var n,i,o,s,c,u,l,p;for(u=l=1/0,n=e;n<=r-e;n++)i=a(t,0,n,this.toBBox),o=a(t,n,r,this.toBBox),s=f(i,o),c=h(i)+h(o),s<u?(u=s,p=n,l=c<l?c:l):s===u&&c<l&&(l=c,p=n);return p},_chooseSplitAxis:function(t,e,r){var n=t.leaf?this.compareMinX:c,i=t.leaf?this.compareMinY:u;this._allDistMargin(t,e,r,n)<this._allDistMargin(t,e,r,i)&&t.children.sort(n)},_allDistMargin:function(t,e,r,n){t.children.sort(n);var i,o,c=this.toBBox,u=a(t,0,e,c),h=a(t,r-e,r,c),p=l(u)+l(h);for(i=e;i<r-e;i++)o=t.children[i],s(u,t.leaf?c(o):o),p+=l(u);for(i=r-e-1;i>=e;i--)o=t.children[i],s(h,t.leaf?c(o):o),p+=l(h);return p},_adjustParentBBoxes:function(t,e,r){for(var n=r;n>=0;n--)s(e[n],t)},_condense:function(t){for(var e,r=t.length-1;r>=0;r--)0===t[r].children.length?r>0?(e=t[r-1].children,e.splice(e.indexOf(t[r]),1)):this.clear():o(t[r],this.toBBox)},_initFormat:function(t){var e=["return a"," - b",";"];this.compareMinX=new Function("a","b",e.join(t[0])),this.compareMinY=new Function("a","b",e.join(t[1])),this.toBBox=new Function("a","return {minX: a"+t[0]+", minY: a"+t[1]+", maxX: a"+t[2]+", maxY: a"+t[3]+"};")}}},{quickselect:23}],25:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./Subject"),o=t("./util/ObjectUnsubscribedError"),a=function(t){function e(e){t.call(this),this._value=e}return n(e,t),Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!0,configurable:!0}),e.prototype._subscribe=function(e){var r=t.prototype._subscribe.call(this,e);return r&&!r.closed&&e.next(this._value),r},e.prototype.getValue=function(){if(this.hasError)throw this.thrownError;if(this.closed)throw new o.ObjectUnsubscribedError;return this._value},e.prototype.next=function(e){t.prototype.next.call(this,this._value=e)},e}(i.Subject);r.BehaviorSubject=a},{"./Subject":33,"./util/ObjectUnsubscribedError":158}],26:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./Subscriber"),o=function(t){function e(e,r,n){t.call(this),this.parent=e,this.outerValue=r,this.outerIndex=n,this.index=0}return n(e,t),e.prototype._next=function(t){this.parent.notifyNext(this.outerValue,t,this.outerIndex,this.index++,this)},e.prototype._error=function(t){this.parent.notifyError(t,this),this.unsubscribe()},e.prototype._complete=function(){this.parent.notifyComplete(this),this.unsubscribe()},e}(i.Subscriber);r.InnerSubscriber=o},{"./Subscriber":35}],27:[function(t,e,r){"use strict";var n=t("./Observable"),i=function(){function t(t,e,r){this.kind=t,this.value=e,this.error=r,this.hasValue="N"===t}return t.prototype.observe=function(t){switch(this.kind){case"N":return t.next&&t.next(this.value);case"E":return t.error&&t.error(this.error);case"C":return t.complete&&t.complete()}},t.prototype.do=function(t,e,r){switch(this.kind){case"N":return t&&t(this.value);case"E":return e&&e(this.error);case"C":return r&&r()}},t.prototype.accept=function(t,e,r){return t&&"function"==typeof t.next?this.observe(t):this.do(t,e,r)},t.prototype.toObservable=function(){switch(this.kind){case"N":return n.Observable.of(this.value);case"E":return n.Observable.throw(this.error);case"C":return n.Observable.empty()}throw new Error("unexpected notification kind value")},t.createNext=function(e){return void 0!==e?new t("N",e):this.undefinedValueNotification},t.createError=function(e){return new t("E",void 0,e)},t.createComplete=function(){return this.completeNotification},t.completeNotification=new t("C"),t.undefinedValueNotification=new t("N",void 0),t}();r.Notification=i},{"./Observable":28}],28:[function(t,e,r){"use strict";var n=t("./util/root"),i=t("./util/toSubscriber"),o=t("./symbol/observable"),a=function(){function t(t){this._isScalar=!1,t&&(this._subscribe=t)}return t.prototype.lift=function(e){var r=new t;return r.source=this,r.operator=e,r},t.prototype.subscribe=function(t,e,r){var n=this.operator,o=i.toSubscriber(t,e,r);if(n?n.call(o,this.source):o.add(this._trySubscribe(o)),o.syncErrorThrowable&&(o.syncErrorThrowable=!1,o.syncErrorThrown))throw o.syncErrorValue;return o},t.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(e){t.syncErrorThrown=!0,t.syncErrorValue=e,t.error(e)}},t.prototype.forEach=function(t,e){var r=this;if(e||(n.root.Rx&&n.root.Rx.config&&n.root.Rx.config.Promise?e=n.root.Rx.config.Promise:n.root.Promise&&(e=n.root.Promise)),!e)throw new Error("no Promise impl found");return new e(function(e,n){var i=r.subscribe(function(e){if(i)try{t(e)}catch(t){n(t),i.unsubscribe()}else t(e)},n,e)})},t.prototype._subscribe=function(t){return this.source.subscribe(t)},t.prototype[o.$$observable]=function(){return this},t.create=function(e){return new t(e)},t}();r.Observable=a},{"./symbol/observable":153,"./util/root":170,"./util/toSubscriber":172}],29:[function(t,e,r){"use strict";r.empty={closed:!0,next:function(t){},error:function(t){throw t},complete:function(){}}},{}],30:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./Subscriber"),o=function(t){function e(){t.apply(this,arguments)}return n(e,t),e.prototype.notifyNext=function(t,e,r,n,i){this.destination.next(e)},e.prototype.notifyError=function(t,e){this.destination.error(t)},e.prototype.notifyComplete=function(t){this.destination.complete()},e}(i.Subscriber);r.OuterSubscriber=o},{"./Subscriber":35}],31:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./Subject"),o=t("./scheduler/queue"),a=t("./Subscription"),s=t("./operator/observeOn"),c=t("./util/ObjectUnsubscribedError"),u=t("./SubjectSubscription"),h=function(t){function e(e,r,n){void 0===e&&(e=Number.POSITIVE_INFINITY),void 0===r&&(r=Number.POSITIVE_INFINITY),t.call(this),this.scheduler=n,this._events=[],this._bufferSize=e<1?1:e,this._windowTime=r<1?1:r}return n(e,t),e.prototype.next=function(e){var r=this._getNow();this._events.push(new l(r,e)),this._trimBufferThenGetEvents(),t.prototype.next.call(this,e)},e.prototype._subscribe=function(t){var e,r=this._trimBufferThenGetEvents(),n=this.scheduler;if(this.closed)throw new c.ObjectUnsubscribedError;this.hasError?e=a.Subscription.EMPTY:this.isStopped?e=a.Subscription.EMPTY:(this.observers.push(t),e=new u.SubjectSubscription(this,t)),n&&t.add(t=new s.ObserveOnSubscriber(t,n));for(var i=r.length,o=0;o<i&&!t.closed;o++)t.next(r[o].value);return this.hasError?t.error(this.thrownError):this.isStopped&&t.complete(),e},e.prototype._getNow=function(){return(this.scheduler||o.queue).now()},e.prototype._trimBufferThenGetEvents=function(){for(var t=this._getNow(),e=this._bufferSize,r=this._windowTime,n=this._events,i=n.length,o=0;o<i&&!(t-n[o].time<r);)o++;return i>e&&(o=Math.max(o,i-e)),o>0&&n.splice(0,o),n},e}(i.Subject);r.ReplaySubject=h;var l=function(){function t(t,e){this.time=t,this.value=e}return t}()},{"./Subject":33,"./SubjectSubscription":34,"./Subscription":36,"./operator/observeOn":128,"./scheduler/queue":151,"./util/ObjectUnsubscribedError":158}],32:[function(t,e,r){"use strict";var n=function(){function t(e,r){void 0===r&&(r=t.now),this.SchedulerAction=e,this.now=r}return t.prototype.schedule=function(t,e,r){return void 0===e&&(e=0),new this.SchedulerAction(this,t).schedule(r,e)},t.now=Date.now?Date.now:function(){return+new Date},t}();r.Scheduler=n},{}],33:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./Observable"),o=t("./Subscriber"),a=t("./Subscription"),s=t("./util/ObjectUnsubscribedError"),c=t("./SubjectSubscription"),u=t("./symbol/rxSubscriber"),h=function(t){function e(e){t.call(this,e),this.destination=e}return n(e,t),e}(o.Subscriber);r.SubjectSubscriber=h;var l=function(t){function e(){t.call(this),this.observers=[],this.closed=!1,this.isStopped=!1,this.hasError=!1,this.thrownError=null}return n(e,t),e.prototype[u.$$rxSubscriber]=function(){return new h(this)},e.prototype.lift=function(t){var e=new p(this,this);return e.operator=t,e},e.prototype.next=function(t){if(this.closed)throw new s.ObjectUnsubscribedError;if(!this.isStopped)for(var e=this.observers,r=e.length,n=e.slice(),i=0;i<r;i++)n[i].next(t)},e.prototype.error=function(t){if(this.closed)throw new s.ObjectUnsubscribedError;this.hasError=!0,this.thrownError=t,this.isStopped=!0;for(var e=this.observers,r=e.length,n=e.slice(),i=0;i<r;i++)n[i].error(t);this.observers.length=0},e.prototype.complete=function(){if(this.closed)throw new s.ObjectUnsubscribedError;this.isStopped=!0;for(var t=this.observers,e=t.length,r=t.slice(),n=0;n<e;n++)r[n].complete();this.observers.length=0},e.prototype.unsubscribe=function(){this.isStopped=!0,this.closed=!0,this.observers=null},e.prototype._trySubscribe=function(e){if(this.closed)throw new s.ObjectUnsubscribedError;return t.prototype._trySubscribe.call(this,e)},e.prototype._subscribe=function(t){if(this.closed)throw new s.ObjectUnsubscribedError;return this.hasError?(t.error(this.thrownError),a.Subscription.EMPTY):this.isStopped?(t.complete(),a.Subscription.EMPTY):(this.observers.push(t),new c.SubjectSubscription(this,t))},e.prototype.asObservable=function(){var t=new i.Observable;return t.source=this,t},e.create=function(t,e){return new p(t,e)},e}(i.Observable);r.Subject=l;var p=function(t){function e(e,r){t.call(this),this.destination=e,this.source=r}return n(e,t),e.prototype.next=function(t){var e=this.destination;e&&e.next&&e.next(t)},e.prototype.error=function(t){var e=this.destination;e&&e.error&&this.destination.error(t)},e.prototype.complete=function(){var t=this.destination;t&&t.complete&&this.destination.complete()},e.prototype._subscribe=function(t){return this.source?this.source.subscribe(t):a.Subscription.EMPTY},e}(l);r.AnonymousSubject=p},{"./Observable":28,"./SubjectSubscription":34,"./Subscriber":35,"./Subscription":36,"./symbol/rxSubscriber":154,"./util/ObjectUnsubscribedError":158}],34:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./Subscription"),o=function(t){function e(e,r){t.call(this),this.subject=e,this.subscriber=r,this.closed=!1}return n(e,t),e.prototype.unsubscribe=function(){if(!this.closed){this.closed=!0;var t=this.subject,e=t.observers;if(this.subject=null,e&&0!==e.length&&!t.isStopped&&!t.closed){var r=e.indexOf(this.subscriber);r!==-1&&e.splice(r,1)}}},e}(i.Subscription);r.SubjectSubscription=o},{"./Subscription":36}],35:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./util/isFunction"),o=t("./Subscription"),a=t("./Observer"),s=t("./symbol/rxSubscriber"),c=function(t){function e(r,n,i){switch(t.call(this),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=a.empty;break;case 1:if(!r){this.destination=a.empty;break}if("object"==typeof r){r instanceof e?(this.destination=r,this.destination.add(this)):(this.syncErrorThrowable=!0,this.destination=new u(this,r));break}default:this.syncErrorThrowable=!0,this.destination=new u(this,r,n,i)}}return n(e,t),e.prototype[s.$$rxSubscriber]=function(){return this},e.create=function(t,r,n){var i=new e(t,r,n);return i.syncErrorThrowable=!1,i},e.prototype.next=function(t){this.isStopped||this._next(t)},e.prototype.error=function(t){this.isStopped||(this.isStopped=!0,this._error(t))},e.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},e.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,t.prototype.unsubscribe.call(this))},e.prototype._next=function(t){this.destination.next(t)},e.prototype._error=function(t){this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},e.prototype._unsubscribeAndRecycle=function(){var t=this,e=t._parent,r=t._parents;return this._parent=null,this._parents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parent=e,this._parents=r,this},e}(o.Subscription);r.Subscriber=c;var u=function(t){function e(e,r,n,o){t.call(this),this._parentSubscriber=e;var a,s=this;i.isFunction(r)?a=r:r&&(s=r,a=r.next,n=r.error,o=r.complete,i.isFunction(s.unsubscribe)&&this.add(s.unsubscribe.bind(s)),s.unsubscribe=this.unsubscribe.bind(this)),this._context=s,this._next=a,this._error=n,this._complete=o}return n(e,t),e.prototype.next=function(t){if(!this.isStopped&&this._next){var e=this._parentSubscriber;e.syncErrorThrowable?this.__tryOrSetError(e,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}},e.prototype.error=function(t){if(!this.isStopped){var e=this._parentSubscriber;if(this._error)e.syncErrorThrowable?(this.__tryOrSetError(e,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else{if(!e.syncErrorThrowable)throw this.unsubscribe(),t;e.syncErrorValue=t,e.syncErrorThrown=!0,this.unsubscribe()}}},e.prototype.complete=function(){if(!this.isStopped){var t=this._parentSubscriber;this._complete?t.syncErrorThrowable?(this.__tryOrSetError(t,this._complete),this.unsubscribe()):(this.__tryOrUnsub(this._complete),this.unsubscribe()):this.unsubscribe()}},e.prototype.__tryOrUnsub=function(t,e){try{t.call(this._context,e)}catch(t){throw this.unsubscribe(),t}},e.prototype.__tryOrSetError=function(t,e,r){try{e.call(this._context,r)}catch(e){return t.syncErrorValue=e,t.syncErrorThrown=!0,!0}return!1},e.prototype._unsubscribe=function(){var t=this._parentSubscriber;this._context=null,this._parentSubscriber=null,t.unsubscribe()},e}(c)},{"./Observer":29,"./Subscription":36,"./symbol/rxSubscriber":154,"./util/isFunction":165}],36:[function(t,e,r){"use strict";function n(t){return t.reduce(function(t,e){return t.concat(e instanceof u.UnsubscriptionError?e.errors:e)},[])}var i=t("./util/isArray"),o=t("./util/isObject"),a=t("./util/isFunction"),s=t("./util/tryCatch"),c=t("./util/errorObject"),u=t("./util/UnsubscriptionError"),h=function(){function t(t){this.closed=!1,this._parent=null,this._parents=null,this._subscriptions=null,t&&(this._unsubscribe=t)}return t.prototype.unsubscribe=function(){var t,e=!1;if(!this.closed){var r=this,h=r._parent,l=r._parents,p=r._unsubscribe,f=r._subscriptions;this.closed=!0,this._parent=null,this._parents=null,this._subscriptions=null;for(var d=-1,m=l?l.length:0;h;)h.remove(this),h=++d<m&&l[d]||null;if(a.isFunction(p)){var v=s.tryCatch(p).call(this);v===c.errorObject&&(e=!0,t=t||(c.errorObject.e instanceof u.UnsubscriptionError?n(c.errorObject.e.errors):[c.errorObject.e]))}if(i.isArray(f))for(d=-1,m=f.length;++d<m;){var g=f[d];if(o.isObject(g)){var v=s.tryCatch(g.unsubscribe).call(g);if(v===c.errorObject){e=!0,t=t||[];var y=c.errorObject.e;y instanceof u.UnsubscriptionError?t=t.concat(n(y.errors)):t.push(y)}}}if(e)throw new u.UnsubscriptionError(t)}},t.prototype.add=function(e){if(!e||e===t.EMPTY)return t.EMPTY;if(e===this)return this;var r=e;switch(typeof e){case"function":r=new t(e);case"object":if(r.closed||"function"!=typeof r.unsubscribe)return r;if(this.closed)return r.unsubscribe(),r;if("function"!=typeof r._addParent){var n=r;r=new t,r._subscriptions=[n]}break;default:throw new Error("unrecognized teardown "+e+" added to Subscription.")}return(this._subscriptions||(this._subscriptions=[])).push(r),r._addParent(this),r},t.prototype.remove=function(t){var e=this._subscriptions;if(e){var r=e.indexOf(t);r!==-1&&e.splice(r,1)}},t.prototype._addParent=function(t){var e=this,r=e._parent,n=e._parents;r&&r!==t?n?n.indexOf(t)===-1&&n.push(t):this._parents=[t]:this._parent=t},t.EMPTY=function(t){return t.closed=!0,t}(new t),t}();r.Subscription=h},{"./util/UnsubscriptionError":160,"./util/errorObject":161,"./util/isArray":162,"./util/isFunction":165,"./util/isObject":167,"./util/tryCatch":173}],37:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/combineLatest");n.Observable.combineLatest=i.combineLatest},{"../../Observable":28,"../../observable/combineLatest":96}],38:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/defer");n.Observable.defer=i.defer},{"../../Observable":28,"../../observable/defer":97}],39:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/empty");n.Observable.empty=i.empty},{"../../Observable":28,"../../observable/empty":98}],40:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/from");n.Observable.from=i.from},{"../../Observable":28,"../../observable/from":99}],41:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/fromEvent");n.Observable.fromEvent=i.fromEvent},{"../../Observable":28,"../../observable/fromEvent":100}],42:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/fromPromise");n.Observable.fromPromise=i.fromPromise},{"../../Observable":28,"../../observable/fromPromise":101}],43:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/merge");n.Observable.merge=i.merge},{"../../Observable":28,"../../observable/merge":102}],44:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/of");n.Observable.of=i.of},{"../../Observable":28,"../../observable/of":103}],45:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/throw");n.Observable.throw=i._throw},{"../../Observable":28,"../../observable/throw":104}],46:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/timer");n.Observable.timer=i.timer},{"../../Observable":28,"../../observable/timer":105}],47:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/zip");n.Observable.zip=i.zip},{"../../Observable":28,"../../observable/zip":106}],48:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/buffer");n.Observable.prototype.buffer=i.buffer},{"../../Observable":28,"../../operator/buffer":107}],49:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/bufferCount");n.Observable.prototype.bufferCount=i.bufferCount},{"../../Observable":28,"../../operator/bufferCount":108}],50:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/bufferWhen");n.Observable.prototype.bufferWhen=i.bufferWhen},{"../../Observable":28,"../../operator/bufferWhen":109}],51:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/catch");n.Observable.prototype.catch=i._catch,n.Observable.prototype._catch=i._catch},{"../../Observable":28,
-"../../operator/catch":110}],52:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/combineLatest");n.Observable.prototype.combineLatest=i.combineLatest},{"../../Observable":28,"../../operator/combineLatest":111}],53:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/concat");n.Observable.prototype.concat=i.concat},{"../../Observable":28,"../../operator/concat":112}],54:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/debounceTime");n.Observable.prototype.debounceTime=i.debounceTime},{"../../Observable":28,"../../operator/debounceTime":113}],55:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/delay");n.Observable.prototype.delay=i.delay},{"../../Observable":28,"../../operator/delay":114}],56:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/distinct");n.Observable.prototype.distinct=i.distinct},{"../../Observable":28,"../../operator/distinct":115}],57:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/distinctUntilChanged");n.Observable.prototype.distinctUntilChanged=i.distinctUntilChanged},{"../../Observable":28,"../../operator/distinctUntilChanged":116}],58:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/do");n.Observable.prototype.do=i._do,n.Observable.prototype._do=i._do},{"../../Observable":28,"../../operator/do":117}],59:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/expand");n.Observable.prototype.expand=i.expand},{"../../Observable":28,"../../operator/expand":118}],60:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/filter");n.Observable.prototype.filter=i.filter},{"../../Observable":28,"../../operator/filter":119}],61:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/finally");n.Observable.prototype.finally=i._finally,n.Observable.prototype._finally=i._finally},{"../../Observable":28,"../../operator/finally":120}],62:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/first");n.Observable.prototype.first=i.first},{"../../Observable":28,"../../operator/first":121}],63:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/last");n.Observable.prototype.last=i.last},{"../../Observable":28,"../../operator/last":122}],64:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/map");n.Observable.prototype.map=i.map},{"../../Observable":28,"../../operator/map":123}],65:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/merge");n.Observable.prototype.merge=i.merge},{"../../Observable":28,"../../operator/merge":124}],66:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/mergeAll");n.Observable.prototype.mergeAll=i.mergeAll},{"../../Observable":28,"../../operator/mergeAll":125}],67:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/mergeMap");n.Observable.prototype.mergeMap=i.mergeMap,n.Observable.prototype.flatMap=i.mergeMap},{"../../Observable":28,"../../operator/mergeMap":126}],68:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/pairwise");n.Observable.prototype.pairwise=i.pairwise},{"../../Observable":28,"../../operator/pairwise":129}],69:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/pluck");n.Observable.prototype.pluck=i.pluck},{"../../Observable":28,"../../operator/pluck":130}],70:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/publish");n.Observable.prototype.publish=i.publish},{"../../Observable":28,"../../operator/publish":131}],71:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/publishReplay");n.Observable.prototype.publishReplay=i.publishReplay},{"../../Observable":28,"../../operator/publishReplay":132}],72:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/scan");n.Observable.prototype.scan=i.scan},{"../../Observable":28,"../../operator/scan":133}],73:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/share");n.Observable.prototype.share=i.share},{"../../Observable":28,"../../operator/share":134}],74:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/skip");n.Observable.prototype.skip=i.skip},{"../../Observable":28,"../../operator/skip":135}],75:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/skipUntil");n.Observable.prototype.skipUntil=i.skipUntil},{"../../Observable":28,"../../operator/skipUntil":136}],76:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/skipWhile");n.Observable.prototype.skipWhile=i.skipWhile},{"../../Observable":28,"../../operator/skipWhile":137}],77:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/startWith");n.Observable.prototype.startWith=i.startWith},{"../../Observable":28,"../../operator/startWith":138}],78:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/switchMap");n.Observable.prototype.switchMap=i.switchMap},{"../../Observable":28,"../../operator/switchMap":139}],79:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/take");n.Observable.prototype.take=i.take},{"../../Observable":28,"../../operator/take":140}],80:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/takeUntil");n.Observable.prototype.takeUntil=i.takeUntil},{"../../Observable":28,"../../operator/takeUntil":141}],81:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/throttleTime");n.Observable.prototype.throttleTime=i.throttleTime},{"../../Observable":28,"../../operator/throttleTime":142}],82:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/withLatestFrom");n.Observable.prototype.withLatestFrom=i.withLatestFrom},{"../../Observable":28,"../../operator/withLatestFrom":143}],83:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/zip");n.Observable.prototype.zip=i.zipProto},{"../../Observable":28,"../../operator/zip":144}],84:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Observable"),o=t("./ScalarObservable"),a=t("./EmptyObservable"),s=function(t){function e(e,r){t.call(this),this.arrayLike=e,this.scheduler=r,r||1!==e.length||(this._isScalar=!0,this.value=e[0])}return n(e,t),e.create=function(t,r){var n=t.length;return 0===n?new a.EmptyObservable:1===n?new o.ScalarObservable(t[0],r):new e(t,r)},e.dispatch=function(t){var e=t.arrayLike,r=t.index,n=t.length,i=t.subscriber;if(!i.closed){if(r>=n)return void i.complete();i.next(e[r]),t.index=r+1,this.schedule(t)}},e.prototype._subscribe=function(t){var r=this,n=r.arrayLike,i=r.scheduler,o=n.length;if(i)return i.schedule(e.dispatch,0,{arrayLike:n,index:0,length:o,subscriber:t});for(var a=0;a<o&&!t.closed;a++)t.next(n[a]);t.complete()},e}(i.Observable);r.ArrayLikeObservable=s},{"../Observable":28,"./EmptyObservable":88,"./ScalarObservable":94}],85:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Observable"),o=t("./ScalarObservable"),a=t("./EmptyObservable"),s=t("../util/isScheduler"),c=function(t){function e(e,r){t.call(this),this.array=e,this.scheduler=r,r||1!==e.length||(this._isScalar=!0,this.value=e[0])}return n(e,t),e.create=function(t,r){return new e(t,r)},e.of=function(){for(var t=[],r=0;r<arguments.length;r++)t[r-0]=arguments[r];var n=t[t.length-1];s.isScheduler(n)?t.pop():n=null;var i=t.length;return i>1?new e(t,n):1===i?new o.ScalarObservable(t[0],n):new a.EmptyObservable(n)},e.dispatch=function(t){var e=t.array,r=t.index,n=t.count,i=t.subscriber;if(r>=n)return void i.complete();i.next(e[r]),i.closed||(t.index=r+1,this.schedule(t))},e.prototype._subscribe=function(t){var r=this.array,n=r.length,i=this.scheduler;if(i)return i.schedule(e.dispatch,0,{array:r,index:0,count:n,subscriber:t});for(var o=0;o<n&&!t.closed;o++)t.next(r[o]);t.complete()},e}(i.Observable);r.ArrayObservable=c},{"../Observable":28,"../util/isScheduler":169,"./EmptyObservable":88,"./ScalarObservable":94}],86:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Subject"),o=t("../Observable"),a=t("../Subscriber"),s=t("../Subscription"),c=function(t){function e(e,r){t.call(this),this.source=e,this.subjectFactory=r,this._refCount=0}return n(e,t),e.prototype._subscribe=function(t){return this.getSubject().subscribe(t)},e.prototype.getSubject=function(){var t=this._subject;return t&&!t.isStopped||(this._subject=this.subjectFactory()),this._subject},e.prototype.connect=function(){var t=this._connection;return t||(t=this._connection=new s.Subscription,t.add(this.source.subscribe(new u(this.getSubject(),this))),t.closed?(this._connection=null,t=s.Subscription.EMPTY):this._connection=t),t},e.prototype.refCount=function(){return this.lift(new h(this))},e}(o.Observable);r.ConnectableObservable=c,r.connectableObservableDescriptor={operator:{value:null},_refCount:{value:0,writable:!0},_subscribe:{value:c.prototype._subscribe},getSubject:{value:c.prototype.getSubject},connect:{value:c.prototype.connect},refCount:{value:c.prototype.refCount}};var u=function(t){function e(e,r){t.call(this,e),this.connectable=r}return n(e,t),e.prototype._error=function(e){this._unsubscribe(),t.prototype._error.call(this,e)},e.prototype._complete=function(){this._unsubscribe(),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){var t=this.connectable;if(t){this.connectable=null;var e=t._connection;t._refCount=0,t._subject=null,t._connection=null,e&&e.unsubscribe()}},e}(i.SubjectSubscriber),h=function(){function t(t){this.connectable=t}return t.prototype.call=function(t,e){var r=this.connectable;r._refCount++;var n=new l(t,r),i=e.subscribe(n);return n.closed||(n.connection=r.connect()),i},t}(),l=function(t){function e(e,r){t.call(this,e),this.connectable=r}return n(e,t),e.prototype._unsubscribe=function(){var t=this.connectable;if(!t)return void(this.connection=null);this.connectable=null;var e=t._refCount;if(e<=0)return void(this.connection=null);if(t._refCount=e-1,e>1)return void(this.connection=null);var r=this.connection,n=t._connection;this.connection=null,!n||r&&n!==r||n.unsubscribe()},e}(a.Subscriber)},{"../Observable":28,"../Subject":33,"../Subscriber":35,"../Subscription":36}],87:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Observable"),o=t("../util/subscribeToResult"),a=t("../OuterSubscriber"),s=function(t){function e(e){t.call(this),this.observableFactory=e}return n(e,t),e.create=function(t){return new e(t)},e.prototype._subscribe=function(t){return new c(t,this.observableFactory)},e}(i.Observable);r.DeferObservable=s;var c=function(t){function e(e,r){t.call(this,e),this.factory=r,this.tryDefer()}return n(e,t),e.prototype.tryDefer=function(){try{this._callFactory()}catch(t){this._error(t)}},e.prototype._callFactory=function(){var t=this.factory();t&&this.add(o.subscribeToResult(this,t))},e}(a.OuterSubscriber)},{"../Observable":28,"../OuterSubscriber":30,"../util/subscribeToResult":171}],88:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Observable"),o=function(t){function e(e){t.call(this),this.scheduler=e}return n(e,t),e.create=function(t){return new e(t)},e.dispatch=function(t){t.subscriber.complete()},e.prototype._subscribe=function(t){var r=this.scheduler;if(r)return r.schedule(e.dispatch,0,{subscriber:t});t.complete()},e}(i.Observable);r.EmptyObservable=o},{"../Observable":28}],89:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Observable"),o=function(t){function e(e,r){t.call(this),this.error=e,this.scheduler=r}return n(e,t),e.create=function(t,r){return new e(t,r)},e.dispatch=function(t){var e=t.error;t.subscriber.error(e)},e.prototype._subscribe=function(t){var r=this.error,n=this.scheduler;if(n)return n.schedule(e.dispatch,0,{error:r,subscriber:t});t.error(r)},e}(i.Observable);r.ErrorObservable=o},{"../Observable":28}],90:[function(t,e,r){"use strict";function n(t){return!!t&&"function"==typeof t.addListener&&"function"==typeof t.removeListener}function i(t){return!!t&&"function"==typeof t.on&&"function"==typeof t.off}function o(t){return!!t&&"[object NodeList]"===d.call(t)}function a(t){return!!t&&"[object HTMLCollection]"===d.call(t)}function s(t){return!!t&&"function"==typeof t.addEventListener&&"function"==typeof t.removeEventListener}var c=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},u=t("../Observable"),h=t("../util/tryCatch"),l=t("../util/isFunction"),p=t("../util/errorObject"),f=t("../Subscription"),d=Object.prototype.toString,m=function(t){function e(e,r,n,i){t.call(this),this.sourceObj=e,this.eventName=r,this.selector=n,this.options=i}return c(e,t),e.create=function(t,r,n,i){return l.isFunction(n)&&(i=n,n=void 0),new e(t,r,i,n)},e.setupSubscription=function(t,r,c,u,h){var l;if(o(t)||a(t))for(var p=0,d=t.length;p<d;p++)e.setupSubscription(t[p],r,c,u,h);else if(s(t)){var m=t;t.addEventListener(r,c,h),l=function(){return m.removeEventListener(r,c)}}else if(i(t)){var v=t;t.on(r,c),l=function(){return v.off(r,c)}}else{if(!n(t))throw new TypeError("Invalid event target");var g=t;t.addListener(r,c),l=function(){return g.removeListener(r,c)}}u.add(new f.Subscription(l))},e.prototype._subscribe=function(t){var r=this.sourceObj,n=this.eventName,i=this.options,o=this.selector,a=o?function(){for(var e=[],r=0;r<arguments.length;r++)e[r-0]=arguments[r];var n=h.tryCatch(o).apply(void 0,e);n===p.errorObject?t.error(p.errorObject.e):t.next(n)}:function(e){return t.next(e)};e.setupSubscription(r,n,a,t,i)},e}(u.Observable);r.FromEventObservable=m},{"../Observable":28,"../Subscription":36,"../util/errorObject":161,"../util/isFunction":165,"../util/tryCatch":173}],91:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../util/isArray"),o=t("../util/isArrayLike"),a=t("../util/isPromise"),s=t("./PromiseObservable"),c=t("./IteratorObservable"),u=t("./ArrayObservable"),h=t("./ArrayLikeObservable"),l=t("../symbol/iterator"),p=t("../Observable"),f=t("../operator/observeOn"),d=t("../symbol/observable"),m=function(t){function e(e,r){t.call(this,null),this.ish=e,this.scheduler=r}return n(e,t),e.create=function(t,r){if(null!=t){if("function"==typeof t[d.$$observable])return t instanceof p.Observable&&!r?t:new e(t,r);if(i.isArray(t))return new u.ArrayObservable(t,r);if(a.isPromise(t))return new s.PromiseObservable(t,r);if("function"==typeof t[l.$$iterator]||"string"==typeof t)return new c.IteratorObservable(t,r);if(o.isArrayLike(t))return new h.ArrayLikeObservable(t,r)}throw new TypeError((null!==t&&typeof t||t)+" is not observable")},e.prototype._subscribe=function(t){var e=this.ish,r=this.scheduler;return null==r?e[d.$$observable]().subscribe(t):e[d.$$observable]().subscribe(new f.ObserveOnSubscriber(t,r,0))},e}(p.Observable);r.FromObservable=m},{"../Observable":28,"../operator/observeOn":128,"../symbol/iterator":152,"../symbol/observable":153,"../util/isArray":162,"../util/isArrayLike":163,"../util/isPromise":168,"./ArrayLikeObservable":84,"./ArrayObservable":85,"./IteratorObservable":92,"./PromiseObservable":93}],92:[function(t,e,r){"use strict";function n(t){var e=t[h.$$iterator];if(!e&&"string"==typeof t)return new p(t);if(!e&&void 0!==t.length)return new f(t);if(!e)throw new TypeError("object is not iterable");return t[h.$$iterator]()}function i(t){var e=+t.length;return isNaN(e)?0:0!==e&&o(e)?(e=a(e)*Math.floor(Math.abs(e)),e<=0?0:e>d?d:e):e}function o(t){return"number"==typeof t&&c.root.isFinite(t)}function a(t){var e=+t;return 0===e?e:isNaN(e)?e:e<0?-1:1}var s=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},c=t("../util/root"),u=t("../Observable"),h=t("../symbol/iterator"),l=function(t){function e(e,r){if(t.call(this),this.scheduler=r,null==e)throw new Error("iterator cannot be null.");this.iterator=n(e)}return s(e,t),e.create=function(t,r){return new e(t,r)},e.dispatch=function(t){var e=t.index,r=t.hasError,n=t.iterator,i=t.subscriber;if(r)return void i.error(t.error);var o=n.next();return o.done?void i.complete():(i.next(o.value),t.index=e+1,i.closed?void("function"==typeof n.return&&n.return()):void this.schedule(t))},e.prototype._subscribe=function(t){var r=this,n=r.iterator,i=r.scheduler;if(i)return i.schedule(e.dispatch,0,{index:0,iterator:n,subscriber:t});for(;;){var o=n.next();if(o.done){t.complete();break}if(t.next(o.value),t.closed){"function"==typeof n.return&&n.return();break}}},e}(u.Observable);r.IteratorObservable=l;var p=function(){function t(t,e,r){void 0===e&&(e=0),void 0===r&&(r=t.length),this.str=t,this.idx=e,this.len=r}return t.prototype[h.$$iterator]=function(){return this},t.prototype.next=function(){return this.idx<this.len?{done:!1,value:this.str.charAt(this.idx++)}:{done:!0,value:void 0}},t}(),f=function(){function t(t,e,r){void 0===e&&(e=0),void 0===r&&(r=i(t)),this.arr=t,this.idx=e,this.len=r}return t.prototype[h.$$iterator]=function(){return this},t.prototype.next=function(){return this.idx<this.len?{done:!1,value:this.arr[this.idx++]}:{done:!0,value:void 0}},t}(),d=Math.pow(2,53)-1},{"../Observable":28,"../symbol/iterator":152,"../util/root":170}],93:[function(t,e,r){"use strict";function n(t){var e=t.value,r=t.subscriber;r.closed||(r.next(e),r.complete())}function i(t){var e=t.err,r=t.subscriber;r.closed||r.error(e)}var o=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},a=t("../util/root"),s=t("../Observable"),c=function(t){function e(e,r){t.call(this),this.promise=e,this.scheduler=r}return o(e,t),e.create=function(t,r){return new e(t,r)},e.prototype._subscribe=function(t){var e=this,r=this.promise,o=this.scheduler;if(null==o)this._isScalar?t.closed||(t.next(this.value),t.complete()):r.then(function(r){e.value=r,e._isScalar=!0,t.closed||(t.next(r),t.complete())},function(e){t.closed||t.error(e)}).then(null,function(t){a.root.setTimeout(function(){throw t})});else if(this._isScalar){if(!t.closed)return o.schedule(n,0,{value:this.value,subscriber:t})}else r.then(function(r){e.value=r,e._isScalar=!0,t.closed||t.add(o.schedule(n,0,{value:r,subscriber:t}))},function(e){t.closed||t.add(o.schedule(i,0,{err:e,subscriber:t}))}).then(null,function(t){a.root.setTimeout(function(){throw t})})},e}(s.Observable);r.PromiseObservable=c},{"../Observable":28,"../util/root":170}],94:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Observable"),o=function(t){function e(e,r){t.call(this),this.value=e,this.scheduler=r,this._isScalar=!0,r&&(this._isScalar=!1)}return n(e,t),e.create=function(t,r){return new e(t,r)},e.dispatch=function(t){var e=t.done,r=t.value,n=t.subscriber;if(e)return void n.complete();n.next(r),n.closed||(t.done=!0,this.schedule(t))},e.prototype._subscribe=function(t){var r=this.value,n=this.scheduler;if(n)return n.schedule(e.dispatch,0,{done:!1,value:r,subscriber:t});t.next(r),t.closed||t.complete()},e}(i.Observable);r.ScalarObservable=o},{"../Observable":28}],95:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../util/isNumeric"),o=t("../Observable"),a=t("../scheduler/async"),s=t("../util/isScheduler"),c=t("../util/isDate"),u=function(t){function e(e,r,n){void 0===e&&(e=0),t.call(this),this.period=-1,this.dueTime=0,i.isNumeric(r)?this.period=Number(r)<1&&1||Number(r):s.isScheduler(r)&&(n=r),s.isScheduler(n)||(n=a.async),this.scheduler=n,this.dueTime=c.isDate(e)?+e-this.scheduler.now():e}return n(e,t),e.create=function(t,r,n){return void 0===t&&(t=0),new e(t,r,n)},e.dispatch=function(t){var e=t.index,r=t.period,n=t.subscriber,i=this;if(n.next(e),!n.closed){if(r===-1)return n.complete();t.index=e+1,i.schedule(t,r)}},e.prototype._subscribe=function(t){var r=this,n=r.period,i=r.dueTime;return r.scheduler.schedule(e.dispatch,i,{index:0,period:n,subscriber:t})},e}(o.Observable);r.TimerObservable=u},{"../Observable":28,"../scheduler/async":150,"../util/isDate":164,"../util/isNumeric":166,"../util/isScheduler":169}],96:[function(t,e,r){"use strict";function n(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var r=null,n=null;return i.isScheduler(t[t.length-1])&&(n=t.pop()),"function"==typeof t[t.length-1]&&(r=t.pop()),1===t.length&&o.isArray(t[0])&&(t=t[0]),new a.ArrayObservable(t,n).lift(new s.CombineLatestOperator(r))}var i=t("../util/isScheduler"),o=t("../util/isArray"),a=t("./ArrayObservable"),s=t("../operator/combineLatest");r.combineLatest=n},{"../operator/combineLatest":111,"../util/isArray":162,"../util/isScheduler":169,"./ArrayObservable":85}],97:[function(t,e,r){"use strict";var n=t("./DeferObservable");r.defer=n.DeferObservable.create},{"./DeferObservable":87}],98:[function(t,e,r){"use strict";var n=t("./EmptyObservable");r.empty=n.EmptyObservable.create},{"./EmptyObservable":88}],99:[function(t,e,r){"use strict";var n=t("./FromObservable");r.from=n.FromObservable.create},{"./FromObservable":91}],100:[function(t,e,r){"use strict";var n=t("./FromEventObservable");r.fromEvent=n.FromEventObservable.create},{"./FromEventObservable":90}],101:[function(t,e,r){"use strict";var n=t("./PromiseObservable");r.fromPromise=n.PromiseObservable.create},{"./PromiseObservable":93}],102:[function(t,e,r){"use strict";var n=t("../operator/merge");r.merge=n.mergeStatic},{"../operator/merge":124}],103:[function(t,e,r){"use strict";var n=t("./ArrayObservable");r.of=n.ArrayObservable.of},{"./ArrayObservable":85}],104:[function(t,e,r){"use strict";var n=t("./ErrorObservable");r._throw=n.ErrorObservable.create},{"./ErrorObservable":89}],105:[function(t,e,r){"use strict";var n=t("./TimerObservable");r.timer=n.TimerObservable.create},{"./TimerObservable":95}],106:[function(t,e,r){"use strict";var n=t("../operator/zip");r.zip=n.zipStatic},{"../operator/zip":144}],107:[function(t,e,r){"use strict";function n(t){return this.lift(new s(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult");r.buffer=n;var s=function(){function t(t){this.closingNotifier=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.closingNotifier))},t}(),c=function(t){function e(e,r){t.call(this,e),this.buffer=[],this.add(a.subscribeToResult(this,r))}return i(e,t),e.prototype._next=function(t){this.buffer.push(t)},e.prototype.notifyNext=function(t,e,r,n,i){var o=this.buffer;this.buffer=[],this.destination.next(o)},e}(o.OuterSubscriber)},{"../OuterSubscriber":30,"../util/subscribeToResult":171}],108:[function(t,e,r){"use strict";function n(t,e){return void 0===e&&(e=null),this.lift(new a(t,e))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber");r.bufferCount=n;var a=function(){function t(t,e){this.bufferSize=t,this.startBufferEvery=e}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.bufferSize,this.startBufferEvery))},t}(),s=function(t){function e(e,r,n){t.call(this,e),this.bufferSize=r,this.startBufferEvery=n,this.buffers=[],this.count=0}return i(e,t),e.prototype._next=function(t){var e=this.count++,r=this,n=r.destination,i=r.bufferSize,o=r.startBufferEvery,a=r.buffers;e%(null==o?i:o)==0&&a.push([]);for(var s=a.length;s--;){var c=a[s];c.push(t),c.length===i&&(a.splice(s,1),n.next(c))}},e.prototype._complete=function(){for(var e=this.destination,r=this.buffers;r.length>0;){var n=r.shift();n.length>0&&e.next(n)}t.prototype._complete.call(this)},e}(o.Subscriber)},{"../Subscriber":35}],109:[function(t,e,r){"use strict";function n(t){return this.lift(new h(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscription"),a=t("../util/tryCatch"),s=t("../util/errorObject"),c=t("../OuterSubscriber"),u=t("../util/subscribeToResult");r.bufferWhen=n;var h=function(){function t(t){this.closingSelector=t}return t.prototype.call=function(t,e){return e.subscribe(new l(t,this.closingSelector))},t}(),l=function(t){function e(e,r){t.call(this,e),this.closingSelector=r,this.subscribing=!1,this.openBuffer()}return i(e,t),e.prototype._next=function(t){this.buffer.push(t)},e.prototype._complete=function(){var e=this.buffer;e&&this.destination.next(e),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.buffer=null,this.subscribing=!1},e.prototype.notifyNext=function(t,e,r,n,i){this.openBuffer()},e.prototype.notifyComplete=function(){this.subscribing?this.complete():this.openBuffer()},e.prototype.openBuffer=function(){var t=this.closingSubscription;t&&(this.remove(t),t.unsubscribe());var e=this.buffer;this.buffer&&this.destination.next(e),this.buffer=[];var r=a.tryCatch(this.closingSelector)();r===s.errorObject?this.error(s.errorObject.e):(t=new o.Subscription,this.closingSubscription=t,this.add(t),this.subscribing=!0,t.add(u.subscribeToResult(this,r)),this.subscribing=!1)},e}(c.OuterSubscriber)},{"../OuterSubscriber":30,"../Subscription":36,"../util/errorObject":161,"../util/subscribeToResult":171,"../util/tryCatch":173}],110:[function(t,e,r){"use strict";function n(t){var e=new s(t),r=this.lift(e);return e.caught=r}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult");r._catch=n;var s=function(){function t(t){this.selector=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.selector,this.caught))},t}(),c=function(t){function e(e,r,n){t.call(this,e),this.selector=r,this.caught=n}return i(e,t),e.prototype.error=function(e){if(!this.isStopped){var r=void 0;try{r=this.selector(e,this.caught)}catch(e){return void t.prototype.error.call(this,e)}this._unsubscribeAndRecycle(),this.add(a.subscribeToResult(this,r))}},e}(o.OuterSubscriber)},{"../OuterSubscriber":30,"../util/subscribeToResult":171}],111:[function(t,e,r){"use strict";function n(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var r=null;return"function"==typeof t[t.length-1]&&(r=t.pop()),1===t.length&&a.isArray(t[0])&&(t=t[0].slice()),t.unshift(this),this.lift.call(new o.ArrayObservable(t),new h(r))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../observable/ArrayObservable"),a=t("../util/isArray"),s=t("../OuterSubscriber"),c=t("../util/subscribeToResult"),u={};r.combineLatest=n;var h=function(){function t(t){this.project=t}return t.prototype.call=function(t,e){return e.subscribe(new l(t,this.project))},t}();r.CombineLatestOperator=h;var l=function(t){function e(e,r){t.call(this,e),this.project=r,this.active=0,this.values=[],this.observables=[]}return i(e,t),e.prototype._next=function(t){this.values.push(u),this.observables.push(t)},e.prototype._complete=function(){var t=this.observables,e=t.length;if(0===e)this.destination.complete();else{this.active=e,this.toRespond=e;for(var r=0;r<e;r++){var n=t[r];this.add(c.subscribeToResult(this,n,n,r))}}},e.prototype.notifyComplete=function(t){0==(this.active-=1)&&this.destination.complete()},e.prototype.notifyNext=function(t,e,r,n,i){var o=this.values,a=o[r],s=this.toRespond?a===u?--this.toRespond:this.toRespond:0;o[r]=e,0===s&&(this.project?this._tryProject(o):this.destination.next(o.slice()))},e.prototype._tryProject=function(t){var e;try{e=this.project.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(s.OuterSubscriber);r.CombineLatestSubscriber=l},{"../OuterSubscriber":30,"../observable/ArrayObservable":85,"../util/isArray":162,"../util/subscribeToResult":171}],112:[function(t,e,r){"use strict";function n(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];return this.lift.call(i.apply(void 0,[this].concat(t)))}function i(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var r=null,n=t;return a.isScheduler(n[t.length-1])&&(r=n.pop()),null===r&&1===t.length&&t[0]instanceof o.Observable?t[0]:new s.ArrayObservable(t,r).lift(new c.MergeAllOperator(1))}var o=t("../Observable"),a=t("../util/isScheduler"),s=t("../observable/ArrayObservable"),c=t("./mergeAll");r.concat=n,r.concatStatic=i},{"../Observable":28,"../observable/ArrayObservable":85,"../util/isScheduler":169,"./mergeAll":125}],113:[function(t,e,r){"use strict";function n(t,e){return void 0===e&&(e=s.async),this.lift(new c(t,e))}function i(t){t.debouncedNext()}var o=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},a=t("../Subscriber"),s=t("../scheduler/async");r.debounceTime=n;var c=function(){function t(t,e){this.dueTime=t,this.scheduler=e}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.dueTime,this.scheduler))},t}(),u=function(t){function e(e,r,n){t.call(this,e),this.dueTime=r,this.scheduler=n,this.debouncedSubscription=null,this.lastValue=null,this.hasValue=!1}return o(e,t),e.prototype._next=function(t){this.clearDebounce(),this.lastValue=t,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(i,this.dueTime,this))},e.prototype._complete=function(){this.debouncedNext(),this.destination.complete()},e.prototype.debouncedNext=function(){this.clearDebounce(),this.hasValue&&(this.destination.next(this.lastValue),this.lastValue=null,this.hasValue=!1)},e.prototype.clearDebounce=function(){var t=this.debouncedSubscription;null!==t&&(this.remove(t),t.unsubscribe(),this.debouncedSubscription=null)},e}(a.Subscriber)},{"../Subscriber":35,"../scheduler/async":150}],114:[function(t,e,r){"use strict";function n(t,e){void 0===e&&(e=o.async);var r=a.isDate(t),n=r?+t-e.now():Math.abs(t)
-;return this.lift(new u(n,e))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../scheduler/async"),a=t("../util/isDate"),s=t("../Subscriber"),c=t("../Notification");r.delay=n;var u=function(){function t(t,e){this.delay=t,this.scheduler=e}return t.prototype.call=function(t,e){return e.subscribe(new h(t,this.delay,this.scheduler))},t}(),h=function(t){function e(e,r,n){t.call(this,e),this.delay=r,this.scheduler=n,this.queue=[],this.active=!1,this.errored=!1}return i(e,t),e.dispatch=function(t){for(var e=t.source,r=e.queue,n=t.scheduler,i=t.destination;r.length>0&&r[0].time-n.now()<=0;)r.shift().notification.observe(i);if(r.length>0){var o=Math.max(0,r[0].time-n.now());this.schedule(t,o)}else e.active=!1},e.prototype._schedule=function(t){this.active=!0,this.add(t.schedule(e.dispatch,this.delay,{source:this,destination:this.destination,scheduler:t}))},e.prototype.scheduleNotification=function(t){if(this.errored!==!0){var e=this.scheduler,r=new l(e.now()+this.delay,t);this.queue.push(r),this.active===!1&&this._schedule(e)}},e.prototype._next=function(t){this.scheduleNotification(c.Notification.createNext(t))},e.prototype._error=function(t){this.errored=!0,this.queue=[],this.destination.error(t)},e.prototype._complete=function(){this.scheduleNotification(c.Notification.createComplete())},e}(s.Subscriber),l=function(){function t(t,e){this.time=t,this.notification=e}return t}()},{"../Notification":27,"../Subscriber":35,"../scheduler/async":150,"../util/isDate":164}],115:[function(t,e,r){"use strict";function n(t,e){return this.lift(new c(t,e))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult"),s=t("../util/Set");r.distinct=n;var c=function(){function t(t,e){this.keySelector=t,this.flushes=e}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.keySelector,this.flushes))},t}(),u=function(t){function e(e,r,n){t.call(this,e),this.keySelector=r,this.values=new s.Set,n&&this.add(a.subscribeToResult(this,n))}return i(e,t),e.prototype.notifyNext=function(t,e,r,n,i){this.values.clear()},e.prototype.notifyError=function(t,e){this._error(t)},e.prototype._next=function(t){this.keySelector?this._useKeySelector(t):this._finalizeNext(t,t)},e.prototype._useKeySelector=function(t){var e,r=this.destination;try{e=this.keySelector(t)}catch(t){return void r.error(t)}this._finalizeNext(e,t)},e.prototype._finalizeNext=function(t,e){var r=this.values;r.has(t)||(r.add(t),this.destination.next(e))},e}(o.OuterSubscriber);r.DistinctSubscriber=u},{"../OuterSubscriber":30,"../util/Set":159,"../util/subscribeToResult":171}],116:[function(t,e,r){"use strict";function n(t,e){return this.lift(new c(t,e))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber"),a=t("../util/tryCatch"),s=t("../util/errorObject");r.distinctUntilChanged=n;var c=function(){function t(t,e){this.compare=t,this.keySelector=e}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.compare,this.keySelector))},t}(),u=function(t){function e(e,r,n){t.call(this,e),this.keySelector=n,this.hasKey=!1,"function"==typeof r&&(this.compare=r)}return i(e,t),e.prototype.compare=function(t,e){return t===e},e.prototype._next=function(t){var e=this.keySelector,r=t;if(e&&(r=a.tryCatch(this.keySelector)(t))===s.errorObject)return this.destination.error(s.errorObject.e);var n=!1;if(this.hasKey){if((n=a.tryCatch(this.compare)(this.key,r))===s.errorObject)return this.destination.error(s.errorObject.e)}else this.hasKey=!0;Boolean(n)===!1&&(this.key=r,this.destination.next(t))},e}(o.Subscriber)},{"../Subscriber":35,"../util/errorObject":161,"../util/tryCatch":173}],117:[function(t,e,r){"use strict";function n(t,e,r){return this.lift(new a(t,e,r))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber");r._do=n;var a=function(){function t(t,e,r){this.nextOrObserver=t,this.error=e,this.complete=r}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.nextOrObserver,this.error,this.complete))},t}(),s=function(t){function e(e,r,n,i){t.call(this,e);var a=new o.Subscriber(r,n,i);a.syncErrorThrowable=!0,this.add(a),this.safeSubscriber=a}return i(e,t),e.prototype._next=function(t){var e=this.safeSubscriber;e.next(t),e.syncErrorThrown?this.destination.error(e.syncErrorValue):this.destination.next(t)},e.prototype._error=function(t){var e=this.safeSubscriber;e.error(t),e.syncErrorThrown?this.destination.error(e.syncErrorValue):this.destination.error(t)},e.prototype._complete=function(){var t=this.safeSubscriber;t.complete(),t.syncErrorThrown?this.destination.error(t.syncErrorValue):this.destination.complete()},e}(o.Subscriber)},{"../Subscriber":35}],118:[function(t,e,r){"use strict";function n(t,e,r){return void 0===e&&(e=Number.POSITIVE_INFINITY),void 0===r&&(r=void 0),e=(e||0)<1?Number.POSITIVE_INFINITY:e,this.lift(new u(t,e,r))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../util/tryCatch"),a=t("../util/errorObject"),s=t("../OuterSubscriber"),c=t("../util/subscribeToResult");r.expand=n;var u=function(){function t(t,e,r){this.project=t,this.concurrent=e,this.scheduler=r}return t.prototype.call=function(t,e){return e.subscribe(new h(t,this.project,this.concurrent,this.scheduler))},t}();r.ExpandOperator=u;var h=function(t){function e(e,r,n,i){t.call(this,e),this.project=r,this.concurrent=n,this.scheduler=i,this.index=0,this.active=0,this.hasCompleted=!1,n<Number.POSITIVE_INFINITY&&(this.buffer=[])}return i(e,t),e.dispatch=function(t){var e=t.subscriber,r=t.result,n=t.value,i=t.index;e.subscribeToProjection(r,n,i)},e.prototype._next=function(t){var r=this.destination;if(r.closed)return void this._complete();var n=this.index++;if(this.active<this.concurrent){r.next(t);var i=o.tryCatch(this.project)(t,n);if(i===a.errorObject)r.error(a.errorObject.e);else if(this.scheduler){var s={subscriber:this,result:i,value:t,index:n};this.add(this.scheduler.schedule(e.dispatch,0,s))}else this.subscribeToProjection(i,t,n)}else this.buffer.push(t)},e.prototype.subscribeToProjection=function(t,e,r){this.active++,this.add(c.subscribeToResult(this,t,e,r))},e.prototype._complete=function(){this.hasCompleted=!0,this.hasCompleted&&0===this.active&&this.destination.complete()},e.prototype.notifyNext=function(t,e,r,n,i){this._next(e)},e.prototype.notifyComplete=function(t){var e=this.buffer;this.remove(t),this.active--,e&&e.length>0&&this._next(e.shift()),this.hasCompleted&&0===this.active&&this.destination.complete()},e}(s.OuterSubscriber);r.ExpandSubscriber=h},{"../OuterSubscriber":30,"../util/errorObject":161,"../util/subscribeToResult":171,"../util/tryCatch":173}],119:[function(t,e,r){"use strict";function n(t,e){return this.lift(new a(t,e))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber");r.filter=n;var a=function(){function t(t,e){this.predicate=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.predicate,this.thisArg))},t}(),s=function(t){function e(e,r,n){t.call(this,e),this.predicate=r,this.thisArg=n,this.count=0,this.predicate=r}return i(e,t),e.prototype._next=function(t){var e;try{e=this.predicate.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}e&&this.destination.next(t)},e}(o.Subscriber)},{"../Subscriber":35}],120:[function(t,e,r){"use strict";function n(t){return this.lift(new s(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber"),a=t("../Subscription");r._finally=n;var s=function(){function t(t){this.callback=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.callback))},t}(),c=function(t){function e(e,r){t.call(this,e),this.add(new a.Subscription(r))}return i(e,t),e}(o.Subscriber)},{"../Subscriber":35,"../Subscription":36}],121:[function(t,e,r){"use strict";function n(t,e,r){return this.lift(new s(t,e,r,this))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber"),a=t("../util/EmptyError");r.first=n;var s=function(){function t(t,e,r,n){this.predicate=t,this.resultSelector=e,this.defaultValue=r,this.source=n}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.predicate,this.resultSelector,this.defaultValue,this.source))},t}(),c=function(t){function e(e,r,n,i,o){t.call(this,e),this.predicate=r,this.resultSelector=n,this.defaultValue=i,this.source=o,this.index=0,this.hasCompleted=!1,this._emitted=!1}return i(e,t),e.prototype._next=function(t){var e=this.index++;this.predicate?this._tryPredicate(t,e):this._emit(t,e)},e.prototype._tryPredicate=function(t,e){var r;try{r=this.predicate(t,e,this.source)}catch(t){return void this.destination.error(t)}r&&this._emit(t,e)},e.prototype._emit=function(t,e){if(this.resultSelector)return void this._tryResultSelector(t,e);this._emitFinal(t)},e.prototype._tryResultSelector=function(t,e){var r;try{r=this.resultSelector(t,e)}catch(t){return void this.destination.error(t)}this._emitFinal(r)},e.prototype._emitFinal=function(t){var e=this.destination;this._emitted||(this._emitted=!0,e.next(t),e.complete(),this.hasCompleted=!0)},e.prototype._complete=function(){var t=this.destination;this.hasCompleted||void 0===this.defaultValue?this.hasCompleted||t.error(new a.EmptyError):(t.next(this.defaultValue),t.complete())},e}(o.Subscriber)},{"../Subscriber":35,"../util/EmptyError":157}],122:[function(t,e,r){"use strict";function n(t,e,r){return this.lift(new s(t,e,r,this))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber"),a=t("../util/EmptyError");r.last=n;var s=function(){function t(t,e,r,n){this.predicate=t,this.resultSelector=e,this.defaultValue=r,this.source=n}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.predicate,this.resultSelector,this.defaultValue,this.source))},t}(),c=function(t){function e(e,r,n,i,o){t.call(this,e),this.predicate=r,this.resultSelector=n,this.defaultValue=i,this.source=o,this.hasValue=!1,this.index=0,void 0!==i&&(this.lastValue=i,this.hasValue=!0)}return i(e,t),e.prototype._next=function(t){var e=this.index++;if(this.predicate)this._tryPredicate(t,e);else{if(this.resultSelector)return void this._tryResultSelector(t,e);this.lastValue=t,this.hasValue=!0}},e.prototype._tryPredicate=function(t,e){var r;try{r=this.predicate(t,e,this.source)}catch(t){return void this.destination.error(t)}if(r){if(this.resultSelector)return void this._tryResultSelector(t,e);this.lastValue=t,this.hasValue=!0}},e.prototype._tryResultSelector=function(t,e){var r;try{r=this.resultSelector(t,e)}catch(t){return void this.destination.error(t)}this.lastValue=r,this.hasValue=!0},e.prototype._complete=function(){var t=this.destination;this.hasValue?(t.next(this.lastValue),t.complete()):t.error(new a.EmptyError)},e}(o.Subscriber)},{"../Subscriber":35,"../util/EmptyError":157}],123:[function(t,e,r){"use strict";function n(t,e){if("function"!=typeof t)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return this.lift(new a(t,e))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber");r.map=n;var a=function(){function t(t,e){this.project=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.project,this.thisArg))},t}();r.MapOperator=a;var s=function(t){function e(e,r,n){t.call(this,e),this.project=r,this.count=0,this.thisArg=n||this}return i(e,t),e.prototype._next=function(t){var e;try{e=this.project.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(o.Subscriber)},{"../Subscriber":35}],124:[function(t,e,r){"use strict";function n(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];return this.lift.call(i.apply(void 0,[this].concat(t)))}function i(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var r=Number.POSITIVE_INFINITY,n=null,i=t[t.length-1];return c.isScheduler(i)?(n=t.pop(),t.length>1&&"number"==typeof t[t.length-1]&&(r=t.pop())):"number"==typeof i&&(r=t.pop()),null===n&&1===t.length&&t[0]instanceof o.Observable?t[0]:new a.ArrayObservable(t,n).lift(new s.MergeAllOperator(r))}var o=t("../Observable"),a=t("../observable/ArrayObservable"),s=t("./mergeAll"),c=t("../util/isScheduler");r.merge=n,r.mergeStatic=i},{"../Observable":28,"../observable/ArrayObservable":85,"../util/isScheduler":169,"./mergeAll":125}],125:[function(t,e,r){"use strict";function n(t){return void 0===t&&(t=Number.POSITIVE_INFINITY),this.lift(new s(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult");r.mergeAll=n;var s=function(){function t(t){this.concurrent=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.concurrent))},t}();r.MergeAllOperator=s;var c=function(t){function e(e,r){t.call(this,e),this.concurrent=r,this.hasCompleted=!1,this.buffer=[],this.active=0}return i(e,t),e.prototype._next=function(t){this.active<this.concurrent?(this.active++,this.add(a.subscribeToResult(this,t))):this.buffer.push(t)},e.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete()},e.prototype.notifyComplete=function(t){var e=this.buffer;this.remove(t),this.active--,e.length>0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(o.OuterSubscriber);r.MergeAllSubscriber=c},{"../OuterSubscriber":30,"../util/subscribeToResult":171}],126:[function(t,e,r){"use strict";function n(t,e,r){return void 0===r&&(r=Number.POSITIVE_INFINITY),"number"==typeof e&&(r=e,e=null),this.lift(new s(t,e,r))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../util/subscribeToResult"),a=t("../OuterSubscriber");r.mergeMap=n;var s=function(){function t(t,e,r){void 0===r&&(r=Number.POSITIVE_INFINITY),this.project=t,this.resultSelector=e,this.concurrent=r}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.project,this.resultSelector,this.concurrent))},t}();r.MergeMapOperator=s;var c=function(t){function e(e,r,n,i){void 0===i&&(i=Number.POSITIVE_INFINITY),t.call(this,e),this.project=r,this.resultSelector=n,this.concurrent=i,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}return i(e,t),e.prototype._next=function(t){this.active<this.concurrent?this._tryNext(t):this.buffer.push(t)},e.prototype._tryNext=function(t){var e,r=this.index++;try{e=this.project(t,r)}catch(t){return void this.destination.error(t)}this.active++,this._innerSub(e,t,r)},e.prototype._innerSub=function(t,e,r){this.add(o.subscribeToResult(this,t,e,r))},e.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete()},e.prototype.notifyNext=function(t,e,r,n,i){this.resultSelector?this._notifyResultSelector(t,e,r,n):this.destination.next(e)},e.prototype._notifyResultSelector=function(t,e,r,n){var i;try{i=this.resultSelector(t,e,r,n)}catch(t){return void this.destination.error(t)}this.destination.next(i)},e.prototype.notifyComplete=function(t){var e=this.buffer;this.remove(t),this.active--,e.length>0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(a.OuterSubscriber);r.MergeMapSubscriber=c},{"../OuterSubscriber":30,"../util/subscribeToResult":171}],127:[function(t,e,r){"use strict";function n(t,e){var r;if(r="function"==typeof t?t:function(){return t},"function"==typeof e)return this.lift(new o(r,e));var n=Object.create(this,i.connectableObservableDescriptor);return n.source=this,n.subjectFactory=r,n}var i=t("../observable/ConnectableObservable");r.multicast=n;var o=function(){function t(t,e){this.subjectFactory=t,this.selector=e}return t.prototype.call=function(t,e){var r=this.selector,n=this.subjectFactory(),i=r(n).subscribe(t);return i.add(e.subscribe(n)),i},t}();r.MulticastOperator=o},{"../observable/ConnectableObservable":86}],128:[function(t,e,r){"use strict";function n(t,e){return void 0===e&&(e=0),this.lift(new s(t,e))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber"),a=t("../Notification");r.observeOn=n;var s=function(){function t(t,e){void 0===e&&(e=0),this.scheduler=t,this.delay=e}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.scheduler,this.delay))},t}();r.ObserveOnOperator=s;var c=function(t){function e(e,r,n){void 0===n&&(n=0),t.call(this,e),this.scheduler=r,this.delay=n}return i(e,t),e.dispatch=function(t){var e=t.notification,r=t.destination;e.observe(r),this.unsubscribe()},e.prototype.scheduleMessage=function(t){this.add(this.scheduler.schedule(e.dispatch,this.delay,new u(t,this.destination)))},e.prototype._next=function(t){this.scheduleMessage(a.Notification.createNext(t))},e.prototype._error=function(t){this.scheduleMessage(a.Notification.createError(t))},e.prototype._complete=function(){this.scheduleMessage(a.Notification.createComplete())},e}(o.Subscriber);r.ObserveOnSubscriber=c;var u=function(){function t(t,e){this.notification=t,this.destination=e}return t}();r.ObserveOnMessage=u},{"../Notification":27,"../Subscriber":35}],129:[function(t,e,r){"use strict";function n(){return this.lift(new a)}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber");r.pairwise=n;var a=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new s(t))},t}(),s=function(t){function e(e){t.call(this,e),this.hasPrev=!1}return i(e,t),e.prototype._next=function(t){this.hasPrev?this.destination.next([this.prev,t]):this.hasPrev=!0,this.prev=t},e}(o.Subscriber)},{"../Subscriber":35}],130:[function(t,e,r){"use strict";function n(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var r=t.length;if(0===r)throw new Error("list of properties cannot be empty.");return o.map.call(this,i(t,r))}function i(t,e){return function(r){for(var n=r,i=0;i<e;i++){var o=n[t[i]];if(void 0===o)return;n=o}return n}}var o=t("./map");r.pluck=n},{"./map":123}],131:[function(t,e,r){"use strict";function n(t){return t?o.multicast.call(this,function(){return new i.Subject},t):o.multicast.call(this,new i.Subject)}var i=t("../Subject"),o=t("./multicast");r.publish=n},{"../Subject":33,"./multicast":127}],132:[function(t,e,r){"use strict";function n(t,e,r){return void 0===t&&(t=Number.POSITIVE_INFINITY),void 0===e&&(e=Number.POSITIVE_INFINITY),o.multicast.call(this,new i.ReplaySubject(t,e,r))}var i=t("../ReplaySubject"),o=t("./multicast");r.publishReplay=n},{"../ReplaySubject":31,"./multicast":127}],133:[function(t,e,r){"use strict";function n(t,e){var r=!1;return arguments.length>=2&&(r=!0),this.lift(new a(t,e,r))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber");r.scan=n;var a=function(){function t(t,e,r){void 0===r&&(r=!1),this.accumulator=t,this.seed=e,this.hasSeed=r}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.accumulator,this.seed,this.hasSeed))},t}(),s=function(t){function e(e,r,n,i){t.call(this,e),this.accumulator=r,this._seed=n,this.hasSeed=i,this.index=0}return i(e,t),Object.defineProperty(e.prototype,"seed",{get:function(){return this._seed},set:function(t){this.hasSeed=!0,this._seed=t},enumerable:!0,configurable:!0}),e.prototype._next=function(t){if(this.hasSeed)return this._tryNext(t);this.seed=t,this.destination.next(t)},e.prototype._tryNext=function(t){var e,r=this.index++;try{e=this.accumulator(this.seed,t,r)}catch(t){this.destination.error(t)}this.seed=e,this.destination.next(e)},e}(o.Subscriber)},{"../Subscriber":35}],134:[function(t,e,r){"use strict";function n(){return new a.Subject}function i(){return o.multicast.call(this,n).refCount()}var o=t("./multicast"),a=t("../Subject");r.share=i},{"../Subject":33,"./multicast":127}],135:[function(t,e,r){"use strict";function n(t){return this.lift(new a(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber");r.skip=n;var a=function(){function t(t){this.total=t}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.total))},t}(),s=function(t){function e(e,r){t.call(this,e),this.total=r,this.count=0}return i(e,t),e.prototype._next=function(t){++this.count>this.total&&this.destination.next(t)},e}(o.Subscriber)},{"../Subscriber":35}],136:[function(t,e,r){"use strict";function n(t){return this.lift(new s(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult");r.skipUntil=n;var s=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.notifier))},t}(),c=function(t){function e(e,r){t.call(this,e),this.hasValue=!1,this.isInnerStopped=!1,this.add(a.subscribeToResult(this,r))}return i(e,t),e.prototype._next=function(e){this.hasValue&&t.prototype._next.call(this,e)},e.prototype._complete=function(){this.isInnerStopped?t.prototype._complete.call(this):this.unsubscribe()},e.prototype.notifyNext=function(t,e,r,n,i){this.hasValue=!0},e.prototype.notifyComplete=function(){this.isInnerStopped=!0,this.isStopped&&t.prototype._complete.call(this)},e}(o.OuterSubscriber)},{"../OuterSubscriber":30,"../util/subscribeToResult":171}],137:[function(t,e,r){"use strict";function n(t){return this.lift(new a(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber");r.skipWhile=n;var a=function(){function t(t){this.predicate=t}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.predicate))},t}(),s=function(t){function e(e,r){t.call(this,e),this.predicate=r,this.skipping=!0,this.index=0}return i(e,t),e.prototype._next=function(t){var e=this.destination;this.skipping&&this.tryCallPredicate(t),this.skipping||e.next(t)},e.prototype.tryCallPredicate=function(t){try{var e=this.predicate(t,this.index++);this.skipping=Boolean(e)}catch(t){this.destination.error(t)}},e}(o.Subscriber)},{"../Subscriber":35}],138:[function(t,e,r){"use strict";function n(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var r=t[t.length-1];c.isScheduler(r)?t.pop():r=null;var n=t.length;return 1===n?s.concatStatic(new o.ScalarObservable(t[0],r),this):n>1?s.concatStatic(new i.ArrayObservable(t,r),this):s.concatStatic(new a.EmptyObservable(r),this)}var i=t("../observable/ArrayObservable"),o=t("../observable/ScalarObservable"),a=t("../observable/EmptyObservable"),s=t("./concat"),c=t("../util/isScheduler");r.startWith=n},{"../observable/ArrayObservable":85,"../observable/EmptyObservable":88,"../observable/ScalarObservable":94,"../util/isScheduler":169,"./concat":112}],139:[function(t,e,r){"use strict";function n(t,e){return this.lift(new s(t,e))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult");r.switchMap=n;var s=function(){function t(t,e){this.project=t,this.resultSelector=e}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.project,this.resultSelector))},t}(),c=function(t){function e(e,r,n){t.call(this,e),this.project=r,this.resultSelector=n,this.index=0}return i(e,t),e.prototype._next=function(t){var e,r=this.index++;try{e=this.project(t,r)}catch(t){return void this.destination.error(t)}this._innerSub(e,t,r)},e.prototype._innerSub=function(t,e,r){var n=this.innerSubscription;n&&n.unsubscribe(),this.add(this.innerSubscription=a.subscribeToResult(this,t,e,r))},e.prototype._complete=function(){var e=this.innerSubscription;e&&!e.closed||t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.innerSubscription=null},e.prototype.notifyComplete=function(e){this.remove(e),this.innerSubscription=null,this.isStopped&&t.prototype._complete.call(this)},e.prototype.notifyNext=function(t,e,r,n,i){this.resultSelector?this._tryNotifyNext(t,e,r,n):this.destination.next(e)},e.prototype._tryNotifyNext=function(t,e,r,n){var i;try{i=this.resultSelector(t,e,r,n)}catch(t){return void this.destination.error(t)}this.destination.next(i)},e}(o.OuterSubscriber)},{"../OuterSubscriber":30,"../util/subscribeToResult":171}],140:[function(t,e,r){"use strict";function n(t){return 0===t?new s.EmptyObservable:this.lift(new c(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber"),a=t("../util/ArgumentOutOfRangeError"),s=t("../observable/EmptyObservable");r.take=n;var c=function(){function t(t){if(this.total=t,this.total<0)throw new a.ArgumentOutOfRangeError}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.total))},t}(),u=function(t){function e(e,r){t.call(this,e),this.total=r,this.count=0}return i(e,t),e.prototype._next=function(t){var e=this.total,r=++this.count;r<=e&&(this.destination.next(t),r===e&&(this.destination.complete(),this.unsubscribe()))},e}(o.Subscriber)},{"../Subscriber":35,"../observable/EmptyObservable":88,"../util/ArgumentOutOfRangeError":156}],141:[function(t,e,r){"use strict";function n(t){return this.lift(new s(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult");r.takeUntil=n;var s=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.notifier))},t}(),c=function(t){function e(e,r){t.call(this,e),this.notifier=r,this.add(a.subscribeToResult(this,r))}return i(e,t),e.prototype.notifyNext=function(t,e,r,n,i){this.complete()},e.prototype.notifyComplete=function(){},e}(o.OuterSubscriber)},{"../OuterSubscriber":30,"../util/subscribeToResult":171}],142:[function(t,e,r){"use strict";function n(t,e){return void 0===e&&(e=s.async),this.lift(new c(t,e))}function i(t){t.subscriber.clearThrottle()}var o=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},a=t("../Subscriber"),s=t("../scheduler/async");r.throttleTime=n;var c=function(){function t(t,e){this.duration=t,this.scheduler=e}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.duration,this.scheduler))},t}(),u=function(t){function e(e,r,n){t.call(this,e),this.duration=r,this.scheduler=n}return o(e,t),e.prototype._next=function(t){this.throttled||(this.add(this.throttled=this.scheduler.schedule(i,this.duration,{subscriber:this})),this.destination.next(t))},e.prototype.clearThrottle=function(){var t=this.throttled;t&&(t.unsubscribe(),this.remove(t),this.throttled=null)},e}(a.Subscriber)},{"../Subscriber":35,"../scheduler/async":150}],143:[function(t,e,r){"use strict";function n(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var r;"function"==typeof t[t.length-1]&&(r=t.pop());var n=t;return this.lift(new s(n,r))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult");r.withLatestFrom=n;var s=function(){function t(t,e){this.observables=t,this.project=e}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.observables,this.project))},t}(),c=function(t){function e(e,r,n){t.call(this,e),this.observables=r,this.project=n,this.toRespond=[];var i=r.length;this.values=new Array(i);for(var o=0;o<i;o++)this.toRespond.push(o);for(var o=0;o<i;o++){var s=r[o];this.add(a.subscribeToResult(this,s,s,o))}}return i(e,t),e.prototype.notifyNext=function(t,e,r,n,i){this.values[r]=e;var o=this.toRespond;if(o.length>0){var a=o.indexOf(r);a!==-1&&o.splice(a,1)}},e.prototype.notifyComplete=function(){},e.prototype._next=function(t){if(0===this.toRespond.length){var e=[t].concat(this.values);this.project?this._tryProject(e):this.destination.next(e)}},e.prototype._tryProject=function(t){var e;try{e=this.project.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(o.OuterSubscriber)},{"../OuterSubscriber":30,"../util/subscribeToResult":171}],144:[function(t,e,r){"use strict";function n(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];return this.lift.call(i.apply(void 0,[this].concat(t)))}function i(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var r=t[t.length-1];return"function"==typeof r&&t.pop(),new a.ArrayObservable(t).lift(new p(r))}var o=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},a=t("../observable/ArrayObservable"),s=t("../util/isArray"),c=t("../Subscriber"),u=t("../OuterSubscriber"),h=t("../util/subscribeToResult"),l=t("../symbol/iterator");r.zipProto=n,r.zipStatic=i;var p=function(){function t(t){this.project=t}return t.prototype.call=function(t,e){return e.subscribe(new f(t,this.project))},t}();r.ZipOperator=p;var f=function(t){function e(e,r,n){void 0===n&&(n=Object.create(null)),t.call(this,e),this.iterators=[],this.active=0,this.project="function"==typeof r?r:null,this.values=n}return o(e,t),e.prototype._next=function(t){var e=this.iterators;s.isArray(t)?e.push(new m(t)):"function"==typeof t[l.$$iterator]?e.push(new d(t[l.$$iterator]())):e.push(new v(this.destination,this,t))},e.prototype._complete=function(){var t=this.iterators,e=t.length;this.active=e;for(var r=0;r<e;r++){var n=t[r]
-;n.stillUnsubscribed?this.add(n.subscribe(n,r)):this.active--}},e.prototype.notifyInactive=function(){0===--this.active&&this.destination.complete()},e.prototype.checkIterators=function(){for(var t=this.iterators,e=t.length,r=this.destination,n=0;n<e;n++){var i=t[n];if("function"==typeof i.hasValue&&!i.hasValue())return}for(var o=!1,a=[],n=0;n<e;n++){var i=t[n],s=i.next();if(i.hasCompleted()&&(o=!0),s.done)return void r.complete();a.push(s.value)}this.project?this._tryProject(a):r.next(a),o&&r.complete()},e.prototype._tryProject=function(t){var e;try{e=this.project.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(c.Subscriber);r.ZipSubscriber=f;var d=function(){function t(t){this.iterator=t,this.nextResult=t.next()}return t.prototype.hasValue=function(){return!0},t.prototype.next=function(){var t=this.nextResult;return this.nextResult=this.iterator.next(),t},t.prototype.hasCompleted=function(){var t=this.nextResult;return t&&t.done},t}(),m=function(){function t(t){this.array=t,this.index=0,this.length=0,this.length=t.length}return t.prototype[l.$$iterator]=function(){return this},t.prototype.next=function(t){var e=this.index++,r=this.array;return e<this.length?{value:r[e],done:!1}:{value:null,done:!0}},t.prototype.hasValue=function(){return this.array.length>this.index},t.prototype.hasCompleted=function(){return this.array.length===this.index},t}(),v=function(t){function e(e,r,n){t.call(this,e),this.parent=r,this.observable=n,this.stillUnsubscribed=!0,this.buffer=[],this.isComplete=!1}return o(e,t),e.prototype[l.$$iterator]=function(){return this},e.prototype.next=function(){var t=this.buffer;return 0===t.length&&this.isComplete?{value:null,done:!0}:{value:t.shift(),done:!1}},e.prototype.hasValue=function(){return this.buffer.length>0},e.prototype.hasCompleted=function(){return 0===this.buffer.length&&this.isComplete},e.prototype.notifyComplete=function(){this.buffer.length>0?(this.isComplete=!0,this.parent.notifyInactive()):this.destination.complete()},e.prototype.notifyNext=function(t,e,r,n,i){this.buffer.push(e),this.parent.checkIterators()},e.prototype.subscribe=function(t,e){return h.subscribeToResult(this,this.observable,this,e)},e}(u.OuterSubscriber)},{"../OuterSubscriber":30,"../Subscriber":35,"../observable/ArrayObservable":85,"../symbol/iterator":152,"../util/isArray":162,"../util/subscribeToResult":171}],145:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Subscription"),o=function(t){function e(e,r){t.call(this)}return n(e,t),e.prototype.schedule=function(t,e){return void 0===e&&(e=0),this},e}(i.Subscription);r.Action=o},{"../Subscription":36}],146:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../util/root"),o=t("./Action"),a=function(t){function e(e,r){t.call(this,e,r),this.scheduler=e,this.work=r,this.pending=!1}return n(e,t),e.prototype.schedule=function(t,e){if(void 0===e&&(e=0),this.closed)return this;this.state=t,this.pending=!0;var r=this.id,n=this.scheduler;return null!=r&&(this.id=this.recycleAsyncId(n,r,e)),this.delay=e,this.id=this.id||this.requestAsyncId(n,this.id,e),this},e.prototype.requestAsyncId=function(t,e,r){return void 0===r&&(r=0),i.root.setInterval(t.flush.bind(t,this),r)},e.prototype.recycleAsyncId=function(t,e,r){return void 0===r&&(r=0),null!==r&&this.delay===r?e:i.root.clearInterval(e)&&void 0||void 0},e.prototype.execute=function(t,e){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var r=this._execute(t,e);if(r)return r;this.pending===!1&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},e.prototype._execute=function(t,e){var r=!1,n=void 0;try{this.work(t)}catch(t){r=!0,n=!!t&&t||new Error(t)}if(r)return this.unsubscribe(),n},e.prototype._unsubscribe=function(){var t=this.id,e=this.scheduler,r=e.actions,n=r.indexOf(this);this.work=null,this.delay=null,this.state=null,this.pending=!1,this.scheduler=null,n!==-1&&r.splice(n,1),null!=t&&(this.id=this.recycleAsyncId(e,t,null))},e}(o.Action);r.AsyncAction=a},{"../util/root":170,"./Action":145}],147:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Scheduler"),o=function(t){function e(){t.apply(this,arguments),this.actions=[],this.active=!1,this.scheduled=void 0}return n(e,t),e.prototype.flush=function(t){var e=this.actions;if(this.active)return void e.push(t);var r;this.active=!0;do{if(r=t.execute(t.state,t.delay))break}while(t=e.shift());if(this.active=!1,r){for(;t=e.shift();)t.unsubscribe();throw r}},e}(i.Scheduler);r.AsyncScheduler=o},{"../Scheduler":32}],148:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./AsyncAction"),o=function(t){function e(e,r){t.call(this,e,r),this.scheduler=e,this.work=r}return n(e,t),e.prototype.schedule=function(e,r){return void 0===r&&(r=0),r>0?t.prototype.schedule.call(this,e,r):(this.delay=r,this.state=e,this.scheduler.flush(this),this)},e.prototype.execute=function(e,r){return r>0||this.closed?t.prototype.execute.call(this,e,r):this._execute(e,r)},e.prototype.requestAsyncId=function(e,r,n){return void 0===n&&(n=0),null!==n&&n>0||null===n&&this.delay>0?t.prototype.requestAsyncId.call(this,e,r,n):e.flush(this)},e}(i.AsyncAction);r.QueueAction=o},{"./AsyncAction":146}],149:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./AsyncScheduler"),o=function(t){function e(){t.apply(this,arguments)}return n(e,t),e}(i.AsyncScheduler);r.QueueScheduler=o},{"./AsyncScheduler":147}],150:[function(t,e,r){"use strict";var n=t("./AsyncAction"),i=t("./AsyncScheduler");r.async=new i.AsyncScheduler(n.AsyncAction)},{"./AsyncAction":146,"./AsyncScheduler":147}],151:[function(t,e,r){"use strict";var n=t("./QueueAction"),i=t("./QueueScheduler");r.queue=new i.QueueScheduler(n.QueueAction)},{"./QueueAction":148,"./QueueScheduler":149}],152:[function(t,e,r){"use strict";function n(t){var e=t.Symbol;if("function"==typeof e)return e.iterator||(e.iterator=e("iterator polyfill")),e.iterator;var r=t.Set;if(r&&"function"==typeof(new r)["@@iterator"])return"@@iterator";var n=t.Map;if(n)for(var i=Object.getOwnPropertyNames(n.prototype),o=0;o<i.length;++o){var a=i[o];if("entries"!==a&&"size"!==a&&n.prototype[a]===n.prototype.entries)return a}return"@@iterator"}var i=t("../util/root");r.symbolIteratorPonyfill=n,r.$$iterator=n(i.root)},{"../util/root":170}],153:[function(t,e,r){"use strict";function n(t){var e,r=t.Symbol;return"function"==typeof r?r.observable?e=r.observable:(e=r("observable"),r.observable=e):e="@@observable",e}var i=t("../util/root");r.getSymbolObservable=n,r.$$observable=n(i.root)},{"../util/root":170}],154:[function(t,e,r){"use strict";var n=t("../util/root"),i=n.root.Symbol;r.$$rxSubscriber="function"==typeof i&&"function"==typeof i.for?i.for("rxSubscriber"):"@@rxSubscriber"},{"../util/root":170}],155:[function(t,e,r){"use strict";var n=t("./root"),i=function(){function t(t){t.requestAnimationFrame?(this.cancelAnimationFrame=t.cancelAnimationFrame.bind(t),this.requestAnimationFrame=t.requestAnimationFrame.bind(t)):t.mozRequestAnimationFrame?(this.cancelAnimationFrame=t.mozCancelAnimationFrame.bind(t),this.requestAnimationFrame=t.mozRequestAnimationFrame.bind(t)):t.webkitRequestAnimationFrame?(this.cancelAnimationFrame=t.webkitCancelAnimationFrame.bind(t),this.requestAnimationFrame=t.webkitRequestAnimationFrame.bind(t)):t.msRequestAnimationFrame?(this.cancelAnimationFrame=t.msCancelAnimationFrame.bind(t),this.requestAnimationFrame=t.msRequestAnimationFrame.bind(t)):t.oRequestAnimationFrame?(this.cancelAnimationFrame=t.oCancelAnimationFrame.bind(t),this.requestAnimationFrame=t.oRequestAnimationFrame.bind(t)):(this.cancelAnimationFrame=t.clearTimeout.bind(t),this.requestAnimationFrame=function(e){return t.setTimeout(e,1e3/60)})}return t}();r.RequestAnimationFrameDefinition=i,r.AnimationFrame=new i(n.root)},{"./root":170}],156:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=function(t){function e(){var e=t.call(this,"argument out of range");this.name=e.name="ArgumentOutOfRangeError",this.stack=e.stack,this.message=e.message}return n(e,t),e}(Error);r.ArgumentOutOfRangeError=i},{}],157:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=function(t){function e(){var e=t.call(this,"no elements in sequence");this.name=e.name="EmptyError",this.stack=e.stack,this.message=e.message}return n(e,t),e}(Error);r.EmptyError=i},{}],158:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=function(t){function e(){var e=t.call(this,"object unsubscribed");this.name=e.name="ObjectUnsubscribedError",this.stack=e.stack,this.message=e.message}return n(e,t),e}(Error);r.ObjectUnsubscribedError=i},{}],159:[function(t,e,r){"use strict";function n(){return function(){function t(){this._values=[]}return t.prototype.add=function(t){this.has(t)||this._values.push(t)},t.prototype.has=function(t){return this._values.indexOf(t)!==-1},Object.defineProperty(t.prototype,"size",{get:function(){return this._values.length},enumerable:!0,configurable:!0}),t.prototype.clear=function(){this._values.length=0},t}()}var i=t("./root");r.minimalSetImpl=n,r.Set=i.root.Set||n()},{"./root":170}],160:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=function(t){function e(e){t.call(this),this.errors=e;var r=Error.call(this,e?e.length+" errors occurred during unsubscription:\n  "+e.map(function(t,e){return e+1+") "+t.toString()}).join("\n  "):"");this.name=r.name="UnsubscriptionError",this.stack=r.stack,this.message=r.message}return n(e,t),e}(Error);r.UnsubscriptionError=i},{}],161:[function(t,e,r){"use strict";r.errorObject={e:{}}},{}],162:[function(t,e,r){"use strict";r.isArray=Array.isArray||function(t){return t&&"number"==typeof t.length}},{}],163:[function(t,e,r){"use strict";r.isArrayLike=function(t){return t&&"number"==typeof t.length}},{}],164:[function(t,e,r){"use strict";function n(t){return t instanceof Date&&!isNaN(+t)}r.isDate=n},{}],165:[function(t,e,r){"use strict";function n(t){return"function"==typeof t}r.isFunction=n},{}],166:[function(t,e,r){"use strict";function n(t){return!i.isArray(t)&&t-parseFloat(t)+1>=0}var i=t("../util/isArray");r.isNumeric=n},{"../util/isArray":162}],167:[function(t,e,r){"use strict";function n(t){return null!=t&&"object"==typeof t}r.isObject=n},{}],168:[function(t,e,r){"use strict";function n(t){return t&&"function"!=typeof t.subscribe&&"function"==typeof t.then}r.isPromise=n},{}],169:[function(t,e,r){"use strict";function n(t){return t&&"function"==typeof t.schedule}r.isScheduler=n},{}],170:[function(t,e,r){(function(t){"use strict";if(r.root="object"==typeof window&&window.window===window&&window||"object"==typeof self&&self.self===self&&self||"object"==typeof t&&t.global===t&&t,!r.root)throw new Error("RxJS could not find any global context (window, self, global)")}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],171:[function(t,e,r){"use strict";function n(t,e,r,n){var p=new h.InnerSubscriber(t,r,n);if(p.closed)return null;if(e instanceof c.Observable)return e._isScalar?(p.next(e.value),p.complete(),null):e.subscribe(p);if(o.isArrayLike(e)){for(var f=0,d=e.length;f<d&&!p.closed;f++)p.next(e[f]);p.closed||p.complete()}else{if(a.isPromise(e))return e.then(function(t){p.closed||(p.next(t),p.complete())},function(t){return p.error(t)}).then(null,function(t){i.root.setTimeout(function(){throw t})}),p;if(e&&"function"==typeof e[u.$$iterator])for(var m=e[u.$$iterator]();;){var v=m.next();if(v.done){p.complete();break}if(p.next(v.value),p.closed)break}else if(e&&"function"==typeof e[l.$$observable]){var g=e[l.$$observable]();if("function"==typeof g.subscribe)return g.subscribe(new h.InnerSubscriber(t,r,n));p.error(new TypeError("Provided object does not correctly implement Symbol.observable"))}else{var y=s.isObject(e)?"an invalid object":"'"+e+"'",b="You provided "+y+" where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.";p.error(new TypeError(b))}}return null}var i=t("./root"),o=t("./isArrayLike"),a=t("./isPromise"),s=t("./isObject"),c=t("../Observable"),u=t("../symbol/iterator"),h=t("../InnerSubscriber"),l=t("../symbol/observable");r.subscribeToResult=n},{"../InnerSubscriber":26,"../Observable":28,"../symbol/iterator":152,"../symbol/observable":153,"./isArrayLike":163,"./isObject":167,"./isPromise":168,"./root":170}],172:[function(t,e,r){"use strict";function n(t,e,r){if(t){if(t instanceof i.Subscriber)return t;if(t[o.$$rxSubscriber])return t[o.$$rxSubscriber]()}return t||e||r?new i.Subscriber(t,e,r):new i.Subscriber(a.empty)}var i=t("../Subscriber"),o=t("../symbol/rxSubscriber"),a=t("../Observer");r.toSubscriber=n},{"../Observer":29,"../Subscriber":35,"../symbol/rxSubscriber":154}],173:[function(t,e,r){"use strict";function n(){try{return o.apply(this,arguments)}catch(t){return a.errorObject.e=t,a.errorObject}}function i(t){return o=t,n}var o,a=t("./errorObject");r.tryCatch=i},{"./errorObject":161}],174:[function(e,r,n){!function(e,i){"object"==typeof n&&void 0!==r?i(n):"function"==typeof t&&t.amd?t(["exports"],i):i(e.THREE=e.THREE||{})}(this,function(t){function e(){}function r(t,e){this.x=t||0,this.y=e||0}function n(t,e,i,o,a,s,c,u,h,l){Object.defineProperty(this,"id",{value:ni++}),this.uuid=ri.generateUUID(),this.name="",this.image=void 0!==t?t:n.DEFAULT_IMAGE,this.mipmaps=[],this.mapping=void 0!==e?e:n.DEFAULT_MAPPING,this.wrapS=void 0!==i?i:1001,this.wrapT=void 0!==o?o:1001,this.magFilter=void 0!==a?a:1006,this.minFilter=void 0!==s?s:1008,this.anisotropy=void 0!==h?h:1,this.format=void 0!==c?c:1023,this.type=void 0!==u?u:1009,this.offset=new r(0,0),this.repeat=new r(1,1),this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=void 0!==l?l:3e3,this.version=0,this.onUpdate=null}function i(t,e,r,n){this.x=t||0,this.y=e||0,this.z=r||0,this.w=void 0!==n?n:1}function o(t,e,r){this.uuid=ri.generateUUID(),this.width=t,this.height=e,this.scissor=new i(0,0,t,e),this.scissorTest=!1,this.viewport=new i(0,0,t,e),r=r||{},void 0===r.minFilter&&(r.minFilter=1006),this.texture=new n(void 0,void 0,r.wrapS,r.wrapT,r.magFilter,r.minFilter,r.format,r.type,r.anisotropy,r.encoding),this.depthBuffer=void 0===r.depthBuffer||r.depthBuffer,this.stencilBuffer=void 0===r.stencilBuffer||r.stencilBuffer,this.depthTexture=void 0!==r.depthTexture?r.depthTexture:null}function a(t,e,r){o.call(this,t,e,r),this.activeMipMapLevel=this.activeCubeFace=0}function s(t,e,r,n){this._x=t||0,this._y=e||0,this._z=r||0,this._w=void 0!==n?n:1}function c(t,e,r){this.x=t||0,this.y=e||0,this.z=r||0}function u(){this.elements=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),0<arguments.length&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}function h(t,e,r,i,o,a,s,c,u,h){t=void 0!==t?t:[],n.call(this,t,void 0!==e?e:301,r,i,o,a,s,c,u,h),this.flipY=!1}function l(t,e,r){var n=t[0];if(0>=n||0<n)return t;var i=e*r,o=ai[i];if(void 0===o&&(o=new Float32Array(i),ai[i]=o),0!==e)for(n.toArray(o,0),n=1,i=0;n!==e;++n)i+=r,t[n].toArray(o,i);return o}function p(t,e){var r=si[e];void 0===r&&(r=new Int32Array(e),si[e]=r);for(var n=0;n!==e;++n)r[n]=t.allocTextureUnit();return r}function f(t,e){t.uniform1f(this.addr,e)}function d(t,e){t.uniform1i(this.addr,e)}function m(t,e){void 0===e.x?t.uniform2fv(this.addr,e):t.uniform2f(this.addr,e.x,e.y)}function v(t,e){void 0!==e.x?t.uniform3f(this.addr,e.x,e.y,e.z):void 0!==e.r?t.uniform3f(this.addr,e.r,e.g,e.b):t.uniform3fv(this.addr,e)}function g(t,e){void 0===e.x?t.uniform4fv(this.addr,e):t.uniform4f(this.addr,e.x,e.y,e.z,e.w)}function y(t,e){t.uniformMatrix2fv(this.addr,!1,e.elements||e)}function b(t,e){t.uniformMatrix3fv(this.addr,!1,e.elements||e)}function _(t,e){t.uniformMatrix4fv(this.addr,!1,e.elements||e)}function x(t,e,r){var n=r.allocTextureUnit();t.uniform1i(this.addr,n),r.setTexture2D(e||ii,n)}function w(t,e,r){var n=r.allocTextureUnit();t.uniform1i(this.addr,n),r.setTextureCube(e||oi,n)}function S(t,e){t.uniform2iv(this.addr,e)}function M(t,e){t.uniform3iv(this.addr,e)}function E(t,e){t.uniform4iv(this.addr,e)}function T(t){switch(t){case 5126:return f;case 35664:return m;case 35665:return v;case 35666:return g;case 35674:return y;case 35675:return b;case 35676:return _;case 35678:return x;case 35680:return w;case 5124:case 35670:return d;case 35667:case 35671:return S;case 35668:case 35672:return M;case 35669:case 35673:return E}}function C(t,e){t.uniform1fv(this.addr,e)}function O(t,e){t.uniform1iv(this.addr,e)}function P(t,e){t.uniform2fv(this.addr,l(e,this.size,2))}function A(t,e){t.uniform3fv(this.addr,l(e,this.size,3))}function j(t,e){t.uniform4fv(this.addr,l(e,this.size,4))}function R(t,e){t.uniformMatrix2fv(this.addr,!1,l(e,this.size,4))}function L(t,e){t.uniformMatrix3fv(this.addr,!1,l(e,this.size,9))}function N(t,e){t.uniformMatrix4fv(this.addr,!1,l(e,this.size,16))}function I(t,e,r){var n=e.length,i=p(r,n);for(t.uniform1iv(this.addr,i),t=0;t!==n;++t)r.setTexture2D(e[t]||ii,i[t])}function D(t,e,r){var n=e.length,i=p(r,n);for(t.uniform1iv(this.addr,i),t=0;t!==n;++t)r.setTextureCube(e[t]||oi,i[t])}function k(t){switch(t){case 5126:return C;case 35664:return P;case 35665:return A;case 35666:return j;case 35674:return R;case 35675:return L;case 35676:return N;case 35678:return I;case 35680:return D;case 5124:case 35670:return O;case 35667:case 35671:return S;case 35668:case 35672:return M;case 35669:case 35673:return E}}function F(t,e,r){this.id=t,this.addr=r,this.setValue=T(e.type)}function U(t,e,r){this.id=t,this.addr=r,this.size=e.size,this.setValue=k(e.type)}function B(t){this.id=t,this.seq=[],this.map={}}function z(t,e,r){this.seq=[],this.map={},this.renderer=r,r=t.getProgramParameter(e,t.ACTIVE_UNIFORMS);for(var n=0;n!==r;++n){var i=t.getActiveUniform(e,n),o=t.getUniformLocation(e,i.name),a=this,s=i.name,c=s.length;for(ci.lastIndex=0;;){var u=ci.exec(s),h=ci.lastIndex,l=u[1],p=u[3];if("]"===u[2]&&(l|=0),void 0===p||"["===p&&h+2===c){s=a,i=void 0===p?new F(l,i,o):new U(l,i,o),s.seq.push(i),s.map[i.id]=i;break}p=a.map[l],void 0===p&&(p=new B(l),l=a,a=p,l.seq.push(a),l.map[a.id]=a),a=p}}}function $(t,e,r){return void 0===e&&void 0===r?this.set(t):this.setRGB(t,e,r)}function G(t,e,r,i,o,a,s,c,u,h,l,p){n.call(this,null,a,s,c,u,h,i,o,l,p),this.image={data:t,width:e,height:r},this.magFilter=void 0!==u?u:1003,this.minFilter=void 0!==h?h:1003,this.flipY=this.generateMipmaps=!1,this.unpackAlignment=1}function V(t,e){this.min=void 0!==t?t:new r(1/0,1/0),this.max=void 0!==e?e:new r(-(1/0),-(1/0))}function H(t,e){var n,i,o,a,s,u,h,l,p,f,d,m,v,g,y,b,_=t.context,x=t.state;this.render=function(w,S,M){if(0!==e.length){w=new c;var E=M.w/M.z,T=.5*M.z,C=.5*M.w,O=16/M.w,P=new r(O*E,O),A=new c(1,1,0),j=new r(1,1),R=new V;if(R.min.set(M.x,M.y),R.max.set(M.x+(M.z-16),M.y+(M.w-16)),void 0===g){var O=new Float32Array([-1,-1,0,0,1,-1,1,0,1,1,1,1,-1,1,0,1]),L=new Uint16Array([0,1,2,0,2,3]);d=_.createBuffer(),m=_.createBuffer(),_.bindBuffer(_.ARRAY_BUFFER,d),_.bufferData(_.ARRAY_BUFFER,O,_.STATIC_DRAW),_.bindBuffer(_.ELEMENT_ARRAY_BUFFER,m),_.bufferData(_.ELEMENT_ARRAY_BUFFER,L,_.STATIC_DRAW),y=_.createTexture(),b=_.createTexture(),x.bindTexture(_.TEXTURE_2D,y),_.texImage2D(_.TEXTURE_2D,0,_.RGB,16,16,0,_.RGB,_.UNSIGNED_BYTE,null),_.texParameteri(_.TEXTURE_2D,_.TEXTURE_WRAP_S,_.CLAMP_TO_EDGE),_.texParameteri(_.TEXTURE_2D,_.TEXTURE_WRAP_T,_.CLAMP_TO_EDGE),_.texParameteri(_.TEXTURE_2D,_.TEXTURE_MAG_FILTER,_.NEAREST),_.texParameteri(_.TEXTURE_2D,_.TEXTURE_MIN_FILTER,_.NEAREST),x.bindTexture(_.TEXTURE_2D,b),_.texImage2D(_.TEXTURE_2D,0,_.RGBA,16,16,0,_.RGBA,_.UNSIGNED_BYTE,null),_.texParameteri(_.TEXTURE_2D,_.TEXTURE_WRAP_S,_.CLAMP_TO_EDGE),_.texParameteri(_.TEXTURE_2D,_.TEXTURE_WRAP_T,_.CLAMP_TO_EDGE),_.texParameteri(_.TEXTURE_2D,_.TEXTURE_MAG_FILTER,_.NEAREST),_.texParameteri(_.TEXTURE_2D,_.TEXTURE_MIN_FILTER,_.NEAREST);var O=v={vertexShader:"uniform lowp int renderType;\nuniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nuniform sampler2D occlusionMap;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nvUV = uv;\nvec2 pos = position;\nif ( renderType == 2 ) {\nvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );\nvVisibility =        visibility.r / 9.0;\nvVisibility *= 1.0 - visibility.g / 9.0;\nvVisibility *=       visibility.b / 9.0;\nvVisibility *= 1.0 - visibility.a / 9.0;\npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\n}\ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n}",fragmentShader:"uniform lowp int renderType;\nuniform sampler2D map;\nuniform float opacity;\nuniform vec3 color;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nif ( renderType == 0 ) {\ngl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );\n} else if ( renderType == 1 ) {\ngl_FragColor = texture2D( map, vUV );\n} else {\nvec4 texture = texture2D( map, vUV );\ntexture.a *= opacity * vVisibility;\ngl_FragColor = texture;\ngl_FragColor.rgb *= color;\n}\n}"},L=_.createProgram(),N=_.createShader(_.FRAGMENT_SHADER),I=_.createShader(_.VERTEX_SHADER),D="precision "+t.getPrecision()+" float;\n";_.shaderSource(N,D+O.fragmentShader),_.shaderSource(I,D+O.vertexShader),_.compileShader(N),_.compileShader(I),_.attachShader(L,N),_.attachShader(L,I),_.linkProgram(L),g=L,p=_.getAttribLocation(g,"position"),f=_.getAttribLocation(g,"uv"),n=_.getUniformLocation(g,"renderType"),i=_.getUniformLocation(g,"map"),o=_.getUniformLocation(g,"occlusionMap"),a=_.getUniformLocation(g,"opacity"),s=_.getUniformLocation(g,"color"),u=_.getUniformLocation(g,"scale"),h=_.getUniformLocation(g,"rotation"),l=_.getUniformLocation(g,"screenPosition")}for(_.useProgram(g),x.initAttributes(),x.enableAttribute(p),x.enableAttribute(f),x.disableUnusedAttributes(),_.uniform1i(o,0),_.uniform1i(i,1),_.bindBuffer(_.ARRAY_BUFFER,d),_.vertexAttribPointer(p,2,_.FLOAT,!1,16,0),_.vertexAttribPointer(f,2,_.FLOAT,!1,16,8),_.bindBuffer(_.ELEMENT_ARRAY_BUFFER,m),x.disable(_.CULL_FACE),x.setDepthWrite(!1),L=0,N=e.length;L<N;L++)if(O=16/M.w,P.set(O*E,O),I=e[L],w.set(I.matrixWorld.elements[12],I.matrixWorld.elements[13],I.matrixWorld.elements[14]),w.applyMatrix4(S.matrixWorldInverse),w.applyProjection(S.projectionMatrix),A.copy(w),j.x=M.x+A.x*T+T-8,j.y=M.y+A.y*C+C-8,!0===R.containsPoint(j)){x.activeTexture(_.TEXTURE0),x.bindTexture(_.TEXTURE_2D,null),x.activeTexture(_.TEXTURE1),x.bindTexture(_.TEXTURE_2D,y),_.copyTexImage2D(_.TEXTURE_2D,0,_.RGB,j.x,j.y,16,16,0),_.uniform1i(n,0),_.uniform2f(u,P.x,P.y),_.uniform3f(l,A.x,A.y,A.z),x.disable(_.BLEND),x.enable(_.DEPTH_TEST),_.drawElements(_.TRIANGLES,6,_.UNSIGNED_SHORT,0),x.activeTexture(_.TEXTURE0),x.bindTexture(_.TEXTURE_2D,b),_.copyTexImage2D(_.TEXTURE_2D,0,_.RGBA,j.x,j.y,16,16,0),_.uniform1i(n,1),x.disable(_.DEPTH_TEST),x.activeTexture(_.TEXTURE1),x.bindTexture(_.TEXTURE_2D,y),_.drawElements(_.TRIANGLES,6,_.UNSIGNED_SHORT,0),I.positionScreen.copy(A),I.customUpdateCallback?I.customUpdateCallback(I):I.updateLensFlares(),_.uniform1i(n,2),x.enable(_.BLEND);for(var D=0,k=I.lensFlares.length;D<k;D++){var F=I.lensFlares[D];.001<F.opacity&&.001<F.scale&&(A.x=F.x,A.y=F.y,A.z=F.z,O=F.size*F.scale/M.w,P.x=O*E,P.y=O,_.uniform3f(l,A.x,A.y,A.z),_.uniform2f(u,P.x,P.y),_.uniform1f(h,F.rotation),_.uniform1f(a,F.opacity),_.uniform3f(s,F.color.r,F.color.g,F.color.b),x.setBlending(F.blending,F.blendEquation,F.blendSrc,F.blendDst),t.setTexture2D(F.texture,1),_.drawElements(_.TRIANGLES,6,_.UNSIGNED_SHORT,0))}}x.enable(_.CULL_FACE),x.enable(_.DEPTH_TEST),x.setDepthWrite(!0),t.resetGLState()}}}function W(t,e){function r(t,e){return t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.z!==e.z?e.z-t.z:e.id-t.id}var i,o,a,u,h,l,p,f,d,m,v,g,y,b,_,x,w,S,M,E,T,C=t.context,O=t.state,P=new c,A=new s,j=new c;this.render=function(s,c){if(0!==e.length){if(void 0===E){var R=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]),L=new Uint16Array([0,1,2,0,2,3]);S=C.createBuffer(),M=C.createBuffer(),C.bindBuffer(C.ARRAY_BUFFER,S),C.bufferData(C.ARRAY_BUFFER,R,C.STATIC_DRAW),C.bindBuffer(C.ELEMENT_ARRAY_BUFFER,M),C.bufferData(C.ELEMENT_ARRAY_BUFFER,L,C.STATIC_DRAW);var R=C.createProgram(),L=C.createShader(C.VERTEX_SHADER),N=C.createShader(C.FRAGMENT_SHADER);C.shaderSource(L,["precision "+t.getPrecision()+" float;","uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uvOffset + uv * uvScale;\nvec2 alignedPosition = position * scale;\nvec2 rotatedPosition;\nrotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\nrotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\nvec4 finalPosition;\nfinalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\nfinalPosition.xy += rotatedPosition;\nfinalPosition = projectionMatrix * finalPosition;\ngl_Position = finalPosition;\n}"].join("\n")),C.shaderSource(N,["precision "+t.getPrecision()+" float;","uniform vec3 color;\nuniform sampler2D map;\nuniform float opacity;\nuniform int fogType;\nuniform vec3 fogColor;\nuniform float fogDensity;\nuniform float fogNear;\nuniform float fogFar;\nuniform float alphaTest;\nvarying vec2 vUV;\nvoid main() {\nvec4 texture = texture2D( map, vUV );\nif ( texture.a < alphaTest ) discard;\ngl_FragColor = vec4( color * texture.xyz, texture.a * opacity );\nif ( fogType > 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")),C.compileShader(L),C.compileShader(N),C.attachShader(R,L),C.attachShader(R,N),C.linkProgram(R),E=R,x=C.getAttribLocation(E,"position"),w=C.getAttribLocation(E,"uv"),i=C.getUniformLocation(E,"uvOffset"),o=C.getUniformLocation(E,"uvScale"),a=C.getUniformLocation(E,"rotation"),u=C.getUniformLocation(E,"scale"),h=C.getUniformLocation(E,"color"),l=C.getUniformLocation(E,"map"),p=C.getUniformLocation(E,"opacity"),f=C.getUniformLocation(E,"modelViewMatrix"),d=C.getUniformLocation(E,"projectionMatrix"),m=C.getUniformLocation(E,"fogType"),v=C.getUniformLocation(E,"fogDensity"),g=C.getUniformLocation(E,"fogNear"),y=C.getUniformLocation(E,"fogFar"),b=C.getUniformLocation(E,"fogColor"),_=C.getUniformLocation(E,"alphaTest"),R=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),R.width=8,R.height=8,L=R.getContext("2d"),L.fillStyle="white",L.fillRect(0,0,8,8),T=new n(R),T.needsUpdate=!0}C.useProgram(E),O.initAttributes(),O.enableAttribute(x),O.enableAttribute(w),O.disableUnusedAttributes(),O.disable(C.CULL_FACE),O.enable(C.BLEND),C.bindBuffer(C.ARRAY_BUFFER,S),C.vertexAttribPointer(x,2,C.FLOAT,!1,16,0),C.vertexAttribPointer(w,2,C.FLOAT,!1,16,8),C.bindBuffer(C.ELEMENT_ARRAY_BUFFER,M),C.uniformMatrix4fv(d,!1,c.projectionMatrix.elements),O.activeTexture(C.TEXTURE0),C.uniform1i(l,0),L=R=0,(N=s.fog)?(C.uniform3f(b,N.color.r,N.color.g,N.color.b),N.isFog?(C.uniform1f(g,N.near),C.uniform1f(y,N.far),C.uniform1i(m,1),L=R=1):N.isFogExp2&&(C.uniform1f(v,N.density),C.uniform1i(m,2),L=R=2)):(C.uniform1i(m,0),L=R=0);for(var N=0,I=e.length;N<I;N++){var D=e[N];D.modelViewMatrix.multiplyMatrices(c.matrixWorldInverse,D.matrixWorld),D.z=-D.modelViewMatrix.elements[14]}e.sort(r);for(var k=[],N=0,I=e.length;N<I;N++){var D=e[N],F=D.material;!1!==F.visible&&(C.uniform1f(_,F.alphaTest),C.uniformMatrix4fv(f,!1,D.modelViewMatrix.elements),D.matrixWorld.decompose(P,A,j),k[0]=j.x,k[1]=j.y,D=0,s.fog&&F.fog&&(D=L),R!==D&&(C.uniform1i(m,D),R=D),null!==F.map?(C.uniform2f(i,F.map.offset.x,F.map.offset.y),C.uniform2f(o,F.map.repeat.x,F.map.repeat.y)):(C.uniform2f(i,0,0),C.uniform2f(o,1,1)),C.uniform1f(p,F.opacity),C.uniform3f(h,F.color.r,F.color.g,F.color.b),C.uniform1f(a,F.rotation),C.uniform2fv(u,k),O.setBlending(F.blending,F.blendEquation,F.blendSrc,F.blendDst),O.setDepthTest(F.depthTest),O.setDepthWrite(F.depthWrite),F.map?t.setTexture2D(F.map,0):t.setTexture2D(T,0),C.drawElements(C.TRIANGLES,6,C.UNSIGNED_SHORT,0))}O.enable(C.CULL_FACE),t.resetGLState()}}}function q(){Object.defineProperty(this,"id",{value:di++}),this.uuid=ri.generateUUID(),this.name="",this.type="Material",this.lights=this.fog=!0,this.blending=1,this.side=0,this.shading=2,this.vertexColors=0,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendEquationAlpha=this.blendDstAlpha=this.blendSrcAlpha=null,this.depthFunc=3,this.depthWrite=this.depthTest=!0,this.clippingPlanes=null,this.clipShadows=this.clipIntersection=!1,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.alphaTest=this.polygonOffsetUnits=this.polygonOffsetFactor=0,this.premultipliedAlpha=!1,this.overdraw=0,this._needsUpdate=this.visible=!0}function X(t){q.call(this),this.type="ShaderMaterial",this.defines={},this.uniforms={},this.vertexShader="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",this.fragmentShader="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}",this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.morphNormals=this.morphTargets=this.skinning=this.clipping=this.lights=this.fog=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,void 0!==t&&(void 0!==t.attributes&&console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(t))}function Y(t){q.call(this),this.type="MeshDepthMaterial",
-this.depthPacking=3200,this.morphTargets=this.skinning=!1,this.displacementMap=this.alphaMap=this.map=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.lights=this.fog=!1,this.setValues(t)}function K(t,e){this.min=void 0!==t?t:new c(1/0,1/0,1/0),this.max=void 0!==e?e:new c(-(1/0),-(1/0),-(1/0))}function Z(t,e){this.center=void 0!==t?t:new c,this.radius=void 0!==e?e:0}function J(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]),0<arguments.length&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}function Q(t,e){this.normal=void 0!==t?t:new c(1,0,0),this.constant=void 0!==e?e:0}function tt(t,e,r,n,i,o){this.planes=[void 0!==t?t:new Q,void 0!==e?e:new Q,void 0!==r?r:new Q,void 0!==n?n:new Q,void 0!==i?i:new Q,void 0!==o?o:new Q]}function et(t,e,n,a){function s(e,r,n,i){var o,a=e.geometry;o=x;var s=e.customDepthMaterial;return n&&(o=w,s=e.customDistanceMaterial),s?o=s:(s=!1,r.morphTargets&&(a&&a.isBufferGeometry?s=a.morphAttributes&&a.morphAttributes.position&&0<a.morphAttributes.position.length:a&&a.isGeometry&&(s=a.morphTargets&&0<a.morphTargets.length)),e=e.isSkinnedMesh&&r.skinning,a=0,s&&(a|=1),e&&(a|=2),o=o[a]),t.localClippingEnabled&&!0===r.clipShadows&&0!==r.clippingPlanes.length&&(a=o.uuid,s=r.uuid,e=S[a],void 0===e&&(e={},S[a]=e),a=e[s],void 0===a&&(a=o.clone(),e[s]=a),o=a),o.visible=r.visible,o.wireframe=r.wireframe,s=r.side,R.renderSingleSided&&2==s&&(s=0),R.renderReverseSided&&(0===s?s=1:1===s&&(s=0)),o.side=s,o.clipShadows=r.clipShadows,o.clippingPlanes=r.clippingPlanes,o.wireframeLinewidth=r.wireframeLinewidth,o.linewidth=r.linewidth,n&&void 0!==o.uniforms.lightPos&&o.uniforms.lightPos.value.copy(i),o}function h(t,e,r){if(!1!==t.visible){0!=(t.layers.mask&e.layers.mask)&&(t.isMesh||t.isLine||t.isPoints)&&t.castShadow&&(!1===t.frustumCulled||!0===f.intersectsObject(t))&&!0===t.material.visible&&(t.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse,t.matrixWorld),_.push(t)),t=t.children;for(var n=0,i=t.length;n<i;n++)h(t[n],e,r)}}var l=t.context,p=t.state,f=new tt,d=new u,m=e.shadows,v=new r,g=new r(a.maxTextureSize,a.maxTextureSize),y=new c,b=new c,_=[],x=Array(4),w=Array(4),S={},M=[new c(1,0,0),new c(-1,0,0),new c(0,0,1),new c(0,0,-1),new c(0,1,0),new c(0,-1,0)],E=[new c(0,1,0),new c(0,1,0),new c(0,1,0),new c(0,1,0),new c(0,0,1),new c(0,0,-1)],T=[new i,new i,new i,new i,new i,new i];e=new Y,e.depthPacking=3201,e.clipping=!0,a=fi.distanceRGBA;for(var C=ui.clone(a.uniforms),O=0;4!==O;++O){var P=0!=(1&O),A=0!=(2&O),j=e.clone();j.morphTargets=P,j.skinning=A,x[O]=j,P=new X({defines:{USE_SHADOWMAP:""},uniforms:C,vertexShader:a.vertexShader,fragmentShader:a.fragmentShader,morphTargets:P,skinning:A,clipping:!0}),w[O]=P}var R=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1,this.renderSingleSided=this.renderReverseSided=!0,this.render=function(e,r){if(!1!==R.enabled&&(!1!==R.autoUpdate||!1!==R.needsUpdate)&&0!==m.length){p.buffers.color.setClear(1,1,1,1),p.disable(l.BLEND),p.setDepthTest(!0),p.setScissorTest(!1);for(var i,a,c=0,u=m.length;c<u;c++){var x=m[c],w=x.shadow;if(void 0===w)console.warn("THREE.WebGLShadowMap:",x,"has no shadow.");else{var S=w.camera;if(v.copy(w.mapSize),v.min(g),x&&x.isPointLight){i=6,a=!0;var C=v.x,O=v.y;T[0].set(2*C,O,C,O),T[1].set(0,O,C,O),T[2].set(3*C,O,C,O),T[3].set(C,O,C,O),T[4].set(3*C,0,C,O),T[5].set(C,0,C,O),v.x*=4,v.y*=2}else i=1,a=!1;for(null===w.map&&(w.map=new o(v.x,v.y,{minFilter:1003,magFilter:1003,format:1023}),S.updateProjectionMatrix()),w.isSpotLightShadow&&w.update(x),w&&w.isRectAreaLightShadow&&w.update(x),C=w.map,w=w.matrix,b.setFromMatrixPosition(x.matrixWorld),S.position.copy(b),t.setRenderTarget(C),t.clear(),C=0;C<i;C++){a?(y.copy(S.position),y.add(M[C]),S.up.copy(E[C]),S.lookAt(y),p.viewport(T[C])):(y.setFromMatrixPosition(x.target.matrixWorld),S.lookAt(y)),S.updateMatrixWorld(),S.matrixWorldInverse.getInverse(S.matrixWorld),w.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),w.multiply(S.projectionMatrix),w.multiply(S.matrixWorldInverse),d.multiplyMatrices(S.projectionMatrix,S.matrixWorldInverse),f.setFromMatrix(d),_.length=0,h(e,r,S);for(var O=0,P=_.length;O<P;O++){var A=_[O],j=n.update(A),L=A.material;if(L&&L.isMultiMaterial)for(var N=j.groups,L=L.materials,I=0,D=N.length;I<D;I++){var k=N[I],F=L[k.materialIndex];!0===F.visible&&(F=s(A,F,a,b),t.renderBufferDirect(S,null,j,F,A,k))}else F=s(A,L,a,b),t.renderBufferDirect(S,null,j,F,A,null)}}}}i=t.getClearColor(),a=t.getClearAlpha(),t.setClearColor(i,a),R.needsUpdate=!1}}}function rt(t,e){this.origin=void 0!==t?t:new c,this.direction=void 0!==e?e:new c}function nt(t,e,r,n){this._x=t||0,this._y=e||0,this._z=r||0,this._order=n||nt.DefaultOrder}function it(){this.mask=1}function ot(){Object.defineProperty(this,"id",{value:mi++}),this.uuid=ri.generateUUID(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=ot.DefaultUp.clone();var t=new c,e=new nt,r=new s,n=new c(1,1,1);e.onChange(function(){r.setFromEuler(e,!1)}),r.onChange(function(){e.setFromQuaternion(r,void 0,!1)}),Object.defineProperties(this,{position:{enumerable:!0,value:t},rotation:{enumerable:!0,value:e},quaternion:{enumerable:!0,value:r},scale:{enumerable:!0,value:n},modelViewMatrix:{value:new u},normalMatrix:{value:new J}}),this.matrix=new u,this.matrixWorld=new u,this.matrixAutoUpdate=ot.DefaultMatrixAutoUpdate,this.matrixWorldNeedsUpdate=!1,this.layers=new it,this.visible=!0,this.receiveShadow=this.castShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.userData={},this.onBeforeRender=function(){},this.onAfterRender=function(){}}function at(t,e){this.start=void 0!==t?t:new c,this.end=void 0!==e?e:new c}function st(t,e,r){this.a=void 0!==t?t:new c,this.b=void 0!==e?e:new c,this.c=void 0!==r?r:new c}function ct(t,e,r,n,i,o){this.a=t,this.b=e,this.c=r,this.normal=n&&n.isVector3?n:new c,this.vertexNormals=Array.isArray(n)?n:[],this.color=i&&i.isColor?i:new $,this.vertexColors=Array.isArray(i)?i:[],this.materialIndex=void 0!==o?o:0}function ut(t){q.call(this),this.type="MeshBasicMaterial",this.color=new $(16777215),this.lightMap=this.map=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.envMap=this.alphaMap=this.specularMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinejoin=this.wireframeLinecap="round",this.lights=this.morphTargets=this.skinning=!1,this.setValues(t)}function ht(t,e,r){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.uuid=ri.generateUUID(),this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===r,this.dynamic=!1,this.updateRange={offset:0,count:-1},this.onUploadCallback=function(){},this.version=0}function lt(t,e){ht.call(this,new Int8Array(t),e)}function pt(t,e){ht.call(this,new Uint8Array(t),e)}function ft(t,e){ht.call(this,new Uint8ClampedArray(t),e)}function dt(t,e){ht.call(this,new Int16Array(t),e)}function mt(t,e){ht.call(this,new Uint16Array(t),e)}function vt(t,e){ht.call(this,new Int32Array(t),e)}function gt(t,e){ht.call(this,new Uint32Array(t),e)}function yt(t,e){ht.call(this,new Float32Array(t),e)}function bt(t,e){ht.call(this,new Float64Array(t),e)}function _t(){this.indices=[],this.vertices=[],this.normals=[],this.colors=[],this.uvs=[],this.uvs2=[],this.groups=[],this.morphTargets={},this.skinWeights=[],this.skinIndices=[],this.boundingSphere=this.boundingBox=null,this.groupsNeedUpdate=this.uvsNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.verticesNeedUpdate=!1}function xt(){Object.defineProperty(this,"id",{value:vi++}),this.uuid=ri.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingSphere=this.boundingBox=null,this.groupsNeedUpdate=this.lineDistancesNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.uvsNeedUpdate=this.verticesNeedUpdate=this.elementsNeedUpdate=!1}function wt(){Object.defineProperty(this,"id",{value:vi++}),this.uuid=ri.generateUUID(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingSphere=this.boundingBox=null,this.drawRange={start:0,count:1/0}}function St(t,e){ot.call(this),this.type="Mesh",this.geometry=void 0!==t?t:new wt,this.material=void 0!==e?e:new ut({color:16777215*Math.random()}),this.drawMode=0,this.updateMorphTargets()}function Mt(t,e,r,n,i,o){function a(t,e,r,n,i,o,a,u,h,_,x){var w=o/h,S=a/_,M=o/2,E=a/2,T=u/2;a=h+1;for(var C=_+1,O=o=0,P=new c,A=0;A<C;A++)for(var j=A*S-E,R=0;R<a;R++)P[t]=(R*w-M)*n,P[e]=j*i,P[r]=T,p[m]=P.x,p[m+1]=P.y,p[m+2]=P.z,P[t]=0,P[e]=0,P[r]=0<u?1:-1,f[m]=P.x,f[m+1]=P.y,f[m+2]=P.z,d[v]=R/h,d[v+1]=1-A/_,m+=3,v+=2,o+=1;for(A=0;A<_;A++)for(R=0;R<h;R++)t=y+R+a*(A+1),e=y+(R+1)+a*(A+1),r=y+(R+1)+a*A,l[g]=y+R+a*A,l[g+1]=t,l[g+2]=r,l[g+3]=t,l[g+4]=e,l[g+5]=r,g+=6,O+=6;s.addGroup(b,O,x),b+=O,y+=o}wt.call(this),this.type="BoxBufferGeometry",this.parameters={width:t,height:e,depth:r,widthSegments:n,heightSegments:i,depthSegments:o};var s=this;n=Math.floor(n)||1,i=Math.floor(i)||1,o=Math.floor(o)||1;var u=function(t,e,r){return t=0+(t+1)*(e+1)*2+(t+1)*(r+1)*2+(r+1)*(e+1)*2}(n,i,o),h=function(t,e,r){return 6*(t=0+t*e*2+t*r*2+r*e*2)}(n,i,o),l=new(65535<h?Uint32Array:Uint16Array)(h),p=new Float32Array(3*u),f=new Float32Array(3*u),d=new Float32Array(2*u),m=0,v=0,g=0,y=0,b=0;a("z","y","x",-1,-1,r,e,t,o,i,0),a("z","y","x",1,-1,r,e,-t,o,i,1),a("x","z","y",1,1,t,r,e,n,o,2),a("x","z","y",1,-1,t,r,-e,n,o,3),a("x","y","z",1,-1,t,e,r,n,i,4),a("x","y","z",-1,-1,t,e,-r,n,i,5),this.setIndex(new ht(l,1)),this.addAttribute("position",new ht(p,3)),this.addAttribute("normal",new ht(f,3)),this.addAttribute("uv",new ht(d,2))}function Et(t,e,r,n){wt.call(this),this.type="PlaneBufferGeometry",this.parameters={width:t,height:e,widthSegments:r,heightSegments:n};var i=t/2,o=e/2;r=Math.floor(r)||1,n=Math.floor(n)||1;var a=r+1,s=n+1,c=t/r,u=e/n;e=new Float32Array(a*s*3),t=new Float32Array(a*s*3);for(var h=new Float32Array(a*s*2),l=0,p=0,f=0;f<s;f++)for(var d=f*u-o,m=0;m<a;m++)e[l]=m*c-i,e[l+1]=-d,t[l+2]=1,h[p]=m/r,h[p+1]=1-f/n,l+=3,p+=2;for(l=0,i=new(65535<e.length/3?Uint32Array:Uint16Array)(r*n*6),f=0;f<n;f++)for(m=0;m<r;m++)o=m+a*(f+1),s=m+1+a*(f+1),c=m+1+a*f,i[l]=m+a*f,i[l+1]=o,i[l+2]=c,i[l+3]=o,i[l+4]=s,i[l+5]=c,l+=6;this.setIndex(new ht(i,1)),this.addAttribute("position",new ht(e,3)),this.addAttribute("normal",new ht(t,3)),this.addAttribute("uv",new ht(h,2))}function Tt(){ot.call(this),this.type="Camera",this.matrixWorldInverse=new u,this.projectionMatrix=new u}function Ct(t,e,r,n){Tt.call(this),this.type="PerspectiveCamera",this.fov=void 0!==t?t:50,this.zoom=1,this.near=void 0!==r?r:.1,this.far=void 0!==n?n:2e3,this.focus=10,this.aspect=void 0!==e?e:1,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}function Ot(t,e,r,n,i,o){Tt.call(this),this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=r,this.bottom=n,this.near=void 0!==i?i:.1,this.far=void 0!==o?o:2e3,this.updateProjectionMatrix()}function Pt(t,e,r){var n,i,o;return{setMode:function(t){n=t},setIndex:function(r){r.array instanceof Uint32Array&&e.get("OES_element_index_uint")?(i=t.UNSIGNED_INT,o=4):r.array instanceof Uint16Array?(i=t.UNSIGNED_SHORT,o=2):(i=t.UNSIGNED_BYTE,o=1)},render:function(e,a){t.drawElements(n,a,i,e*o),r.calls++,r.vertices+=a,n===t.TRIANGLES&&(r.faces+=a/3)},renderInstances:function(a,s,c){var u=e.get("ANGLE_instanced_arrays");null===u?console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."):(u.drawElementsInstancedANGLE(n,c,i,s*o,a.maxInstancedCount),r.calls++,r.vertices+=c*a.maxInstancedCount,n===t.TRIANGLES&&(r.faces+=a.maxInstancedCount*c/3))}}}function At(t,e,r){var n;return{setMode:function(t){n=t},render:function(e,i){t.drawArrays(n,e,i),r.calls++,r.vertices+=i,n===t.TRIANGLES&&(r.faces+=i/3)},renderInstances:function(i){var o=e.get("ANGLE_instanced_arrays");if(null===o)console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{var a=i.attributes.position,a=a.isInterleavedBufferAttribute?a.data.count:a.count;o.drawArraysInstancedANGLE(n,0,a,i.maxInstancedCount),r.calls++,r.vertices+=a*i.maxInstancedCount,n===t.TRIANGLES&&(r.faces+=i.maxInstancedCount*a/3)}}}}function jt(){var t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];var n;switch(e.type){case"DirectionalLight":n={direction:new c,color:new $,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new r};break;case"SpotLight":n={position:new c,direction:new c,color:new $,distance:0,coneCos:0,penumbraCos:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new r};break;case"PointLight":n={position:new c,color:new $,distance:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new r};break;case"HemisphereLight":n={direction:new c,skyColor:new $,groundColor:new $};break;case"RectAreaLight":n={color:new $,position:new c,halfWidth:new c,halfHeight:new c}}return t[e.id]=n}}}function Rt(t){t=t.split("\n");for(var e=0;e<t.length;e++)t[e]=e+1+": "+t[e];return t.join("\n")}function Lt(t,e,r){var n=t.createShader(e);return t.shaderSource(n,r),t.compileShader(n),!1===t.getShaderParameter(n,t.COMPILE_STATUS)&&console.error("THREE.WebGLShader: Shader couldn't compile."),""!==t.getShaderInfoLog(n)&&console.warn("THREE.WebGLShader: gl.getShaderInfoLog()",e===t.VERTEX_SHADER?"vertex":"fragment",t.getShaderInfoLog(n),Rt(r)),n}function Nt(t){switch(t){case 3e3:return["Linear","( value )"];case 3001:return["sRGB","( value )"];case 3002:return["RGBE","( value )"];case 3004:return["RGBM","( value, 7.0 )"];case 3005:return["RGBM","( value, 16.0 )"];case 3006:return["RGBD","( value, 256.0 )"];case 3007:return["Gamma","( value, float( GAMMA_FACTOR ) )"];default:throw Error("unsupported encoding: "+t)}}function It(t,e){var r=Nt(e);return"vec4 "+t+"( vec4 value ) { return "+r[0]+"ToLinear"+r[1]+"; }"}function Dt(t,e){var r=Nt(e);return"vec4 "+t+"( vec4 value ) { return LinearTo"+r[0]+r[1]+"; }"}function kt(t,e){var r;switch(e){case 1:r="Linear";break;case 2:r="Reinhard";break;case 3:r="Uncharted2";break;case 4:r="OptimizedCineon";break;default:throw Error("unsupported toneMapping: "+e)}return"vec3 "+t+"( vec3 color ) { return "+r+"ToneMapping( color ); }"}function Ft(t,e,r){return t=t||{},[t.derivatives||e.envMapCubeUV||e.bumpMap||e.normalMap||e.flatShading?"#extension GL_OES_standard_derivatives : enable":"",(t.fragDepth||e.logarithmicDepthBuffer)&&r.get("EXT_frag_depth")?"#extension GL_EXT_frag_depth : enable":"",t.drawBuffers&&r.get("WEBGL_draw_buffers")?"#extension GL_EXT_draw_buffers : require":"",(t.shaderTextureLOD||e.envMap)&&r.get("EXT_shader_texture_lod")?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Bt).join("\n")}function Ut(t){var e,r=[];for(e in t){var n=t[e];!1!==n&&r.push("#define "+e+" "+n)}return r.join("\n")}function Bt(t){return""!==t}function zt(t,e){return t.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights)}function $t(t){return t.replace(/#include +<([\w\d.]+)>/g,function(t,e){var r=hi[e];if(void 0===r)throw Error("Can not resolve #include <"+e+">");return $t(r)})}function Gt(t){return t.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(t,e,r,n){for(t="",e=parseInt(e);e<parseInt(r);e++)t+=n.replace(/\[ i \]/g,"[ "+e+" ]");return t})}function Vt(t,e,r,n){var i=t.context,o=r.extensions,a=r.defines,s=r.__webglShader.vertexShader,c=r.__webglShader.fragmentShader,u="SHADOWMAP_TYPE_BASIC";1===n.shadowMapType?u="SHADOWMAP_TYPE_PCF":2===n.shadowMapType&&(u="SHADOWMAP_TYPE_PCF_SOFT");var h="ENVMAP_TYPE_CUBE",l="ENVMAP_MODE_REFLECTION",p="ENVMAP_BLENDING_MULTIPLY";if(n.envMap){switch(r.envMap.mapping){case 301:case 302:h="ENVMAP_TYPE_CUBE";break;case 306:case 307:h="ENVMAP_TYPE_CUBE_UV";break;case 303:case 304:h="ENVMAP_TYPE_EQUIREC";break;case 305:h="ENVMAP_TYPE_SPHERE"}switch(r.envMap.mapping){case 302:case 304:l="ENVMAP_MODE_REFRACTION"}switch(r.combine){case 0:p="ENVMAP_BLENDING_MULTIPLY";break;case 1:p="ENVMAP_BLENDING_MIX";break;case 2:p="ENVMAP_BLENDING_ADD"}}var f=0<t.gammaFactor?t.gammaFactor:1,o=Ft(o,n,t.extensions),d=Ut(a),m=i.createProgram();r.isRawShaderMaterial?(a=[d,"\n"].filter(Bt).join("\n"),u=[o,d,"\n"].filter(Bt).join("\n")):(a=["precision "+n.precision+" float;","precision "+n.precision+" int;","#define SHADER_NAME "+r.__webglShader.name,d,n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+f,"#define MAX_BONES "+n.maxBones,n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+l:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.vertexColors?"#define USE_COLOR":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"","#define NUM_CLIPPING_PLANES "+n.numClippingPlanes,n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+u:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&t.extensions.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Bt).join("\n"),u=[o,"precision "+n.precision+" float;","precision "+n.precision+" int;","#define SHADER_NAME "+r.__webglShader.name,d,n.alphaTest?"#define ALPHATEST "+n.alphaTest:"","#define GAMMA_FACTOR "+f,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+h:"",n.envMap?"#define "+l:"",n.envMap?"#define "+p:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.vertexColors?"#define USE_COLOR":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"","#define NUM_CLIPPING_PLANES "+n.numClippingPlanes,"#define UNION_CLIPPING_PLANES "+(n.numClippingPlanes-n.numClipIntersection),n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+u:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&t.extensions.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"",n.envMap&&t.extensions.get("EXT_shader_texture_lod")?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?hi.tonemapping_pars_fragment:"",0!==n.toneMapping?kt("toneMapping",n.toneMapping):"",n.outputEncoding||n.mapEncoding||n.envMapEncoding||n.emissiveMapEncoding?hi.encodings_pars_fragment:"",n.mapEncoding?It("mapTexelToLinear",n.mapEncoding):"",n.envMapEncoding?It("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMapEncoding?It("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.outputEncoding?Dt("linearToOutputTexel",n.outputEncoding):"",n.depthPacking?"#define DEPTH_PACKING "+r.depthPacking:"","\n"].filter(Bt).join("\n")),s=$t(s,n),s=zt(s,n),c=$t(c,n),c=zt(c,n),r.isShaderMaterial||(s=Gt(s),c=Gt(c)),c=u+c,s=Lt(i,i.VERTEX_SHADER,a+s),c=Lt(i,i.FRAGMENT_SHADER,c),i.attachShader(m,s),i.attachShader(m,c),void 0!==r.index0AttributeName?i.bindAttribLocation(m,0,r.index0AttributeName):!0===n.morphTargets&&i.bindAttribLocation(m,0,"position"),i.linkProgram(m),n=i.getProgramInfoLog(m),h=i.getShaderInfoLog(s),l=i.getShaderInfoLog(c),f=p=!0,!1===i.getProgramParameter(m,i.LINK_STATUS)?(p=!1,console.error("THREE.WebGLProgram: shader error: ",i.getError(),"gl.VALIDATE_STATUS",i.getProgramParameter(m,i.VALIDATE_STATUS),"gl.getProgramInfoLog",n,h,l)):""!==n?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",n):""!==h&&""!==l||(f=!1),f&&(this.diagnostics={runnable:p,material:r,programLog:n,vertexShader:{log:h,prefix:a},fragmentShader:{log:l,prefix:u}}),i.deleteShader(s),i.deleteShader(c);var v;this.getUniforms=function(){return void 0===v&&(v=new z(i,m,t)),v};var g;return this.getAttributes=function(){if(void 0===g){for(var t={},e=i.getProgramParameter(m,i.ACTIVE_ATTRIBUTES),r=0;r<e;r++){var n=i.getActiveAttrib(m,r).name;t[n]=i.getAttribLocation(m,n)}g=t}return g},this.destroy=function(){i.deleteProgram(m),this.program=void 0},Object.defineProperties(this,{uniforms:{get:function(){return console.warn("THREE.WebGLProgram: .uniforms is now .getUniforms()."),this.getUniforms()}},attributes:{get:function(){return console.warn("THREE.WebGLProgram: .attributes is now .getAttributes()."),this.getAttributes()}}}),this.id=gi++,this.code=e,this.usedTimes=1,this.program=m,this.vertexShader=s,this.fragmentShader=c,this}function Ht(t,e){function r(t,e){var r;return t?t.isTexture?r=t.encoding:t.isWebGLRenderTarget&&(console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."),r=t.texture.encoding):r=3e3,3e3===r&&e&&(r=3007),r}var n=[],i={MeshDepthMaterial:"depth",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"phong",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points"},o="precision supportsVertexTextures map mapEncoding envMap envMapMode envMapEncoding lightMap aoMap emissiveMap emissiveMapEncoding bumpMap normalMap displacementMap specularMap roughnessMap metalnessMap gradientMap alphaMap combine vertexColors fog useFog fogExp flatShading sizeAttenuation logarithmicDepthBuffer skinning maxBones useVertexTexture morphTargets morphNormals maxMorphTargets maxMorphNormals premultipliedAlpha numDirLights numPointLights numSpotLights numHemiLights numRectAreaLights shadowMapEnabled shadowMapType toneMapping physicallyCorrectLights alphaTest doubleSided flipSided numClippingPlanes numClipIntersection depthPacking".split(" ");this.getParameters=function(n,o,a,s,c,u){var h,l=i[n.type];e.floatVertexTextures&&u&&u.skeleton&&u.skeleton.useVertexTexture?h=1024:(h=Math.floor((e.maxVertexUniforms-20)/4),void 0!==u&&u&&u.isSkinnedMesh&&(h=Math.min(u.skeleton.bones.length,h))<u.skeleton.bones.length&&console.warn("WebGLRenderer: too many bones - "+u.skeleton.bones.length+", this GPU supports just "+h+" (try OpenGL instead of ANGLE)"));var p=t.getPrecision();null!==n.precision&&(p=e.getMaxPrecision(n.precision))!==n.precision&&console.warn("THREE.WebGLProgram.getParameters:",n.precision,"not supported, using",p,"instead.");var f=t.getCurrentRenderTarget();return{shaderID:l,precision:p,supportsVertexTextures:e.vertexTextures,outputEncoding:r(f?f.texture:null,t.gammaOutput),map:!!n.map,mapEncoding:r(n.map,t.gammaInput),envMap:!!n.envMap,envMapMode:n.envMap&&n.envMap.mapping,envMapEncoding:r(n.envMap,t.gammaInput),envMapCubeUV:!!n.envMap&&(306===n.envMap.mapping||307===n.envMap.mapping),lightMap:!!n.lightMap,aoMap:!!n.aoMap,emissiveMap:!!n.emissiveMap,emissiveMapEncoding:r(n.emissiveMap,t.gammaInput),bumpMap:!!n.bumpMap,normalMap:!!n.normalMap,displacementMap:!!n.displacementMap,roughnessMap:!!n.roughnessMap,metalnessMap:!!n.metalnessMap,specularMap:!!n.specularMap,alphaMap:!!n.alphaMap,gradientMap:!!n.gradientMap,combine:n.combine,vertexColors:n.vertexColors,fog:!!a,useFog:n.fog,fogExp:a&&a.isFogExp2,flatShading:1===n.shading,sizeAttenuation:n.sizeAttenuation,logarithmicDepthBuffer:e.logarithmicDepthBuffer,skinning:n.skinning,maxBones:h,useVertexTexture:e.floatVertexTextures&&u&&u.skeleton&&u.skeleton.useVertexTexture,morphTargets:n.morphTargets,morphNormals:n.morphNormals,maxMorphTargets:t.maxMorphTargets,maxMorphNormals:t.maxMorphNormals,numDirLights:o.directional.length,numPointLights:o.point.length,numSpotLights:o.spot.length,numRectAreaLights:o.rectArea.length,numHemiLights:o.hemi.length,numClippingPlanes:s,numClipIntersection:c,shadowMapEnabled:t.shadowMap.enabled&&u.receiveShadow&&0<o.shadows.length,shadowMapType:t.shadowMap.type,toneMapping:t.toneMapping,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:n.premultipliedAlpha,alphaTest:n.alphaTest,doubleSided:2===n.side,flipSided:1===n.side,depthPacking:void 0!==n.depthPacking&&n.depthPacking}},this.getProgramCode=function(t,e){var r=[];if(e.shaderID?r.push(e.shaderID):(r.push(t.fragmentShader),r.push(t.vertexShader)),void 0!==t.defines)for(var n in t.defines)r.push(n),r.push(t.defines[n]);for(n=0;n<o.length;n++)r.push(e[o[n]]);return r.join()},this.acquireProgram=function(e,r,i){for(var o,a=0,s=n.length;a<s;a++){var c=n[a];if(c.code===i){o=c,++o.usedTimes;break}}return void 0===o&&(o=new Vt(t,i,e,r),n.push(o)),o},this.releaseProgram=function(t){if(0==--t.usedTimes){var e=n.indexOf(t);n[e]=n[n.length-1],n.pop(),t.destroy()}},this.programs=n}function Wt(t,e,r){function n(t){var a=t.target;t=o[a.id],null!==t.index&&i(t.index);var s,c=t.attributes;for(s in c)i(c[s]);a.removeEventListener("dispose",n),delete o[a.id],s=e.get(a),s.wireframe&&i(s.wireframe),e.delete(a),a=e.get(t),a.wireframe&&i(a.wireframe),e.delete(t),r.memory.geometries--}function i(r){var n;void 0!==(n=r.isInterleavedBufferAttribute?e.get(r.data).__webglBuffer:e.get(r).__webglBuffer)&&(t.deleteBuffer(n),r.isInterleavedBufferAttribute?e.delete(r.data):e.delete(r))}var o={};return{get:function(t){var e=t.geometry;if(void 0!==o[e.id])return o[e.id];e.addEventListener("dispose",n);var i;return e.isBufferGeometry?i=e:e.isGeometry&&(void 0===e._bufferGeometry&&(e._bufferGeometry=(new wt).setFromObject(t)),i=e._bufferGeometry),o[e.id]=i,r.memory.geometries++,i}}}function qt(t,e,r){function n(r,n){var i=r.isInterleavedBufferAttribute?r.data:r,o=e.get(i);if(void 0===o.__webglBuffer){o.__webglBuffer=t.createBuffer(),t.bindBuffer(n,o.__webglBuffer),t.bufferData(n,i.array,i.dynamic?t.DYNAMIC_DRAW:t.STATIC_DRAW);var a=t.FLOAT,s=i.array;s instanceof Float32Array?a=t.FLOAT:s instanceof Float64Array?console.warn("Unsupported data buffer format: Float64Array"):s instanceof Uint16Array?a=t.UNSIGNED_SHORT:s instanceof Int16Array?a=t.SHORT:s instanceof Uint32Array?a=t.UNSIGNED_INT:s instanceof Int32Array?a=t.INT:s instanceof Int8Array?a=t.BYTE:s instanceof Uint8Array&&(a=t.UNSIGNED_BYTE),o.bytesPerElement=s.BYTES_PER_ELEMENT,o.type=a,o.version=i.version,i.onUploadCallback()}else o.version!==i.version&&(t.bindBuffer(n,o.__webglBuffer),!1===i.dynamic?t.bufferData(n,i.array,t.STATIC_DRAW):-1===i.updateRange.count?t.bufferSubData(n,0,i.array):0===i.updateRange.count?console.error("THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually."):(t.bufferSubData(n,i.updateRange.offset*i.array.BYTES_PER_ELEMENT,i.array.subarray(i.updateRange.offset,i.updateRange.offset+i.updateRange.count)),i.updateRange.count=0),o.version=i.version)}var i=new Wt(t,e,r);return{getAttributeBuffer:function(t){return t.isInterleavedBufferAttribute?e.get(t.data).__webglBuffer:e.get(t).__webglBuffer},getAttributeProperties:function(t){return t.isInterleavedBufferAttribute?e.get(t.data):e.get(t)},getWireframeAttribute:function(r){var i=e.get(r);if(void 0!==i.wireframe)return i.wireframe;var o=[],a=r.index,s=r.attributes;if(r=s.position,null!==a)for(var a=a.array,s=0,c=a.length;s<c;s+=3){var u=a[s+0],h=a[s+1],l=a[s+2];o.push(u,h,h,l,l,u)}else for(a=s.position.array,s=0,c=a.length/3-1;s<c;s+=3)u=s+0,h=s+1,l=s+2,o.push(u,h,h,l,l,u);return o=new ht(new(65535<r.count?Uint32Array:Uint16Array)(o),1),n(o,t.ELEMENT_ARRAY_BUFFER),i.wireframe=o},update:function(e){var r=i.get(e);e.geometry.isGeometry&&r.updateFromObject(e),e=r.index;var o=r.attributes;null!==e&&n(e,t.ELEMENT_ARRAY_BUFFER);for(var a in o)n(o[a],t.ARRAY_BUFFER);e=r.morphAttributes;for(a in e)for(var o=e[a],s=0,c=o.length;s<c;s++)n(o[s],t.ARRAY_BUFFER);return r}}}function Xt(t,e,r,n,i,o,a){function s(t,e){if(t.width>e||t.height>e){var r=e/Math.max(t.width,t.height),n=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");return n.width=Math.floor(t.width*r),n.height=Math.floor(t.height*r),n.getContext("2d").drawImage(t,0,0,t.width,t.height,0,0,n.width,n.height),console.warn("THREE.WebGLRenderer: image is too big ("+t.width+"x"+t.height+"). Resized to "+n.width+"x"+n.height,t),n}return t}function c(t){return ri.isPowerOfTwo(t.width)&&ri.isPowerOfTwo(t.height)}function u(e){return 1003===e||1004===e||1005===e?t.NEAREST:t.LINEAR}function h(e){e=e.target,e.removeEventListener("dispose",h);t:{var r=n.get(e);if(e.image&&r.__image__webglTextureCube)t.deleteTexture(r.__image__webglTextureCube);else{if(void 0===r.__webglInit)break t;t.deleteTexture(r.__webglTexture)}n.delete(e)}v.textures--}function l(e){e=e.target,e.removeEventListener("dispose",l);var r=n.get(e),i=n.get(e.texture);if(e){if(void 0!==i.__webglTexture&&t.deleteTexture(i.__webglTexture),e.depthTexture&&e.depthTexture.dispose(),e.isWebGLRenderTargetCube)for(i=0;6>i;i++)t.deleteFramebuffer(r.__webglFramebuffer[i]),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer[i]);else t.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer);n.delete(e.texture),n.delete(e)}v.textures--}function p(e,a){var u=n.get(e);if(0<e.version&&u.__version!==e.version){var l=e.image;if(void 0===l)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined",e);else{if(!1!==l.complete){void 0===u.__webglInit&&(u.__webglInit=!0,e.addEventListener("dispose",h),u.__webglTexture=t.createTexture(),v.textures++),r.activeTexture(t.TEXTURE0+a),r.bindTexture(t.TEXTURE_2D,u.__webglTexture),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,e.flipY),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,e.premultiplyAlpha),
-t.pixelStorei(t.UNPACK_ALIGNMENT,e.unpackAlignment);var p=s(e.image,i.maxTextureSize);if((1001!==e.wrapS||1001!==e.wrapT||1003!==e.minFilter&&1006!==e.minFilter)&&!1===c(p))if((l=p)instanceof HTMLImageElement||l instanceof HTMLCanvasElement){var d=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");d.width=ri.nearestPowerOfTwo(l.width),d.height=ri.nearestPowerOfTwo(l.height),d.getContext("2d").drawImage(l,0,0,d.width,d.height),console.warn("THREE.WebGLRenderer: image is not power of two ("+l.width+"x"+l.height+"). Resized to "+d.width+"x"+d.height,l),p=d}else p=l;var l=c(p),d=o(e.format),m=o(e.type);f(t.TEXTURE_2D,e,l);var y=e.mipmaps;if(e.isDepthTexture){if(y=t.DEPTH_COMPONENT,1015===e.type){if(!g)throw Error("Float Depth Texture only supported in WebGL2.0");y=t.DEPTH_COMPONENT32F}else g&&(y=t.DEPTH_COMPONENT16);1026===e.format&&y===t.DEPTH_COMPONENT&&1012!==e.type&&1014!==e.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),e.type=1012,m=o(e.type)),1027===e.format&&(y=t.DEPTH_STENCIL,1020!==e.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),e.type=1020,m=o(e.type))),r.texImage2D(t.TEXTURE_2D,0,y,p.width,p.height,0,d,m,null)}else if(e.isDataTexture)if(0<y.length&&l){for(var b=0,_=y.length;b<_;b++)p=y[b],r.texImage2D(t.TEXTURE_2D,b,d,p.width,p.height,0,d,m,p.data);e.generateMipmaps=!1}else r.texImage2D(t.TEXTURE_2D,0,d,p.width,p.height,0,d,m,p.data);else if(e.isCompressedTexture)for(b=0,_=y.length;b<_;b++)p=y[b],1023!==e.format&&1022!==e.format?-1<r.getCompressedTextureFormats().indexOf(d)?r.compressedTexImage2D(t.TEXTURE_2D,b,d,p.width,p.height,0,p.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):r.texImage2D(t.TEXTURE_2D,b,d,p.width,p.height,0,d,m,p.data);else if(0<y.length&&l){for(b=0,_=y.length;b<_;b++)p=y[b],r.texImage2D(t.TEXTURE_2D,b,d,d,m,p);e.generateMipmaps=!1}else r.texImage2D(t.TEXTURE_2D,0,d,d,m,p);return e.generateMipmaps&&l&&t.generateMipmap(t.TEXTURE_2D),u.__version=e.version,void(e.onUpdate&&e.onUpdate(e))}console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete",e)}}r.activeTexture(t.TEXTURE0+a),r.bindTexture(t.TEXTURE_2D,u.__webglTexture)}function f(r,a,s){s?(t.texParameteri(r,t.TEXTURE_WRAP_S,o(a.wrapS)),t.texParameteri(r,t.TEXTURE_WRAP_T,o(a.wrapT)),t.texParameteri(r,t.TEXTURE_MAG_FILTER,o(a.magFilter)),t.texParameteri(r,t.TEXTURE_MIN_FILTER,o(a.minFilter))):(t.texParameteri(r,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(r,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),1001===a.wrapS&&1001===a.wrapT||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.",a),t.texParameteri(r,t.TEXTURE_MAG_FILTER,u(a.magFilter)),t.texParameteri(r,t.TEXTURE_MIN_FILTER,u(a.minFilter)),1003!==a.minFilter&&1006!==a.minFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.",a)),!(s=e.get("EXT_texture_filter_anisotropic"))||1015===a.type&&null===e.get("OES_texture_float_linear")||1016===a.type&&null===e.get("OES_texture_half_float_linear")||!(1<a.anisotropy||n.get(a).__currentAnisotropy)||(t.texParameterf(r,s.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,i.getMaxAnisotropy())),n.get(a).__currentAnisotropy=a.anisotropy)}function d(e,i,a,s){var c=o(i.texture.format),u=o(i.texture.type);r.texImage2D(s,0,c,i.width,i.height,0,c,u,null),t.bindFramebuffer(t.FRAMEBUFFER,e),t.framebufferTexture2D(t.FRAMEBUFFER,a,s,n.get(i.texture).__webglTexture,0),t.bindFramebuffer(t.FRAMEBUFFER,null)}function m(e,r){t.bindRenderbuffer(t.RENDERBUFFER,e),r.depthBuffer&&!r.stencilBuffer?(t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,r.width,r.height),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,e)):r.depthBuffer&&r.stencilBuffer?(t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,r.width,r.height),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,e)):t.renderbufferStorage(t.RENDERBUFFER,t.RGBA4,r.width,r.height),t.bindRenderbuffer(t.RENDERBUFFER,null)}var v=a.memory,g="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext;this.setTexture2D=p,this.setTextureCube=function(e,a){var u=n.get(e);if(6===e.image.length)if(0<e.version&&u.__version!==e.version){u.__image__webglTextureCube||(e.addEventListener("dispose",h),u.__image__webglTextureCube=t.createTexture(),v.textures++),r.activeTexture(t.TEXTURE0+a),r.bindTexture(t.TEXTURE_CUBE_MAP,u.__image__webglTextureCube),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,e.flipY);for(var l=e&&e.isCompressedTexture,p=e.image[0]&&e.image[0].isDataTexture,d=[],m=0;6>m;m++)d[m]=l||p?p?e.image[m].image:e.image[m]:s(e.image[m],i.maxCubemapSize);var g=c(d[0]),y=o(e.format),b=o(e.type);for(f(t.TEXTURE_CUBE_MAP,e,g),m=0;6>m;m++)if(l)for(var _,x=d[m].mipmaps,w=0,S=x.length;w<S;w++)_=x[w],1023!==e.format&&1022!==e.format?-1<r.getCompressedTextureFormats().indexOf(y)?r.compressedTexImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+m,w,y,_.width,_.height,0,_.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):r.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+m,w,y,_.width,_.height,0,y,b,_.data);else p?r.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+m,0,y,d[m].width,d[m].height,0,y,b,d[m].data):r.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+m,0,y,y,b,d[m]);e.generateMipmaps&&g&&t.generateMipmap(t.TEXTURE_CUBE_MAP),u.__version=e.version,e.onUpdate&&e.onUpdate(e)}else r.activeTexture(t.TEXTURE0+a),r.bindTexture(t.TEXTURE_CUBE_MAP,u.__image__webglTextureCube)},this.setTextureCubeDynamic=function(e,i){r.activeTexture(t.TEXTURE0+i),r.bindTexture(t.TEXTURE_CUBE_MAP,n.get(e).__webglTexture)},this.setupRenderTarget=function(e){var i=n.get(e),o=n.get(e.texture);e.addEventListener("dispose",l),o.__webglTexture=t.createTexture(),v.textures++;var a=!0===e.isWebGLRenderTargetCube,s=c(e);if(a){i.__webglFramebuffer=[];for(var u=0;6>u;u++)i.__webglFramebuffer[u]=t.createFramebuffer()}else i.__webglFramebuffer=t.createFramebuffer();if(a){for(r.bindTexture(t.TEXTURE_CUBE_MAP,o.__webglTexture),f(t.TEXTURE_CUBE_MAP,e.texture,s),u=0;6>u;u++)d(i.__webglFramebuffer[u],e,t.COLOR_ATTACHMENT0,t.TEXTURE_CUBE_MAP_POSITIVE_X+u);e.texture.generateMipmaps&&s&&t.generateMipmap(t.TEXTURE_CUBE_MAP),r.bindTexture(t.TEXTURE_CUBE_MAP,null)}else r.bindTexture(t.TEXTURE_2D,o.__webglTexture),f(t.TEXTURE_2D,e.texture,s),d(i.__webglFramebuffer,e,t.COLOR_ATTACHMENT0,t.TEXTURE_2D),e.texture.generateMipmaps&&s&&t.generateMipmap(t.TEXTURE_2D),r.bindTexture(t.TEXTURE_2D,null);if(e.depthBuffer){if(i=n.get(e),o=!0===e.isWebGLRenderTargetCube,e.depthTexture){if(o)throw Error("target.depthTexture not supported in Cube render targets");if(e&&e.isWebGLRenderTargetCube)throw Error("Depth Texture with cube render targets is not supported!");if(t.bindFramebuffer(t.FRAMEBUFFER,i.__webglFramebuffer),!e.depthTexture||!e.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");if(n.get(e.depthTexture).__webglTexture&&e.depthTexture.image.width===e.width&&e.depthTexture.image.height===e.height||(e.depthTexture.image.width=e.width,e.depthTexture.image.height=e.height,e.depthTexture.needsUpdate=!0),p(e.depthTexture,0),i=n.get(e.depthTexture).__webglTexture,1026===e.depthTexture.format)t.framebufferTexture2D(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.TEXTURE_2D,i,0);else{if(1027!==e.depthTexture.format)throw Error("Unknown depthTexture format");t.framebufferTexture2D(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.TEXTURE_2D,i,0)}}else if(o)for(i.__webglDepthbuffer=[],o=0;6>o;o++)t.bindFramebuffer(t.FRAMEBUFFER,i.__webglFramebuffer[o]),i.__webglDepthbuffer[o]=t.createRenderbuffer(),m(i.__webglDepthbuffer[o],e);else t.bindFramebuffer(t.FRAMEBUFFER,i.__webglFramebuffer),i.__webglDepthbuffer=t.createRenderbuffer(),m(i.__webglDepthbuffer,e);t.bindFramebuffer(t.FRAMEBUFFER,null)}},this.updateRenderTargetMipmap=function(e){var i=e.texture;i.generateMipmaps&&c(e)&&1003!==i.minFilter&&1006!==i.minFilter&&(e=e&&e.isWebGLRenderTargetCube?t.TEXTURE_CUBE_MAP:t.TEXTURE_2D,i=n.get(i).__webglTexture,r.bindTexture(e,i),t.generateMipmap(e),r.bindTexture(e,null))}}function Yt(){var t={};return{get:function(e){e=e.uuid;var r=t[e];return void 0===r&&(r={},t[e]=r),r},delete:function(e){delete t[e.uuid]},clear:function(){t={}}}}function Kt(t,e,r){function n(e,r,n){var i=new Uint8Array(4),o=t.createTexture();for(t.bindTexture(e,o),t.texParameteri(e,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(e,t.TEXTURE_MAG_FILTER,t.NEAREST),e=0;e<n;e++)t.texImage2D(r+e,0,t.RGBA,1,1,0,t.RGBA,t.UNSIGNED_BYTE,i);return o}function o(e){!0!==b[e]&&(t.enable(e),b[e]=!0)}function a(e){!1!==b[e]&&(t.disable(e),b[e]=!1)}function s(e,n,i,s,c,u,h,l){0!==e?o(t.BLEND):a(t.BLEND),e===x&&l===O||(2===e?l?(t.blendEquationSeparate(t.FUNC_ADD,t.FUNC_ADD),t.blendFuncSeparate(t.ONE,t.ONE,t.ONE,t.ONE)):(t.blendEquation(t.FUNC_ADD),t.blendFunc(t.SRC_ALPHA,t.ONE)):3===e?l?(t.blendEquationSeparate(t.FUNC_ADD,t.FUNC_ADD),t.blendFuncSeparate(t.ZERO,t.ZERO,t.ONE_MINUS_SRC_COLOR,t.ONE_MINUS_SRC_ALPHA)):(t.blendEquation(t.FUNC_ADD),t.blendFunc(t.ZERO,t.ONE_MINUS_SRC_COLOR)):4===e?l?(t.blendEquationSeparate(t.FUNC_ADD,t.FUNC_ADD),t.blendFuncSeparate(t.ZERO,t.SRC_COLOR,t.ZERO,t.SRC_ALPHA)):(t.blendEquation(t.FUNC_ADD),t.blendFunc(t.ZERO,t.SRC_COLOR)):l?(t.blendEquationSeparate(t.FUNC_ADD,t.FUNC_ADD),t.blendFuncSeparate(t.ONE,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)):(t.blendEquationSeparate(t.FUNC_ADD,t.FUNC_ADD),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)),x=e,O=l),5===e?(c=c||n,u=u||i,h=h||s,n===w&&c===E||(t.blendEquationSeparate(r(n),r(c)),w=n,E=c),i===S&&s===M&&u===T&&h===C||(t.blendFuncSeparate(r(i),r(s),r(u),r(h)),S=i,M=s,T=u,C=h)):C=T=E=M=S=w=null}function c(t){f.setFunc(t)}function u(e){P!==e&&(e?t.frontFace(t.CW):t.frontFace(t.CCW),P=e)}function h(e){0!==e?(o(t.CULL_FACE),e!==A&&(1===e?t.cullFace(t.BACK):2===e?t.cullFace(t.FRONT):t.cullFace(t.FRONT_AND_BACK))):a(t.CULL_FACE),A=e}function l(e){void 0===e&&(e=t.TEXTURE0+I-1),k!==e&&(t.activeTexture(e),k=e)}var p=new function(){var e=!1,r=new i,n=null,o=new i;return{setMask:function(r){n===r||e||(t.colorMask(r,r,r,r),n=r)},setLocked:function(t){e=t},setClear:function(e,n,i,a,s){!0===s&&(e*=a,n*=a,i*=a),r.set(e,n,i,a),!1===o.equals(r)&&(t.clearColor(e,n,i,a),o.copy(r))},reset:function(){e=!1,n=null,o.set(0,0,0,1)}}},f=new function(){var e=!1,r=null,n=null,i=null;return{setTest:function(e){e?o(t.DEPTH_TEST):a(t.DEPTH_TEST)},setMask:function(n){r===n||e||(t.depthMask(n),r=n)},setFunc:function(e){if(n!==e){if(e)switch(e){case 0:t.depthFunc(t.NEVER);break;case 1:t.depthFunc(t.ALWAYS);break;case 2:t.depthFunc(t.LESS);break;case 3:t.depthFunc(t.LEQUAL);break;case 4:t.depthFunc(t.EQUAL);break;case 5:t.depthFunc(t.GEQUAL);break;case 6:t.depthFunc(t.GREATER);break;case 7:t.depthFunc(t.NOTEQUAL);break;default:t.depthFunc(t.LEQUAL)}else t.depthFunc(t.LEQUAL);n=e}},setLocked:function(t){e=t},setClear:function(e){i!==e&&(t.clearDepth(e),i=e)},reset:function(){e=!1,i=n=r=null}}},d=new function(){var e=!1,r=null,n=null,i=null,s=null,c=null,u=null,h=null,l=null;return{setTest:function(e){e?o(t.STENCIL_TEST):a(t.STENCIL_TEST)},setMask:function(n){r===n||e||(t.stencilMask(n),r=n)},setFunc:function(e,r,o){n===e&&i===r&&s===o||(t.stencilFunc(e,r,o),n=e,i=r,s=o)},setOp:function(e,r,n){c===e&&u===r&&h===n||(t.stencilOp(e,r,n),c=e,u=r,h=n)},setLocked:function(t){e=t},setClear:function(e){l!==e&&(t.clearStencil(e),l=e)},reset:function(){e=!1,l=h=u=c=s=i=n=r=null}}},m=t.getParameter(t.MAX_VERTEX_ATTRIBS),v=new Uint8Array(m),g=new Uint8Array(m),y=new Uint8Array(m),b={},_=null,x=null,w=null,S=null,M=null,E=null,T=null,C=null,O=!1,P=null,A=null,j=null,R=null,L=null,N=null,I=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS),m=parseFloat(/^WebGL\ ([0-9])/.exec(t.getParameter(t.VERSION))[1]),D=1<=parseFloat(m),k=null,F={},U=new i,B=new i,z={};return z[t.TEXTURE_2D]=n(t.TEXTURE_2D,t.TEXTURE_2D,1),z[t.TEXTURE_CUBE_MAP]=n(t.TEXTURE_CUBE_MAP,t.TEXTURE_CUBE_MAP_POSITIVE_X,6),{buffers:{color:p,depth:f,stencil:d},init:function(){p.setClear(0,0,0,1),f.setClear(1),d.setClear(0),o(t.DEPTH_TEST),c(3),u(!1),h(1),o(t.CULL_FACE),o(t.BLEND),s(1)},initAttributes:function(){for(var t=0,e=v.length;t<e;t++)v[t]=0},enableAttribute:function(r){v[r]=1,0===g[r]&&(t.enableVertexAttribArray(r),g[r]=1),0!==y[r]&&(e.get("ANGLE_instanced_arrays").vertexAttribDivisorANGLE(r,0),y[r]=0)},enableAttributeAndDivisor:function(e,r,n){v[e]=1,0===g[e]&&(t.enableVertexAttribArray(e),g[e]=1),y[e]!==r&&(n.vertexAttribDivisorANGLE(e,r),y[e]=r)},disableUnusedAttributes:function(){for(var e=0,r=g.length;e!==r;++e)g[e]!==v[e]&&(t.disableVertexAttribArray(e),g[e]=0)},enable:o,disable:a,getCompressedTextureFormats:function(){if(null===_&&(_=[],e.get("WEBGL_compressed_texture_pvrtc")||e.get("WEBGL_compressed_texture_s3tc")||e.get("WEBGL_compressed_texture_etc1")))for(var r=t.getParameter(t.COMPRESSED_TEXTURE_FORMATS),n=0;n<r.length;n++)_.push(r[n]);return _},setBlending:s,setColorWrite:function(t){p.setMask(t)},setDepthTest:function(t){f.setTest(t)},setDepthWrite:function(t){f.setMask(t)},setDepthFunc:c,setStencilTest:function(t){d.setTest(t)},setStencilWrite:function(t){d.setMask(t)},setStencilFunc:function(t,e,r){d.setFunc(t,e,r)},setStencilOp:function(t,e,r){d.setOp(t,e,r)},setFlipSided:u,setCullFace:h,setLineWidth:function(e){e!==j&&(D&&t.lineWidth(e),j=e)},setPolygonOffset:function(e,r,n){e?(o(t.POLYGON_OFFSET_FILL),(R!==r||L!==n)&&(t.polygonOffset(r,n),R=r,L=n)):a(t.POLYGON_OFFSET_FILL)},getScissorTest:function(){return N},setScissorTest:function(e){(N=e)?o(t.SCISSOR_TEST):a(t.SCISSOR_TEST)},activeTexture:l,bindTexture:function(e,r){null===k&&l();var n=F[k];void 0===n&&(n={type:void 0,texture:void 0},F[k]=n),n.type===e&&n.texture===r||(t.bindTexture(e,r||z[e]),n.type=e,n.texture=r)},compressedTexImage2D:function(){try{t.compressedTexImage2D.apply(t,arguments)}catch(t){console.error(t)}},texImage2D:function(){try{t.texImage2D.apply(t,arguments)}catch(t){console.error(t)}},scissor:function(e){!1===U.equals(e)&&(t.scissor(e.x,e.y,e.z,e.w),U.copy(e))},viewport:function(e){!1===B.equals(e)&&(t.viewport(e.x,e.y,e.z,e.w),B.copy(e))},reset:function(){for(var e=0;e<g.length;e++)1===g[e]&&(t.disableVertexAttribArray(e),g[e]=0);b={},k=_=null,F={},A=P=x=null,p.reset(),f.reset(),d.reset()}}}function Zt(t,e,r){function n(e){if("highp"===e){if(0<t.getShaderPrecisionFormat(t.VERTEX_SHADER,t.HIGH_FLOAT).precision&&0<t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.HIGH_FLOAT).precision)return"highp";e="mediump"}return"mediump"===e&&0<t.getShaderPrecisionFormat(t.VERTEX_SHADER,t.MEDIUM_FLOAT).precision&&0<t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.MEDIUM_FLOAT).precision?"mediump":"lowp"}var i,o=void 0!==r.precision?r.precision:"highp",a=n(o);a!==o&&(console.warn("THREE.WebGLRenderer:",o,"not supported, using",a,"instead."),o=a),r=!0===r.logarithmicDepthBuffer&&!!e.get("EXT_frag_depth");var a=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS),s=t.getParameter(t.MAX_VERTEX_TEXTURE_IMAGE_UNITS),c=t.getParameter(t.MAX_TEXTURE_SIZE),u=t.getParameter(t.MAX_CUBE_MAP_TEXTURE_SIZE),h=t.getParameter(t.MAX_VERTEX_ATTRIBS),l=t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS),p=t.getParameter(t.MAX_VARYING_VECTORS),f=t.getParameter(t.MAX_FRAGMENT_UNIFORM_VECTORS),d=0<s,m=!!e.get("OES_texture_float");return{getMaxAnisotropy:function(){if(void 0!==i)return i;var r=e.get("EXT_texture_filter_anisotropic");return i=null!==r?t.getParameter(r.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0},getMaxPrecision:n,precision:o,logarithmicDepthBuffer:r,maxTextures:a,maxVertexTextures:s,maxTextureSize:c,maxCubemapSize:u,maxAttributes:h,maxVertexUniforms:l,maxVaryings:p,maxFragmentUniforms:f,vertexTextures:d,floatFragmentTextures:m,floatVertexTextures:d&&m}}function Jt(t){var e={};return{get:function(r){if(void 0!==e[r])return e[r];var n;switch(r){case"WEBGL_depth_texture":n=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":n=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":n=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":n=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case"WEBGL_compressed_texture_etc1":n=t.getExtension("WEBGL_compressed_texture_etc1");break;default:n=t.getExtension(r)}return null===n&&console.warn("THREE.WebGLRenderer: "+r+" extension not supported."),e[r]=n}}}function Qt(){function t(){u.value!==n&&(u.value=n,u.needsUpdate=0<i),r.numPlanes=i,r.numIntersection=0}function e(t,e,n,i){var o=null!==t?t.length:0,a=null;if(0!==o){if(a=u.value,!0!==i||null===a)for(i=n+4*o,e=e.matrixWorldInverse,c.getNormalMatrix(e),(null===a||a.length<i)&&(a=new Float32Array(i)),i=0;i!==o;++i,n+=4)s.copy(t[i]).applyMatrix4(e,c),s.normal.toArray(a,n),a[n+3]=s.constant;u.value=a,u.needsUpdate=!0}return r.numPlanes=o,a}var r=this,n=null,i=0,o=!1,a=!1,s=new Q,c=new J,u={value:null,needsUpdate:!1};this.uniform=u,this.numIntersection=this.numPlanes=0,this.init=function(t,r,a){var s=0!==t.length||r||0!==i||o;return o=r,n=e(t,a,0),i=t.length,s},this.beginShadows=function(){a=!0,e(null)},this.endShadows=function(){a=!1,t()},this.setState=function(r,s,c,h,l,p){if(!o||null===r||0===r.length||a&&!c)a?e(null):t();else{c=a?0:i;var f=4*c,d=l.clippingState||null;for(u.value=d,d=e(r,h,f,p),r=0;r!==f;++r)d[r]=n[r];l.clippingState=d,this.numIntersection=s?this.numPlanes:0,this.numPlanes+=c}}}function te(t){function e(){Nt.init(),Nt.scissor(Y.copy(st).multiplyScalar(at)),Nt.viewport(J.copy(ht).multiplyScalar(at)),Nt.buffers.color.setClear(rt.r,rt.g,rt.b,nt,C)}function r(){q=F=null,V="",G=-1,Nt.reset()}function n(t){t.preventDefault(),r(),e(),It.clear()}function o(t){t=t.target,t.removeEventListener("dispose",o),a(t),It.delete(t)}function a(t){var e=It.get(t).program;t.program=void 0,void 0!==e&&Ft.releaseProgram(e)}function s(t,e){return Math.abs(e[0])-Math.abs(t[0])}function h(t,e){return t.object.renderOrder!==e.object.renderOrder?t.object.renderOrder-e.object.renderOrder:t.material.program&&e.material.program&&t.material.program!==e.material.program?t.material.program.id-e.material.program.id:t.material.id!==e.material.id?t.material.id-e.material.id:t.z!==e.z?t.z-e.z:t.id-e.id}function l(t,e){return t.object.renderOrder!==e.object.renderOrder?t.object.renderOrder-e.object.renderOrder:t.z!==e.z?e.z-t.z:t.id-e.id}function p(t,e,r,n,i){var o;r.transparent?(n=R,o=++L):(n=A,o=++j),o=n[o],void 0!==o?(o.id=t.id,o.object=t,o.geometry=e,o.material=r,o.z=gt.z,o.group=i):(o={id:t.id,object:t,geometry:e,material:r,z:gt.z,group:i},n.push(o))}function f(t){if(!lt.intersectsSphere(t))return!1;var e=pt.numPlanes;if(0===e)return!0;var r=k.clippingPlanes,n=t.center;t=-t.radius;var i=0;do{if(r[i].distanceToPoint(n)<t)return!1}while(++i!==e);return!0}function d(t,e){if(!1!==t.visible){if(0!=(t.layers.mask&e.layers.mask))if(t.isLight)P.push(t);else if(t.isSprite){var r;(r=!1===t.frustumCulled)||(mt.center.set(0,0,0),mt.radius=.7071067811865476,mt.applyMatrix4(t.matrixWorld),r=!0===f(mt)),r&&I.push(t)}else if(t.isLensFlare)D.push(t);else if(t.isImmediateRenderObject)!0===k.sortObjects&&(gt.setFromMatrixPosition(t.matrixWorld),gt.applyProjection(vt)),p(t,null,t.material,gt.z,null);else if((t.isMesh||t.isLine||t.isPoints)&&(t.isSkinnedMesh&&t.skeleton.update(),(r=!1===t.frustumCulled)||(r=t.geometry,null===r.boundingSphere&&r.computeBoundingSphere(),mt.copy(r.boundingSphere).applyMatrix4(t.matrixWorld),r=!0===f(mt)),r)){var n=t.material;if(!0===n.visible)if(!0===k.sortObjects&&(gt.setFromMatrixPosition(t.matrixWorld),gt.applyProjection(vt)),r=kt.update(t),n.isMultiMaterial)for(var i=r.groups,o=n.materials,n=0,a=i.length;n<a;n++){var s=i[n],c=o[s.materialIndex];!0===c.visible&&p(t,r,c,gt.z,s)}else p(t,r,n,gt.z,null)}for(r=t.children,n=0,a=r.length;n<a;n++)d(r[n],e)}}function m(t,e,r,n){for(var i=0,o=t.length;i<o;i++){var a=t[i],s=a.object,c=a.geometry,u=void 0===n?a.material:n,a=a.group;if(s.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse,s.matrixWorld),s.normalMatrix.getNormalMatrix(s.modelViewMatrix),s.onBeforeRender(k,e,r,c,u,a),s.isImmediateRenderObject){v(u);var h=g(r,e.fog,u,s);V="",s.render(function(t){k.renderBufferImmediate(t,h,u)})}else k.renderBufferDirect(r,e.fog,c,u,s,a);s.onAfterRender(k,e,r,c,u,a)}}function v(t){2===t.side?Nt.disable(Tt.CULL_FACE):Nt.enable(Tt.CULL_FACE),Nt.setFlipSided(1===t.side),!0===t.transparent?Nt.setBlending(t.blending,t.blendEquation,t.blendSrc,t.blendDst,t.blendEquationAlpha,t.blendSrcAlpha,t.blendDstAlpha,t.premultipliedAlpha):Nt.setBlending(0),Nt.setDepthFunc(t.depthFunc),Nt.setDepthTest(t.depthTest),Nt.setDepthWrite(t.depthWrite),Nt.setColorWrite(t.colorWrite),Nt.setPolygonOffset(t.polygonOffset,t.polygonOffsetFactor,t.polygonOffsetUnits)}function g(t,e,r,n){Q=0;var i=It.get(r);if(ft&&(dt||t!==q)&&pt.setState(r.clippingPlanes,r.clipIntersection,r.clipShadows,t,i,t===q&&r.id===G),!1===r.needsUpdate&&(void 0===i.program?r.needsUpdate=!0:r.fog&&i.fog!==e?r.needsUpdate=!0:r.lights&&i.lightsHash!==_t.hash?r.needsUpdate=!0:void 0===i.numClippingPlanes||i.numClippingPlanes===pt.numPlanes&&i.numIntersection===pt.numIntersection||(r.needsUpdate=!0)),r.needsUpdate){t:{var s=It.get(r),c=Ft.getParameters(r,_t,e,pt.numPlanes,pt.numIntersection,n),u=Ft.getProgramCode(r,c),h=s.program,l=!0;if(void 0===h)r.addEventListener("dispose",o);else if(h.code!==u)a(r);else{if(void 0!==c.shaderID)break t;l=!1}if(l&&(c.shaderID?(h=fi[c.shaderID],s.__webglShader={name:r.type,uniforms:ui.clone(h.uniforms),vertexShader:h.vertexShader,fragmentShader:h.fragmentShader}):s.__webglShader={name:r.type,uniforms:r.uniforms,vertexShader:r.vertexShader,fragmentShader:r.fragmentShader},r.__webglShader=s.__webglShader,h=Ft.acquireProgram(r,c,u),s.program=h,r.program=h),c=h.getAttributes(),r.morphTargets)for(u=r.numSupportedMorphTargets=0;u<k.maxMorphTargets;u++)0<=c["morphTarget"+u]&&r.numSupportedMorphTargets++;if(r.morphNormals)for(u=r.numSupportedMorphNormals=0;u<k.maxMorphNormals;u++)0<=c["morphNormal"+u]&&r.numSupportedMorphNormals++;c=s.__webglShader.uniforms,(r.isShaderMaterial||r.isRawShaderMaterial)&&!0!==r.clipping||(s.numClippingPlanes=pt.numPlanes,s.numIntersection=pt.numIntersection,c.clippingPlanes=pt.uniform),s.fog=e,s.lightsHash=_t.hash,r.lights&&(c.ambientLightColor.value=_t.ambient,c.directionalLights.value=_t.directional,c.spotLights.value=_t.spot,c.rectAreaLights.value=_t.rectArea,c.pointLights.value=_t.point,c.hemisphereLights.value=_t.hemi,c.directionalShadowMap.value=_t.directionalShadowMap,c.directionalShadowMatrix.value=_t.directionalShadowMatrix,c.spotShadowMap.value=_t.spotShadowMap,c.spotShadowMatrix.value=_t.spotShadowMatrix,c.pointShadowMap.value=_t.pointShadowMap,c.pointShadowMatrix.value=_t.pointShadowMatrix),u=s.program.getUniforms(),c=z.seqWithValue(u.seq,c),s.uniformsList=c}r.needsUpdate=!1}var p=!1,l=h=!1,s=i.program,c=s.getUniforms(),u=i.__webglShader.uniforms;if(s.id!==F&&(Tt.useProgram(s.program),F=s.id,l=h=p=!0),r.id!==G&&(G=r.id,h=!0),(p||t!==q)&&(c.set(Tt,t,"projectionMatrix"),Lt.logarithmicDepthBuffer&&c.setValue(Tt,"logDepthBufFC",2/(Math.log(t.far+1)/Math.LN2)),t!==q&&(q=t,l=h=!0),(r.isShaderMaterial||r.isMeshPhongMaterial||r.isMeshStandardMaterial||r.envMap)&&void 0!==(p=c.map.cameraPosition)&&p.setValue(Tt,gt.setFromMatrixPosition(t.matrixWorld)),(r.isMeshPhongMaterial||r.isMeshLambertMaterial||r.isMeshBasicMaterial||r.isMeshStandardMaterial||r.isShaderMaterial||r.skinning)&&c.setValue(Tt,"viewMatrix",t.matrixWorldInverse),c.set(Tt,k,"toneMappingExposure"),c.set(Tt,k,"toneMappingWhitePoint")),r.skinning&&(c.setOptional(Tt,n,"bindMatrix"),c.setOptional(Tt,n,"bindMatrixInverse"),t=n.skeleton)&&(Lt.floatVertexTextures&&t.useVertexTexture?(c.set(Tt,t,"boneTexture"),c.set(Tt,t,"boneTextureWidth"),c.set(Tt,t,"boneTextureHeight")):c.setOptional(Tt,t,"boneMatrices")),h){if(r.lights&&(t=l,u.ambientLightColor.needsUpdate=t,u.directionalLights.needsUpdate=t,u.pointLights.needsUpdate=t,u.spotLights.needsUpdate=t,u.rectAreaLights.needsUpdate=t,u.hemisphereLights.needsUpdate=t),e&&r.fog&&(u.fogColor.value=e.color,e.isFog?(u.fogNear.value=e.near,u.fogFar.value=e.far):e.isFogExp2&&(u.fogDensity.value=e.density)),r.isMeshBasicMaterial||r.isMeshLambertMaterial||r.isMeshPhongMaterial||r.isMeshStandardMaterial||r.isMeshNormalMaterial||r.isMeshDepthMaterial){u.opacity.value=r.opacity,u.diffuse.value=r.color,r.emissive&&u.emissive.value.copy(r.emissive).multiplyScalar(r.emissiveIntensity),u.map.value=r.map,u.specularMap.value=r.specularMap,u.alphaMap.value=r.alphaMap,r.lightMap&&(u.lightMap.value=r.lightMap,u.lightMapIntensity.value=r.lightMapIntensity),r.aoMap&&(u.aoMap.value=r.aoMap,u.aoMapIntensity.value=r.aoMapIntensity);var f;r.map?f=r.map:r.specularMap?f=r.specularMap:r.displacementMap?f=r.displacementMap:r.normalMap?f=r.normalMap:r.bumpMap?f=r.bumpMap:r.roughnessMap?f=r.roughnessMap:r.metalnessMap?f=r.metalnessMap:r.alphaMap?f=r.alphaMap:r.emissiveMap&&(f=r.emissiveMap),void 0!==f&&(f.isWebGLRenderTarget&&(f=f.texture),e=f.offset,f=f.repeat,u.offsetRepeat.value.set(e.x,e.y,f.x,f.y)),u.envMap.value=r.envMap,u.flipEnvMap.value=r.envMap&&r.envMap.isCubeTexture?-1:1,u.reflectivity.value=r.reflectivity,u.refractionRatio.value=r.refractionRatio}r.isLineBasicMaterial?(u.diffuse.value=r.color,u.opacity.value=r.opacity):r.isLineDashedMaterial?(u.diffuse.value=r.color,u.opacity.value=r.opacity,u.dashSize.value=r.dashSize,u.totalSize.value=r.dashSize+r.gapSize,u.scale.value=r.scale):r.isPointsMaterial?(u.diffuse.value=r.color,u.opacity.value=r.opacity,u.size.value=r.size*at,u.scale.value=.5*ot,u.map.value=r.map,null!==r.map&&(f=r.map.offset,r=r.map.repeat,u.offsetRepeat.value.set(f.x,f.y,r.x,r.y))):r.isMeshLambertMaterial?r.emissiveMap&&(u.emissiveMap.value=r.emissiveMap):r.isMeshToonMaterial?(y(u,r),r.gradientMap&&(u.gradientMap.value=r.gradientMap)):r.isMeshPhongMaterial?y(u,r):r.isMeshPhysicalMaterial?(u.clearCoat.value=r.clearCoat,u.clearCoatRoughness.value=r.clearCoatRoughness,b(u,r)):r.isMeshStandardMaterial?b(u,r):r.isMeshDepthMaterial?r.displacementMap&&(u.displacementMap.value=r.displacementMap,u.displacementScale.value=r.displacementScale,u.displacementBias.value=r.displacementBias):r.isMeshNormalMaterial&&(r.bumpMap&&(u.bumpMap.value=r.bumpMap,u.bumpScale.value=r.bumpScale),r.normalMap&&(u.normalMap.value=r.normalMap,u.normalScale.value.copy(r.normalScale)),r.displacementMap&&(u.displacementMap.value=r.displacementMap,u.displacementScale.value=r.displacementScale,u.displacementBias.value=r.displacementBias)),void 0!==u.ltcMat&&(u.ltcMat.value=THREE.UniformsLib.LTC_MAT_TEXTURE),void 0!==u.ltcMag&&(u.ltcMag.value=THREE.UniformsLib.LTC_MAG_TEXTURE),z.upload(Tt,i.uniformsList,u,k)}return c.set(Tt,n,"modelViewMatrix"),c.set(Tt,n,"normalMatrix"),c.setValue(Tt,"modelMatrix",n.matrixWorld),s}function y(t,e){t.specular.value=e.specular,t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale)),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}function b(t,e){t.roughness.value=e.roughness,t.metalness.value=e.metalness,e.roughnessMap&&(t.roughnessMap.value=e.roughnessMap),e.metalnessMap&&(t.metalnessMap.value=e.metalnessMap),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale)),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias),e.envMap&&(t.envMapIntensity.value=e.envMapIntensity)}function _(t){var e;if(1e3===t)return Tt.REPEAT;if(1001===t)return Tt.CLAMP_TO_EDGE;if(1002===t)return Tt.MIRRORED_REPEAT;if(1003===t)return Tt.NEAREST;if(1004===t)return Tt.NEAREST_MIPMAP_NEAREST;if(1005===t)return Tt.NEAREST_MIPMAP_LINEAR;if(1006===t)return Tt.LINEAR;if(1007===t)return Tt.LINEAR_MIPMAP_NEAREST;if(1008===t)return Tt.LINEAR_MIPMAP_LINEAR;if(1009===t)return Tt.UNSIGNED_BYTE;if(1017===t)return Tt.UNSIGNED_SHORT_4_4_4_4;if(1018===t)return Tt.UNSIGNED_SHORT_5_5_5_1;if(1019===t)return Tt.UNSIGNED_SHORT_5_6_5;if(1010===t)return Tt.BYTE;if(1011===t)return Tt.SHORT;if(1012===t)return Tt.UNSIGNED_SHORT;if(1013===t)return Tt.INT;if(1014===t)return Tt.UNSIGNED_INT;if(1015===t)return Tt.FLOAT;if(1016===t&&null!==(e=Rt.get("OES_texture_half_float")))return e.HALF_FLOAT_OES;if(1021===t)return Tt.ALPHA;if(1022===t)return Tt.RGB;if(1023===t)return Tt.RGBA;if(1024===t)return Tt.LUMINANCE;if(1025===t)return Tt.LUMINANCE_ALPHA;if(1026===t)return Tt.DEPTH_COMPONENT;if(1027===t)return Tt.DEPTH_STENCIL;if(100===t)return Tt.FUNC_ADD;if(101===t)return Tt.FUNC_SUBTRACT;if(102===t)return Tt.FUNC_REVERSE_SUBTRACT;if(200===t)return Tt.ZERO;if(201===t)return Tt.ONE;if(202===t)return Tt.SRC_COLOR;if(203===t)return Tt.ONE_MINUS_SRC_COLOR;if(204===t)return Tt.SRC_ALPHA;if(205===t)return Tt.ONE_MINUS_SRC_ALPHA;if(206===t)return Tt.DST_ALPHA;if(207===t)return Tt.ONE_MINUS_DST_ALPHA;if(208===t)return Tt.DST_COLOR;if(209===t)return Tt.ONE_MINUS_DST_COLOR;if(210===t)return Tt.SRC_ALPHA_SATURATE;if((2001===t||2002===t||2003===t||2004===t)&&null!==(e=Rt.get("WEBGL_compressed_texture_s3tc"))){if(2001===t)return e.COMPRESSED_RGB_S3TC_DXT1_EXT;if(2002===t)return e.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(2003===t)return e.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(2004===t)return e.COMPRESSED_RGBA_S3TC_DXT5_EXT}if((2100===t||2101===t||2102===t||2103===t)&&null!==(e=Rt.get("WEBGL_compressed_texture_pvrtc"))){if(2100===t)return e.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(2101===t)return e.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(2102===t)return e.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(2103===t)return e.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(2151===t&&null!==(e=Rt.get("WEBGL_compressed_texture_etc1")))return e.COMPRESSED_RGB_ETC1_WEBGL;if((103===t||104===t)&&null!==(e=Rt.get("EXT_blend_minmax"))){if(103===t)return e.MIN_EXT;if(104===t)return e.MAX_EXT}return 1020===t&&null!==(e=Rt.get("WEBGL_depth_texture"))?e.UNSIGNED_INT_24_8_WEBGL:0}console.log("THREE.WebGLRenderer","83"),t=t||{};var x=void 0!==t.canvas?t.canvas:document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),w=void 0!==t.context?t.context:null,S=void 0!==t.alpha&&t.alpha,M=void 0===t.depth||t.depth,E=void 0===t.stencil||t.stencil,T=void 0!==t.antialias&&t.antialias,C=void 0===t.premultipliedAlpha||t.premultipliedAlpha,O=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,P=[],A=[],j=-1,R=[],L=-1,N=new Float32Array(8),I=[],D=[];this.domElement=x,this.context=null,this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.physicallyCorrectLights=this.gammaOutput=this.gammaInput=!1,this.toneMappingWhitePoint=this.toneMappingExposure=this.toneMapping=1,this.maxMorphTargets=8,this.maxMorphNormals=4
-;var k=this,F=null,U=null,B=null,G=-1,V="",q=null,Y=new i,K=null,J=new i,Q=0,rt=new $(0),nt=0,it=x.width,ot=x.height,at=1,st=new i(0,0,it,ot),ct=!1,ht=new i(0,0,it,ot),lt=new tt,pt=new Qt,ft=!1,dt=!1,mt=new Z,vt=new u,gt=new c,yt=new u,bt=new u,_t={hash:"",ambient:[0,0,0],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],shadows:[]},xt={calls:0,vertices:0,faces:0,points:0};this.info={render:xt,memory:{geometries:0,textures:0},programs:null};var Tt;try{if(S={alpha:S,depth:M,stencil:E,antialias:T,premultipliedAlpha:C,preserveDrawingBuffer:O},null===(Tt=w||x.getContext("webgl",S)||x.getContext("experimental-webgl",S))){if(null!==x.getContext("webgl"))throw"Error creating WebGL context with your selected attributes.";throw"Error creating WebGL context."}void 0===Tt.getShaderPrecisionFormat&&(Tt.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}}),x.addEventListener("webglcontextlost",n,!1)}catch(t){console.error("THREE.WebGLRenderer: "+t)}var Rt=new Jt(Tt);Rt.get("WEBGL_depth_texture"),Rt.get("OES_texture_float"),Rt.get("OES_texture_float_linear"),Rt.get("OES_texture_half_float"),Rt.get("OES_texture_half_float_linear"),Rt.get("OES_standard_derivatives"),Rt.get("ANGLE_instanced_arrays"),Rt.get("OES_element_index_uint")&&(wt.MaxIndex=4294967296);var Lt=new Zt(Tt,Rt,t),Nt=new Kt(Tt,Rt,_),It=new Yt,Dt=new Xt(Tt,Rt,Nt,It,Lt,_,this.info),kt=new qt(Tt,It,this.info),Ft=new Ht(this,Lt),Ut=new jt;this.info.programs=Ft.programs;var Bt=new At(Tt,Rt,xt),zt=new Pt(Tt,Rt,xt),$t=new Ot(-1,1,1,-1,0,1),Gt=new Ct,Vt=new St(new Et(2,2),new ut({depthTest:!1,depthWrite:!1,fog:!1}));t=fi.cube;var Wt=new St(new Mt(5,5,5),new X({uniforms:t.uniforms,vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1}));e(),this.context=Tt,this.capabilities=Lt,this.extensions=Rt,this.properties=It,this.state=Nt;var te=new et(this,_t,kt,Lt);this.shadowMap=te;var ee=new W(this,I),re=new H(this,D);this.getContext=function(){return Tt},this.getContextAttributes=function(){return Tt.getContextAttributes()},this.forceContextLoss=function(){Rt.get("WEBGL_lose_context").loseContext()},this.getMaxAnisotropy=function(){return Lt.getMaxAnisotropy()},this.getPrecision=function(){return Lt.precision},this.getPixelRatio=function(){return at},this.setPixelRatio=function(t){void 0!==t&&(at=t,this.setSize(ht.z,ht.w,!1))},this.getSize=function(){return{width:it,height:ot}},this.setSize=function(t,e,r){it=t,ot=e,x.width=t*at,x.height=e*at,!1!==r&&(x.style.width=t+"px",x.style.height=e+"px"),this.setViewport(0,0,t,e)},this.setViewport=function(t,e,r,n){Nt.viewport(ht.set(t,e,r,n))},this.setScissor=function(t,e,r,n){Nt.scissor(st.set(t,e,r,n))},this.setScissorTest=function(t){Nt.setScissorTest(ct=t)},this.getClearColor=function(){return rt},this.setClearColor=function(t,e){rt.set(t),nt=void 0!==e?e:1,Nt.buffers.color.setClear(rt.r,rt.g,rt.b,nt,C)},this.getClearAlpha=function(){return nt},this.setClearAlpha=function(t){nt=t,Nt.buffers.color.setClear(rt.r,rt.g,rt.b,nt,C)},this.clear=function(t,e,r){var n=0;(void 0===t||t)&&(n|=Tt.COLOR_BUFFER_BIT),(void 0===e||e)&&(n|=Tt.DEPTH_BUFFER_BIT),(void 0===r||r)&&(n|=Tt.STENCIL_BUFFER_BIT),Tt.clear(n)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.clearTarget=function(t,e,r,n){this.setRenderTarget(t),this.clear(e,r,n)},this.resetGLState=r,this.dispose=function(){R=[],L=-1,A=[],j=-1,x.removeEventListener("webglcontextlost",n,!1)},this.renderBufferImmediate=function(t,e,r){Nt.initAttributes();var n=It.get(t);if(t.hasPositions&&!n.position&&(n.position=Tt.createBuffer()),t.hasNormals&&!n.normal&&(n.normal=Tt.createBuffer()),t.hasUvs&&!n.uv&&(n.uv=Tt.createBuffer()),t.hasColors&&!n.color&&(n.color=Tt.createBuffer()),e=e.getAttributes(),t.hasPositions&&(Tt.bindBuffer(Tt.ARRAY_BUFFER,n.position),Tt.bufferData(Tt.ARRAY_BUFFER,t.positionArray,Tt.DYNAMIC_DRAW),Nt.enableAttribute(e.position),Tt.vertexAttribPointer(e.position,3,Tt.FLOAT,!1,0,0)),t.hasNormals){if(Tt.bindBuffer(Tt.ARRAY_BUFFER,n.normal),!r.isMeshPhongMaterial&&!r.isMeshStandardMaterial&&!r.isMeshNormalMaterial&&1===r.shading)for(var i=0,o=3*t.count;i<o;i+=9){var a=t.normalArray,s=(a[i+0]+a[i+3]+a[i+6])/3,c=(a[i+1]+a[i+4]+a[i+7])/3,u=(a[i+2]+a[i+5]+a[i+8])/3;a[i+0]=s,a[i+1]=c,a[i+2]=u,a[i+3]=s,a[i+4]=c,a[i+5]=u,a[i+6]=s,a[i+7]=c,a[i+8]=u}Tt.bufferData(Tt.ARRAY_BUFFER,t.normalArray,Tt.DYNAMIC_DRAW),Nt.enableAttribute(e.normal),Tt.vertexAttribPointer(e.normal,3,Tt.FLOAT,!1,0,0)}t.hasUvs&&r.map&&(Tt.bindBuffer(Tt.ARRAY_BUFFER,n.uv),Tt.bufferData(Tt.ARRAY_BUFFER,t.uvArray,Tt.DYNAMIC_DRAW),Nt.enableAttribute(e.uv),Tt.vertexAttribPointer(e.uv,2,Tt.FLOAT,!1,0,0)),t.hasColors&&0!==r.vertexColors&&(Tt.bindBuffer(Tt.ARRAY_BUFFER,n.color),Tt.bufferData(Tt.ARRAY_BUFFER,t.colorArray,Tt.DYNAMIC_DRAW),Nt.enableAttribute(e.color),Tt.vertexAttribPointer(e.color,3,Tt.FLOAT,!1,0,0)),Nt.disableUnusedAttributes(),Tt.drawArrays(Tt.TRIANGLES,0,t.count),t.count=0},this.renderBufferDirect=function(t,e,r,n,i,o){v(n);var a=g(t,e,n,i),c=!1;if(t=r.id+"_"+a.id+"_"+n.wireframe,t!==V&&(V=t,c=!0),void 0!==(e=i.morphTargetInfluences)){var u=[];t=0;for(var h=e.length;t<h;t++)c=e[t],u.push([c,t]);u.sort(s),8<u.length&&(u.length=8);var l=r.morphAttributes;for(t=0,h=u.length;t<h;t++)c=u[t],N[t]=c[0],0!==c[0]?(e=c[1],!0===n.morphTargets&&l.position&&r.addAttribute("morphTarget"+t,l.position[e]),!0===n.morphNormals&&l.normal&&r.addAttribute("morphNormal"+t,l.normal[e])):(!0===n.morphTargets&&r.removeAttribute("morphTarget"+t),!0===n.morphNormals&&r.removeAttribute("morphNormal"+t));for(t=u.length,e=N.length;t<e;t++)N[t]=0;a.getUniforms().setValue(Tt,"morphTargetInfluences",N),c=!0}if(e=r.index,h=r.attributes.position,u=1,!0===n.wireframe&&(e=kt.getWireframeAttribute(r),u=2),null!==e?(t=zt,t.setIndex(e)):t=Bt,c){var p,c=void 0;if(r&&r.isInstancedBufferGeometry&&null===(p=Rt.get("ANGLE_instanced_arrays")))console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{void 0===c&&(c=0),Nt.initAttributes();var f,l=r.attributes,a=a.getAttributes(),d=n.defaultAttributeValues;for(f in a){var m=a[f];if(0<=m){var y=l[f];if(void 0!==y){var b=y.normalized,_=y.itemSize,x=kt.getAttributeProperties(y),w=x.__webglBuffer,S=x.type,x=x.bytesPerElement;if(y.isInterleavedBufferAttribute){var M=y.data,E=M.stride,y=y.offset;M&&M.isInstancedInterleavedBuffer?(Nt.enableAttributeAndDivisor(m,M.meshPerAttribute,p),void 0===r.maxInstancedCount&&(r.maxInstancedCount=M.meshPerAttribute*M.count)):Nt.enableAttribute(m),Tt.bindBuffer(Tt.ARRAY_BUFFER,w),Tt.vertexAttribPointer(m,_,S,b,E*x,(c*E+y)*x)}else y.isInstancedBufferAttribute?(Nt.enableAttributeAndDivisor(m,y.meshPerAttribute,p),void 0===r.maxInstancedCount&&(r.maxInstancedCount=y.meshPerAttribute*y.count)):Nt.enableAttribute(m),Tt.bindBuffer(Tt.ARRAY_BUFFER,w),Tt.vertexAttribPointer(m,_,S,b,0,c*_*x)}else if(void 0!==d&&void 0!==(b=d[f]))switch(b.length){case 2:Tt.vertexAttrib2fv(m,b);break;case 3:Tt.vertexAttrib3fv(m,b);break;case 4:Tt.vertexAttrib4fv(m,b);break;default:Tt.vertexAttrib1fv(m,b)}}}Nt.disableUnusedAttributes()}null!==e&&Tt.bindBuffer(Tt.ELEMENT_ARRAY_BUFFER,kt.getAttributeBuffer(e))}if(p=0,null!==e?p=e.count:void 0!==h&&(p=h.count),e=r.drawRange.start*u,h=null!==o?o.start*u:0,f=Math.max(e,h),0!==(o=Math.max(0,Math.min(p,e+r.drawRange.count*u,h+(null!==o?o.count*u:1/0))-1-f+1))){if(i.isMesh)if(!0===n.wireframe)Nt.setLineWidth(n.wireframeLinewidth*(null===U?at:1)),t.setMode(Tt.LINES);else switch(i.drawMode){case 0:t.setMode(Tt.TRIANGLES);break;case 1:t.setMode(Tt.TRIANGLE_STRIP);break;case 2:t.setMode(Tt.TRIANGLE_FAN)}else i.isLine?(n=n.linewidth,void 0===n&&(n=1),Nt.setLineWidth(n*(null===U?at:1)),i.isLineSegments?t.setMode(Tt.LINES):t.setMode(Tt.LINE_STRIP)):i.isPoints&&t.setMode(Tt.POINTS);r&&r.isInstancedBufferGeometry?0<r.maxInstancedCount&&t.renderInstances(r,f,o):t.render(f,o)}},this.render=function(t,e,r,n){if(void 0!==e&&!0!==e.isCamera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{V="",G=-1,q=null,!0===t.autoUpdate&&t.updateMatrixWorld(),null===e.parent&&e.updateMatrixWorld(),e.matrixWorldInverse.getInverse(e.matrixWorld),vt.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),lt.setFromMatrix(vt),P.length=0,L=j=-1,I.length=0,D.length=0,dt=this.localClippingEnabled,ft=pt.init(this.clippingPlanes,dt,e),d(t,e),A.length=j+1,R.length=L+1,!0===k.sortObjects&&(A.sort(h),R.sort(l)),ft&&pt.beginShadows();for(var i=P,o=0,a=0,s=i.length;a<s;a++){var c=i[a];c.castShadow&&(_t.shadows[o++]=c)}_t.shadows.length=o,te.render(t,e);for(var p,f,v,g,i=P,y=c=0,b=0,_=e.matrixWorldInverse,x=0,w=0,S=0,M=0,E=0,o=0,a=i.length;o<a;o++)if(s=i[o],p=s.color,f=s.intensity,v=s.distance,g=s.shadow&&s.shadow.map?s.shadow.map.texture:null,s.isAmbientLight)c+=p.r*f,y+=p.g*f,b+=p.b*f;else if(s.isDirectionalLight){var T=Ut.get(s);T.color.copy(s.color).multiplyScalar(s.intensity),T.direction.setFromMatrixPosition(s.matrixWorld),gt.setFromMatrixPosition(s.target.matrixWorld),T.direction.sub(gt),T.direction.transformDirection(_),(T.shadow=s.castShadow)&&(T.shadowBias=s.shadow.bias,T.shadowRadius=s.shadow.radius,T.shadowMapSize=s.shadow.mapSize),_t.directionalShadowMap[x]=g,_t.directionalShadowMatrix[x]=s.shadow.matrix,_t.directional[x++]=T}else s.isSpotLight?(T=Ut.get(s),T.position.setFromMatrixPosition(s.matrixWorld),T.position.applyMatrix4(_),T.color.copy(p).multiplyScalar(f),T.distance=v,T.direction.setFromMatrixPosition(s.matrixWorld),gt.setFromMatrixPosition(s.target.matrixWorld),T.direction.sub(gt),T.direction.transformDirection(_),T.coneCos=Math.cos(s.angle),T.penumbraCos=Math.cos(s.angle*(1-s.penumbra)),T.decay=0===s.distance?0:s.decay,(T.shadow=s.castShadow)&&(T.shadowBias=s.shadow.bias,T.shadowRadius=s.shadow.radius,T.shadowMapSize=s.shadow.mapSize),_t.spotShadowMap[S]=g,_t.spotShadowMatrix[S]=s.shadow.matrix,_t.spot[S++]=T):s.isRectAreaLight?(T=Ut.get(s),T.color.copy(p).multiplyScalar(f/(s.width*s.height)),T.position.setFromMatrixPosition(s.matrixWorld),T.position.applyMatrix4(_),bt.identity(),yt.copy(s.matrixWorld),yt.premultiply(_),bt.extractRotation(yt),T.halfWidth.set(.5*s.width,0,0),T.halfHeight.set(0,.5*s.height,0),T.halfWidth.applyMatrix4(bt),T.halfHeight.applyMatrix4(bt),_t.rectArea[M++]=T):s.isPointLight?(T=Ut.get(s),T.position.setFromMatrixPosition(s.matrixWorld),T.position.applyMatrix4(_),T.color.copy(s.color).multiplyScalar(s.intensity),T.distance=s.distance,T.decay=0===s.distance?0:s.decay,(T.shadow=s.castShadow)&&(T.shadowBias=s.shadow.bias,T.shadowRadius=s.shadow.radius,T.shadowMapSize=s.shadow.mapSize),_t.pointShadowMap[w]=g,void 0===_t.pointShadowMatrix[w]&&(_t.pointShadowMatrix[w]=new u),gt.setFromMatrixPosition(s.matrixWorld).negate(),_t.pointShadowMatrix[w].identity().setPosition(gt),_t.point[w++]=T):s.isHemisphereLight&&(T=Ut.get(s),T.direction.setFromMatrixPosition(s.matrixWorld),T.direction.transformDirection(_),T.direction.normalize(),T.skyColor.copy(s.color).multiplyScalar(f),T.groundColor.copy(s.groundColor).multiplyScalar(f),_t.hemi[E++]=T);_t.ambient[0]=c,_t.ambient[1]=y,_t.ambient[2]=b,_t.directional.length=x,_t.spot.length=S,_t.rectArea.length=M,_t.point.length=w,_t.hemi.length=E,_t.hash=x+","+w+","+S+","+M+","+E+","+_t.shadows.length,ft&&pt.endShadows(),xt.calls=0,xt.vertices=0,xt.faces=0,xt.points=0,void 0===r&&(r=null),this.setRenderTarget(r),i=t.background,null===i?Nt.buffers.color.setClear(rt.r,rt.g,rt.b,nt,C):i&&i.isColor&&(Nt.buffers.color.setClear(i.r,i.g,i.b,1,C),n=!0),(this.autoClear||n)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil),i&&i.isCubeTexture?(Gt.projectionMatrix.copy(e.projectionMatrix),Gt.matrixWorld.extractRotation(e.matrixWorld),Gt.matrixWorldInverse.getInverse(Gt.matrixWorld),Wt.material.uniforms.tCube.value=i,Wt.modelViewMatrix.multiplyMatrices(Gt.matrixWorldInverse,Wt.matrixWorld),kt.update(Wt),k.renderBufferDirect(Gt,null,Wt.geometry,Wt.material,Wt,null)):i&&i.isTexture&&(Vt.material.map=i,kt.update(Vt),k.renderBufferDirect($t,null,Vt.geometry,Vt.material,Vt,null)),t.overrideMaterial?(n=t.overrideMaterial,m(A,t,e,n),m(R,t,e,n)):(Nt.setBlending(0),m(A,t,e),m(R,t,e)),ee.render(t,e),re.render(t,e,J),r&&Dt.updateRenderTargetMipmap(r),Nt.setDepthTest(!0),Nt.setDepthWrite(!0),Nt.setColorWrite(!0)}},this.setFaceCulling=function(t,e){Nt.setCullFace(t),Nt.setFlipSided(0===e)},this.allocTextureUnit=function(){var t=Q;return t>=Lt.maxTextures&&console.warn("WebGLRenderer: trying to use "+t+" texture units while this GPU supports only "+Lt.maxTextures),Q+=1,t},this.setTexture2D=function(){var t=!1;return function(e,r){e&&e.isWebGLRenderTarget&&(t||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),t=!0),e=e.texture),Dt.setTexture2D(e,r)}}(),this.setTexture=function(){var t=!1;return function(e,r){t||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."),t=!0),Dt.setTexture2D(e,r)}}(),this.setTextureCube=function(){var t=!1;return function(e,r){e&&e.isWebGLRenderTargetCube&&(t||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),t=!0),e=e.texture),e&&e.isCubeTexture||Array.isArray(e.image)&&6===e.image.length?Dt.setTextureCube(e,r):Dt.setTextureCubeDynamic(e,r)}}(),this.getCurrentRenderTarget=function(){return U},this.setRenderTarget=function(t){(U=t)&&void 0===It.get(t).__webglFramebuffer&&Dt.setupRenderTarget(t);var e,r=t&&t.isWebGLRenderTargetCube;t?(e=It.get(t),e=r?e.__webglFramebuffer[t.activeCubeFace]:e.__webglFramebuffer,Y.copy(t.scissor),K=t.scissorTest,J.copy(t.viewport)):(e=null,Y.copy(st).multiplyScalar(at),K=ct,J.copy(ht).multiplyScalar(at)),B!==e&&(Tt.bindFramebuffer(Tt.FRAMEBUFFER,e),B=e),Nt.scissor(Y),Nt.setScissorTest(K),Nt.viewport(J),r&&(r=It.get(t.texture),Tt.framebufferTexture2D(Tt.FRAMEBUFFER,Tt.COLOR_ATTACHMENT0,Tt.TEXTURE_CUBE_MAP_POSITIVE_X+t.activeCubeFace,r.__webglTexture,t.activeMipMapLevel))},this.readRenderTargetPixels=function(t,e,r,n,i,o){if(!1===(t&&t.isWebGLRenderTarget))console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");else{var a=It.get(t).__webglFramebuffer;if(a){var s=!1;a!==B&&(Tt.bindFramebuffer(Tt.FRAMEBUFFER,a),s=!0);try{var c=t.texture,u=c.format,h=c.type;1023!==u&&_(u)!==Tt.getParameter(Tt.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):1009===h||_(h)===Tt.getParameter(Tt.IMPLEMENTATION_COLOR_READ_TYPE)||1015===h&&(Rt.get("OES_texture_float")||Rt.get("WEBGL_color_buffer_float"))||1016===h&&Rt.get("EXT_color_buffer_half_float")?Tt.checkFramebufferStatus(Tt.FRAMEBUFFER)===Tt.FRAMEBUFFER_COMPLETE?0<=e&&e<=t.width-n&&0<=r&&r<=t.height-i&&Tt.readPixels(e,r,n,i,_(u),_(h),o):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{s&&Tt.bindFramebuffer(Tt.FRAMEBUFFER,B)}}}}}function ee(t,e){this.name="",this.color=new $(t),this.density=void 0!==e?e:25e-5}function re(t,e,r){this.name="",this.color=new $(t),this.near=void 0!==e?e:1,this.far=void 0!==r?r:1e3}function ne(){ot.call(this),this.type="Scene",this.overrideMaterial=this.fog=this.background=null,this.autoUpdate=!0}function ie(t,e,r,n,i){ot.call(this),this.lensFlares=[],this.positionScreen=new c,this.customUpdateCallback=void 0,void 0!==t&&this.add(t,e,r,n,i)}function oe(t){q.call(this),this.type="SpriteMaterial",this.color=new $(16777215),this.map=null,this.rotation=0,this.lights=this.fog=!1,this.setValues(t)}function ae(t){ot.call(this),this.type="Sprite",this.material=void 0!==t?t:new oe}function se(){ot.call(this),this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function ce(t,e,r){if(this.useVertexTexture=void 0===r||r,this.identityMatrix=new u,t=t||[],this.bones=t.slice(0),this.useVertexTexture?(t=Math.sqrt(4*this.bones.length),t=ri.nextPowerOfTwo(Math.ceil(t)),this.boneTextureHeight=this.boneTextureWidth=t=Math.max(t,4),this.boneMatrices=new Float32Array(this.boneTextureWidth*this.boneTextureHeight*4),this.boneTexture=new G(this.boneMatrices,this.boneTextureWidth,this.boneTextureHeight,1023,1015)):this.boneMatrices=new Float32Array(16*this.bones.length),void 0===e)this.calculateInverses();else if(this.bones.length===e.length)this.boneInverses=e.slice(0);else for(console.warn("THREE.Skeleton bonInverses is the wrong length."),this.boneInverses=[],e=0,t=this.bones.length;e<t;e++)this.boneInverses.push(new u)}function ue(){ot.call(this),this.type="Bone"}function he(t,e,r){if(St.call(this,t,e),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new u,this.bindMatrixInverse=new u,t=[],this.geometry&&void 0!==this.geometry.bones){for(var n,i=0,o=this.geometry.bones.length;i<o;++i)n=this.geometry.bones[i],e=new ue,t.push(e),e.name=n.name,e.position.fromArray(n.pos),e.quaternion.fromArray(n.rotq),void 0!==n.scl&&e.scale.fromArray(n.scl);for(i=0,o=this.geometry.bones.length;i<o;++i)n=this.geometry.bones[i],-1!==n.parent&&null!==n.parent&&void 0!==t[n.parent]?t[n.parent].add(t[i]):this.add(t[i])}this.normalizeSkinWeights(),this.updateMatrixWorld(!0),this.bind(new ce(t,void 0,r),this.matrixWorld)}function le(t){q.call(this),this.type="LineBasicMaterial",this.color=new $(16777215),this.linewidth=1,this.linejoin=this.linecap="round",this.lights=!1,this.setValues(t)}function pe(t,e,r){if(1===r)return console.warn("THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead."),new fe(t,e);ot.call(this),this.type="Line",this.geometry=void 0!==t?t:new wt,this.material=void 0!==e?e:new le({color:16777215*Math.random()})}function fe(t,e){pe.call(this,t,e),this.type="LineSegments"}function de(t){q.call(this),this.type="PointsMaterial",this.color=new $(16777215),this.map=null,this.size=1,this.sizeAttenuation=!0,this.lights=!1,this.setValues(t)}function me(t,e){ot.call(this),this.type="Points",this.geometry=void 0!==t?t:new wt,this.material=void 0!==e?e:new de({color:16777215*Math.random()})}function ve(){ot.call(this),this.type="Group"}function ge(t,e,r,i,o,a,s,c,u){function h(){requestAnimationFrame(h),t.readyState>=t.HAVE_CURRENT_DATA&&(l.needsUpdate=!0)}n.call(this,t,e,r,i,o,a,s,c,u),this.generateMipmaps=!1;var l=this;h()}function ye(t,e,r,i,o,a,s,c,u,h,l,p){n.call(this,null,a,s,c,u,h,i,o,l,p),this.image={width:e,height:r},this.mipmaps=t,this.generateMipmaps=this.flipY=!1}function be(t,e,r,i,o,a,s,c,u){n.call(this,t,e,r,i,o,a,s,c,u),this.needsUpdate=!0}function _e(t,e,r,i,o,a,s,c,u,h){if(1026!==(h=void 0!==h?h:1026)&&1027!==h)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===r&&1026===h&&(r=1012),void 0===r&&1027===h&&(r=1020),n.call(this,null,i,o,a,s,c,h,r,u),this.image={width:t,height:e},this.magFilter=void 0!==s?s:1003,this.minFilter=void 0!==c?c:1003,this.generateMipmaps=this.flipY=!1}function xe(t){function e(t,e){return t-e}wt.call(this);var r=[0,0],n={},i=["a","b","c"];if(t&&t.isGeometry){var o=t.vertices,a=t.faces,s=0,c=new Uint32Array(6*a.length);t=0;for(var u=a.length;t<u;t++)for(var h=a[t],l=0;3>l;l++){r[0]=h[i[l]],r[1]=h[i[(l+1)%3]],r.sort(e);var p=r.toString();void 0===n[p]&&(c[2*s]=r[0],c[2*s+1]=r[1],n[p]=!0,s++)}for(r=new Float32Array(6*s),t=0,u=s;t<u;t++)for(l=0;2>l;l++)n=o[c[2*t+l]],s=6*t+3*l,r[s+0]=n.x,r[s+1]=n.y,r[s+2]=n.z;this.addAttribute("position",new ht(r,3))}else if(t&&t.isBufferGeometry){if(null!==t.index){for(u=t.index.array,o=t.attributes.position,i=t.groups,s=0,0===i.length&&t.addGroup(0,u.length),c=new Uint32Array(2*u.length),a=0,h=i.length;a<h;++a){t=i[a],l=t.start,p=t.count,t=l;for(var f=l+p;t<f;t+=3)for(l=0;3>l;l++)r[0]=u[t+l],r[1]=u[t+(l+1)%3],r.sort(e),p=r.toString(),void 0===n[p]&&(c[2*s]=r[0],c[2*s+1]=r[1],n[p]=!0,s++)}for(r=new Float32Array(6*s),t=0,u=s;t<u;t++)for(l=0;2>l;l++)s=6*t+3*l,n=c[2*t+l],r[s+0]=o.getX(n),r[s+1]=o.getY(n),r[s+2]=o.getZ(n)}else for(o=t.attributes.position.array,s=o.length/3,c=s/3,r=new Float32Array(6*s),t=0,u=c;t<u;t++)for(l=0;3>l;l++)s=18*t+6*l,c=9*t+3*l,r[s+0]=o[c],r[s+1]=o[c+1],r[s+2]=o[c+2],n=9*t+(l+1)%3*3,r[s+3]=o[n],r[s+4]=o[n+1],r[s+5]=o[n+2];this.addAttribute("position",new ht(r,3))}}function we(t,e,r){wt.call(this),this.type="ParametricBufferGeometry",this.parameters={func:t,slices:e,stacks:r};var n,i,o,a,s,c=[],u=[],h=e+1;for(n=0;n<=r;n++)for(s=n/r,i=0;i<=e;i++)a=i/e,o=t(a,s),c.push(o.x,o.y,o.z),u.push(a,s);t=[];var l;for(n=0;n<r;n++)for(i=0;i<e;i++)o=n*h+i,a=n*h+i+1,s=(n+1)*h+i+1,l=(n+1)*h+i,t.push(o,a,l),t.push(a,s,l);this.setIndex(new(65535<t.length?gt:mt)(t,1)),this.addAttribute("position",new yt(c,3)),this.addAttribute("uv",new yt(u,2)),this.computeVertexNormals()}function Se(t,e,r){xt.call(this),this.type="ParametricGeometry",this.parameters={func:t,slices:e,stacks:r},this.fromBufferGeometry(new we(t,e,r)),this.mergeVertices()}function Me(t,e,n,i){function o(t){u.push(t.x,t.y,t.z)}function a(e,r){var n=3*e;r.x=t[n+0],r.y=t[n+1],r.z=t[n+2]}function s(t,e,r,n){0>n&&1===t.x&&(h[e]=t.x-1),0===r.x&&0===r.z&&(h[e]=n/2/Math.PI+.5)}wt.call(this),this.type="PolyhedronBufferGeometry",this.parameters={vertices:t,indices:e,radius:n,detail:i},n=n||1;var u=[],h=[];!function(t){for(var r=new c,n=new c,i=new c,s=0;s<e.length;s+=3){a(e[s+0],r),a(e[s+1],n),a(e[s+2],i);var u,h,l=r,p=n,f=i,d=Math.pow(2,t),m=[];for(u=0;u<=d;u++){m[u]=[];var v=l.clone().lerp(f,u/d),g=p.clone().lerp(f,u/d),y=d-u;for(h=0;h<=y;h++)m[u][h]=0===h&&u===d?v:v.clone().lerp(g,h/y)}for(u=0;u<d;u++)for(h=0;h<2*(d-u)-1;h++)l=Math.floor(h/2),0==h%2?(o(m[u][l+1]),o(m[u+1][l]),o(m[u][l])):(o(m[u][l+1]),o(m[u+1][l+1]),o(m[u+1][l]))}}(i||0),function(t){for(var e=new c,r=0;r<u.length;r+=3)e.x=u[r+0],e.y=u[r+1],e.z=u[r+2],e.normalize().multiplyScalar(t),u[r+0]=e.x,u[r+1]=e.y,u[r+2]=e.z}(n),function(){for(var t=new c,e=0;e<u.length;e+=3)t.x=u[e+0],t.y=u[e+1],t.z=u[e+2],h.push(Math.atan2(t.z,-t.x)/2/Math.PI+.5,1-(Math.atan2(-t.y,Math.sqrt(t.x*t.x+t.z*t.z))/Math.PI+.5));for(var t=new c,e=new c,n=new c,i=new c,o=new r,a=new r,l=new r,p=0,f=0;p<u.length;p+=9,f+=6){t.set(u[p+0],u[p+1],u[p+2]),e.set(u[p+3],u[p+4],u[p+5]),n.set(u[p+6],u[p+7],u[p+8]),o.set(h[f+0],h[f+1]),a.set(h[f+2],h[f+3]),l.set(h[f+4],h[f+5]),i.copy(t).add(e).add(n).divideScalar(3);var d=Math.atan2(i.z,-i.x);s(o,f+0,t,d),s(a,f+2,e,d),s(l,f+4,n,d)}for(t=0;t<h.length;t+=6)e=h[t+0],n=h[t+2],i=h[t+4],o=Math.min(e,n,i),.9<Math.max(e,n,i)&&.1>o&&(.2>e&&(h[t+0]+=1),.2>n&&(h[t+2]+=1),.2>i&&(h[t+4]+=1))}(),this.addAttribute("position",new yt(u,3)),this.addAttribute("normal",new yt(u.slice(),3)),this.addAttribute("uv",new yt(h,2)),this.normalizeNormals(),this.boundingSphere=new Z(new c,n)}function Ee(t,e){Me.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],t,e),this.type="TetrahedronBufferGeometry",this.parameters={radius:t,detail:e}}function Te(t,e){xt.call(this),this.type="TetrahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new Ee(t,e)),this.mergeVertices()}function Ce(t,e){Me.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],t,e),this.type="OctahedronBufferGeometry",this.parameters={radius:t,detail:e}}function Oe(t,e){xt.call(this),this.type="OctahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new Ce(t,e)),this.mergeVertices()}function Pe(t,e){var r=(1+Math.sqrt(5))/2;Me.call(this,[-1,r,0,1,r,0,-1,-r,0,1,-r,0,0,-1,r,0,1,r,0,-1,-r,0,1,-r,r,0,-1,r,0,1,-r,0,-1,-r,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],t,e),this.type="IcosahedronBufferGeometry",this.parameters={radius:t,detail:e}}function Ae(t,e){xt.call(this),this.type="IcosahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new Pe(t,e)),this.mergeVertices()}function je(t,e){var r=(1+Math.sqrt(5))/2,n=1/r;Me.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-n,-r,0,-n,r,0,n,-r,0,n,r,-n,-r,0,-n,r,0,n,-r,0,n,r,0,-r,0,-n,r,0,-n,-r,0,n,r,0,n],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type="DodecahedronBufferGeometry",this.parameters={radius:t,detail:e}}function Re(t,e){xt.call(this),this.type="DodecahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new je(t,e)),this.mergeVertices()}function Le(t,e,r,n){xt.call(this),this.type="PolyhedronGeometry",this.parameters={vertices:t,indices:e,radius:r,detail:n},this.fromBufferGeometry(new Me(t,e,r,n)),this.mergeVertices()}function Ne(t,e,n,i,o){function a(r){var o=t.getPointAt(r/e),a=s.normals[r];for(r=s.binormals[r],h=0;h<=i;h++){var c=h/i*Math.PI*2,u=Math.sin(c),c=-Math.cos(c);p.x=c*a.x+u*r.x,p.y=c*a.y+u*r.y,p.z=c*a.z+u*r.z,p.normalize(),m.push(p.x,p.y,p.z),l.x=o.x+n*p.x,l.y=o.y+n*p.y,l.z=o.z+n*p.z,d.push(l.x,l.y,l.z)}}wt.call(this),this.type="TubeBufferGeometry",this.parameters={path:t,tubularSegments:e,radius:n,radialSegments:i,closed:o},e=e||64,n=n||1,i=i||8,o=o||!1;var s=t.computeFrenetFrames(e,o);this.tangents=s.tangents,this.normals=s.normals,this.binormals=s.binormals;var u,h,l=new c,p=new c,f=new r,d=[],m=[],v=[],g=[];for(u=0;u<e;u++)a(u);for(a(!1===o?e:0),u=0;u<=e;u++)for(h=0;h<=i;h++)f.x=u/e,f.y=h/i,v.push(f.x,f.y);!function(){for(h=1;h<=e;h++)for(u=1;u<=i;u++){var t=(i+1)*h+(u-1),r=(i+1)*h+u,n=(i+1)*(h-1)+u;g.push((i+1)*(h-1)+(u-1),t,n),g.push(t,r,n)}}(),this.setIndex(new(65535<g.length?gt:mt)(g,1)),this.addAttribute("position",new yt(d,3)),this.addAttribute("normal",new yt(m,3)),this.addAttribute("uv",new yt(v,2))}function Ie(t,e,r,n,i,o){xt.call(this),this.type="TubeGeometry",this.parameters={path:t,tubularSegments:e,radius:r,radialSegments:n,closed:i},void 0!==o&&console.warn("THREE.TubeGeometry: taper has been removed."),t=new Ne(t,e,r,n,i),this.tangents=t.tangents,this.normals=t.normals,this.binormals=t.binormals,this.fromBufferGeometry(t),this.mergeVertices()}function De(t,e,n,i,o,a){function s(t,e,r,n,i){var o=Math.sin(t);e=r/e*t,r=Math.cos(e),i.x=n*(2+r)*.5*Math.cos(t),i.y=n*(2+r)*o*.5,i.z=n*Math.sin(e)*.5}wt.call(this),this.type="TorusKnotBufferGeometry",this.parameters={radius:t,tube:e,tubularSegments:n,radialSegments:i,p:o,q:a},t=t||100,e=e||40,n=Math.floor(n)||64,i=Math.floor(i)||8,o=o||2,a=a||3;var u,h,l=(i+1)*(n+1),p=i*n*6,p=new ht(new(65535<p?Uint32Array:Uint16Array)(p),1),f=new ht(new Float32Array(3*l),3),d=new ht(new Float32Array(3*l),3),l=new ht(new Float32Array(2*l),2),m=0,v=0,g=new c,y=new c,b=new r,_=new c,x=new c,w=new c,S=new c,M=new c;for(u=0;u<=n;++u)for(h=u/n*o*Math.PI*2,s(h,o,a,t,_),s(h+.01,o,a,t,x),S.subVectors(x,_),M.addVectors(x,_),w.crossVectors(S,M),M.crossVectors(w,S),w.normalize(),M.normalize(),h=0;h<=i;++h){var E=h/i*Math.PI*2,T=-e*Math.cos(E),E=e*Math.sin(E);g.x=_.x+(T*M.x+E*w.x),g.y=_.y+(T*M.y+E*w.y),g.z=_.z+(T*M.z+E*w.z),f.setXYZ(m,g.x,g.y,g.z),y.subVectors(g,_).normalize(),d.setXYZ(m,y.x,y.y,y.z),b.x=u/n,b.y=h/i,l.setXY(m,b.x,b.y),m++}for(h=1;h<=n;h++)for(u=1;u<=i;u++)t=(i+1)*h+(u-1),e=(i+1)*h+u,o=(i+1)*(h-1)+u,p.setX(v,(i+1)*(h-1)+(u-1)),v++,p.setX(v,t),v++,p.setX(v,o),v++,p.setX(v,t),v++,p.setX(v,e),v++,p.setX(v,o),v++;this.setIndex(p),this.addAttribute("position",f),this.addAttribute("normal",d),this.addAttribute("uv",l)}function ke(t,e,r,n,i,o,a){xt.call(this),this.type="TorusKnotGeometry",this.parameters={radius:t,tube:e,tubularSegments:r,radialSegments:n,p:i,q:o},void 0!==a&&console.warn("THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead."),this.fromBufferGeometry(new De(t,e,r,n,i,o)),this.mergeVertices()}function Fe(t,e,r,n,i){wt.call(this),this.type="TorusBufferGeometry",this.parameters={radius:t,tube:e,radialSegments:r,tubularSegments:n,arc:i},t=t||100,e=e||40,r=Math.floor(r)||8,n=Math.floor(n)||6,i=i||2*Math.PI;var o,a,s=(r+1)*(n+1),u=r*n*6,u=new(65535<u?Uint32Array:Uint16Array)(u),h=new Float32Array(3*s),l=new Float32Array(3*s),s=new Float32Array(2*s),p=0,f=0,d=0,m=new c,v=new c,g=new c;for(o=0;o<=r;o++)for(a=0;a<=n;a++){var y=a/n*i,b=o/r*Math.PI*2;v.x=(t+e*Math.cos(b))*Math.cos(y),v.y=(t+e*Math.cos(b))*Math.sin(y),v.z=e*Math.sin(b),h[p]=v.x,h[p+1]=v.y,h[p+2]=v.z,m.x=t*Math.cos(y),m.y=t*Math.sin(y),g.subVectors(v,m).normalize(),l[p]=g.x,l[p+1]=g.y,l[p+2]=g.z,s[f]=a/n,s[f+1]=o/r,p+=3,f+=2}for(o=1;o<=r;o++)for(a=1;a<=n;a++)t=(n+1)*(o-1)+a-1,e=(n+1)*(o-1)+a,i=(n+1)*o+a,u[d]=(n+1)*o+a-1,u[d+1]=t,u[d+2]=i,u[d+3]=t,u[d+4]=e,u[d+5]=i,d+=6;this.setIndex(new ht(u,1)),this.addAttribute("position",new ht(h,3)),this.addAttribute("normal",new ht(l,3)),this.addAttribute("uv",new ht(s,2))}function Ue(t,e,r,n,i){xt.call(this),this.type="TorusGeometry",this.parameters={radius:t,tube:e,radialSegments:r,tubularSegments:n,arc:i},this.fromBufferGeometry(new Fe(t,e,r,n,i))}function Be(t,e){void 0!==t&&(xt.call(this),this.type="ExtrudeGeometry",t=Array.isArray(t)?t:[t],this.addShapeList(t,e),this.computeFaceNormals())}function ze(t,e){e=e||{};var r=e.font;if(!1===(r&&r.isFont))return console.error("THREE.TextGeometry: font parameter is not an instance of THREE.Font."),new xt;r=r.generateShapes(t,e.size,e.curveSegments),e.amount=void 0!==e.height?e.height:50,void 0===e.bevelThickness&&(e.bevelThickness=10),void 0===e.bevelSize&&(e.bevelSize=8),void 0===e.bevelEnabled&&(e.bevelEnabled=!1),Be.call(this,r,e),this.type="TextGeometry"}function $e(t,e,r,n,i,o,a){wt.call(this),this.type="SphereBufferGeometry",this.parameters={radius:t,widthSegments:e,heightSegments:r,phiStart:n,phiLength:i,thetaStart:o,thetaLength:a},t=t||50,e=Math.max(3,Math.floor(e)||8),r=Math.max(2,Math.floor(r)||6),n=void 0!==n?n:0,i=void 0!==i?i:2*Math.PI,o=void 0!==o?o:0,a=void 0!==a?a:Math.PI;for(var s=o+a,u=(e+1)*(r+1),h=new ht(new Float32Array(3*u),3),l=new ht(new Float32Array(3*u),3),u=new ht(new Float32Array(2*u),2),p=0,f=[],d=new c,m=0;m<=r;m++){for(var v=[],g=m/r,y=0;y<=e;y++){var b=y/e,_=-t*Math.cos(n+b*i)*Math.sin(o+g*a),x=t*Math.cos(o+g*a),w=t*Math.sin(n+b*i)*Math.sin(o+g*a);d.set(_,x,w).normalize(),h.setXYZ(p,_,x,w),l.setXYZ(p,d.x,d.y,d.z),u.setXY(p,b,1-g),v.push(p),p++}f.push(v)}for(n=[],m=0;m<r;m++)for(y=0;y<e;y++)i=f[m][y+1],a=f[m][y],p=f[m+1][y],d=f[m+1][y+1],(0!==m||0<o)&&n.push(i,a,d),(m!==r-1||s<Math.PI)&&n.push(a,p,d);this.setIndex(new(65535<h.count?gt:mt)(n,1)),this.addAttribute("position",h),this.addAttribute("normal",l),this.addAttribute("uv",u),this.boundingSphere=new Z(new c,t)}function Ge(t,e,r,n,i,o,a){xt.call(this),this.type="SphereGeometry",this.parameters={radius:t,widthSegments:e,heightSegments:r,phiStart:n,phiLength:i,thetaStart:o,thetaLength:a},this.fromBufferGeometry(new $e(t,e,r,n,i,o,a))}function Ve(t,e,n,i,o,a){wt.call(this),this.type="RingBufferGeometry",this.parameters={innerRadius:t,outerRadius:e,thetaSegments:n,phiSegments:i,thetaStart:o,thetaLength:a},t=t||20,e=e||50,o=void 0!==o?o:0,a=void 0!==a?a:2*Math.PI,n=void 0!==n?Math.max(3,n):8,i=void 0!==i?Math.max(1,i):1;var s,u,h=(n+1)*(i+1),l=n*i*6,l=new ht(new(65535<l?Uint32Array:Uint16Array)(l),1),p=new ht(new Float32Array(3*h),3),f=new ht(new Float32Array(3*h),3),h=new ht(new Float32Array(2*h),2),d=0,m=0,v=t,g=(e-t)/i,y=new c,b=new r;for(t=0;t<=i;t++){for(u=0;u<=n;u++)s=o+u/n*a,y.x=v*Math.cos(s),y.y=v*Math.sin(s),p.setXYZ(d,y.x,y.y,y.z),f.setXYZ(d,0,0,1),
-b.x=(y.x/e+1)/2,b.y=(y.y/e+1)/2,h.setXY(d,b.x,b.y),d++;v+=g}for(t=0;t<i;t++)for(e=t*(n+1),u=0;u<n;u++)o=s=u+e,a=s+n+1,d=s+n+2,s+=1,l.setX(m,o),m++,l.setX(m,a),m++,l.setX(m,d),m++,l.setX(m,o),m++,l.setX(m,d),m++,l.setX(m,s),m++;this.setIndex(l),this.addAttribute("position",p),this.addAttribute("normal",f),this.addAttribute("uv",h)}function He(t,e,r,n,i,o){xt.call(this),this.type="RingGeometry",this.parameters={innerRadius:t,outerRadius:e,thetaSegments:r,phiSegments:n,thetaStart:i,thetaLength:o},this.fromBufferGeometry(new Ve(t,e,r,n,i,o))}function We(t,e,r,n){xt.call(this),this.type="PlaneGeometry",this.parameters={width:t,height:e,widthSegments:r,heightSegments:n},this.fromBufferGeometry(new Et(t,e,r,n))}function qe(t,e,n,i){wt.call(this),this.type="LatheBufferGeometry",this.parameters={points:t,segments:e,phiStart:n,phiLength:i},e=Math.floor(e)||12,n=n||0,i=i||2*Math.PI,i=ri.clamp(i,0,2*Math.PI);for(var o=(e+1)*t.length,a=e*t.length*6,s=new ht(new(65535<a?Uint32Array:Uint16Array)(a),1),u=new ht(new Float32Array(3*o),3),h=new ht(new Float32Array(2*o),2),l=0,p=0,f=1/e,d=new c,m=new r,o=0;o<=e;o++)for(var a=n+o*f*i,v=Math.sin(a),g=Math.cos(a),a=0;a<=t.length-1;a++)d.x=t[a].x*v,d.y=t[a].y,d.z=t[a].x*g,u.setXYZ(l,d.x,d.y,d.z),m.x=o/e,m.y=a/(t.length-1),h.setXY(l,m.x,m.y),l++;for(o=0;o<e;o++)for(a=0;a<t.length-1;a++)n=a+o*t.length,l=n+t.length,f=n+t.length+1,d=n+1,s.setX(p,n),p++,s.setX(p,l),p++,s.setX(p,d),p++,s.setX(p,l),p++,s.setX(p,f),p++,s.setX(p,d),p++;if(this.setIndex(s),this.addAttribute("position",u),this.addAttribute("uv",h),this.computeVertexNormals(),i===2*Math.PI)for(i=this.attributes.normal.array,s=new c,u=new c,h=new c,n=e*t.length*3,a=o=0;o<t.length;o++,a+=3)s.x=i[a+0],s.y=i[a+1],s.z=i[a+2],u.x=i[n+a+0],u.y=i[n+a+1],u.z=i[n+a+2],h.addVectors(s,u).normalize(),i[a+0]=i[n+a+0]=h.x,i[a+1]=i[n+a+1]=h.y,i[a+2]=i[n+a+2]=h.z}function Xe(t,e,r,n){xt.call(this),this.type="LatheGeometry",this.parameters={points:t,segments:e,phiStart:r,phiLength:n},this.fromBufferGeometry(new qe(t,e,r,n)),this.mergeVertices()}function Ye(t,e){function r(t){var r,s,u=n.length/3;t=t.extractPoints(e);var h=t.shape,l=t.holes;if(!1===yi.isClockWise(h))for(h=h.reverse(),t=0,r=l.length;t<r;t++)s=l[t],!0===yi.isClockWise(s)&&(l[t]=s.reverse());var p=yi.triangulateShape(h,l);for(t=0,r=l.length;t<r;t++)s=l[t],h=h.concat(s);for(t=0,r=h.length;t<r;t++)s=h[t],n.push(s.x,s.y,0),i.push(0,0,1),o.push(s.x,s.y);for(t=0,r=p.length;t<r;t++)h=p[t],a.push(h[0]+u,h[1]+u,h[2]+u),c+=3}wt.call(this),this.type="ShapeBufferGeometry",this.parameters={shapes:t,curveSegments:e},e=e||12;var n=[],i=[],o=[],a=[],s=0,c=0;if(!1===Array.isArray(t))r(t);else for(var u=0;u<t.length;u++)r(t[u]),this.addGroup(s,c,u),s+=c,c=0;this.setIndex(new(65535<a.length?gt:mt)(a,1)),this.addAttribute("position",new yt(n,3)),this.addAttribute("normal",new yt(i,3)),this.addAttribute("uv",new yt(o,2))}function Ke(t,e){xt.call(this),this.type="ShapeGeometry","object"==typeof e&&(console.warn("THREE.ShapeGeometry: Options parameter has been removed."),e=e.curveSegments),this.parameters={shapes:t,curveSegments:e},this.fromBufferGeometry(new Ye(t,e)),this.mergeVertices()}function Ze(t,e){function r(t,e){return t-e}wt.call(this);var n,i=Math.cos(ri.DEG2RAD*(void 0!==e?e:1)),o=[0,0],a={},s=["a","b","c"];t.isBufferGeometry?(n=new xt,n.fromBufferGeometry(t)):n=t.clone(),n.mergeVertices(),n.computeFaceNormals();var c=n.vertices;n=n.faces;for(var u=0,h=n.length;u<h;u++)for(var l=n[u],p=0;3>p;p++){o[0]=l[s[p]],o[1]=l[s[(p+1)%3]],o.sort(r);var f=o.toString();void 0===a[f]?a[f]={vert1:o[0],vert2:o[1],face1:u,face2:void 0}:a[f].face2=u}o=[];for(f in a)s=a[f],(void 0===s.face2||n[s.face1].normal.dot(n[s.face2].normal)<=i)&&(u=c[s.vert1],o.push(u.x),o.push(u.y),o.push(u.z),u=c[s.vert2],o.push(u.x),o.push(u.y),o.push(u.z));this.addAttribute("position",new yt(o,3))}function Je(t,e,n,i,o,a,s,u){function h(n){var o,a,h,p=new r,f=new c,d=0,x=!0===n?t:e,M=!0===n?1:-1;for(a=b,o=1;o<=i;o++)v.setXYZ(b,0,w*M,0),g.setXYZ(b,0,M,0),p.x=.5,p.y=.5,y.setXY(b,p.x,p.y),b++;for(h=b,o=0;o<=i;o++){var E=o/i*u+s,T=Math.cos(E),E=Math.sin(E);f.x=x*E,f.y=w*M,f.z=x*T,v.setXYZ(b,f.x,f.y,f.z),g.setXYZ(b,0,M,0),p.x=.5*T+.5,p.y=.5*E*M+.5,y.setXY(b,p.x,p.y),b++}for(o=0;o<i;o++)p=a+o,f=h+o,!0===n?(m.setX(_,f),_++,m.setX(_,f+1)):(m.setX(_,f+1),_++,m.setX(_,f)),_++,m.setX(_,p),_++,d+=3;l.addGroup(S,d,!0===n?1:2),S+=d}wt.call(this),this.type="CylinderBufferGeometry",this.parameters={radiusTop:t,radiusBottom:e,height:n,radialSegments:i,heightSegments:o,openEnded:a,thetaStart:s,thetaLength:u};var l=this;t=void 0!==t?t:20,e=void 0!==e?e:20,n=void 0!==n?n:100,i=Math.floor(i)||8,o=Math.floor(o)||1,a=void 0!==a&&a,s=void 0!==s?s:0,u=void 0!==u?u:2*Math.PI;var p=0;!1===a&&(0<t&&p++,0<e&&p++);var f=function(){var t=(i+1)*(o+1);return!1===a&&(t+=(i+1)*p+i*p),t}(),d=function(){var t=i*o*6;return!1===a&&(t+=i*p*3),t}(),m=new ht(new(65535<d?Uint32Array:Uint16Array)(d),1),v=new ht(new Float32Array(3*f),3),g=new ht(new Float32Array(3*f),3),y=new ht(new Float32Array(2*f),2),b=0,_=0,x=[],w=n/2,S=0;!function(){var r,a,h=new c,p=new c,f=0,d=(e-t)/n;for(a=0;a<=o;a++){var M=[],E=a/o,T=E*(e-t)+t;for(r=0;r<=i;r++){var C=r/i,O=C*u+s,P=Math.sin(O),O=Math.cos(O);p.x=T*P,p.y=-E*n+w,p.z=T*O,v.setXYZ(b,p.x,p.y,p.z),h.set(P,d,O).normalize(),g.setXYZ(b,h.x,h.y,h.z),y.setXY(b,C,1-E),M.push(b),b++}x.push(M)}for(r=0;r<i;r++)for(a=0;a<o;a++)h=x[a+1][r],p=x[a+1][r+1],d=x[a][r+1],m.setX(_,x[a][r]),_++,m.setX(_,h),_++,m.setX(_,d),_++,m.setX(_,h),_++,m.setX(_,p),_++,m.setX(_,d),_++,f+=6;l.addGroup(S,f,0),S+=f}(),!1===a&&(0<t&&h(!0),0<e&&h(!1)),this.setIndex(m),this.addAttribute("position",v),this.addAttribute("normal",g),this.addAttribute("uv",y)}function Qe(t,e,r,n,i,o,a,s){xt.call(this),this.type="CylinderGeometry",this.parameters={radiusTop:t,radiusBottom:e,height:r,radialSegments:n,heightSegments:i,openEnded:o,thetaStart:a,thetaLength:s},this.fromBufferGeometry(new Je(t,e,r,n,i,o,a,s)),this.mergeVertices()}function tr(t,e,r,n,i,o,a){Qe.call(this,0,t,e,r,n,i,o,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:r,heightSegments:n,openEnded:i,thetaStart:o,thetaLength:a}}function er(t,e,r,n,i,o,a){Je.call(this,0,t,e,r,n,i,o,a),this.type="ConeBufferGeometry",this.parameters={radius:t,height:e,radialSegments:r,heightSegments:n,openEnded:i,thetaStart:o,thetaLength:a}}function rr(t,e,r,n){wt.call(this),this.type="CircleBufferGeometry",this.parameters={radius:t,segments:e,thetaStart:r,thetaLength:n},t=t||50,e=void 0!==e?Math.max(3,e):8,r=void 0!==r?r:0,n=void 0!==n?n:2*Math.PI;var i=e+2,o=new Float32Array(3*i),a=new Float32Array(3*i),i=new Float32Array(2*i);a[2]=1,i[0]=.5,i[1]=.5;for(var s=0,u=3,h=2;s<=e;s++,u+=3,h+=2){var l=r+s/e*n;o[u]=t*Math.cos(l),o[u+1]=t*Math.sin(l),a[u+2]=1,i[h]=(o[u]/t+1)/2,i[h+1]=(o[u+1]/t+1)/2}for(r=[],u=1;u<=e;u++)r.push(u,u+1,0);this.setIndex(new ht(new Uint16Array(r),1)),this.addAttribute("position",new ht(o,3)),this.addAttribute("normal",new ht(a,3)),this.addAttribute("uv",new ht(i,2)),this.boundingSphere=new Z(new c,t)}function nr(t,e,r,n){xt.call(this),this.type="CircleGeometry",this.parameters={radius:t,segments:e,thetaStart:r,thetaLength:n},this.fromBufferGeometry(new rr(t,e,r,n))}function ir(t,e,r,n,i,o){xt.call(this),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:r,widthSegments:n,heightSegments:i,depthSegments:o},this.fromBufferGeometry(new Mt(t,e,r,n,i,o)),this.mergeVertices()}function or(){X.call(this,{uniforms:ui.merge([pi.lights,{opacity:{value:1}}]),vertexShader:hi.shadow_vert,fragmentShader:hi.shadow_frag}),this.transparent=this.lights=!0,Object.defineProperties(this,{opacity:{enumerable:!0,get:function(){return this.uniforms.opacity.value},set:function(t){this.uniforms.opacity.value=t}}})}function ar(t){X.call(this,t),this.type="RawShaderMaterial"}function sr(t){this.uuid=ri.generateUUID(),this.type="MultiMaterial",this.materials=Array.isArray(t)?t:[],this.visible=!0}function cr(t){q.call(this),this.defines={STANDARD:""},this.type="MeshStandardMaterial",this.color=new $(16777215),this.metalness=this.roughness=.5,this.lightMap=this.map=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new $(0),this.emissiveIntensity=1,this.bumpMap=this.emissiveMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new r(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.envMap=this.alphaMap=this.metalnessMap=this.roughnessMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinejoin=this.wireframeLinecap="round",this.morphNormals=this.morphTargets=this.skinning=!1,this.setValues(t)}function ur(t){cr.call(this),this.defines={PHYSICAL:""},this.type="MeshPhysicalMaterial",this.reflectivity=.5,this.clearCoatRoughness=this.clearCoat=0,this.setValues(t)}function hr(t){q.call(this),this.type="MeshPhongMaterial",this.color=new $(16777215),this.specular=new $(1118481),this.shininess=30,this.lightMap=this.map=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new $(0),this.emissiveIntensity=1,this.bumpMap=this.emissiveMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new r(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.envMap=this.alphaMap=this.specularMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinejoin=this.wireframeLinecap="round",this.morphNormals=this.morphTargets=this.skinning=!1,this.setValues(t)}function lr(t){hr.call(this),this.defines={TOON:""},this.type="MeshToonMaterial",this.gradientMap=null,this.setValues(t)}function pr(t){q.call(this,t),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new r(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.morphNormals=this.morphTargets=this.skinning=this.lights=this.fog=!1,this.setValues(t)}function fr(t){q.call(this),this.type="MeshLambertMaterial",this.color=new $(16777215),this.lightMap=this.map=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new $(0),this.emissiveIntensity=1,this.envMap=this.alphaMap=this.specularMap=this.emissiveMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinejoin=this.wireframeLinecap="round",this.morphNormals=this.morphTargets=this.skinning=!1,this.setValues(t)}function dr(t){q.call(this),this.type="LineDashedMaterial",this.color=new $(16777215),this.scale=this.linewidth=1,this.dashSize=3,this.gapSize=1,this.lights=!1,this.setValues(t)}function mr(t,e,r){var n=this,i=!1,o=0,a=0;this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=r,this.itemStart=function(t){a++,!1===i&&void 0!==n.onStart&&n.onStart(t,o,a),i=!0},this.itemEnd=function(t){o++,void 0!==n.onProgress&&n.onProgress(t,o,a),o===a&&(i=!1,void 0!==n.onLoad)&&n.onLoad()},this.itemError=function(t){void 0!==n.onError&&n.onError(t)}}function vr(t){this.manager=void 0!==t?t:wi}function gr(t){this.manager=void 0!==t?t:wi,this._parser=null}function yr(t){this.manager=void 0!==t?t:wi,this._parser=null}function br(t){this.manager=void 0!==t?t:wi}function _r(t){this.manager=void 0!==t?t:wi}function xr(t){this.manager=void 0!==t?t:wi}function wr(t,e){ot.call(this),this.type="Light",this.color=new $(t),this.intensity=void 0!==e?e:1,this.receiveShadow=void 0}function Sr(t,e,r){wr.call(this,t,r),this.type="HemisphereLight",this.castShadow=void 0,this.position.copy(ot.DefaultUp),this.updateMatrix(),this.groundColor=new $(e)}function Mr(t){this.camera=t,this.bias=0,this.radius=1,this.mapSize=new r(512,512),this.map=null,this.matrix=new u}function Er(){Mr.call(this,new Ct(50,1,.5,500))}function Tr(t,e,r,n,i,o){wr.call(this,t,e),this.type="SpotLight",this.position.copy(ot.DefaultUp),this.updateMatrix(),this.target=new ot,Object.defineProperty(this,"power",{get:function(){return this.intensity*Math.PI},set:function(t){this.intensity=t/Math.PI}}),this.distance=void 0!==r?r:0,this.angle=void 0!==n?n:Math.PI/3,this.penumbra=void 0!==i?i:0,this.decay=void 0!==o?o:1,this.shadow=new Er}function Cr(t,e,r,n){wr.call(this,t,e),this.type="PointLight",Object.defineProperty(this,"power",{get:function(){return 4*this.intensity*Math.PI},set:function(t){this.intensity=t/(4*Math.PI)}}),this.distance=void 0!==r?r:0,this.decay=void 0!==n?n:1,this.shadow=new Mr(new Ct(90,1,.5,500))}function Or(t){Mr.call(this,new Ot(-5,5,5,-5,.5,500))}function Pr(t,e){wr.call(this,t,e),this.type="DirectionalLight",this.position.copy(ot.DefaultUp),this.updateMatrix(),this.target=new ot,this.shadow=new Or}function Ar(t,e){wr.call(this,t,e),this.type="AmbientLight",this.castShadow=void 0}function jr(t,e,r,n){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=void 0!==n?n:new e.constructor(r),this.sampleValues=e,this.valueSize=r}function Rr(t,e,r,n){jr.call(this,t,e,r,n),this._offsetNext=this._weightNext=this._offsetPrev=this._weightPrev=-0}function Lr(t,e,r,n){jr.call(this,t,e,r,n)}function Nr(t,e,r,n){jr.call(this,t,e,r,n)}function Ir(t,e,r,n){if(void 0===t)throw Error("track name is undefined");if(void 0===e||0===e.length)throw Error("no keyframes in track named "+t);this.name=t,this.times=Si.convertArray(e,this.TimeBufferType),this.values=Si.convertArray(r,this.ValueBufferType),this.setInterpolation(n||this.DefaultInterpolation),this.validate(),this.optimize()}function Dr(t,e,r,n){Ir.call(this,t,e,r,n)}function kr(t,e,r,n){jr.call(this,t,e,r,n)}function Fr(t,e,r,n){Ir.call(this,t,e,r,n)}function Ur(t,e,r,n){Ir.call(this,t,e,r,n)}function Br(t,e,r,n){Ir.call(this,t,e,r,n)}function zr(t,e,r){Ir.call(this,t,e,r)}function $r(t,e,r,n){Ir.call(this,t,e,r,n)}function Gr(t,e,r,n){Ir.apply(this,arguments)}function Vr(t,e,r){this.name=t,this.tracks=r,this.duration=void 0!==e?e:-1,this.uuid=ri.generateUUID(),0>this.duration&&this.resetDuration(),this.optimize()}function Hr(t){this.manager=void 0!==t?t:wi,this.textures={}}function Wr(t){this.manager=void 0!==t?t:wi}function qr(){this.onLoadStart=function(){},this.onLoadProgress=function(){},this.onLoadComplete=function(){}}function Xr(t){"boolean"==typeof t&&(console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor."),t=void 0),this.manager=void 0!==t?t:wi,this.withCredentials=!1}function Yr(t){this.manager=void 0!==t?t:wi,this.texturePath=""}function Kr(){}function Zr(t,e){this.v1=t,this.v2=e}function Jr(){this.curves=[],this.autoClose=!1}function Qr(t,e,r,n,i,o,a,s){this.aX=t,this.aY=e,this.xRadius=r,this.yRadius=n,this.aStartAngle=i,this.aEndAngle=o,this.aClockwise=a,this.aRotation=s||0}function tn(t){this.points=void 0===t?[]:t}function en(t,e,r,n){this.v0=t,this.v1=e,this.v2=r,this.v3=n}function rn(t,e,r){this.v0=t,this.v1=e,this.v2=r}function nn(){on.apply(this,arguments),this.holes=[]}function on(t){Jr.call(this),this.currentPoint=new r,t&&this.fromPoints(t)}function an(){this.subPaths=[],this.currentPath=null}function sn(t){this.data=t}function cn(t){this.manager=void 0!==t?t:wi}function un(t){this.manager=void 0!==t?t:wi}function hn(t,e,r,n){wr.call(this,t,e),this.type="RectAreaLight",this.position.set(0,1,0),this.updateMatrix(),this.width=void 0!==r?r:10,this.height=void 0!==n?n:10}function ln(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new Ct,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new Ct,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1}function pn(t,e,r){ot.call(this),this.type="CubeCamera";var n=new Ct(90,1,t,e);n.up.set(0,-1,0),n.lookAt(new c(1,0,0)),this.add(n);var i=new Ct(90,1,t,e);i.up.set(0,-1,0),i.lookAt(new c(-1,0,0)),this.add(i);var o=new Ct(90,1,t,e);o.up.set(0,0,1),o.lookAt(new c(0,1,0)),this.add(o);var s=new Ct(90,1,t,e);s.up.set(0,0,-1),s.lookAt(new c(0,-1,0)),this.add(s);var u=new Ct(90,1,t,e);u.up.set(0,-1,0),u.lookAt(new c(0,0,1)),this.add(u);var h=new Ct(90,1,t,e);h.up.set(0,-1,0),h.lookAt(new c(0,0,-1)),this.add(h),this.renderTarget=new a(r,r,{format:1022,magFilter:1006,minFilter:1006}),this.updateCubeMap=function(t,e){null===this.parent&&this.updateMatrixWorld();var r=this.renderTarget,a=r.texture.generateMipmaps;r.texture.generateMipmaps=!1,r.activeCubeFace=0,t.render(e,n,r),r.activeCubeFace=1,t.render(e,i,r),r.activeCubeFace=2,t.render(e,o,r),r.activeCubeFace=3,t.render(e,s,r),r.activeCubeFace=4,t.render(e,u,r),r.texture.generateMipmaps=a,r.activeCubeFace=5,t.render(e,h,r),t.setRenderTarget(null)}}function fn(){ot.call(this),this.type="AudioListener",this.context=Oi.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null}function dn(t){ot.call(this),this.type="Audio",this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.loop=!1,this.startTime=0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.sourceType="empty",this.filters=[]}function mn(t){dn.call(this,t),this.panner=this.context.createPanner(),this.panner.connect(this.gain)}function vn(t,e){this.analyser=t.context.createAnalyser(),this.analyser.fftSize=void 0!==e?e:2048,this.data=new Uint8Array(this.analyser.frequencyBinCount),t.getOutput().connect(this.analyser)}function gn(t,e,r){switch(this.binding=t,this.valueSize=r,t=Float64Array,e){case"quaternion":e=this._slerp;break;case"string":case"bool":t=Array,e=this._select;break;default:e=this._lerp}this.buffer=new t(4*r),this._mixBufferRegion=e,this.referenceCount=this.useCount=this.cumulativeWeight=0}function yn(t,e,r){this.path=e,this.parsedPath=r||yn.parseTrackName(e),this.node=yn.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t}function bn(t){this.uuid=ri.generateUUID(),this._objects=Array.prototype.slice.call(arguments),this.nCachedObjects_=0;var e={};this._indicesByUUID=e;for(var r=0,n=arguments.length;r!==n;++r)e[arguments[r].uuid]=r;this._paths=[],this._parsedPaths=[],this._bindings=[],this._bindingsIndicesByPath={};var i=this;this.stats={objects:{get total(){return i._objects.length},get inUse(){return this.total-i.nCachedObjects_}},get bindingsPerObject(){return i._bindings.length}}}function _n(t,e,r){this._mixer=t,this._clip=e,this._localRoot=r||null,t=e.tracks,e=t.length,r=Array(e);for(var n={endingStart:2400,endingEnd:2400},i=0;i!==e;++i){var o=t[i].createInterpolant(null);r[i]=o,o.settings=n}this._interpolantSettings=n,this._interpolants=r,this._propertyBindings=Array(e),this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function xn(t){this._root=t,this._initMemoryManager(),this.time=this._accuIndex=0,this.timeScale=1}function wn(t,e){"string"==typeof t&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),t=e),this.value=t}function Sn(){wt.call(this),this.type="InstancedBufferGeometry",this.maxInstancedCount=void 0}function Mn(t,e,r,n){this.uuid=ri.generateUUID(),this.data=t,this.itemSize=e,this.offset=r,this.normalized=!0===n}function En(t,e){this.uuid=ri.generateUUID(),this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.dynamic=!1,this.updateRange={offset:0,count:-1},this.onUploadCallback=function(){},this.version=0}function Tn(t,e,r){En.call(this,t,e),this.meshPerAttribute=r||1}function Cn(t,e,r){ht.call(this,t,e),this.meshPerAttribute=r||1}function On(t,e,r,n){this.ray=new rt(t,e),this.near=r||0,this.far=n||1/0,this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}},Object.defineProperties(this.params,{PointCloud:{get:function(){return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."),this.Points}}})}function Pn(t,e){return t.distance-e.distance}function An(t,e,r,n){if(!1!==t.visible&&(t.raycast(e,r),!0===n)){t=t.children,n=0;for(var i=t.length;n<i;n++)An(t[n],e,r,!0)}}function jn(t){this.autoStart=void 0===t||t,this.elapsedTime=this.oldTime=this.startTime=0,this.running=!1}function Rn(t,e,r){return this.radius=void 0!==t?t:1,this.phi=void 0!==e?e:0,this.theta=void 0!==r?r:0,this}function Ln(t,e,r){return this.radius=void 0!==t?t:1,this.theta=void 0!==e?e:0,this.y=void 0!==r?r:0,this}function Nn(t,e){St.call(this,t,e),this.animationsMap={},this.animationsList=[];var r=this.geometry.morphTargets.length;this.createAnimation("__default",0,r-1,r/1),this.setAnimationWeight("__default",1)}function In(t){ot.call(this),this.material=t,this.render=function(t){}}function Dn(t,e,r,n){this.object=t,this.size=void 0!==e?e:1,t=void 0!==r?r:16711680,n=void 0!==n?n:1,e=0,(r=this.object.geometry)&&r.isGeometry?e=3*r.faces.length:r&&r.isBufferGeometry&&(e=r.attributes.normal.count),r=new wt,e=new yt(6*e,3),r.addAttribute("position",e),fe.call(this,r,new le({color:t,linewidth:n})),this.matrixAutoUpdate=!1,this.update()}function kn(t){ot.call(this),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,t=new wt;for(var e=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1],r=0,n=1;32>r;r++,n++){var i=r/32*Math.PI*2,o=n/32*Math.PI*2;e.push(Math.cos(i),Math.sin(i),1,Math.cos(o),Math.sin(o),1)}t.addAttribute("position",new yt(e,3)),e=new le({fog:!1}),this.cone=new fe(t,e),this.add(this.cone),this.update()}function Fn(t){this.bones=this.getBoneList(t);for(var e=new wt,r=[],n=[],i=new $(0,0,1),o=new $(0,1,0),a=0;a<this.bones.length;a++){var s=this.bones[a];s.parent&&s.parent.isBone&&(r.push(0,0,0),r.push(0,0,0),n.push(i.r,i.g,i.b),n.push(o.r,o.g,o.b))}e.addAttribute("position",new yt(r,3)),e.addAttribute("color",new yt(n,3)),r=new le({vertexColors:2,depthTest:!1,depthWrite:!1,transparent:!0}),fe.call(this,e,r),this.root=t,this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.update()}function Un(t,e){this.light=t,this.light.updateMatrixWorld();var r=new $e(e,4,2),n=new ut({wireframe:!0,fog:!1});n.color.copy(this.light.color).multiplyScalar(this.light.intensity),St.call(this,r,n),this.matrix=this.light.matrixWorld,this.matrixAutoUpdate=!1}function Bn(t){ot.call(this),this.light=t,this.light.updateMatrixWorld();var e=new ut({color:t.color,fog:!1});t=new ut({color:t.color,fog:!1,wireframe:!0});var r=new wt;r.addAttribute("position",new ht(new Float32Array(18),3)),this.add(new St(r,e)),this.add(new St(r,t)),this.update()}function zn(t,e){ot.call(this),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1;var r=new Ce(e);r.rotateY(.5*Math.PI);var n=new ut({vertexColors:2,wireframe:!0}),i=r.getAttribute("position"),i=new Float32Array(3*i.count);r.addAttribute("color",new ht(i,3)),this.add(new St(r,n)),this.update()}function $n(t,e,r,n){t=t||10,e=e||10,r=new $(void 0!==r?r:4473924),n=new $(void 0!==n?n:8947848);for(var i=e/2,o=2*t/e,a=[],s=[],c=0,u=0,h=-t;c<=e;c++,h+=o){a.push(-t,0,h,t,0,h),a.push(h,0,-t,h,0,t);var l=c===i?r:n;l.toArray(s,u),u+=3,l.toArray(s,u),u+=3,l.toArray(s,u),u+=3,l.toArray(s,u),u+=3}t=new wt,t.addAttribute("position",new yt(a,3)),t.addAttribute("color",new yt(s,3)),a=new le({vertexColors:2}),fe.call(this,t,a)}function Gn(t,e,r,n,i,o){t=t||10,e=e||16,r=r||8,n=n||64,i=new $(void 0!==i?i:4473924),o=new $(void 0!==o?o:8947848);var a,s,c,u,h,l=[],p=[];for(c=0;c<=e;c++)s=c/e*2*Math.PI,a=Math.sin(s)*t,s=Math.cos(s)*t,l.push(0,0,0),l.push(a,0,s),h=1&c?i:o,p.push(h.r,h.g,h.b),p.push(h.r,h.g,h.b);for(c=0;c<=r;c++)for(h=1&c?i:o,u=t-t/r*c,e=0;e<n;e++)s=e/n*2*Math.PI,a=Math.sin(s)*u,s=Math.cos(s)*u,l.push(a,0,s),p.push(h.r,h.g,h.b),s=(e+1)/n*2*Math.PI,a=Math.sin(s)*u,s=Math.cos(s)*u,l.push(a,0,s),p.push(h.r,h.g,h.b);t=new wt,t.addAttribute("position",new yt(l,3)),t.addAttribute("color",new yt(p,3)),l=new le({vertexColors:2}),fe.call(this,t,l)}function Vn(t,e,r,n){this.object=t,this.size=void 0!==e?e:1,t=void 0!==r?r:16776960,n=void 0!==n?n:1,e=0,(r=this.object.geometry)&&r.isGeometry?e=r.faces.length:console.warn("THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead."),r=new wt,e=new yt(6*e,3),r.addAttribute("position",e),fe.call(this,r,new le({color:t,linewidth:n})),this.matrixAutoUpdate=!1,this.update()}function Hn(t,e){ot.call(this),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,void 0===e&&(e=1);var r=new wt;r.addAttribute("position",new yt([-e,e,0,e,e,0,e,-e,0,-e,-e,0,-e,e,0],3));var n=new le({fog:!1});this.add(new pe(r,n)),r=new wt,r.addAttribute("position",new yt([0,0,0,0,0,1],3)),this.add(new pe(r,n)),this.update()}function Wn(t){function e(t,e,n){r(t,n),r(e,n)}function r(t,e){o.push(0,0,0),a.push(e.r,e.g,e.b),void 0===s[t]&&(s[t]=[]),s[t].push(o.length/3-1)}var n=new wt,i=new le({color:16777215,vertexColors:1}),o=[],a=[],s={},c=new $(16755200),u=new $(16711680),h=new $(43775),l=new $(16777215),p=new $(3355443);e("n1","n2",c),e("n2","n4",c),e("n4","n3",c),e("n3","n1",c),e("f1","f2",c),e("f2","f4",c),e("f4","f3",c),e("f3","f1",c),e("n1","f1",c),e("n2","f2",c),e("n3","f3",c),e("n4","f4",c),e("p","n1",u),e("p","n2",u),e("p","n3",u),e("p","n4",u),e("u1","u2",h),e("u2","u3",h),e("u3","u1",h),e("c","t",l),e("p","c",p),e("cn1","cn2",p),e("cn3","cn4",p),e("cf1","cf2",p),e("cf3","cf4",p),n.addAttribute("position",new yt(o,3)),n.addAttribute("color",new yt(a,3)),fe.call(this,n,i),this.camera=t,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=s,this.update()}function qn(t,e){void 0===e&&(e=16776960);var r=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),n=new Float32Array(24),i=new wt;i.setIndex(new ht(r,1)),i.addAttribute("position",new ht(n,3)),fe.call(this,i,new le({color:e})),void 0!==t&&this.update(t)}function Xn(t,e,r,n,i,o){ot.call(this),void 0===n&&(n=16776960),void 0===r&&(r=1),void 0===i&&(i=.2*r),void 0===o&&(o=.2*i),this.position.copy(e),this.line=new pe(Pi,new le({color:n})),this.line.matrixAutoUpdate=!1,this.add(this.line),this.cone=new St(Ai,new ut({color:n})),this.cone.matrixAutoUpdate=!1,this.add(this.cone),this.setDirection(t),this.setLength(r,i,o)}function Yn(t){t=t||1;var e=[0,0,0,t,0,0,0,0,0,0,t,0,0,0,0,0,0,t];t=new wt,t.addAttribute("position",new yt(e,3)),t.addAttribute("color",new yt([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3)),e=new le({vertexColors:2}),fe.call(this,t,e)}function Kn(t,e,r,n,i,o){Qr.call(this,t,e,r,r,n,i,o)}function Zn(t){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."),ji.call(this,t),this.type="catmullrom",this.closed=!0}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52)),void 0===Math.sign&&(Math.sign=function(t){return 0>t?-1:0<t?1:+t}),void 0===Function.prototype.name&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}}),void 0===Object.assign&&function(){Object.assign=function(t){if(void 0===t||null===t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),r=1;r<arguments.length;r++){var n=arguments[r];if(void 0!==n&&null!==n)for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e}}(),Object.assign(e.prototype,{addEventListener:function(t,e){void 0===this._listeners&&(this._listeners={});var r=this._listeners;void 0===r[t]&&(r[t]=[]),-1===r[t].indexOf(e)&&r[t].push(e)},hasEventListener:function(t,e){if(void 0===this._listeners)return!1;var r=this._listeners;return void 0!==r[t]&&-1!==r[t].indexOf(e)},removeEventListener:function(t,e){if(void 0!==this._listeners){var r=this._listeners[t];if(void 0!==r){var n=r.indexOf(e);-1!==n&&r.splice(n,1)}}},dispatchEvent:function(t){if(void 0!==this._listeners){var e=this._listeners[t.type];if(void 0!==e){t.target=this;var r,n=[],i=e.length;for(r=0;r<i;r++)n[r]=e[r];for(r=0;r<i;r++)n[r].call(this,t)}}}});var Jn={NoBlending:0,NormalBlending:1,AdditiveBlending:2,SubtractiveBlending:3,MultiplyBlending:4,CustomBlending:5},Qn={UVMapping:300,CubeReflectionMapping:301,CubeRefractionMapping:302,EquirectangularReflectionMapping:303,EquirectangularRefractionMapping:304,SphericalReflectionMapping:305,CubeUVReflectionMapping:306,CubeUVRefractionMapping:307},ti={RepeatWrapping:1e3,ClampToEdgeWrapping:1001,MirroredRepeatWrapping:1002},ei={NearestFilter:1003,NearestMipMapNearestFilter:1004,NearestMipMapLinearFilter:1005,LinearFilter:1006,LinearMipMapNearestFilter:1007,LinearMipMapLinearFilter:1008},ri={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){var t,e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),r=Array(36),n=0;return function(){for(var i=0;36>i;i++)8===i||13===i||18===i||23===i?r[i]="-":14===i?r[i]="4":(2>=n&&(n=33554432+16777216*Math.random()|0),t=15&n,n>>=4,r[i]=e[19===i?3&t|8:t]);return r.join("")}}(),clamp:function(t,e,r){return Math.max(e,Math.min(r,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,r,n,i){return n+(t-e)*(i-n)/(r-e)},lerp:function(t,e,r){return(1-r)*t+r*e},smoothstep:function(t,e,r){return t<=e?0:t>=r?1:(t=(t-e)/(r-e))*t*(3-2*t)},smootherstep:function(t,e,r){return t<=e?0:t>=r?1:(t=(t-e)/(r-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},degToRad:function(t){return t*ri.DEG2RAD},radToDeg:function(t){return t*ri.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},nearestPowerOfTwo:function(t){return Math.pow(2,Math.round(Math.log(t)/Math.LN2))},nextPowerOfTwo:function(t){return t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,++t}};r.prototype={constructor:r,isVector2:!0,get width(){return this.x},set width(t){this.x=t},get height(){return this.y},set height(t){this.y=t},set:function(t,e){return this.x=t,this.y=e,this},setScalar:function(t){return this.y=this.x=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(t){return this.x=t.x,this.y=t.y,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)},addScalar:function(t){return this.x+=t,this.y+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)},subScalar:function(t){return this.x-=t,this.y-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this},multiply:function(t){return this.x*=t.x,this.y*=t.y,this},multiplyScalar:function(t){return isFinite(t)?(this.x*=t,this.y*=t):this.y=this.x=0,this},divide:function(t){return this.x/=t.x,this.y/=t.y,this},divideScalar:function(t){return this.multiplyScalar(1/t)},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this},clampScalar:function(){var t,e;return function(n,i){return void 0===t&&(t=new r,e=new r),
-t.set(n,n),e.set(i,i),this.clamp(t,e)}}(),clampLength:function(t,e){var r=this.length();return this.multiplyScalar(Math.max(t,Math.min(e,r))/r)},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},roundToZero:function(){return this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x),this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y),this},negate:function(){return this.x=-this.x,this.y=-this.y,this},dot:function(t){return this.x*t.x+this.y*t.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var t=Math.atan2(this.y,this.x);return 0>t&&(t+=2*Math.PI),t},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x;return t=this.y-t.y,e*e+t*t},distanceToManhattan:function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)},setLength:function(t){return this.multiplyScalar(t/this.length())},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this},lerpVectors:function(t,e,r){return this.subVectors(e,t).multiplyScalar(r).add(t)},equals:function(t){return t.x===this.x&&t.y===this.y},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t},fromAttribute:function(t,e,r){return void 0!==r&&console.warn("THREE.Vector2: offset has been removed from .fromAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this},rotateAround:function(t,e){var r=Math.cos(e),n=Math.sin(e),i=this.x-t.x,o=this.y-t.y;return this.x=i*r-o*n+t.x,this.y=i*n+o*r+t.y,this}};var ni=0;n.DEFAULT_IMAGE=void 0,n.DEFAULT_MAPPING=300,n.prototype={constructor:n,isTexture:!0,set needsUpdate(t){!0===t&&this.version++},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){if(void 0!==t.textures[this.uuid])return t.textures[this.uuid];var e={metadata:{version:4.4,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],wrap:[this.wrapS,this.wrapT],minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY};if(void 0!==this.image){var r=this.image;if(void 0===r.uuid&&(r.uuid=ri.generateUUID()),void 0===t.images[r.uuid]){var n,i=t.images,o=r.uuid,a=r.uuid;void 0!==r.toDataURL?n=r:(n=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),n.width=r.width,n.height=r.height,n.getContext("2d").drawImage(r,0,0,r.width,r.height)),n=2048<n.width||2048<n.height?n.toDataURL("image/jpeg",.6):n.toDataURL("image/png"),i[o]={uuid:a,url:n}}e.image=r.uuid}return t.textures[this.uuid]=e},dispose:function(){this.dispatchEvent({type:"dispose"})},transformUv:function(t){if(300===this.mapping){if(t.multiply(this.repeat),t.add(this.offset),0>t.x||1<t.x)switch(this.wrapS){case 1e3:t.x-=Math.floor(t.x);break;case 1001:t.x=0>t.x?0:1;break;case 1002:t.x=1===Math.abs(Math.floor(t.x)%2)?Math.ceil(t.x)-t.x:t.x-Math.floor(t.x)}if(0>t.y||1<t.y)switch(this.wrapT){case 1e3:t.y-=Math.floor(t.y);break;case 1001:t.y=0>t.y?0:1;break;case 1002:t.y=1===Math.abs(Math.floor(t.y)%2)?Math.ceil(t.y)-t.y:t.y-Math.floor(t.y)}this.flipY&&(t.y=1-t.y)}}},Object.assign(n.prototype,e.prototype),i.prototype={constructor:i,isVector4:!0,set:function(t,e,r,n){return this.x=t,this.y=e,this.z=r,this.w=n,this},setScalar:function(t){return this.w=this.z=this.y=this.x=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setW:function(t){return this.w=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)},subScalar:function(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this},multiplyScalar:function(t){return isFinite(t)?(this.x*=t,this.y*=t,this.z*=t,this.w*=t):this.w=this.z=this.y=this.x=0,this},applyMatrix4:function(t){var e=this.x,r=this.y,n=this.z,i=this.w;return t=t.elements,this.x=t[0]*e+t[4]*r+t[8]*n+t[12]*i,this.y=t[1]*e+t[5]*r+t[9]*n+t[13]*i,this.z=t[2]*e+t[6]*r+t[10]*n+t[14]*i,this.w=t[3]*e+t[7]*r+t[11]*n+t[15]*i,this},divideScalar:function(t){return this.multiplyScalar(1/t)},setAxisAngleFromQuaternion:function(t){this.w=2*Math.acos(t.w);var e=Math.sqrt(1-t.w*t.w);return 1e-4>e?(this.x=1,this.z=this.y=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this},setAxisAngleFromRotationMatrix:function(t){var e,r,n;t=t.elements;var i=t[0];n=t[4];var o=t[8],a=t[1],s=t[5],c=t[9];r=t[2],e=t[6];var u=t[10];return.01>Math.abs(n-a)&&.01>Math.abs(o-r)&&.01>Math.abs(c-e)?.1>Math.abs(n+a)&&.1>Math.abs(o+r)&&.1>Math.abs(c+e)&&.1>Math.abs(i+s+u-3)?(this.set(1,0,0,0),this):(t=Math.PI,i=(i+1)/2,s=(s+1)/2,u=(u+1)/2,n=(n+a)/4,o=(o+r)/4,c=(c+e)/4,i>s&&i>u?.01>i?(e=0,n=r=.707106781):(e=Math.sqrt(i),r=n/e,n=o/e):s>u?.01>s?(e=.707106781,r=0,n=.707106781):(r=Math.sqrt(s),e=n/r,n=c/r):.01>u?(r=e=.707106781,n=0):(n=Math.sqrt(u),e=o/n,r=c/n),this.set(e,r,n,t),this):(t=Math.sqrt((e-c)*(e-c)+(o-r)*(o-r)+(a-n)*(a-n)),.001>Math.abs(t)&&(t=1),this.x=(e-c)/t,this.y=(o-r)/t,this.z=(a-n)/t,this.w=Math.acos((i+s+u-1)/2),this)},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this},clampScalar:function(){var t,e;return function(r,n){return void 0===t&&(t=new i,e=new i),t.set(r,r,r,r),e.set(n,n,n,n),this.clamp(t,e)}}(),floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this},roundToZero:function(){return this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x),this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y),this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z),this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(t){return this.multiplyScalar(t/this.length())},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this},lerpVectors:function(t,e,r){return this.subVectors(e,t).multiplyScalar(r).add(t)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t},fromAttribute:function(t,e,r){return void 0!==r&&console.warn("THREE.Vector4: offset has been removed from .fromAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}},Object.assign(o.prototype,e.prototype,{isWebGLRenderTarget:!0,setSize:function(t,e){this.width===t&&this.height===e||(this.width=t,this.height=e,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.width=t.width,this.height=t.height,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),a.prototype=Object.create(o.prototype),a.prototype.constructor=a,a.prototype.isWebGLRenderTargetCube=!0,s.prototype={constructor:s,get x(){return this._x},set x(t){this._x=t,this.onChangeCallback()},get y(){return this._y},set y(t){this._y=t,this.onChangeCallback()},get z(){return this._z},set z(t){this._z=t,this.onChangeCallback()},get w(){return this._w},set w(t){this._w=t,this.onChangeCallback()},set:function(t,e,r,n){return this._x=t,this._y=e,this._z=r,this._w=n,this.onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this.onChangeCallback(),this},setFromEuler:function(t,e){if(!1===(t&&t.isEuler))throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var r=Math.cos(t._x/2),n=Math.cos(t._y/2),i=Math.cos(t._z/2),o=Math.sin(t._x/2),a=Math.sin(t._y/2),s=Math.sin(t._z/2),c=t.order;return"XYZ"===c?(this._x=o*n*i+r*a*s,this._y=r*a*i-o*n*s,this._z=r*n*s+o*a*i,this._w=r*n*i-o*a*s):"YXZ"===c?(this._x=o*n*i+r*a*s,this._y=r*a*i-o*n*s,this._z=r*n*s-o*a*i,this._w=r*n*i+o*a*s):"ZXY"===c?(this._x=o*n*i-r*a*s,this._y=r*a*i+o*n*s,this._z=r*n*s+o*a*i,this._w=r*n*i-o*a*s):"ZYX"===c?(this._x=o*n*i-r*a*s,this._y=r*a*i+o*n*s,this._z=r*n*s-o*a*i,this._w=r*n*i+o*a*s):"YZX"===c?(this._x=o*n*i+r*a*s,this._y=r*a*i+o*n*s,this._z=r*n*s-o*a*i,this._w=r*n*i-o*a*s):"XZY"===c&&(this._x=o*n*i-r*a*s,this._y=r*a*i-o*n*s,this._z=r*n*s+o*a*i,this._w=r*n*i+o*a*s),!1!==e&&this.onChangeCallback(),this},setFromAxisAngle:function(t,e){var r=e/2,n=Math.sin(r);return this._x=t.x*n,this._y=t.y*n,this._z=t.z*n,this._w=Math.cos(r),this.onChangeCallback(),this},setFromRotationMatrix:function(t){var e=t.elements,r=e[0];t=e[4];var n=e[8],i=e[1],o=e[5],a=e[9],s=e[2],c=e[6],e=e[10],u=r+o+e;return 0<u?(r=.5/Math.sqrt(u+1),this._w=.25/r,this._x=(c-a)*r,this._y=(n-s)*r,this._z=(i-t)*r):r>o&&r>e?(r=2*Math.sqrt(1+r-o-e),this._w=(c-a)/r,this._x=.25*r,this._y=(t+i)/r,this._z=(n+s)/r):o>e?(r=2*Math.sqrt(1+o-r-e),this._w=(n-s)/r,this._x=(t+i)/r,this._y=.25*r,this._z=(a+c)/r):(r=2*Math.sqrt(1+e-r-o),this._w=(i-t)/r,this._x=(n+s)/r,this._y=(a+c)/r,this._z=.25*r),this.onChangeCallback(),this},setFromUnitVectors:function(){var t,e;return function(r,n){return void 0===t&&(t=new c),e=r.dot(n)+1,1e-6>e?(e=0,Math.abs(r.x)>Math.abs(r.z)?t.set(-r.y,r.x,0):t.set(0,-r.z,r.y)):t.crossVectors(r,n),this._x=t.x,this._y=t.y,this._z=t.z,this._w=e,this.normalize()}}(),inverse:function(){return this.conjugate().normalize()},conjugate:function(){return this._x*=-1,this._y*=-1,this._z*=-1,this.onChangeCallback(),this},dot:function(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var t=this.length();return 0===t?(this._z=this._y=this._x=0,this._w=1):(t=1/t,this._x*=t,this._y*=t,this._z*=t,this._w*=t),this.onChangeCallback(),this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)},premultiply:function(t){return this.multiplyQuaternions(t,this)},multiplyQuaternions:function(t,e){var r=t._x,n=t._y,i=t._z,o=t._w,a=e._x,s=e._y,c=e._z,u=e._w;return this._x=r*u+o*a+n*c-i*s,this._y=n*u+o*s+i*a-r*c,this._z=i*u+o*c+r*s-n*a,this._w=o*u-r*a-n*s-i*c,this.onChangeCallback(),this},slerp:function(t,e){if(0===e)return this;if(1===e)return this.copy(t);var r=this._x,n=this._y,i=this._z,o=this._w,a=o*t._w+r*t._x+n*t._y+i*t._z;if(0>a?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),1<=a)return this._w=o,this._x=r,this._y=n,this._z=i,this;var s=Math.sqrt(1-a*a);if(.001>Math.abs(s))return this._w=.5*(o+this._w),this._x=.5*(r+this._x),this._y=.5*(n+this._y),this._z=.5*(i+this._z),this;var c=Math.atan2(s,a),a=Math.sin((1-e)*c)/s,s=Math.sin(e*c)/s;return this._w=o*a+this._w*s,this._x=r*a+this._x*s,this._y=n*a+this._y*s,this._z=i*a+this._z*s,this.onChangeCallback(),this},equals:function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w},fromArray:function(t,e){return void 0===e&&(e=0),this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this.onChangeCallback(),this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t},onChange:function(t){return this.onChangeCallback=t,this},onChangeCallback:function(){}},Object.assign(s,{slerp:function(t,e,r,n){return r.copy(t).slerp(e,n)},slerpFlat:function(t,e,r,n,i,o,a){var s=r[n+0],c=r[n+1],u=r[n+2];r=r[n+3],n=i[o+0];var h=i[o+1],l=i[o+2];if(i=i[o+3],r!==i||s!==n||c!==h||u!==l){o=1-a;var p=s*n+c*h+u*l+r*i,f=0<=p?1:-1,d=1-p*p;d>Number.EPSILON&&(d=Math.sqrt(d),p=Math.atan2(d,p*f),o=Math.sin(o*p)/d,a=Math.sin(a*p)/d),f*=a,s=s*o+n*f,c=c*o+h*f,u=u*o+l*f,r=r*o+i*f,o===1-a&&(a=1/Math.sqrt(s*s+c*c+u*u+r*r),s*=a,c*=a,u*=a,r*=a)}t[e]=s,t[e+1]=c,t[e+2]=u,t[e+3]=r}}),c.prototype={constructor:c,isVector3:!0,set:function(t,e,r){return this.x=t,this.y=e,this.z=r,this},setScalar:function(t){return this.z=this.y=this.x=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)},subScalar:function(t){return this.x-=t,this.y-=t,this.z-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)},multiplyScalar:function(t){return isFinite(t)?(this.x*=t,this.y*=t,this.z*=t):this.z=this.y=this.x=0,this},multiplyVectors:function(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this},applyEuler:function(){var t;return function(e){return!1===(e&&e.isEuler)&&console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),void 0===t&&(t=new s),this.applyQuaternion(t.setFromEuler(e))}}(),applyAxisAngle:function(){var t;return function(e,r){return void 0===t&&(t=new s),this.applyQuaternion(t.setFromAxisAngle(e,r))}}(),applyMatrix3:function(t){var e=this.x,r=this.y,n=this.z;return t=t.elements,this.x=t[0]*e+t[3]*r+t[6]*n,this.y=t[1]*e+t[4]*r+t[7]*n,this.z=t[2]*e+t[5]*r+t[8]*n,this},applyMatrix4:function(t){var e=this.x,r=this.y,n=this.z;return t=t.elements,this.x=t[0]*e+t[4]*r+t[8]*n+t[12],this.y=t[1]*e+t[5]*r+t[9]*n+t[13],this.z=t[2]*e+t[6]*r+t[10]*n+t[14],this},applyProjection:function(t){var e=this.x,r=this.y,n=this.z;t=t.elements;var i=1/(t[3]*e+t[7]*r+t[11]*n+t[15]);return this.x=(t[0]*e+t[4]*r+t[8]*n+t[12])*i,this.y=(t[1]*e+t[5]*r+t[9]*n+t[13])*i,this.z=(t[2]*e+t[6]*r+t[10]*n+t[14])*i,this},applyQuaternion:function(t){var e=this.x,r=this.y,n=this.z,i=t.x,o=t.y,a=t.z;t=t.w;var s=t*e+o*n-a*r,c=t*r+a*e-i*n,u=t*n+i*r-o*e,e=-i*e-o*r-a*n;return this.x=s*t+e*-i+c*-a-u*-o,this.y=c*t+e*-o+u*-i-s*-a,this.z=u*t+e*-a+s*-o-c*-i,this},project:function(){var t;return function(e){return void 0===t&&(t=new u),t.multiplyMatrices(e.projectionMatrix,t.getInverse(e.matrixWorld)),this.applyProjection(t)}}(),unproject:function(){var t;return function(e){return void 0===t&&(t=new u),t.multiplyMatrices(e.matrixWorld,t.getInverse(e.projectionMatrix)),this.applyProjection(t)}}(),transformDirection:function(t){var e=this.x,r=this.y,n=this.z;return t=t.elements,this.x=t[0]*e+t[4]*r+t[8]*n,this.y=t[1]*e+t[5]*r+t[9]*n,this.z=t[2]*e+t[6]*r+t[10]*n,this.normalize()},divide:function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this},divideScalar:function(t){return this.multiplyScalar(1/t)},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this},clampScalar:function(){var t,e;return function(r,n){return void 0===t&&(t=new c,e=new c),t.set(r,r,r),e.set(n,n,n),this.clamp(t,e)}}(),clampLength:function(t,e){var r=this.length();return this.multiplyScalar(Math.max(t,Math.min(e,r))/r)},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){return this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x),this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y),this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(t){return this.multiplyScalar(t/this.length())},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this},lerpVectors:function(t,e,r){return this.subVectors(e,t).multiplyScalar(r).add(t)},cross:function(t,e){if(void 0!==e)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e);var r=this.x,n=this.y,i=this.z;return this.x=n*t.z-i*t.y,this.y=i*t.x-r*t.z,this.z=r*t.y-n*t.x,this},crossVectors:function(t,e){var r=t.x,n=t.y,i=t.z,o=e.x,a=e.y,s=e.z;return this.x=n*s-i*a,this.y=i*o-r*s,this.z=r*a-n*o,this},projectOnVector:function(t){var e=t.dot(this)/t.lengthSq();return this.copy(t).multiplyScalar(e)},projectOnPlane:function(){var t;return function(e){return void 0===t&&(t=new c),t.copy(this).projectOnVector(e),this.sub(t)}}(),reflect:function(){var t;return function(e){return void 0===t&&(t=new c),this.sub(t.copy(e).multiplyScalar(2*this.dot(e)))}}(),angleTo:function(t){return t=this.dot(t)/Math.sqrt(this.lengthSq()*t.lengthSq()),Math.acos(ri.clamp(t,-1,1))},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,r=this.y-t.y;return t=this.z-t.z,e*e+r*r+t*t},distanceToManhattan:function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)},setFromSpherical:function(t){var e=Math.sin(t.phi)*t.radius;return this.x=e*Math.sin(t.theta),this.y=Math.cos(t.phi)*t.radius,this.z=e*Math.cos(t.theta),this},setFromCylindrical:function(t){return this.x=t.radius*Math.sin(t.theta),this.y=t.y,this.z=t.radius*Math.cos(t.theta),this},setFromMatrixPosition:function(t){return this.setFromMatrixColumn(t,3)},setFromMatrixScale:function(t){var e=this.setFromMatrixColumn(t,0).length(),r=this.setFromMatrixColumn(t,1).length();return t=this.setFromMatrixColumn(t,2).length(),this.x=e,this.y=r,this.z=t,this},setFromMatrixColumn:function(t,e){if("number"==typeof t){console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index ).");var r=t;t=e,e=r}return this.fromArray(t.elements,4*e)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t},fromAttribute:function(t,e,r){return void 0!==r&&console.warn("THREE.Vector3: offset has been removed from .fromAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}},u.prototype={constructor:u,isMatrix4:!0,set:function(t,e,r,n,i,o,a,s,c,u,h,l,p,f,d,m){var v=this.elements;return v[0]=t,v[4]=e,v[8]=r,v[12]=n,v[1]=i,v[5]=o,v[9]=a,v[13]=s,v[2]=c,v[6]=u,v[10]=h,v[14]=l,v[3]=p,v[7]=f,v[11]=d,v[15]=m,this},identity:function(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this},clone:function(){return(new u).fromArray(this.elements)},copy:function(t){return this.elements.set(t.elements),this},copyPosition:function(t){var e=this.elements;return t=t.elements,e[12]=t[12],e[13]=t[13],e[14]=t[14],this},extractBasis:function(t,e,r){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),r.setFromMatrixColumn(this,2),this},makeBasis:function(t,e,r){return this.set(t.x,e.x,r.x,0,t.y,e.y,r.y,0,t.z,e.z,r.z,0,0,0,0,1),this},extractRotation:function(){var t;return function(e){void 0===t&&(t=new c);var r=this.elements,n=e.elements,i=1/t.setFromMatrixColumn(e,0).length(),o=1/t.setFromMatrixColumn(e,1).length();return e=1/t.setFromMatrixColumn(e,2).length(),r[0]=n[0]*i,r[1]=n[1]*i,r[2]=n[2]*i,r[4]=n[4]*o,r[5]=n[5]*o,r[6]=n[6]*o,r[8]=n[8]*e,r[9]=n[9]*e,r[10]=n[10]*e,this}}(),makeRotationFromEuler:function(t){!1===(t&&t.isEuler)&&console.error("THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var e=this.elements,r=t.x,n=t.y,i=t.z,o=Math.cos(r),r=Math.sin(r),a=Math.cos(n),n=Math.sin(n),s=Math.cos(i),i=Math.sin(i);if("XYZ"===t.order){t=o*s;var c=o*i,u=r*s,h=r*i;e[0]=a*s,e[4]=-a*i,e[8]=n,e[1]=c+u*n,e[5]=t-h*n,e[9]=-r*a,e[2]=h-t*n,e[6]=u+c*n,e[10]=o*a}else"YXZ"===t.order?(t=a*s,c=a*i,u=n*s,h=n*i,e[0]=t+h*r,e[4]=u*r-c,e[8]=o*n,e[1]=o*i,e[5]=o*s,e[9]=-r,e[2]=c*r-u,e[6]=h+t*r,e[10]=o*a):"ZXY"===t.order?(t=a*s,c=a*i,u=n*s,h=n*i,e[0]=t-h*r,e[4]=-o*i,e[8]=u+c*r,e[1]=c+u*r,e[5]=o*s,e[9]=h-t*r,e[2]=-o*n,e[6]=r,e[10]=o*a):"ZYX"===t.order?(t=o*s,c=o*i,u=r*s,h=r*i,e[0]=a*s,e[4]=u*n-c,e[8]=t*n+h,e[1]=a*i,e[5]=h*n+t,e[9]=c*n-u,e[2]=-n,e[6]=r*a,e[10]=o*a):"YZX"===t.order?(t=o*a,c=o*n,u=r*a,h=r*n,e[0]=a*s,e[4]=h-t*i,e[8]=u*i+c,e[1]=i,e[5]=o*s,e[9]=-r*s,e[2]=-n*s,e[6]=c*i+u,e[10]=t-h*i):"XZY"===t.order&&(t=o*a,c=o*n,u=r*a,h=r*n,e[0]=a*s,e[4]=-i,e[8]=n*s,e[1]=t*i+h,e[5]=o*s,e[9]=c*i-u,e[2]=u*i-c,e[6]=r*s,e[10]=h*i+t);return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},makeRotationFromQuaternion:function(t){var e=this.elements,r=t.x,n=t.y,i=t.z,o=t.w,a=r+r,s=n+n,c=i+i;t=r*a;var u=r*s,r=r*c,h=n*s,n=n*c,i=i*c,a=o*a,s=o*s,o=o*c;return e[0]=1-(h+i),e[4]=u-o,e[8]=r+s,e[1]=u+o,e[5]=1-(t+i),e[9]=n-a,e[2]=r-s,e[6]=n+a,e[10]=1-(t+h),e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},lookAt:function(){var t,e,r;return function(n,i,o){void 0===t&&(t=new c,e=new c,r=new c);var a=this.elements;return r.subVectors(n,i).normalize(),0===r.lengthSq()&&(r.z=1),t.crossVectors(o,r).normalize(),0===t.lengthSq()&&(r.z+=1e-4,t.crossVectors(o,r).normalize()),e.crossVectors(r,t),a[0]=t.x,a[4]=e.x,a[8]=r.x,a[1]=t.y,a[5]=e.y,a[9]=r.y,a[2]=t.z,a[6]=e.z,a[10]=r.z,this}}(),multiply:function(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)},premultiply:function(t){return this.multiplyMatrices(t,this)},multiplyMatrices:function(t,e){var r=t.elements,n=e.elements,i=this.elements,o=r[0],a=r[4],s=r[8],c=r[12],u=r[1],h=r[5],l=r[9],p=r[13],f=r[2],d=r[6],m=r[10],v=r[14],g=r[3],y=r[7],b=r[11],r=r[15],_=n[0],x=n[4],w=n[8],S=n[12],M=n[1],E=n[5],T=n[9],C=n[13],O=n[2],P=n[6],A=n[10],j=n[14],R=n[3],L=n[7],N=n[11],n=n[15];return i[0]=o*_+a*M+s*O+c*R,i[4]=o*x+a*E+s*P+c*L,i[8]=o*w+a*T+s*A+c*N,i[12]=o*S+a*C+s*j+c*n,i[1]=u*_+h*M+l*O+p*R,i[5]=u*x+h*E+l*P+p*L,i[9]=u*w+h*T+l*A+p*N,i[13]=u*S+h*C+l*j+p*n,i[2]=f*_+d*M+m*O+v*R,i[6]=f*x+d*E+m*P+v*L,i[10]=f*w+d*T+m*A+v*N,i[14]=f*S+d*C+m*j+v*n,i[3]=g*_+y*M+b*O+r*R,i[7]=g*x+y*E+b*P+r*L,i[11]=g*w+y*T+b*A+r*N,i[15]=g*S+y*C+b*j+r*n,this},multiplyToArray:function(t,e,r){var n=this.elements;return this.multiplyMatrices(t,e),r[0]=n[0],r[1]=n[1],r[2]=n[2],r[3]=n[3],r[4]=n[4],r[5]=n[5],r[6]=n[6],r[7]=n[7],r[8]=n[8],r[9]=n[9],r[10]=n[10],r[11]=n[11],r[12]=n[12],r[13]=n[13],r[14]=n[14],r[15]=n[15],this},multiplyScalar:function(t){var e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this},applyToVector3Array:function(){var t;return function(e,r,n){void 0===t&&(t=new c),void 0===r&&(r=0),void 0===n&&(n=e.length);for(var i=0;i<n;i+=3,r+=3)t.fromArray(e,r),t.applyMatrix4(this),t.toArray(e,r);return e}}(),applyToBufferAttribute:function(){var t;return function(e){void 0===t&&(t=new c);for(var r=0,n=e.count;r<n;r++)t.x=e.getX(r),t.y=e.getY(r),t.z=e.getZ(r),t.applyMatrix4(this),e.setXYZ(r,t.x,t.y,t.z);return e}}(),determinant:function(){var t=this.elements,e=t[0],r=t[4],n=t[8],i=t[12],o=t[1],a=t[5],s=t[9],c=t[13],u=t[2],h=t[6],l=t[10],p=t[14];return t[3]*(+i*s*h-n*c*h-i*a*l+r*c*l+n*a*p-r*s*p)+t[7]*(+e*s*p-e*c*l+i*o*l-n*o*p+n*c*u-i*s*u)+t[11]*(+e*c*h-e*a*p-i*o*h+r*o*p+i*a*u-r*c*u)+t[15]*(-n*a*u-e*s*h+e*a*l+n*o*h-r*o*l+r*s*u)},transpose:function(){var t,e=this.elements;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this},setPosition:function(t){var e=this.elements;return e[12]=t.x,e[13]=t.y,e[14]=t.z,this},getInverse:function(t,e){var r=this.elements,n=t.elements,i=n[0],o=n[1],a=n[2],s=n[3],c=n[4],u=n[5],h=n[6],l=n[7],p=n[8],f=n[9],d=n[10],m=n[11],v=n[12],g=n[13],y=n[14],n=n[15],b=f*y*l-g*d*l+g*h*m-u*y*m-f*h*n+u*d*n,_=v*d*l-p*y*l-v*h*m+c*y*m+p*h*n-c*d*n,x=p*g*l-v*f*l+v*u*m-c*g*m-p*u*n+c*f*n,w=v*f*h-p*g*h-v*u*d+c*g*d+p*u*y-c*f*y,S=i*b+o*_+a*x+s*w;if(0===S){if(!0===e)throw Error("THREE.Matrix4.getInverse(): can't invert matrix, determinant is 0");return console.warn("THREE.Matrix4.getInverse(): can't invert matrix, determinant is 0"),this.identity()}return S=1/S,r[0]=b*S,r[1]=(g*d*s-f*y*s-g*a*m+o*y*m+f*a*n-o*d*n)*S,r[2]=(u*y*s-g*h*s+g*a*l-o*y*l-u*a*n+o*h*n)*S,r[3]=(f*h*s-u*d*s-f*a*l+o*d*l+u*a*m-o*h*m)*S,r[4]=_*S,r[5]=(p*y*s-v*d*s+v*a*m-i*y*m-p*a*n+i*d*n)*S,r[6]=(v*h*s-c*y*s-v*a*l+i*y*l+c*a*n-i*h*n)*S,r[7]=(c*d*s-p*h*s+p*a*l-i*d*l-c*a*m+i*h*m)*S,r[8]=x*S,r[9]=(v*f*s-p*g*s-v*o*m+i*g*m+p*o*n-i*f*n)*S,r[10]=(c*g*s-v*u*s+v*o*l-i*g*l-c*o*n+i*u*n)*S,r[11]=(p*u*s-c*f*s-p*o*l+i*f*l+c*o*m-i*u*m)*S,r[12]=w*S,r[13]=(p*g*a-v*f*a+v*o*d-i*g*d-p*o*y+i*f*y)*S,r[14]=(v*u*a-c*g*a-v*o*h+i*g*h+c*o*y-i*u*y)*S,r[15]=(c*f*a-p*u*a+p*o*h-i*f*h-c*o*d+i*u*d)*S,this},scale:function(t){var e=this.elements,r=t.x,n=t.y;return t=t.z,e[0]*=r,e[4]*=n,e[8]*=t,e[1]*=r,e[5]*=n,e[9]*=t,e[2]*=r,e[6]*=n,e[10]*=t,e[3]*=r,e[7]*=n,e[11]*=t,this},getMaxScaleOnAxis:function(){var t=this.elements;return Math.sqrt(Math.max(t[0]*t[0]+t[1]*t[1]+t[2]*t[2],t[4]*t[4]+t[5]*t[5]+t[6]*t[6],t[8]*t[8]+t[9]*t[9]+t[10]*t[10]))},makeTranslation:function(t,e,r){return this.set(1,0,0,t,0,1,0,e,0,0,1,r,0,0,0,1),this},makeRotationX:function(t){var e=Math.cos(t);return t=Math.sin(t),this.set(1,0,0,0,0,e,-t,0,0,t,e,0,0,0,0,1),this},makeRotationY:function(t){var e=Math.cos(t);return t=Math.sin(t),this.set(e,0,t,0,0,1,0,0,-t,0,e,0,0,0,0,1),this},makeRotationZ:function(t){var e=Math.cos(t);return t=Math.sin(t),this.set(e,-t,0,0,t,e,0,0,0,0,1,0,0,0,0,1),this},makeRotationAxis:function(t,e){var r=Math.cos(e),n=Math.sin(e),i=1-r,o=t.x,a=t.y,s=t.z,c=i*o,u=i*a;return this.set(c*o+r,c*a-n*s,c*s+n*a,0,c*a+n*s,u*a+r,u*s-n*o,0,c*s-n*a,u*s+n*o,i*s*s+r,0,0,0,0,1),this},makeScale:function(t,e,r){return this.set(t,0,0,0,0,e,0,0,0,0,r,0,0,0,0,1),this},makeShear:function(t,e,r){return this.set(1,e,r,0,t,1,r,0,t,e,1,0,0,0,0,1),this},compose:function(t,e,r){return this.makeRotationFromQuaternion(e),this.scale(r),this.setPosition(t),this},decompose:function(){var t,e;return function(r,n,i){void 0===t&&(t=new c,e=new u);var o=this.elements,a=t.set(o[0],o[1],o[2]).length(),s=t.set(o[4],o[5],o[6]).length(),h=t.set(o[8],o[9],o[10]).length();0>this.determinant()&&(a=-a),r.x=o[12],r.y=o[13],r.z=o[14],e.elements.set(this.elements),r=1/a;var o=1/s,l=1/h;return e.elements[0]*=r,e.elements[1]*=r,e.elements[2]*=r,e.elements[4]*=o,e.elements[5]*=o,e.elements[6]*=o,e.elements[8]*=l,e.elements[9]*=l,e.elements[10]*=l,n.setFromRotationMatrix(e),i.x=a,i.y=s,i.z=h,this}}(),makeFrustum:function(t,e,r,n,i,o){var a=this.elements;return a[0]=2*i/(e-t),a[4]=0,a[8]=(e+t)/(e-t),a[12]=0,a[1]=0,a[5]=2*i/(n-r),a[9]=(n+r)/(n-r),a[13]=0,a[2]=0,a[6]=0,a[10]=-(o+i)/(o-i),a[14]=-2*o*i/(o-i),a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this},
-makePerspective:function(t,e,r,n){t=r*Math.tan(ri.DEG2RAD*t*.5);var i=-t;return this.makeFrustum(i*e,t*e,i,t,r,n)},makeOrthographic:function(t,e,r,n,i,o){var a=this.elements,s=1/(e-t),c=1/(r-n),u=1/(o-i);return a[0]=2*s,a[4]=0,a[8]=0,a[12]=-((e+t)*s),a[1]=0,a[5]=2*c,a[9]=0,a[13]=-((r+n)*c),a[2]=0,a[6]=0,a[10]=-2*u,a[14]=-((o+i)*u),a[3]=0,a[7]=0,a[11]=0,a[15]=1,this},equals:function(t){var e=this.elements;t=t.elements;for(var r=0;16>r;r++)if(e[r]!==t[r])return!1;return!0},fromArray:function(t,e){void 0===e&&(e=0);for(var r=0;16>r;r++)this.elements[r]=t[r+e];return this},toArray:function(t,e){void 0===t&&(t=[]),void 0===e&&(e=0);var r=this.elements;return t[e]=r[0],t[e+1]=r[1],t[e+2]=r[2],t[e+3]=r[3],t[e+4]=r[4],t[e+5]=r[5],t[e+6]=r[6],t[e+7]=r[7],t[e+8]=r[8],t[e+9]=r[9],t[e+10]=r[10],t[e+11]=r[11],t[e+12]=r[12],t[e+13]=r[13],t[e+14]=r[14],t[e+15]=r[15],t}},h.prototype=Object.create(n.prototype),h.prototype.constructor=h,h.prototype.isCubeTexture=!0,Object.defineProperty(h.prototype,"images",{get:function(){return this.image},set:function(t){this.image=t}});var ii=new n,oi=new h,ai=[],si=[];B.prototype.setValue=function(t,e){for(var r=this.seq,n=0,i=r.length;n!==i;++n){var o=r[n];o.setValue(t,e[o.id])}};var ci=/([\w\d_]+)(\])?(\[|\.)?/g;z.prototype.setValue=function(t,e,r){void 0!==(e=this.map[e])&&e.setValue(t,r,this.renderer)},z.prototype.set=function(t,e,r){var n=this.map[r];void 0!==n&&n.setValue(t,e[r],this.renderer)},z.prototype.setOptional=function(t,e,r){void 0!==(e=e[r])&&this.setValue(t,r,e)},z.upload=function(t,e,r,n){for(var i=0,o=e.length;i!==o;++i){var a=e[i],s=r[a.id];!1!==s.needsUpdate&&a.setValue(t,s.value,n)}},z.seqWithValue=function(t,e){for(var r=[],n=0,i=t.length;n!==i;++n){var o=t[n];o.id in e&&r.push(o)}return r};var ui={merge:function(t){for(var e={},r=0;r<t.length;r++){var n,i=this.clone(t[r]);for(n in i)e[n]=i[n]}return e},clone:function(t){var e,r={};for(e in t){r[e]={};for(var n in t[e]){var i=t[e][n];i&&(i.isColor||i.isMatrix3||i.isMatrix4||i.isVector2||i.isVector3||i.isVector4||i.isTexture)?r[e][n]=i.clone():Array.isArray(i)?r[e][n]=i.slice():r[e][n]=i}}return r}},hi={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif\n",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif\n",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif\n",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif\n",aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",begin_vertex:"\nvec3 transformed = vec3( position );\n",beginnormal_vertex:"\nvec3 objectNormal = vec3( normal );\n",bsdfs:"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\t\tif( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t\t}\n\t\treturn 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 ltcTextureCoords( const in GeometricContext geometry, const in float roughness ) {\n\tconst float LUT_SIZE  = 64.0;\n\tconst float LUT_SCALE = (LUT_SIZE - 1.0)/LUT_SIZE;\n\tconst float LUT_BIAS  = 0.5/LUT_SIZE;\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 P = geometry.position;\n\tfloat theta = acos( dot( N, V ) );\n\tvec2 uv = vec2(\n\t\tsqrt( saturate( roughness ) ),\n\t\tsaturate( theta / ( 0.5 * PI ) ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nvoid clipQuadToHorizon( inout vec3 L[5], out int n ) {\n\tint config = 0;\n\tif ( L[0].z > 0.0 ) config += 1;\n\tif ( L[1].z > 0.0 ) config += 2;\n\tif ( L[2].z > 0.0 ) config += 4;\n\tif ( L[3].z > 0.0 ) config += 8;\n\tn = 0;\n\tif ( config == 0 ) {\n\t} else if ( config == 1 ) {\n\t\tn = 3;\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t\tL[2] = -L[3].z * L[0] + L[0].z * L[3];\n\t} else if ( config == 2 ) {\n\t\tn = 3;\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t} else if ( config == 3 ) {\n\t\tn = 4;\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t\tL[3] = -L[3].z * L[0] + L[0].z * L[3];\n\t} else if ( config == 4 ) {\n\t\tn = 3;\n\t\tL[0] = -L[3].z * L[2] + L[2].z * L[3];\n\t\tL[1] = -L[1].z * L[2] + L[2].z * L[1];\n\t} else if ( config == 5 ) {\n\t\tn = 0;\n\t} else if ( config == 6 ) {\n\t\tn = 4;\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t\tL[3] = -L[3].z * L[2] + L[2].z * L[3];\n\t} else if ( config == 7 ) {\n\t\tn = 5;\n\t\tL[4] = -L[3].z * L[0] + L[0].z * L[3];\n\t\tL[3] = -L[3].z * L[2] + L[2].z * L[3];\n\t} else if ( config == 8 ) {\n\t\tn = 3;\n\t\tL[0] = -L[0].z * L[3] + L[3].z * L[0];\n\t\tL[1] = -L[2].z * L[3] + L[3].z * L[2];\n\t\tL[2] =  L[3];\n\t} else if ( config == 9 ) {\n\t\tn = 4;\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t\tL[2] = -L[2].z * L[3] + L[3].z * L[2];\n\t} else if ( config == 10 ) {\n\t\tn = 0;\n\t} else if ( config == 11 ) {\n\t\tn = 5;\n\t\tL[4] = L[3];\n\t\tL[3] = -L[2].z * L[3] + L[3].z * L[2];\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t} else if ( config == 12 ) {\n\t\tn = 4;\n\t\tL[1] = -L[1].z * L[2] + L[2].z * L[1];\n\t\tL[0] = -L[0].z * L[3] + L[3].z * L[0];\n\t} else if ( config == 13 ) {\n\t\tn = 5;\n\t\tL[4] = L[3];\n\t\tL[3] = L[2];\n\t\tL[2] = -L[1].z * L[2] + L[2].z * L[1];\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t} else if ( config == 14 ) {\n\t\tn = 5;\n\t\tL[4] = -L[0].z * L[3] + L[3].z * L[0];\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t} else if ( config == 15 ) {\n\t\tn = 4;\n\t}\n\tif ( n == 3 )\n\t\tL[3] = L[0];\n\tif ( n == 4 )\n\t\tL[4] = L[0];\n}\nfloat integrateLtcBrdfOverRectEdge( vec3 v1, vec3 v2 ) {\n\tfloat cosTheta = dot( v1, v2 );\n\tfloat theta = acos( cosTheta );\n\tfloat res = cross( v1, v2 ).z * ( ( theta > 0.001 ) ? theta / sin( theta ) : 1.0 );\n\treturn res;\n}\nvoid initRectPoints( const in vec3 pos, const in vec3 halfWidth, const in vec3 halfHeight, out vec3 rectPoints[4] ) {\n\trectPoints[0] = pos - halfWidth - halfHeight;\n\trectPoints[1] = pos + halfWidth - halfHeight;\n\trectPoints[2] = pos + halfWidth + halfHeight;\n\trectPoints[3] = pos - halfWidth + halfHeight;\n}\nvec3 integrateLtcBrdfOverRect( const in GeometricContext geometry, const in mat3 brdfMat, const in vec3 rectPoints[4] ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 P = geometry.position;\n\tvec3 T1, T2;\n\tT1 = normalize(V - N * dot( V, N ));\n\tT2 = - cross( N, T1 );\n\tmat3 brdfWrtSurface = brdfMat * transpose( mat3( T1, T2, N ) );\n\tvec3 clippedRect[5];\n\tclippedRect[0] = brdfWrtSurface * ( rectPoints[0] - P );\n\tclippedRect[1] = brdfWrtSurface * ( rectPoints[1] - P );\n\tclippedRect[2] = brdfWrtSurface * ( rectPoints[2] - P );\n\tclippedRect[3] = brdfWrtSurface * ( rectPoints[3] - P );\n\tint n;\n\tclipQuadToHorizon(clippedRect, n);\n\tif ( n == 0 )\n\t\treturn vec3( 0, 0, 0 );\n\tclippedRect[0] = normalize( clippedRect[0] );\n\tclippedRect[1] = normalize( clippedRect[1] );\n\tclippedRect[2] = normalize( clippedRect[2] );\n\tclippedRect[3] = normalize( clippedRect[3] );\n\tclippedRect[4] = normalize( clippedRect[4] );\n\tfloat sum = 0.0;\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[0], clippedRect[1] );\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[1], clippedRect[2] );\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[2], clippedRect[3] );\n\tif (n >= 4)\n\t\tsum += integrateLtcBrdfOverRectEdge( clippedRect[3], clippedRect[4] );\n\tif (n == 5)\n\t\tsum += integrateLtcBrdfOverRectEdge( clippedRect[4], clippedRect[0] );\n\tsum = max( 0.0, sum );\n\tvec3 Lo_i = vec3( sum, sum, sum );\n\treturn Lo_i;\n}\nvec3 Rect_Area_Light_Specular_Reflectance(\n\t\tconst in GeometricContext geometry,\n\t\tconst in vec3 lightPos, const in vec3 lightHalfWidth, const in vec3 lightHalfHeight,\n\t\tconst in float roughness,\n\t\tconst in sampler2D ltcMat, const in sampler2D ltcMag ) {\n\tvec3 rectPoints[4];\n\tinitRectPoints( lightPos, lightHalfWidth, lightHalfHeight, rectPoints );\n\tvec2 uv = ltcTextureCoords( geometry, roughness );\n\tvec4 brdfLtcApproxParams, t;\n\tbrdfLtcApproxParams = texture2D( ltcMat, uv );\n\tt = texture2D( ltcMat, uv );\n\tfloat brdfLtcScalar = texture2D( ltcMag, uv ).a;\n\tmat3 brdfLtcApproxMat = mat3(\n\t\tvec3(   1,   0, t.y ),\n\t\tvec3(   0, t.z,   0 ),\n\t\tvec3( t.w,   0, t.x )\n\t);\n\tvec3 specularReflectance = integrateLtcBrdfOverRect( geometry, brdfLtcApproxMat, rectPoints );\n\tspecularReflectance *= brdfLtcScalar;\n\treturn specularReflectance;\n}\nvec3 Rect_Area_Light_Diffuse_Reflectance(\n\t\tconst in GeometricContext geometry,\n\t\tconst in vec3 lightPos, const in vec3 lightHalfWidth, const in vec3 lightHalfHeight ) {\n\tvec3 rectPoints[4];\n\tinitRectPoints( lightPos, lightHalfWidth, lightHalfHeight, rectPoints );\n\tmat3 diffuseBrdfMat = mat3(1);\n\tvec3 diffuseReflectance = integrateLtcBrdfOverRect( geometry, diffuseBrdfMat, rectPoints );\n\treturn diffuseReflectance;\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = dFdx( surf_pos );\n\t\tvec3 vSigmaY = dFdy( surf_pos );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif\n",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\n\t\tvec4 plane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t\t\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\n\t\t\tvec4 plane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t\n\t#endif\n#endif\n",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif\n",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvarying vec3 vViewPosition;\n#endif\n",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif\n",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transpose( const in mat3 v ) {\n\tmat3 tmp;\n\ttmp[0] = vec3(v[0].x, v[1].x, v[2].x);\n\ttmp[1] = vec3(v[0].y, v[1].y, v[2].y);\n\ttmp[2] = vec3(v[0].z, v[1].z, v[2].z);\n\treturn tmp;\n}\n",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1  (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale =  bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ?  a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ?  a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ?  a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ?  0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ?  0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ?  0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif\n",defaultnormal_vertex:"#ifdef FLIP_SIDED\n\tobjectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;\n",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif\n",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normal * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif\n",encodings_fragment:"  gl_FragColor = linearToOutputTexel( gl_FragColor );\n",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n  return value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n  return vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n  return vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n  return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n  return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n  return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n  float maxComponent = max( max( value.r, value.g ), value.b );\n  float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n  return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n  return vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n  float maxRGB = max( value.x, max( value.g, value.b ) );\n  float M      = clamp( maxRGB / maxRange, 0.0, 1.0 );\n  M            = ceil( M * 255.0 ) / 255.0;\n  return vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n    return vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n    float maxRGB = max( value.x, max( value.g, value.b ) );\n    float D      = max( maxRange / maxRGB, 1.0 );\n    D            = min( floor( D ) / 255.0, 1.0 );\n    return vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value )  {\n  vec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n  Xp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n  vec4 vResult;\n  vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n  float Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n  vResult.w = fract(Le);\n  vResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n  return vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n  float Le = value.z * 255.0 + value.w;\n  vec3 Xp_Y_XYZp;\n  Xp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n  Xp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n  Xp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n  vec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n  return vec4( max(vRGB, 0.0), 1.0 );\n}\n",envmap_fragment:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n\t\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\tvec3 reflectView = flipNormal * normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif\n",envmap_pars_fragment:"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif\n",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif\n",envmap_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif\n",fog_fragment:"#ifdef USE_FOG\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\n\t#else\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n\t#endif\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * depth * depth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif\n",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif\n",
-lights_pars:"uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight  ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltcMat;\tuniform sampler2D ltcMag;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif\n#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = saturate( reflectVec.y * 0.5 + 0.5 );\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif\n",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\n#if NUM_RECT_AREA_LIGHTS > 0\n    void RE_Direct_RectArea_BlinnPhong( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n        vec3 matDiffColor = material.diffuseColor;\n        vec3 matSpecColor = material.specularColor;\n        vec3 lightColor   = rectAreaLight.color;\n        float roughness = BlinnExponentToGGXRoughness( material.specularShininess );\n        vec3 spec = Rect_Area_Light_Specular_Reflectance(\n                geometry,\n                rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,\n                roughness,\n                ltcMat, ltcMag );\n        vec3 diff = Rect_Area_Light_Diffuse_Reflectance(\n                geometry,\n                rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );\n        reflectedLight.directSpecular += lightColor * matSpecColor * spec / PI2;\n        reflectedLight.directDiffuse  += lightColor * matDiffColor * diff / PI2;\n    }\n#endif\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)\n",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif\n",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n    void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n        vec3 matDiffColor = material.diffuseColor;\n        vec3 matSpecColor = material.specularColor;\n        vec3 lightColor   = rectAreaLight.color;\n        float roughness = material.specularRoughness;\n        vec3 spec = Rect_Area_Light_Specular_Reflectance(\n                geometry,\n                rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,\n                roughness,\n                ltcMat, ltcMag );\n        vec3 diff = Rect_Area_Light_Diffuse_Reflectance(\n                geometry,\n                rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );\n        reflectedLight.directSpecular += lightColor * matSpecColor * spec;\n        reflectedLight.directDiffuse  += lightColor * matDiffColor * diff;\n    }\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material )   GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material )   GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n",lights_template:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t \tirradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n\t#endif\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tvec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n\t#ifndef STANDARD\n\t\tvec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );\n\t#else\n\t\tvec3 clearCoatRadiance = vec3( 0.0 );\n\t#endif\n\t\t\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n",logdepthbuf_fragment:"#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#ifdef USE_LOGDEPTHBUF\n\tuniform float logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n#endif\n",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n\tuniform float logDepthBufFC;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n\t#endif\n#endif\n",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n",map_particle_fragment:"#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform vec4 offsetRepeat;\n\tuniform sampler2D map;\n#endif\n",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.r;\n#endif\n",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif\n",normal_flip:"#ifdef DOUBLE_SIDED\n\tfloat flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n#else\n\tfloat flipNormal = 1.0;\n#endif\n",normal_fragment:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal ) * flipNormal;\n#endif\n#ifdef USE_NORMALMAP\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n\t\tvec3 N = normalize( surf_norm );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif\n",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n  return normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n  return 1.0 - 2.0 * rgb.xyz;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256.,  256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n  return ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n  return linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n  return (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n  return ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif\n",project_vertex:"#ifdef USE_SKINNING\n\tvec4 mvPosition = modelViewMatrix * skinned;\n#else\n\tvec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;\n",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.r;\n#endif\n",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n    #if NUM_RECT_AREA_LIGHTS > 0\n    #endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\treturn (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn 1.0;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\tfloat dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif\n",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n    #if NUM_RECT_AREA_LIGHTS > 0\n    #endif\n#endif\n",
-shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n    #if NUM_RECT_AREA_LIGHTS > 0\n    #endif\n#endif\n",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_RECT_AREA_LIGHTS > 0\n\t#endif\n\t#endif\n\treturn shadow;\n}\n",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureWidth;\n\t\tuniform int boneTextureHeight;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\n\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\n\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif\n",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\tskinned  = bindMatrixInverse * skinned;\n#endif\n",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix  = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n  gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n",tonemapping_pars_fragment:"#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n  return toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n  color *= toneMappingExposure;\n  return saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n  color *= toneMappingExposure;\n  return saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n  color *= toneMappingExposure;\n  color = max( vec3( 0.0 ), color - 0.004 );\n  return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n",uv_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform vec4 offsetRepeat;\n#endif\n",uv_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( PHYSICAL ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n\t#ifdef USE_SKINNING\n\t\tvec4 worldPosition = modelMatrix * skinned;\n\t#else\n\t\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n\t#endif\n#endif\n",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n",cube_vert:"varying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}\n",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <logdepthbuf_fragment>\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}\n",depth_vert:"#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#include <begin_vertex>\n\t#include <displacementmap_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n}\n",distanceRGBA_frag:"uniform vec3 lightPos;\nvarying vec4 vWorldPosition;\n#include <common>\n#include <packing>\n#include <clipping_planes_pars_fragment>\nvoid main () {\n\t#include <clipping_planes_fragment>\n\tgl_FragColor = packDepthToRGBA( length( vWorldPosition.xyz - lightPos.xyz ) / 1000.0 );\n}\n",distanceRGBA_vert:"varying vec4 vWorldPosition;\n#include <common>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <skinbase_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition;\n}\n",equirect_frag:"uniform sampler2D tEquirect;\nuniform float tFlip;\nvarying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}\n",equirect_vert:"varying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}\n",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <color_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <color_vertex>\n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n}\n",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include <aomap_fragment>\n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include <normal_flip>\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",meshbasic_vert:"#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_ENVMAP\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <envmap_vertex>\n}\n",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include <common>\n#include <packing>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <bsdfs>\n#include <lights_pars>\n#include <fog_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <emissivemap_fragment>\n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include <lightmap_fragment>\n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <normal_flip>\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <bsdfs>\n#include <lights_pars>\n#include <color_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <lights_lambert_vertex>\n\t#include <shadowmap_vertex>\n}\n",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <gradientmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars>\n#include <lights_phong_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <normal_flip>\n\t#include <normal_fragment>\n\t#include <emissivemap_fragment>\n\t#include <lights_phong_fragment>\n\t#include <lights_template>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <displacementmap_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n}\n",meshphysical_frag:"#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <packing>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <cube_uv_reflection_fragment>\n#include <lights_pars>\n#include <lights_physical_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <roughnessmap_fragment>\n\t#include <metalnessmap_fragment>\n\t#include <normal_flip>\n\t#include <normal_fragment>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_template>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",meshphysical_vert:"#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <displacementmap_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n}\n",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED  ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <packing>\n#include <uv_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\nvoid main() {\n\t#include <logdepthbuf_fragment>\n\t#include <normal_flip>\n\t#include <normal_fragment>\n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\t#include <premultiplied_alpha_fragment>\n\t#include <encodings_fragment>\n}\n",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED  ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <displacementmap_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n#if defined( FLAT_SHADED  ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}\n",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <color_pars_fragment>\n#include <map_particle_pars_fragment>\n#include <fog_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_particle_fragment>\n\t#include <color_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",points_vert:"uniform float size;\nuniform float scale;\n#include <common>\n#include <color_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <color_vertex>\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / - mvPosition.z );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n}\n",shadow_frag:"uniform float opacity;\n#include <common>\n#include <packing>\n#include <bsdfs>\n#include <lights_pars>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\nvoid main() {\n\tgl_FragColor = vec4( 0.0, 0.0, 0.0, opacity * ( 1.0  - getShadowMask() ) );\n}\n",shadow_vert:"#include <shadowmap_pars_vertex>\nvoid main() {\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n}\n"};$.prototype={constructor:$,isColor:!0,r:1,g:1,b:1,set:function(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this},setScalar:function(t){return this.b=this.g=this.r=t,this},setHex:function(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this},setRGB:function(t,e,r){return this.r=t,this.g=e,this.b=r,this},setHSL:function(){function t(t,e,r){return 0>r&&(r+=1),1<r&&--r,r<1/6?t+6*(e-t)*r:.5>r?e:r<2/3?t+6*(e-t)*(2/3-r):t}return function(e,r,n){return e=ri.euclideanModulo(e,1),r=ri.clamp(r,0,1),n=ri.clamp(n,0,1),0===r?this.r=this.g=this.b=n:(r=.5>=n?n*(1+r):n+r-n*r,n=2*n-r,this.r=t(n,r,e+1/3),this.g=t(n,r,e),this.b=t(n,r,e-1/3)),this}}(),setStyle:function(t){function e(e){void 0!==e&&1>parseFloat(e)&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}var r;if(r=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(t)){var n=r[2];switch(r[1]){case"rgb":case"rgba":if(r=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(n))return this.r=Math.min(255,parseInt(r[1],10))/255,this.g=Math.min(255,parseInt(r[2],10))/255,this.b=Math.min(255,parseInt(r[3],10))/255,e(r[5]),this;if(r=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(n))return this.r=Math.min(100,parseInt(r[1],10))/100,this.g=Math.min(100,parseInt(r[2],10))/100,this.b=Math.min(100,parseInt(r[3],10))/100,e(r[5]),this;break;case"hsl":case"hsla":if(r=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(n)){var n=parseFloat(r[1])/360,i=parseInt(r[2],10)/100,o=parseInt(r[3],10)/100;return e(r[5]),this.setHSL(n,i,o)}}}else if(r=/^\#([A-Fa-f0-9]+)$/.exec(t)){if(r=r[1],3===(n=r.length))return this.r=parseInt(r.charAt(0)+r.charAt(0),16)/255,this.g=parseInt(r.charAt(1)+r.charAt(1),16)/255,this.b=parseInt(r.charAt(2)+r.charAt(2),16)/255,this;if(6===n)return this.r=parseInt(r.charAt(0)+r.charAt(1),16)/255,this.g=parseInt(r.charAt(2)+r.charAt(3),16)/255,this.b=parseInt(r.charAt(4)+r.charAt(5),16)/255,this}return t&&0<t.length&&(r=li[t],void 0!==r?this.setHex(r):console.warn("THREE.Color: Unknown color "+t)),this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(t){return this.r=t.r,this.g=t.g,this.b=t.b,this},copyGammaToLinear:function(t,e){return void 0===e&&(e=2),this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this},copyLinearToGamma:function(t,e){void 0===e&&(e=2);var r=0<e?1/e:1;return this.r=Math.pow(t.r,r),this.g=Math.pow(t.g,r),this.b=Math.pow(t.b,r),this},convertGammaToLinear:function(){var t=this.r,e=this.g,r=this.b;return this.r=t*t,this.g=e*e,this.b=r*r,this},convertLinearToGamma:function(){return this.r=Math.sqrt(this.r),this.g=Math.sqrt(this.g),this.b=Math.sqrt(this.b),this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(t){t=t||{h:0,s:0,l:0};var e,r=this.r,n=this.g,i=this.b,o=Math.max(r,n,i),a=Math.min(r,n,i),s=(a+o)/2;if(a===o)a=e=0;else{var c=o-a,a=.5>=s?c/(o+a):c/(2-o-a);switch(o){case r:e=(n-i)/c+(n<i?6:0);break;case n:e=(i-r)/c+2;break;case i:e=(r-n)/c+4}e/=6}return t.h=e,t.s=a,t.l=s,t},getStyle:function(){return"rgb("+(255*this.r|0)+","+(255*this.g|0)+","+(255*this.b|0)+")"},offsetHSL:function(t,e,r){var n=this.getHSL();return n.h+=t,n.s+=e,n.l+=r,this.setHSL(n.h,n.s,n.l),this},add:function(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this},addColors:function(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this},addScalar:function(t){return this.r+=t,this.g+=t,this.b+=t,this},sub:function(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this},multiply:function(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this},multiplyScalar:function(t){return this.r*=t,this.g*=t,this.b*=t,this},lerp:function(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this},equals:function(t){return t.r===this.r&&t.g===this.g&&t.b===this.b},fromArray:function(t,e){return void 0===e&&(e=0),this.r=t[e],this.g=t[e+1],this.b=t[e+2],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t},toJSON:function(){return this.getHex()}};var li={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,
-ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};G.prototype=Object.create(n.prototype),G.prototype.constructor=G,G.prototype.isDataTexture=!0;var pi={common:{diffuse:{value:new $(15658734)},opacity:{value:1},map:{value:null},offsetRepeat:{value:new i(0,0,1,1)},specularMap:{value:null},alphaMap:{value:null},envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new r(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new $(16777215)}},lights:{ambientLightColor:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}}},points:{diffuse:{value:new $(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},offsetRepeat:{value:new i(0,0,1,1)}}},fi={basic:{uniforms:ui.merge([pi.common,pi.aomap,pi.lightmap,pi.fog]),vertexShader:hi.meshbasic_vert,fragmentShader:hi.meshbasic_frag},lambert:{uniforms:ui.merge([pi.common,pi.aomap,pi.lightmap,pi.emissivemap,pi.fog,pi.lights,{emissive:{value:new $(0)}}]),vertexShader:hi.meshlambert_vert,fragmentShader:hi.meshlambert_frag},phong:{uniforms:ui.merge([pi.common,pi.aomap,pi.lightmap,pi.emissivemap,pi.bumpmap,pi.normalmap,pi.displacementmap,pi.gradientmap,pi.fog,pi.lights,{emissive:{value:new $(0)},specular:{value:new $(1118481)},shininess:{value:30}}]),vertexShader:hi.meshphong_vert,fragmentShader:hi.meshphong_frag},standard:{uniforms:ui.merge([pi.common,pi.aomap,pi.lightmap,pi.emissivemap,pi.bumpmap,pi.normalmap,pi.displacementmap,pi.roughnessmap,pi.metalnessmap,pi.fog,pi.lights,{emissive:{value:new $(0)},roughness:{value:.5},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:hi.meshphysical_vert,fragmentShader:hi.meshphysical_frag},points:{uniforms:ui.merge([pi.points,pi.fog]),vertexShader:hi.points_vert,fragmentShader:hi.points_frag},dashed:{uniforms:ui.merge([pi.common,pi.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:hi.linedashed_vert,fragmentShader:hi.linedashed_frag},depth:{uniforms:ui.merge([pi.common,pi.displacementmap]),vertexShader:hi.depth_vert,fragmentShader:hi.depth_frag},normal:{uniforms:ui.merge([pi.common,pi.bumpmap,pi.normalmap,pi.displacementmap,{opacity:{value:1}}]),vertexShader:hi.normal_vert,fragmentShader:hi.normal_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:hi.cube_vert,fragmentShader:hi.cube_frag},equirect:{uniforms:{tEquirect:{value:null},tFlip:{value:-1}},vertexShader:hi.equirect_vert,fragmentShader:hi.equirect_frag},distanceRGBA:{uniforms:{lightPos:{value:new c}},vertexShader:hi.distanceRGBA_vert,fragmentShader:hi.distanceRGBA_frag}};fi.physical={uniforms:ui.merge([fi.standard.uniforms,{clearCoat:{value:0},clearCoatRoughness:{value:0}}]),vertexShader:hi.meshphysical_vert,fragmentShader:hi.meshphysical_frag},V.prototype={constructor:V,set:function(t,e){return this.min.copy(t),this.max.copy(e),this},setFromPoints:function(t){this.makeEmpty();for(var e=0,r=t.length;e<r;e++)this.expandByPoint(t[e]);return this},setFromCenterAndSize:function(){var t=new r;return function(e,r){var n=t.copy(r).multiplyScalar(.5);return this.min.copy(e).sub(n),this.max.copy(e).add(n),this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.min.copy(t.min),this.max.copy(t.max),this},makeEmpty:function(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-(1/0),this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y},getCenter:function(t){return t=t||new r,this.isEmpty()?t.set(0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(t){return t=t||new r,this.isEmpty()?t.set(0,0):t.subVectors(this.max,this.min)},expandByPoint:function(t){return this.min.min(t),this.max.max(t),this},expandByVector:function(t){return this.min.sub(t),this.max.add(t),this},expandByScalar:function(t){return this.min.addScalar(-t),this.max.addScalar(t),this},containsPoint:function(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y},getParameter:function(t,e){return(e||new r).set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y)},clampPoint:function(t,e){return(e||new r).copy(t).clamp(this.min,this.max)},distanceToPoint:function(){var t=new r;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)}};var di=0;q.prototype={constructor:q,isMaterial:!0,get needsUpdate(){return this._needsUpdate},set needsUpdate(t){!0===t&&this.update(),this._needsUpdate=t},setValues:function(t){if(void 0!==t)for(var e in t){var r=t[e];if(void 0===r)console.warn("THREE.Material: '"+e+"' parameter is undefined.");else{var n=this[e];void 0===n?console.warn("THREE."+this.type+": '"+e+"' is not a property of this material."):n&&n.isColor?n.set(r):n&&n.isVector3&&r&&r.isVector3?n.copy(r):this[e]="overdraw"===e?Number(r):r}}},toJSON:function(t){function e(t){var e,r=[];for(e in t){var n=t[e];delete n.metadata,r.push(n)}return r}var r=void 0===t;r&&(t={textures:{},images:{}});var n={metadata:{version:4.4,type:"Material",generator:"Material.toJSON"}};return n.uuid=this.uuid,n.type=this.type,""!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearCoat&&(n.clearCoat=this.clearCoat),void 0!==this.clearCoatRoughness&&(n.clearCoatRoughness=this.clearCoatRoughness),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,n.reflectivity=this.reflectivity),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.size&&(n.size=this.size),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),2!==this.shading&&(n.shading=this.shading),0!==this.side&&(n.side=this.side),0!==this.vertexColors&&(n.vertexColors=this.vertexColors),1>this.opacity&&(n.opacity=this.opacity),!0===this.transparent&&(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,0<this.alphaTest&&(n.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),1<this.wireframeLinewidth&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),n.skinning=this.skinning,n.morphTargets=this.morphTargets,r&&(r=e(t.textures),t=e(t.images),0<r.length&&(n.textures=r),0<t.length&&(n.images=t)),n},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.lights=t.lights,this.blending=t.blending,this.side=t.side,this.shading=t.shading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.overdraw=t.overdraw,this.visible=t.visible,this.clipShadows=t.clipShadows,this.clipIntersection=t.clipIntersection,t=t.clippingPlanes;var e=null;if(null!==t)for(var r=t.length,e=Array(r),n=0;n!==r;++n)e[n]=t[n].clone();return this.clippingPlanes=e,this},update:function(){this.dispatchEvent({type:"update"})},dispose:function(){this.dispatchEvent({type:"dispose"})}},Object.assign(q.prototype,e.prototype),X.prototype=Object.create(q.prototype),X.prototype.constructor=X,X.prototype.isShaderMaterial=!0,X.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=ui.clone(t.uniforms),this.defines=t.defines,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.lights=t.lights,this.clipping=t.clipping,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.extensions=t.extensions,this},X.prototype.toJSON=function(t){return t=q.prototype.toJSON.call(this,t),t.uniforms=this.uniforms,t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t},Y.prototype=Object.create(q.prototype),Y.prototype.constructor=Y,Y.prototype.isMeshDepthMaterial=!0,Y.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this},K.prototype={constructor:K,isBox3:!0,set:function(t,e){return this.min.copy(t),this.max.copy(e),this},setFromArray:function(t){for(var e=1/0,r=1/0,n=1/0,i=-(1/0),o=-(1/0),a=-(1/0),s=0,c=t.length;s<c;s+=3){var u=t[s],h=t[s+1],l=t[s+2];u<e&&(e=u),h<r&&(r=h),l<n&&(n=l),u>i&&(i=u),h>o&&(o=h),l>a&&(a=l)}this.min.set(e,r,n),this.max.set(i,o,a)},setFromBufferAttribute:function(t){for(var e=1/0,r=1/0,n=1/0,i=-(1/0),o=-(1/0),a=-(1/0),s=0,c=t.count;s<c;s++){var u=t.getX(s),h=t.getY(s),l=t.getZ(s);u<e&&(e=u),h<r&&(r=h),l<n&&(n=l),u>i&&(i=u),h>o&&(o=h),l>a&&(a=l)}this.min.set(e,r,n),this.max.set(i,o,a)},setFromPoints:function(t){this.makeEmpty();for(var e=0,r=t.length;e<r;e++)this.expandByPoint(t[e]);return this},setFromCenterAndSize:function(){var t=new c;return function(e,r){var n=t.copy(r).multiplyScalar(.5);return this.min.copy(e).sub(n),this.max.copy(e).add(n),this}}(),setFromObject:function(){var t=new c;return function(e){var r=this;return e.updateMatrixWorld(!0),this.makeEmpty(),e.traverse(function(e){var n,i;if(void 0!==(n=e.geometry))if(n.isGeometry){var o=n.vertices;for(n=0,i=o.length;n<i;n++)t.copy(o[n]),t.applyMatrix4(e.matrixWorld),r.expandByPoint(t)}else if(n.isBufferGeometry&&void 0!==(o=n.attributes.position))for(n=0,i=o.count;n<i;n++)t.fromAttribute(o,n).applyMatrix4(e.matrixWorld),r.expandByPoint(t)}),this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.min.copy(t.min),this.max.copy(t.max),this},makeEmpty:function(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-(1/0),this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z},getCenter:function(t){return t=t||new c,this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(t){return t=t||new c,this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)},expandByPoint:function(t){return this.min.min(t),this.max.max(t),this},expandByVector:function(t){return this.min.sub(t),this.max.add(t),this},expandByScalar:function(t){return this.min.addScalar(-t),this.max.addScalar(t),this},containsPoint:function(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y||t.z<this.min.z||t.z>this.max.z)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z},getParameter:function(t,e){return(e||new c).set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y||t.max.z<this.min.z||t.min.z>this.max.z)},intersectsSphere:function(){var t;return function(e){return void 0===t&&(t=new c),this.clampPoint(e.center,t),t.distanceToSquared(e.center)<=e.radius*e.radius}}(),intersectsPlane:function(t){var e,r;return 0<t.normal.x?(e=t.normal.x*this.min.x,r=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,r=t.normal.x*this.min.x),0<t.normal.y?(e+=t.normal.y*this.min.y,r+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,r+=t.normal.y*this.min.y),0<t.normal.z?(e+=t.normal.z*this.min.z,r+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,r+=t.normal.z*this.min.z),e<=t.constant&&r>=t.constant},clampPoint:function(t,e){return(e||new c).copy(t).clamp(this.min,this.max)},distanceToPoint:function(){var t=new c;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),getBoundingSphere:function(){var t=new c;return function(e){return e=e||new Z,this.getCenter(e.center),e.radius=.5*this.getSize(t).length(),e}}(),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},applyMatrix4:function(){var t=[new c,new c,new c,new c,new c,new c,new c,new c];return function(e){return this.isEmpty()?this:(t[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),t[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),t[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),t[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),t[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),t[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),t[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),t[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(t),this)}}(),translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)}},Z.prototype={constructor:Z,set:function(t,e){return this.center.copy(t),this.radius=e,this},setFromPoints:function(){var t=new K;return function(e,r){var n=this.center;void 0!==r?n.copy(r):t.setFromPoints(e).getCenter(n);for(var i=0,o=0,a=e.length;o<a;o++)i=Math.max(i,n.distanceToSquared(e[o]));return this.radius=Math.sqrt(i),this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.center.copy(t.center),this.radius=t.radius,this},empty:function(){return 0>=this.radius},containsPoint:function(t){return t.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(t){return t.distanceTo(this.center)-this.radius},intersectsSphere:function(t){var e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e},intersectsBox:function(t){return t.intersectsSphere(this)},intersectsPlane:function(t){return Math.abs(this.center.dot(t.normal)-t.constant)<=this.radius},clampPoint:function(t,e){var r=this.center.distanceToSquared(t),n=e||new c;return n.copy(t),r>this.radius*this.radius&&(n.sub(this.center).normalize(),n.multiplyScalar(this.radius).add(this.center)),n},getBoundingBox:function(t){return t=t||new K,t.set(this.center,this.center),t.expandByScalar(this.radius),t},applyMatrix4:function(t){return this.center.applyMatrix4(t),this.radius*=t.getMaxScaleOnAxis(),this},translate:function(t){return this.center.add(t),this},equals:function(t){return t.center.equals(this.center)&&t.radius===this.radius}},J.prototype={constructor:J,isMatrix3:!0,set:function(t,e,r,n,i,o,a,s,c){var u=this.elements;return u[0]=t,u[1]=n,u[2]=a,u[3]=e,u[4]=i,u[5]=s,u[6]=r,u[7]=o,u[8]=c,this},identity:function(){return this.set(1,0,0,0,1,0,0,0,1),this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(t){return t=t.elements,this.set(t[0],t[3],t[6],t[1],t[4],t[7],t[2],t[5],t[8]),this},setFromMatrix4:function(t){return t=t.elements,this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this},applyToVector3Array:function(){var t;return function(e,r,n){void 0===t&&(t=new c),void 0===r&&(r=0),void 0===n&&(n=e.length);for(var i=0;i<n;i+=3,r+=3)t.fromArray(e,r),t.applyMatrix3(this),t.toArray(e,r);return e}}(),applyToBufferAttribute:function(){var t;return function(e){void 0===t&&(t=new c);for(var r=0,n=e.count;r<n;r++)t.x=e.getX(r),t.y=e.getY(r),t.z=e.getZ(r),t.applyMatrix3(this),e.setXYZ(r,t.x,t.y,t.z);return e}}(),multiplyScalar:function(t){var e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this},determinant:function(){var t=this.elements,e=t[0],r=t[1],n=t[2],i=t[3],o=t[4],a=t[5],s=t[6],c=t[7],t=t[8];return e*o*t-e*a*c-r*i*t+r*a*s+n*i*c-n*o*s},getInverse:function(t,e){t&&t.isMatrix4&&console.error("THREE.Matrix3.getInverse no longer takes a Matrix4 argument.");var r=t.elements,n=this.elements,i=r[0],o=r[1],a=r[2],s=r[3],c=r[4],u=r[5],h=r[6],l=r[7],r=r[8],p=r*c-u*l,f=u*h-r*s,d=l*s-c*h,m=i*p+o*f+a*d;if(0===m){if(!0===e)throw Error("THREE.Matrix3.getInverse(): can't invert matrix, determinant is 0");return console.warn("THREE.Matrix3.getInverse(): can't invert matrix, determinant is 0"),this.identity()}return m=1/m,n[0]=p*m,n[1]=(a*l-r*o)*m,n[2]=(u*o-a*c)*m,n[3]=f*m,n[4]=(r*i-a*h)*m,n[5]=(a*s-u*i)*m,n[6]=d*m,n[7]=(o*h-l*i)*m,n[8]=(c*i-o*s)*m,this},transpose:function(){var t,e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this},getNormalMatrix:function(t){return this.setFromMatrix4(t).getInverse(this).transpose()},transposeIntoArray:function(t){var e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this},fromArray:function(t,e){void 0===e&&(e=0);for(var r=0;9>r;r++)this.elements[r]=t[r+e];return this},toArray:function(t,e){void 0===t&&(t=[]),void 0===e&&(e=0);var r=this.elements;return t[e]=r[0],t[e+1]=r[1],t[e+2]=r[2],t[e+3]=r[3],t[e+4]=r[4],t[e+5]=r[5],t[e+6]=r[6],t[e+7]=r[7],t[e+8]=r[8],t}},Q.prototype={constructor:Q,set:function(t,e){return this.normal.copy(t),this.constant=e,this},setComponents:function(t,e,r,n){return this.normal.set(t,e,r),this.constant=n,this},setFromNormalAndCoplanarPoint:function(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this},setFromCoplanarPoints:function(){var t=new c,e=new c;return function(r,n,i){return n=t.subVectors(i,n).cross(e.subVectors(r,n)).normalize(),this.setFromNormalAndCoplanarPoint(n,r),this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.normal.copy(t.normal),this.constant=t.constant,this},normalize:function(){var t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this},negate:function(){return this.constant*=-1,this.normal.negate(),this},distanceToPoint:function(t){return this.normal.dot(t)+this.constant},distanceToSphere:function(t){return this.distanceToPoint(t.center)-t.radius},projectPoint:function(t,e){return this.orthoPoint(t,e).sub(t).negate()},orthoPoint:function(t,e){var r=this.distanceToPoint(t);return(e||new c).copy(this.normal).multiplyScalar(r)},intersectLine:function(){var t=new c;return function(e,r){var n=r||new c,i=e.delta(t),o=this.normal.dot(i);return 0!==o?(o=-(e.start.dot(this.normal)+this.constant)/o,0>o||1<o?void 0:n.copy(i).multiplyScalar(o).add(e.start)):0===this.distanceToPoint(e.start)?n.copy(e.start):void 0}}(),intersectsLine:function(t){var e=this.distanceToPoint(t.start);return t=this.distanceToPoint(t.end),0>e&&0<t||0>t&&0<e},intersectsBox:function(t){return t.intersectsPlane(this)},intersectsSphere:function(t){return t.intersectsPlane(this)},coplanarPoint:function(t){return(t||new c).copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var t=new c,e=new J;return function(r,n){var i=this.coplanarPoint(t).applyMatrix4(r),o=n||e.getNormalMatrix(r),o=this.normal.applyMatrix3(o).normalize();return this.constant=-i.dot(o),this}}(),translate:function(t){return this.constant-=t.dot(this.normal),this},equals:function(t){return t.normal.equals(this.normal)&&t.constant===this.constant}},tt.prototype={constructor:tt,set:function(t,e,r,n,i,o){var a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(r),a[3].copy(n),a[4].copy(i),a[5].copy(o),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){for(var e=this.planes,r=0;6>r;r++)e[r].copy(t.planes[r]);return this},setFromMatrix:function(t){var e=this.planes,r=t.elements;t=r[0];var n=r[1],i=r[2],o=r[3],a=r[4],s=r[5],c=r[6],u=r[7],h=r[8],l=r[9],p=r[10],f=r[11],d=r[12],m=r[13],v=r[14],r=r[15];return e[0].setComponents(o-t,u-a,f-h,r-d).normalize(),e[1].setComponents(o+t,u+a,f+h,r+d).normalize(),e[2].setComponents(o+n,u+s,f+l,r+m).normalize(),e[3].setComponents(o-n,u-s,f-l,r-m).normalize(),e[4].setComponents(o-i,u-c,f-p,r-v).normalize(),e[5].setComponents(o+i,u+c,f+p,r+v).normalize(),this},intersectsObject:function(){var t=new Z;return function(e){var r=e.geometry;return null===r.boundingSphere&&r.computeBoundingSphere(),t.copy(r.boundingSphere).applyMatrix4(e.matrixWorld),this.intersectsSphere(t)}}(),intersectsSprite:function(){var t=new Z;return function(e){return t.center.set(0,0,0),t.radius=.7071067811865476,t.applyMatrix4(e.matrixWorld),this.intersectsSphere(t)}}(),intersectsSphere:function(t){var e=this.planes,r=t.center;t=-t.radius;for(var n=0;6>n;n++)if(e[n].distanceToPoint(r)<t)return!1;return!0},intersectsBox:function(){var t=new c,e=new c;return function(r){for(var n=this.planes,i=0;6>i;i++){var o=n[i];t.x=0<o.normal.x?r.min.x:r.max.x,e.x=0<o.normal.x?r.max.x:r.min.x,t.y=0<o.normal.y?r.min.y:r.max.y,e.y=0<o.normal.y?r.max.y:r.min.y,t.z=0<o.normal.z?r.min.z:r.max.z,e.z=0<o.normal.z?r.max.z:r.min.z;var a=o.distanceToPoint(t),o=o.distanceToPoint(e);if(0>a&&0>o)return!1}return!0}}(),containsPoint:function(t){for(var e=this.planes,r=0;6>r;r++)if(0>e[r].distanceToPoint(t))return!1;return!0}},rt.prototype={constructor:rt,set:function(t,e){return this.origin.copy(t),this.direction.copy(e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this},at:function(t,e){return(e||new c).copy(this.direction).multiplyScalar(t).add(this.origin)},lookAt:function(t){return this.direction.copy(t).sub(this.origin).normalize(),this},recast:function(){var t=new c;return function(e){return this.origin.copy(this.at(e,t)),this}}(),closestPointToPoint:function(t,e){var r=e||new c;r.subVectors(t,this.origin);var n=r.dot(this.direction);return 0>n?r.copy(this.origin):r.copy(this.direction).multiplyScalar(n).add(this.origin)},distanceToPoint:function(t){return Math.sqrt(this.distanceSqToPoint(t))},distanceSqToPoint:function(){var t=new c;return function(e){var r=t.subVectors(e,this.origin).dot(this.direction);return 0>r?this.origin.distanceToSquared(e):(t.copy(this.direction).multiplyScalar(r).add(this.origin),t.distanceToSquared(e))}}(),distanceSqToSegment:function(){var t=new c,e=new c,r=new c;return function(n,i,o,a){t.copy(n).add(i).multiplyScalar(.5),e.copy(i).sub(n).normalize(),r.copy(this.origin).sub(t);var s,c=.5*n.distanceTo(i),u=-this.direction.dot(e),h=r.dot(this.direction),l=-r.dot(e),p=r.lengthSq(),f=Math.abs(1-u*u);return 0<f?(n=u*l-h,i=u*h-l,s=c*f,0<=n?i>=-s?i<=s?(c=1/f,n*=c,i*=c,u=n*(n+u*i+2*h)+i*(u*n+i+2*l)+p):(i=c,n=Math.max(0,-(u*i+h)),u=-n*n+i*(i+2*l)+p):(i=-c,n=Math.max(0,-(u*i+h)),u=-n*n+i*(i+2*l)+p):i<=-s?(n=Math.max(0,-(-u*c+h)),i=0<n?-c:Math.min(Math.max(-c,-l),c),u=-n*n+i*(i+2*l)+p):i<=s?(n=0,i=Math.min(Math.max(-c,-l),c),u=i*(i+2*l)+p):(n=Math.max(0,-(u*c+h)),i=0<n?c:Math.min(Math.max(-c,-l),c),u=-n*n+i*(i+2*l)+p)):(i=0<u?-c:c,n=Math.max(0,-(u*i+h)),u=-n*n+i*(i+2*l)+p),o&&o.copy(this.direction).multiplyScalar(n).add(this.origin),a&&a.copy(e).multiplyScalar(i).add(t),u}}(),intersectSphere:function(){var t=new c;return function(e,r){t.subVectors(e.center,this.origin);var n=t.dot(this.direction),i=t.dot(t)-n*n,o=e.radius*e.radius;return i>o?null:(o=Math.sqrt(o-i),i=n-o,n+=o,0>i&&0>n?null:0>i?this.at(n,r):this.at(i,r))}}(),intersectsSphere:function(t){return this.distanceToPoint(t.center)<=t.radius},distanceToPlane:function(t){var e=t.normal.dot(this.direction);return 0===e?0===t.distanceToPoint(this.origin)?0:null:(t=-(this.origin.dot(t.normal)+t.constant)/e,0<=t?t:null)},intersectPlane:function(t,e){var r=this.distanceToPlane(t);return null===r?null:this.at(r,e)},intersectsPlane:function(t){var e=t.distanceToPoint(this.origin);return 0===e||0>t.normal.dot(this.direction)*e},intersectBox:function(t,e){var r,n,i,o,a;n=1/this.direction.x,o=1/this.direction.y,a=1/this.direction.z;var s=this.origin;return 0<=n?(r=(t.min.x-s.x)*n,n*=t.max.x-s.x):(r=(t.max.x-s.x)*n,n*=t.min.x-s.x),0<=o?(i=(t.min.y-s.y)*o,o*=t.max.y-s.y):(i=(t.max.y-s.y)*o,o*=t.min.y-s.y),r>o||i>n?null:((i>r||r!==r)&&(r=i),(o<n||n!==n)&&(n=o),0<=a?(i=(t.min.z-s.z)*a,a*=t.max.z-s.z):(i=(t.max.z-s.z)*a,a*=t.min.z-s.z),r>a||i>n?null:((i>r||r!==r)&&(r=i),(a<n||n!==n)&&(n=a),0>n?null:this.at(0<=r?r:n,e)))},intersectsBox:function(){var t=new c;return function(e){return null!==this.intersectBox(e,t)}}(),intersectTriangle:function(){var t=new c,e=new c,r=new c,n=new c;return function(i,o,a,s,c){if(e.subVectors(o,i),r.subVectors(a,i),n.crossVectors(e,r),0<(o=this.direction.dot(n))){if(s)return null;s=1}else{if(!(0>o))return null;s=-1,o=-o}return t.subVectors(this.origin,i),0>(i=s*this.direction.dot(r.crossVectors(t,r)))?null:0>(a=s*this.direction.dot(e.cross(t)))||i+a>o?null:(i=-s*t.dot(n),0>i?null:this.at(i/o,c))}}(),applyMatrix4:function(t){return this.direction.add(this.origin).applyMatrix4(t),this.origin.applyMatrix4(t),this.direction.sub(this.origin),this.direction.normalize(),this},equals:function(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}},nt.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" "),nt.DefaultOrder="XYZ",nt.prototype={constructor:nt,isEuler:!0,get x(){return this._x},set x(t){this._x=t,this.onChangeCallback()},get y(){return this._y},set y(t){this._y=t,this.onChangeCallback()},get z(){return this._z},set z(t){this._z=t,this.onChangeCallback()},get order(){return this._order},set order(t){this._order=t,this.onChangeCallback()},set:function(t,e,r,n){return this._x=t,this._y=e,this._z=r,this._order=n||this._order,this.onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this.onChangeCallback(),this},setFromRotationMatrix:function(t,e,r){var n=ri.clamp,i=t.elements;t=i[0];var o=i[4],a=i[8],s=i[1],c=i[5],u=i[9],h=i[2],l=i[6],i=i[10];return e=e||this._order,"XYZ"===e?(this._y=Math.asin(n(a,-1,1)),.99999>Math.abs(a)?(this._x=Math.atan2(-u,i),this._z=Math.atan2(-o,t)):(this._x=Math.atan2(l,c),this._z=0)):"YXZ"===e?(this._x=Math.asin(-n(u,-1,1)),.99999>Math.abs(u)?(this._y=Math.atan2(a,i),this._z=Math.atan2(s,c)):(this._y=Math.atan2(-h,t),this._z=0)):"ZXY"===e?(this._x=Math.asin(n(l,-1,1)),.99999>Math.abs(l)?(this._y=Math.atan2(-h,i),this._z=Math.atan2(-o,c)):(this._y=0,this._z=Math.atan2(s,t))):"ZYX"===e?(this._y=Math.asin(-n(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(l,i),this._z=Math.atan2(s,t)):(this._x=0,this._z=Math.atan2(-o,c))):"YZX"===e?(this._z=Math.asin(n(s,-1,1)),.99999>Math.abs(s)?(this._x=Math.atan2(-u,c),this._y=Math.atan2(-h,t)):(this._x=0,this._y=Math.atan2(a,i))):"XZY"===e?(this._z=Math.asin(-n(o,-1,1)),.99999>Math.abs(o)?(this._x=Math.atan2(l,c),this._y=Math.atan2(a,t)):(this._x=Math.atan2(-u,i),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+e),this._order=e,!1!==r&&this.onChangeCallback(),this},setFromQuaternion:function(){var t;return function(e,r,n){
-return void 0===t&&(t=new u),t.makeRotationFromQuaternion(e),this.setFromRotationMatrix(t,r,n)}}(),setFromVector3:function(t,e){return this.set(t.x,t.y,t.z,e||this._order)},reorder:function(){var t=new s;return function(e){return t.setFromEuler(this),this.setFromQuaternion(t,e)}}(),equals:function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order},fromArray:function(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this.onChangeCallback(),this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t},toVector3:function(t){return t?t.set(this._x,this._y,this._z):new c(this._x,this._y,this._z)},onChange:function(t){return this.onChangeCallback=t,this},onChangeCallback:function(){}},it.prototype={constructor:it,set:function(t){this.mask=1<<t},enable:function(t){this.mask|=1<<t},toggle:function(t){this.mask^=1<<t},disable:function(t){this.mask&=~(1<<t)},test:function(t){return 0!=(this.mask&t.mask)}};var mi=0;ot.DefaultUp=new c(0,1,0),ot.DefaultMatrixAutoUpdate=!0,Object.assign(ot.prototype,e.prototype,{isObject3D:!0,applyMatrix:function(t){this.matrix.multiplyMatrices(t,this.matrix),this.matrix.decompose(this.position,this.quaternion,this.scale)},setRotationFromAxisAngle:function(t,e){this.quaternion.setFromAxisAngle(t,e)},setRotationFromEuler:function(t){this.quaternion.setFromEuler(t,!0)},setRotationFromMatrix:function(t){this.quaternion.setFromRotationMatrix(t)},setRotationFromQuaternion:function(t){this.quaternion.copy(t)},rotateOnAxis:function(){var t=new s;return function(e,r){return t.setFromAxisAngle(e,r),this.quaternion.multiply(t),this}}(),rotateX:function(){var t=new c(1,0,0);return function(e){return this.rotateOnAxis(t,e)}}(),rotateY:function(){var t=new c(0,1,0);return function(e){return this.rotateOnAxis(t,e)}}(),rotateZ:function(){var t=new c(0,0,1);return function(e){return this.rotateOnAxis(t,e)}}(),translateOnAxis:function(){var t=new c;return function(e,r){return t.copy(e).applyQuaternion(this.quaternion),this.position.add(t.multiplyScalar(r)),this}}(),translateX:function(){var t=new c(1,0,0);return function(e){return this.translateOnAxis(t,e)}}(),translateY:function(){var t=new c(0,1,0);return function(e){return this.translateOnAxis(t,e)}}(),translateZ:function(){var t=new c(0,0,1);return function(e){return this.translateOnAxis(t,e)}}(),localToWorld:function(t){return t.applyMatrix4(this.matrixWorld)},worldToLocal:function(){var t=new u;return function(e){return e.applyMatrix4(t.getInverse(this.matrixWorld))}}(),lookAt:function(){var t=new u;return function(e){t.lookAt(e,this.position,this.up),this.quaternion.setFromRotationMatrix(t)}}(),add:function(t){if(1<arguments.length){for(var e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return t===this?(console.error("THREE.Object3D.add: object can't be added as a child of itself.",t),this):(t&&t.isObject3D?(null!==t.parent&&t.parent.remove(t),t.parent=this,t.dispatchEvent({type:"added"}),this.children.push(t)):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",t),this)},remove:function(t){if(1<arguments.length)for(var e=0;e<arguments.length;e++)this.remove(arguments[e]);-1!==(e=this.children.indexOf(t))&&(t.parent=null,t.dispatchEvent({type:"removed"}),this.children.splice(e,1))},getObjectById:function(t){return this.getObjectByProperty("id",t)},getObjectByName:function(t){return this.getObjectByProperty("name",t)},getObjectByProperty:function(t,e){if(this[t]===e)return this;for(var r=0,n=this.children.length;r<n;r++){var i=this.children[r].getObjectByProperty(t,e);if(void 0!==i)return i}},getWorldPosition:function(t){return t=t||new c,this.updateMatrixWorld(!0),t.setFromMatrixPosition(this.matrixWorld)},getWorldQuaternion:function(){var t=new c,e=new c;return function(r){return r=r||new s,this.updateMatrixWorld(!0),this.matrixWorld.decompose(t,r,e),r}}(),getWorldRotation:function(){var t=new s;return function(e){return e=e||new nt,this.getWorldQuaternion(t),e.setFromQuaternion(t,this.rotation.order,!1)}}(),getWorldScale:function(){var t=new c,e=new s;return function(r){return r=r||new c,this.updateMatrixWorld(!0),this.matrixWorld.decompose(t,e,r),r}}(),getWorldDirection:function(){var t=new s;return function(e){return e=e||new c,this.getWorldQuaternion(t),e.set(0,0,1).applyQuaternion(t)}}(),raycast:function(){},traverse:function(t){t(this);for(var e=this.children,r=0,n=e.length;r<n;r++)e[r].traverse(t)},traverseVisible:function(t){if(!1!==this.visible){t(this);for(var e=this.children,r=0,n=e.length;r<n;r++)e[r].traverseVisible(t)}},traverseAncestors:function(t){var e=this.parent;null!==e&&(t(e),e.traverseAncestors(t))},updateMatrix:function(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(t){!0===this.matrixAutoUpdate&&this.updateMatrix(),!0!==this.matrixWorldNeedsUpdate&&!0!==t||(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,t=!0);for(var e=this.children,r=0,n=e.length;r<n;r++)e[r].updateMatrixWorld(t)},toJSON:function(t){function e(t){var e,r=[];for(e in t){var n=t[e];delete n.metadata,r.push(n)}return r}var r=void 0===t||""===t,n={};r&&(t={geometries:{},materials:{},textures:{},images:{}},n.metadata={version:4.4,type:"Object",generator:"Object3D.toJSON"});var i={};if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),"{}"!==JSON.stringify(this.userData)&&(i.userData=this.userData),!0===this.castShadow&&(i.castShadow=!0),!0===this.receiveShadow&&(i.receiveShadow=!0),!1===this.visible&&(i.visible=!1),i.matrix=this.matrix.toArray(),void 0!==this.geometry&&(void 0===t.geometries[this.geometry.uuid]&&(t.geometries[this.geometry.uuid]=this.geometry.toJSON(t)),i.geometry=this.geometry.uuid),void 0!==this.material&&(void 0===t.materials[this.material.uuid]&&(t.materials[this.material.uuid]=this.material.toJSON(t)),i.material=this.material.uuid),0<this.children.length){i.children=[];for(var o=0;o<this.children.length;o++)i.children.push(this.children[o].toJSON(t).object)}if(r){var r=e(t.geometries),o=e(t.materials),a=e(t.textures);t=e(t.images),0<r.length&&(n.geometries=r),0<o.length&&(n.materials=o),0<a.length&&(n.textures=a),0<t.length&&(n.images=t)}return n.object=i,n},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e){if(void 0===e&&(e=!0),this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(var r=0;r<t.children.length;r++)this.add(t.children[r].clone());return this}}),at.prototype={constructor:at,set:function(t,e){return this.start.copy(t),this.end.copy(e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.start.copy(t.start),this.end.copy(t.end),this},getCenter:function(t){return(t||new c).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(t){return(t||new c).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(t,e){var r=e||new c;return this.delta(r).multiplyScalar(t).add(this.start)},closestPointToPointParameter:function(){var t=new c,e=new c;return function(r,n){t.subVectors(r,this.start),e.subVectors(this.end,this.start);var i=e.dot(e),i=e.dot(t)/i;return n&&(i=ri.clamp(i,0,1)),i}}(),closestPointToPoint:function(t,e,r){return t=this.closestPointToPointParameter(t,e),r=r||new c,this.delta(r).multiplyScalar(t).add(this.start)},applyMatrix4:function(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this},equals:function(t){return t.start.equals(this.start)&&t.end.equals(this.end)}},st.normal=function(){var t=new c;return function(e,r,n,i){return i=i||new c,i.subVectors(n,r),t.subVectors(e,r),i.cross(t),e=i.lengthSq(),0<e?i.multiplyScalar(1/Math.sqrt(e)):i.set(0,0,0)}}(),st.barycoordFromPoint=function(){var t=new c,e=new c,r=new c;return function(n,i,o,a,s){t.subVectors(a,i),e.subVectors(o,i),r.subVectors(n,i),n=t.dot(t),i=t.dot(e),o=t.dot(r);var u=e.dot(e);a=e.dot(r);var h=n*u-i*i;return s=s||new c,0===h?s.set(-2,-1,-1):(h=1/h,u=(u*o-i*a)*h,n=(n*a-i*o)*h,s.set(1-u-n,n,u))}}(),st.containsPoint=function(){var t=new c;return function(e,r,n,i){return e=st.barycoordFromPoint(e,r,n,i,t),0<=e.x&&0<=e.y&&1>=e.x+e.y}}(),st.prototype={constructor:st,set:function(t,e,r){return this.a.copy(t),this.b.copy(e),this.c.copy(r),this},setFromPointsAndIndices:function(t,e,r,n){return this.a.copy(t[e]),this.b.copy(t[r]),this.c.copy(t[n]),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this},area:function(){var t=new c,e=new c;return function(){return t.subVectors(this.c,this.b),e.subVectors(this.a,this.b),.5*t.cross(e).length()}}(),midpoint:function(t){return(t||new c).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(t){return st.normal(this.a,this.b,this.c,t)},plane:function(t){return(t||new Q).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(t,e){return st.barycoordFromPoint(t,this.a,this.b,this.c,e)},containsPoint:function(t){return st.containsPoint(t,this.a,this.b,this.c)},closestPointToPoint:function(){var t,e,r,n;return function(i,o){void 0===t&&(t=new Q,e=[new at,new at,new at],r=new c,n=new c);var a=o||new c,s=1/0;if(t.setFromCoplanarPoints(this.a,this.b,this.c),t.projectPoint(i,r),!0===this.containsPoint(r))a.copy(r);else{e[0].set(this.a,this.b),e[1].set(this.b,this.c),e[2].set(this.c,this.a);for(var u=0;u<e.length;u++){e[u].closestPointToPoint(r,!0,n);var h=r.distanceToSquared(n);h<s&&(s=h,a.copy(n))}}return a}}(),equals:function(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}},ct.prototype={constructor:ct,clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.a=t.a,this.b=t.b,this.c=t.c,this.normal.copy(t.normal),this.color.copy(t.color),this.materialIndex=t.materialIndex;for(var e=0,r=t.vertexNormals.length;e<r;e++)this.vertexNormals[e]=t.vertexNormals[e].clone();for(e=0,r=t.vertexColors.length;e<r;e++)this.vertexColors[e]=t.vertexColors[e].clone();return this}},ut.prototype=Object.create(q.prototype),ut.prototype.constructor=ut,ut.prototype.isMeshBasicMaterial=!0,ut.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this},ht.prototype={constructor:ht,isBufferAttribute:!0,set needsUpdate(t){!0===t&&this.version++},setArray:function(t){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.count=void 0!==t?t.length/this.itemSize:0,this.array=t},setDynamic:function(t){return this.dynamic=t,this},copy:function(t){return this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.dynamic=t.dynamic,this},copyAt:function(t,e,r){t*=this.itemSize,r*=e.itemSize;for(var n=0,i=this.itemSize;n<i;n++)this.array[t+n]=e.array[r+n];return this},copyArray:function(t){return this.array.set(t),this},copyColorsArray:function(t){for(var e=this.array,r=0,n=0,i=t.length;n<i;n++){var o=t[n];void 0===o&&(console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined",n),o=new $),e[r++]=o.r,e[r++]=o.g,e[r++]=o.b}return this},copyIndicesArray:function(t){for(var e=this.array,r=0,n=0,i=t.length;n<i;n++){var o=t[n];e[r++]=o.a,e[r++]=o.b,e[r++]=o.c}return this},copyVector2sArray:function(t){for(var e=this.array,n=0,i=0,o=t.length;i<o;i++){var a=t[i];void 0===a&&(console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined",i),a=new r),e[n++]=a.x,e[n++]=a.y}return this},copyVector3sArray:function(t){for(var e=this.array,r=0,n=0,i=t.length;n<i;n++){var o=t[n];void 0===o&&(console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined",n),o=new c),e[r++]=o.x,e[r++]=o.y,e[r++]=o.z}return this},copyVector4sArray:function(t){for(var e=this.array,r=0,n=0,o=t.length;n<o;n++){var a=t[n];void 0===a&&(console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined",n),a=new i),e[r++]=a.x,e[r++]=a.y,e[r++]=a.z,e[r++]=a.w}return this},set:function(t,e){return void 0===e&&(e=0),this.array.set(t,e),this},getX:function(t){return this.array[t*this.itemSize]},setX:function(t,e){return this.array[t*this.itemSize]=e,this},getY:function(t){return this.array[t*this.itemSize+1]},setY:function(t,e){return this.array[t*this.itemSize+1]=e,this},getZ:function(t){return this.array[t*this.itemSize+2]},setZ:function(t,e){return this.array[t*this.itemSize+2]=e,this},getW:function(t){return this.array[t*this.itemSize+3]},setW:function(t,e){return this.array[t*this.itemSize+3]=e,this},setXY:function(t,e,r){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=r,this},setXYZ:function(t,e,r,n){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=r,this.array[t+2]=n,this},setXYZW:function(t,e,r,n,i){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=r,this.array[t+2]=n,this.array[t+3]=i,this},onUpload:function(t){return this.onUploadCallback=t,this},clone:function(){return(new this.constructor).copy(this)}},lt.prototype=Object.create(ht.prototype),lt.prototype.constructor=lt,pt.prototype=Object.create(ht.prototype),pt.prototype.constructor=pt,ft.prototype=Object.create(ht.prototype),ft.prototype.constructor=ft,dt.prototype=Object.create(ht.prototype),dt.prototype.constructor=dt,mt.prototype=Object.create(ht.prototype),mt.prototype.constructor=mt,vt.prototype=Object.create(ht.prototype),vt.prototype.constructor=vt,gt.prototype=Object.create(ht.prototype),gt.prototype.constructor=gt,yt.prototype=Object.create(ht.prototype),yt.prototype.constructor=yt,bt.prototype=Object.create(ht.prototype),bt.prototype.constructor=bt,Object.assign(_t.prototype,{computeGroups:function(t){var e,r=[],n=void 0;t=t.faces;for(var i=0;i<t.length;i++){var o=t[i];o.materialIndex!==n&&(n=o.materialIndex,void 0!==e&&(e.count=3*i-e.start,r.push(e)),e={start:3*i,materialIndex:n})}void 0!==e&&(e.count=3*i-e.start,r.push(e)),this.groups=r},fromGeometry:function(t){var e,n=t.faces,i=t.vertices,o=t.faceVertexUvs,a=o[0]&&0<o[0].length,s=o[1]&&0<o[1].length,c=t.morphTargets,u=c.length;if(0<u){e=[];for(var h=0;h<u;h++)e[h]=[];this.morphTargets.position=e}var l,p=t.morphNormals,f=p.length;if(0<f){for(l=[],h=0;h<f;h++)l[h]=[];this.morphTargets.normal=l}for(var d=t.skinIndices,m=t.skinWeights,v=d.length===i.length,g=m.length===i.length,h=0;h<n.length;h++){var y=n[h];this.vertices.push(i[y.a],i[y.b],i[y.c]);var b=y.vertexNormals;for(3===b.length?this.normals.push(b[0],b[1],b[2]):(b=y.normal,this.normals.push(b,b,b)),b=y.vertexColors,3===b.length?this.colors.push(b[0],b[1],b[2]):(b=y.color,this.colors.push(b,b,b)),!0===a&&(b=o[0][h],void 0!==b?this.uvs.push(b[0],b[1],b[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",h),this.uvs.push(new r,new r,new r))),!0===s&&(b=o[1][h],void 0!==b?this.uvs2.push(b[0],b[1],b[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",h),this.uvs2.push(new r,new r,new r))),b=0;b<u;b++){var _=c[b].vertices;e[b].push(_[y.a],_[y.b],_[y.c])}for(b=0;b<f;b++)_=p[b].vertexNormals[h],l[b].push(_.a,_.b,_.c);v&&this.skinIndices.push(d[y.a],d[y.b],d[y.c]),g&&this.skinWeights.push(m[y.a],m[y.b],m[y.c])}return this.computeGroups(t),this.verticesNeedUpdate=t.verticesNeedUpdate,this.normalsNeedUpdate=t.normalsNeedUpdate,this.colorsNeedUpdate=t.colorsNeedUpdate,this.uvsNeedUpdate=t.uvsNeedUpdate,this.groupsNeedUpdate=t.groupsNeedUpdate,this}}),Object.assign(xt.prototype,e.prototype,{isGeometry:!0,applyMatrix:function(t){for(var e=(new J).getNormalMatrix(t),r=0,n=this.vertices.length;r<n;r++)this.vertices[r].applyMatrix4(t);for(r=0,n=this.faces.length;r<n;r++){t=this.faces[r],t.normal.applyMatrix3(e).normalize();for(var i=0,o=t.vertexNormals.length;i<o;i++)t.vertexNormals[i].applyMatrix3(e).normalize()}return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this.normalsNeedUpdate=this.verticesNeedUpdate=!0,this},rotateX:function(){var t;return function(e){return void 0===t&&(t=new u),t.makeRotationX(e),this.applyMatrix(t),this}}(),rotateY:function(){var t;return function(e){return void 0===t&&(t=new u),t.makeRotationY(e),this.applyMatrix(t),this}}(),rotateZ:function(){var t;return function(e){return void 0===t&&(t=new u),t.makeRotationZ(e),this.applyMatrix(t),this}}(),translate:function(){var t;return function(e,r,n){return void 0===t&&(t=new u),t.makeTranslation(e,r,n),this.applyMatrix(t),this}}(),scale:function(){var t;return function(e,r,n){return void 0===t&&(t=new u),t.makeScale(e,r,n),this.applyMatrix(t),this}}(),lookAt:function(){var t;return function(e){void 0===t&&(t=new ot),t.lookAt(e),t.updateMatrix(),this.applyMatrix(t.matrix)}}(),fromBufferGeometry:function(t){function e(t,e,r,i){i=new ct(t,e,r,void 0!==s?[p[t].clone(),p[e].clone(),p[r].clone()]:[],void 0!==u?[n.colors[t].clone(),n.colors[e].clone(),n.colors[r].clone()]:[],i),n.faces.push(i),void 0!==h&&n.faceVertexUvs[0].push([f[t].clone(),f[e].clone(),f[r].clone()]),void 0!==l&&n.faceVertexUvs[1].push([d[t].clone(),d[e].clone(),d[r].clone()])}var n=this,i=null!==t.index?t.index.array:void 0,o=t.attributes,a=o.position.array,s=void 0!==o.normal?o.normal.array:void 0,u=void 0!==o.color?o.color.array:void 0,h=void 0!==o.uv?o.uv.array:void 0,l=void 0!==o.uv2?o.uv2.array:void 0;void 0!==l&&(this.faceVertexUvs[1]=[]);for(var p=[],f=[],d=[],m=o=0;o<a.length;o+=3,m+=2)n.vertices.push(new c(a[o],a[o+1],a[o+2])),void 0!==s&&p.push(new c(s[o],s[o+1],s[o+2])),void 0!==u&&n.colors.push(new $(u[o],u[o+1],u[o+2])),void 0!==h&&f.push(new r(h[m],h[m+1])),void 0!==l&&d.push(new r(l[m],l[m+1]));if(void 0!==i)if(a=t.groups,0<a.length)for(o=0;o<a.length;o++)for(var v=a[o],g=v.start,y=v.count,m=g,g=g+y;m<g;m+=3)e(i[m],i[m+1],i[m+2],v.materialIndex);else for(o=0;o<i.length;o+=3)e(i[o],i[o+1],i[o+2]);else for(o=0;o<a.length/3;o+=3)e(o,o+1,o+2);return this.computeFaceNormals(),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),this},center:function(){this.computeBoundingBox();var t=this.boundingBox.getCenter().negate();return this.translate(t.x,t.y,t.z),t},normalize:function(){this.computeBoundingSphere();var t=this.boundingSphere.center,e=this.boundingSphere.radius,e=0===e?1:1/e,r=new u;return r.set(e,0,0,-e*t.x,0,e,0,-e*t.y,0,0,e,-e*t.z,0,0,0,1),this.applyMatrix(r),this},computeFaceNormals:function(){for(var t=new c,e=new c,r=0,n=this.faces.length;r<n;r++){var i=this.faces[r],o=this.vertices[i.a],a=this.vertices[i.b];t.subVectors(this.vertices[i.c],a),e.subVectors(o,a),t.cross(e),t.normalize(),i.normal.copy(t)}},computeVertexNormals:function(t){void 0===t&&(t=!0);var e,r,n;for(n=Array(this.vertices.length),e=0,r=this.vertices.length;e<r;e++)n[e]=new c;if(t){var i,o,a,s=new c,u=new c;for(t=0,e=this.faces.length;t<e;t++)r=this.faces[t],i=this.vertices[r.a],o=this.vertices[r.b],a=this.vertices[r.c],s.subVectors(a,o),u.subVectors(i,o),s.cross(u),n[r.a].add(s),n[r.b].add(s),n[r.c].add(s)}else for(this.computeFaceNormals(),t=0,e=this.faces.length;t<e;t++)r=this.faces[t],n[r.a].add(r.normal),n[r.b].add(r.normal),n[r.c].add(r.normal);for(e=0,r=this.vertices.length;e<r;e++)n[e].normalize();for(t=0,e=this.faces.length;t<e;t++)r=this.faces[t],i=r.vertexNormals,3===i.length?(i[0].copy(n[r.a]),i[1].copy(n[r.b]),i[2].copy(n[r.c])):(i[0]=n[r.a].clone(),i[1]=n[r.b].clone(),i[2]=n[r.c].clone());0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var t,e,r;for(this.computeFaceNormals(),t=0,e=this.faces.length;t<e;t++){r=this.faces[t];var n=r.vertexNormals;3===n.length?(n[0].copy(r.normal),n[1].copy(r.normal),n[2].copy(r.normal)):(n[0]=r.normal.clone(),n[1]=r.normal.clone(),n[2]=r.normal.clone())}0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){var t,e,r,n,i;for(r=0,n=this.faces.length;r<n;r++)for(i=this.faces[r],i.__originalFaceNormal?i.__originalFaceNormal.copy(i.normal):i.__originalFaceNormal=i.normal.clone(),i.__originalVertexNormals||(i.__originalVertexNormals=[]),t=0,e=i.vertexNormals.length;t<e;t++)i.__originalVertexNormals[t]?i.__originalVertexNormals[t].copy(i.vertexNormals[t]):i.__originalVertexNormals[t]=i.vertexNormals[t].clone();var o=new xt;for(o.faces=this.faces,t=0,e=this.morphTargets.length;t<e;t++){if(!this.morphNormals[t]){this.morphNormals[t]={},this.morphNormals[t].faceNormals=[],this.morphNormals[t].vertexNormals=[],i=this.morphNormals[t].faceNormals;var a,s,u=this.morphNormals[t].vertexNormals;for(r=0,n=this.faces.length;r<n;r++)a=new c,s={a:new c,b:new c,c:new c},i.push(a),u.push(s)}for(u=this.morphNormals[t],o.vertices=this.morphTargets[t].vertices,o.computeFaceNormals(),o.computeVertexNormals(),r=0,n=this.faces.length;r<n;r++)i=this.faces[r],a=u.faceNormals[r],s=u.vertexNormals[r],a.copy(i.normal),s.a.copy(i.vertexNormals[0]),s.b.copy(i.vertexNormals[1]),s.c.copy(i.vertexNormals[2])}for(r=0,n=this.faces.length;r<n;r++)i=this.faces[r],i.normal=i.__originalFaceNormal,i.vertexNormals=i.__originalVertexNormals},computeLineDistances:function(){for(var t=0,e=this.vertices,r=0,n=e.length;r<n;r++)0<r&&(t+=e[r].distanceTo(e[r-1])),this.lineDistances[r]=t},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new K),this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new Z),this.boundingSphere.setFromPoints(this.vertices)},merge:function(t,e,r){if(!1===(t&&t.isGeometry))console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",t);else{var n,i=this.vertices.length,o=this.vertices,a=t.vertices,s=this.faces,c=t.faces,u=this.faceVertexUvs[0],h=t.faceVertexUvs[0],l=this.colors,p=t.colors;void 0===r&&(r=0),void 0!==e&&(n=(new J).getNormalMatrix(e)),t=0;for(var f=a.length;t<f;t++){var d=a[t].clone();void 0!==e&&d.applyMatrix4(e),o.push(d)}for(t=0,f=p.length;t<f;t++)l.push(p[t].clone());for(t=0,f=c.length;t<f;t++){var a=c[t],m=a.vertexNormals,p=a.vertexColors,l=new ct(a.a+i,a.b+i,a.c+i);for(l.normal.copy(a.normal),void 0!==n&&l.normal.applyMatrix3(n).normalize(),e=0,o=m.length;e<o;e++)d=m[e].clone(),void 0!==n&&d.applyMatrix3(n).normalize(),l.vertexNormals.push(d);for(l.color.copy(a.color),e=0,o=p.length;e<o;e++)d=p[e],l.vertexColors.push(d.clone());l.materialIndex=a.materialIndex+r,s.push(l)}for(t=0,f=h.length;t<f;t++)if(r=h[t],n=[],void 0!==r){for(e=0,o=r.length;e<o;e++)n.push(r[e].clone());u.push(n)}}},mergeMesh:function(t){!1===(t&&t.isMesh)?console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",t):(t.matrixAutoUpdate&&t.updateMatrix(),this.merge(t.geometry,t.matrix))},mergeVertices:function(){var t,e,r,n={},i=[],o=[],a=Math.pow(10,4);for(e=0,r=this.vertices.length;e<r;e++)t=this.vertices[e],t=Math.round(t.x*a)+"_"+Math.round(t.y*a)+"_"+Math.round(t.z*a),void 0===n[t]?(n[t]=e,i.push(this.vertices[e]),o[e]=i.length-1):o[e]=o[n[t]];for(n=[],e=0,r=this.faces.length;e<r;e++)for(a=this.faces[e],a.a=o[a.a],a.b=o[a.b],a.c=o[a.c],a=[a.a,a.b,a.c],t=0;3>t;t++)if(a[t]===a[(t+1)%3]){n.push(e);break}for(e=n.length-1;0<=e;e--)for(a=n[e],this.faces.splice(a,1),o=0,r=this.faceVertexUvs.length;o<r;o++)this.faceVertexUvs[o].splice(a,1);return e=this.vertices.length-i.length,this.vertices=i,e},sortFacesByMaterialIndex:function(){for(var t=this.faces,e=t.length,r=0;r<e;r++)t[r]._id=r;t.sort(function(t,e){return t.materialIndex-e.materialIndex});var n,i,o=this.faceVertexUvs[0],a=this.faceVertexUvs[1];for(o&&o.length===e&&(n=[]),a&&a.length===e&&(i=[]),r=0;r<e;r++){var s=t[r]._id;n&&n.push(o[s]),i&&i.push(a[s])}n&&(this.faceVertexUvs[0]=n),i&&(this.faceVertexUvs[1]=i)},toJSON:function(){function t(t,e,r){return r?t|1<<e:t&~(1<<e)}function e(t){var e=t.x.toString()+t.y.toString()+t.z.toString();return void 0!==u[e]?u[e]:(u[e]=c.length/3,c.push(t.x,t.y,t.z),u[e])}function r(t){var e=t.r.toString()+t.g.toString()+t.b.toString();return void 0!==l[e]?l[e]:(l[e]=h.length,h.push(t.getHex()),l[e])}function n(t){var e=t.x.toString()+t.y.toString();return void 0!==f[e]?f[e]:(f[e]=p.length/2,p.push(t.x,t.y),f[e])}var i={metadata:{version:4.4,type:"Geometry",generator:"Geometry.toJSON"}};if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),void 0!==this.parameters){var o,a=this.parameters;for(o in a)void 0!==a[o]&&(i[o]=a[o]);return i}for(a=[],o=0;o<this.vertices.length;o++){var s=this.vertices[o];a.push(s.x,s.y,s.z)}var s=[],c=[],u={},h=[],l={},p=[],f={};for(o=0;o<this.faces.length;o++){var d=this.faces[o],m=void 0!==this.faceVertexUvs[0][o],v=0<d.normal.length(),g=0<d.vertexNormals.length,y=1!==d.color.r||1!==d.color.g||1!==d.color.b,b=0<d.vertexColors.length,_=0,_=t(_,0,0),_=t(_,1,!0),_=t(_,2,!1),_=t(_,3,m),_=t(_,4,v),_=t(_,5,g),_=t(_,6,y),_=t(_,7,b);s.push(_),s.push(d.a,d.b,d.c),s.push(d.materialIndex),m&&(m=this.faceVertexUvs[0][o],s.push(n(m[0]),n(m[1]),n(m[2]))),v&&s.push(e(d.normal)),g&&(v=d.vertexNormals,s.push(e(v[0]),e(v[1]),e(v[2]))),y&&s.push(r(d.color)),b&&(d=d.vertexColors,s.push(r(d[0]),r(d[1]),r(d[2])))}return i.data={},i.data.vertices=a,i.data.normals=c,0<h.length&&(i.data.colors=h),0<p.length&&(i.data.uvs=[p]),i.data.faces=s,i},clone:function(){return(new xt).copy(this)},copy:function(t){this.vertices=[],this.faces=[],this.faceVertexUvs=[[]],this.colors=[];for(var e=t.vertices,r=0,n=e.length;r<n;r++)this.vertices.push(e[r].clone());for(e=t.colors,r=0,n=e.length;r<n;r++)this.colors.push(e[r].clone());for(e=t.faces,r=0,n=e.length;r<n;r++)this.faces.push(e[r].clone());for(r=0,n=t.faceVertexUvs.length;r<n;r++){e=t.faceVertexUvs[r],void 0===this.faceVertexUvs[r]&&(this.faceVertexUvs[r]=[]);for(var i=0,o=e.length;i<o;i++){for(var a=e[i],s=[],c=0,u=a.length;c<u;c++)s.push(a[c].clone());this.faceVertexUvs[r].push(s)}}return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});var vi=0;Object.assign(wt.prototype,e.prototype,{isBufferGeometry:!0,getIndex:function(){return this.index},setIndex:function(t){this.index=t},addAttribute:function(t,e,r){if(!1===(e&&e.isBufferAttribute)&&!1===(e&&e.isInterleavedBufferAttribute))console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.addAttribute(t,new ht(e,r));else{if("index"!==t)return this.attributes[t]=e,this;console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e)}},getAttribute:function(t){return this.attributes[t]},removeAttribute:function(t){return delete this.attributes[t],this},addGroup:function(t,e,r){this.groups.push({start:t,count:e,materialIndex:void 0!==r?r:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix:function(t){var e=this.attributes.position;return void 0!==e&&(t.applyToVector3Array(e.array),e.needsUpdate=!0),e=this.attributes.normal,void 0!==e&&((new J).getNormalMatrix(t).applyToVector3Array(e.array),e.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(){var t;return function(e){return void 0===t&&(t=new u),t.makeRotationX(e),this.applyMatrix(t),this}}(),rotateY:function(){var t;return function(e){return void 0===t&&(t=new u),t.makeRotationY(e),this.applyMatrix(t),this}}(),rotateZ:function(){var t;return function(e){return void 0===t&&(t=new u),t.makeRotationZ(e),this.applyMatrix(t),this}}(),translate:function(){var t;return function(e,r,n){return void 0===t&&(t=new u),t.makeTranslation(e,r,n),this.applyMatrix(t),this}}(),scale:function(){var t;return function(e,r,n){return void 0===t&&(t=new u),t.makeScale(e,r,n),this.applyMatrix(t),this}}(),lookAt:function(){var t;return function(e){void 0===t&&(t=new ot),t.lookAt(e),t.updateMatrix(),this.applyMatrix(t.matrix)}}(),center:function(){this.computeBoundingBox();var t=this.boundingBox.getCenter().negate();return this.translate(t.x,t.y,t.z),t},setFromObject:function(t){var e=t.geometry;if(t.isPoints||t.isLine){t=new yt(3*e.vertices.length,3);var r=new yt(3*e.colors.length,3);this.addAttribute("position",t.copyVector3sArray(e.vertices)),this.addAttribute("color",r.copyColorsArray(e.colors)),e.lineDistances&&e.lineDistances.length===e.vertices.length&&(t=new yt(e.lineDistances.length,1),this.addAttribute("lineDistance",t.copyArray(e.lineDistances))),null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone())}else t.isMesh&&e&&e.isGeometry&&this.fromGeometry(e);return this},updateFromObject:function(t){var e=t.geometry;if(t.isMesh){var r=e.__directGeometry;if(!0===e.elementsNeedUpdate&&(r=void 0,e.elementsNeedUpdate=!1),void 0===r)return this.fromGeometry(e);r.verticesNeedUpdate=e.verticesNeedUpdate,r.normalsNeedUpdate=e.normalsNeedUpdate,r.colorsNeedUpdate=e.colorsNeedUpdate,r.uvsNeedUpdate=e.uvsNeedUpdate,r.groupsNeedUpdate=e.groupsNeedUpdate,e.verticesNeedUpdate=!1,e.normalsNeedUpdate=!1,e.colorsNeedUpdate=!1,e.uvsNeedUpdate=!1,e.groupsNeedUpdate=!1,e=r}return!0===e.verticesNeedUpdate&&(r=this.attributes.position,void 0!==r&&(r.copyVector3sArray(e.vertices),r.needsUpdate=!0),e.verticesNeedUpdate=!1),!0===e.normalsNeedUpdate&&(r=this.attributes.normal,void 0!==r&&(r.copyVector3sArray(e.normals),r.needsUpdate=!0),e.normalsNeedUpdate=!1),!0===e.colorsNeedUpdate&&(r=this.attributes.color,void 0!==r&&(r.copyColorsArray(e.colors),r.needsUpdate=!0),e.colorsNeedUpdate=!1),e.uvsNeedUpdate&&(r=this.attributes.uv,void 0!==r&&(r.copyVector2sArray(e.uvs),r.needsUpdate=!0),e.uvsNeedUpdate=!1),e.lineDistancesNeedUpdate&&(r=this.attributes.lineDistance,void 0!==r&&(r.copyArray(e.lineDistances),r.needsUpdate=!0),e.lineDistancesNeedUpdate=!1),e.groupsNeedUpdate&&(e.computeGroups(t.geometry),this.groups=e.groups,e.groupsNeedUpdate=!1),this},fromGeometry:function(t){return t.__directGeometry=(new _t).fromGeometry(t),this.fromDirectGeometry(t.__directGeometry)},fromDirectGeometry:function(t){var e=new Float32Array(3*t.vertices.length);this.addAttribute("position",new ht(e,3).copyVector3sArray(t.vertices)),0<t.normals.length&&(e=new Float32Array(3*t.normals.length),this.addAttribute("normal",new ht(e,3).copyVector3sArray(t.normals))),0<t.colors.length&&(e=new Float32Array(3*t.colors.length),this.addAttribute("color",new ht(e,3).copyColorsArray(t.colors))),0<t.uvs.length&&(e=new Float32Array(2*t.uvs.length),this.addAttribute("uv",new ht(e,2).copyVector2sArray(t.uvs))),0<t.uvs2.length&&(e=new Float32Array(2*t.uvs2.length),this.addAttribute("uv2",new ht(e,2).copyVector2sArray(t.uvs2))),0<t.indices.length&&(e=new(65535<t.vertices.length?Uint32Array:Uint16Array)(3*t.indices.length),this.setIndex(new ht(e,1).copyIndicesArray(t.indices))),this.groups=t.groups;for(var r in t.morphTargets){
-for(var e=[],n=t.morphTargets[r],i=0,o=n.length;i<o;i++){var a=n[i],s=new yt(3*a.length,3);e.push(s.copyVector3sArray(a))}this.morphAttributes[r]=e}return 0<t.skinIndices.length&&(r=new yt(4*t.skinIndices.length,4),this.addAttribute("skinIndex",r.copyVector4sArray(t.skinIndices))),0<t.skinWeights.length&&(r=new yt(4*t.skinWeights.length,4),this.addAttribute("skinWeight",r.copyVector4sArray(t.skinWeights))),null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new K);var t=this.attributes.position;void 0!==t?this.boundingBox.setFromBufferAttribute(t):this.boundingBox.makeEmpty(),(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)},computeBoundingSphere:function(){var t=new K,e=new c;return function(){null===this.boundingSphere&&(this.boundingSphere=new Z);var r=this.attributes.position;if(r){var n=this.boundingSphere.center;t.setFromBufferAttribute(r),t.getCenter(n);for(var i=0,o=0,a=r.count;o<a;o++)e.x=r.getX(o),e.y=r.getY(o),e.z=r.getZ(o),i=Math.max(i,n.distanceToSquared(e));this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}}(),computeFaceNormals:function(){},computeVertexNormals:function(){var t=this.index,e=this.attributes,r=this.groups;if(e.position){var n=e.position.array;if(void 0===e.normal)this.addAttribute("normal",new ht(new Float32Array(n.length),3));else for(var i=e.normal.array,o=0,a=i.length;o<a;o++)i[o]=0;var s,u,h,i=e.normal.array,l=new c,p=new c,f=new c,d=new c,m=new c;if(t){t=t.array,0===r.length&&this.addGroup(0,t.length);for(var v=0,g=r.length;v<g;++v)for(o=r[v],a=o.start,s=o.count,o=a,a+=s;o<a;o+=3)s=3*t[o+0],u=3*t[o+1],h=3*t[o+2],l.fromArray(n,s),p.fromArray(n,u),f.fromArray(n,h),d.subVectors(f,p),m.subVectors(l,p),d.cross(m),i[s]+=d.x,i[s+1]+=d.y,i[s+2]+=d.z,i[u]+=d.x,i[u+1]+=d.y,i[u+2]+=d.z,i[h]+=d.x,i[h+1]+=d.y,i[h+2]+=d.z}else for(o=0,a=n.length;o<a;o+=9)l.fromArray(n,o),p.fromArray(n,o+3),f.fromArray(n,o+6),d.subVectors(f,p),m.subVectors(l,p),d.cross(m),i[o]=d.x,i[o+1]=d.y,i[o+2]=d.z,i[o+3]=d.x,i[o+4]=d.y,i[o+5]=d.z,i[o+6]=d.x,i[o+7]=d.y,i[o+8]=d.z;this.normalizeNormals(),e.normal.needsUpdate=!0}},merge:function(t,e){if(!1!==(t&&t.isBufferGeometry)){void 0===e&&(e=0);var r,n=this.attributes;for(r in n)if(void 0!==t.attributes[r])for(var i=n[r].array,o=t.attributes[r],a=o.array,s=0,o=o.itemSize*e;s<a.length;s++,o++)i[o]=a[s];return this}console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.",t)},normalizeNormals:function(){for(var t,e,r,n=this.attributes.normal.array,i=0,o=n.length;i<o;i+=3)t=n[i],e=n[i+1],r=n[i+2],t=1/Math.sqrt(t*t+e*e+r*r),n[i]*=t,n[i+1]*=t,n[i+2]*=t},toNonIndexed:function(){if(null===this.index)return console.warn("THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed."),this;var t,e=new wt,r=this.index.array,n=this.attributes;for(t in n){for(var i,o=n[t],a=o.array,o=o.itemSize,s=new a.constructor(r.length*o),c=0,u=0,h=r.length;u<h;u++){i=r[u]*o;for(var l=0;l<o;l++)s[c++]=a[i++]}e.addAttribute(t,new ht(s,o))}return e},toJSON:function(){var t={metadata:{version:4.4,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,""!==this.name&&(t.name=this.name),void 0!==this.parameters){var e,r=this.parameters;for(e in r)void 0!==r[e]&&(t[e]=r[e]);return t}t.data={attributes:{}};var n=this.index;null!==n&&(r=Array.prototype.slice.call(n.array),t.data.index={type:n.array.constructor.name,array:r}),n=this.attributes;for(e in n){var i=n[e],r=Array.prototype.slice.call(i.array);t.data.attributes[e]={itemSize:i.itemSize,type:i.array.constructor.name,array:r,normalized:i.normalized}}return e=this.groups,0<e.length&&(t.data.groups=JSON.parse(JSON.stringify(e))),e=this.boundingSphere,null!==e&&(t.data.boundingSphere={center:e.center.toArray(),radius:e.radius}),t},clone:function(){return(new wt).copy(this)},copy:function(t){var e=t.index;null!==e&&this.setIndex(e.clone());var r,e=t.attributes;for(r in e)this.addAttribute(r,e[r].clone());for(t=t.groups,r=0,e=t.length;r<e;r++){var n=t[r];this.addGroup(n.start,n.count,n.materialIndex)}return this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),wt.MaxIndex=65535,St.prototype=Object.assign(Object.create(ot.prototype),{constructor:St,isMesh:!0,setDrawMode:function(t){this.drawMode=t},copy:function(t){return ot.prototype.copy.call(this,t),this.drawMode=t.drawMode,this},updateMorphTargets:function(){var t=this.geometry.morphTargets;if(void 0!==t&&0<t.length){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(var e=0,r=t.length;e<r;e++)this.morphTargetInfluences.push(0),this.morphTargetDictionary[t[e].name]=e}},raycast:function(){function t(t,e,r,n,i,o,a){return st.barycoordFromPoint(t,e,r,n,y),i.multiplyScalar(y.x),o.multiplyScalar(y.y),a.multiplyScalar(y.z),i.add(o).add(a),i.clone()}function e(t,e,r,n,i,o,a){var s=t.material;return null===(1===s.side?r.intersectTriangle(o,i,n,!0,a):r.intersectTriangle(n,i,o,2!==s.side,a))?null:(_.copy(a),_.applyMatrix4(t.matrixWorld),r=e.ray.origin.distanceTo(_),r<e.near||r>e.far?null:{distance:r,point:_.clone(),object:t})}function n(r,n,i,o,a,c,u,p){return s.fromArray(o,3*c),h.fromArray(o,3*u),l.fromArray(o,3*p),(r=e(r,n,i,s,h,l,b))&&(a&&(m.fromArray(a,2*c),v.fromArray(a,2*u),g.fromArray(a,2*p),r.uv=t(b,s,h,l,m,v,g)),r.face=new ct(c,u,p,st.normal(s,h,l)),r.faceIndex=c),r}var i=new u,o=new rt,a=new Z,s=new c,h=new c,l=new c,p=new c,f=new c,d=new c,m=new r,v=new r,g=new r,y=new c,b=new c,_=new c;return function(r,c){var u=this.geometry,y=this.material,_=this.matrixWorld;if(void 0!==y&&(null===u.boundingSphere&&u.computeBoundingSphere(),a.copy(u.boundingSphere),a.applyMatrix4(_),!1!==r.ray.intersectsSphere(a)&&(i.getInverse(_),o.copy(r.ray).applyMatrix4(i),null===u.boundingBox||!1!==o.intersectsBox(u.boundingBox)))){var x,w;if(u.isBufferGeometry){var S,M,y=u.index,_=u.attributes,u=_.position.array;if(void 0!==_.uv&&(x=_.uv.array),null!==y)for(var _=y.array,E=0,T=_.length;E<T;E+=3)y=_[E],S=_[E+1],M=_[E+2],(w=n(this,r,o,u,x,y,S,M))&&(w.faceIndex=Math.floor(E/3),c.push(w));else for(E=0,T=u.length;E<T;E+=9)y=E/3,S=y+1,M=y+2,(w=n(this,r,o,u,x,y,S,M))&&(w.index=y,c.push(w))}else if(u.isGeometry){var C,O,_=y&&y.isMultiMaterial,E=!0===_?y.materials:null,T=u.vertices;S=u.faces,M=u.faceVertexUvs[0],0<M.length&&(x=M);for(var P=0,A=S.length;P<A;P++){var j=S[P];if(void 0!==(w=!0===_?E[j.materialIndex]:y)){if(M=T[j.a],C=T[j.b],O=T[j.c],!0===w.morphTargets){w=u.morphTargets;var R=this.morphTargetInfluences;s.set(0,0,0),h.set(0,0,0),l.set(0,0,0);for(var L=0,N=w.length;L<N;L++){var I=R[L];if(0!==I){var D=w[L].vertices;s.addScaledVector(p.subVectors(D[j.a],M),I),h.addScaledVector(f.subVectors(D[j.b],C),I),l.addScaledVector(d.subVectors(D[j.c],O),I)}}s.add(M),h.add(C),l.add(O),M=s,C=h,O=l}(w=e(this,r,o,M,C,O,b))&&(x&&(R=x[P],m.copy(R[0]),v.copy(R[1]),g.copy(R[2]),w.uv=t(b,M,C,O,m,v,g)),w.face=j,w.faceIndex=P,c.push(w))}}}}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),Mt.prototype=Object.create(wt.prototype),Mt.prototype.constructor=Mt,Et.prototype=Object.create(wt.prototype),Et.prototype.constructor=Et,Tt.prototype=Object.create(ot.prototype),Tt.prototype.constructor=Tt,Tt.prototype.isCamera=!0,Tt.prototype.getWorldDirection=function(){var t=new s;return function(e){return e=e||new c,this.getWorldQuaternion(t),e.set(0,0,-1).applyQuaternion(t)}}(),Tt.prototype.lookAt=function(){var t=new u;return function(e){t.lookAt(this.position,e,this.up),this.quaternion.setFromRotationMatrix(t)}}(),Tt.prototype.clone=function(){return(new this.constructor).copy(this)},Tt.prototype.copy=function(t){return ot.prototype.copy.call(this,t),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this},Ct.prototype=Object.assign(Object.create(Tt.prototype),{constructor:Ct,isPerspectiveCamera:!0,copy:function(t){return Tt.prototype.copy.call(this,t),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this},setFocalLength:function(t){t=.5*this.getFilmHeight()/t,this.fov=2*ri.RAD2DEG*Math.atan(t),this.updateProjectionMatrix()},getFocalLength:function(){var t=Math.tan(.5*ri.DEG2RAD*this.fov);return.5*this.getFilmHeight()/t},getEffectiveFOV:function(){return 2*ri.RAD2DEG*Math.atan(Math.tan(.5*ri.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(t,e,r,n,i,o){this.aspect=t/e,this.view={fullWidth:t,fullHeight:e,offsetX:r,offsetY:n,width:i,height:o},this.updateProjectionMatrix()},clearViewOffset:function(){this.view=null,this.updateProjectionMatrix()},updateProjectionMatrix:function(){var t=this.near,e=t*Math.tan(.5*ri.DEG2RAD*this.fov)/this.zoom,r=2*e,n=this.aspect*r,i=-.5*n,o=this.view;if(null!==o)var a=o.fullWidth,s=o.fullHeight,i=i+o.offsetX*n/a,e=e-o.offsetY*r/s,n=o.width/a*n,r=o.height/s*r;o=this.filmOffset,0!==o&&(i+=t*o/this.getFilmWidth()),this.projectionMatrix.makeFrustum(i,i+n,e-r,e,t,this.far)},toJSON:function(t){return t=ot.prototype.toJSON.call(this,t),t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,null!==this.view&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}),Ot.prototype=Object.assign(Object.create(Tt.prototype),{constructor:Ot,isOrthographicCamera:!0,copy:function(t){return Tt.prototype.copy.call(this,t),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this},setViewOffset:function(t,e,r,n,i,o){this.view={fullWidth:t,fullHeight:e,offsetX:r,offsetY:n,width:i,height:o},this.updateProjectionMatrix()},clearViewOffset:function(){this.view=null,this.updateProjectionMatrix()},updateProjectionMatrix:function(){var t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),r=(this.right+this.left)/2,n=(this.top+this.bottom)/2,i=r-t,r=r+t,t=n+e,e=n-e;if(null!==this.view)var r=this.zoom/(this.view.width/this.view.fullWidth),e=this.zoom/(this.view.height/this.view.fullHeight),o=(this.right-this.left)/this.view.width,n=(this.top-this.bottom)/this.view.height,i=i+this.view.offsetX/r*o,r=i+this.view.width/r*o,t=t-this.view.offsetY/e*n,e=t-this.view.height/e*n;this.projectionMatrix.makeOrthographic(i,r,t,e,this.near,this.far)},toJSON:function(t){return t=ot.prototype.toJSON.call(this,t),t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,null!==this.view&&(t.object.view=Object.assign({},this.view)),t}});var gi=0;ee.prototype.isFogExp2=!0,ee.prototype.clone=function(){return new ee(this.color.getHex(),this.density)},ee.prototype.toJSON=function(t){return{type:"FogExp2",color:this.color.getHex(),density:this.density}},re.prototype.isFog=!0,re.prototype.clone=function(){return new re(this.color.getHex(),this.near,this.far)},re.prototype.toJSON=function(t){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}},ne.prototype=Object.create(ot.prototype),ne.prototype.constructor=ne,ne.prototype.copy=function(t,e){return ot.prototype.copy.call(this,t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this},ne.prototype.toJSON=function(t){var e=ot.prototype.toJSON.call(this,t);return null!==this.background&&(e.object.background=this.background.toJSON(t)),null!==this.fog&&(e.object.fog=this.fog.toJSON()),e},ie.prototype=Object.assign(Object.create(ot.prototype),{constructor:ie,isLensFlare:!0,copy:function(t){ot.prototype.copy.call(this,t),this.positionScreen.copy(t.positionScreen),this.customUpdateCallback=t.customUpdateCallback;for(var e=0,r=t.lensFlares.length;e<r;e++)this.lensFlares.push(t.lensFlares[e]);return this},add:function(t,e,r,n,i,o){void 0===e&&(e=-1),void 0===r&&(r=0),void 0===o&&(o=1),void 0===i&&(i=new $(16777215)),void 0===n&&(n=1),r=Math.min(r,Math.max(0,r)),this.lensFlares.push({texture:t,size:e,distance:r,x:0,y:0,z:0,scale:1,rotation:0,opacity:o,color:i,blending:n})},updateLensFlares:function(){var t,e,r=this.lensFlares.length,n=2*-this.positionScreen.x,i=2*-this.positionScreen.y;for(t=0;t<r;t++)e=this.lensFlares[t],e.x=this.positionScreen.x+n*e.distance,e.y=this.positionScreen.y+i*e.distance,e.wantedRotation=e.x*Math.PI*.25,e.rotation+=.25*(e.wantedRotation-e.rotation)}}),oe.prototype=Object.create(q.prototype),oe.prototype.constructor=oe,oe.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.rotation=t.rotation,this},ae.prototype=Object.assign(Object.create(ot.prototype),{constructor:ae,isSprite:!0,raycast:function(){var t=new c;return function(e,r){t.setFromMatrixPosition(this.matrixWorld);var n=e.ray.distanceSqToPoint(t);n>this.scale.x*this.scale.y/4||r.push({distance:Math.sqrt(n),point:this.position,face:null,object:this})}}(),clone:function(){return new this.constructor(this.material).copy(this)}}),se.prototype=Object.assign(Object.create(ot.prototype),{constructor:se,copy:function(t){ot.prototype.copy.call(this,t,!1),t=t.levels;for(var e=0,r=t.length;e<r;e++){var n=t[e];this.addLevel(n.object.clone(),n.distance)}return this},addLevel:function(t,e){void 0===e&&(e=0),e=Math.abs(e);for(var r=this.levels,n=0;n<r.length&&!(e<r[n].distance);n++);r.splice(n,0,{distance:e,object:t}),this.add(t)},getObjectForDistance:function(t){for(var e=this.levels,r=1,n=e.length;r<n&&!(t<e[r].distance);r++);return e[r-1].object},raycast:function(){var t=new c;return function(e,r){t.setFromMatrixPosition(this.matrixWorld);var n=e.ray.origin.distanceTo(t);this.getObjectForDistance(n).raycast(e,r)}}(),update:function(){var t=new c,e=new c;return function(r){var n=this.levels;if(1<n.length){t.setFromMatrixPosition(r.matrixWorld),e.setFromMatrixPosition(this.matrixWorld),r=t.distanceTo(e),n[0].object.visible=!0;for(var i=1,o=n.length;i<o&&r>=n[i].distance;i++)n[i-1].object.visible=!1,n[i].object.visible=!0;for(;i<o;i++)n[i].object.visible=!1}}}(),toJSON:function(t){t=ot.prototype.toJSON.call(this,t),t.object.levels=[];for(var e=this.levels,r=0,n=e.length;r<n;r++){var i=e[r];t.object.levels.push({object:i.object.uuid,distance:i.distance})}return t}}),Object.assign(ce.prototype,{calculateInverses:function(){this.boneInverses=[];for(var t=0,e=this.bones.length;t<e;t++){var r=new u;this.bones[t]&&r.getInverse(this.bones[t].matrixWorld),this.boneInverses.push(r)}},pose:function(){for(var t,e=0,r=this.bones.length;e<r;e++)(t=this.bones[e])&&t.matrixWorld.getInverse(this.boneInverses[e]);for(e=0,r=this.bones.length;e<r;e++)(t=this.bones[e])&&(t.parent&&t.parent.isBone?(t.matrix.getInverse(t.parent.matrixWorld),t.matrix.multiply(t.matrixWorld)):t.matrix.copy(t.matrixWorld),t.matrix.decompose(t.position,t.quaternion,t.scale))},update:function(){var t=new u;return function(){for(var e=0,r=this.bones.length;e<r;e++)t.multiplyMatrices(this.bones[e]?this.bones[e].matrixWorld:this.identityMatrix,this.boneInverses[e]),t.toArray(this.boneMatrices,16*e);this.useVertexTexture&&(this.boneTexture.needsUpdate=!0)}}(),clone:function(){return new ce(this.bones,this.boneInverses,this.useVertexTexture)}}),ue.prototype=Object.assign(Object.create(ot.prototype),{constructor:ue,isBone:!0}),he.prototype=Object.assign(Object.create(St.prototype),{constructor:he,isSkinnedMesh:!0,bind:function(t,e){this.skeleton=t,void 0===e&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),e=this.matrixWorld),this.bindMatrix.copy(e),this.bindMatrixInverse.getInverse(e)},pose:function(){this.skeleton.pose()},normalizeSkinWeights:function(){if(this.geometry&&this.geometry.isGeometry)for(var t=0;t<this.geometry.skinWeights.length;t++){var e=this.geometry.skinWeights[t],r=1/e.lengthManhattan();1/0!==r?e.multiplyScalar(r):e.set(1,0,0,0)}else if(this.geometry&&this.geometry.isBufferGeometry)for(var e=new i,n=this.geometry.attributes.skinWeight,t=0;t<n.count;t++)e.x=n.getX(t),e.y=n.getY(t),e.z=n.getZ(t),e.w=n.getW(t),r=1/e.lengthManhattan(),1/0!==r?e.multiplyScalar(r):e.set(1,0,0,0),n.setXYZW(t,e.x,e.y,e.z,e.w)},updateMatrixWorld:function(t){St.prototype.updateMatrixWorld.call(this,!0),"attached"===this.bindMode?this.bindMatrixInverse.getInverse(this.matrixWorld):"detached"===this.bindMode?this.bindMatrixInverse.getInverse(this.bindMatrix):console.warn("THREE.SkinnedMesh unrecognized bindMode: "+this.bindMode)},clone:function(){return new this.constructor(this.geometry,this.material,this.skeleton.useVertexTexture).copy(this)}}),le.prototype=Object.create(q.prototype),le.prototype.constructor=le,le.prototype.isLineBasicMaterial=!0,le.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.color.copy(t.color),this.linewidth=t.linewidth,this.linecap=t.linecap,this.linejoin=t.linejoin,this},pe.prototype=Object.assign(Object.create(ot.prototype),{constructor:pe,isLine:!0,raycast:function(){var t=new u,e=new rt,r=new Z;return function(n,i){var o=n.linePrecision,o=o*o,a=this.geometry,s=this.matrixWorld;if(null===a.boundingSphere&&a.computeBoundingSphere(),r.copy(a.boundingSphere),r.applyMatrix4(s),!1!==n.ray.intersectsSphere(r)){t.getInverse(s),e.copy(n.ray).applyMatrix4(t);var u=new c,h=new c,s=new c,l=new c,p=this&&this.isLineSegments?2:1;if(a.isBufferGeometry){var f=a.index,d=a.attributes.position.array;if(null!==f)for(var f=f.array,a=0,m=f.length-1;a<m;a+=p){var v=f[a+1];u.fromArray(d,3*f[a]),h.fromArray(d,3*v),v=e.distanceSqToSegment(u,h,l,s),v>o||(l.applyMatrix4(this.matrixWorld),(v=n.ray.origin.distanceTo(l))<n.near||v>n.far||i.push({distance:v,point:s.clone().applyMatrix4(this.matrixWorld),index:a,face:null,faceIndex:null,object:this}))}else for(a=0,m=d.length/3-1;a<m;a+=p)u.fromArray(d,3*a),h.fromArray(d,3*a+3),(v=e.distanceSqToSegment(u,h,l,s))>o||(l.applyMatrix4(this.matrixWorld),(v=n.ray.origin.distanceTo(l))<n.near||v>n.far||i.push({distance:v,point:s.clone().applyMatrix4(this.matrixWorld),index:a,face:null,faceIndex:null,object:this}))}else if(a.isGeometry)for(u=a.vertices,h=u.length,a=0;a<h-1;a+=p)(v=e.distanceSqToSegment(u[a],u[a+1],l,s))>o||(l.applyMatrix4(this.matrixWorld),(v=n.ray.origin.distanceTo(l))<n.near||v>n.far||i.push({distance:v,point:s.clone().applyMatrix4(this.matrixWorld),index:a,face:null,faceIndex:null,object:this}))}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),fe.prototype=Object.assign(Object.create(pe.prototype),{constructor:fe,isLineSegments:!0}),de.prototype=Object.create(q.prototype),de.prototype.constructor=de,de.prototype.isPointsMaterial=!0,de.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.size=t.size,this.sizeAttenuation=t.sizeAttenuation,this},me.prototype=Object.assign(Object.create(ot.prototype),{constructor:me,isPoints:!0,raycast:function(){var t=new u,e=new rt,r=new Z;return function(n,i){function o(t,r){var o=e.distanceSqToPoint(t);if(o<l){var s=e.closestPointToPoint(t);s.applyMatrix4(u);var c=n.ray.origin.distanceTo(s);c<n.near||c>n.far||i.push({distance:c,distanceToRay:Math.sqrt(o),point:s.clone(),index:r,face:null,object:a})}}var a=this,s=this.geometry,u=this.matrixWorld,h=n.params.Points.threshold;if(null===s.boundingSphere&&s.computeBoundingSphere(),r.copy(s.boundingSphere),r.applyMatrix4(u),!1!==n.ray.intersectsSphere(r)){t.getInverse(u),e.copy(n.ray).applyMatrix4(t);var h=h/((this.scale.x+this.scale.y+this.scale.z)/3),l=h*h,h=new c;if(s.isBufferGeometry){var p=s.index,s=s.attributes.position.array;if(null!==p)for(var f=p.array,p=0,d=f.length;p<d;p++){var m=f[p];h.fromArray(s,3*m),o(h,m)}else for(p=0,f=s.length/3;p<f;p++)h.fromArray(s,3*p),o(h,p)}else for(h=s.vertices,p=0,f=h.length;p<f;p++)o(h[p],p)}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),ve.prototype=Object.assign(Object.create(ot.prototype),{constructor:ve}),ge.prototype=Object.create(n.prototype),ge.prototype.constructor=ge,ye.prototype=Object.create(n.prototype),ye.prototype.constructor=ye,ye.prototype.isCompressedTexture=!0,be.prototype=Object.create(n.prototype),be.prototype.constructor=be,_e.prototype=Object.create(n.prototype),_e.prototype.constructor=_e,_e.prototype.isDepthTexture=!0,xe.prototype=Object.create(wt.prototype),xe.prototype.constructor=xe,we.prototype=Object.create(wt.prototype),we.prototype.constructor=we,Se.prototype=Object.create(xt.prototype),Se.prototype.constructor=Se,Me.prototype=Object.create(wt.prototype),Me.prototype.constructor=Me,Ee.prototype=Object.create(Me.prototype),Ee.prototype.constructor=Ee,Te.prototype=Object.create(xt.prototype),Te.prototype.constructor=Te,Ce.prototype=Object.create(Me.prototype),Ce.prototype.constructor=Ce,Oe.prototype=Object.create(xt.prototype),Oe.prototype.constructor=Oe,Pe.prototype=Object.create(Me.prototype),Pe.prototype.constructor=Pe,Ae.prototype=Object.create(xt.prototype),Ae.prototype.constructor=Ae,je.prototype=Object.create(Me.prototype),je.prototype.constructor=je,Re.prototype=Object.create(xt.prototype),Re.prototype.constructor=Re,Le.prototype=Object.create(xt.prototype),Le.prototype.constructor=Le,Ne.prototype=Object.create(wt.prototype),Ne.prototype.constructor=Ne,Ie.prototype=Object.create(xt.prototype),Ie.prototype.constructor=Ie,De.prototype=Object.create(wt.prototype),De.prototype.constructor=De,ke.prototype=Object.create(xt.prototype),ke.prototype.constructor=ke,Fe.prototype=Object.create(wt.prototype),Fe.prototype.constructor=Fe,Ue.prototype=Object.create(xt.prototype),Ue.prototype.constructor=Ue;var yi={area:function(t){for(var e=t.length,r=0,n=e-1,i=0;i<e;n=i++)r+=t[n].x*t[i].y-t[i].x*t[n].y;return.5*r},triangulate:function(){return function(t,e){var r=t.length;if(3>r)return null;var n,i,o,a=[],s=[],c=[];if(0<yi.area(t))for(i=0;i<r;i++)s[i]=i;else for(i=0;i<r;i++)s[i]=r-1-i;var u=2*r;for(i=r-1;2<r;){if(0>=u--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}n=i,r<=n&&(n=0),i=n+1,r<=i&&(i=0),o=i+1,r<=o&&(o=0);var h;t:{var l,p,f,d,m,v,g,y;if(l=t[s[n]].x,p=t[s[n]].y,f=t[s[i]].x,d=t[s[i]].y,m=t[s[o]].x,v=t[s[o]].y,0>=(f-l)*(v-p)-(d-p)*(m-l))h=!1;else{var b,_,x,w,S,M,E,T,C,O;for(b=m-f,_=v-d,x=l-m,w=p-v,S=f-l,M=d-p,h=0;h<r;h++)if(g=t[s[h]].x,y=t[s[h]].y,!(g===l&&y===p||g===f&&y===d||g===m&&y===v)&&(E=g-l,T=y-p,C=g-f,O=y-d,g-=m,y-=v,C=b*O-_*C,E=S*T-M*E,T=x*y-w*g,C>=-Number.EPSILON&&T>=-Number.EPSILON&&E>=-Number.EPSILON)){h=!1;break t}h=!0}}if(h){for(a.push([t[s[n]],t[s[i]],t[s[o]]]),c.push([s[n],s[i],s[o]]),n=i,o=i+1;o<r;n++,o++)s[n]=s[o];r--,u=2*r}}return e?c:a}}(),triangulateShape:function(t,e){function r(t){var e=t.length;2<e&&t[e-1].equals(t[0])&&t.pop()}function n(t,e,r){return t.x!==e.x?t.x<e.x?t.x<=r.x&&r.x<=e.x:e.x<=r.x&&r.x<=t.x:t.y<e.y?t.y<=r.y&&r.y<=e.y:e.y<=r.y&&r.y<=t.y}function i(t,e,r,i,o){var a=e.x-t.x,s=e.y-t.y,c=i.x-r.x,u=i.y-r.y,h=t.x-r.x,l=t.y-r.y,p=s*c-a*u,f=s*h-a*l;if(Math.abs(p)>Number.EPSILON){if(0<p){if(0>f||f>p)return[];if(0>(c=u*h-c*l)||c>p)return[]}else{if(0<f||f<p)return[];if(0<(c=u*h-c*l)||c<p)return[]}return 0===c?!o||0!==f&&f!==p?[t]:[]:c===p?!o||0!==f&&f!==p?[e]:[]:0===f?[r]:f===p?[i]:(o=c/p,[{x:t.x+o*a,y:t.y+o*s}])}return 0!==f||u*h!=c*l?[]:(s=0===a&&0===s,c=0===c&&0===u,s&&c?t.x!==r.x||t.y!==r.y?[]:[t]:s?n(r,i,t)?[t]:[]:c?n(t,e,r)?[r]:[]:(0!==a?(t.x<e.x?(a=t,c=t.x,s=e,t=e.x):(a=e,c=e.x,s=t,t=t.x),r.x<i.x?(e=r,p=r.x,u=i,r=i.x):(e=i,p=i.x,u=r,r=r.x)):(t.y<e.y?(a=t,c=t.y,s=e,t=e.y):(a=e,c=e.y,s=t,t=t.y),r.y<i.y?(e=r,p=r.y,u=i,r=i.y):(e=i,p=i.y,u=r,r=r.y)),c<=p?t<p?[]:t===p?o?[]:[e]:t<=r?[e,s]:[e,u]:c>r?[]:c===r?o?[]:[a]:t<=r?[a,s]:[a,u]))}function o(t,e,r,n){var i=e.x-t.x,o=e.y-t.y;e=r.x-t.x,r=r.y-t.y;var a=n.x-t.x;return n=n.y-t.y,t=i*r-o*e,i=i*n-o*a,Math.abs(t)>Number.EPSILON?(e=a*r-n*e,0<t?0<=i&&0<=e:0<=i||0<=e):0<i}r(t),e.forEach(r);var a,s,c,u,h,l={};for(c=t.concat(),a=0,s=e.length;a<s;a++)Array.prototype.push.apply(c,e[a]);for(a=0,s=c.length;a<s;a++)h=c[a].x+":"+c[a].y,void 0!==l[h]&&console.warn("THREE.ShapeUtils: Duplicate point",h,a),l[h]=a;a=function(t,e){var r,n,a,s,c,u,h,l,p,f=t.concat(),d=[],m=[],v=0;for(n=e.length;v<n;v++)d.push(v);h=0;for(var g=2*d.length;0<d.length;){if(0>--g){console.log("Infinite Loop! Holes left:"+d.length+", Probably Hole outside Shape!");break}for(a=h;a<f.length;a++){for(s=f[a],n=-1,v=0;v<d.length;v++)if(c=d[v],u=s.x+":"+s.y+":"+c,void 0===m[u]){for(r=e[c],l=0;l<r.length;l++)if(c=r[l],function(t,e){var n=f.length-1,i=t-1;0>i&&(i=n);var a=t+1;return a>n&&(a=0),!!(n=o(f[t],f[i],f[a],r[e]))&&(n=r.length-1,i=e-1,0>i&&(i=n),a=e+1,a>n&&(a=0),!!(n=o(r[e],r[i],r[a],f[t])))}(a,l)&&!function(t,e){var r,n;for(r=0;r<f.length;r++)if(n=r+1,n%=f.length,n=i(t,e,f[r],f[n],!0),0<n.length)return!0;return!1}(s,c)&&!function(t,r){var n,o,a,s;for(n=0;n<d.length;n++)for(o=e[d[n]],a=0;a<o.length;a++)if(s=a+1,s%=o.length,s=i(t,r,o[a],o[s],!0),0<s.length)return!0;return!1}(s,c)){n=l,d.splice(v,1),h=f.slice(0,a+1),c=f.slice(a),l=r.slice(n),p=r.slice(0,n+1),f=h.concat(l).concat(p).concat(c),h=a;break}if(0<=n)break;m[u]=!0}if(0<=n)break}}return f}(t,e);var p=yi.triangulate(a,!1);for(a=0,s=p.length;a<s;a++)for(u=p[a],c=0;3>c;c++)h=u[c].x+":"+u[c].y,void 0!==(h=l[h])&&(u[c]=h);return p.concat()},isClockWise:function(t){return 0>yi.area(t)},b2:function(){return function(t,e,r,n){var i=1-t;return i*i*e+2*(1-t)*t*r+t*t*n}}(),b3:function(){return function(t,e,r,n,i){var o=1-t,a=1-t;return o*o*o*e+3*a*a*t*r+3*(1-t)*t*t*n+t*t*t*i}}()};Be.prototype=Object.create(xt.prototype),Be.prototype.constructor=Be,Be.prototype.addShapeList=function(t,e){for(var r=t.length,n=0;n<r;n++)this.addShape(t[n],e)},Be.prototype.addShape=function(t,e){function n(t,e,r){return e||console.error("THREE.ExtrudeGeometry: vec does not exist"),e.clone().multiplyScalar(r).add(t)}function i(t,e,n){var i,o,a;o=t.x-e.x,a=t.y-e.y,i=n.x-t.x;var s=n.y-t.y,c=o*o+a*a;if(Math.abs(o*s-a*i)>Number.EPSILON){var u=Math.sqrt(c),h=Math.sqrt(i*i+s*s),c=e.x-a/u;if(e=e.y+o/u,s=((n.x-s/h-c)*s-(n.y+i/h-e)*i)/(o*s-a*i),i=c+o*s-t.x,o=e+a*s-t.y,2>=(a=i*i+o*o))return new r(i,o);a=Math.sqrt(a/2)}else t=!1,o>Number.EPSILON?i>Number.EPSILON&&(t=!0):o<-Number.EPSILON?i<-Number.EPSILON&&(t=!0):Math.sign(a)===Math.sign(s)&&(t=!0),t?(i=-a,a=Math.sqrt(c)):(i=o,o=a,a=Math.sqrt(c/2));return new r(i/a,o/a)}function o(t,e){var r,n;for(B=t.length;0<=--B;){r=B,n=B-1,0>n&&(n=t.length-1);var i,o=_+2*g;for(i=0;i<o;i++){var a=F*i,s=F*(i+1),c=e+r+a,a=e+n+a,u=e+n+s,s=e+r+s,c=c+O,a=a+O,u=u+O,s=s+O;C.faces.push(new ct(c,a,s,null,null,1)),C.faces.push(new ct(a,u,s,null,null,1)),c=S.generateSideWallUV(C,c,a,u,s),C.faceVertexUvs[0].push([c[0],c[1],c[3]]),C.faceVertexUvs[0].push([c[1],c[2],c[3]])}}}function a(t,e,r){C.vertices.push(new c(t,e,r))}function s(t,e,r){t+=O,e+=O,r+=O,C.faces.push(new ct(t,e,r,null,null,0)),t=S.generateTopUV(C,t,e,r),C.faceVertexUvs[0].push(t)}var u,h,l,p,f,d=void 0!==e.amount?e.amount:100,m=void 0!==e.bevelThickness?e.bevelThickness:6,v=void 0!==e.bevelSize?e.bevelSize:m-2,g=void 0!==e.bevelSegments?e.bevelSegments:3,y=void 0===e.bevelEnabled||e.bevelEnabled,b=void 0!==e.curveSegments?e.curveSegments:12,_=void 0!==e.steps?e.steps:1,x=e.extrudePath,w=!1,S=void 0!==e.UVGenerator?e.UVGenerator:Be.WorldUVGenerator;x&&(u=x.getSpacedPoints(_),w=!0,y=!1,h=void 0!==e.frames?e.frames:x.computeFrenetFrames(_,!1),l=new c,p=new c,f=new c),y||(v=m=g=0);var M,E,T,C=this,O=this.vertices.length,x=t.extractPoints(b),b=x.shape,P=x.holes;if(x=!yi.isClockWise(b)){for(b=b.reverse(),E=0,T=P.length;E<T;E++)M=P[E],yi.isClockWise(M)&&(P[E]=M.reverse());x=!1}var A=yi.triangulateShape(b,P),j=b;for(E=0,T=P.length;E<T;E++)M=P[E],b=b.concat(M);var R,L,N,I,D,k,F=b.length,U=A.length,x=[],B=0;for(N=j.length,R=N-1,L=B+1;B<N;B++,R++,L++)R===N&&(R=0),L===N&&(L=0),x[B]=i(j[B],j[R],j[L]);var z,$=[],G=x.concat();for(E=0,T=P.length;E<T;E++){for(M=P[E],z=[],B=0,N=M.length,R=N-1,L=B+1;B<N;B++,R++,L++)R===N&&(R=0),L===N&&(L=0),z[B]=i(M[B],M[R],M[L]);$.push(z),G=G.concat(z)}for(R=0;R<g;R++){for(N=R/g,I=m*Math.cos(N*Math.PI/2),L=v*Math.sin(N*Math.PI/2),B=0,N=j.length;B<N;B++)D=n(j[B],x[B],L),a(D.x,D.y,-I);for(E=0,T=P.length;E<T;E++)for(M=P[E],z=$[E],B=0,N=M.length;B<N;B++)D=n(M[B],z[B],L),a(D.x,D.y,-I)}for(L=v,B=0;B<F;B++)D=y?n(b[B],G[B],L):b[B],w?(p.copy(h.normals[0]).multiplyScalar(D.x),l.copy(h.binormals[0]).multiplyScalar(D.y),f.copy(u[0]).add(p).add(l),a(f.x,f.y,f.z)):a(D.x,D.y,0);for(N=1;N<=_;N++)for(B=0;B<F;B++)D=y?n(b[B],G[B],L):b[B],w?(p.copy(h.normals[N]).multiplyScalar(D.x),l.copy(h.binormals[N]).multiplyScalar(D.y),f.copy(u[N]).add(p).add(l),a(f.x,f.y,f.z)):a(D.x,D.y,d/_*N);for(R=g-1;0<=R;R--){for(N=R/g,I=m*Math.cos(N*Math.PI/2),L=v*Math.sin(N*Math.PI/2),B=0,N=j.length;B<N;B++)D=n(j[B],x[B],L),a(D.x,D.y,d+I);for(E=0,T=P.length;E<T;E++)for(M=P[E],z=$[E],B=0,N=M.length;B<N;B++)D=n(M[B],z[B],L),w?a(D.x,D.y+u[_-1].y,u[_-1].x+I):a(D.x,D.y,d+I)}!function(){if(y){var t=0*F;for(B=0;B<U;B++)k=A[B],s(k[2]+t,k[1]+t,k[0]+t);for(t=F*(_+2*g),B=0;B<U;B++)k=A[B],s(k[0]+t,k[1]+t,k[2]+t)}else{for(B=0;B<U;B++)k=A[B],s(k[2],k[1],k[0]);for(B=0;B<U;B++)k=A[B],s(k[0]+F*_,k[1]+F*_,k[2]+F*_)}}(),function(){var t=0;for(o(j,t),t+=j.length,E=0,T=P.length;E<T;E++)M=P[E],o(M,t),t+=M.length}()},Be.WorldUVGenerator={generateTopUV:function(t,e,n,i){return t=t.vertices,e=t[e],n=t[n],i=t[i],[new r(e.x,e.y),new r(n.x,n.y),new r(i.x,i.y)]},generateSideWallUV:function(t,e,n,i,o){return t=t.vertices,e=t[e],n=t[n],i=t[i],o=t[o],.01>Math.abs(e.y-n.y)?[new r(e.x,1-e.z),new r(n.x,1-n.z),new r(i.x,1-i.z),new r(o.x,1-o.z)]:[new r(e.y,1-e.z),new r(n.y,1-n.z),new r(i.y,1-i.z),new r(o.y,1-o.z)]}},ze.prototype=Object.create(Be.prototype),ze.prototype.constructor=ze,$e.prototype=Object.create(wt.prototype),$e.prototype.constructor=$e,Ge.prototype=Object.create(xt.prototype),Ge.prototype.constructor=Ge,Ve.prototype=Object.create(wt.prototype),Ve.prototype.constructor=Ve,He.prototype=Object.create(xt.prototype),He.prototype.constructor=He,We.prototype=Object.create(xt.prototype),We.prototype.constructor=We,qe.prototype=Object.create(wt.prototype),qe.prototype.constructor=qe,Xe.prototype=Object.create(xt.prototype),Xe.prototype.constructor=Xe,Ye.prototype=Object.create(wt.prototype),Ye.prototype.constructor=Ye,Ke.prototype=Object.create(xt.prototype),Ke.prototype.constructor=Ke,Ze.prototype=Object.create(wt.prototype),Ze.prototype.constructor=Ze,Je.prototype=Object.create(wt.prototype),Je.prototype.constructor=Je,Qe.prototype=Object.create(xt.prototype),Qe.prototype.constructor=Qe,tr.prototype=Object.create(Qe.prototype),tr.prototype.constructor=tr,er.prototype=Object.create(Je.prototype),er.prototype.constructor=er,rr.prototype=Object.create(wt.prototype),rr.prototype.constructor=rr,nr.prototype=Object.create(xt.prototype),nr.prototype.constructor=nr,ir.prototype=Object.create(xt.prototype),ir.prototype.constructor=ir;var bi=Object.freeze({WireframeGeometry:xe,ParametricGeometry:Se,ParametricBufferGeometry:we,TetrahedronGeometry:Te,TetrahedronBufferGeometry:Ee,OctahedronGeometry:Oe,OctahedronBufferGeometry:Ce,IcosahedronGeometry:Ae,IcosahedronBufferGeometry:Pe,
-DodecahedronGeometry:Re,DodecahedronBufferGeometry:je,PolyhedronGeometry:Le,PolyhedronBufferGeometry:Me,TubeGeometry:Ie,TubeBufferGeometry:Ne,TorusKnotGeometry:ke,TorusKnotBufferGeometry:De,TorusGeometry:Ue,TorusBufferGeometry:Fe,TextGeometry:ze,SphereBufferGeometry:$e,SphereGeometry:Ge,RingGeometry:He,RingBufferGeometry:Ve,PlaneBufferGeometry:Et,PlaneGeometry:We,LatheGeometry:Xe,LatheBufferGeometry:qe,ShapeGeometry:Ke,ShapeBufferGeometry:Ye,ExtrudeGeometry:Be,EdgesGeometry:Ze,ConeGeometry:tr,ConeBufferGeometry:er,CylinderGeometry:Qe,CylinderBufferGeometry:Je,CircleBufferGeometry:rr,CircleGeometry:nr,BoxBufferGeometry:Mt,BoxGeometry:ir});or.prototype=Object.create(X.prototype),or.prototype.constructor=or,or.prototype.isShadowMaterial=!0,ar.prototype=Object.create(X.prototype),ar.prototype.constructor=ar,ar.prototype.isRawShaderMaterial=!0,sr.prototype={constructor:sr,isMultiMaterial:!0,toJSON:function(t){for(var e={metadata:{version:4.2,type:"material",generator:"MaterialExporter"},uuid:this.uuid,type:this.type,materials:[]},r=this.materials,n=0,i=r.length;n<i;n++){var o=r[n].toJSON(t);delete o.metadata,e.materials.push(o)}return e.visible=this.visible,e},clone:function(){for(var t=new this.constructor,e=0;e<this.materials.length;e++)t.materials.push(this.materials[e].clone());return t.visible=this.visible,t}},cr.prototype=Object.create(q.prototype),cr.prototype.constructor=cr,cr.prototype.isMeshStandardMaterial=!0,cr.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.defines={STANDARD:""},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapIntensity=t.envMapIntensity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},ur.prototype=Object.create(cr.prototype),ur.prototype.constructor=ur,ur.prototype.isMeshPhysicalMaterial=!0,ur.prototype.copy=function(t){return cr.prototype.copy.call(this,t),this.defines={PHYSICAL:""},this.reflectivity=t.reflectivity,this.clearCoat=t.clearCoat,this.clearCoatRoughness=t.clearCoatRoughness,this},hr.prototype=Object.create(q.prototype),hr.prototype.constructor=hr,hr.prototype.isMeshPhongMaterial=!0,hr.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},lr.prototype=Object.create(hr.prototype),lr.prototype.constructor=lr,lr.prototype.isMeshToonMaterial=!0,lr.prototype.copy=function(t){return hr.prototype.copy.call(this,t),this.gradientMap=t.gradientMap,this},pr.prototype=Object.create(q.prototype),pr.prototype.constructor=pr,pr.prototype.isMeshNormalMaterial=!0,pr.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},fr.prototype=Object.create(q.prototype),fr.prototype.constructor=fr,fr.prototype.isMeshLambertMaterial=!0,fr.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},dr.prototype=Object.create(q.prototype),dr.prototype.constructor=dr,dr.prototype.isLineDashedMaterial=!0,dr.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.color.copy(t.color),this.linewidth=t.linewidth,this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this};var _i=Object.freeze({ShadowMaterial:or,SpriteMaterial:oe,RawShaderMaterial:ar,ShaderMaterial:X,PointsMaterial:de,MultiMaterial:sr,MeshPhysicalMaterial:ur,MeshStandardMaterial:cr,MeshPhongMaterial:hr,MeshToonMaterial:lr,MeshNormalMaterial:pr,MeshLambertMaterial:fr,MeshDepthMaterial:Y,MeshBasicMaterial:ut,LineDashedMaterial:dr,LineBasicMaterial:le,Material:q}),xi={enabled:!1,files:{},add:function(t,e){!1!==this.enabled&&(this.files[t]=e)},get:function(t){if(!1!==this.enabled)return this.files[t]},remove:function(t){delete this.files[t]},clear:function(){this.files={}}},wi=new mr;Object.assign(vr.prototype,{load:function(t,e,r,n){void 0===t&&(t=""),void 0!==this.path&&(t=this.path+t);var i=this,o=xi.get(t);if(void 0!==o)return i.manager.itemStart(t),setTimeout(function(){e&&e(o),i.manager.itemEnd(t)},0),o;var a=t.match(/^data:(.*?)(;base64)?,(.*)$/);if(a){var s=a[1],c=!!a[2],a=a[3],a=window.decodeURIComponent(a);c&&(a=window.atob(a));try{var u,h=(this.responseType||"").toLowerCase();switch(h){case"arraybuffer":case"blob":u=new ArrayBuffer(a.length);for(var l=new Uint8Array(u),c=0;c<a.length;c++)l[c]=a.charCodeAt(c);"blob"===h&&(u=new Blob([u],{type:s}));break;case"document":u=(new DOMParser).parseFromString(a,s);break;case"json":u=JSON.parse(a);break;default:u=a}window.setTimeout(function(){e&&e(u),i.manager.itemEnd(t)},0)}catch(e){window.setTimeout(function(){n&&n(e),i.manager.itemError(t)},0)}}else{var p=new XMLHttpRequest;p.open("GET",t,!0),p.addEventListener("load",function(r){var o=r.target.response;xi.add(t,o),200===this.status?(e&&e(o),i.manager.itemEnd(t)):0===this.status?(console.warn("THREE.FileLoader: HTTP Status 0 received."),e&&e(o),i.manager.itemEnd(t)):(n&&n(r),i.manager.itemError(t))},!1),void 0!==r&&p.addEventListener("progress",function(t){r(t)},!1),p.addEventListener("error",function(e){n&&n(e),i.manager.itemError(t)},!1),void 0!==this.responseType&&(p.responseType=this.responseType),void 0!==this.withCredentials&&(p.withCredentials=this.withCredentials),p.overrideMimeType&&p.overrideMimeType(void 0!==this.mimeType?this.mimeType:"text/plain"),p.send(null)}return i.manager.itemStart(t),p},setPath:function(t){return this.path=t,this},setResponseType:function(t){return this.responseType=t,this},setWithCredentials:function(t){return this.withCredentials=t,this},setMimeType:function(t){return this.mimeType=t,this}}),Object.assign(gr.prototype,{load:function(t,e,r,n){var i=this,o=[],a=new ye;a.image=o;var s=new vr(this.manager);if(s.setPath(this.path),s.setResponseType("arraybuffer"),Array.isArray(t))for(var c=0,u=0,h=t.length;u<h;++u)!function(u){s.load(t[u],function(t){t=i._parser(t,!0),o[u]={width:t.width,height:t.height,format:t.format,mipmaps:t.mipmaps},6==(c+=1)&&(1===t.mipmapCount&&(a.minFilter=1006),a.format=t.format,a.needsUpdate=!0,e&&e(a))},r,n)}(u);else s.load(t,function(t){if(t=i._parser(t,!0),t.isCubemap)for(var r=t.mipmaps.length/t.mipmapCount,n=0;n<r;n++){o[n]={mipmaps:[]};for(var s=0;s<t.mipmapCount;s++)o[n].mipmaps.push(t.mipmaps[n*t.mipmapCount+s]),o[n].format=t.format,o[n].width=t.width,o[n].height=t.height}else a.image.width=t.width,a.image.height=t.height,a.mipmaps=t.mipmaps;1===t.mipmapCount&&(a.minFilter=1006),a.format=t.format,a.needsUpdate=!0,e&&e(a)},r,n);return a},setPath:function(t){return this.path=t,this}}),Object.assign(yr.prototype,{load:function(t,e,r,n){var i=this,o=new G,a=new vr(this.manager);return a.setResponseType("arraybuffer"),a.load(t,function(t){(t=i._parser(t))&&(void 0!==t.image?o.image=t.image:void 0!==t.data&&(o.image.width=t.width,o.image.height=t.height,o.image.data=t.data),o.wrapS=void 0!==t.wrapS?t.wrapS:1001,o.wrapT=void 0!==t.wrapT?t.wrapT:1001,o.magFilter=void 0!==t.magFilter?t.magFilter:1006,o.minFilter=void 0!==t.minFilter?t.minFilter:1008,o.anisotropy=void 0!==t.anisotropy?t.anisotropy:1,void 0!==t.format&&(o.format=t.format),void 0!==t.type&&(o.type=t.type),void 0!==t.mipmaps&&(o.mipmaps=t.mipmaps),1===t.mipmapCount&&(o.minFilter=1006),o.needsUpdate=!0,e&&e(o,t))},r,n),o}}),Object.assign(br.prototype,{load:function(t,e,r,n){var i=this,o=document.createElementNS("http://www.w3.org/1999/xhtml","img");if(o.onload=function(){o.onload=null,URL.revokeObjectURL(o.src),e&&e(o),i.manager.itemEnd(t)},o.onerror=n,0===t.indexOf("data:"))o.src=t;else if(void 0!==this.crossOrigin)o.crossOrigin=this.crossOrigin,o.src=t;else{var a=new vr;a.setPath(this.path),a.setResponseType("blob"),a.setWithCredentials(this.withCredentials),a.load(t,function(t){o.src=URL.createObjectURL(t)},r,n)}return i.manager.itemStart(t),o},setCrossOrigin:function(t){return this.crossOrigin=t,this},setWithCredentials:function(t){return this.withCredentials=t,this},setPath:function(t){return this.path=t,this}}),Object.assign(_r.prototype,{load:function(t,e,r,n){var i=new h,o=new br(this.manager);o.setCrossOrigin(this.crossOrigin),o.setPath(this.path);var a=0;for(r=0;r<t.length;++r)!function(r){o.load(t[r],function(t){i.images[r]=t,6==++a&&(i.needsUpdate=!0,e&&e(i))},void 0,n)}(r);return i},setCrossOrigin:function(t){return this.crossOrigin=t,this},setPath:function(t){return this.path=t,this}}),Object.assign(xr.prototype,{load:function(t,e,r,i){var o=new n,a=new br(this.manager);return a.setCrossOrigin(this.crossOrigin),a.setWithCredentials(this.withCredentials),a.setPath(this.path),a.load(t,function(r){var n=0<t.search(/\.(jpg|jpeg)$/)||0===t.search(/^data\:image\/jpeg/);o.format=n?1022:1023,o.image=r,o.needsUpdate=!0,void 0!==e&&e(o)},r,i),o},setCrossOrigin:function(t){return this.crossOrigin=t,this},setWithCredentials:function(t){return this.withCredentials=t,this},setPath:function(t){return this.path=t,this}}),wr.prototype=Object.assign(Object.create(ot.prototype),{constructor:wr,isLight:!0,copy:function(t){return ot.prototype.copy.call(this,t),this.color.copy(t.color),this.intensity=t.intensity,this},toJSON:function(t){return t=ot.prototype.toJSON.call(this,t),t.object.color=this.color.getHex(),t.object.intensity=this.intensity,void 0!==this.groundColor&&(t.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(t.object.distance=this.distance),void 0!==this.angle&&(t.object.angle=this.angle),void 0!==this.decay&&(t.object.decay=this.decay),void 0!==this.penumbra&&(t.object.penumbra=this.penumbra),void 0!==this.shadow&&(t.object.shadow=this.shadow.toJSON()),t}}),Sr.prototype=Object.assign(Object.create(wr.prototype),{constructor:Sr,isHemisphereLight:!0,copy:function(t){return wr.prototype.copy.call(this,t),this.groundColor.copy(t.groundColor),this}}),Object.assign(Mr.prototype,{copy:function(t){return this.camera=t.camera.clone(),this.bias=t.bias,this.radius=t.radius,this.mapSize.copy(t.mapSize),this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var t={};return 0!==this.bias&&(t.bias=this.bias),1!==this.radius&&(t.radius=this.radius),512===this.mapSize.x&&512===this.mapSize.y||(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}),Er.prototype=Object.assign(Object.create(Mr.prototype),{constructor:Er,isSpotLightShadow:!0,update:function(t){var e=2*ri.RAD2DEG*t.angle,r=this.mapSize.width/this.mapSize.height;t=t.distance||500;var n=this.camera;e===n.fov&&r===n.aspect&&t===n.far||(n.fov=e,n.aspect=r,n.far=t,n.updateProjectionMatrix())}}),Tr.prototype=Object.assign(Object.create(wr.prototype),{constructor:Tr,isSpotLight:!0,copy:function(t){return wr.prototype.copy.call(this,t),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}),Cr.prototype=Object.assign(Object.create(wr.prototype),{constructor:Cr,isPointLight:!0,copy:function(t){return wr.prototype.copy.call(this,t),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}),Or.prototype=Object.assign(Object.create(Mr.prototype),{constructor:Or}),Pr.prototype=Object.assign(Object.create(wr.prototype),{constructor:Pr,isDirectionalLight:!0,copy:function(t){return wr.prototype.copy.call(this,t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}),Ar.prototype=Object.assign(Object.create(wr.prototype),{constructor:Ar,isAmbientLight:!0});var Si={arraySlice:function(t,e,r){return Si.isTypedArray(t)?new t.constructor(t.subarray(e,r)):t.slice(e,r)},convertArray:function(t,e,r){return!t||!r&&t.constructor===e?t:"number"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)},getKeyframeOrder:function(t){for(var e=t.length,r=Array(e),n=0;n!==e;++n)r[n]=n;return r.sort(function(e,r){return t[e]-t[r]}),r},sortedArray:function(t,e,r){for(var n=t.length,i=new t.constructor(n),o=0,a=0;a!==n;++o)for(var s=r[o]*e,c=0;c!==e;++c)i[a++]=t[s+c];return i},flattenJSON:function(t,e,r,n){for(var i=1,o=t[0];void 0!==o&&void 0===o[n];)o=t[i++];if(void 0!==o){var a=o[n];if(void 0!==a)if(Array.isArray(a))do{a=o[n],void 0!==a&&(e.push(o.time),r.push.apply(r,a)),o=t[i++]}while(void 0!==o);else if(void 0!==a.toArray)do{a=o[n],void 0!==a&&(e.push(o.time),a.toArray(r,r.length)),o=t[i++]}while(void 0!==o);else do{a=o[n],void 0!==a&&(e.push(o.time),r.push(a)),o=t[i++]}while(void 0!==o)}}};jr.prototype={constructor:jr,evaluate:function(t){var e=this.parameterPositions,r=this._cachedIndex,n=e[r],i=e[r-1];t:{e:{r:{n:if(!(t<n)){for(var o=r+2;;){if(void 0===n){if(t<i)break n;return this._cachedIndex=r=e.length,this.afterEnd_(r-1,t,i)}if(r===o)break;if(i=n,n=e[++r],t<n)break e}n=e.length;break r}if(t>=i)break t;for(o=e[1],t<o&&(r=2,i=o),o=r-2;;){if(void 0===i)return this._cachedIndex=0,this.beforeStart_(0,t,n);if(r===o)break;if(n=i,i=e[--r-1],t>=i)break e}n=r,r=0}for(;r<n;)i=r+n>>>1,t<e[i]?n=i:r=i+1;if(n=e[r],void 0===(i=e[r-1]))return this._cachedIndex=0,this.beforeStart_(0,t,n);if(void 0===n)return this._cachedIndex=r=e.length,this.afterEnd_(r-1,i,t)}this._cachedIndex=r,this.intervalChanged_(r,i,n)}return this.interpolate_(r,i,t,n)},settings:null,DefaultSettings_:{},getSettings_:function(){return this.settings||this.DefaultSettings_},copySampleValue_:function(t){var e=this.resultBuffer,r=this.sampleValues,n=this.valueSize;t*=n;for(var i=0;i!==n;++i)e[i]=r[t+i];return e},interpolate_:function(t,e,r,n){throw Error("call to abstract method")},intervalChanged_:function(t,e,r){}},Object.assign(jr.prototype,{beforeStart_:jr.prototype.copySampleValue_,afterEnd_:jr.prototype.copySampleValue_}),Rr.prototype=Object.assign(Object.create(jr.prototype),{constructor:Rr,DefaultSettings_:{endingStart:2400,endingEnd:2400},intervalChanged_:function(t,e,r){var n=this.parameterPositions,i=t-2,o=t+1,a=n[i],s=n[o];if(void 0===a)switch(this.getSettings_().endingStart){case 2401:i=t,a=2*e-r;break;case 2402:i=n.length-2,a=e+n[i]-n[i+1];break;default:i=t,a=r}if(void 0===s)switch(this.getSettings_().endingEnd){case 2401:o=t,s=2*r-e;break;case 2402:o=1,s=r+n[1]-n[0];break;default:o=t-1,s=e}t=.5*(r-e),n=this.valueSize,this._weightPrev=t/(e-a),this._weightNext=t/(s-r),this._offsetPrev=i*n,this._offsetNext=o*n},interpolate_:function(t,e,r,n){var i=this.resultBuffer,o=this.sampleValues,a=this.valueSize;t*=a;var s=t-a,c=this._offsetPrev,u=this._offsetNext,h=this._weightPrev,l=this._weightNext,p=(r-e)/(n-e);for(r=p*p,n=r*p,e=-h*n+2*h*r-h*p,h=(1+h)*n+(-1.5-2*h)*r+(-.5+h)*p+1,p=(-1-l)*n+(1.5+l)*r+.5*p,l=l*n-l*r,r=0;r!==a;++r)i[r]=e*o[c+r]+h*o[s+r]+p*o[t+r]+l*o[u+r];return i}}),Lr.prototype=Object.assign(Object.create(jr.prototype),{constructor:Lr,interpolate_:function(t,e,r,n){var i=this.resultBuffer,o=this.sampleValues,a=this.valueSize;t*=a;var s=t-a;for(e=(r-e)/(n-e),r=1-e,n=0;n!==a;++n)i[n]=o[s+n]*r+o[t+n]*e;return i}}),Nr.prototype=Object.assign(Object.create(jr.prototype),{constructor:Nr,interpolate_:function(t,e,r,n){return this.copySampleValue_(t-1)}});var Mi;Mi={TimeBufferType:Float32Array,ValueBufferType:Float32Array,DefaultInterpolation:2301,InterpolantFactoryMethodDiscrete:function(t){return new Nr(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodLinear:function(t){return new Lr(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:function(t){return new Rr(this.times,this.values,this.getValueSize(),t)},setInterpolation:function(t){var e;switch(t){case 2300:e=this.InterpolantFactoryMethodDiscrete;break;case 2301:e=this.InterpolantFactoryMethodLinear;break;case 2302:e=this.InterpolantFactoryMethodSmooth}if(void 0===e){if(e="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name,void 0===this.createInterpolant){if(t===this.DefaultInterpolation)throw Error(e);this.setInterpolation(this.DefaultInterpolation)}console.warn(e)}else this.createInterpolant=e},getInterpolation:function(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return 2300;case this.InterpolantFactoryMethodLinear:return 2301;case this.InterpolantFactoryMethodSmooth:return 2302}},getValueSize:function(){return this.values.length/this.times.length},shift:function(t){if(0!==t)for(var e=this.times,r=0,n=e.length;r!==n;++r)e[r]+=t;return this},scale:function(t){if(1!==t)for(var e=this.times,r=0,n=e.length;r!==n;++r)e[r]*=t;return this},trim:function(t,e){for(var r=this.times,n=r.length,i=0,o=n-1;i!==n&&r[i]<t;)++i;for(;-1!==o&&r[o]>e;)--o;return++o,0===i&&o===n||(i>=o&&(o=Math.max(o,1),i=o-1),n=this.getValueSize(),this.times=Si.arraySlice(r,i,o),this.values=Si.arraySlice(this.values,i*n,o*n)),this},validate:function(){var t=!0,e=this.getValueSize();0!=e-Math.floor(e)&&(console.error("invalid value size in track",this),t=!1);var r=this.times,e=this.values,n=r.length;0===n&&(console.error("track is empty",this),t=!1);for(var i=null,o=0;o!==n;o++){var a=r[o];if("number"==typeof a&&isNaN(a)){console.error("time is not a valid number",this,o,a),t=!1;break}if(null!==i&&i>a){console.error("out of order keys",this,o,a,i),t=!1;break}i=a}if(void 0!==e&&Si.isTypedArray(e))for(o=0,r=e.length;o!==r;++o)if(n=e[o],isNaN(n)){console.error("value is not a valid number",this,o,n),t=!1;break}return t},optimize:function(){for(var t=this.times,e=this.values,r=this.getValueSize(),n=2302===this.getInterpolation(),i=1,o=t.length-1,a=1;a<o;++a){var s=!1,c=t[a];if(c!==t[a+1]&&(1!==a||c!==c[0]))if(n)s=!0;else for(var u=a*r,h=u-r,l=u+r,c=0;c!==r;++c){var p=e[u+c];if(p!==e[h+c]||p!==e[l+c]){s=!0;break}}if(s){if(a!==i)for(t[i]=t[a],s=a*r,u=i*r,c=0;c!==r;++c)e[u+c]=e[s+c];++i}}if(0<o){for(t[i]=t[o],s=o*r,u=i*r,c=0;c!==r;++c)e[u+c]=e[s+c];++i}return i!==t.length&&(this.times=Si.arraySlice(t,0,i),this.values=Si.arraySlice(e,0,i*r)),this}},Dr.prototype=Object.assign(Object.create(Mi),{constructor:Dr,ValueTypeName:"vector"}),kr.prototype=Object.assign(Object.create(jr.prototype),{constructor:kr,interpolate_:function(t,e,r,n){var i=this.resultBuffer,o=this.sampleValues,a=this.valueSize;for(t*=a,e=(r-e)/(n-e),r=t+a;t!==r;t+=4)s.slerpFlat(i,0,o,t-a,o,t,e);return i}}),Fr.prototype=Object.assign(Object.create(Mi),{constructor:Fr,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(t){return new kr(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),Ur.prototype=Object.assign(Object.create(Mi),{constructor:Ur,ValueTypeName:"number"}),Br.prototype=Object.assign(Object.create(Mi),{constructor:Br,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),zr.prototype=Object.assign(Object.create(Mi),{constructor:zr,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),$r.prototype=Object.assign(Object.create(Mi),{constructor:$r,ValueTypeName:"color"}),Gr.prototype=Mi,Mi.constructor=Gr,Object.assign(Gr,{parse:function(t){if(void 0===t.type)throw Error("track type undefined, can not parse");var e=Gr._getTrackTypeForValueTypeName(t.type);if(void 0===t.times){var r=[],n=[];Si.flattenJSON(t.keys,r,n,"value"),t.times=r,t.values=n}return void 0!==e.parse?e.parse(t):new e(t.name,t.times,t.values,t.interpolation)},toJSON:function(t){var e=t.constructor;if(void 0!==e.toJSON)e=e.toJSON(t);else{var e={name:t.name,times:Si.convertArray(t.times,Array),values:Si.convertArray(t.values,Array)},r=t.getInterpolation();r!==t.DefaultInterpolation&&(e.interpolation=r)}return e.type=t.ValueTypeName,e},_getTrackTypeForValueTypeName:function(t){switch(t.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return Ur;case"vector":case"vector2":case"vector3":case"vector4":return Dr;case"color":return $r;case"quaternion":return Fr;case"bool":case"boolean":return zr;case"string":return Br}throw Error("Unsupported typeName: "+t)}}),Vr.prototype={constructor:Vr,resetDuration:function(){for(var t=0,e=0,r=this.tracks.length;e!==r;++e)var n=this.tracks[e],t=Math.max(t,n.times[n.times.length-1]);this.duration=t},trim:function(){for(var t=0;t<this.tracks.length;t++)this.tracks[t].trim(0,this.duration);return this},optimize:function(){for(var t=0;t<this.tracks.length;t++)this.tracks[t].optimize();return this}},Object.assign(Vr,{parse:function(t){for(var e=[],r=t.tracks,n=1/(t.fps||1),i=0,o=r.length;i!==o;++i)e.push(Gr.parse(r[i]).scale(n));return new Vr(t.name,t.duration,e)},toJSON:function(t){var e=[],r=t.tracks;t={name:t.name,duration:t.duration,tracks:e};for(var n=0,i=r.length;n!==i;++n)e.push(Gr.toJSON(r[n]));return t},CreateFromMorphTargetSequence:function(t,e,r,n){for(var i=e.length,o=[],a=0;a<i;a++){var s=[],c=[];s.push((a+i-1)%i,a,(a+1)%i),c.push(0,1,0);var u=Si.getKeyframeOrder(s),s=Si.sortedArray(s,1,u),c=Si.sortedArray(c,1,u);n||0!==s[0]||(s.push(i),c.push(c[0])),o.push(new Ur(".morphTargetInfluences["+e[a].name+"]",s,c).scale(1/r))}return new Vr(t,-1,o)},findByName:function(t,e){var r=t;Array.isArray(t)||(r=t.geometry&&t.geometry.animations||t.animations);for(var n=0;n<r.length;n++)if(r[n].name===e)return r[n];return null},CreateClipsFromMorphTargetSequences:function(t,e,r){for(var n={},i=0,o=t.length;i<o;i++){var a=t[i],s=a.name.match(/^([\w-]*?)([\d]+)$/);if(s&&1<s.length){var c=s[1];(s=n[c])||(n[c]=s=[]),s.push(a)}}t=[];for(c in n)t.push(Vr.CreateFromMorphTargetSequence(c,n[c],e,r));return t},parseAnimation:function(t,e){if(!t)return console.error("  no animation in JSONLoader data"),null;for(var r=function(t,e,r,n,i){if(0!==r.length){var o=[],a=[];Si.flattenJSON(r,o,a,n),0!==o.length&&i.push(new t(e,o,a))}},n=[],i=t.name||"default",o=t.length||-1,a=t.fps||30,s=t.hierarchy||[],c=0;c<s.length;c++){var u=s[c].keys;if(u&&0!==u.length)if(u[0].morphTargets){for(var o={},h=0;h<u.length;h++)if(u[h].morphTargets)for(var l=0;l<u[h].morphTargets.length;l++)o[u[h].morphTargets[l]]=-1;for(var p in o){for(var f=[],d=[],l=0;l!==u[h].morphTargets.length;++l){var m=u[h];f.push(m.time),d.push(m.morphTarget===p?1:0)}n.push(new Ur(".morphTargetInfluence["+p+"]",f,d))}o=o.length*(a||1)}else h=".bones["+e[c].name+"]",r(Dr,h+".position",u,"pos",n),r(Fr,h+".quaternion",u,"rot",n),r(Dr,h+".scale",u,"scl",n)}return 0===n.length?null:new Vr(i,o,n)}}),Object.assign(Hr.prototype,{load:function(t,e,r,n){var i=this;new vr(i.manager).load(t,function(t){e(i.parse(JSON.parse(t)))},r,n)},setTextures:function(t){this.textures=t},parse:function(t){function e(t){return void 0===n[t]&&console.warn("THREE.MaterialLoader: Undefined texture",t),n[t]}var n=this.textures,i=new _i[t.type];if(void 0!==t.uuid&&(i.uuid=t.uuid),void 0!==t.name&&(i.name=t.name),void 0!==t.color&&i.color.setHex(t.color),void 0!==t.roughness&&(i.roughness=t.roughness),void 0!==t.metalness&&(i.metalness=t.metalness),void 0!==t.emissive&&i.emissive.setHex(t.emissive),void 0!==t.specular&&i.specular.setHex(t.specular),void 0!==t.shininess&&(i.shininess=t.shininess),void 0!==t.clearCoat&&(i.clearCoat=t.clearCoat),void 0!==t.clearCoatRoughness&&(i.clearCoatRoughness=t.clearCoatRoughness),void 0!==t.uniforms&&(i.uniforms=t.uniforms),void 0!==t.vertexShader&&(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(i.fragmentShader=t.fragmentShader),void 0!==t.vertexColors&&(i.vertexColors=t.vertexColors),void 0!==t.fog&&(i.fog=t.fog),void 0!==t.shading&&(i.shading=t.shading),void 0!==t.blending&&(i.blending=t.blending),void 0!==t.side&&(i.side=t.side),void 0!==t.opacity&&(i.opacity=t.opacity),void 0!==t.transparent&&(i.transparent=t.transparent),void 0!==t.alphaTest&&(i.alphaTest=t.alphaTest),void 0!==t.depthTest&&(i.depthTest=t.depthTest),void 0!==t.depthWrite&&(i.depthWrite=t.depthWrite),void 0!==t.colorWrite&&(i.colorWrite=t.colorWrite),void 0!==t.wireframe&&(i.wireframe=t.wireframe),void 0!==t.wireframeLinewidth&&(i.wireframeLinewidth=t.wireframeLinewidth),void 0!==t.wireframeLinecap&&(i.wireframeLinecap=t.wireframeLinecap),void 0!==t.wireframeLinejoin&&(i.wireframeLinejoin=t.wireframeLinejoin),void 0!==t.skinning&&(i.skinning=t.skinning),void 0!==t.morphTargets&&(i.morphTargets=t.morphTargets),void 0!==t.size&&(i.size=t.size),void 0!==t.sizeAttenuation&&(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(i.map=e(t.map)),void 0!==t.alphaMap&&(i.alphaMap=e(t.alphaMap),i.transparent=!0),void 0!==t.bumpMap&&(i.bumpMap=e(t.bumpMap)),void 0!==t.bumpScale&&(i.bumpScale=t.bumpScale),void 0!==t.normalMap&&(i.normalMap=e(t.normalMap)),void 0!==t.normalScale){var o=t.normalScale;!1===Array.isArray(o)&&(o=[o,o]),i.normalScale=(new r).fromArray(o)}if(void 0!==t.displacementMap&&(i.displacementMap=e(t.displacementMap)),void 0!==t.displacementScale&&(i.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(i.roughnessMap=e(t.roughnessMap)),void 0!==t.metalnessMap&&(i.metalnessMap=e(t.metalnessMap)),void 0!==t.emissiveMap&&(i.emissiveMap=e(t.emissiveMap)),void 0!==t.emissiveIntensity&&(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(i.specularMap=e(t.specularMap)),void 0!==t.envMap&&(i.envMap=e(t.envMap)),void 0!==t.reflectivity&&(i.reflectivity=t.reflectivity),void 0!==t.lightMap&&(i.lightMap=e(t.lightMap)),void 0!==t.lightMapIntensity&&(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(i.aoMap=e(t.aoMap)),void 0!==t.aoMapIntensity&&(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(i.gradientMap=e(t.gradientMap)),void 0!==t.materials)for(var o=0,a=t.materials.length;o<a;o++)i.materials.push(this.parse(t.materials[o]));return i}}),Object.assign(Wr.prototype,{load:function(t,e,r,n){var i=this;new vr(i.manager).load(t,function(t){e(i.parse(JSON.parse(t)))},r,n)},parse:function(t){var e=new wt,r=t.data.index,n={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};void 0!==r&&(r=new n[r.type](r.array),e.setIndex(new ht(r,1)));var i,o=t.data.attributes;for(i in o){var a=o[i],r=new n[a.type](a.array);e.addAttribute(i,new ht(r,a.itemSize,a.normalized))}if(void 0!==(n=t.data.groups||t.data.drawcalls||t.data.offsets))for(i=0,r=n.length;i!==r;++i)o=n[i],e.addGroup(o.start,o.count,o.materialIndex);return t=t.data.boundingSphere,void 0!==t&&(n=new c,void 0!==t.center&&n.fromArray(t.center),e.boundingSphere=new Z(n,t.radius)),e}}),qr.prototype={constructor:qr,crossOrigin:void 0,extractUrlBase:function(t){return t=t.split("/"),1===t.length?"./":(t.pop(),t.join("/")+"/")},initMaterials:function(t,e,r){for(var n=[],i=0;i<t.length;++i)n[i]=this.createMaterial(t[i],e,r);return n},createMaterial:function(){var t,e,r;return function(n,i,o){function a(t,r,n,a,s){t=i+t;var u=qr.Handlers.get(t);return null!==u?t=u.load(t):(e.setCrossOrigin(o),t=e.load(t)),void 0!==r&&(t.repeat.fromArray(r),1!==r[0]&&(t.wrapS=1e3),1!==r[1]&&(t.wrapT=1e3)),void 0!==n&&t.offset.fromArray(n),void 0!==a&&("repeat"===a[0]&&(t.wrapS=1e3),"mirror"===a[0]&&(t.wrapS=1002),"repeat"===a[1]&&(t.wrapT=1e3),"mirror"===a[1]&&(t.wrapT=1002)),void 0!==s&&(t.anisotropy=s),r=ri.generateUUID(),c[r]=t,r}void 0===t&&(t=new $),void 0===e&&(e=new xr),void 0===r&&(r=new Hr);var s,c={},u={uuid:ri.generateUUID(),type:"MeshLambertMaterial"};for(s in n){var h=n[s];switch(s){case"DbgColor":case"DbgIndex":case"opticalDensity":case"illumination":break;case"DbgName":u.name=h;break;case"blending":u.blending=Jn[h];break;case"colorAmbient":case"mapAmbient":console.warn("THREE.Loader.createMaterial:",s,"is no longer supported.");break;case"colorDiffuse":u.color=t.fromArray(h).getHex();break;case"colorSpecular":u.specular=t.fromArray(h).getHex();break;case"colorEmissive":u.emissive=t.fromArray(h).getHex();break;case"specularCoef":u.shininess=h;break;case"shading":"basic"===h.toLowerCase()&&(u.type="MeshBasicMaterial"),"phong"===h.toLowerCase()&&(u.type="MeshPhongMaterial"),"standard"===h.toLowerCase()&&(u.type="MeshStandardMaterial");break;case"mapDiffuse":u.map=a(h,n.mapDiffuseRepeat,n.mapDiffuseOffset,n.mapDiffuseWrap,n.mapDiffuseAnisotropy);break;case"mapDiffuseRepeat":case"mapDiffuseOffset":case"mapDiffuseWrap":case"mapDiffuseAnisotropy":break;case"mapEmissive":u.emissiveMap=a(h,n.mapEmissiveRepeat,n.mapEmissiveOffset,n.mapEmissiveWrap,n.mapEmissiveAnisotropy);break;case"mapEmissiveRepeat":case"mapEmissiveOffset":case"mapEmissiveWrap":case"mapEmissiveAnisotropy":break;case"mapLight":u.lightMap=a(h,n.mapLightRepeat,n.mapLightOffset,n.mapLightWrap,n.mapLightAnisotropy);break;case"mapLightRepeat":case"mapLightOffset":case"mapLightWrap":case"mapLightAnisotropy":break;case"mapAO":u.aoMap=a(h,n.mapAORepeat,n.mapAOOffset,n.mapAOWrap,n.mapAOAnisotropy);break;case"mapAORepeat":case"mapAOOffset":case"mapAOWrap":case"mapAOAnisotropy":break;case"mapBump":u.bumpMap=a(h,n.mapBumpRepeat,n.mapBumpOffset,n.mapBumpWrap,n.mapBumpAnisotropy);break;case"mapBumpScale":u.bumpScale=h;break;case"mapBumpRepeat":case"mapBumpOffset":case"mapBumpWrap":case"mapBumpAnisotropy":break;case"mapNormal":u.normalMap=a(h,n.mapNormalRepeat,n.mapNormalOffset,n.mapNormalWrap,n.mapNormalAnisotropy);break;case"mapNormalFactor":
-u.normalScale=[h,h];break;case"mapNormalRepeat":case"mapNormalOffset":case"mapNormalWrap":case"mapNormalAnisotropy":break;case"mapSpecular":u.specularMap=a(h,n.mapSpecularRepeat,n.mapSpecularOffset,n.mapSpecularWrap,n.mapSpecularAnisotropy);break;case"mapSpecularRepeat":case"mapSpecularOffset":case"mapSpecularWrap":case"mapSpecularAnisotropy":break;case"mapMetalness":u.metalnessMap=a(h,n.mapMetalnessRepeat,n.mapMetalnessOffset,n.mapMetalnessWrap,n.mapMetalnessAnisotropy);break;case"mapMetalnessRepeat":case"mapMetalnessOffset":case"mapMetalnessWrap":case"mapMetalnessAnisotropy":break;case"mapRoughness":u.roughnessMap=a(h,n.mapRoughnessRepeat,n.mapRoughnessOffset,n.mapRoughnessWrap,n.mapRoughnessAnisotropy);break;case"mapRoughnessRepeat":case"mapRoughnessOffset":case"mapRoughnessWrap":case"mapRoughnessAnisotropy":break;case"mapAlpha":u.alphaMap=a(h,n.mapAlphaRepeat,n.mapAlphaOffset,n.mapAlphaWrap,n.mapAlphaAnisotropy);break;case"mapAlphaRepeat":case"mapAlphaOffset":case"mapAlphaWrap":case"mapAlphaAnisotropy":break;case"flipSided":u.side=1;break;case"doubleSided":u.side=2;break;case"transparency":console.warn("THREE.Loader.createMaterial: transparency has been renamed to opacity"),u.opacity=h;break;case"depthTest":case"depthWrite":case"colorWrite":case"opacity":case"reflectivity":case"transparent":case"visible":case"wireframe":u[s]=h;break;case"vertexColors":!0===h&&(u.vertexColors=2),"face"===h&&(u.vertexColors=1);break;default:console.error("THREE.Loader.createMaterial: Unsupported",s,h)}}return"MeshBasicMaterial"===u.type&&delete u.emissive,"MeshPhongMaterial"!==u.type&&delete u.specular,1>u.opacity&&(u.transparent=!0),r.setTextures(c),r.parse(u)}}()},qr.Handlers={handlers:[],add:function(t,e){this.handlers.push(t,e)},get:function(t){for(var e=this.handlers,r=0,n=e.length;r<n;r+=2){var i=e[r+1];if(e[r].test(t))return i}return null}},Object.assign(Xr.prototype,{load:function(t,e,r,n){var i=this,o=this.texturePath&&"string"==typeof this.texturePath?this.texturePath:qr.prototype.extractUrlBase(t),a=new vr(this.manager);a.setWithCredentials(this.withCredentials),a.load(t,function(r){r=JSON.parse(r);var n=r.metadata;if(void 0!==n&&void 0!==(n=n.type)){if("object"===n.toLowerCase())return void console.error("THREE.JSONLoader: "+t+" should be loaded with THREE.ObjectLoader instead.");if("scene"===n.toLowerCase())return void console.error("THREE.JSONLoader: "+t+" should be loaded with THREE.SceneLoader instead.")}r=i.parse(r,o),e(r.geometry,r.materials)},r,n)},setTexturePath:function(t){this.texturePath=t},parse:function(t,e){var n=new xt,o=void 0!==t.scale?1/t.scale:1;return function(e){var i,o,a,s,u,h,l,p,f,d,m,v,g,y=t.faces;h=t.vertices;var b=t.normals,_=t.colors,x=0;if(void 0!==t.uvs){for(i=0;i<t.uvs.length;i++)t.uvs[i].length&&x++;for(i=0;i<x;i++)n.faceVertexUvs[i]=[]}for(s=0,u=h.length;s<u;)i=new c,i.x=h[s++]*e,i.y=h[s++]*e,i.z=h[s++]*e,n.vertices.push(i);for(s=0,u=y.length;s<u;)if(e=y[s++],f=1&e,a=2&e,i=8&e,l=16&e,d=32&e,h=64&e,e&=128,f){if(f=new ct,f.a=y[s],f.b=y[s+1],f.c=y[s+3],m=new ct,m.a=y[s+1],m.b=y[s+2],m.c=y[s+3],s+=4,a&&(a=y[s++],f.materialIndex=a,m.materialIndex=a),a=n.faces.length,i)for(i=0;i<x;i++)for(v=t.uvs[i],n.faceVertexUvs[i][a]=[],n.faceVertexUvs[i][a+1]=[],o=0;4>o;o++)p=y[s++],g=v[2*p],p=v[2*p+1],g=new r(g,p),2!==o&&n.faceVertexUvs[i][a].push(g),0!==o&&n.faceVertexUvs[i][a+1].push(g);if(l&&(l=3*y[s++],f.normal.set(b[l++],b[l++],b[l]),m.normal.copy(f.normal)),d)for(i=0;4>i;i++)l=3*y[s++],d=new c(b[l++],b[l++],b[l]),2!==i&&f.vertexNormals.push(d),0!==i&&m.vertexNormals.push(d);if(h&&(h=y[s++],h=_[h],f.color.setHex(h),m.color.setHex(h)),e)for(i=0;4>i;i++)h=y[s++],h=_[h],2!==i&&f.vertexColors.push(new $(h)),0!==i&&m.vertexColors.push(new $(h));n.faces.push(f),n.faces.push(m)}else{if(f=new ct,f.a=y[s++],f.b=y[s++],f.c=y[s++],a&&(a=y[s++],f.materialIndex=a),a=n.faces.length,i)for(i=0;i<x;i++)for(v=t.uvs[i],n.faceVertexUvs[i][a]=[],o=0;3>o;o++)p=y[s++],g=v[2*p],p=v[2*p+1],g=new r(g,p),n.faceVertexUvs[i][a].push(g);if(l&&(l=3*y[s++],f.normal.set(b[l++],b[l++],b[l])),d)for(i=0;3>i;i++)l=3*y[s++],d=new c(b[l++],b[l++],b[l]),f.vertexNormals.push(d);if(h&&(h=y[s++],f.color.setHex(_[h])),e)for(i=0;3>i;i++)h=y[s++],f.vertexColors.push(new $(_[h]));n.faces.push(f)}}(o),function(){var e=void 0!==t.influencesPerVertex?t.influencesPerVertex:2;if(t.skinWeights)for(var r=0,o=t.skinWeights.length;r<o;r+=e)n.skinWeights.push(new i(t.skinWeights[r],1<e?t.skinWeights[r+1]:0,2<e?t.skinWeights[r+2]:0,3<e?t.skinWeights[r+3]:0));if(t.skinIndices)for(r=0,o=t.skinIndices.length;r<o;r+=e)n.skinIndices.push(new i(t.skinIndices[r],1<e?t.skinIndices[r+1]:0,2<e?t.skinIndices[r+2]:0,3<e?t.skinIndices[r+3]:0));n.bones=t.bones,n.bones&&0<n.bones.length&&(n.skinWeights.length!==n.skinIndices.length||n.skinIndices.length!==n.vertices.length)&&console.warn("When skinning, number of vertices ("+n.vertices.length+"), skinIndices ("+n.skinIndices.length+"), and skinWeights ("+n.skinWeights.length+") should match.")}(),function(e){if(void 0!==t.morphTargets)for(var r=0,i=t.morphTargets.length;r<i;r++){n.morphTargets[r]={},n.morphTargets[r].name=t.morphTargets[r].name,n.morphTargets[r].vertices=[];for(var o=n.morphTargets[r].vertices,a=t.morphTargets[r].vertices,s=0,u=a.length;s<u;s+=3){var h=new c;h.x=a[s]*e,h.y=a[s+1]*e,h.z=a[s+2]*e,o.push(h)}}if(void 0!==t.morphColors&&0<t.morphColors.length)for(console.warn('THREE.JSONLoader: "morphColors" no longer supported. Using them as face colors.'),e=n.faces,o=t.morphColors[0].colors,r=0,i=e.length;r<i;r++)e[r].color.fromArray(o,3*r)}(o),function(){var e=[],r=[];void 0!==t.animation&&r.push(t.animation),void 0!==t.animations&&(t.animations.length?r=r.concat(t.animations):r.push(t.animations));for(var i=0;i<r.length;i++){var o=Vr.parseAnimation(r[i],n.bones);o&&e.push(o)}n.morphTargets&&(r=Vr.CreateClipsFromMorphTargetSequences(n.morphTargets,10),e=e.concat(r)),0<e.length&&(n.animations=e)}(),n.computeFaceNormals(),n.computeBoundingSphere(),void 0===t.materials||0===t.materials.length?{geometry:n}:(o=qr.prototype.initMaterials(t.materials,e,this.crossOrigin),{geometry:n,materials:o})}}),Object.assign(Yr.prototype,{load:function(t,e,r,n){""===this.texturePath&&(this.texturePath=t.substring(0,t.lastIndexOf("/")+1));var i=this;new vr(i.manager).load(t,function(r){var n=null;try{n=JSON.parse(r)}catch(e){return void console.error("THREE:ObjectLoader: Can't parse "+t+".",e.message)}r=n.metadata,void 0===r||void 0===r.type||"geometry"===r.type.toLowerCase()?console.error("THREE.ObjectLoader: Can't load "+t+". Use THREE.JSONLoader instead."):i.parse(n,e)},r,n)},setTexturePath:function(t){this.texturePath=t},setCrossOrigin:function(t){this.crossOrigin=t},parse:function(t,e){var r=this.parseGeometries(t.geometries),n=this.parseImages(t.images,function(){void 0!==e&&e(i)}),n=this.parseTextures(t.textures,n),n=this.parseMaterials(t.materials,n),i=this.parseObject(t.object,r,n);return t.animations&&(i.animations=this.parseAnimations(t.animations)),void 0!==t.images&&0!==t.images.length||void 0===e||e(i),i},parseGeometries:function(t){var e={};if(void 0!==t)for(var r=new Xr,n=new Wr,i=0,o=t.length;i<o;i++){var a,s=t[i];switch(s.type){case"PlaneGeometry":case"PlaneBufferGeometry":a=new bi[s.type](s.width,s.height,s.widthSegments,s.heightSegments);break;case"BoxGeometry":case"BoxBufferGeometry":case"CubeGeometry":a=new bi[s.type](s.width,s.height,s.depth,s.widthSegments,s.heightSegments,s.depthSegments);break;case"CircleGeometry":case"CircleBufferGeometry":a=new bi[s.type](s.radius,s.segments,s.thetaStart,s.thetaLength);break;case"CylinderGeometry":case"CylinderBufferGeometry":a=new bi[s.type](s.radiusTop,s.radiusBottom,s.height,s.radialSegments,s.heightSegments,s.openEnded,s.thetaStart,s.thetaLength);break;case"ConeGeometry":case"ConeBufferGeometry":a=new bi[s.type](s.radius,s.height,s.radialSegments,s.heightSegments,s.openEnded,s.thetaStart,s.thetaLength);break;case"SphereGeometry":case"SphereBufferGeometry":a=new bi[s.type](s.radius,s.widthSegments,s.heightSegments,s.phiStart,s.phiLength,s.thetaStart,s.thetaLength);break;case"DodecahedronGeometry":case"IcosahedronGeometry":case"OctahedronGeometry":case"TetrahedronGeometry":a=new bi[s.type](s.radius,s.detail);break;case"RingGeometry":case"RingBufferGeometry":a=new bi[s.type](s.innerRadius,s.outerRadius,s.thetaSegments,s.phiSegments,s.thetaStart,s.thetaLength);break;case"TorusGeometry":case"TorusBufferGeometry":a=new bi[s.type](s.radius,s.tube,s.radialSegments,s.tubularSegments,s.arc);break;case"TorusKnotGeometry":case"TorusKnotBufferGeometry":a=new bi[s.type](s.radius,s.tube,s.tubularSegments,s.radialSegments,s.p,s.q);break;case"LatheGeometry":case"LatheBufferGeometry":a=new bi[s.type](s.points,s.segments,s.phiStart,s.phiLength);break;case"BufferGeometry":a=n.parse(s);break;case"Geometry":a=r.parse(s.data,this.texturePath).geometry;break;default:console.warn('THREE.ObjectLoader: Unsupported geometry type "'+s.type+'"');continue}a.uuid=s.uuid,void 0!==s.name&&(a.name=s.name),e[s.uuid]=a}return e},parseMaterials:function(t,e){var r={};if(void 0!==t){var n=new Hr;n.setTextures(e);for(var i=0,o=t.length;i<o;i++){var a=n.parse(t[i]);r[a.uuid]=a}}return r},parseAnimations:function(t){for(var e=[],r=0;r<t.length;r++){var n=Vr.parse(t[r]);e.push(n)}return e},parseImages:function(t,e){var r=this,n={};if(void 0!==t&&0<t.length){var i=new mr(e),o=new br(i);o.setCrossOrigin(this.crossOrigin);for(var i=0,a=t.length;i<a;i++){var s=t[i],c=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(s.url)?s.url:r.texturePath+s.url;n[s.uuid]=function(t){return r.manager.itemStart(t),o.load(t,function(){r.manager.itemEnd(t)},void 0,function(){r.manager.itemError(t)})}(c)}}return n},parseTextures:function(t,e){function r(t,e){return"number"==typeof t?t:(console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.",t),e[t])}var i={};if(void 0!==t)for(var o=0,a=t.length;o<a;o++){var s=t[o];void 0===s.image&&console.warn('THREE.ObjectLoader: No "image" specified for',s.uuid),void 0===e[s.image]&&console.warn("THREE.ObjectLoader: Undefined image",s.image);var c=new n(e[s.image]);c.needsUpdate=!0,c.uuid=s.uuid,void 0!==s.name&&(c.name=s.name),void 0!==s.mapping&&(c.mapping=r(s.mapping,Qn)),void 0!==s.offset&&c.offset.fromArray(s.offset),void 0!==s.repeat&&c.repeat.fromArray(s.repeat),void 0!==s.wrap&&(c.wrapS=r(s.wrap[0],ti),c.wrapT=r(s.wrap[1],ti)),void 0!==s.minFilter&&(c.minFilter=r(s.minFilter,ei)),void 0!==s.magFilter&&(c.magFilter=r(s.magFilter,ei)),void 0!==s.anisotropy&&(c.anisotropy=s.anisotropy),void 0!==s.flipY&&(c.flipY=s.flipY),i[s.uuid]=c}return i},parseObject:function(){var t=new u;return function(e,r,n){function i(t){return void 0===r[t]&&console.warn("THREE.ObjectLoader: Undefined geometry",t),r[t]}function o(t){if(void 0!==t)return void 0===n[t]&&console.warn("THREE.ObjectLoader: Undefined material",t),n[t]}var a;switch(e.type){case"Scene":a=new ne,void 0!==e.background&&Number.isInteger(e.background)&&(a.background=new $(e.background)),void 0!==e.fog&&("Fog"===e.fog.type?a.fog=new re(e.fog.color,e.fog.near,e.fog.far):"FogExp2"===e.fog.type&&(a.fog=new ee(e.fog.color,e.fog.density)));break;case"PerspectiveCamera":a=new Ct(e.fov,e.aspect,e.near,e.far),void 0!==e.focus&&(a.focus=e.focus),void 0!==e.zoom&&(a.zoom=e.zoom),void 0!==e.filmGauge&&(a.filmGauge=e.filmGauge),void 0!==e.filmOffset&&(a.filmOffset=e.filmOffset),void 0!==e.view&&(a.view=Object.assign({},e.view));break;case"OrthographicCamera":a=new Ot(e.left,e.right,e.top,e.bottom,e.near,e.far);break;case"AmbientLight":a=new Ar(e.color,e.intensity);break;case"DirectionalLight":a=new Pr(e.color,e.intensity);break;case"PointLight":a=new Cr(e.color,e.intensity,e.distance,e.decay);break;case"SpotLight":a=new Tr(e.color,e.intensity,e.distance,e.angle,e.penumbra,e.decay);break;case"HemisphereLight":a=new Sr(e.color,e.groundColor,e.intensity);break;case"Mesh":a=i(e.geometry);var s=o(e.material);a=a.bones&&0<a.bones.length?new he(a,s):new St(a,s);break;case"LOD":a=new se;break;case"Line":a=new pe(i(e.geometry),o(e.material),e.mode);break;case"LineSegments":a=new fe(i(e.geometry),o(e.material));break;case"PointCloud":case"Points":a=new me(i(e.geometry),o(e.material));break;case"Sprite":a=new ae(o(e.material));break;case"Group":a=new ve;break;case"SkinnedMesh":console.warn("THREE.ObjectLoader.parseObject() does not support SkinnedMesh type. Instantiates Object3D instead.");default:a=new ot}if(a.uuid=e.uuid,void 0!==e.name&&(a.name=e.name),void 0!==e.matrix?(t.fromArray(e.matrix),t.decompose(a.position,a.quaternion,a.scale)):(void 0!==e.position&&a.position.fromArray(e.position),void 0!==e.rotation&&a.rotation.fromArray(e.rotation),void 0!==e.quaternion&&a.quaternion.fromArray(e.quaternion),void 0!==e.scale&&a.scale.fromArray(e.scale)),void 0!==e.castShadow&&(a.castShadow=e.castShadow),void 0!==e.receiveShadow&&(a.receiveShadow=e.receiveShadow),e.shadow&&(void 0!==e.shadow.bias&&(a.shadow.bias=e.shadow.bias),void 0!==e.shadow.radius&&(a.shadow.radius=e.shadow.radius),void 0!==e.shadow.mapSize&&a.shadow.mapSize.fromArray(e.shadow.mapSize),void 0!==e.shadow.camera&&(a.shadow.camera=this.parseObject(e.shadow.camera))),void 0!==e.visible&&(a.visible=e.visible),void 0!==e.userData&&(a.userData=e.userData),void 0!==e.children)for(var c in e.children)a.add(this.parseObject(e.children[c],r,n));if("LOD"===e.type)for(e=e.levels,s=0;s<e.length;s++){var u=e[s];c=a.getObjectByProperty("uuid",u.object),void 0!==c&&a.addLevel(c,u.distance)}return a}}()}),Kr.prototype={constructor:Kr,getPoint:function(t){return console.warn("THREE.Curve: Warning, getPoint() not implemented!"),null},getPointAt:function(t){return t=this.getUtoTmapping(t),this.getPoint(t)},getPoints:function(t){t||(t=5);for(var e=[],r=0;r<=t;r++)e.push(this.getPoint(r/t));return e},getSpacedPoints:function(t){t||(t=5);for(var e=[],r=0;r<=t;r++)e.push(this.getPointAt(r/t));return e},getLength:function(){var t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(t||(t=this.__arcLengthDivisions?this.__arcLengthDivisions:200),this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var e,r,n=[],i=this.getPoint(0),o=0;for(n.push(0),r=1;r<=t;r++)e=this.getPoint(r/t),o+=e.distanceTo(i),n.push(o),i=e;return this.cacheArcLengths=n},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(t,e){var r,n,i=this.getLengths(),o=i.length;n=e?e:t*i[o-1];for(var a,s=0,c=o-1;s<=c;)if(r=Math.floor(s+(c-s)/2),0>(a=i[r]-n))s=r+1;else{if(!(0<a)){c=r;break}c=r-1}return r=c,i[r]===n?r/(o-1):(s=i[r],(r+(n-s)/(i[r+1]-s))/(o-1))},getTangent:function(t){var e=t-1e-4;return t+=1e-4,0>e&&(e=0),1<t&&(t=1),e=this.getPoint(e),this.getPoint(t).clone().sub(e).normalize()},getTangentAt:function(t){return t=this.getUtoTmapping(t),this.getTangent(t)},computeFrenetFrames:function(t,e){var r,n,i=new c,o=[],a=[],s=[],h=new c,l=new u;for(r=0;r<=t;r++)n=r/t,o[r]=this.getTangentAt(n),o[r].normalize();a[0]=new c,s[0]=new c,r=Number.MAX_VALUE,n=Math.abs(o[0].x);var p=Math.abs(o[0].y),f=Math.abs(o[0].z);for(n<=r&&(r=n,i.set(1,0,0)),p<=r&&(r=p,i.set(0,1,0)),f<=r&&i.set(0,0,1),h.crossVectors(o[0],i).normalize(),a[0].crossVectors(o[0],h),s[0].crossVectors(o[0],a[0]),r=1;r<=t;r++)a[r]=a[r-1].clone(),s[r]=s[r-1].clone(),h.crossVectors(o[r-1],o[r]),h.length()>Number.EPSILON&&(h.normalize(),i=Math.acos(ri.clamp(o[r-1].dot(o[r]),-1,1)),a[r].applyMatrix4(l.makeRotationAxis(h,i))),s[r].crossVectors(o[r],a[r]);if(!0===e)for(i=Math.acos(ri.clamp(a[0].dot(a[t]),-1,1)),i/=t,0<o[0].dot(h.crossVectors(a[0],a[t]))&&(i=-i),r=1;r<=t;r++)a[r].applyMatrix4(l.makeRotationAxis(o[r],i*r)),s[r].crossVectors(o[r],a[r]);return{tangents:o,normals:a,binormals:s}}},Kr.create=function(t,e){return t.prototype=Object.create(Kr.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},Zr.prototype=Object.create(Kr.prototype),Zr.prototype.constructor=Zr,Zr.prototype.isLineCurve=!0,Zr.prototype.getPoint=function(t){if(1===t)return this.v2.clone();var e=this.v2.clone().sub(this.v1);return e.multiplyScalar(t).add(this.v1),e},Zr.prototype.getPointAt=function(t){return this.getPoint(t)},Zr.prototype.getTangent=function(t){return this.v2.clone().sub(this.v1).normalize()},Jr.prototype=Object.assign(Object.create(Kr.prototype),{constructor:Jr,add:function(t){this.curves.push(t)},closePath:function(){var t=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);t.equals(e)||this.curves.push(new Zr(e,t))},getPoint:function(t){var e=t*this.getLength(),r=this.getCurveLengths();for(t=0;t<r.length;){if(r[t]>=e)return e=r[t]-e,t=this.curves[t],r=t.getLength(),t.getPointAt(0===r?0:1-e/r);t++}return null},getLength:function(){var t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var t=[],e=0,r=0,n=this.curves.length;r<n;r++)e+=this.curves[r].getLength(),t.push(e);return this.cacheLengths=t},getSpacedPoints:function(t){t||(t=40);for(var e=[],r=0;r<=t;r++)e.push(this.getPoint(r/t));return this.autoClose&&e.push(e[0]),e},getPoints:function(t){t=t||12;for(var e,r=[],n=0,i=this.curves;n<i.length;n++)for(var o=i[n],o=o.getPoints(o&&o.isEllipseCurve?2*t:o&&o.isLineCurve?1:o&&o.isSplineCurve?t*o.points.length:t),a=0;a<o.length;a++){var s=o[a];e&&e.equals(s)||(r.push(s),e=s)}return this.autoClose&&1<r.length&&!r[r.length-1].equals(r[0])&&r.push(r[0]),r},createPointsGeometry:function(t){return t=this.getPoints(t),this.createGeometry(t)},createSpacedPointsGeometry:function(t){return t=this.getSpacedPoints(t),this.createGeometry(t)},createGeometry:function(t){for(var e=new xt,r=0,n=t.length;r<n;r++){var i=t[r];e.vertices.push(new c(i.x,i.y,i.z||0))}return e}}),Qr.prototype=Object.create(Kr.prototype),Qr.prototype.constructor=Qr,Qr.prototype.isEllipseCurve=!0,Qr.prototype.getPoint=function(t){for(var e=2*Math.PI,n=this.aEndAngle-this.aStartAngle,i=Math.abs(n)<Number.EPSILON;0>n;)n+=e;for(;n>e;)n-=e;n<Number.EPSILON&&(n=i?0:e),!0!==this.aClockwise||i||(n=n===e?-e:n-e),e=this.aStartAngle+t*n,t=this.aX+this.xRadius*Math.cos(e);var o=this.aY+this.yRadius*Math.sin(e);return 0!==this.aRotation&&(e=Math.cos(this.aRotation),n=Math.sin(this.aRotation),i=t-this.aX,o-=this.aY,t=i*e-o*n+this.aX,o=i*n+o*e+this.aY),new r(t,o)};var Ei={tangentQuadraticBezier:function(t,e,r,n){return 2*(1-t)*(r-e)+2*t*(n-r)},tangentCubicBezier:function(t,e,r,n,i){return-3*e*(1-t)*(1-t)+3*r*(1-t)*(1-t)-6*t*r*(1-t)+6*t*n*(1-t)-3*t*t*n+3*t*t*i},tangentSpline:function(t,e,r,n,i){return 6*t*t-6*t+(3*t*t-4*t+1)+(-6*t*t+6*t)+(3*t*t-2*t)},interpolate:function(t,e,r,n,i){t=.5*(r-t),n=.5*(n-e);var o=i*i;return(2*e-2*r+t+n)*i*o+(-3*e+3*r-2*t-n)*o+t*i+e}};tn.prototype=Object.create(Kr.prototype),tn.prototype.constructor=tn,tn.prototype.isSplineCurve=!0,tn.prototype.getPoint=function(t){var e=this.points;t*=e.length-1;var n=Math.floor(t);t-=n;var i=e[0===n?n:n-1],o=e[n],a=e[n>e.length-2?e.length-1:n+1],e=e[n>e.length-3?e.length-1:n+2],n=Ei.interpolate;return new r(n(i.x,o.x,a.x,e.x,t),n(i.y,o.y,a.y,e.y,t))},en.prototype=Object.create(Kr.prototype),en.prototype.constructor=en,en.prototype.getPoint=function(t){var e=yi.b3;return new r(e(t,this.v0.x,this.v1.x,this.v2.x,this.v3.x),e(t,this.v0.y,this.v1.y,this.v2.y,this.v3.y))},en.prototype.getTangent=function(t){var e=Ei.tangentCubicBezier;return new r(e(t,this.v0.x,this.v1.x,this.v2.x,this.v3.x),e(t,this.v0.y,this.v1.y,this.v2.y,this.v3.y)).normalize()},rn.prototype=Object.create(Kr.prototype),rn.prototype.constructor=rn,rn.prototype.getPoint=function(t){var e=yi.b2;return new r(e(t,this.v0.x,this.v1.x,this.v2.x),e(t,this.v0.y,this.v1.y,this.v2.y))},rn.prototype.getTangent=function(t){var e=Ei.tangentQuadraticBezier;return new r(e(t,this.v0.x,this.v1.x,this.v2.x),e(t,this.v0.y,this.v1.y,this.v2.y)).normalize()};var Ti=Object.assign(Object.create(Jr.prototype),{fromPoints:function(t){this.moveTo(t[0].x,t[0].y);for(var e=1,r=t.length;e<r;e++)this.lineTo(t[e].x,t[e].y)},moveTo:function(t,e){this.currentPoint.set(t,e)},lineTo:function(t,e){var n=new Zr(this.currentPoint.clone(),new r(t,e));this.curves.push(n),this.currentPoint.set(t,e)},quadraticCurveTo:function(t,e,n,i){t=new rn(this.currentPoint.clone(),new r(t,e),new r(n,i)),this.curves.push(t),this.currentPoint.set(n,i)},bezierCurveTo:function(t,e,n,i,o,a){t=new en(this.currentPoint.clone(),new r(t,e),new r(n,i),new r(o,a)),this.curves.push(t),this.currentPoint.set(o,a)},splineThru:function(t){var e=[this.currentPoint.clone()].concat(t),e=new tn(e);this.curves.push(e),this.currentPoint.copy(t[t.length-1])},arc:function(t,e,r,n,i,o){this.absarc(t+this.currentPoint.x,e+this.currentPoint.y,r,n,i,o)},absarc:function(t,e,r,n,i,o){this.absellipse(t,e,r,r,n,i,o)},ellipse:function(t,e,r,n,i,o,a,s){this.absellipse(t+this.currentPoint.x,e+this.currentPoint.y,r,n,i,o,a,s)},absellipse:function(t,e,r,n,i,o,a,s){t=new Qr(t,e,r,n,i,o,a,s),0<this.curves.length&&(e=t.getPoint(0),e.equals(this.currentPoint)||this.lineTo(e.x,e.y)),this.curves.push(t),t=t.getPoint(1),this.currentPoint.copy(t)}});nn.prototype=Object.assign(Object.create(Ti),{constructor:nn,getPointsHoles:function(t){for(var e=[],r=0,n=this.holes.length;r<n;r++)e[r]=this.holes[r].getPoints(t);return e},extractAllPoints:function(t){return{shape:this.getPoints(t),holes:this.getPointsHoles(t)}},extractPoints:function(t){return this.extractAllPoints(t)}}),on.prototype=Ti,Ti.constructor=on,an.prototype={moveTo:function(t,e){this.currentPath=new on,this.subPaths.push(this.currentPath),this.currentPath.moveTo(t,e)},lineTo:function(t,e){this.currentPath.lineTo(t,e)},quadraticCurveTo:function(t,e,r,n){this.currentPath.quadraticCurveTo(t,e,r,n)},bezierCurveTo:function(t,e,r,n,i,o){this.currentPath.bezierCurveTo(t,e,r,n,i,o)},splineThru:function(t){this.currentPath.splineThru(t)},toShapes:function(t,e){function r(t){for(var e=[],r=0,n=t.length;r<n;r++){var i=t[r],o=new nn;o.curves=i.curves,e.push(o)}return e}var n=yi.isClockWise,i=this.subPaths;if(0===i.length)return[];if(!0===e)return r(i);var o,a,s,c=[];if(1===i.length)return a=i[0],s=new nn,s.curves=a.curves,c.push(s),c;var u=!n(i[0].getPoints()),u=t?!u:u;s=[];var h,l=[],p=[],f=0;l[f]=void 0,p[f]=[];for(var d=0,m=i.length;d<m;d++)a=i[d],h=a.getPoints(),o=n(h),(o=t?!o:o)?(!u&&l[f]&&f++,l[f]={s:new nn,p:h},l[f].s.curves=a.curves,u&&f++,p[f]=[]):p[f].push({h:a,p:h[0]});if(!l[0])return r(i);if(1<l.length){for(d=!1,a=[],n=0,i=l.length;n<i;n++)s[n]=[];for(n=0,i=l.length;n<i;n++)for(o=p[n],u=0;u<o.length;u++){for(f=o[u],h=!0,m=0;m<l.length;m++)(function(t,e){for(var r=e.length,n=!1,i=r-1,o=0;o<r;i=o++){var a=e[i],s=e[o],c=s.x-a.x,u=s.y-a.y;if(Math.abs(u)>Number.EPSILON){if(0>u&&(a=e[o],c=-c,s=e[i],u=-u),!(t.y<a.y||t.y>s.y))if(t.y===a.y){if(t.x===a.x)return!0}else{if(0===(i=u*(t.x-a.x)-c*(t.y-a.y)))return!0;0>i||(n=!n)}}else if(t.y===a.y&&(s.x<=t.x&&t.x<=a.x||a.x<=t.x&&t.x<=s.x))return!0}return n})(f.p,l[m].p)&&(n!==m&&a.push({froms:n,tos:m,hole:u}),h?(h=!1,s[m].push(f)):d=!0);h&&s[n].push(f)}0<a.length&&(d||(p=s))}for(d=0,n=l.length;d<n;d++)for(s=l[d].s,c.push(s),a=p[d],i=0,o=a.length;i<o;i++)s.holes.push(a[i].h);return c}},Object.assign(sn.prototype,{isFont:!0,generateShapes:function(t,e,r){void 0===e&&(e=100),void 0===r&&(r=4);var n=this.data;t=String(t).split("");var i=e/n.resolution,o=0;e=[];for(var a=0;a<t.length;a++){var s;s=i;var c=o,u=n.glyphs[t[a]]||n.glyphs["?"];if(u){var h,l,p,f,d,m,v,g,y=new an,b=[],_=yi.b2,x=yi.b3;if(u.o)for(var w=u._cachedOutline||(u._cachedOutline=u.o.split(" ")),S=0,M=w.length;S<M;)switch(w[S++]){case"m":h=w[S++]*s+c,l=w[S++]*s,y.moveTo(h,l);break;case"l":h=w[S++]*s+c,l=w[S++]*s,y.lineTo(h,l);break;case"q":if(h=w[S++]*s+c,l=w[S++]*s,d=w[S++]*s+c,m=w[S++]*s,y.quadraticCurveTo(d,m,h,l),f=b[b.length-1]){p=f.x,f=f.y;for(var E=1;E<=r;E++){var T=E/r;_(T,p,d,h),_(T,f,m,l)}}break;case"b":if(h=w[S++]*s+c,l=w[S++]*s,d=w[S++]*s+c,m=w[S++]*s,v=w[S++]*s+c,g=w[S++]*s,y.bezierCurveTo(d,m,v,g,h,l),f=b[b.length-1])for(p=f.x,f=f.y,E=1;E<=r;E++)T=E/r,x(T,p,d,v,h),x(T,f,m,g,l)}s={offset:u.ha*s,path:y}}else s=void 0;o+=s.offset,e.push(s.path)}for(r=[],n=0,t=e.length;n<t;n++)Array.prototype.push.apply(r,e[n].toShapes());return r}}),Object.assign(cn.prototype,{load:function(t,e,r,n){var i=this;new vr(this.manager).load(t,function(t){var r;try{r=JSON.parse(t)}catch(e){console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."),r=JSON.parse(t.substring(65,t.length-2))}t=i.parse(r),e&&e(t)},r,n)},parse:function(t){return new sn(t)}});var Ci,Oi={getContext:function(){return void 0===Ci&&(Ci=new(window.AudioContext||window.webkitAudioContext)),Ci},setContext:function(t){Ci=t}};Object.assign(un.prototype,{load:function(t,e,r,n){var i=new vr(this.manager);i.setResponseType("arraybuffer"),i.load(t,function(t){Oi.getContext().decodeAudioData(t,function(t){e(t)})},r,n)}}),hn.prototype=Object.assign(Object.create(wr.prototype),{constructor:hn,isRectAreaLight:!0,copy:function(t){return wr.prototype.copy.call(this,t),this.width=t.width,this.height=t.height,this}}),Object.assign(ln.prototype,{update:function(){var t,e,r,n,i,o,a,s=new u,c=new u;return function(u){if(t!==this||e!==u.focus||r!==u.fov||n!==u.aspect*this.aspect||i!==u.near||o!==u.far||a!==u.zoom){t=this,e=u.focus,r=u.fov,n=u.aspect*this.aspect,i=u.near,o=u.far,a=u.zoom;var h,l=u.projectionMatrix.clone(),p=this.eyeSep/2,f=p*i/e,d=i*Math.tan(ri.DEG2RAD*r*.5)/a;c.elements[12]=-p,s.elements[12]=p,p=-d*n+f,h=d*n+f,l.elements[0]=2*i/(h-p),l.elements[8]=(h+p)/(h-p),this.cameraL.projectionMatrix.copy(l),p=-d*n-f,h=d*n-f,l.elements[0]=2*i/(h-p),l.elements[8]=(h+p)/(h-p),this.cameraR.projectionMatrix.copy(l)}this.cameraL.matrixWorld.copy(u.matrixWorld).multiply(c),this.cameraR.matrixWorld.copy(u.matrixWorld).multiply(s)}}()}),pn.prototype=Object.create(ot.prototype),pn.prototype.constructor=pn,fn.prototype=Object.assign(Object.create(ot.prototype),{constructor:fn,getInput:function(){return this.gain},removeFilter:function(){null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null)},getFilter:function(){return this.filter},setFilter:function(t){null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=t,this.gain.connect(this.filter),this.filter.connect(this.context.destination)},getMasterVolume:function(){return this.gain.gain.value},setMasterVolume:function(t){this.gain.gain.value=t},updateMatrixWorld:function(){var t=new c,e=new s,r=new c,n=new c;return function(i){ot.prototype.updateMatrixWorld.call(this,i),i=this.context.listener;var o=this.up;this.matrixWorld.decompose(t,e,r),n.set(0,0,-1).applyQuaternion(e),i.positionX?(i.positionX.setValueAtTime(t.x,this.context.currentTime),i.positionY.setValueAtTime(t.y,this.context.currentTime),i.positionZ.setValueAtTime(t.z,this.context.currentTime),i.forwardX.setValueAtTime(n.x,this.context.currentTime),i.forwardY.setValueAtTime(n.y,this.context.currentTime),i.forwardZ.setValueAtTime(n.z,this.context.currentTime),i.upX.setValueAtTime(o.x,this.context.currentTime),i.upY.setValueAtTime(o.y,this.context.currentTime),i.upZ.setValueAtTime(o.z,this.context.currentTime)):(i.setPosition(t.x,t.y,t.z),i.setOrientation(n.x,n.y,n.z,o.x,o.y,o.z))}}()}),dn.prototype=Object.assign(Object.create(ot.prototype),{constructor:dn,getOutput:function(){return this.gain},setNodeSource:function(t){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=t,this.connect(),this},setBuffer:function(t){return this.buffer=t,this.sourceType="buffer",this.autoplay&&this.play(),this},play:function(){if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else{if(!1!==this.hasPlaybackControl){var t=this.context.createBufferSource();return t.buffer=this.buffer,t.loop=this.loop,t.onended=this.onEnded.bind(this),t.playbackRate.setValueAtTime(this.playbackRate,this.startTime),t.start(0,this.startTime),this.isPlaying=!0,this.source=t,this.connect()}console.warn("THREE.Audio: this Audio has no playback control.")}},pause:function(){if(!1!==this.hasPlaybackControl)return this.source.stop(),this.startTime=this.context.currentTime,this.isPlaying=!1,this;console.warn("THREE.Audio: this Audio has no playback control.")},stop:function(){if(!1!==this.hasPlaybackControl)return this.source.stop(),this.startTime=0,this.isPlaying=!1,this;console.warn("THREE.Audio: this Audio has no playback control.")},connect:function(){if(0<this.filters.length){this.source.connect(this.filters[0]);for(var t=1,e=this.filters.length;t<e;t++)this.filters[t-1].connect(this.filters[t]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this},disconnect:function(){if(0<this.filters.length){this.source.disconnect(this.filters[0]);for(var t=1,e=this.filters.length;t<e;t++)this.filters[t-1].disconnect(this.filters[t]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this},getFilters:function(){return this.filters},setFilters:function(t){return t||(t=[]),!0===this.isPlaying?(this.disconnect(),this.filters=t,this.connect()):this.filters=t,this},getFilter:function(){return this.getFilters()[0]},setFilter:function(t){return this.setFilters(t?[t]:[])},setPlaybackRate:function(t){if(!1!==this.hasPlaybackControl)return this.playbackRate=t,!0===this.isPlaying&&this.source.playbackRate.setValueAtTime(this.playbackRate,this.context.currentTime),this;console.warn("THREE.Audio: this Audio has no playback control.")},getPlaybackRate:function(){return this.playbackRate},onEnded:function(){this.isPlaying=!1},getLoop:function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.loop},setLoop:function(t){if(!1!==this.hasPlaybackControl)return this.loop=t,!0===this.isPlaying&&(this.source.loop=this.loop),this;console.warn("THREE.Audio: this Audio has no playback control.")},getVolume:function(){return this.gain.gain.value},setVolume:function(t){return this.gain.gain.value=t,this}}),mn.prototype=Object.assign(Object.create(dn.prototype),{constructor:mn,getOutput:function(){return this.panner},getRefDistance:function(){return this.panner.refDistance},setRefDistance:function(t){this.panner.refDistance=t},getRolloffFactor:function(){return this.panner.rolloffFactor},setRolloffFactor:function(t){this.panner.rolloffFactor=t},getDistanceModel:function(){return this.panner.distanceModel},setDistanceModel:function(t){this.panner.distanceModel=t},getMaxDistance:function(){return this.panner.maxDistance},setMaxDistance:function(t){this.panner.maxDistance=t},updateMatrixWorld:function(){var t=new c;return function(e){ot.prototype.updateMatrixWorld.call(this,e),t.setFromMatrixPosition(this.matrixWorld),this.panner.setPosition(t.x,t.y,t.z)}}()}),Object.assign(vn.prototype,{getFrequencyData:function(){return this.analyser.getByteFrequencyData(this.data),this.data},getAverageFrequency:function(){for(var t=0,e=this.getFrequencyData(),r=0;r<e.length;r++)t+=e[r];return t/e.length}}),gn.prototype={constructor:gn,accumulate:function(t,e){var r=this.buffer,n=this.valueSize,i=t*n+n,o=this.cumulativeWeight;if(0===o){for(o=0;o!==n;++o)r[i+o]=r[o];o=e}else o+=e,this._mixBufferRegion(r,i,0,e/o,n);this.cumulativeWeight=o},apply:function(t){var e=this.valueSize,r=this.buffer;t=t*e+e;var n=this.cumulativeWeight,i=this.binding;this.cumulativeWeight=0,1>n&&this._mixBufferRegion(r,t,3*e,1-n,e);for(var n=e,o=e+e;n!==o;++n)if(r[n]!==r[n+e]){i.setValue(r,t);break}},saveOriginalState:function(){var t=this.buffer,e=this.valueSize,r=3*e;this.binding.getValue(t,r);for(var n=e;n!==r;++n)t[n]=t[r+n%e];this.cumulativeWeight=0},
-restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(t,e,r,n,i){if(.5<=n)for(n=0;n!==i;++n)t[e+n]=t[r+n]},_slerp:function(t,e,r,n,i){s.slerpFlat(t,e,t,e,t,r,n)},_lerp:function(t,e,r,n,i){for(var o=1-n,a=0;a!==i;++a){var s=e+a;t[s]=t[s]*o+t[r+a]*n}}},yn.prototype={constructor:yn,getValue:function(t,e){this.bind(),this.getValue(t,e)},setValue:function(t,e){this.bind(),this.setValue(t,e)},bind:function(){var t=this.node,e=this.parsedPath,r=e.objectName,n=e.propertyName,i=e.propertyIndex;if(t||(this.node=t=yn.findNode(this.rootNode,e.nodeName)||this.rootNode),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,t){if(r){var o=e.objectIndex;switch(r){case"materials":if(!t.material)return void console.error("  can not bind to material as node does not have a material",this);if(!t.material.materials)return void console.error("  can not bind to material.materials as node.material does not have a materials array",this);t=t.material.materials;break;case"bones":if(!t.skeleton)return void console.error("  can not bind to bones as node does not have a skeleton",this);for(t=t.skeleton.bones,r=0;r<t.length;r++)if(t[r].name===o){o=r;break}break;default:if(void 0===t[r])return void console.error("  can not bind to objectName of node, undefined",this);t=t[r]}if(void 0!==o){if(void 0===t[o])return void console.error("  trying to bind to objectIndex of objectName, but is undefined:",this,t);t=t[o]}}if(void 0===(o=t[n]))console.error("  trying to update property for track: "+e.nodeName+"."+n+" but it wasn't found.",t);else{if(e=this.Versioning.None,void 0!==t.needsUpdate?(e=this.Versioning.NeedsUpdate,this.targetObject=t):void 0!==t.matrixWorldNeedsUpdate&&(e=this.Versioning.MatrixWorldNeedsUpdate,this.targetObject=t),r=this.BindingType.Direct,void 0!==i){if("morphTargetInfluences"===n){if(!t.geometry)return void console.error("  can not bind to morphTargetInfluences becasuse node does not have a geometry",this);if(!t.geometry.morphTargets)return void console.error("  can not bind to morphTargetInfluences becasuse node does not have a geometry.morphTargets",this);for(r=0;r<this.node.geometry.morphTargets.length;r++)if(t.geometry.morphTargets[r].name===i){i=r;break}}r=this.BindingType.ArrayElement,this.resolvedProperty=o,this.propertyIndex=i}else void 0!==o.fromArray&&void 0!==o.toArray?(r=this.BindingType.HasFromToArray,this.resolvedProperty=o):void 0!==o.length?(r=this.BindingType.EntireArray,this.resolvedProperty=o):this.propertyName=n;this.getValue=this.GetterByBindingType[r],this.setValue=this.SetterByBindingTypeAndVersioning[r][e]}}else console.error("  trying to update node for track: "+this.path+" but it wasn't found.")},unbind:function(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}},Object.assign(yn.prototype,{_getValue_unavailable:function(){},_setValue_unavailable:function(){},_getValue_unbound:yn.prototype.getValue,_setValue_unbound:yn.prototype.setValue,BindingType:{Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Versioning:{None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},GetterByBindingType:[function(t,e){t[e]=this.node[this.propertyName]},function(t,e){for(var r=this.resolvedProperty,n=0,i=r.length;n!==i;++n)t[e++]=r[n]},function(t,e){t[e]=this.resolvedProperty[this.propertyIndex]},function(t,e){this.resolvedProperty.toArray(t,e)}],SetterByBindingTypeAndVersioning:[[function(t,e){this.node[this.propertyName]=t[e]},function(t,e){this.node[this.propertyName]=t[e],this.targetObject.needsUpdate=!0},function(t,e){this.node[this.propertyName]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}],[function(t,e){for(var r=this.resolvedProperty,n=0,i=r.length;n!==i;++n)r[n]=t[e++]},function(t,e){for(var r=this.resolvedProperty,n=0,i=r.length;n!==i;++n)r[n]=t[e++];this.targetObject.needsUpdate=!0},function(t,e){for(var r=this.resolvedProperty,n=0,i=r.length;n!==i;++n)r[n]=t[e++];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(t,e){this.resolvedProperty[this.propertyIndex]=t[e]},function(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.needsUpdate=!0},function(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}],[function(t,e){this.resolvedProperty.fromArray(t,e)},function(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.needsUpdate=!0},function(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.matrixWorldNeedsUpdate=!0}]]}),yn.Composite=function(t,e,r){r=r||yn.parseTrackName(e),this._targetGroup=t,this._bindings=t.subscribe_(e,r)},yn.Composite.prototype={constructor:yn.Composite,getValue:function(t,e){this.bind();var r=this._bindings[this._targetGroup.nCachedObjects_];void 0!==r&&r.getValue(t,e)},setValue:function(t,e){for(var r=this._bindings,n=this._targetGroup.nCachedObjects_,i=r.length;n!==i;++n)r[n].setValue(t,e)},bind:function(){for(var t=this._bindings,e=this._targetGroup.nCachedObjects_,r=t.length;e!==r;++e)t[e].bind()},unbind:function(){for(var t=this._bindings,e=this._targetGroup.nCachedObjects_,r=t.length;e!==r;++e)t[e].unbind()}},yn.create=function(t,e,r){return t&&t.isAnimationObjectGroup?new yn.Composite(t,e,r):new yn(t,e,r)},yn.parseTrackName=function(t){var e=/^((?:[\w-]+[\/:])*)([\w-]+)?(?:\.([\w-]+)(?:\[(.+)\])?)?\.([\w-]+)(?:\[(.+)\])?$/.exec(t);if(!e)throw Error("cannot parse trackName at all: "+t);if(e={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},null===e.propertyName||0===e.propertyName.length)throw Error("can not parse propertyName from trackName: "+t);return e},yn.findNode=function(t,e){if(!e||""===e||"root"===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){var r=function(t){for(var r=0;r<t.bones.length;r++){var n=t.bones[r];if(n.name===e)return n}return null}(t.skeleton);if(r)return r}if(t.children){var n=function(t){for(var r=0;r<t.length;r++){var i=t[r];if(i.name===e||i.uuid===e||(i=n(i.children)))return i}return null};if(r=n(t.children))return r}return null},bn.prototype={constructor:bn,isAnimationObjectGroup:!0,add:function(t){for(var e=this._objects,r=e.length,n=this.nCachedObjects_,i=this._indicesByUUID,o=this._paths,a=this._parsedPaths,s=this._bindings,c=s.length,u=0,h=arguments.length;u!==h;++u){var l=arguments[u],p=l.uuid,f=i[p];if(void 0===f){f=r++,i[p]=f,e.push(l);for(var p=0,d=c;p!==d;++p)s[p].push(new yn(l,o[p],a[p]))}else if(f<n){var m=--n,d=e[m];for(i[d.uuid]=f,e[f]=d,i[p]=m,e[m]=l,p=0,d=c;p!==d;++p){var v=s[p],g=v[f];v[f]=v[m],void 0===g&&(g=new yn(l,o[p],a[p])),v[m]=g}}else void 0!==e[f]&&console.error("Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes...")}this.nCachedObjects_=n},remove:function(t){for(var e=this._objects,r=this.nCachedObjects_,n=this._indicesByUUID,i=this._bindings,o=i.length,a=0,s=arguments.length;a!==s;++a){var c=arguments[a],u=c.uuid,h=n[u];if(void 0!==h&&h>=r){var l=r++,p=e[l];for(n[p.uuid]=h,e[h]=p,n[u]=l,e[l]=c,c=0,u=o;c!==u;++c){var p=i[c],f=p[h];p[h]=p[l],p[l]=f}}}this.nCachedObjects_=r},uncache:function(t){for(var e=this._objects,r=e.length,n=this.nCachedObjects_,i=this._indicesByUUID,o=this._bindings,a=o.length,s=0,c=arguments.length;s!==c;++s){var u=arguments[s].uuid,h=i[u];if(void 0!==h)if(delete i[u],h<n){var u=--n,l=e[u],p=--r,f=e[p];for(i[l.uuid]=h,e[h]=l,i[f.uuid]=u,e[u]=f,e.pop(),l=0,f=a;l!==f;++l){var d=o[l],m=d[p];d[h]=d[u],d[u]=m,d.pop()}}else for(p=--r,f=e[p],i[f.uuid]=h,e[h]=f,e.pop(),l=0,f=a;l!==f;++l)d=o[l],d[h]=d[p],d.pop()}this.nCachedObjects_=n},subscribe_:function(t,e){var r=this._bindingsIndicesByPath,n=r[t],i=this._bindings;if(void 0!==n)return i[n];var o=this._paths,a=this._parsedPaths,s=this._objects,c=this.nCachedObjects_,u=Array(s.length),n=i.length;for(r[t]=n,o.push(t),a.push(e),i.push(u),r=c,n=s.length;r!==n;++r)u[r]=new yn(s[r],t,e);return u},unsubscribe_:function(t){var e=this._bindingsIndicesByPath,r=e[t];if(void 0!==r){var n=this._paths,i=this._parsedPaths,o=this._bindings,a=o.length-1,s=o[a];e[t[a]]=r,o[r]=s,o.pop(),i[r]=i[a],i.pop(),n[r]=n[a],n.pop()}}},_n.prototype={constructor:_n,play:function(){return this._mixer._activateAction(this),this},stop:function(){return this._mixer._deactivateAction(this),this.reset()},reset:function(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()},isRunning:function(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)},isScheduled:function(){return this._mixer._isActiveAction(this)},startAt:function(t){return this._startTime=t,this},setLoop:function(t,e){return this.loop=t,this.repetitions=e,this},setEffectiveWeight:function(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()},getEffectiveWeight:function(){return this._effectiveWeight},fadeIn:function(t){return this._scheduleFading(t,0,1)},fadeOut:function(t){return this._scheduleFading(t,1,0)},crossFadeFrom:function(t,e,r){if(t.fadeOut(e),this.fadeIn(e),r){r=this._clip.duration;var n=t._clip.duration,i=r/n;t.warp(1,n/r,e),this.warp(i,1,e)}return this},crossFadeTo:function(t,e,r){return t.crossFadeFrom(this,e,r)},stopFading:function(){var t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this},setEffectiveTimeScale:function(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()},getEffectiveTimeScale:function(){return this._effectiveTimeScale},setDuration:function(t){return this.timeScale=this._clip.duration/t,this.stopWarping()},syncWith:function(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()},halt:function(t){return this.warp(this._effectiveTimeScale,0,t)},warp:function(t,e,r){var n=this._mixer,i=n.time,o=this._timeScaleInterpolant,a=this.timeScale;return null===o&&(this._timeScaleInterpolant=o=n._lendControlInterpolant()),n=o.parameterPositions,o=o.sampleValues,n[0]=i,n[1]=i+r,o[0]=t/a,o[1]=e/a,this},stopWarping:function(){var t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this},getMixer:function(){return this._mixer},getClip:function(){return this._clip},getRoot:function(){return this._localRoot||this._mixer._root},_update:function(t,e,r,n){var i=this._startTime;if(null!==i){if(0>(e=(t-i)*r)||0===r)return;this._startTime=null,e*=r}if(e*=this._updateTimeScale(t),r=this._updateTime(e),0<(t=this._updateWeight(t))){e=this._interpolants;for(var i=this._propertyBindings,o=0,a=e.length;o!==a;++o)e[o].evaluate(r),i[o].accumulate(n,t)}},_updateWeight:function(t){var e=0;if(this.enabled){var e=this.weight,r=this._weightInterpolant;if(null!==r){var n=r.evaluate(t)[0],e=e*n;t>r.parameterPositions[1]&&(this.stopFading(),0===n&&(this.enabled=!1))}}return this._effectiveWeight=e},_updateTimeScale:function(t){var e=0;if(!this.paused){var e=this.timeScale,r=this._timeScaleInterpolant;if(null!==r){var n=r.evaluate(t)[0],e=e*n;t>r.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e},_updateTime:function(t){var e=this.time+t;if(0===t)return e;var r=this._clip.duration,n=this.loop,i=this._loopCount;if(2200===n)t:{if(-1===i&&(this._loopCount=0,this._setEndings(!0,!0,!1)),e>=r)e=r;else{if(!(0>e))break t;e=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this._mixer.dispatchEvent({type:"finished",action:this,direction:0>t?-1:1})}else{if(n=2202===n,-1===i&&(0<=t?(i=0,this._setEndings(!0,0===this.repetitions,n)):this._setEndings(0===this.repetitions,!0,n)),e>=r||0>e){var o=Math.floor(e/r),e=e-r*o,i=i+Math.abs(o),a=this.repetitions-i;0>a?(this.clampWhenFinished?this.paused=!0:this.enabled=!1,e=0<t?r:0,this._mixer.dispatchEvent({type:"finished",action:this,direction:0<t?1:-1})):(0===a?(t=0>t,this._setEndings(t,!t,n)):this._setEndings(!1,!1,n),this._loopCount=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:o}))}if(n&&1==(1&i))return this.time=e,r-e}return this.time=e},_setEndings:function(t,e,r){var n=this._interpolantSettings;r?(n.endingStart=2401,n.endingEnd=2401):(n.endingStart=t?this.zeroSlopeAtStart?2401:2400:2402,n.endingEnd=e?this.zeroSlopeAtEnd?2401:2400:2402)},_scheduleFading:function(t,e,r){var n=this._mixer,i=n.time,o=this._weightInterpolant;return null===o&&(this._weightInterpolant=o=n._lendControlInterpolant()),n=o.parameterPositions,o=o.sampleValues,n[0]=i,o[0]=e,n[1]=i+t,o[1]=r,this}},Object.assign(xn.prototype,e.prototype,{clipAction:function(t,e){var r=e||this._root,n=r.uuid,i="string"==typeof t?Vr.findByName(r,t):t,r=null!==i?i.uuid:t,o=this._actionsByClip[r],a=null;if(void 0!==o){if(void 0!==(a=o.actionByRoot[n]))return a;a=o.knownActions[0],null===i&&(i=a._clip)}return null===i?null:(i=new _n(this,i,e),this._bindAction(i,a),this._addInactiveAction(i,r,n),i)},existingAction:function(t,e){var r=e||this._root,n=r.uuid,r="string"==typeof t?Vr.findByName(r,t):t,r=this._actionsByClip[r?r.uuid:t];return void 0!==r?r.actionByRoot[n]||null:null},stopAllAction:function(){for(var t=this._actions,e=this._nActiveActions,r=this._bindings,n=this._nActiveBindings,i=this._nActiveBindings=this._nActiveActions=0;i!==e;++i)t[i].reset();for(i=0;i!==n;++i)r[i].useCount=0;return this},update:function(t){t*=this.timeScale;for(var e=this._actions,r=this._nActiveActions,n=this.time+=t,i=Math.sign(t),o=this._accuIndex^=1,a=0;a!==r;++a){var s=e[a];s.enabled&&s._update(n,t,i,o)}for(t=this._bindings,e=this._nActiveBindings,a=0;a!==e;++a)t[a].apply(o);return this},getRoot:function(){return this._root},uncacheClip:function(t){var e=this._actions;t=t.uuid;var r=this._actionsByClip,n=r[t];if(void 0!==n){for(var n=n.knownActions,i=0,o=n.length;i!==o;++i){var a=n[i];this._deactivateAction(a);var s=a._cacheIndex,c=e[e.length-1];a._cacheIndex=null,a._byClipCacheIndex=null,c._cacheIndex=s,e[s]=c,e.pop(),this._removeInactiveBindingsForAction(a)}delete r[t]}},uncacheRoot:function(t){t=t.uuid;var e,r=this._actionsByClip;for(e in r){var n=r[e].actionByRoot[t];void 0!==n&&(this._deactivateAction(n),this._removeInactiveAction(n))}if(void 0!==(e=this._bindingsByRootAndName[t]))for(var i in e)t=e[i],t.restoreOriginalState(),this._removeInactiveBinding(t)},uncacheAction:function(t,e){var r=this.existingAction(t,e);null!==r&&(this._deactivateAction(r),this._removeInactiveAction(r))}}),Object.assign(xn.prototype,{_bindAction:function(t,e){var r=t._localRoot||this._root,n=t._clip.tracks,i=n.length,o=t._propertyBindings,a=t._interpolants,s=r.uuid,c=this._bindingsByRootAndName,u=c[s];for(void 0===u&&(u={},c[s]=u),c=0;c!==i;++c){var h=n[c],l=h.name,p=u[l];if(void 0===p){if(void 0!==(p=o[c])){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,s,l));continue}p=new gn(yn.create(r,l,e&&e._propertyBindings[c].binding.parsedPath),h.ValueTypeName,h.getValueSize()),++p.referenceCount,this._addInactiveBinding(p,s,l)}o[c]=p,a[c].resultBuffer=p.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){var e=(t._localRoot||this._root).uuid,r=t._clip.uuid,n=this._actionsByClip[r];this._bindAction(t,n&&n.knownActions[0]),this._addInactiveAction(t,r,e)}for(e=t._propertyBindings,r=0,n=e.length;r!==n;++r){var i=e[r];0==i.useCount++&&(this._lendBinding(i),i.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){for(var e=t._propertyBindings,r=0,n=e.length;r!==n;++r){var i=e[r];0==--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;var t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){return null!==(t=t._cacheIndex)&&t<this._nActiveActions},_addInactiveAction:function(t,e,r){var n=this._actions,i=this._actionsByClip,o=i[e];void 0===o?(o={knownActions:[t],actionByRoot:{}},t._byClipCacheIndex=0,i[e]=o):(e=o.knownActions,t._byClipCacheIndex=e.length,e.push(t)),t._cacheIndex=n.length,n.push(t),o.actionByRoot[r]=t},_removeInactiveAction:function(t){var e=this._actions,r=e[e.length-1],n=t._cacheIndex;r._cacheIndex=n,e[n]=r,e.pop(),t._cacheIndex=null;var r=t._clip.uuid,n=this._actionsByClip,i=n[r],o=i.knownActions,a=o[o.length-1],s=t._byClipCacheIndex;a._byClipCacheIndex=s,o[s]=a,o.pop(),t._byClipCacheIndex=null,delete i.actionByRoot[(e._localRoot||this._root).uuid],0===o.length&&delete n[r],this._removeInactiveBindingsForAction(t)},_removeInactiveBindingsForAction:function(t){t=t._propertyBindings;for(var e=0,r=t.length;e!==r;++e){var n=t[e];0==--n.referenceCount&&this._removeInactiveBinding(n)}},_lendAction:function(t){var e=this._actions,r=t._cacheIndex,n=this._nActiveActions++,i=e[n];t._cacheIndex=n,e[n]=t,i._cacheIndex=r,e[r]=i},_takeBackAction:function(t){var e=this._actions,r=t._cacheIndex,n=--this._nActiveActions,i=e[n];t._cacheIndex=n,e[n]=t,i._cacheIndex=r,e[r]=i},_addInactiveBinding:function(t,e,r){var n=this._bindingsByRootAndName,i=n[e],o=this._bindings;void 0===i&&(i={},n[e]=i),i[r]=t,t._cacheIndex=o.length,o.push(t)},_removeInactiveBinding:function(t){var e=this._bindings,r=t.binding,n=r.rootNode.uuid,r=r.path,i=this._bindingsByRootAndName,o=i[n],a=e[e.length-1];t=t._cacheIndex,a._cacheIndex=t,e[t]=a,e.pop(),delete o[r];t:{for(var s in o)break t;delete i[n]}},_lendBinding:function(t){var e=this._bindings,r=t._cacheIndex,n=this._nActiveBindings++,i=e[n];t._cacheIndex=n,e[n]=t,i._cacheIndex=r,e[r]=i},_takeBackBinding:function(t){var e=this._bindings,r=t._cacheIndex,n=--this._nActiveBindings,i=e[n];t._cacheIndex=n,e[n]=t,i._cacheIndex=r,e[r]=i},_lendControlInterpolant:function(){var t=this._controlInterpolants,e=this._nActiveControlInterpolants++,r=t[e];return void 0===r&&(r=new Lr(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer),r.__cacheIndex=e,t[e]=r),r},_takeBackControlInterpolant:function(t){var e=this._controlInterpolants,r=t.__cacheIndex,n=--this._nActiveControlInterpolants,i=e[n];t.__cacheIndex=n,e[n]=t,i.__cacheIndex=r,e[r]=i},_controlInterpolantsResultBuffer:new Float32Array(1)}),wn.prototype.clone=function(){return new wn(void 0===this.value.clone?this.value:this.value.clone())},Sn.prototype=Object.create(wt.prototype),Sn.prototype.constructor=Sn,Sn.prototype.isInstancedBufferGeometry=!0,Sn.prototype.addGroup=function(t,e,r){this.groups.push({start:t,count:e,materialIndex:r})},Sn.prototype.copy=function(t){var e=t.index;null!==e&&this.setIndex(e.clone());var r,e=t.attributes;for(r in e)this.addAttribute(r,e[r].clone());for(t=t.groups,r=0,e=t.length;r<e;r++){var n=t[r];this.addGroup(n.start,n.count,n.materialIndex)}return this},Mn.prototype={constructor:Mn,isInterleavedBufferAttribute:!0,get count(){return this.data.count},get array(){return this.data.array},setX:function(t,e){return this.data.array[t*this.data.stride+this.offset]=e,this},setY:function(t,e){return this.data.array[t*this.data.stride+this.offset+1]=e,this},setZ:function(t,e){return this.data.array[t*this.data.stride+this.offset+2]=e,this},setW:function(t,e){return this.data.array[t*this.data.stride+this.offset+3]=e,this},getX:function(t){return this.data.array[t*this.data.stride+this.offset]},getY:function(t){return this.data.array[t*this.data.stride+this.offset+1]},getZ:function(t){return this.data.array[t*this.data.stride+this.offset+2]},getW:function(t){return this.data.array[t*this.data.stride+this.offset+3]},setXY:function(t,e,r){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=r,this},setXYZ:function(t,e,r,n){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=r,this.data.array[t+2]=n,this},setXYZW:function(t,e,r,n,i){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=r,this.data.array[t+2]=n,this.data.array[t+3]=i,this}},En.prototype={constructor:En,isInterleavedBuffer:!0,set needsUpdate(t){!0===t&&this.version++},setArray:function(t){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.count=void 0!==t?t.length/this.stride:0,this.array=t},setDynamic:function(t){return this.dynamic=t,this},copy:function(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.dynamic=t.dynamic,this},copyAt:function(t,e,r){t*=this.stride,r*=e.stride;for(var n=0,i=this.stride;n<i;n++)this.array[t+n]=e.array[r+n];return this},set:function(t,e){return void 0===e&&(e=0),this.array.set(t,e),this},clone:function(){return(new this.constructor).copy(this)},onUpload:function(t){return this.onUploadCallback=t,this}},Tn.prototype=Object.create(En.prototype),Tn.prototype.constructor=Tn,Tn.prototype.isInstancedInterleavedBuffer=!0,Tn.prototype.copy=function(t){return En.prototype.copy.call(this,t),this.meshPerAttribute=t.meshPerAttribute,this},Cn.prototype=Object.create(ht.prototype),Cn.prototype.constructor=Cn,Cn.prototype.isInstancedBufferAttribute=!0,Cn.prototype.copy=function(t){return ht.prototype.copy.call(this,t),this.meshPerAttribute=t.meshPerAttribute,this},On.prototype={constructor:On,linePrecision:1,set:function(t,e){this.ray.set(t,e)},setFromCamera:function(t,e){e&&e.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(e.matrixWorld),this.ray.direction.set(t.x,t.y,.5).unproject(e).sub(this.ray.origin).normalize()):e&&e.isOrthographicCamera?(this.ray.origin.set(t.x,t.y,(e.near+e.far)/(e.near-e.far)).unproject(e),this.ray.direction.set(0,0,-1).transformDirection(e.matrixWorld)):console.error("THREE.Raycaster: Unsupported camera type.")},intersectObject:function(t,e){var r=[];return An(t,this,r,e),r.sort(Pn),r},intersectObjects:function(t,e){var r=[];if(!1===Array.isArray(t))return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."),r;for(var n=0,i=t.length;n<i;n++)An(t[n],this,r,e);return r.sort(Pn),r}},jn.prototype={constructor:jn,start:function(){this.oldTime=this.startTime=(performance||Date).now(),this.elapsedTime=0,this.running=!0},stop:function(){this.getElapsedTime(),this.running=!1},getElapsedTime:function(){return this.getDelta(),this.elapsedTime},getDelta:function(){var t=0;if(this.autoStart&&!this.running&&this.start(),this.running){var e=(performance||Date).now(),t=(e-this.oldTime)/1e3;this.oldTime=e,this.elapsedTime+=t}return t}},Rn.prototype={constructor:Rn,set:function(t,e,r){return this.radius=t,this.phi=e,this.theta=r,this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.radius=t.radius,this.phi=t.phi,this.theta=t.theta,this},makeSafe:function(){return this.phi=Math.max(1e-6,Math.min(Math.PI-1e-6,this.phi)),this},setFromVector3:function(t){return this.radius=t.length(),0===this.radius?this.phi=this.theta=0:(this.theta=Math.atan2(t.x,t.z),this.phi=Math.acos(ri.clamp(t.y/this.radius,-1,1))),this}},Ln.prototype={constructor:Ln,set:function(t,e,r){return this.radius=t,this.theta=e,this.y=r,this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.radius=t.radius,this.theta=t.theta,this.y=t.y,this},setFromVector3:function(t){return this.radius=Math.sqrt(t.x*t.x+t.z*t.z),this.theta=Math.atan2(t.x,t.z),this.y=t.y,this}},Nn.prototype=Object.create(St.prototype),Nn.prototype.constructor=Nn,Nn.prototype.createAnimation=function(t,e,r,n){e={start:e,end:r,length:r-e+1,fps:n,duration:(r-e)/n,lastFrame:0,currentFrame:0,active:!1,time:0,direction:1,weight:1,directionBackwards:!1,mirroredLoop:!1},this.animationsMap[t]=e,this.animationsList.push(e)},Nn.prototype.autoCreateAnimations=function(t){for(var e,r={},n=this.geometry,i=0,o=n.morphTargets.length;i<o;i++){var a=n.morphTargets[i].name.match(/([a-z]+)_?(\d+)/i);if(a&&1<a.length){var s=a[1];r[s]||(r[s]={start:1/0,end:-(1/0)}),a=r[s],i<a.start&&(a.start=i),i>a.end&&(a.end=i),e||(e=s)}}for(s in r)a=r[s],this.createAnimation(s,a.start,a.end,t);this.firstAnimation=e},Nn.prototype.setAnimationDirectionForward=function(t){(t=this.animationsMap[t])&&(t.direction=1,t.directionBackwards=!1)},Nn.prototype.setAnimationDirectionBackward=function(t){(t=this.animationsMap[t])&&(t.direction=-1,t.directionBackwards=!0)},Nn.prototype.setAnimationFPS=function(t,e){var r=this.animationsMap[t];r&&(r.fps=e,r.duration=(r.end-r.start)/r.fps)},Nn.prototype.setAnimationDuration=function(t,e){var r=this.animationsMap[t];r&&(r.duration=e,r.fps=(r.end-r.start)/r.duration)},Nn.prototype.setAnimationWeight=function(t,e){var r=this.animationsMap[t];r&&(r.weight=e)},Nn.prototype.setAnimationTime=function(t,e){var r=this.animationsMap[t];r&&(r.time=e)},Nn.prototype.getAnimationTime=function(t){var e=0;return(t=this.animationsMap[t])&&(e=t.time),e},Nn.prototype.getAnimationDuration=function(t){var e=-1;return(t=this.animationsMap[t])&&(e=t.duration),e},Nn.prototype.playAnimation=function(t){var e=this.animationsMap[t];e?(e.time=0,e.active=!0):console.warn("THREE.MorphBlendMesh: animation["+t+"] undefined in .playAnimation()")},Nn.prototype.stopAnimation=function(t){(t=this.animationsMap[t])&&(t.active=!1)},Nn.prototype.update=function(t){for(var e=0,r=this.animationsList.length;e<r;e++){var n=this.animationsList[e];if(n.active){var i=n.duration/n.length;n.time+=n.direction*t,n.mirroredLoop?(n.time>n.duration||0>n.time)&&(n.direction*=-1,n.time>n.duration&&(n.time=n.duration,n.directionBackwards=!0),0>n.time&&(n.time=0,n.directionBackwards=!1)):(n.time%=n.duration,0>n.time&&(n.time+=n.duration));var o=n.start+ri.clamp(Math.floor(n.time/i),0,n.length-1),a=n.weight;o!==n.currentFrame&&(this.morphTargetInfluences[n.lastFrame]=0,this.morphTargetInfluences[n.currentFrame]=1*a,this.morphTargetInfluences[o]=0,n.lastFrame=n.currentFrame,n.currentFrame=o),i=n.time%i/i,n.directionBackwards&&(i=1-i),n.currentFrame!==n.lastFrame?(this.morphTargetInfluences[n.currentFrame]=i*a,this.morphTargetInfluences[n.lastFrame]=(1-i)*a):this.morphTargetInfluences[n.currentFrame]=a}}},In.prototype=Object.create(ot.prototype),In.prototype.constructor=In,In.prototype.isImmediateRenderObject=!0,Dn.prototype=Object.create(fe.prototype),Dn.prototype.constructor=Dn,Dn.prototype.update=function(){var t=new c,e=new c,r=new J;return function(){var n=["a","b","c"];this.object.updateMatrixWorld(!0),r.getNormalMatrix(this.object.matrixWorld);var i=this.object.matrixWorld,o=this.geometry.attributes.position,a=this.object.geometry;if(a&&a.isGeometry)for(var s=a.vertices,c=a.faces,u=a=0,h=c.length;u<h;u++)for(var l=c[u],p=0,f=l.vertexNormals.length;p<f;p++){var d=l.vertexNormals[p];t.copy(s[l[n[p]]]).applyMatrix4(i),e.copy(d).applyMatrix3(r).normalize().multiplyScalar(this.size).add(t),o.setXYZ(a,t.x,t.y,t.z),a+=1,o.setXYZ(a,e.x,e.y,e.z),a+=1}else if(a&&a.isBufferGeometry)for(n=a.attributes.position,s=a.attributes.normal,p=a=0,f=n.count;p<f;p++)t.set(n.getX(p),n.getY(p),n.getZ(p)).applyMatrix4(i),e.set(s.getX(p),s.getY(p),s.getZ(p)),e.applyMatrix3(r).normalize().multiplyScalar(this.size).add(t),o.setXYZ(a,t.x,t.y,t.z),a+=1,o.setXYZ(a,e.x,e.y,e.z),a+=1;return o.needsUpdate=!0,this}}(),kn.prototype=Object.create(ot.prototype),kn.prototype.constructor=kn,kn.prototype.dispose=function(){this.cone.geometry.dispose(),this.cone.material.dispose()},kn.prototype.update=function(){var t=new c,e=new c;return function(){var r=this.light.distance?this.light.distance:1e3,n=r*Math.tan(this.light.angle);this.cone.scale.set(n,n,r),t.setFromMatrixPosition(this.light.matrixWorld),e.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(e.sub(t)),this.cone.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)}}(),Fn.prototype=Object.create(fe.prototype),Fn.prototype.constructor=Fn,Fn.prototype.getBoneList=function(t){var e=[];t&&t.isBone&&e.push(t);for(var r=0;r<t.children.length;r++)e.push.apply(e,this.getBoneList(t.children[r]));return e},Fn.prototype.update=function(){var t=new c,e=new u,r=new u;return function(){var n=this.geometry,i=n.getAttribute("position");r.getInverse(this.root.matrixWorld);for(var o=0,a=0;o<this.bones.length;o++){var s=this.bones[o];s.parent&&s.parent.isBone&&(e.multiplyMatrices(r,s.matrixWorld),t.setFromMatrixPosition(e),i.setXYZ(a,t.x,t.y,t.z),e.multiplyMatrices(r,s.parent.matrixWorld),t.setFromMatrixPosition(e),i.setXYZ(a+1,t.x,t.y,t.z),a+=2)}n.getAttribute("position").needsUpdate=!0}}(),Un.prototype=Object.create(St.prototype),Un.prototype.constructor=Un,Un.prototype.dispose=function(){this.geometry.dispose(),this.material.dispose()},Un.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)},Bn.prototype=Object.create(ot.prototype),Bn.prototype.constructor=Bn,Bn.prototype.dispose=function(){this.children[0].geometry.dispose(),this.children[0].material.dispose(),this.children[1].geometry.dispose(),this.children[1].material.dispose()},Bn.prototype.update=function(){var t=new c,e=new c;return function(){var r=this.children[0],n=this.children[1];if(this.light.target){t.setFromMatrixPosition(this.light.matrixWorld),e.setFromMatrixPosition(this.light.target.matrixWorld);var i=e.clone().sub(t);r.lookAt(i),n.lookAt(i)}r.material.color.copy(this.light.color).multiplyScalar(this.light.intensity),n.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);var n=.5*this.light.width,i=.5*this.light.height,r=r.geometry.getAttribute("position"),o=r.array;o[0]=n,o[1]=-i,o[2]=0,o[3]=n,o[4]=i,o[5]=0,o[6]=-n,o[7]=i,o[8]=0,o[9]=-n,o[10]=i,o[11]=0,o[12]=-n,o[13]=-i,o[14]=0,o[15]=n,o[16]=-i,o[17]=0,r.needsUpdate=!0}}(),zn.prototype=Object.create(ot.prototype),zn.prototype.constructor=zn,zn.prototype.dispose=function(){this.children[0].geometry.dispose(),this.children[0].material.dispose()},zn.prototype.update=function(){var t=new c,e=new $,r=new $;return function(){var n=this.children[0],i=n.geometry.getAttribute("color");e.copy(this.light.color).multiplyScalar(this.light.intensity),r.copy(this.light.groundColor).multiplyScalar(this.light.intensity);for(var o=0,a=i.count;o<a;o++){var s=o<a/2?e:r;i.setXYZ(o,s.r,s.g,s.b)}n.lookAt(t.setFromMatrixPosition(this.light.matrixWorld).negate()),i.needsUpdate=!0}}(),$n.prototype=Object.create(fe.prototype),$n.prototype.constructor=$n,Gn.prototype=Object.create(fe.prototype),Gn.prototype.constructor=Gn,Vn.prototype=Object.create(fe.prototype),Vn.prototype.constructor=Vn,Vn.prototype.update=function(){var t=new c,e=new c,r=new J;return function(){this.object.updateMatrixWorld(!0),r.getNormalMatrix(this.object.matrixWorld);for(var n=this.object.matrixWorld,i=this.geometry.attributes.position,o=this.object.geometry,a=o.vertices,o=o.faces,s=0,c=0,u=o.length;c<u;c++){var h=o[c],l=h.normal;t.copy(a[h.a]).add(a[h.b]).add(a[h.c]).divideScalar(3).applyMatrix4(n),e.copy(l).applyMatrix3(r).normalize().multiplyScalar(this.size).add(t),i.setXYZ(s,t.x,t.y,t.z),s+=1,i.setXYZ(s,e.x,e.y,e.z),s+=1}return i.needsUpdate=!0,this}}(),Hn.prototype=Object.create(ot.prototype),Hn.prototype.constructor=Hn,Hn.prototype.dispose=function(){var t=this.children[0],e=this.children[1];t.geometry.dispose(),t.material.dispose(),e.geometry.dispose(),e.material.dispose()},Hn.prototype.update=function(){var t=new c,e=new c,r=new c;return function(){t.setFromMatrixPosition(this.light.matrixWorld),e.setFromMatrixPosition(this.light.target.matrixWorld),r.subVectors(e,t);var n=this.children[0],i=this.children[1];n.lookAt(r),n.material.color.copy(this.light.color).multiplyScalar(this.light.intensity),i.lookAt(r),i.scale.z=r.length()}}(),Wn.prototype=Object.create(fe.prototype),
-Wn.prototype.constructor=Wn,Wn.prototype.update=function(){function t(t,o,a,s){if(n.set(o,a,s).unproject(i),void 0!==(t=r[t]))for(o=e.getAttribute("position"),a=0,s=t.length;a<s;a++)o.setXYZ(t[a],n.x,n.y,n.z)}var e,r,n=new c,i=new Tt;return function(){e=this.geometry,r=this.pointMap,i.projectionMatrix.copy(this.camera.projectionMatrix),t("c",0,0,-1),t("t",0,0,1),t("n1",-1,-1,-1),t("n2",1,-1,-1),t("n3",-1,1,-1),t("n4",1,1,-1),t("f1",-1,-1,1),t("f2",1,-1,1),t("f3",-1,1,1),t("f4",1,1,1),t("u1",.7,1.1,-1),t("u2",-.7,1.1,-1),t("u3",0,2,-1),t("cf1",-1,0,1),t("cf2",1,0,1),t("cf3",0,-1,1),t("cf4",0,1,1),t("cn1",-1,0,-1),t("cn2",1,0,-1),t("cn3",0,-1,-1),t("cn4",0,1,-1),e.getAttribute("position").needsUpdate=!0}}(),qn.prototype=Object.create(fe.prototype),qn.prototype.constructor=qn,qn.prototype.update=function(){var t=new K;return function(e){if(e&&e.isBox3?t.copy(e):t.setFromObject(e),!t.isEmpty()){e=t.min;var r=t.max,n=this.geometry.attributes.position,i=n.array;i[0]=r.x,i[1]=r.y,i[2]=r.z,i[3]=e.x,i[4]=r.y,i[5]=r.z,i[6]=e.x,i[7]=e.y,i[8]=r.z,i[9]=r.x,i[10]=e.y,i[11]=r.z,i[12]=r.x,i[13]=r.y,i[14]=e.z,i[15]=e.x,i[16]=r.y,i[17]=e.z,i[18]=e.x,i[19]=e.y,i[20]=e.z,i[21]=r.x,i[22]=e.y,i[23]=e.z,n.needsUpdate=!0,this.geometry.computeBoundingSphere()}}}();var Pi=new wt;Pi.addAttribute("position",new yt([0,0,0,0,1,0],3));var Ai=new Je(0,.5,1,5,1);Ai.translate(0,-.5,0),Xn.prototype=Object.create(ot.prototype),Xn.prototype.constructor=Xn,Xn.prototype.setDirection=function(){var t,e=new c;return function(r){.99999<r.y?this.quaternion.set(0,0,0,1):-.99999>r.y?this.quaternion.set(1,0,0,0):(e.set(r.z,0,-r.x).normalize(),t=Math.acos(r.y),this.quaternion.setFromAxisAngle(e,t))}}(),Xn.prototype.setLength=function(t,e,r){void 0===e&&(e=.2*t),void 0===r&&(r=.2*e),this.line.scale.set(1,Math.max(0,t-e),1),this.line.updateMatrix(),this.cone.scale.set(r,e,r),this.cone.position.y=t,this.cone.updateMatrix()},Xn.prototype.setColor=function(t){this.line.material.color.copy(t),this.cone.material.color.copy(t)},Yn.prototype=Object.create(fe.prototype),Yn.prototype.constructor=Yn;var ji=function(){function t(){}var e=new c,r=new t,n=new t,i=new t;return t.prototype.init=function(t,e,r,n){this.c0=t,this.c1=r,this.c2=-3*t+3*e-2*r-n,this.c3=2*t-2*e+r+n},t.prototype.initNonuniformCatmullRom=function(t,e,r,n,i,o,a){this.init(e,r,((e-t)/i-(r-t)/(i+o)+(r-e)/o)*o,((r-e)/o-(n-e)/(o+a)+(n-r)/a)*o)},t.prototype.initCatmullRom=function(t,e,r,n,i){this.init(e,r,i*(r-t),i*(n-e))},t.prototype.calc=function(t){var e=t*t;return this.c0+this.c1*t+this.c2*e+this.c3*e*t},Kr.create(function(t){this.points=t||[],this.closed=!1},function(t){var o,a,s=this.points;a=s.length,2>a&&console.log("duh, you need at least 2 points"),t*=a-(this.closed?0:1),o=Math.floor(t),t-=o,this.closed?o+=0<o?0:(Math.floor(Math.abs(o)/s.length)+1)*s.length:0===t&&o===a-1&&(o=a-2,t=1);var u,h,l;if(this.closed||0<o?u=s[(o-1)%a]:(e.subVectors(s[0],s[1]).add(s[0]),u=e),h=s[o%a],l=s[(o+1)%a],this.closed||o+2<a?s=s[(o+2)%a]:(e.subVectors(s[a-1],s[a-2]).add(s[a-1]),s=e),void 0===this.type||"centripetal"===this.type||"chordal"===this.type){var p="chordal"===this.type?.5:.25;a=Math.pow(u.distanceToSquared(h),p),o=Math.pow(h.distanceToSquared(l),p),p=Math.pow(l.distanceToSquared(s),p),1e-4>o&&(o=1),1e-4>a&&(a=o),1e-4>p&&(p=o),r.initNonuniformCatmullRom(u.x,h.x,l.x,s.x,a,o,p),n.initNonuniformCatmullRom(u.y,h.y,l.y,s.y,a,o,p),i.initNonuniformCatmullRom(u.z,h.z,l.z,s.z,a,o,p)}else"catmullrom"===this.type&&(a=void 0!==this.tension?this.tension:.5,r.initCatmullRom(u.x,h.x,l.x,s.x,a),n.initCatmullRom(u.y,h.y,l.y,s.y,a),i.initCatmullRom(u.z,h.z,l.z,s.z,a));return new c(r.calc(t),n.calc(t),i.calc(t))})}(),Ri=Kr.create(function(t){console.warn("THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3"),this.points=void 0===t?[]:t},function(t){var e=this.points;t*=e.length-1;var r=Math.floor(t);t-=r;var n=e[0==r?r:r-1],i=e[r],o=e[r>e.length-2?e.length-1:r+1],e=e[r>e.length-3?e.length-1:r+2],r=Ei.interpolate;return new c(r(n.x,i.x,o.x,e.x,t),r(n.y,i.y,o.y,e.y,t),r(n.z,i.z,o.z,e.z,t))}),Li=Kr.create(function(t,e,r,n){this.v0=t,this.v1=e,this.v2=r,this.v3=n},function(t){var e=yi.b3;return new c(e(t,this.v0.x,this.v1.x,this.v2.x,this.v3.x),e(t,this.v0.y,this.v1.y,this.v2.y,this.v3.y),e(t,this.v0.z,this.v1.z,this.v2.z,this.v3.z))}),Ni=Kr.create(function(t,e,r){this.v0=t,this.v1=e,this.v2=r},function(t){var e=yi.b2;return new c(e(t,this.v0.x,this.v1.x,this.v2.x),e(t,this.v0.y,this.v1.y,this.v2.y),e(t,this.v0.z,this.v1.z,this.v2.z))}),Ii=Kr.create(function(t,e){this.v1=t,this.v2=e},function(t){if(1===t)return this.v2.clone();var e=new c;return e.subVectors(this.v2,this.v1),e.multiplyScalar(t),e.add(this.v1),e});Kn.prototype=Object.create(Qr.prototype),Kn.prototype.constructor=Kn,Zn.prototype=Object.create(ji.prototype),$n.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")},Object.assign(V.prototype,{center:function(t){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},size:function(t){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(K.prototype,{center:function(t){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionSphere:function(t){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},size:function(t){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(t)}}),at.prototype.center=function(t){return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),this.getCenter(t)},ri.random16=function(){return console.warn("THREE.Math.random16() has been deprecated. Use Math.random() instead."),Math.random()},Object.assign(J.prototype,{flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},multiplyVector3:function(t){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},multiplyVector3Array:function(t){return console.warn("THREE.Matrix3: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead."),this.applyToVector3Array(t)},applyToBuffer:function(t,e,r){return console.warn("THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead."),this.applyToBufferAttribute(t)}}),Object.assign(u.prototype,{extractPosition:function(t){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(t)},flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},getPosition:function(){var t;return function(){return void 0===t&&(t=new c),console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),t.setFromMatrixColumn(this,3)}}(),setRotationFromQuaternion:function(t){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(t)},multiplyVector3:function(t){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead."),t.applyProjection(this)},multiplyVector4:function(t){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector3Array:function(t){return console.warn("THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead."),this.applyToVector3Array(t)},rotateAxis:function(t){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),t.transformDirection(this)},crossVector:function(t){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},rotateY:function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},rotateByAxis:function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},applyToBuffer:function(t,e,r){return console.warn("THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead."),this.applyToBufferAttribute(t)}}),Q.prototype.isIntersectionLine=function(t){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(t)},s.prototype.multiplyVector3=function(t){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),t.applyQuaternion(this)},Object.assign(rt.prototype,{isIntersectionBox:function(t){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionPlane:function(t){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(t)},isIntersectionSphere:function(t){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)}}),Object.assign(nn.prototype,{extrude:function(t){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new Be(this,t)},makeGeometry:function(t){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new Ke(this,t)}}),Object.assign(c.prototype,{setEulerFromRotationMatrix:function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},getPositionFromMatrix:function(t){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(t)},getScaleFromMatrix:function(t){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(t)},getColumnFromMatrix:function(t,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(e,t)}}),xt.prototype.computeTangents=function(){console.warn("THREE.Geometry: .computeTangents() has been removed.")},Object.assign(ot.prototype,{getChildByName:function(t){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(t)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(t,e){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(e,t)}}),Object.defineProperties(ot.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(t){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=t}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),Object.defineProperties(se.prototype,{objects:{get:function(){return console.warn("THREE.LOD: .objects has been renamed to .levels."),this.levels}}}),Ct.prototype.setLens=function(t,e){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(wr.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(t){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(t){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(t){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=t}}}),Object.defineProperties(ht.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}}}),Object.assign(wt.prototype,{addIndex:function(t){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(t)},addDrawCall:function(t,e,r){void 0!==r&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(t,e)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},computeTangents:function(){console.warn("THREE.BufferGeometry: .computeTangents() has been removed.")},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")}}),Object.defineProperties(wt.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),Object.defineProperties(wn.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this}}}),Object.defineProperties(q.prototype,{wrapAround:{get:function(){console.warn("THREE."+this.type+": .wrapAround has been removed.")},set:function(){console.warn("THREE."+this.type+": .wrapAround has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE."+this.type+": .wrapRGB has been removed."),new $}}}),Object.defineProperties(hr.prototype,{metal:{get:function(){return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."),!1},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}}),Object.defineProperties(X.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(t){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=t}}}),e.prototype=Object.assign(Object.create({constructor:e,apply:function(t){console.warn("THREE.EventDispatcher: .apply is deprecated, just inherit or Object.assign the prototype to mix-in."),Object.assign(t,this)}}),e.prototype),Object.assign(te.prototype,{supportsFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},supportsCompressedTexturePVRTC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},supportsInstancedArrays:function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(t){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(t)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")}}),Object.defineProperties(te.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){return this.shadowMap.cullFace},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapCullFace is now .shadowMap.cullFace."),this.shadowMap.cullFace=t}}}),Object.defineProperties(et.prototype,{cullFace:{get:function(){return this.renderReverseSided?2:1},set:function(t){t=1!==t,console.warn("WebGLRenderer: .shadowMap.cullFace is deprecated. Set .shadowMap.renderReverseSided to "+t+"."),this.renderReverseSided=t}}}),Object.defineProperties(o.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(t){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=t}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(t){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=t}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(t){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=t}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(t){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=t}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(t){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(t){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=t}}}),dn.prototype.load=function(t){console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");var e=this;return(new un).load(t,function(t){e.setBuffer(t)}),this},vn.prototype.getData=function(){return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."),this.getFrequencyData()},t.WebGLRenderTargetCube=a,t.WebGLRenderTarget=o,t.WebGLRenderer=te,t.ShaderLib=fi,t.UniformsLib=pi,t.UniformsUtils=ui,t.ShaderChunk=hi,t.FogExp2=ee,t.Fog=re,t.Scene=ne,t.LensFlare=ie,t.Sprite=ae,t.LOD=se,t.SkinnedMesh=he,t.Skeleton=ce,t.Bone=ue,t.Mesh=St,t.LineSegments=fe,t.Line=pe,t.Points=me,t.Group=ve,t.VideoTexture=ge,t.DataTexture=G,t.CompressedTexture=ye,t.CubeTexture=h,t.CanvasTexture=be,t.DepthTexture=_e,t.Texture=n,t.CompressedTextureLoader=gr,t.BinaryTextureLoader=yr,t.DataTextureLoader=yr,t.CubeTextureLoader=_r,t.TextureLoader=xr,t.ObjectLoader=Yr,t.MaterialLoader=Hr,t.BufferGeometryLoader=Wr,t.DefaultLoadingManager=wi,t.LoadingManager=mr,t.JSONLoader=Xr,t.ImageLoader=br,t.FontLoader=cn,t.FileLoader=vr,t.Loader=qr,t.Cache=xi,t.AudioLoader=un,t.SpotLightShadow=Er,t.SpotLight=Tr,t.PointLight=Cr,t.RectAreaLight=hn,t.HemisphereLight=Sr,t.DirectionalLightShadow=Or,t.DirectionalLight=Pr,t.AmbientLight=Ar,t.LightShadow=Mr,t.Light=wr,t.StereoCamera=ln,t.PerspectiveCamera=Ct,t.OrthographicCamera=Ot,t.CubeCamera=pn,t.Camera=Tt,t.AudioListener=fn,t.PositionalAudio=mn,t.AudioContext=Oi,t.AudioAnalyser=vn,t.Audio=dn,t.VectorKeyframeTrack=Dr,t.StringKeyframeTrack=Br,t.QuaternionKeyframeTrack=Fr,t.NumberKeyframeTrack=Ur,t.ColorKeyframeTrack=$r,t.BooleanKeyframeTrack=zr,t.PropertyMixer=gn,t.PropertyBinding=yn,t.KeyframeTrack=Gr,t.AnimationUtils=Si,t.AnimationObjectGroup=bn,t.AnimationMixer=xn,t.AnimationClip=Vr,t.Uniform=wn,t.InstancedBufferGeometry=Sn,t.BufferGeometry=wt,t.GeometryIdCount=function(){return vi++},t.Geometry=xt,t.InterleavedBufferAttribute=Mn,t.InstancedInterleavedBuffer=Tn,t.InterleavedBuffer=En,t.InstancedBufferAttribute=Cn,t.Face3=ct,t.Object3D=ot,t.Raycaster=On,t.Layers=it,t.EventDispatcher=e,t.Clock=jn,t.QuaternionLinearInterpolant=kr,t.LinearInterpolant=Lr,t.DiscreteInterpolant=Nr,t.CubicInterpolant=Rr,t.Interpolant=jr,t.Triangle=st,t.Spline=function(t){function e(t,e,r,n,i,o,a){return t=.5*(r-t),n=.5*(n-e),(2*(e-r)+t+n)*a+(-3*(e-r)-2*t-n)*o+t*i+e}this.points=t;var r,n,i,o,a,s,u,h,l,p=[],f={x:0,y:0,z:0};this.initFromArray=function(t){this.points=[];for(var e=0;e<t.length;e++)this.points[e]={x:t[e][0],y:t[e][1],z:t[e][2]}},this.getPoint=function(t){return r=(this.points.length-1)*t,n=Math.floor(r),i=r-n,p[0]=0===n?n:n-1,p[1]=n,p[2]=n>this.points.length-2?this.points.length-1:n+1,p[3]=n>this.points.length-3?this.points.length-1:n+2,s=this.points[p[0]],u=this.points[p[1]],h=this.points[p[2]],l=this.points[p[3]],o=i*i,a=i*o,f.x=e(s.x,u.x,h.x,l.x,i,o,a),f.y=e(s.y,u.y,h.y,l.y,i,o,a),f.z=e(s.z,u.z,h.z,l.z,i,o,a),f},this.getControlPointsArray=function(){var t,e,r=this.points.length,n=[];for(t=0;t<r;t++)e=this.points[t],n[t]=[e.x,e.y,e.z];return n},this.getLength=function(t){var e,r,n,i=0,o=new c,a=new c,s=[],u=0;for(s[0]=0,t||(t=100),r=this.points.length*t,o.copy(this.points[0]),t=1;t<r;t++)e=t/r,n=this.getPoint(e),a.copy(n),u+=a.distanceTo(o),o.copy(n),e*=this.points.length-1,(e=Math.floor(e))!==i&&(s[e]=u,i=e);return s[s.length]=u,{chunks:s,total:u}},this.reparametrizeByArcLength=function(t){var e,r,n,i,o,a,s=[],u=new c,h=this.getLength();for(s.push(u.copy(this.points[0]).clone()),e=1;e<this.points.length;e++){for(r=h.chunks[e]-h.chunks[e-1],a=Math.ceil(t*r/h.total),i=(e-1)/(this.points.length-1),o=e/(this.points.length-1),r=1;r<a-1;r++)n=i+1/a*r*(o-i),n=this.getPoint(n),s.push(u.copy(n).clone());s.push(u.copy(this.points[e]).clone())}this.points=s}},t.Math=ri,t.Spherical=Rn,t.Cylindrical=Ln,t.Plane=Q,t.Frustum=tt,t.Sphere=Z,t.Ray=rt,t.Matrix4=u,t.Matrix3=J,t.Box3=K,t.Box2=V,t.Line3=at,t.Euler=nt,t.Vector4=i,t.Vector3=c,t.Vector2=r,t.Quaternion=s,t.Color=$,t.MorphBlendMesh=Nn,t.ImmediateRenderObject=In,t.VertexNormalsHelper=Dn,t.SpotLightHelper=kn,t.SkeletonHelper=Fn,t.PointLightHelper=Un,t.RectAreaLightHelper=Bn,t.HemisphereLightHelper=zn,t.GridHelper=$n,t.PolarGridHelper=Gn,t.FaceNormalsHelper=Vn,t.DirectionalLightHelper=Hn,t.CameraHelper=Wn,t.BoxHelper=qn,t.ArrowHelper=Xn,t.AxisHelper=Yn,t.CatmullRomCurve3=ji,t.SplineCurve3=Ri,t.CubicBezierCurve3=Li,t.QuadraticBezierCurve3=Ni,t.LineCurve3=Ii,t.ArcCurve=Kn,t.EllipseCurve=Qr,t.SplineCurve=tn,t.CubicBezierCurve=en,t.QuadraticBezierCurve=rn,t.LineCurve=Zr,t.Shape=nn,t.ShapePath=an,t.Path=on,t.Font=sn,t.CurvePath=Jr,t.Curve=Kr,t.ShapeUtils=yi,t.SceneUtils={createMultiMaterialObject:function(t,e){for(var r=new ve,n=0,i=e.length;n<i;n++)r.add(new St(t,e[n]));return r},detach:function(t,e,r){t.applyMatrix(e.matrixWorld),e.remove(t),r.add(t)},attach:function(t,e,r){var n=new u;n.getInverse(r.matrixWorld),t.applyMatrix(n),e.remove(t),r.add(t)}},t.CurveUtils=Ei,t.WireframeGeometry=xe,t.ParametricGeometry=Se,t.ParametricBufferGeometry=we,t.TetrahedronGeometry=Te,t.TetrahedronBufferGeometry=Ee,t.OctahedronGeometry=Oe,t.OctahedronBufferGeometry=Ce,t.IcosahedronGeometry=Ae,t.IcosahedronBufferGeometry=Pe,t.DodecahedronGeometry=Re,t.DodecahedronBufferGeometry=je;t.PolyhedronGeometry=Le,t.PolyhedronBufferGeometry=Me,t.TubeGeometry=Ie,t.TubeBufferGeometry=Ne,t.TorusKnotGeometry=ke,t.TorusKnotBufferGeometry=De,t.TorusGeometry=Ue,t.TorusBufferGeometry=Fe,t.TextGeometry=ze,t.SphereBufferGeometry=$e,t.SphereGeometry=Ge,t.RingGeometry=He,t.RingBufferGeometry=Ve,t.PlaneBufferGeometry=Et,t.PlaneGeometry=We,t.LatheGeometry=Xe,t.LatheBufferGeometry=qe,t.ShapeGeometry=Ke,t.ShapeBufferGeometry=Ye,t.ExtrudeGeometry=Be,t.EdgesGeometry=Ze,t.ConeGeometry=tr,t.ConeBufferGeometry=er,t.CylinderGeometry=Qe,t.CylinderBufferGeometry=Je,t.CircleBufferGeometry=rr,t.CircleGeometry=nr,t.BoxBufferGeometry=Mt,t.BoxGeometry=ir,t.ShadowMaterial=or,t.SpriteMaterial=oe,t.RawShaderMaterial=ar,t.ShaderMaterial=X,t.PointsMaterial=de,t.MultiMaterial=sr,t.MeshPhysicalMaterial=ur,t.MeshStandardMaterial=cr,t.MeshPhongMaterial=hr,t.MeshToonMaterial=lr,t.MeshNormalMaterial=pr,t.MeshLambertMaterial=fr,t.MeshDepthMaterial=Y,t.MeshBasicMaterial=ut,t.LineDashedMaterial=dr,t.LineBasicMaterial=le,t.Material=q,t.Float64BufferAttribute=bt,t.Float32BufferAttribute=yt,t.Uint32BufferAttribute=gt,t.Int32BufferAttribute=vt,t.Uint16BufferAttribute=mt,t.Int16BufferAttribute=dt,t.Uint8ClampedBufferAttribute=ft,t.Uint8BufferAttribute=pt,t.Int8BufferAttribute=lt,t.BufferAttribute=ht,t.REVISION="83",t.MOUSE={LEFT:0,MIDDLE:1,RIGHT:2},t.CullFaceNone=0,t.CullFaceBack=1,t.CullFaceFront=2,t.CullFaceFrontBack=3,t.FrontFaceDirectionCW=0,t.FrontFaceDirectionCCW=1,t.BasicShadowMap=0,t.PCFShadowMap=1,t.PCFSoftShadowMap=2,t.FrontSide=0,t.BackSide=1,t.DoubleSide=2,t.FlatShading=1,t.SmoothShading=2,t.NoColors=0,t.FaceColors=1,t.VertexColors=2,t.NoBlending=0,t.NormalBlending=1,t.AdditiveBlending=2,t.SubtractiveBlending=3,t.MultiplyBlending=4,t.CustomBlending=5,t.BlendingMode=Jn,t.AddEquation=100,t.SubtractEquation=101,t.ReverseSubtractEquation=102,t.MinEquation=103,t.MaxEquation=104,t.ZeroFactor=200,t.OneFactor=201,t.SrcColorFactor=202,t.OneMinusSrcColorFactor=203,t.SrcAlphaFactor=204,t.OneMinusSrcAlphaFactor=205,t.DstAlphaFactor=206,t.OneMinusDstAlphaFactor=207,t.DstColorFactor=208,t.OneMinusDstColorFactor=209,t.SrcAlphaSaturateFactor=210,t.NeverDepth=0,t.AlwaysDepth=1,t.LessDepth=2,t.LessEqualDepth=3,t.EqualDepth=4,t.GreaterEqualDepth=5,t.GreaterDepth=6,t.NotEqualDepth=7,t.MultiplyOperation=0,t.MixOperation=1,t.AddOperation=2,t.NoToneMapping=0,t.LinearToneMapping=1,t.ReinhardToneMapping=2,t.Uncharted2ToneMapping=3,t.CineonToneMapping=4,t.UVMapping=300,t.CubeReflectionMapping=301,t.CubeRefractionMapping=302,t.EquirectangularReflectionMapping=303,t.EquirectangularRefractionMapping=304,t.SphericalReflectionMapping=305,t.CubeUVReflectionMapping=306,t.CubeUVRefractionMapping=307,t.TextureMapping=Qn,t.RepeatWrapping=1e3,t.ClampToEdgeWrapping=1001,t.MirroredRepeatWrapping=1002,t.TextureWrapping=ti,t.NearestFilter=1003,t.NearestMipMapNearestFilter=1004,t.NearestMipMapLinearFilter=1005,t.LinearFilter=1006,t.LinearMipMapNearestFilter=1007,t.LinearMipMapLinearFilter=1008,t.TextureFilter=ei,t.UnsignedByteType=1009,t.ByteType=1010,t.ShortType=1011,t.UnsignedShortType=1012,t.IntType=1013,t.UnsignedIntType=1014,t.FloatType=1015,t.HalfFloatType=1016,t.UnsignedShort4444Type=1017,t.UnsignedShort5551Type=1018,t.UnsignedShort565Type=1019,t.UnsignedInt248Type=1020,t.AlphaFormat=1021,t.RGBFormat=1022,t.RGBAFormat=1023,t.LuminanceFormat=1024,t.LuminanceAlphaFormat=1025,t.RGBEFormat=1023,t.DepthFormat=1026,t.DepthStencilFormat=1027,t.RGB_S3TC_DXT1_Format=2001,t.RGBA_S3TC_DXT1_Format=2002,t.RGBA_S3TC_DXT3_Format=2003,t.RGBA_S3TC_DXT5_Format=2004,t.RGB_PVRTC_4BPPV1_Format=2100,t.RGB_PVRTC_2BPPV1_Format=2101,t.RGBA_PVRTC_4BPPV1_Format=2102,t.RGBA_PVRTC_2BPPV1_Format=2103,t.RGB_ETC1_Format=2151,t.LoopOnce=2200,t.LoopRepeat=2201,t.LoopPingPong=2202,t.InterpolateDiscrete=2300,t.InterpolateLinear=2301,t.InterpolateSmooth=2302,t.ZeroCurvatureEnding=2400,t.ZeroSlopeEnding=2401,t.WrapAroundEnding=2402,t.TrianglesDrawMode=0,
-t.TriangleStripDrawMode=1,t.TriangleFanDrawMode=2,t.LinearEncoding=3e3,t.sRGBEncoding=3001,t.GammaEncoding=3007,t.RGBEEncoding=3002,t.LogLuvEncoding=3003,t.RGBM7Encoding=3004,t.RGBM16Encoding=3005,t.RGBDEncoding=3006,t.BasicDepthPacking=3200,t.RGBADepthPacking=3201,t.CubeGeometry=ir,t.Face4=function(t,e,r,n,i,o,a){return console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead."),new ct(t,e,r,i,o,a)},t.LineStrip=0,t.LinePieces=1,t.MeshFaceMaterial=function(t){return console.warn("THREE.MeshFaceMaterial has been renamed to THREE.MultiMaterial."),new sr(t)},t.PointCloud=function(t,e){return console.warn("THREE.PointCloud has been renamed to THREE.Points."),new me(t,e)},t.Particle=function(t){return console.warn("THREE.Particle has been renamed to THREE.Sprite."),new ae(t)},t.ParticleSystem=function(t,e){return console.warn("THREE.ParticleSystem has been renamed to THREE.Points."),new me(t,e)},t.PointCloudMaterial=function(t){return console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial."),new de(t)},t.ParticleBasicMaterial=function(t){return console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial."),new de(t)},t.ParticleSystemMaterial=function(t){return console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial."),new de(t)},t.Vertex=function(t,e,r){return console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead."),new c(t,e,r)},t.DynamicBufferAttribute=function(t,e){return console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead."),new ht(t,e).setDynamic(!0)},t.Int8Attribute=function(t,e){return console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead."),new lt(t,e)},t.Uint8Attribute=function(t,e){return console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead."),new pt(t,e)};t.Uint8ClampedAttribute=function(t,e){return console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead."),new ft(t,e)},t.Int16Attribute=function(t,e){return console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead."),new dt(t,e)},t.Uint16Attribute=function(t,e){return console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead."),new mt(t,e)},t.Int32Attribute=function(t,e){return console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead."),new vt(t,e)},t.Uint32Attribute=function(t,e){return console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead."),new gt(t,e)},t.Float32Attribute=function(t,e){return console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."),new yt(t,e)},t.Float64Attribute=function(t,e){return console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."),new bt(t,e)},t.ClosedSplineCurve3=Zn,t.BoundingBoxHelper=function(t,e){return console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."),new qn(t,e)},t.EdgesHelper=function(t,e){return console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."),new fe(new Ze(t.geometry),new le({color:void 0!==e?e:16777215}))},t.WireframeHelper=function(t,e){return console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead."),new fe(new xe(t.geometry),new le({color:void 0!==e?e:16777215}))},t.XHRLoader=function(t){return console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader."),new vr(t)},t.GeometryUtils={merge:function(t,e,r){console.warn("THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.");var n;e.isMesh&&(e.matrixAutoUpdate&&e.updateMatrix(),n=e.matrix,e=e.geometry),t.merge(e,n,r)},center:function(t){return console.warn("THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead."),t.center()}},t.ImageUtils={crossOrigin:void 0,loadTexture:function(t,e,r,n){console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.");var i=new xr;return i.setCrossOrigin(this.crossOrigin),t=i.load(t,r,void 0,n),e&&(t.mapping=e),t},loadTextureCube:function(t,e,r,n){console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.");var i=new _r;return i.setCrossOrigin(this.crossOrigin),t=i.load(t,r,void 0,n),e&&(t.mapping=e),t},loadCompressedTexture:function(){console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")},loadCompressedTextureCube:function(){console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")}},t.Projector=function(){console.error("THREE.Projector has been moved to /examples/js/renderers/Projector.js."),this.projectVector=function(t,e){console.warn("THREE.Projector: .projectVector() is now vector.project()."),t.project(e)},this.unprojectVector=function(t,e){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject()."),t.unproject(e)},this.pickingRay=function(){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")}},t.CanvasRenderer=function(){console.error("THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js"),this.domElement=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),this.clear=function(){},this.render=function(){},this.setClearColor=function(){},this.setSize=function(){}},Object.defineProperty(t,"__esModule",{value:!0})})},{}],175:[function(e,r,n){(function(){function e(t){function e(e,r,n,i,o,a){for(;o>=0&&o<a;o+=t){var s=i?i[o]:o;n=r(n,e[s],s,e)}return n}return function(r,n,i,o){n=w(n,o,4);var a=!P(r)&&x.keys(r),s=(a||r).length,c=t>0?0:s-1;return arguments.length<3&&(i=r[a?a[c]:c],c+=t),e(r,n,i,a,c,s)}}function i(t){return function(e,r,n){r=S(r,n);for(var i=O(e),o=t>0?0:i-1;o>=0&&o<i;o+=t)if(r(e[o],o,e))return o;return-1}}function o(t,e,r){return function(n,i,o){var a=0,s=O(n);if("number"==typeof o)t>0?a=o>=0?o:Math.max(o+s,a):s=o>=0?Math.min(o+1,s):o+s+1;else if(r&&o&&s)return o=r(n,i),n[o]===i?o:-1;if(i!==i)return o=e(f.call(n,a,s),x.isNaN),o>=0?o+a:-1;for(o=t>0?a:s-1;o>=0&&o<s;o+=t)if(n[o]===i)return o;return-1}}function a(t,e){var r=N.length,n=t.constructor,i=x.isFunction(n)&&n.prototype||h,o="constructor";for(x.has(t,o)&&!x.contains(e,o)&&e.push(o);r--;)(o=N[r])in t&&t[o]!==i[o]&&!x.contains(e,o)&&e.push(o)}var s=this,c=s._,u=Array.prototype,h=Object.prototype,l=Function.prototype,p=u.push,f=u.slice,d=h.toString,m=h.hasOwnProperty,v=Array.isArray,g=Object.keys,y=l.bind,b=Object.create,_=function(){},x=function(t){return t instanceof x?t:this instanceof x?void(this._wrapped=t):new x(t)};void 0!==n?(void 0!==r&&r.exports&&(n=r.exports=x),n._=x):s._=x,x.VERSION="1.8.3";var w=function(t,e,r){if(void 0===e)return t;switch(null==r?3:r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)};case 4:return function(r,n,i,o){return t.call(e,r,n,i,o)}}return function(){return t.apply(e,arguments)}},S=function(t,e,r){return null==t?x.identity:x.isFunction(t)?w(t,e,r):x.isObject(t)?x.matcher(t):x.property(t)};x.iteratee=function(t,e){return S(t,e,1/0)};var M=function(t,e){return function(r){var n=arguments.length;if(n<2||null==r)return r;for(var i=1;i<n;i++)for(var o=arguments[i],a=t(o),s=a.length,c=0;c<s;c++){var u=a[c];e&&void 0!==r[u]||(r[u]=o[u])}return r}},E=function(t){if(!x.isObject(t))return{};if(b)return b(t);_.prototype=t;var e=new _;return _.prototype=null,e},T=function(t){return function(e){return null==e?void 0:e[t]}},C=Math.pow(2,53)-1,O=T("length"),P=function(t){var e=O(t);return"number"==typeof e&&e>=0&&e<=C};x.each=x.forEach=function(t,e,r){e=w(e,r);var n,i;if(P(t))for(n=0,i=t.length;n<i;n++)e(t[n],n,t);else{var o=x.keys(t);for(n=0,i=o.length;n<i;n++)e(t[o[n]],o[n],t)}return t},x.map=x.collect=function(t,e,r){e=S(e,r);for(var n=!P(t)&&x.keys(t),i=(n||t).length,o=Array(i),a=0;a<i;a++){var s=n?n[a]:a;o[a]=e(t[s],s,t)}return o},x.reduce=x.foldl=x.inject=e(1),x.reduceRight=x.foldr=e(-1),x.find=x.detect=function(t,e,r){var n;if(void 0!==(n=P(t)?x.findIndex(t,e,r):x.findKey(t,e,r))&&n!==-1)return t[n]},x.filter=x.select=function(t,e,r){var n=[];return e=S(e,r),x.each(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n},x.reject=function(t,e,r){return x.filter(t,x.negate(S(e)),r)},x.every=x.all=function(t,e,r){e=S(e,r);for(var n=!P(t)&&x.keys(t),i=(n||t).length,o=0;o<i;o++){var a=n?n[o]:o;if(!e(t[a],a,t))return!1}return!0},x.some=x.any=function(t,e,r){e=S(e,r);for(var n=!P(t)&&x.keys(t),i=(n||t).length,o=0;o<i;o++){var a=n?n[o]:o;if(e(t[a],a,t))return!0}return!1},x.contains=x.includes=x.include=function(t,e,r,n){return P(t)||(t=x.values(t)),("number"!=typeof r||n)&&(r=0),x.indexOf(t,e,r)>=0},x.invoke=function(t,e){var r=f.call(arguments,2),n=x.isFunction(e);return x.map(t,function(t){var i=n?e:t[e];return null==i?i:i.apply(t,r)})},x.pluck=function(t,e){return x.map(t,x.property(e))},x.where=function(t,e){return x.filter(t,x.matcher(e))},x.findWhere=function(t,e){return x.find(t,x.matcher(e))},x.max=function(t,e,r){var n,i,o=-(1/0),a=-(1/0);if(null==e&&null!=t){t=P(t)?t:x.values(t);for(var s=0,c=t.length;s<c;s++)(n=t[s])>o&&(o=n)}else e=S(e,r),x.each(t,function(t,r,n){((i=e(t,r,n))>a||i===-(1/0)&&o===-(1/0))&&(o=t,a=i)});return o},x.min=function(t,e,r){var n,i,o=1/0,a=1/0;if(null==e&&null!=t){t=P(t)?t:x.values(t);for(var s=0,c=t.length;s<c;s++)(n=t[s])<o&&(o=n)}else e=S(e,r),x.each(t,function(t,r,n){((i=e(t,r,n))<a||i===1/0&&o===1/0)&&(o=t,a=i)});return o},x.shuffle=function(t){for(var e,r=P(t)?t:x.values(t),n=r.length,i=Array(n),o=0;o<n;o++)e=x.random(0,o),e!==o&&(i[o]=i[e]),i[e]=r[o];return i},x.sample=function(t,e,r){return null==e||r?(P(t)||(t=x.values(t)),t[x.random(t.length-1)]):x.shuffle(t).slice(0,Math.max(0,e))},x.sortBy=function(t,e,r){return e=S(e,r),x.pluck(x.map(t,function(t,r,n){return{value:t,index:r,criteria:e(t,r,n)}}).sort(function(t,e){var r=t.criteria,n=e.criteria;if(r!==n){if(r>n||void 0===r)return 1;if(r<n||void 0===n)return-1}return t.index-e.index}),"value")};var A=function(t){return function(e,r,n){var i={};return r=S(r,n),x.each(e,function(n,o){var a=r(n,o,e);t(i,n,a)}),i}};x.groupBy=A(function(t,e,r){x.has(t,r)?t[r].push(e):t[r]=[e]}),x.indexBy=A(function(t,e,r){t[r]=e}),x.countBy=A(function(t,e,r){x.has(t,r)?t[r]++:t[r]=1}),x.toArray=function(t){return t?x.isArray(t)?f.call(t):P(t)?x.map(t,x.identity):x.values(t):[]},x.size=function(t){return null==t?0:P(t)?t.length:x.keys(t).length},x.partition=function(t,e,r){e=S(e,r);var n=[],i=[];return x.each(t,function(t,r,o){(e(t,r,o)?n:i).push(t)}),[n,i]},x.first=x.head=x.take=function(t,e,r){if(null!=t)return null==e||r?t[0]:x.initial(t,t.length-e)},x.initial=function(t,e,r){return f.call(t,0,Math.max(0,t.length-(null==e||r?1:e)))},x.last=function(t,e,r){if(null!=t)return null==e||r?t[t.length-1]:x.rest(t,Math.max(0,t.length-e))},x.rest=x.tail=x.drop=function(t,e,r){return f.call(t,null==e||r?1:e)},x.compact=function(t){return x.filter(t,x.identity)};var j=function(t,e,r,n){for(var i=[],o=0,a=n||0,s=O(t);a<s;a++){var c=t[a];if(P(c)&&(x.isArray(c)||x.isArguments(c))){e||(c=j(c,e,r));var u=0,h=c.length;for(i.length+=h;u<h;)i[o++]=c[u++]}else r||(i[o++]=c)}return i};x.flatten=function(t,e){return j(t,e,!1)},x.without=function(t){return x.difference(t,f.call(arguments,1))},x.uniq=x.unique=function(t,e,r,n){x.isBoolean(e)||(n=r,r=e,e=!1),null!=r&&(r=S(r,n));for(var i=[],o=[],a=0,s=O(t);a<s;a++){var c=t[a],u=r?r(c,a,t):c;e?(a&&o===u||i.push(c),o=u):r?x.contains(o,u)||(o.push(u),i.push(c)):x.contains(i,c)||i.push(c)}return i},x.union=function(){return x.uniq(j(arguments,!0,!0))},x.intersection=function(t){for(var e=[],r=arguments.length,n=0,i=O(t);n<i;n++){var o=t[n];if(!x.contains(e,o)){for(var a=1;a<r&&x.contains(arguments[a],o);a++);a===r&&e.push(o)}}return e},x.difference=function(t){var e=j(arguments,!0,!0,1);return x.filter(t,function(t){return!x.contains(e,t)})},x.zip=function(){return x.unzip(arguments)},x.unzip=function(t){for(var e=t&&x.max(t,O).length||0,r=Array(e),n=0;n<e;n++)r[n]=x.pluck(t,n);return r},x.object=function(t,e){for(var r={},n=0,i=O(t);n<i;n++)e?r[t[n]]=e[n]:r[t[n][0]]=t[n][1];return r},x.findIndex=i(1),x.findLastIndex=i(-1),x.sortedIndex=function(t,e,r,n){r=S(r,n,1);for(var i=r(e),o=0,a=O(t);o<a;){var s=Math.floor((o+a)/2);r(t[s])<i?o=s+1:a=s}return o},x.indexOf=o(1,x.findIndex,x.sortedIndex),x.lastIndexOf=o(-1,x.findLastIndex),x.range=function(t,e,r){null==e&&(e=t||0,t=0),r=r||1;for(var n=Math.max(Math.ceil((e-t)/r),0),i=Array(n),o=0;o<n;o++,t+=r)i[o]=t;return i};var R=function(t,e,r,n,i){if(!(n instanceof e))return t.apply(r,i);var o=E(t.prototype),a=t.apply(o,i);return x.isObject(a)?a:o};x.bind=function(t,e){if(y&&t.bind===y)return y.apply(t,f.call(arguments,1));if(!x.isFunction(t))throw new TypeError("Bind must be called on a function");var r=f.call(arguments,2),n=function(){return R(t,n,e,this,r.concat(f.call(arguments)))};return n},x.partial=function(t){var e=f.call(arguments,1),r=function(){for(var n=0,i=e.length,o=Array(i),a=0;a<i;a++)o[a]=e[a]===x?arguments[n++]:e[a];for(;n<arguments.length;)o.push(arguments[n++]);return R(t,r,this,this,o)};return r},x.bindAll=function(t){var e,r,n=arguments.length;if(n<=1)throw new Error("bindAll must be passed function names");for(e=1;e<n;e++)r=arguments[e],t[r]=x.bind(t[r],t);return t},x.memoize=function(t,e){var r=function(n){var i=r.cache,o=""+(e?e.apply(this,arguments):n);return x.has(i,o)||(i[o]=t.apply(this,arguments)),i[o]};return r.cache={},r},x.delay=function(t,e){var r=f.call(arguments,2);return setTimeout(function(){return t.apply(null,r)},e)},x.defer=x.partial(x.delay,x,1),x.throttle=function(t,e,r){var n,i,o,a=null,s=0;r||(r={});var c=function(){s=r.leading===!1?0:x.now(),a=null,o=t.apply(n,i),a||(n=i=null)};return function(){var u=x.now();s||r.leading!==!1||(s=u);var h=e-(u-s);return n=this,i=arguments,h<=0||h>e?(a&&(clearTimeout(a),a=null),s=u,o=t.apply(n,i),a||(n=i=null)):a||r.trailing===!1||(a=setTimeout(c,h)),o}},x.debounce=function(t,e,r){var n,i,o,a,s,c=function(){var u=x.now()-a;u<e&&u>=0?n=setTimeout(c,e-u):(n=null,r||(s=t.apply(o,i),n||(o=i=null)))};return function(){o=this,i=arguments,a=x.now();var u=r&&!n;return n||(n=setTimeout(c,e)),u&&(s=t.apply(o,i),o=i=null),s}},x.wrap=function(t,e){return x.partial(e,t)},x.negate=function(t){return function(){return!t.apply(this,arguments)}},x.compose=function(){var t=arguments,e=t.length-1;return function(){for(var r=e,n=t[e].apply(this,arguments);r--;)n=t[r].call(this,n);return n}},x.after=function(t,e){return function(){if(--t<1)return e.apply(this,arguments)}},x.before=function(t,e){var r;return function(){return--t>0&&(r=e.apply(this,arguments)),t<=1&&(e=null),r}},x.once=x.partial(x.before,2);var L=!{toString:null}.propertyIsEnumerable("toString"),N=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];x.keys=function(t){if(!x.isObject(t))return[];if(g)return g(t);var e=[];for(var r in t)x.has(t,r)&&e.push(r);return L&&a(t,e),e},x.allKeys=function(t){if(!x.isObject(t))return[];var e=[];for(var r in t)e.push(r);return L&&a(t,e),e},x.values=function(t){for(var e=x.keys(t),r=e.length,n=Array(r),i=0;i<r;i++)n[i]=t[e[i]];return n},x.mapObject=function(t,e,r){e=S(e,r);for(var n,i=x.keys(t),o=i.length,a={},s=0;s<o;s++)n=i[s],a[n]=e(t[n],n,t);return a},x.pairs=function(t){for(var e=x.keys(t),r=e.length,n=Array(r),i=0;i<r;i++)n[i]=[e[i],t[e[i]]];return n},x.invert=function(t){for(var e={},r=x.keys(t),n=0,i=r.length;n<i;n++)e[t[r[n]]]=r[n];return e},x.functions=x.methods=function(t){var e=[];for(var r in t)x.isFunction(t[r])&&e.push(r);return e.sort()},x.extend=M(x.allKeys),x.extendOwn=x.assign=M(x.keys),x.findKey=function(t,e,r){e=S(e,r);for(var n,i=x.keys(t),o=0,a=i.length;o<a;o++)if(n=i[o],e(t[n],n,t))return n},x.pick=function(t,e,r){var n,i,o={},a=t;if(null==a)return o;x.isFunction(e)?(i=x.allKeys(a),n=w(e,r)):(i=j(arguments,!1,!1,1),n=function(t,e,r){return e in r},a=Object(a));for(var s=0,c=i.length;s<c;s++){var u=i[s],h=a[u];n(h,u,a)&&(o[u]=h)}return o},x.omit=function(t,e,r){if(x.isFunction(e))e=x.negate(e);else{var n=x.map(j(arguments,!1,!1,1),String);e=function(t,e){return!x.contains(n,e)}}return x.pick(t,e,r)},x.defaults=M(x.allKeys,!0),x.create=function(t,e){var r=E(t);return e&&x.extendOwn(r,e),r},x.clone=function(t){return x.isObject(t)?x.isArray(t)?t.slice():x.extend({},t):t},x.tap=function(t,e){return e(t),t},x.isMatch=function(t,e){var r=x.keys(e),n=r.length;if(null==t)return!n;for(var i=Object(t),o=0;o<n;o++){var a=r[o];if(e[a]!==i[a]||!(a in i))return!1}return!0};var I=function(t,e,r,n){if(t===e)return 0!==t||1/t==1/e;if(null==t||null==e)return t===e;t instanceof x&&(t=t._wrapped),e instanceof x&&(e=e._wrapped);var i=d.call(t);if(i!==d.call(e))return!1;switch(i){case"[object RegExp]":case"[object String]":return""+t==""+e;case"[object Number]":return+t!=+t?+e!=+e:0==+t?1/+t==1/e:+t==+e;case"[object Date]":case"[object Boolean]":return+t==+e}var o="[object Array]"===i;if(!o){if("object"!=typeof t||"object"!=typeof e)return!1;var a=t.constructor,s=e.constructor;if(a!==s&&!(x.isFunction(a)&&a instanceof a&&x.isFunction(s)&&s instanceof s)&&"constructor"in t&&"constructor"in e)return!1}r=r||[],n=n||[];for(var c=r.length;c--;)if(r[c]===t)return n[c]===e;if(r.push(t),n.push(e),o){if((c=t.length)!==e.length)return!1;for(;c--;)if(!I(t[c],e[c],r,n))return!1}else{var u,h=x.keys(t);if(c=h.length,x.keys(e).length!==c)return!1;for(;c--;)if(u=h[c],!x.has(e,u)||!I(t[u],e[u],r,n))return!1}return r.pop(),n.pop(),!0};x.isEqual=function(t,e){return I(t,e)},x.isEmpty=function(t){return null==t||(P(t)&&(x.isArray(t)||x.isString(t)||x.isArguments(t))?0===t.length:0===x.keys(t).length)},x.isElement=function(t){return!(!t||1!==t.nodeType)},x.isArray=v||function(t){return"[object Array]"===d.call(t)},x.isObject=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},x.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(t){x["is"+t]=function(e){return d.call(e)==="[object "+t+"]"}}),x.isArguments(arguments)||(x.isArguments=function(t){return x.has(t,"callee")}),"function"!=typeof/./&&"object"!=typeof Int8Array&&(x.isFunction=function(t){return"function"==typeof t||!1}),x.isFinite=function(t){return isFinite(t)&&!isNaN(parseFloat(t))},x.isNaN=function(t){return x.isNumber(t)&&t!==+t},x.isBoolean=function(t){return t===!0||t===!1||"[object Boolean]"===d.call(t)},x.isNull=function(t){return null===t},x.isUndefined=function(t){return void 0===t},x.has=function(t,e){return null!=t&&m.call(t,e)},x.noConflict=function(){return s._=c,this},x.identity=function(t){return t},x.constant=function(t){return function(){return t}},x.noop=function(){},x.property=T,x.propertyOf=function(t){return null==t?function(){}:function(e){return t[e]}},x.matcher=x.matches=function(t){return t=x.extendOwn({},t),function(e){return x.isMatch(e,t)}},x.times=function(t,e,r){var n=Array(Math.max(0,t));e=w(e,r,1);for(var i=0;i<t;i++)n[i]=e(i);return n},x.random=function(t,e){return null==e&&(e=t,t=0),t+Math.floor(Math.random()*(e-t+1))},x.now=Date.now||function(){return(new Date).getTime()};var D={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},k=x.invert(D),F=function(t){var e=function(e){return t[e]},r="(?:"+x.keys(t).join("|")+")",n=RegExp(r),i=RegExp(r,"g");return function(t){return t=null==t?"":""+t,n.test(t)?t.replace(i,e):t}};x.escape=F(D),x.unescape=F(k),x.result=function(t,e,r){var n=null==t?void 0:t[e];return void 0===n&&(n=r),x.isFunction(n)?n.call(t):n};var U=0;x.uniqueId=function(t){var e=++U+"";return t?t+e:e},x.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var B={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},z=function(t){return"\\"+B[t]};x.template=function(t,e,r){!e&&r&&(e=r),e=x.defaults({},e,x.templateSettings);var n=RegExp([(e.escape||/(.)^/).source,(e.interpolate||/(.)^/).source,(e.evaluate||/(.)^/).source].join("|")+"|$","g"),i=0,o="__p+='";t.replace(n,function(e,r,n,a,s){return o+=t.slice(i,s).replace(/\\|'|\r|\n|\u2028|\u2029/g,z),i=s+e.length,r?o+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":n?o+="'+\n((__t=("+n+"))==null?'':__t)+\n'":a&&(o+="';\n"+a+"\n__p+='"),e}),o+="';\n",e.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{var a=new Function(e.variable||"obj","_",o)}catch(t){throw t.source=o,t}var s=function(t){return a.call(this,t,x)},c=e.variable||"obj";return s.source="function("+c+"){\n"+o+"}",s},x.chain=function(t){var e=x(t);return e._chain=!0,e};var $=function(t,e){return t._chain?x(e).chain():e};x.mixin=function(t){x.each(x.functions(t),function(e){var r=x[e]=t[e];x.prototype[e]=function(){var t=[this._wrapped];return p.apply(t,arguments),$(this,r.apply(x,t))}})},x.mixin(x),x.each(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var e=u[t];x.prototype[t]=function(){var r=this._wrapped;return e.apply(r,arguments),"shift"!==t&&"splice"!==t||0!==r.length||delete r[0],$(this,r)}}),x.each(["concat","join","slice"],function(t){var e=u[t];x.prototype[t]=function(){return $(this,e.apply(this._wrapped,arguments))}}),x.prototype.value=function(){return this._wrapped},x.prototype.valueOf=x.prototype.toJSON=x.prototype.value,x.prototype.toString=function(){return""+this._wrapped},"function"==typeof t&&t.amd&&t("underscore",[],function(){return x})}).call(this)},{}],176:[function(t,e,r){function n(t,e,r,n){this.cx=3*t,this.bx=3*(r-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(n-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=n,this.p2x=r,this.p2y=n}e.exports=n,n.prototype.sampleCurveX=function(t){return((this.ax*t+this.bx)*t+this.cx)*t},n.prototype.sampleCurveY=function(t){return((this.ay*t+this.by)*t+this.cy)*t},n.prototype.sampleCurveDerivativeX=function(t){return(3*this.ax*t+2*this.bx)*t+this.cx},n.prototype.solveCurveX=function(t,e){void 0===e&&(e=1e-6);var r,n,i,o,a;for(i=t,a=0;a<8;a++){if(o=this.sampleCurveX(i)-t,Math.abs(o)<e)return i;var s=this.sampleCurveDerivativeX(i);if(Math.abs(s)<1e-6)break;i-=o/s}if(r=0,n=1,(i=t)<r)return r;if(i>n)return n;for(;r<n;){if(o=this.sampleCurveX(i),Math.abs(o-t)<e)return i;t>o?r=i:n=i,i=.5*(n-r)+r}return i},n.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))}},{}],177:[function(t,e,r){var n=t("./vdom/create-element.js");e.exports=n},{"./vdom/create-element.js":183}],178:[function(t,e,r){var n=t("./vtree/diff.js");e.exports=n},{"./vtree/diff.js":203}],179:[function(t,e,r){var n=t("./virtual-hyperscript/index.js");e.exports=n},{"./virtual-hyperscript/index.js":190}],180:[function(t,e,r){var n=t("./diff.js"),i=t("./patch.js"),o=t("./h.js"),a=t("./create-element.js"),s=t("./vnode/vnode.js"),c=t("./vnode/vtext.js");e.exports={diff:n,patch:i,h:o,create:a,VNode:s,VText:c}},{"./create-element.js":177,"./diff.js":178,"./h.js":179,"./patch.js":181,"./vnode/vnode.js":199,"./vnode/vtext.js":201}],181:[function(t,e,r){var n=t("./vdom/patch.js");e.exports=n},{"./vdom/patch.js":186}],182:[function(t,e,r){function n(t,e,r){for(var n in e){var a=e[n];void 0===a?i(t,n,a,r):c(a)?(i(t,n,a,r),a.hook&&a.hook(t,n,r?r[n]:void 0)):s(a)?o(t,e,r,n,a):t[n]=a}}function i(t,e,r,n){if(n){var i=n[e];if(c(i))i.unhook&&i.unhook(t,e,r);else if("attributes"===e)for(var o in i)t.removeAttribute(o);else if("style"===e)for(var a in i)t.style[a]="";else t[e]="string"==typeof i?"":null}}function o(t,e,r,n,i){var o=r?r[n]:void 0;if("attributes"!==n){if(o&&s(o)&&a(o)!==a(i))return void(t[n]=i);s(t[n])||(t[n]={});var c="style"===n?"":void 0;for(var u in i){var h=i[u];t[n][u]=void 0===h?c:h}}else for(var l in i){var p=i[l];void 0===p?t.removeAttribute(l):t.setAttribute(l,p)}}function a(t){return Object.getPrototypeOf?Object.getPrototypeOf(t):t.__proto__?t.__proto__:t.constructor?t.constructor.prototype:void 0}var s=t("is-object"),c=t("../vnode/is-vhook.js");e.exports=n},{"../vnode/is-vhook.js":194,"is-object":18}],183:[function(t,e,r){function n(t,e){var r=e?e.document||i:i,h=e?e.warn:null;if(t=u(t).a,c(t))return t.init();if(s(t))return r.createTextNode(t.text);if(!a(t))return h&&h("Item is not a valid virtual dom node",t),null;var l=null===t.namespace?r.createElement(t.tagName):r.createElementNS(t.namespace,t.tagName),p=t.properties;o(l,p);for(var f=t.children,d=0;d<f.length;d++){var m=n(f[d],e);m&&l.appendChild(m)}return l}var i=t("global/document"),o=t("./apply-properties"),a=t("../vnode/is-vnode.js"),s=t("../vnode/is-vtext.js"),c=t("../vnode/is-widget.js"),u=t("../vnode/handle-thunk.js");e.exports=n},{"../vnode/handle-thunk.js":192,"../vnode/is-vnode.js":195,"../vnode/is-vtext.js":196,"../vnode/is-widget.js":197,"./apply-properties":182,"global/document":14}],184:[function(t,e,r){function n(t,e,r,n){return r&&0!==r.length?(r.sort(a),i(t,e,r,n,0)):{}}function i(t,e,r,n,a){if(n=n||{},t){o(r,a,a)&&(n[a]=t);var c=e.children;if(c)for(var u=t.childNodes,h=0;h<e.children.length;h++){a+=1;var l=c[h]||s,p=a+(l.count||0);o(r,a,p)&&i(u[h],l,r,n,a),a=p}}return n}function o(t,e,r){if(0===t.length)return!1;for(var n,i,o=0,a=t.length-1;o<=a;){if(n=(a+o)/2>>0,i=t[n],o===a)return i>=e&&i<=r;if(i<e)o=n+1;else{if(!(i>r))return!0;a=n-1}}return!1}function a(t,e){return t>e?1:-1}var s={};e.exports=n},{}],185:[function(t,e,r){function n(t,e,r){var n=t.type,u=t.vNode,f=t.patch;switch(n){case d.REMOVE:return i(e,u);case d.INSERT:return o(e,f,r);case d.VTEXT:return a(e,u,f,r);case d.WIDGET:return s(e,u,f,r);case d.VNODE:return c(e,u,f,r);case d.ORDER:return h(e,f),e;case d.PROPS:return p(e,f,u.properties),e;case d.THUNK:return l(e,r.patch(e,f,r));default:return e}}function i(t,e){var r=t.parentNode;return r&&r.removeChild(t),u(t,e),null}function o(t,e,r){var n=r.render(e,r);return t&&t.appendChild(n),t}function a(t,e,r,n){var i;if(3===t.nodeType)t.replaceData(0,t.length,r.text),i=t;else{var o=t.parentNode;i=n.render(r,n),o&&i!==t&&o.replaceChild(i,t)}return i}function s(t,e,r,n){var i,o=m(e,r);i=o?r.update(e,t)||t:n.render(r,n);var a=t.parentNode;return a&&i!==t&&a.replaceChild(i,t),o||u(t,e),i}function c(t,e,r,n){var i=t.parentNode,o=n.render(r,n);return i&&o!==t&&i.replaceChild(o,t),o}function u(t,e){"function"==typeof e.destroy&&f(e)&&e.destroy(t)}function h(t,e){for(var r,n,i,o=t.childNodes,a={},s=0;s<e.removes.length;s++)n=e.removes[s],r=o[n.from],n.key&&(a[n.key]=r),t.removeChild(r);for(var c=o.length,u=0;u<e.inserts.length;u++)i=e.inserts[u],r=a[i.key],t.insertBefore(r,i.to>=c++?null:o[i.to])}function l(t,e){return t&&e&&t!==e&&t.parentNode&&t.parentNode.replaceChild(e,t),e}var p=t("./apply-properties"),f=t("../vnode/is-widget.js"),d=t("../vnode/vpatch.js"),m=t("./update-widget");e.exports=n},{"../vnode/is-widget.js":197,"../vnode/vpatch.js":200,"./apply-properties":182,"./update-widget":187}],186:[function(t,e,r){function n(t,e,r){return r=r||{},r.patch=r.patch&&r.patch!==n?r.patch:i,r.render=r.render||u,r.patch(t,e,r)}function i(t,e,r){var n=a(e);if(0===n.length)return t;var i=h(t,e.a,n),c=t.ownerDocument;r.document||c===s||(r.document=c);for(var u=0;u<n.length;u++){var l=n[u];t=o(t,i[l],e[l],r)}return t}function o(t,e,r,n){if(!e)return t;var i;if(c(r))for(var o=0;o<r.length;o++)i=l(r[o],e,n),e===t&&(t=i);else i=l(r,e,n),e===t&&(t=i);return t}function a(t){var e=[];for(var r in t)"a"!==r&&e.push(Number(r));return e}var s=t("global/document"),c=t("x-is-array"),u=t("./create-element"),h=t("./dom-index"),l=t("./patch-op");e.exports=n},{"./create-element":183,"./dom-index":184,"./patch-op":185,"global/document":14,"x-is-array":222}],187:[function(t,e,r){function n(t,e){return!(!i(t)||!i(e))&&("name"in t&&"name"in e?t.id===e.id:t.init===e.init)}var i=t("../vnode/is-widget.js");e.exports=n},{"../vnode/is-widget.js":197}],188:[function(t,e,r){"use strict";function n(t){if(!(this instanceof n))return new n(t);this.value=t}var i=t("ev-store");e.exports=n,n.prototype.hook=function(t,e){i(t)[e.substr(3)]=this.value},n.prototype.unhook=function(t,e){i(t)[e.substr(3)]=void 0}},{"ev-store":7}],189:[function(t,e,r){"use strict";function n(t){if(!(this instanceof n))return new n(t);this.value=t}e.exports=n,n.prototype.hook=function(t,e){t[e]!==this.value&&(t[e]=this.value)}},{}],190:[function(t,e,r){"use strict";function n(t,e,r){var n,a,c,u,h=[];return!r&&s(e)&&(r=e,a={}),a=a||e||{},n=y(t,a),a.hasOwnProperty("key")&&(c=a.key,a.key=void 0),a.hasOwnProperty("namespace")&&(u=a.namespace,a.namespace=void 0),"INPUT"!==n||u||!a.hasOwnProperty("value")||void 0===a.value||v(a.value)||(a.value=b(a.value)),o(a),void 0!==r&&null!==r&&i(r,h,n,a),new l(n,a,h,c,u)}function i(t,e,r,n){if("string"==typeof t)e.push(new p(t));else if("number"==typeof t)e.push(new p(String(t)));else if(a(t))e.push(t);else{if(!h(t)){if(null===t||void 0===t)return;throw c({foreignObject:t,parentVnode:{tagName:r,properties:n}})}for(var o=0;o<t.length;o++)i(t[o],e,r,n)}}function o(t){for(var e in t)if(t.hasOwnProperty(e)){var r=t[e];if(v(r))continue;"ev-"===e.substr(0,3)&&(t[e]=_(r))}}function a(t){return f(t)||d(t)||m(t)||g(t)}function s(t){return"string"==typeof t||h(t)||a(t)}function c(t){var e=new Error;return e.type="virtual-hyperscript.unexpected.virtual-element",e.message="Unexpected virtual child passed to h().\nExpected a VNode / Vthunk / VWidget / string but:\ngot:\n"+u(t.foreignObject)+".\nThe parent vnode is:\n"+u(t.parentVnode),e.foreignObject=t.foreignObject,e.parentVnode=t.parentVnode,e}function u(t){try{return JSON.stringify(t,null,"    ")}catch(e){return String(t)}}var h=t("x-is-array"),l=t("../vnode/vnode.js"),p=t("../vnode/vtext.js"),f=t("../vnode/is-vnode"),d=t("../vnode/is-vtext"),m=t("../vnode/is-widget"),v=t("../vnode/is-vhook"),g=t("../vnode/is-thunk"),y=t("./parse-tag.js"),b=t("./hooks/soft-set-hook.js"),_=t("./hooks/ev-hook.js");e.exports=n},{"../vnode/is-thunk":193,"../vnode/is-vhook":194,"../vnode/is-vnode":195,"../vnode/is-vtext":196,"../vnode/is-widget":197,"../vnode/vnode.js":199,"../vnode/vtext.js":201,"./hooks/ev-hook.js":188,"./hooks/soft-set-hook.js":189,"./parse-tag.js":191,"x-is-array":222}],191:[function(t,e,r){"use strict";function n(t,e){if(!t)return"DIV";var r=!e.hasOwnProperty("id"),n=i(t,o),s=null;a.test(n[1])&&(s="DIV");var c,u,h,l;for(l=0;l<n.length;l++)(u=n[l])&&(h=u.charAt(0),s?"."===h?(c=c||[],c.push(u.substring(1,u.length))):"#"===h&&r&&(e.id=u.substring(1,u.length)):s=u);return c&&(e.className&&c.push(e.className),e.className=c.join(" ")),e.namespace?s:s.toUpperCase()}var i=t("browser-split"),o=/([\.#]?[a-zA-Z0-9\u007F-\uFFFF_:-]+)/,a=/^\.|#/;e.exports=n},{"browser-split":3}],192:[function(t,e,r){function n(t,e){var r=t,n=e;return c(e)&&(n=i(e,t)),c(t)&&(r=i(t,null)),{a:r,b:n}}function i(t,e){var r=t.vnode;if(r||(r=t.vnode=t.render(e)),!(o(r)||a(r)||s(r)))throw new Error("thunk did not return a valid node");return r}var o=t("./is-vnode"),a=t("./is-vtext"),s=t("./is-widget"),c=t("./is-thunk");e.exports=n},{"./is-thunk":193,"./is-vnode":195,"./is-vtext":196,"./is-widget":197}],193:[function(t,e,r){function n(t){return t&&"Thunk"===t.type}e.exports=n},{}],194:[function(t,e,r){function n(t){return t&&("function"==typeof t.hook&&!t.hasOwnProperty("hook")||"function"==typeof t.unhook&&!t.hasOwnProperty("unhook"))}e.exports=n},{}],195:[function(t,e,r){function n(t){return t&&"VirtualNode"===t.type&&t.version===i}var i=t("./version");e.exports=n},{"./version":198}],196:[function(t,e,r){function n(t){return t&&"VirtualText"===t.type&&t.version===i}var i=t("./version");e.exports=n},{"./version":198}],197:[function(t,e,r){
-function n(t){return t&&"Widget"===t.type}e.exports=n},{}],198:[function(t,e,r){e.exports="2"},{}],199:[function(t,e,r){function n(t,e,r,n,i){this.tagName=t,this.properties=e||u,this.children=r||h,this.key=null!=n?String(n):void 0,this.namespace="string"==typeof i?i:null;var l,p=r&&r.length||0,f=0,d=!1,m=!1,v=!1;for(var g in e)if(e.hasOwnProperty(g)){var y=e[g];c(y)&&y.unhook&&(l||(l={}),l[g]=y)}for(var b=0;b<p;b++){var _=r[b];o(_)?(f+=_.count||0,!d&&_.hasWidgets&&(d=!0),!m&&_.hasThunks&&(m=!0),v||!_.hooks&&!_.descendantHooks||(v=!0)):!d&&a(_)?"function"==typeof _.destroy&&(d=!0):!m&&s(_)&&(m=!0)}this.count=p+f,this.hasWidgets=d,this.hasThunks=m,this.hooks=l,this.descendantHooks=v}var i=t("./version"),o=t("./is-vnode"),a=t("./is-widget"),s=t("./is-thunk"),c=t("./is-vhook");e.exports=n;var u={},h=[];n.prototype.version=i,n.prototype.type="VirtualNode"},{"./is-thunk":193,"./is-vhook":194,"./is-vnode":195,"./is-widget":197,"./version":198}],200:[function(t,e,r){function n(t,e,r){this.type=Number(t),this.vNode=e,this.patch=r}var i=t("./version");n.NONE=0,n.VTEXT=1,n.VNODE=2,n.WIDGET=3,n.PROPS=4,n.ORDER=5,n.INSERT=6,n.REMOVE=7,n.THUNK=8,e.exports=n,n.prototype.version=i,n.prototype.type="VirtualPatch"},{"./version":198}],201:[function(t,e,r){function n(t){this.text=String(t)}var i=t("./version");e.exports=n,n.prototype.version=i,n.prototype.type="VirtualText"},{"./version":198}],202:[function(t,e,r){function n(t,e){var r;for(var s in t){s in e||(r=r||{},r[s]=void 0);var c=t[s],u=e[s];if(c!==u)if(o(c)&&o(u))if(i(u)!==i(c))r=r||{},r[s]=u;else if(a(u))r=r||{},r[s]=u;else{var h=n(c,u);h&&(r=r||{},r[s]=h)}else r=r||{},r[s]=u}for(var l in e)l in t||(r=r||{},r[l]=e[l]);return r}function i(t){return Object.getPrototypeOf?Object.getPrototypeOf(t):t.__proto__?t.__proto__:t.constructor?t.constructor.prototype:void 0}var o=t("is-object"),a=t("../vnode/is-vhook");e.exports=n},{"../vnode/is-vhook":194,"is-object":18}],203:[function(t,e,r){function n(t,e){var r={a:t};return i(t,e,r,0),r}function i(t,e,r,n){if(t!==e){var i=r[n],s=!1;if(x(t)||x(e))c(t,e,r,n);else if(null==e)_(t)||(a(t,r,n),i=r[n]),i=m(i,new g(g.REMOVE,t,e));else if(y(e))if(y(t))if(t.tagName===e.tagName&&t.namespace===e.namespace&&t.key===e.key){var u=S(t.properties,e.properties);u&&(i=m(i,new g(g.PROPS,t,u))),i=o(t,e,r,i,n)}else i=m(i,new g(g.VNODE,t,e)),s=!0;else i=m(i,new g(g.VNODE,t,e)),s=!0;else b(e)?b(t)?t.text!==e.text&&(i=m(i,new g(g.VTEXT,t,e))):(i=m(i,new g(g.VTEXT,t,e)),s=!0):_(e)&&(_(t)||(s=!0),i=m(i,new g(g.WIDGET,t,e)));i&&(r[n]=i),s&&a(t,r,n)}}function o(t,e,r,n,o){for(var a=t.children,s=p(a,e.children),c=s.children,u=a.length,h=c.length,l=u>h?u:h,f=0;f<l;f++){var d=a[f],v=c[f];o+=1,d?i(d,v,r,o):v&&(n=m(n,new g(g.INSERT,null,v))),y(d)&&d.count&&(o+=d.count)}return s.moves&&(n=m(n,new g(g.ORDER,t,s.moves))),n}function a(t,e,r){h(t,e,r),s(t,e,r)}function s(t,e,r){if(_(t))"function"==typeof t.destroy&&(e[r]=m(e[r],new g(g.REMOVE,t,null)));else if(y(t)&&(t.hasWidgets||t.hasThunks))for(var n=t.children,i=n.length,o=0;o<i;o++){var a=n[o];r+=1,s(a,e,r),y(a)&&a.count&&(r+=a.count)}else x(t)&&c(t,null,e,r)}function c(t,e,r,i){var o=w(t,e),a=n(o.a,o.b);u(a)&&(r[i]=new g(g.THUNK,null,a))}function u(t){for(var e in t)if("a"!==e)return!0;return!1}function h(t,e,r){if(y(t)){if(t.hooks&&(e[r]=m(e[r],new g(g.PROPS,t,l(t.hooks)))),t.descendantHooks||t.hasThunks)for(var n=t.children,i=n.length,o=0;o<i;o++){var a=n[o];r+=1,h(a,e,r),y(a)&&a.count&&(r+=a.count)}}else x(t)&&c(t,null,e,r)}function l(t){var e={};for(var r in t)e[r]=void 0;return e}function p(t,e){var r=d(e),n=r.keys,i=r.free;if(i.length===e.length)return{children:e,moves:null};var o=d(t),a=o.keys;if(o.free.length===t.length)return{children:e,moves:null};for(var s=[],c=0,u=i.length,h=0,l=0;l<t.length;l++){var p,m=t[l];m.key?n.hasOwnProperty(m.key)?(p=n[m.key],s.push(e[p])):(p=l-h++,s.push(null)):c<u?(p=i[c++],s.push(e[p])):(p=l-h++,s.push(null))}for(var v=c>=i.length?e.length:i[c],g=0;g<e.length;g++){var y=e[g];y.key?a.hasOwnProperty(y.key)||s.push(y):g>=v&&s.push(y)}for(var b,_=s.slice(),x=0,w=[],S=[],M=0;M<e.length;){var E=e[M];for(b=_[x];null===b&&_.length;)w.push(f(_,x,null)),b=_[x];b&&b.key===E.key?(x++,M++):E.key?(b&&b.key&&n[b.key]!==M+1?(w.push(f(_,x,b.key)),b=_[x],b&&b.key===E.key?x++:S.push({key:E.key,to:M})):S.push({key:E.key,to:M}),M++):b&&b.key&&w.push(f(_,x,b.key))}for(;x<_.length;)b=_[x],w.push(f(_,x,b&&b.key));return w.length!==h||S.length?{children:s,moves:{removes:w,inserts:S}}:{children:s,moves:null}}function f(t,e,r){return t.splice(e,1),{from:e,key:r}}function d(t){for(var e={},r=[],n=t.length,i=0;i<n;i++){var o=t[i];o.key?e[o.key]=i:r.push(i)}return{keys:e,free:r}}function m(t,e){return t?(v(t)?t.push(e):t=[t,e],t):e}var v=t("x-is-array"),g=t("../vnode/vpatch"),y=t("../vnode/is-vnode"),b=t("../vnode/is-vtext"),_=t("../vnode/is-widget"),x=t("../vnode/is-thunk"),w=t("../vnode/handle-thunk"),S=t("./diff-props");e.exports=n},{"../vnode/handle-thunk":192,"../vnode/is-thunk":193,"../vnode/is-vnode":195,"../vnode/is-vtext":196,"../vnode/is-widget":197,"../vnode/vpatch":200,"./diff-props":202,"x-is-array":222}],204:[function(e,r,n){!function(t){"use strict";t(function(t){return t("./makePromise")({scheduler:new(t("./Scheduler"))(t("./env").asap)})})}("function"==typeof t&&t.amd?t:function(t){r.exports=t(e)})},{"./Scheduler":205,"./env":217,"./makePromise":219}],205:[function(e,r,n){!function(t){"use strict";t(function(){function t(t){this._async=t,this._running=!1,this._queue=this,this._queueLen=0,this._afterQueue={},this._afterQueueLen=0;var e=this;this.drain=function(){e._drain()}}return t.prototype.enqueue=function(t){this._queue[this._queueLen++]=t,this.run()},t.prototype.afterQueue=function(t){this._afterQueue[this._afterQueueLen++]=t,this.run()},t.prototype.run=function(){this._running||(this._running=!0,this._async(this.drain))},t.prototype._drain=function(){for(var t=0;t<this._queueLen;++t)this._queue[t].run(),this._queue[t]=void 0;for(this._queueLen=0,this._running=!1,t=0;t<this._afterQueueLen;++t)this._afterQueue[t].run(),this._afterQueue[t]=void 0;this._afterQueueLen=0},t})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],206:[function(e,r,n){!function(t){"use strict";t(function(){function t(e){Error.call(this),this.message=e,this.name=t.name,"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,t)}return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],207:[function(e,r,n){!function(t){"use strict";t(function(){function t(t,r){function n(e,n,o){var a=t._defer(),s=o.length;return i({f:e,thisArg:n,args:o,params:new Array(s),i:s-1,call:r},a._handler),a}function i(e,n){if(e.i<0)return r(e.f,e.thisArg,e.params,n);t._handler(e.args[e.i]).fold(o,e,void 0,n)}function o(t,e,r){t.params[t.i]=e,t.i-=1,i(t,r)}return arguments.length<2&&(r=e),n}function e(t,e,r,n){try{n.resolve(t.apply(e,r))}catch(t){n.reject(t)}}return t.tryCatchResolve=e,t})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],208:[function(e,r,n){!function(t){"use strict";t(function(t){var e=t("../state"),r=t("../apply");return function(t){function n(e){function r(t){h=null,this.resolve(t)}function n(t){this.resolved||(h.push(t),0==--u&&this.reject(h))}for(var i,o,a=t._defer(),s=a._handler,c=e.length>>>0,u=c,h=[],l=0;l<c;++l)if(void 0!==(o=e[l])||l in e){if(i=t._handler(o),i.state()>0){s.become(i),t._visitRemaining(e,l,i);break}i.visit(s,r,n)}else--u;return 0===u&&s.reject(new RangeError("any(): array must not be empty")),a}function i(e,r){function n(t){this.resolved||(h.push(t),0==--f&&(l=null,this.resolve(h)))}function i(t){this.resolved||(l.push(t),0==--o&&(h=null,this.reject(l)))}var o,a,s,c=t._defer(),u=c._handler,h=[],l=[],p=e.length>>>0,f=0;for(s=0;s<p;++s)(void 0!==(a=e[s])||s in e)&&++f;for(r=Math.max(r,0),o=f-r+1,f=Math.min(r,f),r>f?u.reject(new RangeError("some(): array must contain at least "+r+" item(s), but had "+f)):0===f&&u.resolve(h),s=0;s<p;++s)(void 0!==(a=e[s])||s in e)&&t._handler(a).visit(u,n,i,u.notify);return c}function o(e,r){return t._traverse(r,e)}function a(e,r){var n=y.call(e);return t._traverse(r,n).then(function(t){return s(n,t)})}function s(e,r){for(var n=r.length,i=new Array(n),o=0,a=0;o<n;++o)r[o]&&(i[a++]=t._handler(e[o]).value);return i.length=a,i}function c(t){return m(t.map(u))}function u(r){var n;return r instanceof t&&(n=r._handler.join()),n&&0===n.state()||!n?d(r).then(e.fulfilled,e.rejected):(n._unreport(),e.inspect(n))}function h(t,e){return arguments.length>2?v.call(t,p(e),arguments[2]):v.call(t,p(e))}function l(t,e){return arguments.length>2?g.call(t,p(e),arguments[2]):g.call(t,p(e))}function p(t){return function(e,r,n){return f(t,void 0,[e,r,n])}}var f=r(t),d=t.resolve,m=t.all,v=Array.prototype.reduce,g=Array.prototype.reduceRight,y=Array.prototype.slice;return t.any=n,t.some=i,t.settle=c,t.map=o,t.filter=a,t.reduce=h,t.reduceRight=l,t.prototype.spread=function(t){return this.then(m).then(function(e){return t.apply(this,e)})},t}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t(e)})},{"../apply":207,"../state":220}],209:[function(e,r,n){!function(t){"use strict";t(function(){function t(){throw new TypeError("catch predicate must be a function")}function e(t,e){return r(e)?t instanceof e:e(t)}function r(t){return t===Error||null!=t&&t.prototype instanceof Error}function n(t){return("object"==typeof t||"function"==typeof t)&&null!==t}function i(t){return t}return function(r){function o(t,r){return function(n){return e(n,r)?t.call(this,n):u(n)}}function a(t,e,r,i){var o=t.call(e);return n(o)?s(o,r,i):r(i)}function s(t,e,r){return c(t).then(function(){return e(r)})}var c=r.resolve,u=r.reject,h=r.prototype.catch;return r.prototype.done=function(t,e){this._handler.visit(this._handler.receiver,t,e)},r.prototype.catch=r.prototype.otherwise=function(e){return arguments.length<2?h.call(this,e):"function"!=typeof e?this.ensure(t):h.call(this,o(arguments[1],e))},r.prototype.finally=r.prototype.ensure=function(t){return"function"!=typeof t?this:this.then(function(e){return a(t,this,i,e)},function(e){return a(t,this,u,e)})},r.prototype.else=r.prototype.orElse=function(t){return this.then(void 0,function(){return t})},r.prototype.yield=function(t){return this.then(function(){return t})},r.prototype.tap=function(t){return this.then(t).yield(this)},r}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],210:[function(e,r,n){!function(t){"use strict";t(function(){return function(t){return t.prototype.fold=function(e,r){var n=this._beget();return this._handler.fold(function(r,n,i){t._handler(r).fold(function(t,r,n){n.resolve(e.call(this,r,t))},n,this,i)},r,n._handler.receiver,n._handler),n},t}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],211:[function(e,r,n){!function(t){"use strict";t(function(t){var e=t("../state").inspect;return function(t){return t.prototype.inspect=function(){return e(t._handler(this))},t}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t(e)})},{"../state":220}],212:[function(e,r,n){!function(t){"use strict";t(function(){return function(t){function e(t,e,n,i){return r(function(e){return[e,t(e)]},e,n,i)}function r(t,e,i,o){function a(o,a){return n(i(o)).then(function(){return r(t,e,i,a)})}return n(o).then(function(r){return n(e(r)).then(function(e){return e?r:n(t(r)).spread(a)})})}var n=t.resolve;return t.iterate=e,t.unfold=r,t}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],213:[function(e,r,n){!function(t){"use strict";t(function(){return function(t){return t.prototype.progress=function(t){return this.then(void 0,void 0,t)},t}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],214:[function(e,r,n){!function(t){"use strict";t(function(t){function e(t,e,n,i){return r.setTimer(function(){t(n,i,e)},e)}var r=t("../env"),n=t("../TimeoutError");return function(t){function i(t,r,n){e(o,t,r,n)}function o(t,e){e.resolve(t)}function a(t,e,r){var i=void 0===t?new n("timed out after "+r+"ms"):t;e.reject(i)}return t.prototype.delay=function(t){var e=this._beget();return this._handler.fold(i,t,void 0,e._handler),e},t.prototype.timeout=function(t,n){var i=this._beget(),o=i._handler,s=e(a,t,n,i._handler);return this._handler.visit(o,function(t){r.clearTimer(s),this.resolve(t)},function(t){r.clearTimer(s),this.reject(t)},o.notify),i},t}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t(e)})},{"../TimeoutError":206,"../env":217}],215:[function(e,r,n){!function(t){"use strict";t(function(t){function e(t){throw t}function r(){}var n=t("../env").setTimer,i=t("../format");return function(t){function o(t){t.handled||(f.push(t),h("Potentially unhandled rejection ["+t.id+"] "+i.formatError(t.value)))}function a(t){var e=f.indexOf(t);e>=0&&(f.splice(e,1),l("Handled previous rejection ["+t.id+"] "+i.formatObject(t.value)))}function s(t,e){p.push(t,e),null===d&&(d=n(c,0))}function c(){for(d=null;p.length>0;)p.shift()(p.shift())}var u,h=r,l=r;"undefined"!=typeof console&&(u=console,h=void 0!==u.error?function(t){u.error(t)}:function(t){u.log(t)},l=void 0!==u.info?function(t){u.info(t)}:function(t){u.log(t)}),t.onPotentiallyUnhandledRejection=function(t){s(o,t)},t.onPotentiallyUnhandledRejectionHandled=function(t){s(a,t)},t.onFatalRejection=function(t){s(e,t.value)};var p=[],f=[],d=null;return t}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t(e)})},{"../env":217,"../format":218}],216:[function(e,r,n){!function(t){"use strict";t(function(){return function(t){return t.prototype.with=t.prototype.withThis=function(t){var e=this._beget(),r=e._handler;return r.receiver=t,this._handler.chain(r,t),e},t}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],217:[function(e,r,n){(function(n){!function(t){"use strict";t(function(t){var e,r="undefined"!=typeof setTimeout&&setTimeout,i=function(t,e){return setTimeout(t,e)},o=function(t){return clearTimeout(t)},a=function(t){return r(t,0)};if(function(){return void 0!==n&&"[object process]"===Object.prototype.toString.call(n)}())a=function(t){return n.nextTick(t)};else if(e=function(){return"undefined"!=typeof MutationObserver&&MutationObserver||"undefined"!=typeof WebKitMutationObserver&&WebKitMutationObserver}())a=function(t){function e(){var t=r;r=void 0,t()}var r,n=document.createTextNode("");new t(e).observe(n,{characterData:!0});var i=0;return function(t){r=t,n.data=i^=1}}(e);else if(!r){var s=t,c=s("vertx");i=function(t,e){return c.setTimer(e,t)},o=c.cancelTimer,a=c.runOnLoop||c.runOnContext}return{setTimer:i,clearTimer:o,asap:a}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t(e)})}).call(this,e("_process"))},{_process:4}],218:[function(e,r,n){!function(t){"use strict";t(function(){function t(t){var r="object"==typeof t&&null!==t&&(t.stack||t.message)?t.stack||t.message:e(t);return t instanceof Error?r:r+" (WARNING: non-Error used)"}function e(t){var e=String(t);return"[object Object]"===e&&"undefined"!=typeof JSON&&(e=r(t,e)),e}function r(t,e){try{return JSON.stringify(t)}catch(t){return e}}return{formatError:t,formatObject:e,tryStringify:r}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],219:[function(e,r,n){(function(e){!function(t){"use strict";t(function(){return function(t){function r(t,e){this._handler=t===_?e:n(t)}function n(t){function e(t){i.resolve(t)}function r(t){i.reject(t)}function n(t){i.notify(t)}var i=new w;try{t(e,r,n)}catch(t){r(t)}return i}function i(t){return I(t)?t:new r(_,new S(g(t)))}function o(t){return new r(_,new S(new T(t)))}function a(){return et}function s(){return new r(_,new w)}function c(t,e){return new e(_,new w(t.receiver,t.join().context))}function u(t){return l(H,null,t)}function h(t,e){return l(B,t,e)}function l(t,e,n){function i(r,i,a){a.resolved||p(n,o,r,t(e,i,r),a)}function o(t,e,r){h[t]=e,0==--u&&r.become(new E(h))}for(var a,s="function"==typeof e?i:o,c=new w,u=n.length>>>0,h=new Array(u),l=0;l<n.length&&!c.resolved;++l)a=n[l],void 0!==a||l in n?p(n,s,l,a,c):--u;return 0===u&&c.become(new E(h)),new r(_,c)}function p(t,e,r,n,i){if(D(n)){var o=y(n),a=o.state();0===a?o.fold(e,r,void 0,i):a>0?e(r,o.value,i):(i.become(o),f(t,r+1,o))}else e(r,n,i)}function f(t,e,r){for(var n=e;n<t.length;++n)d(g(t[n]),r)}function d(t,e){if(t!==e){var r=t.state();0===r?t.visit(t,void 0,t._unreport):r<0&&t._unreport()}}function m(t){return"object"!=typeof t||null===t?o(new TypeError("non-iterable passed to race()")):0===t.length?a():1===t.length?i(t[0]):v(t)}function v(t){var e,n,i,o=new w;for(e=0;e<t.length;++e)if(void 0!==(n=t[e])||e in t){if(i=g(n),0!==i.state()){o.become(i),f(t,e+1,i);break}i.visit(o,o.resolve,o.reject)}return new r(_,o)}function g(t){return I(t)?t._handler.join():D(t)?b(t):new E(t)}function y(t){return I(t)?t._handler.join():b(t)}function b(t){try{var e=t.then;return"function"==typeof e?new M(e,t):new E(t)}catch(t){return new T(t)}}function _(){}function x(){}function w(t,e){r.createContext(this,e),this.consumers=void 0,this.receiver=t,this.handler=void 0,this.resolved=!1}function S(t){this.handler=t}function M(t,e){w.call(this),Y.enqueue(new R(t,e,this))}function E(t){r.createContext(this),this.value=t}function T(t){r.createContext(this),this.id=++Q,this.value=t,this.handled=!1,this.reported=!1,this._report()}function C(t,e){this.rejection=t,this.context=e}function O(t){this.rejection=t}function P(){return new T(new TypeError("Promise cycle"))}function A(t,e){this.continuation=t,this.handler=e}function j(t,e){this.handler=e,this.value=t}function R(t,e,r){this._then=t,this.thenable=e,this.resolver=r}function L(t,e,r,n,i){try{t.call(e,r,n,i)}catch(t){n(t)}}function N(t,e,r,n){this.f=t,this.z=e,this.c=r,this.to=n,this.resolver=J,this.receiver=this}function I(t){return t instanceof r}function D(t){return("object"==typeof t||"function"==typeof t)&&null!==t}function k(t,e,n,i){if("function"!=typeof t)return i.become(e);r.enterContext(e),z(t,e.value,n,i),r.exitContext()}function F(t,e,n,i,o){if("function"!=typeof t)return o.become(n);r.enterContext(n),$(t,e,n.value,i,o),r.exitContext()}function U(t,e,n,i,o){if("function"!=typeof t)return o.notify(e);r.enterContext(n),G(t,e,i,o),r.exitContext()}function B(t,e,r){try{return t(e,r)}catch(t){return o(t)}}function z(t,e,r,n){try{n.become(g(t.call(r,e)))}catch(t){n.become(new T(t))}}function $(t,e,r,n,i){try{t.call(n,e,r,i)}catch(t){i.become(new T(t))}}function G(t,e,r,n){try{n.notify(t.call(r,e))}catch(t){n.notify(t)}}function V(t,e){e.prototype=Z(t.prototype),e.prototype.constructor=e}function H(t,e){return e}function W(){}function q(){if("function"==typeof CustomEvent)try{return new CustomEvent("unhandledRejection")instanceof CustomEvent}catch(t){}return!1}function X(){if("undefined"!=typeof document&&"function"==typeof document.createEvent)try{return document.createEvent("CustomEvent").initCustomEvent("eventType",!1,!0,{}),!0}catch(t){}return!1}var Y=t.scheduler,K=function(){return void 0!==e&&null!==e&&"function"==typeof e.emit?function(t,r){return"unhandledRejection"===t?e.emit(t,r.value,r):e.emit(t,r)}:"undefined"!=typeof self&&q()?function(t,e){return function(r,n){var i=new e(r,{detail:{reason:n.value,key:n},bubbles:!1,cancelable:!0});return!t.dispatchEvent(i)}}(self,CustomEvent):"undefined"!=typeof self&&X()?function(t,e){return function(r,n){var i=e.createEvent("CustomEvent");return i.initCustomEvent(r,!1,!0,{reason:n.value,key:n}),!t.dispatchEvent(i)}}(self,document):W}(),Z=Object.create||function(t){function e(){}return e.prototype=t,new e};r.resolve=i,r.reject=o,r.never=a,r._defer=s,r._handler=g,r.prototype.then=function(t,e,r){var n=this._handler,i=n.join().state();if("function"!=typeof t&&i>0||"function"!=typeof e&&i<0)return new this.constructor(_,n);var o=this._beget(),a=o._handler;return n.chain(a,n.receiver,t,e,r),o},r.prototype.catch=function(t){return this.then(void 0,t)},r.prototype._beget=function(){return c(this._handler,this.constructor)},r.all=u,r.race=m,r._traverse=h,r._visitRemaining=f,_.prototype.when=_.prototype.become=_.prototype.notify=_.prototype.fail=_.prototype._unreport=_.prototype._report=W,_.prototype._state=0,_.prototype.state=function(){return this._state},_.prototype.join=function(){for(var t=this;void 0!==t.handler;)t=t.handler;return t},_.prototype.chain=function(t,e,r,n,i){this.when({resolver:t,receiver:e,fulfilled:r,rejected:n,progress:i})},_.prototype.visit=function(t,e,r,n){this.chain(J,t,e,r,n)},_.prototype.fold=function(t,e,r,n){this.when(new N(t,e,r,n))},V(_,x),x.prototype.become=function(t){t.fail()};var J=new x;V(_,w),w.prototype._state=0,w.prototype.resolve=function(t){this.become(g(t))},w.prototype.reject=function(t){this.resolved||this.become(new T(t))},w.prototype.join=function(){if(!this.resolved)return this;for(var t=this;void 0!==t.handler;)if((t=t.handler)===this)return this.handler=P();return t},w.prototype.run=function(){var t=this.consumers,e=this.handler;this.handler=this.handler.join(),this.consumers=void 0;for(var r=0;r<t.length;++r)e.when(t[r])},w.prototype.become=function(t){this.resolved||(this.resolved=!0,this.handler=t,void 0!==this.consumers&&Y.enqueue(this),void 0!==this.context&&t._report(this.context))},w.prototype.when=function(t){this.resolved?Y.enqueue(new A(t,this.handler)):void 0===this.consumers?this.consumers=[t]:this.consumers.push(t)},w.prototype.notify=function(t){this.resolved||Y.enqueue(new j(t,this))},w.prototype.fail=function(t){var e=void 0===t?this.context:t;this.resolved&&this.handler.join().fail(e)},w.prototype._report=function(t){this.resolved&&this.handler.join()._report(t)},w.prototype._unreport=function(){this.resolved&&this.handler.join()._unreport()},V(_,S),S.prototype.when=function(t){Y.enqueue(new A(t,this))},S.prototype._report=function(t){this.join()._report(t)},S.prototype._unreport=function(){this.join()._unreport()},V(w,M),V(_,E),E.prototype._state=1,E.prototype.fold=function(t,e,r,n){F(t,e,this,r,n)},E.prototype.when=function(t){k(t.fulfilled,this,t.receiver,t.resolver)};var Q=0;V(_,T),T.prototype._state=-1,T.prototype.fold=function(t,e,r,n){n.become(this)},T.prototype.when=function(t){"function"==typeof t.rejected&&this._unreport(),k(t.rejected,this,t.receiver,t.resolver)},T.prototype._report=function(t){Y.afterQueue(new C(this,t))},T.prototype._unreport=function(){this.handled||(this.handled=!0,Y.afterQueue(new O(this)))},T.prototype.fail=function(t){this.reported=!0,K("unhandledRejection",this),r.onFatalRejection(this,void 0===t?this.context:t)},C.prototype.run=function(){this.rejection.handled||this.rejection.reported||(this.rejection.reported=!0,K("unhandledRejection",this.rejection)||r.onPotentiallyUnhandledRejection(this.rejection,this.context))},O.prototype.run=function(){this.rejection.reported&&(K("rejectionHandled",this.rejection)||r.onPotentiallyUnhandledRejectionHandled(this.rejection))},r.createContext=r.enterContext=r.exitContext=r.onPotentiallyUnhandledRejection=r.onPotentiallyUnhandledRejectionHandled=r.onFatalRejection=W;var tt=new _,et=new r(_,tt);return A.prototype.run=function(){this.handler.join().when(this.continuation)},j.prototype.run=function(){var t=this.handler.consumers;if(void 0!==t)for(var e,r=0;r<t.length;++r)e=t[r],U(e.progress,this.value,this.handler,e.receiver,e.resolver)},R.prototype.run=function(){function t(t){n.resolve(t)}function e(t){n.reject(t)}function r(t){n.notify(t)}var n=this.resolver;L(this._then,this.thenable,t,e,r)},N.prototype.fulfilled=function(t){this.f.call(this.c,this.z,t,this.to)},N.prototype.rejected=function(t){this.to.reject(t)},N.prototype.progress=function(t){this.to.notify(t)},r}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})}).call(this,e("_process"))},{_process:4}],220:[function(e,r,n){!function(t){"use strict";t(function(){function t(){return{state:"pending"}}function e(t){return{state:"rejected",reason:t}}function r(t){return{state:"fulfilled",value:t}}function n(n){var i=n.state();return 0===i?t():i>0?r(n.value):e(n.value)}return{pending:t,fulfilled:r,rejected:e,inspect:n}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],221:[function(e,r,n){!function(t){"use strict";t(function(t){function e(t,e,r,n){var i=S.resolve(t);return arguments.length<2?i:i.then(e,r,n)}function r(t){return new S(t)}function n(t){return function(){for(var e=0,r=arguments.length,n=new Array(r);e<r;++e)n[e]=arguments[e];return M(t,this,n)}}function i(t){for(var e=0,r=arguments.length-1,n=new Array(r);e<r;++e)n[e]=arguments[e+1];return M(t,this,n)}function o(){return new a}function a(){function t(t){n._handler.resolve(t)}function e(t){n._handler.reject(t)}function r(t){n._handler.notify(t)}var n=S._defer();this.promise=n,this.resolve=t,this.reject=e,this.notify=r,this.resolver={resolve:t,reject:e,notify:r}}function s(t){return t&&"function"==typeof t.then}function c(){return S.all(arguments)}function u(t){return e(t,S.all)}function h(t){return e(t,S.settle)}function l(t,r){return e(t,function(t){return S.map(t,r)})}function p(t,r){return e(t,function(t){return S.filter(t,r)})}var f=t("./lib/decorators/timed"),d=t("./lib/decorators/array"),m=t("./lib/decorators/flow"),v=t("./lib/decorators/fold"),g=t("./lib/decorators/inspect"),y=t("./lib/decorators/iterate"),b=t("./lib/decorators/progress"),_=t("./lib/decorators/with"),x=t("./lib/decorators/unhandledRejection"),w=t("./lib/TimeoutError"),S=[d,m,v,y,b,g,_,f,x].reduce(function(t,e){return e(t)},t("./lib/Promise")),M=t("./lib/apply")(S);return e.promise=r,e.resolve=S.resolve,e.reject=S.reject,e.lift=n,e.try=i,e.attempt=i,e.iterate=S.iterate,e.unfold=S.unfold,e.join=c,e.all=u,e.settle=h,e.any=n(S.any),e.some=n(S.some),e.race=n(S.race),e.map=l,e.filter=p,e.reduce=n(S.reduce),e.reduceRight=n(S.reduceRight),e.isPromiseLike=s,e.Promise=S,e.defer=o,e.TimeoutError=w,e})}("function"==typeof t&&t.amd?t:function(t){r.exports=t(e)})},{"./lib/Promise":204,"./lib/TimeoutError":206,"./lib/apply":207,"./lib/decorators/array":208,"./lib/decorators/flow":209,"./lib/decorators/fold":210,"./lib/decorators/inspect":211,"./lib/decorators/iterate":212,"./lib/decorators/progress":213,"./lib/decorators/timed":214,"./lib/decorators/unhandledRejection":215,"./lib/decorators/with":216}],222:[function(t,e,r){function n(t){return"[object Array]"===o.call(t)}var i=Array.isArray,o=Object.prototype.toString;e.exports=i||n},{}],223:[function(t,e,r){"use strict";var n=t("./api/APIv3");r.APIv3=n.APIv3;var i=t("./api/ModelCreator");r.ModelCreator=i.ModelCreator},{"./api/APIv3":235,"./api/ModelCreator":236}],224:[function(t,e,r){"use strict";var n=t("./component/Component");r.Component=n.Component;var i=t("./component/ComponentService");r.ComponentService=i.ComponentService;var o=t("./component/AttributionComponent");r.AttributionComponent=o.AttributionComponent;var a=t("./component/BackgroundComponent");r.BackgroundComponent=a.BackgroundComponent;var s=t("./component/BearingComponent");r.BearingComponent=s.BearingComponent;var c=t("./component/CacheComponent");r.CacheComponent=c.CacheComponent;var u=t("./component/CoverComponent");r.CoverComponent=u.CoverComponent;var h=t("./component/DebugComponent");r.DebugComponent=h.DebugComponent;var l=t("./component/direction/DirectionComponent");r.DirectionComponent=l.DirectionComponent;var p=t("./component/direction/DirectionDOMCalculator");r.DirectionDOMCalculator=p.DirectionDOMCalculator;var f=t("./component/direction/DirectionDOMRenderer");r.DirectionDOMRenderer=f.DirectionDOMRenderer;var d=t("./component/ImageComponent");r.ImageComponent=d.ImageComponent;var m=t("./component/KeyboardComponent");r.KeyboardComponent=m.KeyboardComponent;var v=t("./component/LoadingComponent");r.LoadingComponent=v.LoadingComponent;var g=t("./component/marker/marker/Marker");r.Marker=g.Marker;var y=t("./component/marker/MarkerComponent");r.MarkerComponent=y.MarkerComponent;var b=t("./component/marker/MarkerScene");r.MarkerScene=b.MarkerScene;var _=t("./component/marker/MarkerSet");r.MarkerSet=_.MarkerSet;var x=t("./component/mouse/MouseComponent");r.MouseComponent=x.MouseComponent;var w=t("./component/mouse/MouseHandlerBase");r.MouseHandlerBase=w.MouseHandlerBase;var S=t("./component/mouse/DragPanHandler");r.DragPanHandler=S.DragPanHandler;var M=t("./component/mouse/DoubleClickZoomHandler");r.DoubleClickZoomHandler=M.DoubleClickZoomHandler;var E=t("./component/mouse/ScrollZoomHandler");r.ScrollZoomHandler=E.ScrollZoomHandler;var T=t("./component/mouse/TouchZoomHandler");r.TouchZoomHandler=T.TouchZoomHandler;var C=t("./component/NavigationComponent");r.NavigationComponent=C.NavigationComponent;var O=t("./component/RouteComponent");r.RouteComponent=O.RouteComponent;var P=t("./component/sequence/SequenceComponent");r.SequenceComponent=P.SequenceComponent;var A=t("./component/sequence/SequenceDOMRenderer");r.SequenceDOMRenderer=A.SequenceDOMRenderer;var j=t("./component/sequence/SequenceDOMInteraction");r.SequenceDOMInteraction=j.SequenceDOMInteraction;var R=t("./component/imageplane/ImagePlaneComponent");r.ImagePlaneComponent=R.ImagePlaneComponent;var L=t("./component/imageplane/ImagePlaneFactory");r.ImagePlaneFactory=L.ImagePlaneFactory;var N=t("./component/imageplane/ImagePlaneGLRenderer");r.ImagePlaneGLRenderer=N.ImagePlaneGLRenderer;var I=t("./component/imageplane/ImagePlaneScene");r.ImagePlaneScene=I.ImagePlaneScene;var D=t("./component/imageplane/ImagePlaneShaders");r.ImagePlaneShaders=D.ImagePlaneShaders;var k=t("./component/marker/marker/SimpleMarker");r.SimpleMarker=k.SimpleMarker;var F=t("./component/marker/marker/CircleMarker");r.CircleMarker=F.CircleMarker;var U=t("./component/imageplane/SliderComponent");r.SliderComponent=U.SliderComponent;var B=t("./component/StatsComponent");r.StatsComponent=B.StatsComponent;var z=t("./component/tag/tag/Tag");r.Tag=z.Tag;var $=t("./component/tag/tag/Alignment");r.Alignment=$.Alignment;var G=t("./component/tag/tag/OutlineTag");r.OutlineTag=G.OutlineTag;var V=t("./component/tag/tag/RenderTag");r.RenderTag=V.RenderTag;var H=t("./component/tag/tag/OutlineRenderTag");r.OutlineRenderTag=H.OutlineRenderTag;var W=t("./component/tag/tag/OutlineCreateTag");r.OutlineCreateTag=W.OutlineCreateTag;var q=t("./component/tag/tag/SpotTag");r.SpotTag=q.SpotTag;var X=t("./component/tag/tag/SpotRenderTag");r.SpotRenderTag=X.SpotRenderTag;var Y=t("./component/tag/TagComponent");r.TagComponent=Y.TagComponent;var K=t("./component/tag/TagCreator");r.TagCreator=K.TagCreator;var Z=t("./component/tag/TagDOMRenderer");r.TagDOMRenderer=Z.TagDOMRenderer;var J=t("./component/tag/TagGLRenderer");r.TagGLRenderer=J.TagGLRenderer;var Q=t("./component/tag/TagOperation");r.TagOperation=Q.TagOperation;var tt=t("./component/tag/TagSet");r.TagSet=tt.TagSet;var et=t("./component/tag/geometry/Geometry");r.Geometry=et.Geometry;var rt=t("./component/tag/geometry/VertexGeometry");r.VertexGeometry=rt.VertexGeometry;var nt=t("./component/tag/geometry/RectGeometry");r.RectGeometry=nt.RectGeometry;var it=t("./component/tag/geometry/PointGeometry");r.PointGeometry=it.PointGeometry;var ot=t("./component/tag/geometry/PolygonGeometry");r.PolygonGeometry=ot.PolygonGeometry;var at=t("./component/tag/error/GeometryTagError");r.GeometryTagError=at.GeometryTagError},{"./component/AttributionComponent":237,"./component/BackgroundComponent":238,"./component/BearingComponent":239,"./component/CacheComponent":240,"./component/Component":241,"./component/ComponentService":242,"./component/CoverComponent":243,"./component/DebugComponent":244,"./component/ImageComponent":245,"./component/KeyboardComponent":246,"./component/LoadingComponent":247,"./component/NavigationComponent":248,"./component/RouteComponent":249,"./component/StatsComponent":250,"./component/direction/DirectionComponent":251,"./component/direction/DirectionDOMCalculator":252,"./component/direction/DirectionDOMRenderer":253,"./component/imageplane/ImagePlaneComponent":254,"./component/imageplane/ImagePlaneFactory":255,"./component/imageplane/ImagePlaneGLRenderer":256,"./component/imageplane/ImagePlaneScene":257,
-"./component/imageplane/ImagePlaneShaders":258,"./component/imageplane/SliderComponent":259,"./component/marker/MarkerComponent":261,"./component/marker/MarkerScene":262,"./component/marker/MarkerSet":263,"./component/marker/marker/CircleMarker":264,"./component/marker/marker/Marker":265,"./component/marker/marker/SimpleMarker":266,"./component/mouse/DoubleClickZoomHandler":267,"./component/mouse/DragPanHandler":268,"./component/mouse/MouseComponent":269,"./component/mouse/MouseHandlerBase":270,"./component/mouse/ScrollZoomHandler":271,"./component/mouse/TouchZoomHandler":272,"./component/sequence/SequenceComponent":273,"./component/sequence/SequenceDOMInteraction":274,"./component/sequence/SequenceDOMRenderer":275,"./component/tag/TagComponent":277,"./component/tag/TagCreator":278,"./component/tag/TagDOMRenderer":279,"./component/tag/TagGLRenderer":280,"./component/tag/TagOperation":281,"./component/tag/TagSet":282,"./component/tag/error/GeometryTagError":283,"./component/tag/geometry/Geometry":284,"./component/tag/geometry/PointGeometry":285,"./component/tag/geometry/PolygonGeometry":286,"./component/tag/geometry/RectGeometry":287,"./component/tag/geometry/VertexGeometry":288,"./component/tag/tag/Alignment":289,"./component/tag/tag/OutlineCreateTag":290,"./component/tag/tag/OutlineRenderTag":291,"./component/tag/tag/OutlineTag":292,"./component/tag/tag/RenderTag":293,"./component/tag/tag/SpotRenderTag":294,"./component/tag/tag/SpotTag":295,"./component/tag/tag/Tag":296}],225:[function(t,e,r){"use strict";var n=t("./graph/edge/EdgeDirection");r.EdgeDirection=n.EdgeDirection;var i=t("./graph/edge/EdgeCalculatorSettings");r.EdgeCalculatorSettings=i.EdgeCalculatorSettings;var o=t("./graph/edge/EdgeCalculatorDirections");r.EdgeCalculatorDirections=o.EdgeCalculatorDirections;var a=t("./graph/edge/EdgeCalculatorCoefficients");r.EdgeCalculatorCoefficients=a.EdgeCalculatorCoefficients;var s=t("./graph/edge/EdgeCalculator");r.EdgeCalculator=s.EdgeCalculator},{"./graph/edge/EdgeCalculator":314,"./graph/edge/EdgeCalculatorCoefficients":315,"./graph/edge/EdgeCalculatorDirections":316,"./graph/edge/EdgeCalculatorSettings":317,"./graph/edge/EdgeDirection":318}],226:[function(t,e,r){"use strict";var n=t("./error/ArgumentMapillaryError");r.ArgumentMapillaryError=n.ArgumentMapillaryError;var i=t("./error/GraphMapillaryError");r.GraphMapillaryError=i.GraphMapillaryError;var o=t("./error/MapillaryError");r.MapillaryError=o.MapillaryError},{"./error/ArgumentMapillaryError":297,"./error/GraphMapillaryError":298,"./error/MapillaryError":299}],227:[function(t,e,r){"use strict";var n=t("./geo/Camera");r.Camera=n.Camera;var i=t("./geo/GeoCoords");r.GeoCoords=i.GeoCoords;var o=t("./geo/ViewportCoords");r.ViewportCoords=o.ViewportCoords;var a=t("./geo/Spatial");r.Spatial=a.Spatial;var s=t("./geo/Transform");r.Transform=s.Transform},{"./geo/Camera":300,"./geo/GeoCoords":301,"./geo/Spatial":302,"./geo/Transform":303,"./geo/ViewportCoords":304}],228:[function(t,e,r){"use strict";var n=t("./graph/FilterCreator");r.FilterCreator=n.FilterCreator;var i=t("./graph/Graph");r.Graph=i.Graph;var o=t("./graph/GraphCalculator");r.GraphCalculator=o.GraphCalculator;var a=t("./graph/GraphService");r.GraphService=a.GraphService;var s=t("./graph/ImageLoadingService");r.ImageLoadingService=s.ImageLoadingService;var c=t("./graph/MeshReader");r.MeshReader=c.MeshReader;var u=t("./graph/Node");r.Node=u.Node;var h=t("./graph/NodeCache");r.NodeCache=h.NodeCache;var l=t("./graph/Sequence");r.Sequence=l.Sequence},{"./graph/FilterCreator":305,"./graph/Graph":306,"./graph/GraphCalculator":307,"./graph/GraphService":308,"./graph/ImageLoadingService":309,"./graph/MeshReader":310,"./graph/Node":311,"./graph/NodeCache":312,"./graph/Sequence":313}],229:[function(t,e,r){"use strict";var n=t("./Edge");r.EdgeDirection=n.EdgeDirection;var i=t("./Render");r.RenderMode=i.RenderMode;var o=t("./Viewer");r.ImageSize=o.ImageSize,r.Viewer=o.Viewer;var a=t("./component/tag/Tag");r.TagComponent=a;var s=t("./component/marker/Marker");r.MarkerComponent=s},{"./Edge":225,"./Render":230,"./Viewer":234,"./component/marker/Marker":260,"./component/tag/Tag":276}],230:[function(t,e,r){"use strict";var n=t("./render/DOMRenderer");r.DOMRenderer=n.DOMRenderer;var i=t("./render/GLRenderer");r.GLRenderer=i.GLRenderer;var o=t("./render/GLRenderStage");r.GLRenderStage=o.GLRenderStage;var a=t("./render/RenderCamera");r.RenderCamera=a.RenderCamera;var s=t("./render/RenderMode");r.RenderMode=s.RenderMode;var c=t("./render/RenderService");r.RenderService=c.RenderService},{"./render/DOMRenderer":319,"./render/GLRenderStage":320,"./render/GLRenderer":321,"./render/RenderCamera":322,"./render/RenderMode":323,"./render/RenderService":324}],231:[function(t,e,r){"use strict";var n=t("./state/State");r.State=n.State;var i=t("./state/states/StateBase");r.StateBase=i.StateBase;var o=t("./state/StateContext");r.StateContext=o.StateContext;var a=t("./state/StateService");r.StateService=a.StateService;var s=t("./state/states/TraversingState");r.TraversingState=s.TraversingState;var c=t("./state/states/WaitingState");r.WaitingState=c.WaitingState},{"./state/State":325,"./state/StateContext":326,"./state/StateService":327,"./state/states/StateBase":328,"./state/states/TraversingState":329,"./state/states/WaitingState":330}],232:[function(t,e,r){"use strict";var n=t("./tiles/ImageTileLoader");r.ImageTileLoader=n.ImageTileLoader;var i=t("./tiles/ImageTileStore");r.ImageTileStore=i.ImageTileStore;var o=t("./tiles/TextureProvider");r.TextureProvider=o.TextureProvider;var a=t("./tiles/RegionOfInterestCalculator");r.RegionOfInterestCalculator=a.RegionOfInterestCalculator},{"./tiles/ImageTileLoader":331,"./tiles/ImageTileStore":332,"./tiles/RegionOfInterestCalculator":333,"./tiles/TextureProvider":334}],233:[function(t,e,r){"use strict";var n=t("./utils/EventEmitter");r.EventEmitter=n.EventEmitter;var i=t("./utils/Settings");r.Settings=i.Settings;var o=t("./utils/Urls");r.Urls=o.Urls},{"./utils/EventEmitter":335,"./utils/Settings":336,"./utils/Urls":337}],234:[function(t,e,r){"use strict";var n=t("./viewer/CacheService");r.CacheService=n.CacheService;var i=t("./viewer/ComponentController");r.ComponentController=i.ComponentController;var o=t("./viewer/Container");r.Container=o.Container;var a=t("./viewer/Observer");r.Observer=a.Observer;var s=t("./viewer/ImageSize");r.ImageSize=s.ImageSize;var c=t("./viewer/LoadingService");r.LoadingService=c.LoadingService;var u=t("./viewer/MouseService");r.MouseService=u.MouseService;var h=t("./viewer/Navigator");r.Navigator=h.Navigator;var l=t("./viewer/Projection");r.Projection=l.Projection;var p=t("./viewer/SpriteAlignment");r.SpriteAlignment=p.SpriteAlignment;var f=t("./viewer/SpriteService");r.SpriteService=f.SpriteService;var d=t("./viewer/TouchService");r.TouchService=d.TouchService;var m=t("./viewer/Viewer");r.Viewer=m.Viewer},{"./viewer/CacheService":338,"./viewer/ComponentController":339,"./viewer/Container":340,"./viewer/ImageSize":341,"./viewer/LoadingService":342,"./viewer/MouseService":343,"./viewer/Navigator":344,"./viewer/Observer":345,"./viewer/Projection":346,"./viewer/SpriteAlignment":347,"./viewer/SpriteService":348,"./viewer/TouchService":349,"./viewer/Viewer":350}],235:[function(t,e,r){"use strict";var n=t("rxjs/Observable");t("rxjs/add/observable/defer"),t("rxjs/add/observable/fromPromise"),t("rxjs/add/operator/catch"),t("rxjs/add/operator/map");var i=t("../API"),o=function(){function t(t,e,r){this._clientId=t,this._modelCreator=null!=r?r:new i.ModelCreator,this._model=this._modelCreator.createModel(t,e),this._pageCount=999,this._pathImageByKey="imageByKey",this._pathImageCloseTo="imageCloseTo",this._pathImagesByH="imagesByH",this._pathImageViewAdd="imageViewAdd",this._pathSequenceByKey="sequenceByKey",this._pathSequenceViewAdd="sequenceViewAdd",this._propertiesCore=["cl","l","sequence"],this._propertiesFill=["captured_at","user","project"],this._propertiesKey=["key"],this._propertiesSequence=["keys"],this._propertiesSpatial=["atomic_scale","ca","calt","cca","cfocal","gpano","height","merge_cc","merge_version","c_rotation","orientation","width"],this._propertiesUser=["username"]}return t.prototype.imageByKeyFill$=function(t){return this._catchInvalidateGet$(this._wrapPromise$(this._model.get([this._pathImageByKey,t,this._propertiesKey.concat(this._propertiesFill).concat(this._propertiesSpatial),this._propertiesKey.concat(this._propertiesUser)])).map(function(t){return t.json.imageByKey}),this._pathImageByKey,t)},t.prototype.imageByKeyFull$=function(t){return this._catchInvalidateGet$(this._wrapPromise$(this._model.get([this._pathImageByKey,t,this._propertiesKey.concat(this._propertiesCore).concat(this._propertiesFill).concat(this._propertiesSpatial),this._propertiesKey.concat(this._propertiesUser)])).map(function(t){return t.json.imageByKey}),this._pathImageByKey,t)},t.prototype.imageCloseTo$=function(t,e){var r=e+":"+t;return this._catchInvalidateGet$(this._wrapPromise$(this._model.get([this._pathImageCloseTo,[r],this._propertiesKey.concat(this._propertiesCore).concat(this._propertiesFill).concat(this._propertiesSpatial),this._propertiesKey.concat(this._propertiesUser)])).map(function(t){return null!=t?t.json.imageCloseTo[r]:null}),this._pathImageCloseTo,[r])},t.prototype.imagesByH$=function(t){var e=this;return this._catchInvalidateGet$(this._wrapPromise$(this._model.get([this._pathImagesByH,t,{from:0,to:this._pageCount},this._propertiesKey.concat(this._propertiesCore),this._propertiesKey])).map(function(r){if(null==r){r={json:{imagesByH:{}}};for(var n=0,i=t;n<i.length;n++){var o=i[n];r.json.imagesByH[o]={};for(var a=0;a<=e._pageCount;a++)r.json.imagesByH[o][a]=null}}return r.json.imagesByH}),this._pathImagesByH,t)},t.prototype.imageViewAdd$=function(t){return this._catchInvalidateCall$(this._wrapPromise$(this._model.call([this._pathImageViewAdd],[t])),this._pathImageViewAdd,t)},t.prototype.invalidateImageByKey=function(t){this._invalidateGet(this._pathImageByKey,t)},t.prototype.invalidateImagesByH=function(t){this._invalidateGet(this._pathImagesByH,t)},t.prototype.invalidateSequenceByKey=function(t){this._invalidateGet(this._pathSequenceByKey,t)},t.prototype.setToken=function(t){this._model.invalidate([]),this._model=null,this._model=this._modelCreator.createModel(this._clientId,t)},t.prototype.sequenceByKey$=function(t){return this._catchInvalidateGet$(this._wrapPromise$(this._model.get([this._pathSequenceByKey,t,this._propertiesKey.concat(this._propertiesSequence)])).map(function(t){return t.json.sequenceByKey}),this._pathSequenceByKey,t)},t.prototype.sequenceViewAdd$=function(t){return this._catchInvalidateCall$(this._wrapPromise$(this._model.call([this._pathSequenceViewAdd],[t])),this._pathSequenceViewAdd,t)},Object.defineProperty(t.prototype,"clientId",{get:function(){return this._clientId},enumerable:!0,configurable:!0}),t.prototype._catchInvalidateGet$=function(t,e,r){var n=this;return t.catch(function(t){throw n._invalidateGet(e,r),t})},t.prototype._catchInvalidateCall$=function(t,e,r){var n=this;return t.catch(function(t){throw n._invalidateCall(e,r),t})},t.prototype._invalidateGet=function(t,e){this._model.invalidate([t,e])},t.prototype._invalidateCall=function(t,e){this._model.invalidate([t],[e])},t.prototype._wrapPromise$=function(t){return n.Observable.defer(function(){return n.Observable.fromPromise(t)})},t}();r.APIv3=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../API":223,"rxjs/Observable":28,"rxjs/add/observable/defer":38,"rxjs/add/observable/fromPromise":42,"rxjs/add/operator/catch":51,"rxjs/add/operator/map":64}],236:[function(t,e,r){"use strict";var n=t("falcor"),i=t("falcor-http-datasource"),o=t("../Utils"),a=function(){function t(){}return t.prototype.createModel=function(t,e){var r={crossDomain:!0,withCredentials:!1};return null!=e&&(r.headers={Authorization:"Bearer "+e}),new n.Model({maxSize:16777216,source:new i(o.Urls.falcorModel(t),r)})},t}();r.ModelCreator=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../Utils":233,falcor:13,"falcor-http-datasource":8}],237:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom"),o=t("../Component"),a=function(t){function e(e,r,n){return t.call(this,e,r,n)||this}return n(e,t),e.prototype._activate=function(){var t=this;this._disposable=this._navigator.stateService.currentNode$.map(function(e){return{name:t._name,vnode:t._getAttributionNode(e.username,e.key)}}).subscribe(this._container.domRenderer.render$)},e.prototype._deactivate=function(){this._disposable.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype._getAttributionNode=function(t,e){return i.h("div.Attribution",{},[i.h("a",{href:"https://www.mapillary.com/app/user/"+t,target:"_blank",textContent:"@"+t},[]),i.h("span",{textContent:"|"},[]),i.h("a",{href:"https://www.mapillary.com/app/?pKey="+e+"&focus=photo",target:"_blank",textContent:"mapillary.com"},[])])},e}(o.Component);a.componentName="attribution",r.AttributionComponent=a,o.ComponentService.register(a),Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../Component":224,"virtual-dom":180}],238:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom"),o=t("../Component"),a=function(t){function e(e,r,n){return t.call(this,e,r,n)||this}return n(e,t),e.prototype._activate=function(){this._container.domRenderer.render$.next({name:this._name,vnode:this._getBackgroundNode("The viewer can't display the given photo.")})},e.prototype._deactivate=function(){},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype._getBackgroundNode=function(t){return i.h("div.BackgroundWrapper",{},[i.h("p",{textContent:t},[])])},e}(o.Component);a.componentName="background",r.BackgroundComponent=a,o.ComponentService.register(a),Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../Component":224,"virtual-dom":180}],239:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom"),o=t("rxjs/Observable"),a=t("../Component"),s=t("../Geo"),c=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._spatial=new s.Spatial,i._svgNamespace="http://www.w3.org/2000/svg",i._distinctThreshold=Math.PI/90,i}return n(e,t),e.prototype._activate=function(){var t=this,e=this._navigator.stateService.currentState$.distinctUntilChanged(void 0,function(t){return t.state.currentNode.key}).map(function(e){var r=e.state.currentNode,n=e.state.currentTransform;if(r.pano){var i=2*Math.PI*r.gpano.CroppedAreaImageWidthPixels/r.gpano.FullPanoWidthPixels;return[t._spatial.degToRad(r.ca),i]}var o=Math.max(n.basicWidth,n.basicHeight);o<=0&&console.warn("Original image size ("+n.basicWidth+", "+n.basicHeight+") is invalid ("+r.key+". Not showing available fov.");var a=o>0?2*Math.atan(.5*n.basicWidth/(o*n.focal)):0;return[t._spatial.degToRad(r.ca),a]}).distinctUntilChanged(function(e,r){return Math.abs(r[0]-e[0])<t._distinctThreshold&&Math.abs(r[1]-e[1])<t._distinctThreshold}),r=this._container.renderService.renderCamera$.map(function(e){var r=t._spatial.degToRad(e.perspective.fov),n=2*Math.atan(e.perspective.aspect*Math.tan(.5*r));return[t._spatial.azimuthalToBearing(e.rotation.phi),n]}).distinctUntilChanged(function(e,r){return Math.abs(r[0]-e[0])<t._distinctThreshold&&Math.abs(r[1]-e[1])<t._distinctThreshold});this._renderSubscription=o.Observable.combineLatest(e,r).map(function(e){var r=i.h("div.BearingIndicatorBackground",{oncontextmenu:function(t){t.preventDefault()}},[i.h("div.BearingIndicatorBackgroundRectangle",{},[]),i.h("div.BearingIndicatorBackgroundCircle",{},[])]),n=i.h("div.BearingIndicatorNorth",{},[]),o=t._createCircleSector(e[0][0],e[0][1],"#000"),a=t._createCircleSector(e[1][0],e[1][1],"#fff"),s=t._createCircleSectorCompass(o,a);return{name:t._name,vnode:i.h("div.BearingIndicator",{},[r,n,s])}}).subscribe(this._container.domRenderer.render$)},e.prototype._deactivate=function(){this._renderSubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype._createCircleSectorCompass=function(t,e){var r=i.h("g",{attributes:{transform:"translate(1,1)"},namespace:this._svgNamespace},[t,e]),n=i.h("circle",{attributes:{cx:"1",cy:"1",fill:"#abb1b9",r:"0.291667",stroke:"#000","stroke-width":"0.0833333"},namespace:this._svgNamespace},[]);return i.h("svg",{attributes:{viewBox:"0 0 2 2"},namespace:this._svgNamespace,style:{bottom:"4px",height:"48px",left:"4px",position:"absolute",width:"48px"}},[r,n])},e.prototype._createCircleSector=function(t,e,r){if(e>2*Math.PI-Math.PI/90)return i.h("circle",{attributes:{cx:"0",cy:"0",fill:r,r:"1"},namespace:this._svgNamespace},[]);var n=t-e/2-Math.PI/2,o=n+e,a=Math.cos(n),s=Math.sin(n),c=Math.cos(o),u=Math.sin(o),h=e>=Math.PI?1:0,l="M 0 0 "+a+" "+s+" A 1 1 0 "+h+" 1 "+c+" "+u;return i.h("path",{attributes:{d:l,fill:r},namespace:this._svgNamespace},[])},e}(a.Component);c.componentName="bearing",r.BearingComponent=c,a.ComponentService.register(c),Object.defineProperty(r,"__esModule",{value:!0}),r.default=c},{"../Component":224,"../Geo":227,"rxjs/Observable":28,"virtual-dom":180}],240:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable");t("rxjs/add/observable/combineLatest"),t("rxjs/add/observable/from"),t("rxjs/add/observable/merge"),t("rxjs/add/observable/of"),t("rxjs/add/observable/zip"),t("rxjs/add/operator/catch"),t("rxjs/add/operator/combineLatest"),t("rxjs/add/operator/distinct"),t("rxjs/add/operator/expand"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/merge"),t("rxjs/add/operator/mergeMap"),t("rxjs/add/operator/mergeAll"),t("rxjs/add/operator/skip"),t("rxjs/add/operator/switchMap");var o=t("../Edge"),a=t("../Component"),s=function(t){function e(e,r,n){return t.call(this,e,r,n)||this}return n(e,t),e.prototype.setDepth=function(t){this.configure({depth:t})},e.prototype._activate=function(){var t=this;this._sequenceSubscription=i.Observable.combineLatest(this._navigator.stateService.currentNode$.switchMap(function(t){return t.sequenceEdges$}).filter(function(t){return t.cached}),this._configuration$).switchMap(function(e){var r=e[0],n=e[1],a=Math.max(0,Math.min(4,n.depth.sequence)),s=t._cache$(r.edges,o.EdgeDirection.Next,a),c=t._cache$(r.edges,o.EdgeDirection.Prev,a);return i.Observable.merge(s,c).catch(function(t,e){return console.error("Failed to cache sequence edges.",t),i.Observable.empty()})}).subscribe(function(){}),this._spatialSubscription=this._navigator.stateService.currentNode$.switchMap(function(t){return i.Observable.combineLatest(i.Observable.of(t),t.spatialEdges$.filter(function(t){return t.cached}))}).combineLatest(this._configuration$,function(t,e){return[t[0],t[1],e]}).switchMap(function(e){var r=e[0],n=e[1].edges,a=e[2].depth,s=Math.max(0,Math.min(2,a.pano)),c=r.pano?0:Math.max(0,Math.min(3,a.step)),u=r.pano?0:Math.max(0,Math.min(1,a.turn)),h=t._cache$(n,o.EdgeDirection.Pano,s),l=t._cache$(n,o.EdgeDirection.StepForward,c),p=t._cache$(n,o.EdgeDirection.StepBackward,c),f=t._cache$(n,o.EdgeDirection.StepLeft,c),d=t._cache$(n,o.EdgeDirection.StepRight,c),m=t._cache$(n,o.EdgeDirection.TurnLeft,u),v=t._cache$(n,o.EdgeDirection.TurnRight,u),g=t._cache$(n,o.EdgeDirection.TurnU,u);return i.Observable.merge(l,p,f,d,h,m,v,g).catch(function(t,e){return console.error("Failed to cache spatial edges.",t),i.Observable.empty()})}).subscribe(function(){})},e.prototype._deactivate=function(){this._sequenceSubscription.unsubscribe(),this._spatialSubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{depth:{pano:1,sequence:2,step:1,turn:0}}},e.prototype._cache$=function(t,e,r){var n=this;return i.Observable.zip(i.Observable.of(t),i.Observable.of(r)).expand(function(t){var r=t[0],o=t[1],a=[];if(o>0)for(var s=0,c=r;s<c.length;s++){var u=c[s];u.data.direction===e&&a.push(i.Observable.zip(n._navigator.graphService.cacheNode$(u.to).mergeMap(function(t){return n._nodeToEdges$(t,e)}),i.Observable.of(o-1)))}return i.Observable.from(a).mergeAll()}).skip(1)},e.prototype._nodeToEdges$=function(t,e){return([o.EdgeDirection.Next,o.EdgeDirection.Prev].indexOf(e)>-1?t.sequenceEdges$:t.spatialEdges$).first(function(t){return t.cached}).map(function(t){return t.edges})},e}(a.Component);s.componentName="cache",r.CacheComponent=s,a.ComponentService.register(s),Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../Component":224,"../Edge":225,"rxjs/Observable":28,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/from":40,"rxjs/add/observable/merge":43,"rxjs/add/observable/of":44,"rxjs/add/observable/zip":47,"rxjs/add/operator/catch":51,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/distinct":56,"rxjs/add/operator/expand":59,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeAll":66,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/skip":74,"rxjs/add/operator/switchMap":78}],241:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/BehaviorSubject"),o=t("rxjs/Subject");t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/startWith");var a=t("../Utils"),s=function(t){function e(e,r,n){var a=t.call(this)||this;return a._activated$=new i.BehaviorSubject(!1),a._configurationSubject$=new o.Subject,a._activated=!1,a._container=r,a._name=e,a._navigator=n,a._configuration$=a._configurationSubject$.startWith(a.defaultConfiguration).scan(function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);return t}).publishReplay(1).refCount(),a._configuration$.subscribe(function(){}),a}return n(e,t),Object.defineProperty(e.prototype,"activated",{get:function(){return this._activated},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"activated$",{get:function(){return this._activated$},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"defaultConfiguration",{get:function(){return this._getDefaultConfiguration()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"configuration$",{get:function(){return this._configuration$},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"name",{get:function(){return this._name},enumerable:!0,configurable:!0}),e.prototype.activate=function(t){this._activated||(void 0!==t&&this._configurationSubject$.next(t),this._activated=!0,this._activate(),this._activated$.next(!0))},e.prototype.configure=function(t){this._configurationSubject$.next(t)},e.prototype.deactivate=function(){this._activated&&(this._activated=!1,this._deactivate(),this._container.domRenderer.clear(this._name),this._container.glRenderer.clear(this._name),this._activated$.next(!1))},e.prototype.resize=function(){},e}(a.EventEmitter);s.componentName="not_worthy",r.Component=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../Utils":233,"rxjs/BehaviorSubject":25,"rxjs/Subject":33,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77}],242:[function(t,e,r){"use strict";var n=t("underscore"),i=t("../Error"),o=function(){function t(e,r){this._components={},this._container=e,this._navigator=r;for(var i=0,o=n.values(t.registeredComponents);i<o.length;i++){var a=o[i];this._components[a.componentName]={active:!1,component:new a(a.componentName,e,r)}}this._coverComponent=new t.registeredCoverComponent("cover",e,r),this._coverComponent.activate(),this._coverActivated=!0}return t.register=function(e){void 0===t.registeredComponents[e.componentName]&&(t.registeredComponents[e.componentName]=e)},t.registerCover=function(e){t.registeredCoverComponent=e},t.prototype.activateCover=function(){if(!this._coverActivated){this._coverActivated=!0;for(var t=0,e=n.values(this._components);t<e.length;t++){var r=e[t];r.active&&r.component.deactivate()}}},t.prototype.deactivateCover=function(){if(this._coverActivated){this._coverActivated=!1;for(var t=0,e=n.values(this._components);t<e.length;t++){var r=e[t];r.active&&r.component.activate()}}},t.prototype.activate=function(t){this._checkName(t),this._components[t].active=!0,this._coverActivated||this.get(t).activate()},t.prototype.configure=function(t,e){this._checkName(t),this.get(t).configure(e)},t.prototype.deactivate=function(t){this._checkName(t),this._components[t].active=!1,this._coverActivated||this.get(t).deactivate()},t.prototype.resize=function(){for(var t=0,e=n.values(this._components);t<e.length;t++){e[t].component.resize()}},t.prototype.get=function(t){return this._components[t].component},t.prototype.getCover=function(){return this._coverComponent},t.prototype._checkName=function(t){if(!(t in this._components))throw new i.ArgumentMapillaryError("Component does not exist: "+t)},t}();o.registeredComponents={},r.ComponentService=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../Error":226,underscore:175}],243:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom");t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/withLatestFrom");var o=t("../Component"),a=function(t){function e(e,r,n){return t.call(this,e,r,n)||this}return n(e,t),e.prototype._activate=function(){var t=this;this._keyDisposable=this._navigator.stateService.currentNode$.withLatestFrom(this._configuration$,function(t,e){return[t,e]}).filter(function(t){return t[0].key!==t[1].key}).map(function(t){return t[0]}).map(function(t){return{key:t.key,src:t.image.src}}).subscribe(this._configurationSubject$),this._disposable=this._configuration$.map(function(e){return e.key?e.visible?{name:t._name,vnode:t._getCoverButtonVNode(e)}:{name:t._name,vnode:i.h("div.Cover.CoverDone",[t._getCoverBackgroundVNode(e)])}:{name:t._name,vnode:i.h("div",[])}}).subscribe(this._container.domRenderer.render$)},e.prototype._deactivate=function(){this._disposable.unsubscribe(),this._keyDisposable.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{loading:!1,visible:!0}},e.prototype._getCoverButtonVNode=function(t){var e=this,r=t.loading?"div.Cover.CoverLoading":"div.Cover";return i.h(r,[this._getCoverBackgroundVNode(t),i.h("button.CoverButton",{onclick:function(){e.configure({loading:!0})}},["Explore"]),i.h("a.CoverLogo",{href:"https://www.mapillary.com",target:"_blank"},[])])},e.prototype._getCoverBackgroundVNode=function(t){var e=null!=t.src?"url("+t.src+")":"url(https://d1cuyjsrcm0gby.cloudfront.net/"+t.key+"/thumb-640.jpg)",r={style:{backgroundImage:e}},n=[];return t.loading&&n.push(i.h("div.Spinner",{},[])),n.push(i.h("div.CoverBackgroundGradient",{},[])),i.h("div.CoverBackground",r,n)},e}(o.Component);a.componentName="cover",r.CoverComponent=a,o.ComponentService.registerCover(a),Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../Component":224,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/withLatestFrom":82,"virtual-dom":180}],244:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("underscore"),o=t("virtual-dom"),a=t("rxjs/BehaviorSubject");t("rxjs/add/operator/combineLatest");var s=t("../Component"),c=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._open$=new a.BehaviorSubject(!1),i._displaying=!1,i}return n(e,t),e.prototype._activate=function(){var t=this;this._disposable=this._navigator.stateService.currentState$.combineLatest(this._open$,this._navigator.imageLoadingService.loadstatus$,function(e,r,n){return{name:t._name,vnode:t._getDebugVNode(r,t._getDebugInfo(e,n))}}).subscribe(this._container.domRenderer.render$)},e.prototype._deactivate=function(){this._disposable.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype._getDebugInfo=function(t,e){var r=[];r.push(o.h("h2","Node")),t.state.currentNode&&r.push(o.h("p","currentNode: "+t.state.currentNode.key)),t.state.previousNode&&r.push(o.h("p","previousNode: "+t.state.previousNode.key)),r.push(o.h("h2","Loading"));for(var n=0,a=0,s=0,c=0,u=i.values(e);c<u.length;c++){var h=u[c];n+=h.loaded,h.loaded!==h.total?s++:a++}return r.push(o.h("p","Loaded Images: "+a)),r.push(o.h("p","Loading Images: "+s)),r.push(o.h("p","Total bytes loaded: "+n)),r.push(o.h("h2","Camera")),r.push(o.h("p","camera.position.x: "+t.state.camera.position.x)),r.push(o.h("p","camera.position.y: "+t.state.camera.position.y)),r.push(o.h("p","camera.position.z: "+t.state.camera.position.z)),r.push(o.h("p","camera.lookat.x: "+t.state.camera.lookat.x)),r.push(o.h("p","camera.lookat.y: "+t.state.camera.lookat.y)),r.push(o.h("p","camera.lookat.z: "+t.state.camera.lookat.z)),r.push(o.h("p","camera.up.x: "+t.state.camera.up.x)),r.push(o.h("p","camera.up.y: "+t.state.camera.up.y)),r.push(o.h("p","camera.up.z: "+t.state.camera.up.z)),r},e.prototype._getDebugVNode=function(t,e){return t?o.h("div.Debug",{},[o.h("h2",{},["Debug"]),this._getDebugVNodeButton(t),o.h("pre",{},e)]):this._getDebugVNodeButton(t)},e.prototype._getDebugVNodeButton=function(t){var e=t?"Disable Debug":"D",r=t?"":".DebugButtonFixed";return t?o.h("button.DebugButton"+r,{onclick:this._closeDebugElement.bind(this)},[e]):o.h("button.DebugButton"+r,{onclick:this._openDebugElement.bind(this)},[e])},e.prototype._closeDebugElement=function(t){this._open$.next(!1)},e.prototype._openDebugElement=function(){this._open$.next(!0)},e}(s.Component);c.componentName="debug",r.DebugComponent=c,s.ComponentService.register(c),Object.defineProperty(r,"__esModule",{value:!0}),r.default=c},{"../Component":224,"rxjs/BehaviorSubject":25,"rxjs/add/operator/combineLatest":52,underscore:175,"virtual-dom":180}],245:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom");t("rxjs/add/operator/combineLatest");var o=t("../Component"),a=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._canvasId=r.id+"-"+i._name,i}return n(e,t),e.prototype._activate=function(){var t=this;this.drawSubscription=this._container.domRenderer.element$.combineLatest(this._navigator.stateService.currentNode$,function(e,r){return{canvas:document.getElementById(t._canvasId),node:r}}).subscribe(function(t){var e=t.canvas,r=t.node;if(!r||!e)return null;var n=e.parentElement,i=n.offsetWidth,o=n.offsetHeight;e.width=i,e.height=o,e.getContext("2d").drawImage(r.image,0,0,i,o)}),this._container.domRenderer.renderAdaptive$.next({name:this._name,vnode:i.h("canvas#"+this._canvasId,[])})},e.prototype._deactivate=function(){this.drawSubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e}(o.Component);a.componentName="image",r.ImageComponent=a,o.ComponentService.register(a),Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../Component":224,"rxjs/add/operator/combineLatest":52,"virtual-dom":180}],
-246:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable");t("rxjs/add/observable/fromEvent"),t("rxjs/add/operator/withLatestFrom");var o=t("../Edge"),a=t("../Component"),s=t("../Geo"),c=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._spatial=new s.Spatial,i._perspectiveDirections=[o.EdgeDirection.StepForward,o.EdgeDirection.StepBackward,o.EdgeDirection.StepLeft,o.EdgeDirection.StepRight,o.EdgeDirection.TurnLeft,o.EdgeDirection.TurnRight,o.EdgeDirection.TurnU],i}return n(e,t),e.prototype._activate=function(){var t=this,e=this._navigator.stateService.currentNode$.switchMap(function(t){return t.sequenceEdges$}),r=this._navigator.stateService.currentNode$.switchMap(function(t){return t.spatialEdges$});this._disposable=i.Observable.fromEvent(document,"keydown").withLatestFrom(this._navigator.stateService.currentState$,e,r,function(t,e,r,n){return{event:t,frame:e,sequenceEdges:r,spatialEdges:n}}).subscribe(function(e){e.frame.state.currentNode.pano?t._navigatePanorama(e.event,e.sequenceEdges,e.spatialEdges,e.frame.state.camera):t._navigatePerspective(e.event,e.sequenceEdges,e.spatialEdges)})},e.prototype._deactivate=function(){this._disposable.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype._navigatePanorama=function(t,e,r,n){var i=0,a=null,s=null,c=this._rotationFromCamera(n).phi;switch(t.keyCode){case 37:if(t.shiftKey||t.altKey)break;i=Math.PI/2+c,a=o.EdgeDirection.StepLeft;break;case 38:if(t.shiftKey)break;if(t.altKey){s=o.EdgeDirection.Next;break}i=c,a=o.EdgeDirection.StepForward;break;case 39:if(t.shiftKey||t.altKey)break;i=-Math.PI/2+c,a=o.EdgeDirection.StepRight;break;case 40:if(t.shiftKey)break;if(t.altKey){s=o.EdgeDirection.Prev;break}i=Math.PI+c,a=o.EdgeDirection.StepBackward;break;default:return}if(t.preventDefault(),null!=s)return void this._moveInDir(s,e);if(null!=a&&r.cached){i=this._spatial.wrapAngle(i);for(var u=Math.PI/4,h=r.edges.filter(function(t){return t.data.direction===o.EdgeDirection.Pano||t.data.direction===a}),l=Number.MAX_VALUE,p=null,f=0,d=h;f<d.length;f++){var m=d[f],v=Math.abs(this._spatial.wrapAngle(m.data.worldMotionAzimuth-i));v<Math.min(l,u)&&(l=v,p=m.to)}null!=p&&this._navigator.moveToKey$(p).subscribe(function(t){},function(t){console.error(t)})}},e.prototype._rotationFromCamera=function(t){var e=t.lookat.clone().sub(t.position),r=e.clone().dot(t.up),n=e.clone().sub(t.up.clone().multiplyScalar(r));return{phi:Math.atan2(n.y,n.x),theta:Math.PI/2-this._spatial.angleToPlane(e.toArray(),[0,0,1])}},e.prototype._navigatePerspective=function(t,e,r){var n=null,i=null;switch(t.keyCode){case 37:if(t.altKey)break;n=t.shiftKey?o.EdgeDirection.TurnLeft:o.EdgeDirection.StepLeft;break;case 38:if(t.altKey){i=o.EdgeDirection.Next;break}n=t.shiftKey?o.EdgeDirection.Pano:o.EdgeDirection.StepForward;break;case 39:if(t.altKey)break;n=t.shiftKey?o.EdgeDirection.TurnRight:o.EdgeDirection.StepRight;break;case 40:if(t.altKey){i=o.EdgeDirection.Prev;break}n=t.shiftKey?o.EdgeDirection.TurnU:o.EdgeDirection.StepBackward;break;default:return}if(t.preventDefault(),null!=i)return void this._moveInDir(i,e);this._moveInDir(n,r)},e.prototype._moveInDir=function(t,e){if(e.cached)for(var r=0,n=e.edges;r<n.length;r++){var i=n[r];if(i.data.direction===t)return void this._navigator.moveToKey$(i.to).subscribe(function(t){},function(t){console.error(t)})}},e}(a.Component);c.componentName="keyboard",r.KeyboardComponent=c,a.ComponentService.register(c),Object.defineProperty(r,"__esModule",{value:!0}),r.default=c},{"../Component":224,"../Edge":225,"../Geo":227,"rxjs/Observable":28,"rxjs/add/observable/fromEvent":41,"rxjs/add/operator/withLatestFrom":82}],247:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("underscore"),o=t("virtual-dom");t("rxjs/add/operator/combineLatest");var a=t("../Component"),s=function(t){function e(e,r,n){return t.call(this,e,r,n)||this}return n(e,t),e.prototype._activate=function(){var t=this;this._loadingSubscription=this._navigator.loadingService.loading$.combineLatest(this._navigator.imageLoadingService.loadstatus$,function(e,r){if(!e)return{name:"loading",vnode:t._getBarVNode(100)};for(var n=0,o=0,a=0,s=i.values(r);a<s.length;a++){var c=s[a];c.loaded!==c.total&&(o+=c.loaded,n+=c.total)}var u=100;return 0!==n&&(u=o/n*100),{name:t._name,vnode:t._getBarVNode(u)}}).subscribe(this._container.domRenderer.render$)},e.prototype._deactivate=function(){this._loadingSubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype._getBarVNode=function(t){var e={},r={};return 100!==t?(e.width=t.toFixed(0)+"%",e.opacity="1"):(e.width="100%",e.opacity="0"),o.h("div.Loading",{style:r},[o.h("div.LoadingBar",{style:e},[])])},e}(a.Component);s.componentName="loading",r.LoadingComponent=s,a.ComponentService.register(s),Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../Component":224,"rxjs/add/operator/combineLatest":52,underscore:175,"virtual-dom":180}],248:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom"),o=t("rxjs/Observable");t("rxjs/add/operator/map"),t("rxjs/add/operator/first");var a=t("../Edge"),s=t("../Component"),c=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._dirNames={},i._dirNames[a.EdgeDirection.StepForward]="Forward",i._dirNames[a.EdgeDirection.StepBackward]="Backward",i._dirNames[a.EdgeDirection.StepLeft]="Left",i._dirNames[a.EdgeDirection.StepRight]="Right",i._dirNames[a.EdgeDirection.TurnLeft]="Turnleft",i._dirNames[a.EdgeDirection.TurnRight]="Turnright",i._dirNames[a.EdgeDirection.TurnU]="Turnaround",i}return n(e,t),e.prototype._activate=function(){var t=this;this._renderSubscription=this._navigator.stateService.currentNode$.switchMap(function(t){return t.pano?o.Observable.of([]):o.Observable.combineLatest(t.sequenceEdges$,t.spatialEdges$,function(t,e){return t.edges.concat(e.edges)})}).map(function(e){for(var r=[],n=0,o=e;n<o.length;n++){var a=o[n],s=a.data.direction,c=t._dirNames[s];null!=c&&r.push(t._createVNode(s,c))}return{name:t._name,vnode:i.h("div.NavigationComponent",r)}}).subscribe(this._container.domRenderer.render$)},e.prototype._deactivate=function(){this._renderSubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype._createVNode=function(t,e){var r=this;return i.h("span.Direction.Direction"+e,{onclick:function(e){r._navigator.moveDir$(t).subscribe(function(t){},function(t){console.error(t)})}},[])},e}(s.Component);c.componentName="navigation",r.NavigationComponent=c,s.ComponentService.register(c),Object.defineProperty(r,"__esModule",{value:!0}),r.default=c},{"../Component":224,"../Edge":225,"rxjs/Observable":28,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"virtual-dom":180}],249:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("underscore"),o=t("virtual-dom"),a=t("rxjs/Observable");t("rxjs/add/observable/fromPromise"),t("rxjs/add/observable/of"),t("rxjs/add/operator/combineLatest"),t("rxjs/add/operator/distinct"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/mergeMap"),t("rxjs/add/operator/pluck"),t("rxjs/add/operator/scan");var s=t("../Component"),c=function(){function t(){}return t}(),u=function(){function t(){}return t}(),h=function(){function t(){this.nodeInstructions=[],this.nodeInstructionsOrdered=[]}return t}(),l=function(t){function e(e,r,n){return t.call(this,e,r,n)||this}return n(e,t),e.prototype._activate=function(){var t,e=this;t=this._navigator.stateService.currentState$.filter(function(t){return t.id%2==0}).filter(function(t){return t.state.nodesAhead<15}).distinctUntilChanged(void 0,function(t){return t.state.lastNode.key});var r;r=this.configuration$.mergeMap(function(t){return a.Observable.from(t.paths)}).distinct(function(t){return t.sequenceKey}).mergeMap(function(t){return e._navigator.apiV3.sequenceByKey$([t.sequenceKey]).map(function(e){return e[t.sequenceKey]})}).combineLatest(this.configuration$,function(t,e){for(var r=0,n=[],i=0,o=e.paths;i<o.length;i++){var a=o[i];if(a.sequenceKey===t.key){for(var s=[],c=!1,u=0,h=t.keys;u<h.length;u++){var l=h[u];if(a.startKey===l&&(c=!0),c){for(var p=null,f=0,d=a.infoKeys;f<d.length;f++){var m=d[f];m.key===l&&(p=m.description)}s.push({description:p,key:l})}a.stopKey===l&&(c=!1)}n.push({nodeInstructions:s,place:r})}r++}return n}).scan(function(t,e){for(var r=0,n=e;r<n.length;r++){var o=n[r];t.nodeInstructionsOrdered[o.place]=o.nodeInstructions}return t.nodeInstructions=i.flatten(t.nodeInstructionsOrdered),t},new h),this._disposable=t.combineLatest(r,this.configuration$,function(t,e,r){return{conf:r,frame:t,routeTrack:e}}).scan(function(t,r){return void 0===r.conf.playing||r.conf.playing?(t.routeTrack=r.routeTrack,t.currentNode=r.frame.state.currentNode,t.lastNode=r.frame.state.lastNode,t.playing=!0):(e._navigator.stateService.cutNodes(),t.playing=!1),t},new u).filter(function(t){return t.playing}).filter(function(t){for(var e=0,r=t.routeTrack.nodeInstructions;e<r.length;e++){var n=r[e];if(n&&n.key===t.lastNode.key)return!0}return!1}).distinctUntilChanged(void 0,function(t){return t.lastNode.key}).mergeMap(function(t){for(var r=0,n=0,i=t.routeTrack.nodeInstructions;n<i.length;n++){if(i[n].key===t.lastNode.key)break;r++}var o=t.routeTrack.nodeInstructions[r+1];return o?e._navigator.graphService.cacheNode$(o.key):a.Observable.of(null)}).combineLatest(this.configuration$,function(t,e){return{conf:e,node:t}}).filter(function(t){return null!==t.node&&t.conf.playing}).pluck("node").subscribe(this._navigator.stateService.appendNode$),this._disposableDescription=this._navigator.stateService.currentNode$.combineLatest(r,this.configuration$,function(t,e,r){if(void 0!==r.playing&&!r.playing)return"quit";for(var n=null,i=0,o=e.nodeInstructions;i<o.length;i++){var a=o[i];if(a.key===t.key){n=a.description;break}}return n}).scan(function(t,e){return e!==t.description&&null!==e?(t.description=e,t.showsLeft=6):t.showsLeft--,"quit"===e&&(t.description=null),t},new c).map(function(t){return t.showsLeft>0&&t.description?{name:e._name,vnode:e._getRouteAnnotationNode(t.description)}:{name:e._name,vnode:o.h("div",[])}}).subscribe(this._container.domRenderer.render$)},e.prototype._deactivate=function(){this._disposable.unsubscribe(),this._disposableDescription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype.play=function(){this.configure({playing:!0})},e.prototype.stop=function(){this.configure({playing:!1})},e.prototype._getRouteAnnotationNode=function(t){return o.h("div.RouteFrame",{},[o.h("p",{textContent:t},[])])},e}(s.Component);l.componentName="route",r.RouteComponent=l,s.ComponentService.register(l),Object.defineProperty(r,"__esModule",{value:!0}),r.default=l},{"../Component":224,"rxjs/Observable":28,"rxjs/add/observable/fromPromise":42,"rxjs/add/observable/of":44,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/distinct":56,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/pluck":69,"rxjs/add/operator/scan":72,underscore:175,"virtual-dom":180}],250:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable");t("rxjs/add/operator/buffer"),t("rxjs/add/operator/debounceTime"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/scan");var o=t("../Component"),a=function(t){function e(e,r,n){return t.call(this,e,r,n)||this}return n(e,t),e.prototype._activate=function(){var t=this;this._sequenceSubscription=this._navigator.stateService.currentNode$.scan(function(t,e){var r=e.sequenceKey;return t.report=[],r in t.reported||(t.report=[r],t.reported[r]=!0),t},{report:[],reported:{}}).filter(function(t){return t.report.length>0}).mergeMap(function(e){return t._navigator.apiV3.sequenceViewAdd$(e.report).catch(function(t,r){return console.error("Failed to report sequence stats ("+e.report+")",t),i.Observable.empty()})}).subscribe(function(){}),this._imageSubscription=this._navigator.stateService.currentNode$.map(function(t){return t.key}).buffer(this._navigator.stateService.currentNode$.debounceTime(5e3)).scan(function(t,e){t.report=[];for(var r=0,n=e;r<n.length;r++){var i=n[r];i in t.reported||(t.report.push(i),t.reported[i]=!0)}return t},{report:[],reported:{}}).filter(function(t){return t.report.length>0}).mergeMap(function(e){return t._navigator.apiV3.imageViewAdd$(e.report).catch(function(t,r){return console.error("Failed to report image stats ("+e.report+")",t),i.Observable.empty()})}).subscribe(function(){})},e.prototype._deactivate=function(){this._sequenceSubscription.unsubscribe(),this._imageSubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e}(o.Component);a.componentName="stats",r.StatsComponent=a,o.ComponentService.register(a),Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../Component":224,"rxjs/Observable":28,"rxjs/add/operator/buffer":48,"rxjs/add/operator/debounceTime":54,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/scan":72}],251:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom"),o=t("rxjs/Observable"),a=t("rxjs/Subject");t("rxjs/add/observable/combineLatest"),t("rxjs/add/operator/do"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/share");var s=t("../../Component"),c=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._renderer=new s.DirectionDOMRenderer(i.defaultConfiguration,r.element),i._hoveredKeySubject$=new a.Subject,i._hoveredKey$=i._hoveredKeySubject$.share(),i}return n(e,t),Object.defineProperty(e.prototype,"hoveredKey$",{get:function(){return this._hoveredKey$},enumerable:!0,configurable:!0}),e.prototype.setHighlightKey=function(t){this.configure({highlightKey:t})},e.prototype.setMinWidth=function(t){this.configure({minWidth:t})},e.prototype.setMaxWidth=function(t){this.configure({maxWidth:t})},e.prototype.resize=function(){this._renderer.resize(this._container.element)},e.prototype._activate=function(){var t=this;this._configurationSubscription=this._configuration$.subscribe(function(e){t._renderer.setConfiguration(e)}),this._nodeSubscription=this._navigator.stateService.currentNode$.do(function(e){t._container.domRenderer.render$.next({name:t._name,vnode:i.h("div",{},[])}),t._renderer.setNode(e)}).withLatestFrom(this._configuration$).switchMap(function(e){var r=e[0],n=e[1];return r.spatialEdges$.withLatestFrom(n.distinguishSequence?t._navigator.graphService.cacheSequence$(r.sequenceKey).catch(function(t,e){return console.error("Failed to cache sequence ("+r.sequenceKey+")",t),o.Observable.empty()}):o.Observable.of(null))}).subscribe(function(e){t._renderer.setEdges(e[0],e[1])}),this._renderCameraSubscription=this._container.renderService.renderCameraFrame$.do(function(e){t._renderer.setRenderCamera(e)}).map(function(e){return t._renderer}).filter(function(t){return t.needsRender}).map(function(e){return{name:t._name,vnode:e.render(t._navigator)}}).subscribe(this._container.domRenderer.render$),this._hoveredKeySubscription=o.Observable.combineLatest([this._container.domRenderer.element$,this._container.renderService.renderCamera$,this._container.mouseService.mouseMove$.startWith(null),this._container.mouseService.mouseUp$.startWith(null)],function(t,e,r,n){return t}).map(function(t){for(var e=t.getElementsByClassName("DirectionsPerspective"),r=0;r<e.length;r++){var n=e.item(r).querySelector(":hover");if(null!=n&&n.hasAttribute("data-key"))return n.getAttribute("data-key")}return null}).distinctUntilChanged().subscribe(this._hoveredKeySubject$)},e.prototype._deactivate=function(){this._configurationSubscription.unsubscribe(),this._nodeSubscription.unsubscribe(),this._renderCameraSubscription.unsubscribe(),this._hoveredKeySubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{distinguishSequence:!1,maxWidth:460,minWidth:260}},e}(s.Component);c.componentName="direction",r.DirectionComponent=c,s.ComponentService.register(c),Object.defineProperty(r,"__esModule",{value:!0}),r.default=c},{"../../Component":224,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/share":73,"virtual-dom":180}],252:[function(t,e,r){"use strict";var n=t("../../Geo"),i=function(){function t(t,e){this._spatial=new n.Spatial,this._minThresholdWidth=320,this._maxThresholdWidth=1480,this._minThresholdHeight=240,this._maxThresholdHeight=820,this._configure(t),this._resize(e),this._reset()}return Object.defineProperty(t.prototype,"minWidth",{get:function(){return this._minWidth},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"maxWidth",{get:function(){return this._maxWidth},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"containerWidth",{get:function(){return this._containerWidth},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"containerWidthCss",{get:function(){return this._containerWidthCss},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"containerMarginCss",{get:function(){return this._containerMarginCss},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"containerLeftCss",{get:function(){return this._containerLeftCss},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"containerHeight",{get:function(){return this._containerHeight},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"containerHeightCss",{get:function(){return this._containerHeightCss},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"containerBottomCss",{get:function(){return this._containerBottomCss},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"stepCircleSize",{get:function(){return this._stepCircleSize},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"stepCircleSizeCss",{get:function(){return this._stepCircleSizeCss},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"stepCircleMarginCss",{get:function(){return this._stepCircleMarginCss},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"turnCircleSize",{get:function(){return this._turnCircleSize},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"turnCircleSizeCss",{get:function(){return this._turnCircleSizeCss},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"outerRadius",{get:function(){return this._outerRadius},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"innerRadius",{get:function(){return this._innerRadius},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"shadowOffset",{get:function(){return this._shadowOffset},enumerable:!0,configurable:!0}),t.prototype.configure=function(t){this._configure(t),this._reset()},t.prototype.resize=function(t){this._resize(t),this._reset()},t.prototype.angleToCoordinates=function(t){return[Math.cos(t),Math.sin(t)]},t.prototype.relativeAngleToCoordiantes=function(t,e){var r=this._spatial.wrapAngle(t-e);return this.angleToCoordinates(r)},t.prototype._configure=function(t){this._minWidth=t.minWidth,this._maxWidth=this._getMaxWidth(t.minWidth,t.maxWidth)},t.prototype._resize=function(t){this._elementWidth=t.offsetWidth,this._elementHeight=t.offsetHeight},t.prototype._reset=function(){this._containerWidth=this._getContainerWidth(this._elementWidth,this._elementHeight),this._containerHeight=this._getContainerHeight(this.containerWidth),this._stepCircleSize=this._getStepCircleDiameter(this._containerHeight),this._turnCircleSize=this._getTurnCircleDiameter(this.containerHeight),this._outerRadius=this._getOuterRadius(this._containerHeight),this._innerRadius=this._getInnerRadius(this._containerHeight),this._shadowOffset=3,this._containerWidthCss=this._numberToCssPixels(this._containerWidth),this._containerMarginCss=this._numberToCssPixels(-.5*this._containerWidth),this._containerLeftCss=this._numberToCssPixels(Math.floor(.5*this._elementWidth)),this._containerHeightCss=this._numberToCssPixels(this._containerHeight),this._containerBottomCss=this._numberToCssPixels(Math.floor(-.08*this._containerHeight)),this._stepCircleSizeCss=this._numberToCssPixels(this._stepCircleSize),this._stepCircleMarginCss=this._numberToCssPixels(-.5*this._stepCircleSize),this._turnCircleSizeCss=this._numberToCssPixels(this._turnCircleSize)},t.prototype._getContainerWidth=function(t,e){var r=(t-this._minThresholdWidth)/(this._maxThresholdWidth-this._minThresholdWidth),n=(e-this._minThresholdHeight)/(this._maxThresholdHeight-this._minThresholdHeight),i=Math.max(0,Math.min(1,Math.min(r,n)));return i=.04*Math.round(25*i),this._minWidth+i*(this._maxWidth-this._minWidth)},t.prototype._getContainerHeight=function(t){return.77*t},t.prototype._getStepCircleDiameter=function(t){return.34*t},t.prototype._getTurnCircleDiameter=function(t){return.3*t},t.prototype._getOuterRadius=function(t){return.31*t},t.prototype._getInnerRadius=function(t){return.125*t},t.prototype._numberToCssPixels=function(t){return t+"px"},t.prototype._getMaxWidth=function(t,e){return t>e?t:e},t}();r.DirectionDOMCalculator=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{"../../Geo":227}],253:[function(t,e,r){"use strict";var n=t("virtual-dom"),i=t("../../Component"),o=t("../../Edge"),a=t("../../Geo"),s=function(){function t(t,e){this._isEdge=!1,this._spatial=new a.Spatial,this._calculator=new i.DirectionDOMCalculator(t,e),this._node=null,this._rotation={phi:0,theta:0},this._epsilon=.5*Math.PI/180,this._highlightKey=null,this._distinguishSequence=!1,this._needsRender=!1,this._stepEdges=[],this._turnEdges=[],this._panoEdges=[],this._sequenceEdgeKeys=[],this._stepDirections=[o.EdgeDirection.StepForward,o.EdgeDirection.StepBackward,o.EdgeDirection.StepLeft,o.EdgeDirection.StepRight],this._turnDirections=[o.EdgeDirection.TurnLeft,o.EdgeDirection.TurnRight,o.EdgeDirection.TurnU],this._turnNames={},this._turnNames[o.EdgeDirection.TurnLeft]="TurnLeft",this._turnNames[o.EdgeDirection.TurnRight]="TurnRight",this._turnNames[o.EdgeDirection.TurnU]="TurnAround";var r=!!document.documentMode;this._isEdge=!r&&!!window.StyleMedia}return Object.defineProperty(t.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:!0,configurable:!0}),t.prototype.render=function(t){this._needsRender=!1;var e=this._rotation,r=[],n=[];return this._node.pano?r=r.concat(this._createPanoArrows(t,e)):(r=r.concat(this._createPerspectiveToPanoArrows(t,e)),r=r.concat(this._createStepArrows(t,e)),n=n.concat(this._createTurnArrows(t))),this._getContainer(r,n,e)},t.prototype.setEdges=function(t,e){this._setEdges(t,e),this._setNeedsRender()},t.prototype.setNode=function(t){this._node=t,this._clearEdges(),this._setNeedsRender()},t.prototype.setRenderCamera=function(t){var e=t.rotation;Math.abs(e.phi-this._rotation.phi)<this._epsilon||(this._rotation=e,this._setNeedsRender())},t.prototype.setConfiguration=function(t){var e=!1;this._highlightKey===t.highlightKey&&this._distinguishSequence===t.distinguishSequence||(this._highlightKey=t.highlightKey,this._distinguishSequence=t.distinguishSequence,e=!0),this._calculator.minWidth===t.minWidth&&this._calculator.maxWidth===t.maxWidth||(this._calculator.configure(t),e=!0),e&&this._setNeedsRender()},t.prototype.resize=function(t){this._calculator.resize(t),this._setNeedsRender()},t.prototype._setNeedsRender=function(){null!=this._node&&(this._needsRender=!0)},t.prototype._clearEdges=function(){this._stepEdges=[],this._turnEdges=[],this._panoEdges=[],this._sequenceEdgeKeys=[]},t.prototype._setEdges=function(t,e){this._stepEdges=[],this._turnEdges=[],this._panoEdges=[],this._sequenceEdgeKeys=[];for(var r=0,n=t.edges;r<n.length;r++){var i=n[r],a=i.data.direction;this._stepDirections.indexOf(a)>-1?this._stepEdges.push(i):this._turnDirections.indexOf(a)>-1?this._turnEdges.push(i):i.data.direction===o.EdgeDirection.Pano&&this._panoEdges.push(i)}if(this._distinguishSequence&&null!=e)for(var s=this._panoEdges.concat(this._stepEdges).concat(this._turnEdges),c=0,u=s;c<u.length;c++)for(var i=u[c],h=i.to,l=0,p=e.keys;l<p.length;l++){var f=p[l];if(f===h){this._sequenceEdgeKeys.push(h);break}}},t.prototype._createPanoArrows=function(t,e){for(var r=[],n=0,i=this._panoEdges;n<i.length;n++){var o=i[n];r.push(this._createVNodeByKey(t,o.to,o.data.worldMotionAzimuth,e,this._calculator.outerRadius,"DirectionsArrowPano"))}for(var a=0,s=this._stepEdges;a<s.length;a++){var c=s[a];r.push(this._createPanoToPerspectiveArrow(t,c.to,c.data.worldMotionAzimuth,e,c.data.direction))}return r},t.prototype._createPanoToPerspectiveArrow=function(t,e,r,n,i){var a=Math.PI/8,s=n.phi;switch(i){case o.EdgeDirection.StepBackward:s=n.phi-Math.PI;break;case o.EdgeDirection.StepLeft:s=n.phi+Math.PI/2;break;case o.EdgeDirection.StepRight:s=n.phi-Math.PI/2}return Math.abs(this._spatial.wrapAngle(r-s))<a?this._createVNodeByKey(t,e,r,n,this._calculator.outerRadius,"DirectionsArrowStep"):this._createVNodeDisabled(e,r,n)},t.prototype._createPerspectiveToPanoArrows=function(t,e){for(var r=[],n=0,i=this._panoEdges;n<i.length;n++){var o=i[n];r.push(this._createVNodeByKey(t,o.to,o.data.worldMotionAzimuth,e,this._calculator.innerRadius,"DirectionsArrowPano",!0))}return r},t.prototype._createStepArrows=function(t,e){for(var r=[],n=0,i=this._stepEdges;n<i.length;n++){var o=i[n];r.push(this._createVNodeByDirection(t,o.to,o.data.worldMotionAzimuth,e,o.data.direction))}return r},t.prototype._createTurnArrows=function(t){for(var e=[],r=0,n=this._turnEdges;r<n.length;r++){var i=n[r],o=i.data.direction,a=this._turnNames[o];e.push(this._createVNodeByTurn(t,i.to,a,o))}return e},t.prototype._createVNodeByKey=function(t,e,r,n,i,o,a){var s=function(r){t.moveToKey$(e).subscribe(function(t){},function(t){console.error(t)})};return this._createVNode(e,r,n,i,o,"DirectionsCircle",s,a)},t.prototype._createVNodeByDirection=function(t,e,r,n,i){var o=function(e){t.moveDir$(i).subscribe(function(t){},function(t){console.error(t)})};return this._createVNode(e,r,n,this._calculator.outerRadius,"DirectionsArrowStep","DirectionsCircle",o)},t.prototype._createVNodeByTurn=function(t,e,r,i){var a=function(e){t.moveDir$(i).subscribe(function(t){},function(t){console.error(t)})},s={height:this._calculator.turnCircleSizeCss,transform:"rotate(0)",width:this._calculator.turnCircleSizeCss};switch(i){case o.EdgeDirection.TurnLeft:s.left="5px",s.top="5px";break;case o.EdgeDirection.TurnRight:s.right="5px",s.top="5px";break;case o.EdgeDirection.TurnU:s.left="5px",s.bottom="5px"}var c={attributes:{"data-key":e},onclick:a,style:s},u="TurnCircle";this._sequenceEdgeKeys.indexOf(e)>-1&&(u+="Sequence"),this._highlightKey===e&&(u+="Highlight");var h=n.h("div."+r,{},[]);return n.h("div."+u,c,[h])},t.prototype._createVNodeDisabled=function(t,e,r){return this._createVNode(t,e,r,this._calculator.outerRadius,"DirectionsArrowDisabled","DirectionsCircleDisabled")},t.prototype._createVNode=function(t,e,r,i,o,a,s,c){var u=this._calculator.angleToCoordinates(e-r.phi),h=Math.round(-i*u[1]+.5*this._calculator.containerWidth),l=Math.round(-i*u[0]+.5*this._calculator.containerHeight),p=this._calculator.relativeAngleToCoordiantes(e,r.phi),f=this._calculator.shadowOffset,d=-f*p[1],m=f*p[0],v="drop-shadow("+d+"px "+m+"px 1px rgba(0,0,0,0.8))",g={style:{"-webkit-filter":v,filter:v}},y=n.h("div."+o,g,[]),b=-this._spatial.radToDeg(e-r.phi),_=c?"translate("+h+"px, "+l+"px) rotate("+b+"deg) translateZ(-0.01px)":"translate("+h+"px, "+l+"px) rotate("+b+"deg)",x={attributes:{"data-key":t},onclick:s,style:{height:this._calculator.stepCircleSizeCss,marginLeft:this._calculator.stepCircleMarginCss,marginTop:this._calculator.stepCircleMarginCss,transform:_,width:this._calculator.stepCircleSizeCss}};return this._sequenceEdgeKeys.indexOf(t)>-1&&(a+="Sequence"),this._highlightKey===t&&(a+="Highlight"),n.h("div."+a,x,[y])},t.prototype._getContainer=function(t,e,r){var i=this._isEdge?"rotateX(60deg)":"perspective("+this._calculator.containerWidthCss+") rotateX(60deg)",o={oncontextmenu:function(t){t.preventDefault()},style:{bottom:this._calculator.containerBottomCss,height:this._calculator.containerHeightCss,left:this._calculator.containerLeftCss,marginLeft:this._calculator.containerMarginCss,transform:i,width:this._calculator.containerWidthCss}};return n.h("div.DirectionsPerspective",o,e.concat(t))},t}();r.DirectionDOMRenderer=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../../Component":224,"../../Edge":225,"../../Geo":227,"virtual-dom":180}],254:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable"),o=t("rxjs/Subject");t("rxjs/add/operator/catch"),t("rxjs/add/operator/combineLatest"),t("rxjs/add/operator/debounceTime"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/pairwise"),t("rxjs/add/operator/publish"),t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/skipWhile"),t("rxjs/add/operator/startWith"),t("rxjs/add/operator/switchMap"),t("rxjs/add/operator/takeUntil"),t("rxjs/add/operator/withLatestFrom");var a=t("../../Component"),s=t("../../Render"),c=t("../../Tiles"),u=t("../../Utils"),h=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._imageTileLoader=new c.ImageTileLoader(u.Urls.tileScheme,u.Urls.tileDomain,u.Urls.origin),i._roiCalculator=new c.RegionOfInterestCalculator,i._rendererOperation$=new o.Subject,i._rendererCreator$=new o.Subject,i._rendererDisposer$=new o.Subject,i._renderer$=i._rendererOperation$.scan(function(t,e){return e(t)},null).filter(function(t){return null!=t}).distinctUntilChanged(void 0,function(t){return t.frameId}),i._rendererCreator$.map(function(){return function(t){if(null!=t)throw new Error("Multiple image plane states can not be created at the same time");return new a.ImagePlaneGLRenderer}}).subscribe(i._rendererOperation$),i._rendererDisposer$.map(function(){return function(t){return t.dispose(),null}}).subscribe(i._rendererOperation$),i}return n(e,t),e.prototype._activate=function(){var t=this;this._rendererSubscription=this._renderer$.map(function(e){var r={name:t._name,render:{frameId:e.frameId,needsRender:e.needsRender,render:e.render.bind(e),stage:s.GLRenderStage.Background}};return e.clearNeedsRender(),r}).subscribe(this._container.glRenderer.render$),this._rendererCreator$.next(null),this._stateSubscription=this._navigator.stateService.currentState$.map(function(t){return function(e){return e.updateFrame(t),e}}).subscribe(this._rendererOperation$)
-;var e=this._navigator.stateService.currentState$.distinctUntilChanged(void 0,function(t){return t.state.currentNode.key}).combineLatest(this._configuration$).filter(function(t){return t[1].imageTiling===!0}).map(function(t){return t[0]}).withLatestFrom(this._container.glRenderer.webGLRenderer$,this._container.renderService.size$).map(function(e){var r=e[0].state,n=e[1],i=e[2],o=r.currentNode,a=r.currentTransform,s=Math.max(i.width,i.height)>1024?1024:512;return new c.TextureProvider(o.key,a.basicWidth,a.basicHeight,s,o.image,t._imageTileLoader,new c.ImageTileStore,n)}).publishReplay(1).refCount();this._textureProviderSubscription=e.subscribe(function(){}),this._setTextureProviderSubscription=e.map(function(t){return function(e){return e.setTextureProvider(t.key,t),e}}).subscribe(this._rendererOperation$),this._abortTextureProviderSubscription=e.pairwise().subscribe(function(t){t[0].abort()});var r=this._container.renderService.renderCameraFrame$.map(function(t){return[t.camera.position.clone(),t.camera.lookat.clone(),t.zoom.valueOf()]}).pairwise().skipWhile(function(t){return t[1][2]-t[0][2]<0||0===t[1][2]}).map(function(t){var e=t[0][0].equals(t[1][0]),r=t[0][1].equals(t[1][1]),n=t[0][2]===t[1][2];return e&&r&&n}).distinctUntilChanged().filter(function(t){return t}).switchMap(function(e){return t._container.renderService.renderCameraFrame$.first()}).withLatestFrom(this._container.renderService.size$,this._navigator.stateService.currentTransform$);this._setRegionOfInterestSubscription=e.switchMap(function(e){return r.map(function(r){return[t._roiCalculator.computeRegionOfInterest(r[0],r[1],r[2]),e]})}).filter(function(t){return!t[1].disposed}).subscribe(function(t){var e=t[0];t[1].setRegionOfInterest(e)});var n=e.switchMap(function(t){return t.hasTexture$}).startWith(!1).publishReplay(1).refCount();this._hasTextureSubscription=n.subscribe(function(){});var o=this._navigator.stateService.currentNode$.debounceTime(1e3).withLatestFrom(n).filter(function(t){return!t[1]}).map(function(t){return t[0]}).filter(function(t){return t.pano?u.Settings.maxImageSize>u.Settings.basePanoramaSize:u.Settings.maxImageSize>u.Settings.baseImageSize}).switchMap(function(t){var e=t.pano?u.Settings.basePanoramaSize:u.Settings.baseImageSize;return Math.max(t.image.width,t.image.height)>e?i.Observable.empty():t.cacheImage$(u.Settings.maxImageSize).map(function(t){return[t.image,t]}).takeUntil(n.filter(function(t){return t})).catch(function(e,r){return console.error("Failed to fetch high res image ("+t.key+")",e),i.Observable.empty()})}).publish().refCount();this._updateBackgroundSubscription=o.withLatestFrom(e).subscribe(function(t){t[0][1].key!==t[1].key||t[1].disposed||t[1].updateBackground(t[0][0])}),this._updateTextureImageSubscription=o.map(function(t){return function(e){return e.updateTextureImage(t[0],t[1]),e}}).subscribe(this._rendererOperation$)},e.prototype._deactivate=function(){this._rendererDisposer$.next(null),this._abortTextureProviderSubscription.unsubscribe(),this._hasTextureSubscription.unsubscribe(),this._rendererSubscription.unsubscribe(),this._setRegionOfInterestSubscription.unsubscribe(),this._setTextureProviderSubscription.unsubscribe(),this._stateSubscription.unsubscribe(),this._textureProviderSubscription.unsubscribe(),this._updateBackgroundSubscription.unsubscribe(),this._updateTextureImageSubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{imageTiling:!1}},e}(a.Component);h.componentName="imagePlane",r.ImagePlaneComponent=h,a.ComponentService.register(h),Object.defineProperty(r,"__esModule",{value:!0}),r.default=h},{"../../Component":224,"../../Render":230,"../../Tiles":232,"../../Utils":233,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/operator/catch":51,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/debounceTime":54,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/pairwise":68,"rxjs/add/operator/publish":70,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/skipWhile":76,"rxjs/add/operator/startWith":77,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/takeUntil":80,"rxjs/add/operator/withLatestFrom":82}],255:[function(t,e,r){"use strict";var n=t("three"),i=t("../../Component"),o=function(){function t(t,e){this._imagePlaneDepth=null!=t?t:200,this._imageSphereRadius=null!=e?e:200}return t.prototype.createMesh=function(t,e){return t.pano?this._createImageSphere(t,e):this._createImagePlane(t,e)},t.prototype._createImageSphere=function(t,e){var r=this._createTexture(t.image),i=this._createSphereMaterialParameters(e,r),o=new n.ShaderMaterial(i);return this._useMesh(e,t)?new n.Mesh(this._getImageSphereGeo(e,t),o):new n.Mesh(this._getFlatImageSphereGeo(e),o)},t.prototype._createImagePlane=function(t,e){var r=this._createTexture(t.image),i=this._createPlaneMaterialParameters(e,r),o=new n.ShaderMaterial(i),a=this._useMesh(e,t)?this._getImagePlaneGeo(e,t):this._getFlatImagePlaneGeo(e);return new n.Mesh(a,o)},t.prototype._createSphereMaterialParameters=function(t,e){var r=t.gpano,o=(r.FullPanoWidthPixels-r.CroppedAreaImageWidthPixels)/2,a=2*Math.PI*(r.CroppedAreaLeftPixels-o)/r.FullPanoWidthPixels,s=2*Math.PI*r.CroppedAreaImageWidthPixels/r.FullPanoWidthPixels,c=(r.FullPanoHeightPixels-r.CroppedAreaImageHeightPixels)/2,u=Math.PI*(c-r.CroppedAreaTopPixels)/r.FullPanoHeightPixels,h=Math.PI*r.CroppedAreaImageHeightPixels/r.FullPanoHeightPixels;return{depthWrite:!1,fragmentShader:i.ImagePlaneShaders.equirectangular.fragment,side:n.DoubleSide,transparent:!0,uniforms:{opacity:{type:"f",value:1},phiLength:{type:"f",value:s},phiShift:{type:"f",value:a},projectorMat:{type:"m4",value:t.rt},projectorTex:{type:"t",value:e},thetaLength:{type:"f",value:h},thetaShift:{type:"f",value:u}},vertexShader:i.ImagePlaneShaders.equirectangular.vertex}},t.prototype._createPlaneMaterialParameters=function(t,e){return{depthWrite:!1,fragmentShader:i.ImagePlaneShaders.perspective.fragment,side:n.DoubleSide,transparent:!0,uniforms:{bbox:{type:"v4",value:new n.Vector4(0,0,1,1)},opacity:{type:"f",value:1},projectorMat:{type:"m4",value:t.projectorMatrix()},projectorTex:{type:"t",value:e}},vertexShader:i.ImagePlaneShaders.perspective.vertex}},t.prototype._createTexture=function(t){var e=new n.Texture(t);return e.minFilter=n.LinearFilter,e.needsUpdate=!0,e},t.prototype._useMesh=function(t,e){return e.mesh.vertices.length&&t.scale>.01&&t.scale<50},t.prototype._getImageSphereGeo=function(t,e){for(var r=(new n.Matrix4).getInverse(t.srt),i=5*t.scale,o=this._imageSphereRadius*t.scale,a=e.mesh.vertices,s=a.length/3,c=new Float32Array(a.length),u=0;u<s;++u){var h=3*u,l=a[h+0],p=a[h+1],f=a[h+2],d=Math.sqrt(l*l+p*p+f*f),m=Math.max(i,Math.min(d,o)),v=m/d,g=new n.Vector3(l*v,p*v,f*v);g.applyMatrix4(r),c[h+0]=g.x,c[h+1]=g.y,c[h+2]=g.z}for(var y=e.mesh.faces,b=new Uint16Array(y.length),u=0;u<y.length;++u)b[u]=y[u];var _=new n.BufferGeometry;return _.addAttribute("position",new n.BufferAttribute(c,3)),_.setIndex(new n.BufferAttribute(b,1)),_},t.prototype._getImagePlaneGeo=function(t,e){for(var r=(new n.Matrix4).getInverse(t.srt),i=5*t.scale,o=this._imagePlaneDepth*t.scale,a=e.mesh.vertices,s=a.length/3,c=new Float32Array(a.length),u=0;u<s;++u){var h=3*u,l=a[h+0],p=a[h+1],f=a[h+2],d=Math.max(i,Math.min(f,o)),m=d/f,v=new n.Vector3(l*m,p*m,d);v.applyMatrix4(r),c[h+0]=v.x,c[h+1]=v.y,c[h+2]=v.z}for(var g=e.mesh.faces,y=new Uint16Array(g.length),u=0;u<g.length;++u)y[u]=g[u];var b=new n.BufferGeometry;return b.addAttribute("position",new n.BufferAttribute(c,3)),b.setIndex(new n.BufferAttribute(y,1)),b},t.prototype._getFlatImageSphereGeo=function(t){var e=t.gpano,r=2*Math.PI*e.CroppedAreaLeftPixels/e.FullPanoWidthPixels,i=2*Math.PI*e.CroppedAreaImageWidthPixels/e.FullPanoWidthPixels,o=Math.PI*(e.FullPanoHeightPixels-e.CroppedAreaImageHeightPixels-e.CroppedAreaTopPixels)/e.FullPanoHeightPixels,a=Math.PI*e.CroppedAreaImageHeightPixels/e.FullPanoHeightPixels,s=new n.SphereGeometry(this._imageSphereRadius,20,40,r-Math.PI/2,i,o,a);return s.applyMatrix((new n.Matrix4).getInverse(t.rt)),s},t.prototype._getFlatImagePlaneGeo=function(t){var e=t.width,r=t.height,i=Math.max(e,r),o=e/2/i,a=r/2/i,s=[];s.push(t.unprojectSfM([-o,-a],this._imagePlaneDepth)),s.push(t.unprojectSfM([o,-a],this._imagePlaneDepth)),s.push(t.unprojectSfM([o,a],this._imagePlaneDepth)),s.push(t.unprojectSfM([-o,a],this._imagePlaneDepth));for(var c=new Float32Array(12),u=0;u<s.length;u++){var h=3*u;c[h+0]=s[u][0],c[h+1]=s[u][1],c[h+2]=s[u][2]}var l=new Uint16Array(6);l[0]=0,l[1]=1,l[2]=3,l[3]=1,l[4]=2,l[5]=3;var p=new n.BufferGeometry;return p.addAttribute("position",new n.BufferAttribute(c,3)),p.setIndex(new n.BufferAttribute(l,1)),p},t}();r.ImagePlaneFactory=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../../Component":224,three:174}],256:[function(t,e,r){"use strict";var n=t("../../Component"),i=t("../../Geo"),o=function(){function t(){this._imagePlaneFactory=new n.ImagePlaneFactory,this._imagePlaneScene=new n.ImagePlaneScene,this._alpha=0,this._alphaOld=0,this._fadeOutSpeed=.05,this._lastCamera=new i.Camera,this._epsilon=1e-6,this._currentKey=null,this._previousKey=null,this._providerDisposers={},this._frameId=0,this._needsRender=!1}return Object.defineProperty(t.prototype,"frameId",{get:function(){return this._frameId},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:!0,configurable:!0}),t.prototype.indicateNeedsRender=function(){this._needsRender=!0},t.prototype.updateFrame=function(t){this._updateFrameId(t.id),this._needsRender=this._updateAlpha(t.state.alpha)||this._needsRender,this._needsRender=this._updateAlphaOld(t.state.alpha)||this._needsRender,this._needsRender=this._updateImagePlanes(t.state)||this._needsRender},t.prototype.setTextureProvider=function(t,e){var r=this;if(t===this._currentKey){var n=e.textureCreated$.subscribe(function(t){r._updateTexture(t)}),i=e.textureUpdated$.subscribe(function(t){r._needsRender=!0}),o=function(){n.unsubscribe(),i.unsubscribe(),e.dispose()};if(t in this._providerDisposers){(0,this._providerDisposers[t])(),delete this._providerDisposers[t]}this._providerDisposers[t]=o}},t.prototype._updateTexture=function(t){this._needsRender=!0;for(var e=0,r=this._imagePlaneScene.imagePlanes;e<r.length;e++){var n=r[e],i=n.material,o=i.uniforms.projectorTex.value;i.uniforms.projectorTex.value=null,o.dispose(),i.uniforms.projectorTex.value=t}},t.prototype.updateTextureImage=function(t,e){if(this._currentKey===e.key){this._needsRender=!0;for(var r=0,n=this._imagePlaneScene.imagePlanes;r<n.length;r++){var i=n[r],o=i.material,a=o.uniforms.projectorTex.value;a.image=t,a.needsUpdate=!0}}},t.prototype.render=function(t,e){for(var r=this._imagePlaneScene.imagePlanesOld.length?1:this._alpha,n=0,i=this._imagePlaneScene.imagePlanes;n<i.length;n++){var o=i[n];o.material.uniforms.opacity.value=r}for(var a=0,s=this._imagePlaneScene.imagePlanesOld;a<s.length;a++){var o=s[a];o.material.uniforms.opacity.value=this._alphaOld}e.render(this._imagePlaneScene.scene,t),e.render(this._imagePlaneScene.sceneOld,t);for(var c=0,u=this._imagePlaneScene.imagePlanes;c<u.length;c++){var o=u[c];o.material.uniforms.opacity.value=this._alpha}e.render(this._imagePlaneScene.scene,t)},t.prototype.clearNeedsRender=function(){this._needsRender=!1},t.prototype.dispose=function(){this._imagePlaneScene.clear()},t.prototype._updateFrameId=function(t){this._frameId=t},t.prototype._updateAlpha=function(t){return t!==this._alpha&&(this._alpha=t,!0)},t.prototype._updateAlphaOld=function(t){return!(t<1||0===this._alphaOld)&&(this._alphaOld=Math.max(0,this._alphaOld-this._fadeOutSpeed),!0)},t.prototype._updateImagePlanes=function(t){if(null==t.currentNode||t.currentNode.key===this._currentKey)return!1;var e=null!=t.previousNode?t.previousNode.key:null,r=t.currentNode.key;if(this._previousKey!==e&&this._previousKey!==r&&this._previousKey in this._providerDisposers){(0,this._providerDisposers[this._previousKey])(),delete this._providerDisposers[this._previousKey]}if(null!=e){if(e!==this._currentKey&&e!==this._previousKey){var n=this._imagePlaneFactory.createMesh(t.previousNode,t.previousTransform);this._imagePlaneScene.updateImagePlanes([n])}this._previousKey=e}this._currentKey=r;var i=this._imagePlaneFactory.createMesh(t.currentNode,t.currentTransform);return this._imagePlaneScene.updateImagePlanes([i]),this._alphaOld=1,!0},t}();r.ImagePlaneGLRenderer=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../../Component":224,"../../Geo":227}],257:[function(t,e,r){"use strict";var n=t("three"),i=function(){function t(){this.scene=new n.Scene,this.sceneOld=new n.Scene,this.imagePlanes=[],this.imagePlanesOld=[]}return t.prototype.updateImagePlanes=function(t){this._dispose(this.imagePlanesOld,this.sceneOld);for(var e=0,r=this.imagePlanes;e<r.length;e++){var n=r[e];this.scene.remove(n),this.sceneOld.add(n)}for(var i=0,o=t;i<o.length;i++){var n=o[i];this.scene.add(n)}this.imagePlanesOld=this.imagePlanes,this.imagePlanes=t},t.prototype.addImagePlanes=function(t){for(var e=0,r=t;e<r.length;e++){var n=r[e];this.scene.add(n),this.imagePlanes.push(n)}},t.prototype.addImagePlanesOld=function(t){for(var e=0,r=t;e<r.length;e++){var n=r[e];this.sceneOld.add(n),this.imagePlanesOld.push(n)}},t.prototype.setImagePlanes=function(t){this._clear(),this.addImagePlanes(t)},t.prototype.setImagePlanesOld=function(t){this._clearOld(),this.addImagePlanesOld(t)},t.prototype.clear=function(){this._clear(),this._clearOld()},t.prototype._clear=function(){this._dispose(this.imagePlanes,this.scene),this.imagePlanes.length=0},t.prototype._clearOld=function(){this._dispose(this.imagePlanesOld,this.sceneOld),this.imagePlanesOld.length=0},t.prototype._dispose=function(t,e){for(var r=0,n=t;r<n.length;r++){var i=n[r];e.remove(i),i.geometry.dispose(),i.material.dispose();var o=i.material.uniforms.projectorTex.value;null!=o&&o.dispose()}},t}();r.ImagePlaneScene=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{three:174}],258:[function(t,e,r){"use strict";var n=(t("path"),function(){function t(){}return t}());n.equirectangular={fragment:"#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float phiLength;\nuniform float phiShift;\nuniform float thetaLength;\nuniform float thetaShift;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    vec3 b = normalize(vRstq.xyz);\n    float lat = -asin(b.y);\n    float lon = atan(b.x, b.z);\n    float x = (lon - phiShift) / phiLength + 0.5;\n    float y = (lat - thetaShift) / thetaLength + 0.5;\n    vec4 baseColor = texture2D(projectorTex, vec2(x, y));\n    baseColor.a = opacity;\n    gl_FragColor = baseColor;\n}",vertex:"#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    vRstq = projectorMat * vec4(position, 1.0);\n    gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}"},n.perspective={fragment:"#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform vec4 bbox;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    float x = vRstq.x / vRstq.w;\n    float y = vRstq.y / vRstq.w;\n\n    vec4 baseColor;\n    if (x > bbox[0] && y > bbox[1] && x < bbox[2] && y < bbox[3]) {\n        baseColor = texture2D(projectorTex, vec2(x, y));\n        baseColor.a = opacity;\n    } else {\n        baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n    }\n\n    gl_FragColor = baseColor;\n}",vertex:"#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    vRstq = projectorMat * vec4(position, 1.0);\n    gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}"},r.ImagePlaneShaders=n},{path:21}],259:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom"),o=t("rxjs/Observable"),a=t("rxjs/Subject");t("rxjs/add/observable/combineLatest"),t("rxjs/add/observable/fromEvent"),t("rxjs/add/observable/of"),t("rxjs/add/observable/zip"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/first"),t("rxjs/add/operator/map"),t("rxjs/add/operator/merge"),t("rxjs/add/operator/mergeMap"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/switchMap"),t("rxjs/add/operator/withLatestFrom"),t("rxjs/add/operator/zip");var s=t("../../State"),c=t("../../Render"),u=t("../../Utils"),h=t("../../Component"),l=function(){function t(){this._imagePlaneFactory=new h.ImagePlaneFactory,this._imagePlaneScene=new h.ImagePlaneScene,this._currentKey=null,this._previousKey=null,this._currentPano=!1,this._frameId=0,this._glNeedsRender=!1,this._domNeedsRender=!0,this._curtain=1}return Object.defineProperty(t.prototype,"frameId",{get:function(){return this._frameId},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"curtain",{get:function(){return this._curtain},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"glNeedsRender",{get:function(){return this._glNeedsRender},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"domNeedsRender",{get:function(){return this._domNeedsRender},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"sliderVisible",{get:function(){return this._sliderVisible},set:function(t){this._sliderVisible=t,this._domNeedsRender=!0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"disabled",{get:function(){return null==this._currentKey||null==this._previousKey||this._currentPano},enumerable:!0,configurable:!0}),t.prototype.update=function(t){this._updateFrameId(t.id);var e=this._updateImagePlanes(t.state);this._domNeedsRender=e||this._domNeedsRender,e=this._updateCurtain(t.state.alpha)||e,this._glNeedsRender=e||this._glNeedsRender},t.prototype.updateTexture=function(t,e){var r=e.key===this._currentKey?this._imagePlaneScene.imagePlanes:e.key===this._previousKey?this._imagePlaneScene.imagePlanesOld:[];if(0!==r.length){this._glNeedsRender=!0;for(var n=0,i=r;n<i.length;n++){var o=i[n],a=o.material,s=a.uniforms.projectorTex.value;s.image=t,s.needsUpdate=!0}}},t.prototype.render=function(t,e){this.disabled||e.render(this._imagePlaneScene.sceneOld,t),e.render(this._imagePlaneScene.scene,t)},t.prototype.dispose=function(){this._imagePlaneScene.clear()},t.prototype.clearGLNeedsRender=function(){this._glNeedsRender=!1},t.prototype.clearDomNeedsRender=function(){this._domNeedsRender=!1},t.prototype._updateFrameId=function(t){this._frameId=t},t.prototype._updateImagePlanes=function(t){if(null!=t.currentNode){var e=!1;return null!=t.previousNode&&this._previousKey!==t.previousNode.key&&(e=!0,this._previousKey=t.previousNode.key,this._imagePlaneScene.setImagePlanesOld([this._imagePlaneFactory.createMesh(t.previousNode,t.previousTransform)])),this._currentKey!==t.currentNode.key&&(e=!0,this._currentKey=t.currentNode.key,this._currentPano=t.currentNode.pano,this._imagePlaneScene.setImagePlanes([this._imagePlaneFactory.createMesh(t.currentNode,t.currentTransform)]),this.disabled||this._updateBbox()),e}},t.prototype._updateCurtain=function(t){return!(this.disabled||Math.abs(this._curtain-t)<.001)&&(this._curtain=t,this._updateBbox(),!0)},t.prototype._updateBbox=function(){for(var t=0,e=this._imagePlaneScene.imagePlanes;t<e.length;t++){e[t].material.uniforms.bbox.value.z=this._curtain}},t}(),p=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._sliderStateOperation$=new a.Subject,i._sliderStateCreator$=new a.Subject,i._sliderStateDisposer$=new a.Subject,i._sliderState$=i._sliderStateOperation$.scan(function(t,e){return e(t)},null).filter(function(t){return null!=t}).distinctUntilChanged(void 0,function(t){return t.frameId}),i._sliderStateCreator$.map(function(){return function(t){if(null!=t)throw new Error("Multiple slider states can not be created at the same time");return new l}}).subscribe(i._sliderStateOperation$),i._sliderStateDisposer$.map(function(){return function(t){return t.dispose(),null}}).subscribe(i._sliderStateOperation$),i}return n(e,t),e.prototype.setKeys=function(t){this.configure({keys:t})},e.prototype.setInitialPosition=function(t){this.configure({initialPosition:t})},e.prototype.setSliderVisible=function(t){this.configure({sliderVisible:t})},e.prototype._activate=function(){var t=this;o.Observable.combineLatest(this._navigator.stateService.state$,this._configuration$).first().subscribe(function(e){var r=e[0],n=e[1];if(r===s.State.Traversing){t._navigator.stateService.wait();var i=n.initialPosition;t._navigator.stateService.moveTo(null!=i?i:1)}}),this._glRenderSubscription=this._sliderState$.map(function(e){var r={name:t._name,render:{frameId:e.frameId,needsRender:e.glNeedsRender,render:e.render.bind(e),stage:c.GLRenderStage.Background}};return e.clearGLNeedsRender(),r}).subscribe(this._container.glRenderer.render$),this._domRenderSubscription=this._sliderState$.filter(function(t){return t.domNeedsRender}).map(function(e){var r=i.h("input.SliderControl",{max:1e3,min:0,oninput:function(e){var r=Number(e.target.value)/1e3;t._navigator.stateService.moveTo(r)},type:"range",value:1e3*e.curtain},[]),n=e.disabled||!e.sliderVisible?null:i.h("div.SliderWrapper",{},[r]),o={name:t._name,vnode:n};return e.clearDomNeedsRender(),o}).subscribe(this._container.domRenderer.render$),this._sliderStateCreator$.next(null),this._stateSubscription=this._navigator.stateService.currentState$.map(function(t){return function(e){return e.update(t),e}}).subscribe(this._sliderStateOperation$),this._setSliderVisibleSubscription=this._configuration$.map(function(t){return null==t.sliderVisible||t.sliderVisible}).distinctUntilChanged().map(function(t){return function(e){return e.sliderVisible=t,e}}).subscribe(this._sliderStateOperation$),this._setKeysSubscription=this._configuration$.filter(function(t){return null!=t.keys}).switchMap(function(e){return o.Observable.zip(t._catchCacheNode$(e.keys.background),t._catchCacheNode$(e.keys.foreground)).map(function(t){return{background:t[0],foreground:t[1]}}).zip(t._navigator.stateService.currentState$.first()).map(function(t){return{nodes:t[0],state:t[1].state}})}).subscribe(function(e){if(null==e.state.currentNode||null==e.state.previousNode||e.state.currentNode.key!==e.nodes.foreground.key||e.state.previousNode.key!==e.nodes.background.key){if(e.state.currentNode.key===e.nodes.background.key)return void t._navigator.stateService.setNodes([e.nodes.foreground]);if(e.state.currentNode.key===e.nodes.foreground.key&&1===e.state.trajectory.length)return void t._navigator.stateService.prependNodes([e.nodes.background]);t._navigator.stateService.setNodes([e.nodes.background]),t._navigator.stateService.setNodes([e.nodes.foreground])}},function(t){console.error(t)});var e=this._navigator.stateService.currentState$.map(function(t){return t.state.previousNode}).filter(function(t){return null!=t}).distinctUntilChanged(void 0,function(t){return t.key});this._nodeSubscription=o.Observable.merge(e,this._navigator.stateService.currentNode$).filter(function(t){return t.pano?u.Settings.maxImageSize>u.Settings.basePanoramaSize:u.Settings.maxImageSize>u.Settings.baseImageSize}).mergeMap(function(t){var e=t.pano?u.Settings.basePanoramaSize:u.Settings.baseImageSize;return Math.max(t.image.width,t.image.height)>e?o.Observable.empty():t.cacheImage$(u.Settings.maxImageSize).map(function(t){return[t.image,t]}).catch(function(e,r){return console.error("Failed to fetch high res slider image ("+t.key+")",e),o.Observable.empty()})}).map(function(t){var e=t[0],r=t[1];return function(t){return t.updateTexture(e,r),t}}).subscribe(this._sliderStateOperation$)},e.prototype._deactivate=function(){var t=this;this._navigator.stateService.state$.first().subscribe(function(e){e===s.State.Waiting&&t._navigator.stateService.traverse()}),this._sliderStateDisposer$.next(null),this._setKeysSubscription.unsubscribe(),this._setSliderVisibleSubscription.unsubscribe(),this._stateSubscription.unsubscribe(),this._glRenderSubscription.unsubscribe(),this._domRenderSubscription.unsubscribe(),this._nodeSubscription.unsubscribe(),this.configure({keys:null})},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype._catchCacheNode$=function(t){return this._navigator.graphService.cacheNode$(t).catch(function(e,r){return console.error("Failed to cache slider node ("+t+")",e),o.Observable.empty()})},e}(h.Component);p.componentName="slider",r.SliderComponent=p,h.ComponentService.register(p),Object.defineProperty(r,"__esModule",{value:!0}),r.default=p},{"../../Component":224,"../../Render":230,"../../State":231,"../../Utils":233,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/fromEvent":41,"rxjs/add/observable/of":44,"rxjs/add/observable/zip":47,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/scan":72,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/withLatestFrom":82,"rxjs/add/operator/zip":83,"virtual-dom":180}],260:[function(t,e,r){"use strict";var n=t("./MarkerComponent");r.MarkerComponent=n.MarkerComponent;var i=t("./marker/SimpleMarker");r.SimpleMarker=i.SimpleMarker;var o=t("./marker/CircleMarker");r.CircleMarker=o.CircleMarker},{"./MarkerComponent":261,"./marker/CircleMarker":264,"./marker/SimpleMarker":266}],261:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("three"),o=t("when"),a=t("rxjs/Observable");t("rxjs/add/observable/combineLatest"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/map");var s=t("../../Component"),c=t("../../Render"),u=t("../../Graph"),h=t("../../Geo"),l=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._relativeGroundAltitude=-2,i._geoCoords=new h.GeoCoords,i._graphCalculator=new u.GraphCalculator,i._markerScene=new s.MarkerScene,i._markerSet=new s.MarkerSet,i._viewportCoords=new h.ViewportCoords,i}return n(e,t),e.prototype.add=function(t){this._markerSet.add(t)},e.prototype.has=function(t){return this._markerSet.has(t)},e.prototype.get=function(t){return this._markerSet.get(t)},e.prototype.getAll=function(){return this._markerSet.getAll()},e.prototype.getMarkerIdAt=function(t){var e=this;return o.promise(function(r,n){e._container.renderService.renderCamera$.first().map(function(r){var n=e._viewportCoords.canvasToViewport(t[0],t[1],e._container.element);return e._markerScene.intersectObjects(n,r.perspective)}).subscribe(function(t){r(t)},function(t){n(t)})})},e.prototype.remove=function(t){this._markerSet.remove(t)},e.prototype.removeAll=function(){this._markerSet.removeAll()},e.prototype._activate=function(){var t=this,r=this._navigator.stateService.currentState$.map(function(e){return e.state.camera.position.z+t._relativeGroundAltitude}).distinctUntilChanged(function(t,e){return Math.abs(t-e)<.01}).publishReplay(1).refCount(),n=a.Observable.combineLatest(r,this._navigator.stateService.reference$).first().map(function(){}).publishReplay(1).refCount(),o=this._configuration$.map(function(t){return{visibleBBoxSize:Math.max(1,Math.min(200,t.visibleBBoxSize))}}),s=this._navigator.stateService.currentNode$.map(function(t){return t.latLon}).publishReplay(1).refCount(),u=a.Observable.combineLatest(o,s).map(function(e){var r=e[0],n=e[1];return t._graphCalculator.boundingBoxCorners(n,r.visibleBBoxSize/2)}).publishReplay(1).refCount(),h=a.Observable.combineLatest(a.Observable.of(this._markerSet).concat(this._markerSet.changed$),u).map(function(t){var e=t[0],r=t[1];return e.search(r)});this._setChangedSubscription=n.switchMap(function(){return h.withLatestFrom(t._navigator.stateService.reference$,r)}).subscribe(function(e){for(var r=e[0],n=e[1],i=e[2],o=t._geoCoords,a=t._markerScene,s=a.markers,c=Object.assign({},s),u=0,h=r;u<h.length;u++){var l=h[u];if(l.id in s)delete c[l.id];else{var p=o.geodeticToEnu(l.latLon.lat,l.latLon.lon,n.alt+i,n.lat,n.lon,n.alt);a.add(l,p)}}for(var f in c)c.hasOwnProperty(f)&&a.remove(f)}),this._markersUpdatedSubscription=n.switchMap(function(){return t._markerSet.updated$.withLatestFrom(u,t._navigator.stateService.reference$,r)}).subscribe(function(e){for(var r=e[0],n=e[1],i=n[0],o=n[1],a=e[2],s=e[3],c=t._geoCoords,u=t._markerScene,h=0,l=r;h<l.length;h++){var p=l[h],f=u.has(p.id),d=p.latLon.lat>i.lat&&p.latLon.lat<o.lat&&p.latLon.lon>i.lon&&p.latLon.lon<o.lon;if(d){var m=c.geodeticToEnu(p.latLon.lat,p.latLon.lon,a.alt+s,a.lat,a.lon,a.alt);u.add(p,m)}else!d&&f&&u.remove(p.id)}}),this._referenceSubscription=this._navigator.stateService.reference$.skip(1).withLatestFrom(r).subscribe(function(e){for(var r=e[0],n=e[1],i=t._geoCoords,o=t._markerScene,a=0,s=o.getAll();a<s.length;a++){var c=s[a],u=i.geodeticToEnu(c.latLon.lat,c.latLon.lon,r.alt+n,r.lat,r.lon,r.alt);o.update(c.id,u)}}),this._adjustHeightSubscription=r.skip(1).withLatestFrom(this._navigator.stateService.reference$,s).subscribe(function(e){for(var r=e[0],n=e[1],i=e[2],o=t._geoCoords,a=t._markerScene,s=o.geodeticToEnu(i.lat,i.lon,n.alt+r,n.lat,n.lon,n.alt),c=0,u=a.getAll();c<u.length;c++){var h=u[c],l=o.geodeticToEnu(h.latLon.lat,h.latLon.lon,n.alt+r,n.lat,n.lon,n.alt),p=l[0]-s[0],f=l[1]-s[1],d=Math.sqrt(p*p+f*f);d>50||a.lerpAltitude(h.id,r,Math.min(1,Math.max(0,1.2-1.2*d/50)))}}),this._renderSubscription=this._navigator.stateService.currentState$.map(function(e){var r=t._markerScene;return{name:t._name,render:{frameId:e.id,needsRender:r.needsRender,render:r.render.bind(r),stage:c.GLRenderStage.Foreground}}}).subscribe(this._container.glRenderer.render$);var l=a.Observable.combineLatest(this._container.renderService.renderCamera$,this._container.mouseService.mouseMove$).map(function(e){var r=e[0],n=e[1],i=t._viewportCoords.canvasToViewport(n.clientX,n.clientY,t._container.element);return t._markerScene.intersectObjects(i,r.perspective)}).publishReplay(1).refCount(),p=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragStart$).map(function(t){return!0}),f=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragEnd$).map(function(t){return!1}),d=a.Observable.merge(p,f).startWith(!1);this._dragEventSubscription=p.withLatestFrom(l).merge(a.Observable.combineLatest(f,a.Observable.of(null))).startWith([!1,null]).pairwise().subscribe(function(r){var n=r[0],i=r[1],o=i[0],a=o?e.dragstart:e.dragend,s=o?i[1]:n[1],c=t._markerScene.get(s),u={marker:c,target:t,type:a};t.fire(a,u)}),this._mouseClaimSubscription=a.Observable.combineLatest(this._container.mouseService.active$,l,d).map(function(t){var e=t[0],r=t[1],n=t[2];return!e&&null!=r||n}).distinctUntilChanged().subscribe(function(e){e?t._container.mouseService.claimMouse(t._name,1):t._container.mouseService.unclaimMouse(t._name)});var m=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragStart$).withLatestFrom(l,this._container.renderService.renderCamera$).map(function(e){var r=e[0],n=e[1],i=e[2],o=t._markerScene.get(n),a=t._viewportCoords.projectToCanvas(o.geometry.position.toArray(),t._container.element,i.perspective),s=a[0],c=a[1];return[o,[r.clientX-s,r.clientY-c],i]}).publishReplay(1).refCount();this._updateMarkerSubscription=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDrag$).withLatestFrom(m,this._navigator.stateService.reference$,o).subscribe(function(r){var n=r[0],o=r[1],a=o[0],s=o[1],c=o[2],u=r[2],h=r[3];if(t._markerScene.has(a.id)){
-var l=n.clientX-s[0],p=n.clientY-s[1],f=t._viewportCoords.canvasToViewport(l,p,t._container.element),d=f[0],m=f[1],v=new i.Vector3(d,m,1).unproject(c.perspective).sub(c.perspective.position).normalize(),g=Math.min(t._relativeGroundAltitude/v.z,h.visibleBBoxSize/2-.1);if(!(g<0)){var y=v.clone().multiplyScalar(g).add(c.perspective.position);y.z=c.perspective.position.z+t._relativeGroundAltitude;var b=t._geoCoords.enuToGeodetic(y.x,y.y,y.z,u.lat,u.lon,u.alt),_=b[0],x=b[1];t._markerScene.update(a.id,y.toArray(),{lat:_,lon:x}),t._markerSet.update(a);var w={marker:a,target:t,type:e.changed};t.fire(e.changed,w)}}})},e.prototype._deactivate=function(){this._adjustHeightSubscription.unsubscribe(),this._dragEventSubscription.unsubscribe(),this._markersUpdatedSubscription.unsubscribe(),this._mouseClaimSubscription.unsubscribe(),this._referenceSubscription.unsubscribe(),this._renderSubscription.unsubscribe(),this._setChangedSubscription.unsubscribe(),this._updateMarkerSubscription.unsubscribe(),this._markerScene.clear()},e.prototype._getDefaultConfiguration=function(){return{visibleBBoxSize:100}},e}(s.Component);l.componentName="marker",l.changed="changed",l.dragstart="dragstart",l.dragend="dragend",r.MarkerComponent=l,s.ComponentService.register(l),Object.defineProperty(r,"__esModule",{value:!0}),r.default=l},{"../../Component":224,"../../Geo":227,"../../Graph":228,"../../Render":230,"rxjs/Observable":28,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,three:174,when:221}],262:[function(t,e,r){"use strict";var n=t("three"),i=function(){function t(t,e){this._needsRender=!1,this._interactiveObjects=[],this._markers={},this._objectMarkers={},this._raycaster=e?e:new n.Raycaster,this._scene=t?t:new n.Scene}return Object.defineProperty(t.prototype,"markers",{get:function(){return this._markers},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:!0,configurable:!0}),t.prototype.add=function(t,e){t.id in this._markers&&this._dispose(t.id),t.createGeometry(e),this._scene.add(t.geometry),this._markers[t.id]=t;for(var r=0,n=t.getInteractiveObjects();r<n.length;r++){var i=n[r];this._interactiveObjects.push(i),this._objectMarkers[i.uuid]=t.id}this._needsRender=!0},t.prototype.clear=function(){for(var t in this._markers)this._markers.hasOwnProperty&&this._dispose(t);this._needsRender=!0},t.prototype.get=function(t){return this._markers[t]},t.prototype.getAll=function(){var t=this;return Object.keys(this._markers).map(function(e){return t._markers[e]})},t.prototype.has=function(t){return t in this._markers},t.prototype.intersectObjects=function(t,e){var r=t[0],i=t[1];this._raycaster.setFromCamera(new n.Vector2(r,i),e);for(var o=this._raycaster.intersectObjects(this._interactiveObjects),a=0,s=o;a<s.length;a++){var c=s[a];if(c.object.uuid in this._objectMarkers)return this._objectMarkers[c.object.uuid]}return null},t.prototype.lerpAltitude=function(t,e,r){t in this._markers&&(this._markers[t].lerpAltitude(e,r),this._needsRender=!0)},t.prototype.remove=function(t){t in this._markers&&(this._dispose(t),this._needsRender=!0)},t.prototype.render=function(t,e){e.render(this._scene,t),this._needsRender=!1},t.prototype.update=function(t,e,r){if(t in this._markers){this._markers[t].updatePosition(e,r),this._needsRender=!0}},t.prototype._dispose=function(t){var e=this._markers[t];this._scene.remove(e.geometry);for(var r=0,n=e.getInteractiveObjects();r<n.length;r++){var i=n[r],o=this._interactiveObjects.indexOf(i);o!==-1?this._interactiveObjects.splice(o,1):console.warn("Object does not exist ("+i.id+") for "+t),delete this._objectMarkers[i.uuid]}e.disposeGeometry(),delete this._markers[t]},t}();r.MarkerScene=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{three:174}],263:[function(t,e,r){"use strict";var n=t("rbush"),i=t("rxjs/Subject");t("rxjs/add/operator/map"),t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan");var o=function(){function t(){this._hash={},this._index=n(16,[".lon",".lat",".lon",".lat"]),this._indexChanged$=new i.Subject,this._updated$=new i.Subject}return Object.defineProperty(t.prototype,"changed$",{get:function(){return this._indexChanged$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"updated$",{get:function(){return this._updated$},enumerable:!0,configurable:!0}),t.prototype.add=function(t){for(var e=[],r=this._hash,n=this._index,i=0,o=t;i<o.length;i++){var a=o[i],s=a.id;s in r&&(n.remove(r[s]),e.push(a));var c={lat:a.latLon.lat,lon:a.latLon.lon,marker:a};r[s]=c,n.insert(c)}e.length>0&&this._updated$.next(e),t.length>e.length&&this._indexChanged$.next(this)},t.prototype.has=function(t){return t in this._hash},t.prototype.get=function(t){return this.has(t)?this._hash[t].marker:void 0},t.prototype.getAll=function(){return this._index.all().map(function(t){return t.marker})},t.prototype.remove=function(t){for(var e=this._hash,r=this._index,n=!1,i=0,o=t;i<o.length;i++){var a=o[i];if(a in e){var s=e[a];r.remove(s),delete e[a],n=!0}}n&&this._indexChanged$.next(this)},t.prototype.removeAll=function(){this._hash={},this._index.clear(),this._indexChanged$.next(this)},t.prototype.search=function(t){var e=t[0],r=t[1];return this._index.search({maxX:r.lon,maxY:r.lat,minX:e.lon,minY:e.lat}).map(function(t){return t.marker})},t.prototype.update=function(t){var e=this._hash,r=this._index,n=t.id;if(n in e){r.remove(e[n]);var i={lat:t.latLon.lat,lon:t.latLon.lon,marker:t};e[n]=i,r.insert(i)}},t}();r.MarkerSet=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{rbush:24,"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72}],264:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("three"),o=t("../../../Component"),a=function(t){function e(e,r,n){var i=t.call(this,e,r)||this;return n=n?n:{},i._color=null!=n.color?n.color:16777215,i._opacity=null!=n.opacity?n.opacity:.4,i._radius=null!=n.radius?n.radius:1,i}return n(e,t),e.prototype._createGeometry=function(t){var e=new i.Mesh(new i.CircleGeometry(this._radius,16),new i.MeshBasicMaterial({color:this._color,opacity:this._opacity,transparent:!0}));e.up.fromArray([0,0,1]),e.renderOrder=-1;var r=new i.Object3D;r.add(e),r.position.fromArray(t),this._geometry=r},e.prototype._disposeGeometry=function(){for(var t=0,e=this._geometry.children;t<e.length;t++){var r=e[t];r.geometry.dispose(),r.material.dispose()}},e.prototype._getInteractiveObjects=function(){return[]},e}(o.Marker);r.CircleMarker=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../../../Component":224,three:174}],265:[function(t,e,r){"use strict";var n=function(){function t(t,e){this._id=t,this._latLon=e}return Object.defineProperty(t.prototype,"id",{get:function(){return this._id},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"geometry",{get:function(){return this._geometry},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"latLon",{get:function(){return this._latLon},enumerable:!0,configurable:!0}),t.prototype.createGeometry=function(t){this._geometry||(this._createGeometry(t),this._geometry.updateMatrixWorld(!0))},t.prototype.disposeGeometry=function(){this._geometry&&(this._disposeGeometry(),this._geometry=void 0)},t.prototype.getInteractiveObjects=function(){return this._geometry?this._getInteractiveObjects():[]},t.prototype.lerpAltitude=function(t,e){this._geometry&&(this._geometry.position.z=(1-e)*this._geometry.position.z+e*t)},t.prototype.updatePosition=function(t,e){e&&(this._latLon.lat=e.lat,this._latLon.lon=e.lon),this._geometry&&(this._geometry.position.fromArray(t),this._geometry.updateMatrixWorld(!0))},t}();r.Marker=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],266:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("three"),o=t("../../../Component"),a=function(t){function e(e,r,n){var i=t.call(this,e,r)||this;return n=n?n:{},i._ballColor=null!=n.ballColor?n.ballColor:16711680,i._ballOpacity=null!=n.ballOpacity?n.ballOpacity:.8,i._circleToRayAngle=2,i._color=null!=n.color?n.color:16711680,i._interactive=!!n.interactive,i._opacity=null!=n.opacity?n.opacity:.4,i._radius=null!=n.radius?n.radius:1,i}return n(e,t),e.prototype._createGeometry=function(t){var e=this._radius,r=new i.Mesh(this._markerGeometry(e,8,8),new i.MeshBasicMaterial({color:this._color,opacity:this._opacity,shading:i.SmoothShading,transparent:!0}));r.renderOrder=1;var n=new i.Mesh(new i.SphereGeometry(e/2,8,8),new i.MeshBasicMaterial({color:this._ballColor,opacity:this._ballOpacity,shading:i.SmoothShading,transparent:!0}));n.position.z=this._markerHeight(e);var o=new i.Object3D;o.add(n),o.add(r),o.position.fromArray(t),this._geometry=o},e.prototype._disposeGeometry=function(){for(var t=0,e=this._geometry.children;t<e.length;t++){var r=e[t];r.geometry.dispose(),r.material.dispose()}},e.prototype._getInteractiveObjects=function(){return this._interactive?[this._geometry.children[0]]:[]},e.prototype._markerHeight=function(t){var e=Math.tan(Math.PI-this._circleToRayAngle);return t*Math.sqrt(1+e*e)},e.prototype._markerGeometry=function(t,e,r){var n=new i.Geometry;e=Math.max(3,Math.floor(e)||8),r=Math.max(2,Math.floor(r)||6);for(var o=this._markerHeight(t),a=[],s=0;s<=r;++s){for(var c=[],u=0;u<=e;++u){var h=u/e*Math.PI*2,l=s/r*Math.PI,p=void 0;if(l<this._circleToRayAngle)p=t;else{var f=Math.tan(l-this._circleToRayAngle);p=t*Math.sqrt(1+f*f)}var d=new i.Vector3;d.x=p*Math.cos(h)*Math.sin(l),d.y=p*Math.sin(h)*Math.sin(l),d.z=p*Math.cos(l)+o,n.vertices.push(d),c.push(n.vertices.length-1)}a.push(c)}for(var s=0;s<r;++s)for(var u=0;u<e;++u){var m=a[s][u+1],v=a[s][u],g=a[s+1][u],y=a[s+1][u+1],b=n.vertices[m].clone().normalize(),_=n.vertices[v].clone().normalize(),x=n.vertices[g].clone().normalize(),w=n.vertices[y].clone().normalize();n.faces.push(new i.Face3(m,v,y,[b,_,w])),n.faces.push(new i.Face3(v,g,y,[_.clone(),x,w.clone()]))}return n.computeFaceNormals(),n.boundingSphere=new i.Sphere(new i.Vector3,t+o),n},e}(o.Marker);r.SimpleMarker=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../../../Component":224,three:174}],267:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable"),o=t("../../Component"),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype._enable=function(){var t=this;this._zoomSubscription=i.Observable.merge(this._container.mouseService.filtered$(this._component.name,this._container.mouseService.dblClick$),this._container.touchService.doubleTap$.map(function(t){var e=t.touches[0];return{clientX:e.clientX,clientY:e.clientY,shiftKey:t.shiftKey}})).withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$).subscribe(function(e){var r=e[0],n=e[1],i=e[2],o=t._container.element,a=t._viewportCoords.canvasPosition(r,o),s=a[0],c=a[1],u=t._viewportCoords.unprojectFromCanvas(s,c,o,n.perspective),h=i.projectBasic(u.toArray()),l=r.shiftKey?-1:1;t._navigator.stateService.zoomIn(l,h)})},e.prototype._disable=function(){this._zoomSubscription.unsubscribe()},e.prototype._getConfiguration=function(t){return{doubleClickZoom:t}},e}(o.MouseHandlerBase);r.DoubleClickZoomHandler=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../../Component":224,"rxjs/Observable":28}],268:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("three"),o=t("rxjs/Observable"),a=t("../../Component"),s=function(t){function e(e,r,n,i,o){var a=t.call(this,e,r,n,i)||this;return a._spatial=o,a._basicRotationThreshold=.05,a._forceCoeff=.2,a}return n(e,t),e.prototype._enable=function(){var t=this;this._preventDefaultSubscription=o.Observable.merge(this._container.mouseService.mouseDragStart$,this._container.mouseService.mouseDrag$,this._container.touchService.touchMove$).subscribe(function(t){t.preventDefault()});var e=this._container.mouseService.filtered$(this._component.name,this._container.mouseService.mouseDragStart$).map(function(t){return!0}),r=this._container.mouseService.filtered$(this._component.name,this._container.mouseService.mouseDragEnd$).map(function(t){return!1});this._activeMouseSubscription=o.Observable.merge(e,r).subscribe(this._container.mouseService.activate$);var n=this._container.touchService.singleTouchDragStart$.map(function(t){return!0}),a=this._container.touchService.singleTouchDragEnd$.map(function(t){return!1});this._activeTouchSubscription=o.Observable.merge(n,a).subscribe(this._container.touchService.activate$),this._rotateBasicSubscription=this._navigator.stateService.currentState$.map(function(t){return t.state.currentNode.fullPano||t.state.nodesAhead<1}).distinctUntilChanged().switchMap(function(e){if(!e)return o.Observable.empty();var r=o.Observable.merge(t._container.mouseService.filtered$(t._component.name,t._container.mouseService.mouseDragStart$),t._container.mouseService.filtered$(t._component.name,t._container.mouseService.mouseDrag$),t._container.mouseService.filtered$(t._component.name,t._container.mouseService.mouseDragEnd$).map(function(t){return null})).pairwise().filter(function(t){return null!=t[0]&&null!=t[1]}),n=o.Observable.merge(t._container.touchService.singleTouchDragStart$,t._container.touchService.singleTouchDrag$,t._container.touchService.singleTouchDragEnd$.map(function(t){return null})).map(function(t){return null!=t&&t.touches.length>0?t.touches[0]:null}).pairwise().filter(function(t){return null!=t[0]&&null!=t[1]});return o.Observable.merge(r,n)}).withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$,this._navigator.stateService.currentCamera$).map(function(e){var r=e[0],n=e[1],o=e[2],a=e[3],s=a.clone(),c=r[0],u=r[1],h=u.clientX-c.clientX,l=u.clientY-c.clientY,p=t._container.element,f=t._viewportCoords.canvasPosition(u,p),d=f[0],m=f[1],v=t._viewportCoords.unprojectFromCanvas(d,m,p,n.perspective).sub(n.perspective.position),g=t._viewportCoords.unprojectFromCanvas(d-h,m,p,n.perspective).sub(n.perspective.position),y=t._viewportCoords.unprojectFromCanvas(d,m-l,p,n.perspective).sub(n.perspective.position),b=(h>0?1:-1)*g.angleTo(v),_=(l>0?-1:1)*y.angleTo(v),x=(new i.Quaternion).setFromUnitVectors(s.up,new i.Vector3(0,0,1)),w=x.clone().inverse(),S=new i.Vector3;S.copy(s.lookat).sub(s.position),S.applyQuaternion(x);var M=S.length(),E=Math.atan2(S.y,S.x);E+=b;var T=Math.atan2(Math.sqrt(S.x*S.x+S.y*S.y),S.z);T+=_,T=Math.max(.01,Math.min(Math.PI-.01,T)),S.x=Math.sin(T)*Math.cos(E),S.y=Math.sin(T)*Math.sin(E),S.z=Math.cos(T),S.applyQuaternion(w);var C=(new i.Vector3).copy(s.position).add(S.multiplyScalar(M)),O=o.projectBasic(C.toArray()),P=o.projectBasic(s.lookat.toArray()),A=O[0]-P[0],j=O[1]-P[1];Math.abs(A)>1?A=0:A>.5?A-=1:A<-.5&&(A+=1);var R=t._basicRotationThreshold;if(A=t._spatial.clamp(A,-R,R),j=t._spatial.clamp(j,-R,R),o.fullPano)return[A,j];var L=t._viewportCoords.getPixelDistances(t._container.element,o,n.perspective),N=t._forceCoeff;return L[0]>0&&j<0&&O[1]<.5&&(j/=Math.max(1,N*L[0])),L[1]>0&&A>0&&O[0]>.5&&(A/=Math.max(1,N*L[1])),L[2]>0&&j>0&&O[1]>.5&&(j/=Math.max(1,N*L[2])),L[3]>0&&A<0&&O[0]<.5&&(A/=Math.max(1,N*L[3])),[A,j]}).subscribe(function(e){t._navigator.stateService.rotateBasic(e)})},e.prototype._disable=function(){this._activeMouseSubscription.unsubscribe(),this._activeTouchSubscription.unsubscribe(),this._preventDefaultSubscription.unsubscribe(),this._rotateBasicSubscription.unsubscribe(),this._activeMouseSubscription=null,this._activeTouchSubscription=null,this._rotateBasicSubscription=null},e.prototype._getConfiguration=function(t){return{dragPan:t}},e}(a.MouseHandlerBase);r.DragPanHandler=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../../Component":224,"rxjs/Observable":28,three:174}],269:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable");t("rxjs/add/observable/merge"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/withLatestFrom");var o=t("../../Component"),a=t("../../Geo"),s=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;i._basicDistanceThreshold=.001,i._basicRotationThreshold=.05,i._bounceCoeff=.1;var s=new a.Spatial,c=new a.ViewportCoords;return i._spatial=s,i._viewportCoords=c,i._doubleClickZoomHandler=new o.DoubleClickZoomHandler(i,r,n,c),i._dragPanHandler=new o.DragPanHandler(i,r,n,c,s),i._scrollZoomHandler=new o.ScrollZoomHandler(i,r,n,c),i._touchZoomHandler=new o.TouchZoomHandler(i,r,n,c),i}return n(e,t),Object.defineProperty(e.prototype,"doubleClickZoom",{get:function(){return this._doubleClickZoomHandler},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"dragPan",{get:function(){return this._dragPanHandler},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"scrollZoom",{get:function(){return this._scrollZoomHandler},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"touchZoom",{get:function(){return this._touchZoomHandler},enumerable:!0,configurable:!0}),e.prototype._activate=function(){var t=this;this._configurationSubscription=this._configuration$.subscribe(function(e){e.doubleClickZoom?t._doubleClickZoomHandler.enable():t._doubleClickZoomHandler.disable(),e.dragPan?t._dragPanHandler.enable():t._dragPanHandler.disable(),e.scrollZoom?t._scrollZoomHandler.enable():t._scrollZoomHandler.disable(),e.touchZoom?t._touchZoomHandler.enable():t._touchZoomHandler.disable()});var e=this._navigator.stateService.currentState$.map(function(t){return t.state.alpha<1});this._bounceSubscription=i.Observable.combineLatest(e,this._navigator.stateService.inTranslation$,this._container.mouseService.active$,this._container.touchService.active$).map(function(t){return t[0]||t[1]||t[2]||t[3]}).distinctUntilChanged().switchMap(function(e){return e?i.Observable.empty():i.Observable.combineLatest(t._container.renderService.renderCamera$,t._navigator.stateService.currentTransform$.first())}).subscribe(function(e){var r=e[0],n=r.perspective,i=e[1],o=t._basicDistanceThreshold/Math.pow(2,r.zoom),a=t._viewportCoords.viewportToBasic(0,0,i,n);if(!(Math.abs(a[0]-.5)<o&&Math.abs(a[1]-.5)<o)){var s=t._viewportCoords.getBasicDistances(i,n),c=0,u=0;if(!(s[0]<o&&s[1]<o&&s[2]<o&&s[3]<o||Math.abs(s[0]-s[2])<o&&Math.abs(s[1]-s[3])<o)){var h=t._bounceCoeff;s[1]>0&&0===s[3]?c=-h*s[1]:0===s[1]&&s[3]>0?c=h*s[3]:s[1]>0&&s[3]>0&&(c=h*(s[3]-s[1])/2),s[0]>0&&0===s[2]?u=h*s[0]:0===s[0]&&s[2]>0?u=-h*s[2]:s[0]>0&&s[2]>0&&(u=h*(s[0]-s[2])/2);var l=t._basicRotationThreshold;c=t._spatial.clamp(c,-l,l),u=t._spatial.clamp(u,-l,l),t._navigator.stateService.rotateBasicUnbounded([c,u])}}}),this._container.mouseService.claimMouse(this._name,0)},e.prototype._deactivate=function(){this._container.mouseService.unclaimMouse(this._name),this._bounceSubscription.unsubscribe(),this._configurationSubscription.unsubscribe(),this._doubleClickZoomHandler.disable(),this._dragPanHandler.disable(),this._scrollZoomHandler.disable(),this._touchZoomHandler.disable()},e.prototype._getDefaultConfiguration=function(){return{doubleClickZoom:!0,dragPan:!0,scrollZoom:!0,touchZoom:!0}},e}(o.Component);s.componentName="mouse",r.MouseComponent=s,o.ComponentService.register(s),Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../../Component":224,"../../Geo":227,"rxjs/Observable":28,"rxjs/add/observable/merge":43,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/withLatestFrom":82}],270:[function(t,e,r){"use strict";var n=function(){function t(t,e,r,n){this._component=t,this._container=e,this._navigator=r,this._viewportCoords=n,this._enabled=!1}return Object.defineProperty(t.prototype,"isEnabled",{get:function(){return this._enabled},enumerable:!0,configurable:!0}),t.prototype.enable=function(){!this._enabled&&this._component.activated&&(this._enable(),this._enabled=!0,this._component.configure(this._getConfiguration(!0)))},t.prototype.disable=function(){this._enabled&&(this._disable(),this._enabled=!1,this._component.activated&&this._component.configure(this._getConfiguration(!1)))},t}();r.MouseHandlerBase=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],271:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../../Component"),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype._enable=function(){var t=this;this._preventDefaultSubscription=this._container.mouseService.mouseWheel$.subscribe(function(t){t.preventDefault()}),this._zoomSubscription=this._container.mouseService.filtered$(this._component.name,this._container.mouseService.mouseWheel$).withLatestFrom(this._navigator.stateService.currentState$,function(t,e){return[t,e]}).filter(function(t){var e=t[1].state;return e.currentNode.fullPano||e.nodesAhead<1}).map(function(t){return t[0]}).withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$,function(t,e,r){return[t,e,r]}).subscribe(function(e){var r=e[0],n=e[1],i=e[2],o=t._container.element,a=t._viewportCoords.canvasPosition(r,o),s=a[0],c=a[1],u=t._viewportCoords.unprojectFromCanvas(s,c,o,n.perspective),h=i.projectBasic(u.toArray()),l=r.deltaY;1===r.deltaMode?l*=40:2===r.deltaMode&&(l*=800);var p=t._viewportCoords.containerToCanvas(o),f=-3*l/p[1];t._navigator.stateService.zoomIn(f,h)})},e.prototype._disable=function(){this._preventDefaultSubscription.unsubscribe(),this._zoomSubscription.unsubscribe(),this._preventDefaultSubscription=null,this._zoomSubscription=null},e.prototype._getConfiguration=function(t){return{scrollZoom:t}},e}(i.MouseHandlerBase);r.ScrollZoomHandler=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../../Component":224}],272:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable"),o=t("../../Component"),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype._enable=function(){var t=this;this._preventDefaultSubscription=this._container.touchService.pinch$.subscribe(function(t){t.originalEvent.preventDefault()});var e=this._container.touchService.pinchStart$.map(function(t){return!0}),r=this._container.touchService.pinchEnd$.map(function(t){return!1});this._activeSubscription=i.Observable.merge(e,r).subscribe(this._container.touchService.activate$),this._zoomSubscription=this._container.touchService.pinch$.withLatestFrom(this._navigator.stateService.currentState$).filter(function(t){var e=t[1].state;return e.currentNode.fullPano||e.nodesAhead<1}).map(function(t){return t[0]}).withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$).subscribe(function(e){var r=e[0],n=e[1],i=e[2],o=t._container.element,a=t._viewportCoords.canvasPosition(r,o),s=a[0],c=a[1],u=t._viewportCoords.unprojectFromCanvas(s,c,o,n.perspective),h=i.projectBasic(u.toArray()),l=t._viewportCoords.containerToCanvas(o),p=l[0],f=l[1],d=3*r.distanceChange/Math.min(p,f);t._navigator.stateService.zoomIn(d,h)})},e.prototype._disable=function(){this._activeSubscription.unsubscribe(),this._preventDefaultSubscription.unsubscribe(),this._zoomSubscription.unsubscribe(),this._preventDefaultSubscription=null,this._zoomSubscription=null},e.prototype._getConfiguration=function(t){return{touchZoom:t}},e}(o.MouseHandlerBase);r.TouchZoomHandler=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../../Component":224,"rxjs/Observable":28}],273:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable"),o=t("rxjs/Subject");t("rxjs/add/observable/combineLatest"),t("rxjs/add/observable/of"),t("rxjs/add/operator/bufferCount"),t("rxjs/add/operator/concat"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/finally"),t("rxjs/add/operator/first"),t("rxjs/add/operator/map"),t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/share"),t("rxjs/add/operator/switchMap"),t("rxjs/add/operator/takeUntil"),t("rxjs/add/operator/withLatestFrom");var a=t("../../Component"),s=t("../../Edge"),c=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._nodesAhead=5,i._configurationOperation$=new o.Subject,i._sequenceDOMRenderer=new a.SequenceDOMRenderer(r.element),i._sequenceDOMInteraction=new a.SequenceDOMInteraction,i._containerWidth$=new o.Subject,i._hoveredKeySubject$=new o.Subject,i._hoveredKey$=i._hoveredKeySubject$.share(),i._edgeStatus$=i._navigator.stateService.currentNode$.switchMap(function(t){return t.sequenceEdges$}).publishReplay(1).refCount(),i}return n(e,t),Object.defineProperty(e.prototype,"hoveredKey$",{get:function(){return this._hoveredKey$},enumerable:!0,configurable:!0}),e.prototype.play=function(){this.configure({playing:!0})},e.prototype.stop=function(){this.configure({playing:!1})},e.prototype.setDirection=function(t){this.configure({direction:t})},e.prototype.setHighlightKey=function(t){this.configure({highlightKey:t})},e.prototype.setMaxWidth=function(t){this.configure({maxWidth:t})},e.prototype.setMinWidth=function(t){this.configure({minWidth:t})},e.prototype.setVisible=function(t){this.configure({visible:t})},e.prototype.resize=function(){var t=this;this._configuration$.first().map(function(e){return t._sequenceDOMRenderer.getContainerWidth(t._container.element,e)}).subscribe(function(e){t._containerWidth$.next(e)})},e.prototype._activate=function(){var t=this;this._renderSubscription=i.Observable.combineLatest(this._edgeStatus$,this._configuration$,this._containerWidth$).map(function(e){var r=e[0],n=e[1],i=e[2],o=t._sequenceDOMRenderer.render(r,n,i,t,t._sequenceDOMInteraction,t._navigator);return{name:t._name,vnode:o}}).subscribe(this._container.domRenderer.render$),this._containerWidthSubscription=this._configuration$.distinctUntilChanged(function(t,e){return t[0]===e[0]&&t[1]===e[1]},function(t){return[t.minWidth,t.maxWidth]}).map(function(e){return t._sequenceDOMRenderer.getContainerWidth(t._container.element,e)}).subscribe(this._containerWidth$),this._configurationSubscription=this._configurationOperation$.scan(function(t,e){return e(t)},{playing:!1}).finally(function(){null!=t._playingSubscription&&(t._navigator.stateService.cutNodes(),t._stop())}).subscribe(function(){}),this._configuration$.map(function(e){return function(r){return e.playing!==r.playing&&(t._navigator.stateService.cutNodes(),e.playing?t._play():t._stop()),r.playing=e.playing,r}}).subscribe(this._configurationOperation$),this._stopSubscription=this._configuration$.switchMap(function(e){var r=e.playing?t._edgeStatus$:i.Observable.empty(),n=i.Observable.of(e.direction);return i.Observable.combineLatest(r,n)}).map(function(t){var e=t[0],r=t[1];if(!e.cached)return!0;for(var n=0,i=e.edges;n<i.length;n++){if(i[n].data.direction===r)return!0}return!1}).filter(function(t){return!t}).map(function(t){return{playing:!1}}).subscribe(this._configurationSubject$),this._hoveredKeySubscription=this._sequenceDOMInteraction.mouseEnterDirection$.switchMap(function(e){return t._edgeStatus$.map(function(t){for(var r=0,n=t.edges;r<n.length;r++){var i=n[r];if(i.data.direction===e)return i.to}return null}).takeUntil(t._sequenceDOMInteraction.mouseLeaveDirection$).concat(i.Observable.of(null))}).distinctUntilChanged().subscribe(this._hoveredKeySubject$)},e.prototype._deactivate=function(){this._stopSubscription.unsubscribe(),this._renderSubscription.unsubscribe(),this._configurationSubscription.unsubscribe(),this._containerWidthSubscription.unsubscribe(),this._hoveredKeySubscription.unsubscribe(),this.stop()},e.prototype._getDefaultConfiguration=function(){return{direction:s.EdgeDirection.Next,maxWidth:117,minWidth:70,playing:!1,visible:!0}},e.prototype._play=function(){var t=this;this._playingSubscription=this._navigator.stateService.currentState$.filter(function(e){return e.state.nodesAhead<t._nodesAhead}).map(function(t){return t.state.lastNode}).distinctUntilChanged(void 0,function(t){return t.key}).withLatestFrom(this._configuration$,function(t,e){return[t,e.direction]}).switchMap(function(t){return([s.EdgeDirection.Next,s.EdgeDirection.Prev].indexOf(t[1])>-1?t[0].sequenceEdges$:t[0].spatialEdges$).filter(function(t){return t.cached}).zip(i.Observable.of(t[1]),function(t,e){return[t,e]})}).map(function(t){for(var e=t[1],r=0,n=t[0].edges;r<n.length;r++){var i=n[r];if(i.data.direction===e)return i.to}return null}).filter(function(t){return null!=t}).switchMap(function(e){return t._navigator.graphService.cacheNode$(e)}).subscribe(function(e){t._navigator.stateService.appendNodes([e])},function(e){console.error(e),t.stop()}),this._clearSubscription=this._navigator.stateService.currentNode$.bufferCount(1,7).subscribe(function(e){t._navigator.stateService.clearPriorNodes()}),this.fire(e.playingchanged,!0)},e.prototype._stop=function(){this._playingSubscription.unsubscribe(),this._playingSubscription=null,this._clearSubscription.unsubscribe(),this._clearSubscription=null,this.fire(e.playingchanged,!1)},e}(a.Component);c.componentName="sequence",c.playingchanged="playingchanged",r.SequenceComponent=c,a.ComponentService.register(c),Object.defineProperty(r,"__esModule",{value:!0}),r.default=c},{"../../Component":224,"../../Edge":225,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/of":44,"rxjs/add/operator/bufferCount":49,"rxjs/add/operator/concat":53,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/finally":61,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/takeUntil":80,"rxjs/add/operator/withLatestFrom":82}],274:[function(t,e,r){"use strict";var n=t("rxjs/Subject"),i=function(){function t(){this._mouseEnterDirection$=new n.Subject,this._mouseLeaveDirection$=new n.Subject}return Object.defineProperty(t.prototype,"mouseEnterDirection$",{get:function(){return this._mouseEnterDirection$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseLeaveDirection$",{get:function(){return this._mouseLeaveDirection$},enumerable:!0,configurable:!0}),t}();r.SequenceDOMInteraction=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{"rxjs/Subject":33}],275:[function(t,e,r){"use strict";var n=t("virtual-dom"),i=t("../../Edge"),o=function(){function t(t){this._minThresholdWidth=320,this._maxThresholdWidth=1480,this._minThresholdHeight=240,this._maxThresholdHeight=820}return t.prototype.render=function(t,e,r,o,a,s){if(e.visible===!1)return n.h("div.SequenceContainer",{},[])
-;for(var c=null,u=null,h=0,l=t.edges;h<l.length;h++){var p=l[h];p.data.direction===i.EdgeDirection.Next&&(c=p.to),p.data.direction===i.EdgeDirection.Prev&&(u=p.to)}var f=this._createPlayingButton(c,u,e,o),d=this._createSequenceArrows(c,u,e,a,s),m={oncontextmenu:function(t){t.preventDefault()},style:{height:.27*r+"px",width:r+"px"}};return n.h("div.SequenceContainer",m,d.concat([f]))},t.prototype.getContainerWidth=function(t,e){var r=t.offsetWidth,n=t.offsetHeight,i=e.minWidth,o=e.maxWidth;o<i&&(o=i);var a=(r-this._minThresholdWidth)/(this._maxThresholdWidth-this._minThresholdWidth),s=(n-this._minThresholdHeight)/(this._maxThresholdHeight-this._minThresholdHeight);return i+Math.max(0,Math.min(1,Math.min(a,s)))*(o-i)},t.prototype._createPlayingButton=function(t,e,r,o){var a=r.direction===i.EdgeDirection.Next&&null!=t||r.direction===i.EdgeDirection.Prev&&null!=e,s=r.playing?function(t){o.stop()}:a?function(t){o.play()}:null,c={onclick:s,style:{}},u=r.playing?"Stop":a?"Play":"PlayDisabled",h=n.h("div.SequenceComponentIcon",{className:u},[]),l=a?"SequencePlay":"SequencePlayDisabled";return n.h("div."+l,c,[h])},t.prototype._createSequenceArrows=function(t,e,r,o,a){var s={onclick:null!=t?function(t){a.moveDir$(i.EdgeDirection.Next).subscribe(function(t){},function(t){console.error(t)})}:null,onmouseenter:function(t){o.mouseEnterDirection$.next(i.EdgeDirection.Next)},onmouseleave:function(t){o.mouseLeaveDirection$.next(i.EdgeDirection.Next)},style:{}},c={onclick:null!=e?function(t){a.moveDir$(i.EdgeDirection.Prev).subscribe(function(t){},function(t){console.error(t)})}:null,onmouseenter:function(t){o.mouseEnterDirection$.next(i.EdgeDirection.Prev)},onmouseleave:function(t){o.mouseLeaveDirection$.next(i.EdgeDirection.Prev)},style:{}},u=this._getStepClassName(i.EdgeDirection.Next,t,r.highlightKey),h=this._getStepClassName(i.EdgeDirection.Prev,e,r.highlightKey),l=n.h("div.SequenceComponentIcon",[]),p=n.h("div.SequenceComponentIcon",[]);return[n.h("div."+u,s,[l]),n.h("div."+h,c,[p])]},t.prototype._getStepClassName=function(t,e,r){var n=t===i.EdgeDirection.Next?"SequenceStepNext":"SequenceStepPrev";return null==e?n+="Disabled":r===e&&(n+="Highlight"),n},t}();r.SequenceDOMRenderer=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../../Edge":225,"virtual-dom":180}],276:[function(t,e,r){"use strict";var n=t("./error/GeometryTagError");r.GeometryTagError=n.GeometryTagError;var i=t("./geometry/PointGeometry");r.PointGeometry=i.PointGeometry;var o=t("./geometry/RectGeometry");r.RectGeometry=o.RectGeometry;var a=t("./geometry/PolygonGeometry");r.PolygonGeometry=a.PolygonGeometry;var s=t("./tag/OutlineTag");r.OutlineTag=s.OutlineTag;var c=t("./tag/SpotTag");r.SpotTag=c.SpotTag;var u=t("./tag/Alignment");r.Alignment=u.Alignment;var h=t("./TagComponent");r.TagComponent=h.TagComponent},{"./TagComponent":277,"./error/GeometryTagError":283,"./geometry/PointGeometry":285,"./geometry/PolygonGeometry":286,"./geometry/RectGeometry":287,"./tag/Alignment":289,"./tag/OutlineTag":292,"./tag/SpotTag":295}],277:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable"),o=t("rxjs/Subject");t("rxjs/add/observable/combineLatest"),t("rxjs/add/observable/empty"),t("rxjs/add/observable/from"),t("rxjs/add/observable/merge"),t("rxjs/add/observable/of"),t("rxjs/add/operator/combineLatest"),t("rxjs/add/operator/concat"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/do"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/merge"),t("rxjs/add/operator/mergeMap"),t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/share"),t("rxjs/add/operator/skip"),t("rxjs/add/operator/skipUntil"),t("rxjs/add/operator/startWith"),t("rxjs/add/operator/switchMap"),t("rxjs/add/operator/take"),t("rxjs/add/operator/takeUntil"),t("rxjs/add/operator/withLatestFrom");var a=t("../../Component"),s=t("../../Geo"),c=t("../../Render"),u=function(t){function e(r,n,c){var u=t.call(this,r,n,c)||this;return u._tagDomRenderer=new a.TagDOMRenderer,u._tagSet=new a.TagSet,u._tagCreator=new a.TagCreator,u._viewportCoords=new s.ViewportCoords,u._tagGlRendererOperation$=new o.Subject,u._tagGlRenderer$=u._tagGlRendererOperation$.startWith(function(t){return t}).scan(function(t,e){return e(t)},new a.TagGLRenderer),u._tags$=u._tagSet.tagData$.map(function(t){for(var e=[],r=0,n=Object.keys(t).sort();r<n.length;r++){var i=n[r];e.push(t[i])}return e}).share(),u._renderTags$=u.tags$.withLatestFrom(u._navigator.stateService.currentTransform$).map(function(t){var e=t[0],r=t[1];return e.map(function(t){if(t instanceof a.OutlineTag)return new a.OutlineRenderTag(t,r);if(t instanceof a.SpotTag)return new a.SpotRenderTag(t,r);throw new Error("Tag type not supported")})}).share(),u._tagChanged$=u._tags$.switchMap(function(t){return i.Observable.from(t).mergeMap(function(t){return i.Observable.merge(t.changed$,t.geometryChanged$)})}).share(),u._renderTagGLChanged$=u._renderTags$.switchMap(function(t){return i.Observable.from(t).mergeMap(function(t){return t.glObjectsChanged$})}).share(),u._tagInterationInitiated$=u._renderTags$.switchMap(function(t){return i.Observable.from(t).mergeMap(function(t){return t.interact$.map(function(t){return t.tag.id})})}).share(),u._tagInteractionAbort$=i.Observable.merge(u._container.mouseService.documentMouseUp$).map(function(t){}).share(),u._activeTag$=u._renderTags$.switchMap(function(t){return i.Observable.from(t).mergeMap(function(t){return t.interact$})}).merge(u._tagInteractionAbort$.map(function(){return{offsetX:0,offsetY:0,operation:a.TagOperation.None,tag:null}})).share(),u._createGeometryChanged$=u._tagCreator.tag$.switchMap(function(t){return null!=t?t.geometryChanged$:i.Observable.empty()}).share(),u._tagCreated$=u._tagCreator.tag$.switchMap(function(t){return null!=t?t.created$:i.Observable.empty()}).share(),u._vertexGeometryCreated$=u._tagCreated$.map(function(t){return t.geometry}).share(),u._pointGeometryCreated$=new o.Subject,u._geometryCreated$=i.Observable.merge(u._vertexGeometryCreated$,u._pointGeometryCreated$).share(),u._basicClick$=u._container.mouseService.staticClick$.withLatestFrom(u._container.renderService.renderCamera$,u._navigator.stateService.currentTransform$,function(t,e,r){return[t,e,r]}).map(function(t){var e=t[0],r=t[1],n=t[2];return u._mouseEventToBasic(e,u._container.element,r,n)}).share(),u._validBasicClick$=u._basicClick$.filter(function(t){var e=t[0],r=t[1];return 0<=e&&e<=1&&0<=r&&r<=1}).share(),u._creatingConfiguration$=u._configuration$.distinctUntilChanged(function(t,e){return t.creating===e.creating&&t.createType===e.createType},function(t){return{createColor:t.createColor,createType:t.createType,creating:t.creating}}).publishReplay(1).refCount(),u._creating$=u._creatingConfiguration$.map(function(t){return t.creating}).publishReplay(1).refCount(),u._creating$.subscribe(function(t){u.fire(e.creatingchanged,t)}),u}return n(e,t),Object.defineProperty(e.prototype,"tags$",{get:function(){return this._tags$},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"geometryCreated$",{get:function(){return this._geometryCreated$},enumerable:!0,configurable:!0}),e.prototype.setTags=function(t){this._tagSet.set$.next(t)},e.prototype.startCreate=function(t){this.configure({createType:t,creating:!0})},e.prototype.stopCreate=function(){this.configure({createType:null,creating:!1})},e.prototype._activate=function(){var t=this;this._preventDefaultSubscription=i.Observable.merge(this._container.mouseService.documentCanvasMouseDown$,this._container.mouseService.documentCanvasMouseMove$).subscribe(function(t){t.preventDefault()}),this._geometryCreatedEventSubscription=this._geometryCreated$.subscribe(function(r){t.fire(e.geometrycreated,r)}),this._tagsChangedEventSubscription=this._tags$.subscribe(function(r){t.fire(e.tagschanged,r)});var r=this.configuration$.switchMap(function(e){return e.creating?t._navigator.stateService.currentNode$.skip(1).take(1).map(function(t){return null}):i.Observable.empty()}),n=this._tagCreator.tag$.switchMap(function(t){return null!=t?t.aborted$.map(function(t){return null}):i.Observable.empty()}),o=this._tagCreated$.map(function(t){return null}),s=this._pointGeometryCreated$.map(function(t){return null});this._stopCreateSubscription=i.Observable.merge(r,n,o,s).subscribe(function(){t.stopCreate()}),this._creatorConfigurationSubscription=this._configuration$.subscribe(this._tagCreator.configuration$),this._createSubscription=this._creatingConfiguration$.switchMap(function(e){return e.creating&&"rect"===e.createType||"polygon"===e.createType?t._validBasicClick$.take(1):i.Observable.empty()}).subscribe(this._tagCreator.create$),this._createPointSubscription=this._creatingConfiguration$.switchMap(function(e){return e.creating&&"point"===e.createType?t._validBasicClick$.take(1):i.Observable.empty()}).map(function(t){return new a.PointGeometry(t)}).subscribe(this._pointGeometryCreated$),this._setCreateVertexSubscription=i.Observable.combineLatest(this._container.mouseService.documentCanvasMouseMove$,this._tagCreator.tag$,this._container.renderService.renderCamera$).filter(function(t){return null!=t[1]}).withLatestFrom(this._navigator.stateService.currentTransform$,function(t,e){return[t[0],t[1],t[2],e]}).subscribe(function(e){var r=e[0],n=e[1],i=e[2],o=e[3],s=t._mouseEventToBasic(r,t._container.element,i,o);n.geometry instanceof a.RectGeometry?n.geometry.setVertex2d(3,s,o):n.geometry instanceof a.PolygonGeometry&&n.geometry.setVertex2d(n.geometry.polygon.length-2,s,o)}),this._addPointSubscription=this._creatingConfiguration$.switchMap(function(e){var r=e.createType;return!e.creating||"rect"!==r&&"polygon"!==r?i.Observable.empty():t._basicClick$.skipUntil(t._validBasicClick$).skip(1)}).withLatestFrom(this._tagCreator.tag$,function(t,e){return[t,e]}).subscribe(function(t){var e=t[0];t[1].addPoint(e)}),this._containerClassListSubscription=this._creating$.subscribe(function(e){e?t._container.element.classList.add("component-tag-create"):t._container.element.classList.remove("component-tag-create")}),this._deleteCreatedSubscription=this._creating$.subscribe(function(e){t._tagCreator.delete$.next(null)}),this._setGLCreateTagSubscription=i.Observable.merge(this._tagCreator.tag$,this._createGeometryChanged$).withLatestFrom(this._navigator.stateService.currentTransform$,function(t,e){return[t,e]}).map(function(t){return function(e){var r=t[0],n=t[1];return null==r?e.removeCreateTag():e.setCreateTag(r,n),e}}).subscribe(this._tagGlRendererOperation$),this._claimMouseSubscription=this._tagInterationInitiated$.switchMap(function(e){return t._container.mouseService.documentCanvasMouseMove$.takeUntil(t._tagInteractionAbort$).take(1)}).subscribe(function(e){t._container.mouseService.claimMouse(t._name,1)}),this._mouseDragSubscription=this._activeTag$.withLatestFrom(this._container.mouseService.documentCanvasMouseMove$,function(t,e){return[t,e]}).switchMap(function(e){var r=e[0],n=e[1];if(r.operation===a.TagOperation.None)return i.Observable.empty();var o=i.Observable.of(n).concat(t._container.mouseService.filtered$(t._name,t._container.mouseService.documentCanvasMouseDrag$));return i.Observable.combineLatest(o,t._container.renderService.renderCamera$).withLatestFrom(i.Observable.of(r),t._navigator.stateService.currentTransform$,function(t,e,r){return[t[0],t[1],e,r]})}).subscribe(function(e){var r=e[0],n=e[1],i=e[2],o=e[3];if(i.operation!==a.TagOperation.None){var s=t._mouseEventToBasic(r,t._container.element,n,o,i.offsetX,i.offsetY);if(i.operation===a.TagOperation.Centroid)i.tag.geometry.setCentroid2d(s,o);else if(i.operation===a.TagOperation.Vertex){var c=i.tag.geometry;c.setVertex2d(i.vertexIndex,s,o)}}}),this._unclaimMouseSubscription=this._container.mouseService.filtered$(this._name,this._container.mouseService.documentCanvasMouseDragEnd$).subscribe(function(e){t._container.mouseService.unclaimMouse(t._name)}),this._setTagsSubscription=this._renderTags$.map(function(t){return function(e){return e.setTags(t),e}}).subscribe(this._tagGlRendererOperation$),this._updateGLTagSubscription=this._renderTagGLChanged$.map(function(t){return function(e){return e.updateTag(t),e}}).subscribe(this._tagGlRendererOperation$),this._setNeedsRenderSubscription=this._tagChanged$.map(function(t){return function(t){return t.setNeedsRender(),t}}).subscribe(this._tagGlRendererOperation$),this._domSubscription=this._renderTags$.startWith([]).do(function(e){t._container.domRenderer.render$.next({name:t._name,vnode:t._tagDomRenderer.clear()})}).combineLatest(this._container.renderService.renderCamera$,this._container.spriteService.spriteAtlas$,this._tagChanged$.startWith(null),this._tagCreator.tag$.merge(this._createGeometryChanged$).startWith(null),function(t,e,r,n,i){return[e,r,t,n,i]}).withLatestFrom(this._navigator.stateService.currentTransform$,function(t,e){return[t[0],t[1],t[2],t[3],t[4],e]}).map(function(e){return{name:t._name,vnode:t._tagDomRenderer.render(e[2],e[4],e[1],e[0].perspective,e[5])}}).subscribe(this._container.domRenderer.render$),this._glSubscription=this._navigator.stateService.currentState$.withLatestFrom(this._tagGlRenderer$,function(t,e){return[t,e]}).map(function(e){var r=e[0],n=e[1];return{name:t._name,render:{frameId:r.id,needsRender:n.needsRender,render:n.render.bind(n),stage:c.GLRenderStage.Foreground}}}).subscribe(this._container.glRenderer.render$)},e.prototype._deactivate=function(){this._tagGlRendererOperation$.next(function(t){return t.dispose(),t}),this._tagSet.set$.next([]),this._tagCreator.delete$.next(null),this._claimMouseSubscription.unsubscribe(),this._mouseDragSubscription.unsubscribe(),this._unclaimMouseSubscription.unsubscribe(),this._setTagsSubscription.unsubscribe(),this._updateGLTagSubscription.unsubscribe(),this._setNeedsRenderSubscription.unsubscribe(),this._stopCreateSubscription.unsubscribe(),this._creatorConfigurationSubscription.unsubscribe(),this._createSubscription.unsubscribe(),this._createPointSubscription.unsubscribe(),this._setCreateVertexSubscription.unsubscribe(),this._addPointSubscription.unsubscribe(),this._deleteCreatedSubscription.unsubscribe(),this._setGLCreateTagSubscription.unsubscribe(),this._preventDefaultSubscription.unsubscribe(),this._containerClassListSubscription.unsubscribe(),this._domSubscription.unsubscribe(),this._glSubscription.unsubscribe(),this._geometryCreatedEventSubscription.unsubscribe(),this._tagsChangedEventSubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{createColor:16777215,creating:!1}},e.prototype._mouseEventToBasic=function(t,e,r,n,i,o){i=null!=i?i:0,o=null!=o?o:0;var a=this._viewportCoords.canvasPosition(t,e),s=a[0],c=a[1];return this._viewportCoords.canvasToBasic(s-i,c-o,e,n,r.perspective)},e}(a.Component);u.componentName="tag",u.creatingchanged="creatingchanged",u.geometrycreated="geometrycreated",u.tagschanged="tagschanged",r.TagComponent=u,a.ComponentService.register(u),Object.defineProperty(r,"__esModule",{value:!0}),r.default=u},{"../../Component":224,"../../Geo":227,"../../Render":230,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/empty":39,"rxjs/add/observable/from":40,"rxjs/add/observable/merge":43,"rxjs/add/observable/of":44,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/concat":53,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/skip":74,"rxjs/add/operator/skipUntil":75,"rxjs/add/operator/startWith":77,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/take":79,"rxjs/add/operator/takeUntil":80,"rxjs/add/operator/withLatestFrom":82}],278:[function(t,e,r){"use strict";var n=t("rxjs/Subject");t("rxjs/add/operator/map"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/share"),t("rxjs/add/operator/withLatestFrom");var i=t("../../Component"),o=function(){function t(){this._tagOperation$=new n.Subject,this._create$=new n.Subject,this._delete$=new n.Subject,this._configuration$=new n.Subject,this._tag$=this._tagOperation$.scan(function(t,e){return e(t)},null).share(),this._create$.withLatestFrom(this._configuration$,function(t,e){return[t,e]}).map(function(t){return function(e){var r=t[0],n=t[1];if("rect"===n.createType){var o=new i.RectGeometry([r[0],r[1],r[0],r[1]]);return new i.OutlineCreateTag(o,{color:n.createColor})}if("polygon"===n.createType){var o=new i.PolygonGeometry([[r[0],r[1]],[r[0],r[1]],[r[0],r[1]]]);return new i.OutlineCreateTag(o,{color:n.createColor})}return null}}).subscribe(this._tagOperation$),this._delete$.map(function(){return function(t){return null}}).subscribe(this._tagOperation$)}return Object.defineProperty(t.prototype,"create$",{get:function(){return this._create$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"delete$",{get:function(){return this._delete$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"configuration$",{get:function(){return this._configuration$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"tag$",{get:function(){return this._tag$},enumerable:!0,configurable:!0}),t}();r.TagCreator=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../../Component":224,"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/withLatestFrom":82}],279:[function(t,e,r){"use strict";var n=t("three"),i=t("virtual-dom"),o=function(){function t(){}return t.prototype.render=function(t,e,r,o,a){for(var s=(new n.Matrix4).getInverse(o.matrixWorld),c=o.projectionMatrix,u=[],h=0,l=t;h<l.length;h++){var p=l[h];u=u.concat(p.getDOMObjects(r,s,c))}return null!=e&&(u=u.concat(e.getDOMObjects(a,s,c))),i.h("div.TagContainer",{},u)},t.prototype.clear=function(){return i.h("div",{},[])},t}();r.TagDOMRenderer=o},{three:174,"virtual-dom":180}],280:[function(t,e,r){"use strict";var n=t("three"),i=function(){function t(){this._scene=new n.Scene,this._tags={},this._createTag=null,this._needsRender=!1}return Object.defineProperty(t.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:!0,configurable:!0}),t.prototype.render=function(t,e){e.render(this._scene,t),this._needsRender=!1},t.prototype.setCreateTag=function(t,e){this._disposeCreateTag(),this._addCreateTag(t,e),this._needsRender=!0},t.prototype.removeCreateTag=function(){this._disposeCreateTag(),this._needsRender=!0},t.prototype.setTags=function(t){this._disposeTags();for(var e=0,r=t;e<r.length;e++){var n=r[e];this._addTag(n)}this._needsRender=!0},t.prototype.updateTag=function(t){for(var e=0,r=this._tags[t.tag.id][1];e<r.length;e++){var n=r[e];this._scene.remove(n)}this._addTag(t)},t.prototype.setNeedsRender=function(){this._needsRender=!0},t.prototype.dispose=function(){this._disposeTags(),this._disposeCreateTag(),this._needsRender=!1},t.prototype._addTag=function(t){var e=t.glObjects;this._tags[t.tag.id]=[t,[]];for(var r=0,n=e;r<n.length;r++){var i=n[r];this._tags[t.tag.id][1].push(i),this._scene.add(i)}},t.prototype._addCreateTag=function(t,e){var r=t.getGLObject(e);this._createTag=r,this._scene.add(r)},t.prototype._disposeTags=function(){for(var t=0,e=Object.keys(this._tags);t<e.length;t++){for(var r=e[t],n=0,i=this._tags[r][1];n<i.length;n++){var o=i[n];this._scene.remove(o)}this._tags[r][0].dispose(),delete this._tags[r]}},t.prototype._disposeCreateTag=function(){if(null!=this._createTag){var t=this._createTag;this._scene.remove(t),t.geometry.dispose(),t.material.dispose(),this._createTag=null}},t}();r.TagGLRenderer=i},{three:174}],281:[function(t,e,r){"use strict";var n;!function(t){t[t.None=0]="None",t[t.Centroid=1]="Centroid",t[t.Vertex=2]="Vertex"}(n=r.TagOperation||(r.TagOperation={})),Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],282:[function(t,e,r){"use strict";var n=t("rxjs/Subject");t("rxjs/add/operator/map"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/share");var i=function(){function t(){this._tagDataOperation$=new n.Subject,this._set$=new n.Subject,this._tagData$=this._tagDataOperation$.scan(function(t,e){return e(t)},{}).share(),this._set$.map(function(t){return function(e){for(var r=0,n=Object.keys(e);r<n.length;r++){delete e[n[r]]}for(var i=0,o=t;i<o.length;i++){var a=o[i];e[a.id]=a}return e}}).subscribe(this._tagDataOperation$)}return Object.defineProperty(t.prototype,"tagData$",{get:function(){return this._tagData$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"set$",{get:function(){return this._set$},enumerable:!0,configurable:!0}),t}();r.TagSet=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73}],283:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../../../Error"),o=function(t){function e(e){var r=t.call(this,null!=e?e:"The provided geometry value is incorrect")||this;return r.name="GeometryTagError",r}return n(e,t),e}(i.MapillaryError);r.GeometryTagError=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i.MapillaryError},{"../../../Error":226}],284:[function(t,e,r){"use strict";var n=t("rxjs/Subject"),i=function(){function t(){this._notifyChanged$=new n.Subject}return Object.defineProperty(t.prototype,"changed$",{get:function(){return this._notifyChanged$},enumerable:!0,configurable:!0}),t}();r.Geometry=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{"rxjs/Subject":33}],285:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../../../Component"),o=function(t){function e(e){var r=t.call(this)||this,n=e[0],o=e[1];if(n<0||n>1||o<0||o>1)throw new i.GeometryTagError("Basic coordinates must be on the interval [0, 1].");return r._point=e.slice(),r}return n(e,t),Object.defineProperty(e.prototype,"point",{get:function(){return this._point},enumerable:!0,configurable:!0}),e.prototype.getCentroid3d=function(t){return t.unprojectBasic(this._point,200)},e.prototype.setCentroid2d=function(t,e){var r=[Math.max(0,Math.min(1,t[0])),Math.max(0,Math.min(1,t[1]))];this._point[0]=r[0],this._point[1]=r[1],this._notifyChanged$.next(this)},e}(i.Geometry);r.PointGeometry=o},{"../../../Component":224}],286:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../../../Component"),o=function(t){function e(e,r){var n=t.call(this)||this,o=e.length;if(o<3)throw new i.GeometryTagError("A polygon must have three or more positions.");if(e[0][0]!==e[o-1][0]||e[0][1]!==e[o-1][1])throw new i.GeometryTagError("First and last positions must be equivalent.");n._polygon=[];for(var a=0,s=e;a<s.length;a++){var c=s[a];if(c[0]<0||c[0]>1||c[1]<0||c[1]>1)throw new i.GeometryTagError("Basic coordinates of polygon must be on the interval [0, 1].");n._polygon.push(c.slice())}if(n._holes=[],null==r)return n;for(var u=0;u<r.length;u++){var h=r[u],l=h.length;if(l<3)throw new i.GeometryTagError("A polygon hole must have three or more positions.");if(h[0][0]!==h[l-1][0]||h[0][1]!==h[l-1][1])throw new i.GeometryTagError("First and last positions of hole must be equivalent.");n._holes.push([]);for(var p=0,f=h;p<f.length;p++){var c=f[p];if(c[0]<0||c[0]>1||c[1]<0||c[1]>1)throw new i.GeometryTagError("Basic coordinates of hole must be on the interval [0, 1].");n._holes[u].push(c.slice())}}return n}return n(e,t),Object.defineProperty(e.prototype,"polygon",{get:function(){return this._polygon},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"holes",{get:function(){return this._holes},enumerable:!0,configurable:!0}),e.prototype.addVertex2d=function(t){var e=[Math.max(0,Math.min(1,t[0])),Math.max(0,Math.min(1,t[1]))];this._polygon.splice(this._polygon.length-1,0,e),this._notifyChanged$.next(this)},e.prototype.removeVertex2d=function(t){if(t<0||t>=this._polygon.length||this._polygon.length<4)throw new i.GeometryTagError("Index for removed vertex must be valid.");if(t>0&&t<this._polygon.length-1)this._polygon.splice(t,1);else{this._polygon.splice(0,1),this._polygon.pop();var e=this._polygon[0].slice();this._polygon.push(e)}this._notifyChanged$.next(this)},e.prototype.setVertex2d=function(t,e,r){var n=[Math.max(0,Math.min(1,e[0])),Math.max(0,Math.min(1,e[1]))];0===t||t===this._polygon.length-1?(this._polygon[0]=n.slice(),this._polygon[this._polygon.length-1]=n.slice()):this._polygon[t]=n.slice(),this._notifyChanged$.next(this)},e.prototype.setCentroid2d=function(t,e){for(var r=this._polygon.map(function(t){return t[0]}),n=this._polygon.map(function(t){return t[1]}),i=Math.min.apply(Math,r),o=Math.max.apply(Math,r),a=Math.min.apply(Math,n),s=Math.max.apply(Math,n),c=this._getCentroid2d(),u=-i,h=1-o,l=-a,p=1-s,f=Math.max(u,Math.min(h,t[0]-c[0])),d=Math.max(l,Math.min(p,t[1]-c[1])),m=0,v=this._polygon;m<v.length;m++){var g=v[m];g[0]+=f,g[1]+=d}this._notifyChanged$.next(this)},e.prototype.getPoints3d=function(t){return this.getVertices3d(t)},e.prototype.getVertex3d=function(t,e){return e.unprojectBasic(this._polygon[t],200)},e.prototype.getVertices3d=function(t){return this._polygon.map(function(e){return t.unprojectBasic(e,200)})},e.prototype.getHoleVertices3d=function(t){for(var e=[],r=0,n=this._holes;r<n.length;r++){var i=n[r],o=i.map(function(e){return t.unprojectBasic(e,200)});e.push(o)}return e},e.prototype.getCentroid3d=function(t){var e=this._getCentroid2d();return t.unprojectBasic(e,200)},e.prototype.getTriangles3d=function(t){return this._triangulate(this._polygon,this.getPoints3d(t),this._holes,this.getHoleVertices3d(t))},e.prototype._getCentroid2d=function(){for(var t=this._polygon,e=0,r=0,n=0,i=0;i<t.length-1;i++){var o=t[i][0],a=t[i][1],s=t[i+1][0],c=t[i+1][1],u=o*c-s*a;e+=u,r+=(o+s)*u,n+=(a+c)*u}return e/=2,r/=6*e,n/=6*e,[r,n]},e}(i.VertexGeometry);r.PolygonGeometry=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../../../Component":224}],287:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../../../Component"),o=function(t){function e(e){var r=t.call(this)||this;if(e[1]>e[3])throw new i.GeometryTagError("Basic Y coordinates values can not be inverted.");for(var n=0,o=e;n<o.length;n++){var a=o[n];if(a<0||a>1)throw new i.GeometryTagError("Basic coordinates must be on the interval [0, 1].")}return r._rect=e.slice(0,4),r._rect[0]>r._rect[2]&&(r._inverted=!0),r}return n(e,t),Object.defineProperty(e.prototype,"rect",{get:function(){return this._rect},enumerable:!0,configurable:!0}),e.prototype.setVertex2d=function(t,e,r){var n=this._rect.slice(),i=[Math.max(0,Math.min(1,e[0])),Math.max(0,Math.min(1,e[1]))],o=[];if(0===t?(o[0]=i[0],o[1]=n[1],o[2]=n[2],o[3]=i[1]):1===t?(o[0]=i[0],o[1]=i[1],o[2]=n[2],o[3]=n[3]):2===t?(o[0]=n[0],o[1]=i[1],o[2]=i[0],o[3]=n[3]):3===t&&(o[0]=n[0],o[1]=n[1],o[2]=i[0],o[3]=i[1]),r.gpano){var a=t<2&&i[0]>.75&&n[0]<.25||t>=2&&this._inverted&&i[0]>.75&&n[2]<.25,s=t<2&&this._inverted&&i[0]<.25&&n[0]>.75||t>=2&&i[0]<.25&&n[2]>.75;a||s?this._inverted=!this._inverted:(o[0]-n[0]<-.25&&(o[0]=n[0]),o[2]-n[2]>.25&&(o[2]=n[2])),(!this._inverted&&o[0]>o[2]||this._inverted&&o[0]<o[2])&&(o[0]=n[0],o[2]=n[2])}else o[0]>o[2]&&(o[0]=n[0],o[2]=n[2]);o[1]>o[3]&&(o[1]=n[1],o[3]=n[3]),this._rect[0]=o[0],this._rect[1]=o[1],this._rect[2]=o[2],this._rect[3]=o[3],this._notifyChanged$.next(this)},e.prototype.setCentroid2d=function(t,e){var r=this._rect.slice(),n=r[0],i=this._inverted?r[2]+1:r[2],o=r[1],a=r[3],s=n+(i-n)/2,c=o+(a-o)/2,u=0;if(null!=e.gpano&&e.gpano.CroppedAreaImageWidthPixels===e.gpano.FullPanoWidthPixels)u=this._inverted?t[0]+1-s:t[0]-s;else{var h=-n,l=1-i;u=Math.max(h,Math.min(l,t[0]-s))}var p=-o,f=1-a,d=Math.max(p,Math.min(f,t[1]-c));this._rect[0]=r[0]+u,this._rect[1]=r[1]+d,this._rect[2]=r[2]+u,this._rect[3]=r[3]+d,this._rect[0]<0?(this._rect[0]+=1,this._inverted=!this._inverted):this._rect[0]>1&&(this._rect[0]-=1,this._inverted=!this._inverted),this._rect[2]<0?(this._rect[2]+=1,this._inverted=!this._inverted):this._rect[2]>1&&(this._rect[2]-=1,this._inverted=!this._inverted),this._notifyChanged$.next(this)},e.prototype.getPoints3d=function(t){return this._getPoints2d(t).map(function(e){return t.unprojectBasic(e,200)})},e.prototype.getVertex3d=function(t,e){return e.unprojectBasic(this._rectToVertices2d(this._rect)[t],200)},e.prototype.getVertices3d=function(t){return this._rectToVertices2d(this._rect).map(function(e){return t.unprojectBasic(e,200)})},e.prototype.getCentroid3d=function(t){var e=this._rect,r=e[0],n=this._inverted?e[2]+1:e[2],i=e[1],o=e[3],a=r+(n-r)/2,s=i+(o-i)/2;return t.unprojectBasic([a,s],200)},e.prototype.getTriangles3d=function(t){return this._triangulate(this._rectToVertices2d(this._rect),this.getVertices3d(t))},e.prototype.validate=function(t){var e=this._rect;return!(!this._inverted&&t[0]<e[0]||t[0]-e[2]>.25||t[1]<e[1])},e.prototype._getPoints2d=function(t){for(var e=this._rectToVertices2d(this._rect),r=e.length-1,n=[],i=0;i<r;++i)for(var o=e[i][0],a=e[i][1],s=e[i+1][0],c=e[i+1][1],u=(s-o)/9,h=(c-a)/9,l=0;l<10;++l){var p=[o+l*u,a+l*h];n.push(p)}return n},e.prototype._rectToVertices2d=function(t){return[[t[0],t[3]],[t[0],t[1]],[this._inverted?t[2]+1:t[2],t[1]],[this._inverted?t[2]+1:t[2],t[3]],[t[0],t[3]]]},e}(i.VertexGeometry);r.RectGeometry=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../../../Component":224}],288:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("earcut"),o=t("../../../Component"),a=function(t){function e(){return t.call(this)||this}return n(e,t),e.prototype._triangulate=function(t,e,r,n){for(var o=[t.slice(0,-1)],a=0,s=null!=r?r:[];a<s.length;a++){var c=s[a];o.push(c.slice(0,-1))}for(var u=e.slice(0,-1),h=0,l=null!=n?n:[];h<l.length;h++){var p=l[h];u=u.concat(p.slice(0,-1))}for(var f=i.flatten(o),d=i(f.vertices,f.holes,f.dimensions),m=[],v=0;v<d.length;++v){var g=u[d[v]];m.push(g[0]),m.push(g[1]),m.push(g[2])}return m},e}(o.Geometry);r.VertexGeometry=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../../../Component":224,earcut:6}],289:[function(t,e,r){"use strict";var n;!function(t){t[t.Center=0]="Center",t[t.Outer=1]="Outer"}(n=r.Alignment||(r.Alignment={})),Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],290:[function(t,e,r){"use strict";var n=t("three"),i=t("virtual-dom"),o=t("rxjs/Subject"),a=t("../../../Component"),s=function(){function t(t,e){this._geometry=t,this._options={color:null==e.color?16777215:e.color},this._created$=new o.Subject,this._aborted$=new o.Subject}return Object.defineProperty(t.prototype,"geometry",{get:function(){return this._geometry},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"created$",{get:function(){return this._created$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"aborted$",{get:function(){return this._aborted$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"geometryChanged$",{get:function(){var t=this
-;return this._geometry.changed$.map(function(e){return t})},enumerable:!0,configurable:!0}),t.prototype.getGLObject=function(t){var e=this._geometry.getPoints3d(t),r=this._getPositions(e),i=new n.BufferGeometry;i.addAttribute("position",new n.BufferAttribute(r,3));var o=new n.LineBasicMaterial({color:this._options.color,linewidth:1});return new n.Line(i,o)},t.prototype.getDOMObjects=function(t,e,r){var n=this,o=[],s=function(t){t.stopPropagation(),n._aborted$.next(n)};if(this._geometry instanceof a.RectGeometry){var c=this._geometry.getVertex3d(1,t),u=this._convertToCameraSpace(c,e);if(u.z<0){var h=this._projectToCanvas(u,r),l=h.map(function(t){return 100*t+"%"}),p={style:{background:"#"+("000000"+this._options.color.toString(16)).substr(-6),left:l[0],position:"absolute",top:l[1]}},f={onclick:s,style:{left:l[0],position:"absolute",top:l[1]}};o.push(i.h("div.TagInteractor",f,[])),o.push(i.h("div.TagVertex",p,[]))}}else if(this._geometry instanceof a.PolygonGeometry){var d=this._geometry,m=this._geometry.getVertex3d(0,t),v=this._convertToCameraSpace(m,e);if(v.z<0){var h=this._projectToCanvas(v,r),l=h.map(function(t){return 100*t+"%"}),g=d.polygon.length>4?function(t){t.stopPropagation(),d.removeVertex2d(d.polygon.length-2),n._created$.next(n)}:s,f={onclick:g,style:{left:l[0],position:"absolute",top:l[1]}},y=d.polygon.length>4?"TagCompleter":"TagInteractor";o.push(i.h("div."+y,f,[]))}if(d.polygon.length>3){var b=this._geometry.getVertex3d(d.polygon.length-3,t),_=this._convertToCameraSpace(b,e);if(_.z<0){var h=this._projectToCanvas(_,r),l=h.map(function(t){return 100*t+"%"}),x=function(t){t.stopPropagation(),d.removeVertex2d(d.polygon.length-3)},f={onclick:x,style:{left:l[0],position:"absolute",top:l[1]}};o.push(i.h("div.TagInteractor",f,[]))}}var w=this._geometry.getVertices3d(t);w.splice(-2,2);for(var S=0,M=w;S<M.length;S++){var E=M[S],T=this._convertToCameraSpace(E,e);if(T.z<0){var h=this._projectToCanvas(T,r),l=h.map(function(t){return 100*t+"%"}),p={style:{background:"#"+("000000"+this._options.color.toString(16)).substr(-6),left:l[0],position:"absolute",top:l[1]}};o.push(i.h("div.TagVertex",p,[]))}}}return o},t.prototype.addPoint=function(t){if(this._geometry instanceof a.RectGeometry){if(!this._geometry.validate(t))return;this._created$.next(this)}else if(this._geometry instanceof a.PolygonGeometry){var e=this._geometry;e.addVertex2d(t)}},t.prototype._getPositions=function(t){for(var e=t.length,r=new Float32Array(3*e),n=0;n<e;++n){var i=3*n,o=t[n];r[i]=o[0],r[i+1]=o[1],r[i+2]=o[2]}return r},t.prototype._projectToCanvas=function(t,e){var r=new n.Vector3(t.x,t.y,t.z).applyProjection(e);return[(r.x+1)/2,(1-r.y)/2]},t.prototype._convertToCameraSpace=function(t,e){return new n.Vector3(t[0],t[1],t[2]).applyMatrix4(e)},t}();r.OutlineCreateTag=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../../../Component":224,"rxjs/Subject":33,three:174,"virtual-dom":180}],291:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("three"),o=t("virtual-dom"),a=t("../../../Component"),s=t("../../../Viewer"),c=function(t){function e(e,r){var n=t.call(this,e,r)||this;return n._fill=n._tag.fillOpacity>0&&!r.gpano?n._createFill():null,n._holes=n._tag.lineWidth>=1?n._createHoles():[],n._outline=n._tag.lineWidth>=1?n._createOutline():null,n._glObjects=n._createGLObjects(),n._tag.geometry.changed$.subscribe(function(t){null!=n._fill&&n._updateFillGeometry(),n._holes.length>0&&n._updateHoleGeometries(),null!=n._outline&&n._updateOulineGeometry()}),n._tag.changed$.subscribe(function(t){var e=!1;null==n._fill?n._tag.fillOpacity>0&&!n._transform.gpano&&(n._fill=n._createFill(),e=!0):n._updateFillMaterial(),null==n._outline?n._tag.lineWidth>0&&(n._holes=n._createHoles(),n._outline=n._createOutline(),e=!0):(n._updateHoleMaterials(),n._updateOutlineMaterial()),e&&(n._glObjects=n._createGLObjects(),n._glObjectsChanged$.next(n))}),n}return n(e,t),e.prototype.dispose=function(){this._disposeFill(),this._disposeHoles(),this._disposeOutline()},e.prototype.getDOMObjects=function(t,e,r){var n=this,i=[];if(this._tag.geometry instanceof a.RectGeometry)if(null!=this._tag.icon){var s=this._tag.geometry.getVertex3d(this._tag.iconIndex,this._transform),c=this._convertToCameraSpace(s,e);if(c.z<0){var u=function(t){n._interact$.next({offsetX:0,offsetY:0,operation:a.TagOperation.None,tag:n._tag})};if(t.loaded){var h=this._getSpriteAlignment(this._tag.iconIndex,this._tag.iconAlignment),l=t.getDOMSprite(this._tag.icon,h[0],h[1]),p=function(t){t.stopPropagation(),n._tag.click$.next(n._tag)},f=this._projectToCanvas(c,r),d=f.map(function(t){return 100*t+"%"}),m={onclick:p,onmousedown:u,style:{left:d[0],pointerEvents:"all",position:"absolute",top:d[1]}};i.push(o.h("div.TagSymbol",m,[l]))}}}else if(null!=this._tag.text){var v=this._tag.geometry.getVertex3d(3,this._transform),g=this._convertToCameraSpace(v,e);if(g.z<0){var u=function(t){n._interact$.next({offsetX:0,offsetY:0,operation:a.TagOperation.None,tag:n._tag})},y=this._projectToCanvas(g,r),b=y.map(function(t){return 100*t+"%"}),m={onmousedown:u,style:{color:"#"+("000000"+this._tag.textColor.toString(16)).substr(-6),left:b[0],pointerEvents:"all",position:"absolute",top:b[1]},textContent:this._tag.text};i.push(o.h("span.TagSymbol",m,[]))}}if(!this._tag.editable)return i;var _="#"+("000000"+this._tag.lineColor.toString(16)).substr(-6);if(this._tag.geometry instanceof a.RectGeometry){var x=this._tag.geometry.getCentroid3d(this._transform),w=this._convertToCameraSpace(x,e);if(w.z<0){var u=this._interact(a.TagOperation.Centroid),S=this._projectToCanvas(w,r),M=S.map(function(t){return 100*t+"%"}),m={onmousedown:u,style:{background:_,left:M[0],position:"absolute",top:M[1]}};i.push(o.h("div.TagMover",m,[]))}}for(var E=this._tag.geometry.getVertices3d(this._transform),T=0;T<E.length-1;T++){var C=this._tag.geometry instanceof a.RectGeometry;if(!C||!(null!=this._tag.icon&&T===this._tag.iconIndex||null==this._tag.icon&&null!=this._tag.text&&3===T)){var O=this._convertToCameraSpace(E[T],e);if(!(O.z>0)){var u=this._interact(a.TagOperation.Vertex,T),P=this._projectToCanvas(O,r),A=P.map(function(t){return 100*t+"%"}),m={onmousedown:u,style:{background:_,left:A[0],position:"absolute",top:A[1]}};if(C&&(m.style.cursor=T%2==0?"nesw-resize":"nwse-resize"),i.push(o.h("div.TagResizer",m,[])),this._tag.indicateVertices){var j={style:{background:_,left:A[0],position:"absolute",top:A[1]}};i.push(o.h("div.TagVertex",j,[]))}}}}return i},e.prototype._createFill=function(){var t=this._tag.geometry.getTriangles3d(this._transform),e=new Float32Array(t),r=new i.BufferGeometry;r.addAttribute("position",new i.BufferAttribute(e,3)),r.computeBoundingSphere();var n=new i.MeshBasicMaterial({color:this._tag.fillColor,opacity:this._tag.fillOpacity,side:i.DoubleSide,transparent:!0});return new i.Mesh(r,n)},e.prototype._createGLObjects=function(){var t=[];null!=this._fill&&t.push(this._fill);for(var e=0,r=this._holes;e<r.length;e++){var n=r[e];t.push(n)}return null!=this._outline&&t.push(this._outline),t},e.prototype._createHoles=function(){var t=[];if(this._tag.geometry instanceof a.PolygonGeometry)for(var e=this._tag.geometry,r=e.getHoleVertices3d(this._transform),n=0,i=r;n<i.length;n++){var o=i[n],s=this._createLine(o);t.push(s)}return t},e.prototype._createLine=function(t){var e=this._getLinePositions(t),r=new i.BufferGeometry;r.addAttribute("position",new i.BufferAttribute(e,3)),r.computeBoundingSphere();var n=new i.LineBasicMaterial({color:this._tag.lineColor,linewidth:this._tag.lineWidth});return new i.Line(r,n)},e.prototype._createOutline=function(){var t=this._tag.geometry.getPoints3d(this._transform);return this._createLine(t)},e.prototype._disposeFill=function(){null!=this._fill&&(this._fill.geometry.dispose(),this._fill.material.dispose(),this._fill=null)},e.prototype._disposeHoles=function(){for(var t=0,e=this._holes;t<e.length;t++){var r=e[t];r.geometry.dispose(),r.material.dispose()}this._holes=[]},e.prototype._disposeOutline=function(){null!=this._outline&&(this._outline.geometry.dispose(),this._outline.material.dispose(),this._outline=null)},e.prototype._getLinePositions=function(t){for(var e=t.length,r=new Float32Array(3*e),n=0;n<e;++n){var i=3*n,o=t[n];r[i+0]=o[0],r[i+1]=o[1],r[i+2]=o[2]}return r},e.prototype._getSpriteAlignment=function(t,e){var r=s.SpriteAlignment.Center,n=s.SpriteAlignment.Center;if(e===a.Alignment.Outer)switch(t){case 0:r=s.SpriteAlignment.End,n=s.SpriteAlignment.Start;break;case 1:r=s.SpriteAlignment.End,n=s.SpriteAlignment.End;break;case 2:r=s.SpriteAlignment.Start,n=s.SpriteAlignment.End;break;case 3:r=s.SpriteAlignment.Start,n=s.SpriteAlignment.Start}return[r,n]},e.prototype._interact=function(t,e){var r=this;return function(n){var i=n.offsetX-n.target.offsetWidth/2,o=n.offsetY-n.target.offsetHeight/2;r._interact$.next({offsetX:i,offsetY:o,operation:t,tag:r._tag,vertexIndex:e})}},e.prototype._updateFillGeometry=function(){var t=this._tag.geometry.getTriangles3d(this._transform),e=new Float32Array(t),r=this._fill.geometry,n=r.getAttribute("position");n.array.length===e.length?(n.set(e),n.needsUpdate=!0):(r.removeAttribute("position"),r.addAttribute("position",new i.BufferAttribute(e,3))),r.computeBoundingSphere()},e.prototype._updateFillMaterial=function(){var t=this._fill.material;t.color=new i.Color(this._tag.fillColor),t.opacity=this._tag.fillOpacity,t.needsUpdate=!0},e.prototype._updateHoleGeometries=function(){var t=this._tag.geometry,e=t.getHoleVertices3d(this._transform);if(e.length!==this._holes.length)throw new Error("Changing the number of holes is not supported.");for(var r=0;r<this._holes.length;r++){var n=e[r],i=this._holes[r];this._updateLine(i,n)}},e.prototype._updateHoleMaterials=function(){for(var t=0,e=this._holes;t<e.length;t++){var r=e[t],n=r.material;this._updateLineBasicMaterial(n)}},e.prototype._updateLine=function(t,e){var r=this._getLinePositions(e),n=t.geometry,i=n.getAttribute("position");i.set(r),i.needsUpdate=!0,n.computeBoundingSphere()},e.prototype._updateOulineGeometry=function(){var t=this._tag.geometry.getPoints3d(this._transform);this._updateLine(this._outline,t)},e.prototype._updateOutlineMaterial=function(){var t=this._outline.material;this._updateLineBasicMaterial(t)},e.prototype._updateLineBasicMaterial=function(t){t.color=new i.Color(this._tag.lineColor),t.linewidth=Math.max(this._tag.lineWidth,1),t.opacity=this._tag.lineWidth>=1?1:0,t.transparent=this._tag.lineWidth<=0,t.needsUpdate=!0},e}(a.RenderTag);r.OutlineRenderTag=c},{"../../../Component":224,"../../../Viewer":234,three:174,"virtual-dom":180}],292:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Subject"),o=t("../../../Component"),a=function(t){function e(r,n,a){var s=t.call(this,r,n)||this;return s._editable=null!=a.editable&&a.editable,s._fillColor=null==a.fillColor?16777215:a.fillColor,s._fillOpacity=null==a.fillOpacity?0:a.fillOpacity,s._icon=void 0===a.icon?null:a.icon,s._iconAlignment=null==a.iconAlignment?o.Alignment.Outer:a.iconAlignment,s._iconIndex=null==a.iconIndex?3:a.iconIndex,s._indicateVertices=null==a.indicateVertices||a.indicateVertices,s._lineColor=null==a.lineColor?16777215:a.lineColor,s._lineWidth=null==a.lineWidth?1:a.lineWidth,s._text=void 0===a.text?null:a.text,s._textColor=null==a.textColor?16777215:a.textColor,s._click$=new i.Subject,s._click$.subscribe(function(t){s.fire(e.click,s)}),s}return n(e,t),Object.defineProperty(e.prototype,"click$",{get:function(){return this._click$},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"editable",{get:function(){return this._editable},set:function(t){this._editable=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"fillColor",{get:function(){return this._fillColor},set:function(t){this._fillColor=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"fillOpacity",{get:function(){return this._fillOpacity},set:function(t){this._fillOpacity=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"geometry",{get:function(){return this._geometry},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"icon",{get:function(){return this._icon},set:function(t){this._icon=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"iconAlignment",{get:function(){return this._iconAlignment},set:function(t){this._iconAlignment=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"iconIndex",{get:function(){return this._iconIndex},set:function(t){this._iconIndex=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"indicateVertices",{get:function(){return this._indicateVertices},set:function(t){this._indicateVertices=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"lineColor",{get:function(){return this._lineColor},set:function(t){this._lineColor=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"lineWidth",{get:function(){return this._lineWidth},set:function(t){this._lineWidth=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"text",{get:function(){return this._text},set:function(t){this._text=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"textColor",{get:function(){return this._textColor},set:function(t){this._textColor=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),e.prototype.setOptions=function(t){this._editable=null==t.editable?this._editable:t.editable,this._icon=void 0===t.icon?this._icon:t.icon,this._iconAlignment=null==t.iconAlignment?this._iconAlignment:t.iconAlignment,this._iconIndex=null==t.iconIndex?this._iconIndex:t.iconIndex,this._indicateVertices=null==t.indicateVertices?this._indicateVertices:t.indicateVertices,this._lineColor=null==t.lineColor?this._lineColor:t.lineColor,this._lineWidth=null==t.lineWidth?this._lineWidth:t.lineWidth,this._fillColor=null==t.fillColor?this._fillColor:t.fillColor,this._fillOpacity=null==t.fillOpacity?this._fillOpacity:t.fillOpacity,this._text=void 0===t.text?this._text:t.text,this._textColor=null==t.textColor?this._textColor:t.textColor,this._notifyChanged$.next(this)},e}(o.Tag);a.click="click",r.OutlineTag=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../../../Component":224,"rxjs/Subject":33}],293:[function(t,e,r){"use strict";var n=t("three"),i=t("rxjs/Subject"),o=function(){function t(t,e){this._tag=t,this._transform=e,this._glObjects=[],this._glObjectsChanged$=new i.Subject,this._interact$=new i.Subject}return Object.defineProperty(t.prototype,"glObjects",{get:function(){return this._glObjects},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"glObjectsChanged$",{get:function(){return this._glObjectsChanged$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"interact$",{get:function(){return this._interact$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"tag",{get:function(){return this._tag},enumerable:!0,configurable:!0}),t.prototype._projectToCanvas=function(t,e){var r=new n.Vector3(t.x,t.y,t.z).applyProjection(e);return[(r.x+1)/2,(1-r.y)/2]},t.prototype._convertToCameraSpace=function(t,e){return new n.Vector3(t[0],t[1],t[2]).applyMatrix4(e)},t}();r.RenderTag=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"rxjs/Subject":33,three:174}],294:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom"),o=t("../../../Component"),a=t("../../../Viewer"),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.dispose=function(){},e.prototype.getDOMObjects=function(t,e,r){var n=this,s=[],c=this._tag.geometry.getCentroid3d(this._transform),u=this._convertToCameraSpace(c,e);if(u.z<0){var h=this._projectToCanvas(u,r),l=h.map(function(t){return 100*t+"%"}),p=function(t){n._interact$.next({offsetX:0,offsetY:0,operation:o.TagOperation.None,tag:n._tag})};if(null!=this._tag.icon){if(t.loaded){var f=t.getDOMSprite(this._tag.icon,a.SpriteAlignment.Center,a.SpriteAlignment.End),d={onmousedown:p,style:{bottom:100*(1-h[1])+"%",left:l[0],pointerEvents:"all",position:"absolute",transform:"translate(0px, -8px)"}};s.push(i.h("div",d,[f]))}}else if(null!=this._tag.text){var d={onmousedown:p,style:{bottom:100*(1-h[1])+"%",color:"#"+("000000"+this._tag.textColor.toString(16)).substr(-6),left:l[0],pointerEvents:"all",position:"absolute",transform:"translate(-50%, -7px)"},textContent:this._tag.text};s.push(i.h("span.TagSymbol",d,[]))}var m=this._interact(o.TagOperation.Centroid),v="#"+("000000"+this._tag.color.toString(16)).substr(-6);if(this._tag.editable){var g={onmousedown:m,style:{background:v,left:l[0],pointerEvents:"all",position:"absolute",top:l[1]}};s.push(i.h("div.TagSpotInteractor",g,[]))}var y={style:{background:v,left:l[0],position:"absolute",top:l[1]}};s.push(i.h("div.TagVertex",y,[]))}return s},e.prototype._interact=function(t,e){var r=this;return function(n){var i=n.offsetX-n.target.offsetWidth/2,o=n.offsetY-n.target.offsetHeight/2;r._interact$.next({offsetX:i,offsetY:o,operation:t,tag:r._tag,vertexIndex:e})}},e}(o.RenderTag);r.SpotRenderTag=s},{"../../../Component":224,"../../../Viewer":234,"virtual-dom":180}],295:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../../../Component"),o=function(t){function e(e,r,n){var i=t.call(this,e,r)||this;return i._color=null==n.color?16777215:n.color,i._editable=null!=n.editable&&n.editable,i._icon=void 0===n.icon?null:n.icon,i._text=void 0===n.text?null:n.text,i._textColor=null==n.textColor?16777215:n.textColor,i}return n(e,t),Object.defineProperty(e.prototype,"color",{get:function(){return this._color},set:function(t){this._color=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"editable",{get:function(){return this._editable},set:function(t){this._editable=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"icon",{get:function(){return this._icon},set:function(t){this._icon=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"text",{get:function(){return this._text},set:function(t){this._text=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"textColor",{get:function(){return this._textColor},set:function(t){this._textColor=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),e.prototype.setOptions=function(t){this._color=null==t.color?this._color:t.color,this._editable=null==t.editable?this._editable:t.editable,this._icon=void 0===t.icon?this._icon:t.icon,this._text=void 0===t.text?this._text:t.text,this._textColor=null==t.textColor?this._textColor:t.textColor,this._notifyChanged$.next(this)},e}(i.Tag);r.SpotTag=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../../../Component":224}],296:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Subject");t("rxjs/add/operator/map"),t("rxjs/add/operator/share");var o=t("../../../Utils"),a=function(t){function e(r,n){var o=t.call(this)||this;return o._id=r,o._geometry=n,o._notifyChanged$=new i.Subject,o._notifyChanged$.subscribe(function(t){o.fire(e.changed,o)}),o._geometry.changed$.subscribe(function(t){o.fire(e.geometrychanged,o)}),o}return n(e,t),Object.defineProperty(e.prototype,"id",{get:function(){return this._id},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"geometry",{get:function(){return this._geometry},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"changed$",{get:function(){return this._notifyChanged$},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"geometryChanged$",{get:function(){var t=this;return this._geometry.changed$.map(function(e){return t}).share()},enumerable:!0,configurable:!0}),e}(o.EventEmitter);a.changed="changed",a.geometrychanged="geometrychanged",r.Tag=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../../../Utils":233,"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/share":73}],297:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./MapillaryError"),o=function(t){function e(e){var r=t.call(this,null!=e?e:"The argument is not valid.")||this;return r.name="ArgumentMapillaryError",r}return n(e,t),e}(i.MapillaryError);r.ArgumentMapillaryError=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"./MapillaryError":299}],298:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./MapillaryError"),o=function(t){function e(e){var r=t.call(this,e)||this;return r.name="GraphMapillaryError",r}return n(e,t),e}(i.MapillaryError);r.GraphMapillaryError=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"./MapillaryError":299}],299:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=function(t){function e(e){var r=t.call(this,e)||this;return r.name="MapillaryError",r}return n(e,t),e}(Error);r.MapillaryError=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{}],300:[function(t,e,r){"use strict";var n=t("three"),i=function(){function t(t){null!=t?(this._position=(new n.Vector3).fromArray(t.unprojectSfM([0,0],0)),this._lookat=(new n.Vector3).fromArray(t.unprojectSfM([0,0],10)),this._up=t.upVector(),this._focal=this._getFocal(t)):(this._position=new n.Vector3(0,0,0),this._lookat=new n.Vector3(0,0,1),this._up=new n.Vector3(0,-1,0),this._focal=1)}return Object.defineProperty(t.prototype,"position",{get:function(){return this._position},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"lookat",{get:function(){return this._lookat},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"up",{get:function(){return this._up},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"focal",{get:function(){return this._focal},set:function(t){this._focal=t},enumerable:!0,configurable:!0}),t.prototype.lerpCameras=function(t,e,r){this._position.subVectors(e.position,t.position).multiplyScalar(r).add(t.position),this._lookat.subVectors(e.lookat,t.lookat).multiplyScalar(r).add(t.lookat),this._up.subVectors(e.up,t.up).multiplyScalar(r).add(t.up),this._focal=(1-r)*t.focal+r*e.focal},t.prototype.copy=function(t){this._position.copy(t.position),this._lookat.copy(t.lookat),this._up.copy(t.up),this._focal=t.focal},t.prototype.clone=function(){var e=new t;return e.position.copy(this._position),e.lookat.copy(this._lookat),e.up.copy(this._up),e.focal=this._focal,e},t.prototype.diff=function(t){var e=this._position.distanceToSquared(t.position),r=this._lookat.distanceToSquared(t.lookat),n=this._up.distanceToSquared(t.up),i=100*Math.abs(this._focal-t.focal);return Math.max(e,r,n,i)},t.prototype._getFocal=function(t){if(null==t.gpano)return t.focal;var e=Math.PI*t.gpano.CroppedAreaImageHeightPixels/t.gpano.FullPanoHeightPixels,r=.5/Math.tan(e/2);return Math.min(1/(2*(Math.sqrt(2)-1)),Math.max(.5,r))},t}();r.Camera=i},{three:174}],301:[function(t,e,r){"use strict";var n=function(){function t(){this._wgs84a=6378137,this._wgs84b=6356752.31424518}return t.prototype.geodeticToEnu=function(t,e,r,n,i,o){var a=this.geodeticToEcef(t,e,r);return this.ecefToEnu(a[0],a[1],a[2],n,i,o)},t.prototype.enuToGeodetic=function(t,e,r,n,i,o){var a=this.enuToEcef(t,e,r,n,i,o);return this.ecefToGeodetic(a[0],a[1],a[2])},t.prototype.ecefToEnu=function(t,e,r,n,i,o){var a=this.geodeticToEcef(n,i,o),s=[t-a[0],e-a[1],r-a[2]];n=n*Math.PI/180,i=i*Math.PI/180;var c=Math.cos(n),u=Math.sin(n),h=Math.cos(i),l=Math.sin(i);return[-l*s[0]+h*s[1],-u*h*s[0]-u*l*s[1]+c*s[2],c*h*s[0]+c*l*s[1]+u*s[2]]},t.prototype.enuToEcef=function(t,e,r,n,i,o){var a=this.geodeticToEcef(n,i,o);n=n*Math.PI/180,i=i*Math.PI/180;var s=Math.cos(n),c=Math.sin(n),u=Math.cos(i),h=Math.sin(i);return[-h*t-c*u*e+s*u*r+a[0],u*t-c*h*e+s*h*r+a[1],s*e+c*r+a[2]]},t.prototype.geodeticToEcef=function(t,e,r){var n=this._wgs84a,i=this._wgs84b;t=t*Math.PI/180,e=e*Math.PI/180;var o=Math.cos(t),a=Math.sin(t),s=Math.cos(e),c=Math.sin(e),u=n*n,h=i*i,l=1/Math.sqrt(u*o*o+h*a*a),p=(u*l+r)*o;return[p*s,p*c,(h*l+r)*a]},t.prototype.ecefToGeodetic=function(t,e,r){var n=this._wgs84a,i=this._wgs84b,o=n*n,a=i*i,s=o-a,c=Math.sqrt(s/o),u=Math.sqrt(s/a),h=Math.sqrt(t*t+e*e),l=Math.atan2(r*n,h*i),p=Math.sin(l),f=Math.cos(l),d=Math.atan2(e,t),m=Math.atan2(r+u*u*i*p*p*p,h-c*c*n*f*f*f),v=Math.sin(m),g=Math.cos(m),y=n/Math.sqrt(1-c*c*v*v),b=h/g-y;return[180*m/Math.PI,180*d/Math.PI,b]},t}();r.GeoCoords=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],302:[function(t,e,r){"use strict";var n=t("three"),i=function(){function t(){this._epsilon=1e-9}return t.prototype.azimuthalToBearing=function(t){return-t+Math.PI/2},t.prototype.degToRad=function(t){return Math.PI*t/180},t.prototype.radToDeg=function(t){return 180*t/Math.PI},t.prototype.rotationMatrix=function(t){var e=new n.Vector3(t[0],t[1],t[2]),r=e.length();return e.normalize(),(new n.Matrix4).makeRotationAxis(e,r)},t.prototype.rotate=function(t,e){var r=new n.Vector3(t[0],t[1],t[2]),i=this.rotationMatrix(e);return r.applyMatrix4(i),r},t.prototype.opticalCenter=function(t,e){var r=[-t[0],-t[1],-t[2]],n=[-e[0],-e[1],-e[2]];return this.rotate(n,r)},t.prototype.viewingDirection=function(t){var e=[-t[0],-t[1],-t[2]];return this.rotate([0,0,1],e)},t.prototype.wrap=function(t,e,r){if(r<e)throw new Error("Invalid arguments: max must be larger than min.");for(var n=r-e;t>r||t<e;)t>r?t-=n:t<e&&(t+=n);return t},t.prototype.wrapAngle=function(t){return this.wrap(t,-Math.PI,Math.PI)},t.prototype.clamp=function(t,e,r){return t<e?e:t>r?r:t},t.prototype.angleBetweenVector2=function(t,e,r,n){var i=Math.atan2(n,r)-Math.atan2(e,t);return this.wrapAngle(i)},t.prototype.angleDifference=function(t,e){var r=e-t;return this.wrapAngle(r)},t.prototype.relativeRotationAngle=function(t,e){var r=this.rotationMatrix([-t[0],-t[1],-t[2]]),n=this.rotationMatrix(e),i=r.multiply(n),o=i.elements;return Math.acos((o[0]+o[5]+o[10]-1)/2)},t.prototype.angleToPlane=function(t,e){var r=(new n.Vector3).fromArray(t),i=r.length();if(i<this._epsilon)return 0;var o=r.dot((new n.Vector3).fromArray(e));return Math.asin(o/i)},t.prototype.distanceFromLatLon=function(t,e,r,n){var i=this.degToRad(r-t),o=this.degToRad(n-e),a=Math.sin(i/2)*Math.sin(i/2)+Math.cos(t)*Math.cos(r)*Math.sin(o/2)*Math.sin(o/2);return 12742e3*Math.atan2(Math.sqrt(a),Math.sqrt(1-a))},t}();r.Spatial=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{three:174}],303:[function(t,e,r){"use strict";var n=t("three"),i=function(){function t(t,e,r){this._orientation=this._getValue(t.orientation,1);var n=null!=e?e.width:4,i=null!=e?e.height:3,o=this._orientation<5;this._width=this._getValue(t.width,o?n:i),this._height=this._getValue(t.height,o?i:n),this._basicAspect=o?this._width/this._height:this._height/this._width,this._basicWidth=o?t.width:t.height,this._basicHeight=o?t.height:t.width,this._focal=this._getValue(t.focal,1),this._scale=this._getValue(t.scale,0),this._gpano=null!=t.gpano?t.gpano:null,this._rt=this._getRt(t.rotation,r),this._srt=this._getSrt(this._rt,this._scale)}return Object.defineProperty(t.prototype,"basicAspect",{get:function(){return this._basicAspect},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"basicHeight",{get:function(){return this._basicHeight},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"basicWidth",{get:function(){return this._basicWidth},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"focal",{get:function(){return this._focal},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fullPano",{get:function(){return null!=this._gpano&&0===this._gpano.CroppedAreaLeftPixels&&0===this._gpano.CroppedAreaTopPixels&&this._gpano.CroppedAreaImageWidthPixels===this._gpano.FullPanoWidthPixels&&this._gpano.CroppedAreaImageHeightPixels===this._gpano.FullPanoHeightPixels},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"gpano",{get:function(){return this._gpano},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"height",{get:function(){return this._height},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"orientation",{get:function(){return this._orientation},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rt",{get:function(){return this._rt},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"srt",{get:function(){return this._srt},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"scale",{get:function(){return this._scale},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"width",{get:function(){return this._width},enumerable:!0,configurable:!0}),t.prototype.upVector=function(){var t=this._rt.elements;switch(this._orientation){case 1:return new n.Vector3(-t[1],-t[5],-t[9]);case 3:return new n.Vector3(t[1],t[5],t[9]);case 6:return new n.Vector3(-t[0],-t[4],-t[8]);case 8:return new n.Vector3(t[0],t[4],t[8]);default:return new n.Vector3(-t[1],-t[5],-t[9])}},t.prototype.projectorMatrix=function(){var t=this._normalizedToTextureMatrix(),e=this._focal,r=(new n.Matrix4).set(e,0,0,0,0,e,0,0,0,0,0,0,0,0,1,0);return t.multiply(r),t.multiply(this._rt),t},t.prototype.projectBasic=function(t){var e=this.projectSfM(t);return this._sfmToBasic(e)},t.prototype.unprojectBasic=function(t,e){var r=this._basicToSfm(t);return this.unprojectSfM(r,e)},t.prototype.projectSfM=function(t){var e=new n.Vector4(t[0],t[1],t[2],1);return e.applyMatrix4(this._rt),this._bearingToSfm([e.x,e.y,e.z])},t.prototype.unprojectSfM=function(t,e){var r=this._sfmToBearing(t),i=new n.Vector4(e*r[0],e*r[1],e*r[2],1);return i.applyMatrix4((new n.Matrix4).getInverse(this._rt)),[i.x/i.w,i.y/i.w,i.z/i.w]},t.prototype._sfmToBearing=function(t){if(this._fullPano()){var e=2*t[0]*Math.PI,r=2*-t[1]*Math.PI,i=Math.cos(r)*Math.sin(e),o=-Math.sin(r),a=Math.cos(r)*Math.cos(e);return[i,o,a]}if(this._gpano){var s=Math.max(this.gpano.CroppedAreaImageWidthPixels,this.gpano.CroppedAreaImageHeightPixels),c=[t[0]*s+this.gpano.CroppedAreaImageWidthPixels/2+this.gpano.CroppedAreaLeftPixels,t[1]*s+this.gpano.CroppedAreaImageHeightPixels/2+this.gpano.CroppedAreaTopPixels],e=2*Math.PI*(c[0]/this.gpano.FullPanoWidthPixels-.5),r=-Math.PI*(c[1]/this.gpano.FullPanoHeightPixels-.5),i=Math.cos(r)*Math.sin(e),o=-Math.sin(r),a=Math.cos(r)*Math.cos(e);return[i,o,a]}var u=new n.Vector3(t[0],t[1],this._focal)
-;return u.normalize(),[u.x,u.y,u.z]},t.prototype._bearingToSfm=function(t){if(this._fullPano()){var e=t[0],r=t[1],n=t[2],i=Math.atan2(e,n),o=Math.atan2(-r,Math.sqrt(e*e+n*n));return[i/(2*Math.PI),-o/(2*Math.PI)]}if(this._gpano){var e=t[0],r=t[1],n=t[2],i=Math.atan2(e,n),o=Math.atan2(-r,Math.sqrt(e*e+n*n)),a=[(i/(2*Math.PI)+.5)*this.gpano.FullPanoWidthPixels,(-o/Math.PI+.5)*this.gpano.FullPanoHeightPixels],s=Math.max(this.gpano.CroppedAreaImageWidthPixels,this.gpano.CroppedAreaImageHeightPixels);return[(a[0]-this.gpano.CroppedAreaLeftPixels-this.gpano.CroppedAreaImageWidthPixels/2)/s,(a[1]-this.gpano.CroppedAreaTopPixels-this.gpano.CroppedAreaImageHeightPixels/2)/s]}return t[2]>0?[t[0]*this._focal/t[2],t[1]*this._focal/t[2]]:[t[0]<0?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,t[1]<0?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY]},t.prototype._basicToSfm=function(t){var e,r;switch(this._orientation){case 1:e=t[0],r=t[1];break;case 3:e=1-t[0],r=1-t[1];break;case 6:e=t[1],r=1-t[0];break;case 8:e=1-t[1],r=t[0];break;default:e=t[0],r=t[1]}var n=this._width,i=this._height,o=Math.max(n,i);return[e*n/o-n/o/2,r*i/o-i/o/2]},t.prototype._sfmToBasic=function(t){var e,r,n=this._width,i=this._height,o=Math.max(n,i),a=(t[0]+n/o/2)/n*o,s=(t[1]+i/o/2)/i*o;switch(this._orientation){case 1:e=a,r=s;break;case 3:e=1-a,r=1-s;break;case 6:e=1-s,r=a;break;case 8:e=s,r=1-a;break;default:e=a,r=s}return[e,r]},t.prototype._fullPano=function(){return null!=this.gpano&&0===this.gpano.CroppedAreaLeftPixels&&0===this.gpano.CroppedAreaTopPixels&&this.gpano.CroppedAreaImageWidthPixels===this.gpano.FullPanoWidthPixels&&this.gpano.CroppedAreaImageHeightPixels===this.gpano.FullPanoHeightPixels},t.prototype._getValue=function(t,e){return null!=t&&t>0?t:e},t.prototype._getRt=function(t,e){var r=new n.Vector3(t[0],t[1],t[2]),i=r.length();r.normalize();var o=new n.Matrix4;return o.makeRotationAxis(r,i),o.setPosition(new n.Vector3(e[0],e[1],e[2])),o},t.prototype._getSrt=function(t,e){var r=t.clone(),i=r.elements;return i[12]=e*i[12],i[13]=e*i[13],i[14]=e*i[14],r.scale(new n.Vector3(e,e,e)),r},t.prototype._normalizedToTextureMatrix=function(){var t=Math.max(this._width,this._height),e=t/this._width,r=t/this._height;switch(this._orientation){case 1:return(new n.Matrix4).set(e,0,0,.5,0,-r,0,.5,0,0,1,0,0,0,0,1);case 3:return(new n.Matrix4).set(-e,0,0,.5,0,r,0,.5,0,0,1,0,0,0,0,1);case 6:return(new n.Matrix4).set(0,-r,0,.5,-e,0,0,.5,0,0,1,0,0,0,0,1);case 8:return(new n.Matrix4).set(0,r,0,.5,e,0,0,.5,0,0,1,0,0,0,0,1);default:return(new n.Matrix4).set(e,0,0,.5,0,-r,0,.5,0,0,1,0,0,0,0,1)}},t}();r.Transform=i},{three:174}],304:[function(t,e,r){"use strict";var n=t("three"),i=function(){function t(){this._unprojectDepth=200}return t.prototype.basicToCanvas=function(t,e,r,n,i){var o=n.unprojectBasic([t,e],this._unprojectDepth);return this.projectToCanvas(o,r,i)},t.prototype.basicToViewport=function(t,e,r,n){var i=r.unprojectBasic([t,e],this._unprojectDepth);return this.projectToViewport(i,n)},t.prototype.canvasPosition=function(t,e){var r=e.getBoundingClientRect();return[t.clientX-r.left-e.clientLeft,t.clientY-r.top-e.clientTop]},t.prototype.canvasToBasic=function(t,e,r,n,i){var o=this.unprojectFromCanvas(t,e,r,i).toArray();return n.projectBasic(o)},t.prototype.canvasToViewport=function(t,e,r){var n=this.containerToCanvas(r);return[2*t/n[0]-1,1-2*e/n[1]]},t.prototype.containerToCanvas=function(t){return[t.offsetWidth,t.offsetHeight]},t.prototype.getBasicDistances=function(t,e){var r=this.viewportToBasic(-1,1,t,e),n=this.viewportToBasic(1,1,t,e),i=this.viewportToBasic(1,-1,t,e),o=this.viewportToBasic(-1,-1,t,e),a=0,s=0,c=0,u=0;return r[1]<0&&n[1]<0&&(a=r[1]>n[1]?-r[1]:-n[1]),n[0]>1&&i[0]>1&&(s=n[0]<i[0]?n[0]-1:i[0]-1),i[1]>1&&o[1]>1&&(c=i[1]<o[1]?i[1]-1:o[1]-1),o[0]<0&&r[0]<0&&(u=o[0]>r[0]?-o[0]:-r[0]),[a,s,c,u]},t.prototype.getPixelDistances=function(t,e,r){var n=this.viewportToBasic(-1,1,e,r),i=this.viewportToBasic(1,1,e,r),o=this.viewportToBasic(1,-1,e,r),a=this.viewportToBasic(-1,-1,e,r),s=0,c=0,u=0,h=0,l=this.containerToCanvas(t),p=l[0],f=l[1];if(n[1]<0&&i[1]<0){var d=n[1]>i[1]?n[0]:i[0],m=this.basicToCanvas(d,0,t,e,r);s=m[1]>0?m[1]:0}if(i[0]>1&&o[0]>1){var v=i[0]<o[0]?i[1]:o[1],m=this.basicToCanvas(1,v,t,e,r);c=m[0]<p?p-m[0]:0}if(o[1]>1&&a[1]>1){var d=o[1]<a[1]?o[0]:a[0],m=this.basicToCanvas(d,1,t,e,r);u=m[1]<f?f-m[1]:0}if(a[0]<0&&n[0]<0){var v=a[0]>n[0]?a[1]:n[1],m=this.basicToCanvas(0,v,t,e,r);h=m[0]>0?m[0]:0}return[s,c,u,h]},t.prototype.insideElement=function(t,e){var r=e.getBoundingClientRect(),n=r.left+e.clientLeft,i=n+e.clientWidth,o=r.top+e.clientTop,a=o+e.clientHeight;return t.clientX>n&&t.clientX<i&&t.clientY>o&&t.clientY<a},t.prototype.projectToCanvas=function(t,e,r){var n=this.projectToViewport(t,r);return this.viewportToCanvas(n[0],n[1],e)},t.prototype.projectToViewport=function(t,e){var r=new n.Vector3(t[0],t[1],t[2]).project(e);return[r.x,r.y]},t.prototype.unprojectFromCanvas=function(t,e,r,n){var i=this.canvasToViewport(t,e,r);return this.unprojectFromViewport(i[0],i[1],n)},t.prototype.unprojectFromViewport=function(t,e,r){return new n.Vector3(t,e,1).unproject(r)},t.prototype.viewportToBasic=function(t,e,r,i){var o=new n.Vector3(t,e,1).unproject(i).toArray();return r.projectBasic(o)},t.prototype.viewportToCanvas=function(t,e,r){var n=this.containerToCanvas(r);return[n[0]*(t+1)/2,-n[1]*(e-1)/2]},t}();r.ViewportCoords=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{three:174}],305:[function(t,e,r){"use strict";var n=function(){function t(){}return t.prototype.createFilter=function(t){return new Function("node","return "+this._compile(t)+";")},t.prototype._compile=function(t){if(null==t||t.length<=1)return"true";var e=t[0];return"("+("=="===e?this._compileComparisonOp("===",t[1],t[2],!1):"!="===e?this._compileComparisonOp("!==",t[1],t[2],!1):">"===e||">="===e||"<"===e||"<="===e?this._compileComparisonOp(e,t[1],t[2],!0):"in"===e?this._compileInOp(t[1],t.slice(2)):"!in"===e?this._compileNegation(this._compileInOp(t[1],t.slice(2))):"all"===e?this._compileLogicalOp(t.slice(1),"&&"):"true")+")"},t.prototype._compare=function(t,e){return t<e?-1:t>e?1:0},t.prototype._compileComparisonOp=function(t,e,r,n){var i=this._compilePropertyReference(e),o=JSON.stringify(r);return(n?"typeof "+i+"===typeof "+o+"&&":"")+i+t+o},t.prototype._compileInOp=function(t,e){var r=this._compare;return JSON.stringify(e.sort(r))+".indexOf("+this._compilePropertyReference(t)+")!==-1"},t.prototype._compileLogicalOp=function(t,e){var r=this._compile.bind(this);return t.map(r).join(e)},t.prototype._compileNegation=function(t){return"!("+t+")"},t.prototype._compilePropertyReference=function(t){return"node["+JSON.stringify(t)+"]"},t}();r.FilterCreator=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],306:[function(t,e,r){"use strict";var n=t("rbush"),i=t("rxjs/Subject");t("rxjs/add/observable/from"),t("rxjs/add/operator/catch"),t("rxjs/add/operator/do"),t("rxjs/add/operator/finally"),t("rxjs/add/operator/map"),t("rxjs/add/operator/publish");var o=t("../Edge"),a=t("../Error"),s=t("../Graph"),c=function(){function t(t,e,r,a,c,u){this._apiV3=t,this._cachedNodes={},this._cachedNodeTiles={},this._cachedSpatialEdges={},this._cachedTiles={},this._cachingFill$={},this._cachingFull$={},this._cachingSequences$={},this._cachingSpatialArea$={},this._cachingTiles$={},this._changed$=new i.Subject,this._defaultAlt=2,this._edgeCalculator=null!=a?a:new o.EdgeCalculator,this._filterCreator=null!=c?c:new s.FilterCreator,this._filter=this._filterCreator.createFilter(void 0),this._graphCalculator=null!=r?r:new s.GraphCalculator,this._configuration=null!=u?u:{maxSequences:50,maxUnusedNodes:100,maxUnusedTiles:20},this._nodes={},this._nodeIndex=null!=e?e:n(16,[".lat",".lon",".lat",".lon"]),this._nodeIndexTiles={},this._nodeToTile={},this._preStored={},this._requiredNodeTiles={},this._requiredSpatialArea={},this._sequences={},this._tilePrecision=7,this._tileThreshold=20}return Object.defineProperty(t.prototype,"changed$",{get:function(){return this._changed$},enumerable:!0,configurable:!0}),t.prototype.cacheFill$=function(t){var e=this;if(t in this._cachingFull$)throw new a.GraphMapillaryError("Cannot fill node while caching full ("+t+").");if(!this.hasNode(t))throw new a.GraphMapillaryError("Cannot fill node that does not exist in graph ("+t+").");if(t in this._cachingFill$)return this._cachingFill$[t];var r=this.getNode(t);if(r.full)throw new a.GraphMapillaryError("Cannot fill node that is already full ("+t+").");return this._cachingFill$[t]=this._apiV3.imageByKeyFill$([t]).do(function(n){r.full||e._makeFull(r,n[t]),delete e._cachingFill$[t]}).map(function(t){return e}).finally(function(){t in e._cachingFill$&&delete e._cachingFill$[t],e._changed$.next(e)}).publish().refCount(),this._cachingFill$[t]},t.prototype.cacheFull$=function(t){var e=this;if(t in this._cachingFull$)return this._cachingFull$[t];if(this.hasNode(t))throw new a.GraphMapillaryError("Cannot cache full node that already exist in graph ("+t+").");return this._cachingFull$[t]=this._apiV3.imageByKeyFull$([t]).do(function(r){var n=r[t];if(e.hasNode(t)){var i=e.getNode(t);i.full||e._makeFull(i,n)}else{if(null==n.sequence||null==n.sequence.key)throw new a.GraphMapillaryError("Node has no sequence ("+t+").");var i=new s.Node(n);e._makeFull(i,n);var o=e._graphCalculator.encodeH(i.originalLatLon,e._tilePrecision);e._preStore(o,i),e._setNode(i),delete e._cachingFull$[t]}}).map(function(t){return e}).finally(function(){t in e._cachingFull$&&delete e._cachingFull$[t],e._changed$.next(e)}).publish().refCount(),this._cachingFull$[t]},t.prototype.cacheNodeSequence$=function(t){if(!this.hasNode(t))throw new a.GraphMapillaryError("Cannot cache sequence edges of node that does not exist in graph ("+t+").");var e=this.getNode(t);if(e.sequenceKey in this._sequences)throw new a.GraphMapillaryError("Sequence already cached ("+t+"), ("+e.sequenceKey+").");return this._cacheSequence$(e.sequenceKey)},t.prototype.cacheSequence$=function(t){if(t in this._sequences)throw new a.GraphMapillaryError("Sequence already cached ("+t+")");return this._cacheSequence$(t)},t.prototype.cacheSequenceEdges=function(t){var e=this.getNode(t);if(!(e.sequenceKey in this._sequences))throw new a.GraphMapillaryError("Sequence is not cached ("+t+"), ("+e.sequenceKey+")");var r=this._sequences[e.sequenceKey].sequence,n=this._edgeCalculator.computeSequenceEdges(e,r);e.cacheSequenceEdges(n)},t.prototype.cacheSpatialArea$=function(t){var e=this;if(!this.hasNode(t))throw new a.GraphMapillaryError("Cannot cache spatial area of node that does not exist in graph ("+t+").");if(t in this._cachedSpatialEdges)throw new a.GraphMapillaryError("Node already spatially cached ("+t+").");if(!(t in this._requiredSpatialArea))throw new a.GraphMapillaryError("Spatial area not determined ("+t+").");var r=this._requiredSpatialArea[t];if(0===Object.keys(r.cacheNodes).length)throw new a.GraphMapillaryError("Spatial nodes already cached ("+t+").");if(t in this._cachingSpatialArea$)return this._cachingSpatialArea$[t];for(var n=[];r.cacheKeys.length>0;)n.push(r.cacheKeys.splice(0,200));for(var i=n.length,o=[],s=this,c=0,u=n;c<u.length;c++){var h=u[c];!function(n){var a=s._apiV3.imageByKeyFill$(n).do(function(n){for(var o in n)if(n.hasOwnProperty(o)){var a=r.cacheNodes[o];if(a.full)delete r.cacheNodes[o];else{var s=n[o];e._makeFull(a,s),delete r.cacheNodes[o]}}0==--i&&delete e._cachingSpatialArea$[t]}).map(function(t){return e}).catch(function(o){for(var a=0,s=n;a<s.length;a++){var c=s[a];c in r.all&&delete r.all[c],c in r.cacheNodes&&delete r.cacheNodes[c]}throw 0==--i&&delete e._cachingSpatialArea$[t],o}).finally(function(){0===Object.keys(r.cacheNodes).length&&e._changed$.next(e)}).publish().refCount();o.push(a)}(h)}return this._cachingSpatialArea$[t]=o,o},t.prototype.cacheSpatialEdges=function(t){if(t in this._cachedSpatialEdges)throw new a.GraphMapillaryError("Spatial edges already cached ("+t+").");var e=this.getNode(t),r=this._sequences[e.sequenceKey].sequence,n=[],i=r.findPrevKey(e.key);null!=i&&n.push(i);var o=r.findNextKey(e.key);null!=o&&n.push(o);var s=this._requiredSpatialArea[t].all,c=[],u=this._filter;for(var h in s)if(s.hasOwnProperty(h)){var l=s[h];u(l)&&c.push(l)}var p=this._edgeCalculator.getPotentialEdges(e,c,n),f=this._edgeCalculator.computeStepEdges(e,p,i,o);f=f.concat(this._edgeCalculator.computeTurnEdges(e,p)),f=f.concat(this._edgeCalculator.computePanoEdges(e,p)),f=f.concat(this._edgeCalculator.computePerspectiveToPanoEdges(e,p)),f=f.concat(this._edgeCalculator.computeSimilarEdges(e,p)),e.cacheSpatialEdges(f),this._cachedSpatialEdges[t]=e,delete this._requiredSpatialArea[t],delete this._cachedNodeTiles[t]},t.prototype.cacheTiles$=function(t){var e=this;if(t in this._cachedNodeTiles)throw new a.GraphMapillaryError("Tiles already cached ("+t+").");if(t in this._cachedSpatialEdges)throw new a.GraphMapillaryError("Spatial edges already cached so tiles considered cached ("+t+").");if(!(t in this._requiredNodeTiles))throw new a.GraphMapillaryError("Tiles have not been determined ("+t+").");var r=this._requiredNodeTiles[t];if(0===r.cache.length&&0===r.caching.length)throw new a.GraphMapillaryError("Tiles already cached ("+t+").");if(!this.hasNode(t))throw new a.GraphMapillaryError("Cannot cache tiles of node that does not exist in graph ("+t+").");var n=r.cache.slice();r.caching=this._requiredNodeTiles[t].caching.concat(n),r.cache=[];for(var i=[],o=this,c=0,u=r.caching;c<u.length;c++){var h=u[c];!function(n){var a=null;n in o._cachingTiles$?a=o._cachingTiles$[n]:(a=o._apiV3.imagesByH$([n]).do(function(t){var r=t[n];if(!(n in e._cachedTiles)){e._nodeIndexTiles[n]=[],e._cachedTiles[n]={accessed:(new Date).getTime(),nodes:[]};var i=e._cachedTiles[n].nodes,o=e._removeFromPreStore(n);for(var a in r)if(r.hasOwnProperty(a)){var c=r[a];if(null==c)break;if(null!=c.sequence&&null!=c.sequence.key)if(null!=o&&c.key in o){var u=o[c.key];delete o[c.key],i.push(u);var h={lat:u.latLon.lat,lon:u.latLon.lon,node:u};e._nodeIndex.insert(h),e._nodeIndexTiles[n].push(h),e._nodeToTile[u.key]=n}else{var l=new s.Node(c);i.push(l);var p={lat:l.latLon.lat,lon:l.latLon.lon,node:l};e._nodeIndex.insert(p),e._nodeIndexTiles[n].push(p),e._nodeToTile[l.key]=n,e._setNode(l)}else console.warn("Sequence missing, discarding ("+c.key+")")}delete e._cachingTiles$[n]}}).map(function(t){return e}).catch(function(t){throw delete e._cachingTiles$[n],t}).publish().refCount(),o._cachingTiles$[n]=a),i.push(a.do(function(i){var o=r.caching.indexOf(n);o>-1&&r.caching.splice(o,1),0===r.caching.length&&0===r.cache.length&&(delete e._requiredNodeTiles[t],e._cachedNodeTiles[t]=!0)}).catch(function(i){var o=r.caching.indexOf(n);throw o>-1&&r.caching.splice(o,1),0===r.caching.length&&0===r.cache.length&&(delete e._requiredNodeTiles[t],e._cachedNodeTiles[t]=!0),i}).finally(function(){e._changed$.next(e)}).publish().refCount())}(h)}return i},t.prototype.initializeCache=function(t){if(t in this._cachedNodes)throw new a.GraphMapillaryError("Node already in cache ("+t+").");var e=this.getNode(t);e.initializeCache(new s.NodeCache);var r=(new Date).getTime();this._cachedNodes[t]={accessed:r,node:e},this._updateCachedTileAccess(t,r)},t.prototype.isCachingFill=function(t){return t in this._cachingFill$},t.prototype.isCachingFull=function(t){return t in this._cachingFull$},t.prototype.isCachingNodeSequence=function(t){return this.getNode(t).sequenceKey in this._cachingSequences$},t.prototype.isCachingSequence=function(t){return t in this._cachingSequences$},t.prototype.isCachingTiles=function(t){return t in this._requiredNodeTiles&&0===this._requiredNodeTiles[t].cache.length&&this._requiredNodeTiles[t].caching.length>0},t.prototype.hasInitializedCache=function(t){return t in this._cachedNodes},t.prototype.hasNode=function(t){var e=(new Date).getTime();return this._updateCachedNodeAccess(t,e),this._updateCachedTileAccess(t,e),t in this._nodes},t.prototype.hasNodeSequence=function(t){var e=this.getNode(t),r=e.sequenceKey,n=r in this._sequences;return n&&(this._sequences[r].accessed=(new Date).getTime()),n},t.prototype.hasSequence=function(t){var e=t in this._sequences;return e&&(this._sequences[t].accessed=(new Date).getTime()),e},t.prototype.hasSpatialArea=function(t){if(!this.hasNode(t))throw new a.GraphMapillaryError("Spatial area nodes cannot be determined if node not in graph ("+t+").");if(t in this._cachedSpatialEdges)return!0;if(t in this._requiredSpatialArea)return 0===Object.keys(this._requiredSpatialArea[t].cacheNodes).length;for(var e=this.getNode(t),r=this._graphCalculator.boundingBoxCorners(e.latLon,this._tileThreshold),n=this._nodeIndex.search({maxX:r[1].lat,maxY:r[1].lon,minX:r[0].lat,minY:r[0].lon}),i={all:{},cacheKeys:[],cacheNodes:{}},o=0,s=n;o<s.length;o++){var c=s[o];i.all[c.node.key]=c.node,c.node.full||(i.cacheKeys.push(c.node.key),i.cacheNodes[c.node.key]=c.node)}return this._requiredSpatialArea[t]=i,0===i.cacheKeys.length},t.prototype.hasTiles=function(t){var e=this;if(t in this._cachedNodeTiles)return!0;if(t in this._cachedSpatialEdges)return!0;if(!this.hasNode(t))throw new a.GraphMapillaryError("Node does not exist in graph ("+t+").");var r={cache:[],caching:[]};if(t in this._requiredNodeTiles)r=this._requiredNodeTiles[t];else{var n=this.getNode(t);r.cache=this._graphCalculator.encodeHs(n.latLon,this._tilePrecision,this._tileThreshold).filter(function(t){return!(t in e._cachedTiles)}),r.cache.length>0&&(this._requiredNodeTiles[t]=r)}return 0===r.cache.length&&0===r.caching.length},t.prototype.getNode=function(t){var e=(new Date).getTime();return this._updateCachedNodeAccess(t,e),this._updateCachedTileAccess(t,e),this._nodes[t]},t.prototype.getSequence=function(t){var e=this._sequences[t];return e.accessed=(new Date).getTime(),e.sequence},t.prototype.resetSpatialEdges=function(){for(var t=Object.keys(this._cachedSpatialEdges),e=0,r=t;e<r.length;e++){var n=r[e];this._cachedSpatialEdges[n].resetSpatialEdges(),delete this._cachedSpatialEdges[n]}},t.prototype.reset=function(t){for(var e=[],r=0,n=t;r<n.length;r++){var i=n[r];if(!this.hasNode(i))throw new Error("Node does not exist "+i);var o=this.getNode(i);o.resetSequenceEdges(),o.resetSpatialEdges(),e.push(o)}for(var a=0,s=Object.keys(this._cachedNodes);a<s.length;a++){var c=s[a];t.indexOf(c)===-1&&(this._cachedNodes[c].node.dispose(),delete this._cachedNodes[c])}this._cachedNodeTiles={},this._cachedSpatialEdges={},this._cachedTiles={},this._cachingFill$={},this._cachingFull$={},this._cachingSequences$={},this._cachingSpatialArea$={},this._cachingTiles$={},this._nodes={},this._nodeToTile={},this._preStored={};for(var u=0,h=e;u<h.length;u++){var o=h[u];this._nodes[o.key]=o;var l=this._graphCalculator.encodeH(o.originalLatLon,this._tilePrecision);this._preStore(l,o)}this._requiredNodeTiles={},this._requiredSpatialArea={},this._sequences={},this._nodeIndexTiles={},this._nodeIndex.clear()},t.prototype.setFilter=function(t){this._filter=this._filterCreator.createFilter(t)},t.prototype.uncache=function(t){var e={};this._addNewKeys(e,this._cachingFull$),this._addNewKeys(e,this._cachingFill$),this._addNewKeys(e,this._cachingTiles$),this._addNewKeys(e,this._cachingSpatialArea$),this._addNewKeys(e,this._requiredNodeTiles),this._addNewKeys(e,this._requiredSpatialArea);for(var r=0,n=t;r<n.length;r++){var i=n[r];i in e||(e[i]=!0)}var o={};for(var i in e)if(e.hasOwnProperty(i))for(var a=this._nodes[i],s=this._graphCalculator.encodeHs(a.latLon),c=0,u=s;c<u.length;c++){var h=u[c];h in o||(o[h]=!0)}var l=[];for(var p in this._cachedTiles)!this._cachedTiles.hasOwnProperty(p)||p in o||l.push([p,this._cachedTiles[p]]);for(var f=l.sort(function(t,e){return e[1].accessed-t[1].accessed}).slice(this._configuration.maxUnusedTiles).map(function(t){return t[0]}),d=0,m=f;d<m.length;d++){var v=m[d];this._uncacheTile(v)}var g=[];for(var i in this._cachedNodes)!this._cachedNodes.hasOwnProperty(i)||i in e||g.push(this._cachedNodes[i]);for(var y=g.sort(function(t,e){return e.accessed-t.accessed}).slice(this._configuration.maxUnusedNodes),b=0,_=y;b<_.length;b++){var x=_[b];x.node.uncache();var i=x.node.key;delete this._cachedNodes[i],i in this._cachedNodeTiles&&delete this._cachedNodeTiles[i],i in this._cachedSpatialEdges&&delete this._cachedSpatialEdges[i]}var w=[];for(var S in this._sequences)!this._sequences.hasOwnProperty(S)||S in this._cachingSequences$||w.push(this._sequences[S]);for(var M=w.sort(function(t,e){return e.accessed-t.accessed}).slice(this._configuration.maxSequences),E=0,T=M;E<T.length;E++){var C=T[E],S=C.sequence.key;delete this._sequences[S],C.sequence.dispose()}},t.prototype._addNewKeys=function(t,e){for(var r in e)e.hasOwnProperty(r)&&this.hasNode(r)&&(r in t||(t[r]=!0))},t.prototype._cacheSequence$=function(t){var e=this;return t in this._cachingSequences$?this._cachingSequences$[t]:(this._cachingSequences$[t]=this._apiV3.sequenceByKey$([t]).do(function(r){t in e._sequences||(e._sequences[t]={accessed:(new Date).getTime(),sequence:new s.Sequence(r[t])}),delete e._cachingSequences$[t]}).map(function(t){return e}).finally(function(){t in e._cachingSequences$&&delete e._cachingSequences$[t],e._changed$.next(e)}).publish().refCount(),this._cachingSequences$[t])},t.prototype._makeFull=function(t,e){null==e.calt&&(e.calt=this._defaultAlt),null==e.c_rotation&&(e.c_rotation=this._graphCalculator.rotationFromCompass(e.ca,e.orientation)),t.makeFull(e)},t.prototype._preStore=function(t,e){t in this._preStored||(this._preStored[t]={}),this._preStored[t][e.key]=e},t.prototype._removeFromPreStore=function(t){var e=null;return t in this._preStored&&(e=this._preStored[t],delete this._preStored[t]),e},t.prototype._setNode=function(t){var e=t.key;if(this.hasNode(e))throw new a.GraphMapillaryError("Node already exist ("+e+").");this._nodes[e]=t},t.prototype._uncacheTile=function(t){for(var e=0,r=this._cachedTiles[t].nodes;e<r.length;e++){var n=r[e],i=n.key;delete this._nodes[i],delete this._nodeToTile[i],i in this._cachedNodes&&delete this._cachedNodes[i],i in this._cachedNodeTiles&&delete this._cachedNodeTiles[i],i in this._cachedSpatialEdges&&delete this._cachedSpatialEdges[i],n.dispose()}for(var o=0,a=this._nodeIndexTiles[t];o<a.length;o++){var s=a[o];this._nodeIndex.remove(s)}delete this._nodeIndexTiles[t],delete this._cachedTiles[t]},t.prototype._updateCachedTileAccess=function(t,e){t in this._nodeToTile&&(this._cachedTiles[this._nodeToTile[t]].accessed=e)},t.prototype._updateCachedNodeAccess=function(t,e){t in this._cachedNodes&&(this._cachedNodes[t].accessed=e)},t}();r.Graph=c,Object.defineProperty(r,"__esModule",{value:!0}),r.default=c},{"../Edge":225,"../Error":226,"../Graph":228,rbush:24,"rxjs/Subject":33,"rxjs/add/observable/from":40,"rxjs/add/operator/catch":51,"rxjs/add/operator/do":58,"rxjs/add/operator/finally":61,"rxjs/add/operator/map":64,"rxjs/add/operator/publish":70}],307:[function(t,e,r){"use strict";var n=t("latlon-geohash"),i=t("three"),o=t("../Geo"),a=function(){function t(){}return t}();a.n="n",a.nw="nw",a.w="w",a.sw="sw",a.s="s",a.se="se",a.e="e",a.ne="ne";var s=function(){function t(t){this._geoCoords=null!=t?t:new o.GeoCoords}return t.prototype.encodeH=function(t,e){return void 0===e&&(e=7),n.encode(t.lat,t.lon,e)},t.prototype.encodeHs=function(t,e,r){void 0===e&&(e=7),void 0===r&&(r=20);var i=n.encode(t.lat,t.lon,e),o=n.bounds(i),s=o.ne,c=o.sw,u=n.neighbours(i),h=[0,0,0],l=this._geoCoords.geodeticToEnu(s.lat,s.lon,0,c.lat,c.lon,0),p=this._geoCoords.geodeticToEnu(t.lat,t.lon,0,c.lat,c.lon,0),f=p[0]-h[0],d=l[0]-p[0],m=p[1]-h[1],v=l[1]-p[1],g=f<r,y=d<r,b=m<r,_=v<r,x=[i];return _&&x.push(u[a.n]),_&&g&&x.push(u[a.nw]),g&&x.push(u[a.w]),g&&b&&x.push(u[a.sw]),b&&x.push(u[a.s]),b&&y&&x.push(u[a.se]),y&&x.push(u[a.e]),y&&_&&x.push(u[a.ne]),x},t.prototype.boundingBoxCorners=function(t,e){var r=this._geoCoords.enuToGeodetic(-e,-e,0,t.lat,t.lon,0),n=this._geoCoords.enuToGeodetic(e,e,0,t.lat,t.lon,0);return[{lat:r[0],lon:r[1]},{lat:n[0],lon:n[1]}]},t.prototype.rotationFromCompass=function(t,e){var r=0,n=0,o=0;switch(e){case 1:r=Math.PI/2;break;case 3:r=-Math.PI/2,o=Math.PI;break;case 6:n=-Math.PI/2,o=-Math.PI/2;break;case 8:n=Math.PI/2,o=Math.PI/2}var a=(new i.Matrix4).makeRotationZ(o),s=new i.Euler(r,n,t*Math.PI/180,"XYZ"),c=(new i.Matrix4).makeRotationFromEuler(s),u=(new i.Vector4).setAxisAngleFromRotationMatrix(c.multiply(a));return u.multiplyScalar(u.w).toArray().slice(0,3)},t}();r.GraphCalculator=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../Geo":227,"latlon-geohash":20,three:174}],308:[function(t,e,r){"use strict";var n=t("rxjs/Observable"),i=t("rxjs/Subject");t("rxjs/add/operator/catch"),t("rxjs/add/operator/concat"),t("rxjs/add/operator/do"),t("rxjs/add/operator/expand"),t("rxjs/add/operator/finally"),t("rxjs/add/operator/first"),t("rxjs/add/operator/last"),t("rxjs/add/operator/map"),t("rxjs/add/operator/mergeMap"),t("rxjs/add/operator/publishReplay");var o=function(){function t(t,e){this._graph$=n.Observable.of(t).concat(t.changed$).publishReplay(1).refCount(),this._graph$.subscribe(function(){}),this._imageLoadingService=e,this._firstGraphSubjects$=[],this._initializeCacheSubscriptions=[],this._sequenceSubscriptions=[],this._spatialSubscriptions=[]}return t.prototype.cacheNode$=function(t){var e=this,r=new i.Subject;this._firstGraphSubjects$.push(r);var o=r.publishReplay(1).refCount(),a=o.map(function(e){return e.getNode(t)}).mergeMap(function(t){return t.assetsCached?n.Observable.of(t):t.cacheAssets$()}).publishReplay(1).refCount();a.subscribe(function(t){e._imageLoadingService.loadnode$.next(t)},function(e){console.error("Failed to cache node ("+t+")",e)});var s=this._graph$.first().mergeMap(function(e){return e.isCachingFull(t)||!e.hasNode(t)?e.cacheFull$(t):e.isCachingFill(t)||!e.getNode(t).full?e.cacheFill$(t):n.Observable.of(e)}).do(function(e){e.hasInitializedCache(t)||e.initializeCache(t)}).finally(function(){null!=s&&(e._removeFromArray(s,e._initializeCacheSubscriptions),e._removeFromArray(r,e._firstGraphSubjects$))}).subscribe(function(t){r.next(t),r.complete()},function(t){r.error(t)});s.closed||this._initializeCacheSubscriptions.push(s);var c=o.mergeMap(function(e){return e.isCachingNodeSequence(t)||!e.hasNodeSequence(t)?e.cacheNodeSequence$(t):n.Observable.of(e)}).do(function(e){e.getNode(t).sequenceEdges.cached||e.cacheSequenceEdges(t)}).finally(function(){null!=c&&e._removeFromArray(c,e._sequenceSubscriptions)}).subscribe(function(t){},function(e){console.error("Failed to cache sequence edges ("+t+").",e)});c.closed||this._sequenceSubscriptions.push(c);var u=o.expand(function(e){return e.hasTiles(t)?n.Observable.empty():n.Observable.from(e.cacheTiles$(t)).mergeMap(function(e){return e.mergeMap(function(e){return e.isCachingTiles(t)?n.Observable.empty():n.Observable.of(e)}).catch(function(e,r){return console.error("Failed to cache tile data ("+t+").",e),n.Observable.empty()})})}).last().mergeMap(function(e){return e.hasSpatialArea(t)?n.Observable.of(e):n.Observable.from(e.cacheSpatialArea$(t)).mergeMap(function(e){return e.catch(function(e,r){return console.error("Failed to cache spatial nodes ("+t+").",e),n.Observable.empty()})})}).last().mergeMap(function(e){return e.hasNodeSequence(t)?n.Observable.of(e):e.cacheNodeSequence$(t)}).do(function(e){e.getNode(t).spatialEdges.cached||e.cacheSpatialEdges(t)}).finally(function(){null!=u&&e._removeFromArray(u,e._spatialSubscriptions)}).subscribe(function(t){},function(e){console.error("Failed to cache spatial edges ("+t+").",e)});return u.closed||this._spatialSubscriptions.push(u),a.first(function(t){return t.assetsCached})},t.prototype.cacheSequence$=function(t){return this._graph$.first().mergeMap(function(e){return e.isCachingSequence(t)||!e.hasSequence(t)?e.cacheSequence$(t):n.Observable.of(e)}).map(function(e){return e.getSequence(t)})},t.prototype.setFilter$=function(t){return this._resetSubscriptions(this._spatialSubscriptions),this._graph$.first().do(function(e){e.resetSpatialEdges(),e.setFilter(t)})},t.prototype.reset$=function(t){return this._abortSubjects(this._firstGraphSubjects$),this._resetSubscriptions(this._initializeCacheSubscriptions),this._resetSubscriptions(this._sequenceSubscriptions),this._resetSubscriptions(this._spatialSubscriptions),this._graph$.first().do(function(e){e.reset(t)})},t.prototype.uncache$=function(t){return this._graph$.first().do(function(e){e.uncache(t)})},t.prototype._abortSubjects=function(t){for(var e=0,r=t.slice();e<r.length;e++){var n=r[e];this._removeFromArray(n,t),n.error(new Error("Cache node request was aborted."))}},t.prototype._removeFromArray=function(t,e){var r=e.indexOf(t);r!==-1&&e.splice(r,1)},t.prototype._resetSubscriptions=function(t){for(var e=0,r=t.slice();e<r.length;e++){var n=r[e];this._removeFromArray(n,t),n.closed||n.unsubscribe()}},t}();r.GraphService=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/operator/catch":51,"rxjs/add/operator/concat":53,"rxjs/add/operator/do":58,"rxjs/add/operator/expand":59,"rxjs/add/operator/finally":61,"rxjs/add/operator/first":62,"rxjs/add/operator/last":63,"rxjs/add/operator/map":64,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/publishReplay":71}],309:[function(t,e,r){"use strict";var n=t("rxjs/Subject"),i=function(){function t(){this._loadnode$=new n.Subject,this._loadstatus$=this._loadnode$.scan(function(t,e){return t[e.key]=e.loadStatus,t},{}).publishReplay(1).refCount(),this._loadstatus$.subscribe(function(){})}return Object.defineProperty(t.prototype,"loadnode$",{get:function(){return this._loadnode$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"loadstatus$",{get:function(){return this._loadstatus$},enumerable:!0,configurable:!0}),t}();r.ImageLoadingService=i},{"rxjs/Subject":33}],310:[function(t,e,r){"use strict";var n=t("pbf"),i=function(){function t(){}return t.read=function(e){return new n(e).readFields(t._readMeshField,{faces:[],vertices:[]})},t._readMeshField=function(t,e,r){1===t?e.vertices.push(r.readFloat()):2===t&&e.faces.push(r.readVarint())},t}();r.MeshReader=i},{pbf:22}],311:[function(t,e,r){"use strict";t("rxjs/add/observable/combineLatest"),t("rxjs/add/operator/map");var n=function(){function t(t){this._cache=null,this._core=t,this._fill=null}return Object.defineProperty(t.prototype,"assetsCached",{get:function(){return null!=this._core&&null!=this._fill&&null!=this._cache&&null!=this._cache.image&&null!=this._cache.mesh},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"alt",{get:function(){return this._fill.calt},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"ca",{get:function(){return null!=this._fill.cca?this._fill.cca:this._fill.ca},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"capturedAt",{get:function(){return this._fill.captured_at},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"computedCA",{get:function(){return this._fill.cca},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"computedLatLon",{get:function(){return this._core.cl},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"focal",{get:function(){return this._fill.cfocal},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"full",{get:function(){return null!=this._fill},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fullPano",{get:function(){return null!=this._fill.gpano&&0===this._fill.gpano.CroppedAreaLeftPixels&&0===this._fill.gpano.CroppedAreaTopPixels&&this._fill.gpano.CroppedAreaImageWidthPixels===this._fill.gpano.FullPanoWidthPixels&&this._fill.gpano.CroppedAreaImageHeightPixels===this._fill.gpano.FullPanoHeightPixels},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"gpano",{get:function(){return this._fill.gpano},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"height",{get:function(){return this._fill.height},enumerable:!0,configurable:!0}),
-Object.defineProperty(t.prototype,"image",{get:function(){return this._cache.image},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"key",{get:function(){return this._core.key},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"latLon",{get:function(){return null!=this._core.cl?this._core.cl:this._core.l},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"loadStatus",{get:function(){return this._cache.loadStatus},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"merged",{get:function(){return null!=this._fill&&null!=this._fill.merge_version&&this._fill.merge_version>0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mergeCC",{get:function(){return this._fill.merge_cc},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mergeVersion",{get:function(){return this._fill.merge_version},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mesh",{get:function(){return this._cache.mesh},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"orientation",{get:function(){return this._fill.orientation},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"originalCA",{get:function(){return this._fill.ca},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"originalLatLon",{get:function(){return this._core.l},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"pano",{get:function(){return null!=this._fill.gpano&&null!=this._fill.gpano.FullPanoWidthPixels},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"projectKey",{get:function(){return null!=this._fill.project?this._fill.project.key:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rotation",{get:function(){return this._fill.c_rotation},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"scale",{get:function(){return this._fill.atomic_scale},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"sequenceKey",{get:function(){return this._core.sequence.key},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"sequenceEdges",{get:function(){return this._cache.sequenceEdges},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"sequenceEdges$",{get:function(){return this._cache.sequenceEdges$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"spatialEdges",{get:function(){return this._cache.spatialEdges},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"spatialEdges$",{get:function(){return this._cache.spatialEdges$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"userKey",{get:function(){return this._fill.user.key},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"username",{get:function(){return this._fill.user.username},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"width",{get:function(){return this._fill.width},enumerable:!0,configurable:!0}),t.prototype.cacheAssets$=function(){var t=this;return this._cache.cacheAssets$(this.key,this.pano,this.merged).map(function(e){return t})},t.prototype.cacheImage$=function(t){var e=this;return this._cache.cacheImage$(this.key,t).map(function(t){return e})},t.prototype.cacheSequenceEdges=function(t){this._cache.cacheSequenceEdges(t)},t.prototype.cacheSpatialEdges=function(t){this._cache.cacheSpatialEdges(t)},t.prototype.dispose=function(){null!=this._cache&&(this._cache.dispose(),this._cache=null),this._core=null,this._fill=null},t.prototype.initializeCache=function(t){if(null!=this._cache)throw new Error("Node cache already initialized ("+this.key+").");this._cache=t},t.prototype.makeFull=function(t){if(null==t)throw new Error("Fill can not be null.");this._fill=t},t.prototype.resetSequenceEdges=function(){this._cache.resetSequenceEdges()},t.prototype.resetSpatialEdges=function(){this._cache.resetSpatialEdges()},t.prototype.uncache=function(){null!=this._cache&&(this._cache.dispose(),this._cache=null)},t}();r.Node=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/map":64}],312:[function(t,e,r){(function(e){"use strict";var n=t("rxjs/Subject"),i=t("rxjs/Observable");t("rxjs/add/observable/combineLatest"),t("rxjs/add/operator/publishReplay");var o=t("../Graph"),a=t("../Utils"),s=function(){function t(){this._disposed=!1,this._image=null,this._loadStatus={loaded:0,total:0},this._mesh=null,this._sequenceEdges={cached:!1,edges:[]},this._spatialEdges={cached:!1,edges:[]},this._sequenceEdgesChanged$=new n.Subject,this._sequenceEdges$=this._sequenceEdgesChanged$.startWith(this._sequenceEdges).publishReplay(1).refCount(),this._sequenceEdgesSubscription=this._sequenceEdges$.subscribe(function(){}),this._spatialEdgesChanged$=new n.Subject,this._spatialEdges$=this._spatialEdgesChanged$.startWith(this._spatialEdges).publishReplay(1).refCount(),this._spatialEdgesSubscription=this._spatialEdges$.subscribe(function(){}),this._cachingAssets$=null}return Object.defineProperty(t.prototype,"image",{get:function(){return this._image},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"loadStatus",{get:function(){return this._loadStatus},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mesh",{get:function(){return this._mesh},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"sequenceEdges",{get:function(){return this._sequenceEdges},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"sequenceEdges$",{get:function(){return this._sequenceEdges$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"spatialEdges",{get:function(){return this._spatialEdges},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"spatialEdges$",{get:function(){return this._spatialEdges$},enumerable:!0,configurable:!0}),t.prototype.cacheAssets$=function(t,e,r){var n=this;if(null!=this._cachingAssets$)return this._cachingAssets$;var o=e?a.Settings.basePanoramaSize:a.Settings.baseImageSize;return this._cachingAssets$=i.Observable.combineLatest(this._cacheImage$(t,o),this._cacheMesh$(t,r),function(t,e){return n._loadStatus.loaded=0,n._loadStatus.total=0,e&&(n._mesh=e.object,n._loadStatus.loaded+=e.loaded.loaded,n._loadStatus.total+=e.loaded.total),t&&(n._image=t.object,n._loadStatus.loaded+=t.loaded.loaded,n._loadStatus.total+=t.loaded.total),n}).finally(function(){n._cachingAssets$=null}).publishReplay(1).refCount(),this._cachingAssets$},t.prototype.cacheImage$=function(t,e){var r=this;return null!=this._image&&e<=Math.max(this._image.width,this._image.height)?i.Observable.of(this):this._cacheImage$(t,e).first(function(t){return null!=t.object}).do(function(t){r._disposeImage(),r._image=t.object}).map(function(t){return r})},t.prototype.cacheSequenceEdges=function(t){this._sequenceEdges={cached:!0,edges:t},this._sequenceEdgesChanged$.next(this._sequenceEdges)},t.prototype.cacheSpatialEdges=function(t){this._spatialEdges={cached:!0,edges:t},this._spatialEdgesChanged$.next(this._spatialEdges)},t.prototype.dispose=function(){this._sequenceEdgesSubscription.unsubscribe(),this._spatialEdgesSubscription.unsubscribe(),this._disposeImage(),this._mesh=null,this._loadStatus.loaded=0,this._loadStatus.total=0,this._sequenceEdges={cached:!1,edges:[]},this._spatialEdges={cached:!1,edges:[]},this._sequenceEdgesChanged$.next(this._sequenceEdges),this._spatialEdgesChanged$.next(this._spatialEdges),this._disposed=!0,null!=this._imageRequest&&this._imageRequest.abort(),null!=this._meshRequest&&this._meshRequest.abort()},t.prototype.resetSequenceEdges=function(){this._sequenceEdges={cached:!1,edges:[]},this._sequenceEdgesChanged$.next(this._sequenceEdges)},t.prototype.resetSpatialEdges=function(){this._spatialEdges={cached:!1,edges:[]},this._spatialEdgesChanged$.next(this._spatialEdges)},t.prototype._cacheImage$=function(t,e){var r=this;return i.Observable.create(function(n){var i=new XMLHttpRequest;i.open("GET",a.Urls.thumbnail(t,e),!0),i.responseType="arraybuffer",i.timeout=15e3,i.onload=function(e){if(200!==i.status)return r._imageRequest=null,void n.error(new Error("Failed to fetch image ("+t+"). Status: "+i.status+", "+i.statusText));var o=new Image;o.crossOrigin="Anonymous",o.onload=function(i){if(r._imageRequest=null,r._disposed)return window.URL.revokeObjectURL(o.src),void n.error(new Error("Image load was aborted ("+t+")"));n.next({loaded:{loaded:e.loaded,total:e.total},object:o}),n.complete()},o.onerror=function(e){r._imageRequest=null,n.error(new Error("Failed to load image ("+t+")"))};var a=new Blob([i.response]);o.src=window.URL.createObjectURL(a)},i.onprogress=function(t){r._disposed||n.next({loaded:{loaded:t.loaded,total:t.total},object:null})},i.onerror=function(e){r._imageRequest=null,n.error(new Error("Failed to fetch image ("+t+")"))},i.ontimeout=function(e){r._imageRequest=null,n.error(new Error("Image request timed out ("+t+")"))},i.onabort=function(e){r._imageRequest=null,n.error(new Error("Image request was aborted ("+t+")"))},r._imageRequest=i,i.send(null)})},t.prototype._cacheMesh$=function(t,r){var n=this;return i.Observable.create(function(i){if(!r)return i.next(n._createEmptyMeshLoadStatus()),void i.complete();var s=new XMLHttpRequest;s.open("GET",a.Urls.protoMesh(t),!0),s.responseType="arraybuffer",s.timeout=15e3,s.onload=function(t){if(n._meshRequest=null,!n._disposed){var r=200===s.status?o.MeshReader.read(new e(s.response)):{faces:[],vertices:[]};i.next({loaded:{loaded:t.loaded,total:t.total},object:r}),i.complete()}},s.onprogress=function(t){n._disposed||i.next({loaded:{loaded:t.loaded,total:t.total},object:null})},s.onerror=function(e){n._meshRequest=null,console.error("Failed to cache mesh ("+t+")"),i.next(n._createEmptyMeshLoadStatus()),i.complete()},s.ontimeout=function(e){n._meshRequest=null,console.error("Mesh request timed out ("+t+")"),i.next(n._createEmptyMeshLoadStatus()),i.complete()},s.onabort=function(e){n._meshRequest=null,i.error(new Error("Mesh request was aborted ("+t+")"))},n._meshRequest=s,s.send(null)})},t.prototype._createEmptyMeshLoadStatus=function(){return{loaded:{loaded:0,total:0},object:{faces:[],vertices:[]}}},t.prototype._disposeImage=function(){null!=this._image&&window.URL.revokeObjectURL(this._image.src),this._image=null},t}();r.NodeCache=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s}).call(this,t("buffer").Buffer)},{"../Graph":228,"../Utils":233,buffer:5,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/publishReplay":71}],313:[function(t,e,r){"use strict";var n=t("underscore"),i=function(){function t(t){this._key=t.key,this._keys=t.keys}return Object.defineProperty(t.prototype,"key",{get:function(){return this._key},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"keys",{get:function(){return this._keys},enumerable:!0,configurable:!0}),t.prototype.dispose=function(){this._key=null,this._keys=null},t.prototype.findNextKey=function(t){var e=n.indexOf(this._keys,t);return e+1>=this._keys.length||e===-1?null:this._keys[e+1]},t.prototype.findPrevKey=function(t){var e=n.indexOf(this._keys,t);return 0===e||e===-1?null:this._keys[e-1]},t}();r.Sequence=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{underscore:175}],314:[function(t,e,r){"use strict";var n=t("three"),i=t("../../Edge"),o=t("../../Error"),a=t("../../Geo"),s=function(){function t(t,e,r){this._spatial=new a.Spatial,this._geoCoords=new a.GeoCoords,this._settings=null!=t?t:new i.EdgeCalculatorSettings,this._directions=null!=e?e:new i.EdgeCalculatorDirections,this._coefficients=null!=r?r:new i.EdgeCalculatorCoefficients}return t.prototype.getPotentialEdges=function(t,e,r){if(!t.full)throw new o.ArgumentMapillaryError("Node has to be full.");if(!t.merged)return[];for(var i=this._spatial.viewingDirection(t.rotation),a=this._spatial.angleToPlane(i.toArray(),[0,0,1]),s=[],c=0,u=e;c<u.length;c++){var h=u[c];if(h.merged&&h.key!==t.key){var l=this._geoCoords.geodeticToEnu(h.latLon.lat,h.latLon.lon,h.alt,t.latLon.lat,t.latLon.lon,t.alt),p=new n.Vector3(l[0],l[1],l[2]),f=p.length();if(!(f>this._settings.maxDistance&&r.indexOf(h.key)<0)){var d=this._spatial.angleBetweenVector2(i.x,i.y,p.x,p.y),m=this._spatial.angleToPlane(p.toArray(),[0,0,1]),v=this._spatial.viewingDirection(h.rotation),g=this._spatial.angleBetweenVector2(i.x,i.y,v.x,v.y),y=this._spatial.angleToPlane(v.toArray(),[0,0,1]),b=y-a,_=this._spatial.relativeRotationAngle(t.rotation,h.rotation),x=this._spatial.angleBetweenVector2(1,0,p.x,p.y),w=null!=h.sequenceKey&&null!=t.sequenceKey&&h.sequenceKey===t.sequenceKey,S=null==h.mergeCC&&null==t.mergeCC||h.mergeCC===t.mergeCC,M=h.userKey===t.userKey,E={capturedAt:h.capturedAt,directionChange:g,distance:f,fullPano:h.fullPano,key:h.key,motionChange:d,rotation:_,sameMergeCC:S,sameSequence:w,sameUser:M,sequenceKey:h.sequenceKey,verticalDirectionChange:b,verticalMotion:m,worldMotionAzimuth:x};s.push(E)}}}return s},t.prototype.computeSequenceEdges=function(t,e){if(!t.full)throw new o.ArgumentMapillaryError("Node has to be full.");if(t.sequenceKey!==e.key)throw new o.ArgumentMapillaryError("Node and sequence does not correspond.");var r=[],n=e.findNextKey(t.key);null!=n&&r.push({data:{direction:i.EdgeDirection.Next,worldMotionAzimuth:Number.NaN},from:t.key,to:n});var a=e.findPrevKey(t.key);return null!=a&&r.push({data:{direction:i.EdgeDirection.Prev,worldMotionAzimuth:Number.NaN},from:t.key,to:a}),r},t.prototype.computeSimilarEdges=function(t,e){var r=this;if(!t.full)throw new o.ArgumentMapillaryError("Node has to be full.");for(var n=t.fullPano,a={},s=0,c=e;s<c.length;s++){var u=c[s];if(null!=u.sequenceKey&&(!u.sameSequence&&u.sameMergeCC)){if(n){if(!u.fullPano)continue}else if(!u.fullPano&&Math.abs(u.directionChange)>this._settings.similarMaxDirectionChange)continue;u.distance>this._settings.similarMaxDistance||u.sameUser&&Math.abs(u.capturedAt-t.capturedAt)<this._settings.similarMinTimeDifference||(null==a[u.sequenceKey]&&(a[u.sequenceKey]=[]),a[u.sequenceKey].push(u))}}var h=[],l=t.fullPano?function(t){return t.distance}:function(t){return r._coefficients.similarDistance*t.distance+r._coefficients.similarRotation*t.rotation};for(var p in a)if(a.hasOwnProperty(p)){for(var f=Number.MAX_VALUE,d=null,m=0,v=a[p];m<v.length;m++){var u=v[m],g=l(u);g<f&&(f=g,d=u)}null!=d&&h.push(d)}return h.map(function(e){return{data:{direction:i.EdgeDirection.Similar,worldMotionAzimuth:e.worldMotionAzimuth},from:t.key,to:e.key}})},t.prototype.computeStepEdges=function(t,e,r,n){if(!t.full)throw new o.ArgumentMapillaryError("Node has to be full.");var i=[];if(t.fullPano)return i;for(var a in this._directions.steps)if(this._directions.steps.hasOwnProperty(a)){for(var s=this._directions.steps[a],c=Number.MAX_VALUE,u=null,h=null,l=0,p=e;l<p.length;l++){var f=p[l];if(!f.fullPano&&!(Math.abs(f.directionChange)>this._settings.stepMaxDirectionChange)){var d=this._spatial.angleDifference(s.motionChange,f.motionChange),m=this._spatial.angleDifference(f.directionChange,d),v=Math.max(Math.abs(d),Math.abs(m));if(!(Math.abs(v)>this._settings.stepMaxDrift)){var g=f.key;if(!s.useFallback||g!==r&&g!==n||(h=f),!(f.distance>this._settings.stepMaxDistance)){d=Math.sqrt(d*d+f.verticalMotion*f.verticalMotion);var y=this._coefficients.stepPreferredDistance*Math.abs(f.distance-this._settings.stepPreferredDistance)/this._settings.stepMaxDistance+this._coefficients.stepMotion*d/this._settings.stepMaxDrift+this._coefficients.stepRotation*f.rotation/this._settings.stepMaxDirectionChange+this._coefficients.stepSequencePenalty*(f.sameSequence?0:1)+this._coefficients.stepMergeCCPenalty*(f.sameMergeCC?0:1);y<c&&(c=y,u=f)}}}}u=null==u?h:u,null!=u&&i.push({data:{direction:s.direction,worldMotionAzimuth:u.worldMotionAzimuth},from:t.key,to:u.key})}return i},t.prototype.computeTurnEdges=function(t,e){if(!t.full)throw new o.ArgumentMapillaryError("Node has to be full.");var r=[];if(t.fullPano)return r;for(var n in this._directions.turns)if(this._directions.turns.hasOwnProperty(n)){for(var a=this._directions.turns[n],s=Number.MAX_VALUE,c=null,u=0,h=e;u<h.length;u++){var l=h[u];if(!l.fullPano&&!(l.distance>this._settings.turnMaxDistance)){var p=a.direction!==i.EdgeDirection.TurnU&&l.distance<this._settings.turnMaxRigDistance&&Math.abs(l.directionChange)>this._settings.turnMinRigDirectionChange,f=this._spatial.angleDifference(a.directionChange,l.directionChange),d=void 0;if(p&&l.directionChange*a.directionChange>0&&Math.abs(l.directionChange)<Math.abs(a.directionChange))d=-Math.PI/2+Math.abs(l.directionChange);else{if(Math.abs(f)>this._settings.turnMaxDirectionChange)continue;var m=a.motionChange?this._spatial.angleDifference(a.motionChange,l.motionChange):0;m=Math.sqrt(m*m+l.verticalMotion*l.verticalMotion),d=this._coefficients.turnDistance*l.distance/this._settings.turnMaxDistance+this._coefficients.turnMotion*m/Math.PI+this._coefficients.turnSequencePenalty*(l.sameSequence?0:1)+this._coefficients.turnMergeCCPenalty*(l.sameMergeCC?0:1)}d<s&&(s=d,c=l)}}null!=c&&r.push({data:{direction:a.direction,worldMotionAzimuth:c.worldMotionAzimuth},from:t.key,to:c.key})}return r},t.prototype.computePerspectiveToPanoEdges=function(t,e){if(!t.full)throw new o.ArgumentMapillaryError("Node has to be full.");if(t.fullPano)return[];for(var r=Number.MAX_VALUE,n=null,a=0,s=e;a<s.length;a++){var c=s[a];if(c.fullPano){var u=this._coefficients.panoPreferredDistance*Math.abs(c.distance-this._settings.panoPreferredDistance)/this._settings.panoMaxDistance+this._coefficients.panoMotion*Math.abs(c.motionChange)/Math.PI+this._coefficients.panoMergeCCPenalty*(c.sameMergeCC?0:1);u<r&&(r=u,n=c)}}return null==n?[]:[{data:{direction:i.EdgeDirection.Pano,worldMotionAzimuth:n.worldMotionAzimuth},from:t.key,to:n.key}]},t.prototype.computePanoEdges=function(t,e){if(!t.full)throw new o.ArgumentMapillaryError("Node has to be full.");if(!t.fullPano)return[];for(var r=[],n=[],a=[],s=0,c=e;s<c.length;s++){var u=c[s];if(!(u.distance>this._settings.panoMaxDistance))if(u.fullPano){if(u.distance<this._settings.panoMinDistance)continue;n.push(u)}else for(var h in this._directions.panos)if(this._directions.panos.hasOwnProperty(h)){var l=this._directions.panos[h],p=this._spatial.angleDifference(u.directionChange,u.motionChange),f=this._spatial.angleDifference(l.directionChange,p);if(!(Math.abs(f)>this._settings.panoMaxStepTurnChange)){a.push([l.direction,u]);break}}}for(var d=Math.PI/this._settings.panoMaxItems,m=[],v=[],g=0;g<this._settings.panoMaxItems;g++){for(var y=g/this._settings.panoMaxItems*2*Math.PI,b=Number.MAX_VALUE,_=null,x=0,w=n;x<w.length;x++){var u=w[x],S=this._spatial.angleDifference(y,u.motionChange);if(!(Math.abs(S)>d)){for(var M=Number.MAX_VALUE,E=0,T=m;E<T.length;E++){var C=T[E],O=Math.abs(this._spatial.angleDifference(C,u.motionChange));O<M&&(M=O)}if(!(M<=d)){var P=this._coefficients.panoPreferredDistance*Math.abs(u.distance-this._settings.panoPreferredDistance)/this._settings.panoMaxDistance+this._coefficients.panoMotion*Math.abs(S)/d+this._coefficients.panoSequencePenalty*(u.sameSequence?0:1)+this._coefficients.panoMergeCCPenalty*(u.sameMergeCC?0:1);P<b&&(b=P,_=u)}}}null!=_?(m.push(_.motionChange),r.push({data:{direction:i.EdgeDirection.Pano,worldMotionAzimuth:_.worldMotionAzimuth},from:t.key,to:_.key})):v.push(y)}var A={};A[i.EdgeDirection.Pano]=m,A[i.EdgeDirection.StepForward]=[],A[i.EdgeDirection.StepLeft]=[],A[i.EdgeDirection.StepBackward]=[],A[i.EdgeDirection.StepRight]=[];for(var j=0,R=v;j<R.length;j++){var L=R[j],N=[];for(var h in this._directions.panos)if(this._directions.panos.hasOwnProperty(h)){for(var l=this._directions.panos[h],I=A[i.EdgeDirection.Pano].concat(A[l.direction]).concat(A[l.prev]).concat(A[l.next]),b=Number.MAX_VALUE,_=null,D=0,k=a;D<k.length;D++){var u=k[D];if(u[0]===l.direction){var F=this._spatial.angleDifference(L,u[1].motionChange);if(!(Math.abs(F)>d)){for(var U=Number.MAX_VALUE,B=0,z=I;B<z.length;B++){var C=z[B],M=Math.abs(this._spatial.angleDifference(C,u[1].motionChange));M<U&&(U=M)}if(!(U<=d)){var P=this._coefficients.panoPreferredDistance*Math.abs(u[1].distance-this._settings.panoPreferredDistance)/this._settings.panoMaxDistance+this._coefficients.panoMotion*Math.abs(F)/d+this._coefficients.panoMergeCCPenalty*(u[1].sameMergeCC?0:1);P<b&&(b=P,_=u)}}}}null!=_&&(N.push(_),r.push({data:{direction:_[0],worldMotionAzimuth:_[1].worldMotionAzimuth},from:t.key,to:_[1].key}))}for(var $=0,G=N;$<G.length;$++){var V=G[$];A[V[0]].push(V[1].motionChange)}}return r},t}();r.EdgeCalculator=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../../Edge":225,"../../Error":226,"../../Geo":227,three:174}],315:[function(t,e,r){"use strict";var n=function(){function t(){this.panoPreferredDistance=2,this.panoMotion=2,this.panoSequencePenalty=1,this.panoMergeCCPenalty=4,this.stepPreferredDistance=4,this.stepMotion=3,this.stepRotation=4,this.stepSequencePenalty=2,this.stepMergeCCPenalty=6,this.similarDistance=2,this.similarRotation=3,this.turnDistance=4,this.turnMotion=2,this.turnSequencePenalty=1,this.turnMergeCCPenalty=4}return t}();r.EdgeCalculatorCoefficients=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],316:[function(t,e,r){"use strict";var n=t("../../Edge"),i=function(){function t(){this.steps={},this.turns={},this.panos={},this.steps[n.EdgeDirection.StepForward]={direction:n.EdgeDirection.StepForward,motionChange:0,useFallback:!0},this.steps[n.EdgeDirection.StepBackward]={direction:n.EdgeDirection.StepBackward,motionChange:Math.PI,useFallback:!0},this.steps[n.EdgeDirection.StepLeft]={direction:n.EdgeDirection.StepLeft,motionChange:Math.PI/2,useFallback:!1},this.steps[n.EdgeDirection.StepRight]={direction:n.EdgeDirection.StepRight,motionChange:-Math.PI/2,useFallback:!1},this.turns[n.EdgeDirection.TurnLeft]={direction:n.EdgeDirection.TurnLeft,directionChange:Math.PI/2,motionChange:Math.PI/4},this.turns[n.EdgeDirection.TurnRight]={direction:n.EdgeDirection.TurnRight,directionChange:-Math.PI/2,motionChange:-Math.PI/4},this.turns[n.EdgeDirection.TurnU]={direction:n.EdgeDirection.TurnU,directionChange:Math.PI,motionChange:null},this.panos[n.EdgeDirection.StepForward]={direction:n.EdgeDirection.StepForward,directionChange:0,next:n.EdgeDirection.StepLeft,prev:n.EdgeDirection.StepRight},this.panos[n.EdgeDirection.StepBackward]={direction:n.EdgeDirection.StepBackward,directionChange:Math.PI,next:n.EdgeDirection.StepRight,prev:n.EdgeDirection.StepLeft},this.panos[n.EdgeDirection.StepLeft]={direction:n.EdgeDirection.StepLeft,directionChange:Math.PI/2,next:n.EdgeDirection.StepBackward,prev:n.EdgeDirection.StepForward},this.panos[n.EdgeDirection.StepRight]={direction:n.EdgeDirection.StepRight,directionChange:-Math.PI/2,next:n.EdgeDirection.StepForward,prev:n.EdgeDirection.StepBackward}}return t}();r.EdgeCalculatorDirections=i},{"../../Edge":225}],317:[function(t,e,r){"use strict";var n=function(){function t(){this.panoMinDistance=.1,this.panoMaxDistance=20,this.panoPreferredDistance=5,this.panoMaxItems=4,this.panoMaxStepTurnChange=Math.PI/8,this.rotationMaxDistance=this.turnMaxRigDistance,this.rotationMaxDirectionChange=Math.PI/6,this.rotationMaxVerticalDirectionChange=Math.PI/8,this.similarMaxDirectionChange=Math.PI/8,this.similarMaxDistance=12,this.similarMinTimeDifference=432e5,this.stepMaxDistance=20,this.stepMaxDirectionChange=Math.PI/6,this.stepMaxDrift=Math.PI/6,this.stepPreferredDistance=4,this.turnMaxDistance=15,this.turnMaxDirectionChange=2*Math.PI/9,this.turnMaxRigDistance=.65,this.turnMinRigDirectionChange=Math.PI/6}return Object.defineProperty(t.prototype,"maxDistance",{get:function(){return Math.max(this.panoMaxDistance,this.similarMaxDistance,this.stepMaxDistance,this.turnMaxDistance)},enumerable:!0,configurable:!0}),t}();r.EdgeCalculatorSettings=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],318:[function(t,e,r){"use strict";!function(t){t[t.Next=0]="Next",t[t.Prev=1]="Prev",t[t.StepLeft=2]="StepLeft",t[t.StepRight=3]="StepRight",t[t.StepForward=4]="StepForward",t[t.StepBackward=5]="StepBackward",t[t.TurnLeft=6]="TurnLeft",t[t.TurnRight=7]="TurnRight",t[t.TurnU=8]="TurnU",t[t.Pano=9]="Pano",t[t.Similar=10]="Similar"}(r.EdgeDirection||(r.EdgeDirection={}))},{}],319:[function(t,e,r){"use strict";var n=t("underscore"),i=t("virtual-dom"),o=t("rxjs/Subject");t("rxjs/add/operator/combineLatest"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/pluck"),t("rxjs/add/operator/scan");var a=t("../Render"),s=function(){function t(t,e,r){this._adaptiveOperation$=new o.Subject,this._render$=new o.Subject,this._renderAdaptive$=new o.Subject,this._renderService=e,this._currentFrame$=r;var s=i.create(i.h("div.domRenderer",[]));t.appendChild(s),this._offset$=this._adaptiveOperation$.scan(function(t,e){return e(t)},{elementHeight:t.offsetHeight,elementWidth:t.offsetWidth,imageAspect:0,renderMode:a.RenderMode.Fill}).filter(function(t){return t.imageAspect>0&&t.elementWidth>0&&t.elementHeight>0}).map(function(t){var e=t.elementWidth/t.elementHeight,r=t.imageAspect/e,n=0,i=0;return t.renderMode===a.RenderMode.Letterbox?t.imageAspect>e?n=t.elementHeight*(1-1/r)/2:i=t.elementWidth*(1-r)/2:t.imageAspect>e?i=-t.elementWidth*(r-1)/2:n=-t.elementHeight*(1/r-1)/2,{bottom:n,left:i,right:i,top:n}}),this._currentFrame$.filter(function(t){return null!=t.state.currentNode}).distinctUntilChanged(function(t,e){return t===e},function(t){return t.state.currentNode.key}).map(function(t){return t.state.currentTransform.basicAspect}).map(function(t){return function(e){return e.imageAspect=t,e}}).subscribe(this._adaptiveOperation$),this._renderAdaptive$.scan(function(t,e){return null==e.vnode?delete t[e.name]:t[e.name]=e.vnode,t},{}).combineLatest(this._offset$).map(function(t){var e=n.values(t[0]),r=t[1],o={style:{bottom:r.bottom+"px",left:r.left+"px","pointer-events":"none",position:"absolute",right:r.right+"px",top:r.top+"px"}};return{name:"adaptiveDomRenderer",vnode:i.h("div.adaptiveDomRenderer",o,e)}}).subscribe(this._render$),this._vNode$=this._render$.scan(function(t,e){return null==e.vnode?delete t[e.name]:t[e.name]=e.vnode,t},{}).map(function(t){var e=n.values(t);return i.h("div.domRenderer",e)}),this._vPatch$=this._vNode$.scan(function(t,e){return t.vpatch=i.diff(t.vnode,e),t.vnode=e,t},{vnode:i.h("div.domRenderer",[]),vpatch:null}).pluck("vpatch"),this._element$=this._vPatch$.scan(function(t,e){return i.patch(t,e)},s).publishReplay(1).refCount(),this._element$.subscribe(function(){}),this._renderService.size$.map(function(t){return function(e){return e.elementWidth=t.width,e.elementHeight=t.height,e}}).subscribe(this._adaptiveOperation$),this._renderService.renderMode$.map(function(t){return function(e){return e.renderMode=t,e}}).subscribe(this._adaptiveOperation$)}return Object.defineProperty(t.prototype,"element$",{get:function(){return this._element$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"render$",{get:function(){return this._render$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"renderAdaptive$",{get:function(){return this._renderAdaptive$},enumerable:!0,configurable:!0}),t.prototype.clear=function(t){this._renderAdaptive$.next({name:t,vnode:null}),this._render$.next({name:t,vnode:null})},t}();r.DOMRenderer=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../Render":230,"rxjs/Subject":33,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/pluck":69,"rxjs/add/operator/scan":72,underscore:175,"virtual-dom":180}],320:[function(t,e,r){"use strict";var n;!function(t){t[t.Background=0]="Background",t[t.Foreground=1]="Foreground"}(n=r.GLRenderStage||(r.GLRenderStage={})),Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],321:[function(t,e,r){"use strict";var n=t("three"),i=t("rxjs/Observable"),o=t("rxjs/Subject");t("rxjs/add/observable/combineLatest"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/first"),t("rxjs/add/operator/map"),t("rxjs/add/operator/merge"),t("rxjs/add/operator/mergeMap"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/share"),t("rxjs/add/operator/startWith");var a=t("../Render"),s=function(){function t(t,e){var r=this;this._renderFrame$=new o.Subject,this._renderCameraOperation$=new o.Subject,this._render$=new o.Subject,this._clear$=new o.Subject,this._renderOperation$=new o.Subject,this._rendererOperation$=new o.Subject,this._eraserOperation$=new o.Subject,this._renderService=e,this._renderer$=this._rendererOperation$.scan(function(t,e){return e(t)},{needsRender:!1,renderer:null}),this._renderCollection$=this._renderOperation$.scan(function(t,e){return e(t)},{}).share(),this._renderCamera$=this._renderCameraOperation$.scan(function(t,e){return e(t)},{frameId:-1,needsRender:!1,perspective:null}),this._eraser$=this._eraserOperation$.startWith(function(t){return t}).scan(function(t,e){return e(t)},{needsRender:!1}),i.Observable.combineLatest([this._renderer$,this._renderCollection$,this._renderCamera$,this._eraser$],function(t,e,r,n){return{camera:r,eraser:n,renderer:t,renders:Object.keys(e).map(function(t){return e[t]})}}).filter(function(t){for(var e=t.renderer.needsRender||t.camera.needsRender||t.eraser.needsRender,r=t.camera.frameId,n=0,i=t.renders;n<i.length;n++){var o=i[n];if(o.frameId!==r)return!1;e=e||o.needsRender}return e}).distinctUntilChanged(function(t,e){return t===e},function(t){return t.eraser.needsRender?-1:t.camera.frameId}).subscribe(function(t){t.renderer.needsRender=!1,t.camera.needsRender=!1,t.eraser.needsRender=!1;for(var e=t.camera.perspective,r=[],n=[],i=0,o=t.renders;i<o.length;i++){var s=o[i];s.stage===a.GLRenderStage.Background?r.push(s.render):s.stage===a.GLRenderStage.Foreground&&n.push(s.render)}var c=t.renderer.renderer;c.clear();for(var u=0,h=r;u<h.length;u++){var s=h[u];s(e,c)}c.clearDepth();for(var l=0,p=n;l<p.length;l++){var s=p[l];s(e,c)}}),this._renderFrame$.map(function(t){return function(e){return e.frameId=t.frameId,e.perspective=t.perspective,t.changed===!0&&(e.needsRender=!0),e}}).subscribe(this._renderCameraOperation$),this._renderFrameSubscribe();var s=this._render$.map(function(t){return function(e){return e[t.name]=t.render,e}}),c=this._clear$.map(function(t){return function(e){return delete e[t],e}});i.Observable.merge(s,c).subscribe(this._renderOperation$),this._webGLRenderer$=this._render$.first().map(function(r){var i=e.element,o=new n.WebGLRenderer;return o.setPixelRatio(window.devicePixelRatio),o.setSize(i.offsetWidth,i.offsetHeight),o.setClearColor(new n.Color(2105376),1),o.autoClear=!1,o.domElement.style.position="absolute",t.appendChild(o.domElement),o}).publishReplay(1).refCount(),this._webGLRenderer$.subscribe(function(){});var u=this._webGLRenderer$.first().map(function(t){return function(e){return e.needsRender=!0,e.renderer=t,e}}),h=this._renderService.size$.map(function(t){return function(e){return null==e.renderer?e:(e.renderer.setSize(t.width,t.height),e.needsRender=!0,e)}}),l=this._clear$.map(function(t){return function(t){return null==t.renderer?t:(t.needsRender=!0,t)}});i.Observable.merge(u,h,l).subscribe(this._rendererOperation$);var p=this._renderCollection$.filter(function(t){return 0===Object.keys(t).length}).share();p.subscribe(function(t){null!=r._renderFrameSubscription&&(r._renderFrameSubscription.unsubscribe(),r._renderFrameSubscription=null,r._renderFrameSubscribe())}),p.map(function(t){return function(t){return t.needsRender=!0,t}}).subscribe(this._eraserOperation$)}return Object.defineProperty(t.prototype,"render$",{get:function(){return this._render$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"webGLRenderer$",{get:function(){return this._webGLRenderer$},enumerable:!0,configurable:!0}),t.prototype.clear=function(t){this._clear$.next(t)},t.prototype._renderFrameSubscribe=function(){
-var t=this;this._render$.first().map(function(t){return function(t){return t.needsRender=!0,t}}).subscribe(function(e){t._renderCameraOperation$.next(e)}),this._renderFrameSubscription=this._render$.first().mergeMap(function(e){return t._renderService.renderCameraFrame$}).subscribe(this._renderFrame$)},t}();r.GLRenderer=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../Render":230,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/startWith":77,three:174}],322:[function(t,e,r){"use strict";var n=t("three"),i=t("../Geo"),o=t("../Render"),a=function(){function t(t,e){this.alpha=-1,this.zoom=0,this._frameId=-1,this._changed=!1,this._changedForFrame=-1,this.currentAspect=1,this.currentPano=!1,this.previousAspect=1,this.previousPano=!1,this.renderMode=e,this._spatial=new i.Spatial,this._camera=new i.Camera,this._perspective=new n.PerspectiveCamera(50,t,.4,1e4),this._perspective.matrixAutoUpdate=!1,this._rotation={phi:0,theta:0}}return Object.defineProperty(t.prototype,"camera",{get:function(){return this._camera},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"changed",{get:function(){return this.frameId===this._changedForFrame},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"frameId",{get:function(){return this._frameId},set:function(t){this._frameId=t,this._changed&&(this._changed=!1,this._changedForFrame=t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"perspective",{get:function(){return this._perspective},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rotation",{get:function(){return this._rotation},enumerable:!0,configurable:!0}),t.prototype.updateProjection=function(){var t=this._getAspect(this.currentAspect,this.currentPano,this.perspective.aspect),e=this._getAspect(this.previousAspect,this.previousPano,this.perspective.aspect),r=(1-this.alpha)*e+this.alpha*t,n=this._getVerticalFov(r,this._camera.focal,this.zoom);this._perspective.fov=n,this._perspective.updateProjectionMatrix(),this._changed=!0},t.prototype.updatePerspective=function(t){this._perspective.up.copy(t.up),this._perspective.position.copy(t.position),this._perspective.lookAt(t.lookat),this._perspective.updateMatrix(),this._perspective.updateMatrixWorld(!1),this._changed=!0},t.prototype.updateRotation=function(t){this._rotation=this._getRotation(t)},t.prototype._getVerticalFov=function(t,e,r){return 2*Math.atan(.5/(Math.pow(2,r)*t*e))*180/Math.PI},t.prototype._getAspect=function(t,e,r){if(e)return 1;var n=Math.max(1,1/t);return(this.renderMode===o.RenderMode.Letterbox?t>r:t<r)?n*r:n*t},t.prototype._getRotation=function(t){var e=t.lookat.clone().sub(t.position),r=t.up.clone(),n=e.clone().dot(r),i=e.clone().sub(r.clone().multiplyScalar(n));return{phi:Math.atan2(i.y,i.x),theta:Math.PI/2-this._spatial.angleToPlane(e.toArray(),[0,0,1])}},t}();r.RenderCamera=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../Geo":227,"../Render":230,three:174}],323:[function(t,e,r){"use strict";var n;!function(t){t[t.Letterbox=0]="Letterbox",t[t.Fill=1]="Fill"}(n=r.RenderMode||(r.RenderMode={})),Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],324:[function(t,e,r){"use strict";var n=t("rxjs/Subject"),i=t("rxjs/BehaviorSubject");t("rxjs/add/observable/combineLatest"),t("rxjs/add/operator/do"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/skip"),t("rxjs/add/operator/startWith"),t("rxjs/add/operator/withLatestFrom");var o=t("../Geo"),a=t("../Render"),s=function(){function t(t,e,r){var s=this;this._element=t,this._currentFrame$=e,this._spatial=new o.Spatial,r=null!=r?r:a.RenderMode.Fill,this._resize$=new n.Subject,this._renderCameraOperation$=new n.Subject,this._size$=new i.BehaviorSubject({height:this._element.offsetHeight,width:this._element.offsetWidth}),this._resize$.map(function(){return{height:s._element.offsetHeight,width:s._element.offsetWidth}}).subscribe(this._size$),this._renderMode$=new i.BehaviorSubject(r),this._renderCameraHolder$=this._renderCameraOperation$.startWith(function(t){return t}).scan(function(t,e){return e(t)},new a.RenderCamera(this._element.offsetWidth/this._element.offsetHeight,r)).publishReplay(1).refCount(),this._renderCameraFrame$=this._currentFrame$.withLatestFrom(this._renderCameraHolder$,function(t,e){return[t,e]}).do(function(t){var e=t[0],r=t[1],n=e.state.camera;if(r.alpha!==e.state.alpha||r.zoom!==e.state.zoom||r.camera.diff(n)>1e-9){var i=e.state.currentTransform,o=null!=e.state.previousTransform?e.state.previousTransform:e.state.currentTransform,a=null!=e.state.previousNode?e.state.previousNode:e.state.currentNode;r.currentAspect=i.basicAspect,r.currentPano=e.state.currentNode.pano,r.previousAspect=o.basicAspect,r.previousPano=a.pano,r.alpha=e.state.alpha,r.zoom=e.state.zoom,r.camera.copy(n),r.updatePerspective(n),r.updateRotation(n),r.updateProjection()}r.frameId=e.id}).map(function(t){return t[1]}).publishReplay(1).refCount(),this._renderCamera$=this._renderCameraFrame$.filter(function(t){return t.changed}).publishReplay(1).refCount(),this._bearing$=this._renderCamera$.map(function(t){var e=s._spatial.radToDeg(s._spatial.azimuthalToBearing(t.rotation.phi));return s._spatial.wrap(e,0,360)}).publishReplay(1).refCount(),this._size$.skip(1).map(function(t){return function(e){return e.perspective.aspect=t.width/t.height,e.updateProjection(),e}}).subscribe(this._renderCameraOperation$),this._renderMode$.skip(1).map(function(t){return function(e){return e.renderMode=t,e.updateProjection(),e}}).subscribe(this._renderCameraOperation$),this._bearing$.subscribe(function(){}),this._renderCameraHolder$.subscribe(function(){}),this._size$.subscribe(function(){}),this._renderMode$.subscribe(function(){}),this._renderCamera$.subscribe(function(){}),this._renderCameraFrame$.subscribe(function(){})}return Object.defineProperty(t.prototype,"bearing$",{get:function(){return this._bearing$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){return this._element},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"resize$",{get:function(){return this._resize$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"size$",{get:function(){return this._size$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"renderMode$",{get:function(){return this._renderMode$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"renderCameraFrame$",{get:function(){return this._renderCameraFrame$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"renderCamera$",{get:function(){return this._renderCamera$},enumerable:!0,configurable:!0}),t}();r.RenderService=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../Geo":227,"../Render":230,"rxjs/BehaviorSubject":25,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/skip":74,"rxjs/add/operator/startWith":77,"rxjs/add/operator/withLatestFrom":82}],325:[function(t,e,r){"use strict";var n;!function(t){t[t.Traversing=0]="Traversing",t[t.Waiting=1]="Waiting"}(n=r.State||(r.State={})),Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],326:[function(t,e,r){"use strict";var n=t("../State"),i=t("../Geo"),o=function(){function t(){this._state=new n.TraversingState({alpha:1,camera:new i.Camera,currentIndex:-1,reference:{alt:0,lat:0,lon:0},trajectory:[],zoom:0})}return t.prototype.traverse=function(){this._state=this._state.traverse()},t.prototype.wait=function(){this._state=this._state.wait()},Object.defineProperty(t.prototype,"state",{get:function(){if(this._state instanceof n.TraversingState)return n.State.Traversing;if(this._state instanceof n.WaitingState)return n.State.Waiting;throw new Error("Invalid state")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"reference",{get:function(){return this._state.reference},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"alpha",{get:function(){return this._state.alpha},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"camera",{get:function(){return this._state.camera},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"zoom",{get:function(){return this._state.zoom},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentNode",{get:function(){return this._state.currentNode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"previousNode",{get:function(){return this._state.previousNode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentCamera",{get:function(){return this._state.currentCamera},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentTransform",{get:function(){return this._state.currentTransform},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"previousTransform",{get:function(){return this._state.previousTransform},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"trajectory",{get:function(){return this._state.trajectory},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentIndex",{get:function(){return this._state.currentIndex},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"lastNode",{get:function(){return this._state.trajectory[this._state.trajectory.length-1]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"nodesAhead",{get:function(){return this._state.trajectory.length-1-this._state.currentIndex},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"motionless",{get:function(){return this._state.motionless},enumerable:!0,configurable:!0}),t.prototype.getCenter=function(){return this._state.getCenter()},t.prototype.setCenter=function(t){this._state.setCenter(t)},t.prototype.setZoom=function(t){this._state.setZoom(t)},t.prototype.update=function(t){this._state.update(t)},t.prototype.append=function(t){this._state.append(t)},t.prototype.prepend=function(t){this._state.prepend(t)},t.prototype.remove=function(t){this._state.remove(t)},t.prototype.clear=function(){this._state.clear()},t.prototype.clearPrior=function(){this._state.clearPrior()},t.prototype.cut=function(){this._state.cut()},t.prototype.set=function(t){this._state.set(t)},t.prototype.rotate=function(t){this._state.rotate(t)},t.prototype.rotateBasic=function(t){this._state.rotateBasic(t)},t.prototype.rotateBasicUnbounded=function(t){this._state.rotateBasicUnbounded(t)},t.prototype.rotateToBasic=function(t){this._state.rotateToBasic(t)},t.prototype.move=function(t){this._state.move(t)},t.prototype.moveTo=function(t){this._state.moveTo(t)},t.prototype.zoomIn=function(t,e){this._state.zoomIn(t,e)},t}();r.StateContext=o},{"../Geo":227,"../State":231}],327:[function(t,e,r){"use strict";var n=t("rxjs/BehaviorSubject"),i=t("rxjs/Subject"),o=t("rxjs/util/AnimationFrame");t("rxjs/add/operator/bufferCount"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/do"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/first"),t("rxjs/add/operator/map"),t("rxjs/add/operator/pairwise"),t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/startWith"),t("rxjs/add/operator/switchMap"),t("rxjs/add/operator/withLatestFrom");var a=t("../State"),s=function(){function t(){var t=this;this._appendNode$=new i.Subject,this._start$=new i.Subject,this._frame$=new i.Subject,this._fpsSampleRate=30,this._contextOperation$=new n.BehaviorSubject(function(t){return t}),this._context$=this._contextOperation$.scan(function(t,e){return e(t)},new a.StateContext).publishReplay(1).refCount(),this._state$=this._context$.map(function(t){return t.state}).distinctUntilChanged().publishReplay(1).refCount(),this._fps$=this._start$.switchMap(function(){return t._frame$.bufferCount(1,t._fpsSampleRate).map(function(t){return(new Date).getTime()}).pairwise().map(function(e){return Math.max(20,1e3*t._fpsSampleRate/(e[1]-e[0]))}).startWith(60)}).share(),this._currentState$=this._frame$.withLatestFrom(this._fps$,this._context$,function(t,e,r){return[t,e,r]}).filter(function(t){return null!=t[2].currentNode}).do(function(t){t[2].update(t[1])}).map(function(t){return{fps:t[1],id:t[0],state:t[2]}}).share(),this._lastState$=this._currentState$.publishReplay(1).refCount();var e=this._currentState$.distinctUntilChanged(void 0,function(t){return t.state.currentNode.key}).publishReplay(1).refCount(),r=new i.Subject;e.subscribe(r),this._currentKey$=new n.BehaviorSubject(null),r.map(function(t){return t.state.currentNode.key}).subscribe(this._currentKey$),this._currentNode$=r.map(function(t){return t.state.currentNode}).publishReplay(1).refCount(),this._currentCamera$=r.map(function(t){return t.state.currentCamera}).publishReplay(1).refCount(),this._currentTransform$=r.map(function(t){return t.state.currentTransform}).publishReplay(1).refCount(),this._reference$=r.map(function(t){return t.state.reference}).distinctUntilChanged(function(t,e){return t.lat===e.lat&&t.lon===e.lon},function(t){return{lat:t.lat,lon:t.lon}}).publishReplay(1).refCount(),this._currentNodeExternal$=e.map(function(t){return t.state.currentNode}).publishReplay(1).refCount(),this._appendNode$.map(function(t){return function(e){return e.append([t]),e}}).subscribe(this._contextOperation$),this._inMotionOperation$=new i.Subject,e.map(function(t){return!0}).subscribe(this._inMotionOperation$),this._inMotionOperation$.distinctUntilChanged().filter(function(t){return t}).switchMap(function(e){return t._currentState$.filter(function(t){return 0===t.state.nodesAhead}).map(function(t){return[t.state.camera.clone(),t.state.zoom]}).pairwise().map(function(t){var e=t[0][0],r=t[1][0],n=t[0][1],i=t[1][1];return e.diff(r)>1e-5||Math.abs(n-i)>1e-5}).first(function(t){return!t})}).subscribe(this._inMotionOperation$),this._inMotion$=this._inMotionOperation$.distinctUntilChanged().publishReplay(1).refCount(),this._inTranslationOperation$=new i.Subject,e.map(function(t){return!0}).subscribe(this._inTranslationOperation$),this._inTranslationOperation$.distinctUntilChanged().filter(function(t){return t}).switchMap(function(e){return t._currentState$.filter(function(t){return 0===t.state.nodesAhead}).map(function(t){return t.state.camera.position.clone()}).pairwise().map(function(t){return 0!==t[0].distanceToSquared(t[1])}).first(function(t){return!t})}).subscribe(this._inTranslationOperation$),this._inTranslation$=this._inTranslationOperation$.distinctUntilChanged().publishReplay(1).refCount(),this._state$.subscribe(function(){}),this._currentNode$.subscribe(function(){}),this._currentCamera$.subscribe(function(){}),this._currentTransform$.subscribe(function(){}),this._reference$.subscribe(function(){}),this._currentNodeExternal$.subscribe(function(){}),this._lastState$.subscribe(function(){}),this._inMotion$.subscribe(function(){}),this._inTranslation$.subscribe(function(){}),this._frameId=null,this._frameGenerator=new o.RequestAnimationFrameDefinition(window)}return Object.defineProperty(t.prototype,"currentState$",{get:function(){return this._currentState$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentNode$",{get:function(){return this._currentNode$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentKey$",{get:function(){return this._currentKey$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentNodeExternal$",{get:function(){return this._currentNodeExternal$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentCamera$",{get:function(){return this._currentCamera$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentTransform$",{get:function(){return this._currentTransform$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"state$",{get:function(){return this._state$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"reference$",{get:function(){return this._reference$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"inMotion$",{get:function(){return this._inMotion$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"inTranslation$",{get:function(){return this._inTranslation$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"appendNode$",{get:function(){return this._appendNode$},enumerable:!0,configurable:!0}),t.prototype.traverse=function(){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(t){t.traverse()})},t.prototype.wait=function(){this._invokeContextOperation(function(t){t.wait()})},t.prototype.appendNodes=function(t){this._invokeContextOperation(function(e){e.append(t)})},t.prototype.prependNodes=function(t){this._invokeContextOperation(function(e){e.prepend(t)})},t.prototype.removeNodes=function(t){this._invokeContextOperation(function(e){e.remove(t)})},t.prototype.clearNodes=function(){this._invokeContextOperation(function(t){t.clear()})},t.prototype.clearPriorNodes=function(){this._invokeContextOperation(function(t){t.clearPrior()})},t.prototype.cutNodes=function(){this._invokeContextOperation(function(t){t.cut()})},t.prototype.setNodes=function(t){this._invokeContextOperation(function(e){e.set(t)})},t.prototype.rotate=function(t){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(e){e.rotate(t)})},t.prototype.rotateBasic=function(t){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(e){e.rotateBasic(t)})},t.prototype.rotateBasicUnbounded=function(t){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(e){e.rotateBasicUnbounded(t)})},t.prototype.rotateToBasic=function(t){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(e){e.rotateToBasic(t)})},t.prototype.move=function(t){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(e){e.move(t)})},t.prototype.moveTo=function(t){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(e){e.moveTo(t)})},t.prototype.zoomIn=function(t,e){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(r){r.zoomIn(t,e)})},t.prototype.getCenter=function(){return this._lastState$.first().map(function(t){return t.state.getCenter()})},t.prototype.getZoom=function(){return this._lastState$.first().map(function(t){return t.state.zoom})},t.prototype.setCenter=function(t){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(e){e.setCenter(t)})},t.prototype.setZoom=function(t){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(e){e.setZoom(t)})},t.prototype.start=function(){null==this._frameId&&(this._start$.next(null),this._frameId=this._frameGenerator.requestAnimationFrame(this._frame.bind(this)),this._frame$.next(this._frameId))},t.prototype.stop=function(){null!=this._frameId&&(this._frameGenerator.cancelAnimationFrame(this._frameId),this._frameId=null)},t.prototype._invokeContextOperation=function(t){this._contextOperation$.next(function(e){return t(e),e})},t.prototype._frame=function(t){this._frameId=this._frameGenerator.requestAnimationFrame(this._frame.bind(this)),this._frame$.next(this._frameId)},t}();r.StateService=s},{"../State":231,"rxjs/BehaviorSubject":25,"rxjs/Subject":33,"rxjs/add/operator/bufferCount":49,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/pairwise":68,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/withLatestFrom":82,"rxjs/util/AnimationFrame":155}],328:[function(t,e,r){"use strict";var n=t("../../Error"),i=t("../../Geo"),o=function(){function t(t){this._spatial=new i.Spatial,this._geoCoords=new i.GeoCoords,this._referenceThreshold=.01,this._reference=t.reference,this._alpha=t.alpha,this._camera=t.camera.clone(),this._zoom=t.zoom,this._currentIndex=t.currentIndex,this._trajectory=t.trajectory.slice(),this._trajectoryTransforms=[],this._trajectoryCameras=[];for(var e=0,r=this._trajectory;e<r.length;e++){var n=r[e],o=this._nodeToTranslation(n),a=new i.Transform(n,n.image,o);this._trajectoryTransforms.push(a),this._trajectoryCameras.push(new i.Camera(a))}this._currentNode=this._trajectory.length>0?this._trajectory[this._currentIndex]:null,this._previousNode=this._trajectory.length>1&&this.currentIndex>0?this._trajectory[this._currentIndex-1]:null,this._currentCamera=this._trajectoryCameras.length>0?this._trajectoryCameras[this._currentIndex].clone():new i.Camera,this._previousCamera=this._trajectoryCameras.length>1&&this.currentIndex>0?this._trajectoryCameras[this._currentIndex-1].clone():this._currentCamera.clone()}return Object.defineProperty(t.prototype,"reference",{get:function(){return this._reference},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"alpha",{get:function(){return this._getAlpha()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"camera",{get:function(){return this._camera},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"zoom",{get:function(){return this._zoom},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"trajectory",{get:function(){return this._trajectory},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentIndex",{get:function(){return this._currentIndex},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentNode",{get:function(){return this._currentNode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"previousNode",{get:function(){return this._previousNode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentCamera",{get:function(){return this._currentCamera},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentTransform",{get:function(){return this._trajectoryTransforms.length>0?this._trajectoryTransforms[this.currentIndex]:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"previousTransform",{get:function(){return this._trajectoryTransforms.length>1&&this.currentIndex>0?this._trajectoryTransforms[this.currentIndex-1]:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"motionless",{get:function(){return this._motionless},enumerable:!0,configurable:!0}),t.prototype.append=function(t){if(t.length<1)throw Error("Trajectory can not be empty");this._currentIndex<0?this.set(t):(this._trajectory=this._trajectory.concat(t),this._appendToTrajectories(t))},t.prototype.prepend=function(t){if(t.length<1)throw Error("Trajectory can not be empty");this._trajectory=t.slice().concat(this._trajectory),this._currentIndex+=t.length,this._setCurrentNode(),this._setReference(this._currentNode)?this._setTrajectories():this._prependToTrajectories(t),this._setCurrentCamera()},t.prototype.remove=function(t){if(t<0)throw Error("n must be a positive integer");if(this._currentIndex-1<t)throw Error("Current and previous nodes can not be removed");for(var e=0;e<t;e++)this._trajectory.shift(),this._trajectoryTransforms.shift(),this._trajectoryCameras.shift(),this._currentIndex--;this._setCurrentNode()},t.prototype.clearPrior=function(){this._currentIndex>0&&this.remove(this._currentIndex-1)},t.prototype.clear=function(){this.cut(),this._currentIndex>0&&this.remove(this._currentIndex-1)},t.prototype.cut=function(){for(;this._trajectory.length-1>this._currentIndex;)this._trajectory.pop(),this._trajectoryTransforms.pop(),this._trajectoryCameras.pop()},t.prototype.set=function(t){this._setTrajectory(t),this._setCurrentNode(),this._setReference(this._currentNode),this._setTrajectories(),this._setCurrentCamera()},t.prototype.getCenter=function(){return null!=this._currentNode?this.currentTransform.projectBasic(this._camera.lookat.toArray()):[.5,.5]},t.prototype._setCurrent=function(){this._setCurrentNode(),this._setReference(this._currentNode)&&this._setTrajectories(),this._setCurrentCamera()},t.prototype._setCurrentCamera=function(){this._currentCamera=this._trajectoryCameras[this._currentIndex].clone(),this._previousCamera=this._currentIndex>0?this._trajectoryCameras[this._currentIndex-1].clone():this._currentCamera.clone()},t.prototype._motionlessTransition=function(){return null!=this._currentNode&&null!=this._previousNode&&!(this._currentNode.merged&&this._previousNode.merged&&this._withinOriginalDistance()&&this._sameConnectedComponent())},t.prototype._setReference=function(t){return!(Math.abs(t.latLon.lat-this.reference.lat)<this._referenceThreshold&&Math.abs(t.latLon.lon-this.reference.lon)<this._referenceThreshold)&&(!(null!=this._previousNode&&!this._motionlessTransition())&&(this._reference.lat=t.latLon.lat,this._reference.lon=t.latLon.lon,this._reference.alt=t.alt,!0))},t.prototype._setCurrentNode=function(){this._currentNode=this._trajectory.length>0?this._trajectory[this._currentIndex]:null,this._previousNode=this._currentIndex>0?this._trajectory[this._currentIndex-1]:null},t.prototype._setTrajectory=function(t){if(t.length<1)throw new n.ArgumentMapillaryError("Trajectory can not be empty");null!=this._currentNode?(this._trajectory=[this._currentNode].concat(t),this._currentIndex=1):(this._trajectory=t.slice(),this._currentIndex=0)},t.prototype._setTrajectories=function(){this._trajectoryTransforms.length=0,this._trajectoryCameras.length=0,this._appendToTrajectories(this._trajectory)},t.prototype._appendToTrajectories=function(t){for(var e=0,r=t;e<r.length;e++){var o=r[e];if(!o.assetsCached)throw new n.ArgumentMapillaryError("Assets must be cached when node is added to trajectory");var a=this._nodeToTranslation(o),s=new i.Transform(o,o.image,a);this._trajectoryTransforms.push(s),this._trajectoryCameras.push(new i.Camera(s))}},t.prototype._prependToTrajectories=function(t){for(var e=0,r=t.reverse();e<r.length;e++){var o=r[e];if(!o.assetsCached)throw new n.ArgumentMapillaryError("Assets must be cached when added to trajectory");var a=this._nodeToTranslation(o),s=new i.Transform(o,o.image,a);this._trajectoryTransforms.unshift(s),this._trajectoryCameras.unshift(new i.Camera(s))}},t.prototype._nodeToTranslation=function(t){var e=this._geoCoords.geodeticToEnu(t.latLon.lat,t.latLon.lon,t.alt,this._reference.lat,this._reference.lon,this._reference.alt),r=this._spatial.rotate(e,t.rotation);return[-r.x,-r.y,-r.z]},t.prototype._sameConnectedComponent=function(){var t=this._currentNode,e=this._previousNode;return!(t&&t.mergeCC&&e&&e.mergeCC)||t.mergeCC===e.mergeCC},t.prototype._withinOriginalDistance=function(){var t=this._currentNode,e=this._previousNode;return!t||!e||this._spatial.distanceFromLatLon(t.originalLatLon.lat,t.originalLatLon.lon,e.originalLatLon.lat,e.originalLatLon.lon)<25},t}();r.StateBase=o},{"../../Error":226,"../../Geo":227}],329:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("three"),o=t("unitbezier"),a=t("../../State"),s=function(){function t(t,e){this._phi=t,this._theta=e}return Object.defineProperty(t.prototype,"phi",{get:function(){return this._phi},set:function(t){this._phi=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"theta",{get:function(){return this._theta},set:function(t){this._theta=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isZero",{get:function(){return 0===this._phi&&0===this._theta},enumerable:!0,configurable:!0}),t.prototype.copy=function(t){this._phi=t.phi,this._theta=t.theta},t.prototype.lerp=function(t,e){this._phi=(1-e)*this._phi+e*t.phi,this._theta=(1-e)*this._theta+e*t.theta},t.prototype.multiply=function(t){this._phi*=t,this._theta*=t},t.prototype.threshold=function(t){this._phi=Math.abs(this._phi)>t?this._phi:0,this._theta=Math.abs(this._theta)>t?this._theta:0},t.prototype.lengthSquared=function(){return this._phi*this._phi+this._theta*this._theta},t.prototype.reset=function(){this._phi=0,this._theta=0},t}(),c=function(t){function e(e){var r=t.call(this,e)||this;return r._adjustCameras(),r._motionless=r._motionlessTransition(),r._baseAlpha=r._alpha,r._animationSpeed=.025,r._unitBezier=new o(.74,.67,.38,.96),r._useBezier=!1,r._rotationDelta=new s(0,0),r._requestedRotationDelta=null,r._basicRotation=[0,0],r._requestedBasicRotation=null,r._requestedBasicRotationUnbounded=null,r._rotationAcceleration=.86,r._rotationIncreaseAlpha=.97,r._rotationDecreaseAlpha=.9,r._rotationThreshold=.001,r._unboundedRotationAlpha=.8,r._desiredZoom=e.zoom,r._minZoom=0,r._maxZoom=3,r._lookatDepth=10,r._desiredLookat=null,r._desiredCenter=null,r}return n(e,t),e.prototype.traverse=function(){throw new Error("Not implemented")},e.prototype.wait=function(){return new a.WaitingState(this)},e.prototype.append=function(e){var r=0===this._trajectory.length;r&&this._resetTransition(),t.prototype.append.call(this,e),r&&(this._setDesiredCenter(),this._setDesiredZoom())},e.prototype.prepend=function(e){var r=0===this._trajectory.length;r&&this._resetTransition(),t.prototype.prepend.call(this,e),r&&(this._setDesiredCenter(),this._setDesiredZoom())},e.prototype.set=function(e){t.prototype.set.call(this,e),this._desiredLookat=null,this._resetTransition(),this._clearRotation(),this._setDesiredCenter(),this._setDesiredZoom(),this._trajectory.length<3&&(this._useBezier=!0)},e.prototype.move=function(t){throw new Error("Not implemented")},e.prototype.moveTo=function(t){throw new Error("Not implemented")},e.prototype.rotate=function(t){null!=this._currentNode&&(this._desiredZoom=this._zoom,this._desiredLookat=null,this._requestedBasicRotation=null,null!=this._requestedRotationDelta?(this._requestedRotationDelta.phi=this._requestedRotationDelta.phi+t.phi,this._requestedRotationDelta.theta=this._requestedRotationDelta.theta+t.theta):this._requestedRotationDelta=new s(t.phi,t.theta))},e.prototype.rotateBasic=function(t){if(null!=this._currentNode)if(this._desiredZoom=this._zoom,this._desiredLookat=null,this._requestedRotationDelta=null,null!=this._requestedBasicRotation){this._requestedBasicRotation[0]+=t[0],this._requestedBasicRotation[1]+=t[1];var e=.05/Math.pow(2,this._zoom);this._requestedBasicRotation[0]=this._spatial.clamp(this._requestedBasicRotation[0],-e,e),this._requestedBasicRotation[1]=this._spatial.clamp(this._requestedBasicRotation[1],-e,e)}else this._requestedBasicRotation=t.slice()},e.prototype.rotateBasicUnbounded=function(t){null!=this._currentNode&&(null!=this._requestedBasicRotationUnbounded?(this._requestedBasicRotationUnbounded[0]+=t[0],this._requestedBasicRotationUnbounded[1]+=t[1]):this._requestedBasicRotationUnbounded=t.slice())},e.prototype.rotateToBasic=function(t){if(null!=this._currentNode){this._desiredZoom=this._zoom,this._desiredLookat=null,t[0]=this._spatial.clamp(t[0],0,1),t[1]=this._spatial.clamp(t[1],0,1);var e=this.currentTransform.unprojectBasic(t,this._lookatDepth);this._currentCamera.lookat.fromArray(e)}},e.prototype.zoomIn=function(t,e){if(null!=this._currentNode){this._desiredZoom=Math.max(this._minZoom,Math.min(this._maxZoom,this._desiredZoom+t));var r=this.currentTransform.projectBasic(this._currentCamera.lookat.toArray()),n=r[0],o=r[1],a=Math.pow(2,this._zoom),s=Math.pow(2,this._desiredZoom),c=e[0],u=e[1];null!=this.currentTransform.gpano&&this.currentTransform.gpano.CroppedAreaImageWidthPixels===this.currentTransform.gpano.FullPanoWidthPixels&&(c-n>.5?c-=1:n-c>.5&&(c=1+c))
-;var h=c-a/s*(c-n),l=u-a/s*(u-o),p=this.currentTransform.gpano;this._currentNode.fullPano?(h=this._spatial.wrap(h+this._basicRotation[0],0,1),l=this._spatial.clamp(l+this._basicRotation[1],.05,.95)):null!=p&&this.currentTransform.gpano.CroppedAreaImageWidthPixels===this.currentTransform.gpano.FullPanoWidthPixels?(h=this._spatial.wrap(h+this._basicRotation[0],0,1),l=this._spatial.clamp(l+this._basicRotation[1],0,1)):(h=this._spatial.clamp(h,0,1),l=this._spatial.clamp(l,0,1)),this._desiredLookat=(new i.Vector3).fromArray(this.currentTransform.unprojectBasic([h,l],this._lookatDepth))}},e.prototype.setCenter=function(t){this._desiredLookat=null,this._requestedRotationDelta=null,this._requestedBasicRotation=null,this._desiredZoom=this._zoom;var e=[this._spatial.clamp(t[0],0,1),this._spatial.clamp(t[1],0,1)];if(null==this._currentNode)return void(this._desiredCenter=e);this._desiredCenter=null;var r=(new i.Vector3).fromArray(this.currentTransform.unprojectBasic(e,this._lookatDepth)),n=null!=this.previousTransform?this.previousTransform:this.currentTransform,o=(new i.Vector3).fromArray(n.unprojectBasic(e,this._lookatDepth));this._currentCamera.lookat.copy(r),this._previousCamera.lookat.copy(o)},e.prototype.setZoom=function(t){this._desiredLookat=null,this._requestedRotationDelta=null,this._requestedBasicRotation=null,this._zoom=this._spatial.clamp(t,this._minZoom,this._maxZoom),this._desiredZoom=this._zoom},e.prototype.update=function(t){1===this._alpha&&this._currentIndex+this._alpha<this._trajectory.length&&(this._currentIndex+=1,this._useBezier=this._trajectory.length<3&&this._currentIndex+1===this._trajectory.length,this._setCurrent(),this._resetTransition(),this._clearRotation(),this._desiredZoom=this._currentNode.fullPano?this._zoom:0,this._desiredLookat=null);var e=this._animationSpeed*(60/t);this._baseAlpha=Math.min(1,this._baseAlpha+e),this._useBezier?this._alpha=this._unitBezier.solve(this._baseAlpha):this._alpha=this._baseAlpha,this._updateRotation(),this._rotationDelta.isZero||(this._applyRotation(this._previousCamera),this._applyRotation(this._currentCamera)),this._updateRotationBasic(),0===this._basicRotation[0]&&0===this._basicRotation[1]||this._applyRotationBasic(),this._updateZoom(e),this._updateLookat(e),this._camera.lerpCameras(this._previousCamera,this._currentCamera,this.alpha)},e.prototype._getAlpha=function(){return this._motionless?Math.ceil(this._alpha):this._alpha},e.prototype._setCurrentCamera=function(){t.prototype._setCurrentCamera.call(this),this._adjustCameras()},e.prototype._adjustCameras=function(){if(null!=this._previousNode){var t=this._camera.lookat.clone().sub(this._camera.position);this._previousCamera.lookat.copy(t.clone().add(this._previousCamera.position)),this._currentNode.fullPano&&this._currentCamera.lookat.copy(t.clone().add(this._currentCamera.position))}},e.prototype._resetTransition=function(){this._alpha=0,this._baseAlpha=0,this._motionless=this._motionlessTransition()},e.prototype._applyRotation=function(t){if(null!=t){var e=(new i.Quaternion).setFromUnitVectors(t.up,new i.Vector3(0,0,1)),r=e.clone().inverse(),n=new i.Vector3;n.copy(t.lookat).sub(t.position),n.applyQuaternion(e);var o=n.length(),a=Math.atan2(n.y,n.x);a+=this._rotationDelta.phi;var s=Math.atan2(Math.sqrt(n.x*n.x+n.y*n.y),n.z);s+=this._rotationDelta.theta,s=Math.max(.1,Math.min(Math.PI-.1,s)),n.x=Math.sin(s)*Math.cos(a),n.y=Math.sin(s)*Math.sin(a),n.z=Math.cos(s),n.applyQuaternion(r),t.lookat.copy(t.position).add(n.multiplyScalar(o))}},e.prototype._applyRotationBasic=function(){var t=this._currentNode,e=null!=this._previousNode?this.previousNode:this.currentNode,r=this._currentCamera,n=this._previousCamera,i=this.currentTransform,o=null!=this.previousTransform?this.previousTransform:this.currentTransform,a=i.projectBasic(r.lookat.toArray()),s=o.projectBasic(n.lookat.toArray()),c=i.gpano,u=o.gpano;t.fullPano?(a[0]=this._spatial.wrap(a[0]+this._basicRotation[0],0,1),a[1]=this._spatial.clamp(a[1]+this._basicRotation[1],.05,.95)):null!=c&&i.gpano.CroppedAreaImageWidthPixels===i.gpano.FullPanoWidthPixels?(a[0]=this._spatial.wrap(a[0]+this._basicRotation[0],0,1),a[1]=this._spatial.clamp(a[1]+this._basicRotation[1],0,1)):(a[0]=this._spatial.clamp(a[0]+this._basicRotation[0],0,1),a[1]=this._spatial.clamp(a[1]+this._basicRotation[1],0,1)),e.fullPano?(s[0]=this._spatial.wrap(s[0]+this._basicRotation[0],0,1),s[1]=this._spatial.clamp(s[1]+this._basicRotation[1],.05,.95)):null!=u&&o.gpano.CroppedAreaImageWidthPixels===o.gpano.FullPanoWidthPixels?(s[0]=this._spatial.wrap(s[0]+this._basicRotation[0],0,1),s[1]=this._spatial.clamp(s[1]+this._basicRotation[1],0,1)):(s[0]=this._spatial.clamp(s[0]+this._basicRotation[0],0,1),s[1]=this._spatial.clamp(a[1]+this._basicRotation[1],0,1));var h=i.unprojectBasic(a,this._lookatDepth);r.lookat.fromArray(h);var l=o.unprojectBasic(s,this._lookatDepth);n.lookat.fromArray(l)},e.prototype._updateZoom=function(t){var e=this._desiredZoom-this._zoom,r=e>0?1:e<0?-1:0;0!==e&&(Math.abs(e)<.002?(this._zoom=this._desiredZoom,null!=this._desiredLookat&&(this._desiredLookat=null)):this._zoom+=r*Math.max(Math.abs(5*t*e),.002))},e.prototype._updateLookat=function(t){if(null!==this._desiredLookat){var e=this._desiredLookat.distanceToSquared(this._currentCamera.lookat);Math.abs(e)<1e-6?(this._currentCamera.lookat.copy(this._desiredLookat),this._desiredLookat=null):this._currentCamera.lookat.lerp(this._desiredLookat,5*t)}},e.prototype._updateRotation=function(){if(null!=this._requestedRotationDelta){var t=this._rotationDelta.lengthSquared();return this._requestedRotationDelta.lengthSquared()>t?this._rotationDelta.lerp(this._requestedRotationDelta,this._rotationIncreaseAlpha):this._rotationDelta.lerp(this._requestedRotationDelta,this._rotationDecreaseAlpha),void(this._requestedRotationDelta=null)}this._rotationDelta.isZero||(this._rotationDelta.multiply(this._rotationAcceleration),this._rotationDelta.threshold(this._rotationThreshold))},e.prototype._updateRotationBasic=function(){if(null!=this._requestedBasicRotation){var t=this._basicRotation[0],e=this._basicRotation[1],r=this._requestedBasicRotation[0],n=this._requestedBasicRotation[1];return Math.abs(r)>Math.abs(t)?this._basicRotation[0]=(1-this._rotationIncreaseAlpha)*t+this._rotationIncreaseAlpha*r:this._basicRotation[0]=(1-this._rotationDecreaseAlpha)*t+this._rotationDecreaseAlpha*r,Math.abs(n)>Math.abs(e)?this._basicRotation[1]=(1-this._rotationIncreaseAlpha)*e+this._rotationIncreaseAlpha*n:this._basicRotation[1]=(1-this._rotationDecreaseAlpha)*e+this._rotationDecreaseAlpha*n,void(this._requestedBasicRotation=null)}if(null!=this._requestedBasicRotationUnbounded){var r=this._requestedBasicRotationUnbounded[0],n=this._requestedBasicRotationUnbounded[1];if(Math.abs(r)>0&&(this._basicRotation[0]=(1-this._unboundedRotationAlpha)*this._basicRotation[0]+this._unboundedRotationAlpha*r),Math.abs(n)>0&&(this._basicRotation[1]=(1-this._unboundedRotationAlpha)*this._basicRotation[1]+this._unboundedRotationAlpha*n),null!=this._desiredLookat){var o=this.currentTransform.projectBasic(this._desiredLookat.toArray());o[0]+=r,o[1]+=n,this._desiredLookat=(new i.Vector3).fromArray(this.currentTransform.unprojectBasic(o,this._lookatDepth))}this._requestedBasicRotationUnbounded=null}0===this._basicRotation[0]&&0===this._basicRotation[1]||(this._basicRotation[0]=this._rotationAcceleration*this._basicRotation[0],this._basicRotation[1]=this._rotationAcceleration*this._basicRotation[1],Math.abs(this._basicRotation[0])<this._rotationThreshold/Math.pow(2,this._zoom)&&Math.abs(this._basicRotation[1])<this._rotationThreshold/Math.pow(2,this._zoom)&&(this._basicRotation=[0,0]))},e.prototype._clearRotation=function(){this._currentNode.fullPano||(null!=this._requestedRotationDelta&&(this._requestedRotationDelta=null),this._rotationDelta.isZero||this._rotationDelta.reset(),null!=this._requestedBasicRotation&&(this._requestedBasicRotation=null),(this._basicRotation[0]>0||this._basicRotation[1]>0)&&(this._basicRotation=[0,0]))},e.prototype._setDesiredCenter=function(){if(null!=this._desiredCenter){var t=(new i.Vector3).fromArray(this.currentTransform.unprojectBasic(this._desiredCenter,this._lookatDepth)).sub(this._currentCamera.position);this._currentCamera.lookat.copy(this._currentCamera.position.clone().add(t)),this._previousCamera.lookat.copy(this._previousCamera.position.clone().add(t)),this._desiredCenter=null}},e.prototype._setDesiredZoom=function(){this._desiredZoom=this._currentNode.fullPano||null==this._previousNode?this._zoom:0},e}(a.StateBase);r.TraversingState=c},{"../../State":231,three:174,unitbezier:176}],330:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../../State"),o=function(t){function e(e){var r=t.call(this,e)||this;return r._adjustCameras(),r._motionless=r._motionlessTransition(),r}return n(e,t),e.prototype.traverse=function(){return new i.TraversingState(this)},e.prototype.wait=function(){throw new Error("Not implemented")},e.prototype.prepend=function(e){t.prototype.prepend.call(this,e),this._motionless=this._motionlessTransition()},e.prototype.set=function(e){t.prototype.set.call(this,e),this._motionless=this._motionlessTransition()},e.prototype.rotate=function(t){},e.prototype.rotateBasic=function(t){},e.prototype.rotateBasicUnbounded=function(t){},e.prototype.rotateToBasic=function(t){},e.prototype.zoomIn=function(t,e){},e.prototype.move=function(t){this._alpha=Math.max(0,Math.min(1,this._alpha+t))},e.prototype.moveTo=function(t){this._alpha=Math.max(0,Math.min(1,t))},e.prototype.update=function(t){this._camera.lerpCameras(this._previousCamera,this._currentCamera,this.alpha)},e.prototype.setCenter=function(t){},e.prototype.setZoom=function(t){},e.prototype._getAlpha=function(){return this._motionless?Math.round(this._alpha):this._alpha},e.prototype._setCurrentCamera=function(){t.prototype._setCurrentCamera.call(this),this._adjustCameras()},e.prototype._adjustCameras=function(){if(null!=this._previousNode){if(this._currentNode.fullPano){var t=this._camera.lookat.clone().sub(this._camera.position);this._currentCamera.lookat.copy(t.clone().add(this._currentCamera.position))}if(this._previousNode.fullPano){var t=this._currentCamera.lookat.clone().sub(this._currentCamera.position);this._previousCamera.lookat.copy(t.clone().add(this._previousCamera.position))}}},e}(i.StateBase);r.WaitingState=o},{"../../State":231}],331:[function(t,e,r){"use strict";var n=t("rxjs/Observable"),i=function(){function t(t,e,r){this._scheme=t,this._host=e,this._origin=null!=r?"?origin="+r:""}return t.prototype.getTile=function(t,e,r,i,o,a,s){var c="/"+t+"/"+e+","+r+","+i+","+o+"/"+a+","+s+"/0/default.jpg",u=this._scheme+"://"+this._host+c+this._origin,h=null;return[n.Observable.create(function(n){h=new XMLHttpRequest,h.open("GET",u,!0),h.responseType="arraybuffer",h.timeout=15e3,h.onload=function(a){if(200!==h.status)return void n.error(new Error("Failed to fetch tile ("+t+": "+e+","+r+","+i+","+o+"). Status: "+h.status+", "+h.statusText));var s=new Image;s.crossOrigin="Anonymous",s.onload=function(t){n.next(s),n.complete()},s.onerror=function(a){n.error(new Error("Failed to load tile image ("+t+": "+e+","+r+","+i+","+o+")"))};var c=new Blob([h.response]);s.src=window.URL.createObjectURL(c)},h.onerror=function(a){n.error(new Error("Failed to fetch tile ("+t+": "+e+","+r+","+i+","+o+")"))},h.ontimeout=function(a){n.error(new Error("Tile request timed out ("+t+": "+e+","+r+","+i+","+o+")"))},h.onabort=function(a){n.error(new Error("Tile request was aborted ("+t+": "+e+","+r+","+i+","+o+")"))},h.send(null)}),function(){null!=h&&h.abort()}]},t}();r.ImageTileLoader=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{"rxjs/Observable":28}],332:[function(t,e,r){"use strict";var n=function(){function t(){this._images={}}return t.prototype.addImage=function(t,e,r){r in this._images||(this._images[r]={}),this._images[r][e]=t},t.prototype.dispose=function(){for(var t=0,e=Object.keys(this._images);t<e.length;t++){for(var r=e[t],n=this._images[r],i=0,o=Object.keys(n);i<o.length;i++){var a=o[i];window.URL.revokeObjectURL(n[a].src),delete n[a]}delete this._images[r]}},t.prototype.getImage=function(t,e){return this._images[e][t]},t.prototype.hasImage=function(t,e){return e in this._images&&t in this._images[e]},t}();r.ImageTileStore=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],333:[function(t,e,r){"use strict";var n=t("../Geo"),i=function(){function t(){this._viewportCoords=new n.ViewportCoords}return t.prototype.computeRegionOfInterest=function(t,e,r){var n=this._viewportBoundaryPoints(4),i=this._viewportPointsBoundingBox(n,t,r);this._clipBoundingBox(i);var o=2/e.width,a=2/e.height,s=[[-.5*o,.5*a],[.5*o,.5*a],[.5*o,-.5*a],[-.5*o,-.5*a]],c=this._viewportPointsBoundingBox(s,t,r);return{bbox:i,pixelHeight:c.maxY-c.minY,pixelWidth:c.maxX-c.minX+(c.minX<c.maxX?0:1)}},t.prototype._viewportBoundaryPoints=function(t){for(var e=[],r=[[-1,1],[1,1],[1,-1],[-1,-1]],n=[[2,0],[0,-2],[-2,0],[0,2]],i=0;i<4;++i)for(var o=r[i],a=n[i],s=0;s<t;++s)e.push([o[0]+a[0]*s/t,o[1]+a[1]*s/t]);return e},t.prototype._viewportPointsBoundingBox=function(t,e,r){var n=this,i=t.map(function(t){return n._viewportCoords.viewportToBasic(t[0],t[1],r,e.perspective)});return null!=r.gpano?this._boundingBoxPano(i):this._boundingBox(i)},t.prototype._boundingBox=function(t){for(var e={maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY},r=0;r<t.length;++r)e.minX=Math.min(e.minX,t[r][0]),e.maxX=Math.max(e.maxX,t[r][0]),e.minY=Math.min(e.minY,t[r][1]),e.maxY=Math.max(e.maxY,t[r][1]);return e},t.prototype._boundingBoxPano=function(t){for(var e=this,r=[],n=[],i=0;i<t.length;++i)r.push(t[i][0]),n.push(t[i][1]);r.sort(function(t,r){return e._sign(t-r)}),n.sort(function(t,r){return e._sign(t-r)});var o=this._intervalPano(r);return{maxX:o[1],maxY:n[n.length-1],minX:o[0],minY:n[0]}},t.prototype._intervalPano=function(t){for(var e=0,r=-1,n=0;n<t.length-1;++n){var i=t[n+1]-t[n];i>e&&(e=i,r=n)}return t[0]+1-t[t.length-1]>e?[t[0],t[t.length-1]]:[t[r+1],t[r]]},t.prototype._clipBoundingBox=function(t){t.minX=Math.max(0,Math.min(1,t.minX)),t.maxX=Math.max(0,Math.min(1,t.maxX)),t.minY=Math.max(0,Math.min(1,t.minY)),t.maxY=Math.max(0,Math.min(1,t.maxY))},t.prototype._sign=function(t){return t>0?1:t<0?-1:0},t}();r.RegionOfInterestCalculator=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{"../Geo":227}],334:[function(t,e,r){"use strict";var n=t("three"),i=t("rxjs/Subject"),o=function(){function t(t,e,r,n,o,a,s,c){this._disposed=!1,this._key=t,(e<=0||r<=0)&&console.warn("Original image size ("+e+", "+r+") is invalid ("+t+"). Tiles will not be loaded."),this._width=e,this._height=r,this._maxLevel=Math.ceil(Math.log(Math.max(r,e))/Math.log(2)),this._currentLevel=-1,this._tileSize=n,this._updated$=new i.Subject,this._createdSubject$=new i.Subject,this._created$=this._createdSubject$.publishReplay(1).refCount(),this._createdSubscription=this._created$.subscribe(function(){}),this._hasSubject$=new i.Subject,this._has$=this._hasSubject$.startWith(!1).publishReplay(1).refCount(),this._hasSubscription=this._has$.subscribe(function(){}),this._abortFunctions=[],this._tileSubscriptions={},this._renderedCurrentLevelTiles={},this._renderedTiles={},this._background=o,this._camera=null,this._imageTileLoader=a,this._imageTileStore=s,this._renderer=c,this._renderTarget=null,this._roi=null}return Object.defineProperty(t.prototype,"disposed",{get:function(){return this._disposed},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasTexture$",{get:function(){return this._has$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"key",{get:function(){return this._key},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"textureUpdated$",{get:function(){return this._updated$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"textureCreated$",{get:function(){return this._created$},enumerable:!0,configurable:!0}),t.prototype.abort=function(){for(var t in this._tileSubscriptions)this._tileSubscriptions.hasOwnProperty(t)&&this._tileSubscriptions[t].unsubscribe();this._tileSubscriptions={};for(var e=0,r=this._abortFunctions;e<r.length;e++){(0,r[e])()}this._abortFunctions=[]},t.prototype.dispose=function(){if(this._disposed)return void console.warn("Texture already disposed ("+this._key+")");this.abort(),null!=this._renderTarget&&(this._renderTarget.dispose(),this._renderTarget=null),this._imageTileStore.dispose(),this._imageTileStore=null,this._background=null,this._camera=null,this._imageTileLoader=null,this._renderer=null,this._roi=null,this._createdSubscription.unsubscribe(),this._hasSubscription.unsubscribe(),this._disposed=!0},t.prototype.setRegionOfInterest=function(t){if(!(this._width<=0||this._height<=0)){this._roi=t;var e=1/this._roi.pixelWidth,r=1/this._roi.pixelHeight,i=Math.max(r,e),o=Math.max(0,Math.min(this._maxLevel,Math.round(Math.log(i)/Math.log(2))));if(o!==this._currentLevel){this.abort(),this._currentLevel=o,this._currentLevel in this._renderedTiles||(this._renderedTiles[this._currentLevel]=[]),this._renderedCurrentLevelTiles={};for(var a=0,s=this._renderedTiles[this._currentLevel];a<s.length;a++){var c=s[a];this._renderedCurrentLevelTiles[this._tileKey(c)]=!0}}var u=this._getTileCoords([this._roi.bbox.minX,this._roi.bbox.minY]),h=this._getTileCoords([this._roi.bbox.maxX,this._roi.bbox.maxY]),l=this._getTiles(u,h);if(null==this._camera){this._camera=new n.OrthographicCamera(-this._width/2,this._width/2,this._height/2,-this._height/2,-1,1),this._camera.position.z=1;var p=this._renderer.getContext(),f=p.getParameter(p.MAX_TEXTURE_SIZE),d=Math.max(this._width,this._height),m=f>d?1:f/d,v=Math.floor(m*this._width),g=Math.floor(m*this._height);this._renderTarget=new n.WebGLRenderTarget(v,g,{depthBuffer:!1,format:n.RGBFormat,magFilter:n.LinearFilter,minFilter:n.LinearFilter,stencilBuffer:!1}),this._renderToTarget(0,0,this._width,this._height,this._background),this._createdSubject$.next(this._renderTarget.texture),this._hasSubject$.next(!0)}this._fetchTiles(l)}},t.prototype.updateBackground=function(t){this._background=t},t.prototype._fetchTile=function(t,e,r,n,i,o,a,s){var c=this,u=this._imageTileLoader.getTile(this._key,r,n,i,o,a,s),h=u[0],l=u[1];this._abortFunctions.push(l);var p=this._tileKey(t),f=h.subscribe(function(a){c._renderToTarget(r,n,i,o,a),c._removeFromDictionary(p,c._tileSubscriptions),c._removeFromArray(l,c._abortFunctions),c._setTileRendered(t,c._currentLevel),c._imageTileStore.addImage(a,p,e),c._updated$.next(!0)},function(t){c._removeFromDictionary(p,c._tileSubscriptions),c._removeFromArray(l,c._abortFunctions),console.error(t)});f.closed||(this._tileSubscriptions[p]=f)},t.prototype._fetchTiles=function(t){for(var e=this._tileSize*Math.pow(2,this._maxLevel-this._currentLevel),r=0,n=t;r<n.length;r++){var i=n[r],o=this._tileKey(i);if(!(o in this._renderedCurrentLevelTiles||o in this._tileSubscriptions)){var a=e*i[0],s=e*i[1],c=a+e>this._width?this._width-a:e,u=s+e>this._height?this._height-s:e;if(this._imageTileStore.hasImage(o,this._currentLevel))this._renderToTarget(a,s,c,u,this._imageTileStore.getImage(o,this._currentLevel)),this._setTileRendered(i,this._currentLevel),this._updated$.next(!0);else{var h=Math.floor(c/e*this._tileSize),l=Math.floor(u/e*this._tileSize);this._fetchTile(i,this._currentLevel,a,s,c,u,h,l)}}}},t.prototype._getTileCoords=function(t){var e=this._tileSize*Math.pow(2,this._maxLevel-this._currentLevel),r=Math.ceil(this._width/e)-1,n=Math.ceil(this._height/e)-1;return[Math.min(Math.floor(this._width*t[0]/e),r),Math.min(Math.floor(this._height*t[1]/e),n)]},t.prototype._getTiles=function(t,e){var r=[];if(t[0]>e[0]){for(var n=this._tileSize*Math.pow(2,this._maxLevel-this._currentLevel),i=Math.ceil(this._width/n)-1,o=t[0];o<=i;o++)r.push(o);for(var o=0;o<=e[0];o++)r.push(o)}else for(var o=t[0];o<=e[0];o++)r.push(o);for(var a=[],s=0,c=r;s<c.length;s++)for(var o=c[s],u=t[1];u<=e[1];u++)a.push([o,u]);return a},t.prototype._removeFromArray=function(t,e){var r=e.indexOf(t);r!==-1&&e.splice(r,1)},t.prototype._removeFromDictionary=function(t,e){t in e&&delete e[t]},t.prototype._renderToTarget=function(t,e,r,i,o){var a=new n.Texture(o);a.minFilter=n.LinearFilter,a.needsUpdate=!0;var s=new n.PlaneGeometry(r,i),c=new n.MeshBasicMaterial({map:a,side:n.FrontSide}),u=new n.Mesh(s,c);u.position.x=-this._width/2+t+r/2,u.position.y=this._height/2-e-i/2;var h=new n.Scene;h.add(u),this._renderer.render(h,this._camera,this._renderTarget),this._renderer.setRenderTarget(void 0),h.remove(u),s.dispose(),c.dispose(),a.dispose()},t.prototype._setTileRendered=function(t,e){for(var r=Object.keys(this._renderedTiles).map(function(t){return parseInt(t,10)}).filter(function(t){return t!==e}),n=0,i=r;n<i.length;n++){var o=i[n],a=Math.pow(2,o-e);if(o<e)for(var s=Math.floor(a*t[0]),c=Math.floor(a*t[1]),u=0,h=this._renderedTiles[o].slice();u<h.length;u++){var l=h[u];if(l[0]===s&&l[1]===c){var p=this._renderedTiles[o].indexOf(l);this._renderedTiles[o].splice(p,1)}}else for(var f=a*t[0],d=f+a-1,m=a*t[1],v=m+a-1,g=0,y=this._renderedTiles[o].slice();g<y.length;g++){var l=y[g];if(l[0]>=f&&l[0]<=d&&l[1]>=m&&l[1]<=v){var p=this._renderedTiles[o].indexOf(l);this._renderedTiles[o].splice(p,1)}}0===this._renderedTiles[o].length&&delete this._renderedTiles[o]}this._renderedTiles[e].push(t),this._renderedCurrentLevelTiles[this._tileKey(t)]=!0},t.prototype._tileKey=function(t){return t[0]+"-"+t[1]},t}();r.TextureProvider=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"rxjs/Subject":33,three:174}],335:[function(t,e,r){"use strict";var n=function(){function t(){this._events={}}return t.prototype.on=function(t,e){this._events[t]=this._events[t]||[],this._events[t].push(e)},t.prototype.off=function(t,e){if(!t)return void(this._events={});if(this._listens(t))delete this._events[t];else{var r=this._events[t].indexOf(e);r>=0&&this._events[t].splice(r,1),this._events[t].length&&delete this._events[t]}},t.prototype.fire=function(t,e){if(this._listens(t))for(var r=0,n=this._events[t];r<n.length;r++){var i=n[r];i.call(this,e)}},t.prototype._listens=function(t){return!(!this._events||!this._events[t])},t}();r.EventEmitter=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],336:[function(t,e,r){"use strict";var n=t("../Viewer"),i=function(){function t(){}return t.setOptions=function(e){t._baseImageSize=null!=e.baseImageSize?e.baseImageSize:n.ImageSize.Size640,t._basePanoramaSize=null!=e.basePanoramaSize?e.basePanoramaSize:n.ImageSize.Size2048,t._maxImageSize=null!=e.maxImageSize?e.maxImageSize:n.ImageSize.Size2048},Object.defineProperty(t,"baseImageSize",{get:function(){return t._baseImageSize},enumerable:!0,configurable:!0}),Object.defineProperty(t,"basePanoramaSize",{get:function(){return t._basePanoramaSize},enumerable:!0,configurable:!0}),Object.defineProperty(t,"maxImageSize",{get:function(){return t._maxImageSize},enumerable:!0,configurable:!0}),t}();r.Settings=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{"../Viewer":234}],337:[function(t,e,r){"use strict";var n=function(){function t(){}return Object.defineProperty(t,"tileScheme",{get:function(){return"https"},enumerable:!0,configurable:!0}),Object.defineProperty(t,"tileDomain",{get:function(){return"d2qb1440i7l50o.cloudfront.net"},enumerable:!0,configurable:!0}),Object.defineProperty(t,"origin",{get:function(){return"mapillary.webgl"},enumerable:!0,configurable:!0}),t.thumbnail=function(t,e){return"https://d1cuyjsrcm0gby.cloudfront.net/"+t+"/thumb-"+e+".jpg?origin="+this.origin},t.falcorModel=function(t){return"https://a.mapillary.com/v3/model.json?client_id="+t},t.protoMesh=function(t){return"https://d1brzeo354iq2l.cloudfront.net/v2/mesh/"+t},t}();r.Urls=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],338:[function(t,e,r){"use strict";t("rxjs/add/operator/bufferCount"),t("rxjs/add/operator/delay"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/map"),t("rxjs/add/operator/switchMap");var n=function(){function t(t,e){this._graphService=t,this._stateService=e,this._started=!1}return Object.defineProperty(t.prototype,"started",{get:function(){return this._started},enumerable:!0,configurable:!0}),t.prototype.start=function(){var t=this;this._started||(this._uncacheSubscription=this._stateService.currentState$.distinctUntilChanged(void 0,function(t){return t.state.currentNode.key}).map(function(t){return t.state.trajectory.map(function(t){return t.key})}).bufferCount(1,5).switchMap(function(e){var r=e[0];return t._graphService.uncache$(r)}).subscribe(function(){}),this._started=!0)},t.prototype.stop=function(){this._started&&(this._uncacheSubscription.unsubscribe(),this._uncacheSubscription=null,this._started=!1)},t}();r.CacheService=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{"rxjs/add/operator/bufferCount":49,"rxjs/add/operator/delay":55,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"rxjs/add/operator/switchMap":78}],339:[function(t,e,r){"use strict";var n=t("../Component"),i=function(){function t(t,e,r,i,o){var a=this;this._container=t,this._observer=r,this._navigator=e,this._options=null!=o?o:{},this._key=i,this._componentService=new n.ComponentService(this._container,this._navigator),this._coverComponent=this._componentService.getCover(),this._initializeComponents(),i?(this._initilizeCoverComponent(),this._subscribeCoverComponent()):this._navigator.movedToKey$.first(function(t){return null!=t}).subscribe(function(t){a._key=t,a._componentService.deactivateCover(),a._coverComponent.configure({key:a._key,loading:!1,visible:!1}),a._subscribeCoverComponent(),a._navigator.stateService.start(),a._observer.startEmit()})}return t.prototype.get=function(t){return this._componentService.get(t)},t.prototype.activate=function(t){this._componentService.activate(t)},t.prototype.activateCover=function(){this._coverComponent.configure({loading:!1,visible:!0})},t.prototype.deactivate=function(t){this._componentService.deactivate(t)},t.prototype.deactivateCover=function(){this._coverComponent.configure({loading:!0,visible:!0})},t.prototype.resize=function(){this._componentService.resize()},t.prototype._initializeComponents=function(){var t=this._options;this._uFalse(t.background,"background"),this._uFalse(t.debug,"debug"),this._uFalse(t.image,"image"),this._uFalse(t.marker,"marker"),this._uFalse(t.navigation,"navigation"),this._uFalse(t.route,"route"),this._uFalse(t.slider,"slider"),this._uFalse(t.tag,"tag"),this._uTrue(t.attribution,"attribution"),this._uTrue(t.bearing,"bearing"),this._uTrue(t.cache,"cache"),this._uTrue(t.direction,"direction"),this._uTrue(t.imagePlane,"imagePlane"),this._uTrue(t.keyboard,"keyboard"),this._uTrue(t.loading,"loading"),this._uTrue(t.mouse,"mouse"),this._uTrue(t.sequence,"sequence"),this._uTrue(t.stats,"stats")},t.prototype._initilizeCoverComponent=function(){var t=this._options;this._coverComponent.configure({key:this._key}),void 0===t.cover||t.cover?this.activateCover():this.deactivateCover()},t.prototype._subscribeCoverComponent=function(){var t=this;this._coverComponent.configuration$.subscribe(function(e){e.loading?t._navigator.stateService.currentKey$.first().switchMap(function(r){return null==r||r!==e.key?t._navigator.moveToKey$(e.key):t._navigator.stateService.currentNode$.first()}).subscribe(function(e){t._navigator.stateService.start(),t._observer.startEmit(),t._coverComponent.configure({loading:!1,visible:!1}),t._componentService.deactivateCover()},function(e){console.error("Failed to deactivate cover.",e),t._coverComponent.configure({loading:!1,visible:!0})}):e.visible&&(t._observer.stopEmit(),t._navigator.stateService.stop(),t._componentService.activateCover())})},t.prototype._uFalse=function(t,e){return void 0===t?void this._componentService.deactivate(e):"boolean"==typeof t?void(t?this._componentService.activate(e):this._componentService.deactivate(e)):(this._componentService.configure(e,t),void this._componentService.activate(e))},t.prototype._uTrue=function(t,e){return void 0===t?void this._componentService.activate(e):"boolean"==typeof t?void(t?this._componentService.activate(e):this._componentService.deactivate(e)):(this._componentService.configure(e,t),void this._componentService.activate(e))},t}();r.ComponentController=i},{"../Component":224}],340:[function(t,e,r){"use strict";var n=t("../Render"),i=t("../Viewer"),o=function(){function t(t,e,r){this.id=t,this._container=document.getElementById(t),this._container.classList.add("mapillary-js"),this._canvasContainer=document.createElement("div"),this._canvasContainer.className="mapillary-js-interactive",this._container.appendChild(this._canvasContainer),this.renderService=new n.RenderService(this._container,e.currentState$,r.renderMode),this.glRenderer=new n.GLRenderer(this._canvasContainer,this.renderService),this.domRenderer=new n.DOMRenderer(this._container,this.renderService,e.currentState$),this.mouseService=new i.MouseService(this._canvasContainer,this._container),this.touchService=new i.TouchService(this._canvasContainer),this.spriteService=new i.SpriteService(r.sprite)}return Object.defineProperty(t.prototype,"element",{get:function(){return this._container},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"canvasContainer",{get:function(){return this.canvasContainer},enumerable:!0,configurable:!0}),t}();r.Container=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../Render":230,"../Viewer":234}],341:[function(t,e,r){"use strict";!function(t){t[t.Size320=320]="Size320",t[t.Size640=640]="Size640",t[t.Size1024=1024]="Size1024",t[t.Size2048=2048]="Size2048"}(r.ImageSize||(r.ImageSize={}))},{}],342:[function(t,e,r){"use strict";var n=t("underscore"),i=t("rxjs/Subject");t("rxjs/add/operator/debounceTime"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/map"),t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/startWith");var o=function(){function t(){this._loadersSubject$=new i.Subject,this._loaders$=this._loadersSubject$.scan(function(t,e){return void 0!==e.task&&(t[e.task]=e.loading),t},{}).startWith({}).publishReplay(1).refCount()}return Object.defineProperty(t.prototype,"loading$",{get:function(){return this._loaders$.map(function(t){return n.reduce(t,function(t,e){return t||e},!1)}).debounceTime(100).distinctUntilChanged()},enumerable:!0,configurable:!0}),t.prototype.taskLoading$=function(t){return this._loaders$.map(function(e){return!!e[t]}).debounceTime(100).distinctUntilChanged()},t.prototype.startLoading=function(t){this._loadersSubject$.next({loading:!0,task:t})},t.prototype.stopLoading=function(t){this._loadersSubject$.next({loading:!1,task:t})},t}();r.LoadingService=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"rxjs/Subject":33,"rxjs/add/operator/debounceTime":54,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77,underscore:175}],343:[function(t,e,r){"use strict";var n=t("rxjs/BehaviorSubject"),i=t("rxjs/Observable"),o=t("rxjs/Subject");t("rxjs/add/observable/fromEvent"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/merge"),t("rxjs/add/operator/mergeMap"),t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/switchMap"),t("rxjs/add/operator/withLatestFrom");var a=t("../Geo"),s=function(){function t(t,e,r){var s=this;this._canvasContainer=t,this._container=e,this._viewportCoords=null!=r?r:new a.ViewportCoords,this._activeSubject$=new n.BehaviorSubject(!1),
-this._active$=this._activeSubject$.distinctUntilChanged().publishReplay(1).refCount(),this._claimMouse$=new o.Subject,this._documentMouseDown$=i.Observable.fromEvent(document,"mousedown").filter(function(t){return s._viewportCoords.insideElement(t,s._container)}).share(),this._documentMouseMove$=i.Observable.fromEvent(document,"mousemove"),this._documentMouseUp$=i.Observable.fromEvent(document,"mouseup"),this._documentCanvasMouseMove$=this._documentMouseMove$.filter(function(t){return s._viewportCoords.insideElement(t,s._container)}).share(),this._mouseDown$=i.Observable.fromEvent(t,"mousedown"),this._mouseLeave$=i.Observable.fromEvent(t,"mouseleave"),this._mouseMove$=i.Observable.fromEvent(t,"mousemove"),this._mouseUp$=i.Observable.fromEvent(t,"mouseup"),this._mouseOut$=i.Observable.fromEvent(t,"mouseout"),this._mouseOver$=i.Observable.fromEvent(t,"mouseover"),this._click$=i.Observable.fromEvent(t,"click"),this._dblClick$=i.Observable.fromEvent(t,"dblclick"),this._dblClick$.subscribe(function(t){t.preventDefault()}),this._contextMenu$=i.Observable.fromEvent(t,"contextmenu"),this._contextMenu$.subscribe(function(t){t.preventDefault()}),this._mouseWheel$=i.Observable.fromEvent(document,"wheel").filter(function(t){return s._viewportCoords.insideElement(t,s._container)}).share(),this._consistentContextMenu$=i.Observable.merge(this._mouseDown$,this._mouseMove$,this._mouseOut$,this._mouseUp$,this._contextMenu$).bufferCount(3,1).filter(function(t){return"mousedown"===t[0].type&&"contextmenu"===t[1].type&&"mouseup"===t[2].type}).map(function(t){return t[1]}).share();var c=i.Observable.merge(this._documentMouseUp$.filter(function(t){return 0===t.button})).share(),u=this._mouseDown$.filter(function(t){return 0===t.button}).share();this._mouseDragStart$=u.mergeMap(function(t){return s._documentMouseMove$.takeUntil(c).take(1)}),this._mouseDrag$=u.mergeMap(function(t){return s._documentMouseMove$.skip(1).takeUntil(c)}),this._mouseDragEnd$=this._mouseDragStart$.mergeMap(function(t){return c.first()}),this._documentCanvasMouseDown$=this._documentMouseDown$.filter(function(t){return s._viewportCoords.insideElement(t,s._container)}).share();var h=this._documentCanvasMouseDown$.filter(function(t){return 0===t.button}).share();this._documentCanvasMouseDragStart$=h.mergeMap(function(t){return s._documentCanvasMouseMove$.takeUntil(c).take(1)}),this._documentCanvasMouseDrag$=h.mergeMap(function(t){return s._documentCanvasMouseMove$.skip(1).takeUntil(c)}),this._documentCanvasMouseDragEnd$=this._documentCanvasMouseDragStart$.mergeMap(function(t){return c.first()}),this._staticClick$=this._mouseDown$.switchMap(function(t){return s._click$.takeUntil(s._mouseMove$).take(1)}),this._mouseOwner$=this._claimMouse$.scan(function(t,e){return null==e.zindex?delete t[e.name]:t[e.name]=e.zindex,t},{}).map(function(t){var e=null,r=-1;for(var n in t)t.hasOwnProperty(n)&&t[n]>r&&(r=t[n],e=n);return e}).publishReplay(1).refCount(),this._mouseOwner$.subscribe(function(){})}return Object.defineProperty(t.prototype,"active$",{get:function(){return this._active$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"activate$",{get:function(){return this._activeSubject$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"documentCanvasMouseDown$",{get:function(){return this._documentCanvasMouseDown$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"documentCanvasMouseMove$",{get:function(){return this._documentCanvasMouseMove$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"documentCanvasMouseDragStart$",{get:function(){return this._documentCanvasMouseDragStart$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"documentCanvasMouseDrag$",{get:function(){return this._documentCanvasMouseDrag$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"documentCanvasMouseDragEnd$",{get:function(){return this._documentCanvasMouseDragEnd$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"documentMouseMove$",{get:function(){return this._documentMouseMove$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"documentMouseUp$",{get:function(){return this._documentMouseUp$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseOwner$",{get:function(){return this._mouseOwner$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseDown$",{get:function(){return this._mouseDown$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseMove$",{get:function(){return this._mouseMove$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseLeave$",{get:function(){return this._mouseLeave$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseOut$",{get:function(){return this._mouseOut$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseOver$",{get:function(){return this._mouseOver$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseUp$",{get:function(){return this._mouseUp$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"click$",{get:function(){return this._click$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"dblClick$",{get:function(){return this._dblClick$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"contextMenu$",{get:function(){return this._consistentContextMenu$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseWheel$",{get:function(){return this._mouseWheel$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseDragStart$",{get:function(){return this._mouseDragStart$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseDrag$",{get:function(){return this._mouseDrag$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseDragEnd$",{get:function(){return this._mouseDragEnd$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"staticClick$",{get:function(){return this._staticClick$},enumerable:!0,configurable:!0}),t.prototype.claimMouse=function(t,e){this._claimMouse$.next({name:t,zindex:e})},t.prototype.unclaimMouse=function(t){this._claimMouse$.next({name:t,zindex:null})},t.prototype.filtered$=function(t,e){return e.withLatestFrom(this.mouseOwner$,function(t,e){return[t,e]}).filter(function(e){return e[1]===t}).map(function(t){return t[0]})},t}();r.MouseService=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../Geo":227,"rxjs/BehaviorSubject":25,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/fromEvent":41,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/withLatestFrom":82}],344:[function(t,e,r){"use strict";var n=t("rxjs/BehaviorSubject"),i=t("rxjs/Observable");t("rxjs/add/observable/throw"),t("rxjs/add/operator/do"),t("rxjs/add/operator/finally"),t("rxjs/add/operator/first"),t("rxjs/add/operator/map"),t("rxjs/add/operator/mergeMap");var o=t("../API"),a=t("../Graph"),s=t("../Edge"),c=t("../State"),u=t("../Viewer"),h=function(){function t(t,e,r,i,s,h,l,p){this._apiV3=null!=r?r:new o.APIv3(t,e),this._imageLoadingService=null!=s?s:new a.ImageLoadingService,this._graphService=null!=i?i:new a.GraphService(new a.Graph(this.apiV3),this._imageLoadingService),this._loadingService=null!=h?h:new u.LoadingService,this._loadingName="navigator",this._stateService=null!=l?l:new c.StateService,this._cacheService=null!=p?p:new u.CacheService(this._graphService,this._stateService),this._cacheService.start(),this._keyRequested$=new n.BehaviorSubject(null),this._movedToKey$=new n.BehaviorSubject(null),this._dirRequested$=new n.BehaviorSubject(null),this._latLonRequested$=new n.BehaviorSubject(null)}return Object.defineProperty(t.prototype,"apiV3",{get:function(){return this._apiV3},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"graphService",{get:function(){return this._graphService},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"imageLoadingService",{get:function(){return this._imageLoadingService},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"keyRequested$",{get:function(){return this._keyRequested$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"loadingService",{get:function(){return this._loadingService},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"movedToKey$",{get:function(){return this._movedToKey$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"stateService",{get:function(){return this._stateService},enumerable:!0,configurable:!0}),t.prototype.moveToKey$=function(t){var e=this;return this.loadingService.startLoading(this._loadingName),this._keyRequested$.next(t),this._graphService.cacheNode$(t).do(function(t){e.stateService.setNodes([t]),e._movedToKey$.next(t.key)}).finally(function(){e.loadingService.stopLoading(e._loadingName)})},t.prototype.moveDir$=function(t){var e=this;return this.loadingService.startLoading(this._loadingName),this._dirRequested$.next(t),this.stateService.currentNode$.first().mergeMap(function(e){return([s.EdgeDirection.Next,s.EdgeDirection.Prev].indexOf(t)>-1?e.sequenceEdges$:e.spatialEdges$).first().map(function(e){for(var r=0,n=e.edges;r<n.length;r++){var i=n[r];if(i.data.direction===t)return i.to}return null})}).mergeMap(function(r){return null==r?(e.loadingService.stopLoading(e._loadingName),i.Observable.throw(new Error("Direction ("+t+") does not exist for current node."))):e.moveToKey$(r)})},t.prototype.moveCloseTo$=function(t,e){var r=this;return this.loadingService.startLoading(this._loadingName),this._latLonRequested$.next({lat:t,lon:e}),this.apiV3.imageCloseTo$(t,e).mergeMap(function(n){return null==n?(r.loadingService.stopLoading(r._loadingName),i.Observable.throw(new Error("No image found close to lat "+t+", lon "+e+"."))):r.moveToKey$(n.key)})},t.prototype.setFilter$=function(t){var e=this;return this._stateService.clearNodes(),this._movedToKey$.first().mergeMap(function(r){return null!=r?e._trajectoryKeys$().mergeMap(function(r){return e._graphService.setFilter$(t).mergeMap(function(t){return e._cacheKeys$(r)})}).last():e._keyRequested$.mergeMap(function(r){return null!=r?e._graphService.setFilter$(t).mergeMap(function(t){return e._graphService.cacheNode$(r)}):e._graphService.setFilter$(t).map(function(t){})})}).map(function(t){})},t.prototype.setToken$=function(t){var e=this;return this._stateService.clearNodes(),this._movedToKey$.first().do(function(r){e._apiV3.setToken(t)}).mergeMap(function(t){return null==t?e._graphService.reset$([]).map(function(t){}):e._trajectoryKeys$().mergeMap(function(t){return e._graphService.reset$(t).mergeMap(function(r){return e._cacheKeys$(t)})}).last().map(function(t){})})},t.prototype._cacheKeys$=function(t){var e=this,r=t.map(function(t){return e._graphService.cacheNode$(t)});return i.Observable.from(r).mergeAll()},t.prototype._trajectoryKeys$=function(){return this._stateService.currentState$.first().map(function(t){return t.state.trajectory.map(function(t){return t.key})})},t}();r.Navigator=h,Object.defineProperty(r,"__esModule",{value:!0}),r.default=h},{"../API":223,"../Edge":225,"../Graph":228,"../State":231,"../Viewer":234,"rxjs/BehaviorSubject":25,"rxjs/Observable":28,"rxjs/add/observable/throw":45,"rxjs/add/operator/do":58,"rxjs/add/operator/finally":61,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/mergeMap":67}],345:[function(t,e,r){"use strict";var n=t("rxjs/Observable");t("rxjs/add/observable/combineLatest"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/map"),t("rxjs/add/operator/throttleTime");var i=t("../Viewer"),o=function(){function t(t,e,r){this._container=r,this._eventEmitter=t,this._navigator=e,this._projection=new i.Projection,this._started=!1}return Object.defineProperty(t.prototype,"started",{get:function(){return this._started},enumerable:!0,configurable:!0}),t.prototype.startEmit=function(){var t=this;if(!this._started){this._started=!0,this._loadingSubscription=this._navigator.loadingService.loading$.subscribe(function(e){t._eventEmitter.fire(i.Viewer.loadingchanged,e)}),this._currentNodeSubscription=this._navigator.stateService.currentNodeExternal$.subscribe(function(e){t._eventEmitter.fire(i.Viewer.nodechanged,e)}),this._sequenceEdgesSubscription=this._navigator.stateService.currentNodeExternal$.switchMap(function(t){return t.sequenceEdges$}).subscribe(function(e){t._eventEmitter.fire(i.Viewer.sequenceedgeschanged,e)}),this._spatialEdgesSubscription=this._navigator.stateService.currentNodeExternal$.switchMap(function(t){return t.spatialEdges$}).subscribe(function(e){t._eventEmitter.fire(i.Viewer.spatialedgeschanged,e)}),this._moveSubscription=n.Observable.combineLatest(this._navigator.stateService.inMotion$,this._container.mouseService.active$,this._container.touchService.active$).map(function(t){return t[0]||t[1]||t[2]}).distinctUntilChanged().subscribe(function(e){e?t._eventEmitter.fire(i.Viewer.movestart,null):t._eventEmitter.fire(i.Viewer.moveend,null)}),this._bearingSubscription=this._container.renderService.bearing$.throttleTime(100).distinctUntilChanged(function(t,e){return Math.abs(e-t)<1}).subscribe(function(e){t._eventEmitter.fire(i.Viewer.bearingchanged,e)});var e=this._container.mouseService.active$.switchMap(function(e){return e?n.Observable.empty():t._container.mouseService.mouseMove$});this._viewerMouseEventSubscription=n.Observable.merge(this._mapMouseEvent$(i.Viewer.click,this._container.mouseService.staticClick$),this._mapMouseEvent$(i.Viewer.contextmenu,this._container.mouseService.contextMenu$),this._mapMouseEvent$(i.Viewer.dblclick,this._container.mouseService.dblClick$),this._mapMouseEvent$(i.Viewer.mousedown,this._container.mouseService.mouseDown$),this._mapMouseEvent$(i.Viewer.mousemove,e),this._mapMouseEvent$(i.Viewer.mouseout,this._container.mouseService.mouseOut$),this._mapMouseEvent$(i.Viewer.mouseover,this._container.mouseService.mouseOver$),this._mapMouseEvent$(i.Viewer.mouseup,this._container.mouseService.mouseUp$)).withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.reference$,this._navigator.stateService.currentTransform$).map(function(e){var r=e[0],n=r[0],i=r[1],o=e[1],a=e[2],s=e[3],c=t._projection.unprojectFromEvent(i,t._container.element,o,a,s);return{basicPoint:c.basicPoint,latLon:c.latLon,originalEvent:i,pixelPoint:c.pixelPoint,target:t._eventEmitter,type:n}}).subscribe(function(e){t._eventEmitter.fire(e.type,e)})}},t.prototype.stopEmit=function(){this.started&&(this._started=!1,this._bearingSubscription.unsubscribe(),this._loadingSubscription.unsubscribe(),this._currentNodeSubscription.unsubscribe(),this._moveSubscription.unsubscribe(),this._sequenceEdgesSubscription.unsubscribe(),this._spatialEdgesSubscription.unsubscribe(),this._viewerMouseEventSubscription.unsubscribe(),this._bearingSubscription=null,this._loadingSubscription=null,this._currentNodeSubscription=null,this._moveSubscription=null,this._sequenceEdgesSubscription=null,this._spatialEdgesSubscription=null,this._viewerMouseEventSubscription=null)},t.prototype.unproject$=function(t){var e=this;return n.Observable.combineLatest(this._container.renderService.renderCamera$,this._navigator.stateService.reference$,this._navigator.stateService.currentTransform$).first().map(function(r){var n=r[0],i=r[1],o=r[2];return e._projection.unprojectFromCanvas(t,e._container.element,n,i,o).latLon})},t.prototype._mapMouseEvent$=function(t,e){return e.map(function(e){return[t,e]})},t}();r.Observer=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../Viewer":234,"rxjs/Observable":28,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"rxjs/add/operator/throttleTime":81}],346:[function(t,e,r){"use strict";var n=t("three"),i=t("../Geo"),o=function(){function t(t,e){this._geoCoords=t?t:new i.GeoCoords,this._viewportCoords=e?e:new i.ViewportCoords}return t.prototype.unprojectFromEvent=function(t,e,r,n,i){var o=this._viewportCoords.canvasPosition(t,e);return this.unprojectFromCanvas(o,e,r,n,i)},t.prototype.unprojectFromCanvas=function(t,e,r,i,o){var a=t[0],s=t[1],c=this._viewportCoords.canvasToViewport(a,s,e),u=c[0],h=c[1],l=new n.Vector3(u,h,1).unproject(r.perspective),p=o.projectBasic(l.toArray());(p[0]<0||p[0]>1||p[1]<0||p[1]>1)&&(p=null);var f=l.clone().sub(r.camera.position).normalize(),d=-2/f.z,m=null;if(d>0&&d<100&&p){var v=f.clone().multiplyScalar(d).add(r.camera.position),g=this._geoCoords.enuToGeodetic(v.x,v.y,v.z,i.lat,i.lon,i.alt).slice(0,2);m={lat:g[0],lon:g[1]}}return{basicPoint:p,latLon:m,pixelPoint:[a,s]}},t}();r.Projection=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../Geo":227,three:174}],347:[function(t,e,r){"use strict";var n;!function(t){t[t.Center=0]="Center",t[t.Start=1]="Start",t[t.End=2]="End"}(n=r.SpriteAlignment||(r.SpriteAlignment={})),Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],348:[function(t,e,r){"use strict";var n=t("three"),i=t("virtual-dom"),o=t("rxjs/Subject");t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/startWith");var a=t("../Viewer"),s=function(){function t(){}return Object.defineProperty(t.prototype,"json",{set:function(t){this._json=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"image",{set:function(t){this._image=t,this._texture=new n.Texture(this._image),this._texture.minFilter=n.NearestFilter},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"loaded",{get:function(){return!(!this._image||!this._json)},enumerable:!0,configurable:!0}),t.prototype.getGLSprite=function(t){if(!this.loaded)throw new Error("Sprites cannot be retrieved before the atlas is loaded.");var e=this._json[t];if(!e)return console.warn("Sprite with key"+t+"does not exist in sprite definition."),new n.Object3D;var r=this._texture.clone();r.needsUpdate=!0;var i=this._image.width,o=this._image.height;r.offset.x=e.x/i,r.offset.y=(o-e.y-e.height)/o,r.repeat.x=e.width/i,r.repeat.y=e.height/o;var a=new n.SpriteMaterial({map:r});return new n.Sprite(a)},t.prototype.getDOMSprite=function(t,e,r){if(!this.loaded)throw new Error("Sprites cannot be retrieved before the atlas is loaded.");null==e&&(e=a.SpriteAlignment.Start),null==r&&(r=a.SpriteAlignment.Start);var n=this._json[t];if(!n)return console.warn("Sprite with key"+t+"does not exist in sprite definition."),i.h("div",{},[]);var o=n.y,s=n.x+n.width,c=n.y+n.height,u=n.x,h=-n.x,l=-n.y,p=this._image.height,f=this._image.width;switch(e){case a.SpriteAlignment.Center:h-=n.width/2;break;case a.SpriteAlignment.End:h-=n.width;break;case a.SpriteAlignment.Start:}switch(r){case a.SpriteAlignment.Center:l-=n.height/2;break;case a.SpriteAlignment.End:l-=n.height;break;case a.SpriteAlignment.Start:}var d=1/n.pixelRatio;o*=d,s*=d,c*=d,u*=d,h*=d,l*=d,p*=d,f*=d;var m={src:this._image.src,style:{clip:"rect("+o+"px, "+s+"px, "+c+"px, "+u+"px)",height:p+"px",left:h+"px",position:"absolute",top:l+"px",width:f+"px"}};return i.h("img",m,[])},t}(),c=function(){function t(t){var e=this;if(this._retina=window.devicePixelRatio>1,this._spriteAtlasOperation$=new o.Subject,this._spriteAtlas$=this._spriteAtlasOperation$.startWith(function(t){return t}).scan(function(t,e){return e(t)},new s).publishReplay(1).refCount(),this._spriteAtlas$.subscribe(function(){}),null!=t){var r=this._retina?"@2x":"",n=new XMLHttpRequest;n.open("GET",t+r+".png",!0),n.responseType="arraybuffer",n.onload=function(){var t=new Image;t.onload=function(){e._spriteAtlasOperation$.next(function(e){return e.image=t,e})};var r=new Blob([n.response]);t.src=window.URL.createObjectURL(r)},n.onerror=function(e){console.error(new Error("Failed to fetch sprite sheet ("+t+r+".png)"))},n.send();var i=new XMLHttpRequest;i.open("GET",t+r+".json",!0),i.responseType="text",i.onload=function(){var t=JSON.parse(i.response);e._spriteAtlasOperation$.next(function(e){return e.json=t,e})},i.onerror=function(e){console.error(new Error("Failed to fetch sheet ("+t+r+".json)"))},i.send()}}return Object.defineProperty(t.prototype,"spriteAtlas$",{get:function(){return this._spriteAtlas$},enumerable:!0,configurable:!0}),t}();r.SpriteService=c,Object.defineProperty(r,"__esModule",{value:!0}),r.default=c},{"../Viewer":234,"rxjs/Subject":33,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77,three:174,"virtual-dom":180}],349:[function(t,e,r){"use strict";var n=t("rxjs/BehaviorSubject"),i=t("rxjs/Observable"),o=t("rxjs/Subject");t("rxjs/add/observable/timer"),t("rxjs/add/operator/bufferWhen"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/merge"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/switchMap");var a=function(){function t(t){var e=this;this._element=t,this._activeSubject$=new n.BehaviorSubject(!1),this._active$=this._activeSubject$.distinctUntilChanged().publishReplay(1).refCount(),this._touchStart$=i.Observable.fromEvent(t,"touchstart"),this._touchMove$=i.Observable.fromEvent(t,"touchmove"),this._touchEnd$=i.Observable.fromEvent(t,"touchend"),this._touchCancel$=i.Observable.fromEvent(t,"touchcancel");var r=this._touchStart$.filter(function(t){return 1===t.touches.length&&1===t.targetTouches.length}).share();this._doubleTap$=r.bufferWhen(function(){return r.first().switchMap(function(t){return i.Observable.timer(300).merge(r).take(1)})}).filter(function(t){return 2===t.length}).map(function(t){return t[t.length-1]}).share(),this._doubleTap$.subscribe(function(t){t.preventDefault()}),this._singleTouchMove$=this._touchMove$.filter(function(t){return 1===t.touches.length&&1===t.targetTouches.length}).share();var a=i.Observable.merge(this._touchStart$,this._touchEnd$,this._touchCancel$).filter(function(t){return 1===t.touches.length&&1===t.targetTouches.length}),s=i.Observable.merge(this._touchStart$,this._touchEnd$,this._touchCancel$).filter(function(t){return t.touches.length>=1}),c=i.Observable.merge(this._touchEnd$,this._touchCancel$).filter(function(t){return 0===t.touches.length});this._singleTouchDragStart$=a.mergeMap(function(t){return e._singleTouchMove$.takeUntil(i.Observable.merge(c,s)).take(1)}),this._singleTouchDragEnd$=a.mergeMap(function(t){return i.Observable.merge(c,s).first()}),this._singleTouchDrag$=a.switchMap(function(t){return e._singleTouchMove$.skip(1).takeUntil(i.Observable.merge(s,c))});var u=i.Observable.merge(this._touchStart$,this._touchEnd$,this._touchCancel$);this._pinchStart$=u.filter(function(t){return 2===t.touches.length&&2===t.targetTouches.length}),this._pinchEnd$=u.filter(function(t){return 2!==t.touches.length||2!==t.targetTouches.length}),this._pinchOperation$=new o.Subject,this._pinch$=this._pinchOperation$.scan(function(t,e){return e(t)},{changeX:0,changeY:0,clientX:0,clientY:0,distance:0,distanceChange:0,distanceX:0,distanceY:0,originalEvent:null,pageX:0,pageY:0,screenX:0,screenY:0,touch1:null,touch2:null}),this._touchMove$.filter(function(t){return 2===t.touches.length&&2===t.targetTouches.length}).map(function(t){return function(e){var r=t.touches[0],n=t.touches[1],i=Math.min(r.clientX,n.clientX),o=Math.max(r.clientX,n.clientX),a=Math.min(r.clientY,n.clientY),s=Math.max(r.clientY,n.clientY),c=i+(o-i)/2,u=a+(s-a)/2,h=c+r.pageX-r.clientX,l=u+r.pageY-r.clientY,p=c+r.screenX-r.clientX,f=u+r.screenY-r.clientY,d=Math.abs(r.clientX-n.clientX),m=Math.abs(r.clientY-n.clientY),v=Math.sqrt(d*d+m*m),g=v-e.distance;return{changeX:d-e.distanceX,changeY:m-e.distanceY,clientX:c,clientY:u,distance:v,distanceChange:g,distanceX:d,distanceY:m,originalEvent:t,pageX:h,pageY:l,screenX:p,screenY:f,touch1:r,touch2:n}}}).subscribe(this._pinchOperation$),this._pinchChange$=this._pinchStart$.switchMap(function(t){return e._pinch$.skip(1).takeUntil(e._pinchEnd$)})}return Object.defineProperty(t.prototype,"active$",{get:function(){return this._active$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"activate$",{get:function(){return this._activeSubject$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"doubleTap$",{get:function(){return this._doubleTap$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"touchStart$",{get:function(){return this._touchStart$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"touchMove$",{get:function(){return this._touchMove$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"touchEnd$",{get:function(){return this._touchEnd$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"touchCancel$",{get:function(){return this._touchCancel$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"singleTouchDragStart$",{get:function(){return this._singleTouchDragStart$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"singleTouchDrag$",{get:function(){return this._singleTouchDrag$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"singleTouchDragEnd$",{get:function(){return this._singleTouchDragEnd$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"pinch$",{get:function(){return this._pinchChange$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"pinchStart$",{get:function(){return this._pinchStart$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"pinchEnd$",{get:function(){return this._pinchEnd$},enumerable:!0,configurable:!0}),t}();r.TouchService=a},{"rxjs/BehaviorSubject":25,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/timer":46,"rxjs/add/operator/bufferWhen":50,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/scan":72,"rxjs/add/operator/switchMap":78}],350:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("when"),o=t("../Viewer"),a=t("../Utils"),s=function(t){function e(e,r,n,i,s){var c=t.call(this)||this;return i=null!=i?i:{},a.Settings.setOptions(i),c._navigator=new o.Navigator(r,s),c._container=new o.Container(e,c._navigator.stateService,i),c._observer=new o.Observer(c,c._navigator,c._container),c._componentController=new o.ComponentController(c._container,c._navigator,c._observer,n,i.component),c}return n(e,t),e.prototype.activateComponent=function(t){this._componentController.activate(t)},e.prototype.activateCover=function(){this._componentController.activateCover()},e.prototype.deactivateComponent=function(t){this._componentController.deactivate(t)},e.prototype.deactivateCover=function(){this._componentController.deactivateCover()},e.prototype.getBearing=function(){var t=this;return i.promise(function(e,r){t._container.renderService.bearing$.first().subscribe(function(t){e(t)},function(t){r(t)})})},e.prototype.getCenter=function(){var t=this;return i.promise(function(e,r){t._navigator.stateService.getCenter().subscribe(function(t){e(t)},function(t){r(t)})})},e.prototype.getComponent=function(t){return this._componentController.get(t)},e.prototype.getZoom=function(){var t=this;return i.promise(function(e,r){t._navigator.stateService.getZoom().subscribe(function(t){e(t)},function(t){r(t)})})},e.prototype.moveCloseTo=function(t,e){var r=this;return i.promise(function(n,i){r._navigator.moveCloseTo$(t,e).subscribe(function(t){n(t)},function(t){i(t)})})},e.prototype.moveDir=function(t){var e=this;return i.promise(function(r,n){e._navigator.moveDir$(t).subscribe(function(t){r(t)},function(t){n(t)})})},e.prototype.moveToKey=function(t){var e=this;return i.promise(function(r,n){e._navigator.moveToKey$(t).subscribe(function(t){r(t)},function(t){n(t)})})},e.prototype.resize=function(){this._container.renderService.resize$.next(null),this._componentController.resize()},e.prototype.setAuthToken=function(t){var e=this;return i.promise(function(r,n){e._navigator.setToken$(t).subscribe(function(){r(void 0)},function(t){n(t)})})},e.prototype.setCenter=function(t){this._navigator.stateService.setCenter(t)},e.prototype.setFilter=function(t){var e=this;return i.promise(function(r,n){e._navigator.setFilter$(t).subscribe(function(){r(void 0)},function(t){n(t)})})},e.prototype.setRenderMode=function(t){this._container.renderService.renderMode$.next(t)},e.prototype.setZoom=function(t){this._navigator.stateService.setZoom(t)},e.prototype.unproject=function(t){var e=this;return i.promise(function(r,n){e._observer.unproject$(t).subscribe(function(t){r(t)},function(t){n(t)})})},e}(a.EventEmitter);s.bearingchanged="bearingchanged",s.click="click",s.contextmenu="contextmenu",s.dblclick="dblclick",s.loadingchanged="loadingchanged",s.mousedown="mousedown",s.mousemove="mousemove",s.mouseout="mouseout",s.mouseover="mouseover",s.mouseup="mouseup",s.moveend="moveend",s.movestart="movestart",s.nodechanged="nodechanged",s.sequenceedgeschanged="sequenceedgeschanged",s.spatialedgeschanged="spatialedgeschanged",r.Viewer=s},{"../Utils":233,"../Viewer":234,when:221}]},{},[229])(229)});
+!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Mapillary=t()}}(function(){var t;return function t(e,r,n){function i(a,s){if(!r[a]){if(!e[a]){var c="function"==typeof require&&require;if(!s&&c)return c(a,!0);if(o)return o(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var h=r[a]={exports:{}};e[a][0].call(h.exports,function(t){var r=e[a][1][t];return i(r||t)},h,h.exports,t,e,r,n)}return r[a].exports}for(var o="function"==typeof require&&require,a=0;a<n.length;a++)i(n[a]);return i}({1:[function(t,e,r){"use strict";function n(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[e-2]?2:"="===t[e-1]?1:0}function i(t){return 3*t.length/4-n(t)}function o(t){var e,r,i,o,a,s,c=t.length;a=n(t),s=new l(3*c/4-a),i=a>0?c-4:c;var u=0;for(e=0,r=0;e<i;e+=4,r+=3)o=h[t.charCodeAt(e)]<<18|h[t.charCodeAt(e+1)]<<12|h[t.charCodeAt(e+2)]<<6|h[t.charCodeAt(e+3)],s[u++]=o>>16&255,s[u++]=o>>8&255,s[u++]=255&o;return 2===a?(o=h[t.charCodeAt(e)]<<2|h[t.charCodeAt(e+1)]>>4,s[u++]=255&o):1===a&&(o=h[t.charCodeAt(e)]<<10|h[t.charCodeAt(e+1)]<<4|h[t.charCodeAt(e+2)]>>2,s[u++]=o>>8&255,s[u++]=255&o),s}function a(t){return u[t>>18&63]+u[t>>12&63]+u[t>>6&63]+u[63&t]}function s(t,e,r){for(var n,i=[],o=e;o<r;o+=3)n=(t[o]<<16)+(t[o+1]<<8)+t[o+2],i.push(a(n));return i.join("")}function c(t){for(var e,r=t.length,n=r%3,i="",o=[],a=0,c=r-n;a<c;a+=16383)o.push(s(t,a,a+16383>c?c:a+16383));return 1===n?(e=t[r-1],i+=u[e>>2],i+=u[e<<4&63],i+="=="):2===n&&(e=(t[r-2]<<8)+t[r-1],i+=u[e>>10],i+=u[e>>4&63],i+=u[e<<2&63],i+="="),o.push(i),o.join("")}r.byteLength=i,r.toByteArray=o,r.fromByteArray=c;for(var u=[],h=[],l="undefined"!=typeof Uint8Array?Uint8Array:Array,p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=0,d=p.length;f<d;++f)u[f]=p[f],h[p.charCodeAt(f)]=f;h["-".charCodeAt(0)]=62,h["_".charCodeAt(0)]=63},{}],2:[function(t,e,r){},{}],3:[function(t,e,r){e.exports=function(t){var e=String.prototype.split,r=/()??/.exec("")[1]===t;return function(n,i,o){if("[object RegExp]"!==Object.prototype.toString.call(i))return e.call(n,i,o);var a,s,c,u,h=[],l=(i.ignoreCase?"i":"")+(i.multiline?"m":"")+(i.extended?"x":"")+(i.sticky?"y":""),p=0,i=new RegExp(i.source,l+"g");for(n+="",r||(a=new RegExp("^"+i.source+"$(?!\\s)",l)),o=o===t?-1>>>0:o>>>0;(s=i.exec(n))&&!((c=s.index+s[0].length)>p&&(h.push(n.slice(p,s.index)),!r&&s.length>1&&s[0].replace(a,function(){for(var e=1;e<arguments.length-2;e++)arguments[e]===t&&(s[e]=t)}),s.length>1&&s.index<n.length&&Array.prototype.push.apply(h,s.slice(1)),u=s[0].length,p=c,h.length>=o));)i.lastIndex===s.index&&i.lastIndex++;return p===n.length?!u&&i.test("")||h.push(""):h.push(n.slice(p)),h.length>o?h.slice(0,o):h}}()},{}],4:[function(t,e,r){function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function o(t){if(l===setTimeout)return setTimeout(t,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(t,0);try{return l(t,0)}catch(e){try{return l.call(null,t,0)}catch(e){return l.call(this,t,0)}}}function a(t){if(p===clearTimeout)return clearTimeout(t);if((p===i||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(t);try{return p(t)}catch(e){try{return p.call(null,t)}catch(e){return p.call(this,t)}}}function s(){v&&d&&(v=!1,d.length?m=d.concat(m):g=-1,m.length&&c())}function c(){if(!v){var t=o(s);v=!0;for(var e=m.length;e;){for(d=m,m=[];++g<e;)d&&d[g].run();g=-1,e=m.length}d=null,v=!1,a(t)}}function u(t,e){this.fun=t,this.array=e}function h(){}var l,p,f=e.exports={};!function(){try{l="function"==typeof setTimeout?setTimeout:n}catch(t){l=n}try{p="function"==typeof clearTimeout?clearTimeout:i}catch(t){p=i}}();var d,m=[],v=!1,g=-1;f.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];m.push(new u(t,e)),1!==m.length||v||o(c)},u.prototype.run=function(){this.fun.apply(null,this.array)},f.title="browser",f.browser=!0,f.env={},f.argv=[],f.version="",f.versions={},f.on=h,f.addListener=h,f.once=h,f.off=h,f.removeListener=h,f.removeAllListeners=h,f.emit=h,f.prependListener=h,f.prependOnceListener=h,f.listeners=function(t){return[]},f.binding=function(t){throw new Error("process.binding is not supported")},f.cwd=function(){return"/"},f.chdir=function(t){throw new Error("process.chdir is not supported")},f.umask=function(){return 0}},{}],5:[function(t,e,r){(function(e){"use strict";function n(){return o.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function i(t,e){if(n()<e)throw new RangeError("Invalid typed array length");return o.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e),t.__proto__=o.prototype):(null===t&&(t=new o(e)),t.length=e),t}function o(t,e,r){if(!(o.TYPED_ARRAY_SUPPORT||this instanceof o))return new o(t,e,r);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return u(this,t)}return a(this,t,e,r)}function a(t,e,r,n){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?p(t,e,r,n):"string"==typeof e?h(t,e,r):f(t,e)}function s(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function c(t,e,r,n){return s(e),e<=0?i(t,e):void 0!==r?"string"==typeof n?i(t,e).fill(r,n):i(t,e).fill(r):i(t,e)}function u(t,e){if(s(e),t=i(t,e<0?0:0|d(e)),!o.TYPED_ARRAY_SUPPORT)for(var r=0;r<e;++r)t[r]=0;return t}function h(t,e,r){if("string"==typeof r&&""!==r||(r="utf8"),!o.isEncoding(r))throw new TypeError('"encoding" must be a valid string encoding');var n=0|v(e,r);t=i(t,n);var a=t.write(e,r);return a!==n&&(t=t.slice(0,a)),t}function l(t,e){var r=e.length<0?0:0|d(e.length);t=i(t,r);for(var n=0;n<r;n+=1)t[n]=255&e[n];return t}function p(t,e,r,n){if(e.byteLength,r<0||e.byteLength<r)throw new RangeError("'offset' is out of bounds");if(e.byteLength<r+(n||0))throw new RangeError("'length' is out of bounds");return e=void 0===r&&void 0===n?new Uint8Array(e):void 0===n?new Uint8Array(e,r):new Uint8Array(e,r,n),o.TYPED_ARRAY_SUPPORT?(t=e,t.__proto__=o.prototype):t=l(t,e),t}function f(t,e){if(o.isBuffer(e)){var r=0|d(e.length);return t=i(t,r),0===t.length?t:(e.copy(t,0,0,r),t)}if(e){if("undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return"number"!=typeof e.length||Y(e.length)?i(t,0):l(t,e);if("Buffer"===e.type&&J(e.data))return l(t,e.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function d(t){if(t>=n())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+n().toString(16)+" bytes");return 0|t}function m(t){return+t!=t&&(t=0),o.alloc(+t)}function v(t,e){if(o.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return V(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return q(t).length;default:if(n)return V(t).length;e=(""+e).toLowerCase(),n=!0}}function g(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if(r>>>=0,e>>>=0,r<=e)return"";for(t||(t="utf8");;)switch(t){case"hex":return R(this,e,r);case"utf8":case"utf-8":return O(this,e,r);case"ascii":return A(this,e,r);case"latin1":case"binary":return j(this,e,r);case"base64":return C(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function y(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function b(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=o.from(e,n)),o.isBuffer(e))return 0===e.length?-1:_(t,e,r,n,i);if("number"==typeof e)return e&=255,o.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):_(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function _(t,e,r,n,i){function o(t,e){return 1===a?t[e]:t.readUInt16BE(e*a)}var a=1,s=t.length,c=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;a=2,s/=2,c/=2,r/=2}var u;if(i){var h=-1;for(u=r;u<s;u++)if(o(t,u)===o(e,-1===h?0:u-h)){if(-1===h&&(h=u),u-h+1===c)return h*a}else-1!==h&&(u-=u-h),h=-1}else for(r+c>s&&(r=s-c),u=r;u>=0;u--){for(var l=!0,p=0;p<c;p++)if(o(t,u+p)!==o(e,p)){l=!1;break}if(l)return u}return-1}function x(t,e,r,n){r=Number(r)||0;var i=t.length-r;n?(n=Number(n))>i&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var a=0;a<n;++a){var s=parseInt(e.substr(2*a,2),16);if(isNaN(s))return a;t[r+a]=s}return a}function w(t,e,r,n){return X(V(e,t.length-r),t,r,n)}function S(t,e,r,n){return X(H(e),t,r,n)}function M(t,e,r,n){return S(t,e,r,n)}function E(t,e,r,n){return X(q(e),t,r,n)}function T(t,e,r,n){return X(W(e,t.length-r),t,r,n)}function C(t,e,r){return 0===e&&r===t.length?K.fromByteArray(t):K.fromByteArray(t.slice(e,r))}function O(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i<r;){var o=t[i],a=null,s=o>239?4:o>223?3:o>191?2:1;if(i+s<=r){var c,u,h,l;switch(s){case 1:o<128&&(a=o);break;case 2:c=t[i+1],128==(192&c)&&(l=(31&o)<<6|63&c)>127&&(a=l);break;case 3:c=t[i+1],u=t[i+2],128==(192&c)&&128==(192&u)&&(l=(15&o)<<12|(63&c)<<6|63&u)>2047&&(l<55296||l>57343)&&(a=l);break;case 4:c=t[i+1],u=t[i+2],h=t[i+3],128==(192&c)&&128==(192&u)&&128==(192&h)&&(l=(15&o)<<18|(63&c)<<12|(63&u)<<6|63&h)>65535&&l<1114112&&(a=l)}}null===a?(a=65533,s=1):a>65535&&(a-=65536,n.push(a>>>10&1023|55296),a=56320|1023&a),n.push(a),i+=s}return P(n)}function P(t){var e=t.length;if(e<=Q)return String.fromCharCode.apply(String,t);for(var r="",n=0;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=Q));return r}function A(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function j(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function R(t,e,r){var n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);for(var i="",o=e;o<r;++o)i+=$(t[o]);return i}function L(t,e,r){for(var n=t.slice(e,r),i="",o=0;o<n.length;o+=2)i+=String.fromCharCode(n[o]+256*n[o+1]);return i}function N(t,e,r){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>r)throw new RangeError("Trying to access beyond buffer length")}function I(t,e,r,n,i,a){if(!o.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||e<a)throw new RangeError('"value" argument is out of bounds');if(r+n>t.length)throw new RangeError("Index out of range")}function D(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,o=Math.min(t.length-r,2);i<o;++i)t[r+i]=(e&255<<8*(n?i:1-i))>>>8*(n?i:1-i)}function k(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,o=Math.min(t.length-r,4);i<o;++i)t[r+i]=e>>>8*(n?i:3-i)&255}function F(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function U(t,e,r,n,i){return i||F(t,e,r,4,3.4028234663852886e38,-3.4028234663852886e38),Z.write(t,e,r,n,23,4),r+4}function B(t,e,r,n,i){return i||F(t,e,r,8,1.7976931348623157e308,-1.7976931348623157e308),Z.write(t,e,r,n,52,8),r+8}function z(t){if(t=G(t).replace(tt,""),t.length<2)return"";for(;t.length%4!=0;)t+="=";return t}function G(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function $(t){return t<16?"0"+t.toString(16):t.toString(16)}function V(t,e){e=e||1/0;for(var r,n=t.length,i=null,o=[],a=0;a<n;++a){if((r=t.charCodeAt(a))>55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(a+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function H(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}function W(t,e){for(var r,n,i,o=[],a=0;a<t.length&&!((e-=2)<0);++a)r=t.charCodeAt(a),n=r>>8,i=r%256,o.push(i),o.push(n);return o}function q(t){return K.toByteArray(z(t))}function X(t,e,r,n){for(var i=0;i<n&&!(i+r>=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function Y(t){return t!==t}var K=t("base64-js"),Z=t("ieee754"),J=t("isarray");r.Buffer=o,r.SlowBuffer=m,r.INSPECT_MAX_BYTES=50,o.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}(),r.kMaxLength=n(),o.poolSize=8192,o._augment=function(t){return t.__proto__=o.prototype,t},o.from=function(t,e,r){return a(null,t,e,r)},o.TYPED_ARRAY_SUPPORT&&(o.prototype.__proto__=Uint8Array.prototype,o.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&o[Symbol.species]===o&&Object.defineProperty(o,Symbol.species,{value:null,configurable:!0})),o.alloc=function(t,e,r){return c(null,t,e,r)},o.allocUnsafe=function(t){return u(null,t)},o.allocUnsafeSlow=function(t){return u(null,t)},o.isBuffer=function(t){return!(null==t||!t._isBuffer)},o.compare=function(t,e){if(!o.isBuffer(t)||!o.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var r=t.length,n=e.length,i=0,a=Math.min(r,n);i<a;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0},o.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},o.concat=function(t,e){if(!J(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return o.alloc(0);var r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;var n=o.allocUnsafe(e),i=0;for(r=0;r<t.length;++r){var a=t[r];if(!o.isBuffer(a))throw new TypeError('"list" argument must be an Array of Buffers');a.copy(n,i),i+=a.length}return n},o.byteLength=v,o.prototype._isBuffer=!0,o.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)y(this,e,e+1);return this},o.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)y(this,e,e+3),y(this,e+1,e+2);return this},o.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)y(this,e,e+7),y(this,e+1,e+6),y(this,e+2,e+5),y(this,e+3,e+4);return this},o.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?O(this,0,t):g.apply(this,arguments)},o.prototype.equals=function(t){if(!o.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===o.compare(this,t)},o.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),"<Buffer "+t+">"},o.prototype.compare=function(t,e,r,n,i){if(!o.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(e>>>=0,r>>>=0,n>>>=0,i>>>=0,this===t)return 0;for(var a=i-n,s=r-e,c=Math.min(a,s),u=this.slice(n,i),h=t.slice(e,r),l=0;l<c;++l)if(u[l]!==h[l]){a=u[l],s=h[l];break}return a<s?-1:s<a?1:0},o.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},o.prototype.indexOf=function(t,e,r){return b(this,t,e,r,!0)},o.prototype.lastIndexOf=function(t,e,r){return b(this,t,e,r,!1)},o.prototype.write=function(t,e,r,n){if(void 0===e)n="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(r)?(r|=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return x(this,t,e,r);case"utf8":case"utf-8":return w(this,t,e,r);case"ascii":return S(this,t,e,r);case"latin1":case"binary":return M(this,t,e,r);case"base64":return E(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return T(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var Q=4096;o.prototype.slice=function(t,e){var r=this.length;t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);var n;if(o.TYPED_ARRAY_SUPPORT)n=this.subarray(t,e),n.__proto__=o.prototype;else{var i=e-t;n=new o(i,void 0);for(var a=0;a<i;++a)n[a]=this[a+t]}return n},o.prototype.readUIntLE=function(t,e,r){t|=0,e|=0,r||N(t,e,this.length);for(var n=this[t],i=1,o=0;++o<e&&(i*=256);)n+=this[t+o]*i;return n},o.prototype.readUIntBE=function(t,e,r){t|=0,e|=0,r||N(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},o.prototype.readUInt8=function(t,e){return e||N(t,1,this.length),this[t]},o.prototype.readUInt16LE=function(t,e){return e||N(t,2,this.length),this[t]|this[t+1]<<8},o.prototype.readUInt16BE=function(t,e){return e||N(t,2,this.length),this[t]<<8|this[t+1]},o.prototype.readUInt32LE=function(t,e){return e||N(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},o.prototype.readUInt32BE=function(t,e){return e||N(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},o.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||N(t,e,this.length);for(var n=this[t],i=1,o=0;++o<e&&(i*=256);)n+=this[t+o]*i;return i*=128,n>=i&&(n-=Math.pow(2,8*e)),n},o.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||N(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},o.prototype.readInt8=function(t,e){return e||N(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},o.prototype.readInt16LE=function(t,e){e||N(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt16BE=function(t,e){e||N(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt32LE=function(t,e){return e||N(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},o.prototype.readInt32BE=function(t,e){return e||N(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},o.prototype.readFloatLE=function(t,e){return e||N(t,4,this.length),Z.read(this,t,!0,23,4)},o.prototype.readFloatBE=function(t,e){return e||N(t,4,this.length),Z.read(this,t,!1,23,4)},o.prototype.readDoubleLE=function(t,e){return e||N(t,8,this.length),Z.read(this,t,!0,52,8)},o.prototype.readDoubleBE=function(t,e){return e||N(t,8,this.length),Z.read(this,t,!1,52,8)},o.prototype.writeUIntLE=function(t,e,r,n){if(t=+t,e|=0,r|=0,!n){I(this,t,e,r,Math.pow(2,8*r)-1,0)}var i=1,o=0;for(this[e]=255&t;++o<r&&(i*=256);)this[e+o]=t/i&255;return e+r},o.prototype.writeUIntBE=function(t,e,r,n){if(t=+t,e|=0,r|=0,!n){I(this,t,e,r,Math.pow(2,8*r)-1,0)}var i=r-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+r},o.prototype.writeUInt8=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,1,255,0),o.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},o.prototype.writeUInt16LE=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,2,65535,0),o.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):D(this,t,e,!0),e+2},o.prototype.writeUInt16BE=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,2,65535,0),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):D(this,t,e,!1),e+2},o.prototype.writeUInt32LE=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,4,4294967295,0),o.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):k(this,t,e,!0),e+4},o.prototype.writeUInt32BE=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,4,4294967295,0),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):k(this,t,e,!1),e+4},o.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);I(this,t,e,r,i-1,-i)}var o=0,a=1,s=0;for(this[e]=255&t;++o<r&&(a*=256);)t<0&&0===s&&0!==this[e+o-1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+r},o.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);I(this,t,e,r,i-1,-i)}var o=r-1,a=1,s=0;for(this[e+o]=255&t;--o>=0&&(a*=256);)t<0&&0===s&&0!==this[e+o+1]&&(s=1),this[e+o]=(t/a>>0)-s&255;return e+r},o.prototype.writeInt8=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,1,127,-128),o.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},o.prototype.writeInt16LE=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,2,32767,-32768),o.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):D(this,t,e,!0),e+2},o.prototype.writeInt16BE=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,2,32767,-32768),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):D(this,t,e,!1),e+2},o.prototype.writeInt32LE=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,4,2147483647,-2147483648),o.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):k(this,t,e,!0),e+4},o.prototype.writeInt32BE=function(t,e,r){return t=+t,e|=0,r||I(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),o.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):k(this,t,e,!1),e+4},o.prototype.writeFloatLE=function(t,e,r){return U(this,t,e,!0,r)},o.prototype.writeFloatBE=function(t,e,r){return U(this,t,e,!1,r)},o.prototype.writeDoubleLE=function(t,e,r){return B(this,t,e,!0,r)},o.prototype.writeDoubleBE=function(t,e,r){return B(this,t,e,!1,r)},o.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);var i,a=n-r;if(this===t&&r<e&&e<n)for(i=a-1;i>=0;--i)t[i+e]=this[i+r];else if(a<1e3||!o.TYPED_ARRAY_SUPPORT)for(i=0;i<a;++i)t[i+e]=this[i+r];else Uint8Array.prototype.set.call(t,this.subarray(r,r+a),e);return a},o.prototype.fill=function(t,e,r,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!o.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<r)throw new RangeError("Out of range index");if(r<=e)return this;e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0);var a;if("number"==typeof t)for(a=e;a<r;++a)this[a]=t;else{var s=o.isBuffer(t)?t:V(new o(t,n).toString()),c=s.length;for(a=0;a<r-e;++a)this[a+e]=s[a%c]}return this};var tt=/[^+\/0-9A-Za-z-_]/g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":1,ieee754:15,isarray:19}],6:[function(t,e,r){"use strict";function n(t,e,r){r=r||2;var n=e&&e.length,o=n?e[0]*r:t.length,s=i(t,0,o,r,!0),c=[];if(!s)return c;var u,h,p,f,d,m,v;if(n&&(s=l(t,e,s,r)),t.length>80*r){u=p=t[0],h=f=t[1];for(var g=r;g<o;g+=r)d=t[g],m=t[g+1],d<u&&(u=d),m<h&&(h=m),d>p&&(p=d),m>f&&(f=m);v=Math.max(p-u,f-h)}return a(s,c,r,u,h,v),c}function i(t,e,r,n,i){var o,a;if(i===j(t,e,r,n)>0)for(o=e;o<r;o+=n)a=O(o,t[o],t[o+1],a);else for(o=r-n;o>=e;o-=n)a=O(o,t[o],t[o+1],a);return a&&w(a,a.next)&&(P(a),a=a.next),a}function o(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!w(n,n.next)&&0!==x(n.prev,n,n.next))n=n.next;else{if(P(n),(n=e=n.prev)===n.next)return null;r=!0}}while(r||n!==e);return e}function a(t,e,r,n,i,l,p){if(t){!p&&l&&m(t,n,i,l);for(var f,d,v=t;t.prev!==t.next;)if(f=t.prev,d=t.next,l?c(t,n,i,l):s(t))e.push(f.i/r),e.push(t.i/r),e.push(d.i/r),P(t),t=d.next,v=d.next;else if((t=d)===v){p?1===p?(t=u(t,e,r),a(t,e,r,n,i,l,2)):2===p&&h(t,e,r,n,i,l):a(o(t),e,r,n,i,l,1);break}}}function s(t){var e=t.prev,r=t,n=t.next;if(x(e,r,n)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(b(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)&&x(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function c(t,e,r,n){var i=t.prev,o=t,a=t.next;if(x(i,o,a)>=0)return!1;for(var s=i.x<o.x?i.x<a.x?i.x:a.x:o.x<a.x?o.x:a.x,c=i.y<o.y?i.y<a.y?i.y:a.y:o.y<a.y?o.y:a.y,u=i.x>o.x?i.x>a.x?i.x:a.x:o.x>a.x?o.x:a.x,h=i.y>o.y?i.y>a.y?i.y:a.y:o.y>a.y?o.y:a.y,l=g(s,c,e,r,n),p=g(u,h,e,r,n),f=t.nextZ;f&&f.z<=p;){if(f!==t.prev&&f!==t.next&&b(i.x,i.y,o.x,o.y,a.x,a.y,f.x,f.y)&&x(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(f=t.prevZ;f&&f.z>=l;){if(f!==t.prev&&f!==t.next&&b(i.x,i.y,o.x,o.y,a.x,a.y,f.x,f.y)&&x(f.prev,f,f.next)>=0)return!1;f=f.prevZ}return!0}function u(t,e,r){var n=t;do{var i=n.prev,o=n.next.next;!w(i,o)&&S(i,n,n.next,o)&&E(i,o)&&E(o,i)&&(e.push(i.i/r),e.push(n.i/r),e.push(o.i/r),P(n),P(n.next),n=t=o),n=n.next}while(n!==t);return n}function h(t,e,r,n,i,s){var c=t;do{for(var u=c.next.next;u!==c.prev;){if(c.i!==u.i&&_(c,u)){var h=C(c,u);return c=o(c,c.next),h=o(h,h.next),a(c,e,r,n,i,s),void a(h,e,r,n,i,s)}u=u.next}c=c.next}while(c!==t)}function l(t,e,r,n){var a,s,c,u,h,l=[];for(a=0,s=e.length;a<s;a++)c=e[a]*n,u=a<s-1?e[a+1]*n:t.length,h=i(t,c,u,n,!1),h===h.next&&(h.steiner=!0),l.push(y(h));for(l.sort(p),a=0;a<l.length;a++)f(l[a],r),r=o(r,r.next);return r}function p(t,e){return t.x-e.x}function f(t,e){if(e=d(t,e)){var r=C(e,t);o(r,r.next)}}function d(t,e){var r,n=e,i=t.x,o=t.y,a=-1/0;do{if(o<=n.y&&o>=n.next.y){var s=n.x+(o-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>a){if(a=s,s===i){if(o===n.y)return n;if(o===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(i===a)return r.prev;var c,u=r,h=r.x,l=r.y,p=1/0;for(n=r.next;n!==u;)i>=n.x&&n.x>=h&&b(o<l?i:a,o,h,l,o<l?a:i,o,n.x,n.y)&&((c=Math.abs(o-n.y)/(i-n.x))<p||c===p&&n.x>r.x)&&E(n,t)&&(r=n,p=c),n=n.next;return r}function m(t,e,r,n){var i=t;do{null===i.z&&(i.z=g(i.x,i.y,e,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,v(i)}function v(t){var e,r,n,i,o,a,s,c,u=1;do{for(r=t,t=null,o=null,a=0;r;){for(a++,n=r,s=0,e=0;e<u&&(s++,n=n.nextZ);e++);for(c=u;s>0||c>0&&n;)0===s?(i=n,n=n.nextZ,c--):0!==c&&n?r.z<=n.z?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,c--):(i=r,r=r.nextZ,s--),o?o.nextZ=i:t=i,i.prevZ=o,o=i;r=n}o.nextZ=null,u*=2}while(a>1);return t}function g(t,e,r,n,i){return t=32767*(t-r)/i,e=32767*(e-n)/i,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do{e.x<r.x&&(r=e),e=e.next}while(e!==t);return r}function b(t,e,r,n,i,o,a,s){return(i-a)*(e-s)-(t-a)*(o-s)>=0&&(t-a)*(n-s)-(r-a)*(e-s)>=0&&(r-a)*(o-s)-(i-a)*(n-s)>=0}function _(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!M(t,e)&&E(t,e)&&E(e,t)&&T(t,e)}function x(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function w(t,e){return t.x===e.x&&t.y===e.y}function S(t,e,r,n){return!!(w(t,e)&&w(r,n)||w(t,n)&&w(r,e))||x(t,e,r)>0!=x(t,e,n)>0&&x(r,n,t)>0!=x(r,n,e)>0}function M(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&S(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function E(t,e){return x(t.prev,t,t.next)<0?x(t,e,t.next)>=0&&x(t,t.prev,e)>=0:x(t,e,t.prev)<0||x(t,t.next,e)<0}function T(t,e){var r=t,n=!1,i=(t.x+e.x)/2,o=(t.y+e.y)/2;do{r.y>o!=r.next.y>o&&i<(r.next.x-r.x)*(o-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}function C(t,e){var r=new A(t.i,t.x,t.y),n=new A(e.i,e.x,e.y),i=t.next,o=e.prev;return t.next=e,e.prev=t,r.next=i,i.prev=r,n.next=r,r.prev=n,o.next=n,n.prev=o,n}function O(t,e,r,n){var i=new A(t,e,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function P(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function A(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function j(t,e,r,n){for(var i=0,o=e,a=r-n;o<r;o+=n)i+=(t[a]-t[o])*(t[o+1]+t[a+1]),a=o;return i}e.exports=n,n.deviation=function(t,e,r,n){var i=e&&e.length,o=i?e[0]*r:t.length,a=Math.abs(j(t,0,o,r));if(i)for(var s=0,c=e.length;s<c;s++){var u=e[s]*r,h=s<c-1?e[s+1]*r:t.length;a-=Math.abs(j(t,u,h,r))}var l=0;for(s=0;s<n.length;s+=3){var p=n[s]*r,f=n[s+1]*r,d=n[s+2]*r;l+=Math.abs((t[p]-t[d])*(t[f+1]-t[p+1])-(t[p]-t[f])*(t[d+1]-t[p+1]))}return 0===a&&0===l?0:Math.abs((l-a)/a)},n.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},n=0,i=0;i<t.length;i++){for(var o=0;o<t[i].length;o++)for(var a=0;a<e;a++)r.vertices.push(t[i][o][a]);i>0&&(n+=t[i-1].length,r.holes.push(n))}return r}},{}],7:[function(t,e,r){"use strict";function n(t){var e=t[o];return e||(e=t[o]={}),e}var i=t("individual/one-version");i("ev-store","7");var o="__EV_STORE_KEY@7";e.exports=n},{"individual/one-version":17}],8:[function(t,e,r){"use strict";function n(t,e){var r;for(r in e)t[r]=e[r];return t}function i(t,e){if(this._jsongUrl=t,"number"==typeof e){e={timeout:e}}this._config=n({timeout:15e3,headers:{}},e||{})}var o=t("./request"),a=t("./buildQueryObject");Array.isArray;i.prototype={constructor:i,buildQueryObject:a,get:function(t){var e=this.buildQueryObject(this._jsongUrl,"GET",{paths:t,method:"get"}),r=n(e,this._config);return o("GET",r,this)},set:function(t){var e=this.buildQueryObject(this._jsongUrl,"POST",{jsonGraph:t,method:"set"}),r=n(e,this._config);return r.headers["Content-Type"]="application/x-www-form-urlencoded",o("POST",r,this)},call:function(t,e,r,i){e=e||[],r=r||[],i=i||[];var a=[];a.push("method=call"),a.push("callPath="+encodeURIComponent(JSON.stringify(t))),a.push("arguments="+encodeURIComponent(JSON.stringify(e))),a.push("pathSuffixes="+encodeURIComponent(JSON.stringify(r))),a.push("paths="+encodeURIComponent(JSON.stringify(i)));var s=this.buildQueryObject(this._jsongUrl,"POST",a.join("&")),c=n(s,this._config);return c.headers["Content-Type"]="application/x-www-form-urlencoded",o("POST",c,this)}},i.XMLHttpSource=i,i.default=i,e.exports=i},{"./buildQueryObject":9,"./request":12}],9:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n,i=[],o={url:t},a=-1!==t.indexOf("?"),s=a?"&":"?"
+;return"string"==typeof r?i.push(r):(n=Object.keys(r),n.forEach(function(t){var e="object"==typeof r[t]?JSON.stringify(r[t]):r[t];i.push(t+"="+encodeURIComponent(e))})),"GET"===e?o.url+=s+i.join("&"):o.data=i.join("&"),o}},{}],10:[function(t,e,r){(function(t){"use strict";e.exports=function(){var e=new t.XMLHttpRequest;if("withCredentials"in e)return e;if(t.XDomainRequest)return new XDomainRequest;throw new Error("CORS is not supported by your browser")}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],11:[function(t,e,r){(function(t){"use strict";e.exports=function(){var e,r,n;if(t.XMLHttpRequest)return new t.XMLHttpRequest;try{for(r=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],n=0;n<3;n++)try{if(e=r[n],new t.ActiveXObject(e))break}catch(t){}return new t.ActiveXObject(e)}catch(t){throw new Error("XMLHttpRequest is not supported by your browser")}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],12:[function(t,e,r){"use strict";function n(){}function i(t,e,r){return n.create(function(n){var i,o,l,p,f,d={method:t||"GET",crossDomain:!1,async:!0,headers:{},responseType:"json"};for(f in e)h.call(e,f)&&(d[f]=e[f]);d.crossDomain||d.headers["X-Requested-With"]||(d.headers["X-Requested-With"]="XMLHttpRequest"),null!=r.onBeforeRequest&&r.onBeforeRequest(d);try{i=d.crossDomain?u():c()}catch(t){n.onError(t)}try{d.user?i.open(d.method,d.url,d.async,d.user,d.password):i.open(d.method,d.url,d.async),i.timeout=d.timeout,i.withCredentials=!1!==d.withCredentials,l=d.headers;for(p in l)h.call(l,p)&&i.setRequestHeader(p,l[p]);if(d.responseType)try{i.responseType=d.responseType}catch(t){if("json"!==d.responseType)throw t}i.onreadystatechange=function(t){4===i.readyState&&(o||(o=!0,a(n,i,t)))},i.ontimeout=function(t){o||(o=!0,s(n,i,"timeout error",t))},i.send(d.data)}catch(t){n.onError(t)}return function(){o||4===i.readyState||(o=!0,i.abort())}})}function o(t,e,r){r||(r=new Error(e)),t.onError(r)}function a(t,e,r){var n,i;if(e&&t){i=e.responseType,n="response"in e?e.response:e.responseText;var a=1223===e.status?204:e.status;if(a>=200&&a<=399){try{"json"!==i&&(n=JSON.parse(n||"")),"string"==typeof n&&(n=JSON.parse(n||""))}catch(r){o(t,"invalid json",r)}return t.onNext(n),void t.onCompleted()}return 401===a||403===a||407===a?o(t,n):410===a?o(t,n):408===a||504===a?o(t,n):o(t,n||"Response code "+a)}}function s(t,e,r,n){o(t,r||e.statusText||"request error",n)}var c=t("./getXMLHttpRequest"),u=t("./getCORSRequest"),h=Object.prototype.hasOwnProperty,l=function(){};n.create=function(t){var e=new n;return e.subscribe=function(e,r,n){var i,o;return i="function"==typeof e?{onNext:e,onError:r||l,onCompleted:n||l}:e,o=t(i),"function"==typeof o?{dispose:o}:o},e},e.exports=i},{"./getCORSRequest":10,"./getXMLHttpRequest":11}],13:[function(e,r,n){(function(i){!function(e){if("object"==typeof n&&void 0!==r)r.exports=e();else if("function"==typeof t&&t.amd)t([],e);else{var o;o="undefined"!=typeof window?window:void 0!==i?i:"undefined"!=typeof self?self:this,o.falcor=e()}}(function(){var t;return function t(r,n,i){function o(s,c){if(!n[s]){if(!r[s]){var u="function"==typeof e&&e;if(!c&&u)return u(s,!0);if(a)return a(s,!0);var h=new Error("Cannot find module '"+s+"'");throw h.code="MODULE_NOT_FOUND",h}var l=n[s]={exports:{}};r[s][0].call(l.exports,function(t){var e=r[s][1][t];return o(e||t)},l,l.exports,t,r,n,i)}return n[s].exports}for(var a="function"==typeof e&&e,s=0;s<i.length;s++)o(i[s]);return o}({1:[function(t,e,r){var n=t(32),i=t(130);n.atom=i.atom,n.ref=i.ref,n.error=i.error,n.pathValue=i.pathValue,n.HttpDataSource=t(125),e.exports=n},{125:125,130:130,32:32}],2:[function(t,e,r){function n(t){var e=t||{};this._root=e._root||new i(e),this._path=e.path||e._path||[],this._scheduler=e.scheduler||e._scheduler||new f,this._source=e.source||e._source,this._request=e.request||e._request||new a(this,this._scheduler),this._ID=C++,"number"==typeof e.maxSize?this._maxSize=e.maxSize:this._maxSize=e._maxSize||n.prototype._maxSize,"number"==typeof e.collectRatio?this._collectRatio=e.collectRatio:this._collectRatio=e._collectRatio||n.prototype._collectRatio,(e.boxed||e.hasOwnProperty("_boxed"))&&(this._boxed=e.boxed||e._boxed),(e.materialized||e.hasOwnProperty("_materialized"))&&(this._materialized=e.materialized||e._materialized),"boolean"==typeof e.treatErrorsAsValues?this._treatErrorsAsValues=e.treatErrorsAsValues:e.hasOwnProperty("_treatErrorsAsValues")&&(this._treatErrorsAsValues=e._treatErrorsAsValues),e.cache&&this.setCache(e.cache)}var i=t(4),o=t(3),a=t(55),s=t(64),c=t(65),u=t(61),h=t(63),l=t(73),p=t(75),f=t(74),d=t(81),m=t(84),v=t(49),g=t(134),y=t(88),b=t(100),_=t(96),x=t(102),w=t(98),S=t(99),M=t(77),E=t(76),T=t(130),C=0,O=t(116),P=function(){},A=t(14),j=t(19),R={pathValue:!0,pathSyntax:!0,json:!0,jsonGraph:!0},L=t(72);e.exports=n,n.ref=T.ref,n.atom=T.atom,n.error=T.error,n.pathValue=T.pathValue,n.prototype.constructor=n,n.prototype._materialized=!1,n.prototype._boxed=!1,n.prototype._progressive=!1,n.prototype._treatErrorsAsValues=!1,n.prototype._maxSize=Math.pow(2,53)-1,n.prototype._collectRatio=.75,n.prototype.get=t(71),n.prototype._getWithPaths=t(70),n.prototype.set=function(){var t=O(arguments,R,"set");return!0!==t?new s(function(e){e.onError(t)}):this._set.apply(this,arguments)},n.prototype.preload=function(){var t=O(arguments,L,"preload");if(!0!==t)return new s(function(e){e.onError(t)});var e=Array.prototype.slice.call(arguments),r=this;return new s(function(t){return r.get.apply(r,e).subscribe(function(){},function(e){t.onError(e)},function(){t.onCompleted()})})},n.prototype._set=function(){var t,e=-1,r=arguments.length,n=arguments[r-1];for(_(n)?r-=1:n=void 0,t=new Array(r);++e<r;)t[e]=arguments[e];return c.create(this,t,n)},n.prototype.call=function(){var t,e=-1,r=arguments.length;for(t=new Array(r);++e<r;){var n=arguments[e];t[e]=n;var i=typeof n;if(e>1&&!Array.isArray(n)||0===e&&!Array.isArray(n)&&"string"!==i||1===e&&!Array.isArray(n)&&!x(n))return new s(function(t){t.onError(new Error("Invalid argument"))})}return u.create(this,t)},n.prototype.invalidate=function(){var t,e=-1,r=arguments.length,n=arguments[r-1];for(t=new Array(r);++e<r;)if(t[e]=g.fromPath(arguments[e]),"object"!=typeof t[e])throw new Error("Invalid argument");h.create(this,t,n).subscribe(P,function(t){throw t})},n.prototype.deref=t(5),n.prototype.getValue=t(16),n.prototype.setValue=t(79),n.prototype._getValueSync=t(24),n.prototype._setValueSync=t(80),n.prototype._derefSync=t(6),n.prototype.setCache=function(t){var e=this._root.cache;if(t!==e){var r=this._root,n=this._path;this._path=[],this._root.cache={},void 0!==e&&v(r,r.expired,y(e),0),S(t)?E(this,[t]):w(t)?M(this,[t]):b(t)&&M(this,[{json:t}]),this._path=n}else void 0===e&&(this._root.cache={});return this},n.prototype.getCache=function(){var t=m(arguments);if(0===t.length)return A(this._root.cache);var e=[{}],r=this._path;return j.getWithPathsAsJSONGraph(this,t,e),this._path=r,e[0].jsonGraph},n.prototype.getVersion=function(t){var e=t&&g.fromPath(t)||[];if(!1===Array.isArray(e))throw new Error("Model#getVersion must be called with an Array path.");return this._path.length&&(e=this._path.concat(e)),this._getVersion(this,e)},n.prototype._syncCheck=function(t){if(Boolean(this._source)&&this._root.syncRefCount<=0&&!1===this._root.unsafeMode)throw new Error("Model#"+t+" may only be called within the context of a request selector.");return!0},n.prototype._clone=function(t){var e=new n(this);for(var r in t){var i=t[r];"delete"===i?delete e[r]:e[r]=i}return e.setCache=void 0,e},n.prototype.batch=function(t){var e=t;"number"==typeof e?e=new p(Math.round(Math.abs(e))):e&&e.schedule||(e=new l);var r=this._clone();return r._request=new a(r,e),r},n.prototype.unbatch=function(){var t=this._clone();return t._request=new a(t,new f),t},n.prototype.treatErrorsAsValues=function(){return this._clone({_treatErrorsAsValues:!0})},n.prototype.asDataSource=function(){return new o(this)},n.prototype._materialize=function(){return this._clone({_materialized:!0})},n.prototype._dematerialize=function(){return this._clone({_materialized:"delete"})},n.prototype.boxValues=function(){return this._clone({_boxed:!0})},n.prototype.unboxValues=function(){return this._clone({_boxed:"delete"})},n.prototype.withoutDataSource=function(){return this._clone({_source:"delete"})},n.prototype.toJSON=function(){return{$type:"ref",value:this._path}},n.prototype.getPath=function(){return d(this._path)},n.prototype._getBoundValue=t(13),n.prototype._getVersion=t(18),n.prototype._getValueSync=t(17),n.prototype._getPathValuesAsPathMap=j.getWithPathsAsPathMap,n.prototype._getPathValuesAsJSONG=j.getWithPathsAsJSONGraph,n.prototype._setPathValuesAsJSON=t(78),n.prototype._setPathValuesAsJSONG=t(78),n.prototype._setPathValuesAsPathMap=t(78),n.prototype._setPathValuesAsValues=t(78),n.prototype._setPathMapsAsJSON=t(77),n.prototype._setPathMapsAsJSONG=t(77),n.prototype._setPathMapsAsPathMap=t(77),n.prototype._setPathMapsAsValues=t(77),n.prototype._setJSONGsAsJSON=t(76),n.prototype._setJSONGsAsJSONG=t(76),n.prototype._setJSONGsAsPathMap=t(76),n.prototype._setJSONGsAsValues=t(76),n.prototype._setCache=t(77),n.prototype._invalidatePathValuesAsJSON=t(48),n.prototype._invalidatePathMapsAsJSON=t(47)},{100:100,102:102,116:116,13:13,130:130,134:134,14:14,16:16,17:17,18:18,19:19,24:24,3:3,4:4,47:47,48:48,49:49,5:5,55:55,6:6,61:61,63:63,64:64,65:65,70:70,71:71,72:72,73:73,74:74,75:75,76:76,77:77,78:78,79:79,80:80,81:81,84:84,88:88,96:96,98:98,99:99}],3:[function(t,e,r){function n(t){this._model=t._materialize().treatErrorsAsValues()}n.prototype.get=function(t){return this._model.get.apply(this._model,t)._toJSONG()},n.prototype.set=function(t){return this._model.set(t)._toJSONG()},n.prototype.call=function(t,e,r,n){var i=[t,e,r].concat(n);return this._model.call.apply(this._model,i)._toJSONG()},e.exports=n},{}],4:[function(t,e,r){function n(t){var e=t||{};this.syncRefCount=0,this.expired=e.expired||[],this.unsafeMode=e.unsafeMode||!1,this.collectionScheduler=e.collectionScheduler||new a,this.cache={},i(e.comparator)&&(this.comparator=e.comparator),i(e.errorSelector)&&(this.errorSelector=e.errorSelector),i(e.onChange)&&(this.onChange=e.onChange)}var i=t(96),o=t(91),a=t(74);n.prototype.errorSelector=function(t,e){return e},n.prototype.comparator=function(t,e){return o(t,"value")&&o(e,"value")?t.value===e.value&&t.$type===e.$type&&t.$expires===e.$expires:t===e},e.exports=n},{74:74,91:91,96:96}],5:[function(t,e,r){function n(t,e){var r,n=!1;try{++t._root.syncRefCount,r=t._derefSync(e)}catch(t){r=t,n=!0}finally{--t._root.syncRefCount}return n?i.Observable.throw(r):i.Observable.return(r)}var i=t(159),o=t(134);e.exports=function(t){for(var e=this,r=-1,a=arguments.length-1,s=new Array(a),c=o.fromPath(t);++r<a;)s[r]=o.fromPath(arguments[r+1]);if(0===a)throw new Error("Model#deref requires at least one value path.");return i.Observable.defer(function(){return n(e,c)}).flatMap(function(t){if(Boolean(t)){if(a>0){var r=i.Observable.of(t);return t.get.apply(t,s).catch(i.Observable.empty()).concat(r).last().flatMap(function(){return n(e,c)}).filter(function(t){return t})}return i.Observable.return(t)}if(a>0){var o=s.map(function(t){return c.concat(t)});return e.get.apply(e,o).concat(i.Observable.defer(function(){return n(e,c)})).last().filter(function(t){return t})}return i.Observable.empty()})}},{134:134,159:159}],6:[function(t,e,r){var n=t(134),i=t(13),o=t(8),a=t(118);e.exports=function(t){var e=n.fromPath(t);if(!Array.isArray(e))throw new Error("Model#derefSync must be called with an Array path.");var r=i(this,this._path.concat(e),!1),s=r.path,c=r.value;if(r.found&&void 0!==c&&(c.$type!==a||void 0!==c.value)){if(c.$type)throw new o;return this._clone({_path:s})}}},{118:118,13:13,134:134,8:8}],7:[function(t,e,r){function n(){this.message=n.message,this.stack=(new Error).stack}n.prototype=new Error,n.prototype.name="BoundJSONGraphModelError",n.message="It is not legal to use the JSON Graph format from a bound Model. JSON Graph format can only be used from a root model.",e.exports=n},{}],8:[function(t,e,r){function n(t,e){this.message=i,this.stack=(new Error).stack,this.boundPath=t,this.shortedPath=e}var i="The boundPath of the model is not valid since a value or error was found before the path end.";n.prototype=new Error,n.prototype.name="InvalidModelError",n.message=i,e.exports=n},{}],9:[function(t,e,r){function n(t){this.message="An exception was thrown when making a request.",this.stack=(new Error).stack,this.innerError=t}var i="InvalidSourceError";n.prototype=new Error,n.prototype.name=i,n.is=function(t){return t&&t.name===i},e.exports=n},{}],10:[function(t,e,r){function n(){this.message="The allowed number of retries have been exceeded.",this.stack=(new Error).stack}var i="MaxRetryExceededError";n.prototype=new Error,n.prototype.name=i,n.is=function(t){return t&&t.name===i},e.exports=n},{}],11:[function(t,e,r){function n(t,e,r,n,i,l,p){for(var f,d,m=r,v=i,g=n,y=0;;){if(0===y&&g[u]?(y=v.length,d=g[u]):(f=v[y++],d=m[f]),d){var b=d.$type,_=b&&d.value||d;if(y<v.length){if(b){m=d;break}m=d;continue}if(m=d,b&&s(d))break;if(g[u]||o(g,d),b===c){p?a(t,d,l,null,null,null,v,v.length,p):h(t,d),y=0,v=_,g=d,m=e;continue}break}m=void 0;break}if(y<v.length&&void 0!==m){for(var x=[],w=0;y>w;w++)x[w]=v[w];v=x}return[m,v]}var i=t(26),o=i.create,a=t(22),s=t(27),c=t(120),u=t(33),h=t(29).promote;e.exports=n},{120:120,22:22,26:26,27:27,29:29,33:33}],12:[function(t,e,r){var n=t(15),i=t(8),o=t(7);e.exports=function(t,e){return function(r,a,s){var c,u,h,l=s[0],p={values:s,optimizedPaths:[]},f=r._root.cache,d=r._path,m=f,v=d.length,g=[];if(v){if(e)return{criticalError:new o};if(m=n(r,d),m.$type)return{criticalError:new i(d,d)};for(c=[],u=0;v>u;++u)c[u]=d[u]}else c=[],v=0;for(u=0,h=a.length;h>u;u++)t(r,f,m,a[u],0,l,p,g,c,v,e);return p}}},{15:15,7:7,8:8}],13:[function(t,e,r){var n=t(17),i=t(8);e.exports=function(t,e,r){var o,a,s,c,u,h=e,l=e;for(o=t._boxed,r=t._materialized,a=t._treatErrorsAsValues,t._boxed=!0,t._materialized=void 0===r||r,t._treatErrorsAsValues=!0,s=n(t,h.concat(null),!0),t._boxed=o,t._materialized=r,t._treatErrorsAsValues=a,h=s.optimizedPath,c=s.shorted,u=s.found,s=s.value;h.length&&null===h[h.length-1];)h.pop();if(u&&c)throw new i(l,h);return{path:h,value:s,shorted:c,found:u}}},{17:17,8:8}],14:[function(t,e,r){function n(t){var e,r,n,i={},o=Object.keys(t);for(r=0,n=o.length;n>r;r++)e=o[r],a(e)||(i[e]=t[e]);return i}function i(t,e,r){Object.keys(t).filter(function(e){return!a(e)&&t[e]}).forEach(function(r){var a=t[r],s=e[r];if(s||(s=e[r]={}),a.$type){var c,u=a.value&&"object"==typeof a.value,h=!t[o];return c=u||h?n(a):a.value,void(e[r]=c)}i(a,s,r)})}var o=t(37),a=t(97);e.exports=function(t){var e={};return i(t,e),e}},{37:37,97:97}],15:[function(t,e,r){e.exports=function(t,e){for(var r=t._root.cache,n=-1,i=e.length;++n<i&&r&&!r.$type;)r=r[e[n]];return r}},{}],16:[function(t,e,r){var n=t(64),i=t(134);e.exports=function(t){for(var e=i.fromPath(t),r=0,o=e.length;++r<o;)if("object"==typeof e[r])return new n(function(t){t.onError(new Error("Paths must be simple paths"))});var a=this;return new n(function(t){return a.get(e).subscribe(function(r){for(var n=r.json,i=-1,o=e.length;n&&++i<o;)n=n[e[i]];t.onNext(n)},function(e){t.onError(e)},function(){t.onCompleted()})})}},{134:134,64:64}],17:[function(t,e,r){var n=t(11),i=t(25),o=t(27),a=t(29).promote,s=t(120),c=t(118),u=t(119);e.exports=function(t,e,r){for(var h,l,p,f,d,m=t._root.cache,v=e.length,g=[],y=!1,b=!1,_=0,x=m,w=m,S=m,M=!0,E=!1;x&&v>_;){if(h=e[_++],null!==h&&(x=w[h],g[g.length]=h),!x){S=void 0,y=!0,M=!1;break}if((p=x.$type)===c&&void 0===x.value){S=void 0,M=!1,y=v>_;break}if(v>_){if(p===s){if(o(x)){E=!0,S=void 0,M=!1;break}if(f=n(t,m,m,x,x.value),!(d=f[0])){S=void 0,x=void 0,M=!1;break}p=d.$type,x=d,g=f[1].slice(0)}if(p)break}else S=x;w=x}if(v>_&&!E){for(l=_;v>l;++l)if(null!==e[_]){b=!0;break}for(b?(y=!0,S=void 0):S=x,l=_;v>l;++l)null!==e[l]&&(g[g.length]=e[l])}if(S&&p&&(o(S)?S=void 0:a(t,S)),S&&p===u&&!t._treatErrorsAsValues)throw{path:_===v?e:e.slice(0,_),value:S.value};return S&&t._boxed?S=Boolean(p)&&!r?i(S):S:!S&&t._materialized?S={$type:c}:S&&(S=S.value),{value:S,shorted:y,optimizedPath:g,found:M}}},{11:11,118:118,119:119,120:120,25:25,27:27,29:29}],18:[function(t,e,r){var n=t(46);e.exports=function(t,e){var r=t._getValueSync({_boxed:!0,_root:t._root,_treatErrorsAsValues:t._treatErrorsAsValues},e,!0).value,i=r&&r[n];return null==i?-1:i}},{46:46}],19:[function(t,e,r){var n=t(12),i=t(31),o=n(i,!1),a=n(i,!0);e.exports={getValueSync:t(17),getBoundValue:t(13),getWithPathsAsPathMap:o,getWithPathsAsJSONGraph:a}},{12:12,13:13,17:17,31:31}],20:[function(t,e,r){var n=t(29),i=t(25),o=n.promote;e.exports=function(t,e,r,n,a){var s=e.value;a.errors||(a.errors=[]),t._boxed&&(s=i(e)),a.errors.push({path:n.slice(0,r+1),value:s}),o(t,e)}},{25:25,29:29}],21:[function(t,e,r){function n(t,e,r,n,i,o,a){a.requestedMissingPaths.push(n.slice(0,r).concat(e)),a.optimizedMissingPaths.push(i.slice(0,o).concat(e))}var i=t(30),o=i.fastCopy;e.exports=function(t,e,r,i,a,s,c){var u;i.requestedMissingPaths||(i.requestedMissingPaths=[],i.optimizedMissingPaths=[]),u=r<e.length?o(e,r):[],n(t,u,r,a,s,c,i)}},{30:30}],22:[function(t,e,r){var n=t(29),i=t(25),o=n.promote,a=t(120),s=t(118),c=t(119),u=t(37);e.exports=function(t,e,r,n,h,l,p,f,d,m){if(r){var v,g,y,b,_,x,w,S,M=!1;if(e&&o(t,e),e&&void 0!==e.value||(M=t._materialized),M)S={$type:s};else if(t._boxed)S=i(e);else if(e.$type===a||e.$type===c)S=d?i(e):e.value;else if(d){var E=e.value&&"object"==typeof e.value,T=!e[u];S=E||T?i(e):e.value}else S=e.value;if(h&&(h.hasValue=!0),d){for(_=r.jsonGraph,_||(_=r.jsonGraph={},r.paths=[]),v=0,g=f-1;g>v;v++)b=p[v],_[b]||(_[b]={}),_=_[b];b=p[v],_[b]=M?{$type:s}:S,l&&r.paths.push(l.slice(0,n))}else if(0===n)r.json=S;else{for(_=r.json,_||(_=r.json={}),v=0;n-1>v;v++)y=l[v],_[y]||(_[y]={}),x=_,w=y,_=_[y];y=l[v],null!==y?_[y]=S:x[w]=S}}}},{118:118,119:119,120:120,25:25,29:29,37:37}],23:[function(t,e,r){var n=t(27),i=t(26),o=t(29),a=i.remove,s=o.splice,c=t(119),u=t(20),h=t(22),l=t(21),p=t(28),f=t(35);e.exports=function(t,e,r,i,o,d,m,v,g,y,b){var _=e&&e.$type,x=e&&void 0===e.value;return e&&_?void(n(e)?(e[f]||(s(t,e),a(e)),l(t,r,i,d,m,v,g)):_===c?(b&&(m[i]=null),y||t._treatErrorsAsValues?h(t,e,o,i,d,m,v,g,y,b):u(t,e,i,m,d)):(b&&(m[i]=null),(!x||x&&t._materialized)&&h(t,e,o,i,d,m,v,g,y,b))):void(p(t)?h(t,e,o,i,d,m,v,g,y,b):l(t,r,i,d,m,v,g))}},{119:119,20:20,21:21,22:22,26:26,27:27,28:28,29:29,35:35}],24:[function(t,e,r){var n=t(134);e.exports=function(t){var e=n.fromPath(t);if(!1===Array.isArray(e))throw new Error("Model#getValueSync must be called with an Array path.");return this._path.length&&(e=this._path.concat(e)),this._syncCheck("getValueSync")&&this._getValueSync(this,e).value}},{134:134}],25:[function(t,e,r){var n=t(40);e.exports=function(t){var e,r,i,o=Object.keys(t);for(e={},r=0,i=o.length;i>r;r++){var a=o[r];a[0]!==n&&(e[a]=t[a])}return e}},{40:40}],26:[function(t,e,r){function n(t,e){var r=e[c]||0;e[o+r]=t,e[c]=r+1,t[s]=r,t[a]=e}function i(t){var e=t[a];if(e){for(var r=t[s],n=e[c];n>r;)e[o+r]=e[o+r+1],++r;e[c]=n-1,t[a]=void 0,t[s]=void 0}}var o=t(43),a=t(33),s=t(42),c=t(44);e.exports={create:n,remove:i}},{33:33,42:42,43:43,44:44}],27:[function(t,e,r){var n=t(106);e.exports=function(t){var e=void 0===t.$expires&&-1||t.$expires;return-1!==e&&1!==e&&(0===e||e<n())}},{106:106}],28:[function(t,e,r){e.exports=function(t){return t._materialized&&!t._source}},{}],29:[function(t,e,r){function n(t,e){var r=t._root,n=r[o];if(n!==e){var i=e[c],a=e[s];a&&(a[c]=i),i&&(i[s]=a),e[c]=void 0,r[o]=e,e[s]=n,n[c]=e}}function i(t,e){var r=t._root,n=e[c],i=e[s];i&&(i[c]=n),n&&(n[s]=i),e[c]=void 0,e===r[o]&&(r[o]=void 0),e===r[a]&&(r[a]=void 0),e[u]=!0,r.expired.push(e)}var o=t(34),a=t(45),s=t(38),c=t(41),u=t(35);e.exports={promote:n,splice:i}},{34:34,35:35,38:38,41:41,45:45}],30:[function(t,e,r){function n(t,e){var r,n,i,o=[];for(n=0,i=e||0,r=t.length;r>i;n++,i++)o[n]=t[i];return o}function i(t,e){var r,n,i,o=[];for(r=0,n=t.length;n>r;r++)o[r]=t[r];for(i=0,n=e.length;n>i;i++)null!==e[i]&&(o[r++]=e[i]);return o}function o(t,e){var r,n,i,o=[];for(r=0,n=t.length;n>r;r++)o[r]=t[r];for(i=0,n=e.length;n>i;i++)o[r++]=e[i];return o}e.exports={fastCat:o,fastCatSkipNulls:i,fastCopy:n}},{}],31:[function(t,e,r){var n=t(11),i=t(23),o=t(27),a=t(143).iterateKeySet,s=t(120),c=t(29).promote;e.exports=function t(e,r,u,h,l,p,f,d,m,v,g,y){var b=y,_=m;if(!u||u&&u.$type||l===h.length)return void i(e,u,h,l,p,f,d,_,v,g,b);var x,w;x=h[l];var S="object"==typeof x,M=l+1,E=!1,T=x;if(S&&(E={},T=a(x,E)),void 0!==T||!E.done){var C=v+1;do{b=!1;var O;null===T?O=u:(O=u[T],_[v]=T,d[l]=T);var P=_,A=C;if(O){var j=O.$type,R=j&&O.value||O;if(M<h.length&&j&&j===s&&!o(O)){g&&i(e,O,h,M,p,f,null,_,A,g,b),c(e,O);var L=n(e,r,r,O,R,p,g);b=!0,O=L[0];var N=L[1];for(P=[],A=N.length,w=0;A>w;++w)P[w]=N[w]}}t(e,r,O,h,M,p,f,d,P,A,g,b),E&&!E.done&&(T=a(x,E))}while(E&&!E.done)}}},{11:11,120:120,143:143,23:23,27:27,29:29}],32:[function(t,e,r){"use strict";function n(t){return new n.Model(t)}"function"==typeof Promise?n.Promise=Promise:n.Promise=t(151),e.exports=n,n.Model=t(2)},{151:151,2:2}],33:[function(t,e,r){e.exports=t(40)+"context"},{40:40}],34:[function(t,e,r){e.exports=t(40)+"head"},{40:40}],35:[function(t,e,r){e.exports=t(40)+"invalidated"},{40:40}],36:[function(t,e,r){e.exports=t(40)+"key"},{40:40}],37:[function(t,e,r){e.exports="$modelCreated"},{}],38:[function(t,e,r){e.exports=t(40)+"next"},{40:40}],39:[function(t,e,r){e.exports=t(40)+"parent"},{40:40}],40:[function(t,e,r){e.exports=String.fromCharCode(30)},{}],41:[function(t,e,r){e.exports=t(40)+"prev"},{40:40}],42:[function(t,e,r){e.exports=t(40)+"ref-index"},{40:40}],43:[function(t,e,r){e.exports=t(40)+"ref"},{40:40}],44:[function(t,e,r){e.exports=t(40)+"refs-length"},{40:40}],45:[function(t,e,r){e.exports=t(40)+"tail"},{40:40}],46:[function(t,e,r){e.exports=t(40)+"version"},{40:40}],47:[function(t,e,r){function n(t,e,r,i,a,s,u,h,l,p){if(!w(t)&&!t.$type)for(var f in t)if(f[0]!==c&&"$"!==f[0]&&y(t,f)){var d=t[f],m=b(d)&&!d.$type,v=o(r,i,a,f,d,m,!1,s,u,h,l,p),_=v[0],x=v[1];_&&(m?n(d,e+1,r,x,_,s,u,h,l,p):T(_,x,f,h)&&E(x,g(_),h,s))}}function i(t,e,r,n,i,a,c,l){if(_(r))return S(r,i,a),[void 0,e];v(a,r);var d=r,m=r.value,g=e;if(null!=(r=r[h]))g=r[u]||e;else{var y=0,b=m.length-1;g=r=e;do{var x=m[y],M=b>y,E=o(e,g,r,x,t,M,!0,n,i,a,c,l);if(r=E[0],w(r))return E;g=E[1]}while(y++<b);if(d[h]!==r){var T=r[f]||0;r[f]=T+1,r[s+T]=d,d[h]=r,d[p]=T}}return[r,g]}function o(t,e,r,n,o,s,c,u,h,l,p,f){for(var m=r.$type;m===d;){var v=i(o,t,r,u,h,l,p,f);if(r=v[0],w(r))return v;e=v[1],m=r&&r.$type}if(void 0!==m)return[r,e];if(null==n){if(s)throw new Error("`null` is not allowed in branch key positions.");r&&(n=r[a])}else e=r,r=e[n];return[r,e]}var a=t(36),s=t(43),c=t(40),u=t(39),h=t(33),l=t(46),p=t(42),f=t(44),d=t(120),m=t(13),v=t(50),g=t(88),y=t(91),b=t(100),_=t(95),x=t(96),w=t(102),S=t(86),M=t(92),E=t(115),T=t(109);e.exports=function(t,e){for(var r=t._root,i=r,o=r.expired,a=M(),s=r._comparator,c=r._errorSelector,h=t._path,p=r.cache,f=h.length?m(t,h).value:p,d=f[u]||p,v=p[l],g=-1,y=e.length;++g<y;){n(e[g].json,0,p,d,f,a,o,i,s,c)}var b=p[l],_=r.onChange;x(_)&&v!==b&&_()}},{100:100,102:102,109:109,115:115,120:120,13:13,33:33,36:36,39:39,40:40,42:42,43:43,44:44,46:46,50:50,86:86,88:88,91:91,92:92,95:95,96:96}],48:[function(t,e,r){function n(t,e,r,i,a,s,c,u){var h={},l=e<t.length-1,p=t[e],f=x(p,h);do{var d=o(r,i,a,f,l,!1,s,c,u),m=d[0],g=d[1];m&&(l?n(t,e+1,r,g,m,s,c,u):M(m,g,f,u)&&S(g,v(m),u,s)),f=x(p,h)}while(!h.done)}function i(t,e,r,n,i){if(g(e))return _(e,n,i),[void 0,t];m(i,e);var a=e,h=e.value,f=t;if(null!=(e=e[u]))f=e[c]||t;else{var d=0,v=h.length-1;f=e=t;do{var y=h[d],x=v>d,w=o(t,f,e,y,x,!0,r,n,i);if(e=w[0],b(e))return w;f=w[1]}while(d++<v);if(a[u]!==e){var S=e[p]||0;e[p]=S+1,e[s+S]=a,a[u]=e,a[l]=S}}return[e,f]}function o(t,e,r,n,o,s,c,u,h){for(var l=r.$type;l===f;){var p=i(t,r,c,u,h);if(r=p[0],b(r))return p;e=p[1],l=r.$type}if(void 0!==l)return[r,e];if(null==n){if(o)throw new Error("`null` is not allowed in branch key positions.");r&&(n=r[a])}else e=r,r=e[n];return[r,e]}var a=t(36),s=t(43),c=t(39),u=t(33),h=t(46),l=t(42),p=t(44),f=t(120),d=t(13),m=t(50),v=t(88),g=t(95),y=t(96),b=t(102),_=t(86),x=t(143).iterateKeySet,w=t(92),S=t(115),M=t(109);e.exports=function(t,e){for(var r=t._root,i=r,o=r.expired,a=w(),s=t._path,u=r.cache,l=s.length?d(t,s).value:u,p=l[c]||u,f=u[h],m=-1,v=e.length;++m<v;){n(e[m],0,u,p,l,a,o,i)}var g=u[h],b=r.onChange;y(b)&&f!==g&&b()}},{102:102,109:109,115:115,120:120,13:13,143:143,33:33,36:36,39:39,42:42,43:43,44:44,46:46,50:50,86:86,88:88,92:92,95:95,96:96}],49:[function(t,e,r){var n=t(36),i=t(39),o=t(34),a=t(45),s=t(38),c=t(41),u=t(108),h=t(115);e.exports=function(t,e,r,l,p,f){var d=r,m=p;"number"!=typeof m&&(m=.75);var v,g,y,b="number"==typeof f,_=l*m;for(g=e.pop();g;)y=g.$size||0,d-=y,!0===b?h(g,y,t,f):(v=g[i])&&u(g,v,g[n],t),g=e.pop();if(d>=l){var x=t[a];for(g=x;d>=_&&g;)x=x[c],y=g.$size||0,d-=y,!0===b&&h(g,y,t,f),g=x;t[a]=t[c]=g,null==g?t[o]=t[s]=void 0:g[s]=void 0}}},{108:108,115:115,34:34,36:36,38:38,39:39,41:41,45:45}],50:[function(t,e,r){var n=t(121),i=t(34),o=t(45),a=t(38),s=t(41),c=t(100);e.exports=function(t,e){if(c(e)&&e.$expires!==n){var r=t[i],u=t[o],h=e[a],l=e[s];e!==r&&(null!=h&&"object"==typeof h&&(h[s]=l),null!=l&&"object"==typeof l&&(l[a]=h),h=r,null!=r&&"object"==typeof r&&(r[s]=e),t[i]=t[a]=r=e,r[a]=h,r[s]=void 0),null!=u&&e!==u||(t[o]=t[s]=u=l||e)}return e}},{100:100,121:121,34:34,38:38,41:41,45:45}],51:[function(t,e,r){var n=t(34),i=t(45),o=t(38),a=t(41);e.exports=function(t,e){var r=t[n],s=t[i],c=e[o],u=e[a];null!=c&&"object"==typeof c&&(c[a]=u),null!=u&&"object"==typeof u&&(u[o]=c),e===r&&(t[n]=t[o]=c),e===s&&(t[i]=t[a]=u),e[o]=e[a]=void 0,r=s=c=u=void 0}},{34:34,38:38,41:41,45:45}],52:[function(t,e,r){function n(t,e){var r=!1;return function(){if(!r&&!t._disposed){r=!0,t._callbacks[e]=null,t._optimizedPaths[e]=[],t._requestedPaths[e]=[];0!==--t._count||t.sent||(t._disposable.dispose(),t.requestQueue.removeRequest(t))}}}function i(t){for(var e=[],r=-1,n=0,i=t.length;i>n;++n)for(var o=t[n],a=0,s=o.length;s>a;++a)e[++r]=o[a];return e}var o=t(59),a=t(60),s=0,c=t(57).GetRequest,u=t(76),h=t(78),l=t(119),p=[],f=function(t,e){this.sent=!1,this.scheduled=!1,this.requestQueue=e,this.id=++s,this.type=c,this._scheduler=t,this._pathMap={},this._optimizedPaths=[],this._requestedPaths=[],this._callbacks=[],this._count=0,this._disposable=null,this._collapsed=null,this._disposed=!1};f.prototype={batch:function(t,e,r){var i=this,o=i._optimizedPaths,s=i._requestedPaths,c=i._callbacks,u=o.length;return o[u]=e,s[u]=t,c[u]=r,++i._count,i.scheduled||(i.scheduled=!0,i._disposable=i._scheduler.schedule(function(){a(i,o,function(t,e){if(i.requestQueue.removeRequest(i),i._disposed=!0,i._count){i._merge(s,t,e);for(var r=0,n=c.length;n>r;++r){var o=c[r];o&&o(t,e)}}})})),n(i,u)},add:function(t,e,r){var i,a,s=this,c=o(t,e,s._pathMap);c?(a=c[2],i=c[1]):(a=t,i=e);var u=!1,h=!1;if(i.length<e.length){u=!0;var l=s._callbacks.length;s._callbacks[l]=r,s._requestedPaths[l]=c[0],s._optimizedPaths[l]=[],++s._count,h=n(s,l)}return[u,a,i,h]},_merge:function(t,e,r){var n=this,o=n.requestQueue.model,a=o._root,s=a.errorSelector,c=a.comparator,f=o._path;o._path=p;var d=i(t);if(e){var m=e;m instanceof Error&&(m={message:m.message}),m.$type||(m={$type:l,value:m});var v=d.map(function(t){return{path:t,value:m}});h(o,v,null,s,c)}else u(o,[{paths:d,jsonGraph:r.jsonGraph}],null,s,c);o._path=f}},e.exports=f},{119:119,57:57,59:59,60:60,76:76,78:78}],53:[function(t,e,r){function n(){this.length=0,this.pending=!1,this.pathmaps=[],a.call(this,this._subscribe)}var i=t(159),o=i.Observer,a=i.Observable,s=i.Disposable,c=i.SerialDisposable,u=i.CompositeDisposable,h=t(9),l=t(143),p=l.iterateKeySet;n.create=function(t,e,r){var n=new this;return n.queue=t,n.model=e,n.index=r,n},n.prototype=Object.create(a.prototype),n.prototype.constructor=n,n.prototype.insertPath=function(t,e,r,n,i){var o=n||0,a=i||t.length-1,s=r||this.pathmaps[a+1]||(this.pathmaps[a+1]=Object.create(null));if(void 0===s||null===s)return!1;var c,u,h=t[o],l={};c=p(h,l);do{if(u=s[c],a>o){if(null==u){if(e)return!1;u=s[c]=Object.create(null)}if(!1===this.insertPath(t,e,u,o+1,a))return!1}else s[c]=(u||0)+1,this.length+=1;l.done||(c=p(h,l))}while(!l.done);return!0},n.prototype.removePath=function(t,e,r,n){var i=r||0,o=n||t.length-1,a=e||this.pathmaps[o+1];if(void 0===a||null===a)return!0;var s,c,u=0,h=t[i],l={};s=p(h,l);do{if(void 0!==(c=a[s])&&null!==c){if(o>i){u+=this.removePath(t,c,i+1,o);var f=void 0;for(f in c)break;void 0===f&&delete a[s]}else c=a[s]=(c||1)-1,0===c&&delete a[s],u+=1,this.length-=1;l.done||(s=p(h,l))}}while(!l.done);return u},n.prototype.getSourceObserver=function(t){var e=this;return o.create(function(r){r.jsonGraph=r.jsonGraph||r.jsong||r.values||r.value,r.index=e.index,t.onNext(r)},function(e){t.onError(e)},function(){t.onCompleted()})},n.prototype._subscribe=function(t){var e=this,r=this.queue;e.pending=!0;var n=!1,i=new c,o=s.create(function(){n||(n=!0,r&&r._remove(e))}),a=new u(i,o);try{i.setDisposable(this.model._source[this.method](this.getSourceArgs()).subscribe(this.getSourceObserver(t)))}catch(t){throw new h(t)}return a},e.exports=n},{143:143,159:159,9:9}],54:[function(t,e,r){function n(t,e){this.total=0,this.model=t,this.requests=[],this.scheduler=e}var i=t(58),o=t(40),a=t(90),s=t(100),c=t(143);n.prototype.set=function(t){return t.paths=c.collapse(t.paths),i.create(this.model,t)},n.prototype._remove=function(t){var e=this.requests,r=e.indexOf(t);-1!==r&&e.splice(r,1)},n.prototype.distributePaths=function(t,e,r){var n,i,o=this.model,a=-1,s=t.length,c=-1,u=e.length,h=[];t:for(;++a<s;){var l=t[a];for(c=-1;++c<u;)if(i=e[c],i.insertPath(l,i.pending)){h[c]=i;continue t}n||(n=r.create(this,o,this.total++),e[c]=n,h[u++]=n),n.insertPath(l,!1)}var p=[],f=-1;for(c=-1;++c<u;)null!=(i=h[c])&&(p[++f]=i);return p},n.prototype.mergeJSONGraphs=function(t,e){var r=0,n=[],i=[],c=[],u=t.index,h=e.index;t.index=Math.max(u,h),n[-1]=t.jsonGraph||{},i[-1]=e.jsonGraph||{};t:for(;r>-1;){for(var l=n[r-1],p=i[r-1],f=c[r-1]||(c[r-1]=Object.keys(p));f.length>0;){var d=f.pop();if(d[0]!==o)if(l.hasOwnProperty(d)){var m=l[d],v=a(m),g=p[d],y=a(g);if(s(m)&&s(g)&&!v&&!y){n[r]=m,i[r]=g,r+=1;continue t}h>u&&(l[d]=g)}else l[d]=p[d]}r-=1}return t},e.exports=n},{100:100,143:143,40:40,58:58,90:90}],55:[function(t,e,r){function n(t,e){this.model=t,this.scheduler=e,this.requests=this._requests=[]}var i=t(54),o=t(56);n.prototype.get=o.prototype.get,n.prototype.removeRequest=o.prototype.removeRequest,n.prototype.set=i.prototype.set,n.prototype.call=i.prototype.call,e.exports=n},{54:54,56:56}],56:[function(t,e,r){function n(t,e){this.model=t,this.scheduler=e,this.requests=this._requests=[]}var i=t(57),o=t(52);n.prototype={setScheduler:function(t){this.scheduler=t},get:function(t,e,r){function n(){m||0===--l&&r()}var a,s,c,u=this,h=[],l=0,p=u._requests,f=e,d=t,m=!1;for(a=0,s=p.length;s>a;++a)if(c=p[a],c.type===i.GetRequest){if(c.sent){var v=c.add(d,f,n);v[0]&&(d=v[1],f=v[2],h[h.length]=v[3],++l)}else c.batch(d,f,n),f=[],d=[],++l;if(!f.length)break}if(f.length){c=new o(u.scheduler,u),p[p.length]=c,++l;var g=c.batch(d,f,n);h[h.length]=g}return function(){if(!m&&0!==l){m=!0;for(var t=h.length,e=0;t>e;++e)h[e]()}}},removeRequest:function(t){for(var e=this._requests,r=e.length;--r>=0;)if(e[r].id===t.id){e.splice(r,1);break}}},e.exports=n},{52:52,57:57}],57:[function(t,e,r){e.exports={GetRequest:"GET"}},{}],58:[function(t,e,r){function n(){a.call(this)}var i=t(159),o=i.Observer,a=t(53),s=t(83),c=t(76),u=t(78),h=new Array(0);n.create=function(t,e){var r=new n;return r.model=t,r.jsonGraphEnvelope=e,r},n.prototype=Object.create(a.prototype),n.prototype.constructor=n,n.prototype.method="set",n.prototype.insertPath=function(){return!1
+},n.prototype.removePath=function(){return 0},n.prototype.getSourceArgs=function(){return this.jsonGraphEnvelope},n.prototype.getSourceObserver=function(t){var e=this.model,r=e._path,n=this.jsonGraphEnvelope.paths,i=e._root,l=i.errorSelector,p=i.comparator;return a.prototype.getSourceObserver.call(this,o.create(function(i){e._path=h;var o=c(e,[{paths:n,jsonGraph:i.jsonGraph}],null,l,p);i.paths=o[1],e._path=r,t.onNext(i)},function(i){e._path=h,u(e,s(n,function(t){return{path:t,value:i}}),null,l,p),e._path=r,t.onError(i)},function(){t.onCompleted()}))},e.exports=n},{159:159,53:53,76:76,78:78,83:83}],59:[function(t,e,r){var n=t(143).hasIntersection,i=t(84);e.exports=function(t,e,r){for(var o=[],a=[],s=[],c=-1,u=-1,h=!1,l=0,p=e.length;p>l;++l){var f=e[l],d=r[f.length];d&&n(d,f,0)?(!h&&l>0&&(a=i(t,0,l),o=i(e,0,l)),s[++c]=t[l],h=!0):h&&(o[++u]=f,a[u]=t[l])}return h?[s,o,a]:null}},{143:143,84:84}],60:[function(t,e,r){var n=t(143),i=n.toTree,o=n.toPaths;e.exports=function(t,e,r){if(0===t._count)return void t.requestQueue.removeRequest(t);t.sent=!0,t.scheduled=!1;for(var n=t._pathMap,a=Object.keys(e),s=0,c=a.length;c>s;++s)for(var u=e[s],h=0,l=u.length;l>h;++h){var p=u[h],f=p.length;if(n[f]){var d=n[f];d[d.length]=p}else n[f]=[p]}for(var m=Object.keys(n),v=0,g=m.length;g>v;++v){var y=m[v];n[y]=i(n[y])}var b,_=t._collasped=o(n);t.requestQueue.model._source.get(_).subscribe(function(t){b=t},function(t){r(t,b)},function(){r(null,b)})}},{143:143}],61:[function(t,e,r){function n(t){s.call(this,t||o)}function i(t){return a.Observable.defer(function(){return t})}function o(t){function e(t){function e(t,e){if(Boolean(e.invalidated))t.invalidations.push(t.localThisPath.concat(e.path));else{var r=e.path,i=e.value;Boolean(i)&&"object"==typeof i&&i.$type===p?t.references.push({path:n(r),value:e.value}):t.values.push({path:n(r),value:e.value})}return t}function r(t){var e=t.values.concat(t.references);return e.length>0?i(y.set.apply(y,e)._toJSONG()).map(function(e){return{results:t,envelope:e}}):s.return({results:t,envelope:{jsonGraph:{},paths:[]}})}function o(t){var e,r=t.envelope,o=t.results,u=o.values,h=o.references,l=o.invalidations,p=u.map(c).map(n),f=h.reduce(a,[]),d=v.map(n),m=f.concat(d);return e=m.length>0?i(g.get.apply(g,p.concat(m))._toJSONG()):s.return(r),e.doAction(function(t){t.invalidated=l})}function a(t,e){var r=e.path;return t.push.apply(t,m.map(function(t){return r.concat(t)})),t}function c(t){return t.path}var u=t&&t.localFn;if("function"==typeof u){var h=t.model,l=h._path,f=u.apply(h,d).reduce(e,{values:[],references:[],invalidations:[],localThisPath:l}).flatMap(r).flatMap(o);return s.return(f)}return s.empty()}function r(t){return i(y.set(t)).reduce(function(t){return t},null).map(function(){return{invalidated:t.invalidated,paths:t.paths.map(function(t){return t.slice(b.length)})}})}function n(t){return x.concat(t)}var o=this.args,u=this.model,f=l.fromPath(o[0]),d=o[1]||[],m=(o[2]||[]).map(l.fromPath),v=(o[3]||[]).map(l.fromPath),g=u._clone({_path:[]}),y=g.withoutDataSource(),b=u._path,_=b.concat(f),x=_.slice(0,-1),w=i(u.withoutDataSource().get(f)).map(function(t){for(var e=t.json,r=-1,n=f.length;e&&++r<n;)e=e[f[r]];return{model:g._derefSync(x).boxValues(),localFn:e}}).flatMap(e).defaultIfEmpty(function(t){function e(t){var e=t.invalidated;return e&&e.length&&g.invalidate.apply(g,e),t}return t&&"object"==typeof t?a.Observable.defer(function(){var e;try{e=t.call(_,d,m,v)}catch(t){e=s.throw(new h(t))}return e}).map(e):s.empty()}(u._source)).mergeAll().flatMap(r),S=new c;return S.add(w.subscribe(function(e){var r=e.paths,n=e.invalidated,o=u.get.apply(u,r);"AsJSONG"===t.outputFormat&&(o=i(o._toJSONG()).doAction(function(t){t.invalidated=n})),S.add(o.subscribe(t))},function(e){t.onError(e)})),S}var a=t(159)&&t(158),s=a.Observable,c=a.CompositeDisposable,u=t(64),h=t(9),l=t(134),p=t(120);n.create=u.create,n.prototype=Object.create(s.prototype),n.prototype.constructor=n,n.prototype.invokeSourceRequest=function(t){return this},n.prototype.ensureCollect=function(t){return this},n.prototype.initialize=function(){return this},e.exports=n},{120:120,134:134,158:158,159:159,64:64,9:9}],62:[function(t,e,r){function n(t){o.call(this,t)}var i=t(159),o=i.Observable,a=t(64),s=t(134),c=t(88),u=t(49),h=t(81),l=t(46),p=Array.isArray,f=t(101),d=t(98),m=t(99);n.create=a.create,n.prototype=Object.create(o.prototype),n.prototype.constructor=n,n.prototype.subscribeCount=0,n.prototype.subscribeLimit=10,n.prototype.initialize=function(){for(var t,e,r=this.model,n=this.outputFormat||"AsPathMap",i=this.isProgressive,o=[{}],a=[],c=this.args,u=-1,l=c.length;++u<l;){var v,g=c[u];p(g)||"string"==typeof g?(g=s.fromPath(g),v="PathValues"):f(g)?(g.path=s.fromPath(g.path),v="PathValues"):m(g)?v="JSONGs":d(g)&&(v="PathMaps"),e!==v&&(e=v,t={inputType:v,arguments:[]},a.push(t),t.values=o),t.arguments.push(g)}return this.boundPath=h(r._path),this.groups=a,this.outputFormat=n,this.isProgressive=i,this.isCompleted=!1,this.isMaster=null==r._source,this.values=o,this},n.prototype.invokeSourceRequest=function(t){return this},n.prototype.ensureCollect=function(t){var e=this.finally(function(){var e=t._root,r=e.cache;e.collectionScheduler.schedule(function(){u(e,e.expired,c(r),t._maxSize,t._collectRatio,r[l])})});return new this.constructor(function(t){return e.subscribe(t)})},e.exports=n},{101:101,134:134,159:159,46:46,49:49,64:64,81:81,88:88,98:98,99:99}],63:[function(t,e,r){function n(t){s.call(this,t||i)}function i(t){for(var e=this.model,r=this.method,n=this.groups,i=-1,o=n.length;++i<o;){var s=n[i],c=s.inputType,u=s.arguments;if(u.length>0){(0,e["_"+r+c+"AsJSON"])(e,u)}}return t.onCompleted(),a.empty}var o=t(159),a=o.Disposable,s=t(62);n.create=s.create,n.prototype=Object.create(s.prototype),n.prototype.method="invalidate",n.prototype.constructor=n,e.exports=n},{159:159,62:62}],64:[function(t,e,r){function n(t){this._subscribe=t}function i(t){var e=this.model,r=new this.type;return r.model=e,r.args=this.args,r.outputFormat=t.outputFormat||"AsPathMap",r.isProgressive=t.isProgressive||!1,r.subscribeCount=0,r.subscribeLimit=t.retryLimit||10,r.initialize().invokeSourceRequest(e).ensureCollect(e).subscribe(t)}var o=t(32),a=t(159)&&t(158),s=a.Observable,c=t(84),u=t(105),h={outputFormat:{value:"AsJSONG"}},l={isProgressive:{value:!0}};n.create=function(t,e){var r=new n(i);return r.args=e,r.type=this,r.model=t,r},n.prototype=Object.create(s.prototype),n.prototype.constructor=n,n.prototype._mixin=function(){var t=this,e=c(arguments);return new t.constructor(function(r){return t.subscribe(e.reduce(function(t,e){return Object.create(t,e)},r))})},n.prototype._toJSONG=function(){return this._mixin(h)},n.prototype.progressively=function(){return this._mixin(l)},n.prototype.subscribe=function(t,e,r){var n=t;n&&"object"==typeof n||(n={onNext:t||u,onError:e||u,onCompleted:r||u});var i=this._subscribe(n);switch(typeof i){case"function":return{dispose:i};case"object":return i||{dispose:u};default:return{dispose:u}}},n.prototype.then=function(t,e){var r=this;return new o.Promise(function(t,e){var n,i=!1;r.toArray().subscribe(function(t){n=t.length<=1?t[0]:t},function(t){i=!0,e(t)},function(){!1===i&&t(n)})}).then(t,e)},e.exports=n},{105:105,158:158,159:159,32:32,84:84}],65:[function(t,e,r){function n(t){f.call(this,t||i)}function i(t){return this.isCompleted?a.call(this,t):o.call(this,t)}function o(t){if(this.subscribeCount++>this.subscribeLimit)return t.onError("Loop kill switch thrown."),l.empty;for(var e=[],r=[],n=this.model,i=this.isMaster,o=n._root,u=this.outputFormat,h=o.errorSelector,p=this.method,f=this.groups,d=-1,v=f.length;++d<v;){var g=f[d],y=g.inputType,b=g.arguments;if(b.length>0){var _="_"+p+y+u,x=n[_],w=x(n,b,null,h);r.push.apply(r,w[1]),"PathValues"===y?e.push.apply(e,b.map(s)):"JSONGs"===y?e.push.apply(e,m(b,c)):e.push.apply(e,w[0])}}return this.requestedPaths=e,i?(this.isCompleted=!0,a.call(this,t)):void t.onError({method:p,optimizedPaths:r,invokeSourceRequest:!0})}function a(t){var e=new p(this.model,this.requestedPaths);return"AsJSONG"===this.outputFormat&&(e=e._toJSONG()),this.isProgressive&&(e=e.progressively()),e.subscribe(t)}function s(t){return t.path}function c(t){return t.paths}var u=t(159),h=u.Observable,l=u.Disposable,p=t(67),f=t(62),d=t(9),m=t(82),v=new Array(0);n.create=f.create,n.prototype=Object.create(f.prototype),n.prototype.method="set",n.prototype.constructor=n,n.prototype.invokeSourceRequest=function(t){var e=this,r=this.catch(function(n){var i;if(n&&!0===n.invokeSourceRequest){var o={},a=t._path,s=n.optimizedPaths;t._path=v,t._getPathValuesAsJSONG(t._materialize().withoutDataSource(),s,[o]),t._path=a,i=t._request.set(o).do(function(t){e.isCompleted=s.length===t.paths.length},function(){e.isCompleted=!0}).materialize().flatMap(function(t){if("C"===t.kind)return h.empty();if("E"===t.kind){var e=t.exception;if(d.is(e))return h.throw(t.exception)}return r})}else i=h.throw(n);return i});return new this.constructor(function(t){return r.subscribe(t)})},e.exports=n},{159:159,62:62,67:67,82:82,9:9}],66:[function(t,e,r){var n=function(t){this.disposed=!1,this.currentDisposable=t};n.prototype={dispose:function(){if(!this.disposed&&this.currentDisposable){this.disposed=!0;var t=this.currentDisposable;t.dispose?t.dispose():t()}}},e.exports=n},{}],67:[function(t,e,r){var n=t(64),i=t(68),o=t(69),a={dispose:function(){}},s=t(159).Observable,c=e.exports=function(t,e,r,n){this.model=t,this.currentRemainingPaths=e,this.isJSONGraph=r||!1,this.isProgressive=n||!1};c.prototype=Object.create(s.prototype),c.prototype.subscribe=n.prototype.subscribe,c.prototype.then=n.prototype.then,c.prototype._toJSONG=function(){return new c(this.model,this.currentRemainingPaths,!0,this.isProgressive)},c.prototype.progressively=function(){return new c(this.model,this.currentRemainingPaths,this.isJSONGraph,!0)},c.prototype._subscribe=function(t){var e=[{}],r=[],n=t.isJSONG=this.isJSONGraph,s=this.isProgressive,c=i(this.model,this.currentRemainingPaths,t,s,n,e,r);return c?o(this,this.model,c,t,e,r,1):a}},{159:159,64:64,68:68,69:69}],68:[function(t,e,r){var n=t(19),i=n.getWithPathsAsJSONGraph,o=n.getWithPathsAsPathMap;e.exports=function(t,e,r,n,a,s,c){var u;if(u=a?i(t,e,s):o(t,e,s),u.criticalError)return r.onError(u.criticalError),null;var h=u.hasValue,l=!u.requestedMissingPaths||!t._source,p=s[0].json||s[0].jsonGraph;if(u.errors)for(var f=u.errors,d=c.length,m=0,v=f.length;v>m;++m,++d)c[d]=f[m];if(h&&n||p&&l)try{++t._root.syncRefCount,r.onNext(s[0])}catch(t){throw t}finally{--t._root.syncRefCount}return l?(c.length?r.onError(c):r.onCompleted(),null):u}},{19:19}],69:[function(t,e,r){var n=t(68),i=t(10),o=t(30).fastCat,a=t(49),s=t(88),c=t(66),u=t(46);e.exports=function t(e,r,h,l,p,f,d){if(10===d)throw new i;var m=r._request,v=h.requestedMissingPaths,g=h.optimizedMissingPaths,y=new c,b=[],_=r._path;if(_.length)for(var x=0,w=v.length;w>x;++x)b[x]=o(_,v[x]);else b=v;var S=m.get(b,g,function(){var i=n(r,v,l,e.isProgressive,e.isJSONGraph,p,f);if(i)y.currentDisposable=t(e,r,i,l,p,f,d+1);else{var o=r._root,c=o.cache,h=c[u];a(o,o.expired,s(c),r._maxSize,r._collectRatio,h)}});return y.currentDisposable=S,y}},{10:10,30:30,46:46,49:49,66:66,68:68,88:88}],70:[function(t,e,r){var n=t(67);e.exports=function(t){return new n(this,t)}},{67:67}],71:[function(t,e,r){var n=t(134),i=t(64),o=t(72),a=t(116),s=t(67);e.exports=function(){var t=a(arguments,o,"get");if(!0!==t)return new i(function(e){e.onError(t)});var e=n.fromPathsOrPathValues(arguments);return new s(this,e)}},{116:116,134:134,64:64,67:67,72:72}],72:[function(t,e,r){e.exports={path:!0,pathSyntax:!0}},{}],73:[function(t,e,r){function n(){}var i=t(123),o=t(159),a=o.Disposable;n.prototype.schedule=function(t){return i(t),a.empty},n.prototype.scheduleWithState=function(t,e){var r=this;return i(function(){e(r,t)}),a.empty},e.exports=n},{123:123,159:159}],74:[function(t,e,r){function n(){}var i=t(159),o=i.Disposable;n.prototype.schedule=function(t){return t(),o.empty},n.prototype.scheduleWithState=function(t,e){return e(this,t),o.empty},e.exports=n},{159:159}],75:[function(t,e,r){function n(t){this.delay=t}var i=t(159),o=i.Disposable;n.prototype.schedule=function(t){var e=setTimeout(t,this.delay);return o.create(function(){void 0!==e&&(clearTimeout(e),e=void 0)})},n.prototype.scheduleWithState=function(t,e){var r=this,n=setTimeout(function(){e(r,t)},this.delay);return o.create(function(){void 0!==n&&(clearTimeout(n),n=void 0)})},e.exports=n},{159:159}],76:[function(t,e,r){function n(t,e,r,i,a,s,c,u,h,l,p,d,m,v,g,b,_){for(var x={},w=e<t.length-1,S=t[e],M=y(S,x),E=d.index;;){p.depth=e;var T=o(r,i,a,s,c,u,M,w,!1,p,d,m,v,g,b,_);p[e]=M,p.index=e,d[d.index++]=M;var C=T[0],O=T[1];if(C&&(w?n(t,e+1,r,O,C,s,T[3],T[2],h,l,p,d,m,v,g,b,_):(f(g,C),h.push(p.slice(0,p.index+1)),l.push(d.slice(0,d.index)))),M=y(S,x),x.done)break;d.index=E}}function i(t,e,r,n,i,a,u,p,m,y,b){var _=e.value;if(a.splice(0,a.length),a.push.apply(a,_),d(e))return a.index=_.length,g(e,p,m),[void 0,t,n,r];f(m,e);var x=0,w=e,S=_.length-1,M=e=t,E=n=r;do{var T=_[x],C=S>x,O=o(t,M,e,r,E,n,T,C,!0,i,a,u,p,m,y,b);if(e=O[0],v(e))return a.index=x,O;M=O[1],n=O[2],E=O[3]}while(x++<S);if(a.index=x,w[c]!==e){var P=e[l]||0;e[l]=P+1,e[s+P]=w,w[c]=e,w[h]=P}return[e,M,n,E]}function o(t,e,r,n,o,s,c,u,h,l,f,d,m,g,y,b){for(var x=r.$type;x===p;){var w=i(t,r,n,s,l,f,d,m,g,y,b);if(r=w[0],v(r))return w;e=w[1],s=w[2],o=w[3],x=r.$type}if(void 0!==x)return[r,e,s,o];if(null==c){if(u)throw new Error("`null` is not allowed in branch key positions.");r&&(c=r[a])}else e=r,o=s,r=e[c],s=o&&o[c];return r=_(e,r,s,c,l,f,d,m,g,y,b),[r,e,s,o]}var a=t(36),s=t(43),c=t(33),u=t(46),h=t(42),l=t(44),p=t(120),f=t(50),d=t(94),m=t(96),v=t(102),g=t(86),y=t(143).iterateKeySet,b=t(92),_=t(103);e.exports=function(t,e,r,i,o){for(var a=t._root,s=a,c=a.expired,h=b(),l=a.cache,p=l[u],f=[],d=[],v=[],g=[],y=-1,_=e.length;++y<_;)for(var x=e[y],w=x.paths,S=x.jsonGraph,M=-1,E=w.length;++M<E;){var T=w[M];d.index=0,n(T,0,l,l,l,S,S,S,v,g,f,d,h,c,s,o,i)}var C=l[u],O=a.onChange;return m(O)&&p!==C&&O(),[v,g]}},{102:102,103:103,120:120,143:143,33:33,36:36,42:42,43:43,44:44,46:46,50:50,86:86,92:92,94:94,96:96}],77:[function(t,e,r){function n(t,e,r,i,s,c,u,h,l,p,f,d,m,v){var g=a(t);if(g&&g.length)for(var b=0,x=g.length,w=l.index;;){var S=g[b],M=t[S],E=_(M)&&!M.$type;h.depth=e;var T=o(r,i,s,S,M,E,!1,h,l,p,f,d,m,v);h[e]=S,h.index=e,l[l.index++]=S;var C=T[0],O=T[1];if(C&&(E?n(M,e+1,r,O,C,c,u,h,l,p,f,d,m,v):(y(d,C),c.push(h.slice(0,h.index+1)),u.push(l.slice(0,l.index)))),++b>=x)break;l.index=w}}function i(t,e,r,n,i,a,s,u,p,m){var v=r.value;if(i.splice(0,i.length),i.push.apply(i,v),x(r))return i.index=v.length,M(r,s,u),[void 0,e];y(u,r);var g=r,b=e;if(null!=(r=r[l]))b=r[h]||e,i.index=v.length;else{var _=0,w=v.length-1;b=r=e;do{var E=v[_],T=w>_,C=o(e,b,r,E,t,T,!0,n,i,a,s,u,p,m);if(r=C[0],S(r))return i.index=_,C;b=C[1]}while(_++<w);if(i.index=_,g[l]!==r){var O=r[d]||0;r[d]=O+1,r[c+O]=g,g[l]=r,g[f]=O}}return[r,b]}function o(t,e,r,n,o,a,c,u,h,l,p,f,d,v){for(var g=r.$type;g===m;){var y=i(o,t,r,u,h,l,p,f,d,v);if(r=y[0],S(r))return y;e=y[1],g=r&&r.$type}if(void 0!==g)return[r,e];if(null==n){if(a)throw new Error("`null` is not allowed in branch key positions.");r&&(n=r[s])}else e=r,r=e[n];return r=T(e,r,n,o,a,c,u,h,l,p,f,d,v),[r,e]}function a(t){if(_(t)&&!t.$type){var e=[],r=0;g(t)&&(e[r++]="length");for(var n in t)n[0]!==u&&"$"!==n[0]&&b(t,n)&&(e[r++]=n);return e}}var s=t(36),c=t(43),u=t(40),h=t(39),l=t(33),p=t(46),f=t(42),d=t(44),m=t(120),v=t(13),g=Array.isArray,y=t(50),b=t(91),_=t(100),x=t(95),w=t(96),S=t(102),M=t(86),E=t(92),T=t(104);e.exports=function(t,e,r,i,o){for(var a=t._root,s=a,c=a.expired,u=E(),l=t._path,f=a.cache,d=l.length?v(t,l).value:f,m=d[h]||f,g=f[p],y=[],b=[],_=[],x=l.length,S=-1,M=e.length;++S<M;){var T=e[S],C=l.slice(0);C.index=x,n(T.json,0,f,m,d,b,_,y,C,u,c,s,o,i)}var O=f[p],P=a.onChange;return w(P)&&g!==O&&P(),[b,_]}},{100:100,102:102,104:104,120:120,13:13,33:33,36:36,39:39,40:40,42:42,43:43,44:44,46:46,50:50,86:86,91:91,92:92,95:95,96:96}],78:[function(t,e,r){function n(t,e,r,i,a,s,c,u,h,l,p,f,d,v,g){for(var y={},b=r<e.length-1,x=e[r],w=_(x,y),S=l.index;;){h.depth=r;var M=o(i,a,s,w,t,b,!1,h,l,p,f,d,v,g);h[r]=w,h.index=r,l[l.index++]=w;var E=M[0],T=M[1];if(E&&(b?n(t,e,r+1,i,T,E,c,u,h,l,p,f,d,v,g):(m(d,E),c.push(h.slice(0,h.index+1)),u.push(l.slice(0,l.index)))),w=_(x,y),y.done)break;l.index=S}}function i(t,e,r,n,i,a,h,f,d,g){var _=r.value;if(i.splice(0,i.length),i.push.apply(i,_),v(r))return i.index=_.length,b(r,h,f),[void 0,e];m(f,r);var x=r,w=e;if(null!=(r=r[u]))w=r[c]||e,i.index=_.length;else{var S=0,M=_.length-1;w=r=e;do{var E=_[S],T=M>S,C=o(e,w,r,E,t,T,!0,n,i,a,h,f,d,g);if(r=C[0],y(r))return i.index=S,C;w=C[1]}while(S++<M);if(i.index=S,x[u]!==r){var O=r[p]||0;r[p]=O+1,r[s+O]=x,x[u]=r,x[l]=O}}return[r,w]}function o(t,e,r,n,o,s,c,u,h,l,p,d,m,v){for(var g=r.$type;g===f;){var b=i(o,t,r,u,h,l,p,d,m,v);if(r=b[0],y(r))return b;e=b[1],g=r.$type}if(void 0!==g)return[r,e];if(null==n){if(s)throw new Error("`null` is not allowed in branch key positions.");r&&(n=r[a])}else e=r,r=e[n];return r=w(e,r,n,o,s,c,u,h,l,p,d,m,v),[r,e]}var a=t(36),s=t(43),c=t(39),u=t(33),h=t(46),l=t(42),p=t(44),f=t(120),d=t(13),m=t(50),v=t(95),g=t(96),y=t(102),b=t(86),_=t(143).iterateKeySet,x=t(92),w=t(104);e.exports=function(t,e,r,i,o){for(var a=t._root,s=a,u=a.expired,l=x(),p=t._path,f=a.cache,m=p.length?d(t,p).value:f,v=m[c]||f,y=f[h],b=[],_=[],w=[],S=p.length,M=-1,E=e.length;++M<E;){var T=e[M],C=T.path,O=T.value,P=p.slice(0);P.index=S,n(O,C,0,f,v,m,_,w,b,P,l,u,s,o,i)}var A=f[h],j=a.onChange;return g(j)&&y!==A&&j(),[_,w]}},{102:102,104:104,120:120,13:13,143:143,33:33,36:36,39:39,42:42,43:43,44:44,46:46,50:50,86:86,92:92,95:95,96:96}],79:[function(t,e,r){var n=t(130),i=t(64),o=t(101);e.exports=function(t,e){for(var r=o(t)?t:n.pathValue(t,e),a=0,s=r.path,c=s.length;++a<c;)if("object"==typeof s[a])return new i(function(t){t.onError(new Error("Paths must be simple paths"))});var u=this;return new i(function(t){return u._set(r).subscribe(function(e){for(var r=e.json,n=-1,i=s.length;r&&++n<i;)r=r[s[n]];t.onNext(r)},function(e){t.onError(e)},function(){t.onCompleted()})})}},{101:101,130:130,64:64}],80:[function(t,e,r){var n=t(134),i=t(101),o=t(78);e.exports=function(t,e,r,a){var s=n.fromPath(t),c=e,u=r,h=a;if(i(s)?(h=u,u=c,c=s):c={path:s,value:c},!1===i(c))throw new Error("Model#setValueSync must be called with an Array path.");return"function"!=typeof u&&(u=this._root._errorSelector),"function"!=typeof h&&(h=this._root._comparator),this._syncCheck("setValueSync")?(o(this,[c]),this._getValueSync(this,c.path).value):void 0}},{101:101,134:134,78:78}],81:[function(t,e,r){e.exports=function(t){if(!t)return t;for(var e=-1,r=t.length,n=[];++e<r;)n[e]=t[e];return n}},{}],82:[function(t,e,r){e.exports=function(t,e){for(var r=-1,n=-1,i=t.length,o=[];++n<i;)for(var a=e(t[n],n,t),s=-1,c=a.length;++s<c;)o[++r]=a[s];return o}},{}],83:[function(t,e,r){e.exports=function(t,e){for(var r=-1,n=t.length,i=new Array(n);++r<n;)i[r]=e(t[r],r,t);return i}},{}],84:[function(t,e,r){e.exports=function(t,e,r){var n=e||0,i=-1,o=t.length-n;0>o&&(o=0),r>0&&o>r&&(o=r);for(var a=new Array(o);++i<o;)a[i]=t[i+n];return a}},{}],85:[function(t,e,r){var n=t(40),i=t(91),o=Array.isArray,a=t(100);e.exports=function(t){var e=t;if(a(e)){e=o(t)?[]:{};var r=t;for(var s in r)s[0]!==n&&i(r,s)&&(e[s]=r[s])}return e}},{100:100,40:40,91:91}],86:[function(t,e,r){var n=t(51),i=t(35);e.exports=function(t,e,r){return t[i]||(t[i]=!0,e.push(t),n(r,t)),t}},{35:35,51:51}],87:[function(t,e,r){var n=t(100);e.exports=function(t){return n(t)&&t.$expires||void 0}},{100:100}],88:[function(t,e,r){var n=t(100);e.exports=function(t){return n(t)&&t.$size||0}},{100:100}],89:[function(t,e,r){var n=t(100);e.exports=function(t){return n(t)&&t.$timestamp||void 0}},{100:100}],90:[function(t,e,r){var n=t(100);e.exports=function(t,e){var r=n(t)&&t.$type||void 0;return e&&r?"branch":r}},{100:100}],91:[function(t,e,r){var n=t(100),i=Object.prototype.hasOwnProperty;e.exports=function(t,e){return n(t)&&i.call(t,e)}},{100:100}],92:[function(t,e,r){var n=1;e.exports=function(){return n++}},{}],93:[function(t,e,r){var n=t(36),i=t(39),o=t(46);e.exports=function(t,e,r,a){return t[n]=r,t[i]=e,t[o]=a,e[r]=t,t}},{36:36,39:39,46:46}],94:[function(t,e,r){var n=t(106),i=t(122),o=t(121);e.exports=function(t){var e=t.$expires;return null!=e&&e!==o&&e!==i&&e<n()}},{106:106,121:121,122:122}],95:[function(t,e,r){var n=t(106),i=t(122),o=t(121);e.exports=function(t){var e=t.$expires;return null!=e&&e!==o&&(e===i||e<n())}},{106:106,121:121,122:122}],96:[function(t,e,r){e.exports=function(t){return Boolean(t)&&"function"==typeof t}},{}],97:[function(t,e,r){var n=t(40);e.exports=function(t){return"$size"===t||t&&t.charAt(0)===n}},{40:40}],98:[function(t,e,r){var n=t(100);e.exports=function(t){return n(t)&&"json"in t}},{100:100}],99:[function(t,e,r){var n=Array.isArray,i=t(100);e.exports=function(t){return i(t)&&n(t.paths)&&(i(t.jsonGraph)||i(t.jsong)||i(t.json)||i(t.values)||i(t.value))}},{100:100}],100:[function(t,e,r){e.exports=function(t){return null!==t&&"object"==typeof t}},{}],101:[function(t,e,r){var n=Array.isArray,i=t(100);e.exports=function(t){return i(t)&&(n(t.path)||"string"==typeof t.path)}},{100:100}],102:[function(t,e,r){e.exports=function(t){return null==t||"object"!=typeof t}},{}],103:[function(t,e,r){var n=t(36),i=t(39),o=t(120),a=t(119),s=t(88),c=t(89),u=t(100),h=t(95),l=t(96),p=t(50),f=t(117),d=t(93),m=t(86),v=t(110),g=t(115),y=t(107);e.exports=function(t,e,r,b,_,x,w,S,M,E,T){var C,O,P,A,j,R,L;if(e===r){if(null===r)return e=f(r,void 0,r),t=g(t,-e.$size,M,w),e=d(e,t,b),p(M,e),e;if(void 0===r)return r;if((A=u(e))&&null==(O=e.$type))return null==e[i]&&(e[n]=b,e[i]=t),e}else(A=u(e))&&(O=e.$type);if(O!==o){if(j=u(r),j&&(P=r.$type),A&&!O&&(null==r||j&&!P))return e}else{if(null==r)return h(e)?void m(e,S,M):e;if((j=u(r))&&(P=r.$type)===o)if(e===r){if(null!=e[i])return e}else if(R=e.$timestamp,L=r.$timestamp,!h(e)&&!h(r)&&R>L)return}if(O&&j&&!P)return d(v(e,r,t,b,M),t,b);if(P||!j){if(P===a&&l(T)&&(r=T(y(_,b),r)),P&&e===r)null==e[i]&&(e=f(e,O,e.value),t=g(t,-e.$size,M,w),e=d(e,t,b,w));else{var N=!0;!O&&A||(N=c(r)<c(e)==0,(O||P)&&l(E)&&(N=!E(e,r,x.slice(0,x.index)))),N&&(r=f(r,P,P?r.value:r),C=s(e)-s(r),e=v(e,r,t,b,M),t=g(t,C,M,w),e=d(e,t,b,w))}h(e)?m(e,S,M):p(M,e)}else null==e&&(e=d(r,t,b));return e}},{100:100,107:107,110:110,115:115,117:117,119:119,120:120,36:36,39:39,50:50,86:86,88:88,89:89,93:93,95:95,96:96}],104:[function(t,e,r){var n=t(120),i=t(119),o=t(90),a=t(88),s=t(89),c=t(95),u=t(102),h=t(96),l=t(117),p=t(86),f=t(93),d=t(110),m=t(115),v=t(114),g=t(107);e.exports=function(t,e,r,y,b,_,x,w,S,M,E,T,C){var O=o(e,_);if(b||_)O&&c(e)&&(O="expired",p(e,M,E)),(O&&O!==n||u(e))&&(e=d(e,{},t,r,E),e=f(e,t,r,S),e=v(e,S));else{var P=y,A=o(P),j=s(P)<s(e)==0;if((O||A)&&h(T)&&(j=!T(e,P,w.slice(0,w.index))),j){A===i&&h(C)&&(P=C(g(x,r),P)),P=l(P,A,A?P.value:P);var R=a(e)-a(P);e=d(e,P,t,r,E),t=m(t,R,E,S),e=f(e,t,r,S)}}return e}},{102:102,107:107,110:110,114:114,115:115,117:117,119:119,120:120,86:86,88:88,89:89,90:90,93:93,95:95,96:96}],105:[function(t,e,r){e.exports=function(){}},{}],106:[function(t,e,r){e.exports=Date.now},{}],107:[function(t,e,r){e.exports=function(t,e){var r=t.slice(0,t.depth);return r[r.length]=e,r}},{}],108:[function(t,e,r){var n=t(120),i=t(39),o=t(51),a=t(100),s=t(112),c=t(113);e.exports=function(t,e,r,u){if(a(t)){var h=t.$type;return Boolean(h)&&(h===n&&c(t),o(u,t)),s(t),e[r]=t[i]=void 0,!0}return!1}},{100:100,112:112,113:113,120:120,39:39,51:51}],109:[function(t,e,r){var n=t(91),i=t(40),o=t(108);e.exports=function t(e,r,a,s){if(o(e,r,a,s)){if(null==e.$type)for(var c in e)c[0]!==i&&"$"!==c[0]&&n(e,c)&&t(e[c],e,c,s);return!0}return!1}},{108:108,40:40,91:91}],110:[function(t,e,r){var n=t(100),i=t(111),o=t(109);e.exports=function(t,e,r,a,s){return t===e?t:(n(t)&&(i(t,e),o(t,r,a,s)),r[a]=e,e)}},{100:100,109:109,111:111}],111:[function(t,e,r){var n=t(43),i=t(33),o=t(44);e.exports=function(t,e){for(var r=t[o]||0,a=e[o]||0,s=-1;++s<r;){var c=t[n+s];void 0!==c&&(c[i]=e,e[n+(a+s)]=c,t[n+s]=void 0)}return e[o]=r+a,t[o]=void 0,e}},{33:33,43:43,44:44}],112:[function(t,e,r){var n=t(43),i=t(33),o=t(42),a=t(44);e.exports=function(t){for(var e=-1,r=t[a]||0;++e<r;){var s=t[n+e];null!=s&&(s[i]=s[o]=t[n+e]=void 0)}return t[a]=void 0,t}},{33:33,42:42,43:43,44:44}],113:[function(t,e,r){var n=t(43),i=t(33),o=t(42),a=t(44);e.exports=function(t){var e=t[i];if(e){for(var r=(t[o]||0)-1,s=(e[a]||0)-1;++r<=s;)e[n+r]=e[n+(r+1)];e[a]=s,t[o]=t[i]=e=void 0}return t}},{33:33,42:42,43:43,44:44}],114:[function(t,e,r){var n=t(43),i=t(39),o=t(46),a=t(44);e.exports=function(t,e){var r=[t],s=0;do{var c=r[s--];if(c&&c[o]!==e){c[o]=e,r[s++]=c[i];for(var u=-1,h=c[a]||0;++u<h;)r[s++]=c[n+u]}}while(s>-1);return t}},{39:39,43:43,44:44,46:46}],115:[function(t,e,r){var n=t(36),i=t(46),o=t(39),a=t(108),s=t(114);e.exports=function(t,e,r,c){var u=t;do{var h=u[o];0>=(u.$size=(u.$size||0)-e)&&null!=h?a(u,h,u[n],r):u[i]!==c&&s(u,c),u=h}while(u);return t}},{108:108,114:114,36:36,39:39,46:46}],116:[function(t,e,r){var n=Array.isArray,i=t(101),o=t(99),a=t(98),s=t(134);e.exports=function(t,e,r){for(var c=0,u=t.length;u>c;++c){var h=t[c],l=!1;if(n(h)&&e.path?l=!0:"string"==typeof h&&e.pathSyntax?l=!0:i(h)&&e.pathValue?(h.path=s.fromPath(h.path),l=!0):o(h)&&e.jsonGraph?l=!0:a(h)&&e.json?l=!0:"function"==typeof h&&c+1===u&&e.selector&&(l=!0),!l)return new Error("Unrecognized argument "+typeof h+" ["+String(h)+"] to Model#"+r)}return!0}},{101:101,134:134,98:98,99:99}],117:[function(t,e,r){var n=t(130),i=n.atom,o=t(106),a=t(122),s=t(37),c=t(85),u=Array.isArray,h=t(88),l=t(87);e.exports=function(t,e,r){var n=0,p=t,f=e;if(f?(p=c(p),n=h(p),p.$type=f):(p=i(r),f=p.$type,p[s]=!0),null==r)n=51;else if(null==n||0>=n)switch(typeof r){case"object":n=u(r)?50+r.length:51;break;case"string":n=50+r.length;break;default:n=51}var d=l(p);return"number"==typeof d&&a>d&&(p.$expires=o()+-1*d),p.$size=n,p}},{106:106,122:122,130:130,37:37,85:85,87:87,88:88}],118:[function(t,e,r){e.exports="atom"},{}],119:[function(t,e,r){e.exports="error"},{}],120:[function(t,e,r){e.exports="ref"},{}],121:[function(t,e,r){e.exports=1},{}],122:[function(t,e,r){e.exports=0},{}],123:[function(t,e,r){"use strict";function n(){if(c.length)throw c.shift()}function i(t){var e;e=s.length?s.pop():new o,e.task=t,a(e)}function o(){this.task=null}var a=t(124),s=[],c=[],u=a.makeRequestCallFromTimer(n);e.exports=i,o.prototype.call=function(){try{this.task.call()}catch(t){i.onerror?i.onerror(t):(c.push(t),u())}finally{this.task=null,s[s.length]=this}}},{124:124}],124:[function(t,e,r){(function(t){"use strict";function r(t){a.length||(o(),s=!0),a[a.length]=t}function n(){for(;c<a.length;){var t=c;if(c+=1,a[t].call(),c>u){for(var e=0,r=a.length-c;r>e;e++)a[e]=a[e+c];a.length-=c,c=0}}a.length=0,c=0,s=!1}function i(t){return function(){function e(){clearTimeout(r),clearInterval(n),t()}var r=setTimeout(e,0),n=setInterval(e,50)}}e.exports=r;var o,a=[],s=!1,c=0,u=1024,h=t.MutationObserver||t.WebKitMutationObserver;o="function"==typeof h?function(t){var e=1,r=new h(t),n=document.createTextNode("");return r.observe(n,{characterData:!0}),function(){e=-e,n.data=e}}(n):i(n),r.requestFlush=o,r.makeRequestCallFromTimer=i}).call(this,void 0!==i?i:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],125:[function(t,e,r){"use strict";function n(t,e){var r;for(r in e)t[r]=e[r];return t}function i(t,e){if(this._jsongUrl=t,"number"==typeof e){e={timeout:e}}this._config=n({timeout:15e3,headers:{}},e||{})}var o=t(129),a=t(126);Array.isArray,i.prototype={constructor:i,buildQueryObject:a,get:function(t){var e=this.buildQueryObject(this._jsongUrl,"GET",{paths:t,method:"get"}),r=n(e,this._config);return o("GET",r,this)},set:function(t){var e="POST",r=this.buildQueryObject(this._jsongUrl,e,{jsonGraph:t,method:"set"}),i=n(r,this._config);return i.headers["Content-Type"]="application/x-www-form-urlencoded",o(e,i,this)},call:function(t,e,r,i){e=e||[],r=r||[],i=i||[];var a="POST",s=[];s.push("method=call"),s.push("callPath="+encodeURIComponent(JSON.stringify(t))),s.push("arguments="+encodeURIComponent(JSON.stringify(e))),s.push("pathSuffixes="+encodeURIComponent(JSON.stringify(r))),s.push("paths="+encodeURIComponent(JSON.stringify(i)));var c=this.buildQueryObject(this._jsongUrl,a,s.join("&")),u=n(c,this._config);return u.headers["Content-Type"]="application/x-www-form-urlencoded",o(a,u,this)}},i.XMLHttpSource=i,i.default=i,e.exports=i},{126:126,129:129}],126:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n,i=[],o={url:t},a=-1!==t.indexOf("?"),s=a?"&":"?";return"string"==typeof r?i.push(r):(n=Object.keys(r),n.forEach(function(t){var e="object"==typeof r[t]?JSON.stringify(r[t]):r[t];i.push(t+"="+encodeURIComponent(e))})),"GET"===e?o.url+=s+i.join("&"):o.data=i.join("&"),o}},{}],127:[function(t,e,r){(function(t){"use strict";e.exports=function(){var e=new t.XMLHttpRequest;if("withCredentials"in e)return e;if(t.XDomainRequest)return new XDomainRequest;throw new Error("CORS is not supported by your browser")}}).call(this,void 0!==i?i:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],128:[function(t,e,r){(function(t){"use strict";e.exports=function(){var e,r,n;if(t.XMLHttpRequest)return new t.XMLHttpRequest;try{for(r=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],n=0;3>n;n++)try{if(e=r[n],new t.ActiveXObject(e))break}catch(t){}return new t.ActiveXObject(e)}catch(t){throw new Error("XMLHttpRequest is not supported by your browser")}}}).call(this,void 0!==i?i:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],129:[function(t,e,r){"use strict";function n(){}function i(t,e,r){return n.create(function(n){var i,o,l,p,f,d={method:t||"GET",crossDomain:!1,async:!0,headers:{},responseType:"json"};for(f in e)h.call(e,f)&&(d[f]=e[f]);d.crossDomain||d.headers["X-Requested-With"]||(d.headers["X-Requested-With"]="XMLHttpRequest"),null!=r.onBeforeRequest&&r.onBeforeRequest(d);try{i=d.crossDomain?u():c()}catch(t){n.onError(t)}try{d.user?i.open(d.method,d.url,d.async,d.user,d.password):i.open(d.method,d.url,d.async),i.timeout=d.timeout,i.withCredentials=!1!==d.withCredentials,l=d.headers;for(p in l)h.call(l,p)&&i.setRequestHeader(p,l[p]);if(d.responseType)try{i.responseType=d.responseType}catch(t){if("json"!==d.responseType)throw t}i.onreadystatechange=function(t){4===i.readyState&&(o||(o=!0,a(n,i,t)))},i.ontimeout=function(t){o||(o=!0,s(n,i,"timeout error",t))},i.send(d.data)}catch(t){n.onError(t)}return function(){o||4===i.readyState||(o=!0,i.abort())}})}function o(t,e,r){r||(r=new Error(e)),t.onError(r)}function a(t,e,r){var n,i;if(e&&t){i=e.responseType,n="response"in e?e.response:e.responseText;var a=1223===e.status?204:e.status;if(a>=200&&399>=a){try{"json"!==i&&(n=JSON.parse(n||"")),"string"==typeof n&&(n=JSON.parse(n||""))}catch(r){o(t,"invalid json",r)}return t.onNext(n),void t.onCompleted()}return 401===a||403===a||407===a?o(t,n):410===a?o(t,n):408===a||504===a?o(t,n):o(t,n||"Response code "+a)}}function s(t,e,r,n){o(t,r||e.statusText||"request error",n)}var c=t(128),u=t(127),h=Object.prototype.hasOwnProperty,l=function(){};n.create=function(t){var e=new n;return e.subscribe=function(e,r,n){var i,o;return i="function"==typeof e?{onNext:e,onError:r||l,onCompleted:n||l}:e,o=t(i),"function"==typeof o?{dispose:o}:o},e},e.exports=i},{127:127,128:128}],130:[function(t,e,r){function n(t,e,r){var n=Object.create(null);if(null!=r){for(var i in r)n[i]=r[i];return n.$type=t,n.value=e,n}return{$type:t,value:e}}var i=t(134);e.exports={ref:function(t,e){return n("ref",i.fromPath(t),e)},atom:function(t,e){return n("atom",t,e)},undefined:function(){return n("atom")},error:function(t,e){return n("error",t,e)},pathValue:function(t,e){return{path:i.fromPath(t),value:e}},pathInvalidation:function(t){return{path:i.fromPath(t),invalidated:!0}}}},{134:134}],131:[function(t,e,r){e.exports={integers:"integers",
+ranges:"ranges",keys:"keys"}},{}],132:[function(t,e,r){var n={token:"token",dotSeparator:".",commaSeparator:",",openingBracket:"[",closingBracket:"]",openingBrace:"{",closingBrace:"}",escape:"\\",space:" ",colon:":",quote:"quote",unknown:"unknown"};e.exports=n},{}],133:[function(t,e,r){e.exports={indexer:{nested:"Indexers cannot be nested.",needQuotes:"unquoted indexers must be numeric.",empty:"cannot have empty indexers.",leadingDot:"Indexers cannot have leading dots.",leadingComma:"Indexers cannot have leading comma.",requiresComma:"Indexers require commas between indexer args.",routedTokens:"Only one token can be used per indexer when specifying routed tokens."},range:{precedingNaN:"ranges must be preceded by numbers.",suceedingNaN:"ranges must be suceeded by numbers."},routed:{invalid:"Invalid routed token.  only integers|ranges|keys are supported."},quote:{empty:"cannot have empty quoted keys.",illegalEscape:"Invalid escape character.  Only quotes are escapable."},unexpectedToken:"Unexpected token.",invalidIdentifier:"Invalid Identifier.",invalidPath:"Please provide a valid path.",throwError:function(t,e,r){if(r)throw t+" -- "+e.parseString+" with next token: "+r;throw t+" -- "+e.parseString}}},{}],134:[function(t,e,r){var n=t(140),i=t(135),o=t(131),a=function(t,e){return i(new n(t,e))};e.exports=a,a.fromPathsOrPathValues=function(t,e){if(!t)return[];for(var r=[],n=0,i=t.length;i>n;n++)"string"==typeof t[n]?r[n]=a(t[n],e):"string"==typeof t[n].path?r[n]={path:a(t[n].path,e),value:t[n].value}:r[n]=t[n];return r},a.fromPath=function(t,e){return t?"string"==typeof t?a(t,e):t:[]},a.RoutedTokens=o},{131:131,135:135,140:140}],135:[function(t,e,r){var n=t(132),i=t(133),o=t(136);e.exports=function(t){for(var e=t.next(),r={},a=[];!e.done;){switch(e.type){case n.token:var s=+e.token[0];isNaN(s)||i.throwError(i.invalidIdentifier,t),a[a.length]=e.token;break;case n.dotSeparator:0===a.length&&i.throwError(i.unexpectedToken,t);break;case n.space:break;case n.openingBracket:o(t,e,r,a);break;default:i.throwError(i.unexpectedToken,t)}e=t.next()}return 0===a.length&&i.throwError(i.invalidPath,t),a}},{132:132,133:133,136:136}],136:[function(t,e,r){var n=t(132),i=t(133),o=i.indexer,a=t(138),s=t(137),c=t(139);e.exports=function(t,e,r,u){var h=t.next(),l=!1,p=1,f=!1;for(r.indexer=[];!h.done;){switch(h.type){case n.token:case n.quote:r.indexer.length===p&&i.throwError(o.requiresComma,t)}switch(h.type){case n.openingBrace:f=!0,c(t,h,r,u);break;case n.token:var d=+h.token;isNaN(d)&&i.throwError(o.needQuotes,t),r.indexer[r.indexer.length]=d;break;case n.dotSeparator:r.indexer.length||i.throwError(o.leadingDot,t),a(t,h,r,u);break;case n.space:break;case n.closingBracket:l=!0;break;case n.quote:s(t,h,r,u);break;case n.openingBracket:i.throwError(o.nested,t);break;case n.commaSeparator:++p;break;default:i.throwError(i.unexpectedToken,t)}if(l)break;h=t.next()}0===r.indexer.length&&i.throwError(o.empty,t),r.indexer.length>1&&f&&i.throwError(o.routedTokens,t),1===r.indexer.length&&(r.indexer=r.indexer[0]),u[u.length]=r.indexer,r.indexer=void 0}},{132:132,133:133,137:137,138:138,139:139}],137:[function(t,e,r){var n=t(132),i=t(133),o=i.quote;e.exports=function(t,e,r,a){for(var s=t.next(),c="",u=e.token,h=!1,l=!1;!s.done;){switch(s.type){case n.token:case n.space:case n.dotSeparator:case n.commaSeparator:case n.openingBracket:case n.closingBracket:case n.openingBrace:case n.closingBrace:h&&i.throwError(o.illegalEscape,t),c+=s.token;break;case n.quote:h?(c+=s.token,h=!1):s.token!==u?c+=s.token:l=!0;break;case n.escape:h=!0;break;default:i.throwError(i.unexpectedToken,t)}if(l)break;s=t.next()}0===c.length&&i.throwError(o.empty,t),r.indexer[r.indexer.length]=c}},{132:132,133:133}],138:[function(t,e,r){var n=t(140),i=t(132),o=t(133);e.exports=function(t,e,r,a){var s,c=t.peek(),u=1,h=!1,l=!0,p=r.indexer.length-1,f=n.toNumber(r.indexer[p]);for(isNaN(f)&&o.throwError(o.range.precedingNaN,t);!h&&!c.done;){switch(c.type){case i.dotSeparator:3===u&&o.throwError(o.unexpectedToken,t),3===++u&&(l=!1);break;case i.token:s=n.toNumber(t.next().token),isNaN(s)&&o.throwError(o.range.suceedingNaN,t),h=!0;break;default:h=!0}if(h)break;t.next(),c=t.peek()}r.indexer[p]={from:f,to:l?s:s-1}}},{132:132,133:133,140:140}],139:[function(t,e,r){var n=t(132),i=t(131),o=t(133),a=o.routed;e.exports=function(t,e,r,s){var c=t.next(),u=!1,h="";switch(c.token){case i.integers:case i.ranges:case i.keys:break;default:o.throwError(a.invalid,t)}var l=t.next();if(l.type===n.colon&&(u=!0,l=t.next(),l.type!==n.token&&o.throwError(a.invalid,t),h=l.token,l=t.next()),l.type===n.closingBrace){var p={type:c.token,named:u,name:h};r.indexer[r.indexer.length]=p}else o.throwError(a.invalid,t)}},{131:131,132:132,133:133}],140:[function(t,e,r){function n(t,e,r){return{token:t,done:r,type:e}}function i(t,e,r){var i,b=!1,_="",x=r?y:g;do{if(i=e+1>=t.length)break;var w=t[e+1];if(void 0===w||-1!==x.indexOf(w)){if(_.length)break;++e;var S;switch(w){case a:S=o.dotSeparator;break;case s:S=o.commaSeparator;break;case c:S=o.openingBracket;break;case u:S=o.closingBracket;break;case h:S=o.openingBrace;break;case l:S=o.closingBrace;break;case v:S=o.space;break;case d:case m:S=o.quote;break;case f:S=o.escape;break;case p:S=o.colon;break;default:S=o.unknown}b=n(w,S,!1);break}_+=w,++e}while(!i);return!b&&_.length&&(b=n(_,o.token,!1)),b||(b={done:!0}),{token:b,idx:e}}var o=t(132),a=".",s=",",c="[",u="]",h="{",l="}",p=":",f="\\",d='"',m="'",v=" ",g="\\'\"[]., ",y="\\{}'\"[]., :",b=e.exports=function(t,e){this._string=t,this._idx=-1,this._extended=e,this.parseString=""};b.prototype={next:function(){var t=this._nextToken?this._nextToken:i(this._string,this._idx,this._extended);return this._idx=t.idx,this._nextToken=!1,this.parseString+=t.token.token,t.token},peek:function(){var t=this._nextToken?this._nextToken:i(this._string,this._idx,this._extended);return this._nextToken=t,t.token}},b.toNumber=function(t){return isNaN(+t)?NaN:+t}},{132:132}],141:[function(t,e,r){var n=t(147),i=t(148);e.exports=function(t){var e=t.reduce(function(t,e){var r=e.length;return t[r]||(t[r]=[]),t[r].push(e),t},{});return Object.keys(e).forEach(function(t){e[t]=i(e[t])}),n(e)}},{147:147,148:148}],142:[function(t,e,r){var n=t(144);e.exports=function t(e,r,i){for(var o=e,a=!0;a&&i<r.length;++i){var s=r[i],c=typeof s;if(s&&"object"===c){var u={},h=n(s,u),l=i+1;do{var p=o[h];a=void 0!==p,a&&(a=t(p,r,l)),h=n(s,u)}while(a&&!u.done);break}o=o[s],a=void 0!==o}return a}},{144:144}],143:[function(t,e,r){e.exports={iterateKeySet:t(144),toTree:t(148),toTreeWithUnion:t(149),pathsComplementFromTree:t(146),pathsComplementFromLengthTree:t(145),hasIntersection:t(142),toPaths:t(147),collapse:t(141)}},{141:141,142:142,144:144,145:145,146:146,147:147,148:148,149:149}],144:[function(t,e,r){function n(t,e){var r=e.from=t.from||0,n=e.to=t.to||"number"==typeof t.length&&e.from+t.length-1||0;e.rangeOffset=e.from,e.loaded=!0,r>n&&(e.empty=!0)}function i(t,e){e.done=!1;var r=e.isObject=!(!t||"object"!=typeof t);e.isArray=r&&o(t),e.arrayOffset=0}var o=Array.isArray;e.exports=function(t,e){if(void 0===e.isArray&&i(t,e),e.isArray){var r;do{e.loaded&&e.rangeOffset>e.to&&(++e.arrayOffset,e.loaded=!1);if(e.arrayOffset>=t.length){e.done=!0;break}var o=t[e.arrayOffset];if("object"===typeof o){if(e.loaded||n(o,e),e.empty)continue;r=e.rangeOffset++}else++e.arrayOffset,r=o}while(void 0===r);return r}return e.isObject?(e.loaded||n(t,e),e.rangeOffset>e.to?void(e.done=!0):e.rangeOffset++):(e.done=!0,t)}},{}],145:[function(t,e,r){var n=t(142);e.exports=function(t,e){for(var r=[],i=-1,o=0,a=t.length;a>o;++o){var s=t[o];n(e[s.length],s,0)||(r[++i]=s)}return r}},{142:142}],146:[function(t,e,r){var n=t(142);e.exports=function(t,e){for(var r=[],i=-1,o=0,a=t.length;a>o;++o)n(e,t[o],0)||(r[++i]=t[o]);return r}},{142:142}],147:[function(t,e,r){function n(t){return null!==t&&typeof t===p}function i(t,e,r){var n,o,a,s,l,p,f,d,m,v,g,y,b,_,x=u(String(e)),w=Object.create(null),S=[],M=-1,E=0,T=[],C=0;if(s=[],l=-1,r-1>e){for(p=c(t,s);++l<p;)n=s[l],o=i(t[n],e+1,r),a=o.code,w[a]?o=w[a]:(S[E++]=a,o=w[a]={keys:[],sets:o.sets}),x=u(x+n+a),h(n)&&o.keys.push(parseInt(n,10))||o.keys.push(n);for(;++M<E;)if(n=S[M],o=w[n],s=o.keys,(p=s.length)>0)for(f=o.sets,d=-1,m=f.length,b=s[0];++d<m;){for(v=f[d],g=-1,y=v.length,_=new Array(y+1),_[0]=p>1&&s||b;++g<y;)_[g+1]=v[g];T[C++]=_}}else for(p=c(t,s),T[C++]=p>1?[s]:s;++l<p;)x=u(x+s[l]);return{code:x,sets:T}}function o(t){for(var e=-1,r=t.length;++e<r;){var n=t[e];l(n)&&(t[e]=a(n))}return t}function a(t){for(var e=-1,r=t.length-1,n=r>0;++e<=r;){var i=t[e];if(!h(i)){n=!1;break}t[e]=parseInt(i,10)}if(!0===n){t.sort(s);var o=t[0],a=t[r];if(r>=a-o)return{from:o,to:a}}return t}function s(t,e){return t-e}function c(t,e,r){var n=0;for(var i in t)e[n++]=i;return n>1&&e.sort(r),n}function u(t){for(var e=5381,r=-1,n=t.length;++r<n;)e=(e<<5)+e+t.charCodeAt(r);return String(e)}function h(t){return!l(t)&&t-parseFloat(t)+1>=0}var l=Array.isArray,p="object";e.exports=function(t){var e,r=[],a=0;for(var s in t)if(h(s)&&n(e=t[s]))for(var c=i(e,0,parseInt(s,10)).sets,u=-1,l=c.length;++u<l;)r[a++]=o(c[u]);return r}},{}],148:[function(t,e,r){function n(t,e,r){var o,a=e[r],s={},c=r+1;o=i(a,s);do{var u=t[o];u||(c===e.length?t[o]=null:u=t[o]={}),c<e.length&&n(u,e,c),s.done||(o=i(a,s))}while(!s.done)}var i=t(144);Array.isArray,e.exports=function(t){return t.reduce(function(t,e){return n(t,e,0),t},{})}},{144:144}],149:[function(t,e,r){},{}],150:[function(t,e,r){function n(){h=!1,s.length?u=s.concat(u):l=-1,u.length&&i()}function i(){if(!h){var t=setTimeout(n);h=!0;for(var e=u.length;e;){for(s=u,u=[];++l<e;)s&&s[l].run();l=-1,e=u.length}s=null,h=!1,clearTimeout(t)}}function o(t,e){this.fun=t,this.array=e}function a(){}var s,c=e.exports={},u=[],h=!1,l=-1;c.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];u.push(new o(t,e)),1!==u.length||h||setTimeout(i,0)},o.prototype.run=function(){this.fun.apply(null,this.array)},c.title="browser",c.browser=!0,c.env={},c.argv=[],c.version="",c.versions={},c.on=a,c.addListener=a,c.once=a,c.off=a,c.removeListener=a,c.removeAllListeners=a,c.emit=a,c.binding=function(t){throw new Error("process.binding is not supported")},c.cwd=function(){return"/"},c.chdir=function(t){throw new Error("process.chdir is not supported")},c.umask=function(){return 0}},{}],151:[function(t,e,r){"use strict";e.exports=t(156)},{156:156}],152:[function(t,e,r){"use strict";function n(){}function i(t){try{return t.then}catch(t){return v=t,g}}function o(t,e){try{return t(e)}catch(t){return v=t,g}}function a(t,e,r){try{t(e,r)}catch(t){return v=t,g}}function s(t){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._37=0,this._12=null,this._59=[],t!==n&&d(t,this)}function c(t,e,r){return new t.constructor(function(i,o){var a=new s(n);a.then(i,o),u(t,new f(e,r,a))})}function u(t,e){for(;3===t._37;)t=t._12;return 0===t._37?void t._59.push(e):void m(function(){var r=1===t._37?e.onFulfilled:e.onRejected;if(null===r)return void(1===t._37?h(e.promise,t._12):l(e.promise,t._12));var n=o(r,t._12);n===g?l(e.promise,v):h(e.promise,n)})}function h(t,e){if(e===t)return l(t,new TypeError("A promise cannot be resolved with itself."));if(e&&("object"==typeof e||"function"==typeof e)){var r=i(e);if(r===g)return l(t,v);if(r===t.then&&e instanceof s)return t._37=3,t._12=e,void p(t);if("function"==typeof r)return void d(r.bind(e),t)}t._37=1,t._12=e,p(t)}function l(t,e){t._37=2,t._12=e,p(t)}function p(t){for(var e=0;e<t._59.length;e++)u(t,t._59[e]);t._59=null}function f(t,e,r){this.onFulfilled="function"==typeof t?t:null,this.onRejected="function"==typeof e?e:null,this.promise=r}function d(t,e){var r=!1,n=a(t,function(t){r||(r=!0,h(e,t))},function(t){r||(r=!0,l(e,t))});r||n!==g||(r=!0,l(e,v))}var m=t(124),v=null,g={};e.exports=s,s._99=n,s.prototype.then=function(t,e){if(this.constructor!==s)return c(this,t,e);var r=new s(n);return u(this,new f(t,e,r)),r}},{124:124}],153:[function(t,e,r){"use strict";var n=t(152);e.exports=n,n.prototype.done=function(t,e){(arguments.length?this.then.apply(this,arguments):this).then(null,function(t){setTimeout(function(){throw t},0)})}},{152:152}],154:[function(t,e,r){"use strict";function n(t){var e=new i(i._99);return e._37=1,e._12=t,e}var i=t(152);e.exports=i;var o=n(!0),a=n(!1),s=n(null),c=n(void 0),u=n(0),h=n("");i.resolve=function(t){if(t instanceof i)return t;if(null===t)return s;if(void 0===t)return c;if(!0===t)return o;if(!1===t)return a;if(0===t)return u;if(""===t)return h;if("object"==typeof t||"function"==typeof t)try{var e=t.then;if("function"==typeof e)return new i(e.bind(t))}catch(t){return new i(function(e,r){r(t)})}return n(t)},i.all=function(t){var e=Array.prototype.slice.call(t);return new i(function(t,r){function n(a,s){if(s&&("object"==typeof s||"function"==typeof s)){if(s instanceof i&&s.then===i.prototype.then){for(;3===s._37;)s=s._12;return 1===s._37?n(a,s._12):(2===s._37&&r(s._12),void s.then(function(t){n(a,t)},r))}var c=s.then;if("function"==typeof c){return void new i(c.bind(s)).then(function(t){n(a,t)},r)}}e[a]=s,0==--o&&t(e)}if(0===e.length)return t([]);for(var o=e.length,a=0;a<e.length;a++)n(a,e[a])})},i.reject=function(t){return new i(function(e,r){r(t)})},i.race=function(t){return new i(function(e,r){t.forEach(function(t){i.resolve(t).then(e,r)})})},i.prototype.catch=function(t){return this.then(null,t)}},{152:152}],155:[function(t,e,r){"use strict";var n=t(152);e.exports=n,n.prototype.finally=function(t){return this.then(function(e){return n.resolve(t()).then(function(){return e})},function(e){return n.resolve(t()).then(function(){throw e})})}},{152:152}],156:[function(t,e,r){"use strict";e.exports=t(152),t(153),t(155),t(154),t(157)},{152:152,153:153,154:154,155:155,157:157}],157:[function(t,e,r){"use strict";var n=t(152),i=t(123);e.exports=n,n.denodeify=function(t,e){return e=e||1/0,function(){var r=this,i=Array.prototype.slice.call(arguments,0,e>0?e:0);return new n(function(e,n){i.push(function(t,r){t?n(t):e(r)});var o=t.apply(r,i);!o||"object"!=typeof o&&"function"!=typeof o||"function"!=typeof o.then||e(o)})}},n.nodeify=function(t){return function(){var e=Array.prototype.slice.call(arguments),r="function"==typeof e[e.length-1]?e.pop():null,o=this;try{return t.apply(this,arguments).nodeify(r,o)}catch(t){if(null===r||void 0===r)return new n(function(e,r){r(t)});i(function(){r.call(o,t)})}}},n.prototype.nodeify=function(t,e){return"function"!=typeof t?this:void this.then(function(r){i(function(){t.call(e,null,r)})},function(r){i(function(){t.call(e,r)})})}},{123:123,152:152}],158:[function(e,r,n){(function(i){(function(o){var a={boolean:!1,function:!0,object:!0,number:!1,string:!1,undefined:!1},s=a[typeof window]&&window||this,c=a[typeof n]&&n&&!n.nodeType&&n,u=a[typeof r]&&r&&!r.nodeType&&r,h=(u&&u.exports,a[typeof i]&&i);!h||h.global!==h&&h.window!==h||(s=h),"function"==typeof t&&t.amd?t(["rx"],function(t,e){return o(s,e,t)}):"object"==typeof r&&r&&r.exports===c?r.exports=o(s,r.exports,e(159)):s.Rx=o(s,{},s.Rx)}).call(this,function(t,e,r,n){function i(){try{return f.apply(this,arguments)}catch(t){return I.e=t,I}}function o(t){if(!M(t))throw new TypeError("fn must be a function");return f=t,i}function a(t,e,r){return new g(function(n){var i=!1,o=null,a=[];return t.subscribe(function(t){var s,c;try{c=e(t)}catch(t){return void n.onError(t)}if(s=0,i)try{s=r(c,o)}catch(t){return void n.onError(t)}else i=!0,o=c;s>0&&(o=c,a=[]),s>=0&&a.push(t)},function(t){n.onError(t)},function(){n.onNext(a),n.onCompleted()})},t)}function s(t){if(0===t.length)throw new R;return t[0]}function c(t,e,r,n){if(0>e)throw new N;return new g(function(i){var o=e;return t.subscribe(function(t){0==o--&&(i.onNext(t),i.onCompleted())},function(t){i.onError(t)},function(){r?(i.onNext(n),i.onCompleted()):i.onError(new N)})},t)}function u(t,e,r){return new g(function(n){var i=r,o=!1;return t.subscribe(function(t){o?n.onError(new Error("Sequence contains more than one element")):(i=t,o=!0)},function(t){n.onError(t)},function(){o||e?(n.onNext(i),n.onCompleted()):n.onError(new R)})},t)}function h(t,e,r){return new g(function(n){return t.subscribe(function(t){n.onNext(t),n.onCompleted()},function(t){n.onError(t)},function(){e?(n.onNext(r),n.onCompleted()):n.onError(new R)})},t)}function l(t,e,r){return new g(function(n){var i=r,o=!1;return t.subscribe(function(t){i=t,o=!0},function(t){n.onError(t)},function(){o||e?(n.onNext(i),n.onCompleted()):n.onError(new R)})},t)}function p(t,e,r,i){var o=j(e,r,3);return new g(function(e){var r=0;return t.subscribe(function(n){var a;try{a=o(n,r,t)}catch(t){return void e.onError(t)}a?(e.onNext(i?r:n),e.onCompleted()):r++},function(t){e.onError(t)},function(){e.onNext(i?-1:n),e.onCompleted()})},t)}var f,d=r.Observable,m=d.prototype,v=r.CompositeDisposable,g=r.AnonymousObservable,y=r.Disposable.empty,b=(r.internals.isEqual,r.helpers),_=b.not,x=b.defaultComparer,w=b.identity,S=b.defaultSubComparer,M=b.isFunction,E=b.isPromise,T=b.isArrayLike,C=b.isIterable,O=r.internals.inherits,P=d.fromPromise,A=d.from,j=r.internals.bindCallback,R=r.EmptyError,L=r.ObservableBase,N=r.ArgumentOutOfRangeError,I={e:{}};m.aggregate=function(){var t,e,r=!1,n=this;return 2===arguments.length?(r=!0,e=arguments[0],t=arguments[1]):t=arguments[0],new g(function(i){var o,a,s;return n.subscribe(function(n){!s&&(s=!0);try{o?a=t(a,n):(a=r?t(e,n):n,o=!0)}catch(t){return i.onError(t)}},function(t){i.onError(t)},function(){s&&i.onNext(a),!s&&r&&i.onNext(e),!s&&!r&&i.onError(new R),i.onCompleted()})},n)};var D=function(t){function e(e,r,n,i){this.source=e,this.acc=r,this.hasSeed=n,this.seed=i,t.call(this)}function r(t,e){this.o=t,this.acc=e.acc,this.hasSeed=e.hasSeed,this.seed=e.seed,this.hasAccumulation=!1,this.result=null,this.hasValue=!1,this.isStopped=!1}return O(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t,this))},r.prototype.onNext=function(t){this.isStopped||(!this.hasValue&&(this.hasValue=!0),this.hasAccumulation?this.result=o(this.acc)(this.result,t):(this.result=this.hasSeed?o(this.acc)(this.seed,t):t,this.hasAccumulation=!0),this.result===I&&this.o.onError(this.result.e))},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.hasValue&&this.o.onNext(this.result),!this.hasValue&&this.hasSeed&&this.o.onNext(this.seed),!this.hasValue&&!this.hasSeed&&this.o.onError(new R),this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e}(L);return m.reduce=function(t){var e=!1;if(2===arguments.length){e=!0;var r=arguments[1]}return new D(this,t,e,r)},m.some=function(t,e){var r=this;return t?r.filter(t,e).some():new g(function(t){return r.subscribe(function(){t.onNext(!0),t.onCompleted()},function(e){t.onError(e)},function(){t.onNext(!1),t.onCompleted()})},r)},m.any=function(){return this.some.apply(this,arguments)},m.isEmpty=function(){return this.any().map(_)},m.every=function(t,e){return this.filter(function(e){return!t(e)},e).some().map(_)},m.all=function(){return this.every.apply(this,arguments)},m.includes=function(t,e){function r(t,e){return 0===t&&0===e||t===e||isNaN(t)&&isNaN(e)}var n=this;return new g(function(i){var o=0,a=+e||0;return Math.abs(a)===1/0&&(a=0),0>a?(i.onNext(!1),i.onCompleted(),y):n.subscribe(function(e){o++>=a&&r(e,t)&&(i.onNext(!0),i.onCompleted())},function(t){i.onError(t)},function(){i.onNext(!1),i.onCompleted()})},this)},m.contains=function(t,e){m.includes(t,e)},m.count=function(t,e){return t?this.filter(t,e).count():this.reduce(function(t){return t+1},0)},m.indexOf=function(t,e){var r=this;return new g(function(n){var i=0,o=+e||0;return Math.abs(o)===1/0&&(o=0),0>o?(n.onNext(-1),n.onCompleted(),y):r.subscribe(function(e){i>=o&&e===t&&(n.onNext(i),n.onCompleted()),i++},function(t){n.onError(t)},function(){n.onNext(-1),n.onCompleted()})},r)},m.sum=function(t,e){return t&&M(t)?this.map(t,e).sum():this.reduce(function(t,e){return t+e},0)},m.minBy=function(t,e){return e||(e=S),a(this,t,function(t,r){return-1*e(t,r)})},m.min=function(t){return this.minBy(w,t).map(function(t){return s(t)})},m.maxBy=function(t,e){return e||(e=S),a(this,t,e)},m.max=function(t){return this.maxBy(w,t).map(function(t){return s(t)})},m.average=function(t,e){return t&&M(t)?this.map(t,e).average():this.reduce(function(t,e){return{sum:t.sum+e,count:t.count+1}},{sum:0,count:0}).map(function(t){if(0===t.count)throw new R;return t.sum/t.count})},m.sequenceEqual=function(t,e){var r=this;return e||(e=x),new g(function(n){var i=!1,o=!1,a=[],s=[],c=r.subscribe(function(t){var r,i;if(s.length>0){i=s.shift();try{r=e(i,t)}catch(t){return void n.onError(t)}r||(n.onNext(!1),n.onCompleted())}else o?(n.onNext(!1),n.onCompleted()):a.push(t)},function(t){n.onError(t)},function(){i=!0,0===a.length&&(s.length>0?(n.onNext(!1),n.onCompleted()):o&&(n.onNext(!0),n.onCompleted()))});(T(t)||C(t))&&(t=A(t)),E(t)&&(t=P(t));var u=t.subscribe(function(t){var r;if(a.length>0){var o=a.shift();try{r=e(o,t)}catch(t){return void n.onError(t)}r||(n.onNext(!1),n.onCompleted())}else i?(n.onNext(!1),n.onCompleted()):s.push(t)},function(t){n.onError(t)},function(){o=!0,0===s.length&&(a.length>0?(n.onNext(!1),n.onCompleted()):i&&(n.onNext(!0),n.onCompleted()))});return new v(c,u)},r)},m.elementAt=function(t){return c(this,t,!1)},m.elementAtOrDefault=function(t,e){return c(this,t,!0,e)},m.single=function(t,e){return t&&M(t)?this.where(t,e).single():u(this,!1)},m.singleOrDefault=function(t,e,r){return t&&M(t)?this.filter(t,r).singleOrDefault(null,e):u(this,!0,e)},m.first=function(t,e){return t?this.where(t,e).first():h(this,!1)},m.firstOrDefault=function(t,e,r){return t?this.where(t).firstOrDefault(null,e):h(this,!0,e)},m.last=function(t,e){return t?this.where(t,e).last():l(this,!1)},m.lastOrDefault=function(t,e,r){return t?this.where(t,r).lastOrDefault(null,e):l(this,!0,e)},m.find=function(t,e){return p(this,t,e,!1)},m.findIndex=function(t,e){return p(this,t,e,!0)},m.toSet=function(){if(void 0===t.Set)throw new TypeError;var e=this;return new g(function(r){var n=new t.Set;return e.subscribe(function(t){n.add(t)},function(t){r.onError(t)},function(){r.onNext(n),r.onCompleted()})},e)},m.toMap=function(e,r){if(void 0===t.Map)throw new TypeError;var n=this;return new g(function(i){var o=new t.Map;return n.subscribe(function(t){var n;try{n=e(t)}catch(t){return void i.onError(t)}var a=t;if(r)try{a=r(t)}catch(t){return void i.onError(t)}o.set(n,a)},function(t){i.onError(t)},function(){i.onNext(o),i.onCompleted()})},n)},r})}).call(this,void 0!==i?i:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{159:159}],159:[function(e,r,n){(function(e,i){(function(o){function a(t){for(var e=[],r=0,n=t.length;n>r;r++)e.push(t[r]);return e}function c(t,e){if(ut&&e.stack&&"object"==typeof t&&null!==t&&t.stack&&-1===t.stack.indexOf(pt)){for(var r=[],n=e;n;n=n.source)n.stack&&r.unshift(n.stack);r.unshift(t.stack);var i=r.join("\n"+pt+"\n");t.stack=u(i)}}function u(t){for(var e=t.split("\n"),r=[],n=0,i=e.length;i>n;n++){var o=e[n];h(o)||l(o)||!o||r.push(o)}return r.join("\n")}function h(t){var e=f(t);if(!e)return!1;var r=e[0],n=e[1];return r===ht&&n>=lt&&Lr>=n}function l(t){return-1!==t.indexOf("(module.js:")||-1!==t.indexOf("(node.js:")}function p(){if(ut)try{throw new Error}catch(n){var t=n.stack.split("\n"),e=t[0].indexOf("@")>0?t[1]:t[2],r=f(e);if(!r)return;return ht=r[0],r[1]}}function f(t){var e=/at .+ \((.+):(\d+):(?:\d+)\)$/.exec(t);if(e)return[e[1],Number(e[2])];var r=/at ([^ ]+):(\d+):(?:\d+)$/.exec(t);if(r)return[r[1],Number(r[2])];var n=/.*@(.+):(\d+)$/.exec(t);return n?[n[1],Number(n[2])]:void 0}function d(t){var e=[];if(!Vt(t))return e;$t.nonEnumArgs&&t.length&&Ht(t)&&(t=Xt.call(t));var r=$t.enumPrototypes&&"function"==typeof t,n=$t.enumErrorProps&&(t===Ft||t instanceof Error);for(var i in t)r&&"prototype"==i||n&&("message"==i||"name"==i)||e.push(i);if($t.nonEnumShadows&&t!==Ut){var o=t.constructor,a=-1,s=Et;if(t===(o&&o.prototype))var c=t===Bt?Nt:t===Ft?At:It.call(t),u=Gt[c];for(;++a<s;)i=Mt[a],u&&u[i]||!Dt.call(t,i)||e.push(i)}return e}function m(t,e,r){for(var n=-1,i=r(t),o=i.length;++n<o;){var a=i[n];if(!1===e(t[a],a,t))break}return t}function v(t,e){return m(t,e,d)}function g(t){return"function"!=typeof t.toString&&"string"==typeof(t+"")}function y(t,e,r,n){if(t===e)return 0!==t||1/t==1/e;var i=typeof t,o=typeof e;if(t===t&&(null==t||null==e||"function"!=i&&"object"!=i&&"function"!=o&&"object"!=o))return!1;var a=It.call(t),s=It.call(e);if(a==Tt&&(a=Rt),s==Tt&&(s=Rt),a!=s)return!1;switch(a){case Ot:case Pt:return+t==+e;case jt:return t!=+t?e!=+e:0==t?1/t==1/e:t==+e;case Lt:case Nt:return t==String(e)}var c=a==Ct;if(!c){if(a!=Rt||!$t.nodeClass&&(g(t)||g(e)))return!1;var u=!$t.argsObject&&Ht(t)?Object:t.constructor,h=!$t.argsObject&&Ht(e)?Object:e.constructor;if(!(u==h||Dt.call(t,"constructor")&&Dt.call(e,"constructor")||ct(u)&&u instanceof u&&ct(h)&&h instanceof h)&&("constructor"in t&&"constructor"in e))return!1}r||(r=[]),n||(n=[]);for(var l=r.length;l--;)if(r[l]==t)return n[l]==e;var p=0,f=!0;if(r.push(t),n.push(e),c){if(l=t.length,p=e.length,f=p==l)for(;p--;){var d=e[p];if(!(f=y(t[p],d,r,n)))break}}else v(e,function(e,i,o){return Dt.call(o,i)?(p++,f=Dt.call(t,i)&&y(t[i],e,r,n)):void 0}),f&&v(t,function(t,e,r){return Dt.call(r,e)?f=--p>-1:void 0});return r.pop(),n.pop(),f}function b(t,e){for(var r=new Array(t),n=0;t>n;n++)r[n]=e();return r}function _(){try{return Wt.apply(this,arguments)}catch(t){return Jt.e=t,Jt}}function x(t){if(!ct(t))throw new TypeError("fn must be a function");return Wt=t,_}function w(t){throw t}function S(t,e){this.id=t,this.value=e}function M(t,e){this.scheduler=t,this.disposable=e,this.isDisposed=!1}function E(t,e){e.isDisposed||(e.isDisposed=!0,e.disposable.dispose())}function T(t){this._s=s}function C(t){this._s=s,this._l=s.length,this._i=0}function O(t){this._a=t}function P(t){this._a=t,this._l=L(t),this._i=0}function A(t){return"number"==typeof t&&Y.isFinite(t)}function j(t){var e,r=t[bt];if(!r&&"string"==typeof t)return e=new T(t),e[bt]();if(!r&&t.length!==o)return e=new O(t),e[bt]();if(!r)throw new TypeError("Object is not iterable");return t[bt]()}function R(t){var e=+t;return 0===e?e:isNaN(e)?e:0>e?-1:1}function L(t){var e=+t.length;return isNaN(e)?0:0!==e&&A(e)?(e=R(e)*Math.floor(Math.abs(e)),0>=e?0:e>Ze?Ze:e):e}function N(t,e){this.observer=t,this.parent=e}function I(t,e){return de(t)||(t=ye),new Qe(e,t)}function D(t,e){this.observer=t,this.parent=e}function k(t,e){this.observer=t,this.parent=e}function F(t,e){return new Or(function(r){var n=new ce,i=new ue;return i.setDisposable(n),n.setDisposable(t.subscribe(function(t){r.onNext(t)},function(t){try{var n=e(t)}catch(t){return r.onError(t)}st(n)&&(n=He(n));var o=new ce;i.setDisposable(o),o.setDisposable(n.subscribe(r))},function(t){r.onCompleted(t)})),i},t)}function U(){return!1}function B(t,e){var r=this;return new Or(function(n){var i=0,o=t.length;return r.subscribe(function(r){if(o>i){var a=t[i++],s=x(e)(r,a);if(s===Jt)return n.onError(s.e);n.onNext(s)}else n.onCompleted()},function(t){n.onError(t)},function(){n.onCompleted()})},r)}function U(){return!1}function z(){return[]}function U(){return!1}function G(){return[]}function $(t,e){this.observer=t,this.accumulator=e.accumulator,this.hasSeed=e.hasSeed,this.seed=e.seed,this.hasAccumulation=!1,this.accumulation=null,this.hasValue=!1,this.isStopped=!1}function V(t,e,r){var n=St(e,r,3);return t.map(function(e,r){var i=n(e,r,t);return st(i)&&(i=He(i)),(wt(i)||xt(i))&&(i=Je(i)),i}).concatAll()}function H(t,e,r){for(var n=0,i=t.length;i>n;n++)if(r(t[n],e))return n;return-1}function W(t){this.comparer=t,this.set=[]}function q(t,e,r){var n=St(e,r,3);return t.map(function(e,r){var i=n(e,r,t);return st(i)&&(i=He(i)),(wt(i)||xt(i))&&(i=Je(i)),i}).mergeAll()}var X={boolean:!1,function:!0,object:!0,number:!1,string:!1,undefined:!1},Y=X[typeof window]&&window||this,K=X[typeof n]&&n&&!n.nodeType&&n,Z=X[typeof r]&&r&&!r.nodeType&&r,J=Z&&Z.exports===K&&K,Q=X[typeof i]&&i;!Q||Q.global!==Q&&Q.window!==Q||(Y=Q);var tt={internals:{},config:{Promise:Y.Promise},helpers:{}},et=tt.helpers.noop=function(){},rt=(tt.helpers.notDefined=function(t){return void 0===t},tt.helpers.identity=function(t){return t}),nt=(tt.helpers.pluck=function(t){return function(e){return e[t]}},tt.helpers.just=function(t){return function(){return t}},tt.helpers.defaultNow=Date.now),it=tt.helpers.defaultComparer=function(t,e){return qt(t,e)},ot=tt.helpers.defaultSubComparer=function(t,e){return t>e?1:e>t?-1:0},at=(tt.helpers.defaultKeySerializer=function(t){return t.toString()},tt.helpers.defaultError=function(t){throw t}),st=tt.helpers.isPromise=function(t){return!!t&&"function"!=typeof t.subscribe&&"function"==typeof t.then},ct=(tt.helpers.asArray=function(){return Array.prototype.slice.call(arguments)},tt.helpers.not=function(t){return!t},tt.helpers.isFunction=function(){var t=function(t){return"function"==typeof t||!1};return t(/x/)&&(t=function(t){return"function"==typeof t&&"[object Function]"==It.call(t)}),t}());tt.config.longStackSupport=!1;var ut=!1;try{throw new Error}catch(t){ut=!!t.stack}var ht,lt=p(),pt="From previous event:";(tt.EmptyError=function(){this.message="Sequence contains no elements.",Error.call(this)}).prototype=Error.prototype;var ft=tt.ObjectDisposedError=function(){this.message="Object has been disposed",Error.call(this)};ft.prototype=Error.prototype;var dt=tt.ArgumentOutOfRangeError=function(){this.message="Argument out of range",Error.call(this)};dt.prototype=Error.prototype;var mt=tt.NotSupportedError=function(t){this.message=t||"This operation is not supported",Error.call(this)};mt.prototype=Error.prototype;var vt=tt.NotImplementedError=function(t){this.message=t||"This operation is not implemented",Error.call(this)};vt.prototype=Error.prototype;var gt=tt.helpers.notImplemented=function(){throw new vt},yt=tt.helpers.notSupported=function(){throw new mt},bt="function"==typeof Symbol&&Symbol.iterator||"_es6shim_iterator_";Y.Set&&"function"==typeof(new Y.Set)["@@iterator"]&&(bt="@@iterator");var _t=tt.doneEnumerator={done:!0,value:o},xt=tt.helpers.isIterable=function(t){return t[bt]!==o},wt=tt.helpers.isArrayLike=function(t){return t&&t.length!==o};tt.helpers.iterator=bt;var St=tt.internals.bindCallback=function(t,e,r){if(void 0===e)return t;switch(r){case 0:return function(){return t.call(e)};case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}},Mt=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],Et=Mt.length,Tt="[object Arguments]",Ct="[object Array]",Ot="[object Boolean]",Pt="[object Date]",At="[object Error]",jt="[object Number]",Rt="[object Object]",Lt="[object RegExp]",Nt="[object String]",It=Object.prototype.toString,Dt=Object.prototype.hasOwnProperty,kt=It.call(arguments)==Tt,Ft=Error.prototype,Ut=Object.prototype,Bt=String.prototype,zt=Ut.propertyIsEnumerable;try{!(It.call(document)==Rt&&!({toString:0}+""))}catch(t){!0}var Gt={};Gt[Ct]=Gt[Pt]=Gt[jt]={constructor:!0,toLocaleString:!0,toString:!0,valueOf:!0},Gt[Ot]=Gt[Nt]={constructor:!0,toString:!0,valueOf:!0},Gt[At]=Gt["[object Function]"]=Gt[Lt]={constructor:!0,toString:!0},Gt[Rt]={constructor:!0};var $t={};!function(){var t=function(){this.x=1},e=[];t.prototype={valueOf:1,y:1};for(var r in new t)e.push(r);for(r in arguments);$t.enumErrorProps=zt.call(Ft,"message")||zt.call(Ft,"name"),$t.enumPrototypes=zt.call(t,"prototype"),$t.nonEnumArgs=0!=r,$t.nonEnumShadows=!/valueOf/.test(e)}(1);var Vt=tt.internals.isObject=function(t){var e=typeof t
+;return t&&("function"==e||"object"==e)||!1},Ht=function(t){return!(!t||"object"!=typeof t)&&It.call(t)==Tt};kt||(Ht=function(t){return!(!t||"object"!=typeof t)&&Dt.call(t,"callee")});var Wt,qt=tt.internals.isEqual=function(t,e){return y(t,e,[],[])},Xt=Array.prototype.slice,Yt=this.inherits=tt.internals.inherits=function(t,e){function r(){this.constructor=t}r.prototype=e.prototype,t.prototype=new r},Kt=tt.internals.addProperties=function(t){for(var e=[],r=1,n=arguments.length;n>r;r++)e.push(arguments[r]);for(var i=0,o=e.length;o>i;i++){var a=e[i];for(var s in a)t[s]=a[s]}},Zt=tt.internals.addRef=function(t,e){return new Or(function(r){return new ee(e.getDisposable(),t.subscribe(r))})},Jt={e:{}};S.prototype.compareTo=function(t){var e=this.value.compareTo(t.value);return 0===e&&(e=this.id-t.id),e};var Qt=tt.internals.PriorityQueue=function(t){this.items=new Array(t),this.length=0},te=Qt.prototype;te.isHigherPriority=function(t,e){return this.items[t].compareTo(this.items[e])<0},te.percolate=function(t){if(!(t>=this.length||0>t)){var e=t-1>>1;if(!(0>e||e===t)&&this.isHigherPriority(t,e)){var r=this.items[t];this.items[t]=this.items[e],this.items[e]=r,this.percolate(e)}}},te.heapify=function(t){if(+t||(t=0),!(t>=this.length||0>t)){var e=2*t+1,r=2*t+2,n=t;if(e<this.length&&this.isHigherPriority(e,n)&&(n=e),r<this.length&&this.isHigherPriority(r,n)&&(n=r),n!==t){var i=this.items[t];this.items[t]=this.items[n],this.items[n]=i,this.heapify(n)}}},te.peek=function(){return this.items[0].value},te.removeAt=function(t){this.items[t]=this.items[--this.length],this.items[this.length]=o,this.heapify()},te.dequeue=function(){var t=this.peek();return this.removeAt(0),t},te.enqueue=function(t){var e=this.length++;this.items[e]=new S(Qt.count++,t),this.percolate(e)},te.remove=function(t){for(var e=0;e<this.length;e++)if(this.items[e].value===t)return this.removeAt(e),!0;return!1},Qt.count=0;var ee=tt.CompositeDisposable=function(){var t,e,r=[];if(Array.isArray(arguments[0]))r=arguments[0],e=r.length;else for(e=arguments.length,r=new Array(e),t=0;e>t;t++)r[t]=arguments[t];for(t=0;e>t;t++)if(!ae(r[t]))throw new TypeError("Not a disposable");this.disposables=r,this.isDisposed=!1,this.length=r.length},re=ee.prototype;re.add=function(t){this.isDisposed?t.dispose():(this.disposables.push(t),this.length++)},re.remove=function(t){var e=!1;if(!this.isDisposed){var r=this.disposables.indexOf(t);-1!==r&&(e=!0,this.disposables.splice(r,1),this.length--,t.dispose())}return e},re.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;for(var t=this.disposables.length,e=new Array(t),r=0;t>r;r++)e[r]=this.disposables[r];for(this.disposables=[],this.length=0,r=0;t>r;r++)e[r].dispose()}};var ne=tt.Disposable=function(t){this.isDisposed=!1,this.action=t||et};ne.prototype.dispose=function(){this.isDisposed||(this.action(),this.isDisposed=!0)};var ie=ne.create=function(t){return new ne(t)},oe=ne.empty={dispose:et},ae=ne.isDisposable=function(t){return t&&ct(t.dispose)},se=ne.checkDisposed=function(t){if(t.isDisposed)throw new ft},ce=tt.SingleAssignmentDisposable=function(){this.isDisposed=!1,this.current=null};ce.prototype.getDisposable=function(){return this.current},ce.prototype.setDisposable=function(t){if(this.current)throw new Error("Disposable has already been assigned");var e=this.isDisposed;!e&&(this.current=t),e&&t&&t.dispose()},ce.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var t=this.current;this.current=null}t&&t.dispose()};var ue=tt.SerialDisposable=function(){this.isDisposed=!1,this.current=null};ue.prototype.getDisposable=function(){return this.current},ue.prototype.setDisposable=function(t){var e=this.isDisposed;if(!e){var r=this.current;this.current=t}r&&r.dispose(),e&&t&&t.dispose()},ue.prototype.dispose=function(){if(!this.isDisposed){this.isDisposed=!0;var t=this.current;this.current=null}t&&t.dispose()};var he=tt.RefCountDisposable=function(){function t(t){this.disposable=t,this.disposable.count++,this.isInnerDisposed=!1}function e(t){this.underlyingDisposable=t,this.isDisposed=!1,this.isPrimaryDisposed=!1,this.count=0}return t.prototype.dispose=function(){this.disposable.isDisposed||this.isInnerDisposed||(this.isInnerDisposed=!0,0===--this.disposable.count&&this.disposable.isPrimaryDisposed&&(this.disposable.isDisposed=!0,this.disposable.underlyingDisposable.dispose()))},e.prototype.dispose=function(){this.isDisposed||this.isPrimaryDisposed||(this.isPrimaryDisposed=!0,0===this.count&&(this.isDisposed=!0,this.underlyingDisposable.dispose()))},e.prototype.getDisposable=function(){return this.isDisposed?oe:new t(this)},e}();M.prototype.dispose=function(){this.scheduler.scheduleWithState(this,E)};var le=tt.internals.ScheduledItem=function(t,e,r,n,i){this.scheduler=t,this.state=e,this.action=r,this.dueTime=n,this.comparer=i||ot,this.disposable=new ce};le.prototype.invoke=function(){this.disposable.setDisposable(this.invokeCore())},le.prototype.compareTo=function(t){return this.comparer(this.dueTime,t.dueTime)},le.prototype.isCancelled=function(){return this.disposable.isDisposed},le.prototype.invokeCore=function(){return this.action(this.scheduler,this.state)};var pe=tt.Scheduler=function(){function t(t,e,r,n){this.now=t,this._schedule=e,this._scheduleRelative=r,this._scheduleAbsolute=n}function e(t,e){return e(),oe}t.isScheduler=function(e){return e instanceof t};var r=t.prototype;return r.schedule=function(t){return this._schedule(t,e)},r.scheduleWithState=function(t,e){return this._schedule(t,e)},r.scheduleWithRelative=function(t,r){return this._scheduleRelative(r,t,e)},r.scheduleWithRelativeAndState=function(t,e,r){return this._scheduleRelative(t,e,r)},r.scheduleWithAbsolute=function(t,r){return this._scheduleAbsolute(r,t,e)},r.scheduleWithAbsoluteAndState=function(t,e,r){return this._scheduleAbsolute(t,e,r)},t.now=nt,t.normalize=function(t){return 0>t&&(t=0),t},t}(),fe=pe.normalize,de=pe.isScheduler;!function(t){function e(t,e){function r(e){i(e,function(e){var n=!1,i=!1,a=t.scheduleWithState(e,function(t,e){return n?o.remove(a):i=!0,r(e),oe});i||(o.add(a),n=!0)})}var n=e[0],i=e[1],o=new ee;return r(n),o}function r(t,e,r){function n(e){o(e,function(e,i){var o=!1,s=!1,c=t[r](e,i,function(t,e){return o?a.remove(c):s=!0,n(e),oe});s||(a.add(c),o=!0)})}var i=e[0],o=e[1],a=new ee;return n(i),a}function n(t,e){t(function(r){e(t,r)})}t.scheduleRecursive=function(t){return this.scheduleRecursiveWithState(t,n)},t.scheduleRecursiveWithState=function(t,r){return this.scheduleWithState([t,r],e)},t.scheduleRecursiveWithRelative=function(t,e){return this.scheduleRecursiveWithRelativeAndState(e,t,n)},t.scheduleRecursiveWithRelativeAndState=function(t,e,n){return this._scheduleRelative([t,n],e,function(t,e){return r(t,e,"scheduleWithRelativeAndState")})},t.scheduleRecursiveWithAbsolute=function(t,e){return this.scheduleRecursiveWithAbsoluteAndState(e,t,n)},t.scheduleRecursiveWithAbsoluteAndState=function(t,e,n){return this._scheduleAbsolute([t,n],e,function(t,e){return r(t,e,"scheduleWithAbsoluteAndState")})}}(pe.prototype),function(t){pe.prototype.schedulePeriodic=function(t,e){return this.schedulePeriodicWithState(null,t,e)},pe.prototype.schedulePeriodicWithState=function(t,e,r){if(void 0===Y.setInterval)throw new mt;e=fe(e);var n=t,i=Y.setInterval(function(){n=r(n)},e);return ie(function(){Y.clearInterval(i)})}}(pe.prototype),function(t){t.catchError=t.catch=function(t){return new we(this,t)}}(pe.prototype);var me,ve,ge=(tt.internals.SchedulePeriodicRecursive=function(){function t(t,e){e(0,this._period);try{this._state=this._action(this._state)}catch(t){throw this._cancel.dispose(),t}}function e(t,e,r,n){this._scheduler=t,this._state=e,this._period=r,this._action=n}return e.prototype.start=function(){var e=new ce;return this._cancel=e,e.setDisposable(this._scheduler.scheduleRecursiveWithRelativeAndState(0,this._period,t.bind(this))),e},e}(),pe.immediate=function(){function t(t,e){return e(this,t)}return new pe(nt,t,yt,yt)}()),ye=pe.currentThread=function(){function t(){for(;r.length>0;){var t=r.dequeue();!t.isCancelled()&&t.invoke()}}function e(e,n){var i=new le(this,e,n,this.now());if(r)r.enqueue(i);else{r=new Qt(4),r.enqueue(i);var o=x(t)();if(r=null,o===Jt)return w(o.e)}return i.disposable}var r,n=new pe(nt,e,yt,yt);return n.scheduleRequired=function(){return!r},n}(),be=function(){var t,e=et;if(Y.setTimeout)t=Y.setTimeout,e=Y.clearTimeout;else{if(!Y.WScript)throw new mt;t=function(t,e){Y.WScript.Sleep(e),t()}}return{setTimeout:t,clearTimeout:e}}(),_e=be.setTimeout,xe=be.clearTimeout;!function(){function t(e){if(o)_e(function(){t(e)},0);else{var r=i[e];if(r){o=!0;var n=x(r)();if(ve(e),o=!1,n===Jt)return w(n.e)}}}function r(e){"string"==typeof e.data&&e.data.substring(0,c.length)===c&&t(e.data.substring(c.length))}var n=1,i={},o=!1;ve=function(t){delete i[t]};var a=RegExp("^"+String(It).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString| for [^\]]+/g,".*?")+"$"),s="function"==typeof(s=Q&&J&&Q.setImmediate)&&!a.test(s)&&s;if(ct(s))me=function(e){var r=n++;return i[r]=e,s(function(){t(r)}),r};else if(void 0!==e&&"[object process]"==={}.toString.call(e))me=function(r){var o=n++;return i[o]=r,e.nextTick(function(){t(o)}),o};else if(function(){if(!Y.postMessage||Y.importScripts)return!1;var t=!1,e=Y.onmessage;return Y.onmessage=function(){t=!0},Y.postMessage("","*"),Y.onmessage=e,t}()){var c="ms.rx.schedule"+Math.random();Y.addEventListener?Y.addEventListener("message",r,!1):Y.attachEvent?Y.attachEvent("onmessage",r):Y.onmessage=r,me=function(t){var e=n++;return i[e]=t,Y.postMessage(c+currentId,"*"),e}}else if(Y.MessageChannel){var u=new Y.MessageChannel;u.port1.onmessage=function(e){t(e.data)},me=function(t){var e=n++;return i[e]=t,u.port2.postMessage(e),e}}else me="document"in Y&&"onreadystatechange"in Y.document.createElement("script")?function(e){var r=Y.document.createElement("script"),o=n++;return i[o]=e,r.onreadystatechange=function(){t(o),r.onreadystatechange=null,r.parentNode.removeChild(r),r=null},Y.document.documentElement.appendChild(r),o}:function(e){var r=n++;return i[r]=e,_e(function(){t(r)},0),r}}();var we=(pe.timeout=pe.default=function(){function t(t,e){var r=this,n=new ce,i=me(function(){!n.isDisposed&&n.setDisposable(e(r,t))});return new ee(n,ie(function(){ve(i)}))}function e(t,e,r){var n=this,i=pe.normalize(e),o=new ce;if(0===i)return n.scheduleWithState(t,r);var a=_e(function(){!o.isDisposed&&o.setDisposable(r(n,t))},i);return new ee(o,ie(function(){xe(a)}))}function r(t,e,r){return this.scheduleWithRelativeAndState(t,e-this.now(),r)}return new pe(nt,t,e,r)}(),function(t){function e(t,e){return this._scheduler.scheduleWithState(t,this._wrap(e))}function r(t,e,r){return this._scheduler.scheduleWithRelativeAndState(t,e,this._wrap(r))}function n(t,e,r){return this._scheduler.scheduleWithAbsoluteAndState(t,e,this._wrap(r))}function i(i,o){this._scheduler=i,this._handler=o,this._recursiveOriginal=null,this._recursiveWrapper=null,t.call(this,this._scheduler.now.bind(this._scheduler),e,r,n)}return Yt(i,t),i.prototype._clone=function(t){return new i(t,this._handler)},i.prototype._wrap=function(t){var e=this;return function(r,n){try{return t(e._getRecursiveWrapper(r),n)}catch(t){if(!e._handler(t))throw t;return oe}}},i.prototype._getRecursiveWrapper=function(t){if(this._recursiveOriginal!==t){this._recursiveOriginal=t;var e=this._clone(t);e._recursiveOriginal=t,e._recursiveWrapper=e,this._recursiveWrapper=e}return this._recursiveWrapper},i.prototype.schedulePeriodicWithState=function(t,e,r){var n=this,i=!1,o=new ce;return o.setDisposable(this._scheduler.schedulePeriodicWithState(t,e,function(t){if(i)return null;try{return r(t)}catch(t){if(i=!0,!n._handler(t))throw t;return o.dispose(),null}})),o},i}(pe)),Se=tt.Notification=function(){function t(t,e,r,n,i,o){this.kind=t,this.value=e,this.exception=r,this._accept=n,this._acceptObservable=i,this.toString=o}return t.prototype.accept=function(t,e,r){return t&&"object"==typeof t?this._acceptObservable(t):this._accept(t,e,r)},t.prototype.toObservable=function(t){var e=this;return de(t)||(t=ge),new Or(function(r){return t.scheduleWithState(e,function(t,e){e._acceptObservable(r),"N"===e.kind&&r.onCompleted()})})},t}(),Me=Se.createOnNext=function(){function t(t){return t(this.value)}function e(t){return t.onNext(this.value)}function r(){return"OnNext("+this.value+")"}return function(n){return new Se("N",n,null,t,e,r)}}(),Ee=Se.createOnError=function(){function t(t,e){return e(this.exception)}function e(t){return t.onError(this.exception)}function r(){return"OnError("+this.exception+")"}return function(n){return new Se("E",null,n,t,e,r)}}(),Te=Se.createOnCompleted=function(){function t(t,e,r){return r()}function e(t){return t.onCompleted()}function r(){return"OnCompleted()"}return function(){return new Se("C",null,null,t,e,r)}}(),Ce=tt.Observer=function(){};Ce.prototype.toNotifier=function(){var t=this;return function(e){return e.accept(t)}},Ce.prototype.asObserver=function(){return new je(this.onNext.bind(this),this.onError.bind(this),this.onCompleted.bind(this))},Ce.prototype.checked=function(){return new Re(this)};var Oe=Ce.create=function(t,e,r){return t||(t=et),e||(e=at),r||(r=et),new je(t,e,r)};Ce.fromNotifier=function(t,e){return new je(function(r){return t.call(e,Me(r))},function(r){return t.call(e,Ee(r))},function(){return t.call(e,Te())})},Ce.prototype.notifyOn=function(t){return new Ne(t,this)},Ce.prototype.makeSafe=function(t){return new AnonymousSafeObserver(this._onNext,this._onError,this._onCompleted,t)};var Pe,Ae=tt.internals.AbstractObserver=function(t){function e(){this.isStopped=!1,t.call(this)}return Yt(e,t),e.prototype.next=gt,e.prototype.error=gt,e.prototype.completed=gt,e.prototype.onNext=function(t){this.isStopped||this.next(t)},e.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.error(t))},e.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.completed())},e.prototype.dispose=function(){this.isStopped=!0},e.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.error(t),!0)},e}(Ce),je=tt.AnonymousObserver=function(t){function e(e,r,n){t.call(this),this._onNext=e,this._onError=r,this._onCompleted=n}return Yt(e,t),e.prototype.next=function(t){this._onNext(t)},e.prototype.error=function(t){this._onError(t)},e.prototype.completed=function(){this._onCompleted()},e}(Ae),Re=function(t){function e(e){t.call(this),this._observer=e,this._state=0}Yt(e,t);var r=e.prototype;return r.onNext=function(t){this.checkAccess();var e=x(this._observer.onNext).call(this._observer,t);this._state=0,e===Jt&&w(e.e)},r.onError=function(t){this.checkAccess();var e=x(this._observer.onError).call(this._observer,t);this._state=2,e===Jt&&w(e.e)},r.onCompleted=function(){this.checkAccess();var t=x(this._observer.onCompleted).call(this._observer);this._state=2,t===Jt&&w(t.e)},r.checkAccess=function(){if(1===this._state)throw new Error("Re-entrancy detected");if(2===this._state)throw new Error("Observer completed");0===this._state&&(this._state=1)},e}(Ce),Le=tt.internals.ScheduledObserver=function(t){function e(e,r){t.call(this),this.scheduler=e,this.observer=r,this.isAcquired=!1,this.hasFaulted=!1,this.queue=[],this.disposable=new ue}return Yt(e,t),e.prototype.next=function(t){var e=this;this.queue.push(function(){e.observer.onNext(t)})},e.prototype.error=function(t){var e=this;this.queue.push(function(){e.observer.onError(t)})},e.prototype.completed=function(){var t=this;this.queue.push(function(){t.observer.onCompleted()})},e.prototype.ensureActive=function(){var t=!1,e=this;!this.hasFaulted&&this.queue.length>0&&(t=!this.isAcquired,this.isAcquired=!0),t&&this.disposable.setDisposable(this.scheduler.scheduleRecursive(function(t){var r;if(!(e.queue.length>0))return void(e.isAcquired=!1);r=e.queue.shift();try{r()}catch(t){throw e.queue=[],e.hasFaulted=!0,t}t()}))},e.prototype.dispose=function(){t.prototype.dispose.call(this),this.disposable.dispose()},e}(Ae),Ne=function(t){function e(e,r,n){t.call(this,e,r),this._cancel=n}return Yt(e,t),e.prototype.next=function(e){t.prototype.next.call(this,e),this.ensureActive()},e.prototype.error=function(e){t.prototype.error.call(this,e),this.ensureActive()},e.prototype.completed=function(){t.prototype.completed.call(this),this.ensureActive()},e.prototype.dispose=function(){t.prototype.dispose.call(this),this._cancel&&this._cancel.dispose(),this._cancel=null},e}(Le),Ie=tt.Observable=function(){function t(t){if(tt.config.longStackSupport&&ut){try{throw new Error}catch(t){this.stack=t.stack.substring(t.stack.indexOf("\n")+1)}var e=this;this._subscribe=function(r){var n=r.onError.bind(r);return r.onError=function(t){c(t,e),n(t)},t.call(e,r)}}else this._subscribe=t}return Pe=t.prototype,Pe.subscribe=Pe.forEach=function(t,e,r){return this._subscribe("object"==typeof t?t:Oe(t,e,r))},Pe.subscribeOnNext=function(t,e){return this._subscribe(Oe(void 0!==e?function(r){t.call(e,r)}:t))},Pe.subscribeOnError=function(t,e){return this._subscribe(Oe(null,void 0!==e?function(r){t.call(e,r)}:t))},Pe.subscribeOnCompleted=function(t,e){return this._subscribe(Oe(null,null,void 0!==e?function(){t.call(e)}:t))},t}(),De=tt.ObservableBase=function(t){function e(t){return t&&ct(t.dispose)?t:ct(t)?ie(t):oe}function r(t,r){var n=r[0],i=r[1],o=x(i.subscribeCore).call(i,n);return o!==Jt||n.fail(Jt.e)?void n.setDisposable(e(o)):w(Jt.e)}function n(t){var e=new Pr(t),n=[e,this];return ye.scheduleRequired()?ye.scheduleWithState(n,r):r(null,n),e}function i(){t.call(this,n)}return Yt(i,t),i.prototype.subscribeCore=gt,i}(Ie),ke=tt.internals.Enumerable=function(){},Fe=function(t){function e(e){this.sources=e,t.call(this)}function r(t,e,r){this.o=t,this.s=e,this.e=r,this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){var e,n=new ue,i=ge.scheduleRecursiveWithState(this.sources[bt](),function(i,o){if(!e){var a=x(i.next).call(i);if(a===Jt)return t.onError(a.e);if(a.done)return t.onCompleted();var s=a.value;st(s)&&(s=He(s));var c=new ce;n.setDisposable(c),c.setDisposable(s.subscribe(new r(t,o,i)))}});return new ee(n,i,ie(function(){e=!0}))},r.prototype.onNext=function(t){this.isStopped||this.o.onNext(t)},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.s(this.e))},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e}(De);ke.prototype.concat=function(){return new Fe(this)};var Ue=function(t){function e(e){this.sources=e,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){var e,r=this.sources[bt](),n=new ue,i=ge.scheduleRecursiveWithState(null,function(i,o){if(!e){var a=x(r.next).call(r);if(a===Jt)return t.onError(a.e);if(a.done)return null!==i?t.onError(i):t.onCompleted();var s=a.value;st(s)&&(s=He(s));var c=new ce;n.setDisposable(c),c.setDisposable(s.subscribe(function(e){t.onNext(e)},o,function(){t.onCompleted()}))}});return new ee(n,i,ie(function(){e=!0}))},e}(De);ke.prototype.catchError=function(){return new Ue(this)},ke.prototype.catchErrorWhen=function(t){var e=this;return new Or(function(r){var n,i=new jr,o=new jr,a=t(i),s=a.subscribe(o),c=e[bt](),u=new ue,h=ge.scheduleRecursive(function(t){if(!n){var e=x(c.next).call(c);if(e===Jt)return r.onError(e.e);if(e.done)return void r.onCompleted();var a=e.value;st(a)&&(a=He(a));var s=new ce,h=new ce;u.setDisposable(new ee(h,s)),s.setDisposable(a.subscribe(function(t){r.onNext(t)},function(e){h.setDisposable(o.subscribe(t,function(t){r.onError(t)},function(){r.onCompleted()})),i.onNext(e)},function(){r.onCompleted()}))}});return new ee(s,u,h,ie(function(){n=!0}))})};var Be=function(t){function e(t,e){this.v=t,this.c=null==e?-1:e}function r(t){this.v=t.v,this.l=t.c}return Yt(e,t),e.prototype[bt]=function(){return new r(this)},r.prototype.next=function(){return 0===this.l?_t:(this.l>0&&this.l--,{done:!1,value:this.v})},e}(ke),ze=ke.repeat=function(t,e){return new Be(t,e)},Ge=function(t){function e(t,e,r){this.s=t,this.fn=e?St(e,r,3):null}function r(t){this.i=-1,this.s=t.s,this.l=this.s.length,this.fn=t.fn}return Yt(e,t),e.prototype[bt]=function(){return new r(this)},r.prototype.next=function(){return++this.i<this.l?{done:!1,value:this.fn?this.fn(this.s[this.i],this.i,this.s):this.s[this.i]}:_t},e}(ke),$e=ke.of=function(t,e,r){return new Ge(t,e,r)};Pe.observeOn=function(t){var e=this;return new Or(function(r){return e.subscribe(new Ne(t,r))},e)},Pe.subscribeOn=function(t){var e=this;return new Or(function(r){var n=new ce,i=new ue;return i.setDisposable(n),n.setDisposable(t.schedule(function(){i.setDisposable(new M(t,e.subscribe(r)))})),i},e)};var Ve=function(t){function e(e){this.p=e,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){return this.p.then(function(e){t.onNext(e),t.onCompleted()},function(e){t.onError(e)}),oe},e}(De),He=Ie.fromPromise=function(t){return new Ve(t)};Pe.toPromise=function(t){if(t||(t=tt.config.Promise),!t)throw new mt("Promise type not provided nor in Rx.config.Promise");var e=this;return new t(function(t,r){var n,i=!1;e.subscribe(function(t){n=t,i=!0},r,function(){i&&t(n)})})};var We=function(t){function e(e){this.source=e,t.call(this)}function r(t){this.o=t,this.a=[],this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t))},r.prototype.onNext=function(t){this.isStopped||this.a.push(t)},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onNext(this.a),this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e}(De);Pe.toArray=function(){return new We(this)},Ie.create=Ie.createWithDisposable=function(t,e){return new Or(t,e)};var qe=(Ie.defer=function(t){return new Or(function(e){var r;try{r=t()}catch(t){return ur(t).subscribe(e)}return st(r)&&(r=He(r)),r.subscribe(e)})},function(t){function e(e){this.scheduler=e,t.call(this)}function r(t,e){this.observer=t,this.parent=e}function n(t,e){e.onCompleted()}return Yt(e,t),e.prototype.subscribeCore=function(t){return new r(t,this).run()},r.prototype.run=function(){return this.parent.scheduler.scheduleWithState(this.observer,n)},e}(De)),Xe=Ie.empty=function(t){return de(t)||(t=ge),new qe(t)},Ye=function(t){function e(e,r,n){this.iterable=e,this.mapper=r,this.scheduler=n,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){return new Ke(t,this).run()},e}(De),Ke=function(){function t(t,e){this.observer=t,this.parent=e}return t.prototype.run=function(){function t(t,e){try{var o=r.next()}catch(t){return n.onError(t)}if(o.done)return n.onCompleted();var a=o.value;if(i)try{a=i(a,t)}catch(t){return n.onError(t)}n.onNext(a),e(t+1)}var e=Object(this.parent.iterable),r=j(e),n=this.observer,i=this.parent.mapper;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},t}(),Ze=Math.pow(2,53)-1;T.prototype[bt]=function(){return new C(this._s)},C.prototype[bt]=function(){return this},C.prototype.next=function(){return this._i<this._l?{done:!1,value:this._s.charAt(this._i++)}:_t},O.prototype[bt]=function(){return new P(this._a)},P.prototype[bt]=function(){return this},P.prototype.next=function(){return this._i<this._l?{done:!1,value:this._a[this._i++]}:_t};var Je=Ie.from=function(t,e,r,n){if(null==t)throw new Error("iterable cannot be null.");if(e&&!ct(e))throw new Error("mapFn when provided must be a function");if(e)var i=St(e,r,2);return de(n)||(n=ye),new Ye(t,i,n)},Qe=function(t){function e(e,r){this.args=e,this.scheduler=r,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){return new N(t,this).run()},e}(De);N.prototype.run=function(){function t(t,i){n>t?(e.onNext(r[t]),i(t+1)):e.onCompleted()}var e=this.observer,r=this.parent.args,n=r.length;return this.parent.scheduler.scheduleRecursiveWithState(0,t)};var tr=Ie.fromArray=function(t,e){return de(e)||(e=ye),new Qe(t,e)};Ie.generate=function(t,e,r,n,i){return de(i)||(i=ye),new Or(function(o){var a=!0;return i.scheduleRecursiveWithState(t,function(t,i){var s,c;try{a?a=!1:t=r(t),(s=e(t))&&(c=n(t))}catch(t){return o.onError(t)}s?(o.onNext(c),i(t)):o.onCompleted()})})};var er=function(t){function e(){t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){return oe},e}(De),rr=Ie.never=function(){return new er};Ie.of=function(){for(var t=arguments.length,e=new Array(t),r=0;t>r;r++)e[r]=arguments[r];return new Qe(e,ye)},Ie.ofWithScheduler=function(t){for(var e=arguments.length,r=new Array(e-1),n=1;e>n;n++)r[n-1]=arguments[n];return new Qe(r,t)};var nr=function(t){function e(e,r){this.obj=e,this.keys=Object.keys(e),this.scheduler=r,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){return new D(t,this).run()},e}(De);D.prototype.run=function(){function t(t,o){if(i>t){var a=n[t];e.onNext([a,r[a]]),o(t+1)}else e.onCompleted()}var e=this.observer,r=this.parent.obj,n=this.parent.keys,i=n.length;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},Ie.pairs=function(t,e){return e||(e=ye),new nr(t,e)};var ir=function(t){function e(e,r,n){this.start=e,this.rangeCount=r,this.scheduler=n,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){return new or(t,this).run()},e}(De),or=function(){function t(t,e){this.observer=t,this.parent=e}return t.prototype.run=function(){function t(t,i){r>t?(n.onNext(e+t),i(t+1)):n.onCompleted()}var e=this.parent.start,r=this.parent.rangeCount,n=this.observer;return this.parent.scheduler.scheduleRecursiveWithState(0,t)},t}();Ie.range=function(t,e,r){return de(r)||(r=ye),new ir(t,e,r)};var ar=function(t){function e(e,r,n){this.value=e,this.repeatCount=null==r?-1:r,this.scheduler=n,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){return new k(t,this).run()},e}(De);k.prototype.run=function(){function t(t,n){return(-1===t||t>0)&&(e.onNext(r),t>0&&t--),0===t?e.onCompleted():void n(t)}var e=this.observer,r=this.parent.value;return this.parent.scheduler.scheduleRecursiveWithState(this.parent.repeatCount,t)},Ie.repeat=function(t,e,r){return de(r)||(r=ye),new ar(t,e,r)};var sr=function(t){function e(e,r){this.value=e,this.scheduler=r,t.call(this)}function r(t,e){this.observer=t,this.parent=e}function n(t,e){var r=e[0],n=e[1];n.onNext(r),n.onCompleted()}return Yt(e,t),e.prototype.subscribeCore=function(t){return new r(t,this).run()},r.prototype.run=function(){return this.parent.scheduler.scheduleWithState([this.parent.value,this.observer],n)},e}(De),cr=(Ie.return=Ie.just=Ie.returnValue=function(t,e){return de(e)||(e=ge),new sr(t,e)},function(t){function e(e,r){this.error=e,this.scheduler=r,t.call(this)}function r(t,e){this.o=t,this.p=e}function n(t,e){var r=e[0];e[1].onError(r)}return Yt(e,t),e.prototype.subscribeCore=function(t){return new r(t,this).run()},r.prototype.run=function(){return this.p.scheduler.scheduleWithState([this.p.error,this.o],n)},e}(De)),ur=Ie.throw=Ie.throwError=Ie.throwException=function(t,e){return de(e)||(e=ge),new cr(t,e)};Ie.using=function(t,e){return new Or(function(r){var n,i,o=oe;try{n=t(),n&&(o=n),i=e(n)}catch(t){return new ee(ur(t).subscribe(r),o)}return new ee(i.subscribe(r),o)})},Pe.amb=function(t){var e=this;return new Or(function(r){function n(){o||(o=a,u.dispose())}function i(){o||(o=s,c.dispose())}var o,a="L",s="R",c=new ce,u=new ce;return st(t)&&(t=He(t)),c.setDisposable(e.subscribe(function(t){n(),o===a&&r.onNext(t)},function(t){n(),o===a&&r.onError(t)},function(){n(),o===a&&r.onCompleted()})),u.setDisposable(t.subscribe(function(t){i(),o===s&&r.onNext(t)},function(t){i(),o===s&&r.onError(t)},function(){i(),o===s&&r.onCompleted()})),new ee(c,u)})},Ie.amb=function(){var t=rr(),e=[];if(Array.isArray(arguments[0]))e=arguments[0];else for(var r=0,n=arguments.length;n>r;r++)e.push(arguments[r]);for(var r=0,n=e.length;n>r;r++)t=function(t,e){return t.amb(e)}(t,e[r]);return t},Pe.catch=Pe.catchError=Pe.catchException=function(t){return"function"==typeof t?F(this,t):hr([this,t])};var hr=Ie.catchError=Ie.catch=Ie.catchException=function(){var t=[];if(Array.isArray(arguments[0]))t=arguments[0];else for(var e=0,r=arguments.length;r>e;e++)t.push(arguments[e]);return $e(t).catchError()};Pe.combineLatest=function(){for(var t=arguments.length,e=new Array(t),r=0;t>r;r++)e[r]=arguments[r];return Array.isArray(e[0])?e[0].unshift(this):e.unshift(this),lr.apply(this,e)};var lr=Ie.combineLatest=function(){for(var t=arguments.length,e=new Array(t),r=0;t>r;r++)e[r]=arguments[r];var n=e.pop();return Array.isArray(e[0])&&(e=e[0]),new Or(function(t){function r(e){if(s[e]=!0,c||(c=s.every(rt))){try{var r=n.apply(null,h)}catch(e){return t.onError(e)}t.onNext(r)}else u.filter(function(t,r){return r!==e}).every(rt)&&t.onCompleted()}function i(e){u[e]=!0,u.every(rt)&&t.onCompleted()}for(var o=e.length,a=function(){return!1},s=b(o,a),c=!1,u=b(o,a),h=new Array(o),l=new Array(o),p=0;o>p;p++)!function(n){var o=e[n],a=new ce;st(o)&&(o=He(o)),a.setDisposable(o.subscribe(function(t){h[n]=t,r(n)},function(e){t.onError(e)},function(){i(n)})),l[n]=a}(p);return new ee(l)},this)};Pe.concat=function(){for(var t=[],e=0,r=arguments.length;r>e;e++)t.push(arguments[e]);return t.unshift(this),fr.apply(null,t)};var pr=function(t){function e(e){this.sources=e,t.call(this)}function r(t,e){this.sources=t,this.o=e}return Yt(e,t),e.prototype.subscribeCore=function(t){return new r(this.sources,t).run()},r.prototype.run=function(){var t,e=new ue,r=this.sources,n=r.length,i=this.o,o=ge.scheduleRecursiveWithState(0,function(o,a){if(!t){if(o===n)return i.onCompleted();var s=r[o];st(s)&&(s=He(s));var c=new ce;e.setDisposable(c),c.setDisposable(s.subscribe(function(t){i.onNext(t)},function(t){i.onError(t)},function(){a(o+1)}))}});return new ee(e,o,ie(function(){t=!0}))},e}(De),fr=Ie.concat=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{t=new Array(arguments.length);for(var e=0,r=arguments.length;r>e;e++)t[e]=arguments[e]}return new pr(t)};Pe.concatAll=Pe.concatObservable=function(){return this.merge(1)};var dr=function(t){function e(e,r){this.source=e,this.maxConcurrent=r,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){var e=new ee;return e.add(this.source.subscribe(new mr(t,this.maxConcurrent,e))),e},e}(De),mr=function(){function t(t,e,r){this.o=t,this.max=e,this.g=r,this.done=!1,this.q=[],this.activeCount=0,this.isStopped=!1}function e(t,e){this.parent=t,this.sad=e,this.isStopped=!1}return t.prototype.handleSubscribe=function(t){var r=new ce;this.g.add(r),st(t)&&(t=He(t)),r.setDisposable(t.subscribe(new e(this,r)))},t.prototype.onNext=function(t){this.isStopped||(this.activeCount<this.max?(this.activeCount++,this.handleSubscribe(t)):this.q.push(t))},t.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},t.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.done=!0,0===this.activeCount&&this.o.onCompleted())},t.prototype.dispose=function(){this.isStopped=!0},t.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e.prototype.onNext=function(t){this.isStopped||this.parent.o.onNext(t)},e.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.parent.o.onError(t))},e.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=!0;var t=this.parent;t.g.remove(this.sad),t.q.length>0?t.handleSubscribe(t.q.shift()):(t.activeCount--,t.done&&0===t.activeCount&&t.o.onCompleted())}},e.prototype.dispose=function(){this.isStopped=!0},e.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.parent.o.onError(t),!0)},t}();Pe.merge=function(t){return"number"!=typeof t?vr(this,t):new dr(this,t)};var vr=Ie.merge=function(){var t,e,r=[],n=arguments.length;if(arguments[0])if(de(arguments[0]))for(t=arguments[0],e=1;n>e;e++)r.push(arguments[e]);else for(t=ge,
+e=0;n>e;e++)r.push(arguments[e]);else for(t=ge,e=1;n>e;e++)r.push(arguments[e]);return Array.isArray(r[0])&&(r=r[0]),I(t,r).mergeAll()},gr=tt.CompositeError=function(t){this.name="NotImplementedError",this.innerErrors=t,this.message="This contains multiple errors. Check the innerErrors",Error.call(this)};gr.prototype=Error.prototype,Ie.mergeDelayError=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{var e=arguments.length;t=new Array(e);for(var r=0;e>r;r++)t[r]=arguments[r]}var n=I(null,t);return new Or(function(t){function e(){0===a.length?t.onCompleted():1===a.length?t.onError(a[0]):t.onError(new gr(a))}var r=new ee,i=new ce,o=!1,a=[];return r.add(i),i.setDisposable(n.subscribe(function(n){var i=new ce;r.add(i),st(n)&&(n=He(n)),i.setDisposable(n.subscribe(function(e){t.onNext(e)},function(t){a.push(t),r.remove(i),o&&1===r.length&&e()},function(){r.remove(i),o&&1===r.length&&e()}))},function(t){a.push(t),o=!0,1===r.length&&e()},function(){o=!0,1===r.length&&e()})),r})};var yr=function(t){function e(e){this.source=e,t.call(this)}function r(t,e){this.o=t,this.g=e,this.isStopped=!1,this.done=!1}function n(t,e,r){this.parent=t,this.g=e,this.sad=r,this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){var e=new ee,n=new ce;return e.add(n),n.setDisposable(this.source.subscribe(new r(t,e))),e},r.prototype.onNext=function(t){if(!this.isStopped){var e=new ce;this.g.add(e),st(t)&&(t=He(t)),e.setDisposable(t.subscribe(new n(this,this.g,e)))}},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.done=!0,1===this.g.length&&this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},n.prototype.onNext=function(t){this.isStopped||this.parent.o.onNext(t)},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.parent.o.onError(t))},n.prototype.onCompleted=function(){if(!this.isStopped){var t=this.parent;this.isStopped=!0,t.g.remove(this.sad),t.done&&1===t.g.length&&t.o.onCompleted()}},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.parent.o.onError(t),!0)},e}(De);Pe.mergeAll=Pe.mergeObservable=function(){return new yr(this)},Pe.onErrorResumeNext=function(t){if(!t)throw new Error("Second observable is required");return br([this,t])};var br=Ie.onErrorResumeNext=function(){var t=[];if(Array.isArray(arguments[0]))t=arguments[0];else for(var e=0,r=arguments.length;r>e;e++)t.push(arguments[e]);return new Or(function(e){var r=0,n=new ue,i=ge.scheduleRecursive(function(i){var o,a;r<t.length?(o=t[r++],st(o)&&(o=He(o)),a=new ce,n.setDisposable(a),a.setDisposable(o.subscribe(e.onNext.bind(e),i,i))):e.onCompleted()});return new ee(n,i)})};Pe.skipUntil=function(t){var e=this;return new Or(function(r){var n=!1,i=new ee(e.subscribe(function(t){n&&r.onNext(t)},function(t){r.onError(t)},function(){n&&r.onCompleted()}));st(t)&&(t=He(t));var o=new ce;return i.add(o),o.setDisposable(t.subscribe(function(){n=!0,o.dispose()},function(t){r.onError(t)},function(){o.dispose()})),i},e)};var _r=function(t){function e(e){this.source=e,t.call(this)}function r(t,e){this.o=t,this.inner=e,this.stopped=!1,this.latest=0,this.hasLatest=!1,this.isStopped=!1}function n(t,e){this.parent=t,this.id=e,this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){var e=new ue,n=this.source.subscribe(new r(t,e));return new ee(n,e)},r.prototype.onNext=function(t){if(!this.isStopped){var e=new ce,r=++this.latest;this.hasLatest=!0,this.inner.setDisposable(e),st(t)&&(t=He(t)),e.setDisposable(t.subscribe(new n(this,r)))}},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.stopped=!0,!this.hasLatest&&this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},n.prototype.onNext=function(t){this.isStopped||this.parent.latest===this.id&&this.parent.o.onNext(t)},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.parent.latest===this.id&&this.parent.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.parent.latest===this.id&&(this.parent.hasLatest=!1,this.parent.isStopped&&this.parent.o.onCompleted()))},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.parent.o.onError(t),!0)},e}(De);Pe.switch=Pe.switchLatest=function(){return new _r(this)};var xr=function(t){function e(e,r){this.source=e,this.other=st(r)?He(r):r,t.call(this)}function r(t){this.o=t,this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){return new ee(this.source.subscribe(t),this.other.subscribe(new r(t)))},r.prototype.onNext=function(t){this.isStopped||this.o.onCompleted()},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){!this.isStopped&&(this.isStopped=!0)},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e}(De);Pe.takeUntil=function(t){return new xr(this,t)},Pe.withLatestFrom=function(){for(var t=arguments.length,e=new Array(t),r=0;t>r;r++)e[r]=arguments[r];var n=e.pop(),i=this;return Array.isArray(e[0])&&(e=e[0]),new Or(function(t){for(var r=e.length,o=b(r,U),a=!1,s=new Array(r),c=new Array(r+1),u=0;r>u;u++)!function(r){var n=e[r],i=new ce;st(n)&&(n=He(n)),i.setDisposable(n.subscribe(function(t){s[r]=t,o[r]=!0,a=o.every(rt)},function(e){t.onError(e)},et)),c[r]=i}(u);var h=new ce;return h.setDisposable(i.subscribe(function(e){var r=[e].concat(s);if(a){var i=x(n).apply(null,r);return i===Jt?t.onError(i.e):void t.onNext(i)}},function(e){t.onError(e)},function(){t.onCompleted()})),c[r]=h,new ee(c)},this)},Pe.zip=function(){if(Array.isArray(arguments[0]))return B.apply(this,arguments);for(var t=arguments.length,e=new Array(t),r=0;t>r;r++)e[r]=arguments[r];var n=this,i=e.pop();return e.unshift(n),new Or(function(t){for(var r=e.length,o=b(r,z),a=b(r,U),s=new Array(r),c=0;r>c;c++)!function(r){var c=e[r],u=new ce;st(c)&&(c=He(c)),u.setDisposable(c.subscribe(function(e){if(o[r].push(e),o.every(function(t){return t.length>0})){var s=o.map(function(t){return t.shift()}),c=x(i).apply(n,s);if(c===Jt)return t.onError(c.e);t.onNext(c)}else a.filter(function(t,e){return e!==r}).every(rt)&&t.onCompleted()},function(e){t.onError(e)},function(){a[r]=!0,a.every(rt)&&t.onCompleted()})),s[r]=u}(c);return new ee(s)},n)},Ie.zip=function(){for(var t=arguments.length,e=new Array(t),r=0;t>r;r++)e[r]=arguments[r];var n=e.shift();return n.zip.apply(n,e)},Ie.zipArray=function(){var t;if(Array.isArray(arguments[0]))t=arguments[0];else{var e=arguments.length;t=new Array(e);for(var r=0;e>r;r++)t[r]=arguments[r]}return new Or(function(e){for(var r=t.length,n=b(r,G),i=b(r,U),o=new Array(r),a=0;r>a;a++)!function(r){o[r]=new ce,o[r].setDisposable(t[r].subscribe(function(t){if(n[r].push(t),n.every(function(t){return t.length>0})){var o=n.map(function(t){return t.shift()});e.onNext(o)}else if(i.filter(function(t,e){return e!==r}).every(rt))return e.onCompleted()},function(t){e.onError(t)},function(){i[r]=!0,i.every(rt)&&e.onCompleted()}))}(a);return new ee(o)})},Pe.asObservable=function(){var t=this;return new Or(function(e){return t.subscribe(e)},t)},Pe.bufferWithCount=function(t,e){return"number"!=typeof e&&(e=t),this.windowWithCount(t,e).selectMany(function(t){return t.toArray()}).where(function(t){return t.length>0})},Pe.dematerialize=function(){var t=this;return new Or(function(e){return t.subscribe(function(t){return t.accept(e)},function(t){e.onError(t)},function(){e.onCompleted()})},this)},Pe.distinctUntilChanged=function(t,e){var r=this;return e||(e=it),new Or(function(n){var i,o=!1;return r.subscribe(function(r){var a=r;if(t&&(a=x(t)(r))===Jt)return n.onError(a.e);if(o){var s=x(e)(i,a);if(s===Jt)return n.onError(s.e)}o&&s||(o=!0,i=a,n.onNext(r))},function(t){n.onError(t)},function(){n.onCompleted()})},this)};var wr=function(t){function e(e,r,n,i){this.source=e,this.t=!r||ct(r)?Oe(r||et,n||et,i||et):r,t.call(this)}function r(t,e){this.o=t,this.t=e,this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t,this.t))},r.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.t.onNext).call(this.t,t);e===Jt&&this.o.onError(e.e),this.o.onNext(t)}},r.prototype.onError=function(t){if(!this.isStopped){this.isStopped=!0;var e=x(this.t.onError).call(this.t,t);if(e===Jt)return this.o.onError(e.e);this.o.onError(t)}},r.prototype.onCompleted=function(){if(!this.isStopped){this.isStopped=!0;var t=x(this.t.onCompleted).call(this.t);if(t===Jt)return this.o.onError(t.e);this.o.onCompleted()}},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e}(De);Pe.do=Pe.tap=Pe.doAction=function(t,e,r){return new wr(this,t,e,r)},Pe.doOnNext=Pe.tapOnNext=function(t,e){return this.tap(void 0!==e?function(r){t.call(e,r)}:t)},Pe.doOnError=Pe.tapOnError=function(t,e){return this.tap(et,void 0!==e?function(r){t.call(e,r)}:t)},Pe.doOnCompleted=Pe.tapOnCompleted=function(t,e){return this.tap(et,null,void 0!==e?function(){t.call(e)}:t)},Pe.finally=Pe.ensure=function(t){var e=this;return new Or(function(r){var n;try{n=e.subscribe(r)}catch(e){throw t(),e}return ie(function(){try{n.dispose()}catch(t){throw t}finally{t()}})},this)},Pe.finallyAction=function(t){return this.ensure(t)};var Sr=function(t){function e(e){this.source=e,t.call(this)}function r(t){this.o=t,this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t))},r.prototype.onNext=et,r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.observer.onError(t),!0)},e}(De);Pe.ignoreElements=function(){return new Sr(this)},Pe.materialize=function(){var t=this;return new Or(function(e){return t.subscribe(function(t){e.onNext(Me(t))},function(t){e.onNext(Ee(t)),e.onCompleted()},function(){e.onNext(Te()),e.onCompleted()})},t)},Pe.repeat=function(t){return ze(this,t).concat()},Pe.retry=function(t){return ze(this,t).catchError()},Pe.retryWhen=function(t){return ze(this).catchErrorWhen(t)};var Mr=function(t){function e(e,r,n,i){this.source=e,this.accumulator=r,this.hasSeed=n,this.seed=i,t.call(this)}return Yt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new $(t,this))},e}(De);$.prototype.onNext=function(t){if(!this.isStopped){!this.hasValue&&(this.hasValue=!0);try{this.hasAccumulation?this.accumulation=this.accumulator(this.accumulation,t):(this.accumulation=this.hasSeed?this.accumulator(this.seed,t):t,this.hasAccumulation=!0)}catch(t){return this.observer.onError(t)}this.observer.onNext(this.accumulation)}},$.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.observer.onError(t))},$.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,!this.hasValue&&this.hasSeed&&this.observer.onNext(this.seed),this.observer.onCompleted())},$.prototype.dispose=function(){this.isStopped=!0},$.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.observer.onError(t),!0)},Pe.scan=function(){var t,e,r=!1;return 2===arguments.length?(r=!0,t=arguments[0],e=arguments[1]):e=arguments[0],new Mr(this,e,r,t)},Pe.skipLast=function(t){if(0>t)throw new dt;var e=this;return new Or(function(r){var n=[];return e.subscribe(function(e){n.push(e),n.length>t&&r.onNext(n.shift())},function(t){r.onError(t)},function(){r.onCompleted()})},e)},Pe.startWith=function(){var t,e=0;arguments.length&&de(arguments[0])?(t=arguments[0],e=1):t=ge;for(var r=[],n=e,i=arguments.length;i>n;n++)r.push(arguments[n]);return $e([tr(r,t),this]).concat()},Pe.takeLast=function(t){if(0>t)throw new dt;var e=this;return new Or(function(r){var n=[];return e.subscribe(function(e){n.push(e),n.length>t&&n.shift()},function(t){r.onError(t)},function(){for(;n.length>0;)r.onNext(n.shift());r.onCompleted()})},e)},Pe.takeLastBuffer=function(t){var e=this;return new Or(function(r){var n=[];return e.subscribe(function(e){n.push(e),n.length>t&&n.shift()},function(t){r.onError(t)},function(){r.onNext(n),r.onCompleted()})},e)},Pe.windowWithCount=function(t,e){var r=this;if(+t||(t=0),Math.abs(t)===1/0&&(t=0),0>=t)throw new dt;if(null==e&&(e=t),+e||(e=0),Math.abs(e)===1/0&&(e=0),0>=e)throw new dt;return new Or(function(n){function i(){var t=new jr;c.push(t),n.onNext(Zt(t,a))}var o=new ce,a=new he(o),s=0,c=[];return i(),o.setDisposable(r.subscribe(function(r){for(var n=0,o=c.length;o>n;n++)c[n].onNext(r);var a=s-t+1;a>=0&&a%e==0&&c.shift().onCompleted(),++s%e==0&&i()},function(t){for(;c.length>0;)c.shift().onError(t);n.onError(t)},function(){for(;c.length>0;)c.shift().onCompleted();n.onCompleted()})),a},r)},Pe.selectConcat=Pe.concatMap=function(t,e,r){return ct(t)&&ct(e)?this.concatMap(function(r,n){var i=t(r,n);return st(i)&&(i=He(i)),(wt(i)||xt(i))&&(i=Je(i)),i.map(function(t,i){return e(r,t,n,i)})}):ct(t)?V(this,t,r):V(this,function(){return t})},Pe.concatMapObserver=Pe.selectConcatObserver=function(t,e,r,n){var i=this,o=St(t,n,2),a=St(e,n,1),s=St(r,n,0);return new Or(function(t){var e=0;return i.subscribe(function(r){var n;try{n=o(r,e++)}catch(e){return void t.onError(e)}st(n)&&(n=He(n)),t.onNext(n)},function(e){var r;try{r=a(e)}catch(e){return void t.onError(e)}st(r)&&(r=He(r)),t.onNext(r),t.onCompleted()},function(){var e;try{e=s()}catch(e){return void t.onError(e)}st(e)&&(e=He(e)),t.onNext(e),t.onCompleted()})},this).concatAll()},Pe.defaultIfEmpty=function(t){var e=this;return t===o&&(t=null),new Or(function(r){var n=!1;return e.subscribe(function(t){n=!0,r.onNext(t)},function(t){r.onError(t)},function(){!n&&r.onNext(t),r.onCompleted()})},e)},W.prototype.push=function(t){var e=-1===H(this.set,t,this.comparer);return e&&this.set.push(t),e},Pe.distinct=function(t,e){var r=this;return e||(e=it),new Or(function(n){var i=new W(e);return r.subscribe(function(e){var r=e;if(t)try{r=t(e)}catch(t){return void n.onError(t)}i.push(r)&&n.onNext(e)},function(t){n.onError(t)},function(){n.onCompleted()})},this)};var Er=function(t){function e(e,r,n){this.source=e,this.selector=St(r,n,3),t.call(this)}function r(t,e){return function(r,n,i){return t.call(this,e.selector(r,n,i),n,i)}}function n(t,e,r){this.o=t,this.selector=e,this.source=r,this.i=0,this.isStopped=!1}return Yt(e,t),e.prototype.internalMap=function(t,n){return new e(this.source,r(t,this),n)},e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t,this.selector,this))},n.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.selector)(t,this.i++,this.source);return e===Jt?this.o.onError(e.e):void this.o.onNext(e)}},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e}(De);Pe.map=Pe.select=function(t,e){var r="function"==typeof t?t:function(){return t};return this instanceof Er?this.internalMap(r,e):new Er(this,r,e)},Pe.pluck=function(){var t=arguments,e=arguments.length;if(0===e)throw new Error("List of properties cannot be empty.");return this.map(function(r){for(var n=r,i=0;e>i;i++){var a=n[t[i]];if(void 0===a)return o;n=a}return n})},Pe.flatMapObserver=Pe.selectManyObserver=function(t,e,r,n){var i=this;return new Or(function(o){var a=0;return i.subscribe(function(e){var r;try{r=t.call(n,e,a++)}catch(t){return void o.onError(t)}st(r)&&(r=He(r)),o.onNext(r)},function(t){var r;try{r=e.call(n,t)}catch(t){return void o.onError(t)}st(r)&&(r=He(r)),o.onNext(r),o.onCompleted()},function(){var t;try{t=r.call(n)}catch(t){return void o.onError(t)}st(t)&&(t=He(t)),o.onNext(t),o.onCompleted()})},i).mergeAll()},Pe.selectMany=Pe.flatMap=function(t,e,r){return ct(t)&&ct(e)?this.flatMap(function(r,n){var i=t(r,n);return st(i)&&(i=He(i)),(wt(i)||xt(i))&&(i=Je(i)),i.map(function(t,i){return e(r,t,n,i)})},r):ct(t)?q(this,t,r):q(this,function(){return t})},Pe.selectSwitch=Pe.flatMapLatest=Pe.switchMap=function(t,e){return this.select(t,e).switchLatest()};var Tr=function(t){function e(e,r){this.source=e,this.skipCount=r,t.call(this)}function r(t,e){this.c=e,this.r=e,this.o=t,this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new r(t,this.skipCount))},r.prototype.onNext=function(t){this.isStopped||(this.r<=0?this.o.onNext(t):this.r--)},r.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},r.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},r.prototype.dispose=function(){this.isStopped=!0},r.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e}(De);Pe.skip=function(t){if(0>t)throw new dt;return new Tr(this,t)},Pe.skipWhile=function(t,e){var r=this,n=St(t,e,3);return new Or(function(t){var e=0,i=!1;return r.subscribe(function(o){if(!i)try{i=!n(o,e++,r)}catch(e){return void t.onError(e)}i&&t.onNext(o)},function(e){t.onError(e)},function(){t.onCompleted()})},r)},Pe.take=function(t,e){if(0>t)throw new dt;if(0===t)return Xe(e);var r=this;return new Or(function(e){var n=t;return r.subscribe(function(t){n-- >0&&(e.onNext(t),0>=n&&e.onCompleted())},function(t){e.onError(t)},function(){e.onCompleted()})},r)},Pe.takeWhile=function(t,e){var r=this,n=St(t,e,3);return new Or(function(t){var e=0,i=!0;return r.subscribe(function(o){if(i){try{i=n(o,e++,r)}catch(e){return void t.onError(e)}i?t.onNext(o):t.onCompleted()}},function(e){t.onError(e)},function(){t.onCompleted()})},r)};var Cr=function(t){function e(e,r,n){this.source=e,this.predicate=St(r,n,3),t.call(this)}function r(t,e){return function(r,n,i){return e.predicate(r,n,i)&&t.call(this,r,n,i)}}function n(t,e,r){this.o=t,this.predicate=e,this.source=r,this.i=0,this.isStopped=!1}return Yt(e,t),e.prototype.subscribeCore=function(t){return this.source.subscribe(new n(t,this.predicate,this))},e.prototype.internalFilter=function(t,n){return new e(this.source,r(t,this),n)},n.prototype.onNext=function(t){if(!this.isStopped){var e=x(this.predicate)(t,this.i++,this.source);return e===Jt?this.o.onError(e.e):void(e&&this.o.onNext(t))}},n.prototype.onError=function(t){this.isStopped||(this.isStopped=!0,this.o.onError(t))},n.prototype.onCompleted=function(){this.isStopped||(this.isStopped=!0,this.o.onCompleted())},n.prototype.dispose=function(){this.isStopped=!0},n.prototype.fail=function(t){return!this.isStopped&&(this.isStopped=!0,this.o.onError(t),!0)},e}(De);Pe.filter=Pe.where=function(t,e){return this instanceof Cr?this.internalFilter(t,e):new Cr(this,t,e)},Pe.transduce=function(t){function e(t){return{"@@transducer/init":function(){return t},"@@transducer/step":function(t,e){return t.onNext(e)},"@@transducer/result":function(t){return t.onCompleted()}}}var r=this;return new Or(function(n){var i=t(e(n));return r.subscribe(function(t){try{i["@@transducer/step"](n,t)}catch(t){n.onError(t)}},function(t){n.onError(t)},function(){i["@@transducer/result"](n)})},r)};var Or=tt.AnonymousObservable=function(t){function e(t){return t&&ct(t.dispose)?t:ct(t)?ie(t):oe}function r(t,r){var n=r[0],i=r[1],o=x(i)(n);return o!==Jt||n.fail(Jt.e)?void n.setDisposable(e(o)):w(Jt.e)}function n(e,n){function i(t){var n=new Pr(t),i=[n,e];return ye.scheduleRequired()?ye.scheduleWithState(i,r):r(null,i),n}this.source=n,t.call(this,i)}return Yt(n,t),n}(Ie),Pr=function(t){function e(e){t.call(this),this.observer=e,this.m=new ce}Yt(e,t);var r=e.prototype;return r.next=function(t){var e=x(this.observer.onNext).call(this.observer,t);e===Jt&&(this.dispose(),w(e.e))},r.error=function(t){var e=x(this.observer.onError).call(this.observer,t);this.dispose(),e===Jt&&w(e.e)},r.completed=function(){var t=x(this.observer.onCompleted).call(this.observer);this.dispose(),t===Jt&&w(t.e)},r.setDisposable=function(t){this.m.setDisposable(t)},r.getDisposable=function(){return this.m.getDisposable()},r.dispose=function(){t.prototype.dispose.call(this),this.m.dispose()},e}(Ae),Ar=function(t,e){this.subject=t,this.observer=e};Ar.prototype.dispose=function(){if(!this.subject.isDisposed&&null!==this.observer){var t=this.subject.observers.indexOf(this.observer);this.subject.observers.splice(t,1),this.observer=null}};var jr=tt.Subject=function(t){function e(t){return se(this),this.isStopped?this.hasError?(t.onError(this.error),oe):(t.onCompleted(),oe):(this.observers.push(t),new Ar(this,t))}function r(){t.call(this,e),this.isDisposed=!1,this.isStopped=!1,this.observers=[],this.hasError=!1}return Yt(r,t),Kt(r.prototype,Ce.prototype,{hasObservers:function(){return this.observers.length>0},onCompleted:function(){if(se(this),!this.isStopped){this.isStopped=!0;for(var t=0,e=a(this.observers),r=e.length;r>t;t++)e[t].onCompleted();this.observers.length=0}},onError:function(t){if(se(this),!this.isStopped){this.isStopped=!0,this.error=t,this.hasError=!0;for(var e=0,r=a(this.observers),n=r.length;n>e;e++)r[e].onError(t);this.observers.length=0}},onNext:function(t){if(se(this),!this.isStopped)for(var e=0,r=a(this.observers),n=r.length;n>e;e++)r[e].onNext(t)},dispose:function(){this.isDisposed=!0,this.observers=null}}),r.create=function(t,e){return new Rr(t,e)},r}(Ie),Rr=(tt.AsyncSubject=function(t){function e(t){return se(this),this.isStopped?(this.hasError?t.onError(this.error):this.hasValue?(t.onNext(this.value),t.onCompleted()):t.onCompleted(),oe):(this.observers.push(t),new Ar(this,t))}function r(){t.call(this,e),this.isDisposed=!1,this.isStopped=!1,this.hasValue=!1,this.observers=[],this.hasError=!1}return Yt(r,t),Kt(r.prototype,Ce,{hasObservers:function(){return se(this),this.observers.length>0},onCompleted:function(){var t,e;if(se(this),!this.isStopped){this.isStopped=!0;var r=a(this.observers),e=r.length;if(this.hasValue)for(t=0;e>t;t++){var n=r[t];n.onNext(this.value),n.onCompleted()}else for(t=0;e>t;t++)r[t].onCompleted();this.observers.length=0}},onError:function(t){if(se(this),!this.isStopped){this.isStopped=!0,this.hasError=!0,this.error=t;for(var e=0,r=a(this.observers),n=r.length;n>e;e++)r[e].onError(t);this.observers.length=0}},onNext:function(t){se(this),this.isStopped||(this.value=t,this.hasValue=!0)},dispose:function(){this.isDisposed=!0,this.observers=null,this.exception=null,this.value=null}}),r}(Ie),tt.AnonymousSubject=function(t){function e(t){return this.observable.subscribe(t)}function r(r,n){this.observer=r,this.observable=n,t.call(this,e)}return Yt(r,t),Kt(r.prototype,Ce.prototype,{onCompleted:function(){this.observer.onCompleted()},onError:function(t){this.observer.onError(t)},onNext:function(t){this.observer.onNext(t)}}),r}(Ie));"function"==typeof t&&"object"==typeof t.amd&&t.amd?(Y.Rx=tt,t(function(){return tt})):K&&Z?J?(Z.exports=tt).Rx=tt:K.Rx=tt:Y.Rx=tt;var Lr=p()}).call(this)}).call(this,e(150),void 0!==i?i:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{150:150}]},{},[1])(1)})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],14:[function(t,e,r){(function(r){var n,i=void 0!==r?r:"undefined"!=typeof window?window:{},o=t("min-document");"undefined"!=typeof document?n=document:(n=i["__GLOBAL_DOCUMENT_CACHE@4"])||(n=i["__GLOBAL_DOCUMENT_CACHE@4"]=o),e.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"min-document":2}],15:[function(t,e,r){r.read=function(t,e,r,n,i){var o,a,s=8*i-n-1,c=(1<<s)-1,u=c>>1,h=-7,l=r?i-1:0,p=r?-1:1,f=t[e+l];for(l+=p,o=f&(1<<-h)-1,f>>=-h,h+=s;h>0;o=256*o+t[e+l],l+=p,h-=8);for(a=o&(1<<-h)-1,o>>=-h,h+=n;h>0;a=256*a+t[e+l],l+=p,h-=8);if(0===o)o=1-u;else{if(o===c)return a?NaN:1/0*(f?-1:1);a+=Math.pow(2,n),o-=u}return(f?-1:1)*a*Math.pow(2,o-n)},r.write=function(t,e,r,n,i,o){var a,s,c,u=8*o-i-1,h=(1<<u)-1,l=h>>1,p=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=n?0:o-1,d=n?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,a=h):(a=Math.floor(Math.log(e)/Math.LN2),e*(c=Math.pow(2,-a))<1&&(a--,c*=2),e+=a+l>=1?p/c:p*Math.pow(2,1-l),e*c>=2&&(a++,c/=2),a+l>=h?(s=0,a=h):a+l>=1?(s=(e*c-1)*Math.pow(2,i),a+=l):(s=e*Math.pow(2,l-1)*Math.pow(2,i),a=0));i>=8;t[r+f]=255&s,f+=d,s/=256,i-=8);for(a=a<<i|s,u+=i;u>0;t[r+f]=255&a,f+=d,a/=256,u-=8);t[r+f-d]|=128*m}},{}],16:[function(t,e,r){(function(t){"use strict";function r(t,e){return t in n?n[t]:(n[t]=e,e)}var n="undefined"!=typeof window?window:void 0!==t?t:{};e.exports=r}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],17:[function(t,e,r){"use strict";function n(t,e,r){var n="__INDIVIDUAL_ONE_VERSION_"+t,o=n+"_ENFORCE_SINGLETON",a=i(o,e);if(a!==e)throw new Error("Can only have one copy of "+t+".\nYou already have version "+a+" installed.\nThis means you cannot install version "+e);return i(n,r)}var i=t("./index.js");e.exports=n},{"./index.js":16}],18:[function(t,e,r){"use strict";e.exports=function(t){return"object"==typeof t&&null!==t}},{}],19:[function(t,e,r){var n={}.toString;e.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},{}],20:[function(t,e,r){"use strict";var n={};n.base32="0123456789bcdefghjkmnpqrstuvwxyz",n.encode=function(t,e,r){if(void 0===r){for(var i=1;i<=12;i++){var o=n.encode(t,e,i),a=n.decode(o);if(a.lat==t&&a.lon==e)return o}r=12}if(t=Number(t),e=Number(e),r=Number(r),isNaN(t)||isNaN(e)||isNaN(r))throw new Error("Invalid geohash");for(var s=0,c=0,u=!0,h="",l=-90,p=90,f=-180,d=180;h.length<r;){if(u){var m=(f+d)/2;e>=m?(s=2*s+1,f=m):(s*=2,d=m)}else{var v=(l+p)/2;t>=v?(s=2*s+1,l=v):(s*=2,p=v)}u=!u,5==++c&&(h+=n.base32.charAt(s),c=0,s=0)}return h},n.decode=function(t){var e=n.bounds(t),r=e.sw.lat,i=e.sw.lon,o=e.ne.lat,a=e.ne.lon,s=(r+o)/2,c=(i+a)/2;return s=s.toFixed(Math.floor(2-Math.log(o-r)/Math.LN10)),c=c.toFixed(Math.floor(2-Math.log(a-i)/Math.LN10)),{lat:Number(s),lon:Number(c)}},n.bounds=function(t){if(0===t.length)throw new Error("Invalid geohash");t=t.toLowerCase();for(var e=!0,r=-90,i=90,o=-180,a=180,s=0;s<t.length;s++){var c=t.charAt(s),u=n.base32.indexOf(c);if(-1==u)throw new Error("Invalid geohash");for(var h=4;h>=0;h--){var l=u>>h&1;if(e){var p=(o+a)/2;1==l?o=p:a=p}else{var f=(r+i)/2;1==l?r=f:i=f}e=!e}}return{sw:{lat:r,lon:o},ne:{lat:i,lon:a}}},n.adjacent=function(t,e){if(t=t.toLowerCase(),e=e.toLowerCase(),0===t.length)throw new Error("Invalid geohash");if(-1=="nsew".indexOf(e))throw new Error("Invalid direction");var r={n:["p0r21436x8zb9dcf5h7kjnmqesgutwvy","bc01fg45238967deuvhjyznpkmstqrwx"],s:["14365h7k9dcfesgujnmqp0r2twvyx8zb","238967debc01fg45kmstqrwxuvhjyznp"],e:["bc01fg45238967deuvhjyznpkmstqrwx","p0r21436x8zb9dcf5h7kjnmqesgutwvy"],w:["238967debc01fg45kmstqrwxuvhjyznp","14365h7k9dcfesgujnmqp0r2twvyx8zb"]},i={n:["prxz","bcfguvyz"],s:["028b","0145hjnp"],e:["bcfguvyz","prxz"],w:["0145hjnp","028b"]},o=t.slice(-1),a=t.slice(0,-1),s=t.length%2;return-1!=i[e][s].indexOf(o)&&""!==a&&(a=n.adjacent(a,e)),a+n.base32.charAt(r[e][s].indexOf(o))},n.neighbours=function(t){return{n:n.adjacent(t,"n"),ne:n.adjacent(n.adjacent(t,"n"),"e"),e:n.adjacent(t,"e"),se:n.adjacent(n.adjacent(t,"s"),"e"),s:n.adjacent(t,"s"),sw:n.adjacent(n.adjacent(t,"s"),"w"),w:n.adjacent(t,"w"),nw:n.adjacent(n.adjacent(t,"n"),"w")}},void 0!==e&&e.exports&&(e.exports=n)},{}],21:[function(t,e,r){(function(t){function e(t,e){for(var r=0,n=t.length-1;n>=0;n--){var i=t[n];"."===i?t.splice(n,1):".."===i?(t.splice(n,1),r++):r&&(t.splice(n,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function n(t,e){if(t.filter)return t.filter(e);for(var r=[],n=0;n<t.length;n++)e(t[n],n,t)&&r.push(t[n]);return r}var i=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,o=function(t){return i.exec(t).slice(1)};r.resolve=function(){for(var r="",i=!1,o=arguments.length-1;o>=-1&&!i;o--){var a=o>=0?arguments[o]:t.cwd();if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(r=a+"/"+r,i="/"===a.charAt(0))}return r=e(n(r.split("/"),function(t){return!!t}),!i).join("/"),(i?"/":"")+r||"."},r.normalize=function(t){var i=r.isAbsolute(t),o="/"===a(t,-1);return t=e(n(t.split("/"),function(t){return!!t}),!i).join("/"),t||i||(t="."),t&&o&&(t+="/"),(i?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(n(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function n(t){for(var e=0;e<t.length&&""===t[e];e++);for(var r=t.length-1;r>=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var i=n(t.split("/")),o=n(e.split("/")),a=Math.min(i.length,o.length),s=a,c=0;c<a;c++)if(i[c]!==o[c]){s=c;break}for(var u=[],c=s;c<i.length;c++)u.push("..");return u=u.concat(o.slice(s)),u.join("/")},r.sep="/",r.delimiter=":",r.dirname=function(t){var e=o(t),r=e[0],n=e[1];return r||n?(n&&(n=n.substr(0,n.length-1)),r+n):"."},r.basename=function(t,e){var r=o(t)[2];return e&&r.substr(-1*e.length)===e&&(r=r.substr(0,r.length-e.length)),r},r.extname=function(t){return o(t)[3]};var a="b"==="ab".substr(-1)?function(t,e,r){return t.substr(e,r)}:function(t,e,r){return e<0&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:4}],22:[function(t,e,r){"use strict";function n(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}function i(t,e,r){var n,i,o=r.buf;if(i=o[r.pos++],n=(112&i)>>4,i<128)return a(t,n,e);if(i=o[r.pos++],n|=(127&i)<<3,i<128)return a(t,n,e);if(i=o[r.pos++],n|=(127&i)<<10,i<128)return a(t,n,e);if(i=o[r.pos++],n|=(127&i)<<17,i<128)return a(t,n,e);if(i=o[r.pos++],n|=(127&i)<<24,i<128)return a(t,n,e);if(i=o[r.pos++],n|=(1&i)<<31,i<128)return a(t,n,e);throw new Error("Expected varint not more than 10 bytes")}function o(t){return t.type===n.Bytes?t.readVarint()+t.pos:t.pos+1}function a(t,e,r){return r?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function s(t,e){var r,n;if(t>=0?(r=t%4294967296|0,n=t/4294967296|0):(r=~(-t%4294967296),n=~(-t/4294967296),4294967295^r?r=r+1|0:(r=0,n=n+1|0)),t>=0x10000000000000000||t<-0x10000000000000000)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),c(r,n,e),u(n,e)}function c(t,e,r){r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos]=127&t}function u(t,e){var r=(7&t)<<4;e.buf[e.pos++]|=r|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t)))))}function h(t,e,r){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.ceil(Math.log(e)/(7*Math.LN2));r.realloc(n);for(var i=r.pos-1;i>=t;i--)r.buf[i+n]=r.buf[i]}function l(t,e){for(var r=0;r<t.length;r++)e.writeVarint(t[r])}function p(t,e){for(var r=0;r<t.length;r++)e.writeSVarint(t[r])}function f(t,e){for(var r=0;r<t.length;r++)e.writeFloat(t[r])}function d(t,e){for(var r=0;r<t.length;r++)e.writeDouble(t[r])}function m(t,e){for(var r=0;r<t.length;r++)e.writeBoolean(t[r])}function v(t,e){
+for(var r=0;r<t.length;r++)e.writeFixed32(t[r])}function g(t,e){for(var r=0;r<t.length;r++)e.writeSFixed32(t[r])}function y(t,e){for(var r=0;r<t.length;r++)e.writeFixed64(t[r])}function b(t,e){for(var r=0;r<t.length;r++)e.writeSFixed64(t[r])}function _(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+16777216*t[e+3]}function x(t,e,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function w(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}function S(t,e,r){for(var n="",i=e;i<r;){var o=t[i],a=null,s=o>239?4:o>223?3:o>191?2:1;if(i+s>r)break;var c,u,h;1===s?o<128&&(a=o):2===s?128==(192&(c=t[i+1]))&&(a=(31&o)<<6|63&c)<=127&&(a=null):3===s?(c=t[i+1],u=t[i+2],128==(192&c)&&128==(192&u)&&((a=(15&o)<<12|(63&c)<<6|63&u)<=2047||a>=55296&&a<=57343)&&(a=null)):4===s&&(c=t[i+1],u=t[i+2],h=t[i+3],128==(192&c)&&128==(192&u)&&128==(192&h)&&((a=(15&o)<<18|(63&c)<<12|(63&u)<<6|63&h)<=65535||a>=1114112)&&(a=null)),null===a?(a=65533,s=1):a>65535&&(a-=65536,n+=String.fromCharCode(a>>>10&1023|55296),a=56320|1023&a),n+=String.fromCharCode(a),i+=s}return n}function M(t,e,r){for(var n,i,o=0;o<e.length;o++){if((n=e.charCodeAt(o))>55295&&n<57344){if(!i){n>56319||o+1===e.length?(t[r++]=239,t[r++]=191,t[r++]=189):i=n;continue}if(n<56320){t[r++]=239,t[r++]=191,t[r++]=189,i=n;continue}n=i-55296<<10|n-56320|65536,i=null}else i&&(t[r++]=239,t[r++]=191,t[r++]=189,i=null);n<128?t[r++]=n:(n<2048?t[r++]=n>>6|192:(n<65536?t[r++]=n>>12|224:(t[r++]=n>>18|240,t[r++]=n>>12&63|128),t[r++]=n>>6&63|128),t[r++]=63&n|128)}return r}e.exports=n;var E=t("ieee754");n.Varint=0,n.Fixed64=1,n.Bytes=2,n.Fixed32=5;n.prototype={destroy:function(){this.buf=null},readFields:function(t,e,r){for(r=r||this.length;this.pos<r;){var n=this.readVarint(),i=n>>3,o=this.pos;this.type=7&n,t(i,e,this),this.pos===o&&this.skip(n)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=_(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=w(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=_(this.buf,this.pos)+4294967296*_(this.buf,this.pos+4);return this.pos+=8,t},readSFixed64:function(){var t=_(this.buf,this.pos)+4294967296*w(this.buf,this.pos+4);return this.pos+=8,t},readFloat:function(){var t=E.read(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=E.read(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,r,n=this.buf;return r=n[this.pos++],e=127&r,r<128?e:(r=n[this.pos++],e|=(127&r)<<7,r<128?e:(r=n[this.pos++],e|=(127&r)<<14,r<128?e:(r=n[this.pos++],e|=(127&r)<<21,r<128?e:(r=n[this.pos],e|=(15&r)<<28,i(e,t,this)))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=S(this.buf,this.pos,t);return this.pos=t,e},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){var r=o(this);for(t=t||[];this.pos<r;)t.push(this.readVarint(e));return t},readPackedSVarint:function(t){var e=o(this);for(t=t||[];this.pos<e;)t.push(this.readSVarint());return t},readPackedBoolean:function(t){var e=o(this);for(t=t||[];this.pos<e;)t.push(this.readBoolean());return t},readPackedFloat:function(t){var e=o(this);for(t=t||[];this.pos<e;)t.push(this.readFloat());return t},readPackedDouble:function(t){var e=o(this);for(t=t||[];this.pos<e;)t.push(this.readDouble());return t},readPackedFixed32:function(t){var e=o(this);for(t=t||[];this.pos<e;)t.push(this.readFixed32());return t},readPackedSFixed32:function(t){var e=o(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed32());return t},readPackedFixed64:function(t){var e=o(this);for(t=t||[];this.pos<e;)t.push(this.readFixed64());return t},readPackedSFixed64:function(t){var e=o(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed64());return t},skip:function(t){var e=7&t;if(e===n.Varint)for(;this.buf[this.pos++]>127;);else if(e===n.Bytes)this.pos=this.readVarint()+this.pos;else if(e===n.Fixed32)this.pos+=4;else{if(e!==n.Fixed64)throw new Error("Unimplemented type: "+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e<this.pos+t;)e*=2;if(e!==this.length){var r=new Uint8Array(e);r.set(this.buf),this.buf=r,this.length=e}},finish:function(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)},writeFixed32:function(t){this.realloc(4),x(this.buf,t,this.pos),this.pos+=4},writeSFixed32:function(t){this.realloc(4),x(this.buf,t,this.pos),this.pos+=4},writeFixed64:function(t){this.realloc(8),x(this.buf,-1&t,this.pos),x(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8},writeSFixed64:function(t){this.realloc(8),x(this.buf,-1&t,this.pos),x(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8},writeVarint:function(t){if((t=+t||0)>268435455||t<0)return void s(t,this);this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127)))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=M(this.buf,t,this.pos);var r=this.pos-e;r>=128&&h(e,r,this),this.pos=e-1,this.writeVarint(r),this.pos+=r},writeFloat:function(t){this.realloc(4),E.write(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),E.write(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var r=0;r<e;r++)this.buf[this.pos++]=t[r]},writeRawMessage:function(t,e){this.pos++;var r=this.pos;t(e,this);var n=this.pos-r;n>=128&&h(r,n,this),this.pos=r-1,this.writeVarint(n),this.pos+=n},writeMessage:function(t,e,r){this.writeTag(t,n.Bytes),this.writeRawMessage(e,r)},writePackedVarint:function(t,e){this.writeMessage(t,l,e)},writePackedSVarint:function(t,e){this.writeMessage(t,p,e)},writePackedBoolean:function(t,e){this.writeMessage(t,m,e)},writePackedFloat:function(t,e){this.writeMessage(t,f,e)},writePackedDouble:function(t,e){this.writeMessage(t,d,e)},writePackedFixed32:function(t,e){this.writeMessage(t,v,e)},writePackedSFixed32:function(t,e){this.writeMessage(t,g,e)},writePackedFixed64:function(t,e){this.writeMessage(t,y,e)},writePackedSFixed64:function(t,e){this.writeMessage(t,b,e)},writeBytesField:function(t,e){this.writeTag(t,n.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,n.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,n.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,n.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,n.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,n.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,n.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,n.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,n.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,n.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}}},{ieee754:15}],23:[function(t,e,r){"use strict";function n(t,e,r,a,s){for(r=r||0,a=a||t.length-1,s=s||o;a>r;){if(a-r>600){var c=a-r+1,u=e-r+1,h=Math.log(c),l=.5*Math.exp(2*h/3),p=.5*Math.sqrt(h*l*(c-l)/c)*(u-c/2<0?-1:1);n(t,e,Math.max(r,Math.floor(e-u*l/c+p)),Math.min(a,Math.floor(e+(c-u)*l/c+p)),s)}var f=t[e],d=r,m=a;for(i(t,r,e),s(t[a],f)>0&&i(t,r,a);d<m;){for(i(t,d,m),d++,m--;s(t[d],f)<0;)d++;for(;s(t[m],f)>0;)m--}0===s(t[r],f)?i(t,r,m):(m++,i(t,m,a)),m<=e&&(r=m+1),e<=m&&(a=m-1)}}function i(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function o(t,e){return t<e?-1:t>e?1:0}e.exports=n},{}],24:[function(t,e,r){"use strict";function n(t,e){if(!(this instanceof n))return new n(t,e);this._maxEntries=Math.max(4,t||9),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),e&&this._initFormat(e),this.clear()}function i(t,e,r){if(!r)return e.indexOf(t);for(var n=0;n<e.length;n++)if(r(t,e[n]))return n;return-1}function o(t,e){a(t,0,t.children.length,e,t)}function a(t,e,r,n,i){i||(i=v(null)),i.minX=1/0,i.minY=1/0,i.maxX=-1/0,i.maxY=-1/0;for(var o,a=e;a<r;a++)o=t.children[a],s(i,t.leaf?n(o):o);return i}function s(t,e){return t.minX=Math.min(t.minX,e.minX),t.minY=Math.min(t.minY,e.minY),t.maxX=Math.max(t.maxX,e.maxX),t.maxY=Math.max(t.maxY,e.maxY),t}function c(t,e){return t.minX-e.minX}function u(t,e){return t.minY-e.minY}function h(t){return(t.maxX-t.minX)*(t.maxY-t.minY)}function l(t){return t.maxX-t.minX+(t.maxY-t.minY)}function p(t,e){return(Math.max(e.maxX,t.maxX)-Math.min(e.minX,t.minX))*(Math.max(e.maxY,t.maxY)-Math.min(e.minY,t.minY))}function f(t,e){var r=Math.max(t.minX,e.minX),n=Math.max(t.minY,e.minY),i=Math.min(t.maxX,e.maxX),o=Math.min(t.maxY,e.maxY);return Math.max(0,i-r)*Math.max(0,o-n)}function d(t,e){return t.minX<=e.minX&&t.minY<=e.minY&&e.maxX<=t.maxX&&e.maxY<=t.maxY}function m(t,e){return e.minX<=t.maxX&&e.minY<=t.maxY&&e.maxX>=t.minX&&e.maxY>=t.minY}function v(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function g(t,e,r,n,i){for(var o,a=[e,r];a.length;)r=a.pop(),e=a.pop(),r-e<=n||(o=e+Math.ceil((r-e)/n/2)*n,y(t,o,e,r,i),a.push(e,o,o,r))}e.exports=n;var y=t("quickselect");n.prototype={all:function(){return this._all(this.data,[])},search:function(t){var e=this.data,r=[],n=this.toBBox;if(!m(t,e))return r;for(var i,o,a,s,c=[];e;){for(i=0,o=e.children.length;i<o;i++)a=e.children[i],s=e.leaf?n(a):a,m(t,s)&&(e.leaf?r.push(a):d(t,s)?this._all(a,r):c.push(a));e=c.pop()}return r},collides:function(t){var e=this.data,r=this.toBBox;if(!m(t,e))return!1;for(var n,i,o,a,s=[];e;){for(n=0,i=e.children.length;n<i;n++)if(o=e.children[n],a=e.leaf?r(o):o,m(t,a)){if(e.leaf||d(t,a))return!0;s.push(o)}e=s.pop()}return!1},load:function(t){if(!t||!t.length)return this;if(t.length<this._minEntries){for(var e=0,r=t.length;e<r;e++)this.insert(t[e]);return this}var n=this._build(t.slice(),0,t.length-1,0);if(this.data.children.length)if(this.data.height===n.height)this._splitRoot(this.data,n);else{if(this.data.height<n.height){var i=this.data;this.data=n,n=i}this._insert(n,this.data.height-n.height-1,!0)}else this.data=n;return this},insert:function(t){return t&&this._insert(t,this.data.height-1),this},clear:function(){return this.data=v([]),this},remove:function(t,e){if(!t)return this;for(var r,n,o,a,s=this.data,c=this.toBBox(t),u=[],h=[];s||u.length;){if(s||(s=u.pop(),n=u[u.length-1],r=h.pop(),a=!0),s.leaf&&-1!==(o=i(t,s.children,e)))return s.children.splice(o,1),u.push(s),this._condense(u),this;a||s.leaf||!d(s,c)?n?(r++,s=n.children[r],a=!1):s=null:(u.push(s),h.push(r),r=0,n=s,s=s.children[0])}return this},toBBox:function(t){return t},compareMinX:c,compareMinY:u,toJSON:function(){return this.data},fromJSON:function(t){return this.data=t,this},_all:function(t,e){for(var r=[];t;)t.leaf?e.push.apply(e,t.children):r.push.apply(r,t.children),t=r.pop();return e},_build:function(t,e,r,n){var i,a=r-e+1,s=this._maxEntries;if(a<=s)return i=v(t.slice(e,r+1)),o(i,this.toBBox),i;n||(n=Math.ceil(Math.log(a)/Math.log(s)),s=Math.ceil(a/Math.pow(s,n-1))),i=v([]),i.leaf=!1,i.height=n;var c,u,h,l,p=Math.ceil(a/s),f=p*Math.ceil(Math.sqrt(s));for(g(t,e,r,f,this.compareMinX),c=e;c<=r;c+=f)for(h=Math.min(c+f-1,r),g(t,c,h,p,this.compareMinY),u=c;u<=h;u+=p)l=Math.min(u+p-1,h),i.children.push(this._build(t,u,l,n-1));return o(i,this.toBBox),i},_chooseSubtree:function(t,e,r,n){for(var i,o,a,s,c,u,l,f;;){if(n.push(e),e.leaf||n.length-1===r)break;for(l=f=1/0,i=0,o=e.children.length;i<o;i++)a=e.children[i],c=h(a),u=p(t,a)-c,u<f?(f=u,l=c<l?c:l,s=a):u===f&&c<l&&(l=c,s=a);e=s||e.children[0]}return e},_insert:function(t,e,r){var n=this.toBBox,i=r?t:n(t),o=[],a=this._chooseSubtree(i,this.data,e,o);for(a.children.push(t),s(a,i);e>=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(i,o,e)},_split:function(t,e){var r=t[e],n=r.children.length,i=this._minEntries;this._chooseSplitAxis(r,i,n);var a=this._chooseSplitIndex(r,i,n),s=v(r.children.splice(a,r.children.length-a));s.height=r.height,s.leaf=r.leaf,o(r,this.toBBox),o(s,this.toBBox),e?t[e-1].children.push(s):this._splitRoot(r,s)},_splitRoot:function(t,e){this.data=v([t,e]),this.data.height=t.height+1,this.data.leaf=!1,o(this.data,this.toBBox)},_chooseSplitIndex:function(t,e,r){var n,i,o,s,c,u,l,p;for(u=l=1/0,n=e;n<=r-e;n++)i=a(t,0,n,this.toBBox),o=a(t,n,r,this.toBBox),s=f(i,o),c=h(i)+h(o),s<u?(u=s,p=n,l=c<l?c:l):s===u&&c<l&&(l=c,p=n);return p},_chooseSplitAxis:function(t,e,r){var n=t.leaf?this.compareMinX:c,i=t.leaf?this.compareMinY:u;this._allDistMargin(t,e,r,n)<this._allDistMargin(t,e,r,i)&&t.children.sort(n)},_allDistMargin:function(t,e,r,n){t.children.sort(n);var i,o,c=this.toBBox,u=a(t,0,e,c),h=a(t,r-e,r,c),p=l(u)+l(h);for(i=e;i<r-e;i++)o=t.children[i],s(u,t.leaf?c(o):o),p+=l(u);for(i=r-e-1;i>=e;i--)o=t.children[i],s(h,t.leaf?c(o):o),p+=l(h);return p},_adjustParentBBoxes:function(t,e,r){for(var n=r;n>=0;n--)s(e[n],t)},_condense:function(t){for(var e,r=t.length-1;r>=0;r--)0===t[r].children.length?r>0?(e=t[r-1].children,e.splice(e.indexOf(t[r]),1)):this.clear():o(t[r],this.toBBox)},_initFormat:function(t){var e=["return a"," - b",";"];this.compareMinX=new Function("a","b",e.join(t[0])),this.compareMinY=new Function("a","b",e.join(t[1])),this.toBBox=new Function("a","return {minX: a"+t[0]+", minY: a"+t[1]+", maxX: a"+t[2]+", maxY: a"+t[3]+"};")}}},{quickselect:23}],25:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./Subject"),o=t("./util/ObjectUnsubscribedError"),a=function(t){function e(e){t.call(this),this._value=e}return n(e,t),Object.defineProperty(e.prototype,"value",{get:function(){return this.getValue()},enumerable:!0,configurable:!0}),e.prototype._subscribe=function(e){var r=t.prototype._subscribe.call(this,e);return r&&!r.closed&&e.next(this._value),r},e.prototype.getValue=function(){if(this.hasError)throw this.thrownError;if(this.closed)throw new o.ObjectUnsubscribedError;return this._value},e.prototype.next=function(e){t.prototype.next.call(this,this._value=e)},e}(i.Subject);r.BehaviorSubject=a},{"./Subject":33,"./util/ObjectUnsubscribedError":159}],26:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./Subscriber"),o=function(t){function e(e,r,n){t.call(this),this.parent=e,this.outerValue=r,this.outerIndex=n,this.index=0}return n(e,t),e.prototype._next=function(t){this.parent.notifyNext(this.outerValue,t,this.outerIndex,this.index++,this)},e.prototype._error=function(t){this.parent.notifyError(t,this),this.unsubscribe()},e.prototype._complete=function(){this.parent.notifyComplete(this),this.unsubscribe()},e}(i.Subscriber);r.InnerSubscriber=o},{"./Subscriber":35}],27:[function(t,e,r){"use strict";var n=t("./Observable"),i=function(){function t(t,e,r){this.kind=t,this.value=e,this.error=r,this.hasValue="N"===t}return t.prototype.observe=function(t){switch(this.kind){case"N":return t.next&&t.next(this.value);case"E":return t.error&&t.error(this.error);case"C":return t.complete&&t.complete()}},t.prototype.do=function(t,e,r){switch(this.kind){case"N":return t&&t(this.value);case"E":return e&&e(this.error);case"C":return r&&r()}},t.prototype.accept=function(t,e,r){return t&&"function"==typeof t.next?this.observe(t):this.do(t,e,r)},t.prototype.toObservable=function(){switch(this.kind){case"N":return n.Observable.of(this.value);case"E":return n.Observable.throw(this.error);case"C":return n.Observable.empty()}throw new Error("unexpected notification kind value")},t.createNext=function(e){return void 0!==e?new t("N",e):this.undefinedValueNotification},t.createError=function(e){return new t("E",void 0,e)},t.createComplete=function(){return this.completeNotification},t.completeNotification=new t("C"),t.undefinedValueNotification=new t("N",void 0),t}();r.Notification=i},{"./Observable":28}],28:[function(t,e,r){"use strict";var n=t("./util/root"),i=t("./util/toSubscriber"),o=t("./symbol/observable"),a=function(){function t(t){this._isScalar=!1,t&&(this._subscribe=t)}return t.prototype.lift=function(e){var r=new t;return r.source=this,r.operator=e,r},t.prototype.subscribe=function(t,e,r){var n=this.operator,o=i.toSubscriber(t,e,r);if(n?n.call(o,this.source):o.add(this._trySubscribe(o)),o.syncErrorThrowable&&(o.syncErrorThrowable=!1,o.syncErrorThrown))throw o.syncErrorValue;return o},t.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(e){t.syncErrorThrown=!0,t.syncErrorValue=e,t.error(e)}},t.prototype.forEach=function(t,e){var r=this;if(e||(n.root.Rx&&n.root.Rx.config&&n.root.Rx.config.Promise?e=n.root.Rx.config.Promise:n.root.Promise&&(e=n.root.Promise)),!e)throw new Error("no Promise impl found");return new e(function(e,n){var i;i=r.subscribe(function(e){if(i)try{t(e)}catch(t){n(t),i.unsubscribe()}else t(e)},n,e)})},t.prototype._subscribe=function(t){return this.source.subscribe(t)},t.prototype[o.observable]=function(){return this},t.create=function(e){return new t(e)},t}();r.Observable=a},{"./symbol/observable":154,"./util/root":171,"./util/toSubscriber":173}],29:[function(t,e,r){"use strict";r.empty={closed:!0,next:function(t){},error:function(t){throw t},complete:function(){}}},{}],30:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./Subscriber"),o=function(t){function e(){t.apply(this,arguments)}return n(e,t),e.prototype.notifyNext=function(t,e,r,n,i){this.destination.next(e)},e.prototype.notifyError=function(t,e){this.destination.error(t)},e.prototype.notifyComplete=function(t){this.destination.complete()},e}(i.Subscriber);r.OuterSubscriber=o},{"./Subscriber":35}],31:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./Subject"),o=t("./scheduler/queue"),a=t("./Subscription"),s=t("./operator/observeOn"),c=t("./util/ObjectUnsubscribedError"),u=t("./SubjectSubscription"),h=function(t){function e(e,r,n){void 0===e&&(e=Number.POSITIVE_INFINITY),void 0===r&&(r=Number.POSITIVE_INFINITY),t.call(this),this.scheduler=n,this._events=[],this._bufferSize=e<1?1:e,this._windowTime=r<1?1:r}return n(e,t),e.prototype.next=function(e){var r=this._getNow();this._events.push(new l(r,e)),this._trimBufferThenGetEvents(),t.prototype.next.call(this,e)},e.prototype._subscribe=function(t){var e,r=this._trimBufferThenGetEvents(),n=this.scheduler;if(this.closed)throw new c.ObjectUnsubscribedError;this.hasError?e=a.Subscription.EMPTY:this.isStopped?e=a.Subscription.EMPTY:(this.observers.push(t),e=new u.SubjectSubscription(this,t)),n&&t.add(t=new s.ObserveOnSubscriber(t,n));for(var i=r.length,o=0;o<i&&!t.closed;o++)t.next(r[o].value);return this.hasError?t.error(this.thrownError):this.isStopped&&t.complete(),e},e.prototype._getNow=function(){return(this.scheduler||o.queue).now()},e.prototype._trimBufferThenGetEvents=function(){for(var t=this._getNow(),e=this._bufferSize,r=this._windowTime,n=this._events,i=n.length,o=0;o<i&&!(t-n[o].time<r);)o++;return i>e&&(o=Math.max(o,i-e)),o>0&&n.splice(0,o),n},e}(i.Subject);r.ReplaySubject=h;var l=function(){function t(t,e){this.time=t,this.value=e}return t}()},{"./Subject":33,"./SubjectSubscription":34,"./Subscription":36,"./operator/observeOn":128,"./scheduler/queue":152,"./util/ObjectUnsubscribedError":159}],32:[function(t,e,r){"use strict";var n=function(){function t(e,r){void 0===r&&(r=t.now),this.SchedulerAction=e,this.now=r}return t.prototype.schedule=function(t,e,r){return void 0===e&&(e=0),new this.SchedulerAction(this,t).schedule(r,e)},t.now=Date.now?Date.now:function(){return+new Date},t}();r.Scheduler=n},{}],33:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./Observable"),o=t("./Subscriber"),a=t("./Subscription"),s=t("./util/ObjectUnsubscribedError"),c=t("./SubjectSubscription"),u=t("./symbol/rxSubscriber"),h=function(t){function e(e){t.call(this,e),this.destination=e}return n(e,t),e}(o.Subscriber);r.SubjectSubscriber=h;var l=function(t){function e(){t.call(this),this.observers=[],this.closed=!1,this.isStopped=!1,this.hasError=!1,this.thrownError=null}return n(e,t),e.prototype[u.rxSubscriber]=function(){return new h(this)},e.prototype.lift=function(t){var e=new p(this,this);return e.operator=t,e},e.prototype.next=function(t){if(this.closed)throw new s.ObjectUnsubscribedError;if(!this.isStopped)for(var e=this.observers,r=e.length,n=e.slice(),i=0;i<r;i++)n[i].next(t)},e.prototype.error=function(t){if(this.closed)throw new s.ObjectUnsubscribedError;this.hasError=!0,this.thrownError=t,this.isStopped=!0;for(var e=this.observers,r=e.length,n=e.slice(),i=0;i<r;i++)n[i].error(t);this.observers.length=0},e.prototype.complete=function(){if(this.closed)throw new s.ObjectUnsubscribedError;this.isStopped=!0;for(var t=this.observers,e=t.length,r=t.slice(),n=0;n<e;n++)r[n].complete();this.observers.length=0},e.prototype.unsubscribe=function(){this.isStopped=!0,this.closed=!0,this.observers=null},e.prototype._trySubscribe=function(e){if(this.closed)throw new s.ObjectUnsubscribedError;return t.prototype._trySubscribe.call(this,e)},e.prototype._subscribe=function(t){if(this.closed)throw new s.ObjectUnsubscribedError;return this.hasError?(t.error(this.thrownError),a.Subscription.EMPTY):this.isStopped?(t.complete(),a.Subscription.EMPTY):(this.observers.push(t),new c.SubjectSubscription(this,t))},e.prototype.asObservable=function(){var t=new i.Observable;return t.source=this,t},e.create=function(t,e){return new p(t,e)},e}(i.Observable);r.Subject=l;var p=function(t){function e(e,r){t.call(this),this.destination=e,this.source=r}return n(e,t),e.prototype.next=function(t){var e=this.destination;e&&e.next&&e.next(t)},e.prototype.error=function(t){var e=this.destination;e&&e.error&&this.destination.error(t)},e.prototype.complete=function(){var t=this.destination;t&&t.complete&&this.destination.complete()},e.prototype._subscribe=function(t){return this.source?this.source.subscribe(t):a.Subscription.EMPTY},e}(l);r.AnonymousSubject=p},{"./Observable":28,"./SubjectSubscription":34,"./Subscriber":35,"./Subscription":36,"./symbol/rxSubscriber":155,"./util/ObjectUnsubscribedError":159}],34:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./Subscription"),o=function(t){function e(e,r){t.call(this),this.subject=e,this.subscriber=r,this.closed=!1}return n(e,t),e.prototype.unsubscribe=function(){if(!this.closed){this.closed=!0;var t=this.subject,e=t.observers;if(this.subject=null,e&&0!==e.length&&!t.isStopped&&!t.closed){var r=e.indexOf(this.subscriber);-1!==r&&e.splice(r,1)}}},e}(i.Subscription);r.SubjectSubscription=o},{"./Subscription":36}],35:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./util/isFunction"),o=t("./Subscription"),a=t("./Observer"),s=t("./symbol/rxSubscriber"),c=function(t){function e(r,n,i){switch(t.call(this),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=a.empty;break;case 1:if(!r){this.destination=a.empty;break}if("object"==typeof r){r instanceof e?(this.destination=r,this.destination.add(this)):(this.syncErrorThrowable=!0,this.destination=new u(this,r));break}default:this.syncErrorThrowable=!0,this.destination=new u(this,r,n,i)}}return n(e,t),e.prototype[s.rxSubscriber]=function(){return this},e.create=function(t,r,n){var i=new e(t,r,n);return i.syncErrorThrowable=!1,i},e.prototype.next=function(t){this.isStopped||this._next(t)},e.prototype.error=function(t){this.isStopped||(this.isStopped=!0,this._error(t))},e.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},e.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,t.prototype.unsubscribe.call(this))},e.prototype._next=function(t){this.destination.next(t)},e.prototype._error=function(t){this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},e.prototype._unsubscribeAndRecycle=function(){var t=this,e=t._parent,r=t._parents;return this._parent=null,this._parents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parent=e,this._parents=r,this},e}(o.Subscription);r.Subscriber=c;var u=function(t){function e(e,r,n,o){t.call(this),this._parentSubscriber=e;var s,c=this;i.isFunction(r)?s=r:r&&(s=r.next,n=r.error,o=r.complete,r!==a.empty&&(c=Object.create(r),i.isFunction(c.unsubscribe)&&this.add(c.unsubscribe.bind(c)),c.unsubscribe=this.unsubscribe.bind(this))),this._context=c,this._next=s,this._error=n,this._complete=o}return n(e,t),e.prototype.next=function(t){if(!this.isStopped&&this._next){var e=this._parentSubscriber;e.syncErrorThrowable?this.__tryOrSetError(e,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}},e.prototype.error=function(t){if(!this.isStopped){var e=this._parentSubscriber;if(this._error)e.syncErrorThrowable?(this.__tryOrSetError(e,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else{if(!e.syncErrorThrowable)throw this.unsubscribe(),t;e.syncErrorValue=t,e.syncErrorThrown=!0,this.unsubscribe()}}},e.prototype.complete=function(){var t=this;if(!this.isStopped){var e=this._parentSubscriber;if(this._complete){var r=function(){return t._complete.call(t._context)};e.syncErrorThrowable?(this.__tryOrSetError(e,r),this.unsubscribe()):(this.__tryOrUnsub(r),this.unsubscribe())}else this.unsubscribe()}},e.prototype.__tryOrUnsub=function(t,e){try{t.call(this._context,e)}catch(t){throw this.unsubscribe(),t}},e.prototype.__tryOrSetError=function(t,e,r){try{e.call(this._context,r)}catch(e){return t.syncErrorValue=e,t.syncErrorThrown=!0,!0}return!1},e.prototype._unsubscribe=function(){var t=this._parentSubscriber;this._context=null,this._parentSubscriber=null,t.unsubscribe()},e}(c)},{"./Observer":29,"./Subscription":36,"./symbol/rxSubscriber":155,"./util/isFunction":166}],36:[function(t,e,r){"use strict";function n(t){return t.reduce(function(t,e){return t.concat(e instanceof u.UnsubscriptionError?e.errors:e)},[])}var i=t("./util/isArray"),o=t("./util/isObject"),a=t("./util/isFunction"),s=t("./util/tryCatch"),c=t("./util/errorObject"),u=t("./util/UnsubscriptionError"),h=function(){function t(t){this.closed=!1,this._parent=null,this._parents=null,this._subscriptions=null,t&&(this._unsubscribe=t)}return t.prototype.unsubscribe=function(){var t,e=!1;if(!this.closed){var r=this,h=r._parent,l=r._parents,p=r._unsubscribe,f=r._subscriptions;this.closed=!0,this._parent=null,this._parents=null,this._subscriptions=null;for(var d=-1,m=l?l.length:0;h;)h.remove(this),h=++d<m&&l[d]||null;if(a.isFunction(p)){var v=s.tryCatch(p).call(this);v===c.errorObject&&(e=!0,t=t||(c.errorObject.e instanceof u.UnsubscriptionError?n(c.errorObject.e.errors):[c.errorObject.e]))}if(i.isArray(f))for(d=-1,m=f.length;++d<m;){var g=f[d];if(o.isObject(g)){var v=s.tryCatch(g.unsubscribe).call(g);if(v===c.errorObject){e=!0,t=t||[];var y=c.errorObject.e;y instanceof u.UnsubscriptionError?t=t.concat(n(y.errors)):t.push(y)}}}if(e)throw new u.UnsubscriptionError(t)}},t.prototype.add=function(e){if(!e||e===t.EMPTY)return t.EMPTY;if(e===this)return this;var r=e;switch(typeof e){case"function":r=new t(e);case"object":if(r.closed||"function"!=typeof r.unsubscribe)return r;if(this.closed)return r.unsubscribe(),r;if("function"!=typeof r._addParent){var n=r;r=new t,r._subscriptions=[n]}break;default:throw new Error("unrecognized teardown "+e+" added to Subscription.")}return(this._subscriptions||(this._subscriptions=[])).push(r),r._addParent(this),r},t.prototype.remove=function(t){var e=this._subscriptions;if(e){var r=e.indexOf(t);-1!==r&&e.splice(r,1)}},t.prototype._addParent=function(t){var e=this,r=e._parent,n=e._parents;r&&r!==t?n?-1===n.indexOf(t)&&n.push(t):this._parents=[t]:this._parent=t},t.EMPTY=function(t){return t.closed=!0,t}(new t),t}();r.Subscription=h},{"./util/UnsubscriptionError":161,"./util/errorObject":162,"./util/isArray":163,"./util/isFunction":166,"./util/isObject":168,"./util/tryCatch":174}],37:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/combineLatest");n.Observable.combineLatest=i.combineLatest},{"../../Observable":28,"../../observable/combineLatest":96}],38:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/defer");n.Observable.defer=i.defer},{"../../Observable":28,"../../observable/defer":97}],39:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/empty");n.Observable.empty=i.empty},{"../../Observable":28,"../../observable/empty":98}],40:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/from");n.Observable.from=i.from},{"../../Observable":28,"../../observable/from":99}],41:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/fromEvent");n.Observable.fromEvent=i.fromEvent},{"../../Observable":28,"../../observable/fromEvent":100}],42:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/fromPromise");n.Observable.fromPromise=i.fromPromise},{"../../Observable":28,"../../observable/fromPromise":101}],43:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/merge");n.Observable.merge=i.merge},{"../../Observable":28,"../../observable/merge":102}],44:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/of");n.Observable.of=i.of},{"../../Observable":28,"../../observable/of":103}],45:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/throw");n.Observable.throw=i._throw},{"../../Observable":28,"../../observable/throw":104}],46:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/timer");n.Observable.timer=i.timer},{"../../Observable":28,"../../observable/timer":105}],47:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../observable/zip");n.Observable.zip=i.zip},{"../../Observable":28,"../../observable/zip":106}],48:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/buffer");n.Observable.prototype.buffer=i.buffer},{"../../Observable":28,"../../operator/buffer":107}],49:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/bufferCount");n.Observable.prototype.bufferCount=i.bufferCount},{"../../Observable":28,"../../operator/bufferCount":108}],50:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/bufferWhen");n.Observable.prototype.bufferWhen=i.bufferWhen},{"../../Observable":28,"../../operator/bufferWhen":109}],51:[function(t,e,r){"use strict"
+;var n=t("../../Observable"),i=t("../../operator/catch");n.Observable.prototype.catch=i._catch,n.Observable.prototype._catch=i._catch},{"../../Observable":28,"../../operator/catch":110}],52:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/combineLatest");n.Observable.prototype.combineLatest=i.combineLatest},{"../../Observable":28,"../../operator/combineLatest":111}],53:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/concat");n.Observable.prototype.concat=i.concat},{"../../Observable":28,"../../operator/concat":112}],54:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/debounceTime");n.Observable.prototype.debounceTime=i.debounceTime},{"../../Observable":28,"../../operator/debounceTime":113}],55:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/delay");n.Observable.prototype.delay=i.delay},{"../../Observable":28,"../../operator/delay":114}],56:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/distinct");n.Observable.prototype.distinct=i.distinct},{"../../Observable":28,"../../operator/distinct":115}],57:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/distinctUntilChanged");n.Observable.prototype.distinctUntilChanged=i.distinctUntilChanged},{"../../Observable":28,"../../operator/distinctUntilChanged":116}],58:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/do");n.Observable.prototype.do=i._do,n.Observable.prototype._do=i._do},{"../../Observable":28,"../../operator/do":117}],59:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/expand");n.Observable.prototype.expand=i.expand},{"../../Observable":28,"../../operator/expand":118}],60:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/filter");n.Observable.prototype.filter=i.filter},{"../../Observable":28,"../../operator/filter":119}],61:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/finally");n.Observable.prototype.finally=i._finally,n.Observable.prototype._finally=i._finally},{"../../Observable":28,"../../operator/finally":120}],62:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/first");n.Observable.prototype.first=i.first},{"../../Observable":28,"../../operator/first":121}],63:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/last");n.Observable.prototype.last=i.last},{"../../Observable":28,"../../operator/last":122}],64:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/map");n.Observable.prototype.map=i.map},{"../../Observable":28,"../../operator/map":123}],65:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/merge");n.Observable.prototype.merge=i.merge},{"../../Observable":28,"../../operator/merge":124}],66:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/mergeAll");n.Observable.prototype.mergeAll=i.mergeAll},{"../../Observable":28,"../../operator/mergeAll":125}],67:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/mergeMap");n.Observable.prototype.mergeMap=i.mergeMap,n.Observable.prototype.flatMap=i.mergeMap},{"../../Observable":28,"../../operator/mergeMap":126}],68:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/pairwise");n.Observable.prototype.pairwise=i.pairwise},{"../../Observable":28,"../../operator/pairwise":129}],69:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/pluck");n.Observable.prototype.pluck=i.pluck},{"../../Observable":28,"../../operator/pluck":130}],70:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/publish");n.Observable.prototype.publish=i.publish},{"../../Observable":28,"../../operator/publish":131}],71:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/publishReplay");n.Observable.prototype.publishReplay=i.publishReplay},{"../../Observable":28,"../../operator/publishReplay":132}],72:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/scan");n.Observable.prototype.scan=i.scan},{"../../Observable":28,"../../operator/scan":133}],73:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/share");n.Observable.prototype.share=i.share},{"../../Observable":28,"../../operator/share":134}],74:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/skip");n.Observable.prototype.skip=i.skip},{"../../Observable":28,"../../operator/skip":135}],75:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/skipUntil");n.Observable.prototype.skipUntil=i.skipUntil},{"../../Observable":28,"../../operator/skipUntil":136}],76:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/skipWhile");n.Observable.prototype.skipWhile=i.skipWhile},{"../../Observable":28,"../../operator/skipWhile":137}],77:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/startWith");n.Observable.prototype.startWith=i.startWith},{"../../Observable":28,"../../operator/startWith":138}],78:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/switchMap");n.Observable.prototype.switchMap=i.switchMap},{"../../Observable":28,"../../operator/switchMap":139}],79:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/take");n.Observable.prototype.take=i.take},{"../../Observable":28,"../../operator/take":140}],80:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/takeUntil");n.Observable.prototype.takeUntil=i.takeUntil},{"../../Observable":28,"../../operator/takeUntil":141}],81:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/throttleTime");n.Observable.prototype.throttleTime=i.throttleTime},{"../../Observable":28,"../../operator/throttleTime":143}],82:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/withLatestFrom");n.Observable.prototype.withLatestFrom=i.withLatestFrom},{"../../Observable":28,"../../operator/withLatestFrom":144}],83:[function(t,e,r){"use strict";var n=t("../../Observable"),i=t("../../operator/zip");n.Observable.prototype.zip=i.zipProto},{"../../Observable":28,"../../operator/zip":145}],84:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Observable"),o=t("./ScalarObservable"),a=t("./EmptyObservable"),s=function(t){function e(e,r){t.call(this),this.arrayLike=e,this.scheduler=r,r||1!==e.length||(this._isScalar=!0,this.value=e[0])}return n(e,t),e.create=function(t,r){var n=t.length;return 0===n?new a.EmptyObservable:1===n?new o.ScalarObservable(t[0],r):new e(t,r)},e.dispatch=function(t){var e=t.arrayLike,r=t.index,n=t.length,i=t.subscriber;if(!i.closed){if(r>=n)return void i.complete();i.next(e[r]),t.index=r+1,this.schedule(t)}},e.prototype._subscribe=function(t){var r=this,n=r.arrayLike,i=r.scheduler,o=n.length;if(i)return i.schedule(e.dispatch,0,{arrayLike:n,index:0,length:o,subscriber:t});for(var a=0;a<o&&!t.closed;a++)t.next(n[a]);t.complete()},e}(i.Observable);r.ArrayLikeObservable=s},{"../Observable":28,"./EmptyObservable":88,"./ScalarObservable":94}],85:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Observable"),o=t("./ScalarObservable"),a=t("./EmptyObservable"),s=t("../util/isScheduler"),c=function(t){function e(e,r){t.call(this),this.array=e,this.scheduler=r,r||1!==e.length||(this._isScalar=!0,this.value=e[0])}return n(e,t),e.create=function(t,r){return new e(t,r)},e.of=function(){for(var t=[],r=0;r<arguments.length;r++)t[r-0]=arguments[r];var n=t[t.length-1];s.isScheduler(n)?t.pop():n=null;var i=t.length;return i>1?new e(t,n):1===i?new o.ScalarObservable(t[0],n):new a.EmptyObservable(n)},e.dispatch=function(t){var e=t.array,r=t.index,n=t.count,i=t.subscriber;if(r>=n)return void i.complete();i.next(e[r]),i.closed||(t.index=r+1,this.schedule(t))},e.prototype._subscribe=function(t){var r=this.array,n=r.length,i=this.scheduler;if(i)return i.schedule(e.dispatch,0,{array:r,index:0,count:n,subscriber:t});for(var o=0;o<n&&!t.closed;o++)t.next(r[o]);t.complete()},e}(i.Observable);r.ArrayObservable=c},{"../Observable":28,"../util/isScheduler":170,"./EmptyObservable":88,"./ScalarObservable":94}],86:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Subject"),o=t("../Observable"),a=t("../Subscriber"),s=t("../Subscription"),c=function(t){function e(e,r){t.call(this),this.source=e,this.subjectFactory=r,this._refCount=0,this._isComplete=!1}return n(e,t),e.prototype._subscribe=function(t){return this.getSubject().subscribe(t)},e.prototype.getSubject=function(){var t=this._subject;return t&&!t.isStopped||(this._subject=this.subjectFactory()),this._subject},e.prototype.connect=function(){var t=this._connection;return t||(this._isComplete=!1,t=this._connection=new s.Subscription,t.add(this.source.subscribe(new h(this.getSubject(),this))),t.closed?(this._connection=null,t=s.Subscription.EMPTY):this._connection=t),t},e.prototype.refCount=function(){return this.lift(new l(this))},e}(o.Observable);r.ConnectableObservable=c;var u=c.prototype;r.connectableObservableDescriptor={operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:u._subscribe},_isComplete:{value:u._isComplete,writable:!0},getSubject:{value:u.getSubject},connect:{value:u.connect},refCount:{value:u.refCount}};var h=function(t){function e(e,r){t.call(this,e),this.connectable=r}return n(e,t),e.prototype._error=function(e){this._unsubscribe(),t.prototype._error.call(this,e)},e.prototype._complete=function(){this.connectable._isComplete=!0,this._unsubscribe(),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){var t=this.connectable;if(t){this.connectable=null;var e=t._connection;t._refCount=0,t._subject=null,t._connection=null,e&&e.unsubscribe()}},e}(i.SubjectSubscriber),l=function(){function t(t){this.connectable=t}return t.prototype.call=function(t,e){var r=this.connectable;r._refCount++;var n=new p(t,r),i=e.subscribe(n);return n.closed||(n.connection=r.connect()),i},t}(),p=function(t){function e(e,r){t.call(this,e),this.connectable=r}return n(e,t),e.prototype._unsubscribe=function(){var t=this.connectable;if(!t)return void(this.connection=null);this.connectable=null;var e=t._refCount;if(e<=0)return void(this.connection=null);if(t._refCount=e-1,e>1)return void(this.connection=null);var r=this.connection,n=t._connection;this.connection=null,!n||r&&n!==r||n.unsubscribe()},e}(a.Subscriber)},{"../Observable":28,"../Subject":33,"../Subscriber":35,"../Subscription":36}],87:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Observable"),o=t("../util/subscribeToResult"),a=t("../OuterSubscriber"),s=function(t){function e(e){t.call(this),this.observableFactory=e}return n(e,t),e.create=function(t){return new e(t)},e.prototype._subscribe=function(t){return new c(t,this.observableFactory)},e}(i.Observable);r.DeferObservable=s;var c=function(t){function e(e,r){t.call(this,e),this.factory=r,this.tryDefer()}return n(e,t),e.prototype.tryDefer=function(){try{this._callFactory()}catch(t){this._error(t)}},e.prototype._callFactory=function(){var t=this.factory();t&&this.add(o.subscribeToResult(this,t))},e}(a.OuterSubscriber)},{"../Observable":28,"../OuterSubscriber":30,"../util/subscribeToResult":172}],88:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Observable"),o=function(t){function e(e){t.call(this),this.scheduler=e}return n(e,t),e.create=function(t){return new e(t)},e.dispatch=function(t){t.subscriber.complete()},e.prototype._subscribe=function(t){var r=this.scheduler;if(r)return r.schedule(e.dispatch,0,{subscriber:t});t.complete()},e}(i.Observable);r.EmptyObservable=o},{"../Observable":28}],89:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Observable"),o=function(t){function e(e,r){t.call(this),this.error=e,this.scheduler=r}return n(e,t),e.create=function(t,r){return new e(t,r)},e.dispatch=function(t){var e=t.error;t.subscriber.error(e)},e.prototype._subscribe=function(t){var r=this.error,n=this.scheduler;if(n)return n.schedule(e.dispatch,0,{error:r,subscriber:t});t.error(r)},e}(i.Observable);r.ErrorObservable=o},{"../Observable":28}],90:[function(t,e,r){"use strict";function n(t){return!!t&&"function"==typeof t.addListener&&"function"==typeof t.removeListener}function i(t){return!!t&&"function"==typeof t.on&&"function"==typeof t.off}function o(t){return!!t&&"[object NodeList]"===d.call(t)}function a(t){return!!t&&"[object HTMLCollection]"===d.call(t)}function s(t){return!!t&&"function"==typeof t.addEventListener&&"function"==typeof t.removeEventListener}var c=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},u=t("../Observable"),h=t("../util/tryCatch"),l=t("../util/isFunction"),p=t("../util/errorObject"),f=t("../Subscription"),d=Object.prototype.toString,m=function(t){function e(e,r,n,i){t.call(this),this.sourceObj=e,this.eventName=r,this.selector=n,this.options=i}return c(e,t),e.create=function(t,r,n,i){return l.isFunction(n)&&(i=n,n=void 0),new e(t,r,i,n)},e.setupSubscription=function(t,r,c,u,h){var l;if(o(t)||a(t))for(var p=0,d=t.length;p<d;p++)e.setupSubscription(t[p],r,c,u,h);else if(s(t)){var m=t;t.addEventListener(r,c,h),l=function(){return m.removeEventListener(r,c)}}else if(i(t)){var v=t;t.on(r,c),l=function(){return v.off(r,c)}}else{if(!n(t))throw new TypeError("Invalid event target");var g=t;t.addListener(r,c),l=function(){return g.removeListener(r,c)}}u.add(new f.Subscription(l))},e.prototype._subscribe=function(t){var r=this.sourceObj,n=this.eventName,i=this.options,o=this.selector,a=o?function(){for(var e=[],r=0;r<arguments.length;r++)e[r-0]=arguments[r];var n=h.tryCatch(o).apply(void 0,e);n===p.errorObject?t.error(p.errorObject.e):t.next(n)}:function(e){return t.next(e)};e.setupSubscription(r,n,a,t,i)},e}(u.Observable);r.FromEventObservable=m},{"../Observable":28,"../Subscription":36,"../util/errorObject":162,"../util/isFunction":166,"../util/tryCatch":174}],91:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../util/isArray"),o=t("../util/isArrayLike"),a=t("../util/isPromise"),s=t("./PromiseObservable"),c=t("./IteratorObservable"),u=t("./ArrayObservable"),h=t("./ArrayLikeObservable"),l=t("../symbol/iterator"),p=t("../Observable"),f=t("../operator/observeOn"),d=t("../symbol/observable"),m=function(t){function e(e,r){t.call(this,null),this.ish=e,this.scheduler=r}return n(e,t),e.create=function(t,r){if(null!=t){if("function"==typeof t[d.observable])return t instanceof p.Observable&&!r?t:new e(t,r);if(i.isArray(t))return new u.ArrayObservable(t,r);if(a.isPromise(t))return new s.PromiseObservable(t,r);if("function"==typeof t[l.iterator]||"string"==typeof t)return new c.IteratorObservable(t,r);if(o.isArrayLike(t))return new h.ArrayLikeObservable(t,r)}throw new TypeError((null!==t&&typeof t||t)+" is not observable")},e.prototype._subscribe=function(t){var e=this.ish,r=this.scheduler;return null==r?e[d.observable]().subscribe(t):e[d.observable]().subscribe(new f.ObserveOnSubscriber(t,r,0))},e}(p.Observable);r.FromObservable=m},{"../Observable":28,"../operator/observeOn":128,"../symbol/iterator":153,"../symbol/observable":154,"../util/isArray":163,"../util/isArrayLike":164,"../util/isPromise":169,"./ArrayLikeObservable":84,"./ArrayObservable":85,"./IteratorObservable":92,"./PromiseObservable":93}],92:[function(t,e,r){"use strict";function n(t){var e=t[h.iterator];if(!e&&"string"==typeof t)return new p(t);if(!e&&void 0!==t.length)return new f(t);if(!e)throw new TypeError("object is not iterable");return t[h.iterator]()}function i(t){var e=+t.length;return isNaN(e)?0:0!==e&&o(e)?(e=a(e)*Math.floor(Math.abs(e)),e<=0?0:e>d?d:e):e}function o(t){return"number"==typeof t&&c.root.isFinite(t)}function a(t){var e=+t;return 0===e?e:isNaN(e)?e:e<0?-1:1}var s=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},c=t("../util/root"),u=t("../Observable"),h=t("../symbol/iterator"),l=function(t){function e(e,r){if(t.call(this),this.scheduler=r,null==e)throw new Error("iterator cannot be null.");this.iterator=n(e)}return s(e,t),e.create=function(t,r){return new e(t,r)},e.dispatch=function(t){var e=t.index,r=t.hasError,n=t.iterator,i=t.subscriber;if(r)return void i.error(t.error);var o=n.next();return o.done?void i.complete():(i.next(o.value),t.index=e+1,i.closed?void("function"==typeof n.return&&n.return()):void this.schedule(t))},e.prototype._subscribe=function(t){var r=this,n=r.iterator,i=r.scheduler;if(i)return i.schedule(e.dispatch,0,{index:0,iterator:n,subscriber:t});for(;;){var o=n.next();if(o.done){t.complete();break}if(t.next(o.value),t.closed){"function"==typeof n.return&&n.return();break}}},e}(u.Observable);r.IteratorObservable=l;var p=function(){function t(t,e,r){void 0===e&&(e=0),void 0===r&&(r=t.length),this.str=t,this.idx=e,this.len=r}return t.prototype[h.iterator]=function(){return this},t.prototype.next=function(){return this.idx<this.len?{done:!1,value:this.str.charAt(this.idx++)}:{done:!0,value:void 0}},t}(),f=function(){function t(t,e,r){void 0===e&&(e=0),void 0===r&&(r=i(t)),this.arr=t,this.idx=e,this.len=r}return t.prototype[h.iterator]=function(){return this},t.prototype.next=function(){return this.idx<this.len?{done:!1,value:this.arr[this.idx++]}:{done:!0,value:void 0}},t}(),d=Math.pow(2,53)-1},{"../Observable":28,"../symbol/iterator":153,"../util/root":171}],93:[function(t,e,r){"use strict";function n(t){var e=t.value,r=t.subscriber;r.closed||(r.next(e),r.complete())}function i(t){var e=t.err,r=t.subscriber;r.closed||r.error(e)}var o=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},a=t("../util/root"),s=t("../Observable"),c=function(t){function e(e,r){t.call(this),this.promise=e,this.scheduler=r}return o(e,t),e.create=function(t,r){return new e(t,r)},e.prototype._subscribe=function(t){var e=this,r=this.promise,o=this.scheduler;if(null==o)this._isScalar?t.closed||(t.next(this.value),t.complete()):r.then(function(r){e.value=r,e._isScalar=!0,t.closed||(t.next(r),t.complete())},function(e){t.closed||t.error(e)}).then(null,function(t){a.root.setTimeout(function(){throw t})});else if(this._isScalar){if(!t.closed)return o.schedule(n,0,{value:this.value,subscriber:t})}else r.then(function(r){e.value=r,e._isScalar=!0,t.closed||t.add(o.schedule(n,0,{value:r,subscriber:t}))},function(e){t.closed||t.add(o.schedule(i,0,{err:e,subscriber:t}))}).then(null,function(t){a.root.setTimeout(function(){throw t})})},e}(s.Observable);r.PromiseObservable=c},{"../Observable":28,"../util/root":171}],94:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Observable"),o=function(t){function e(e,r){t.call(this),this.value=e,this.scheduler=r,this._isScalar=!0,r&&(this._isScalar=!1)}return n(e,t),e.create=function(t,r){return new e(t,r)},e.dispatch=function(t){var e=t.done,r=t.value,n=t.subscriber;if(e)return void n.complete();n.next(r),n.closed||(t.done=!0,this.schedule(t))},e.prototype._subscribe=function(t){var r=this.value,n=this.scheduler;if(n)return n.schedule(e.dispatch,0,{done:!1,value:r,subscriber:t});t.next(r),t.closed||t.complete()},e}(i.Observable);r.ScalarObservable=o},{"../Observable":28}],95:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../util/isNumeric"),o=t("../Observable"),a=t("../scheduler/async"),s=t("../util/isScheduler"),c=t("../util/isDate"),u=function(t){function e(e,r,n){void 0===e&&(e=0),t.call(this),this.period=-1,this.dueTime=0,i.isNumeric(r)?this.period=Number(r)<1&&1||Number(r):s.isScheduler(r)&&(n=r),s.isScheduler(n)||(n=a.async),this.scheduler=n,this.dueTime=c.isDate(e)?+e-this.scheduler.now():e}return n(e,t),e.create=function(t,r,n){return void 0===t&&(t=0),new e(t,r,n)},e.dispatch=function(t){var e=t.index,r=t.period,n=t.subscriber,i=this;if(n.next(e),!n.closed){if(-1===r)return n.complete();t.index=e+1,i.schedule(t,r)}},e.prototype._subscribe=function(t){var r=this,n=r.period,i=r.dueTime;return r.scheduler.schedule(e.dispatch,i,{index:0,period:n,subscriber:t})},e}(o.Observable);r.TimerObservable=u},{"../Observable":28,"../scheduler/async":151,"../util/isDate":165,"../util/isNumeric":167,"../util/isScheduler":170}],96:[function(t,e,r){"use strict";function n(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var r=null,n=null;return i.isScheduler(t[t.length-1])&&(n=t.pop()),"function"==typeof t[t.length-1]&&(r=t.pop()),1===t.length&&o.isArray(t[0])&&(t=t[0]),new a.ArrayObservable(t,n).lift(new s.CombineLatestOperator(r))}var i=t("../util/isScheduler"),o=t("../util/isArray"),a=t("./ArrayObservable"),s=t("../operator/combineLatest");r.combineLatest=n},{"../operator/combineLatest":111,"../util/isArray":163,"../util/isScheduler":170,"./ArrayObservable":85}],97:[function(t,e,r){"use strict";var n=t("./DeferObservable");r.defer=n.DeferObservable.create},{"./DeferObservable":87}],98:[function(t,e,r){"use strict";var n=t("./EmptyObservable");r.empty=n.EmptyObservable.create},{"./EmptyObservable":88}],99:[function(t,e,r){"use strict";var n=t("./FromObservable");r.from=n.FromObservable.create},{"./FromObservable":91}],100:[function(t,e,r){"use strict";var n=t("./FromEventObservable");r.fromEvent=n.FromEventObservable.create},{"./FromEventObservable":90}],101:[function(t,e,r){"use strict";var n=t("./PromiseObservable");r.fromPromise=n.PromiseObservable.create},{"./PromiseObservable":93}],102:[function(t,e,r){"use strict";var n=t("../operator/merge");r.merge=n.mergeStatic},{"../operator/merge":124}],103:[function(t,e,r){"use strict";var n=t("./ArrayObservable");r.of=n.ArrayObservable.of},{"./ArrayObservable":85}],104:[function(t,e,r){"use strict";var n=t("./ErrorObservable");r._throw=n.ErrorObservable.create},{"./ErrorObservable":89}],105:[function(t,e,r){"use strict";var n=t("./TimerObservable");r.timer=n.TimerObservable.create},{"./TimerObservable":95}],106:[function(t,e,r){"use strict";var n=t("../operator/zip");r.zip=n.zipStatic},{"../operator/zip":145}],107:[function(t,e,r){"use strict";function n(t){return this.lift(new s(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult");r.buffer=n;var s=function(){function t(t){this.closingNotifier=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.closingNotifier))},t}(),c=function(t){function e(e,r){t.call(this,e),this.buffer=[],this.add(a.subscribeToResult(this,r))}return i(e,t),e.prototype._next=function(t){this.buffer.push(t)},e.prototype.notifyNext=function(t,e,r,n,i){var o=this.buffer;this.buffer=[],this.destination.next(o)},e}(o.OuterSubscriber)},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],108:[function(t,e,r){"use strict";function n(t,e){return void 0===e&&(e=null),this.lift(new a(t,e))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber");r.bufferCount=n;var a=function(){function t(t,e){this.bufferSize=t,this.startBufferEvery=e,this.subscriberClass=e&&t!==e?c:s}return t.prototype.call=function(t,e){return e.subscribe(new this.subscriberClass(t,this.bufferSize,this.startBufferEvery))},t}(),s=function(t){function e(e,r){t.call(this,e),this.bufferSize=r,this.buffer=[]}return i(e,t),e.prototype._next=function(t){var e=this.buffer;e.push(t),e.length==this.bufferSize&&(this.destination.next(e),this.buffer=[])},e.prototype._complete=function(){var e=this.buffer;e.length>0&&this.destination.next(e),t.prototype._complete.call(this)},e}(o.Subscriber),c=function(t){function e(e,r,n){t.call(this,e),this.bufferSize=r,this.startBufferEvery=n,this.buffers=[],this.count=0}return i(e,t),e.prototype._next=function(t){var e=this,r=e.bufferSize,n=e.startBufferEvery,i=e.buffers,o=e.count;this.count++,o%n==0&&i.push([]);for(var a=i.length;a--;){var s=i[a];s.push(t),s.length===r&&(i.splice(a,1),this.destination.next(s))}},e.prototype._complete=function(){for(var e=this,r=e.buffers,n=e.destination;r.length>0;){var i=r.shift();i.length>0&&n.next(i)}t.prototype._complete.call(this)},e}(o.Subscriber)},{"../Subscriber":35}],109:[function(t,e,r){"use strict";function n(t){return this.lift(new h(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscription"),a=t("../util/tryCatch"),s=t("../util/errorObject"),c=t("../OuterSubscriber"),u=t("../util/subscribeToResult");r.bufferWhen=n;var h=function(){function t(t){this.closingSelector=t}return t.prototype.call=function(t,e){return e.subscribe(new l(t,this.closingSelector))},t}(),l=function(t){function e(e,r){t.call(this,e),this.closingSelector=r,this.subscribing=!1,this.openBuffer()}return i(e,t),e.prototype._next=function(t){this.buffer.push(t)},e.prototype._complete=function(){var e=this.buffer;e&&this.destination.next(e),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.buffer=null,this.subscribing=!1},e.prototype.notifyNext=function(t,e,r,n,i){this.openBuffer()},e.prototype.notifyComplete=function(){this.subscribing?this.complete():this.openBuffer()},e.prototype.openBuffer=function(){var t=this.closingSubscription;t&&(this.remove(t),t.unsubscribe());var e=this.buffer;this.buffer&&this.destination.next(e),this.buffer=[];var r=a.tryCatch(this.closingSelector)();r===s.errorObject?this.error(s.errorObject.e):(t=new o.Subscription,this.closingSubscription=t,this.add(t),this.subscribing=!0,t.add(u.subscribeToResult(this,r)),this.subscribing=!1)},e}(c.OuterSubscriber)},{"../OuterSubscriber":30,"../Subscription":36,"../util/errorObject":162,"../util/subscribeToResult":172,"../util/tryCatch":174}],110:[function(t,e,r){"use strict";function n(t){var e=new s(t),r=this.lift(e);return e.caught=r}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult");r._catch=n;var s=function(){function t(t){this.selector=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.selector,this.caught))},t}(),c=function(t){function e(e,r,n){t.call(this,e),this.selector=r,this.caught=n}return i(e,t),e.prototype.error=function(e){if(!this.isStopped){var r=void 0;try{r=this.selector(e,this.caught)}catch(e){return void t.prototype.error.call(this,e)}this._unsubscribeAndRecycle(),this.add(a.subscribeToResult(this,r))}},e}(o.OuterSubscriber)},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],111:[function(t,e,r){"use strict";function n(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var r=null;return"function"==typeof t[t.length-1]&&(r=t.pop()),1===t.length&&a.isArray(t[0])&&(t=t[0].slice()),t.unshift(this),this.lift.call(new o.ArrayObservable(t),new h(r))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../observable/ArrayObservable"),a=t("../util/isArray"),s=t("../OuterSubscriber"),c=t("../util/subscribeToResult"),u={};r.combineLatest=n;var h=function(){function t(t){this.project=t}return t.prototype.call=function(t,e){return e.subscribe(new l(t,this.project))},t}();r.CombineLatestOperator=h;var l=function(t){function e(e,r){t.call(this,e),this.project=r,this.active=0,this.values=[],this.observables=[]}return i(e,t),e.prototype._next=function(t){this.values.push(u),this.observables.push(t)},e.prototype._complete=function(){var t=this.observables,e=t.length;if(0===e)this.destination.complete();else{this.active=e,this.toRespond=e;for(var r=0;r<e;r++){var n=t[r];this.add(c.subscribeToResult(this,n,n,r))}}},e.prototype.notifyComplete=function(t){0==(this.active-=1)&&this.destination.complete()},e.prototype.notifyNext=function(t,e,r,n,i){var o=this.values,a=o[r],s=this.toRespond?a===u?--this.toRespond:this.toRespond:0;o[r]=e,0===s&&(this.project?this._tryProject(o):this.destination.next(o.slice()))},e.prototype._tryProject=function(t){var e;try{e=this.project.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(s.OuterSubscriber);r.CombineLatestSubscriber=l},{"../OuterSubscriber":30,"../observable/ArrayObservable":85,"../util/isArray":163,"../util/subscribeToResult":172}],112:[function(t,e,r){"use strict";function n(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];return this.lift.call(i.apply(void 0,[this].concat(t)))}function i(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var r=null,n=t;return a.isScheduler(n[t.length-1])&&(r=n.pop()),null===r&&1===t.length&&t[0]instanceof o.Observable?t[0]:new s.ArrayObservable(t,r).lift(new c.MergeAllOperator(1))}var o=t("../Observable"),a=t("../util/isScheduler"),s=t("../observable/ArrayObservable"),c=t("./mergeAll");r.concat=n,r.concatStatic=i},{"../Observable":28,"../observable/ArrayObservable":85,"../util/isScheduler":170,"./mergeAll":125}],113:[function(t,e,r){"use strict";function n(t,e){return void 0===e&&(e=s.async),this.lift(new c(t,e))}function i(t){t.debouncedNext()}var o=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},a=t("../Subscriber"),s=t("../scheduler/async");r.debounceTime=n;var c=function(){function t(t,e){this.dueTime=t,this.scheduler=e}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.dueTime,this.scheduler))},t}(),u=function(t){function e(e,r,n){t.call(this,e),this.dueTime=r,this.scheduler=n,this.debouncedSubscription=null,this.lastValue=null,this.hasValue=!1}return o(e,t),e.prototype._next=function(t){
+this.clearDebounce(),this.lastValue=t,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(i,this.dueTime,this))},e.prototype._complete=function(){this.debouncedNext(),this.destination.complete()},e.prototype.debouncedNext=function(){this.clearDebounce(),this.hasValue&&(this.destination.next(this.lastValue),this.lastValue=null,this.hasValue=!1)},e.prototype.clearDebounce=function(){var t=this.debouncedSubscription;null!==t&&(this.remove(t),t.unsubscribe(),this.debouncedSubscription=null)},e}(a.Subscriber)},{"../Subscriber":35,"../scheduler/async":151}],114:[function(t,e,r){"use strict";function n(t,e){void 0===e&&(e=o.async);var r=a.isDate(t),n=r?+t-e.now():Math.abs(t);return this.lift(new u(n,e))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../scheduler/async"),a=t("../util/isDate"),s=t("../Subscriber"),c=t("../Notification");r.delay=n;var u=function(){function t(t,e){this.delay=t,this.scheduler=e}return t.prototype.call=function(t,e){return e.subscribe(new h(t,this.delay,this.scheduler))},t}(),h=function(t){function e(e,r,n){t.call(this,e),this.delay=r,this.scheduler=n,this.queue=[],this.active=!1,this.errored=!1}return i(e,t),e.dispatch=function(t){for(var e=t.source,r=e.queue,n=t.scheduler,i=t.destination;r.length>0&&r[0].time-n.now()<=0;)r.shift().notification.observe(i);if(r.length>0){var o=Math.max(0,r[0].time-n.now());this.schedule(t,o)}else e.active=!1},e.prototype._schedule=function(t){this.active=!0,this.add(t.schedule(e.dispatch,this.delay,{source:this,destination:this.destination,scheduler:t}))},e.prototype.scheduleNotification=function(t){if(!0!==this.errored){var e=this.scheduler,r=new l(e.now()+this.delay,t);this.queue.push(r),!1===this.active&&this._schedule(e)}},e.prototype._next=function(t){this.scheduleNotification(c.Notification.createNext(t))},e.prototype._error=function(t){this.errored=!0,this.queue=[],this.destination.error(t)},e.prototype._complete=function(){this.scheduleNotification(c.Notification.createComplete())},e}(s.Subscriber),l=function(){function t(t,e){this.time=t,this.notification=e}return t}()},{"../Notification":27,"../Subscriber":35,"../scheduler/async":151,"../util/isDate":165}],115:[function(t,e,r){"use strict";function n(t,e){return this.lift(new c(t,e))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult"),s=t("../util/Set");r.distinct=n;var c=function(){function t(t,e){this.keySelector=t,this.flushes=e}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.keySelector,this.flushes))},t}(),u=function(t){function e(e,r,n){t.call(this,e),this.keySelector=r,this.values=new s.Set,n&&this.add(a.subscribeToResult(this,n))}return i(e,t),e.prototype.notifyNext=function(t,e,r,n,i){this.values.clear()},e.prototype.notifyError=function(t,e){this._error(t)},e.prototype._next=function(t){this.keySelector?this._useKeySelector(t):this._finalizeNext(t,t)},e.prototype._useKeySelector=function(t){var e,r=this.destination;try{e=this.keySelector(t)}catch(t){return void r.error(t)}this._finalizeNext(e,t)},e.prototype._finalizeNext=function(t,e){var r=this.values;r.has(t)||(r.add(t),this.destination.next(e))},e}(o.OuterSubscriber);r.DistinctSubscriber=u},{"../OuterSubscriber":30,"../util/Set":160,"../util/subscribeToResult":172}],116:[function(t,e,r){"use strict";function n(t,e){return this.lift(new c(t,e))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber"),a=t("../util/tryCatch"),s=t("../util/errorObject");r.distinctUntilChanged=n;var c=function(){function t(t,e){this.compare=t,this.keySelector=e}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.compare,this.keySelector))},t}(),u=function(t){function e(e,r,n){t.call(this,e),this.keySelector=n,this.hasKey=!1,"function"==typeof r&&(this.compare=r)}return i(e,t),e.prototype.compare=function(t,e){return t===e},e.prototype._next=function(t){var e=this.keySelector,r=t;if(e&&(r=a.tryCatch(this.keySelector)(t))===s.errorObject)return this.destination.error(s.errorObject.e);var n=!1;if(this.hasKey){if((n=a.tryCatch(this.compare)(this.key,r))===s.errorObject)return this.destination.error(s.errorObject.e)}else this.hasKey=!0;!1===Boolean(n)&&(this.key=r,this.destination.next(t))},e}(o.Subscriber)},{"../Subscriber":35,"../util/errorObject":162,"../util/tryCatch":174}],117:[function(t,e,r){"use strict";function n(t,e,r){return this.lift(new a(t,e,r))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber");r._do=n;var a=function(){function t(t,e,r){this.nextOrObserver=t,this.error=e,this.complete=r}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.nextOrObserver,this.error,this.complete))},t}(),s=function(t){function e(e,r,n,i){t.call(this,e);var a=new o.Subscriber(r,n,i);a.syncErrorThrowable=!0,this.add(a),this.safeSubscriber=a}return i(e,t),e.prototype._next=function(t){var e=this.safeSubscriber;e.next(t),e.syncErrorThrown?this.destination.error(e.syncErrorValue):this.destination.next(t)},e.prototype._error=function(t){var e=this.safeSubscriber;e.error(t),e.syncErrorThrown?this.destination.error(e.syncErrorValue):this.destination.error(t)},e.prototype._complete=function(){var t=this.safeSubscriber;t.complete(),t.syncErrorThrown?this.destination.error(t.syncErrorValue):this.destination.complete()},e}(o.Subscriber)},{"../Subscriber":35}],118:[function(t,e,r){"use strict";function n(t,e,r){return void 0===e&&(e=Number.POSITIVE_INFINITY),void 0===r&&(r=void 0),e=(e||0)<1?Number.POSITIVE_INFINITY:e,this.lift(new u(t,e,r))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../util/tryCatch"),a=t("../util/errorObject"),s=t("../OuterSubscriber"),c=t("../util/subscribeToResult");r.expand=n;var u=function(){function t(t,e,r){this.project=t,this.concurrent=e,this.scheduler=r}return t.prototype.call=function(t,e){return e.subscribe(new h(t,this.project,this.concurrent,this.scheduler))},t}();r.ExpandOperator=u;var h=function(t){function e(e,r,n,i){t.call(this,e),this.project=r,this.concurrent=n,this.scheduler=i,this.index=0,this.active=0,this.hasCompleted=!1,n<Number.POSITIVE_INFINITY&&(this.buffer=[])}return i(e,t),e.dispatch=function(t){var e=t.subscriber,r=t.result,n=t.value,i=t.index;e.subscribeToProjection(r,n,i)},e.prototype._next=function(t){var r=this.destination;if(r.closed)return void this._complete();var n=this.index++;if(this.active<this.concurrent){r.next(t);var i=o.tryCatch(this.project)(t,n);if(i===a.errorObject)r.error(a.errorObject.e);else if(this.scheduler){var s={subscriber:this,result:i,value:t,index:n};this.add(this.scheduler.schedule(e.dispatch,0,s))}else this.subscribeToProjection(i,t,n)}else this.buffer.push(t)},e.prototype.subscribeToProjection=function(t,e,r){this.active++,this.add(c.subscribeToResult(this,t,e,r))},e.prototype._complete=function(){this.hasCompleted=!0,this.hasCompleted&&0===this.active&&this.destination.complete()},e.prototype.notifyNext=function(t,e,r,n,i){this._next(e)},e.prototype.notifyComplete=function(t){var e=this.buffer;this.remove(t),this.active--,e&&e.length>0&&this._next(e.shift()),this.hasCompleted&&0===this.active&&this.destination.complete()},e}(s.OuterSubscriber);r.ExpandSubscriber=h},{"../OuterSubscriber":30,"../util/errorObject":162,"../util/subscribeToResult":172,"../util/tryCatch":174}],119:[function(t,e,r){"use strict";function n(t,e){return this.lift(new a(t,e))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber");r.filter=n;var a=function(){function t(t,e){this.predicate=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.predicate,this.thisArg))},t}(),s=function(t){function e(e,r,n){t.call(this,e),this.predicate=r,this.thisArg=n,this.count=0,this.predicate=r}return i(e,t),e.prototype._next=function(t){var e;try{e=this.predicate.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}e&&this.destination.next(t)},e}(o.Subscriber)},{"../Subscriber":35}],120:[function(t,e,r){"use strict";function n(t){return this.lift(new s(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber"),a=t("../Subscription");r._finally=n;var s=function(){function t(t){this.callback=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.callback))},t}(),c=function(t){function e(e,r){t.call(this,e),this.add(new a.Subscription(r))}return i(e,t),e}(o.Subscriber)},{"../Subscriber":35,"../Subscription":36}],121:[function(t,e,r){"use strict";function n(t,e,r){return this.lift(new s(t,e,r,this))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber"),a=t("../util/EmptyError");r.first=n;var s=function(){function t(t,e,r,n){this.predicate=t,this.resultSelector=e,this.defaultValue=r,this.source=n}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.predicate,this.resultSelector,this.defaultValue,this.source))},t}(),c=function(t){function e(e,r,n,i,o){t.call(this,e),this.predicate=r,this.resultSelector=n,this.defaultValue=i,this.source=o,this.index=0,this.hasCompleted=!1,this._emitted=!1}return i(e,t),e.prototype._next=function(t){var e=this.index++;this.predicate?this._tryPredicate(t,e):this._emit(t,e)},e.prototype._tryPredicate=function(t,e){var r;try{r=this.predicate(t,e,this.source)}catch(t){return void this.destination.error(t)}r&&this._emit(t,e)},e.prototype._emit=function(t,e){if(this.resultSelector)return void this._tryResultSelector(t,e);this._emitFinal(t)},e.prototype._tryResultSelector=function(t,e){var r;try{r=this.resultSelector(t,e)}catch(t){return void this.destination.error(t)}this._emitFinal(r)},e.prototype._emitFinal=function(t){var e=this.destination;this._emitted||(this._emitted=!0,e.next(t),e.complete(),this.hasCompleted=!0)},e.prototype._complete=function(){var t=this.destination;this.hasCompleted||void 0===this.defaultValue?this.hasCompleted||t.error(new a.EmptyError):(t.next(this.defaultValue),t.complete())},e}(o.Subscriber)},{"../Subscriber":35,"../util/EmptyError":158}],122:[function(t,e,r){"use strict";function n(t,e,r){return this.lift(new s(t,e,r,this))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber"),a=t("../util/EmptyError");r.last=n;var s=function(){function t(t,e,r,n){this.predicate=t,this.resultSelector=e,this.defaultValue=r,this.source=n}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.predicate,this.resultSelector,this.defaultValue,this.source))},t}(),c=function(t){function e(e,r,n,i,o){t.call(this,e),this.predicate=r,this.resultSelector=n,this.defaultValue=i,this.source=o,this.hasValue=!1,this.index=0,void 0!==i&&(this.lastValue=i,this.hasValue=!0)}return i(e,t),e.prototype._next=function(t){var e=this.index++;if(this.predicate)this._tryPredicate(t,e);else{if(this.resultSelector)return void this._tryResultSelector(t,e);this.lastValue=t,this.hasValue=!0}},e.prototype._tryPredicate=function(t,e){var r;try{r=this.predicate(t,e,this.source)}catch(t){return void this.destination.error(t)}if(r){if(this.resultSelector)return void this._tryResultSelector(t,e);this.lastValue=t,this.hasValue=!0}},e.prototype._tryResultSelector=function(t,e){var r;try{r=this.resultSelector(t,e)}catch(t){return void this.destination.error(t)}this.lastValue=r,this.hasValue=!0},e.prototype._complete=function(){var t=this.destination;this.hasValue?(t.next(this.lastValue),t.complete()):t.error(new a.EmptyError)},e}(o.Subscriber)},{"../Subscriber":35,"../util/EmptyError":158}],123:[function(t,e,r){"use strict";function n(t,e){if("function"!=typeof t)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return this.lift(new a(t,e))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber");r.map=n;var a=function(){function t(t,e){this.project=t,this.thisArg=e}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.project,this.thisArg))},t}();r.MapOperator=a;var s=function(t){function e(e,r,n){t.call(this,e),this.project=r,this.count=0,this.thisArg=n||this}return i(e,t),e.prototype._next=function(t){var e;try{e=this.project.call(this.thisArg,t,this.count++)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(o.Subscriber)},{"../Subscriber":35}],124:[function(t,e,r){"use strict";function n(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];return this.lift.call(i.apply(void 0,[this].concat(t)))}function i(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var r=Number.POSITIVE_INFINITY,n=null,i=t[t.length-1];return c.isScheduler(i)?(n=t.pop(),t.length>1&&"number"==typeof t[t.length-1]&&(r=t.pop())):"number"==typeof i&&(r=t.pop()),null===n&&1===t.length&&t[0]instanceof o.Observable?t[0]:new a.ArrayObservable(t,n).lift(new s.MergeAllOperator(r))}var o=t("../Observable"),a=t("../observable/ArrayObservable"),s=t("./mergeAll"),c=t("../util/isScheduler");r.merge=n,r.mergeStatic=i},{"../Observable":28,"../observable/ArrayObservable":85,"../util/isScheduler":170,"./mergeAll":125}],125:[function(t,e,r){"use strict";function n(t){return void 0===t&&(t=Number.POSITIVE_INFINITY),this.lift(new s(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult");r.mergeAll=n;var s=function(){function t(t){this.concurrent=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.concurrent))},t}();r.MergeAllOperator=s;var c=function(t){function e(e,r){t.call(this,e),this.concurrent=r,this.hasCompleted=!1,this.buffer=[],this.active=0}return i(e,t),e.prototype._next=function(t){this.active<this.concurrent?(this.active++,this.add(a.subscribeToResult(this,t))):this.buffer.push(t)},e.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete()},e.prototype.notifyComplete=function(t){var e=this.buffer;this.remove(t),this.active--,e.length>0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(o.OuterSubscriber);r.MergeAllSubscriber=c},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],126:[function(t,e,r){"use strict";function n(t,e,r){return void 0===r&&(r=Number.POSITIVE_INFINITY),"number"==typeof e&&(r=e,e=null),this.lift(new s(t,e,r))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../util/subscribeToResult"),a=t("../OuterSubscriber");r.mergeMap=n;var s=function(){function t(t,e,r){void 0===r&&(r=Number.POSITIVE_INFINITY),this.project=t,this.resultSelector=e,this.concurrent=r}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.project,this.resultSelector,this.concurrent))},t}();r.MergeMapOperator=s;var c=function(t){function e(e,r,n,i){void 0===i&&(i=Number.POSITIVE_INFINITY),t.call(this,e),this.project=r,this.resultSelector=n,this.concurrent=i,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}return i(e,t),e.prototype._next=function(t){this.active<this.concurrent?this._tryNext(t):this.buffer.push(t)},e.prototype._tryNext=function(t){var e,r=this.index++;try{e=this.project(t,r)}catch(t){return void this.destination.error(t)}this.active++,this._innerSub(e,t,r)},e.prototype._innerSub=function(t,e,r){this.add(o.subscribeToResult(this,t,e,r))},e.prototype._complete=function(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete()},e.prototype.notifyNext=function(t,e,r,n,i){this.resultSelector?this._notifyResultSelector(t,e,r,n):this.destination.next(e)},e.prototype._notifyResultSelector=function(t,e,r,n){var i;try{i=this.resultSelector(t,e,r,n)}catch(t){return void this.destination.error(t)}this.destination.next(i)},e.prototype.notifyComplete=function(t){var e=this.buffer;this.remove(t),this.active--,e.length>0?this._next(e.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(a.OuterSubscriber);r.MergeMapSubscriber=c},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],127:[function(t,e,r){"use strict";function n(t,e){var r;if(r="function"==typeof t?t:function(){return t},"function"==typeof e)return this.lift(new o(r,e));var n=Object.create(this,i.connectableObservableDescriptor);return n.source=this,n.subjectFactory=r,n}var i=t("../observable/ConnectableObservable");r.multicast=n;var o=function(){function t(t,e){this.subjectFactory=t,this.selector=e}return t.prototype.call=function(t,e){var r=this.selector,n=this.subjectFactory(),i=r(n).subscribe(t);return i.add(e.subscribe(n)),i},t}();r.MulticastOperator=o},{"../observable/ConnectableObservable":86}],128:[function(t,e,r){"use strict";function n(t,e){return void 0===e&&(e=0),this.lift(new s(t,e))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber"),a=t("../Notification");r.observeOn=n;var s=function(){function t(t,e){void 0===e&&(e=0),this.scheduler=t,this.delay=e}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.scheduler,this.delay))},t}();r.ObserveOnOperator=s;var c=function(t){function e(e,r,n){void 0===n&&(n=0),t.call(this,e),this.scheduler=r,this.delay=n}return i(e,t),e.dispatch=function(t){var e=t.notification,r=t.destination;e.observe(r),this.unsubscribe()},e.prototype.scheduleMessage=function(t){this.add(this.scheduler.schedule(e.dispatch,this.delay,new u(t,this.destination)))},e.prototype._next=function(t){this.scheduleMessage(a.Notification.createNext(t))},e.prototype._error=function(t){this.scheduleMessage(a.Notification.createError(t))},e.prototype._complete=function(){this.scheduleMessage(a.Notification.createComplete())},e}(o.Subscriber);r.ObserveOnSubscriber=c;var u=function(){function t(t,e){this.notification=t,this.destination=e}return t}();r.ObserveOnMessage=u},{"../Notification":27,"../Subscriber":35}],129:[function(t,e,r){"use strict";function n(){return this.lift(new a)}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber");r.pairwise=n;var a=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new s(t))},t}(),s=function(t){function e(e){t.call(this,e),this.hasPrev=!1}return i(e,t),e.prototype._next=function(t){this.hasPrev?this.destination.next([this.prev,t]):this.hasPrev=!0,this.prev=t},e}(o.Subscriber)},{"../Subscriber":35}],130:[function(t,e,r){"use strict";function n(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var r=t.length;if(0===r)throw new Error("list of properties cannot be empty.");return o.map.call(this,i(t,r))}function i(t,e){return function(r){for(var n=r,i=0;i<e;i++){var o=n[t[i]];if(void 0===o)return;n=o}return n}}var o=t("./map");r.pluck=n},{"./map":123}],131:[function(t,e,r){"use strict";function n(t){return t?o.multicast.call(this,function(){return new i.Subject},t):o.multicast.call(this,new i.Subject)}var i=t("../Subject"),o=t("./multicast");r.publish=n},{"../Subject":33,"./multicast":127}],132:[function(t,e,r){"use strict";function n(t,e,r){return void 0===t&&(t=Number.POSITIVE_INFINITY),void 0===e&&(e=Number.POSITIVE_INFINITY),o.multicast.call(this,new i.ReplaySubject(t,e,r))}var i=t("../ReplaySubject"),o=t("./multicast");r.publishReplay=n},{"../ReplaySubject":31,"./multicast":127}],133:[function(t,e,r){"use strict";function n(t,e){var r=!1;return arguments.length>=2&&(r=!0),this.lift(new a(t,e,r))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber");r.scan=n;var a=function(){function t(t,e,r){void 0===r&&(r=!1),this.accumulator=t,this.seed=e,this.hasSeed=r}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.accumulator,this.seed,this.hasSeed))},t}(),s=function(t){function e(e,r,n,i){t.call(this,e),this.accumulator=r,this._seed=n,this.hasSeed=i,this.index=0}return i(e,t),Object.defineProperty(e.prototype,"seed",{get:function(){return this._seed},set:function(t){this.hasSeed=!0,this._seed=t},enumerable:!0,configurable:!0}),e.prototype._next=function(t){if(this.hasSeed)return this._tryNext(t);this.seed=t,this.destination.next(t)},e.prototype._tryNext=function(t){var e,r=this.index++;try{e=this.accumulator(this.seed,t,r)}catch(t){this.destination.error(t)}this.seed=e,this.destination.next(e)},e}(o.Subscriber)},{"../Subscriber":35}],134:[function(t,e,r){"use strict";function n(){return new a.Subject}function i(){return o.multicast.call(this,n).refCount()}var o=t("./multicast"),a=t("../Subject");r.share=i},{"../Subject":33,"./multicast":127}],135:[function(t,e,r){"use strict";function n(t){return this.lift(new a(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber");r.skip=n;var a=function(){function t(t){this.total=t}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.total))},t}(),s=function(t){function e(e,r){t.call(this,e),this.total=r,this.count=0}return i(e,t),e.prototype._next=function(t){++this.count>this.total&&this.destination.next(t)},e}(o.Subscriber)},{"../Subscriber":35}],136:[function(t,e,r){"use strict";function n(t){return this.lift(new s(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult");r.skipUntil=n;var s=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.notifier))},t}(),c=function(t){function e(e,r){t.call(this,e),this.hasValue=!1,this.isInnerStopped=!1,this.add(a.subscribeToResult(this,r))}return i(e,t),e.prototype._next=function(e){this.hasValue&&t.prototype._next.call(this,e)},e.prototype._complete=function(){this.isInnerStopped?t.prototype._complete.call(this):this.unsubscribe()},e.prototype.notifyNext=function(t,e,r,n,i){this.hasValue=!0},e.prototype.notifyComplete=function(){this.isInnerStopped=!0,this.isStopped&&t.prototype._complete.call(this)},e}(o.OuterSubscriber)},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],137:[function(t,e,r){"use strict";function n(t){return this.lift(new a(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber");r.skipWhile=n;var a=function(){function t(t){this.predicate=t}return t.prototype.call=function(t,e){return e.subscribe(new s(t,this.predicate))},t}(),s=function(t){function e(e,r){t.call(this,e),this.predicate=r,this.skipping=!0,this.index=0}return i(e,t),e.prototype._next=function(t){var e=this.destination;this.skipping&&this.tryCallPredicate(t),this.skipping||e.next(t)},e.prototype.tryCallPredicate=function(t){try{var e=this.predicate(t,this.index++);this.skipping=Boolean(e)}catch(t){this.destination.error(t)}},e}(o.Subscriber)},{"../Subscriber":35}],138:[function(t,e,r){"use strict";function n(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var r=t[t.length-1];c.isScheduler(r)?t.pop():r=null;var n=t.length;return 1===n?s.concatStatic(new o.ScalarObservable(t[0],r),this):n>1?s.concatStatic(new i.ArrayObservable(t,r),this):s.concatStatic(new a.EmptyObservable(r),this)}var i=t("../observable/ArrayObservable"),o=t("../observable/ScalarObservable"),a=t("../observable/EmptyObservable"),s=t("./concat"),c=t("../util/isScheduler");r.startWith=n},{"../observable/ArrayObservable":85,"../observable/EmptyObservable":88,"../observable/ScalarObservable":94,"../util/isScheduler":170,"./concat":112}],139:[function(t,e,r){"use strict";function n(t,e){return this.lift(new s(t,e))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult");r.switchMap=n;var s=function(){function t(t,e){this.project=t,this.resultSelector=e}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.project,this.resultSelector))},t}(),c=function(t){function e(e,r,n){t.call(this,e),this.project=r,this.resultSelector=n,this.index=0}return i(e,t),e.prototype._next=function(t){var e,r=this.index++;try{e=this.project(t,r)}catch(t){return void this.destination.error(t)}this._innerSub(e,t,r)},e.prototype._innerSub=function(t,e,r){var n=this.innerSubscription;n&&n.unsubscribe(),this.add(this.innerSubscription=a.subscribeToResult(this,t,e,r))},e.prototype._complete=function(){var e=this.innerSubscription;e&&!e.closed||t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.innerSubscription=null},e.prototype.notifyComplete=function(e){this.remove(e),this.innerSubscription=null,this.isStopped&&t.prototype._complete.call(this)},e.prototype.notifyNext=function(t,e,r,n,i){this.resultSelector?this._tryNotifyNext(t,e,r,n):this.destination.next(e)},e.prototype._tryNotifyNext=function(t,e,r,n){var i;try{i=this.resultSelector(t,e,r,n)}catch(t){return void this.destination.error(t)}this.destination.next(i)},e}(o.OuterSubscriber)},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],140:[function(t,e,r){"use strict";function n(t){return 0===t?new s.EmptyObservable:this.lift(new c(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../Subscriber"),a=t("../util/ArgumentOutOfRangeError"),s=t("../observable/EmptyObservable");r.take=n;var c=function(){function t(t){if(this.total=t,this.total<0)throw new a.ArgumentOutOfRangeError}return t.prototype.call=function(t,e){return e.subscribe(new u(t,this.total))},t}(),u=function(t){function e(e,r){t.call(this,e),this.total=r,this.count=0}return i(e,t),e.prototype._next=function(t){var e=this.total,r=++this.count;r<=e&&(this.destination.next(t),r===e&&(this.destination.complete(),this.unsubscribe()))},e}(o.Subscriber)},{"../Subscriber":35,"../observable/EmptyObservable":88,"../util/ArgumentOutOfRangeError":157}],141:[function(t,e,r){"use strict";function n(t){return this.lift(new s(t))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult");r.takeUntil=n;var s=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.notifier))},t}(),c=function(t){function e(e,r){t.call(this,e),this.notifier=r,this.add(a.subscribeToResult(this,r))}return i(e,t),e.prototype.notifyNext=function(t,e,r,n,i){this.complete()},e.prototype.notifyComplete=function(){},e}(o.OuterSubscriber)},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],142:[function(t,e,r){"use strict";function n(t,e){return void 0===e&&(e=r.defaultThrottleConfig),this.lift(new s(t,e.leading,e.trailing))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult");r.defaultThrottleConfig={leading:!0,trailing:!1},r.throttle=n;var s=function(){function t(t,e,r){this.durationSelector=t,this.leading=e,this.trailing=r}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.durationSelector,this.leading,this.trailing))},t}(),c=function(t){function e(e,r,n,i){t.call(this,e),this.destination=e,this.durationSelector=r,this._leading=n,this._trailing=i,this._hasTrailingValue=!1}return i(e,t),e.prototype._next=function(t){if(this.throttled)this._trailing&&(this._hasTrailingValue=!0,this._trailingValue=t);else{var e=this.tryDurationSelector(t);e&&this.add(this.throttled=a.subscribeToResult(this,e)),this._leading&&(this.destination.next(t),this._trailing&&(this._hasTrailingValue=!0,this._trailingValue=t))}},e.prototype.tryDurationSelector=function(t){try{return this.durationSelector(t)}catch(t){return this.destination.error(t),null}},e.prototype._unsubscribe=function(){var t=this,e=t.throttled;t._trailingValue,t._hasTrailingValue,t._trailing;this._trailingValue=null,this._hasTrailingValue=!1,e&&(this.remove(e),this.throttled=null,e.unsubscribe())},e.prototype._sendTrailing=function(){var t=this,e=t.destination,r=t.throttled,n=t._trailing,i=t._trailingValue,o=t._hasTrailingValue;r&&n&&o&&(e.next(i),this._trailingValue=null,this._hasTrailingValue=!1)},e.prototype.notifyNext=function(t,e,r,n,i){this._sendTrailing(),this._unsubscribe()},e.prototype.notifyComplete=function(){this._sendTrailing(),this._unsubscribe()},e}(o.OuterSubscriber)},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],143:[function(t,e,r){"use strict";function n(t,e,r){return void 0===e&&(e=s.async),void 0===r&&(r=c.defaultThrottleConfig),this.lift(new u(t,e,r.leading,r.trailing))}function i(t){t.subscriber.clearThrottle()}var o=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},a=t("../Subscriber"),s=t("../scheduler/async"),c=t("./throttle");r.throttleTime=n;var u=function(){function t(t,e,r,n){this.duration=t,this.scheduler=e,this.leading=r,this.trailing=n}return t.prototype.call=function(t,e){return e.subscribe(new h(t,this.duration,this.scheduler,this.leading,this.trailing))},t}(),h=function(t){function e(e,r,n,i,o){t.call(this,e),this.duration=r,this.scheduler=n,this.leading=i,this.trailing=o,this._hasTrailingValue=!1,this._trailingValue=null}return o(e,t),e.prototype._next=function(t){this.throttled?this.trailing&&(this._trailingValue=t,this._hasTrailingValue=!0):(this.add(this.throttled=this.scheduler.schedule(i,this.duration,{subscriber:this})),this.leading&&this.destination.next(t))},e.prototype.clearThrottle=function(){
+var t=this.throttled;t&&(this.trailing&&this._hasTrailingValue&&(this.destination.next(this._trailingValue),this._trailingValue=null,this._hasTrailingValue=!1),t.unsubscribe(),this.remove(t),this.throttled=null)},e}(a.Subscriber)},{"../Subscriber":35,"../scheduler/async":151,"./throttle":142}],144:[function(t,e,r){"use strict";function n(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var r;"function"==typeof t[t.length-1]&&(r=t.pop());var n=t;return this.lift(new s(n,r))}var i=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},o=t("../OuterSubscriber"),a=t("../util/subscribeToResult");r.withLatestFrom=n;var s=function(){function t(t,e){this.observables=t,this.project=e}return t.prototype.call=function(t,e){return e.subscribe(new c(t,this.observables,this.project))},t}(),c=function(t){function e(e,r,n){t.call(this,e),this.observables=r,this.project=n,this.toRespond=[];var i=r.length;this.values=new Array(i);for(var o=0;o<i;o++)this.toRespond.push(o);for(var o=0;o<i;o++){var s=r[o];this.add(a.subscribeToResult(this,s,s,o))}}return i(e,t),e.prototype.notifyNext=function(t,e,r,n,i){this.values[r]=e;var o=this.toRespond;if(o.length>0){var a=o.indexOf(r);-1!==a&&o.splice(a,1)}},e.prototype.notifyComplete=function(){},e.prototype._next=function(t){if(0===this.toRespond.length){var e=[t].concat(this.values);this.project?this._tryProject(e):this.destination.next(e)}},e.prototype._tryProject=function(t){var e;try{e=this.project.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(o.OuterSubscriber)},{"../OuterSubscriber":30,"../util/subscribeToResult":172}],145:[function(t,e,r){"use strict";function n(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];return this.lift.call(i.apply(void 0,[this].concat(t)))}function i(){for(var t=[],e=0;e<arguments.length;e++)t[e-0]=arguments[e];var r=t[t.length-1];return"function"==typeof r&&t.pop(),new a.ArrayObservable(t).lift(new p(r))}var o=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},a=t("../observable/ArrayObservable"),s=t("../util/isArray"),c=t("../Subscriber"),u=t("../OuterSubscriber"),h=t("../util/subscribeToResult"),l=t("../symbol/iterator");r.zipProto=n,r.zipStatic=i;var p=function(){function t(t){this.project=t}return t.prototype.call=function(t,e){return e.subscribe(new f(t,this.project))},t}();r.ZipOperator=p;var f=function(t){function e(e,r,n){void 0===n&&(n=Object.create(null)),t.call(this,e),this.iterators=[],this.active=0,this.project="function"==typeof r?r:null,this.values=n}return o(e,t),e.prototype._next=function(t){var e=this.iterators;s.isArray(t)?e.push(new m(t)):"function"==typeof t[l.iterator]?e.push(new d(t[l.iterator]())):e.push(new v(this.destination,this,t))},e.prototype._complete=function(){var t=this.iterators,e=t.length;if(0===e)return void this.destination.complete();this.active=e;for(var r=0;r<e;r++){var n=t[r];n.stillUnsubscribed?this.add(n.subscribe(n,r)):this.active--}},e.prototype.notifyInactive=function(){0===--this.active&&this.destination.complete()},e.prototype.checkIterators=function(){for(var t=this.iterators,e=t.length,r=this.destination,n=0;n<e;n++){var i=t[n];if("function"==typeof i.hasValue&&!i.hasValue())return}for(var o=!1,a=[],n=0;n<e;n++){var i=t[n],s=i.next();if(i.hasCompleted()&&(o=!0),s.done)return void r.complete();a.push(s.value)}this.project?this._tryProject(a):r.next(a),o&&r.complete()},e.prototype._tryProject=function(t){var e;try{e=this.project.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(c.Subscriber);r.ZipSubscriber=f;var d=function(){function t(t){this.iterator=t,this.nextResult=t.next()}return t.prototype.hasValue=function(){return!0},t.prototype.next=function(){var t=this.nextResult;return this.nextResult=this.iterator.next(),t},t.prototype.hasCompleted=function(){var t=this.nextResult;return t&&t.done},t}(),m=function(){function t(t){this.array=t,this.index=0,this.length=0,this.length=t.length}return t.prototype[l.iterator]=function(){return this},t.prototype.next=function(t){var e=this.index++,r=this.array;return e<this.length?{value:r[e],done:!1}:{value:null,done:!0}},t.prototype.hasValue=function(){return this.array.length>this.index},t.prototype.hasCompleted=function(){return this.array.length===this.index},t}(),v=function(t){function e(e,r,n){t.call(this,e),this.parent=r,this.observable=n,this.stillUnsubscribed=!0,this.buffer=[],this.isComplete=!1}return o(e,t),e.prototype[l.iterator]=function(){return this},e.prototype.next=function(){var t=this.buffer;return 0===t.length&&this.isComplete?{value:null,done:!0}:{value:t.shift(),done:!1}},e.prototype.hasValue=function(){return this.buffer.length>0},e.prototype.hasCompleted=function(){return 0===this.buffer.length&&this.isComplete},e.prototype.notifyComplete=function(){this.buffer.length>0?(this.isComplete=!0,this.parent.notifyInactive()):this.destination.complete()},e.prototype.notifyNext=function(t,e,r,n,i){this.buffer.push(e),this.parent.checkIterators()},e.prototype.subscribe=function(t,e){return h.subscribeToResult(this,this.observable,this,e)},e}(u.OuterSubscriber)},{"../OuterSubscriber":30,"../Subscriber":35,"../observable/ArrayObservable":85,"../symbol/iterator":153,"../util/isArray":163,"../util/subscribeToResult":172}],146:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Subscription"),o=function(t){function e(e,r){t.call(this)}return n(e,t),e.prototype.schedule=function(t,e){return void 0===e&&(e=0),this},e}(i.Subscription);r.Action=o},{"../Subscription":36}],147:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../util/root"),o=t("./Action"),a=function(t){function e(e,r){t.call(this,e,r),this.scheduler=e,this.work=r,this.pending=!1}return n(e,t),e.prototype.schedule=function(t,e){if(void 0===e&&(e=0),this.closed)return this;this.state=t,this.pending=!0;var r=this.id,n=this.scheduler;return null!=r&&(this.id=this.recycleAsyncId(n,r,e)),this.delay=e,this.id=this.id||this.requestAsyncId(n,this.id,e),this},e.prototype.requestAsyncId=function(t,e,r){return void 0===r&&(r=0),i.root.setInterval(t.flush.bind(t,this),r)},e.prototype.recycleAsyncId=function(t,e,r){return void 0===r&&(r=0),null!==r&&this.delay===r&&!1===this.pending?e:i.root.clearInterval(e)&&void 0||void 0},e.prototype.execute=function(t,e){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var r=this._execute(t,e);if(r)return r;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},e.prototype._execute=function(t,e){var r=!1,n=void 0;try{this.work(t)}catch(t){r=!0,n=!!t&&t||new Error(t)}if(r)return this.unsubscribe(),n},e.prototype._unsubscribe=function(){var t=this.id,e=this.scheduler,r=e.actions,n=r.indexOf(this);this.work=null,this.delay=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==n&&r.splice(n,1),null!=t&&(this.id=this.recycleAsyncId(e,t,null))},e}(o.Action);r.AsyncAction=a},{"../util/root":171,"./Action":146}],148:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../Scheduler"),o=function(t){function e(){t.apply(this,arguments),this.actions=[],this.active=!1,this.scheduled=void 0}return n(e,t),e.prototype.flush=function(t){var e=this.actions;if(this.active)return void e.push(t);var r;this.active=!0;do{if(r=t.execute(t.state,t.delay))break}while(t=e.shift());if(this.active=!1,r){for(;t=e.shift();)t.unsubscribe();throw r}},e}(i.Scheduler);r.AsyncScheduler=o},{"../Scheduler":32}],149:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./AsyncAction"),o=function(t){function e(e,r){t.call(this,e,r),this.scheduler=e,this.work=r}return n(e,t),e.prototype.schedule=function(e,r){return void 0===r&&(r=0),r>0?t.prototype.schedule.call(this,e,r):(this.delay=r,this.state=e,this.scheduler.flush(this),this)},e.prototype.execute=function(e,r){return r>0||this.closed?t.prototype.execute.call(this,e,r):this._execute(e,r)},e.prototype.requestAsyncId=function(e,r,n){return void 0===n&&(n=0),null!==n&&n>0||null===n&&this.delay>0?t.prototype.requestAsyncId.call(this,e,r,n):e.flush(this)},e}(i.AsyncAction);r.QueueAction=o},{"./AsyncAction":147}],150:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./AsyncScheduler"),o=function(t){function e(){t.apply(this,arguments)}return n(e,t),e}(i.AsyncScheduler);r.QueueScheduler=o},{"./AsyncScheduler":148}],151:[function(t,e,r){"use strict";var n=t("./AsyncAction"),i=t("./AsyncScheduler");r.async=new i.AsyncScheduler(n.AsyncAction)},{"./AsyncAction":147,"./AsyncScheduler":148}],152:[function(t,e,r){"use strict";var n=t("./QueueAction"),i=t("./QueueScheduler");r.queue=new i.QueueScheduler(n.QueueAction)},{"./QueueAction":149,"./QueueScheduler":150}],153:[function(t,e,r){"use strict";function n(t){var e=t.Symbol;if("function"==typeof e)return e.iterator||(e.iterator=e("iterator polyfill")),e.iterator;var r=t.Set;if(r&&"function"==typeof(new r)["@@iterator"])return"@@iterator";var n=t.Map;if(n)for(var i=Object.getOwnPropertyNames(n.prototype),o=0;o<i.length;++o){var a=i[o];if("entries"!==a&&"size"!==a&&n.prototype[a]===n.prototype.entries)return a}return"@@iterator"}var i=t("../util/root");r.symbolIteratorPonyfill=n,r.iterator=n(i.root),r.$$iterator=r.iterator},{"../util/root":171}],154:[function(t,e,r){"use strict";function n(t){var e,r=t.Symbol;return"function"==typeof r?r.observable?e=r.observable:(e=r("observable"),r.observable=e):e="@@observable",e}var i=t("../util/root");r.getSymbolObservable=n,r.observable=n(i.root),r.$$observable=r.observable},{"../util/root":171}],155:[function(t,e,r){"use strict";var n=t("../util/root"),i=n.root.Symbol;r.rxSubscriber="function"==typeof i&&"function"==typeof i.for?i.for("rxSubscriber"):"@@rxSubscriber",r.$$rxSubscriber=r.rxSubscriber},{"../util/root":171}],156:[function(t,e,r){"use strict";var n=t("./root"),i=function(){function t(t){t.requestAnimationFrame?(this.cancelAnimationFrame=t.cancelAnimationFrame.bind(t),this.requestAnimationFrame=t.requestAnimationFrame.bind(t)):t.mozRequestAnimationFrame?(this.cancelAnimationFrame=t.mozCancelAnimationFrame.bind(t),this.requestAnimationFrame=t.mozRequestAnimationFrame.bind(t)):t.webkitRequestAnimationFrame?(this.cancelAnimationFrame=t.webkitCancelAnimationFrame.bind(t),this.requestAnimationFrame=t.webkitRequestAnimationFrame.bind(t)):t.msRequestAnimationFrame?(this.cancelAnimationFrame=t.msCancelAnimationFrame.bind(t),this.requestAnimationFrame=t.msRequestAnimationFrame.bind(t)):t.oRequestAnimationFrame?(this.cancelAnimationFrame=t.oCancelAnimationFrame.bind(t),this.requestAnimationFrame=t.oRequestAnimationFrame.bind(t)):(this.cancelAnimationFrame=t.clearTimeout.bind(t),this.requestAnimationFrame=function(e){return t.setTimeout(e,1e3/60)})}return t}();r.RequestAnimationFrameDefinition=i,r.AnimationFrame=new i(n.root)},{"./root":171}],157:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=function(t){function e(){var e=t.call(this,"argument out of range");this.name=e.name="ArgumentOutOfRangeError",this.stack=e.stack,this.message=e.message}return n(e,t),e}(Error);r.ArgumentOutOfRangeError=i},{}],158:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=function(t){function e(){var e=t.call(this,"no elements in sequence");this.name=e.name="EmptyError",this.stack=e.stack,this.message=e.message}return n(e,t),e}(Error);r.EmptyError=i},{}],159:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=function(t){function e(){var e=t.call(this,"object unsubscribed");this.name=e.name="ObjectUnsubscribedError",this.stack=e.stack,this.message=e.message}return n(e,t),e}(Error);r.ObjectUnsubscribedError=i},{}],160:[function(t,e,r){"use strict";function n(){return function(){function t(){this._values=[]}return t.prototype.add=function(t){this.has(t)||this._values.push(t)},t.prototype.has=function(t){return-1!==this._values.indexOf(t)},Object.defineProperty(t.prototype,"size",{get:function(){return this._values.length},enumerable:!0,configurable:!0}),t.prototype.clear=function(){this._values.length=0},t}()}var i=t("./root");r.minimalSetImpl=n,r.Set=i.root.Set||n()},{"./root":171}],161:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=function(t){function e(e){t.call(this),this.errors=e;var r=Error.call(this,e?e.length+" errors occurred during unsubscription:\n  "+e.map(function(t,e){return e+1+") "+t.toString()}).join("\n  "):"");this.name=r.name="UnsubscriptionError",this.stack=r.stack,this.message=r.message}return n(e,t),e}(Error);r.UnsubscriptionError=i},{}],162:[function(t,e,r){"use strict";r.errorObject={e:{}}},{}],163:[function(t,e,r){"use strict";r.isArray=Array.isArray||function(t){return t&&"number"==typeof t.length}},{}],164:[function(t,e,r){"use strict";r.isArrayLike=function(t){return t&&"number"==typeof t.length}},{}],165:[function(t,e,r){"use strict";function n(t){return t instanceof Date&&!isNaN(+t)}r.isDate=n},{}],166:[function(t,e,r){"use strict";function n(t){return"function"==typeof t}r.isFunction=n},{}],167:[function(t,e,r){"use strict";function n(t){return!i.isArray(t)&&t-parseFloat(t)+1>=0}var i=t("../util/isArray");r.isNumeric=n},{"../util/isArray":163}],168:[function(t,e,r){"use strict";function n(t){return null!=t&&"object"==typeof t}r.isObject=n},{}],169:[function(t,e,r){"use strict";function n(t){return t&&"function"!=typeof t.subscribe&&"function"==typeof t.then}r.isPromise=n},{}],170:[function(t,e,r){"use strict";function n(t){return t&&"function"==typeof t.schedule}r.isScheduler=n},{}],171:[function(t,e,r){(function(t){"use strict";var e="undefined"!=typeof window&&window,n="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,i=void 0!==t&&t,o=e||i||n;r.root=o,function(){if(!o)throw new Error("RxJS could not find any global context (window, self, global)")}()}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],172:[function(t,e,r){"use strict";function n(t,e,r,n){var p=new h.InnerSubscriber(t,r,n);if(p.closed)return null;if(e instanceof c.Observable)return e._isScalar?(p.next(e.value),p.complete(),null):e.subscribe(p);if(o.isArrayLike(e)){for(var f=0,d=e.length;f<d&&!p.closed;f++)p.next(e[f]);p.closed||p.complete()}else{if(a.isPromise(e))return e.then(function(t){p.closed||(p.next(t),p.complete())},function(t){return p.error(t)}).then(null,function(t){i.root.setTimeout(function(){throw t})}),p;if(e&&"function"==typeof e[u.iterator])for(var m=e[u.iterator]();;){var v=m.next();if(v.done){p.complete();break}if(p.next(v.value),p.closed)break}else if(e&&"function"==typeof e[l.observable]){var g=e[l.observable]();if("function"==typeof g.subscribe)return g.subscribe(new h.InnerSubscriber(t,r,n));p.error(new TypeError("Provided object does not correctly implement Symbol.observable"))}else{var y=s.isObject(e)?"an invalid object":"'"+e+"'",b="You provided "+y+" where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.";p.error(new TypeError(b))}}return null}var i=t("./root"),o=t("./isArrayLike"),a=t("./isPromise"),s=t("./isObject"),c=t("../Observable"),u=t("../symbol/iterator"),h=t("../InnerSubscriber"),l=t("../symbol/observable");r.subscribeToResult=n},{"../InnerSubscriber":26,"../Observable":28,"../symbol/iterator":153,"../symbol/observable":154,"./isArrayLike":164,"./isObject":168,"./isPromise":169,"./root":171}],173:[function(t,e,r){"use strict";function n(t,e,r){if(t){if(t instanceof i.Subscriber)return t;if(t[o.rxSubscriber])return t[o.rxSubscriber]()}return t||e||r?new i.Subscriber(t,e,r):new i.Subscriber(a.empty)}var i=t("../Subscriber"),o=t("../symbol/rxSubscriber"),a=t("../Observer");r.toSubscriber=n},{"../Observer":29,"../Subscriber":35,"../symbol/rxSubscriber":155}],174:[function(t,e,r){"use strict";function n(){try{return o.apply(this,arguments)}catch(t){return a.errorObject.e=t,a.errorObject}}function i(t){return o=t,n}var o,a=t("./errorObject");r.tryCatch=i},{"./errorObject":162}],175:[function(e,r,n){!function(e,i){"object"==typeof n&&void 0!==r?i(n):"function"==typeof t&&t.amd?t(["exports"],i):i(e.THREE=e.THREE||{})}(this,function(t){function e(){}function r(t,e){this.x=t||0,this.y=e||0}function n(t,e,i,o,a,s,c,u,h,l){Object.defineProperty(this,"id",{value:ni++}),this.uuid=ri.generateUUID(),this.name="",this.image=void 0!==t?t:n.DEFAULT_IMAGE,this.mipmaps=[],this.mapping=void 0!==e?e:n.DEFAULT_MAPPING,this.wrapS=void 0!==i?i:1001,this.wrapT=void 0!==o?o:1001,this.magFilter=void 0!==a?a:1006,this.minFilter=void 0!==s?s:1008,this.anisotropy=void 0!==h?h:1,this.format=void 0!==c?c:1023,this.type=void 0!==u?u:1009,this.offset=new r(0,0),this.repeat=new r(1,1),this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=void 0!==l?l:3e3,this.version=0,this.onUpdate=null}function i(t,e,r,n){this.x=t||0,this.y=e||0,this.z=r||0,this.w=void 0!==n?n:1}function o(t,e,r){this.uuid=ri.generateUUID(),this.width=t,this.height=e,this.scissor=new i(0,0,t,e),this.scissorTest=!1,this.viewport=new i(0,0,t,e),r=r||{},void 0===r.minFilter&&(r.minFilter=1006),this.texture=new n(void 0,void 0,r.wrapS,r.wrapT,r.magFilter,r.minFilter,r.format,r.type,r.anisotropy,r.encoding),this.depthBuffer=void 0===r.depthBuffer||r.depthBuffer,this.stencilBuffer=void 0===r.stencilBuffer||r.stencilBuffer,this.depthTexture=void 0!==r.depthTexture?r.depthTexture:null}function a(t,e,r){o.call(this,t,e,r),this.activeMipMapLevel=this.activeCubeFace=0}function s(t,e,r,n){this._x=t||0,this._y=e||0,this._z=r||0,this._w=void 0!==n?n:1}function c(t,e,r){this.x=t||0,this.y=e||0,this.z=r||0}function u(){this.elements=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),0<arguments.length&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}function h(t,e,r,i,o,a,s,c,u,h){t=void 0!==t?t:[],n.call(this,t,void 0!==e?e:301,r,i,o,a,s,c,u,h),this.flipY=!1}function l(t,e,r){var n=t[0];if(0>=n||0<n)return t;var i=e*r,o=ai[i];if(void 0===o&&(o=new Float32Array(i),ai[i]=o),0!==e)for(n.toArray(o,0),n=1,i=0;n!==e;++n)i+=r,t[n].toArray(o,i);return o}function p(t,e){var r=si[e];void 0===r&&(r=new Int32Array(e),si[e]=r);for(var n=0;n!==e;++n)r[n]=t.allocTextureUnit();return r}function f(t,e){t.uniform1f(this.addr,e)}function d(t,e){t.uniform1i(this.addr,e)}function m(t,e){void 0===e.x?t.uniform2fv(this.addr,e):t.uniform2f(this.addr,e.x,e.y)}function v(t,e){void 0!==e.x?t.uniform3f(this.addr,e.x,e.y,e.z):void 0!==e.r?t.uniform3f(this.addr,e.r,e.g,e.b):t.uniform3fv(this.addr,e)}function g(t,e){void 0===e.x?t.uniform4fv(this.addr,e):t.uniform4f(this.addr,e.x,e.y,e.z,e.w)}function y(t,e){t.uniformMatrix2fv(this.addr,!1,e.elements||e)}function b(t,e){t.uniformMatrix3fv(this.addr,!1,e.elements||e)}function _(t,e){t.uniformMatrix4fv(this.addr,!1,e.elements||e)}function x(t,e,r){var n=r.allocTextureUnit();t.uniform1i(this.addr,n),r.setTexture2D(e||ii,n)}function w(t,e,r){var n=r.allocTextureUnit();t.uniform1i(this.addr,n),r.setTextureCube(e||oi,n)}function S(t,e){t.uniform2iv(this.addr,e)}function M(t,e){t.uniform3iv(this.addr,e)}function E(t,e){t.uniform4iv(this.addr,e)}function T(t){switch(t){case 5126:return f;case 35664:return m;case 35665:return v;case 35666:return g;case 35674:return y;case 35675:return b;case 35676:return _;case 35678:return x;case 35680:return w;case 5124:case 35670:return d;case 35667:case 35671:return S;case 35668:case 35672:return M;case 35669:case 35673:return E}}function C(t,e){t.uniform1fv(this.addr,e)}function O(t,e){t.uniform1iv(this.addr,e)}function P(t,e){t.uniform2fv(this.addr,l(e,this.size,2))}function A(t,e){t.uniform3fv(this.addr,l(e,this.size,3))}function j(t,e){t.uniform4fv(this.addr,l(e,this.size,4))}function R(t,e){t.uniformMatrix2fv(this.addr,!1,l(e,this.size,4))}function L(t,e){t.uniformMatrix3fv(this.addr,!1,l(e,this.size,9))}function N(t,e){t.uniformMatrix4fv(this.addr,!1,l(e,this.size,16))}function I(t,e,r){var n=e.length,i=p(r,n);for(t.uniform1iv(this.addr,i),t=0;t!==n;++t)r.setTexture2D(e[t]||ii,i[t])}function D(t,e,r){var n=e.length,i=p(r,n);for(t.uniform1iv(this.addr,i),t=0;t!==n;++t)r.setTextureCube(e[t]||oi,i[t])}function k(t){switch(t){case 5126:return C;case 35664:return P;case 35665:return A;case 35666:return j;case 35674:return R;case 35675:return L;case 35676:return N;case 35678:return I;case 35680:return D;case 5124:case 35670:return O;case 35667:case 35671:return S;case 35668:case 35672:return M;case 35669:case 35673:return E}}function F(t,e,r){this.id=t,this.addr=r,this.setValue=T(e.type)}function U(t,e,r){this.id=t,this.addr=r,this.size=e.size,this.setValue=k(e.type)}function B(t){this.id=t,this.seq=[],this.map={}}function z(t,e,r){this.seq=[],this.map={},this.renderer=r,r=t.getProgramParameter(e,t.ACTIVE_UNIFORMS);for(var n=0;n!==r;++n){var i=t.getActiveUniform(e,n),o=t.getUniformLocation(e,i.name),a=this,s=i.name,c=s.length;for(ci.lastIndex=0;;){var u=ci.exec(s),h=ci.lastIndex,l=u[1],p=u[3];if("]"===u[2]&&(l|=0),void 0===p||"["===p&&h+2===c){s=a,i=void 0===p?new F(l,i,o):new U(l,i,o),s.seq.push(i),s.map[i.id]=i;break}p=a.map[l],void 0===p&&(p=new B(l),l=a,a=p,l.seq.push(a),l.map[a.id]=a),a=p}}}function G(t,e,r){return void 0===e&&void 0===r?this.set(t):this.setRGB(t,e,r)}function $(t,e,r,i,o,a,s,c,u,h,l,p){n.call(this,null,a,s,c,u,h,i,o,l,p),this.image={data:t,width:e,height:r},this.magFilter=void 0!==u?u:1003,this.minFilter=void 0!==h?h:1003,this.flipY=this.generateMipmaps=!1,this.unpackAlignment=1}function V(t,e){this.min=void 0!==t?t:new r(1/0,1/0),this.max=void 0!==e?e:new r(-1/0,-1/0)}function H(t,e){var n,i,o,a,s,u,h,l,p,f,d,m,v,g,y,b,_=t.context,x=t.state;this.render=function(w,S,M){if(0!==e.length){w=new c;var E=M.w/M.z,T=.5*M.z,C=.5*M.w,O=16/M.w,P=new r(O*E,O),A=new c(1,1,0),j=new r(1,1),R=new V;if(R.min.set(M.x,M.y),R.max.set(M.x+(M.z-16),M.y+(M.w-16)),void 0===g){var O=new Float32Array([-1,-1,0,0,1,-1,1,0,1,1,1,1,-1,1,0,1]),L=new Uint16Array([0,1,2,0,2,3]);d=_.createBuffer(),m=_.createBuffer(),_.bindBuffer(_.ARRAY_BUFFER,d),_.bufferData(_.ARRAY_BUFFER,O,_.STATIC_DRAW),_.bindBuffer(_.ELEMENT_ARRAY_BUFFER,m),_.bufferData(_.ELEMENT_ARRAY_BUFFER,L,_.STATIC_DRAW),y=_.createTexture(),b=_.createTexture(),x.bindTexture(_.TEXTURE_2D,y),_.texImage2D(_.TEXTURE_2D,0,_.RGB,16,16,0,_.RGB,_.UNSIGNED_BYTE,null),_.texParameteri(_.TEXTURE_2D,_.TEXTURE_WRAP_S,_.CLAMP_TO_EDGE),_.texParameteri(_.TEXTURE_2D,_.TEXTURE_WRAP_T,_.CLAMP_TO_EDGE),_.texParameteri(_.TEXTURE_2D,_.TEXTURE_MAG_FILTER,_.NEAREST),_.texParameteri(_.TEXTURE_2D,_.TEXTURE_MIN_FILTER,_.NEAREST),x.bindTexture(_.TEXTURE_2D,b),_.texImage2D(_.TEXTURE_2D,0,_.RGBA,16,16,0,_.RGBA,_.UNSIGNED_BYTE,null),_.texParameteri(_.TEXTURE_2D,_.TEXTURE_WRAP_S,_.CLAMP_TO_EDGE),_.texParameteri(_.TEXTURE_2D,_.TEXTURE_WRAP_T,_.CLAMP_TO_EDGE),_.texParameteri(_.TEXTURE_2D,_.TEXTURE_MAG_FILTER,_.NEAREST),_.texParameteri(_.TEXTURE_2D,_.TEXTURE_MIN_FILTER,_.NEAREST);var O=v={vertexShader:"uniform lowp int renderType;\nuniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nuniform sampler2D occlusionMap;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nvUV = uv;\nvec2 pos = position;\nif ( renderType == 2 ) {\nvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );\nvVisibility =        visibility.r / 9.0;\nvVisibility *= 1.0 - visibility.g / 9.0;\nvVisibility *=       visibility.b / 9.0;\nvVisibility *= 1.0 - visibility.a / 9.0;\npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\n}\ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n}",fragmentShader:"uniform lowp int renderType;\nuniform sampler2D map;\nuniform float opacity;\nuniform vec3 color;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nif ( renderType == 0 ) {\ngl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );\n} else if ( renderType == 1 ) {\ngl_FragColor = texture2D( map, vUV );\n} else {\nvec4 texture = texture2D( map, vUV );\ntexture.a *= opacity * vVisibility;\ngl_FragColor = texture;\ngl_FragColor.rgb *= color;\n}\n}"},L=_.createProgram(),N=_.createShader(_.FRAGMENT_SHADER),I=_.createShader(_.VERTEX_SHADER),D="precision "+t.getPrecision()+" float;\n";_.shaderSource(N,D+O.fragmentShader),_.shaderSource(I,D+O.vertexShader),_.compileShader(N),_.compileShader(I),_.attachShader(L,N),_.attachShader(L,I),_.linkProgram(L),g=L,p=_.getAttribLocation(g,"position"),f=_.getAttribLocation(g,"uv"),n=_.getUniformLocation(g,"renderType"),i=_.getUniformLocation(g,"map"),o=_.getUniformLocation(g,"occlusionMap"),a=_.getUniformLocation(g,"opacity"),s=_.getUniformLocation(g,"color"),u=_.getUniformLocation(g,"scale"),h=_.getUniformLocation(g,"rotation"),l=_.getUniformLocation(g,"screenPosition")}for(_.useProgram(g),x.initAttributes(),x.enableAttribute(p),x.enableAttribute(f),x.disableUnusedAttributes(),_.uniform1i(o,0),_.uniform1i(i,1),_.bindBuffer(_.ARRAY_BUFFER,d),_.vertexAttribPointer(p,2,_.FLOAT,!1,16,0),_.vertexAttribPointer(f,2,_.FLOAT,!1,16,8),_.bindBuffer(_.ELEMENT_ARRAY_BUFFER,m),x.disable(_.CULL_FACE),x.setDepthWrite(!1),L=0,N=e.length;L<N;L++)if(O=16/M.w,P.set(O*E,O),I=e[L],w.set(I.matrixWorld.elements[12],I.matrixWorld.elements[13],I.matrixWorld.elements[14]),w.applyMatrix4(S.matrixWorldInverse),w.applyProjection(S.projectionMatrix),A.copy(w),j.x=M.x+A.x*T+T-8,j.y=M.y+A.y*C+C-8,!0===R.containsPoint(j)){x.activeTexture(_.TEXTURE0),x.bindTexture(_.TEXTURE_2D,null),x.activeTexture(_.TEXTURE1),x.bindTexture(_.TEXTURE_2D,y),_.copyTexImage2D(_.TEXTURE_2D,0,_.RGB,j.x,j.y,16,16,0),_.uniform1i(n,0),_.uniform2f(u,P.x,P.y),_.uniform3f(l,A.x,A.y,A.z),x.disable(_.BLEND),x.enable(_.DEPTH_TEST),_.drawElements(_.TRIANGLES,6,_.UNSIGNED_SHORT,0),x.activeTexture(_.TEXTURE0),x.bindTexture(_.TEXTURE_2D,b),_.copyTexImage2D(_.TEXTURE_2D,0,_.RGBA,j.x,j.y,16,16,0),_.uniform1i(n,1),x.disable(_.DEPTH_TEST),x.activeTexture(_.TEXTURE1),x.bindTexture(_.TEXTURE_2D,y),_.drawElements(_.TRIANGLES,6,_.UNSIGNED_SHORT,0),I.positionScreen.copy(A),I.customUpdateCallback?I.customUpdateCallback(I):I.updateLensFlares(),_.uniform1i(n,2),x.enable(_.BLEND);for(var D=0,k=I.lensFlares.length;D<k;D++){var F=I.lensFlares[D];.001<F.opacity&&.001<F.scale&&(A.x=F.x,A.y=F.y,A.z=F.z,O=F.size*F.scale/M.w,P.x=O*E,P.y=O,_.uniform3f(l,A.x,A.y,A.z),_.uniform2f(u,P.x,P.y),_.uniform1f(h,F.rotation),_.uniform1f(a,F.opacity),_.uniform3f(s,F.color.r,F.color.g,F.color.b),x.setBlending(F.blending,F.blendEquation,F.blendSrc,F.blendDst),t.setTexture2D(F.texture,1),_.drawElements(_.TRIANGLES,6,_.UNSIGNED_SHORT,0))}}x.enable(_.CULL_FACE),x.enable(_.DEPTH_TEST),x.setDepthWrite(!0),t.resetGLState()}}}function W(t,e){function r(t,e){return t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.z!==e.z?e.z-t.z:e.id-t.id}var i,o,a,u,h,l,p,f,d,m,v,g,y,b,_,x,w,S,M,E,T,C=t.context,O=t.state,P=new c,A=new s,j=new c;this.render=function(s,c){if(0!==e.length){if(void 0===E){var R=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]),L=new Uint16Array([0,1,2,0,2,3]);S=C.createBuffer(),M=C.createBuffer(),C.bindBuffer(C.ARRAY_BUFFER,S),C.bufferData(C.ARRAY_BUFFER,R,C.STATIC_DRAW),C.bindBuffer(C.ELEMENT_ARRAY_BUFFER,M),C.bufferData(C.ELEMENT_ARRAY_BUFFER,L,C.STATIC_DRAW);var R=C.createProgram(),L=C.createShader(C.VERTEX_SHADER),N=C.createShader(C.FRAGMENT_SHADER);C.shaderSource(L,["precision "+t.getPrecision()+" float;","uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uvOffset + uv * uvScale;\nvec2 alignedPosition = position * scale;\nvec2 rotatedPosition;\nrotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\nrotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\nvec4 finalPosition;\nfinalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\nfinalPosition.xy += rotatedPosition;\nfinalPosition = projectionMatrix * finalPosition;\ngl_Position = finalPosition;\n}"].join("\n")),C.shaderSource(N,["precision "+t.getPrecision()+" float;","uniform vec3 color;\nuniform sampler2D map;\nuniform float opacity;\nuniform int fogType;\nuniform vec3 fogColor;\nuniform float fogDensity;\nuniform float fogNear;\nuniform float fogFar;\nuniform float alphaTest;\nvarying vec2 vUV;\nvoid main() {\nvec4 texture = texture2D( map, vUV );\nif ( texture.a < alphaTest ) discard;\ngl_FragColor = vec4( color * texture.xyz, texture.a * opacity );\nif ( fogType > 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")),C.compileShader(L),C.compileShader(N),C.attachShader(R,L),C.attachShader(R,N),C.linkProgram(R),E=R,x=C.getAttribLocation(E,"position"),w=C.getAttribLocation(E,"uv"),i=C.getUniformLocation(E,"uvOffset"),o=C.getUniformLocation(E,"uvScale"),a=C.getUniformLocation(E,"rotation"),u=C.getUniformLocation(E,"scale"),h=C.getUniformLocation(E,"color"),l=C.getUniformLocation(E,"map"),p=C.getUniformLocation(E,"opacity"),f=C.getUniformLocation(E,"modelViewMatrix"),d=C.getUniformLocation(E,"projectionMatrix"),m=C.getUniformLocation(E,"fogType"),v=C.getUniformLocation(E,"fogDensity"),g=C.getUniformLocation(E,"fogNear"),y=C.getUniformLocation(E,"fogFar"),b=C.getUniformLocation(E,"fogColor"),
+_=C.getUniformLocation(E,"alphaTest"),R=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),R.width=8,R.height=8,L=R.getContext("2d"),L.fillStyle="white",L.fillRect(0,0,8,8),T=new n(R),T.needsUpdate=!0}C.useProgram(E),O.initAttributes(),O.enableAttribute(x),O.enableAttribute(w),O.disableUnusedAttributes(),O.disable(C.CULL_FACE),O.enable(C.BLEND),C.bindBuffer(C.ARRAY_BUFFER,S),C.vertexAttribPointer(x,2,C.FLOAT,!1,16,0),C.vertexAttribPointer(w,2,C.FLOAT,!1,16,8),C.bindBuffer(C.ELEMENT_ARRAY_BUFFER,M),C.uniformMatrix4fv(d,!1,c.projectionMatrix.elements),O.activeTexture(C.TEXTURE0),C.uniform1i(l,0),L=R=0,(N=s.fog)?(C.uniform3f(b,N.color.r,N.color.g,N.color.b),N.isFog?(C.uniform1f(g,N.near),C.uniform1f(y,N.far),C.uniform1i(m,1),L=R=1):N.isFogExp2&&(C.uniform1f(v,N.density),C.uniform1i(m,2),L=R=2)):(C.uniform1i(m,0),L=R=0);for(var N=0,I=e.length;N<I;N++){var D=e[N];D.modelViewMatrix.multiplyMatrices(c.matrixWorldInverse,D.matrixWorld),D.z=-D.modelViewMatrix.elements[14]}e.sort(r);for(var k=[],N=0,I=e.length;N<I;N++){var D=e[N],F=D.material;!1!==F.visible&&(C.uniform1f(_,F.alphaTest),C.uniformMatrix4fv(f,!1,D.modelViewMatrix.elements),D.matrixWorld.decompose(P,A,j),k[0]=j.x,k[1]=j.y,D=0,s.fog&&F.fog&&(D=L),R!==D&&(C.uniform1i(m,D),R=D),null!==F.map?(C.uniform2f(i,F.map.offset.x,F.map.offset.y),C.uniform2f(o,F.map.repeat.x,F.map.repeat.y)):(C.uniform2f(i,0,0),C.uniform2f(o,1,1)),C.uniform1f(p,F.opacity),C.uniform3f(h,F.color.r,F.color.g,F.color.b),C.uniform1f(a,F.rotation),C.uniform2fv(u,k),O.setBlending(F.blending,F.blendEquation,F.blendSrc,F.blendDst),O.setDepthTest(F.depthTest),O.setDepthWrite(F.depthWrite),F.map?t.setTexture2D(F.map,0):t.setTexture2D(T,0),C.drawElements(C.TRIANGLES,6,C.UNSIGNED_SHORT,0))}O.enable(C.CULL_FACE),t.resetGLState()}}}function q(){Object.defineProperty(this,"id",{value:di++}),this.uuid=ri.generateUUID(),this.name="",this.type="Material",this.lights=this.fog=!0,this.blending=1,this.side=0,this.shading=2,this.vertexColors=0,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendEquationAlpha=this.blendDstAlpha=this.blendSrcAlpha=null,this.depthFunc=3,this.depthWrite=this.depthTest=!0,this.clippingPlanes=null,this.clipShadows=this.clipIntersection=!1,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.alphaTest=this.polygonOffsetUnits=this.polygonOffsetFactor=0,this.premultipliedAlpha=!1,this.overdraw=0,this._needsUpdate=this.visible=!0}function X(t){q.call(this),this.type="ShaderMaterial",this.defines={},this.uniforms={},this.vertexShader="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",this.fragmentShader="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}",this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.morphNormals=this.morphTargets=this.skinning=this.clipping=this.lights=this.fog=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,void 0!==t&&(void 0!==t.attributes&&console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(t))}function Y(t){q.call(this),this.type="MeshDepthMaterial",this.depthPacking=3200,this.morphTargets=this.skinning=!1,this.displacementMap=this.alphaMap=this.map=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.lights=this.fog=!1,this.setValues(t)}function K(t,e){this.min=void 0!==t?t:new c(1/0,1/0,1/0),this.max=void 0!==e?e:new c(-1/0,-1/0,-1/0)}function Z(t,e){this.center=void 0!==t?t:new c,this.radius=void 0!==e?e:0}function J(){this.elements=new Float32Array([1,0,0,0,1,0,0,0,1]),0<arguments.length&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}function Q(t,e){this.normal=void 0!==t?t:new c(1,0,0),this.constant=void 0!==e?e:0}function tt(t,e,r,n,i,o){this.planes=[void 0!==t?t:new Q,void 0!==e?e:new Q,void 0!==r?r:new Q,void 0!==n?n:new Q,void 0!==i?i:new Q,void 0!==o?o:new Q]}function et(t,e,n,a){function s(e,r,n,i){var o,a=e.geometry;o=x;var s=e.customDepthMaterial;return n&&(o=w,s=e.customDistanceMaterial),s?o=s:(s=!1,r.morphTargets&&(a&&a.isBufferGeometry?s=a.morphAttributes&&a.morphAttributes.position&&0<a.morphAttributes.position.length:a&&a.isGeometry&&(s=a.morphTargets&&0<a.morphTargets.length)),e=e.isSkinnedMesh&&r.skinning,a=0,s&&(a|=1),e&&(a|=2),o=o[a]),t.localClippingEnabled&&!0===r.clipShadows&&0!==r.clippingPlanes.length&&(a=o.uuid,s=r.uuid,e=S[a],void 0===e&&(e={},S[a]=e),a=e[s],void 0===a&&(a=o.clone(),e[s]=a),o=a),o.visible=r.visible,o.wireframe=r.wireframe,s=r.side,R.renderSingleSided&&2==s&&(s=0),R.renderReverseSided&&(0===s?s=1:1===s&&(s=0)),o.side=s,o.clipShadows=r.clipShadows,o.clippingPlanes=r.clippingPlanes,o.wireframeLinewidth=r.wireframeLinewidth,o.linewidth=r.linewidth,n&&void 0!==o.uniforms.lightPos&&o.uniforms.lightPos.value.copy(i),o}function h(t,e,r){if(!1!==t.visible){0!=(t.layers.mask&e.layers.mask)&&(t.isMesh||t.isLine||t.isPoints)&&t.castShadow&&(!1===t.frustumCulled||!0===f.intersectsObject(t))&&!0===t.material.visible&&(t.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse,t.matrixWorld),_.push(t)),t=t.children;for(var n=0,i=t.length;n<i;n++)h(t[n],e,r)}}var l=t.context,p=t.state,f=new tt,d=new u,m=e.shadows,v=new r,g=new r(a.maxTextureSize,a.maxTextureSize),y=new c,b=new c,_=[],x=Array(4),w=Array(4),S={},M=[new c(1,0,0),new c(-1,0,0),new c(0,0,1),new c(0,0,-1),new c(0,1,0),new c(0,-1,0)],E=[new c(0,1,0),new c(0,1,0),new c(0,1,0),new c(0,1,0),new c(0,0,1),new c(0,0,-1)],T=[new i,new i,new i,new i,new i,new i];e=new Y,e.depthPacking=3201,e.clipping=!0,a=fi.distanceRGBA;for(var C=ui.clone(a.uniforms),O=0;4!==O;++O){var P=0!=(1&O),A=0!=(2&O),j=e.clone();j.morphTargets=P,j.skinning=A,x[O]=j,P=new X({defines:{USE_SHADOWMAP:""},uniforms:C,vertexShader:a.vertexShader,fragmentShader:a.fragmentShader,morphTargets:P,skinning:A,clipping:!0}),w[O]=P}var R=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1,this.renderSingleSided=this.renderReverseSided=!0,this.render=function(e,r){if(!1!==R.enabled&&(!1!==R.autoUpdate||!1!==R.needsUpdate)&&0!==m.length){p.buffers.color.setClear(1,1,1,1),p.disable(l.BLEND),p.setDepthTest(!0),p.setScissorTest(!1);for(var i,a,c=0,u=m.length;c<u;c++){var x=m[c],w=x.shadow;if(void 0===w)console.warn("THREE.WebGLShadowMap:",x,"has no shadow.");else{var S=w.camera;if(v.copy(w.mapSize),v.min(g),x&&x.isPointLight){i=6,a=!0;var C=v.x,O=v.y;T[0].set(2*C,O,C,O),T[1].set(0,O,C,O),T[2].set(3*C,O,C,O),T[3].set(C,O,C,O),T[4].set(3*C,0,C,O),T[5].set(C,0,C,O),v.x*=4,v.y*=2}else i=1,a=!1;for(null===w.map&&(w.map=new o(v.x,v.y,{minFilter:1003,magFilter:1003,format:1023}),S.updateProjectionMatrix()),w.isSpotLightShadow&&w.update(x),w&&w.isRectAreaLightShadow&&w.update(x),C=w.map,w=w.matrix,b.setFromMatrixPosition(x.matrixWorld),S.position.copy(b),t.setRenderTarget(C),t.clear(),C=0;C<i;C++){a?(y.copy(S.position),y.add(M[C]),S.up.copy(E[C]),S.lookAt(y),p.viewport(T[C])):(y.setFromMatrixPosition(x.target.matrixWorld),S.lookAt(y)),S.updateMatrixWorld(),S.matrixWorldInverse.getInverse(S.matrixWorld),w.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),w.multiply(S.projectionMatrix),w.multiply(S.matrixWorldInverse),d.multiplyMatrices(S.projectionMatrix,S.matrixWorldInverse),f.setFromMatrix(d),_.length=0,h(e,r,S);for(var O=0,P=_.length;O<P;O++){var A=_[O],j=n.update(A),L=A.material;if(L&&L.isMultiMaterial)for(var N=j.groups,L=L.materials,I=0,D=N.length;I<D;I++){var k=N[I],F=L[k.materialIndex];!0===F.visible&&(F=s(A,F,a,b),t.renderBufferDirect(S,null,j,F,A,k))}else F=s(A,L,a,b),t.renderBufferDirect(S,null,j,F,A,null)}}}}i=t.getClearColor(),a=t.getClearAlpha(),t.setClearColor(i,a),R.needsUpdate=!1}}}function rt(t,e){this.origin=void 0!==t?t:new c,this.direction=void 0!==e?e:new c}function nt(t,e,r,n){this._x=t||0,this._y=e||0,this._z=r||0,this._order=n||nt.DefaultOrder}function it(){this.mask=1}function ot(){Object.defineProperty(this,"id",{value:mi++}),this.uuid=ri.generateUUID(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=ot.DefaultUp.clone();var t=new c,e=new nt,r=new s,n=new c(1,1,1);e.onChange(function(){r.setFromEuler(e,!1)}),r.onChange(function(){e.setFromQuaternion(r,void 0,!1)}),Object.defineProperties(this,{position:{enumerable:!0,value:t},rotation:{enumerable:!0,value:e},quaternion:{enumerable:!0,value:r},scale:{enumerable:!0,value:n},modelViewMatrix:{value:new u},normalMatrix:{value:new J}}),this.matrix=new u,this.matrixWorld=new u,this.matrixAutoUpdate=ot.DefaultMatrixAutoUpdate,this.matrixWorldNeedsUpdate=!1,this.layers=new it,this.visible=!0,this.receiveShadow=this.castShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.userData={},this.onBeforeRender=function(){},this.onAfterRender=function(){}}function at(t,e){this.start=void 0!==t?t:new c,this.end=void 0!==e?e:new c}function st(t,e,r){this.a=void 0!==t?t:new c,this.b=void 0!==e?e:new c,this.c=void 0!==r?r:new c}function ct(t,e,r,n,i,o){this.a=t,this.b=e,this.c=r,this.normal=n&&n.isVector3?n:new c,this.vertexNormals=Array.isArray(n)?n:[],this.color=i&&i.isColor?i:new G,this.vertexColors=Array.isArray(i)?i:[],this.materialIndex=void 0!==o?o:0}function ut(t){q.call(this),this.type="MeshBasicMaterial",this.color=new G(16777215),this.lightMap=this.map=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.envMap=this.alphaMap=this.specularMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinejoin=this.wireframeLinecap="round",this.lights=this.morphTargets=this.skinning=!1,this.setValues(t)}function ht(t,e,r){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.uuid=ri.generateUUID(),this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===r,this.dynamic=!1,this.updateRange={offset:0,count:-1},this.onUploadCallback=function(){},this.version=0}function lt(t,e){ht.call(this,new Int8Array(t),e)}function pt(t,e){ht.call(this,new Uint8Array(t),e)}function ft(t,e){ht.call(this,new Uint8ClampedArray(t),e)}function dt(t,e){ht.call(this,new Int16Array(t),e)}function mt(t,e){ht.call(this,new Uint16Array(t),e)}function vt(t,e){ht.call(this,new Int32Array(t),e)}function gt(t,e){ht.call(this,new Uint32Array(t),e)}function yt(t,e){ht.call(this,new Float32Array(t),e)}function bt(t,e){ht.call(this,new Float64Array(t),e)}function _t(){this.indices=[],this.vertices=[],this.normals=[],this.colors=[],this.uvs=[],this.uvs2=[],this.groups=[],this.morphTargets={},this.skinWeights=[],this.skinIndices=[],this.boundingSphere=this.boundingBox=null,this.groupsNeedUpdate=this.uvsNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.verticesNeedUpdate=!1}function xt(){Object.defineProperty(this,"id",{value:vi++}),this.uuid=ri.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingSphere=this.boundingBox=null,this.groupsNeedUpdate=this.lineDistancesNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.uvsNeedUpdate=this.verticesNeedUpdate=this.elementsNeedUpdate=!1}function wt(){Object.defineProperty(this,"id",{value:vi++}),this.uuid=ri.generateUUID(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingSphere=this.boundingBox=null,this.drawRange={start:0,count:1/0}}function St(t,e){ot.call(this),this.type="Mesh",this.geometry=void 0!==t?t:new wt,this.material=void 0!==e?e:new ut({color:16777215*Math.random()}),this.drawMode=0,this.updateMorphTargets()}function Mt(t,e,r,n,i,o){function a(t,e,r,n,i,o,a,u,h,_,x){var w=o/h,S=a/_,M=o/2,E=a/2,T=u/2;a=h+1;for(var C=_+1,O=o=0,P=new c,A=0;A<C;A++)for(var j=A*S-E,R=0;R<a;R++)P[t]=(R*w-M)*n,P[e]=j*i,P[r]=T,p[m]=P.x,p[m+1]=P.y,p[m+2]=P.z,P[t]=0,P[e]=0,P[r]=0<u?1:-1,f[m]=P.x,f[m+1]=P.y,f[m+2]=P.z,d[v]=R/h,d[v+1]=1-A/_,m+=3,v+=2,o+=1;for(A=0;A<_;A++)for(R=0;R<h;R++)t=y+R+a*(A+1),e=y+(R+1)+a*(A+1),r=y+(R+1)+a*A,l[g]=y+R+a*A,l[g+1]=t,l[g+2]=r,l[g+3]=t,l[g+4]=e,l[g+5]=r,g+=6,O+=6;s.addGroup(b,O,x),b+=O,y+=o}wt.call(this),this.type="BoxBufferGeometry",this.parameters={width:t,height:e,depth:r,widthSegments:n,heightSegments:i,depthSegments:o};var s=this;n=Math.floor(n)||1,i=Math.floor(i)||1,o=Math.floor(o)||1;var u=function(t,e,r){return t=0+(t+1)*(e+1)*2+(t+1)*(r+1)*2+(r+1)*(e+1)*2}(n,i,o),h=function(t,e,r){return 6*(t=0+t*e*2+t*r*2+r*e*2)}(n,i,o),l=new(65535<h?Uint32Array:Uint16Array)(h),p=new Float32Array(3*u),f=new Float32Array(3*u),d=new Float32Array(2*u),m=0,v=0,g=0,y=0,b=0;a("z","y","x",-1,-1,r,e,t,o,i,0),a("z","y","x",1,-1,r,e,-t,o,i,1),a("x","z","y",1,1,t,r,e,n,o,2),a("x","z","y",1,-1,t,r,-e,n,o,3),a("x","y","z",1,-1,t,e,r,n,i,4),a("x","y","z",-1,-1,t,e,-r,n,i,5),this.setIndex(new ht(l,1)),this.addAttribute("position",new ht(p,3)),this.addAttribute("normal",new ht(f,3)),this.addAttribute("uv",new ht(d,2))}function Et(t,e,r,n){wt.call(this),this.type="PlaneBufferGeometry",this.parameters={width:t,height:e,widthSegments:r,heightSegments:n};var i=t/2,o=e/2;r=Math.floor(r)||1,n=Math.floor(n)||1;var a=r+1,s=n+1,c=t/r,u=e/n;e=new Float32Array(a*s*3),t=new Float32Array(a*s*3);for(var h=new Float32Array(a*s*2),l=0,p=0,f=0;f<s;f++)for(var d=f*u-o,m=0;m<a;m++)e[l]=m*c-i,e[l+1]=-d,t[l+2]=1,h[p]=m/r,h[p+1]=1-f/n,l+=3,p+=2;for(l=0,i=new(65535<e.length/3?Uint32Array:Uint16Array)(r*n*6),f=0;f<n;f++)for(m=0;m<r;m++)o=m+a*(f+1),s=m+1+a*(f+1),c=m+1+a*f,i[l]=m+a*f,i[l+1]=o,i[l+2]=c,i[l+3]=o,i[l+4]=s,i[l+5]=c,l+=6;this.setIndex(new ht(i,1)),this.addAttribute("position",new ht(e,3)),this.addAttribute("normal",new ht(t,3)),this.addAttribute("uv",new ht(h,2))}function Tt(){ot.call(this),this.type="Camera",this.matrixWorldInverse=new u,this.projectionMatrix=new u}function Ct(t,e,r,n){Tt.call(this),this.type="PerspectiveCamera",this.fov=void 0!==t?t:50,this.zoom=1,this.near=void 0!==r?r:.1,this.far=void 0!==n?n:2e3,this.focus=10,this.aspect=void 0!==e?e:1,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}function Ot(t,e,r,n,i,o){Tt.call(this),this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=r,this.bottom=n,this.near=void 0!==i?i:.1,this.far=void 0!==o?o:2e3,this.updateProjectionMatrix()}function Pt(t,e,r){var n,i,o;return{setMode:function(t){n=t},setIndex:function(r){r.array instanceof Uint32Array&&e.get("OES_element_index_uint")?(i=t.UNSIGNED_INT,o=4):r.array instanceof Uint16Array?(i=t.UNSIGNED_SHORT,o=2):(i=t.UNSIGNED_BYTE,o=1)},render:function(e,a){t.drawElements(n,a,i,e*o),r.calls++,r.vertices+=a,n===t.TRIANGLES&&(r.faces+=a/3)},renderInstances:function(a,s,c){var u=e.get("ANGLE_instanced_arrays");null===u?console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."):(u.drawElementsInstancedANGLE(n,c,i,s*o,a.maxInstancedCount),r.calls++,r.vertices+=c*a.maxInstancedCount,n===t.TRIANGLES&&(r.faces+=a.maxInstancedCount*c/3))}}}function At(t,e,r){var n;return{setMode:function(t){n=t},render:function(e,i){t.drawArrays(n,e,i),r.calls++,r.vertices+=i,n===t.TRIANGLES&&(r.faces+=i/3)},renderInstances:function(i){var o=e.get("ANGLE_instanced_arrays");if(null===o)console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{var a=i.attributes.position,a=a.isInterleavedBufferAttribute?a.data.count:a.count;o.drawArraysInstancedANGLE(n,0,a,i.maxInstancedCount),r.calls++,r.vertices+=a*i.maxInstancedCount,n===t.TRIANGLES&&(r.faces+=i.maxInstancedCount*a/3)}}}}function jt(){var t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];var n;switch(e.type){case"DirectionalLight":n={direction:new c,color:new G,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new r};break;case"SpotLight":n={position:new c,direction:new c,color:new G,distance:0,coneCos:0,penumbraCos:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new r};break;case"PointLight":n={position:new c,color:new G,distance:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new r};break;case"HemisphereLight":n={direction:new c,skyColor:new G,groundColor:new G};break;case"RectAreaLight":n={color:new G,position:new c,halfWidth:new c,halfHeight:new c}}return t[e.id]=n}}}function Rt(t){t=t.split("\n");for(var e=0;e<t.length;e++)t[e]=e+1+": "+t[e];return t.join("\n")}function Lt(t,e,r){var n=t.createShader(e);return t.shaderSource(n,r),t.compileShader(n),!1===t.getShaderParameter(n,t.COMPILE_STATUS)&&console.error("THREE.WebGLShader: Shader couldn't compile."),""!==t.getShaderInfoLog(n)&&console.warn("THREE.WebGLShader: gl.getShaderInfoLog()",e===t.VERTEX_SHADER?"vertex":"fragment",t.getShaderInfoLog(n),Rt(r)),n}function Nt(t){switch(t){case 3e3:return["Linear","( value )"];case 3001:return["sRGB","( value )"];case 3002:return["RGBE","( value )"];case 3004:return["RGBM","( value, 7.0 )"];case 3005:return["RGBM","( value, 16.0 )"];case 3006:return["RGBD","( value, 256.0 )"];case 3007:return["Gamma","( value, float( GAMMA_FACTOR ) )"];default:throw Error("unsupported encoding: "+t)}}function It(t,e){var r=Nt(e);return"vec4 "+t+"( vec4 value ) { return "+r[0]+"ToLinear"+r[1]+"; }"}function Dt(t,e){var r=Nt(e);return"vec4 "+t+"( vec4 value ) { return LinearTo"+r[0]+r[1]+"; }"}function kt(t,e){var r;switch(e){case 1:r="Linear";break;case 2:r="Reinhard";break;case 3:r="Uncharted2";break;case 4:r="OptimizedCineon";break;default:throw Error("unsupported toneMapping: "+e)}return"vec3 "+t+"( vec3 color ) { return "+r+"ToneMapping( color ); }"}function Ft(t,e,r){return t=t||{},[t.derivatives||e.envMapCubeUV||e.bumpMap||e.normalMap||e.flatShading?"#extension GL_OES_standard_derivatives : enable":"",(t.fragDepth||e.logarithmicDepthBuffer)&&r.get("EXT_frag_depth")?"#extension GL_EXT_frag_depth : enable":"",t.drawBuffers&&r.get("WEBGL_draw_buffers")?"#extension GL_EXT_draw_buffers : require":"",(t.shaderTextureLOD||e.envMap)&&r.get("EXT_shader_texture_lod")?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Bt).join("\n")}function Ut(t){var e,r=[];for(e in t){var n=t[e];!1!==n&&r.push("#define "+e+" "+n)}return r.join("\n")}function Bt(t){return""!==t}function zt(t,e){return t.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights)}function Gt(t){return t.replace(/#include +<([\w\d.]+)>/g,function(t,e){var r=hi[e];if(void 0===r)throw Error("Can not resolve #include <"+e+">");return Gt(r)})}function $t(t){return t.replace(/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(t,e,r,n){for(t="",e=parseInt(e);e<parseInt(r);e++)t+=n.replace(/\[ i \]/g,"[ "+e+" ]");return t})}function Vt(t,e,r,n){var i=t.context,o=r.extensions,a=r.defines,s=r.__webglShader.vertexShader,c=r.__webglShader.fragmentShader,u="SHADOWMAP_TYPE_BASIC";1===n.shadowMapType?u="SHADOWMAP_TYPE_PCF":2===n.shadowMapType&&(u="SHADOWMAP_TYPE_PCF_SOFT");var h="ENVMAP_TYPE_CUBE",l="ENVMAP_MODE_REFLECTION",p="ENVMAP_BLENDING_MULTIPLY";if(n.envMap){switch(r.envMap.mapping){case 301:case 302:h="ENVMAP_TYPE_CUBE";break;case 306:case 307:h="ENVMAP_TYPE_CUBE_UV";break;case 303:case 304:h="ENVMAP_TYPE_EQUIREC";break;case 305:h="ENVMAP_TYPE_SPHERE"}switch(r.envMap.mapping){case 302:case 304:l="ENVMAP_MODE_REFRACTION"}switch(r.combine){case 0:p="ENVMAP_BLENDING_MULTIPLY";break;case 1:p="ENVMAP_BLENDING_MIX";break;case 2:p="ENVMAP_BLENDING_ADD"}}var f=0<t.gammaFactor?t.gammaFactor:1,o=Ft(o,n,t.extensions),d=Ut(a),m=i.createProgram();r.isRawShaderMaterial?(a=[d,"\n"].filter(Bt).join("\n"),u=[o,d,"\n"].filter(Bt).join("\n")):(a=["precision "+n.precision+" float;","precision "+n.precision+" int;","#define SHADER_NAME "+r.__webglShader.name,d,n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+f,"#define MAX_BONES "+n.maxBones,n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+l:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.vertexColors?"#define USE_COLOR":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"","#define NUM_CLIPPING_PLANES "+n.numClippingPlanes,n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+u:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&t.extensions.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Bt).join("\n"),u=[o,"precision "+n.precision+" float;","precision "+n.precision+" int;","#define SHADER_NAME "+r.__webglShader.name,d,n.alphaTest?"#define ALPHATEST "+n.alphaTest:"","#define GAMMA_FACTOR "+f,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+h:"",n.envMap?"#define "+l:"",n.envMap?"#define "+p:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.vertexColors?"#define USE_COLOR":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"","#define NUM_CLIPPING_PLANES "+n.numClippingPlanes,"#define UNION_CLIPPING_PLANES "+(n.numClippingPlanes-n.numClipIntersection),n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+u:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&t.extensions.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"",n.envMap&&t.extensions.get("EXT_shader_texture_lod")?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;",0!==n.toneMapping?"#define TONE_MAPPING":"",0!==n.toneMapping?hi.tonemapping_pars_fragment:"",0!==n.toneMapping?kt("toneMapping",n.toneMapping):"",n.outputEncoding||n.mapEncoding||n.envMapEncoding||n.emissiveMapEncoding?hi.encodings_pars_fragment:"",n.mapEncoding?It("mapTexelToLinear",n.mapEncoding):"",n.envMapEncoding?It("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMapEncoding?It("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.outputEncoding?Dt("linearToOutputTexel",n.outputEncoding):"",n.depthPacking?"#define DEPTH_PACKING "+r.depthPacking:"","\n"].filter(Bt).join("\n")),s=Gt(s,n),s=zt(s,n),c=Gt(c,n),c=zt(c,n),r.isShaderMaterial||(s=$t(s),c=$t(c)),c=u+c,s=Lt(i,i.VERTEX_SHADER,a+s),c=Lt(i,i.FRAGMENT_SHADER,c),i.attachShader(m,s),i.attachShader(m,c),void 0!==r.index0AttributeName?i.bindAttribLocation(m,0,r.index0AttributeName):!0===n.morphTargets&&i.bindAttribLocation(m,0,"position"),i.linkProgram(m),n=i.getProgramInfoLog(m),h=i.getShaderInfoLog(s),l=i.getShaderInfoLog(c),f=p=!0,!1===i.getProgramParameter(m,i.LINK_STATUS)?(p=!1,console.error("THREE.WebGLProgram: shader error: ",i.getError(),"gl.VALIDATE_STATUS",i.getProgramParameter(m,i.VALIDATE_STATUS),"gl.getProgramInfoLog",n,h,l)):""!==n?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",n):""!==h&&""!==l||(f=!1),f&&(this.diagnostics={runnable:p,material:r,programLog:n,vertexShader:{log:h,prefix:a},fragmentShader:{log:l,prefix:u}}),i.deleteShader(s),i.deleteShader(c);var v;this.getUniforms=function(){return void 0===v&&(v=new z(i,m,t)),v};var g;return this.getAttributes=function(){if(void 0===g){for(var t={},e=i.getProgramParameter(m,i.ACTIVE_ATTRIBUTES),r=0;r<e;r++){var n=i.getActiveAttrib(m,r).name;t[n]=i.getAttribLocation(m,n)}g=t}return g},this.destroy=function(){i.deleteProgram(m),this.program=void 0},Object.defineProperties(this,{uniforms:{get:function(){return console.warn("THREE.WebGLProgram: .uniforms is now .getUniforms()."),this.getUniforms()}},attributes:{get:function(){return console.warn("THREE.WebGLProgram: .attributes is now .getAttributes()."),this.getAttributes()}}}),this.id=gi++,this.code=e,this.usedTimes=1,this.program=m,this.vertexShader=s,this.fragmentShader=c,this}function Ht(t,e){function r(t,e){var r;return t?t.isTexture?r=t.encoding:t.isWebGLRenderTarget&&(console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."),r=t.texture.encoding):r=3e3,3e3===r&&e&&(r=3007),r}var n=[],i={MeshDepthMaterial:"depth",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"phong",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points"},o="precision supportsVertexTextures map mapEncoding envMap envMapMode envMapEncoding lightMap aoMap emissiveMap emissiveMapEncoding bumpMap normalMap displacementMap specularMap roughnessMap metalnessMap gradientMap alphaMap combine vertexColors fog useFog fogExp flatShading sizeAttenuation logarithmicDepthBuffer skinning maxBones useVertexTexture morphTargets morphNormals maxMorphTargets maxMorphNormals premultipliedAlpha numDirLights numPointLights numSpotLights numHemiLights numRectAreaLights shadowMapEnabled shadowMapType toneMapping physicallyCorrectLights alphaTest doubleSided flipSided numClippingPlanes numClipIntersection depthPacking".split(" ");this.getParameters=function(n,o,a,s,c,u){var h,l=i[n.type];e.floatVertexTextures&&u&&u.skeleton&&u.skeleton.useVertexTexture?h=1024:(h=Math.floor((e.maxVertexUniforms-20)/4),void 0!==u&&u&&u.isSkinnedMesh&&(h=Math.min(u.skeleton.bones.length,h))<u.skeleton.bones.length&&console.warn("WebGLRenderer: too many bones - "+u.skeleton.bones.length+", this GPU supports just "+h+" (try OpenGL instead of ANGLE)"));var p=t.getPrecision();null!==n.precision&&(p=e.getMaxPrecision(n.precision))!==n.precision&&console.warn("THREE.WebGLProgram.getParameters:",n.precision,"not supported, using",p,"instead.");var f=t.getCurrentRenderTarget();return{shaderID:l,precision:p,supportsVertexTextures:e.vertexTextures,outputEncoding:r(f?f.texture:null,t.gammaOutput),map:!!n.map,mapEncoding:r(n.map,t.gammaInput),envMap:!!n.envMap,envMapMode:n.envMap&&n.envMap.mapping,envMapEncoding:r(n.envMap,t.gammaInput),envMapCubeUV:!!n.envMap&&(306===n.envMap.mapping||307===n.envMap.mapping),lightMap:!!n.lightMap,aoMap:!!n.aoMap,emissiveMap:!!n.emissiveMap,emissiveMapEncoding:r(n.emissiveMap,t.gammaInput),bumpMap:!!n.bumpMap,normalMap:!!n.normalMap,displacementMap:!!n.displacementMap,roughnessMap:!!n.roughnessMap,metalnessMap:!!n.metalnessMap,specularMap:!!n.specularMap,alphaMap:!!n.alphaMap,gradientMap:!!n.gradientMap,combine:n.combine,vertexColors:n.vertexColors,fog:!!a,useFog:n.fog,fogExp:a&&a.isFogExp2,flatShading:1===n.shading,sizeAttenuation:n.sizeAttenuation,logarithmicDepthBuffer:e.logarithmicDepthBuffer,skinning:n.skinning,maxBones:h,useVertexTexture:e.floatVertexTextures&&u&&u.skeleton&&u.skeleton.useVertexTexture,morphTargets:n.morphTargets,morphNormals:n.morphNormals,maxMorphTargets:t.maxMorphTargets,maxMorphNormals:t.maxMorphNormals,numDirLights:o.directional.length,numPointLights:o.point.length,numSpotLights:o.spot.length,numRectAreaLights:o.rectArea.length,numHemiLights:o.hemi.length,numClippingPlanes:s,numClipIntersection:c,shadowMapEnabled:t.shadowMap.enabled&&u.receiveShadow&&0<o.shadows.length,shadowMapType:t.shadowMap.type,toneMapping:t.toneMapping,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:n.premultipliedAlpha,alphaTest:n.alphaTest,doubleSided:2===n.side,flipSided:1===n.side,depthPacking:void 0!==n.depthPacking&&n.depthPacking}},this.getProgramCode=function(t,e){var r=[];if(e.shaderID?r.push(e.shaderID):(r.push(t.fragmentShader),r.push(t.vertexShader)),void 0!==t.defines)for(var n in t.defines)r.push(n),r.push(t.defines[n]);for(n=0;n<o.length;n++)r.push(e[o[n]]);return r.join()},this.acquireProgram=function(e,r,i){for(var o,a=0,s=n.length;a<s;a++){var c=n[a];if(c.code===i){o=c,++o.usedTimes;break}}return void 0===o&&(o=new Vt(t,i,e,r),n.push(o)),o},this.releaseProgram=function(t){if(0==--t.usedTimes){var e=n.indexOf(t);n[e]=n[n.length-1],n.pop(),t.destroy()}},this.programs=n}function Wt(t,e,r){function n(t){var a=t.target;t=o[a.id],null!==t.index&&i(t.index);var s,c=t.attributes;for(s in c)i(c[s]);a.removeEventListener("dispose",n),delete o[a.id],s=e.get(a),s.wireframe&&i(s.wireframe),e.delete(a),a=e.get(t),a.wireframe&&i(a.wireframe),e.delete(t),r.memory.geometries--}function i(r){var n;void 0!==(n=r.isInterleavedBufferAttribute?e.get(r.data).__webglBuffer:e.get(r).__webglBuffer)&&(t.deleteBuffer(n),r.isInterleavedBufferAttribute?e.delete(r.data):e.delete(r))}var o={};return{get:function(t){var e=t.geometry;if(void 0!==o[e.id])return o[e.id];e.addEventListener("dispose",n);var i;return e.isBufferGeometry?i=e:e.isGeometry&&(void 0===e._bufferGeometry&&(e._bufferGeometry=(new wt).setFromObject(t)),i=e._bufferGeometry),o[e.id]=i,r.memory.geometries++,i}}}function qt(t,e,r){function n(r,n){var i=r.isInterleavedBufferAttribute?r.data:r,o=e.get(i);if(void 0===o.__webglBuffer){o.__webglBuffer=t.createBuffer(),t.bindBuffer(n,o.__webglBuffer),t.bufferData(n,i.array,i.dynamic?t.DYNAMIC_DRAW:t.STATIC_DRAW);var a=t.FLOAT,s=i.array;s instanceof Float32Array?a=t.FLOAT:s instanceof Float64Array?console.warn("Unsupported data buffer format: Float64Array"):s instanceof Uint16Array?a=t.UNSIGNED_SHORT:s instanceof Int16Array?a=t.SHORT:s instanceof Uint32Array?a=t.UNSIGNED_INT:s instanceof Int32Array?a=t.INT:s instanceof Int8Array?a=t.BYTE:s instanceof Uint8Array&&(a=t.UNSIGNED_BYTE),o.bytesPerElement=s.BYTES_PER_ELEMENT,o.type=a,o.version=i.version,i.onUploadCallback()}else o.version!==i.version&&(t.bindBuffer(n,o.__webglBuffer),
+!1===i.dynamic?t.bufferData(n,i.array,t.STATIC_DRAW):-1===i.updateRange.count?t.bufferSubData(n,0,i.array):0===i.updateRange.count?console.error("THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually."):(t.bufferSubData(n,i.updateRange.offset*i.array.BYTES_PER_ELEMENT,i.array.subarray(i.updateRange.offset,i.updateRange.offset+i.updateRange.count)),i.updateRange.count=0),o.version=i.version)}var i=new Wt(t,e,r);return{getAttributeBuffer:function(t){return t.isInterleavedBufferAttribute?e.get(t.data).__webglBuffer:e.get(t).__webglBuffer},getAttributeProperties:function(t){return t.isInterleavedBufferAttribute?e.get(t.data):e.get(t)},getWireframeAttribute:function(r){var i=e.get(r);if(void 0!==i.wireframe)return i.wireframe;var o=[],a=r.index,s=r.attributes;if(r=s.position,null!==a)for(var a=a.array,s=0,c=a.length;s<c;s+=3){var u=a[s+0],h=a[s+1],l=a[s+2];o.push(u,h,h,l,l,u)}else for(a=s.position.array,s=0,c=a.length/3-1;s<c;s+=3)u=s+0,h=s+1,l=s+2,o.push(u,h,h,l,l,u);return o=new ht(new(65535<r.count?Uint32Array:Uint16Array)(o),1),n(o,t.ELEMENT_ARRAY_BUFFER),i.wireframe=o},update:function(e){var r=i.get(e);e.geometry.isGeometry&&r.updateFromObject(e),e=r.index;var o=r.attributes;null!==e&&n(e,t.ELEMENT_ARRAY_BUFFER);for(var a in o)n(o[a],t.ARRAY_BUFFER);e=r.morphAttributes;for(a in e)for(var o=e[a],s=0,c=o.length;s<c;s++)n(o[s],t.ARRAY_BUFFER);return r}}}function Xt(t,e,r,n,i,o,a){function s(t,e){if(t.width>e||t.height>e){var r=e/Math.max(t.width,t.height),n=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");return n.width=Math.floor(t.width*r),n.height=Math.floor(t.height*r),n.getContext("2d").drawImage(t,0,0,t.width,t.height,0,0,n.width,n.height),console.warn("THREE.WebGLRenderer: image is too big ("+t.width+"x"+t.height+"). Resized to "+n.width+"x"+n.height,t),n}return t}function c(t){return ri.isPowerOfTwo(t.width)&&ri.isPowerOfTwo(t.height)}function u(e){return 1003===e||1004===e||1005===e?t.NEAREST:t.LINEAR}function h(e){e=e.target,e.removeEventListener("dispose",h);t:{var r=n.get(e);if(e.image&&r.__image__webglTextureCube)t.deleteTexture(r.__image__webglTextureCube);else{if(void 0===r.__webglInit)break t;t.deleteTexture(r.__webglTexture)}n.delete(e)}v.textures--}function l(e){e=e.target,e.removeEventListener("dispose",l);var r=n.get(e),i=n.get(e.texture);if(e){if(void 0!==i.__webglTexture&&t.deleteTexture(i.__webglTexture),e.depthTexture&&e.depthTexture.dispose(),e.isWebGLRenderTargetCube)for(i=0;6>i;i++)t.deleteFramebuffer(r.__webglFramebuffer[i]),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer[i]);else t.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer);n.delete(e.texture),n.delete(e)}v.textures--}function p(e,a){var u=n.get(e);if(0<e.version&&u.__version!==e.version){var l=e.image;if(void 0===l)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined",e);else{if(!1!==l.complete){void 0===u.__webglInit&&(u.__webglInit=!0,e.addEventListener("dispose",h),u.__webglTexture=t.createTexture(),v.textures++),r.activeTexture(t.TEXTURE0+a),r.bindTexture(t.TEXTURE_2D,u.__webglTexture),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,e.flipY),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,e.premultiplyAlpha),t.pixelStorei(t.UNPACK_ALIGNMENT,e.unpackAlignment);var p=s(e.image,i.maxTextureSize);if((1001!==e.wrapS||1001!==e.wrapT||1003!==e.minFilter&&1006!==e.minFilter)&&!1===c(p))if((l=p)instanceof HTMLImageElement||l instanceof HTMLCanvasElement){var d=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");d.width=ri.nearestPowerOfTwo(l.width),d.height=ri.nearestPowerOfTwo(l.height),d.getContext("2d").drawImage(l,0,0,d.width,d.height),console.warn("THREE.WebGLRenderer: image is not power of two ("+l.width+"x"+l.height+"). Resized to "+d.width+"x"+d.height,l),p=d}else p=l;var l=c(p),d=o(e.format),m=o(e.type);f(t.TEXTURE_2D,e,l);var y=e.mipmaps;if(e.isDepthTexture){if(y=t.DEPTH_COMPONENT,1015===e.type){if(!g)throw Error("Float Depth Texture only supported in WebGL2.0");y=t.DEPTH_COMPONENT32F}else g&&(y=t.DEPTH_COMPONENT16);1026===e.format&&y===t.DEPTH_COMPONENT&&1012!==e.type&&1014!==e.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),e.type=1012,m=o(e.type)),1027===e.format&&(y=t.DEPTH_STENCIL,1020!==e.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),e.type=1020,m=o(e.type))),r.texImage2D(t.TEXTURE_2D,0,y,p.width,p.height,0,d,m,null)}else if(e.isDataTexture)if(0<y.length&&l){for(var b=0,_=y.length;b<_;b++)p=y[b],r.texImage2D(t.TEXTURE_2D,b,d,p.width,p.height,0,d,m,p.data);e.generateMipmaps=!1}else r.texImage2D(t.TEXTURE_2D,0,d,p.width,p.height,0,d,m,p.data);else if(e.isCompressedTexture)for(b=0,_=y.length;b<_;b++)p=y[b],1023!==e.format&&1022!==e.format?-1<r.getCompressedTextureFormats().indexOf(d)?r.compressedTexImage2D(t.TEXTURE_2D,b,d,p.width,p.height,0,p.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):r.texImage2D(t.TEXTURE_2D,b,d,p.width,p.height,0,d,m,p.data);else if(0<y.length&&l){for(b=0,_=y.length;b<_;b++)p=y[b],r.texImage2D(t.TEXTURE_2D,b,d,d,m,p);e.generateMipmaps=!1}else r.texImage2D(t.TEXTURE_2D,0,d,d,m,p);return e.generateMipmaps&&l&&t.generateMipmap(t.TEXTURE_2D),u.__version=e.version,void(e.onUpdate&&e.onUpdate(e))}console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete",e)}}r.activeTexture(t.TEXTURE0+a),r.bindTexture(t.TEXTURE_2D,u.__webglTexture)}function f(r,a,s){s?(t.texParameteri(r,t.TEXTURE_WRAP_S,o(a.wrapS)),t.texParameteri(r,t.TEXTURE_WRAP_T,o(a.wrapT)),t.texParameteri(r,t.TEXTURE_MAG_FILTER,o(a.magFilter)),t.texParameteri(r,t.TEXTURE_MIN_FILTER,o(a.minFilter))):(t.texParameteri(r,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(r,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),1001===a.wrapS&&1001===a.wrapT||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.",a),t.texParameteri(r,t.TEXTURE_MAG_FILTER,u(a.magFilter)),t.texParameteri(r,t.TEXTURE_MIN_FILTER,u(a.minFilter)),1003!==a.minFilter&&1006!==a.minFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.",a)),!(s=e.get("EXT_texture_filter_anisotropic"))||1015===a.type&&null===e.get("OES_texture_float_linear")||1016===a.type&&null===e.get("OES_texture_half_float_linear")||!(1<a.anisotropy||n.get(a).__currentAnisotropy)||(t.texParameterf(r,s.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,i.getMaxAnisotropy())),n.get(a).__currentAnisotropy=a.anisotropy)}function d(e,i,a,s){var c=o(i.texture.format),u=o(i.texture.type);r.texImage2D(s,0,c,i.width,i.height,0,c,u,null),t.bindFramebuffer(t.FRAMEBUFFER,e),t.framebufferTexture2D(t.FRAMEBUFFER,a,s,n.get(i.texture).__webglTexture,0),t.bindFramebuffer(t.FRAMEBUFFER,null)}function m(e,r){t.bindRenderbuffer(t.RENDERBUFFER,e),r.depthBuffer&&!r.stencilBuffer?(t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,r.width,r.height),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,e)):r.depthBuffer&&r.stencilBuffer?(t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,r.width,r.height),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,e)):t.renderbufferStorage(t.RENDERBUFFER,t.RGBA4,r.width,r.height),t.bindRenderbuffer(t.RENDERBUFFER,null)}var v=a.memory,g="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext;this.setTexture2D=p,this.setTextureCube=function(e,a){var u=n.get(e);if(6===e.image.length)if(0<e.version&&u.__version!==e.version){u.__image__webglTextureCube||(e.addEventListener("dispose",h),u.__image__webglTextureCube=t.createTexture(),v.textures++),r.activeTexture(t.TEXTURE0+a),r.bindTexture(t.TEXTURE_CUBE_MAP,u.__image__webglTextureCube),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,e.flipY);for(var l=e&&e.isCompressedTexture,p=e.image[0]&&e.image[0].isDataTexture,d=[],m=0;6>m;m++)d[m]=l||p?p?e.image[m].image:e.image[m]:s(e.image[m],i.maxCubemapSize);var g=c(d[0]),y=o(e.format),b=o(e.type);for(f(t.TEXTURE_CUBE_MAP,e,g),m=0;6>m;m++)if(l)for(var _,x=d[m].mipmaps,w=0,S=x.length;w<S;w++)_=x[w],1023!==e.format&&1022!==e.format?-1<r.getCompressedTextureFormats().indexOf(y)?r.compressedTexImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+m,w,y,_.width,_.height,0,_.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):r.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+m,w,y,_.width,_.height,0,y,b,_.data);else p?r.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+m,0,y,d[m].width,d[m].height,0,y,b,d[m].data):r.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+m,0,y,y,b,d[m]);e.generateMipmaps&&g&&t.generateMipmap(t.TEXTURE_CUBE_MAP),u.__version=e.version,e.onUpdate&&e.onUpdate(e)}else r.activeTexture(t.TEXTURE0+a),r.bindTexture(t.TEXTURE_CUBE_MAP,u.__image__webglTextureCube)},this.setTextureCubeDynamic=function(e,i){r.activeTexture(t.TEXTURE0+i),r.bindTexture(t.TEXTURE_CUBE_MAP,n.get(e).__webglTexture)},this.setupRenderTarget=function(e){var i=n.get(e),o=n.get(e.texture);e.addEventListener("dispose",l),o.__webglTexture=t.createTexture(),v.textures++;var a=!0===e.isWebGLRenderTargetCube,s=c(e);if(a){i.__webglFramebuffer=[];for(var u=0;6>u;u++)i.__webglFramebuffer[u]=t.createFramebuffer()}else i.__webglFramebuffer=t.createFramebuffer();if(a){for(r.bindTexture(t.TEXTURE_CUBE_MAP,o.__webglTexture),f(t.TEXTURE_CUBE_MAP,e.texture,s),u=0;6>u;u++)d(i.__webglFramebuffer[u],e,t.COLOR_ATTACHMENT0,t.TEXTURE_CUBE_MAP_POSITIVE_X+u);e.texture.generateMipmaps&&s&&t.generateMipmap(t.TEXTURE_CUBE_MAP),r.bindTexture(t.TEXTURE_CUBE_MAP,null)}else r.bindTexture(t.TEXTURE_2D,o.__webglTexture),f(t.TEXTURE_2D,e.texture,s),d(i.__webglFramebuffer,e,t.COLOR_ATTACHMENT0,t.TEXTURE_2D),e.texture.generateMipmaps&&s&&t.generateMipmap(t.TEXTURE_2D),r.bindTexture(t.TEXTURE_2D,null);if(e.depthBuffer){if(i=n.get(e),o=!0===e.isWebGLRenderTargetCube,e.depthTexture){if(o)throw Error("target.depthTexture not supported in Cube render targets");if(e&&e.isWebGLRenderTargetCube)throw Error("Depth Texture with cube render targets is not supported!");if(t.bindFramebuffer(t.FRAMEBUFFER,i.__webglFramebuffer),!e.depthTexture||!e.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");if(n.get(e.depthTexture).__webglTexture&&e.depthTexture.image.width===e.width&&e.depthTexture.image.height===e.height||(e.depthTexture.image.width=e.width,e.depthTexture.image.height=e.height,e.depthTexture.needsUpdate=!0),p(e.depthTexture,0),i=n.get(e.depthTexture).__webglTexture,1026===e.depthTexture.format)t.framebufferTexture2D(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.TEXTURE_2D,i,0);else{if(1027!==e.depthTexture.format)throw Error("Unknown depthTexture format");t.framebufferTexture2D(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.TEXTURE_2D,i,0)}}else if(o)for(i.__webglDepthbuffer=[],o=0;6>o;o++)t.bindFramebuffer(t.FRAMEBUFFER,i.__webglFramebuffer[o]),i.__webglDepthbuffer[o]=t.createRenderbuffer(),m(i.__webglDepthbuffer[o],e);else t.bindFramebuffer(t.FRAMEBUFFER,i.__webglFramebuffer),i.__webglDepthbuffer=t.createRenderbuffer(),m(i.__webglDepthbuffer,e);t.bindFramebuffer(t.FRAMEBUFFER,null)}},this.updateRenderTargetMipmap=function(e){var i=e.texture;i.generateMipmaps&&c(e)&&1003!==i.minFilter&&1006!==i.minFilter&&(e=e&&e.isWebGLRenderTargetCube?t.TEXTURE_CUBE_MAP:t.TEXTURE_2D,i=n.get(i).__webglTexture,r.bindTexture(e,i),t.generateMipmap(e),r.bindTexture(e,null))}}function Yt(){var t={};return{get:function(e){e=e.uuid;var r=t[e];return void 0===r&&(r={},t[e]=r),r},delete:function(e){delete t[e.uuid]},clear:function(){t={}}}}function Kt(t,e,r){function n(e,r,n){var i=new Uint8Array(4),o=t.createTexture();for(t.bindTexture(e,o),t.texParameteri(e,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(e,t.TEXTURE_MAG_FILTER,t.NEAREST),e=0;e<n;e++)t.texImage2D(r+e,0,t.RGBA,1,1,0,t.RGBA,t.UNSIGNED_BYTE,i);return o}function o(e){!0!==b[e]&&(t.enable(e),b[e]=!0)}function a(e){!1!==b[e]&&(t.disable(e),b[e]=!1)}function s(e,n,i,s,c,u,h,l){0!==e?o(t.BLEND):a(t.BLEND),e===x&&l===O||(2===e?l?(t.blendEquationSeparate(t.FUNC_ADD,t.FUNC_ADD),t.blendFuncSeparate(t.ONE,t.ONE,t.ONE,t.ONE)):(t.blendEquation(t.FUNC_ADD),t.blendFunc(t.SRC_ALPHA,t.ONE)):3===e?l?(t.blendEquationSeparate(t.FUNC_ADD,t.FUNC_ADD),t.blendFuncSeparate(t.ZERO,t.ZERO,t.ONE_MINUS_SRC_COLOR,t.ONE_MINUS_SRC_ALPHA)):(t.blendEquation(t.FUNC_ADD),t.blendFunc(t.ZERO,t.ONE_MINUS_SRC_COLOR)):4===e?l?(t.blendEquationSeparate(t.FUNC_ADD,t.FUNC_ADD),t.blendFuncSeparate(t.ZERO,t.SRC_COLOR,t.ZERO,t.SRC_ALPHA)):(t.blendEquation(t.FUNC_ADD),t.blendFunc(t.ZERO,t.SRC_COLOR)):l?(t.blendEquationSeparate(t.FUNC_ADD,t.FUNC_ADD),t.blendFuncSeparate(t.ONE,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)):(t.blendEquationSeparate(t.FUNC_ADD,t.FUNC_ADD),t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA)),x=e,O=l),5===e?(c=c||n,u=u||i,h=h||s,n===w&&c===E||(t.blendEquationSeparate(r(n),r(c)),w=n,E=c),i===S&&s===M&&u===T&&h===C||(t.blendFuncSeparate(r(i),r(s),r(u),r(h)),S=i,M=s,T=u,C=h)):C=T=E=M=S=w=null}function c(t){f.setFunc(t)}function u(e){P!==e&&(e?t.frontFace(t.CW):t.frontFace(t.CCW),P=e)}function h(e){0!==e?(o(t.CULL_FACE),e!==A&&(1===e?t.cullFace(t.BACK):2===e?t.cullFace(t.FRONT):t.cullFace(t.FRONT_AND_BACK))):a(t.CULL_FACE),A=e}function l(e){void 0===e&&(e=t.TEXTURE0+I-1),k!==e&&(t.activeTexture(e),k=e)}var p=new function(){var e=!1,r=new i,n=null,o=new i;return{setMask:function(r){n===r||e||(t.colorMask(r,r,r,r),n=r)},setLocked:function(t){e=t},setClear:function(e,n,i,a,s){!0===s&&(e*=a,n*=a,i*=a),r.set(e,n,i,a),!1===o.equals(r)&&(t.clearColor(e,n,i,a),o.copy(r))},reset:function(){e=!1,n=null,o.set(0,0,0,1)}}},f=new function(){var e=!1,r=null,n=null,i=null;return{setTest:function(e){e?o(t.DEPTH_TEST):a(t.DEPTH_TEST)},setMask:function(n){r===n||e||(t.depthMask(n),r=n)},setFunc:function(e){if(n!==e){if(e)switch(e){case 0:t.depthFunc(t.NEVER);break;case 1:t.depthFunc(t.ALWAYS);break;case 2:t.depthFunc(t.LESS);break;case 3:t.depthFunc(t.LEQUAL);break;case 4:t.depthFunc(t.EQUAL);break;case 5:t.depthFunc(t.GEQUAL);break;case 6:t.depthFunc(t.GREATER);break;case 7:t.depthFunc(t.NOTEQUAL);break;default:t.depthFunc(t.LEQUAL)}else t.depthFunc(t.LEQUAL);n=e}},setLocked:function(t){e=t},setClear:function(e){i!==e&&(t.clearDepth(e),i=e)},reset:function(){e=!1,i=n=r=null}}},d=new function(){var e=!1,r=null,n=null,i=null,s=null,c=null,u=null,h=null,l=null;return{setTest:function(e){e?o(t.STENCIL_TEST):a(t.STENCIL_TEST)},setMask:function(n){r===n||e||(t.stencilMask(n),r=n)},setFunc:function(e,r,o){n===e&&i===r&&s===o||(t.stencilFunc(e,r,o),n=e,i=r,s=o)},setOp:function(e,r,n){c===e&&u===r&&h===n||(t.stencilOp(e,r,n),c=e,u=r,h=n)},setLocked:function(t){e=t},setClear:function(e){l!==e&&(t.clearStencil(e),l=e)},reset:function(){e=!1,l=h=u=c=s=i=n=r=null}}},m=t.getParameter(t.MAX_VERTEX_ATTRIBS),v=new Uint8Array(m),g=new Uint8Array(m),y=new Uint8Array(m),b={},_=null,x=null,w=null,S=null,M=null,E=null,T=null,C=null,O=!1,P=null,A=null,j=null,R=null,L=null,N=null,I=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS),m=parseFloat(/^WebGL\ ([0-9])/.exec(t.getParameter(t.VERSION))[1]),D=1<=parseFloat(m),k=null,F={},U=new i,B=new i,z={};return z[t.TEXTURE_2D]=n(t.TEXTURE_2D,t.TEXTURE_2D,1),z[t.TEXTURE_CUBE_MAP]=n(t.TEXTURE_CUBE_MAP,t.TEXTURE_CUBE_MAP_POSITIVE_X,6),{buffers:{color:p,depth:f,stencil:d},init:function(){p.setClear(0,0,0,1),f.setClear(1),d.setClear(0),o(t.DEPTH_TEST),c(3),u(!1),h(1),o(t.CULL_FACE),o(t.BLEND),s(1)},initAttributes:function(){for(var t=0,e=v.length;t<e;t++)v[t]=0},enableAttribute:function(r){v[r]=1,0===g[r]&&(t.enableVertexAttribArray(r),g[r]=1),0!==y[r]&&(e.get("ANGLE_instanced_arrays").vertexAttribDivisorANGLE(r,0),y[r]=0)},enableAttributeAndDivisor:function(e,r,n){v[e]=1,0===g[e]&&(t.enableVertexAttribArray(e),g[e]=1),y[e]!==r&&(n.vertexAttribDivisorANGLE(e,r),y[e]=r)},disableUnusedAttributes:function(){for(var e=0,r=g.length;e!==r;++e)g[e]!==v[e]&&(t.disableVertexAttribArray(e),g[e]=0)},enable:o,disable:a,getCompressedTextureFormats:function(){if(null===_&&(_=[],e.get("WEBGL_compressed_texture_pvrtc")||e.get("WEBGL_compressed_texture_s3tc")||e.get("WEBGL_compressed_texture_etc1")))for(var r=t.getParameter(t.COMPRESSED_TEXTURE_FORMATS),n=0;n<r.length;n++)_.push(r[n]);return _},setBlending:s,setColorWrite:function(t){p.setMask(t)},setDepthTest:function(t){f.setTest(t)},setDepthWrite:function(t){f.setMask(t)},setDepthFunc:c,setStencilTest:function(t){d.setTest(t)},setStencilWrite:function(t){d.setMask(t)},setStencilFunc:function(t,e,r){d.setFunc(t,e,r)},setStencilOp:function(t,e,r){d.setOp(t,e,r)},setFlipSided:u,setCullFace:h,setLineWidth:function(e){e!==j&&(D&&t.lineWidth(e),j=e)},setPolygonOffset:function(e,r,n){e?(o(t.POLYGON_OFFSET_FILL),(R!==r||L!==n)&&(t.polygonOffset(r,n),R=r,L=n)):a(t.POLYGON_OFFSET_FILL)},getScissorTest:function(){return N},setScissorTest:function(e){(N=e)?o(t.SCISSOR_TEST):a(t.SCISSOR_TEST)},activeTexture:l,bindTexture:function(e,r){null===k&&l();var n=F[k];void 0===n&&(n={type:void 0,texture:void 0},F[k]=n),n.type===e&&n.texture===r||(t.bindTexture(e,r||z[e]),n.type=e,n.texture=r)},compressedTexImage2D:function(){try{t.compressedTexImage2D.apply(t,arguments)}catch(t){console.error(t)}},texImage2D:function(){try{t.texImage2D.apply(t,arguments)}catch(t){console.error(t)}},scissor:function(e){!1===U.equals(e)&&(t.scissor(e.x,e.y,e.z,e.w),U.copy(e))},viewport:function(e){!1===B.equals(e)&&(t.viewport(e.x,e.y,e.z,e.w),B.copy(e))},reset:function(){for(var e=0;e<g.length;e++)1===g[e]&&(t.disableVertexAttribArray(e),g[e]=0);b={},k=_=null,F={},A=P=x=null,p.reset(),f.reset(),d.reset()}}}function Zt(t,e,r){function n(e){if("highp"===e){if(0<t.getShaderPrecisionFormat(t.VERTEX_SHADER,t.HIGH_FLOAT).precision&&0<t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.HIGH_FLOAT).precision)return"highp";e="mediump"}return"mediump"===e&&0<t.getShaderPrecisionFormat(t.VERTEX_SHADER,t.MEDIUM_FLOAT).precision&&0<t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.MEDIUM_FLOAT).precision?"mediump":"lowp"}var i,o=void 0!==r.precision?r.precision:"highp",a=n(o);a!==o&&(console.warn("THREE.WebGLRenderer:",o,"not supported, using",a,"instead."),o=a),r=!0===r.logarithmicDepthBuffer&&!!e.get("EXT_frag_depth");var a=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS),s=t.getParameter(t.MAX_VERTEX_TEXTURE_IMAGE_UNITS),c=t.getParameter(t.MAX_TEXTURE_SIZE),u=t.getParameter(t.MAX_CUBE_MAP_TEXTURE_SIZE),h=t.getParameter(t.MAX_VERTEX_ATTRIBS),l=t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS),p=t.getParameter(t.MAX_VARYING_VECTORS),f=t.getParameter(t.MAX_FRAGMENT_UNIFORM_VECTORS),d=0<s,m=!!e.get("OES_texture_float");return{getMaxAnisotropy:function(){if(void 0!==i)return i;var r=e.get("EXT_texture_filter_anisotropic");return i=null!==r?t.getParameter(r.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0},getMaxPrecision:n,precision:o,logarithmicDepthBuffer:r,maxTextures:a,maxVertexTextures:s,maxTextureSize:c,maxCubemapSize:u,maxAttributes:h,maxVertexUniforms:l,maxVaryings:p,maxFragmentUniforms:f,vertexTextures:d,floatFragmentTextures:m,floatVertexTextures:d&&m}}function Jt(t){var e={};return{get:function(r){if(void 0!==e[r])return e[r];var n;switch(r){case"WEBGL_depth_texture":n=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":n=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":n=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":n=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case"WEBGL_compressed_texture_etc1":n=t.getExtension("WEBGL_compressed_texture_etc1");break;default:n=t.getExtension(r)}return null===n&&console.warn("THREE.WebGLRenderer: "+r+" extension not supported."),e[r]=n}}}function Qt(){function t(){u.value!==n&&(u.value=n,u.needsUpdate=0<i),r.numPlanes=i,r.numIntersection=0}function e(t,e,n,i){var o=null!==t?t.length:0,a=null;if(0!==o){if(a=u.value,!0!==i||null===a)for(i=n+4*o,e=e.matrixWorldInverse,c.getNormalMatrix(e),(null===a||a.length<i)&&(a=new Float32Array(i)),i=0;i!==o;++i,n+=4)s.copy(t[i]).applyMatrix4(e,c),s.normal.toArray(a,n),a[n+3]=s.constant;u.value=a,u.needsUpdate=!0}return r.numPlanes=o,a}var r=this,n=null,i=0,o=!1,a=!1,s=new Q,c=new J,u={value:null,needsUpdate:!1};this.uniform=u,this.numIntersection=this.numPlanes=0,this.init=function(t,r,a){var s=0!==t.length||r||0!==i||o;return o=r,n=e(t,a,0),i=t.length,s},this.beginShadows=function(){a=!0,e(null)},this.endShadows=function(){a=!1,t()},this.setState=function(r,s,c,h,l,p){if(!o||null===r||0===r.length||a&&!c)a?e(null):t();else{c=a?0:i;var f=4*c,d=l.clippingState||null;for(u.value=d,d=e(r,h,f,p),r=0;r!==f;++r)d[r]=n[r];l.clippingState=d,this.numIntersection=s?this.numPlanes:0,this.numPlanes+=c}}}function te(t){function e(){Nt.init(),Nt.scissor(Y.copy(st).multiplyScalar(at)),Nt.viewport(J.copy(ht).multiplyScalar(at)),Nt.buffers.color.setClear(rt.r,rt.g,rt.b,nt,C)}function r(){q=F=null,V="",$=-1,Nt.reset()}function n(t){t.preventDefault(),r(),e(),It.clear()}function o(t){t=t.target,t.removeEventListener("dispose",o),a(t),It.delete(t)}function a(t){var e=It.get(t).program;t.program=void 0,void 0!==e&&Ft.releaseProgram(e)}function s(t,e){return Math.abs(e[0])-Math.abs(t[0])}function h(t,e){return t.object.renderOrder!==e.object.renderOrder?t.object.renderOrder-e.object.renderOrder:t.material.program&&e.material.program&&t.material.program!==e.material.program?t.material.program.id-e.material.program.id:t.material.id!==e.material.id?t.material.id-e.material.id:t.z!==e.z?t.z-e.z:t.id-e.id}function l(t,e){return t.object.renderOrder!==e.object.renderOrder?t.object.renderOrder-e.object.renderOrder:t.z!==e.z?e.z-t.z:t.id-e.id}function p(t,e,r,n,i){var o;r.transparent?(n=R,o=++L):(n=A,o=++j),o=n[o],void 0!==o?(o.id=t.id,o.object=t,o.geometry=e,o.material=r,o.z=gt.z,o.group=i):(o={id:t.id,object:t,geometry:e,material:r,z:gt.z,group:i},n.push(o))}function f(t){if(!lt.intersectsSphere(t))return!1;var e=pt.numPlanes;if(0===e)return!0;var r=k.clippingPlanes,n=t.center;t=-t.radius;var i=0;do{if(r[i].distanceToPoint(n)<t)return!1}while(++i!==e);return!0}function d(t,e){if(!1!==t.visible){if(0!=(t.layers.mask&e.layers.mask))if(t.isLight)P.push(t);else if(t.isSprite){var r;(r=!1===t.frustumCulled)||(mt.center.set(0,0,0),mt.radius=.7071067811865476,mt.applyMatrix4(t.matrixWorld),r=!0===f(mt)),r&&I.push(t)}else if(t.isLensFlare)D.push(t);else if(t.isImmediateRenderObject)!0===k.sortObjects&&(gt.setFromMatrixPosition(t.matrixWorld),gt.applyProjection(vt)),p(t,null,t.material,gt.z,null);else if((t.isMesh||t.isLine||t.isPoints)&&(t.isSkinnedMesh&&t.skeleton.update(),(r=!1===t.frustumCulled)||(r=t.geometry,null===r.boundingSphere&&r.computeBoundingSphere(),mt.copy(r.boundingSphere).applyMatrix4(t.matrixWorld),r=!0===f(mt)),r)){var n=t.material;if(!0===n.visible)if(!0===k.sortObjects&&(gt.setFromMatrixPosition(t.matrixWorld),gt.applyProjection(vt)),r=kt.update(t),n.isMultiMaterial)for(var i=r.groups,o=n.materials,n=0,a=i.length;n<a;n++){var s=i[n],c=o[s.materialIndex];!0===c.visible&&p(t,r,c,gt.z,s)}else p(t,r,n,gt.z,null)}for(r=t.children,n=0,a=r.length;n<a;n++)d(r[n],e)}}function m(t,e,r,n){for(var i=0,o=t.length;i<o;i++){var a=t[i],s=a.object,c=a.geometry,u=void 0===n?a.material:n,a=a.group;if(s.modelViewMatrix.multiplyMatrices(r.matrixWorldInverse,s.matrixWorld),s.normalMatrix.getNormalMatrix(s.modelViewMatrix),s.onBeforeRender(k,e,r,c,u,a),s.isImmediateRenderObject){v(u);var h=g(r,e.fog,u,s);V="",s.render(function(t){k.renderBufferImmediate(t,h,u)})}else k.renderBufferDirect(r,e.fog,c,u,s,a);s.onAfterRender(k,e,r,c,u,a)}}function v(t){2===t.side?Nt.disable(Tt.CULL_FACE):Nt.enable(Tt.CULL_FACE),Nt.setFlipSided(1===t.side),!0===t.transparent?Nt.setBlending(t.blending,t.blendEquation,t.blendSrc,t.blendDst,t.blendEquationAlpha,t.blendSrcAlpha,t.blendDstAlpha,t.premultipliedAlpha):Nt.setBlending(0),Nt.setDepthFunc(t.depthFunc),Nt.setDepthTest(t.depthTest),Nt.setDepthWrite(t.depthWrite),Nt.setColorWrite(t.colorWrite),Nt.setPolygonOffset(t.polygonOffset,t.polygonOffsetFactor,t.polygonOffsetUnits)}function g(t,e,r,n){Q=0;var i=It.get(r);if(ft&&(dt||t!==q)&&pt.setState(r.clippingPlanes,r.clipIntersection,r.clipShadows,t,i,t===q&&r.id===$),!1===r.needsUpdate&&(void 0===i.program?r.needsUpdate=!0:r.fog&&i.fog!==e?r.needsUpdate=!0:r.lights&&i.lightsHash!==_t.hash?r.needsUpdate=!0:void 0===i.numClippingPlanes||i.numClippingPlanes===pt.numPlanes&&i.numIntersection===pt.numIntersection||(r.needsUpdate=!0)),r.needsUpdate){t:{var s=It.get(r),c=Ft.getParameters(r,_t,e,pt.numPlanes,pt.numIntersection,n),u=Ft.getProgramCode(r,c),h=s.program,l=!0;if(void 0===h)r.addEventListener("dispose",o);else if(h.code!==u)a(r);else{if(void 0!==c.shaderID)break t;l=!1}if(l&&(c.shaderID?(h=fi[c.shaderID],s.__webglShader={name:r.type,uniforms:ui.clone(h.uniforms),vertexShader:h.vertexShader,fragmentShader:h.fragmentShader}):s.__webglShader={name:r.type,uniforms:r.uniforms,vertexShader:r.vertexShader,fragmentShader:r.fragmentShader},r.__webglShader=s.__webglShader,h=Ft.acquireProgram(r,c,u),s.program=h,r.program=h),c=h.getAttributes(),r.morphTargets)for(u=r.numSupportedMorphTargets=0;u<k.maxMorphTargets;u++)0<=c["morphTarget"+u]&&r.numSupportedMorphTargets++;if(r.morphNormals)for(u=r.numSupportedMorphNormals=0;u<k.maxMorphNormals;u++)0<=c["morphNormal"+u]&&r.numSupportedMorphNormals++;c=s.__webglShader.uniforms,(r.isShaderMaterial||r.isRawShaderMaterial)&&!0!==r.clipping||(s.numClippingPlanes=pt.numPlanes,s.numIntersection=pt.numIntersection,c.clippingPlanes=pt.uniform),s.fog=e,s.lightsHash=_t.hash,r.lights&&(c.ambientLightColor.value=_t.ambient,c.directionalLights.value=_t.directional,c.spotLights.value=_t.spot,c.rectAreaLights.value=_t.rectArea,c.pointLights.value=_t.point,c.hemisphereLights.value=_t.hemi,c.directionalShadowMap.value=_t.directionalShadowMap,c.directionalShadowMatrix.value=_t.directionalShadowMatrix,c.spotShadowMap.value=_t.spotShadowMap,c.spotShadowMatrix.value=_t.spotShadowMatrix,c.pointShadowMap.value=_t.pointShadowMap,c.pointShadowMatrix.value=_t.pointShadowMatrix),u=s.program.getUniforms(),c=z.seqWithValue(u.seq,c),s.uniformsList=c}r.needsUpdate=!1}var p=!1,l=h=!1,s=i.program,c=s.getUniforms(),u=i.__webglShader.uniforms;if(s.id!==F&&(Tt.useProgram(s.program),F=s.id,l=h=p=!0),r.id!==$&&($=r.id,h=!0),(p||t!==q)&&(c.set(Tt,t,"projectionMatrix"),Lt.logarithmicDepthBuffer&&c.setValue(Tt,"logDepthBufFC",2/(Math.log(t.far+1)/Math.LN2)),t!==q&&(q=t,l=h=!0),(r.isShaderMaterial||r.isMeshPhongMaterial||r.isMeshStandardMaterial||r.envMap)&&void 0!==(p=c.map.cameraPosition)&&p.setValue(Tt,gt.setFromMatrixPosition(t.matrixWorld)),(r.isMeshPhongMaterial||r.isMeshLambertMaterial||r.isMeshBasicMaterial||r.isMeshStandardMaterial||r.isShaderMaterial||r.skinning)&&c.setValue(Tt,"viewMatrix",t.matrixWorldInverse),c.set(Tt,k,"toneMappingExposure"),c.set(Tt,k,"toneMappingWhitePoint")),r.skinning&&(c.setOptional(Tt,n,"bindMatrix"),c.setOptional(Tt,n,"bindMatrixInverse"),t=n.skeleton)&&(Lt.floatVertexTextures&&t.useVertexTexture?(c.set(Tt,t,"boneTexture"),c.set(Tt,t,"boneTextureWidth"),c.set(Tt,t,"boneTextureHeight")):c.setOptional(Tt,t,"boneMatrices")),h){if(r.lights&&(t=l,u.ambientLightColor.needsUpdate=t,u.directionalLights.needsUpdate=t,u.pointLights.needsUpdate=t,u.spotLights.needsUpdate=t,u.rectAreaLights.needsUpdate=t,u.hemisphereLights.needsUpdate=t),e&&r.fog&&(u.fogColor.value=e.color,e.isFog?(u.fogNear.value=e.near,u.fogFar.value=e.far):e.isFogExp2&&(u.fogDensity.value=e.density)),r.isMeshBasicMaterial||r.isMeshLambertMaterial||r.isMeshPhongMaterial||r.isMeshStandardMaterial||r.isMeshNormalMaterial||r.isMeshDepthMaterial){u.opacity.value=r.opacity,u.diffuse.value=r.color,r.emissive&&u.emissive.value.copy(r.emissive).multiplyScalar(r.emissiveIntensity),u.map.value=r.map,u.specularMap.value=r.specularMap,u.alphaMap.value=r.alphaMap,r.lightMap&&(u.lightMap.value=r.lightMap,u.lightMapIntensity.value=r.lightMapIntensity),r.aoMap&&(u.aoMap.value=r.aoMap,u.aoMapIntensity.value=r.aoMapIntensity);var f;r.map?f=r.map:r.specularMap?f=r.specularMap:r.displacementMap?f=r.displacementMap:r.normalMap?f=r.normalMap:r.bumpMap?f=r.bumpMap:r.roughnessMap?f=r.roughnessMap:r.metalnessMap?f=r.metalnessMap:r.alphaMap?f=r.alphaMap:r.emissiveMap&&(f=r.emissiveMap),void 0!==f&&(f.isWebGLRenderTarget&&(f=f.texture),e=f.offset,f=f.repeat,u.offsetRepeat.value.set(e.x,e.y,f.x,f.y)),u.envMap.value=r.envMap,u.flipEnvMap.value=r.envMap&&r.envMap.isCubeTexture?-1:1,u.reflectivity.value=r.reflectivity,u.refractionRatio.value=r.refractionRatio}r.isLineBasicMaterial?(u.diffuse.value=r.color,u.opacity.value=r.opacity):r.isLineDashedMaterial?(u.diffuse.value=r.color,u.opacity.value=r.opacity,u.dashSize.value=r.dashSize,u.totalSize.value=r.dashSize+r.gapSize,u.scale.value=r.scale):r.isPointsMaterial?(u.diffuse.value=r.color,u.opacity.value=r.opacity,u.size.value=r.size*at,u.scale.value=.5*ot,u.map.value=r.map,null!==r.map&&(f=r.map.offset,r=r.map.repeat,u.offsetRepeat.value.set(f.x,f.y,r.x,r.y))):r.isMeshLambertMaterial?r.emissiveMap&&(u.emissiveMap.value=r.emissiveMap):r.isMeshToonMaterial?(y(u,r),r.gradientMap&&(u.gradientMap.value=r.gradientMap)):r.isMeshPhongMaterial?y(u,r):r.isMeshPhysicalMaterial?(u.clearCoat.value=r.clearCoat,u.clearCoatRoughness.value=r.clearCoatRoughness,b(u,r)):r.isMeshStandardMaterial?b(u,r):r.isMeshDepthMaterial?r.displacementMap&&(u.displacementMap.value=r.displacementMap,u.displacementScale.value=r.displacementScale,u.displacementBias.value=r.displacementBias):r.isMeshNormalMaterial&&(r.bumpMap&&(u.bumpMap.value=r.bumpMap,u.bumpScale.value=r.bumpScale),r.normalMap&&(u.normalMap.value=r.normalMap,u.normalScale.value.copy(r.normalScale)),r.displacementMap&&(u.displacementMap.value=r.displacementMap,u.displacementScale.value=r.displacementScale,u.displacementBias.value=r.displacementBias)),void 0!==u.ltcMat&&(u.ltcMat.value=THREE.UniformsLib.LTC_MAT_TEXTURE),void 0!==u.ltcMag&&(u.ltcMag.value=THREE.UniformsLib.LTC_MAG_TEXTURE),z.upload(Tt,i.uniformsList,u,k)}return c.set(Tt,n,"modelViewMatrix"),c.set(Tt,n,"normalMatrix"),c.setValue(Tt,"modelMatrix",n.matrixWorld),s}function y(t,e){t.specular.value=e.specular,t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale)),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}function b(t,e){t.roughness.value=e.roughness,t.metalness.value=e.metalness,e.roughnessMap&&(t.roughnessMap.value=e.roughnessMap),e.metalnessMap&&(t.metalnessMap.value=e.metalnessMap),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale)),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias),e.envMap&&(t.envMapIntensity.value=e.envMapIntensity)}function _(t){var e;if(1e3===t)return Tt.REPEAT;if(1001===t)return Tt.CLAMP_TO_EDGE
+;if(1002===t)return Tt.MIRRORED_REPEAT;if(1003===t)return Tt.NEAREST;if(1004===t)return Tt.NEAREST_MIPMAP_NEAREST;if(1005===t)return Tt.NEAREST_MIPMAP_LINEAR;if(1006===t)return Tt.LINEAR;if(1007===t)return Tt.LINEAR_MIPMAP_NEAREST;if(1008===t)return Tt.LINEAR_MIPMAP_LINEAR;if(1009===t)return Tt.UNSIGNED_BYTE;if(1017===t)return Tt.UNSIGNED_SHORT_4_4_4_4;if(1018===t)return Tt.UNSIGNED_SHORT_5_5_5_1;if(1019===t)return Tt.UNSIGNED_SHORT_5_6_5;if(1010===t)return Tt.BYTE;if(1011===t)return Tt.SHORT;if(1012===t)return Tt.UNSIGNED_SHORT;if(1013===t)return Tt.INT;if(1014===t)return Tt.UNSIGNED_INT;if(1015===t)return Tt.FLOAT;if(1016===t&&null!==(e=Rt.get("OES_texture_half_float")))return e.HALF_FLOAT_OES;if(1021===t)return Tt.ALPHA;if(1022===t)return Tt.RGB;if(1023===t)return Tt.RGBA;if(1024===t)return Tt.LUMINANCE;if(1025===t)return Tt.LUMINANCE_ALPHA;if(1026===t)return Tt.DEPTH_COMPONENT;if(1027===t)return Tt.DEPTH_STENCIL;if(100===t)return Tt.FUNC_ADD;if(101===t)return Tt.FUNC_SUBTRACT;if(102===t)return Tt.FUNC_REVERSE_SUBTRACT;if(200===t)return Tt.ZERO;if(201===t)return Tt.ONE;if(202===t)return Tt.SRC_COLOR;if(203===t)return Tt.ONE_MINUS_SRC_COLOR;if(204===t)return Tt.SRC_ALPHA;if(205===t)return Tt.ONE_MINUS_SRC_ALPHA;if(206===t)return Tt.DST_ALPHA;if(207===t)return Tt.ONE_MINUS_DST_ALPHA;if(208===t)return Tt.DST_COLOR;if(209===t)return Tt.ONE_MINUS_DST_COLOR;if(210===t)return Tt.SRC_ALPHA_SATURATE;if((2001===t||2002===t||2003===t||2004===t)&&null!==(e=Rt.get("WEBGL_compressed_texture_s3tc"))){if(2001===t)return e.COMPRESSED_RGB_S3TC_DXT1_EXT;if(2002===t)return e.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(2003===t)return e.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(2004===t)return e.COMPRESSED_RGBA_S3TC_DXT5_EXT}if((2100===t||2101===t||2102===t||2103===t)&&null!==(e=Rt.get("WEBGL_compressed_texture_pvrtc"))){if(2100===t)return e.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(2101===t)return e.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(2102===t)return e.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(2103===t)return e.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(2151===t&&null!==(e=Rt.get("WEBGL_compressed_texture_etc1")))return e.COMPRESSED_RGB_ETC1_WEBGL;if((103===t||104===t)&&null!==(e=Rt.get("EXT_blend_minmax"))){if(103===t)return e.MIN_EXT;if(104===t)return e.MAX_EXT}return 1020===t&&null!==(e=Rt.get("WEBGL_depth_texture"))?e.UNSIGNED_INT_24_8_WEBGL:0}console.log("THREE.WebGLRenderer","83"),t=t||{};var x=void 0!==t.canvas?t.canvas:document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),w=void 0!==t.context?t.context:null,S=void 0!==t.alpha&&t.alpha,M=void 0===t.depth||t.depth,E=void 0===t.stencil||t.stencil,T=void 0!==t.antialias&&t.antialias,C=void 0===t.premultipliedAlpha||t.premultipliedAlpha,O=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,P=[],A=[],j=-1,R=[],L=-1,N=new Float32Array(8),I=[],D=[];this.domElement=x,this.context=null,this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.physicallyCorrectLights=this.gammaOutput=this.gammaInput=!1,this.toneMappingWhitePoint=this.toneMappingExposure=this.toneMapping=1,this.maxMorphTargets=8,this.maxMorphNormals=4;var k=this,F=null,U=null,B=null,$=-1,V="",q=null,Y=new i,K=null,J=new i,Q=0,rt=new G(0),nt=0,it=x.width,ot=x.height,at=1,st=new i(0,0,it,ot),ct=!1,ht=new i(0,0,it,ot),lt=new tt,pt=new Qt,ft=!1,dt=!1,mt=new Z,vt=new u,gt=new c,yt=new u,bt=new u,_t={hash:"",ambient:[0,0,0],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],shadows:[]},xt={calls:0,vertices:0,faces:0,points:0};this.info={render:xt,memory:{geometries:0,textures:0},programs:null};var Tt;try{if(S={alpha:S,depth:M,stencil:E,antialias:T,premultipliedAlpha:C,preserveDrawingBuffer:O},null===(Tt=w||x.getContext("webgl",S)||x.getContext("experimental-webgl",S))){if(null!==x.getContext("webgl"))throw"Error creating WebGL context with your selected attributes.";throw"Error creating WebGL context."}void 0===Tt.getShaderPrecisionFormat&&(Tt.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}}),x.addEventListener("webglcontextlost",n,!1)}catch(t){console.error("THREE.WebGLRenderer: "+t)}var Rt=new Jt(Tt);Rt.get("WEBGL_depth_texture"),Rt.get("OES_texture_float"),Rt.get("OES_texture_float_linear"),Rt.get("OES_texture_half_float"),Rt.get("OES_texture_half_float_linear"),Rt.get("OES_standard_derivatives"),Rt.get("ANGLE_instanced_arrays"),Rt.get("OES_element_index_uint")&&(wt.MaxIndex=4294967296);var Lt=new Zt(Tt,Rt,t),Nt=new Kt(Tt,Rt,_),It=new Yt,Dt=new Xt(Tt,Rt,Nt,It,Lt,_,this.info),kt=new qt(Tt,It,this.info),Ft=new Ht(this,Lt),Ut=new jt;this.info.programs=Ft.programs;var Bt=new At(Tt,Rt,xt),zt=new Pt(Tt,Rt,xt),Gt=new Ot(-1,1,1,-1,0,1),$t=new Ct,Vt=new St(new Et(2,2),new ut({depthTest:!1,depthWrite:!1,fog:!1}));t=fi.cube;var Wt=new St(new Mt(5,5,5),new X({uniforms:t.uniforms,vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1}));e(),this.context=Tt,this.capabilities=Lt,this.extensions=Rt,this.properties=It,this.state=Nt;var te=new et(this,_t,kt,Lt);this.shadowMap=te;var ee=new W(this,I),re=new H(this,D);this.getContext=function(){return Tt},this.getContextAttributes=function(){return Tt.getContextAttributes()},this.forceContextLoss=function(){Rt.get("WEBGL_lose_context").loseContext()},this.getMaxAnisotropy=function(){return Lt.getMaxAnisotropy()},this.getPrecision=function(){return Lt.precision},this.getPixelRatio=function(){return at},this.setPixelRatio=function(t){void 0!==t&&(at=t,this.setSize(ht.z,ht.w,!1))},this.getSize=function(){return{width:it,height:ot}},this.setSize=function(t,e,r){it=t,ot=e,x.width=t*at,x.height=e*at,!1!==r&&(x.style.width=t+"px",x.style.height=e+"px"),this.setViewport(0,0,t,e)},this.setViewport=function(t,e,r,n){Nt.viewport(ht.set(t,e,r,n))},this.setScissor=function(t,e,r,n){Nt.scissor(st.set(t,e,r,n))},this.setScissorTest=function(t){Nt.setScissorTest(ct=t)},this.getClearColor=function(){return rt},this.setClearColor=function(t,e){rt.set(t),nt=void 0!==e?e:1,Nt.buffers.color.setClear(rt.r,rt.g,rt.b,nt,C)},this.getClearAlpha=function(){return nt},this.setClearAlpha=function(t){nt=t,Nt.buffers.color.setClear(rt.r,rt.g,rt.b,nt,C)},this.clear=function(t,e,r){var n=0;(void 0===t||t)&&(n|=Tt.COLOR_BUFFER_BIT),(void 0===e||e)&&(n|=Tt.DEPTH_BUFFER_BIT),(void 0===r||r)&&(n|=Tt.STENCIL_BUFFER_BIT),Tt.clear(n)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.clearTarget=function(t,e,r,n){this.setRenderTarget(t),this.clear(e,r,n)},this.resetGLState=r,this.dispose=function(){R=[],L=-1,A=[],j=-1,x.removeEventListener("webglcontextlost",n,!1)},this.renderBufferImmediate=function(t,e,r){Nt.initAttributes();var n=It.get(t);if(t.hasPositions&&!n.position&&(n.position=Tt.createBuffer()),t.hasNormals&&!n.normal&&(n.normal=Tt.createBuffer()),t.hasUvs&&!n.uv&&(n.uv=Tt.createBuffer()),t.hasColors&&!n.color&&(n.color=Tt.createBuffer()),e=e.getAttributes(),t.hasPositions&&(Tt.bindBuffer(Tt.ARRAY_BUFFER,n.position),Tt.bufferData(Tt.ARRAY_BUFFER,t.positionArray,Tt.DYNAMIC_DRAW),Nt.enableAttribute(e.position),Tt.vertexAttribPointer(e.position,3,Tt.FLOAT,!1,0,0)),t.hasNormals){if(Tt.bindBuffer(Tt.ARRAY_BUFFER,n.normal),!r.isMeshPhongMaterial&&!r.isMeshStandardMaterial&&!r.isMeshNormalMaterial&&1===r.shading)for(var i=0,o=3*t.count;i<o;i+=9){var a=t.normalArray,s=(a[i+0]+a[i+3]+a[i+6])/3,c=(a[i+1]+a[i+4]+a[i+7])/3,u=(a[i+2]+a[i+5]+a[i+8])/3;a[i+0]=s,a[i+1]=c,a[i+2]=u,a[i+3]=s,a[i+4]=c,a[i+5]=u,a[i+6]=s,a[i+7]=c,a[i+8]=u}Tt.bufferData(Tt.ARRAY_BUFFER,t.normalArray,Tt.DYNAMIC_DRAW),Nt.enableAttribute(e.normal),Tt.vertexAttribPointer(e.normal,3,Tt.FLOAT,!1,0,0)}t.hasUvs&&r.map&&(Tt.bindBuffer(Tt.ARRAY_BUFFER,n.uv),Tt.bufferData(Tt.ARRAY_BUFFER,t.uvArray,Tt.DYNAMIC_DRAW),Nt.enableAttribute(e.uv),Tt.vertexAttribPointer(e.uv,2,Tt.FLOAT,!1,0,0)),t.hasColors&&0!==r.vertexColors&&(Tt.bindBuffer(Tt.ARRAY_BUFFER,n.color),Tt.bufferData(Tt.ARRAY_BUFFER,t.colorArray,Tt.DYNAMIC_DRAW),Nt.enableAttribute(e.color),Tt.vertexAttribPointer(e.color,3,Tt.FLOAT,!1,0,0)),Nt.disableUnusedAttributes(),Tt.drawArrays(Tt.TRIANGLES,0,t.count),t.count=0},this.renderBufferDirect=function(t,e,r,n,i,o){v(n);var a=g(t,e,n,i),c=!1;if(t=r.id+"_"+a.id+"_"+n.wireframe,t!==V&&(V=t,c=!0),void 0!==(e=i.morphTargetInfluences)){var u=[];t=0;for(var h=e.length;t<h;t++)c=e[t],u.push([c,t]);u.sort(s),8<u.length&&(u.length=8);var l=r.morphAttributes;for(t=0,h=u.length;t<h;t++)c=u[t],N[t]=c[0],0!==c[0]?(e=c[1],!0===n.morphTargets&&l.position&&r.addAttribute("morphTarget"+t,l.position[e]),!0===n.morphNormals&&l.normal&&r.addAttribute("morphNormal"+t,l.normal[e])):(!0===n.morphTargets&&r.removeAttribute("morphTarget"+t),!0===n.morphNormals&&r.removeAttribute("morphNormal"+t));for(t=u.length,e=N.length;t<e;t++)N[t]=0;a.getUniforms().setValue(Tt,"morphTargetInfluences",N),c=!0}if(e=r.index,h=r.attributes.position,u=1,!0===n.wireframe&&(e=kt.getWireframeAttribute(r),u=2),null!==e?(t=zt,t.setIndex(e)):t=Bt,c){var p,c=void 0;if(r&&r.isInstancedBufferGeometry&&null===(p=Rt.get("ANGLE_instanced_arrays")))console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{void 0===c&&(c=0),Nt.initAttributes();var f,l=r.attributes,a=a.getAttributes(),d=n.defaultAttributeValues;for(f in a){var m=a[f];if(0<=m){var y=l[f];if(void 0!==y){var b=y.normalized,_=y.itemSize,x=kt.getAttributeProperties(y),w=x.__webglBuffer,S=x.type,x=x.bytesPerElement;if(y.isInterleavedBufferAttribute){var M=y.data,E=M.stride,y=y.offset;M&&M.isInstancedInterleavedBuffer?(Nt.enableAttributeAndDivisor(m,M.meshPerAttribute,p),void 0===r.maxInstancedCount&&(r.maxInstancedCount=M.meshPerAttribute*M.count)):Nt.enableAttribute(m),Tt.bindBuffer(Tt.ARRAY_BUFFER,w),Tt.vertexAttribPointer(m,_,S,b,E*x,(c*E+y)*x)}else y.isInstancedBufferAttribute?(Nt.enableAttributeAndDivisor(m,y.meshPerAttribute,p),void 0===r.maxInstancedCount&&(r.maxInstancedCount=y.meshPerAttribute*y.count)):Nt.enableAttribute(m),Tt.bindBuffer(Tt.ARRAY_BUFFER,w),Tt.vertexAttribPointer(m,_,S,b,0,c*_*x)}else if(void 0!==d&&void 0!==(b=d[f]))switch(b.length){case 2:Tt.vertexAttrib2fv(m,b);break;case 3:Tt.vertexAttrib3fv(m,b);break;case 4:Tt.vertexAttrib4fv(m,b);break;default:Tt.vertexAttrib1fv(m,b)}}}Nt.disableUnusedAttributes()}null!==e&&Tt.bindBuffer(Tt.ELEMENT_ARRAY_BUFFER,kt.getAttributeBuffer(e))}if(p=0,null!==e?p=e.count:void 0!==h&&(p=h.count),e=r.drawRange.start*u,h=null!==o?o.start*u:0,f=Math.max(e,h),0!==(o=Math.max(0,Math.min(p,e+r.drawRange.count*u,h+(null!==o?o.count*u:1/0))-1-f+1))){if(i.isMesh)if(!0===n.wireframe)Nt.setLineWidth(n.wireframeLinewidth*(null===U?at:1)),t.setMode(Tt.LINES);else switch(i.drawMode){case 0:t.setMode(Tt.TRIANGLES);break;case 1:t.setMode(Tt.TRIANGLE_STRIP);break;case 2:t.setMode(Tt.TRIANGLE_FAN)}else i.isLine?(n=n.linewidth,void 0===n&&(n=1),Nt.setLineWidth(n*(null===U?at:1)),i.isLineSegments?t.setMode(Tt.LINES):t.setMode(Tt.LINE_STRIP)):i.isPoints&&t.setMode(Tt.POINTS);r&&r.isInstancedBufferGeometry?0<r.maxInstancedCount&&t.renderInstances(r,f,o):t.render(f,o)}},this.render=function(t,e,r,n){if(void 0!==e&&!0!==e.isCamera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{V="",$=-1,q=null,!0===t.autoUpdate&&t.updateMatrixWorld(),null===e.parent&&e.updateMatrixWorld(),e.matrixWorldInverse.getInverse(e.matrixWorld),vt.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),lt.setFromMatrix(vt),P.length=0,L=j=-1,I.length=0,D.length=0,dt=this.localClippingEnabled,ft=pt.init(this.clippingPlanes,dt,e),d(t,e),A.length=j+1,R.length=L+1,!0===k.sortObjects&&(A.sort(h),R.sort(l)),ft&&pt.beginShadows();for(var i=P,o=0,a=0,s=i.length;a<s;a++){var c=i[a];c.castShadow&&(_t.shadows[o++]=c)}_t.shadows.length=o,te.render(t,e);for(var p,f,v,g,i=P,y=c=0,b=0,_=e.matrixWorldInverse,x=0,w=0,S=0,M=0,E=0,o=0,a=i.length;o<a;o++)if(s=i[o],p=s.color,f=s.intensity,v=s.distance,g=s.shadow&&s.shadow.map?s.shadow.map.texture:null,s.isAmbientLight)c+=p.r*f,y+=p.g*f,b+=p.b*f;else if(s.isDirectionalLight){var T=Ut.get(s);T.color.copy(s.color).multiplyScalar(s.intensity),T.direction.setFromMatrixPosition(s.matrixWorld),gt.setFromMatrixPosition(s.target.matrixWorld),T.direction.sub(gt),T.direction.transformDirection(_),(T.shadow=s.castShadow)&&(T.shadowBias=s.shadow.bias,T.shadowRadius=s.shadow.radius,T.shadowMapSize=s.shadow.mapSize),_t.directionalShadowMap[x]=g,_t.directionalShadowMatrix[x]=s.shadow.matrix,_t.directional[x++]=T}else s.isSpotLight?(T=Ut.get(s),T.position.setFromMatrixPosition(s.matrixWorld),T.position.applyMatrix4(_),T.color.copy(p).multiplyScalar(f),T.distance=v,T.direction.setFromMatrixPosition(s.matrixWorld),gt.setFromMatrixPosition(s.target.matrixWorld),T.direction.sub(gt),T.direction.transformDirection(_),T.coneCos=Math.cos(s.angle),T.penumbraCos=Math.cos(s.angle*(1-s.penumbra)),T.decay=0===s.distance?0:s.decay,(T.shadow=s.castShadow)&&(T.shadowBias=s.shadow.bias,T.shadowRadius=s.shadow.radius,T.shadowMapSize=s.shadow.mapSize),_t.spotShadowMap[S]=g,_t.spotShadowMatrix[S]=s.shadow.matrix,_t.spot[S++]=T):s.isRectAreaLight?(T=Ut.get(s),T.color.copy(p).multiplyScalar(f/(s.width*s.height)),T.position.setFromMatrixPosition(s.matrixWorld),T.position.applyMatrix4(_),bt.identity(),yt.copy(s.matrixWorld),yt.premultiply(_),bt.extractRotation(yt),T.halfWidth.set(.5*s.width,0,0),T.halfHeight.set(0,.5*s.height,0),T.halfWidth.applyMatrix4(bt),T.halfHeight.applyMatrix4(bt),_t.rectArea[M++]=T):s.isPointLight?(T=Ut.get(s),T.position.setFromMatrixPosition(s.matrixWorld),T.position.applyMatrix4(_),T.color.copy(s.color).multiplyScalar(s.intensity),T.distance=s.distance,T.decay=0===s.distance?0:s.decay,(T.shadow=s.castShadow)&&(T.shadowBias=s.shadow.bias,T.shadowRadius=s.shadow.radius,T.shadowMapSize=s.shadow.mapSize),_t.pointShadowMap[w]=g,void 0===_t.pointShadowMatrix[w]&&(_t.pointShadowMatrix[w]=new u),gt.setFromMatrixPosition(s.matrixWorld).negate(),_t.pointShadowMatrix[w].identity().setPosition(gt),_t.point[w++]=T):s.isHemisphereLight&&(T=Ut.get(s),T.direction.setFromMatrixPosition(s.matrixWorld),T.direction.transformDirection(_),T.direction.normalize(),T.skyColor.copy(s.color).multiplyScalar(f),T.groundColor.copy(s.groundColor).multiplyScalar(f),_t.hemi[E++]=T);_t.ambient[0]=c,_t.ambient[1]=y,_t.ambient[2]=b,_t.directional.length=x,_t.spot.length=S,_t.rectArea.length=M,_t.point.length=w,_t.hemi.length=E,_t.hash=x+","+w+","+S+","+M+","+E+","+_t.shadows.length,ft&&pt.endShadows(),xt.calls=0,xt.vertices=0,xt.faces=0,xt.points=0,void 0===r&&(r=null),this.setRenderTarget(r),i=t.background,null===i?Nt.buffers.color.setClear(rt.r,rt.g,rt.b,nt,C):i&&i.isColor&&(Nt.buffers.color.setClear(i.r,i.g,i.b,1,C),n=!0),(this.autoClear||n)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil),i&&i.isCubeTexture?($t.projectionMatrix.copy(e.projectionMatrix),$t.matrixWorld.extractRotation(e.matrixWorld),$t.matrixWorldInverse.getInverse($t.matrixWorld),Wt.material.uniforms.tCube.value=i,Wt.modelViewMatrix.multiplyMatrices($t.matrixWorldInverse,Wt.matrixWorld),kt.update(Wt),k.renderBufferDirect($t,null,Wt.geometry,Wt.material,Wt,null)):i&&i.isTexture&&(Vt.material.map=i,kt.update(Vt),k.renderBufferDirect(Gt,null,Vt.geometry,Vt.material,Vt,null)),t.overrideMaterial?(n=t.overrideMaterial,m(A,t,e,n),m(R,t,e,n)):(Nt.setBlending(0),m(A,t,e),m(R,t,e)),ee.render(t,e),re.render(t,e,J),r&&Dt.updateRenderTargetMipmap(r),Nt.setDepthTest(!0),Nt.setDepthWrite(!0),Nt.setColorWrite(!0)}},this.setFaceCulling=function(t,e){Nt.setCullFace(t),Nt.setFlipSided(0===e)},this.allocTextureUnit=function(){var t=Q;return t>=Lt.maxTextures&&console.warn("WebGLRenderer: trying to use "+t+" texture units while this GPU supports only "+Lt.maxTextures),Q+=1,t},this.setTexture2D=function(){var t=!1;return function(e,r){e&&e.isWebGLRenderTarget&&(t||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),t=!0),e=e.texture),Dt.setTexture2D(e,r)}}(),this.setTexture=function(){var t=!1;return function(e,r){t||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."),t=!0),Dt.setTexture2D(e,r)}}(),this.setTextureCube=function(){var t=!1;return function(e,r){e&&e.isWebGLRenderTargetCube&&(t||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),t=!0),e=e.texture),e&&e.isCubeTexture||Array.isArray(e.image)&&6===e.image.length?Dt.setTextureCube(e,r):Dt.setTextureCubeDynamic(e,r)}}(),this.getCurrentRenderTarget=function(){return U},this.setRenderTarget=function(t){(U=t)&&void 0===It.get(t).__webglFramebuffer&&Dt.setupRenderTarget(t);var e,r=t&&t.isWebGLRenderTargetCube;t?(e=It.get(t),e=r?e.__webglFramebuffer[t.activeCubeFace]:e.__webglFramebuffer,Y.copy(t.scissor),K=t.scissorTest,J.copy(t.viewport)):(e=null,Y.copy(st).multiplyScalar(at),K=ct,J.copy(ht).multiplyScalar(at)),B!==e&&(Tt.bindFramebuffer(Tt.FRAMEBUFFER,e),B=e),Nt.scissor(Y),Nt.setScissorTest(K),Nt.viewport(J),r&&(r=It.get(t.texture),Tt.framebufferTexture2D(Tt.FRAMEBUFFER,Tt.COLOR_ATTACHMENT0,Tt.TEXTURE_CUBE_MAP_POSITIVE_X+t.activeCubeFace,r.__webglTexture,t.activeMipMapLevel))},this.readRenderTargetPixels=function(t,e,r,n,i,o){if(!1===(t&&t.isWebGLRenderTarget))console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");else{var a=It.get(t).__webglFramebuffer;if(a){var s=!1;a!==B&&(Tt.bindFramebuffer(Tt.FRAMEBUFFER,a),s=!0);try{var c=t.texture,u=c.format,h=c.type;1023!==u&&_(u)!==Tt.getParameter(Tt.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):1009===h||_(h)===Tt.getParameter(Tt.IMPLEMENTATION_COLOR_READ_TYPE)||1015===h&&(Rt.get("OES_texture_float")||Rt.get("WEBGL_color_buffer_float"))||1016===h&&Rt.get("EXT_color_buffer_half_float")?Tt.checkFramebufferStatus(Tt.FRAMEBUFFER)===Tt.FRAMEBUFFER_COMPLETE?0<=e&&e<=t.width-n&&0<=r&&r<=t.height-i&&Tt.readPixels(e,r,n,i,_(u),_(h),o):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{s&&Tt.bindFramebuffer(Tt.FRAMEBUFFER,B)}}}}}function ee(t,e){this.name="",this.color=new G(t),this.density=void 0!==e?e:25e-5}function re(t,e,r){this.name="",this.color=new G(t),this.near=void 0!==e?e:1,this.far=void 0!==r?r:1e3}function ne(){ot.call(this),this.type="Scene",this.overrideMaterial=this.fog=this.background=null,this.autoUpdate=!0}function ie(t,e,r,n,i){ot.call(this),this.lensFlares=[],this.positionScreen=new c,this.customUpdateCallback=void 0,void 0!==t&&this.add(t,e,r,n,i)}function oe(t){q.call(this),this.type="SpriteMaterial",this.color=new G(16777215),this.map=null,this.rotation=0,this.lights=this.fog=!1,this.setValues(t)}function ae(t){ot.call(this),this.type="Sprite",this.material=void 0!==t?t:new oe}function se(){ot.call(this),this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function ce(t,e,r){if(this.useVertexTexture=void 0===r||r,this.identityMatrix=new u,t=t||[],this.bones=t.slice(0),this.useVertexTexture?(t=Math.sqrt(4*this.bones.length),t=ri.nextPowerOfTwo(Math.ceil(t)),this.boneTextureHeight=this.boneTextureWidth=t=Math.max(t,4),this.boneMatrices=new Float32Array(this.boneTextureWidth*this.boneTextureHeight*4),this.boneTexture=new $(this.boneMatrices,this.boneTextureWidth,this.boneTextureHeight,1023,1015)):this.boneMatrices=new Float32Array(16*this.bones.length),void 0===e)this.calculateInverses();else if(this.bones.length===e.length)this.boneInverses=e.slice(0);else for(console.warn("THREE.Skeleton bonInverses is the wrong length."),this.boneInverses=[],e=0,t=this.bones.length;e<t;e++)this.boneInverses.push(new u)}function ue(){ot.call(this),this.type="Bone"}function he(t,e,r){if(St.call(this,t,e),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new u,this.bindMatrixInverse=new u,t=[],this.geometry&&void 0!==this.geometry.bones){for(var n,i=0,o=this.geometry.bones.length;i<o;++i)n=this.geometry.bones[i],e=new ue,t.push(e),e.name=n.name,e.position.fromArray(n.pos),e.quaternion.fromArray(n.rotq),void 0!==n.scl&&e.scale.fromArray(n.scl);for(i=0,o=this.geometry.bones.length;i<o;++i)n=this.geometry.bones[i],-1!==n.parent&&null!==n.parent&&void 0!==t[n.parent]?t[n.parent].add(t[i]):this.add(t[i])}this.normalizeSkinWeights(),this.updateMatrixWorld(!0),this.bind(new ce(t,void 0,r),this.matrixWorld)}function le(t){q.call(this),this.type="LineBasicMaterial",this.color=new G(16777215),this.linewidth=1,this.linejoin=this.linecap="round",this.lights=!1,this.setValues(t)}function pe(t,e,r){if(1===r)return console.warn("THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead."),new fe(t,e);ot.call(this),this.type="Line",this.geometry=void 0!==t?t:new wt,this.material=void 0!==e?e:new le({color:16777215*Math.random()})}function fe(t,e){pe.call(this,t,e),this.type="LineSegments"}function de(t){q.call(this),this.type="PointsMaterial",this.color=new G(16777215),this.map=null,this.size=1,this.sizeAttenuation=!0,this.lights=!1,this.setValues(t)}function me(t,e){ot.call(this),this.type="Points",this.geometry=void 0!==t?t:new wt,this.material=void 0!==e?e:new de({color:16777215*Math.random()})}function ve(){ot.call(this),this.type="Group"}function ge(t,e,r,i,o,a,s,c,u){function h(){requestAnimationFrame(h),t.readyState>=t.HAVE_CURRENT_DATA&&(l.needsUpdate=!0)}n.call(this,t,e,r,i,o,a,s,c,u),this.generateMipmaps=!1;var l=this;h()}function ye(t,e,r,i,o,a,s,c,u,h,l,p){n.call(this,null,a,s,c,u,h,i,o,l,p),this.image={width:e,height:r},this.mipmaps=t,this.generateMipmaps=this.flipY=!1}function be(t,e,r,i,o,a,s,c,u){n.call(this,t,e,r,i,o,a,s,c,u),this.needsUpdate=!0}function _e(t,e,r,i,o,a,s,c,u,h){if(1026!==(h=void 0!==h?h:1026)&&1027!==h)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===r&&1026===h&&(r=1012),void 0===r&&1027===h&&(r=1020),n.call(this,null,i,o,a,s,c,h,r,u),this.image={width:t,height:e},this.magFilter=void 0!==s?s:1003,this.minFilter=void 0!==c?c:1003,this.generateMipmaps=this.flipY=!1}function xe(t){function e(t,e){return t-e}wt.call(this);var r=[0,0],n={},i=["a","b","c"];if(t&&t.isGeometry){var o=t.vertices,a=t.faces,s=0,c=new Uint32Array(6*a.length);t=0;for(var u=a.length;t<u;t++)for(var h=a[t],l=0;3>l;l++){r[0]=h[i[l]],r[1]=h[i[(l+1)%3]],r.sort(e);var p=r.toString();void 0===n[p]&&(c[2*s]=r[0],c[2*s+1]=r[1],n[p]=!0,s++)}for(r=new Float32Array(6*s),t=0,u=s;t<u;t++)for(l=0;2>l;l++)n=o[c[2*t+l]],s=6*t+3*l,r[s+0]=n.x,r[s+1]=n.y,r[s+2]=n.z;this.addAttribute("position",new ht(r,3))}else if(t&&t.isBufferGeometry){if(null!==t.index){for(u=t.index.array,o=t.attributes.position,i=t.groups,s=0,0===i.length&&t.addGroup(0,u.length),c=new Uint32Array(2*u.length),a=0,h=i.length;a<h;++a){t=i[a],l=t.start,p=t.count,t=l;for(var f=l+p;t<f;t+=3)for(l=0;3>l;l++)r[0]=u[t+l],r[1]=u[t+(l+1)%3],r.sort(e),p=r.toString(),void 0===n[p]&&(c[2*s]=r[0],c[2*s+1]=r[1],n[p]=!0,s++)}for(r=new Float32Array(6*s),t=0,u=s;t<u;t++)for(l=0;2>l;l++)s=6*t+3*l,n=c[2*t+l],r[s+0]=o.getX(n),r[s+1]=o.getY(n),r[s+2]=o.getZ(n)}else for(o=t.attributes.position.array,s=o.length/3,c=s/3,r=new Float32Array(6*s),t=0,u=c;t<u;t++)for(l=0;3>l;l++)s=18*t+6*l,c=9*t+3*l,r[s+0]=o[c],r[s+1]=o[c+1],r[s+2]=o[c+2],n=9*t+(l+1)%3*3,r[s+3]=o[n],r[s+4]=o[n+1],r[s+5]=o[n+2];this.addAttribute("position",new ht(r,3))}}function we(t,e,r){wt.call(this),this.type="ParametricBufferGeometry",this.parameters={func:t,slices:e,stacks:r};var n,i,o,a,s,c=[],u=[],h=e+1;for(n=0;n<=r;n++)for(s=n/r,i=0;i<=e;i++)a=i/e,o=t(a,s),c.push(o.x,o.y,o.z),u.push(a,s);t=[];var l;for(n=0;n<r;n++)for(i=0;i<e;i++)o=n*h+i,a=n*h+i+1,s=(n+1)*h+i+1,l=(n+1)*h+i,t.push(o,a,l),t.push(a,s,l);this.setIndex(new(65535<t.length?gt:mt)(t,1)),this.addAttribute("position",new yt(c,3)),this.addAttribute("uv",new yt(u,2)),this.computeVertexNormals()}function Se(t,e,r){xt.call(this),this.type="ParametricGeometry",this.parameters={func:t,slices:e,stacks:r},this.fromBufferGeometry(new we(t,e,r)),this.mergeVertices()}function Me(t,e,n,i){function o(t){u.push(t.x,t.y,t.z)}function a(e,r){var n=3*e;r.x=t[n+0],r.y=t[n+1],r.z=t[n+2]}function s(t,e,r,n){0>n&&1===t.x&&(h[e]=t.x-1),0===r.x&&0===r.z&&(h[e]=n/2/Math.PI+.5)}wt.call(this),this.type="PolyhedronBufferGeometry",this.parameters={vertices:t,indices:e,radius:n,detail:i},n=n||1;var u=[],h=[];!function(t){for(var r=new c,n=new c,i=new c,s=0;s<e.length;s+=3){a(e[s+0],r),a(e[s+1],n),a(e[s+2],i);var u,h,l=r,p=n,f=i,d=Math.pow(2,t),m=[];for(u=0;u<=d;u++){m[u]=[];var v=l.clone().lerp(f,u/d),g=p.clone().lerp(f,u/d),y=d-u;for(h=0;h<=y;h++)m[u][h]=0===h&&u===d?v:v.clone().lerp(g,h/y)}for(u=0;u<d;u++)for(h=0;h<2*(d-u)-1;h++)l=Math.floor(h/2),0==h%2?(o(m[u][l+1]),o(m[u+1][l]),o(m[u][l])):(o(m[u][l+1]),o(m[u+1][l+1]),o(m[u+1][l]))}}(i||0),function(t){for(var e=new c,r=0;r<u.length;r+=3)e.x=u[r+0],e.y=u[r+1],e.z=u[r+2],e.normalize().multiplyScalar(t),u[r+0]=e.x,u[r+1]=e.y,u[r+2]=e.z}(n),function(){for(var t=new c,e=0;e<u.length;e+=3)t.x=u[e+0],t.y=u[e+1],t.z=u[e+2],h.push(Math.atan2(t.z,-t.x)/2/Math.PI+.5,1-(Math.atan2(-t.y,Math.sqrt(t.x*t.x+t.z*t.z))/Math.PI+.5));for(var t=new c,e=new c,n=new c,i=new c,o=new r,a=new r,l=new r,p=0,f=0;p<u.length;p+=9,f+=6){t.set(u[p+0],u[p+1],u[p+2]),e.set(u[p+3],u[p+4],u[p+5]),n.set(u[p+6],u[p+7],u[p+8]),o.set(h[f+0],h[f+1]),a.set(h[f+2],h[f+3]),l.set(h[f+4],h[f+5]),i.copy(t).add(e).add(n).divideScalar(3);var d=Math.atan2(i.z,-i.x);s(o,f+0,t,d),s(a,f+2,e,d),s(l,f+4,n,d)}for(t=0;t<h.length;t+=6)e=h[t+0],n=h[t+2],i=h[t+4],o=Math.min(e,n,i),.9<Math.max(e,n,i)&&.1>o&&(.2>e&&(h[t+0]+=1),.2>n&&(h[t+2]+=1),.2>i&&(h[t+4]+=1))}(),this.addAttribute("position",new yt(u,3)),this.addAttribute("normal",new yt(u.slice(),3)),this.addAttribute("uv",new yt(h,2)),this.normalizeNormals(),this.boundingSphere=new Z(new c,n)}function Ee(t,e){Me.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],t,e),this.type="TetrahedronBufferGeometry",this.parameters={radius:t,detail:e}}function Te(t,e){xt.call(this),this.type="TetrahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new Ee(t,e)),this.mergeVertices()}function Ce(t,e){Me.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],t,e),this.type="OctahedronBufferGeometry",this.parameters={radius:t,detail:e}}function Oe(t,e){xt.call(this),this.type="OctahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new Ce(t,e)),this.mergeVertices()}function Pe(t,e){var r=(1+Math.sqrt(5))/2;Me.call(this,[-1,r,0,1,r,0,-1,-r,0,1,-r,0,0,-1,r,0,1,r,0,-1,-r,0,1,-r,r,0,-1,r,0,1,-r,0,-1,-r,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],t,e),this.type="IcosahedronBufferGeometry",this.parameters={radius:t,detail:e}}function Ae(t,e){xt.call(this),this.type="IcosahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new Pe(t,e)),this.mergeVertices()}function je(t,e){var r=(1+Math.sqrt(5))/2,n=1/r;Me.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-n,-r,0,-n,r,0,n,-r,0,n,r,-n,-r,0,-n,r,0,n,-r,0,n,r,0,-r,0,-n,r,0,-n,-r,0,n,r,0,n],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type="DodecahedronBufferGeometry",this.parameters={radius:t,detail:e}}function Re(t,e){xt.call(this),this.type="DodecahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new je(t,e)),this.mergeVertices()}function Le(t,e,r,n){xt.call(this),this.type="PolyhedronGeometry",this.parameters={vertices:t,indices:e,radius:r,detail:n},this.fromBufferGeometry(new Me(t,e,r,n)),this.mergeVertices()}function Ne(t,e,n,i,o){function a(r){var o=t.getPointAt(r/e),a=s.normals[r];for(r=s.binormals[r],h=0;h<=i;h++){var c=h/i*Math.PI*2,u=Math.sin(c),c=-Math.cos(c);p.x=c*a.x+u*r.x,p.y=c*a.y+u*r.y,p.z=c*a.z+u*r.z,p.normalize(),m.push(p.x,p.y,p.z),l.x=o.x+n*p.x,l.y=o.y+n*p.y,l.z=o.z+n*p.z,d.push(l.x,l.y,l.z)}}wt.call(this),this.type="TubeBufferGeometry",this.parameters={path:t,tubularSegments:e,radius:n,radialSegments:i,closed:o},e=e||64,n=n||1,i=i||8,o=o||!1;var s=t.computeFrenetFrames(e,o);this.tangents=s.tangents,this.normals=s.normals,this.binormals=s.binormals;var u,h,l=new c,p=new c,f=new r,d=[],m=[],v=[],g=[];for(u=0;u<e;u++)a(u);for(a(!1===o?e:0),u=0;u<=e;u++)for(h=0;h<=i;h++)f.x=u/e,f.y=h/i,v.push(f.x,f.y);!function(){for(h=1;h<=e;h++)for(u=1;u<=i;u++){var t=(i+1)*h+(u-1),r=(i+1)*h+u,n=(i+1)*(h-1)+u;g.push((i+1)*(h-1)+(u-1),t,n),g.push(t,r,n)}}(),this.setIndex(new(65535<g.length?gt:mt)(g,1)),this.addAttribute("position",new yt(d,3)),this.addAttribute("normal",new yt(m,3)),this.addAttribute("uv",new yt(v,2))}function Ie(t,e,r,n,i,o){xt.call(this),this.type="TubeGeometry",this.parameters={path:t,tubularSegments:e,radius:r,radialSegments:n,closed:i},void 0!==o&&console.warn("THREE.TubeGeometry: taper has been removed."),t=new Ne(t,e,r,n,i),this.tangents=t.tangents,this.normals=t.normals,this.binormals=t.binormals,this.fromBufferGeometry(t),this.mergeVertices()}function De(t,e,n,i,o,a){function s(t,e,r,n,i){var o=Math.sin(t);e=r/e*t,r=Math.cos(e),i.x=n*(2+r)*.5*Math.cos(t),i.y=n*(2+r)*o*.5,i.z=n*Math.sin(e)*.5}wt.call(this),this.type="TorusKnotBufferGeometry",this.parameters={radius:t,tube:e,tubularSegments:n,radialSegments:i,p:o,q:a},t=t||100,e=e||40,n=Math.floor(n)||64,i=Math.floor(i)||8,o=o||2,a=a||3;var u,h,l=(i+1)*(n+1),p=i*n*6,p=new ht(new(65535<p?Uint32Array:Uint16Array)(p),1),f=new ht(new Float32Array(3*l),3),d=new ht(new Float32Array(3*l),3),l=new ht(new Float32Array(2*l),2),m=0,v=0,g=new c,y=new c,b=new r,_=new c,x=new c,w=new c,S=new c,M=new c;for(u=0;u<=n;++u)for(h=u/n*o*Math.PI*2,s(h,o,a,t,_),s(h+.01,o,a,t,x),S.subVectors(x,_),M.addVectors(x,_),w.crossVectors(S,M),M.crossVectors(w,S),w.normalize(),M.normalize(),h=0;h<=i;++h){var E=h/i*Math.PI*2,T=-e*Math.cos(E),E=e*Math.sin(E);g.x=_.x+(T*M.x+E*w.x),g.y=_.y+(T*M.y+E*w.y),g.z=_.z+(T*M.z+E*w.z),f.setXYZ(m,g.x,g.y,g.z),y.subVectors(g,_).normalize(),d.setXYZ(m,y.x,y.y,y.z),b.x=u/n,b.y=h/i,l.setXY(m,b.x,b.y),m++}for(h=1;h<=n;h++)for(u=1;u<=i;u++)t=(i+1)*h+(u-1),e=(i+1)*h+u,o=(i+1)*(h-1)+u,p.setX(v,(i+1)*(h-1)+(u-1)),v++,p.setX(v,t),v++,p.setX(v,o),v++,p.setX(v,t),v++,p.setX(v,e),v++,p.setX(v,o),v++;this.setIndex(p),this.addAttribute("position",f),this.addAttribute("normal",d),this.addAttribute("uv",l)}function ke(t,e,r,n,i,o,a){xt.call(this),this.type="TorusKnotGeometry",this.parameters={radius:t,tube:e,tubularSegments:r,radialSegments:n,p:i,q:o},void 0!==a&&console.warn("THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead."),this.fromBufferGeometry(new De(t,e,r,n,i,o)),this.mergeVertices()}function Fe(t,e,r,n,i){wt.call(this),this.type="TorusBufferGeometry",this.parameters={radius:t,tube:e,radialSegments:r,tubularSegments:n,arc:i},t=t||100,e=e||40,r=Math.floor(r)||8,n=Math.floor(n)||6,i=i||2*Math.PI;var o,a,s=(r+1)*(n+1),u=r*n*6,u=new(65535<u?Uint32Array:Uint16Array)(u),h=new Float32Array(3*s),l=new Float32Array(3*s),s=new Float32Array(2*s),p=0,f=0,d=0,m=new c,v=new c,g=new c;for(o=0;o<=r;o++)for(a=0;a<=n;a++){var y=a/n*i,b=o/r*Math.PI*2
+;v.x=(t+e*Math.cos(b))*Math.cos(y),v.y=(t+e*Math.cos(b))*Math.sin(y),v.z=e*Math.sin(b),h[p]=v.x,h[p+1]=v.y,h[p+2]=v.z,m.x=t*Math.cos(y),m.y=t*Math.sin(y),g.subVectors(v,m).normalize(),l[p]=g.x,l[p+1]=g.y,l[p+2]=g.z,s[f]=a/n,s[f+1]=o/r,p+=3,f+=2}for(o=1;o<=r;o++)for(a=1;a<=n;a++)t=(n+1)*(o-1)+a-1,e=(n+1)*(o-1)+a,i=(n+1)*o+a,u[d]=(n+1)*o+a-1,u[d+1]=t,u[d+2]=i,u[d+3]=t,u[d+4]=e,u[d+5]=i,d+=6;this.setIndex(new ht(u,1)),this.addAttribute("position",new ht(h,3)),this.addAttribute("normal",new ht(l,3)),this.addAttribute("uv",new ht(s,2))}function Ue(t,e,r,n,i){xt.call(this),this.type="TorusGeometry",this.parameters={radius:t,tube:e,radialSegments:r,tubularSegments:n,arc:i},this.fromBufferGeometry(new Fe(t,e,r,n,i))}function Be(t,e){void 0!==t&&(xt.call(this),this.type="ExtrudeGeometry",t=Array.isArray(t)?t:[t],this.addShapeList(t,e),this.computeFaceNormals())}function ze(t,e){e=e||{};var r=e.font;if(!1===(r&&r.isFont))return console.error("THREE.TextGeometry: font parameter is not an instance of THREE.Font."),new xt;r=r.generateShapes(t,e.size,e.curveSegments),e.amount=void 0!==e.height?e.height:50,void 0===e.bevelThickness&&(e.bevelThickness=10),void 0===e.bevelSize&&(e.bevelSize=8),void 0===e.bevelEnabled&&(e.bevelEnabled=!1),Be.call(this,r,e),this.type="TextGeometry"}function Ge(t,e,r,n,i,o,a){wt.call(this),this.type="SphereBufferGeometry",this.parameters={radius:t,widthSegments:e,heightSegments:r,phiStart:n,phiLength:i,thetaStart:o,thetaLength:a},t=t||50,e=Math.max(3,Math.floor(e)||8),r=Math.max(2,Math.floor(r)||6),n=void 0!==n?n:0,i=void 0!==i?i:2*Math.PI,o=void 0!==o?o:0,a=void 0!==a?a:Math.PI;for(var s=o+a,u=(e+1)*(r+1),h=new ht(new Float32Array(3*u),3),l=new ht(new Float32Array(3*u),3),u=new ht(new Float32Array(2*u),2),p=0,f=[],d=new c,m=0;m<=r;m++){for(var v=[],g=m/r,y=0;y<=e;y++){var b=y/e,_=-t*Math.cos(n+b*i)*Math.sin(o+g*a),x=t*Math.cos(o+g*a),w=t*Math.sin(n+b*i)*Math.sin(o+g*a);d.set(_,x,w).normalize(),h.setXYZ(p,_,x,w),l.setXYZ(p,d.x,d.y,d.z),u.setXY(p,b,1-g),v.push(p),p++}f.push(v)}for(n=[],m=0;m<r;m++)for(y=0;y<e;y++)i=f[m][y+1],a=f[m][y],p=f[m+1][y],d=f[m+1][y+1],(0!==m||0<o)&&n.push(i,a,d),(m!==r-1||s<Math.PI)&&n.push(a,p,d);this.setIndex(new(65535<h.count?gt:mt)(n,1)),this.addAttribute("position",h),this.addAttribute("normal",l),this.addAttribute("uv",u),this.boundingSphere=new Z(new c,t)}function $e(t,e,r,n,i,o,a){xt.call(this),this.type="SphereGeometry",this.parameters={radius:t,widthSegments:e,heightSegments:r,phiStart:n,phiLength:i,thetaStart:o,thetaLength:a},this.fromBufferGeometry(new Ge(t,e,r,n,i,o,a))}function Ve(t,e,n,i,o,a){wt.call(this),this.type="RingBufferGeometry",this.parameters={innerRadius:t,outerRadius:e,thetaSegments:n,phiSegments:i,thetaStart:o,thetaLength:a},t=t||20,e=e||50,o=void 0!==o?o:0,a=void 0!==a?a:2*Math.PI,n=void 0!==n?Math.max(3,n):8,i=void 0!==i?Math.max(1,i):1;var s,u,h=(n+1)*(i+1),l=n*i*6,l=new ht(new(65535<l?Uint32Array:Uint16Array)(l),1),p=new ht(new Float32Array(3*h),3),f=new ht(new Float32Array(3*h),3),h=new ht(new Float32Array(2*h),2),d=0,m=0,v=t,g=(e-t)/i,y=new c,b=new r;for(t=0;t<=i;t++){for(u=0;u<=n;u++)s=o+u/n*a,y.x=v*Math.cos(s),y.y=v*Math.sin(s),p.setXYZ(d,y.x,y.y,y.z),f.setXYZ(d,0,0,1),b.x=(y.x/e+1)/2,b.y=(y.y/e+1)/2,h.setXY(d,b.x,b.y),d++;v+=g}for(t=0;t<i;t++)for(e=t*(n+1),u=0;u<n;u++)o=s=u+e,a=s+n+1,d=s+n+2,s+=1,l.setX(m,o),m++,l.setX(m,a),m++,l.setX(m,d),m++,l.setX(m,o),m++,l.setX(m,d),m++,l.setX(m,s),m++;this.setIndex(l),this.addAttribute("position",p),this.addAttribute("normal",f),this.addAttribute("uv",h)}function He(t,e,r,n,i,o){xt.call(this),this.type="RingGeometry",this.parameters={innerRadius:t,outerRadius:e,thetaSegments:r,phiSegments:n,thetaStart:i,thetaLength:o},this.fromBufferGeometry(new Ve(t,e,r,n,i,o))}function We(t,e,r,n){xt.call(this),this.type="PlaneGeometry",this.parameters={width:t,height:e,widthSegments:r,heightSegments:n},this.fromBufferGeometry(new Et(t,e,r,n))}function qe(t,e,n,i){wt.call(this),this.type="LatheBufferGeometry",this.parameters={points:t,segments:e,phiStart:n,phiLength:i},e=Math.floor(e)||12,n=n||0,i=i||2*Math.PI,i=ri.clamp(i,0,2*Math.PI);for(var o=(e+1)*t.length,a=e*t.length*6,s=new ht(new(65535<a?Uint32Array:Uint16Array)(a),1),u=new ht(new Float32Array(3*o),3),h=new ht(new Float32Array(2*o),2),l=0,p=0,f=1/e,d=new c,m=new r,o=0;o<=e;o++)for(var a=n+o*f*i,v=Math.sin(a),g=Math.cos(a),a=0;a<=t.length-1;a++)d.x=t[a].x*v,d.y=t[a].y,d.z=t[a].x*g,u.setXYZ(l,d.x,d.y,d.z),m.x=o/e,m.y=a/(t.length-1),h.setXY(l,m.x,m.y),l++;for(o=0;o<e;o++)for(a=0;a<t.length-1;a++)n=a+o*t.length,l=n+t.length,f=n+t.length+1,d=n+1,s.setX(p,n),p++,s.setX(p,l),p++,s.setX(p,d),p++,s.setX(p,l),p++,s.setX(p,f),p++,s.setX(p,d),p++;if(this.setIndex(s),this.addAttribute("position",u),this.addAttribute("uv",h),this.computeVertexNormals(),i===2*Math.PI)for(i=this.attributes.normal.array,s=new c,u=new c,h=new c,n=e*t.length*3,a=o=0;o<t.length;o++,a+=3)s.x=i[a+0],s.y=i[a+1],s.z=i[a+2],u.x=i[n+a+0],u.y=i[n+a+1],u.z=i[n+a+2],h.addVectors(s,u).normalize(),i[a+0]=i[n+a+0]=h.x,i[a+1]=i[n+a+1]=h.y,i[a+2]=i[n+a+2]=h.z}function Xe(t,e,r,n){xt.call(this),this.type="LatheGeometry",this.parameters={points:t,segments:e,phiStart:r,phiLength:n},this.fromBufferGeometry(new qe(t,e,r,n)),this.mergeVertices()}function Ye(t,e){function r(t){var r,s,u=n.length/3;t=t.extractPoints(e);var h=t.shape,l=t.holes;if(!1===yi.isClockWise(h))for(h=h.reverse(),t=0,r=l.length;t<r;t++)s=l[t],!0===yi.isClockWise(s)&&(l[t]=s.reverse());var p=yi.triangulateShape(h,l);for(t=0,r=l.length;t<r;t++)s=l[t],h=h.concat(s);for(t=0,r=h.length;t<r;t++)s=h[t],n.push(s.x,s.y,0),i.push(0,0,1),o.push(s.x,s.y);for(t=0,r=p.length;t<r;t++)h=p[t],a.push(h[0]+u,h[1]+u,h[2]+u),c+=3}wt.call(this),this.type="ShapeBufferGeometry",this.parameters={shapes:t,curveSegments:e},e=e||12;var n=[],i=[],o=[],a=[],s=0,c=0;if(!1===Array.isArray(t))r(t);else for(var u=0;u<t.length;u++)r(t[u]),this.addGroup(s,c,u),s+=c,c=0;this.setIndex(new(65535<a.length?gt:mt)(a,1)),this.addAttribute("position",new yt(n,3)),this.addAttribute("normal",new yt(i,3)),this.addAttribute("uv",new yt(o,2))}function Ke(t,e){xt.call(this),this.type="ShapeGeometry","object"==typeof e&&(console.warn("THREE.ShapeGeometry: Options parameter has been removed."),e=e.curveSegments),this.parameters={shapes:t,curveSegments:e},this.fromBufferGeometry(new Ye(t,e)),this.mergeVertices()}function Ze(t,e){function r(t,e){return t-e}wt.call(this);var n,i=Math.cos(ri.DEG2RAD*(void 0!==e?e:1)),o=[0,0],a={},s=["a","b","c"];t.isBufferGeometry?(n=new xt,n.fromBufferGeometry(t)):n=t.clone(),n.mergeVertices(),n.computeFaceNormals();var c=n.vertices;n=n.faces;for(var u=0,h=n.length;u<h;u++)for(var l=n[u],p=0;3>p;p++){o[0]=l[s[p]],o[1]=l[s[(p+1)%3]],o.sort(r);var f=o.toString();void 0===a[f]?a[f]={vert1:o[0],vert2:o[1],face1:u,face2:void 0}:a[f].face2=u}o=[];for(f in a)s=a[f],(void 0===s.face2||n[s.face1].normal.dot(n[s.face2].normal)<=i)&&(u=c[s.vert1],o.push(u.x),o.push(u.y),o.push(u.z),u=c[s.vert2],o.push(u.x),o.push(u.y),o.push(u.z));this.addAttribute("position",new yt(o,3))}function Je(t,e,n,i,o,a,s,u){function h(n){var o,a,h,p=new r,f=new c,d=0,x=!0===n?t:e,M=!0===n?1:-1;for(a=b,o=1;o<=i;o++)v.setXYZ(b,0,w*M,0),g.setXYZ(b,0,M,0),p.x=.5,p.y=.5,y.setXY(b,p.x,p.y),b++;for(h=b,o=0;o<=i;o++){var E=o/i*u+s,T=Math.cos(E),E=Math.sin(E);f.x=x*E,f.y=w*M,f.z=x*T,v.setXYZ(b,f.x,f.y,f.z),g.setXYZ(b,0,M,0),p.x=.5*T+.5,p.y=.5*E*M+.5,y.setXY(b,p.x,p.y),b++}for(o=0;o<i;o++)p=a+o,f=h+o,!0===n?(m.setX(_,f),_++,m.setX(_,f+1)):(m.setX(_,f+1),_++,m.setX(_,f)),_++,m.setX(_,p),_++,d+=3;l.addGroup(S,d,!0===n?1:2),S+=d}wt.call(this),this.type="CylinderBufferGeometry",this.parameters={radiusTop:t,radiusBottom:e,height:n,radialSegments:i,heightSegments:o,openEnded:a,thetaStart:s,thetaLength:u};var l=this;t=void 0!==t?t:20,e=void 0!==e?e:20,n=void 0!==n?n:100,i=Math.floor(i)||8,o=Math.floor(o)||1,a=void 0!==a&&a,s=void 0!==s?s:0,u=void 0!==u?u:2*Math.PI;var p=0;!1===a&&(0<t&&p++,0<e&&p++);var f=function(){var t=(i+1)*(o+1);return!1===a&&(t+=(i+1)*p+i*p),t}(),d=function(){var t=i*o*6;return!1===a&&(t+=i*p*3),t}(),m=new ht(new(65535<d?Uint32Array:Uint16Array)(d),1),v=new ht(new Float32Array(3*f),3),g=new ht(new Float32Array(3*f),3),y=new ht(new Float32Array(2*f),2),b=0,_=0,x=[],w=n/2,S=0;!function(){var r,a,h=new c,p=new c,f=0,d=(e-t)/n;for(a=0;a<=o;a++){var M=[],E=a/o,T=E*(e-t)+t;for(r=0;r<=i;r++){var C=r/i,O=C*u+s,P=Math.sin(O),O=Math.cos(O);p.x=T*P,p.y=-E*n+w,p.z=T*O,v.setXYZ(b,p.x,p.y,p.z),h.set(P,d,O).normalize(),g.setXYZ(b,h.x,h.y,h.z),y.setXY(b,C,1-E),M.push(b),b++}x.push(M)}for(r=0;r<i;r++)for(a=0;a<o;a++)h=x[a+1][r],p=x[a+1][r+1],d=x[a][r+1],m.setX(_,x[a][r]),_++,m.setX(_,h),_++,m.setX(_,d),_++,m.setX(_,h),_++,m.setX(_,p),_++,m.setX(_,d),_++,f+=6;l.addGroup(S,f,0),S+=f}(),!1===a&&(0<t&&h(!0),0<e&&h(!1)),this.setIndex(m),this.addAttribute("position",v),this.addAttribute("normal",g),this.addAttribute("uv",y)}function Qe(t,e,r,n,i,o,a,s){xt.call(this),this.type="CylinderGeometry",this.parameters={radiusTop:t,radiusBottom:e,height:r,radialSegments:n,heightSegments:i,openEnded:o,thetaStart:a,thetaLength:s},this.fromBufferGeometry(new Je(t,e,r,n,i,o,a,s)),this.mergeVertices()}function tr(t,e,r,n,i,o,a){Qe.call(this,0,t,e,r,n,i,o,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:r,heightSegments:n,openEnded:i,thetaStart:o,thetaLength:a}}function er(t,e,r,n,i,o,a){Je.call(this,0,t,e,r,n,i,o,a),this.type="ConeBufferGeometry",this.parameters={radius:t,height:e,radialSegments:r,heightSegments:n,openEnded:i,thetaStart:o,thetaLength:a}}function rr(t,e,r,n){wt.call(this),this.type="CircleBufferGeometry",this.parameters={radius:t,segments:e,thetaStart:r,thetaLength:n},t=t||50,e=void 0!==e?Math.max(3,e):8,r=void 0!==r?r:0,n=void 0!==n?n:2*Math.PI;var i=e+2,o=new Float32Array(3*i),a=new Float32Array(3*i),i=new Float32Array(2*i);a[2]=1,i[0]=.5,i[1]=.5;for(var s=0,u=3,h=2;s<=e;s++,u+=3,h+=2){var l=r+s/e*n;o[u]=t*Math.cos(l),o[u+1]=t*Math.sin(l),a[u+2]=1,i[h]=(o[u]/t+1)/2,i[h+1]=(o[u+1]/t+1)/2}for(r=[],u=1;u<=e;u++)r.push(u,u+1,0);this.setIndex(new ht(new Uint16Array(r),1)),this.addAttribute("position",new ht(o,3)),this.addAttribute("normal",new ht(a,3)),this.addAttribute("uv",new ht(i,2)),this.boundingSphere=new Z(new c,t)}function nr(t,e,r,n){xt.call(this),this.type="CircleGeometry",this.parameters={radius:t,segments:e,thetaStart:r,thetaLength:n},this.fromBufferGeometry(new rr(t,e,r,n))}function ir(t,e,r,n,i,o){xt.call(this),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:r,widthSegments:n,heightSegments:i,depthSegments:o},this.fromBufferGeometry(new Mt(t,e,r,n,i,o)),this.mergeVertices()}function or(){X.call(this,{uniforms:ui.merge([pi.lights,{opacity:{value:1}}]),vertexShader:hi.shadow_vert,fragmentShader:hi.shadow_frag}),this.transparent=this.lights=!0,Object.defineProperties(this,{opacity:{enumerable:!0,get:function(){return this.uniforms.opacity.value},set:function(t){this.uniforms.opacity.value=t}}})}function ar(t){X.call(this,t),this.type="RawShaderMaterial"}function sr(t){this.uuid=ri.generateUUID(),this.type="MultiMaterial",this.materials=Array.isArray(t)?t:[],this.visible=!0}function cr(t){q.call(this),this.defines={STANDARD:""},this.type="MeshStandardMaterial",this.color=new G(16777215),this.metalness=this.roughness=.5,this.lightMap=this.map=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new G(0),this.emissiveIntensity=1,this.bumpMap=this.emissiveMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new r(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.envMap=this.alphaMap=this.metalnessMap=this.roughnessMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinejoin=this.wireframeLinecap="round",this.morphNormals=this.morphTargets=this.skinning=!1,this.setValues(t)}function ur(t){cr.call(this),this.defines={PHYSICAL:""},this.type="MeshPhysicalMaterial",this.reflectivity=.5,this.clearCoatRoughness=this.clearCoat=0,this.setValues(t)}function hr(t){q.call(this),this.type="MeshPhongMaterial",this.color=new G(16777215),this.specular=new G(1118481),this.shininess=30,this.lightMap=this.map=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new G(0),this.emissiveIntensity=1,this.bumpMap=this.emissiveMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new r(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.envMap=this.alphaMap=this.specularMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinejoin=this.wireframeLinecap="round",this.morphNormals=this.morphTargets=this.skinning=!1,this.setValues(t)}function lr(t){hr.call(this),this.defines={TOON:""},this.type="MeshToonMaterial",this.gradientMap=null,this.setValues(t)}function pr(t){q.call(this,t),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new r(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.morphNormals=this.morphTargets=this.skinning=this.lights=this.fog=!1,this.setValues(t)}function fr(t){q.call(this),this.type="MeshLambertMaterial",this.color=new G(16777215),this.lightMap=this.map=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new G(0),this.emissiveIntensity=1,this.envMap=this.alphaMap=this.specularMap=this.emissiveMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinejoin=this.wireframeLinecap="round",this.morphNormals=this.morphTargets=this.skinning=!1,this.setValues(t)}function dr(t){q.call(this),this.type="LineDashedMaterial",this.color=new G(16777215),this.scale=this.linewidth=1,this.dashSize=3,this.gapSize=1,this.lights=!1,this.setValues(t)}function mr(t,e,r){var n=this,i=!1,o=0,a=0;this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=r,this.itemStart=function(t){a++,!1===i&&void 0!==n.onStart&&n.onStart(t,o,a),i=!0},this.itemEnd=function(t){o++,void 0!==n.onProgress&&n.onProgress(t,o,a),o===a&&(i=!1,void 0!==n.onLoad)&&n.onLoad()},this.itemError=function(t){void 0!==n.onError&&n.onError(t)}}function vr(t){this.manager=void 0!==t?t:wi}function gr(t){this.manager=void 0!==t?t:wi,this._parser=null}function yr(t){this.manager=void 0!==t?t:wi,this._parser=null}function br(t){this.manager=void 0!==t?t:wi}function _r(t){this.manager=void 0!==t?t:wi}function xr(t){this.manager=void 0!==t?t:wi}function wr(t,e){ot.call(this),this.type="Light",this.color=new G(t),this.intensity=void 0!==e?e:1,this.receiveShadow=void 0}function Sr(t,e,r){wr.call(this,t,r),this.type="HemisphereLight",this.castShadow=void 0,this.position.copy(ot.DefaultUp),this.updateMatrix(),this.groundColor=new G(e)}function Mr(t){this.camera=t,this.bias=0,this.radius=1,this.mapSize=new r(512,512),this.map=null,this.matrix=new u}function Er(){Mr.call(this,new Ct(50,1,.5,500))}function Tr(t,e,r,n,i,o){wr.call(this,t,e),this.type="SpotLight",this.position.copy(ot.DefaultUp),this.updateMatrix(),this.target=new ot,Object.defineProperty(this,"power",{get:function(){return this.intensity*Math.PI},set:function(t){this.intensity=t/Math.PI}}),this.distance=void 0!==r?r:0,this.angle=void 0!==n?n:Math.PI/3,this.penumbra=void 0!==i?i:0,this.decay=void 0!==o?o:1,this.shadow=new Er}function Cr(t,e,r,n){wr.call(this,t,e),this.type="PointLight",Object.defineProperty(this,"power",{get:function(){return 4*this.intensity*Math.PI},set:function(t){this.intensity=t/(4*Math.PI)}}),this.distance=void 0!==r?r:0,this.decay=void 0!==n?n:1,this.shadow=new Mr(new Ct(90,1,.5,500))}function Or(t){Mr.call(this,new Ot(-5,5,5,-5,.5,500))}function Pr(t,e){wr.call(this,t,e),this.type="DirectionalLight",this.position.copy(ot.DefaultUp),this.updateMatrix(),this.target=new ot,this.shadow=new Or}function Ar(t,e){wr.call(this,t,e),this.type="AmbientLight",this.castShadow=void 0}function jr(t,e,r,n){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=void 0!==n?n:new e.constructor(r),this.sampleValues=e,this.valueSize=r}function Rr(t,e,r,n){jr.call(this,t,e,r,n),this._offsetNext=this._weightNext=this._offsetPrev=this._weightPrev=-0}function Lr(t,e,r,n){jr.call(this,t,e,r,n)}function Nr(t,e,r,n){jr.call(this,t,e,r,n)}function Ir(t,e,r,n){if(void 0===t)throw Error("track name is undefined");if(void 0===e||0===e.length)throw Error("no keyframes in track named "+t);this.name=t,this.times=Si.convertArray(e,this.TimeBufferType),this.values=Si.convertArray(r,this.ValueBufferType),this.setInterpolation(n||this.DefaultInterpolation),this.validate(),this.optimize()}function Dr(t,e,r,n){Ir.call(this,t,e,r,n)}function kr(t,e,r,n){jr.call(this,t,e,r,n)}function Fr(t,e,r,n){Ir.call(this,t,e,r,n)}function Ur(t,e,r,n){Ir.call(this,t,e,r,n)}function Br(t,e,r,n){Ir.call(this,t,e,r,n)}function zr(t,e,r){Ir.call(this,t,e,r)}function Gr(t,e,r,n){Ir.call(this,t,e,r,n)}function $r(t,e,r,n){Ir.apply(this,arguments)}function Vr(t,e,r){this.name=t,this.tracks=r,this.duration=void 0!==e?e:-1,this.uuid=ri.generateUUID(),0>this.duration&&this.resetDuration(),this.optimize()}function Hr(t){this.manager=void 0!==t?t:wi,this.textures={}}function Wr(t){this.manager=void 0!==t?t:wi}function qr(){this.onLoadStart=function(){},this.onLoadProgress=function(){},this.onLoadComplete=function(){}}function Xr(t){"boolean"==typeof t&&(console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor."),t=void 0),this.manager=void 0!==t?t:wi,this.withCredentials=!1}function Yr(t){this.manager=void 0!==t?t:wi,this.texturePath=""}function Kr(){}function Zr(t,e){this.v1=t,this.v2=e}function Jr(){this.curves=[],this.autoClose=!1}function Qr(t,e,r,n,i,o,a,s){this.aX=t,this.aY=e,this.xRadius=r,this.yRadius=n,this.aStartAngle=i,this.aEndAngle=o,this.aClockwise=a,this.aRotation=s||0}function tn(t){this.points=void 0===t?[]:t}function en(t,e,r,n){this.v0=t,this.v1=e,this.v2=r,this.v3=n}function rn(t,e,r){this.v0=t,this.v1=e,this.v2=r}function nn(){on.apply(this,arguments),this.holes=[]}function on(t){Jr.call(this),this.currentPoint=new r,t&&this.fromPoints(t)}function an(){this.subPaths=[],this.currentPath=null}function sn(t){this.data=t}function cn(t){this.manager=void 0!==t?t:wi}function un(t){this.manager=void 0!==t?t:wi}function hn(t,e,r,n){wr.call(this,t,e),this.type="RectAreaLight",this.position.set(0,1,0),this.updateMatrix(),this.width=void 0!==r?r:10,this.height=void 0!==n?n:10}function ln(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new Ct,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new Ct,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1}function pn(t,e,r){ot.call(this),this.type="CubeCamera";var n=new Ct(90,1,t,e);n.up.set(0,-1,0),n.lookAt(new c(1,0,0)),this.add(n);var i=new Ct(90,1,t,e);i.up.set(0,-1,0),i.lookAt(new c(-1,0,0)),this.add(i);var o=new Ct(90,1,t,e);o.up.set(0,0,1),o.lookAt(new c(0,1,0)),this.add(o);var s=new Ct(90,1,t,e);s.up.set(0,0,-1),s.lookAt(new c(0,-1,0)),this.add(s);var u=new Ct(90,1,t,e);u.up.set(0,-1,0),u.lookAt(new c(0,0,1)),this.add(u);var h=new Ct(90,1,t,e);h.up.set(0,-1,0),h.lookAt(new c(0,0,-1)),this.add(h),this.renderTarget=new a(r,r,{format:1022,magFilter:1006,minFilter:1006}),this.updateCubeMap=function(t,e){null===this.parent&&this.updateMatrixWorld();var r=this.renderTarget,a=r.texture.generateMipmaps;r.texture.generateMipmaps=!1,r.activeCubeFace=0,t.render(e,n,r),r.activeCubeFace=1,t.render(e,i,r),r.activeCubeFace=2,t.render(e,o,r),r.activeCubeFace=3,t.render(e,s,r),r.activeCubeFace=4,t.render(e,u,r),r.texture.generateMipmaps=a,r.activeCubeFace=5,t.render(e,h,r),t.setRenderTarget(null)}}function fn(){ot.call(this),this.type="AudioListener",this.context=Oi.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null}function dn(t){ot.call(this),this.type="Audio",this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.loop=!1,this.startTime=0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.sourceType="empty",this.filters=[]}function mn(t){dn.call(this,t),this.panner=this.context.createPanner(),this.panner.connect(this.gain)}function vn(t,e){this.analyser=t.context.createAnalyser(),this.analyser.fftSize=void 0!==e?e:2048,this.data=new Uint8Array(this.analyser.frequencyBinCount),t.getOutput().connect(this.analyser)}function gn(t,e,r){switch(this.binding=t,this.valueSize=r,t=Float64Array,e){case"quaternion":e=this._slerp;break;case"string":case"bool":t=Array,e=this._select;break;default:e=this._lerp}this.buffer=new t(4*r),this._mixBufferRegion=e,this.referenceCount=this.useCount=this.cumulativeWeight=0}function yn(t,e,r){this.path=e,this.parsedPath=r||yn.parseTrackName(e),this.node=yn.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t}function bn(t){this.uuid=ri.generateUUID(),this._objects=Array.prototype.slice.call(arguments),this.nCachedObjects_=0;var e={};this._indicesByUUID=e;for(var r=0,n=arguments.length;r!==n;++r)e[arguments[r].uuid]=r;this._paths=[],this._parsedPaths=[],this._bindings=[],this._bindingsIndicesByPath={};var i=this;this.stats={objects:{get total(){return i._objects.length},get inUse(){return this.total-i.nCachedObjects_}},get bindingsPerObject(){return i._bindings.length}}}function _n(t,e,r){this._mixer=t,this._clip=e,this._localRoot=r||null,t=e.tracks,e=t.length,r=Array(e);for(var n={endingStart:2400,endingEnd:2400},i=0;i!==e;++i){var o=t[i].createInterpolant(null);r[i]=o,o.settings=n}this._interpolantSettings=n,this._interpolants=r,this._propertyBindings=Array(e),this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function xn(t){this._root=t,this._initMemoryManager(),this.time=this._accuIndex=0,this.timeScale=1}function wn(t,e){"string"==typeof t&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),t=e),this.value=t}function Sn(){wt.call(this),this.type="InstancedBufferGeometry",this.maxInstancedCount=void 0}function Mn(t,e,r,n){this.uuid=ri.generateUUID(),this.data=t,this.itemSize=e,this.offset=r,this.normalized=!0===n}function En(t,e){this.uuid=ri.generateUUID(),this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.dynamic=!1,this.updateRange={offset:0,count:-1},this.onUploadCallback=function(){},this.version=0}function Tn(t,e,r){En.call(this,t,e),this.meshPerAttribute=r||1}function Cn(t,e,r){ht.call(this,t,e),this.meshPerAttribute=r||1}function On(t,e,r,n){this.ray=new rt(t,e),this.near=r||0,this.far=n||1/0,this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}},Object.defineProperties(this.params,{PointCloud:{get:function(){return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."),this.Points}}})}function Pn(t,e){return t.distance-e.distance}function An(t,e,r,n){if(!1!==t.visible&&(t.raycast(e,r),!0===n)){t=t.children,n=0;for(var i=t.length;n<i;n++)An(t[n],e,r,!0)}}function jn(t){this.autoStart=void 0===t||t,this.elapsedTime=this.oldTime=this.startTime=0,this.running=!1}function Rn(t,e,r){return this.radius=void 0!==t?t:1,this.phi=void 0!==e?e:0,this.theta=void 0!==r?r:0,this}function Ln(t,e,r){return this.radius=void 0!==t?t:1,this.theta=void 0!==e?e:0,this.y=void 0!==r?r:0,this}function Nn(t,e){St.call(this,t,e),this.animationsMap={},this.animationsList=[];var r=this.geometry.morphTargets.length;this.createAnimation("__default",0,r-1,r/1),this.setAnimationWeight("__default",1)}function In(t){ot.call(this),this.material=t,this.render=function(t){}}function Dn(t,e,r,n){this.object=t,this.size=void 0!==e?e:1,t=void 0!==r?r:16711680,n=void 0!==n?n:1,e=0,(r=this.object.geometry)&&r.isGeometry?e=3*r.faces.length:r&&r.isBufferGeometry&&(e=r.attributes.normal.count),r=new wt,e=new yt(6*e,3),r.addAttribute("position",e),fe.call(this,r,new le({color:t,linewidth:n})),this.matrixAutoUpdate=!1,this.update()}function kn(t){ot.call(this),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,t=new wt;for(var e=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1],r=0,n=1;32>r;r++,n++){var i=r/32*Math.PI*2,o=n/32*Math.PI*2;e.push(Math.cos(i),Math.sin(i),1,Math.cos(o),Math.sin(o),1)}t.addAttribute("position",new yt(e,3)),e=new le({fog:!1}),this.cone=new fe(t,e),this.add(this.cone),this.update()}function Fn(t){this.bones=this.getBoneList(t);for(var e=new wt,r=[],n=[],i=new G(0,0,1),o=new G(0,1,0),a=0;a<this.bones.length;a++){var s=this.bones[a];s.parent&&s.parent.isBone&&(r.push(0,0,0),r.push(0,0,0),n.push(i.r,i.g,i.b),n.push(o.r,o.g,o.b))}e.addAttribute("position",new yt(r,3)),e.addAttribute("color",new yt(n,3)),r=new le({vertexColors:2,depthTest:!1,depthWrite:!1,transparent:!0}),fe.call(this,e,r),this.root=t,this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.update()}function Un(t,e){this.light=t,this.light.updateMatrixWorld();var r=new Ge(e,4,2),n=new ut({wireframe:!0,fog:!1});n.color.copy(this.light.color).multiplyScalar(this.light.intensity),St.call(this,r,n),this.matrix=this.light.matrixWorld,this.matrixAutoUpdate=!1}function Bn(t){ot.call(this),this.light=t,this.light.updateMatrixWorld();var e=new ut({color:t.color,fog:!1});t=new ut({color:t.color,fog:!1,wireframe:!0});var r=new wt;r.addAttribute("position",new ht(new Float32Array(18),3)),this.add(new St(r,e)),this.add(new St(r,t)),this.update()}function zn(t,e){ot.call(this),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1;var r=new Ce(e);r.rotateY(.5*Math.PI);var n=new ut({vertexColors:2,wireframe:!0}),i=r.getAttribute("position"),i=new Float32Array(3*i.count);r.addAttribute("color",new ht(i,3)),this.add(new St(r,n)),this.update()}function Gn(t,e,r,n){t=t||10,e=e||10,r=new G(void 0!==r?r:4473924),n=new G(void 0!==n?n:8947848);for(var i=e/2,o=2*t/e,a=[],s=[],c=0,u=0,h=-t;c<=e;c++,h+=o){a.push(-t,0,h,t,0,h),a.push(h,0,-t,h,0,t);var l=c===i?r:n;l.toArray(s,u),u+=3,l.toArray(s,u),u+=3,l.toArray(s,u),u+=3,l.toArray(s,u),u+=3}t=new wt,t.addAttribute("position",new yt(a,3)),t.addAttribute("color",new yt(s,3)),a=new le({vertexColors:2}),fe.call(this,t,a)}function $n(t,e,r,n,i,o){t=t||10,e=e||16,r=r||8,n=n||64,i=new G(void 0!==i?i:4473924),o=new G(void 0!==o?o:8947848);var a,s,c,u,h,l=[],p=[];for(c=0;c<=e;c++)s=c/e*2*Math.PI,a=Math.sin(s)*t,s=Math.cos(s)*t,l.push(0,0,0),l.push(a,0,s),h=1&c?i:o,p.push(h.r,h.g,h.b),p.push(h.r,h.g,h.b);for(c=0;c<=r;c++)for(h=1&c?i:o,u=t-t/r*c,e=0;e<n;e++)s=e/n*2*Math.PI,a=Math.sin(s)*u,s=Math.cos(s)*u,l.push(a,0,s),p.push(h.r,h.g,h.b),s=(e+1)/n*2*Math.PI,a=Math.sin(s)*u,s=Math.cos(s)*u,l.push(a,0,s),p.push(h.r,h.g,h.b);t=new wt,t.addAttribute("position",new yt(l,3)),t.addAttribute("color",new yt(p,3)),l=new le({vertexColors:2}),fe.call(this,t,l)}function Vn(t,e,r,n){this.object=t,this.size=void 0!==e?e:1,t=void 0!==r?r:16776960,n=void 0!==n?n:1,e=0,(r=this.object.geometry)&&r.isGeometry?e=r.faces.length:console.warn("THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead."),r=new wt,e=new yt(6*e,3),r.addAttribute("position",e),fe.call(this,r,new le({color:t,linewidth:n})),this.matrixAutoUpdate=!1,this.update()}function Hn(t,e){ot.call(this),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,void 0===e&&(e=1);var r=new wt;r.addAttribute("position",new yt([-e,e,0,e,e,0,e,-e,0,-e,-e,0,-e,e,0],3));var n=new le({fog:!1});this.add(new pe(r,n)),r=new wt,r.addAttribute("position",new yt([0,0,0,0,0,1],3)),this.add(new pe(r,n)),this.update()}function Wn(t){function e(t,e,n){r(t,n),r(e,n)}function r(t,e){o.push(0,0,0),a.push(e.r,e.g,e.b),void 0===s[t]&&(s[t]=[]),s[t].push(o.length/3-1)}var n=new wt,i=new le({color:16777215,vertexColors:1}),o=[],a=[],s={},c=new G(16755200),u=new G(16711680),h=new G(43775),l=new G(16777215),p=new G(3355443);e("n1","n2",c),e("n2","n4",c),e("n4","n3",c),e("n3","n1",c),e("f1","f2",c),e("f2","f4",c),e("f4","f3",c),e("f3","f1",c),e("n1","f1",c),e("n2","f2",c),e("n3","f3",c),e("n4","f4",c),e("p","n1",u),e("p","n2",u),e("p","n3",u),e("p","n4",u),e("u1","u2",h),e("u2","u3",h),e("u3","u1",h),e("c","t",l),e("p","c",p),e("cn1","cn2",p),e("cn3","cn4",p),e("cf1","cf2",p),e("cf3","cf4",p),n.addAttribute("position",new yt(o,3)),n.addAttribute("color",new yt(a,3)),fe.call(this,n,i),this.camera=t,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=s,this.update()}function qn(t,e){void 0===e&&(e=16776960);var r=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),n=new Float32Array(24),i=new wt;i.setIndex(new ht(r,1)),i.addAttribute("position",new ht(n,3)),fe.call(this,i,new le({color:e})),void 0!==t&&this.update(t)}function Xn(t,e,r,n,i,o){ot.call(this),void 0===n&&(n=16776960),void 0===r&&(r=1),void 0===i&&(i=.2*r),void 0===o&&(o=.2*i),this.position.copy(e),this.line=new pe(Pi,new le({color:n})),this.line.matrixAutoUpdate=!1,this.add(this.line),this.cone=new St(Ai,new ut({color:n})),this.cone.matrixAutoUpdate=!1,this.add(this.cone),this.setDirection(t),this.setLength(r,i,o)}function Yn(t){t=t||1;var e=[0,0,0,t,0,0,0,0,0,0,t,0,0,0,0,0,0,t];t=new wt,t.addAttribute("position",new yt(e,3)),t.addAttribute("color",new yt([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3)),e=new le({vertexColors:2}),fe.call(this,t,e)}function Kn(t,e,r,n,i,o){Qr.call(this,t,e,r,r,n,i,o)}function Zn(t){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."),ji.call(this,t),this.type="catmullrom",this.closed=!0}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52)),void 0===Math.sign&&(Math.sign=function(t){return 0>t?-1:0<t?1:+t}),void 0===Function.prototype.name&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}}),void 0===Object.assign&&function(){Object.assign=function(t){if(void 0===t||null===t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),r=1;r<arguments.length;r++){var n=arguments[r];if(void 0!==n&&null!==n)for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e}}(),Object.assign(e.prototype,{addEventListener:function(t,e){void 0===this._listeners&&(this._listeners={});var r=this._listeners;void 0===r[t]&&(r[t]=[]),-1===r[t].indexOf(e)&&r[t].push(e)},hasEventListener:function(t,e){if(void 0===this._listeners)return!1;var r=this._listeners;return void 0!==r[t]&&-1!==r[t].indexOf(e)},removeEventListener:function(t,e){if(void 0!==this._listeners){var r=this._listeners[t];if(void 0!==r){var n=r.indexOf(e);-1!==n&&r.splice(n,1)}}},dispatchEvent:function(t){if(void 0!==this._listeners){var e=this._listeners[t.type];if(void 0!==e){t.target=this;var r,n=[],i=e.length;for(r=0;r<i;r++)n[r]=e[r];for(r=0;r<i;r++)n[r].call(this,t)}}}});var Jn={NoBlending:0,NormalBlending:1,AdditiveBlending:2,SubtractiveBlending:3,MultiplyBlending:4,CustomBlending:5},Qn={UVMapping:300,CubeReflectionMapping:301,CubeRefractionMapping:302,EquirectangularReflectionMapping:303,EquirectangularRefractionMapping:304,SphericalReflectionMapping:305,CubeUVReflectionMapping:306,CubeUVRefractionMapping:307},ti={RepeatWrapping:1e3,ClampToEdgeWrapping:1001,MirroredRepeatWrapping:1002},ei={NearestFilter:1003,NearestMipMapNearestFilter:1004,NearestMipMapLinearFilter:1005,LinearFilter:1006,LinearMipMapNearestFilter:1007,LinearMipMapLinearFilter:1008},ri={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,
+generateUUID:function(){var t,e="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),r=Array(36),n=0;return function(){for(var i=0;36>i;i++)8===i||13===i||18===i||23===i?r[i]="-":14===i?r[i]="4":(2>=n&&(n=33554432+16777216*Math.random()|0),t=15&n,n>>=4,r[i]=e[19===i?3&t|8:t]);return r.join("")}}(),clamp:function(t,e,r){return Math.max(e,Math.min(r,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,r,n,i){return n+(t-e)*(i-n)/(r-e)},lerp:function(t,e,r){return(1-r)*t+r*e},smoothstep:function(t,e,r){return t<=e?0:t>=r?1:(t=(t-e)/(r-e))*t*(3-2*t)},smootherstep:function(t,e,r){return t<=e?0:t>=r?1:(t=(t-e)/(r-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},degToRad:function(t){return t*ri.DEG2RAD},radToDeg:function(t){return t*ri.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},nearestPowerOfTwo:function(t){return Math.pow(2,Math.round(Math.log(t)/Math.LN2))},nextPowerOfTwo:function(t){return t--,t|=t>>1,t|=t>>2,t|=t>>4,t|=t>>8,t|=t>>16,++t}};r.prototype={constructor:r,isVector2:!0,get width(){return this.x},set width(t){this.x=t},get height(){return this.y},set height(t){this.y=t},set:function(t,e){return this.x=t,this.y=e,this},setScalar:function(t){return this.y=this.x=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(t){return this.x=t.x,this.y=t.y,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)},addScalar:function(t){return this.x+=t,this.y+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)},subScalar:function(t){return this.x-=t,this.y-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this},multiply:function(t){return this.x*=t.x,this.y*=t.y,this},multiplyScalar:function(t){return isFinite(t)?(this.x*=t,this.y*=t):this.y=this.x=0,this},divide:function(t){return this.x/=t.x,this.y/=t.y,this},divideScalar:function(t){return this.multiplyScalar(1/t)},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this},clampScalar:function(){var t,e;return function(n,i){return void 0===t&&(t=new r,e=new r),t.set(n,n),e.set(i,i),this.clamp(t,e)}}(),clampLength:function(t,e){var r=this.length();return this.multiplyScalar(Math.max(t,Math.min(e,r))/r)},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},roundToZero:function(){return this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x),this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y),this},negate:function(){return this.x=-this.x,this.y=-this.y,this},dot:function(t){return this.x*t.x+this.y*t.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length())},angle:function(){var t=Math.atan2(this.y,this.x);return 0>t&&(t+=2*Math.PI),t},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x;return t=this.y-t.y,e*e+t*t},distanceToManhattan:function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)},setLength:function(t){return this.multiplyScalar(t/this.length())},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this},lerpVectors:function(t,e,r){return this.subVectors(e,t).multiplyScalar(r).add(t)},equals:function(t){return t.x===this.x&&t.y===this.y},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t},fromAttribute:function(t,e,r){return void 0!==r&&console.warn("THREE.Vector2: offset has been removed from .fromAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this},rotateAround:function(t,e){var r=Math.cos(e),n=Math.sin(e),i=this.x-t.x,o=this.y-t.y;return this.x=i*r-o*n+t.x,this.y=i*n+o*r+t.y,this}};var ni=0;n.DEFAULT_IMAGE=void 0,n.DEFAULT_MAPPING=300,n.prototype={constructor:n,isTexture:!0,set needsUpdate(t){!0===t&&this.version++},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){if(void 0!==t.textures[this.uuid])return t.textures[this.uuid];var e={metadata:{version:4.4,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],wrap:[this.wrapS,this.wrapT],minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY};if(void 0!==this.image){var r=this.image;if(void 0===r.uuid&&(r.uuid=ri.generateUUID()),void 0===t.images[r.uuid]){var n,i=t.images,o=r.uuid,a=r.uuid;void 0!==r.toDataURL?n=r:(n=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),n.width=r.width,n.height=r.height,n.getContext("2d").drawImage(r,0,0,r.width,r.height)),n=2048<n.width||2048<n.height?n.toDataURL("image/jpeg",.6):n.toDataURL("image/png"),i[o]={uuid:a,url:n}}e.image=r.uuid}return t.textures[this.uuid]=e},dispose:function(){this.dispatchEvent({type:"dispose"})},transformUv:function(t){if(300===this.mapping){if(t.multiply(this.repeat),t.add(this.offset),0>t.x||1<t.x)switch(this.wrapS){case 1e3:t.x-=Math.floor(t.x);break;case 1001:t.x=0>t.x?0:1;break;case 1002:t.x=1===Math.abs(Math.floor(t.x)%2)?Math.ceil(t.x)-t.x:t.x-Math.floor(t.x)}if(0>t.y||1<t.y)switch(this.wrapT){case 1e3:t.y-=Math.floor(t.y);break;case 1001:t.y=0>t.y?0:1;break;case 1002:t.y=1===Math.abs(Math.floor(t.y)%2)?Math.ceil(t.y)-t.y:t.y-Math.floor(t.y)}this.flipY&&(t.y=1-t.y)}}},Object.assign(n.prototype,e.prototype),i.prototype={constructor:i,isVector4:!0,set:function(t,e,r,n){return this.x=t,this.y=e,this.z=r,this.w=n,this},setScalar:function(t){return this.w=this.z=this.y=this.x=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setW:function(t){return this.w=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)},subScalar:function(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this},multiplyScalar:function(t){return isFinite(t)?(this.x*=t,this.y*=t,this.z*=t,this.w*=t):this.w=this.z=this.y=this.x=0,this},applyMatrix4:function(t){var e=this.x,r=this.y,n=this.z,i=this.w;return t=t.elements,this.x=t[0]*e+t[4]*r+t[8]*n+t[12]*i,this.y=t[1]*e+t[5]*r+t[9]*n+t[13]*i,this.z=t[2]*e+t[6]*r+t[10]*n+t[14]*i,this.w=t[3]*e+t[7]*r+t[11]*n+t[15]*i,this},divideScalar:function(t){return this.multiplyScalar(1/t)},setAxisAngleFromQuaternion:function(t){this.w=2*Math.acos(t.w);var e=Math.sqrt(1-t.w*t.w);return 1e-4>e?(this.x=1,this.z=this.y=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this},setAxisAngleFromRotationMatrix:function(t){var e,r,n;t=t.elements;var i=t[0];n=t[4];var o=t[8],a=t[1],s=t[5],c=t[9];r=t[2],e=t[6];var u=t[10];return.01>Math.abs(n-a)&&.01>Math.abs(o-r)&&.01>Math.abs(c-e)?.1>Math.abs(n+a)&&.1>Math.abs(o+r)&&.1>Math.abs(c+e)&&.1>Math.abs(i+s+u-3)?(this.set(1,0,0,0),this):(t=Math.PI,i=(i+1)/2,s=(s+1)/2,u=(u+1)/2,n=(n+a)/4,o=(o+r)/4,c=(c+e)/4,i>s&&i>u?.01>i?(e=0,n=r=.707106781):(e=Math.sqrt(i),r=n/e,n=o/e):s>u?.01>s?(e=.707106781,r=0,n=.707106781):(r=Math.sqrt(s),e=n/r,n=c/r):.01>u?(r=e=.707106781,n=0):(n=Math.sqrt(u),e=o/n,r=c/n),this.set(e,r,n,t),this):(t=Math.sqrt((e-c)*(e-c)+(o-r)*(o-r)+(a-n)*(a-n)),.001>Math.abs(t)&&(t=1),this.x=(e-c)/t,this.y=(o-r)/t,this.z=(a-n)/t,this.w=Math.acos((i+s+u-1)/2),this)},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this},clampScalar:function(){var t,e;return function(r,n){return void 0===t&&(t=new i,e=new i),t.set(r,r,r,r),e.set(n,n,n,n),this.clamp(t,e)}}(),floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this},roundToZero:function(){return this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x),this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y),this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z),this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(t){return this.multiplyScalar(t/this.length())},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this},lerpVectors:function(t,e,r){return this.subVectors(e,t).multiplyScalar(r).add(t)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t},fromAttribute:function(t,e,r){return void 0!==r&&console.warn("THREE.Vector4: offset has been removed from .fromAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}},Object.assign(o.prototype,e.prototype,{isWebGLRenderTarget:!0,setSize:function(t,e){this.width===t&&this.height===e||(this.width=t,this.height=e,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.width=t.width,this.height=t.height,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),a.prototype=Object.create(o.prototype),a.prototype.constructor=a,a.prototype.isWebGLRenderTargetCube=!0,s.prototype={constructor:s,get x(){return this._x},set x(t){this._x=t,this.onChangeCallback()},get y(){return this._y},set y(t){this._y=t,this.onChangeCallback()},get z(){return this._z},set z(t){this._z=t,this.onChangeCallback()},get w(){return this._w},set w(t){this._w=t,this.onChangeCallback()},set:function(t,e,r,n){return this._x=t,this._y=e,this._z=r,this._w=n,this.onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this.onChangeCallback(),this},setFromEuler:function(t,e){if(!1===(t&&t.isEuler))throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var r=Math.cos(t._x/2),n=Math.cos(t._y/2),i=Math.cos(t._z/2),o=Math.sin(t._x/2),a=Math.sin(t._y/2),s=Math.sin(t._z/2),c=t.order;return"XYZ"===c?(this._x=o*n*i+r*a*s,this._y=r*a*i-o*n*s,this._z=r*n*s+o*a*i,this._w=r*n*i-o*a*s):"YXZ"===c?(this._x=o*n*i+r*a*s,this._y=r*a*i-o*n*s,this._z=r*n*s-o*a*i,this._w=r*n*i+o*a*s):"ZXY"===c?(this._x=o*n*i-r*a*s,this._y=r*a*i+o*n*s,this._z=r*n*s+o*a*i,this._w=r*n*i-o*a*s):"ZYX"===c?(this._x=o*n*i-r*a*s,this._y=r*a*i+o*n*s,this._z=r*n*s-o*a*i,this._w=r*n*i+o*a*s):"YZX"===c?(this._x=o*n*i+r*a*s,this._y=r*a*i+o*n*s,this._z=r*n*s-o*a*i,this._w=r*n*i-o*a*s):"XZY"===c&&(this._x=o*n*i-r*a*s,this._y=r*a*i-o*n*s,this._z=r*n*s+o*a*i,this._w=r*n*i+o*a*s),!1!==e&&this.onChangeCallback(),this},setFromAxisAngle:function(t,e){var r=e/2,n=Math.sin(r);return this._x=t.x*n,this._y=t.y*n,this._z=t.z*n,this._w=Math.cos(r),this.onChangeCallback(),this},setFromRotationMatrix:function(t){var e=t.elements,r=e[0];t=e[4];var n=e[8],i=e[1],o=e[5],a=e[9],s=e[2],c=e[6],e=e[10],u=r+o+e;return 0<u?(r=.5/Math.sqrt(u+1),this._w=.25/r,this._x=(c-a)*r,this._y=(n-s)*r,this._z=(i-t)*r):r>o&&r>e?(r=2*Math.sqrt(1+r-o-e),this._w=(c-a)/r,this._x=.25*r,this._y=(t+i)/r,this._z=(n+s)/r):o>e?(r=2*Math.sqrt(1+o-r-e),this._w=(n-s)/r,this._x=(t+i)/r,this._y=.25*r,this._z=(a+c)/r):(r=2*Math.sqrt(1+e-r-o),this._w=(i-t)/r,this._x=(n+s)/r,this._y=(a+c)/r,this._z=.25*r),this.onChangeCallback(),this},setFromUnitVectors:function(){var t,e;return function(r,n){return void 0===t&&(t=new c),e=r.dot(n)+1,1e-6>e?(e=0,Math.abs(r.x)>Math.abs(r.z)?t.set(-r.y,r.x,0):t.set(0,-r.z,r.y)):t.crossVectors(r,n),this._x=t.x,this._y=t.y,this._z=t.z,this._w=e,this.normalize()}}(),inverse:function(){return this.conjugate().normalize()},conjugate:function(){return this._x*=-1,this._y*=-1,this._z*=-1,this.onChangeCallback(),this},dot:function(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var t=this.length();return 0===t?(this._z=this._y=this._x=0,this._w=1):(t=1/t,this._x*=t,this._y*=t,this._z*=t,this._w*=t),this.onChangeCallback(),this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)},premultiply:function(t){return this.multiplyQuaternions(t,this)},multiplyQuaternions:function(t,e){var r=t._x,n=t._y,i=t._z,o=t._w,a=e._x,s=e._y,c=e._z,u=e._w;return this._x=r*u+o*a+n*c-i*s,this._y=n*u+o*s+i*a-r*c,this._z=i*u+o*c+r*s-n*a,this._w=o*u-r*a-n*s-i*c,this.onChangeCallback(),this},slerp:function(t,e){if(0===e)return this;if(1===e)return this.copy(t);var r=this._x,n=this._y,i=this._z,o=this._w,a=o*t._w+r*t._x+n*t._y+i*t._z;if(0>a?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),1<=a)return this._w=o,this._x=r,this._y=n,this._z=i,this;var s=Math.sqrt(1-a*a);if(.001>Math.abs(s))return this._w=.5*(o+this._w),this._x=.5*(r+this._x),this._y=.5*(n+this._y),this._z=.5*(i+this._z),this;var c=Math.atan2(s,a),a=Math.sin((1-e)*c)/s,s=Math.sin(e*c)/s;return this._w=o*a+this._w*s,this._x=r*a+this._x*s,this._y=n*a+this._y*s,this._z=i*a+this._z*s,this.onChangeCallback(),this},equals:function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w},fromArray:function(t,e){return void 0===e&&(e=0),this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this.onChangeCallback(),this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t},onChange:function(t){return this.onChangeCallback=t,this},onChangeCallback:function(){}},Object.assign(s,{slerp:function(t,e,r,n){return r.copy(t).slerp(e,n)},slerpFlat:function(t,e,r,n,i,o,a){var s=r[n+0],c=r[n+1],u=r[n+2];r=r[n+3],n=i[o+0];var h=i[o+1],l=i[o+2];if(i=i[o+3],r!==i||s!==n||c!==h||u!==l){o=1-a;var p=s*n+c*h+u*l+r*i,f=0<=p?1:-1,d=1-p*p;d>Number.EPSILON&&(d=Math.sqrt(d),p=Math.atan2(d,p*f),o=Math.sin(o*p)/d,a=Math.sin(a*p)/d),f*=a,s=s*o+n*f,c=c*o+h*f,u=u*o+l*f,r=r*o+i*f,o===1-a&&(a=1/Math.sqrt(s*s+c*c+u*u+r*r),s*=a,c*=a,u*=a,r*=a)}t[e]=s,t[e+1]=c,t[e+2]=u,t[e+3]=r}}),c.prototype={constructor:c,isVector3:!0,set:function(t,e,r){return this.x=t,this.y=e,this.z=r,this},setScalar:function(t){return this.z=this.y=this.x=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)},subScalar:function(t){return this.x-=t,this.y-=t,this.z-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)},multiplyScalar:function(t){return isFinite(t)?(this.x*=t,this.y*=t,this.z*=t):this.z=this.y=this.x=0,this},multiplyVectors:function(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this},applyEuler:function(){var t;return function(e){return!1===(e&&e.isEuler)&&console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),void 0===t&&(t=new s),this.applyQuaternion(t.setFromEuler(e))}}(),applyAxisAngle:function(){var t;return function(e,r){return void 0===t&&(t=new s),this.applyQuaternion(t.setFromAxisAngle(e,r))}}(),applyMatrix3:function(t){var e=this.x,r=this.y,n=this.z;return t=t.elements,this.x=t[0]*e+t[3]*r+t[6]*n,this.y=t[1]*e+t[4]*r+t[7]*n,this.z=t[2]*e+t[5]*r+t[8]*n,this},applyMatrix4:function(t){var e=this.x,r=this.y,n=this.z;return t=t.elements,this.x=t[0]*e+t[4]*r+t[8]*n+t[12],this.y=t[1]*e+t[5]*r+t[9]*n+t[13],this.z=t[2]*e+t[6]*r+t[10]*n+t[14],this},applyProjection:function(t){var e=this.x,r=this.y,n=this.z;t=t.elements;var i=1/(t[3]*e+t[7]*r+t[11]*n+t[15]);return this.x=(t[0]*e+t[4]*r+t[8]*n+t[12])*i,this.y=(t[1]*e+t[5]*r+t[9]*n+t[13])*i,this.z=(t[2]*e+t[6]*r+t[10]*n+t[14])*i,this},applyQuaternion:function(t){var e=this.x,r=this.y,n=this.z,i=t.x,o=t.y,a=t.z;t=t.w;var s=t*e+o*n-a*r,c=t*r+a*e-i*n,u=t*n+i*r-o*e,e=-i*e-o*r-a*n;return this.x=s*t+e*-i+c*-a-u*-o,this.y=c*t+e*-o+u*-i-s*-a,this.z=u*t+e*-a+s*-o-c*-i,this},project:function(){var t;return function(e){return void 0===t&&(t=new u),t.multiplyMatrices(e.projectionMatrix,t.getInverse(e.matrixWorld)),this.applyProjection(t)}}(),unproject:function(){var t;return function(e){return void 0===t&&(t=new u),t.multiplyMatrices(e.matrixWorld,t.getInverse(e.projectionMatrix)),this.applyProjection(t)}}(),transformDirection:function(t){var e=this.x,r=this.y,n=this.z;return t=t.elements,this.x=t[0]*e+t[4]*r+t[8]*n,this.y=t[1]*e+t[5]*r+t[9]*n,this.z=t[2]*e+t[6]*r+t[10]*n,this.normalize()},divide:function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this},divideScalar:function(t){return this.multiplyScalar(1/t)},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this},clampScalar:function(){var t,e;return function(r,n){return void 0===t&&(t=new c,e=new c),t.set(r,r,r),e.set(n,n,n),this.clamp(t,e)}}(),clampLength:function(t,e){var r=this.length();return this.multiplyScalar(Math.max(t,Math.min(e,r))/r)},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){return this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x),this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y),this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(t){return this.multiplyScalar(t/this.length())},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this},lerpVectors:function(t,e,r){return this.subVectors(e,t).multiplyScalar(r).add(t)},cross:function(t,e){if(void 0!==e)return console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e);var r=this.x,n=this.y,i=this.z;return this.x=n*t.z-i*t.y,this.y=i*t.x-r*t.z,this.z=r*t.y-n*t.x,this},crossVectors:function(t,e){var r=t.x,n=t.y,i=t.z,o=e.x,a=e.y,s=e.z;return this.x=n*s-i*a,this.y=i*o-r*s,this.z=r*a-n*o,this},projectOnVector:function(t){var e=t.dot(this)/t.lengthSq();return this.copy(t).multiplyScalar(e)},projectOnPlane:function(){var t;return function(e){return void 0===t&&(t=new c),t.copy(this).projectOnVector(e),this.sub(t)}}(),reflect:function(){var t;return function(e){return void 0===t&&(t=new c),this.sub(t.copy(e).multiplyScalar(2*this.dot(e)))}}(),angleTo:function(t){return t=this.dot(t)/Math.sqrt(this.lengthSq()*t.lengthSq()),Math.acos(ri.clamp(t,-1,1))},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,r=this.y-t.y;return t=this.z-t.z,e*e+r*r+t*t},distanceToManhattan:function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)},setFromSpherical:function(t){var e=Math.sin(t.phi)*t.radius;return this.x=e*Math.sin(t.theta),this.y=Math.cos(t.phi)*t.radius,this.z=e*Math.cos(t.theta),this},setFromCylindrical:function(t){return this.x=t.radius*Math.sin(t.theta),this.y=t.y,this.z=t.radius*Math.cos(t.theta),this},setFromMatrixPosition:function(t){return this.setFromMatrixColumn(t,3)},setFromMatrixScale:function(t){var e=this.setFromMatrixColumn(t,0).length(),r=this.setFromMatrixColumn(t,1).length();return t=this.setFromMatrixColumn(t,2).length(),this.x=e,this.y=r,this.z=t,this},setFromMatrixColumn:function(t,e){if("number"==typeof t){console.warn("THREE.Vector3: setFromMatrixColumn now expects ( matrix, index ).");var r=t;t=e,e=r}return this.fromArray(t.elements,4*e)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t},fromAttribute:function(t,e,r){return void 0!==r&&console.warn("THREE.Vector3: offset has been removed from .fromAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}},u.prototype={constructor:u,isMatrix4:!0,set:function(t,e,r,n,i,o,a,s,c,u,h,l,p,f,d,m){var v=this.elements;return v[0]=t,v[4]=e,v[8]=r,v[12]=n,v[1]=i,v[5]=o,v[9]=a,v[13]=s,v[2]=c,v[6]=u,v[10]=h,v[14]=l,v[3]=p,v[7]=f,v[11]=d,v[15]=m,this},identity:function(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this},clone:function(){return(new u).fromArray(this.elements)},copy:function(t){return this.elements.set(t.elements),this},copyPosition:function(t){var e=this.elements;return t=t.elements,e[12]=t[12],e[13]=t[13],e[14]=t[14],this},extractBasis:function(t,e,r){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),r.setFromMatrixColumn(this,2),this},makeBasis:function(t,e,r){return this.set(t.x,e.x,r.x,0,t.y,e.y,r.y,0,t.z,e.z,r.z,0,0,0,0,1),this},extractRotation:function(){var t;return function(e){void 0===t&&(t=new c);var r=this.elements,n=e.elements,i=1/t.setFromMatrixColumn(e,0).length(),o=1/t.setFromMatrixColumn(e,1).length();return e=1/t.setFromMatrixColumn(e,2).length(),r[0]=n[0]*i,r[1]=n[1]*i,r[2]=n[2]*i,r[4]=n[4]*o,r[5]=n[5]*o,r[6]=n[6]*o,r[8]=n[8]*e,r[9]=n[9]*e,r[10]=n[10]*e,this}}(),makeRotationFromEuler:function(t){!1===(t&&t.isEuler)&&console.error("THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var e=this.elements,r=t.x,n=t.y,i=t.z,o=Math.cos(r),r=Math.sin(r),a=Math.cos(n),n=Math.sin(n),s=Math.cos(i),i=Math.sin(i);if("XYZ"===t.order){t=o*s;var c=o*i,u=r*s,h=r*i;e[0]=a*s,e[4]=-a*i,e[8]=n,e[1]=c+u*n,e[5]=t-h*n,e[9]=-r*a,e[2]=h-t*n,e[6]=u+c*n,e[10]=o*a}else"YXZ"===t.order?(t=a*s,c=a*i,u=n*s,h=n*i,e[0]=t+h*r,e[4]=u*r-c,e[8]=o*n,e[1]=o*i,e[5]=o*s,e[9]=-r,e[2]=c*r-u,e[6]=h+t*r,e[10]=o*a):"ZXY"===t.order?(t=a*s,c=a*i,u=n*s,h=n*i,e[0]=t-h*r,e[4]=-o*i,e[8]=u+c*r,e[1]=c+u*r,e[5]=o*s,e[9]=h-t*r,e[2]=-o*n,e[6]=r,e[10]=o*a):"ZYX"===t.order?(t=o*s,c=o*i,u=r*s,h=r*i,e[0]=a*s,e[4]=u*n-c,e[8]=t*n+h,e[1]=a*i,e[5]=h*n+t,e[9]=c*n-u,e[2]=-n,e[6]=r*a,e[10]=o*a):"YZX"===t.order?(t=o*a,c=o*n,u=r*a,h=r*n,e[0]=a*s,e[4]=h-t*i,e[8]=u*i+c,e[1]=i,e[5]=o*s,e[9]=-r*s,e[2]=-n*s,e[6]=c*i+u,e[10]=t-h*i):"XZY"===t.order&&(t=o*a,c=o*n,u=r*a,h=r*n,e[0]=a*s,e[4]=-i,e[8]=n*s,e[1]=t*i+h,e[5]=o*s,e[9]=c*i-u,e[2]=u*i-c,e[6]=r*s,e[10]=h*i+t);return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},makeRotationFromQuaternion:function(t){var e=this.elements,r=t.x,n=t.y,i=t.z,o=t.w,a=r+r,s=n+n,c=i+i;t=r*a;var u=r*s,r=r*c,h=n*s,n=n*c,i=i*c,a=o*a,s=o*s,o=o*c;return e[0]=1-(h+i),e[4]=u-o,e[8]=r+s,e[1]=u+o,e[5]=1-(t+i),e[9]=n-a,e[2]=r-s,e[6]=n+a,e[10]=1-(t+h),e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},lookAt:function(){var t,e,r;return function(n,i,o){void 0===t&&(t=new c,e=new c,r=new c);var a=this.elements;return r.subVectors(n,i).normalize(),0===r.lengthSq()&&(r.z=1),t.crossVectors(o,r).normalize(),0===t.lengthSq()&&(r.z+=1e-4,t.crossVectors(o,r).normalize()),e.crossVectors(r,t),a[0]=t.x,a[4]=e.x,a[8]=r.x,a[1]=t.y,a[5]=e.y,a[9]=r.y,a[2]=t.z,a[6]=e.z,a[10]=r.z,this}}(),multiply:function(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)},premultiply:function(t){return this.multiplyMatrices(t,this)},multiplyMatrices:function(t,e){var r=t.elements,n=e.elements,i=this.elements,o=r[0],a=r[4],s=r[8],c=r[12],u=r[1],h=r[5],l=r[9],p=r[13],f=r[2],d=r[6],m=r[10],v=r[14],g=r[3],y=r[7],b=r[11],r=r[15],_=n[0],x=n[4],w=n[8],S=n[12],M=n[1],E=n[5],T=n[9],C=n[13],O=n[2],P=n[6],A=n[10],j=n[14],R=n[3],L=n[7],N=n[11],n=n[15];return i[0]=o*_+a*M+s*O+c*R,i[4]=o*x+a*E+s*P+c*L,i[8]=o*w+a*T+s*A+c*N,i[12]=o*S+a*C+s*j+c*n,i[1]=u*_+h*M+l*O+p*R,i[5]=u*x+h*E+l*P+p*L,i[9]=u*w+h*T+l*A+p*N,i[13]=u*S+h*C+l*j+p*n,i[2]=f*_+d*M+m*O+v*R,i[6]=f*x+d*E+m*P+v*L,i[10]=f*w+d*T+m*A+v*N,i[14]=f*S+d*C+m*j+v*n,i[3]=g*_+y*M+b*O+r*R,i[7]=g*x+y*E+b*P+r*L,i[11]=g*w+y*T+b*A+r*N,i[15]=g*S+y*C+b*j+r*n,this},multiplyToArray:function(t,e,r){var n=this.elements;return this.multiplyMatrices(t,e),r[0]=n[0],r[1]=n[1],r[2]=n[2],r[3]=n[3],r[4]=n[4],r[5]=n[5],r[6]=n[6],r[7]=n[7],r[8]=n[8],r[9]=n[9],r[10]=n[10],r[11]=n[11],r[12]=n[12],r[13]=n[13],r[14]=n[14],r[15]=n[15],this},multiplyScalar:function(t){var e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this},applyToVector3Array:function(){var t;return function(e,r,n){void 0===t&&(t=new c),void 0===r&&(r=0),void 0===n&&(n=e.length);for(var i=0;i<n;i+=3,r+=3)t.fromArray(e,r),t.applyMatrix4(this),t.toArray(e,r);return e}}(),applyToBufferAttribute:function(){var t;return function(e){void 0===t&&(t=new c);for(var r=0,n=e.count;r<n;r++)t.x=e.getX(r),t.y=e.getY(r),t.z=e.getZ(r),t.applyMatrix4(this),e.setXYZ(r,t.x,t.y,t.z);return e}}(),determinant:function(){var t=this.elements,e=t[0],r=t[4],n=t[8],i=t[12],o=t[1],a=t[5],s=t[9],c=t[13],u=t[2],h=t[6],l=t[10],p=t[14];return t[3]*(+i*s*h-n*c*h-i*a*l+r*c*l+n*a*p-r*s*p)+t[7]*(+e*s*p-e*c*l+i*o*l-n*o*p+n*c*u-i*s*u)+t[11]*(+e*c*h-e*a*p-i*o*h+r*o*p+i*a*u-r*c*u)+t[15]*(-n*a*u-e*s*h+e*a*l+n*o*h-r*o*l+r*s*u)},transpose:function(){var t,e=this.elements;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this},setPosition:function(t){var e=this.elements
+;return e[12]=t.x,e[13]=t.y,e[14]=t.z,this},getInverse:function(t,e){var r=this.elements,n=t.elements,i=n[0],o=n[1],a=n[2],s=n[3],c=n[4],u=n[5],h=n[6],l=n[7],p=n[8],f=n[9],d=n[10],m=n[11],v=n[12],g=n[13],y=n[14],n=n[15],b=f*y*l-g*d*l+g*h*m-u*y*m-f*h*n+u*d*n,_=v*d*l-p*y*l-v*h*m+c*y*m+p*h*n-c*d*n,x=p*g*l-v*f*l+v*u*m-c*g*m-p*u*n+c*f*n,w=v*f*h-p*g*h-v*u*d+c*g*d+p*u*y-c*f*y,S=i*b+o*_+a*x+s*w;if(0===S){if(!0===e)throw Error("THREE.Matrix4.getInverse(): can't invert matrix, determinant is 0");return console.warn("THREE.Matrix4.getInverse(): can't invert matrix, determinant is 0"),this.identity()}return S=1/S,r[0]=b*S,r[1]=(g*d*s-f*y*s-g*a*m+o*y*m+f*a*n-o*d*n)*S,r[2]=(u*y*s-g*h*s+g*a*l-o*y*l-u*a*n+o*h*n)*S,r[3]=(f*h*s-u*d*s-f*a*l+o*d*l+u*a*m-o*h*m)*S,r[4]=_*S,r[5]=(p*y*s-v*d*s+v*a*m-i*y*m-p*a*n+i*d*n)*S,r[6]=(v*h*s-c*y*s-v*a*l+i*y*l+c*a*n-i*h*n)*S,r[7]=(c*d*s-p*h*s+p*a*l-i*d*l-c*a*m+i*h*m)*S,r[8]=x*S,r[9]=(v*f*s-p*g*s-v*o*m+i*g*m+p*o*n-i*f*n)*S,r[10]=(c*g*s-v*u*s+v*o*l-i*g*l-c*o*n+i*u*n)*S,r[11]=(p*u*s-c*f*s-p*o*l+i*f*l+c*o*m-i*u*m)*S,r[12]=w*S,r[13]=(p*g*a-v*f*a+v*o*d-i*g*d-p*o*y+i*f*y)*S,r[14]=(v*u*a-c*g*a-v*o*h+i*g*h+c*o*y-i*u*y)*S,r[15]=(c*f*a-p*u*a+p*o*h-i*f*h-c*o*d+i*u*d)*S,this},scale:function(t){var e=this.elements,r=t.x,n=t.y;return t=t.z,e[0]*=r,e[4]*=n,e[8]*=t,e[1]*=r,e[5]*=n,e[9]*=t,e[2]*=r,e[6]*=n,e[10]*=t,e[3]*=r,e[7]*=n,e[11]*=t,this},getMaxScaleOnAxis:function(){var t=this.elements;return Math.sqrt(Math.max(t[0]*t[0]+t[1]*t[1]+t[2]*t[2],t[4]*t[4]+t[5]*t[5]+t[6]*t[6],t[8]*t[8]+t[9]*t[9]+t[10]*t[10]))},makeTranslation:function(t,e,r){return this.set(1,0,0,t,0,1,0,e,0,0,1,r,0,0,0,1),this},makeRotationX:function(t){var e=Math.cos(t);return t=Math.sin(t),this.set(1,0,0,0,0,e,-t,0,0,t,e,0,0,0,0,1),this},makeRotationY:function(t){var e=Math.cos(t);return t=Math.sin(t),this.set(e,0,t,0,0,1,0,0,-t,0,e,0,0,0,0,1),this},makeRotationZ:function(t){var e=Math.cos(t);return t=Math.sin(t),this.set(e,-t,0,0,t,e,0,0,0,0,1,0,0,0,0,1),this},makeRotationAxis:function(t,e){var r=Math.cos(e),n=Math.sin(e),i=1-r,o=t.x,a=t.y,s=t.z,c=i*o,u=i*a;return this.set(c*o+r,c*a-n*s,c*s+n*a,0,c*a+n*s,u*a+r,u*s-n*o,0,c*s-n*a,u*s+n*o,i*s*s+r,0,0,0,0,1),this},makeScale:function(t,e,r){return this.set(t,0,0,0,0,e,0,0,0,0,r,0,0,0,0,1),this},makeShear:function(t,e,r){return this.set(1,e,r,0,t,1,r,0,t,e,1,0,0,0,0,1),this},compose:function(t,e,r){return this.makeRotationFromQuaternion(e),this.scale(r),this.setPosition(t),this},decompose:function(){var t,e;return function(r,n,i){void 0===t&&(t=new c,e=new u);var o=this.elements,a=t.set(o[0],o[1],o[2]).length(),s=t.set(o[4],o[5],o[6]).length(),h=t.set(o[8],o[9],o[10]).length();0>this.determinant()&&(a=-a),r.x=o[12],r.y=o[13],r.z=o[14],e.elements.set(this.elements),r=1/a;var o=1/s,l=1/h;return e.elements[0]*=r,e.elements[1]*=r,e.elements[2]*=r,e.elements[4]*=o,e.elements[5]*=o,e.elements[6]*=o,e.elements[8]*=l,e.elements[9]*=l,e.elements[10]*=l,n.setFromRotationMatrix(e),i.x=a,i.y=s,i.z=h,this}}(),makeFrustum:function(t,e,r,n,i,o){var a=this.elements;return a[0]=2*i/(e-t),a[4]=0,a[8]=(e+t)/(e-t),a[12]=0,a[1]=0,a[5]=2*i/(n-r),a[9]=(n+r)/(n-r),a[13]=0,a[2]=0,a[6]=0,a[10]=-(o+i)/(o-i),a[14]=-2*o*i/(o-i),a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this},makePerspective:function(t,e,r,n){t=r*Math.tan(ri.DEG2RAD*t*.5);var i=-t;return this.makeFrustum(i*e,t*e,i,t,r,n)},makeOrthographic:function(t,e,r,n,i,o){var a=this.elements,s=1/(e-t),c=1/(r-n),u=1/(o-i);return a[0]=2*s,a[4]=0,a[8]=0,a[12]=-(e+t)*s,a[1]=0,a[5]=2*c,a[9]=0,a[13]=-(r+n)*c,a[2]=0,a[6]=0,a[10]=-2*u,a[14]=-(o+i)*u,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this},equals:function(t){var e=this.elements;t=t.elements;for(var r=0;16>r;r++)if(e[r]!==t[r])return!1;return!0},fromArray:function(t,e){void 0===e&&(e=0);for(var r=0;16>r;r++)this.elements[r]=t[r+e];return this},toArray:function(t,e){void 0===t&&(t=[]),void 0===e&&(e=0);var r=this.elements;return t[e]=r[0],t[e+1]=r[1],t[e+2]=r[2],t[e+3]=r[3],t[e+4]=r[4],t[e+5]=r[5],t[e+6]=r[6],t[e+7]=r[7],t[e+8]=r[8],t[e+9]=r[9],t[e+10]=r[10],t[e+11]=r[11],t[e+12]=r[12],t[e+13]=r[13],t[e+14]=r[14],t[e+15]=r[15],t}},h.prototype=Object.create(n.prototype),h.prototype.constructor=h,h.prototype.isCubeTexture=!0,Object.defineProperty(h.prototype,"images",{get:function(){return this.image},set:function(t){this.image=t}});var ii=new n,oi=new h,ai=[],si=[];B.prototype.setValue=function(t,e){for(var r=this.seq,n=0,i=r.length;n!==i;++n){var o=r[n];o.setValue(t,e[o.id])}};var ci=/([\w\d_]+)(\])?(\[|\.)?/g;z.prototype.setValue=function(t,e,r){void 0!==(e=this.map[e])&&e.setValue(t,r,this.renderer)},z.prototype.set=function(t,e,r){var n=this.map[r];void 0!==n&&n.setValue(t,e[r],this.renderer)},z.prototype.setOptional=function(t,e,r){void 0!==(e=e[r])&&this.setValue(t,r,e)},z.upload=function(t,e,r,n){for(var i=0,o=e.length;i!==o;++i){var a=e[i],s=r[a.id];!1!==s.needsUpdate&&a.setValue(t,s.value,n)}},z.seqWithValue=function(t,e){for(var r=[],n=0,i=t.length;n!==i;++n){var o=t[n];o.id in e&&r.push(o)}return r};var ui={merge:function(t){for(var e={},r=0;r<t.length;r++){var n,i=this.clone(t[r]);for(n in i)e[n]=i[n]}return e},clone:function(t){var e,r={};for(e in t){r[e]={};for(var n in t[e]){var i=t[e][n];i&&(i.isColor||i.isMatrix3||i.isMatrix4||i.isVector2||i.isVector3||i.isVector4||i.isTexture)?r[e][n]=i.clone():Array.isArray(i)?r[e][n]=i.slice():r[e][n]=i}}return r}},hi={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif\n",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif\n",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif\n",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif\n",aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",begin_vertex:"\nvec3 transformed = vec3( position );\n",beginnormal_vertex:"\nvec3 objectNormal = vec3( normal );\n",bsdfs:"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\t\tif( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t\t}\n\t\treturn 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 ltcTextureCoords( const in GeometricContext geometry, const in float roughness ) {\n\tconst float LUT_SIZE  = 64.0;\n\tconst float LUT_SCALE = (LUT_SIZE - 1.0)/LUT_SIZE;\n\tconst float LUT_BIAS  = 0.5/LUT_SIZE;\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 P = geometry.position;\n\tfloat theta = acos( dot( N, V ) );\n\tvec2 uv = vec2(\n\t\tsqrt( saturate( roughness ) ),\n\t\tsaturate( theta / ( 0.5 * PI ) ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nvoid clipQuadToHorizon( inout vec3 L[5], out int n ) {\n\tint config = 0;\n\tif ( L[0].z > 0.0 ) config += 1;\n\tif ( L[1].z > 0.0 ) config += 2;\n\tif ( L[2].z > 0.0 ) config += 4;\n\tif ( L[3].z > 0.0 ) config += 8;\n\tn = 0;\n\tif ( config == 0 ) {\n\t} else if ( config == 1 ) {\n\t\tn = 3;\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t\tL[2] = -L[3].z * L[0] + L[0].z * L[3];\n\t} else if ( config == 2 ) {\n\t\tn = 3;\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t} else if ( config == 3 ) {\n\t\tn = 4;\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t\tL[3] = -L[3].z * L[0] + L[0].z * L[3];\n\t} else if ( config == 4 ) {\n\t\tn = 3;\n\t\tL[0] = -L[3].z * L[2] + L[2].z * L[3];\n\t\tL[1] = -L[1].z * L[2] + L[2].z * L[1];\n\t} else if ( config == 5 ) {\n\t\tn = 0;\n\t} else if ( config == 6 ) {\n\t\tn = 4;\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t\tL[3] = -L[3].z * L[2] + L[2].z * L[3];\n\t} else if ( config == 7 ) {\n\t\tn = 5;\n\t\tL[4] = -L[3].z * L[0] + L[0].z * L[3];\n\t\tL[3] = -L[3].z * L[2] + L[2].z * L[3];\n\t} else if ( config == 8 ) {\n\t\tn = 3;\n\t\tL[0] = -L[0].z * L[3] + L[3].z * L[0];\n\t\tL[1] = -L[2].z * L[3] + L[3].z * L[2];\n\t\tL[2] =  L[3];\n\t} else if ( config == 9 ) {\n\t\tn = 4;\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t\tL[2] = -L[2].z * L[3] + L[3].z * L[2];\n\t} else if ( config == 10 ) {\n\t\tn = 0;\n\t} else if ( config == 11 ) {\n\t\tn = 5;\n\t\tL[4] = L[3];\n\t\tL[3] = -L[2].z * L[3] + L[3].z * L[2];\n\t\tL[2] = -L[2].z * L[1] + L[1].z * L[2];\n\t} else if ( config == 12 ) {\n\t\tn = 4;\n\t\tL[1] = -L[1].z * L[2] + L[2].z * L[1];\n\t\tL[0] = -L[0].z * L[3] + L[3].z * L[0];\n\t} else if ( config == 13 ) {\n\t\tn = 5;\n\t\tL[4] = L[3];\n\t\tL[3] = L[2];\n\t\tL[2] = -L[1].z * L[2] + L[2].z * L[1];\n\t\tL[1] = -L[1].z * L[0] + L[0].z * L[1];\n\t} else if ( config == 14 ) {\n\t\tn = 5;\n\t\tL[4] = -L[0].z * L[3] + L[3].z * L[0];\n\t\tL[0] = -L[0].z * L[1] + L[1].z * L[0];\n\t} else if ( config == 15 ) {\n\t\tn = 4;\n\t}\n\tif ( n == 3 )\n\t\tL[3] = L[0];\n\tif ( n == 4 )\n\t\tL[4] = L[0];\n}\nfloat integrateLtcBrdfOverRectEdge( vec3 v1, vec3 v2 ) {\n\tfloat cosTheta = dot( v1, v2 );\n\tfloat theta = acos( cosTheta );\n\tfloat res = cross( v1, v2 ).z * ( ( theta > 0.001 ) ? theta / sin( theta ) : 1.0 );\n\treturn res;\n}\nvoid initRectPoints( const in vec3 pos, const in vec3 halfWidth, const in vec3 halfHeight, out vec3 rectPoints[4] ) {\n\trectPoints[0] = pos - halfWidth - halfHeight;\n\trectPoints[1] = pos + halfWidth - halfHeight;\n\trectPoints[2] = pos + halfWidth + halfHeight;\n\trectPoints[3] = pos - halfWidth + halfHeight;\n}\nvec3 integrateLtcBrdfOverRect( const in GeometricContext geometry, const in mat3 brdfMat, const in vec3 rectPoints[4] ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 P = geometry.position;\n\tvec3 T1, T2;\n\tT1 = normalize(V - N * dot( V, N ));\n\tT2 = - cross( N, T1 );\n\tmat3 brdfWrtSurface = brdfMat * transpose( mat3( T1, T2, N ) );\n\tvec3 clippedRect[5];\n\tclippedRect[0] = brdfWrtSurface * ( rectPoints[0] - P );\n\tclippedRect[1] = brdfWrtSurface * ( rectPoints[1] - P );\n\tclippedRect[2] = brdfWrtSurface * ( rectPoints[2] - P );\n\tclippedRect[3] = brdfWrtSurface * ( rectPoints[3] - P );\n\tint n;\n\tclipQuadToHorizon(clippedRect, n);\n\tif ( n == 0 )\n\t\treturn vec3( 0, 0, 0 );\n\tclippedRect[0] = normalize( clippedRect[0] );\n\tclippedRect[1] = normalize( clippedRect[1] );\n\tclippedRect[2] = normalize( clippedRect[2] );\n\tclippedRect[3] = normalize( clippedRect[3] );\n\tclippedRect[4] = normalize( clippedRect[4] );\n\tfloat sum = 0.0;\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[0], clippedRect[1] );\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[1], clippedRect[2] );\n\tsum += integrateLtcBrdfOverRectEdge( clippedRect[2], clippedRect[3] );\n\tif (n >= 4)\n\t\tsum += integrateLtcBrdfOverRectEdge( clippedRect[3], clippedRect[4] );\n\tif (n == 5)\n\t\tsum += integrateLtcBrdfOverRectEdge( clippedRect[4], clippedRect[0] );\n\tsum = max( 0.0, sum );\n\tvec3 Lo_i = vec3( sum, sum, sum );\n\treturn Lo_i;\n}\nvec3 Rect_Area_Light_Specular_Reflectance(\n\t\tconst in GeometricContext geometry,\n\t\tconst in vec3 lightPos, const in vec3 lightHalfWidth, const in vec3 lightHalfHeight,\n\t\tconst in float roughness,\n\t\tconst in sampler2D ltcMat, const in sampler2D ltcMag ) {\n\tvec3 rectPoints[4];\n\tinitRectPoints( lightPos, lightHalfWidth, lightHalfHeight, rectPoints );\n\tvec2 uv = ltcTextureCoords( geometry, roughness );\n\tvec4 brdfLtcApproxParams, t;\n\tbrdfLtcApproxParams = texture2D( ltcMat, uv );\n\tt = texture2D( ltcMat, uv );\n\tfloat brdfLtcScalar = texture2D( ltcMag, uv ).a;\n\tmat3 brdfLtcApproxMat = mat3(\n\t\tvec3(   1,   0, t.y ),\n\t\tvec3(   0, t.z,   0 ),\n\t\tvec3( t.w,   0, t.x )\n\t);\n\tvec3 specularReflectance = integrateLtcBrdfOverRect( geometry, brdfLtcApproxMat, rectPoints );\n\tspecularReflectance *= brdfLtcScalar;\n\treturn specularReflectance;\n}\nvec3 Rect_Area_Light_Diffuse_Reflectance(\n\t\tconst in GeometricContext geometry,\n\t\tconst in vec3 lightPos, const in vec3 lightHalfWidth, const in vec3 lightHalfHeight ) {\n\tvec3 rectPoints[4];\n\tinitRectPoints( lightPos, lightHalfWidth, lightHalfHeight, rectPoints );\n\tmat3 diffuseBrdfMat = mat3(1);\n\tvec3 diffuseReflectance = integrateLtcBrdfOverRect( geometry, diffuseBrdfMat, rectPoints );\n\treturn diffuseReflectance;\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = dFdx( surf_pos );\n\t\tvec3 vSigmaY = dFdy( surf_pos );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif\n",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\n\t\tvec4 plane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t\t\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\n\t\t\tvec4 plane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t\n\t#endif\n#endif\n",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif\n",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvarying vec3 vViewPosition;\n#endif\n",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif\n",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transpose( const in mat3 v ) {\n\tmat3 tmp;\n\ttmp[0] = vec3(v[0].x, v[1].x, v[2].x);\n\ttmp[1] = vec3(v[0].y, v[1].y, v[2].y);\n\ttmp[2] = vec3(v[0].z, v[1].z, v[2].z);\n\treturn tmp;\n}\n",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1  (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale =  bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ?  a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ?  a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ?  a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ?  0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ?  0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ?  0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif\n",defaultnormal_vertex:"#ifdef FLIP_SIDED\n\tobjectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;\n",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif\n",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normal * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif\n",encodings_fragment:"  gl_FragColor = linearToOutputTexel( gl_FragColor );\n",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n  return value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n  return vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n  return vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n  return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n  return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n  return vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n  float maxComponent = max( max( value.r, value.g ), value.b );\n  float fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n  return vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n  return vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n  float maxRGB = max( value.x, max( value.g, value.b ) );\n  float M      = clamp( maxRGB / maxRange, 0.0, 1.0 );\n  M            = ceil( M * 255.0 ) / 255.0;\n  return vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n    return vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n    float maxRGB = max( value.x, max( value.g, value.b ) );\n    float D      = max( maxRange / maxRGB, 1.0 );\n    D            = min( floor( D ) / 255.0, 1.0 );\n    return vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value )  {\n  vec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n  Xp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n  vec4 vResult;\n  vResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n  float Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n  vResult.w = fract(Le);\n  vResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n  return vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n  float Le = value.z * 255.0 + value.w;\n  vec3 Xp_Y_XYZp;\n  Xp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n  Xp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n  Xp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n  vec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n  return vec4( max(vRGB, 0.0), 1.0 );\n}\n",envmap_fragment:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\tsampleUV.y = saturate( flipNormal * reflectVec.y * 0.5 + 0.5 );\n\t\tsampleUV.x = atan( flipNormal * reflectVec.z, flipNormal * reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\tvec3 reflectView = flipNormal * normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif\n",envmap_pars_fragment:"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif\n",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif\n",envmap_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif\n",fog_fragment:"#ifdef USE_FOG\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tfloat depth = gl_FragDepthEXT / gl_FragCoord.w;\n\t#else\n\t\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n\t#endif\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * depth * depth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n",
+fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif\n",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif\n",lights_pars:"uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight  ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltcMat;\tuniform sampler2D ltcMag;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif\n#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = saturate( reflectVec.y * 0.5 + 0.5 );\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif\n",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\n#if NUM_RECT_AREA_LIGHTS > 0\n    void RE_Direct_RectArea_BlinnPhong( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n        vec3 matDiffColor = material.diffuseColor;\n        vec3 matSpecColor = material.specularColor;\n        vec3 lightColor   = rectAreaLight.color;\n        float roughness = BlinnExponentToGGXRoughness( material.specularShininess );\n        vec3 spec = Rect_Area_Light_Specular_Reflectance(\n                geometry,\n                rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,\n                roughness,\n                ltcMat, ltcMag );\n        vec3 diff = Rect_Area_Light_Diffuse_Reflectance(\n                geometry,\n                rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );\n        reflectedLight.directSpecular += lightColor * matSpecColor * spec / PI2;\n        reflectedLight.directDiffuse  += lightColor * matDiffColor * diff / PI2;\n    }\n#endif\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)\n",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif\n",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n    void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n        vec3 matDiffColor = material.diffuseColor;\n        vec3 matSpecColor = material.specularColor;\n        vec3 lightColor   = rectAreaLight.color;\n        float roughness = material.specularRoughness;\n        vec3 spec = Rect_Area_Light_Specular_Reflectance(\n                geometry,\n                rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight,\n                roughness,\n                ltcMat, ltcMag );\n        vec3 diff = Rect_Area_Light_Diffuse_Reflectance(\n                geometry,\n                rectAreaLight.position, rectAreaLight.halfWidth, rectAreaLight.halfHeight );\n        reflectedLight.directSpecular += lightColor * matSpecColor * spec;\n        reflectedLight.directDiffuse  += lightColor * matDiffColor * diff;\n    }\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material )   GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material )   GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n",lights_template:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t \tirradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n\t#endif\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tvec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n\t#ifndef STANDARD\n\t\tvec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );\n\t#else\n\t\tvec3 clearCoatRadiance = vec3( 0.0 );\n\t#endif\n\t\t\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n",logdepthbuf_fragment:"#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#ifdef USE_LOGDEPTHBUF\n\tuniform float logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n#endif\n",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n\tuniform float logDepthBufFC;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n\t#endif\n#endif\n",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n",map_particle_fragment:"#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform vec4 offsetRepeat;\n\tuniform sampler2D map;\n#endif\n",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.r;\n#endif\n",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif\n",normal_flip:"#ifdef DOUBLE_SIDED\n\tfloat flipNormal = ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n#else\n\tfloat flipNormal = 1.0;\n#endif\n",normal_fragment:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal ) * flipNormal;\n#endif\n#ifdef USE_NORMALMAP\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n\t\tvec3 N = normalize( surf_norm );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif\n",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n  return normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n  return 1.0 - 2.0 * rgb.xyz;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256.,  256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n  return ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n  return linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n  return (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n  return ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif\n",project_vertex:"#ifdef USE_SKINNING\n\tvec4 mvPosition = modelViewMatrix * skinned;\n#else\n\tvec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;\n",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.r;\n#endif\n",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",
+shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n    #if NUM_RECT_AREA_LIGHTS > 0\n    #endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\treturn (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn 1.0;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\tfloat dp = ( length( lightToPosition ) - shadowBias ) / 1000.0;\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif\n",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n    #if NUM_RECT_AREA_LIGHTS > 0\n    #endif\n#endif\n",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n    #if NUM_RECT_AREA_LIGHTS > 0\n    #endif\n#endif\n",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_RECT_AREA_LIGHTS > 0\n\t#endif\n\t#endif\n\treturn shadow;\n}\n",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureWidth;\n\t\tuniform int boneTextureHeight;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureWidth ) );\n\t\t\tfloat y = floor( j / float( boneTextureWidth ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureWidth );\n\t\t\tfloat dy = 1.0 / float( boneTextureHeight );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif\n",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\tskinned  = bindMatrixInverse * skinned;\n#endif\n",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix  = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n  gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n",tonemapping_pars_fragment:"#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n  return toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n  color *= toneMappingExposure;\n  return saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n  color *= toneMappingExposure;\n  return saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n  color *= toneMappingExposure;\n  color = max( vec3( 0.0 ), color - 0.004 );\n  return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n",uv_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform vec4 offsetRepeat;\n#endif\n",uv_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( PHYSICAL ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n\t#ifdef USE_SKINNING\n\t\tvec4 worldPosition = modelMatrix * skinned;\n\t#else\n\t\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n\t#endif\n#endif\n",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n",cube_vert:"varying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}\n",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <logdepthbuf_fragment>\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}\n",depth_vert:"#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#include <begin_vertex>\n\t#include <displacementmap_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n}\n",distanceRGBA_frag:"uniform vec3 lightPos;\nvarying vec4 vWorldPosition;\n#include <common>\n#include <packing>\n#include <clipping_planes_pars_fragment>\nvoid main () {\n\t#include <clipping_planes_fragment>\n\tgl_FragColor = packDepthToRGBA( length( vWorldPosition.xyz - lightPos.xyz ) / 1000.0 );\n}\n",distanceRGBA_vert:"varying vec4 vWorldPosition;\n#include <common>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <skinbase_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition;\n}\n",equirect_frag:"uniform sampler2D tEquirect;\nuniform float tFlip;\nvarying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = saturate( tFlip * direction.y * -0.5 + 0.5 );\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}\n",equirect_vert:"varying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}\n",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <color_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <color_vertex>\n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n}\n",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include <aomap_fragment>\n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include <normal_flip>\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",meshbasic_vert:"#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_ENVMAP\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <envmap_vertex>\n}\n",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include <common>\n#include <packing>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <bsdfs>\n#include <lights_pars>\n#include <fog_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <emissivemap_fragment>\n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include <lightmap_fragment>\n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <normal_flip>\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <bsdfs>\n#include <lights_pars>\n#include <color_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <lights_lambert_vertex>\n\t#include <shadowmap_vertex>\n}\n",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <gradientmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars>\n#include <lights_phong_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <normal_flip>\n\t#include <normal_fragment>\n\t#include <emissivemap_fragment>\n\t#include <lights_phong_fragment>\n\t#include <lights_template>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <displacementmap_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n}\n",meshphysical_frag:"#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <packing>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <cube_uv_reflection_fragment>\n#include <lights_pars>\n#include <lights_physical_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <roughnessmap_fragment>\n\t#include <metalnessmap_fragment>\n\t#include <normal_flip>\n\t#include <normal_fragment>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_template>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",meshphysical_vert:"#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <displacementmap_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n}\n",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED  ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <packing>\n#include <uv_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\nvoid main() {\n\t#include <logdepthbuf_fragment>\n\t#include <normal_flip>\n\t#include <normal_fragment>\n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\t#include <premultiplied_alpha_fragment>\n\t#include <encodings_fragment>\n}\n",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED  ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <displacementmap_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n#if defined( FLAT_SHADED  ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}\n",
+points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <color_pars_fragment>\n#include <map_particle_pars_fragment>\n#include <fog_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_particle_fragment>\n\t#include <color_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",points_vert:"uniform float size;\nuniform float scale;\n#include <common>\n#include <color_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <color_vertex>\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / - mvPosition.z );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n}\n",shadow_frag:"uniform float opacity;\n#include <common>\n#include <packing>\n#include <bsdfs>\n#include <lights_pars>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\nvoid main() {\n\tgl_FragColor = vec4( 0.0, 0.0, 0.0, opacity * ( 1.0  - getShadowMask() ) );\n}\n",shadow_vert:"#include <shadowmap_pars_vertex>\nvoid main() {\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n}\n"};G.prototype={constructor:G,isColor:!0,r:1,g:1,b:1,set:function(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this},setScalar:function(t){return this.b=this.g=this.r=t,this},setHex:function(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this},setRGB:function(t,e,r){return this.r=t,this.g=e,this.b=r,this},setHSL:function(){function t(t,e,r){return 0>r&&(r+=1),1<r&&--r,r<1/6?t+6*(e-t)*r:.5>r?e:r<2/3?t+6*(e-t)*(2/3-r):t}return function(e,r,n){return e=ri.euclideanModulo(e,1),r=ri.clamp(r,0,1),n=ri.clamp(n,0,1),0===r?this.r=this.g=this.b=n:(r=.5>=n?n*(1+r):n+r-n*r,n=2*n-r,this.r=t(n,r,e+1/3),this.g=t(n,r,e),this.b=t(n,r,e-1/3)),this}}(),setStyle:function(t){function e(e){void 0!==e&&1>parseFloat(e)&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}var r;if(r=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(t)){var n=r[2];switch(r[1]){case"rgb":case"rgba":if(r=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(n))return this.r=Math.min(255,parseInt(r[1],10))/255,this.g=Math.min(255,parseInt(r[2],10))/255,this.b=Math.min(255,parseInt(r[3],10))/255,e(r[5]),this;if(r=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(n))return this.r=Math.min(100,parseInt(r[1],10))/100,this.g=Math.min(100,parseInt(r[2],10))/100,this.b=Math.min(100,parseInt(r[3],10))/100,e(r[5]),this;break;case"hsl":case"hsla":if(r=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(n)){var n=parseFloat(r[1])/360,i=parseInt(r[2],10)/100,o=parseInt(r[3],10)/100;return e(r[5]),this.setHSL(n,i,o)}}}else if(r=/^\#([A-Fa-f0-9]+)$/.exec(t)){if(r=r[1],3===(n=r.length))return this.r=parseInt(r.charAt(0)+r.charAt(0),16)/255,this.g=parseInt(r.charAt(1)+r.charAt(1),16)/255,this.b=parseInt(r.charAt(2)+r.charAt(2),16)/255,this;if(6===n)return this.r=parseInt(r.charAt(0)+r.charAt(1),16)/255,this.g=parseInt(r.charAt(2)+r.charAt(3),16)/255,this.b=parseInt(r.charAt(4)+r.charAt(5),16)/255,this}return t&&0<t.length&&(r=li[t],void 0!==r?this.setHex(r):console.warn("THREE.Color: Unknown color "+t)),this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(t){return this.r=t.r,this.g=t.g,this.b=t.b,this},copyGammaToLinear:function(t,e){return void 0===e&&(e=2),this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this},copyLinearToGamma:function(t,e){void 0===e&&(e=2);var r=0<e?1/e:1;return this.r=Math.pow(t.r,r),this.g=Math.pow(t.g,r),this.b=Math.pow(t.b,r),this},convertGammaToLinear:function(){var t=this.r,e=this.g,r=this.b;return this.r=t*t,this.g=e*e,this.b=r*r,this},convertLinearToGamma:function(){return this.r=Math.sqrt(this.r),this.g=Math.sqrt(this.g),this.b=Math.sqrt(this.b),this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(t){t=t||{h:0,s:0,l:0};var e,r=this.r,n=this.g,i=this.b,o=Math.max(r,n,i),a=Math.min(r,n,i),s=(a+o)/2;if(a===o)a=e=0;else{var c=o-a,a=.5>=s?c/(o+a):c/(2-o-a);switch(o){case r:e=(n-i)/c+(n<i?6:0);break;case n:e=(i-r)/c+2;break;case i:e=(r-n)/c+4}e/=6}return t.h=e,t.s=a,t.l=s,t},getStyle:function(){return"rgb("+(255*this.r|0)+","+(255*this.g|0)+","+(255*this.b|0)+")"},offsetHSL:function(t,e,r){var n=this.getHSL();return n.h+=t,n.s+=e,n.l+=r,this.setHSL(n.h,n.s,n.l),this},add:function(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this},addColors:function(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this},addScalar:function(t){return this.r+=t,this.g+=t,this.b+=t,this},sub:function(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this},multiply:function(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this},multiplyScalar:function(t){return this.r*=t,this.g*=t,this.b*=t,this},lerp:function(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this},equals:function(t){return t.r===this.r&&t.g===this.g&&t.b===this.b},fromArray:function(t,e){return void 0===e&&(e=0),this.r=t[e],this.g=t[e+1],this.b=t[e+2],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t},toJSON:function(){return this.getHex()}};var li={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};$.prototype=Object.create(n.prototype),$.prototype.constructor=$,$.prototype.isDataTexture=!0;var pi={common:{diffuse:{value:new G(15658734)},opacity:{value:1},map:{value:null},offsetRepeat:{value:new i(0,0,1,1)},specularMap:{value:null},alphaMap:{value:null},envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new r(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new G(16777215)}},lights:{ambientLightColor:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}}},points:{diffuse:{value:new G(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},offsetRepeat:{value:new i(0,0,1,1)}}},fi={basic:{uniforms:ui.merge([pi.common,pi.aomap,pi.lightmap,pi.fog]),vertexShader:hi.meshbasic_vert,fragmentShader:hi.meshbasic_frag},lambert:{uniforms:ui.merge([pi.common,pi.aomap,pi.lightmap,pi.emissivemap,pi.fog,pi.lights,{emissive:{value:new G(0)}}]),vertexShader:hi.meshlambert_vert,fragmentShader:hi.meshlambert_frag},phong:{uniforms:ui.merge([pi.common,pi.aomap,pi.lightmap,pi.emissivemap,pi.bumpmap,pi.normalmap,pi.displacementmap,pi.gradientmap,pi.fog,pi.lights,{emissive:{value:new G(0)},specular:{value:new G(1118481)},shininess:{value:30}}]),vertexShader:hi.meshphong_vert,fragmentShader:hi.meshphong_frag},standard:{uniforms:ui.merge([pi.common,pi.aomap,pi.lightmap,pi.emissivemap,pi.bumpmap,pi.normalmap,pi.displacementmap,pi.roughnessmap,pi.metalnessmap,pi.fog,pi.lights,{emissive:{value:new G(0)},roughness:{value:.5},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:hi.meshphysical_vert,fragmentShader:hi.meshphysical_frag},points:{uniforms:ui.merge([pi.points,pi.fog]),vertexShader:hi.points_vert,fragmentShader:hi.points_frag},dashed:{uniforms:ui.merge([pi.common,pi.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:hi.linedashed_vert,fragmentShader:hi.linedashed_frag},depth:{uniforms:ui.merge([pi.common,pi.displacementmap]),vertexShader:hi.depth_vert,fragmentShader:hi.depth_frag},normal:{uniforms:ui.merge([pi.common,pi.bumpmap,pi.normalmap,pi.displacementmap,{opacity:{value:1}}]),vertexShader:hi.normal_vert,fragmentShader:hi.normal_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:hi.cube_vert,fragmentShader:hi.cube_frag},equirect:{uniforms:{tEquirect:{value:null},tFlip:{value:-1}},vertexShader:hi.equirect_vert,fragmentShader:hi.equirect_frag},distanceRGBA:{uniforms:{lightPos:{value:new c}},vertexShader:hi.distanceRGBA_vert,fragmentShader:hi.distanceRGBA_frag}};fi.physical={uniforms:ui.merge([fi.standard.uniforms,{clearCoat:{value:0},clearCoatRoughness:{value:0}}]),vertexShader:hi.meshphysical_vert,fragmentShader:hi.meshphysical_frag},V.prototype={constructor:V,set:function(t,e){return this.min.copy(t),this.max.copy(e),this},setFromPoints:function(t){this.makeEmpty();for(var e=0,r=t.length;e<r;e++)this.expandByPoint(t[e]);return this},setFromCenterAndSize:function(){var t=new r;return function(e,r){var n=t.copy(r).multiplyScalar(.5);return this.min.copy(e).sub(n),this.max.copy(e).add(n),this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.min.copy(t.min),this.max.copy(t.max),this},makeEmpty:function(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y},getCenter:function(t){return t=t||new r,this.isEmpty()?t.set(0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(t){return t=t||new r,this.isEmpty()?t.set(0,0):t.subVectors(this.max,this.min)},expandByPoint:function(t){return this.min.min(t),this.max.max(t),this},expandByVector:function(t){return this.min.sub(t),this.max.add(t),this},expandByScalar:function(t){return this.min.addScalar(-t),this.max.addScalar(t),this},containsPoint:function(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y},getParameter:function(t,e){return(e||new r).set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y)},clampPoint:function(t,e){return(e||new r).copy(t).clamp(this.min,this.max)},distanceToPoint:function(){var t=new r;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)}};var di=0;q.prototype={constructor:q,isMaterial:!0,get needsUpdate(){return this._needsUpdate},set needsUpdate(t){!0===t&&this.update(),this._needsUpdate=t},setValues:function(t){if(void 0!==t)for(var e in t){var r=t[e];if(void 0===r)console.warn("THREE.Material: '"+e+"' parameter is undefined.");else{var n=this[e];void 0===n?console.warn("THREE."+this.type+": '"+e+"' is not a property of this material."):n&&n.isColor?n.set(r):n&&n.isVector3&&r&&r.isVector3?n.copy(r):this[e]="overdraw"===e?Number(r):r}}},toJSON:function(t){function e(t){var e,r=[];for(e in t){var n=t[e];delete n.metadata,r.push(n)}return r}var r=void 0===t;r&&(t={textures:{},images:{}});var n={metadata:{version:4.4,type:"Material",generator:"Material.toJSON"}};return n.uuid=this.uuid,n.type=this.type,""!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearCoat&&(n.clearCoat=this.clearCoat),void 0!==this.clearCoatRoughness&&(n.clearCoatRoughness=this.clearCoatRoughness),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,n.reflectivity=this.reflectivity),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.size&&(n.size=this.size),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),2!==this.shading&&(n.shading=this.shading),0!==this.side&&(n.side=this.side),0!==this.vertexColors&&(n.vertexColors=this.vertexColors),1>this.opacity&&(n.opacity=this.opacity),!0===this.transparent&&(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,0<this.alphaTest&&(n.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),1<this.wireframeLinewidth&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),n.skinning=this.skinning,n.morphTargets=this.morphTargets,r&&(r=e(t.textures),t=e(t.images),0<r.length&&(n.textures=r),0<t.length&&(n.images=t)),n},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.lights=t.lights,this.blending=t.blending,this.side=t.side,this.shading=t.shading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.overdraw=t.overdraw,this.visible=t.visible,this.clipShadows=t.clipShadows,this.clipIntersection=t.clipIntersection,t=t.clippingPlanes;var e=null;if(null!==t)for(var r=t.length,e=Array(r),n=0;n!==r;++n)e[n]=t[n].clone();return this.clippingPlanes=e,this},update:function(){this.dispatchEvent({type:"update"})},dispose:function(){this.dispatchEvent({type:"dispose"})}},Object.assign(q.prototype,e.prototype),X.prototype=Object.create(q.prototype),X.prototype.constructor=X,X.prototype.isShaderMaterial=!0,X.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=ui.clone(t.uniforms),this.defines=t.defines,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.lights=t.lights,this.clipping=t.clipping,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.extensions=t.extensions,this},X.prototype.toJSON=function(t){return t=q.prototype.toJSON.call(this,t),t.uniforms=this.uniforms,t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t},Y.prototype=Object.create(q.prototype),Y.prototype.constructor=Y,Y.prototype.isMeshDepthMaterial=!0,Y.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this},K.prototype={constructor:K,isBox3:!0,set:function(t,e){return this.min.copy(t),this.max.copy(e),this},setFromArray:function(t){for(var e=1/0,r=1/0,n=1/0,i=-1/0,o=-1/0,a=-1/0,s=0,c=t.length;s<c;s+=3){var u=t[s],h=t[s+1],l=t[s+2];u<e&&(e=u),h<r&&(r=h),l<n&&(n=l),u>i&&(i=u),h>o&&(o=h),l>a&&(a=l)}this.min.set(e,r,n),this.max.set(i,o,a)},setFromBufferAttribute:function(t){for(var e=1/0,r=1/0,n=1/0,i=-1/0,o=-1/0,a=-1/0,s=0,c=t.count;s<c;s++){var u=t.getX(s),h=t.getY(s),l=t.getZ(s);u<e&&(e=u),h<r&&(r=h),l<n&&(n=l),u>i&&(i=u),h>o&&(o=h),l>a&&(a=l)}this.min.set(e,r,n),this.max.set(i,o,a)},setFromPoints:function(t){this.makeEmpty();for(var e=0,r=t.length;e<r;e++)this.expandByPoint(t[e]);return this},setFromCenterAndSize:function(){var t=new c;return function(e,r){var n=t.copy(r).multiplyScalar(.5);return this.min.copy(e).sub(n),this.max.copy(e).add(n),this}}(),setFromObject:function(){var t=new c;return function(e){var r=this;return e.updateMatrixWorld(!0),this.makeEmpty(),e.traverse(function(e){var n,i;if(void 0!==(n=e.geometry))if(n.isGeometry){var o=n.vertices;for(n=0,i=o.length;n<i;n++)t.copy(o[n]),t.applyMatrix4(e.matrixWorld),r.expandByPoint(t)}else if(n.isBufferGeometry&&void 0!==(o=n.attributes.position))for(n=0,i=o.count;n<i;n++)t.fromAttribute(o,n).applyMatrix4(e.matrixWorld),r.expandByPoint(t)}),this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.min.copy(t.min),this.max.copy(t.max),this},makeEmpty:function(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z},getCenter:function(t){return t=t||new c,this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(t){return t=t||new c,this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)},expandByPoint:function(t){return this.min.min(t),this.max.max(t),this},expandByVector:function(t){return this.min.sub(t),this.max.add(t),this},expandByScalar:function(t){return this.min.addScalar(-t),this.max.addScalar(t),this},containsPoint:function(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y||t.z<this.min.z||t.z>this.max.z)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z},getParameter:function(t,e){return(e||new c).set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y||t.max.z<this.min.z||t.min.z>this.max.z)},intersectsSphere:function(){var t;return function(e){return void 0===t&&(t=new c),this.clampPoint(e.center,t),t.distanceToSquared(e.center)<=e.radius*e.radius}}(),intersectsPlane:function(t){var e,r;return 0<t.normal.x?(e=t.normal.x*this.min.x,r=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,r=t.normal.x*this.min.x),0<t.normal.y?(e+=t.normal.y*this.min.y,r+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,r+=t.normal.y*this.min.y),0<t.normal.z?(e+=t.normal.z*this.min.z,r+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,r+=t.normal.z*this.min.z),e<=t.constant&&r>=t.constant},clampPoint:function(t,e){return(e||new c).copy(t).clamp(this.min,this.max)},distanceToPoint:function(){var t=new c;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),getBoundingSphere:function(){var t=new c;return function(e){return e=e||new Z,this.getCenter(e.center),e.radius=.5*this.getSize(t).length(),e}}(),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},applyMatrix4:function(){var t=[new c,new c,new c,new c,new c,new c,new c,new c];return function(e){return this.isEmpty()?this:(t[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),t[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),t[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),t[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),t[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),t[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),t[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),t[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(t),this)}}(),translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)}},Z.prototype={constructor:Z,set:function(t,e){return this.center.copy(t),this.radius=e,this},setFromPoints:function(){var t=new K;return function(e,r){var n=this.center;void 0!==r?n.copy(r):t.setFromPoints(e).getCenter(n);for(var i=0,o=0,a=e.length;o<a;o++)i=Math.max(i,n.distanceToSquared(e[o]));return this.radius=Math.sqrt(i),this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.center.copy(t.center),this.radius=t.radius,this},empty:function(){return 0>=this.radius},containsPoint:function(t){return t.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(t){return t.distanceTo(this.center)-this.radius},intersectsSphere:function(t){var e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e},intersectsBox:function(t){return t.intersectsSphere(this)},intersectsPlane:function(t){return Math.abs(this.center.dot(t.normal)-t.constant)<=this.radius},clampPoint:function(t,e){var r=this.center.distanceToSquared(t),n=e||new c;return n.copy(t),r>this.radius*this.radius&&(n.sub(this.center).normalize(),n.multiplyScalar(this.radius).add(this.center)),n},getBoundingBox:function(t){return t=t||new K,t.set(this.center,this.center),t.expandByScalar(this.radius),t},applyMatrix4:function(t){return this.center.applyMatrix4(t),this.radius*=t.getMaxScaleOnAxis(),this},translate:function(t){return this.center.add(t),this},equals:function(t){return t.center.equals(this.center)&&t.radius===this.radius}},J.prototype={constructor:J,isMatrix3:!0,set:function(t,e,r,n,i,o,a,s,c){var u=this.elements;return u[0]=t,u[1]=n,u[2]=a,u[3]=e,u[4]=i,u[5]=s,u[6]=r,u[7]=o,u[8]=c,this},identity:function(){return this.set(1,0,0,0,1,0,0,0,1),this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(t){return t=t.elements,this.set(t[0],t[3],t[6],t[1],t[4],t[7],t[2],t[5],t[8]),this},setFromMatrix4:function(t){return t=t.elements,this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this},applyToVector3Array:function(){var t;return function(e,r,n){void 0===t&&(t=new c),void 0===r&&(r=0),void 0===n&&(n=e.length);for(var i=0;i<n;i+=3,r+=3)t.fromArray(e,r),t.applyMatrix3(this),t.toArray(e,r);return e}}(),applyToBufferAttribute:function(){var t;return function(e){void 0===t&&(t=new c);for(var r=0,n=e.count;r<n;r++)t.x=e.getX(r),t.y=e.getY(r),t.z=e.getZ(r),t.applyMatrix3(this),e.setXYZ(r,t.x,t.y,t.z);return e}}(),multiplyScalar:function(t){var e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this},determinant:function(){var t=this.elements,e=t[0],r=t[1],n=t[2],i=t[3],o=t[4],a=t[5],s=t[6],c=t[7],t=t[8];return e*o*t-e*a*c-r*i*t+r*a*s+n*i*c-n*o*s},getInverse:function(t,e){t&&t.isMatrix4&&console.error("THREE.Matrix3.getInverse no longer takes a Matrix4 argument.");var r=t.elements,n=this.elements,i=r[0],o=r[1],a=r[2],s=r[3],c=r[4],u=r[5],h=r[6],l=r[7],r=r[8],p=r*c-u*l,f=u*h-r*s,d=l*s-c*h,m=i*p+o*f+a*d;if(0===m){if(!0===e)throw Error("THREE.Matrix3.getInverse(): can't invert matrix, determinant is 0");return console.warn("THREE.Matrix3.getInverse(): can't invert matrix, determinant is 0"),this.identity()}return m=1/m,n[0]=p*m,n[1]=(a*l-r*o)*m,n[2]=(u*o-a*c)*m,n[3]=f*m,n[4]=(r*i-a*h)*m,n[5]=(a*s-u*i)*m,n[6]=d*m,n[7]=(o*h-l*i)*m,n[8]=(c*i-o*s)*m,this},transpose:function(){var t,e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this},getNormalMatrix:function(t){return this.setFromMatrix4(t).getInverse(this).transpose()},transposeIntoArray:function(t){var e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this},fromArray:function(t,e){void 0===e&&(e=0);for(var r=0;9>r;r++)this.elements[r]=t[r+e];return this},toArray:function(t,e){void 0===t&&(t=[]),void 0===e&&(e=0);var r=this.elements;return t[e]=r[0],t[e+1]=r[1],t[e+2]=r[2],t[e+3]=r[3],t[e+4]=r[4],t[e+5]=r[5],t[e+6]=r[6],t[e+7]=r[7],t[e+8]=r[8],t}},Q.prototype={constructor:Q,set:function(t,e){return this.normal.copy(t),this.constant=e,this},setComponents:function(t,e,r,n){return this.normal.set(t,e,r),this.constant=n,this},setFromNormalAndCoplanarPoint:function(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this},setFromCoplanarPoints:function(){var t=new c,e=new c;return function(r,n,i){return n=t.subVectors(i,n).cross(e.subVectors(r,n)).normalize(),this.setFromNormalAndCoplanarPoint(n,r),this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.normal.copy(t.normal),this.constant=t.constant,this},normalize:function(){var t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this},negate:function(){return this.constant*=-1,this.normal.negate(),this},distanceToPoint:function(t){return this.normal.dot(t)+this.constant},distanceToSphere:function(t){return this.distanceToPoint(t.center)-t.radius},projectPoint:function(t,e){return this.orthoPoint(t,e).sub(t).negate()},orthoPoint:function(t,e){var r=this.distanceToPoint(t);return(e||new c).copy(this.normal).multiplyScalar(r)},intersectLine:function(){var t=new c;return function(e,r){var n=r||new c,i=e.delta(t),o=this.normal.dot(i);return 0!==o?(o=-(e.start.dot(this.normal)+this.constant)/o,0>o||1<o?void 0:n.copy(i).multiplyScalar(o).add(e.start)):0===this.distanceToPoint(e.start)?n.copy(e.start):void 0}}(),intersectsLine:function(t){var e=this.distanceToPoint(t.start);return t=this.distanceToPoint(t.end),0>e&&0<t||0>t&&0<e},intersectsBox:function(t){return t.intersectsPlane(this)},intersectsSphere:function(t){return t.intersectsPlane(this)},coplanarPoint:function(t){return(t||new c).copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var t=new c,e=new J;return function(r,n){var i=this.coplanarPoint(t).applyMatrix4(r),o=n||e.getNormalMatrix(r),o=this.normal.applyMatrix3(o).normalize();return this.constant=-i.dot(o),this}}(),translate:function(t){return this.constant-=t.dot(this.normal),this},equals:function(t){return t.normal.equals(this.normal)&&t.constant===this.constant}},tt.prototype={constructor:tt,set:function(t,e,r,n,i,o){var a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(r),a[3].copy(n),a[4].copy(i),a[5].copy(o),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){for(var e=this.planes,r=0;6>r;r++)e[r].copy(t.planes[r]);return this},setFromMatrix:function(t){var e=this.planes,r=t.elements;t=r[0]
+;var n=r[1],i=r[2],o=r[3],a=r[4],s=r[5],c=r[6],u=r[7],h=r[8],l=r[9],p=r[10],f=r[11],d=r[12],m=r[13],v=r[14],r=r[15];return e[0].setComponents(o-t,u-a,f-h,r-d).normalize(),e[1].setComponents(o+t,u+a,f+h,r+d).normalize(),e[2].setComponents(o+n,u+s,f+l,r+m).normalize(),e[3].setComponents(o-n,u-s,f-l,r-m).normalize(),e[4].setComponents(o-i,u-c,f-p,r-v).normalize(),e[5].setComponents(o+i,u+c,f+p,r+v).normalize(),this},intersectsObject:function(){var t=new Z;return function(e){var r=e.geometry;return null===r.boundingSphere&&r.computeBoundingSphere(),t.copy(r.boundingSphere).applyMatrix4(e.matrixWorld),this.intersectsSphere(t)}}(),intersectsSprite:function(){var t=new Z;return function(e){return t.center.set(0,0,0),t.radius=.7071067811865476,t.applyMatrix4(e.matrixWorld),this.intersectsSphere(t)}}(),intersectsSphere:function(t){var e=this.planes,r=t.center;t=-t.radius;for(var n=0;6>n;n++)if(e[n].distanceToPoint(r)<t)return!1;return!0},intersectsBox:function(){var t=new c,e=new c;return function(r){for(var n=this.planes,i=0;6>i;i++){var o=n[i];t.x=0<o.normal.x?r.min.x:r.max.x,e.x=0<o.normal.x?r.max.x:r.min.x,t.y=0<o.normal.y?r.min.y:r.max.y,e.y=0<o.normal.y?r.max.y:r.min.y,t.z=0<o.normal.z?r.min.z:r.max.z,e.z=0<o.normal.z?r.max.z:r.min.z;var a=o.distanceToPoint(t),o=o.distanceToPoint(e);if(0>a&&0>o)return!1}return!0}}(),containsPoint:function(t){for(var e=this.planes,r=0;6>r;r++)if(0>e[r].distanceToPoint(t))return!1;return!0}},rt.prototype={constructor:rt,set:function(t,e){return this.origin.copy(t),this.direction.copy(e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this},at:function(t,e){return(e||new c).copy(this.direction).multiplyScalar(t).add(this.origin)},lookAt:function(t){return this.direction.copy(t).sub(this.origin).normalize(),this},recast:function(){var t=new c;return function(e){return this.origin.copy(this.at(e,t)),this}}(),closestPointToPoint:function(t,e){var r=e||new c;r.subVectors(t,this.origin);var n=r.dot(this.direction);return 0>n?r.copy(this.origin):r.copy(this.direction).multiplyScalar(n).add(this.origin)},distanceToPoint:function(t){return Math.sqrt(this.distanceSqToPoint(t))},distanceSqToPoint:function(){var t=new c;return function(e){var r=t.subVectors(e,this.origin).dot(this.direction);return 0>r?this.origin.distanceToSquared(e):(t.copy(this.direction).multiplyScalar(r).add(this.origin),t.distanceToSquared(e))}}(),distanceSqToSegment:function(){var t=new c,e=new c,r=new c;return function(n,i,o,a){t.copy(n).add(i).multiplyScalar(.5),e.copy(i).sub(n).normalize(),r.copy(this.origin).sub(t);var s,c=.5*n.distanceTo(i),u=-this.direction.dot(e),h=r.dot(this.direction),l=-r.dot(e),p=r.lengthSq(),f=Math.abs(1-u*u);return 0<f?(n=u*l-h,i=u*h-l,s=c*f,0<=n?i>=-s?i<=s?(c=1/f,n*=c,i*=c,u=n*(n+u*i+2*h)+i*(u*n+i+2*l)+p):(i=c,n=Math.max(0,-(u*i+h)),u=-n*n+i*(i+2*l)+p):(i=-c,n=Math.max(0,-(u*i+h)),u=-n*n+i*(i+2*l)+p):i<=-s?(n=Math.max(0,-(-u*c+h)),i=0<n?-c:Math.min(Math.max(-c,-l),c),u=-n*n+i*(i+2*l)+p):i<=s?(n=0,i=Math.min(Math.max(-c,-l),c),u=i*(i+2*l)+p):(n=Math.max(0,-(u*c+h)),i=0<n?c:Math.min(Math.max(-c,-l),c),u=-n*n+i*(i+2*l)+p)):(i=0<u?-c:c,n=Math.max(0,-(u*i+h)),u=-n*n+i*(i+2*l)+p),o&&o.copy(this.direction).multiplyScalar(n).add(this.origin),a&&a.copy(e).multiplyScalar(i).add(t),u}}(),intersectSphere:function(){var t=new c;return function(e,r){t.subVectors(e.center,this.origin);var n=t.dot(this.direction),i=t.dot(t)-n*n,o=e.radius*e.radius;return i>o?null:(o=Math.sqrt(o-i),i=n-o,n+=o,0>i&&0>n?null:0>i?this.at(n,r):this.at(i,r))}}(),intersectsSphere:function(t){return this.distanceToPoint(t.center)<=t.radius},distanceToPlane:function(t){var e=t.normal.dot(this.direction);return 0===e?0===t.distanceToPoint(this.origin)?0:null:(t=-(this.origin.dot(t.normal)+t.constant)/e,0<=t?t:null)},intersectPlane:function(t,e){var r=this.distanceToPlane(t);return null===r?null:this.at(r,e)},intersectsPlane:function(t){var e=t.distanceToPoint(this.origin);return 0===e||0>t.normal.dot(this.direction)*e},intersectBox:function(t,e){var r,n,i,o,a;n=1/this.direction.x,o=1/this.direction.y,a=1/this.direction.z;var s=this.origin;return 0<=n?(r=(t.min.x-s.x)*n,n*=t.max.x-s.x):(r=(t.max.x-s.x)*n,n*=t.min.x-s.x),0<=o?(i=(t.min.y-s.y)*o,o*=t.max.y-s.y):(i=(t.max.y-s.y)*o,o*=t.min.y-s.y),r>o||i>n?null:((i>r||r!==r)&&(r=i),(o<n||n!==n)&&(n=o),0<=a?(i=(t.min.z-s.z)*a,a*=t.max.z-s.z):(i=(t.max.z-s.z)*a,a*=t.min.z-s.z),r>a||i>n?null:((i>r||r!==r)&&(r=i),(a<n||n!==n)&&(n=a),0>n?null:this.at(0<=r?r:n,e)))},intersectsBox:function(){var t=new c;return function(e){return null!==this.intersectBox(e,t)}}(),intersectTriangle:function(){var t=new c,e=new c,r=new c,n=new c;return function(i,o,a,s,c){if(e.subVectors(o,i),r.subVectors(a,i),n.crossVectors(e,r),0<(o=this.direction.dot(n))){if(s)return null;s=1}else{if(!(0>o))return null;s=-1,o=-o}return t.subVectors(this.origin,i),0>(i=s*this.direction.dot(r.crossVectors(t,r)))?null:0>(a=s*this.direction.dot(e.cross(t)))||i+a>o?null:(i=-s*t.dot(n),0>i?null:this.at(i/o,c))}}(),applyMatrix4:function(t){return this.direction.add(this.origin).applyMatrix4(t),this.origin.applyMatrix4(t),this.direction.sub(this.origin),this.direction.normalize(),this},equals:function(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}},nt.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" "),nt.DefaultOrder="XYZ",nt.prototype={constructor:nt,isEuler:!0,get x(){return this._x},set x(t){this._x=t,this.onChangeCallback()},get y(){return this._y},set y(t){this._y=t,this.onChangeCallback()},get z(){return this._z},set z(t){this._z=t,this.onChangeCallback()},get order(){return this._order},set order(t){this._order=t,this.onChangeCallback()},set:function(t,e,r,n){return this._x=t,this._y=e,this._z=r,this._order=n||this._order,this.onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this.onChangeCallback(),this},setFromRotationMatrix:function(t,e,r){var n=ri.clamp,i=t.elements;t=i[0];var o=i[4],a=i[8],s=i[1],c=i[5],u=i[9],h=i[2],l=i[6],i=i[10];return e=e||this._order,"XYZ"===e?(this._y=Math.asin(n(a,-1,1)),.99999>Math.abs(a)?(this._x=Math.atan2(-u,i),this._z=Math.atan2(-o,t)):(this._x=Math.atan2(l,c),this._z=0)):"YXZ"===e?(this._x=Math.asin(-n(u,-1,1)),.99999>Math.abs(u)?(this._y=Math.atan2(a,i),this._z=Math.atan2(s,c)):(this._y=Math.atan2(-h,t),this._z=0)):"ZXY"===e?(this._x=Math.asin(n(l,-1,1)),.99999>Math.abs(l)?(this._y=Math.atan2(-h,i),this._z=Math.atan2(-o,c)):(this._y=0,this._z=Math.atan2(s,t))):"ZYX"===e?(this._y=Math.asin(-n(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(l,i),this._z=Math.atan2(s,t)):(this._x=0,this._z=Math.atan2(-o,c))):"YZX"===e?(this._z=Math.asin(n(s,-1,1)),.99999>Math.abs(s)?(this._x=Math.atan2(-u,c),this._y=Math.atan2(-h,t)):(this._x=0,this._y=Math.atan2(a,i))):"XZY"===e?(this._z=Math.asin(-n(o,-1,1)),.99999>Math.abs(o)?(this._x=Math.atan2(l,c),this._y=Math.atan2(a,t)):(this._x=Math.atan2(-u,i),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+e),this._order=e,!1!==r&&this.onChangeCallback(),this},setFromQuaternion:function(){var t;return function(e,r,n){return void 0===t&&(t=new u),t.makeRotationFromQuaternion(e),this.setFromRotationMatrix(t,r,n)}}(),setFromVector3:function(t,e){return this.set(t.x,t.y,t.z,e||this._order)},reorder:function(){var t=new s;return function(e){return t.setFromEuler(this),this.setFromQuaternion(t,e)}}(),equals:function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order},fromArray:function(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this.onChangeCallback(),this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t},toVector3:function(t){return t?t.set(this._x,this._y,this._z):new c(this._x,this._y,this._z)},onChange:function(t){return this.onChangeCallback=t,this},onChangeCallback:function(){}},it.prototype={constructor:it,set:function(t){this.mask=1<<t},enable:function(t){this.mask|=1<<t},toggle:function(t){this.mask^=1<<t},disable:function(t){this.mask&=~(1<<t)},test:function(t){return 0!=(this.mask&t.mask)}};var mi=0;ot.DefaultUp=new c(0,1,0),ot.DefaultMatrixAutoUpdate=!0,Object.assign(ot.prototype,e.prototype,{isObject3D:!0,applyMatrix:function(t){this.matrix.multiplyMatrices(t,this.matrix),this.matrix.decompose(this.position,this.quaternion,this.scale)},setRotationFromAxisAngle:function(t,e){this.quaternion.setFromAxisAngle(t,e)},setRotationFromEuler:function(t){this.quaternion.setFromEuler(t,!0)},setRotationFromMatrix:function(t){this.quaternion.setFromRotationMatrix(t)},setRotationFromQuaternion:function(t){this.quaternion.copy(t)},rotateOnAxis:function(){var t=new s;return function(e,r){return t.setFromAxisAngle(e,r),this.quaternion.multiply(t),this}}(),rotateX:function(){var t=new c(1,0,0);return function(e){return this.rotateOnAxis(t,e)}}(),rotateY:function(){var t=new c(0,1,0);return function(e){return this.rotateOnAxis(t,e)}}(),rotateZ:function(){var t=new c(0,0,1);return function(e){return this.rotateOnAxis(t,e)}}(),translateOnAxis:function(){var t=new c;return function(e,r){return t.copy(e).applyQuaternion(this.quaternion),this.position.add(t.multiplyScalar(r)),this}}(),translateX:function(){var t=new c(1,0,0);return function(e){return this.translateOnAxis(t,e)}}(),translateY:function(){var t=new c(0,1,0);return function(e){return this.translateOnAxis(t,e)}}(),translateZ:function(){var t=new c(0,0,1);return function(e){return this.translateOnAxis(t,e)}}(),localToWorld:function(t){return t.applyMatrix4(this.matrixWorld)},worldToLocal:function(){var t=new u;return function(e){return e.applyMatrix4(t.getInverse(this.matrixWorld))}}(),lookAt:function(){var t=new u;return function(e){t.lookAt(e,this.position,this.up),this.quaternion.setFromRotationMatrix(t)}}(),add:function(t){if(1<arguments.length){for(var e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return t===this?(console.error("THREE.Object3D.add: object can't be added as a child of itself.",t),this):(t&&t.isObject3D?(null!==t.parent&&t.parent.remove(t),t.parent=this,t.dispatchEvent({type:"added"}),this.children.push(t)):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",t),this)},remove:function(t){if(1<arguments.length)for(var e=0;e<arguments.length;e++)this.remove(arguments[e]);-1!==(e=this.children.indexOf(t))&&(t.parent=null,t.dispatchEvent({type:"removed"}),this.children.splice(e,1))},getObjectById:function(t){return this.getObjectByProperty("id",t)},getObjectByName:function(t){return this.getObjectByProperty("name",t)},getObjectByProperty:function(t,e){if(this[t]===e)return this;for(var r=0,n=this.children.length;r<n;r++){var i=this.children[r].getObjectByProperty(t,e);if(void 0!==i)return i}},getWorldPosition:function(t){return t=t||new c,this.updateMatrixWorld(!0),t.setFromMatrixPosition(this.matrixWorld)},getWorldQuaternion:function(){var t=new c,e=new c;return function(r){return r=r||new s,this.updateMatrixWorld(!0),this.matrixWorld.decompose(t,r,e),r}}(),getWorldRotation:function(){var t=new s;return function(e){return e=e||new nt,this.getWorldQuaternion(t),e.setFromQuaternion(t,this.rotation.order,!1)}}(),getWorldScale:function(){var t=new c,e=new s;return function(r){return r=r||new c,this.updateMatrixWorld(!0),this.matrixWorld.decompose(t,e,r),r}}(),getWorldDirection:function(){var t=new s;return function(e){return e=e||new c,this.getWorldQuaternion(t),e.set(0,0,1).applyQuaternion(t)}}(),raycast:function(){},traverse:function(t){t(this);for(var e=this.children,r=0,n=e.length;r<n;r++)e[r].traverse(t)},traverseVisible:function(t){if(!1!==this.visible){t(this);for(var e=this.children,r=0,n=e.length;r<n;r++)e[r].traverseVisible(t)}},traverseAncestors:function(t){var e=this.parent;null!==e&&(t(e),e.traverseAncestors(t))},updateMatrix:function(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(t){!0===this.matrixAutoUpdate&&this.updateMatrix(),!0!==this.matrixWorldNeedsUpdate&&!0!==t||(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,t=!0);for(var e=this.children,r=0,n=e.length;r<n;r++)e[r].updateMatrixWorld(t)},toJSON:function(t){function e(t){var e,r=[];for(e in t){var n=t[e];delete n.metadata,r.push(n)}return r}var r=void 0===t||""===t,n={};r&&(t={geometries:{},materials:{},textures:{},images:{}},n.metadata={version:4.4,type:"Object",generator:"Object3D.toJSON"});var i={};if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),"{}"!==JSON.stringify(this.userData)&&(i.userData=this.userData),!0===this.castShadow&&(i.castShadow=!0),!0===this.receiveShadow&&(i.receiveShadow=!0),!1===this.visible&&(i.visible=!1),i.matrix=this.matrix.toArray(),void 0!==this.geometry&&(void 0===t.geometries[this.geometry.uuid]&&(t.geometries[this.geometry.uuid]=this.geometry.toJSON(t)),i.geometry=this.geometry.uuid),void 0!==this.material&&(void 0===t.materials[this.material.uuid]&&(t.materials[this.material.uuid]=this.material.toJSON(t)),i.material=this.material.uuid),0<this.children.length){i.children=[];for(var o=0;o<this.children.length;o++)i.children.push(this.children[o].toJSON(t).object)}if(r){var r=e(t.geometries),o=e(t.materials),a=e(t.textures);t=e(t.images),0<r.length&&(n.geometries=r),0<o.length&&(n.materials=o),0<a.length&&(n.textures=a),0<t.length&&(n.images=t)}return n.object=i,n},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e){if(void 0===e&&(e=!0),this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(var r=0;r<t.children.length;r++)this.add(t.children[r].clone());return this}}),at.prototype={constructor:at,set:function(t,e){return this.start.copy(t),this.end.copy(e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.start.copy(t.start),this.end.copy(t.end),this},getCenter:function(t){return(t||new c).addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(t){return(t||new c).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(t,e){var r=e||new c;return this.delta(r).multiplyScalar(t).add(this.start)},closestPointToPointParameter:function(){var t=new c,e=new c;return function(r,n){t.subVectors(r,this.start),e.subVectors(this.end,this.start);var i=e.dot(e),i=e.dot(t)/i;return n&&(i=ri.clamp(i,0,1)),i}}(),closestPointToPoint:function(t,e,r){return t=this.closestPointToPointParameter(t,e),r=r||new c,this.delta(r).multiplyScalar(t).add(this.start)},applyMatrix4:function(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this},equals:function(t){return t.start.equals(this.start)&&t.end.equals(this.end)}},st.normal=function(){var t=new c;return function(e,r,n,i){return i=i||new c,i.subVectors(n,r),t.subVectors(e,r),i.cross(t),e=i.lengthSq(),0<e?i.multiplyScalar(1/Math.sqrt(e)):i.set(0,0,0)}}(),st.barycoordFromPoint=function(){var t=new c,e=new c,r=new c;return function(n,i,o,a,s){t.subVectors(a,i),e.subVectors(o,i),r.subVectors(n,i),n=t.dot(t),i=t.dot(e),o=t.dot(r);var u=e.dot(e);a=e.dot(r);var h=n*u-i*i;return s=s||new c,0===h?s.set(-2,-1,-1):(h=1/h,u=(u*o-i*a)*h,n=(n*a-i*o)*h,s.set(1-u-n,n,u))}}(),st.containsPoint=function(){var t=new c;return function(e,r,n,i){return e=st.barycoordFromPoint(e,r,n,i,t),0<=e.x&&0<=e.y&&1>=e.x+e.y}}(),st.prototype={constructor:st,set:function(t,e,r){return this.a.copy(t),this.b.copy(e),this.c.copy(r),this},setFromPointsAndIndices:function(t,e,r,n){return this.a.copy(t[e]),this.b.copy(t[r]),this.c.copy(t[n]),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this},area:function(){var t=new c,e=new c;return function(){return t.subVectors(this.c,this.b),e.subVectors(this.a,this.b),.5*t.cross(e).length()}}(),midpoint:function(t){return(t||new c).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(t){return st.normal(this.a,this.b,this.c,t)},plane:function(t){return(t||new Q).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(t,e){return st.barycoordFromPoint(t,this.a,this.b,this.c,e)},containsPoint:function(t){return st.containsPoint(t,this.a,this.b,this.c)},closestPointToPoint:function(){var t,e,r,n;return function(i,o){void 0===t&&(t=new Q,e=[new at,new at,new at],r=new c,n=new c);var a=o||new c,s=1/0;if(t.setFromCoplanarPoints(this.a,this.b,this.c),t.projectPoint(i,r),!0===this.containsPoint(r))a.copy(r);else{e[0].set(this.a,this.b),e[1].set(this.b,this.c),e[2].set(this.c,this.a);for(var u=0;u<e.length;u++){e[u].closestPointToPoint(r,!0,n);var h=r.distanceToSquared(n);h<s&&(s=h,a.copy(n))}}return a}}(),equals:function(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}},ct.prototype={constructor:ct,clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.a=t.a,this.b=t.b,this.c=t.c,this.normal.copy(t.normal),this.color.copy(t.color),this.materialIndex=t.materialIndex;for(var e=0,r=t.vertexNormals.length;e<r;e++)this.vertexNormals[e]=t.vertexNormals[e].clone();for(e=0,r=t.vertexColors.length;e<r;e++)this.vertexColors[e]=t.vertexColors[e].clone();return this}},ut.prototype=Object.create(q.prototype),ut.prototype.constructor=ut,ut.prototype.isMeshBasicMaterial=!0,ut.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this},ht.prototype={constructor:ht,isBufferAttribute:!0,set needsUpdate(t){!0===t&&this.version++},setArray:function(t){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.count=void 0!==t?t.length/this.itemSize:0,this.array=t},setDynamic:function(t){return this.dynamic=t,this},copy:function(t){return this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.dynamic=t.dynamic,this},copyAt:function(t,e,r){t*=this.itemSize,r*=e.itemSize;for(var n=0,i=this.itemSize;n<i;n++)this.array[t+n]=e.array[r+n];return this},copyArray:function(t){return this.array.set(t),this},copyColorsArray:function(t){for(var e=this.array,r=0,n=0,i=t.length;n<i;n++){var o=t[n];void 0===o&&(console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined",n),o=new G),e[r++]=o.r,e[r++]=o.g,e[r++]=o.b}return this},copyIndicesArray:function(t){for(var e=this.array,r=0,n=0,i=t.length;n<i;n++){var o=t[n];e[r++]=o.a,e[r++]=o.b,e[r++]=o.c}return this},copyVector2sArray:function(t){for(var e=this.array,n=0,i=0,o=t.length;i<o;i++){var a=t[i];void 0===a&&(console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined",i),a=new r),e[n++]=a.x,e[n++]=a.y}return this},copyVector3sArray:function(t){for(var e=this.array,r=0,n=0,i=t.length;n<i;n++){var o=t[n];void 0===o&&(console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined",n),o=new c),e[r++]=o.x,e[r++]=o.y,e[r++]=o.z}return this},copyVector4sArray:function(t){for(var e=this.array,r=0,n=0,o=t.length;n<o;n++){var a=t[n];void 0===a&&(console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined",n),a=new i),e[r++]=a.x,e[r++]=a.y,e[r++]=a.z,e[r++]=a.w}return this},set:function(t,e){return void 0===e&&(e=0),this.array.set(t,e),this},getX:function(t){return this.array[t*this.itemSize]},setX:function(t,e){return this.array[t*this.itemSize]=e,this},getY:function(t){return this.array[t*this.itemSize+1]},setY:function(t,e){return this.array[t*this.itemSize+1]=e,this},getZ:function(t){return this.array[t*this.itemSize+2]},setZ:function(t,e){return this.array[t*this.itemSize+2]=e,this},getW:function(t){return this.array[t*this.itemSize+3]},setW:function(t,e){return this.array[t*this.itemSize+3]=e,this},setXY:function(t,e,r){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=r,this},setXYZ:function(t,e,r,n){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=r,this.array[t+2]=n,this},setXYZW:function(t,e,r,n,i){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=r,this.array[t+2]=n,this.array[t+3]=i,this},onUpload:function(t){return this.onUploadCallback=t,this},clone:function(){return(new this.constructor).copy(this)}},lt.prototype=Object.create(ht.prototype),lt.prototype.constructor=lt,pt.prototype=Object.create(ht.prototype),pt.prototype.constructor=pt,ft.prototype=Object.create(ht.prototype),ft.prototype.constructor=ft,dt.prototype=Object.create(ht.prototype),dt.prototype.constructor=dt,mt.prototype=Object.create(ht.prototype),mt.prototype.constructor=mt,vt.prototype=Object.create(ht.prototype),vt.prototype.constructor=vt,gt.prototype=Object.create(ht.prototype),gt.prototype.constructor=gt,yt.prototype=Object.create(ht.prototype),yt.prototype.constructor=yt,bt.prototype=Object.create(ht.prototype),bt.prototype.constructor=bt,Object.assign(_t.prototype,{computeGroups:function(t){var e,r=[],n=void 0;t=t.faces;for(var i=0;i<t.length;i++){var o=t[i];o.materialIndex!==n&&(n=o.materialIndex,void 0!==e&&(e.count=3*i-e.start,r.push(e)),e={start:3*i,materialIndex:n})}void 0!==e&&(e.count=3*i-e.start,r.push(e)),this.groups=r},fromGeometry:function(t){var e,n=t.faces,i=t.vertices,o=t.faceVertexUvs,a=o[0]&&0<o[0].length,s=o[1]&&0<o[1].length,c=t.morphTargets,u=c.length;if(0<u){e=[];for(var h=0;h<u;h++)e[h]=[];this.morphTargets.position=e}var l,p=t.morphNormals,f=p.length;if(0<f){for(l=[],h=0;h<f;h++)l[h]=[];this.morphTargets.normal=l}for(var d=t.skinIndices,m=t.skinWeights,v=d.length===i.length,g=m.length===i.length,h=0;h<n.length;h++){var y=n[h];this.vertices.push(i[y.a],i[y.b],i[y.c]);var b=y.vertexNormals;for(3===b.length?this.normals.push(b[0],b[1],b[2]):(b=y.normal,this.normals.push(b,b,b)),b=y.vertexColors,3===b.length?this.colors.push(b[0],b[1],b[2]):(b=y.color,this.colors.push(b,b,b)),!0===a&&(b=o[0][h],void 0!==b?this.uvs.push(b[0],b[1],b[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",h),this.uvs.push(new r,new r,new r))),!0===s&&(b=o[1][h],void 0!==b?this.uvs2.push(b[0],b[1],b[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",h),this.uvs2.push(new r,new r,new r))),b=0;b<u;b++){var _=c[b].vertices;e[b].push(_[y.a],_[y.b],_[y.c])}for(b=0;b<f;b++)_=p[b].vertexNormals[h],l[b].push(_.a,_.b,_.c);v&&this.skinIndices.push(d[y.a],d[y.b],d[y.c]),g&&this.skinWeights.push(m[y.a],m[y.b],m[y.c])}return this.computeGroups(t),this.verticesNeedUpdate=t.verticesNeedUpdate,this.normalsNeedUpdate=t.normalsNeedUpdate,this.colorsNeedUpdate=t.colorsNeedUpdate,this.uvsNeedUpdate=t.uvsNeedUpdate,this.groupsNeedUpdate=t.groupsNeedUpdate,this}}),Object.assign(xt.prototype,e.prototype,{isGeometry:!0,applyMatrix:function(t){for(var e=(new J).getNormalMatrix(t),r=0,n=this.vertices.length;r<n;r++)this.vertices[r].applyMatrix4(t);for(r=0,n=this.faces.length;r<n;r++){t=this.faces[r],t.normal.applyMatrix3(e).normalize();for(var i=0,o=t.vertexNormals.length;i<o;i++)t.vertexNormals[i].applyMatrix3(e).normalize()}return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this.normalsNeedUpdate=this.verticesNeedUpdate=!0,this},rotateX:function(){var t;return function(e){return void 0===t&&(t=new u),t.makeRotationX(e),this.applyMatrix(t),this}}(),rotateY:function(){var t;return function(e){return void 0===t&&(t=new u),t.makeRotationY(e),this.applyMatrix(t),this}}(),rotateZ:function(){var t;return function(e){return void 0===t&&(t=new u),t.makeRotationZ(e),this.applyMatrix(t),this}}(),translate:function(){var t;return function(e,r,n){return void 0===t&&(t=new u),t.makeTranslation(e,r,n),this.applyMatrix(t),this}}(),scale:function(){var t;return function(e,r,n){return void 0===t&&(t=new u),t.makeScale(e,r,n),this.applyMatrix(t),this}}(),lookAt:function(){var t;return function(e){void 0===t&&(t=new ot),t.lookAt(e),t.updateMatrix(),this.applyMatrix(t.matrix)}}(),fromBufferGeometry:function(t){function e(t,e,r,i){i=new ct(t,e,r,void 0!==s?[p[t].clone(),p[e].clone(),p[r].clone()]:[],void 0!==u?[n.colors[t].clone(),n.colors[e].clone(),n.colors[r].clone()]:[],i),n.faces.push(i),void 0!==h&&n.faceVertexUvs[0].push([f[t].clone(),f[e].clone(),f[r].clone()]),void 0!==l&&n.faceVertexUvs[1].push([d[t].clone(),d[e].clone(),d[r].clone()])}var n=this,i=null!==t.index?t.index.array:void 0,o=t.attributes,a=o.position.array,s=void 0!==o.normal?o.normal.array:void 0,u=void 0!==o.color?o.color.array:void 0,h=void 0!==o.uv?o.uv.array:void 0,l=void 0!==o.uv2?o.uv2.array:void 0;void 0!==l&&(this.faceVertexUvs[1]=[]);for(var p=[],f=[],d=[],m=o=0;o<a.length;o+=3,m+=2)n.vertices.push(new c(a[o],a[o+1],a[o+2])),void 0!==s&&p.push(new c(s[o],s[o+1],s[o+2])),void 0!==u&&n.colors.push(new G(u[o],u[o+1],u[o+2])),void 0!==h&&f.push(new r(h[m],h[m+1])),void 0!==l&&d.push(new r(l[m],l[m+1]));if(void 0!==i)if(a=t.groups,0<a.length)for(o=0;o<a.length;o++)for(var v=a[o],g=v.start,y=v.count,m=g,g=g+y;m<g;m+=3)e(i[m],i[m+1],i[m+2],v.materialIndex);else for(o=0;o<i.length;o+=3)e(i[o],i[o+1],i[o+2]);else for(o=0;o<a.length/3;o+=3)e(o,o+1,o+2);return this.computeFaceNormals(),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),this},center:function(){this.computeBoundingBox();var t=this.boundingBox.getCenter().negate();return this.translate(t.x,t.y,t.z),t},normalize:function(){this.computeBoundingSphere();var t=this.boundingSphere.center,e=this.boundingSphere.radius,e=0===e?1:1/e,r=new u;return r.set(e,0,0,-e*t.x,0,e,0,-e*t.y,0,0,e,-e*t.z,0,0,0,1),this.applyMatrix(r),this},computeFaceNormals:function(){for(var t=new c,e=new c,r=0,n=this.faces.length;r<n;r++){var i=this.faces[r],o=this.vertices[i.a],a=this.vertices[i.b];t.subVectors(this.vertices[i.c],a),e.subVectors(o,a),t.cross(e),t.normalize(),i.normal.copy(t)}},computeVertexNormals:function(t){void 0===t&&(t=!0);var e,r,n;for(n=Array(this.vertices.length),e=0,r=this.vertices.length;e<r;e++)n[e]=new c;if(t){var i,o,a,s=new c,u=new c;for(t=0,e=this.faces.length;t<e;t++)r=this.faces[t],i=this.vertices[r.a],o=this.vertices[r.b],a=this.vertices[r.c],s.subVectors(a,o),u.subVectors(i,o),s.cross(u),n[r.a].add(s),n[r.b].add(s),n[r.c].add(s)}else for(this.computeFaceNormals(),t=0,e=this.faces.length;t<e;t++)r=this.faces[t],n[r.a].add(r.normal),n[r.b].add(r.normal),n[r.c].add(r.normal);for(e=0,r=this.vertices.length;e<r;e++)n[e].normalize();for(t=0,e=this.faces.length;t<e;t++)r=this.faces[t],i=r.vertexNormals,3===i.length?(i[0].copy(n[r.a]),i[1].copy(n[r.b]),i[2].copy(n[r.c])):(i[0]=n[r.a].clone(),i[1]=n[r.b].clone(),i[2]=n[r.c].clone());0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var t,e,r;for(this.computeFaceNormals(),t=0,e=this.faces.length;t<e;t++){r=this.faces[t];var n=r.vertexNormals;3===n.length?(n[0].copy(r.normal),n[1].copy(r.normal),n[2].copy(r.normal)):(n[0]=r.normal.clone(),n[1]=r.normal.clone(),n[2]=r.normal.clone())}0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){var t,e,r,n,i;for(r=0,n=this.faces.length;r<n;r++)for(i=this.faces[r],i.__originalFaceNormal?i.__originalFaceNormal.copy(i.normal):i.__originalFaceNormal=i.normal.clone(),i.__originalVertexNormals||(i.__originalVertexNormals=[]),t=0,e=i.vertexNormals.length;t<e;t++)i.__originalVertexNormals[t]?i.__originalVertexNormals[t].copy(i.vertexNormals[t]):i.__originalVertexNormals[t]=i.vertexNormals[t].clone();var o=new xt;for(o.faces=this.faces,t=0,e=this.morphTargets.length;t<e;t++){if(!this.morphNormals[t]){this.morphNormals[t]={},this.morphNormals[t].faceNormals=[],this.morphNormals[t].vertexNormals=[],i=this.morphNormals[t].faceNormals;var a,s,u=this.morphNormals[t].vertexNormals;for(r=0,n=this.faces.length;r<n;r++)a=new c,s={a:new c,b:new c,c:new c},i.push(a),u.push(s)}for(u=this.morphNormals[t],o.vertices=this.morphTargets[t].vertices,o.computeFaceNormals(),o.computeVertexNormals(),r=0,n=this.faces.length;r<n;r++)i=this.faces[r],a=u.faceNormals[r],s=u.vertexNormals[r],a.copy(i.normal),s.a.copy(i.vertexNormals[0]),s.b.copy(i.vertexNormals[1]),s.c.copy(i.vertexNormals[2])}for(r=0,n=this.faces.length;r<n;r++)i=this.faces[r],i.normal=i.__originalFaceNormal,i.vertexNormals=i.__originalVertexNormals},computeLineDistances:function(){for(var t=0,e=this.vertices,r=0,n=e.length;r<n;r++)0<r&&(t+=e[r].distanceTo(e[r-1])),this.lineDistances[r]=t},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new K),this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new Z),this.boundingSphere.setFromPoints(this.vertices)},merge:function(t,e,r){if(!1===(t&&t.isGeometry))console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",t);else{var n,i=this.vertices.length,o=this.vertices,a=t.vertices,s=this.faces,c=t.faces,u=this.faceVertexUvs[0],h=t.faceVertexUvs[0],l=this.colors,p=t.colors;void 0===r&&(r=0),void 0!==e&&(n=(new J).getNormalMatrix(e)),t=0;for(var f=a.length;t<f;t++){var d=a[t].clone();void 0!==e&&d.applyMatrix4(e),o.push(d)}for(t=0,f=p.length;t<f;t++)l.push(p[t].clone());for(t=0,f=c.length;t<f;t++){var a=c[t],m=a.vertexNormals,p=a.vertexColors,l=new ct(a.a+i,a.b+i,a.c+i);for(l.normal.copy(a.normal),void 0!==n&&l.normal.applyMatrix3(n).normalize(),e=0,o=m.length;e<o;e++)d=m[e].clone(),void 0!==n&&d.applyMatrix3(n).normalize(),l.vertexNormals.push(d);for(l.color.copy(a.color),e=0,o=p.length;e<o;e++)d=p[e],l.vertexColors.push(d.clone());l.materialIndex=a.materialIndex+r,s.push(l)}for(t=0,f=h.length;t<f;t++)if(r=h[t],n=[],void 0!==r){for(e=0,o=r.length;e<o;e++)n.push(r[e].clone());u.push(n)}}},mergeMesh:function(t){!1===(t&&t.isMesh)?console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",t):(t.matrixAutoUpdate&&t.updateMatrix(),this.merge(t.geometry,t.matrix))},mergeVertices:function(){var t,e,r,n={},i=[],o=[],a=Math.pow(10,4);for(e=0,r=this.vertices.length;e<r;e++)t=this.vertices[e],t=Math.round(t.x*a)+"_"+Math.round(t.y*a)+"_"+Math.round(t.z*a),void 0===n[t]?(n[t]=e,i.push(this.vertices[e]),o[e]=i.length-1):o[e]=o[n[t]];for(n=[],e=0,r=this.faces.length;e<r;e++)for(a=this.faces[e],a.a=o[a.a],a.b=o[a.b],a.c=o[a.c],a=[a.a,a.b,a.c],t=0;3>t;t++)if(a[t]===a[(t+1)%3]){n.push(e);break}for(e=n.length-1;0<=e;e--)for(a=n[e],this.faces.splice(a,1),o=0,r=this.faceVertexUvs.length;o<r;o++)this.faceVertexUvs[o].splice(a,1);return e=this.vertices.length-i.length,this.vertices=i,e},sortFacesByMaterialIndex:function(){for(var t=this.faces,e=t.length,r=0;r<e;r++)t[r]._id=r;t.sort(function(t,e){return t.materialIndex-e.materialIndex})
+;var n,i,o=this.faceVertexUvs[0],a=this.faceVertexUvs[1];for(o&&o.length===e&&(n=[]),a&&a.length===e&&(i=[]),r=0;r<e;r++){var s=t[r]._id;n&&n.push(o[s]),i&&i.push(a[s])}n&&(this.faceVertexUvs[0]=n),i&&(this.faceVertexUvs[1]=i)},toJSON:function(){function t(t,e,r){return r?t|1<<e:t&~(1<<e)}function e(t){var e=t.x.toString()+t.y.toString()+t.z.toString();return void 0!==u[e]?u[e]:(u[e]=c.length/3,c.push(t.x,t.y,t.z),u[e])}function r(t){var e=t.r.toString()+t.g.toString()+t.b.toString();return void 0!==l[e]?l[e]:(l[e]=h.length,h.push(t.getHex()),l[e])}function n(t){var e=t.x.toString()+t.y.toString();return void 0!==f[e]?f[e]:(f[e]=p.length/2,p.push(t.x,t.y),f[e])}var i={metadata:{version:4.4,type:"Geometry",generator:"Geometry.toJSON"}};if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),void 0!==this.parameters){var o,a=this.parameters;for(o in a)void 0!==a[o]&&(i[o]=a[o]);return i}for(a=[],o=0;o<this.vertices.length;o++){var s=this.vertices[o];a.push(s.x,s.y,s.z)}var s=[],c=[],u={},h=[],l={},p=[],f={};for(o=0;o<this.faces.length;o++){var d=this.faces[o],m=void 0!==this.faceVertexUvs[0][o],v=0<d.normal.length(),g=0<d.vertexNormals.length,y=1!==d.color.r||1!==d.color.g||1!==d.color.b,b=0<d.vertexColors.length,_=0,_=t(_,0,0),_=t(_,1,!0),_=t(_,2,!1),_=t(_,3,m),_=t(_,4,v),_=t(_,5,g),_=t(_,6,y),_=t(_,7,b);s.push(_),s.push(d.a,d.b,d.c),s.push(d.materialIndex),m&&(m=this.faceVertexUvs[0][o],s.push(n(m[0]),n(m[1]),n(m[2]))),v&&s.push(e(d.normal)),g&&(v=d.vertexNormals,s.push(e(v[0]),e(v[1]),e(v[2]))),y&&s.push(r(d.color)),b&&(d=d.vertexColors,s.push(r(d[0]),r(d[1]),r(d[2])))}return i.data={},i.data.vertices=a,i.data.normals=c,0<h.length&&(i.data.colors=h),0<p.length&&(i.data.uvs=[p]),i.data.faces=s,i},clone:function(){return(new xt).copy(this)},copy:function(t){this.vertices=[],this.faces=[],this.faceVertexUvs=[[]],this.colors=[];for(var e=t.vertices,r=0,n=e.length;r<n;r++)this.vertices.push(e[r].clone());for(e=t.colors,r=0,n=e.length;r<n;r++)this.colors.push(e[r].clone());for(e=t.faces,r=0,n=e.length;r<n;r++)this.faces.push(e[r].clone());for(r=0,n=t.faceVertexUvs.length;r<n;r++){e=t.faceVertexUvs[r],void 0===this.faceVertexUvs[r]&&(this.faceVertexUvs[r]=[]);for(var i=0,o=e.length;i<o;i++){for(var a=e[i],s=[],c=0,u=a.length;c<u;c++)s.push(a[c].clone());this.faceVertexUvs[r].push(s)}}return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});var vi=0;Object.assign(wt.prototype,e.prototype,{isBufferGeometry:!0,getIndex:function(){return this.index},setIndex:function(t){this.index=t},addAttribute:function(t,e,r){if(!1===(e&&e.isBufferAttribute)&&!1===(e&&e.isInterleavedBufferAttribute))console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.addAttribute(t,new ht(e,r));else{if("index"!==t)return this.attributes[t]=e,this;console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e)}},getAttribute:function(t){return this.attributes[t]},removeAttribute:function(t){return delete this.attributes[t],this},addGroup:function(t,e,r){this.groups.push({start:t,count:e,materialIndex:void 0!==r?r:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix:function(t){var e=this.attributes.position;return void 0!==e&&(t.applyToVector3Array(e.array),e.needsUpdate=!0),e=this.attributes.normal,void 0!==e&&((new J).getNormalMatrix(t).applyToVector3Array(e.array),e.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(){var t;return function(e){return void 0===t&&(t=new u),t.makeRotationX(e),this.applyMatrix(t),this}}(),rotateY:function(){var t;return function(e){return void 0===t&&(t=new u),t.makeRotationY(e),this.applyMatrix(t),this}}(),rotateZ:function(){var t;return function(e){return void 0===t&&(t=new u),t.makeRotationZ(e),this.applyMatrix(t),this}}(),translate:function(){var t;return function(e,r,n){return void 0===t&&(t=new u),t.makeTranslation(e,r,n),this.applyMatrix(t),this}}(),scale:function(){var t;return function(e,r,n){return void 0===t&&(t=new u),t.makeScale(e,r,n),this.applyMatrix(t),this}}(),lookAt:function(){var t;return function(e){void 0===t&&(t=new ot),t.lookAt(e),t.updateMatrix(),this.applyMatrix(t.matrix)}}(),center:function(){this.computeBoundingBox();var t=this.boundingBox.getCenter().negate();return this.translate(t.x,t.y,t.z),t},setFromObject:function(t){var e=t.geometry;if(t.isPoints||t.isLine){t=new yt(3*e.vertices.length,3);var r=new yt(3*e.colors.length,3);this.addAttribute("position",t.copyVector3sArray(e.vertices)),this.addAttribute("color",r.copyColorsArray(e.colors)),e.lineDistances&&e.lineDistances.length===e.vertices.length&&(t=new yt(e.lineDistances.length,1),this.addAttribute("lineDistance",t.copyArray(e.lineDistances))),null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone())}else t.isMesh&&e&&e.isGeometry&&this.fromGeometry(e);return this},updateFromObject:function(t){var e=t.geometry;if(t.isMesh){var r=e.__directGeometry;if(!0===e.elementsNeedUpdate&&(r=void 0,e.elementsNeedUpdate=!1),void 0===r)return this.fromGeometry(e);r.verticesNeedUpdate=e.verticesNeedUpdate,r.normalsNeedUpdate=e.normalsNeedUpdate,r.colorsNeedUpdate=e.colorsNeedUpdate,r.uvsNeedUpdate=e.uvsNeedUpdate,r.groupsNeedUpdate=e.groupsNeedUpdate,e.verticesNeedUpdate=!1,e.normalsNeedUpdate=!1,e.colorsNeedUpdate=!1,e.uvsNeedUpdate=!1,e.groupsNeedUpdate=!1,e=r}return!0===e.verticesNeedUpdate&&(r=this.attributes.position,void 0!==r&&(r.copyVector3sArray(e.vertices),r.needsUpdate=!0),e.verticesNeedUpdate=!1),!0===e.normalsNeedUpdate&&(r=this.attributes.normal,void 0!==r&&(r.copyVector3sArray(e.normals),r.needsUpdate=!0),e.normalsNeedUpdate=!1),!0===e.colorsNeedUpdate&&(r=this.attributes.color,void 0!==r&&(r.copyColorsArray(e.colors),r.needsUpdate=!0),e.colorsNeedUpdate=!1),e.uvsNeedUpdate&&(r=this.attributes.uv,void 0!==r&&(r.copyVector2sArray(e.uvs),r.needsUpdate=!0),e.uvsNeedUpdate=!1),e.lineDistancesNeedUpdate&&(r=this.attributes.lineDistance,void 0!==r&&(r.copyArray(e.lineDistances),r.needsUpdate=!0),e.lineDistancesNeedUpdate=!1),e.groupsNeedUpdate&&(e.computeGroups(t.geometry),this.groups=e.groups,e.groupsNeedUpdate=!1),this},fromGeometry:function(t){return t.__directGeometry=(new _t).fromGeometry(t),this.fromDirectGeometry(t.__directGeometry)},fromDirectGeometry:function(t){var e=new Float32Array(3*t.vertices.length);this.addAttribute("position",new ht(e,3).copyVector3sArray(t.vertices)),0<t.normals.length&&(e=new Float32Array(3*t.normals.length),this.addAttribute("normal",new ht(e,3).copyVector3sArray(t.normals))),0<t.colors.length&&(e=new Float32Array(3*t.colors.length),this.addAttribute("color",new ht(e,3).copyColorsArray(t.colors))),0<t.uvs.length&&(e=new Float32Array(2*t.uvs.length),this.addAttribute("uv",new ht(e,2).copyVector2sArray(t.uvs))),0<t.uvs2.length&&(e=new Float32Array(2*t.uvs2.length),this.addAttribute("uv2",new ht(e,2).copyVector2sArray(t.uvs2))),0<t.indices.length&&(e=new(65535<t.vertices.length?Uint32Array:Uint16Array)(3*t.indices.length),this.setIndex(new ht(e,1).copyIndicesArray(t.indices))),this.groups=t.groups;for(var r in t.morphTargets){for(var e=[],n=t.morphTargets[r],i=0,o=n.length;i<o;i++){var a=n[i],s=new yt(3*a.length,3);e.push(s.copyVector3sArray(a))}this.morphAttributes[r]=e}return 0<t.skinIndices.length&&(r=new yt(4*t.skinIndices.length,4),this.addAttribute("skinIndex",r.copyVector4sArray(t.skinIndices))),0<t.skinWeights.length&&(r=new yt(4*t.skinWeights.length,4),this.addAttribute("skinWeight",r.copyVector4sArray(t.skinWeights))),null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new K);var t=this.attributes.position;void 0!==t?this.boundingBox.setFromBufferAttribute(t):this.boundingBox.makeEmpty(),(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)},computeBoundingSphere:function(){var t=new K,e=new c;return function(){null===this.boundingSphere&&(this.boundingSphere=new Z);var r=this.attributes.position;if(r){var n=this.boundingSphere.center;t.setFromBufferAttribute(r),t.getCenter(n);for(var i=0,o=0,a=r.count;o<a;o++)e.x=r.getX(o),e.y=r.getY(o),e.z=r.getZ(o),i=Math.max(i,n.distanceToSquared(e));this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}}(),computeFaceNormals:function(){},computeVertexNormals:function(){var t=this.index,e=this.attributes,r=this.groups;if(e.position){var n=e.position.array;if(void 0===e.normal)this.addAttribute("normal",new ht(new Float32Array(n.length),3));else for(var i=e.normal.array,o=0,a=i.length;o<a;o++)i[o]=0;var s,u,h,i=e.normal.array,l=new c,p=new c,f=new c,d=new c,m=new c;if(t){t=t.array,0===r.length&&this.addGroup(0,t.length);for(var v=0,g=r.length;v<g;++v)for(o=r[v],a=o.start,s=o.count,o=a,a+=s;o<a;o+=3)s=3*t[o+0],u=3*t[o+1],h=3*t[o+2],l.fromArray(n,s),p.fromArray(n,u),f.fromArray(n,h),d.subVectors(f,p),m.subVectors(l,p),d.cross(m),i[s]+=d.x,i[s+1]+=d.y,i[s+2]+=d.z,i[u]+=d.x,i[u+1]+=d.y,i[u+2]+=d.z,i[h]+=d.x,i[h+1]+=d.y,i[h+2]+=d.z}else for(o=0,a=n.length;o<a;o+=9)l.fromArray(n,o),p.fromArray(n,o+3),f.fromArray(n,o+6),d.subVectors(f,p),m.subVectors(l,p),d.cross(m),i[o]=d.x,i[o+1]=d.y,i[o+2]=d.z,i[o+3]=d.x,i[o+4]=d.y,i[o+5]=d.z,i[o+6]=d.x,i[o+7]=d.y,i[o+8]=d.z;this.normalizeNormals(),e.normal.needsUpdate=!0}},merge:function(t,e){if(!1!==(t&&t.isBufferGeometry)){void 0===e&&(e=0);var r,n=this.attributes;for(r in n)if(void 0!==t.attributes[r])for(var i=n[r].array,o=t.attributes[r],a=o.array,s=0,o=o.itemSize*e;s<a.length;s++,o++)i[o]=a[s];return this}console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.",t)},normalizeNormals:function(){for(var t,e,r,n=this.attributes.normal.array,i=0,o=n.length;i<o;i+=3)t=n[i],e=n[i+1],r=n[i+2],t=1/Math.sqrt(t*t+e*e+r*r),n[i]*=t,n[i+1]*=t,n[i+2]*=t},toNonIndexed:function(){if(null===this.index)return console.warn("THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed."),this;var t,e=new wt,r=this.index.array,n=this.attributes;for(t in n){for(var i,o=n[t],a=o.array,o=o.itemSize,s=new a.constructor(r.length*o),c=0,u=0,h=r.length;u<h;u++){i=r[u]*o;for(var l=0;l<o;l++)s[c++]=a[i++]}e.addAttribute(t,new ht(s,o))}return e},toJSON:function(){var t={metadata:{version:4.4,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,""!==this.name&&(t.name=this.name),void 0!==this.parameters){var e,r=this.parameters;for(e in r)void 0!==r[e]&&(t[e]=r[e]);return t}t.data={attributes:{}};var n=this.index;null!==n&&(r=Array.prototype.slice.call(n.array),t.data.index={type:n.array.constructor.name,array:r}),n=this.attributes;for(e in n){var i=n[e],r=Array.prototype.slice.call(i.array);t.data.attributes[e]={itemSize:i.itemSize,type:i.array.constructor.name,array:r,normalized:i.normalized}}return e=this.groups,0<e.length&&(t.data.groups=JSON.parse(JSON.stringify(e))),e=this.boundingSphere,null!==e&&(t.data.boundingSphere={center:e.center.toArray(),radius:e.radius}),t},clone:function(){return(new wt).copy(this)},copy:function(t){var e=t.index;null!==e&&this.setIndex(e.clone());var r,e=t.attributes;for(r in e)this.addAttribute(r,e[r].clone());for(t=t.groups,r=0,e=t.length;r<e;r++){var n=t[r];this.addGroup(n.start,n.count,n.materialIndex)}return this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),wt.MaxIndex=65535,St.prototype=Object.assign(Object.create(ot.prototype),{constructor:St,isMesh:!0,setDrawMode:function(t){this.drawMode=t},copy:function(t){return ot.prototype.copy.call(this,t),this.drawMode=t.drawMode,this},updateMorphTargets:function(){var t=this.geometry.morphTargets;if(void 0!==t&&0<t.length){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(var e=0,r=t.length;e<r;e++)this.morphTargetInfluences.push(0),this.morphTargetDictionary[t[e].name]=e}},raycast:function(){function t(t,e,r,n,i,o,a){return st.barycoordFromPoint(t,e,r,n,y),i.multiplyScalar(y.x),o.multiplyScalar(y.y),a.multiplyScalar(y.z),i.add(o).add(a),i.clone()}function e(t,e,r,n,i,o,a){var s=t.material;return null===(1===s.side?r.intersectTriangle(o,i,n,!0,a):r.intersectTriangle(n,i,o,2!==s.side,a))?null:(_.copy(a),_.applyMatrix4(t.matrixWorld),r=e.ray.origin.distanceTo(_),r<e.near||r>e.far?null:{distance:r,point:_.clone(),object:t})}function n(r,n,i,o,a,c,u,p){return s.fromArray(o,3*c),h.fromArray(o,3*u),l.fromArray(o,3*p),(r=e(r,n,i,s,h,l,b))&&(a&&(m.fromArray(a,2*c),v.fromArray(a,2*u),g.fromArray(a,2*p),r.uv=t(b,s,h,l,m,v,g)),r.face=new ct(c,u,p,st.normal(s,h,l)),r.faceIndex=c),r}var i=new u,o=new rt,a=new Z,s=new c,h=new c,l=new c,p=new c,f=new c,d=new c,m=new r,v=new r,g=new r,y=new c,b=new c,_=new c;return function(r,c){var u=this.geometry,y=this.material,_=this.matrixWorld;if(void 0!==y&&(null===u.boundingSphere&&u.computeBoundingSphere(),a.copy(u.boundingSphere),a.applyMatrix4(_),!1!==r.ray.intersectsSphere(a)&&(i.getInverse(_),o.copy(r.ray).applyMatrix4(i),null===u.boundingBox||!1!==o.intersectsBox(u.boundingBox)))){var x,w;if(u.isBufferGeometry){var S,M,y=u.index,_=u.attributes,u=_.position.array;if(void 0!==_.uv&&(x=_.uv.array),null!==y)for(var _=y.array,E=0,T=_.length;E<T;E+=3)y=_[E],S=_[E+1],M=_[E+2],(w=n(this,r,o,u,x,y,S,M))&&(w.faceIndex=Math.floor(E/3),c.push(w));else for(E=0,T=u.length;E<T;E+=9)y=E/3,S=y+1,M=y+2,(w=n(this,r,o,u,x,y,S,M))&&(w.index=y,c.push(w))}else if(u.isGeometry){var C,O,_=y&&y.isMultiMaterial,E=!0===_?y.materials:null,T=u.vertices;S=u.faces,M=u.faceVertexUvs[0],0<M.length&&(x=M);for(var P=0,A=S.length;P<A;P++){var j=S[P];if(void 0!==(w=!0===_?E[j.materialIndex]:y)){if(M=T[j.a],C=T[j.b],O=T[j.c],!0===w.morphTargets){w=u.morphTargets;var R=this.morphTargetInfluences;s.set(0,0,0),h.set(0,0,0),l.set(0,0,0);for(var L=0,N=w.length;L<N;L++){var I=R[L];if(0!==I){var D=w[L].vertices;s.addScaledVector(p.subVectors(D[j.a],M),I),h.addScaledVector(f.subVectors(D[j.b],C),I),l.addScaledVector(d.subVectors(D[j.c],O),I)}}s.add(M),h.add(C),l.add(O),M=s,C=h,O=l}(w=e(this,r,o,M,C,O,b))&&(x&&(R=x[P],m.copy(R[0]),v.copy(R[1]),g.copy(R[2]),w.uv=t(b,M,C,O,m,v,g)),w.face=j,w.faceIndex=P,c.push(w))}}}}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),Mt.prototype=Object.create(wt.prototype),Mt.prototype.constructor=Mt,Et.prototype=Object.create(wt.prototype),Et.prototype.constructor=Et,Tt.prototype=Object.create(ot.prototype),Tt.prototype.constructor=Tt,Tt.prototype.isCamera=!0,Tt.prototype.getWorldDirection=function(){var t=new s;return function(e){return e=e||new c,this.getWorldQuaternion(t),e.set(0,0,-1).applyQuaternion(t)}}(),Tt.prototype.lookAt=function(){var t=new u;return function(e){t.lookAt(this.position,e,this.up),this.quaternion.setFromRotationMatrix(t)}}(),Tt.prototype.clone=function(){return(new this.constructor).copy(this)},Tt.prototype.copy=function(t){return ot.prototype.copy.call(this,t),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this},Ct.prototype=Object.assign(Object.create(Tt.prototype),{constructor:Ct,isPerspectiveCamera:!0,copy:function(t){return Tt.prototype.copy.call(this,t),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this},setFocalLength:function(t){t=.5*this.getFilmHeight()/t,this.fov=2*ri.RAD2DEG*Math.atan(t),this.updateProjectionMatrix()},getFocalLength:function(){var t=Math.tan(.5*ri.DEG2RAD*this.fov);return.5*this.getFilmHeight()/t},getEffectiveFOV:function(){return 2*ri.RAD2DEG*Math.atan(Math.tan(.5*ri.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(t,e,r,n,i,o){this.aspect=t/e,this.view={fullWidth:t,fullHeight:e,offsetX:r,offsetY:n,width:i,height:o},this.updateProjectionMatrix()},clearViewOffset:function(){this.view=null,this.updateProjectionMatrix()},updateProjectionMatrix:function(){var t=this.near,e=t*Math.tan(.5*ri.DEG2RAD*this.fov)/this.zoom,r=2*e,n=this.aspect*r,i=-.5*n,o=this.view;if(null!==o)var a=o.fullWidth,s=o.fullHeight,i=i+o.offsetX*n/a,e=e-o.offsetY*r/s,n=o.width/a*n,r=o.height/s*r;o=this.filmOffset,0!==o&&(i+=t*o/this.getFilmWidth()),this.projectionMatrix.makeFrustum(i,i+n,e-r,e,t,this.far)},toJSON:function(t){return t=ot.prototype.toJSON.call(this,t),t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,null!==this.view&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}),Ot.prototype=Object.assign(Object.create(Tt.prototype),{constructor:Ot,isOrthographicCamera:!0,copy:function(t){return Tt.prototype.copy.call(this,t),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this},setViewOffset:function(t,e,r,n,i,o){this.view={fullWidth:t,fullHeight:e,offsetX:r,offsetY:n,width:i,height:o},this.updateProjectionMatrix()},clearViewOffset:function(){this.view=null,this.updateProjectionMatrix()},updateProjectionMatrix:function(){var t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),r=(this.right+this.left)/2,n=(this.top+this.bottom)/2,i=r-t,r=r+t,t=n+e,e=n-e;if(null!==this.view)var r=this.zoom/(this.view.width/this.view.fullWidth),e=this.zoom/(this.view.height/this.view.fullHeight),o=(this.right-this.left)/this.view.width,n=(this.top-this.bottom)/this.view.height,i=i+this.view.offsetX/r*o,r=i+this.view.width/r*o,t=t-this.view.offsetY/e*n,e=t-this.view.height/e*n;this.projectionMatrix.makeOrthographic(i,r,t,e,this.near,this.far)},toJSON:function(t){return t=ot.prototype.toJSON.call(this,t),t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,null!==this.view&&(t.object.view=Object.assign({},this.view)),t}});var gi=0;ee.prototype.isFogExp2=!0,ee.prototype.clone=function(){return new ee(this.color.getHex(),this.density)},ee.prototype.toJSON=function(t){return{type:"FogExp2",color:this.color.getHex(),density:this.density}},re.prototype.isFog=!0,re.prototype.clone=function(){return new re(this.color.getHex(),this.near,this.far)},re.prototype.toJSON=function(t){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}},ne.prototype=Object.create(ot.prototype),ne.prototype.constructor=ne,ne.prototype.copy=function(t,e){return ot.prototype.copy.call(this,t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this},ne.prototype.toJSON=function(t){var e=ot.prototype.toJSON.call(this,t);return null!==this.background&&(e.object.background=this.background.toJSON(t)),null!==this.fog&&(e.object.fog=this.fog.toJSON()),e},ie.prototype=Object.assign(Object.create(ot.prototype),{constructor:ie,isLensFlare:!0,copy:function(t){ot.prototype.copy.call(this,t),this.positionScreen.copy(t.positionScreen),this.customUpdateCallback=t.customUpdateCallback;for(var e=0,r=t.lensFlares.length;e<r;e++)this.lensFlares.push(t.lensFlares[e]);return this},add:function(t,e,r,n,i,o){void 0===e&&(e=-1),void 0===r&&(r=0),void 0===o&&(o=1),void 0===i&&(i=new G(16777215)),void 0===n&&(n=1),r=Math.min(r,Math.max(0,r)),this.lensFlares.push({texture:t,size:e,distance:r,x:0,y:0,z:0,scale:1,rotation:0,opacity:o,color:i,blending:n})},updateLensFlares:function(){var t,e,r=this.lensFlares.length,n=2*-this.positionScreen.x,i=2*-this.positionScreen.y;for(t=0;t<r;t++)e=this.lensFlares[t],e.x=this.positionScreen.x+n*e.distance,e.y=this.positionScreen.y+i*e.distance,e.wantedRotation=e.x*Math.PI*.25,e.rotation+=.25*(e.wantedRotation-e.rotation)}}),oe.prototype=Object.create(q.prototype),oe.prototype.constructor=oe,oe.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.rotation=t.rotation,this},ae.prototype=Object.assign(Object.create(ot.prototype),{constructor:ae,isSprite:!0,raycast:function(){var t=new c;return function(e,r){t.setFromMatrixPosition(this.matrixWorld);var n=e.ray.distanceSqToPoint(t);n>this.scale.x*this.scale.y/4||r.push({distance:Math.sqrt(n),point:this.position,face:null,object:this})}}(),clone:function(){return new this.constructor(this.material).copy(this)}}),se.prototype=Object.assign(Object.create(ot.prototype),{constructor:se,copy:function(t){ot.prototype.copy.call(this,t,!1),t=t.levels;for(var e=0,r=t.length;e<r;e++){var n=t[e];this.addLevel(n.object.clone(),n.distance)}return this},addLevel:function(t,e){void 0===e&&(e=0),e=Math.abs(e);for(var r=this.levels,n=0;n<r.length&&!(e<r[n].distance);n++);r.splice(n,0,{distance:e,object:t}),this.add(t)},getObjectForDistance:function(t){for(var e=this.levels,r=1,n=e.length;r<n&&!(t<e[r].distance);r++);return e[r-1].object},raycast:function(){var t=new c;return function(e,r){t.setFromMatrixPosition(this.matrixWorld);var n=e.ray.origin.distanceTo(t);this.getObjectForDistance(n).raycast(e,r)}}(),update:function(){var t=new c,e=new c;return function(r){var n=this.levels;if(1<n.length){t.setFromMatrixPosition(r.matrixWorld),e.setFromMatrixPosition(this.matrixWorld),r=t.distanceTo(e),n[0].object.visible=!0;for(var i=1,o=n.length;i<o&&r>=n[i].distance;i++)n[i-1].object.visible=!1,n[i].object.visible=!0;for(;i<o;i++)n[i].object.visible=!1}}}(),toJSON:function(t){t=ot.prototype.toJSON.call(this,t),t.object.levels=[];for(var e=this.levels,r=0,n=e.length;r<n;r++){var i=e[r];t.object.levels.push({object:i.object.uuid,distance:i.distance})}return t}}),Object.assign(ce.prototype,{calculateInverses:function(){this.boneInverses=[];for(var t=0,e=this.bones.length;t<e;t++){var r=new u;this.bones[t]&&r.getInverse(this.bones[t].matrixWorld),this.boneInverses.push(r)}},pose:function(){for(var t,e=0,r=this.bones.length;e<r;e++)(t=this.bones[e])&&t.matrixWorld.getInverse(this.boneInverses[e]);for(e=0,r=this.bones.length;e<r;e++)(t=this.bones[e])&&(t.parent&&t.parent.isBone?(t.matrix.getInverse(t.parent.matrixWorld),t.matrix.multiply(t.matrixWorld)):t.matrix.copy(t.matrixWorld),t.matrix.decompose(t.position,t.quaternion,t.scale))},update:function(){var t=new u;return function(){for(var e=0,r=this.bones.length;e<r;e++)t.multiplyMatrices(this.bones[e]?this.bones[e].matrixWorld:this.identityMatrix,this.boneInverses[e]),t.toArray(this.boneMatrices,16*e);this.useVertexTexture&&(this.boneTexture.needsUpdate=!0)}}(),clone:function(){return new ce(this.bones,this.boneInverses,this.useVertexTexture)}}),ue.prototype=Object.assign(Object.create(ot.prototype),{constructor:ue,isBone:!0}),he.prototype=Object.assign(Object.create(St.prototype),{constructor:he,isSkinnedMesh:!0,bind:function(t,e){this.skeleton=t,void 0===e&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),e=this.matrixWorld),this.bindMatrix.copy(e),this.bindMatrixInverse.getInverse(e)},pose:function(){this.skeleton.pose()},normalizeSkinWeights:function(){if(this.geometry&&this.geometry.isGeometry)for(var t=0;t<this.geometry.skinWeights.length;t++){var e=this.geometry.skinWeights[t],r=1/e.lengthManhattan();1/0!==r?e.multiplyScalar(r):e.set(1,0,0,0)}else if(this.geometry&&this.geometry.isBufferGeometry)for(var e=new i,n=this.geometry.attributes.skinWeight,t=0;t<n.count;t++)e.x=n.getX(t),e.y=n.getY(t),e.z=n.getZ(t),e.w=n.getW(t),r=1/e.lengthManhattan(),1/0!==r?e.multiplyScalar(r):e.set(1,0,0,0),n.setXYZW(t,e.x,e.y,e.z,e.w)},updateMatrixWorld:function(t){St.prototype.updateMatrixWorld.call(this,!0),"attached"===this.bindMode?this.bindMatrixInverse.getInverse(this.matrixWorld):"detached"===this.bindMode?this.bindMatrixInverse.getInverse(this.bindMatrix):console.warn("THREE.SkinnedMesh unrecognized bindMode: "+this.bindMode)},clone:function(){return new this.constructor(this.geometry,this.material,this.skeleton.useVertexTexture).copy(this)}}),le.prototype=Object.create(q.prototype),le.prototype.constructor=le,le.prototype.isLineBasicMaterial=!0,le.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.color.copy(t.color),this.linewidth=t.linewidth,this.linecap=t.linecap,this.linejoin=t.linejoin,this},pe.prototype=Object.assign(Object.create(ot.prototype),{constructor:pe,isLine:!0,raycast:function(){var t=new u,e=new rt,r=new Z;return function(n,i){var o=n.linePrecision,o=o*o,a=this.geometry,s=this.matrixWorld;if(null===a.boundingSphere&&a.computeBoundingSphere(),r.copy(a.boundingSphere),r.applyMatrix4(s),!1!==n.ray.intersectsSphere(r)){t.getInverse(s),e.copy(n.ray).applyMatrix4(t);var u=new c,h=new c,s=new c,l=new c,p=this&&this.isLineSegments?2:1;if(a.isBufferGeometry){var f=a.index,d=a.attributes.position.array;if(null!==f)for(var f=f.array,a=0,m=f.length-1;a<m;a+=p){var v=f[a+1];u.fromArray(d,3*f[a]),h.fromArray(d,3*v),v=e.distanceSqToSegment(u,h,l,s),v>o||(l.applyMatrix4(this.matrixWorld),(v=n.ray.origin.distanceTo(l))<n.near||v>n.far||i.push({distance:v,point:s.clone().applyMatrix4(this.matrixWorld),index:a,face:null,faceIndex:null,object:this}))}else for(a=0,m=d.length/3-1;a<m;a+=p)u.fromArray(d,3*a),h.fromArray(d,3*a+3),(v=e.distanceSqToSegment(u,h,l,s))>o||(l.applyMatrix4(this.matrixWorld),(v=n.ray.origin.distanceTo(l))<n.near||v>n.far||i.push({distance:v,point:s.clone().applyMatrix4(this.matrixWorld),index:a,face:null,faceIndex:null,object:this}))}else if(a.isGeometry)for(u=a.vertices,h=u.length,a=0;a<h-1;a+=p)(v=e.distanceSqToSegment(u[a],u[a+1],l,s))>o||(l.applyMatrix4(this.matrixWorld),(v=n.ray.origin.distanceTo(l))<n.near||v>n.far||i.push({distance:v,point:s.clone().applyMatrix4(this.matrixWorld),index:a,face:null,faceIndex:null,object:this}))}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),fe.prototype=Object.assign(Object.create(pe.prototype),{constructor:fe,isLineSegments:!0}),de.prototype=Object.create(q.prototype),de.prototype.constructor=de,de.prototype.isPointsMaterial=!0,de.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.size=t.size,this.sizeAttenuation=t.sizeAttenuation,this},me.prototype=Object.assign(Object.create(ot.prototype),{constructor:me,isPoints:!0,raycast:function(){var t=new u,e=new rt,r=new Z;return function(n,i){function o(t,r){var o=e.distanceSqToPoint(t);if(o<l){var s=e.closestPointToPoint(t);s.applyMatrix4(u);var c=n.ray.origin.distanceTo(s);c<n.near||c>n.far||i.push({distance:c,distanceToRay:Math.sqrt(o),point:s.clone(),index:r,face:null,object:a})}}var a=this,s=this.geometry,u=this.matrixWorld,h=n.params.Points.threshold;if(null===s.boundingSphere&&s.computeBoundingSphere(),r.copy(s.boundingSphere),r.applyMatrix4(u),!1!==n.ray.intersectsSphere(r)){t.getInverse(u),e.copy(n.ray).applyMatrix4(t);var h=h/((this.scale.x+this.scale.y+this.scale.z)/3),l=h*h,h=new c;if(s.isBufferGeometry){var p=s.index,s=s.attributes.position.array;if(null!==p)for(var f=p.array,p=0,d=f.length;p<d;p++){var m=f[p];h.fromArray(s,3*m),o(h,m)}else for(p=0,f=s.length/3;p<f;p++)h.fromArray(s,3*p),o(h,p)}else for(h=s.vertices,p=0,f=h.length;p<f;p++)o(h[p],p)}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),ve.prototype=Object.assign(Object.create(ot.prototype),{constructor:ve}),ge.prototype=Object.create(n.prototype),ge.prototype.constructor=ge,ye.prototype=Object.create(n.prototype),ye.prototype.constructor=ye,ye.prototype.isCompressedTexture=!0,be.prototype=Object.create(n.prototype),be.prototype.constructor=be,_e.prototype=Object.create(n.prototype),_e.prototype.constructor=_e,_e.prototype.isDepthTexture=!0,xe.prototype=Object.create(wt.prototype),xe.prototype.constructor=xe,we.prototype=Object.create(wt.prototype),we.prototype.constructor=we,Se.prototype=Object.create(xt.prototype),Se.prototype.constructor=Se,Me.prototype=Object.create(wt.prototype),Me.prototype.constructor=Me,Ee.prototype=Object.create(Me.prototype),Ee.prototype.constructor=Ee,Te.prototype=Object.create(xt.prototype),Te.prototype.constructor=Te,Ce.prototype=Object.create(Me.prototype),Ce.prototype.constructor=Ce,Oe.prototype=Object.create(xt.prototype),Oe.prototype.constructor=Oe,Pe.prototype=Object.create(Me.prototype),Pe.prototype.constructor=Pe,Ae.prototype=Object.create(xt.prototype),Ae.prototype.constructor=Ae,je.prototype=Object.create(Me.prototype),je.prototype.constructor=je,Re.prototype=Object.create(xt.prototype),Re.prototype.constructor=Re,Le.prototype=Object.create(xt.prototype),Le.prototype.constructor=Le,Ne.prototype=Object.create(wt.prototype),Ne.prototype.constructor=Ne,Ie.prototype=Object.create(xt.prototype),Ie.prototype.constructor=Ie,De.prototype=Object.create(wt.prototype),De.prototype.constructor=De,ke.prototype=Object.create(xt.prototype),ke.prototype.constructor=ke,Fe.prototype=Object.create(wt.prototype),Fe.prototype.constructor=Fe,Ue.prototype=Object.create(xt.prototype),Ue.prototype.constructor=Ue;var yi={area:function(t){for(var e=t.length,r=0,n=e-1,i=0;i<e;n=i++)r+=t[n].x*t[i].y-t[i].x*t[n].y;return.5*r},triangulate:function(){return function(t,e){var r=t.length;if(3>r)return null;var n,i,o,a=[],s=[],c=[];if(0<yi.area(t))for(i=0;i<r;i++)s[i]=i;else for(i=0;i<r;i++)s[i]=r-1-i;var u=2*r;for(i=r-1;2<r;){if(0>=u--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}n=i,r<=n&&(n=0),i=n+1,r<=i&&(i=0),o=i+1,r<=o&&(o=0);var h;t:{var l,p,f,d,m,v,g,y;if(l=t[s[n]].x,p=t[s[n]].y,f=t[s[i]].x,d=t[s[i]].y,m=t[s[o]].x,v=t[s[o]].y,0>=(f-l)*(v-p)-(d-p)*(m-l))h=!1;else{var b,_,x,w,S,M,E,T,C,O;for(b=m-f,_=v-d,x=l-m,w=p-v,S=f-l,M=d-p,h=0;h<r;h++)if(g=t[s[h]].x,y=t[s[h]].y,!(g===l&&y===p||g===f&&y===d||g===m&&y===v)&&(E=g-l,T=y-p,C=g-f,O=y-d,g-=m,y-=v,C=b*O-_*C,E=S*T-M*E,T=x*y-w*g,C>=-Number.EPSILON&&T>=-Number.EPSILON&&E>=-Number.EPSILON)){h=!1;break t}h=!0}}if(h){for(a.push([t[s[n]],t[s[i]],t[s[o]]]),c.push([s[n],s[i],s[o]]),n=i,o=i+1;o<r;n++,o++)s[n]=s[o];r--,u=2*r}}return e?c:a}}(),triangulateShape:function(t,e){function r(t){var e=t.length;2<e&&t[e-1].equals(t[0])&&t.pop()}function n(t,e,r){return t.x!==e.x?t.x<e.x?t.x<=r.x&&r.x<=e.x:e.x<=r.x&&r.x<=t.x:t.y<e.y?t.y<=r.y&&r.y<=e.y:e.y<=r.y&&r.y<=t.y}function i(t,e,r,i,o){var a=e.x-t.x,s=e.y-t.y,c=i.x-r.x,u=i.y-r.y,h=t.x-r.x,l=t.y-r.y,p=s*c-a*u,f=s*h-a*l;if(Math.abs(p)>Number.EPSILON){if(0<p){if(0>f||f>p)return[];if(0>(c=u*h-c*l)||c>p)return[]}else{if(0<f||f<p)return[];if(0<(c=u*h-c*l)||c<p)return[]}return 0===c?!o||0!==f&&f!==p?[t]:[]:c===p?!o||0!==f&&f!==p?[e]:[]:0===f?[r]:f===p?[i]:(o=c/p,[{x:t.x+o*a,y:t.y+o*s}])}return 0!==f||u*h!=c*l?[]:(s=0===a&&0===s,c=0===c&&0===u,s&&c?t.x!==r.x||t.y!==r.y?[]:[t]:s?n(r,i,t)?[t]:[]:c?n(t,e,r)?[r]:[]:(0!==a?(t.x<e.x?(a=t,c=t.x,s=e,t=e.x):(a=e,c=e.x,s=t,t=t.x),r.x<i.x?(e=r,p=r.x,u=i,r=i.x):(e=i,p=i.x,u=r,r=r.x)):(t.y<e.y?(a=t,c=t.y,s=e,t=e.y):(a=e,c=e.y,s=t,t=t.y),r.y<i.y?(e=r,p=r.y,u=i,r=i.y):(e=i,p=i.y,u=r,r=r.y)),c<=p?t<p?[]:t===p?o?[]:[e]:t<=r?[e,s]:[e,u]:c>r?[]:c===r?o?[]:[a]:t<=r?[a,s]:[a,u]))}function o(t,e,r,n){var i=e.x-t.x,o=e.y-t.y;e=r.x-t.x,r=r.y-t.y;var a=n.x-t.x;return n=n.y-t.y,t=i*r-o*e,i=i*n-o*a,
+Math.abs(t)>Number.EPSILON?(e=a*r-n*e,0<t?0<=i&&0<=e:0<=i||0<=e):0<i}r(t),e.forEach(r);var a,s,c,u,h,l={};for(c=t.concat(),a=0,s=e.length;a<s;a++)Array.prototype.push.apply(c,e[a]);for(a=0,s=c.length;a<s;a++)h=c[a].x+":"+c[a].y,void 0!==l[h]&&console.warn("THREE.ShapeUtils: Duplicate point",h,a),l[h]=a;a=function(t,e){var r,n,a,s,c,u,h,l,p,f=t.concat(),d=[],m=[],v=0;for(n=e.length;v<n;v++)d.push(v);h=0;for(var g=2*d.length;0<d.length;){if(0>--g){console.log("Infinite Loop! Holes left:"+d.length+", Probably Hole outside Shape!");break}for(a=h;a<f.length;a++){for(s=f[a],n=-1,v=0;v<d.length;v++)if(c=d[v],u=s.x+":"+s.y+":"+c,void 0===m[u]){for(r=e[c],l=0;l<r.length;l++)if(c=r[l],function(t,e){var n=f.length-1,i=t-1;0>i&&(i=n);var a=t+1;return a>n&&(a=0),!!(n=o(f[t],f[i],f[a],r[e]))&&(n=r.length-1,i=e-1,0>i&&(i=n),a=e+1,a>n&&(a=0),!!(n=o(r[e],r[i],r[a],f[t])))}(a,l)&&!function(t,e){var r,n;for(r=0;r<f.length;r++)if(n=r+1,n%=f.length,n=i(t,e,f[r],f[n],!0),0<n.length)return!0;return!1}(s,c)&&!function(t,r){var n,o,a,s;for(n=0;n<d.length;n++)for(o=e[d[n]],a=0;a<o.length;a++)if(s=a+1,s%=o.length,s=i(t,r,o[a],o[s],!0),0<s.length)return!0;return!1}(s,c)){n=l,d.splice(v,1),h=f.slice(0,a+1),c=f.slice(a),l=r.slice(n),p=r.slice(0,n+1),f=h.concat(l).concat(p).concat(c),h=a;break}if(0<=n)break;m[u]=!0}if(0<=n)break}}return f}(t,e);var p=yi.triangulate(a,!1);for(a=0,s=p.length;a<s;a++)for(u=p[a],c=0;3>c;c++)h=u[c].x+":"+u[c].y,void 0!==(h=l[h])&&(u[c]=h);return p.concat()},isClockWise:function(t){return 0>yi.area(t)},b2:function(){return function(t,e,r,n){var i=1-t;return i*i*e+2*(1-t)*t*r+t*t*n}}(),b3:function(){return function(t,e,r,n,i){var o=1-t,a=1-t;return o*o*o*e+3*a*a*t*r+3*(1-t)*t*t*n+t*t*t*i}}()};Be.prototype=Object.create(xt.prototype),Be.prototype.constructor=Be,Be.prototype.addShapeList=function(t,e){for(var r=t.length,n=0;n<r;n++)this.addShape(t[n],e)},Be.prototype.addShape=function(t,e){function n(t,e,r){return e||console.error("THREE.ExtrudeGeometry: vec does not exist"),e.clone().multiplyScalar(r).add(t)}function i(t,e,n){var i,o,a;o=t.x-e.x,a=t.y-e.y,i=n.x-t.x;var s=n.y-t.y,c=o*o+a*a;if(Math.abs(o*s-a*i)>Number.EPSILON){var u=Math.sqrt(c),h=Math.sqrt(i*i+s*s),c=e.x-a/u;if(e=e.y+o/u,s=((n.x-s/h-c)*s-(n.y+i/h-e)*i)/(o*s-a*i),i=c+o*s-t.x,o=e+a*s-t.y,2>=(a=i*i+o*o))return new r(i,o);a=Math.sqrt(a/2)}else t=!1,o>Number.EPSILON?i>Number.EPSILON&&(t=!0):o<-Number.EPSILON?i<-Number.EPSILON&&(t=!0):Math.sign(a)===Math.sign(s)&&(t=!0),t?(i=-a,a=Math.sqrt(c)):(i=o,o=a,a=Math.sqrt(c/2));return new r(i/a,o/a)}function o(t,e){var r,n;for(B=t.length;0<=--B;){r=B,n=B-1,0>n&&(n=t.length-1);var i,o=_+2*g;for(i=0;i<o;i++){var a=F*i,s=F*(i+1),c=e+r+a,a=e+n+a,u=e+n+s,s=e+r+s,c=c+O,a=a+O,u=u+O,s=s+O;C.faces.push(new ct(c,a,s,null,null,1)),C.faces.push(new ct(a,u,s,null,null,1)),c=S.generateSideWallUV(C,c,a,u,s),C.faceVertexUvs[0].push([c[0],c[1],c[3]]),C.faceVertexUvs[0].push([c[1],c[2],c[3]])}}}function a(t,e,r){C.vertices.push(new c(t,e,r))}function s(t,e,r){t+=O,e+=O,r+=O,C.faces.push(new ct(t,e,r,null,null,0)),t=S.generateTopUV(C,t,e,r),C.faceVertexUvs[0].push(t)}var u,h,l,p,f,d=void 0!==e.amount?e.amount:100,m=void 0!==e.bevelThickness?e.bevelThickness:6,v=void 0!==e.bevelSize?e.bevelSize:m-2,g=void 0!==e.bevelSegments?e.bevelSegments:3,y=void 0===e.bevelEnabled||e.bevelEnabled,b=void 0!==e.curveSegments?e.curveSegments:12,_=void 0!==e.steps?e.steps:1,x=e.extrudePath,w=!1,S=void 0!==e.UVGenerator?e.UVGenerator:Be.WorldUVGenerator;x&&(u=x.getSpacedPoints(_),w=!0,y=!1,h=void 0!==e.frames?e.frames:x.computeFrenetFrames(_,!1),l=new c,p=new c,f=new c),y||(v=m=g=0);var M,E,T,C=this,O=this.vertices.length,x=t.extractPoints(b),b=x.shape,P=x.holes;if(x=!yi.isClockWise(b)){for(b=b.reverse(),E=0,T=P.length;E<T;E++)M=P[E],yi.isClockWise(M)&&(P[E]=M.reverse());x=!1}var A=yi.triangulateShape(b,P),j=b;for(E=0,T=P.length;E<T;E++)M=P[E],b=b.concat(M);var R,L,N,I,D,k,F=b.length,U=A.length,x=[],B=0;for(N=j.length,R=N-1,L=B+1;B<N;B++,R++,L++)R===N&&(R=0),L===N&&(L=0),x[B]=i(j[B],j[R],j[L]);var z,G=[],$=x.concat();for(E=0,T=P.length;E<T;E++){for(M=P[E],z=[],B=0,N=M.length,R=N-1,L=B+1;B<N;B++,R++,L++)R===N&&(R=0),L===N&&(L=0),z[B]=i(M[B],M[R],M[L]);G.push(z),$=$.concat(z)}for(R=0;R<g;R++){for(N=R/g,I=m*Math.cos(N*Math.PI/2),L=v*Math.sin(N*Math.PI/2),B=0,N=j.length;B<N;B++)D=n(j[B],x[B],L),a(D.x,D.y,-I);for(E=0,T=P.length;E<T;E++)for(M=P[E],z=G[E],B=0,N=M.length;B<N;B++)D=n(M[B],z[B],L),a(D.x,D.y,-I)}for(L=v,B=0;B<F;B++)D=y?n(b[B],$[B],L):b[B],w?(p.copy(h.normals[0]).multiplyScalar(D.x),l.copy(h.binormals[0]).multiplyScalar(D.y),f.copy(u[0]).add(p).add(l),a(f.x,f.y,f.z)):a(D.x,D.y,0);for(N=1;N<=_;N++)for(B=0;B<F;B++)D=y?n(b[B],$[B],L):b[B],w?(p.copy(h.normals[N]).multiplyScalar(D.x),l.copy(h.binormals[N]).multiplyScalar(D.y),f.copy(u[N]).add(p).add(l),a(f.x,f.y,f.z)):a(D.x,D.y,d/_*N);for(R=g-1;0<=R;R--){for(N=R/g,I=m*Math.cos(N*Math.PI/2),L=v*Math.sin(N*Math.PI/2),B=0,N=j.length;B<N;B++)D=n(j[B],x[B],L),a(D.x,D.y,d+I);for(E=0,T=P.length;E<T;E++)for(M=P[E],z=G[E],B=0,N=M.length;B<N;B++)D=n(M[B],z[B],L),w?a(D.x,D.y+u[_-1].y,u[_-1].x+I):a(D.x,D.y,d+I)}!function(){if(y){var t=0*F;for(B=0;B<U;B++)k=A[B],s(k[2]+t,k[1]+t,k[0]+t);for(t=F*(_+2*g),B=0;B<U;B++)k=A[B],s(k[0]+t,k[1]+t,k[2]+t)}else{for(B=0;B<U;B++)k=A[B],s(k[2],k[1],k[0]);for(B=0;B<U;B++)k=A[B],s(k[0]+F*_,k[1]+F*_,k[2]+F*_)}}(),function(){var t=0;for(o(j,t),t+=j.length,E=0,T=P.length;E<T;E++)M=P[E],o(M,t),t+=M.length}()},Be.WorldUVGenerator={generateTopUV:function(t,e,n,i){return t=t.vertices,e=t[e],n=t[n],i=t[i],[new r(e.x,e.y),new r(n.x,n.y),new r(i.x,i.y)]},generateSideWallUV:function(t,e,n,i,o){return t=t.vertices,e=t[e],n=t[n],i=t[i],o=t[o],.01>Math.abs(e.y-n.y)?[new r(e.x,1-e.z),new r(n.x,1-n.z),new r(i.x,1-i.z),new r(o.x,1-o.z)]:[new r(e.y,1-e.z),new r(n.y,1-n.z),new r(i.y,1-i.z),new r(o.y,1-o.z)]}},ze.prototype=Object.create(Be.prototype),ze.prototype.constructor=ze,Ge.prototype=Object.create(wt.prototype),Ge.prototype.constructor=Ge,$e.prototype=Object.create(xt.prototype),$e.prototype.constructor=$e,Ve.prototype=Object.create(wt.prototype),Ve.prototype.constructor=Ve,He.prototype=Object.create(xt.prototype),He.prototype.constructor=He,We.prototype=Object.create(xt.prototype),We.prototype.constructor=We,qe.prototype=Object.create(wt.prototype),qe.prototype.constructor=qe,Xe.prototype=Object.create(xt.prototype),Xe.prototype.constructor=Xe,Ye.prototype=Object.create(wt.prototype),Ye.prototype.constructor=Ye,Ke.prototype=Object.create(xt.prototype),Ke.prototype.constructor=Ke,Ze.prototype=Object.create(wt.prototype),Ze.prototype.constructor=Ze,Je.prototype=Object.create(wt.prototype),Je.prototype.constructor=Je,Qe.prototype=Object.create(xt.prototype),Qe.prototype.constructor=Qe,tr.prototype=Object.create(Qe.prototype),tr.prototype.constructor=tr,er.prototype=Object.create(Je.prototype),er.prototype.constructor=er,rr.prototype=Object.create(wt.prototype),rr.prototype.constructor=rr,nr.prototype=Object.create(xt.prototype),nr.prototype.constructor=nr,ir.prototype=Object.create(xt.prototype),ir.prototype.constructor=ir;var bi=Object.freeze({WireframeGeometry:xe,ParametricGeometry:Se,ParametricBufferGeometry:we,TetrahedronGeometry:Te,TetrahedronBufferGeometry:Ee,OctahedronGeometry:Oe,OctahedronBufferGeometry:Ce,IcosahedronGeometry:Ae,IcosahedronBufferGeometry:Pe,DodecahedronGeometry:Re,DodecahedronBufferGeometry:je,PolyhedronGeometry:Le,PolyhedronBufferGeometry:Me,TubeGeometry:Ie,TubeBufferGeometry:Ne,TorusKnotGeometry:ke,TorusKnotBufferGeometry:De,TorusGeometry:Ue,TorusBufferGeometry:Fe,TextGeometry:ze,SphereBufferGeometry:Ge,SphereGeometry:$e,RingGeometry:He,RingBufferGeometry:Ve,PlaneBufferGeometry:Et,PlaneGeometry:We,LatheGeometry:Xe,LatheBufferGeometry:qe,ShapeGeometry:Ke,ShapeBufferGeometry:Ye,ExtrudeGeometry:Be,EdgesGeometry:Ze,ConeGeometry:tr,ConeBufferGeometry:er,CylinderGeometry:Qe,CylinderBufferGeometry:Je,CircleBufferGeometry:rr,CircleGeometry:nr,BoxBufferGeometry:Mt,BoxGeometry:ir});or.prototype=Object.create(X.prototype),or.prototype.constructor=or,or.prototype.isShadowMaterial=!0,ar.prototype=Object.create(X.prototype),ar.prototype.constructor=ar,ar.prototype.isRawShaderMaterial=!0,sr.prototype={constructor:sr,isMultiMaterial:!0,toJSON:function(t){for(var e={metadata:{version:4.2,type:"material",generator:"MaterialExporter"},uuid:this.uuid,type:this.type,materials:[]},r=this.materials,n=0,i=r.length;n<i;n++){var o=r[n].toJSON(t);delete o.metadata,e.materials.push(o)}return e.visible=this.visible,e},clone:function(){for(var t=new this.constructor,e=0;e<this.materials.length;e++)t.materials.push(this.materials[e].clone());return t.visible=this.visible,t}},cr.prototype=Object.create(q.prototype),cr.prototype.constructor=cr,cr.prototype.isMeshStandardMaterial=!0,cr.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.defines={STANDARD:""},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapIntensity=t.envMapIntensity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},ur.prototype=Object.create(cr.prototype),ur.prototype.constructor=ur,ur.prototype.isMeshPhysicalMaterial=!0,ur.prototype.copy=function(t){return cr.prototype.copy.call(this,t),this.defines={PHYSICAL:""},this.reflectivity=t.reflectivity,this.clearCoat=t.clearCoat,this.clearCoatRoughness=t.clearCoatRoughness,this},hr.prototype=Object.create(q.prototype),hr.prototype.constructor=hr,hr.prototype.isMeshPhongMaterial=!0,hr.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},lr.prototype=Object.create(hr.prototype),lr.prototype.constructor=lr,lr.prototype.isMeshToonMaterial=!0,lr.prototype.copy=function(t){return hr.prototype.copy.call(this,t),this.gradientMap=t.gradientMap,this},pr.prototype=Object.create(q.prototype),pr.prototype.constructor=pr,pr.prototype.isMeshNormalMaterial=!0,pr.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},fr.prototype=Object.create(q.prototype),fr.prototype.constructor=fr,fr.prototype.isMeshLambertMaterial=!0,fr.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},dr.prototype=Object.create(q.prototype),dr.prototype.constructor=dr,dr.prototype.isLineDashedMaterial=!0,dr.prototype.copy=function(t){return q.prototype.copy.call(this,t),this.color.copy(t.color),this.linewidth=t.linewidth,this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this};var _i=Object.freeze({ShadowMaterial:or,SpriteMaterial:oe,RawShaderMaterial:ar,ShaderMaterial:X,PointsMaterial:de,MultiMaterial:sr,MeshPhysicalMaterial:ur,MeshStandardMaterial:cr,MeshPhongMaterial:hr,MeshToonMaterial:lr,MeshNormalMaterial:pr,MeshLambertMaterial:fr,MeshDepthMaterial:Y,MeshBasicMaterial:ut,LineDashedMaterial:dr,LineBasicMaterial:le,Material:q}),xi={enabled:!1,files:{},add:function(t,e){!1!==this.enabled&&(this.files[t]=e)},get:function(t){if(!1!==this.enabled)return this.files[t]},remove:function(t){delete this.files[t]},clear:function(){this.files={}}},wi=new mr;Object.assign(vr.prototype,{load:function(t,e,r,n){void 0===t&&(t=""),void 0!==this.path&&(t=this.path+t);var i=this,o=xi.get(t);if(void 0!==o)return i.manager.itemStart(t),setTimeout(function(){e&&e(o),i.manager.itemEnd(t)},0),o;var a=t.match(/^data:(.*?)(;base64)?,(.*)$/);if(a){var s=a[1],c=!!a[2],a=a[3],a=window.decodeURIComponent(a);c&&(a=window.atob(a));try{var u,h=(this.responseType||"").toLowerCase();switch(h){case"arraybuffer":case"blob":u=new ArrayBuffer(a.length);for(var l=new Uint8Array(u),c=0;c<a.length;c++)l[c]=a.charCodeAt(c);"blob"===h&&(u=new Blob([u],{type:s}));break;case"document":u=(new DOMParser).parseFromString(a,s);break;case"json":u=JSON.parse(a);break;default:u=a}window.setTimeout(function(){e&&e(u),i.manager.itemEnd(t)},0)}catch(e){window.setTimeout(function(){n&&n(e),i.manager.itemError(t)},0)}}else{var p=new XMLHttpRequest;p.open("GET",t,!0),p.addEventListener("load",function(r){var o=r.target.response;xi.add(t,o),200===this.status?(e&&e(o),i.manager.itemEnd(t)):0===this.status?(console.warn("THREE.FileLoader: HTTP Status 0 received."),e&&e(o),i.manager.itemEnd(t)):(n&&n(r),i.manager.itemError(t))},!1),void 0!==r&&p.addEventListener("progress",function(t){r(t)},!1),p.addEventListener("error",function(e){n&&n(e),i.manager.itemError(t)},!1),void 0!==this.responseType&&(p.responseType=this.responseType),void 0!==this.withCredentials&&(p.withCredentials=this.withCredentials),p.overrideMimeType&&p.overrideMimeType(void 0!==this.mimeType?this.mimeType:"text/plain"),p.send(null)}return i.manager.itemStart(t),p},setPath:function(t){return this.path=t,this},setResponseType:function(t){return this.responseType=t,this},setWithCredentials:function(t){return this.withCredentials=t,this},setMimeType:function(t){return this.mimeType=t,this}}),Object.assign(gr.prototype,{load:function(t,e,r,n){var i=this,o=[],a=new ye;a.image=o;var s=new vr(this.manager);if(s.setPath(this.path),s.setResponseType("arraybuffer"),Array.isArray(t))for(var c=0,u=0,h=t.length;u<h;++u)!function(u){s.load(t[u],function(t){t=i._parser(t,!0),o[u]={width:t.width,height:t.height,format:t.format,mipmaps:t.mipmaps},6===(c+=1)&&(1===t.mipmapCount&&(a.minFilter=1006),a.format=t.format,a.needsUpdate=!0,e&&e(a))},r,n)}(u);else s.load(t,function(t){if(t=i._parser(t,!0),t.isCubemap)for(var r=t.mipmaps.length/t.mipmapCount,n=0;n<r;n++){o[n]={mipmaps:[]};for(var s=0;s<t.mipmapCount;s++)o[n].mipmaps.push(t.mipmaps[n*t.mipmapCount+s]),o[n].format=t.format,o[n].width=t.width,o[n].height=t.height}else a.image.width=t.width,a.image.height=t.height,a.mipmaps=t.mipmaps;1===t.mipmapCount&&(a.minFilter=1006),a.format=t.format,a.needsUpdate=!0,e&&e(a)},r,n);return a},setPath:function(t){return this.path=t,this}}),Object.assign(yr.prototype,{load:function(t,e,r,n){var i=this,o=new $,a=new vr(this.manager);return a.setResponseType("arraybuffer"),a.load(t,function(t){(t=i._parser(t))&&(void 0!==t.image?o.image=t.image:void 0!==t.data&&(o.image.width=t.width,o.image.height=t.height,o.image.data=t.data),o.wrapS=void 0!==t.wrapS?t.wrapS:1001,o.wrapT=void 0!==t.wrapT?t.wrapT:1001,o.magFilter=void 0!==t.magFilter?t.magFilter:1006,o.minFilter=void 0!==t.minFilter?t.minFilter:1008,o.anisotropy=void 0!==t.anisotropy?t.anisotropy:1,void 0!==t.format&&(o.format=t.format),void 0!==t.type&&(o.type=t.type),void 0!==t.mipmaps&&(o.mipmaps=t.mipmaps),1===t.mipmapCount&&(o.minFilter=1006),o.needsUpdate=!0,e&&e(o,t))},r,n),o}}),Object.assign(br.prototype,{load:function(t,e,r,n){var i=this,o=document.createElementNS("http://www.w3.org/1999/xhtml","img");if(o.onload=function(){o.onload=null,URL.revokeObjectURL(o.src),e&&e(o),i.manager.itemEnd(t)},o.onerror=n,0===t.indexOf("data:"))o.src=t;else if(void 0!==this.crossOrigin)o.crossOrigin=this.crossOrigin,o.src=t;else{var a=new vr;a.setPath(this.path),a.setResponseType("blob"),a.setWithCredentials(this.withCredentials),a.load(t,function(t){o.src=URL.createObjectURL(t)},r,n)}return i.manager.itemStart(t),o},setCrossOrigin:function(t){return this.crossOrigin=t,this},setWithCredentials:function(t){return this.withCredentials=t,this},setPath:function(t){return this.path=t,this}}),Object.assign(_r.prototype,{load:function(t,e,r,n){var i=new h,o=new br(this.manager);o.setCrossOrigin(this.crossOrigin),o.setPath(this.path);var a=0;for(r=0;r<t.length;++r)!function(r){o.load(t[r],function(t){i.images[r]=t,6==++a&&(i.needsUpdate=!0,e&&e(i))},void 0,n)}(r);return i},setCrossOrigin:function(t){return this.crossOrigin=t,this},setPath:function(t){return this.path=t,this}}),Object.assign(xr.prototype,{load:function(t,e,r,i){var o=new n,a=new br(this.manager);return a.setCrossOrigin(this.crossOrigin),a.setWithCredentials(this.withCredentials),a.setPath(this.path),a.load(t,function(r){var n=0<t.search(/\.(jpg|jpeg)$/)||0===t.search(/^data\:image\/jpeg/);o.format=n?1022:1023,o.image=r,o.needsUpdate=!0,void 0!==e&&e(o)},r,i),o},setCrossOrigin:function(t){return this.crossOrigin=t,this},setWithCredentials:function(t){return this.withCredentials=t,this},setPath:function(t){return this.path=t,this}}),wr.prototype=Object.assign(Object.create(ot.prototype),{constructor:wr,isLight:!0,copy:function(t){return ot.prototype.copy.call(this,t),this.color.copy(t.color),this.intensity=t.intensity,this},toJSON:function(t){return t=ot.prototype.toJSON.call(this,t),t.object.color=this.color.getHex(),t.object.intensity=this.intensity,void 0!==this.groundColor&&(t.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(t.object.distance=this.distance),void 0!==this.angle&&(t.object.angle=this.angle),void 0!==this.decay&&(t.object.decay=this.decay),void 0!==this.penumbra&&(t.object.penumbra=this.penumbra),void 0!==this.shadow&&(t.object.shadow=this.shadow.toJSON()),t}}),Sr.prototype=Object.assign(Object.create(wr.prototype),{constructor:Sr,isHemisphereLight:!0,copy:function(t){return wr.prototype.copy.call(this,t),this.groundColor.copy(t.groundColor),this}}),Object.assign(Mr.prototype,{copy:function(t){return this.camera=t.camera.clone(),this.bias=t.bias,this.radius=t.radius,this.mapSize.copy(t.mapSize),this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var t={};return 0!==this.bias&&(t.bias=this.bias),1!==this.radius&&(t.radius=this.radius),512===this.mapSize.x&&512===this.mapSize.y||(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}),Er.prototype=Object.assign(Object.create(Mr.prototype),{constructor:Er,isSpotLightShadow:!0,update:function(t){var e=2*ri.RAD2DEG*t.angle,r=this.mapSize.width/this.mapSize.height;t=t.distance||500;var n=this.camera;e===n.fov&&r===n.aspect&&t===n.far||(n.fov=e,n.aspect=r,n.far=t,n.updateProjectionMatrix())}}),Tr.prototype=Object.assign(Object.create(wr.prototype),{constructor:Tr,isSpotLight:!0,copy:function(t){return wr.prototype.copy.call(this,t),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}),Cr.prototype=Object.assign(Object.create(wr.prototype),{constructor:Cr,isPointLight:!0,copy:function(t){return wr.prototype.copy.call(this,t),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}),Or.prototype=Object.assign(Object.create(Mr.prototype),{constructor:Or}),Pr.prototype=Object.assign(Object.create(wr.prototype),{constructor:Pr,isDirectionalLight:!0,copy:function(t){return wr.prototype.copy.call(this,t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}),Ar.prototype=Object.assign(Object.create(wr.prototype),{constructor:Ar,isAmbientLight:!0});var Si={arraySlice:function(t,e,r){return Si.isTypedArray(t)?new t.constructor(t.subarray(e,r)):t.slice(e,r)},convertArray:function(t,e,r){return!t||!r&&t.constructor===e?t:"number"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)},getKeyframeOrder:function(t){for(var e=t.length,r=Array(e),n=0;n!==e;++n)r[n]=n;return r.sort(function(e,r){return t[e]-t[r]}),r},sortedArray:function(t,e,r){for(var n=t.length,i=new t.constructor(n),o=0,a=0;a!==n;++o)for(var s=r[o]*e,c=0;c!==e;++c)i[a++]=t[s+c];return i},flattenJSON:function(t,e,r,n){for(var i=1,o=t[0];void 0!==o&&void 0===o[n];)o=t[i++];if(void 0!==o){var a=o[n];if(void 0!==a)if(Array.isArray(a))do{a=o[n],void 0!==a&&(e.push(o.time),r.push.apply(r,a)),o=t[i++]}while(void 0!==o);else if(void 0!==a.toArray)do{a=o[n],void 0!==a&&(e.push(o.time),a.toArray(r,r.length)),o=t[i++]}while(void 0!==o);else do{a=o[n],void 0!==a&&(e.push(o.time),r.push(a)),o=t[i++]}while(void 0!==o)}}};jr.prototype={constructor:jr,evaluate:function(t){var e=this.parameterPositions,r=this._cachedIndex,n=e[r],i=e[r-1];t:{e:{r:{n:if(!(t<n)){for(var o=r+2;;){if(void 0===n){if(t<i)break n;return this._cachedIndex=r=e.length,this.afterEnd_(r-1,t,i)}if(r===o)break;if(i=n,n=e[++r],t<n)break e}n=e.length;break r}if(t>=i)break t;for(o=e[1],t<o&&(r=2,i=o),o=r-2;;){if(void 0===i)return this._cachedIndex=0,this.beforeStart_(0,t,n);if(r===o)break;if(n=i,i=e[--r-1],t>=i)break e}n=r,r=0}for(;r<n;)i=r+n>>>1,t<e[i]?n=i:r=i+1;if(n=e[r],void 0===(i=e[r-1]))return this._cachedIndex=0,this.beforeStart_(0,t,n);if(void 0===n)return this._cachedIndex=r=e.length,this.afterEnd_(r-1,i,t)}this._cachedIndex=r,this.intervalChanged_(r,i,n)}return this.interpolate_(r,i,t,n)},settings:null,DefaultSettings_:{},getSettings_:function(){return this.settings||this.DefaultSettings_},copySampleValue_:function(t){var e=this.resultBuffer,r=this.sampleValues,n=this.valueSize;t*=n;for(var i=0;i!==n;++i)e[i]=r[t+i];return e},interpolate_:function(t,e,r,n){throw Error("call to abstract method")},intervalChanged_:function(t,e,r){}},Object.assign(jr.prototype,{beforeStart_:jr.prototype.copySampleValue_,afterEnd_:jr.prototype.copySampleValue_}),Rr.prototype=Object.assign(Object.create(jr.prototype),{constructor:Rr,DefaultSettings_:{endingStart:2400,endingEnd:2400},intervalChanged_:function(t,e,r){var n=this.parameterPositions,i=t-2,o=t+1,a=n[i],s=n[o];if(void 0===a)switch(this.getSettings_().endingStart){case 2401:i=t,a=2*e-r;break;case 2402:i=n.length-2,a=e+n[i]-n[i+1];break;default:i=t,a=r}if(void 0===s)switch(this.getSettings_().endingEnd){case 2401:o=t,s=2*r-e;break;case 2402:o=1,s=r+n[1]-n[0];break;default:o=t-1,s=e}t=.5*(r-e),n=this.valueSize,this._weightPrev=t/(e-a),this._weightNext=t/(s-r),this._offsetPrev=i*n,this._offsetNext=o*n},interpolate_:function(t,e,r,n){var i=this.resultBuffer,o=this.sampleValues,a=this.valueSize;t*=a;var s=t-a,c=this._offsetPrev,u=this._offsetNext,h=this._weightPrev,l=this._weightNext,p=(r-e)/(n-e);for(r=p*p,n=r*p,e=-h*n+2*h*r-h*p,h=(1+h)*n+(-1.5-2*h)*r+(-.5+h)*p+1,p=(-1-l)*n+(1.5+l)*r+.5*p,l=l*n-l*r,r=0;r!==a;++r)i[r]=e*o[c+r]+h*o[s+r]+p*o[t+r]+l*o[u+r];return i}}),Lr.prototype=Object.assign(Object.create(jr.prototype),{constructor:Lr,interpolate_:function(t,e,r,n){var i=this.resultBuffer,o=this.sampleValues,a=this.valueSize;t*=a;var s=t-a;for(e=(r-e)/(n-e),r=1-e,n=0;n!==a;++n)i[n]=o[s+n]*r+o[t+n]*e;return i}}),Nr.prototype=Object.assign(Object.create(jr.prototype),{constructor:Nr,interpolate_:function(t,e,r,n){return this.copySampleValue_(t-1)}});var Mi;Mi={TimeBufferType:Float32Array,ValueBufferType:Float32Array,DefaultInterpolation:2301,InterpolantFactoryMethodDiscrete:function(t){return new Nr(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodLinear:function(t){return new Lr(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:function(t){return new Rr(this.times,this.values,this.getValueSize(),t)},setInterpolation:function(t){var e;switch(t){case 2300:e=this.InterpolantFactoryMethodDiscrete;break;case 2301:e=this.InterpolantFactoryMethodLinear;break;case 2302:e=this.InterpolantFactoryMethodSmooth}if(void 0===e){if(e="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name,void 0===this.createInterpolant){if(t===this.DefaultInterpolation)throw Error(e);this.setInterpolation(this.DefaultInterpolation)}console.warn(e)}else this.createInterpolant=e},getInterpolation:function(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return 2300;case this.InterpolantFactoryMethodLinear:return 2301;case this.InterpolantFactoryMethodSmooth:return 2302}},getValueSize:function(){return this.values.length/this.times.length},shift:function(t){if(0!==t)for(var e=this.times,r=0,n=e.length;r!==n;++r)e[r]+=t;return this},scale:function(t){if(1!==t)for(var e=this.times,r=0,n=e.length;r!==n;++r)e[r]*=t;return this},trim:function(t,e){for(var r=this.times,n=r.length,i=0,o=n-1;i!==n&&r[i]<t;)++i;for(;-1!==o&&r[o]>e;)--o;return++o,0===i&&o===n||(i>=o&&(o=Math.max(o,1),i=o-1),n=this.getValueSize(),this.times=Si.arraySlice(r,i,o),this.values=Si.arraySlice(this.values,i*n,o*n)),this},validate:function(){var t=!0,e=this.getValueSize();0!=e-Math.floor(e)&&(console.error("invalid value size in track",this),t=!1);var r=this.times,e=this.values,n=r.length;0===n&&(console.error("track is empty",this),t=!1);for(var i=null,o=0;o!==n;o++){var a=r[o];if("number"==typeof a&&isNaN(a)){console.error("time is not a valid number",this,o,a),t=!1;break}if(null!==i&&i>a){console.error("out of order keys",this,o,a,i),t=!1;break}i=a}if(void 0!==e&&Si.isTypedArray(e))for(o=0,r=e.length;o!==r;++o)if(n=e[o],isNaN(n)){console.error("value is not a valid number",this,o,n),t=!1;break}return t},optimize:function(){for(var t=this.times,e=this.values,r=this.getValueSize(),n=2302===this.getInterpolation(),i=1,o=t.length-1,a=1;a<o;++a){var s=!1,c=t[a];if(c!==t[a+1]&&(1!==a||c!==c[0]))if(n)s=!0;else for(var u=a*r,h=u-r,l=u+r,c=0;c!==r;++c){var p=e[u+c];if(p!==e[h+c]||p!==e[l+c]){s=!0;break}}if(s){if(a!==i)for(t[i]=t[a],s=a*r,u=i*r,c=0;c!==r;++c)e[u+c]=e[s+c];++i}}if(0<o){for(t[i]=t[o],s=o*r,u=i*r,c=0;c!==r;++c)e[u+c]=e[s+c];++i}return i!==t.length&&(this.times=Si.arraySlice(t,0,i),this.values=Si.arraySlice(e,0,i*r)),this}},Dr.prototype=Object.assign(Object.create(Mi),{constructor:Dr,ValueTypeName:"vector"}),kr.prototype=Object.assign(Object.create(jr.prototype),{constructor:kr,interpolate_:function(t,e,r,n){var i=this.resultBuffer,o=this.sampleValues,a=this.valueSize;for(t*=a,e=(r-e)/(n-e),r=t+a;t!==r;t+=4)s.slerpFlat(i,0,o,t-a,o,t,e);return i}}),Fr.prototype=Object.assign(Object.create(Mi),{constructor:Fr,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(t){return new kr(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),Ur.prototype=Object.assign(Object.create(Mi),{constructor:Ur,ValueTypeName:"number"}),Br.prototype=Object.assign(Object.create(Mi),{constructor:Br,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),zr.prototype=Object.assign(Object.create(Mi),{constructor:zr,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),Gr.prototype=Object.assign(Object.create(Mi),{constructor:Gr,ValueTypeName:"color"}),$r.prototype=Mi,Mi.constructor=$r,Object.assign($r,{parse:function(t){if(void 0===t.type)throw Error("track type undefined, can not parse");var e=$r._getTrackTypeForValueTypeName(t.type);if(void 0===t.times){var r=[],n=[];Si.flattenJSON(t.keys,r,n,"value"),t.times=r,t.values=n}return void 0!==e.parse?e.parse(t):new e(t.name,t.times,t.values,t.interpolation)},toJSON:function(t){var e=t.constructor;if(void 0!==e.toJSON)e=e.toJSON(t);else{var e={name:t.name,times:Si.convertArray(t.times,Array),values:Si.convertArray(t.values,Array)},r=t.getInterpolation();r!==t.DefaultInterpolation&&(e.interpolation=r)}return e.type=t.ValueTypeName,e},_getTrackTypeForValueTypeName:function(t){switch(t.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return Ur;case"vector":case"vector2":case"vector3":case"vector4":return Dr;case"color":return Gr;case"quaternion":return Fr;case"bool":case"boolean":return zr;case"string":return Br}throw Error("Unsupported typeName: "+t)}}),Vr.prototype={constructor:Vr,resetDuration:function(){for(var t=0,e=0,r=this.tracks.length;e!==r;++e)var n=this.tracks[e],t=Math.max(t,n.times[n.times.length-1]);this.duration=t},trim:function(){for(var t=0;t<this.tracks.length;t++)this.tracks[t].trim(0,this.duration);return this},optimize:function(){for(var t=0;t<this.tracks.length;t++)this.tracks[t].optimize();return this}},Object.assign(Vr,{parse:function(t){for(var e=[],r=t.tracks,n=1/(t.fps||1),i=0,o=r.length;i!==o;++i)e.push($r.parse(r[i]).scale(n));return new Vr(t.name,t.duration,e)},toJSON:function(t){var e=[],r=t.tracks;t={name:t.name,duration:t.duration,tracks:e};for(var n=0,i=r.length;n!==i;++n)e.push($r.toJSON(r[n]));return t},CreateFromMorphTargetSequence:function(t,e,r,n){for(var i=e.length,o=[],a=0;a<i;a++){var s=[],c=[];s.push((a+i-1)%i,a,(a+1)%i),c.push(0,1,0);var u=Si.getKeyframeOrder(s),s=Si.sortedArray(s,1,u),c=Si.sortedArray(c,1,u);n||0!==s[0]||(s.push(i),c.push(c[0])),o.push(new Ur(".morphTargetInfluences["+e[a].name+"]",s,c).scale(1/r))}return new Vr(t,-1,o)},findByName:function(t,e){var r=t;Array.isArray(t)||(r=t.geometry&&t.geometry.animations||t.animations);for(var n=0;n<r.length;n++)if(r[n].name===e)return r[n];return null},CreateClipsFromMorphTargetSequences:function(t,e,r){for(var n={},i=/^([\w-]*?)([\d]+)$/,o=0,a=t.length;o<a;o++){var s=t[o],c=s.name.match(i);if(c&&1<c.length){var u=c[1];(c=n[u])||(n[u]=c=[]),c.push(s)}}t=[];for(u in n)t.push(Vr.CreateFromMorphTargetSequence(u,n[u],e,r));return t},parseAnimation:function(t,e){if(!t)return console.error("  no animation in JSONLoader data"),null;for(var r=function(t,e,r,n,i){if(0!==r.length){var o=[],a=[];Si.flattenJSON(r,o,a,n),0!==o.length&&i.push(new t(e,o,a))}},n=[],i=t.name||"default",o=t.length||-1,a=t.fps||30,s=t.hierarchy||[],c=0;c<s.length;c++){var u=s[c].keys;if(u&&0!==u.length)if(u[0].morphTargets){
+for(var o={},h=0;h<u.length;h++)if(u[h].morphTargets)for(var l=0;l<u[h].morphTargets.length;l++)o[u[h].morphTargets[l]]=-1;for(var p in o){for(var f=[],d=[],l=0;l!==u[h].morphTargets.length;++l){var m=u[h];f.push(m.time),d.push(m.morphTarget===p?1:0)}n.push(new Ur(".morphTargetInfluence["+p+"]",f,d))}o=o.length*(a||1)}else h=".bones["+e[c].name+"]",r(Dr,h+".position",u,"pos",n),r(Fr,h+".quaternion",u,"rot",n),r(Dr,h+".scale",u,"scl",n)}return 0===n.length?null:new Vr(i,o,n)}}),Object.assign(Hr.prototype,{load:function(t,e,r,n){var i=this;new vr(i.manager).load(t,function(t){e(i.parse(JSON.parse(t)))},r,n)},setTextures:function(t){this.textures=t},parse:function(t){function e(t){return void 0===n[t]&&console.warn("THREE.MaterialLoader: Undefined texture",t),n[t]}var n=this.textures,i=new _i[t.type];if(void 0!==t.uuid&&(i.uuid=t.uuid),void 0!==t.name&&(i.name=t.name),void 0!==t.color&&i.color.setHex(t.color),void 0!==t.roughness&&(i.roughness=t.roughness),void 0!==t.metalness&&(i.metalness=t.metalness),void 0!==t.emissive&&i.emissive.setHex(t.emissive),void 0!==t.specular&&i.specular.setHex(t.specular),void 0!==t.shininess&&(i.shininess=t.shininess),void 0!==t.clearCoat&&(i.clearCoat=t.clearCoat),void 0!==t.clearCoatRoughness&&(i.clearCoatRoughness=t.clearCoatRoughness),void 0!==t.uniforms&&(i.uniforms=t.uniforms),void 0!==t.vertexShader&&(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(i.fragmentShader=t.fragmentShader),void 0!==t.vertexColors&&(i.vertexColors=t.vertexColors),void 0!==t.fog&&(i.fog=t.fog),void 0!==t.shading&&(i.shading=t.shading),void 0!==t.blending&&(i.blending=t.blending),void 0!==t.side&&(i.side=t.side),void 0!==t.opacity&&(i.opacity=t.opacity),void 0!==t.transparent&&(i.transparent=t.transparent),void 0!==t.alphaTest&&(i.alphaTest=t.alphaTest),void 0!==t.depthTest&&(i.depthTest=t.depthTest),void 0!==t.depthWrite&&(i.depthWrite=t.depthWrite),void 0!==t.colorWrite&&(i.colorWrite=t.colorWrite),void 0!==t.wireframe&&(i.wireframe=t.wireframe),void 0!==t.wireframeLinewidth&&(i.wireframeLinewidth=t.wireframeLinewidth),void 0!==t.wireframeLinecap&&(i.wireframeLinecap=t.wireframeLinecap),void 0!==t.wireframeLinejoin&&(i.wireframeLinejoin=t.wireframeLinejoin),void 0!==t.skinning&&(i.skinning=t.skinning),void 0!==t.morphTargets&&(i.morphTargets=t.morphTargets),void 0!==t.size&&(i.size=t.size),void 0!==t.sizeAttenuation&&(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(i.map=e(t.map)),void 0!==t.alphaMap&&(i.alphaMap=e(t.alphaMap),i.transparent=!0),void 0!==t.bumpMap&&(i.bumpMap=e(t.bumpMap)),void 0!==t.bumpScale&&(i.bumpScale=t.bumpScale),void 0!==t.normalMap&&(i.normalMap=e(t.normalMap)),void 0!==t.normalScale){var o=t.normalScale;!1===Array.isArray(o)&&(o=[o,o]),i.normalScale=(new r).fromArray(o)}if(void 0!==t.displacementMap&&(i.displacementMap=e(t.displacementMap)),void 0!==t.displacementScale&&(i.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(i.roughnessMap=e(t.roughnessMap)),void 0!==t.metalnessMap&&(i.metalnessMap=e(t.metalnessMap)),void 0!==t.emissiveMap&&(i.emissiveMap=e(t.emissiveMap)),void 0!==t.emissiveIntensity&&(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(i.specularMap=e(t.specularMap)),void 0!==t.envMap&&(i.envMap=e(t.envMap)),void 0!==t.reflectivity&&(i.reflectivity=t.reflectivity),void 0!==t.lightMap&&(i.lightMap=e(t.lightMap)),void 0!==t.lightMapIntensity&&(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(i.aoMap=e(t.aoMap)),void 0!==t.aoMapIntensity&&(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(i.gradientMap=e(t.gradientMap)),void 0!==t.materials)for(var o=0,a=t.materials.length;o<a;o++)i.materials.push(this.parse(t.materials[o]));return i}}),Object.assign(Wr.prototype,{load:function(t,e,r,n){var i=this;new vr(i.manager).load(t,function(t){e(i.parse(JSON.parse(t)))},r,n)},parse:function(t){var e=new wt,r=t.data.index,n={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};void 0!==r&&(r=new n[r.type](r.array),e.setIndex(new ht(r,1)));var i,o=t.data.attributes;for(i in o){var a=o[i],r=new n[a.type](a.array);e.addAttribute(i,new ht(r,a.itemSize,a.normalized))}if(void 0!==(n=t.data.groups||t.data.drawcalls||t.data.offsets))for(i=0,r=n.length;i!==r;++i)o=n[i],e.addGroup(o.start,o.count,o.materialIndex);return t=t.data.boundingSphere,void 0!==t&&(n=new c,void 0!==t.center&&n.fromArray(t.center),e.boundingSphere=new Z(n,t.radius)),e}}),qr.prototype={constructor:qr,crossOrigin:void 0,extractUrlBase:function(t){return t=t.split("/"),1===t.length?"./":(t.pop(),t.join("/")+"/")},initMaterials:function(t,e,r){for(var n=[],i=0;i<t.length;++i)n[i]=this.createMaterial(t[i],e,r);return n},createMaterial:function(){var t,e,r;return function(n,i,o){function a(t,r,n,a,s){t=i+t;var u=qr.Handlers.get(t);return null!==u?t=u.load(t):(e.setCrossOrigin(o),t=e.load(t)),void 0!==r&&(t.repeat.fromArray(r),1!==r[0]&&(t.wrapS=1e3),1!==r[1]&&(t.wrapT=1e3)),void 0!==n&&t.offset.fromArray(n),void 0!==a&&("repeat"===a[0]&&(t.wrapS=1e3),"mirror"===a[0]&&(t.wrapS=1002),"repeat"===a[1]&&(t.wrapT=1e3),"mirror"===a[1]&&(t.wrapT=1002)),void 0!==s&&(t.anisotropy=s),r=ri.generateUUID(),c[r]=t,r}void 0===t&&(t=new G),void 0===e&&(e=new xr),void 0===r&&(r=new Hr);var s,c={},u={uuid:ri.generateUUID(),type:"MeshLambertMaterial"};for(s in n){var h=n[s];switch(s){case"DbgColor":case"DbgIndex":case"opticalDensity":case"illumination":break;case"DbgName":u.name=h;break;case"blending":u.blending=Jn[h];break;case"colorAmbient":case"mapAmbient":console.warn("THREE.Loader.createMaterial:",s,"is no longer supported.");break;case"colorDiffuse":u.color=t.fromArray(h).getHex();break;case"colorSpecular":u.specular=t.fromArray(h).getHex();break;case"colorEmissive":u.emissive=t.fromArray(h).getHex();break;case"specularCoef":u.shininess=h;break;case"shading":"basic"===h.toLowerCase()&&(u.type="MeshBasicMaterial"),"phong"===h.toLowerCase()&&(u.type="MeshPhongMaterial"),"standard"===h.toLowerCase()&&(u.type="MeshStandardMaterial");break;case"mapDiffuse":u.map=a(h,n.mapDiffuseRepeat,n.mapDiffuseOffset,n.mapDiffuseWrap,n.mapDiffuseAnisotropy);break;case"mapDiffuseRepeat":case"mapDiffuseOffset":case"mapDiffuseWrap":case"mapDiffuseAnisotropy":break;case"mapEmissive":u.emissiveMap=a(h,n.mapEmissiveRepeat,n.mapEmissiveOffset,n.mapEmissiveWrap,n.mapEmissiveAnisotropy);break;case"mapEmissiveRepeat":case"mapEmissiveOffset":case"mapEmissiveWrap":case"mapEmissiveAnisotropy":break;case"mapLight":u.lightMap=a(h,n.mapLightRepeat,n.mapLightOffset,n.mapLightWrap,n.mapLightAnisotropy);break;case"mapLightRepeat":case"mapLightOffset":case"mapLightWrap":case"mapLightAnisotropy":break;case"mapAO":u.aoMap=a(h,n.mapAORepeat,n.mapAOOffset,n.mapAOWrap,n.mapAOAnisotropy);break;case"mapAORepeat":case"mapAOOffset":case"mapAOWrap":case"mapAOAnisotropy":break;case"mapBump":u.bumpMap=a(h,n.mapBumpRepeat,n.mapBumpOffset,n.mapBumpWrap,n.mapBumpAnisotropy);break;case"mapBumpScale":u.bumpScale=h;break;case"mapBumpRepeat":case"mapBumpOffset":case"mapBumpWrap":case"mapBumpAnisotropy":break;case"mapNormal":u.normalMap=a(h,n.mapNormalRepeat,n.mapNormalOffset,n.mapNormalWrap,n.mapNormalAnisotropy);break;case"mapNormalFactor":u.normalScale=[h,h];break;case"mapNormalRepeat":case"mapNormalOffset":case"mapNormalWrap":case"mapNormalAnisotropy":break;case"mapSpecular":u.specularMap=a(h,n.mapSpecularRepeat,n.mapSpecularOffset,n.mapSpecularWrap,n.mapSpecularAnisotropy);break;case"mapSpecularRepeat":case"mapSpecularOffset":case"mapSpecularWrap":case"mapSpecularAnisotropy":break;case"mapMetalness":u.metalnessMap=a(h,n.mapMetalnessRepeat,n.mapMetalnessOffset,n.mapMetalnessWrap,n.mapMetalnessAnisotropy);break;case"mapMetalnessRepeat":case"mapMetalnessOffset":case"mapMetalnessWrap":case"mapMetalnessAnisotropy":break;case"mapRoughness":u.roughnessMap=a(h,n.mapRoughnessRepeat,n.mapRoughnessOffset,n.mapRoughnessWrap,n.mapRoughnessAnisotropy);break;case"mapRoughnessRepeat":case"mapRoughnessOffset":case"mapRoughnessWrap":case"mapRoughnessAnisotropy":break;case"mapAlpha":u.alphaMap=a(h,n.mapAlphaRepeat,n.mapAlphaOffset,n.mapAlphaWrap,n.mapAlphaAnisotropy);break;case"mapAlphaRepeat":case"mapAlphaOffset":case"mapAlphaWrap":case"mapAlphaAnisotropy":break;case"flipSided":u.side=1;break;case"doubleSided":u.side=2;break;case"transparency":console.warn("THREE.Loader.createMaterial: transparency has been renamed to opacity"),u.opacity=h;break;case"depthTest":case"depthWrite":case"colorWrite":case"opacity":case"reflectivity":case"transparent":case"visible":case"wireframe":u[s]=h;break;case"vertexColors":!0===h&&(u.vertexColors=2),"face"===h&&(u.vertexColors=1);break;default:console.error("THREE.Loader.createMaterial: Unsupported",s,h)}}return"MeshBasicMaterial"===u.type&&delete u.emissive,"MeshPhongMaterial"!==u.type&&delete u.specular,1>u.opacity&&(u.transparent=!0),r.setTextures(c),r.parse(u)}}()},qr.Handlers={handlers:[],add:function(t,e){this.handlers.push(t,e)},get:function(t){for(var e=this.handlers,r=0,n=e.length;r<n;r+=2){var i=e[r+1];if(e[r].test(t))return i}return null}},Object.assign(Xr.prototype,{load:function(t,e,r,n){var i=this,o=this.texturePath&&"string"==typeof this.texturePath?this.texturePath:qr.prototype.extractUrlBase(t),a=new vr(this.manager);a.setWithCredentials(this.withCredentials),a.load(t,function(r){r=JSON.parse(r);var n=r.metadata;if(void 0!==n&&void 0!==(n=n.type)){if("object"===n.toLowerCase())return void console.error("THREE.JSONLoader: "+t+" should be loaded with THREE.ObjectLoader instead.");if("scene"===n.toLowerCase())return void console.error("THREE.JSONLoader: "+t+" should be loaded with THREE.SceneLoader instead.")}r=i.parse(r,o),e(r.geometry,r.materials)},r,n)},setTexturePath:function(t){this.texturePath=t},parse:function(t,e){var n=new xt,o=void 0!==t.scale?1/t.scale:1;return function(e){var i,o,a,s,u,h,l,p,f,d,m,v,g,y=t.faces;h=t.vertices;var b=t.normals,_=t.colors,x=0;if(void 0!==t.uvs){for(i=0;i<t.uvs.length;i++)t.uvs[i].length&&x++;for(i=0;i<x;i++)n.faceVertexUvs[i]=[]}for(s=0,u=h.length;s<u;)i=new c,i.x=h[s++]*e,i.y=h[s++]*e,i.z=h[s++]*e,n.vertices.push(i);for(s=0,u=y.length;s<u;)if(e=y[s++],f=1&e,a=2&e,i=8&e,l=16&e,d=32&e,h=64&e,e&=128,f){if(f=new ct,f.a=y[s],f.b=y[s+1],f.c=y[s+3],m=new ct,m.a=y[s+1],m.b=y[s+2],m.c=y[s+3],s+=4,a&&(a=y[s++],f.materialIndex=a,m.materialIndex=a),a=n.faces.length,i)for(i=0;i<x;i++)for(v=t.uvs[i],n.faceVertexUvs[i][a]=[],n.faceVertexUvs[i][a+1]=[],o=0;4>o;o++)p=y[s++],g=v[2*p],p=v[2*p+1],g=new r(g,p),2!==o&&n.faceVertexUvs[i][a].push(g),0!==o&&n.faceVertexUvs[i][a+1].push(g);if(l&&(l=3*y[s++],f.normal.set(b[l++],b[l++],b[l]),m.normal.copy(f.normal)),d)for(i=0;4>i;i++)l=3*y[s++],d=new c(b[l++],b[l++],b[l]),2!==i&&f.vertexNormals.push(d),0!==i&&m.vertexNormals.push(d);if(h&&(h=y[s++],h=_[h],f.color.setHex(h),m.color.setHex(h)),e)for(i=0;4>i;i++)h=y[s++],h=_[h],2!==i&&f.vertexColors.push(new G(h)),0!==i&&m.vertexColors.push(new G(h));n.faces.push(f),n.faces.push(m)}else{if(f=new ct,f.a=y[s++],f.b=y[s++],f.c=y[s++],a&&(a=y[s++],f.materialIndex=a),a=n.faces.length,i)for(i=0;i<x;i++)for(v=t.uvs[i],n.faceVertexUvs[i][a]=[],o=0;3>o;o++)p=y[s++],g=v[2*p],p=v[2*p+1],g=new r(g,p),n.faceVertexUvs[i][a].push(g);if(l&&(l=3*y[s++],f.normal.set(b[l++],b[l++],b[l])),d)for(i=0;3>i;i++)l=3*y[s++],d=new c(b[l++],b[l++],b[l]),f.vertexNormals.push(d);if(h&&(h=y[s++],f.color.setHex(_[h])),e)for(i=0;3>i;i++)h=y[s++],f.vertexColors.push(new G(_[h]));n.faces.push(f)}}(o),function(){var e=void 0!==t.influencesPerVertex?t.influencesPerVertex:2;if(t.skinWeights)for(var r=0,o=t.skinWeights.length;r<o;r+=e)n.skinWeights.push(new i(t.skinWeights[r],1<e?t.skinWeights[r+1]:0,2<e?t.skinWeights[r+2]:0,3<e?t.skinWeights[r+3]:0));if(t.skinIndices)for(r=0,o=t.skinIndices.length;r<o;r+=e)n.skinIndices.push(new i(t.skinIndices[r],1<e?t.skinIndices[r+1]:0,2<e?t.skinIndices[r+2]:0,3<e?t.skinIndices[r+3]:0));n.bones=t.bones,n.bones&&0<n.bones.length&&(n.skinWeights.length!==n.skinIndices.length||n.skinIndices.length!==n.vertices.length)&&console.warn("When skinning, number of vertices ("+n.vertices.length+"), skinIndices ("+n.skinIndices.length+"), and skinWeights ("+n.skinWeights.length+") should match.")}(),function(e){if(void 0!==t.morphTargets)for(var r=0,i=t.morphTargets.length;r<i;r++){n.morphTargets[r]={},n.morphTargets[r].name=t.morphTargets[r].name,n.morphTargets[r].vertices=[];for(var o=n.morphTargets[r].vertices,a=t.morphTargets[r].vertices,s=0,u=a.length;s<u;s+=3){var h=new c;h.x=a[s]*e,h.y=a[s+1]*e,h.z=a[s+2]*e,o.push(h)}}if(void 0!==t.morphColors&&0<t.morphColors.length)for(console.warn('THREE.JSONLoader: "morphColors" no longer supported. Using them as face colors.'),e=n.faces,o=t.morphColors[0].colors,r=0,i=e.length;r<i;r++)e[r].color.fromArray(o,3*r)}(o),function(){var e=[],r=[];void 0!==t.animation&&r.push(t.animation),void 0!==t.animations&&(t.animations.length?r=r.concat(t.animations):r.push(t.animations));for(var i=0;i<r.length;i++){var o=Vr.parseAnimation(r[i],n.bones);o&&e.push(o)}n.morphTargets&&(r=Vr.CreateClipsFromMorphTargetSequences(n.morphTargets,10),e=e.concat(r)),0<e.length&&(n.animations=e)}(),n.computeFaceNormals(),n.computeBoundingSphere(),void 0===t.materials||0===t.materials.length?{geometry:n}:(o=qr.prototype.initMaterials(t.materials,e,this.crossOrigin),{geometry:n,materials:o})}}),Object.assign(Yr.prototype,{load:function(t,e,r,n){""===this.texturePath&&(this.texturePath=t.substring(0,t.lastIndexOf("/")+1));var i=this;new vr(i.manager).load(t,function(r){var n=null;try{n=JSON.parse(r)}catch(e){return void console.error("THREE:ObjectLoader: Can't parse "+t+".",e.message)}r=n.metadata,void 0===r||void 0===r.type||"geometry"===r.type.toLowerCase()?console.error("THREE.ObjectLoader: Can't load "+t+". Use THREE.JSONLoader instead."):i.parse(n,e)},r,n)},setTexturePath:function(t){this.texturePath=t},setCrossOrigin:function(t){this.crossOrigin=t},parse:function(t,e){var r=this.parseGeometries(t.geometries),n=this.parseImages(t.images,function(){void 0!==e&&e(i)}),n=this.parseTextures(t.textures,n),n=this.parseMaterials(t.materials,n),i=this.parseObject(t.object,r,n);return t.animations&&(i.animations=this.parseAnimations(t.animations)),void 0!==t.images&&0!==t.images.length||void 0===e||e(i),i},parseGeometries:function(t){var e={};if(void 0!==t)for(var r=new Xr,n=new Wr,i=0,o=t.length;i<o;i++){var a,s=t[i];switch(s.type){case"PlaneGeometry":case"PlaneBufferGeometry":a=new bi[s.type](s.width,s.height,s.widthSegments,s.heightSegments);break;case"BoxGeometry":case"BoxBufferGeometry":case"CubeGeometry":a=new bi[s.type](s.width,s.height,s.depth,s.widthSegments,s.heightSegments,s.depthSegments);break;case"CircleGeometry":case"CircleBufferGeometry":a=new bi[s.type](s.radius,s.segments,s.thetaStart,s.thetaLength);break;case"CylinderGeometry":case"CylinderBufferGeometry":a=new bi[s.type](s.radiusTop,s.radiusBottom,s.height,s.radialSegments,s.heightSegments,s.openEnded,s.thetaStart,s.thetaLength);break;case"ConeGeometry":case"ConeBufferGeometry":a=new bi[s.type](s.radius,s.height,s.radialSegments,s.heightSegments,s.openEnded,s.thetaStart,s.thetaLength);break;case"SphereGeometry":case"SphereBufferGeometry":a=new bi[s.type](s.radius,s.widthSegments,s.heightSegments,s.phiStart,s.phiLength,s.thetaStart,s.thetaLength);break;case"DodecahedronGeometry":case"IcosahedronGeometry":case"OctahedronGeometry":case"TetrahedronGeometry":a=new bi[s.type](s.radius,s.detail);break;case"RingGeometry":case"RingBufferGeometry":a=new bi[s.type](s.innerRadius,s.outerRadius,s.thetaSegments,s.phiSegments,s.thetaStart,s.thetaLength);break;case"TorusGeometry":case"TorusBufferGeometry":a=new bi[s.type](s.radius,s.tube,s.radialSegments,s.tubularSegments,s.arc);break;case"TorusKnotGeometry":case"TorusKnotBufferGeometry":a=new bi[s.type](s.radius,s.tube,s.tubularSegments,s.radialSegments,s.p,s.q);break;case"LatheGeometry":case"LatheBufferGeometry":a=new bi[s.type](s.points,s.segments,s.phiStart,s.phiLength);break;case"BufferGeometry":a=n.parse(s);break;case"Geometry":a=r.parse(s.data,this.texturePath).geometry;break;default:console.warn('THREE.ObjectLoader: Unsupported geometry type "'+s.type+'"');continue}a.uuid=s.uuid,void 0!==s.name&&(a.name=s.name),e[s.uuid]=a}return e},parseMaterials:function(t,e){var r={};if(void 0!==t){var n=new Hr;n.setTextures(e);for(var i=0,o=t.length;i<o;i++){var a=n.parse(t[i]);r[a.uuid]=a}}return r},parseAnimations:function(t){for(var e=[],r=0;r<t.length;r++){var n=Vr.parse(t[r]);e.push(n)}return e},parseImages:function(t,e){var r=this,n={};if(void 0!==t&&0<t.length){var i=new mr(e),o=new br(i);o.setCrossOrigin(this.crossOrigin);for(var i=0,a=t.length;i<a;i++){var s=t[i],c=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(s.url)?s.url:r.texturePath+s.url;n[s.uuid]=function(t){return r.manager.itemStart(t),o.load(t,function(){r.manager.itemEnd(t)},void 0,function(){r.manager.itemError(t)})}(c)}}return n},parseTextures:function(t,e){function r(t,e){return"number"==typeof t?t:(console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.",t),e[t])}var i={};if(void 0!==t)for(var o=0,a=t.length;o<a;o++){var s=t[o];void 0===s.image&&console.warn('THREE.ObjectLoader: No "image" specified for',s.uuid),void 0===e[s.image]&&console.warn("THREE.ObjectLoader: Undefined image",s.image);var c=new n(e[s.image]);c.needsUpdate=!0,c.uuid=s.uuid,void 0!==s.name&&(c.name=s.name),void 0!==s.mapping&&(c.mapping=r(s.mapping,Qn)),void 0!==s.offset&&c.offset.fromArray(s.offset),void 0!==s.repeat&&c.repeat.fromArray(s.repeat),void 0!==s.wrap&&(c.wrapS=r(s.wrap[0],ti),c.wrapT=r(s.wrap[1],ti)),void 0!==s.minFilter&&(c.minFilter=r(s.minFilter,ei)),void 0!==s.magFilter&&(c.magFilter=r(s.magFilter,ei)),void 0!==s.anisotropy&&(c.anisotropy=s.anisotropy),void 0!==s.flipY&&(c.flipY=s.flipY),i[s.uuid]=c}return i},parseObject:function(){var t=new u;return function(e,r,n){function i(t){return void 0===r[t]&&console.warn("THREE.ObjectLoader: Undefined geometry",t),r[t]}function o(t){if(void 0!==t)return void 0===n[t]&&console.warn("THREE.ObjectLoader: Undefined material",t),n[t]}var a;switch(e.type){case"Scene":a=new ne,void 0!==e.background&&Number.isInteger(e.background)&&(a.background=new G(e.background)),void 0!==e.fog&&("Fog"===e.fog.type?a.fog=new re(e.fog.color,e.fog.near,e.fog.far):"FogExp2"===e.fog.type&&(a.fog=new ee(e.fog.color,e.fog.density)));break;case"PerspectiveCamera":a=new Ct(e.fov,e.aspect,e.near,e.far),void 0!==e.focus&&(a.focus=e.focus),void 0!==e.zoom&&(a.zoom=e.zoom),void 0!==e.filmGauge&&(a.filmGauge=e.filmGauge),void 0!==e.filmOffset&&(a.filmOffset=e.filmOffset),void 0!==e.view&&(a.view=Object.assign({},e.view));break;case"OrthographicCamera":a=new Ot(e.left,e.right,e.top,e.bottom,e.near,e.far);break;case"AmbientLight":a=new Ar(e.color,e.intensity);break;case"DirectionalLight":a=new Pr(e.color,e.intensity);break;case"PointLight":a=new Cr(e.color,e.intensity,e.distance,e.decay);break;case"SpotLight":a=new Tr(e.color,e.intensity,e.distance,e.angle,e.penumbra,e.decay);break;case"HemisphereLight":a=new Sr(e.color,e.groundColor,e.intensity);break;case"Mesh":a=i(e.geometry);var s=o(e.material);a=a.bones&&0<a.bones.length?new he(a,s):new St(a,s);break;case"LOD":a=new se;break;case"Line":a=new pe(i(e.geometry),o(e.material),e.mode);break;case"LineSegments":a=new fe(i(e.geometry),o(e.material));break;case"PointCloud":case"Points":a=new me(i(e.geometry),o(e.material));break;case"Sprite":a=new ae(o(e.material));break;case"Group":a=new ve;break;case"SkinnedMesh":console.warn("THREE.ObjectLoader.parseObject() does not support SkinnedMesh type. Instantiates Object3D instead.");default:a=new ot}if(a.uuid=e.uuid,void 0!==e.name&&(a.name=e.name),void 0!==e.matrix?(t.fromArray(e.matrix),t.decompose(a.position,a.quaternion,a.scale)):(void 0!==e.position&&a.position.fromArray(e.position),void 0!==e.rotation&&a.rotation.fromArray(e.rotation),void 0!==e.quaternion&&a.quaternion.fromArray(e.quaternion),void 0!==e.scale&&a.scale.fromArray(e.scale)),void 0!==e.castShadow&&(a.castShadow=e.castShadow),void 0!==e.receiveShadow&&(a.receiveShadow=e.receiveShadow),e.shadow&&(void 0!==e.shadow.bias&&(a.shadow.bias=e.shadow.bias),void 0!==e.shadow.radius&&(a.shadow.radius=e.shadow.radius),void 0!==e.shadow.mapSize&&a.shadow.mapSize.fromArray(e.shadow.mapSize),void 0!==e.shadow.camera&&(a.shadow.camera=this.parseObject(e.shadow.camera))),void 0!==e.visible&&(a.visible=e.visible),void 0!==e.userData&&(a.userData=e.userData),void 0!==e.children)for(var c in e.children)a.add(this.parseObject(e.children[c],r,n));if("LOD"===e.type)for(e=e.levels,s=0;s<e.length;s++){var u=e[s];c=a.getObjectByProperty("uuid",u.object),void 0!==c&&a.addLevel(c,u.distance)}return a}}()}),Kr.prototype={constructor:Kr,getPoint:function(t){return console.warn("THREE.Curve: Warning, getPoint() not implemented!"),null},getPointAt:function(t){return t=this.getUtoTmapping(t),this.getPoint(t)},getPoints:function(t){t||(t=5);for(var e=[],r=0;r<=t;r++)e.push(this.getPoint(r/t));return e},getSpacedPoints:function(t){t||(t=5);for(var e=[],r=0;r<=t;r++)e.push(this.getPointAt(r/t));return e},getLength:function(){var t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(t||(t=this.__arcLengthDivisions?this.__arcLengthDivisions:200),this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var e,r,n=[],i=this.getPoint(0),o=0;for(n.push(0),r=1;r<=t;r++)e=this.getPoint(r/t),o+=e.distanceTo(i),n.push(o),i=e;return this.cacheArcLengths=n},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(t,e){var r,n,i=this.getLengths(),o=i.length;n=e||t*i[o-1];for(var a,s=0,c=o-1;s<=c;)if(r=Math.floor(s+(c-s)/2),0>(a=i[r]-n))s=r+1;else{if(!(0<a)){c=r;break}c=r-1}return r=c,i[r]===n?r/(o-1):(s=i[r],(r+(n-s)/(i[r+1]-s))/(o-1))},getTangent:function(t){var e=t-1e-4;return t+=1e-4,0>e&&(e=0),1<t&&(t=1),e=this.getPoint(e),this.getPoint(t).clone().sub(e).normalize()},getTangentAt:function(t){return t=this.getUtoTmapping(t),this.getTangent(t)},computeFrenetFrames:function(t,e){var r,n,i=new c,o=[],a=[],s=[],h=new c,l=new u;for(r=0;r<=t;r++)n=r/t,o[r]=this.getTangentAt(n),o[r].normalize();a[0]=new c,s[0]=new c,r=Number.MAX_VALUE,n=Math.abs(o[0].x);var p=Math.abs(o[0].y),f=Math.abs(o[0].z);for(n<=r&&(r=n,i.set(1,0,0)),p<=r&&(r=p,i.set(0,1,0)),f<=r&&i.set(0,0,1),h.crossVectors(o[0],i).normalize(),a[0].crossVectors(o[0],h),s[0].crossVectors(o[0],a[0]),r=1;r<=t;r++)a[r]=a[r-1].clone(),s[r]=s[r-1].clone(),h.crossVectors(o[r-1],o[r]),h.length()>Number.EPSILON&&(h.normalize(),i=Math.acos(ri.clamp(o[r-1].dot(o[r]),-1,1)),a[r].applyMatrix4(l.makeRotationAxis(h,i))),s[r].crossVectors(o[r],a[r]);if(!0===e)for(i=Math.acos(ri.clamp(a[0].dot(a[t]),-1,1)),i/=t,0<o[0].dot(h.crossVectors(a[0],a[t]))&&(i=-i),r=1;r<=t;r++)a[r].applyMatrix4(l.makeRotationAxis(o[r],i*r)),s[r].crossVectors(o[r],a[r]);return{tangents:o,normals:a,binormals:s}}},Kr.create=function(t,e){return t.prototype=Object.create(Kr.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},Zr.prototype=Object.create(Kr.prototype),Zr.prototype.constructor=Zr,Zr.prototype.isLineCurve=!0,Zr.prototype.getPoint=function(t){if(1===t)return this.v2.clone();var e=this.v2.clone().sub(this.v1);return e.multiplyScalar(t).add(this.v1),e},Zr.prototype.getPointAt=function(t){return this.getPoint(t)},Zr.prototype.getTangent=function(t){return this.v2.clone().sub(this.v1).normalize()},Jr.prototype=Object.assign(Object.create(Kr.prototype),{constructor:Jr,add:function(t){this.curves.push(t)},closePath:function(){var t=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);t.equals(e)||this.curves.push(new Zr(e,t))},getPoint:function(t){var e=t*this.getLength(),r=this.getCurveLengths();for(t=0;t<r.length;){if(r[t]>=e)return e=r[t]-e,t=this.curves[t],r=t.getLength(),t.getPointAt(0===r?0:1-e/r);t++}return null},getLength:function(){var t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var t=[],e=0,r=0,n=this.curves.length;r<n;r++)e+=this.curves[r].getLength(),t.push(e);return this.cacheLengths=t},getSpacedPoints:function(t){t||(t=40);for(var e=[],r=0;r<=t;r++)e.push(this.getPoint(r/t));return this.autoClose&&e.push(e[0]),e},getPoints:function(t){t=t||12;for(var e,r=[],n=0,i=this.curves;n<i.length;n++)for(var o=i[n],o=o.getPoints(o&&o.isEllipseCurve?2*t:o&&o.isLineCurve?1:o&&o.isSplineCurve?t*o.points.length:t),a=0;a<o.length;a++){var s=o[a];e&&e.equals(s)||(r.push(s),e=s)}return this.autoClose&&1<r.length&&!r[r.length-1].equals(r[0])&&r.push(r[0]),r},createPointsGeometry:function(t){return t=this.getPoints(t),this.createGeometry(t)},createSpacedPointsGeometry:function(t){return t=this.getSpacedPoints(t),this.createGeometry(t)},createGeometry:function(t){for(var e=new xt,r=0,n=t.length;r<n;r++){var i=t[r];e.vertices.push(new c(i.x,i.y,i.z||0))}return e}}),Qr.prototype=Object.create(Kr.prototype),Qr.prototype.constructor=Qr,Qr.prototype.isEllipseCurve=!0,Qr.prototype.getPoint=function(t){for(var e=2*Math.PI,n=this.aEndAngle-this.aStartAngle,i=Math.abs(n)<Number.EPSILON;0>n;)n+=e;for(;n>e;)n-=e;n<Number.EPSILON&&(n=i?0:e),!0!==this.aClockwise||i||(n=n===e?-e:n-e),e=this.aStartAngle+t*n,t=this.aX+this.xRadius*Math.cos(e);var o=this.aY+this.yRadius*Math.sin(e);return 0!==this.aRotation&&(e=Math.cos(this.aRotation),n=Math.sin(this.aRotation),i=t-this.aX,o-=this.aY,t=i*e-o*n+this.aX,o=i*n+o*e+this.aY),new r(t,o)};var Ei={tangentQuadraticBezier:function(t,e,r,n){return 2*(1-t)*(r-e)+2*t*(n-r)},tangentCubicBezier:function(t,e,r,n,i){return-3*e*(1-t)*(1-t)+3*r*(1-t)*(1-t)-6*t*r*(1-t)+6*t*n*(1-t)-3*t*t*n+3*t*t*i},tangentSpline:function(t,e,r,n,i){return 6*t*t-6*t+(3*t*t-4*t+1)+(-6*t*t+6*t)+(3*t*t-2*t)},interpolate:function(t,e,r,n,i){t=.5*(r-t),n=.5*(n-e);var o=i*i;return(2*e-2*r+t+n)*i*o+(-3*e+3*r-2*t-n)*o+t*i+e}};tn.prototype=Object.create(Kr.prototype),tn.prototype.constructor=tn,tn.prototype.isSplineCurve=!0,tn.prototype.getPoint=function(t){var e=this.points;t*=e.length-1;var n=Math.floor(t);t-=n;var i=e[0===n?n:n-1],o=e[n],a=e[n>e.length-2?e.length-1:n+1],e=e[n>e.length-3?e.length-1:n+2],n=Ei.interpolate;return new r(n(i.x,o.x,a.x,e.x,t),n(i.y,o.y,a.y,e.y,t))},en.prototype=Object.create(Kr.prototype),en.prototype.constructor=en,en.prototype.getPoint=function(t){var e=yi.b3;return new r(e(t,this.v0.x,this.v1.x,this.v2.x,this.v3.x),e(t,this.v0.y,this.v1.y,this.v2.y,this.v3.y))},en.prototype.getTangent=function(t){var e=Ei.tangentCubicBezier;return new r(e(t,this.v0.x,this.v1.x,this.v2.x,this.v3.x),e(t,this.v0.y,this.v1.y,this.v2.y,this.v3.y)).normalize()},rn.prototype=Object.create(Kr.prototype),rn.prototype.constructor=rn,rn.prototype.getPoint=function(t){var e=yi.b2;return new r(e(t,this.v0.x,this.v1.x,this.v2.x),e(t,this.v0.y,this.v1.y,this.v2.y))},rn.prototype.getTangent=function(t){var e=Ei.tangentQuadraticBezier;return new r(e(t,this.v0.x,this.v1.x,this.v2.x),e(t,this.v0.y,this.v1.y,this.v2.y)).normalize()};var Ti=Object.assign(Object.create(Jr.prototype),{fromPoints:function(t){this.moveTo(t[0].x,t[0].y);for(var e=1,r=t.length;e<r;e++)this.lineTo(t[e].x,t[e].y)},moveTo:function(t,e){this.currentPoint.set(t,e)},lineTo:function(t,e){var n=new Zr(this.currentPoint.clone(),new r(t,e));this.curves.push(n),this.currentPoint.set(t,e)},quadraticCurveTo:function(t,e,n,i){t=new rn(this.currentPoint.clone(),new r(t,e),new r(n,i)),this.curves.push(t),this.currentPoint.set(n,i)},bezierCurveTo:function(t,e,n,i,o,a){t=new en(this.currentPoint.clone(),new r(t,e),new r(n,i),new r(o,a)),this.curves.push(t),this.currentPoint.set(o,a)},splineThru:function(t){var e=[this.currentPoint.clone()].concat(t),e=new tn(e);this.curves.push(e),this.currentPoint.copy(t[t.length-1])},arc:function(t,e,r,n,i,o){this.absarc(t+this.currentPoint.x,e+this.currentPoint.y,r,n,i,o)},absarc:function(t,e,r,n,i,o){this.absellipse(t,e,r,r,n,i,o)},ellipse:function(t,e,r,n,i,o,a,s){this.absellipse(t+this.currentPoint.x,e+this.currentPoint.y,r,n,i,o,a,s)},absellipse:function(t,e,r,n,i,o,a,s){t=new Qr(t,e,r,n,i,o,a,s),0<this.curves.length&&(e=t.getPoint(0),e.equals(this.currentPoint)||this.lineTo(e.x,e.y)),this.curves.push(t),t=t.getPoint(1),this.currentPoint.copy(t)}});nn.prototype=Object.assign(Object.create(Ti),{constructor:nn,getPointsHoles:function(t){for(var e=[],r=0,n=this.holes.length;r<n;r++)e[r]=this.holes[r].getPoints(t);return e},extractAllPoints:function(t){return{shape:this.getPoints(t),holes:this.getPointsHoles(t)}},extractPoints:function(t){return this.extractAllPoints(t)}}),on.prototype=Ti,Ti.constructor=on,an.prototype={moveTo:function(t,e){this.currentPath=new on,this.subPaths.push(this.currentPath),this.currentPath.moveTo(t,e)},lineTo:function(t,e){this.currentPath.lineTo(t,e)},quadraticCurveTo:function(t,e,r,n){this.currentPath.quadraticCurveTo(t,e,r,n)},bezierCurveTo:function(t,e,r,n,i,o){this.currentPath.bezierCurveTo(t,e,r,n,i,o)},splineThru:function(t){this.currentPath.splineThru(t)},toShapes:function(t,e){function r(t){for(var e=[],r=0,n=t.length;r<n;r++){var i=t[r],o=new nn;o.curves=i.curves,e.push(o)}return e}var n=yi.isClockWise,i=this.subPaths;if(0===i.length)return[];if(!0===e)return r(i);var o,a,s,c=[];if(1===i.length)return a=i[0],s=new nn,s.curves=a.curves,c.push(s),c;var u=!n(i[0].getPoints()),u=t?!u:u;s=[];var h,l=[],p=[],f=0;l[f]=void 0,p[f]=[];for(var d=0,m=i.length;d<m;d++)a=i[d],h=a.getPoints(),o=n(h),(o=t?!o:o)?(!u&&l[f]&&f++,l[f]={s:new nn,p:h},l[f].s.curves=a.curves,u&&f++,p[f]=[]):p[f].push({h:a,p:h[0]});if(!l[0])return r(i);if(1<l.length){for(d=!1,a=[],n=0,i=l.length;n<i;n++)s[n]=[];for(n=0,i=l.length;n<i;n++)for(o=p[n],u=0;u<o.length;u++){for(f=o[u],h=!0,m=0;m<l.length;m++)(function(t,e){for(var r=e.length,n=!1,i=r-1,o=0;o<r;i=o++){var a=e[i],s=e[o],c=s.x-a.x,u=s.y-a.y;if(Math.abs(u)>Number.EPSILON){if(0>u&&(a=e[o],c=-c,s=e[i],u=-u),!(t.y<a.y||t.y>s.y))if(t.y===a.y){if(t.x===a.x)return!0}else{if(0===(i=u*(t.x-a.x)-c*(t.y-a.y)))return!0;0>i||(n=!n)}}else if(t.y===a.y&&(s.x<=t.x&&t.x<=a.x||a.x<=t.x&&t.x<=s.x))return!0}return n})(f.p,l[m].p)&&(n!==m&&a.push({froms:n,tos:m,hole:u}),h?(h=!1,s[m].push(f)):d=!0);h&&s[n].push(f)}0<a.length&&(d||(p=s))}for(d=0,n=l.length;d<n;d++)for(s=l[d].s,c.push(s),a=p[d],i=0,o=a.length;i<o;i++)s.holes.push(a[i].h);return c}},Object.assign(sn.prototype,{isFont:!0,generateShapes:function(t,e,r){void 0===e&&(e=100),void 0===r&&(r=4);var n=this.data;t=String(t).split("");var i=e/n.resolution,o=0;e=[];for(var a=0;a<t.length;a++){var s;s=i;var c=o,u=n.glyphs[t[a]]||n.glyphs["?"];if(u){var h,l,p,f,d,m,v,g,y=new an,b=[],_=yi.b2,x=yi.b3;if(u.o)for(var w=u._cachedOutline||(u._cachedOutline=u.o.split(" ")),S=0,M=w.length;S<M;)switch(w[S++]){case"m":h=w[S++]*s+c,l=w[S++]*s,y.moveTo(h,l);break;case"l":h=w[S++]*s+c,l=w[S++]*s,y.lineTo(h,l);break;case"q":if(h=w[S++]*s+c,l=w[S++]*s,d=w[S++]*s+c,m=w[S++]*s,y.quadraticCurveTo(d,m,h,l),f=b[b.length-1]){p=f.x,f=f.y;for(var E=1;E<=r;E++){var T=E/r;_(T,p,d,h),_(T,f,m,l)}}break;case"b":if(h=w[S++]*s+c,l=w[S++]*s,d=w[S++]*s+c,m=w[S++]*s,v=w[S++]*s+c,g=w[S++]*s,y.bezierCurveTo(d,m,v,g,h,l),f=b[b.length-1])for(p=f.x,f=f.y,E=1;E<=r;E++)T=E/r,x(T,p,d,v,h),x(T,f,m,g,l)}s={offset:u.ha*s,path:y}}else s=void 0;o+=s.offset,e.push(s.path)}for(r=[],n=0,t=e.length;n<t;n++)Array.prototype.push.apply(r,e[n].toShapes());return r}}),Object.assign(cn.prototype,{load:function(t,e,r,n){var i=this;new vr(this.manager).load(t,function(t){var r;try{r=JSON.parse(t)}catch(e){console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."),r=JSON.parse(t.substring(65,t.length-2))}
+t=i.parse(r),e&&e(t)},r,n)},parse:function(t){return new sn(t)}});var Ci,Oi={getContext:function(){return void 0===Ci&&(Ci=new(window.AudioContext||window.webkitAudioContext)),Ci},setContext:function(t){Ci=t}};Object.assign(un.prototype,{load:function(t,e,r,n){var i=new vr(this.manager);i.setResponseType("arraybuffer"),i.load(t,function(t){Oi.getContext().decodeAudioData(t,function(t){e(t)})},r,n)}}),hn.prototype=Object.assign(Object.create(wr.prototype),{constructor:hn,isRectAreaLight:!0,copy:function(t){return wr.prototype.copy.call(this,t),this.width=t.width,this.height=t.height,this}}),Object.assign(ln.prototype,{update:function(){var t,e,r,n,i,o,a,s=new u,c=new u;return function(u){if(t!==this||e!==u.focus||r!==u.fov||n!==u.aspect*this.aspect||i!==u.near||o!==u.far||a!==u.zoom){t=this,e=u.focus,r=u.fov,n=u.aspect*this.aspect,i=u.near,o=u.far,a=u.zoom;var h,l=u.projectionMatrix.clone(),p=this.eyeSep/2,f=p*i/e,d=i*Math.tan(ri.DEG2RAD*r*.5)/a;c.elements[12]=-p,s.elements[12]=p,p=-d*n+f,h=d*n+f,l.elements[0]=2*i/(h-p),l.elements[8]=(h+p)/(h-p),this.cameraL.projectionMatrix.copy(l),p=-d*n-f,h=d*n-f,l.elements[0]=2*i/(h-p),l.elements[8]=(h+p)/(h-p),this.cameraR.projectionMatrix.copy(l)}this.cameraL.matrixWorld.copy(u.matrixWorld).multiply(c),this.cameraR.matrixWorld.copy(u.matrixWorld).multiply(s)}}()}),pn.prototype=Object.create(ot.prototype),pn.prototype.constructor=pn,fn.prototype=Object.assign(Object.create(ot.prototype),{constructor:fn,getInput:function(){return this.gain},removeFilter:function(){null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null)},getFilter:function(){return this.filter},setFilter:function(t){null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=t,this.gain.connect(this.filter),this.filter.connect(this.context.destination)},getMasterVolume:function(){return this.gain.gain.value},setMasterVolume:function(t){this.gain.gain.value=t},updateMatrixWorld:function(){var t=new c,e=new s,r=new c,n=new c;return function(i){ot.prototype.updateMatrixWorld.call(this,i),i=this.context.listener;var o=this.up;this.matrixWorld.decompose(t,e,r),n.set(0,0,-1).applyQuaternion(e),i.positionX?(i.positionX.setValueAtTime(t.x,this.context.currentTime),i.positionY.setValueAtTime(t.y,this.context.currentTime),i.positionZ.setValueAtTime(t.z,this.context.currentTime),i.forwardX.setValueAtTime(n.x,this.context.currentTime),i.forwardY.setValueAtTime(n.y,this.context.currentTime),i.forwardZ.setValueAtTime(n.z,this.context.currentTime),i.upX.setValueAtTime(o.x,this.context.currentTime),i.upY.setValueAtTime(o.y,this.context.currentTime),i.upZ.setValueAtTime(o.z,this.context.currentTime)):(i.setPosition(t.x,t.y,t.z),i.setOrientation(n.x,n.y,n.z,o.x,o.y,o.z))}}()}),dn.prototype=Object.assign(Object.create(ot.prototype),{constructor:dn,getOutput:function(){return this.gain},setNodeSource:function(t){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=t,this.connect(),this},setBuffer:function(t){return this.buffer=t,this.sourceType="buffer",this.autoplay&&this.play(),this},play:function(){if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else{if(!1!==this.hasPlaybackControl){var t=this.context.createBufferSource();return t.buffer=this.buffer,t.loop=this.loop,t.onended=this.onEnded.bind(this),t.playbackRate.setValueAtTime(this.playbackRate,this.startTime),t.start(0,this.startTime),this.isPlaying=!0,this.source=t,this.connect()}console.warn("THREE.Audio: this Audio has no playback control.")}},pause:function(){if(!1!==this.hasPlaybackControl)return this.source.stop(),this.startTime=this.context.currentTime,this.isPlaying=!1,this;console.warn("THREE.Audio: this Audio has no playback control.")},stop:function(){if(!1!==this.hasPlaybackControl)return this.source.stop(),this.startTime=0,this.isPlaying=!1,this;console.warn("THREE.Audio: this Audio has no playback control.")},connect:function(){if(0<this.filters.length){this.source.connect(this.filters[0]);for(var t=1,e=this.filters.length;t<e;t++)this.filters[t-1].connect(this.filters[t]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this},disconnect:function(){if(0<this.filters.length){this.source.disconnect(this.filters[0]);for(var t=1,e=this.filters.length;t<e;t++)this.filters[t-1].disconnect(this.filters[t]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this},getFilters:function(){return this.filters},setFilters:function(t){return t||(t=[]),!0===this.isPlaying?(this.disconnect(),this.filters=t,this.connect()):this.filters=t,this},getFilter:function(){return this.getFilters()[0]},setFilter:function(t){return this.setFilters(t?[t]:[])},setPlaybackRate:function(t){if(!1!==this.hasPlaybackControl)return this.playbackRate=t,!0===this.isPlaying&&this.source.playbackRate.setValueAtTime(this.playbackRate,this.context.currentTime),this;console.warn("THREE.Audio: this Audio has no playback control.")},getPlaybackRate:function(){return this.playbackRate},onEnded:function(){this.isPlaying=!1},getLoop:function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.loop},setLoop:function(t){if(!1!==this.hasPlaybackControl)return this.loop=t,!0===this.isPlaying&&(this.source.loop=this.loop),this;console.warn("THREE.Audio: this Audio has no playback control.")},getVolume:function(){return this.gain.gain.value},setVolume:function(t){return this.gain.gain.value=t,this}}),mn.prototype=Object.assign(Object.create(dn.prototype),{constructor:mn,getOutput:function(){return this.panner},getRefDistance:function(){return this.panner.refDistance},setRefDistance:function(t){this.panner.refDistance=t},getRolloffFactor:function(){return this.panner.rolloffFactor},setRolloffFactor:function(t){this.panner.rolloffFactor=t},getDistanceModel:function(){return this.panner.distanceModel},setDistanceModel:function(t){this.panner.distanceModel=t},getMaxDistance:function(){return this.panner.maxDistance},setMaxDistance:function(t){this.panner.maxDistance=t},updateMatrixWorld:function(){var t=new c;return function(e){ot.prototype.updateMatrixWorld.call(this,e),t.setFromMatrixPosition(this.matrixWorld),this.panner.setPosition(t.x,t.y,t.z)}}()}),Object.assign(vn.prototype,{getFrequencyData:function(){return this.analyser.getByteFrequencyData(this.data),this.data},getAverageFrequency:function(){for(var t=0,e=this.getFrequencyData(),r=0;r<e.length;r++)t+=e[r];return t/e.length}}),gn.prototype={constructor:gn,accumulate:function(t,e){var r=this.buffer,n=this.valueSize,i=t*n+n,o=this.cumulativeWeight;if(0===o){for(o=0;o!==n;++o)r[i+o]=r[o];o=e}else o+=e,this._mixBufferRegion(r,i,0,e/o,n);this.cumulativeWeight=o},apply:function(t){var e=this.valueSize,r=this.buffer;t=t*e+e;var n=this.cumulativeWeight,i=this.binding;this.cumulativeWeight=0,1>n&&this._mixBufferRegion(r,t,3*e,1-n,e);for(var n=e,o=e+e;n!==o;++n)if(r[n]!==r[n+e]){i.setValue(r,t);break}},saveOriginalState:function(){var t=this.buffer,e=this.valueSize,r=3*e;this.binding.getValue(t,r);for(var n=e;n!==r;++n)t[n]=t[r+n%e];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(t,e,r,n,i){if(.5<=n)for(n=0;n!==i;++n)t[e+n]=t[r+n]},_slerp:function(t,e,r,n,i){s.slerpFlat(t,e,t,e,t,r,n)},_lerp:function(t,e,r,n,i){for(var o=1-n,a=0;a!==i;++a){var s=e+a;t[s]=t[s]*o+t[r+a]*n}}},yn.prototype={constructor:yn,getValue:function(t,e){this.bind(),this.getValue(t,e)},setValue:function(t,e){this.bind(),this.setValue(t,e)},bind:function(){var t=this.node,e=this.parsedPath,r=e.objectName,n=e.propertyName,i=e.propertyIndex;if(t||(this.node=t=yn.findNode(this.rootNode,e.nodeName)||this.rootNode),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,t){if(r){var o=e.objectIndex;switch(r){case"materials":if(!t.material)return void console.error("  can not bind to material as node does not have a material",this);if(!t.material.materials)return void console.error("  can not bind to material.materials as node.material does not have a materials array",this);t=t.material.materials;break;case"bones":if(!t.skeleton)return void console.error("  can not bind to bones as node does not have a skeleton",this);for(t=t.skeleton.bones,r=0;r<t.length;r++)if(t[r].name===o){o=r;break}break;default:if(void 0===t[r])return void console.error("  can not bind to objectName of node, undefined",this);t=t[r]}if(void 0!==o){if(void 0===t[o])return void console.error("  trying to bind to objectIndex of objectName, but is undefined:",this,t);t=t[o]}}if(void 0===(o=t[n]))console.error("  trying to update property for track: "+e.nodeName+"."+n+" but it wasn't found.",t);else{if(e=this.Versioning.None,void 0!==t.needsUpdate?(e=this.Versioning.NeedsUpdate,this.targetObject=t):void 0!==t.matrixWorldNeedsUpdate&&(e=this.Versioning.MatrixWorldNeedsUpdate,this.targetObject=t),r=this.BindingType.Direct,void 0!==i){if("morphTargetInfluences"===n){if(!t.geometry)return void console.error("  can not bind to morphTargetInfluences becasuse node does not have a geometry",this);if(!t.geometry.morphTargets)return void console.error("  can not bind to morphTargetInfluences becasuse node does not have a geometry.morphTargets",this);for(r=0;r<this.node.geometry.morphTargets.length;r++)if(t.geometry.morphTargets[r].name===i){i=r;break}}r=this.BindingType.ArrayElement,this.resolvedProperty=o,this.propertyIndex=i}else void 0!==o.fromArray&&void 0!==o.toArray?(r=this.BindingType.HasFromToArray,this.resolvedProperty=o):void 0!==o.length?(r=this.BindingType.EntireArray,this.resolvedProperty=o):this.propertyName=n;this.getValue=this.GetterByBindingType[r],this.setValue=this.SetterByBindingTypeAndVersioning[r][e]}}else console.error("  trying to update node for track: "+this.path+" but it wasn't found.")},unbind:function(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}},Object.assign(yn.prototype,{_getValue_unavailable:function(){},_setValue_unavailable:function(){},_getValue_unbound:yn.prototype.getValue,_setValue_unbound:yn.prototype.setValue,BindingType:{Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Versioning:{None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},GetterByBindingType:[function(t,e){t[e]=this.node[this.propertyName]},function(t,e){for(var r=this.resolvedProperty,n=0,i=r.length;n!==i;++n)t[e++]=r[n]},function(t,e){t[e]=this.resolvedProperty[this.propertyIndex]},function(t,e){this.resolvedProperty.toArray(t,e)}],SetterByBindingTypeAndVersioning:[[function(t,e){this.node[this.propertyName]=t[e]},function(t,e){this.node[this.propertyName]=t[e],this.targetObject.needsUpdate=!0},function(t,e){this.node[this.propertyName]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}],[function(t,e){for(var r=this.resolvedProperty,n=0,i=r.length;n!==i;++n)r[n]=t[e++]},function(t,e){for(var r=this.resolvedProperty,n=0,i=r.length;n!==i;++n)r[n]=t[e++];this.targetObject.needsUpdate=!0},function(t,e){for(var r=this.resolvedProperty,n=0,i=r.length;n!==i;++n)r[n]=t[e++];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(t,e){this.resolvedProperty[this.propertyIndex]=t[e]},function(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.needsUpdate=!0},function(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}],[function(t,e){this.resolvedProperty.fromArray(t,e)},function(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.needsUpdate=!0},function(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.matrixWorldNeedsUpdate=!0}]]}),yn.Composite=function(t,e,r){r=r||yn.parseTrackName(e),this._targetGroup=t,this._bindings=t.subscribe_(e,r)},yn.Composite.prototype={constructor:yn.Composite,getValue:function(t,e){this.bind();var r=this._bindings[this._targetGroup.nCachedObjects_];void 0!==r&&r.getValue(t,e)},setValue:function(t,e){for(var r=this._bindings,n=this._targetGroup.nCachedObjects_,i=r.length;n!==i;++n)r[n].setValue(t,e)},bind:function(){for(var t=this._bindings,e=this._targetGroup.nCachedObjects_,r=t.length;e!==r;++e)t[e].bind()},unbind:function(){for(var t=this._bindings,e=this._targetGroup.nCachedObjects_,r=t.length;e!==r;++e)t[e].unbind()}},yn.create=function(t,e,r){return t&&t.isAnimationObjectGroup?new yn.Composite(t,e,r):new yn(t,e,r)},yn.parseTrackName=function(t){var e=/^((?:[\w-]+[\/:])*)([\w-]+)?(?:\.([\w-]+)(?:\[(.+)\])?)?\.([\w-]+)(?:\[(.+)\])?$/.exec(t);if(!e)throw Error("cannot parse trackName at all: "+t);if(e={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},null===e.propertyName||0===e.propertyName.length)throw Error("can not parse propertyName from trackName: "+t);return e},yn.findNode=function(t,e){if(!e||""===e||"root"===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){var r=function(t){for(var r=0;r<t.bones.length;r++){var n=t.bones[r];if(n.name===e)return n}return null}(t.skeleton);if(r)return r}if(t.children){var n=function(t){for(var r=0;r<t.length;r++){var i=t[r];if(i.name===e||i.uuid===e||(i=n(i.children)))return i}return null};if(r=n(t.children))return r}return null},bn.prototype={constructor:bn,isAnimationObjectGroup:!0,add:function(t){for(var e=this._objects,r=e.length,n=this.nCachedObjects_,i=this._indicesByUUID,o=this._paths,a=this._parsedPaths,s=this._bindings,c=s.length,u=0,h=arguments.length;u!==h;++u){var l=arguments[u],p=l.uuid,f=i[p];if(void 0===f){f=r++,i[p]=f,e.push(l);for(var p=0,d=c;p!==d;++p)s[p].push(new yn(l,o[p],a[p]))}else if(f<n){var m=--n,d=e[m];for(i[d.uuid]=f,e[f]=d,i[p]=m,e[m]=l,p=0,d=c;p!==d;++p){var v=s[p],g=v[f];v[f]=v[m],void 0===g&&(g=new yn(l,o[p],a[p])),v[m]=g}}else void 0!==e[f]&&console.error("Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes...")}this.nCachedObjects_=n},remove:function(t){for(var e=this._objects,r=this.nCachedObjects_,n=this._indicesByUUID,i=this._bindings,o=i.length,a=0,s=arguments.length;a!==s;++a){var c=arguments[a],u=c.uuid,h=n[u];if(void 0!==h&&h>=r){var l=r++,p=e[l];for(n[p.uuid]=h,e[h]=p,n[u]=l,e[l]=c,c=0,u=o;c!==u;++c){var p=i[c],f=p[h];p[h]=p[l],p[l]=f}}}this.nCachedObjects_=r},uncache:function(t){for(var e=this._objects,r=e.length,n=this.nCachedObjects_,i=this._indicesByUUID,o=this._bindings,a=o.length,s=0,c=arguments.length;s!==c;++s){var u=arguments[s].uuid,h=i[u];if(void 0!==h)if(delete i[u],h<n){var u=--n,l=e[u],p=--r,f=e[p];for(i[l.uuid]=h,e[h]=l,i[f.uuid]=u,e[u]=f,e.pop(),l=0,f=a;l!==f;++l){var d=o[l],m=d[p];d[h]=d[u],d[u]=m,d.pop()}}else for(p=--r,f=e[p],i[f.uuid]=h,e[h]=f,e.pop(),l=0,f=a;l!==f;++l)d=o[l],d[h]=d[p],d.pop()}this.nCachedObjects_=n},subscribe_:function(t,e){var r=this._bindingsIndicesByPath,n=r[t],i=this._bindings;if(void 0!==n)return i[n];var o=this._paths,a=this._parsedPaths,s=this._objects,c=this.nCachedObjects_,u=Array(s.length),n=i.length;for(r[t]=n,o.push(t),a.push(e),i.push(u),r=c,n=s.length;r!==n;++r)u[r]=new yn(s[r],t,e);return u},unsubscribe_:function(t){var e=this._bindingsIndicesByPath,r=e[t];if(void 0!==r){var n=this._paths,i=this._parsedPaths,o=this._bindings,a=o.length-1,s=o[a];e[t[a]]=r,o[r]=s,o.pop(),i[r]=i[a],i.pop(),n[r]=n[a],n.pop()}}},_n.prototype={constructor:_n,play:function(){return this._mixer._activateAction(this),this},stop:function(){return this._mixer._deactivateAction(this),this.reset()},reset:function(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()},isRunning:function(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)},isScheduled:function(){return this._mixer._isActiveAction(this)},startAt:function(t){return this._startTime=t,this},setLoop:function(t,e){return this.loop=t,this.repetitions=e,this},setEffectiveWeight:function(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()},getEffectiveWeight:function(){return this._effectiveWeight},fadeIn:function(t){return this._scheduleFading(t,0,1)},fadeOut:function(t){return this._scheduleFading(t,1,0)},crossFadeFrom:function(t,e,r){if(t.fadeOut(e),this.fadeIn(e),r){r=this._clip.duration;var n=t._clip.duration,i=r/n;t.warp(1,n/r,e),this.warp(i,1,e)}return this},crossFadeTo:function(t,e,r){return t.crossFadeFrom(this,e,r)},stopFading:function(){var t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this},setEffectiveTimeScale:function(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()},getEffectiveTimeScale:function(){return this._effectiveTimeScale},setDuration:function(t){return this.timeScale=this._clip.duration/t,this.stopWarping()},syncWith:function(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()},halt:function(t){return this.warp(this._effectiveTimeScale,0,t)},warp:function(t,e,r){var n=this._mixer,i=n.time,o=this._timeScaleInterpolant,a=this.timeScale;return null===o&&(this._timeScaleInterpolant=o=n._lendControlInterpolant()),n=o.parameterPositions,o=o.sampleValues,n[0]=i,n[1]=i+r,o[0]=t/a,o[1]=e/a,this},stopWarping:function(){var t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this},getMixer:function(){return this._mixer},getClip:function(){return this._clip},getRoot:function(){return this._localRoot||this._mixer._root},_update:function(t,e,r,n){var i=this._startTime;if(null!==i){if(0>(e=(t-i)*r)||0===r)return;this._startTime=null,e*=r}if(e*=this._updateTimeScale(t),r=this._updateTime(e),0<(t=this._updateWeight(t))){e=this._interpolants;for(var i=this._propertyBindings,o=0,a=e.length;o!==a;++o)e[o].evaluate(r),i[o].accumulate(n,t)}},_updateWeight:function(t){var e=0;if(this.enabled){var e=this.weight,r=this._weightInterpolant;if(null!==r){var n=r.evaluate(t)[0],e=e*n;t>r.parameterPositions[1]&&(this.stopFading(),0===n&&(this.enabled=!1))}}return this._effectiveWeight=e},_updateTimeScale:function(t){var e=0;if(!this.paused){var e=this.timeScale,r=this._timeScaleInterpolant;if(null!==r){var n=r.evaluate(t)[0],e=e*n;t>r.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e},_updateTime:function(t){var e=this.time+t;if(0===t)return e;var r=this._clip.duration,n=this.loop,i=this._loopCount;if(2200===n)t:{if(-1===i&&(this._loopCount=0,this._setEndings(!0,!0,!1)),e>=r)e=r;else{if(!(0>e))break t;e=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this._mixer.dispatchEvent({type:"finished",action:this,direction:0>t?-1:1})}else{if(n=2202===n,-1===i&&(0<=t?(i=0,this._setEndings(!0,0===this.repetitions,n)):this._setEndings(0===this.repetitions,!0,n)),e>=r||0>e){var o=Math.floor(e/r),e=e-r*o,i=i+Math.abs(o),a=this.repetitions-i;0>a?(this.clampWhenFinished?this.paused=!0:this.enabled=!1,e=0<t?r:0,this._mixer.dispatchEvent({type:"finished",action:this,direction:0<t?1:-1})):(0===a?(t=0>t,this._setEndings(t,!t,n)):this._setEndings(!1,!1,n),this._loopCount=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:o}))}if(n&&1==(1&i))return this.time=e,r-e}return this.time=e},_setEndings:function(t,e,r){var n=this._interpolantSettings;r?(n.endingStart=2401,n.endingEnd=2401):(n.endingStart=t?this.zeroSlopeAtStart?2401:2400:2402,n.endingEnd=e?this.zeroSlopeAtEnd?2401:2400:2402)},_scheduleFading:function(t,e,r){var n=this._mixer,i=n.time,o=this._weightInterpolant;return null===o&&(this._weightInterpolant=o=n._lendControlInterpolant()),n=o.parameterPositions,o=o.sampleValues,n[0]=i,o[0]=e,n[1]=i+t,o[1]=r,this}},Object.assign(xn.prototype,e.prototype,{clipAction:function(t,e){var r=e||this._root,n=r.uuid,i="string"==typeof t?Vr.findByName(r,t):t,r=null!==i?i.uuid:t,o=this._actionsByClip[r],a=null;if(void 0!==o){if(void 0!==(a=o.actionByRoot[n]))return a;a=o.knownActions[0],null===i&&(i=a._clip)}return null===i?null:(i=new _n(this,i,e),this._bindAction(i,a),this._addInactiveAction(i,r,n),i)},existingAction:function(t,e){var r=e||this._root,n=r.uuid,r="string"==typeof t?Vr.findByName(r,t):t,r=this._actionsByClip[r?r.uuid:t];return void 0!==r?r.actionByRoot[n]||null:null},stopAllAction:function(){for(var t=this._actions,e=this._nActiveActions,r=this._bindings,n=this._nActiveBindings,i=this._nActiveBindings=this._nActiveActions=0;i!==e;++i)t[i].reset();for(i=0;i!==n;++i)r[i].useCount=0;return this},update:function(t){t*=this.timeScale;for(var e=this._actions,r=this._nActiveActions,n=this.time+=t,i=Math.sign(t),o=this._accuIndex^=1,a=0;a!==r;++a){var s=e[a];s.enabled&&s._update(n,t,i,o)}for(t=this._bindings,e=this._nActiveBindings,a=0;a!==e;++a)t[a].apply(o);return this},getRoot:function(){return this._root},uncacheClip:function(t){var e=this._actions;t=t.uuid;var r=this._actionsByClip,n=r[t];if(void 0!==n){for(var n=n.knownActions,i=0,o=n.length;i!==o;++i){var a=n[i];this._deactivateAction(a);var s=a._cacheIndex,c=e[e.length-1];a._cacheIndex=null,a._byClipCacheIndex=null,c._cacheIndex=s,e[s]=c,e.pop(),this._removeInactiveBindingsForAction(a)}delete r[t]}},uncacheRoot:function(t){t=t.uuid;var e,r=this._actionsByClip;for(e in r){var n=r[e].actionByRoot[t];void 0!==n&&(this._deactivateAction(n),this._removeInactiveAction(n))}if(void 0!==(e=this._bindingsByRootAndName[t]))for(var i in e)t=e[i],t.restoreOriginalState(),this._removeInactiveBinding(t)},uncacheAction:function(t,e){var r=this.existingAction(t,e);null!==r&&(this._deactivateAction(r),this._removeInactiveAction(r))}}),Object.assign(xn.prototype,{_bindAction:function(t,e){var r=t._localRoot||this._root,n=t._clip.tracks,i=n.length,o=t._propertyBindings,a=t._interpolants,s=r.uuid,c=this._bindingsByRootAndName,u=c[s];for(void 0===u&&(u={},c[s]=u),c=0;c!==i;++c){var h=n[c],l=h.name,p=u[l];if(void 0===p){if(void 0!==(p=o[c])){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,s,l));continue}p=new gn(yn.create(r,l,e&&e._propertyBindings[c].binding.parsedPath),h.ValueTypeName,h.getValueSize()),++p.referenceCount,this._addInactiveBinding(p,s,l)}o[c]=p,a[c].resultBuffer=p.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){var e=(t._localRoot||this._root).uuid,r=t._clip.uuid,n=this._actionsByClip[r];this._bindAction(t,n&&n.knownActions[0]),this._addInactiveAction(t,r,e)}for(e=t._propertyBindings,r=0,n=e.length;r!==n;++r){var i=e[r];0==i.useCount++&&(this._lendBinding(i),i.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){for(var e=t._propertyBindings,r=0,n=e.length;r!==n;++r){var i=e[r];0==--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;var t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){return null!==(t=t._cacheIndex)&&t<this._nActiveActions},_addInactiveAction:function(t,e,r){var n=this._actions,i=this._actionsByClip,o=i[e];void 0===o?(o={knownActions:[t],actionByRoot:{}},t._byClipCacheIndex=0,i[e]=o):(e=o.knownActions,t._byClipCacheIndex=e.length,e.push(t)),t._cacheIndex=n.length,n.push(t),o.actionByRoot[r]=t},_removeInactiveAction:function(t){var e=this._actions,r=e[e.length-1],n=t._cacheIndex;r._cacheIndex=n,e[n]=r,e.pop(),t._cacheIndex=null;var r=t._clip.uuid,n=this._actionsByClip,i=n[r],o=i.knownActions,a=o[o.length-1],s=t._byClipCacheIndex;a._byClipCacheIndex=s,o[s]=a,o.pop(),t._byClipCacheIndex=null,delete i.actionByRoot[(e._localRoot||this._root).uuid],0===o.length&&delete n[r],this._removeInactiveBindingsForAction(t)},_removeInactiveBindingsForAction:function(t){t=t._propertyBindings;for(var e=0,r=t.length;e!==r;++e){var n=t[e];0==--n.referenceCount&&this._removeInactiveBinding(n)}},_lendAction:function(t){var e=this._actions,r=t._cacheIndex,n=this._nActiveActions++,i=e[n];t._cacheIndex=n,e[n]=t,i._cacheIndex=r,e[r]=i},_takeBackAction:function(t){var e=this._actions,r=t._cacheIndex,n=--this._nActiveActions,i=e[n];t._cacheIndex=n,e[n]=t,i._cacheIndex=r,e[r]=i},_addInactiveBinding:function(t,e,r){var n=this._bindingsByRootAndName,i=n[e],o=this._bindings;void 0===i&&(i={},n[e]=i),i[r]=t,t._cacheIndex=o.length,o.push(t)},_removeInactiveBinding:function(t){var e=this._bindings,r=t.binding,n=r.rootNode.uuid,r=r.path,i=this._bindingsByRootAndName,o=i[n],a=e[e.length-1];t=t._cacheIndex,a._cacheIndex=t,e[t]=a,e.pop(),delete o[r];t:{for(var s in o)break t;delete i[n]}},_lendBinding:function(t){var e=this._bindings,r=t._cacheIndex,n=this._nActiveBindings++,i=e[n];t._cacheIndex=n,e[n]=t,i._cacheIndex=r,e[r]=i},_takeBackBinding:function(t){var e=this._bindings,r=t._cacheIndex,n=--this._nActiveBindings,i=e[n];t._cacheIndex=n,e[n]=t,i._cacheIndex=r,e[r]=i},_lendControlInterpolant:function(){var t=this._controlInterpolants,e=this._nActiveControlInterpolants++,r=t[e];return void 0===r&&(r=new Lr(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer),r.__cacheIndex=e,t[e]=r),r},_takeBackControlInterpolant:function(t){var e=this._controlInterpolants,r=t.__cacheIndex,n=--this._nActiveControlInterpolants,i=e[n];t.__cacheIndex=n,e[n]=t,i.__cacheIndex=r,e[r]=i},_controlInterpolantsResultBuffer:new Float32Array(1)}),wn.prototype.clone=function(){return new wn(void 0===this.value.clone?this.value:this.value.clone())},Sn.prototype=Object.create(wt.prototype),Sn.prototype.constructor=Sn,Sn.prototype.isInstancedBufferGeometry=!0,Sn.prototype.addGroup=function(t,e,r){this.groups.push({start:t,count:e,materialIndex:r})},Sn.prototype.copy=function(t){var e=t.index;null!==e&&this.setIndex(e.clone());var r,e=t.attributes;for(r in e)this.addAttribute(r,e[r].clone());for(t=t.groups,r=0,e=t.length;r<e;r++){var n=t[r];this.addGroup(n.start,n.count,n.materialIndex)}return this},Mn.prototype={constructor:Mn,isInterleavedBufferAttribute:!0,get count(){return this.data.count},get array(){return this.data.array},setX:function(t,e){return this.data.array[t*this.data.stride+this.offset]=e,this},setY:function(t,e){return this.data.array[t*this.data.stride+this.offset+1]=e,this},setZ:function(t,e){return this.data.array[t*this.data.stride+this.offset+2]=e,this},setW:function(t,e){return this.data.array[t*this.data.stride+this.offset+3]=e,this},getX:function(t){return this.data.array[t*this.data.stride+this.offset]},getY:function(t){return this.data.array[t*this.data.stride+this.offset+1]},getZ:function(t){return this.data.array[t*this.data.stride+this.offset+2]},getW:function(t){return this.data.array[t*this.data.stride+this.offset+3]},setXY:function(t,e,r){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=r,this},setXYZ:function(t,e,r,n){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=r,this.data.array[t+2]=n,this},setXYZW:function(t,e,r,n,i){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=r,this.data.array[t+2]=n,this.data.array[t+3]=i,this}},En.prototype={constructor:En,isInterleavedBuffer:!0,set needsUpdate(t){!0===t&&this.version++},setArray:function(t){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.count=void 0!==t?t.length/this.stride:0,this.array=t},setDynamic:function(t){return this.dynamic=t,this},copy:function(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.dynamic=t.dynamic,this},copyAt:function(t,e,r){t*=this.stride,r*=e.stride;for(var n=0,i=this.stride;n<i;n++)this.array[t+n]=e.array[r+n];return this},set:function(t,e){return void 0===e&&(e=0),this.array.set(t,e),this},clone:function(){return(new this.constructor).copy(this)},onUpload:function(t){return this.onUploadCallback=t,this}},Tn.prototype=Object.create(En.prototype),Tn.prototype.constructor=Tn,Tn.prototype.isInstancedInterleavedBuffer=!0,Tn.prototype.copy=function(t){return En.prototype.copy.call(this,t),this.meshPerAttribute=t.meshPerAttribute,this},Cn.prototype=Object.create(ht.prototype),Cn.prototype.constructor=Cn,Cn.prototype.isInstancedBufferAttribute=!0,Cn.prototype.copy=function(t){return ht.prototype.copy.call(this,t),this.meshPerAttribute=t.meshPerAttribute,this},On.prototype={constructor:On,linePrecision:1,set:function(t,e){this.ray.set(t,e)},setFromCamera:function(t,e){e&&e.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(e.matrixWorld),this.ray.direction.set(t.x,t.y,.5).unproject(e).sub(this.ray.origin).normalize()):e&&e.isOrthographicCamera?(this.ray.origin.set(t.x,t.y,(e.near+e.far)/(e.near-e.far)).unproject(e),this.ray.direction.set(0,0,-1).transformDirection(e.matrixWorld)):console.error("THREE.Raycaster: Unsupported camera type.")},intersectObject:function(t,e){var r=[];return An(t,this,r,e),r.sort(Pn),r},intersectObjects:function(t,e){var r=[];if(!1===Array.isArray(t))return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."),r;for(var n=0,i=t.length;n<i;n++)An(t[n],this,r,e);return r.sort(Pn),r}},jn.prototype={constructor:jn,start:function(){this.oldTime=this.startTime=(performance||Date).now(),this.elapsedTime=0,this.running=!0},stop:function(){this.getElapsedTime(),this.running=!1},getElapsedTime:function(){return this.getDelta(),this.elapsedTime},getDelta:function(){var t=0;if(this.autoStart&&!this.running&&this.start(),this.running){var e=(performance||Date).now(),t=(e-this.oldTime)/1e3;this.oldTime=e,this.elapsedTime+=t}return t}},Rn.prototype={constructor:Rn,set:function(t,e,r){return this.radius=t,this.phi=e,this.theta=r,this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.radius=t.radius,this.phi=t.phi,this.theta=t.theta,this},makeSafe:function(){return this.phi=Math.max(1e-6,Math.min(Math.PI-1e-6,this.phi)),this},setFromVector3:function(t){return this.radius=t.length(),0===this.radius?this.phi=this.theta=0:(this.theta=Math.atan2(t.x,t.z),this.phi=Math.acos(ri.clamp(t.y/this.radius,-1,1))),this}},Ln.prototype={constructor:Ln,set:function(t,e,r){return this.radius=t,this.theta=e,this.y=r,this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.radius=t.radius,this.theta=t.theta,this.y=t.y,this},setFromVector3:function(t){return this.radius=Math.sqrt(t.x*t.x+t.z*t.z),this.theta=Math.atan2(t.x,t.z),this.y=t.y,this}},Nn.prototype=Object.create(St.prototype),Nn.prototype.constructor=Nn,Nn.prototype.createAnimation=function(t,e,r,n){e={start:e,end:r,length:r-e+1,fps:n,duration:(r-e)/n,lastFrame:0,currentFrame:0,active:!1,time:0,direction:1,weight:1,directionBackwards:!1,mirroredLoop:!1},this.animationsMap[t]=e,this.animationsList.push(e)},Nn.prototype.autoCreateAnimations=function(t){for(var e,r=/([a-z]+)_?(\d+)/i,n={},i=this.geometry,o=0,a=i.morphTargets.length;o<a;o++){var s=i.morphTargets[o].name.match(r);if(s&&1<s.length){var c=s[1];n[c]||(n[c]={start:1/0,end:-1/0}),s=n[c],o<s.start&&(s.start=o),o>s.end&&(s.end=o),e||(e=c)}}for(c in n)s=n[c],this.createAnimation(c,s.start,s.end,t);this.firstAnimation=e},Nn.prototype.setAnimationDirectionForward=function(t){(t=this.animationsMap[t])&&(t.direction=1,t.directionBackwards=!1)},Nn.prototype.setAnimationDirectionBackward=function(t){
+(t=this.animationsMap[t])&&(t.direction=-1,t.directionBackwards=!0)},Nn.prototype.setAnimationFPS=function(t,e){var r=this.animationsMap[t];r&&(r.fps=e,r.duration=(r.end-r.start)/r.fps)},Nn.prototype.setAnimationDuration=function(t,e){var r=this.animationsMap[t];r&&(r.duration=e,r.fps=(r.end-r.start)/r.duration)},Nn.prototype.setAnimationWeight=function(t,e){var r=this.animationsMap[t];r&&(r.weight=e)},Nn.prototype.setAnimationTime=function(t,e){var r=this.animationsMap[t];r&&(r.time=e)},Nn.prototype.getAnimationTime=function(t){var e=0;return(t=this.animationsMap[t])&&(e=t.time),e},Nn.prototype.getAnimationDuration=function(t){var e=-1;return(t=this.animationsMap[t])&&(e=t.duration),e},Nn.prototype.playAnimation=function(t){var e=this.animationsMap[t];e?(e.time=0,e.active=!0):console.warn("THREE.MorphBlendMesh: animation["+t+"] undefined in .playAnimation()")},Nn.prototype.stopAnimation=function(t){(t=this.animationsMap[t])&&(t.active=!1)},Nn.prototype.update=function(t){for(var e=0,r=this.animationsList.length;e<r;e++){var n=this.animationsList[e];if(n.active){var i=n.duration/n.length;n.time+=n.direction*t,n.mirroredLoop?(n.time>n.duration||0>n.time)&&(n.direction*=-1,n.time>n.duration&&(n.time=n.duration,n.directionBackwards=!0),0>n.time&&(n.time=0,n.directionBackwards=!1)):(n.time%=n.duration,0>n.time&&(n.time+=n.duration));var o=n.start+ri.clamp(Math.floor(n.time/i),0,n.length-1),a=n.weight;o!==n.currentFrame&&(this.morphTargetInfluences[n.lastFrame]=0,this.morphTargetInfluences[n.currentFrame]=1*a,this.morphTargetInfluences[o]=0,n.lastFrame=n.currentFrame,n.currentFrame=o),i=n.time%i/i,n.directionBackwards&&(i=1-i),n.currentFrame!==n.lastFrame?(this.morphTargetInfluences[n.currentFrame]=i*a,this.morphTargetInfluences[n.lastFrame]=(1-i)*a):this.morphTargetInfluences[n.currentFrame]=a}}},In.prototype=Object.create(ot.prototype),In.prototype.constructor=In,In.prototype.isImmediateRenderObject=!0,Dn.prototype=Object.create(fe.prototype),Dn.prototype.constructor=Dn,Dn.prototype.update=function(){var t=new c,e=new c,r=new J;return function(){var n=["a","b","c"];this.object.updateMatrixWorld(!0),r.getNormalMatrix(this.object.matrixWorld);var i=this.object.matrixWorld,o=this.geometry.attributes.position,a=this.object.geometry;if(a&&a.isGeometry)for(var s=a.vertices,c=a.faces,u=a=0,h=c.length;u<h;u++)for(var l=c[u],p=0,f=l.vertexNormals.length;p<f;p++){var d=l.vertexNormals[p];t.copy(s[l[n[p]]]).applyMatrix4(i),e.copy(d).applyMatrix3(r).normalize().multiplyScalar(this.size).add(t),o.setXYZ(a,t.x,t.y,t.z),a+=1,o.setXYZ(a,e.x,e.y,e.z),a+=1}else if(a&&a.isBufferGeometry)for(n=a.attributes.position,s=a.attributes.normal,p=a=0,f=n.count;p<f;p++)t.set(n.getX(p),n.getY(p),n.getZ(p)).applyMatrix4(i),e.set(s.getX(p),s.getY(p),s.getZ(p)),e.applyMatrix3(r).normalize().multiplyScalar(this.size).add(t),o.setXYZ(a,t.x,t.y,t.z),a+=1,o.setXYZ(a,e.x,e.y,e.z),a+=1;return o.needsUpdate=!0,this}}(),kn.prototype=Object.create(ot.prototype),kn.prototype.constructor=kn,kn.prototype.dispose=function(){this.cone.geometry.dispose(),this.cone.material.dispose()},kn.prototype.update=function(){var t=new c,e=new c;return function(){var r=this.light.distance?this.light.distance:1e3,n=r*Math.tan(this.light.angle);this.cone.scale.set(n,n,r),t.setFromMatrixPosition(this.light.matrixWorld),e.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(e.sub(t)),this.cone.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)}}(),Fn.prototype=Object.create(fe.prototype),Fn.prototype.constructor=Fn,Fn.prototype.getBoneList=function(t){var e=[];t&&t.isBone&&e.push(t);for(var r=0;r<t.children.length;r++)e.push.apply(e,this.getBoneList(t.children[r]));return e},Fn.prototype.update=function(){var t=new c,e=new u,r=new u;return function(){var n=this.geometry,i=n.getAttribute("position");r.getInverse(this.root.matrixWorld);for(var o=0,a=0;o<this.bones.length;o++){var s=this.bones[o];s.parent&&s.parent.isBone&&(e.multiplyMatrices(r,s.matrixWorld),t.setFromMatrixPosition(e),i.setXYZ(a,t.x,t.y,t.z),e.multiplyMatrices(r,s.parent.matrixWorld),t.setFromMatrixPosition(e),i.setXYZ(a+1,t.x,t.y,t.z),a+=2)}n.getAttribute("position").needsUpdate=!0}}(),Un.prototype=Object.create(St.prototype),Un.prototype.constructor=Un,Un.prototype.dispose=function(){this.geometry.dispose(),this.material.dispose()},Un.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)},Bn.prototype=Object.create(ot.prototype),Bn.prototype.constructor=Bn,Bn.prototype.dispose=function(){this.children[0].geometry.dispose(),this.children[0].material.dispose(),this.children[1].geometry.dispose(),this.children[1].material.dispose()},Bn.prototype.update=function(){var t=new c,e=new c;return function(){var r=this.children[0],n=this.children[1];if(this.light.target){t.setFromMatrixPosition(this.light.matrixWorld),e.setFromMatrixPosition(this.light.target.matrixWorld);var i=e.clone().sub(t);r.lookAt(i),n.lookAt(i)}r.material.color.copy(this.light.color).multiplyScalar(this.light.intensity),n.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);var n=.5*this.light.width,i=.5*this.light.height,r=r.geometry.getAttribute("position"),o=r.array;o[0]=n,o[1]=-i,o[2]=0,o[3]=n,o[4]=i,o[5]=0,o[6]=-n,o[7]=i,o[8]=0,o[9]=-n,o[10]=i,o[11]=0,o[12]=-n,o[13]=-i,o[14]=0,o[15]=n,o[16]=-i,o[17]=0,r.needsUpdate=!0}}(),zn.prototype=Object.create(ot.prototype),zn.prototype.constructor=zn,zn.prototype.dispose=function(){this.children[0].geometry.dispose(),this.children[0].material.dispose()},zn.prototype.update=function(){var t=new c,e=new G,r=new G;return function(){var n=this.children[0],i=n.geometry.getAttribute("color");e.copy(this.light.color).multiplyScalar(this.light.intensity),r.copy(this.light.groundColor).multiplyScalar(this.light.intensity);for(var o=0,a=i.count;o<a;o++){var s=o<a/2?e:r;i.setXYZ(o,s.r,s.g,s.b)}n.lookAt(t.setFromMatrixPosition(this.light.matrixWorld).negate()),i.needsUpdate=!0}}(),Gn.prototype=Object.create(fe.prototype),Gn.prototype.constructor=Gn,$n.prototype=Object.create(fe.prototype),$n.prototype.constructor=$n,Vn.prototype=Object.create(fe.prototype),Vn.prototype.constructor=Vn,Vn.prototype.update=function(){var t=new c,e=new c,r=new J;return function(){this.object.updateMatrixWorld(!0),r.getNormalMatrix(this.object.matrixWorld);for(var n=this.object.matrixWorld,i=this.geometry.attributes.position,o=this.object.geometry,a=o.vertices,o=o.faces,s=0,c=0,u=o.length;c<u;c++){var h=o[c],l=h.normal;t.copy(a[h.a]).add(a[h.b]).add(a[h.c]).divideScalar(3).applyMatrix4(n),e.copy(l).applyMatrix3(r).normalize().multiplyScalar(this.size).add(t),i.setXYZ(s,t.x,t.y,t.z),s+=1,i.setXYZ(s,e.x,e.y,e.z),s+=1}return i.needsUpdate=!0,this}}(),Hn.prototype=Object.create(ot.prototype),Hn.prototype.constructor=Hn,Hn.prototype.dispose=function(){var t=this.children[0],e=this.children[1];t.geometry.dispose(),t.material.dispose(),e.geometry.dispose(),e.material.dispose()},Hn.prototype.update=function(){var t=new c,e=new c,r=new c;return function(){t.setFromMatrixPosition(this.light.matrixWorld),e.setFromMatrixPosition(this.light.target.matrixWorld),r.subVectors(e,t);var n=this.children[0],i=this.children[1];n.lookAt(r),n.material.color.copy(this.light.color).multiplyScalar(this.light.intensity),i.lookAt(r),i.scale.z=r.length()}}(),Wn.prototype=Object.create(fe.prototype),Wn.prototype.constructor=Wn,Wn.prototype.update=function(){function t(t,o,a,s){if(n.set(o,a,s).unproject(i),void 0!==(t=r[t]))for(o=e.getAttribute("position"),a=0,s=t.length;a<s;a++)o.setXYZ(t[a],n.x,n.y,n.z)}var e,r,n=new c,i=new Tt;return function(){e=this.geometry,r=this.pointMap,i.projectionMatrix.copy(this.camera.projectionMatrix),t("c",0,0,-1),t("t",0,0,1),t("n1",-1,-1,-1),t("n2",1,-1,-1),t("n3",-1,1,-1),t("n4",1,1,-1),t("f1",-1,-1,1),t("f2",1,-1,1),t("f3",-1,1,1),t("f4",1,1,1),t("u1",.7,1.1,-1),t("u2",-.7,1.1,-1),t("u3",0,2,-1),t("cf1",-1,0,1),t("cf2",1,0,1),t("cf3",0,-1,1),t("cf4",0,1,1),t("cn1",-1,0,-1),t("cn2",1,0,-1),t("cn3",0,-1,-1),t("cn4",0,1,-1),e.getAttribute("position").needsUpdate=!0}}(),qn.prototype=Object.create(fe.prototype),qn.prototype.constructor=qn,qn.prototype.update=function(){var t=new K;return function(e){if(e&&e.isBox3?t.copy(e):t.setFromObject(e),!t.isEmpty()){e=t.min;var r=t.max,n=this.geometry.attributes.position,i=n.array;i[0]=r.x,i[1]=r.y,i[2]=r.z,i[3]=e.x,i[4]=r.y,i[5]=r.z,i[6]=e.x,i[7]=e.y,i[8]=r.z,i[9]=r.x,i[10]=e.y,i[11]=r.z,i[12]=r.x,i[13]=r.y,i[14]=e.z,i[15]=e.x,i[16]=r.y,i[17]=e.z,i[18]=e.x,i[19]=e.y,i[20]=e.z,i[21]=r.x,i[22]=e.y,i[23]=e.z,n.needsUpdate=!0,this.geometry.computeBoundingSphere()}}}();var Pi=new wt;Pi.addAttribute("position",new yt([0,0,0,0,1,0],3));var Ai=new Je(0,.5,1,5,1);Ai.translate(0,-.5,0),Xn.prototype=Object.create(ot.prototype),Xn.prototype.constructor=Xn,Xn.prototype.setDirection=function(){var t,e=new c;return function(r){.99999<r.y?this.quaternion.set(0,0,0,1):-.99999>r.y?this.quaternion.set(1,0,0,0):(e.set(r.z,0,-r.x).normalize(),t=Math.acos(r.y),this.quaternion.setFromAxisAngle(e,t))}}(),Xn.prototype.setLength=function(t,e,r){void 0===e&&(e=.2*t),void 0===r&&(r=.2*e),this.line.scale.set(1,Math.max(0,t-e),1),this.line.updateMatrix(),this.cone.scale.set(r,e,r),this.cone.position.y=t,this.cone.updateMatrix()},Xn.prototype.setColor=function(t){this.line.material.color.copy(t),this.cone.material.color.copy(t)},Yn.prototype=Object.create(fe.prototype),Yn.prototype.constructor=Yn;var ji=function(){function t(){}var e=new c,r=new t,n=new t,i=new t;return t.prototype.init=function(t,e,r,n){this.c0=t,this.c1=r,this.c2=-3*t+3*e-2*r-n,this.c3=2*t-2*e+r+n},t.prototype.initNonuniformCatmullRom=function(t,e,r,n,i,o,a){this.init(e,r,((e-t)/i-(r-t)/(i+o)+(r-e)/o)*o,((r-e)/o-(n-e)/(o+a)+(n-r)/a)*o)},t.prototype.initCatmullRom=function(t,e,r,n,i){this.init(e,r,i*(r-t),i*(n-e))},t.prototype.calc=function(t){var e=t*t;return this.c0+this.c1*t+this.c2*e+this.c3*e*t},Kr.create(function(t){this.points=t||[],this.closed=!1},function(t){var o,a,s=this.points;a=s.length,2>a&&console.log("duh, you need at least 2 points"),t*=a-(this.closed?0:1),o=Math.floor(t),t-=o,this.closed?o+=0<o?0:(Math.floor(Math.abs(o)/s.length)+1)*s.length:0===t&&o===a-1&&(o=a-2,t=1);var u,h,l;if(this.closed||0<o?u=s[(o-1)%a]:(e.subVectors(s[0],s[1]).add(s[0]),u=e),h=s[o%a],l=s[(o+1)%a],this.closed||o+2<a?s=s[(o+2)%a]:(e.subVectors(s[a-1],s[a-2]).add(s[a-1]),s=e),void 0===this.type||"centripetal"===this.type||"chordal"===this.type){var p="chordal"===this.type?.5:.25;a=Math.pow(u.distanceToSquared(h),p),o=Math.pow(h.distanceToSquared(l),p),p=Math.pow(l.distanceToSquared(s),p),1e-4>o&&(o=1),1e-4>a&&(a=o),1e-4>p&&(p=o),r.initNonuniformCatmullRom(u.x,h.x,l.x,s.x,a,o,p),n.initNonuniformCatmullRom(u.y,h.y,l.y,s.y,a,o,p),i.initNonuniformCatmullRom(u.z,h.z,l.z,s.z,a,o,p)}else"catmullrom"===this.type&&(a=void 0!==this.tension?this.tension:.5,r.initCatmullRom(u.x,h.x,l.x,s.x,a),n.initCatmullRom(u.y,h.y,l.y,s.y,a),i.initCatmullRom(u.z,h.z,l.z,s.z,a));return new c(r.calc(t),n.calc(t),i.calc(t))})}(),Ri=Kr.create(function(t){console.warn("THREE.SplineCurve3 will be deprecated. Please use THREE.CatmullRomCurve3"),this.points=void 0===t?[]:t},function(t){var e=this.points;t*=e.length-1;var r=Math.floor(t);t-=r;var n=e[0==r?r:r-1],i=e[r],o=e[r>e.length-2?e.length-1:r+1],e=e[r>e.length-3?e.length-1:r+2],r=Ei.interpolate;return new c(r(n.x,i.x,o.x,e.x,t),r(n.y,i.y,o.y,e.y,t),r(n.z,i.z,o.z,e.z,t))}),Li=Kr.create(function(t,e,r,n){this.v0=t,this.v1=e,this.v2=r,this.v3=n},function(t){var e=yi.b3;return new c(e(t,this.v0.x,this.v1.x,this.v2.x,this.v3.x),e(t,this.v0.y,this.v1.y,this.v2.y,this.v3.y),e(t,this.v0.z,this.v1.z,this.v2.z,this.v3.z))}),Ni=Kr.create(function(t,e,r){this.v0=t,this.v1=e,this.v2=r},function(t){var e=yi.b2;return new c(e(t,this.v0.x,this.v1.x,this.v2.x),e(t,this.v0.y,this.v1.y,this.v2.y),e(t,this.v0.z,this.v1.z,this.v2.z))}),Ii=Kr.create(function(t,e){this.v1=t,this.v2=e},function(t){if(1===t)return this.v2.clone();var e=new c;return e.subVectors(this.v2,this.v1),e.multiplyScalar(t),e.add(this.v1),e});Kn.prototype=Object.create(Qr.prototype),Kn.prototype.constructor=Kn,Zn.prototype=Object.create(ji.prototype),Gn.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")},Object.assign(V.prototype,{center:function(t){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},size:function(t){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(K.prototype,{center:function(t){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionSphere:function(t){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},size:function(t){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(t)}}),at.prototype.center=function(t){return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),this.getCenter(t)},ri.random16=function(){return console.warn("THREE.Math.random16() has been deprecated. Use Math.random() instead."),Math.random()},Object.assign(J.prototype,{flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},multiplyVector3:function(t){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},multiplyVector3Array:function(t){return console.warn("THREE.Matrix3: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead."),this.applyToVector3Array(t)},applyToBuffer:function(t,e,r){return console.warn("THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead."),this.applyToBufferAttribute(t)}}),Object.assign(u.prototype,{extractPosition:function(t){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(t)},flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},getPosition:function(){var t;return function(){return void 0===t&&(t=new c),console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),t.setFromMatrixColumn(this,3)}}(),setRotationFromQuaternion:function(t){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(t)},multiplyVector3:function(t){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead."),t.applyProjection(this)},multiplyVector4:function(t){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector3Array:function(t){return console.warn("THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead."),this.applyToVector3Array(t)},rotateAxis:function(t){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),t.transformDirection(this)},crossVector:function(t){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},rotateY:function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},rotateByAxis:function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},applyToBuffer:function(t,e,r){return console.warn("THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead."),this.applyToBufferAttribute(t)}}),Q.prototype.isIntersectionLine=function(t){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(t)},s.prototype.multiplyVector3=function(t){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),t.applyQuaternion(this)},Object.assign(rt.prototype,{isIntersectionBox:function(t){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionPlane:function(t){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(t)},isIntersectionSphere:function(t){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)}}),Object.assign(nn.prototype,{extrude:function(t){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new Be(this,t)},makeGeometry:function(t){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new Ke(this,t)}}),Object.assign(c.prototype,{setEulerFromRotationMatrix:function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},getPositionFromMatrix:function(t){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(t)},getScaleFromMatrix:function(t){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(t)},getColumnFromMatrix:function(t,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(e,t)}}),xt.prototype.computeTangents=function(){console.warn("THREE.Geometry: .computeTangents() has been removed.")},Object.assign(ot.prototype,{getChildByName:function(t){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(t)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(t,e){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(e,t)}}),Object.defineProperties(ot.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(t){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=t}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),Object.defineProperties(se.prototype,{objects:{get:function(){return console.warn("THREE.LOD: .objects has been renamed to .levels."),this.levels}}}),Ct.prototype.setLens=function(t,e){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(wr.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(t){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(t){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(t){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=t}}}),Object.defineProperties(ht.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}}}),Object.assign(wt.prototype,{addIndex:function(t){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(t)},addDrawCall:function(t,e,r){void 0!==r&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(t,e)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},computeTangents:function(){console.warn("THREE.BufferGeometry: .computeTangents() has been removed.")},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")}}),Object.defineProperties(wt.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),Object.defineProperties(wn.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this}}}),Object.defineProperties(q.prototype,{wrapAround:{get:function(){console.warn("THREE."+this.type+": .wrapAround has been removed.")},set:function(){console.warn("THREE."+this.type+": .wrapAround has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE."+this.type+": .wrapRGB has been removed."),new G}}}),Object.defineProperties(hr.prototype,{metal:{get:function(){return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."),!1},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}}),Object.defineProperties(X.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(t){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=t}}}),e.prototype=Object.assign(Object.create({constructor:e,apply:function(t){console.warn("THREE.EventDispatcher: .apply is deprecated, just inherit or Object.assign the prototype to mix-in."),Object.assign(t,this)}}),e.prototype),Object.assign(te.prototype,{supportsFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},supportsCompressedTexturePVRTC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},supportsInstancedArrays:function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(t){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(t)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")}}),Object.defineProperties(te.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){return this.shadowMap.cullFace},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapCullFace is now .shadowMap.cullFace."),this.shadowMap.cullFace=t}}}),Object.defineProperties(et.prototype,{cullFace:{get:function(){return this.renderReverseSided?2:1},set:function(t){t=1!==t,console.warn("WebGLRenderer: .shadowMap.cullFace is deprecated. Set .shadowMap.renderReverseSided to "+t+"."),this.renderReverseSided=t}}}),Object.defineProperties(o.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(t){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=t}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(t){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=t}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(t){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=t}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(t){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=t}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(t){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(t){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=t}}}),dn.prototype.load=function(t){console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");var e=this;return(new un).load(t,function(t){e.setBuffer(t)}),this},vn.prototype.getData=function(){return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."),this.getFrequencyData()},t.WebGLRenderTargetCube=a,t.WebGLRenderTarget=o,t.WebGLRenderer=te,t.ShaderLib=fi,t.UniformsLib=pi,t.UniformsUtils=ui,t.ShaderChunk=hi,t.FogExp2=ee,t.Fog=re,t.Scene=ne,t.LensFlare=ie,t.Sprite=ae,t.LOD=se,t.SkinnedMesh=he,t.Skeleton=ce,t.Bone=ue,t.Mesh=St,t.LineSegments=fe,t.Line=pe,t.Points=me,t.Group=ve,t.VideoTexture=ge,t.DataTexture=$,t.CompressedTexture=ye,t.CubeTexture=h,t.CanvasTexture=be,t.DepthTexture=_e,t.Texture=n,t.CompressedTextureLoader=gr,t.BinaryTextureLoader=yr,t.DataTextureLoader=yr,t.CubeTextureLoader=_r,t.TextureLoader=xr,t.ObjectLoader=Yr,t.MaterialLoader=Hr,t.BufferGeometryLoader=Wr,t.DefaultLoadingManager=wi,t.LoadingManager=mr,t.JSONLoader=Xr,t.ImageLoader=br,t.FontLoader=cn,t.FileLoader=vr,t.Loader=qr,t.Cache=xi,t.AudioLoader=un,t.SpotLightShadow=Er,t.SpotLight=Tr,t.PointLight=Cr,t.RectAreaLight=hn,t.HemisphereLight=Sr,t.DirectionalLightShadow=Or,t.DirectionalLight=Pr,t.AmbientLight=Ar,t.LightShadow=Mr,t.Light=wr,t.StereoCamera=ln,t.PerspectiveCamera=Ct,t.OrthographicCamera=Ot,t.CubeCamera=pn,t.Camera=Tt,t.AudioListener=fn,t.PositionalAudio=mn,t.AudioContext=Oi,t.AudioAnalyser=vn,t.Audio=dn,t.VectorKeyframeTrack=Dr,t.StringKeyframeTrack=Br,t.QuaternionKeyframeTrack=Fr,t.NumberKeyframeTrack=Ur,t.ColorKeyframeTrack=Gr,t.BooleanKeyframeTrack=zr,t.PropertyMixer=gn,t.PropertyBinding=yn,t.KeyframeTrack=$r,t.AnimationUtils=Si,t.AnimationObjectGroup=bn,t.AnimationMixer=xn,t.AnimationClip=Vr,
+t.Uniform=wn,t.InstancedBufferGeometry=Sn,t.BufferGeometry=wt,t.GeometryIdCount=function(){return vi++},t.Geometry=xt,t.InterleavedBufferAttribute=Mn,t.InstancedInterleavedBuffer=Tn,t.InterleavedBuffer=En,t.InstancedBufferAttribute=Cn,t.Face3=ct,t.Object3D=ot,t.Raycaster=On,t.Layers=it,t.EventDispatcher=e,t.Clock=jn,t.QuaternionLinearInterpolant=kr,t.LinearInterpolant=Lr,t.DiscreteInterpolant=Nr,t.CubicInterpolant=Rr,t.Interpolant=jr,t.Triangle=st,t.Spline=function(t){function e(t,e,r,n,i,o,a){return t=.5*(r-t),n=.5*(n-e),(2*(e-r)+t+n)*a+(-3*(e-r)-2*t-n)*o+t*i+e}this.points=t;var r,n,i,o,a,s,u,h,l,p=[],f={x:0,y:0,z:0};this.initFromArray=function(t){this.points=[];for(var e=0;e<t.length;e++)this.points[e]={x:t[e][0],y:t[e][1],z:t[e][2]}},this.getPoint=function(t){return r=(this.points.length-1)*t,n=Math.floor(r),i=r-n,p[0]=0===n?n:n-1,p[1]=n,p[2]=n>this.points.length-2?this.points.length-1:n+1,p[3]=n>this.points.length-3?this.points.length-1:n+2,s=this.points[p[0]],u=this.points[p[1]],h=this.points[p[2]],l=this.points[p[3]],o=i*i,a=i*o,f.x=e(s.x,u.x,h.x,l.x,i,o,a),f.y=e(s.y,u.y,h.y,l.y,i,o,a),f.z=e(s.z,u.z,h.z,l.z,i,o,a),f},this.getControlPointsArray=function(){var t,e,r=this.points.length,n=[];for(t=0;t<r;t++)e=this.points[t],n[t]=[e.x,e.y,e.z];return n},this.getLength=function(t){var e,r,n,i=0,o=new c,a=new c,s=[],u=0;for(s[0]=0,t||(t=100),r=this.points.length*t,o.copy(this.points[0]),t=1;t<r;t++)e=t/r,n=this.getPoint(e),a.copy(n),u+=a.distanceTo(o),o.copy(n),e*=this.points.length-1,(e=Math.floor(e))!==i&&(s[e]=u,i=e);return s[s.length]=u,{chunks:s,total:u}},this.reparametrizeByArcLength=function(t){var e,r,n,i,o,a,s=[],u=new c,h=this.getLength();for(s.push(u.copy(this.points[0]).clone()),e=1;e<this.points.length;e++){for(r=h.chunks[e]-h.chunks[e-1],a=Math.ceil(t*r/h.total),i=(e-1)/(this.points.length-1),o=e/(this.points.length-1),r=1;r<a-1;r++)n=i+1/a*r*(o-i),n=this.getPoint(n),s.push(u.copy(n).clone());s.push(u.copy(this.points[e]).clone())}this.points=s}},t.Math=ri,t.Spherical=Rn,t.Cylindrical=Ln,t.Plane=Q,t.Frustum=tt,t.Sphere=Z,t.Ray=rt,t.Matrix4=u,t.Matrix3=J,t.Box3=K,t.Box2=V,t.Line3=at,t.Euler=nt,t.Vector4=i,t.Vector3=c,t.Vector2=r,t.Quaternion=s,t.Color=G,t.MorphBlendMesh=Nn,t.ImmediateRenderObject=In,t.VertexNormalsHelper=Dn,t.SpotLightHelper=kn,t.SkeletonHelper=Fn,t.PointLightHelper=Un,t.RectAreaLightHelper=Bn,t.HemisphereLightHelper=zn,t.GridHelper=Gn,t.PolarGridHelper=$n,t.FaceNormalsHelper=Vn,t.DirectionalLightHelper=Hn,t.CameraHelper=Wn,t.BoxHelper=qn,t.ArrowHelper=Xn,t.AxisHelper=Yn,t.CatmullRomCurve3=ji,t.SplineCurve3=Ri,t.CubicBezierCurve3=Li,t.QuadraticBezierCurve3=Ni,t.LineCurve3=Ii,t.ArcCurve=Kn,t.EllipseCurve=Qr,t.SplineCurve=tn,t.CubicBezierCurve=en,t.QuadraticBezierCurve=rn,t.LineCurve=Zr,t.Shape=nn,t.ShapePath=an,t.Path=on,t.Font=sn,t.CurvePath=Jr,t.Curve=Kr,t.ShapeUtils=yi,t.SceneUtils={createMultiMaterialObject:function(t,e){for(var r=new ve,n=0,i=e.length;n<i;n++)r.add(new St(t,e[n]));return r},detach:function(t,e,r){t.applyMatrix(e.matrixWorld),e.remove(t),r.add(t)},attach:function(t,e,r){var n=new u;n.getInverse(r.matrixWorld),t.applyMatrix(n),e.remove(t),r.add(t)}},t.CurveUtils=Ei,t.WireframeGeometry=xe,t.ParametricGeometry=Se,t.ParametricBufferGeometry=we,t.TetrahedronGeometry=Te,t.TetrahedronBufferGeometry=Ee,t.OctahedronGeometry=Oe,t.OctahedronBufferGeometry=Ce,t.IcosahedronGeometry=Ae,t.IcosahedronBufferGeometry=Pe,t.DodecahedronGeometry=Re,t.DodecahedronBufferGeometry=je;t.PolyhedronGeometry=Le,t.PolyhedronBufferGeometry=Me,t.TubeGeometry=Ie,t.TubeBufferGeometry=Ne,t.TorusKnotGeometry=ke,t.TorusKnotBufferGeometry=De,t.TorusGeometry=Ue,t.TorusBufferGeometry=Fe,t.TextGeometry=ze,t.SphereBufferGeometry=Ge,t.SphereGeometry=$e,t.RingGeometry=He,t.RingBufferGeometry=Ve,t.PlaneBufferGeometry=Et,t.PlaneGeometry=We,t.LatheGeometry=Xe,t.LatheBufferGeometry=qe,t.ShapeGeometry=Ke,t.ShapeBufferGeometry=Ye,t.ExtrudeGeometry=Be,t.EdgesGeometry=Ze,t.ConeGeometry=tr,t.ConeBufferGeometry=er,t.CylinderGeometry=Qe,t.CylinderBufferGeometry=Je,t.CircleBufferGeometry=rr,t.CircleGeometry=nr,t.BoxBufferGeometry=Mt,t.BoxGeometry=ir,t.ShadowMaterial=or,t.SpriteMaterial=oe,t.RawShaderMaterial=ar,t.ShaderMaterial=X,t.PointsMaterial=de,t.MultiMaterial=sr,t.MeshPhysicalMaterial=ur,t.MeshStandardMaterial=cr,t.MeshPhongMaterial=hr,t.MeshToonMaterial=lr,t.MeshNormalMaterial=pr,t.MeshLambertMaterial=fr,t.MeshDepthMaterial=Y,t.MeshBasicMaterial=ut,t.LineDashedMaterial=dr,t.LineBasicMaterial=le,t.Material=q,t.Float64BufferAttribute=bt,t.Float32BufferAttribute=yt,t.Uint32BufferAttribute=gt,t.Int32BufferAttribute=vt,t.Uint16BufferAttribute=mt,t.Int16BufferAttribute=dt,t.Uint8ClampedBufferAttribute=ft,t.Uint8BufferAttribute=pt,t.Int8BufferAttribute=lt,t.BufferAttribute=ht,t.REVISION="83",t.MOUSE={LEFT:0,MIDDLE:1,RIGHT:2},t.CullFaceNone=0,t.CullFaceBack=1,t.CullFaceFront=2,t.CullFaceFrontBack=3,t.FrontFaceDirectionCW=0,t.FrontFaceDirectionCCW=1,t.BasicShadowMap=0,t.PCFShadowMap=1,t.PCFSoftShadowMap=2,t.FrontSide=0,t.BackSide=1,t.DoubleSide=2,t.FlatShading=1,t.SmoothShading=2,t.NoColors=0,t.FaceColors=1,t.VertexColors=2,t.NoBlending=0,t.NormalBlending=1,t.AdditiveBlending=2,t.SubtractiveBlending=3,t.MultiplyBlending=4,t.CustomBlending=5,t.BlendingMode=Jn,t.AddEquation=100,t.SubtractEquation=101,t.ReverseSubtractEquation=102,t.MinEquation=103,t.MaxEquation=104,t.ZeroFactor=200,t.OneFactor=201,t.SrcColorFactor=202,t.OneMinusSrcColorFactor=203,t.SrcAlphaFactor=204,t.OneMinusSrcAlphaFactor=205,t.DstAlphaFactor=206,t.OneMinusDstAlphaFactor=207,t.DstColorFactor=208,t.OneMinusDstColorFactor=209,t.SrcAlphaSaturateFactor=210,t.NeverDepth=0,t.AlwaysDepth=1,t.LessDepth=2,t.LessEqualDepth=3,t.EqualDepth=4,t.GreaterEqualDepth=5,t.GreaterDepth=6,t.NotEqualDepth=7,t.MultiplyOperation=0,t.MixOperation=1,t.AddOperation=2,t.NoToneMapping=0,t.LinearToneMapping=1,t.ReinhardToneMapping=2,t.Uncharted2ToneMapping=3,t.CineonToneMapping=4,t.UVMapping=300,t.CubeReflectionMapping=301,t.CubeRefractionMapping=302,t.EquirectangularReflectionMapping=303,t.EquirectangularRefractionMapping=304,t.SphericalReflectionMapping=305,t.CubeUVReflectionMapping=306,t.CubeUVRefractionMapping=307,t.TextureMapping=Qn,t.RepeatWrapping=1e3,t.ClampToEdgeWrapping=1001,t.MirroredRepeatWrapping=1002,t.TextureWrapping=ti,t.NearestFilter=1003,t.NearestMipMapNearestFilter=1004,t.NearestMipMapLinearFilter=1005,t.LinearFilter=1006,t.LinearMipMapNearestFilter=1007,t.LinearMipMapLinearFilter=1008,t.TextureFilter=ei,t.UnsignedByteType=1009,t.ByteType=1010,t.ShortType=1011,t.UnsignedShortType=1012,t.IntType=1013,t.UnsignedIntType=1014,t.FloatType=1015,t.HalfFloatType=1016,t.UnsignedShort4444Type=1017,t.UnsignedShort5551Type=1018,t.UnsignedShort565Type=1019,t.UnsignedInt248Type=1020,t.AlphaFormat=1021,t.RGBFormat=1022,t.RGBAFormat=1023,t.LuminanceFormat=1024,t.LuminanceAlphaFormat=1025,t.RGBEFormat=1023,t.DepthFormat=1026,t.DepthStencilFormat=1027,t.RGB_S3TC_DXT1_Format=2001,t.RGBA_S3TC_DXT1_Format=2002,t.RGBA_S3TC_DXT3_Format=2003,t.RGBA_S3TC_DXT5_Format=2004,t.RGB_PVRTC_4BPPV1_Format=2100,t.RGB_PVRTC_2BPPV1_Format=2101,t.RGBA_PVRTC_4BPPV1_Format=2102,t.RGBA_PVRTC_2BPPV1_Format=2103,t.RGB_ETC1_Format=2151,t.LoopOnce=2200,t.LoopRepeat=2201,t.LoopPingPong=2202,t.InterpolateDiscrete=2300,t.InterpolateLinear=2301,t.InterpolateSmooth=2302,t.ZeroCurvatureEnding=2400,t.ZeroSlopeEnding=2401,t.WrapAroundEnding=2402,t.TrianglesDrawMode=0,t.TriangleStripDrawMode=1,t.TriangleFanDrawMode=2,t.LinearEncoding=3e3,t.sRGBEncoding=3001,t.GammaEncoding=3007,t.RGBEEncoding=3002,t.LogLuvEncoding=3003,t.RGBM7Encoding=3004,t.RGBM16Encoding=3005,t.RGBDEncoding=3006,t.BasicDepthPacking=3200,t.RGBADepthPacking=3201,t.CubeGeometry=ir,t.Face4=function(t,e,r,n,i,o,a){return console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead."),new ct(t,e,r,i,o,a)},t.LineStrip=0,t.LinePieces=1,t.MeshFaceMaterial=function(t){return console.warn("THREE.MeshFaceMaterial has been renamed to THREE.MultiMaterial."),new sr(t)},t.PointCloud=function(t,e){return console.warn("THREE.PointCloud has been renamed to THREE.Points."),new me(t,e)},t.Particle=function(t){return console.warn("THREE.Particle has been renamed to THREE.Sprite."),new ae(t)},t.ParticleSystem=function(t,e){return console.warn("THREE.ParticleSystem has been renamed to THREE.Points."),new me(t,e)},t.PointCloudMaterial=function(t){return console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial."),new de(t)},t.ParticleBasicMaterial=function(t){return console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial."),new de(t)},t.ParticleSystemMaterial=function(t){return console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial."),new de(t)},t.Vertex=function(t,e,r){return console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead."),new c(t,e,r)},t.DynamicBufferAttribute=function(t,e){return console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead."),new ht(t,e).setDynamic(!0)},t.Int8Attribute=function(t,e){return console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead."),new lt(t,e)},t.Uint8Attribute=function(t,e){return console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead."),new pt(t,e)};t.Uint8ClampedAttribute=function(t,e){return console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead."),new ft(t,e)},t.Int16Attribute=function(t,e){return console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead."),new dt(t,e)},t.Uint16Attribute=function(t,e){return console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead."),new mt(t,e)},t.Int32Attribute=function(t,e){return console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead."),new vt(t,e)},t.Uint32Attribute=function(t,e){return console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead."),new gt(t,e)},t.Float32Attribute=function(t,e){return console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."),new yt(t,e)},t.Float64Attribute=function(t,e){return console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."),new bt(t,e)},t.ClosedSplineCurve3=Zn,t.BoundingBoxHelper=function(t,e){return console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."),new qn(t,e)},t.EdgesHelper=function(t,e){return console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."),new fe(new Ze(t.geometry),new le({color:void 0!==e?e:16777215}))},t.WireframeHelper=function(t,e){return console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead."),new fe(new xe(t.geometry),new le({color:void 0!==e?e:16777215}))},t.XHRLoader=function(t){return console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader."),new vr(t)},t.GeometryUtils={merge:function(t,e,r){console.warn("THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.");var n;e.isMesh&&(e.matrixAutoUpdate&&e.updateMatrix(),n=e.matrix,e=e.geometry),t.merge(e,n,r)},center:function(t){return console.warn("THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead."),t.center()}},t.ImageUtils={crossOrigin:void 0,loadTexture:function(t,e,r,n){console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.");var i=new xr;return i.setCrossOrigin(this.crossOrigin),t=i.load(t,r,void 0,n),e&&(t.mapping=e),t},loadTextureCube:function(t,e,r,n){console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.");var i=new _r;return i.setCrossOrigin(this.crossOrigin),t=i.load(t,r,void 0,n),e&&(t.mapping=e),t},loadCompressedTexture:function(){console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")},loadCompressedTextureCube:function(){console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")}},t.Projector=function(){console.error("THREE.Projector has been moved to /examples/js/renderers/Projector.js."),this.projectVector=function(t,e){console.warn("THREE.Projector: .projectVector() is now vector.project()."),t.project(e)},this.unprojectVector=function(t,e){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject()."),t.unproject(e)},this.pickingRay=function(){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")}},t.CanvasRenderer=function(){console.error("THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js"),this.domElement=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),this.clear=function(){},this.render=function(){},this.setClearColor=function(){},this.setSize=function(){}},Object.defineProperty(t,"__esModule",{value:!0})})},{}],176:[function(e,r,n){(function(){function e(t){function e(e,r,n,i,o,a){for(;o>=0&&o<a;o+=t){var s=i?i[o]:o;n=r(n,e[s],s,e)}return n}return function(r,n,i,o){n=w(n,o,4);var a=!P(r)&&x.keys(r),s=(a||r).length,c=t>0?0:s-1;return arguments.length<3&&(i=r[a?a[c]:c],c+=t),e(r,n,i,a,c,s)}}function i(t){return function(e,r,n){r=S(r,n);for(var i=O(e),o=t>0?0:i-1;o>=0&&o<i;o+=t)if(r(e[o],o,e))return o;return-1}}function o(t,e,r){return function(n,i,o){var a=0,s=O(n);if("number"==typeof o)t>0?a=o>=0?o:Math.max(o+s,a):s=o>=0?Math.min(o+1,s):o+s+1;else if(r&&o&&s)return o=r(n,i),n[o]===i?o:-1;if(i!==i)return o=e(f.call(n,a,s),x.isNaN),o>=0?o+a:-1;for(o=t>0?a:s-1;o>=0&&o<s;o+=t)if(n[o]===i)return o;return-1}}function a(t,e){var r=N.length,n=t.constructor,i=x.isFunction(n)&&n.prototype||h,o="constructor";for(x.has(t,o)&&!x.contains(e,o)&&e.push(o);r--;)(o=N[r])in t&&t[o]!==i[o]&&!x.contains(e,o)&&e.push(o)}var s=this,c=s._,u=Array.prototype,h=Object.prototype,l=Function.prototype,p=u.push,f=u.slice,d=h.toString,m=h.hasOwnProperty,v=Array.isArray,g=Object.keys,y=l.bind,b=Object.create,_=function(){},x=function(t){return t instanceof x?t:this instanceof x?void(this._wrapped=t):new x(t)};void 0!==n?(void 0!==r&&r.exports&&(n=r.exports=x),n._=x):s._=x,x.VERSION="1.8.3";var w=function(t,e,r){if(void 0===e)return t;switch(null==r?3:r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)};case 4:return function(r,n,i,o){return t.call(e,r,n,i,o)}}return function(){return t.apply(e,arguments)}},S=function(t,e,r){return null==t?x.identity:x.isFunction(t)?w(t,e,r):x.isObject(t)?x.matcher(t):x.property(t)};x.iteratee=function(t,e){return S(t,e,1/0)};var M=function(t,e){return function(r){var n=arguments.length;if(n<2||null==r)return r;for(var i=1;i<n;i++)for(var o=arguments[i],a=t(o),s=a.length,c=0;c<s;c++){var u=a[c];e&&void 0!==r[u]||(r[u]=o[u])}return r}},E=function(t){if(!x.isObject(t))return{};if(b)return b(t);_.prototype=t;var e=new _;return _.prototype=null,e},T=function(t){return function(e){return null==e?void 0:e[t]}},C=Math.pow(2,53)-1,O=T("length"),P=function(t){var e=O(t);return"number"==typeof e&&e>=0&&e<=C};x.each=x.forEach=function(t,e,r){e=w(e,r);var n,i;if(P(t))for(n=0,i=t.length;n<i;n++)e(t[n],n,t);else{var o=x.keys(t);for(n=0,i=o.length;n<i;n++)e(t[o[n]],o[n],t)}return t},x.map=x.collect=function(t,e,r){e=S(e,r);for(var n=!P(t)&&x.keys(t),i=(n||t).length,o=Array(i),a=0;a<i;a++){var s=n?n[a]:a;o[a]=e(t[s],s,t)}return o},x.reduce=x.foldl=x.inject=e(1),x.reduceRight=x.foldr=e(-1),x.find=x.detect=function(t,e,r){var n;if(void 0!==(n=P(t)?x.findIndex(t,e,r):x.findKey(t,e,r))&&-1!==n)return t[n]},x.filter=x.select=function(t,e,r){var n=[];return e=S(e,r),x.each(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n},x.reject=function(t,e,r){return x.filter(t,x.negate(S(e)),r)},x.every=x.all=function(t,e,r){e=S(e,r);for(var n=!P(t)&&x.keys(t),i=(n||t).length,o=0;o<i;o++){var a=n?n[o]:o;if(!e(t[a],a,t))return!1}return!0},x.some=x.any=function(t,e,r){e=S(e,r);for(var n=!P(t)&&x.keys(t),i=(n||t).length,o=0;o<i;o++){var a=n?n[o]:o;if(e(t[a],a,t))return!0}return!1},x.contains=x.includes=x.include=function(t,e,r,n){return P(t)||(t=x.values(t)),("number"!=typeof r||n)&&(r=0),x.indexOf(t,e,r)>=0},x.invoke=function(t,e){var r=f.call(arguments,2),n=x.isFunction(e);return x.map(t,function(t){var i=n?e:t[e];return null==i?i:i.apply(t,r)})},x.pluck=function(t,e){return x.map(t,x.property(e))},x.where=function(t,e){return x.filter(t,x.matcher(e))},x.findWhere=function(t,e){return x.find(t,x.matcher(e))},x.max=function(t,e,r){var n,i,o=-1/0,a=-1/0;if(null==e&&null!=t){t=P(t)?t:x.values(t);for(var s=0,c=t.length;s<c;s++)(n=t[s])>o&&(o=n)}else e=S(e,r),x.each(t,function(t,r,n){((i=e(t,r,n))>a||i===-1/0&&o===-1/0)&&(o=t,a=i)});return o},x.min=function(t,e,r){var n,i,o=1/0,a=1/0;if(null==e&&null!=t){t=P(t)?t:x.values(t);for(var s=0,c=t.length;s<c;s++)(n=t[s])<o&&(o=n)}else e=S(e,r),x.each(t,function(t,r,n){((i=e(t,r,n))<a||i===1/0&&o===1/0)&&(o=t,a=i)});return o},x.shuffle=function(t){for(var e,r=P(t)?t:x.values(t),n=r.length,i=Array(n),o=0;o<n;o++)e=x.random(0,o),e!==o&&(i[o]=i[e]),i[e]=r[o];return i},x.sample=function(t,e,r){return null==e||r?(P(t)||(t=x.values(t)),t[x.random(t.length-1)]):x.shuffle(t).slice(0,Math.max(0,e))},x.sortBy=function(t,e,r){return e=S(e,r),x.pluck(x.map(t,function(t,r,n){return{value:t,index:r,criteria:e(t,r,n)}}).sort(function(t,e){var r=t.criteria,n=e.criteria;if(r!==n){if(r>n||void 0===r)return 1;if(r<n||void 0===n)return-1}return t.index-e.index}),"value")};var A=function(t){return function(e,r,n){var i={};return r=S(r,n),x.each(e,function(n,o){var a=r(n,o,e);t(i,n,a)}),i}};x.groupBy=A(function(t,e,r){x.has(t,r)?t[r].push(e):t[r]=[e]}),x.indexBy=A(function(t,e,r){t[r]=e}),x.countBy=A(function(t,e,r){x.has(t,r)?t[r]++:t[r]=1}),x.toArray=function(t){return t?x.isArray(t)?f.call(t):P(t)?x.map(t,x.identity):x.values(t):[]},x.size=function(t){return null==t?0:P(t)?t.length:x.keys(t).length},x.partition=function(t,e,r){e=S(e,r);var n=[],i=[];return x.each(t,function(t,r,o){(e(t,r,o)?n:i).push(t)}),[n,i]},x.first=x.head=x.take=function(t,e,r){if(null!=t)return null==e||r?t[0]:x.initial(t,t.length-e)},x.initial=function(t,e,r){return f.call(t,0,Math.max(0,t.length-(null==e||r?1:e)))},x.last=function(t,e,r){if(null!=t)return null==e||r?t[t.length-1]:x.rest(t,Math.max(0,t.length-e))},x.rest=x.tail=x.drop=function(t,e,r){return f.call(t,null==e||r?1:e)},x.compact=function(t){return x.filter(t,x.identity)};var j=function(t,e,r,n){for(var i=[],o=0,a=n||0,s=O(t);a<s;a++){var c=t[a];if(P(c)&&(x.isArray(c)||x.isArguments(c))){e||(c=j(c,e,r));var u=0,h=c.length;for(i.length+=h;u<h;)i[o++]=c[u++]}else r||(i[o++]=c)}return i};x.flatten=function(t,e){return j(t,e,!1)},x.without=function(t){return x.difference(t,f.call(arguments,1))},x.uniq=x.unique=function(t,e,r,n){x.isBoolean(e)||(n=r,r=e,e=!1),null!=r&&(r=S(r,n));for(var i=[],o=[],a=0,s=O(t);a<s;a++){var c=t[a],u=r?r(c,a,t):c;e?(a&&o===u||i.push(c),o=u):r?x.contains(o,u)||(o.push(u),i.push(c)):x.contains(i,c)||i.push(c)}return i},x.union=function(){return x.uniq(j(arguments,!0,!0))},x.intersection=function(t){for(var e=[],r=arguments.length,n=0,i=O(t);n<i;n++){var o=t[n];if(!x.contains(e,o)){for(var a=1;a<r&&x.contains(arguments[a],o);a++);a===r&&e.push(o)}}return e},x.difference=function(t){var e=j(arguments,!0,!0,1);return x.filter(t,function(t){return!x.contains(e,t)})},x.zip=function(){return x.unzip(arguments)},x.unzip=function(t){for(var e=t&&x.max(t,O).length||0,r=Array(e),n=0;n<e;n++)r[n]=x.pluck(t,n);return r},x.object=function(t,e){for(var r={},n=0,i=O(t);n<i;n++)e?r[t[n]]=e[n]:r[t[n][0]]=t[n][1];return r},x.findIndex=i(1),x.findLastIndex=i(-1),x.sortedIndex=function(t,e,r,n){r=S(r,n,1);for(var i=r(e),o=0,a=O(t);o<a;){var s=Math.floor((o+a)/2);r(t[s])<i?o=s+1:a=s}return o},x.indexOf=o(1,x.findIndex,x.sortedIndex),x.lastIndexOf=o(-1,x.findLastIndex),x.range=function(t,e,r){null==e&&(e=t||0,t=0),r=r||1;for(var n=Math.max(Math.ceil((e-t)/r),0),i=Array(n),o=0;o<n;o++,t+=r)i[o]=t;return i};var R=function(t,e,r,n,i){if(!(n instanceof e))return t.apply(r,i);var o=E(t.prototype),a=t.apply(o,i);return x.isObject(a)?a:o};x.bind=function(t,e){if(y&&t.bind===y)return y.apply(t,f.call(arguments,1));if(!x.isFunction(t))throw new TypeError("Bind must be called on a function");var r=f.call(arguments,2),n=function(){return R(t,n,e,this,r.concat(f.call(arguments)))};return n},x.partial=function(t){var e=f.call(arguments,1),r=function(){for(var n=0,i=e.length,o=Array(i),a=0;a<i;a++)o[a]=e[a]===x?arguments[n++]:e[a];for(;n<arguments.length;)o.push(arguments[n++]);return R(t,r,this,this,o)};return r},x.bindAll=function(t){var e,r,n=arguments.length;if(n<=1)throw new Error("bindAll must be passed function names");for(e=1;e<n;e++)r=arguments[e],t[r]=x.bind(t[r],t);return t},x.memoize=function(t,e){var r=function(n){var i=r.cache,o=""+(e?e.apply(this,arguments):n);return x.has(i,o)||(i[o]=t.apply(this,arguments)),i[o]};return r.cache={},r},x.delay=function(t,e){var r=f.call(arguments,2);return setTimeout(function(){return t.apply(null,r)},e)},x.defer=x.partial(x.delay,x,1),x.throttle=function(t,e,r){var n,i,o,a=null,s=0;r||(r={});var c=function(){s=!1===r.leading?0:x.now(),a=null,o=t.apply(n,i),a||(n=i=null)};return function(){var u=x.now();s||!1!==r.leading||(s=u);var h=e-(u-s);return n=this,i=arguments,h<=0||h>e?(a&&(clearTimeout(a),a=null),s=u,o=t.apply(n,i),a||(n=i=null)):a||!1===r.trailing||(a=setTimeout(c,h)),o}},x.debounce=function(t,e,r){var n,i,o,a,s,c=function(){var u=x.now()-a;u<e&&u>=0?n=setTimeout(c,e-u):(n=null,r||(s=t.apply(o,i),n||(o=i=null)))};return function(){o=this,i=arguments,a=x.now();var u=r&&!n;return n||(n=setTimeout(c,e)),u&&(s=t.apply(o,i),o=i=null),s}},x.wrap=function(t,e){return x.partial(e,t)},x.negate=function(t){return function(){return!t.apply(this,arguments)}},x.compose=function(){var t=arguments,e=t.length-1;return function(){for(var r=e,n=t[e].apply(this,arguments);r--;)n=t[r].call(this,n);return n}},x.after=function(t,e){return function(){if(--t<1)return e.apply(this,arguments)}},x.before=function(t,e){var r;return function(){return--t>0&&(r=e.apply(this,arguments)),t<=1&&(e=null),r}},x.once=x.partial(x.before,2);var L=!{toString:null}.propertyIsEnumerable("toString"),N=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];x.keys=function(t){if(!x.isObject(t))return[];if(g)return g(t);var e=[];for(var r in t)x.has(t,r)&&e.push(r);return L&&a(t,e),e},x.allKeys=function(t){if(!x.isObject(t))return[];var e=[];for(var r in t)e.push(r);return L&&a(t,e),e},x.values=function(t){for(var e=x.keys(t),r=e.length,n=Array(r),i=0;i<r;i++)n[i]=t[e[i]];return n},x.mapObject=function(t,e,r){e=S(e,r);for(var n,i=x.keys(t),o=i.length,a={},s=0;s<o;s++)n=i[s],a[n]=e(t[n],n,t);return a},x.pairs=function(t){for(var e=x.keys(t),r=e.length,n=Array(r),i=0;i<r;i++)n[i]=[e[i],t[e[i]]];return n},x.invert=function(t){for(var e={},r=x.keys(t),n=0,i=r.length;n<i;n++)e[t[r[n]]]=r[n];return e},x.functions=x.methods=function(t){var e=[];for(var r in t)x.isFunction(t[r])&&e.push(r);return e.sort()},x.extend=M(x.allKeys),x.extendOwn=x.assign=M(x.keys),x.findKey=function(t,e,r){e=S(e,r);for(var n,i=x.keys(t),o=0,a=i.length;o<a;o++)if(n=i[o],e(t[n],n,t))return n},x.pick=function(t,e,r){var n,i,o={},a=t;if(null==a)return o;x.isFunction(e)?(i=x.allKeys(a),n=w(e,r)):(i=j(arguments,!1,!1,1),n=function(t,e,r){return e in r},a=Object(a));for(var s=0,c=i.length;s<c;s++){var u=i[s],h=a[u];n(h,u,a)&&(o[u]=h)}return o},x.omit=function(t,e,r){if(x.isFunction(e))e=x.negate(e);else{var n=x.map(j(arguments,!1,!1,1),String);e=function(t,e){return!x.contains(n,e)}}return x.pick(t,e,r)},x.defaults=M(x.allKeys,!0),x.create=function(t,e){var r=E(t);return e&&x.extendOwn(r,e),r},x.clone=function(t){return x.isObject(t)?x.isArray(t)?t.slice():x.extend({},t):t},x.tap=function(t,e){return e(t),t},x.isMatch=function(t,e){var r=x.keys(e),n=r.length;if(null==t)return!n;for(var i=Object(t),o=0;o<n;o++){var a=r[o];if(e[a]!==i[a]||!(a in i))return!1}return!0};var I=function(t,e,r,n){if(t===e)return 0!==t||1/t==1/e;if(null==t||null==e)return t===e;t instanceof x&&(t=t._wrapped),e instanceof x&&(e=e._wrapped);var i=d.call(t);if(i!==d.call(e))return!1;switch(i){case"[object RegExp]":case"[object String]":return""+t==""+e;case"[object Number]":return+t!=+t?+e!=+e:0==+t?1/+t==1/e:+t==+e;case"[object Date]":case"[object Boolean]":return+t==+e}var o="[object Array]"===i;if(!o){if("object"!=typeof t||"object"!=typeof e)return!1;var a=t.constructor,s=e.constructor;if(a!==s&&!(x.isFunction(a)&&a instanceof a&&x.isFunction(s)&&s instanceof s)&&"constructor"in t&&"constructor"in e)return!1}r=r||[],n=n||[];for(var c=r.length;c--;)if(r[c]===t)return n[c]===e;if(r.push(t),n.push(e),o){if((c=t.length)!==e.length)return!1;for(;c--;)if(!I(t[c],e[c],r,n))return!1}else{var u,h=x.keys(t);if(c=h.length,x.keys(e).length!==c)return!1;for(;c--;)if(u=h[c],!x.has(e,u)||!I(t[u],e[u],r,n))return!1}return r.pop(),n.pop(),!0};x.isEqual=function(t,e){return I(t,e)},x.isEmpty=function(t){return null==t||(P(t)&&(x.isArray(t)||x.isString(t)||x.isArguments(t))?0===t.length:0===x.keys(t).length)},x.isElement=function(t){return!(!t||1!==t.nodeType)},x.isArray=v||function(t){return"[object Array]"===d.call(t)},x.isObject=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},x.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(t){x["is"+t]=function(e){return d.call(e)==="[object "+t+"]"}}),x.isArguments(arguments)||(x.isArguments=function(t){return x.has(t,"callee")}),"function"!=typeof/./&&"object"!=typeof Int8Array&&(x.isFunction=function(t){return"function"==typeof t||!1}),x.isFinite=function(t){return isFinite(t)&&!isNaN(parseFloat(t))},x.isNaN=function(t){return x.isNumber(t)&&t!==+t},x.isBoolean=function(t){return!0===t||!1===t||"[object Boolean]"===d.call(t)},x.isNull=function(t){return null===t},x.isUndefined=function(t){return void 0===t},x.has=function(t,e){return null!=t&&m.call(t,e)},x.noConflict=function(){return s._=c,this},x.identity=function(t){return t},x.constant=function(t){return function(){return t}},x.noop=function(){},x.property=T,x.propertyOf=function(t){return null==t?function(){}:function(e){return t[e]}},x.matcher=x.matches=function(t){return t=x.extendOwn({},t),function(e){return x.isMatch(e,t)}},x.times=function(t,e,r){var n=Array(Math.max(0,t));e=w(e,r,1);for(var i=0;i<t;i++)n[i]=e(i);return n},x.random=function(t,e){return null==e&&(e=t,t=0),t+Math.floor(Math.random()*(e-t+1))},x.now=Date.now||function(){return(new Date).getTime()};var D={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},k=x.invert(D),F=function(t){var e=function(e){return t[e]},r="(?:"+x.keys(t).join("|")+")",n=RegExp(r),i=RegExp(r,"g");return function(t){return t=null==t?"":""+t,n.test(t)?t.replace(i,e):t}};x.escape=F(D),x.unescape=F(k),x.result=function(t,e,r){var n=null==t?void 0:t[e];return void 0===n&&(n=r),x.isFunction(n)?n.call(t):n};var U=0;x.uniqueId=function(t){var e=++U+"";return t?t+e:e},x.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var B=/(.)^/,z={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},G=/\\|'|\r|\n|\u2028|\u2029/g,$=function(t){return"\\"+z[t]};x.template=function(t,e,r){!e&&r&&(e=r),e=x.defaults({},e,x.templateSettings);var n=RegExp([(e.escape||B).source,(e.interpolate||B).source,(e.evaluate||B).source].join("|")+"|$","g"),i=0,o="__p+='";t.replace(n,function(e,r,n,a,s){return o+=t.slice(i,s).replace(G,$),i=s+e.length,r?o+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":n?o+="'+\n((__t=("+n+"))==null?'':__t)+\n'":a&&(o+="';\n"+a+"\n__p+='"),e}),o+="';\n",e.variable||(o="with(obj||{}){\n"+o+"}\n"),o="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+o+"return __p;\n";try{var a=new Function(e.variable||"obj","_",o)}catch(t){throw t.source=o,t}var s=function(t){return a.call(this,t,x)};return s.source="function("+(e.variable||"obj")+"){\n"+o+"}",s},x.chain=function(t){var e=x(t);return e._chain=!0,e};var V=function(t,e){return t._chain?x(e).chain():e};x.mixin=function(t){x.each(x.functions(t),function(e){var r=x[e]=t[e];x.prototype[e]=function(){var t=[this._wrapped];return p.apply(t,arguments),V(this,r.apply(x,t))}})},x.mixin(x),x.each(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var e=u[t];x.prototype[t]=function(){var r=this._wrapped;return e.apply(r,arguments),"shift"!==t&&"splice"!==t||0!==r.length||delete r[0],V(this,r)}}),x.each(["concat","join","slice"],function(t){var e=u[t];x.prototype[t]=function(){return V(this,e.apply(this._wrapped,arguments))}}),x.prototype.value=function(){return this._wrapped},x.prototype.valueOf=x.prototype.toJSON=x.prototype.value,x.prototype.toString=function(){return""+this._wrapped},"function"==typeof t&&t.amd&&t("underscore",[],function(){return x})}).call(this)},{}],177:[function(t,e,r){function n(t,e,r,n){this.cx=3*t,this.bx=3*(r-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(n-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=n,this.p2x=r,this.p2y=n}e.exports=n,n.prototype.sampleCurveX=function(t){return((this.ax*t+this.bx)*t+this.cx)*t},n.prototype.sampleCurveY=function(t){return((this.ay*t+this.by)*t+this.cy)*t},n.prototype.sampleCurveDerivativeX=function(t){return(3*this.ax*t+2*this.bx)*t+this.cx},n.prototype.solveCurveX=function(t,e){void 0===e&&(e=1e-6);var r,n,i,o,a;for(i=t,a=0;a<8;a++){if(o=this.sampleCurveX(i)-t,Math.abs(o)<e)return i;var s=this.sampleCurveDerivativeX(i);if(Math.abs(s)<1e-6)break;i-=o/s}if(r=0,n=1,(i=t)<r)return r;if(i>n)return n;for(;r<n;){if(o=this.sampleCurveX(i),Math.abs(o-t)<e)return i;t>o?r=i:n=i,i=.5*(n-r)+r}return i},n.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))}},{}],178:[function(t,e,r){var n=t("./vdom/create-element.js");e.exports=n},{"./vdom/create-element.js":184}],179:[function(t,e,r){var n=t("./vtree/diff.js");e.exports=n},{"./vtree/diff.js":204}],180:[function(t,e,r){var n=t("./virtual-hyperscript/index.js");e.exports=n},{"./virtual-hyperscript/index.js":191}],181:[function(t,e,r){var n=t("./diff.js"),i=t("./patch.js"),o=t("./h.js"),a=t("./create-element.js"),s=t("./vnode/vnode.js"),c=t("./vnode/vtext.js");e.exports={diff:n,patch:i,h:o,create:a,VNode:s,VText:c}},{"./create-element.js":178,"./diff.js":179,"./h.js":180,"./patch.js":182,"./vnode/vnode.js":200,"./vnode/vtext.js":202}],182:[function(t,e,r){var n=t("./vdom/patch.js");e.exports=n},{"./vdom/patch.js":187}],183:[function(t,e,r){function n(t,e,r){for(var n in e){var a=e[n];void 0===a?i(t,n,a,r):c(a)?(i(t,n,a,r),a.hook&&a.hook(t,n,r?r[n]:void 0)):s(a)?o(t,e,r,n,a):t[n]=a}}function i(t,e,r,n){if(n){var i=n[e];if(c(i))i.unhook&&i.unhook(t,e,r);else if("attributes"===e)for(var o in i)t.removeAttribute(o);else if("style"===e)for(var a in i)t.style[a]="";else t[e]="string"==typeof i?"":null}}function o(t,e,r,n,i){var o=r?r[n]:void 0;if("attributes"!==n){if(o&&s(o)&&a(o)!==a(i))return void(t[n]=i);s(t[n])||(t[n]={});var c="style"===n?"":void 0;for(var u in i){var h=i[u];t[n][u]=void 0===h?c:h}}else for(var l in i){var p=i[l];void 0===p?t.removeAttribute(l):t.setAttribute(l,p)}}function a(t){return Object.getPrototypeOf?Object.getPrototypeOf(t):t.__proto__?t.__proto__:t.constructor?t.constructor.prototype:void 0}var s=t("is-object"),c=t("../vnode/is-vhook.js");e.exports=n},{"../vnode/is-vhook.js":195,"is-object":18}],184:[function(t,e,r){function n(t,e){var r=e?e.document||i:i,h=e?e.warn:null;if(t=u(t).a,c(t))return t.init()
+;if(s(t))return r.createTextNode(t.text);if(!a(t))return h&&h("Item is not a valid virtual dom node",t),null;var l=null===t.namespace?r.createElement(t.tagName):r.createElementNS(t.namespace,t.tagName),p=t.properties;o(l,p);for(var f=t.children,d=0;d<f.length;d++){var m=n(f[d],e);m&&l.appendChild(m)}return l}var i=t("global/document"),o=t("./apply-properties"),a=t("../vnode/is-vnode.js"),s=t("../vnode/is-vtext.js"),c=t("../vnode/is-widget.js"),u=t("../vnode/handle-thunk.js");e.exports=n},{"../vnode/handle-thunk.js":193,"../vnode/is-vnode.js":196,"../vnode/is-vtext.js":197,"../vnode/is-widget.js":198,"./apply-properties":183,"global/document":14}],185:[function(t,e,r){function n(t,e,r,n){return r&&0!==r.length?(r.sort(a),i(t,e,r,n,0)):{}}function i(t,e,r,n,a){if(n=n||{},t){o(r,a,a)&&(n[a]=t);var c=e.children;if(c)for(var u=t.childNodes,h=0;h<e.children.length;h++){a+=1;var l=c[h]||s,p=a+(l.count||0);o(r,a,p)&&i(u[h],l,r,n,a),a=p}}return n}function o(t,e,r){if(0===t.length)return!1;for(var n,i,o=0,a=t.length-1;o<=a;){if(n=(a+o)/2>>0,i=t[n],o===a)return i>=e&&i<=r;if(i<e)o=n+1;else{if(!(i>r))return!0;a=n-1}}return!1}function a(t,e){return t>e?1:-1}var s={};e.exports=n},{}],186:[function(t,e,r){function n(t,e,r){var n=t.type,u=t.vNode,f=t.patch;switch(n){case d.REMOVE:return i(e,u);case d.INSERT:return o(e,f,r);case d.VTEXT:return a(e,u,f,r);case d.WIDGET:return s(e,u,f,r);case d.VNODE:return c(e,u,f,r);case d.ORDER:return h(e,f),e;case d.PROPS:return p(e,f,u.properties),e;case d.THUNK:return l(e,r.patch(e,f,r));default:return e}}function i(t,e){var r=t.parentNode;return r&&r.removeChild(t),u(t,e),null}function o(t,e,r){var n=r.render(e,r);return t&&t.appendChild(n),t}function a(t,e,r,n){var i;if(3===t.nodeType)t.replaceData(0,t.length,r.text),i=t;else{var o=t.parentNode;i=n.render(r,n),o&&i!==t&&o.replaceChild(i,t)}return i}function s(t,e,r,n){var i,o=m(e,r);i=o?r.update(e,t)||t:n.render(r,n);var a=t.parentNode;return a&&i!==t&&a.replaceChild(i,t),o||u(t,e),i}function c(t,e,r,n){var i=t.parentNode,o=n.render(r,n);return i&&o!==t&&i.replaceChild(o,t),o}function u(t,e){"function"==typeof e.destroy&&f(e)&&e.destroy(t)}function h(t,e){for(var r,n,i,o=t.childNodes,a={},s=0;s<e.removes.length;s++)n=e.removes[s],r=o[n.from],n.key&&(a[n.key]=r),t.removeChild(r);for(var c=o.length,u=0;u<e.inserts.length;u++)i=e.inserts[u],r=a[i.key],t.insertBefore(r,i.to>=c++?null:o[i.to])}function l(t,e){return t&&e&&t!==e&&t.parentNode&&t.parentNode.replaceChild(e,t),e}var p=t("./apply-properties"),f=t("../vnode/is-widget.js"),d=t("../vnode/vpatch.js"),m=t("./update-widget");e.exports=n},{"../vnode/is-widget.js":198,"../vnode/vpatch.js":201,"./apply-properties":183,"./update-widget":188}],187:[function(t,e,r){function n(t,e,r){return r=r||{},r.patch=r.patch&&r.patch!==n?r.patch:i,r.render=r.render||u,r.patch(t,e,r)}function i(t,e,r){var n=a(e);if(0===n.length)return t;var i=h(t,e.a,n),c=t.ownerDocument;r.document||c===s||(r.document=c);for(var u=0;u<n.length;u++){var l=n[u];t=o(t,i[l],e[l],r)}return t}function o(t,e,r,n){if(!e)return t;var i;if(c(r))for(var o=0;o<r.length;o++)i=l(r[o],e,n),e===t&&(t=i);else i=l(r,e,n),e===t&&(t=i);return t}function a(t){var e=[];for(var r in t)"a"!==r&&e.push(Number(r));return e}var s=t("global/document"),c=t("x-is-array"),u=t("./create-element"),h=t("./dom-index"),l=t("./patch-op");e.exports=n},{"./create-element":184,"./dom-index":185,"./patch-op":186,"global/document":14,"x-is-array":223}],188:[function(t,e,r){function n(t,e){return!(!i(t)||!i(e))&&("name"in t&&"name"in e?t.id===e.id:t.init===e.init)}var i=t("../vnode/is-widget.js");e.exports=n},{"../vnode/is-widget.js":198}],189:[function(t,e,r){"use strict";function n(t){if(!(this instanceof n))return new n(t);this.value=t}var i=t("ev-store");e.exports=n,n.prototype.hook=function(t,e){i(t)[e.substr(3)]=this.value},n.prototype.unhook=function(t,e){i(t)[e.substr(3)]=void 0}},{"ev-store":7}],190:[function(t,e,r){"use strict";function n(t){if(!(this instanceof n))return new n(t);this.value=t}e.exports=n,n.prototype.hook=function(t,e){t[e]!==this.value&&(t[e]=this.value)}},{}],191:[function(t,e,r){"use strict";function n(t,e,r){var n,a,c,u,h=[];return!r&&s(e)&&(r=e,a={}),a=a||e||{},n=y(t,a),a.hasOwnProperty("key")&&(c=a.key,a.key=void 0),a.hasOwnProperty("namespace")&&(u=a.namespace,a.namespace=void 0),"INPUT"!==n||u||!a.hasOwnProperty("value")||void 0===a.value||v(a.value)||(a.value=b(a.value)),o(a),void 0!==r&&null!==r&&i(r,h,n,a),new l(n,a,h,c,u)}function i(t,e,r,n){if("string"==typeof t)e.push(new p(t));else if("number"==typeof t)e.push(new p(String(t)));else if(a(t))e.push(t);else{if(!h(t)){if(null===t||void 0===t)return;throw c({foreignObject:t,parentVnode:{tagName:r,properties:n}})}for(var o=0;o<t.length;o++)i(t[o],e,r,n)}}function o(t){for(var e in t)if(t.hasOwnProperty(e)){var r=t[e];if(v(r))continue;"ev-"===e.substr(0,3)&&(t[e]=_(r))}}function a(t){return f(t)||d(t)||m(t)||g(t)}function s(t){return"string"==typeof t||h(t)||a(t)}function c(t){var e=new Error;return e.type="virtual-hyperscript.unexpected.virtual-element",e.message="Unexpected virtual child passed to h().\nExpected a VNode / Vthunk / VWidget / string but:\ngot:\n"+u(t.foreignObject)+".\nThe parent vnode is:\n"+u(t.parentVnode),e.foreignObject=t.foreignObject,e.parentVnode=t.parentVnode,e}function u(t){try{return JSON.stringify(t,null,"    ")}catch(e){return String(t)}}var h=t("x-is-array"),l=t("../vnode/vnode.js"),p=t("../vnode/vtext.js"),f=t("../vnode/is-vnode"),d=t("../vnode/is-vtext"),m=t("../vnode/is-widget"),v=t("../vnode/is-vhook"),g=t("../vnode/is-thunk"),y=t("./parse-tag.js"),b=t("./hooks/soft-set-hook.js"),_=t("./hooks/ev-hook.js");e.exports=n},{"../vnode/is-thunk":194,"../vnode/is-vhook":195,"../vnode/is-vnode":196,"../vnode/is-vtext":197,"../vnode/is-widget":198,"../vnode/vnode.js":200,"../vnode/vtext.js":202,"./hooks/ev-hook.js":189,"./hooks/soft-set-hook.js":190,"./parse-tag.js":192,"x-is-array":223}],192:[function(t,e,r){"use strict";function n(t,e){if(!t)return"DIV";var r=!e.hasOwnProperty("id"),n=i(t,o),s=null;a.test(n[1])&&(s="DIV");var c,u,h,l;for(l=0;l<n.length;l++)(u=n[l])&&(h=u.charAt(0),s?"."===h?(c=c||[],c.push(u.substring(1,u.length))):"#"===h&&r&&(e.id=u.substring(1,u.length)):s=u);return c&&(e.className&&c.push(e.className),e.className=c.join(" ")),e.namespace?s:s.toUpperCase()}var i=t("browser-split"),o=/([\.#]?[a-zA-Z0-9\u007F-\uFFFF_:-]+)/,a=/^\.|#/;e.exports=n},{"browser-split":3}],193:[function(t,e,r){function n(t,e){var r=t,n=e;return c(e)&&(n=i(e,t)),c(t)&&(r=i(t,null)),{a:r,b:n}}function i(t,e){var r=t.vnode;if(r||(r=t.vnode=t.render(e)),!(o(r)||a(r)||s(r)))throw new Error("thunk did not return a valid node");return r}var o=t("./is-vnode"),a=t("./is-vtext"),s=t("./is-widget"),c=t("./is-thunk");e.exports=n},{"./is-thunk":194,"./is-vnode":196,"./is-vtext":197,"./is-widget":198}],194:[function(t,e,r){function n(t){return t&&"Thunk"===t.type}e.exports=n},{}],195:[function(t,e,r){function n(t){return t&&("function"==typeof t.hook&&!t.hasOwnProperty("hook")||"function"==typeof t.unhook&&!t.hasOwnProperty("unhook"))}e.exports=n},{}],196:[function(t,e,r){function n(t){return t&&"VirtualNode"===t.type&&t.version===i}var i=t("./version");e.exports=n},{"./version":199}],197:[function(t,e,r){function n(t){return t&&"VirtualText"===t.type&&t.version===i}var i=t("./version");e.exports=n},{"./version":199}],198:[function(t,e,r){function n(t){return t&&"Widget"===t.type}e.exports=n},{}],199:[function(t,e,r){e.exports="2"},{}],200:[function(t,e,r){function n(t,e,r,n,i){this.tagName=t,this.properties=e||u,this.children=r||h,this.key=null!=n?String(n):void 0,this.namespace="string"==typeof i?i:null;var l,p=r&&r.length||0,f=0,d=!1,m=!1,v=!1;for(var g in e)if(e.hasOwnProperty(g)){var y=e[g];c(y)&&y.unhook&&(l||(l={}),l[g]=y)}for(var b=0;b<p;b++){var _=r[b];o(_)?(f+=_.count||0,!d&&_.hasWidgets&&(d=!0),!m&&_.hasThunks&&(m=!0),v||!_.hooks&&!_.descendantHooks||(v=!0)):!d&&a(_)?"function"==typeof _.destroy&&(d=!0):!m&&s(_)&&(m=!0)}this.count=p+f,this.hasWidgets=d,this.hasThunks=m,this.hooks=l,this.descendantHooks=v}var i=t("./version"),o=t("./is-vnode"),a=t("./is-widget"),s=t("./is-thunk"),c=t("./is-vhook");e.exports=n;var u={},h=[];n.prototype.version=i,n.prototype.type="VirtualNode"},{"./is-thunk":194,"./is-vhook":195,"./is-vnode":196,"./is-widget":198,"./version":199}],201:[function(t,e,r){function n(t,e,r){this.type=Number(t),this.vNode=e,this.patch=r}var i=t("./version");n.NONE=0,n.VTEXT=1,n.VNODE=2,n.WIDGET=3,n.PROPS=4,n.ORDER=5,n.INSERT=6,n.REMOVE=7,n.THUNK=8,e.exports=n,n.prototype.version=i,n.prototype.type="VirtualPatch"},{"./version":199}],202:[function(t,e,r){function n(t){this.text=String(t)}var i=t("./version");e.exports=n,n.prototype.version=i,n.prototype.type="VirtualText"},{"./version":199}],203:[function(t,e,r){function n(t,e){var r;for(var s in t){s in e||(r=r||{},r[s]=void 0);var c=t[s],u=e[s];if(c!==u)if(o(c)&&o(u))if(i(u)!==i(c))r=r||{},r[s]=u;else if(a(u))r=r||{},r[s]=u;else{var h=n(c,u);h&&(r=r||{},r[s]=h)}else r=r||{},r[s]=u}for(var l in e)l in t||(r=r||{},r[l]=e[l]);return r}function i(t){return Object.getPrototypeOf?Object.getPrototypeOf(t):t.__proto__?t.__proto__:t.constructor?t.constructor.prototype:void 0}var o=t("is-object"),a=t("../vnode/is-vhook");e.exports=n},{"../vnode/is-vhook":195,"is-object":18}],204:[function(t,e,r){function n(t,e){var r={a:t};return i(t,e,r,0),r}function i(t,e,r,n){if(t!==e){var i=r[n],s=!1;if(x(t)||x(e))c(t,e,r,n);else if(null==e)_(t)||(a(t,r,n),i=r[n]),i=m(i,new g(g.REMOVE,t,e));else if(y(e))if(y(t))if(t.tagName===e.tagName&&t.namespace===e.namespace&&t.key===e.key){var u=S(t.properties,e.properties);u&&(i=m(i,new g(g.PROPS,t,u))),i=o(t,e,r,i,n)}else i=m(i,new g(g.VNODE,t,e)),s=!0;else i=m(i,new g(g.VNODE,t,e)),s=!0;else b(e)?b(t)?t.text!==e.text&&(i=m(i,new g(g.VTEXT,t,e))):(i=m(i,new g(g.VTEXT,t,e)),s=!0):_(e)&&(_(t)||(s=!0),i=m(i,new g(g.WIDGET,t,e)));i&&(r[n]=i),s&&a(t,r,n)}}function o(t,e,r,n,o){for(var a=t.children,s=p(a,e.children),c=s.children,u=a.length,h=c.length,l=u>h?u:h,f=0;f<l;f++){var d=a[f],v=c[f];o+=1,d?i(d,v,r,o):v&&(n=m(n,new g(g.INSERT,null,v))),y(d)&&d.count&&(o+=d.count)}return s.moves&&(n=m(n,new g(g.ORDER,t,s.moves))),n}function a(t,e,r){h(t,e,r),s(t,e,r)}function s(t,e,r){if(_(t))"function"==typeof t.destroy&&(e[r]=m(e[r],new g(g.REMOVE,t,null)));else if(y(t)&&(t.hasWidgets||t.hasThunks))for(var n=t.children,i=n.length,o=0;o<i;o++){var a=n[o];r+=1,s(a,e,r),y(a)&&a.count&&(r+=a.count)}else x(t)&&c(t,null,e,r)}function c(t,e,r,i){var o=w(t,e),a=n(o.a,o.b);u(a)&&(r[i]=new g(g.THUNK,null,a))}function u(t){for(var e in t)if("a"!==e)return!0;return!1}function h(t,e,r){if(y(t)){if(t.hooks&&(e[r]=m(e[r],new g(g.PROPS,t,l(t.hooks)))),t.descendantHooks||t.hasThunks)for(var n=t.children,i=n.length,o=0;o<i;o++){var a=n[o];r+=1,h(a,e,r),y(a)&&a.count&&(r+=a.count)}}else x(t)&&c(t,null,e,r)}function l(t){var e={};for(var r in t)e[r]=void 0;return e}function p(t,e){var r=d(e),n=r.keys,i=r.free;if(i.length===e.length)return{children:e,moves:null};var o=d(t),a=o.keys;if(o.free.length===t.length)return{children:e,moves:null};for(var s=[],c=0,u=i.length,h=0,l=0;l<t.length;l++){var p,m=t[l];m.key?n.hasOwnProperty(m.key)?(p=n[m.key],s.push(e[p])):(p=l-h++,s.push(null)):c<u?(p=i[c++],s.push(e[p])):(p=l-h++,s.push(null))}for(var v=c>=i.length?e.length:i[c],g=0;g<e.length;g++){var y=e[g];y.key?a.hasOwnProperty(y.key)||s.push(y):g>=v&&s.push(y)}for(var b,_=s.slice(),x=0,w=[],S=[],M=0;M<e.length;){var E=e[M];for(b=_[x];null===b&&_.length;)w.push(f(_,x,null)),b=_[x];b&&b.key===E.key?(x++,M++):E.key?(b&&b.key&&n[b.key]!==M+1?(w.push(f(_,x,b.key)),b=_[x],b&&b.key===E.key?x++:S.push({key:E.key,to:M})):S.push({key:E.key,to:M}),M++):b&&b.key&&w.push(f(_,x,b.key))}for(;x<_.length;)b=_[x],w.push(f(_,x,b&&b.key));return w.length!==h||S.length?{children:s,moves:{removes:w,inserts:S}}:{children:s,moves:null}}function f(t,e,r){return t.splice(e,1),{from:e,key:r}}function d(t){for(var e={},r=[],n=t.length,i=0;i<n;i++){var o=t[i];o.key?e[o.key]=i:r.push(i)}return{keys:e,free:r}}function m(t,e){return t?(v(t)?t.push(e):t=[t,e],t):e}var v=t("x-is-array"),g=t("../vnode/vpatch"),y=t("../vnode/is-vnode"),b=t("../vnode/is-vtext"),_=t("../vnode/is-widget"),x=t("../vnode/is-thunk"),w=t("../vnode/handle-thunk"),S=t("./diff-props");e.exports=n},{"../vnode/handle-thunk":193,"../vnode/is-thunk":194,"../vnode/is-vnode":196,"../vnode/is-vtext":197,"../vnode/is-widget":198,"../vnode/vpatch":201,"./diff-props":203,"x-is-array":223}],205:[function(e,r,n){!function(t){"use strict";t(function(t){return t("./makePromise")({scheduler:new(t("./Scheduler"))(t("./env").asap)})})}("function"==typeof t&&t.amd?t:function(t){r.exports=t(e)})},{"./Scheduler":206,"./env":218,"./makePromise":220}],206:[function(e,r,n){!function(t){"use strict";t(function(){function t(t){this._async=t,this._running=!1,this._queue=this,this._queueLen=0,this._afterQueue={},this._afterQueueLen=0;var e=this;this.drain=function(){e._drain()}}return t.prototype.enqueue=function(t){this._queue[this._queueLen++]=t,this.run()},t.prototype.afterQueue=function(t){this._afterQueue[this._afterQueueLen++]=t,this.run()},t.prototype.run=function(){this._running||(this._running=!0,this._async(this.drain))},t.prototype._drain=function(){for(var t=0;t<this._queueLen;++t)this._queue[t].run(),this._queue[t]=void 0;for(this._queueLen=0,this._running=!1,t=0;t<this._afterQueueLen;++t)this._afterQueue[t].run(),this._afterQueue[t]=void 0;this._afterQueueLen=0},t})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],207:[function(e,r,n){!function(t){"use strict";t(function(){function t(e){Error.call(this),this.message=e,this.name=t.name,"function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,t)}return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],208:[function(e,r,n){!function(t){"use strict";t(function(){function t(t,r){function n(e,n,o){var a=t._defer(),s=o.length;return i({f:e,thisArg:n,args:o,params:new Array(s),i:s-1,call:r},a._handler),a}function i(e,n){if(e.i<0)return r(e.f,e.thisArg,e.params,n);t._handler(e.args[e.i]).fold(o,e,void 0,n)}function o(t,e,r){t.params[t.i]=e,t.i-=1,i(t,r)}return arguments.length<2&&(r=e),n}function e(t,e,r,n){try{n.resolve(t.apply(e,r))}catch(t){n.reject(t)}}return t.tryCatchResolve=e,t})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],209:[function(e,r,n){!function(t){"use strict";t(function(t){var e=t("../state"),r=t("../apply");return function(t){function n(e){function r(t){h=null,this.resolve(t)}function n(t){this.resolved||(h.push(t),0==--u&&this.reject(h))}for(var i,o,a=t._defer(),s=a._handler,c=e.length>>>0,u=c,h=[],l=0;l<c;++l)if(void 0!==(o=e[l])||l in e){if(i=t._handler(o),i.state()>0){s.become(i),t._visitRemaining(e,l,i);break}i.visit(s,r,n)}else--u;return 0===u&&s.reject(new RangeError("any(): array must not be empty")),a}function i(e,r){function n(t){this.resolved||(h.push(t),0==--f&&(l=null,this.resolve(h)))}function i(t){this.resolved||(l.push(t),0==--o&&(h=null,this.reject(l)))}var o,a,s,c=t._defer(),u=c._handler,h=[],l=[],p=e.length>>>0,f=0;for(s=0;s<p;++s)(void 0!==(a=e[s])||s in e)&&++f;for(r=Math.max(r,0),o=f-r+1,f=Math.min(r,f),r>f?u.reject(new RangeError("some(): array must contain at least "+r+" item(s), but had "+f)):0===f&&u.resolve(h),s=0;s<p;++s)(void 0!==(a=e[s])||s in e)&&t._handler(a).visit(u,n,i,u.notify);return c}function o(e,r){return t._traverse(r,e)}function a(e,r){var n=y.call(e);return t._traverse(r,n).then(function(t){return s(n,t)})}function s(e,r){for(var n=r.length,i=new Array(n),o=0,a=0;o<n;++o)r[o]&&(i[a++]=t._handler(e[o]).value);return i.length=a,i}function c(t){return m(t.map(u))}function u(r){var n;return r instanceof t&&(n=r._handler.join()),n&&0===n.state()||!n?d(r).then(e.fulfilled,e.rejected):(n._unreport(),e.inspect(n))}function h(t,e){return arguments.length>2?v.call(t,p(e),arguments[2]):v.call(t,p(e))}function l(t,e){return arguments.length>2?g.call(t,p(e),arguments[2]):g.call(t,p(e))}function p(t){return function(e,r,n){return f(t,void 0,[e,r,n])}}var f=r(t),d=t.resolve,m=t.all,v=Array.prototype.reduce,g=Array.prototype.reduceRight,y=Array.prototype.slice;return t.any=n,t.some=i,t.settle=c,t.map=o,t.filter=a,t.reduce=h,t.reduceRight=l,t.prototype.spread=function(t){return this.then(m).then(function(e){return t.apply(this,e)})},t}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t(e)})},{"../apply":208,"../state":221}],210:[function(e,r,n){!function(t){"use strict";t(function(){function t(){throw new TypeError("catch predicate must be a function")}function e(t,e){return r(e)?t instanceof e:e(t)}function r(t){return t===Error||null!=t&&t.prototype instanceof Error}function n(t){return("object"==typeof t||"function"==typeof t)&&null!==t}function i(t){return t}return function(r){function o(t,r){return function(n){return e(n,r)?t.call(this,n):u(n)}}function a(t,e,r,i){var o=t.call(e);return n(o)?s(o,r,i):r(i)}function s(t,e,r){return c(t).then(function(){return e(r)})}var c=r.resolve,u=r.reject,h=r.prototype.catch;return r.prototype.done=function(t,e){this._handler.visit(this._handler.receiver,t,e)},r.prototype.catch=r.prototype.otherwise=function(e){return arguments.length<2?h.call(this,e):"function"!=typeof e?this.ensure(t):h.call(this,o(arguments[1],e))},r.prototype.finally=r.prototype.ensure=function(t){return"function"!=typeof t?this:this.then(function(e){return a(t,this,i,e)},function(e){return a(t,this,u,e)})},r.prototype.else=r.prototype.orElse=function(t){return this.then(void 0,function(){return t})},r.prototype.yield=function(t){return this.then(function(){return t})},r.prototype.tap=function(t){return this.then(t).yield(this)},r}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],211:[function(e,r,n){!function(t){"use strict";t(function(){return function(t){return t.prototype.fold=function(e,r){var n=this._beget();return this._handler.fold(function(r,n,i){t._handler(r).fold(function(t,r,n){n.resolve(e.call(this,r,t))},n,this,i)},r,n._handler.receiver,n._handler),n},t}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],212:[function(e,r,n){!function(t){"use strict";t(function(t){var e=t("../state").inspect;return function(t){return t.prototype.inspect=function(){return e(t._handler(this))},t}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t(e)})},{"../state":221}],213:[function(e,r,n){!function(t){"use strict";t(function(){return function(t){function e(t,e,n,i){return r(function(e){return[e,t(e)]},e,n,i)}function r(t,e,i,o){function a(o,a){return n(i(o)).then(function(){return r(t,e,i,a)})}return n(o).then(function(r){return n(e(r)).then(function(e){return e?r:n(t(r)).spread(a)})})}var n=t.resolve;return t.iterate=e,t.unfold=r,t}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],214:[function(e,r,n){!function(t){"use strict";t(function(){return function(t){return t.prototype.progress=function(t){return this.then(void 0,void 0,t)},t}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],215:[function(e,r,n){!function(t){"use strict";t(function(t){function e(t,e,n,i){return r.setTimer(function(){t(n,i,e)},e)}var r=t("../env"),n=t("../TimeoutError");return function(t){function i(t,r,n){e(o,t,r,n)}function o(t,e){e.resolve(t)}function a(t,e,r){var i=void 0===t?new n("timed out after "+r+"ms"):t;e.reject(i)}return t.prototype.delay=function(t){var e=this._beget();return this._handler.fold(i,t,void 0,e._handler),e},t.prototype.timeout=function(t,n){var i=this._beget(),o=i._handler,s=e(a,t,n,i._handler);return this._handler.visit(o,function(t){r.clearTimer(s),this.resolve(t)},function(t){r.clearTimer(s),this.reject(t)},o.notify),i},t}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t(e)})},{"../TimeoutError":207,"../env":218}],216:[function(e,r,n){!function(t){"use strict";t(function(t){function e(t){throw t}function r(){}var n=t("../env").setTimer,i=t("../format");return function(t){function o(t){t.handled||(f.push(t),h("Potentially unhandled rejection ["+t.id+"] "+i.formatError(t.value)))}function a(t){var e=f.indexOf(t);e>=0&&(f.splice(e,1),l("Handled previous rejection ["+t.id+"] "+i.formatObject(t.value)))}function s(t,e){p.push(t,e),null===d&&(d=n(c,0))}function c(){for(d=null;p.length>0;)p.shift()(p.shift())}var u,h=r,l=r;"undefined"!=typeof console&&(u=console,h=void 0!==u.error?function(t){u.error(t)}:function(t){u.log(t)},l=void 0!==u.info?function(t){u.info(t)}:function(t){u.log(t)}),t.onPotentiallyUnhandledRejection=function(t){s(o,t)},t.onPotentiallyUnhandledRejectionHandled=function(t){s(a,t)},t.onFatalRejection=function(t){s(e,t.value)};var p=[],f=[],d=null;return t}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t(e)})},{"../env":218,"../format":219}],217:[function(e,r,n){!function(t){"use strict";t(function(){return function(t){return t.prototype.with=t.prototype.withThis=function(t){var e=this._beget(),r=e._handler;return r.receiver=t,this._handler.chain(r,t),e},t}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],218:[function(e,r,n){(function(n){!function(t){"use strict";t(function(t){var e,r="undefined"!=typeof setTimeout&&setTimeout,i=function(t,e){return setTimeout(t,e)},o=function(t){return clearTimeout(t)},a=function(t){return r(t,0)};if(function(){return void 0!==n&&"[object process]"===Object.prototype.toString.call(n)}())a=function(t){return n.nextTick(t)};else if(e=function(){return"undefined"!=typeof MutationObserver&&MutationObserver||"undefined"!=typeof WebKitMutationObserver&&WebKitMutationObserver}())a=function(t){function e(){var t=r;r=void 0,t()}var r,n=document.createTextNode("");new t(e).observe(n,{characterData:!0});var i=0;return function(t){r=t,n.data=i^=1}}(e);else if(!r){var s=t,c=s("vertx");i=function(t,e){return c.setTimer(e,t)},o=c.cancelTimer,a=c.runOnLoop||c.runOnContext}return{setTimer:i,clearTimer:o,asap:a}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t(e)})}).call(this,e("_process"))},{_process:4}],219:[function(e,r,n){!function(t){"use strict";t(function(){function t(t){var r="object"==typeof t&&null!==t&&(t.stack||t.message)?t.stack||t.message:e(t);return t instanceof Error?r:r+" (WARNING: non-Error used)"}function e(t){var e=String(t);return"[object Object]"===e&&"undefined"!=typeof JSON&&(e=r(t,e)),e}function r(t,e){try{return JSON.stringify(t)}catch(t){return e}}return{formatError:t,formatObject:e,tryStringify:r}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],220:[function(e,r,n){(function(e){!function(t){"use strict";t(function(){return function(t){function r(t,e){this._handler=t===_?e:n(t)}function n(t){function e(t){i.resolve(t)}function r(t){i.reject(t)}function n(t){i.notify(t)}var i=new w;try{t(e,r,n)}catch(t){r(t)}return i}function i(t){return I(t)?t:new r(_,new S(g(t)))}function o(t){return new r(_,new S(new T(t)))}function a(){return et}function s(){return new r(_,new w)}function c(t,e){return new e(_,new w(t.receiver,t.join().context))}function u(t){return l(H,null,t)}function h(t,e){return l(B,t,e)}function l(t,e,n){function i(r,i,a){a.resolved||p(n,o,r,t(e,i,r),a)}function o(t,e,r){h[t]=e,0==--u&&r.become(new E(h))}for(var a,s="function"==typeof e?i:o,c=new w,u=n.length>>>0,h=new Array(u),l=0;l<n.length&&!c.resolved;++l)a=n[l],void 0!==a||l in n?p(n,s,l,a,c):--u;return 0===u&&c.become(new E(h)),new r(_,c)}function p(t,e,r,n,i){if(D(n)){var o=y(n),a=o.state();0===a?o.fold(e,r,void 0,i):a>0?e(r,o.value,i):(i.become(o),f(t,r+1,o))}else e(r,n,i)}function f(t,e,r){for(var n=e;n<t.length;++n)d(g(t[n]),r)}function d(t,e){if(t!==e){var r=t.state();0===r?t.visit(t,void 0,t._unreport):r<0&&t._unreport()}}function m(t){return"object"!=typeof t||null===t?o(new TypeError("non-iterable passed to race()")):0===t.length?a():1===t.length?i(t[0]):v(t)}function v(t){var e,n,i,o=new w;for(e=0;e<t.length;++e)if(void 0!==(n=t[e])||e in t){if(i=g(n),0!==i.state()){o.become(i),f(t,e+1,i);break}i.visit(o,o.resolve,o.reject)}return new r(_,o)}function g(t){return I(t)?t._handler.join():D(t)?b(t):new E(t)}function y(t){return I(t)?t._handler.join():b(t)}function b(t){try{var e=t.then;return"function"==typeof e?new M(e,t):new E(t)}catch(t){return new T(t)}}function _(){}function x(){}function w(t,e){r.createContext(this,e),this.consumers=void 0,this.receiver=t,this.handler=void 0,this.resolved=!1}function S(t){this.handler=t}function M(t,e){w.call(this),Y.enqueue(new R(t,e,this))}function E(t){r.createContext(this),this.value=t}function T(t){r.createContext(this),this.id=++Q,this.value=t,this.handled=!1,this.reported=!1,this._report()}function C(t,e){this.rejection=t,this.context=e}function O(t){this.rejection=t}function P(){return new T(new TypeError("Promise cycle"))}function A(t,e){this.continuation=t,this.handler=e}function j(t,e){this.handler=e,this.value=t}function R(t,e,r){this._then=t,this.thenable=e,this.resolver=r}function L(t,e,r,n,i){try{t.call(e,r,n,i)}catch(t){n(t)}}function N(t,e,r,n){this.f=t,this.z=e,this.c=r,this.to=n,this.resolver=J,this.receiver=this}function I(t){return t instanceof r}function D(t){return("object"==typeof t||"function"==typeof t)&&null!==t}function k(t,e,n,i){if("function"!=typeof t)return i.become(e);r.enterContext(e),z(t,e.value,n,i),r.exitContext()}function F(t,e,n,i,o){if("function"!=typeof t)return o.become(n);r.enterContext(n),G(t,e,n.value,i,o),r.exitContext()}function U(t,e,n,i,o){if("function"!=typeof t)return o.notify(e);r.enterContext(n),$(t,e,i,o),r.exitContext()}function B(t,e,r){try{return t(e,r)}catch(t){return o(t)}}function z(t,e,r,n){try{n.become(g(t.call(r,e)))}catch(t){n.become(new T(t))}}function G(t,e,r,n,i){try{t.call(n,e,r,i)}catch(t){i.become(new T(t))}}function $(t,e,r,n){try{n.notify(t.call(r,e))}catch(t){n.notify(t)}}function V(t,e){e.prototype=Z(t.prototype),e.prototype.constructor=e}function H(t,e){return e}function W(){}function q(){if("function"==typeof CustomEvent)try{return new CustomEvent("unhandledRejection")instanceof CustomEvent}catch(t){}return!1}function X(){if("undefined"!=typeof document&&"function"==typeof document.createEvent)try{return document.createEvent("CustomEvent").initCustomEvent("eventType",!1,!0,{}),!0}catch(t){}return!1}var Y=t.scheduler,K=function(){return void 0!==e&&null!==e&&"function"==typeof e.emit?function(t,r){return"unhandledRejection"===t?e.emit(t,r.value,r):e.emit(t,r)}:"undefined"!=typeof self&&q()?function(t,e){return function(r,n){var i=new e(r,{detail:{reason:n.value,key:n},bubbles:!1,cancelable:!0});return!t.dispatchEvent(i)}}(self,CustomEvent):"undefined"!=typeof self&&X()?function(t,e){return function(r,n){var i=e.createEvent("CustomEvent");return i.initCustomEvent(r,!1,!0,{reason:n.value,key:n}),!t.dispatchEvent(i)}}(self,document):W}(),Z=Object.create||function(t){function e(){}return e.prototype=t,new e};r.resolve=i,r.reject=o,r.never=a,r._defer=s,r._handler=g,r.prototype.then=function(t,e,r){var n=this._handler,i=n.join().state();if("function"!=typeof t&&i>0||"function"!=typeof e&&i<0)return new this.constructor(_,n);var o=this._beget(),a=o._handler;return n.chain(a,n.receiver,t,e,r),o},r.prototype.catch=function(t){return this.then(void 0,t)},r.prototype._beget=function(){return c(this._handler,this.constructor)},r.all=u,r.race=m,r._traverse=h,r._visitRemaining=f,_.prototype.when=_.prototype.become=_.prototype.notify=_.prototype.fail=_.prototype._unreport=_.prototype._report=W,_.prototype._state=0,_.prototype.state=function(){return this._state},_.prototype.join=function(){for(var t=this;void 0!==t.handler;)t=t.handler;return t},_.prototype.chain=function(t,e,r,n,i){this.when({resolver:t,receiver:e,fulfilled:r,rejected:n,progress:i})},_.prototype.visit=function(t,e,r,n){this.chain(J,t,e,r,n)},_.prototype.fold=function(t,e,r,n){this.when(new N(t,e,r,n))},V(_,x),x.prototype.become=function(t){t.fail()};var J=new x;V(_,w),w.prototype._state=0,w.prototype.resolve=function(t){this.become(g(t))},w.prototype.reject=function(t){this.resolved||this.become(new T(t))},w.prototype.join=function(){if(!this.resolved)return this;for(var t=this;void 0!==t.handler;)if((t=t.handler)===this)return this.handler=P();return t},w.prototype.run=function(){var t=this.consumers,e=this.handler;this.handler=this.handler.join(),this.consumers=void 0;for(var r=0;r<t.length;++r)e.when(t[r])},w.prototype.become=function(t){this.resolved||(this.resolved=!0,this.handler=t,void 0!==this.consumers&&Y.enqueue(this),void 0!==this.context&&t._report(this.context))},w.prototype.when=function(t){this.resolved?Y.enqueue(new A(t,this.handler)):void 0===this.consumers?this.consumers=[t]:this.consumers.push(t)},w.prototype.notify=function(t){this.resolved||Y.enqueue(new j(t,this))},w.prototype.fail=function(t){var e=void 0===t?this.context:t;this.resolved&&this.handler.join().fail(e)},w.prototype._report=function(t){this.resolved&&this.handler.join()._report(t)},w.prototype._unreport=function(){this.resolved&&this.handler.join()._unreport()},V(_,S),S.prototype.when=function(t){Y.enqueue(new A(t,this))},S.prototype._report=function(t){this.join()._report(t)},S.prototype._unreport=function(){this.join()._unreport()},V(w,M),V(_,E),E.prototype._state=1,E.prototype.fold=function(t,e,r,n){F(t,e,this,r,n)},E.prototype.when=function(t){k(t.fulfilled,this,t.receiver,t.resolver)};var Q=0;V(_,T),T.prototype._state=-1,T.prototype.fold=function(t,e,r,n){n.become(this)},T.prototype.when=function(t){"function"==typeof t.rejected&&this._unreport(),k(t.rejected,this,t.receiver,t.resolver)},T.prototype._report=function(t){Y.afterQueue(new C(this,t))},T.prototype._unreport=function(){this.handled||(this.handled=!0,Y.afterQueue(new O(this)))},T.prototype.fail=function(t){this.reported=!0,K("unhandledRejection",this),r.onFatalRejection(this,void 0===t?this.context:t)},C.prototype.run=function(){this.rejection.handled||this.rejection.reported||(this.rejection.reported=!0,K("unhandledRejection",this.rejection)||r.onPotentiallyUnhandledRejection(this.rejection,this.context))},O.prototype.run=function(){this.rejection.reported&&(K("rejectionHandled",this.rejection)||r.onPotentiallyUnhandledRejectionHandled(this.rejection))},r.createContext=r.enterContext=r.exitContext=r.onPotentiallyUnhandledRejection=r.onPotentiallyUnhandledRejectionHandled=r.onFatalRejection=W;var tt=new _,et=new r(_,tt);return A.prototype.run=function(){this.handler.join().when(this.continuation)},j.prototype.run=function(){var t=this.handler.consumers;if(void 0!==t)for(var e,r=0;r<t.length;++r)e=t[r],U(e.progress,this.value,this.handler,e.receiver,e.resolver)},R.prototype.run=function(){function t(t){n.resolve(t)}function e(t){n.reject(t)}function r(t){n.notify(t)}var n=this.resolver;L(this._then,this.thenable,t,e,r)},N.prototype.fulfilled=function(t){this.f.call(this.c,this.z,t,this.to)},N.prototype.rejected=function(t){this.to.reject(t)},N.prototype.progress=function(t){this.to.notify(t)},r}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})}).call(this,e("_process"))},{_process:4}],221:[function(e,r,n){!function(t){"use strict";t(function(){function t(){return{state:"pending"}}function e(t){return{state:"rejected",reason:t}}function r(t){return{state:"fulfilled",value:t}}function n(n){var i=n.state();return 0===i?t():i>0?r(n.value):e(n.value)}return{pending:t,fulfilled:r,rejected:e,inspect:n}})}("function"==typeof t&&t.amd?t:function(t){r.exports=t()})},{}],222:[function(e,r,n){!function(t){"use strict";t(function(t){function e(t,e,r,n){var i=S.resolve(t);return arguments.length<2?i:i.then(e,r,n)}function r(t){return new S(t)}function n(t){return function(){for(var e=0,r=arguments.length,n=new Array(r);e<r;++e)n[e]=arguments[e];return M(t,this,n)}}function i(t){for(var e=0,r=arguments.length-1,n=new Array(r);e<r;++e)n[e]=arguments[e+1];return M(t,this,n)}function o(){return new a}function a(){function t(t){n._handler.resolve(t)}function e(t){
+n._handler.reject(t)}function r(t){n._handler.notify(t)}var n=S._defer();this.promise=n,this.resolve=t,this.reject=e,this.notify=r,this.resolver={resolve:t,reject:e,notify:r}}function s(t){return t&&"function"==typeof t.then}function c(){return S.all(arguments)}function u(t){return e(t,S.all)}function h(t){return e(t,S.settle)}function l(t,r){return e(t,function(t){return S.map(t,r)})}function p(t,r){return e(t,function(t){return S.filter(t,r)})}var f=t("./lib/decorators/timed"),d=t("./lib/decorators/array"),m=t("./lib/decorators/flow"),v=t("./lib/decorators/fold"),g=t("./lib/decorators/inspect"),y=t("./lib/decorators/iterate"),b=t("./lib/decorators/progress"),_=t("./lib/decorators/with"),x=t("./lib/decorators/unhandledRejection"),w=t("./lib/TimeoutError"),S=[d,m,v,y,b,g,_,f,x].reduce(function(t,e){return e(t)},t("./lib/Promise")),M=t("./lib/apply")(S);return e.promise=r,e.resolve=S.resolve,e.reject=S.reject,e.lift=n,e.try=i,e.attempt=i,e.iterate=S.iterate,e.unfold=S.unfold,e.join=c,e.all=u,e.settle=h,e.any=n(S.any),e.some=n(S.some),e.race=n(S.race),e.map=l,e.filter=p,e.reduce=n(S.reduce),e.reduceRight=n(S.reduceRight),e.isPromiseLike=s,e.Promise=S,e.defer=o,e.TimeoutError=w,e})}("function"==typeof t&&t.amd?t:function(t){r.exports=t(e)})},{"./lib/Promise":205,"./lib/TimeoutError":207,"./lib/apply":208,"./lib/decorators/array":209,"./lib/decorators/flow":210,"./lib/decorators/fold":211,"./lib/decorators/inspect":212,"./lib/decorators/iterate":213,"./lib/decorators/progress":214,"./lib/decorators/timed":215,"./lib/decorators/unhandledRejection":216,"./lib/decorators/with":217}],223:[function(t,e,r){function n(t){return"[object Array]"===o.call(t)}var i=Array.isArray,o=Object.prototype.toString;e.exports=i||n},{}],224:[function(t,e,r){"use strict";var n=t("./api/APIv3");r.APIv3=n.APIv3;var i=t("./api/ModelCreator");r.ModelCreator=i.ModelCreator},{"./api/APIv3":236,"./api/ModelCreator":237}],225:[function(t,e,r){"use strict";var n=t("./component/Component");r.Component=n.Component;var i=t("./component/ComponentService");r.ComponentService=i.ComponentService;var o=t("./component/AttributionComponent");r.AttributionComponent=o.AttributionComponent;var a=t("./component/BackgroundComponent");r.BackgroundComponent=a.BackgroundComponent;var s=t("./component/BearingComponent");r.BearingComponent=s.BearingComponent;var c=t("./component/CacheComponent");r.CacheComponent=c.CacheComponent;var u=t("./component/CoverComponent");r.CoverComponent=u.CoverComponent;var h=t("./component/DebugComponent");r.DebugComponent=h.DebugComponent;var l=t("./component/direction/DirectionComponent");r.DirectionComponent=l.DirectionComponent;var p=t("./component/direction/DirectionDOMCalculator");r.DirectionDOMCalculator=p.DirectionDOMCalculator;var f=t("./component/direction/DirectionDOMRenderer");r.DirectionDOMRenderer=f.DirectionDOMRenderer;var d=t("./component/ImageComponent");r.ImageComponent=d.ImageComponent;var m=t("./component/KeyboardComponent");r.KeyboardComponent=m.KeyboardComponent;var v=t("./component/LoadingComponent");r.LoadingComponent=v.LoadingComponent;var g=t("./component/marker/marker/Marker");r.Marker=g.Marker;var y=t("./component/marker/MarkerComponent");r.MarkerComponent=y.MarkerComponent;var b=t("./component/marker/MarkerScene");r.MarkerScene=b.MarkerScene;var _=t("./component/marker/MarkerSet");r.MarkerSet=_.MarkerSet;var x=t("./component/mouse/MouseComponent");r.MouseComponent=x.MouseComponent;var w=t("./component/mouse/MouseHandlerBase");r.MouseHandlerBase=w.MouseHandlerBase;var S=t("./component/mouse/DragPanHandler");r.DragPanHandler=S.DragPanHandler;var M=t("./component/mouse/DoubleClickZoomHandler");r.DoubleClickZoomHandler=M.DoubleClickZoomHandler;var E=t("./component/mouse/ScrollZoomHandler");r.ScrollZoomHandler=E.ScrollZoomHandler;var T=t("./component/mouse/TouchZoomHandler");r.TouchZoomHandler=T.TouchZoomHandler;var C=t("./component/NavigationComponent");r.NavigationComponent=C.NavigationComponent;var O=t("./component/RouteComponent");r.RouteComponent=O.RouteComponent;var P=t("./component/sequence/SequenceComponent");r.SequenceComponent=P.SequenceComponent;var A=t("./component/sequence/SequenceDOMRenderer");r.SequenceDOMRenderer=A.SequenceDOMRenderer;var j=t("./component/sequence/SequenceDOMInteraction");r.SequenceDOMInteraction=j.SequenceDOMInteraction;var R=t("./component/imageplane/ImagePlaneComponent");r.ImagePlaneComponent=R.ImagePlaneComponent;var L=t("./component/imageplane/ImagePlaneFactory");r.ImagePlaneFactory=L.ImagePlaneFactory;var N=t("./component/imageplane/ImagePlaneGLRenderer");r.ImagePlaneGLRenderer=N.ImagePlaneGLRenderer;var I=t("./component/imageplane/ImagePlaneScene");r.ImagePlaneScene=I.ImagePlaneScene;var D=t("./component/imageplane/ImagePlaneShaders");r.ImagePlaneShaders=D.ImagePlaneShaders;var k=t("./component/marker/marker/SimpleMarker");r.SimpleMarker=k.SimpleMarker;var F=t("./component/marker/marker/CircleMarker");r.CircleMarker=F.CircleMarker;var U=t("./component/imageplane/SliderComponent");r.SliderComponent=U.SliderComponent;var B=t("./component/StatsComponent");r.StatsComponent=B.StatsComponent;var z=t("./component/tag/tag/Tag");r.Tag=z.Tag;var G=t("./component/tag/tag/Alignment");r.Alignment=G.Alignment;var $=t("./component/tag/tag/OutlineTag");r.OutlineTag=$.OutlineTag;var V=t("./component/tag/tag/RenderTag");r.RenderTag=V.RenderTag;var H=t("./component/tag/tag/OutlineRenderTag");r.OutlineRenderTag=H.OutlineRenderTag;var W=t("./component/tag/tag/OutlineCreateTag");r.OutlineCreateTag=W.OutlineCreateTag;var q=t("./component/tag/tag/SpotTag");r.SpotTag=q.SpotTag;var X=t("./component/tag/tag/SpotRenderTag");r.SpotRenderTag=X.SpotRenderTag;var Y=t("./component/tag/TagComponent");r.TagComponent=Y.TagComponent;var K=t("./component/tag/TagCreator");r.TagCreator=K.TagCreator;var Z=t("./component/tag/TagDOMRenderer");r.TagDOMRenderer=Z.TagDOMRenderer;var J=t("./component/tag/TagGLRenderer");r.TagGLRenderer=J.TagGLRenderer;var Q=t("./component/tag/TagOperation");r.TagOperation=Q.TagOperation;var tt=t("./component/tag/TagSet");r.TagSet=tt.TagSet;var et=t("./component/tag/geometry/Geometry");r.Geometry=et.Geometry;var rt=t("./component/tag/geometry/VertexGeometry");r.VertexGeometry=rt.VertexGeometry;var nt=t("./component/tag/geometry/RectGeometry");r.RectGeometry=nt.RectGeometry;var it=t("./component/tag/geometry/PointGeometry");r.PointGeometry=it.PointGeometry;var ot=t("./component/tag/geometry/PolygonGeometry");r.PolygonGeometry=ot.PolygonGeometry;var at=t("./component/tag/error/GeometryTagError");r.GeometryTagError=at.GeometryTagError},{"./component/AttributionComponent":238,"./component/BackgroundComponent":239,"./component/BearingComponent":240,"./component/CacheComponent":241,"./component/Component":242,"./component/ComponentService":243,"./component/CoverComponent":244,"./component/DebugComponent":245,"./component/ImageComponent":246,"./component/KeyboardComponent":247,"./component/LoadingComponent":248,"./component/NavigationComponent":249,"./component/RouteComponent":250,"./component/StatsComponent":251,"./component/direction/DirectionComponent":252,"./component/direction/DirectionDOMCalculator":253,"./component/direction/DirectionDOMRenderer":254,"./component/imageplane/ImagePlaneComponent":255,"./component/imageplane/ImagePlaneFactory":256,"./component/imageplane/ImagePlaneGLRenderer":257,"./component/imageplane/ImagePlaneScene":258,"./component/imageplane/ImagePlaneShaders":259,"./component/imageplane/SliderComponent":260,"./component/marker/MarkerComponent":262,"./component/marker/MarkerScene":263,"./component/marker/MarkerSet":264,"./component/marker/marker/CircleMarker":265,"./component/marker/marker/Marker":266,"./component/marker/marker/SimpleMarker":267,"./component/mouse/DoubleClickZoomHandler":268,"./component/mouse/DragPanHandler":269,"./component/mouse/MouseComponent":270,"./component/mouse/MouseHandlerBase":271,"./component/mouse/ScrollZoomHandler":272,"./component/mouse/TouchZoomHandler":273,"./component/sequence/SequenceComponent":274,"./component/sequence/SequenceDOMInteraction":275,"./component/sequence/SequenceDOMRenderer":276,"./component/tag/TagComponent":278,"./component/tag/TagCreator":279,"./component/tag/TagDOMRenderer":280,"./component/tag/TagGLRenderer":281,"./component/tag/TagOperation":282,"./component/tag/TagSet":283,"./component/tag/error/GeometryTagError":284,"./component/tag/geometry/Geometry":285,"./component/tag/geometry/PointGeometry":286,"./component/tag/geometry/PolygonGeometry":287,"./component/tag/geometry/RectGeometry":288,"./component/tag/geometry/VertexGeometry":289,"./component/tag/tag/Alignment":290,"./component/tag/tag/OutlineCreateTag":291,"./component/tag/tag/OutlineRenderTag":292,"./component/tag/tag/OutlineTag":293,"./component/tag/tag/RenderTag":294,"./component/tag/tag/SpotRenderTag":295,"./component/tag/tag/SpotTag":296,"./component/tag/tag/Tag":297}],226:[function(t,e,r){"use strict";var n=t("./graph/edge/EdgeDirection");r.EdgeDirection=n.EdgeDirection;var i=t("./graph/edge/EdgeCalculatorSettings");r.EdgeCalculatorSettings=i.EdgeCalculatorSettings;var o=t("./graph/edge/EdgeCalculatorDirections");r.EdgeCalculatorDirections=o.EdgeCalculatorDirections;var a=t("./graph/edge/EdgeCalculatorCoefficients");r.EdgeCalculatorCoefficients=a.EdgeCalculatorCoefficients;var s=t("./graph/edge/EdgeCalculator");r.EdgeCalculator=s.EdgeCalculator},{"./graph/edge/EdgeCalculator":315,"./graph/edge/EdgeCalculatorCoefficients":316,"./graph/edge/EdgeCalculatorDirections":317,"./graph/edge/EdgeCalculatorSettings":318,"./graph/edge/EdgeDirection":319}],227:[function(t,e,r){"use strict";var n=t("./error/ArgumentMapillaryError");r.ArgumentMapillaryError=n.ArgumentMapillaryError;var i=t("./error/GraphMapillaryError");r.GraphMapillaryError=i.GraphMapillaryError;var o=t("./error/MapillaryError");r.MapillaryError=o.MapillaryError},{"./error/ArgumentMapillaryError":298,"./error/GraphMapillaryError":299,"./error/MapillaryError":300}],228:[function(t,e,r){"use strict";var n=t("./geo/Camera");r.Camera=n.Camera;var i=t("./geo/GeoCoords");r.GeoCoords=i.GeoCoords;var o=t("./geo/ViewportCoords");r.ViewportCoords=o.ViewportCoords;var a=t("./geo/Spatial");r.Spatial=a.Spatial;var s=t("./geo/Transform");r.Transform=s.Transform},{"./geo/Camera":301,"./geo/GeoCoords":302,"./geo/Spatial":303,"./geo/Transform":304,"./geo/ViewportCoords":305}],229:[function(t,e,r){"use strict";var n=t("./graph/FilterCreator");r.FilterCreator=n.FilterCreator;var i=t("./graph/Graph");r.Graph=i.Graph;var o=t("./graph/GraphCalculator");r.GraphCalculator=o.GraphCalculator;var a=t("./graph/GraphService");r.GraphService=a.GraphService;var s=t("./graph/ImageLoadingService");r.ImageLoadingService=s.ImageLoadingService;var c=t("./graph/MeshReader");r.MeshReader=c.MeshReader;var u=t("./graph/Node");r.Node=u.Node;var h=t("./graph/NodeCache");r.NodeCache=h.NodeCache;var l=t("./graph/Sequence");r.Sequence=l.Sequence},{"./graph/FilterCreator":306,"./graph/Graph":307,"./graph/GraphCalculator":308,"./graph/GraphService":309,"./graph/ImageLoadingService":310,"./graph/MeshReader":311,"./graph/Node":312,"./graph/NodeCache":313,"./graph/Sequence":314}],230:[function(t,e,r){"use strict";var n=t("./Edge");r.EdgeDirection=n.EdgeDirection;var i=t("./Render");r.RenderMode=i.RenderMode;var o=t("./Viewer");r.ImageSize=o.ImageSize,r.Viewer=o.Viewer;var a=t("./component/tag/Tag");r.TagComponent=a;var s=t("./component/marker/Marker");r.MarkerComponent=s},{"./Edge":226,"./Render":231,"./Viewer":235,"./component/marker/Marker":261,"./component/tag/Tag":277}],231:[function(t,e,r){"use strict";var n=t("./render/DOMRenderer");r.DOMRenderer=n.DOMRenderer;var i=t("./render/GLRenderer");r.GLRenderer=i.GLRenderer;var o=t("./render/GLRenderStage");r.GLRenderStage=o.GLRenderStage;var a=t("./render/RenderCamera");r.RenderCamera=a.RenderCamera;var s=t("./render/RenderMode");r.RenderMode=s.RenderMode;var c=t("./render/RenderService");r.RenderService=c.RenderService},{"./render/DOMRenderer":320,"./render/GLRenderStage":321,"./render/GLRenderer":322,"./render/RenderCamera":323,"./render/RenderMode":324,"./render/RenderService":325}],232:[function(t,e,r){"use strict";var n=t("./state/State");r.State=n.State;var i=t("./state/states/StateBase");r.StateBase=i.StateBase;var o=t("./state/StateContext");r.StateContext=o.StateContext;var a=t("./state/StateService");r.StateService=a.StateService;var s=t("./state/states/TraversingState");r.TraversingState=s.TraversingState;var c=t("./state/states/WaitingState");r.WaitingState=c.WaitingState},{"./state/State":326,"./state/StateContext":327,"./state/StateService":328,"./state/states/StateBase":329,"./state/states/TraversingState":330,"./state/states/WaitingState":331}],233:[function(t,e,r){"use strict";var n=t("./tiles/ImageTileLoader");r.ImageTileLoader=n.ImageTileLoader;var i=t("./tiles/ImageTileStore");r.ImageTileStore=i.ImageTileStore;var o=t("./tiles/TextureProvider");r.TextureProvider=o.TextureProvider;var a=t("./tiles/RegionOfInterestCalculator");r.RegionOfInterestCalculator=a.RegionOfInterestCalculator},{"./tiles/ImageTileLoader":332,"./tiles/ImageTileStore":333,"./tiles/RegionOfInterestCalculator":334,"./tiles/TextureProvider":335}],234:[function(t,e,r){"use strict";var n=t("./utils/EventEmitter");r.EventEmitter=n.EventEmitter;var i=t("./utils/Settings");r.Settings=i.Settings;var o=t("./utils/Urls");r.Urls=o.Urls},{"./utils/EventEmitter":336,"./utils/Settings":337,"./utils/Urls":338}],235:[function(t,e,r){"use strict";var n=t("./viewer/CacheService");r.CacheService=n.CacheService;var i=t("./viewer/ComponentController");r.ComponentController=i.ComponentController;var o=t("./viewer/Container");r.Container=o.Container;var a=t("./viewer/Observer");r.Observer=a.Observer;var s=t("./viewer/ImageSize");r.ImageSize=s.ImageSize;var c=t("./viewer/LoadingService");r.LoadingService=c.LoadingService;var u=t("./viewer/MouseService");r.MouseService=u.MouseService;var h=t("./viewer/Navigator");r.Navigator=h.Navigator;var l=t("./viewer/Projection");r.Projection=l.Projection;var p=t("./viewer/SpriteAlignment");r.SpriteAlignment=p.SpriteAlignment;var f=t("./viewer/SpriteService");r.SpriteService=f.SpriteService;var d=t("./viewer/TouchService");r.TouchService=d.TouchService;var m=t("./viewer/Viewer");r.Viewer=m.Viewer},{"./viewer/CacheService":339,"./viewer/ComponentController":340,"./viewer/Container":341,"./viewer/ImageSize":342,"./viewer/LoadingService":343,"./viewer/MouseService":344,"./viewer/Navigator":345,"./viewer/Observer":346,"./viewer/Projection":347,"./viewer/SpriteAlignment":348,"./viewer/SpriteService":349,"./viewer/TouchService":350,"./viewer/Viewer":351}],236:[function(t,e,r){"use strict";var n=t("rxjs/Observable");t("rxjs/add/observable/defer"),t("rxjs/add/observable/fromPromise"),t("rxjs/add/operator/catch"),t("rxjs/add/operator/map");var i=t("../API"),o=function(){function t(t,e,r){this._clientId=t,this._modelCreator=null!=r?r:new i.ModelCreator,this._model=this._modelCreator.createModel(t,e),this._pageCount=999,this._pathImageByKey="imageByKey",this._pathImageCloseTo="imageCloseTo",this._pathImagesByH="imagesByH",this._pathImageViewAdd="imageViewAdd",this._pathSequenceByKey="sequenceByKey",this._pathSequenceViewAdd="sequenceViewAdd",this._propertiesCore=["cl","l","sequence"],this._propertiesFill=["captured_at","user","project"],this._propertiesKey=["key"],this._propertiesSequence=["keys"],this._propertiesSpatial=["atomic_scale","ca","calt","cca","cfocal","gpano","height","merge_cc","merge_version","c_rotation","orientation","width"],this._propertiesUser=["username"]}return t.prototype.imageByKeyFill$=function(t){return this._catchInvalidateGet$(this._wrapPromise$(this._model.get([this._pathImageByKey,t,this._propertiesKey.concat(this._propertiesFill).concat(this._propertiesSpatial),this._propertiesKey.concat(this._propertiesUser)])).map(function(t){return t.json.imageByKey}),this._pathImageByKey,t)},t.prototype.imageByKeyFull$=function(t){return this._catchInvalidateGet$(this._wrapPromise$(this._model.get([this._pathImageByKey,t,this._propertiesKey.concat(this._propertiesCore).concat(this._propertiesFill).concat(this._propertiesSpatial),this._propertiesKey.concat(this._propertiesUser)])).map(function(t){return t.json.imageByKey}),this._pathImageByKey,t)},t.prototype.imageCloseTo$=function(t,e){var r=e+":"+t;return this._catchInvalidateGet$(this._wrapPromise$(this._model.get([this._pathImageCloseTo,[r],this._propertiesKey.concat(this._propertiesCore).concat(this._propertiesFill).concat(this._propertiesSpatial),this._propertiesKey.concat(this._propertiesUser)])).map(function(t){return null!=t?t.json.imageCloseTo[r]:null}),this._pathImageCloseTo,[r])},t.prototype.imagesByH$=function(t){var e=this;return this._catchInvalidateGet$(this._wrapPromise$(this._model.get([this._pathImagesByH,t,{from:0,to:this._pageCount},this._propertiesKey.concat(this._propertiesCore),this._propertiesKey])).map(function(r){if(null==r){r={json:{imagesByH:{}}};for(var n=0,i=t;n<i.length;n++){var o=i[n];r.json.imagesByH[o]={};for(var a=0;a<=e._pageCount;a++)r.json.imagesByH[o][a]=null}}return r.json.imagesByH}),this._pathImagesByH,t)},t.prototype.imageViewAdd$=function(t){return this._catchInvalidateCall$(this._wrapPromise$(this._model.call([this._pathImageViewAdd],[t])),this._pathImageViewAdd,t)},t.prototype.invalidateImageByKey=function(t){this._invalidateGet(this._pathImageByKey,t)},t.prototype.invalidateImagesByH=function(t){this._invalidateGet(this._pathImagesByH,t)},t.prototype.invalidateSequenceByKey=function(t){this._invalidateGet(this._pathSequenceByKey,t)},t.prototype.setToken=function(t){this._model.invalidate([]),this._model=null,this._model=this._modelCreator.createModel(this._clientId,t)},t.prototype.sequenceByKey$=function(t){return this._catchInvalidateGet$(this._wrapPromise$(this._model.get([this._pathSequenceByKey,t,this._propertiesKey.concat(this._propertiesSequence)])).map(function(t){return t.json.sequenceByKey}),this._pathSequenceByKey,t)},t.prototype.sequenceViewAdd$=function(t){return this._catchInvalidateCall$(this._wrapPromise$(this._model.call([this._pathSequenceViewAdd],[t])),this._pathSequenceViewAdd,t)},Object.defineProperty(t.prototype,"clientId",{get:function(){return this._clientId},enumerable:!0,configurable:!0}),t.prototype._catchInvalidateGet$=function(t,e,r){var n=this;return t.catch(function(t){throw n._invalidateGet(e,r),t})},t.prototype._catchInvalidateCall$=function(t,e,r){var n=this;return t.catch(function(t){throw n._invalidateCall(e,r),t})},t.prototype._invalidateGet=function(t,e){this._model.invalidate([t,e])},t.prototype._invalidateCall=function(t,e){this._model.invalidate([t],[e])},t.prototype._wrapPromise$=function(t){return n.Observable.defer(function(){return n.Observable.fromPromise(t)})},t}();r.APIv3=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../API":224,"rxjs/Observable":28,"rxjs/add/observable/defer":38,"rxjs/add/observable/fromPromise":42,"rxjs/add/operator/catch":51,"rxjs/add/operator/map":64}],237:[function(t,e,r){"use strict";var n=t("falcor"),i=t("falcor-http-datasource"),o=t("../Utils"),a=function(){function t(){}return t.prototype.createModel=function(t,e){var r={crossDomain:!0,withCredentials:!1};return null!=e&&(r.headers={Authorization:"Bearer "+e}),new n.Model({maxSize:16777216,source:new i(o.Urls.falcorModel(t),r)})},t}();r.ModelCreator=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../Utils":234,falcor:13,"falcor-http-datasource":8}],238:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom"),o=t("../Component"),a=function(t){function e(e,r,n){return t.call(this,e,r,n)||this}return n(e,t),e.prototype._activate=function(){var t=this;this._disposable=this._navigator.stateService.currentNode$.map(function(e){return{name:t._name,vnode:t._getAttributionNode(e.username,e.key)}}).subscribe(this._container.domRenderer.render$)},e.prototype._deactivate=function(){this._disposable.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype._getAttributionNode=function(t,e){return i.h("div.Attribution",{},[i.h("a",{href:"https://www.mapillary.com/app/user/"+t,target:"_blank",textContent:"@"+t},[]),i.h("span",{textContent:"|"},[]),i.h("a",{href:"https://www.mapillary.com/app/?pKey="+e+"&focus=photo",target:"_blank",textContent:"mapillary.com"},[])])},e}(o.Component);a.componentName="attribution",r.AttributionComponent=a,o.ComponentService.register(a),Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../Component":225,"virtual-dom":181}],239:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom"),o=t("../Component"),a=function(t){function e(e,r,n){return t.call(this,e,r,n)||this}return n(e,t),e.prototype._activate=function(){this._container.domRenderer.render$.next({name:this._name,vnode:this._getBackgroundNode("The viewer can't display the given photo.")})},e.prototype._deactivate=function(){},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype._getBackgroundNode=function(t){return i.h("div.BackgroundWrapper",{},[i.h("p",{textContent:t},[])])},e}(o.Component);a.componentName="background",r.BackgroundComponent=a,o.ComponentService.register(a),Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../Component":225,"virtual-dom":181}],240:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom"),o=t("rxjs/Observable"),a=t("../Component"),s=t("../Geo"),c=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._spatial=new s.Spatial,i._svgNamespace="http://www.w3.org/2000/svg",i._distinctThreshold=Math.PI/90,i}return n(e,t),e.prototype._activate=function(){var t=this,e=this._navigator.stateService.currentState$.distinctUntilChanged(void 0,function(t){return t.state.currentNode.key}).map(function(e){var r=e.state.currentNode,n=e.state.currentTransform;if(r.pano){var i=2*Math.PI*r.gpano.CroppedAreaImageWidthPixels/r.gpano.FullPanoWidthPixels;return[t._spatial.degToRad(r.ca),i]}var o=Math.max(n.basicWidth,n.basicHeight);o<=0&&console.warn("Original image size ("+n.basicWidth+", "+n.basicHeight+") is invalid ("+r.key+". Not showing available fov.");var a=o>0?2*Math.atan(.5*n.basicWidth/(o*n.focal)):0;return[t._spatial.degToRad(r.ca),a]}).distinctUntilChanged(function(e,r){return Math.abs(r[0]-e[0])<t._distinctThreshold&&Math.abs(r[1]-e[1])<t._distinctThreshold}),r=this._container.renderService.renderCamera$.map(function(e){var r=t._spatial.degToRad(e.perspective.fov),n=e.perspective.aspect===Number.POSITIVE_INFINITY?Math.PI:2*Math.atan(e.perspective.aspect*Math.tan(.5*r));return[t._spatial.azimuthalToBearing(e.rotation.phi),n]}).distinctUntilChanged(function(e,r){return Math.abs(r[0]-e[0])<t._distinctThreshold&&Math.abs(r[1]-e[1])<t._distinctThreshold});this._renderSubscription=o.Observable.combineLatest(e,r).map(function(e){var r=i.h("div.BearingIndicatorBackground",{oncontextmenu:function(t){t.preventDefault()}},[i.h("div.BearingIndicatorBackgroundRectangle",{},[]),i.h("div.BearingIndicatorBackgroundCircle",{},[])]),n=i.h("div.BearingIndicatorNorth",{},[]),o=t._createCircleSector(e[0][0],e[0][1],"#000"),a=t._createCircleSector(e[1][0],e[1][1],"#fff"),s=t._createCircleSectorCompass(o,a);return{name:t._name,vnode:i.h("div.BearingIndicator",{},[r,n,s])}}).subscribe(this._container.domRenderer.render$)},e.prototype._deactivate=function(){this._renderSubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype._createCircleSectorCompass=function(t,e){var r=i.h("g",{attributes:{transform:"translate(1,1)"},namespace:this._svgNamespace},[t,e]),n=i.h("circle",{attributes:{cx:"1",cy:"1",fill:"#abb1b9",r:"0.291667",stroke:"#000","stroke-width":"0.0833333"},namespace:this._svgNamespace},[]);return i.h("svg",{attributes:{viewBox:"0 0 2 2"},namespace:this._svgNamespace,style:{bottom:"4px",height:"48px",left:"4px",position:"absolute",width:"48px"}},[r,n])},e.prototype._createCircleSector=function(t,e,r){if(e>2*Math.PI-Math.PI/90)return i.h("circle",{attributes:{cx:"0",cy:"0",fill:r,r:"1"},namespace:this._svgNamespace},[]);var n=t-e/2-Math.PI/2,o=n+e,a=Math.cos(n),s=Math.sin(n),c=Math.cos(o),u=Math.sin(o),h=e>=Math.PI?1:0,l="M 0 0 "+a+" "+s+" A 1 1 0 "+h+" 1 "+c+" "+u;return i.h("path",{attributes:{d:l,fill:r},namespace:this._svgNamespace},[])},e}(a.Component);c.componentName="bearing",r.BearingComponent=c,a.ComponentService.register(c),Object.defineProperty(r,"__esModule",{value:!0}),r.default=c},{"../Component":225,"../Geo":228,"rxjs/Observable":28,"virtual-dom":181}],241:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable");t("rxjs/add/observable/combineLatest"),t("rxjs/add/observable/from"),t("rxjs/add/observable/merge"),t("rxjs/add/observable/of"),t("rxjs/add/observable/zip"),t("rxjs/add/operator/catch"),t("rxjs/add/operator/combineLatest"),t("rxjs/add/operator/distinct"),t("rxjs/add/operator/expand"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/merge"),t("rxjs/add/operator/mergeMap"),t("rxjs/add/operator/mergeAll"),t("rxjs/add/operator/skip"),t("rxjs/add/operator/switchMap");var o=t("../Edge"),a=t("../Component"),s=function(t){function e(e,r,n){return t.call(this,e,r,n)||this}return n(e,t),e.prototype.setDepth=function(t){this.configure({depth:t})},e.prototype._activate=function(){var t=this;this._sequenceSubscription=i.Observable.combineLatest(this._navigator.stateService.currentNode$.switchMap(function(t){return t.sequenceEdges$}).filter(function(t){return t.cached}),this._configuration$).switchMap(function(e){var r=e[0],n=e[1],a=Math.max(0,Math.min(4,n.depth.sequence)),s=t._cache$(r.edges,o.EdgeDirection.Next,a),c=t._cache$(r.edges,o.EdgeDirection.Prev,a);return i.Observable.merge(s,c).catch(function(t,e){return console.error("Failed to cache sequence edges.",t),i.Observable.empty()})}).subscribe(function(){}),this._spatialSubscription=this._navigator.stateService.currentNode$.switchMap(function(t){return i.Observable.combineLatest(i.Observable.of(t),t.spatialEdges$.filter(function(t){return t.cached}))}).combineLatest(this._configuration$,function(t,e){return[t[0],t[1],e]}).switchMap(function(e){var r=e[0],n=e[1].edges,a=e[2].depth,s=Math.max(0,Math.min(2,a.pano)),c=r.pano?0:Math.max(0,Math.min(3,a.step)),u=r.pano?0:Math.max(0,Math.min(1,a.turn)),h=t._cache$(n,o.EdgeDirection.Pano,s),l=t._cache$(n,o.EdgeDirection.StepForward,c),p=t._cache$(n,o.EdgeDirection.StepBackward,c),f=t._cache$(n,o.EdgeDirection.StepLeft,c),d=t._cache$(n,o.EdgeDirection.StepRight,c),m=t._cache$(n,o.EdgeDirection.TurnLeft,u),v=t._cache$(n,o.EdgeDirection.TurnRight,u),g=t._cache$(n,o.EdgeDirection.TurnU,u);return i.Observable.merge(l,p,f,d,h,m,v,g).catch(function(t,e){return console.error("Failed to cache spatial edges.",t),i.Observable.empty()})}).subscribe(function(){})},e.prototype._deactivate=function(){this._sequenceSubscription.unsubscribe(),this._spatialSubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{depth:{pano:1,sequence:2,step:1,turn:0}}},e.prototype._cache$=function(t,e,r){var n=this;return i.Observable.zip(i.Observable.of(t),i.Observable.of(r)).expand(function(t){var r=t[0],o=t[1],a=[];if(o>0)for(var s=0,c=r;s<c.length;s++){var u=c[s];u.data.direction===e&&a.push(i.Observable.zip(n._navigator.graphService.cacheNode$(u.to).mergeMap(function(t){return n._nodeToEdges$(t,e)}),i.Observable.of(o-1)))}return i.Observable.from(a).mergeAll()}).skip(1)},e.prototype._nodeToEdges$=function(t,e){return([o.EdgeDirection.Next,o.EdgeDirection.Prev].indexOf(e)>-1?t.sequenceEdges$:t.spatialEdges$).first(function(t){return t.cached}).map(function(t){return t.edges})},e}(a.Component);s.componentName="cache",r.CacheComponent=s,a.ComponentService.register(s),Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../Component":225,"../Edge":226,"rxjs/Observable":28,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/from":40,"rxjs/add/observable/merge":43,"rxjs/add/observable/of":44,"rxjs/add/observable/zip":47,"rxjs/add/operator/catch":51,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/distinct":56,"rxjs/add/operator/expand":59,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeAll":66,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/skip":74,"rxjs/add/operator/switchMap":78}],242:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/BehaviorSubject"),o=t("rxjs/Subject");t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/startWith");var a=t("../Utils"),s=function(t){function e(e,r,n){var a=t.call(this)||this;return a._activated$=new i.BehaviorSubject(!1),a._configurationSubject$=new o.Subject,a._activated=!1,a._container=r,a._name=e,a._navigator=n,a._configuration$=a._configurationSubject$.startWith(a.defaultConfiguration).scan(function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);return t}).publishReplay(1).refCount(),a._configuration$.subscribe(function(){}),a}return n(e,t),Object.defineProperty(e.prototype,"activated",{get:function(){return this._activated},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"activated$",{get:function(){return this._activated$},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"defaultConfiguration",{get:function(){return this._getDefaultConfiguration()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"configuration$",{get:function(){return this._configuration$},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"name",{get:function(){return this._name},enumerable:!0,configurable:!0}),e.prototype.activate=function(t){this._activated||(void 0!==t&&this._configurationSubject$.next(t),this._activated=!0,this._activate(),this._activated$.next(!0))},e.prototype.configure=function(t){this._configurationSubject$.next(t)},e.prototype.deactivate=function(){this._activated&&(this._activated=!1,this._deactivate(),this._container.domRenderer.clear(this._name),this._container.glRenderer.clear(this._name),this._activated$.next(!1))},e.prototype.resize=function(){},e}(a.EventEmitter);s.componentName="not_worthy",r.Component=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../Utils":234,"rxjs/BehaviorSubject":25,"rxjs/Subject":33,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77}],243:[function(t,e,r){"use strict";var n=t("underscore"),i=t("../Error"),o=function(){function t(e,r){this._components={},this._container=e,this._navigator=r;for(var i=0,o=n.values(t.registeredComponents);i<o.length;i++){var a=o[i];this._components[a.componentName]={active:!1,component:new a(a.componentName,e,r)}}this._coverComponent=new t.registeredCoverComponent("cover",e,r),this._coverComponent.activate(),this._coverActivated=!0}return t.register=function(e){void 0===t.registeredComponents[e.componentName]&&(t.registeredComponents[e.componentName]=e)},t.registerCover=function(e){t.registeredCoverComponent=e},t.prototype.activateCover=function(){if(!this._coverActivated){this._coverActivated=!0
+;for(var t=0,e=n.values(this._components);t<e.length;t++){var r=e[t];r.active&&r.component.deactivate()}}},t.prototype.deactivateCover=function(){if(this._coverActivated){this._coverActivated=!1;for(var t=0,e=n.values(this._components);t<e.length;t++){var r=e[t];r.active&&r.component.activate()}}},t.prototype.activate=function(t){this._checkName(t),this._components[t].active=!0,this._coverActivated||this.get(t).activate()},t.prototype.configure=function(t,e){this._checkName(t),this.get(t).configure(e)},t.prototype.deactivate=function(t){this._checkName(t),this._components[t].active=!1,this._coverActivated||this.get(t).deactivate()},t.prototype.resize=function(){for(var t=0,e=n.values(this._components);t<e.length;t++){e[t].component.resize()}},t.prototype.get=function(t){return this._components[t].component},t.prototype.getCover=function(){return this._coverComponent},t.prototype._checkName=function(t){if(!(t in this._components))throw new i.ArgumentMapillaryError("Component does not exist: "+t)},t}();o.registeredComponents={},r.ComponentService=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../Error":227,underscore:176}],244:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom");t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/withLatestFrom");var o=t("../Component"),a=function(t){function e(e,r,n){return t.call(this,e,r,n)||this}return n(e,t),e.prototype._activate=function(){var t=this;this._keyDisposable=this._navigator.stateService.currentNode$.withLatestFrom(this._configuration$,function(t,e){return[t,e]}).filter(function(t){return t[0].key!==t[1].key}).map(function(t){return t[0]}).map(function(t){return{key:t.key,src:t.image.src}}).subscribe(this._configurationSubject$),this._disposable=this._configuration$.map(function(e){return e.key?e.visible?{name:t._name,vnode:t._getCoverButtonVNode(e)}:{name:t._name,vnode:i.h("div.Cover.CoverDone",[t._getCoverBackgroundVNode(e)])}:{name:t._name,vnode:i.h("div",[])}}).subscribe(this._container.domRenderer.render$)},e.prototype._deactivate=function(){this._disposable.unsubscribe(),this._keyDisposable.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{loading:!1,visible:!0}},e.prototype._getCoverButtonVNode=function(t){var e=this,r=t.loading?"div.Cover.CoverLoading":"div.Cover";return i.h(r,[this._getCoverBackgroundVNode(t),i.h("button.CoverButton",{onclick:function(){e.configure({loading:!0})}},["Explore"]),i.h("a.CoverLogo",{href:"https://www.mapillary.com",target:"_blank"},[])])},e.prototype._getCoverBackgroundVNode=function(t){var e=null!=t.src?"url("+t.src+")":"url(https://d1cuyjsrcm0gby.cloudfront.net/"+t.key+"/thumb-640.jpg)",r={style:{backgroundImage:e}},n=[];return t.loading&&n.push(i.h("div.Spinner",{},[])),n.push(i.h("div.CoverBackgroundGradient",{},[])),i.h("div.CoverBackground",r,n)},e}(o.Component);a.componentName="cover",r.CoverComponent=a,o.ComponentService.registerCover(a),Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../Component":225,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/withLatestFrom":82,"virtual-dom":181}],245:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("underscore"),o=t("virtual-dom"),a=t("rxjs/BehaviorSubject");t("rxjs/add/operator/combineLatest");var s=t("../Component"),c=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._open$=new a.BehaviorSubject(!1),i._displaying=!1,i}return n(e,t),e.prototype._activate=function(){var t=this;this._disposable=this._navigator.stateService.currentState$.combineLatest(this._open$,this._navigator.imageLoadingService.loadstatus$,function(e,r,n){return{name:t._name,vnode:t._getDebugVNode(r,t._getDebugInfo(e,n))}}).subscribe(this._container.domRenderer.render$)},e.prototype._deactivate=function(){this._disposable.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype._getDebugInfo=function(t,e){var r=[];r.push(o.h("h2","Node")),t.state.currentNode&&r.push(o.h("p","currentNode: "+t.state.currentNode.key)),t.state.previousNode&&r.push(o.h("p","previousNode: "+t.state.previousNode.key)),r.push(o.h("h2","Loading"));for(var n=0,a=0,s=0,c=0,u=i.values(e);c<u.length;c++){var h=u[c];n+=h.loaded,h.loaded!==h.total?s++:a++}return r.push(o.h("p","Loaded Images: "+a)),r.push(o.h("p","Loading Images: "+s)),r.push(o.h("p","Total bytes loaded: "+n)),r.push(o.h("h2","Camera")),r.push(o.h("p","camera.position.x: "+t.state.camera.position.x)),r.push(o.h("p","camera.position.y: "+t.state.camera.position.y)),r.push(o.h("p","camera.position.z: "+t.state.camera.position.z)),r.push(o.h("p","camera.lookat.x: "+t.state.camera.lookat.x)),r.push(o.h("p","camera.lookat.y: "+t.state.camera.lookat.y)),r.push(o.h("p","camera.lookat.z: "+t.state.camera.lookat.z)),r.push(o.h("p","camera.up.x: "+t.state.camera.up.x)),r.push(o.h("p","camera.up.y: "+t.state.camera.up.y)),r.push(o.h("p","camera.up.z: "+t.state.camera.up.z)),r},e.prototype._getDebugVNode=function(t,e){return t?o.h("div.Debug",{},[o.h("h2",{},["Debug"]),this._getDebugVNodeButton(t),o.h("pre",{},e)]):this._getDebugVNodeButton(t)},e.prototype._getDebugVNodeButton=function(t){var e=t?"Disable Debug":"D",r=t?"":".DebugButtonFixed";return t?o.h("button.DebugButton"+r,{onclick:this._closeDebugElement.bind(this)},[e]):o.h("button.DebugButton"+r,{onclick:this._openDebugElement.bind(this)},[e])},e.prototype._closeDebugElement=function(t){this._open$.next(!1)},e.prototype._openDebugElement=function(){this._open$.next(!0)},e}(s.Component);c.componentName="debug",r.DebugComponent=c,s.ComponentService.register(c),Object.defineProperty(r,"__esModule",{value:!0}),r.default=c},{"../Component":225,"rxjs/BehaviorSubject":25,"rxjs/add/operator/combineLatest":52,underscore:176,"virtual-dom":181}],246:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom");t("rxjs/add/operator/combineLatest");var o=t("../Component"),a=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._canvasId=r.id+"-"+i._name,i}return n(e,t),e.prototype._activate=function(){var t=this;this.drawSubscription=this._container.domRenderer.element$.combineLatest(this._navigator.stateService.currentNode$,function(e,r){return{canvas:document.getElementById(t._canvasId),node:r}}).subscribe(function(t){var e=t.canvas,r=t.node;if(!r||!e)return null;var n=e.parentElement,i=n.offsetWidth,o=n.offsetHeight;e.width=i,e.height=o,e.getContext("2d").drawImage(r.image,0,0,i,o)}),this._container.domRenderer.renderAdaptive$.next({name:this._name,vnode:i.h("canvas#"+this._canvasId,[])})},e.prototype._deactivate=function(){this.drawSubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e}(o.Component);a.componentName="image",r.ImageComponent=a,o.ComponentService.register(a),Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../Component":225,"rxjs/add/operator/combineLatest":52,"virtual-dom":181}],247:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable");t("rxjs/add/observable/fromEvent"),t("rxjs/add/operator/withLatestFrom");var o=t("../Edge"),a=t("../Component"),s=t("../Geo"),c=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._spatial=new s.Spatial,i._perspectiveDirections=[o.EdgeDirection.StepForward,o.EdgeDirection.StepBackward,o.EdgeDirection.StepLeft,o.EdgeDirection.StepRight,o.EdgeDirection.TurnLeft,o.EdgeDirection.TurnRight,o.EdgeDirection.TurnU],i}return n(e,t),e.prototype._activate=function(){var t=this,e=this._navigator.stateService.currentNode$.switchMap(function(t){return t.sequenceEdges$}),r=this._navigator.stateService.currentNode$.switchMap(function(t){return t.spatialEdges$});this._disposable=i.Observable.fromEvent(document,"keydown").withLatestFrom(this._navigator.stateService.currentState$,e,r,function(t,e,r,n){return{event:t,frame:e,sequenceEdges:r,spatialEdges:n}}).subscribe(function(e){e.frame.state.currentNode.pano?t._navigatePanorama(e.event,e.sequenceEdges,e.spatialEdges,e.frame.state.camera):t._navigatePerspective(e.event,e.sequenceEdges,e.spatialEdges)})},e.prototype._deactivate=function(){this._disposable.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype._navigatePanorama=function(t,e,r,n){var i=0,a=null,s=null,c=this._rotationFromCamera(n).phi;switch(t.keyCode){case 37:if(t.shiftKey||t.altKey)break;i=Math.PI/2+c,a=o.EdgeDirection.StepLeft;break;case 38:if(t.shiftKey)break;if(t.altKey){s=o.EdgeDirection.Next;break}i=c,a=o.EdgeDirection.StepForward;break;case 39:if(t.shiftKey||t.altKey)break;i=-Math.PI/2+c,a=o.EdgeDirection.StepRight;break;case 40:if(t.shiftKey)break;if(t.altKey){s=o.EdgeDirection.Prev;break}i=Math.PI+c,a=o.EdgeDirection.StepBackward;break;default:return}if(t.preventDefault(),null!=s)return void this._moveInDir(s,e);if(null!=a&&r.cached){i=this._spatial.wrapAngle(i);for(var u=Math.PI/4,h=r.edges.filter(function(t){return t.data.direction===o.EdgeDirection.Pano||t.data.direction===a}),l=Number.MAX_VALUE,p=null,f=0,d=h;f<d.length;f++){var m=d[f],v=Math.abs(this._spatial.wrapAngle(m.data.worldMotionAzimuth-i));v<Math.min(l,u)&&(l=v,p=m.to)}null!=p&&this._navigator.moveToKey$(p).subscribe(function(t){},function(t){console.error(t)})}},e.prototype._rotationFromCamera=function(t){var e=t.lookat.clone().sub(t.position),r=e.clone().dot(t.up),n=e.clone().sub(t.up.clone().multiplyScalar(r));return{phi:Math.atan2(n.y,n.x),theta:Math.PI/2-this._spatial.angleToPlane(e.toArray(),[0,0,1])}},e.prototype._navigatePerspective=function(t,e,r){var n=null,i=null;switch(t.keyCode){case 37:if(t.altKey)break;n=t.shiftKey?o.EdgeDirection.TurnLeft:o.EdgeDirection.StepLeft;break;case 38:if(t.altKey){i=o.EdgeDirection.Next;break}n=t.shiftKey?o.EdgeDirection.Pano:o.EdgeDirection.StepForward;break;case 39:if(t.altKey)break;n=t.shiftKey?o.EdgeDirection.TurnRight:o.EdgeDirection.StepRight;break;case 40:if(t.altKey){i=o.EdgeDirection.Prev;break}n=t.shiftKey?o.EdgeDirection.TurnU:o.EdgeDirection.StepBackward;break;default:return}if(t.preventDefault(),null!=i)return void this._moveInDir(i,e);this._moveInDir(n,r)},e.prototype._moveInDir=function(t,e){if(e.cached)for(var r=0,n=e.edges;r<n.length;r++){var i=n[r];if(i.data.direction===t)return void this._navigator.moveToKey$(i.to).subscribe(function(t){},function(t){console.error(t)})}},e}(a.Component);c.componentName="keyboard",r.KeyboardComponent=c,a.ComponentService.register(c),Object.defineProperty(r,"__esModule",{value:!0}),r.default=c},{"../Component":225,"../Edge":226,"../Geo":228,"rxjs/Observable":28,"rxjs/add/observable/fromEvent":41,"rxjs/add/operator/withLatestFrom":82}],248:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("underscore"),o=t("virtual-dom");t("rxjs/add/operator/combineLatest");var a=t("../Component"),s=function(t){function e(e,r,n){return t.call(this,e,r,n)||this}return n(e,t),e.prototype._activate=function(){var t=this;this._loadingSubscription=this._navigator.loadingService.loading$.combineLatest(this._navigator.imageLoadingService.loadstatus$,function(e,r){if(!e)return{name:"loading",vnode:t._getBarVNode(100)};for(var n=0,o=0,a=0,s=i.values(r);a<s.length;a++){var c=s[a];c.loaded!==c.total&&(o+=c.loaded,n+=c.total)}var u=100;return 0!==n&&(u=o/n*100),{name:t._name,vnode:t._getBarVNode(u)}}).subscribe(this._container.domRenderer.render$)},e.prototype._deactivate=function(){this._loadingSubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype._getBarVNode=function(t){var e={},r={};return 100!==t?(e.width=t.toFixed(0)+"%",e.opacity="1"):(e.width="100%",e.opacity="0"),o.h("div.Loading",{style:r},[o.h("div.LoadingBar",{style:e},[])])},e}(a.Component);s.componentName="loading",r.LoadingComponent=s,a.ComponentService.register(s),Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../Component":225,"rxjs/add/operator/combineLatest":52,underscore:176,"virtual-dom":181}],249:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom"),o=t("rxjs/Observable");t("rxjs/add/operator/map"),t("rxjs/add/operator/first");var a=t("../Edge"),s=t("../Component"),c=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._dirNames={},i._dirNames[a.EdgeDirection.StepForward]="Forward",i._dirNames[a.EdgeDirection.StepBackward]="Backward",i._dirNames[a.EdgeDirection.StepLeft]="Left",i._dirNames[a.EdgeDirection.StepRight]="Right",i._dirNames[a.EdgeDirection.TurnLeft]="Turnleft",i._dirNames[a.EdgeDirection.TurnRight]="Turnright",i._dirNames[a.EdgeDirection.TurnU]="Turnaround",i}return n(e,t),e.prototype._activate=function(){var t=this;this._renderSubscription=this._navigator.stateService.currentNode$.switchMap(function(t){return t.pano?o.Observable.of([]):o.Observable.combineLatest(t.sequenceEdges$,t.spatialEdges$,function(t,e){return t.edges.concat(e.edges)})}).map(function(e){for(var r=[],n=0,o=e;n<o.length;n++){var a=o[n],s=a.data.direction,c=t._dirNames[s];null!=c&&r.push(t._createVNode(s,c))}return{name:t._name,vnode:i.h("div.NavigationComponent",r)}}).subscribe(this._container.domRenderer.render$)},e.prototype._deactivate=function(){this._renderSubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype._createVNode=function(t,e){var r=this;return i.h("span.Direction.Direction"+e,{onclick:function(e){r._navigator.moveDir$(t).subscribe(function(t){},function(t){console.error(t)})}},[])},e}(s.Component);c.componentName="navigation",r.NavigationComponent=c,s.ComponentService.register(c),Object.defineProperty(r,"__esModule",{value:!0}),r.default=c},{"../Component":225,"../Edge":226,"rxjs/Observable":28,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"virtual-dom":181}],250:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("underscore"),o=t("virtual-dom"),a=t("rxjs/Observable");t("rxjs/add/observable/fromPromise"),t("rxjs/add/observable/of"),t("rxjs/add/operator/combineLatest"),t("rxjs/add/operator/distinct"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/mergeMap"),t("rxjs/add/operator/pluck"),t("rxjs/add/operator/scan");var s=t("../Component"),c=function(){function t(){}return t}(),u=function(){function t(){}return t}(),h=function(){function t(){this.nodeInstructions=[],this.nodeInstructionsOrdered=[]}return t}(),l=function(t){function e(e,r,n){return t.call(this,e,r,n)||this}return n(e,t),e.prototype._activate=function(){var t,e=this;t=this._navigator.stateService.currentState$.filter(function(t){return t.id%2==0}).filter(function(t){return t.state.nodesAhead<15}).distinctUntilChanged(void 0,function(t){return t.state.lastNode.key});var r;r=this.configuration$.mergeMap(function(t){return a.Observable.from(t.paths)}).distinct(function(t){return t.sequenceKey}).mergeMap(function(t){return e._navigator.apiV3.sequenceByKey$([t.sequenceKey]).map(function(e){return e[t.sequenceKey]})}).combineLatest(this.configuration$,function(t,e){for(var r=0,n=[],i=0,o=e.paths;i<o.length;i++){var a=o[i];if(a.sequenceKey===t.key){for(var s=[],c=!1,u=0,h=t.keys;u<h.length;u++){var l=h[u];if(a.startKey===l&&(c=!0),c){for(var p=null,f=0,d=a.infoKeys;f<d.length;f++){var m=d[f];m.key===l&&(p=m.description)}s.push({description:p,key:l})}a.stopKey===l&&(c=!1)}n.push({nodeInstructions:s,place:r})}r++}return n}).scan(function(t,e){for(var r=0,n=e;r<n.length;r++){var o=n[r];t.nodeInstructionsOrdered[o.place]=o.nodeInstructions}return t.nodeInstructions=i.flatten(t.nodeInstructionsOrdered),t},new h),this._disposable=t.combineLatest(r,this.configuration$,function(t,e,r){return{conf:r,frame:t,routeTrack:e}}).scan(function(t,r){return void 0===r.conf.playing||r.conf.playing?(t.routeTrack=r.routeTrack,t.currentNode=r.frame.state.currentNode,t.lastNode=r.frame.state.lastNode,t.playing=!0):(e._navigator.stateService.cutNodes(),t.playing=!1),t},new u).filter(function(t){return t.playing}).filter(function(t){for(var e=0,r=t.routeTrack.nodeInstructions;e<r.length;e++){var n=r[e];if(n&&n.key===t.lastNode.key)return!0}return!1}).distinctUntilChanged(void 0,function(t){return t.lastNode.key}).mergeMap(function(t){for(var r=0,n=0,i=t.routeTrack.nodeInstructions;n<i.length;n++){if(i[n].key===t.lastNode.key)break;r++}var o=t.routeTrack.nodeInstructions[r+1];return o?e._navigator.graphService.cacheNode$(o.key):a.Observable.of(null)}).combineLatest(this.configuration$,function(t,e){return{conf:e,node:t}}).filter(function(t){return null!==t.node&&t.conf.playing}).pluck("node").subscribe(this._navigator.stateService.appendNode$),this._disposableDescription=this._navigator.stateService.currentNode$.combineLatest(r,this.configuration$,function(t,e,r){if(void 0!==r.playing&&!r.playing)return"quit";for(var n=null,i=0,o=e.nodeInstructions;i<o.length;i++){var a=o[i];if(a.key===t.key){n=a.description;break}}return n}).scan(function(t,e){return e!==t.description&&null!==e?(t.description=e,t.showsLeft=6):t.showsLeft--,"quit"===e&&(t.description=null),t},new c).map(function(t){return t.showsLeft>0&&t.description?{name:e._name,vnode:e._getRouteAnnotationNode(t.description)}:{name:e._name,vnode:o.h("div",[])}}).subscribe(this._container.domRenderer.render$)},e.prototype._deactivate=function(){this._disposable.unsubscribe(),this._disposableDescription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype.play=function(){this.configure({playing:!0})},e.prototype.stop=function(){this.configure({playing:!1})},e.prototype._getRouteAnnotationNode=function(t){return o.h("div.RouteFrame",{},[o.h("p",{textContent:t},[])])},e}(s.Component);l.componentName="route",r.RouteComponent=l,s.ComponentService.register(l),Object.defineProperty(r,"__esModule",{value:!0}),r.default=l},{"../Component":225,"rxjs/Observable":28,"rxjs/add/observable/fromPromise":42,"rxjs/add/observable/of":44,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/distinct":56,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/pluck":69,"rxjs/add/operator/scan":72,underscore:176,"virtual-dom":181}],251:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable");t("rxjs/add/operator/buffer"),t("rxjs/add/operator/debounceTime"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/scan");var o=t("../Component"),a=function(t){function e(e,r,n){return t.call(this,e,r,n)||this}return n(e,t),e.prototype._activate=function(){var t=this;this._sequenceSubscription=this._navigator.stateService.currentNode$.scan(function(t,e){var r=e.sequenceKey;return t.report=[],r in t.reported||(t.report=[r],t.reported[r]=!0),t},{report:[],reported:{}}).filter(function(t){return t.report.length>0}).mergeMap(function(e){return t._navigator.apiV3.sequenceViewAdd$(e.report).catch(function(t,r){return console.error("Failed to report sequence stats ("+e.report+")",t),i.Observable.empty()})}).subscribe(function(){}),this._imageSubscription=this._navigator.stateService.currentNode$.map(function(t){return t.key}).buffer(this._navigator.stateService.currentNode$.debounceTime(5e3)).scan(function(t,e){t.report=[];for(var r=0,n=e;r<n.length;r++){var i=n[r];i in t.reported||(t.report.push(i),t.reported[i]=!0)}return t},{report:[],reported:{}}).filter(function(t){return t.report.length>0}).mergeMap(function(e){return t._navigator.apiV3.imageViewAdd$(e.report).catch(function(t,r){return console.error("Failed to report image stats ("+e.report+")",t),i.Observable.empty()})}).subscribe(function(){})},e.prototype._deactivate=function(){this._sequenceSubscription.unsubscribe(),this._imageSubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{}},e}(o.Component);a.componentName="stats",r.StatsComponent=a,o.ComponentService.register(a),Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../Component":225,"rxjs/Observable":28,"rxjs/add/operator/buffer":48,"rxjs/add/operator/debounceTime":54,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/scan":72}],252:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom"),o=t("rxjs/Observable"),a=t("rxjs/Subject");t("rxjs/add/observable/combineLatest"),t("rxjs/add/operator/do"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/share");var s=t("../../Component"),c=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._renderer=new s.DirectionDOMRenderer(i.defaultConfiguration,r.element),i._hoveredKeySubject$=new a.Subject,i._hoveredKey$=i._hoveredKeySubject$.share(),i}return n(e,t),Object.defineProperty(e.prototype,"hoveredKey$",{get:function(){return this._hoveredKey$},enumerable:!0,configurable:!0}),e.prototype.setHighlightKey=function(t){this.configure({highlightKey:t})},e.prototype.setMinWidth=function(t){this.configure({minWidth:t})},e.prototype.setMaxWidth=function(t){this.configure({maxWidth:t})},e.prototype.resize=function(){this._renderer.resize(this._container.element)},e.prototype._activate=function(){var t=this;this._configurationSubscription=this._configuration$.subscribe(function(e){t._renderer.setConfiguration(e)}),this._nodeSubscription=this._navigator.stateService.currentNode$.do(function(e){t._container.domRenderer.render$.next({name:t._name,vnode:i.h("div",{},[])}),t._renderer.setNode(e)}).withLatestFrom(this._configuration$).switchMap(function(e){var r=e[0],n=e[1];return r.spatialEdges$.withLatestFrom(n.distinguishSequence?t._navigator.graphService.cacheSequence$(r.sequenceKey).catch(function(t,e){return console.error("Failed to cache sequence ("+r.sequenceKey+")",t),o.Observable.empty()}):o.Observable.of(null))}).subscribe(function(e){t._renderer.setEdges(e[0],e[1])}),this._renderCameraSubscription=this._container.renderService.renderCameraFrame$.do(function(e){t._renderer.setRenderCamera(e)}).map(function(e){return t._renderer}).filter(function(t){return t.needsRender}).map(function(e){return{name:t._name,vnode:e.render(t._navigator)}}).subscribe(this._container.domRenderer.render$),this._hoveredKeySubscription=o.Observable.combineLatest([this._container.domRenderer.element$,this._container.renderService.renderCamera$,this._container.mouseService.mouseMove$.startWith(null),this._container.mouseService.mouseUp$.startWith(null)],function(t,e,r,n){return t}).map(function(t){for(var e=t.getElementsByClassName("DirectionsPerspective"),r=0;r<e.length;r++){var n=e.item(r).querySelector(":hover");if(null!=n&&n.hasAttribute("data-key"))return n.getAttribute("data-key")}return null}).distinctUntilChanged().subscribe(this._hoveredKeySubject$)},e.prototype._deactivate=function(){this._configurationSubscription.unsubscribe(),this._nodeSubscription.unsubscribe(),this._renderCameraSubscription.unsubscribe(),this._hoveredKeySubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{distinguishSequence:!1,maxWidth:460,minWidth:260}},e}(s.Component);c.componentName="direction",r.DirectionComponent=c,s.ComponentService.register(c),Object.defineProperty(r,"__esModule",{value:!0}),r.default=c},{"../../Component":225,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/share":73,"virtual-dom":181}],253:[function(t,e,r){"use strict";var n=t("../../Geo"),i=function(){function t(t,e){this._spatial=new n.Spatial,this._minThresholdWidth=320,this._maxThresholdWidth=1480,this._minThresholdHeight=240,this._maxThresholdHeight=820,this._configure(t),this._resize(e),this._reset()}return Object.defineProperty(t.prototype,"minWidth",{get:function(){return this._minWidth},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"maxWidth",{get:function(){return this._maxWidth},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"containerWidth",{get:function(){return this._containerWidth},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"containerWidthCss",{get:function(){return this._containerWidthCss},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"containerMarginCss",{get:function(){return this._containerMarginCss},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"containerLeftCss",{get:function(){return this._containerLeftCss},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"containerHeight",{get:function(){return this._containerHeight},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"containerHeightCss",{get:function(){return this._containerHeightCss},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"containerBottomCss",{get:function(){return this._containerBottomCss},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"stepCircleSize",{get:function(){return this._stepCircleSize},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"stepCircleSizeCss",{get:function(){return this._stepCircleSizeCss},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"stepCircleMarginCss",{get:function(){return this._stepCircleMarginCss},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"turnCircleSize",{get:function(){return this._turnCircleSize},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"turnCircleSizeCss",{get:function(){return this._turnCircleSizeCss},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"outerRadius",{get:function(){return this._outerRadius},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"innerRadius",{get:function(){return this._innerRadius},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"shadowOffset",{get:function(){return this._shadowOffset},enumerable:!0,configurable:!0}),t.prototype.configure=function(t){this._configure(t),this._reset()},t.prototype.resize=function(t){this._resize(t),this._reset()},t.prototype.angleToCoordinates=function(t){return[Math.cos(t),Math.sin(t)]},t.prototype.relativeAngleToCoordiantes=function(t,e){var r=this._spatial.wrapAngle(t-e);return this.angleToCoordinates(r)},t.prototype._configure=function(t){this._minWidth=t.minWidth,this._maxWidth=this._getMaxWidth(t.minWidth,t.maxWidth)},t.prototype._resize=function(t){this._elementWidth=t.offsetWidth,this._elementHeight=t.offsetHeight},t.prototype._reset=function(){this._containerWidth=this._getContainerWidth(this._elementWidth,this._elementHeight),this._containerHeight=this._getContainerHeight(this.containerWidth),this._stepCircleSize=this._getStepCircleDiameter(this._containerHeight),this._turnCircleSize=this._getTurnCircleDiameter(this.containerHeight),this._outerRadius=this._getOuterRadius(this._containerHeight),this._innerRadius=this._getInnerRadius(this._containerHeight),this._shadowOffset=3,this._containerWidthCss=this._numberToCssPixels(this._containerWidth),this._containerMarginCss=this._numberToCssPixels(-.5*this._containerWidth),this._containerLeftCss=this._numberToCssPixels(Math.floor(.5*this._elementWidth)),this._containerHeightCss=this._numberToCssPixels(this._containerHeight),this._containerBottomCss=this._numberToCssPixels(Math.floor(-.08*this._containerHeight)),this._stepCircleSizeCss=this._numberToCssPixels(this._stepCircleSize),this._stepCircleMarginCss=this._numberToCssPixels(-.5*this._stepCircleSize),this._turnCircleSizeCss=this._numberToCssPixels(this._turnCircleSize)},t.prototype._getContainerWidth=function(t,e){var r=(t-this._minThresholdWidth)/(this._maxThresholdWidth-this._minThresholdWidth),n=(e-this._minThresholdHeight)/(this._maxThresholdHeight-this._minThresholdHeight),i=Math.max(0,Math.min(1,Math.min(r,n)));return i=.04*Math.round(25*i),this._minWidth+i*(this._maxWidth-this._minWidth)},t.prototype._getContainerHeight=function(t){return.77*t},t.prototype._getStepCircleDiameter=function(t){return.34*t},t.prototype._getTurnCircleDiameter=function(t){return.3*t},t.prototype._getOuterRadius=function(t){return.31*t},t.prototype._getInnerRadius=function(t){return.125*t},t.prototype._numberToCssPixels=function(t){return t+"px"},t.prototype._getMaxWidth=function(t,e){return t>e?t:e},t}();r.DirectionDOMCalculator=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{"../../Geo":228}],254:[function(t,e,r){"use strict";var n=t("virtual-dom"),i=t("../../Component"),o=t("../../Edge"),a=t("../../Geo"),s=function(){function t(t,e){this._isEdge=!1,this._spatial=new a.Spatial,this._calculator=new i.DirectionDOMCalculator(t,e),this._node=null,this._rotation={phi:0,theta:0},this._epsilon=.5*Math.PI/180,this._highlightKey=null,this._distinguishSequence=!1,this._needsRender=!1,this._stepEdges=[],this._turnEdges=[],this._panoEdges=[],this._sequenceEdgeKeys=[],this._stepDirections=[o.EdgeDirection.StepForward,o.EdgeDirection.StepBackward,o.EdgeDirection.StepLeft,o.EdgeDirection.StepRight],this._turnDirections=[o.EdgeDirection.TurnLeft,o.EdgeDirection.TurnRight,o.EdgeDirection.TurnU],this._turnNames={},this._turnNames[o.EdgeDirection.TurnLeft]="TurnLeft",this._turnNames[o.EdgeDirection.TurnRight]="TurnRight",this._turnNames[o.EdgeDirection.TurnU]="TurnAround";var r=!!document.documentMode;this._isEdge=!r&&!!window.StyleMedia}return Object.defineProperty(t.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:!0,configurable:!0}),t.prototype.render=function(t){this._needsRender=!1;var e=this._rotation,r=[],n=[];return this._node.pano?r=r.concat(this._createPanoArrows(t,e)):(r=r.concat(this._createPerspectiveToPanoArrows(t,e)),r=r.concat(this._createStepArrows(t,e)),n=n.concat(this._createTurnArrows(t))),this._getContainer(r,n,e)},t.prototype.setEdges=function(t,e){this._setEdges(t,e),this._setNeedsRender()},t.prototype.setNode=function(t){this._node=t,this._clearEdges(),this._setNeedsRender()},t.prototype.setRenderCamera=function(t){var e=t.rotation;Math.abs(e.phi-this._rotation.phi)<this._epsilon||(this._rotation=e,this._setNeedsRender())},t.prototype.setConfiguration=function(t){var e=!1;this._highlightKey===t.highlightKey&&this._distinguishSequence===t.distinguishSequence||(this._highlightKey=t.highlightKey,this._distinguishSequence=t.distinguishSequence,e=!0),this._calculator.minWidth===t.minWidth&&this._calculator.maxWidth===t.maxWidth||(this._calculator.configure(t),e=!0),e&&this._setNeedsRender()},
+t.prototype.resize=function(t){this._calculator.resize(t),this._setNeedsRender()},t.prototype._setNeedsRender=function(){null!=this._node&&(this._needsRender=!0)},t.prototype._clearEdges=function(){this._stepEdges=[],this._turnEdges=[],this._panoEdges=[],this._sequenceEdgeKeys=[]},t.prototype._setEdges=function(t,e){this._stepEdges=[],this._turnEdges=[],this._panoEdges=[],this._sequenceEdgeKeys=[];for(var r=0,n=t.edges;r<n.length;r++){var i=n[r],a=i.data.direction;this._stepDirections.indexOf(a)>-1?this._stepEdges.push(i):this._turnDirections.indexOf(a)>-1?this._turnEdges.push(i):i.data.direction===o.EdgeDirection.Pano&&this._panoEdges.push(i)}if(this._distinguishSequence&&null!=e)for(var s=this._panoEdges.concat(this._stepEdges).concat(this._turnEdges),c=0,u=s;c<u.length;c++)for(var i=u[c],h=i.to,l=0,p=e.keys;l<p.length;l++){var f=p[l];if(f===h){this._sequenceEdgeKeys.push(h);break}}},t.prototype._createPanoArrows=function(t,e){for(var r=[],n=0,i=this._panoEdges;n<i.length;n++){var o=i[n];r.push(this._createVNodeByKey(t,o.to,o.data.worldMotionAzimuth,e,this._calculator.outerRadius,"DirectionsArrowPano"))}for(var a=0,s=this._stepEdges;a<s.length;a++){var c=s[a];r.push(this._createPanoToPerspectiveArrow(t,c.to,c.data.worldMotionAzimuth,e,c.data.direction))}return r},t.prototype._createPanoToPerspectiveArrow=function(t,e,r,n,i){var a=Math.PI/8,s=n.phi;switch(i){case o.EdgeDirection.StepBackward:s=n.phi-Math.PI;break;case o.EdgeDirection.StepLeft:s=n.phi+Math.PI/2;break;case o.EdgeDirection.StepRight:s=n.phi-Math.PI/2}return Math.abs(this._spatial.wrapAngle(r-s))<a?this._createVNodeByKey(t,e,r,n,this._calculator.outerRadius,"DirectionsArrowStep"):this._createVNodeDisabled(e,r,n)},t.prototype._createPerspectiveToPanoArrows=function(t,e){for(var r=[],n=0,i=this._panoEdges;n<i.length;n++){var o=i[n];r.push(this._createVNodeByKey(t,o.to,o.data.worldMotionAzimuth,e,this._calculator.innerRadius,"DirectionsArrowPano",!0))}return r},t.prototype._createStepArrows=function(t,e){for(var r=[],n=0,i=this._stepEdges;n<i.length;n++){var o=i[n];r.push(this._createVNodeByDirection(t,o.to,o.data.worldMotionAzimuth,e,o.data.direction))}return r},t.prototype._createTurnArrows=function(t){for(var e=[],r=0,n=this._turnEdges;r<n.length;r++){var i=n[r],o=i.data.direction,a=this._turnNames[o];e.push(this._createVNodeByTurn(t,i.to,a,o))}return e},t.prototype._createVNodeByKey=function(t,e,r,n,i,o,a){var s=function(r){t.moveToKey$(e).subscribe(function(t){},function(t){console.error(t)})};return this._createVNode(e,r,n,i,o,"DirectionsCircle",s,a)},t.prototype._createVNodeByDirection=function(t,e,r,n,i){var o=function(e){t.moveDir$(i).subscribe(function(t){},function(t){console.error(t)})};return this._createVNode(e,r,n,this._calculator.outerRadius,"DirectionsArrowStep","DirectionsCircle",o)},t.prototype._createVNodeByTurn=function(t,e,r,i){var a=function(e){t.moveDir$(i).subscribe(function(t){},function(t){console.error(t)})},s={height:this._calculator.turnCircleSizeCss,transform:"rotate(0)",width:this._calculator.turnCircleSizeCss};switch(i){case o.EdgeDirection.TurnLeft:s.left="5px",s.top="5px";break;case o.EdgeDirection.TurnRight:s.right="5px",s.top="5px";break;case o.EdgeDirection.TurnU:s.left="5px",s.bottom="5px"}var c={attributes:{"data-key":e},onclick:a,style:s},u="TurnCircle";this._sequenceEdgeKeys.indexOf(e)>-1&&(u+="Sequence"),this._highlightKey===e&&(u+="Highlight");var h=n.h("div."+r,{},[]);return n.h("div."+u,c,[h])},t.prototype._createVNodeDisabled=function(t,e,r){return this._createVNode(t,e,r,this._calculator.outerRadius,"DirectionsArrowDisabled","DirectionsCircleDisabled")},t.prototype._createVNode=function(t,e,r,i,o,a,s,c){var u=this._calculator.angleToCoordinates(e-r.phi),h=Math.round(-i*u[1]+.5*this._calculator.containerWidth),l=Math.round(-i*u[0]+.5*this._calculator.containerHeight),p=this._calculator.relativeAngleToCoordiantes(e,r.phi),f=this._calculator.shadowOffset,d=-f*p[1],m=f*p[0],v="drop-shadow("+d+"px "+m+"px 1px rgba(0,0,0,0.8))",g={style:{"-webkit-filter":v,filter:v}},y=n.h("div."+o,g,[]),b=-this._spatial.radToDeg(e-r.phi),_=c?"translate("+h+"px, "+l+"px) rotate("+b+"deg) translateZ(-0.01px)":"translate("+h+"px, "+l+"px) rotate("+b+"deg)",x={attributes:{"data-key":t},onclick:s,style:{height:this._calculator.stepCircleSizeCss,marginLeft:this._calculator.stepCircleMarginCss,marginTop:this._calculator.stepCircleMarginCss,transform:_,width:this._calculator.stepCircleSizeCss}};return this._sequenceEdgeKeys.indexOf(t)>-1&&(a+="Sequence"),this._highlightKey===t&&(a+="Highlight"),n.h("div."+a,x,[y])},t.prototype._getContainer=function(t,e,r){var i=this._isEdge?"rotateX(60deg)":"perspective("+this._calculator.containerWidthCss+") rotateX(60deg)",o={oncontextmenu:function(t){t.preventDefault()},style:{bottom:this._calculator.containerBottomCss,height:this._calculator.containerHeightCss,left:this._calculator.containerLeftCss,marginLeft:this._calculator.containerMarginCss,transform:i,width:this._calculator.containerWidthCss}};return n.h("div.DirectionsPerspective",o,e.concat(t))},t}();r.DirectionDOMRenderer=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../../Component":225,"../../Edge":226,"../../Geo":228,"virtual-dom":181}],255:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable"),o=t("rxjs/Subject");t("rxjs/add/operator/catch"),t("rxjs/add/operator/combineLatest"),t("rxjs/add/operator/debounceTime"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/pairwise"),t("rxjs/add/operator/publish"),t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/skipWhile"),t("rxjs/add/operator/startWith"),t("rxjs/add/operator/switchMap"),t("rxjs/add/operator/takeUntil"),t("rxjs/add/operator/withLatestFrom");var a=t("../../Component"),s=t("../../Render"),c=t("../../Tiles"),u=t("../../Utils"),h=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._imageTileLoader=new c.ImageTileLoader(u.Urls.tileScheme,u.Urls.tileDomain,u.Urls.origin),i._roiCalculator=new c.RegionOfInterestCalculator,i._rendererOperation$=new o.Subject,i._rendererCreator$=new o.Subject,i._rendererDisposer$=new o.Subject,i._renderer$=i._rendererOperation$.scan(function(t,e){return e(t)},null).filter(function(t){return null!=t}).distinctUntilChanged(void 0,function(t){return t.frameId}),i._rendererCreator$.map(function(){return function(t){if(null!=t)throw new Error("Multiple image plane states can not be created at the same time");return new a.ImagePlaneGLRenderer}}).subscribe(i._rendererOperation$),i._rendererDisposer$.map(function(){return function(t){return t.dispose(),null}}).subscribe(i._rendererOperation$),i}return n(e,t),e.prototype._activate=function(){var t=this;this._rendererSubscription=this._renderer$.map(function(e){var r={name:t._name,render:{frameId:e.frameId,needsRender:e.needsRender,render:e.render.bind(e),stage:s.GLRenderStage.Background}};return e.clearNeedsRender(),r}).subscribe(this._container.glRenderer.render$),this._rendererCreator$.next(null),this._stateSubscription=this._navigator.stateService.currentState$.map(function(t){return function(e){return e.updateFrame(t),e}}).subscribe(this._rendererOperation$);var e=this._navigator.stateService.currentState$.distinctUntilChanged(void 0,function(t){return t.state.currentNode.key}).combineLatest(this._configuration$).filter(function(t){return!0===t[1].imageTiling}).map(function(t){return t[0]}).withLatestFrom(this._container.glRenderer.webGLRenderer$,this._container.renderService.size$).map(function(e){var r=e[0].state,n=e[1],i=e[2],o=r.currentNode,a=r.currentTransform,s=Math.max(i.width,i.height)>1024?1024:512;return new c.TextureProvider(o.key,a.basicWidth,a.basicHeight,s,o.image,t._imageTileLoader,new c.ImageTileStore,n)}).publishReplay(1).refCount();this._textureProviderSubscription=e.subscribe(function(){}),this._setTextureProviderSubscription=e.map(function(t){return function(e){return e.setTextureProvider(t.key,t),e}}).subscribe(this._rendererOperation$),this._abortTextureProviderSubscription=e.pairwise().subscribe(function(t){t[0].abort()});var r=this._container.renderService.renderCameraFrame$.map(function(t){return[t.camera.position.clone(),t.camera.lookat.clone(),t.zoom.valueOf()]}).pairwise().skipWhile(function(t){return t[1][2]-t[0][2]<0||0===t[1][2]}).map(function(t){var e=t[0][0].equals(t[1][0]),r=t[0][1].equals(t[1][1]),n=t[0][2]===t[1][2];return e&&r&&n}).distinctUntilChanged().filter(function(t){return t}).switchMap(function(e){return t._container.renderService.renderCameraFrame$.first()}).withLatestFrom(this._container.renderService.size$,this._navigator.stateService.currentTransform$);this._setRegionOfInterestSubscription=e.switchMap(function(e){return r.map(function(r){return[t._roiCalculator.computeRegionOfInterest(r[0],r[1],r[2]),e]})}).filter(function(t){return!t[1].disposed}).subscribe(function(t){var e=t[0];t[1].setRegionOfInterest(e)});var n=e.switchMap(function(t){return t.hasTexture$}).startWith(!1).publishReplay(1).refCount();this._hasTextureSubscription=n.subscribe(function(){});var o=this._navigator.stateService.currentNode$.debounceTime(1e3).withLatestFrom(n).filter(function(t){return!t[1]}).map(function(t){return t[0]}).filter(function(t){return t.pano?u.Settings.maxImageSize>u.Settings.basePanoramaSize:u.Settings.maxImageSize>u.Settings.baseImageSize}).switchMap(function(t){var e=t.pano?u.Settings.basePanoramaSize:u.Settings.baseImageSize;return Math.max(t.image.width,t.image.height)>e?i.Observable.empty():t.cacheImage$(u.Settings.maxImageSize).map(function(t){return[t.image,t]}).takeUntil(n.filter(function(t){return t})).catch(function(e,r){return console.error("Failed to fetch high res image ("+t.key+")",e),i.Observable.empty()})}).publish().refCount();this._updateBackgroundSubscription=o.withLatestFrom(e).subscribe(function(t){t[0][1].key!==t[1].key||t[1].disposed||t[1].updateBackground(t[0][0])}),this._updateTextureImageSubscription=o.map(function(t){return function(e){return e.updateTextureImage(t[0],t[1]),e}}).subscribe(this._rendererOperation$)},e.prototype._deactivate=function(){this._rendererDisposer$.next(null),this._abortTextureProviderSubscription.unsubscribe(),this._hasTextureSubscription.unsubscribe(),this._rendererSubscription.unsubscribe(),this._setRegionOfInterestSubscription.unsubscribe(),this._setTextureProviderSubscription.unsubscribe(),this._stateSubscription.unsubscribe(),this._textureProviderSubscription.unsubscribe(),this._updateBackgroundSubscription.unsubscribe(),this._updateTextureImageSubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{imageTiling:!1}},e}(a.Component);h.componentName="imagePlane",r.ImagePlaneComponent=h,a.ComponentService.register(h),Object.defineProperty(r,"__esModule",{value:!0}),r.default=h},{"../../Component":225,"../../Render":231,"../../Tiles":233,"../../Utils":234,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/operator/catch":51,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/debounceTime":54,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/pairwise":68,"rxjs/add/operator/publish":70,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/skipWhile":76,"rxjs/add/operator/startWith":77,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/takeUntil":80,"rxjs/add/operator/withLatestFrom":82}],256:[function(t,e,r){"use strict";var n=t("three"),i=t("../../Component"),o=function(){function t(t,e){this._imagePlaneDepth=null!=t?t:200,this._imageSphereRadius=null!=e?e:200}return t.prototype.createMesh=function(t,e){return t.pano?this._createImageSphere(t,e):this._createImagePlane(t,e)},t.prototype._createImageSphere=function(t,e){var r=this._createTexture(t.image),i=this._createSphereMaterialParameters(e,r),o=new n.ShaderMaterial(i);return this._useMesh(e,t)?new n.Mesh(this._getImageSphereGeo(e,t),o):new n.Mesh(this._getFlatImageSphereGeo(e),o)},t.prototype._createImagePlane=function(t,e){var r=this._createTexture(t.image),i=this._createPlaneMaterialParameters(e,r),o=new n.ShaderMaterial(i),a=this._useMesh(e,t)?this._getImagePlaneGeo(e,t):this._getFlatImagePlaneGeo(e);return new n.Mesh(a,o)},t.prototype._createSphereMaterialParameters=function(t,e){var r=t.gpano,o=(r.FullPanoWidthPixels-r.CroppedAreaImageWidthPixels)/2,a=2*Math.PI*(r.CroppedAreaLeftPixels-o)/r.FullPanoWidthPixels,s=2*Math.PI*r.CroppedAreaImageWidthPixels/r.FullPanoWidthPixels,c=(r.FullPanoHeightPixels-r.CroppedAreaImageHeightPixels)/2,u=Math.PI*(c-r.CroppedAreaTopPixels)/r.FullPanoHeightPixels,h=Math.PI*r.CroppedAreaImageHeightPixels/r.FullPanoHeightPixels;return{depthWrite:!1,fragmentShader:i.ImagePlaneShaders.equirectangular.fragment,side:n.DoubleSide,transparent:!0,uniforms:{opacity:{type:"f",value:1},phiLength:{type:"f",value:s},phiShift:{type:"f",value:a},projectorMat:{type:"m4",value:t.rt},projectorTex:{type:"t",value:e},thetaLength:{type:"f",value:h},thetaShift:{type:"f",value:u}},vertexShader:i.ImagePlaneShaders.equirectangular.vertex}},t.prototype._createPlaneMaterialParameters=function(t,e){return{depthWrite:!1,fragmentShader:i.ImagePlaneShaders.perspective.fragment,side:n.DoubleSide,transparent:!0,uniforms:{bbox:{type:"v4",value:new n.Vector4(0,0,1,1)},opacity:{type:"f",value:1},projectorMat:{type:"m4",value:t.projectorMatrix()},projectorTex:{type:"t",value:e}},vertexShader:i.ImagePlaneShaders.perspective.vertex}},t.prototype._createTexture=function(t){var e=new n.Texture(t);return e.minFilter=n.LinearFilter,e.needsUpdate=!0,e},t.prototype._useMesh=function(t,e){return e.mesh.vertices.length&&t.hasValidScale},t.prototype._getImageSphereGeo=function(t,e){for(var r=(new n.Matrix4).getInverse(t.srt),i=5*t.scale,o=this._imageSphereRadius*t.scale,a=e.mesh.vertices,s=a.length/3,c=new Float32Array(a.length),u=0;u<s;++u){var h=3*u,l=a[h+0],p=a[h+1],f=a[h+2],d=Math.sqrt(l*l+p*p+f*f),m=Math.max(i,Math.min(d,o)),v=m/d,g=new n.Vector3(l*v,p*v,f*v);g.applyMatrix4(r),c[h+0]=g.x,c[h+1]=g.y,c[h+2]=g.z}for(var y=e.mesh.faces,b=new Uint16Array(y.length),u=0;u<y.length;++u)b[u]=y[u];var _=new n.BufferGeometry;return _.addAttribute("position",new n.BufferAttribute(c,3)),_.setIndex(new n.BufferAttribute(b,1)),_},t.prototype._getImagePlaneGeo=function(t,e){for(var r=(new n.Matrix4).getInverse(t.srt),i=5*t.scale,o=this._imagePlaneDepth*t.scale,a=e.mesh.vertices,s=a.length/3,c=new Float32Array(a.length),u=0;u<s;++u){var h=3*u,l=a[h+0],p=a[h+1],f=a[h+2],d=Math.max(i,Math.min(f,o)),m=d/f,v=new n.Vector3(l*m,p*m,d);v.applyMatrix4(r),c[h+0]=v.x,c[h+1]=v.y,c[h+2]=v.z}for(var g=e.mesh.faces,y=new Uint16Array(g.length),u=0;u<g.length;++u)y[u]=g[u];var b=new n.BufferGeometry;return b.addAttribute("position",new n.BufferAttribute(c,3)),b.setIndex(new n.BufferAttribute(y,1)),b},t.prototype._getFlatImageSphereGeo=function(t){var e=t.gpano,r=2*Math.PI*e.CroppedAreaLeftPixels/e.FullPanoWidthPixels,i=2*Math.PI*e.CroppedAreaImageWidthPixels/e.FullPanoWidthPixels,o=Math.PI*(e.FullPanoHeightPixels-e.CroppedAreaImageHeightPixels-e.CroppedAreaTopPixels)/e.FullPanoHeightPixels,a=Math.PI*e.CroppedAreaImageHeightPixels/e.FullPanoHeightPixels,s=new n.SphereGeometry(this._imageSphereRadius,20,40,r-Math.PI/2,i,o,a);return s.applyMatrix((new n.Matrix4).getInverse(t.rt)),s},t.prototype._getFlatImagePlaneGeo=function(t){var e=t.width,r=t.height,i=Math.max(e,r),o=e/2/i,a=r/2/i,s=[];s.push(t.unprojectSfM([-o,-a],this._imagePlaneDepth)),s.push(t.unprojectSfM([o,-a],this._imagePlaneDepth)),s.push(t.unprojectSfM([o,a],this._imagePlaneDepth)),s.push(t.unprojectSfM([-o,a],this._imagePlaneDepth));for(var c=new Float32Array(12),u=0;u<s.length;u++){var h=3*u;c[h+0]=s[u][0],c[h+1]=s[u][1],c[h+2]=s[u][2]}var l=new Uint16Array(6);l[0]=0,l[1]=1,l[2]=3,l[3]=1,l[4]=2,l[5]=3;var p=new n.BufferGeometry;return p.addAttribute("position",new n.BufferAttribute(c,3)),p.setIndex(new n.BufferAttribute(l,1)),p},t}();r.ImagePlaneFactory=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../../Component":225,three:175}],257:[function(t,e,r){"use strict";var n=t("../../Component"),i=t("../../Geo"),o=function(){function t(){this._imagePlaneFactory=new n.ImagePlaneFactory,this._imagePlaneScene=new n.ImagePlaneScene,this._alpha=0,this._alphaOld=0,this._fadeOutSpeed=.05,this._lastCamera=new i.Camera,this._epsilon=1e-6,this._currentKey=null,this._previousKey=null,this._providerDisposers={},this._frameId=0,this._needsRender=!1}return Object.defineProperty(t.prototype,"frameId",{get:function(){return this._frameId},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:!0,configurable:!0}),t.prototype.indicateNeedsRender=function(){this._needsRender=!0},t.prototype.updateFrame=function(t){this._updateFrameId(t.id),this._needsRender=this._updateAlpha(t.state.alpha)||this._needsRender,this._needsRender=this._updateAlphaOld(t.state.alpha)||this._needsRender,this._needsRender=this._updateImagePlanes(t.state)||this._needsRender},t.prototype.setTextureProvider=function(t,e){var r=this;if(t===this._currentKey){var n=e.textureCreated$.subscribe(function(t){r._updateTexture(t)}),i=e.textureUpdated$.subscribe(function(t){r._needsRender=!0}),o=function(){n.unsubscribe(),i.unsubscribe(),e.dispose()};if(t in this._providerDisposers){(0,this._providerDisposers[t])(),delete this._providerDisposers[t]}this._providerDisposers[t]=o}},t.prototype._updateTexture=function(t){this._needsRender=!0;for(var e=0,r=this._imagePlaneScene.imagePlanes;e<r.length;e++){var n=r[e],i=n.material,o=i.uniforms.projectorTex.value;i.uniforms.projectorTex.value=null,o.dispose(),i.uniforms.projectorTex.value=t}},t.prototype.updateTextureImage=function(t,e){if(this._currentKey===e.key){this._needsRender=!0;for(var r=0,n=this._imagePlaneScene.imagePlanes;r<n.length;r++){var i=n[r],o=i.material,a=o.uniforms.projectorTex.value;a.image=t,a.needsUpdate=!0}}},t.prototype.render=function(t,e){for(var r=this._imagePlaneScene.imagePlanesOld.length?1:this._alpha,n=0,i=this._imagePlaneScene.imagePlanes;n<i.length;n++){var o=i[n];o.material.uniforms.opacity.value=r}for(var a=0,s=this._imagePlaneScene.imagePlanesOld;a<s.length;a++){var o=s[a];o.material.uniforms.opacity.value=this._alphaOld}e.render(this._imagePlaneScene.scene,t),e.render(this._imagePlaneScene.sceneOld,t);for(var c=0,u=this._imagePlaneScene.imagePlanes;c<u.length;c++){var o=u[c];o.material.uniforms.opacity.value=this._alpha}e.render(this._imagePlaneScene.scene,t)},t.prototype.clearNeedsRender=function(){this._needsRender=!1},t.prototype.dispose=function(){this._imagePlaneScene.clear()},t.prototype._updateFrameId=function(t){this._frameId=t},t.prototype._updateAlpha=function(t){return t!==this._alpha&&(this._alpha=t,!0)},t.prototype._updateAlphaOld=function(t){return!(t<1||0===this._alphaOld)&&(this._alphaOld=Math.max(0,this._alphaOld-this._fadeOutSpeed),!0)},t.prototype._updateImagePlanes=function(t){if(null==t.currentNode||t.currentNode.key===this._currentKey)return!1;var e=null!=t.previousNode?t.previousNode.key:null,r=t.currentNode.key;if(this._previousKey!==e&&this._previousKey!==r&&this._previousKey in this._providerDisposers){(0,this._providerDisposers[this._previousKey])(),delete this._providerDisposers[this._previousKey]}if(null!=e){if(e!==this._currentKey&&e!==this._previousKey){var n=this._imagePlaneFactory.createMesh(t.previousNode,t.previousTransform);this._imagePlaneScene.updateImagePlanes([n])}this._previousKey=e}this._currentKey=r;var i=this._imagePlaneFactory.createMesh(t.currentNode,t.currentTransform);return this._imagePlaneScene.updateImagePlanes([i]),this._alphaOld=1,!0},t}();r.ImagePlaneGLRenderer=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../../Component":225,"../../Geo":228}],258:[function(t,e,r){"use strict";var n=t("three"),i=function(){function t(){this.scene=new n.Scene,this.sceneOld=new n.Scene,this.imagePlanes=[],this.imagePlanesOld=[]}return t.prototype.updateImagePlanes=function(t){this._dispose(this.imagePlanesOld,this.sceneOld);for(var e=0,r=this.imagePlanes;e<r.length;e++){var n=r[e];this.scene.remove(n),this.sceneOld.add(n)}for(var i=0,o=t;i<o.length;i++){var n=o[i];this.scene.add(n)}this.imagePlanesOld=this.imagePlanes,this.imagePlanes=t},t.prototype.addImagePlanes=function(t){for(var e=0,r=t;e<r.length;e++){var n=r[e];this.scene.add(n),this.imagePlanes.push(n)}},t.prototype.addImagePlanesOld=function(t){for(var e=0,r=t;e<r.length;e++){var n=r[e];this.sceneOld.add(n),this.imagePlanesOld.push(n)}},t.prototype.setImagePlanes=function(t){this._clear(),this.addImagePlanes(t)},t.prototype.setImagePlanesOld=function(t){this._clearOld(),this.addImagePlanesOld(t)},t.prototype.clear=function(){this._clear(),this._clearOld()},t.prototype._clear=function(){this._dispose(this.imagePlanes,this.scene),this.imagePlanes.length=0},t.prototype._clearOld=function(){this._dispose(this.imagePlanesOld,this.sceneOld),this.imagePlanesOld.length=0},t.prototype._dispose=function(t,e){for(var r=0,n=t;r<n.length;r++){var i=n[r];e.remove(i),i.geometry.dispose(),i.material.dispose();var o=i.material.uniforms.projectorTex.value;null!=o&&o.dispose()}},t}();r.ImagePlaneScene=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{three:175}],259:[function(t,e,r){"use strict";var n=(t("path"),function(){function t(){}return t}());n.equirectangular={fragment:"#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float phiLength;\nuniform float phiShift;\nuniform float thetaLength;\nuniform float thetaShift;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    vec3 b = normalize(vRstq.xyz);\n    float lat = -asin(b.y);\n    float lon = atan(b.x, b.z);\n    float x = (lon - phiShift) / phiLength + 0.5;\n    float y = (lat - thetaShift) / thetaLength + 0.5;\n    vec4 baseColor = texture2D(projectorTex, vec2(x, y));\n    baseColor.a = opacity;\n    gl_FragColor = baseColor;\n}",vertex:"#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    vRstq = projectorMat * vec4(position, 1.0);\n    gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}"},n.perspective={fragment:"#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform vec4 bbox;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    float x = vRstq.x / vRstq.w;\n    float y = vRstq.y / vRstq.w;\n\n    vec4 baseColor;\n    if (x > bbox[0] && y > bbox[1] && x < bbox[2] && y < bbox[3]) {\n        baseColor = texture2D(projectorTex, vec2(x, y));\n        baseColor.a = opacity;\n    } else {\n        baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n    }\n\n    gl_FragColor = baseColor;\n}",vertex:"#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n    vRstq = projectorMat * vec4(position, 1.0);\n    gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}"},r.ImagePlaneShaders=n},{path:21}],260:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom"),o=t("rxjs/Observable"),a=t("rxjs/Subject");t("rxjs/add/observable/combineLatest"),t("rxjs/add/observable/fromEvent"),t("rxjs/add/observable/of"),t("rxjs/add/observable/zip"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/first"),t("rxjs/add/operator/map"),t("rxjs/add/operator/merge"),t("rxjs/add/operator/mergeMap"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/switchMap"),t("rxjs/add/operator/withLatestFrom"),t("rxjs/add/operator/zip");var s=t("../../State"),c=t("../../Render"),u=t("../../Utils"),h=t("../../Component"),l=function(){function t(){this._imagePlaneFactory=new h.ImagePlaneFactory,this._imagePlaneScene=new h.ImagePlaneScene,this._currentKey=null,this._previousKey=null,this._currentPano=!1,this._frameId=0,this._glNeedsRender=!1,this._domNeedsRender=!0,this._curtain=1}return Object.defineProperty(t.prototype,"frameId",{get:function(){return this._frameId},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"curtain",{get:function(){return this._curtain},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"glNeedsRender",{get:function(){return this._glNeedsRender},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"domNeedsRender",{get:function(){return this._domNeedsRender},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"sliderVisible",{get:function(){return this._sliderVisible},set:function(t){this._sliderVisible=t,this._domNeedsRender=!0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"disabled",{get:function(){return null==this._currentKey||null==this._previousKey||this._currentPano},enumerable:!0,configurable:!0}),t.prototype.update=function(t){this._updateFrameId(t.id);var e=this._updateImagePlanes(t.state);this._domNeedsRender=e||this._domNeedsRender,e=this._updateCurtain(t.state.alpha)||e,this._glNeedsRender=e||this._glNeedsRender},t.prototype.updateTexture=function(t,e){var r=e.key===this._currentKey?this._imagePlaneScene.imagePlanes:e.key===this._previousKey?this._imagePlaneScene.imagePlanesOld:[];if(0!==r.length){this._glNeedsRender=!0;for(var n=0,i=r;n<i.length;n++){var o=i[n],a=o.material,s=a.uniforms.projectorTex.value;s.image=t,s.needsUpdate=!0}}},t.prototype.render=function(t,e){this.disabled||e.render(this._imagePlaneScene.sceneOld,t),e.render(this._imagePlaneScene.scene,t)},t.prototype.dispose=function(){this._imagePlaneScene.clear()},t.prototype.clearGLNeedsRender=function(){this._glNeedsRender=!1},t.prototype.clearDomNeedsRender=function(){this._domNeedsRender=!1},t.prototype._updateFrameId=function(t){this._frameId=t},t.prototype._updateImagePlanes=function(t){if(null!=t.currentNode){var e=!1;return null!=t.previousNode&&this._previousKey!==t.previousNode.key&&(e=!0,this._previousKey=t.previousNode.key,this._imagePlaneScene.setImagePlanesOld([this._imagePlaneFactory.createMesh(t.previousNode,t.previousTransform)])),this._currentKey!==t.currentNode.key&&(e=!0,this._currentKey=t.currentNode.key,this._currentPano=t.currentNode.pano,this._imagePlaneScene.setImagePlanes([this._imagePlaneFactory.createMesh(t.currentNode,t.currentTransform)]),this.disabled||this._updateBbox()),e}},t.prototype._updateCurtain=function(t){return!(this.disabled||Math.abs(this._curtain-t)<.001)&&(this._curtain=t,this._updateBbox(),!0)},t.prototype._updateBbox=function(){for(var t=0,e=this._imagePlaneScene.imagePlanes;t<e.length;t++){e[t].material.uniforms.bbox.value.z=this._curtain}},t}(),p=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._sliderStateOperation$=new a.Subject,i._sliderStateCreator$=new a.Subject,i._sliderStateDisposer$=new a.Subject,i._sliderState$=i._sliderStateOperation$.scan(function(t,e){return e(t)},null).filter(function(t){return null!=t}).distinctUntilChanged(void 0,function(t){return t.frameId}),i._sliderStateCreator$.map(function(){return function(t){if(null!=t)throw new Error("Multiple slider states can not be created at the same time");return new l}}).subscribe(i._sliderStateOperation$),i._sliderStateDisposer$.map(function(){return function(t){return t.dispose(),null}}).subscribe(i._sliderStateOperation$),i}return n(e,t),e.prototype.setKeys=function(t){this.configure({keys:t})},e.prototype.setInitialPosition=function(t){this.configure({initialPosition:t})},e.prototype.setSliderVisible=function(t){this.configure({sliderVisible:t})},e.prototype._activate=function(){var t=this;o.Observable.combineLatest(this._navigator.stateService.state$,this._configuration$).first().subscribe(function(e){var r=e[0],n=e[1];if(r===s.State.Traversing){t._navigator.stateService.wait();var i=n.initialPosition;t._navigator.stateService.moveTo(null!=i?i:1)}}),this._glRenderSubscription=this._sliderState$.map(function(e){var r={name:t._name,render:{frameId:e.frameId,needsRender:e.glNeedsRender,render:e.render.bind(e),stage:c.GLRenderStage.Background}};return e.clearGLNeedsRender(),r}).subscribe(this._container.glRenderer.render$),this._domRenderSubscription=this._sliderState$.filter(function(t){return t.domNeedsRender}).map(function(e){var r=i.h("input.SliderControl",{max:1e3,min:0,oninput:function(e){var r=Number(e.target.value)/1e3;t._navigator.stateService.moveTo(r)},type:"range",value:1e3*e.curtain},[]),n=e.disabled||!e.sliderVisible?null:i.h("div.SliderWrapper",{},[r]),o={name:t._name,vnode:n};return e.clearDomNeedsRender(),o}).subscribe(this._container.domRenderer.render$),this._sliderStateCreator$.next(null),this._stateSubscription=this._navigator.stateService.currentState$.map(function(t){return function(e){return e.update(t),e}}).subscribe(this._sliderStateOperation$),this._setSliderVisibleSubscription=this._configuration$.map(function(t){return null==t.sliderVisible||t.sliderVisible}).distinctUntilChanged().map(function(t){return function(e){return e.sliderVisible=t,e}}).subscribe(this._sliderStateOperation$),this._setKeysSubscription=this._configuration$.filter(function(t){return null!=t.keys}).switchMap(function(e){return o.Observable.zip(t._catchCacheNode$(e.keys.background),t._catchCacheNode$(e.keys.foreground)).map(function(t){return{background:t[0],foreground:t[1]}}).zip(t._navigator.stateService.currentState$.first()).map(function(t){return{nodes:t[0],state:t[1].state}})}).subscribe(function(e){if(null==e.state.currentNode||null==e.state.previousNode||e.state.currentNode.key!==e.nodes.foreground.key||e.state.previousNode.key!==e.nodes.background.key){if(e.state.currentNode.key===e.nodes.background.key)return void t._navigator.stateService.setNodes([e.nodes.foreground]);if(e.state.currentNode.key===e.nodes.foreground.key&&1===e.state.trajectory.length)return void t._navigator.stateService.prependNodes([e.nodes.background]);t._navigator.stateService.setNodes([e.nodes.background]),t._navigator.stateService.setNodes([e.nodes.foreground])}},function(t){console.error(t)});var e=this._navigator.stateService.currentState$.map(function(t){return t.state.previousNode}).filter(function(t){return null!=t}).distinctUntilChanged(void 0,function(t){return t.key});this._nodeSubscription=o.Observable.merge(e,this._navigator.stateService.currentNode$).filter(function(t){return t.pano?u.Settings.maxImageSize>u.Settings.basePanoramaSize:u.Settings.maxImageSize>u.Settings.baseImageSize}).mergeMap(function(t){var e=t.pano?u.Settings.basePanoramaSize:u.Settings.baseImageSize;return Math.max(t.image.width,t.image.height)>e?o.Observable.empty():t.cacheImage$(u.Settings.maxImageSize).map(function(t){return[t.image,t]}).catch(function(e,r){return console.error("Failed to fetch high res slider image ("+t.key+")",e),o.Observable.empty()})}).map(function(t){var e=t[0],r=t[1];return function(t){return t.updateTexture(e,r),t}}).subscribe(this._sliderStateOperation$)},e.prototype._deactivate=function(){var t=this;this._navigator.stateService.state$.first().subscribe(function(e){e===s.State.Waiting&&t._navigator.stateService.traverse()}),this._sliderStateDisposer$.next(null),this._setKeysSubscription.unsubscribe(),this._setSliderVisibleSubscription.unsubscribe(),this._stateSubscription.unsubscribe(),this._glRenderSubscription.unsubscribe(),this._domRenderSubscription.unsubscribe(),this._nodeSubscription.unsubscribe(),this.configure({keys:null})},e.prototype._getDefaultConfiguration=function(){return{}},e.prototype._catchCacheNode$=function(t){return this._navigator.graphService.cacheNode$(t).catch(function(e,r){
+return console.error("Failed to cache slider node ("+t+")",e),o.Observable.empty()})},e}(h.Component);p.componentName="slider",r.SliderComponent=p,h.ComponentService.register(p),Object.defineProperty(r,"__esModule",{value:!0}),r.default=p},{"../../Component":225,"../../Render":231,"../../State":232,"../../Utils":234,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/fromEvent":41,"rxjs/add/observable/of":44,"rxjs/add/observable/zip":47,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/scan":72,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/withLatestFrom":82,"rxjs/add/operator/zip":83,"virtual-dom":181}],261:[function(t,e,r){"use strict";var n=t("./MarkerComponent");r.MarkerComponent=n.MarkerComponent;var i=t("./marker/SimpleMarker");r.SimpleMarker=i.SimpleMarker;var o=t("./marker/CircleMarker");r.CircleMarker=o.CircleMarker},{"./MarkerComponent":262,"./marker/CircleMarker":265,"./marker/SimpleMarker":267}],262:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("three"),o=t("when"),a=t("rxjs/Observable");t("rxjs/add/observable/combineLatest"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/map");var s=t("../../Component"),c=t("../../Render"),u=t("../../Graph"),h=t("../../Geo"),l=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._relativeGroundAltitude=-2,i._geoCoords=new h.GeoCoords,i._graphCalculator=new u.GraphCalculator,i._markerScene=new s.MarkerScene,i._markerSet=new s.MarkerSet,i._viewportCoords=new h.ViewportCoords,i}return n(e,t),e.prototype.add=function(t){this._markerSet.add(t)},e.prototype.has=function(t){return this._markerSet.has(t)},e.prototype.get=function(t){return this._markerSet.get(t)},e.prototype.getAll=function(){return this._markerSet.getAll()},e.prototype.getMarkerIdAt=function(t){var e=this;return o.promise(function(r,n){e._container.renderService.renderCamera$.first().map(function(r){var n=e._viewportCoords.canvasToViewport(t[0],t[1],e._container.element);return e._markerScene.intersectObjects(n,r.perspective)}).subscribe(function(t){r(t)},function(t){n(t)})})},e.prototype.remove=function(t){this._markerSet.remove(t)},e.prototype.removeAll=function(){this._markerSet.removeAll()},e.prototype._activate=function(){var t=this,r=this._navigator.stateService.currentState$.map(function(e){return e.state.camera.position.z+t._relativeGroundAltitude}).distinctUntilChanged(function(t,e){return Math.abs(t-e)<.01}).publishReplay(1).refCount(),n=a.Observable.combineLatest(r,this._navigator.stateService.reference$).first().map(function(){}).publishReplay(1).refCount(),o=this._configuration$.map(function(t){return{visibleBBoxSize:Math.max(1,Math.min(200,t.visibleBBoxSize))}}),s=this._navigator.stateService.currentNode$.map(function(t){return t.latLon}).publishReplay(1).refCount(),u=a.Observable.combineLatest(o,s).map(function(e){var r=e[0],n=e[1];return t._graphCalculator.boundingBoxCorners(n,r.visibleBBoxSize/2)}).publishReplay(1).refCount(),h=a.Observable.combineLatest(a.Observable.of(this._markerSet).concat(this._markerSet.changed$),u).map(function(t){var e=t[0],r=t[1];return e.search(r)});this._setChangedSubscription=n.switchMap(function(){return h.withLatestFrom(t._navigator.stateService.reference$,r)}).subscribe(function(e){for(var r=e[0],n=e[1],i=e[2],o=t._geoCoords,a=t._markerScene,s=a.markers,c=Object.assign({},s),u=0,h=r;u<h.length;u++){var l=h[u];if(l.id in s)delete c[l.id];else{var p=o.geodeticToEnu(l.latLon.lat,l.latLon.lon,n.alt+i,n.lat,n.lon,n.alt);a.add(l,p)}}for(var f in c)c.hasOwnProperty(f)&&a.remove(f)}),this._markersUpdatedSubscription=n.switchMap(function(){return t._markerSet.updated$.withLatestFrom(u,t._navigator.stateService.reference$,r)}).subscribe(function(e){for(var r=e[0],n=e[1],i=n[0],o=n[1],a=e[2],s=e[3],c=t._geoCoords,u=t._markerScene,h=0,l=r;h<l.length;h++){var p=l[h],f=u.has(p.id),d=p.latLon.lat>i.lat&&p.latLon.lat<o.lat&&p.latLon.lon>i.lon&&p.latLon.lon<o.lon;if(d){var m=c.geodeticToEnu(p.latLon.lat,p.latLon.lon,a.alt+s,a.lat,a.lon,a.alt);u.add(p,m)}else!d&&f&&u.remove(p.id)}}),this._referenceSubscription=this._navigator.stateService.reference$.skip(1).withLatestFrom(r).subscribe(function(e){for(var r=e[0],n=e[1],i=t._geoCoords,o=t._markerScene,a=0,s=o.getAll();a<s.length;a++){var c=s[a],u=i.geodeticToEnu(c.latLon.lat,c.latLon.lon,r.alt+n,r.lat,r.lon,r.alt);o.update(c.id,u)}}),this._adjustHeightSubscription=r.skip(1).withLatestFrom(this._navigator.stateService.reference$,s).subscribe(function(e){for(var r=e[0],n=e[1],i=e[2],o=t._geoCoords,a=t._markerScene,s=o.geodeticToEnu(i.lat,i.lon,n.alt+r,n.lat,n.lon,n.alt),c=0,u=a.getAll();c<u.length;c++){var h=u[c],l=o.geodeticToEnu(h.latLon.lat,h.latLon.lon,n.alt+r,n.lat,n.lon,n.alt),p=l[0]-s[0],f=l[1]-s[1],d=Math.sqrt(p*p+f*f);d>50||a.lerpAltitude(h.id,r,Math.min(1,Math.max(0,1.2-1.2*d/50)))}}),this._renderSubscription=this._navigator.stateService.currentState$.map(function(e){var r=t._markerScene;return{name:t._name,render:{frameId:e.id,needsRender:r.needsRender,render:r.render.bind(r),stage:c.GLRenderStage.Foreground}}}).subscribe(this._container.glRenderer.render$);var l=a.Observable.combineLatest(this._container.renderService.renderCamera$,this._container.mouseService.mouseMove$).map(function(e){var r=e[0],n=e[1],i=t._container.element,o=t._viewportCoords.canvasPosition(n,i),a=o[0],s=o[1],c=t._viewportCoords.canvasToViewport(a,s,i);return t._markerScene.intersectObjects(c,r.perspective)}).publishReplay(1).refCount(),p=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragStart$).map(function(t){return!0}),f=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragEnd$).map(function(t){return!1}),d=a.Observable.merge(p,f).startWith(!1);this._dragEventSubscription=p.withLatestFrom(l).merge(a.Observable.combineLatest(f,a.Observable.of(null))).startWith([!1,null]).pairwise().subscribe(function(r){var n=r[0],i=r[1],o=i[0],a=o?e.dragstart:e.dragend,s=o?i[1]:n[1],c=t._markerScene.get(s),u={marker:c,target:t,type:a};t.fire(a,u)}),this._mouseClaimSubscription=a.Observable.combineLatest(this._container.mouseService.active$,l,d).map(function(t){var e=t[0],r=t[1],n=t[2];return!e&&null!=r||n}).distinctUntilChanged().subscribe(function(e){e?t._container.mouseService.claimMouse(t._name,1):t._container.mouseService.unclaimMouse(t._name)});var m=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDragStart$).withLatestFrom(l,this._container.renderService.renderCamera$).map(function(e){var r=e[0],n=e[1],i=e[2],o=t._markerScene.get(n),a=t._container.element,s=t._viewportCoords.projectToCanvas(o.geometry.position.toArray(),a,i.perspective),c=s[0],u=s[1],h=t._viewportCoords.canvasPosition(r,a);return[o,[h[0]-c,h[1]-u],i]}).publishReplay(1).refCount();this._updateMarkerSubscription=this._container.mouseService.filtered$(this._name,this._container.mouseService.mouseDrag$).withLatestFrom(m,this._navigator.stateService.reference$,o).subscribe(function(r){var n=r[0],o=r[1],a=o[0],s=o[1],c=o[2],u=r[2],h=r[3];if(t._markerScene.has(a.id)){var l=t._container.element,p=t._viewportCoords.canvasPosition(n,l),f=p[0],d=p[1],m=f-s[0],v=d-s[1],g=t._viewportCoords.canvasToViewport(m,v,l),y=g[0],b=g[1],_=new i.Vector3(y,b,1).unproject(c.perspective).sub(c.perspective.position).normalize(),x=Math.min(t._relativeGroundAltitude/_.z,h.visibleBBoxSize/2-.1);if(!(x<0)){var w=_.clone().multiplyScalar(x).add(c.perspective.position);w.z=c.perspective.position.z+t._relativeGroundAltitude;var S=t._geoCoords.enuToGeodetic(w.x,w.y,w.z,u.lat,u.lon,u.alt),M=S[0],E=S[1];t._markerScene.update(a.id,w.toArray(),{lat:M,lon:E}),t._markerSet.update(a);var T={marker:a,target:t,type:e.changed};t.fire(e.changed,T)}}})},e.prototype._deactivate=function(){this._adjustHeightSubscription.unsubscribe(),this._dragEventSubscription.unsubscribe(),this._markersUpdatedSubscription.unsubscribe(),this._mouseClaimSubscription.unsubscribe(),this._referenceSubscription.unsubscribe(),this._renderSubscription.unsubscribe(),this._setChangedSubscription.unsubscribe(),this._updateMarkerSubscription.unsubscribe(),this._markerScene.clear()},e.prototype._getDefaultConfiguration=function(){return{visibleBBoxSize:100}},e}(s.Component);l.componentName="marker",l.changed="changed",l.dragstart="dragstart",l.dragend="dragend",r.MarkerComponent=l,s.ComponentService.register(l),Object.defineProperty(r,"__esModule",{value:!0}),r.default=l},{"../../Component":225,"../../Geo":228,"../../Graph":229,"../../Render":231,"rxjs/Observable":28,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,three:175,when:222}],263:[function(t,e,r){"use strict";var n=t("three"),i=function(){function t(t,e){this._needsRender=!1,this._interactiveObjects=[],this._markers={},this._objectMarkers={},this._raycaster=e||new n.Raycaster,this._scene=t||new n.Scene}return Object.defineProperty(t.prototype,"markers",{get:function(){return this._markers},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:!0,configurable:!0}),t.prototype.add=function(t,e){t.id in this._markers&&this._dispose(t.id),t.createGeometry(e),this._scene.add(t.geometry),this._markers[t.id]=t;for(var r=0,n=t.getInteractiveObjects();r<n.length;r++){var i=n[r];this._interactiveObjects.push(i),this._objectMarkers[i.uuid]=t.id}this._needsRender=!0},t.prototype.clear=function(){for(var t in this._markers)this._markers.hasOwnProperty&&this._dispose(t);this._needsRender=!0},t.prototype.get=function(t){return this._markers[t]},t.prototype.getAll=function(){var t=this;return Object.keys(this._markers).map(function(e){return t._markers[e]})},t.prototype.has=function(t){return t in this._markers},t.prototype.intersectObjects=function(t,e){var r=t[0],i=t[1];this._raycaster.setFromCamera(new n.Vector2(r,i),e);for(var o=this._raycaster.intersectObjects(this._interactiveObjects),a=0,s=o;a<s.length;a++){var c=s[a];if(c.object.uuid in this._objectMarkers)return this._objectMarkers[c.object.uuid]}return null},t.prototype.lerpAltitude=function(t,e,r){t in this._markers&&(this._markers[t].lerpAltitude(e,r),this._needsRender=!0)},t.prototype.remove=function(t){t in this._markers&&(this._dispose(t),this._needsRender=!0)},t.prototype.render=function(t,e){e.render(this._scene,t),this._needsRender=!1},t.prototype.update=function(t,e,r){if(t in this._markers){this._markers[t].updatePosition(e,r),this._needsRender=!0}},t.prototype._dispose=function(t){var e=this._markers[t];this._scene.remove(e.geometry);for(var r=0,n=e.getInteractiveObjects();r<n.length;r++){var i=n[r],o=this._interactiveObjects.indexOf(i);-1!==o?this._interactiveObjects.splice(o,1):console.warn("Object does not exist ("+i.id+") for "+t),delete this._objectMarkers[i.uuid]}e.disposeGeometry(),delete this._markers[t]},t}();r.MarkerScene=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{three:175}],264:[function(t,e,r){"use strict";var n=t("rbush"),i=t("rxjs/Subject");t("rxjs/add/operator/map"),t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan");var o=function(){function t(){this._hash={},this._index=n(16,[".lon",".lat",".lon",".lat"]),this._indexChanged$=new i.Subject,this._updated$=new i.Subject}return Object.defineProperty(t.prototype,"changed$",{get:function(){return this._indexChanged$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"updated$",{get:function(){return this._updated$},enumerable:!0,configurable:!0}),t.prototype.add=function(t){for(var e=[],r=this._hash,n=this._index,i=0,o=t;i<o.length;i++){var a=o[i],s=a.id;s in r&&(n.remove(r[s]),e.push(a));var c={lat:a.latLon.lat,lon:a.latLon.lon,marker:a};r[s]=c,n.insert(c)}e.length>0&&this._updated$.next(e),t.length>e.length&&this._indexChanged$.next(this)},t.prototype.has=function(t){return t in this._hash},t.prototype.get=function(t){return this.has(t)?this._hash[t].marker:void 0},t.prototype.getAll=function(){return this._index.all().map(function(t){return t.marker})},t.prototype.remove=function(t){for(var e=this._hash,r=this._index,n=!1,i=0,o=t;i<o.length;i++){var a=o[i];if(a in e){var s=e[a];r.remove(s),delete e[a],n=!0}}n&&this._indexChanged$.next(this)},t.prototype.removeAll=function(){this._hash={},this._index.clear(),this._indexChanged$.next(this)},t.prototype.search=function(t){var e=t[0],r=t[1];return this._index.search({maxX:r.lon,maxY:r.lat,minX:e.lon,minY:e.lat}).map(function(t){return t.marker})},t.prototype.update=function(t){var e=this._hash,r=this._index,n=t.id;if(n in e){r.remove(e[n]);var i={lat:t.latLon.lat,lon:t.latLon.lon,marker:t};e[n]=i,r.insert(i)}},t}();r.MarkerSet=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{rbush:24,"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72}],265:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("three"),o=t("../../../Component"),a=function(t){function e(e,r,n){var i=t.call(this,e,r)||this;return n=n||{},i._color=null!=n.color?n.color:16777215,i._opacity=null!=n.opacity?n.opacity:.4,i._radius=null!=n.radius?n.radius:1,i}return n(e,t),e.prototype._createGeometry=function(t){var e=new i.Mesh(new i.CircleGeometry(this._radius,16),new i.MeshBasicMaterial({color:this._color,opacity:this._opacity,transparent:!0}));e.up.fromArray([0,0,1]),e.renderOrder=-1;var r=new i.Object3D;r.add(e),r.position.fromArray(t),this._geometry=r},e.prototype._disposeGeometry=function(){for(var t=0,e=this._geometry.children;t<e.length;t++){var r=e[t];r.geometry.dispose(),r.material.dispose()}},e.prototype._getInteractiveObjects=function(){return[]},e}(o.Marker);r.CircleMarker=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../../../Component":225,three:175}],266:[function(t,e,r){"use strict";var n=function(){function t(t,e){this._id=t,this._latLon=e}return Object.defineProperty(t.prototype,"id",{get:function(){return this._id},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"geometry",{get:function(){return this._geometry},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"latLon",{get:function(){return this._latLon},enumerable:!0,configurable:!0}),t.prototype.createGeometry=function(t){this._geometry||(this._createGeometry(t),this._geometry.updateMatrixWorld(!0))},t.prototype.disposeGeometry=function(){this._geometry&&(this._disposeGeometry(),this._geometry=void 0)},t.prototype.getInteractiveObjects=function(){return this._geometry?this._getInteractiveObjects():[]},t.prototype.lerpAltitude=function(t,e){this._geometry&&(this._geometry.position.z=(1-e)*this._geometry.position.z+e*t)},t.prototype.updatePosition=function(t,e){e&&(this._latLon.lat=e.lat,this._latLon.lon=e.lon),this._geometry&&(this._geometry.position.fromArray(t),this._geometry.updateMatrixWorld(!0))},t}();r.Marker=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],267:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("three"),o=t("../../../Component"),a=function(t){function e(e,r,n){var i=t.call(this,e,r)||this;return n=n||{},i._ballColor=null!=n.ballColor?n.ballColor:16711680,i._ballOpacity=null!=n.ballOpacity?n.ballOpacity:.8,i._circleToRayAngle=2,i._color=null!=n.color?n.color:16711680,i._interactive=!!n.interactive,i._opacity=null!=n.opacity?n.opacity:.4,i._radius=null!=n.radius?n.radius:1,i}return n(e,t),e.prototype._createGeometry=function(t){var e=this._radius,r=new i.Mesh(this._markerGeometry(e,8,8),new i.MeshBasicMaterial({color:this._color,opacity:this._opacity,shading:i.SmoothShading,transparent:!0}));r.renderOrder=1;var n=new i.Mesh(new i.SphereGeometry(e/2,8,8),new i.MeshBasicMaterial({color:this._ballColor,opacity:this._ballOpacity,shading:i.SmoothShading,transparent:!0}));n.position.z=this._markerHeight(e);var o=new i.Object3D;o.add(n),o.add(r),o.position.fromArray(t),this._geometry=o},e.prototype._disposeGeometry=function(){for(var t=0,e=this._geometry.children;t<e.length;t++){var r=e[t];r.geometry.dispose(),r.material.dispose()}},e.prototype._getInteractiveObjects=function(){return this._interactive?[this._geometry.children[0]]:[]},e.prototype._markerHeight=function(t){var e=Math.tan(Math.PI-this._circleToRayAngle);return t*Math.sqrt(1+e*e)},e.prototype._markerGeometry=function(t,e,r){var n=new i.Geometry;e=Math.max(3,Math.floor(e)||8),r=Math.max(2,Math.floor(r)||6);for(var o=this._markerHeight(t),a=[],s=0;s<=r;++s){for(var c=[],u=0;u<=e;++u){var h=u/e*Math.PI*2,l=s/r*Math.PI,p=void 0;if(l<this._circleToRayAngle)p=t;else{var f=Math.tan(l-this._circleToRayAngle);p=t*Math.sqrt(1+f*f)}var d=new i.Vector3;d.x=p*Math.cos(h)*Math.sin(l),d.y=p*Math.sin(h)*Math.sin(l),d.z=p*Math.cos(l)+o,n.vertices.push(d),c.push(n.vertices.length-1)}a.push(c)}for(var s=0;s<r;++s)for(var u=0;u<e;++u){var m=a[s][u+1],v=a[s][u],g=a[s+1][u],y=a[s+1][u+1],b=n.vertices[m].clone().normalize(),_=n.vertices[v].clone().normalize(),x=n.vertices[g].clone().normalize(),w=n.vertices[y].clone().normalize();n.faces.push(new i.Face3(m,v,y,[b,_,w])),n.faces.push(new i.Face3(v,g,y,[_.clone(),x,w.clone()]))}return n.computeFaceNormals(),n.boundingSphere=new i.Sphere(new i.Vector3,t+o),n},e}(o.Marker);r.SimpleMarker=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../../../Component":225,three:175}],268:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable"),o=t("../../Component"),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype._enable=function(){var t=this;this._zoomSubscription=i.Observable.merge(this._container.mouseService.filtered$(this._component.name,this._container.mouseService.dblClick$),this._container.touchService.doubleTap$.map(function(t){var e=t.touches[0];return{clientX:e.clientX,clientY:e.clientY,shiftKey:t.shiftKey}})).withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$).subscribe(function(e){var r=e[0],n=e[1],i=e[2],o=t._container.element,a=t._viewportCoords.canvasPosition(r,o),s=a[0],c=a[1],u=t._viewportCoords.unprojectFromCanvas(s,c,o,n.perspective),h=i.projectBasic(u.toArray()),l=r.shiftKey?-1:1;t._navigator.stateService.zoomIn(l,h)})},e.prototype._disable=function(){this._zoomSubscription.unsubscribe()},e.prototype._getConfiguration=function(t){return{doubleClickZoom:t}},e}(o.MouseHandlerBase);r.DoubleClickZoomHandler=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../../Component":225,"rxjs/Observable":28}],269:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("three"),o=t("rxjs/Observable"),a=t("../../Component"),s=function(t){function e(e,r,n,i,o){var a=t.call(this,e,r,n,i)||this;return a._spatial=o,a._basicRotationThreshold=.05,a._forceCoeff=.2,a}return n(e,t),e.prototype._enable=function(){var t=this;this._preventDefaultSubscription=o.Observable.merge(this._container.mouseService.mouseDragStart$,this._container.mouseService.mouseDrag$,this._container.touchService.touchMove$).subscribe(function(t){t.preventDefault()});var e=this._container.mouseService.filtered$(this._component.name,this._container.mouseService.mouseDragStart$).map(function(t){return!0}),r=this._container.mouseService.filtered$(this._component.name,this._container.mouseService.mouseDragEnd$).map(function(t){return!1});this._activeMouseSubscription=o.Observable.merge(e,r).subscribe(this._container.mouseService.activate$);var n=this._container.touchService.singleTouchDragStart$.map(function(t){return!0}),a=this._container.touchService.singleTouchDragEnd$.map(function(t){return!1});this._activeTouchSubscription=o.Observable.merge(n,a).subscribe(this._container.touchService.activate$),this._rotateBasicSubscription=this._navigator.stateService.currentState$.map(function(t){return t.state.currentNode.fullPano||t.state.nodesAhead<1}).distinctUntilChanged().switchMap(function(e){if(!e)return o.Observable.empty();var r=o.Observable.merge(t._container.mouseService.filtered$(t._component.name,t._container.mouseService.mouseDragStart$),t._container.mouseService.filtered$(t._component.name,t._container.mouseService.mouseDrag$),t._container.mouseService.filtered$(t._component.name,t._container.mouseService.mouseDragEnd$).map(function(t){return null})).pairwise().filter(function(t){return null!=t[0]&&null!=t[1]}),n=o.Observable.merge(t._container.touchService.singleTouchDragStart$,t._container.touchService.singleTouchDrag$,t._container.touchService.singleTouchDragEnd$.map(function(t){return null})).map(function(t){return null!=t&&t.touches.length>0?t.touches[0]:null}).pairwise().filter(function(t){return null!=t[0]&&null!=t[1]});return o.Observable.merge(r,n)}).withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$,this._navigator.stateService.currentCamera$).map(function(e){var r=e[0],n=e[1],o=e[2],a=e[3],s=a.clone(),c=r[0],u=r[1],h=u.clientX-c.clientX,l=u.clientY-c.clientY,p=t._container.element,f=t._viewportCoords.canvasPosition(u,p),d=f[0],m=f[1],v=t._viewportCoords.unprojectFromCanvas(d,m,p,n.perspective).sub(n.perspective.position),g=t._viewportCoords.unprojectFromCanvas(d-h,m,p,n.perspective).sub(n.perspective.position),y=t._viewportCoords.unprojectFromCanvas(d,m-l,p,n.perspective).sub(n.perspective.position),b=(h>0?1:-1)*g.angleTo(v),_=(l>0?-1:1)*y.angleTo(v),x=(new i.Quaternion).setFromUnitVectors(s.up,new i.Vector3(0,0,1)),w=x.clone().inverse(),S=new i.Vector3;S.copy(s.lookat).sub(s.position),S.applyQuaternion(x);var M=S.length(),E=Math.atan2(S.y,S.x);E+=b;var T=Math.atan2(Math.sqrt(S.x*S.x+S.y*S.y),S.z);T+=_,T=Math.max(.01,Math.min(Math.PI-.01,T)),S.x=Math.sin(T)*Math.cos(E),S.y=Math.sin(T)*Math.sin(E),S.z=Math.cos(T),S.applyQuaternion(w);var C=(new i.Vector3).copy(s.position).add(S.multiplyScalar(M)),O=o.projectBasic(C.toArray()),P=o.projectBasic(s.lookat.toArray()),A=O[0]-P[0],j=O[1]-P[1];Math.abs(A)>1?A=0:A>.5?A-=1:A<-.5&&(A+=1);var R=t._basicRotationThreshold;if(A=t._spatial.clamp(A,-R,R),j=t._spatial.clamp(j,-R,R),o.fullPano)return[A,j];var L=t._viewportCoords.getPixelDistances(t._container.element,o,n.perspective),N=t._forceCoeff;return L[0]>0&&j<0&&O[1]<.5&&(j/=Math.max(1,N*L[0])),L[1]>0&&A>0&&O[0]>.5&&(A/=Math.max(1,N*L[1])),L[2]>0&&j>0&&O[1]>.5&&(j/=Math.max(1,N*L[2])),L[3]>0&&A<0&&O[0]<.5&&(A/=Math.max(1,N*L[3])),[A,j]}).subscribe(function(e){t._navigator.stateService.rotateBasic(e)})},e.prototype._disable=function(){this._activeMouseSubscription.unsubscribe(),this._activeTouchSubscription.unsubscribe(),this._preventDefaultSubscription.unsubscribe(),this._rotateBasicSubscription.unsubscribe(),this._activeMouseSubscription=null,this._activeTouchSubscription=null,this._rotateBasicSubscription=null},e.prototype._getConfiguration=function(t){return{dragPan:t}},e}(a.MouseHandlerBase);r.DragPanHandler=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../../Component":225,"rxjs/Observable":28,three:175}],270:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable");t("rxjs/add/observable/merge"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/withLatestFrom");var o=t("../../Component"),a=t("../../Geo"),s=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;i._basicDistanceThreshold=.001,i._basicRotationThreshold=.05,i._bounceCoeff=.1;var s=new a.Spatial,c=new a.ViewportCoords;return i._spatial=s,i._viewportCoords=c,i._doubleClickZoomHandler=new o.DoubleClickZoomHandler(i,r,n,c),i._dragPanHandler=new o.DragPanHandler(i,r,n,c,s),i._scrollZoomHandler=new o.ScrollZoomHandler(i,r,n,c),i._touchZoomHandler=new o.TouchZoomHandler(i,r,n,c),i}return n(e,t),Object.defineProperty(e.prototype,"doubleClickZoom",{get:function(){return this._doubleClickZoomHandler},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"dragPan",{get:function(){return this._dragPanHandler},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"scrollZoom",{get:function(){return this._scrollZoomHandler},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"touchZoom",{get:function(){return this._touchZoomHandler},enumerable:!0,configurable:!0}),e.prototype._activate=function(){var t=this;this._configurationSubscription=this._configuration$.subscribe(function(e){e.doubleClickZoom?t._doubleClickZoomHandler.enable():t._doubleClickZoomHandler.disable(),e.dragPan?t._dragPanHandler.enable():t._dragPanHandler.disable(),e.scrollZoom?t._scrollZoomHandler.enable():t._scrollZoomHandler.disable(),e.touchZoom?t._touchZoomHandler.enable():t._touchZoomHandler.disable()});var e=this._navigator.stateService.currentState$.map(function(t){return t.state.alpha<1});this._bounceSubscription=i.Observable.combineLatest(e,this._navigator.stateService.inTranslation$,this._container.mouseService.active$,this._container.touchService.active$).map(function(t){return t[0]||t[1]||t[2]||t[3]}).distinctUntilChanged().switchMap(function(e){return e?i.Observable.empty():i.Observable.combineLatest(t._container.renderService.renderCamera$,t._navigator.stateService.currentTransform$.first())}).subscribe(function(e){var r=e[0],n=r.perspective,i=e[1];if((i.hasValidScale||!(r.camera.focal<.1))&&0!==r.perspective.aspect&&r.perspective.aspect!==Number.POSITIVE_INFINITY){var o=t._basicDistanceThreshold/Math.pow(2,r.zoom),a=t._viewportCoords.viewportToBasic(0,0,i,n);if(!(Math.abs(a[0]-.5)<o&&Math.abs(a[1]-.5)<o)){var s=t._viewportCoords.getBasicDistances(i,n),c=0,u=0;if(!(s[0]<o&&s[1]<o&&s[2]<o&&s[3]<o||Math.abs(s[0]-s[2])<o&&Math.abs(s[1]-s[3])<o)){var h=t._bounceCoeff;s[1]>0&&0===s[3]?c=-h*s[1]:0===s[1]&&s[3]>0?c=h*s[3]:s[1]>0&&s[3]>0&&(c=h*(s[3]-s[1])/2),s[0]>0&&0===s[2]?u=h*s[0]:0===s[0]&&s[2]>0?u=-h*s[2]:s[0]>0&&s[2]>0&&(u=h*(s[0]-s[2])/2);var l=t._basicRotationThreshold;c=t._spatial.clamp(c,-l,l),u=t._spatial.clamp(u,-l,l),t._navigator.stateService.rotateBasicUnbounded([c,u])}}}}),this._container.mouseService.claimMouse(this._name,0)},e.prototype._deactivate=function(){this._container.mouseService.unclaimMouse(this._name),this._bounceSubscription.unsubscribe(),this._configurationSubscription.unsubscribe(),this._doubleClickZoomHandler.disable(),this._dragPanHandler.disable(),this._scrollZoomHandler.disable(),this._touchZoomHandler.disable()},e.prototype._getDefaultConfiguration=function(){return{doubleClickZoom:!0,dragPan:!0,scrollZoom:!0,touchZoom:!0}},e}(o.Component);s.componentName="mouse",r.MouseComponent=s,o.ComponentService.register(s),Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../../Component":225,"../../Geo":228,"rxjs/Observable":28,"rxjs/add/observable/merge":43,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/withLatestFrom":82}],271:[function(t,e,r){"use strict";var n=function(){function t(t,e,r,n){this._component=t,this._container=e,this._navigator=r,this._viewportCoords=n,this._enabled=!1}return Object.defineProperty(t.prototype,"isEnabled",{get:function(){return this._enabled},enumerable:!0,configurable:!0}),t.prototype.enable=function(){!this._enabled&&this._component.activated&&(this._enable(),this._enabled=!0,this._component.configure(this._getConfiguration(!0)))},t.prototype.disable=function(){this._enabled&&(this._disable(),this._enabled=!1,this._component.activated&&this._component.configure(this._getConfiguration(!1)))},t}();r.MouseHandlerBase=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],272:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../../Component"),o=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype._enable=function(){var t=this;this._preventDefaultSubscription=this._container.mouseService.mouseWheel$.subscribe(function(t){t.preventDefault()}),this._zoomSubscription=this._container.mouseService.filtered$(this._component.name,this._container.mouseService.mouseWheel$).withLatestFrom(this._navigator.stateService.currentState$,function(t,e){return[t,e]}).filter(function(t){var e=t[1].state;return e.currentNode.fullPano||e.nodesAhead<1}).map(function(t){return t[0]}).withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$,function(t,e,r){return[t,e,r]}).subscribe(function(e){var r=e[0],n=e[1],i=e[2],o=t._container.element,a=t._viewportCoords.canvasPosition(r,o),s=a[0],c=a[1],u=t._viewportCoords.unprojectFromCanvas(s,c,o,n.perspective),h=i.projectBasic(u.toArray()),l=r.deltaY;1===r.deltaMode?l*=40:2===r.deltaMode&&(l*=800);var p=t._viewportCoords.containerToCanvas(o),f=-3*l/p[1];t._navigator.stateService.zoomIn(f,h)})},e.prototype._disable=function(){this._preventDefaultSubscription.unsubscribe(),this._zoomSubscription.unsubscribe(),this._preventDefaultSubscription=null,this._zoomSubscription=null},e.prototype._getConfiguration=function(t){return{scrollZoom:t}},e}(i.MouseHandlerBase);r.ScrollZoomHandler=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../../Component":225}],273:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable"),o=t("../../Component"),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype._enable=function(){var t=this;this._preventDefaultSubscription=this._container.touchService.pinch$.subscribe(function(t){t.originalEvent.preventDefault()});var e=this._container.touchService.pinchStart$.map(function(t){return!0}),r=this._container.touchService.pinchEnd$.map(function(t){return!1});this._activeSubscription=i.Observable.merge(e,r).subscribe(this._container.touchService.activate$),this._zoomSubscription=this._container.touchService.pinch$.withLatestFrom(this._navigator.stateService.currentState$).filter(function(t){var e=t[1].state;return e.currentNode.fullPano||e.nodesAhead<1}).map(function(t){return t[0]}).withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.currentTransform$).subscribe(function(e){var r=e[0],n=e[1],i=e[2],o=t._container.element,a=t._viewportCoords.canvasPosition(r,o),s=a[0],c=a[1],u=t._viewportCoords.unprojectFromCanvas(s,c,o,n.perspective),h=i.projectBasic(u.toArray()),l=t._viewportCoords.containerToCanvas(o),p=l[0],f=l[1],d=3*r.distanceChange/Math.min(p,f);t._navigator.stateService.zoomIn(d,h)})},e.prototype._disable=function(){this._activeSubscription.unsubscribe(),this._preventDefaultSubscription.unsubscribe(),this._zoomSubscription.unsubscribe(),
+this._preventDefaultSubscription=null,this._zoomSubscription=null},e.prototype._getConfiguration=function(t){return{touchZoom:t}},e}(o.MouseHandlerBase);r.TouchZoomHandler=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../../Component":225,"rxjs/Observable":28}],274:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable"),o=t("rxjs/Subject");t("rxjs/add/observable/combineLatest"),t("rxjs/add/observable/of"),t("rxjs/add/operator/bufferCount"),t("rxjs/add/operator/concat"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/finally"),t("rxjs/add/operator/first"),t("rxjs/add/operator/map"),t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/share"),t("rxjs/add/operator/switchMap"),t("rxjs/add/operator/takeUntil"),t("rxjs/add/operator/withLatestFrom");var a=t("../../Component"),s=t("../../Edge"),c=function(t){function e(e,r,n){var i=t.call(this,e,r,n)||this;return i._nodesAhead=5,i._configurationOperation$=new o.Subject,i._sequenceDOMRenderer=new a.SequenceDOMRenderer(r.element),i._sequenceDOMInteraction=new a.SequenceDOMInteraction,i._containerWidth$=new o.Subject,i._hoveredKeySubject$=new o.Subject,i._hoveredKey$=i._hoveredKeySubject$.share(),i._edgeStatus$=i._navigator.stateService.currentNode$.switchMap(function(t){return t.sequenceEdges$}).publishReplay(1).refCount(),i}return n(e,t),Object.defineProperty(e.prototype,"hoveredKey$",{get:function(){return this._hoveredKey$},enumerable:!0,configurable:!0}),e.prototype.play=function(){this.configure({playing:!0})},e.prototype.stop=function(){this.configure({playing:!1})},e.prototype.setDirection=function(t){this.configure({direction:t})},e.prototype.setHighlightKey=function(t){this.configure({highlightKey:t})},e.prototype.setMaxWidth=function(t){this.configure({maxWidth:t})},e.prototype.setMinWidth=function(t){this.configure({minWidth:t})},e.prototype.setVisible=function(t){this.configure({visible:t})},e.prototype.resize=function(){var t=this;this._configuration$.first().map(function(e){return t._sequenceDOMRenderer.getContainerWidth(t._container.element,e)}).subscribe(function(e){t._containerWidth$.next(e)})},e.prototype._activate=function(){var t=this;this._renderSubscription=i.Observable.combineLatest(this._edgeStatus$,this._configuration$,this._containerWidth$).map(function(e){var r=e[0],n=e[1],i=e[2],o=t._sequenceDOMRenderer.render(r,n,i,t,t._sequenceDOMInteraction,t._navigator);return{name:t._name,vnode:o}}).subscribe(this._container.domRenderer.render$),this._containerWidthSubscription=this._configuration$.distinctUntilChanged(function(t,e){return t[0]===e[0]&&t[1]===e[1]},function(t){return[t.minWidth,t.maxWidth]}).map(function(e){return t._sequenceDOMRenderer.getContainerWidth(t._container.element,e)}).subscribe(this._containerWidth$),this._configurationSubscription=this._configurationOperation$.scan(function(t,e){return e(t)},{playing:!1}).finally(function(){null!=t._playingSubscription&&(t._navigator.stateService.cutNodes(),t._stop())}).subscribe(function(){}),this._configuration$.map(function(e){return function(r){return e.playing!==r.playing&&(t._navigator.stateService.cutNodes(),e.playing?t._play():t._stop()),r.playing=e.playing,r}}).subscribe(this._configurationOperation$),this._stopSubscription=this._configuration$.switchMap(function(e){var r=e.playing?t._edgeStatus$:i.Observable.empty(),n=i.Observable.of(e.direction);return i.Observable.combineLatest(r,n)}).map(function(t){var e=t[0],r=t[1];if(!e.cached)return!0;for(var n=0,i=e.edges;n<i.length;n++){if(i[n].data.direction===r)return!0}return!1}).filter(function(t){return!t}).map(function(t){return{playing:!1}}).subscribe(this._configurationSubject$),this._hoveredKeySubscription=this._sequenceDOMInteraction.mouseEnterDirection$.switchMap(function(e){return t._edgeStatus$.map(function(t){for(var r=0,n=t.edges;r<n.length;r++){var i=n[r];if(i.data.direction===e)return i.to}return null}).takeUntil(t._sequenceDOMInteraction.mouseLeaveDirection$).concat(i.Observable.of(null))}).distinctUntilChanged().subscribe(this._hoveredKeySubject$)},e.prototype._deactivate=function(){this._stopSubscription.unsubscribe(),this._renderSubscription.unsubscribe(),this._configurationSubscription.unsubscribe(),this._containerWidthSubscription.unsubscribe(),this._hoveredKeySubscription.unsubscribe(),this.stop()},e.prototype._getDefaultConfiguration=function(){return{direction:s.EdgeDirection.Next,maxWidth:117,minWidth:70,playing:!1,visible:!0}},e.prototype._play=function(){var t=this;this._playingSubscription=this._navigator.stateService.currentState$.filter(function(e){return e.state.nodesAhead<t._nodesAhead}).map(function(t){return t.state.lastNode}).distinctUntilChanged(void 0,function(t){return t.key}).withLatestFrom(this._configuration$,function(t,e){return[t,e.direction]}).switchMap(function(t){return([s.EdgeDirection.Next,s.EdgeDirection.Prev].indexOf(t[1])>-1?t[0].sequenceEdges$:t[0].spatialEdges$).filter(function(t){return t.cached}).zip(i.Observable.of(t[1]),function(t,e){return[t,e]})}).map(function(t){for(var e=t[1],r=0,n=t[0].edges;r<n.length;r++){var i=n[r];if(i.data.direction===e)return i.to}return null}).filter(function(t){return null!=t}).switchMap(function(e){return t._navigator.graphService.cacheNode$(e)}).subscribe(function(e){t._navigator.stateService.appendNodes([e])},function(e){console.error(e),t.stop()}),this._clearSubscription=this._navigator.stateService.currentNode$.bufferCount(1,7).subscribe(function(e){t._navigator.stateService.clearPriorNodes()}),this.fire(e.playingchanged,!0)},e.prototype._stop=function(){this._playingSubscription.unsubscribe(),this._playingSubscription=null,this._clearSubscription.unsubscribe(),this._clearSubscription=null,this.fire(e.playingchanged,!1)},e}(a.Component);c.componentName="sequence",c.playingchanged="playingchanged",r.SequenceComponent=c,a.ComponentService.register(c),Object.defineProperty(r,"__esModule",{value:!0}),r.default=c},{"../../Component":225,"../../Edge":226,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/of":44,"rxjs/add/operator/bufferCount":49,"rxjs/add/operator/concat":53,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/finally":61,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/takeUntil":80,"rxjs/add/operator/withLatestFrom":82}],275:[function(t,e,r){"use strict";var n=t("rxjs/Subject"),i=function(){function t(){this._mouseEnterDirection$=new n.Subject,this._mouseLeaveDirection$=new n.Subject}return Object.defineProperty(t.prototype,"mouseEnterDirection$",{get:function(){return this._mouseEnterDirection$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseLeaveDirection$",{get:function(){return this._mouseLeaveDirection$},enumerable:!0,configurable:!0}),t}();r.SequenceDOMInteraction=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{"rxjs/Subject":33}],276:[function(t,e,r){"use strict";var n=t("virtual-dom"),i=t("../../Edge"),o=function(){function t(t){this._minThresholdWidth=320,this._maxThresholdWidth=1480,this._minThresholdHeight=240,this._maxThresholdHeight=820}return t.prototype.render=function(t,e,r,o,a,s){if(!1===e.visible)return n.h("div.SequenceContainer",{},[]);for(var c=null,u=null,h=0,l=t.edges;h<l.length;h++){var p=l[h];p.data.direction===i.EdgeDirection.Next&&(c=p.to),p.data.direction===i.EdgeDirection.Prev&&(u=p.to)}var f=this._createPlayingButton(c,u,e,o),d=this._createSequenceArrows(c,u,e,a,s),m={oncontextmenu:function(t){t.preventDefault()},style:{height:.27*r+"px",width:r+"px"}};return n.h("div.SequenceContainer",m,d.concat([f]))},t.prototype.getContainerWidth=function(t,e){var r=t.offsetWidth,n=t.offsetHeight,i=e.minWidth,o=e.maxWidth;o<i&&(o=i);var a=(r-this._minThresholdWidth)/(this._maxThresholdWidth-this._minThresholdWidth),s=(n-this._minThresholdHeight)/(this._maxThresholdHeight-this._minThresholdHeight);return i+Math.max(0,Math.min(1,Math.min(a,s)))*(o-i)},t.prototype._createPlayingButton=function(t,e,r,o){var a=r.direction===i.EdgeDirection.Next&&null!=t||r.direction===i.EdgeDirection.Prev&&null!=e,s=r.playing?function(t){o.stop()}:a?function(t){o.play()}:null,c={onclick:s,style:{}},u=r.playing?"Stop":a?"Play":"PlayDisabled",h=n.h("div.SequenceComponentIcon",{className:u},[]),l=a?"SequencePlay":"SequencePlayDisabled";return n.h("div."+l,c,[h])},t.prototype._createSequenceArrows=function(t,e,r,o,a){var s={onclick:null!=t?function(t){a.moveDir$(i.EdgeDirection.Next).subscribe(function(t){},function(t){console.error(t)})}:null,onmouseenter:function(t){o.mouseEnterDirection$.next(i.EdgeDirection.Next)},onmouseleave:function(t){o.mouseLeaveDirection$.next(i.EdgeDirection.Next)},style:{}},c={onclick:null!=e?function(t){a.moveDir$(i.EdgeDirection.Prev).subscribe(function(t){},function(t){console.error(t)})}:null,onmouseenter:function(t){o.mouseEnterDirection$.next(i.EdgeDirection.Prev)},onmouseleave:function(t){o.mouseLeaveDirection$.next(i.EdgeDirection.Prev)},style:{}},u=this._getStepClassName(i.EdgeDirection.Next,t,r.highlightKey),h=this._getStepClassName(i.EdgeDirection.Prev,e,r.highlightKey),l=n.h("div.SequenceComponentIcon",[]),p=n.h("div.SequenceComponentIcon",[]);return[n.h("div."+u,s,[l]),n.h("div."+h,c,[p])]},t.prototype._getStepClassName=function(t,e,r){var n=t===i.EdgeDirection.Next?"SequenceStepNext":"SequenceStepPrev";return null==e?n+="Disabled":r===e&&(n+="Highlight"),n},t}();r.SequenceDOMRenderer=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../../Edge":226,"virtual-dom":181}],277:[function(t,e,r){"use strict";var n=t("./error/GeometryTagError");r.GeometryTagError=n.GeometryTagError;var i=t("./geometry/PointGeometry");r.PointGeometry=i.PointGeometry;var o=t("./geometry/RectGeometry");r.RectGeometry=o.RectGeometry;var a=t("./geometry/PolygonGeometry");r.PolygonGeometry=a.PolygonGeometry;var s=t("./tag/OutlineTag");r.OutlineTag=s.OutlineTag;var c=t("./tag/SpotTag");r.SpotTag=c.SpotTag;var u=t("./tag/Alignment");r.Alignment=u.Alignment;var h=t("./TagComponent");r.TagComponent=h.TagComponent},{"./TagComponent":278,"./error/GeometryTagError":284,"./geometry/PointGeometry":286,"./geometry/PolygonGeometry":287,"./geometry/RectGeometry":288,"./tag/Alignment":290,"./tag/OutlineTag":293,"./tag/SpotTag":296}],278:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Observable"),o=t("rxjs/Subject");t("rxjs/add/observable/combineLatest"),t("rxjs/add/observable/empty"),t("rxjs/add/observable/from"),t("rxjs/add/observable/merge"),t("rxjs/add/observable/of"),t("rxjs/add/operator/combineLatest"),t("rxjs/add/operator/concat"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/do"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/merge"),t("rxjs/add/operator/mergeMap"),t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/share"),t("rxjs/add/operator/skip"),t("rxjs/add/operator/skipUntil"),t("rxjs/add/operator/startWith"),t("rxjs/add/operator/switchMap"),t("rxjs/add/operator/take"),t("rxjs/add/operator/takeUntil"),t("rxjs/add/operator/withLatestFrom");var a=t("../../Component"),s=t("../../Geo"),c=t("../../Render"),u=function(t){function e(r,n,c){var u=t.call(this,r,n,c)||this;return u._tagDomRenderer=new a.TagDOMRenderer,u._tagSet=new a.TagSet,u._tagCreator=new a.TagCreator,u._viewportCoords=new s.ViewportCoords,u._tagGlRendererOperation$=new o.Subject,u._tagGlRenderer$=u._tagGlRendererOperation$.startWith(function(t){return t}).scan(function(t,e){return e(t)},new a.TagGLRenderer),u._tags$=u._tagSet.tagData$.map(function(t){for(var e=[],r=0,n=Object.keys(t).sort();r<n.length;r++){var i=n[r];e.push(t[i])}return e}).share(),u._renderTags$=u.tags$.withLatestFrom(u._navigator.stateService.currentTransform$).map(function(t){var e=t[0],r=t[1];return e.map(function(t){if(t instanceof a.OutlineTag)return new a.OutlineRenderTag(t,r);if(t instanceof a.SpotTag)return new a.SpotRenderTag(t,r);throw new Error("Tag type not supported")})}).share(),u._tagChanged$=u._tags$.switchMap(function(t){return i.Observable.from(t).mergeMap(function(t){return i.Observable.merge(t.changed$,t.geometryChanged$)})}).share(),u._renderTagGLChanged$=u._renderTags$.switchMap(function(t){return i.Observable.from(t).mergeMap(function(t){return t.glObjectsChanged$})}).share(),u._tagInterationInitiated$=u._renderTags$.switchMap(function(t){return i.Observable.from(t).mergeMap(function(t){return t.interact$.map(function(t){return t.tag.id})})}).share(),u._tagInteractionAbort$=i.Observable.merge(u._container.mouseService.documentMouseUp$).map(function(t){}).share(),u._activeTag$=u._renderTags$.switchMap(function(t){return i.Observable.from(t).mergeMap(function(t){return t.interact$})}).merge(u._tagInteractionAbort$.map(function(){return{offsetX:0,offsetY:0,operation:a.TagOperation.None,tag:null}})).share(),u._createGeometryChanged$=u._tagCreator.tag$.switchMap(function(t){return null!=t?t.geometryChanged$:i.Observable.empty()}).share(),u._tagCreated$=u._tagCreator.tag$.switchMap(function(t){return null!=t?t.created$:i.Observable.empty()}).share(),u._vertexGeometryCreated$=u._tagCreated$.map(function(t){return t.geometry}).share(),u._pointGeometryCreated$=new o.Subject,u._geometryCreated$=i.Observable.merge(u._vertexGeometryCreated$,u._pointGeometryCreated$).share(),u._basicClick$=u._container.mouseService.staticClick$.withLatestFrom(u._container.renderService.renderCamera$,u._navigator.stateService.currentTransform$,function(t,e,r){return[t,e,r]}).map(function(t){var e=t[0],r=t[1],n=t[2];return u._mouseEventToBasic(e,u._container.element,r,n)}).share(),u._validBasicClick$=u._basicClick$.filter(function(t){var e=t[0],r=t[1];return 0<=e&&e<=1&&0<=r&&r<=1}).share(),u._creatingConfiguration$=u._configuration$.distinctUntilChanged(function(t,e){return t.creating===e.creating&&t.createType===e.createType},function(t){return{createColor:t.createColor,createType:t.createType,creating:t.creating}}).publishReplay(1).refCount(),u._creating$=u._creatingConfiguration$.map(function(t){return t.creating}).publishReplay(1).refCount(),u._creating$.subscribe(function(t){u.fire(e.creatingchanged,t)}),u}return n(e,t),Object.defineProperty(e.prototype,"tags$",{get:function(){return this._tags$},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"geometryCreated$",{get:function(){return this._geometryCreated$},enumerable:!0,configurable:!0}),e.prototype.setTags=function(t){this._tagSet.set$.next(t)},e.prototype.startCreate=function(t){this.configure({createType:t,creating:!0})},e.prototype.stopCreate=function(){this.configure({createType:null,creating:!1})},e.prototype._activate=function(){var t=this;this._preventDefaultSubscription=i.Observable.merge(this._container.mouseService.documentCanvasMouseDown$,this._container.mouseService.documentCanvasMouseMove$).subscribe(function(t){t.preventDefault()}),this._geometryCreatedEventSubscription=this._geometryCreated$.subscribe(function(r){t.fire(e.geometrycreated,r)}),this._tagsChangedEventSubscription=this._tags$.subscribe(function(r){t.fire(e.tagschanged,r)});var r=this.configuration$.switchMap(function(e){return e.creating?t._navigator.stateService.currentNode$.skip(1).take(1).map(function(t){return null}):i.Observable.empty()}),n=this._tagCreator.tag$.switchMap(function(t){return null!=t?t.aborted$.map(function(t){return null}):i.Observable.empty()}),o=this._tagCreated$.map(function(t){return null}),s=this._pointGeometryCreated$.map(function(t){return null});this._stopCreateSubscription=i.Observable.merge(r,n,o,s).subscribe(function(){t.stopCreate()}),this._creatorConfigurationSubscription=this._configuration$.subscribe(this._tagCreator.configuration$),this._createSubscription=this._creatingConfiguration$.switchMap(function(e){return e.creating&&"rect"===e.createType||"polygon"===e.createType?t._validBasicClick$.take(1):i.Observable.empty()}).subscribe(this._tagCreator.create$),this._createPointSubscription=this._creatingConfiguration$.switchMap(function(e){return e.creating&&"point"===e.createType?t._validBasicClick$.take(1):i.Observable.empty()}).map(function(t){return new a.PointGeometry(t)}).subscribe(this._pointGeometryCreated$),this._setCreateVertexSubscription=i.Observable.combineLatest(this._container.mouseService.documentCanvasMouseMove$,this._tagCreator.tag$,this._container.renderService.renderCamera$).filter(function(t){return null!=t[1]}).withLatestFrom(this._navigator.stateService.currentTransform$,function(t,e){return[t[0],t[1],t[2],e]}).subscribe(function(e){var r=e[0],n=e[1],i=e[2],o=e[3],s=t._mouseEventToBasic(r,t._container.element,i,o);n.geometry instanceof a.RectGeometry?n.geometry.setVertex2d(3,s,o):n.geometry instanceof a.PolygonGeometry&&n.geometry.setVertex2d(n.geometry.polygon.length-2,s,o)}),this._addPointSubscription=this._creatingConfiguration$.switchMap(function(e){var r=e.createType;return!e.creating||"rect"!==r&&"polygon"!==r?i.Observable.empty():t._basicClick$.skipUntil(t._validBasicClick$).skip(1)}).withLatestFrom(this._tagCreator.tag$,function(t,e){return[t,e]}).subscribe(function(t){var e=t[0];t[1].addPoint(e)}),this._containerClassListSubscription=this._creating$.subscribe(function(e){e?t._container.element.classList.add("component-tag-create"):t._container.element.classList.remove("component-tag-create")}),this._deleteCreatedSubscription=this._creating$.subscribe(function(e){t._tagCreator.delete$.next(null)}),this._setGLCreateTagSubscription=i.Observable.merge(this._tagCreator.tag$,this._createGeometryChanged$).withLatestFrom(this._navigator.stateService.currentTransform$,function(t,e){return[t,e]}).map(function(t){return function(e){var r=t[0],n=t[1];return null==r?e.removeCreateTag():e.setCreateTag(r,n),e}}).subscribe(this._tagGlRendererOperation$),this._claimMouseSubscription=this._tagInterationInitiated$.switchMap(function(e){return t._container.mouseService.documentCanvasMouseMove$.takeUntil(t._tagInteractionAbort$).take(1)}).subscribe(function(e){t._container.mouseService.claimMouse(t._name,1)}),this._mouseDragSubscription=this._activeTag$.withLatestFrom(this._container.mouseService.documentCanvasMouseMove$,function(t,e){return[t,e]}).switchMap(function(e){var r=e[0],n=e[1];if(r.operation===a.TagOperation.None)return i.Observable.empty();var o=i.Observable.of(n).concat(t._container.mouseService.filtered$(t._name,t._container.mouseService.documentCanvasMouseDrag$));return i.Observable.combineLatest(o,t._container.renderService.renderCamera$).withLatestFrom(i.Observable.of(r),t._navigator.stateService.currentTransform$,function(t,e,r){return[t[0],t[1],e,r]})}).subscribe(function(e){var r=e[0],n=e[1],i=e[2],o=e[3];if(i.operation!==a.TagOperation.None){var s=t._mouseEventToBasic(r,t._container.element,n,o,i.offsetX,i.offsetY);if(i.operation===a.TagOperation.Centroid)i.tag.geometry.setCentroid2d(s,o);else if(i.operation===a.TagOperation.Vertex){var c=i.tag.geometry;c.setVertex2d(i.vertexIndex,s,o)}}}),this._unclaimMouseSubscription=this._container.mouseService.filtered$(this._name,this._container.mouseService.documentCanvasMouseDragEnd$).subscribe(function(e){t._container.mouseService.unclaimMouse(t._name)}),this._setTagsSubscription=this._renderTags$.map(function(t){return function(e){return e.setTags(t),e}}).subscribe(this._tagGlRendererOperation$),this._updateGLTagSubscription=this._renderTagGLChanged$.map(function(t){return function(e){return e.updateTag(t),e}}).subscribe(this._tagGlRendererOperation$),this._setNeedsRenderSubscription=this._tagChanged$.map(function(t){return function(t){return t.setNeedsRender(),t}}).subscribe(this._tagGlRendererOperation$),this._domSubscription=this._renderTags$.startWith([]).do(function(e){t._container.domRenderer.render$.next({name:t._name,vnode:t._tagDomRenderer.clear()})}).combineLatest(this._container.renderService.renderCamera$,this._container.spriteService.spriteAtlas$,this._tagChanged$.startWith(null),this._tagCreator.tag$.merge(this._createGeometryChanged$).startWith(null),function(t,e,r,n,i){return[e,r,t,n,i]}).withLatestFrom(this._navigator.stateService.currentTransform$,function(t,e){return[t[0],t[1],t[2],t[3],t[4],e]}).map(function(e){return{name:t._name,vnode:t._tagDomRenderer.render(e[2],e[4],e[1],e[0].perspective,e[5])}}).subscribe(this._container.domRenderer.render$),this._glSubscription=this._navigator.stateService.currentState$.withLatestFrom(this._tagGlRenderer$,function(t,e){return[t,e]}).map(function(e){var r=e[0],n=e[1];return{name:t._name,render:{frameId:r.id,needsRender:n.needsRender,render:n.render.bind(n),stage:c.GLRenderStage.Foreground}}}).subscribe(this._container.glRenderer.render$)},e.prototype._deactivate=function(){this._tagGlRendererOperation$.next(function(t){return t.dispose(),t}),this._tagSet.set$.next([]),this._tagCreator.delete$.next(null),this._claimMouseSubscription.unsubscribe(),this._mouseDragSubscription.unsubscribe(),this._unclaimMouseSubscription.unsubscribe(),this._setTagsSubscription.unsubscribe(),this._updateGLTagSubscription.unsubscribe(),this._setNeedsRenderSubscription.unsubscribe(),this._stopCreateSubscription.unsubscribe(),this._creatorConfigurationSubscription.unsubscribe(),this._createSubscription.unsubscribe(),this._createPointSubscription.unsubscribe(),this._setCreateVertexSubscription.unsubscribe(),this._addPointSubscription.unsubscribe(),this._deleteCreatedSubscription.unsubscribe(),this._setGLCreateTagSubscription.unsubscribe(),this._preventDefaultSubscription.unsubscribe(),this._containerClassListSubscription.unsubscribe(),this._domSubscription.unsubscribe(),this._glSubscription.unsubscribe(),this._geometryCreatedEventSubscription.unsubscribe(),this._tagsChangedEventSubscription.unsubscribe()},e.prototype._getDefaultConfiguration=function(){return{createColor:16777215,creating:!1}},e.prototype._mouseEventToBasic=function(t,e,r,n,i,o){i=null!=i?i:0,o=null!=o?o:0;var a=this._viewportCoords.canvasPosition(t,e),s=a[0],c=a[1];return this._viewportCoords.canvasToBasic(s-i,c-o,e,n,r.perspective)},e}(a.Component);u.componentName="tag",u.creatingchanged="creatingchanged",u.geometrycreated="geometrycreated",u.tagschanged="tagschanged",r.TagComponent=u,a.ComponentService.register(u),Object.defineProperty(r,"__esModule",{value:!0}),r.default=u},{"../../Component":225,"../../Geo":228,"../../Render":231,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/observable/empty":39,"rxjs/add/observable/from":40,"rxjs/add/observable/merge":43,"rxjs/add/observable/of":44,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/concat":53,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/skip":74,"rxjs/add/operator/skipUntil":75,"rxjs/add/operator/startWith":77,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/take":79,"rxjs/add/operator/takeUntil":80,"rxjs/add/operator/withLatestFrom":82}],279:[function(t,e,r){"use strict";var n=t("rxjs/Subject");t("rxjs/add/operator/map"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/share"),t("rxjs/add/operator/withLatestFrom");var i=t("../../Component"),o=function(){function t(){this._tagOperation$=new n.Subject,this._create$=new n.Subject,this._delete$=new n.Subject,this._configuration$=new n.Subject,this._tag$=this._tagOperation$.scan(function(t,e){return e(t)},null).share(),this._create$.withLatestFrom(this._configuration$,function(t,e){return[t,e]}).map(function(t){return function(e){var r=t[0],n=t[1];if("rect"===n.createType){var o=new i.RectGeometry([r[0],r[1],r[0],r[1]]);return new i.OutlineCreateTag(o,{color:n.createColor})}if("polygon"===n.createType){var o=new i.PolygonGeometry([[r[0],r[1]],[r[0],r[1]],[r[0],r[1]]]);return new i.OutlineCreateTag(o,{color:n.createColor})}return null}}).subscribe(this._tagOperation$),this._delete$.map(function(){return function(t){return null}}).subscribe(this._tagOperation$)}return Object.defineProperty(t.prototype,"create$",{get:function(){return this._create$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"delete$",{get:function(){return this._delete$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"configuration$",{get:function(){return this._configuration$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"tag$",{get:function(){return this._tag$},enumerable:!0,configurable:!0}),t}();r.TagCreator=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../../Component":225,"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/withLatestFrom":82}],280:[function(t,e,r){"use strict";var n=t("three"),i=t("virtual-dom"),o=function(){function t(){}return t.prototype.render=function(t,e,r,o,a){for(var s=(new n.Matrix4).getInverse(o.matrixWorld),c=o.projectionMatrix,u=[],h=0,l=t;h<l.length;h++){var p=l[h];u=u.concat(p.getDOMObjects(r,s,c))}return null!=e&&(u=u.concat(e.getDOMObjects(a,s,c))),i.h("div.TagContainer",{},u)},t.prototype.clear=function(){return i.h("div",{},[])},t}();r.TagDOMRenderer=o},{three:175,"virtual-dom":181}],281:[function(t,e,r){"use strict";var n=t("three"),i=function(){function t(){this._scene=new n.Scene,this._tags={},this._createTag=null,this._needsRender=!1}return Object.defineProperty(t.prototype,"needsRender",{get:function(){return this._needsRender},enumerable:!0,configurable:!0}),t.prototype.render=function(t,e){e.render(this._scene,t),this._needsRender=!1},t.prototype.setCreateTag=function(t,e){this._disposeCreateTag(),this._addCreateTag(t,e),this._needsRender=!0},t.prototype.removeCreateTag=function(){this._disposeCreateTag(),this._needsRender=!0},t.prototype.setTags=function(t){this._disposeTags();for(var e=0,r=t;e<r.length;e++){var n=r[e];this._addTag(n)}this._needsRender=!0},t.prototype.updateTag=function(t){for(var e=0,r=this._tags[t.tag.id][1];e<r.length;e++){var n=r[e];this._scene.remove(n)}this._addTag(t)},t.prototype.setNeedsRender=function(){this._needsRender=!0},t.prototype.dispose=function(){this._disposeTags(),this._disposeCreateTag(),this._needsRender=!1},t.prototype._addTag=function(t){var e=t.glObjects;this._tags[t.tag.id]=[t,[]];for(var r=0,n=e;r<n.length;r++){var i=n[r];this._tags[t.tag.id][1].push(i),this._scene.add(i)}},t.prototype._addCreateTag=function(t,e){var r=t.getGLObject(e);this._createTag=r,this._scene.add(r)},t.prototype._disposeTags=function(){for(var t=0,e=Object.keys(this._tags);t<e.length;t++){for(var r=e[t],n=0,i=this._tags[r][1];n<i.length;n++){var o=i[n];this._scene.remove(o)}this._tags[r][0].dispose(),delete this._tags[r]}},t.prototype._disposeCreateTag=function(){if(null!=this._createTag){var t=this._createTag;this._scene.remove(t),t.geometry.dispose(),t.material.dispose(),this._createTag=null}},t}();r.TagGLRenderer=i},{three:175}],282:[function(t,e,r){"use strict";var n;!function(t){t[t.None=0]="None",t[t.Centroid=1]="Centroid",t[t.Vertex=2]="Vertex"}(n=r.TagOperation||(r.TagOperation={})),Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],283:[function(t,e,r){"use strict";var n=t("rxjs/Subject");t("rxjs/add/operator/map"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/share");var i=function(){function t(){this._tagDataOperation$=new n.Subject,this._set$=new n.Subject,this._tagData$=this._tagDataOperation$.scan(function(t,e){return e(t)},{}).share(),this._set$.map(function(t){return function(e){for(var r=0,n=Object.keys(e);r<n.length;r++){delete e[n[r]]}for(var i=0,o=t;i<o.length;i++){var a=o[i];e[a.id]=a}return e}}).subscribe(this._tagDataOperation$)}return Object.defineProperty(t.prototype,"tagData$",{get:function(){return this._tagData$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"set$",{get:function(){return this._set$},enumerable:!0,configurable:!0}),t}();r.TagSet=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73}],284:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../../../Error"),o=function(t){function e(e){var r=t.call(this,null!=e?e:"The provided geometry value is incorrect")||this;return r.name="GeometryTagError",r}return n(e,t),e}(i.MapillaryError);r.GeometryTagError=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i.MapillaryError},{"../../../Error":227}],285:[function(t,e,r){"use strict";var n=t("rxjs/Subject"),i=function(){function t(){this._notifyChanged$=new n.Subject}return Object.defineProperty(t.prototype,"changed$",{get:function(){return this._notifyChanged$},enumerable:!0,configurable:!0}),t}();r.Geometry=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{"rxjs/Subject":33}],286:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../../../Component"),o=function(t){function e(e){var r=t.call(this)||this,n=e[0],o=e[1];if(n<0||n>1||o<0||o>1)throw new i.GeometryTagError("Basic coordinates must be on the interval [0, 1].");return r._point=e.slice(),r}return n(e,t),Object.defineProperty(e.prototype,"point",{get:function(){return this._point},enumerable:!0,configurable:!0}),e.prototype.getCentroid3d=function(t){return t.unprojectBasic(this._point,200)},e.prototype.setCentroid2d=function(t,e){var r=[Math.max(0,Math.min(1,t[0])),Math.max(0,Math.min(1,t[1]))];this._point[0]=r[0],this._point[1]=r[1],this._notifyChanged$.next(this)},e}(i.Geometry);r.PointGeometry=o},{"../../../Component":225}],287:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../../../Component"),o=function(t){function e(e,r){var n=t.call(this)||this,o=e.length;if(o<3)throw new i.GeometryTagError("A polygon must have three or more positions.");if(e[0][0]!==e[o-1][0]||e[0][1]!==e[o-1][1])throw new i.GeometryTagError("First and last positions must be equivalent.");n._polygon=[];for(var a=0,s=e;a<s.length;a++){var c=s[a];if(c[0]<0||c[0]>1||c[1]<0||c[1]>1)throw new i.GeometryTagError("Basic coordinates of polygon must be on the interval [0, 1].");n._polygon.push(c.slice())}if(n._holes=[],null==r)return n;for(var u=0;u<r.length;u++){var h=r[u],l=h.length;if(l<3)throw new i.GeometryTagError("A polygon hole must have three or more positions.");if(h[0][0]!==h[l-1][0]||h[0][1]!==h[l-1][1])throw new i.GeometryTagError("First and last positions of hole must be equivalent.");n._holes.push([]);for(var p=0,f=h;p<f.length;p++){var c=f[p];if(c[0]<0||c[0]>1||c[1]<0||c[1]>1)throw new i.GeometryTagError("Basic coordinates of hole must be on the interval [0, 1].");n._holes[u].push(c.slice())}}return n}return n(e,t),Object.defineProperty(e.prototype,"polygon",{get:function(){return this._polygon},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"holes",{get:function(){return this._holes},enumerable:!0,
+configurable:!0}),e.prototype.addVertex2d=function(t){var e=[Math.max(0,Math.min(1,t[0])),Math.max(0,Math.min(1,t[1]))];this._polygon.splice(this._polygon.length-1,0,e),this._notifyChanged$.next(this)},e.prototype.removeVertex2d=function(t){if(t<0||t>=this._polygon.length||this._polygon.length<4)throw new i.GeometryTagError("Index for removed vertex must be valid.");if(t>0&&t<this._polygon.length-1)this._polygon.splice(t,1);else{this._polygon.splice(0,1),this._polygon.pop();var e=this._polygon[0].slice();this._polygon.push(e)}this._notifyChanged$.next(this)},e.prototype.setVertex2d=function(t,e,r){var n=[Math.max(0,Math.min(1,e[0])),Math.max(0,Math.min(1,e[1]))];0===t||t===this._polygon.length-1?(this._polygon[0]=n.slice(),this._polygon[this._polygon.length-1]=n.slice()):this._polygon[t]=n.slice(),this._notifyChanged$.next(this)},e.prototype.setCentroid2d=function(t,e){for(var r=this._polygon.map(function(t){return t[0]}),n=this._polygon.map(function(t){return t[1]}),i=Math.min.apply(Math,r),o=Math.max.apply(Math,r),a=Math.min.apply(Math,n),s=Math.max.apply(Math,n),c=this._getCentroid2d(),u=-i,h=1-o,l=-a,p=1-s,f=Math.max(u,Math.min(h,t[0]-c[0])),d=Math.max(l,Math.min(p,t[1]-c[1])),m=0,v=this._polygon;m<v.length;m++){var g=v[m];g[0]+=f,g[1]+=d}this._notifyChanged$.next(this)},e.prototype.getPoints3d=function(t){return this.getVertices3d(t)},e.prototype.getVertex3d=function(t,e){return e.unprojectBasic(this._polygon[t],200)},e.prototype.getVertices3d=function(t){return this._polygon.map(function(e){return t.unprojectBasic(e,200)})},e.prototype.getHoleVertices3d=function(t){for(var e=[],r=0,n=this._holes;r<n.length;r++){var i=n[r],o=i.map(function(e){return t.unprojectBasic(e,200)});e.push(o)}return e},e.prototype.getCentroid3d=function(t){var e=this._getCentroid2d();return t.unprojectBasic(e,200)},e.prototype.getTriangles3d=function(t){return this._triangulate(this._polygon,this.getPoints3d(t),this._holes,this.getHoleVertices3d(t))},e.prototype._getCentroid2d=function(){for(var t=this._polygon,e=0,r=0,n=0,i=0;i<t.length-1;i++){var o=t[i][0],a=t[i][1],s=t[i+1][0],c=t[i+1][1],u=o*c-s*a;e+=u,r+=(o+s)*u,n+=(a+c)*u}return e/=2,r/=6*e,n/=6*e,[r,n]},e}(i.VertexGeometry);r.PolygonGeometry=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../../../Component":225}],288:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../../../Component"),o=function(t){function e(e){var r=t.call(this)||this;if(e[1]>e[3])throw new i.GeometryTagError("Basic Y coordinates values can not be inverted.");for(var n=0,o=e;n<o.length;n++){var a=o[n];if(a<0||a>1)throw new i.GeometryTagError("Basic coordinates must be on the interval [0, 1].")}return r._rect=e.slice(0,4),r._rect[0]>r._rect[2]&&(r._inverted=!0),r}return n(e,t),Object.defineProperty(e.prototype,"rect",{get:function(){return this._rect},enumerable:!0,configurable:!0}),e.prototype.setVertex2d=function(t,e,r){var n=this._rect.slice(),i=[Math.max(0,Math.min(1,e[0])),Math.max(0,Math.min(1,e[1]))],o=[];if(0===t?(o[0]=i[0],o[1]=n[1],o[2]=n[2],o[3]=i[1]):1===t?(o[0]=i[0],o[1]=i[1],o[2]=n[2],o[3]=n[3]):2===t?(o[0]=n[0],o[1]=i[1],o[2]=i[0],o[3]=n[3]):3===t&&(o[0]=n[0],o[1]=n[1],o[2]=i[0],o[3]=i[1]),r.gpano){var a=t<2&&i[0]>.75&&n[0]<.25||t>=2&&this._inverted&&i[0]>.75&&n[2]<.25,s=t<2&&this._inverted&&i[0]<.25&&n[0]>.75||t>=2&&i[0]<.25&&n[2]>.75;a||s?this._inverted=!this._inverted:(o[0]-n[0]<-.25&&(o[0]=n[0]),o[2]-n[2]>.25&&(o[2]=n[2])),(!this._inverted&&o[0]>o[2]||this._inverted&&o[0]<o[2])&&(o[0]=n[0],o[2]=n[2])}else o[0]>o[2]&&(o[0]=n[0],o[2]=n[2]);o[1]>o[3]&&(o[1]=n[1],o[3]=n[3]),this._rect[0]=o[0],this._rect[1]=o[1],this._rect[2]=o[2],this._rect[3]=o[3],this._notifyChanged$.next(this)},e.prototype.setCentroid2d=function(t,e){var r=this._rect.slice(),n=r[0],i=this._inverted?r[2]+1:r[2],o=r[1],a=r[3],s=n+(i-n)/2,c=o+(a-o)/2,u=0;if(null!=e.gpano&&e.gpano.CroppedAreaImageWidthPixels===e.gpano.FullPanoWidthPixels)u=this._inverted?t[0]+1-s:t[0]-s;else{var h=-n,l=1-i;u=Math.max(h,Math.min(l,t[0]-s))}var p=-o,f=1-a,d=Math.max(p,Math.min(f,t[1]-c));this._rect[0]=r[0]+u,this._rect[1]=r[1]+d,this._rect[2]=r[2]+u,this._rect[3]=r[3]+d,this._rect[0]<0?(this._rect[0]+=1,this._inverted=!this._inverted):this._rect[0]>1&&(this._rect[0]-=1,this._inverted=!this._inverted),this._rect[2]<0?(this._rect[2]+=1,this._inverted=!this._inverted):this._rect[2]>1&&(this._rect[2]-=1,this._inverted=!this._inverted),this._notifyChanged$.next(this)},e.prototype.getPoints3d=function(t){return this._getPoints2d(t).map(function(e){return t.unprojectBasic(e,200)})},e.prototype.getVertex3d=function(t,e){return e.unprojectBasic(this._rectToVertices2d(this._rect)[t],200)},e.prototype.getVertices3d=function(t){return this._rectToVertices2d(this._rect).map(function(e){return t.unprojectBasic(e,200)})},e.prototype.getCentroid3d=function(t){var e=this._rect,r=e[0],n=this._inverted?e[2]+1:e[2],i=e[1],o=e[3],a=r+(n-r)/2,s=i+(o-i)/2;return t.unprojectBasic([a,s],200)},e.prototype.getTriangles3d=function(t){return this._triangulate(this._rectToVertices2d(this._rect),this.getVertices3d(t))},e.prototype.validate=function(t){var e=this._rect;return!(!this._inverted&&t[0]<e[0]||t[0]-e[2]>.25||t[1]<e[1])},e.prototype._getPoints2d=function(t){for(var e=this._rectToVertices2d(this._rect),r=e.length-1,n=[],i=0;i<r;++i)for(var o=e[i][0],a=e[i][1],s=e[i+1][0],c=e[i+1][1],u=(s-o)/9,h=(c-a)/9,l=0;l<10;++l){var p=[o+l*u,a+l*h];n.push(p)}return n},e.prototype._rectToVertices2d=function(t){return[[t[0],t[3]],[t[0],t[1]],[this._inverted?t[2]+1:t[2],t[1]],[this._inverted?t[2]+1:t[2],t[3]],[t[0],t[3]]]},e}(i.VertexGeometry);r.RectGeometry=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../../../Component":225}],289:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("earcut"),o=t("../../../Component"),a=function(t){function e(){return t.call(this)||this}return n(e,t),e.prototype._triangulate=function(t,e,r,n){for(var o=[t.slice(0,-1)],a=0,s=null!=r?r:[];a<s.length;a++){var c=s[a];o.push(c.slice(0,-1))}for(var u=e.slice(0,-1),h=0,l=null!=n?n:[];h<l.length;h++){var p=l[h];u=u.concat(p.slice(0,-1))}for(var f=i.flatten(o),d=i(f.vertices,f.holes,f.dimensions),m=[],v=0;v<d.length;++v){var g=u[d[v]];m.push(g[0]),m.push(g[1]),m.push(g[2])}return m},e}(o.Geometry);r.VertexGeometry=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../../../Component":225,earcut:6}],290:[function(t,e,r){"use strict";var n;!function(t){t[t.Center=0]="Center",t[t.Outer=1]="Outer"}(n=r.Alignment||(r.Alignment={})),Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],291:[function(t,e,r){"use strict";var n=t("three"),i=t("virtual-dom"),o=t("rxjs/Subject"),a=t("../../../Component"),s=function(){function t(t,e){this._geometry=t,this._options={color:null==e.color?16777215:e.color},this._created$=new o.Subject,this._aborted$=new o.Subject}return Object.defineProperty(t.prototype,"geometry",{get:function(){return this._geometry},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"created$",{get:function(){return this._created$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"aborted$",{get:function(){return this._aborted$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"geometryChanged$",{get:function(){var t=this;return this._geometry.changed$.map(function(e){return t})},enumerable:!0,configurable:!0}),t.prototype.getGLObject=function(t){var e=this._geometry.getPoints3d(t),r=this._getPositions(e),i=new n.BufferGeometry;i.addAttribute("position",new n.BufferAttribute(r,3));var o=new n.LineBasicMaterial({color:this._options.color,linewidth:1});return new n.Line(i,o)},t.prototype.getDOMObjects=function(t,e,r){var n=this,o=[],s=function(t){t.stopPropagation(),n._aborted$.next(n)};if(this._geometry instanceof a.RectGeometry){var c=this._geometry.getVertex3d(1,t),u=this._convertToCameraSpace(c,e);if(u.z<0){var h=this._projectToCanvas(u,r),l=h.map(function(t){return 100*t+"%"}),p={style:{background:"#"+("000000"+this._options.color.toString(16)).substr(-6),left:l[0],position:"absolute",top:l[1]}},f={onclick:s,style:{left:l[0],position:"absolute",top:l[1]}};o.push(i.h("div.TagInteractor",f,[])),o.push(i.h("div.TagVertex",p,[]))}}else if(this._geometry instanceof a.PolygonGeometry){var d=this._geometry,m=this._geometry.getVertex3d(0,t),v=this._convertToCameraSpace(m,e);if(v.z<0){var h=this._projectToCanvas(v,r),l=h.map(function(t){return 100*t+"%"}),g=d.polygon.length>4?function(t){t.stopPropagation(),d.removeVertex2d(d.polygon.length-2),n._created$.next(n)}:s,f={onclick:g,style:{left:l[0],position:"absolute",top:l[1]}},y=d.polygon.length>4?"TagCompleter":"TagInteractor";o.push(i.h("div."+y,f,[]))}if(d.polygon.length>3){var b=this._geometry.getVertex3d(d.polygon.length-3,t),_=this._convertToCameraSpace(b,e);if(_.z<0){var h=this._projectToCanvas(_,r),l=h.map(function(t){return 100*t+"%"}),x=function(t){t.stopPropagation(),d.removeVertex2d(d.polygon.length-3)},f={onclick:x,style:{left:l[0],position:"absolute",top:l[1]}};o.push(i.h("div.TagInteractor",f,[]))}}var w=this._geometry.getVertices3d(t);w.splice(-2,2);for(var S=0,M=w;S<M.length;S++){var E=M[S],T=this._convertToCameraSpace(E,e);if(T.z<0){var h=this._projectToCanvas(T,r),l=h.map(function(t){return 100*t+"%"}),p={style:{background:"#"+("000000"+this._options.color.toString(16)).substr(-6),left:l[0],position:"absolute",top:l[1]}};o.push(i.h("div.TagVertex",p,[]))}}}return o},t.prototype.addPoint=function(t){if(this._geometry instanceof a.RectGeometry){if(!this._geometry.validate(t))return;this._created$.next(this)}else if(this._geometry instanceof a.PolygonGeometry){var e=this._geometry;e.addVertex2d(t)}},t.prototype._getPositions=function(t){for(var e=t.length,r=new Float32Array(3*e),n=0;n<e;++n){var i=3*n,o=t[n];r[i]=o[0],r[i+1]=o[1],r[i+2]=o[2]}return r},t.prototype._projectToCanvas=function(t,e){var r=new n.Vector3(t.x,t.y,t.z).applyProjection(e);return[(r.x+1)/2,(1-r.y)/2]},t.prototype._convertToCameraSpace=function(t,e){return new n.Vector3(t[0],t[1],t[2]).applyMatrix4(e)},t}();r.OutlineCreateTag=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../../../Component":225,"rxjs/Subject":33,three:175,"virtual-dom":181}],292:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("three"),o=t("virtual-dom"),a=t("../../../Component"),s=t("../../../Viewer"),c=function(t){function e(e,r){var n=t.call(this,e,r)||this;return n._fill=n._tag.fillOpacity>0&&!r.gpano?n._createFill():null,n._holes=n._tag.lineWidth>=1?n._createHoles():[],n._outline=n._tag.lineWidth>=1?n._createOutline():null,n._glObjects=n._createGLObjects(),n._tag.geometry.changed$.subscribe(function(t){null!=n._fill&&n._updateFillGeometry(),n._holes.length>0&&n._updateHoleGeometries(),null!=n._outline&&n._updateOulineGeometry()}),n._tag.changed$.subscribe(function(t){var e=!1;null==n._fill?n._tag.fillOpacity>0&&!n._transform.gpano&&(n._fill=n._createFill(),e=!0):n._updateFillMaterial(),null==n._outline?n._tag.lineWidth>0&&(n._holes=n._createHoles(),n._outline=n._createOutline(),e=!0):(n._updateHoleMaterials(),n._updateOutlineMaterial()),e&&(n._glObjects=n._createGLObjects(),n._glObjectsChanged$.next(n))}),n}return n(e,t),e.prototype.dispose=function(){this._disposeFill(),this._disposeHoles(),this._disposeOutline()},e.prototype.getDOMObjects=function(t,e,r){var n=this,i=[];if(this._tag.geometry instanceof a.RectGeometry)if(null!=this._tag.icon){var s=this._tag.geometry.getVertex3d(this._tag.iconIndex,this._transform),c=this._convertToCameraSpace(s,e);if(c.z<0){var u=function(t){n._interact$.next({offsetX:0,offsetY:0,operation:a.TagOperation.None,tag:n._tag})};if(t.loaded){var h=this._getSpriteAlignment(this._tag.iconIndex,this._tag.iconAlignment),l=t.getDOMSprite(this._tag.icon,h[0],h[1]),p=function(t){t.stopPropagation(),n._tag.click$.next(n._tag)},f=this._projectToCanvas(c,r),d=f.map(function(t){return 100*t+"%"}),m={onclick:p,onmousedown:u,style:{left:d[0],pointerEvents:"all",position:"absolute",top:d[1]}};i.push(o.h("div.TagSymbol",m,[l]))}}}else if(null!=this._tag.text){var v=this._tag.geometry.getVertex3d(3,this._transform),g=this._convertToCameraSpace(v,e);if(g.z<0){var u=function(t){n._interact$.next({offsetX:0,offsetY:0,operation:a.TagOperation.None,tag:n._tag})},y=this._projectToCanvas(g,r),b=y.map(function(t){return 100*t+"%"}),m={onmousedown:u,style:{color:"#"+("000000"+this._tag.textColor.toString(16)).substr(-6),left:b[0],pointerEvents:"all",position:"absolute",top:b[1]},textContent:this._tag.text};i.push(o.h("span.TagSymbol",m,[]))}}if(!this._tag.editable)return i;var _="#"+("000000"+this._tag.lineColor.toString(16)).substr(-6);if(this._tag.geometry instanceof a.RectGeometry){var x=this._tag.geometry.getCentroid3d(this._transform),w=this._convertToCameraSpace(x,e);if(w.z<0){var u=this._interact(a.TagOperation.Centroid),S=this._projectToCanvas(w,r),M=S.map(function(t){return 100*t+"%"}),m={onmousedown:u,style:{background:_,left:M[0],position:"absolute",top:M[1]}};i.push(o.h("div.TagMover",m,[]))}}for(var E=this._tag.geometry.getVertices3d(this._transform),T=0;T<E.length-1;T++){var C=this._tag.geometry instanceof a.RectGeometry;if(!C||!(null!=this._tag.icon&&T===this._tag.iconIndex||null==this._tag.icon&&null!=this._tag.text&&3===T)){var O=this._convertToCameraSpace(E[T],e);if(!(O.z>0)){var u=this._interact(a.TagOperation.Vertex,T),P=this._projectToCanvas(O,r),A=P.map(function(t){return 100*t+"%"}),m={onmousedown:u,style:{background:_,left:A[0],position:"absolute",top:A[1]}};if(C&&(m.style.cursor=T%2==0?"nesw-resize":"nwse-resize"),i.push(o.h("div.TagResizer",m,[])),this._tag.indicateVertices){var j={style:{background:_,left:A[0],position:"absolute",top:A[1]}};i.push(o.h("div.TagVertex",j,[]))}}}}return i},e.prototype._createFill=function(){var t=this._tag.geometry.getTriangles3d(this._transform),e=new Float32Array(t),r=new i.BufferGeometry;r.addAttribute("position",new i.BufferAttribute(e,3)),r.computeBoundingSphere();var n=new i.MeshBasicMaterial({color:this._tag.fillColor,opacity:this._tag.fillOpacity,side:i.DoubleSide,transparent:!0});return new i.Mesh(r,n)},e.prototype._createGLObjects=function(){var t=[];null!=this._fill&&t.push(this._fill);for(var e=0,r=this._holes;e<r.length;e++){var n=r[e];t.push(n)}return null!=this._outline&&t.push(this._outline),t},e.prototype._createHoles=function(){var t=[];if(this._tag.geometry instanceof a.PolygonGeometry)for(var e=this._tag.geometry,r=e.getHoleVertices3d(this._transform),n=0,i=r;n<i.length;n++){var o=i[n],s=this._createLine(o);t.push(s)}return t},e.prototype._createLine=function(t){var e=this._getLinePositions(t),r=new i.BufferGeometry;r.addAttribute("position",new i.BufferAttribute(e,3)),r.computeBoundingSphere();var n=new i.LineBasicMaterial({color:this._tag.lineColor,linewidth:this._tag.lineWidth});return new i.Line(r,n)},e.prototype._createOutline=function(){var t=this._tag.geometry.getPoints3d(this._transform);return this._createLine(t)},e.prototype._disposeFill=function(){null!=this._fill&&(this._fill.geometry.dispose(),this._fill.material.dispose(),this._fill=null)},e.prototype._disposeHoles=function(){for(var t=0,e=this._holes;t<e.length;t++){var r=e[t];r.geometry.dispose(),r.material.dispose()}this._holes=[]},e.prototype._disposeOutline=function(){null!=this._outline&&(this._outline.geometry.dispose(),this._outline.material.dispose(),this._outline=null)},e.prototype._getLinePositions=function(t){for(var e=t.length,r=new Float32Array(3*e),n=0;n<e;++n){var i=3*n,o=t[n];r[i+0]=o[0],r[i+1]=o[1],r[i+2]=o[2]}return r},e.prototype._getSpriteAlignment=function(t,e){var r=s.SpriteAlignment.Center,n=s.SpriteAlignment.Center;if(e===a.Alignment.Outer)switch(t){case 0:r=s.SpriteAlignment.End,n=s.SpriteAlignment.Start;break;case 1:r=s.SpriteAlignment.End,n=s.SpriteAlignment.End;break;case 2:r=s.SpriteAlignment.Start,n=s.SpriteAlignment.End;break;case 3:r=s.SpriteAlignment.Start,n=s.SpriteAlignment.Start}return[r,n]},e.prototype._interact=function(t,e){var r=this;return function(n){var i=n.offsetX-n.target.offsetWidth/2,o=n.offsetY-n.target.offsetHeight/2;r._interact$.next({offsetX:i,offsetY:o,operation:t,tag:r._tag,vertexIndex:e})}},e.prototype._updateFillGeometry=function(){var t=this._tag.geometry.getTriangles3d(this._transform),e=new Float32Array(t),r=this._fill.geometry,n=r.getAttribute("position");n.array.length===e.length?(n.set(e),n.needsUpdate=!0):(r.removeAttribute("position"),r.addAttribute("position",new i.BufferAttribute(e,3))),r.computeBoundingSphere()},e.prototype._updateFillMaterial=function(){var t=this._fill.material;t.color=new i.Color(this._tag.fillColor),t.opacity=this._tag.fillOpacity,t.needsUpdate=!0},e.prototype._updateHoleGeometries=function(){var t=this._tag.geometry,e=t.getHoleVertices3d(this._transform);if(e.length!==this._holes.length)throw new Error("Changing the number of holes is not supported.");for(var r=0;r<this._holes.length;r++){var n=e[r],i=this._holes[r];this._updateLine(i,n)}},e.prototype._updateHoleMaterials=function(){for(var t=0,e=this._holes;t<e.length;t++){var r=e[t],n=r.material;this._updateLineBasicMaterial(n)}},e.prototype._updateLine=function(t,e){var r=this._getLinePositions(e),n=t.geometry,i=n.getAttribute("position");i.set(r),i.needsUpdate=!0,n.computeBoundingSphere()},e.prototype._updateOulineGeometry=function(){var t=this._tag.geometry.getPoints3d(this._transform);this._updateLine(this._outline,t)},e.prototype._updateOutlineMaterial=function(){var t=this._outline.material;this._updateLineBasicMaterial(t)},e.prototype._updateLineBasicMaterial=function(t){t.color=new i.Color(this._tag.lineColor),t.linewidth=Math.max(this._tag.lineWidth,1),t.opacity=this._tag.lineWidth>=1?1:0,t.transparent=this._tag.lineWidth<=0,t.needsUpdate=!0},e}(a.RenderTag);r.OutlineRenderTag=c},{"../../../Component":225,"../../../Viewer":235,three:175,"virtual-dom":181}],293:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Subject"),o=t("../../../Component"),a=function(t){function e(r,n,a){var s=t.call(this,r,n)||this;return s._editable=null!=a.editable&&a.editable,s._fillColor=null==a.fillColor?16777215:a.fillColor,s._fillOpacity=null==a.fillOpacity?0:a.fillOpacity,s._icon=void 0===a.icon?null:a.icon,s._iconAlignment=null==a.iconAlignment?o.Alignment.Outer:a.iconAlignment,s._iconIndex=null==a.iconIndex?3:a.iconIndex,s._indicateVertices=null==a.indicateVertices||a.indicateVertices,s._lineColor=null==a.lineColor?16777215:a.lineColor,s._lineWidth=null==a.lineWidth?1:a.lineWidth,s._text=void 0===a.text?null:a.text,s._textColor=null==a.textColor?16777215:a.textColor,s._click$=new i.Subject,s._click$.subscribe(function(t){s.fire(e.click,s)}),s}return n(e,t),Object.defineProperty(e.prototype,"click$",{get:function(){return this._click$},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"editable",{get:function(){return this._editable},set:function(t){this._editable=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"fillColor",{get:function(){return this._fillColor},set:function(t){this._fillColor=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"fillOpacity",{get:function(){return this._fillOpacity},set:function(t){this._fillOpacity=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"geometry",{get:function(){return this._geometry},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"icon",{get:function(){return this._icon},set:function(t){this._icon=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"iconAlignment",{get:function(){return this._iconAlignment},set:function(t){this._iconAlignment=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"iconIndex",{get:function(){return this._iconIndex},set:function(t){this._iconIndex=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"indicateVertices",{get:function(){return this._indicateVertices},set:function(t){this._indicateVertices=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"lineColor",{get:function(){return this._lineColor},set:function(t){this._lineColor=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"lineWidth",{get:function(){return this._lineWidth},set:function(t){this._lineWidth=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"text",{get:function(){return this._text},set:function(t){this._text=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"textColor",{get:function(){return this._textColor},set:function(t){this._textColor=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),e.prototype.setOptions=function(t){this._editable=null==t.editable?this._editable:t.editable,this._icon=void 0===t.icon?this._icon:t.icon,this._iconAlignment=null==t.iconAlignment?this._iconAlignment:t.iconAlignment,this._iconIndex=null==t.iconIndex?this._iconIndex:t.iconIndex,this._indicateVertices=null==t.indicateVertices?this._indicateVertices:t.indicateVertices,this._lineColor=null==t.lineColor?this._lineColor:t.lineColor,this._lineWidth=null==t.lineWidth?this._lineWidth:t.lineWidth,this._fillColor=null==t.fillColor?this._fillColor:t.fillColor,this._fillOpacity=null==t.fillOpacity?this._fillOpacity:t.fillOpacity,this._text=void 0===t.text?this._text:t.text,this._textColor=null==t.textColor?this._textColor:t.textColor,this._notifyChanged$.next(this)},e}(o.Tag);a.click="click",r.OutlineTag=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../../../Component":225,"rxjs/Subject":33}],294:[function(t,e,r){"use strict";var n=t("three"),i=t("rxjs/Subject"),o=function(){function t(t,e){this._tag=t,this._transform=e,this._glObjects=[],this._glObjectsChanged$=new i.Subject,this._interact$=new i.Subject}return Object.defineProperty(t.prototype,"glObjects",{get:function(){return this._glObjects},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"glObjectsChanged$",{get:function(){return this._glObjectsChanged$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"interact$",{get:function(){return this._interact$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"tag",{get:function(){return this._tag},enumerable:!0,configurable:!0}),t.prototype._projectToCanvas=function(t,e){var r=new n.Vector3(t.x,t.y,t.z).applyProjection(e);return[(r.x+1)/2,(1-r.y)/2]},t.prototype._convertToCameraSpace=function(t,e){return new n.Vector3(t[0],t[1],t[2]).applyMatrix4(e)},t}();r.RenderTag=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"rxjs/Subject":33,three:175}],295:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("virtual-dom"),o=t("../../../Component"),a=t("../../../Viewer"),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.dispose=function(){},e.prototype.getDOMObjects=function(t,e,r){var n=this,s=[],c=this._tag.geometry.getCentroid3d(this._transform),u=this._convertToCameraSpace(c,e);if(u.z<0){var h=this._projectToCanvas(u,r),l=h.map(function(t){return 100*t+"%"}),p=function(t){n._interact$.next({offsetX:0,offsetY:0,operation:o.TagOperation.None,tag:n._tag})};if(null!=this._tag.icon){if(t.loaded){var f=t.getDOMSprite(this._tag.icon,a.SpriteAlignment.Center,a.SpriteAlignment.End),d={onmousedown:p,style:{bottom:100*(1-h[1])+"%",left:l[0],pointerEvents:"all",position:"absolute",transform:"translate(0px, -8px)"}};s.push(i.h("div",d,[f]))}}else if(null!=this._tag.text){var d={onmousedown:p,style:{bottom:100*(1-h[1])+"%",color:"#"+("000000"+this._tag.textColor.toString(16)).substr(-6),left:l[0],pointerEvents:"all",position:"absolute",transform:"translate(-50%, -7px)"},textContent:this._tag.text};s.push(i.h("span.TagSymbol",d,[]))}var m=this._interact(o.TagOperation.Centroid),v="#"+("000000"+this._tag.color.toString(16)).substr(-6);if(this._tag.editable){var g={onmousedown:m,style:{background:v,left:l[0],pointerEvents:"all",position:"absolute",top:l[1]}};s.push(i.h("div.TagSpotInteractor",g,[]))}var y={style:{background:v,left:l[0],position:"absolute",top:l[1]}};s.push(i.h("div.TagVertex",y,[]))}return s},e.prototype._interact=function(t,e){var r=this;return function(n){var i=n.offsetX-n.target.offsetWidth/2,o=n.offsetY-n.target.offsetHeight/2;r._interact$.next({offsetX:i,offsetY:o,operation:t,tag:r._tag,vertexIndex:e})}},e}(o.RenderTag);r.SpotRenderTag=s},{"../../../Component":225,"../../../Viewer":235,"virtual-dom":181}],296:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../../../Component"),o=function(t){function e(e,r,n){var i=t.call(this,e,r)||this;return i._color=null==n.color?16777215:n.color,i._editable=null!=n.editable&&n.editable,i._icon=void 0===n.icon?null:n.icon,i._text=void 0===n.text?null:n.text,i._textColor=null==n.textColor?16777215:n.textColor,i}return n(e,t),Object.defineProperty(e.prototype,"color",{get:function(){return this._color},set:function(t){this._color=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"editable",{get:function(){return this._editable},set:function(t){this._editable=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"icon",{get:function(){return this._icon},set:function(t){this._icon=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"text",{get:function(){return this._text},set:function(t){this._text=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"textColor",{get:function(){return this._textColor},set:function(t){this._textColor=t,this._notifyChanged$.next(this)},enumerable:!0,configurable:!0}),e.prototype.setOptions=function(t){this._color=null==t.color?this._color:t.color,this._editable=null==t.editable?this._editable:t.editable,this._icon=void 0===t.icon?this._icon:t.icon,this._text=void 0===t.text?this._text:t.text,this._textColor=null==t.textColor?this._textColor:t.textColor,this._notifyChanged$.next(this)},e}(i.Tag);r.SpotTag=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../../../Component":225}],297:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("rxjs/Subject");t("rxjs/add/operator/map"),t("rxjs/add/operator/share");var o=t("../../../Utils"),a=function(t){function e(r,n){var o=t.call(this)||this;return o._id=r,o._geometry=n,o._notifyChanged$=new i.Subject,o._notifyChanged$.subscribe(function(t){o.fire(e.changed,o)}),o._geometry.changed$.subscribe(function(t){o.fire(e.geometrychanged,o)}),o}return n(e,t),Object.defineProperty(e.prototype,"id",{get:function(){return this._id},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"geometry",{get:function(){return this._geometry},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"changed$",{get:function(){return this._notifyChanged$},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"geometryChanged$",{get:function(){var t=this;return this._geometry.changed$.map(function(e){return t}).share()},enumerable:!0,configurable:!0}),e}(o.EventEmitter);a.changed="changed",a.geometrychanged="geometrychanged",r.Tag=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../../../Utils":234,"rxjs/Subject":33,"rxjs/add/operator/map":64,"rxjs/add/operator/share":73}],298:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./MapillaryError"),o=function(t){function e(e){var r=t.call(this,null!=e?e:"The argument is not valid.")||this;return r.name="ArgumentMapillaryError",r}return n(e,t),e}(i.MapillaryError);r.ArgumentMapillaryError=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"./MapillaryError":300}],299:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("./MapillaryError"),o=function(t){function e(e){var r=t.call(this,e)||this;return r.name="GraphMapillaryError",r}return n(e,t),e}(i.MapillaryError);r.GraphMapillaryError=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"./MapillaryError":300}],300:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=function(t){function e(e){var r=t.call(this,e)||this;return r.name="MapillaryError",r}return n(e,t),e}(Error);r.MapillaryError=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{}],301:[function(t,e,r){"use strict";var n=t("three"),i=function(){function t(t){null!=t?(this._position=(new n.Vector3).fromArray(t.unprojectSfM([0,0],0)),this._lookat=(new n.Vector3).fromArray(t.unprojectSfM([0,0],10)),this._up=t.upVector(),this._focal=this._getFocal(t)):(this._position=new n.Vector3(0,0,0),this._lookat=new n.Vector3(0,0,1),this._up=new n.Vector3(0,-1,0),this._focal=1)}return Object.defineProperty(t.prototype,"position",{get:function(){return this._position},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"lookat",{get:function(){return this._lookat},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"up",{get:function(){return this._up},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"focal",{get:function(){return this._focal},set:function(t){this._focal=t},enumerable:!0,configurable:!0}),t.prototype.lerpCameras=function(t,e,r){this._position.subVectors(e.position,t.position).multiplyScalar(r).add(t.position),this._lookat.subVectors(e.lookat,t.lookat).multiplyScalar(r).add(t.lookat),this._up.subVectors(e.up,t.up).multiplyScalar(r).add(t.up),this._focal=(1-r)*t.focal+r*e.focal},t.prototype.copy=function(t){this._position.copy(t.position),this._lookat.copy(t.lookat),this._up.copy(t.up),this._focal=t.focal},t.prototype.clone=function(){var e=new t;return e.position.copy(this._position),e.lookat.copy(this._lookat),e.up.copy(this._up),e.focal=this._focal,e},t.prototype.diff=function(t){var e=this._position.distanceToSquared(t.position),r=this._lookat.distanceToSquared(t.lookat),n=this._up.distanceToSquared(t.up),i=100*Math.abs(this._focal-t.focal);return Math.max(e,r,n,i)},t.prototype._getFocal=function(t){if(null==t.gpano)return t.focal
+;var e=Math.PI*t.gpano.CroppedAreaImageHeightPixels/t.gpano.FullPanoHeightPixels,r=.5/Math.tan(e/2);return Math.min(1/(2*(Math.sqrt(2)-1)),Math.max(.5,r))},t}();r.Camera=i},{three:175}],302:[function(t,e,r){"use strict";var n=function(){function t(){this._wgs84a=6378137,this._wgs84b=6356752.31424518}return t.prototype.geodeticToEnu=function(t,e,r,n,i,o){var a=this.geodeticToEcef(t,e,r);return this.ecefToEnu(a[0],a[1],a[2],n,i,o)},t.prototype.enuToGeodetic=function(t,e,r,n,i,o){var a=this.enuToEcef(t,e,r,n,i,o);return this.ecefToGeodetic(a[0],a[1],a[2])},t.prototype.ecefToEnu=function(t,e,r,n,i,o){var a=this.geodeticToEcef(n,i,o),s=[t-a[0],e-a[1],r-a[2]];n=n*Math.PI/180,i=i*Math.PI/180;var c=Math.cos(n),u=Math.sin(n),h=Math.cos(i),l=Math.sin(i);return[-l*s[0]+h*s[1],-u*h*s[0]-u*l*s[1]+c*s[2],c*h*s[0]+c*l*s[1]+u*s[2]]},t.prototype.enuToEcef=function(t,e,r,n,i,o){var a=this.geodeticToEcef(n,i,o);n=n*Math.PI/180,i=i*Math.PI/180;var s=Math.cos(n),c=Math.sin(n),u=Math.cos(i),h=Math.sin(i);return[-h*t-c*u*e+s*u*r+a[0],u*t-c*h*e+s*h*r+a[1],s*e+c*r+a[2]]},t.prototype.geodeticToEcef=function(t,e,r){var n=this._wgs84a,i=this._wgs84b;t=t*Math.PI/180,e=e*Math.PI/180;var o=Math.cos(t),a=Math.sin(t),s=Math.cos(e),c=Math.sin(e),u=n*n,h=i*i,l=1/Math.sqrt(u*o*o+h*a*a),p=(u*l+r)*o;return[p*s,p*c,(h*l+r)*a]},t.prototype.ecefToGeodetic=function(t,e,r){var n=this._wgs84a,i=this._wgs84b,o=n*n,a=i*i,s=o-a,c=Math.sqrt(s/o),u=Math.sqrt(s/a),h=Math.sqrt(t*t+e*e),l=Math.atan2(r*n,h*i),p=Math.sin(l),f=Math.cos(l),d=Math.atan2(e,t),m=Math.atan2(r+u*u*i*p*p*p,h-c*c*n*f*f*f),v=Math.sin(m),g=Math.cos(m),y=n/Math.sqrt(1-c*c*v*v),b=h/g-y;return[180*m/Math.PI,180*d/Math.PI,b]},t}();r.GeoCoords=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],303:[function(t,e,r){"use strict";var n=t("three"),i=function(){function t(){this._epsilon=1e-9}return t.prototype.azimuthalToBearing=function(t){return-t+Math.PI/2},t.prototype.degToRad=function(t){return Math.PI*t/180},t.prototype.radToDeg=function(t){return 180*t/Math.PI},t.prototype.rotationMatrix=function(t){var e=new n.Vector3(t[0],t[1],t[2]),r=e.length();return e.normalize(),(new n.Matrix4).makeRotationAxis(e,r)},t.prototype.rotate=function(t,e){var r=new n.Vector3(t[0],t[1],t[2]),i=this.rotationMatrix(e);return r.applyMatrix4(i),r},t.prototype.opticalCenter=function(t,e){var r=[-t[0],-t[1],-t[2]],n=[-e[0],-e[1],-e[2]];return this.rotate(n,r)},t.prototype.viewingDirection=function(t){var e=[-t[0],-t[1],-t[2]];return this.rotate([0,0,1],e)},t.prototype.wrap=function(t,e,r){if(r<e)throw new Error("Invalid arguments: max must be larger than min.");for(var n=r-e;t>r||t<e;)t>r?t-=n:t<e&&(t+=n);return t},t.prototype.wrapAngle=function(t){return this.wrap(t,-Math.PI,Math.PI)},t.prototype.clamp=function(t,e,r){return t<e?e:t>r?r:t},t.prototype.angleBetweenVector2=function(t,e,r,n){var i=Math.atan2(n,r)-Math.atan2(e,t);return this.wrapAngle(i)},t.prototype.angleDifference=function(t,e){var r=e-t;return this.wrapAngle(r)},t.prototype.relativeRotationAngle=function(t,e){var r=this.rotationMatrix([-t[0],-t[1],-t[2]]),n=this.rotationMatrix(e),i=r.multiply(n),o=i.elements;return Math.acos((o[0]+o[5]+o[10]-1)/2)},t.prototype.angleToPlane=function(t,e){var r=(new n.Vector3).fromArray(t),i=r.length();if(i<this._epsilon)return 0;var o=r.dot((new n.Vector3).fromArray(e));return Math.asin(o/i)},t.prototype.distanceFromLatLon=function(t,e,r,n){var i=this.degToRad(r-t),o=this.degToRad(n-e),a=Math.sin(i/2)*Math.sin(i/2)+Math.cos(t)*Math.cos(r)*Math.sin(o/2)*Math.sin(o/2);return 12742e3*Math.atan2(Math.sqrt(a),Math.sqrt(1-a))},t}();r.Spatial=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{three:175}],304:[function(t,e,r){"use strict";var n=t("three"),i=function(){function t(t,e,r){this._orientation=this._getValue(t.orientation,1);var n=null!=e?e.width:4,i=null!=e?e.height:3,o=this._orientation<5;this._width=this._getValue(t.width,o?n:i),this._height=this._getValue(t.height,o?i:n),this._basicAspect=o?this._width/this._height:this._height/this._width,this._basicWidth=o?t.width:t.height,this._basicHeight=o?t.height:t.width,this._focal=this._getValue(t.focal,1),this._scale=this._getValue(t.scale,0),this._gpano=null!=t.gpano?t.gpano:null,this._rt=this._getRt(t.rotation,r),this._srt=this._getSrt(this._rt,this._scale)}return Object.defineProperty(t.prototype,"basicAspect",{get:function(){return this._basicAspect},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"basicHeight",{get:function(){return this._basicHeight},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"basicWidth",{get:function(){return this._basicWidth},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"focal",{get:function(){return this._focal},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fullPano",{get:function(){return null!=this._gpano&&0===this._gpano.CroppedAreaLeftPixels&&0===this._gpano.CroppedAreaTopPixels&&this._gpano.CroppedAreaImageWidthPixels===this._gpano.FullPanoWidthPixels&&this._gpano.CroppedAreaImageHeightPixels===this._gpano.FullPanoHeightPixels},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"gpano",{get:function(){return this._gpano},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"height",{get:function(){return this._height},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"orientation",{get:function(){return this._orientation},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rt",{get:function(){return this._rt},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"srt",{get:function(){return this._srt},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"scale",{get:function(){return this._scale},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasValidScale",{get:function(){return this._scale>.01&&this._scale<50},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"width",{get:function(){return this._width},enumerable:!0,configurable:!0}),t.prototype.upVector=function(){var t=this._rt.elements;switch(this._orientation){case 1:return new n.Vector3(-t[1],-t[5],-t[9]);case 3:return new n.Vector3(t[1],t[5],t[9]);case 6:return new n.Vector3(-t[0],-t[4],-t[8]);case 8:return new n.Vector3(t[0],t[4],t[8]);default:return new n.Vector3(-t[1],-t[5],-t[9])}},t.prototype.projectorMatrix=function(){var t=this._normalizedToTextureMatrix(),e=this._focal,r=(new n.Matrix4).set(e,0,0,0,0,e,0,0,0,0,0,0,0,0,1,0);return t.multiply(r),t.multiply(this._rt),t},t.prototype.projectBasic=function(t){var e=this.projectSfM(t);return this._sfmToBasic(e)},t.prototype.unprojectBasic=function(t,e){var r=this._basicToSfm(t);return this.unprojectSfM(r,e)},t.prototype.projectSfM=function(t){var e=new n.Vector4(t[0],t[1],t[2],1);return e.applyMatrix4(this._rt),this._bearingToSfm([e.x,e.y,e.z])},t.prototype.unprojectSfM=function(t,e){var r=this._sfmToBearing(t),i=new n.Vector4(e*r[0],e*r[1],e*r[2],1);return i.applyMatrix4((new n.Matrix4).getInverse(this._rt)),[i.x/i.w,i.y/i.w,i.z/i.w]},t.prototype._sfmToBearing=function(t){if(this._fullPano()){var e=2*t[0]*Math.PI,r=2*-t[1]*Math.PI,i=Math.cos(r)*Math.sin(e),o=-Math.sin(r),a=Math.cos(r)*Math.cos(e);return[i,o,a]}if(this._gpano){var s=Math.max(this.gpano.CroppedAreaImageWidthPixels,this.gpano.CroppedAreaImageHeightPixels),c=[t[0]*s+this.gpano.CroppedAreaImageWidthPixels/2+this.gpano.CroppedAreaLeftPixels,t[1]*s+this.gpano.CroppedAreaImageHeightPixels/2+this.gpano.CroppedAreaTopPixels],e=2*Math.PI*(c[0]/this.gpano.FullPanoWidthPixels-.5),r=-Math.PI*(c[1]/this.gpano.FullPanoHeightPixels-.5),i=Math.cos(r)*Math.sin(e),o=-Math.sin(r),a=Math.cos(r)*Math.cos(e);return[i,o,a]}var u=new n.Vector3(t[0],t[1],this._focal);return u.normalize(),[u.x,u.y,u.z]},t.prototype._bearingToSfm=function(t){if(this._fullPano()){var e=t[0],r=t[1],n=t[2],i=Math.atan2(e,n),o=Math.atan2(-r,Math.sqrt(e*e+n*n));return[i/(2*Math.PI),-o/(2*Math.PI)]}if(this._gpano){var e=t[0],r=t[1],n=t[2],i=Math.atan2(e,n),o=Math.atan2(-r,Math.sqrt(e*e+n*n)),a=[(i/(2*Math.PI)+.5)*this.gpano.FullPanoWidthPixels,(-o/Math.PI+.5)*this.gpano.FullPanoHeightPixels],s=Math.max(this.gpano.CroppedAreaImageWidthPixels,this.gpano.CroppedAreaImageHeightPixels);return[(a[0]-this.gpano.CroppedAreaLeftPixels-this.gpano.CroppedAreaImageWidthPixels/2)/s,(a[1]-this.gpano.CroppedAreaTopPixels-this.gpano.CroppedAreaImageHeightPixels/2)/s]}return t[2]>0?[t[0]*this._focal/t[2],t[1]*this._focal/t[2]]:[t[0]<0?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,t[1]<0?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY]},t.prototype._basicToSfm=function(t){var e,r;switch(this._orientation){case 1:e=t[0],r=t[1];break;case 3:e=1-t[0],r=1-t[1];break;case 6:e=t[1],r=1-t[0];break;case 8:e=1-t[1],r=t[0];break;default:e=t[0],r=t[1]}var n=this._width,i=this._height,o=Math.max(n,i);return[e*n/o-n/o/2,r*i/o-i/o/2]},t.prototype._sfmToBasic=function(t){var e,r,n=this._width,i=this._height,o=Math.max(n,i),a=(t[0]+n/o/2)/n*o,s=(t[1]+i/o/2)/i*o;switch(this._orientation){case 1:e=a,r=s;break;case 3:e=1-a,r=1-s;break;case 6:e=1-s,r=a;break;case 8:e=s,r=1-a;break;default:e=a,r=s}return[e,r]},t.prototype._fullPano=function(){return null!=this.gpano&&0===this.gpano.CroppedAreaLeftPixels&&0===this.gpano.CroppedAreaTopPixels&&this.gpano.CroppedAreaImageWidthPixels===this.gpano.FullPanoWidthPixels&&this.gpano.CroppedAreaImageHeightPixels===this.gpano.FullPanoHeightPixels},t.prototype._getValue=function(t,e){return null!=t&&t>0?t:e},t.prototype._getRt=function(t,e){var r=new n.Vector3(t[0],t[1],t[2]),i=r.length();r.normalize();var o=new n.Matrix4;return o.makeRotationAxis(r,i),o.setPosition(new n.Vector3(e[0],e[1],e[2])),o},t.prototype._getSrt=function(t,e){var r=t.clone(),i=r.elements;return i[12]=e*i[12],i[13]=e*i[13],i[14]=e*i[14],r.scale(new n.Vector3(e,e,e)),r},t.prototype._normalizedToTextureMatrix=function(){var t=Math.max(this._width,this._height),e=t/this._width,r=t/this._height;switch(this._orientation){case 1:return(new n.Matrix4).set(e,0,0,.5,0,-r,0,.5,0,0,1,0,0,0,0,1);case 3:return(new n.Matrix4).set(-e,0,0,.5,0,r,0,.5,0,0,1,0,0,0,0,1);case 6:return(new n.Matrix4).set(0,-r,0,.5,-e,0,0,.5,0,0,1,0,0,0,0,1);case 8:return(new n.Matrix4).set(0,r,0,.5,e,0,0,.5,0,0,1,0,0,0,0,1);default:return(new n.Matrix4).set(e,0,0,.5,0,-r,0,.5,0,0,1,0,0,0,0,1)}},t}();r.Transform=i},{three:175}],305:[function(t,e,r){"use strict";var n=t("three"),i=function(){function t(){this._unprojectDepth=200}return t.prototype.basicToCanvas=function(t,e,r,n,i){var o=n.unprojectBasic([t,e],this._unprojectDepth);return this.projectToCanvas(o,r,i)},t.prototype.basicToViewport=function(t,e,r,n){var i=r.unprojectBasic([t,e],this._unprojectDepth);return this.projectToViewport(i,n)},t.prototype.canvasPosition=function(t,e){var r=e.getBoundingClientRect();return[t.clientX-r.left-e.clientLeft,t.clientY-r.top-e.clientTop]},t.prototype.canvasToBasic=function(t,e,r,n,i){var o=this.unprojectFromCanvas(t,e,r,i).toArray();return n.projectBasic(o)},t.prototype.canvasToViewport=function(t,e,r){var n=this.containerToCanvas(r);return[2*t/n[0]-1,1-2*e/n[1]]},t.prototype.containerToCanvas=function(t){return[t.offsetWidth,t.offsetHeight]},t.prototype.getBasicDistances=function(t,e){var r=this.viewportToBasic(-1,1,t,e),n=this.viewportToBasic(1,1,t,e),i=this.viewportToBasic(1,-1,t,e),o=this.viewportToBasic(-1,-1,t,e),a=0,s=0,c=0,u=0;return r[1]<0&&n[1]<0&&(a=r[1]>n[1]?-r[1]:-n[1]),n[0]>1&&i[0]>1&&(s=n[0]<i[0]?n[0]-1:i[0]-1),i[1]>1&&o[1]>1&&(c=i[1]<o[1]?i[1]-1:o[1]-1),o[0]<0&&r[0]<0&&(u=o[0]>r[0]?-o[0]:-r[0]),[a,s,c,u]},t.prototype.getPixelDistances=function(t,e,r){var n=this.viewportToBasic(-1,1,e,r),i=this.viewportToBasic(1,1,e,r),o=this.viewportToBasic(1,-1,e,r),a=this.viewportToBasic(-1,-1,e,r),s=0,c=0,u=0,h=0,l=this.containerToCanvas(t),p=l[0],f=l[1];if(n[1]<0&&i[1]<0){var d=n[1]>i[1]?n[0]:i[0],m=this.basicToCanvas(d,0,t,e,r);s=m[1]>0?m[1]:0}if(i[0]>1&&o[0]>1){var v=i[0]<o[0]?i[1]:o[1],m=this.basicToCanvas(1,v,t,e,r);c=m[0]<p?p-m[0]:0}if(o[1]>1&&a[1]>1){var d=o[1]<a[1]?o[0]:a[0],m=this.basicToCanvas(d,1,t,e,r);u=m[1]<f?f-m[1]:0}if(a[0]<0&&n[0]<0){var v=a[0]>n[0]?a[1]:n[1],m=this.basicToCanvas(0,v,t,e,r);h=m[0]>0?m[0]:0}return[s,c,u,h]},t.prototype.insideElement=function(t,e){var r=e.getBoundingClientRect(),n=r.left+e.clientLeft,i=n+e.clientWidth,o=r.top+e.clientTop,a=o+e.clientHeight;return t.clientX>n&&t.clientX<i&&t.clientY>o&&t.clientY<a},t.prototype.projectToCanvas=function(t,e,r){var n=this.projectToViewport(t,r);return this.viewportToCanvas(n[0],n[1],e)},t.prototype.projectToViewport=function(t,e){var r=new n.Vector3(t[0],t[1],t[2]).project(e);return[r.x,r.y]},t.prototype.unprojectFromCanvas=function(t,e,r,n){var i=this.canvasToViewport(t,e,r);return this.unprojectFromViewport(i[0],i[1],n)},t.prototype.unprojectFromViewport=function(t,e,r){return new n.Vector3(t,e,1).unproject(r)},t.prototype.viewportToBasic=function(t,e,r,i){var o=new n.Vector3(t,e,1).unproject(i).toArray();return r.projectBasic(o)},t.prototype.viewportToCanvas=function(t,e,r){var n=this.containerToCanvas(r);return[n[0]*(t+1)/2,-n[1]*(e-1)/2]},t}();r.ViewportCoords=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{three:175}],306:[function(t,e,r){"use strict";var n=function(){function t(){}return t.prototype.createFilter=function(t){return new Function("node","return "+this._compile(t)+";")},t.prototype._compile=function(t){if(null==t||t.length<=1)return"true";var e=t[0];return"("+("=="===e?this._compileComparisonOp("===",t[1],t[2],!1):"!="===e?this._compileComparisonOp("!==",t[1],t[2],!1):">"===e||">="===e||"<"===e||"<="===e?this._compileComparisonOp(e,t[1],t[2],!0):"in"===e?this._compileInOp(t[1],t.slice(2)):"!in"===e?this._compileNegation(this._compileInOp(t[1],t.slice(2))):"all"===e?this._compileLogicalOp(t.slice(1),"&&"):"true")+")"},t.prototype._compare=function(t,e){return t<e?-1:t>e?1:0},t.prototype._compileComparisonOp=function(t,e,r,n){var i=this._compilePropertyReference(e),o=JSON.stringify(r);return(n?"typeof "+i+"===typeof "+o+"&&":"")+i+t+o},t.prototype._compileInOp=function(t,e){var r=this._compare;return JSON.stringify(e.sort(r))+".indexOf("+this._compilePropertyReference(t)+")!==-1"},t.prototype._compileLogicalOp=function(t,e){var r=this._compile.bind(this);return t.map(r).join(e)},t.prototype._compileNegation=function(t){return"!("+t+")"},t.prototype._compilePropertyReference=function(t){return"node["+JSON.stringify(t)+"]"},t}();r.FilterCreator=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],307:[function(t,e,r){"use strict";var n=t("rbush"),i=t("rxjs/Subject");t("rxjs/add/observable/from"),t("rxjs/add/operator/catch"),t("rxjs/add/operator/do"),t("rxjs/add/operator/finally"),t("rxjs/add/operator/map"),t("rxjs/add/operator/publish");var o=t("../Edge"),a=t("../Error"),s=t("../Graph"),c=function(){function t(t,e,r,a,c,u){this._apiV3=t,this._cachedNodes={},this._cachedNodeTiles={},this._cachedSpatialEdges={},this._cachedTiles={},this._cachingFill$={},this._cachingFull$={},this._cachingSequences$={},this._cachingSpatialArea$={},this._cachingTiles$={},this._changed$=new i.Subject,this._defaultAlt=2,this._edgeCalculator=null!=a?a:new o.EdgeCalculator,this._filterCreator=null!=c?c:new s.FilterCreator,this._filter=this._filterCreator.createFilter(void 0),this._graphCalculator=null!=r?r:new s.GraphCalculator,this._configuration=null!=u?u:{maxSequences:50,maxUnusedNodes:100,maxUnusedTiles:20},this._nodes={},this._nodeIndex=null!=e?e:n(16,[".lat",".lon",".lat",".lon"]),this._nodeIndexTiles={},this._nodeToTile={},this._preStored={},this._requiredNodeTiles={},this._requiredSpatialArea={},this._sequences={},this._tilePrecision=7,this._tileThreshold=20}return Object.defineProperty(t.prototype,"changed$",{get:function(){return this._changed$},enumerable:!0,configurable:!0}),t.prototype.cacheFill$=function(t){var e=this;if(t in this._cachingFull$)throw new a.GraphMapillaryError("Cannot fill node while caching full ("+t+").");if(!this.hasNode(t))throw new a.GraphMapillaryError("Cannot fill node that does not exist in graph ("+t+").");if(t in this._cachingFill$)return this._cachingFill$[t];var r=this.getNode(t);if(r.full)throw new a.GraphMapillaryError("Cannot fill node that is already full ("+t+").");return this._cachingFill$[t]=this._apiV3.imageByKeyFill$([t]).do(function(n){r.full||e._makeFull(r,n[t]),delete e._cachingFill$[t]}).map(function(t){return e}).finally(function(){t in e._cachingFill$&&delete e._cachingFill$[t],e._changed$.next(e)}).publish().refCount(),this._cachingFill$[t]},t.prototype.cacheFull$=function(t){var e=this;if(t in this._cachingFull$)return this._cachingFull$[t];if(this.hasNode(t))throw new a.GraphMapillaryError("Cannot cache full node that already exist in graph ("+t+").");return this._cachingFull$[t]=this._apiV3.imageByKeyFull$([t]).do(function(r){var n=r[t];if(e.hasNode(t)){var i=e.getNode(t);i.full||e._makeFull(i,n)}else{if(null==n.sequence||null==n.sequence.key)throw new a.GraphMapillaryError("Node has no sequence ("+t+").");var i=new s.Node(n);e._makeFull(i,n);var o=e._graphCalculator.encodeH(i.originalLatLon,e._tilePrecision);e._preStore(o,i),e._setNode(i),delete e._cachingFull$[t]}}).map(function(t){return e}).finally(function(){t in e._cachingFull$&&delete e._cachingFull$[t],e._changed$.next(e)}).publish().refCount(),this._cachingFull$[t]},t.prototype.cacheNodeSequence$=function(t){if(!this.hasNode(t))throw new a.GraphMapillaryError("Cannot cache sequence edges of node that does not exist in graph ("+t+").");var e=this.getNode(t);if(e.sequenceKey in this._sequences)throw new a.GraphMapillaryError("Sequence already cached ("+t+"), ("+e.sequenceKey+").");return this._cacheSequence$(e.sequenceKey)},t.prototype.cacheSequence$=function(t){if(t in this._sequences)throw new a.GraphMapillaryError("Sequence already cached ("+t+")");return this._cacheSequence$(t)},t.prototype.cacheSequenceEdges=function(t){var e=this.getNode(t);if(!(e.sequenceKey in this._sequences))throw new a.GraphMapillaryError("Sequence is not cached ("+t+"), ("+e.sequenceKey+")");var r=this._sequences[e.sequenceKey].sequence,n=this._edgeCalculator.computeSequenceEdges(e,r);e.cacheSequenceEdges(n)},t.prototype.cacheSpatialArea$=function(t){var e=this;if(!this.hasNode(t))throw new a.GraphMapillaryError("Cannot cache spatial area of node that does not exist in graph ("+t+").");if(t in this._cachedSpatialEdges)throw new a.GraphMapillaryError("Node already spatially cached ("+t+").");if(!(t in this._requiredSpatialArea))throw new a.GraphMapillaryError("Spatial area not determined ("+t+").");var r=this._requiredSpatialArea[t];if(0===Object.keys(r.cacheNodes).length)throw new a.GraphMapillaryError("Spatial nodes already cached ("+t+").");if(t in this._cachingSpatialArea$)return this._cachingSpatialArea$[t];for(var n=[];r.cacheKeys.length>0;)n.push(r.cacheKeys.splice(0,200));for(var i=n.length,o=[],s=this,c=0,u=n;c<u.length;c++){var h=u[c];!function(n){var a=s._apiV3.imageByKeyFill$(n).do(function(n){for(var o in n)if(n.hasOwnProperty(o)){var a=r.cacheNodes[o];if(a.full)delete r.cacheNodes[o];else{var s=n[o];e._makeFull(a,s),delete r.cacheNodes[o]}}0==--i&&delete e._cachingSpatialArea$[t]}).map(function(t){return e}).catch(function(o){for(var a=0,s=n;a<s.length;a++){var c=s[a];c in r.all&&delete r.all[c],c in r.cacheNodes&&delete r.cacheNodes[c]}throw 0==--i&&delete e._cachingSpatialArea$[t],o}).finally(function(){0===Object.keys(r.cacheNodes).length&&e._changed$.next(e)}).publish().refCount();o.push(a)}(h)}return this._cachingSpatialArea$[t]=o,o},t.prototype.cacheSpatialEdges=function(t){if(t in this._cachedSpatialEdges)throw new a.GraphMapillaryError("Spatial edges already cached ("+t+").");var e=this.getNode(t),r=this._sequences[e.sequenceKey].sequence,n=[],i=r.findPrevKey(e.key);null!=i&&n.push(i);var o=r.findNextKey(e.key);null!=o&&n.push(o);var s=this._requiredSpatialArea[t].all,c=[],u=this._filter;for(var h in s)if(s.hasOwnProperty(h)){var l=s[h];u(l)&&c.push(l)}var p=this._edgeCalculator.getPotentialEdges(e,c,n),f=this._edgeCalculator.computeStepEdges(e,p,i,o);f=f.concat(this._edgeCalculator.computeTurnEdges(e,p)),f=f.concat(this._edgeCalculator.computePanoEdges(e,p)),f=f.concat(this._edgeCalculator.computePerspectiveToPanoEdges(e,p)),f=f.concat(this._edgeCalculator.computeSimilarEdges(e,p)),e.cacheSpatialEdges(f),this._cachedSpatialEdges[t]=e,delete this._requiredSpatialArea[t],delete this._cachedNodeTiles[t]},t.prototype.cacheTiles$=function(t){var e=this;if(t in this._cachedNodeTiles)throw new a.GraphMapillaryError("Tiles already cached ("+t+").");if(t in this._cachedSpatialEdges)throw new a.GraphMapillaryError("Spatial edges already cached so tiles considered cached ("+t+").");if(!(t in this._requiredNodeTiles))throw new a.GraphMapillaryError("Tiles have not been determined ("+t+").");var r=this._requiredNodeTiles[t];if(0===r.cache.length&&0===r.caching.length)throw new a.GraphMapillaryError("Tiles already cached ("+t+").");if(!this.hasNode(t))throw new a.GraphMapillaryError("Cannot cache tiles of node that does not exist in graph ("+t+").");var n=r.cache.slice();r.caching=this._requiredNodeTiles[t].caching.concat(n),r.cache=[];for(var i=[],o=this,c=0,u=r.caching;c<u.length;c++){var h=u[c];!function(n){var a=null;n in o._cachingTiles$?a=o._cachingTiles$[n]:(a=o._apiV3.imagesByH$([n]).do(function(t){var r=t[n];if(!(n in e._cachedTiles)){e._nodeIndexTiles[n]=[],e._cachedTiles[n]={accessed:(new Date).getTime(),nodes:[]};var i=e._cachedTiles[n].nodes,o=e._removeFromPreStore(n);for(var a in r)if(r.hasOwnProperty(a)){var c=r[a];if(null==c)break;if(null!=c.sequence&&null!=c.sequence.key)if(null!=o&&c.key in o){var u=o[c.key];delete o[c.key],i.push(u);var h={lat:u.latLon.lat,lon:u.latLon.lon,node:u};e._nodeIndex.insert(h),e._nodeIndexTiles[n].push(h),e._nodeToTile[u.key]=n}else{var l=new s.Node(c);i.push(l);var p={lat:l.latLon.lat,lon:l.latLon.lon,node:l};e._nodeIndex.insert(p),e._nodeIndexTiles[n].push(p),e._nodeToTile[l.key]=n,e._setNode(l)}else console.warn("Sequence missing, discarding ("+c.key+")")}delete e._cachingTiles$[n]}}).map(function(t){return e}).catch(function(t){throw delete e._cachingTiles$[n],t}).publish().refCount(),o._cachingTiles$[n]=a),i.push(a.do(function(i){var o=r.caching.indexOf(n);o>-1&&r.caching.splice(o,1),0===r.caching.length&&0===r.cache.length&&(delete e._requiredNodeTiles[t],e._cachedNodeTiles[t]=!0)}).catch(function(i){var o=r.caching.indexOf(n);throw o>-1&&r.caching.splice(o,1),0===r.caching.length&&0===r.cache.length&&(delete e._requiredNodeTiles[t],e._cachedNodeTiles[t]=!0),i}).finally(function(){e._changed$.next(e)}).publish().refCount())}(h)}return i},t.prototype.initializeCache=function(t){if(t in this._cachedNodes)throw new a.GraphMapillaryError("Node already in cache ("+t+").");var e=this.getNode(t);e.initializeCache(new s.NodeCache);var r=(new Date).getTime();this._cachedNodes[t]={accessed:r,node:e},this._updateCachedTileAccess(t,r)},t.prototype.isCachingFill=function(t){return t in this._cachingFill$},t.prototype.isCachingFull=function(t){return t in this._cachingFull$},t.prototype.isCachingNodeSequence=function(t){return this.getNode(t).sequenceKey in this._cachingSequences$},t.prototype.isCachingSequence=function(t){return t in this._cachingSequences$},t.prototype.isCachingTiles=function(t){return t in this._requiredNodeTiles&&0===this._requiredNodeTiles[t].cache.length&&this._requiredNodeTiles[t].caching.length>0},t.prototype.hasInitializedCache=function(t){return t in this._cachedNodes},t.prototype.hasNode=function(t){var e=(new Date).getTime();return this._updateCachedNodeAccess(t,e),this._updateCachedTileAccess(t,e),t in this._nodes},t.prototype.hasNodeSequence=function(t){var e=this.getNode(t),r=e.sequenceKey,n=r in this._sequences;return n&&(this._sequences[r].accessed=(new Date).getTime()),n},t.prototype.hasSequence=function(t){var e=t in this._sequences;return e&&(this._sequences[t].accessed=(new Date).getTime()),e},t.prototype.hasSpatialArea=function(t){if(!this.hasNode(t))throw new a.GraphMapillaryError("Spatial area nodes cannot be determined if node not in graph ("+t+").");if(t in this._cachedSpatialEdges)return!0;if(t in this._requiredSpatialArea)return 0===Object.keys(this._requiredSpatialArea[t].cacheNodes).length;for(var e=this.getNode(t),r=this._graphCalculator.boundingBoxCorners(e.latLon,this._tileThreshold),n=this._nodeIndex.search({maxX:r[1].lat,maxY:r[1].lon,minX:r[0].lat,minY:r[0].lon}),i={all:{},cacheKeys:[],cacheNodes:{}},o=0,s=n;o<s.length;o++){var c=s[o];i.all[c.node.key]=c.node,c.node.full||(i.cacheKeys.push(c.node.key),i.cacheNodes[c.node.key]=c.node)}return this._requiredSpatialArea[t]=i,0===i.cacheKeys.length},t.prototype.hasTiles=function(t){var e=this;if(t in this._cachedNodeTiles)return!0;if(t in this._cachedSpatialEdges)return!0;if(!this.hasNode(t))throw new a.GraphMapillaryError("Node does not exist in graph ("+t+").");var r={cache:[],caching:[]};if(t in this._requiredNodeTiles)r=this._requiredNodeTiles[t];else{var n=this.getNode(t);r.cache=this._graphCalculator.encodeHs(n.latLon,this._tilePrecision,this._tileThreshold).filter(function(t){return!(t in e._cachedTiles)}),r.cache.length>0&&(this._requiredNodeTiles[t]=r)}return 0===r.cache.length&&0===r.caching.length},t.prototype.getNode=function(t){var e=(new Date).getTime();return this._updateCachedNodeAccess(t,e),this._updateCachedTileAccess(t,e),this._nodes[t]},t.prototype.getSequence=function(t){var e=this._sequences[t];return e.accessed=(new Date).getTime(),e.sequence},t.prototype.resetSpatialEdges=function(){for(var t=Object.keys(this._cachedSpatialEdges),e=0,r=t;e<r.length;e++){var n=r[e];this._cachedSpatialEdges[n].resetSpatialEdges(),delete this._cachedSpatialEdges[n]}},t.prototype.reset=function(t){for(var e=[],r=0,n=t;r<n.length;r++){var i=n[r];if(!this.hasNode(i))throw new Error("Node does not exist "+i);var o=this.getNode(i);o.resetSequenceEdges(),o.resetSpatialEdges(),e.push(o)}for(var a=0,s=Object.keys(this._cachedNodes);a<s.length;a++){var c=s[a];-1===t.indexOf(c)&&(this._cachedNodes[c].node.dispose(),delete this._cachedNodes[c])}this._cachedNodeTiles={},this._cachedSpatialEdges={},this._cachedTiles={},this._cachingFill$={},this._cachingFull$={},this._cachingSequences$={},this._cachingSpatialArea$={},this._cachingTiles$={},this._nodes={},this._nodeToTile={},this._preStored={};for(var u=0,h=e;u<h.length;u++){var o=h[u];this._nodes[o.key]=o;var l=this._graphCalculator.encodeH(o.originalLatLon,this._tilePrecision);this._preStore(l,o)}this._requiredNodeTiles={},this._requiredSpatialArea={},this._sequences={},this._nodeIndexTiles={},this._nodeIndex.clear()},t.prototype.setFilter=function(t){this._filter=this._filterCreator.createFilter(t)},t.prototype.uncache=function(t){var e={};this._addNewKeys(e,this._cachingFull$),this._addNewKeys(e,this._cachingFill$),this._addNewKeys(e,this._cachingTiles$),this._addNewKeys(e,this._cachingSpatialArea$),this._addNewKeys(e,this._requiredNodeTiles),this._addNewKeys(e,this._requiredSpatialArea);for(var r=0,n=t;r<n.length;r++){var i=n[r];i in e||(e[i]=!0)}var o={};for(var i in e)if(e.hasOwnProperty(i))for(var a=this._nodes[i],s=this._graphCalculator.encodeHs(a.latLon),c=0,u=s;c<u.length;c++){var h=u[c];h in o||(o[h]=!0)}var l=[];for(var p in this._cachedTiles)!this._cachedTiles.hasOwnProperty(p)||p in o||l.push([p,this._cachedTiles[p]]);for(var f=l.sort(function(t,e){return e[1].accessed-t[1].accessed}).slice(this._configuration.maxUnusedTiles).map(function(t){return t[0]}),d=0,m=f;d<m.length;d++){var v=m[d];this._uncacheTile(v)}var g=[];for(var i in this._cachedNodes)!this._cachedNodes.hasOwnProperty(i)||i in e||g.push(this._cachedNodes[i]);for(var y=g.sort(function(t,e){return e.accessed-t.accessed}).slice(this._configuration.maxUnusedNodes),b=0,_=y;b<_.length;b++){var x=_[b];x.node.uncache();var i=x.node.key;delete this._cachedNodes[i],i in this._cachedNodeTiles&&delete this._cachedNodeTiles[i],i in this._cachedSpatialEdges&&delete this._cachedSpatialEdges[i]}var w=[];for(var S in this._sequences)!this._sequences.hasOwnProperty(S)||S in this._cachingSequences$||w.push(this._sequences[S]);for(var M=w.sort(function(t,e){return e.accessed-t.accessed}).slice(this._configuration.maxSequences),E=0,T=M;E<T.length;E++){var C=T[E],S=C.sequence.key;delete this._sequences[S],C.sequence.dispose()}},t.prototype._addNewKeys=function(t,e){for(var r in e)e.hasOwnProperty(r)&&this.hasNode(r)&&(r in t||(t[r]=!0))},t.prototype._cacheSequence$=function(t){var e=this;return t in this._cachingSequences$?this._cachingSequences$[t]:(this._cachingSequences$[t]=this._apiV3.sequenceByKey$([t]).do(function(r){t in e._sequences||(e._sequences[t]={accessed:(new Date).getTime(),sequence:new s.Sequence(r[t])}),delete e._cachingSequences$[t]}).map(function(t){return e}).finally(function(){t in e._cachingSequences$&&delete e._cachingSequences$[t],e._changed$.next(e)}).publish().refCount(),this._cachingSequences$[t])},t.prototype._makeFull=function(t,e){null==e.calt&&(e.calt=this._defaultAlt),null==e.c_rotation&&(e.c_rotation=this._graphCalculator.rotationFromCompass(e.ca,e.orientation)),t.makeFull(e)},t.prototype._preStore=function(t,e){t in this._preStored||(this._preStored[t]={}),this._preStored[t][e.key]=e},t.prototype._removeFromPreStore=function(t){var e=null;return t in this._preStored&&(e=this._preStored[t],delete this._preStored[t]),e},t.prototype._setNode=function(t){var e=t.key;if(this.hasNode(e))throw new a.GraphMapillaryError("Node already exist ("+e+").");this._nodes[e]=t},t.prototype._uncacheTile=function(t){for(var e=0,r=this._cachedTiles[t].nodes;e<r.length;e++){var n=r[e],i=n.key;delete this._nodes[i],delete this._nodeToTile[i],i in this._cachedNodes&&delete this._cachedNodes[i],i in this._cachedNodeTiles&&delete this._cachedNodeTiles[i],i in this._cachedSpatialEdges&&delete this._cachedSpatialEdges[i],n.dispose()}for(var o=0,a=this._nodeIndexTiles[t];o<a.length;o++){var s=a[o];this._nodeIndex.remove(s)}delete this._nodeIndexTiles[t],delete this._cachedTiles[t]},t.prototype._updateCachedTileAccess=function(t,e){t in this._nodeToTile&&(this._cachedTiles[this._nodeToTile[t]].accessed=e)},t.prototype._updateCachedNodeAccess=function(t,e){t in this._cachedNodes&&(this._cachedNodes[t].accessed=e)},t}();r.Graph=c,Object.defineProperty(r,"__esModule",{value:!0}),r.default=c},{"../Edge":226,"../Error":227,"../Graph":229,rbush:24,"rxjs/Subject":33,"rxjs/add/observable/from":40,"rxjs/add/operator/catch":51,"rxjs/add/operator/do":58,"rxjs/add/operator/finally":61,"rxjs/add/operator/map":64,"rxjs/add/operator/publish":70}],308:[function(t,e,r){"use strict";var n=t("latlon-geohash"),i=t("three"),o=t("../Geo"),a=function(){function t(){}return t}();a.n="n",a.nw="nw",a.w="w",a.sw="sw",a.s="s",a.se="se",a.e="e",a.ne="ne";var s=function(){function t(t){this._geoCoords=null!=t?t:new o.GeoCoords}return t.prototype.encodeH=function(t,e){return void 0===e&&(e=7),n.encode(t.lat,t.lon,e)},t.prototype.encodeHs=function(t,e,r){void 0===e&&(e=7),void 0===r&&(r=20);var i=n.encode(t.lat,t.lon,e),o=n.bounds(i),s=o.ne,c=o.sw,u=n.neighbours(i),h=[0,0,0],l=this._geoCoords.geodeticToEnu(s.lat,s.lon,0,c.lat,c.lon,0),p=this._geoCoords.geodeticToEnu(t.lat,t.lon,0,c.lat,c.lon,0),f=p[0]-h[0],d=l[0]-p[0],m=p[1]-h[1],v=l[1]-p[1],g=f<r,y=d<r,b=m<r,_=v<r,x=[i];return _&&x.push(u[a.n]),_&&g&&x.push(u[a.nw]),g&&x.push(u[a.w]),g&&b&&x.push(u[a.sw]),b&&x.push(u[a.s]),b&&y&&x.push(u[a.se]),y&&x.push(u[a.e]),y&&_&&x.push(u[a.ne]),x},t.prototype.boundingBoxCorners=function(t,e){var r=this._geoCoords.enuToGeodetic(-e,-e,0,t.lat,t.lon,0),n=this._geoCoords.enuToGeodetic(e,e,0,t.lat,t.lon,0);return[{lat:r[0],lon:r[1]},{lat:n[0],lon:n[1]}]},t.prototype.rotationFromCompass=function(t,e){var r=0,n=0,o=0;switch(e){case 1:r=Math.PI/2;break;case 3:r=-Math.PI/2,o=Math.PI;break;case 6:n=-Math.PI/2,o=-Math.PI/2;break;case 8:n=Math.PI/2,o=Math.PI/2}
+var a=(new i.Matrix4).makeRotationZ(o),s=new i.Euler(r,n,t*Math.PI/180,"XYZ"),c=(new i.Matrix4).makeRotationFromEuler(s),u=(new i.Vector4).setAxisAngleFromRotationMatrix(c.multiply(a));return u.multiplyScalar(u.w).toArray().slice(0,3)},t}();r.GraphCalculator=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../Geo":228,"latlon-geohash":20,three:175}],309:[function(t,e,r){"use strict";var n=t("rxjs/Observable"),i=t("rxjs/Subject");t("rxjs/add/operator/catch"),t("rxjs/add/operator/concat"),t("rxjs/add/operator/do"),t("rxjs/add/operator/expand"),t("rxjs/add/operator/finally"),t("rxjs/add/operator/first"),t("rxjs/add/operator/last"),t("rxjs/add/operator/map"),t("rxjs/add/operator/mergeMap"),t("rxjs/add/operator/publishReplay");var o=function(){function t(t,e){this._graph$=n.Observable.of(t).concat(t.changed$).publishReplay(1).refCount(),this._graph$.subscribe(function(){}),this._imageLoadingService=e,this._firstGraphSubjects$=[],this._initializeCacheSubscriptions=[],this._sequenceSubscriptions=[],this._spatialSubscriptions=[]}return t.prototype.cacheNode$=function(t){var e=this,r=new i.Subject;this._firstGraphSubjects$.push(r);var o=r.publishReplay(1).refCount(),a=o.map(function(e){return e.getNode(t)}).mergeMap(function(t){return t.assetsCached?n.Observable.of(t):t.cacheAssets$()}).publishReplay(1).refCount();a.subscribe(function(t){e._imageLoadingService.loadnode$.next(t)},function(e){console.error("Failed to cache node ("+t+")",e)});var s=this._graph$.first().mergeMap(function(e){return e.isCachingFull(t)||!e.hasNode(t)?e.cacheFull$(t):e.isCachingFill(t)||!e.getNode(t).full?e.cacheFill$(t):n.Observable.of(e)}).do(function(e){e.hasInitializedCache(t)||e.initializeCache(t)}).finally(function(){null!=s&&(e._removeFromArray(s,e._initializeCacheSubscriptions),e._removeFromArray(r,e._firstGraphSubjects$))}).subscribe(function(t){r.next(t),r.complete()},function(t){r.error(t)});s.closed||this._initializeCacheSubscriptions.push(s);var c=o.mergeMap(function(e){return e.isCachingNodeSequence(t)||!e.hasNodeSequence(t)?e.cacheNodeSequence$(t):n.Observable.of(e)}).do(function(e){e.getNode(t).sequenceEdges.cached||e.cacheSequenceEdges(t)}).finally(function(){null!=c&&e._removeFromArray(c,e._sequenceSubscriptions)}).subscribe(function(t){},function(e){console.error("Failed to cache sequence edges ("+t+").",e)});c.closed||this._sequenceSubscriptions.push(c);var u=o.expand(function(e){return e.hasTiles(t)?n.Observable.empty():n.Observable.from(e.cacheTiles$(t)).mergeMap(function(e){return e.mergeMap(function(e){return e.isCachingTiles(t)?n.Observable.empty():n.Observable.of(e)}).catch(function(e,r){return console.error("Failed to cache tile data ("+t+").",e),n.Observable.empty()})})}).last().mergeMap(function(e){return e.hasSpatialArea(t)?n.Observable.of(e):n.Observable.from(e.cacheSpatialArea$(t)).mergeMap(function(e){return e.catch(function(e,r){return console.error("Failed to cache spatial nodes ("+t+").",e),n.Observable.empty()})})}).last().mergeMap(function(e){return e.hasNodeSequence(t)?n.Observable.of(e):e.cacheNodeSequence$(t)}).do(function(e){e.getNode(t).spatialEdges.cached||e.cacheSpatialEdges(t)}).finally(function(){null!=u&&e._removeFromArray(u,e._spatialSubscriptions)}).subscribe(function(t){},function(e){console.error("Failed to cache spatial edges ("+t+").",e)});return u.closed||this._spatialSubscriptions.push(u),a.first(function(t){return t.assetsCached})},t.prototype.cacheSequence$=function(t){return this._graph$.first().mergeMap(function(e){return e.isCachingSequence(t)||!e.hasSequence(t)?e.cacheSequence$(t):n.Observable.of(e)}).map(function(e){return e.getSequence(t)})},t.prototype.setFilter$=function(t){return this._resetSubscriptions(this._spatialSubscriptions),this._graph$.first().do(function(e){e.resetSpatialEdges(),e.setFilter(t)})},t.prototype.reset$=function(t){return this._abortSubjects(this._firstGraphSubjects$),this._resetSubscriptions(this._initializeCacheSubscriptions),this._resetSubscriptions(this._sequenceSubscriptions),this._resetSubscriptions(this._spatialSubscriptions),this._graph$.first().do(function(e){e.reset(t)})},t.prototype.uncache$=function(t){return this._graph$.first().do(function(e){e.uncache(t)})},t.prototype._abortSubjects=function(t){for(var e=0,r=t.slice();e<r.length;e++){var n=r[e];this._removeFromArray(n,t),n.error(new Error("Cache node request was aborted."))}},t.prototype._removeFromArray=function(t,e){var r=e.indexOf(t);-1!==r&&e.splice(r,1)},t.prototype._resetSubscriptions=function(t){for(var e=0,r=t.slice();e<r.length;e++){var n=r[e];this._removeFromArray(n,t),n.closed||n.unsubscribe()}},t}();r.GraphService=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/operator/catch":51,"rxjs/add/operator/concat":53,"rxjs/add/operator/do":58,"rxjs/add/operator/expand":59,"rxjs/add/operator/finally":61,"rxjs/add/operator/first":62,"rxjs/add/operator/last":63,"rxjs/add/operator/map":64,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/publishReplay":71}],310:[function(t,e,r){"use strict";var n=t("rxjs/Subject"),i=function(){function t(){this._loadnode$=new n.Subject,this._loadstatus$=this._loadnode$.scan(function(t,e){return t[e.key]=e.loadStatus,t},{}).publishReplay(1).refCount(),this._loadstatus$.subscribe(function(){})}return Object.defineProperty(t.prototype,"loadnode$",{get:function(){return this._loadnode$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"loadstatus$",{get:function(){return this._loadstatus$},enumerable:!0,configurable:!0}),t}();r.ImageLoadingService=i},{"rxjs/Subject":33}],311:[function(t,e,r){"use strict";var n=t("pbf"),i=function(){function t(){}return t.read=function(e){return new n(e).readFields(t._readMeshField,{faces:[],vertices:[]})},t._readMeshField=function(t,e,r){1===t?e.vertices.push(r.readFloat()):2===t&&e.faces.push(r.readVarint())},t}();r.MeshReader=i},{pbf:22}],312:[function(t,e,r){"use strict";t("rxjs/add/observable/combineLatest"),t("rxjs/add/operator/map");var n=function(){function t(t){this._cache=null,this._core=t,this._fill=null}return Object.defineProperty(t.prototype,"assetsCached",{get:function(){return null!=this._core&&null!=this._fill&&null!=this._cache&&null!=this._cache.image&&null!=this._cache.mesh},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"alt",{get:function(){return this._fill.calt},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"ca",{get:function(){return null!=this._fill.cca?this._fill.cca:this._fill.ca},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"capturedAt",{get:function(){return this._fill.captured_at},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"computedCA",{get:function(){return this._fill.cca},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"computedLatLon",{get:function(){return this._core.cl},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"focal",{get:function(){return this._fill.cfocal},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"full",{get:function(){return null!=this._fill},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fullPano",{get:function(){return null!=this._fill.gpano&&0===this._fill.gpano.CroppedAreaLeftPixels&&0===this._fill.gpano.CroppedAreaTopPixels&&this._fill.gpano.CroppedAreaImageWidthPixels===this._fill.gpano.FullPanoWidthPixels&&this._fill.gpano.CroppedAreaImageHeightPixels===this._fill.gpano.FullPanoHeightPixels},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"gpano",{get:function(){return this._fill.gpano},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"height",{get:function(){return this._fill.height},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"image",{get:function(){return this._cache.image},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"key",{get:function(){return this._core.key},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"latLon",{get:function(){return null!=this._core.cl?this._core.cl:this._core.l},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"loadStatus",{get:function(){return this._cache.loadStatus},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"merged",{get:function(){return null!=this._fill&&null!=this._fill.merge_version&&this._fill.merge_version>0},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mergeCC",{get:function(){return this._fill.merge_cc},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mergeVersion",{get:function(){return this._fill.merge_version},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mesh",{get:function(){return this._cache.mesh},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"orientation",{get:function(){return this._fill.orientation},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"originalCA",{get:function(){return this._fill.ca},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"originalLatLon",{get:function(){return this._core.l},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"pano",{get:function(){return null!=this._fill.gpano&&null!=this._fill.gpano.FullPanoWidthPixels},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"projectKey",{get:function(){return null!=this._fill.project?this._fill.project.key:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rotation",{get:function(){return this._fill.c_rotation},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"scale",{get:function(){return this._fill.atomic_scale},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"sequenceKey",{get:function(){return this._core.sequence.key},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"sequenceEdges",{get:function(){return this._cache.sequenceEdges},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"sequenceEdges$",{get:function(){return this._cache.sequenceEdges$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"spatialEdges",{get:function(){return this._cache.spatialEdges},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"spatialEdges$",{get:function(){return this._cache.spatialEdges$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"userKey",{get:function(){return this._fill.user.key},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"username",{get:function(){return this._fill.user.username},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"width",{get:function(){return this._fill.width},enumerable:!0,configurable:!0}),t.prototype.cacheAssets$=function(){var t=this;return this._cache.cacheAssets$(this.key,this.pano,this.merged).map(function(e){return t})},t.prototype.cacheImage$=function(t){var e=this;return this._cache.cacheImage$(this.key,t).map(function(t){return e})},t.prototype.cacheSequenceEdges=function(t){this._cache.cacheSequenceEdges(t)},t.prototype.cacheSpatialEdges=function(t){this._cache.cacheSpatialEdges(t)},t.prototype.dispose=function(){null!=this._cache&&(this._cache.dispose(),this._cache=null),this._core=null,this._fill=null},t.prototype.initializeCache=function(t){if(null!=this._cache)throw new Error("Node cache already initialized ("+this.key+").");this._cache=t},t.prototype.makeFull=function(t){if(null==t)throw new Error("Fill can not be null.");this._fill=t},t.prototype.resetSequenceEdges=function(){this._cache.resetSequenceEdges()},t.prototype.resetSpatialEdges=function(){this._cache.resetSpatialEdges()},t.prototype.uncache=function(){null!=this._cache&&(this._cache.dispose(),this._cache=null)},t}();r.Node=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/map":64}],313:[function(t,e,r){(function(e){"use strict";var n=t("rxjs/Subject"),i=t("rxjs/Observable");t("rxjs/add/observable/combineLatest"),t("rxjs/add/operator/publishReplay");var o=t("../Graph"),a=t("../Utils"),s=function(){function t(){this._disposed=!1,this._image=null,this._loadStatus={loaded:0,total:0},this._mesh=null,this._sequenceEdges={cached:!1,edges:[]},this._spatialEdges={cached:!1,edges:[]},this._sequenceEdgesChanged$=new n.Subject,this._sequenceEdges$=this._sequenceEdgesChanged$.startWith(this._sequenceEdges).publishReplay(1).refCount(),this._sequenceEdgesSubscription=this._sequenceEdges$.subscribe(function(){}),this._spatialEdgesChanged$=new n.Subject,this._spatialEdges$=this._spatialEdgesChanged$.startWith(this._spatialEdges).publishReplay(1).refCount(),this._spatialEdgesSubscription=this._spatialEdges$.subscribe(function(){}),this._cachingAssets$=null}return Object.defineProperty(t.prototype,"image",{get:function(){return this._image},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"loadStatus",{get:function(){return this._loadStatus},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mesh",{get:function(){return this._mesh},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"sequenceEdges",{get:function(){return this._sequenceEdges},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"sequenceEdges$",{get:function(){return this._sequenceEdges$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"spatialEdges",{get:function(){return this._spatialEdges},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"spatialEdges$",{get:function(){return this._spatialEdges$},enumerable:!0,configurable:!0}),t.prototype.cacheAssets$=function(t,e,r){var n=this;if(null!=this._cachingAssets$)return this._cachingAssets$;var o=e?a.Settings.basePanoramaSize:a.Settings.baseImageSize;return this._cachingAssets$=i.Observable.combineLatest(this._cacheImage$(t,o),this._cacheMesh$(t,r),function(t,e){return n._loadStatus.loaded=0,n._loadStatus.total=0,e&&(n._mesh=e.object,n._loadStatus.loaded+=e.loaded.loaded,n._loadStatus.total+=e.loaded.total),t&&(n._image=t.object,n._loadStatus.loaded+=t.loaded.loaded,n._loadStatus.total+=t.loaded.total),n}).finally(function(){n._cachingAssets$=null}).publishReplay(1).refCount(),this._cachingAssets$},t.prototype.cacheImage$=function(t,e){var r=this;return null!=this._image&&e<=Math.max(this._image.width,this._image.height)?i.Observable.of(this):this._cacheImage$(t,e).first(function(t){return null!=t.object}).do(function(t){r._disposeImage(),r._image=t.object}).map(function(t){return r})},t.prototype.cacheSequenceEdges=function(t){this._sequenceEdges={cached:!0,edges:t},this._sequenceEdgesChanged$.next(this._sequenceEdges)},t.prototype.cacheSpatialEdges=function(t){this._spatialEdges={cached:!0,edges:t},this._spatialEdgesChanged$.next(this._spatialEdges)},t.prototype.dispose=function(){this._sequenceEdgesSubscription.unsubscribe(),this._spatialEdgesSubscription.unsubscribe(),this._disposeImage(),this._mesh=null,this._loadStatus.loaded=0,this._loadStatus.total=0,this._sequenceEdges={cached:!1,edges:[]},this._spatialEdges={cached:!1,edges:[]},this._sequenceEdgesChanged$.next(this._sequenceEdges),this._spatialEdgesChanged$.next(this._spatialEdges),this._disposed=!0,null!=this._imageRequest&&this._imageRequest.abort(),null!=this._meshRequest&&this._meshRequest.abort()},t.prototype.resetSequenceEdges=function(){this._sequenceEdges={cached:!1,edges:[]},this._sequenceEdgesChanged$.next(this._sequenceEdges)},t.prototype.resetSpatialEdges=function(){this._spatialEdges={cached:!1,edges:[]},this._spatialEdgesChanged$.next(this._spatialEdges)},t.prototype._cacheImage$=function(t,e){var r=this;return i.Observable.create(function(n){var i=new XMLHttpRequest;i.open("GET",a.Urls.thumbnail(t,e),!0),i.responseType="arraybuffer",i.timeout=15e3,i.onload=function(e){if(200!==i.status)return r._imageRequest=null,void n.error(new Error("Failed to fetch image ("+t+"). Status: "+i.status+", "+i.statusText));var o=new Image;o.crossOrigin="Anonymous",o.onload=function(i){if(r._imageRequest=null,r._disposed)return window.URL.revokeObjectURL(o.src),void n.error(new Error("Image load was aborted ("+t+")"));n.next({loaded:{loaded:e.loaded,total:e.total},object:o}),n.complete()},o.onerror=function(e){r._imageRequest=null,n.error(new Error("Failed to load image ("+t+")"))};var a=new Blob([i.response]);o.src=window.URL.createObjectURL(a)},i.onprogress=function(t){r._disposed||n.next({loaded:{loaded:t.loaded,total:t.total},object:null})},i.onerror=function(e){r._imageRequest=null,n.error(new Error("Failed to fetch image ("+t+")"))},i.ontimeout=function(e){r._imageRequest=null,n.error(new Error("Image request timed out ("+t+")"))},i.onabort=function(e){r._imageRequest=null,n.error(new Error("Image request was aborted ("+t+")"))},r._imageRequest=i,i.send(null)})},t.prototype._cacheMesh$=function(t,r){var n=this;return i.Observable.create(function(i){if(!r)return i.next(n._createEmptyMeshLoadStatus()),void i.complete();var s=new XMLHttpRequest;s.open("GET",a.Urls.protoMesh(t),!0),s.responseType="arraybuffer",s.timeout=15e3,s.onload=function(t){if(n._meshRequest=null,!n._disposed){var r=200===s.status?o.MeshReader.read(new e(s.response)):{faces:[],vertices:[]};i.next({loaded:{loaded:t.loaded,total:t.total},object:r}),i.complete()}},s.onprogress=function(t){n._disposed||i.next({loaded:{loaded:t.loaded,total:t.total},object:null})},s.onerror=function(e){n._meshRequest=null,console.error("Failed to cache mesh ("+t+")"),i.next(n._createEmptyMeshLoadStatus()),i.complete()},s.ontimeout=function(e){n._meshRequest=null,console.error("Mesh request timed out ("+t+")"),i.next(n._createEmptyMeshLoadStatus()),i.complete()},s.onabort=function(e){n._meshRequest=null,i.error(new Error("Mesh request was aborted ("+t+")"))},n._meshRequest=s,s.send(null)})},t.prototype._createEmptyMeshLoadStatus=function(){return{loaded:{loaded:0,total:0},object:{faces:[],vertices:[]}}},t.prototype._disposeImage=function(){null!=this._image&&window.URL.revokeObjectURL(this._image.src),this._image=null},t}();r.NodeCache=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s}).call(this,t("buffer").Buffer)},{"../Graph":229,"../Utils":234,buffer:5,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/publishReplay":71}],314:[function(t,e,r){"use strict";var n=t("underscore"),i=function(){function t(t){this._key=t.key,this._keys=t.keys}return Object.defineProperty(t.prototype,"key",{get:function(){return this._key},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"keys",{get:function(){return this._keys},enumerable:!0,configurable:!0}),t.prototype.dispose=function(){this._key=null,this._keys=null},t.prototype.findNextKey=function(t){var e=n.indexOf(this._keys,t);return e+1>=this._keys.length||-1===e?null:this._keys[e+1]},t.prototype.findPrevKey=function(t){var e=n.indexOf(this._keys,t);return 0===e||-1===e?null:this._keys[e-1]},t}();r.Sequence=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{underscore:176}],315:[function(t,e,r){"use strict";var n=t("three"),i=t("../../Edge"),o=t("../../Error"),a=t("../../Geo"),s=function(){function t(t,e,r){this._spatial=new a.Spatial,this._geoCoords=new a.GeoCoords,this._settings=null!=t?t:new i.EdgeCalculatorSettings,this._directions=null!=e?e:new i.EdgeCalculatorDirections,this._coefficients=null!=r?r:new i.EdgeCalculatorCoefficients}return t.prototype.getPotentialEdges=function(t,e,r){if(!t.full)throw new o.ArgumentMapillaryError("Node has to be full.");if(!t.merged)return[];for(var i=this._spatial.viewingDirection(t.rotation),a=this._spatial.angleToPlane(i.toArray(),[0,0,1]),s=[],c=0,u=e;c<u.length;c++){var h=u[c];if(h.merged&&h.key!==t.key){var l=this._geoCoords.geodeticToEnu(h.latLon.lat,h.latLon.lon,h.alt,t.latLon.lat,t.latLon.lon,t.alt),p=new n.Vector3(l[0],l[1],l[2]),f=p.length();if(!(f>this._settings.maxDistance&&r.indexOf(h.key)<0)){var d=this._spatial.angleBetweenVector2(i.x,i.y,p.x,p.y),m=this._spatial.angleToPlane(p.toArray(),[0,0,1]),v=this._spatial.viewingDirection(h.rotation),g=this._spatial.angleBetweenVector2(i.x,i.y,v.x,v.y),y=this._spatial.angleToPlane(v.toArray(),[0,0,1]),b=y-a,_=this._spatial.relativeRotationAngle(t.rotation,h.rotation),x=this._spatial.angleBetweenVector2(1,0,p.x,p.y),w=null!=h.sequenceKey&&null!=t.sequenceKey&&h.sequenceKey===t.sequenceKey,S=null==h.mergeCC&&null==t.mergeCC||h.mergeCC===t.mergeCC,M=h.userKey===t.userKey,E={capturedAt:h.capturedAt,directionChange:g,distance:f,fullPano:h.fullPano,key:h.key,motionChange:d,rotation:_,sameMergeCC:S,sameSequence:w,sameUser:M,sequenceKey:h.sequenceKey,verticalDirectionChange:b,verticalMotion:m,worldMotionAzimuth:x};s.push(E)}}}return s},t.prototype.computeSequenceEdges=function(t,e){if(!t.full)throw new o.ArgumentMapillaryError("Node has to be full.");if(t.sequenceKey!==e.key)throw new o.ArgumentMapillaryError("Node and sequence does not correspond.");var r=[],n=e.findNextKey(t.key);null!=n&&r.push({data:{direction:i.EdgeDirection.Next,worldMotionAzimuth:Number.NaN},from:t.key,to:n});var a=e.findPrevKey(t.key);return null!=a&&r.push({data:{direction:i.EdgeDirection.Prev,worldMotionAzimuth:Number.NaN},from:t.key,to:a}),r},t.prototype.computeSimilarEdges=function(t,e){var r=this;if(!t.full)throw new o.ArgumentMapillaryError("Node has to be full.");for(var n=t.fullPano,a={},s=0,c=e;s<c.length;s++){var u=c[s];if(null!=u.sequenceKey&&(!u.sameSequence&&u.sameMergeCC)){if(n){if(!u.fullPano)continue}else if(!u.fullPano&&Math.abs(u.directionChange)>this._settings.similarMaxDirectionChange)continue;u.distance>this._settings.similarMaxDistance||u.sameUser&&Math.abs(u.capturedAt-t.capturedAt)<this._settings.similarMinTimeDifference||(null==a[u.sequenceKey]&&(a[u.sequenceKey]=[]),a[u.sequenceKey].push(u))}}var h=[],l=t.fullPano?function(t){return t.distance}:function(t){return r._coefficients.similarDistance*t.distance+r._coefficients.similarRotation*t.rotation};for(var p in a)if(a.hasOwnProperty(p)){for(var f=Number.MAX_VALUE,d=null,m=0,v=a[p];m<v.length;m++){var u=v[m],g=l(u);g<f&&(f=g,d=u)}null!=d&&h.push(d)}return h.map(function(e){return{data:{direction:i.EdgeDirection.Similar,worldMotionAzimuth:e.worldMotionAzimuth},from:t.key,to:e.key}})},t.prototype.computeStepEdges=function(t,e,r,n){if(!t.full)throw new o.ArgumentMapillaryError("Node has to be full.");var i=[];if(t.fullPano)return i;for(var a in this._directions.steps)if(this._directions.steps.hasOwnProperty(a)){for(var s=this._directions.steps[a],c=Number.MAX_VALUE,u=null,h=null,l=0,p=e;l<p.length;l++){var f=p[l];if(!f.fullPano&&!(Math.abs(f.directionChange)>this._settings.stepMaxDirectionChange)){var d=this._spatial.angleDifference(s.motionChange,f.motionChange),m=this._spatial.angleDifference(f.directionChange,d),v=Math.max(Math.abs(d),Math.abs(m));if(!(Math.abs(v)>this._settings.stepMaxDrift)){var g=f.key;if(!s.useFallback||g!==r&&g!==n||(h=f),!(f.distance>this._settings.stepMaxDistance)){d=Math.sqrt(d*d+f.verticalMotion*f.verticalMotion);var y=this._coefficients.stepPreferredDistance*Math.abs(f.distance-this._settings.stepPreferredDistance)/this._settings.stepMaxDistance+this._coefficients.stepMotion*d/this._settings.stepMaxDrift+this._coefficients.stepRotation*f.rotation/this._settings.stepMaxDirectionChange+this._coefficients.stepSequencePenalty*(f.sameSequence?0:1)+this._coefficients.stepMergeCCPenalty*(f.sameMergeCC?0:1);y<c&&(c=y,u=f)}}}}u=null==u?h:u,null!=u&&i.push({data:{direction:s.direction,worldMotionAzimuth:u.worldMotionAzimuth},from:t.key,to:u.key})}return i},t.prototype.computeTurnEdges=function(t,e){if(!t.full)throw new o.ArgumentMapillaryError("Node has to be full.");var r=[];if(t.fullPano)return r;for(var n in this._directions.turns)if(this._directions.turns.hasOwnProperty(n)){for(var a=this._directions.turns[n],s=Number.MAX_VALUE,c=null,u=0,h=e;u<h.length;u++){var l=h[u];if(!l.fullPano&&!(l.distance>this._settings.turnMaxDistance)){var p=a.direction!==i.EdgeDirection.TurnU&&l.distance<this._settings.turnMaxRigDistance&&Math.abs(l.directionChange)>this._settings.turnMinRigDirectionChange,f=this._spatial.angleDifference(a.directionChange,l.directionChange),d=void 0;if(p&&l.directionChange*a.directionChange>0&&Math.abs(l.directionChange)<Math.abs(a.directionChange))d=-Math.PI/2+Math.abs(l.directionChange);else{if(Math.abs(f)>this._settings.turnMaxDirectionChange)continue;var m=a.motionChange?this._spatial.angleDifference(a.motionChange,l.motionChange):0;m=Math.sqrt(m*m+l.verticalMotion*l.verticalMotion),d=this._coefficients.turnDistance*l.distance/this._settings.turnMaxDistance+this._coefficients.turnMotion*m/Math.PI+this._coefficients.turnSequencePenalty*(l.sameSequence?0:1)+this._coefficients.turnMergeCCPenalty*(l.sameMergeCC?0:1)}d<s&&(s=d,c=l)}}null!=c&&r.push({data:{direction:a.direction,worldMotionAzimuth:c.worldMotionAzimuth},from:t.key,to:c.key})}return r},t.prototype.computePerspectiveToPanoEdges=function(t,e){if(!t.full)throw new o.ArgumentMapillaryError("Node has to be full.");if(t.fullPano)return[];for(var r=Number.MAX_VALUE,n=null,a=0,s=e;a<s.length;a++){var c=s[a];if(c.fullPano){var u=this._coefficients.panoPreferredDistance*Math.abs(c.distance-this._settings.panoPreferredDistance)/this._settings.panoMaxDistance+this._coefficients.panoMotion*Math.abs(c.motionChange)/Math.PI+this._coefficients.panoMergeCCPenalty*(c.sameMergeCC?0:1);u<r&&(r=u,n=c)}}return null==n?[]:[{data:{direction:i.EdgeDirection.Pano,worldMotionAzimuth:n.worldMotionAzimuth},from:t.key,to:n.key}]},t.prototype.computePanoEdges=function(t,e){if(!t.full)throw new o.ArgumentMapillaryError("Node has to be full.");if(!t.fullPano)return[];for(var r=[],n=[],a=[],s=0,c=e;s<c.length;s++){var u=c[s];if(!(u.distance>this._settings.panoMaxDistance))if(u.fullPano){if(u.distance<this._settings.panoMinDistance)continue;n.push(u)}else for(var h in this._directions.panos)if(this._directions.panos.hasOwnProperty(h)){var l=this._directions.panos[h],p=this._spatial.angleDifference(u.directionChange,u.motionChange),f=this._spatial.angleDifference(l.directionChange,p);if(!(Math.abs(f)>this._settings.panoMaxStepTurnChange)){a.push([l.direction,u]);break}}}for(var d=Math.PI/this._settings.panoMaxItems,m=[],v=[],g=0;g<this._settings.panoMaxItems;g++){for(var y=g/this._settings.panoMaxItems*2*Math.PI,b=Number.MAX_VALUE,_=null,x=0,w=n;x<w.length;x++){var u=w[x],S=this._spatial.angleDifference(y,u.motionChange);if(!(Math.abs(S)>d)){for(var M=Number.MAX_VALUE,E=0,T=m;E<T.length;E++){var C=T[E],O=Math.abs(this._spatial.angleDifference(C,u.motionChange));O<M&&(M=O)}if(!(M<=d)){var P=this._coefficients.panoPreferredDistance*Math.abs(u.distance-this._settings.panoPreferredDistance)/this._settings.panoMaxDistance+this._coefficients.panoMotion*Math.abs(S)/d+this._coefficients.panoSequencePenalty*(u.sameSequence?0:1)+this._coefficients.panoMergeCCPenalty*(u.sameMergeCC?0:1);P<b&&(b=P,_=u)}}}null!=_?(m.push(_.motionChange),r.push({data:{direction:i.EdgeDirection.Pano,worldMotionAzimuth:_.worldMotionAzimuth},from:t.key,to:_.key})):v.push(y)}var A={};A[i.EdgeDirection.Pano]=m,A[i.EdgeDirection.StepForward]=[],A[i.EdgeDirection.StepLeft]=[],A[i.EdgeDirection.StepBackward]=[],A[i.EdgeDirection.StepRight]=[];for(var j=0,R=v;j<R.length;j++){var L=R[j],N=[];for(var h in this._directions.panos)if(this._directions.panos.hasOwnProperty(h)){for(var l=this._directions.panos[h],I=A[i.EdgeDirection.Pano].concat(A[l.direction]).concat(A[l.prev]).concat(A[l.next]),b=Number.MAX_VALUE,_=null,D=0,k=a;D<k.length;D++){var u=k[D];if(u[0]===l.direction){var F=this._spatial.angleDifference(L,u[1].motionChange);if(!(Math.abs(F)>d)){for(var U=Number.MAX_VALUE,B=0,z=I;B<z.length;B++){var C=z[B],M=Math.abs(this._spatial.angleDifference(C,u[1].motionChange));M<U&&(U=M)}if(!(U<=d)){var P=this._coefficients.panoPreferredDistance*Math.abs(u[1].distance-this._settings.panoPreferredDistance)/this._settings.panoMaxDistance+this._coefficients.panoMotion*Math.abs(F)/d+this._coefficients.panoMergeCCPenalty*(u[1].sameMergeCC?0:1);P<b&&(b=P,_=u)}}}}null!=_&&(N.push(_),r.push({data:{direction:_[0],worldMotionAzimuth:_[1].worldMotionAzimuth},from:t.key,to:_[1].key}))}for(var G=0,$=N;G<$.length;G++){var V=$[G];A[V[0]].push(V[1].motionChange)}}return r},t}();r.EdgeCalculator=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../../Edge":226,"../../Error":227,"../../Geo":228,three:175}],316:[function(t,e,r){"use strict";var n=function(){function t(){this.panoPreferredDistance=2,this.panoMotion=2,this.panoSequencePenalty=1,this.panoMergeCCPenalty=4,this.stepPreferredDistance=4,this.stepMotion=3,this.stepRotation=4,this.stepSequencePenalty=2,this.stepMergeCCPenalty=6,this.similarDistance=2,this.similarRotation=3,this.turnDistance=4,this.turnMotion=2,this.turnSequencePenalty=1,this.turnMergeCCPenalty=4}return t}();r.EdgeCalculatorCoefficients=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],317:[function(t,e,r){"use strict";var n=t("../../Edge"),i=function(){function t(){this.steps={},this.turns={},this.panos={},this.steps[n.EdgeDirection.StepForward]={direction:n.EdgeDirection.StepForward,motionChange:0,useFallback:!0},this.steps[n.EdgeDirection.StepBackward]={direction:n.EdgeDirection.StepBackward,motionChange:Math.PI,useFallback:!0},this.steps[n.EdgeDirection.StepLeft]={direction:n.EdgeDirection.StepLeft,motionChange:Math.PI/2,useFallback:!1},this.steps[n.EdgeDirection.StepRight]={direction:n.EdgeDirection.StepRight,motionChange:-Math.PI/2,useFallback:!1},this.turns[n.EdgeDirection.TurnLeft]={direction:n.EdgeDirection.TurnLeft,directionChange:Math.PI/2,motionChange:Math.PI/4},this.turns[n.EdgeDirection.TurnRight]={direction:n.EdgeDirection.TurnRight,directionChange:-Math.PI/2,motionChange:-Math.PI/4},this.turns[n.EdgeDirection.TurnU]={direction:n.EdgeDirection.TurnU,directionChange:Math.PI,motionChange:null},this.panos[n.EdgeDirection.StepForward]={direction:n.EdgeDirection.StepForward,directionChange:0,next:n.EdgeDirection.StepLeft,prev:n.EdgeDirection.StepRight},this.panos[n.EdgeDirection.StepBackward]={direction:n.EdgeDirection.StepBackward,directionChange:Math.PI,next:n.EdgeDirection.StepRight,prev:n.EdgeDirection.StepLeft},this.panos[n.EdgeDirection.StepLeft]={direction:n.EdgeDirection.StepLeft,directionChange:Math.PI/2,next:n.EdgeDirection.StepBackward,prev:n.EdgeDirection.StepForward},this.panos[n.EdgeDirection.StepRight]={direction:n.EdgeDirection.StepRight,directionChange:-Math.PI/2,next:n.EdgeDirection.StepForward,prev:n.EdgeDirection.StepBackward}}return t}();r.EdgeCalculatorDirections=i},{"../../Edge":226}],318:[function(t,e,r){"use strict";var n=function(){function t(){this.panoMinDistance=.1,this.panoMaxDistance=20,this.panoPreferredDistance=5,this.panoMaxItems=4,this.panoMaxStepTurnChange=Math.PI/8,this.rotationMaxDistance=this.turnMaxRigDistance,this.rotationMaxDirectionChange=Math.PI/6,this.rotationMaxVerticalDirectionChange=Math.PI/8,this.similarMaxDirectionChange=Math.PI/8,this.similarMaxDistance=12,this.similarMinTimeDifference=432e5,this.stepMaxDistance=20,this.stepMaxDirectionChange=Math.PI/6,this.stepMaxDrift=Math.PI/6,this.stepPreferredDistance=4,this.turnMaxDistance=15,this.turnMaxDirectionChange=2*Math.PI/9,this.turnMaxRigDistance=.65,this.turnMinRigDirectionChange=Math.PI/6}return Object.defineProperty(t.prototype,"maxDistance",{get:function(){return Math.max(this.panoMaxDistance,this.similarMaxDistance,this.stepMaxDistance,this.turnMaxDistance)},enumerable:!0,configurable:!0}),t}();r.EdgeCalculatorSettings=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],319:[function(t,e,r){"use strict";!function(t){t[t.Next=0]="Next",t[t.Prev=1]="Prev",t[t.StepLeft=2]="StepLeft",t[t.StepRight=3]="StepRight",t[t.StepForward=4]="StepForward",t[t.StepBackward=5]="StepBackward",t[t.TurnLeft=6]="TurnLeft",t[t.TurnRight=7]="TurnRight",t[t.TurnU=8]="TurnU",t[t.Pano=9]="Pano",t[t.Similar=10]="Similar"
+}(r.EdgeDirection||(r.EdgeDirection={}))},{}],320:[function(t,e,r){"use strict";var n=t("underscore"),i=t("virtual-dom"),o=t("rxjs/Subject");t("rxjs/add/operator/combineLatest"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/pluck"),t("rxjs/add/operator/scan");var a=t("../Render"),s=function(){function t(t,e,r){this._adaptiveOperation$=new o.Subject,this._render$=new o.Subject,this._renderAdaptive$=new o.Subject,this._renderService=e,this._currentFrame$=r;var s=i.create(i.h("div.domRenderer",[]));t.appendChild(s),this._offset$=this._adaptiveOperation$.scan(function(t,e){return e(t)},{elementHeight:t.offsetHeight,elementWidth:t.offsetWidth,imageAspect:0,renderMode:a.RenderMode.Fill}).filter(function(t){return t.imageAspect>0&&t.elementWidth>0&&t.elementHeight>0}).map(function(t){var e=t.elementWidth/t.elementHeight,r=t.imageAspect/e,n=0,i=0;return t.renderMode===a.RenderMode.Letterbox?t.imageAspect>e?n=t.elementHeight*(1-1/r)/2:i=t.elementWidth*(1-r)/2:t.imageAspect>e?i=-t.elementWidth*(r-1)/2:n=-t.elementHeight*(1/r-1)/2,{bottom:n,left:i,right:i,top:n}}),this._currentFrame$.filter(function(t){return null!=t.state.currentNode}).distinctUntilChanged(function(t,e){return t===e},function(t){return t.state.currentNode.key}).map(function(t){return t.state.currentTransform.basicAspect}).map(function(t){return function(e){return e.imageAspect=t,e}}).subscribe(this._adaptiveOperation$),this._renderAdaptive$.scan(function(t,e){return null==e.vnode?delete t[e.name]:t[e.name]=e.vnode,t},{}).combineLatest(this._offset$).map(function(t){var e=n.values(t[0]),r=t[1],o={style:{bottom:r.bottom+"px",left:r.left+"px","pointer-events":"none",position:"absolute",right:r.right+"px",top:r.top+"px"}};return{name:"adaptiveDomRenderer",vnode:i.h("div.adaptiveDomRenderer",o,e)}}).subscribe(this._render$),this._vNode$=this._render$.scan(function(t,e){return null==e.vnode?delete t[e.name]:t[e.name]=e.vnode,t},{}).map(function(t){var e=n.values(t);return i.h("div.domRenderer",e)}),this._vPatch$=this._vNode$.scan(function(t,e){return t.vpatch=i.diff(t.vnode,e),t.vnode=e,t},{vnode:i.h("div.domRenderer",[]),vpatch:null}).pluck("vpatch"),this._element$=this._vPatch$.scan(function(t,e){return i.patch(t,e)},s).publishReplay(1).refCount(),this._element$.subscribe(function(){}),this._renderService.size$.map(function(t){return function(e){return e.elementWidth=t.width,e.elementHeight=t.height,e}}).subscribe(this._adaptiveOperation$),this._renderService.renderMode$.map(function(t){return function(e){return e.renderMode=t,e}}).subscribe(this._adaptiveOperation$)}return Object.defineProperty(t.prototype,"element$",{get:function(){return this._element$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"render$",{get:function(){return this._render$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"renderAdaptive$",{get:function(){return this._renderAdaptive$},enumerable:!0,configurable:!0}),t.prototype.clear=function(t){this._renderAdaptive$.next({name:t,vnode:null}),this._render$.next({name:t,vnode:null})},t}();r.DOMRenderer=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../Render":231,"rxjs/Subject":33,"rxjs/add/operator/combineLatest":52,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/pluck":69,"rxjs/add/operator/scan":72,underscore:176,"virtual-dom":181}],321:[function(t,e,r){"use strict";var n;!function(t){t[t.Background=0]="Background",t[t.Foreground=1]="Foreground"}(n=r.GLRenderStage||(r.GLRenderStage={})),Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],322:[function(t,e,r){"use strict";var n=t("three"),i=t("rxjs/Observable"),o=t("rxjs/Subject");t("rxjs/add/observable/combineLatest"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/first"),t("rxjs/add/operator/map"),t("rxjs/add/operator/merge"),t("rxjs/add/operator/mergeMap"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/share"),t("rxjs/add/operator/startWith");var a=t("../Render"),s=function(){function t(t,e){var r=this;this._renderFrame$=new o.Subject,this._renderCameraOperation$=new o.Subject,this._render$=new o.Subject,this._clear$=new o.Subject,this._renderOperation$=new o.Subject,this._rendererOperation$=new o.Subject,this._eraserOperation$=new o.Subject,this._renderService=e,this._renderer$=this._rendererOperation$.scan(function(t,e){return e(t)},{needsRender:!1,renderer:null}),this._renderCollection$=this._renderOperation$.scan(function(t,e){return e(t)},{}).share(),this._renderCamera$=this._renderCameraOperation$.scan(function(t,e){return e(t)},{frameId:-1,needsRender:!1,perspective:null}),this._eraser$=this._eraserOperation$.startWith(function(t){return t}).scan(function(t,e){return e(t)},{needsRender:!1}),i.Observable.combineLatest([this._renderer$,this._renderCollection$,this._renderCamera$,this._eraser$],function(t,e,r,n){return{camera:r,eraser:n,renderer:t,renders:Object.keys(e).map(function(t){return e[t]})}}).filter(function(t){for(var e=t.renderer.needsRender||t.camera.needsRender||t.eraser.needsRender,r=t.camera.frameId,n=0,i=t.renders;n<i.length;n++){var o=i[n];if(o.frameId!==r)return!1;e=e||o.needsRender}return e}).distinctUntilChanged(function(t,e){return t===e},function(t){return t.eraser.needsRender?-1:t.camera.frameId}).subscribe(function(t){t.renderer.needsRender=!1,t.camera.needsRender=!1,t.eraser.needsRender=!1;for(var e=t.camera.perspective,r=[],n=[],i=0,o=t.renders;i<o.length;i++){var s=o[i];s.stage===a.GLRenderStage.Background?r.push(s.render):s.stage===a.GLRenderStage.Foreground&&n.push(s.render)}var c=t.renderer.renderer;c.clear();for(var u=0,h=r;u<h.length;u++){var s=h[u];s(e,c)}c.clearDepth();for(var l=0,p=n;l<p.length;l++){var s=p[l];s(e,c)}}),this._renderFrame$.map(function(t){return function(e){return e.frameId=t.frameId,e.perspective=t.perspective,!0===t.changed&&(e.needsRender=!0),e}}).subscribe(this._renderCameraOperation$),this._renderFrameSubscribe();var s=this._render$.map(function(t){return function(e){return e[t.name]=t.render,e}}),c=this._clear$.map(function(t){return function(e){return delete e[t],e}});i.Observable.merge(s,c).subscribe(this._renderOperation$),this._webGLRenderer$=this._render$.first().map(function(r){var i=e.element,o=new n.WebGLRenderer;return o.setPixelRatio(window.devicePixelRatio),o.setSize(i.offsetWidth,i.offsetHeight),o.setClearColor(new n.Color(2105376),1),o.autoClear=!1,o.domElement.style.position="absolute",t.appendChild(o.domElement),o}).publishReplay(1).refCount(),this._webGLRenderer$.subscribe(function(){});var u=this._webGLRenderer$.first().map(function(t){return function(e){return e.needsRender=!0,e.renderer=t,e}}),h=this._renderService.size$.map(function(t){return function(e){return null==e.renderer?e:(e.renderer.setSize(t.width,t.height),e.needsRender=!0,e)}}),l=this._clear$.map(function(t){return function(t){return null==t.renderer?t:(t.needsRender=!0,t)}});i.Observable.merge(u,h,l).subscribe(this._rendererOperation$);var p=this._renderCollection$.filter(function(t){return 0===Object.keys(t).length}).share();p.subscribe(function(t){null!=r._renderFrameSubscription&&(r._renderFrameSubscription.unsubscribe(),r._renderFrameSubscription=null,r._renderFrameSubscribe())}),p.map(function(t){return function(t){return t.needsRender=!0,t}}).subscribe(this._eraserOperation$)}return Object.defineProperty(t.prototype,"render$",{get:function(){return this._render$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"webGLRenderer$",{get:function(){return this._webGLRenderer$},enumerable:!0,configurable:!0}),t.prototype.clear=function(t){this._clear$.next(t)},t.prototype._renderFrameSubscribe=function(){var t=this;this._render$.first().map(function(t){return function(t){return t.needsRender=!0,t}}).subscribe(function(e){t._renderCameraOperation$.next(e)}),this._renderFrameSubscription=this._render$.first().mergeMap(function(e){return t._renderService.renderCameraFrame$}).subscribe(this._renderFrame$)},t}();r.GLRenderer=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../Render":231,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/scan":72,"rxjs/add/operator/share":73,"rxjs/add/operator/startWith":77,three:175}],323:[function(t,e,r){"use strict";var n=t("three"),i=t("../Geo"),o=t("../Render"),a=function(){function t(t,e,r){this.alpha=-1,this.zoom=0,this._frameId=-1,this._changed=!1,this._changedForFrame=-1,this.currentAspect=1,this.currentPano=!1,this.previousAspect=1,this.previousPano=!1,this.renderMode=r,this._spatial=new i.Spatial,this._camera=new i.Camera;var o=this._getPerspectiveCameraAspect(t,e);this._perspective=new n.PerspectiveCamera(50,o,.4,1e4),this._perspective.matrixAutoUpdate=!1,this._rotation={phi:0,theta:0}}return Object.defineProperty(t.prototype,"camera",{get:function(){return this._camera},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"changed",{get:function(){return this.frameId===this._changedForFrame},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"frameId",{get:function(){return this._frameId},set:function(t){this._frameId=t,this._changed&&(this._changed=!1,this._changedForFrame=t)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"perspective",{get:function(){return this._perspective},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"rotation",{get:function(){return this._rotation},enumerable:!0,configurable:!0}),t.prototype.updateAspect=function(t,e){var r=this._getPerspectiveCameraAspect(t,e);this._perspective.aspect=r,this._changed=!0},t.prototype.updateProjection=function(){var t=this._getAspect(this.currentAspect,this.currentPano,this.perspective.aspect),e=this._getAspect(this.previousAspect,this.previousPano,this.perspective.aspect),r=(1-this.alpha)*e+this.alpha*t,n=this._getVerticalFov(r,this._camera.focal,this.zoom);this._perspective.fov=n,this._perspective.updateProjectionMatrix(),this._changed=!0},t.prototype.updatePerspective=function(t){this._perspective.up.copy(t.up),this._perspective.position.copy(t.position),this._perspective.lookAt(t.lookat),this._perspective.updateMatrix(),this._perspective.updateMatrixWorld(!1),this._changed=!0},t.prototype.updateRotation=function(t){this._rotation=this._getRotation(t)},t.prototype._getVerticalFov=function(t,e,r){return 2*Math.atan(.5/(Math.pow(2,r)*t*e))*180/Math.PI},t.prototype._getAspect=function(t,e,r){if(e)return 1;var n=Math.max(1,1/t);return(this.renderMode===o.RenderMode.Letterbox?t>r:t<r)?n*r:n*t},t.prototype._getPerspectiveCameraAspect=function(t,e){return 0===t?0:t/e},t.prototype._getRotation=function(t){var e=t.lookat.clone().sub(t.position),r=t.up.clone(),n=e.clone().dot(r),i=e.clone().sub(r.clone().multiplyScalar(n));return{phi:Math.atan2(i.y,i.x),theta:Math.PI/2-this._spatial.angleToPlane(e.toArray(),[0,0,1])}},t}();r.RenderCamera=a,Object.defineProperty(r,"__esModule",{value:!0}),r.default=a},{"../Geo":228,"../Render":231,three:175}],324:[function(t,e,r){"use strict";var n;!function(t){t[t.Letterbox=0]="Letterbox",t[t.Fill=1]="Fill"}(n=r.RenderMode||(r.RenderMode={})),Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],325:[function(t,e,r){"use strict";var n=t("rxjs/Subject"),i=t("rxjs/BehaviorSubject");t("rxjs/add/observable/combineLatest"),t("rxjs/add/operator/do"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/skip"),t("rxjs/add/operator/startWith"),t("rxjs/add/operator/withLatestFrom");var o=t("../Geo"),a=t("../Render"),s=function(){function t(t,e,r){var s=this;this._element=t,this._currentFrame$=e,this._spatial=new o.Spatial,r=null!=r?r:a.RenderMode.Fill,this._resize$=new n.Subject,this._renderCameraOperation$=new n.Subject,this._size$=new i.BehaviorSubject({height:this._element.offsetHeight,width:this._element.offsetWidth}),this._resize$.map(function(){return{height:s._element.offsetHeight,width:s._element.offsetWidth}}).subscribe(this._size$),this._renderMode$=new i.BehaviorSubject(r),this._renderCameraHolder$=this._renderCameraOperation$.startWith(function(t){return t}).scan(function(t,e){return e(t)},new a.RenderCamera(this._element.offsetWidth,this._element.offsetHeight,r)).publishReplay(1).refCount(),this._renderCameraFrame$=this._currentFrame$.withLatestFrom(this._renderCameraHolder$,function(t,e){return[t,e]}).do(function(t){var e=t[0],r=t[1],n=e.state.camera;if(r.alpha!==e.state.alpha||r.zoom!==e.state.zoom||r.camera.diff(n)>1e-9){var i=e.state.currentTransform,o=null!=e.state.previousTransform?e.state.previousTransform:e.state.currentTransform,a=null!=e.state.previousNode?e.state.previousNode:e.state.currentNode;r.currentAspect=i.basicAspect,r.currentPano=e.state.currentNode.pano,r.previousAspect=o.basicAspect,r.previousPano=a.pano,r.alpha=e.state.alpha,r.zoom=e.state.zoom,r.camera.copy(n),r.updatePerspective(n),r.updateRotation(n),r.updateProjection()}r.frameId=e.id}).map(function(t){return t[1]}).publishReplay(1).refCount(),this._renderCamera$=this._renderCameraFrame$.filter(function(t){return t.changed}).publishReplay(1).refCount(),this._bearing$=this._renderCamera$.map(function(t){var e=s._spatial.radToDeg(s._spatial.azimuthalToBearing(t.rotation.phi));return s._spatial.wrap(e,0,360)}).publishReplay(1).refCount(),this._size$.skip(1).map(function(t){return function(e){return e.updateAspect(t.width,t.height),e.updateProjection(),e}}).subscribe(this._renderCameraOperation$),this._renderMode$.skip(1).map(function(t){return function(e){return e.renderMode=t,e.updateProjection(),e}}).subscribe(this._renderCameraOperation$),this._bearing$.subscribe(function(){}),this._renderCameraHolder$.subscribe(function(){}),this._size$.subscribe(function(){}),this._renderMode$.subscribe(function(){}),this._renderCamera$.subscribe(function(){}),this._renderCameraFrame$.subscribe(function(){})}return Object.defineProperty(t.prototype,"bearing$",{get:function(){return this._bearing$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){return this._element},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"resize$",{get:function(){return this._resize$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"size$",{get:function(){return this._size$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"renderMode$",{get:function(){return this._renderMode$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"renderCameraFrame$",{get:function(){return this._renderCameraFrame$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"renderCamera$",{get:function(){return this._renderCamera$},enumerable:!0,configurable:!0}),t}();r.RenderService=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../Geo":228,"../Render":231,"rxjs/BehaviorSubject":25,"rxjs/Subject":33,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/skip":74,"rxjs/add/operator/startWith":77,"rxjs/add/operator/withLatestFrom":82}],326:[function(t,e,r){"use strict";var n;!function(t){t[t.Traversing=0]="Traversing",t[t.Waiting=1]="Waiting"}(n=r.State||(r.State={})),Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],327:[function(t,e,r){"use strict";var n=t("../State"),i=t("../Geo"),o=function(){function t(){this._state=new n.TraversingState({alpha:1,camera:new i.Camera,currentIndex:-1,reference:{alt:0,lat:0,lon:0},trajectory:[],zoom:0})}return t.prototype.traverse=function(){this._state=this._state.traverse()},t.prototype.wait=function(){this._state=this._state.wait()},Object.defineProperty(t.prototype,"state",{get:function(){if(this._state instanceof n.TraversingState)return n.State.Traversing;if(this._state instanceof n.WaitingState)return n.State.Waiting;throw new Error("Invalid state")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"reference",{get:function(){return this._state.reference},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"alpha",{get:function(){return this._state.alpha},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"camera",{get:function(){return this._state.camera},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"zoom",{get:function(){return this._state.zoom},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentNode",{get:function(){return this._state.currentNode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"previousNode",{get:function(){return this._state.previousNode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentCamera",{get:function(){return this._state.currentCamera},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentTransform",{get:function(){return this._state.currentTransform},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"previousTransform",{get:function(){return this._state.previousTransform},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"trajectory",{get:function(){return this._state.trajectory},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentIndex",{get:function(){return this._state.currentIndex},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"lastNode",{get:function(){return this._state.trajectory[this._state.trajectory.length-1]},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"nodesAhead",{get:function(){return this._state.trajectory.length-1-this._state.currentIndex},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"motionless",{get:function(){return this._state.motionless},enumerable:!0,configurable:!0}),t.prototype.getCenter=function(){return this._state.getCenter()},t.prototype.setCenter=function(t){this._state.setCenter(t)},t.prototype.setZoom=function(t){this._state.setZoom(t)},t.prototype.update=function(t){this._state.update(t)},t.prototype.append=function(t){this._state.append(t)},t.prototype.prepend=function(t){this._state.prepend(t)},t.prototype.remove=function(t){this._state.remove(t)},t.prototype.clear=function(){this._state.clear()},t.prototype.clearPrior=function(){this._state.clearPrior()},t.prototype.cut=function(){this._state.cut()},t.prototype.set=function(t){this._state.set(t)},t.prototype.rotate=function(t){this._state.rotate(t)},t.prototype.rotateBasic=function(t){this._state.rotateBasic(t)},t.prototype.rotateBasicUnbounded=function(t){this._state.rotateBasicUnbounded(t)},t.prototype.rotateToBasic=function(t){this._state.rotateToBasic(t)},t.prototype.move=function(t){this._state.move(t)},t.prototype.moveTo=function(t){this._state.moveTo(t)},t.prototype.zoomIn=function(t,e){this._state.zoomIn(t,e)},t}();r.StateContext=o},{"../Geo":228,"../State":232}],328:[function(t,e,r){"use strict";var n=t("rxjs/BehaviorSubject"),i=t("rxjs/Subject"),o=t("rxjs/util/AnimationFrame");t("rxjs/add/operator/bufferCount"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/do"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/first"),t("rxjs/add/operator/map"),t("rxjs/add/operator/pairwise"),t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/startWith"),t("rxjs/add/operator/switchMap"),t("rxjs/add/operator/withLatestFrom");var a=t("../State"),s=function(){function t(){var t=this;this._appendNode$=new i.Subject,this._start$=new i.Subject,this._frame$=new i.Subject,this._fpsSampleRate=30,this._contextOperation$=new n.BehaviorSubject(function(t){return t}),this._context$=this._contextOperation$.scan(function(t,e){return e(t)},new a.StateContext).publishReplay(1).refCount(),this._state$=this._context$.map(function(t){return t.state}).distinctUntilChanged().publishReplay(1).refCount(),this._fps$=this._start$.switchMap(function(){return t._frame$.bufferCount(1,t._fpsSampleRate).map(function(t){return(new Date).getTime()}).pairwise().map(function(e){return Math.max(20,1e3*t._fpsSampleRate/(e[1]-e[0]))}).startWith(60)}).share(),this._currentState$=this._frame$.withLatestFrom(this._fps$,this._context$,function(t,e,r){return[t,e,r]}).filter(function(t){return null!=t[2].currentNode}).do(function(t){t[2].update(t[1])}).map(function(t){return{fps:t[1],id:t[0],state:t[2]}}).share(),this._lastState$=this._currentState$.publishReplay(1).refCount();var e=this._currentState$.distinctUntilChanged(void 0,function(t){return t.state.currentNode.key}).publishReplay(1).refCount(),r=new i.Subject;e.subscribe(r),this._currentKey$=new n.BehaviorSubject(null),r.map(function(t){return t.state.currentNode.key}).subscribe(this._currentKey$),this._currentNode$=r.map(function(t){return t.state.currentNode}).publishReplay(1).refCount(),this._currentCamera$=r.map(function(t){return t.state.currentCamera}).publishReplay(1).refCount(),this._currentTransform$=r.map(function(t){return t.state.currentTransform}).publishReplay(1).refCount(),this._reference$=r.map(function(t){return t.state.reference}).distinctUntilChanged(function(t,e){return t.lat===e.lat&&t.lon===e.lon},function(t){return{lat:t.lat,lon:t.lon}}).publishReplay(1).refCount(),this._currentNodeExternal$=e.map(function(t){return t.state.currentNode}).publishReplay(1).refCount(),this._appendNode$.map(function(t){return function(e){return e.append([t]),e}}).subscribe(this._contextOperation$),this._inMotionOperation$=new i.Subject,e.map(function(t){return!0}).subscribe(this._inMotionOperation$),this._inMotionOperation$.distinctUntilChanged().filter(function(t){return t}).switchMap(function(e){return t._currentState$.filter(function(t){return 0===t.state.nodesAhead}).map(function(t){return[t.state.camera.clone(),t.state.zoom]}).pairwise().map(function(t){var e=t[0][0],r=t[1][0],n=t[0][1],i=t[1][1];return e.diff(r)>1e-5||Math.abs(n-i)>1e-5}).first(function(t){return!t})}).subscribe(this._inMotionOperation$),this._inMotion$=this._inMotionOperation$.distinctUntilChanged().publishReplay(1).refCount(),this._inTranslationOperation$=new i.Subject,e.map(function(t){return!0}).subscribe(this._inTranslationOperation$),this._inTranslationOperation$.distinctUntilChanged().filter(function(t){return t}).switchMap(function(e){return t._currentState$.filter(function(t){return 0===t.state.nodesAhead}).map(function(t){return t.state.camera.position.clone()}).pairwise().map(function(t){return 0!==t[0].distanceToSquared(t[1])}).first(function(t){return!t})}).subscribe(this._inTranslationOperation$),this._inTranslation$=this._inTranslationOperation$.distinctUntilChanged().publishReplay(1).refCount(),this._state$.subscribe(function(){}),this._currentNode$.subscribe(function(){}),this._currentCamera$.subscribe(function(){}),this._currentTransform$.subscribe(function(){}),this._reference$.subscribe(function(){}),this._currentNodeExternal$.subscribe(function(){}),this._lastState$.subscribe(function(){}),this._inMotion$.subscribe(function(){}),this._inTranslation$.subscribe(function(){}),this._frameId=null,this._frameGenerator=new o.RequestAnimationFrameDefinition(window)}return Object.defineProperty(t.prototype,"currentState$",{get:function(){return this._currentState$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentNode$",{get:function(){return this._currentNode$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentKey$",{get:function(){return this._currentKey$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentNodeExternal$",{get:function(){return this._currentNodeExternal$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentCamera$",{get:function(){return this._currentCamera$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentTransform$",{get:function(){return this._currentTransform$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"state$",{get:function(){return this._state$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"reference$",{get:function(){return this._reference$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"inMotion$",{get:function(){return this._inMotion$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"inTranslation$",{get:function(){return this._inTranslation$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"appendNode$",{get:function(){return this._appendNode$},enumerable:!0,configurable:!0}),t.prototype.traverse=function(){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(t){t.traverse()})},t.prototype.wait=function(){this._invokeContextOperation(function(t){t.wait()})},t.prototype.appendNodes=function(t){this._invokeContextOperation(function(e){e.append(t)})},t.prototype.prependNodes=function(t){this._invokeContextOperation(function(e){e.prepend(t)})},t.prototype.removeNodes=function(t){this._invokeContextOperation(function(e){e.remove(t)})},t.prototype.clearNodes=function(){this._invokeContextOperation(function(t){t.clear()})},t.prototype.clearPriorNodes=function(){this._invokeContextOperation(function(t){t.clearPrior()})},t.prototype.cutNodes=function(){this._invokeContextOperation(function(t){t.cut()})},t.prototype.setNodes=function(t){this._invokeContextOperation(function(e){e.set(t)})},t.prototype.rotate=function(t){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(e){e.rotate(t)})},t.prototype.rotateBasic=function(t){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(e){e.rotateBasic(t)})},t.prototype.rotateBasicUnbounded=function(t){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(e){e.rotateBasicUnbounded(t)})},t.prototype.rotateToBasic=function(t){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(e){e.rotateToBasic(t)})},t.prototype.move=function(t){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(e){e.move(t)})},t.prototype.moveTo=function(t){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(e){e.moveTo(t)})},t.prototype.zoomIn=function(t,e){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(r){r.zoomIn(t,e)})},t.prototype.getCenter=function(){return this._lastState$.first().map(function(t){return t.state.getCenter()})},t.prototype.getZoom=function(){return this._lastState$.first().map(function(t){return t.state.zoom})},t.prototype.setCenter=function(t){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(e){e.setCenter(t)})},t.prototype.setZoom=function(t){this._inMotionOperation$.next(!0),this._invokeContextOperation(function(e){e.setZoom(t)})},t.prototype.start=function(){null==this._frameId&&(this._start$.next(null),this._frameId=this._frameGenerator.requestAnimationFrame(this._frame.bind(this)),this._frame$.next(this._frameId))},t.prototype.stop=function(){null!=this._frameId&&(this._frameGenerator.cancelAnimationFrame(this._frameId),this._frameId=null)},t.prototype._invokeContextOperation=function(t){this._contextOperation$.next(function(e){return t(e),e})},t.prototype._frame=function(t){this._frameId=this._frameGenerator.requestAnimationFrame(this._frame.bind(this)),this._frame$.next(this._frameId)},t}();r.StateService=s},{"../State":232,"rxjs/BehaviorSubject":25,"rxjs/Subject":33,"rxjs/add/operator/bufferCount":49,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/do":58,"rxjs/add/operator/filter":60,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/pairwise":68,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/withLatestFrom":82,"rxjs/util/AnimationFrame":156}],329:[function(t,e,r){"use strict";var n=t("../../Error"),i=t("../../Geo"),o=function(){function t(t){this._spatial=new i.Spatial,this._geoCoords=new i.GeoCoords,this._referenceThreshold=.01,this._reference=t.reference,this._alpha=t.alpha,this._camera=t.camera.clone(),this._zoom=t.zoom,this._currentIndex=t.currentIndex,this._trajectory=t.trajectory.slice(),this._trajectoryTransforms=[],this._trajectoryCameras=[];for(var e=0,r=this._trajectory;e<r.length;e++){var n=r[e],o=this._nodeToTranslation(n),a=new i.Transform(n,n.image,o);this._trajectoryTransforms.push(a),this._trajectoryCameras.push(new i.Camera(a))}this._currentNode=this._trajectory.length>0?this._trajectory[this._currentIndex]:null,this._previousNode=this._trajectory.length>1&&this.currentIndex>0?this._trajectory[this._currentIndex-1]:null,this._currentCamera=this._trajectoryCameras.length>0?this._trajectoryCameras[this._currentIndex].clone():new i.Camera,this._previousCamera=this._trajectoryCameras.length>1&&this.currentIndex>0?this._trajectoryCameras[this._currentIndex-1].clone():this._currentCamera.clone()}return Object.defineProperty(t.prototype,"reference",{get:function(){return this._reference},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"alpha",{get:function(){return this._getAlpha()},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"camera",{get:function(){return this._camera},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"zoom",{get:function(){return this._zoom},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"trajectory",{get:function(){return this._trajectory},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentIndex",{get:function(){return this._currentIndex},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentNode",{get:function(){return this._currentNode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"previousNode",{get:function(){return this._previousNode},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentCamera",{get:function(){return this._currentCamera},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentTransform",{get:function(){return this._trajectoryTransforms.length>0?this._trajectoryTransforms[this.currentIndex]:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"previousTransform",{get:function(){return this._trajectoryTransforms.length>1&&this.currentIndex>0?this._trajectoryTransforms[this.currentIndex-1]:null},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"motionless",{get:function(){return this._motionless},enumerable:!0,configurable:!0}),t.prototype.append=function(t){if(t.length<1)throw Error("Trajectory can not be empty");this._currentIndex<0?this.set(t):(this._trajectory=this._trajectory.concat(t),this._appendToTrajectories(t))},t.prototype.prepend=function(t){if(t.length<1)throw Error("Trajectory can not be empty");this._trajectory=t.slice().concat(this._trajectory),this._currentIndex+=t.length,this._setCurrentNode(),this._setReference(this._currentNode)?this._setTrajectories():this._prependToTrajectories(t),this._setCurrentCamera()},t.prototype.remove=function(t){if(t<0)throw Error("n must be a positive integer");if(this._currentIndex-1<t)throw Error("Current and previous nodes can not be removed");for(var e=0;e<t;e++)this._trajectory.shift(),this._trajectoryTransforms.shift(),this._trajectoryCameras.shift(),this._currentIndex--;this._setCurrentNode()},t.prototype.clearPrior=function(){this._currentIndex>0&&this.remove(this._currentIndex-1)},t.prototype.clear=function(){this.cut(),this._currentIndex>0&&this.remove(this._currentIndex-1)},t.prototype.cut=function(){for(;this._trajectory.length-1>this._currentIndex;)this._trajectory.pop(),
+this._trajectoryTransforms.pop(),this._trajectoryCameras.pop()},t.prototype.set=function(t){this._setTrajectory(t),this._setCurrentNode(),this._setReference(this._currentNode),this._setTrajectories(),this._setCurrentCamera()},t.prototype.getCenter=function(){return null!=this._currentNode?this.currentTransform.projectBasic(this._camera.lookat.toArray()):[.5,.5]},t.prototype._setCurrent=function(){this._setCurrentNode(),this._setReference(this._currentNode)&&this._setTrajectories(),this._setCurrentCamera()},t.prototype._setCurrentCamera=function(){this._currentCamera=this._trajectoryCameras[this._currentIndex].clone(),this._previousCamera=this._currentIndex>0?this._trajectoryCameras[this._currentIndex-1].clone():this._currentCamera.clone()},t.prototype._motionlessTransition=function(){return null!=this._currentNode&&null!=this._previousNode&&!(this._currentNode.merged&&this._previousNode.merged&&this._withinOriginalDistance()&&this._sameConnectedComponent())},t.prototype._setReference=function(t){return!(Math.abs(t.latLon.lat-this.reference.lat)<this._referenceThreshold&&Math.abs(t.latLon.lon-this.reference.lon)<this._referenceThreshold)&&(!(null!=this._previousNode&&!this._motionlessTransition())&&(this._reference.lat=t.latLon.lat,this._reference.lon=t.latLon.lon,this._reference.alt=t.alt,!0))},t.prototype._setCurrentNode=function(){this._currentNode=this._trajectory.length>0?this._trajectory[this._currentIndex]:null,this._previousNode=this._currentIndex>0?this._trajectory[this._currentIndex-1]:null},t.prototype._setTrajectory=function(t){if(t.length<1)throw new n.ArgumentMapillaryError("Trajectory can not be empty");null!=this._currentNode?(this._trajectory=[this._currentNode].concat(t),this._currentIndex=1):(this._trajectory=t.slice(),this._currentIndex=0)},t.prototype._setTrajectories=function(){this._trajectoryTransforms.length=0,this._trajectoryCameras.length=0,this._appendToTrajectories(this._trajectory)},t.prototype._appendToTrajectories=function(t){for(var e=0,r=t;e<r.length;e++){var o=r[e];if(!o.assetsCached)throw new n.ArgumentMapillaryError("Assets must be cached when node is added to trajectory");var a=this._nodeToTranslation(o),s=new i.Transform(o,o.image,a);this._trajectoryTransforms.push(s),this._trajectoryCameras.push(new i.Camera(s))}},t.prototype._prependToTrajectories=function(t){for(var e=0,r=t.reverse();e<r.length;e++){var o=r[e];if(!o.assetsCached)throw new n.ArgumentMapillaryError("Assets must be cached when added to trajectory");var a=this._nodeToTranslation(o),s=new i.Transform(o,o.image,a);this._trajectoryTransforms.unshift(s),this._trajectoryCameras.unshift(new i.Camera(s))}},t.prototype._nodeToTranslation=function(t){var e=this._geoCoords.geodeticToEnu(t.latLon.lat,t.latLon.lon,t.alt,this._reference.lat,this._reference.lon,this._reference.alt),r=this._spatial.rotate(e,t.rotation);return[-r.x,-r.y,-r.z]},t.prototype._sameConnectedComponent=function(){var t=this._currentNode,e=this._previousNode;return!(t&&t.mergeCC&&e&&e.mergeCC)||t.mergeCC===e.mergeCC},t.prototype._withinOriginalDistance=function(){var t=this._currentNode,e=this._previousNode;return!t||!e||this._spatial.distanceFromLatLon(t.originalLatLon.lat,t.originalLatLon.lon,e.originalLatLon.lat,e.originalLatLon.lon)<25},t}();r.StateBase=o},{"../../Error":227,"../../Geo":228}],330:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("three"),o=t("unitbezier"),a=t("../../State"),s=function(){function t(t,e){this._phi=t,this._theta=e}return Object.defineProperty(t.prototype,"phi",{get:function(){return this._phi},set:function(t){this._phi=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"theta",{get:function(){return this._theta},set:function(t){this._theta=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isZero",{get:function(){return 0===this._phi&&0===this._theta},enumerable:!0,configurable:!0}),t.prototype.copy=function(t){this._phi=t.phi,this._theta=t.theta},t.prototype.lerp=function(t,e){this._phi=(1-e)*this._phi+e*t.phi,this._theta=(1-e)*this._theta+e*t.theta},t.prototype.multiply=function(t){this._phi*=t,this._theta*=t},t.prototype.threshold=function(t){this._phi=Math.abs(this._phi)>t?this._phi:0,this._theta=Math.abs(this._theta)>t?this._theta:0},t.prototype.lengthSquared=function(){return this._phi*this._phi+this._theta*this._theta},t.prototype.reset=function(){this._phi=0,this._theta=0},t}(),c=function(t){function e(e){var r=t.call(this,e)||this;return r._adjustCameras(),r._motionless=r._motionlessTransition(),r._baseAlpha=r._alpha,r._animationSpeed=.025,r._unitBezier=new o(.74,.67,.38,.96),r._useBezier=!1,r._rotationDelta=new s(0,0),r._requestedRotationDelta=null,r._basicRotation=[0,0],r._requestedBasicRotation=null,r._requestedBasicRotationUnbounded=null,r._rotationAcceleration=.86,r._rotationIncreaseAlpha=.97,r._rotationDecreaseAlpha=.9,r._rotationThreshold=.001,r._unboundedRotationAlpha=.8,r._desiredZoom=e.zoom,r._minZoom=0,r._maxZoom=3,r._lookatDepth=10,r._desiredLookat=null,r._desiredCenter=null,r}return n(e,t),e.prototype.traverse=function(){throw new Error("Not implemented")},e.prototype.wait=function(){return new a.WaitingState(this)},e.prototype.append=function(e){var r=0===this._trajectory.length;r&&this._resetTransition(),t.prototype.append.call(this,e),r&&(this._setDesiredCenter(),this._setDesiredZoom())},e.prototype.prepend=function(e){var r=0===this._trajectory.length;r&&this._resetTransition(),t.prototype.prepend.call(this,e),r&&(this._setDesiredCenter(),this._setDesiredZoom())},e.prototype.set=function(e){t.prototype.set.call(this,e),this._desiredLookat=null,this._resetTransition(),this._clearRotation(),this._setDesiredCenter(),this._setDesiredZoom(),this._trajectory.length<3&&(this._useBezier=!0)},e.prototype.move=function(t){throw new Error("Not implemented")},e.prototype.moveTo=function(t){throw new Error("Not implemented")},e.prototype.rotate=function(t){null!=this._currentNode&&(this._desiredZoom=this._zoom,this._desiredLookat=null,this._requestedBasicRotation=null,null!=this._requestedRotationDelta?(this._requestedRotationDelta.phi=this._requestedRotationDelta.phi+t.phi,this._requestedRotationDelta.theta=this._requestedRotationDelta.theta+t.theta):this._requestedRotationDelta=new s(t.phi,t.theta))},e.prototype.rotateBasic=function(t){if(null!=this._currentNode)if(this._desiredZoom=this._zoom,this._desiredLookat=null,this._requestedRotationDelta=null,null!=this._requestedBasicRotation){this._requestedBasicRotation[0]+=t[0],this._requestedBasicRotation[1]+=t[1];var e=.05/Math.pow(2,this._zoom);this._requestedBasicRotation[0]=this._spatial.clamp(this._requestedBasicRotation[0],-e,e),this._requestedBasicRotation[1]=this._spatial.clamp(this._requestedBasicRotation[1],-e,e)}else this._requestedBasicRotation=t.slice()},e.prototype.rotateBasicUnbounded=function(t){null!=this._currentNode&&(null!=this._requestedBasicRotationUnbounded?(this._requestedBasicRotationUnbounded[0]+=t[0],this._requestedBasicRotationUnbounded[1]+=t[1]):this._requestedBasicRotationUnbounded=t.slice())},e.prototype.rotateToBasic=function(t){if(null!=this._currentNode){this._desiredZoom=this._zoom,this._desiredLookat=null,t[0]=this._spatial.clamp(t[0],0,1),t[1]=this._spatial.clamp(t[1],0,1);var e=this.currentTransform.unprojectBasic(t,this._lookatDepth);this._currentCamera.lookat.fromArray(e)}},e.prototype.zoomIn=function(t,e){if(null!=this._currentNode){this._desiredZoom=Math.max(this._minZoom,Math.min(this._maxZoom,this._desiredZoom+t));var r=this.currentTransform.projectBasic(this._currentCamera.lookat.toArray()),n=r[0],o=r[1],a=Math.pow(2,this._zoom),s=Math.pow(2,this._desiredZoom),c=e[0],u=e[1];null!=this.currentTransform.gpano&&this.currentTransform.gpano.CroppedAreaImageWidthPixels===this.currentTransform.gpano.FullPanoWidthPixels&&(c-n>.5?c-=1:n-c>.5&&(c=1+c));var h=c-a/s*(c-n),l=u-a/s*(u-o),p=this.currentTransform.gpano;this._currentNode.fullPano?(h=this._spatial.wrap(h+this._basicRotation[0],0,1),l=this._spatial.clamp(l+this._basicRotation[1],.05,.95)):null!=p&&this.currentTransform.gpano.CroppedAreaImageWidthPixels===this.currentTransform.gpano.FullPanoWidthPixels?(h=this._spatial.wrap(h+this._basicRotation[0],0,1),l=this._spatial.clamp(l+this._basicRotation[1],0,1)):(h=this._spatial.clamp(h,0,1),l=this._spatial.clamp(l,0,1)),this._desiredLookat=(new i.Vector3).fromArray(this.currentTransform.unprojectBasic([h,l],this._lookatDepth))}},e.prototype.setCenter=function(t){this._desiredLookat=null,this._requestedRotationDelta=null,this._requestedBasicRotation=null,this._desiredZoom=this._zoom;var e=[this._spatial.clamp(t[0],0,1),this._spatial.clamp(t[1],0,1)];if(null==this._currentNode)return void(this._desiredCenter=e);this._desiredCenter=null;var r=(new i.Vector3).fromArray(this.currentTransform.unprojectBasic(e,this._lookatDepth)),n=null!=this.previousTransform?this.previousTransform:this.currentTransform,o=(new i.Vector3).fromArray(n.unprojectBasic(e,this._lookatDepth));this._currentCamera.lookat.copy(r),this._previousCamera.lookat.copy(o)},e.prototype.setZoom=function(t){this._desiredLookat=null,this._requestedRotationDelta=null,this._requestedBasicRotation=null,this._zoom=this._spatial.clamp(t,this._minZoom,this._maxZoom),this._desiredZoom=this._zoom},e.prototype.update=function(t){1===this._alpha&&this._currentIndex+this._alpha<this._trajectory.length&&(this._currentIndex+=1,this._useBezier=this._trajectory.length<3&&this._currentIndex+1===this._trajectory.length,this._setCurrent(),this._resetTransition(),this._clearRotation(),this._desiredZoom=this._currentNode.fullPano?this._zoom:0,this._desiredLookat=null);var e=this._animationSpeed*(60/t);this._baseAlpha=Math.min(1,this._baseAlpha+e),this._useBezier?this._alpha=this._unitBezier.solve(this._baseAlpha):this._alpha=this._baseAlpha,this._updateRotation(),this._rotationDelta.isZero||(this._applyRotation(this._previousCamera),this._applyRotation(this._currentCamera)),this._updateRotationBasic(),0===this._basicRotation[0]&&0===this._basicRotation[1]||this._applyRotationBasic(),this._updateZoom(e),this._updateLookat(e),this._camera.lerpCameras(this._previousCamera,this._currentCamera,this.alpha)},e.prototype._getAlpha=function(){return this._motionless?Math.ceil(this._alpha):this._alpha},e.prototype._setCurrentCamera=function(){t.prototype._setCurrentCamera.call(this),this._adjustCameras()},e.prototype._adjustCameras=function(){if(null!=this._previousNode){var t=this._camera.lookat.clone().sub(this._camera.position);this._previousCamera.lookat.copy(t.clone().add(this._previousCamera.position)),this._currentNode.fullPano&&this._currentCamera.lookat.copy(t.clone().add(this._currentCamera.position))}},e.prototype._resetTransition=function(){this._alpha=0,this._baseAlpha=0,this._motionless=this._motionlessTransition()},e.prototype._applyRotation=function(t){if(null!=t){var e=(new i.Quaternion).setFromUnitVectors(t.up,new i.Vector3(0,0,1)),r=e.clone().inverse(),n=new i.Vector3;n.copy(t.lookat).sub(t.position),n.applyQuaternion(e);var o=n.length(),a=Math.atan2(n.y,n.x);a+=this._rotationDelta.phi;var s=Math.atan2(Math.sqrt(n.x*n.x+n.y*n.y),n.z);s+=this._rotationDelta.theta,s=Math.max(.1,Math.min(Math.PI-.1,s)),n.x=Math.sin(s)*Math.cos(a),n.y=Math.sin(s)*Math.sin(a),n.z=Math.cos(s),n.applyQuaternion(r),t.lookat.copy(t.position).add(n.multiplyScalar(o))}},e.prototype._applyRotationBasic=function(){var t=this._currentNode,e=null!=this._previousNode?this.previousNode:this.currentNode,r=this._currentCamera,n=this._previousCamera,i=this.currentTransform,o=null!=this.previousTransform?this.previousTransform:this.currentTransform,a=i.projectBasic(r.lookat.toArray()),s=o.projectBasic(n.lookat.toArray()),c=i.gpano,u=o.gpano;t.fullPano?(a[0]=this._spatial.wrap(a[0]+this._basicRotation[0],0,1),a[1]=this._spatial.clamp(a[1]+this._basicRotation[1],.05,.95)):null!=c&&i.gpano.CroppedAreaImageWidthPixels===i.gpano.FullPanoWidthPixels?(a[0]=this._spatial.wrap(a[0]+this._basicRotation[0],0,1),a[1]=this._spatial.clamp(a[1]+this._basicRotation[1],0,1)):(a[0]=this._spatial.clamp(a[0]+this._basicRotation[0],0,1),a[1]=this._spatial.clamp(a[1]+this._basicRotation[1],0,1)),e.fullPano?(s[0]=this._spatial.wrap(s[0]+this._basicRotation[0],0,1),s[1]=this._spatial.clamp(s[1]+this._basicRotation[1],.05,.95)):null!=u&&o.gpano.CroppedAreaImageWidthPixels===o.gpano.FullPanoWidthPixels?(s[0]=this._spatial.wrap(s[0]+this._basicRotation[0],0,1),s[1]=this._spatial.clamp(s[1]+this._basicRotation[1],0,1)):(s[0]=this._spatial.clamp(s[0]+this._basicRotation[0],0,1),s[1]=this._spatial.clamp(a[1]+this._basicRotation[1],0,1));var h=i.unprojectBasic(a,this._lookatDepth);r.lookat.fromArray(h);var l=o.unprojectBasic(s,this._lookatDepth);n.lookat.fromArray(l)},e.prototype._updateZoom=function(t){var e=this._desiredZoom-this._zoom,r=e>0?1:e<0?-1:0;0!==e&&(Math.abs(e)<.002?(this._zoom=this._desiredZoom,null!=this._desiredLookat&&(this._desiredLookat=null)):this._zoom+=r*Math.max(Math.abs(5*t*e),.002))},e.prototype._updateLookat=function(t){if(null!==this._desiredLookat){var e=this._desiredLookat.distanceToSquared(this._currentCamera.lookat);Math.abs(e)<1e-6?(this._currentCamera.lookat.copy(this._desiredLookat),this._desiredLookat=null):this._currentCamera.lookat.lerp(this._desiredLookat,5*t)}},e.prototype._updateRotation=function(){if(null!=this._requestedRotationDelta){var t=this._rotationDelta.lengthSquared();return this._requestedRotationDelta.lengthSquared()>t?this._rotationDelta.lerp(this._requestedRotationDelta,this._rotationIncreaseAlpha):this._rotationDelta.lerp(this._requestedRotationDelta,this._rotationDecreaseAlpha),void(this._requestedRotationDelta=null)}this._rotationDelta.isZero||(this._rotationDelta.multiply(this._rotationAcceleration),this._rotationDelta.threshold(this._rotationThreshold))},e.prototype._updateRotationBasic=function(){if(null!=this._requestedBasicRotation){var t=this._basicRotation[0],e=this._basicRotation[1],r=this._requestedBasicRotation[0],n=this._requestedBasicRotation[1];return Math.abs(r)>Math.abs(t)?this._basicRotation[0]=(1-this._rotationIncreaseAlpha)*t+this._rotationIncreaseAlpha*r:this._basicRotation[0]=(1-this._rotationDecreaseAlpha)*t+this._rotationDecreaseAlpha*r,Math.abs(n)>Math.abs(e)?this._basicRotation[1]=(1-this._rotationIncreaseAlpha)*e+this._rotationIncreaseAlpha*n:this._basicRotation[1]=(1-this._rotationDecreaseAlpha)*e+this._rotationDecreaseAlpha*n,void(this._requestedBasicRotation=null)}if(null!=this._requestedBasicRotationUnbounded){var r=this._requestedBasicRotationUnbounded[0],n=this._requestedBasicRotationUnbounded[1];if(Math.abs(r)>0&&(this._basicRotation[0]=(1-this._unboundedRotationAlpha)*this._basicRotation[0]+this._unboundedRotationAlpha*r),Math.abs(n)>0&&(this._basicRotation[1]=(1-this._unboundedRotationAlpha)*this._basicRotation[1]+this._unboundedRotationAlpha*n),null!=this._desiredLookat){var o=this.currentTransform.projectBasic(this._desiredLookat.toArray());o[0]+=r,o[1]+=n,this._desiredLookat=(new i.Vector3).fromArray(this.currentTransform.unprojectBasic(o,this._lookatDepth))}this._requestedBasicRotationUnbounded=null}0===this._basicRotation[0]&&0===this._basicRotation[1]||(this._basicRotation[0]=this._rotationAcceleration*this._basicRotation[0],this._basicRotation[1]=this._rotationAcceleration*this._basicRotation[1],Math.abs(this._basicRotation[0])<this._rotationThreshold/Math.pow(2,this._zoom)&&Math.abs(this._basicRotation[1])<this._rotationThreshold/Math.pow(2,this._zoom)&&(this._basicRotation=[0,0]))},e.prototype._clearRotation=function(){this._currentNode.fullPano||(null!=this._requestedRotationDelta&&(this._requestedRotationDelta=null),this._rotationDelta.isZero||this._rotationDelta.reset(),null!=this._requestedBasicRotation&&(this._requestedBasicRotation=null),(this._basicRotation[0]>0||this._basicRotation[1]>0)&&(this._basicRotation=[0,0]))},e.prototype._setDesiredCenter=function(){if(null!=this._desiredCenter){var t=(new i.Vector3).fromArray(this.currentTransform.unprojectBasic(this._desiredCenter,this._lookatDepth)).sub(this._currentCamera.position);this._currentCamera.lookat.copy(this._currentCamera.position.clone().add(t)),this._previousCamera.lookat.copy(this._previousCamera.position.clone().add(t)),this._desiredCenter=null}},e.prototype._setDesiredZoom=function(){this._desiredZoom=this._currentNode.fullPano||null==this._previousNode?this._zoom:0},e}(a.StateBase);r.TraversingState=c},{"../../State":232,three:175,unitbezier:177}],331:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("../../State"),o=function(t){function e(e){var r=t.call(this,e)||this;return r._adjustCameras(),r._motionless=r._motionlessTransition(),r}return n(e,t),e.prototype.traverse=function(){return new i.TraversingState(this)},e.prototype.wait=function(){throw new Error("Not implemented")},e.prototype.prepend=function(e){t.prototype.prepend.call(this,e),this._motionless=this._motionlessTransition()},e.prototype.set=function(e){t.prototype.set.call(this,e),this._motionless=this._motionlessTransition()},e.prototype.rotate=function(t){},e.prototype.rotateBasic=function(t){},e.prototype.rotateBasicUnbounded=function(t){},e.prototype.rotateToBasic=function(t){},e.prototype.zoomIn=function(t,e){},e.prototype.move=function(t){this._alpha=Math.max(0,Math.min(1,this._alpha+t))},e.prototype.moveTo=function(t){this._alpha=Math.max(0,Math.min(1,t))},e.prototype.update=function(t){this._camera.lerpCameras(this._previousCamera,this._currentCamera,this.alpha)},e.prototype.setCenter=function(t){},e.prototype.setZoom=function(t){},e.prototype._getAlpha=function(){return this._motionless?Math.round(this._alpha):this._alpha},e.prototype._setCurrentCamera=function(){t.prototype._setCurrentCamera.call(this),this._adjustCameras()},e.prototype._adjustCameras=function(){if(null!=this._previousNode){if(this._currentNode.fullPano){var t=this._camera.lookat.clone().sub(this._camera.position);this._currentCamera.lookat.copy(t.clone().add(this._currentCamera.position))}if(this._previousNode.fullPano){var t=this._currentCamera.lookat.clone().sub(this._currentCamera.position);this._previousCamera.lookat.copy(t.clone().add(this._previousCamera.position))}}},e}(i.StateBase);r.WaitingState=o},{"../../State":232}],332:[function(t,e,r){"use strict";var n=t("rxjs/Observable"),i=function(){function t(t,e,r){this._scheme=t,this._host=e,this._origin=null!=r?"?origin="+r:""}return t.prototype.getTile=function(t,e,r,i,o,a,s){var c="/"+t+"/"+e+","+r+","+i+","+o+"/"+a+","+s+"/0/default.jpg",u=this._scheme+"://"+this._host+c+this._origin,h=null;return[n.Observable.create(function(n){h=new XMLHttpRequest,h.open("GET",u,!0),h.responseType="arraybuffer",h.timeout=15e3,h.onload=function(a){if(200!==h.status)return void n.error(new Error("Failed to fetch tile ("+t+": "+e+","+r+","+i+","+o+"). Status: "+h.status+", "+h.statusText));var s=new Image;s.crossOrigin="Anonymous",s.onload=function(t){n.next(s),n.complete()},s.onerror=function(a){n.error(new Error("Failed to load tile image ("+t+": "+e+","+r+","+i+","+o+")"))};var c=new Blob([h.response]);s.src=window.URL.createObjectURL(c)},h.onerror=function(a){n.error(new Error("Failed to fetch tile ("+t+": "+e+","+r+","+i+","+o+")"))},h.ontimeout=function(a){n.error(new Error("Tile request timed out ("+t+": "+e+","+r+","+i+","+o+")"))},h.onabort=function(a){n.error(new Error("Tile request was aborted ("+t+": "+e+","+r+","+i+","+o+")"))},h.send(null)}),function(){null!=h&&h.abort()}]},t}();r.ImageTileLoader=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{"rxjs/Observable":28}],333:[function(t,e,r){"use strict";var n=function(){function t(){this._images={}}return t.prototype.addImage=function(t,e,r){r in this._images||(this._images[r]={}),this._images[r][e]=t},t.prototype.dispose=function(){for(var t=0,e=Object.keys(this._images);t<e.length;t++){for(var r=e[t],n=this._images[r],i=0,o=Object.keys(n);i<o.length;i++){var a=o[i];window.URL.revokeObjectURL(n[a].src),delete n[a]}delete this._images[r]}},t.prototype.getImage=function(t,e){return this._images[e][t]},t.prototype.hasImage=function(t,e){return e in this._images&&t in this._images[e]},t}();r.ImageTileStore=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],334:[function(t,e,r){"use strict";var n=t("../Geo"),i=function(){function t(){this._viewportCoords=new n.ViewportCoords}return t.prototype.computeRegionOfInterest=function(t,e,r){var n=this._viewportBoundaryPoints(4),i=this._viewportPointsBoundingBox(n,t,r);this._clipBoundingBox(i);var o=2/e.width,a=2/e.height,s=[[-.5*o,.5*a],[.5*o,.5*a],[.5*o,-.5*a],[-.5*o,-.5*a]],c=this._viewportPointsBoundingBox(s,t,r);return{bbox:i,pixelHeight:c.maxY-c.minY,pixelWidth:c.maxX-c.minX+(c.minX<c.maxX?0:1)}},t.prototype._viewportBoundaryPoints=function(t){for(var e=[],r=[[-1,1],[1,1],[1,-1],[-1,-1]],n=[[2,0],[0,-2],[-2,0],[0,2]],i=0;i<4;++i)for(var o=r[i],a=n[i],s=0;s<t;++s)e.push([o[0]+a[0]*s/t,o[1]+a[1]*s/t]);return e},t.prototype._viewportPointsBoundingBox=function(t,e,r){var n=this,i=t.map(function(t){return n._viewportCoords.viewportToBasic(t[0],t[1],r,e.perspective)});return null!=r.gpano?this._boundingBoxPano(i):this._boundingBox(i)},t.prototype._boundingBox=function(t){for(var e={maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY},r=0;r<t.length;++r)e.minX=Math.min(e.minX,t[r][0]),e.maxX=Math.max(e.maxX,t[r][0]),e.minY=Math.min(e.minY,t[r][1]),e.maxY=Math.max(e.maxY,t[r][1]);return e},t.prototype._boundingBoxPano=function(t){for(var e=this,r=[],n=[],i=0;i<t.length;++i)r.push(t[i][0]),n.push(t[i][1]);r.sort(function(t,r){return e._sign(t-r)}),n.sort(function(t,r){return e._sign(t-r)});var o=this._intervalPano(r);return{maxX:o[1],maxY:n[n.length-1],minX:o[0],minY:n[0]}},t.prototype._intervalPano=function(t){for(var e=0,r=-1,n=0;n<t.length-1;++n){var i=t[n+1]-t[n];i>e&&(e=i,r=n)}return t[0]+1-t[t.length-1]>e?[t[0],t[t.length-1]]:[t[r+1],t[r]]},t.prototype._clipBoundingBox=function(t){t.minX=Math.max(0,Math.min(1,t.minX)),t.maxX=Math.max(0,Math.min(1,t.maxX)),t.minY=Math.max(0,Math.min(1,t.minY)),t.maxY=Math.max(0,Math.min(1,t.maxY))},t.prototype._sign=function(t){return t>0?1:t<0?-1:0},t}();r.RegionOfInterestCalculator=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{"../Geo":228}],335:[function(t,e,r){"use strict";var n=t("three"),i=t("rxjs/Subject"),o=function(){function t(t,e,r,n,o,a,s,c){this._disposed=!1,this._key=t,(e<=0||r<=0)&&console.warn("Original image size ("+e+", "+r+") is invalid ("+t+"). Tiles will not be loaded."),this._width=e,this._height=r,this._maxLevel=Math.ceil(Math.log(Math.max(r,e))/Math.log(2)),this._currentLevel=-1,this._tileSize=n,this._updated$=new i.Subject,this._createdSubject$=new i.Subject,this._created$=this._createdSubject$.publishReplay(1).refCount(),this._createdSubscription=this._created$.subscribe(function(){}),this._hasSubject$=new i.Subject,this._has$=this._hasSubject$.startWith(!1).publishReplay(1).refCount(),this._hasSubscription=this._has$.subscribe(function(){}),this._abortFunctions=[],this._tileSubscriptions={},this._renderedCurrentLevelTiles={},this._renderedTiles={},this._background=o,this._camera=null,this._imageTileLoader=a,this._imageTileStore=s,this._renderer=c,this._renderTarget=null,this._roi=null}return Object.defineProperty(t.prototype,"disposed",{get:function(){return this._disposed},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"hasTexture$",{get:function(){return this._has$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"key",{get:function(){return this._key},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"textureUpdated$",{get:function(){return this._updated$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"textureCreated$",{get:function(){return this._created$},enumerable:!0,configurable:!0}),t.prototype.abort=function(){for(var t in this._tileSubscriptions)this._tileSubscriptions.hasOwnProperty(t)&&this._tileSubscriptions[t].unsubscribe();this._tileSubscriptions={};for(var e=0,r=this._abortFunctions;e<r.length;e++){(0,r[e])()}this._abortFunctions=[]},t.prototype.dispose=function(){if(this._disposed)return void console.warn("Texture already disposed ("+this._key+")");this.abort(),null!=this._renderTarget&&(this._renderTarget.dispose(),this._renderTarget=null),this._imageTileStore.dispose(),this._imageTileStore=null,this._background=null,this._camera=null,this._imageTileLoader=null,this._renderer=null,this._roi=null,this._createdSubscription.unsubscribe(),this._hasSubscription.unsubscribe(),this._disposed=!0},t.prototype.setRegionOfInterest=function(t){if(!(this._width<=0||this._height<=0)){this._roi=t;var e=1/this._roi.pixelWidth,r=1/this._roi.pixelHeight,i=Math.max(r,e),o=Math.max(0,Math.min(this._maxLevel,Math.round(Math.log(i)/Math.log(2))));if(o!==this._currentLevel){this.abort(),this._currentLevel=o,this._currentLevel in this._renderedTiles||(this._renderedTiles[this._currentLevel]=[]),this._renderedCurrentLevelTiles={};for(var a=0,s=this._renderedTiles[this._currentLevel];a<s.length;a++){var c=s[a];this._renderedCurrentLevelTiles[this._tileKey(c)]=!0}}var u=this._getTileCoords([this._roi.bbox.minX,this._roi.bbox.minY]),h=this._getTileCoords([this._roi.bbox.maxX,this._roi.bbox.maxY]),l=this._getTiles(u,h);if(null==this._camera){this._camera=new n.OrthographicCamera(-this._width/2,this._width/2,this._height/2,-this._height/2,-1,1),this._camera.position.z=1;var p=this._renderer.getContext(),f=p.getParameter(p.MAX_TEXTURE_SIZE),d=Math.max(this._width,this._height),m=f>d?1:f/d,v=Math.floor(m*this._width),g=Math.floor(m*this._height);this._renderTarget=new n.WebGLRenderTarget(v,g,{depthBuffer:!1,format:n.RGBFormat,magFilter:n.LinearFilter,minFilter:n.LinearFilter,stencilBuffer:!1}),this._renderToTarget(0,0,this._width,this._height,this._background),this._createdSubject$.next(this._renderTarget.texture),this._hasSubject$.next(!0)}this._fetchTiles(l)}},t.prototype.updateBackground=function(t){this._background=t},t.prototype._fetchTile=function(t,e,r,n,i,o,a,s){var c=this,u=this._imageTileLoader.getTile(this._key,r,n,i,o,a,s),h=u[0],l=u[1];this._abortFunctions.push(l);var p=this._tileKey(t),f=h.subscribe(function(a){c._renderToTarget(r,n,i,o,a),c._removeFromDictionary(p,c._tileSubscriptions),c._removeFromArray(l,c._abortFunctions),c._setTileRendered(t,c._currentLevel),c._imageTileStore.addImage(a,p,e),c._updated$.next(!0)},function(t){c._removeFromDictionary(p,c._tileSubscriptions),c._removeFromArray(l,c._abortFunctions),console.error(t)});f.closed||(this._tileSubscriptions[p]=f)},t.prototype._fetchTiles=function(t){for(var e=this._tileSize*Math.pow(2,this._maxLevel-this._currentLevel),r=0,n=t;r<n.length;r++){var i=n[r],o=this._tileKey(i);if(!(o in this._renderedCurrentLevelTiles||o in this._tileSubscriptions)){var a=e*i[0],s=e*i[1],c=a+e>this._width?this._width-a:e,u=s+e>this._height?this._height-s:e;if(this._imageTileStore.hasImage(o,this._currentLevel))this._renderToTarget(a,s,c,u,this._imageTileStore.getImage(o,this._currentLevel)),this._setTileRendered(i,this._currentLevel),this._updated$.next(!0);else{var h=Math.floor(c/e*this._tileSize),l=Math.floor(u/e*this._tileSize);this._fetchTile(i,this._currentLevel,a,s,c,u,h,l)}}}},t.prototype._getTileCoords=function(t){var e=this._tileSize*Math.pow(2,this._maxLevel-this._currentLevel),r=Math.ceil(this._width/e)-1,n=Math.ceil(this._height/e)-1;return[Math.min(Math.floor(this._width*t[0]/e),r),Math.min(Math.floor(this._height*t[1]/e),n)]},t.prototype._getTiles=function(t,e){var r=[];if(t[0]>e[0]){for(var n=this._tileSize*Math.pow(2,this._maxLevel-this._currentLevel),i=Math.ceil(this._width/n)-1,o=t[0];o<=i;o++)r.push(o);for(var o=0;o<=e[0];o++)r.push(o)}else for(var o=t[0];o<=e[0];o++)r.push(o);for(var a=[],s=0,c=r;s<c.length;s++)for(var o=c[s],u=t[1];u<=e[1];u++)a.push([o,u]);return a},t.prototype._removeFromArray=function(t,e){var r=e.indexOf(t);-1!==r&&e.splice(r,1)},t.prototype._removeFromDictionary=function(t,e){t in e&&delete e[t]},t.prototype._renderToTarget=function(t,e,r,i,o){var a=new n.Texture(o);a.minFilter=n.LinearFilter,a.needsUpdate=!0;var s=new n.PlaneGeometry(r,i),c=new n.MeshBasicMaterial({map:a,side:n.FrontSide}),u=new n.Mesh(s,c);u.position.x=-this._width/2+t+r/2,u.position.y=this._height/2-e-i/2;var h=new n.Scene;h.add(u),this._renderer.render(h,this._camera,this._renderTarget),this._renderer.setRenderTarget(void 0),h.remove(u),s.dispose(),c.dispose(),a.dispose()},t.prototype._setTileRendered=function(t,e){for(var r=Object.keys(this._renderedTiles).map(function(t){return parseInt(t,10)}).filter(function(t){return t!==e}),n=0,i=r;n<i.length;n++){var o=i[n],a=Math.pow(2,o-e);if(o<e)for(var s=Math.floor(a*t[0]),c=Math.floor(a*t[1]),u=0,h=this._renderedTiles[o].slice();u<h.length;u++){var l=h[u];if(l[0]===s&&l[1]===c){var p=this._renderedTiles[o].indexOf(l);this._renderedTiles[o].splice(p,1)}}else for(var f=a*t[0],d=f+a-1,m=a*t[1],v=m+a-1,g=0,y=this._renderedTiles[o].slice();g<y.length;g++){var l=y[g];if(l[0]>=f&&l[0]<=d&&l[1]>=m&&l[1]<=v){var p=this._renderedTiles[o].indexOf(l);this._renderedTiles[o].splice(p,1)}}0===this._renderedTiles[o].length&&delete this._renderedTiles[o]}this._renderedTiles[e].push(t),this._renderedCurrentLevelTiles[this._tileKey(t)]=!0},t.prototype._tileKey=function(t){return t[0]+"-"+t[1]},t}();r.TextureProvider=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"rxjs/Subject":33,three:175}],336:[function(t,e,r){"use strict";var n=function(){function t(){this._events={}}return t.prototype.on=function(t,e){this._events[t]=this._events[t]||[],this._events[t].push(e)},t.prototype.off=function(t,e){if(!t)return void(this._events={});if(this._listens(t))delete this._events[t];else{var r=this._events[t].indexOf(e);r>=0&&this._events[t].splice(r,1),this._events[t].length&&delete this._events[t]}},t.prototype.fire=function(t,e){if(this._listens(t))for(var r=0,n=this._events[t];r<n.length;r++){var i=n[r];i.call(this,e)}},t.prototype._listens=function(t){return!(!this._events||!this._events[t])},t}();r.EventEmitter=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],337:[function(t,e,r){"use strict";var n=t("../Viewer"),i=function(){function t(){}return t.setOptions=function(e){t._baseImageSize=null!=e.baseImageSize?e.baseImageSize:n.ImageSize.Size640,t._basePanoramaSize=null!=e.basePanoramaSize?e.basePanoramaSize:n.ImageSize.Size2048,t._maxImageSize=null!=e.maxImageSize?e.maxImageSize:n.ImageSize.Size2048},Object.defineProperty(t,"baseImageSize",{get:function(){return t._baseImageSize},enumerable:!0,configurable:!0}),Object.defineProperty(t,"basePanoramaSize",{get:function(){return t._basePanoramaSize},enumerable:!0,configurable:!0}),Object.defineProperty(t,"maxImageSize",{get:function(){return t._maxImageSize},enumerable:!0,configurable:!0}),t}();r.Settings=i,Object.defineProperty(r,"__esModule",{value:!0}),r.default=i},{"../Viewer":235}],338:[function(t,e,r){"use strict";var n=function(){function t(){}return Object.defineProperty(t,"tileScheme",{get:function(){return"https"},enumerable:!0,configurable:!0}),Object.defineProperty(t,"tileDomain",{get:function(){return"d2qb1440i7l50o.cloudfront.net"},enumerable:!0,configurable:!0}),Object.defineProperty(t,"origin",{get:function(){return"mapillary.webgl"},enumerable:!0,configurable:!0}),t.thumbnail=function(t,e){return"https://d1cuyjsrcm0gby.cloudfront.net/"+t+"/thumb-"+e+".jpg?origin="+this.origin},t.falcorModel=function(t){return"https://a.mapillary.com/v3/model.json?client_id="+t},t.protoMesh=function(t){return"https://d1brzeo354iq2l.cloudfront.net/v2/mesh/"+t},t}()
+;r.Urls=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],339:[function(t,e,r){"use strict";t("rxjs/add/operator/bufferCount"),t("rxjs/add/operator/delay"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/map"),t("rxjs/add/operator/switchMap");var n=function(){function t(t,e){this._graphService=t,this._stateService=e,this._started=!1}return Object.defineProperty(t.prototype,"started",{get:function(){return this._started},enumerable:!0,configurable:!0}),t.prototype.start=function(){var t=this;this._started||(this._uncacheSubscription=this._stateService.currentState$.distinctUntilChanged(void 0,function(t){return t.state.currentNode.key}).map(function(t){return t.state.trajectory.map(function(t){return t.key})}).bufferCount(1,5).switchMap(function(e){var r=e[0];return t._graphService.uncache$(r)}).subscribe(function(){}),this._started=!0)},t.prototype.stop=function(){this._started&&(this._uncacheSubscription.unsubscribe(),this._uncacheSubscription=null,this._started=!1)},t}();r.CacheService=n,Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{"rxjs/add/operator/bufferCount":49,"rxjs/add/operator/delay":55,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"rxjs/add/operator/switchMap":78}],340:[function(t,e,r){"use strict";var n=t("../Component"),i=function(){function t(t,e,r,i,o){var a=this;this._container=t,this._observer=r,this._navigator=e,this._options=null!=o?o:{},this._key=i,this._componentService=new n.ComponentService(this._container,this._navigator),this._coverComponent=this._componentService.getCover(),this._initializeComponents(),i?(this._initilizeCoverComponent(),this._subscribeCoverComponent()):this._navigator.movedToKey$.first(function(t){return null!=t}).subscribe(function(t){a._key=t,a._componentService.deactivateCover(),a._coverComponent.configure({key:a._key,loading:!1,visible:!1}),a._subscribeCoverComponent(),a._navigator.stateService.start(),a._observer.startEmit()})}return t.prototype.get=function(t){return this._componentService.get(t)},t.prototype.activate=function(t){this._componentService.activate(t)},t.prototype.activateCover=function(){this._coverComponent.configure({loading:!1,visible:!0})},t.prototype.deactivate=function(t){this._componentService.deactivate(t)},t.prototype.deactivateCover=function(){this._coverComponent.configure({loading:!0,visible:!0})},t.prototype.resize=function(){this._componentService.resize()},t.prototype._initializeComponents=function(){var t=this._options;this._uFalse(t.background,"background"),this._uFalse(t.debug,"debug"),this._uFalse(t.image,"image"),this._uFalse(t.marker,"marker"),this._uFalse(t.navigation,"navigation"),this._uFalse(t.route,"route"),this._uFalse(t.slider,"slider"),this._uFalse(t.tag,"tag"),this._uTrue(t.attribution,"attribution"),this._uTrue(t.bearing,"bearing"),this._uTrue(t.cache,"cache"),this._uTrue(t.direction,"direction"),this._uTrue(t.imagePlane,"imagePlane"),this._uTrue(t.keyboard,"keyboard"),this._uTrue(t.loading,"loading"),this._uTrue(t.mouse,"mouse"),this._uTrue(t.sequence,"sequence"),this._uTrue(t.stats,"stats")},t.prototype._initilizeCoverComponent=function(){var t=this._options;this._coverComponent.configure({key:this._key}),void 0===t.cover||t.cover?this.activateCover():this.deactivateCover()},t.prototype._subscribeCoverComponent=function(){var t=this;this._coverComponent.configuration$.subscribe(function(e){e.loading?t._navigator.stateService.currentKey$.first().switchMap(function(r){return null==r||r!==e.key?t._navigator.moveToKey$(e.key):t._navigator.stateService.currentNode$.first()}).subscribe(function(e){t._navigator.stateService.start(),t._observer.startEmit(),t._coverComponent.configure({loading:!1,visible:!1}),t._componentService.deactivateCover()},function(e){console.error("Failed to deactivate cover.",e),t._coverComponent.configure({loading:!1,visible:!0})}):e.visible&&(t._observer.stopEmit(),t._navigator.stateService.stop(),t._componentService.activateCover())})},t.prototype._uFalse=function(t,e){return void 0===t?void this._componentService.deactivate(e):"boolean"==typeof t?void(t?this._componentService.activate(e):this._componentService.deactivate(e)):(this._componentService.configure(e,t),void this._componentService.activate(e))},t.prototype._uTrue=function(t,e){return void 0===t?void this._componentService.activate(e):"boolean"==typeof t?void(t?this._componentService.activate(e):this._componentService.deactivate(e)):(this._componentService.configure(e,t),void this._componentService.activate(e))},t}();r.ComponentController=i},{"../Component":225}],341:[function(t,e,r){"use strict";var n=t("../Render"),i=t("../Viewer"),o=function(){function t(t,e,r){this.id=t,this._container=document.getElementById(t),this._container.classList.add("mapillary-js"),this._canvasContainer=document.createElement("div"),this._canvasContainer.className="mapillary-js-interactive",this._container.appendChild(this._canvasContainer),this.renderService=new n.RenderService(this._container,e.currentState$,r.renderMode),this.glRenderer=new n.GLRenderer(this._canvasContainer,this.renderService),this.domRenderer=new n.DOMRenderer(this._container,this.renderService,e.currentState$),this.mouseService=new i.MouseService(this._canvasContainer,this._container),this.touchService=new i.TouchService(this._canvasContainer),this.spriteService=new i.SpriteService(r.sprite)}return Object.defineProperty(t.prototype,"element",{get:function(){return this._container},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"canvasContainer",{get:function(){return this.canvasContainer},enumerable:!0,configurable:!0}),t}();r.Container=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../Render":231,"../Viewer":235}],342:[function(t,e,r){"use strict";!function(t){t[t.Size320=320]="Size320",t[t.Size640=640]="Size640",t[t.Size1024=1024]="Size1024",t[t.Size2048=2048]="Size2048"}(r.ImageSize||(r.ImageSize={}))},{}],343:[function(t,e,r){"use strict";var n=t("underscore"),i=t("rxjs/Subject");t("rxjs/add/operator/debounceTime"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/map"),t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/startWith");var o=function(){function t(){this._loadersSubject$=new i.Subject,this._loaders$=this._loadersSubject$.scan(function(t,e){return void 0!==e.task&&(t[e.task]=e.loading),t},{}).startWith({}).publishReplay(1).refCount()}return Object.defineProperty(t.prototype,"loading$",{get:function(){return this._loaders$.map(function(t){return n.reduce(t,function(t,e){return t||e},!1)}).debounceTime(100).distinctUntilChanged()},enumerable:!0,configurable:!0}),t.prototype.taskLoading$=function(t){return this._loaders$.map(function(e){return!!e[t]}).debounceTime(100).distinctUntilChanged()},t.prototype.startLoading=function(t){this._loadersSubject$.next({loading:!0,task:t})},t.prototype.stopLoading=function(t){this._loadersSubject$.next({loading:!1,task:t})},t}();r.LoadingService=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"rxjs/Subject":33,"rxjs/add/operator/debounceTime":54,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77,underscore:176}],344:[function(t,e,r){"use strict";var n=t("rxjs/BehaviorSubject"),i=t("rxjs/Observable"),o=t("rxjs/Subject");t("rxjs/add/observable/fromEvent"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/merge"),t("rxjs/add/operator/mergeMap"),t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/switchMap"),t("rxjs/add/operator/withLatestFrom");var a=t("../Geo"),s=function(){function t(t,e,r){var s=this;this._canvasContainer=t,this._container=e,this._viewportCoords=null!=r?r:new a.ViewportCoords,this._activeSubject$=new n.BehaviorSubject(!1),this._active$=this._activeSubject$.distinctUntilChanged().publishReplay(1).refCount(),this._claimMouse$=new o.Subject,this._documentMouseDown$=i.Observable.fromEvent(document,"mousedown").filter(function(t){return s._viewportCoords.insideElement(t,s._container)}).share(),this._documentMouseMove$=i.Observable.fromEvent(document,"mousemove"),this._documentMouseUp$=i.Observable.fromEvent(document,"mouseup"),this._documentCanvasMouseMove$=this._documentMouseMove$.filter(function(t){return s._viewportCoords.insideElement(t,s._container)}).share(),this._mouseDown$=i.Observable.fromEvent(t,"mousedown"),this._mouseLeave$=i.Observable.fromEvent(t,"mouseleave"),this._mouseMove$=i.Observable.fromEvent(t,"mousemove"),this._mouseUp$=i.Observable.fromEvent(t,"mouseup"),this._mouseOut$=i.Observable.fromEvent(t,"mouseout"),this._mouseOver$=i.Observable.fromEvent(t,"mouseover"),this._click$=i.Observable.fromEvent(t,"click"),this._dblClick$=i.Observable.fromEvent(t,"dblclick"),this._dblClick$.subscribe(function(t){t.preventDefault()}),this._contextMenu$=i.Observable.fromEvent(t,"contextmenu"),this._contextMenu$.subscribe(function(t){t.preventDefault()}),this._mouseWheel$=i.Observable.fromEvent(document,"wheel").filter(function(t){return s._viewportCoords.insideElement(t,s._container)}).share(),this._consistentContextMenu$=i.Observable.merge(this._mouseDown$,this._mouseMove$,this._mouseOut$,this._mouseUp$,this._contextMenu$).bufferCount(3,1).filter(function(t){return"mousedown"===t[0].type&&"contextmenu"===t[1].type&&"mouseup"===t[2].type}).map(function(t){return t[1]}).share();var c=i.Observable.merge(this._documentMouseUp$.filter(function(t){return 0===t.button})).share(),u=this._mouseDown$.filter(function(t){return 0===t.button}).share();this._mouseDragStart$=u.mergeMap(function(t){return s._documentMouseMove$.takeUntil(c).take(1)}),this._mouseDrag$=u.mergeMap(function(t){return s._documentMouseMove$.skip(1).takeUntil(c)}),this._mouseDragEnd$=this._mouseDragStart$.mergeMap(function(t){return c.first()}),this._documentCanvasMouseDown$=this._documentMouseDown$.filter(function(t){return s._viewportCoords.insideElement(t,s._container)}).share();var h=this._documentCanvasMouseDown$.filter(function(t){return 0===t.button}).share();this._documentCanvasMouseDragStart$=h.mergeMap(function(t){return s._documentCanvasMouseMove$.takeUntil(c).take(1)}),this._documentCanvasMouseDrag$=h.mergeMap(function(t){return s._documentCanvasMouseMove$.skip(1).takeUntil(c)}),this._documentCanvasMouseDragEnd$=this._documentCanvasMouseDragStart$.mergeMap(function(t){return c.first()}),this._staticClick$=this._mouseDown$.switchMap(function(t){return s._click$.takeUntil(s._mouseMove$).take(1)}),this._mouseOwner$=this._claimMouse$.scan(function(t,e){return null==e.zindex?delete t[e.name]:t[e.name]=e.zindex,t},{}).map(function(t){var e=null,r=-1;for(var n in t)t.hasOwnProperty(n)&&t[n]>r&&(r=t[n],e=n);return e}).publishReplay(1).refCount(),this._mouseOwner$.subscribe(function(){})}return Object.defineProperty(t.prototype,"active$",{get:function(){return this._active$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"activate$",{get:function(){return this._activeSubject$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"documentCanvasMouseDown$",{get:function(){return this._documentCanvasMouseDown$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"documentCanvasMouseMove$",{get:function(){return this._documentCanvasMouseMove$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"documentCanvasMouseDragStart$",{get:function(){return this._documentCanvasMouseDragStart$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"documentCanvasMouseDrag$",{get:function(){return this._documentCanvasMouseDrag$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"documentCanvasMouseDragEnd$",{get:function(){return this._documentCanvasMouseDragEnd$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"documentMouseMove$",{get:function(){return this._documentMouseMove$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"documentMouseUp$",{get:function(){return this._documentMouseUp$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseOwner$",{get:function(){return this._mouseOwner$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseDown$",{get:function(){return this._mouseDown$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseMove$",{get:function(){return this._mouseMove$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseLeave$",{get:function(){return this._mouseLeave$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseOut$",{get:function(){return this._mouseOut$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseOver$",{get:function(){return this._mouseOver$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseUp$",{get:function(){return this._mouseUp$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"click$",{get:function(){return this._click$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"dblClick$",{get:function(){return this._dblClick$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"contextMenu$",{get:function(){return this._consistentContextMenu$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseWheel$",{get:function(){return this._mouseWheel$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseDragStart$",{get:function(){return this._mouseDragStart$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseDrag$",{get:function(){return this._mouseDrag$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"mouseDragEnd$",{get:function(){return this._mouseDragEnd$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"staticClick$",{get:function(){return this._staticClick$},enumerable:!0,configurable:!0}),t.prototype.claimMouse=function(t,e){this._claimMouse$.next({name:t,zindex:e})},t.prototype.unclaimMouse=function(t){this._claimMouse$.next({name:t,zindex:null})},t.prototype.filtered$=function(t,e){return e.withLatestFrom(this.mouseOwner$,function(t,e){return[t,e]}).filter(function(e){return e[1]===t}).map(function(t){return t[0]})},t}();r.MouseService=s,Object.defineProperty(r,"__esModule",{value:!0}),r.default=s},{"../Geo":228,"rxjs/BehaviorSubject":25,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/fromEvent":41,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/mergeMap":67,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/switchMap":78,"rxjs/add/operator/withLatestFrom":82}],345:[function(t,e,r){"use strict";var n=t("rxjs/BehaviorSubject"),i=t("rxjs/Observable");t("rxjs/add/observable/throw"),t("rxjs/add/operator/do"),t("rxjs/add/operator/finally"),t("rxjs/add/operator/first"),t("rxjs/add/operator/map"),t("rxjs/add/operator/mergeMap");var o=t("../API"),a=t("../Graph"),s=t("../Edge"),c=t("../State"),u=t("../Viewer"),h=function(){function t(t,e,r,i,s,h,l,p){this._apiV3=null!=r?r:new o.APIv3(t,e),this._imageLoadingService=null!=s?s:new a.ImageLoadingService,this._graphService=null!=i?i:new a.GraphService(new a.Graph(this.apiV3),this._imageLoadingService),this._loadingService=null!=h?h:new u.LoadingService,this._loadingName="navigator",this._stateService=null!=l?l:new c.StateService,this._cacheService=null!=p?p:new u.CacheService(this._graphService,this._stateService),this._cacheService.start(),this._keyRequested$=new n.BehaviorSubject(null),this._movedToKey$=new n.BehaviorSubject(null),this._dirRequested$=new n.BehaviorSubject(null),this._latLonRequested$=new n.BehaviorSubject(null)}return Object.defineProperty(t.prototype,"apiV3",{get:function(){return this._apiV3},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"graphService",{get:function(){return this._graphService},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"imageLoadingService",{get:function(){return this._imageLoadingService},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"keyRequested$",{get:function(){return this._keyRequested$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"loadingService",{get:function(){return this._loadingService},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"movedToKey$",{get:function(){return this._movedToKey$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"stateService",{get:function(){return this._stateService},enumerable:!0,configurable:!0}),t.prototype.moveToKey$=function(t){var e=this;return this.loadingService.startLoading(this._loadingName),this._keyRequested$.next(t),this._graphService.cacheNode$(t).do(function(t){e.stateService.setNodes([t]),e._movedToKey$.next(t.key)}).finally(function(){e.loadingService.stopLoading(e._loadingName)})},t.prototype.moveDir$=function(t){var e=this;return this.loadingService.startLoading(this._loadingName),this._dirRequested$.next(t),this.stateService.currentNode$.first().mergeMap(function(e){return([s.EdgeDirection.Next,s.EdgeDirection.Prev].indexOf(t)>-1?e.sequenceEdges$:e.spatialEdges$).first().map(function(e){for(var r=0,n=e.edges;r<n.length;r++){var i=n[r];if(i.data.direction===t)return i.to}return null})}).mergeMap(function(r){return null==r?(e.loadingService.stopLoading(e._loadingName),i.Observable.throw(new Error("Direction ("+t+") does not exist for current node."))):e.moveToKey$(r)})},t.prototype.moveCloseTo$=function(t,e){var r=this;return this.loadingService.startLoading(this._loadingName),this._latLonRequested$.next({lat:t,lon:e}),this.apiV3.imageCloseTo$(t,e).mergeMap(function(n){return null==n?(r.loadingService.stopLoading(r._loadingName),i.Observable.throw(new Error("No image found close to lat "+t+", lon "+e+"."))):r.moveToKey$(n.key)})},t.prototype.setFilter$=function(t){var e=this;return this._stateService.clearNodes(),this._movedToKey$.first().mergeMap(function(r){return null!=r?e._trajectoryKeys$().mergeMap(function(r){return e._graphService.setFilter$(t).mergeMap(function(t){return e._cacheKeys$(r)})}).last():e._keyRequested$.mergeMap(function(r){return null!=r?e._graphService.setFilter$(t).mergeMap(function(t){return e._graphService.cacheNode$(r)}):e._graphService.setFilter$(t).map(function(t){})})}).map(function(t){})},t.prototype.setToken$=function(t){var e=this;return this._stateService.clearNodes(),this._movedToKey$.first().do(function(r){e._apiV3.setToken(t)}).mergeMap(function(t){return null==t?e._graphService.reset$([]).map(function(t){}):e._trajectoryKeys$().mergeMap(function(t){return e._graphService.reset$(t).mergeMap(function(r){return e._cacheKeys$(t)})}).last().map(function(t){})})},t.prototype._cacheKeys$=function(t){var e=this,r=t.map(function(t){return e._graphService.cacheNode$(t)});return i.Observable.from(r).mergeAll()},t.prototype._trajectoryKeys$=function(){return this._stateService.currentState$.first().map(function(t){return t.state.trajectory.map(function(t){return t.key})})},t}();r.Navigator=h,Object.defineProperty(r,"__esModule",{value:!0}),r.default=h},{"../API":224,"../Edge":226,"../Graph":229,"../State":232,"../Viewer":235,"rxjs/BehaviorSubject":25,"rxjs/Observable":28,"rxjs/add/observable/throw":45,"rxjs/add/operator/do":58,"rxjs/add/operator/finally":61,"rxjs/add/operator/first":62,"rxjs/add/operator/map":64,"rxjs/add/operator/mergeMap":67}],346:[function(t,e,r){"use strict";var n=t("rxjs/Observable");t("rxjs/add/observable/combineLatest"),t("rxjs/add/operator/distinctUntilChanged"),t("rxjs/add/operator/map"),t("rxjs/add/operator/throttleTime");var i=t("../Viewer"),o=function(){function t(t,e,r){var n=this;this._container=r,this._eventEmitter=t,this._navigator=e,this._projection=new i.Projection,this._started=!1,this._navigator.loadingService.loading$.subscribe(function(t){n._eventEmitter.fire(i.Viewer.loadingchanged,t)})}return Object.defineProperty(t.prototype,"started",{get:function(){return this._started},enumerable:!0,configurable:!0}),t.prototype.startEmit=function(){var t=this;if(!this._started){this._started=!0,this._currentNodeSubscription=this._navigator.stateService.currentNodeExternal$.subscribe(function(e){t._eventEmitter.fire(i.Viewer.nodechanged,e)}),this._sequenceEdgesSubscription=this._navigator.stateService.currentNodeExternal$.switchMap(function(t){return t.sequenceEdges$}).subscribe(function(e){t._eventEmitter.fire(i.Viewer.sequenceedgeschanged,e)}),this._spatialEdgesSubscription=this._navigator.stateService.currentNodeExternal$.switchMap(function(t){return t.spatialEdges$}).subscribe(function(e){t._eventEmitter.fire(i.Viewer.spatialedgeschanged,e)}),this._moveSubscription=n.Observable.combineLatest(this._navigator.stateService.inMotion$,this._container.mouseService.active$,this._container.touchService.active$).map(function(t){return t[0]||t[1]||t[2]}).distinctUntilChanged().subscribe(function(e){e?t._eventEmitter.fire(i.Viewer.movestart,null):t._eventEmitter.fire(i.Viewer.moveend,null)}),this._bearingSubscription=this._container.renderService.bearing$.throttleTime(100).distinctUntilChanged(function(t,e){return Math.abs(e-t)<1}).subscribe(function(e){t._eventEmitter.fire(i.Viewer.bearingchanged,e)});var e=this._container.mouseService.active$.switchMap(function(e){return e?n.Observable.empty():t._container.mouseService.mouseMove$});this._viewerMouseEventSubscription=n.Observable.merge(this._mapMouseEvent$(i.Viewer.click,this._container.mouseService.staticClick$),this._mapMouseEvent$(i.Viewer.contextmenu,this._container.mouseService.contextMenu$),this._mapMouseEvent$(i.Viewer.dblclick,this._container.mouseService.dblClick$),this._mapMouseEvent$(i.Viewer.mousedown,this._container.mouseService.mouseDown$),this._mapMouseEvent$(i.Viewer.mousemove,e),this._mapMouseEvent$(i.Viewer.mouseout,this._container.mouseService.mouseOut$),this._mapMouseEvent$(i.Viewer.mouseover,this._container.mouseService.mouseOver$),this._mapMouseEvent$(i.Viewer.mouseup,this._container.mouseService.mouseUp$)).withLatestFrom(this._container.renderService.renderCamera$,this._navigator.stateService.reference$,this._navigator.stateService.currentTransform$).map(function(e){var r=e[0],n=r[0],i=r[1],o=e[1],a=e[2],s=e[3],c=t._projection.unprojectFromEvent(i,t._container.element,o,a,s);return{basicPoint:c.basicPoint,latLon:c.latLon,originalEvent:i,pixelPoint:c.pixelPoint,target:t._eventEmitter,type:n}}).subscribe(function(e){t._eventEmitter.fire(e.type,e)})}},t.prototype.stopEmit=function(){this.started&&(this._started=!1,this._bearingSubscription.unsubscribe(),this._currentNodeSubscription.unsubscribe(),this._moveSubscription.unsubscribe(),this._sequenceEdgesSubscription.unsubscribe(),this._spatialEdgesSubscription.unsubscribe(),this._viewerMouseEventSubscription.unsubscribe(),this._bearingSubscription=null,this._currentNodeSubscription=null,this._moveSubscription=null,this._sequenceEdgesSubscription=null,this._spatialEdgesSubscription=null,this._viewerMouseEventSubscription=null)},t.prototype.unproject$=function(t){var e=this;return n.Observable.combineLatest(this._container.renderService.renderCamera$,this._navigator.stateService.reference$,this._navigator.stateService.currentTransform$).first().map(function(r){var n=r[0],i=r[1],o=r[2];return e._projection.unprojectFromCanvas(t,e._container.element,n,i,o).latLon})},t.prototype._mapMouseEvent$=function(t,e){return e.map(function(e){return[t,e]})},t}();r.Observer=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../Viewer":235,"rxjs/Observable":28,"rxjs/add/observable/combineLatest":37,"rxjs/add/operator/distinctUntilChanged":57,"rxjs/add/operator/map":64,"rxjs/add/operator/throttleTime":81}],347:[function(t,e,r){"use strict";var n=t("three"),i=t("../Geo"),o=function(){function t(t,e){this._geoCoords=t||new i.GeoCoords,this._viewportCoords=e||new i.ViewportCoords}return t.prototype.unprojectFromEvent=function(t,e,r,n,i){var o=this._viewportCoords.canvasPosition(t,e);return this.unprojectFromCanvas(o,e,r,n,i)},t.prototype.unprojectFromCanvas=function(t,e,r,i,o){var a=t[0],s=t[1],c=this._viewportCoords.canvasToViewport(a,s,e),u=c[0],h=c[1],l=new n.Vector3(u,h,1).unproject(r.perspective),p=o.projectBasic(l.toArray());(p[0]<0||p[0]>1||p[1]<0||p[1]>1)&&(p=null);var f=l.clone().sub(r.camera.position).normalize(),d=-2/f.z,m=null;if(d>0&&d<100&&p){var v=f.clone().multiplyScalar(d).add(r.camera.position),g=this._geoCoords.enuToGeodetic(v.x,v.y,v.z,i.lat,i.lon,i.alt).slice(0,2);m={lat:g[0],lon:g[1]}}return{basicPoint:p,latLon:m,pixelPoint:[a,s]}},t}();r.Projection=o,Object.defineProperty(r,"__esModule",{value:!0}),r.default=o},{"../Geo":228,three:175}],348:[function(t,e,r){"use strict";var n;!function(t){t[t.Center=0]="Center",t[t.Start=1]="Start",t[t.End=2]="End"}(n=r.SpriteAlignment||(r.SpriteAlignment={})),Object.defineProperty(r,"__esModule",{value:!0}),r.default=n},{}],349:[function(t,e,r){"use strict";var n=t("three"),i=t("virtual-dom"),o=t("rxjs/Subject");t("rxjs/add/operator/publishReplay"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/startWith");var a=t("../Viewer"),s=function(){function t(){}return Object.defineProperty(t.prototype,"json",{set:function(t){this._json=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"image",{set:function(t){this._image=t,this._texture=new n.Texture(this._image),this._texture.minFilter=n.NearestFilter},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"loaded",{get:function(){return!(!this._image||!this._json)},enumerable:!0,configurable:!0}),t.prototype.getGLSprite=function(t){if(!this.loaded)throw new Error("Sprites cannot be retrieved before the atlas is loaded.");var e=this._json[t];if(!e)return console.warn("Sprite with key"+t+"does not exist in sprite definition."),new n.Object3D;var r=this._texture.clone();r.needsUpdate=!0;var i=this._image.width,o=this._image.height;r.offset.x=e.x/i,r.offset.y=(o-e.y-e.height)/o,r.repeat.x=e.width/i,r.repeat.y=e.height/o;var a=new n.SpriteMaterial({map:r});return new n.Sprite(a)},t.prototype.getDOMSprite=function(t,e,r){if(!this.loaded)throw new Error("Sprites cannot be retrieved before the atlas is loaded.");null==e&&(e=a.SpriteAlignment.Start),null==r&&(r=a.SpriteAlignment.Start);var n=this._json[t];if(!n)return console.warn("Sprite with key"+t+"does not exist in sprite definition."),i.h("div",{},[]);var o=n.y,s=n.x+n.width,c=n.y+n.height,u=n.x,h=-n.x,l=-n.y,p=this._image.height,f=this._image.width;switch(e){case a.SpriteAlignment.Center:h-=n.width/2;break;case a.SpriteAlignment.End:h-=n.width;break;case a.SpriteAlignment.Start:}switch(r){case a.SpriteAlignment.Center:l-=n.height/2;break;case a.SpriteAlignment.End:l-=n.height;break;case a.SpriteAlignment.Start:}var d=1/n.pixelRatio;o*=d,s*=d,c*=d,u*=d,h*=d,l*=d,p*=d,f*=d;var m={src:this._image.src,style:{clip:"rect("+o+"px, "+s+"px, "+c+"px, "+u+"px)",height:p+"px",left:h+"px",position:"absolute",top:l+"px",width:f+"px"}};return i.h("img",m,[])},t}(),c=function(){function t(t){var e=this;if(this._retina=window.devicePixelRatio>1,this._spriteAtlasOperation$=new o.Subject,this._spriteAtlas$=this._spriteAtlasOperation$.startWith(function(t){return t}).scan(function(t,e){return e(t)},new s).publishReplay(1).refCount(),this._spriteAtlas$.subscribe(function(){}),null!=t){var r=this._retina?"@2x":"",n=new XMLHttpRequest;n.open("GET",t+r+".png",!0),n.responseType="arraybuffer",n.onload=function(){var t=new Image;t.onload=function(){e._spriteAtlasOperation$.next(function(e){return e.image=t,e})};var r=new Blob([n.response]);t.src=window.URL.createObjectURL(r)},n.onerror=function(e){console.error(new Error("Failed to fetch sprite sheet ("+t+r+".png)"))},n.send();var i=new XMLHttpRequest;i.open("GET",t+r+".json",!0),i.responseType="text",i.onload=function(){var t=JSON.parse(i.response);e._spriteAtlasOperation$.next(function(e){return e.json=t,e})},i.onerror=function(e){console.error(new Error("Failed to fetch sheet ("+t+r+".json)"))},i.send()}}return Object.defineProperty(t.prototype,"spriteAtlas$",{get:function(){return this._spriteAtlas$},enumerable:!0,configurable:!0}),t}();r.SpriteService=c,Object.defineProperty(r,"__esModule",{value:!0}),r.default=c},{"../Viewer":235,"rxjs/Subject":33,"rxjs/add/operator/publishReplay":71,"rxjs/add/operator/scan":72,"rxjs/add/operator/startWith":77,three:175,"virtual-dom":181}],350:[function(t,e,r){"use strict";var n=t("rxjs/BehaviorSubject"),i=t("rxjs/Observable"),o=t("rxjs/Subject");t("rxjs/add/observable/timer"),t("rxjs/add/operator/bufferWhen"),t("rxjs/add/operator/filter"),t("rxjs/add/operator/map"),t("rxjs/add/operator/merge"),t("rxjs/add/operator/scan"),t("rxjs/add/operator/switchMap");var a=function(){function t(t){var e=this;this._element=t,this._activeSubject$=new n.BehaviorSubject(!1),this._active$=this._activeSubject$.distinctUntilChanged().publishReplay(1).refCount(),this._touchStart$=i.Observable.fromEvent(t,"touchstart"),this._touchMove$=i.Observable.fromEvent(t,"touchmove"),this._touchEnd$=i.Observable.fromEvent(t,"touchend"),this._touchCancel$=i.Observable.fromEvent(t,"touchcancel");var r=this._touchStart$.filter(function(t){return 1===t.touches.length&&1===t.targetTouches.length}).share();this._doubleTap$=r.bufferWhen(function(){return r.first().switchMap(function(t){return i.Observable.timer(300).merge(r).take(1)})}).filter(function(t){return 2===t.length}).map(function(t){return t[t.length-1]}).share(),this._doubleTap$.subscribe(function(t){t.preventDefault()}),this._singleTouchMove$=this._touchMove$.filter(function(t){return 1===t.touches.length&&1===t.targetTouches.length}).share();var a=i.Observable.merge(this._touchStart$,this._touchEnd$,this._touchCancel$).filter(function(t){return 1===t.touches.length&&1===t.targetTouches.length}),s=i.Observable.merge(this._touchStart$,this._touchEnd$,this._touchCancel$).filter(function(t){return t.touches.length>=1}),c=i.Observable.merge(this._touchEnd$,this._touchCancel$).filter(function(t){return 0===t.touches.length});this._singleTouchDragStart$=a.mergeMap(function(t){return e._singleTouchMove$.takeUntil(i.Observable.merge(c,s)).take(1)}),this._singleTouchDragEnd$=a.mergeMap(function(t){return i.Observable.merge(c,s).first()}),this._singleTouchDrag$=a.switchMap(function(t){return e._singleTouchMove$.skip(1).takeUntil(i.Observable.merge(s,c))});var u=i.Observable.merge(this._touchStart$,this._touchEnd$,this._touchCancel$);this._pinchStart$=u.filter(function(t){return 2===t.touches.length&&2===t.targetTouches.length}),this._pinchEnd$=u.filter(function(t){return 2!==t.touches.length||2!==t.targetTouches.length}),this._pinchOperation$=new o.Subject,this._pinch$=this._pinchOperation$.scan(function(t,e){return e(t)},{changeX:0,changeY:0,clientX:0,clientY:0,distance:0,distanceChange:0,distanceX:0,distanceY:0,originalEvent:null,pageX:0,pageY:0,screenX:0,screenY:0,touch1:null,touch2:null}),this._touchMove$.filter(function(t){return 2===t.touches.length&&2===t.targetTouches.length}).map(function(t){return function(e){var r=t.touches[0],n=t.touches[1],i=Math.min(r.clientX,n.clientX),o=Math.max(r.clientX,n.clientX),a=Math.min(r.clientY,n.clientY),s=Math.max(r.clientY,n.clientY),c=i+(o-i)/2,u=a+(s-a)/2,h=c+r.pageX-r.clientX,l=u+r.pageY-r.clientY,p=c+r.screenX-r.clientX,f=u+r.screenY-r.clientY,d=Math.abs(r.clientX-n.clientX),m=Math.abs(r.clientY-n.clientY),v=Math.sqrt(d*d+m*m),g=v-e.distance;return{changeX:d-e.distanceX,changeY:m-e.distanceY,clientX:c,clientY:u,distance:v,distanceChange:g,distanceX:d,distanceY:m,originalEvent:t,pageX:h,pageY:l,screenX:p,screenY:f,touch1:r,touch2:n}}}).subscribe(this._pinchOperation$),this._pinchChange$=this._pinchStart$.switchMap(function(t){return e._pinch$.skip(1).takeUntil(e._pinchEnd$)})}return Object.defineProperty(t.prototype,"active$",{
+get:function(){return this._active$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"activate$",{get:function(){return this._activeSubject$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"doubleTap$",{get:function(){return this._doubleTap$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"touchStart$",{get:function(){return this._touchStart$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"touchMove$",{get:function(){return this._touchMove$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"touchEnd$",{get:function(){return this._touchEnd$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"touchCancel$",{get:function(){return this._touchCancel$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"singleTouchDragStart$",{get:function(){return this._singleTouchDragStart$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"singleTouchDrag$",{get:function(){return this._singleTouchDrag$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"singleTouchDragEnd$",{get:function(){return this._singleTouchDragEnd$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"pinch$",{get:function(){return this._pinchChange$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"pinchStart$",{get:function(){return this._pinchStart$},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"pinchEnd$",{get:function(){return this._pinchEnd$},enumerable:!0,configurable:!0}),t}();r.TouchService=a},{"rxjs/BehaviorSubject":25,"rxjs/Observable":28,"rxjs/Subject":33,"rxjs/add/observable/timer":46,"rxjs/add/operator/bufferWhen":50,"rxjs/add/operator/filter":60,"rxjs/add/operator/map":64,"rxjs/add/operator/merge":65,"rxjs/add/operator/scan":72,"rxjs/add/operator/switchMap":78}],351:[function(t,e,r){"use strict";var n=this&&this.__extends||function(t,e){function r(){this.constructor=t}for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)},i=t("when"),o=t("../Viewer"),a=t("../Utils"),s=function(t){function e(e,r,n,i,s){var c=t.call(this)||this;return i=null!=i?i:{},a.Settings.setOptions(i),c._navigator=new o.Navigator(r,s),c._container=new o.Container(e,c._navigator.stateService,i),c._observer=new o.Observer(c,c._navigator,c._container),c._componentController=new o.ComponentController(c._container,c._navigator,c._observer,n,i.component),c}return n(e,t),e.prototype.activateComponent=function(t){this._componentController.activate(t)},e.prototype.activateCover=function(){this._componentController.activateCover()},e.prototype.deactivateComponent=function(t){this._componentController.deactivate(t)},e.prototype.deactivateCover=function(){this._componentController.deactivateCover()},e.prototype.getBearing=function(){var t=this;return i.promise(function(e,r){t._container.renderService.bearing$.first().subscribe(function(t){e(t)},function(t){r(t)})})},e.prototype.getCenter=function(){var t=this;return i.promise(function(e,r){t._navigator.stateService.getCenter().subscribe(function(t){e(t)},function(t){r(t)})})},e.prototype.getComponent=function(t){return this._componentController.get(t)},e.prototype.getZoom=function(){var t=this;return i.promise(function(e,r){t._navigator.stateService.getZoom().subscribe(function(t){e(t)},function(t){r(t)})})},e.prototype.moveCloseTo=function(t,e){var r=this;return i.promise(function(n,i){r._navigator.moveCloseTo$(t,e).subscribe(function(t){n(t)},function(t){i(t)})})},e.prototype.moveDir=function(t){var e=this;return i.promise(function(r,n){e._navigator.moveDir$(t).subscribe(function(t){r(t)},function(t){n(t)})})},e.prototype.moveToKey=function(t){var e=this;return i.promise(function(r,n){e._navigator.moveToKey$(t).subscribe(function(t){r(t)},function(t){n(t)})})},e.prototype.resize=function(){this._container.renderService.resize$.next(null),this._componentController.resize()},e.prototype.setAuthToken=function(t){var e=this;return i.promise(function(r,n){e._navigator.setToken$(t).subscribe(function(){r(void 0)},function(t){n(t)})})},e.prototype.setCenter=function(t){this._navigator.stateService.setCenter(t)},e.prototype.setFilter=function(t){var e=this;return i.promise(function(r,n){e._navigator.setFilter$(t).subscribe(function(){r(void 0)},function(t){n(t)})})},e.prototype.setRenderMode=function(t){this._container.renderService.renderMode$.next(t)},e.prototype.setZoom=function(t){this._navigator.stateService.setZoom(t)},e.prototype.unproject=function(t){var e=this;return i.promise(function(r,n){e._observer.unproject$(t).subscribe(function(t){r(t)},function(t){n(t)})})},e}(a.EventEmitter);s.bearingchanged="bearingchanged",s.click="click",s.contextmenu="contextmenu",s.dblclick="dblclick",s.loadingchanged="loadingchanged",s.mousedown="mousedown",s.mousemove="mousemove",s.mouseout="mouseout",s.mouseover="mouseover",s.mouseup="mouseup",s.moveend="moveend",s.movestart="movestart",s.nodechanged="nodechanged",s.sequenceedgeschanged="sequenceedgeschanged",s.spatialedgeschanged="spatialedgeschanged",r.Viewer=s},{"../Utils":234,"../Viewer":235,when:222}]},{},[230])(230)});
diff --git a/vendor/assets/iD/iD/traffico/LICENSE b/vendor/assets/iD/iD/traffico/LICENSE
deleted file mode 100644 (file)
index 7f3e6da..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 mapillary
-
-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/vendor/assets/iD/iD/traffico/README.md b/vendor/assets/iD/iD/traffico/README.md
deleted file mode 100644 (file)
index 9aa1239..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-# traffico-release
-Release repository for Traffico, an Open Source Traffic Sign Font.
-
-Source code: [mapillary/traffico](https://github.com/mapillary/traffico)
-
-License: MIT
diff --git a/vendor/assets/iD/iD/traffico/bower.json b/vendor/assets/iD/iD/traffico/bower.json
deleted file mode 100644 (file)
index 76f239f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"name":"Traffico","version":"0.1.26","homepage":"https://github.com/mapillary/traffico","authors":["Kamil Nikel <knikel@posteo.de>"],"description":"An Open Source Traffic Sign Font","main":"stylesheets/traffico.css","keywords":["traffic","signs","road","font"],"license":"MIT"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/fonts/traffico-preview.html b/vendor/assets/iD/iD/traffico/fonts/traffico-preview.html
deleted file mode 100644 (file)
index 0bfff92..0000000
+++ /dev/null
@@ -1,2663 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>traffico glyphs preview</title>
-
-    <style>
-      /* Page Styles */
-
-      * {
-        -moz-box-sizing: border-box;
-        -webkit-box-sizing: border-box;
-        box-sizing: border-box;
-        margin: 0;
-        padding: 0;
-      }
-
-      body {
-        background: #fff;
-        color: #444;
-        font: 16px/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif;
-      }
-
-      a,
-      a:visited {
-        color: #888;
-        text-decoration: underline;
-      }
-      a:hover,
-      a:focus { color: #000; }
-
-      header {
-        border-bottom: 2px solid #ddd;
-        margin-bottom: 20px;
-        overflow: hidden;
-        padding: 20px 0;
-      }
-
-      header h1 {
-        color: #888;
-        float: left;
-        font-size: 36px;
-        font-weight: 300;
-      }
-
-      header a {
-        float: right;
-        font-size: 14px;
-      }
-
-      .container {
-        margin: 0 auto;
-        max-width: 1200px;
-        min-width: 960px;
-        padding: 0 40px;
-        width: 90%;
-      }
-
-      .glyph {
-        border-bottom: 1px dotted #ccc;
-        padding: 10px 0 20px;
-        margin-bottom: 20px;
-      }
-
-      .preview-glyphs { vertical-align: bottom; }
-
-      .preview-scale {
-        color: #888;
-        font-size: 12px;
-        margin-top: 5px;
-      }
-
-      .step {
-        display: inline-block;
-        line-height: 1;
-        position: relative;
-        width: 10%;
-      }
-
-      .step .letters,
-      .step i {
-        -webkit-transition: opacity .3s;
-        -moz-transition: opacity .3s;
-        -ms-transition: opacity .3s;
-        -o-transition: opacity .3s;
-        transition: opacity .3s;
-      }
-
-      .step:hover .letters { opacity: 1; }
-      .step:hover i { opacity: .3; }
-
-      .letters {
-        opacity: .3;
-        position: absolute;
-      }
-
-      .characters-off .letters { display: none; }
-      .characters-off .step:hover i { opacity: 1; }
-
-      
-      .size-12 { font-size: 12px; }
-      
-      .size-14 { font-size: 14px; }
-      
-      .size-16 { font-size: 16px; }
-      
-      .size-18 { font-size: 18px; }
-      
-      .size-21 { font-size: 21px; }
-      
-      .size-24 { font-size: 24px; }
-      
-      .size-36 { font-size: 36px; }
-      
-      .size-48 { font-size: 48px; }
-      
-      .size-60 { font-size: 60px; }
-      
-      .size-72 { font-size: 72px; }
-      
-
-      .usage { margin-top: 10px; }
-
-      .usage input {
-        font-family: monospace;
-        margin-right: 3px;
-        padding: 2px 5px;
-        text-align: center;
-      }
-
-      .usage .point { width: 150px; }
-
-      .usage .class { width: 250px; }
-
-      footer {
-        color: #888;
-        font-size: 12px;
-        padding: 20px 0;
-      }
-
-      /* Icon Font: traffico */
-
-      @font-face {
-  font-family: "traffico";
-  src: url("./traffico_d596ae6150aa5c55ac14b1e060efc523.eot");
-  src: url("./traffico_d596ae6150aa5c55ac14b1e060efc523.eot?#iefix") format("embedded-opentype"),
-       url("./traffico_d596ae6150aa5c55ac14b1e060efc523.woff") format("woff"),
-       url("./traffico_d596ae6150aa5c55ac14b1e060efc523.ttf") format("truetype"),
-       url("./traffico_d596ae6150aa5c55ac14b1e060efc523.svg#traffico") format("svg");
-  font-weight: normal;
-  font-style: normal;
-}
-
-@media screen and (-webkit-min-device-pixel-ratio:0) {
-  @font-face {
-    font-family: "traffico";
-    src: url("./traffico_d596ae6150aa5c55ac14b1e060efc523.svg#traffico") format("svg");
-  }
-}
-
-      [data-icon]:before { content: attr(data-icon); }
-
-      [data-icon]:before,
-      .t-DE-arrow-up:before,
-.t-US-arrow-oneway:before,
-.t-US-arrow-up:before,
-.t-added-lane:before,
-.t-added-lane-entering-roadway:before,
-.t-airplane:before,
-.t-arrow-l:before,
-.t-arrow-oneway:before,
-.t-arrow-s-l:before,
-.t-arrows_both_bra:before,
-.t-bending-priority:before,
-.t-bicycle:before,
-.t-bicycle-slippery:before,
-.t-bump:before,
-.t-bump_bra:before,
-.t-bump_road_bra:before,
-.t-bumps:before,
-.t-bus:before,
-.t-car:before,
-.t-children:before,
-.t-children-au:before,
-.t-circle-bar-rounded:before,
-.t-circle-bg:before,
-.t-circle-o:before,
-.t-circle-separator:before,
-.t-cliff:before,
-.t-cross-roads:before,
-.t-crossroads-ahead:before,
-.t-crossroads-ahead-ontario:before,
-.t-curve-r-l:before,
-.t-cyclists_crossing_bra:before,
-.t-d-curve-l:before,
-.t-dead-end:before,
-.t-descent:before,
-.t-disabled-p:before,
-.t-divided-highway:before,
-.t-domestic-animal:before,
-.t-domestic-animals-au:before,
-.t-emu:before,
-.t-end:before,
-.t-equestrian:before,
-.t-europe_stars:before,
-.t-exclamation:before,
-.t-falling-rocks-EU:before,
-.t-falling-rocks-US:before,
-.t-falling-rocks-au:before,
-.t-fire-station:before,
-.t-firemans-car:before,
-.t-flaggers:before,
-.t-footpath:before,
-.t-h:before,
-.t-h-align-l:before,
-.t-hairpin-curve:before,
-.t-hairpin-curve-au:before,
-.t-hazardous-material:before,
-.t-height:before,
-.t-height-restriction-ca:before,
-.t-highway-divided:before,
-.t-hitch-hiking:before,
-.t-kangaroo:before,
-.t-koala-ugly:before,
-.t-koalas:before,
-.t-level-crossing:before,
-.t-light-rail:before,
-.t-lightground-railroad-crossing:before,
-.t-loop-270:before,
-.t-loose_road_surface_bra:before,
-.t-lorry:before,
-.t-lorry-left:before,
-.t-low-clearance:before,
-.t-merge:before,
-.t-metric-clearance:before,
-.t-moped:before,
-.t-motorbike:before,
-.t-narrow-bridge-au:before,
-.t-narrow-bridge-us:before,
-.t-narrow-road-both:before,
-.t-narrow-road-l:before,
-.t-no-l-or-u-turn:before,
-.t-octagon:before,
-.t-offset-roads:before,
-.t-opening-swing-bridge-ca:before,
-.t-parking:before,
-.t-pass-either-us:before,
-.t-pass-l-r:before,
-.t-pavement-ends:before,
-.t-pedestrian:before,
-.t-pedestrian-crossing:before,
-.t-pedestrian-crossing-au:before,
-.t-pedestrian_bra:before,
-.t-pedestrian_crossing_bra:before,
-.t-pedestrians:before,
-.t-play-ground:before,
-.t-playground-ahead-ca:before,
-.t-playground-br:before,
-.t-pretzel-loop:before,
-.t-railroad:before,
-.t-railroad-barriers:before,
-.t-railway-flashing-au:before,
-.t-railway-xing-secured:before,
-.t-railway-xing-unsecured:before,
-.t-reverse-curve-au:before,
-.t-reverse-curve-ontario:before,
-.t-right-of-way:before,
-.t-right-of-way-l:before,
-.t-roadworks:before,
-.t-roadworks_bra:before,
-.t-rollerblading:before,
-.t-roundabout:before,
-.t-school:before,
-.t-school_zone_bra:before,
-.t-series-of-curves-left:before,
-.t-share-road:before,
-.t-share-roads:before,
-.t-side-road-a-a-l:before,
-.t-side-road-a-a-r:before,
-.t-side-road-p-l:before,
-.t-side-road-p-r:before,
-.t-side-road-perpendicular:before,
-.t-single-2-reverse-curve:before,
-.t-skewed-railroads:before,
-.t-slippery:before,
-.t-slippery-motorcycle:before,
-.t-slippery-road:before,
-.t-small-arrow-au:before,
-.t-snowflake:before,
-.t-square-angular:before,
-.t-square-diagonal-bar:before,
-.t-square-rounded:before,
-.t-steep-hill:before,
-.t-steep-hill-downwards:before,
-.t-steep-hill-upwards:before,
-.t-stop:before,
-.t-t-roads:before,
-.t-tractor:before,
-.t-traffic-signal-au:before,
-.t-trailer:before,
-.t-train-au:before,
-.t-train-electric:before,
-.t-tram:before,
-.t-transit_bra:before,
-.t-tri-angular:before,
-.t-tri-rounded:before,
-.t-truck:before,
-.t-truck-rollover-speed:before,
-.t-trucks-rollover:before,
-.t-tunnel:before,
-.t-turn-90-l:before,
-.t-turn-curve-speed:before,
-.t-turn-l:before,
-.t-turn-l-aus:before,
-.t-turn-l-curve:before,
-.t-turn-reverse-left:before,
-.t-turn-right-curve-ontario:before,
-.t-turnaround:before,
-.t-turnaround2:before,
-.t-two_way_arrows_bra:before,
-.t-u-turn:before,
-.t-u-turn-au:before,
-.t-wild-animal:before,
-.t-windbag:before,
-.t-winding-road-left:before,
-.t-wombat:before,
-.t-y-roads:before {
-        display: inline-block;
-  font-family: "traffico";
-  font-style: normal;
-  font-weight: normal;
-  font-variant: normal;
-  line-height: 1;
-  text-decoration: inherit;
-  text-rendering: optimizeLegibility;
-  text-transform: none;
-  -moz-osx-font-smoothing: grayscale;
-  -webkit-font-smoothing: antialiased;
-  font-smoothing: antialiased;
-      }
-
-      .t-DE-arrow-up:before { content: "\f100"; }
-.t-US-arrow-oneway:before { content: "\f101"; }
-.t-US-arrow-up:before { content: "\f102"; }
-.t-added-lane:before { content: "\f103"; }
-.t-added-lane-entering-roadway:before { content: "\f104"; }
-.t-airplane:before { content: "\f105"; }
-.t-arrow-l:before { content: "\f106"; }
-.t-arrow-oneway:before { content: "\f107"; }
-.t-arrow-s-l:before { content: "\f108"; }
-.t-arrows_both_bra:before { content: "\f109"; }
-.t-bending-priority:before { content: "\f10a"; }
-.t-bicycle:before { content: "\f10b"; }
-.t-bicycle-slippery:before { content: "\f10c"; }
-.t-bump:before { content: "\f10d"; }
-.t-bump_bra:before { content: "\f10e"; }
-.t-bump_road_bra:before { content: "\f10f"; }
-.t-bumps:before { content: "\f110"; }
-.t-bus:before { content: "\f111"; }
-.t-car:before { content: "\f112"; }
-.t-children:before { content: "\f113"; }
-.t-children-au:before { content: "\f114"; }
-.t-circle-bar-rounded:before { content: "\f115"; }
-.t-circle-bg:before { content: "\f116"; }
-.t-circle-o:before { content: "\f117"; }
-.t-circle-separator:before { content: "\f118"; }
-.t-cliff:before { content: "\f119"; }
-.t-cross-roads:before { content: "\f11a"; }
-.t-crossroads-ahead:before { content: "\f11b"; }
-.t-crossroads-ahead-ontario:before { content: "\f11c"; }
-.t-curve-r-l:before { content: "\f11d"; }
-.t-cyclists_crossing_bra:before { content: "\f11e"; }
-.t-d-curve-l:before { content: "\f11f"; }
-.t-dead-end:before { content: "\f120"; }
-.t-descent:before { content: "\f121"; }
-.t-disabled-p:before { content: "\f122"; }
-.t-divided-highway:before { content: "\f123"; }
-.t-domestic-animal:before { content: "\f124"; }
-.t-domestic-animals-au:before { content: "\f125"; }
-.t-emu:before { content: "\f126"; }
-.t-end:before { content: "\f127"; }
-.t-equestrian:before { content: "\f128"; }
-.t-europe_stars:before { content: "\f129"; }
-.t-exclamation:before { content: "\f12a"; }
-.t-falling-rocks-EU:before { content: "\f12b"; }
-.t-falling-rocks-US:before { content: "\f12c"; }
-.t-falling-rocks-au:before { content: "\f12d"; }
-.t-fire-station:before { content: "\f12e"; }
-.t-firemans-car:before { content: "\f12f"; }
-.t-flaggers:before { content: "\f130"; }
-.t-footpath:before { content: "\f131"; }
-.t-h:before { content: "\f132"; }
-.t-h-align-l:before { content: "\f133"; }
-.t-hairpin-curve:before { content: "\f134"; }
-.t-hairpin-curve-au:before { content: "\f135"; }
-.t-hazardous-material:before { content: "\f136"; }
-.t-height:before { content: "\f137"; }
-.t-height-restriction-ca:before { content: "\f138"; }
-.t-highway-divided:before { content: "\f139"; }
-.t-hitch-hiking:before { content: "\f13a"; }
-.t-kangaroo:before { content: "\f13b"; }
-.t-koala-ugly:before { content: "\f13c"; }
-.t-koalas:before { content: "\f13d"; }
-.t-level-crossing:before { content: "\f13e"; }
-.t-light-rail:before { content: "\f13f"; }
-.t-lightground-railroad-crossing:before { content: "\f140"; }
-.t-loop-270:before { content: "\f141"; }
-.t-loose_road_surface_bra:before { content: "\f142"; }
-.t-lorry:before { content: "\f143"; }
-.t-lorry-left:before { content: "\f144"; }
-.t-low-clearance:before { content: "\f145"; }
-.t-merge:before { content: "\f146"; }
-.t-metric-clearance:before { content: "\f147"; }
-.t-moped:before { content: "\f148"; }
-.t-motorbike:before { content: "\f149"; }
-.t-narrow-bridge-au:before { content: "\f14a"; }
-.t-narrow-bridge-us:before { content: "\f14b"; }
-.t-narrow-road-both:before { content: "\f14c"; }
-.t-narrow-road-l:before { content: "\f14d"; }
-.t-no-l-or-u-turn:before { content: "\f14e"; }
-.t-octagon:before { content: "\f14f"; }
-.t-offset-roads:before { content: "\f150"; }
-.t-opening-swing-bridge-ca:before { content: "\f151"; }
-.t-parking:before { content: "\f152"; }
-.t-pass-either-us:before { content: "\f153"; }
-.t-pass-l-r:before { content: "\f154"; }
-.t-pavement-ends:before { content: "\f155"; }
-.t-pedestrian:before { content: "\f156"; }
-.t-pedestrian-crossing:before { content: "\f157"; }
-.t-pedestrian-crossing-au:before { content: "\f158"; }
-.t-pedestrian_bra:before { content: "\f159"; }
-.t-pedestrian_crossing_bra:before { content: "\f15a"; }
-.t-pedestrians:before { content: "\f15b"; }
-.t-play-ground:before { content: "\f15c"; }
-.t-playground-ahead-ca:before { content: "\f15d"; }
-.t-playground-br:before { content: "\f15e"; }
-.t-pretzel-loop:before { content: "\f15f"; }
-.t-railroad:before { content: "\f160"; }
-.t-railroad-barriers:before { content: "\f161"; }
-.t-railway-flashing-au:before { content: "\f162"; }
-.t-railway-xing-secured:before { content: "\f163"; }
-.t-railway-xing-unsecured:before { content: "\f164"; }
-.t-reverse-curve-au:before { content: "\f165"; }
-.t-reverse-curve-ontario:before { content: "\f166"; }
-.t-right-of-way:before { content: "\f167"; }
-.t-right-of-way-l:before { content: "\f168"; }
-.t-roadworks:before { content: "\f169"; }
-.t-roadworks_bra:before { content: "\f16a"; }
-.t-rollerblading:before { content: "\f16b"; }
-.t-roundabout:before { content: "\f16c"; }
-.t-school:before { content: "\f16d"; }
-.t-school_zone_bra:before { content: "\f16e"; }
-.t-series-of-curves-left:before { content: "\f16f"; }
-.t-share-road:before { content: "\f170"; }
-.t-share-roads:before { content: "\f171"; }
-.t-side-road-a-a-l:before { content: "\f172"; }
-.t-side-road-a-a-r:before { content: "\f173"; }
-.t-side-road-p-l:before { content: "\f174"; }
-.t-side-road-p-r:before { content: "\f175"; }
-.t-side-road-perpendicular:before { content: "\f176"; }
-.t-single-2-reverse-curve:before { content: "\f177"; }
-.t-skewed-railroads:before { content: "\f178"; }
-.t-slippery:before { content: "\f179"; }
-.t-slippery-motorcycle:before { content: "\f17a"; }
-.t-slippery-road:before { content: "\f17b"; }
-.t-small-arrow-au:before { content: "\f17c"; }
-.t-snowflake:before { content: "\f17d"; }
-.t-square-angular:before { content: "\f17e"; }
-.t-square-diagonal-bar:before { content: "\f17f"; }
-.t-square-rounded:before { content: "\f180"; }
-.t-steep-hill:before { content: "\f181"; }
-.t-steep-hill-downwards:before { content: "\f182"; }
-.t-steep-hill-upwards:before { content: "\f183"; }
-.t-stop:before { content: "\f184"; }
-.t-t-roads:before { content: "\f185"; }
-.t-tractor:before { content: "\f186"; }
-.t-traffic-signal-au:before { content: "\f187"; }
-.t-trailer:before { content: "\f188"; }
-.t-train-au:before { content: "\f189"; }
-.t-train-electric:before { content: "\f18a"; }
-.t-tram:before { content: "\f18b"; }
-.t-transit_bra:before { content: "\f18c"; }
-.t-tri-angular:before { content: "\f18d"; }
-.t-tri-rounded:before { content: "\f18e"; }
-.t-truck:before { content: "\f18f"; }
-.t-truck-rollover-speed:before { content: "\f190"; }
-.t-trucks-rollover:before { content: "\f191"; }
-.t-tunnel:before { content: "\f192"; }
-.t-turn-90-l:before { content: "\f193"; }
-.t-turn-curve-speed:before { content: "\f194"; }
-.t-turn-l:before { content: "\f195"; }
-.t-turn-l-aus:before { content: "\f196"; }
-.t-turn-l-curve:before { content: "\f197"; }
-.t-turn-reverse-left:before { content: "\f198"; }
-.t-turn-right-curve-ontario:before { content: "\f199"; }
-.t-turnaround:before { content: "\f19a"; }
-.t-turnaround2:before { content: "\f19b"; }
-.t-two_way_arrows_bra:before { content: "\f19c"; }
-.t-u-turn:before { content: "\f19d"; }
-.t-u-turn-au:before { content: "\f19e"; }
-.t-wild-animal:before { content: "\f19f"; }
-.t-windbag:before { content: "\f1a0"; }
-.t-winding-road-left:before { content: "\f1a1"; }
-.t-wombat:before { content: "\f1a2"; }
-.t-y-roads:before { content: "\f1a3"; }
-    </style>
-
-    <!--[if lte IE 8]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
-
-    <script>
-      function toggleCharacters() {
-        var body = document.getElementsByTagName('body')[0];
-        body.className = body.className === 'characters-off' ? '' : 'characters-off';
-      }
-    </script>
-  </head>
-
-  <body class="characters-off">
-    <div id="page" class="container">
-      <header>
-        <h1>traffico contains 164 glyphs:</h1>
-        <a onclick="toggleCharacters(); return false;" href="#">Toggle Preview Characters</a>
-      </header>
-
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-DE-arrow-up" class="t-DE-arrow-up"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-DE-arrow-up" class="t-DE-arrow-up"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-DE-arrow-up" class="t-DE-arrow-up"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-DE-arrow-up" class="t-DE-arrow-up"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-DE-arrow-up" class="t-DE-arrow-up"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-DE-arrow-up" class="t-DE-arrow-up"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-DE-arrow-up" class="t-DE-arrow-up"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-DE-arrow-up" class="t-DE-arrow-up"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-DE-arrow-up" class="t-DE-arrow-up"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-DE-arrow-up" class="t-DE-arrow-up"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-DE-arrow-up" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf100;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-US-arrow-oneway" class="t-US-arrow-oneway"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-US-arrow-oneway" class="t-US-arrow-oneway"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-US-arrow-oneway" class="t-US-arrow-oneway"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-US-arrow-oneway" class="t-US-arrow-oneway"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-US-arrow-oneway" class="t-US-arrow-oneway"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-US-arrow-oneway" class="t-US-arrow-oneway"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-US-arrow-oneway" class="t-US-arrow-oneway"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-US-arrow-oneway" class="t-US-arrow-oneway"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-US-arrow-oneway" class="t-US-arrow-oneway"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-US-arrow-oneway" class="t-US-arrow-oneway"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-US-arrow-oneway" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf101;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-US-arrow-up" class="t-US-arrow-up"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-US-arrow-up" class="t-US-arrow-up"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-US-arrow-up" class="t-US-arrow-up"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-US-arrow-up" class="t-US-arrow-up"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-US-arrow-up" class="t-US-arrow-up"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-US-arrow-up" class="t-US-arrow-up"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-US-arrow-up" class="t-US-arrow-up"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-US-arrow-up" class="t-US-arrow-up"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-US-arrow-up" class="t-US-arrow-up"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-US-arrow-up" class="t-US-arrow-up"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-US-arrow-up" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf102;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-added-lane" class="t-added-lane"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-added-lane" class="t-added-lane"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-added-lane" class="t-added-lane"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-added-lane" class="t-added-lane"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-added-lane" class="t-added-lane"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-added-lane" class="t-added-lane"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-added-lane" class="t-added-lane"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-added-lane" class="t-added-lane"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-added-lane" class="t-added-lane"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-added-lane" class="t-added-lane"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-added-lane" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf103;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-added-lane-entering-roadway" class="t-added-lane-entering-roadway"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-added-lane-entering-roadway" class="t-added-lane-entering-roadway"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-added-lane-entering-roadway" class="t-added-lane-entering-roadway"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-added-lane-entering-roadway" class="t-added-lane-entering-roadway"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-added-lane-entering-roadway" class="t-added-lane-entering-roadway"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-added-lane-entering-roadway" class="t-added-lane-entering-roadway"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-added-lane-entering-roadway" class="t-added-lane-entering-roadway"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-added-lane-entering-roadway" class="t-added-lane-entering-roadway"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-added-lane-entering-roadway" class="t-added-lane-entering-roadway"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-added-lane-entering-roadway" class="t-added-lane-entering-roadway"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-added-lane-entering-roadway" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf104;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-airplane" class="t-airplane"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-airplane" class="t-airplane"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-airplane" class="t-airplane"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-airplane" class="t-airplane"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-airplane" class="t-airplane"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-airplane" class="t-airplane"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-airplane" class="t-airplane"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-airplane" class="t-airplane"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-airplane" class="t-airplane"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-airplane" class="t-airplane"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-airplane" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf105;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-arrow-l" class="t-arrow-l"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-arrow-l" class="t-arrow-l"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-arrow-l" class="t-arrow-l"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-arrow-l" class="t-arrow-l"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-arrow-l" class="t-arrow-l"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-arrow-l" class="t-arrow-l"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-arrow-l" class="t-arrow-l"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-arrow-l" class="t-arrow-l"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-arrow-l" class="t-arrow-l"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-arrow-l" class="t-arrow-l"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-arrow-l" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf106;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-arrow-oneway" class="t-arrow-oneway"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-arrow-oneway" class="t-arrow-oneway"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-arrow-oneway" class="t-arrow-oneway"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-arrow-oneway" class="t-arrow-oneway"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-arrow-oneway" class="t-arrow-oneway"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-arrow-oneway" class="t-arrow-oneway"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-arrow-oneway" class="t-arrow-oneway"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-arrow-oneway" class="t-arrow-oneway"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-arrow-oneway" class="t-arrow-oneway"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-arrow-oneway" class="t-arrow-oneway"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-arrow-oneway" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf107;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-arrow-s-l" class="t-arrow-s-l"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-arrow-s-l" class="t-arrow-s-l"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-arrow-s-l" class="t-arrow-s-l"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-arrow-s-l" class="t-arrow-s-l"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-arrow-s-l" class="t-arrow-s-l"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-arrow-s-l" class="t-arrow-s-l"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-arrow-s-l" class="t-arrow-s-l"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-arrow-s-l" class="t-arrow-s-l"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-arrow-s-l" class="t-arrow-s-l"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-arrow-s-l" class="t-arrow-s-l"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-arrow-s-l" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf108;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-arrows_both_bra" class="t-arrows_both_bra"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-arrows_both_bra" class="t-arrows_both_bra"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-arrows_both_bra" class="t-arrows_both_bra"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-arrows_both_bra" class="t-arrows_both_bra"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-arrows_both_bra" class="t-arrows_both_bra"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-arrows_both_bra" class="t-arrows_both_bra"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-arrows_both_bra" class="t-arrows_both_bra"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-arrows_both_bra" class="t-arrows_both_bra"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-arrows_both_bra" class="t-arrows_both_bra"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-arrows_both_bra" class="t-arrows_both_bra"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-arrows_both_bra" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf109;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-bending-priority" class="t-bending-priority"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-bending-priority" class="t-bending-priority"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-bending-priority" class="t-bending-priority"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-bending-priority" class="t-bending-priority"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-bending-priority" class="t-bending-priority"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-bending-priority" class="t-bending-priority"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-bending-priority" class="t-bending-priority"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-bending-priority" class="t-bending-priority"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-bending-priority" class="t-bending-priority"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-bending-priority" class="t-bending-priority"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-bending-priority" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-bicycle" class="t-bicycle"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-bicycle" class="t-bicycle"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-bicycle" class="t-bicycle"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-bicycle" class="t-bicycle"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-bicycle" class="t-bicycle"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-bicycle" class="t-bicycle"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-bicycle" class="t-bicycle"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-bicycle" class="t-bicycle"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-bicycle" class="t-bicycle"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-bicycle" class="t-bicycle"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-bicycle" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-bicycle-slippery" class="t-bicycle-slippery"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-bicycle-slippery" class="t-bicycle-slippery"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-bicycle-slippery" class="t-bicycle-slippery"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-bicycle-slippery" class="t-bicycle-slippery"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-bicycle-slippery" class="t-bicycle-slippery"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-bicycle-slippery" class="t-bicycle-slippery"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-bicycle-slippery" class="t-bicycle-slippery"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-bicycle-slippery" class="t-bicycle-slippery"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-bicycle-slippery" class="t-bicycle-slippery"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-bicycle-slippery" class="t-bicycle-slippery"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-bicycle-slippery" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-bump" class="t-bump"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-bump" class="t-bump"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-bump" class="t-bump"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-bump" class="t-bump"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-bump" class="t-bump"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-bump" class="t-bump"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-bump" class="t-bump"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-bump" class="t-bump"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-bump" class="t-bump"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-bump" class="t-bump"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-bump" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-bump_bra" class="t-bump_bra"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-bump_bra" class="t-bump_bra"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-bump_bra" class="t-bump_bra"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-bump_bra" class="t-bump_bra"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-bump_bra" class="t-bump_bra"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-bump_bra" class="t-bump_bra"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-bump_bra" class="t-bump_bra"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-bump_bra" class="t-bump_bra"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-bump_bra" class="t-bump_bra"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-bump_bra" class="t-bump_bra"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-bump_bra" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-bump_road_bra" class="t-bump_road_bra"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-bump_road_bra" class="t-bump_road_bra"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-bump_road_bra" class="t-bump_road_bra"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-bump_road_bra" class="t-bump_road_bra"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-bump_road_bra" class="t-bump_road_bra"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-bump_road_bra" class="t-bump_road_bra"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-bump_road_bra" class="t-bump_road_bra"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-bump_road_bra" class="t-bump_road_bra"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-bump_road_bra" class="t-bump_road_bra"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-bump_road_bra" class="t-bump_road_bra"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-bump_road_bra" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf10f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-bumps" class="t-bumps"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-bumps" class="t-bumps"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-bumps" class="t-bumps"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-bumps" class="t-bumps"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-bumps" class="t-bumps"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-bumps" class="t-bumps"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-bumps" class="t-bumps"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-bumps" class="t-bumps"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-bumps" class="t-bumps"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-bumps" class="t-bumps"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-bumps" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf110;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-bus" class="t-bus"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-bus" class="t-bus"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-bus" class="t-bus"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-bus" class="t-bus"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-bus" class="t-bus"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-bus" class="t-bus"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-bus" class="t-bus"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-bus" class="t-bus"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-bus" class="t-bus"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-bus" class="t-bus"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-bus" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf111;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-car" class="t-car"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-car" class="t-car"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-car" class="t-car"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-car" class="t-car"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-car" class="t-car"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-car" class="t-car"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-car" class="t-car"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-car" class="t-car"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-car" class="t-car"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-car" class="t-car"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-car" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf112;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-children" class="t-children"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-children" class="t-children"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-children" class="t-children"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-children" class="t-children"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-children" class="t-children"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-children" class="t-children"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-children" class="t-children"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-children" class="t-children"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-children" class="t-children"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-children" class="t-children"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-children" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf113;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-children-au" class="t-children-au"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-children-au" class="t-children-au"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-children-au" class="t-children-au"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-children-au" class="t-children-au"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-children-au" class="t-children-au"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-children-au" class="t-children-au"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-children-au" class="t-children-au"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-children-au" class="t-children-au"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-children-au" class="t-children-au"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-children-au" class="t-children-au"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-children-au" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf114;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-circle-bar-rounded" class="t-circle-bar-rounded"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-circle-bar-rounded" class="t-circle-bar-rounded"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-circle-bar-rounded" class="t-circle-bar-rounded"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-circle-bar-rounded" class="t-circle-bar-rounded"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-circle-bar-rounded" class="t-circle-bar-rounded"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-circle-bar-rounded" class="t-circle-bar-rounded"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-circle-bar-rounded" class="t-circle-bar-rounded"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-circle-bar-rounded" class="t-circle-bar-rounded"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-circle-bar-rounded" class="t-circle-bar-rounded"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-circle-bar-rounded" class="t-circle-bar-rounded"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-circle-bar-rounded" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf115;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-circle-bg" class="t-circle-bg"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-circle-bg" class="t-circle-bg"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-circle-bg" class="t-circle-bg"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-circle-bg" class="t-circle-bg"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-circle-bg" class="t-circle-bg"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-circle-bg" class="t-circle-bg"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-circle-bg" class="t-circle-bg"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-circle-bg" class="t-circle-bg"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-circle-bg" class="t-circle-bg"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-circle-bg" class="t-circle-bg"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-circle-bg" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf116;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-circle-o" class="t-circle-o"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-circle-o" class="t-circle-o"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-circle-o" class="t-circle-o"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-circle-o" class="t-circle-o"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-circle-o" class="t-circle-o"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-circle-o" class="t-circle-o"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-circle-o" class="t-circle-o"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-circle-o" class="t-circle-o"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-circle-o" class="t-circle-o"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-circle-o" class="t-circle-o"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-circle-o" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf117;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-circle-separator" class="t-circle-separator"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-circle-separator" class="t-circle-separator"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-circle-separator" class="t-circle-separator"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-circle-separator" class="t-circle-separator"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-circle-separator" class="t-circle-separator"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-circle-separator" class="t-circle-separator"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-circle-separator" class="t-circle-separator"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-circle-separator" class="t-circle-separator"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-circle-separator" class="t-circle-separator"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-circle-separator" class="t-circle-separator"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-circle-separator" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf118;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-cliff" class="t-cliff"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-cliff" class="t-cliff"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-cliff" class="t-cliff"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-cliff" class="t-cliff"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-cliff" class="t-cliff"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-cliff" class="t-cliff"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-cliff" class="t-cliff"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-cliff" class="t-cliff"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-cliff" class="t-cliff"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-cliff" class="t-cliff"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-cliff" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf119;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-cross-roads" class="t-cross-roads"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-cross-roads" class="t-cross-roads"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-cross-roads" class="t-cross-roads"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-cross-roads" class="t-cross-roads"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-cross-roads" class="t-cross-roads"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-cross-roads" class="t-cross-roads"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-cross-roads" class="t-cross-roads"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-cross-roads" class="t-cross-roads"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-cross-roads" class="t-cross-roads"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-cross-roads" class="t-cross-roads"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-cross-roads" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-crossroads-ahead" class="t-crossroads-ahead"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-crossroads-ahead" class="t-crossroads-ahead"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-crossroads-ahead" class="t-crossroads-ahead"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-crossroads-ahead" class="t-crossroads-ahead"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-crossroads-ahead" class="t-crossroads-ahead"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-crossroads-ahead" class="t-crossroads-ahead"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-crossroads-ahead" class="t-crossroads-ahead"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-crossroads-ahead" class="t-crossroads-ahead"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-crossroads-ahead" class="t-crossroads-ahead"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-crossroads-ahead" class="t-crossroads-ahead"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-crossroads-ahead" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-crossroads-ahead-ontario" class="t-crossroads-ahead-ontario"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-crossroads-ahead-ontario" class="t-crossroads-ahead-ontario"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-crossroads-ahead-ontario" class="t-crossroads-ahead-ontario"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-crossroads-ahead-ontario" class="t-crossroads-ahead-ontario"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-crossroads-ahead-ontario" class="t-crossroads-ahead-ontario"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-crossroads-ahead-ontario" class="t-crossroads-ahead-ontario"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-crossroads-ahead-ontario" class="t-crossroads-ahead-ontario"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-crossroads-ahead-ontario" class="t-crossroads-ahead-ontario"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-crossroads-ahead-ontario" class="t-crossroads-ahead-ontario"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-crossroads-ahead-ontario" class="t-crossroads-ahead-ontario"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-crossroads-ahead-ontario" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-curve-r-l" class="t-curve-r-l"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-curve-r-l" class="t-curve-r-l"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-curve-r-l" class="t-curve-r-l"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-curve-r-l" class="t-curve-r-l"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-curve-r-l" class="t-curve-r-l"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-curve-r-l" class="t-curve-r-l"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-curve-r-l" class="t-curve-r-l"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-curve-r-l" class="t-curve-r-l"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-curve-r-l" class="t-curve-r-l"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-curve-r-l" class="t-curve-r-l"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-curve-r-l" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-cyclists_crossing_bra" class="t-cyclists_crossing_bra"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-cyclists_crossing_bra" class="t-cyclists_crossing_bra"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-cyclists_crossing_bra" class="t-cyclists_crossing_bra"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-cyclists_crossing_bra" class="t-cyclists_crossing_bra"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-cyclists_crossing_bra" class="t-cyclists_crossing_bra"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-cyclists_crossing_bra" class="t-cyclists_crossing_bra"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-cyclists_crossing_bra" class="t-cyclists_crossing_bra"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-cyclists_crossing_bra" class="t-cyclists_crossing_bra"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-cyclists_crossing_bra" class="t-cyclists_crossing_bra"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-cyclists_crossing_bra" class="t-cyclists_crossing_bra"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-cyclists_crossing_bra" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-d-curve-l" class="t-d-curve-l"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-d-curve-l" class="t-d-curve-l"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-d-curve-l" class="t-d-curve-l"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-d-curve-l" class="t-d-curve-l"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-d-curve-l" class="t-d-curve-l"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-d-curve-l" class="t-d-curve-l"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-d-curve-l" class="t-d-curve-l"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-d-curve-l" class="t-d-curve-l"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-d-curve-l" class="t-d-curve-l"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-d-curve-l" class="t-d-curve-l"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-d-curve-l" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf11f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-dead-end" class="t-dead-end"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-dead-end" class="t-dead-end"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-dead-end" class="t-dead-end"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-dead-end" class="t-dead-end"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-dead-end" class="t-dead-end"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-dead-end" class="t-dead-end"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-dead-end" class="t-dead-end"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-dead-end" class="t-dead-end"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-dead-end" class="t-dead-end"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-dead-end" class="t-dead-end"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-dead-end" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf120;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-descent" class="t-descent"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-descent" class="t-descent"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-descent" class="t-descent"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-descent" class="t-descent"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-descent" class="t-descent"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-descent" class="t-descent"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-descent" class="t-descent"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-descent" class="t-descent"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-descent" class="t-descent"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-descent" class="t-descent"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-descent" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf121;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-disabled-p" class="t-disabled-p"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-disabled-p" class="t-disabled-p"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-disabled-p" class="t-disabled-p"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-disabled-p" class="t-disabled-p"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-disabled-p" class="t-disabled-p"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-disabled-p" class="t-disabled-p"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-disabled-p" class="t-disabled-p"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-disabled-p" class="t-disabled-p"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-disabled-p" class="t-disabled-p"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-disabled-p" class="t-disabled-p"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-disabled-p" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf122;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-divided-highway" class="t-divided-highway"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-divided-highway" class="t-divided-highway"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-divided-highway" class="t-divided-highway"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-divided-highway" class="t-divided-highway"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-divided-highway" class="t-divided-highway"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-divided-highway" class="t-divided-highway"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-divided-highway" class="t-divided-highway"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-divided-highway" class="t-divided-highway"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-divided-highway" class="t-divided-highway"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-divided-highway" class="t-divided-highway"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-divided-highway" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf123;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-domestic-animal" class="t-domestic-animal"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-domestic-animal" class="t-domestic-animal"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-domestic-animal" class="t-domestic-animal"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-domestic-animal" class="t-domestic-animal"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-domestic-animal" class="t-domestic-animal"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-domestic-animal" class="t-domestic-animal"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-domestic-animal" class="t-domestic-animal"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-domestic-animal" class="t-domestic-animal"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-domestic-animal" class="t-domestic-animal"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-domestic-animal" class="t-domestic-animal"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-domestic-animal" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf124;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-domestic-animals-au" class="t-domestic-animals-au"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-domestic-animals-au" class="t-domestic-animals-au"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-domestic-animals-au" class="t-domestic-animals-au"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-domestic-animals-au" class="t-domestic-animals-au"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-domestic-animals-au" class="t-domestic-animals-au"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-domestic-animals-au" class="t-domestic-animals-au"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-domestic-animals-au" class="t-domestic-animals-au"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-domestic-animals-au" class="t-domestic-animals-au"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-domestic-animals-au" class="t-domestic-animals-au"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-domestic-animals-au" class="t-domestic-animals-au"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-domestic-animals-au" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf125;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-emu" class="t-emu"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-emu" class="t-emu"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-emu" class="t-emu"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-emu" class="t-emu"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-emu" class="t-emu"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-emu" class="t-emu"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-emu" class="t-emu"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-emu" class="t-emu"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-emu" class="t-emu"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-emu" class="t-emu"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-emu" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf126;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-end" class="t-end"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-end" class="t-end"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-end" class="t-end"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-end" class="t-end"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-end" class="t-end"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-end" class="t-end"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-end" class="t-end"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-end" class="t-end"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-end" class="t-end"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-end" class="t-end"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-end" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf127;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-equestrian" class="t-equestrian"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-equestrian" class="t-equestrian"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-equestrian" class="t-equestrian"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-equestrian" class="t-equestrian"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-equestrian" class="t-equestrian"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-equestrian" class="t-equestrian"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-equestrian" class="t-equestrian"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-equestrian" class="t-equestrian"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-equestrian" class="t-equestrian"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-equestrian" class="t-equestrian"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-equestrian" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf128;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-europe_stars" class="t-europe_stars"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-europe_stars" class="t-europe_stars"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-europe_stars" class="t-europe_stars"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-europe_stars" class="t-europe_stars"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-europe_stars" class="t-europe_stars"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-europe_stars" class="t-europe_stars"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-europe_stars" class="t-europe_stars"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-europe_stars" class="t-europe_stars"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-europe_stars" class="t-europe_stars"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-europe_stars" class="t-europe_stars"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-europe_stars" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf129;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-exclamation" class="t-exclamation"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-exclamation" class="t-exclamation"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-exclamation" class="t-exclamation"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-exclamation" class="t-exclamation"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-exclamation" class="t-exclamation"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-exclamation" class="t-exclamation"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-exclamation" class="t-exclamation"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-exclamation" class="t-exclamation"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-exclamation" class="t-exclamation"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-exclamation" class="t-exclamation"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-exclamation" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-falling-rocks-EU" class="t-falling-rocks-EU"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-falling-rocks-EU" class="t-falling-rocks-EU"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-falling-rocks-EU" class="t-falling-rocks-EU"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-falling-rocks-EU" class="t-falling-rocks-EU"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-falling-rocks-EU" class="t-falling-rocks-EU"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-falling-rocks-EU" class="t-falling-rocks-EU"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-falling-rocks-EU" class="t-falling-rocks-EU"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-falling-rocks-EU" class="t-falling-rocks-EU"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-falling-rocks-EU" class="t-falling-rocks-EU"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-falling-rocks-EU" class="t-falling-rocks-EU"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-falling-rocks-EU" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-falling-rocks-US" class="t-falling-rocks-US"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-falling-rocks-US" class="t-falling-rocks-US"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-falling-rocks-US" class="t-falling-rocks-US"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-falling-rocks-US" class="t-falling-rocks-US"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-falling-rocks-US" class="t-falling-rocks-US"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-falling-rocks-US" class="t-falling-rocks-US"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-falling-rocks-US" class="t-falling-rocks-US"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-falling-rocks-US" class="t-falling-rocks-US"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-falling-rocks-US" class="t-falling-rocks-US"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-falling-rocks-US" class="t-falling-rocks-US"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-falling-rocks-US" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-falling-rocks-au" class="t-falling-rocks-au"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-falling-rocks-au" class="t-falling-rocks-au"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-falling-rocks-au" class="t-falling-rocks-au"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-falling-rocks-au" class="t-falling-rocks-au"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-falling-rocks-au" class="t-falling-rocks-au"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-falling-rocks-au" class="t-falling-rocks-au"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-falling-rocks-au" class="t-falling-rocks-au"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-falling-rocks-au" class="t-falling-rocks-au"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-falling-rocks-au" class="t-falling-rocks-au"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-falling-rocks-au" class="t-falling-rocks-au"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-falling-rocks-au" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-fire-station" class="t-fire-station"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-fire-station" class="t-fire-station"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-fire-station" class="t-fire-station"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-fire-station" class="t-fire-station"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-fire-station" class="t-fire-station"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-fire-station" class="t-fire-station"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-fire-station" class="t-fire-station"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-fire-station" class="t-fire-station"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-fire-station" class="t-fire-station"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-fire-station" class="t-fire-station"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-fire-station" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-firemans-car" class="t-firemans-car"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-firemans-car" class="t-firemans-car"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-firemans-car" class="t-firemans-car"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-firemans-car" class="t-firemans-car"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-firemans-car" class="t-firemans-car"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-firemans-car" class="t-firemans-car"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-firemans-car" class="t-firemans-car"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-firemans-car" class="t-firemans-car"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-firemans-car" class="t-firemans-car"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-firemans-car" class="t-firemans-car"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-firemans-car" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf12f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-flaggers" class="t-flaggers"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-flaggers" class="t-flaggers"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-flaggers" class="t-flaggers"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-flaggers" class="t-flaggers"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-flaggers" class="t-flaggers"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-flaggers" class="t-flaggers"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-flaggers" class="t-flaggers"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-flaggers" class="t-flaggers"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-flaggers" class="t-flaggers"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-flaggers" class="t-flaggers"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-flaggers" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf130;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-footpath" class="t-footpath"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-footpath" class="t-footpath"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-footpath" class="t-footpath"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-footpath" class="t-footpath"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-footpath" class="t-footpath"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-footpath" class="t-footpath"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-footpath" class="t-footpath"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-footpath" class="t-footpath"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-footpath" class="t-footpath"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-footpath" class="t-footpath"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-footpath" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf131;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-h" class="t-h"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-h" class="t-h"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-h" class="t-h"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-h" class="t-h"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-h" class="t-h"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-h" class="t-h"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-h" class="t-h"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-h" class="t-h"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-h" class="t-h"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-h" class="t-h"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-h" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf132;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-h-align-l" class="t-h-align-l"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-h-align-l" class="t-h-align-l"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-h-align-l" class="t-h-align-l"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-h-align-l" class="t-h-align-l"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-h-align-l" class="t-h-align-l"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-h-align-l" class="t-h-align-l"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-h-align-l" class="t-h-align-l"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-h-align-l" class="t-h-align-l"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-h-align-l" class="t-h-align-l"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-h-align-l" class="t-h-align-l"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-h-align-l" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf133;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-hairpin-curve" class="t-hairpin-curve"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-hairpin-curve" class="t-hairpin-curve"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-hairpin-curve" class="t-hairpin-curve"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-hairpin-curve" class="t-hairpin-curve"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-hairpin-curve" class="t-hairpin-curve"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-hairpin-curve" class="t-hairpin-curve"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-hairpin-curve" class="t-hairpin-curve"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-hairpin-curve" class="t-hairpin-curve"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-hairpin-curve" class="t-hairpin-curve"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-hairpin-curve" class="t-hairpin-curve"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-hairpin-curve" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf134;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-hairpin-curve-au" class="t-hairpin-curve-au"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-hairpin-curve-au" class="t-hairpin-curve-au"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-hairpin-curve-au" class="t-hairpin-curve-au"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-hairpin-curve-au" class="t-hairpin-curve-au"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-hairpin-curve-au" class="t-hairpin-curve-au"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-hairpin-curve-au" class="t-hairpin-curve-au"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-hairpin-curve-au" class="t-hairpin-curve-au"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-hairpin-curve-au" class="t-hairpin-curve-au"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-hairpin-curve-au" class="t-hairpin-curve-au"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-hairpin-curve-au" class="t-hairpin-curve-au"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-hairpin-curve-au" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf135;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-hazardous-material" class="t-hazardous-material"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-hazardous-material" class="t-hazardous-material"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-hazardous-material" class="t-hazardous-material"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-hazardous-material" class="t-hazardous-material"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-hazardous-material" class="t-hazardous-material"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-hazardous-material" class="t-hazardous-material"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-hazardous-material" class="t-hazardous-material"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-hazardous-material" class="t-hazardous-material"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-hazardous-material" class="t-hazardous-material"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-hazardous-material" class="t-hazardous-material"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-hazardous-material" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf136;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-height" class="t-height"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-height" class="t-height"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-height" class="t-height"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-height" class="t-height"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-height" class="t-height"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-height" class="t-height"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-height" class="t-height"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-height" class="t-height"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-height" class="t-height"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-height" class="t-height"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-height" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf137;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-height-restriction-ca" class="t-height-restriction-ca"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-height-restriction-ca" class="t-height-restriction-ca"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-height-restriction-ca" class="t-height-restriction-ca"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-height-restriction-ca" class="t-height-restriction-ca"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-height-restriction-ca" class="t-height-restriction-ca"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-height-restriction-ca" class="t-height-restriction-ca"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-height-restriction-ca" class="t-height-restriction-ca"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-height-restriction-ca" class="t-height-restriction-ca"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-height-restriction-ca" class="t-height-restriction-ca"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-height-restriction-ca" class="t-height-restriction-ca"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-height-restriction-ca" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf138;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-highway-divided" class="t-highway-divided"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-highway-divided" class="t-highway-divided"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-highway-divided" class="t-highway-divided"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-highway-divided" class="t-highway-divided"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-highway-divided" class="t-highway-divided"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-highway-divided" class="t-highway-divided"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-highway-divided" class="t-highway-divided"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-highway-divided" class="t-highway-divided"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-highway-divided" class="t-highway-divided"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-highway-divided" class="t-highway-divided"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-highway-divided" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf139;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-hitch-hiking" class="t-hitch-hiking"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-hitch-hiking" class="t-hitch-hiking"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-hitch-hiking" class="t-hitch-hiking"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-hitch-hiking" class="t-hitch-hiking"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-hitch-hiking" class="t-hitch-hiking"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-hitch-hiking" class="t-hitch-hiking"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-hitch-hiking" class="t-hitch-hiking"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-hitch-hiking" class="t-hitch-hiking"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-hitch-hiking" class="t-hitch-hiking"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-hitch-hiking" class="t-hitch-hiking"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-hitch-hiking" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-kangaroo" class="t-kangaroo"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-kangaroo" class="t-kangaroo"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-kangaroo" class="t-kangaroo"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-kangaroo" class="t-kangaroo"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-kangaroo" class="t-kangaroo"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-kangaroo" class="t-kangaroo"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-kangaroo" class="t-kangaroo"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-kangaroo" class="t-kangaroo"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-kangaroo" class="t-kangaroo"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-kangaroo" class="t-kangaroo"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-kangaroo" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-koala-ugly" class="t-koala-ugly"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-koala-ugly" class="t-koala-ugly"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-koala-ugly" class="t-koala-ugly"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-koala-ugly" class="t-koala-ugly"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-koala-ugly" class="t-koala-ugly"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-koala-ugly" class="t-koala-ugly"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-koala-ugly" class="t-koala-ugly"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-koala-ugly" class="t-koala-ugly"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-koala-ugly" class="t-koala-ugly"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-koala-ugly" class="t-koala-ugly"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-koala-ugly" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-koalas" class="t-koalas"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-koalas" class="t-koalas"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-koalas" class="t-koalas"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-koalas" class="t-koalas"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-koalas" class="t-koalas"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-koalas" class="t-koalas"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-koalas" class="t-koalas"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-koalas" class="t-koalas"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-koalas" class="t-koalas"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-koalas" class="t-koalas"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-koalas" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-level-crossing" class="t-level-crossing"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-level-crossing" class="t-level-crossing"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-level-crossing" class="t-level-crossing"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-level-crossing" class="t-level-crossing"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-level-crossing" class="t-level-crossing"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-level-crossing" class="t-level-crossing"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-level-crossing" class="t-level-crossing"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-level-crossing" class="t-level-crossing"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-level-crossing" class="t-level-crossing"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-level-crossing" class="t-level-crossing"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-level-crossing" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-light-rail" class="t-light-rail"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-light-rail" class="t-light-rail"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-light-rail" class="t-light-rail"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-light-rail" class="t-light-rail"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-light-rail" class="t-light-rail"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-light-rail" class="t-light-rail"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-light-rail" class="t-light-rail"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-light-rail" class="t-light-rail"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-light-rail" class="t-light-rail"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-light-rail" class="t-light-rail"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-light-rail" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf13f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-lightground-railroad-crossing" class="t-lightground-railroad-crossing"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-lightground-railroad-crossing" class="t-lightground-railroad-crossing"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-lightground-railroad-crossing" class="t-lightground-railroad-crossing"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-lightground-railroad-crossing" class="t-lightground-railroad-crossing"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-lightground-railroad-crossing" class="t-lightground-railroad-crossing"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-lightground-railroad-crossing" class="t-lightground-railroad-crossing"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-lightground-railroad-crossing" class="t-lightground-railroad-crossing"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-lightground-railroad-crossing" class="t-lightground-railroad-crossing"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-lightground-railroad-crossing" class="t-lightground-railroad-crossing"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-lightground-railroad-crossing" class="t-lightground-railroad-crossing"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-lightground-railroad-crossing" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf140;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-loop-270" class="t-loop-270"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-loop-270" class="t-loop-270"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-loop-270" class="t-loop-270"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-loop-270" class="t-loop-270"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-loop-270" class="t-loop-270"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-loop-270" class="t-loop-270"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-loop-270" class="t-loop-270"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-loop-270" class="t-loop-270"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-loop-270" class="t-loop-270"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-loop-270" class="t-loop-270"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-loop-270" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf141;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-loose_road_surface_bra" class="t-loose_road_surface_bra"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-loose_road_surface_bra" class="t-loose_road_surface_bra"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-loose_road_surface_bra" class="t-loose_road_surface_bra"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-loose_road_surface_bra" class="t-loose_road_surface_bra"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-loose_road_surface_bra" class="t-loose_road_surface_bra"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-loose_road_surface_bra" class="t-loose_road_surface_bra"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-loose_road_surface_bra" class="t-loose_road_surface_bra"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-loose_road_surface_bra" class="t-loose_road_surface_bra"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-loose_road_surface_bra" class="t-loose_road_surface_bra"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-loose_road_surface_bra" class="t-loose_road_surface_bra"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-loose_road_surface_bra" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf142;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-lorry" class="t-lorry"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-lorry" class="t-lorry"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-lorry" class="t-lorry"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-lorry" class="t-lorry"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-lorry" class="t-lorry"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-lorry" class="t-lorry"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-lorry" class="t-lorry"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-lorry" class="t-lorry"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-lorry" class="t-lorry"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-lorry" class="t-lorry"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-lorry" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf143;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-lorry-left" class="t-lorry-left"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-lorry-left" class="t-lorry-left"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-lorry-left" class="t-lorry-left"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-lorry-left" class="t-lorry-left"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-lorry-left" class="t-lorry-left"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-lorry-left" class="t-lorry-left"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-lorry-left" class="t-lorry-left"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-lorry-left" class="t-lorry-left"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-lorry-left" class="t-lorry-left"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-lorry-left" class="t-lorry-left"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-lorry-left" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf144;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-low-clearance" class="t-low-clearance"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-low-clearance" class="t-low-clearance"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-low-clearance" class="t-low-clearance"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-low-clearance" class="t-low-clearance"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-low-clearance" class="t-low-clearance"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-low-clearance" class="t-low-clearance"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-low-clearance" class="t-low-clearance"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-low-clearance" class="t-low-clearance"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-low-clearance" class="t-low-clearance"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-low-clearance" class="t-low-clearance"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-low-clearance" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf145;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-merge" class="t-merge"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-merge" class="t-merge"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-merge" class="t-merge"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-merge" class="t-merge"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-merge" class="t-merge"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-merge" class="t-merge"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-merge" class="t-merge"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-merge" class="t-merge"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-merge" class="t-merge"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-merge" class="t-merge"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-merge" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf146;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-metric-clearance" class="t-metric-clearance"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-metric-clearance" class="t-metric-clearance"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-metric-clearance" class="t-metric-clearance"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-metric-clearance" class="t-metric-clearance"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-metric-clearance" class="t-metric-clearance"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-metric-clearance" class="t-metric-clearance"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-metric-clearance" class="t-metric-clearance"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-metric-clearance" class="t-metric-clearance"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-metric-clearance" class="t-metric-clearance"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-metric-clearance" class="t-metric-clearance"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-metric-clearance" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf147;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-moped" class="t-moped"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-moped" class="t-moped"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-moped" class="t-moped"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-moped" class="t-moped"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-moped" class="t-moped"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-moped" class="t-moped"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-moped" class="t-moped"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-moped" class="t-moped"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-moped" class="t-moped"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-moped" class="t-moped"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-moped" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf148;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-motorbike" class="t-motorbike"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-motorbike" class="t-motorbike"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-motorbike" class="t-motorbike"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-motorbike" class="t-motorbike"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-motorbike" class="t-motorbike"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-motorbike" class="t-motorbike"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-motorbike" class="t-motorbike"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-motorbike" class="t-motorbike"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-motorbike" class="t-motorbike"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-motorbike" class="t-motorbike"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-motorbike" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf149;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-narrow-bridge-au" class="t-narrow-bridge-au"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-narrow-bridge-au" class="t-narrow-bridge-au"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-narrow-bridge-au" class="t-narrow-bridge-au"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-narrow-bridge-au" class="t-narrow-bridge-au"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-narrow-bridge-au" class="t-narrow-bridge-au"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-narrow-bridge-au" class="t-narrow-bridge-au"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-narrow-bridge-au" class="t-narrow-bridge-au"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-narrow-bridge-au" class="t-narrow-bridge-au"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-narrow-bridge-au" class="t-narrow-bridge-au"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-narrow-bridge-au" class="t-narrow-bridge-au"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-narrow-bridge-au" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-narrow-bridge-us" class="t-narrow-bridge-us"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-narrow-bridge-us" class="t-narrow-bridge-us"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-narrow-bridge-us" class="t-narrow-bridge-us"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-narrow-bridge-us" class="t-narrow-bridge-us"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-narrow-bridge-us" class="t-narrow-bridge-us"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-narrow-bridge-us" class="t-narrow-bridge-us"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-narrow-bridge-us" class="t-narrow-bridge-us"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-narrow-bridge-us" class="t-narrow-bridge-us"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-narrow-bridge-us" class="t-narrow-bridge-us"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-narrow-bridge-us" class="t-narrow-bridge-us"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-narrow-bridge-us" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-narrow-road-both" class="t-narrow-road-both"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-narrow-road-both" class="t-narrow-road-both"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-narrow-road-both" class="t-narrow-road-both"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-narrow-road-both" class="t-narrow-road-both"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-narrow-road-both" class="t-narrow-road-both"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-narrow-road-both" class="t-narrow-road-both"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-narrow-road-both" class="t-narrow-road-both"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-narrow-road-both" class="t-narrow-road-both"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-narrow-road-both" class="t-narrow-road-both"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-narrow-road-both" class="t-narrow-road-both"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-narrow-road-both" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-narrow-road-l" class="t-narrow-road-l"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-narrow-road-l" class="t-narrow-road-l"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-narrow-road-l" class="t-narrow-road-l"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-narrow-road-l" class="t-narrow-road-l"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-narrow-road-l" class="t-narrow-road-l"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-narrow-road-l" class="t-narrow-road-l"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-narrow-road-l" class="t-narrow-road-l"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-narrow-road-l" class="t-narrow-road-l"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-narrow-road-l" class="t-narrow-road-l"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-narrow-road-l" class="t-narrow-road-l"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-narrow-road-l" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-no-l-or-u-turn" class="t-no-l-or-u-turn"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-no-l-or-u-turn" class="t-no-l-or-u-turn"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-no-l-or-u-turn" class="t-no-l-or-u-turn"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-no-l-or-u-turn" class="t-no-l-or-u-turn"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-no-l-or-u-turn" class="t-no-l-or-u-turn"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-no-l-or-u-turn" class="t-no-l-or-u-turn"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-no-l-or-u-turn" class="t-no-l-or-u-turn"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-no-l-or-u-turn" class="t-no-l-or-u-turn"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-no-l-or-u-turn" class="t-no-l-or-u-turn"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-no-l-or-u-turn" class="t-no-l-or-u-turn"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-no-l-or-u-turn" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-octagon" class="t-octagon"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-octagon" class="t-octagon"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-octagon" class="t-octagon"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-octagon" class="t-octagon"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-octagon" class="t-octagon"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-octagon" class="t-octagon"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-octagon" class="t-octagon"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-octagon" class="t-octagon"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-octagon" class="t-octagon"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-octagon" class="t-octagon"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-octagon" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf14f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-offset-roads" class="t-offset-roads"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-offset-roads" class="t-offset-roads"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-offset-roads" class="t-offset-roads"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-offset-roads" class="t-offset-roads"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-offset-roads" class="t-offset-roads"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-offset-roads" class="t-offset-roads"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-offset-roads" class="t-offset-roads"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-offset-roads" class="t-offset-roads"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-offset-roads" class="t-offset-roads"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-offset-roads" class="t-offset-roads"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-offset-roads" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf150;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-opening-swing-bridge-ca" class="t-opening-swing-bridge-ca"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-opening-swing-bridge-ca" class="t-opening-swing-bridge-ca"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-opening-swing-bridge-ca" class="t-opening-swing-bridge-ca"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-opening-swing-bridge-ca" class="t-opening-swing-bridge-ca"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-opening-swing-bridge-ca" class="t-opening-swing-bridge-ca"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-opening-swing-bridge-ca" class="t-opening-swing-bridge-ca"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-opening-swing-bridge-ca" class="t-opening-swing-bridge-ca"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-opening-swing-bridge-ca" class="t-opening-swing-bridge-ca"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-opening-swing-bridge-ca" class="t-opening-swing-bridge-ca"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-opening-swing-bridge-ca" class="t-opening-swing-bridge-ca"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-opening-swing-bridge-ca" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf151;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-parking" class="t-parking"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-parking" class="t-parking"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-parking" class="t-parking"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-parking" class="t-parking"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-parking" class="t-parking"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-parking" class="t-parking"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-parking" class="t-parking"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-parking" class="t-parking"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-parking" class="t-parking"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-parking" class="t-parking"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-parking" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf152;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-pass-either-us" class="t-pass-either-us"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-pass-either-us" class="t-pass-either-us"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-pass-either-us" class="t-pass-either-us"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-pass-either-us" class="t-pass-either-us"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-pass-either-us" class="t-pass-either-us"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-pass-either-us" class="t-pass-either-us"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-pass-either-us" class="t-pass-either-us"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-pass-either-us" class="t-pass-either-us"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-pass-either-us" class="t-pass-either-us"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-pass-either-us" class="t-pass-either-us"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-pass-either-us" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf153;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-pass-l-r" class="t-pass-l-r"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-pass-l-r" class="t-pass-l-r"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-pass-l-r" class="t-pass-l-r"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-pass-l-r" class="t-pass-l-r"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-pass-l-r" class="t-pass-l-r"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-pass-l-r" class="t-pass-l-r"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-pass-l-r" class="t-pass-l-r"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-pass-l-r" class="t-pass-l-r"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-pass-l-r" class="t-pass-l-r"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-pass-l-r" class="t-pass-l-r"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-pass-l-r" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf154;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-pavement-ends" class="t-pavement-ends"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-pavement-ends" class="t-pavement-ends"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-pavement-ends" class="t-pavement-ends"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-pavement-ends" class="t-pavement-ends"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-pavement-ends" class="t-pavement-ends"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-pavement-ends" class="t-pavement-ends"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-pavement-ends" class="t-pavement-ends"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-pavement-ends" class="t-pavement-ends"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-pavement-ends" class="t-pavement-ends"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-pavement-ends" class="t-pavement-ends"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-pavement-ends" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf155;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-pedestrian" class="t-pedestrian"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-pedestrian" class="t-pedestrian"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-pedestrian" class="t-pedestrian"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-pedestrian" class="t-pedestrian"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-pedestrian" class="t-pedestrian"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-pedestrian" class="t-pedestrian"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-pedestrian" class="t-pedestrian"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-pedestrian" class="t-pedestrian"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-pedestrian" class="t-pedestrian"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-pedestrian" class="t-pedestrian"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-pedestrian" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf156;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-pedestrian-crossing" class="t-pedestrian-crossing"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-pedestrian-crossing" class="t-pedestrian-crossing"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-pedestrian-crossing" class="t-pedestrian-crossing"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-pedestrian-crossing" class="t-pedestrian-crossing"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-pedestrian-crossing" class="t-pedestrian-crossing"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-pedestrian-crossing" class="t-pedestrian-crossing"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-pedestrian-crossing" class="t-pedestrian-crossing"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-pedestrian-crossing" class="t-pedestrian-crossing"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-pedestrian-crossing" class="t-pedestrian-crossing"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-pedestrian-crossing" class="t-pedestrian-crossing"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-pedestrian-crossing" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf157;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-pedestrian-crossing-au" class="t-pedestrian-crossing-au"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-pedestrian-crossing-au" class="t-pedestrian-crossing-au"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-pedestrian-crossing-au" class="t-pedestrian-crossing-au"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-pedestrian-crossing-au" class="t-pedestrian-crossing-au"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-pedestrian-crossing-au" class="t-pedestrian-crossing-au"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-pedestrian-crossing-au" class="t-pedestrian-crossing-au"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-pedestrian-crossing-au" class="t-pedestrian-crossing-au"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-pedestrian-crossing-au" class="t-pedestrian-crossing-au"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-pedestrian-crossing-au" class="t-pedestrian-crossing-au"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-pedestrian-crossing-au" class="t-pedestrian-crossing-au"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-pedestrian-crossing-au" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf158;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-pedestrian_bra" class="t-pedestrian_bra"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-pedestrian_bra" class="t-pedestrian_bra"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-pedestrian_bra" class="t-pedestrian_bra"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-pedestrian_bra" class="t-pedestrian_bra"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-pedestrian_bra" class="t-pedestrian_bra"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-pedestrian_bra" class="t-pedestrian_bra"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-pedestrian_bra" class="t-pedestrian_bra"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-pedestrian_bra" class="t-pedestrian_bra"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-pedestrian_bra" class="t-pedestrian_bra"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-pedestrian_bra" class="t-pedestrian_bra"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-pedestrian_bra" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf159;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-pedestrian_crossing_bra" class="t-pedestrian_crossing_bra"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-pedestrian_crossing_bra" class="t-pedestrian_crossing_bra"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-pedestrian_crossing_bra" class="t-pedestrian_crossing_bra"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-pedestrian_crossing_bra" class="t-pedestrian_crossing_bra"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-pedestrian_crossing_bra" class="t-pedestrian_crossing_bra"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-pedestrian_crossing_bra" class="t-pedestrian_crossing_bra"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-pedestrian_crossing_bra" class="t-pedestrian_crossing_bra"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-pedestrian_crossing_bra" class="t-pedestrian_crossing_bra"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-pedestrian_crossing_bra" class="t-pedestrian_crossing_bra"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-pedestrian_crossing_bra" class="t-pedestrian_crossing_bra"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-pedestrian_crossing_bra" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-pedestrians" class="t-pedestrians"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-pedestrians" class="t-pedestrians"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-pedestrians" class="t-pedestrians"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-pedestrians" class="t-pedestrians"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-pedestrians" class="t-pedestrians"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-pedestrians" class="t-pedestrians"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-pedestrians" class="t-pedestrians"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-pedestrians" class="t-pedestrians"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-pedestrians" class="t-pedestrians"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-pedestrians" class="t-pedestrians"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-pedestrians" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-play-ground" class="t-play-ground"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-play-ground" class="t-play-ground"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-play-ground" class="t-play-ground"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-play-ground" class="t-play-ground"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-play-ground" class="t-play-ground"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-play-ground" class="t-play-ground"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-play-ground" class="t-play-ground"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-play-ground" class="t-play-ground"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-play-ground" class="t-play-ground"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-play-ground" class="t-play-ground"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-play-ground" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-playground-ahead-ca" class="t-playground-ahead-ca"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-playground-ahead-ca" class="t-playground-ahead-ca"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-playground-ahead-ca" class="t-playground-ahead-ca"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-playground-ahead-ca" class="t-playground-ahead-ca"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-playground-ahead-ca" class="t-playground-ahead-ca"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-playground-ahead-ca" class="t-playground-ahead-ca"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-playground-ahead-ca" class="t-playground-ahead-ca"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-playground-ahead-ca" class="t-playground-ahead-ca"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-playground-ahead-ca" class="t-playground-ahead-ca"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-playground-ahead-ca" class="t-playground-ahead-ca"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-playground-ahead-ca" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-playground-br" class="t-playground-br"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-playground-br" class="t-playground-br"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-playground-br" class="t-playground-br"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-playground-br" class="t-playground-br"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-playground-br" class="t-playground-br"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-playground-br" class="t-playground-br"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-playground-br" class="t-playground-br"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-playground-br" class="t-playground-br"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-playground-br" class="t-playground-br"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-playground-br" class="t-playground-br"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-playground-br" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-pretzel-loop" class="t-pretzel-loop"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-pretzel-loop" class="t-pretzel-loop"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-pretzel-loop" class="t-pretzel-loop"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-pretzel-loop" class="t-pretzel-loop"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-pretzel-loop" class="t-pretzel-loop"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-pretzel-loop" class="t-pretzel-loop"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-pretzel-loop" class="t-pretzel-loop"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-pretzel-loop" class="t-pretzel-loop"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-pretzel-loop" class="t-pretzel-loop"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-pretzel-loop" class="t-pretzel-loop"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-pretzel-loop" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf15f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-railroad" class="t-railroad"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-railroad" class="t-railroad"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-railroad" class="t-railroad"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-railroad" class="t-railroad"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-railroad" class="t-railroad"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-railroad" class="t-railroad"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-railroad" class="t-railroad"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-railroad" class="t-railroad"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-railroad" class="t-railroad"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-railroad" class="t-railroad"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-railroad" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf160;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-railroad-barriers" class="t-railroad-barriers"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-railroad-barriers" class="t-railroad-barriers"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-railroad-barriers" class="t-railroad-barriers"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-railroad-barriers" class="t-railroad-barriers"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-railroad-barriers" class="t-railroad-barriers"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-railroad-barriers" class="t-railroad-barriers"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-railroad-barriers" class="t-railroad-barriers"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-railroad-barriers" class="t-railroad-barriers"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-railroad-barriers" class="t-railroad-barriers"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-railroad-barriers" class="t-railroad-barriers"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-railroad-barriers" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf161;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-railway-flashing-au" class="t-railway-flashing-au"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-railway-flashing-au" class="t-railway-flashing-au"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-railway-flashing-au" class="t-railway-flashing-au"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-railway-flashing-au" class="t-railway-flashing-au"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-railway-flashing-au" class="t-railway-flashing-au"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-railway-flashing-au" class="t-railway-flashing-au"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-railway-flashing-au" class="t-railway-flashing-au"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-railway-flashing-au" class="t-railway-flashing-au"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-railway-flashing-au" class="t-railway-flashing-au"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-railway-flashing-au" class="t-railway-flashing-au"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-railway-flashing-au" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf162;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-railway-xing-secured" class="t-railway-xing-secured"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-railway-xing-secured" class="t-railway-xing-secured"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-railway-xing-secured" class="t-railway-xing-secured"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-railway-xing-secured" class="t-railway-xing-secured"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-railway-xing-secured" class="t-railway-xing-secured"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-railway-xing-secured" class="t-railway-xing-secured"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-railway-xing-secured" class="t-railway-xing-secured"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-railway-xing-secured" class="t-railway-xing-secured"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-railway-xing-secured" class="t-railway-xing-secured"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-railway-xing-secured" class="t-railway-xing-secured"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-railway-xing-secured" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf163;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-railway-xing-unsecured" class="t-railway-xing-unsecured"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-railway-xing-unsecured" class="t-railway-xing-unsecured"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-railway-xing-unsecured" class="t-railway-xing-unsecured"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-railway-xing-unsecured" class="t-railway-xing-unsecured"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-railway-xing-unsecured" class="t-railway-xing-unsecured"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-railway-xing-unsecured" class="t-railway-xing-unsecured"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-railway-xing-unsecured" class="t-railway-xing-unsecured"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-railway-xing-unsecured" class="t-railway-xing-unsecured"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-railway-xing-unsecured" class="t-railway-xing-unsecured"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-railway-xing-unsecured" class="t-railway-xing-unsecured"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-railway-xing-unsecured" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf164;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-reverse-curve-au" class="t-reverse-curve-au"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-reverse-curve-au" class="t-reverse-curve-au"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-reverse-curve-au" class="t-reverse-curve-au"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-reverse-curve-au" class="t-reverse-curve-au"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-reverse-curve-au" class="t-reverse-curve-au"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-reverse-curve-au" class="t-reverse-curve-au"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-reverse-curve-au" class="t-reverse-curve-au"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-reverse-curve-au" class="t-reverse-curve-au"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-reverse-curve-au" class="t-reverse-curve-au"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-reverse-curve-au" class="t-reverse-curve-au"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-reverse-curve-au" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf165;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-reverse-curve-ontario" class="t-reverse-curve-ontario"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-reverse-curve-ontario" class="t-reverse-curve-ontario"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-reverse-curve-ontario" class="t-reverse-curve-ontario"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-reverse-curve-ontario" class="t-reverse-curve-ontario"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-reverse-curve-ontario" class="t-reverse-curve-ontario"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-reverse-curve-ontario" class="t-reverse-curve-ontario"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-reverse-curve-ontario" class="t-reverse-curve-ontario"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-reverse-curve-ontario" class="t-reverse-curve-ontario"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-reverse-curve-ontario" class="t-reverse-curve-ontario"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-reverse-curve-ontario" class="t-reverse-curve-ontario"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-reverse-curve-ontario" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf166;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-right-of-way" class="t-right-of-way"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-right-of-way" class="t-right-of-way"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-right-of-way" class="t-right-of-way"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-right-of-way" class="t-right-of-way"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-right-of-way" class="t-right-of-way"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-right-of-way" class="t-right-of-way"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-right-of-way" class="t-right-of-way"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-right-of-way" class="t-right-of-way"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-right-of-way" class="t-right-of-way"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-right-of-way" class="t-right-of-way"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-right-of-way" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf167;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-right-of-way-l" class="t-right-of-way-l"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-right-of-way-l" class="t-right-of-way-l"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-right-of-way-l" class="t-right-of-way-l"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-right-of-way-l" class="t-right-of-way-l"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-right-of-way-l" class="t-right-of-way-l"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-right-of-way-l" class="t-right-of-way-l"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-right-of-way-l" class="t-right-of-way-l"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-right-of-way-l" class="t-right-of-way-l"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-right-of-way-l" class="t-right-of-way-l"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-right-of-way-l" class="t-right-of-way-l"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-right-of-way-l" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf168;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-roadworks" class="t-roadworks"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-roadworks" class="t-roadworks"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-roadworks" class="t-roadworks"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-roadworks" class="t-roadworks"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-roadworks" class="t-roadworks"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-roadworks" class="t-roadworks"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-roadworks" class="t-roadworks"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-roadworks" class="t-roadworks"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-roadworks" class="t-roadworks"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-roadworks" class="t-roadworks"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-roadworks" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf169;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-roadworks_bra" class="t-roadworks_bra"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-roadworks_bra" class="t-roadworks_bra"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-roadworks_bra" class="t-roadworks_bra"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-roadworks_bra" class="t-roadworks_bra"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-roadworks_bra" class="t-roadworks_bra"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-roadworks_bra" class="t-roadworks_bra"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-roadworks_bra" class="t-roadworks_bra"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-roadworks_bra" class="t-roadworks_bra"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-roadworks_bra" class="t-roadworks_bra"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-roadworks_bra" class="t-roadworks_bra"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-roadworks_bra" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-rollerblading" class="t-rollerblading"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-rollerblading" class="t-rollerblading"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-rollerblading" class="t-rollerblading"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-rollerblading" class="t-rollerblading"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-rollerblading" class="t-rollerblading"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-rollerblading" class="t-rollerblading"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-rollerblading" class="t-rollerblading"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-rollerblading" class="t-rollerblading"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-rollerblading" class="t-rollerblading"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-rollerblading" class="t-rollerblading"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-rollerblading" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-roundabout" class="t-roundabout"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-roundabout" class="t-roundabout"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-roundabout" class="t-roundabout"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-roundabout" class="t-roundabout"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-roundabout" class="t-roundabout"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-roundabout" class="t-roundabout"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-roundabout" class="t-roundabout"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-roundabout" class="t-roundabout"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-roundabout" class="t-roundabout"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-roundabout" class="t-roundabout"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-roundabout" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-school" class="t-school"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-school" class="t-school"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-school" class="t-school"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-school" class="t-school"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-school" class="t-school"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-school" class="t-school"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-school" class="t-school"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-school" class="t-school"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-school" class="t-school"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-school" class="t-school"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-school" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-school_zone_bra" class="t-school_zone_bra"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-school_zone_bra" class="t-school_zone_bra"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-school_zone_bra" class="t-school_zone_bra"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-school_zone_bra" class="t-school_zone_bra"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-school_zone_bra" class="t-school_zone_bra"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-school_zone_bra" class="t-school_zone_bra"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-school_zone_bra" class="t-school_zone_bra"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-school_zone_bra" class="t-school_zone_bra"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-school_zone_bra" class="t-school_zone_bra"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-school_zone_bra" class="t-school_zone_bra"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-school_zone_bra" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-series-of-curves-left" class="t-series-of-curves-left"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-series-of-curves-left" class="t-series-of-curves-left"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-series-of-curves-left" class="t-series-of-curves-left"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-series-of-curves-left" class="t-series-of-curves-left"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-series-of-curves-left" class="t-series-of-curves-left"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-series-of-curves-left" class="t-series-of-curves-left"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-series-of-curves-left" class="t-series-of-curves-left"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-series-of-curves-left" class="t-series-of-curves-left"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-series-of-curves-left" class="t-series-of-curves-left"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-series-of-curves-left" class="t-series-of-curves-left"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-series-of-curves-left" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf16f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-share-road" class="t-share-road"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-share-road" class="t-share-road"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-share-road" class="t-share-road"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-share-road" class="t-share-road"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-share-road" class="t-share-road"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-share-road" class="t-share-road"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-share-road" class="t-share-road"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-share-road" class="t-share-road"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-share-road" class="t-share-road"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-share-road" class="t-share-road"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-share-road" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf170;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-share-roads" class="t-share-roads"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-share-roads" class="t-share-roads"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-share-roads" class="t-share-roads"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-share-roads" class="t-share-roads"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-share-roads" class="t-share-roads"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-share-roads" class="t-share-roads"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-share-roads" class="t-share-roads"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-share-roads" class="t-share-roads"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-share-roads" class="t-share-roads"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-share-roads" class="t-share-roads"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-share-roads" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf171;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-side-road-a-a-l" class="t-side-road-a-a-l"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-side-road-a-a-l" class="t-side-road-a-a-l"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-side-road-a-a-l" class="t-side-road-a-a-l"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-side-road-a-a-l" class="t-side-road-a-a-l"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-side-road-a-a-l" class="t-side-road-a-a-l"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-side-road-a-a-l" class="t-side-road-a-a-l"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-side-road-a-a-l" class="t-side-road-a-a-l"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-side-road-a-a-l" class="t-side-road-a-a-l"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-side-road-a-a-l" class="t-side-road-a-a-l"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-side-road-a-a-l" class="t-side-road-a-a-l"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-side-road-a-a-l" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf172;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-side-road-a-a-r" class="t-side-road-a-a-r"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-side-road-a-a-r" class="t-side-road-a-a-r"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-side-road-a-a-r" class="t-side-road-a-a-r"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-side-road-a-a-r" class="t-side-road-a-a-r"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-side-road-a-a-r" class="t-side-road-a-a-r"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-side-road-a-a-r" class="t-side-road-a-a-r"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-side-road-a-a-r" class="t-side-road-a-a-r"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-side-road-a-a-r" class="t-side-road-a-a-r"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-side-road-a-a-r" class="t-side-road-a-a-r"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-side-road-a-a-r" class="t-side-road-a-a-r"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-side-road-a-a-r" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf173;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-side-road-p-l" class="t-side-road-p-l"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-side-road-p-l" class="t-side-road-p-l"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-side-road-p-l" class="t-side-road-p-l"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-side-road-p-l" class="t-side-road-p-l"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-side-road-p-l" class="t-side-road-p-l"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-side-road-p-l" class="t-side-road-p-l"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-side-road-p-l" class="t-side-road-p-l"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-side-road-p-l" class="t-side-road-p-l"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-side-road-p-l" class="t-side-road-p-l"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-side-road-p-l" class="t-side-road-p-l"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-side-road-p-l" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf174;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-side-road-p-r" class="t-side-road-p-r"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-side-road-p-r" class="t-side-road-p-r"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-side-road-p-r" class="t-side-road-p-r"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-side-road-p-r" class="t-side-road-p-r"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-side-road-p-r" class="t-side-road-p-r"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-side-road-p-r" class="t-side-road-p-r"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-side-road-p-r" class="t-side-road-p-r"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-side-road-p-r" class="t-side-road-p-r"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-side-road-p-r" class="t-side-road-p-r"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-side-road-p-r" class="t-side-road-p-r"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-side-road-p-r" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf175;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-side-road-perpendicular" class="t-side-road-perpendicular"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-side-road-perpendicular" class="t-side-road-perpendicular"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-side-road-perpendicular" class="t-side-road-perpendicular"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-side-road-perpendicular" class="t-side-road-perpendicular"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-side-road-perpendicular" class="t-side-road-perpendicular"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-side-road-perpendicular" class="t-side-road-perpendicular"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-side-road-perpendicular" class="t-side-road-perpendicular"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-side-road-perpendicular" class="t-side-road-perpendicular"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-side-road-perpendicular" class="t-side-road-perpendicular"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-side-road-perpendicular" class="t-side-road-perpendicular"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-side-road-perpendicular" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf176;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-single-2-reverse-curve" class="t-single-2-reverse-curve"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-single-2-reverse-curve" class="t-single-2-reverse-curve"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-single-2-reverse-curve" class="t-single-2-reverse-curve"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-single-2-reverse-curve" class="t-single-2-reverse-curve"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-single-2-reverse-curve" class="t-single-2-reverse-curve"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-single-2-reverse-curve" class="t-single-2-reverse-curve"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-single-2-reverse-curve" class="t-single-2-reverse-curve"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-single-2-reverse-curve" class="t-single-2-reverse-curve"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-single-2-reverse-curve" class="t-single-2-reverse-curve"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-single-2-reverse-curve" class="t-single-2-reverse-curve"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-single-2-reverse-curve" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf177;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-skewed-railroads" class="t-skewed-railroads"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-skewed-railroads" class="t-skewed-railroads"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-skewed-railroads" class="t-skewed-railroads"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-skewed-railroads" class="t-skewed-railroads"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-skewed-railroads" class="t-skewed-railroads"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-skewed-railroads" class="t-skewed-railroads"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-skewed-railroads" class="t-skewed-railroads"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-skewed-railroads" class="t-skewed-railroads"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-skewed-railroads" class="t-skewed-railroads"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-skewed-railroads" class="t-skewed-railroads"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-skewed-railroads" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf178;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-slippery" class="t-slippery"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-slippery" class="t-slippery"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-slippery" class="t-slippery"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-slippery" class="t-slippery"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-slippery" class="t-slippery"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-slippery" class="t-slippery"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-slippery" class="t-slippery"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-slippery" class="t-slippery"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-slippery" class="t-slippery"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-slippery" class="t-slippery"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-slippery" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf179;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-slippery-motorcycle" class="t-slippery-motorcycle"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-slippery-motorcycle" class="t-slippery-motorcycle"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-slippery-motorcycle" class="t-slippery-motorcycle"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-slippery-motorcycle" class="t-slippery-motorcycle"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-slippery-motorcycle" class="t-slippery-motorcycle"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-slippery-motorcycle" class="t-slippery-motorcycle"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-slippery-motorcycle" class="t-slippery-motorcycle"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-slippery-motorcycle" class="t-slippery-motorcycle"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-slippery-motorcycle" class="t-slippery-motorcycle"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-slippery-motorcycle" class="t-slippery-motorcycle"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-slippery-motorcycle" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf17a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-slippery-road" class="t-slippery-road"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-slippery-road" class="t-slippery-road"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-slippery-road" class="t-slippery-road"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-slippery-road" class="t-slippery-road"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-slippery-road" class="t-slippery-road"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-slippery-road" class="t-slippery-road"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-slippery-road" class="t-slippery-road"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-slippery-road" class="t-slippery-road"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-slippery-road" class="t-slippery-road"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-slippery-road" class="t-slippery-road"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-slippery-road" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf17b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-small-arrow-au" class="t-small-arrow-au"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-small-arrow-au" class="t-small-arrow-au"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-small-arrow-au" class="t-small-arrow-au"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-small-arrow-au" class="t-small-arrow-au"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-small-arrow-au" class="t-small-arrow-au"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-small-arrow-au" class="t-small-arrow-au"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-small-arrow-au" class="t-small-arrow-au"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-small-arrow-au" class="t-small-arrow-au"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-small-arrow-au" class="t-small-arrow-au"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-small-arrow-au" class="t-small-arrow-au"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-small-arrow-au" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf17c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-snowflake" class="t-snowflake"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-snowflake" class="t-snowflake"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-snowflake" class="t-snowflake"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-snowflake" class="t-snowflake"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-snowflake" class="t-snowflake"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-snowflake" class="t-snowflake"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-snowflake" class="t-snowflake"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-snowflake" class="t-snowflake"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-snowflake" class="t-snowflake"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-snowflake" class="t-snowflake"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-snowflake" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf17d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-square-angular" class="t-square-angular"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-square-angular" class="t-square-angular"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-square-angular" class="t-square-angular"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-square-angular" class="t-square-angular"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-square-angular" class="t-square-angular"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-square-angular" class="t-square-angular"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-square-angular" class="t-square-angular"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-square-angular" class="t-square-angular"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-square-angular" class="t-square-angular"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-square-angular" class="t-square-angular"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-square-angular" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf17e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-square-diagonal-bar" class="t-square-diagonal-bar"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-square-diagonal-bar" class="t-square-diagonal-bar"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-square-diagonal-bar" class="t-square-diagonal-bar"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-square-diagonal-bar" class="t-square-diagonal-bar"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-square-diagonal-bar" class="t-square-diagonal-bar"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-square-diagonal-bar" class="t-square-diagonal-bar"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-square-diagonal-bar" class="t-square-diagonal-bar"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-square-diagonal-bar" class="t-square-diagonal-bar"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-square-diagonal-bar" class="t-square-diagonal-bar"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-square-diagonal-bar" class="t-square-diagonal-bar"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-square-diagonal-bar" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf17f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-square-rounded" class="t-square-rounded"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-square-rounded" class="t-square-rounded"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-square-rounded" class="t-square-rounded"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-square-rounded" class="t-square-rounded"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-square-rounded" class="t-square-rounded"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-square-rounded" class="t-square-rounded"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-square-rounded" class="t-square-rounded"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-square-rounded" class="t-square-rounded"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-square-rounded" class="t-square-rounded"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-square-rounded" class="t-square-rounded"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-square-rounded" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf180;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-steep-hill" class="t-steep-hill"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-steep-hill" class="t-steep-hill"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-steep-hill" class="t-steep-hill"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-steep-hill" class="t-steep-hill"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-steep-hill" class="t-steep-hill"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-steep-hill" class="t-steep-hill"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-steep-hill" class="t-steep-hill"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-steep-hill" class="t-steep-hill"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-steep-hill" class="t-steep-hill"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-steep-hill" class="t-steep-hill"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-steep-hill" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf181;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-steep-hill-downwards" class="t-steep-hill-downwards"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-steep-hill-downwards" class="t-steep-hill-downwards"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-steep-hill-downwards" class="t-steep-hill-downwards"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-steep-hill-downwards" class="t-steep-hill-downwards"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-steep-hill-downwards" class="t-steep-hill-downwards"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-steep-hill-downwards" class="t-steep-hill-downwards"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-steep-hill-downwards" class="t-steep-hill-downwards"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-steep-hill-downwards" class="t-steep-hill-downwards"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-steep-hill-downwards" class="t-steep-hill-downwards"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-steep-hill-downwards" class="t-steep-hill-downwards"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-steep-hill-downwards" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf182;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-steep-hill-upwards" class="t-steep-hill-upwards"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-steep-hill-upwards" class="t-steep-hill-upwards"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-steep-hill-upwards" class="t-steep-hill-upwards"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-steep-hill-upwards" class="t-steep-hill-upwards"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-steep-hill-upwards" class="t-steep-hill-upwards"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-steep-hill-upwards" class="t-steep-hill-upwards"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-steep-hill-upwards" class="t-steep-hill-upwards"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-steep-hill-upwards" class="t-steep-hill-upwards"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-steep-hill-upwards" class="t-steep-hill-upwards"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-steep-hill-upwards" class="t-steep-hill-upwards"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-steep-hill-upwards" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf183;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-stop" class="t-stop"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-stop" class="t-stop"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-stop" class="t-stop"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-stop" class="t-stop"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-stop" class="t-stop"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-stop" class="t-stop"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-stop" class="t-stop"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-stop" class="t-stop"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-stop" class="t-stop"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-stop" class="t-stop"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-stop" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf184;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-t-roads" class="t-t-roads"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-t-roads" class="t-t-roads"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-t-roads" class="t-t-roads"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-t-roads" class="t-t-roads"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-t-roads" class="t-t-roads"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-t-roads" class="t-t-roads"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-t-roads" class="t-t-roads"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-t-roads" class="t-t-roads"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-t-roads" class="t-t-roads"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-t-roads" class="t-t-roads"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-t-roads" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf185;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-tractor" class="t-tractor"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-tractor" class="t-tractor"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-tractor" class="t-tractor"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-tractor" class="t-tractor"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-tractor" class="t-tractor"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-tractor" class="t-tractor"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-tractor" class="t-tractor"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-tractor" class="t-tractor"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-tractor" class="t-tractor"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-tractor" class="t-tractor"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-tractor" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf186;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-traffic-signal-au" class="t-traffic-signal-au"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-traffic-signal-au" class="t-traffic-signal-au"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-traffic-signal-au" class="t-traffic-signal-au"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-traffic-signal-au" class="t-traffic-signal-au"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-traffic-signal-au" class="t-traffic-signal-au"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-traffic-signal-au" class="t-traffic-signal-au"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-traffic-signal-au" class="t-traffic-signal-au"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-traffic-signal-au" class="t-traffic-signal-au"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-traffic-signal-au" class="t-traffic-signal-au"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-traffic-signal-au" class="t-traffic-signal-au"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-traffic-signal-au" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf187;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-trailer" class="t-trailer"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-trailer" class="t-trailer"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-trailer" class="t-trailer"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-trailer" class="t-trailer"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-trailer" class="t-trailer"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-trailer" class="t-trailer"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-trailer" class="t-trailer"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-trailer" class="t-trailer"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-trailer" class="t-trailer"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-trailer" class="t-trailer"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-trailer" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf188;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-train-au" class="t-train-au"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-train-au" class="t-train-au"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-train-au" class="t-train-au"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-train-au" class="t-train-au"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-train-au" class="t-train-au"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-train-au" class="t-train-au"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-train-au" class="t-train-au"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-train-au" class="t-train-au"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-train-au" class="t-train-au"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-train-au" class="t-train-au"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-train-au" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf189;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-train-electric" class="t-train-electric"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-train-electric" class="t-train-electric"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-train-electric" class="t-train-electric"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-train-electric" class="t-train-electric"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-train-electric" class="t-train-electric"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-train-electric" class="t-train-electric"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-train-electric" class="t-train-electric"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-train-electric" class="t-train-electric"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-train-electric" class="t-train-electric"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-train-electric" class="t-train-electric"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-train-electric" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf18a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-tram" class="t-tram"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-tram" class="t-tram"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-tram" class="t-tram"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-tram" class="t-tram"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-tram" class="t-tram"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-tram" class="t-tram"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-tram" class="t-tram"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-tram" class="t-tram"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-tram" class="t-tram"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-tram" class="t-tram"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-tram" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf18b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-transit_bra" class="t-transit_bra"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-transit_bra" class="t-transit_bra"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-transit_bra" class="t-transit_bra"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-transit_bra" class="t-transit_bra"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-transit_bra" class="t-transit_bra"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-transit_bra" class="t-transit_bra"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-transit_bra" class="t-transit_bra"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-transit_bra" class="t-transit_bra"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-transit_bra" class="t-transit_bra"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-transit_bra" class="t-transit_bra"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-transit_bra" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf18c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-tri-angular" class="t-tri-angular"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-tri-angular" class="t-tri-angular"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-tri-angular" class="t-tri-angular"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-tri-angular" class="t-tri-angular"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-tri-angular" class="t-tri-angular"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-tri-angular" class="t-tri-angular"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-tri-angular" class="t-tri-angular"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-tri-angular" class="t-tri-angular"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-tri-angular" class="t-tri-angular"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-tri-angular" class="t-tri-angular"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-tri-angular" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf18d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-tri-rounded" class="t-tri-rounded"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-tri-rounded" class="t-tri-rounded"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-tri-rounded" class="t-tri-rounded"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-tri-rounded" class="t-tri-rounded"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-tri-rounded" class="t-tri-rounded"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-tri-rounded" class="t-tri-rounded"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-tri-rounded" class="t-tri-rounded"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-tri-rounded" class="t-tri-rounded"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-tri-rounded" class="t-tri-rounded"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-tri-rounded" class="t-tri-rounded"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-tri-rounded" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf18e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-truck" class="t-truck"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-truck" class="t-truck"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-truck" class="t-truck"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-truck" class="t-truck"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-truck" class="t-truck"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-truck" class="t-truck"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-truck" class="t-truck"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-truck" class="t-truck"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-truck" class="t-truck"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-truck" class="t-truck"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-truck" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf18f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-truck-rollover-speed" class="t-truck-rollover-speed"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-truck-rollover-speed" class="t-truck-rollover-speed"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-truck-rollover-speed" class="t-truck-rollover-speed"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-truck-rollover-speed" class="t-truck-rollover-speed"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-truck-rollover-speed" class="t-truck-rollover-speed"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-truck-rollover-speed" class="t-truck-rollover-speed"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-truck-rollover-speed" class="t-truck-rollover-speed"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-truck-rollover-speed" class="t-truck-rollover-speed"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-truck-rollover-speed" class="t-truck-rollover-speed"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-truck-rollover-speed" class="t-truck-rollover-speed"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-truck-rollover-speed" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf190;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-trucks-rollover" class="t-trucks-rollover"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-trucks-rollover" class="t-trucks-rollover"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-trucks-rollover" class="t-trucks-rollover"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-trucks-rollover" class="t-trucks-rollover"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-trucks-rollover" class="t-trucks-rollover"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-trucks-rollover" class="t-trucks-rollover"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-trucks-rollover" class="t-trucks-rollover"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-trucks-rollover" class="t-trucks-rollover"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-trucks-rollover" class="t-trucks-rollover"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-trucks-rollover" class="t-trucks-rollover"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-trucks-rollover" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf191;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-tunnel" class="t-tunnel"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-tunnel" class="t-tunnel"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-tunnel" class="t-tunnel"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-tunnel" class="t-tunnel"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-tunnel" class="t-tunnel"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-tunnel" class="t-tunnel"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-tunnel" class="t-tunnel"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-tunnel" class="t-tunnel"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-tunnel" class="t-tunnel"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-tunnel" class="t-tunnel"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-tunnel" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf192;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-turn-90-l" class="t-turn-90-l"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-turn-90-l" class="t-turn-90-l"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-turn-90-l" class="t-turn-90-l"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-turn-90-l" class="t-turn-90-l"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-turn-90-l" class="t-turn-90-l"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-turn-90-l" class="t-turn-90-l"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-turn-90-l" class="t-turn-90-l"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-turn-90-l" class="t-turn-90-l"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-turn-90-l" class="t-turn-90-l"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-turn-90-l" class="t-turn-90-l"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-turn-90-l" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf193;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-turn-curve-speed" class="t-turn-curve-speed"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-turn-curve-speed" class="t-turn-curve-speed"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-turn-curve-speed" class="t-turn-curve-speed"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-turn-curve-speed" class="t-turn-curve-speed"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-turn-curve-speed" class="t-turn-curve-speed"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-turn-curve-speed" class="t-turn-curve-speed"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-turn-curve-speed" class="t-turn-curve-speed"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-turn-curve-speed" class="t-turn-curve-speed"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-turn-curve-speed" class="t-turn-curve-speed"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-turn-curve-speed" class="t-turn-curve-speed"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-turn-curve-speed" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf194;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-turn-l" class="t-turn-l"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-turn-l" class="t-turn-l"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-turn-l" class="t-turn-l"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-turn-l" class="t-turn-l"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-turn-l" class="t-turn-l"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-turn-l" class="t-turn-l"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-turn-l" class="t-turn-l"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-turn-l" class="t-turn-l"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-turn-l" class="t-turn-l"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-turn-l" class="t-turn-l"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-turn-l" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf195;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-turn-l-aus" class="t-turn-l-aus"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-turn-l-aus" class="t-turn-l-aus"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-turn-l-aus" class="t-turn-l-aus"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-turn-l-aus" class="t-turn-l-aus"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-turn-l-aus" class="t-turn-l-aus"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-turn-l-aus" class="t-turn-l-aus"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-turn-l-aus" class="t-turn-l-aus"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-turn-l-aus" class="t-turn-l-aus"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-turn-l-aus" class="t-turn-l-aus"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-turn-l-aus" class="t-turn-l-aus"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-turn-l-aus" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf196;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-turn-l-curve" class="t-turn-l-curve"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-turn-l-curve" class="t-turn-l-curve"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-turn-l-curve" class="t-turn-l-curve"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-turn-l-curve" class="t-turn-l-curve"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-turn-l-curve" class="t-turn-l-curve"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-turn-l-curve" class="t-turn-l-curve"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-turn-l-curve" class="t-turn-l-curve"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-turn-l-curve" class="t-turn-l-curve"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-turn-l-curve" class="t-turn-l-curve"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-turn-l-curve" class="t-turn-l-curve"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-turn-l-curve" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf197;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-turn-reverse-left" class="t-turn-reverse-left"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-turn-reverse-left" class="t-turn-reverse-left"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-turn-reverse-left" class="t-turn-reverse-left"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-turn-reverse-left" class="t-turn-reverse-left"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-turn-reverse-left" class="t-turn-reverse-left"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-turn-reverse-left" class="t-turn-reverse-left"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-turn-reverse-left" class="t-turn-reverse-left"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-turn-reverse-left" class="t-turn-reverse-left"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-turn-reverse-left" class="t-turn-reverse-left"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-turn-reverse-left" class="t-turn-reverse-left"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-turn-reverse-left" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf198;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-turn-right-curve-ontario" class="t-turn-right-curve-ontario"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-turn-right-curve-ontario" class="t-turn-right-curve-ontario"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-turn-right-curve-ontario" class="t-turn-right-curve-ontario"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-turn-right-curve-ontario" class="t-turn-right-curve-ontario"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-turn-right-curve-ontario" class="t-turn-right-curve-ontario"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-turn-right-curve-ontario" class="t-turn-right-curve-ontario"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-turn-right-curve-ontario" class="t-turn-right-curve-ontario"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-turn-right-curve-ontario" class="t-turn-right-curve-ontario"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-turn-right-curve-ontario" class="t-turn-right-curve-ontario"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-turn-right-curve-ontario" class="t-turn-right-curve-ontario"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-turn-right-curve-ontario" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf199;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-turnaround" class="t-turnaround"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-turnaround" class="t-turnaround"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-turnaround" class="t-turnaround"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-turnaround" class="t-turnaround"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-turnaround" class="t-turnaround"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-turnaround" class="t-turnaround"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-turnaround" class="t-turnaround"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-turnaround" class="t-turnaround"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-turnaround" class="t-turnaround"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-turnaround" class="t-turnaround"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-turnaround" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf19a;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-turnaround2" class="t-turnaround2"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-turnaround2" class="t-turnaround2"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-turnaround2" class="t-turnaround2"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-turnaround2" class="t-turnaround2"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-turnaround2" class="t-turnaround2"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-turnaround2" class="t-turnaround2"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-turnaround2" class="t-turnaround2"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-turnaround2" class="t-turnaround2"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-turnaround2" class="t-turnaround2"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-turnaround2" class="t-turnaround2"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-turnaround2" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf19b;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-two_way_arrows_bra" class="t-two_way_arrows_bra"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-two_way_arrows_bra" class="t-two_way_arrows_bra"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-two_way_arrows_bra" class="t-two_way_arrows_bra"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-two_way_arrows_bra" class="t-two_way_arrows_bra"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-two_way_arrows_bra" class="t-two_way_arrows_bra"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-two_way_arrows_bra" class="t-two_way_arrows_bra"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-two_way_arrows_bra" class="t-two_way_arrows_bra"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-two_way_arrows_bra" class="t-two_way_arrows_bra"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-two_way_arrows_bra" class="t-two_way_arrows_bra"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-two_way_arrows_bra" class="t-two_way_arrows_bra"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-two_way_arrows_bra" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf19c;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-u-turn" class="t-u-turn"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-u-turn" class="t-u-turn"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-u-turn" class="t-u-turn"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-u-turn" class="t-u-turn"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-u-turn" class="t-u-turn"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-u-turn" class="t-u-turn"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-u-turn" class="t-u-turn"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-u-turn" class="t-u-turn"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-u-turn" class="t-u-turn"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-u-turn" class="t-u-turn"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-u-turn" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf19d;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-u-turn-au" class="t-u-turn-au"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-u-turn-au" class="t-u-turn-au"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-u-turn-au" class="t-u-turn-au"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-u-turn-au" class="t-u-turn-au"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-u-turn-au" class="t-u-turn-au"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-u-turn-au" class="t-u-turn-au"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-u-turn-au" class="t-u-turn-au"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-u-turn-au" class="t-u-turn-au"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-u-turn-au" class="t-u-turn-au"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-u-turn-au" class="t-u-turn-au"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-u-turn-au" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf19e;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-wild-animal" class="t-wild-animal"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-wild-animal" class="t-wild-animal"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-wild-animal" class="t-wild-animal"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-wild-animal" class="t-wild-animal"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-wild-animal" class="t-wild-animal"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-wild-animal" class="t-wild-animal"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-wild-animal" class="t-wild-animal"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-wild-animal" class="t-wild-animal"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-wild-animal" class="t-wild-animal"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-wild-animal" class="t-wild-animal"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-wild-animal" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf19f;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-windbag" class="t-windbag"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-windbag" class="t-windbag"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-windbag" class="t-windbag"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-windbag" class="t-windbag"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-windbag" class="t-windbag"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-windbag" class="t-windbag"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-windbag" class="t-windbag"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-windbag" class="t-windbag"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-windbag" class="t-windbag"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-windbag" class="t-windbag"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-windbag" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf1a0;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-winding-road-left" class="t-winding-road-left"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-winding-road-left" class="t-winding-road-left"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-winding-road-left" class="t-winding-road-left"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-winding-road-left" class="t-winding-road-left"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-winding-road-left" class="t-winding-road-left"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-winding-road-left" class="t-winding-road-left"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-winding-road-left" class="t-winding-road-left"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-winding-road-left" class="t-winding-road-left"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-winding-road-left" class="t-winding-road-left"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-winding-road-left" class="t-winding-road-left"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-winding-road-left" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf1a1;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-wombat" class="t-wombat"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-wombat" class="t-wombat"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-wombat" class="t-wombat"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-wombat" class="t-wombat"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-wombat" class="t-wombat"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-wombat" class="t-wombat"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-wombat" class="t-wombat"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-wombat" class="t-wombat"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-wombat" class="t-wombat"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-wombat" class="t-wombat"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-wombat" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf1a2;" />
-        </div>
-      </div>
-      
-      <div class="glyph">
-        <div class="preview-glyphs">
-          <span class="step size-12"><span class="letters">Pp</span><i id="t-y-roads" class="t-y-roads"></i></span><span class="step size-14"><span class="letters">Pp</span><i id="t-y-roads" class="t-y-roads"></i></span><span class="step size-16"><span class="letters">Pp</span><i id="t-y-roads" class="t-y-roads"></i></span><span class="step size-18"><span class="letters">Pp</span><i id="t-y-roads" class="t-y-roads"></i></span><span class="step size-21"><span class="letters">Pp</span><i id="t-y-roads" class="t-y-roads"></i></span><span class="step size-24"><span class="letters">Pp</span><i id="t-y-roads" class="t-y-roads"></i></span><span class="step size-36"><span class="letters">Pp</span><i id="t-y-roads" class="t-y-roads"></i></span><span class="step size-48"><span class="letters">Pp</span><i id="t-y-roads" class="t-y-roads"></i></span><span class="step size-60"><span class="letters">Pp</span><i id="t-y-roads" class="t-y-roads"></i></span><span class="step size-72"><span class="letters">Pp</span><i id="t-y-roads" class="t-y-roads"></i></span>
-        </div>
-        <div class="preview-scale">
-          <span class="step">12</span><span class="step">14</span><span class="step">16</span><span class="step">18</span><span class="step">21</span><span class="step">24</span><span class="step">36</span><span class="step">48</span><span class="step">60</span><span class="step">72</span>
-        </div>
-        <div class="usage">
-          <input class="class" type="text" readonly="readonly" onClick="this.select();" value=".t-y-roads" />
-          <input class="point" type="text" readonly="readonly" onClick="this.select();" value="&amp;#xf1a3;" />
-        </div>
-      </div>
-      
-
-      <footer>
-        Made with love using <a href="http://fontcustom.com">Font Custom</a>.
-      </footer>
-    </div>
-  </body>
-</html>
diff --git a/vendor/assets/iD/iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.eot b/vendor/assets/iD/iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.eot
deleted file mode 100644 (file)
index d52dfc2..0000000
Binary files a/vendor/assets/iD/iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.eot and /dev/null differ
diff --git a/vendor/assets/iD/iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.svg b/vendor/assets/iD/iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.svg
deleted file mode 100644 (file)
index 834f334..0000000
+++ /dev/null
@@ -1,1610 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<!--
-2016-1-25: Created.
--->
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>
-Created by FontForge 20120731 at Mon Jan 25 11:17:45 2016
- By Travis CI User
-Created by Travis CI User with FontForge 2.0 (http://fontforge.sf.net)
-</metadata>
-<defs>
-<font id="traffico" horiz-adv-x="512" >
-  <font-face 
-    font-family="traffico"
-    font-weight="500"
-    font-stretch="normal"
-    units-per-em="512"
-    panose-1="2 0 6 3 0 0 0 0 0 0"
-    ascent="256"
-    descent="-256"
-    bbox="-0.0135651 -256.178 759.105 256.822"
-    underline-thickness="25.6"
-    underline-position="-51.2"
-    unicode-range="U+0020-F1A3"
-  />
-    <missing-glyph />
-    <glyph glyph-name="space" unicode=" " horiz-adv-x="200" 
- />
-    <glyph glyph-name="uniF125" unicode="&#xf125;" 
-d="M249.919 -51.2598v0c-1.46094 -2.91602 -2.26465 -5.81055 -2.26465 -8.0752c0 -1.14844 -1.93164 -5.49805 -1.93164 -8.41406c0 -1.43945 0.470703 -3.05371 0.470703 -4.66797v-2.9209c0 -1.61426 -1.45508 -3.87891 -1.45508 -5.16016v-1.95215
-c0 -0.651367 0.650391 -1.27539 0.650391 -1.27539c0 -0.990234 1.76758 -2.60352 1.76758 -3.72559c0.498047 -0.492188 1.46094 -1.77344 1.46094 -1.77344c0.338867 -0.650391 1.95215 -2.76172 2.26465 -3.38672c0 0 1.93164 -0.989258 1.93164 -1.79883
-l0.338867 -1.12207c-0.338867 -0.3125 -1.61914 -1.29688 -1.61914 -1.29688c-0.804688 -0.317383 -2.26562 -0.967773 -3.38672 -0.967773h-3.2334c-1.61426 0 -3.87988 1.14258 -5.33984 1.14258c-0.15332 0 -1.30176 0.80957 -1.30176 0.80957
-c-0.47168 1.28125 -1.43457 3.05371 -1.77344 4.35547c0 0.651367 0.338867 1.30176 0.338867 1.61426c0 0.962891 0.470703 1.93164 0.470703 2.91602c0 1.28027 -0.470703 2.58203 -0.470703 3.85742c0 1.95312 -1.79395 4.22266 -1.79395 6.14941v1.93164
-c0 0.333008 0.984375 1.30176 0.984375 1.30176c0 0.804688 1.28027 3.38672 1.28027 4.19629c0 2.26562 1.46094 5.65234 1.46094 8.23438c0 2.91602 -0.49707 6.30273 -0.49707 9.53613c0 4.37109 -0.3125 9.53613 -0.3125 14.0664
-c0 4.19629 0.3125 8.39258 0.3125 12.2725c0 1.28027 -2.08496 4.84668 -2.73633 4.84668h-4.19629c-4.37695 0 -9.53613 -0.803711 -13.082 -0.803711c-5.49316 0 -12.6104 -4.04297 -17.4531 -4.04297c-2.74121 0 -7.42969 -1.45605 -11.1553 -1.45605h-2.73633h-3.38672
-c-0.80957 0 -2.26465 0.3125 -2.60352 0.3125c-1.28027 0 -4.19629 2.42383 -4.84766 2.42383c-3.22754 0 -7.58301 2.26465 -10.9697 2.26465c-0.96875 0 -3.88477 0 -4.84766 -0.15332c-0.651367 -1.61914 -3.0752 -5.33984 -3.0752 -5.49805
-c0 0 -3.07422 -3.2334 -3.72559 -3.2334c0 0 -3.22754 -2.57715 -4.03711 -2.57715c-0.3125 0 -3.8584 -1.12207 -3.8584 -1.12207c0 -0.338867 0.3125 -2.27051 0.3125 -2.91602c0 -1.30176 -1.61426 -3.88379 -1.61426 -4.53516h-1.30176
-c-0.3125 0.338867 -0.962891 2.11133 -0.962891 3.2334c0 1.14355 0.333008 2.75684 0.333008 3.4082c0 0.3125 -1.61426 0.3125 -1.61426 0c0 -0.492188 -0.337891 -1.95312 -0.337891 -2.75684c0 -0.96875 -0.963867 -2.58301 -0.963867 -3.88477
-c0 0 -0.311523 -1.28027 -0.650391 -1.61426c0 -0.317383 -1.93164 0 -1.93164 0c0 0.651367 -0.333984 2.91602 -0.333984 4.37695v3.38672c0 0.158203 -3.2334 0.962891 -3.2334 0.962891c-0.311523 0 -0.470703 -3.22754 -0.470703 -4.34961
-c0 -0.80957 -1.14258 -2.7627 -1.30176 -3.0752c-0.15332 -0.317383 -1.61426 0 -1.61426 0v4.53027c0 0.962891 -0.470703 1.93164 -0.158203 3.85742l-1.30176 -10.6572c-2.4082 -11.1025 7.81055 -21.2158 9.06445 -32.1494l2.24414 -2.58203
-c0.651367 -0.3125 1.95312 -0.963867 1.95312 -0.963867c1.28027 -0.317383 3.54492 -3.54492 3.88379 -4.19629c0 0 1.27539 -0.96875 1.27539 -1.30176c0 -0.650391 -1.92578 -2.26465 -2.57715 -2.26465c-0.962891 0 -2.91602 -0.96875 -4.19629 -0.96875
-c-2.26465 0 -4.53516 0.96875 -6.80078 0.96875c-0.311523 0 -1.12109 0.984375 -1.12109 0.984375c0 0.80957 -1.45605 2.24316 -0.651367 2.58203v2.89453l-0.962891 2.60352l-0.651367 -2.26953l-0.962891 -1.30176l-1.30176 4.19629l-1.43945 6.46191l-1.14258 5.65625
-l-3.3877 10.0283l-5.81055 10.3467c-0.338867 -0.651367 -0.650391 -0.990234 -0.650391 -0.990234c-0.651367 -1.92578 -3.38672 -5.65137 -3.38672 -7.4248c0 -1.93164 -0.338867 -5.49805 -0.338867 -7.58301c0 -6.46191 1.61426 -12.6113 1.61426 -18.7393v-1.61328
-l0.80957 -0.990234c0.80957 0 3.56641 -2.57715 4.03711 -3.04785c0.990234 -0.80957 2.42383 -1.95312 3.2334 -3.2334c0.651367 -0.179688 0.984375 -0.651367 1.79395 -1.30176v-0.3125c-0.492188 -0.651367 -1.30176 -1.14355 -1.79395 -1.61426
-c-0.80957 -0.179688 -1.93164 -0.650391 -2.74121 -0.989258c-2.10547 0 -4.19629 0 -5.96387 -0.3125c-0.989258 0.492188 -1.61914 0.804688 -2.60352 1.12207c-0.629883 0.650391 -0.96875 1.79395 -1.61914 2.60352c0 0.3125 -0.3125 0.804688 0 1.43457
-c0.338867 0.337891 0.338867 0.80957 0.338867 0.80957c0 0.333008 -0.338867 0.803711 -0.338867 0.984375v0.80957c0 0.470703 -0.625 0.803711 -0.625 0.803711c0 0.318359 -0.337891 0.629883 -0.337891 0.96875l-0.3125 0.651367h-0.651367l-0.317383 -0.651367
-l-0.650391 -0.338867c0 -0.629883 -0.963867 -1.92578 -1.29688 -2.42383c0 0 -0.317383 0.498047 -0.317383 0.810547c0 0.650391 -0.651367 0.983398 -0.651367 1.61328v7.76367v10.0068c0 8.26074 -3.07422 17.2998 -3.07422 25.042
-c0 1.61426 -0.470703 4.84766 -0.470703 7.45117c0 0.470703 0.470703 1.27539 0.470703 1.77246c0 0.47168 1.14844 2.08496 1.14844 2.08496c1.27539 2.1123 5.15918 6.14941 6.12305 7.45117c0 0 2.58203 3.69922 2.58203 4.35059
-c0 0.49707 1.61426 2.58203 1.30176 3.2334c-0.650391 1.61426 -1.93164 4.19629 -1.93164 5.49805c0 1.27539 -1.95215 4.19629 -1.95215 5.31348c0 2.27051 -0.963867 5.18555 -0.963867 7.76855v7.91699c0 1.28027 -0.317383 6.93262 1.30176 5.96875
-c-0.650391 3.88477 0.963867 3.2334 -0.337891 6.62109c-0.651367 1.95215 -8.39355 2.91504 -8.39355 2.91504c-0.333008 1.30176 -0.651367 11.96 -4.03809 11.96c-3.07422 0 -0.80957 -7.7627 -0.80957 -11.1494c0 -5.49902 -0.15332 -10.9971 -0.15332 -16.3154
-c0 -6.30273 -0.492188 -12.4521 -0.492188 -18.7344c0 -1.30176 1.29688 -2.91504 1.29688 -3.56641c0 -3.88379 1.43945 -8.08105 1.43945 -12.2773c0 -3.87891 -0.629883 -7.58301 -0.629883 -11.1504c0 -2.26465 -1.46094 -5.15918 -1.46094 -7.1123
-c0 -1.28027 -0.645508 -3.5459 -0.645508 -5.81055v-6.12793c-1.30176 2.89453 -1.46094 4.84766 -1.46094 6.46094c0 1.28125 0.15918 4.19727 -0.311523 5.47754c-0.96875 -0.962891 -1.77344 -2.89453 -1.77344 -4.19629
-c0 -0.962891 -0.80957 -2.57715 -0.80957 -3.87891c0 -1.77344 -0.179688 -3.2334 -0.179688 -6.12891c-0.962891 1.12207 -1.43457 2.89551 -1.43457 3.5459c0 2.58301 -1.45996 5.81055 -1.45996 8.41406c0 1.93164 -0.15918 4.19727 -0.15918 6.46191
-c0 3.7041 0.629883 8.39258 0.629883 12.2725c0 2.89453 0.989258 7.42969 0.989258 10.5039c0 0.651367 1.43457 3.22852 1.43457 4.19727c0 2.91504 0.338867 5.96387 0.338867 9.19727v19.0723c0 6.7793 -1.30176 14.0449 -1.30176 20.8447
-c0 3.5459 -0.15918 8.23438 -0.15918 11.96c0 2.42383 0.962891 5.65234 0.962891 7.74219c0 1.61426 1.46094 4.84766 1.46094 5.99121c0 0.628906 3.2334 3.54492 3.2334 3.54492c1.12207 0 7.1123 4.19727 9.68945 4.19727c0.651367 0 4.53516 1.61328 6.14941 1.61328
-c0.962891 0 4.19629 1.46094 4.50879 1.46094c2.11133 0 5.65723 2.73633 8.08105 3.7207c2.42383 0.967773 6.14355 2.74121 8.88477 2.74121c2.10645 0 6.46191 0.492188 8.72656 0.492188c4.19727 0 9.53613 -1.95312 12.2725 -1.95312
-c6.30762 0 14.542 -4.03809 20.5332 -4.03809c3.85742 0 10.499 -2.73535 15.6592 -2.73535c7.27051 0 15.1924 1.77246 21.6543 1.77246c4.19629 0 10.9707 2.26465 15.1885 2.26465c5.65723 0 13.0811 2.73633 19.21 2.73633h9.53613
-c3.87891 0 8.0752 -0.80957 11.6416 -0.80957h12.1191c0.962891 0 3.38672 0.80957 3.38672 0.80957c2.89453 0.15918 9.53613 5.49805 12.4307 5.65723c0 0 3.56738 2.41797 4.03809 2.41797c0.80957 0 4.84766 3.0752 5.18652 3.0752
-c3.05273 0 7.89551 3.88379 11.4678 3.88379h5.65137c0.470703 0 1.28125 -0.492188 2.26465 -0.337891l2.89551 1.61328l3.2334 1.14844l3.56641 0.15332h3.5459l2.42383 -0.803711l0.962891 -0.498047v-0.470703l-0.80957 -0.492188h-2.08496l-2.91602 -0.3125
-l-2.11133 -0.962891l-1.92676 -1.46094l-1.61914 -1.95215c1.30176 -0.470703 3.2334 -1.77344 4.53516 -1.77344c0 0 1.28027 0 1.28027 -0.311523c0 -0.651367 -1.12109 -0.651367 -1.28027 -0.80957l-0.989258 -1.14355c0 -0.470703 1.95215 -0.962891 2.26953 -1.12207
-c0 0 0.651367 -0.492188 0.492188 -0.650391c-0.337891 -0.3125 -1.61328 -0.3125 -1.77246 -0.651367c-0.338867 -0.158203 0.80957 0 0.80957 0c0.625 -0.311523 1.43457 -0.80957 1.92676 -0.80957c0 0 0.967773 -0.470703 0.967773 -0.624023
-c0 -0.180664 0.804688 -1.30176 0.804688 -1.30176c0 -0.318359 1.30176 -1.62012 1.30176 -1.77344c0 -1.45996 0.470703 -3.2334 0.470703 -4.68848c0 -0.80957 0.651367 -2.74121 0.651367 -2.74121c0 -1.95312 2.42383 -4.53027 2.42383 -5.18066l3.56641 -3.2334
-c0.629883 -0.3125 3.8584 -4.50879 4.66797 -4.50879c0 0 2.26465 -0.338867 2.91602 -0.990234c0.317383 -0.311523 0.80957 -1.77246 0.80957 -2.57715c0 -0.650391 0.311523 -1.61328 0.311523 -2.58203c0 -0.804688 -0.311523 -1.77246 -0.311523 -2.26465
-c0 -0.47168 -0.492188 -1.46094 -0.492188 -1.77344v-1.12207l-1.28125 -1.30176l-0.962891 -0.492188c-0.179688 0 -0.179688 -0.80957 -0.179688 -0.80957c-0.317383 -0.15332 -1.12207 -1.12207 -1.12207 -1.43359c0 -0.180664 -1.12207 -1.79395 -1.12207 -1.79395
-c-1.95215 0 -4.37598 -0.47168 -6.46094 -0.47168h-1.30176h-0.96875l-0.651367 0.47168c-1.2959 0.333008 -4.34961 3.22754 -5.00098 3.22754c-2.11133 0 -6.62012 2.26562 -9.22363 2.26562c-1.61426 0 -2.89453 1.45996 -7.09082 1.45996
-c-1.45605 0 -4.03809 -1.93164 -4.03809 -1.93164c-0.179688 -0.333008 -2.60352 -4.37109 -3.4082 -5.49316l-2.24414 -1.14844c-4.53516 -3.38672 -14.7217 -9.84766 -15.3467 -12.584c-0.337891 -0.96875 -3.57227 -10.5049 -3.57227 -14.542
-c0 -1.77344 -2.57715 -6.9541 -2.57715 -9.04395c0 -0.333984 -1.77246 -2.91602 -1.77246 -2.91602c-1.46094 -1.61426 -6.95898 -6.14941 -7.1123 -6.14941c-0.317383 0 -5.49805 -5.00098 -6.46191 -5.00098c-0.158203 0 -1.61914 -0.962891 -2.9209 -1.93164
-l-2.08496 -12.9229c-4.14355 -17.1836 -7.14941 -34.2871 -4.37695 -52.0312l0.338867 -3.5459c0.3125 0.651367 0.963867 0 1.28125 0c1.14258 -1.30176 1.95215 -3.2334 2.91602 -4.19629c0.492188 -0.650391 1.12109 -0.96875 1.61328 -1.77246
-c0.3125 -0.492188 0.492188 -0.990234 0.3125 -1.61426c-0.3125 -0.651367 -1.27539 -1.14844 -1.76758 -1.14844c-1.12207 -0.470703 -2.42383 -1.12207 -3.7041 -1.12207c-1.30176 -0.15332 -2.60352 -0.15332 -4.21777 0.15918
-c-1.28027 0 -2.58301 0.492188 -3.5459 1.30176c-0.962891 0.629883 -1.61426 1.93164 -1.61426 3.22754l0.651367 3.23438l-1.95312 1.61328l-1.12207 4.51465l1.77344 7.4248l0.333008 5.49805v6.14941zM391.749 -80.498v0v4.19727l-0.629883 4.35449l-1.14258 1.61426
-c-0.651367 -0.650391 -1.61426 -1.28027 -1.77246 -1.45996l-0.651367 -2.73633l-0.804688 -5.33984l-0.650391 -3.5459l0.333008 -4.03711l0.317383 -2.11133l0.804688 -2.08594l0.80957 -1.61328l1.77246 -2.27051l-0.158203 -0.645508l-0.651367 -0.317383
-l0.338867 -0.492188l-0.650391 -0.317383l-1.62012 -0.492188l-2.91504 0.492188l-1.12207 0.475586l-0.3125 1.94727l-0.338867 1.28125l-0.804688 0.338867l-0.650391 0.311523v1.95312l0.179688 3.5459l0.470703 4.19629v3.56641l-0.158203 3.70508l-1.12207 3.22754
-c-0.492188 0.338867 -1.30176 1.14355 -1.30176 1.14355s-0.3125 1.12207 -0.3125 1.43945c0 0.984375 1.12207 1.61426 1.12207 2.10645c0 0.49707 -1.12207 0.967773 -1.12207 0.967773c0 0.333984 -0.650391 0.962891 -0.650391 1.61426
-c0 0.804688 0.650391 1.30176 0.650391 1.61426c0 0.650391 -0.989258 0.962891 -0.989258 1.45996v0.804688c-0.962891 0 -1.77246 -0.804688 -2.42383 -0.804688c-0.624023 0 -0.624023 0.804688 -0.962891 0.804688c-0.651367 0 -0.80957 -0.804688 -0.80957 -0.804688
-c-0.651367 0 -1.45605 -0.49707 -1.61426 -0.49707c-0.470703 0 -1.12207 1.14844 -1.46094 1.14844c-0.470703 0 -0.624023 -1.14844 -0.962891 -1.14844c-0.3125 -0.15332 -1.28027 0 -1.28027 0c-0.333984 0 -0.984375 0.989258 -1.30176 0.989258
-c-0.3125 0 -0.3125 -1.30176 -0.492188 -1.30176h-1.27539h-1.30176c-0.15918 0 -0.651367 0.80957 -0.96875 0.80957c-0.3125 0 -0.962891 -0.80957 -1.61426 -0.80957h-0.962891c-0.15918 0 -0.80957 0.651367 -1.14844 0.80957c0 0 -0.3125 0.651367 -0.470703 0.651367
-c-0.804688 0 -1.30176 -0.651367 -1.61426 -0.651367h-1.61426c-0.651367 0 -0.962891 1.30273 -1.46094 1.30273c-0.492188 0 -0.962891 -0.498047 -1.12207 -0.498047c-0.179688 0 -0.650391 -0.15332 -1.14258 -0.15332c-0.3125 0 -0.80957 0.651367 -0.80957 0.651367
-s-0.804688 0.624023 -1.12207 0l-1.95312 -1.7998l0.651367 -1.77246l-0.651367 -1.92676l-1.61328 -0.492188v-1.45996l-0.963867 -2.42383l-1.45996 0.492188l0.49707 -1.61426l-1.61914 -1.46094h-1.45508v-3.69922l-0.317383 -5.83691l0.650391 -3.69922
-l1.12207 -2.91602l1.30176 -2.08984l-0.179688 -0.492188l-0.3125 -0.3125l0.15918 -0.650391l-0.47168 -0.498047l-2.26953 -0.311523l-1.77344 0.311523l-1.30176 0.80957l-0.492188 2.42383l-0.3125 1.77344l-1.12109 1.30176l-0.180664 2.42383
-c0 2.91602 1.30176 12.6104 -2.89453 8.23438l-0.962891 -3.3877v-5.49805l0.804688 -4.03809l0.80957 -3.2334l1.61426 -2.73535l-0.804688 -0.80957l0.15332 -0.492188l-0.962891 -0.317383l-2.7627 -0.154297l-1.61426 0.3125l-0.3125 0.651367v1.12109
-l-0.337891 1.30273l-0.80957 0.80957l-0.804688 0.311523v7.27148l-0.629883 4.37695l-0.179688 2.73535v1.93164c-0.15332 -0.158203 -2.42383 1.79395 -2.42383 1.94727v1.46094c0 0.80957 0.650391 1.43457 0.650391 1.61426c0 0 0.80957 0.317383 0.80957 0.967773
-c0 0.3125 -0.470703 0.963867 -0.470703 1.61426c0 0.15918 0.3125 0.963867 0.3125 0.963867c0.158203 0 1.30176 0.49707 1.30176 0.650391c0 0.651367 0.15918 2.08496 0.15918 2.73633c0 0.158203 1.77246 0.650391 1.77246 1.14844
-c0 0 -0.49707 0.803711 -0.49707 1.12109v1.61426c0 0.3125 1.14746 1.12207 1.14746 1.93164c0 0.492188 -0.650391 1.14355 -0.650391 1.61426v1.14258c0 0.3125 0.3125 1.12207 0.3125 1.93164c0 0.492188 -0.80957 0.492188 -0.80957 0.804688
-c0 0.338867 -0.47168 0.96875 -0.47168 1.77246c0 0 0.96875 0.990234 0.96875 1.30176c0 0.318359 -1.30176 0.651367 -1.30176 0.651367s-0.80957 1.12207 -0.80957 1.61914v2.26562c0 0.803711 -0.629883 1.43359 -1.12207 3.85742l-1.61426 0.651367l-0.3125 1.14258
-l0.154297 1.43945l-0.333984 0.333008l0.179688 1.28125l0.625 1.61426l-0.15332 1.30176l0.15332 1.45996l1.61914 1.45605l0.174805 1.61914l0.96875 1.43359l1.45508 0.80957l0.317383 1.30273l0.962891 0.645508l2.7627 1.12109
-c0 0.338867 0.470703 1.77344 0.470703 1.77344s1.30176 1.30176 1.45508 1.30176c0.318359 0 1.93164 0.317383 1.93164 0.317383c0.492188 0 1.61426 1.61426 1.95312 1.61426h1.45508s0.629883 -0.470703 0.96875 -0.470703c0.470703 0 0.804688 0.80957 1.12207 0.80957
-h1.30176h1.77246s0.492188 -0.338867 0.651367 -0.338867c0.311523 0 0.962891 0.650391 1.61328 0.650391h1.27539c0.810547 0 1.30273 -1.61328 1.95312 -1.61328c0.651367 0 1.61914 1.30176 1.61914 1.30176s0.804688 0.311523 0.963867 0.311523h1.61328
-c0.498047 0 0.80957 -0.962891 1.12207 -0.962891c0.338867 0 0.80957 0.962891 0.990234 0.962891h2.57715c0.317383 0 1.12109 -0.962891 1.77246 -0.962891c0.80957 0 0.80957 1.45508 1.77246 1.45508h1.14844c0.47168 0 1.12207 -0.492188 1.43457 -0.492188
-c0.650391 0 1.61426 0.338867 2.42383 0.338867c0.650391 0 0.984375 -0.989258 1.79395 -0.989258c0.962891 0 1.12207 1.14258 1.43359 1.14258c0.180664 0 1.14844 0.317383 1.61914 0.317383c0.651367 0 1.45605 -0.317383 2.26562 -0.317383
-c0.338867 0 0.962891 0.80957 1.30176 0.80957c0.3125 0 1.12207 0.15918 2.08496 0.15918c0.338867 0 0.989258 -0.651367 1.95312 -0.651367c0.158203 0 0.80957 0.492188 0.962891 0.492188c0.967773 0 1.77246 0.3125 2.42383 0.3125
-c0.650391 0 1.93164 -0.804688 2.74121 -0.804688c0.333008 0 0.492188 1.30273 0.650391 1.30273c0.15332 0.15332 1.14355 0.645508 1.45605 0.645508c0.158203 0 1.77246 0.317383 1.77246 0.317383c0.338867 0 1.30176 1.92578 1.30176 1.92578l0.962891 0.338867
-v1.46094c0 0.3125 0.96875 1.12207 1.12207 1.43359c0 0.180664 1.30176 1.30176 1.30176 1.30176v1.46094c0 0.651367 0.651367 1.45508 0.651367 1.45508c0.317383 0 1.93164 0.47168 1.93164 1.12207c0 0 -0.318359 0.962891 -0.318359 1.46094
-c0 0.470703 0.476562 1.61426 0.476562 1.61426c0.492188 0.158203 1.79395 0.80957 2.10645 0.80957c0 0 0.15918 1.27539 0.15918 1.61328c0 0.15918 0.962891 1.12207 0.962891 1.12207l1.61426 1.14355s1.61914 1.93164 2.11133 1.93164
-c0.80957 0 2.26465 -0.317383 2.91602 0c0.311523 0.158203 1.12109 1.61426 1.12109 1.61426c0.651367 0 1.30176 0.491211 1.61426 0.491211c0.96875 0 2.11133 -0.491211 2.74121 -0.491211c0.333984 0 0.651367 0.650391 0.804688 0.650391h1.79883
-c0.47168 0 1.43457 -1.14258 2.08496 -1.14258c0 0 0.651367 0.492188 1.14355 0.492188c0.470703 0 1.28027 -0.492188 1.61426 -0.492188c0 0 0.80957 -0.810547 0.80957 -1.12207c0 -0.317383 0.3125 -1.46094 0.3125 -1.46094l1.12109 -0.15332l0.338867 -1.12207
-v-2.42383c0 -0.338867 0.47168 -0.989258 0.47168 -1.30176c0 -0.650391 -0.810547 -0.96875 -1.12207 -1.77246l4.68848 -7.92188l0.962891 -2.42383v-0.492188l-0.311523 -1.12207l-1.14355 -1.61426l-0.470703 -0.651367h-0.338867
-c-2.24414 -0.291016 -2.53516 -1.42285 -5.00098 -0.470703h-3.72559c-0.80957 -1.30176 -1.43359 -2.11133 -1.43359 -2.9209c0 0 -0.338867 -1.30176 -0.338867 -1.61426c0 -0.650391 -0.651367 -1.93164 -0.651367 -1.93164
-c0 -1.2959 -1.61426 -2.75684 -1.61426 -3.87891l-0.80957 -1.30176c-0.158203 -0.3125 -1.28027 -0.470703 -1.28027 -0.651367v-2.08496c0 -0.337891 -0.962891 -1.30176 -0.962891 -1.30176c0 -0.650391 -0.338867 -1.12207 -0.338867 -1.45996
-c0 -0.629883 -0.3125 -1.61426 -0.3125 -1.77344c0 0 -1.45996 -0.470703 -1.45996 -0.650391v-2.42383c0 -0.625 -1.12207 -1.61426 -1.12207 -1.92676l-0.645508 -0.967773c0 -0.651367 -0.338867 -2.10645 -0.338867 -2.10645s-0.80957 -0.651367 -0.80957 -0.96875
-c0 -0.15332 -0.47168 -1.92578 -0.47168 -2.41797l-1.14258 -1.30176c0 -0.318359 -0.470703 -1.62012 -0.470703 -1.93164c0 -0.15918 -0.963867 -1.12207 -0.963867 -1.12207s-1.61914 -0.338867 -1.61914 -0.651367c0 -0.962891 -0.333008 -2.42383 -1.30176 -3.22754
-l0.15918 -2.7627l-0.963867 -1.12207l0.963867 -0.80957l-0.47168 -2.26465l-1.45996 -0.651367l1.28027 -1.28027l-0.3125 -1.61426c-1.9043 -6.57812 -3.91016 -16.5166 -0.967773 -23.2686l1.61914 -2.57715l-0.49707 -0.651367l0.158203 -0.49707l-0.158203 -0.3125
-l-1.61426 -0.3125l-2.08496 0.625l-0.80957 0.49707l-0.651367 2.26465l-1.30176 2.89551v2.60352l0.338867 2.57715z" />
-    <glyph glyph-name="uniF18E" unicode="&#xf18e;" 
-d="M56 -216.506c-15.9336 0.00195312 -28.8652 12.9365 -28.8652 28.8701c0 4.26855 1.73145 10.7334 3.86523 14.4307l200 346.415c4.60645 7.93848 15.793 14.3818 24.9707 14.3818c9.2207 0 20.4336 -6.48828 25.0293 -14.4814l200 -346.315
-c2.13379 -3.69727 3.86523 -10.1621 3.86523 -14.4307c0 -15.9336 -12.9316 -28.8682 -28.8652 -28.8701h-400z" />
-    <glyph glyph-name="uniF13D" unicode="&#xf13d;" 
-d="M380.285 43.5791c0 -3.18555 -4.10645 -6.03418 -8.88184 -6.03418c-4.78125 0 -8.7998 2.92969 -8.7998 6.45312c0 3.51855 4.01855 6.37207 8.7998 6.36621c4.77539 0.00585938 8.88184 -2.42871 8.88184 -5.44531c-1.92773 0.669922 -3.76855 1.5957 -5.61426 2.00879
-c-0.838867 0.168945 -2.00977 0.588867 -3.01758 0.588867c-1.67676 0 -3.60449 -0.419922 -5.19434 -0.669922c-0.168945 0 0.500977 -0.500977 0.750977 -0.751953c1.50879 0.0820312 2.93555 0.419922 4.35645 0.419922c1.17676 0 2.5166 -0.506836 3.52344 -0.675781
-c1.1709 -0.25 2.7666 -0.838867 3.76855 -1.4209l1.42676 -0.838867v0zM371.403 36.2871c5.77832 0 10.5596 3.51855 10.5596 7.71094c0 4.19336 -4.77637 7.62402 -10.5596 7.62402s-10.5596 -3.43555 -10.5596 -7.62402c0 -4.19238 4.77637 -7.71094 10.5596 -7.71094v0z
-M375.842 101.238c0.505859 -2.17871 8.12988 -11.0605 9.88867 -12.4873c2.68555 -2.34668 8.46875 -10.2266 10.6465 -12.4053c2.84863 -2.67871 5.02637 -7.12305 6.61719 -10.3086c1.42676 -2.84766 2.85352 -9.55176 3.52246 -13.9082
-c-2.84766 -1.42676 -6.20215 -2.17871 -8.21191 -4.19336c-1.92773 -1.84082 -3.85547 -5.44531 -4.02441 -7.79297c-0.168945 -3.43555 -0.25 -8.12988 0.250977 -11.3154c0.418945 -3.18066 2.43359 -6.36621 4.6123 -8.88184
-c0.583008 -0.669922 2.76074 -0.838867 3.85547 -0.838867c0.332031 0 1.42188 -1.08984 1.75879 -0.920898l1.08984 0.669922c-0.920898 0.500977 -2.5166 1.50879 -2.93555 1.92773c-1.58984 1.59082 -3.9375 4.02441 -4.85742 6.20312
-c-1.00781 2.59766 -1.67773 5.94629 -1.67773 8.96875c0 2.25977 0.500977 5.1084 1.33984 6.9541c1.00781 2.34766 3.18555 4.52539 5.86523 5.27734c1.00684 0.336914 2.68457 1.08887 4.10547 1.67676c2.7666 -2.17773 4.94531 -4.1875 5.70215 -5.19531
-c1.00195 -1.33984 4.27441 -5.69629 4.44336 -8.38086c0.250977 -3.9375 0.500977 -9.13184 -1.50781 -12.4053c-1.76465 -2.84766 -6.87305 -4.77539 -9.72656 -6.70312l-5.7832 -7.71094c-3.85059 0.925781 -7.62402 2.93457 -11.2295 3.18555
-c-3.34863 0.168945 -10.3896 0.25 -12.9873 -1.50879c-2.67969 -1.84082 -5.70215 -3.76855 -8.5498 -5.69629c1.00781 -0.168945 1.08887 -0.255859 2.17773 -0.418945c2.93555 1.84082 5.86523 3.9375 8.2998 5.19531c1.75879 0.837891 4.35645 0.919922 6.70312 0.919922
-c2.59766 0 5.11426 -0.337891 7.54297 -1.08887c1.00684 -0.250977 4.44336 -1.59082 5.03125 -2.93555l-11.3154 -6.28418c-0.838867 -1.92773 -0.757812 -4.94434 -2.34766 -5.69629c-2.26562 -1.00781 -6.45312 2.42871 -8.04883 0.583008l-2.84766 -3.34961h-7.46094
-c-1.92188 0 -4.51953 -0.418945 -6.28418 -1.17578l-4.01855 -1.75879l-8.04883 4.02441v-4.60742c-3.85547 3.68652 -7.29199 8.04297 -11.4795 10.8916c-3.85547 2.51562 -9.21973 3.68652 -13.1572 5.70117l-4.6123 2.34766
-c0.337891 -0.506836 0.669922 -1.3457 0.756836 -1.5957c1.42188 -2.09668 5.94727 -3.01758 7.875 -3.9375c2.34668 -1.17676 5.95117 -1.92773 7.87988 -3.77344c0.500977 -0.419922 -2.17871 -3.59961 -2.17871 -4.94531l0.587891 -2.34668l-2.51562 -4.68945
-l-3.51758 -0.167969l-2.26562 -5.5332c-3.60547 -1.50879 -7.12305 0.756836 -7.20508 2.01465l-0.837891 9.13281l-1.42773 1.50879c0.751953 -4.77637 0 -10.3096 2.26074 -14.334c2.09668 -3.93652 8.46777 -5.27637 10.8965 -9.21875
-c1.42676 -2.17871 -0.25 -6.03418 0.669922 -8.63184c0.669922 -1.67188 4.02441 -2.34668 4.52539 -4.01855c0.756836 -2.7666 -1.75879 -6.87305 0 -9.21973c2.26562 -3.0166 7.46094 -3.35449 10.8965 -5.2002c2.26562 -1.25293 4.52539 -3.43652 6.87305 -5.19531
-c-1.75879 -0.751953 -3.51855 -1.50879 -5.19531 -2.26074c5.94629 -5.36328 12.5684 -10.3896 17.8506 -16.0918c2.51074 -2.59766 3.85547 -8.04297 6.28418 -9.80762c2.26562 -1.75879 7.54297 -2.76074 11.2295 -3.17969
-c4.27441 -0.506836 9.21973 -0.838867 13.4121 -0.838867c2.42969 0 7.62402 -1.50879 8.79492 -3.94336c2.01562 -4.01855 2.26562 -5.61426 2.26562 -7.79199c0 -1.00781 -0.0820312 -2.00977 -0.669922 -3.76855c-0.587891 2.76074 -1.42676 5.02637 -2.93457 6.86719
-c-0.751953 -0.500977 -1.50879 -1.59082 -2.26074 -1.67188c-1.00684 -0.0878906 -2.68457 0.919922 -3.43555 0.500977c-0.920898 -0.419922 -0.838867 -2.84863 -1.75977 -3.43652c-1.25781 -0.669922 -3.52246 -1.1709 -4.6123 -0.583008
-c-2.93457 1.50293 -4.60645 6.03418 -7.45996 7.53711c-2.59766 1.25781 -6.28516 0.756836 -9.13281 1.09473c-2.84766 0.414062 -6.45312 1.58984 -7.87402 2.34668c-1.3457 -0.925781 -0.0878906 -0.168945 -1.42676 -1.17578
-c3.43555 -2.00977 5.52734 -3.10449 8.71289 -4.02441c2.59766 -0.838867 6.87207 -1.1709 8.63086 -3.43652c1.17676 -1.58984 0.588867 -6.20215 -0.582031 -6.87207c-1.08984 -0.500977 -3.60547 1.08887 -6.29004 3.18555
-c1.51367 -3.18555 3.27246 -5.7832 3.35449 -7.79297c0.0820312 -2.34668 -0.250977 -3.9375 -1.17578 -6.28418c-1.1709 -1.92773 -3.51855 -4.19336 -5.44629 -5.36426c1.25781 3.34961 1.50879 4.52539 1.50879 6.45312
-c-0.583008 2.67969 -0.500977 4.35645 -2.17871 6.87305c0 -2.68457 -0.168945 -5.95215 -1.75879 -7.54297c-0.337891 -0.418945 -3.18555 -0.925781 -3.43652 1.75977c-0.168945 2.67871 -0.669922 9.21875 -0.669922 13.8262
-c0 1.33984 -0.925781 4.02441 -2.26465 5.19531c-1.33984 1.17578 -3.51855 1.17578 -5.19531 1.76465c-2.67969 -1.3457 -5.44629 -3.18652 -8.04297 -4.02441c-1.84668 -0.506836 -4.19336 -0.756836 -6.28516 -1.17676
-c-2.43359 -0.25 -5.36328 -2.00977 -7.45996 -1.1709c-4.86328 1.92773 -8.04883 7.54297 -12.6562 9.80762c-1.67676 0.833984 -4.60645 -0.674805 -6.28418 0c-3.43652 1.42188 -6.53516 4.60742 -9.7207 6.86719c-1.00684 -0.500977 -2.01465 -1.08887 -2.93457 -1.67188
-c-1.75977 2.0918 -3.43652 4.1875 -5.11426 6.28418c-0.837891 -0.925781 -1.58984 -1.8457 -2.34668 -2.84766c-2.51074 2.92969 -5.02637 5.7832 -7.46094 8.63086c-1.00195 -0.587891 -1.92188 -1.17578 -2.84766 -1.76367
-c-0.587891 2.35254 -1.1709 4.6123 -1.75879 6.87793c-1.92773 0.833008 -3.85547 1.58984 -5.69629 2.3418c-0.255859 1.92773 -0.419922 3.85547 -0.588867 5.7832c-1.92773 -0.920898 -3.85547 -1.92773 -5.70117 -2.92969
-c-1.33984 4.60645 -2.92969 9.30078 -4.01855 13.8262c-0.925781 3.60547 -2.01562 7.87988 -2.84863 11.4795c-0.756836 3.10449 -2.68457 6.62207 -2.93555 9.80762c-0.336914 5.02637 -0.587891 10.6465 0 15.5039c0.669922 6.12109 4.60742 12.0674 4.60742 18.3516
-v15.5098l-4.01855 -1.17676c0.332031 -3.85547 1.50781 -7.96094 1.1709 -11.4795c-0.500977 -5.61914 -3.85547 -11.0654 -4.60742 -16.5928c-0.838867 -5.87012 1.33984 -12.9062 -1.08887 -18.3574c-1.42676 -3.0166 -6.45898 -4.01855 -9.80762 -4.60645
-c-5.70215 -1.00781 -11.9043 -1.17676 -17.7695 -1.17676c-5.19531 0 -10.5596 1.50879 -15.5039 1.17676c-2.42871 -0.168945 -4.43848 -3.52344 -6.87207 -3.52344c-4.8584 0 -9.7207 2.09668 -14.3281 2.93457c-7.54785 1.50879 -15.7598 2.93555 -22.9639 5.19531
-c-3.26758 1.08984 -6.45312 4.27539 -9.21973 6.28418c-4.02441 2.93555 -9.13281 6.12109 -12.5742 9.80762c-4.43848 4.77637 -8.71289 10.9785 -12.0674 16.5938c-2.26074 3.85547 -3.51855 8.46777 -5.78418 13.2432c-0.25 -2.93457 0.675781 -6.79004 1.25879 -9.1377
-c1.34473 -5.69629 5.19531 -10.9785 8.71777 -15.416c4.86328 -6.20312 12.0684 -11.9863 17.6006 -17.8516c0.669922 -0.669922 -0.837891 -4.86328 -0.587891 -6.45312c-2.09668 0.250977 -4.19336 1.00195 -6.28418 1.1709
-c0.919922 -1.33984 1.84082 -2.67969 2.84766 -4.02441c-2.34668 1.00781 -4.60645 1.92773 -6.87207 2.85352c0.919922 -1.67676 1.84082 -3.43652 2.84766 -5.2002c-1.92773 0.418945 -3.85547 0.84375 -5.69531 1.17578
-c0.500977 -3.0166 1.67676 -6.12109 1.67676 -9.21973c-0.00585938 -2.42871 -1.17578 -5.11328 -1.67676 -7.45996c-0.506836 -2.0918 -0.920898 -5.19531 -2.34766 -6.87305c-1.50879 -1.92773 -4.6123 -3.09863 -6.87207 -4.01855
-c-2.59766 -1.17676 -5.7832 -2.93555 -8.63184 -3.44141c-4.27441 -0.669922 -9.05078 -1.75879 -13.1562 -1.1709c-3.27344 0.418945 -6.79102 3.0166 -9.13867 5.19531c-3.35449 3.27246 -6.45312 7.87988 -8.54395 12.0723
-c-1.26367 2.67969 -2.93555 6.28516 -2.35254 9.13281c1.42676 6.78516 6.45312 12.9062 9.21973 19.0215c1.8457 4.27539 4.86328 8.71875 5.61426 13.2441c0.419922 2.59766 -1.67188 5.95215 -1.08887 8.5498c0.505859 2.59766 4.78125 4.10645 5.11328 6.87207
-c0.250977 1.92871 -2.85352 3.6875 -2.84766 5.78418c0 3.68652 2.25977 7.37305 2.84766 10.8906c0.587891 3.18652 1.50879 7.04199 1.75879 10.3965c0.419922 4.52539 0.337891 9.9707 1.67773 14.3271c1.17578 3.68652 4.69434 7.12305 6.95898 10.3955
-c1.84082 2.76172 4.60742 5.69629 6.28516 8.63184c2.76562 4.60742 4.77539 10.5596 8.04297 14.916c1.33984 1.67676 4.19336 2.7666 6.28418 3.43555c2.09668 0.751953 5.36426 0.669922 7.46094 1.75977c3.68652 1.92773 6.79004 5.95215 10.3086 8.04883
-c3.85547 2.17773 8.7998 3.51758 12.6553 5.77734c1.1709 0.756836 1.50879 3.60547 2.84863 4.02441c3.09863 0.919922 7.12305 0.250977 10.3086 0.587891c4.69434 0.500977 9.63867 3.26758 14.4141 2.84863c3.9375 -0.419922 7.04199 -5.27734 10.8975 -6.28418
-c5.52734 -1.42676 12.1494 -0.588867 17.7637 -1.75977c8.46777 -1.67676 16.7617 -5.53223 25.2295 -7.45996c4.52539 -1.00781 9.88379 -1.1709 14.3281 -2.34766l10.3955 -2.84766l-5.19531 -4.02441h4.01953l-6.28516 -7.46094l5.69629 1.67773l-7.45508 -10.3086
-l6.28418 1.08887l-5.11328 -11.4795l8.5498 3.43652l-6.28418 -9.7207l8.63184 2.84766l-4.02441 -13.8262l8.04297 8.04297v-12.6553l5.11328 4.02441l1.75879 -9.7207l8.04883 9.7207l1.08984 -9.7207l10.9775 14.3271l-2.93457 -19.5225l5.19531 9.21973
-l2.26465 -13.2441c3.43652 5.70117 7.62402 11.9863 8.04883 18.4395l1.1709 17.1807l-3.43555 -17.7695l-4.10645 -8.04297l-1.75879 7.37305l-0.675781 6.37207l-0.0810547 6.19727l-4.44434 -0.250977l-7.28613 -9.88965l-1.25781 9.30762l-8.7998 -11.1475
-l2.67871 10.8906l-7.45508 -4.52539l6.19727 11.6484l-9.80176 -4.77539l6.9541 9.21973l-9.80273 -2.84863l8.63184 8.63184l-8.04883 -2.84863c5.11328 4.77637 9.63867 10.8916 15.5039 14.3281c3.43555 2.09668 8.38086 2.93457 12.6553 2.93457
-c4.19336 0 8.46875 -2.84766 12.5742 -3.51758c2.00977 -0.337891 4.94531 -1.50879 6.87305 -0.505859c1.25195 0.756836 1.25195 3.68652 0.582031 5.11328c-1.00195 1.84082 -3.76855 3.26758 -5.69629 4.02441c-3.51758 1.25781 -7.79199 2.67871 -11.4844 2.92969
-c-4.18848 0.337891 -9.13281 0.838867 -13.1572 -0.669922l4.19336 -1.25293c-5.95215 -1.76367 -11.7354 -4.02441 -15.6729 -7.87988l-6.79102 -6.70312l-6.87207 -0.337891l7.20996 8.96875l-4.19336 0.0820312l4.86328 4.44336l-3.68652 0.751953
-c0.919922 1.50879 2.51562 3.77344 3.35449 4.86328c1.25195 1.8457 3.18066 4.10547 4.93945 4.6123l4.69434 1.50293c3.27246 1.00684 5.03125 1.67676 8.04785 2.09668l-3.60449 2.17773c3.68652 0.168945 9.63867 -2.34668 12.9883 -2.67871
-c4.36133 -0.506836 9.1377 -1.33984 13.4121 -1.5957c3.34961 -0.250977 10.9785 -3.68652 13.7393 -6.28418c2.43457 -2.26074 1.76465 -6.36621 1.76465 -10.1406c0 -3.60449 -2.26562 -11.7354 -4.69434 -12.4053c-3.26758 -1.00195 -6.45312 -2.76074 -9.80762 -4.27441
-c-1.00195 -0.500977 -3.17969 -1.4209 -4.60645 -3.51758c2.25977 -0.500977 4.52539 -0.0820312 5.36328 0.25c4.10645 1.42676 7.62402 2.7666 11.5674 4.19336c3.34863 1.1709 5.02637 6.61621 5.69531 10.6406c0.838867 5.03223 1.67773 10.9785 -0.418945 15.335
-c-1.1709 2.5166 -5.61426 5.5332 -7.87402 6.62207c-2.5166 1.08887 -6.70898 2.34766 -10.0586 3.01758c-3.85547 0.756836 -3.85547 0.756836 -13.832 1.92773c4.02441 4.44336 12.1543 7.04102 16.5986 11.5664c2.34668 2.51562 3.9375 7.62891 5.11328 10.8096
-c0.500977 1.50879 0.332031 6.70898 1.75879 8.04883l3.9375 -2.26562l3.0166 2.93555c1.84668 -2.17871 2.93555 -2.67969 4.94531 -4.3623l0.587891 3.35449l5.61426 -6.03418l0.332031 4.61328l6.20312 -6.62207l1.08887 2.34668l5.19531 -9.21973l-0.0820312 5.7832
-l4.27539 -8.88672c0.418945 -2.42871 2.59766 -6.78516 3.09863 -8.88184v0zM368.468 -84.4766c2.17871 1.25293 6.45312 1.00195 8.80078 1.92285c2.34668 0.925781 4.52539 3.18555 6.9541 3.85547c1.8457 0.506836 4.44336 0.756836 6.45312 0.337891
-c2.26562 -0.500977 4.86328 -2.26562 6.45312 -3.9375c1.50781 -1.5957 2.34668 -4.02441 2.7666 -6.79102c-1.59082 1.42676 -3.43652 3.77441 -5.27734 4.27539c-1.08887 0.332031 -2.26562 -1.00781 -3.18555 -1.17676
-c-1.92773 -0.500977 -4.3623 -2.34668 -6.37109 -2.59766c-2.93066 -0.332031 -5.94727 -0.418945 -9.05078 -0.418945c-1.25879 0 -3.85645 -0.500977 -4.44434 -0.163086c-0.919922 0.500977 -2.59766 2.84766 -3.09863 4.69336v0zM358.159 -102.834
-c1.33984 0 3.26758 -0.669922 4.10645 -1.75879c1.00684 -1.25781 1.92773 -3.68652 1.34473 -5.36426c-0.505859 -1.4209 -3.27246 -1.42676 -4.53027 -2.26465c-1.00195 -0.669922 -2.92969 -1.92773 -2.76172 -3.09863
-c0.500977 -2.7666 1.00195 -6.7041 -0.255859 -8.46289c-1.00195 0.418945 -0.833008 3.76855 -1.4209 4.77539c-0.419922 0.920898 -1.67773 1.84668 -2.68457 1.84668c-1.42188 -0.00488281 -2.51074 -1.5957 -4.35645 -2.18359
-c-0.500977 1.76465 -0.920898 3.18555 -0.751953 4.52539c0.250977 2.09668 1.75879 4.35645 2.59766 6.28906c0.414062 0.920898 1.1709 2.42969 2.00977 2.93066c1.92773 1.17578 4.44336 2.68457 6.70312 2.76562v0zM261.03 -35.3672v0
-c0.919922 -1.25781 0.833008 -3.9375 1.33984 -5.28223c0.500977 -1.58984 1.75879 -4.60742 2.09082 -6.61621c0.337891 -1.76465 1.76465 -4.3623 1.8457 -6.37207c0.0878906 -1.08887 0.337891 -3.0166 0.337891 -4.60645
-c0 -0.756836 -0.168945 -1.76465 -0.756836 -2.34766c-3.0166 -3.0166 -5.86523 -1.50781 -8.63184 -2.43359c-1.92773 -0.669922 -3.85547 -2.67969 -5.70117 -3.76855c-1.84082 -1.00781 -4.10645 -2.7666 -6.19727 -3.43652
-c-1.34473 -0.418945 -3.35449 -0.756836 -4.86328 -0.505859c-1.08887 0.255859 -0.168945 4.11133 -1.42676 4.11133c-1.00195 0 -3.51758 -1.08984 -5.52734 -3.18555c-2.01465 -2.09668 -1.92773 -4.3623 -3.35449 -7.96191
-c-1.00195 1.1709 -0.587891 5.52734 -0.587891 5.86523c0 5.28223 1.76465 5.7832 2.43457 6.62207c1.50781 1.67676 3.43555 2.50977 4.52539 3.18555c2.17773 1.4209 3.17969 1.1709 5.52734 2.3418c0.925781 0.505859 3.35449 2.01465 3.85547 3.0166
-c1.25781 2.09668 2.68457 3.69238 3.94238 7.04102c-3.18555 -1.92773 -4.10645 -5.69629 -7.04102 -6.53516c-1.25781 -0.336914 -2.00977 2.34766 -2.59766 3.43652c-1.00781 1.67773 -2.68457 4.52539 -2.7666 5.69629
-c-0.0820312 0.669922 -1.67773 2.7666 -2.09668 5.28223c1.50879 1.08887 3.0166 1.50879 3.43652 1.50879c4.27441 0 9.63867 0.500977 13.4121 1.00684c2.51074 0.250977 6.28516 3.01758 8.80078 3.9375zM107.489 -69.8926v0
-c2.26465 -1.51367 4.52539 -3.02246 7.20996 -3.44141c3.51758 -0.583008 9.21973 0 12.4053 0.919922l0.0810547 -6.19727c0 -0.919922 -1.75879 -2.17773 -1.8457 -3.10352c-0.163086 -2.0918 0.587891 -4.77637 -0.0820312 -6.78613
-c-0.418945 -1.25781 -2.59668 -1.8457 -3.43555 -2.76562c-0.920898 -1.00781 -2.59766 -2.5166 -2.67969 -3.9375c-0.0869141 -1.67773 1.08887 -3.52344 1.67773 -5.36426l-4.19336 3.34961c-1.33984 1.00684 -2.26562 3.35449 -2.26562 4.94434
-c0 2.01465 1.34473 4.27441 1.67773 6.29004c0.25 1.33984 1.75879 3.76855 1.33887 5.10742c-1.4209 -0.837891 -1.58984 -2.09082 -1.67188 -2.59766c-0.668945 -2.42871 -1.50781 -5.61426 -2.84766 -7.87402c-0.756836 -1.42676 -3.27246 -2.18359 -4.44336 -3.27246
-c-0.925781 -0.920898 -1.67773 -2.84863 -2.59766 -3.85645c-1.50879 -1.6709 -1.84668 -4.35645 -1.5957 -6.9541c-1.50879 1.67773 -2.7666 3.43652 -2.76074 6.87305c-0.00585938 0.756836 -2.18359 1.00684 -2.18359 1.75879
-c0 1.50879 -0.0820312 4.10645 0.418945 5.19531c1.25781 2.34668 2.7666 3.85547 4.27441 5.87012c1.17676 1.59082 2.42871 2.67969 3.51855 4.35645c0.0869141 0.0820312 1.67676 2.42871 1.42676 2.34766c-1.42676 -0.419922 -2.84863 -2.68457 -3.6875 -3.60547
-c-1.00684 -1.00195 -2.68457 -2.93457 -3.51758 -4.10547c-1.08887 -1.67773 -2.34668 -3.60547 -3.85547 -4.94531c-1.34473 -1.08887 -1.75879 -4.19336 -2.17773 -6.45312c-0.337891 1.50879 -0.757812 4.69434 -0.588867 6.79102c0 0 -1.08887 2.42871 -1.08887 2.76074
-c0 1.92773 0.0820312 2.34766 0.669922 3.85547c0.838867 2.34766 3.0166 4.86328 4.44336 6.62207c1.92285 2.17871 5.94727 6.03418 8.37598 8.21777z" />
-    <glyph glyph-name="uniF11C" unicode="&#xf11c;" 
-d="M280 -18.25h106v-16h-106v-124h-46v124h-108v16h108v100.577l-30.4336 -6.2959l52.9453 82.2188l52.9453 -82.2188l-29.457 6.09375v-100.375z" />
-    <glyph glyph-name="uniF198" unicode="&#xf198;" 
-d="M299.43 -60.5791l0.0683594 -65.6992h44.2227l-0.0458984 89.5771c0 16.4443 -13.7109 29.9492 -30.2363 29.9492h-56.1475c-5.91016 0 -10.7354 4.82422 -10.7354 10.7354l0.0234375 36.0195l23.6475 -7.05273c3.27441 -0.914062 5.69824 -1.29297 8.21387 0.418945
-c3.61328 2.45312 4.55469 7.39844 2.09668 11.0059l-55.4004 81.9033l-55.4863 -81.9033c-2.45898 -3.60645 -1.5166 -8.55273 2.08496 -11.0049c2.41211 -1.64258 4.91602 -1.34473 7.88574 -0.585938l24.0449 7.21973l0.0341797 -59.8809v0.121094
-c0 -16.4395 13.2686 -29.9434 29.7188 -30.0703l55.251 -0.015625c5.91113 0 10.7588 -4.8252 10.7588 -10.7354z" />
-    <glyph glyph-name="uniF116" unicode="&#xf116;" 
-d="M256 256c141.312 0 256 -114.688 256 -256c0 -141.312 -114.688 -256 -256 -256c-141.312 0 -256 114.688 -256 256c0 141.312 114.688 256 256 256z" />
-    <glyph glyph-name="uniF191" unicode="&#xf191;" 
-d="M240.583 -15.082l3.16797 1.83105c1.69824 0.967773 3.76074 0.800781 5.26465 -0.270508c-0.181641 1.83691 0.696289 3.70117 2.39453 4.67676l3.1748 1.83496c2.31152 1.33008 5.29102 0.537109 6.61523 -1.7666l8.0918 -14.002
-c1.33496 -2.31055 0.529297 -5.28809 -1.78223 -6.625l-3.16309 -1.82227c-1.69824 -0.976562 -3.75977 -0.814453 -5.26367 0.263672c0.182617 -1.83691 -0.696289 -3.70312 -2.3877 -4.69141l-3.1748 -1.81934c-2.31934 -1.33496 -5.28418 -0.541992 -6.62793 1.76172
-l-8.08398 13.9961c-1.33008 2.3125 -0.529297 5.29102 1.77441 6.63281zM292.112 14.6543l3.17578 1.83887c1.70605 0.966797 3.75293 0.799805 5.25879 -0.27832c-0.175781 1.83691 0.710938 3.70117 2.40137 4.68262l3.1748 1.83691
-c2.30469 1.3291 5.29102 0.536133 6.62793 -1.77441l8.08398 -13.9961c1.32324 -2.30371 0.537109 -5.28906 -1.77441 -6.625l-3.17578 -1.8252c-1.69922 -0.980469 -3.76172 -0.814453 -5.25098 0.263672c0.167969 -1.83691 -0.710938 -3.7002 -2.40137 -4.68164
-l-3.17578 -1.82422c-2.31152 -1.33691 -5.29102 -0.550781 -6.62109 1.75977l-8.09766 13.9941c-1.32324 2.30762 -0.529297 5.29395 1.77441 6.62891zM185.253 70.7891l74.1514 42.7852l49.251 -85.2646l-74.1514 -42.793l-49.251 85.2725zM139.899 -65.1748v12.5957
-h241.918v-12.5957h-241.918zM370.733 109.107v0c2.17285 -0.166992 3.80859 -2.06152 3.64648 -4.23926l-3.51562 -49.2295l-44.4346 21.5596c-1.95605 0.953125 -2.79102 3.30469 -1.83789 5.28125c0.625977 1.30859 1.77734 1.81055 3.25195 2.22168l12.1982 2.86621
-l-6.72559 11.7344c-26.5039 45.9502 -85.6162 61.7832 -131.562 35.2617c-28.5752 -16.4883 -45.3584 -45.5693 -47.7002 -76.2393v-68.877h-21.6748v69.0508h0.237305c2.45117 38.0127 23.0771 74.2002 58.4307 94.5986c56.1572 32.4092 128.401 13.0635 160.817 -43.0928
-l6.74121 -11.7266l8.47363 8.96484c1.16797 1.20312 2.12305 1.96973 3.6543 1.86523z" />
-    <glyph glyph-name="uniF115" unicode="&#xf115;" 
-d="M231 248.75c6.88281 0.691406 18.083 1.25293 25 1.25293s18.1172 -0.561523 25 -1.25293v-497.5c-6.88281 -0.691406 -18.083 -1.25293 -25 -1.25293s-18.1172 0.561523 -25 1.25293v497.5z" />
-    <glyph glyph-name="uniF113" unicode="&#xf113;" 
-d="M315.979 89.2158c0 -11.9541 -9.66309 -21.6455 -21.584 -21.6455s-21.584 9.69141 -21.584 21.6455c0 11.9551 9.66309 21.6465 21.584 21.6465s21.584 -9.69141 21.584 -21.6465v0zM173.642 -111.496l-4.16699 95.1865l-26.3906 -21.3584
-c-5.76953 0.458984 -11.8682 0.463867 -14.9951 4.56543l41.2314 40.3965c9.36035 -2.62793 18.2129 -1.85156 26.5449 2.39941l29.6309 -6.03613l14.3525 -29.7168c-4.44238 -0.844727 -6.80469 -5.00391 -16.668 2.78516l-7.40723 14.8584l-12.0381 0.464844
-l10.6494 -42.7178l27.7793 -3.25098c7.3916 -0.905273 7.85156 -7.53516 9.72266 -13.001l-44.9102 -0.463867l-7.87109 11.1436l-12.9639 -3.71484l0.463867 -42.7178c-3.87891 -6.04785 -8.41504 -7.48242 -12.9639 -8.82227v0zM214.9 22.75
-c5.82031 1.82324 64.749 38.3047 64.749 38.3047c13.7559 -7.7168 25.3408 -2.06543 36.7393 4.74219l36.7393 -11.6738l19.2793 -37.9404c-7.56445 -4.00977 -14.9668 -2.99219 -22.1895 3.64844l-9.82129 19.7002l-20.3701 6.93066l5.09277 -47.4248l16.3691 -39.7646
-l36.7393 -16.0508c9.13281 -10.293 5.71582 -15.4199 4.72852 -22.2539l-54.1992 21.8887c-2.83984 0.532227 -3.88574 3.76172 -5.45703 6.20215l-17.0967 40.1289l-18.1875 -89.0137l-20.3701 -10.9443l17.46 101.417l-4.72852 48.1543l-45.4697 -25.1719
-c-11.7393 -1.82324 -15.9795 3.54688 -20.0068 9.12109v0zM199.322 32.5234c0 -10.5322 -8.5127 -19.0693 -19.0146 -19.0693c-10.501 0 -19.0146 8.53711 -19.0146 19.0693c0 10.5312 8.51367 19.0693 19.0146 19.0693c10.502 0 19.0146 -8.53809 19.0146 -19.0693v0z" />
-    <glyph glyph-name="uniF19E" unicode="&#xf19e;" 
-d="M199.695 34.5557c0.0351562 -3.49121 0.0419922 -208.006 0.0419922 -212.551h-73.6807c0 4.54492 -0.00683594 208.619 -0.0380859 211.817c-0.224609 22.5938 0.575195 36.6621 4.59961 54.0361c12.7607 55.0947 53.4492 90.1367 122.562 90.1367
-c73.1455 0 115.368 -36.6426 128.228 -94.6943c3.80957 -17.1992 4.60938 -30.708 4.60742 -54.7119v-97.6191l-34.0605 -38.3965l-39.6191 38.3965v98.1748c0.000976562 18.2959 -0.564453 27.834 -2.86523 38.2217c-5.62695 25.4033 -18.9297 36.9482 -56.29 36.9482
-c-33.5625 0 -45.502 -10.2822 -50.7822 -33.082c-2.32812 -10.0479 -2.87305 -19.6318 -2.70312 -36.6768z" />
-    <glyph glyph-name="uniF12D" unicode="&#xf12d;" 
-d="M235.156 178l-165.156 -167.17l115.228 -114.846l143.954 -0.108398l-24.3779 16.8018l-6.36328 9.14551l-9.00684 4.99902l-2.75879 5l-4.45215 4.4668l-3.07227 8.29492l-7.42188 7.76074l1.37891 12.6523l-9.43652 22.6523l1.37891 13.7148l-8.69238 13.082
-l3.18164 18.1855l-1.27539 14.1445l4.02832 6.37891l-2.22559 17.2266l6.78613 27.7559l-10.3916 23.8174l0.852539 12.9736l-3.92578 7.87012l-0.634766 4.78809l-3.9209 4.78711l-1.37891 16.0566l-12.2969 9.56934zM291.129 142.074l16.1143 2.7666l9.32715 -7.87012
-l0.320312 -10.3164l3.28516 -23.7139l-6.25488 -10.5283l-6.88965 -5.4248l-21.0986 1.38379l-7.41699 12.6523c-1.4873 7.2334 -2.64941 13.8281 -1.37891 24.3564l8.7959 8.71973l5.19629 7.97461zM292.279 37.0723l-7.42188 -5.10352l2.33398 -0.958008
-l-1.80273 -2.12402l2.9707 -8.61719l5.93359 -3.19141l7.8457 3.61719l2.4375 8.82812l-4.875 7.12402l-7.42188 0.424805zM337.626 78.5215l14.7354 -0.211914l11.3418 -15.7402l-3.07227 -19.4609l-8.16113 -18.1807h-11.0264l-11.5537 10.1035l-1.27637 6.69434
-l-2.4375 1.80762l1.4873 18.6113l9.96289 16.377zM307.541 -8.52148l8.48047 -2.6582l6.89062 0.424805l7.3125 -7.65723l6.15137 -3.4043l1.05957 -13.8232l-3.60547 -10.9531l-7.7373 -5h-17.1729l-10.7061 11.3828l-4.24121 4.67871l-0.851562 14.3574l3.81641 8.82324
-l4.34863 1.38379l2.33496 1.91113l3.91992 0.53418zM375.128 -4.06641l10.2832 0.321289l5.83105 11.9062l11.7656 4.04199l19.9316 -4.99512l6.88965 -12.4453l8.9043 -3.82812l4.02832 -18.6113l-33.3906 -19.1387l-5.30469 -9.35742l-22.3633 -1.0625l-14.209 34.9834
-l7.63379 18.1855zM327.131 -72.9287l11.3428 2.2334l9.0127 -3.93262l5.29883 -1.38379l4.24023 -3.8291l0.532227 -7.54883l-3.39355 -4.99902l0.84668 -2.12988l-3.07227 -2.76172l-11.1309 -0.636719l-7.74219 2.33594l-6.56934 3.08789l-4.45215 10.207l5.08691 9.35742
-z" />
-    <glyph glyph-name="uniF175" unicode="&#xf175;" 
-d="M205.504 114.393h57.1934v-85.793h85.7988v-57.1934h-85.7988v-85.7988h-57.1934v228.785v0z" />
-    <glyph glyph-name="uniF17C" unicode="&#xf17c;" 
-d="M179.523 15.0938l74.9844 55.8125l75.9688 -57.8125l-43.9922 2v-44.083l-62.7656 -1.91699v48.0713z" />
-    <glyph glyph-name="uniF155" unicode="&#xf155;" 
-d="M216.002 173.147v0h80v-346.248h-80v346.248zM218.947 170.028v0v-171.282h74.1738v171.282h-74.1738zM225.534 67.2598c0.785156 -0.0771484 1.5459 -0.305664 2.23535 -0.668945c0.765625 -0.402344 1.45215 -0.973633 1.98828 -1.66211
-c0.208984 -0.345703 0.514648 -0.592773 0.897461 -0.724609c0.515625 -0.173828 1.07031 -0.0957031 1.50977 0.228516l3.65039 0.745117c0.535156 -0.289062 1.16504 -0.380859 1.75781 -0.289062c0.498047 0.0771484 0.881836 0.441406 1.33789 0.611328
-c1.41504 0.519531 3.00098 -0.113281 4.39551 0.441406c0.650391 0.24707 1.33691 0.499023 1.83594 1.0127c0.286133 0.287109 0.419922 0.689453 0.688477 1.01367c0.227539 0.287109 0.458008 0.554688 0.745117 0.782227
-c0.458008 0.362305 1.08789 0.420898 1.56543 0.785156c0.822266 0.629883 1.43359 1.50977 1.68262 2.52246c0.155273 0.629883 0.34375 1.2998 0.078125 1.91113c-0.305664 0.74707 -1.14941 0.954102 -1.79883 1.33789
-c-0.554688 0.326172 -1.16504 0.458008 -1.71777 0.782227c-0.499023 0.289062 -0.898438 0.726562 -1.41504 0.994141c-0.517578 0.268555 -1.0127 0.592773 -1.60547 0.629883c-0.726562 0.0585938 -1.33984 -0.37793 -2.00488 -0.591797
-c-0.709961 -0.228516 -1.39648 -0.494141 -2.08496 -0.743164c-0.726562 -0.250977 -1.58691 -0.230469 -2.19824 -0.726562c-0.726562 -0.591797 -0.688477 -1.68262 -1.20312 -2.43066c-1.76074 -2.52148 -5.35254 -2.30762 -7.74023 -3.97168
-c-0.898438 -0.611328 -1.76074 -1.28125 -2.59961 -1.98926v0zM264.004 6.25879l-2.59961 3.85938c-0.707031 0.573242 -1.44922 1.09082 -2.25293 1.53027c-0.916992 0.498047 -1.87305 0.876953 -2.86719 1.16602c-0.726562 0.514648 -1.58496 0.820312 -2.48242 0.878906
-c-0.878906 0.0585938 -1.74219 -0.133789 -2.52246 -0.536133c-1.56738 0.726562 -3.30957 1.01367 -5.02539 0.841797c-1.1875 -0.115234 -2.33398 -0.439453 -3.38477 -0.975586l-1.32129 -0.115234l-0.857422 -2.80859
-c0.669922 -0.994141 1.4707 -1.91113 2.3877 -2.69629c1.54883 -1.35352 3.38477 -2.3291 5.37109 -2.88672c1.39355 -0.551758 2.88672 -0.798828 4.37695 -0.723633c1.62402 0.0751953 3.21094 0.536133 4.62305 1.33984
-c0.975586 0.838867 2.16016 1.37305 3.44238 1.52734c1.0498 0.131836 2.11816 -0.0185547 3.1123 -0.401367v0zM227.266 135.193h0.000976562l0.536133 3.32617l0.686523 3.26758c0.229492 0.364258 0.286133 0.822266 0.135742 1.22461
-c-0.155273 0.399414 -0.459961 0.705078 -0.862305 0.84082l-1.25977 1.31934c-0.0380859 0.305664 0.0566406 0.591797 0.249023 0.820312c0.249023 0.267578 0.611328 0.401367 0.957031 0.324219c1.43066 0.0585938 2.86523 0.345703 4.20215 0.878906
-c1.10938 0.439453 2.16016 1.03223 3.11719 1.7793l5.0625 4.49219c0.287109 0.342773 0.726562 0.551758 1.18457 0.551758c0.479492 0 0.916992 -0.208984 1.22266 -0.573242c-0.09375 -0.591797 0 -1.20312 0.287109 -1.73926
-c0.289062 -0.554688 0.745117 -0.975586 1.2998 -1.24121c0.249023 -0.171875 0.439453 -0.382812 0.573242 -0.651367c0.15332 -0.304688 0.231445 -0.629883 0.211914 -0.974609c0.115234 -0.611328 0.324219 -1.2041 0.629883 -1.7373
-c0.479492 -0.860352 1.16602 -1.58691 1.98828 -2.12305c0.130859 -0.267578 0.130859 -0.591797 -0.0195312 -0.838867c-0.155273 -0.267578 -0.459961 -0.422852 -0.765625 -0.422852l-4.33691 -2.08008c-0.136719 -0.517578 -0.517578 -0.957031 -1.03418 -1.13086
-c-0.380859 -0.131836 -0.801758 -0.113281 -1.16406 0.0400391c-0.631836 -0.0595703 -1.24316 -0.209961 -1.79785 -0.496094c-0.533203 -0.267578 -1.0293 -0.632812 -1.43164 -1.07227c-1.20312 -1.70117 -2.94531 -2.96191 -4.93359 -3.57227
-c-1.52832 -0.477539 -3.1709 -0.554688 -4.73926 -0.211914zM288.269 118.559v0c0.344727 0.265625 0.859375 0.168945 1.09082 -0.211914c0.225586 -0.361328 0.0742188 -0.859375 -0.305664 -1.0498l-1.4541 -4.58887l-0.423828 -4.41406
-c-0.226562 -0.420898 -0.591797 -0.745117 -1.04688 -0.916992c-0.461914 -0.173828 -0.938477 -0.173828 -1.39648 0c-0.726562 0.267578 -1.47266 0.460938 -2.2168 0.592773c-1.03223 0.192383 -2.10059 0.249023 -3.15527 0.192383
-c-0.743164 -0.192383 -1.54492 -0.155273 -2.25293 0.150391c-0.803711 0.327148 -1.43457 0.9375 -1.81445 1.72266l-5.02832 1.46973c-0.726562 0.0400391 -1.39355 0.364258 -1.87305 0.897461c-0.591797 0.688477 -0.800781 1.62402 -0.53418 2.50391l0.305664 2.92383
-l-0.0771484 2.25586c-0.0957031 0.383789 0 0.804688 0.228516 1.12891c0.323242 0.436523 0.881836 0.648438 1.41309 0.533203c0.880859 -0.286133 1.74316 -0.571289 2.59961 -0.897461c1.83691 -0.686523 3.57715 -1.60547 5.41113 -2.31348
-c0.668945 -0.265625 1.33594 -0.570312 2.04297 -0.745117c1.87305 -0.476562 3.80371 -0.170898 5.69531 0.115234c0.708008 0.115234 1.41309 0.249023 2.10156 0.439453zM268.513 164.655c0.189453 0.208984 0.266602 0.514648 0.189453 0.801758
-c-0.131836 0.516602 -0.705078 0.803711 -1.20312 0.575195c-1.9502 0 -3.89941 -0.0585938 -5.84863 -0.173828c-2.96191 -0.170898 -5.92383 -0.476562 -8.86914 -0.916016c-1.43164 -0.456055 -2.73145 -1.2627 -3.76367 -2.36719
-c-0.956055 -1.01562 -1.64258 -2.25684 -2.02539 -3.59473l1.14648 -6.8252c0.669922 -0.552734 1.56836 -0.764648 2.40723 -0.571289c0.825195 0.171875 1.50879 0.707031 1.91113 1.43164c3.13281 2.04492 6.64941 3.44141 10.3408 4.11035
-c0.650391 0.113281 1.31641 0.209961 1.96875 0.287109c0.418945 0.342773 0.801758 0.743164 1.08789 1.2041c0.499023 0.800781 0.763672 1.73633 0.727539 2.67676c0.0361328 0.417969 0.151367 0.838867 0.305664 1.24121
-c0.325195 0.838867 0.897461 1.58691 1.62402 2.12012h0.000976562zM290.692 151.831c-1.25879 0.9375 -2.44336 1.96973 -3.5166 3.11426c-0.688477 0.728516 -1.31641 1.49219 -1.91113 2.29395c-0.302734 0.19043 -0.62793 0.345703 -0.972656 0.498047
-c-1.03223 0.439453 -2.13965 0.667969 -3.24902 0.667969l-3.80273 2.1416c-0.768555 0.417969 -1.74023 0.286133 -2.35156 -0.34375c-0.399414 -0.402344 -0.592773 -0.9375 -0.573242 -1.49219c-0.305664 -0.745117 -0.744141 -1.43164 -1.2998 -2.00488
-c-0.724609 -0.748047 -1.60547 -1.28125 -2.59961 -1.58691c-0.724609 0.342773 -1.50879 -0.364258 -1.22266 -1.10938c0.192383 -0.514648 0.803711 -0.743164 1.28027 -0.458008c1.9502 0.0205078 3.89941 -0.285156 5.75293 -0.879883
-c1.7793 -0.573242 3.47852 -1.41504 5.00879 -2.48438c0.686523 -0.726562 1.62207 -1.18457 2.61621 -1.31836c0.575195 -0.078125 1.14844 -0.0400391 1.70215 0.115234l5.13867 2.84668v0zM245.462 122.891v0l-5.34961 -3.67188l-1.35645 -1.75586l-0.766602 -0.230469
-l-1.91113 0.651367l-1.31836 -0.364258l-2.23535 0.783203l-4.18359 -0.171875c-0.517578 0 -1.01367 0.19043 -1.39648 0.536133c-0.420898 0.382812 -0.669922 0.916992 -0.688477 1.49219c-0.0380859 0.648438 -0.134766 1.29492 -0.287109 1.94629
-c-0.152344 0.669922 -0.382812 1.31934 -0.648438 1.94922c-0.115234 0.518555 -0.0595703 1.07129 0.150391 1.55078c0.210938 0.456055 0.556641 0.858398 0.994141 1.10742c1.22461 1.07129 2.7334 1.75781 4.33887 2.00684
-c1.3584 0.209961 2.7334 0.078125 4.0332 -0.364258l3.22949 -0.115234l1.93066 -1.62402l2.13867 0.0966797c0.401367 -0.34375 0.785156 -0.708008 1.10938 -1.12598c0.364258 -0.479492 0.688477 -0.975586 0.9375 -1.53223zM274.231 143.166
-c-0.936523 0.402344 -1.87305 0.858398 -2.75098 1.37793c-0.975586 0.552734 -1.89258 1.18457 -2.77344 1.87109c-1.24219 0.514648 -2.56055 0.878906 -3.90137 1.06934c-2.46191 0.364258 -4.98535 0.173828 -7.37305 -0.554688
-c-0.344727 0.0771484 -0.728516 0.0214844 -1.03418 -0.150391c-0.361328 -0.211914 -0.629883 -0.557617 -0.705078 -0.975586c0.400391 -0.115234 0.726562 -0.402344 0.895508 -0.763672c0.268555 -0.536133 0.193359 -1.14746 -0.19043 -1.60547l0.898438 -2.84863
-l1.47168 -0.689453l0.0185547 -1.37207l1.0127 -0.726562c0.288086 -0.195312 0.594727 -0.327148 0.918945 -0.404297c0.211914 -0.0566406 0.44043 -0.0966797 0.668945 -0.0966797c0.724609 0.442383 1.52637 0.766602 2.37109 0.957031
-c0.708008 0.155273 1.41309 0.211914 2.13965 0.173828c0.532227 0.0966797 1.07129 0.228516 1.58691 0.402344c0.401367 0.130859 0.78418 0.286133 1.16504 0.474609c0.726562 0.536133 1.45312 1.11133 2.1416 1.68262
-c0.551758 0.458984 1.10742 0.938477 1.6416 1.43164l1.79785 0.74707v0zM241.649 108.16v0c-0.876953 -1.22266 -1.39453 -2.65918 -1.50684 -4.14648c-0.117188 -1.54883 0.571289 -3.00195 0.954102 -4.47363c0.4375 -1.70117 1.43164 -3.24805 1.56836 -5.02539
-c0.0771484 -1.12793 0.420898 -2.37109 -0.249023 -3.38477c-0.726562 -1.10742 -2.18164 -1.12598 -3.3457 -1.52734c-2.67676 -0.916992 -5.75391 0.496094 -8.31348 -0.860352c-0.860352 -0.458984 -1.41504 -1.43457 -2.38867 -1.70215
-c-0.631836 -0.168945 -1.37695 -0.533203 -1.94824 -0.0566406c-0.364258 0.305664 -0.441406 0.785156 -0.519531 1.22266c-0.0917969 0.611328 0.233398 1.18652 0.308594 1.79785c0.114258 1.01367 0.0742188 2.04297 0.114258 3.07715
-c0.0185547 0.477539 0.0185547 0.935547 0.0751953 1.41504c0.0947266 0.897461 0.496094 1.7373 0.592773 2.63477c0.0585938 0.648438 0.0771484 1.2998 0.0205078 1.94824c-0.117188 1.22754 -0.9375 2.25684 -1.0332 3.48145
-c-0.078125 0.878906 -0.362305 1.83398 0.170898 2.59766c0.458984 0.669922 1.28125 0.900391 2.02637 1.09082c0.766602 0.19043 1.54883 -0.0585938 2.31348 0.0185547c2.06348 0.171875 3.86133 1.43164 5.88574 1.81445
-c1.43359 0.268555 2.88574 0.935547 4.33887 0.479492c0.324219 -0.0966797 0.629883 -0.230469 0.935547 -0.401367zM250.661 131.555v0c-0.420898 0.573242 -0.380859 1.3584 0.0771484 1.89258c0.554688 0.648438 1.5498 0.707031 2.17969 0.133789l2.12012 -1.47168
-c0.479492 -0.249023 0.975586 -0.439453 1.49219 -0.554688c0.418945 -0.0957031 0.838867 -0.152344 1.25977 -0.152344l6.30762 -0.632812c0.382812 0.0400391 0.785156 -0.0166016 1.14551 -0.150391c0.380859 -0.135742 0.74707 -0.364258 1.0332 -0.669922
-l0.591797 -2.29395c0.192383 -0.456055 0.192383 -0.975586 0 -1.43164c-0.230469 -0.556641 -0.705078 -0.994141 -1.28027 -1.14941l-2.73242 -1.14453c-0.478516 -0.611328 -0.916992 -1.24121 -1.33984 -1.89258
-c-0.515625 -0.803711 -0.972656 -1.62402 -1.39453 -2.48242l-2.44629 -2.77344c-1.0498 -1.0127 -2.61816 -1.24316 -3.91797 -0.591797c-1.60449 0.803711 -2.31055 2.71484 -1.62402 4.37695l0.765625 3.89648c0.188477 0.651367 0.24707 1.35938 0.15332 2.0293
-c-0.0966797 0.666992 -0.34375 1.31836 -0.707031 1.88965zM283.243 135.193l-5.1416 -1.75781l-2.3877 -2.25488c-0.671875 -0.573242 -1.14844 -1.31836 -1.37891 -2.17871c-0.209961 -0.801758 -0.170898 -1.62402 0.0791016 -2.40723l0.246094 -2.00684
-c0.269531 -0.496094 0.688477 -0.916992 1.18359 -1.18457c0.727539 -0.402344 1.56934 -0.479492 2.35449 -0.249023l2.42578 1.10645c0.916992 -0.324219 1.8916 -0.420898 2.8457 -0.246094c0.632812 0.114258 1.26367 0.324219 1.81641 0.648438l4.22461 3.32617
-c0.363281 0.648438 0.537109 1.39551 0.537109 2.1416c0 0.745117 -0.211914 1.44922 -0.573242 2.10059l-1.37891 2.06445c-0.19043 0.305664 -0.458008 0.535156 -0.782227 0.707031c-0.287109 0.15332 -0.633789 0.230469 -0.956055 0.230469l-1.28223 -0.498047
-l-1.83203 0.458008v0zM286.189 26.708c-0.878906 0.171875 -1.7041 0.574219 -2.37109 1.16406c-0.418945 0.364258 -0.763672 0.803711 -1.03027 1.2998c-0.614258 0.576172 -1.37695 0.975586 -2.18066 1.18652c-0.821289 0.209961 -1.67969 0.228516 -2.52539 0.0380859
-c-1.12598 -0.420898 -2.30762 -0.686523 -3.5166 -0.801758c-1.12598 -0.117188 -2.27148 -0.0957031 -3.39844 0.0566406c-0.401367 0.345703 -0.994141 0.324219 -1.37695 -0.0195312c-0.25 -0.208984 -0.365234 -0.533203 -0.34668 -0.860352
-c0.366211 -0.516602 0.592773 -1.10938 0.671875 -1.7207c0.0966797 -0.838867 -0.0791016 -1.70117 -0.53418 -2.42578c1.83398 -1.94824 4.39551 -3.02051 7.06934 -3.00098c2.16113 0.0185547 4.2627 0.782227 5.94531 2.13867
-c0.401367 0.632812 0.895508 1.18457 1.45312 1.66406c0.628906 0.53418 1.35352 0.975586 2.14062 1.28125v0zM290.002 72.9795v0l-3.00391 -5.83008c-0.305664 -0.650391 -0.611328 -1.28027 -0.953125 -1.91113c-0.457031 -0.860352 -1.10742 -1.60547 -1.50977 -2.50293
-c-0.572266 -1.31836 -0.897461 -2.71289 -0.935547 -4.14844l-0.209961 -3.03906l-1.98828 1.875c-0.78418 0.19043 -1.52832 0.4375 -2.27441 0.724609c-0.767578 0.305664 -1.49023 0.669922 -2.19727 1.07129c-0.611328 0.611328 -1.07324 1.35645 -1.31934 2.17676
-c-0.305664 1.01562 -0.286133 2.08496 0.0361328 3.0791l2.2959 3.01855c0.609375 1.03418 1.14648 2.10547 1.56738 3.23145c0.550781 1.46973 0.936523 3.00195 1.12598 4.56738c0.0966797 0.820312 0.341797 1.62402 0.724609 2.34863
-c0.229492 0.459961 0.385742 0.994141 0.842773 1.26172c0.457031 0.289062 1.01367 0.193359 1.53125 0.155273c0.800781 -0.0400391 1.56641 -0.327148 2.26953 -0.708008c0.688477 -0.364258 1.28027 -0.878906 1.81934 -1.43359
-c0.53418 -0.573242 0.821289 -1.33691 1.33887 -1.91016c0.322266 -0.34375 0.668945 -0.667969 1.02734 -0.973633zM264.699 54.0898v0l-0.916992 -2.6582l-1.47559 -6.55371l-0.338867 -1.94824l-0.307617 -1.3584l0.0185547 -1.66406
-c-0.0361328 -0.724609 -0.363281 -1.41309 -0.916992 -1.87109c-0.630859 -0.536133 -1.49023 -0.729492 -2.29395 -0.536133c-0.743164 -0.0566406 -1.49023 0.0400391 -2.19824 0.230469c-1.0293 0.287109 -1.9834 0.84082 -2.76855 1.58594
-c-0.651367 0.44043 -1.16602 1.03223 -1.50977 1.74023c-0.422852 0.878906 -0.518555 1.8916 -0.286133 2.8457l0.897461 5.3125c0.53418 1.39648 0.954102 2.82812 1.28125 4.30176c0.324219 1.47168 0.533203 2.96387 0.648438 4.45215
-c0.935547 0.860352 2.13965 1.37695 3.40137 1.43359c1.60547 0.078125 3.19141 -0.554688 4.2793 -1.73926zM283.243 35.373v0c-0.305664 0.419922 -0.688477 0.785156 -1.14844 1.03125c-0.708008 0.383789 -1.54785 0.19043 -2.31348 0.345703
-c-1.7373 0.364258 -3.41992 0.954102 -5.00586 1.75586c-1.45117 0.519531 -2.56152 1.74219 -2.90332 3.25098c-0.0771484 0.324219 -0.117188 0.648438 -0.117188 0.973633c0.34668 0.229492 0.632812 0.535156 0.803711 0.918945
-c0.34375 0.763672 0.211914 1.67969 -0.361328 2.3125c0.09375 0.493164 0.286133 0.994141 0.551758 1.43164c1.39355 2.37109 4.43555 1.25977 6.74902 1.37695c0.591797 0.0380859 1.18164 0.0380859 1.77344 0.0185547
-c0.461914 -0.267578 0.862305 -0.591797 1.24414 -0.956055c0.688477 -0.688477 1.24219 -1.50879 1.58691 -2.40723c0.305664 -0.782227 0.379883 -1.60547 0.458984 -2.42773c0.113281 -1.03223 0.438477 -2.12012 0 -3.11426
-c-0.115234 -0.265625 -0.269531 -0.53418 -0.44043 -0.766602zM259.498 107.467v0l1.43652 -1.66504c0.341797 -0.342773 0.611328 -0.760742 0.762695 -1.22168c0.134766 -0.420898 0.154297 -0.839844 0.154297 -1.28125
-c0.0195312 -1.12598 -0.34668 -2.2168 -0.861328 -3.21094c-1.14551 -2.23535 -3.3252 -3.66699 -5.73438 -4.26172c-0.994141 -0.249023 -2.04297 -0.611328 -3.03711 -0.227539c-0.878906 0.324219 -1.39551 1.16309 -1.98828 1.85156
-c-0.707031 0.823242 -1.58691 1.58691 -1.77441 2.69629c-0.118164 0.726562 0.4375 1.43164 0.227539 2.13965c-0.0771484 0.286133 -0.286133 0.498047 -0.364258 0.785156c-0.133789 0.476562 -0.172852 0.994141 0.0195312 1.4707
-c0.171875 0.402344 0.514648 0.689453 0.841797 0.975586c1.375 1.20117 3.34473 0.28418 4.9873 0.589844c1.81445 0.327148 3.5918 0.785156 5.33008 1.35938zM287.922 5.3916l0.380859 1.83301c0.230469 0.688477 0.0761719 1.45508 -0.421875 1.98926
-c-0.495117 0.553711 -1.25879 0.765625 -1.98828 0.573242l-6.99219 1.16797c-0.517578 0.378906 -1.14746 0.592773 -1.79492 0.571289c-0.363281 -0.0195312 -0.708008 -0.0966797 -1.03516 -0.227539c-0.149414 -0.34375 -0.264648 -0.708008 -0.361328 -1.07227
-c-0.0771484 -0.34375 -0.131836 -0.708008 -0.154297 -1.06934c-0.381836 -0.0400391 -0.707031 -0.287109 -0.859375 -0.632812c-0.15332 -0.324219 -0.134766 -0.688477 0.0390625 -0.994141l0.363281 -1.60547l0.151367 -1.69727l2.25781 -0.84375l4.37402 -0.267578
-c0.897461 0.500977 1.83594 0.9375 2.78906 1.2998c1.05469 0.401367 2.14258 0.728516 3.25195 0.975586v0zM276.655 168.122c0.481445 -0.459961 0.820312 -1.03125 0.994141 -1.66406c0.115234 -0.417969 0.172852 -0.858398 0.134766 -1.2998
-c0.707031 -1.37305 1.91309 -2.44434 3.36426 -2.97852c1.2207 -0.459961 2.54199 -0.519531 3.80371 -0.173828l4.58691 -0.0585938c0.287109 -0.227539 0.708008 -0.208984 0.994141 0.0214844c0.305664 0.265625 0.380859 0.707031 0.149414 1.05078l-0.760742 2.82715
-c0.400391 0.402344 0.359375 1.09082 -0.0957031 1.43457c-0.402344 0.304688 -0.956055 0.249023 -1.2998 -0.115234c-1.5498 -0.726562 -3.23047 -1.10938 -4.9541 -1.12598c-2.46191 -0.0380859 -4.86914 0.705078 -6.91699 2.08203v0zM260.367 -67.0488v0h-11.6572
-v-40.2559h11.6572v40.2559zM260.714 -4.14062v0h-11.6582v-40.2588h11.6582v40.2588zM260.714 -129.954v0h-11.6582v-40.2607h11.6582v40.2607zM258.286 70.5527v0l-1.06934 2.5625c0.211914 0.838867 0.305664 1.7207 0.249023 2.5791
-c-0.0771484 1.12598 -0.669922 2.14062 -0.900391 3.25098c-0.305664 1.39062 -0.476562 2.80859 -0.573242 4.22363c-0.0185547 0.399414 -0.207031 0.801758 -0.0566406 1.18457c0.171875 0.4375 0.592773 0.648438 0.954102 0.897461
-c1.03418 0.667969 2.33398 0.171875 3.47949 0.362305c1.09082 0.171875 2.10449 0.651367 3.21094 0.726562c0.438477 0.0205078 0.900391 0.09375 1.33594 0c0.575195 -0.133789 1.20605 -0.287109 1.51172 -0.823242c0.286133 -0.495117 0.154297 -1.08789 0 -1.60547
-c-0.151367 -0.476562 -0.553711 -0.782227 -0.782227 -1.22168c-0.668945 -1.2998 -0.591797 -2.77148 -0.78418 -4.18652c-0.209961 -1.68262 0.0380859 -3.40137 -0.325195 -5.06348c-0.151367 -0.669922 -0.115234 -1.43555 -0.553711 -1.98828
-c-0.305664 -0.382812 -0.726562 -0.611328 -1.14551 -0.820312c-0.668945 -0.305664 -1.41504 -0.324219 -2.14258 -0.345703c-0.801758 -0.0185547 -1.62305 0.0585938 -2.4082 0.267578zM258.632 23.5889c-0.207031 0.362305 -0.305664 0.783203 -0.265625 1.2041
-c0.0585938 0.516602 0.552734 0.860352 0.726562 1.33691c0.227539 0.669922 0.651367 1.45312 0.171875 2.10156c-0.345703 0.460938 -0.938477 0.499023 -1.45117 0.632812c-1.18652 -0.133789 -2.38965 -0.193359 -3.59375 -0.211914
-c-1.41504 -0.0195312 -2.84863 0.0585938 -4.26367 0.192383c-0.342773 -0.0957031 -0.648438 -0.324219 -0.858398 -0.613281c-0.210938 -0.286133 -0.304688 -0.648438 -0.286133 -1.01074l0.476562 -0.956055l-0.324219 -2.02637l1.2041 -1.2998l1.33691 -1.06934
-c1.31934 -0.651367 2.82812 -0.745117 4.22363 -0.308594c0.458984 0.155273 0.876953 0.345703 1.2793 0.592773c-0.0380859 0.382812 0.117188 0.765625 0.382812 1.05273c0.324219 0.324219 0.783203 0.479492 1.24121 0.382812v0zM283.587 98.1084v0
-c-0.379883 -0.229492 -0.685547 -0.535156 -0.933594 -0.897461c-0.498047 -0.74707 -0.630859 -1.68262 -0.363281 -2.54297c0.305664 -0.898438 0.53418 -1.83594 0.685547 -2.77148c0.0966797 -0.592773 0.305664 -1.2041 0.209961 -1.81445
-c-0.0917969 -0.536133 -0.436523 -0.995117 -0.628906 -1.49023c-0.151367 -0.420898 -0.401367 -0.84375 -0.4375 -1.30078c-0.0605469 -0.629883 0.550781 -1.16797 0.455078 -1.79785c-0.0966797 -0.723633 -0.611328 -1.28125 -1.14355 -1.75781
-c-0.630859 -0.552734 -1.41504 -0.897461 -2.23633 -0.954102c-1.51367 -0.115234 -2.82812 0.820312 -3.6123 2.08203c-0.287109 0.458984 -0.459961 0.994141 -0.592773 1.51172c-0.118164 0.417969 -0.172852 0.838867 -0.228516 1.25977
-c-0.307617 2.02637 -0.269531 4.1084 0.0556641 6.13477c0.305664 1.96777 0.192383 4.24316 1.77832 5.67676c1.41309 1.28125 3.34375 2.02344 5.19922 1.37695c0.611328 -0.210938 1.16504 -0.556641 1.6416 -0.994141zM224.841 156.685
-c-0.0380859 -0.573242 0 -1.14746 0.133789 -1.7207s0.344727 -1.14746 0.629883 -1.66211c1.08789 -1.37695 2.86719 -2.02539 4.58594 -1.68262c1.2998 0.249023 2.42773 1.03418 3.11621 2.16016c0.536133 0.648438 0.841797 1.46875 0.841797 2.33203
-c0 0.554688 -0.136719 1.12598 -0.382812 1.62402c-0.878906 1.18457 -1.39648 2.59961 -1.45312 4.07129c-0.0371094 1.05078 0.133789 2.12012 0.536133 3.0957c0.708008 1.33691 -0.0585938 2.98047 -1.54883 3.30664
-c-0.726562 0.150391 -1.49023 -0.0585938 -2.04492 -0.573242c-0.208984 -0.479492 -0.458008 -0.916992 -0.783203 -1.31836c-0.249023 -0.325195 -0.536133 -0.611328 -0.860352 -0.879883c-0.458008 -0.133789 -0.860352 -0.382812 -1.18457 -0.725586
-c-0.420898 -0.460938 -0.669922 -1.07227 -0.669922 -1.70215l-0.916992 -6.3252h0.000976562zM224.841 7.12402l1.8916 0.878906c0.592773 -0.362305 1.31836 -0.477539 1.98828 -0.287109c0.34375 0.0966797 0.686523 0.268555 0.955078 0.517578l2.16016 0.267578
-l-0.078125 1.2041l0.268555 2.42578l1.81641 3.99512c0.402344 0.287109 0.514648 0.860352 0.228516 1.28125c-0.25 0.362305 -0.726562 0.514648 -1.12598 0.342773c-0.517578 -0.19043 -1.07227 -0.264648 -1.62695 -0.246094
-c-0.666992 0.0351562 -1.29785 0.227539 -1.87109 0.551758l-2.54297 -0.227539l-1.05078 -0.688477c-0.498047 0.152344 -1.03223 -0.0566406 -1.2998 -0.517578c-0.209961 -0.361328 -0.209961 -0.801758 0.0195312 -1.16602l0.439453 -1.41504
-c0.516602 -0.436523 0.860352 -1.0293 0.994141 -1.67773c0.0957031 -0.499023 0.0751953 -1.01562 -0.0751953 -1.51172l-1.09082 -3.72754v0zM226.921 24.6279v0.000976562l-0.0214844 1.48926l-0.324219 1.2998c-0.342773 0.402344 -0.611328 0.861328 -0.783203 1.35645
-c-0.249023 0.709961 -0.286133 1.49023 -0.114258 2.2168c1.10645 1.53027 2.84863 2.46582 4.73828 2.54395c1.85449 0.0771484 3.63379 -0.708008 4.83691 -2.10156c0.571289 -0.863281 0.858398 -1.87402 0.858398 -2.90527
-c0 -0.539062 -0.0917969 -1.05371 -0.24707 -1.56836c-0.345703 0.19043 -0.726562 0.286133 -1.10742 0.305664c-0.344727 0.0214844 -0.668945 -0.115234 -0.994141 -0.152344c-0.880859 -0.113281 -1.81641 0.152344 -2.67676 -0.15332
-c-0.803711 -0.287109 -1.2998 -1.06934 -2.04492 -1.47363c-0.669922 -0.362305 -1.375 -0.648438 -2.12012 -0.858398zM238.011 159.63l1.53027 0.324219l2.6748 0.267578l0.496094 1.31934h1.22168c0.327148 0.0957031 0.576172 0.364258 0.651367 0.688477
-c0.133789 0.496094 -0.15332 0.994141 -0.629883 1.16309l0.267578 2.14453c0.592773 0.399414 0.705078 1.22168 0.25 1.75488c-0.345703 0.423828 -0.916992 0.555664 -1.41504 0.327148c-0.44043 -0.287109 -0.975586 -0.422852 -1.49121 -0.345703
-c-0.591797 0.078125 -1.12988 0.402344 -1.48926 0.879883l-3.65039 0.250977l1.22168 -1.18652l0.916992 -1.41309l-0.09375 -2.25684l-0.460938 -3.91797v0zM239.226 45.252l1.66211 -0.479492c0.707031 -0.171875 1.47168 -0.09375 2.12012 0.249023
-c0.517578 0.267578 0.935547 0.651367 1.22266 1.14746l0.304688 0.688477l1.09082 0.801758c-0.361328 0.554688 -0.591797 1.16602 -0.688477 1.81641c-0.0966797 0.629883 -0.0566406 1.25977 0.0966797 1.87109l-0.667969 1.03418
-c0.0751953 0.305664 0.0566406 0.630859 -0.0585938 0.935547c-0.0966797 0.249023 -0.265625 0.477539 -0.477539 0.649414l-1.45215 0.133789l-0.975586 0.305664c-0.171875 0.115234 -0.402344 0.133789 -0.591797 0.0185547
-c-0.24707 -0.150391 -0.325195 -0.458984 -0.209961 -0.705078l-0.439453 -3.19238c-0.402344 -0.249023 -0.669922 -0.648438 -0.782227 -1.10938c-0.0595703 -0.227539 -0.0595703 -0.479492 -0.0195312 -0.708008
-c0.131836 -0.342773 0.208984 -0.725586 0.24707 -1.08789c0.0771484 -0.803711 -0.0566406 -1.62402 -0.380859 -2.36914v0z" />
-    <glyph glyph-name="uniF14B" unicode="&#xf14b;" 
-d="M146 -155.104v75.8184l34.626 41.2266v75.0156l-34.626 41.2256v75.8184h9.99707v-65.8301l51.2275 -59.1963v-59.0508l-51.2275 -59.1963v-65.8311h-9.99707zM371.343 -155.104h-9.99707v65.8311l-51.2266 59.1963v59.0508l51.2266 59.1963v65.8301h9.99707v-75.8184
-l-34.625 -41.2256v-75.0156l34.625 -41.2266v-75.8184zM252.723 -90.5957h10.9746v-64.3867h-10.9746v64.3867zM252.723 89.6133v64.3867h10.9746v-64.3867h-10.9746zM252.723 31.2539h10.9746v-64.3867h-10.9746v64.3867z" />
-    <glyph glyph-name="uniF177" unicode="&#xf177;" 
-d="M300.654 -21.7275c-0.0253906 -4.63379 -2.65234 -8.94629 -6.6416 -11.2451l-44.4219 -30.6855c-8.87207 -6.12109 -12.7686 -17.9912 -12.7686 -28.9199l-0.0400391 -30.3828h26.2754l0.00488281 30.2275c0 4.16309 2.01367 8.10352 5.34082 10.5635l39.0801 26.584
-c11.8457 6.9209 19.3857 20.1484 19.3857 33.9883v0c-0.0117188 16.2881 -0.0117188 32.5635 0 48.8516v-0.00976562c0 13.8398 -7.54004 27.0801 -19.3857 34l-39.0801 26.585c-3.32715 2.45996 -5.34082 6.40625 -5.34082 10.5635l-0.00488281 11.7646l14.4668 -4.31836
-c2.01367 -0.557617 3.4873 -0.798828 5.03613 0.253906c2.2002 1.5 2.78223 4.52246 1.2832 6.74121l-33.9199 50.127l-33.9512 -50.127c-1.51172 -2.21875 -0.929688 -5.24121 1.28223 -6.74121c1.46191 -1.00293 2.99902 -0.824219 4.81348 -0.365234l14.7148 4.42969
-l0.0390625 -11.9199c0 -10.9287 3.89746 -22.7988 12.7695 -28.9199l44.4209 -30.6865c3.99023 -2.31055 6.61719 -6.61621 6.6416 -11.251c0.0244141 -16.3623 0.0244141 -32.7363 0 -49.1045z" />
-    <glyph glyph-name="uniF174" unicode="&#xf174;" 
-d="M298.496 114.393v0v-228.785h-57.1934v85.7988h-85.7988v57.1934h85.7988v85.793h57.1934z" />
-    <glyph glyph-name="uniF130" unicode="&#xf130;" 
-d="M283.118 117.308c13.5586 0 24.6182 -11.0498 24.6182 -24.6084c0 -13.5547 -11.0596 -24.6143 -24.6182 -24.6143c-13.5547 0 -24.6279 11.0596 -24.6279 24.6143c0 13.5586 11.0732 24.6084 24.6279 24.6084zM139.35 61.4033h50.3916v-62.7432h-50.3916v62.7432v0z
-M194.25 61.4014h116.659l43.2227 -8.6748l7.00293 20.3662l11.5156 -2.33789l-9.17871 -37.3828l-52.2578 3.84277l9.93848 -154.522l-11.3447 0.123047l-21.7686 88.8154l-14.6885 -88.7441h-10.8506l-1.16895 153.991l-67.0811 13.0117v11.5117v0z" />
-    <glyph glyph-name="uniF101" unicode="&#xf101;" 
-d="M320.512 -256.038l-0.0654297 370.933l39.3027 -7.87012c12.707 -2.12207 26.5332 11.6182 15.6855 20.2959l-119.417 128.652l-121.167 -130.636c-6.95215 -9.69043 3.65723 -20.083 16.8369 -18.6963l40.5186 9.27246c0 36.0234 -0.766602 -267.493 -0.766602 -371.951
-z" />
-    <glyph glyph-name="uniF197" unicode="&#xf197;" 
-d="M228.83 24.6377c-2.73633 -9.0752 -5.46582 -18.1504 -8.19434 -27.2178c-1.07324 -3.56152 -1.87305 -7.54688 -3.76172 -10.7959c-4.09766 -7.05078 -13.9736 -8.34766 -19.6787 -2.39355c-3.15332 3.29004 -4.86621 8.12305 -6.83496 12.1406
-c-4.0498 8.21094 -8.09863 16.4219 -12.1406 24.6328c-16.7334 33.9404 -33.4678 67.873 -50.1943 101.813c37.8701 0 75.7559 0 113.634 0.0224609h27.0254c4.75391 0 10.1162 0.503906 14.7578 -0.711914c7.72266 -2.0332 12.8203 -10.7803 7.49023 -17.9512
-c-2.47266 -3.32129 -5.81836 -6.33789 -8.61914 -9.42676c-6.3623 -7.03516 -12.7168 -14.0693 -19.0791 -21.0957c29.3232 -13.3174 57.7812 -33.748 75.1797 -61.3184c17.3018 -27.458 20.0234 -57.2529 19.959 -88.8408
-c-0.03125 -22.6318 -0.0791016 -45.2637 -0.120117 -67.8965c0 -0.456055 0.263672 -3.56055 -0.224609 -3.56055h-10.0039h-37.1973c-3.11328 0 -14.1006 -2.13672 -14.1006 1.78418c0 9.20312 -0.0166016 18.3984 -0.0166016 27.6025
-c-0.015625 19.1748 0.160156 38.3652 -0.0478516 57.5479c-0.152344 15.1338 -3.44922 29.4189 -11.6758 42.248c-12.7646 19.9268 -35.9492 32.8516 -56.1562 43.4238z" />
-    <glyph glyph-name="uniF140" unicode="&#xf140;" 
-d="M234.405 83.4219v0l37.666 -22.8857l-7.08008 0.525391l13.6436 -19.5703l-27.5117 22.8906h4.52051zM290.138 26.6455v0l37.6719 -22.8916l-7.08496 0.53125l13.6484 -19.5654l-27.5215 22.8857h4.52539zM241.429 27.1963l0.00195312 0.000976562l-124.508 -19.7949
-l0.0566406 3.60059l52.6582 9.34082l-0.341797 0.181641l-0.347656 0.213867l-0.373047 0.265625l-0.387695 0.286133l-0.398438 0.333008l-0.393555 0.342773l-0.398438 0.379883l-0.373047 0.416992l-0.373047 0.416016l-0.362305 0.442383l-0.327148 0.462891
-l-0.316406 0.46875l-0.276367 0.473633l-0.240234 0.499023l-0.208984 0.478516l-0.163086 0.489258l-2.73828 2.36816l-0.306641 0.249023l-0.300781 0.245117l-0.271484 0.244141l-0.234375 0.245117l-0.214844 0.239258l-0.208984 0.228516l-0.189453 0.223633
-l-0.148438 0.240234l-0.132812 0.208008l-0.112305 0.212891l-0.0869141 0.213867l-0.0761719 0.217773l-0.0361328 0.203125l-0.0244141 0.1875v0.192383l0.0195312 0.192383l0.0517578 0.213867l0.101562 0.244141l0.148438 0.270508l0.199219 0.291992l0.240234 0.317383
-l0.275391 0.342773l0.322266 0.354492l0.336914 0.384766l0.0615234 0.0625l0.0410156 0.0625l0.0556641 0.120117v0.134766l-0.0253906 0.129883l-0.015625 0.130859v0.124023l0.015625 0.0683594l0.0253906 0.0625l0.0253906 0.0566406l0.0615234 0.0419922v19.4717
-l0.015625 0.462891l0.0410156 0.453125l0.0810547 0.467773l0.102539 0.46875l0.132812 0.447266l0.178711 0.4375l0.189453 0.431641l0.234375 0.400391l0.255859 0.375l0.142578 0.176758l0.148438 0.151367l0.158203 0.15625l0.168945 0.150391l0.178711 0.135742
-l0.173828 0.119141l0.193359 0.109375l0.194336 0.09375l0.209961 0.0888672l0.208984 0.078125l0.224609 0.0410156l0.235352 0.0419922l0.240234 0.0205078l0.239258 0.015625h10.9727l0.357422 0.046875l0.398438 0.09375l0.387695 0.145508l0.424805 0.1875
-l0.428711 0.244141l0.459961 0.286133l0.449219 0.338867l0.444336 0.389648l0.464844 0.4375l0.464844 0.489258l0.449219 0.536133l0.459961 0.587891l0.439453 0.634766l0.423828 0.681641l0.414062 0.728516l0.382812 0.785156l0.551758 1.11426l0.541016 1.05078
-l0.537109 0.978516l0.541016 0.910156l0.520508 0.84375l0.537109 0.769531l0.515625 0.712891l0.520508 0.640625l0.505859 0.561523l0.505859 0.494141l0.245117 0.213867l0.250977 0.21875l0.25 0.170898l0.240234 0.162109l0.239258 0.155273l0.235352 0.109375
-l0.240234 0.109375l0.229492 0.09375l0.230469 0.0673828l0.234375 0.0419922l0.230469 0.03125l0.219727 0.0107422h8.77539l0.817383 0.0673828l0.428711 0.00488281l0.428711 -0.00488281l0.439453 -0.0419922l0.418945 -0.078125l0.40332 -0.0830078l0.209961 -0.078125
-l0.183594 -0.0878906l0.199219 -0.078125l0.173828 -0.120117l0.163086 -0.125l0.168945 -0.125l0.163086 -0.161133l0.148438 -0.161133l0.12793 -0.1875l0.132812 -0.203125l0.0966797 -0.233398l0.117188 -0.229492l0.0820312 -0.270508l0.0615234 -0.286133
-l0.0615234 -0.296875l0.0507812 -0.342773l0.0253906 -0.333984l0.00488281 -0.378906l0.102539 -19.2275l0.00976562 -0.161133l0.015625 -0.162109l0.0712891 -0.295898l0.0966797 -0.276367l0.138672 -0.244141l0.183594 -0.229492l0.199219 -0.192383
-l0.229492 -0.176758l0.245117 -0.161133l0.260742 -0.120117l0.291016 -0.114258l0.286133 -0.0888672l0.311523 -0.0722656l0.296875 -0.0517578l0.311523 -0.0419922l0.306641 -0.015625l0.291016 -0.0107422h19.3848l-0.0410156 0.28125l-0.0664062 0.275391
-l-0.107422 0.276367l-0.148438 0.254883l-0.167969 0.239258l-0.214844 0.228516l-0.219727 0.21875l-0.260742 0.203125l-0.280273 0.192383l-0.296875 0.166992l-0.321289 0.139648l-0.336914 0.135742l-0.342773 0.0986328l-0.362305 0.09375l-0.393555 0.0576172
-l-0.37793 0.03125l-12.6631 1.30566l2.26855 5.78613l18.751 0.828125l0.858398 0.0517578l0.883789 0.0419922l0.449219 0.00488281l0.444336 -0.00488281l0.439453 -0.0361328l0.43457 -0.0419922l0.428711 -0.078125l0.414062 -0.0888672l0.398438 -0.134766
-l0.392578 -0.161133l0.368164 -0.213867l0.168945 -0.114258l0.173828 -0.129883l0.172852 -0.135742l0.15918 -0.161133l0.163086 -0.161133l0.137695 -0.166992l14.5273 -18.3896l0.240234 -0.270508l0.240234 -0.280273l0.254883 -0.245117l0.28125 -0.244141
-l0.280273 -0.223633l0.296875 -0.203125l0.300781 -0.182617l0.317383 -0.181641l0.321289 -0.145508l0.337891 -0.151367l0.336914 -0.109375l0.341797 -0.103516l0.347656 -0.0683594l0.352539 -0.0566406l0.367188 -0.0576172l0.368164 -0.0205078l39.3467 -1.58691
-l14.7568 14.2314l-3.08008 3.90234l24.5029 24.1865l-12.7695 -23l5.84863 -3.9541l-23.2109 -15.5586l51.1416 -2.12402l0.158203 0.416992l0.173828 0.395508l0.189453 0.389648l0.199219 0.379883l0.214844 0.370117l0.234375 0.369141l0.240234 0.34375
-l0.245117 0.342773l0.28125 0.338867l0.259766 0.322266l0.291016 0.317383l0.296875 0.296875l0.316406 0.291016l0.321289 0.276367l0.327148 0.270508l0.347656 0.244141l0.34668 0.245117l0.363281 0.223633l0.368164 0.203125l0.373047 0.212891l0.382812 0.1875
-l0.392578 0.161133l0.404297 0.161133l0.40332 0.129883l0.413086 0.140625l0.424805 0.09375l0.428711 0.109375l0.43457 0.0830078l0.444336 0.0527344l0.438477 0.0410156l0.450195 0.0263672l0.454102 0.00488281l0.480469 -0.00488281l0.485352 -0.0361328
-l0.464844 -0.046875l0.464844 -0.0625l0.459961 -0.09375l0.454102 -0.0986328l0.459961 -0.135742l0.423828 -0.140625l0.43457 -0.15625l0.423828 -0.192383l0.413086 -0.203125l0.404297 -0.203125l0.392578 -0.233398l0.398438 -0.239258l0.37793 -0.255859
-l0.352539 -0.275391l0.357422 -0.286133l0.347656 -0.301758l0.321289 -0.317383l0.317383 -0.333008l0.316406 -0.337891l0.28125 -0.354492l0.280273 -0.369141l0.260742 -0.384766l0.254883 -0.375l0.224609 -0.40625l0.225586 -0.405273l0.198242 -0.421875
-l0.189453 -0.431641l0.167969 -0.447266l0.148438 -0.4375l0.132812 -0.458008l14.1035 -0.530273l1.09766 -6.80176h-14.5674l-0.123047 -0.015625l-0.137695 -0.0253906l-0.260742 -0.0888672l-0.285156 -0.114258l-0.301758 -0.120117l-0.168945 -0.384766
-l-0.193359 -0.384766l-0.205078 -0.370117l-0.208984 -0.369141l-0.224609 -0.359375l-0.225586 -0.342773l-0.240234 -0.328125l-0.259766 -0.322266l-0.276367 -0.3125l-0.275391 -0.3125l-0.286133 -0.291016l-0.301758 -0.286133l-0.311523 -0.265625
-l-0.311523 -0.259766l-0.342773 -0.245117l-0.34668 -0.244141l-0.0566406 -0.208984l-0.0869141 -0.197266l-0.199219 -0.369141l-0.0371094 -0.598633v-0.322266l0.0166016 -0.317383l0.0244141 -0.307617l0.0615234 -0.322266l0.0869141 -0.307617l0.112305 -0.291016
-l0.15332 -0.275391l0.199219 -0.271484l0.112305 -0.114258l0.126953 -0.129883l0.132812 -0.114258l0.148438 -0.114258l0.158203 -0.109375l0.173828 -0.09375l0.404297 -0.176758l0.449219 -0.146484l0.520508 -0.124023l20.7188 -3.83594v-5.72852l-111.272 19.7939
-l0.469727 -2.53418h6.03223l1.68066 -4.91699h-6.7832l0.454102 -2.53418h7.14648l2.08887 -6.14551h-8.06055l0.577148 -3.1377h8.58691l2.44141 -7.22266h-9.70508l0.648438 -3.29883h10.1602l2.95215 -8.70117h-11.4932l0.823242 -4.19336h12.1162l3.14648 -9.40332
-h-13.5312l1.05176 -5.55762h14.3945l3.94824 -11.6406h-16.1406l1.62891 -8.7627h17.4697l5.74121 -16.667h-20.0693l2.95703 -15.9023h-11.4365l-2.32422 15.9023h-53.9863l-1.79297 -15.9023h-11.4365l2.54395 15.9023h-19.2725l5.17383 16.667h16.8213l1.39941 8.7627
-h-15.4922l3.60059 11.6406h13.8066l0.878906 5.55762h-12.9482l2.89551 9.40332h11.6211l0.638672 4.19336h-10.9268l2.67188 8.70117h9.7002l0.520508 3.29883h-9.17383l2.20703 7.22266h8.12207l0.536133 3.1377h-7.67773l1.91602 6.14551h6.74219l0.398438 2.53418
-h-6.37988l1.51172 4.91699h5.62891zM182.87 22.6904l0.423828 0.567383l0.40332 0.530273l0.337891 0.525391l0.306641 0.489258l0.270508 0.484375l0.224609 0.473633l0.204102 0.467773l0.158203 0.458008l0.148438 0.46875l0.107422 0.462891l0.0917969 0.478516
-l0.0664062 0.484375l0.0410156 0.514648l0.0410156 0.515625l0.0205078 0.556641v0.567383l27.5117 5.49512l0.5 -1.24414l0.469727 -1.06641l0.214844 -0.462891l0.229492 -0.453125l0.260742 -0.416016l0.260742 -0.395508l0.275391 -0.385742l0.301758 -0.379883
-l0.347656 -0.364258l0.37793 -0.369141l0.433594 -0.390625l0.475586 -0.379883l0.536133 -0.420898l0.597656 -0.426758l-35.6387 -6.38477v0zM240.264 46.2002v0l-8.3418 -3.37695l0.235352 -0.567383l0.214844 -0.598633l0.208984 -0.614258l0.189453 -0.634766
-l0.158203 -0.666016l0.12207 -0.675781l0.0361328 -0.364258l0.0302734 -0.359375l0.0205078 -0.364258l-0.00976562 -0.375l-0.0107422 -0.379883l-0.0351562 -0.389648l-0.0458984 -0.401367l-0.0771484 -0.411133l-0.0869141 -0.420898l-0.117188 -0.421875
-l-0.132812 -0.436523l-0.163086 -0.432617l-0.18457 -0.458008l-0.213867 -0.457031l-0.240234 -0.463867l-0.270508 -0.489258l-0.286133 -0.503906l-0.332031 -0.495117l-0.368164 -0.503906l-0.387695 -0.53125l5.25586 0.911133h13.2705l0.219727 0.00976562
-l0.219727 0.0205078l0.439453 0.078125l0.204102 0.046875l0.199219 0.0576172l0.178711 0.0732422l0.173828 0.0830078l0.15332 0.0878906l0.117188 0.104492l0.107422 0.114258l0.0615234 0.109375l0.0400391 0.109375v0.135742l-0.0400391 0.134766l-0.0771484 0.135742z
-M361.165 21.3584l-0.505859 0.478516l-0.480469 0.509766l-0.464844 0.546875l-0.418945 0.567383l-0.398438 0.608398l-0.357422 0.614258l-0.332031 0.628906l-0.295898 0.666016h-0.183594h-28.6104l-0.229492 -0.0253906l-0.199219 -0.0527344l-0.183594 -0.078125
-l-0.132812 -0.114258l-0.117188 -0.129883l-0.0664062 -0.145508l-0.0517578 -0.145508l-0.0195312 -0.177734l0.0195312 -0.161133l0.0517578 -0.166016l0.0664062 -0.161133l0.117188 -0.146484l0.132812 -0.134766l0.183594 -0.109375l0.199219 -0.0986328
-l0.229492 -0.0576172l28.9678 -5.23438l0.454102 -0.0732422l0.398438 -0.0253906l0.363281 0.00488281l0.332031 0.0517578l0.306641 0.0732422l0.259766 0.114258l0.224609 0.140625l0.199219 0.170898l0.164062 0.193359l0.137695 0.212891l0.112305 0.234375
-l0.0820312 0.265625l0.0458984 0.270508l0.0205078 0.286133v0.301758l-0.0205078 0.296875v0zM247.333 27.1807h29.6621l0.341797 -2.53906h-30.29l0.286133 2.53906v0zM278.446 17.1953h-32.2109l0.286133 2.53906h31.5771l0.347656 -2.53906v0zM245.53 11.0605v0
-l-0.347656 -3.14844h34.6631l-0.475586 3.14844h-33.8398zM244.37 0.71582v0l-0.336914 -3.30957h37.3193l-0.464844 3.30957h-36.5176zM243.037 -11.2842v0l-0.459961 -4.19922h40.624l-0.577148 4.19922h-39.5869zM241.525 -24.8809v0l-0.62793 -5.5625h44.5205
-l-0.822266 5.5625h-43.0703zM239.61 -42.0898v0l-0.986328 -8.74121h49.752l-1.27734 8.74121h-47.4883z" />
-    <glyph glyph-name="uniF11B" unicode="&#xf11b;" 
-d="M282.775 64.4805v-61.8486h114.895v-45.7373h-114.895v-114.895h-53.5508v114.895h-114.895v45.7373h114.895v61.1309l-22.8291 -5.89746l-0.00683594 -0.00390625c-0.704102 -0.169922 -1.42676 -0.257812 -2.14844 -0.257812
-c-4.92871 0 -8.92676 3.99414 -8.92676 8.92188c0 1.78613 0.538086 3.5293 1.53613 5.00684l60.54 86.4678l60.5391 -86.4678c0.999023 -1.47754 1.53223 -3.2207 1.53223 -5.00684c0 -4.92773 -3.99316 -8.92188 -8.92188 -8.92188
-c-0.72168 0 -1.44434 0.0878906 -2.14844 0.257812l-0.0107422 0.00390625l-25.6045 6.61523v0z" />
-    <glyph glyph-name="uniF16C" unicode="&#xf16c;" 
-d="M184.229 7.67676l-46.6592 -47.3916l-46.4854 46.6094l0.157227 28.7656l34.6719 -33.6641c1.46777 52.8848 32.1875 112.44 108.47 127.52l3.84863 -23.2129c-43.4453 -5.79492 -89.7012 -50.8545 -88.5625 -104.503l34.3447 33.5391zM351.594 -82.0713v0
-l-16.918 -63.5791l-24.9658 -14.3477l11.667 46.8672c-46.4912 -25.3613 -113.482 -28.8418 -164.937 29.3867l18.1445 15.0088c26.8887 -34.5693 89.1611 -51.7939 135 -23.7988l-46.3086 12.748l23.8242 14.1123zM281.098 123.607v0l63.5498 17.3115l24.96 -14.3584
-l-46.4424 -13.4551c45.3047 -27.4199 81.9541 -83.5312 57.3662 -157.207l-22.1074 8.13477c16.4346 40.5801 0.0839844 103.012 -47.1738 128.546l12.2119 -46.3965l-24.1826 13.4902z" />
-    <glyph glyph-name="uniF160" unicode="&#xf160;" 
-d="M59.1289 -40v108.805h37.9258c9.69824 0 16.625 -0.977539 20.7812 -2.93164s7.57031 -5.34375 10.2422 -10.168s4.00781 -10.6006 4.00781 -17.3301c0 -8.51074 -2.04102 -15.3633 -6.12305 -20.5586s-9.88379 -8.46094 -17.4043 -9.79688
-c3.85938 -2.77051 7.05078 -5.80176 9.57422 -9.0918s5.96191 -9.19043 10.3164 -17.7012l10.8359 -21.2266h-21.4492l-13.0625 23.6758c-4.7002 8.55957 -7.8916 13.916 -9.57422 16.0684s-3.46387 3.63672 -5.34375 4.45312s-4.89844 1.22461 -9.05469 1.22461h-3.71094
-v-45.4219h-17.9609zM77.0898 22.7891h13.3594c8.16406 0 13.3594 0.358398 15.5859 1.07617s4.03223 2.16504 5.41797 4.3418s2.07812 5.07129 2.07812 8.68359c0 3.46387 -0.692383 6.24707 -2.07812 8.34961s-3.26562 3.5498 -5.64062 4.3418
-c-1.68262 0.543945 -6.55566 0.816406 -14.6211 0.816406h-14.1016v-27.6094zM383.129 -40v108.805h37.9258c9.69824 0 16.625 -0.977539 20.7812 -2.93164s7.57031 -5.34375 10.2422 -10.168s4.00781 -10.6006 4.00781 -17.3301
-c0 -8.51074 -2.04102 -15.3633 -6.12305 -20.5586s-9.88379 -8.46094 -17.4043 -9.79688c3.85938 -2.77051 7.05078 -5.80176 9.57422 -9.0918s5.96191 -9.19043 10.3164 -17.7012l10.8359 -21.2266h-21.4492l-13.0625 23.6758
-c-4.7002 8.55957 -7.8916 13.916 -9.57422 16.0684s-3.46387 3.63672 -5.34375 4.45312s-4.89844 1.22461 -9.05469 1.22461h-3.71094v-45.4219h-17.9609zM401.09 22.7891h13.3594c8.16406 0 13.3594 0.358398 15.5859 1.07617s4.03223 2.16504 5.41797 4.3418
-s2.07812 5.07129 2.07812 8.68359c0 3.46387 -0.692383 6.24707 -2.07812 8.34961s-3.26562 3.5498 -5.64062 4.3418c-1.68262 0.543945 -6.55566 0.816406 -14.6211 0.816406h-14.1016v-27.6094z" />
-    <glyph glyph-name="uniF196" unicode="&#xf196;" 
-d="M361.521 -220h128.479v311.659c0 64.1523 -48.5488 128.341 -128.479 128.341h-228.285l-111.236 -64.1885l111.236 -64.1523h177.729c50.6865 0 50.5557 -15.9316 50.5557 -66.5186z" />
-    <glyph glyph-name="uniF16D" unicode="&#xf16d;" 
-d="M51.2002 93.5947c0 7.06445 4.98633 15.6172 11.1377 19.1035l182.524 103.44c6.15137 3.48535 16.124 3.48633 22.2754 0l182.524 -103.44c6.15137 -3.48633 11.1377 -12.0547 11.1377 -19.1035v-280.621c0 -7.06445 -5.73145 -12.791 -12.793 -12.791h-384.014
-c-7.06543 0 -12.793 5.74219 -12.793 12.791v280.621z" />
-    <glyph glyph-name="uniF18B" unicode="&#xf18b;" 
-d="M46.8799 256l26 -17.5898l-21.4395 -14.5h92.1191l-0.719727 -4.53027l4.06055 -15.4395v-19.75h-12.3408l-1.12988 4.75h-41.8398l-1.05957 -4.75h-34.1602l-1.06055 4.75h-41.8398l-1.12988 -4.75h-12.3398v19.75l4.05957 15.4297l-0.709961 4.54004h38.9707
-l-21.4102 14.5zM46.8799 251.94l-19.9697 -13.5303v-0.0302734l19.9697 -13.5l19.9697 13.5v0.0302734zM87.9004 106.11zM29.9287 182.259c-0.849609 -2.58008 -3.29004 -4.40039 -6.18945 -4.40039c-3.57031 0 -6.4707 2.86035 -6.4707 6.40039v1.60938h34.29
-l0.0302734 -1.60938c0 -3.54004 -2.88965 -6.40039 -6.46973 -6.40039c-2.90039 0 -5.2998 1.83008 -6.15039 4.40039h-9.04004zM116.989 182.259c0.839844 -2.58008 3.2793 -4.40039 6.17969 -4.40039c3.58008 0 6.46973 2.86035 6.46973 6.40039v1.60938h-34.29
-l-0.0292969 -1.60938c0 -3.54004 2.89941 -6.40039 6.47949 -6.40039c2.86035 0 5.2998 1.83008 6.17969 4.40039h9.01074zM129.239 219.379h11.0693l4.10059 -15.4404h-15.1699v15.4404zM107.619 203.938h18.7402v15.4697h-18.7402v-15.4697zM107.619 203.938v15.4697
-h18.7402v-15.4697h-18.7402zM85.9492 203.938v15.4697h18.7695v-15.4697h-18.7695zM63.8291 203.938v15.4697h19.25v-15.4697h-19.25zM17.6592 219.379v-15.4404h-15.1602l4.09961 15.4404h11.0605zM20.5586 203.938v15.4697h18.7402v-15.4697h-18.7402zM42.1885 203.938
-v15.4697h18.7705v-15.4697h-18.7705z" />
-    <glyph glyph-name="uniF132" unicode="&#xf132;" 
-d="M331 30v160h60v-380h-60v170h-150v-170h-60v380h60v-160h150z" />
-    <glyph glyph-name="uniF141" unicode="&#xf141;" 
-d="M184.338 15.1396c-0.0390625 -32.0635 -0.0839844 -64.1074 -0.116211 -96.1572h-36.6602c-0.0078125 32.0889 -0.0136719 64.1846 -0.0263672 96.2676c0 53.127 48.8867 96.2217 108.572 96.2217c59.6846 0 108.357 -43.335 108.357 -96.4619
-c0 -49.8027 -42.7832 -91.002 -97.3066 -95.9629l5.7793 -20.7969c0.642578 -2.55176 0.895508 -4.68164 -0.506836 -6.74707c-2.10352 -3.09668 -6.33691 -3.9082 -9.43457 -1.80469l-70.1973 47.5625l70.1973 47.4775c3.09766 2.10352 7.33105 1.30566 9.43457 -1.78516
-c1.46777 -2.16895 1.14355 -4.24023 0.357422 -7.03906l-5.79883 -19.9727c34.3428 4.39551 60.7764 29.2383 60.7764 59.0684c0 32.9141 -32.1865 59.7559 -71.6582 59.7559c-39.4727 0 -71.665 -26.8418 -71.7695 -59.626z" />
-    <glyph glyph-name="uniF18A" unicode="&#xf18a;" 
-d="M504.965 -145.116h-457.453c-21.5742 0 -47.3135 33.9092 -47.3135 55.9795c-0.475586 37.3389 1.30859 73.5283 2.51855 110.035c5.80957 41.6025 21.793 79.6523 37.6367 117.755c3.88672 7.96582 8.56641 15.7471 18.0654 15.7471h165.776
-c15.0703 -6.78613 31.3506 -11.959 38.2119 -29.5361c47.5713 -117.113 141.585 -173.093 249.3 -192.843l0.198242 -70.8916c0 -2.7959 -3.96582 -6.24609 -6.94043 -6.24609zM315.412 9.39746l-31.6875 34.0869v-88.7773l31.6875 -14.5557v69.2461zM363.4 -28.3789
-l-30.2998 21.6143v-62.2051l30.2998 -12.6914v53.2822zM379.026 -37.8369v-47.5723l29.6055 -8.32812v43.8037zM420.887 -55.8232v-41.5029l23.5381 -4.26367v39.7188zM456.521 -65.9561v-37.2598l19.2949 -2.30078v35.8125zM486.106 -71.667v-35.3164l15.4873 -1.62598
-v34.8203zM77.9902 206.474l158.876 -0.0800781c5.5127 0 6.50488 -12.1553 0 -12.1553h-26.334c-22.7842 -9.20117 -36.248 -22.2295 -42.5146 -39.8379h-20.5635c-6.2666 17.6084 -19.7305 30.7158 -42.5146 39.917h-26.9492c-6.06738 0 -6.26562 12.1562 0 12.1562z
-M182.395 194.317h-49.6934c10.7471 -9.04199 22.4268 -18.1445 22.4268 -32.2822h4.95801c0 14.0791 11.6006 23.2598 22.3086 32.2822zM239.881 53.459c5.05664 0 6.94043 10.4697 4.56055 16.9941c-7.53516 20.1152 -16.7168 59.4219 -27.127 59.4219h-160.205
-c-8.68555 0 -20.2656 -39.9414 -30.3984 -59.918c-2.00293 -7.93164 -0.0205078 -16.498 4.77832 -16.498h208.392zM207.122 -27.5654h-0.0205078c-10.9404 -0.00585938 -19.8193 -8.88965 -19.8193 -19.8301c0 -10.9463 8.88379 -19.8291 19.8301 -19.8291
-c10.9453 0 19.8291 8.88281 19.8291 19.8291c0 10.9404 -8.87891 19.8242 -19.8193 19.8301zM50.4668 -27.5654h-0.0195312c-10.9404 -0.00585938 -19.8203 -8.88965 -19.8203 -19.8301c0 -10.9463 8.88379 -19.8291 19.8301 -19.8291s19.8291 8.88281 19.8291 19.8291
-c0 10.9404 -8.87891 19.8242 -19.8193 19.8301zM0.217773 -174.723h39.5215v19.79h59.5684v-19.5518h87.251v19.6113h325.347v-19.9082c-91.6338 -3.35156 -185.052 -5.96875 -233.575 -27.8213h-278.112v27.8799z" />
-    <glyph glyph-name="uniF133" unicode="&#xf133;" 
-d="M222.723 38.1201c-1.92773 -6.4375 -3.88086 -12.8809 -5.81543 -19.3252c-2.1875 -7.25293 -7.99707 -20.0107 -17.3652 -11.0889c-2.54883 2.42578 -3.875 6.2041 -5.4082 9.29688c-2.99609 6.10059 -6.01074 12.1953 -9.01953 18.3027
-c-12.46 25.29 -24.9336 50.5801 -37.4014 75.8701c28.2598 0 56.5068 0.0078125 84.7598 0.0078125c6.68359 0 13.373 0.00488281 20.0498 0.00488281c3.60352 0 7.69238 0.388672 11.1797 -0.626953c5.59668 -1.61816 9.08984 -8.10059 5.22754 -13.2695
-c-1.79199 -2.41992 -4.2373 -4.61914 -6.26953 -6.87109c-4.78711 -5.2793 -9.55566 -10.5586 -14.3232 -15.8379c19.499 -8.85645 37.5625 -21.7119 50.9551 -38.54c12.1309 12.124 24.2617 24.2549 36.3857 36.3789c2.22559 2.23242 4.46387 4.46484 6.70215 6.70898
-c1.52051 1.52051 2.26465 -0.549805 3.65625 -1.93359c6.08105 -6.08789 12.1621 -12.1631 18.251 -18.2383c-10.9404 -10.9336 -21.8682 -21.8682 -32.8018 -32.7949c-5.41504 -5.41504 -10.8242 -10.8174 -16.2197 -16.2324
-c-2.65918 -2.63379 1.31348 -10.8115 2.04492 -14.4922c2.13477 -10.7402 1.84375 -21.7256 1.83008 -32.6143c-0.0380859 -19.5703 -0.0634766 -39.1416 -0.0839844 -58.7188c-0.0185547 -5.0791 -0.0253906 -10.1572 -0.0253906 -15.2363
-c0 -0.213867 -16.6533 -0.103516 -17.8369 -0.103516h-26.3643c-3.09863 0 -1.5918 5.54492 -1.5918 8.10059c0 19.3057 0 38.6113 -0.0185547 57.9229c-0.0175781 10.8887 0.731445 22.1328 -1.28711 32.8984c-4.66406 25.0576 -28.4209 39.5752 -49.2148 50.4316z" />
-    <glyph glyph-name="uniF126" unicode="&#xf126;" 
-d="M303.647 -136.176c-3.40625 0.235352 -6.81152 0.470703 -10.2178 0.706055c-4.69824 1.64258 -8.92969 2.34863 -11.2793 3.1709h-7.86816c-0.701172 0.821289 -1.40723 1.64258 -2.22949 2.46387v4.69824c-3.05469 12.9219 -3.05469 12.9219 -7.75293 29.8311
-c-1.05664 2.70508 -2.11328 5.4043 -3.1709 8.22461c-9.39551 15.6211 -9.39551 15.6211 -10.9229 19.1426c-0.702148 2.7002 -1.52832 5.4043 -2.34961 8.22363c0.235352 5.04883 0.470703 10.0977 0.706055 15.2666c-1.52734 5.51953 -1.52734 5.51953 -2.11328 6.10547
-h-1.17676c-3.05078 -3.75586 -3.05078 -3.75586 -6.10547 -8.80469c-0.47168 -2.46973 -0.9375 -4.93359 -1.52832 -7.51855c-2.34863 -4.69727 -3.16992 -5.4043 -5.51953 -10.9238c-0.235352 -2.34863 -0.470703 -4.69727 -0.706055 -7.04688
-c-0.46582 -1.99316 -1.05664 -4.11133 -1.64258 -6.22559c-0.235352 -3.87695 -0.470703 -7.74805 -0.701172 -11.7451c0.350586 -7.5127 0 -7.86816 0.350586 -14.5605c-0.235352 -0.706055 -0.470703 -1.52734 -0.821289 -2.34863
-c1.17188 -8.22363 1.17188 -8.22363 2.34863 -13.2725c1.05664 -0.585938 1.05664 -0.585938 4.57812 -1.29297h12.0957c4.23242 -0.701172 8.5752 -1.52734 12.9219 -2.34863c2.93555 -1.64258 5.99023 -3.28613 9.04102 -4.93359
-c0.120117 -0.235352 0.235352 -0.470703 0.355469 -0.821289c-0.59082 -0.585938 -1.17676 -1.17188 -1.87793 -1.7627c-2.34961 -0.115234 -4.81836 -0.350586 -7.2832 -0.585938v-3.52148c-3.29004 -0.120117 -3.29004 -0.120117 -12.6865 0.585938
-c-8.21875 3.1709 -8.21875 3.1709 -12.2109 3.99219c-3.99707 0.235352 -7.98828 0.470703 -12.1006 0.706055c-1.99414 0.706055 -4.10742 1.52734 -6.22559 2.34863c-0.230469 3.28613 0.120117 4.93359 -0.230469 13.5088
-c0.230469 5.16406 0.46582 10.333 0.701172 15.6162c-0.235352 11.6299 -0.470703 23.2559 -0.701172 34.8857c-0.826172 4.3418 -0.826172 4.3418 -1.17773 12.0957c1.52832 2.34863 3.05566 4.69824 4.69824 7.04688c3.05566 7.86816 3.05566 7.86816 3.52148 10.5684
-c-0.230469 0.470703 -0.46582 1.05664 -0.821289 1.64258c-2.46484 1.41211 -5.28418 2.11426 -6.45605 2.94043l-14.0947 3.16992c-2.7041 1.75879 -2.7041 1.75879 -3.87695 1.87891c-3.52051 -3.05566 -3.52051 -3.05566 -6.22559 -4.69824
-c-4.69727 0 -4.69727 0 -8.68945 -0.706055c-0.585938 -0.235352 -1.17188 -0.470703 -1.87891 -0.821289c-5.16797 -0.351562 -6.3457 0 -8.22363 -0.236328c-1.99316 -1.75781 -1.99316 -1.75781 -3.99219 -2.46387c-4.22656 0.350586 -5.87012 1.17188 -7.04688 1.17188
-c-0.235352 -0.235352 -0.470703 -0.46582 -0.706055 -0.821289c-1.05664 -0.115234 -2.11328 -0.235352 -3.1709 -0.350586c-0.701172 0.585938 -1.52246 1.17188 -2.34863 1.7627c-0.115234 0.821289 -0.350586 1.75879 -0.585938 2.7002
-c0.235352 3.0498 0.470703 6.22559 0.706055 9.39551c1.52734 5.87109 3.05469 11.7461 4.69824 17.6162c2.58398 5.28418 5.16895 10.5684 7.86816 15.9717c1.52734 2.34961 3.05566 4.69824 4.69824 7.04785c0.115234 0.585938 0.350586 1.29199 0.585938 1.99805
-c0.585938 0.115234 1.29199 0.350586 1.99805 0.585938c1.64355 1.64355 3.28613 3.40625 5.04883 5.16895c1.64355 0.936523 3.40625 1.99316 5.16895 3.05078c1.99414 2.11328 4.10742 4.23145 6.22559 6.3457c4.69824 3.0498 8.21973 4.69824 12.5674 7.74805
-c5.16406 2.82031 10.332 5.75488 15.6162 8.69531c3.87695 1.29199 7.75391 2.5791 11.7451 3.87109c12.5674 0.822266 12.5674 0.822266 20.791 0.822266c4.81348 -1.05762 9.63184 -2.11426 14.4453 -3.1709c10.4531 -3.87207 20.9053 -7.74805 31.3584 -11.7451
-c2.93555 -0.115234 5.87012 -0.230469 8.92578 -0.350586c1.52734 0.470703 3.0498 0.941406 4.69824 1.52734c1.05664 1.17676 2.11328 2.34863 3.28516 3.6416c1.05762 2.69922 2.11914 5.4043 3.17578 8.21875v12.5664
-c-1.52734 14.0947 -3.17578 23.1406 -3.87695 32.5361c-1.29199 5.87012 -2.58398 11.7451 -3.99219 17.6152v9.39648c3.1709 4.22754 3.1709 4.22754 5.16406 5.87012c3.05566 1.05664 6.10547 2.11328 9.16113 3.29102h7.51758
-c0.706055 -0.235352 1.52832 -0.470703 2.34961 -0.706055c0.706055 -1.17285 1.40723 -2.46484 2.11328 -3.75684c4.46289 -3.1709 4.46289 -3.1709 10.333 -6.34082c2.2334 -0.941406 4.46777 -1.87891 6.69629 -2.82031
-c0.120117 -1.87793 0.120117 -1.87793 -0.350586 -2.34863c-8.22363 -0.821289 -8.22363 -0.821289 -12.2158 -1.64355h-5.4043c-0.936523 -1.05664 -1.99316 -2.11328 -3.05078 -3.29004c-0.235352 -1.7627 -0.470703 -3.6416 -0.706055 -5.51953
-c0.120117 -2.82031 0.235352 -5.63965 0.350586 -8.5752c0.470703 -1.7627 0.942383 -3.64062 1.52832 -5.51953c2.11328 -3.64062 4.22656 -7.28223 6.34082 -10.9229c1.99805 -4.57812 4.1123 -9.16113 6.22559 -13.7393
-c1.52734 -5.04883 1.52734 -5.04883 3.16992 -13.7432v-16.7939c-0.46582 -2.93555 -1.05664 -5.99023 -1.64258 -9.0459c-3.05469 -9.3916 -3.05469 -9.3916 -6.22559 -16.7939c-6.2207 -10.9189 -6.2207 -10.9189 -10.9189 -17.9658
-c-3.1748 -3.52637 -3.1748 -3.52637 -4.69824 -5.875c-3.40527 -3.28613 -6.81152 -6.57617 -10.2178 -9.86719c-9.16016 -6.2207 -9.16016 -6.2207 -14.6846 -9.15625c-2.93555 -1.29199 -5.87012 -2.58398 -8.92578 -3.87598
-c-2.46387 -0.59082 -4.93359 -1.29297 -7.5127 -1.99902c-2.94043 0.115234 -5.875 0.235352 -8.93066 0.470703c-0.230469 -0.706055 -0.46582 -1.41211 -0.701172 -2.2334c-2.11328 -1.52734 -2.11328 -1.52734 -8.9248 -9.39648v-4.3418
-c-3.1709 -6.22559 -3.1709 -6.22559 -3.99707 -9.39648c-0.350586 -8.92578 -0.350586 -8.92578 0 -11.7451c2.11328 -6.69629 4.23242 -13.5078 6.3457 -20.3203c3.63672 -8.80469 7.27734 -17.7354 10.9189 -26.6602c1.52734 -1.87891 3.05566 -3.87207 4.69824 -5.87109
-c1.17676 -0.706055 2.46875 -1.40723 3.76074 -2.11328c2.34961 -0.350586 14.0947 0 23.1357 -0.350586c1.64258 -0.470703 3.29004 -0.941406 5.04883 -1.52734c5.51855 -3.17578 5.51855 -3.17578 6.81152 -4.58301c0 -0.585938 0 -1.17188 -0.115234 -1.7627
-c-1.99902 -0.702148 -1.99902 -0.702148 -8.92578 -1.4082c0 -1.17188 0 -1.17188 0.821289 -1.87793c-0.115234 -0.585938 -0.235352 -1.29199 -0.350586 -1.99805c-0.941406 -0.585938 -0.941406 -0.585938 -4.1123 -0.585938
-c-2.69922 0.821289 -2.69922 0.821289 -8.21875 1.64258z" />
-    <glyph glyph-name="uniF146" unicode="&#xf146;" 
-d="M273.048 -70.2725l-0.166992 -81.623l-56.0029 0.137695v198.895l-30.9932 -9.59277c-1.13281 -0.356445 -2.25098 -0.646484 -3.43457 -0.711914c-3.09375 -0.174805 -6.23828 1.125 -8.42383 3.32617c-2.52051 2.57031 -3.55859 6.24512 -2.99902 9.78809
-c0.290039 1.80176 1.125 3.31152 2.19238 4.75684l71.5654 97.1924l71.7617 -97.1924c1.47363 -1.98926 2.30859 -4.34961 2.30859 -6.83301c0 -4.53906 -2.64258 -8.51855 -6.80371 -10.3262c-2.25879 -0.973633 -4.32129 -1.06055 -6.64453 -0.552734
-c-0.610352 0.138672 -1.2207 0.479492 -1.52539 0.552734l-31.7197 6.83301c2.49805 -10.9941 4.98926 -22.0322 8.14062 -32.8672c4.66211 -16.041 10.7256 -31.6611 17.7402 -46.8242c6.9502 -14.9805 14.8506 -29.5264 23.9424 -43.3096
-c6.02734 -9.13477 12.5996 -17.9434 19.1348 -26.709l-30.833 -22.2715c-2.75977 3.60938 -5.51953 7.21094 -8.19922 10.8857c-6.17969 8.4375 -11.9453 17.2031 -17.4131 26.1201c-4.08203 6.65234 -7.87207 13.4639 -11.627 20.3262z" />
-    <glyph glyph-name="uniF145" unicode="&#xf145;" 
-d="M382.929 58.4121v0l-2.16113 -27.1299h-8.88574l-2.16211 27.1299h13.209zM402.382 58.4121v0l-2.16113 -27.1299h-9.12012l-2.16797 27.1299h13.4492zM220.347 -58.9922v0h-65.5645c0.713867 16.0859 1.91504 21.8486 5.75781 32.1719
-c5.04297 12.4854 11.0469 22.0889 18.9727 29.291c2.88184 2.40137 5.29004 4.32227 14.8896 11.0449c7.9248 5.28125 9.85352 8.16309 9.85352 13.9248c0 9.12402 -7.45215 16.5664 -16.5713 16.5664c-8.88574 0 -16.3311 -7.44238 -16.3311 -16.5664h-16.5713
-c0.480469 18.7275 14.4102 33.1328 32.9023 33.1328c18.252 0 32.6621 -14.8857 32.6621 -33.1328c0 -9.36328 -3.12891 -16.8066 -9.85352 -23.0488c-1.19434 -0.719727 -2.39551 -1.68066 -3.60938 -2.88086l-4.30957 -2.64062l-4.08887 -2.88184l-4.56348 -3.36035
-c-7.43848 -5.28223 -15.123 -16.0869 -18.4854 -25.9307c-1.20117 -2.88086 -1.68164 -5.04102 -2.40137 -9.12305h47.3115v-16.5664zM134.85 -58.9922v0h-16.8115v96.5166h-7.45215v12.7246c6.49121 0.480469 10.5674 3.36133 13.209 8.40332h11.0547v-117.645z
-M257.09 58.4121v0l-1.92871 -27.1299h-8.88574l-2.16113 27.1299h12.9756zM284.699 70.1768h-58.5928v48.2578l-52.1211 -10.8037c-1.68164 -0.480469 -2.39453 -0.720703 -3.1084 -0.720703c-3.3623 0 -6.72461 3.36133 -6.72461 6.96289
-c0 1.44043 0 2.40137 1.68066 3.8418l89.5732 79.71l89.0996 -79.9502c1.44727 -1.2002 1.68066 -2.40137 1.44727 -3.8418c0 -3.60156 -3.12891 -6.72266 -6.7373 -6.72266c-0.466797 0 -0.720703 0 -1.91504 0.240234l-52.6016 12.0049v-48.9785v0zM284.699 -71.2295v0
-v-48.9785l52.6016 12.0039c1.19434 0.24707 1.44824 0.480469 1.91504 0.480469c3.6084 0 6.7373 -3.36133 6.7373 -6.96973c0.233398 -1.42676 0 -2.62695 -1.44727 -3.83398l-89.0996 -79.9502l-89.5732 79.7031c-1.68066 1.4541 -1.68066 2.6543 -1.68066 4.08105
-c0 3.375 3.3623 6.73633 6.72461 6.73633c0.713867 0 1.42676 -0.24707 3.1084 -0.480469l52.1211 -11.0508v48.2588h58.5928zM276.296 4.87305v0v-15.6055h-41.0674v15.6055h41.0674zM346.186 -23.459c0 -12.4844 -6.72461 -21.1279 -16.5713 -21.1279
-c-10.0869 0 -16.5771 9.60352 -16.5771 22.8086c0 11.0449 6.49023 19.9277 16.5771 19.9277c9.84668 0 16.5713 -9.12305 16.5713 -21.6084zM362.51 -23.459c0 22.3291 -12.7285 37.4541 -32.8955 37.4541c-2.16797 0 -4.5625 0 -7.44434 -0.479492
-c4.08203 11.0439 14.8965 25.209 24.7295 32.6523l-9.59961 13.2051c-25.4639 -19.9277 -40.3535 -49.6992 -40.3535 -77.79c0 -26.8896 11.0469 -42.7354 32.668 -42.7354c20.167 0 32.8955 15.3652 32.8955 37.6934z" />
-    <glyph glyph-name="uniF14C" unicode="&#xf14c;" 
-d="M362.276 -155.178h-43.8115v147.009l-42.1016 41.0869v123.261h43.5371v-105.519l41.9111 -39.6855l0.464844 -166.152v0zM149.724 -155.391v0l0.464844 166.151l41.9111 39.6865v105.519h43.5371v-123.261l-42.1016 -41.0869v-147.009h-43.8115z" />
-    <glyph glyph-name="uniF114" unicode="&#xf114;" 
-d="M283.637 95.917c-12.501 3.30859 -14.1621 30.1572 -6.25391 40.4541c7.54395 10.4824 23.1689 11.9521 30.8984 9.74805c7.72266 -1.46973 9.00684 -1.46973 13.791 -9.01367c4.77832 -5.69727 3.67285 -7.16699 3.67285 -14.7109
-c-0.734375 -6.98828 2.75977 -7.72266 2.02539 -12.3154c0 -4.41406 -2.02539 -5.7041 -5.69824 -10.4824c-3.49414 -4.22949 -6.80957 -7.35938 -6.80957 -7.35938v-7.53711s14.7119 -13.6064 20.9648 -22.4346c5.7041 -8.27246 7.72363 -12.1367 15.4463 -17.2852
-c6.98828 -6.06836 14.7109 -3.86426 26.6631 -5.33398c10.4824 -0.734375 13.9766 0 13.9766 0c0.555664 1.46973 3.49414 2.20996 4.96875 3.12988c1.46973 0.734375 2.75391 2.2041 5.51367 0.734375c0.734375 0 -0.549805 -2.39453 0 -3.86426
-c0.734375 -1.46973 2.94434 -2.02441 3.67871 -2.94434c0.549805 -2.2041 2.02539 -7.53809 0 -8.08789c-5.69824 -2.38867 -11.9512 0.549805 -17.6553 0c-11.9521 -1.6543 -23.1689 -10.667 -33.6514 -7.72266c-11.2168 2.38965 -15.4463 20.9648 -25.9287 22.6191
-c-5.5127 0.735352 -1.46875 -12.8711 0 -18.7607c4.22949 -18.0205 11.9521 -34.5713 14.7119 -53.3262c0.734375 -3.67871 -3.49414 -3.67871 -4.22949 -6.61719c-1.28418 -2.39551 0 -5.33398 0 -7.54395c0.735352 -6.06836 3.49414 -12.8721 2.94531 -18.7549
-c-1.47559 -18.0205 -7.35938 -34.5713 -10.668 -52.5908c0 -2.94531 0.734375 -7.35352 2.20996 -10.4824c2.01855 -3.67969 2.01855 -4.41406 6.24805 -5.88379c3.49414 -1.46973 9.19824 -3.86426 11.9512 -4.59863c2.75977 -1.46973 5.51953 -2.2041 4.23535 -5.14941
-c0 -3.12305 -4.23535 -3.8584 -6.43945 -3.8584c-4.77832 0 -9.74707 3.12402 -13.9766 3.8584c-2.75879 0 -9.74707 1.47559 -11.9512 1.47559c-2.75977 0 -0.549805 -6.06836 -2.75977 -6.06836c-2.93848 -0.740234 -2.01855 -0.740234 -8.45703 0
-c-3.49414 0.734375 -1.28418 7.53809 -1.28418 10.4766c-0.741211 4.59863 -0.741211 8.27832 0.734375 12.877c0.549805 3.67383 4.77832 6.61816 4.77832 10.4766c0.734375 5.88965 -1.28418 11.958 -1.28418 18.0264c0 7.35254 2.57422 15.625 3.49414 23.9033
-c0.734375 1.46973 2.57422 4.59961 2.01855 5.33398c-4.96289 5.88379 -10.4824 13.4209 -16.7295 13.4209c-4.23535 0 0.548828 -9.74121 -1.47559 -14.1553c-6.24805 -11.4023 -14.7109 -21.8848 -23.1689 -31.6328
-c-4.22852 -5.14844 -12.1367 -8.27246 -15.6309 -14.1553c-1.10547 -2.20996 -0.549805 -6.80957 -0.549805 -9.01367c0 -2.94434 1.46973 -6.06836 3.67969 -8.27246c1.83301 -2.94434 6.24707 -4.41406 8.27246 -7.54297c0 -2.2041 0.548828 -5.14941 0 -7.35254
-c-2.02539 -1.65527 -5.51953 -0.919922 -8.27246 -0.919922c-1.47559 0.919922 -4.23535 1.6543 -5.7041 3.12305c-4.22949 4.41406 -7.72363 11.2178 -11.9521 14.8965c-0.734375 0.735352 -2.38867 -2.94434 -3.49414 -2.2041
-c-3.49414 1.46973 -6.25293 2.2041 -7.17285 6.80371c-0.549805 2.93848 2.20996 4.41406 4.41406 7.53711c3.49316 2.94531 6.9873 7.35352 10.4814 9.74805c0 0 6.80371 11.2168 7.72363 18.5693c1.46875 6.80371 6.06836 16.5518 10.4824 19.4961
-c3.49414 3.12402 3.49414 12.1367 3.49414 12.1367c-1.29004 2.2041 -3.49414 5.14844 -5.51953 6.61816c-4.96289 3.8584 -16.915 1.6543 -16.915 8.27246c8.45801 14.3467 11.9521 27.2178 14.5264 40.46c2.38867 10.4766 7.9082 24.8232 2.38867 33.0957
-c-4.22852 5.14844 -10.8467 -9.74121 -13.4209 -15.6309c-5.51855 -9.92676 -8.27246 -21.6992 -13.2412 -33.0957c-2.75977 -6.06836 -4.96387 -13.6123 -9.92773 -18.7607c-2.94434 -2.2041 -7.54297 0.734375 -11.4023 -0.734375
-c-5.33301 -3.85938 -11.0312 -9.74805 -16.7354 -13.6064c-1.28418 -1.46973 -3.49414 -3.67969 -5.5127 -3.67969c-2.02539 0 -4.0498 2.94531 -6.43945 3.67969c-4.04297 2.38867 -7.53711 11.4023 -11.0312 8.27246
-c-4.96387 -3.67383 -5.88379 -12.6865 -4.96387 -18.7549c0.549805 -5.14844 6.43262 -9.74805 8.45801 -13.4209c1.46875 -2.94531 3.49414 -6.80957 4.04297 -10.4824c1.6543 -2.94531 3.49414 -6.06836 4.41406 -9.74805c0 -3.86426 1.46973 -9.0127 1.46973 -13.6064
-c0 -7.3584 -4.22949 -14.1611 -4.22949 -21.6992c0 -2.20996 2.75977 -3.67969 4.78516 -5.14844c2.93848 -2.38965 6.43262 -3.86426 9.00684 -6.06836c1.29004 -1.46973 2.94434 -2.94531 2.94434 -3.67969c0 -1.46875 -1.6543 -3.8584 -2.94434 -3.8584
-c-2.57422 -0.740234 -4.77832 -2.20996 -7.53809 -1.47559c-3.49414 0.735352 -6.25391 2.94531 -9.74805 2.94531c-0.734375 0 -0.734375 -3.67969 -2.20312 -3.67969c-2.75977 0 -6.98828 1.46973 -8.45801 3.67969c-1.29004 3.12305 0 6.80273 0 10.6611
-c0.549805 2.94434 2.2041 5.1543 2.2041 8.09375c0 3.86426 -3.12402 7.53711 -3.12402 10.4824c0 4.59863 3.12402 9.74707 2.38965 14.3408c0 2.20996 -2.38965 4.41406 -4.96387 6.06836c-2.02441 1.47461 -6.25391 6.62402 -9.74805 5.14844
-c-6.61816 -2.2041 -11.4023 -10.4766 -16.915 -14.8906c-6.98828 -6.06836 -16.3711 -11.4023 -21.6992 -18.7607c-2.02539 -2.38867 0.734375 -6.06836 1.83984 -9.00684c0 -2.38965 2.38867 -4.59961 2.38867 -6.80371
-c0.734375 -1.47461 2.2041 -3.67871 0.734375 -5.33301c-0.734375 -1.46973 -3.12305 -2.20996 -4.96289 -1.46973c-2.02539 0 -5.14844 2.38965 -6.98828 3.8584c-2.02539 2.20996 -4.41406 5.88379 -5.51953 9.0127c-0.918945 1.46973 -0.918945 3.67383 -1.46875 4.41406
-c-2.02539 0.735352 -4.41406 -1.47461 -5.88379 -0.740234c-1.10449 2.20996 -2.57422 6.80859 -0.370117 9.0127c1.83984 4.41406 8.27246 5.14941 12.5078 8.27246c2.20312 2.20996 6.06836 6.62402 8.45703 9.01367c3.49414 4.41406 7.72266 5.14844 10.4824 10.4824
-c0 0.734375 -2.75977 5.88281 -2.75977 7.53711c0 2.94531 1.83984 7.35938 2.75977 11.2178c0 1.46875 1.46973 5.14844 0 5.88281c-2.02441 0.741211 -5.88867 -0.734375 -6.98828 -2.2041c-2.75977 -2.20996 -2.75977 -7.53711 -6.25391 -9.74707
-c-2.20312 -2.2041 -6.98828 -4.41406 -9.93262 -2.93945c-2.01855 0.735352 -2.01855 4.4082 -2.01855 6.61816c0.549805 3.8584 4.96289 5.33398 6.25391 8.27246c3.49414 7.54395 4.77832 15.8164 7.72266 23.3545c4.22852 8.27832 8.45703 17.1055 12.6865 23.9092
-c4.22852 6.06836 10.4824 9.74121 13.0566 14.3408c0.919922 2.2041 -0.370117 4.41406 -0.370117 6.61816c0 0 -5.69824 -3.49414 -7.16797 13.6123c-0.919922 17.0996 8.45801 21.6934 13.4209 23.168c5.51953 0.735352 12.3223 4.59961 16.7363 -1.47461
-c5.69824 -5.32812 6.43262 -9.00781 6.43262 -15.0762c0 -4.41406 3.49414 -12.6865 -1.46875 -17.835c-4.22949 -4.59863 -5.88379 -7.54297 -5.88379 -7.54297c7.35254 -7.35352 11.9521 -17.2861 19.3047 -24.0889c2.02441 -2.93848 7.54395 -5.14844 10.4824 -4.41406
-c7.3584 1.47559 15.4453 6.80273 21.6992 10.4824c2.02441 1.6543 2.57422 4.41406 4.22852 6.80273c5.51953 17.1064 9.74805 36.5957 16.1865 53.1465c4.04395 11.9521 10.4766 23.1689 16.7305 33.8369c4.22852 5.88281 10.4824 9.74121 15.4453 14.8906
-c0 0 7.54395 9.0127 6.25391 9.0127v0z" />
-    <glyph glyph-name="uniF188" unicode="&#xf188;" 
-d="M86.2998 134.7v0.0996094c141.8 0 283.601 0 425.7 -0.299805v-232.8h-158.3c0.299805 26.7998 -20.9004 51.0996 -47.4004 55.7998c-33.8994 8.09961 -68.7998 -21.2002 -67.8994 -55.7998h-130.9c-6.90039 0.899414 -16.5 -1.60059 -21.2002 1.2002h-69.5
-c-5.89941 1.5 -19 -4.10059 -16.5 5.89941h86v225.9zM346.107 -101.669c0 -27.5723 -22.377 -49.9492 -49.9492 -49.9492s-49.9502 22.377 -49.9502 49.9492c0 27.5732 22.3779 49.9502 49.9502 49.9502s49.9492 -22.377 49.9492 -49.9502z" />
-    <glyph glyph-name="uniF122" unicode="&#xf122;" 
-d="M217.661 -161.706c-44.5947 0 -80.7471 36.1582 -80.7402 80.752c-0.00683594 44.5908 36.1455 80.75 80.7402 80.75s80.7461 -36.1572 80.7393 -80.7529c0.00683594 -44.5889 -36.1445 -80.749 -80.7393 -80.749zM217.661 -142.706
-c34.1025 0 61.7451 27.6445 61.7393 61.752c0.00585938 34.1045 -27.6367 61.75 -61.7393 61.75c-34.1035 0 -61.7451 -27.6436 -61.7402 -61.7529c-0.00488281 -34.1025 27.6367 -61.749 61.7402 -61.749zM198.228 -1.84082h9.02832v-21.1396h-9.02832v21.1396z
-M292.783 -39.1152v-10.0967h-27.7686v10.0967h27.7686zM269.378 -9.27344v-10.0967h-27.7686v10.0967h27.7686zM364.562 -155.265v0c0 -6.14551 -16.4727 -8.56836 -18.6602 -0.40625l-35.6992 114.399h-81.1338c-14.2559 0 -23.9346 7.28809 -23.9346 17.8496v103.445
-c0 13.3896 50.3027 13.4219 50.3027 0v-51.2119h53.3965c10.4385 -5.78223 8.68848 -11.5645 10.0146 -17.3467h-63.8164v-25.9619l61.2568 0.731445c9.31543 -0.407227 9.87305 -5.12207 12.6895 -11.0303c1.34473 -2.82227 24.2656 -88.0078 35.584 -130.469z
-M206.474 131.811v0c-0.00585938 14.5674 11.8018 26.3789 26.3682 26.3789c14.5674 0 26.374 -11.8115 26.3691 -26.3789c0.00488281 -14.5664 -11.8018 -26.3779 -26.3691 -26.3779c-14.5664 0 -26.374 11.8115 -26.3682 26.3779z" />
-    <glyph glyph-name="uniF10B" unicode="&#xf10b;" 
-d="M101.064 -41.8965c0 35.5791 15.9326 51.542 51.542 51.542c35.5791 0 51.542 -15.9326 51.542 -51.542c0 -35.5791 -15.9326 -51.542 -51.542 -51.542c-35.5791 0 -51.542 15.9326 -51.542 51.542zM88.3486 -41.8965c0 -41.5908 22.6367 -64.2588 64.2578 -64.2588
-c41.5908 0 64.2578 22.6377 64.2578 64.2588c0 41.5908 -22.6367 64.2588 -64.2578 64.2588c-41.5908 0 -64.2578 -22.6377 -64.2578 -64.2588zM307.851 -40.8174c0 35.5781 15.9336 51.541 51.543 51.541c35.5781 0 51.541 -15.9326 51.541 -51.541
-c0 -35.5791 -15.9326 -51.542 -51.541 -51.542c-35.5791 0 -51.543 15.9326 -51.543 51.542zM295.135 -40.8174c0 -41.5908 22.6367 -64.2588 64.2588 -64.2588c41.5898 0 64.2568 22.6377 64.2568 64.2588c0 41.5908 -22.6367 64.2578 -64.2568 64.2578
-c-41.5918 0 -64.2588 -22.6367 -64.2588 -64.2578zM229.741 99.6289v0l-0.27832 -13.1035q-25.4451 0.0452805 -28.7396 -2.2523q-3.29448 -2.29759 -9.17737 -22.8395l114.029 0.27832l4.46094 12.5459q-4.1004 0.909706 -10.9022 2.34084
-q-7.25522 1.52681 -9.87646 2.17024q-10.7649 2.64293 -6.82291 8.03482h57.1543l0.557617 -12.8242l-15.334 -0.279297l-4.46094 -12.2666q48.1831 -107.233 48.2324 -109.011q-0.414856 -5.11989 -4.81595 -6.01603q-4.40109 -0.896133 -24.4718 -0.589638
-q-25.0931 0.38319 -44.8734 0.193558q-7.87537 -1.51688 -15.6794 0.170792t-10.0389 0.0342865t-6.97061 1.49217t-6.47476 4.54445t-8.55121 9.19112q-6.81226 7.79223 -13.2 15.4322t-20.4212 23.2676t-30.2147 32.6975q-7.05077 -21.8952 -15.5605 -49.3556
-q-7.15744 -23.0969 -8.99797 -27.0101q-1.84053 -3.91322 -5.72612 -4.29562l-0.352158 -0.0349808q-6.5943 0.440445 -6.46191 6.67773q0.1091 4.60874 18.7295 63.3008q3.07118 9.86927 7.91637 25.9944q11.5815 38.542 17.7281 44.9758q6.14661 6.4338 31.4448 6.49461
-q5.23003 0.0125732 8.14908 0.0410309zM188.251 47.6826v0l79.332 -86.4541l32.248 86.6523zM313.283 42.5391l-31.6533 -83.0908l69.2422 -0.198242l-37.5889 83.2891v0z" />
-    <glyph glyph-name="uniF108" unicode="&#xf108;" 
-d="M286.212 164.649l0.185547 5.78711l61.8936 -61.8379l-0.0742188 -44.9775l-44.6631 43.8281l0.129883 -258.016l-35.6855 0.0371094l0.0556641 59.9453c-3.51367 24.7861 -17.207 41.8848 -47.1475 48.0947l-65.1953 0.0742188l43.4941 -44.0879l-45.5527 -0.129883
-l-61.4297 62.2822l5.91699 -0.0927734l-5.78711 0.166992l61.8379 61.8936l44.959 -0.0556641l-43.3457 -43.4756l62.6543 0.426758c19.5488 -1.52832 35.7539 -7.07031 49.6699 -15.3574l0.111328 127.923l-44.0869 -43.4941l-0.129883 45.5527l62.2822 61.4297z" />
-    <glyph glyph-name="uniF164" unicode="&#xf164;" 
-d="M97.0645 -256.093c-12.7793 -0.425781 -25.1318 7.66699 -31.0947 19.168c-16.1865 28.1133 18.7412 61.7637 46.8545 46.8555c33.2246 -13.2051 19.5938 -68.5791 -15.7598 -66.0234zM180.126 -256.093c-13.2051 -0.425781 -25.5576 7.66699 -31.5215 19.168
-c-16.6123 28.1133 18.7422 61.7637 46.8555 46.8555c33.2246 -13.2051 20.0205 -68.5791 -15.334 -66.0234zM263.188 -256.093h-0.425781c-12.7793 -0.425781 -25.1318 7.66699 -31.0957 19.168c-16.1855 28.1133 18.7422 61.7637 46.8555 46.8555
-c33.6504 -13.2051 20.0205 -68.5791 -15.334 -66.0234zM346.249 -256.093h-0.426758c-12.7783 -0.425781 -25.1309 7.66699 -31.0938 19.168c-16.1865 28.1133 18.7412 61.7637 46.8545 46.8555c33.6514 -13.2051 20.0205 -68.5791 -15.334 -66.0234zM385.863 -207.96
-v28.9648h-327.562v-32.3721h-57.5039v27.6865c17.4639 4.68555 -0.851562 38.7627 1.7041 54.5225c-4.25977 26.4102 0.851562 52.3926 2.12988 78.8027h28.5391v43.873h48.1328v-40.8916c34.0771 0 68.1533 0 102.229 0.425781c2.55566 32.7988 40.8926 14.0566 50.2627 0
-c16.1865 1.27734 36.207 -7.24121 33.6514 14.9082c12.7783 25.1318 43.4473 9.37109 43.0215 -14.4824c16.1855 -3.83301 38.7617 -3.40723 30.2422 19.5938c4.25977 9.79785 20.0205 2.55566 29.8174 4.68555h112.879
-c0.851562 -14.0557 2.12988 -25.1309 -11.501 -28.1123c-0.852539 -41.7441 0 -83.4883 -0.425781 -125.231c17.8896 7.24121 18.3154 -39.6143 0.425781 -32.373h-86.043zM57.876 59.9668c-28.5391 -10.6484 -14.9082 -53.6699 14.0566 -50.2627
-c19.168 4.68555 20.0205 29.8174 41.7441 28.1133c19.5938 17.0381 27.6865 -24.7061 51.9668 -14.9082c31.0947 1.27734 34.502 40.8916 66.875 41.7432c25.1318 7.24121 25.1318 42.1699 46.4287 51.1152c21.2979 -15.7607 51.541 -24.7061 77.0986 -13.2051
-c36.6318 20.0205 41.3174 74.9688 18.3164 106.915c-15.7607 24.7061 -45.5781 25.5576 -70.709 18.3164c-15.335 11.9268 -30.2432 31.9463 -54.5225 28.5391c-31.0947 5.53711 -33.6504 -37.9102 -62.6162 -32.373c-23.4268 2.55566 -47.2812 -7.24121 -63.8936 -23.8535
-c-20.8711 -21.7236 -23.001 -54.5225 -15.334 -82.209c-6.38965 -13.2051 -36.2061 -1.27832 -41.7441 -23.8535c-5.53711 -10.2236 -7.66699 -22.5762 -7.24121 -34.0771z" />
-    <glyph glyph-name="uniF10D" unicode="&#xf10d;" 
-d="M0 -164v65c128 0 128 100 256 100s128 -100 256 -100v-65h-512z" />
-    <glyph glyph-name="uniF1A1" unicode="&#xf1a1;" 
-d="M248.739 -111.845l0.00976562 -17.5908l33.2939 0.0332031c0.133789 5.69531 0.0419922 12.0205 0.0419922 17.6934c0 17.2695 -11.7393 33.5703 -27.7725 40.0244c-174.376 70.3711 -0.0253906 0.0107422 -0.0253906 0.0107422
-c-158.172 85.2598 -0.0253906 0.0126953 -0.0253906 0.0126953c-2.92871 1.57617 -4.71387 4.6416 -4.71387 7.91895c0 3.80957 2.42773 7.25781 5.99023 8.54395c-0.929688 -0.369141 -0.946289 -0.40918 -0.0283203 -0.0117188
-c14.5928 6.31543 29.8291 8.81445 42.957 19.6797c9.22363 7.6377 14.2773 19.7607 14.2773 31.9082c0 23.417 -19.3975 41.8037 -42.5723 42.5518c-4.96777 0.154297 -9.08887 4.11426 -9.08887 9.13867l0.0107422 13.3027l19.6113 -5.85059
-c2.6123 -0.731445 4.34082 -0.977539 6.17188 0.268555c2.66699 1.81445 3.36816 5.47266 1.5498 8.13965l-44.043 65.1162l-44.1152 -65.1152c-1.81934 -2.66797 -1.11426 -6.32617 1.54883 -8.14062c1.75 -1.18945 3.55859 -0.998047 5.90918 -0.40332l19.9248 5.9873
-l-0.0117188 -13.3145c0 -23.7441 19.4258 -42.5713 42.5479 -42.5713c5.01953 0 9.11914 -4.09375 9.11914 -9.10938c0 -3.39844 -1.84375 -6.79785 -5.02051 -8.13477c-9.83887 -4.13281 -19.9199 -7.62402 -29.7275 -11.749
-c-17.04 -7.17871 -28.4482 -22.3027 -28.4482 -40.2363c0 -16.2324 12.9082 -33.0059 27.7314 -39.8291c3.71387 -1.70508 4.89746 -4.62012 4.89746 -8.27344zM254.711 -70.7676c16.3975 -6.60059 28.374 -23.2256 28.374 -40.9414
-c0 -5.8252 0.0976562 -12.3564 -0.0537109 -18.2061l-0.0126953 -0.487305l-35.2695 -0.0351562l-0.00976562 18.5928c0 3.4248 -1 5.84375 -4.31543 7.36523c-15.1299 6.96387 -28.3135 24.0049 -28.3135 40.7373c0 18.3867 11.709 33.8486 29.0596 41.1582
-c9.84863 4.1416 19.9297 7.63379 29.7275 11.749c2.7334 1.14941 4.40918 4.14746 4.40918 7.21289c0 4.46094 -3.65234 8.10938 -8.11914 8.10938c-23.6689 0 -43.5479 19.2666 -43.5479 43.5713l0.00976562 11.9688l-18.6572 -5.60645
-c-2.42676 -0.614258 -4.61621 -0.899414 -6.7373 0.541992c-3.11816 2.125 -3.94434 6.4043 -1.81445 9.52734l44.9434 66.3379l44.8691 -66.3369c2.13086 -3.12402 1.31055 -7.40332 -1.81348 -9.52832c-2.20605 -1.50195 -4.36816 -1.14453 -7.01172 -0.40332
-l-18.3359 5.46973l-0.00878906 -11.9609c0 -4.45215 3.6582 -8 8.12012 -8.13867c23.6748 -0.764648 43.541 -19.5547 43.541 -43.5518c0 -12.4131 -5.15332 -24.8232 -14.6406 -32.6777c-13.3643 -11.0625 -28.7725 -13.585 -43.1973 -19.8281
-c-130.291 -55.9561 -0.0136719 -0.00585938 -0.0136719 -0.00585938c-136.949 -49.6436 -0.0146484 -0.00585938 -0.0146484 -0.00585938c-3.16406 -1.1416 -5.33008 -4.2168 -5.33008 -7.60254c0 -2.91406 1.56445 -5.62695 4.16309 -7.02539zM248.239 -111.845
-c0 3.53906 -1.0918 6.20605 -4.60645 7.81934c-14.9766 6.89355 -28.0225 23.8008 -28.0225 40.2832c0 18.1602 11.5586 33.4531 28.7539 40.6973c9.82812 4.13379 19.9092 7.625 29.7275 11.749c2.95508 1.24316 4.71484 4.44141 4.71484 7.67383
-c0 4.73828 -3.87598 8.60938 -8.61914 8.60938c-23.3955 0 -43.0479 19.0469 -43.0479 43.0713l0.0107422 12.6416l-19.291 -5.79688c-2.38867 -0.604492 -4.3877 -0.842773 -6.32324 0.472656c-2.89062 1.96973 -3.65625 5.93848 -1.68164 8.83398l44.5293 65.7266
-l44.4561 -65.7266c1.97461 -2.89551 1.21387 -6.86426 -1.68164 -8.83398c-2.01855 -1.37402 -3.96387 -1.07227 -6.5918 -0.335938l-18.9736 5.66016l-0.00976562 -12.6318c0 -4.73828 3.88965 -8.49219 8.60449 -8.63867
-c23.4248 -0.755859 43.0566 -19.3447 43.0566 -43.0518c0 -12.2803 -5.10352 -24.5469 -14.459 -32.293c-13.2461 -10.9639 -28.5684 -13.4746 -43.0771 -19.7539c-3.36328 -1.21387 -5.66016 -4.47559 -5.66016 -8.07324c0 -3.0957 1.6875 -5.99121 4.45117 -7.47852
-c16.2148 -6.52734 28.0859 -22.9961 28.0859 -40.4883c0 -5.83008 0.0976562 -12.3584 -0.0537109 -18.1934l-34.2822 -0.0341797z" />
-    <glyph glyph-name="uniF100" unicode="&#xf100;" 
-d="M141 6v66l115 115l115 -115v-66l-89 89v-284h-52v284z" />
-    <glyph glyph-name="uniF161" unicode="&#xf161;" 
-d="M236.569 128h37.9307v-97.6885h36.0244v12.5273v0.0449219h26.3154v-12.4424h24.8525v12.5508h26.2627v-12.4834h25.0977v-20.1768h-31.833v-18.4805h31.8154v-19.8994h-24.9424v-12.291h-26.2051v12.2246h-24.8555v-12.3311h-26.3828v12.0527h-36.1494v-97.085h-37.9307
-v97.085h-36.167v-12.0527h-26.3838v12.3311h-24.8545v-12.2246h-26.2051v12.291h-24.9414v19.8994h31.8135v18.4805h-31.8311v20.1768h25.1152v12.4834h26.2617v-12.5508h24.834v12.4424h26.3135v-0.0449219v-12.5273h36.0449v97.6885v0zM274.5 -8.42969h42.46v18.6064
-h-42.46v-18.6064v0zM236.569 10.1768h-42.4785v-18.6064h42.4785v18.6064v0zM330.529 10.2793v-18.4004h36.9678v18.4004h-36.9678v0zM180.41 10.2793h-36.9678v-18.4004h36.9678v18.4004v0z" />
-    <glyph glyph-name="uniF194" unicode="&#xf194;" 
-d="M324.168 -44.8613c4.47461 0 8.57617 -0.90332 12.3057 -2.70898s6.94824 -4.51367 9.65625 -8.125s4.82812 -8.06641 6.35938 -13.3662c1.53027 -5.29883 2.2959 -11.4023 2.2959 -18.3115c0 -6.9873 -0.765625 -13.1104 -2.2959 -18.3701
-c-1.53125 -5.25977 -3.65137 -9.65625 -6.35938 -13.1895c-2.70801 -3.53223 -5.92676 -6.20215 -9.65625 -8.00781s-7.83105 -2.70801 -12.3057 -2.70801c-4.47559 0 -8.57715 0.902344 -12.3066 2.70801c-3.72852 1.80566 -6.94727 4.47559 -9.65625 8.00781
-c-2.70801 3.5332 -4.80859 7.92969 -6.2998 13.1895s-2.2373 11.3828 -2.2373 18.3701c0 6.90918 0.746094 13.0127 2.2373 18.3115c1.49121 5.2998 3.5918 9.75488 6.2998 13.3662c2.70898 3.61133 5.92773 6.31934 9.65625 8.125
-c3.72949 1.80566 7.83105 2.70898 12.3066 2.70898v0zM324.168 -56.6377c-5.88867 0 -10.5205 -2.53125 -13.8965 -7.5957c-3.375 -5.06348 -5.06348 -12.7764 -5.06348 -23.1396c0 -10.3623 1.68848 -18.0762 5.06348 -23.1396
-c3.37598 -5.06348 8.00781 -7.5957 13.8965 -7.5957c5.8877 0 10.5391 2.53223 13.9541 7.5957s5.12305 12.7773 5.12305 23.1396c0 10.3633 -1.70801 18.0762 -5.12305 23.1396c-3.41504 5.06445 -8.06641 7.5957 -13.9541 7.5957v0zM399.181 -44.8613
-c4.47461 0 8.57715 -0.90332 12.3057 -2.70898c3.72949 -1.80566 6.94824 -4.51367 9.65625 -8.125c2.70898 -3.61133 4.82812 -8.06641 6.35938 -13.3662c1.53125 -5.29883 2.29688 -11.4023 2.29688 -18.3115c0 -6.9873 -0.765625 -13.1104 -2.29688 -18.3701
-s-3.65039 -9.65625 -6.35938 -13.1895c-2.70801 -3.53223 -5.92676 -6.20215 -9.65625 -8.00781c-3.72852 -1.80566 -7.83105 -2.70801 -12.3057 -2.70801s-8.57715 0.902344 -12.3057 2.70801c-3.72949 1.80566 -6.94824 4.47559 -9.65625 8.00781
-c-2.70898 3.5332 -4.80859 7.92969 -6.30078 13.1895c-1.49121 5.25977 -2.2373 11.3828 -2.2373 18.3701c0 6.90918 0.746094 13.0127 2.2373 18.3115c1.49219 5.2998 3.5918 9.75488 6.30078 13.3662c2.70801 3.61133 5.92676 6.31934 9.65625 8.125
-c3.72852 1.80566 7.83105 2.70898 12.3057 2.70898v0zM399.181 -56.6377c-5.8877 0 -10.5195 -2.53125 -13.8955 -7.5957c-3.37598 -5.06348 -5.06348 -12.7764 -5.06348 -23.1396c0 -10.3623 1.6875 -18.0762 5.06348 -23.1396s8.00781 -7.5957 13.8955 -7.5957
-s10.54 2.53223 13.9551 7.5957s5.12207 12.7773 5.12207 23.1396c0 10.3633 -1.70703 18.0762 -5.12207 23.1396c-3.41504 5.06445 -8.06738 7.5957 -13.9551 7.5957v0z" />
-    <glyph glyph-name="uniF17B" unicode="&#xf17b;" 
-d="M224.627 -35.2607c2.08887 0 3.79785 -0.854492 3.79785 -1.89551c0 -0.942383 -1.375 -1.75391 -3.21387 -1.88184l-8.42285 -0.655273c-47.8643 -3.70508 -79.667 -13.3389 -79.667 -24.0996c0 -3.3623 3.53418 -6.45605 9.2998 -8.18066l1.07617 -0.3125
-c1.61133 -0.485352 2.5293 -2.16602 2.0459 -3.79102c-0.320312 -1.1123 -1.26758 -1.93848 -2.4082 -2.1377l-1.66016 -0.270508c-13.1963 -2.19434 -26.7646 2.6084 -30.3271 10.7461c-0.570312 1.28223 -0.847656 2.6084 -0.847656 3.94727
-c-0.00195312 15.7617 49.3867 28.5312 110.327 28.5312v0zM156.141 -113.246c-6.83301 0 -13.6465 0.68457 -20.3447 2.02441c-3.5918 0.740234 -5.92871 4.24609 -5.19434 7.85254c0.727539 3.60547 4.23242 5.92773 7.83887 5.20117
-c0.157227 -0.0273438 0.306641 -0.0712891 0.449219 -0.114258l3.18457 -0.869141c6.43457 -1.78125 13.0898 -2.69336 19.7744 -2.69336c23.1172 0 41.8496 6.82617 41.8496 15.2061c0 2.87891 -3.19238 5.58691 -8.50781 7.14062l-7.00488 2.10938
-c-6.88379 2.03711 -11.1162 5.78613 -11.1162 9.80371c0 13.1123 40.0264 23.7725 89.4014 23.7725c2.10254 0 3.80469 -0.855469 3.80469 -1.90918c0 -0.941406 -1.33887 -1.72461 -3.19238 -1.86719l-6.05762 -0.499023
-c-38.002 -3.13477 -63.0273 -10.873 -63.0273 -19.4971c0 -2.87793 3.19141 -5.54199 8.50098 -7.13965l6.99707 -2.09375c6.89844 -2.05273 11.1309 -5.77246 11.1309 -9.82031c0 -14.6797 -30.6611 -26.6074 -68.4863 -26.6074v0zM287.393 -52.377
-c1.4248 0 2.59277 -0.584961 2.59277 -1.29785c0 -0.442383 -0.455078 -0.855469 -1.22559 -1.08301l-2.60742 -0.827148c-6.25684 -1.9668 -10.1689 -5.85645 -10.1689 -10.1045c0 -9.60547 17.166 -17.7002 40.0264 -18.8838l43.04 -2.22266
-c22.2607 -1.15527 38.6504 -7.53906 38.6504 -15.0508c0 -6.2998 -11.0596 -11.4014 -24.7129 -11.4014c-0.426758 0 -0.754883 0.342773 -0.754883 0.769531c0 0.199219 0.0859375 0.414062 0.227539 0.556641l1.55371 1.40918
-c1.7959 1.66797 2.76465 3.70703 2.76465 5.8291c0 5.84375 -10.3467 10.7598 -23.9434 11.3447l-48.1992 2.08105c-27.0918 1.18262 -47.6865 10.5596 -47.6865 21.7617c0.000976562 9.4375 13.6328 17.1191 30.4434 17.1191v0zM170.678 61.6807
-c0.698242 2.62207 2.23047 4.93066 4.34668 6.61133l3.28516 2.55176c2.28711 1.80957 4.36133 3.8916 6.18457 6.1709l25.7178 32.3096c2.58008 3.23535 6.84082 4.63184 10.8389 3.57617l100.604 -26.9785c4.01758 -1.06836 7.01172 -4.40332 7.62402 -8.49316
-l6.11426 -40.8604c0.442383 -2.89355 1.19727 -5.70117 2.28027 -8.4082l1.56738 -3.8623c0.998047 -2.50781 1.16895 -5.28613 0.456055 -7.91016l-6.99707 -26.1377c-1.49707 -5.55762 -7.19727 -8.86426 -12.7549 -7.36816l-148.916 39.877
-c-5.55957 1.51074 -8.85742 7.21191 -7.36914 12.7842l7.01855 26.1377v0zM169.944 18.7539v0l24.1572 -6.4707l-5.94336 -22.1338c-0.890625 -3.33398 -4.31836 -5.31543 -7.64648 -4.43164l-12.0713 3.25c-3.34277 0.882812 -5.30859 4.31934 -4.41797 7.65332z
-M294.718 -14.6807l24.1416 -6.46973l-5.92773 -22.1328c-0.899414 -3.33496 -4.33203 -5.31641 -7.66797 -4.43262l-12.0557 3.24902c-3.33496 0.883789 -5.33105 4.31934 -4.41895 7.6543l5.92871 22.1318v0z" />
-    <glyph glyph-name="uniF152" unicode="&#xf152;" 
-d="M192.944 116.353v-105.266h73.4619c18.3662 -0.000976562 32.0654 5.52441 41.0986 16.5732s13.5508 23.0693 13.5508 36.0596c0 19.709 -7.09277 34.1924 -21.2773 43.4502c-9.1084 6.12109 -20.8291 9.18262 -35.1631 9.18262h-71.6709v0zM143.447 -163.162v326.324
-h118.48c12.6914 0 24.8975 -1.34375 36.6191 -4.03125c11.7207 -2.68848 23.9268 -8.95898 36.6191 -18.8135c9.85449 -7.61523 18.2158 -18.1045 25.084 -31.4678c6.86816 -13.3643 10.3027 -28.8555 10.3027 -46.4736c0 -23.293 -8.69727 -45.4668 -26.0928 -66.5195
-c-17.3945 -21.0537 -42.8154 -31.5801 -76.2617 -31.5801h-75.2539v-127.438h-49.4971v0z" />
-    <glyph glyph-name="uniF109" unicode="&#xf109;" 
-d="M307.817 32.7734l-0.626953 -155.488l45.1318 -0.178711l0.587891 155.258l2.89844 0.0498047l14.7324 -8.60547c6.69336 -3.5957 14.7119 4.06348 10.4883 11.2061l-46.5762 76.2598c-2.7002 4.19336 -6.61426 4.34277 -9.37402 -0.0800781l-47.333 -75.9512
-c-3.79492 -6.0459 2.4502 -15.1602 9.96094 -11.1953l18.5371 9.68164c0.806641 0.308594 1.62305 0.109375 1.57324 -0.956055zM154.432 -41.6338l0.438477 155.487l45.1221 -0.128906l-0.458008 -155.269l2.89844 -0.0800781l14.7617 8.52637
-c6.74316 3.52637 14.7021 -4.17383 10.4287 -11.2949l-47.1045 -75.9512c-2.71875 -4.16406 -6.62402 -4.30371 -9.35352 0.15918l-46.8252 76.2695c-3.74512 6.07617 2.55957 15.1406 10.04 11.1162l18.4678 -9.80176
-c0.816406 -0.298828 1.63379 -0.119141 1.58398 0.966797z" />
-    <glyph glyph-name="uniF19F" unicode="&#xf19f;" 
-d="M205.169 96.1387l8.32715 6.61523l10.4092 21.9336c1.95117 2.12793 3.92773 4.43457 4.8584 -0.347656l-3.4707 -18.1045l4.68066 1.83301c6.6582 6.24609 8.9082 15.2578 13.3623 22.8867l3.46973 -0.348633l-2.77539 -13.5781l2.08203 -1.39258
-c6.51855 5.13574 10.2314 11.3984 12.8379 18.1045c1.31641 -0.00195312 2.37109 1.70996 4.16406 -1.39258c-0.0654297 -7.83008 -3.20996 -13.9424 -7.98047 -19.1494l-30.8809 -18.4531l0.34668 -1.74023l19.4307 -0.696289
-c-1.98438 -4.04395 -5.02637 -7.02637 -9.36816 -8.7041l-7.63379 -1.74121c4.73828 -27.2139 14.1309 -50.8057 32.6162 -60.9297l81.1914 -24.3711c12.5117 -6.58691 30.0947 -8.84668 21.5127 -33.4238v-9.40039c3.84961 -11.1738 10.9971 -21.7041 28.1055 -30.291
-l16.6543 -33.0762c3.10938 -2.7959 2.84473 -5.57129 11.6582 -6.68359l2.70801 -17.8975c-16.4766 5.9668 -27.9404 22.3545 -39.3486 38.8564c-12.6523 8.43848 -26.7588 12.542 -40.1104 17.8252c-17.9326 12.5479 -22.6387 22.3809 -24.4268 31.6143
-c-27.6387 1.88867 -55.3408 3.27734 -81.5391 16.3643l-2.77637 -5.22266l-43.7188 11.4893c6.12305 -6.92871 4.78418 -21.1357 22.9004 -16.3643l9.71582 -16.3633c-12.2422 0.924805 -24.5996 1.12988 -35.0449 13.2305l-16.3076 29.2461
-c-1.03809 4.38965 0.734375 7.2627 4.51074 9.05176l41.2178 -7.86621c-4.37891 3.47949 -6.03809 8.51855 -7.9082 13.4375l-7.98047 68.2402l-28.7988 8.00781l0.693359 9.74902z" />
-    <glyph glyph-name="uniF128" unicode="&#xf128;" 
-d="M4.47461 140.85l62.5908 2.4082c32.499 11.0732 119.644 -86.1826 119.644 -86.1826l46.9434 17.8145l-6.74121 38.998l-7.94434 -11.0732l-40.2021 -16.8516l-8.90723 10.1113l41.4062 25.7578c4.33301 68.127 58.2568 68.127 65.9609 14.4443
-c5.77734 -39.4805 10.1104 -62.5908 10.1104 -62.5908c3.37012 -8.90723 -2.16602 -17.8145 -2.16602 -17.8145l36.832 5.53711c51.2754 5.77734 65.96 -7.70312 65.96 -7.70312c26.7217 16.8516 97.9785 19.499 99.4229 -58.0166
-c0.962891 -43.5723 24.5547 -55.8496 24.5547 -55.8496c-4.57422 -14.4443 -50.3135 -20.2217 -58.2578 10.1104c-7.70312 30.332 -3.37012 97.2559 -50.3125 95.0898l-3.37012 -0.962891c22.3877 -15.6484 35.8691 -47.9062 21.1846 -79.4424
-c-20.2217 -43.5723 12.2773 -65.96 12.2773 -65.96v-41.4062c6.74023 -32.499 27.9248 -51.5166 27.9248 -51.5166v-30.332c-43.5723 19.0176 -38.0361 55.8496 -38.0361 55.8496c-0.962891 57.0537 -51.5166 80.4043 -51.5166 80.4043l-0.962891 -40.2021
-l-11.0732 -23.5918l-2.40723 -45.7393c-30.0918 -10.1104 -30.0918 -36.832 -30.0918 -36.832l-26.9619 1.2041c-2.16699 23.3506 16.8506 24.5547 16.8506 24.5547c62.5908 80.4043 -1.20312 153.105 -1.20312 153.105
-c-61.3867 -44.7764 -144.198 -16.8516 -144.198 -16.8516c-10.1113 -81.6074 29.6094 -129.995 29.1279 -130.717c-7.94336 -11.0742 -5.53613 -30.0918 -5.53613 -30.0918l-26.9619 -1.2041c-1.2041 12.2773 11.0732 27.9248 11.0732 27.9248
-c-14.4443 70.5352 -59.2197 120.607 -59.2197 120.607c-58.0166 -19.0176 -77.2754 -81.6084 -77.2754 -81.6084c-8.90723 -33.4619 4.57422 -41.4062 4.57422 -41.4062l-14.4443 -19.0176l-13.4805 34.666v15.6475c35.1465 90.7559 80.8857 127.588 80.8857 127.588
-c-13.2402 15.6475 -4.33398 52.4795 -4.33398 52.4795l-33.4609 64.9971l-24.7959 -33.4609c4.57422 -11.0742 -27.9248 -29.1289 -30.0918 0c-2.16602 29.1279 0 51.5166 0 51.5166l-7.70312 13.4805l13.4814 29.1289l-8.90723 13.4805zM239.911 182.497
-c14.4434 0 25.999 11.7959 25.999 25.999c0 14.4434 -11.5557 26.2393 -25.999 26.2393c-14.4443 0 -25.999 -11.7959 -25.999 -26.2393c0 -14.4443 11.5547 -25.999 25.999 -25.999z" />
-    <glyph glyph-name="uniF10A" unicode="&#xf10a;" 
-d="M204.8 -256v179.2c0 70.6562 57.3438 128 128 128h179.2v-102.4h-179.2c-14.1309 0 -25.5996 -11.4688 -25.5996 -25.5996v-179.2h-102.4z" />
-    <glyph glyph-name="uniF15F" unicode="&#xf15f;" 
-d="M403.6 65.2324v0l0.93457 -8.58008v-8.57422l-0.157227 -2.96191l-0.621094 -5.61328l-0.936523 -5.76855l-0.62207 -2.80566l-2.33789 -8.2627l-0.936523 -2.80566l-1.0918 -2.65039l-2.33887 -5.14355l-4.20703 -7.64062l-1.56152 -2.49414l-1.55762 -2.33789
-l-1.71582 -2.33789l-3.58398 -4.52148l-3.89941 -4.20801l-2.02734 -2.02637l-2.18066 -2.02539l-2.18262 -1.87109l-4.52246 -3.58594l-2.33887 -1.55957l-2.33789 -1.71289l-2.49414 -1.55957l-4.99023 -2.80762l-5.14355 -2.49414l-5.2998 -2.18457l-2.80566 -0.93457
-l-0.231445 -0.0644531v-0.408203h-1.44531l-6.58789 -1.86426l-2.80762 -0.623047l-2.80762 -0.46875l-2.95996 -0.311523l-3.84668 -0.265625h-33.0244v-0.513672v-104.562h-49.1309v105.073h-50.8594l6.01758 -18.877v-2.59766
-c0 -4.87012 -2.59961 -8.44238 -7.7959 -8.44238c-1.94922 0 -3.57227 0.323242 -5.19629 1.29785l-74.7031 51.3164v1.29883l75.3525 51.9648c0.649414 0.651367 1.62207 0.651367 2.59766 0.651367h1.62402c5.19629 0 8.11914 -2.92285 8.11914 -8.11914v-2.92383
-c-0.863281 -2.58789 -4.01465 -13.0586 -5.40137 -17.4551h50.2363v60.627h0.262695l0.00292969 2.59766l0.947266 8.33105l1.88086 8.14258l0.790039 2.68164l0.950195 2.68652l2.19824 5.18066l2.50781 5.0166l1.42871 2.53418l3.12891 4.69434l1.5918 2.22461
-l5.50781 6.44629l4.07129 3.75586l2.20312 1.88867l2.20508 1.73047l2.19922 1.57031l4.7168 3.1416l2.52051 1.41797l5.03125 2.5127l2.6748 1.09961l5.18066 1.88281l2.68848 0.790039l5.48828 1.25293l5.49414 0.941406l2.84082 0.313477l2.84082 0.157227
-l5.64844 -0.000976562l2.8418 -0.158203l5.49121 -0.62793l5.51855 -0.949219l2.78125 -0.771484l2.71387 -0.642578l2.6543 -0.936523l7.22266 -2.4502l6.13086 -3.12598l5.14453 -2.65137l4.99023 -2.80566l2.33789 -1.55957l4.67676 -3.43066l2.33887 -1.86914
-l2.18359 -1.87109l4.20801 -3.89746l3.89746 -4.20996l1.87109 -2.18262l3.58496 -4.52051l3.11914 -4.67676l1.55957 -2.49414l2.80566 -5.14355l1.24707 -2.49414l3.27539 -7.9502l0.93457 -2.80762l1.55957 -5.45508l1.24805 -5.76855zM354.958 48.3945v0
-l0.152344 2.80957l-0.311523 5.6123l-0.46875 2.80566l-0.623047 2.80762l-0.779297 2.65039l-0.93457 2.64941l-2.49609 5.14453l-1.40332 2.49414l-1.71387 2.33789l-1.71484 2.18262l-1.86914 2.02637l-2.18457 2.02734l-2.18066 1.87109l-2.18262 1.71289
-l-2.35645 1.32324l-0.139648 0.0791016l-2.33789 1.40332l-2.65234 1.24707l-2.64941 1.0918l-3.76367 1.07422l0.0234375 0.015625l-0.993164 0.261719l-0.720703 0.206055l-0.169922 0.0283203l-1.07812 0.283203l-2.96094 0.467773h-3.11719l-2.96191 -0.15625
-l-2.96094 -0.779297l-2.96191 -0.935547l-2.64941 -1.40234l-2.65039 -1.55957l-2.33789 -2.02637l-2.18262 -2.18262l-1.71582 -2.33887l-1.55957 -2.64941l-1.24805 -2.80566l-0.93457 -2.96191l-0.46875 -2.96094l-0.174805 -1.74707h0.407227v-60.627h33.0225v-0.297852
-h0.416992l2.80762 0.779297l1.3877 0.489258l1.26172 0.445312l5.14355 2.49414l4.67676 3.11719l2.34082 1.87109l2.02441 1.87109l2.0293 2.02637l1.71289 2.18457l1.71582 2.33789l1.55859 2.33887l1.4043 2.49414l2.18262 5.14355l1.55957 5.61328l0.466797 2.64941z
-" />
-    <glyph glyph-name="uniF190" unicode="&#xf190;" 
-d="M240.583 -15.082l3.16797 1.83105c1.69824 0.967773 3.76074 0.800781 5.26465 -0.270508c-0.181641 1.83691 0.696289 3.70117 2.39453 4.67676l3.1748 1.83496c2.31152 1.33008 5.29102 0.537109 6.61523 -1.7666l8.0918 -14.002
-c1.33496 -2.31055 0.529297 -5.28809 -1.78223 -6.625l-3.16309 -1.82227c-1.69824 -0.976562 -3.75977 -0.814453 -5.26367 0.263672c0.182617 -1.83691 -0.696289 -3.70312 -2.3877 -4.69141l-3.1748 -1.81934c-2.31934 -1.33496 -5.28418 -0.541992 -6.62793 1.76172
-l-8.08398 13.9961c-1.33008 2.3125 -0.529297 5.29102 1.77441 6.63281zM292.112 14.6543l3.17578 1.83887c1.70605 0.966797 3.75293 0.799805 5.25879 -0.27832c-0.175781 1.83691 0.710938 3.70117 2.40137 4.68262l3.1748 1.83691
-c2.30469 1.3291 5.29102 0.536133 6.62793 -1.77441l8.08398 -13.9961c1.32324 -2.30371 0.537109 -5.28906 -1.77441 -6.625l-3.17578 -1.8252c-1.69922 -0.980469 -3.76172 -0.814453 -5.25098 0.263672c0.167969 -1.83691 -0.710938 -3.7002 -2.40137 -4.68164
-l-3.17578 -1.82422c-2.31152 -1.33691 -5.29102 -0.550781 -6.62109 1.75977l-8.09766 13.9941c-1.32324 2.30762 -0.529297 5.29395 1.77441 6.62891zM185.253 70.7891l74.1514 42.7852l49.251 -85.2646l-74.1514 -42.793l-49.251 85.2725zM139.899 -65.1748v12.5957
-h241.918v-12.5957h-241.918zM370.733 109.107v0c2.17285 -0.166992 3.80859 -2.06152 3.64648 -4.23926l-3.51562 -49.2295l-44.4346 21.5596c-1.95605 0.953125 -2.79102 3.30469 -1.83789 5.28125c0.625977 1.30859 1.77734 1.81055 3.25195 2.22168l12.1982 2.86621
-l-6.72559 11.7344c-26.5039 45.9502 -85.6162 61.7832 -131.562 35.2617c-28.5752 -16.4883 -45.3584 -45.5693 -47.7002 -76.2393v-68.877h-21.6748v69.0508h0.237305c2.45117 38.0127 23.0771 74.2002 58.4307 94.5986c56.1572 32.4092 128.401 13.0635 160.817 -43.0928
-l6.74121 -11.7266l8.47363 8.96484c1.16797 1.20312 2.12305 1.96973 3.6543 1.86523zM320.993 -140.732v0c0 -16.3047 -13.5908 -28.0371 -32.626 -28.0391c-10.5898 0 -20.1074 2.76953 -29.8965 8.75391l7.3457 11.6777
-c6.78809 -4.06934 14.668 -6.24902 22.5508 -6.24902c11.6895 0 18.7627 5.1582 18.7627 13.8564c0 4.07812 -1.89844 8.15039 -4.89941 10.5986c-2.70898 2.1709 -6.78809 3.25586 -12.498 3.25586c-5.16699 0 -9.24609 -0.799805 -14.9561 -2.99219l-13.8633 3.53613
-l2.44336 36.4121h51.6543l-0.263672 -13.584h-38.335l-0.813477 -11.1445c6.25098 1.37305 10.0527 1.90234 14.9404 1.90234c17.6855 0 30.4541 -11.957 30.4541 -27.9844zM247.594 -143.188v0c0 -14.3906 -13.3242 -25.5811 -30.7217 -25.5811
-c-9.51758 0 -19.0361 3.31152 -25.8242 9.56152c-1.90039 1.62695 -3.2666 2.99219 -5.97461 6.24805l11.1328 8.41895c5.44434 -7.06445 12.5107 -10.0498 21.4717 -10.0498c9.5166 0 16.0479 4.34375 16.0479 10.8643c0 3.80859 -2.44336 8.15039 -5.97363 10.0498
-c-2.17188 1.09277 -4.63574 1.63574 -7.61719 1.63574h-3.80859v13.8623h3.25781c5.99512 0 10.3398 3.25586 10.3398 7.59961c0 4.63477 -5.43848 8.17285 -13.5977 8.17285c-6.53125 0 -12.5117 -2.72656 -17.1279 -7.6084l-10.333 9.50781
-c7.6084 7.88477 17.1211 11.957 28.2744 11.957c15.498 0 26.917 -9.25 26.917 -21.7354c0 -5.17773 -1.63574 -8.70605 -6.25195 -14.6855c7.61035 -6.79883 9.78906 -10.875 9.78906 -18.2178z" />
-    <glyph glyph-name="uniF168" unicode="&#xf168;" 
-d="M200.92 88.9199l64.1719 62.5879l64.2695 -62.6211l0.0986328 -240.395l-64.3682 63.3799l-64.2705 -63.3467v127.089h-66.2812l0.329102 38.9775l66.0508 -0.65918v74.9873z" />
-    <glyph glyph-name="uniF1A2" unicode="&#xf1a2;" 
-d="M104.251 39.6865c3.41016 9.04395 9.96777 10.4512 15.4766 17.3262c11.0771 13.8184 26.001 26.9824 43.334 33.2656c14.6016 5.29297 30.9111 10.9355 48.0684 11.6221c13.7471 0.545898 27.0576 -1.22559 41.2822 -3.58203
-c5.56934 -0.922852 11.4473 -4.15527 17.4941 -6.78809c5.56836 -2.42383 8.9043 -6.2959 15.3408 -7.66309c6.23535 -1.31934 12.7451 -6.16797 18.6572 -8.08008c3.7666 -1.20605 6.22852 -3.63672 9.9209 -4.95605c12.0791 -4.31641 23.9229 -8.875 35.9619 -10.9492
-c0.484375 -0.0810547 1.35254 -0.458008 1.42578 0.00585938c1.2041 7.33301 12.0391 19.8184 14.125 17.6094c2.65625 -2.80176 4.94922 -5.62305 7.56641 -8.45801c2.81738 -3.06348 -0.632812 -18.0938 2.19238 -21.1104
-c7.06836 -7.52148 15.624 -13.2188 21.8115 -20.4639c0.477539 -0.55957 0.955078 -1.11816 1.41895 -1.67676c4.61426 -5.48828 2.64355 -11.959 6.21484 -17.373c3.0127 -4.56641 3.63867 -10.3164 6.3418 -14.5459c7.26367 -11.333 8.54883 -21.5811 5.7373 -32.7666
-c-1.14355 -4.53809 -5.06445 -8.80762 -9.73242 -11.9189c-4.14941 -2.76758 -15.2803 -5.17773 -25.0596 -3.23828c-0.612305 0.121094 -0.686523 2.77441 -2.67676 4.0332c-2.5625 1.62988 -7.14258 1.94629 -7.91602 2.00684
-c-1.21777 0.100586 -27.5762 12.3027 -37.7793 8.26855c-4.16309 -1.64941 -15.4688 0.046875 -18.7842 -1.08398c1.88281 1.37402 3.22168 3.27246 3.22168 5.43457c0 2.20898 2.79102 3.87207 4.74121 3.31934h5.2998c0.558594 0.276367 0 0.828125 0.833984 0.828125
-c0.558594 0 0.558594 0.276367 1.11621 0.552734c0 0 0.84082 1.93262 0.558594 2.20898c-0.275391 0.275391 -1.39258 -0.276367 -1.39258 -0.276367c-0.282227 0 -3.06641 -0.552734 -3.06641 -0.552734c-1.6748 0 -8.09082 -1.93262 -8.64941 -3.03613
-c0 0 -0.558594 -1.65723 -0.558594 -1.93262c-0.275391 -0.55957 -1.11621 -1.93945 -1.11621 -2.49219c-0.275391 -1.36621 -0.551758 -2.72656 -1.09668 -4.09375c-0.550781 -0.208984 -0.853516 -0.511719 -0.820312 -0.929688
-c0.498047 -6.12109 -2.19922 -16.9014 -6.46973 -26.9219c-6.24805 -14.6523 -15.8662 -27.6758 -23.8359 -22.1611c-2.13867 1.48145 0.181641 5.07129 -0.0205078 7.13184c-0.174805 1.83105 -0.0136719 3.44727 -2.16602 4.53809
-c-0.975586 0.492188 -1.10938 5.50879 -0.699219 7.28613c0.107422 0.47168 1.90332 2.45801 0.295898 4.76074c-4.10938 5.87207 -17.6885 15.8242 -19.2627 15.9863c-8.23242 0.828125 -19.1953 0.208984 -31.3018 -1.28613
-c-4.96289 -0.613281 -11.8643 -0.56543 -17.0225 -1.93262c-5.00391 -1.32031 -3.75977 -3.62305 -7.81543 -7.64258c-3.1748 -3.15137 -7.56641 -15.5283 -5.25977 -21.8115c0.34375 -0.935547 0.942383 -2.84863 1.74902 -2.77441
-c8.48145 0.734375 13.7881 -6.7002 11.7295 -7.89844c-2.21289 -1.2998 -6.16016 -1.74414 -11.1582 -1.58887c-4.56641 0.141602 -4.20996 -6.73438 -10.0273 -5.79785c-3.57129 0.579102 -7.44531 1.47461 -11.4404 2.56543
-c-3.49121 0.956055 -7.0957 1.52832 -10.6943 2.67969c-5.40039 1.7373 0.53125 26.4639 -4.37793 28.4502c-1.68164 0.6875 -3.41699 3.25977 -5.44824 2.99023c-10.9697 -1.46094 -25.1338 1.03711 -27.1992 1.69727
-c-2.19238 0.700195 -5.75684 -9.95312 -3.61816 -12.6465c1.56738 -1.96582 13.6797 -7.51465 13.0684 -8.61914c-1.69531 -3.04395 -10.0557 -2.7207 -19.7939 -2.84863c-13.7744 -0.181641 -19.0342 -0.558594 -23.3447 5.23242
-c-3.31641 4.45801 6.81934 14.2686 6.28809 20.8145c-1.3584 16.8145 -11.5283 11.4609 -13.1289 27.6152c-0.275391 2.80762 -1.36523 11.7842 -0.396484 19.4072c0.854492 6.71973 3.71289 12.1406 4.5127 14.834l3.2627 10.9961l4.08203 28.4307v0zM396.552 -29.8672
-c-1.11719 -0.828125 -1.95703 -1.93262 -2.2334 -2.76074c-0.282227 -0.551758 -1.39844 -1.11133 -1.39844 -1.66309c-0.276367 -0.828125 -2.78516 -3.03711 -3.625 -3.31348l-1.95117 -2.20801c-1.11621 -1.11133 -4.18359 -1.66309 -5.85742 -1.66309
-c-0.558594 0 -0.833984 0 -0.833984 0.558594c0 1.37988 2.78418 3.03711 3.90039 3.3125c1.11621 0.276367 1.95703 1.65723 2.79102 1.65723c0.558594 0 1.95117 1.65625 2.2334 1.65625c2.23242 0.551758 3.90723 4.14844 6.97461 4.42383v0zM408.598 -28.7764
-c0 -0.969727 -0.491211 -2.66602 -0.733398 -3.15137c0 -0.242188 -0.491211 -2.42383 -0.491211 -2.90918c0 -0.484375 -0.733398 -1.4541 -0.733398 -1.4541c0 -0.484375 -0.974609 -1.93945 -1.22363 -2.18164c-0.484375 -0.485352 -0.975586 -1.4541 -1.46582 -1.69727
-c-0.484375 -0.242188 0 -0.726562 -0.975586 -0.969727c-0.242188 0 -1.22461 -0.969727 -1.46582 -0.969727c-0.975586 -0.242188 -1.95801 -0.726562 -3.1748 -0.726562c-0.982422 0 -2.20605 -0.243164 -3.18164 -0.243164c-0.242188 0 -1.95703 0 -1.70801 0.485352
-c0.242188 0.727539 1.70801 1.21191 2.44141 1.21191s3.91406 1.45508 4.64746 1.93945c0.975586 0.484375 1.46582 0.969727 2.44141 1.93945c0.491211 0.484375 1.46582 2.18164 1.95703 2.90918c0.242188 0.242188 1.21777 2.18164 1.4668 2.42383
-c0.241211 0.242188 2.19922 2.18164 2.19922 3.39355v0zM389.221 -7.53125c0.53125 -0.261719 1.60059 -1.05664 1.60059 -1.84473c0 -0.794922 -1.06934 -1.58887 -1.87012 -1.85156c-1.33105 -0.532227 -5.5957 1.31934 -6.12695 1.85156
-c-1.06934 1.05762 -2.13184 2.11426 -2.66992 3.43457c0 0 -0.53125 2.90918 0.268555 2.90918c0.800781 0 1.60059 0 1.86328 -0.794922c0.269531 -0.525391 2.13867 -2.64648 2.66992 -2.90918c0.269531 0 1.0625 -0.262695 1.60059 -0.525391
-c0.262695 0 1.86328 0.262695 2.66406 -0.269531v0zM382.023 0.670898c1.06348 0.532227 2.40137 1.05762 3.7334 1.05762c1.60059 0 3.19434 0 4.26367 -1.32031c0.800781 -1.05664 1.87012 -2.38379 1.87012 -3.96582c0 -1.05762 -0.269531 -2.38379 -1.33887 -2.38379
-c-1.33105 0 -1.0625 0.532227 -2.13184 1.05664c-0.799805 0.269531 -2.40137 2.11523 -3.19434 2.90918c-0.538086 0.532227 -1.06934 1.05762 -1.60059 1.32715h-0.800781c-0.538086 0 -1.60059 0.793945 -0.800781 1.31934v0zM374.82 -10.7021
-c0 1.31934 0.538086 2.90918 1.06934 3.44043c0.532227 0.525391 1.60156 1.05762 2.40137 1.05762c0.800781 0 2.40137 -3.17188 3.20117 -3.44141c0.793945 -0.262695 3.19531 -1.85156 3.46387 -2.64648c0.269531 -0.787109 1.06934 -2.37695 -0.268555 -2.9082
-c-1.0625 -0.525391 -4.26465 0.00585938 -5.33398 0c-0.53125 0 -1.33105 1.32617 -1.8623 1.85156c-0.532227 0.532227 -1.87012 0.532227 -2.6709 2.64648v0zM394.554 -0.385742c1.33203 0 1.06934 0 1.60059 -0.532227v-0.788086
-c0 -0.269531 0.262695 -0.532227 0.262695 -0.794922s0 -1.05664 0.268555 -1.32617l0.532227 -0.525391l0.538086 -0.532227l0.261719 -0.524414l0.269531 -0.532227v-0.525391c0 -0.269531 -0.269531 -0.794922 -0.269531 -0.794922l-0.53125 -0.262695
-c-0.268555 -0.00585938 -0.268555 -0.53125 -0.268555 -0.793945c0 -0.269531 -0.262695 -0.794922 -0.532227 -0.794922l-0.53125 -0.262695l-0.268555 -0.00683594h-0.269531l-0.261719 0.269531h-0.269531h-0.261719l-0.269531 0.262695v0.262695v0.269531v0.262695
-v0.532227l-0.268555 0.525391s-0.262695 0.793945 -0.262695 1.31934c0 0.269531 0.262695 0.532227 0.262695 0.794922v1.05664c0 0.269531 0.268555 0.794922 0.268555 0.794922v0.269531v0.525391c0 0.53125 0.269531 0.793945 0 1.85156v0zM387.62 4.375
-c0 1.05664 -0.262695 2.38379 -1.06348 2.64648c-0.799805 0.261719 -3.73242 0.524414 -4.00098 0.793945c-1.06348 1.05762 -1.60156 2.11426 -3.19531 2.11426c-1.06934 0 -1.33789 -2.11426 -1.33789 -2.9082c0 -1.05762 -1.33203 -2.11523 -2.13281 -2.90918
-c-1.33105 -1.32715 -2.40039 -3.7041 -2.40039 -5.55566c0 -0.262695 0 -0.532227 0.53125 0.262695c0 0.262695 0.799805 0.532227 0.799805 0.794922c0.269531 0.53125 1.87012 3.70312 2.6709 3.96582c0.268555 0 2.66309 0.262695 2.93164 0.262695
-c1.33203 0 3.46387 0.00585938 4.80273 0c0.261719 0 0.53125 0.269531 0.799805 0.269531l1.06348 0.525391c0.268555 0 1.06934 1.05664 0.53125 -0.262695v0zM352.431 48.2793v0c0.262695 -1.05762 -0.799805 -2.64648 -0.799805 -3.17188
-c0 -1.05664 0.261719 -3.17188 0.261719 -3.96582c0 -1.85254 2.40137 -4.23633 4.27051 -3.44141c3.46387 1.58887 9.3291 5.29297 10.9297 8.72754c1.33203 2.64648 5.33398 27.2451 -0.268555 27.2451c-1.06348 0 -1.06348 -1.32031 -1.06348 -2.11523
-c0 -2.64551 0.262695 -5.29199 0.262695 -7.93848c0 -3.43457 -0.53125 -7.93262 -0.53125 -11.374c0 -2.90918 -4.26465 -8.46387 -6.39648 -9.78418c-4.00195 -2.64648 -6.66504 2.11426 -6.66504 5.81836zM345.496 55.1611
-c-9.06543 -7.93945 -13.8613 -16.666 -11.4668 -29.6289c1.60059 -7.93262 6.93359 -14.2822 6.93359 -22.4775c0 -1.58887 -2.66309 -19.043 0.800781 -8.20215c1.33203 4.22949 4.80176 9.78516 4.00195 14.8145c-0.538086 2.90918 -4.27051 8.99023 -5.60254 11.1045
-c-2.93262 5.03027 -4.26465 15.0771 -2.93262 21.1572c0.53125 2.12207 9.59766 13.4951 8.26562 13.2324v0zM260.449 -50.6406v0c2.13281 -1.05762 0.0810547 9.54199 -0.268555 11.1104c-1.24414 5.56934 -2.01758 12.667 -2.93262 18.249
-c-1.9502 11.8848 2.83203 20.1816 11.4678 28.8271c3.79297 3.80469 13.8613 18.7812 11.1914 17.1914c-4.5332 -2.9082 -8.48828 -11.4199 -13.5928 -15.6016c-5.55566 -4.5459 -9.38867 -7.91211 -12.7988 -14.8145c-3.25586 -6.58594 3.20117 -37.5547 6.93359 -44.9619z
-M190.697 25.5527v0c-0.390625 -0.108398 -0.975586 -0.364258 -1.01562 -0.754883c-0.0673828 -0.612305 2.93262 -11.4336 7.00781 -15.1641c3.14746 -2.88184 8.44141 -5.74414 15.873 -17.3467c8.52832 -13.2988 1.15723 -36.376 -0.410156 -46.6182
-c0.948242 -0.0263672 1.54688 0.99707 3.04688 0.916016c13.2764 65.917 -16.3369 49.6885 -24.502 78.9678z" />
-    <glyph glyph-name="uniF166" unicode="&#xf166;" 
-d="M224.182 -160.156h-42.7471v67.3369c3.22266 28.6865 16.4072 54.1533 39.3496 73.9307c17.5449 11.6504 27.8975 30.1289 29.0488 50.5518c-0.150391 12.916 1.61914 25.8223 1.01953 38.166l-0.0371094 -0.0517578l-28.667 -7.28613
-c-2.10938 0.0615234 -3.77539 1.45312 -5.31348 2.8457c-2.11426 2.09473 -2.44434 5.46875 -1.56152 8.26758l57.5029 86.5518l57.3291 -86.127c0.886719 -2.80371 0.556641 -6.17773 -1.55762 -8.26758c-1.53809 -1.39746 -3.2041 -2.78906 -5.31348 -2.85059
-l-28.6709 7.28613c-2.30762 -22.5801 1.82617 -48.042 -6.22852 -68.5645c-5.875 -17.2236 -15.832 -33.9238 -30.3145 -46.4707c-22.8672 -15.3887 -36.1133 -40.1572 -33.8389 -67.8379v-47.4805z" />
-    <glyph glyph-name="uniF19A" unicode="&#xf19a;" 
-d="M306 29c0 27.5996 -22.4004 50 -50 50s-50 -22.4004 -50 -50v-120l-25 -38l-25 39v119c0 55.2002 44.7998 100 100 100s100 -44.7998 100 -100h-50z" />
-    <glyph glyph-name="uniF104" unicode="&#xf104;" 
-d="M278.297 74.1904l14.5488 75.002l-74.4316 -14.377c-3.35449 -0.719727 -5.49512 -3.83398 -5.02441 -7.18945c0.477539 -2.15625 2.14746 -3.35449 4.0625 -4.55273l16.9346 -9.10547l-101.4 -101.84l23.376 -23.4824l101.415 101.839l9.06055 -16.7734
-c1.19238 -2.39551 2.39844 -3.83398 4.5332 -4.3125c3.1084 -0.719727 6.44238 1.67676 6.92578 4.79199zM334.131 -7.28223v0c-4.77832 -4.79297 -7.39648 -11.502 -7.1582 -17.7324v-102.079h-33.166v101.606c-0.238281 15.0898 5.96484 30.665 16.9414 41.6875
-l10.498 10.3037l-16.9414 9.10547c-2.15332 1.19824 -3.57227 2.40332 -4.05566 4.79297c-0.722656 3.35449 1.4248 6.46973 4.76562 7.18848l74.6973 14.3779l-14.3232 -75.002c-0.722656 -3.35547 -3.81836 -5.50488 -7.1582 -4.79297
-c-2.14746 0.240234 -3.34082 1.91699 -4.77246 4.07422l-8.82812 16.7734l-10.499 -10.3037v0zM240.829 -26.4521l-0.476562 -122.44h12.6455l0.245117 122.44c-0.476562 26.3584 10.0215 52.7178 28.626 71.6475l0.477539 0.479492l-8.82812 8.86621l-121.683 -122.447
-l8.59668 -8.62012l85.8916 85.7783c-3.82422 -11.2617 -5.72656 -24.4414 -5.49512 -35.7041zM365.143 146.558l8.82812 -8.86621l-17.4111 -17.4932l-8.8291 8.62695l17.4121 17.7324v0zM334.607 115.886l8.82812 -8.86621l-17.4248 -17.4922l-8.82812 8.86523
-l17.4248 17.4932v0zM304.066 85.2148l8.82812 -8.86621l-17.418 -17.4932l-8.82812 8.86621l17.418 17.4932v0z" />
-    <glyph glyph-name="uniF10F" unicode="&#xf10f;" 
-d="M97 8.93262h69.3057c39.9346 47.7754 122.353 49.6475 172.293 0h65.8262v-40.0557h-307.425v40.0557z" />
-    <glyph glyph-name="uniF179" unicode="&#xf179;" 
-d="M264.021 91.6543c-0.644531 0.970703 -1.25098 1.83496 -2.33594 2.37402c-0.993164 0.493164 -1.94824 0.894531 -3.09375 0.894531c-1.1377 0 -2.38867 -0.0078125 -3.41211 0.576172c-0.956055 0.553711 -1.75195 1.06152 -2.54102 1.84277
-c-0.712891 0.720703 0.333984 1.89648 0.78125 2.45703c0.523438 0.652344 1.16797 1.74414 1.16797 2.60156c0 0.561523 -0.128906 1.06934 -0.015625 1.62305c0.106445 0.515625 0.326172 0.985352 0.410156 1.50879
-c0.173828 1.08398 -0.311523 2.08594 -0.227539 3.11719c0.0683594 1.00781 0.189453 1.94824 -0.0839844 2.96484c-0.628906 2.33594 -2.07031 3.5791 -4.08008 4.72461c-3.64746 2.08496 -9.71387 -0.212891 -11.1475 -4.14844
-c-0.795898 -2.19922 -0.978516 -4.44336 -0.583984 -6.75684c0.364258 -2.19922 1.89648 -4.01953 2.25293 -6.14258c0.0605469 -0.364258 0.326172 -1.1377 0.219727 -1.47852c-0.15918 -0.53125 -0.743164 -0.303711 -1.24414 -0.174805
-c-0.833984 0.205078 -2.28223 -0.0302734 -3.04102 -0.40918c-0.894531 -0.455078 -1.84277 -0.827148 -2.89648 -0.827148c-1.0166 0 -2.07031 0.577148 -3.06348 0.432617c-4.06543 -0.576172 -6.13574 -3.83691 -6.13574 -7.75781h-8.80371l1.56152 28.7793h119.395
-l2.03223 -29.3252h-74.25c-0.204102 1.06152 -0.227539 2.17676 -0.864258 3.12402zM366.352 -68.7969c-2.00195 4.02734 -4.99707 7.50098 -8.58398 10.1924c-6.4541 4.83105 -14.2871 7.03809 -21.8633 9.38867c-11.5342 3.60254 -23.0693 7.19629 -34.6113 10.791
-c-3.2002 1.00098 -6.30176 2.19141 -9.37305 3.55664c-4.15527 1.85059 -8.28809 3.74609 -11.8604 6.59766c-1.74414 1.39551 -3.22266 3.12402 -4.02637 5.20215c-0.811523 2.13086 -0.37207 4.2998 0.818359 6.20312c1.15332 1.8584 2.81348 3.35938 4.27734 4.97559
-c1.5625 1.72852 3.38965 2.96484 5.38379 4.125c3.92871 2.3125 8.39551 3.22266 12.7637 4.29199c4.24609 1.02441 8.52344 1.97168 12.793 2.9043c9.40332 2.04785 18.1396 3.75391 27.5361 5.7793c0.0751953 0.0146484 0.143555 0.0302734 0.204102 0.0449219
-c3.23047 0.773438 7.03711 3.51953 7.65918 6.99219l0.0605469 11.3525c0.015625 0.166992 0.0224609 0.34082 0.0224609 0.507812h11.0723v1.70605c0 0.546875 -0.152344 1.2666 0.15918 1.72168c0.598633 0.902344 0.978516 1.84277 1.14453 2.89746
-c0.166992 1.13672 0.0839844 2.10742 -0.280273 3.19238c-0.173828 0.493164 -0.401367 0.948242 -0.606445 1.42578c-0.121094 0.288086 0.333984 1.25879 0.401367 1.62305c0.516602 2.38086 -0.00585938 4.39844 -1.14453 6.51367
-c-0.424805 0.789062 -0.205078 2.30566 -0.121094 3.2002c0.0751953 0.758789 0.0605469 1.5166 0.0605469 2.29004c0 5.17969 0.0371094 10.3672 -0.128906 15.5469c-0.152344 4.27637 -0.432617 8.75879 -2.54785 12.5576
-c-1.09277 1.95703 -2.62402 3.42773 -4.41406 4.7627c-0.523438 0.386719 -0.841797 0.40918 -0.917969 1.01562c-0.0908203 0.675781 -0.181641 1.35059 -0.272461 2.02539c-0.773438 5.99805 -1.55469 12.0049 -2.33594 18.0029
-c-0.735352 5.66504 -1.4707 11.3223 -2.20703 16.9873c-0.166992 1.30371 -0.34082 2.30469 -0.932617 3.49609c-1.00879 2.0166 -3.33691 3.13184 -5.50586 3.2832c-1.5166 0.0986328 -113.205 0 -121.76 0c-2.19141 0 -4.51172 -0.0078125 -6.20312 -1.69824
-c-1.15234 -1.15332 -1.90332 -2.43457 -2.11621 -4.06543c-0.234375 -1.86523 -0.477539 -3.73047 -0.712891 -5.59668c-1.40234 -10.9346 -2.79785 -21.8701 -4.20117 -32.8135c-0.0527344 -0.40918 -1.72852 -1.14453 -2.07715 -1.49414
-c-0.750977 -0.75 -1.61523 -1.44043 -2.26074 -2.30469c-1.3877 -1.84277 -2.04688 -3.85254 -2.69922 -6.0293c-0.591797 -1.95605 -0.697266 -4.33008 -0.765625 -6.3623c-0.0839844 -2.32031 -0.12207 -4.6416 -0.189453 -6.94629
-c-0.160156 -4.7627 0.0371094 -9.52539 0.0371094 -14.2803c0 -0.378906 0.136719 -0.947266 0.0683594 -1.31152c-0.0751953 -0.455078 -0.644531 -1.06934 -0.856445 -1.52441c-0.485352 -1.06152 -0.698242 -2.11523 -0.698242 -3.2832
-c0 -1.19141 0.212891 -2.26758 0.637695 -3.38281c0.135742 -0.348633 -0.386719 -0.879883 -0.500977 -1.24316c-0.197266 -0.576172 -0.326172 -1.11523 -0.424805 -1.72168c-0.204102 -1.32715 0.0380859 -2.69238 0.637695 -3.89746
-c0.302734 -0.591797 0.65918 -0.948242 0.674805 -1.63086c0.0302734 -0.887695 0.0449219 -1.77441 0.0683594 -2.66211l11.0713 0.0839844v-8.00879c0 -0.0449219 0.015625 -0.0986328 0.0380859 -0.15918l0.00683594 -1.83496
-c-1.44043 -0.318359 -3.38184 -0.735352 -4.61035 -1.0166c-4.5957 -1.03809 -9.19922 -2.08496 -13.7871 -3.1084c-4.52734 -1.0166 -9.0166 -2.17676 -13.5215 -3.23047c-4.28418 -1.00195 -8.80371 -1.75977 -12.793 -3.68555
-c-4.40625 -2.12402 -8.34961 -4.52734 -11.8223 -8.00098c-3.16309 -3.16211 -5.51367 -7.09863 -6.4541 -11.4814c-1.01562 -4.72461 -0.364258 -9.3125 1.65332 -13.665c1.88867 -4.08789 5.3916 -7.55371 9.19922 -9.87402
-c3.77637 -2.3125 8.05273 -3.91309 12.1562 -5.58887c4.20801 -1.71387 8.4248 -3.53418 12.7627 -4.91406c10.2832 -3.29102 20.5811 -6.56738 30.8643 -9.8584c3.39746 -1.07715 6.75684 -2.22266 10.0332 -3.60254c4.2168 -1.77441 8.50879 -3.60938 12.0498 -6.55176
-c3.64062 -3.02637 4.0498 -7.78125 3.3291 -12.1338c-0.326172 -1.96387 -1.22852 -4.06445 -2.08496 -5.85449c-1.03906 -2.16113 -2.0625 -4.28418 -3.32129 -6.33984c-2.47266 -4.01172 -5.31641 -7.77246 -8.74414 -11.041
-c-3.44238 -3.28418 -7.2041 -6.05957 -11.2686 -8.53125c-0.182617 -0.106445 -0.379883 -0.227539 -0.561523 -0.341797l7.25 -11.7695c7.59082 5.12695 14.8555 11.2012 20.2402 18.6934c2.82031 3.9209 5.33105 7.87891 7.49219 12.2021
-c1.06934 2.1377 2.09277 4.26953 3.01855 6.46875c0.803711 1.91797 1.10645 4.33008 1.33398 6.37012c1.03906 9.3125 -3.2832 17.9727 -10.5938 23.5918c-3.69336 2.84375 -7.97754 4.5957 -12.2021 6.49902c-0.878906 0.401367 -1.83496 0.628906 -2.75977 0.916992
-c-2.25977 0.698242 -4.51953 1.41113 -6.77246 2.10156c-11.625 3.61719 -23.2432 7.23438 -34.8535 10.8438c-3.09375 0.962891 -6.10449 2.08594 -9.06934 3.39746c-4.17871 1.8584 -8.44824 3.74609 -12.0654 6.58301
-c-1.78223 1.40234 -3.30664 3.13867 -4.20898 5.23242c-0.910156 2.13086 -0.447266 4.42871 0.697266 6.35449c1.09277 1.8125 2.8291 3.53418 4.32324 5.02051c1.62988 1.62988 3.39746 2.96484 5.37598 4.13281c3.94336 2.31348 8.44824 3.26074 12.8389 4.29199
-c4.57324 1.09277 9.17578 2.07812 13.7646 3.11719c9.18359 2.1084 18.4346 3.92773 27.6338 5.97559c0.181641 0.0380859 0.348633 0.0908203 0.477539 0.166992c3.27637 1.0166 6.62012 3.14746 6.64355 6.68066l0.0146484 11.9521h97.6904l-0.0146484 -9.74512
-c-1.48633 -0.34082 -3.49609 -0.803711 -4.63379 -1.06152c-4.58008 -1.03125 -9.1377 -2.08594 -13.7188 -3.11719c-4.58008 -1.02344 -9.1377 -2.18359 -13.7178 -3.25293c-4.36133 -1.00879 -8.69141 -1.93359 -12.8086 -3.76172
-c-4.38379 -1.94922 -8.31152 -4.5957 -11.709 -7.98535c-3.0791 -3.08594 -5.83984 -7.55273 -6.42383 -11.9287c-0.310547 -2.32812 -0.5 -4.51172 -0.15918 -6.86328c0.311523 -2.20605 1.00879 -4.48145 2.05566 -6.43848
-c2.15332 -3.97363 5.25488 -7.31738 9.11523 -9.68359c3.71582 -2.25977 7.84863 -3.81445 11.8525 -5.45215c4.29297 -1.75977 8.61523 -3.61816 13.0439 -5.03613c10.1621 -3.25293 20.3232 -6.50586 30.4932 -9.75977c3.41992 -1.0918 6.80957 -2.19922 10.124 -3.5791
-c4.1709 -1.72168 8.5918 -3.54199 12.0879 -6.4541c1.65332 -1.37207 2.96484 -3.35938 3.48828 -5.45215c0.583984 -2.35059 0.469727 -4.40625 0.0458984 -6.77148c-0.402344 -2.17676 -1.25879 -4.1709 -2.1543 -6.18066
-c-0.902344 -2.00195 -1.88086 -4.11816 -3.07812 -5.95312c-2.63184 -4.02734 -5.37695 -7.83398 -8.82715 -11.2236c-3.39746 -3.32129 -7.24316 -6.08203 -11.292 -8.53906c-0.182617 -0.121094 -0.379883 -0.235352 -0.561523 -0.348633l7.25 -11.7773
-c7.60645 5.1416 14.9014 11.2617 20.293 18.7617c2.85938 3.99609 5.39941 8.07617 7.59863 12.4668c2.07812 4.14844 3.95117 8.43262 4.20898 13.127c0.243164 4.47461 -0.265625 8.95605 -2.30566 13.0205z" />
-    <glyph glyph-name="uniF14E" unicode="&#xf14e;" 
-d="M220.551 -44.6562l-25.0938 8.08008c-1.27344 0.709961 -2.79004 1.0166 -4.27539 1.13184c-4.74121 0.44043 -8.61914 -3.86426 -8.61914 -8.61816c0 -2.20801 0.910156 -4.41211 2.43555 -5.9834l57.0029 -78.9658l54.9053 78.9658
-c1.53223 1.57129 2.42773 3.77539 2.42773 5.9834c0 4.75391 -4.19531 9.26074 -8.62012 8.61816c-1.4707 -0.195312 -2.98633 -0.421875 -4.27637 -1.13184l-23.5117 -8.08008l-0.0166016 49.043c0 25.4492 21.1064 46.3662 46.5576 46.3662
-c25.4463 0 46.5391 -20.917 46.5391 -46.3662l-0.0107422 -133.217l43.0596 -0.195312l-0.0800781 133.581c0 49.3018 -40.2129 89.1592 -89.5078 89.1592c-0.708984 0 -1.41797 -0.0126953 -2.10547 -0.0195312h-108.253l7.20898 24.0049
-c0.755859 2.9668 1.05371 5.45703 -0.584961 7.87207c-2.4502 3.59277 -7.38672 4.54492 -11.002 2.08301l-81.7852 -55.4043l81.7852 -55.3252c3.61523 -2.44824 8.55176 -1.50977 11.002 2.09863c1.71191 2.50195 1.32812 4.93652 0.417969 8.19629l-7.04199 23.6211
-h33.8477c-8.24316 -13.4902 -13.0127 -29.3291 -13.0127 -46.2861l0.607422 -49.2119z" />
-    <glyph glyph-name="uniF13B" unicode="&#xf13b;" 
-d="M56.6133 28.0059c40.2119 -68.1162 93.9023 1.32227 133.108 46.459c39.0771 45.1367 88.6338 42.9971 120.323 -7.72656c8.2041 -13.4521 21.6562 -20.0166 30.8672 -18.377c9.34375 1.80176 7.86523 8.20996 17.7158 9.85059
-c-11.9688 5.74219 -22.001 11.3281 -24.7812 20.5166c8.86621 0.822266 21.6572 -4.10254 32.9854 -15.5918c1.63965 0.661133 2.46289 2.30078 3.62402 1.13965c4.58105 -4.58105 27.7217 -15.0918 36.5879 -26.4209
-c0.983398 -1.32227 -0.317383 -5.58594 -1.80176 -5.74707c-7.88672 -0.817383 -16.4092 0 -24.2969 -1.64062c-4.58594 -0.316406 -8.20996 -0.978516 -12.6289 -1.13965c-4.76953 -5.10742 -8.20996 -11.4893 -14.6143 -13.9521
-c-6.06445 -4.10254 -8.04785 -9.52734 -12.1504 -15.5918c-4.26367 -6.24805 -11.9688 -10.0332 -20.335 -10.5117c-6.74707 -10.3496 -13.4736 -22.501 -20.1992 -32.8242c-2.14551 -3.62305 -6.24805 -5.4248 -9.02734 -4.60742
-c-1.48438 0.344727 -3.28516 1.80176 -4.4248 3.78516c-1.16211 2.11816 -1.64062 5.08594 -0.5 9.02734c3.12305 -2.46289 2.30078 -7.3877 7.7041 -6.24707c1.98438 11.1719 3.94629 25.4414 5.74805 36.7695c-4.58105 0.662109 -9.18848 3.28516 -13.7695 3.94727
-c-4.44629 -5.74805 -8.04883 -11.3291 -12.4951 -17.0762c1.64453 -18.7158 1.16113 -53.5029 7.8877 -56.127c21.5 -8.86523 45.459 -15.4307 70.7393 -21.6777c2.30176 0.161133 4.60742 0.5 7.06445 0.661133c2.46289 -2.46289 5.90918 -4.10254 7.71094 -7.70508
-h-4.1084c-0.661133 -1.16113 -1.13965 -2.30078 -1.47852 -3.46777c-7.3877 -1.13965 -14.5918 0.344727 -21.8184 4.1084c-21.6777 3.7793 -42.6738 7.72559 -64.3525 10.667c-6.56934 0.822266 -9.02637 7.22559 -11.1504 15.4307
-c-6.72656 23.6406 -15.9365 44.3193 -25.7812 62.5352c-20.5166 6.40332 -37.4102 26.1035 -50.7012 38.0928c-44.3193 -26.1035 -110.473 -68.2773 -131.651 3.44141v0z" />
-    <glyph glyph-name="uniF180" unicode="&#xf180;" 
-d="M25 -256c-13.7998 0 -25 11.2002 -25 25v462c-0 13.7998 11.2002 25 25 25h462c13.7998 0 25 -11.2002 25 -25v-462c0 -13.7998 -11.2002 -25 -25 -25h-462z" />
-    <glyph glyph-name="uniF11D" unicode="&#xf11d;" 
-d="M198.556 40.0352v0l-25.9014 -8.52539c-1.56738 -0.516602 -3.16113 -0.770508 -4.82031 -0.417969c-4.52734 0.953125 -8.02246 5.03027 -8.02246 9.71387c-0.0126953 1.83594 0.581055 3.78223 1.58105 5.32422l62.0986 96.1064l68.2061 -95.8848
-c1.59961 -2.23438 2.09082 -4.79492 1.58105 -7.52539c-0.457031 -2.47559 -1.92773 -4.69727 -4.00488 -6.14062c-1.94043 -1.33203 -4.1875 -1.95996 -6.51953 -1.64648c-0.509766 0.0722656 -1.03223 0.130859 -1.55469 0.268555l-32.9961 9.49805v-8.68164
-c0 -2.66504 0.509766 -5.33105 1.4502 -7.80664c1.46973 -3.85449 4.16211 -7.12695 7.42773 -9.60938l68.8076 -52.1953c6.43457 -4.87988 11.7256 -11.3271 15.9395 -18.1729c6.83984 -11.0605 10.3604 -24.0205 10.3604 -37.0137v-49.5625h-49.8369v49.5625
-c0 6.80664 -3.24023 13.0977 -8.6748 17.2129l-67.6377 51.2217c-17.3252 13.124 -27.4834 34.5049 -27.4834 56.1602v8.11426z" />
-    <glyph glyph-name="uniF16F" unicode="&#xf16f;" 
-d="M272.099 71.2959c0.123047 -4.85059 3.62012 -11.0889 7.36328 -12.7188c21.957 -6.8623 38.415 -28.0723 38.415 -52.9033c0 -26.4395 -19.0762 -48.5322 -44.165 -53.7686l-24.9541 -4.74512c-5.85645 -0.123047 -11.0889 -5.47852 -11.0889 -12.0947
-c0 -4.87207 3.11914 -9.11523 6.48047 -10.6055c16.6016 -8.97559 28.1914 -27.5674 28.1914 -48.4131v-33.1865h-43.041v33.4453c0 3.98535 -2.11328 7.72852 -4.6084 9.47656c-17.7305 8.35156 -30.3262 27.207 -30.3262 49.1602
-c0 26.8252 18.7148 49.2793 43.041 54.3926l25.458 4.74902c6.35742 -0.139648 11.6064 5.10938 11.6064 11.7129c0 5.75488 -3.87793 10.8643 -8.4873 11.4883c-20.9688 6.98535 -36.4248 29.3203 -36.6836 53.8916l-27.5713 -8.35547
-c-3.62012 0 -7.60547 3.74316 -7.60547 7.99023c0 1.49023 0.989258 3.48047 1.61328 4.22754l55.6562 82.1006l54.8945 -81.4766c0.623047 -0.989258 1.6123 -2.97949 1.6123 -4.85156c0 -4.24707 -3.36133 -7.99023 -7.72754 -7.99023l-28.0732 8.47461z" />
-    <glyph glyph-name="uniF157" unicode="&#xf157;" 
-d="M266.637 74.3496c0 -9.44922 -7.66016 -17.1094 -17.1094 -17.1094s-17.1094 7.66016 -17.1094 17.1094s7.66016 17.1094 17.1094 17.1094s17.1094 -7.66016 17.1094 -17.1094v0v0zM113.323 -147.149v0l36.209 60.7676h28.4307l-26.8525 -60.7676h-37.7871z
-M174.367 -147.425v0l20.4287 61.0947h11.5723l-16.6943 -30.2588c7.65332 -4.3457 15.8271 -6.95898 27.8779 0.112305l-5.78613 -30.9482h-37.3984zM235.772 -147.149v0l5.28613 60.9062h27.3525l5.78613 -60.9062h-38.4248zM297.118 -147.261v0l-7.55371 43.6592
-l1.27246 -0.979492l9.49805 -17.8281c20.5303 11.4756 14.8428 24.2822 9.33008 35.916l4.2334 0.551758l21.3174 -61.5957zM359.05 -147.537v0l-27.5166 61.2939l27.7666 0.275391l37.209 -61.5693h-37.459zM241.059 -27.2852h34.001l0.157227 -3.05957l36.0908 -67.6025
-c0.706055 -11.0508 -4.32617 -15.2871 -9.36719 -19.5137l-43.71 80.3955l-42.1484 -75.3213c-11.9111 -7.54004 -16.291 -4.37695 -21.4648 -2.3418l46.1201 83.7773l0.321289 3.66602v0zM198.475 -20.167l42.6357 64.0234
-c5.19727 6.89844 13.0342 10.2783 25.9404 6.89844l33.668 -27.5957l3.58691 -6.62305v-26.4922c-3.2627 -6.92676 -7.92676 -11.6338 -15.5918 -11.5908v34.0811l-13.3838 11.8662v-47.8789h-34.6338v38.3584l-23.8701 -34.9092
-c-6.87793 -3.85059 -13.3018 -5.43066 -18.3516 -0.137695v0z" />
-    <glyph glyph-name="uniF165" unicode="&#xf165;" 
-d="M327.566 -40.4297l-72.9375 66.543c-4.3623 4.20898 -7.33594 10.3037 -7.33594 16.6982l34.3594 -10.7783c4.68457 0 9.84473 4.83691 9.84473 10.3027c0 1.7334 -1.25781 4.37891 -2.19238 5.16016l-69.4883 102.591l-68.5596 -101.656
-c-0.935547 -1.23535 -2.19238 -3.90234 -2.19238 -6.09473c0 -5.46582 4.23047 -10.3027 9.84961 -10.3027l34.8076 10.7783c0 -21.082 8.91504 -40.7539 23.1211 -55.7412l84.4814 -74.6494c4.37891 -4.68945 7.35156 -11.085 7.35156 -17.9609v-45.9141l54.0264 -0.458984
-v46.373c0 27.0234 -13.7529 50.9043 -35.1357 65.1104z" />
-    <glyph glyph-name="uniF182" unicode="&#xf182;" 
-d="M402 -71.3086v0h-292l292 132.972v-132.972zM230.969 38.541v0l32.5674 13.9902l-20.3955 12.79l-19.6328 -8.22363zM225.939 36.2627l-7.14746 18.4072l-18.1074 -7.14746c-6.23535 -3.80273 -7.61133 -6.5498 -7.14258 -10.7959l1.66992 -13.8662l30.7275 13.4023v0z
-M177.412 -22.6162c-3.80273 12.4658 -4.72949 30.2646 5.92188 40.916c-2.58203 10.8154 5.0293 25.8633 8.98145 29.9854c3.95312 3.95215 3.04102 3.95215 6.69922 5.32812l39.2666 17.0312c4.56543 1.37598 8.36816 0.463867 11.5586 -1.37598l20.9834 -13.8408
-l29.6719 13.6963c4.73438 1.37109 10.208 -0.912109 12.4902 -6.69824l8.66309 -19.3193l-2.13379 -2.89551l-2.72656 -0.907227c-9.73926 21.3027 -43.3633 8.51758 -33.624 -14.918l-56.4668 -25.5547c-11.2441 22.9727 -41.3799 6.09082 -33.624 -14.5996
-l-15.6611 -6.84766v0zM311.609 22.5664v0c-5.47266 -6.23535 -14.918 -6.84863 -21.0039 -1.37598c-6.23438 5.32812 -6.84766 14.7734 -1.35059 21.0088c5.32324 6.08594 14.749 6.69922 20.9844 1.37598c6.08594 -5.49805 6.69824 -14.9229 1.37012 -21.0088z
-M221.075 -17.6074v0c-5.47266 -6.08594 -15.0674 -6.69922 -21.1533 -1.37598c-6.23535 5.49805 -6.84863 15.0684 -1.52051 21.1533c5.47266 6.23535 15.0674 6.84863 21.3027 1.22656c5.93652 -5.17383 6.69922 -14.7686 1.37109 -21.0039z" />
-    <glyph glyph-name="uniF149" unicode="&#xf149;" 
-d="M306.686 -95.0459c-31.5039 1.58789 -77.8584 -3.95996 -93.4111 15.752c-7.12598 37.5088 -27.4912 56.3896 -62.4561 56.7793c-21.4688 41.4609 17.502 47.958 44.1406 58.6104c1.69238 -19.2715 0.655273 -39.3037 31.1367 -50.5518
-c1.22363 5.96387 3.72363 10.833 11.7227 10.9893l45.0566 -0.182617l31.8691 24.9092c5.15039 -8.19141 15.3701 -18.6865 15.3857 -24.543l48.3535 -0.183594c3.52051 -2.99902 6.50781 -10.957 -0.549805 -18.8652c-28.9658 0.878906 -81.6123 -2.28516 -71.248 -72.7139
-v0zM228.088 63.4932l0.129883 17.0781l19.124 2.5957v13.5537l-19.5127 -3.24316c1.43555 12.21 9.28613 21.0391 26.5801 23.5957c10.8594 -0.765625 22.2471 -1.35352 28.7246 -21.666c1.89844 -8.05664 0.714844 -16.208 -4.28809 -23.2295
-c-16.1973 8.87891 -28.3203 2.81738 -39.3789 -7.14355l-11.3789 -1.54102v0zM194.775 26.5713l56.9629 43.042c7.65625 4.08398 16.0996 4.86133 26.1914 -1.28223c8.62598 -7.83691 23.1982 -29.5469 34.7998 -44.3242l-32.4189 -24.2686l-31.1367 43.3174
-l-49.2695 -37.7305c-3.79297 6.61914 -4.67969 14.3877 -5.12891 21.2461v0zM156.465 -125.029c26.4326 0 47.8535 21.4307 47.8506 47.8584c0.00292969 26.4287 -21.4219 47.8564 -47.8506 47.8564c-26.4326 0 -47.8545 -21.4297 -47.8516 -47.8584
-c-0.00292969 -26.4287 21.4219 -47.8564 47.8516 -47.8564zM156.465 -111.072c-18.7227 0 -33.8965 15.1797 -33.8945 33.9014c-0.00195312 18.7217 15.1748 33.8994 33.8945 33.8994c18.7217 0 33.8965 -15.1797 33.8936 -33.9014
-c0.00292969 -18.7217 -15.1758 -33.8994 -33.8936 -33.8994zM359.131 -125.084c26.4316 0 47.8535 21.4287 47.8506 47.8574c0.00292969 26.4297 -21.4219 47.8564 -47.8506 47.8564c-26.4326 0 -47.8555 -21.4287 -47.8516 -47.8584
-c-0.00390625 -26.4287 21.4219 -47.8555 47.8516 -47.8555zM359.131 -111.127c-18.7227 0 -33.8975 15.1787 -33.8945 33.9004c-0.00292969 18.7227 15.1748 33.8994 33.8945 33.8994c18.7217 0 33.8955 -15.1787 33.8936 -33.9014
-c0.00195312 -18.7217 -15.1748 -33.8984 -33.8936 -33.8984z" />
-    <glyph glyph-name="uniF110" unicode="&#xf110;" 
-d="M0 -164v60c64 0 64 64 128 64s64 -64 128 -64s64 64 128 64s64 -64 128 -64v-60h-512z" />
-    <glyph glyph-name="uniF158" unicode="&#xf158;" 
-d="M178.741 120.805h35.3848l22.6553 -44.3877l-67.7754 -146.828l-63.2842 29.7773l73.0195 161.438v0zM114.945 -95.2129v0l-23.9648 11.2354l3.18164 8.05566c0.560547 13.4854 2.81055 22.8467 15.167 27.1543c8.0498 -9.7373 22.6514 -19.291 41.1885 -19.291
-c0.9375 -12.3594 14.042 -26.9658 27.5234 -34.457c6.92969 -3.74805 4.30762 -21.9141 -17.7881 -14.7949c-8.42188 2.62305 -20.0303 7.67578 -25.4619 14.6064c-5.80469 7.67969 -8.61426 9.7373 -16.6641 13.2969zM365.278 -110.296v0l-24.3408 -10.8633
-l-4.11914 7.67969c-9.73438 9.17773 -15.1621 17.2295 -10.4834 29.2168c12.7334 -0.1875 29.3926 4.49219 41.7539 18.5381c9.92285 -7.30273 29.3926 -6.92676 43.8105 -1.68555c7.48926 2.62305 19.4697 -11.0469 -0.188477 -23.2227
-c-7.67676 -4.68066 -19.0967 -10.1143 -27.8955 -9.54883c-9.55078 0.55957 -12.9209 -0.188477 -20.9707 -3.93164zM228.074 120.805h74.7051l81.0684 -168.553l-63.2793 -30.3379l-92.4941 198.891v0z" />
-    <glyph glyph-name="uniF17A" unicode="&#xf17a;" 
-d="M228 -94.1055l7.76953 6.10547l103.211 -8.32227l3.3291 -0.185547l3.14551 -1.10938l2.77539 -2.03516l1.84668 -2.58984l1.29492 -3.14551v-3.33008l-0.739258 -3.14258l-1.66309 -2.77441l-12.0244 -13.5029l-13.6875 3.88477l17.9424 14.2432l1.10938 0.370117
-l0.925781 0.921875l0.370117 1.11035v1.29492l-0.370117 1.11035l-0.740234 0.739258l-1.11035 0.555664l-1.29492 0.18457l-112.09 9.61719v0zM210.322 -86.1846v0l54.5674 32.1846l4.25293 -1.29492l-50.6797 -33.4805l-0.370117 -0.739258l-0.370117 -0.740234
-l-0.185547 -0.924805l0.185547 -0.925781l0.18457 -0.739258l0.370117 -0.740234l0.554688 -0.740234l0.740234 -0.370117l16.833 -7.95215l2.40234 -1.29492l1.84961 -1.85059l1.66504 -2.03418l1.11035 -2.40332l0.740234 -2.58984l0.18457 -2.58984l-0.370117 -2.58984
-l-0.924805 -2.40527l-22.1953 -19.6045l-18.8672 0.924805l29.4102 20.9004l1.29492 0.739258l0.924805 1.29492l0.370117 1.29492v1.48047l-0.554688 1.48047l-1.11035 1.10938l-1.29492 0.554688l-1.48047 0.370117l-17.2021 7.39746l-2.21973 1.11035l-2.03223 1.84961
-l-1.2959 2.03516l-0.554688 2.58789v2.40527l0.740234 2.4043l1.47949 2.2207l1.84766 1.66504v0zM182.75 -62.7178v0l-3.32715 -1.10938l-2.77539 -2.2207l-1.84961 -2.95703l-0.925781 -3.33008l0.370117 -3.51465l1.66504 -3.14551l2.40527 -2.40527l3.14258 -1.47754
-l2.58984 -0.739258l2.77539 -0.740234l2.58984 -0.554688l2.77441 -0.370117l2.58789 -0.370117l2.77539 -0.185547l2.58984 -0.18457h2.77441l-1.84961 -6.10547l-3.51465 -0.554688l-3.51562 -0.18457h-3.5127l-3.51465 0.18457l-3.51465 0.740234l-3.51562 0.740234
-l-3.32715 1.10938l-3.33008 1.48047l-3.14453 1.66504l-2.95996 1.84961l-2.77246 2.21973l-2.2207 2.95801l-1.47949 3.33008l-0.740234 3.7002l0.370117 3.69922l1.11035 3.5127l2.03418 2.95996l2.58789 2.58984l3.33008 1.85059l3.51465 1.10938l3.14551 1.2959
-l3.33008 1.29492l3.14258 1.29199l3.3291 1.11035l3.33008 1.29492l3.33008 0.924805l3.32812 1.11035l3.33008 0.924805l3.33008 0.924805l3.3291 0.924805l3.32812 0.740234l3.51465 0.740234l3.33008 0.554688l3.51465 0.554688l3.32812 0.555664l3.51465 0.554688
-l3.51562 0.370117l2.4043 -4.80957l-3.51465 -0.555664l-3.33008 -0.554688l-3.5127 -0.554688l-3.33008 -0.740234l-3.51465 -0.924805l-3.33008 -0.740234l-3.33008 -1.11035l-3.32715 -1.10938l-3.33008 -1.10742l-3.33008 -1.11035l-3.14551 -1.48047l-3.14258 -1.29492
-l-3.14453 -1.47949l-3.14551 -1.48047zM289.308 -48.6221v0l-1.29492 -2.03516l-1.48047 -1.48047l-2.03516 -1.10938l-2.03418 -0.552734h-2.2207l-2.2168 0.552734l-1.85059 1.10938l-1.66504 1.48047l-8.50977 65.665l1.29492 1.84961l1.48047 1.47754l1.84961 1.11035
-l2.03516 0.554688h2.21973l2.03516 -0.554688l1.84766 -1.11035l1.66504 -1.47754l8.87988 -65.4795v0zM272.855 135.71l-0.555664 0.554688l-0.740234 0.740234l-0.554688 0.554688l-0.740234 0.555664l-0.739258 0.554688l-0.740234 0.554688l-0.740234 0.370117
-l-0.740234 0.555664l-1.66211 0.739258l-1.66504 0.555664l-1.84961 0.370117l-1.85059 0.18457h-1.84961l-1.66504 -0.18457l-1.85059 -0.370117l-1.84961 -0.555664l-2.21777 -1.10938l-1.84961 -1.48047l-1.85059 -1.84961l-1.29492 -2.03516l-1.10938 -2.21973
-l-0.555664 -2.40234l-0.18457 -2.59082l0.18457 -2.4043v-0.555664v-0.554688v-0.554688l0.185547 -0.740234v-0.554688v-0.555664l0.18457 -0.554688v-0.554688l0.555664 -2.03516l0.924805 -1.84766l1.29492 -1.84961l1.66504 -1.2959l1.84961 -1.10938l1.84766 -0.740234
-l2.21973 -0.370117h2.03516l2.2207 0.370117l2.21973 0.185547l2.21973 0.18457l2.21973 0.18457l2.21777 0.185547h2.21973h2.2207h2.21973l0.740234 0.370117l0.739258 0.554688l0.555664 0.740234l0.554688 0.924805l0.185547 0.924805l0.18457 0.924805v0.922852
-l-0.18457 0.924805l-0.185547 1.66504l-0.18457 1.66504l-0.370117 1.66504l-0.185547 1.85059l-0.370117 1.66406l-0.369141 1.66504l-0.370117 1.66504l-0.555664 1.66309l-0.18457 0.370117v0.370117l-0.185547 0.369141l-0.18457 0.370117l-0.18457 0.370117
-l-0.185547 0.185547l-0.18457 0.370117l-0.185547 0.369141l0.185547 -0.369141l0.18457 -0.370117l0.185547 -0.185547l0.18457 -0.370117l0.18457 -0.370117l0.185547 -0.369141v-0.370117l0.18457 -0.370117l0.555664 -1.66309l0.370117 -1.66504l0.369141 -1.66504
-l0.370117 -1.66406l0.185547 -1.85059l0.370117 -1.66504l0.18457 -1.66504l0.185547 -1.66504l-0.185547 1.66504l-0.18457 1.66504l-0.370117 1.66504l-0.185547 1.85059l-0.370117 1.66406l-0.369141 1.66504l-0.370117 1.66504l-0.555664 1.66309l-0.18457 0.370117
-v0.370117l-0.185547 0.369141l-0.18457 0.370117l-0.18457 0.370117l-0.185547 0.185547l-0.18457 0.370117l-0.185547 0.369141v0.185547h-0.18457v0.18457l-0.185547 0.185547v0.18457h-0.18457v0.185547l-0.18457 0.18457v0zM274.52 131.64l-0.18457 0.555664
-l-0.18457 0.554688l-0.185547 0.554688l-0.370117 0.555664l-0.18457 0.370117l-0.370117 0.554688l-0.370117 0.370117l-0.370117 0.554688l-0.554688 0.18457h-0.554688h-0.555664l-0.554688 -0.18457l-0.554688 -0.370117l-0.370117 -0.370117l-0.370117 -0.554688
-l-0.185547 -0.554688l-0.369141 -2.2207l-0.185547 -2.2168l0.185547 -2.2207l0.369141 -2.03418l0.740234 -2.03516l1.11035 -2.03516l1.10938 -1.85059l1.48047 -1.47949l4.07031 0.370117l-0.185547 1.84961l-0.18457 1.66504l-0.370117 1.66504l-0.185547 1.66504
-l-0.369141 1.66504l-0.370117 1.66504l-0.370117 1.84961l-0.555664 1.47754v0zM277.56 108l3.88281 -0.924805l3.7002 -1.29492l3.51465 -1.66504l3.51562 -2.0332l3.14258 -2.4043l2.77441 -2.58984l2.77539 -2.95996l2.21973 -3.14551l0.554688 0.185547
-l0.370117 0.18457l0.555664 0.18457l0.369141 0.185547l0.555664 0.18457l0.370117 0.185547h0.554688l0.370117 0.18457h1.29492l1.29199 -0.370117l1.11035 -0.924805l0.740234 -0.924805l0.554688 -1.29492v-1.29297l-0.370117 -1.29492l-0.554688 -1.29492
-l-0.370117 -0.554688l-0.554688 -0.555664l-0.370117 -0.554688l-0.370117 -0.370117l-0.554688 -0.554688l-0.552734 -0.370117l-0.554688 -0.554688l-0.555664 -0.370117l0.370117 -0.924805l0.370117 -1.11035l0.18457 -0.924805l0.185547 -1.11035v-0.924805v-1.11035
-v-1.10938l-0.185547 -0.922852l1.1084 -0.740234l0.924805 -0.924805l0.554688 -1.29492l0.185547 -1.11035l-0.185547 -1.29492l-0.554688 -1.29492l-0.924805 -0.924805l-1.1084 -0.554688l-0.739258 -0.555664l-0.924805 -0.18457l-0.925781 -0.370117
-l-0.924805 -0.370117l-0.924805 -0.18457l-0.924805 -0.370117l-0.924805 -0.185547l-0.925781 -0.18457l-0.18457 -0.554688l-0.185547 -0.555664v-0.554688l-0.18457 -0.370117l-0.18457 -0.554688l-0.185547 -0.552734v-0.554688l-0.18457 -0.370117l2.21973 -1.48047
-l2.03516 -1.29492l2.21973 -1.47949l1.84961 -1.66504l2.0332 -1.66504l1.84961 -1.85059l1.66504 -2.03418l1.66504 -1.84766l1.11035 -1.66504l0.924805 -1.85059l0.740234 -1.84961l0.554688 -1.84961l0.18457 -2.03516v-1.85059l-0.18457 -2.03418l-0.554688 -1.84766
-l-0.740234 -4.07031l-1.11035 -3.88477l-1.47949 -3.88477l-1.66504 -3.69824l-2.03516 -3.51465l-2.21973 -3.33008l-2.40234 -3.33008l-2.77539 -2.95703l0.18457 -2.77539l-0.370117 -2.58984l-0.924805 -2.58984l-1.10938 -2.40527l-1.66504 -2.21777l-1.85059 -2.03516
-l-2.21973 -1.47949l-2.40234 -1.29492l0.18457 -2.21973v-0.740234v-0.740234l-0.18457 -0.740234l-0.185547 -0.740234l-0.18457 -0.739258l-0.554688 -0.740234l-0.370117 -0.554688l-0.555664 -0.555664l-5.5498 41.8027l-2.4043 2.58984l-2.96094 1.85059
-l-3.32715 0.924805h-3.33008l-3.51465 -0.924805l-2.77539 -1.85059l-2.40234 -2.4043l-1.66504 -3.14258l5.3623 -41.4326l-0.554688 0.370117l-0.554688 0.551758l-0.555664 0.555664l-0.554688 0.554688l-0.370117 0.740234l-0.18457 0.740234l-0.368164 0.739258
-l-0.18457 0.740234l-1.48047 0.924805l-1.66504 1.29492l-1.29492 1.11035l-1.47949 1.47949l-1.11035 1.48047l-1.10938 1.48047l-0.925781 1.66406l-0.924805 1.66309l-0.370117 0.924805l-0.370117 0.924805l-0.369141 0.924805l-0.185547 0.925781l-0.370117 0.924805
-l-0.18457 0.924805l-0.185547 1.11035l-0.18457 0.924805l-2.58789 1.84961l-2.4043 2.2207l-2.2207 2.40234l-2.03516 2.58984l-1.66406 2.58984l-1.48047 2.95996l-1.29492 2.95996l-0.924805 3.14258l-0.370117 2.95996l-0.185547 2.95996l0.185547 2.95996
-l0.370117 2.95996l0.924805 2.95801l1.11035 2.77441l1.29492 2.77539l1.84961 2.40527l-0.740234 0.924805l-0.739258 1.10938l-0.740234 0.925781l-0.555664 0.924805l-0.739258 1.10742l-0.555664 0.924805l-0.554688 1.11035l-0.740234 1.10938l-1.10742 -0.739258
-l-1.47949 -0.370117l-1.48047 0.18457l-1.29492 0.555664l-1.11035 1.10938l-0.554688 1.29492l-0.18457 1.48047l0.18457 1.29492l-1.66504 1.47949l-1.47949 1.85059l-1.11035 1.84961l-0.740234 2.21777l-0.370117 2.21973l0.185547 2.21973l0.370117 2.2207
-l0.924805 2.03516l-0.924805 0.18457l-0.925781 0.18457l-1.10938 0.370117l-0.924805 0.370117l-0.738281 0.370117l-0.924805 0.370117l-0.924805 0.554688l-0.740234 0.555664l-1.10938 0.921875l-0.740234 1.11035l-0.370117 1.29492v1.29492l0.370117 1.29492
-l0.740234 1.11035l1.10938 0.740234l1.29492 0.554688l1.29492 0.18457h1.29297h1.11035h1.29492l1.29492 -0.18457l1.10938 -0.370117l1.29492 -0.18457l1.11035 -0.370117l1.11035 2.95996l1.47949 3.14453l1.48047 2.95801l1.47949 2.77441l1.84766 2.95996
-l1.85059 2.58984l2.03418 2.59082l2.2207 2.58691l3.88477 1.29492l4.06738 1.11035l4.07031 1.11035l4.06934 0.739258l4.25586 0.555664l4.06738 0.370117l4.25488 0.18457h4.06934v0zM245.93 71.7471v0l0.185547 -1.66504v-1.84961l0.18457 -1.66504l0.185547 -1.84961
-l0.370117 -1.66504l0.18457 -1.85059l0.370117 -1.66504l0.370117 -1.84668l-4.625 -1.11035l-0.370117 0.554688l-0.370117 0.740234l-0.370117 0.554688l-0.370117 0.740234l-0.18457 0.552734l-0.370117 0.554688l-0.370117 0.740234l-0.18457 0.554688l0.18457 0.740234
-l0.18457 0.740234l0.370117 0.740234l0.185547 0.924805l0.18457 0.739258l0.370117 0.740234l0.185547 0.740234l0.369141 0.740234l0.185547 0.554688l0.18457 0.554688l0.370117 0.555664l0.185547 0.554688l0.18457 0.554688l0.18457 0.555664l0.370117 0.554688
-l0.185547 0.554688l0.18457 0.185547l0.185547 0.18457h0.18457h0.370117h0.18457l0.185547 -0.18457l0.18457 -0.370117v-0.185547v0zM284.588 86.1748v0l0.554688 -2.21973l0.740234 -2.21973l0.739258 -2.2207l0.555664 -2.21973l0.554688 -2.40527l0.554688 -2.2168
-l0.555664 -2.2207l0.370117 -2.4043l3.33008 0.924805v0.924805l0.18457 0.740234l0.18457 0.924805l0.185547 0.924805v0.924805l0.18457 0.738281l0.185547 0.924805v0.924805l-0.740234 1.48047l-0.740234 1.47949l-0.924805 1.48047l-0.924805 1.47949
-l-0.924805 1.29492l-1.11035 1.29492l-1.11035 1.29492l-1.10938 1.29492h-0.370117l-0.185547 0.185547h-0.18457l-0.370117 -0.185547l-0.18457 -0.18457l-0.185547 -0.18457v-0.370117l0.185547 -0.185547v0zM302.345 29.7598v0l-0.370117 0.740234l-0.554688 0.554688
-l-0.370117 0.738281l-0.554688 0.739258l-0.370117 0.555664l-0.554688 0.739258l-0.555664 0.555664l-0.554688 0.554688l-0.18457 -0.554688l-0.185547 -0.370117l-0.370117 -0.555664l-0.18457 -0.554688l-0.370117 -0.370117l-0.18457 -0.554688l-0.370117 -0.554688
-l-0.185547 -0.368164l0.370117 -1.29492l0.554688 -1.47949l0.370117 -1.29492l0.185547 -1.48047l0.370117 -1.29492l0.18457 -1.47949v-1.48047v-1.29492l0.740234 1.11035l0.554688 1.29492l0.554688 1.10938l0.370117 1.29492l0.555664 1.11035l0.370117 1.29492
-l0.369141 1.29492l0.370117 1.29492v0z" />
-    <glyph glyph-name="uniF144" unicode="&#xf144;" 
-d="M247.987 -44.209h-146.101l0.105469 128.797c0 4.60352 6.3291 11.2969 11.916 11.2969l122.126 0.115234c5.38477 0 12.0088 -7.38184 12.0088 -11.8564zM104.665 -47.3242h16.667l2.01367 -2.92871l0.0625 -41.1299l-3.12695 -2.92188l-15.0469 -0.180664
-l-2.58301 2.49609l0.125 42.6387l1.88867 2.02637v0zM128.972 -47.6104v0h16.6631l2.00977 -2.92383l0.0175781 -12.5303l2.43359 -2.41016l11.1885 0.0175781v0.567383h1.80664c0 1.6377 6.48047 6.84766 12.5527 6.8584v0.0175781
-c6.07715 0 12.5703 -5.20117 12.5703 -6.84082l1.80664 -0.0175781l-0.0185547 -0.548828l11.1885 -0.0361328l2.37793 2.35742l0.0371094 13.4688l1.89844 2.02051h16.6631l2.00879 -2.92383l0.0742188 -41.1338l-3.13379 -2.9248l-15.041 -0.176758l-2.58008 2.49902
-l0.0361328 14.1777l-1.64062 1.64844l-11.8701 0.0703125l-0.0371094 -0.548828l-1.65918 0.0351562c-0.0498047 -1.13672 -6.59961 -6.91797 -12.6631 -6.92969v-0.0351562c-6.06738 0 -12.6494 5.80957 -12.6992 6.94727l-1.65918 -0.0351562l-0.0185547 0.53125
-l-11.8701 -0.0527344l-1.71484 -1.7373l0.0185547 -13.4688l-3.13379 -2.9248l-15.04 -0.176758l-2.59961 2.49902l0.128906 42.6396zM229.616 -47.2715h16.667l2.01367 -2.92871l0.0625 -41.1289l-3.12695 -2.92285l-15.0469 -0.180664l-2.58301 2.49609l0.125 42.6387
-l1.88867 2.02637v0z" />
-    <glyph glyph-name="uniF13A" unicode="&#xf13a;" 
-d="M282.495 45.1377v0l4.4375 24.3174c1.05957 5.07422 2.44238 11.5 4.19727 16.2139c1.40137 3.73535 3.79004 6.99902 6.42285 9.91504c3.31934 3.67578 7.2832 6.77051 11.1377 9.91699c4.37305 3.61719 9.16113 8.16504 15.0488 9.09473
-c2.39258 0.413086 4.66797 1.16992 7.11621 1.34277c2.27832 0.172852 3.96875 -0.757812 5.48438 -2.32812c0.643555 -1.05273 1.16699 -2.04395 1.28027 -3.2666c0.181641 -1.98242 -0.283203 -3.21094 -1.40039 -4.84277
-c-0.517578 -0.819336 -1.04688 -1.63184 -1.62891 -2.33398c-1.22852 -1.39746 -2.68555 -2.5127 -3.84961 -3.84863c-1.98633 -2.62598 -3.73535 -5.36328 -5.13574 -8.34082c-2.09375 -4.43359 -4.01855 -8.98438 -5.8291 -13.5293
-c-0.825195 -1.98535 -1.63574 -3.90723 -2.39258 -5.83398c-0.523438 -1.22559 -0.880859 -2.5127 -1.28711 -3.79102c-1.81055 -7.7002 -1.51855 -14.6982 -0.757812 -22.5771c0.757812 -7.40527 0.998047 -14.0527 -0.350586 -21.3408
-c-1.80469 -9.91699 -4.43164 -19.3105 -2.33496 -29.4004c2.45508 -11.9033 8.87207 -23.502 17.2754 -32.3164c7.9873 -8.39648 25.1973 -23.5234 25.6562 -23.4463c0.474609 0.0703125 -11.7568 -2.49121 -23.2266 -27.5479
-c-11.4707 -25.0713 -24.1943 -27.4697 -23.6367 -28c-1.04688 0.474609 -27.7842 17.3008 -56.1133 25.0879c-22.7812 6.26855 -37.6533 16.5859 -44.3047 21.0068c-11.2578 7.47949 -21.7617 15.0439 -30.5713 25.377c-5.83203 6.82617 -11.6055 14.0615 -15.168 22.3965
-c-1.51562 3.62109 -3.20605 7.58691 -4.43164 11.377c-0.920898 3.67871 0.751953 7.19824 3.43945 9.74121c2.10059 2.10059 4.40332 3.6084 7.35059 3.67676c11.7197 0.267578 40.0186 -15.8535 51.9746 -21.2939c3.4834 -1.58301 8.84668 -4.10742 8.4502 -8.7627
-c-1.14258 -13.3564 -48.1816 -1.5332 -48.0742 -1.55859c1.13965 -0.291992 14.1465 -4.39355 21.2383 -5.45508c6.78906 -1.01953 25.1143 -5.6377 29.1328 3.88867c1.16113 2.7334 0.99707 4.77832 -0.354492 9.0791c-0.0917969 0.292969 5.80762 0.499023 9.31543 6.4873
-c3.50684 5.99805 0.679688 14.0039 0.636719 13.8125c0.120117 0.107422 7.77246 1.51465 11.4092 6.43164c2.42285 3.28906 2.32812 9.03711 2.56836 12.2422c0.0361328 -0.0341797 9.17871 -2.41113 14.1768 4.55078c3.25098 3.45801 5.91211 10.4033 1.35156 15.21
-l-31.7969 33.625l28.2803 -33.0859c5.38867 -6.36719 1.02832 -16.5654 -7.06055 -17.5938c-3.43652 -0.464844 -6.69434 0.853516 -9.10547 3.12891l-39.8086 37.4023c-1.84766 1.7373 -3.56641 3.86426 -3.92285 6.47266
-c-0.21582 1.65625 0.211914 3.41406 0.861328 4.92578c1.0752 2.47266 2.88574 3.98438 4.89941 5.74219c2.7002 2.39844 5.22852 4.2373 8.84961 4.88672c2.46387 0.455078 6.33105 0.726562 8.22559 -1.4502l36.584 -31.2109
-c3.50098 -2.9873 15.7695 -4.15137 15.7412 -4.19434zM234.662 0.453125c7.06055 -4.49219 5.89941 -15.5117 -1.51465 -18.8984c-3.14453 -1.45312 -6.65137 -1.16699 -9.62891 0.289062l-49.1113 23.9209c-2.27246 1.10254 -4.54883 2.61719 -5.66016 5.00879
-c-0.695312 1.52148 -0.819336 3.3291 -0.643555 4.96387c0.295898 2.67871 1.57715 4.66406 2.97754 6.93945c1.86914 3.08887 3.73535 5.60059 6.99902 7.29395c2.2207 1.16406 5.83594 2.56543 8.2832 1.04395l48.2988 -30.5615v0zM248.688 20.0693
-c6.27246 -5.53906 3.39941 -16.2441 -4.44336 -18.4307c-3.35059 -0.951172 -6.7627 -0.114258 -9.47266 1.79199l-44.7725 31.291c-2.07227 1.45312 -4.08301 3.31055 -4.80371 5.84766c-0.452148 1.60059 -0.283203 3.4082 0.144531 4.99023
-c0.702148 2.6084 2.28516 4.36035 4.01562 6.39844c2.32812 2.75879 4.56641 4.94434 8.06152 6.10254c2.36816 0.806641 6.15918 1.62598 8.3418 -0.258789l42.9277 -37.7324h0.000976562z" />
-    <glyph glyph-name="uniF137" unicode="&#xf137;" 
-d="M256 -143.36l57.4814 -35.4092c-18.1162 -5.82031 -37.4316 -8.96387 -57.4814 -8.96387s-39.3652 3.14355 -57.4814 8.96387zM256 140.503l-59.3398 37.6592c18.6504 6.20898 38.6025 9.57129 59.3398 9.57129s40.6895 -3.3623 59.3398 -9.57129z" />
-    <glyph glyph-name="uniF17F" unicode="&#xf17f;" 
-d="M0 -224l480 480h32v-32l-480 -480h-32v32z" />
-    <glyph glyph-name="uniF124" unicode="&#xf124;" 
-d="M0 98.8018c3.8623 9.75684 74.2695 79.5938 114.834 116.647l-70.5977 36.0889l92.9648 0.19043l27.7217 -29.5645l24.3857 24.2393c9.5957 -9.23047 9.52344 -31.041 0.365234 -54.4912l121.271 -16.6475l396.156 0.249023
-c8.33789 -4.56445 29.915 -0.511719 39.7598 -42.7158l0.205078 -161.499l12.0391 -15.0527c-6.52441 -19.3389 -12.624 -39.2051 -20.9766 -56.2471c-8.51465 15.1406 -14.7461 35.5039 -16.0186 63.21l-0.249023 172.661
-c-7.82617 11.8789 -17.0566 19.251 -30.6318 12.8877c5.64648 -9.59668 10.6641 -19.5293 10.123 -32.4463l0.174805 -367.63l-45.2607 -0.19043c22.0166 55.4131 8.19238 110.636 -35.3857 161.704l-69.3252 -161.821h-43.0078
-c14.7158 24.0059 31.8467 44.1494 35.0645 86.5576c-0.702148 42.3057 -6.30469 81.2471 -32.8408 105.837l-128.454 -22.4248l13.5029 -169.779l-43.667 -0.131836c16.0479 50.0732 -1.36035 112.669 -32.0361 148.509l-19.4854 -148.567l-45.2607 0.117188
-c61.4102 158.091 -32.124 236.777 -100.894 318.742l-122.295 0.145508c-15.6816 3.8623 -24.6055 16.7354 -32.1826 31.4229z" />
-    <glyph glyph-name="uniF11A" unicode="&#xf11a;" 
-d="M139.123 -29.2207v58.4414h87.6562v87.6562h58.4414v-87.6562h87.6562v-58.4414h-87.6562v-87.6562h-58.4414v87.6562h-87.6562v0z" />
-    <glyph glyph-name="uniF148" unicode="&#xf148;" 
-d="M418.62 37.1201v0.0195312c29.71 0.379883 58.3604 -15.4893 75.7803 -39.2197c33.4199 -42.7295 17.04 -110.88 -30.4902 -135.9c-49.3105 -30.2598 -120.23 -0.259766 -134.891 55.1309c-19.0596 56.7393 29.7803 122.109 89.6006 119.97zM417.87 5.76953
-c-49.4102 1.54004 -80.1299 -62.1396 -48.5098 -99.9297c25.4092 -35.8203 86.7197 -30.5996 104.72 10.1699c22.5996 39.3105 -12.0098 91.5303 -56.21 89.7598zM93.7803 37.1201c29.7197 0.399414 58.3701 -15.4697 75.79 -39.2002
-c33.4199 -42.7197 17.0293 -110.88 -30.5 -135.9c-49.3105 -30.2598 -120.221 -0.259766 -134.88 55.1309c-19.0605 56.75 29.7598 122.119 89.5898 119.97zM93.0596 5.75v0.00976562c-49.3994 1.56055 -80.21 -62.1396 -48.5098 -99.9199
-c25.4004 -35.8203 86.6807 -30.5996 104.69 10.1504c22.5996 39.2998 -11.9902 91.5098 -56.1807 89.7598zM231.75 161.96v-32.1504h-42.8203c-23.7295 -55.4697 -47.4697 -110.939 -71.1992 -166.409c-3.41016 -18.7705 -28.8906 -52.3506 -39.8604 -23.1504
-c22.3096 62.5801 51.0195 123.37 75.46 185.38c6.92969 38.2305 47.2998 39.8301 78.4199 36.3301zM160.1 93.0098c23.4902 -3.59961 53.96 5.11035 73.21 -5.96973c8.41016 -13.4199 16.8105 -26.8496 25.2207 -40.2705
-c-4.41016 -21.7998 -22.0107 -45.3896 -18.3398 -66.0693c8.5293 -13.9307 16.71 -28.54 36.1396 -21.8105c49.2998 -0.199219 98.6104 -0.25 147.91 -0.65918c29.6797 -11 -2.75977 -40.6504 -23.6201 -30.1006c-51.4199 0.530273 -103.2 -2.14941 -154.39 0.600586
-c-28.0508 12.5293 -34.9404 46.9199 -52.9805 69.3193c-13.1904 29.79 -50.3799 56.3701 -33.9902 91.2803l0.870117 3.68945v0zM484.21 92.2695c0.830078 -19.9795 8.09961 -45.96 -21.6299 -38.0791c-30.8301 -5.53027 -68.4404 6.23926 -93.7705 -16.1504
-c-27.9199 -28.5098 -44.2793 21.6504 -52.2793 42.0801c5.41992 21.6895 36.8701 9.0498 55.0293 12.1396h112.65v0.00976562zM97.1699 34.0498c-10.4395 -1.4502 -21.0801 -1.75977 -31.3896 -4.04004c-37.3906 23.6602 50.0898 41.2998 31.3896 4.04004z" />
-    <glyph glyph-name="uniF16A" unicode="&#xf16a;" 
-d="M224.674 149.339c14.0752 0 25.498 -11.2549 25.498 -25.1318c0 -13.8779 -11.4229 -25.1318 -25.498 -25.1318c-14.0859 0 -25.498 11.2539 -25.498 25.1318c-0.00976562 13.877 11.4121 25.1318 25.498 25.1318zM218.2 80.2783l44.2949 25.7744
-c2.79102 0.970703 6.03809 0.564453 9.58105 -0.811523l50.3037 -31.8818l-0.386719 -34.2588c-1.38574 -11.8682 -16.4902 -10.917 -16.3711 0v29.5273l-30.3486 13.3818l18.7676 -85.8184l5.58203 -65.3682l16.3721 -46.8389
-c7.31543 -17.7969 -8.9082 -26.458 -18.7666 -8.68066l-19.1641 38.1973l-17.5693 61.0332l-19.5684 -33.8623l-1.19824 -64.9619c-3.3252 -23.4297 -21.4297 -16.7383 -20.7764 0v66.1406l19.5293 58.499l-16.3223 52.1436l-9.18555 -34.6436l-13.8877 -33.5059
-c-4.47363 -7.5127 -14.54 -0.901367 -11.9766 4.33496l11.8877 30.3486l12.9375 53.6191c1.11816 3.09766 3.33594 5.58203 6.26562 7.63184zM113.545 -39.2441l239.024 86.2344l1.60352 -4.30566l-239.034 -86.2344l-1.59375 4.30566zM157.899 -24.3965
-c-19.9941 8.07715 -35.8115 6.57227 -42.4834 -16.0059c14.1543 5.33496 28.3193 10.6709 42.4834 16.0059z" />
-    <glyph glyph-name="uniF13E" unicode="&#xf13e;" 
-d="M15.5391 105.354l-10.6113 39.6035l39.6025 10.6113l451.931 -260.922l10.6113 -39.6035l-39.6025 -10.6113z" />
-    <glyph glyph-name="uniF15C" unicode="&#xf15c;" 
-d="M175.214 57.0146c7.06738 0 12.8154 5.7793 12.8154 12.8701c0 7.08984 -5.74805 12.8691 -12.8154 12.8691c-7.04688 0 -12.8086 -5.7793 -12.8086 -12.8691c0 -7.09082 5.76172 -12.8701 12.8086 -12.8701zM365.077 16.3154c7.05371 0 12.8154 5.78613 12.8154 12.8623
-c0 7.09668 -5.76172 12.8691 -12.8154 12.8691s-12.8154 -5.77246 -12.8154 -12.8691c0 -7.07617 5.76172 -12.8623 12.8154 -12.8623zM158.611 64.6562v0c4.33887 -3.06836 8.67773 -6.16992 13.0166 -9.23828c4.6377 -7.73828 9.2334 -15.4482 13.8848 -23.1797
-c1.41016 -2.46094 1.36133 -4.85938 -0.172852 -7.32031l-2.42969 -3.1377v-7.84277l150.651 -32.7666l3.29785 7.14648l-0.868164 3.83398c-0.34668 2.87207 0.645508 5.16602 2.95117 6.79785c7.45605 5.06055 14.9326 10.1152 22.3896 15.1631
-c5.2207 0.948242 10.3994 1.84668 15.6201 2.78809l20.1328 -32.9404c2.70801 -3.9043 2.36133 -7.89844 -1.04102 -12.2002c-1.02734 -1.3457 -2.08984 -2.48926 -3.12402 -3.83398c5.29004 -0.976562 10.5176 -2.33594 15.7939 -3.31152l-3.12402 -14.9893
-l-44.085 9.75977l-22.2158 -16.9053l-11.9756 9.41113l9.71973 13.0723l-164.017 35.7285l3.29785 -16.0342l-14.9268 -3.48633l-12.8438 24.749l-44.084 9.76074l3.4707 14.9883c5.20703 -1.35156 10.4277 -2.31445 15.6211 -3.65918
-c-0.368164 1.65918 -0.847656 3.03906 -1.21484 4.70508c-1.29199 5.33398 0.242188 9.10547 4.33887 11.5029zM166.595 43.2178v0l-10.2402 -10.9795l12.4971 -15.3379l8.67773 -1.91699l1.38867 13.0713zM360.638 0.866211v0l-17.5303 -8.54004l-4.16504 -12.375
-l8.67773 -1.91699l17.7031 8.54004zM241.451 -82.584v50.3555l15.1484 13.6924l15.4824 -13.6924v-50.3555h-30.6309v0z" />
-    <glyph glyph-name="uniF12F" unicode="&#xf12f;" 
-d="M253.922 54v0h157.868v-4.7627h-5.64453l0.176758 -17.6387l5.46777 0.176758v-5.29199h-22.2246v-3.88086h22.2246l9.17285 -38.6289h7.9375v-9.52539h-76.5527c0.994141 -3.68262 1.91211 -7.64746 1.05762 -11.4648
-c-1.21289 -5.43262 -4.44434 -10.3857 -9.17188 -13.4053c-3.62695 -2.30762 -7.39453 -2.79395 -11.6416 -3.17578c-3.69043 0.452148 -7.59863 1.03027 -10.7598 3.17578c-4.58594 3.11133 -8.04297 7.80273 -9.17188 13.2285
-c-0.826172 3.98633 0.162109 7.78223 1.23438 11.6416h-159.279c0.754883 -3.68945 1.55273 -7.73926 0.529297 -11.4648c-1.46094 -5.32715 -4.91797 -10.0117 -9.70117 -12.876c-3.5918 -2.18066 -7.28906 -2.66016 -11.4658 -2.99902
-c-3.64062 0.458984 -7.62012 0.945312 -10.7598 2.99902c-4.56445 2.95605 -7.81738 7.59863 -9.17188 12.876c-0.973633 3.86621 -0.296875 7.61328 0.529297 11.4648h-28.5752v9.52539l8.29004 -0.176758c1.21387 -0.0283203 2.41309 0.0986328 3.35156 0.881836
-c0.945312 0.819336 1.48145 1.94043 1.58789 3.17578l2.99805 32.6318c0.113281 1.26953 0.945312 2.56055 1.94043 3.35156c0.741211 0.599609 1.69336 0.761719 2.64551 0.881836c0.946289 0.133789 1.8418 0.232422 2.82227 0.352539l57.8555 7.4082l2.46973 19.2266
-h3.88086l-0.881836 -20.9902l2.64551 -12.3477h10.9365l0.881836 4.7627c0.444336 2.10254 0.754883 4.25488 1.23438 6.34961c0.233398 1.04492 0.564453 1.96875 0.881836 2.99902c0.303711 0.783203 0.579102 1.59473 1.05859 2.29297
-c0.550781 0.790039 1.20605 1.48145 1.94043 2.11719c0.606445 0.521484 1.39648 0.853516 2.11621 1.23438c-1.07227 0.564453 -2.15918 1.23438 -2.99805 2.11621c-1.05176 1.12207 -1.4541 2.73047 -1.23535 4.2334c0.169922 1.12891 0.585938 2.30078 1.05859 3.35156
-c-0.860352 0.148438 -1.79199 0.225586 -2.64551 0.352539c-0.380859 0.0429688 -0.670898 0.141602 -1.05859 0.176758c-0.46582 0.0703125 -0.959961 0.0986328 -1.41113 0.176758v0.705078h3.35156h2.64551l0.529297 4.05762v0.175781
-c0.839844 0.0136719 1.67188 -0.183594 2.46973 -0.352539c1.35449 -0.303711 2.61035 -0.924805 3.7041 -1.76367c1.44629 -1.11523 2.7793 -2.49121 3.7041 -4.05762c0.472656 -0.775391 0.916992 -1.62988 1.23438 -2.46875l3.7041 -2.99902l-0.529297 -1.05859
-l-4.05664 2.99902c-0.0703125 -0.754883 -0.0488281 -1.58008 -0.352539 -2.29297c-0.367188 -0.910156 -0.973633 -1.50293 -1.76367 -2.11719c-0.550781 -0.444336 -1.25586 -0.838867 -1.94043 -1.05762c0.868164 -0.345703 1.7002 -0.699219 2.46973 -1.23535
-c1.9043 -1.35449 2.79395 -3.93652 2.99805 -6.17383l1.05859 -11.9941l1.76367 14.1113c0.387695 3.08301 1.01562 6.32129 3.52832 8.4668c2.51855 2.1377 5.88379 1.98926 8.99512 2.11621l7.23242 0.353516v5.64355h20.8135v-26.9873h24.3418v3.88086h-18.874v5.29199
-h3.52832v17.2861h-2.99902v4.93848zM260.096 49.0615v0v-17.2861h12.1709v17.2861h-12.1709zM275.971 49.0615v0v-17.2861h11.9941v17.2861h-11.9941zM292.375 49.0615v0v-17.2861h11.9941v17.2861h-11.9941zM308.779 49.0615v0v-17.2861h11.9941v17.2861h-11.9941z
-M325.007 49.0615v0v-17.2861h11.9941v17.2861h-11.9941zM341.234 49.0615v0v-17.2861h11.9951v17.2861h-11.9951zM357.286 49.0615v0v-17.2861h11.9941v17.2861h-11.9941zM373.514 49.0615v0v-17.2861h11.9951v17.2861h-11.9951zM389.918 49.0615v0v-17.2861h11.9941
-v17.2861h-11.9941zM275.971 26.4834h110.243v-3.88086h-110.243v3.88086v0z" />
-    <glyph glyph-name="uniF193" unicode="&#xf193;" 
-d="M205.316 127.62c1.66309 1.16406 3.69043 1.84766 5.875 1.84766c5.66211 0 10.2549 -4.59082 10.2549 -10.2549c0 -1.06152 -0.162109 -2.08594 -0.461914 -3.0498l-9.08594 -30.2783h132.032v-215.353h-51.2744v164.078h-80.7578l9.08594 -30.2783
-c0.299805 -0.962891 0.461914 -1.9873 0.461914 -3.0498c0 -5.66211 -4.59277 -10.2549 -10.2549 -10.2549c-2.18457 0 -4.21191 0.683594 -5.875 1.84766l-97.2471 67.374l97.2471 67.3711v0z" />
-    <glyph glyph-name="uniF163" unicode="&#xf163;" 
-d="M56 200l25 -50v-350h-50v350zM156 200l25 -50v-350h-50v350zM256 200l25 -50v-350h-50v350zM356 200l25 -50v-350h-50v350zM456 200l25 -50v-350h-50v350zM6 75v50h500v-50h-500zM6 -175v50h500v-50h-500z" />
-    <glyph glyph-name="uniF183" unicode="&#xf183;" 
-d="M116 -71.6436v127.506l280 -127.506h-280v0zM225.875 9.33496v0c-7.88086 0 -14.3047 6.56641 -14.3047 14.2852c0 7.88672 6.42383 14.4482 14.3047 14.4482c7.8623 0 14.2861 -6.56152 14.2861 -14.4482c0 -7.71875 -6.42383 -14.2852 -14.2861 -14.2852z
-M312.106 -30.6504v0c-7.88672 0 -14.3096 6.42871 -14.3096 14.291c0 7.88086 6.42285 14.3047 14.3096 14.3047c7.88086 0 14.2852 -6.42383 14.2852 -14.3047c0 -7.8623 -6.4043 -14.291 -14.2852 -14.291zM194.646 37.624c6.42285 10.5195 18.668 22.4736 33.2549 21.46
-c6.1416 8.75586 21.8857 12.8281 27.2959 12.5459c5.39062 -0.286133 4.66406 0.282227 8.0293 -1.46191l37.0645 -17.5078c3.92871 -2.4707 5.67383 -5.83496 6.40039 -9.2002l3.36426 -23.7686l28.5957 -12.8516c3.95215 -2.4707 5.69238 -7.88184 3.05859 -13.2725
-l-8.4502 -18.377l-3.50781 -0.306641l-2.32812 1.31934c9.18164 20.7285 -21.1582 36.7783 -31.96 14.8926l-54.2656 24.5c9.48242 22.6162 -21.7471 33.5615 -31.6738 14.8975l-14.8779 7.13086v0zM267.743 39.6699l8.75586 16.9238l-16.6377 8.6123
-c-6.56641 2.0459 -9.48633 1.17578 -12.2637 -1.74414l-8.89453 -9.93164l29.04 -13.8604v0zM272.709 37.624v0l30.6416 -14.5918l-3.79102 22.7793l-18.4004 8.89453z" />
-    <glyph glyph-name="uniF167" unicode="&#xf167;" 
-d="M191.796 88.9199l64.1709 62.5879l64.2705 -62.6211v-74.9873l66.0176 0.65918l0.330078 -38.9775h-66.249v-127.089l-64.3691 63.3799l-64.2695 -63.3467v127.089h-66.2822l0.330078 38.9775l66.0508 -0.65918v74.9873z" />
-    <glyph glyph-name="uniF143" unicode="&#xf143;" 
-d="M346.99 -56.0273h-183.526l0.131836 161.791c0 5.78223 7.9502 14.1904 14.9688 14.1904l153.411 0.144531c6.76367 0 15.084 -9.27344 15.084 -14.8945zM203.241 77.8828v-89.1885h105.518v89.1885h-105.518zM166.953 -59.9414h20.9365l2.53027 -3.67773
-l0.078125 -51.666l-3.92773 -3.6709l-18.9023 -0.226562l-3.24414 3.13477l0.157227 53.5615l2.37207 2.54492v0zM197.487 -60.2998v0h20.9316l2.52344 -3.67383l0.0234375 -15.7393l3.05566 -3.02734l14.0547 0.0224609v0.711914h2.26953
-c0 2.05762 8.14062 8.60254 15.7676 8.61523v0.0224609c7.63477 0 15.792 -6.53418 15.792 -8.59277l2.26855 -0.0224609l-0.0224609 -0.69043l14.0547 -0.0439453l2.98633 2.96094l0.046875 16.9189l2.38477 2.53809h20.9316l2.52344 -3.67383l0.0927734 -51.6709
-l-3.93652 -3.67285l-18.8936 -0.222656l-3.24219 3.13867l0.046875 17.8105l-2.06055 2.07031l-14.9121 0.0888672l-0.0458984 -0.69043l-2.08398 0.0449219c-0.0625 -1.42773 -8.29102 -8.69043 -15.9072 -8.70508v-0.0439453
-c-7.62207 0 -15.8896 7.29785 -15.9531 8.72656l-2.08398 -0.0449219l-0.0234375 0.667969l-14.9111 -0.0664062l-2.15332 -2.18164l0.0234375 -16.9199l-3.93652 -3.67285l-18.8936 -0.222656l-3.26465 3.13867l0.162109 53.5635zM323.913 -59.875h20.9365l2.5293 -3.67773
-l0.0791016 -51.666l-3.92871 -3.6709l-18.9014 -0.226562l-3.24512 3.13477l0.157227 53.5615l2.37305 2.54492v0z" />
-    <glyph glyph-name="uniF162" unicode="&#xf162;" 
-d="M150.439 167.125l92.9102 -52.2812v9.41113h26.5889v-9.41113l93.0596 52.2812l16.5811 -30.3232l-88.7285 -51.0859l89.7734 -52.2803l-18.8203 -28.082l-91.8652 51.085v-74.9854l62.4385 -0.149414c26.8984 0 50.3389 -23.4639 50.3389 -51.6836
-c0 -28.2012 -23.4639 -51.5332 -51.6836 -51.5332c-28.2021 0 -51.5342 23.332 -51.5342 51.5332c0 14.0293 5.87305 27.085 15.2363 36.4473h-24.7959v-132.942h-26.5859v132.942h-24.6494c9.36328 -9.3623 15.2363 -22.418 15.2363 -36.4473
-c0 -28.2012 -23.4814 -51.5332 -51.6836 -51.5332c-28.2197 0 -51.5342 23.332 -51.5342 51.5332c0 28.2197 23.291 51.6836 50.1895 51.6836l62.4385 0.149414v74.9854l-91.7158 -51.085l-18.9697 28.082l89.7734 52.2803l-88.7285 51.0859zM182.854 -44.5381v0
-c-13.8857 0 -25.0947 -11.3584 -25.0947 -25.2441c0 -13.8916 11.209 -25.0947 25.0947 -25.0947s25.0947 11.2031 25.0947 25.0947c0 13.8857 -11.209 25.2441 -25.0947 25.2441zM330.584 -44.5381v0c-13.8857 0 -25.2441 -11.3584 -25.2441 -25.2441
-c0 -13.8916 11.3584 -25.0947 25.2441 -25.0947s25.0947 11.2031 25.0947 25.0947c0 13.8857 -11.209 25.2441 -25.0947 25.2441z" />
-    <glyph glyph-name="uniF14A" unicode="&#xf14a;" 
-d="M339.072 -1.01172v82.2695l20.7998 54.8535l-43.5059 15.8887l-25.9121 -70.5752v-164.901l25.9121 -70.5693l43.5059 15.9111l-20.7998 54.8311v82.292zM176.771 -1.01172v82.2695l-20.7705 54.8535l43.501 15.8887l25.9111 -70.5752v-164.901l-25.9111 -70.5693
-l-43.501 15.9111l20.7705 54.8311v82.292z" />
-    <glyph glyph-name="uniF111" unicode="&#xf111;" 
-d="M411.04 96c16.1064 0.0146484 31.9023 -0.00878906 47.2812 -0.0634766c4.11035 -1.24219 5.29199 -1.04395 5.54688 -0.935547c-0.228516 -0.207031 -0.819336 -1.4834 2.50684 -7.16113c0.509766 -4.06641 6.62988 -11.2881 1.01953 -13.6211
-c-4.39258 -3.41992 -12.4443 -5.78027 -6.82031 -12.0703c0.720703 -8.28223 1.12891 -16.917 2.06055 -25.3086c3.43457 -26.7031 1.93164 -53.627 2.23145 -80.4736c1.84961 -5.77344 14.9492 -4.88086 8.7334 -14.7471l-75.4795 -11.5391
-c0 22.5215 -18.2783 40.7998 -40.7998 40.7998s-40.8008 -18.2783 -40.8008 -40.7998h-138.72c0 22.5215 -18.2783 40.7998 -40.7998 40.7998s-40.7998 -18.2783 -40.7998 -40.7998c-15.2324 -0.0234375 -30.626 -0.317383 -46.0273 -0.616211
-c-4.43359 1.2168 -14.1875 -2.99121 -15.0244 1.8916c0.116211 5.85449 -1.89551 13.0176 5.82227 14.1738v42.0957c1.42188 7.48633 -2.49609 13.709 -5.82227 20.0811c7.88184 18.3877 15.7705 36.7773 23.6514 55.165c6.59668 6.68457 -3.83203 7.77539 -3.99512 13.1543
-c-0.707031 6.75195 4.42188 14.1777 8.0332 19.3799c107.441 -1.04102 235.458 0.493164 348.202 0.594727zM443.68 76.2803l-30.9189 -0.489258v-60.5195h39.4189zM131.178 76.0889v-61.4551h60.1162v61.4551h-60.1162zM201.919 76.0889v-61.4551h60.1367v61.4551h-60.1367
-zM272.681 76.0889v-61.4551h60.1172v61.4551h-60.1172zM343.508 76.0889v-61.4551h58.1182v61.4551h-58.1182zM86.5312 70.8193l-32.5127 -58.5234l7.99023 -17.5098l59.0537 -0.509766v76.543h-34.5312zM137 -32.5195c20.6445 0 37.4004 -16.7559 37.4004 -37.4004
-s-16.7559 -37.4004 -37.4004 -37.4004s-37.4004 16.7559 -37.4004 37.4004s16.7559 37.4004 37.4004 37.4004v0zM357.32 -32.5195c20.6445 0 37.3994 -16.7559 37.3994 -37.4004s-16.7549 -37.4004 -37.3994 -37.4004c-20.6455 0 -37.4004 16.7559 -37.4004 37.4004
-s16.7549 37.4004 37.4004 37.4004v0z" />
-    <glyph glyph-name="uniF135" unicode="&#xf135;" 
-d="M390.338 61.4463c0 62.9238 -49.0762 112.024 -109.162 112.024c-60.2793 0 -109.181 -49.1006 -109.181 -109.187l-0.173828 -24.5469l-39.3174 12.4473c-5.13477 0 -10.8418 -5.33398 -10.8418 -11.3838c0 -2.2959 1.43164 -5.14062 2.32129 -6.22363l79.2998 -116.991
-l78.415 116.102c0.890625 1.43164 2.32227 4.26953 2.32227 7.11328c0 6.0498 -4.81738 11.3838 -11.042 11.3838l-39.6396 -12.4473l0.348633 24.5469c-0.174805 26.3027 21.1611 47.6445 47.4883 47.6445c26.3027 0 47.6445 -21.3418 47.6445 -50.4824v-234.917h61.5176
-v234.917z" />
-    <glyph glyph-name="uniF19D" unicode="&#xf19d;" 
-d="M259.319 161.407c-60.6094 0 -109.741 -49.1318 -109.741 -109.742v-69.96l-32.4023 9.72266c-1.03027 0.321289 -2.12695 0.495117 -3.2627 0.495117c-6.05957 0 -10.9746 -4.91504 -10.9746 -10.9746c0 -2.33789 0.731445 -4.50684 1.97754 -6.28711l72.0967 -104.068
-l72.0986 104.068c1.24609 1.78027 1.97754 3.94727 1.97754 6.28711c0 6.05957 -4.91211 10.9746 -10.9746 10.9746c-1.13574 0 -2.23242 -0.173828 -3.2627 -0.495117l-32.4023 -9.72266v69.96c0 30.3037 24.5674 54.8711 54.8701 54.8711
-c30.3037 0 54.8711 -24.5674 54.8711 -54.8711v-181.072h54.8711v181.072c0 60.6104 -49.1318 109.742 -109.742 109.742z" />
-    <glyph glyph-name="uniF19C" unicode="&#xf19c;" 
-d="M301.527 -173.119c-0.0576172 9.50781 -1.64453 263.623 -1.65723 263.623c-0.108398 0 -1.74414 -0.493164 -12.5498 -3.91113c-5.88184 -1.86133 -10.9766 -3.44043 -11.292 -3.51074c-0.431641 -0.0947266 -0.845703 -0.139648 -1.73242 -0.115234
-c-1.38379 0.0351562 -2.07422 0.180664 -3.20605 0.713867c-2.20312 1.03613 -3.67676 2.99121 -4.20898 5.51367c-0.133789 0.631836 -0.115234 0.97168 -0.0927734 2.07227c0.0322266 1.46777 0.118164 2.17285 0.558594 3.10156
-c0.171875 0.362305 46.0312 68.6309 51.6025 76.8242c0.155273 0.231445 0.28418 0.420898 0.287109 0.423828c0.0302734 0.0253906 5.76953 -8.23145 36.3477 -52.4639c8.96777 -12.9717 16.3945 -23.8398 16.5342 -24.126
-c0.452148 -0.924805 0.600586 -1.62793 0.651367 -3.09375c0.0361328 -1.09766 0.0595703 -1.44043 -0.0673828 -2.07422c-0.597656 -3.01953 -2.69824 -5.2832 -5.58008 -6.09961c-0.856445 -0.242188 -2.68457 -0.299805 -3.5166 -0.12793
-c-0.318359 0.0664062 -5.43164 1.58105 -11.3379 3.36914c-10.8799 3.29297 -12.5117 3.75391 -12.624 3.75293c-0.00683594 0 1.5752 -254.113 1.62891 -263.622l-39.7451 -0.25v0zM211.972 171.618c0.0576172 -9.50684 1.64551 -263.622 1.65723 -263.622
-c0.108398 0 1.74512 0.493164 12.5508 3.91113c5.88184 1.86035 10.9746 3.43945 11.292 3.51074c0.431641 0.0947266 0.844727 0.139648 1.73242 0.115234c1.38477 -0.0361328 2.07324 -0.180664 3.20605 -0.714844c2.20312 -1.03613 3.67773 -2.99121 4.20996 -5.51172
-c0.132812 -0.632812 0.115234 -0.973633 0.0917969 -2.07422c-0.0322266 -1.4668 -0.119141 -2.1709 -0.558594 -3.10156c-0.171875 -0.362305 -46.0312 -68.6299 -51.6025 -76.8242c-0.155273 -0.231445 -0.283203 -0.420898 -0.286133 -0.423828
-c-0.0302734 -0.0244141 -5.76953 8.23242 -36.3477 52.4648c-8.96777 12.9717 -16.3955 23.8398 -16.5342 24.125c-0.453125 0.924805 -0.600586 1.62793 -0.651367 3.09375c-0.0371094 1.09863 -0.0595703 1.44141 0.0673828 2.0752
-c0.59668 3.01855 2.69727 5.28418 5.58008 6.09961c0.856445 0.241211 2.68555 0.298828 3.5166 0.12793c0.317383 -0.0654297 5.43164 -1.58105 11.3379 -3.36816c10.8799 -3.29395 12.5117 -3.75391 12.623 -3.75293
-c0.00585938 -0.000976562 -1.5752 254.112 -1.62793 263.621l39.7432 0.249023v0z" />
-    <glyph glyph-name="uniF12E" unicode="&#xf12e;" 
-d="M252.927 46.8682v0h137.53v-4.14941h-4.91699l0.15332 -15.3662l4.76367 0.15332v-4.60938h-19.3623v-3.38086h19.3623l7.99023 -33.6523h6.91504v-8.29883h-66.6904c0.867188 -3.20801 1.66602 -6.66211 0.921875 -9.98828
-c-1.05664 -4.73242 -3.87207 -9.04688 -7.99023 -11.6777c-3.15918 -2.00977 -6.44238 -2.43457 -10.1426 -2.7666c-3.21387 0.393555 -6.61914 0.897461 -9.37305 2.7666c-3.99512 2.70996 -7.00684 6.79785 -7.99023 11.5244
-c-0.719727 3.47266 0.140625 6.78027 1.0752 10.1416h-138.76c0.658203 -3.21387 1.35254 -6.74219 0.460938 -9.98828c-1.27246 -4.64062 -4.28418 -8.72168 -8.45117 -11.2168c-3.12891 -1.89941 -6.34961 -2.31738 -9.98828 -2.6123
-c-3.17188 0.399414 -6.63867 0.823242 -9.37402 2.6123c-3.97656 2.5752 -6.81055 6.61914 -7.99023 11.2168c-0.848633 3.36914 -0.257812 6.63281 0.460938 9.98828h-24.8936v8.29883l7.22168 -0.154297c1.05762 -0.0244141 2.10254 0.0859375 2.91992 0.768555
-c0.824219 0.712891 1.29102 1.69043 1.38281 2.76562l2.6123 28.4287c0.0986328 1.10645 0.824219 2.23047 1.69043 2.91895c0.645508 0.522461 1.47559 0.664062 2.30469 0.768555c0.824219 0.117188 1.60449 0.203125 2.45898 0.307617l50.4023 6.4541l2.15137 16.749
-h3.38086l-0.768555 -18.2861l2.30469 -10.7568h9.52734l0.768555 4.14941c0.386719 1.83203 0.657227 3.70605 1.0752 5.53223c0.203125 0.90918 0.492188 1.71484 0.768555 2.6123c0.264648 0.681641 0.503906 1.38867 0.921875 1.99707
-c0.479492 0.688477 1.05078 1.29102 1.69043 1.84375c0.52832 0.455078 1.2168 0.744141 1.84375 1.07617c-0.933594 0.491211 -1.88086 1.0752 -2.6123 1.84375c-0.916016 0.977539 -1.26562 2.37891 -1.0752 3.68848c0.147461 0.983398 0.509766 2.00391 0.921875 2.91895
-c-0.75 0.129883 -1.56152 0.197266 -2.30469 0.307617c-0.332031 0.0371094 -0.583984 0.123047 -0.921875 0.15332c-0.40625 0.0615234 -0.835938 0.0869141 -1.22949 0.154297v0.614258h2.91895h2.30566l0.460938 3.53418v0.154297
-c0.731445 0.0117188 1.45605 -0.160156 2.15137 -0.307617c1.17969 -0.264648 2.27441 -0.805664 3.22656 -1.53711c1.25977 -0.970703 2.42188 -2.16895 3.22754 -3.53418c0.411133 -0.675781 0.798828 -1.41992 1.0752 -2.15137l3.22656 -2.6123l-0.460938 -0.921875
-l-3.53418 2.6123c-0.0615234 -0.657227 -0.0429688 -1.37695 -0.306641 -1.99707c-0.320312 -0.792969 -0.848633 -1.30957 -1.53711 -1.84473c-0.479492 -0.386719 -1.09375 -0.731445 -1.69043 -0.921875c0.755859 -0.300781 1.48145 -0.608398 2.15137 -1.0752
-c1.65918 -1.18066 2.43457 -3.42969 2.6123 -5.37891l0.921875 -10.4492l1.53711 12.2939c0.337891 2.68555 0.884766 5.50684 3.07324 7.37598c2.19434 1.8623 5.12598 1.7334 7.83691 1.84375l6.2998 0.307617v4.91699h18.1328v-23.5107h21.2061v3.38086h-16.4424v4.60938
-h3.07324v15.0596h-2.6123v4.30273zM258.305 42.5654v0v-15.0596h10.6035v15.0596h-10.6035zM272.135 42.5654v0v-15.0596h10.4492v15.0596h-10.4492zM286.426 42.5654v0v-15.0596h10.4492v15.0596h-10.4492zM300.717 42.5654v0v-15.0596h10.4492v15.0596h-10.4492z
-M314.854 42.5654v0v-15.0596h10.4492v15.0596h-10.4492zM328.991 42.5654v0v-15.0596h10.4492v15.0596h-10.4492zM342.975 42.5654v0v-15.0596h10.4492v15.0596h-10.4492zM357.111 42.5654v0v-15.0596h10.4492v15.0596h-10.4492zM371.402 42.5654v0v-15.0596h10.4492
-v15.0596h-10.4492zM272.135 22.8965h96.041v-3.38086h-96.041v3.38086v0z" />
-    <glyph glyph-name="uniF170" unicode="&#xf170;" 
-d="M165.724 -11.9775c0 12.8737 6.4362 19.3105 19.3086 19.3105s19.3086 -6.43685 19.3086 -19.3105c0 -12.8743 -6.4362 -19.3115 -19.3086 -19.3115c-12.8724 0 -19.3086 6.43718 -19.3086 19.3115zM92 -98v10.5332h330v-10.5332h-330zM285.085 -66.0029v-24.9746
-h-21.0635v24.9746h-101.809v-24.9746h-21.0635v24.9746v0h-17.3223v35.5957c0 8.93622 6.36491 17.0482 19.0947 24.3359l17.8438 44.8467h102.124l22.0596 -42.6729l4.98633 -3.98114c3.32422 -2.6541 6.64844 -5.97862 9.97266 -9.97359
-c3.32422 -3.99496 4.98633 -7.33329 4.98633 -10.015v-38.1357h-19.8096zM166.77 32.7217l-13.6074 -36.6416h120.525l-16.6875 36.6416h-90.2305zM172.745 17.8662c0 7.02279 3.51042 10.5342 10.5312 10.5342c7.02148 0 10.5322 -3.51139 10.5322 -10.5342
-c0 -7.02214 -3.51074 -10.5332 -10.5322 -10.5332c-7.02083 0 -10.5312 3.51107 -10.5312 10.5332zM379.872 -38.3115v-45.6436h-10.5312v45.6436h-10.5322v66.7119h31.5957v-66.7119h-10.5322zM353.497 -11.9395v0c0.510406 -3.32282 -0.898773 -5.23883 -4.22754 -5.74805
-c-3.32812 -0.509119 -5.24741 0.897781 -5.75781 4.2207c-0.0989685 0.649673 -0.193359 1.47812 -0.283203 2.48535c-0.625427 7.00392 -0.223419 13.5147 1.20605 19.5322c3.79495 15.9798 13.5694 23.9697 29.3232 23.9697c15.5523 0 25.801 -7.75032 30.7461 -23.251
-c2.0773 -6.51202 2.95883 -13.4176 2.64453 -20.7168c-0.0175476 -0.390232 -0.0354614 -0.705987 -0.0537109 -0.947266c-0.265228 -3.35124 -2.07611 -4.89486 -5.43262 -4.63086c-3.35654 0.263998 -4.90277 2.07194 -4.63867 5.42383
-c0.00997925 0.129497 0.0207214 0.325135 0.0322266 0.586914c0.262451 6.10807 -0.46347 11.8496 -2.17773 17.2246c-3.45105 10.8171 -10.4911 16.2256 -21.1201 16.2256c-10.4285 -5.72205e-06 -16.9265 -5.40398 -19.4941 -16.2119
-c-1.177 -4.95693 -1.50122 -10.3935 -0.972656 -16.3096c0.0732117 -0.819346 0.141907 -1.43719 0.206055 -1.85352zM337.745 -17.2441v10.5332h73.7227v-10.5332h-73.7227zM362.319 47.7109c0 8.19271 4.0957 12.2891 12.2871 12.2891s12.2871 -4.09636 12.2871 -12.2891
-s-4.0957 -12.2891 -12.2871 -12.2891s-12.2871 4.09636 -12.2871 12.2891zM358.809 -62.8887v31.5996h7.02148v-31.5996h-7.02148zM383.383 -55.8662v24.5771h7.02148v-24.5771h-7.02148zM358.809 -66.4004v7.02246h31.5957v-7.02246h-31.5957z" />
-    <glyph glyph-name="uniF13C" unicode="&#xf13c;" 
-d="M252.201 -104.03l4.93652 -0.191406s-2.10938 14.541 -14.5625 14.541c-9.43848 0 -17.8818 -7.51367 -21.417 -11.1514l-4.18848 0.297852l-0.121094 -9.95703l5.54297 -10.0645l2.5 14l9 -2l3 -10l5.49023 11.5l4 -1l3.5 -8.5l2.31934 12.5254v0zM123.128 -104.149v0v0
-c1.29492 0.285156 2.71875 0.567383 4.25098 0.833984c7.76172 1.35254 15.7148 1.89258 23.1162 1.15234c3.11328 -0.310547 6.0459 -0.845703 8.7666 -1.62305c17.708 -5.05957 30.9404 -5.57324 39.2217 -1.43262l-0.894531 1.78809
-c-7.72754 -3.86328 -20.5059 -3.36719 -37.7783 1.56738c-2.84082 0.811523 -5.88965 1.36816 -9.11621 1.69043c-7.60742 0.759766 -15.7324 0.208984 -23.6592 -1.17188c-1.89551 -0.330078 -3.62988 -0.68457 -5.16699 -1.03809
-c-0.347656 -0.0800781 -0.657227 -0.154297 -0.926758 -0.219727c-6.88965 4.83887 -13.9834 9.76855 -18.9111 21.373c-6.20801 14.6201 -8.53223 19.501 -1.80078 35.9844s12.3633 58.5938 51.1094 84.7578s69.8975 37.9814 69.8975 37.9814v8.77148
-s-11.7656 -2.72266 -15.6602 6.75586c-4.64453 11.3057 -6.05859 22.7646 1.65332 33.4404c7.71191 10.6768 11.0605 10.0352 23.1719 11c10.3047 0.822266 22.6201 -4.82227 26.0645 -6.52441c0.0849609 -0.848633 0.167969 -1.75195 0.24707 -2.69824
-c0.28418 -3.38574 0.47168 -6.74512 0.515625 -9.87793c0.0722656 -5.08301 -0.240234 -9.11621 -1.00488 -11.6504l1.91406 -0.578125c0.84082 2.78223 1.16602 6.98242 1.09082 12.2568c-0.0449219 3.18457 -0.234375 6.58789 -0.522461 10.0166
-c-0.0693359 0.833984 -0.142578 1.63574 -0.216797 2.39746v0c3.7832 1.16309 16.5879 4.90137 24.8936 4.90137c8.21875 0 23.3916 -3.66016 28.1582 -4.86426v0c1.33105 -2.28906 2.6582 -4.70117 3.90039 -7.1377c0.994141 -1.95117 1.89355 -3.84082 2.67578 -5.6416
-c2.04785 -4.71777 3.18652 -8.58789 3.18652 -11.2461h2c0 3.00391 -1.20312 7.0918 -3.35254 12.042c-0.798828 1.84082 -1.71582 3.76758 -2.72852 5.75391c-1.13965 2.23828 -2.35059 4.45312 -3.57031 6.57324c2.21875 2.44043 9.85645 10.2959 17.2617 11.5078
-c8.5752 1.4043 22.1768 -4.64258 24.4014 -13.6426c1.99219 -8.05957 8.8584 -21.4473 0 -32.7559c-8.8584 -11.3076 -24.4014 -10.0283 -24.4014 -10.0283s-1.80859 -56.9814 -11.5127 -77.3223c0.481445 -0.432617 0.986328 -0.955078 1.51074 -1.56055
-c-2.90137 -2.88086 -5.79785 -5.99316 -8.50879 -9.23438c-3.99414 -4.77637 -7.24902 -9.43457 -9.50684 -13.8389c-1.52246 -2.96973 -2.56445 -5.77734 -3.07227 -8.40137l1.96289 -0.379883c0.46875 2.42188 1.44727 5.05664 2.88965 7.86914
-c2.18066 4.25391 5.35449 8.79688 9.26074 13.4678c2.62305 3.13574 5.42578 6.15332 8.23828 8.95312v0c7.50781 -9.90625 18.0879 -34.0293 21.9668 -55.0098c4.3877 -23.7324 28.3438 -43.5703 28.3438 -43.5703l43.5312 -1.23242l-14.3672 -5.71973v-13.9824
-l-33.0967 -1.25488l-15.498 -4.73145v0c-1.42676 3.96777 -3.04297 7.87988 -4.85254 11.6143c-3.02148 6.23535 -6.40039 11.583 -10.1572 15.7725c-5.83496 6.50879 -12.875 16.0957 -23.0869 31.1416c-3.25488 4.79395 -23.1357 34.6133 -29.376 43.7617
-l-1.65234 -1.12695c6.2334 -9.13672 26.1123 -38.9541 29.373 -43.7578c10.2607 -15.1172 17.3398 -24.7578 23.2539 -31.3535c3.61621 -4.03418 6.89941 -9.22949 9.8457 -15.3096c2.09082 -4.31445 3.92188 -8.87891 5.49805 -13.4951
-c-0.383789 -10.9424 -3.37109 -10.9424 -3.37109 -10.9424l-5.73828 11c-7 0 -7 -18 -7 -18l-9 14c-7.92773 -3 -8.92773 -16.5176 -8.92773 -16.5176l-8.07227 13.5176s-0.271484 -0.0341797 -0.78418 -0.0966797c-0.114258 0.413086 -0.226562 0.826172 -0.338867 1.23828
-c-0.388672 1.42969 -0.755859 2.82227 -1.10059 4.16797c-1.82617 7.1416 -2.87598 12.5312 -2.87598 15.3428c0 4.21582 -2.38477 7.75781 -7.31152 12.4443c-0.393555 0.374023 -3.14746 2.92578 -3.84375 3.6084c-1.24512 1.2207 -2.03223 2.14355 -2.4707 2.93359
-c-4.29688 7.73438 -11.8945 15.8945 -20.3213 19.2646c-7.25098 2.90039 -18.0166 9.86035 -28.041 19.2979c-14.1592 13.332 -25.6885 30.2285 -33.0869 50.7539l-1.88086 -0.678711c7.50879 -20.833 19.2168 -37.9922 33.5967 -51.5312
-c10.2041 -9.60645 21.1816 -16.7031 28.6699 -19.6982c7.91992 -3.16797 15.2207 -11.0098 19.3154 -18.3799c0.554688 -0.999023 1.44629 -2.04395 2.81738 -3.38965c0.72168 -0.707031 3.49219 -3.27344 3.86719 -3.62988
-c4.55078 -4.3291 6.68945 -7.50586 6.68945 -10.9951c0 -3.03906 1.06934 -8.52832 2.93848 -15.8379c0.34668 -1.35547 0.716797 -2.75781 1.1084 -4.19727c0.0859375 -0.317383 0.172852 -0.634766 0.259766 -0.953125v0
-c-6.82227 -0.797852 -25.1279 -2.80469 -43.5215 -3.66406c-23.2275 -1.08398 -103.653 -3 -103.653 -3l-31.6143 -2.36816v5.36816l-11.9805 0.90625l3.70996 10.0938h-22.5654l-1.3916 13.6289l30.2471 2.27734c-1.01758 0.804688 -2.05371 1.57031 -3.10156 2.32227z
-M279.015 52.4971v0s0 -16.6211 16.0195 -19.748c6.94336 -1.35449 9.5 5.5 9.5 15s-2 19.5 -14.5 24s-11.0195 -19.252 -11.0195 -19.252zM248.74 75.7666l5.76855 -5.00684s6.49707 9.47949 16.7471 7.24316s0.688477 7.17969 -16.0615 2.47168
-s-6.4541 -4.70801 -6.4541 -4.70801v0zM320.769 86.3496v0s-15 -1.26074 -18 -3.51074s-2 -7.25 2 -3.25s17 0.5 17 0.5zM266.8 62.7549c4.41797 0 8 2.23926 8 5c0 2.76172 -3.58203 5 -8 5s-8 -2.23828 -8 -5c0 -2.76074 3.58203 -5 8 -5v0zM312.8 64.7549
-c4.41797 0 8 3.13477 8 7c0 3.86621 -3.58203 7 -8 7s-8 -3.13379 -8 -7c0 -3.86523 3.58203 -7 8 -7v0zM279.605 27.6084c0.423828 -0.222656 1.18359 -0.538086 2.24609 -0.84668c5.95605 -1.73145 13.1035 -1.00977 20.7588 3.88965l-1.07812 1.68457
-c-7.14062 -4.57031 -13.6943 -5.23242 -19.1221 -3.65332c-0.926758 0.269531 -1.56348 0.533203 -1.87305 0.696289l-0.931641 -1.77051v0zM288.81 21.1396c0.333008 -0.242188 0.935547 -0.571289 1.80859 -0.887695c3.90918 -1.42188 9.15918 -1.18359 15.6934 1.78613
-l-0.828125 1.82129c-6.06055 -2.75586 -10.7686 -2.96973 -14.1816 -1.72852c-0.69043 0.250977 -1.12891 0.490234 -1.31641 0.626953l-1.17578 -1.61816v0zM253.186 29.0957c0.0839844 -0.0927734 0.248047 -0.273438 0.487305 -0.537109
-c0.397461 -0.441406 0.859375 -0.955078 1.37988 -1.53711c1.48828 -1.66504 3.14648 -3.54199 4.93262 -5.5918c5.10254 -5.85449 10.2041 -11.917 14.9648 -17.8623c1.81934 -2.27148 3.55664 -4.48828 5.20117 -6.63672
-c5.22754 -6.83398 9.38672 -12.8223 12.2227 -17.7217l1.73047 1.00195c-2.88574 4.98633 -7.08984 11.0391 -12.3652 17.9346c-1.65332 2.16113 -3.39941 4.38867 -5.22754 6.67285c-4.78027 5.96875 -9.89941 12.0508 -15.0186 17.9258
-c-1.79199 2.05566 -3.45508 3.93945 -4.94922 5.60938c-0.522461 0.584961 -0.987305 1.10156 -1.3877 1.54492c-0.240234 0.266602 -0.40625 0.449219 -0.492188 0.543945l-1.47852 -1.34668v0zM225.019 70.9893c0.0693359 -0.482422 0.24707 -1.28809 0.578125 -2.31055
-c0.547852 -1.69434 1.3418 -3.3877 2.42969 -4.97363c1.18555 -1.72949 2.65137 -3.22266 4.42773 -4.40723c2.21484 -1.47559 2.60449 -3.19922 2.41406 -7.85547l-0.00585938 -0.146484c-0.191406 -4.70508 0.208984 -6.86719 2.47754 -8.90918l1.33789 1.4873
-c-1.66895 1.50195 -1.98535 3.20703 -1.81738 7.33984c0.00292969 0.0732422 0.00292969 0.0732422 0.00585938 0.147461c0.217773 5.31738 -0.297852 7.59766 -3.30273 9.60059c-1.55371 1.03613 -2.8418 2.34766 -3.8877 3.87402
-c-0.970703 1.41504 -1.68359 2.9375 -2.17676 4.45898c-0.292969 0.90625 -0.446289 1.60156 -0.5 1.97656l-1.98047 -0.282227v0zM156.147 -45.3994c0.142578 0.197266 0.422852 0.573242 0.831055 1.10254c0.683594 0.886719 1.47559 1.87598 2.36621 2.94141
-c2.54395 3.0459 5.36328 6.0918 8.37402 8.93066c7.26758 6.85547 14.4551 11.3965 21.0742 12.5566c2.13867 0.375 4.18945 0.386719 6.14941 0.015625c18.8896 -3.57324 49.2637 -37.7764 42.1328 -48.4727c-1.40039 -2.09961 -2.46582 -4.02051 -3.36426 -5.97949
-c-0.347656 -0.754883 -0.657227 -1.4873 -1.00586 -2.35742c-0.103516 -0.257812 -0.647461 -1.64062 -0.796875 -2.00684c-0.835938 -2.05762 -1.50586 -3.21875 -2.66016 -4.41895c-1.87012 -1.94434 -5.05664 -3.86719 -10.7441 -6.37695l0.806641 -1.8291
-c5.90625 2.60547 9.28809 4.64551 11.3799 6.82031c1.35938 1.41406 2.14746 2.7793 3.07129 5.05176c0.15332 0.378906 0.700195 1.76758 0.799805 2.01562c0.336914 0.841797 0.634766 1.54492 0.966797 2.26758c0.855469 1.86426 1.87012 3.69336 3.21094 5.7041
-c8.16895 12.2539 -23.3535 47.75 -43.4258 51.5479c-2.2041 0.416992 -4.49707 0.40332 -6.86523 -0.0117188c-7.08887 -1.24219 -14.5752 -5.9707 -22.1025 -13.0713c-3.07227 -2.89844 -5.94336 -6.00098 -8.53613 -9.10352
-c-0.907227 -1.08594 -1.71582 -2.0957 -2.41504 -3.00195c-0.420898 -0.545898 -0.713867 -0.938477 -0.868164 -1.15234l1.62109 -1.17188v0z" />
-    <glyph glyph-name="uniF120" unicode="&#xf120;" 
-d="M358.702 57.6445v0c0 9.25391 -2.18457 17.0469 -5.59082 20.6943c-1.71094 1.72168 -4.12402 2.9375 -7.05762 2.9375h-12.3965v-47.2705h10.9531c3.65137 0 5.81934 0.734375 7.75977 2.69238c4.14746 4.14453 6.33203 11.6934 6.33203 20.9463zM369.899 57.6445v0
-c0 -13.8877 -4.37598 -24.8467 -12.167 -30.9346c-2.66602 -2.43164 -6.33203 -3.64746 -9.96777 -3.89258h-3.89551h-21.1572v69.4102h22.3721c7.05762 0 9.73828 -0.726562 13.374 -3.64844c7.30957 -6.33203 11.4414 -17.2988 11.4414 -30.9346zM289.868 53.5078v0
-l-6.80469 19.4854l-7.0498 -19.4854h13.8545zM312.248 22.8174v0h-11.6709l-6.80566 19.4707h-21.6611l-6.80566 -19.4707h-11.6709l23.8389 69.4102h10.9531zM248.287 22.8174v0h-43.0547v69.4102h40.8555v-10.9512h-29.9189v-17.0547h20.1953v-11.1953h-20.1953v-19.0205
-h32.1182v-11.1885zM178.957 57.6445v0c0 9.25391 -2.19238 17.0469 -5.59082 20.6943c-1.70312 1.72168 -4.13184 2.9375 -7.06543 2.9375h-12.3965v-47.2705h10.9375c3.65137 0 5.85156 0.734375 7.79102 2.69238c4.13184 4.14453 6.32422 11.6934 6.32422 20.9463z
-M190.139 57.6445v0c0 -13.8877 -4.36816 -24.8467 -12.1514 -30.9346c-2.67285 -2.43164 -6.32422 -3.64746 -9.97559 -3.89258h-3.8877h-21.1729v69.4102h22.3799c7.05762 0 9.73047 -0.726562 13.3818 -3.64844c7.29395 -6.33203 11.4258 -17.2988 11.4258 -30.9346z
-M327.822 -27.5898v0c0 9.25293 -2.18457 17.0459 -5.60742 20.6934c-1.69531 1.71387 -4.12402 2.92969 -7.05762 2.92969h-12.3955v-47.2471h10.9375c3.66602 0 5.85059 0.726562 7.79102 2.68457c4.14746 4.12988 6.33203 11.6855 6.33203 20.9395zM339.004 -27.5898v0
-c0 -13.8809 -4.37695 -24.8477 -12.1523 -30.9189c-2.68066 -2.45605 -6.33203 -3.67188 -9.98242 -3.9082h-3.89551h-21.1494v69.417h22.3633c7.05762 0 9.73926 -0.742188 13.3896 -3.65527c7.29492 -6.34082 11.4268 -17.291 11.4268 -30.9346zM275.517 -62.417v0
-h-9.71484l-26.5195 47.0098v-47.0098h-10.9531v69.417h10.9531l25.2812 -44.333v44.333h10.9531v-69.417zM216.902 -62.417v0h-43.0469v69.417h40.8633v-10.9668h-29.9258v-17.0459h20.1865v-11.2041h-20.1865v-18.9971h32.1094v-11.2031z" />
-    <glyph glyph-name="uniF192" unicode="&#xf192;" 
-d="M382.309 -109.922v21.8184h-31.9365v-21.8184h31.9365v0zM382.309 -55.2129v22.2783h-31.9365v-22.2783h31.9365v0zM382.309 -0.283203v28.2998l-33.9014 -9.72266c0.852539 -5.4834 1.40625 -11.6094 1.70215 -18.5771h32.1992v0zM361.571 65.9268l-20.8506 34.4258
-l-22.7246 -30.166l1.24512 -1.16016c6.97852 -6.58887 12.582 -12.4766 17.0049 -18.7764l25.3252 15.6768v0zM307.195 105.491h-28.2188l-2.99609 -15.2979c7.33496 -1.36523 13.8828 -3.10352 20.0557 -5.68652l11.1592 20.9844v0zM255.998 110.161h-18.0615
-l3.85547 -22.7246c2.56641 0.481445 4.02832 0.6875 6.62891 0.935547c2.94531 0.282227 4.61914 0.357422 7.57715 0.337891c2.96094 0.0195312 4.63477 -0.0556641 7.58008 -0.337891c2.60059 -0.248047 4.06445 -0.454102 6.63086 -0.935547l3.85547 22.7246h-18.0664v0z
-M204.805 105.491v0l11.1582 -20.9844c6.1748 2.58301 12.7207 4.32129 20.0566 5.68652l-2.99512 15.2979h-28.2197zM150.429 65.9268v0l25.3271 -15.6768c4.41992 6.2998 10.0234 12.1875 17.002 18.7764l1.24512 1.16016l-22.7275 30.166zM129.691 -0.283203v0h32.1963
-c0.296875 6.96777 0.853516 13.0938 1.70312 18.5771l-33.8994 9.72266v-28.2998zM129.691 -55.2129v0h31.9346v22.2783h-31.9346v-22.2783zM129.691 -82.6445v0h31.9346v21.9756h-31.9346v-21.9756zM255.998 -115.378h-131.765v149.312l46.8369 77.0117h61.252v4.43164
-h23.6758h23.6807v-4.43164h61.25l46.8379 -77.0117v-149.312h-131.769v0zM129.691 -109.922v0h31.9346v21.8184h-31.9346v-21.8184zM129.691 -27.4775v0h31.9346v13.748c0 2.77637 0.0283203 5.43457 0.0859375 7.98828h-32.0205v-21.7363zM130.728 33.3975v0
-l33.8379 -9.70215c1.7959 8.62988 4.47949 15.6162 8.22949 21.9697l-25.1943 15.5938zM174.321 105.38v0l23.8262 -31.623c4.25684 3.45215 8.49121 6.20703 12.8574 8.44629l-12.3799 23.2881zM337.678 105.38l-24.3008 0.111328l-12.3828 -23.2881
-c4.36816 -2.23926 8.59766 -4.99414 12.8594 -8.44629l23.8242 31.623v0zM381.272 33.3975l-16.873 27.8613l-25.1963 -15.5938c3.75 -6.35352 6.43457 -13.3398 8.23047 -21.9697l33.8389 9.70215v0zM382.309 -27.4775v21.7363h-32.0215
-c0.0556641 -2.55371 0.0849609 -5.21191 0.0849609 -7.98828v-13.748h31.9365v0zM382.309 -82.6445v21.9756h-31.9365v-21.9756h31.9365v0zM255.998 73.9453v0c20.8164 0.00585938 34.293 -5.04102 49.9854 -18.7188c17.2627 -15.0459 24.5391 -29.8213 25.9385 -52.6777
-v-112.471h12.9922v115.412c-1.7041 24.4639 -8.95117 39.9648 -26.6289 56.9561c-13.8232 13.2861 -24.7812 19.0039 -43.5869 22.7305l-0.802734 -4.01172c-3.69727 0.984375 -5.83301 1.40234 -9.62598 1.87305c-3.20898 0.398438 -5.03906 0.517578 -8.27148 0.545898
-c-3.22949 -0.0283203 -5.05957 -0.147461 -8.2666 -0.545898c-3.79492 -0.470703 -5.93066 -0.888672 -9.625 -1.87305l-0.802734 4.01172c-18.8066 -3.72656 -29.7656 -9.44434 -43.5869 -22.7305c-17.6807 -16.9912 -24.9287 -32.4922 -26.6328 -56.9561v-115.412h12.9951
-v112.471c1.39844 22.8564 8.67188 37.6318 25.9365 52.6777c15.6924 13.6777 29.1709 18.7256 49.9824 18.7188z" />
-    <glyph glyph-name="uniF112" unicode="&#xf112;" 
-d="M328.794 -60.376c-17.5449 0.185547 -41.2451 0.532227 -73.2383 0.186523c-31.6299 0.425781 -55.0996 0.135742 -72.502 -0.0351562v0c0.334961 -49.3203 1.63086 -46.2764 -15.5869 -46.6709c-20.5947 0.123047 -19.5557 -2.77734 -19.417 47.2305
-c-18.4678 1.94141 -13.8096 9.08008 -14.3418 32.7227c-0.617188 45.3857 -3.08398 6.33301 24.3164 73.6201c19.8232 45.7383 -0.264648 33.4238 102.288 35.0947c91.2754 -1.84668 72.8623 11.3467 93.8311 -37.2051c26.2549 -62.1865 24.2285 -29.6416 24.0518 -70.1904
-c-0.53125 -24.4229 4.18945 -32 -14.2695 -34.1133c0.161133 -50.5762 1.10449 -46.7236 -16.9189 -46.8896c-18.5596 0.385742 -18.2432 -3.71191 -18.2129 46.25v0z" />
-    <glyph glyph-name="uniF117" unicode="&#xf117;" 
-d="M256 256c141.312 0 256 -114.688 256 -256c0 -141.312 -114.688 -256 -256 -256c-141.312 0 -256 114.688 -256 256c0 141.312 114.688 256 256 256zM256 206c-113.712 0 -206 -92.2881 -206 -206s92.2881 -206 206 -206s206 92.2881 206 206s-92.2881 206 -206 206z" />
-    <glyph glyph-name="uniF154" unicode="&#xf154;" 
-d="M291.535 182.86c-0.179688 -7.42188 -0.357422 -14.8516 -0.853516 -22.2588c-1.05566 -15.749 -3.51758 -31.3672 -7.41699 -46.6523c-3.17188 -12.3965 -6.44629 -24.9795 -11.9062 -36.6143c-0.537109 -1.14746 -1.16797 -2.25 -1.87598 -3.29688
-c-2.9668 -4.36621 -6.95703 -7.08496 -12.1494 -8.17285c-5.06543 -1.05078 -10.3936 0.338867 -14.585 3.31152c-2.95605 2.08789 -5.06543 5.2207 -6.43262 8.54297c-4.28027 10.375 -7.45215 21.2002 -10.1816 32.0635
-c-4.24316 16.8154 -7.6123 33.8359 -8.91699 51.1475c-0.543945 7.30176 -0.712891 14.6133 -0.890625 21.9316h75.209zM409.212 50.6191v0c1.86426 -2.80176 2.80078 -2.80176 2.80273 -5.60547c0 -3.73633 -0.936523 -6.53613 -3.73438 -8.4043
-c-1.87207 -0.93457 -4.67188 -0.93457 -6.54395 -0.93457c0 0 -0.930664 0 -1.8623 0.93457l-24.2803 7.47168v-27.085c-3.7373 -69.1045 -88.7246 -119.534 -88.7246 -163.427v-36.4189l-61.7451 -0.0126953v36.4209c0 43.8936 -84.9814 94.3203 -88.7168 163.425v27.085
-l-24.2812 -7.4707c-0.936523 -0.935547 -1.87207 -0.935547 -1.87207 -0.935547c-1.86816 0 -4.66699 0 -6.53418 0.935547c-2.7998 1.86621 -3.73438 4.66797 -3.73438 8.40234c0 2.80273 0.936523 2.80273 2.7998 5.60449l56.0342 80.3154l56.0352 -80.3174
-c0 -0.932617 0.931641 -1.86816 1.86328 -3.73438c0 -1.87012 0 -4.66797 -0.931641 -7.47168c-1.86621 -2.80078 -5.60059 -3.73633 -8.4043 -3.73633c-0.932617 0 -1.86816 0 -1.86816 0.935547l-25.2168 7.4707v-29.8838
-c0.9375 -28.0146 70.043 -100.862 75.6494 -111.13c0.00878906 0.0283203 0.0322266 0.0693359 0.046875 0.103516l0.0107422 0.00683594c0.0136719 -0.0302734 0.0351562 -0.0654297 0.0507812 -0.0957031c5.59961 10.2705 74.709 83.1162 75.6406 111.129v29.8848
-l-25.2158 -7.47168c0 -0.93457 -0.928711 -0.93457 -1.86328 -0.93457c-2.80469 0 -6.53809 0.936523 -8.40625 3.73828c-0.93457 2.80273 -0.93457 5.60059 -0.93457 7.4707c0.936523 1.86621 1.87109 2.80176 1.87109 3.73535l56.0312 80.3154z" />
-    <glyph glyph-name="uniF18C" unicode="&#xf18c;" 
-d="M143.041 -77.0889v201.018h223.55v-201.018h-223.55zM143.041 -96.291v17.7441h223.55v-17.7441h-223.55zM315.576 -139.584v41.874h22.002v-41.874h-22.002zM338.296 -139.584v41.874h22.002v-41.874h-22.002zM149.333 -139.584v41.874h22.002v-41.874h-22.002z
-M173.286 -139.584v41.874h22.002v-41.874h-22.002zM202.833 107.798h103.966v10.6455h-103.966v-10.6455zM157.409 -18.6211h91.9102v119.588h-91.9102v-119.588zM260.311 -18.6211h91.9102v119.588h-91.9102v-119.588zM163.262 -51.4453
-c0 -8.27995 4.13997 -12.4199 12.4199 -12.4199s12.4199 4.13997 12.4199 12.4199s-4.13997 12.4199 -12.4199 12.4199s-12.4199 -4.13997 -12.4199 -12.4199zM321.53 -51.4453c0 -8.27995 4.13965 -12.4199 12.4189 -12.4199c8.27994 0 12.4199 4.13997 12.4199 12.4199
-s-4.13998 12.4199 -12.4199 12.4199c-8.2793 0 -12.4189 -4.13997 -12.4189 -12.4199z" />
-    <glyph glyph-name="uniF1A0" unicode="&#xf1a0;" 
-d="M8.94043 -256v451.91v0c-0.270508 0.129883 -2.41016 1.59961 -2.81055 1.74023c-2.41016 1.86914 -4.28027 4.13965 -5.34961 7.08984c-1.48047 4.41016 -0.810547 8.83008 1.59961 12.9697c2.41016 4.15039 6.82031 7.08984 11.7705 7.90039
-c4.14941 0.669922 8.69922 -0.270508 12.04 -2.68066c1.60938 -1.06934 4.2793 -4.00977 4.14941 -4.00977v0l155.05 35.5898v0c0.129883 0 0.540039 0.129883 0.669922 0.129883v0l3.61035 0.540039v0c2.54004 0.540039 5.88965 0.94043 8.29004 0.800781
-c2.80957 -0.130859 5.75 -0.800781 8.29004 -2.01074v0l7.36035 -4.9502l288.43 -236.659v0c0.129883 -0.129883 6.55957 -6.15039 7.49023 -7.76074c1.33984 -2.13965 2.00977 -4.2793 2.26953 -6.81934c0.669922 -6.41992 -1.74023 -13.9102 -3.75 -20.3301
-c-2.67969 -8.95996 -7.21973 -20.3301 -11.3701 -28.7598c-2.26953 -4.82031 -11.5098 -19.2607 -14.4502 -23.8105c-4.00977 -6.29004 -12.1699 -16.9902 -17.2598 -22.3398c-1.87012 -2.00977 -4.00977 -4.15039 -6.68945 -5.48047
-c-3.34082 -1.73926 -7.89062 -2.00977 -11.7705 -1.73926c-2.41016 0.129883 -6.14941 1.19922 -8.29004 1.87012v0l-355.99 121.47l-7.48926 2.93945v0c-2.41016 1.4707 -4.68066 4.01074 -6.02051 6.69043c-0.540039 0.799805 -1.46973 3.75 -2.00977 4.82031v0
-l-39.2002 128.699v-417.79h-18.5996zM172.15 237.78l-140.2 -31.8398l-4.15039 -7.89062l40.4004 -130.17v0c8.55957 32.5098 21.9395 63.6797 39.46 92.3105c17.6602 28.8994 39.3301 54.9795 64.4795 77.5898h0.0107422zM260.31 -7.44043l0.0107422 -0.0195312
-c18.5898 18.4697 34.25 39.7402 46.4199 62.8799c10.9697 20.6104 19.6602 42.8105 24.4795 65.6904c0.270508 1.59961 0.540039 3.33984 0.669922 5.08008c0.270508 2.13965 0.270508 4.2793 0 6.41992c-0.269531 1.87012 -0.939453 3.87012 -2.00977 5.47949
-c-0.799805 1.60059 -2.00977 3.08008 -3.20996 4.28027c-0.540039 0.530273 -2.13965 1.87012 -2.80957 2.26953v0l-46.5605 38.1309v0c-6.55957 -33.5703 -18.2002 -65.9502 -34.5195 -96.0508c-17.6602 -32.5098 -40.5303 -62.0801 -67.6904 -87.3594v0l50.1699 -17.3906
-v0c4.28027 -1.46973 9.10059 -2.26953 13.3799 -1.87012c3.21094 0.270508 7.23047 1.74023 10.5703 3.21094l0.270508 0.129883l0.269531 0.269531l0.400391 0.129883l0.269531 0.129883l0.400391 0.270508l0.399414 0.269531l0.270508 0.270508l0.399414 0.269531
-l0.400391 0.270508l0.400391 0.269531l0.399414 0.270508l0.400391 0.399414l0.799805 0.669922l0.799805 0.669922l0.669922 0.670898l0.800781 0.669922l0.799805 0.669922l0.269531 0.399414l0.400391 0.270508l0.269531 0.269531l0.400391 0.400391l0.269531 0.269531
-l0.270508 0.270508l0.399414 0.269531l0.270508 0.400391l0.269531 0.129883zM83.0498 84.5996l-0.799805 -2.54004l-0.799805 -2.54004l-0.799805 -2.53906l-0.800781 -2.54004l-0.669922 -2.68066l-0.799805 -2.54004l-0.669922 -2.54004l-0.669922 -2.54004
-c-1.2002 -4.67969 -2.13965 -9.35938 -2.54004 -14.0498c-0.400391 -3.87988 -1.33984 -8.7002 0.400391 -12.5801c1.19922 -2.54004 3.47949 -4.41016 6.14941 -5.08008c3.61035 -0.939453 8.56055 -0.129883 11.9102 1.34082
-c32.5098 14.8496 60.0703 52.9795 77.7305 83.8799c18.46 32.2393 31.04 67.29 36.6592 103.949c0.540039 3.21094 0.800781 6.82031 0.800781 10.1709c0 2.13965 -0.270508 4.40918 -0.94043 6.41992c-1.33984 3.87988 -6.55957 5.75 -10.8398 5.08008
-c-2.94043 -0.540039 -6.56055 -2.81055 -8.95996 -4.41016c-16.8604 -11.3701 -31.5703 -26.8906 -44.4102 -42.6807c-10.8398 -13.1094 -21.54 -28.0898 -29.7002 -43.0801c-10.9697 -20.5996 -21.8096 -46.6895 -30.2295 -68.5h-0.0205078zM394.49 -67.3701
-l0.00976562 0.00976562c14.5898 13.9199 27.29 29.7002 37.0605 47.3604c8.68945 15.25 13.7695 33.1797 16.4492 50.5703c0.669922 3.87988 1.07031 8.16992 -0.939453 11.5098v0l-4.9502 5.21973l-43.3398 35.7207v0
-c-6.67969 -22.8701 -15.9102 -44.9502 -27.4199 -65.9502c-13.5098 -24.6104 -30.1006 -47.3604 -49.3604 -67.6904v0l60.0703 -20.7402v0h0.399414l0.400391 -0.129883h0.400391h0.399414h0.400391h0.399414h0.400391h0.540039h0.400391l0.399414 0.129883h0.400391
-l0.399414 0.130859h0.400391l0.400391 0.129883l0.399414 0.129883l0.400391 0.129883l0.399414 0.129883l0.400391 0.129883l0.400391 0.129883l0.399414 0.129883l0.400391 0.270508l0.399414 0.129883l0.400391 0.269531l0.400391 0.130859l0.399414 0.269531
-l0.270508 0.270508l0.399414 0.269531l0.400391 0.129883l0.269531 0.270508l0.400391 0.269531l0.269531 0.400391z" />
-    <glyph glyph-name="uniF172" unicode="&#xf172;" 
-d="M317.132 117.945h-0.000976562v-235.891h-58.9668l-0.0136719 71.8877l-113.282 113.275l42.6738 42.6729l70.6221 -70.9951v79.0498h58.9678z" />
-    <glyph glyph-name="uniF189" unicode="&#xf189;" 
-d="M335.25 54.3232c-11.8584 13.7949 -25.3838 20.9766 -34.1973 27.5889c-24.832 1.66406 -19.6006 6.35742 -34.4834 16.2832c-12.9697 -0.825195 -29.8135 7.71973 -33.3955 18.2012c-3.85059 11.3193 -4.40625 13.2559 -1.64453 20.6895
-c3.02637 8.01074 8.54492 12.7051 18.4834 13.2559c20.4072 1.65039 24.832 -9.93848 27.8574 -20.4199c14.6201 1.64941 28.1455 -7.16406 35.5957 -19.582c3.58203 -5.51465 4.40723 -10.4951 4.40723 -16.8389c15.1758 -7.98828 27.3203 -18.2012 25.6523 -39.1777
-h-8.27637h0.000976562zM205.185 -57.9414c2.06836 -4.00586 3.44922 -8.56738 3.44922 -13.2617c0 -15.1709 -12.4131 -27.2969 -27.3193 -27.2969c-15.1758 0 -27.5889 12.126 -27.5889 27.2969c0 4.69434 1.24414 9.25586 3.3125 13.2617h-25.6523v49.0986
-c19.8516 6.89941 19.8516 29.2383 -0.288086 40.8271v21.8008h46.6338v-21.5322h53.7969c8.27539 17.9326 34.4834 21.2461 44.4043 -0.537109h51.5967v17.9316h30.3457v-19.3086h9.10059l3.04395 -68.4346l10.8828 -5.23145v-14.4824h-112.421
-c2.06934 -4.00586 3.18164 -8.41211 3.18164 -13.2383c0 -15.1748 -12.1445 -27.3203 -27.3203 -27.3203c-15.4395 0 -27.5889 12.1455 -27.5889 27.3203c0 4.82617 1.24902 9.23242 3.31738 13.1064h-14.8877h0.000976562zM325.191 -79.6113v0
-c0 -10.4805 -8.83105 -18.8887 -18.9072 -18.8887c-10.4814 0 -18.8936 8.4082 -18.8936 18.8887c0 10.0762 8.41211 18.9082 18.8936 18.9082c10.0762 0 18.9072 -8.83203 18.9072 -18.9082zM370.713 -79.6113v0c0 -10.4805 -8.69922 -18.8887 -18.9121 -18.8887
-c-10.4766 0 -18.8896 8.4082 -18.8896 18.8887c0 10.0762 8.41309 18.9082 18.8896 18.9082c10.2129 0 18.9121 -8.83203 18.9121 -18.9082z" />
-    <glyph glyph-name="uniF13F" unicode="&#xf13f;" 
-d="M384.954 -23.9424v-0.000976562h6.5332v-8.29785h-6.52832v1.76953h-30.1074l-6.55469 -8.57812h-7.29492c0.0439453 -0.320312 0.0986328 -0.639648 0.0986328 -0.973633c0 -3.8125 -3.09082 -6.90234 -6.89941 -6.90234c-3.81543 0 -6.90332 3.08984 -6.90332 6.90234
-c0 0.333984 0.0507812 0.654297 0.0957031 0.973633h-10.2354c0.0439453 -0.320312 0.0986328 -0.639648 0.0986328 -0.973633c0 -3.81055 -3.09082 -6.90918 -6.89941 -6.90918c-3.81543 0 -6.90332 3.09668 -6.90332 6.90918
-c0 0.333984 0.0507812 0.654297 0.0976562 0.973633l-95.1055 0.00683594c0.0458984 -0.324219 0.0986328 -0.643555 0.0986328 -0.976562c0 -3.81055 -3.08887 -6.90527 -6.90234 -6.90527c-3.80957 0 -6.89941 3.09277 -6.89941 6.90527
-c0 0.333984 0.0537109 0.65332 0.0986328 0.976562h-10.2354c0.0429688 -0.320312 0.0966797 -0.639648 0.0966797 -0.973633c0 -3.8125 -3.08984 -6.90234 -6.90332 -6.90234c-3.80957 0 -6.89941 3.08984 -6.89941 6.90234
-c0 0.333984 0.0537109 0.654297 0.0976562 0.973633h-7.29297l-6.55566 8.57812h-30.1084v-1.76953h-6.52832v8.29883h6.52832v-1.76953h8.98047l0.0976562 1.50781c-3.46387 0 -6.27246 2.80762 -6.27246 6.27344l3.48633 45.8545
-c0 3.46191 2.80762 6.27246 6.27246 6.27246h96.3037v5.73535h15.5273c5.62305 5.69336 19.4531 19.7051 21.1553 21.4287c-2.06934 2.19531 -20.5596 21.7959 -20.5596 21.7959l2.53223 2.39258l22.873 -24.2422l-21.1064 -21.375h19.6992v-0.00683594h0.0537109v-5.72852
-l96.3066 -0.00683594c3.46484 0 6.27246 -2.80762 6.27246 -6.27246l3.48633 -45.8564c0 -3.36035 -2.6582 -6.08496 -5.98438 -6.24023c-0.0810547 -0.164062 -0.166016 -0.319336 -0.257812 -0.476562l0.0683594 -1.06152h8.97852v1.76855zM153.042 2.93652v0v21.8369
-c0 0.72168 -0.561523 1.30664 -1.25391 1.30664h-11.1016c-0.693359 0 -1.25391 -0.584961 -1.25391 -1.30664v-21.8369c0 -0.72168 0.561523 -1.30664 1.25391 -1.30664h11.1016c0.693359 0 1.25391 0.584961 1.25391 1.30664zM190.445 -27.3516v0v53.4248h-26.333
-v-53.4248h26.333zM233.801 3.15723v0v22.916h-32.6699v-22.916h32.6699zM275.122 3.14062v0v22.915h-35.4424v-22.9121zM313.644 3.15039v0v22.9189h-32.6709v-22.9189h32.6709zM350.66 -27.3584v0v53.4277h-26.333v-53.4277h26.333zM375.339 2.93262v0v21.8369
-c0 0.72168 -0.561523 1.30664 -1.25391 1.30664h-11.1006c-0.692383 0 -1.25293 -0.584961 -1.25293 -1.30664v-21.8369c0 -0.72168 0.560547 -1.30664 1.25293 -1.30664h11.1006c0.692383 0 1.25391 0.584961 1.25391 1.30664z" />
-    <glyph glyph-name="uniF129" unicode="&#xf129;" 
-d="M256 252.571l6.13281 -40.7168l-17.5137 5.69043zM256 252.571l11.3809 -35.0264l-17.5137 -5.69043zM291.026 227.123l-36.8291 -18.415v18.415h36.8291zM291.026 227.123l-29.7949 -21.6475l-10.8242 14.8975zM277.647 185.947l-28.8936 29.3359l17.5127 5.69043z
-M277.647 185.947l-29.7949 21.6475l10.8232 14.8975zM234.353 185.947l18.9717 36.5449l10.8232 -14.8975zM234.353 185.947l11.3809 35.0264l17.5127 -5.69043zM220.974 227.123l40.6191 -6.75l-10.8242 -14.8975zM220.974 227.123h36.8291v-18.415zM180.54 -185.219
-l-36.8291 -18.415v18.415h36.8291zM180.54 -185.219l-29.7959 -21.6484l-10.8232 14.8984zM167.161 -226.396l-28.8945 29.3359l17.5137 5.69043zM167.161 -226.396l-29.7959 21.6475l10.8242 14.8984zM123.865 -226.396l18.9717 36.5459l10.8242 -14.8984z
-M123.865 -226.396l11.3809 35.0264l17.5137 -5.69043zM110.486 -185.219l40.6191 -6.75l-10.8232 -14.8984zM110.486 -185.219h36.8291v-18.415zM145.514 -159.771l6.13184 -40.7168l-17.5127 5.69043zM145.514 -159.771l11.3799 -35.0264l-17.5127 -5.69043z
-M99.6572 -104.337l-36.8281 -18.415v18.415h36.8281zM99.6572 -104.337l-29.7949 -21.6475l-10.8232 14.8975zM86.2783 -145.514l-28.8936 29.3359l17.5137 5.69043zM86.2783 -145.514l-29.7949 21.6475l10.8242 14.8984zM42.9834 -145.514l18.9717 36.5459
-l10.8242 -14.8984zM42.9834 -145.514l11.3809 35.0264l17.5137 -5.69043zM29.6045 -104.337l40.6191 -6.75l-10.8232 -14.8975zM29.6045 -104.337h36.8291v-18.415zM64.6309 -78.8887l6.13281 -40.7168l-17.5137 5.68945zM64.6309 -78.8887l11.3809 -35.0273
-l-17.5127 -5.68945zM476.974 31.5977l6.13281 -40.7168l-17.5137 5.69043zM476.974 31.5977l11.3809 -35.0264l-17.5137 -5.69043zM512 6.14941l-36.8291 -18.4141v18.4141h36.8291zM512 6.14941l-29.7949 -21.6475l-10.8242 14.8975zM498.621 -35.0264l-28.8936 29.3359
-l17.5127 5.69043zM498.621 -35.0264l-29.7949 21.6475l10.8232 14.8975zM455.326 -35.0264l18.9717 36.5449l10.8232 -14.8975zM455.326 -35.0264l11.3809 35.0264l17.5127 -5.69043zM441.947 6.14941l40.6191 -6.75l-10.8242 -14.8975zM441.947 6.14941h36.8291v-18.4141z
-M86.2783 75.46l-28.8936 29.3359l17.5137 5.69043zM86.2783 75.46l-29.7949 21.6475l10.8242 14.8975zM42.9834 75.46l18.9717 36.5449l10.8242 -14.8975zM42.9834 75.46l11.3809 35.0264l17.5137 -5.69043zM29.6045 116.636l40.6191 -6.74902l-10.8232 -14.8984z
-M29.6045 116.636h36.8291v-18.4141zM64.6309 142.084l6.13281 -40.7168l-17.5137 5.69043zM64.6309 142.084l11.3809 -35.0264l-17.5127 -5.69043zM99.6572 116.636l-36.8281 -18.4141v18.4141h36.8281zM99.6572 116.636l-29.7949 -21.6475l-10.8232 14.8984z
-M123.865 156.342l18.9717 36.5449l10.8242 -14.8975zM123.865 156.342l11.3809 35.0264l17.5137 -5.69043zM110.486 197.518l40.6191 -6.74902l-10.8232 -14.8984zM110.486 197.518h36.8291v-18.4141zM145.514 222.966l6.13184 -40.7168l-17.5127 5.69043zM145.514 222.966
-l11.3799 -35.0264l-17.5127 -5.69043zM180.54 197.518l-36.8291 -18.4141v18.4141h36.8291zM180.54 197.518l-29.7959 -21.6475l-10.8232 14.8984zM167.161 156.342l-28.8945 29.3359l17.5137 5.69043zM167.161 156.342l-29.7959 21.6475l10.8242 14.8975zM256 -189.376
-l6.13281 -40.7168l-17.5137 5.69043zM256 -189.376l11.3809 -35.0264l-17.5137 -5.69043zM291.026 -214.824l-36.8291 -18.4141v18.4141h36.8291zM291.026 -214.824l-29.7949 -21.6475l-10.8242 14.8975zM277.647 -256l-28.8936 29.3359l17.5127 5.69043zM277.647 -256
-l-29.7949 21.6475l10.8232 14.8975zM234.353 -256l18.9717 36.5449l10.8232 -14.8975zM234.353 -256l11.3809 35.0264l17.5127 -5.69043zM220.974 -214.824l40.6191 -6.75l-10.8242 -14.8975zM220.974 -214.824h36.8291v-18.4141zM331.46 -185.219h36.8291v-18.415z
-M331.46 -185.219l40.6191 -6.75l-10.8232 -14.8984zM344.839 -226.396l11.3809 35.0264l17.5137 -5.69043zM344.839 -226.396l18.9717 36.5459l10.8242 -14.8984zM388.135 -226.396l-29.7959 21.6475l10.8242 14.8984zM388.135 -226.396l-28.8945 29.3359l17.5137 5.69043z
-M401.514 -185.219l-29.7959 -21.6484l-10.8232 14.8984zM401.514 -185.219l-36.8291 -18.415v18.415h36.8291zM366.486 -159.771l11.3809 -35.0264l-17.5127 -5.69043zM366.486 -159.771l6.13281 -40.7168l-17.5127 5.69043zM412.343 -104.337h36.8281v-18.415z
-M412.343 -104.337l40.6182 -6.75l-10.8232 -14.8975zM425.722 -145.514l11.3799 35.0264l17.5137 -5.69043zM425.722 -145.514l18.9707 36.5459l10.8242 -14.8984zM469.017 -145.514l-29.7959 21.6475l10.8242 14.8984zM469.017 -145.514l-28.8945 29.3359l17.5137 5.69043z
-M482.396 -104.337l-29.7959 -21.6475l-10.8232 14.8975zM482.396 -104.337l-36.8291 -18.415v18.415h36.8291zM447.369 -78.8887l11.3809 -35.0273l-17.5137 -5.68945zM447.369 -78.8887l6.13184 -40.7168l-17.5127 5.68945zM35.0264 31.5977l11.3809 -35.0264
-l-17.5137 -5.69043zM35.0264 31.5977l6.13281 -40.7168l-17.5137 5.69043zM0 6.14941h36.8291v-18.4141zM0 6.14941l40.6191 -6.75l-10.8242 -14.8975zM13.3789 -35.0264l11.3809 35.0264l17.5127 -5.69043zM13.3789 -35.0264l18.9717 36.5449l10.8232 -14.8975z
-M56.6738 -35.0264l-29.7949 21.6475l10.8232 14.8975zM56.6738 -35.0264l-28.8936 29.3359l17.5127 5.69043zM70.0527 6.14941l-29.7949 -21.6475l-10.8242 14.8975zM70.0527 6.14941l-36.8291 -18.4141v18.4141h36.8291zM425.722 75.46l11.3799 35.0264l17.5137 -5.69043z
-M425.722 75.46l18.9707 36.5449l10.8242 -14.8975zM469.017 75.46l-29.7959 21.6475l10.8242 14.8975zM469.017 75.46l-28.8945 29.3359l17.5137 5.69043zM482.396 116.636l-29.7959 -21.6475l-10.8232 14.8984zM482.396 116.636l-36.8291 -18.4141v18.4141h36.8291z
-M447.369 142.084l11.3809 -35.0264l-17.5137 -5.69043zM447.369 142.084l6.13184 -40.7168l-17.5127 5.69043zM412.343 116.636h36.8281v-18.4141zM412.343 116.636l40.6182 -6.74902l-10.8232 -14.8984zM388.135 156.342l-29.7959 21.6475l10.8242 14.8975z
-M388.135 156.342l-28.8945 29.3359l17.5137 5.69043zM401.514 197.518l-29.7959 -21.6475l-10.8232 14.8984zM401.514 197.518l-36.8291 -18.4141v18.4141h36.8291zM366.486 222.966l11.3809 -35.0264l-17.5127 -5.69043zM366.486 222.966l6.13281 -40.7168
-l-17.5127 5.69043zM331.46 197.518h36.8291v-18.4141zM331.46 197.518l40.6191 -6.74902l-10.8232 -14.8984zM344.839 156.342l11.3809 35.0264l17.5137 -5.69043zM344.839 156.342l18.9717 36.5449l10.8242 -14.8975z" />
-    <glyph glyph-name="uniF142" unicode="&#xf142;" 
-d="M116.554 47.7324c4.75488 12.3135 9.49023 24.6367 14.2451 36.96c2.16602 3.45996 3.81445 5.29102 9.27832 5.49316c31.3545 0.111328 64.8848 0.212891 96.249 0.314453c3.81445 -0.203125 6.79883 -2.04395 8.97461 -5.50488
-c5.26074 -12.7275 10.5225 -25.4561 15.7734 -38.1836c1.53809 -2.53906 0.202148 -3.86523 -4.00684 -3.97656c-45.8125 0.101562 -91.6152 0.203125 -137.418 0.303711c-4.99805 0.890625 -3.37891 2.84277 -3.0957 4.59375v0v0zM101.397 -13.0752h168.651
-c2.21582 0 4.02637 -1.33496 4.02637 -2.97461v-2.30664c0 -1.63867 -1.82129 -2.96387 -4.02637 -2.96387h-168.651c-2.21582 0 -4.02734 1.3252 -4.02734 2.96387v2.30664c0 1.63965 1.81152 2.97461 4.02734 2.97461zM270.049 -12.918h-168.65
-c-2.26172 0 -4.1748 -1.36719 -4.16406 -3.13379v-2.30371c0 -1.7666 1.91113 -3.12109 4.16406 -3.12109h168.65c2.26855 0 4.18164 1.35449 4.18164 3.12109v2.30469c0 1.76562 -1.89941 3.13281 -4.18164 3.13281zM270.049 -13.2305
-c2.19043 0 3.86914 -1.30469 3.86914 -2.82031v-2.30469c0 -1.51465 -1.68848 -2.80859 -3.86914 -2.80859h-168.65c-2.16113 0 -3.85156 1.29395 -3.85156 2.80859v2.30566c-0.00878906 1.51465 1.67969 2.81934 3.85156 2.81934h168.65zM112.273 -27.1182h15.6934
-c1.71973 0 3.13574 -1.55762 3.13574 -3.50098v-16.2285c0 -1.91211 -1.41602 -3.50098 -3.13574 -3.50098h-15.6934c-1.74023 0 -3.14648 1.5791 -3.14648 3.50098v16.2285c0 1.93262 1.40625 3.50098 3.14648 3.50098zM127.967 -26.9609h-15.6934
-c-1.83105 0 -3.30273 -1.6543 -3.30273 -3.6582v-16.2285c0 -1.99316 1.47168 -3.65625 3.30273 -3.65625h15.6934c1.83008 0 3.30273 1.67188 3.30273 3.65625v16.2285c0 2.01562 -1.48242 3.6582 -3.30273 3.6582zM127.967 -27.2734
-c1.62109 0 2.99023 -1.47461 2.99023 -3.3457v-16.2285c0 -1.83984 -1.36328 -3.34375 -2.99023 -3.34375h-15.6934c-1.62988 0 -2.99023 1.49316 -2.99023 3.34375v16.2285c0 1.85938 1.36035 3.3457 2.99023 3.3457h15.6934zM244.248 -27.1182h15.6924
-c1.75098 0 3.15723 -1.55762 3.15723 -3.50098v-16.2285c0 -1.91211 -1.40625 -3.50098 -3.15723 -3.50098h-15.6924c-1.71973 0 -3.12598 1.5791 -3.12598 3.50098v16.2285c0 1.93262 1.40625 3.50098 3.12598 3.50098zM259.951 -26.9609h-15.6934
-c-1.83105 0 -3.30078 -1.6543 -3.30078 -3.6582v-16.2285c0 -1.99316 1.48145 -3.65625 3.30078 -3.65625h15.6934c1.83008 0 3.29297 1.67285 3.29297 3.65625v16.2285c0 2.01465 -1.46387 3.6582 -3.29297 3.6582zM259.951 -27.2734
-c1.62793 0 2.98047 -1.47363 2.98047 -3.3457v-16.2285c0 -1.84082 -1.35352 -3.34375 -2.98047 -3.34375h-15.6934c-1.61816 0 -2.98828 1.49316 -2.98828 3.34375v16.2285c0 1.85938 1.3584 3.3457 2.98828 3.3457h15.6934zM121.977 23.8955v0v0
-c-6.57617 0 -11.9189 -5.26172 -11.9189 -11.7471s5.34277 -11.7461 11.9189 -11.7461s11.9082 5.26074 11.9082 11.7461s-5.33203 11.7471 -11.9082 11.7471zM253.668 23.8955v0v0c-6.59668 0 -11.9287 -5.26172 -11.9287 -11.7471s5.33203 -11.7461 11.9287 -11.7461
-c6.56641 0 11.8984 5.26074 11.8984 11.7461s-5.3418 11.7471 -11.8984 11.7471zM113.154 35.1963h151.016c4.12793 -0.202148 6.59668 -2.44824 7.42676 -6.71777v-35.7461h-167.104v36.0391c1.07227 3.99707 3.44043 6.52637 8.66113 6.4248v0v0zM134.041 12.1387
-c0 6.57422 -5.4043 11.9023 -12.0645 11.9023c-6.66992 0 -12.0742 -5.32812 -12.0859 -11.9023c0 -6.56348 5.41602 -11.9043 12.0859 -11.9043c6.66113 0 12.0645 5.3418 12.0645 11.9043zM133.729 12.1387c0 -6.38672 -5.25977 -11.5918 -11.752 -11.5918
-c-6.50195 0 -11.7734 5.20605 -11.7734 11.5918c0.0117188 6.39844 5.27148 11.5898 11.7734 11.5898c6.49219 0 11.752 -5.19141 11.752 -11.5898zM265.732 12.1387c0 6.57422 -5.42383 11.9023 -12.0742 11.9023c-6.67188 0 -12.0762 -5.32812 -12.0762 -11.9023
-c0 -6.5625 5.4043 -11.9043 12.0762 -11.9043c6.66016 0 12.0742 5.3418 12.0742 11.9043zM265.42 12.1387c0 -6.38672 -5.26953 -11.5918 -11.7617 -11.5918c-6.50391 0 -11.7637 5.20508 -11.7637 11.5918c0 6.39844 5.25977 11.5898 11.7637 11.5898
-c6.48242 0 11.7617 -5.19141 11.7617 -11.5898zM264.176 35.0391c4.0459 -0.207031 6.42578 -2.3916 7.27344 -6.5752v-35.5752h-166.801v35.8721c1.0918 3.9541 3.37012 6.37793 8.50391 6.27832h151.023zM264.188 35.3516c-123.222 6.8457 -0.00390625 0 -0.00390625 0
-h-151.027c-5.28809 0.102539 -7.7168 -2.50293 -8.81445 -6.5293c-7.74023 -28.3818 25.2275 92.501 -0.00585938 -0.0205078v-36.0693c0 -2 0 1.96094 0 -0.0390625v-0.117188h167.426v35.918c-6.87598 34.2734 -0.00292969 0.0146484 -0.00292969 0.0146484
-c-0.859375 4.32617 -3.39355 6.62793 -7.57129 6.84277zM265.732 12.1387c0 6.57422 -5.42383 11.9023 -12.0742 11.9023c-6.67188 0 -12.0762 -5.32812 -12.0762 -11.9023c0 -6.5625 5.4043 -11.9043 12.0762 -11.9043c6.66016 0 12.0742 5.3418 12.0742 11.9043z
-M265.42 12.1387c0 -6.38672 -5.26953 -11.5918 -11.7617 -11.5918c-6.50391 0 -11.7637 5.20508 -11.7637 11.5918c0 6.39844 5.25977 11.5898 11.7637 11.5898c6.48242 0 11.7617 -5.19141 11.7617 -11.5898zM264.176 35.0391
-c4.0459 -0.207031 6.42578 -2.3916 7.27344 -6.5752v-35.5752h-166.801v35.8721c1.0918 3.9541 3.37012 6.37793 8.50391 6.27832h151.023zM264.188 35.3516c-123.222 6.8457 -0.00390625 0 -0.00390625 0h-151.027c-5.28809 0.102539 -7.7168 -2.50293 -8.81445 -6.5293
-c-7.74023 -28.3818 25.2275 92.501 -0.00585938 -0.0205078v-36.0693c0 -2 0 1.96094 0 -0.0390625v-0.117188h167.426v35.918c-6.87598 34.2734 -0.00292969 0.0146484 -0.00292969 0.0146484c-0.859375 4.32617 -3.39355 6.62793 -7.57129 6.84277zM264.176 35.0391
-c4.0459 -0.207031 6.42578 -2.3916 7.27344 -6.5752v-35.5752h-166.801v35.8721c1.0918 3.9541 3.37012 6.37793 8.50391 6.27832h151.023zM264.188 35.3516c-123.222 6.8457 -0.00390625 0 -0.00390625 0h-151.027c-5.28809 0.102539 -7.7168 -2.50293 -8.81445 -6.5293
-c-7.74023 -28.3818 25.2275 92.501 -0.00585938 -0.0205078v-36.0693c0 -2 0 1.96094 0 -0.0390625v-0.117188h167.426v35.918c-6.87598 34.2734 -0.00292969 0.0146484 -0.00292969 0.0146484c-0.859375 4.32617 -3.39355 6.62793 -7.57129 6.84277zM277.182 -32.9561
-c29.665 24.5049 59.3193 49.0098 88.9844 73.5254c3.39941 3.27734 7.35547 1.39551 2.61035 -4.22949c-30.1709 -23.8369 -60.3311 -47.6748 -90.502 -71.5322c-2.02344 -1.08203 -2.65137 1.03223 -1.09277 2.23633zM276.848 -40.3418
-c30.9297 16.2998 62.5068 32.0117 94.0635 46.4395c2.94434 2.10449 4.99805 -0.869141 1.2041 -3.98633c-29.6445 -13.1729 -59.2393 -27.4082 -88.8428 -42.4531c37.9209 12.9199 75.8418 25.1426 113.783 36.8379c3.00488 0.617188 4.10742 -2.50879 0.475586 -3.76367
-c-39.3682 -11.9082 -78.7061 -23.9785 -118.073 -37.749c-2.92383 -0.323242 -4.1084 2.89355 -2.61035 4.6748zM277.323 -48.5469c37.3242 7.56738 74.8701 14.1641 112.832 19.2227c2.32715 0.537109 3.7334 -2.3877 -0.233398 -3.27734
-c-37.293 -5.27148 -75.5479 -11.2812 -112.832 -17.8271c-1.64844 0.323242 -0.738281 1.84082 0.233398 1.88184zM394.212 60.0352l-0.970703 0.222656h-0.456055h-0.970703h-2.61035h-0.951172c0 -0.222656 -0.475586 -0.455078 -0.708008 -0.455078l-0.233398 -0.243164
-c0 -0.232422 -0.232422 -0.464844 -0.495117 -0.698242v-0.475586c-0.212891 0 -0.212891 -0.232422 -0.212891 -0.464844v-1.63965v-0.94043c-0.232422 0 -0.475586 -0.475586 -0.475586 -0.708008l-0.232422 -0.233398l-0.232422 -0.232422h-0.496094v-0.94043h-0.212891
-v-2.34766v-0.930664v-2.58008v-0.941406c0.212891 0 0.212891 -0.464844 0.212891 -0.708008l0.25293 -0.232422l0.232422 -0.232422h0.475586c0 -0.46582 0.233398 0 0.233398 -0.46582h0.708008h0.951172c0 -0.232422 0.232422 -0.232422 0.475586 -0.232422
-l0.232422 -0.233398h3.08594c2.01367 0.12207 1.05176 -0.283203 2.3877 -0.232422h0.951172h2.61035h0.951172v0.232422h1.18359l0.232422 0.233398l0.232422 0.232422l0.233398 0.232422l0.232422 0.233398v0.464844c0.232422 0 0.232422 0.475586 0.232422 0.708008
-v2.34766v0.94043l0.233398 0.233398l0.232422 0.232422c0.475586 0 0 0.232422 0.475586 0.232422c0 0.233398 0.232422 0.698242 0.475586 0.698242v2.59082v0.930664c-0.232422 0 -0.232422 0.232422 -0.232422 0.464844
-c-0.233398 0 -0.233398 0.243164 -0.233398 0.475586c-0.232422 0 -0.232422 0.232422 -0.232422 0.475586c-0.232422 0 -0.232422 0.232422 -0.232422 0.46582l-0.233398 0.232422l-0.232422 0.232422l-0.232422 0.243164l-0.233398 0.232422l-0.232422 0.233398h-0.475586
-l-0.232422 0.242188c0 0.46582 -0.232422 0 -0.232422 0.46582h-0.475586c0 0.242188 -0.475586 0.242188 -0.728516 0.242188c0 0.233398 -0.455078 0.233398 -0.688477 0.233398h-1.91211h-0.951172l-0.475586 1.16309zM400.85 26.9609
-c0 0 -1.18359 1.18359 -1.42676 1.18359c0 0.46582 -0.232422 0 -0.232422 0.46582h-0.475586c0 0.232422 -0.233398 0.232422 -0.496094 0.232422c0 0.464844 -0.212891 0 -0.212891 0.464844h-0.474609l-0.233398 0.233398h-0.708008l-0.232422 0.232422h-0.728516
-h-1.90234h-2.13477h-1.42676h-0.951172l-0.475586 -0.232422h-0.708008c-0.232422 0 -0.475586 -0.233398 -0.951172 -0.233398l-0.25293 -0.232422l-0.211914 -0.232422v-0.698242l-0.233398 -0.232422v-0.475586c-0.232422 0 -0.232422 -0.233398 -0.232422 -0.475586
-l-0.232422 -0.232422v-2.58008v-2.10449v-0.941406v-2.58008v-0.94043c0.232422 0 0.232422 -0.233398 0.232422 -0.46582l0.232422 -0.232422l0.233398 -0.243164l0.211914 -0.232422l0.25293 -0.232422h0.475586l0.232422 -0.233398
-c1.2041 0.0712891 -0.202148 -0.34375 1.90234 -0.232422h0.951172h2.61035h0.97168c0 -0.232422 0.211914 -0.232422 0.455078 -0.232422c0 -0.475586 0.232422 0 0.232422 -0.475586h0.496094l0.211914 -0.233398h2.15527h0.951172l0.232422 0.233398v0.475586
-l0.233398 0.232422v0.46582l0.232422 0.232422h0.708008h0.951172l0.232422 0.232422h0.951172v0.475586l0.232422 0.232422v1.63965v0.94043l0.233398 0.233398c0.475586 0 0 0.232422 0.475586 0.232422v0.475586c0.475586 0 0 0.232422 0.475586 0.232422v2.10449
-v0.941406c-0.233398 0 -0.233398 0.232422 -0.233398 0.475586l-0.232422 0.232422l-0.232422 0.232422h-0.475586l-0.232422 0.232422l-0.233398 0.233398l-0.232422 0.232422c0 0.232422 -0.232422 0.708008 -0.475586 0.708008v0.46582l-0.232422 0.242188
-l-0.233398 0.233398v-0.475586zM436.949 18.9883c-0.232422 0 -1.18359 0.232422 -1.18359 0.464844h-0.708984v0.243164h-2.60938h-0.951172h-2.61035h-0.951172v-0.475586h-0.728516c0 -0.232422 -0.212891 -0.232422 -0.475586 -0.232422
-c-2.3877 -2.15527 0.0205078 -0.647461 -2.36816 -2.8125c-0.232422 0 -0.474609 -0.233398 -0.708008 -0.233398l-0.232422 -0.232422l-0.232422 -0.232422v-1.88184v-0.931641c-0.233398 0 -0.233398 -0.242188 -0.233398 -0.474609
-c-0.475586 0 0 -0.233398 -0.475586 -0.233398v-0.464844c-0.232422 0 -0.232422 -0.243164 -0.232422 -0.475586l-0.232422 -0.233398v-1.87109v-1.64941v-0.930664v-2.58984v-0.931641h0.232422v-0.464844v-0.941406l0.232422 -0.232422l0.233398 -0.243164h0.475586
-h0.951172l0.474609 -0.232422h1.18457h1.42676h0.950195h2.63086h1.18359c0 -0.232422 0.475586 -0.232422 0.708008 -0.232422h2.36816h0.951172c0 0.464844 0.232422 0 0.232422 0.464844h0.708008v1.18359v0.931641l0.233398 0.242188l0.232422 0.233398
-l0.232422 0.222656h0.475586c0 0.474609 0.232422 0 0.232422 0.474609h0.496094l0.212891 0.233398l0.232422 0.232422l0.25293 0.243164v0.94043l0.232422 0.232422v1.39648v1.88184v2.34766v0.94043v2.58008v0.931641c-0.232422 0 -0.232422 0.232422 -0.232422 0.464844
-c-0.496094 0 0 0.243164 -0.496094 0.243164v0.475586l-0.211914 0.232422c-0.496094 0 0 0.232422 -0.496094 0.232422v0.475586c-0.455078 0 0 0.233398 -0.455078 0.233398c0 0.464844 -0.496094 0.464844 -0.496094 0.697266l-0.455078 -0.242188zM420.093 -19.2158
-c-0.232422 0 -0.708008 0.455078 -0.951172 0.6875c-0.232422 0 -0.708008 0.232422 -0.708008 0.475586h-2.15527h-0.950195c0 -0.232422 -0.212891 -0.232422 -0.456055 -0.232422l-0.25293 -0.233398l-0.232422 -0.232422c0 -0.455078 -0.232422 0 -0.232422 -0.455078
-c-0.212891 0 -0.475586 -0.243164 -0.475586 -0.475586l-0.232422 -0.232422h-0.475586v-0.233398h-0.475586h-0.951172l-0.233398 -0.232422h-0.950195h-0.951172c0 -0.232422 -0.25293 -0.232422 -0.475586 -0.232422l-0.233398 -0.232422l-0.232422 -0.233398
-l-0.232422 -0.232422l-0.232422 -0.212891v-0.475586c-0.233398 0 -0.233398 -0.232422 -0.233398 -0.474609l-0.25293 -0.222656c-0.475586 0 0 -0.222656 -0.475586 -0.222656v-0.475586c-0.475586 0 0 -0.233398 -0.475586 -0.233398v-1.88184v-0.930664
-c0 -0.242188 0.25293 -0.475586 0.25293 -0.708008v-1.88184v-0.930664c0.212891 0 0.212891 -0.232422 0.212891 -0.475586c0.25293 0 0.728516 -0.475586 0.97168 -0.475586c0.475586 -0.455078 0.950195 -0.951172 1.42578 -1.40625
-c0 -0.475586 0.233398 0 0.233398 -0.475586l0.475586 -0.232422v-0.688477h0.232422v-0.232422l0.232422 -0.233398c0 -0.232422 0.708008 -0.950195 0.708008 -0.950195c0.475586 0 0.708984 -0.212891 0.951172 -0.212891h1.18457
-c0.232422 0 0.495117 -0.232422 0.708008 -0.232422h0.728516h0.930664c0 -0.233398 0.475586 -0.233398 0.728516 -0.233398l0.455078 -0.475586h0.951172h1.44629h0.951172h2.61035h0.951172c0 0.233398 0.475586 0.233398 0.708008 0.233398v1.42676
-s0.233398 0.455078 0.475586 0.455078v0.951172h0.25293v0.930664h0.212891v0.475586v0.930664v2.58984v0.930664h0.232422v0.475586v0.931641h0.233398s0.25293 0.708008 0.495117 0.708008v0.930664v1.88184v0.951172c-0.232422 0 -0.232422 0.455078 -0.232422 0.6875
-c-0.25293 0 -0.25293 0.233398 -0.25293 0.475586l-0.232422 0.233398l-0.233398 0.232422l-0.211914 0.232422l-0.283203 0.152344h-0.475586c0 0.475586 -0.233398 0 -0.233398 0.475586h-0.950195c-2.42871 0.130859 -1.05273 -0.303711 -2.61035 -0.222656h-0.708984z
-" />
-    <glyph glyph-name="uniF169" unicode="&#xf169;" 
-d="M230.858 -52.5996v0l2.9834 -80.3906c-0.414062 -0.0107422 -0.488281 -0.0107422 -0.90625 -0.0107422c-13.0801 0 -23.8164 10.3418 -24.3008 23.4131l-1.89062 51.0732l-25.2676 39.0635l-60.1143 -113.55c-7.96875 4.21875 -12.9482 12.4756 -12.9482 21.4922
-c0 3.9668 0.975586 7.87207 2.8252 11.3848l57.0078 107.666l37.6133 -19.9102l24.0342 -37.1484c0.594727 -0.918945 0.928711 -1.98633 0.963867 -3.08301zM180.656 37.4824l-4.80273 -9.06445l-14.3535 11.8652l-6.43652 -12.1699
-c-6.9707 3.69629 -11.332 10.9277 -11.332 18.8154c0 3.46582 0.847656 6.88574 2.47461 9.9541l17.5176 33.0654c2.62793 4.98047 7.7959 8.09473 13.4277 8.09473h53.6465c13.4336 0 24.3096 -10.8936 24.3096 -24.3281
-c0 -0.524414 -0.00488281 -1.02832 -0.0478516 -1.55762l-5.93359 -91.2344l57.0459 -47.4355c-2.20801 -2.61621 -5.00879 -4.65137 -8.17969 -5.95312l-49.666 41.0225l-0.668945 -10.3105c-11.1895 0.719727 -19.9004 10.0137 -19.9004 21.2344
-c0 0.47168 0.0185547 0.895508 0.0400391 1.3623l0.292969 4.43652l-13.9404 11.5146l4.7998 9.05664l9.93555 -8.20117l2.46094 38.1143l-22.6367 -42.7598l-37.6162 19.9219l33.793 63.8301h-24.0723l-14.5205 -27.4131l14.3633 -11.8604v0zM273.35 133.001v0
-c12.5957 0 22.7988 -10.2061 22.7988 -22.7979c0 -12.5967 -10.2031 -22.8047 -22.7988 -22.8047c-12.5947 0 -22.8008 10.208 -22.8008 22.8047c0 12.5918 10.2061 22.7979 22.8008 22.7979zM297.393 -75.9277c4.32324 1.40137 8.16992 3.9834 11.1025 7.44922
-l23.7178 28.0684c5.77539 6.82715 14.2666 10.7646 23.2129 10.7646c9.45312 0 18.3535 -4.38086 24.1113 -11.8701l62.7959 -81.7041c0.816406 -1.06543 1.25293 -2.36035 1.25293 -3.70703c0 -3.35645 -2.71387 -6.07227 -6.07031 -6.07227h-182.41
-c-3.34961 0 -6.07324 2.71582 -6.07324 6.07227c0 1.44727 0.501953 2.82715 1.43164 3.92383l34.877 41.2627c1.46973 1.73828 3.3916 3.02539 5.55371 3.73047l6.49805 2.08203v0z" />
-    <glyph glyph-name="uniF107" unicode="&#xf107;" 
-d="M311.3 -256.038v204.9l129.601 -30.2002c31.3994 -12.4004 56.0996 3.90039 38.3994 34.2002l-197.899 284.1c-17.9004 25.4004 -33 25.4004 -50.8008 0l-197.8 -284.1c-17.7998 -30.2998 6.90039 -46.5 38.4004 -34.2002l129.6 30.2002v-204.9h110.5z" />
-    <glyph glyph-name="uniF195" unicode="&#xf195;" 
-d="M308.761 -110l32.1152 32.0586l32.124 -32.0586v109.999c0 60.7529 -49.3037 110.001 -110.121 110.001h-68.2607l-55.6182 -32.0938l55.6182 -32.0771h68.2607c25.3428 0 45.8818 -20.5371 45.8818 -45.8311z" />
-    <glyph glyph-name="uniF186" unicode="&#xf186;" 
-d="M80.2002 -80c18 0.200195 36 -7.59961 48.0996 -21.0996c28.4004 -29.2002 19.2002 -82.9004 -17.0996 -100.9c-35.2002 -20.7998 -85.2002 1.2002 -94.2002 40.7998c-11.5996 39.2998 22.2002 82.9004 63.2002 81.2002zM79.9004 -117.1
-c-14.9004 0.599609 -27.8008 -12.6006 -27.5 -27.5c-1.40039 -23.9004 31.5 -37.4004 47.1992 -19.7002c17.7002 15.7002 3.90039 48.5996 -19.6992 47.2002zM391.9 29.5996l-0.100586 0.300781c18 0 36 -3.90039 52 -11.8008
-c53.4004 -24.5 81.6006 -91.0996 61.6006 -146.5c-17.7002 -55.8994 -80.4004 -91.8994 -137.7 -79c-58.4004 10.7002 -102 70.6006 -94.7002 129.601c4.7998 59.2998 59.2998 108.8 118.9 107.399zM391.5 -21v0.299805c-22.5 0.200195 -44.7002 -11.5996 -57.0996 -30.3994
-c-24.4004 -34 -8.7002 -87.1006 30.3994 -102c38 -17.7002 87.2002 8.19922 94.2002 49.5c9.7998 40.6992 -25.2998 84 -67.5 82.5996zM391.5 -141.3h0.0996094c-5.39941 0 -10.3994 0.5 -15.5 2.2002c-36.5996 9.89941 -49.1992 61.2998 -21.3994 86.5996
-c23.8994 26.0996 72.2002 16.5996 84.5996 -16.5996c15.2002 -32.3008 -11.7998 -73.6006 -47.7998 -72.2002zM245.5 211.7l0.700195 -0.100586h209.1v-141.1c15.2002 -16.9004 30.6006 -33.7002 46.1006 -50.5996c-1.40039 -5.60059 -11.3008 -11 -15.5 -16.6006
-c-35.2002 35.9004 -91.7002 48.2998 -138.9 30.6006c-60.0996 -20.9004 -98.2998 -88.9004 -84 -151c-32.2998 0 -64.4004 0.299805 -96.7002 0.299805c-14.3994 -3.2998 -20 4.7998 -25.5996 16.8994c-25.2998 36 -82.1006 40.8008 -112.7 9.30078h-27.7998v101.5
-c0.5 11.7998 -4 31.1992 12.8994 33.1992c68.3008 0.300781 136.601 0 204.9 0c9.2002 40.8008 18.7998 81.8008 27.7998 122.601c5.90039 14.5996 0.799805 29.7998 -0.299805 45zM272.1 180.7h-0.299805c-10.7002 -45.5 -21.0996 -91.1006 -31.5 -136.601h37.1006
-c7.2998 8.7002 14.3994 17.4004 21.3994 26.1006h125.7v110.5h-152.4z" />
-    <glyph glyph-name="uniF184" unicode="&#xf184;" 
-d="M90.1289 -24.2305c0.692383 -4.99707 2.05371 -8.7334 4.08203 -11.207c3.71094 -4.50293 10.0693 -6.75391 19.0742 -6.75391c5.39355 0 9.77246 0.59375 13.1367 1.78125c6.38281 2.27637 9.57422 6.50684 9.57422 12.6914c0 3.6123 -1.58301 6.40723 -4.75 8.38672
-c-3.16699 1.92969 -8.13965 3.63672 -14.918 5.12109l-11.5781 2.59766c-11.3799 2.57324 -19.2471 5.36816 -23.6016 8.38672c-7.37207 5.04688 -11.0586 12.9385 -11.0586 23.6758c0 9.79688 3.5625 17.9365 10.6875 24.418s17.5898 9.72266 31.3945 9.72266
-c11.5283 0 21.3623 -3.05566 29.502 -9.16602s12.4072 -14.9795 12.8027 -26.6074h-21.9688c-0.395508 6.58105 -3.26562 11.2568 -8.60938 14.0273c-3.5625 1.83105 -7.99121 2.74609 -13.2852 2.74609c-5.8877 0 -10.5889 -1.1875 -14.1016 -3.5625
-s-5.26953 -5.69043 -5.26953 -9.94531c0 -3.90918 1.73145 -6.82812 5.19531 -8.75781c2.22656 -1.28613 6.97656 -2.7959 14.25 -4.52734l18.8516 -4.52734c8.2627 -1.97949 14.4971 -4.62598 18.7031 -7.94141c6.53125 -5.14551 9.79688 -12.5928 9.79688 -22.3398
-c0 -9.99512 -3.82227 -18.2949 -11.4668 -24.9004s-18.4434 -9.9082 -32.3965 -9.9082c-14.25 0 -25.457 3.25293 -33.6211 9.75977s-12.2461 15.4502 -12.2461 26.8301h21.8203zM246.449 51.3984v-19.3711h-32.7305v-90.0273h-23.0078v90.0273h-32.8789v19.3711h88.6172z
-M319.088 -31.6523c5.31934 6.67969 7.97852 16.1797 7.97852 28.5c0 12.2705 -2.65918 21.7588 -7.97852 28.4629s-12.5059 10.0566 -21.5605 10.0566s-16.2783 -3.33984 -21.6719 -10.0195s-8.08984 -16.1797 -8.08984 -28.5s2.69629 -21.8203 8.08984 -28.5
-s12.6172 -10.0195 21.6719 -10.0195s16.2412 3.33984 21.5605 10.0195v0zM333.375 -48.2773c-8.2627 -8.51074 -20.2119 -12.7656 -35.8477 -12.7656s-27.585 4.25488 -35.8477 12.7656c-11.083 10.4404 -16.625 25.4814 -16.625 45.125
-c0 20.0391 5.54199 35.0811 16.625 45.125c8.2627 8.51074 20.2119 12.7656 35.8477 12.7656s27.585 -4.25488 35.8477 -12.7656c11.0342 -10.0439 16.5508 -25.0859 16.5508 -45.125c0 -19.6436 -5.5166 -34.6846 -16.5508 -45.125v0zM416.479 28.7617
-c-2.99316 2.4248 -7.18652 3.63672 -12.5801 3.63672h-21.3008v-32.2109h21.3008c5.39355 0 9.58691 1.31152 12.5801 3.93359s4.49023 6.77832 4.49023 12.4688s-1.49707 9.74707 -4.49023 12.1719v0zM433.809 -10.6484
-c-6.53125 -5.34375 -15.8584 -8.01562 -27.9805 -8.01562h-23.2305v-39.3359h-22.7109v109.398h47.6484c10.9844 0 19.7422 -2.82031 26.2734 -8.46094s9.79688 -14.374 9.79688 -26.1992c0 -12.9141 -3.26562 -22.043 -9.79688 -27.3867v0z" />
-    <glyph glyph-name="uniF19B" unicode="&#xf19b;" 
-d="M306 -129v158.1h50v-158.1l-25 38l-25 -38v0z" />
-    <glyph glyph-name="uniF171" unicode="&#xf171;" 
-d="M145.383 68.2695v0c0 -4.19336 -3.40918 -7.60742 -7.60059 -7.60742c-4.19238 0 -7.60156 3.41211 -7.60156 7.60742c0 4.19336 3.40918 7.60742 7.60156 7.60742c4.19141 0 7.60059 -3.41406 7.60059 -7.60742zM130.492 34.4863v0l14.5811 5.26855
-c-2.4375 3.76074 -5.1709 7.97852 -5.4043 8.33496c-0.642578 -0.43457 -13.5693 -9.18652 -13.5693 -9.18652l-3.6748 4.5957l13.5215 11.4814l10.7549 6.62598l14.7578 -22.1572l-20.3281 -33.3672l-6.30664 3.1582s11.7803 20.5508 13.8008 24.0781
-c-2.6377 -0.754883 -9.69824 -2.77734 -10.3213 -2.95312c0.260742 -0.710938 2.39746 -6.59863 2.39746 -6.59863l-6.59375 -2.04688zM191.856 13.1494v0c0 -10.7793 -8.76367 -19.5518 -19.5332 -19.5518c-10.7705 0 -19.5352 8.77246 -19.5352 19.5518
-c0 10.7783 8.76465 19.5508 19.5352 19.5508c10.7695 0 19.5332 -8.77246 19.5332 -19.5508zM158.471 13.1494v0c0 -7.64355 6.21387 -13.8633 13.8516 -13.8633c3.69922 0 7.17578 1.44141 9.79297 4.06055c2.61621 2.61816 4.05762 6.09961 4.05762 9.80273
-c0 7.64355 -6.21582 13.8623 -13.8506 13.8623c-7.6377 0 -13.8516 -6.21875 -13.8516 -13.8623zM130.271 13.1494v0c0 -10.7793 -8.76465 -19.5518 -19.5352 -19.5537c-5.21777 0 -10.123 2.03613 -13.8135 5.72852c-3.6875 3.69238 -5.72168 8.60254 -5.72168 13.8252
-c0 10.7783 8.76367 19.5508 19.5352 19.5508c10.7705 0 19.5352 -8.77246 19.5352 -19.5508zM96.8867 13.1494v0c0 -7.64258 6.21387 -13.8633 13.8496 -13.8633c7.63672 0 13.8506 6.2207 13.8506 13.8633c0 7.64355 -6.21387 13.8623 -13.8506 13.8623
-c-7.63574 0 -13.8496 -6.21875 -13.8496 -13.8623zM305.812 36.4668c0 3.61458 1.80566 5.42188 5.41699 5.42188c3.61197 0 5.41797 -1.80729 5.41797 -5.42188c0 -3.61523 -1.806 -5.42285 -5.41797 -5.42285c-3.61133 0 -5.41699 1.80762 -5.41699 5.42285z
-M187.959 90.1953c-2.16504 -1.93359 -5.21094 -3.0459 -8.5459 -3.0459c-6.73145 0 -11.6475 3.98242 -14.2812 9.95801l5.91309 2.16699c1.6377 -3.69141 4.67969 -5.79883 8.36914 -5.79883c3.62793 0 6.08594 2.51855 6.08594 5.79883
-c0 5.21289 -6.08594 6.0918 -11.1787 8.1416c-2.34082 0.938477 -7.5498 3.28125 -7.5498 9.7832c0 7.67383 5.20898 10.6025 12.2324 10.6025c5.5 0 9.24609 -3.16406 11.1787 -8.02637l-5.50098 -1.63965s-1.40527 3.33887 -5.7959 3.45605h-0.40918
-c-2.69141 0 -5.61719 -1.05371 -5.61719 -4.15918v-0.40918c0.527344 -7.26465 18.9629 -2.46094 18.9629 -17.8672c0 -3.57129 -1.40527 -6.73535 -3.86328 -8.96094v0zM218.918 87.8525v17.1045h-14.2803v-17.1045h-6.2041v39.2461h6.2041v-15.8154h14.2803v15.8154
-h6.2041v-39.2461h-6.2041v0zM257.605 87.8525l-3.8623 11.0117h-12.2334l-3.8623 -11.0117h-6.61426l13.5186 39.2461h6.14648l13.5195 -39.2461h-6.6123v0zM247.713 116.202l-4.03809 -11.0117h7.84277l-3.80469 11.0117v0zM290.087 87.8525l-6.32031 17.1045h-7.43262
-v-17.1045h-6.20312v39.2461h12.9346c3.04199 0 5.09277 -0.293945 7.02344 -1.23047c3.45312 -1.63965 5.91113 -5.7998 5.91113 -9.7832c0 -4.15918 -2.45801 -8.25977 -6.08594 -9.89941l6.90625 -18.335h-6.7334v0.00195312zM287.337 120.187
-c-1.05371 0.585938 -1.52246 0.703125 -3.57031 0.703125h-7.43262v-9.60645h7.43262c1.93164 0 2.5752 0.117188 3.57031 0.644531c1.52246 0.87793 2.45801 2.51758 2.45801 4.15918c0 1.64062 -0.935547 3.2793 -2.45801 4.09961v0zM303.431 87.8525v39.2461h23.1172
-v-6.20996h-16.9141v-9.60742h11.4141v-6.32617h-11.4141v-10.7783h18.1455v-6.32617h-24.3486v0.00195312zM216.4 -40.75v-33.7393h-6.20312v33.7393h-8.95508v5.50684h24.2305v-5.50684h-9.07227v0zM251.753 -74.4893v17.1045h-14.2812v-17.1045h-6.20312v39.2461h6.20312
-v-15.8154h14.2812v15.8154h6.2041v-39.2461h-6.2041v0zM267.32 -74.4893v39.2461h23.1172v-6.20996h-16.9141v-9.60547h11.4141v-6.32617h-11.4141v-10.7783h18.1445v-6.32617h-24.3477v0zM200.775 -128.883l-6.32031 17.1055h-7.43262v-17.1055h-6.2041v39.2461h12.9346
-c3.04297 0 5.09082 -0.291992 7.02246 -1.22949c3.45312 -1.64062 5.91211 -5.79883 5.91211 -9.78223c0 -4.15918 -2.45898 -8.25879 -6.08789 -9.89941l6.90625 -18.335h-6.73047v0zM198.025 -96.5498c-1.05273 0.587891 -1.52246 0.703125 -3.57031 0.703125h-7.43262
-v-9.60547h7.43262c1.93164 0 2.57422 0.116211 3.57031 0.644531c1.52148 0.87793 2.45898 2.51953 2.45898 4.15918s-0.9375 3.28027 -2.45898 4.09863v0zM236.828 -125.191c-2.22559 -2.9873 -5.38477 -4.39453 -9.48242 -4.39453
-c-5.5 0 -8.95508 2.22754 -11.2959 7.0293c-1.63867 3.33984 -2.75 8.55371 -2.75 13.2393c0 6.44238 1.63867 12.2422 4.27246 15.9902c2.3418 2.9873 5.50195 4.39453 10.0088 4.39453c4.97559 0 8.42773 -2.22754 10.8848 -7.0293
-c1.63867 -3.45801 2.63477 -8.43555 2.63477 -13.3555c0 -6.20996 -1.52246 -12.418 -4.27246 -15.874v0zM232.555 -98.3066c-1.22949 2.05078 -2.75195 2.87012 -5.09082 3.0459h-0.350586c-2.80957 0 -4.68262 -1.52344 -5.9707 -4.8623
-c-0.996094 -2.34277 -1.52246 -5.91602 -1.52246 -9.19434c0 -4.16016 0.820312 -8.43652 2.34082 -10.8955c1.22949 -2.0498 2.86816 -3.04492 5.38477 -3.04492c2.86816 0 4.68262 1.52344 6.0293 4.97949c0.819336 2.0498 1.52246 5.91602 1.52246 8.96289
-c-0.00195312 4.39062 -0.821289 8.37305 -2.34277 11.0088v0zM272.88 -128.883l-3.86133 11.0127h-12.2334l-3.86035 -11.0127h-6.61426l13.5205 39.2461h6.14453l13.5195 -39.2461h-6.61523v0zM262.987 -100.531l-4.03809 -11.0117h7.84277l-3.80469 11.0117v0z
-M305.188 -126.656c-1.46387 -1.40723 -3.57031 -2.1084 -5.61816 -2.22754h-2.22559h-11.9395v39.2461h12.6406c3.97949 0 5.50098 -0.40918 7.6084 -2.0498c4.09766 -3.57324 6.43848 -9.7832 6.43848 -17.5156c0.000976562 -7.84766 -2.45898 -14.0566 -6.9043 -17.4531v0
-zM302.611 -97.4863c-0.993164 0.936523 -2.33984 1.63965 -3.97949 1.63965h-7.02344v-26.71h6.20312c2.04785 0 3.27637 0.410156 4.39062 1.52441c2.33887 2.34277 3.56934 6.61914 3.56934 11.8311c0.00195312 5.27148 -1.23047 9.66602 -3.16016 11.7148v0z
-M323.865 43.9805v0h13.5986c0.314453 -0.338867 10.2412 -10.9971 10.5576 -11.3369v-2.94141h-24.1562v14.2783zM322.372 43.9805v0v-14.2783h-23.7109c-0.200195 0.121094 -2.10742 1.29395 -2.99414 1.83789c1.0791 1.02051 12.8223 12.1562 13.125 12.4404h13.5801z
-M421.005 23.2285v0l0.555664 -9.6123l-0.62207 -1.41992c-0.549805 -1.30859 -0.927734 -2.18555 -1.13965 -2.48926c-1.24316 -1.66992 -3.04395 -2.58301 -5.08008 -2.58301l-25.002 -1.75391c-0.0380859 -0.00195312 -0.666992 -0.0078125 -0.666992 -0.0078125
-c-1.70117 -0.0273438 -3.63184 -0.0634766 -4.7627 2.06738c-0.0136719 0.0322266 -0.224609 0.483398 -0.224609 0.483398c-1.82324 3.96484 -6.09668 13.2451 -17.2432 13.2451c-10.8291 0 -14.4746 -7.72559 -17.4053 -13.9375
-c-1.06934 -2.27344 -1.99609 -4.2373 -3.15137 -5.47656c-2.07227 -2.22852 -4.70508 -1.94238 -4.81543 -1.92773l-60.085 -0.00585938l-1.99707 -0.0898438c-2.91504 -0.194336 -6.2207 -0.415039 -6.98926 2.89355
-c-0.00292969 0.015625 -0.0664062 0.313477 -0.0664062 0.313477c-1.17676 5.71582 -3.93457 19.1104 -18.7061 19.1104c-10.4541 0 -13.9551 -6.64258 -17.0439 -12.501c-0.882812 -1.66699 -1.71289 -3.24414 -2.65039 -4.52246
-c-1.38281 -1.78418 -3.11328 -2.57031 -5.62012 -2.57031l-5.46973 0.291992c-1.57129 0 -2.89062 1.57324 -3.24609 3.09473c-3.27539 7.13086 -4.11035 12.3896 -2.43359 15.5068c1.24414 2.31445 3.39941 2.49316 3.49316 2.50293
-c0.180664 0.0322266 23.2646 3.8125 37.543 5.26074c9.71777 0.87207 25.3105 2.05078 25.6309 2.05078c1.01953 0 1.99414 0.283203 2.67969 0.775391l0.146484 0.0634766l0.446289 0.447266c0.304688 0.321289 0.544922 0.577148 0.795898 0.692383l14.0693 13.3643
-l0.120117 0.0888672l0.52832 0.555664c0.319336 0.393555 0.683594 0.810547 1.13867 0.922852c1.99121 0.916992 5.5127 0.927734 5.65918 0.927734h41.8232s20.4756 -15.0508 20.7119 -15.2236c0.28418 -0.03125 42.8535 -4.66602 42.8535 -4.66602
-c0.222656 -0.0595703 2.98047 -0.960938 4.42676 -2.51465c0.583008 -0.62793 1.79883 -1.93555 1.79883 -3.35742zM295.667 31.5381v0c0.886719 -0.543945 2.79395 -1.71484 2.99414 -1.83691h23.7109v14.2783h-13.5801
-c-0.304688 -0.285156 -12.0459 -11.4209 -13.125 -12.4414zM348.021 29.7021v0v2.94141c-0.316406 0.338867 -10.2432 10.9971 -10.5576 11.3369h-13.5986v-14.2783h24.1562zM367.608 18.1016v0c7.8252 0 14.1943 -6.56934 14.1943 -14.6455
-c0 -7.7832 -6.50293 -14.3574 -14.1943 -14.3574c-8.15234 0 -14.7852 6.44043 -14.7852 14.3574c0 7.9375 6.77246 14.6455 14.7852 14.6455zM367.315 -3.48438v0c3.90723 0 7.07422 3.16992 7.07422 7.08008c0 3.90918 -3.16699 7.0791 -7.07422 7.0791
-s-7.07324 -3.16992 -7.07324 -7.0791c0 -3.91016 3.16602 -7.08008 7.07324 -7.08008zM254.369 18.832v0c7.9834 0 14.4844 -6.50488 14.4844 -14.4961c0 -7.99902 -6.5 -14.5059 -14.4844 -14.5059c-7.99219 0 -14.4932 6.50684 -14.4932 14.5059
-c0 7.99219 6.50098 14.4961 14.4932 14.4961zM254.363 -3.48438v0c3.90723 0 7.07422 3.16992 7.07422 7.08008c0 3.90918 -3.16699 7.0791 -7.07422 7.0791s-7.07422 -3.16992 -7.07422 -7.0791c0 -3.91016 3.16699 -7.08008 7.07422 -7.08008z" />
-    <glyph glyph-name="uniF151" unicode="&#xf151;" 
-d="M110.326 -101.306c0 0 5.40332 14.0439 15.1055 -3.94727c0 0 12.8018 -20.7285 29.0977 0.196289c0 0 6.59473 19.9375 16.6826 -0.196289c0 0 12.8018 -20.7285 29.0986 0.196289c0 0 6.59375 19.9375 16.6826 -0.196289c0 0 12.8018 -20.7285 29.0977 0.196289
-c0 0 6.59473 19.9375 16.6836 -0.196289c0 0 12.8018 -20.7285 29.0977 0.196289c0 0 6.59473 19.9375 16.6836 -0.196289c0 0 12.8018 -20.7285 29.0947 0.196289c0 0 6.59766 19.9375 16.6865 -0.196289c0 0 12.8018 -20.7285 29.0977 0.196289
-c0 0 6.59473 19.9375 16.6797 -0.196289l8.46387 18.9492c-14.3545 18.9492 -24.8701 -0.624023 -24.8701 -0.624023c-10.4727 -22.5039 -22.0762 0.624023 -22.0762 0.624023c-14.3535 18.9492 -24.8662 -0.624023 -24.8662 -0.624023
-c-10.4756 -22.5039 -22.0791 0.624023 -22.0791 0.624023c-14.3545 18.9492 -24.8662 -0.624023 -24.8662 -0.624023c-10.4766 -22.5039 -22.0762 0.624023 -22.0762 0.624023c-14.3545 18.9492 -24.8701 -0.624023 -24.8701 -0.624023
-c-10.4756 -22.5039 -22.0762 0.624023 -22.0762 0.624023c-14.3535 18.9492 -24.8662 -0.624023 -24.8662 -0.624023c-10.4795 -22.5039 -22.0762 0.624023 -22.0762 0.624023c-14.3574 18.9492 -24.8691 -0.624023 -24.8691 -0.624023
-c-10.4766 -22.5039 -22.0771 0.624023 -22.0771 0.624023c-14.3535 18.9492 -24.9092 -0.460938 -24.9092 -0.460938l8.32617 -14.541zM140.64 -33.7363h-58.6396v13.7363h94.793v-50.7568c-1.95312 2.95996 -4.35254 3.57422 -7.75586 4.74902
-c-13.7236 1.56152 -23.041 -2.85059 -29.1787 -9.66211l-1.00098 -1.41797c-0.223633 2.67969 -1.56543 3.6543 -3.6875 4.43555l5.46973 38.916zM262.46 114v0l50.3096 -50.0596l-134.66 -83.0156l-22.1094 67.7471zM262.877 104.655v0l4.33887 -56.6504l31.6201 19.6064z
-M254.033 99.5664v0l-31.0371 -19.4404l34.708 -22.8604zM213.985 74.2861v0l6.6748 -55.2324l40.3809 25.1963zM207.395 70.1982v0l-31.0371 -19.5234l34.708 -22.7773zM166.763 44.501v0l15.9355 -48.7246l30.7871 18.9395zM370.153 -33.7363h58.6357v13.7363h-94.7891
-v-50.7568c1.95215 2.95996 4.35156 3.57422 7.75293 4.74902c13.7256 1.56152 23.0439 -2.85059 29.1807 -9.66211l1.00195 -1.41797c0.223633 2.67969 1.56445 3.6543 3.68359 4.43555l-5.46582 38.916z" />
-    <glyph glyph-name="uniF11E" unicode="&#xf11e;" 
-d="M246.664 98.748c9.69043 0 17.5459 -7.86719 17.5459 -17.5791c0 -9.70312 -7.86523 -17.5791 -17.5459 -17.5791c-9.69824 0 -17.5547 7.87598 -17.5547 17.5791c-0.00878906 9.71191 7.85645 17.5791 17.5547 17.5791zM265.265 -52.7969
-c3.74609 10.5371 7.50195 21.1006 11.2393 31.6377c-0.167969 1.12598 -0.920898 1.77344 -2.45312 1.05566c-7.13867 -2.57227 -14.2783 -5.15332 -21.417 -7.72559c4.19824 -8.32812 8.42383 -16.6484 12.6309 -24.9678v0zM276.158 62.5342v0
-c8.77734 -17.5801 17.5557 -35.1592 26.3418 -52.7471c2.34668 -5.65918 2.81641 -10.6973 1.39941 -15.123c-10.0713 -26.0146 -20.1328 -52.0381 -30.2031 -78.0615c-6.54492 -15.2285 -20.8232 -7.50293 -16.501 6.33301c1.05371 2.93652 2.1084 5.86328 3.16211 8.79004
-c-4.50781 -0.124023 -8.37891 2.3418 -11.9395 5.97852c-5.62402 11.5918 -11.2305 23.2109 -16.8555 34.8125c-1.9834 4.22168 -1.05371 8.44434 6.32422 12.6572c10.7617 5.50781 21.5322 11.0156 32.3018 16.5234c-4.21582 8.79883 -8.43164 17.5889 -12.6475 26.3789
-c-1.05371 1.41016 -2.57715 1.41016 -4.57031 0c-6.66992 -7.97461 -13.3389 -15.9395 -20.0088 -23.9131c-13.6924 -9.72949 -19.2021 0.701172 -10.1855 10.2002c13.3389 16.0537 26.6865 32.1172 40.043 48.1709c4.44629 5.62305 8.89258 5.62305 13.3389 0z
-M177.083 -22.0908v0c-18.7246 0 -33.9229 -15.2109 -33.9229 -33.9697c0 -18.7598 15.1982 -33.9795 33.9229 -33.9795c18.7412 0 33.9229 15.2197 33.9229 33.9795c0 18.7588 -15.1816 33.9697 -33.9229 33.9697zM177.083 -16.5557
-c21.7881 0 39.458 -17.6953 39.458 -39.5049c0 -21.8193 -17.6699 -39.5146 -39.458 -39.5146c-21.7891 0 -39.4502 17.6953 -39.4502 39.5146c0 21.8096 17.6611 39.5049 39.4502 39.5049v0zM337.529 -22.0908v0c-18.7324 0 -33.9316 -15.2109 -33.9316 -33.9697
-c0 -18.7598 15.1992 -33.9795 33.9316 -33.9795c18.7334 0 33.9229 15.2197 33.9229 33.9795c0 18.7588 -15.1895 33.9697 -33.9229 33.9697zM337.529 -16.5557c21.7891 0 39.459 -17.6953 39.459 -39.5049c0 -21.8193 -17.6699 -39.5146 -39.459 -39.5146
-c-21.7881 0 -39.4492 17.6953 -39.4492 39.5146c0 21.8096 17.6699 39.5049 39.4492 39.5049v0zM377.144 -56.0605c0 21.8955 -17.7393 39.6611 -39.6143 39.6611c-21.8652 0 -39.6045 -17.7656 -39.6045 -39.6611c0 -21.9033 17.7314 -39.6689 39.6045 -39.6689
-c21.875 0 39.6143 17.7656 39.6143 39.6689zM376.833 -56.0605c0 -21.7334 -17.6006 -39.3584 -39.3037 -39.3584c-21.7012 0 -39.2939 17.625 -39.2939 39.3584c0 21.7256 17.6006 39.3506 39.2939 39.3506c21.7031 0 39.3037 -17.625 39.3037 -39.3506zM179.022 -50.1895
-c3.34766 0 6.04883 -2.71387 6.04883 -6.04883c0 -3.34375 -2.70117 -6.05762 -6.04883 -6.05762c-3.33008 0 -6.0498 2.71387 -6.0498 6.05762s2.71973 6.04883 6.0498 6.04883zM335.873 -52.1406c3.33984 0 6.0498 -2.71387 6.0498 -6.04004
-c0 -3.34375 -2.70996 -6.05762 -6.0498 -6.05762c-3.33008 0 -6.04883 2.71387 -6.04883 6.05762c0 3.33496 2.71875 6.04004 6.04883 6.04004zM180.183 -50.2334c10.9121 15.4326 21.833 30.8662 32.7451 46.3076c3.75488 5.74805 6.9707 3.68066 3.57812 -2.18164
-c-1.27539 -2.10254 -2.55957 -4.18652 -3.83496 -6.28906c6.81934 0.257812 13.6484 0.514648 20.4688 0.772461c-2.97656 -1.2959 -5.68652 -2.66113 -6.51855 -4.48828c-5.20801 -0.257812 -10.416 -0.514648 -15.6152 -0.771484
-c7.56348 -7.48633 15.0918 -14.9629 22.6475 -22.4492l2.35547 -5.54395c0.744141 -1.47168 -1.0625 -1.69336 -2.98438 -0.487305c-8.49414 8.04492 -16.9795 16.0801 -25.4648 24.1162c-7.63477 -10.7324 -15.2695 -21.4639 -22.8955 -32.1963h-2.81641
-c-0.628906 0.558594 -1.28418 1.11719 -1.92188 1.66699c0.0800781 0.514648 0.15918 1.0293 0.256836 1.54395zM310.852 -21.7979l25.8984 -33.9443l-3.04688 -5.27734l-41.5312 -0.274414c-3.22363 0.638672 -3.15234 5.59668 0 5.55176h33.7812l1.65625 3.05176
-l-20.7695 28.6045c-1.66504 2.12891 0 5.22363 4.01172 2.28809z" />
-    <glyph glyph-name="uniF181" unicode="&#xf181;" 
-d="M258.366 -41.4629v0l82.918 42.8311c-5.21973 0.250977 -10.2031 3.23828 -12.9463 8.22168c-1.7373 3.23047 -1.98828 6.96387 -1.24121 10.2021l-75.7031 -39.0889c3.23828 -1.25 6.22559 -3.73438 7.71875 -6.97266
-c2.49219 -4.98242 1.99707 -10.7129 -0.746094 -15.1934zM171.706 -85.7871v0l73.958 37.8477c-5.22754 0.258789 -10.4551 2.99414 -12.9463 7.96973c-1.74512 3.49023 -1.98926 6.97266 -1.24219 10.4619l-21.4111 -10.957l3.97754 -7.9707l-41.833 -21.6621
-c0.251953 -0.251953 0.495117 -0.496094 0.495117 -0.74707c2.49219 -4.9834 1.99707 -10.7061 -0.998047 -14.9424zM130.872 -91.2656v0l-13.4492 25.6484l2.49219 6.47656l33.8691 17.4336v29.877l32.8643 16.9316l19.9258 -38.8457l4.48047 2.24805l-33.3672 64.7373
-l150.155 77.4473l36.8574 -71.4658l-17.4346 -9.21973c3.23828 -1.24219 5.97461 -3.48242 7.71875 -6.97168c2.49219 -4.97656 1.98926 -10.7061 -0.998047 -14.9355l37.8555 19.4229l2.73535 -138.207l-269.679 0.746094l34.1055 17.4346
-c-5.21973 0.251953 -10.2031 3.23828 -12.6943 8.21387c-0.251953 0.251953 -0.251953 0.495117 -0.495117 0.754883z" />
-    <glyph glyph-name="uniF15A" unicode="&#xf15a;" 
-d="M234.429 74.5576c4.33594 -16.6445 8.67188 -33.2998 13.0176 -49.9443c-15.2988 -42.3408 -31.2139 -86.2129 -46.5127 -128.564c-8.54785 -27.1865 16.5117 -32.7354 28.2754 -11.3438c13.2031 32.498 26.8066 66.9697 39.999 99.457
-c1.9209 5.69238 4.2334 4.91211 5.28125 0.21582c7.3457 -31.8711 14.6816 -63.7324 22.0283 -95.6035c3.6582 -22.4092 33.8447 -26.7754 30.8135 5.66113c-11.7441 61.2148 -23.4775 124.681 -35.2217 185.896c18.6484 -10.4902 38.0059 -22.3467 56.6641 -32.8271
-c19.7686 -7.15137 20.5078 7.52051 9.71973 15.9053c-12.3701 8.17773 -25.0801 15.3086 -37.4609 23.4873c-12.3701 9.02051 -24.7305 18.0312 -37.0908 27.042c-3.61621 2.87695 -8.74316 5.20996 -15.3809 4.63379
-c-10.4902 -1.45898 -20.6826 -3.79102 -31.1621 -5.25977c-6.76074 -1.64453 -11.1484 -4.62402 -14.4668 -8.16895c-7.97266 -9.22656 -15.9355 -18.4531 -23.9092 -27.6787c-12.1543 -3.97656 -24.3096 -7.96289 -36.4639 -11.96
-c-15.001 -4.97266 -9.8125 -21.5459 4.39746 -18.8643c15.7197 3.77148 31.4404 7.54199 47.1699 11.3232c2.30176 1.68457 4.61328 3.35938 6.91504 5.03418c3.03125 4.27441 6.06152 8.54785 9.09277 12.8223c1.41797 -0.441406 2.85645 -0.852539 4.29492 -1.26367z
-M321.121 87.0273c-12.3672 9.01855 -24.7314 18.0322 -37.084 27.0371c-3.63672 2.8916 -8.80664 5.24414 -15.4902 4.66602c-409.932 -35.3389 -0.00390625 0 -0.00390625 0l-0.00390625 -0.000976562c-10.499 -1.46191 -20.6904 -3.79395 -31.1621 -5.26172
-c-302.895 -42.3164 -0.0078125 -0.000976562 -0.0078125 -0.000976562c-291.167 -71.0273 -0.0078125 -0.00195312 -0.0078125 -0.00195312c-6.79102 -1.65137 -11.2061 -4.64648 -14.5459 -8.21484c-7.95898 -9.21094 -15.9746 -18.498 -23.8818 -27.6494
-c-12.1602 -3.97754 -24.2803 -7.95117 -36.4248 -11.9453c-7.19141 -2.38477 -9.82617 -7.44629 -9.00684 -11.832c0.900391 -4.8291 5.96777 -8.75391 13.4844 -7.33691c78.6592 14.9824 0.00390625 0.000976562 0.00390625 0.000976562
-c77.249 18.4824 0.00390625 0.000976562 0.00390625 0.000976562c15.7188 3.77344 31.4395 7.54297 47.168 11.3242c0 0 -84.4043 -20.2803 0.0302734 0.00683594c0 0 -63.3301 -46.3535 0.0253906 0.0185547c2.30273 1.68359 4.6123 3.35938 6.91602 5.03516
-c0 0 -81.5732 -59.3828 0.0205078 0.015625c0 0 -43.4609 -61.2471 0.0146484 0.0205078l9.02637 12.7275c1.36035 -0.421875 2.77637 -0.826172 4.10547 -1.2041c4.3291 -16.6211 8.6709 -33.2988 12.9805 -49.8115c-15.2949 -42.334 -31.2002 -86.1777 -46.4961 -128.521
-c-3.84863 -12.2412 -0.922852 -20.1826 4.63379 -23.2383c6.81543 -3.75 17.4209 -0.0644531 23.9277 11.7686c80.5586 147.551 0.00390625 0.0078125 0.00390625 0.0078125c49.7666 121.508 0.00390625 0.00878906 0.00390625 0.00878906
-c13.2031 32.498 26.8066 66.9717 39.998 99.457c40.8418 100.062 -84.582 -207.226 0.00195312 0.00390625l0.000976562 0.00488281c1.88477 5.58301 3.95605 4.82129 4.97949 0.231445l22.0283 -95.6006c1.91016 -11.7021 11.0234 -18.5439 18.9658 -17.8115
-c7.37598 0.679688 13.6201 7.88867 12.1592 23.5186c-2.64551 28.5674 5.76367 -62.2422 -0.000976562 0.0078125c-4.68652 24.7959 12.0322 -63.6543 -0.000976562 0.00683594c-11.7236 61.0947 -23.4463 124.503 -35.1592 185.564
-c18.6055 -10.4766 37.7979 -22.2305 56.3691 -32.6621c0 0 -353.128 197.922 0.0117188 -0.00683594c0 0 -402.456 145.248 0.0117188 -0.00390625c8.41211 -3.04199 13.4697 -2.17676 15.6445 0.597656c2.94043 3.75098 0.448242 10.7432 -5.77539 15.5801
-c-317.6 244.309 -0.00488281 0.00390625 -0.00488281 0.00390625c-351.564 233.309 -0.00488281 0.00292969 -0.00488281 0.00292969c-12.376 8.18164 -25.082 15.3105 -37.458 23.4863zM247.593 24.5596c32.0078 88.5088 -25.667 -70.9746 0.0166016 0.0458984
-c-31.8906 122.109 12.1445 -46.501 -0.0117188 0.0478516c-4.34375 16.6445 -8.67969 33.3008 -13.0156 49.9453l-0.0234375 0.0859375l-0.0859375 0.0253906c-1.43945 0.410156 -2.87793 0.819336 -4.29297 1.26074l-0.109375 0.0332031l-9.14258 -12.8926
-c-2.25586 -1.6416 -4.54688 -3.30273 -6.87012 -5.00098c-15.6582 -3.76465 -31.4385 -7.54785 -47.1377 -11.3174c1.95605 0.418945 1.97363 0.37207 0.0078125 0.00195312c-7.38086 -1.3916 -12.2529 2.45215 -13.1172 7.08594
-c-0.785156 4.20312 1.71289 9.12695 8.79785 11.4756c12.1533 3.99805 24.3076 7.98242 36.4639 11.959c0 0 -84.2852 -27.583 0.0410156 0.0136719l0.0292969 0.0332031c7.9707 9.22461 15.9385 18.4561 23.9053 27.6768c3.29688 3.52148 7.65527 6.4834 14.3877 8.12109
-c-1.96484 -0.375 -1.99609 -0.280273 -0.015625 -0.00292969c10.4893 1.46973 20.6807 3.80176 31.1621 5.26172c-1.9873 -0.225586 -2 -0.173828 -0.0078125 -0.000976562c6.59375 0.570312 11.6738 -1.74121 15.2715 -4.60352
-c12.3662 -9.01465 24.7217 -18.0225 37.0928 -27.043c0 0 -300.382 220.593 0.00292969 -0.00195312c0 0 -322.997 212.884 0.00292969 -0.00195312c12.3896 -8.18359 25.0986 -15.3145 37.4609 -23.4883c-1.625 1.16504 -1.58887 1.23438 -0.00976562 0.00683594
-c6.18652 -4.80762 8.47949 -11.6211 5.72168 -15.1377c-2.03418 -2.59473 -6.9043 -3.53027 -15.29 -0.49707c1.81836 -0.833008 1.7666 -0.990234 0.0234375 -0.0107422c-18.6553 10.4785 -38.0127 22.3359 -56.6641 32.8281l-0.294922 0.166016l0.0634766 -0.332031
-c11.7441 -61.2148 23.4766 -124.682 35.2227 -185.896c-0.283203 1.97949 -0.188477 2.00586 -0.00195312 0.0146484c1.45312 -15.5508 -4.7373 -22.5186 -11.876 -23.1768c-7.74121 -0.713867 -16.7383 5.98242 -18.627 17.5547
-c-32.8633 204.904 20.9707 -130.762 -0.000976562 0.00488281c-44.8447 193.176 30.9922 -133.506 -0.000976562 0.00488281l-22.0293 95.6055c-1.07031 4.80078 -3.62402 5.60156 -5.58301 -0.202148c0.697266 1.875 0.755859 1.8623 0.00292969 0.00878906
-c-13.1914 -32.4873 -26.7949 -66.96 -39.998 -99.457c0.858398 1.80664 0.97168 1.76953 0.0078125 0.0166016c-6.46094 -11.749 -16.9004 -15.2754 -23.501 -11.6445c-5.37012 2.9541 -8.31152 10.7002 -4.48828 22.8623c15.2969 42.3447 31.2148 86.2236 46.5107 128.562z
-M249.286 168.23c12.041 0 21.8018 -9.76074 21.8018 -21.8027s-9.75 -21.8027 -21.8018 -21.8027c-12.042 0 -21.8027 9.76074 -21.8027 21.8027s9.76074 21.8027 21.8027 21.8027zM227.642 146.428c0 14.4609 7.18262 21.6455 21.6436 21.6455
-s21.6455 -7.18457 21.6455 -21.6455s-7.18457 -21.6455 -21.6455 -21.6455s-21.6436 7.18457 -21.6436 21.6455zM227.327 146.428c0 -14.6094 7.34863 -21.96 21.958 -21.96s21.96 7.35059 21.96 21.96s-7.35059 21.96 -21.96 21.96s-21.958 -7.35059 -21.958 -21.96z
-M73.8896 -46.2598l28.4297 49.8311h21.9668l-28.4297 -69.25l-21.9668 19.4189zM95.917 -65.9434l28.6025 69.6709h-22.29l-28.5381 -50.0205zM124.051 3.41309l-28.2568 -68.8291l-21.7041 19.1895l28.3213 49.6396h21.6396zM123.649 -95.4336l32.96 99.6416
-l23.9092 -1.93164l-30.3721 -122.955l-26.4971 25.2451zM150.234 -120.979l30.4814 123.398c-0.0605469 0.00488281 -0.12207 0.00976562 -0.183594 0.0146484l-23.9102 1.92969s233.382 -18.8584 -0.123047 0.00976562l-33.0312 -99.8516zM180.323 2.13574
-l-30.2646 -122.515l-26.2295 24.9902l32.8906 99.4297zM196.033 -130.388l-0.647461 -27.1865h34.8916l1.94238 36.2383c-11.2715 -14.1172 -23.3438 -17.1377 -36.1865 -9.05176zM195.548 -157.417l0.635742 26.751c12.6807 -7.84766 24.6494 -4.94629 35.8525 8.85254
-l-1.90723 -35.6035h-34.5811zM195.226 -157.731h35.2002l1.97559 36.876c-0.101562 -0.126953 -0.203125 -0.254883 -0.305664 -0.382812c-11.2373 -14.0771 -23.2119 -17.0547 -35.9785 -9.01562c-0.078125 0.0488281 -0.15625 0.0986328 -0.234375 0.147461z
-M202.495 -81.8516l30.3721 83.4707l-20.6826 0.657227l-9.68945 -84.1279zM202.805 -80.5439l9.51855 82.6602l20.3223 -0.647461zM202.188 -83.1592l30.8271 84.7246c0.0244141 0.0683594 0.0498047 0.135742 0.0742188 0.204102
-c-0.0722656 0.00195312 -0.144531 0.00390625 -0.216797 0.00683594l-20.6836 0.658203s78.0742 -2.47461 -0.144531 0.00390625l-9.7041 -84.2725c-0.0507812 -0.441406 -0.101562 -0.882812 -0.152344 -1.3252zM270.996 -28.1357l7.73633 -127.486h36.8447
-c-2.85645 5.66113 -5.1377 11.5176 -3.21582 18.7715c-12.8125 4.59277 -19.2861 12.3496 -19.3984 23.292l-21.9668 85.4229zM278.88 -155.464l-7.62793 125.701l21.5537 -83.8164c0.131836 -10.9404 6.54297 -18.7227 19.3672 -23.3721
-c-1.82715 -7.11719 0.326172 -12.874 3.15039 -18.5127h-36.4434zM278.585 -155.778h37.248l-0.114258 0.227539c-2.85449 5.6543 -5.11328 11.4609 -3.20605 18.6592c12.958 48.877 -3.94336 -14.877 0.0371094 0.139648c0 0 175.414 -62.8496 -0.135742 0.0478516
-c-12.7734 4.58008 -19.1836 12.2822 -19.2939 23.1475c-0.279297 29.0293 0.550781 -57.3525 0 0.0185547c-0.958008 3.71777 19.9131 -77.3545 -0.00488281 0.0185547l-21.9668 85.4219l-0.308594 -0.0488281l7.73633 -127.484
-c10.3779 -170.604 -17.4658 287.101 0.00878906 -0.147461zM324.629 0.982422l34.2549 -124.897l25.8506 22.6455l-32.9502 100.31l-27.1553 1.94238zM384.553 -101.22l-25.585 -22.4111l-34.1289 124.44l26.8301 -1.91992zM384.916 -101.319l-33.0146 100.508
-c-304.504 21.749 -0.105469 0.00683594 -0.105469 0.00683594l-27.1562 1.94336c-0.0732422 0.00585938 -0.147461 0.0107422 -0.220703 0.0166016l34.3125 -125.111c0.0224609 -0.0800781 0.0439453 -0.161133 0.0664062 -0.241211
-c0.0625 0.0546875 0.125977 0.110352 0.188477 0.165039zM384.734 0.324219l31.0186 -72.4766l20.6826 18.125l-29.7344 53.0674l-21.9668 1.28418zM436.236 -53.9932l-20.4229 -17.8984l-30.835 72.0439l21.6279 -1.26465zM436.572 -53.9502l-29.7344 53.0664
-c-99.583 177.689 -0.0419922 0.0742188 -0.0419922 0.0742188c-462.678 27.1572 -0.0859375 0.00488281 -0.0859375 0.00488281l-22.2197 1.30078c0.0332031 -0.078125 0.0664062 -0.15625 0.0996094 -0.233398l31.0195 -72.4766l0.0849609 -0.199219
-c0.0546875 0.0478516 0.108398 0.0947266 0.163086 0.142578l20.7773 18.209c-91.4121 163.236 -0.0625 0.111328 -0.0625 0.111328z" />
-    <glyph glyph-name="uniF156" unicode="&#xf156;" 
-d="M228.269 121.198c0 15.3379 7.66895 23.0068 23.0068 23.0068s23.0068 -7.66895 23.0068 -23.0068s-7.66895 -23.0068 -23.0068 -23.0068s-23.0068 7.66895 -23.0068 23.0068zM183.076 -11.0928c6.84239 10.6773 13.5803 21.3619 20.2137 32.0538
-c6.63344 10.6919 11.7665 18.9443 15.3992 24.7569s7.20055 11.6215 10.7035 17.4266c3.50296 5.80516 6.27533 9.95709 8.31709 12.4558c2.04178 2.49883 4.0096 4.92948 5.90347 7.29195s3.82692 3.85837 5.79913 4.4877
-c1.97223 0.629333 3.86143 1.12613 5.66762 1.49038c1.8062 0.364258 4.37263 0.595299 7.69933 0.693115c3.39798 -0.103043 6.33243 -0.610336 8.80334 -1.52189s4.33722 -1.75224 5.59888 -2.52208c1.26163 -0.769836 4.44089 -3.28005 9.53778 -7.53065
-s9.44208 -7.78757 13.0356 -10.6109c13.5669 -9.96252 21.3268 -16.7563 23.2797 -20.3814c1.95285 -3.62504 2.82056 -11.4846 2.60315 -23.5786c-0.0696106 -14.0141 -0.748322 -22.2121 -2.03613 -24.594c-1.2879 -2.3819 -7.31979 -6.09828 -18.0957 -11.1491v46.4248
-l-19.3086 17.2559v-65.3242l-46.0146 0.411133l-0.411133 51.7656c-18.6119 -28.7272 -29.9992 -44.8568 -34.1618 -48.3888s-11.6738 -3.83597 -22.5335 -0.912024v0zM241.004 -20.542h44.7822c0 -2.54559 0.380524 -4.87379 1.1416 -6.9846
-c0.761078 -2.11078 1.83585 -4.34893 3.2243 -6.71443c1.38849 -2.36548 4.29364 -7.39409 8.71545 -15.0858c4.42181 -7.69171 9.09976 -16.1739 14.0339 -25.4466c12.7654 -23.5071 19.5443 -37.5441 20.3369 -42.1107
-c0.792572 -4.56661 -2.28879 -13.6736 -9.24414 -27.3209l-62.0371 111.338c-5.64633 -10.9248 -12.8467 -24.9951 -21.601 -42.211c-17.243 -33.9104 -28.33 -53.6177 -33.261 -59.1221c-4.93108 -5.50439 -13.5684 -7.81468 -25.912 -6.93085
-c-1.32341 0.0947418 -2.33591 0.165817 -3.03751 0.213196l32.457 60.8037c3.07346 5.55629 6.13966 11.0644 9.19864 16.5243c3.05896 5.45993 5.44897 9.72191 7.17004 12.7859c1.72108 3.06402 3.43248 6.10305 5.13419 9.11707s2.9539 5.29882 3.75659 6.85439
-c0.804489 1.55557 1.58026 3.07962 2.3273 4.57214c0.748856 1.49247 1.26761 2.7245 1.55627 3.69608c0.288666 0.971527 0.533188 1.905 0.733566 2.80043s0.375305 1.96939 0.524765 3.22187v0z" />
-    <glyph glyph-name="uniF17E" unicode="&#xf17e;" 
-d="M0 256h512v-512h-512v512z" />
-    <glyph glyph-name="uniF136" unicode="&#xf136;" 
-d="M113.021 -70.4785v176.957h29.2119v-69.6484h57.457v69.6484h29.3311v-176.957h-29.3311v77.373h-57.457v-77.373h-29.2119zM258.837 -70.4785v176.957h43.8164l26.3145 -120.707l26.0723 120.707h43.9385v-176.957h-27.1602v139.296l-28.8486 -139.296h-28.2451
-l-28.6084 139.296v-139.296h-27.2793z" />
-    <glyph glyph-name="uniF105" unicode="&#xf105;" 
-d="M309.13 -229.868l-127.31 197.7s-102.061 0 -128.67 2.82031c-26.5 2.82031 -53.1504 23.9297 -53.1504 30.3594c0 6.98047 23.79 26.3408 50.2998 29.1602c26.6104 2.68066 133.021 4.16016 133.021 4.16016l125.819 195.54h41.9902l-42.6797 -99.9199v-96.6904
-l129.37 -8.59961l37.7793 64.8496h19.3105v-81.5195l17.1094 -4.81055v-6.3291l-17.1094 -5.5v-81.5205l-20.6602 1.33984l-36.4199 64.3301l-129.37 -10.0703l-0.660156 -90.9395l43.3398 -104.35h-41.9893z" />
-    <glyph glyph-name="uniF12C" unicode="&#xf12c;" 
-d="M445.92 -10.1846v0c0.378906 -0.37793 0.378906 -0.991211 0.00195312 -1.36914l-91.0166 -90.9336c-0.182617 -0.181641 -0.427734 -0.28418 -0.685547 -0.28418h-245.929c-0.536133 0 -0.96875 0.433594 -0.96875 0.96875v11.6191
-c0 0.535156 0.432617 0.967773 0.96875 0.967773h17.7891l-1.2334 2.45508c-0.0683594 0.135742 -0.103516 0.28418 -0.103516 0.435547v10.6533h-8.70801c-0.535156 0 -0.96875 0.432617 -0.96875 0.967773v32.8906c0 0.0791016 0.0107422 0.158203 0.0292969 0.234375
-c0 0 5.78711 13.4619 5.80664 13.5391l7.76758 29.0928c0.0966797 0.289062 0.324219 0.515625 0.613281 0.613281c0 0 6.00879 1.98145 6.1123 1.98145h92.9492c0.103516 0 0.207031 -0.015625 0.305664 -0.0498047l5.80859 -1.93164
-c0.289062 -0.0976562 0.516602 -0.324219 0.613281 -0.613281l7.76562 -29.0928c0.0185547 -0.0771484 0.0292969 -0.154297 0.0292969 -0.233398c0 -0.212891 6.77734 -9.68359 6.77734 -9.68359l0.865234 -3.42383
-c0.0664062 -0.133789 0.103516 -0.28125 0.103516 -0.432617v-32.8906c0 -0.535156 -0.433594 -0.967773 -0.96875 -0.967773h-10.6455v-10.6533c0 -0.151367 -0.0371094 -0.299805 -0.104492 -0.433594l-1.23242 -2.45703h41.9199
-c-0.147461 1.91504 -1.8584 24.1016 -1.8584 24.1016l-0.00390625 0.0742188c0 0.0703125 0.00878906 0.140625 0.0253906 0.208984l3.88086 17.4385s3.79297 15.1338 3.84863 15.3613v19.0605c-0.114258 0.31543 -7.69434 21.1221 -7.69434 21.1221
-c-0.0371094 0.107422 -0.0585938 0.217773 -0.0585938 0.331055l0.00390625 0.0810547l1.93945 23.2139c0.00683594 0.0849609 0.0244141 0.168945 0.0546875 0.25c0 0 7.44824 20.4619 7.64355 21.0039c-0.140625 0.563477 -7.67188 30.666 -7.67188 30.666
-c-0.0195312 0.0761719 -0.0302734 0.155273 -0.0302734 0.234375c0 0.0205078 1.88379 28.2422 1.9209 28.8008c-0.268555 0.483398 -9.54492 17.1611 -9.54492 17.1611c-0.0810547 0.144531 -0.12207 0.306641 -0.12207 0.470703
-c0 0.0449219 0.00390625 0.0908203 0.0107422 0.136719l3.86914 27.085c0.0507812 0.362305 0.302734 0.665039 0.651367 0.78125s0.733398 0.0244141 0.992188 -0.234375zM142.777 -89.2178v0h78.1914l-1.23047 2.45703
-c-0.0664062 0.133789 -0.101562 0.28418 -0.101562 0.433594v10.6533h-75.5273v-10.6533c0 -0.149414 -0.0361328 -0.299805 -0.102539 -0.433594zM130.717 -27.3096v0h102.313c-0.304688 1.96582 -3.35449 21.75 -3.58008 23.2148h-95.1621
-c-0.225586 -1.46484 -3.27051 -21.249 -3.57129 -23.2148zM247.521 67.5059v0c-0.272461 0.0556641 -0.508789 0.222656 -0.648438 0.463867c-0.0859375 0.150391 -0.129883 0.317383 -0.129883 0.486328c0 0.103516 0.015625 0.206055 0.0488281 0.305664
-c0 0 1.79199 5.37402 1.88672 5.65723v2.74316l-0.96875 2.90137l0.96875 1.93359v1.93457c0 0.443359 0.303711 0.830078 0.733398 0.9375l1.57129 0.392578l0.604492 0.602539h1.80566l11.5107 2.87598c0.290039 0.0712891 0.59668 0.00683594 0.831055 -0.176758
-c0.236328 -0.182617 0.374023 -0.463867 0.374023 -0.761719v-0.967773l0.970703 -0.969727l-0.970703 -0.966797v-12.5752c0 -0.302734 -0.144531 -0.588867 -0.387695 -0.772461l-7.74414 -5.80469c-0.222656 -0.165039 -0.50293 -0.230469 -0.772461 -0.175781
-l-4.74414 0.948242h-0.873047l-0.21875 0.21875zM261.949 42.6191v0c-0.259766 -0.260742 -0.642578 -0.348633 -0.989258 -0.230469l-5.80859 1.93555c-0.396484 0.131836 -0.662109 0.501953 -0.662109 0.916992v7.73926c0 0.415039 0.265625 0.78418 0.662109 0.916992
-l1.84277 0.612305l0.40332 0.402344h0.805664l2.75684 0.916992c0.0986328 0.0322266 0.202148 0.0498047 0.306641 0.0498047h3.875c0.416016 0 0.786133 -0.265625 0.917969 -0.662109l1.93945 -5.80078c0.114258 -0.348633 0.0244141 -0.732422 -0.234375 -0.991211z
-M256.425 45.9365v0c0.181641 -0.0595703 0.448242 -0.149414 0.745117 -0.25l-0.745117 1.48926v-1.23926zM262.517 17.4688v0l-1.93555 1.9375c-0.188477 0.19043 -0.28418 0.436523 -0.28418 0.68457v1.93262c0 0.366211 0.208008 0.702148 0.536133 0.866211
-l3.875 1.93555c0.374023 0.18457 0.825195 0.113281 1.11914 -0.180664l1.93945 -1.93652c0.179688 -0.181641 0.28418 -0.427734 0.28418 -0.68457v-1.93262c0 -0.256836 -0.102539 -0.50293 -0.28418 -0.68457l-0.685547 -0.68457v-0.568359h-0.568359l-0.685547 -0.68457
-c-0.183594 -0.181641 -0.427734 -0.283203 -0.685547 -0.283203h-1.93945c-0.256836 0 -0.501953 0.101562 -0.685547 0.283203zM252.021 34.4971v0l3.86816 -1.93848c0.329102 -0.163086 0.535156 -0.498047 0.535156 -0.864258v-1.93555
-c0 -0.254883 -0.0996094 -0.501953 -0.283203 -0.682617l-1.93066 -1.93262c-0.181641 -0.183594 -0.428711 -0.285156 -0.685547 -0.285156h-3.87695c-0.536133 0 -0.969727 0.432617 -0.969727 0.967773v3.86816c0 0.256836 0.102539 0.503906 0.28418 0.68457
-l1.93945 1.93652c0.293945 0.295898 0.745117 0.368164 1.11914 0.181641zM261.265 104.245v0c-0.536133 0 -0.96875 0.43457 -0.967773 0.96875v3.87012c0 0.256836 0.102539 0.500977 0.28418 0.68457l1.9375 1.93262c0.376953 0.375977 0.990234 0.375977 1.36914 0
-l2.05176 -2.04883l1.14062 -0.568359v-0.570312l0.68457 -0.683594c0.179688 -0.180664 0.28418 -0.426758 0.28418 -0.68457c0 -0.256836 -0.102539 -0.50293 -0.28418 -0.68457l-1.94141 -1.93262c-0.180664 -0.180664 -0.425781 -0.283203 -0.683594 -0.283203h-3.875z
-" />
-    <glyph glyph-name="uniF153" unicode="&#xf153;" 
-d="M203.881 70v0l33.667 -26.9219l-45.4844 -56.2432l25.3086 -9.68848c0.832031 -0.3125 1.62891 -0.759766 2.35938 -1.34375c3.71875 -2.97266 4.31055 -8.38184 1.31836 -12.0811c-1.18359 -1.46387 -2.75195 -2.43945 -4.44629 -2.90039l-96.6035 -28.8213
-l7.58203 100.011c0.0888672 1.74414 0.710938 3.47656 1.89551 4.94141c2.99121 3.69727 8.42969 4.28418 12.1484 1.31055c0.730469 -0.583984 1.34082 -1.2627 1.82617 -2.00293l14.9453 -22.5029zM307.708 70l45.4824 -56.2432l14.9463 22.5029
-c0.485352 0.740234 1.09375 1.41895 1.82617 2.00293c3.71875 2.97363 9.15625 2.38672 12.1484 -1.31055c1.18457 -1.46484 1.80664 -3.19727 1.89453 -4.94141l7.58301 -100.011l-96.6035 28.8213c-1.69336 0.460938 -3.2627 1.43652 -4.44727 2.90039
-c-2.99121 3.69922 -2.40039 9.1084 1.31934 12.0811c0.729492 0.583984 1.52637 1.03125 2.35938 1.34375l25.3086 9.68848l-45.4844 56.2432l33.667 26.9219v0z" />
-    <glyph glyph-name="uniF127" unicode="&#xf127;" 
-d="M115.161 -55.7764v111.041h65.4062v-17.5674h-47.8555v-27.1816h32.2891v-17.8994h-32.2891v-30.4951h51.333v-17.8975h-68.8838v0zM270.974 -55.7764l-42.3877 75.2432v-75.2432h-17.5527v111.041h17.5527l40.4014 -70.9346v70.9346h17.5518v-111.041h-15.5654v0z
-M377.279 -49.4785c-4.13965 -3.97852 -10.1006 -5.96777 -15.8975 -6.29785h-6.29199h-33.7793v111.041h35.7676c11.2588 0 15.5654 -1.15918 21.5264 -5.7998c11.5908 -10.1104 18.2139 -27.6777 18.2139 -49.5566c0 -22.208 -6.9541 -39.7754 -19.5391 -49.3867v0z
-M369.994 33.0566c-2.81543 2.65234 -6.62402 4.64062 -11.2598 4.64062h-19.8701v-75.5762h17.5518c5.79492 0 9.27246 1.16211 12.4189 4.31055c6.62305 6.62695 10.1006 18.7285 10.1006 33.4766c0 14.918 -3.47754 27.3477 -8.94141 33.1484v0z" />
-    <glyph glyph-name="uniF121" unicode="&#xf121;" 
-d="M6 -216.506l125 216.506l375 -216.506h-500z" />
-    <glyph glyph-name="uniF103" unicode="&#xf103;" 
-d="M401.02 -47.9053l-26.5225 -26.5518l-52.7783 52.7314c-7.50391 7.51074 -13.2178 16.792 -16.291 26.9658c-1.81641 6.03125 -2.72656 12.3223 -2.72656 18.6133v17.8701l-21.7822 -6.60742c-0.544922 -0.160156 -1.07812 -0.191406 -1.62402 -0.24707
-c-1.63574 -0.179688 -3.16016 0.30957 -4.53516 1.20703c-1.58691 1.05273 -2.70215 2.71191 -3.05566 4.58203c-0.383789 2.11816 0.0244141 4 1.27637 5.70312l48.4473 66.2725l48.3662 -66.2725c0.916992 -1.26367 1.4248 -2.68164 1.41309 -4.24121
-c-0.0380859 -3.64746 -2.37402 -6.40918 -5.93066 -7.1709c-1.06641 -0.228516 -2.36133 -0.154297 -3.42676 0.167969l-21.6641 6.60645v-17.6846c0 -4.06152 0.848633 -8.12402 2.65234 -11.7773c1.13965 -2.28418 2.51562 -4.55664 4.33105 -6.37109l53.8506 -53.7959v0z
-M203.793 41.5186v-160.521h-37.4541v160.521l-21.7695 -6.61328c-0.526367 -0.161133 -1.06543 -0.241211 -1.61719 -0.253906c-1.56152 -0.0371094 -3.12305 0.253906 -4.44336 1.13379c-1.60449 1.08301 -2.78223 2.79883 -3.16602 4.72363
-c-0.390625 2 0.105469 4.00684 1.30762 5.6416l48.4336 66.291l48.3418 -66.291c0.694336 -0.96582 1.1709 -1.96289 1.3877 -3.12695c0.347656 -1.8457 -0.104492 -3.65332 -1.1582 -5.20117c-1.02832 -1.53613 -2.61523 -2.6875 -4.44336 -3.01562
-c-1.19629 -0.210938 -2.55273 -0.260742 -3.74316 0.0986328l-21.6758 6.61328v0zM344.231 -105.411l-9.81543 -9.82031l-47.2383 47.1641c-2.38574 2.39648 -4.78418 4.79297 -7.18262 7.19531c-0.241211 0.241211 -0.470703 0.482422 -0.700195 0.730469
-c-4.17578 4.49512 -7.9375 9.39355 -11.3525 14.4707c-2.93066 4.37207 -5.42188 8.9043 -7.8877 13.5361v-135.209h-13.6455v190.614h13.5215c0.216797 -4.24707 0.507812 -8.48242 0.873047 -12.7178c0.192383 -2.10547 0.446289 -4.20508 0.774414 -6.29102
-c2.09473 -13.1084 7.02734 -25.8457 13.8193 -37.2324c2.75781 -4.60742 5.94238 -8.99707 9.63574 -12.9043c3.84863 -4.08691 7.75879 -8.11133 11.7246 -12.0811l47.4736 -47.4551v0zM246.407 166.921h13.6455v-27.208h-13.6455v27.208v0zM246.407 119.242h13.6455
-v-27.2139h-13.6455v27.2139v0zM246.407 71.6074h13.6455v-27.2139h-13.6455v27.2139v0z" />
-    <glyph glyph-name="uniF123" unicode="&#xf123;" 
-d="M287.09 -148.44v96.5996c0 9.25098 4.04102 18.5068 8.90625 25.0771l31.1279 42.9082c5.04883 6.57129 8.41504 15.3125 8.41504 24.4023v109.221h-53.0059v-96.7656c-0.492188 -9.25 -2.85059 -17.6699 -7.22363 -24.2354l-19.3535 -28.0947l-19.3535 28.0947
-c-4.36719 6.56543 -6.72559 14.9854 -7.24023 24.2354v96.7656h-53.0107v-109.221c0 -9.08984 3.36523 -17.8311 8.41406 -24.4023l31.1338 -42.9082c4.88184 -6.57031 8.92871 -15.8262 8.92871 -25.0771v-96.5996h62.2617z" />
-    <glyph glyph-name="uniF199" unicode="&#xf199;" 
-d="M178.366 -141.611v107.282c2.21777 34.1172 14.7275 64.5391 37.2646 88.6377l31.9131 35.7549c-8.69727 5.69531 -19.2246 10.2109 -28.2373 15.6611c-3.57227 2.43066 -4.85059 6.49316 -4.25684 10.165c0.589844 3.48242 3.03906 6.17676 6.58789 7.0166
-l111.996 18.7666l-10.957 -117.243c-0.873047 -3.2373 -4.12891 -6.00781 -7.54492 -6.27148c-4.52148 -0.297852 -8.56543 2.59961 -10.8584 6.42188c-5.1582 8.22559 -10.8301 18.0449 -16.082 26.3828c-17.1855 -17.9219 -36.8818 -34.6504 -46.1689 -57.5029
-c-7.4082 -16.9219 -11.5088 -35.2637 -11.749 -55.71l-0.0566406 -79.4229l-51.8506 0.0615234z" />
-    <glyph glyph-name="uniF16E" unicode="&#xf16e;" 
-d="M273.152 25.9268l-33.7314 -114.335c-8.83594 -29.2305 13.4902 -36.4736 22.4805 -15.1543l31.8711 92.6143c2.21973 7.27441 8.62109 6.86328 9.86426 1.01758l20.6826 -91.4434c3.45215 -21.042 29.7549 -25.9736 26.9082 4.5l-35.21 165.152
-c-1.09961 4.4082 0.625977 5.3125 4.61328 2.05469l29.7959 -33.7305c16.0693 -13.8916 22.7578 2.17773 14.0244 14.0137l-51.8242 58.873c-4.5625 6.1748 -10.6348 8.81543 -18.207 7.93262l-36.0225 -4.77832c-6.91406 -0.420898 -12.8018 -5.73242 -15.4834 -9.94531
-l-13.4805 -34.2041l-20.5586 -20.415c-12.6582 -7.95312 -0.411133 -25.543 11.3223 -12.8125l22.2852 19.9121l11.7441 18.0723c1.56152 4.51074 3.63672 5.4873 6.22656 2.93848l12.6992 -50.2627zM267.696 161.992c11.3223 0 20.4766 -9.1748 20.4766 -20.4873
-s-9.16406 -20.4766 -20.4766 -20.4766s-20.4873 9.16406 -20.4873 20.4766s9.1748 20.4873 20.4873 20.4873zM172.544 76.8164c9.09277 0 16.46 -7.37695 16.46 -16.46c0 -9.11328 -7.36719 -16.4795 -16.46 -16.4795s-16.4697 7.37695 -16.4697 16.4795
-c0 9.08301 7.37695 16.46 16.4697 16.46zM177.291 38.8008h-12.8438c-3.9043 -0.452148 -7.06836 -2.15723 -9.4834 -6.14355c-5.21875 -6.52441 -10.418 -13.0488 -15.6377 -19.5732c-5.5791 -4.8291 -11.1582 -9.67871 -16.7471 -14.5176
-c-6.97656 -7.02832 -0.811523 -14.8262 9.49316 -8.38477c4.6543 4.08984 9.29883 8.19922 13.9531 12.2891c3.78125 4.08887 8.83594 6.18457 5.5791 -3.33984c-4.8291 -13.4287 -9.66797 -26.8262 -14.5176 -40.2549l16.1924 -0.822266l-13.4189 -56.1914
-c-1.47949 -12.9668 8.12793 -14.2715 12.6172 -2.78418l13.0898 58.9756l7.25391 -0.288086c3.9043 -18.8125 7.80859 -37.625 11.7236 -56.4482c1.31445 -19.0176 17.3223 -16.7158 12.2773 2.24023c-2.78418 17.8779 -5.5791 36.2998 -8.37305 54.1875
-c5.02344 0.554688 10.0479 0.575195 15.0723 1.13086c-3.71973 18.4521 -7.43848 36.8955 -11.1582 55.3486c8.00391 -4.66504 15.998 -9.31934 24.001 -13.9844c-1.48926 -1.66406 -2.98926 -3.34863 -4.46875 -5.02344c3.71875 -3.1748 7.43848 -6.31934 11.168 -9.50391
-c6.14453 7.64355 12.2783 15.2783 18.4229 22.9121c-3.73047 3.1748 -7.44922 6.33887 -11.1689 9.50391c-2.22949 -2.61035 -4.46973 -5.21973 -6.69922 -7.81934l-46.3271 28.4912z" />
-    <glyph glyph-name="uniF1A3" unicode="&#xf1a3;" 
-d="M133.879 76.5234l37.2158 37.3408l84.7041 -84.793l85.1123 85.0479l37.21 -37.3408l-96.0059 -95.7158v-95.1816h-52.3672l0.0234375 95.3301z" />
-    <glyph glyph-name="uniF16B" unicode="&#xf16b;" 
-d="M386.691 143.241c16.7373 0 28.4668 -12.7891 28.4668 -20.2148c0 -3.06152 -1.35742 -5.03711 -3.74805 -6.30371c0.100586 -0.918945 0.160156 -1.85254 0.160156 -2.79883c0 -13.7881 -11.1387 -24.9639 -24.8789 -24.9639
-c-13.7422 0 -24.8799 11.1758 -24.8799 24.9639c0 2.59668 0.396484 5.09961 1.12695 7.45215h-12.333c-11.5156 0 7.71484 21.8652 36.0859 21.8652v0zM300.197 -127.526l1.23145 3.95898l-2.0459 5.95605l13.5693 19.0303h20.5566l11.1133 -12.4912l23.4248 -7.77832
-l-1.55566 -8.38379c4.16309 -0.768555 7.31348 -4.42578 7.31348 -8.82617c0 -4.95703 -4.00781 -8.97852 -8.94824 -8.97852c-4.94434 0 -8.95117 4.02148 -8.95117 8.97852v0h-2.72461v0c0 -4.95703 -4.00488 -8.97852 -8.94922 -8.97852
-c-4.94141 0 -8.94922 4.02148 -8.94922 8.97852h-2.72363c0 -4.95703 -4.00684 -8.97852 -8.94922 -8.97852c-4.94531 0 -8.94824 4.02148 -8.94824 8.97852h-2.72656c0 -4.95703 -4.00391 -8.97852 -8.94922 -8.97852c-4.93945 0 -8.94922 4.02148 -8.94922 8.97852
-c0 3.98145 2.58496 7.35547 6.16113 8.53418v0zM79.1992 -99.9424c0.00683594 1.7959 0.547852 3.60547 1.66699 5.17773c2.30664 3.24121 6.35938 4.47461 9.95117 3.34863l3.30371 2.50781l1.78125 6.04297l22.0645 7.57324l16.7324 -11.9902l1.80469 -16.6455
-l14.5586 -19.9893l-6.12305 -5.91699c2.93652 -3.05469 3.38672 -7.86328 0.839844 -11.4443c-2.87402 -4.03711 -8.46191 -4.9707 -12.4834 -2.08691c-4.02246 2.88281 -4.95605 8.48926 -2.08203 12.5254l-2.2168 1.58984
-c-2.87305 -4.03711 -8.46191 -4.97266 -12.4844 -2.08887c-4.02246 2.88086 -4.95605 8.4873 -2.08301 12.5225v0l-2.2168 1.58984c-2.87207 -4.03613 -8.45898 -4.97168 -12.4844 -2.08984c-4.02148 2.88574 -4.95215 8.49219 -2.0791 12.5273l-2.2168 1.58984
-c-2.87305 -4.03418 -8.46191 -4.9707 -12.4844 -2.08789c-2.45508 1.75879 -3.75977 4.53418 -3.74902 7.3457v-0.000976562zM227.047 15.5674c-5.34473 18.5645 69.2002 71.4355 76.1895 75.5605l-75.9297 -1.89453l-7.8125 12.2773s89.2217 11.751 99.46 12.0166
-c23.6162 0.610352 36.3311 -9.0127 45.2988 -19.5918c15.1924 -17.9082 13.1318 -41.8486 13.543 -53.8135l53.373 -10.1885l-6.50977 -13.0615l-63.0967 2.56836l-4.07422 31.915l-66.6514 -42.0576l51.5488 -33.6973l-8.25293 -68.957h-21.6709l-5.48535 58.7676
-l-53.1133 21.4199l-114.368 -71.1299l-17.3701 12.4482l104.922 87.418v0z" />
-    <glyph glyph-name="uniF17D" unicode="&#xf17d;" 
-d="M266.336 -17.9033v-56.4609l30.3662 -30.3652l-14.6182 -14.6182l-15.748 15.748v0v-16.8408h-20.6719v16.8408l-15.748 -15.748l-14.6182 14.6182l30.3662 30.3652v56.4609v0l-48.8975 -28.2305l-11.1143 -41.4795l-19.9678 5.35059l5.76367 21.5117l-14.584 -8.4209
-l-10.3369 17.9033l14.585 8.41992l-21.5117 5.76465l5.34961 19.9678l41.4805 -11.1143v0l48.8965 28.2305l-39.5557 22.8379l-41.4805 -11.1143l-5.35059 19.9678l21.5127 5.76367l-23.9258 13.8135l10.3369 17.9033l23.9248 -13.8135v0l-5.76367 21.5117l19.9678 5.35059
-l11.1143 -41.4805l39.5566 -22.8369v45.6748v0l-30.3662 30.3662l14.6182 14.6172l15.748 -15.748v27.627h20.6719v-27.627v0l15.748 15.748l14.6182 -14.6172l-30.3662 -30.3662v-45.6748l39.5566 22.8369l11.1143 41.4805l19.9678 -5.35059l-5.76367 -21.5117
-l23.9248 13.8135l10.3369 -17.9033l-23.9258 -13.8135l21.5127 -5.76367l-5.35059 -19.9678l-41.4805 11.1143l-39.5557 -22.8379l48.8965 -28.2305l41.4805 11.1143l5.34961 -19.9678l-21.5117 -5.76465v0l14.585 -8.41992l-10.3369 -17.9033l-14.584 8.4209
-l5.76367 -21.5117l-19.9678 -5.35059l-11.1143 41.4795v0l-48.8975 28.2305v0z" />
-    <glyph glyph-name="uniF187" unicode="&#xf187;" 
-d="M261.684 122.417c1.60742 -0.124023 4.94336 -1.73242 4.94336 -3.70801v-5.43945l16.5635 -2.09961v-21.2588l53.8838 -3.83203l-8.15527 -33.8613c-1.36035 -3.70703 -3.34082 -5.93066 -8.77539 -6.6748l-33.9902 -3.58398l-2.96289 -1.36035v-13.3467
-l53.8838 -3.83203l-7.16797 -33.4932c-0.744141 -3.33594 -3.70801 -6.6709 -7.16699 -7.16699l-37.5732 -4.08008l-1.97559 -1.60352v-12.2402l54.5039 -4.57129l-6.7998 -32.0098c-1.48438 -4.69531 -3.33594 -6.30273 -6.55176 -7.04297l-41.1523 -5.06738v-21.2588
-h-13.3516v-17.3027h-27.6816v17.3027h-13.3477v21.2588l-41.1562 5.06738c-3.21191 0.740234 -5.06836 2.34766 -6.55176 7.04297l-6.7959 32.0098l54.5039 4.57129v12.2402l-1.97949 1.60352l-37.5693 4.08008c-3.46387 0.496094 -6.42773 3.83105 -7.17188 7.16699
-l-7.16699 33.4932l53.8877 3.83203v13.3467l-2.96777 1.36035l-33.9854 3.58398c-5.43945 0.744141 -7.41504 2.96777 -8.77539 6.6748l-8.15918 33.8613l53.8877 3.83203v21.2588l16.5586 2.09961v5.43945c0 1.97559 3.34082 3.58398 4.94434 3.70801h11.3711v0z
-M255.628 -84.4756c13.4707 0 24.4697 10.999 24.4697 24.3506c0 13.4707 -10.999 24.4697 -24.4697 24.4697c-13.3467 0 -24.3457 -10.999 -24.3457 -24.4697c0 -13.3516 10.999 -24.3506 24.3457 -24.3506v0zM255.628 -20.209c13.4707 0 24.4697 10.999 24.4697 24.3506
-c0 13.4717 -10.999 24.4707 -24.4697 24.4707c-13.3467 0 -24.3457 -10.999 -24.3457 -24.4707c0 -13.3516 10.999 -24.3506 24.3457 -24.3506v0zM255.628 43.9346c13.4707 0 24.4697 11.0039 24.4697 24.3506c0 13.4707 -10.999 24.4697 -24.4697 24.4697
-c-13.3467 0 -24.3457 -10.999 -24.3457 -24.4697c0 -13.3467 10.999 -24.3506 24.3457 -24.3506v0z" />
-    <glyph glyph-name="uniF10C" unicode="&#xf10c;" 
-d="M348.397 29.7998c-6.44434 -3.37695 -12.8887 -6.74805 -19.2734 -10.2568c-7.36133 -4.03027 -18.542 -8.35742 -22.6377 -16.0742c-12.6514 -23.8311 39.8467 -17.5449 49.7803 -18.2051c10.665 -0.706055 24.2725 -4.00391 23.3818 -17.3672
-c-1.28613 -10.2764 -8.55469 -19.7354 -13.3955 -28.6396c-2.6582 1.53711 -5.31055 3.06738 -7.96191 4.60449c0.837891 0.111328 2.79004 3.79883 3.21875 4.43164c2.47363 3.5293 4.8418 7.13672 6.91895 10.9102c2.03223 3.67383 4.66406 8.62109 2.88281 12.8691
-c-2.53906 4.33984 -9.37988 4.84082 -13.8252 5.2959c-12.4004 0.976562 -24.873 -0.428711 -37.2939 0.382812c-4.68945 0.30957 -9.41895 1.37891 -13.4756 3.85254c-7.36719 4.49805 -11.167 13.165 -8.78516 21.5293c3.48926 12.3008 17.5977 17.9336 27.7617 23.5146
-c-13.2314 1.74707 -25.3545 9.54395 -32.2539 21.4102l-12.1631 -5.71191c-0.145508 -1.66211 -1.1084 -3.15332 -2.39453 -4.46582l5.17773 -10.1904l2.90918 0.785156l1.00293 -2.86328l-9.06934 -2.90918l-0.837891 3.14062l2.24219 0.592773l-5.66602 10.0654
-c-4.31348 -0.441406 -7.43359 2.52051 -7.13672 6.36523l-54.3643 36.001l-0.514648 -5.56055c12.2627 -5.25684 21.6152 -15.9219 25.0391 -28.7051c6.16016 -22.9678 -7.4541 -46.7266 -30.3223 -53.0654c-9.51074 -5.19043 -19.2734 -9.89355 -28.626 -15.3545
-c-6.0293 -3.5293 -13.9902 -8.00098 -13.7461 -16.042c0.362305 -12.1699 15.6787 -12.2754 24.3721 -12.3867c12.3809 -0.0664062 25.4863 1.60938 37.584 -1.66309c23.9561 -6.49707 6.4502 -31.2051 -0.686523 -44.3447
-c-2.65137 1.53027 -5.32227 3.06738 -7.97461 4.59766c0.772461 0.0527344 2.84961 3.86523 3.23242 4.43262c2.45996 3.51562 4.83496 7.13672 6.91895 10.8965c2.02539 3.6875 4.65039 8.63379 2.88965 12.8887c-2.52637 4.33984 -9.39355 4.8418 -13.8389 5.27637
-c-12.3936 0.996094 -24.8672 -0.408203 -37.2939 0.402344c-4.68945 0.310547 -9.41895 1.36621 -13.4756 3.85254c-7.36719 4.49805 -11.1465 13.1523 -8.78516 21.5293c3.71973 13.1387 19.7607 19.207 30.5918 24.9521
-c-16.2197 2.77051 -30.1963 14.6699 -34.7148 31.5625c-6.18652 23.0986 7.59863 46.9824 30.6982 53.1631c6.7207 1.80762 14.043 2.01172 20.6914 0.455078l3.13965 36.417l-5.56738 5.47461l5.41602 10.3486l16.3574 4.37988l1.49707 -4.65039l-14.3525 -3.83887
-l-2.07129 -3.91797l4.98047 -5.15137l-0.217773 -16.1338l58.75 15.7451l0.152344 2.97461c-4.88184 -0.639648 -13.7988 0.0791016 -16.1934 1.25293c-2.4082 1.16797 -1.12109 3.17969 1.08105 3.83887c11.4512 3.6084 28.4229 9.18164 31.6943 10.085
-c3.27148 0.890625 4.04297 -0.666016 2.5 -3.66016c-1.56348 -2.97461 -2.88965 -5.63965 -10.8506 -9.15527l-0.620117 -6.64941l18.5146 -13.502c5.48828 5.73242 12.8555 9.93359 20.5596 11.9922c23.0996 6.18652 46.9834 -7.59863 53.1709 -30.6982
-c5.63965 -21.0342 -5.2832 -42.709 -24.7217 -51.1055v0zM301.051 51.626c7.67773 -13.2842 24.1152 -19.9727 39.2266 -15.9229c18.7061 5.00684 29.873 24.3594 24.8672 43.0654c-5.01367 18.6934 -24.3525 29.8604 -43.0586 24.8467
-c-5.97656 -1.5957 -12.5059 -4.85449 -16.7471 -9.15527l24.9785 -19.5303c2.26953 0.567383 4.76855 -0.916992 5.42871 -3.35059c0.65332 -2.47363 -0.811523 -5.02637 -3.28516 -5.69238c-0.685547 -0.18457 -1.44434 -0.198242 -2.12988 -0.0791016l-29.2803 -14.1816v0
-zM200.1 35.3535v0c0.699219 -2.5918 -0.59375 -5.0918 -3.06738 -5.74512c-2.47363 -0.672852 -5.01953 0.811523 -5.67871 3.27148c-0.646484 2.38184 0.706055 4.89453 3.16602 5.66602c8.04004 10.9893 9.83398 17.2881 10.3359 28.7061
-c-5.69238 1.58301 -12.2686 1.67578 -18.2314 0.0722656c-18.7061 -5.00586 -29.873 -24.3584 -24.8604 -43.0518c5.01953 -18.7061 24.3594 -29.873 43.0654 -24.8604c18.7061 5.00684 29.8594 24.3457 24.8535 43.0518c-2.52637 9.41895 -8.95703 17.5059 -17.624 21.9648
-c-1.22754 -13.1123 -5.75879 -20.7178 -11.959 -29.0752zM213.898 87.7324v0c0.283203 -0.165039 51.6465 -34.0088 51.6465 -34.0088l-1.89258 5.27051l-2.0127 -0.541016l-1.00195 2.84277l7.84277 2.11719l1.06836 -3.08008l-1.80078 -0.488281l1.99805 -4.75586
-l2.92285 51.4688l-58.6055 -15.7842zM290.471 54.6797c-0.322266 1.00293 -0.910156 2.59863 -1.21973 3.74707c-3.12012 11.6348 -2.3877 23.9502 5.30273 36.0732l-14.0488 9.88086l-3.00098 -54.6279l12.9668 4.92676v0zM297.918 58.5186l27.4521 12.3809
-l-24.3984 18.6533c-7.18945 -10.6924 -5.71875 -20.8232 -3.05371 -31.0342v0z" />
-    <glyph glyph-name="uniF12A" unicode="&#xf12a;" 
-d="M292.315 -138.426c0 -20.0615 -16.2529 -36.2979 -36.3154 -36.2979c-20.0537 0 -36.3154 16.2354 -36.3154 36.2979c0 20.0459 16.2617 36.2979 36.3154 36.2979c20.0625 0 36.3154 -16.252 36.3154 -36.2979v0zM274.073 -67.4277
-c-0.869141 -9.97949 -9.69238 -17.3584 -19.6885 -16.4756c-8.73926 0.78418 -15.6836 7.71973 -16.4648 16.4756l-18.0732 202.606c-1.79395 19.9678 12.9629 37.6064 32.9404 39.4004c19.9678 1.77637 37.5898 -12.9727 39.375 -32.9404
-c0.188477 -2.16016 0.188477 -4.30273 0 -6.46094l-18.0889 -202.605v0z" />
-    <glyph glyph-name="uniF118" unicode="&#xf118;" 
-d="M251 -230v460h10v-460h-10z" />
-    <glyph glyph-name="uniF147" unicode="&#xf147;" 
-d="M279.008 62.8545l-52.2881 0.0585938l0.0927734 42.79l-46.3984 -9.68848c-1.50781 -0.307617 -2.10254 -0.492188 -2.60156 -0.492188c-3.10645 0.00585938 -5.9502 2.98633 -5.9502 6.08887c0 1.23633 -0.0927734 2.16113 1.37598 3.46191l79.5723 70.7236
-l79.3652 -70.8574c1.26172 -1.12695 1.36621 -2.24219 1.36621 -3.47852c-0.0117188 -3.22461 -2.87109 -6.06055 -6.10449 -6.05469c-0.480469 0 -0.572266 0.110352 -1.73047 0.370117l-46.5947 10.5615l-0.104492 -43.4834zM279.008 -62.666l-52.2881 -0.0566406
-l0.0927734 -42.79l-46.3984 9.68457c-1.50781 0.310547 -2.10254 0.49707 -2.60156 0.49707c-3.10645 -0.0117188 -5.9502 -2.99414 -5.9502 -6.09082c0 -1.23633 -0.0927734 -2.16113 1.37598 -3.4668l79.5723 -70.7178l79.3652 70.8564
-c1.26172 1.11914 1.36621 2.23535 1.36621 3.47168c-0.0117188 3.23047 -2.87109 6.06641 -6.10449 6.06055c-0.480469 0 -0.572266 -0.115234 -1.73047 -0.369141l-46.5947 -10.5625l-0.104492 43.4834zM155.868 -52.6699c-16.8965 0 -28.6494 12.1094 -29.3838 29.3496
-h14.6914c0.735352 -8.44141 6.61035 -14.6758 14.6924 -14.6758c8.44727 0 14.6924 6.60449 14.6924 15.4043c0 11.0068 -6.24609 20.1758 -13.5898 20.1758h-7.34863v14.3047h6.24609c3.67285 0 5.14062 1.10352 7.71191 4.0332
-c2.93945 3.30469 4.40918 7.33691 4.40918 11.7402c0 8.07129 -4.77637 13.208 -12.1211 13.208c-6.61328 0 -10.6533 -4.03809 -11.3887 -11.0068l-14.6895 1.83203c1.4668 13.9414 12.1201 23.8447 26.0781 23.8447c15.0605 0 26.4443 -11.7344 26.4443 -26.7744
-c0 -8.80566 -2.57129 -15.7734 -9.54785 -23.8447c8.0791 -7.33691 12.1211 -16.8711 12.1211 -27.5127c0 -17.2412 -12.1211 -30.0781 -29.0176 -30.0781zM203.611 -51.9297c-4.4082 0 -8.4502 4.03125 -8.4502 8.43457c0 4.40137 4.04004 8.43457 8.4502 8.43457
-s8.44824 -4.0332 8.44824 -8.43457c0 -4.40332 -4.03809 -8.43457 -8.44824 -8.43457zM266.419 -20.0215v0c0 11.3701 -5.87793 18.707 -14.6895 18.709c-8.81738 0 -14.6953 -7.33691 -14.6953 -18.709c0 -10.6348 5.87793 -17.9736 14.6953 -17.9736
-c8.81152 0 14.6895 7.33789 14.6895 17.9736zM280.744 -20.0215v0c0 -9.90918 -3.67383 -19.8115 -9.91504 -25.6797c-4.77246 -4.76172 -11.0264 -6.96875 -19.0977 -6.96875c-10.2871 0 -17.6348 3.67578 -22.7832 11.0049
-c-4.0332 5.87012 -6.60156 13.5723 -6.60156 21.6436c0 10.2666 3.30371 19.4355 9.91699 26.04c-5.50781 5.87109 -8.44727 13.208 -8.44727 21.6436c0 16.1436 11.3848 27.8779 27.915 27.8779c16.1582 0 27.543 -11.7354 27.543 -27.8779
-c0 -8.43555 -2.93945 -16.1367 -8.44531 -21.6436c6.61133 -6.2334 9.91504 -15.7715 9.91504 -26.04zM264.586 27.6621v0c0 7.70117 -5.51953 13.207 -12.8564 13.208c-7.72363 0 -13.2256 -5.50684 -13.2256 -13.208c0 -8.43555 5.50195 -13.9355 13.2256 -13.9355
-c7.33691 0 12.8564 5.5 12.8564 13.9355zM386.107 -52.5322v52.6045c0 17.4717 -10.6621 24.9248 -21.3301 25.5605c-7.03711 0.427734 -15.1416 -0.208008 -20.6895 -9.15723c-4.26367 6.39062 -9.38379 9.15723 -15.9912 9.15723c-3.41406 0 -8.53418 0 -15.5752 -6.1748
-v4.47754h-14.2832v-76.4658h14.7119v52.6045c0 8.73535 4.47852 11.7178 9.80566 12.1387c7.46875 0 11.9482 -2.33984 11.9482 -12.1387v-52.6045h14.7109v52.6045c0 8.73535 4.27051 12.1387 9.81836 12.1387c7.67676 0 11.7275 -2.33984 11.7275 -12.1387v-52.6045
-h15.1465z" />
-    <glyph glyph-name="uniF178" unicode="&#xf178;" 
-d="M229.121 -85.0576v0l53.0303 52.4014v-120.252h-52.9805zM298.119 86.6582v0l10.1152 -10.1113l9.80371 9.7998l4.8252 -4.82227l-9.80469 -9.7998l14.9395 -14.7773l9.80469 9.64453l4.97949 -4.97754l-9.80371 -9.64453l10.1152 -10.1104l-10.1152 -10.1104
-l-10.1152 10.1104l-10.1162 -10.1104l10.1162 -10.1113l-9.95996 -9.95508l-10.1162 10.1113l-9.80371 -9.7998l10.1152 -10.1113l-10.1152 -10.1104l-9.95996 10.1104l-10.1152 -9.95508l10.1152 -10.1104l-10.1152 -10.1113l-10.1162 10.1113l-9.95996 -9.95508
-l10.1162 -10.1113l-9.95996 -9.95508l-10.1162 10.1113l-10.1152 -10.1113l10.1152 -10.1104l-9.95996 -9.95508l-10.1152 10.1104l-9.95996 -9.95508l10.1152 -10.1104l-9.95898 -9.95605l-10.1162 10.1113l-9.95996 -10.1113l-4.97949 4.97754l10.1152 10.1113
-l-14.9395 14.9326l-10.1162 -10.1104l-4.82422 4.82129l10.1162 10.1113l-10.1162 10.1104l9.95996 9.95508l10.1162 -10.1104l9.95898 9.95508l-10.1152 10.1104l9.95996 9.7998l9.95996 -9.95508l10.1152 10.1113l-9.95996 9.95508l9.80469 9.95508l10.1152 -10.1113
-l9.95996 9.95605l-10.1152 10.1104l10.1152 10.1104l10.1162 -10.1104l10.1152 10.1104l-10.1152 10.1113l10.1152 9.95508l9.95996 -9.95508l9.80371 9.7998l-10.1152 9.95508l10.1152 10.1104l10.1162 -10.1104l9.95996 10.1104l-9.95996 10.1104zM303.099 61.7695v0
-l-10.2715 -10.1104l15.0957 -15.0889l10.1152 10.2666zM282.867 41.7041v0l-9.80371 -9.7998l15.0957 -15.0889l9.80371 9.7998zM263.104 21.7939v0l-10.1152 -10.1113l14.9395 -14.9326l10.1152 10.1104zM242.872 1.57227v0l-9.95996 -9.7998l15.0957 -15.0889
-l9.80469 9.95605zM222.952 -18.1826v0l-9.95898 -10.1113l14.9395 -14.9326l10.1152 9.95508zM203.033 -38.249v0l-9.95996 -9.95508l14.9395 -14.9326l9.95996 9.95508zM282.151 84.3301v0l-53.0303 -52.3955v120.246h52.9922z" />
-    <glyph glyph-name="uniF10E" unicode="&#xf10e;" 
-d="M102.218 11.7031h12.1797c11.0596 48.3467 67.7549 43.7656 78.2041 0h25.9873c10.7734 49.208 68.3574 44.4971 78.4727 0h25.4512c11.0596 48.3467 67.7646 43.7656 78.2129 0h11.0322v-43.0078h-309.54v43.0078z" />
-    <glyph glyph-name="uniF15E" unicode="&#xf15e;" 
-d="M245.767 55.5176v-52.0684c-7.43262 -21.1729 -14.8652 -42.3359 -22.2979 -63.5186c-0.873047 -3.80371 -1.25 -7.62695 -0.584961 -11.4404c2.48047 -19.2568 4.96191 -38.5225 7.44238 -57.7988c1.875 -17.5781 23.5176 -16.7939 22.2969 2.87012
-c-1.7168 19.0674 -3.43359 38.1553 -5.15039 57.2227c9.32812 16.0186 18.6758 32.0469 28.0234 48.0664c10.0918 -16.0195 20.1934 -32.0479 30.2949 -48.0664c3.93945 -5.47266 9.27832 -8.32227 16.0156 -8.57031h42.3027
-c19.3896 0.367188 15.9951 21.4111 -0.576172 21.1631c-10.1016 0.774414 -20.1934 1.5293 -30.3047 2.28418c-5.03125 0.953125 -8.8418 3.82324 -11.4219 8.57031c-7.05469 16.793 -14.1104 33.5967 -21.166 50.3701
-c-0.198242 16.9814 -0.386719 33.9541 -0.575195 50.9258c-0.238281 4.74707 1.0918 6.07812 3.99902 4.00293c4.37598 -4.95605 8.77148 -9.91113 13.1377 -14.8672c0.595703 -9.9209 1.15137 -19.8418 1.72656 -29.7637c0.457031 -16.8428 16.8799 -14.002 15.4404 0
-c-0.188477 12.7812 -0.376953 25.5732 -0.56543 38.3438c-1.0918 5.29395 -3.0166 8.37207 -5.16016 10.875c-7.62109 8.20312 -15.252 16.4062 -22.8721 24.5986c-3.83105 3.96289 -10.6582 6.19727 -20.9775 5.50195l-34.4727 -0.922852
-c-11.4316 0.0292969 -20.0947 -6.58496 -26.8818 -17.7373c-3.62207 -5.7207 -7.24414 -11.4404 -10.876 -17.1709c-2.48047 -3.75391 -5.59668 -6.03809 -8.56348 -6.85254c-8.78223 -2.29395 -17.5439 -4.58789 -26.3057 -6.8623
-c-13.1582 -4.50879 -14.627 -19.127 3.43262 -20.041c11.8184 3.23828 23.6475 6.48535 35.4453 9.72266c2.62988 0.804688 4.90234 2.4834 6.86719 4.58887c5.33887 5.9082 10.667 11.8174 15.9961 17.7363c2.02441 2.45312 6.00293 3.31738 6.33105 -1.16211zM269.949 144
-c12.623 0 22.873 -10.249 22.873 -22.8906c0 -12.6426 -10.2402 -22.8916 -22.873 -22.8916c-12.6318 0 -22.8721 10.249 -22.8721 22.8916c0 12.6416 10.25 22.8906 22.8721 22.8906zM156.301 -54.6211c15.6191 0 28.3105 -12.6621 28.3105 -28.3027
-c0 -15.6514 -12.6816 -28.3438 -28.3105 -28.3438s-28.3008 12.6826 -28.3008 28.3438c0.00976562 15.6309 12.6719 28.3027 28.3008 28.3027z" />
-    <glyph glyph-name="uniF106" unicode="&#xf106;" 
-d="M253.43 137.234l-53.8545 -53.8535l55.7686 -0.282227c68.8438 -2.94922 85.9287 -63.0166 88.5615 -80.5078v-139.825h-38.0303v134.062c0 6.48438 -5.75 41.8896 -48.5225 49.2549l-58.7529 -0.150391l54.8672 -54.8672h-47.2461l-73.001 73.0186h-0.1875
-l0.09375 0.09375l-0.0556641 0.0566406h0.112305l73.0186 73h47.2285v0z" />
-    <glyph glyph-name="uniF14F" unicode="&#xf14f;" 
-d="M165.999 209.994l173.35 1.5127l123.646 -121.506l1.5127 -173.35l-121.506 -123.646l-173.35 -1.5127l-123.646 121.506l-1.5127 173.35l121.506 123.646v0z" />
-    <glyph glyph-name="uniF176" unicode="&#xf176;" 
-d="M302.798 56.9717v-209.167h-54.5049v103.288h-136.293v46.5518h136.293v58.6699l-23.375 -6.03809l-0.00683594 -0.00390625c-0.71582 -0.173828 -1.4541 -0.263672 -2.18848 -0.263672c-5.0166 0 -9.08203 4.06543 -9.08203 9.08203
-c0 1.81641 0.545898 3.58984 1.5625 5.09082l61.6152 88.0137l61.6191 -88.0137c1.0166 -1.50098 1.5625 -3.27441 1.5625 -5.09082c0 -5.0166 -4.06543 -9.08203 -9.08203 -9.08203c-0.738281 0 -1.47266 0.0888672 -2.1875 0.263672l-0.0078125 0.00390625h-0.00390625
-l-25.9209 6.69531v0z" />
-    <glyph glyph-name="uniF131" unicode="&#xf131;" 
-d="M185.667 -62.0107h16.3867v-64.3789c0 -6.37598 -15.8018 -5.47949 -15.8018 0l-0.584961 64.3789v0zM208.294 -62.0107h16.3877v-78.4258c0 -9.49609 -15.8027 -9.18262 -15.8027 0l-0.584961 78.4258v0zM148.671 -55.9619
-c4.66895 22.5527 7.93066 42.4443 39.5225 72.2158v45.1094l-5.58691 1.44824l0.0498047 -51.9453c-2.59277 -2.60254 -5.03418 -5.35645 -7.49902 -8.08691c-5.29102 2.62891 -5.83496 10.8496 -8.4834 18.2344l-3.23535 20.3994l3.02832 17.0527
-c5.60742 12.5664 9.11133 25.666 30.8311 33.9355l13.0361 0.207031c25.0967 -4.34863 29.8896 -22.1885 39.1816 -39.7705c11.2236 -21.2354 24.4619 -40.1123 11.7207 -47.5508c14.1191 -9.19336 21.5107 -25.1152 42.4189 -27.5205
-c9.97949 -1.02734 15.1748 1.93066 22.7617 2.89746l36.2109 -43.8682c1.7207 -11.2588 -2.44141 -12.7148 -6.41406 -14.4844l-24.417 29.1758l8.4834 -43.0391h-12.001l7.65625 -45.5225c0 -4.36816 -14.6914 -5.52051 -14.6914 -0.828125l-7.44922 42.0049
-l-10.2715 0.115234l-4.62695 -48.1211c0 -4.94434 -13.2432 -4.04688 -13.2432 0l5.79395 102.22l-42.2119 38.9014c-4.86719 8.6084 -1.32324 11.2793 0 15.5186c-5.92969 17.7275 -15.9893 33.3896 -24.0029 50.0752h-2.89746l0.207031 -46.7646
-c33.8721 -29.2783 35.0596 -49.5938 39.5225 -72.6289l-113.394 0.620117v0zM227.806 126.15c0.00488281 -12.124 -9.82324 -21.9551 -21.9473 -21.9551c-12.125 0 -21.9521 9.83105 -21.9473 21.9551c-0.00488281 12.125 9.82227 21.9561 21.9473 21.9561
-c12.124 0 21.9521 -9.83105 21.9473 -21.9561v0v0zM325.837 8.80566c0.00390625 -10.8311 -8.77539 -19.6133 -19.6064 -19.6133s-19.6104 8.78223 -19.6064 19.6133c-0.00390625 10.8311 8.77539 19.6143 19.6064 19.6143s19.6104 -8.7832 19.6064 -19.6143v0v0z" />
-    <glyph glyph-name="uniF18D" unicode="&#xf18d;" 
-d="M6 -216.506l250 433.012l250 -433.012h-500z" />
-    <glyph glyph-name="uniF119" unicode="&#xf119;" 
-d="M327.495 10.4893c0.353516 -2.49512 1.72559 -4.73535 3.79297 -6.18164l37.6123 -26.3359c3.52148 -2.4668 4.83887 -7.05957 3.1582 -11.0166l-9.39648 -22.1357c-0.849609 -2.00098 -2.51465 -3.54102 -4.57715 -4.23047
-c-2.05957 -0.689453 -4.31641 -0.462891 -6.19922 0.625l-11.3398 6.54492c-2.07031 -6.70605 -8.03613 -11.46 -15.0361 -11.9854c-7 -0.522461 -13.6055 3.29199 -16.6523 9.61523c-3.0459 6.3252 -1.91113 13.8682 2.86133 19.0146l-80.8945 46.7041
-c-2.07129 -6.7041 -8.03613 -11.4609 -15.0371 -11.9844c-6.99902 -0.523438 -13.6074 3.29102 -16.6523 9.61328c-3.04395 6.3252 -1.91016 13.8682 2.8623 19.0156l-16.7949 9.69727c-3.62988 2.09375 -4.87305 6.73438 -2.77734 10.3623l11.3652 19.6846
-c1.64355 2.84766 4.93262 4.31348 8.14746 3.62891l15.1553 -3.2207c2.61719 -0.556641 5.34668 -0.173828 7.70996 1.08301l25.4805 13.5488c2.77148 1.47363 6.10547 1.41504 8.8252 -0.154297l59.5547 -34.3857c2.42676 -1.39941 4.07031 -3.83594 4.46387 -6.60938
-l4.36816 -30.8975v0zM458.1 -133.587c-10.2705 -1.10449 -20.6318 0.961914 -29.6934 5.92188c-5.9502 4.04883 -13.7715 4.04883 -19.7246 0c-15.124 -8.28027 -33.4297 -8.28027 -48.5527 0c-5.95312 4.04883 -13.7725 4.04883 -19.7275 0
-c-15.124 -8.28027 -33.4277 -8.28027 -48.5537 0c-5.9502 4.04883 -13.7715 4.04883 -19.7236 0c-15.126 -8.28027 -33.4297 -8.28027 -48.5547 0c-2.90918 1.97852 -6.34473 3.03711 -9.86328 3.03711v-21.2441c3.51855 0 6.9541 -1.05664 9.86328 -3.03516
-c15.125 -8.28223 33.4287 -8.28223 48.5547 0c5.95215 4.0459 13.7734 4.0459 19.7236 0c15.126 -8.28223 33.4297 -8.28223 48.5537 0c5.95508 4.0459 13.7744 4.0459 19.7275 0c15.123 -8.28223 33.4287 -8.28223 48.5527 0c5.95312 4.0459 13.7744 4.0459 19.7246 0
-c12.4326 -6.80762 27.1514 -8.08301 40.5674 -3.51465l11.7451 -20.3418c-1.32617 -0.492188 -2.58691 -1.14355 -3.75684 -1.9375c-15.124 -8.2832 -33.4287 -8.2832 -48.5557 0c-5.9502 4.0459 -13.7715 4.0459 -19.7246 0c-15.124 -8.2832 -33.4297 -8.2832 -48.5527 0
-c-5.95312 4.0459 -13.7725 4.0459 -19.7275 0c-15.124 -8.2832 -33.4277 -8.2832 -48.5537 0c-5.9502 4.0459 -13.7715 4.0459 -19.7236 0c-15.126 -8.2832 -33.4297 -8.2832 -48.5547 0c-2.90918 1.97656 -6.34473 3.03418 -9.86328 3.03418v-44.8447h-208.156
-l124.595 215.398h83.5615v-97.7217c3.51855 0 6.9541 -1.05762 9.86328 -3.0332c15.125 -8.2832 33.4287 -8.2832 48.5547 0c5.95215 4.0459 13.7734 4.0459 19.7236 0c15.126 -8.2832 33.4297 -8.2832 48.5537 0c5.95508 4.0459 13.7744 4.0459 19.7275 0
-c15.123 -8.2832 33.4287 -8.2832 48.5527 0c5.95312 4.0459 13.7744 4.0459 19.7246 0c4.50977 -2.46875 9.36523 -4.2373 14.4053 -5.24023z" />
-    <glyph glyph-name="uniF139" unicode="&#xf139;" 
-d="M351.945 43.7891v-33.2588c0 -16.291 -3.7793 -32.3604 -10.6504 -47.1182c-2.28027 -4.91699 -4.91895 -9.69922 -7.97656 -14.1846c-5.62891 -8.29395 -11.7969 -16.2783 -15.9883 -25.4365c-4.21777 -9.2207 -6.62695 -19.2705 -6.62695 -29.4297v-25.6328h-41.2217
-v25.6328c0 11.1787 1.61328 22.3643 4.7373 33.1035c2.82129 9.71973 6.85059 19.2842 12.5869 27.6592c2.83496 4.14746 6.10059 7.99023 9.26562 11.8613c2.82129 3.4375 5.49414 6.91602 7.43066 10.9346c4.9873 10.2607 6.72168 21.6953 6.80273 33.0225
-l0.222656 32.8467l-23.9238 -7.8623c-0.762695 -0.317383 -1.43066 -0.533203 -2.26074 -0.59375c-2.9834 -0.236328 -5.95996 1.2627 -7.5791 3.78906c-1.39062 2.18164 -1.6875 5.00488 -0.884766 7.44336c0.432617 1.26953 1.12109 1.93164 1.85645 2.99219
-l53.1875 76.7842l54.0166 -76.9873c1.37012 -1.93164 2.16016 -2.60645 2.26758 -4.89648c0.155273 -3.25586 -0.911133 -5.9707 -3.69141 -7.83496c-1.76758 -1.18848 -3.86035 -1.50684 -5.93164 -1.18848c-0.59375 0.0878906 -0.938477 0.303711 -1.50488 0.492188
-l-24.1338 7.8623v0zM207.636 -72.6152l24.1338 7.80762c1.05957 0.378906 1.59961 0.634766 2.69238 0.634766c3.07031 0 5.43262 -0.999023 7.22168 -3.5791c1.59863 -2.27637 1.8623 -5.32324 0.842773 -7.90332c-0.431641 -1.12793 -0.998047 -1.61426 -1.67285 -2.55957
-l-54.2402 -76.9795l-53.0117 76.7832c-0.519531 0.743164 -1.70117 2.18164 -2.04492 3.29004c-0.263672 0.803711 -0.425781 1.6543 -0.438477 2.50586c-0.0205078 3.46484 2.2334 6.37598 5.29102 7.75391c1.31543 0.607422 2.61816 0.810547 4.01465 0.546875
-c0.648438 -0.114258 1.2832 -0.155273 1.84961 -0.493164l24.1201 -7.80762l-0.181641 32.8125c-0.0410156 7.68652 -0.898438 15.373 -3.05078 22.7559c-1.67383 5.80176 -4.08301 11.543 -7.76172 16.373c-3.25293 4.29492 -6.78906 8.38867 -10.0957 12.6504
-c-2.79395 3.62695 -5.25781 7.51758 -7.34277 11.584c-8.39551 16.3115 -12.6133 34.7383 -12.6133 53.042v25.7822h41.2549v-25.7822c0 -14.1699 4.62988 -28.2734 12.5127 -39.9922c3.08398 -4.58008 6.30957 -9.06445 9.4082 -13.6377
-c3.31348 -4.89648 6.20801 -10.0703 8.6582 -15.4336c6.80273 -14.792 10.4541 -30.8672 10.4541 -47.1455v-33.0088v0zM277.013 156.576c-0.188477 -7.88281 -0.383789 -15.7783 -0.911133 -23.6543c-1.12012 -16.7373 -3.73145 -33.3398 -7.86816 -49.5908
-c-3.375 -13.1777 -6.85742 -26.5449 -12.6406 -38.9189c-0.567383 -1.21582 -1.25586 -2.39062 -1.99121 -3.50586c-3.15137 -4.63965 -7.39648 -7.53125 -12.9033 -8.68555c-5.37891 -1.11523 -11.0342 0.357422 -15.4893 3.51855
-c-3.1377 2.22266 -5.37793 5.55273 -6.8291 9.07812c-4.54883 11.0303 -7.91016 22.5322 -10.8047 34.083c-4.50879 17.8721 -8.08496 35.9736 -9.46875 54.3662c-0.581055 7.76074 -0.749023 15.542 -0.945312 23.3096h79.8516v0z" />
-    <glyph glyph-name="uniF159" unicode="&#xf159;" 
-d="M225.375 66.0137c5.49121 -20.7891 10.9941 -41.5762 16.4961 -62.3906c-19.3809 -52.8779 -38.7998 -105.768 -58.1934 -158.657c-8.71777 -29.999 21.1113 -39.5938 35.0742 -14.9385c16.7412 40.6182 33.9795 82.498 50.7324 123.091
-c2.41113 7.08984 5.3584 6.09277 6.67188 0.243164c9.3252 -39.8027 18.6279 -79.5791 27.9297 -119.381c3.82129 -25.1064 41.71 -29.2412 39.0801 7.05469c-14.9023 76.4648 -29.7783 155.729 -44.6572 232.182c23.6426 -13.1025 48.1631 -27.9189 71.8545 -41.0078
-c25.0439 -8.95215 26.0049 9.40332 12.3203 19.8525c-15.7051 10.2178 -31.8242 19.1348 -47.5059 29.3418c-15.6924 11.2637 -31.373 22.5156 -47.041 33.7666c-4.57812 3.60156 -11.0801 6.50879 -19.5039 5.80273c-13.2959 -1.83691 -26.2256 -4.75488 -39.4941 -6.58105
-c-8.57031 -2.05469 -14.1348 -5.76465 -18.3486 -10.1934c-10.0918 -11.5312 -20.1973 -23.0518 -30.3018 -34.583c-15.4131 -4.96191 -30.8262 -9.93848 -46.2402 -14.9258c-19.0176 -6.21484 -12.4424 -26.9072 5.56348 -23.5498
-c19.9307 4.70801 39.8848 9.42676 59.8145 14.1348c2.92188 2.09277 5.84375 4.18555 8.76562 6.27734c3.8457 5.35156 7.68164 10.6797 11.5166 16.0195c1.82812 -0.522461 3.65332 -1.03418 5.4668 -1.55762zM244.21 183.022c15.2666 0 27.6602 -12.2002 27.6602 -27.2354
-c0 -15.0469 -12.3936 -27.2363 -27.6602 -27.2363s-27.6484 12.1895 -27.6484 27.2363c0 15.0352 12.3818 27.2354 27.6484 27.2354v0z" />
-    <glyph glyph-name="uniF11F" unicode="&#xf11f;" 
-d="M343.663 -144l-29.2109 29.2109l-29.21 -29.2109v111.087l-56.9355 -27.5996c-20.751 -10.0557 -45.7158 -1.4082 -55.7871 19.3428c-2.73535 5.66016 -4.18262 11.9004 -4.18262 18.2021v116.365l29.2266 50.6025l29.2256 -50.6025v-89.7197l56.9199 27.6152
-c20.7354 10.0703 45.7227 1.4082 55.7793 -19.3594c2.75098 -5.66016 4.17383 -11.8838 4.17383 -18.2012z" />
-    <glyph glyph-name="uniF15B" unicode="&#xf15b;" 
-d="M178.381 134.925c0 15.7741 7.88899 23.6611 23.667 23.6611s23.667 -7.88704 23.667 -23.6611c0 -15.7747 -7.88899 -23.6621 -23.667 -23.6621s-23.667 7.88737 -23.667 23.6621zM289.124 8.43848c0 14.0918 7.04752 21.1377 21.1426 21.1377
-c14.0944 0 21.1416 -7.0459 21.1416 -21.1377c0 -14.0911 -7.04721 -21.1367 -21.1416 -21.1367c-14.0951 0 -21.1426 7.04557 -21.1426 21.1367zM180.277 -67.8965h17.6689v-69.3945c-0.00222778 -3.355 -2.83519 -4.95216 -8.4989 -4.7915
-c-5.66591 0.16066 -8.5123 1.75783 -8.53918 4.7915zM204.673 -67.8965h17.6689v-84.5342c-0.000198364 -5.09093 -2.83044 -7.60826 -8.49072 -7.552s-8.50908 2.57359 -8.54639 7.552zM140.39 -61.376v0c5.50241 26.5743 15.0262 47.6775 28.5713 63.3096
-c-1.33638 0.663965 -2.49352 1.75824 -3.47141 3.28281c-0.97789 1.52458 -1.69702 3.02352 -2.15739 4.49683c-0.460373 1.47331 -1.03732 3.46742 -1.73088 5.98233s-1.29436 4.48162 -1.80243 5.90014c-1.64738 4.6019 -2.49895 11.9317 -2.55469 21.9893
-c-0.0491486 8.6573 0.728195 14.7846 2.33203 18.3818c0.192963 0.433399 0.999344 2.31059 2.41913 5.63155c1.4198 3.32098 2.35516 5.38075 2.80611 6.17933c0.450943 0.798584 1.42583 2.55685 2.92467 5.27478c1.49883 2.71793 2.88872 4.65581 4.16965 5.81363
-s2.96536 2.72687 5.05328 4.70713c2.08791 1.98026 4.44235 3.66161 7.06332 5.04404c2.62099 1.38243 5.556 2.69198 8.80505 3.92863l14.0547 0.222656c4.35817 -0.754646 8.33028 -1.98467 11.9163 -3.69009c3.58603 -1.70542 6.50244 -3.40247 8.74924 -5.09116
-c2.24857 -1.68868 4.5601 -4.19102 6.9346 -7.50703c2.37627 -3.31615 4.09837 -5.94302 5.16632 -7.88059c1.06795 -1.93772 2.68045 -5.09532 4.83751 -9.47279c2.15706 -4.37758 3.70444 -7.45308 4.64214 -9.22649c1.16304 -2.19996 2.88408 -5.36227 5.16312 -9.48694
-c2.27902 -4.12466 3.98071 -7.26482 5.10507 -9.42046c1.12433 -2.15571 2.47214 -4.89303 4.0434 -8.21196c1.57126 -3.319 2.57034 -5.96628 2.99719 -7.94185s0.720001 -4.10591 0.879456 -6.39101s-0.248138 -4.21129 -1.22281 -5.77857
-c-0.97467 -1.56727 -2.41757 -2.90863 -4.3287 -4.02408c3.3746 -2.19561 7.62921 -5.85132 12.7638 -10.9671c5.13663 -5.11582 10.2457 -9.31915 15.3272 -12.61c5.08148 -3.29084 10.9626 -5.32047 17.6434 -6.08889
-c3.1882 -0.328136 6.1456 -0.318792 8.87222 0.0280342s5.56549 0.891504 8.51663 1.63403c2.95615 0.742357 5.34021 1.22935 7.15216 1.46098l39.042 -47.2842c1.19638 -7.825 -1.10895 -13.0294 -6.91602 -15.6133l-26.3252 31.4482l9.14746 -46.3926h-12.9404
-l8.25488 -49.0693c0 -1.48894 -1.31998 -2.63638 -3.95996 -3.44234s-5.27994 -0.978836 -7.91992 -0.518631c-2.63998 0.46019 -3.95996 1.48332 -3.95996 3.06937l-8.03125 45.2773l-11.0742 0.124023l-4.98926 -51.8701c0 -2.58447 -2.37973 -3.79614 -7.13916 -3.63501
-s-7.13916 1.3728 -7.13916 3.63501l6.24609 110.183l-45.5117 41.9326c-1.23703 2.1745 -2.02002 4.17159 -2.34898 5.99125c-0.336517 1.81966 -0.409241 3.16401 -0.218185 4.03305c0.198578 0.869035 0.629379 2.05995 1.29239 3.57276
-c0.670532 1.5128 1.09546 2.5563 1.27478 3.13048c-1.89439 5.6646 -4.27661 11.4925 -7.14668 17.4837c-2.87007 5.99118 -6.23224 12.5777 -10.0865 19.7596s-6.73586 12.76 -8.64473 16.7343h-3.12402l0.223633 -50.4072
-c3.97685 -3.43614 7.60345 -6.76684 10.8798 -9.99209c3.27721 -3.22525 6.18124 -6.53944 8.71213 -9.94257c2.53275 -3.40313 4.72459 -6.29783 6.57553 -8.68411c1.85278 -2.38628 3.54849 -5.39608 5.08713 -9.02941
-c1.53862 -3.63333 2.73483 -6.29274 3.58862 -7.97825c0.853806 -1.68551 1.7666 -4.52912 2.7384 -8.53085c0.971771 -4.00173 1.59778 -6.56406 1.87802 -7.687c0.280243 -1.12294 0.835541 -3.93858 1.66592 -8.44691
-c0.830353 -4.50833 1.32529 -7.17429 1.4848 -7.99788zM176.979 66.6514v0c-0.695541 -4.9038 -1.41669 -9.77792 -2.16345 -14.6224c-0.746857 -4.84444 -1.24529 -7.62822 -1.49527 -8.35134c-0.25 -0.723122 -0.367142 -2.51503 -0.35141 -5.37572
-c0.0157166 -2.86069 0.116791 -4.5825 0.303223 -5.16544c0.186447 -0.582966 0.68573 -3.34493 1.49786 -8.28591c0.812149 -4.941 1.56802 -9.67668 2.26764 -14.207l5.96484 5.82324v48.6221z" />
-    <glyph glyph-name="uniF150" unicode="&#xf150;" 
-d="M365.036 68.2275v-53.751h-81.7793v-164.371h-54.9365v81.5127h-81.3564v53.752h81.3564v164.524h54.9365v-81.667h81.7793z" />
-    <glyph glyph-name="uniF102" unicode="&#xf102;" 
-d="M279 71.25v-203.25h-55v203.25h-26.627l27.0635 46.875l27.0635 46.875l27.0635 -46.875l27.0635 -46.875h-26.627z" />
-    <glyph glyph-name="uniF15D" unicode="&#xf15d;" 
-d="M147.285 -100.191l8.54102 -7.61816l190.234 0.121094l6.94922 7.34473l-205.725 0.15332zM184.315 73.7129c9.41211 0 17.0381 7.62988 17.0381 17.0498c0 9.41602 -7.62598 17.0469 -17.0381 17.0469c-9.40332 0 -17.0303 -7.63086 -17.0303 -17.0469
-c0 -9.41992 7.62695 -17.0498 17.0303 -17.0498zM152.345 -26.3311c7.21582 0 13.0645 5.84961 13.0645 13.0684s-5.84863 13.0723 -13.0645 13.0723c-7.21094 0 -13.0596 -5.85352 -13.0596 -13.0723s5.84863 -13.0684 13.0596 -13.0684zM273.347 34.8174l-26.498 33.1533
-l16.6631 2.01172l39.3447 -22.3066l6.80859 12.0244l-40.0791 32.1094l-61.6826 -4.75293l-6.75977 -15.6152l-0.0644531 -36.4219l-27.9053 -28.1318l9.19824 -9.85059l35.1768 23.7168l4.40527 16.0713l19.3242 -23.1367l-47.8301 -38.1475l-28.1631 -52.7031
-l18.3281 -10.5928l27.502 44.21l50.998 35.6113l46.165 -41.041l59.418 -17.2803l5.01855 21.9033l-50.9414 13.6885l-24.1367 29.9131l-24.2891 35.5674z" />
-    <glyph glyph-name="uniF14D" unicode="&#xf14d;" 
-d="M289.314 -154.573v310.846h40.7666v-310.846h-40.7666zM162.655 -155.391v0l0.464844 166.151l41.9102 39.6865v105.519h43.5371v-123.261l-42.1006 -41.0869v-147.009h-43.8115z" />
-    <glyph glyph-name="uniF18F" unicode="&#xf18f;" 
-d="M195.736 31.1953v-77.6504l122.585 -0.100586c-7.19336 -5.87695 -11.6846 -13.9775 -11.626 -24.6104l-121.688 0.0722656c-1.16602 41.25 -59.6885 41.1094 -60.96 0.238281c-8.79004 0.0664062 -10.0098 2.0625 -10.0938 10.1592v30.9648
-c-0.110352 13.8369 -1.83887 4.70312 8.4043 30.9434c10.54 27.9727 7.63477 25.3867 17.168 26.1094l56.2109 3.87402v0zM171.389 -14.5889l0.484375 32.9912l-31.293 -1.94141c-5.7041 -0.381836 -5.75195 -0.417969 -7.76172 -7.03418l-8.00586 -21.3477
-c-2.68848 -6.54688 -2.26074 -8.47656 5.09473 -7.51953l41.4814 4.85156v0zM405.56 -46.6143l0.0595703 -17.4453l-20.207 -7.15332l-17.7432 0.0117188c0.0722656 10.1152 -4.13184 18.624 -11.585 24.6006l49.4756 -0.0136719v0zM208.261 -39.8174v94.3643h197.46
-v-94.3643h-197.46zM130.435 -70.5127c0 16.0553 8.02766 24.083 24.083 24.083c16.056 -3.8147e-06 24.084 -8.02767 24.084 -24.083s-8.028 -24.083 -24.084 -24.083c-16.0553 0 -24.083 8.02767 -24.083 24.083zM313.094 -70.5127c0 16.0553 8.02768 24.083 24.083 24.083
-c16.0553 -3.8147e-06 24.083 -8.02767 24.083 -24.083s-8.02768 -24.083 -24.083 -24.083s-24.083 8.02767 -24.083 24.083z" />
-    <glyph glyph-name="uniF185" unicode="&#xf185;" 
-d="M131.538 66.0029v62.124h248.924v-62.124h-93.4072v-194.13h-62.1162v194.13h-93.4004v0z" />
-    <glyph glyph-name="uniF173" unicode="&#xf173;" 
-d="M192.568 117.945h58.9678v-79.0498l70.6221 70.9951l42.6738 -42.6729l-113.282 -113.275l-0.0136719 -71.8877h-58.9668v235.891h-0.000976562z" />
-    <glyph glyph-name="uniF12B" unicode="&#xf12b;" 
-d="M6 -216.506l13.04 22.5703h103.729l-11.2891 11.2998h-13.5508l-13.54 24.8398l31.6201 33.8701l18.0703 -2.27051l13.54 6.78027l31.6201 -11.2803l20.3193 -18.0693l-2.26953 -27.1201l-36.1201 -18.0498h85.7998l15.7998 85.8193l11.3203 9l-9.04004 90.3398
-l13.54 9.02051l-9.04004 13.5498l9.04004 63.2197l45.1406 22.1504l182.27 -315.66zM149.87 -96.8496l-20.3203 6.7793l-2.25 15.8203l-2.25 13.5498l22.5703 18.0703l9.03027 -6.7998l9.04004 6.7998l15.7998 -15.8203l-6.78027 -22.5996zM233.42 0.240234
-l0.00976562 -20.3105l5.65039 -6.7793l-19.2002 -22.5801h-9.03027l-9.04004 -13.5508l-18.0693 15.8008l2.26953 29.3701l27.0898 22.5791zM271.81 79.2598l-47.4092 -4.5l-13.5508 27.1006l15.8008 11.2793l2.25 15.8008l36.1396 6.7793l18.0498 -11.2998l4.52051 2.27051
-l13.5498 -11.2803z" />
-    <glyph glyph-name="uniF134" unicode="&#xf134;" 
-d="M112.04 -16.123v0c0 68.5098 55.8867 124.389 124.404 124.389c68.4961 0 124.375 -55.8789 124.375 -124.389l-0.521484 -5.15723l25.6064 8.79395c1.39355 0.774414 3.07031 1.02051 4.65723 1.25195c4.83008 0.685547 9.39844 -4.21875 9.39844 -9.39062
-c0 -2.42969 -0.991211 -4.81445 -2.64648 -6.53516l-59.8135 -80.9863l-62.0938 80.9863c-1.63965 1.73633 -2.64551 4.10547 -2.64551 6.53516c0 5.17188 4.21777 9.84473 9.40527 9.39062c1.59473 -0.149414 3.25586 -0.477539 4.65723 -1.25195l26.5166 -8.79395
-l0.103516 5.15723c0 42.4121 -34.6016 76.999 -76.999 76.999c-42.4189 0 -77.0137 -34.5869 -77.0137 -76.999l-0.320312 -92.1426h-47.0625l-0.00585938 92.1426h-0.00195312z" />
-    <glyph glyph-name="uniF138" unicode="&#xf138;" 
-d="M159.523 125.094l94.9844 65.8125l97.9688 -65.8125l-65.9922 10v-24.083l-62.7656 -1.91699v28.0713zM159.523 -125.094l64.1953 -12.0713v28.0713l62.7656 -1.91699v-24.083l65.9922 10l-97.9688 -65.8125z" />
-  </font>
-</defs></svg>
diff --git a/vendor/assets/iD/iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.ttf b/vendor/assets/iD/iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.ttf
deleted file mode 100644 (file)
index 60b6f56..0000000
Binary files a/vendor/assets/iD/iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.ttf and /dev/null differ
diff --git a/vendor/assets/iD/iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.woff b/vendor/assets/iD/iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.woff
deleted file mode 100644 (file)
index 80ed017..0000000
Binary files a/vendor/assets/iD/iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.woff and /dev/null differ
diff --git a/vendor/assets/iD/iD/traffico/global.json b/vendor/assets/iD/iD/traffico/global.json
deleted file mode 100644 (file)
index 1882864..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_at":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.75);-moz-transform:scale(.75);transform:scale(.75)\">ÖSTERREICH</i></span>","level-crossing":"<span class=\"t\"><i class=\"t-level-crossing t-c-red\"></i><i class=\"t-level-crossing t-c-red\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(60deg) scale(.05,1);-moz-transform:rotate(60deg) scale(.05,1);transform:rotate(60deg) scale(.05,1)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(-60deg) scale(.05,1);-moz-transform:rotate(-60deg) scale(.05,1);transform:rotate(-60deg) scale(.05,1)\"></i></span>","priority-road-end":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.98);-moz-transform:scale(0.707107) rotate(45deg) scale(.98);transform:scale(0.707107) rotate(45deg) scale(.98)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.05,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.05,1);transform:scale(0.707107) rotate(45deg) scale(.05,1)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0);-moz-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0);transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0);-moz-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0);transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0)\"></i></span>","railway-crossing-unsecured":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(-.4,.4);-moz-transform:translate(0,13%) scale(-.4,.4);transform:translate(0,13%) scale(-.4,.4)\"></i></span>","maximum-speed-limit_10":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">10</i></span>","maximum-speed-limit_20":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">20</i></span>","maximum-speed-limit_25":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">25</i></span>","maximum-speed-limit_30":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">30</i></span>","maximum-speed-limit_35":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">35</i></span>","maximum-speed-limit_50":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">50</i></span>","maximum-speed-limit_60":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">60</i></span>","maximum-speed-limit_70":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">70</i></span>","maximum-speed-limit_75":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">75</i></span>","maximum-speed-limit_80":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">80</i></span>","maximum-speed-limit_90":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">90</i></span>","maximum-speed-limit_100":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-3 t-c-black\">100</i></span>","maximum-speed-limit_110":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-3 t-c-black\">110</i></span>","maximum-speed-limit_120":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-3 t-c-black\">120</i></span>","maximum-speed-limit_130":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-3 t-c-black\">130</i></span>","yield":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\" style=\"-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);transform:rotate(180deg)\"></i><i class=\"t-tri-rounded t-c-white\" style=\"-webkit-transform:translate(0,-14.43%) scale(.55) translate(0,14.43%) rotate(180deg);-moz-transform:translate(0,-14.43%) scale(.55) translate(0,14.43%) rotate(180deg);transform:translate(0,-14.43%) scale(.55) translate(0,14.43%) rotate(180deg)\"></i><i class=\"t-content-4 t-c-red\" style=\"-webkit-transform:translate(0,-115%) scale(.6);-moz-transform:translate(0,-115%) scale(.6);transform:translate(0,-115%) scale(.6)\">YIELD</i></span>","yield-to-oncoming-traffic":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\" style=\"-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);transform:rotate(180deg)\"></i><i class=\"t-tri-rounded t-c-white\" style=\"-webkit-transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg);-moz-transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg);transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-115%) scale(.6);-moz-transform:translate(0,-115%) scale(.6);transform:translate(0,-115%) scale(.6)\">GIVE</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-45%) scale(.6);-moz-transform:translate(0,-45%) scale(.6);transform:translate(0,-45%) scale(.6)\">WAY</i></span>","no-bicycles":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","no-entry":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:scale(.92,.16);-moz-transform:scale(.92,.16);transform:scale(.92,.16)\"></i></span>","no-heavy-goods-vehicles":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-truck t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","no-left-turn":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-turn-90-l t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","no-pedestrians":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-pedestrian t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","no-right-turn":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-turn-90-l t-c-black\" style=\"-webkit-transform:scale(.8) scale(-1,1);-moz-transform:scale(.8) scale(-1,1);transform:scale(.8) scale(-1,1)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","no-u-turn":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-u-turn t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","stop":"<span class=\"t\"><i class=\"t-octagon t-c-red\"></i><i class=\"t-stop t-c-white\"></i></span>","added-lane-left":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-added-lane t-c-black\"></i></span>","added-lane-right":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-added-lane t-c-black\"></i></span>","bump-in-road":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-bump_road_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","children":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-children t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(-.75,.75);-moz-transform:translate(0,14.43%) scale(-.75,.75);transform:translate(0,14.43%) scale(-.75,.75)\"></i></span>","crossroads-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-cross-roads t-c-black\"></i></span>","curve-left-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-l-curve t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","curve-right-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-r-curve t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","cyclists-crossing":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","dip-in-road":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-content-3 t-c-black\">DIP</i></span>","divided-highway-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-highway-divided t-c-black\"></i></span>","divided-highway-ends":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-divided-highway t-c-black\" style=\"-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);transform:scale(1,-1)\"></i></span>","domestic-animals":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-domestic-animal t-c-black\" style=\"-webkit-transform:translate(0,14.43%) translate(-6%,4%) scale(.25);-moz-transform:translate(0,14.43%) translate(-6%,4%) scale(.25);transform:translate(0,14.43%) translate(-6%,4%) scale(.25)\"></i></span>","equestrians":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-equestrian t-c-white\" style=\"-webkit-transform:scale(.7);-moz-transform:scale(.7);transform:scale(.7)\"></i></span>","falling-rocks-or-debris-left":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-falling-rocks-au t-c-black\"></i></span>","farm-vehicles":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-tractor t-c-black\" style=\"-webkit-transform:scale(.45);-moz-transform:scale(.45);transform:scale(.45)\"></i></span>","hairpin-curve-left-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-hairpin-curve-au t-c-black\" style=\"-webkit-transform: scale(0.85) scale(.9);-moz-transform: scale(0.85) scale(.9);transform: scale(0.85) scale(.9)\"></i></span>","hairpin-curve-right-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-hairpin-curve t-c-black\"></i></span>","horizontal-alignment-left":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-h-align-l t-c-black\"></i></span>","horizontal-alignment-right":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-h-align-l t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","koala":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-koala-ugly t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","koala-crossing":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-koalas t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","narrow-bridge-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-bridge-us t-c-black\" style=\"-webkit-transform:scale(0.8);-moz-transform:scale(0.8);transform:scale(0.8)\"></i></span>","pedestrian-crossing":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-pedestrian t-c-black\"></i></span>","pedestrian-crossing_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-pedestrian-crossing t-c-black\"></i></span>","pedestrians-cyclists":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-pedestrian t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,-35%) scale(-1, 1);-moz-transform:scale(.8) scale(.6) translate(0,-35%) scale(-1, 1);transform:scale(.8) scale(.6) translate(0,-35%) scale(-1, 1)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,35%);-moz-transform:scale(.8) scale(.6) translate(0,35%);transform:scale(.8) scale(.6) translate(0,35%)\"></i></span>","railway-level-crossing-with-flashing-signals-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-railway-flashing-au t-c-black\" style=\"-webkit-transform:scale(.9) scale(0.8);-moz-transform:scale(.9) scale(0.8);transform:scale(.9) scale(0.8)\"></i></span>","curve-first-left-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-reverse-curve-au t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","double-curve-first-right-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-reverse-curve-au t-c-black\" style=\"-webkit-transform:scale(-1,1) scale(.9);-moz-transform:scale(-1,1) scale(.9);transform:scale(-1,1) scale(.9)\"></i></span>","double-curve-first-left-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-reverse-curve-ontario t-c-black\" style=\"-webkit-transform:scale(-1,1) scale(.9);-moz-transform:scale(-1,1) scale(.9);transform:scale(-1,1) scale(.9)\"></i></span>","double-turn-first-left-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-reverse-left t-c-black\"></i></span>","double-turn-first-right-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-reverse-left t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","road-narrows-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-road-both t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","roundabout-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-roundabout t-c-black\"></i></span>","junction-with-a-side-road-perpendicular-left-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-p-l t-c-black\"></i></span>","junction-with-a-side-road-perpendicular-right-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-p-r t-c-black\"></i></span>","slippery-road-surface":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-slippery t-c-black\"></i></span>","steep-hill-downwards":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-steep-hill t-c-black\"></i></span>","steep-hill-upwards":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-steep-hill-upwards t-c-black\"></i></span>","stop-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-small-arrow-au t-c-black\" style=\"-webkit-transform:translate(0,-25%);-moz-transform:translate(0,-25%);transform:translate(0,-25%)\"></i><i class=\"t-octagon t-c-red\" style=\"-webkit-transform:translate(0,15%) scale(.4);-moz-transform:translate(0,15%) scale(.4);transform:translate(0,15%) scale(.4)\"></i></span>","traffic-signals-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(.2,.55);-moz-transform:scale(.2,.55);transform:scale(.2,.55)\"></i><i class=\"t-circle-bg t-c-green\" style=\"-webkit-transform:translate(0,16.5%) scale(.14);-moz-transform:translate(0,16.5%) scale(.14);transform:translate(0,16.5%) scale(.14)\"></i><i class=\"t-circle-bg t-c-yellow\" style=\"-webkit-transform:scale(.14);-moz-transform:scale(.14);transform:scale(.14)\"></i><i class=\"t-circle-bg t-c-red\" style=\"-webkit-transform:translate(0,-16.5%) scale(.14);-moz-transform:translate(0,-16.5%) scale(.14);transform:translate(0,-16.5%) scale(.14)\"></i></span>","truck-crossing":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-truck t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","turn-left":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-90-l t-c-black\"></i></span>","turn-right":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-90-l t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","two-way-traffic-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-arrows_both_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","uncontrolled-railroad-crossing-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-train-au t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","wild-animals":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-wild-animal t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.7);-moz-transform:translate(0,14.43%) scale(.7);transform:translate(0,14.43%) scale(.7)\"></i></span>","winding-road-first-left-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-winding-road-left t-c-black\"></i></span>","winding-road-first-right-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-winding-road-left t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","yield-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-small-arrow-au t-c-black\" style=\"-webkit-transform:translate(0,-25%);-moz-transform:translate(0,-25%);transform:translate(0,-25%)\"></i><i class=\"t-tri-rounded t-c-red\" style=\"-webkit-transform:translate(0, 15%) scale(.45) rotate(180deg);-moz-transform:translate(0, 15%) scale(.45) rotate(180deg);transform:translate(0, 15%) scale(.45) rotate(180deg)\"></i><i class=\"t-tri-rounded t-c-white\" style=\"-webkit-transform:translate(0, 12%) scale(.25) rotate(180deg);-moz-transform:translate(0, 12%) scale(.25) rotate(180deg);transform:translate(0, 12%) scale(.25) rotate(180deg)\"></i></span>","emu-crossing":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-emu t-c-black\"></i></span>","emu-crossing_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-emu t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","slippery-motorcycles":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-slippery-motorcycle t-c-black\"></i></span>","traffic-merges-left-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-a-a-r t-c-black\" style=\"-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);transform:scale(1, -1)\"></i></span>","traffic-merges-right-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-merge t-c-black\"></i></span>","wombat-crossing":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-wombat t-c-black\"></i></span>","wombat-crossing_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-wombat t-c-black\"></i></span>","information_border_be_nl":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">België</i></span>","information_border_be_fr":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">Belgique</i></span>","bicycles-only":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-bicycle t-c-white\"></i></span>","proceed-straight":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-DE-arrow-up t-c-white\"></i></span>","keep-left":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-US-arrow-oneway t-c-black\" style=\"-webkit-transform:rotate(-135deg) scale(.6);-moz-transform:rotate(-135deg) scale(.6);transform:rotate(-135deg) scale(.6)\"></i></span>","keep-right":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-US-arrow-oneway t-c-black\" style=\"-webkit-transform:rotate(135deg) scale(.6);-moz-transform:rotate(135deg) scale(.6);transform:rotate(135deg) scale(.6)\"></i></span>","transit-only":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-transit_bra t-c-black\"></i></span>","parking":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-parking t-c-white\"></i></span>","two-way-traffic":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-two_way_arrows_bra t-c-black\"></i></span>","no-motor-vehicles":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-motorbike t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,-35%);-moz-transform:scale(.8) scale(.6) translate(0,-35%);transform:scale(.8) scale(.6) translate(0,-35%)\"></i><i class=\"t-car t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,35%);-moz-transform:scale(.8) scale(.6) translate(0,35%);transform:scale(.8) scale(.6) translate(0,35%)\"></i><i class=\"t-circle-separator t-c-black\" style=\"-webkit-transform:rotate(90deg) scale(.8);-moz-transform:rotate(90deg) scale(.8);transform:rotate(90deg) scale(.8)\"></i></span>","no-motorcycles":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-motorbike t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i></span>","no-overtaking":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-car t-c-red\" style=\"-webkit-transform:scale(.6) translate(-26%,10%);-moz-transform:scale(.6) translate(-26%,10%);transform:scale(.6) translate(-26%,10%)\"></i><i class=\"t-car t-c-black\" style=\"-webkit-transform:scale(.6) translate(26%,10%);-moz-transform:scale(.6) translate(26%,10%);transform:scale(.6) translate(26%,10%)\"></i></span>","no-parking":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-parking t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","no-stopping":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-octagon t-c-black\" style=\"-webkit-transform:scale(.7);-moz-transform:scale(.7);transform:scale(.7)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","no-left-or-u-turn":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-no-l-or-u-turn t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","no-straight-through":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-US-arrow-up t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","no_trucks":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-truck t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","falling-rocks-or-debris-right":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-falling-rocks-US t-c-black\"></i></span>","loose-road-surface":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-loose_road_surface_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","workers-in-road-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-roadworks t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","school-zone":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-school_zone_bra t-c-black\"></i></span>","uneven-road":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-bump_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","y-roads":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-y-roads t-c-black\"></i></span>","warning--added-lane-left":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-added-lane t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","double-reverse-curve":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-orange\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-single-2-reverse-curve t-c-black\" style=\"-webkit-transform:scale(.9) translate(-9%);-moz-transform:scale(.9) translate(-9%);transform:scale(.9) translate(-9%)\"></i><i class=\"t-single-2-reverse-curve t-c-black\" style=\"-webkit-transform:scale(.9) translate(9%);-moz-transform:scale(.9) translate(9%);transform:scale(.9) translate(9%)\"></i></span>","flaggers-in-road-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-flaggers t-c-black\"></i></span>","loop-pretzel":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-pretzel-loop t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","pass-left-or-right":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-pass-l-r t-c-black\"></i></span>","playground-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-play-ground t-c-black\"></i></span>","road-narrows-left-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-road-l t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","road-narrows-right-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-road-l t-c-black\" style=\"-webkit-transform:scale(.9) scale(-1,1);-moz-transform:scale(.9) scale(-1,1);transform:scale(.9) scale(-1,1)\"></i></span>","junction-with-a-side-road-acute-left-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-a-a-r t-c-black\"></i></span>","t-roads":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-t-roads t-c-black\"></i></span>","triple-reverse-curve":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-orange\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-single-2-reverse-curve t-c-black\" style=\"-webkit-transform:scale(.9) translate(-18%);-moz-transform:scale(.9) translate(-18%);transform:scale(.9) translate(-18%)\"></i><i class=\"t-single-2-reverse-curve t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i><i class=\"t-single-2-reverse-curve t-c-black\" style=\"-webkit-transform:scale(.9) translate(18%);-moz-transform:scale(.9) translate(18%);transform:scale(.9) translate(18%)\"></i></span>","trucks-rollover":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-trucks-rollover t-c-black\"></i></span>","turn-curve-left":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-l-curve t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","turn-curve-right":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-l-curve t-c-black\" style=\"-webkit-transform:scale(.9) scale(-1,1);-moz-transform:scale(.9) scale(-1,1);transform:scale(.9) scale(-1,1)\"></i></span>","turn-right_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-90-l t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","pass-on-either-side":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-pass-either-us t-c-black\"></i></span>","crossroads-ahead_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-crossroads-ahead-ontario t-c-black\"></i></span>","curve-left-ahead_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-right-curve-ontario t-c-black\" style=\"-webkit-transform:scale(.9) scale(-1,1);-moz-transform:scale(.9) scale(-1,1);transform:scale(.9) scale(-1,1)\"></i></span>","curve-right-ahead_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-right-curve-ontario t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","emergency-vehicles":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-fire-station t-c-black\"></i></span>","hairpin-curve-right-ahead_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-hairpin-curve-au t-c-black\" style=\"-webkit-transform: scale(-0.85, 0.85) scale(.9);-moz-transform: scale(-0.85, 0.85) scale(.9);transform: scale(-0.85, 0.85) scale(.9)\"></i></span>","level-railroad-crossing-with-barriers-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-railroad-barriers t-c-black\"></i></span>","opening-or-swing-bridge":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-opening-swing-bridge-ca t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","pavement-ends":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-pavement-ends t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","shared-road-motocycles-cyclists":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-share-road t-c-black\"></i></span>","junction-with-a-side-road-perpendicular-left-ahead_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-perpendicular t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","junction-with-a-side-road-perpendicular-right-ahead_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-perpendicular t-c-black\" style=\"-webkit-transform:scale(.9) scale(-1,1);-moz-transform:scale(.9) scale(-1,1);transform:scale(.9) scale(-1,1)\"></i></span>","stop-ahead_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-small-arrow-au t-c-black\" style=\"-webkit-transform:translate(0,-25%) scale(1.2);-moz-transform:translate(0,-25%) scale(1.2);transform:translate(0,-25%) scale(1.2)\"></i><i class=\"t-octagon t-c-red\" style=\"-webkit-transform:translate(0,15%) scale(.4);-moz-transform:translate(0,15%) scale(.4);transform:translate(0,15%) scale(.4)\"></i></span>","traffic-merges-left-ahead_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-a-a-r t-c-black\" style=\"-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);transform:scale(1, -1)\"></i></span>","traffic-merges-right-ahead_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-a-a-r t-c-black\"></i></span>","tunnel-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-tunnel t-c-black\"></i></span>","information_border_cz":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,-50%);-moz-transform:translate(0,-50%);transform:translate(0,-50%)\">České</i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,50%);-moz-transform:translate(0,50%);transform:translate(0,50%)\">republika</i></span>","falling-rocks":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-falling-rocks-EU t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i></span>","unprotected-quayside-or-riverbank":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-cliff t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i></span>","double-curve-first-left":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-d-curve-l t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.6);-moz-transform:translate(0,14.43%) scale(.6);transform:translate(0,14.43%) scale(.6)\"></i></span>","double-curve-first-right":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-d-curve-l t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(-.6,.6);-moz-transform:translate(0,14.43%) scale(-.6,.6);transform:translate(0,14.43%) scale(-.6,.6)\"></i></span>","curve-left":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-turn-l t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.6);-moz-transform:translate(0,14.43%) scale(.6);transform:translate(0,14.43%) scale(.6)\"></i></span>","curve-right":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-turn-l t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(-.6,.6);-moz-transform:translate(0,14.43%) scale(-.6,.6);transform:translate(0,14.43%) scale(-.6,.6)\"></i></span>","crossroads-with-priority-to-the-right":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,14.43%) rotate(45deg) scale(.06,.32);-moz-transform:translate(0,14.43%) rotate(45deg) scale(.06,.32);transform:translate(0,14.43%) rotate(45deg) scale(.06,.32)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,14.43%) rotate(-45deg) scale(.06,.32);-moz-transform:translate(0,14.43%) rotate(-45deg) scale(.06,.32);transform:translate(0,14.43%) rotate(-45deg) scale(.06,.32)\"></i></span>","cyclists-crossing-ahead":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-yellow\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.65) translate(0,25%);-moz-transform:scale(.65) translate(0,25%);transform:scale(.65) translate(0,25%)\"></i></span>","cyclists-crossing-ahead_v2":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.65) translate(0,25%);-moz-transform:scale(.65) translate(0,25%);transform:scale(.65) translate(0,25%)\"></i></span>","other-danger":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-exclamation t-c-black\" style=\"-webkit-transform:scale(.65) translate(0,14.43%);-moz-transform:scale(.65) translate(0,14.43%);transform:scale(.65) translate(0,14.43%)\"></i></span>","other-danger_v2":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-yellow\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-exclamation t-c-black\" style=\"-webkit-transform:scale(.65) translate(0,14.43%);-moz-transform:scale(.65) translate(0,14.43%);transform:scale(.65) translate(0,14.43%)\"></i></span>","junction-with-a-side-road-perpendicular-left":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-right-of-way-l fit t-c-black\" style=\"-webkit-transform:scale(.7) translate(0,14.43%);-moz-transform:scale(.7) translate(0,14.43%);transform:scale(.7) translate(0,14.43%)\"></i></span>","junction-with-a-side-road-perpendicular-right":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-right-of-way-l fit t-c-black\" style=\"-webkit-transform:scale(.7) translate(0,14.43%) scale(-1,1);-moz-transform:scale(.7) translate(0,14.43%) scale(-1,1);transform:scale(.7) translate(0,14.43%) scale(-1,1)\"></i></span>","railway-crossing-secured":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-secured t-c-black\" style=\"-webkit-transform:translate(0,14.43%) translate(0,4%) scale(.35);-moz-transform:translate(0,14.43%) translate(0,4%) scale(.35);transform:translate(0,14.43%) translate(0,4%) scale(.35)\"></i></span>","snow":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-snowflake t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.7);-moz-transform:translate(0,14.43%) scale(.7);transform:translate(0,14.43%) scale(.7)\"></i></span>","low-flying-aircraft":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-airplane t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.4);-moz-transform:translate(0,14.43%) scale(.4);transform:translate(0,14.43%) scale(.4)\"></i></span>","strong-sidewind":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-windbag t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.3);-moz-transform:translate(0,14.43%) scale(.3);transform:translate(0,14.43%) scale(.3)\"></i></span>","road-bump":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-bump t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.45);-moz-transform:translate(0,14.43%) scale(.45);transform:translate(0,14.43%) scale(.45)\"></i></span>","roadworks-ahead":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-roadworks t-c-black\" style=\"-webkit-transform:scale(.7) translate(0,20%);-moz-transform:scale(.7) translate(0,20%);transform:scale(.7) translate(0,20%)\"></i></span>","roundabout":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-roundabout t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.55);-moz-transform:translate(0,14.43%) scale(.55);transform:translate(0,14.43%) scale(.55)\"></i></span>","uneven-road-ahead":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-bumps t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.45);-moz-transform:translate(0,14.43%) scale(.45);transform:translate(0,14.43%) scale(.45)\"></i></span>","border":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.9) translate(0,-130%);-moz-transform:scale(.9) translate(0,-130%);transform:scale(.9) translate(0,-130%)\">Bundes-</i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.9) translate(0,-30%);-moz-transform:scale(.9) translate(0,-30%);transform:scale(.9) translate(0,-30%)\">republik</i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.9) translate(0,70%);-moz-transform:scale(.9) translate(0,70%);transform:scale(.9) translate(0,70%)\">Deutschland</i></span>","deadend":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:translate(0,20%) scale(.15,.6);-moz-transform:translate(0,20%) scale(.15,.6);transform:translate(0,20%) scale(.15,.6)\"></i><i class=\"t-square-angular t-c-red\" style=\"-webkit-transform:translate(0,-15%) scale(.5,.15);-moz-transform:translate(0,-15%) scale(.5,.15);transform:translate(0,-15%) scale(.5,.15)\"></i></span>","first-aid":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7);-moz-transform:scale(.7);transform:scale(.7)\"></i><i class=\"t-square-angular t-c-red\" style=\"-webkit-transform:scale(.15,.5);-moz-transform:scale(.15,.5);transform:scale(.15,.5)\"></i><i class=\"t-square-angular t-c-red\" style=\"-webkit-transform:scale(.5,.15);-moz-transform:scale(.5,.15);transform:scale(.5,.15)\"></i></span>","limited-access-road":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-car t-c-white\" style=\"-webkit-transform:scale(1.5);-moz-transform:scale(1.5);transform:scale(1.5)\"></i></span>","parking-left":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-parking t-c-white\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:translate(25%,30%) rotate(-90deg) scale(.33);-moz-transform:translate(25%,30%) rotate(-90deg) scale(.33);transform:translate(25%,30%) rotate(-90deg) scale(.33)\"></i></span>","parking-right":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-parking t-c-white\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:translate(25%,30%) rotate(90deg) scale(.33);-moz-transform:translate(25%,30%) rotate(90deg) scale(.33);transform:translate(25%,30%) rotate(90deg) scale(.33)\"></i></span>","bus-stop":"<span class=\"t\"><i class=\"t-circle-bg t-c-yellow\"></i><i class=\"t-circle-o t-c-green\"></i><i class=\"t-h t-c-green\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i></span>","disabled-persons":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-disabled-p t-c-white\"></i></span>","pedestrian-crossing_v3":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-pedestrian-crossing t-c-black\"></i></span>","minimum-speed_10":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">10</i></span>","minimum-speed_20":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">20</i></span>","minimum-speed_25":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">25</i></span>","minimum-speed_30":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">30</i></span>","minimum-speed_35":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">35</i></span>","minimum-speed_50":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">50</i></span>","minimum-speed_60":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">60</i></span>","minimum-speed_70":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">70</i></span>","minimum-speed_75":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">75</i></span>","minimum-speed_80":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">80</i></span>","minimum-speed_90":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">90</i></span>","minimum-speed_100":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-3 t-c-white\">100</i></span>","minimum-speed_110":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-3 t-c-white\">110</i></span>","minimum-speed_120":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-3 t-c-white\">120</i></span>","minimum-speed_130":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-3 t-c-white\">130</i></span>","minimum-speed-end_10":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">10</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","minimum-speed-end_20":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">20</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","minimum-speed-end_25":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">25</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","minimum-speed-end_30":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">30</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","minimum-speed-end_35":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">35</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","minimum-speed-end_50":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">50</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","minimum-speed-end_60":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">60</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","minimum-speed-end_70":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">70</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","minimum-speed-end_75":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">75</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","minimum-speed-end_80":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">80</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","minimum-speed-end_90":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">90</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","minimum-speed-end_100":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-3 t-c-white\">100</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","minimum-speed-end_110":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-3 t-c-white\">110</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","minimum-speed-end_120":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-3 t-c-white\">120</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","minimum-speed-end_130":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-3 t-c-white\">130</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","pedestrian-bicycle-dual-track":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-bicycle t-c-white\" style=\"-webkit-transform:scale(.6) translate(-40%,0);-moz-transform:scale(.6) translate(-40%,0);transform:scale(.6) translate(-40%,0)\"></i><i class=\"t-footpath t-c-white\" style=\"-webkit-transform:scale(.6) translate(40%,0);-moz-transform:scale(.6) translate(40%,0);transform:scale(.6) translate(40%,0)\"></i><i class=\"t-circle-separator t-c-white\"></i></span>","dual-path-pedestrians-and-cyclists":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-bicycle t-c-white\" style=\"-webkit-transform:scale(.6) translate(40%,0);-moz-transform:scale(.6) translate(40%,0);transform:scale(.6) translate(40%,0)\"></i><i class=\"t-footpath t-c-white\" style=\"-webkit-transform:scale(.6) translate(-40%,0);-moz-transform:scale(.6) translate(-40%,0);transform:scale(.6) translate(-40%,0)\"></i><i class=\"t-circle-separator t-c-white\"></i></span>","dual-path-cyclists-and-pedestrians":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-footpath t-c-white\" style=\"-webkit-transform:scale(.6) translate(40%,0);-moz-transform:scale(.6) translate(40%,0);transform:scale(.6) translate(40%,0)\"></i><i class=\"t-bicycle t-c-white\" style=\"-webkit-transform:scale(.6) translate(-40%,0);-moz-transform:scale(.6) translate(-40%,0);transform:scale(.6) translate(-40%,0)\"></i><i class=\"t-circle-separator t-c-white\"></i></span>","pedestrians-only":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-pedestrian t-c-white\" style=\"-webkit-transform:;-moz-transform:;transform:\"></i></span>","proceed-straight-or-turn-left":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-arrow-s-l t-c-white\"></i></span>","proceed-straight-or-turn-right":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-arrow-s-l t-c-white\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","procced-straight":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-DE-arrow-up t-c-white\"></i></span>","pass-on-this-side-left":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(-135deg);-moz-transform:rotate(-135deg);transform:rotate(-135deg)\"></i></span>","pass-on-this-side-right":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);transform:rotate(135deg)\"></i></span>","shared-path-pedestrians-and-cyclists":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-footpath t-c-white\" style=\"-webkit-transform:scale(.6) translate(0,-35%);-moz-transform:scale(.6) translate(0,-35%);transform:scale(.6) translate(0,-35%)\"></i><i class=\"t-bicycle t-c-white\" style=\"-webkit-transform:scale(.6) translate(0,35%);-moz-transform:scale(.6) translate(0,35%);transform:scale(.6) translate(0,35%)\"></i><i class=\"t-circle-separator t-c-white\" style=\"-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);transform:rotate(90deg)\"></i></span>","roundabout_v2":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-roundabout t-c-white\" style=\"-webkit-transform:scale(1.25);-moz-transform:scale(1.25);transform:scale(1.25)\"></i></span>","turn-left-ahead":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-arrow-l t-c-white\" style=\"-webkit-transform:scale(1.25);-moz-transform:scale(1.25);transform:scale(1.25)\"></i></span>","turn-right-ahead":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-arrow-l t-c-white\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","narrow-location-priority":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-DE-arrow-up t-c-red\" style=\"-webkit-transform:scale(.8) translate(-25%,5%) rotate(180deg);-moz-transform:scale(.8) translate(-25%,5%) rotate(180deg);transform:scale(.8) translate(-25%,5%) rotate(180deg)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:scale(.8) translate(25%,-5%);-moz-transform:scale(.8) translate(25%,-5%);transform:scale(.8) translate(25%,-5%)\"></i></span>","narrow-location-no-priority":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:scale(.8) scale(.7) translate(-25%,5%) rotate(180deg);-moz-transform:scale(.8) scale(.7) translate(-25%,5%) rotate(180deg);transform:scale(.8) scale(.7) translate(-25%,5%) rotate(180deg)\"></i><i class=\"t-DE-arrow-up t-c-red\" style=\"-webkit-transform:scale(.8) scale(.7) translate(25%,-5%);-moz-transform:scale(.8) scale(.7) translate(25%,-5%);transform:scale(.8) scale(.7) translate(25%,-5%)\"></i></span>","give-way":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\" style=\"-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);transform:rotate(180deg)\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg);-moz-transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg);transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg)\"></i></span>","no-pedestrians-or-bicycles":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-footpath t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,-35%);-moz-transform:scale(.8) scale(.6) translate(0,-35%);transform:scale(.8) scale(.6) translate(0,-35%)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,35%);-moz-transform:scale(.8) scale(.6) translate(0,35%);transform:scale(.8) scale(.6) translate(0,35%)\"></i></span>","no-mopeds":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-moped t-c-black\" style=\"-webkit-transform:scale(.8) scale(.7);-moz-transform:scale(.8) scale(.7);transform:scale(.8) scale(.7)\"></i></span>","no-slow-vehicles":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-tractor t-c-black\" style=\"-webkit-transform:scale(.8) scale(.7);-moz-transform:scale(.8) scale(.7);transform:scale(.8) scale(.7)\"></i></span>","no-trailers":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-trailer t-c-black\" style=\"-webkit-transform:scale(.8) scale(.8);-moz-transform:scale(.8) scale(.8);transform:scale(.8) scale(.8)\"></i></span>","no-buses":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-bus t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i></span>","no-trucks-and-buses":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-truck t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,-35%);-moz-transform:scale(.8) scale(.6) translate(0,-35%);transform:scale(.8) scale(.6) translate(0,-35%)\"></i><i class=\"t-bus t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,35%);-moz-transform:scale(.8) scale(.6) translate(0,35%);transform:scale(.8) scale(.6) translate(0,35%)\"></i><i class=\"t-circle-separator t-c-black\" style=\"-webkit-transform:rotate(90deg) scale(.8);-moz-transform:rotate(90deg) scale(.8);transform:rotate(90deg) scale(.8)\"></i></span>","no-parking-or-stopping-left":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(-90deg) scale(.3) translate(95%);-moz-transform:rotate(-90deg) scale(.3) translate(95%);transform:rotate(-90deg) scale(.3) translate(95%)\"></i></span>","no-parking-or-stopping-left-and-right":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(-90deg) scale(.3) translate(95%);-moz-transform:rotate(-90deg) scale(.3) translate(95%);transform:rotate(-90deg) scale(.3) translate(95%)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(90deg) scale(.3) translate(95%);-moz-transform:rotate(90deg) scale(.3) translate(95%);transform:rotate(90deg) scale(.3) translate(95%)\"></i></span>","no-parking-or-stopping-right":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(90deg) scale(.3) translate(95%);-moz-transform:rotate(90deg) scale(.3) translate(95%);transform:rotate(90deg) scale(.3) translate(95%)\"></i></span>","no-parking-left":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(90deg) scale(.3) translate(95%);-moz-transform:rotate(90deg) scale(.3) translate(95%);transform:rotate(90deg) scale(.3) translate(95%)\"></i></span>","no-parking-left-and-right":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(90deg) scale(.3) translate(95%);-moz-transform:rotate(90deg) scale(.3) translate(95%);transform:rotate(90deg) scale(.3) translate(95%)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(-90deg) scale(.3) translate(95%);-moz-transform:rotate(-90deg) scale(.3) translate(95%);transform:rotate(-90deg) scale(.3) translate(95%)\"></i></span>","no-parking-right":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(-90deg) scale(.3) translate(95%);-moz-transform:rotate(-90deg) scale(.3) translate(95%);transform:rotate(-90deg) scale(.3) translate(95%)\"></i></span>","priority-road":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.98) scale(0.707107) rotate(45deg);-moz-transform:scale(.98) scale(0.707107) rotate(45deg);transform:scale(.98) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i></span>","give-way-to-oncoming-traffic":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-yellow\" style=\"-webkit-transform:scale(0.8);-moz-transform:scale(0.8);transform:scale(0.8)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:scale(.7) translate(-25%,5%) rotate(180deg);-moz-transform:scale(.7) translate(-25%,5%) rotate(180deg);transform:scale(.7) translate(-25%,5%) rotate(180deg)\"></i><i class=\"t-DE-arrow-up t-c-red\" style=\"-webkit-transform:scale(.7) translate(25%,-5%);-moz-transform:scale(.7) translate(25%,-5%);transform:scale(.7) translate(25%,-5%)\"></i></span>","end-of-limits":"<span class=\"t\"><i class=\"t-circle-bg t-c-black\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.025,.99);-moz-transform:rotate(45deg) scale(.025,.99);transform:rotate(45deg) scale(.025,.99)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.025,.98) translate(150%,0);-moz-transform:rotate(45deg) scale(.025,.98) translate(150%,0);transform:rotate(45deg) scale(.025,.98) translate(150%,0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.025,.97) translate(300%,0);-moz-transform:rotate(45deg) scale(.025,.97) translate(300%,0);transform:rotate(45deg) scale(.025,.97) translate(300%,0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.025,.98) translate(-150%,0);-moz-transform:rotate(45deg) scale(.025,.98) translate(-150%,0);transform:rotate(45deg) scale(.025,.98) translate(-150%,0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.025,.97) translate(-300%,0);-moz-transform:rotate(45deg) scale(.025,.97) translate(-300%,0);transform:rotate(45deg) scale(.025,.97) translate(-300%,0)\"></i></span>","low-emission-zone":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-circle-bg t-c-red\" style=\"-webkit-transform:translate(0,-8%) scale(.7);-moz-transform:translate(0,-8%) scale(.7);transform:translate(0,-8%) scale(.7)\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:translate(0,-8%) scale(.7) scale(.8);-moz-transform:translate(0,-8%) scale(.7) scale(.8);transform:translate(0,-8%) scale(.7) scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-50%) scale(.8) scale(.8);-moz-transform:translate(0,-50%) scale(.8) scale(.8);transform:translate(0,-50%) scale(.8) scale(.8)\">Umwelt</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,150%) scale(.8);-moz-transform:translate(0,150%) scale(.8);transform:translate(0,150%) scale(.8)\">ZONE</i></span>","low-emission-zone-end":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-circle-bg t-c-grey\" style=\"-webkit-transform:translate(0,-8%) scale(.7);-moz-transform:translate(0,-8%) scale(.7);transform:translate(0,-8%) scale(.7)\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:translate(0,-8%) scale(.7) scale(.8);-moz-transform:translate(0,-8%) scale(.7) scale(.8);transform:translate(0,-8%) scale(.7) scale(.8)\"></i><i class=\"t-content-4 t-c-grey\" style=\"-webkit-transform:translate(0,-50%) scale(.8) scale(.8);-moz-transform:translate(0,-50%) scale(.8) scale(.8);transform:translate(0,-50%) scale(.8) scale(.8)\">Umwelt</i><i class=\"t-content-4 t-c-grey\" style=\"-webkit-transform:translate(0,150%) scale(.8);-moz-transform:translate(0,150%) scale(.8);transform:translate(0,150%) scale(.8)\">ZONE</i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.02,1.35);-moz-transform:rotate(45deg) scale(.02,1.35);transform:rotate(45deg) scale(.02,1.35)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.02,1.3) translate(-150%, 0);-moz-transform:rotate(45deg) scale(.02,1.3) translate(-150%, 0);transform:rotate(45deg) scale(.02,1.3) translate(-150%, 0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.02,1.3) translate(150%, 0);-moz-transform:rotate(45deg) scale(.02,1.3) translate(150%, 0);transform:rotate(45deg) scale(.02,1.3) translate(150%, 0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.02,1.25) translate(-300%, 0);-moz-transform:rotate(45deg) scale(.02,1.25) translate(-300%, 0);transform:rotate(45deg) scale(.02,1.25) translate(-300%, 0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.02,1.25) translate(300%, 0);-moz-transform:rotate(45deg) scale(.02,1.25) translate(300%, 0);transform:rotate(45deg) scale(.02,1.25) translate(300%, 0)\"></i></span>","no-moped-vehicles":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-moped t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,-35%) scale(.7);-moz-transform:scale(.8) scale(.6) translate(0,-35%) scale(.7);transform:scale(.8) scale(.6) translate(0,-35%) scale(.7)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,35%);-moz-transform:scale(.8) scale(.6) translate(0,35%);transform:scale(.8) scale(.6) translate(0,35%)\"></i></span>","no-stopping-or-parking":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","no-traffic-both-ways":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i></span>","no-vehicles-carrying-dangerous-goods":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-square-rounded t-c-orange\" style=\"-webkit-transform:scale(.25) translate(0,-25%);-moz-transform:scale(.25) translate(0,-25%);transform:scale(.25) translate(0,-25%)\"></i><i class=\"t-lorry t-c-black\"></i></span>","no-overtaking-by-heavy-goods-vehicles":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-lorry-left t-c-red\"></i><i class=\"t-car t-c-black\" style=\"-webkit-transform:scale(.6) translate(26%,10%);-moz-transform:scale(.6) translate(26%,10%);transform:scale(.6) translate(26%,10%)\"></i></span>","destination":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-45%) scale(.8);-moz-transform:translate(0,-45%) scale(.8);transform:translate(0,-45%) scale(.8)\">Anlieger</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,45%) scale(.8);-moz-transform:translate(0,45%) scale(.8);transform:translate(0,45%) scale(.8)\">frei</i></span>","disabled":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-disabled-p t-c-black\" style=\"-webkit-transform:scale(.6);-moz-transform:scale(.6);transform:scale(.6)\"></i></span>","glaze":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-snowflake t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i></span>","left-pointing":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:scale(.6) rotate(-90deg);-moz-transform:scale(.6) rotate(-90deg);transform:scale(.6) rotate(-90deg)\"></i></span>","both-directions":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:translate(-15%,0) scale(.5) rotate(180deg);-moz-transform:translate(-15%,0) scale(.5) rotate(180deg);transform:translate(-15%,0) scale(.5) rotate(180deg)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:translate(15%,0) scale(.5);-moz-transform:translate(15%,0) scale(.5);transform:translate(15%,0) scale(.5)\"></i></span>","pedestrians-use-opposite-sidewalk":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:translate(-20%,0) scale(.5) rotate(-90deg);-moz-transform:translate(-20%,0) scale(.5) rotate(-90deg);transform:translate(-20%,0) scale(.5) rotate(-90deg)\"></i><i class=\"t-pedestrians t-c-black\" style=\"-webkit-transform:translate(25%,0) scale(.6);-moz-transform:translate(25%,0) scale(.6);transform:translate(25%,0) scale(.6)\"></i></span>","pedestrians-use-opposite-sidewalk_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:translate(20%,0) scale(.5) rotate(90deg);-moz-transform:translate(20%,0) scale(.5) rotate(90deg);transform:translate(20%,0) scale(.5) rotate(90deg)\"></i><i class=\"t-pedestrians t-c-black\" style=\"-webkit-transform:translate(-25%,0) scale(.6);-moz-transform:translate(-25%,0) scale(.6);transform:translate(-25%,0) scale(.6)\"></i></span>","railway-only":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-train-electric t-c-black\" style=\"-webkit-transform:scale(.45);-moz-transform:scale(.45);transform:scale(.45)\"></i></span>","right-pointing":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:scale(.6) rotate(90deg);-moz-transform:scale(.6) rotate(90deg);transform:scale(.6) rotate(90deg)\"></i></span>","entry":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-arrow-oneway t-c-white\" style=\"-webkit-transform:scale(.75);-moz-transform:scale(.75);transform:scale(.75)\"></i></span>","priority-road-bends-left-3way":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,-30%) scale(.1,.25);-moz-transform:translate(0,-30%) scale(.1,.25);transform:translate(0,-30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(-.85,.85);-moz-transform:scale(-.85,.85);transform:scale(-.85,.85)\"></i></span>","priority-road-bends-left-3way_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(-90deg) translate(0,30%) scale(.1,.25);-moz-transform:rotate(-90deg) translate(0,30%) scale(.1,.25);transform:rotate(-90deg) translate(0,30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(-.85,.85);-moz-transform:scale(-.85,.85);transform:scale(-.85,.85)\"></i></span>","priority-road-bends-left-4way":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,-30%) scale(.1,.25);-moz-transform:translate(0,-30%) scale(.1,.25);transform:translate(0,-30%) scale(.1,.25)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(-90deg) translate(0,30%) scale(.1,.25);-moz-transform:rotate(-90deg) translate(0,30%) scale(.1,.25);transform:rotate(-90deg) translate(0,30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(-.85,.85);-moz-transform:scale(-.85,.85);transform:scale(-.85,.85)\"></i></span>","priority-road-bends-right-3way":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,-30%) scale(.1,.25);-moz-transform:translate(0,-30%) scale(.1,.25);transform:translate(0,-30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(.85);-moz-transform:scale(.85);transform:scale(.85)\"></i></span>","priority-road-bends-right-3way_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(90deg) translate(0,30%) scale(.1,.25);-moz-transform:rotate(90deg) translate(0,30%) scale(.1,.25);transform:rotate(90deg) translate(0,30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(.85);-moz-transform:scale(.85);transform:scale(.85)\"></i></span>","priority-road-bends-right-4way":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,-30%) scale(.1,.25);-moz-transform:translate(0,-30%) scale(.1,.25);transform:translate(0,-30%) scale(.1,.25)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(90deg) translate(0,30%) scale(.1,.25);-moz-transform:rotate(90deg) translate(0,30%) scale(.1,.25);transform:rotate(90deg) translate(0,30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(.85);-moz-transform:scale(.85);transform:scale(.85)\"></i></span>","priority-road-from-left-3way":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,30%) scale(.1,.25);-moz-transform:translate(0,30%) scale(.1,.25);transform:translate(0,30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(-.85,-.85);-moz-transform:scale(-.85,-.85);transform:scale(-.85,-.85)\"></i></span>","priority-road-from-left-4way":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,30%) scale(.1,.25);-moz-transform:translate(0,30%) scale(.1,.25);transform:translate(0,30%) scale(.1,.25)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(-90deg) translate(0,30%) scale(.1,.25);-moz-transform:rotate(-90deg) translate(0,30%) scale(.1,.25);transform:rotate(-90deg) translate(0,30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(-.85,-.85);-moz-transform:scale(-.85,-.85);transform:scale(-.85,-.85)\"></i></span>","priority-road-from-right-3way":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,30%) scale(.1,.25);-moz-transform:translate(0,30%) scale(.1,.25);transform:translate(0,30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(.85,-.85);-moz-transform:scale(.85,-.85);transform:scale(.85,-.85)\"></i></span>","priority-road-from-right-4way":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,30%) scale(.1,.25);-moz-transform:translate(0,30%) scale(.1,.25);transform:translate(0,30%) scale(.1,.25)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(90deg) translate(0,30%) scale(.1,.25);-moz-transform:rotate(90deg) translate(0,30%) scale(.1,.25);transform:rotate(90deg) translate(0,30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(.85,-.85);-moz-transform:scale(.85,-.85);transform:scale(.85,-.85)\"></i></span>","danger_level_crossing":"<span class=\"t\"><i class=\"t-square-angular t-c-red\" style=\"-webkit-transform:rotate(60deg) scale(.2,1);-moz-transform:rotate(60deg) scale(.2,1);transform:rotate(60deg) scale(.2,1)\"></i><i class=\"t-square-angular t-c-red\" style=\"-webkit-transform:rotate(-60deg) scale(.2,1);-moz-transform:rotate(-60deg) scale(.2,1);transform:rotate(-60deg) scale(.2,1)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(60deg) scale(.1,.5) translate(50%,50%);-moz-transform:rotate(60deg) scale(.1,.5) translate(50%,50%);transform:rotate(60deg) scale(.1,.5) translate(50%,50%)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(-60deg) scale(.1,.5) translate(-50%,50%);-moz-transform:rotate(-60deg) scale(.1,.5) translate(-50%,50%);transform:rotate(-60deg) scale(.1,.5) translate(-50%,50%)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(60deg) scale(.1,.5) translate(-50%,-50%);-moz-transform:rotate(60deg) scale(.1,.5) translate(-50%,-50%);transform:rotate(60deg) scale(.1,.5) translate(-50%,-50%)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(-60deg) scale(.1,.5) translate(50%,-50%);-moz-transform:rotate(-60deg) scale(.1,.5) translate(50%,-50%);transform:rotate(-60deg) scale(.1,.5) translate(50%,-50%)\"></i></span>","information_border_dk":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">Danmark</i></span>","information_border_ee":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">EESTI</i></span>","information_border_es":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">ESPAÑA</i></span>","information_border_fi":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,-100%);-moz-transform:translate(0,-100%);transform:translate(0,-100%)\">SUOMI</i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,0);-moz-transform:translate(0,0);transform:translate(0,0)\">FINLAND</i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,100%);-moz-transform:translate(0,100%);transform:translate(0,100%)\">SUOPMA</i></span>","information_border_fr":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">FRANCE</i></span>","information_city_entrance":"<span class=\"t\"><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-angular t-c-red\" style=\"-webkit-transform:scale(.95,.45);-moz-transform:scale(.95,.45);transform:scale(.95,.45)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:scale(.9,.4);-moz-transform:scale(.9,.4);transform:scale(.9,.4)\"></i><i class=\"t-content-5 t-c-black\">some city</i></span>","information_city_exit":"<span class=\"t\"><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(.95,.45);-moz-transform:scale(.95,.45);transform:scale(.95,.45)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:scale(.9,.4);-moz-transform:scale(.9,.4);transform:scale(.9,.4)\"></i><i class=\"t-content-5 t-c-black\">some city</i><i class=\"t-square-diagonal-bar t-c-red\" style=\"-webkit-transform:scale(.9,.4);-moz-transform:scale(.9,.4);transform:scale(.9,.4)\"></i></span>","information_border_gr":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-yellow\" style=\"-webkit-transform:translate(0,-50%);-moz-transform:translate(0,-50%);transform:translate(0,-50%)\">EΛΛAΣ</i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,50%);-moz-transform:translate(0,50%);transform:translate(0,50%)\">GREECE</i></span>","information_border_hu":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.75);-moz-transform:scale(.75);transform:scale(.75)\">Magyarország</i></span>","information_border_it":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">ITALIA</i></span>","information_border_lt":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,-80%);-moz-transform:translate(0,-80%);transform:translate(0,-80%)\">Lietuvos</i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,20%);-moz-transform:translate(0,20%);transform:translate(0,20%)\">Respublika</i></span>","information_border_lu_fr":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.85);-moz-transform:scale(.85);transform:scale(.85)\">Luxembourg</i></span>","information_border_lu_de":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.85);-moz-transform:scale(.85);transform:scale(.85)\">Luxemburg</i></span>","information_border_lv":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">LATVIJA</i></span>","information_border_nl":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">Nederland</i></span>","information_cycleway":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(1,.3);-moz-transform:scale(1,.3);transform:scale(1,.3)\"></i><i class=\"t-square-rounded t-c-blue\" style=\"-webkit-transform:scale(.95,.25);-moz-transform:scale(.95,.25);transform:scale(.95,.25)\"></i><i class=\"t-content-4 t-c-white\">fietspad</i></span>","information_border_pl":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,-70%) scale(.7);-moz-transform:translate(0,-70%) scale(.7);transform:translate(0,-70%) scale(.7)\">Rzeczpospolita</i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,40%);-moz-transform:translate(0,40%);transform:translate(0,40%)\">Polska</i></span>","information_border_se":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">SVERIGE</i></span>","information_border_si":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.85);-moz-transform:scale(.85);transform:scale(.85)\">SLOVENIA</i></span>","information_border_sk":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\">SLOVENSKO</i></span>","danger_contraflow":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.35) translate(-25%,-5%);-moz-transform:translate(0,14.43%) scale(.35) translate(-25%,-5%);transform:translate(0,14.43%) scale(.35) translate(-25%,-5%)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.35) translate(25%,5%) rotate(180deg);-moz-transform:translate(0,14.43%) scale(.35) translate(25%,5%) rotate(180deg);transform:translate(0,14.43%) scale(.35) translate(25%,5%) rotate(180deg)\"></i></span>","mandatory_roundabout":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-roundabout t-c-white\" style=\"-webkit-transform:scale(-1.25,1.25);-moz-transform:scale(-1.25,1.25);transform:scale(-1.25,1.25)\"></i></span>","prohibitory_overtaking":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-car t-c-black\" style=\"-webkit-transform:scale(.6) translate(-26%,10%);-moz-transform:scale(.6) translate(-26%,10%);transform:scale(.6) translate(-26%,10%)\"></i><i class=\"t-car t-c-red\" style=\"-webkit-transform:scale(.6) translate(26%,10%);-moz-transform:scale(.6) translate(26%,10%);transform:scale(.6) translate(26%,10%)\"></i></span>","added-lane-from-entering-roadway":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-added-lane t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.95);-moz-transform:rotate(45deg) scale(.95);transform:rotate(45deg) scale(.95)\"></i></span>","slippery-bicycles":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-bicycle-slippery t-c-black\"></i></span>","tram-crossing":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-light-rail t-c-black\"></i></span>","loop-270-degrees":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-loop-270 t-c-black\"></i></span>","motorcycle-crossing":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-motorbike t-c-black\"></i></span>","offset-roads":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-offset-roads t-c-black\"></i></span>","uncontroller-railroad-crossing-ahead":"<span class=\"t\"><i class=\"t-circle-bg t-c-yellow\"></i><i class=\"t-circle-bar-rounded t-c-black\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-circle-bar-rounded t-c-black\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i><i class=\"t-railroad t-c-black\"></i></span>","junction-with-a-side-road-acute-right-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-a-a-l t-c-black\"></i></span>","horizontal-traffic-signals-ahead":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(.55,.2);-moz-transform:scale(.55,.2);transform:scale(.55,.2)\"></i><i class=\"t-circle-bg t-c-green\" style=\"-webkit-transform:translate(16.5%,0) scale(.14);-moz-transform:translate(16.5%,0) scale(.14);transform:translate(16.5%,0) scale(.14)\"></i><i class=\"t-circle-bg t-c-yellow\" style=\"-webkit-transform:scale(.14);-moz-transform:scale(.14);transform:scale(.14)\"></i><i class=\"t-circle-bg t-c-red\" style=\"-webkit-transform:translate(-16.5%,0) scale(.14);-moz-transform:translate(-16.5%,0) scale(.14);transform:translate(-16.5%,0) scale(.14)\"></i></span>","dead-end":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-dead-end t-c-black\"></i></span>","no-hitch-hiking":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-hitch-hiking t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","share-roads":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-share-roads t-c-black\"></i></span>","end":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-end t-c-black\"></i></span>","skewed-railroad-crossing":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-skewed-railroads t-c-black\"></i></span>","lightground-railroad-crossing":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-lightground-railroad-crossing t-c-black\"></i></span>","national-network-lane":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-green\"></i><i class=\"t-lorry t-c-black\"></i></span>","national-network-prohibited":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-lorry t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","hazardous-material-prohibited":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-hazardous-material t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-o t-c-red\"></i></span>","truck-rollover-with-speed":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-truck-rollover-speed t-c-black\"></i></span>","no-rollerblading":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-rollerblading t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","one-way-left":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(1.1,.33);-moz-transform:scale(1.1,.33);transform:scale(1.1,.33)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1.1,.33) scale(.95);-moz-transform:scale(1.1,.33) scale(.95);transform:scale(1.1,.33) scale(.95)\"></i><i class=\"t-US-arrow-oneway t-c-white\" style=\"-webkit-transform:scale(.6) scale(1.35,1) rotate(-90deg);-moz-transform:scale(.6) scale(1.35,1) rotate(-90deg);transform:scale(.6) scale(1.35,1) rotate(-90deg)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(.5,.6) translate(-15%,-25%);-moz-transform:scale(.5,.6) translate(-15%,-25%);transform:scale(.5,.6) translate(-15%,-25%)\">ONE</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(.5,.6) translate(45%,-25%);-moz-transform:scale(.5,.6) translate(45%,-25%);transform:scale(.5,.6) translate(45%,-25%)\">WAY</i></span>","one-way-right":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(1.1,.33);-moz-transform:scale(1.1,.33);transform:scale(1.1,.33)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1.1,.33) scale(.95);-moz-transform:scale(1.1,.33) scale(.95);transform:scale(1.1,.33) scale(.95)\"></i><i class=\"t-US-arrow-oneway t-c-white\" style=\"-webkit-transform:scale(.6) scale(1.35,1) rotate(90deg);-moz-transform:scale(.6) scale(1.35,1) rotate(90deg);transform:scale(.6) scale(1.35,1) rotate(90deg)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(.5,.6) translate(-45%,-25%);-moz-transform:scale(.5,.6) translate(-45%,-25%);transform:scale(.5,.6) translate(-45%,-25%)\">ONE</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(.5,.6) translate(15%,-25%);-moz-transform:scale(.5,.6) translate(15%,-25%);transform:scale(.5,.6) translate(15%,-25%)\">WAY</i></span>","one-way-left_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(1,1.2) translate(0,-90%);-moz-transform:scale(1,1.2) translate(0,-90%);transform:scale(1,1.2) translate(0,-90%)\">ONE</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(1,1.2);-moz-transform:scale(1,1.2);transform:scale(1,1.2)\">WAY</i><i class=\"t-US-arrow-oneway t-c-black\" style=\"-webkit-transform:scale(.5) translate(0,45%) rotate(-90deg);-moz-transform:scale(.5) translate(0,45%) rotate(-90deg);transform:scale(.5) translate(0,45%) rotate(-90deg)\"></i></span>","one-way-right_v2":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(1,1.2) translate(0,-90%);-moz-transform:scale(1,1.2) translate(0,-90%);transform:scale(1,1.2) translate(0,-90%)\">ONE</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(1,1.2);-moz-transform:scale(1,1.2);transform:scale(1,1.2)\">WAY</i><i class=\"t-US-arrow-oneway t-c-black\" style=\"-webkit-transform:scale(.5) translate(0,45%) rotate(90deg);-moz-transform:scale(.5) translate(0,45%) rotate(90deg);transform:scale(.5) translate(0,45%) rotate(90deg)\"></i></span>","single-reverse-curve":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-orange\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-single-2-reverse-curve t-c-black\"></i></span>","school":"<span class=\"t\"><i class=\"t-school t-c-black\"></i><i class=\"t-school t-c-fluogreen\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-children t-c-black\"></i></span>","school_v2":"<span class=\"t\"><i class=\"t-school t-c-black\"></i><i class=\"t-school t-c-yellow\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-children t-c-black\"></i></span>","turn-curve-left-with-speed":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-l-curve t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i><i class=\"t-turn-curve-speed t-c-black\" style=\"-webkit-transform:scale(.9) scale(-1,1);-moz-transform:scale(.9) scale(-1,1);transform:scale(.9) scale(-1,1)\"></i></span>","turn-curve-right-with-speed":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-l-curve t-c-black\" style=\"-webkit-transform:scale(.9) scale(-1,1);-moz-transform:scale(.9) scale(-1,1);transform:scale(.9) scale(-1,1)\"></i><i class=\"t-turn-curve-speed t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","merging-traffic":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-merge t-c-black\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/glyphs.json b/vendor/assets/iD/iD/traffico/glyphs.json
deleted file mode 100644 (file)
index 3f5d800..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-{
-  "name": "traffico",
-  "glyphs": {
-    "DE-arrow-up":"\uf100",
-    "US-arrow-oneway":"\uf101",
-    "US-arrow-up":"\uf102",
-    "added-lane":"\uf103",
-    "added-lane-entering-roadway":"\uf104",
-    "airplane":"\uf105",
-    "arrow-l":"\uf106",
-    "arrow-oneway":"\uf107",
-    "arrow-s-l":"\uf108",
-    "arrows_both_bra":"\uf109",
-    "bending-priority":"\uf10a",
-    "bicycle":"\uf10b",
-    "bicycle-slippery":"\uf10c",
-    "bump":"\uf10d",
-    "bump_bra":"\uf10e",
-    "bump_road_bra":"\uf10f",
-    "bumps":"\uf110",
-    "bus":"\uf111",
-    "car":"\uf112",
-    "children":"\uf113",
-    "children-au":"\uf114",
-    "circle-bar-rounded":"\uf115",
-    "circle-bg":"\uf116",
-    "circle-o":"\uf117",
-    "circle-separator":"\uf118",
-    "cliff":"\uf119",
-    "cross-roads":"\uf11a",
-    "crossroads-ahead":"\uf11b",
-    "crossroads-ahead-ontario":"\uf11c",
-    "curve-r-l":"\uf11d",
-    "cyclists_crossing_bra":"\uf11e",
-    "d-curve-l":"\uf11f",
-    "dead-end":"\uf120",
-    "descent":"\uf121",
-    "disabled-p":"\uf122",
-    "divided-highway":"\uf123",
-    "domestic-animal":"\uf124",
-    "domestic-animals-au":"\uf125",
-    "emu":"\uf126",
-    "end":"\uf127",
-    "equestrian":"\uf128",
-    "europe_stars":"\uf129",
-    "exclamation":"\uf12a",
-    "falling-rocks-EU":"\uf12b",
-    "falling-rocks-US":"\uf12c",
-    "falling-rocks-au":"\uf12d",
-    "fire-station":"\uf12e",
-    "firemans-car":"\uf12f",
-    "flaggers":"\uf130",
-    "footpath":"\uf131",
-    "h":"\uf132",
-    "h-align-l":"\uf133",
-    "hairpin-curve":"\uf134",
-    "hairpin-curve-au":"\uf135",
-    "hazardous-material":"\uf136",
-    "height":"\uf137",
-    "height-restriction-ca":"\uf138",
-    "highway-divided":"\uf139",
-    "hitch-hiking":"\uf13a",
-    "kangaroo":"\uf13b",
-    "koala-ugly":"\uf13c",
-    "koalas":"\uf13d",
-    "level-crossing":"\uf13e",
-    "light-rail":"\uf13f",
-    "lightground-railroad-crossing":"\uf140",
-    "loop-270":"\uf141",
-    "loose_road_surface_bra":"\uf142",
-    "lorry":"\uf143",
-    "lorry-left":"\uf144",
-    "low-clearance":"\uf145",
-    "merge":"\uf146",
-    "metric-clearance":"\uf147",
-    "moped":"\uf148",
-    "motorbike":"\uf149",
-    "narrow-bridge-au":"\uf14a",
-    "narrow-bridge-us":"\uf14b",
-    "narrow-road-both":"\uf14c",
-    "narrow-road-l":"\uf14d",
-    "no-l-or-u-turn":"\uf14e",
-    "octagon":"\uf14f",
-    "offset-roads":"\uf150",
-    "opening-swing-bridge-ca":"\uf151",
-    "parking":"\uf152",
-    "pass-either-us":"\uf153",
-    "pass-l-r":"\uf154",
-    "pavement-ends":"\uf155",
-    "pedestrian":"\uf156",
-    "pedestrian-crossing":"\uf157",
-    "pedestrian-crossing-au":"\uf158",
-    "pedestrian_bra":"\uf159",
-    "pedestrian_crossing_bra":"\uf15a",
-    "pedestrians":"\uf15b",
-    "play-ground":"\uf15c",
-    "playground-ahead-ca":"\uf15d",
-    "playground-br":"\uf15e",
-    "pretzel-loop":"\uf15f",
-    "railroad":"\uf160",
-    "railroad-barriers":"\uf161",
-    "railway-flashing-au":"\uf162",
-    "railway-xing-secured":"\uf163",
-    "railway-xing-unsecured":"\uf164",
-    "reverse-curve-au":"\uf165",
-    "reverse-curve-ontario":"\uf166",
-    "right-of-way":"\uf167",
-    "right-of-way-l":"\uf168",
-    "roadworks":"\uf169",
-    "roadworks_bra":"\uf16a",
-    "rollerblading":"\uf16b",
-    "roundabout":"\uf16c",
-    "school":"\uf16d",
-    "school_zone_bra":"\uf16e",
-    "series-of-curves-left":"\uf16f",
-    "share-road":"\uf170",
-    "share-roads":"\uf171",
-    "side-road-a-a-l":"\uf172",
-    "side-road-a-a-r":"\uf173",
-    "side-road-p-l":"\uf174",
-    "side-road-p-r":"\uf175",
-    "side-road-perpendicular":"\uf176",
-    "single-2-reverse-curve":"\uf177",
-    "skewed-railroads":"\uf178",
-    "slippery":"\uf179",
-    "slippery-motorcycle":"\uf17a",
-    "slippery-road":"\uf17b",
-    "small-arrow-au":"\uf17c",
-    "snowflake":"\uf17d",
-    "square-angular":"\uf17e",
-    "square-diagonal-bar":"\uf17f",
-    "square-rounded":"\uf180",
-    "steep-hill":"\uf181",
-    "steep-hill-downwards":"\uf182",
-    "steep-hill-upwards":"\uf183",
-    "stop":"\uf184",
-    "t-roads":"\uf185",
-    "tractor":"\uf186",
-    "traffic-signal-au":"\uf187",
-    "trailer":"\uf188",
-    "train-au":"\uf189",
-    "train-electric":"\uf18a",
-    "tram":"\uf18b",
-    "transit_bra":"\uf18c",
-    "tri-angular":"\uf18d",
-    "tri-rounded":"\uf18e",
-    "truck":"\uf18f",
-    "truck-rollover-speed":"\uf190",
-    "trucks-rollover":"\uf191",
-    "tunnel":"\uf192",
-    "turn-90-l":"\uf193",
-    "turn-curve-speed":"\uf194",
-    "turn-l":"\uf195",
-    "turn-l-aus":"\uf196",
-    "turn-l-curve":"\uf197",
-    "turn-reverse-left":"\uf198",
-    "turn-right-curve-ontario":"\uf199",
-    "turnaround":"\uf19a",
-    "turnaround2":"\uf19b",
-    "two_way_arrows_bra":"\uf19c",
-    "u-turn":"\uf19d",
-    "u-turn-au":"\uf19e",
-    "wild-animal":"\uf19f",
-    "windbag":"\uf1a0",
-    "winding-road-left":"\uf1a1",
-    "wombat":"\uf1a2",
-    "y-roads":"\uf1a3"
-  }
-}
diff --git a/vendor/assets/iD/iD/traffico/mapillary-mappings/au.json b/vendor/assets/iD/iD/traffico/mapillary-mappings/au.json
deleted file mode 100644 (file)
index 1bc46f4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"prohibitory_speed_limit_10":"prohibitory--maximum-speed-limit-10--au","prohibitory_speed_limit_100":"prohibitory--maximum-speed-limit-100--au","prohibitory_speed_limit_110":"prohibitory--maximum-speed-limit-110--au","prohibitory_speed_limit_120":"prohibitory--maximum-speed-limit-120--au","prohibitory_speed_limit_130":"prohibitory--maximum-speed-limit-130--au","prohibitory_speed_limit_20":"prohibitory--maximum-speed-limit-20--au","prohibitory_speed_limit_30":"prohibitory--maximum-speed-limit-30--au","prohibitory_speed_limit_40":"prohibitory--maximum-speed-limit-40--au","prohibitory_speed_limit_50":"prohibitory--maximum-speed-limit-50--au","prohibitory_speed_limit_60":"prohibitory--maximum-speed-limit-60--au","prohibitory_speed_limit_70":"prohibitory--maximum-speed-limit-70--au","prohibitory_speed_limit_80":"prohibitory--maximum-speed-limit-80--au","prohibitory_speed_limit_90":"prohibitory--maximum-speed-limit-90--au","regulatory--give_way--c-australia":"regulatory--yield--au","regulatory--no_bicycles--c-australia":"regulatory--no-bicycles--au","regulatory--no_entry--c-australia":"regulatory--no-entry--au","regulatory--no_heavy_goods_vehicles--c-australia":"regulatory--no-heavy-goods-vehicles--au","regulatory--no_left_turn--c-australia":"regulatory--no-left-turn--au","regulatory--no_pedestrians--c-australia":"regulatory--no-pedestrians--au","regulatory--no_right_turn--c-australia":"regulatory--no-right-turn--au","regulatory--no_u_turn--c-australia":"regulatory--no-u-turn--au","regulatory--stop--c-australia":"regulatory--stop--au","regulatory--yield_to_oncoming_traffic--c-australia":"regulatory--yield-to-oncoming-traffic--au","warning--added_lane_left--c-australia":"warning--added-lane-left--au","warning--added_lane_right--c-australia":"warning--added-lane-right--au","warning--bump_in_road--c-australia":"warning--bump-in-road--au","warning--children--c-australia":"warning--children--au","warning--crossroads_ahead--c-australia":"warning--crossroads-ahead--au","warning--curve_left--c-australia":"warning--curve-left-ahead--au","warning--curve_right--c-australia":"warning--curve-right-ahead--au","warning--cyclists_crossing--c-australia":"warning--cyclists-crossing--au","warning--dip_in_road--c-australia":"warning--dip-in-road--au","warning--divided_highway_ahead--c-australia":"warning--divided-highway-ahead--au","warning--divided_highway_ends--c-australia":"warning--divided-highway-ends--au","warning--domestic_animals--c-australia":"warning--domestic-animals--au","warning--equestrians--c-australia":"warning--equestrians--au","warning--falling_rocks_or_debris_left--c-australia":"warning--falling-rocks-or-debris-left--au","warning--farm_vehicles--c-australia":"warning--farm-vehicles--au","warning--hairpin_curve_left--c-australia":"warning--hairpin-curve-left-ahead--au","warning--hairpin_curve_right--c-australia":"warning--hairpin-curve-right-ahead--au","warning--horizontal_alignment_left":"warning--horizontal-alignment-left--au","warning--horizontal_alignment_right":"warning--horizontal-alignment-right--au","warning--koala--c-australia":"warning--koala--au","warning--koala_crossing--c-australia":"warning--koala-crossing--au","warning--narrow_bridge_ahead--c-australia":"warning--narrow-bridge-ahead--au","warning--pedestrian_crossing--c-australia":"warning--pedestrian-crossing--au","warning--pedestrian_crossing__retired--c-australia":"warning--pedestrian-crossing--au--retired","warning--pedestrians_cyclists--c-australia":"warning--pedestrians-cyclists--au","warning--railway_level_crossing_with_flashing_signals_ahead--c-australia":"warning--railway-level-crossing-with-flashing-signals-ahead--au","warning--reverse_curve_first_left--c-australia":"warning--double-curve-first-left-ahead--au","warning--reverse_curve_first_right--c-australia":"warning--double-curve-first-right-ahead--au","warning--reverse_turn_first_left--c-australia":"warning--double-turn-first-left-ahead--au","warning--reverse_turn_first_right--c-australia":"warning--double-turn-first-right-ahead--au","warning--road_narrows_both_sides--c-australia":"warning--road-narrows-ahead--au","warning--roundabout_ahead--c-australia":"warning--roundabout-ahead--au","warning--side_road_perpendicular_left":"warning--junction-with-a-side-road-perpendicular-left-ahead--au","warning--side_road_perpendicular_right":"warning--junction-with-a-side-road-perpendicular-right-ahead--au","warning--slippery_road_surface--c-australia":"warning--slippery-road-surface--au","warning--steep_hill_downwards--c-australia":"warning--steep-hill-downwards--au","warning--steep_hill_upwards--c-australia":"warning--steep-hill-upwards--au","warning--stop_ahead--c-australia":"warning--stop-ahead--au","warning--traffic_signals_ahead--c-australia":"warning--traffic-signals-ahead--au","warning--truck_crossing--c-australia":"warning--truck-crossing--au","warning--turn_left--c-australia":"warning--turn-left--au","warning--turn_right--c-australia":"warning--turn-right--au","warning--two_way_traffic_ahead--c-australia":"warning--two-way-traffic-ahead--au","warning--uncontrolled_railroad_crossing_ahead--c-australia":"warning--uncontrolled-railroad-crossing-ahead--au","warning--wild_animals--c-australia":"warning--wild-animals--au","warning--winding_road_left--c-australia":"warning--winding-road-first-left-ahead--au","warning--yield_ahead--c-australia":"warning--yield-ahead--au"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/mapillary-mappings/br.json b/vendor/assets/iD/iD/traffico/mapillary-mappings/br.json
deleted file mode 100644 (file)
index dfbff00..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"mandatory--bicycles_only--c-brazil":"mandatory--bicycles-only--br","mandatory--keep_right_or_left--c-brazil":"mandatory--keep-right--br","mandatory--proceed_straight_no_turns--c-brazil":"mandatory--proceed-straight--br","mandatory--transit_only--c-brazil":"mandatory--transit-only--br","mandatory--turn_right--c-brazil":"mandatory--turn-right--br","other--parking_zone--c-brazil":"information--parking--br","other--two-way_traffic--c-brazil":"information--two-way-traffic--br","prohibitory_speed_limit_10":"prohibitory--maximum-speed-limit-10--br","prohibitory_speed_limit_100":"prohibitory--maximum-speed-limit-100--br","prohibitory_speed_limit_110":"prohibitory--maximum-speed-limit-110--br","prohibitory_speed_limit_120":"prohibitory--maximum-speed-limit-120--br","prohibitory_speed_limit_130":"prohibitory--maximum-speed-limit-130--br","prohibitory_speed_limit_20":"prohibitory--maximum-speed-limit-20--br","prohibitory_speed_limit_30":"prohibitory--maximum-speed-limit-30--br","prohibitory_speed_limit_40":"prohibitory--maximum-speed-limit-40--br","prohibitory_speed_limit_50":"prohibitory--maximum-speed-limit-50--br","prohibitory_speed_limit_60":"prohibitory--maximum-speed-limit-60--br","prohibitory_speed_limit_70":"prohibitory--maximum-speed-limit-70--br","prohibitory_speed_limit_80":"prohibitory--maximum-speed-limit-80--br","prohibitory_speed_limit_90":"prohibitory--maximum-speed-limit-90--br","regulatory--give_way--c-brazil":"regulatory--yield--br","regulatory--no_bicycles--c-brazil":"regulatory--no-bicycles--br","regulatory--no_entry--c-brazil":"regulatory--no-entry--br","regulatory--no_heavy_goods_vehicles--c-brazil":"regulatory--no-heavy-goods-vehicles--br","regulatory--no_motor_vehicles--c-brazil":"regulatory--no-motor-vehicles--br","regulatory--no_motorcycles--c-brazil":"regulatory--no-motorcycles--br","regulatory--no_overtaking--c-brazil":"regulatory--no-overtaking--br","regulatory--no_parking--c-brazil":"regulatory--no-parking--br","regulatory--no_pedestrians--c-brazil":"regulatory--no-pedestrians--br","regulatory--no_stopping--c-brazil":"regulatory--no-stopping--br","regulatory--stop--c-brazil":"regulatory--stop--br","regulatory_national_network_lane":"regulatory--national-network-lane--br","regulatory_no_left_or_u_turn":"regulatory--no-left-or-u-turn--br","regulatory_no_left_turn":"regulatory--no-left-turn--br","regulatory_no_parking":"regulatory--no-parking--br--v1","regulatory_no_pedestrian_crossing":"regulatory--no-pedestrians--br","regulatory_no_rollerblading":"regulatory--no-rollerblading--br","regulatory_no_straight_through":"regulatory--no-straight-through--br","regulatory_no_trucks":"regulatory--no-heavy-goods-vehicles--br--v1","regulatory_no_turn_right":"regulatory--no-right-turn--br","regulatory_no_u_turn":"regulatory--no-u-turn--br","regulatory_stop":"regulatory--stop--br","school_school":"school--school--br","school_school_obsolete":"school--school-obsolete--br","warning--bump_in_road--c-brazil":"warning--bump-in-road--br","warning--cyclists_crossing--c-brazil":"warning--cyclists-crossing--br","warning--domestic_animals--c-brazil":"warning--domestic-animals--br","warning--falling_rocks_or_debris--c-brazil":"warning--falling-rocks-or-debris-right--br","warning--farm_vehicles--c-brazil":"warning--farm-vehicles--br","warning--loose_road_surface--c-brazil":"warning--loose-road-surface--br","warning--pedestrian_crossing--c-brazil":"warning--pedestrian-crossing--br","warning--road_narrows_ahead--c-brazil":"warning--road-narrows-ahead--br","warning--roadworks--c-brazil":"warning--workers-in-road-ahead--br","warning--school_zone--c-brazil":"warning--school-zone--br","warning--slippery_road_surface--c-brazil":"warning--slippery-road-surface--br","warning--stop_ahead--c-brazil":"warning--stop-ahead--br","warning--two-way_traffic_ahead--c-brazil":"warning--two-way-traffic-ahead--br","warning--uneven_road--c-brazil":"warning--uneven-road--br","warning--wild_animals--c-brazil":"warning--wild-animals--br","warning_Y_roads":"warning--y-roads--br","warning_added_lanes":"warning--added-lane-right--br","warning_bicycles":"warning--cyclists-crossing--br","warning_cross_roads":"warning--crossroads-ahead--br","warning_curve_reverse_left":"warning--double-curve-first-left-ahead--br","warning_curve_reverse_right":"warning--double-curve-first-right-ahead--br","warning_double_reverse_curve":"warning--double-reverse-curve--br","warning_flaggers_in_road_ahead":"warning--flaggers-in-road-ahead--br","warning_highway_divided":"warning--divided-highway-ahead--br","warning_horizontal_alignment_right":"warning--horizontal-alignment-right--br","warning_intersection_circular":"warning--roundabout-ahead--br","warning_loop_pretzel":"warning--loop-pretzel--br","warning_low_clearance":"warning--height-restriction-ahead--br--feet","warning_merge":"warning--traffic-merges-right-ahead--br","warning_pass_left_or_right":"warning--pass-left-or-right--br","warning_pedestrian_crossing":"warning--pedestrian-crossing--br","warning_play_ground":"warning--playground-ahead--br","warning_road_narrows_both_sides":"warning--road-narrows-ahead--br","warning_road_narrows_left":"warning--road-narrows-left-ahead--br","warning_road_narrows_right":"warning--road-narrows-right-ahead--br","warning_side_road_acute_angle_left":"warning--junction-with-a-side-road-acute-left-ahead--br","warning_side_road_perpendicular_left":"warning--junction-with-a-side-road-perpendicular-left-ahead--br","warning_side_road_perpendicular_right":"warning--junction-with-a-side-road-perpendicular-right-ahead--br","warning_slippery":"warning--slippery-road-surface--br","warning_t_roads":"warning--t-roads--br","warning_traffic_light":"warning--traffic-signals-ahead--br","warning_triple_2_reverse_curve":"warning--triple-reverse-curve--br","warning_trucks_rollover":"warning--trucks-rollover--br","warning_turn_curve_left":"warning--turn-curve-left--br","warning_turn_curve_right":"warning--turn-curve-right--br","warning_turn_left":"warning--turn-left--br","warning_turn_reverse_left":"warning--double-turn-first-left-ahead--br","warning_turn_reverse_right":"warning--double-turn-first-right-ahead--br","warning_turn_right":"warning--turn-right--br","warning_winding_road":"warning--winding-road-first-right-ahead--br","warning_winding_road_left":"warning--winding-road-first-left-ahead--br","warning_winding_road_right":"warning--winding-road-first-right-ahead--br","warning_workers_in_road_ahead":"warning--workers-in-road-ahead--br"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/mapillary-mappings/ca.json b/vendor/assets/iD/iD/traffico/mapillary-mappings/ca.json
deleted file mode 100644 (file)
index 368e033..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"mandatory--pass_either_side--c-canada":"mandatory--pass-on-either-side--ca","regulatory--no_bicycles--c-canada":"regulatory--no-bicycles--ca","regulatory--no_entry--c-canada":"regulatory--no-entry--ca","regulatory--no_heavy_goods_vehicles--c-canada":"regulatory--no-heavy-goods-vehicles--ca","regulatory--no_left_turn--c-canada":"regulatory--no-left-turn--ca","regulatory--no_motor_vehicles--c-canada":"regulatory--no-motor-vehicles--ca","regulatory--no_motorcycles--c-canada":"regulatory--no-motorcycles--ca","regulatory--no_overtaking--c-canada":"regulatory--no-overtaking--ca","regulatory--no_parking--c-canada":"regulatory--no-parking--ca","regulatory--no_pedestrians--c-canada":"regulatory--no-pedestrians--ca","regulatory--no_right_turn--c-canada":"regulatory--no-right-turn--ca","regulatory--no_stopping--c-canada":"regulatory--no-stopping--ca","regulatory--no_u_turn--c-canada":"regulatory--no-u-turn--ca","regulatory--speed_limit_10--c-canada":"regulatory--maximum-speed-limit-10--ca","regulatory--speed_limit_100--c-canada":"regulatory--maximum-speed-limit-100--ca","regulatory--speed_limit_110--c-canada":"regulatory--maximum-speed-limit-110--ca","regulatory--speed_limit_120--c-canada":"regulatory--maximum-speed-limit-120--ca","regulatory--speed_limit_15--c-canada":"regulatory--maximum-speed-limit-15--ca","regulatory--speed_limit_20--c-canada":"regulatory--maximum-speed-limit-20--ca","regulatory--speed_limit_25--c-canada":"regulatory--maximum-speed-limit-25--ca","regulatory--speed_limit_30--c-canada":"regulatory--maximum-speed-limit-30--ca","regulatory--speed_limit_35--c-canada":"regulatory--maximum-speed-limit-35--ca","regulatory--speed_limit_40--c-canada":"regulatory--maximum-speed-limit-40--ca","regulatory--speed_limit_45--c-canada":"regulatory--maximum-speed-limit-45--ca","regulatory--speed_limit_5--c-canada":"regulatory--maximum-speed-limit-5--ca","regulatory--speed_limit_50--c-canada":"regulatory--maximum-speed-limit-50--ca","regulatory--speed_limit_55--c-canada":"regulatory--maximum-speed-limit-55--ca","regulatory--speed_limit_60--c-canada":"regulatory--maximum-speed-limit-60--ca","regulatory--speed_limit_65--c-canada":"regulatory--maximum-speed-limit-65--ca","regulatory--speed_limit_70--c-canada":"regulatory--maximum-speed-limit-70--ca","regulatory--speed_limit_75--c-canada":"regulatory--maximum-speed-limit-75--ca","regulatory--speed_limit_80--c-canada":"regulatory--maximum-speed-limit-80--ca","regulatory--speed_limit_85--c-canada":"regulatory--maximum-speed-limit-85--ca","regulatory--speed_limit_90--c-canada":"regulatory--maximum-speed-limit-90--ca","regulatory--stop--c-canada":"regulatory--stop--ca","warning--bump_in_road--c-canada":"warning--bump-in-road--ca","warning--crossroads_ahead--c-canada":"warning--crossroads-ahead--ca","warning--crossroads_ahead--c-canada_ontario":"warning--crossroads-ahead--ca--ontario","warning--curve_left--c-canada":"warning--curve-left-ahead--ca","warning--curve_left--c-canada_ontario":"warning--curve-left-ahead--ca--ontario","warning--curve_reverse_left--c-canada_ontario":"warning--double-curve-first-left-ahead--ca--ontario","warning--curve_reverse_right--c-canada_ontario":"warning--double-curve-first-right-ahead--ca--ontario","warning--curve_right--c-canada":"warning--curve-right-ahead--ca","warning--curve_right--c-canada_ontario":"warning--curve-right-ahead--ca--ontario","warning--cyclists_crossing--c-canada":"warning--cyclists-crossing--ca","warning--dip_in_road--c-canada":"warning--dip-in-road--ca","warning--divided_highway_ahead--c-canada":"warning--divided-highway-ahead--ca","warning--divided_highway_ends--c-canada":"warning--divided-highway-ends--ca","warning--domestic_animals--c-canada":"warning--domestic-animals--ca","warning--emergency_vehicles--c-canada":"warning--emergency-vehicles--ca","warning--equestrians--c-canada":"warning--equestrians--ca","warning--falling_rocks--c-canada":"warning--falling-rocks-or-debris-right--ca","warning--farm_vehicles--c-canada":"warning--farm-vehicles--ca","warning--hairpin_curve_right_ahead--c-canada":"warning--hairpin-curve-right-ahead--ca","warning--hairpin_curve_right_ahead--c-canada_ontario":"warning--hairpin-curve-right-ahead--ca--ontario","warning--level_railroad_crossing_with_barriers_ahead--c-canada":"warning--level-railroad-crossing-with-barriers-ahead--ca","warning--loose_road_surface--c-canada":"warning--loose-road-surface--ca","warning--low_clearance--c-canada":"warning--height-restriction-ahead--ca--feet","warning--metric_clearance--c-canada":"warning--height-restriction-ahead--ca--meters","warning--narrow_bridge_ahead--c-canada":"warning--narrow-bridge-ahead--ca","warning--opening_or_swing_bridge--c-canada":"warning--opening-or-swing-bridge--ca","warning--pavement_ends--c-canada":"warning--pavement-ends--ca","warning--pedestrian_crossing--c-canada":"warning--pedestrian-crossing--ca","warning--pedestrian_crossing--c-canada_quebec":"warning--pedestrian-crossing--ca--quebec","warning--play_ground--c-canada":"warning--playground-ahead--ca","warning--road_narrows_both_sides--c-canada":"warning--road-narrows-ahead--ca","warning--road_narrows_left--c-canada":"warning--road-narrows-left-ahead--ca","warning--road_narrows_right--c-canada":"warning--road-narrows-right-ahead--ca","warning--roundabout_ahead--c-canada":"warning--roundabout-ahead--ca","warning--shared_road_motocycles_cyclists--c-canada":"warning--shared-road-motocycles-cyclists--ca","warning--side_road_perpendicular_left--c-canada":"warning--junction-with-a-side-road-perpendicular-left-ahead--ca","warning--side_road_perpendicular_left--c-canada_ontario":"warning--junction-with-a-side-road-perpendicular-left-ahead--ca--ontario","warning--side_road_perpendicular_right--c-canada":"warning--junction-with-a-side-road-perpendicular-right-ahead--ca","warning--side_road_perpendicular_right--c-canada_ontario":"warning--junction-with-a-side-road-perpendicular-right-ahead--ca--ontario","warning--slippery_road_surface--c-canada":"warning--slippery-road-surface--ca","warning--steep_hill_downwards--c-canada":"warning--steep-hill-downwards--ca","warning--steep_hill_upwards--c-canada":"warning--steep-hill-upwards--ca","warning--stop_ahead--c-canada":"warning--stop-ahead--ca","warning--stop_ahead--c-canada_ontario":"warning--stop-ahead--ca--ontario","warning--traffic_merges_left_ahead--c-canada":"warning--traffic-merges-left-ahead--ca","warning--traffic_merges_left_ahead--c-canada_ontario":"warning--traffic-merges-left-ahead--ca--ontario","warning--traffic_merges_right_ahead--c-canada":"warning--traffic-merges-right-ahead--ca","warning--traffic_merges_right_ahead--c-canada_ontario":"warning--traffic-merges-right-ahead--ca--ontario","warning--traffic_signals_ahead--c-canada":"warning--traffic-signals-ahead--ca","warning--tunnel_ahead--c-canada":"warning--tunnel-ahead--ca","warning--turn_left--c-canada":"warning--turn-left--ca","warning--turn_reverse_left--c-canada":"warning--double-turn-first-left-ahead--ca","warning--turn_reverse_right--c-canada":"warning--double-turn-first-right-ahead--ca","warning--turn_right--c-canada":"warning--turn-right--ca","warning--two_way_traffic_ahead--c-canada":"warning--two-way-traffic-ahead--ca","warning--uncontrolled_railroad_crossing_ahead--c-canada":"warning--uncontrolled-railroad-crossing-ahead--ca","warning--uneven_road--c-canada":"warning--uneven-road--ca","warning--wild_animals--c-canada":"warning--wild-animals--ca","warning--winding_road_left--c-canada":"warning--winding-road-first-left-ahead--ca","warning--winding_road_right--c-canada":"warning--winding-road-first-right-ahead--ca","warning--workers_in_road_ahead--c-canada":"warning--workers-in-road-ahead--ca","warning--yield_ahead--c-canada":"warning--yield-ahead--ca"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/mapillary-mappings/eu.json b/vendor/assets/iD/iD/traffico/mapillary-mappings/eu.json
deleted file mode 100644 (file)
index 32899ab..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"danger--cycle_crossing--c-finland":"danger--cyclists-crossing-ahead--fi","danger--cycle_crossing--c-italy":"danger--cyclists-crossing-ahead--it","danger--cycle_crossing--c-sweden":"danger--cyclists-crossing-ahead--se","danger--pedestrian_crossing--c-poland":"danger--pedestrian-crossing--pl","danger--pedestrian_crossing--c-spain":"danger--pedestrian-crossing--es","danger--pedestrian_crossing--c-sweden":"danger--pedestrian-crossing--se","danger--quayside_or_ferry_berth--c-germany":"danger--unprotected-quayside-or-riverbank--de","danger--school_crossing--c-england":"danger--children--uk","danger--school_crossing--c-italy":"danger--children--it","danger--school_crossing--c-sweden":"danger--children--se","danger_animals":"danger--wild-animals--de","danger_bend_first_left":"danger--double-curve-first-left--de","danger_bend_first_right":"danger--double-curve-first-right--de","danger_bend_left":"danger--curve-left--de","danger_bend_right":"danger--curve-right--de","danger_construction":"danger--roadworks-ahead--de","danger_crossroads_with_priority_to_the_right":"danger--crossroads-with-priority-to-the-right--de","danger_cycle_crossing":"danger--cyclists-crossing-ahead--de","danger_danger":"danger--other-danger--de","danger_intersection":"danger--crossroads-ahead--de","danger_next_intersection_left":"danger--junction-with-a-side-road-perpendicular-left--de","danger_next_intersection_right":"danger--junction-with-a-side-road-perpendicular-right--de","danger_pedestrian_crossing":"danger--pedestrian-crossing--de","danger_road_bump":"danger--road-bump--de","danger_road_narrows":"danger--road-narrows-ahead--de","danger_road_narrows_left":"danger--road-narrows-left-ahead--de","danger_road_narrows_right":"danger--road-narrows-right-ahead--de","danger_road_works":"danger--roadworks-ahead--de","danger_roundabout_ahead":"danger--roundabout-ahead--de","danger_school_crossing":"danger--children--de","danger_slippery_road":"danger--slippery-road-surface--de","danger_traffic_signal":"danger--traffic-signals-ahead--de","danger_two_way_traffic_ahead":"danger--two-way-traffic-ahead--de","danger_uneven_road":"danger--uneven-road-ahead--de","information--bus_stop--c-germany":"information--bus-stop--de","information_disable_persons":"information--disabled-persons--de","information_parking":"information--parking--de","information_pedestrian_crossing":"information--pedestrian-crossing--de","mandatory--footpath--c-greece":"mandatory--pedestrians-only--gr","mandatory--footpath--c-italy":"mandatory--pedestrians-only--it","mandatory--turn_right--c-italy":"mandatory--turn-right-ahead--it","mandatory_cycle_pedestrian_dual_track":"mandatory--dual-path-pedestrians-and-cyclists--de","mandatory_cycle_track":"mandatory--bicycles-only--de","mandatory_footpath":"mandatory--pedestrians-only--de","mandatory_go_left":"mandatory--turn-left--de","mandatory_go_left_or_right":"mandatory--pass-on-either-side--de","mandatory_go_left_or_straight":"mandatory--proceed-straight-or-turn-left--de","mandatory_go_right":"mandatory--turn-right--de","mandatory_go_right_or_straight":"mandatory--proceed-straight-or-turn-right--de","mandatory_go_straight":"mandatory--proceed-straight--de","mandatory_keep_left":"mandatory--pass-on-this-side-left--de","mandatory_keep_right":"mandatory--pass-on-this-side-right--de","mandatory_pedestrian_cycle_dual_track":"mandatory--dual-path-cyclists-and-pedestrians--de","mandatory_pedestrian_cycle_track":"mandatory--shared-path-pedestrians-and-cyclists--de","mandatory_roundabout":"mandatory--roundabout--de","mandatory_turn_left":"mandatory--turn-left-ahead--de","mandatory_turn_right":"mandatory--turn-right-ahead--de","other_give_way":"priority--give-way--de","other_no_entry":"prohibitory--no-entry--de","other_priority_road":"priority--priority-road--de","priority--give_way_to_oncoming_vehicles--c-sweden":"priority--give-way-to-oncoming-traffic--se","priority_give_way_to_oncoming_vehicles":"priority--give-way-to-oncoming-traffic--de","priority_stop":"priority--stop--de","prohibitory--no_cycles--c-sweden":"prohibitory--no-bicycles--se","prohibitory--no_overtaking--c-russia":"prohibitory--no-overtaking--ru","prohibitory--no_pedestrian--c-sweden":"prohibitory--no-pedestrians--se","prohibitory_no_motor_vehicles":"prohibitory--no-motor-vehicles--de","prohibitory_no_motorcycles":"prohibitory--no-motorcycles--de","prohibitory_no_parking":"prohibitory--no-parking--de","prohibitory_no_parking_or_stopping":"prohibitory--no-stopping-or-parking--de","prohibitory_no_traffic_both_ways":"prohibitory--no-traffic-both-ways--de","prohibitory_no_trucks":"prohibitory--no-heavy-goods-vehicles--de","prohibitory_no_u_turn":"prohibitory--no-u-turn--de","prohibitory_no_vehicle_with_dangerous_goods":"prohibitory--no-vehicles-carrying-dangerous-goods--de","prohibitory_noturn_left":"prohibitory--no-left-turn--de","prohibitory_noturn_right":"prohibitory--no-right-turn--de","prohibitory_on_overtaking":"prohibitory--no-overtaking--de","prohibitory_on_overtaking_trucks":"prohibitory--no-overtaking-by-heavy-goods-vehicles--de","prohibitory_speed_limit_10":"prohibitory--maximum-speed-limit-10--de","prohibitory_speed_limit_100":"prohibitory--maximum-speed-limit-100--de","prohibitory_speed_limit_110":"prohibitory--maximum-speed-limit-110--de","prohibitory_speed_limit_120":"prohibitory--maximum-speed-limit-120--de","prohibitory_speed_limit_130":"prohibitory--maximum-speed-limit-130--de","prohibitory_speed_limit_20":"prohibitory--maximum-speed-limit-20--de","prohibitory_speed_limit_30":"prohibitory--maximum-speed-limit-30--de","prohibitory_speed_limit_40":"prohibitory--maximum-speed-limit-40--de","prohibitory_speed_limit_50":"prohibitory--maximum-speed-limit-50--de","prohibitory_speed_limit_60":"prohibitory--maximum-speed-limit-60--de","prohibitory_speed_limit_70":"prohibitory--maximum-speed-limit-70--de","prohibitory_speed_limit_80":"prohibitory--maximum-speed-limit-80--de","prohibitory_speed_limit_90":"prohibitory--maximum-speed-limit-90--de","prohibitory_vehicle_height_limit":"prohibitory--maximum-height--de","prohibitory_vehicle_width_limit":"prohibitory--maximum-width--de"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/mapillary-mappings/us.json b/vendor/assets/iD/iD/traffico/mapillary-mappings/us.json
deleted file mode 100644 (file)
index f2ae81e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"mandatory_pass_either_side":"mandatory--pass-on-either-side--us","regulatory_give_way":"regulatory--yield--us","regulatory_no_bicycles":"regulatory--no-bicycles--us","regulatory_no_entry":"regulatory--no-entry--us","regulatory_no_left_or_u_turn":"regulatory--no-left-or-u-turn--us","regulatory_no_left_turn":"regulatory--no-left-turn--us","regulatory_no_left_turn__v2":"regulatory--no-left-turn--us--v1","regulatory_no_parking":"regulatory--no-parking--us","regulatory_no_pedestrian_crossing":"regulatory--no-pedestrians--us","regulatory_no_right_turn__v2":"regulatory--no-right-turn--us--v1","regulatory_no_straight_through":"regulatory--no-straight-through--us","regulatory_no_trucks":"regulatory--no-heavy-goods-vehicles--us","regulatory_no_turn_right":"regulatory--no-right-turn--us","regulatory_no_u_turn":"regulatory--no-u-turn--us","regulatory_no_u_turn__v2":"regulatory--no-u-turn--us--v1","regulatory_speed_limit_10":"regulatory--maximum-speed-limit-10--us","regulatory_speed_limit_15":"regulatory--maximum-speed-limit-15--us","regulatory_speed_limit_20":"regulatory--maximum-speed-limit-20--us","regulatory_speed_limit_25":"regulatory--maximum-speed-limit-25--us","regulatory_speed_limit_30":"regulatory--maximum-speed-limit-30--us","regulatory_speed_limit_35":"regulatory--maximum-speed-limit-35--us","regulatory_speed_limit_40":"regulatory--maximum-speed-limit-40--us","regulatory_speed_limit_45":"regulatory--maximum-speed-limit-45--us","regulatory_speed_limit_50":"regulatory--maximum-speed-limit-50--us","regulatory_speed_limit_55":"regulatory--maximum-speed-limit-55--us","regulatory_speed_limit_60":"regulatory--maximum-speed-limit-60--us","regulatory_speed_limit_65":"regulatory--maximum-speed-limit-65--us","regulatory_speed_limit_70":"regulatory--maximum-speed-limit-70--us","regulatory_speed_limit_75":"regulatory--maximum-speed-limit-75--us","regulatory_speed_limit_80":"regulatory--maximum-speed-limit-80--us","regulatory_speed_limit_85":"regulatory--maximum-speed-limit-85--us","regulatory_stop":"regulatory--stop--us","warning_T_roads":"warning--t-roads--us","warning_Y_roads":"warning--y-roads--us","warning_added_lane_from_entering_roadway":"warning--added-lane-from-entering-roadway--us","warning_added_lanes":"warning--added-lane-right--us","warning_bicycle_slippery":"warning--slippery-bicycles--us","warning_crossroads_ahead":"warning--crossroads-ahead--us","warning_curve_reverse_left":"warning--double-curve-first-left-ahead--us","warning_curve_reverse_right":"warning--double-curve-first-right-ahead--us","warning_cyclists_crossing":"warning--cyclists-crossing--us","warning_double_reverse_curve":"warning--double-reverse-curve--us","warning_falling_rocks":"warning--falling-rocks-or-debris-right--us","warning_fire_station":"warning--emergency-vehicles--us","warning_flaggers_in_road_ahead":"warning--flaggers-in-road-ahead--us","warning_hairpin_curve":"warning--hairpin-curve-right-ahead--us","warning_highway_divided":"warning--divided-highway-ahead--us","warning_horizontal_alignment_left":"warning--horizontal-alignment-left--us","warning_horizontal_alignment_right":"warning--horizontal-alignment-right--us","warning_intersection_circular":"warning--roundabout-ahead--us","warning_light_rail_crossing":"warning--tram-crossing--us","warning_loop_270_degree":"warning--loop-270-degree--us","warning_loop_pretzel":"warning--loop-pretzel--us","warning_low_clearance":"warning--height-restriction-ahead--us--feet","warning_merge":"warning--traffic-merges-right-ahead--us","warning_metric_clearance":"warning--height-restriction-ahead--us--meters","warning_motorcycle_crossing":"warning--motorcycle-crossing--us","warning_narrow_bridge_ahead":"warning--narrow-bridge-ahead--us","warning_offset_roads":"warning--offset-roads--us","warning_pass_left_or_right":"warning--pass-left-or-right--us","warning_pedestrian_crossing":"warning--pedestrian-crossing--us","warning_play_ground":"warning--playground-ahead--us","warning_railroad":"warning--uncontrolled-railroad-crossing-ahead--us","warning_road_narrows_both_sides":"warning--road-narrows-ahead--us","warning_road_narrows_left":"warning--road-narrows-left-ahead--us","warning_road_narrows_right":"warning--road-narrows-right-ahead--us","warning_side_road_acute_angle_left":"warning--junction-with-a-side-road-acute-left-ahead--us","warning_side_road_acute_angle_right":"warning--junction-with-a-side-road-acute-right-ahead--us","warning_side_road_perpendicular_left":"warning--junction-with-a-side-road-perpendicular-left-ahead--us","warning_side_road_perpendicular_right":"warning--junction-with-a-side-road-perpendicular-right-ahead--us","warning_slippery":"warning--slippery-road-surface--us","warning_steep_hill_downwards":"warning--steep-hill-downwards--us","warning_stop_ahead":"warning--stop-ahead--us","warning_traffic_light":"warning--traffic-signals-ahead--us","warning_triple_2_reverse_curve":"warning--triple-reverse-curve--us","warning_trucks_rollover":"warning--trucks-rollover--us","warning_turn_curve_left":"warning--turn-curve-left--us","warning_turn_curve_right":"warning--turn-curve-right--us","warning_turn_left":"warning--turn-left--us","warning_turn_reverse_left":"warning--double-turn-first-left-ahead--us","warning_turn_reverse_right":"warning--double-turn-first-right-ahead--us","warning_turn_right":"warning--turn-right--us","warning_two_way_traffic_ahead":"warning--two-way-traffic-ahead--us","warning_winding_road_left":"warning--winding-road-first-left-ahead--us","warning_winding_road_right":"warning--winding-road-first-right-ahead--us","warning_workers_in_road_ahead":"warning--workers-in-road-ahead--us","warning_yield_ahead":"warning--yield-ahead--us"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/at.json b/vendor/assets/iD/iD/traffico/signs/at.json
deleted file mode 100644 (file)
index d307e26..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_at":{"category":"information","name":"European border crossing into Austria","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"ÖSTERREICH","transform":"scale(.75)"}]},"level-crossing":{"category":"danger","name":"Level crossing","variation":"other","elements":[{"type":"level-crossing","color":"red"},{"type":"level-crossing","color":"red","transform":"scale(-1,1)"},{"type":"square-angular","color":"white","transform":"rotate(60deg) scale(.05,1)"},{"type":"square-angular","color":"white","transform":"rotate(-60deg) scale(.05,1)"}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(.98) scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.2,1)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(.4)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/au.json b/vendor/assets/iD/iD/traffico/signs/au.json
deleted file mode 100644 (file)
index 1fa2224..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"maximum-speed-limit":{"category":"prohibitory","name":"Maximum speed limit","elements":[{"type":"circle-bg","color":"red"},{"type":"circle-bg","color":"white","transform":"scale(.8)"},{"type":"speed_value","color":"black"}]},"yield":{"category":"regulatory","name":"Yield/Give way","elements":[{"type":"tri-rounded","color":"red","transform":"rotate(180deg)"},{"type":"tri-rounded","color":"white","transform":"translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg)"},{"type":"content-4","content":"GIVE","color":"black","transform":"translate(0,-115%) scale(.6)"},{"type":"content-4","content":"WAY","color":"black","transform":"translate(0,-45%) scale(.6)"}]},"yield-to-oncoming-traffic":{"category":"regulatory","name":"Yield to oncoming traffic","elements":[{"type":"tri-rounded","color":"red","transform":"rotate(180deg)"},{"type":"tri-rounded","color":"white","transform":"translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg)"},{"type":"content-4","content":"GIVE","color":"black","transform":"translate(0,-115%) scale(.6)"},{"type":"content-4","content":"WAY","color":"black","transform":"translate(0,-45%) scale(.6)"}]},"no-bicycles":{"category":"regulatory","name":"No bicycles","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"bicycle","color":"black"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-entry":{"category":"regulatory","name":"No entry","elements":[{"type":"circle-bg","color":"red"},{"type":"square-angular","color":"white","transform":"scale(.92,.16)"},{"type":"content-3","content":"NO","color":"white","transform":"translate(0,-80%) scale(.5)"},{"type":"content-3","content":"ENTRY","color":"white","transform":"translate(-10%,30%) scale(.5)"}]},"no-heavy-goods-vehicles":{"category":"regulatory","name":"No heavy goods vehicles","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"truck","color":"black","transform":"scale(1.2)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-left-turn":{"category":"regulatory","name":"No left turn","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"turn-l-aus","color":"black","transform":"scale(0.55) translate(-10%, 5%)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-pedestrians":{"category":"regulatory","name":"No pedestrians","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"pedestrian_bra","color":"black","transform":"scale(.8)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-right-turn":{"category":"regulatory","name":"No right turn","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"turn-l-aus","color":"black","transform":"scale(-0.55, 0.55) translate(-10%, 5%)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-u-turn":{"category":"regulatory","name":"No u turn","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"u-turn-au","color":"black","transform":"scale(.8)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(45deg)"}]},"stop":{"category":"regulatory","name":"Stop","elements":[{"type":"octagon","color":"red"},{"type":"stop","color":"white"}]},"added-lane-left":{"category":"warning","name":"Added lane left","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"added-lane","color":"black"}]},"added-lane-right":{"category":"warning","name":"Added lane right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"added-lane","color":"black","transform":"scale(-1,1)"}]},"bump-in-road":{"category":"warning","name":"Bump in road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"bump_road_bra","color":"black","transform":"scale(.9)"}]},"children":{"category":"warning","name":"Children","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"fluogreen","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"children-au","color":"black","transform":"scale(.8)"}]},"crossroads-ahead":{"category":"warning","name":"Crossroads ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"crossroads-ahead","color":"black"}]},"curve-left-ahead":{"category":"warning","name":"Curve left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-l-curve","color":"black","transform":"scale(.9)"}]},"curve-right-ahead":{"category":"warning","name":"Curve right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-l-curve","color":"black","transform":"scale(.9) scale(-1,1)"}]},"cyclists-crossing":{"category":"warning","name":"Cyclists crossing","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"bicycle","color":"black","transform":"scale(.9)"}]},"dip-in-road":{"category":"warning","name":"Dip in road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"content-3","content":"DIP","color":"black"}]},"divided-highway-ahead":{"category":"warning","name":"Divided highway ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"divided-highway","color":"black"}]},"divided-highway-ends":{"category":"warning","name":"Divided highway ends","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"divided-highway","color":"black","transform":"scale(1,-1)"}]},"domestic-animals":{"category":"warning","name":"Domestic animals","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"domestic-animals-au","color":"black"}]},"equestrians":{"category":"warning","name":"Equestrians","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"equestrian","color":"black","transform":"scale(0.6) scale(.9)"}]},"falling-rocks-or-debris-left":{"category":"warning","name":"Falling rocks or debris left","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"falling-rocks-au","color":"black"}]},"farm-vehicles":{"category":"warning","name":"Farm vehicles","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"tractor","color":"black","transform":"scale(.45)"}]},"hairpin-curve-left-ahead":{"category":"warning","name":"Hairpin curver left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"hairpin-curve-au","color":"black","transform":" scale(0.85) scale(.9)"}]},"hairpin-curve-right-ahead":{"category":"warning","name":"Hairpin curve right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"hairpin-curve-au","color":"black","transform":" scale(-0.85, 0.85) scale(.9)"}]},"horizontal-alignment-left":{"category":"warning","name":"Horizontal alighment left","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"h-align-l","color":"black"}]},"horizontal-alignment-right":{"category":"warning","name":"Horizontal alignment right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"h-align-l","color":"black","transform":"scale(-1,1)"}]},"koala":{"category":"warning","name":"Koala","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"koala-ugly","color":"black","transform":"scale(.9)"}]},"koala-crossing":{"category":"warning","name":"Koala crossing","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"koalas","color":"black","transform":"scale(.9)"}]},"narrow-bridge-ahead":{"category":"warning","name":"Narrow bridge ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"narrow-bridge-au","color":"black","transform":"scale(.9)"}]},"pedestrian-crossing":{"category":"warning","name":"Pedestrian crossing","variation":"retired","elements":[{"type":"circle-bg","color":"black"},{"type":"circle-bg","color":"yellow","transform":"scale(.95)"},{"type":"pedestrian-crossing-au","color":"black"}]},"pedestrian-crossing_v2":{"category":"warning","name":"Pedestrian-crossing","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"school_zone_bra","color":"black","transform":"scale(-1,1)"}]},"pedestrians-cyclists":{"category":"warning","name":"Pedestrians cyclists","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"pedestrian","color":"black","transform":"scale(.8) scale(.6) translate(0,-35%) scale(-1, 1)"},{"type":"bicycle","color":"black","transform":"scale(.8) scale(.6) translate(0,35%)"}]},"railway-level-crossing-with-flashing-signals-ahead":{"category":"warning","name":"Railway level crossing with flashing signals ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"railway-flashing-au","color":"black","transform":"scale(.9) scale(0.8)"}]},"curve-first-left-ahead":{"category":"warning","name":"Double curve first left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"reverse-curve-au","color":"black","transform":"scale(.9)"}]},"double-curve-first-right-ahead":{"category":"warning","name":"Double curve first right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"reverse-curve-au","color":"black","transform":"scale(-1,1) scale(.9)"}]},"double-curve-first-left-ahead":{"category":"warning","name":"Double curve first left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"reverse-curve-au","color":"black","transform":"scale(.9)"}]},"double-turn-first-left-ahead":{"category":"warning","name":"Double turn first left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-reverse-left","color":"black","transform":"scale(.9)"}]},"double-turn-first-right-ahead":{"category":"warning","name":"Double turn first right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-reverse-left","color":"black","transform":"scale(-1,1) scale(.9)"}]},"road-narrows-ahead":{"category":"warning","name":"Road narrows ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"narrow-road-both","color":"black","transform":"scale(.9)"}]},"roundabout-ahead":{"category":"warning","name":"Roundabout ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"roundabout","color":"black","transform":"scale(-1, 1)"}]},"junction-with-a-side-road-perpendicular-left-ahead":{"category":"warning","name":"Junction with a side road perpendicular left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-perpendicular","color":"black","transform":"scale(.9)"}]},"junction-with-a-side-road-perpendicular-right-ahead":{"category":"warning","name":"Junction with a side road perpendicular right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-perpendicular","color":"black","transform":"scale(.9) scale(-1,1)"}]},"slippery-road-surface":{"category":"warning","name":"Slippery road surface","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"slippery","color":"black"}]},"steep-hill-downwards":{"category":"warning","name":"Steep hill downwards","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"steep-hill-downwards","color":"black"}]},"steep-hill-upwards":{"category":"warning","name":"Steep hill upwards","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"steep-hill-upwards","color":"black"}]},"stop-ahead":{"category":"warning","name":"Stop ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"small-arrow-au","color":"black","transform":"translate(0,-25%)"},{"type":"octagon","color":"red","transform":"translate(0,15%) scale(.4)"}]},"traffic-signals-ahead":{"category":"warning","name":"Traffic signals ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"traffic-signal-au","color":"black"}]},"truck-crossing":{"category":"warning","name":"Truck crossing","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"truck","color":"black","transform":"scale(-1,1)"}]},"turn-left":{"category":"warning","name":"turn left","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-90-l","color":"black"}]},"turn-right":{"category":"warning","name":"Turn right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-90-l","color":"black","transform":"scale(-1,1)"}]},"two-way-traffic-ahead":{"category":"warning","name":"Two way traffic ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"arrows_both_bra","color":"black","transform":"scale(.9)"}]},"uncontrolled-railroad-crossing-ahead":{"category":"warning","name":"Uncontrolled railroad crossing ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"train-au","color":"black","transform":"scale(.9)"}]},"wild-animals":{"category":"warning","name":"Wild animals","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"kangaroo","color":"black"}]},"winding-road-first-left-ahead":{"category":"warning","name":"Winding road first left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"series-of-curves-left","color":"black"}]},"winding-road-first-right-ahead":{"category":"warning","name":"Winding road first right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"series-of-curves-left","color":"black","transform":"scale(-1,1)"}]},"yield-ahead":{"category":"warning","name":"Yield ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"small-arrow-au","color":"black","transform":"translate(0,-25%)"},{"type":"tri-rounded","color":"red","transform":"translate(0, 15%) scale(.45) rotate(180deg)"},{"type":"tri-rounded","color":"white","transform":"translate(0, 12%) scale(.25) rotate(180deg)"}]},"emu-crossing":{"category":"warning","name":"Emu crossing","variation":"left","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"emu","color":"black"}]},"emu-crossing_v2":{"category":"warning","name":"Emu crossing right","variation":"right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"emu","color":"black","transform":"scale(-1,1)"}]},"slippery-motorcycles":{"category":"warning","name":"Slippery motorcycles","variation":"victoria","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"slippery-motorcycle","color":"black"}]},"traffic-merges-left-ahead":{"category":"warning","name":"Traffic merges left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"merge","color":"black","transform":"scale(-1,1)"}]},"traffic-merges-right-ahead":{"category":"warning","name":"Traffic merges right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"merge","color":"black"}]},"wombat-crossing":{"category":"warning","name":"Wombat crossing","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"wombat","color":"black"}]},"wombat-crossing_v2":{"category":"warning","name":"Wombat crossing","variation":"victoria","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"wombat","color":"black"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/be.json b/vendor/assets/iD/iD/traffico/signs/be.json
deleted file mode 100644 (file)
index a11bda4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_be_nl":{"category":"information","name":"European border crossing into Belgium from the Netherlands","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"België"}]},"information_border_be_fr":{"category":"information","name":"European border crossing into Belgium from France","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"Belgique"}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(.98) scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.2,1)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(.4)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/br.json b/vendor/assets/iD/iD/traffico/signs/br.json
deleted file mode 100644 (file)
index f32377d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"bicycles-only":{"category":"mandatory","name":"Bicycles only","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"bicycle","color":"black"}]},"proceed-straight":{"category":"mandatory","name":"Proceed straight","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"US-arrow-oneway","color":"black","transform":"scale(.6)"}]},"keep-left":{"category":"mandatory","name":"Keep left","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"US-arrow-oneway","color":"black","transform":"rotate(-135deg) scale(.6)"}]},"keep-right":{"category":"mandatory","name":"Keep right","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"US-arrow-oneway","color":"black","transform":"rotate(135deg) scale(.6)"}]},"transit-only":{"category":"mandatory","name":"Transit only","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"transit_bra","color":"black"}]},"turn-right":{"category":"mandatory","name":"Turn right","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"US-arrow-oneway","color":"black","transform":"rotate(90deg) scale(.6)"}]},"parking":{"category":"information","name":"Parking zone","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"content","color":"black","content":"E","transform":"scale(1.5) translate(0,20%)"}]},"two-way-traffic":{"category":"information","name":"Two-way traffic","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"two_way_arrows_bra","color":"black"}]},"maximum-speed-limit":{"category":"prohibitory","name":"Maximum speed limit","elements":[{"type":"circle-bg","color":"red"},{"type":"circle-bg","color":"white","transform":"scale(.8)"},{"type":"content-4","color":"black","content":"km/h","transform":"translate(0,120%) scale(.8)"},{"type":"speed_value","color":"black"}]},"yield":{"category":"regulatory","name":"Yield","elements":[{"type":"tri-rounded","color":"red","transform":"rotate(180deg)"},{"type":"tri-rounded","color":"white","transform":"translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg)"}]},"no-bicycles":{"category":"regulatory","name":"No bicycles","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"cyclists_crossing_bra","color":"black","transform":"scale(1.2)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-entry":{"category":"regulatory","name":"No entry","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"US-arrow-oneway","color":"black","transform":"scale(.6)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-heavy-goods-vehicles":{"category":"regulatory","name":"No heavy goods vehicles","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"truck","color":"black","transform":"scale(1.2)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-motor-vehicles":{"category":"regulatory","name":"No motor vehicles","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"car","color":"black","transform":"scale(.8) scale(1.3)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-motorcycles":{"category":"regulatory","name":"No motorcycles","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"motorbike","color":"black","transform":"scale(.8) scale(1.3)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-overtaking":{"category":"regulatory","name":"No overtaking","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"car","color":"black","transform":"scale(.6) translate(-26%,10%)"},{"type":"car","color":"black","transform":"scale(.6) translate(26%,10%)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-parking":{"category":"regulatory","name":"No parking","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"content","color":"black","content":"E","transform":"scale(1.5) translate(0,20%)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-pedestrians":{"category":"regulatory","name":"No pedestrians","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"pedestrian_bra","color":"black","transform":"scale(.8)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-stopping":{"category":"regulatory","name":"No stopping","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"content","color":"black","content":"E","transform":"scale(1.5) translate(0,20%)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(45deg)"}]},"stop":{"category":"regulatory","name":"Stop","elements":[{"type":"octagon","color":"red"},{"type":"content-4","content":"PARE","color":"white","transform":"scale(1)"}]},"no-left-or-u-turn":{"category":"regulatory","name":"No left or u turn","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"no-l-or-u-turn","color":"black"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-left-turn":{"category":"regulatory","name":"No left turn","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"turn-90-l","color":"black","transform":"scale(.8)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-straight-through":{"category":"regulatory","name":"No straight through","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"US-arrow-up","color":"black"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no_trucks":{"category":"regulatory","name":"no trucks","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"truck","color":"black","transform":"scale(.8)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-right-turn":{"category":"regulatory","name":"No right turn","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"turn-90-l","color":"black","transform":"scale(.8) scale(-1,1)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-u-turn":{"category":"regulatory","name":"No u turn","elements":[{"type":"circle-o","color":"red"},{"type":"u-turn","color":"black","transform":"scale(.8)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"bump-in-road":{"category":"warning","name":"bump in road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"bump_road_bra","color":"black","transform":"scale(.9)"}]},"cyclists-crossing":{"category":"warning","name":"Cyclists crossing","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"cyclists_crossing_bra","color":"black","transform":"scale(.9)"}]},"domestic-animals":{"category":"warning","name":"Domestic animals","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"domestic-animal","color":"black","transform":"translate(-10%,0%) scale(.35)"}]},"falling-rocks-or-debris-right":{"category":"warning","name":"Falling rocks or debris","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"falling-rocks-US","color":"black"}]},"farm-vehicles":{"category":"warning","name":"Farm vehicles","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"tractor","color":"black","transform":"scale(.45)"}]},"loose-road-surface":{"category":"warning","name":"Loose road surface","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"loose_road_surface_bra","color":"black","transform":"scale(.9)"}]},"pedestrian-crossing":{"category":"warning","name":"Pedestrian crossing","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"pedestrian_crossing_bra","color":"black","transform":"scale(.9)"}]},"road-narrows-ahead":{"category":"warning","name":"Road narrows ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"narrow-road-both","color":"black","transform":"scale(.9)"}]},"workers-in-road-ahead":{"category":"warning","name":"Workers in road ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"roadworks_bra","color":"black"}]},"school-zone":{"category":"warning","name":"School zone","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"school_zone_bra","color":"black"}]},"slippery-road-surface":{"category":"warning","name":"Slippery road surface","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"slippery","color":"black"}]},"stop-ahead":{"category":"warning","name":"Stop ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"content-4","color":"black","content":"PARE","transform":"scale(.9)"}]},"two-way-traffic-ahead":{"category":"warning","name":"Two-way traffic ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"arrows_both_bra","color":"black","transform":"scale(.9)"}]},"uneven-road":{"category":"warning","name":"Uneven road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"bump_bra","color":"black","transform":"scale(.9)"}]},"wild-animals":{"category":"warning","name":"Wild animals","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"wild-animal","color":"black","transform":"scale(.9) scale(.9)"}]},"y-roads":{"category":"warning","name":"Y-roads","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"y-roads","color":"black"}]},"added-lane-right":{"category":"warning","name":"Added lane right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"added-lane","color":"black"}]},"warning--added-lane-left":{"category":"warning","name":"added lane left","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"added-lane","color":"black","transform":"scale(-1,1)"}]},"double-curve-first-left-ahead":{"category":"warning","name":"Double curve first left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"reverse-curve-au","color":"black","transform":"scale(.9)"}]},"double-curve-first-right-ahead":{"category":"warning","name":"Double curve first right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"reverse-curve-au","color":"black","transform":"scale(-1,1) scale(.9)"}]},"double-reverse-curve":{"category":"warning","name":"Double reverse curve","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"orange","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"single-2-reverse-curve","color":"black","transform":"scale(.9) translate(-9%)"},{"type":"single-2-reverse-curve","color":"black","transform":"scale(.9) translate(9%)"}]},"flaggers-in-road-ahead":{"category":"warning","name":"Flaggers in road ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"flaggers","color":"black"}]},"divided-highway-ahead":{"category":"warning","name":"Divided highway ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"divided-highway","color":"black"}]},"horizontal-alignment-right":{"category":"warning","name":"Horizontal alignment right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"h-align-l","color":"black","transform":"scale(-1,1)"}]},"roundabout-ahead":{"category":"warning","name":"Roundabout ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"roundabout","color":"black"}]},"loop-pretzel":{"category":"warning","name":"Loop pretzel","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"pretzel-loop","color":"black","transform":"scale(.9)"}]},"height-restriction-ahead":{"category":"warning","name":"Height restriction ahead","variation":"feet","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"height","color":"black"},{"type":"height_value","color":"black"}]},"traffic-merges-right-ahead":{"category":"warning","name":"Traffic merges right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-a-a-r","color":"black","transform":"scale(1, -1)"}]},"pass-left-or-right":{"category":"warning","name":"Pass left or right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"pass-l-r","color":"black"}]},"playground-ahead":{"category":"warning","name":"Playground ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"playground-br","color":"black"}]},"road-narrows-left-ahead":{"category":"warning","name":"Road narrows left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"narrow-road-l","color":"black","transform":"scale(.9)"}]},"road-narrows-right-ahead":{"category":"warning","name":"Road narrows right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"narrow-road-l","color":"black","transform":"scale(.9) scale(-1,1)"}]},"junction-with-a-side-road-acute-left-ahead":{"category":"warning","name":"Junction with a side road acute left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-a-a-r","color":"black"}]},"junction-with-a-side-road-perpendicular-left-ahead":{"category":"warning","name":"Junction with a side road perpendicular left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-a-a-r","color":"black","transform":"scale(-1,1)"}]},"junction-with-a-side-road-perpendicular-right-ahead":{"category":"warning","name":"Junction with a side road perpendicular right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-p-r","color":"black"}]},"t-roads":{"category":"warning","name":"T-roads","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"t-roads","color":"black"}]},"traffic-signals-ahead":{"category":"warning","name":"Traffic signals ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(.2,.55)"},{"type":"circle-bg","color":"green","transform":"translate(0,16.5%) scale(.14)"},{"type":"circle-bg","color":"yellow","transform":"scale(.14)"},{"type":"circle-bg","color":"red","transform":"translate(0,-16.5%) scale(.14)"}]},"triple-reverse-curve":{"category":"warning","name":"Triple reverse curve","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"orange","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"single-2-reverse-curve","color":"black","transform":"scale(.9) translate(-18%)"},{"type":"single-2-reverse-curve","color":"black","transform":"scale(.9)"},{"type":"single-2-reverse-curve","color":"black","transform":"scale(.9) translate(18%)"}]},"trucks-rollover":{"category":"warning","name":"Trucks rollover","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"trucks-rollover","color":"black"}]},"turn-curve-left":{"category":"warning","name":"Turn curve left","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-l-curve","color":"black","transform":"scale(.9)"}]},"turn-curve-right":{"category":"warning","name":"Turn curve right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-l-curve","color":"black","transform":"scale(-1,1) scale(.9)"}]},"turn-left":{"category":"warning","name":"Turn left","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-90-l","color":"black"}]},"turn-right_v2":{"category":"warning","name":"Turn right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-90-l","color":"black","transform":"scale(-1,1)"}]},"double-turn-first-left-ahead":{"category":"warning","name":"Double turn first left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"reverse-curve-au","color":"black","transform":"scale(.9)"}]},"double-turn-first-right-ahead":{"category":"warning","name":"double turn first right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"reverse-curve-au","color":"black","transform":"scale(-1,1) scale(.9)"}]},"winding-road-first-left-ahead":{"category":"warning","name":"Winding road first left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"winding-road-left","color":"black"}]},"winding-road-first-right-ahead":{"category":"warning","name":"Winding road first right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"winding-road-left","color":"black","transform":"scale(-1,1)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/ca.json b/vendor/assets/iD/iD/traffico/signs/ca.json
deleted file mode 100644 (file)
index 3021a32..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"pass-on-either-side":{"category":"mandatory","name":"Pass on either side","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"pass-l-r","color":"black"}]},"no-bicycles":{"category":"regulatory","name":"No bicycles","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"bicycle","color":"black"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-entry":{"category":"regulatory","name":"No entry","elements":[{"type":"circle-bg","color":"red"},{"type":"square-angular","color":"white","transform":"scale(.92,.16)"}]},"no-heavy-goods-vehicles":{"category":"regulatory","name":"No heavy goods vehicles","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"truck","color":"black","transform":"scale(1.2)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-left-turn":{"category":"regulatory","name":"No left turn","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"turn-90-l","color":"black","transform":"scale(.8)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-motor-vehicles":{"category":"regulatory","name":"No motor vehicles","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"car","color":"black","transform":"scale(.8) scale(1.3)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-motorcycles":{"category":"regulatory","name":"No motorcycles","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"motorbike","color":"black","transform":"scale(.8) scale(1.3)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-overtaking":{"category":"regulatory","name":"No overtaking","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"car","color":"black","transform":"scale(.6) translate(26%,10%)"},{"type":"car","color":"black","transform":"scale(.6) translate(-26%,10%)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-parking":{"category":"regulatory","name":"No parking","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"content","color":"black","content":"P","transform":"scale(1.5) translate(0,20%)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-pedestrians":{"category":"regulatory","name":"No pedestrians","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"pedestrian_bra","color":"black","transform":"scale(.8)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-right-turn":{"category":"regulatory","name":"No right turn","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"turn-90-l","color":"black","transform":"scale(.8) scale(-1,1)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-stopping":{"category":"regulatory","name":"No stopping","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"octagon","color":"black","transform":"scale(.7)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-u-turn":{"category":"regulatory","name":"No u turn","elements":[{"type":"circle-o","color":"red"},{"type":"u-turn","color":"black","transform":"scale(.8)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"maximum-speed-limit":{"category":"regulatory","name":"Maximum speed limit","elements":[{"type":"square-rounded","color":"white","transform":"scale(.9,1)"},{"type":"square-rounded","color":"black","transform":"scale(.9,1) scale(.95)"},{"type":"square-rounded","color":"white","transform":"scale(.9,1) scale(.90)"},{"type":"content-4","color":"black","content":"MAXIMUM","transform":"translate(0,-125%) scale(.5)"},{"type":"speed_value","color":"black","transform":"translate(0,45%)"}]},"stop":{"category":"regulatory","name":"Stop","elements":[{"type":"octagon","color":"red"},{"type":"stop","color":"white"}]},"bump-in-road":{"category":"warning","name":"Bump in road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"bump_road_bra","color":"black","transform":"scale(.9)"}]},"crossroads-ahead":{"category":"warning","name":"Crossroads ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"crossroads-ahead","color":"black"}]},"crossroads-ahead_v2":{"category":"warning","name":"Crossroads ahead","vartiation":"ontario","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"crossroads-ahead-ontario","color":"black"}]},"curve-left-ahead":{"category":"warning","name":"Curve left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-l-curve","color":"black","transform":"scale(.9)"}]},"curve-left-ahead_v2":{"category":"warning","name":"Curve left ahead","variation":"ontario","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-right-curve-ontario","color":"black","transform":"scale(.9) scale(-1,1)"}]},"double-curve-first-left-ahead":{"category":"warning","name":"Double curve first left ahead","vartiation":"ontario","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"reverse-curve-ontario","color":"black","transform":"scale(-1,1) scale(.9)"}]},"double-curve-first-right-ahead":{"category":"warning","name":"Double curve first right ahead","variation":"ontario","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"reverse-curve-ontario","color":"black","transform":"scale(.9)"}]},"curve-right-ahead":{"category":"warning","name":"Curve right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-r-curve","color":"black","transform":"scale(.9)"}]},"curve-right-ahead_v2":{"category":"warning","name":"Curve right ahead","variatio":"ontario","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-right-curve-ontario","color":"black","transform":"scale(.9)"}]},"cyclists-crossing":{"category":"warning","name":"cyclists crossing","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"bicycle","color":"black","transform":"scale(.9)"}]},"dip-in-road":{"category":"warning","name":"Dip in road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"content-3","content":"DIP","color":"black"}]},"divided-highway-ahead":{"category":"warning","name":"Divided highway ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"divided-highway","color":"black"}]},"divided-highway-ends":{"category":"warning","name":"Divided highway ends","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"divided-highway","color":"black","transform":"scale(1,-1)"}]},"domestic-animals":{"category":"warning","name":"Domestic animals","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"domestic-animal","color":"black","transform":"translate(-10%,0%) scale(.35)"}]},"emergency-vehicles":{"category":"warning","name":"Emergency vehicles","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"firemans-car","color":"black"}]},"equestrians":{"category":"warning","name":"Equestrians","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"equestrian","color":"black","transform":"scale(0.6) scale(.9)"}]},"falling-rocks-or-debris-right":{"category":"warning","name":"Falling rocks or debris right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"falling-rocks-au","color":"black","transform":"scale(-1,1)"}]},"farm-vehicles":{"category":"warning","name":"Farm vehicles","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"tractor","color":"black","transform":"scale(.45)"}]},"hairpin-curve-right-ahead":{"category":"warning","name":"Hairpin curve right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"hairpin-curve-au","color":"black","transform":" scale(-0.85, 0.85) scale(.9)"}]},"hairpin-curve-right-ahead_v2":{"category":"warning","name":"Hairpin curve right ahead","variation":"ontario","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"hairpin-curve-au","color":"black","transform":" scale(-0.85, 0.85) scale(.9)"}]},"level-railroad-crossing-with-barriers-ahead":{"category":"warning","name":"Level railroad crossing with barriers ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"railroad-barriers","color":"black"}]},"loose-road-surface":{"category":"warning","name":"Loose road surface","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"loose_road_surface_bra","color":"black","transform":"scale(.9)"}]},"height-restriction-ahead":{"category":"warning","name":"Height restriction ahead","variation":"feet","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"height-restriction-ca","color":"black"},{"type":"height_value","color":"black"}]},"height-restriction-ahead_v2":{"category":"warning","name":"Height restriction ahead","variation":"meters","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"height-restriction-ca","color":"black"},{"type":"height_value","color":"black"}]},"narrow-bridge-ahead":{"category":"warning","name":"Narrow bridge ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"narrow-bridge-au","color":"black","transform":"scale(.9)"}]},"opening-or-swing-bridge":{"category":"warning","name":"Opening or swing bridge","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"opening-swing-bridge-ca","color":"black","transform":"scale(.9)"}]},"pavement-ends":{"category":"warning","name":"Pavement ends","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"pavement-ends","color":"black","transform":"scale(.9)"}]},"pedestrian-crossing":{"category":"warning","name":"Pedestrian crossing","elements":[{"type":"square-rounded","color":"white","transform":"scale(.9,1)"},{"type":"square-rounded","color":"black","transform":"scale(.9,1) scale(.95)"},{"type":"square-rounded","color":"white","transform":"scale(.9,1) scale(.90)"},{"type":"pedestrian","color":"black"}]},"pedestrian-crossing_v2":{"category":"warning","name":"Pedestrian crossing","variation":"quebec","elements":[{"type":"square-rounded","color":"white","transform":"scale(.9,1)"},{"type":"square-rounded","color":"black","transform":"scale(.9,1) scale(.95)"},{"type":"square-rounded","color":"white","transform":"scale(.9,1) scale(.90)"},{"type":"content-4","color":"black","content":"PEDESTRIAN","transform":"translate(-10%,-125%) scale(.5)"},{"type":"content-3","color":"black","content":"X","transform":"translate(0,40%) scale(1.5)"}]},"playground-ahead":{"category":"warning","name":"Playground ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"playground-ahead-ca","color":"black"}]},"road-narrows-ahead":{"category":"warning","name":"Road narrows ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"narrow-road-both","color":"black","transform":"scale(.9)"}]},"road-narrows-left-ahead":{"category":"warning","name":"Road narrows left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"narrow-road-l","color":"black","transform":"scale(.9)"}]},"road-narrows-right-ahead":{"category":"warning","name":"Road narrows right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"narrow-road-l","color":"black","transform":"scale(.9) scale(-1,1)"}]},"roundabout-ahead":{"category":"warning","name":"roundabout ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"roundabout","color":"black"}]},"shared-road-motocycles-cyclists":{"category":"warning","name":"Shared road motocycles cyclists","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"share-road","color":"black"}]},"junction-with-a-side-road-perpendicular-left-ahead":{"category":"warning","name":"Junction with a side road perpendicular left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-perpendicular","color":"black","transform":"scale(.9)"}]},"junction-with-a-side-road-perpendicular-left-ahead_v2":{"category":"warning","name":"junction with a side road perpendicular left ahead","variation":"ontario","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-perpendicular","color":"black","transform":"scale(.9)"}]},"junction-with-a-side-road-perpendicular-right-ahead":{"category":"warning","name":"Junction with a side road perpendicular right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-perpendicular","color":"black","transform":"scale(.9) scale(-1,1)"}]},"junction-with-a-side-road-perpendicular-right-ahead_v2":{"category":"warning","name":"junction with a side road perpendicular right ahead","vartiation":"ontario","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-perpendicular","color":"black","transform":"scale(.9) scale(-1,1)"}]},"slippery-road-surface":{"category":"warning","name":"Slippery road surface","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"slippery","color":"black"}]},"steep-hill-downwards":{"category":"warning","name":"Steep hill downwards","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"steep-hill-downwards","color":"black"}]},"steep-hill-upwards":{"category":"warning","name":"Steep hill upwards","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"steep-hill-upwards","color":"black"}]},"stop-ahead":{"category":"warning","name":"Stop ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"small-arrow-au","color":"black","transform":"translate(0,-25%)"},{"type":"octagon","color":"red","transform":"translate(0,15%) scale(.3)"}]},"stop-ahead_v2":{"category":"warning","name":"Stop ahead","variation":"ontario","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"small-arrow-au","color":"black","transform":"translate(0,-25%) scale(1.2)"},{"type":"octagon","color":"red","transform":"translate(0,15%) scale(.4)"}]},"traffic-merges-left-ahead":{"category":"warning","name":"Traffic merges left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-a-a-r","color":"black","transform":"scale(1, -1)"}]},"traffic-merges-left-ahead_v2":{"category":"warning","name":"Traffic merges left ahead","variation":"ontario","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-a-a-r","color":"black","transform":"scale(1, -1)"}]},"traffic-merges-right-ahead":{"category":"warning","name":"Traffic merges right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-a-a-r","color":"black"}]},"traffic-merges-right-ahead_v2":{"category":"warning","name":"Traffic mergest right ahead","variation":"ontario","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-a-a-r","color":"black"}]},"traffic-signals-ahead":{"category":"warning","name":"Traffic signals ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(.2,.55)"},{"type":"circle-bg","color":"green","transform":"translate(0,16.5%) scale(.14)"},{"type":"circle-bg","color":"yellow","transform":"scale(.14)"},{"type":"circle-bg","color":"red","transform":"translate(0,-16.5%) scale(.14)"}]},"tunnel-ahead":{"category":"warning","name":"Tunnel ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"tunnel","color":"black"}]},"turn-left":{"category":"warning","name":"Turn left","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-90-l","color":"black"}]},"double-turn-first-left-ahead":{"category":"warning","name":"Double turn first left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-reverse-left","color":"black","transform":"scale(.9)"}]},"double-turn-first-right-ahead":{"category":"warning","name":"Double turn first right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-reverse-left","color":"black","transform":"scale(-1,1) scale(.9)"}]},"turn-right":{"category":"warning","name":"turn right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-90-l","color":"black","transform":"scale(-1,1)"}]},"two-way-traffic-ahead":{"category":"warning","name":"two way traffic ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"arrows_both_bra","color":"black","transform":"scale(.9)"}]},"uncontrolled-railroad-crossing-ahead":{"category":"warning","name":"uncontroller railroad crossing  ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"train-au","color":"black","transform":"scale(.9)"}]},"uneven-road":{"category":"warning","name":"uneven road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"bump_bra","color":"black","transform":"scale(.9)"}]},"wild-animals":{"category":"warning","name":"wild animals","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"wild-animal","color":"black","transform":"scale(.9) scale(.9)"}]},"winding-road-first-left-ahead":{"category":"warning","name":"Winding road first left ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"winding-road-left","color":"black"}]},"winding-road-first-right-ahead":{"category":"warning","name":"winding road first right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"winding-road-left","color":"black","transform":"scale(-1,1)"}]},"workers-in-road-ahead":{"category":"warning","name":"workers in road ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"roadworks_bra","color":"black"}]},"yield-ahead":{"category":"warning","name":"yield ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"small-arrow-au","color":"black","transform":"translate(0,-25%)"},{"type":"tri-rounded","color":"red","transform":"translate(0, 15%) scale(.45) rotate(180deg)"},{"type":"tri-rounded","color":"white","transform":"translate(0, 12%) scale(.25) rotate(180deg)"}]},"yield":{"category":"regulatory","name":"Yield","elements":[{"type":"tri-rounded","color":"red","transform":"rotate(180deg)"},{"type":"tri-rounded","color":"white","transform":"translate(0,-14.43%) scale(.55) translate(0,14.43%) rotate(180deg)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/ch.json b/vendor/assets/iD/iD/traffico/signs/ch.json
deleted file mode 100644 (file)
index 30ec1a2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"level-crossing":{"category":"danger","name":"Level crossing","variation":"other","elements":[{"type":"level-crossing","color":"red"},{"type":"level-crossing","color":"red","transform":"scale(-1,1)"},{"type":"square-angular","color":"white","transform":"rotate(60deg) scale(.05,1)"},{"type":"square-angular","color":"white","transform":"rotate(-60deg) scale(.05,1)"}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(.98) scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.2,1)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(.4)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/cz.json b/vendor/assets/iD/iD/traffico/signs/cz.json
deleted file mode 100644 (file)
index 5de791a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_cz":{"category":"information","name":"European border crossing into Czech Republic","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"České","transform":"translate(0,-50%)"},{"type":"content-5","color":"white","content":"republika","transform":"translate(0,50%)"}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(0.707107) rotate(45deg) scale(.98)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.05,1)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(.4)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/de.json b/vendor/assets/iD/iD/traffico/signs/de.json
deleted file mode 100644 (file)
index b35e320..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"ascent":{"category":"danger","name":"steep ascent","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"descent","color":"black","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%) scale(-1,1)"},{"type":"incline_value","content":"10%","color":"black","transform":"translate(0,-25%) translate(0,14.43%) scale(.4) rotate(-30deg)"}]},"descent":{"category":"danger","name":"steep descent","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"descent","color":"black","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"incline_value","content":"10%","color":"black","transform":"translate(0,-25%) translate(0,14.43%) scale(.4) rotate(30deg)"}]},"domestic-animals":{"category":"danger","name":"Domestic animals","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"domestic-animal","color":"black","transform":"translate(0,14.43%) translate(-6%,4%) scale(.25)"}]},"falling-rocks":{"category":"danger","name":"Falling rocks","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"falling-rocks-EU","color":"black","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"}]},"level-crossing":{"category":"danger","name":"level crossing","elements":[{"type":"square-angular","color":"black","transform":"rotate(30deg) scale(.15,1)"},{"type":"square-angular","color":"black","transform":"rotate(-30deg) scale(.15,1)"},{"type":"square-angular","color":"red","transform":"rotate(30deg) scale(.14,.99)"},{"type":"square-angular","color":"red","transform":"rotate(-30deg) scale(.14,.99)"},{"type":"square-angular","color":"white","transform":"rotate(30deg) scale(.14,.6)"},{"type":"square-angular","color":"white","transform":"rotate(-30deg) scale(.14,.6)"}]},"unprotected-quayside-or-riverbank":{"category":"danger","name":"Unprotected quayside or ferry berth","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"cliff","color":"black","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"}]},"wild-animals":{"category":"danger","name":"wild animals crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"wild-animal","color":"black","transform":"translate(0,14.43%) scale(.7)"}]},"double-curve-first-left":{"category":"danger","name":"Double curve first left","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"d-curve-l","color":"black","transform":"translate(0,14.43%) scale(.6)"}]},"double-curve-first-right":{"category":"danger","name":"Double curve first right","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"d-curve-l","color":"black","transform":"translate(0,14.43%) scale(-.6,.6)"}]},"curve-left":{"category":"danger","name":"Curve left","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"turn-l","color":"black","transform":"translate(0,14.43%) scale(.6)"}]},"curve-right":{"category":"danger","name":"Curve right","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"turn-l","color":"black","transform":"translate(0,14.43%) scale(-.6,.6)"}]},"crossroads-with-priority-to-the-right":{"category":"danger","name":"Crossroads w priority to the right ahead","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"square-angular","color":"black","transform":"translate(0,14.43%) rotate(45deg) scale(.06,.32)"},{"type":"square-angular","color":"black","transform":"translate(0,14.43%) rotate(-45deg) scale(.06,.32)"}]},"cyclists-crossing-ahead":{"category":"danger","name":"Cyclists crossing ahead","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"bicycle","color":"black","transform":"scale(.65) translate(0,25%)"}]},"cyclists-crossing-ahead_v2":{"category":"danger","name":"Cyclists crossing ahead right","variation":"right","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"bicycle","color":"black","transform":"scale(.65) translate(0,25%)"}]},"other-danger":{"category":"danger","name":"danger","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"exclamation","color":"black","transform":"scale(.65) translate(0,14.43%)"}]},"other-danger_v2":{"category":"danger","name":"danger","variation":"temporary","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"yellow","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"exclamation","color":"black","transform":"scale(.65) translate(0,14.43%)"}]},"crossroads-ahead":{"category":"danger","name":"Danger at next intersection","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"right-of-way","color":"black","transform":"scale(.7) translate(0,14.43%)"}]},"junction-with-a-side-road-perpendicular-left":{"category":"danger","name":"Junction with a side road perpendicular","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"right-of-way-l fit","color":"black","transform":"scale(.7) translate(0,14.43%)"}]},"junction-with-a-side-road-perpendicular-right":{"category":"danger","name":"Junction with a side road perpendicular right","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"right-of-way-l fit","color":"black","transform":"scale(.7) translate(0,14.43%) scale(-1,1)"}]},"pedestrian-crossing":{"category":"danger","name":"Pedestrian crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"pedestrian","color":"black","transform":"scale(.7) translate(0,14.43%)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"train-electric","color":"black","transform":"scale(.4) translate(10%,40%)"}]},"railway-crossing-secured":{"category":"danger","name":"secured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-secured","color":"black","transform":"translate(0,14.43%) translate(0,4%) scale(.35)"}]},"snow":{"category":"danger","name":"snow","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"snowflake","color":"black","transform":"translate(0,14.43%) scale(.7)"}]},"low-flying-aircraft":{"category":"danger","name":"low flying aircraft","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"airplane","color":"black","transform":"translate(0,14.43%) scale(.4)"}]},"strong-sidewind":{"category":"danger","name":"strong sidewind","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"windbag","color":"black","transform":"translate(0,14.43%) scale(.3)"}]},"road-bump":{"category":"danger","name":"road bump","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"bump","color":"black","transform":"translate(0,14.43%) scale(.45)"}]},"road-narrows-ahead":{"category":"danger","name":"Road narrows","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"narrow-road-both","color":"black","transform":"translate(0,14.43%) scale(.6)"}]},"road-narrows-left-ahead":{"category":"danger","name":"Road narrows left","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"narrow-road-l","color":"black","transform":"translate(0,14.43%) scale(.6)"}]},"road-narrows-right-ahead":{"category":"danger","name":"road narrows right","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"narrow-road-l","color":"black","transform":"translate(0,14.43%) scale(-.6,.6)"}]},"roadworks-ahead":{"category":"danger","name":"Roadworks ahead","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"roadworks","color":"black","transform":"scale(.7) translate(0,20%)"}]},"roundabout":{"category":"danger","name":"roundabout ahead","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"roundabout","color":"black","transform":"translate(0,14.43%) scale(.55)"}]},"children":{"category":"danger","name":"children","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"children","color":"black","transform":"translate(0,14.43%) scale(.75)"}]},"slippery-road-surface":{"category":"danger","name":"slippery road surface","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"slippery-road","color":"black","transform":"translate(0,14.43%) scale(.75)"}]},"traffic-signals-ahead":{"category":"danger","name":"traffic signal","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"circle-bg","color":"red","transform":"translate(0,14.43%) translate(0,-20%) scale(.13)"},{"type":"circle-bg","color":"yellow","transform":"translate(0,14.43%) translate(0,-5%) scale(.13)"},{"type":"circle-bg","color":"green","transform":"translate(0,14.43%) translate(0,10%) scale(.13)"}]},"two-way-traffic-ahead":{"category":"danger","name":"Two-way traffic ahead","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"DE-arrow-up","color":"black","transform":"translate(0,14.43%) scale(.35) translate(-25%,5%) rotate(180deg)"},{"type":"DE-arrow-up","color":"black","transform":"translate(0,14.43%) scale(.35) translate(25%,-5%)"}]},"uneven-road-ahead":{"category":"danger","name":"uneven road ahead","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"bumps","color":"black","transform":"translate(0,14.43%) scale(.45)"}]},"border":{"category":"information","name":"European border crossing into Germany","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"Bundes-","transform":"scale(.9) translate(0,-130%)"},{"type":"content-5","color":"white","content":"republik","transform":"scale(.9) translate(0,-30%)"},{"type":"content-5","color":"white","content":"Deutschland","transform":"scale(.9) translate(0,70%)"}]},"pedestrian-crossing_v2":{"category":"information","name":"pedestrian crossing","elements":[{"type":"square-rounded","color":"blue"},{"type":"tri-angular","color":"white","transform":"scale(.8)"},{"type":"pedestrian-crossing","color":"black"}]},"deadend":{"category":"information","name":"deadend","elements":[{"type":"square-rounded","color":"blue"},{"type":"square-angular","color":"white","transform":"translate(0,20%) scale(.15,.6)"},{"type":"square-angular","color":"red","transform":"translate(0,-15%) scale(.5,.15)"}]},"first-aid":{"category":"information","name":"first aid","elements":[{"type":"square-rounded","color":"blue"},{"type":"square-rounded","color":"white","transform":"scale(.7)"},{"type":"square-angular","color":"red","transform":"scale(.15,.5)"},{"type":"square-angular","color":"red","transform":"scale(.5,.15)"}]},"limited-access-road":{"category":"information","name":"limited-access road","elements":[{"type":"square-rounded","color":"blue"},{"type":"car","color":"white","transform":"scale(1.5)"}]},"parking-left":{"category":"information","name":"parking (left of this sign)","elements":[{"type":"square-rounded","color":"blue"},{"type":"parking","color":"white"},{"type":"DE-arrow-up","color":"white","transform":"translate(25%,30%) rotate(-90deg) scale(.33)"}]},"parking-right":{"category":"information","name":"parking (right of this sign)","elements":[{"type":"square-rounded","color":"blue"},{"type":"parking","color":"white"},{"type":"DE-arrow-up","color":"white","transform":"translate(25%,30%) rotate(90deg) scale(.33)"}]},"bus-stop":{"category":"information","name":"bus stop (also used for tram)","elements":[{"type":"circle-bg","color":"yellow"},{"type":"circle-o","color":"green"},{"type":"h","color":"green","transform":"scale(.8)"}]},"disabled-persons":{"category":"information","name":"disabled parking","elements":[{"type":"square-rounded","color":"blue"},{"type":"disabled-p","color":"white"}]},"parking":{"category":"information","name":"parking","elements":[{"type":"square-rounded","color":"blue"},{"type":"parking","color":"white"}]},"pedestrian-crossing_v3":{"category":"information","name":"pedestrian crossing","elements":[{"type":"square-rounded","color":"blue"},{"type":"tri-angular","color":"white","transform":"scale(.8)"},{"type":"pedestrian-crossing","color":"black"}]},"equestrians":{"category":"mandatory","name":"equestrian track","elements":[{"type":"circle-bg","color":"blue"},{"type":"equestrian","color":"white","transform":"scale(.7)"}]},"minimum-speed":{"category":"mandatory","name":"minimum speed","elements":[{"type":"circle-bg","color":"blue"},{"type":"speed_value","color":"white"}]},"minimum-speed-end":{"category":"mandatory","name":"end of minimum speed limit","elements":[{"type":"circle-bg","color":"blue"},{"type":"speed_value","color":"white"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(45deg)"}]},"pedestrian-bicycle-dual-track":{"category":"mandatory","name":"pedestrian/bicycle dual track","elements":[{"type":"circle-bg","color":"blue"},{"type":"bicycle","color":"white","transform":"scale(.6) translate(-40%,0)"},{"type":"footpath","color":"white","transform":"scale(.6) translate(40%,0)"},{"type":"circle-separator","color":"white"}]},"dual-path-pedestrians-and-cyclists":{"category":"mandatory","name":"bicycle/pedestrian dual track","elements":[{"type":"circle-bg","color":"blue"},{"type":"bicycle","color":"white","transform":"scale(.6) translate(40%,0)"},{"type":"footpath","color":"white","transform":"scale(.6) translate(-40%,0)"},{"type":"circle-separator","color":"white"}]},"dual-path-cyclists-and-pedestrians":{"category":"mandatory","name":"bicycle/pedestrian dual track","elements":[{"type":"circle-bg","color":"blue"},{"type":"footpath","color":"white","transform":"scale(.6) translate(40%,0)"},{"type":"bicycle","color":"white","transform":"scale(.6) translate(-40%,0)"},{"type":"circle-separator","color":"white"}]},"bicycles-only":{"category":"mandatory","name":"Bicycles only","elements":[{"type":"circle-bg","color":"blue"},{"type":"bicycle","color":"white"}]},"pedestrians-only":{"category":"mandatory","name":"Pedestrians only","elements":[{"type":"circle-bg","color":"blue"},{"type":"footpath","color":"white"}]},"turn-left":{"category":"mandatory","name":"Turn left","elements":[{"type":"circle-bg","color":"blue"},{"type":"DE-arrow-up","color":"white","transform":"rotate(-90deg)"}]},"turn-right":{"category":"mandatory","name":"Turn right","elements":[{"type":"circle-bg","color":"blue"},{"type":"DE-arrow-up","color":"white","transform":"rotate(90deg)"}]},"pass-on-either-side":{"category":"mandatory","name":"Pass on either side","elements":[{"type":"circle-bg","color":"blue"},{"type":"DE-arrow-up","color":"white","transform":"translate(0,-15%) rotate(135deg) scale(.6) translate(0,-32%)"},{"type":"DE-arrow-up","color":"white","transform":"translate(0,-15%) rotate(-135deg) scale(.6) translate(0,-32%)"}]},"proceed-straight":{"category":"mandatory","name":"Proceed straight or turn left","elements":[{"type":"circle-bg","color":"blue"},{"type":"DE-arrow-up","color":"white"}]},"proceed-straight-or-turn-left":{"category":"mandatory","name":"Proceed straight or turn left","elements":[{"type":"circle-bg","color":"blue"},{"type":"arrow-s-l","color":"white"}]},"proceed-straight-or-turn-right":{"category":"mandatory","name":"Proceed straight or turn right","elements":[{"type":"circle-bg","color":"blue"},{"type":"arrow-s-l","color":"white","transform":"scale(-1,1)"}]},"procced-straight":{"category":"mandatory","name":"go straight","elements":[{"type":"circle-bg","color":"blue"},{"type":"DE-arrow-up","color":"white"}]},"pass-on-this-side-left":{"category":"mandatory","name":"Pass on this side left","elements":[{"type":"circle-bg","color":"blue"},{"type":"DE-arrow-up","color":"white","transform":"rotate(-135deg)"}]},"pass-on-this-side-right":{"category":"mandatory","name":"Pass on this side right","elements":[{"type":"circle-bg","color":"blue"},{"type":"DE-arrow-up","color":"white","transform":"rotate(135deg)"}]},"shared-path-pedestrians-and-cyclists":{"category":"mandatory","name":"pedestrian cycle track","elements":[{"type":"circle-bg","color":"blue"},{"type":"footpath","color":"white","transform":"scale(.6) translate(0,-35%)"},{"type":"bicycle","color":"white","transform":"scale(.6) translate(0,35%)"},{"type":"circle-separator","color":"white","transform":"rotate(90deg)"}]},"roundabout_v2":{"category":"mandatory","name":"roundabout","elements":[{"type":"circle-bg","color":"blue"},{"type":"roundabout","color":"white","transform":"scale(1.25)"}]},"turn-left-ahead":{"category":"mandatory","name":"Turn left ahead","elements":[{"type":"circle-bg","color":"blue"},{"type":"arrow-l","color":"white","transform":"scale(1.25)"}]},"turn-right-ahead":{"category":"mandatory","name":"Turn right ahead","elements":[{"type":"circle-bg","color":"blue"},{"type":"arrow-l","color":"white","transform":"scale(-1.25, 1.25)"}]},"narrow-location-priority":{"category":"priority","name":"priority at narrow location","elements":[{"type":"square-rounded","color":"blue"},{"type":"DE-arrow-up","color":"red","transform":"scale(.8) translate(-25%,5%) rotate(180deg)"},{"type":"DE-arrow-up","color":"white","transform":"scale(.8) translate(25%,-5%)"}]},"narrow-location-no-priority":{"category":"priority","name":"no priority at narrow location","variation":"other","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"DE-arrow-up","color":"black","transform":"scale(.8) scale(.7) translate(-25%,5%) rotate(180deg)"},{"type":"DE-arrow-up","color":"red","transform":"scale(.8) scale(.7) translate(25%,-5%)"}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(0.707107) rotate(45deg) scale(.98)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.05,1)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0)"}]},"give-way":{"category":"priority","name":"give way","elements":[{"type":"tri-rounded","color":"red","transform":"rotate(180deg)"},{"type":"tri-angular","color":"white","transform":"translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg)"}]},"no-pedestrians":{"category":"prohibitory","name":"pedestrians prohibited","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"pedestrian","color":"black","transform":"scale(.8)"}]},"no-pedestrians-or-bicycles":{"category":"prohibitory","name":"pedestrians and bicycles prohibited","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"footpath","color":"black","transform":"scale(.8) scale(.6) translate(0,-35%)"},{"type":"bicycle","color":"black","transform":"scale(.8) scale(.6) translate(0,35%)"}]},"no-bicycles":{"category":"prohibitory","name":"cycling prohibited","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"bicycle","color":"black","transform":"scale(.8)"}]},"no-mopeds":{"category":"prohibitory","name":"mopeds prohibited","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"moped","color":"black","transform":"scale(.8) scale(.7)"}]},"no-motor-vehicles":{"category":"prohibitory","name":"motor vehicles prohibited","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"motorbike","color":"black","transform":"scale(.8) scale(.6) translate(0,-35%)"},{"type":"car","color":"black","transform":"scale(.8) scale(.6) translate(0,35%)"},{"type":"circle-separator","color":"black","transform":"rotate(90deg) scale(.8)"}]},"no-slow-vehicles":{"category":"prohibitory","name":"slow motorized vehicles prohibited","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"tractor","color":"black","transform":"scale(.8) scale(.7)"}]},"no-trailers":{"category":"prohibitory","name":"no trailers allowed","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"trailer","color":"black","transform":"scale(.8) scale(.8)"}]},"no-buses":{"category":"prohibitory","name":"no buses","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"bus","color":"black","transform":"scale(.8)"}]},"no-heavy-goods-vehicles":{"category":"prohibitory","name":"no heavy goods vehicles","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"truck","color":"black"}]},"no-trucks-and-buses":{"category":"prohibitory","name":"buses and trucks prohibited","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"truck","color":"black","transform":"scale(.8) scale(.6) translate(0,-35%)"},{"type":"bus","color":"black","transform":"scale(.8) scale(.6) translate(0,35%)"},{"type":"circle-separator","color":"black","transform":"rotate(90deg) scale(.8)"}]},"no-parking-or-stopping-left":{"category":"prohibitory","name":"no parking or stopping","elements":[{"type":"circle-bg","color":"blue"},{"type":"circle-o","color":"red"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(45deg)"},{"type":"DE-arrow-up","color":"white","transform":"rotate(-90deg) scale(.3) translate(95%)"}]},"no-parking-or-stopping-left-and-right":{"category":"prohibitory","name":"no parking or stopping","elements":[{"type":"circle-bg","color":"blue"},{"type":"circle-o","color":"red"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(45deg)"},{"type":"DE-arrow-up","color":"white","transform":"rotate(-90deg) scale(.3) translate(95%)"},{"type":"DE-arrow-up","color":"white","transform":"rotate(90deg) scale(.3) translate(95%)"}]},"no-parking-or-stopping-right":{"category":"prohibitory","name":"no parking or stopping","elements":[{"type":"circle-bg","color":"blue"},{"type":"circle-o","color":"red"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(45deg)"},{"type":"DE-arrow-up","color":"white","transform":"rotate(90deg) scale(.3) translate(95%)"}]},"no-parking-left":{"category":"prohibitory","name":"No parking","elements":[{"type":"circle-bg","color":"blue"},{"type":"circle-o","color":"red"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"},{"type":"DE-arrow-up","color":"white","transform":"rotate(90deg) scale(.3) translate(95%)"}]},"no-parking-left-and-right":{"category":"prohibitory","name":"no_parking","elements":[{"type":"circle-bg","color":"blue"},{"type":"circle-o","color":"red"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"},{"type":"DE-arrow-up","color":"white","transform":"rotate(90deg) scale(.3) translate(95%)"},{"type":"DE-arrow-up","color":"white","transform":"rotate(-90deg) scale(.3) translate(95%)"}]},"no-parking-right":{"category":"prohibitory","name":"no_parking","elements":[{"type":"circle-bg","color":"blue"},{"type":"circle-o","color":"red"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"},{"type":"DE-arrow-up","color":"white","transform":"rotate(-90deg) scale(.3) translate(95%)"}]},"speed-limit-zone":{"category":"prohibitory","name":"speed limit","elements":[{"type":"square-rounded","color":"black"},{"type":"square-rounded","color":"white","transform":"scale(.95)"},{"type":"circle-bg","color":"red","transform":"translate(0,-10%) scale(.65)"},{"type":"circle-bg","color":"white","transform":"translate(0,-10%) scale(.65) scale(.8)"},{"type":"speed_zone_value","color":"black","transform":"translate(0,-30%) scale(.7)"},{"type":"content-4","content":"ZONE","color":"black","transform":"translate(0,150%) scale(.8)"}]},"vehicle-weight-limit":{"category":"prohibitory","name":"vehicle weight limit","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"weight_value","color":"black"}]},"no-entry":{"category":"prohibitory","name":"no entry, one way street","elements":[{"type":"circle-bg","color":"red"},{"type":"square-angular","color":"white","transform":"scale(.92,.16)"}]},"priority-road":{"category":"priority","name":"Priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(.98) scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"}]},"give-way-to-oncoming-traffic":{"category":"priority","name":"Give way to oncoming traffic","elements":[{"type":"circle-bg","color":"red"},{"type":"circle-bg","color":"white","transform":"scale(0.8)"},{"type":"DE-arrow-up","color":"black","transform":"scale(.7) translate(-25%,5%) rotate(180deg)"},{"type":"DE-arrow-up","color":"red","transform":"scale(.7) translate(25%,-5%)"}]},"stop":{"category":"priority","name":"stop","elements":[{"type":"octagon","color":"red"},{"type":"stop","color":"white"}]},"end-of-limits":{"category":"prohibitory","name":"end of all speed and passing limits","elements":[{"type":"circle-bg","color":"black"},{"type":"circle-bg","color":"white","transform":"scale(.95)"},{"type":"square-angular","color":"black","transform":"rotate(45deg) scale(.025,.99)"},{"type":"square-angular","color":"black","transform":"rotate(45deg) scale(.025,.98) translate(150%,0)"},{"type":"square-angular","color":"black","transform":"rotate(45deg) scale(.025,.97) translate(300%,0)"},{"type":"square-angular","color":"black","transform":"rotate(45deg) scale(.025,.98) translate(-150%,0)"},{"type":"square-angular","color":"black","transform":"rotate(45deg) scale(.025,.97) translate(-300%,0)"}]},"low-emission-zone":{"category":"prohibitory","name":"low-emission zone","elements":[{"type":"square-rounded","color":"black"},{"type":"square-rounded","color":"white","transform":"scale(.95)"},{"type":"circle-bg","color":"red","transform":"translate(0,-8%) scale(.7)"},{"type":"circle-bg","color":"white","transform":"translate(0,-8%) scale(.7) scale(.8)"},{"type":"content-4","content":"Umwelt","color":"black","transform":"translate(0,-50%) scale(.8) scale(.8)"},{"type":"content-4","content":"ZONE","color":"black","transform":"translate(0,150%) scale(.8)"}]},"low-emission-zone-end":{"category":"prohibitory","name":"end of low-emission zone","elements":[{"type":"square-rounded","color":"black"},{"type":"square-rounded","color":"white","transform":"scale(.95)"},{"type":"circle-bg","color":"grey","transform":"translate(0,-8%) scale(.7)"},{"type":"circle-bg","color":"white","transform":"translate(0,-8%) scale(.7) scale(.8)"},{"type":"content-4","content":"Umwelt","color":"grey","transform":"translate(0,-50%) scale(.8) scale(.8)"},{"type":"content-4","content":"ZONE","color":"grey","transform":"translate(0,150%) scale(.8)"},{"type":"square-angular","color":"black","transform":"rotate(45deg) scale(.02,1.35)"},{"type":"square-angular","color":"black","transform":"rotate(45deg) scale(.02,1.3) translate(-150%, 0)"},{"type":"square-angular","color":"black","transform":"rotate(45deg) scale(.02,1.3) translate(150%, 0)"},{"type":"square-angular","color":"black","transform":"rotate(45deg) scale(.02,1.25) translate(-300%, 0)"},{"type":"square-angular","color":"black","transform":"rotate(45deg) scale(.02,1.25) translate(300%, 0)"}]},"no-moped-vehicles":{"category":"prohibitory","name":"No moped vehicles","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"moped","color":"black","transform":"scale(.8) scale(.6) translate(0,-35%) scale(.7)"},{"type":"bicycle","color":"black","transform":"scale(.8) scale(.6) translate(0,35%)"}]},"no-motorcycles":{"category":"prohibitory","name":"No motorcycles","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"motorbike","color":"black","transform":"scale(.8)"}]},"no-parking":{"category":"prohibitory","name":"no parking","elements":[{"type":"circle-bg","color":"blue"},{"type":"circle-o","color":"red"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-stopping-or-parking":{"category":"prohibitory","name":"no parking or stopping","elements":[{"type":"circle-bg","color":"blue"},{"type":"circle-o","color":"red"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(45deg)"}]},"no-traffic-both-ways":{"category":"prohibitory","name":"no traffic both ways","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"}]},"no-u-turn":{"category":"prohibitory","name":"no u-turn","elements":[{"type":"circle-bg","color":"red"},{"type":"circle-bg","color":"white","transform":"scale(.8)"},{"type":"turnaround","color":"black"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-55deg)"},{"type":"turnaround2","color":"black"}]},"no-vehicles-carrying-dangerous-goods":{"category":"prohibitory","name":"no vehicles with dangerous goods","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"square-rounded","color":"orange","transform":"scale(.25) translate(0,-25%)"},{"type":"lorry","color":"black"}]},"no-left-turn":{"category":"prohibitory","name":"no turn left","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"turn-l","color":"black"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(45deg)"}]},"no-right-turn":{"category":"prohibitory","name":"no turn right","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"turn-l","color":"black","transform":"scale(-1,1)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-overtaking":{"category":"prohibitory","name":"no overtaking","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"car","color":"red","transform":"scale(.6) translate(-26%,10%)"},{"type":"car","color":"black","transform":"scale(.6) translate(26%,10%)"}]},"no-overtaking-by-heavy-goods-vehicles":{"category":"prohibitory","name":"no overtaking by heavy goods vehicles","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"lorry-left","color":"red"},{"type":"car","color":"black","transform":"scale(.6) translate(26%,10%)"}]},"maximum-speed-limit":{"category":"prohibitory","name":"Maximum speed limit","elements":[{"type":"circle-bg","color":"red"},{"type":"circle-bg","color":"white","transform":"scale(.8)"},{"type":"speed_value","color":"black"}]},"maximum-height":{"category":"prohibitory","name":"Maximum height","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"height","color":"black"},{"type":"height_value","color":"black"}]},"maximum-width":{"category":"prohibitory","name":"Maximum width","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"height","color":"black","transform":"rotate(90deg)"},{"type":"width_value","color":"black"}]},"destination":{"category":"supplementary","name":"destination traffic excluded","elements":[{"type":"square-rounded","color":"black","transform":"scale(1,.5)"},{"type":"square-rounded","color":"white","transform":"scale(.95, .45)"},{"type":"content-4","color":"black","content":"Anlieger","transform":"translate(0,-45%) scale(.8)"},{"type":"content-4","color":"black","content":"frei","transform":"translate(0,45%) scale(.8)"}]},"disabled":{"category":"supplementary","name":"for disabled people","elements":[{"type":"square-rounded","color":"black","transform":"scale(1,.5)"},{"type":"square-rounded","color":"white","transform":"scale(.95, .45)"},{"type":"disabled-p","color":"black","transform":"scale(.6)"}]},"glaze":{"category":"supplementary","name":"glaze","elements":[{"type":"square-rounded","color":"black","transform":"scale(1,.5)"},{"type":"square-rounded","color":"white","transform":"scale(.95, .45)"},{"type":"snowflake","color":"black","transform":"scale(.8)"}]},"left-pointing":{"category":"supplementary","name":"left pointing","elements":[{"type":"square-rounded","color":"black","transform":"scale(1,.5)"},{"type":"square-rounded","color":"white","transform":"scale(.95, .45)"},{"type":"DE-arrow-up","color":"black","transform":"scale(.6) rotate(-90deg)"}]},"both-directions":{"category":"supplementary","name":"both directions","elements":[{"type":"square-rounded","color":"black","transform":"scale(1,.5)"},{"type":"square-rounded","color":"white","transform":"scale(.95, .45)"},{"type":"DE-arrow-up","color":"black","transform":"translate(-15%,0) scale(.5) rotate(180deg)"},{"type":"DE-arrow-up","color":"black","transform":"translate(15%,0) scale(.5)"}]},"pedestrians-use-opposite-sidewalk":{"category":"supplementary","name":"pedestrians should use opposite sidewalk","variation":"left","elements":[{"type":"square-rounded","color":"black","transform":"scale(1,.5)"},{"type":"square-rounded","color":"white","transform":"scale(.95, .45)"},{"type":"DE-arrow-up","color":"black","transform":"translate(-20%,0) scale(.5) rotate(-90deg)"},{"type":"pedestrians","color":"black","transform":"translate(25%,0) scale(.6)"}]},"pedestrians-use-opposite-sidewalk_v2":{"category":"supplementary","name":"pedestrians should use opposite sidewalk","variation":"right","elements":[{"type":"square-rounded","color":"black","transform":"scale(1,.5)"},{"type":"square-rounded","color":"white","transform":"scale(.95, .45)"},{"type":"DE-arrow-up","color":"black","transform":"translate(20%,0) scale(.5) rotate(90deg)"},{"type":"pedestrians","color":"black","transform":"translate(-25%,0) scale(.6)"}]},"railway-only":{"category":"supplementary","name":"railway only","elements":[{"type":"square-rounded","color":"black","transform":"scale(1,.5)"},{"type":"square-rounded","color":"white","transform":"scale(.95, .45)"},{"type":"train-electric","color":"black","transform":"scale(.45)"}]},"right-pointing":{"category":"supplementary","name":"right pointing","elements":[{"type":"square-rounded","color":"black","transform":"scale(1,.5)"},{"type":"square-rounded","color":"white","transform":"scale(.95, .45)"},{"type":"DE-arrow-up","color":"black","transform":"scale(.6) rotate(90deg)"}]},"entry":{"category":"other","name":"entry, one way street","elements":[{"type":"square-rounded","color":"blue"},{"type":"arrow-oneway","color":"white","transform":"scale(.75)"}]},"priority-road-bends-left-3way":{"category":"supplementary","name":"priority road bends to the left at a 3-way intersection","variation":"1","elements":[{"type":"square-rounded","color":"black"},{"type":"square-rounded","color":"white","transform":"scale(.95, .95)"},{"type":"square-angular","color":"black","transform":"translate(0,-30%) scale(.1,.25)"},{"type":"bending-priority","color":"black","transform":"scale(-.85,.85)"}]},"priority-road-bends-left-3way_v2":{"category":"supplementary","name":"priority road bends to the left at a 3-way intersection","variation":"2","elements":[{"type":"square-rounded","color":"black"},{"type":"square-rounded","color":"white","transform":"scale(.95, .95)"},{"type":"square-angular","color":"black","transform":"rotate(-90deg) translate(0,30%) scale(.1,.25)"},{"type":"bending-priority","color":"black","transform":"scale(-.85,.85)"}]},"priority-road-bends-left-4way":{"category":"supplementary","name":"priority road bends to the left at a 4-way intersection","elements":[{"type":"square-rounded","color":"black"},{"type":"square-rounded","color":"white","transform":"scale(.95, .95)"},{"type":"square-angular","color":"black","transform":"translate(0,-30%) scale(.1,.25)"},{"type":"square-angular","color":"black","transform":"rotate(-90deg) translate(0,30%) scale(.1,.25)"},{"type":"bending-priority","color":"black","transform":"scale(-.85,.85)"}]},"priority-road-bends-right-3way":{"category":"supplementary","name":"priority road bends to the right at a 3-way intersection","variation":"1","elements":[{"type":"square-rounded","color":"black"},{"type":"square-rounded","color":"white","transform":"scale(.95, .95)"},{"type":"square-angular","color":"black","transform":"translate(0,-30%) scale(.1,.25)"},{"type":"bending-priority","color":"black","transform":"scale(.85)"}]},"priority-road-bends-right-3way_v2":{"category":"supplementary","name":"priority road bends to the right at a 3-way intersection","variation":"2","elements":[{"type":"square-rounded","color":"black"},{"type":"square-rounded","color":"white","transform":"scale(.95, .95)"},{"type":"square-angular","color":"black","transform":"rotate(90deg) translate(0,30%) scale(.1,.25)"},{"type":"bending-priority","color":"black","transform":"scale(.85)"}]},"priority-road-bends-right-4way":{"category":"supplementary","name":"priority road bends to the right at a 4-way intersection","elements":[{"type":"square-rounded","color":"black"},{"type":"square-rounded","color":"white","transform":"scale(.95, .95)"},{"type":"square-angular","color":"black","transform":"translate(0,-30%) scale(.1,.25)"},{"type":"square-angular","color":"black","transform":"rotate(90deg) translate(0,30%) scale(.1,.25)"},{"type":"bending-priority","color":"black","transform":"scale(.85)"}]},"priority-road-from-left-3way":{"category":"supplementary","name":"priority road comes from the left and continues straight at a 3-way intersection","elements":[{"type":"square-rounded","color":"black"},{"type":"square-rounded","color":"white","transform":"scale(.95, .95)"},{"type":"square-angular","color":"black","transform":"translate(0,30%) scale(.1,.25)"},{"type":"bending-priority","color":"black","transform":"scale(-.85,-.85)"}]},"priority-road-from-left-4way":{"category":"supplementary","name":"priority road comes from the left and continues straight at a 4-way intersection","elements":[{"type":"square-rounded","color":"black"},{"type":"square-rounded","color":"white","transform":"scale(.95, .95)"},{"type":"square-angular","color":"black","transform":"translate(0,30%) scale(.1,.25)"},{"type":"square-angular","color":"black","transform":"rotate(-90deg) translate(0,30%) scale(.1,.25)"},{"type":"bending-priority","color":"black","transform":"scale(-.85,-.85)"}]},"priority-road-from-right-3way":{"category":"supplementary","name":"priority road comes from the right and continues straight at a 3-way intersection","elements":[{"type":"square-rounded","color":"black"},{"type":"square-rounded","color":"white","transform":"scale(.95, .95)"},{"type":"square-angular","color":"black","transform":"translate(0,30%) scale(.1,.25)"},{"type":"bending-priority","color":"black","transform":"scale(.85,-.85)"}]},"priority-road-from-right-4way":{"category":"supplementary","name":"priority road comes from the right and continues straight at a 4-way intersection","elements":[{"type":"square-rounded","color":"black"},{"type":"square-rounded","color":"white","transform":"scale(.95, .95)"},{"type":"square-angular","color":"black","transform":"translate(0,30%) scale(.1,.25)"},{"type":"square-angular","color":"black","transform":"rotate(90deg) translate(0,30%) scale(.1,.25)"},{"type":"bending-priority","color":"black","transform":"scale(.85,-.85)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/dk.json b/vendor/assets/iD/iD/traffico/signs/dk.json
deleted file mode 100644 (file)
index 6ef80de..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"danger_level_crossing":{"category":"danger","name":"level crossing","elements":[{"type":"square-angular","color":"red","transform":"rotate(60deg) scale(.2,1)"},{"type":"square-angular","color":"red","transform":"rotate(-60deg) scale(.2,1)"},{"type":"square-angular","color":"white","transform":"rotate(60deg) scale(.1,.5) translate(50%,50%)"},{"type":"square-angular","color":"white","transform":"rotate(-60deg) scale(.1,.5) translate(-50%,50%)"},{"type":"square-angular","color":"white","transform":"rotate(60deg) scale(.1,.5) translate(-50%,-50%)"},{"type":"square-angular","color":"white","transform":"rotate(-60deg) scale(.1,.5) translate(50%,-50%)"}]},"information_border_dk":{"category":"information","name":"European border crossing into Denmark","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"Danmark"}]},"no_trucks":{"category":"prohibitory","name":"no trucks","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"truck","color":"black"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(.98) scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.2,1)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(.4)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/ee.json b/vendor/assets/iD/iD/traffico/signs/ee.json
deleted file mode 100644 (file)
index cd83633..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_ee":{"category":"information","name":"European border crossing into Estonia","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"EESTI"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/es.json b/vendor/assets/iD/iD/traffico/signs/es.json
deleted file mode 100644 (file)
index 2510621..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_es":{"category":"information","name":"European border crossing into Spain","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"ESPAÑA"}]},"pedestrian-crossing":{"category":"danger","name":"pedestrian crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"pedestrian","color":"black","transform":"scale(.8) translate(0,5%)"}]},"road-narrows-ahead":{"category":"danger","name":"Road narrows","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"narrow-road-both","color":"black","transform":"translate(0,14.43%) scale(.6)"}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(.98) scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.2,1)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(.4)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/fi.json b/vendor/assets/iD/iD/traffico/signs/fi.json
deleted file mode 100644 (file)
index d53f0fa..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_fi":{"category":"information","name":"European border crossing into Finland","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"SUOMI","transform":"translate(0,-100%)"},{"type":"content-5","color":"white","content":"FINLAND","transform":"translate(0,0)"},{"type":"content-5","color":"white","content":"SUOPMA","transform":"translate(0,100%)"}]},"cyclists-crossing-ahead":{"category":"danger","name":"cyclists crossing ahead","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"yellow","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"bicycle","color":"black","transform":"scale(.65) translate(0,25%)"}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(.98) scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.2,1)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"yellow","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(.4)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/fr.json b/vendor/assets/iD/iD/traffico/signs/fr.json
deleted file mode 100644 (file)
index c65d593..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_fr":{"category":"information","name":"European border crossing into France","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"FRANCE"}]},"information_city_entrance":{"category":"information","name":"entrée commune ref:EB10","elements":[{"type":"square-angular","color":"white","transform":"scale(1,.5)"},{"type":"square-angular","color":"red","transform":"scale(.95,.45)"},{"type":"square-angular","color":"white","transform":"scale(.9,.4)"},{"type":"content-5","color":"black","content":"some city"}]},"information_city_exit":{"category":"information","name":"sortie commune ref:EB20","elements":[{"type":"square-angular","color":"white","transform":"scale(1,.5)"},{"type":"square-angular","color":"black","transform":"scale(.95,.45)"},{"type":"square-angular","color":"white","transform":"scale(.9,.4)"},{"type":"content-5","color":"black","content":"some city"},{"type":"square-diagonal-bar","color":"red","transform":"scale(.9,.4)"}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(.98) scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.2,1)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(.4)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/gr.json b/vendor/assets/iD/iD/traffico/signs/gr.json
deleted file mode 100644 (file)
index 7f66bdc..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_gr":{"category":"information","name":"European border crossing into Greece","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"yellow","content":"EΛΛAΣ","transform":"translate(0,-50%)"},{"type":"content-5","color":"white","content":"GREECE","transform":"translate(0,50%)"}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(.98) scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.2,1)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"yellow","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(.4)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/hu.json b/vendor/assets/iD/iD/traffico/signs/hu.json
deleted file mode 100644 (file)
index 7f0f9f2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_hu":{"category":"information","name":"European border crossing into Hungary","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"Magyarország","transform":"scale(.75)"}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(.98) scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.2,1)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(.4)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/it.json b/vendor/assets/iD/iD/traffico/signs/it.json
deleted file mode 100644 (file)
index 96f44a8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_it":{"category":"information","name":"European border crossing into Italy","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"ITALIA"}]},"cyclists-crossing-ahead":{"category":"danger","name":"cyclists crossing ahead","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"yellow","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"bicycle","color":"black","transform":"scale(.65) translate(0,25%)"}]},"children":{"category":"danger","name":"children","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"children","color":"black","transform":"translate(0,14.43%) scale(.75)"}]},"level-crossing":{"category":"danger","name":"Level crossing","variation":"other","elements":[{"type":"level-crossing","color":"red"},{"type":"level-crossing","color":"red","transform":"scale(-1,1)"},{"type":"square-angular","color":"white","transform":"rotate(60deg) scale(.05,1)"},{"type":"square-angular","color":"white","transform":"rotate(-60deg) scale(.05,1)"}]},"pedestrians-only":{"category":"mandatory","name":"pedestrians only","elements":[{"type":"circle-bg","color":"blue"},{"type":"pedestrian","color":"white","transform":""}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(.98) scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.2,1)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(.4)"}]},"turn-right-ahead":{"category":"mandatory","name":"turn right ahead","elements":[{"type":"circle-bg","color":"blue"},{"type":"arrow-l","color":"white","transform":"scale(-1,1)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/lt.json b/vendor/assets/iD/iD/traffico/signs/lt.json
deleted file mode 100644 (file)
index 72a351c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_lt":{"category":"information","name":"European border crossing into Lithuania","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"Lietuvos","transform":"translate(0,-80%)"},{"type":"content-5","color":"white","content":"Respublika","transform":"translate(0,20%)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/lu.json b/vendor/assets/iD/iD/traffico/signs/lu.json
deleted file mode 100644 (file)
index 0be6c42..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_lu_fr":{"category":"information","name":"European border crossing into Luxembourg from France","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"Luxembourg","transform":"scale(.85)"}]},"information_border_lu_de":{"category":"information","name":"European border crossing into Luxembourg from Germany","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"Luxemburg","transform":"scale(.85)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/lv.json b/vendor/assets/iD/iD/traffico/signs/lv.json
deleted file mode 100644 (file)
index baef29b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_lv":{"category":"information","name":"European border crossing into Latvia","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"LATVIJA"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/nl.json b/vendor/assets/iD/iD/traffico/signs/nl.json
deleted file mode 100644 (file)
index 8f539ce..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_nl":{"category":"information","name":"European border crossing into the Netherlands","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"Nederland"}]},"information_cycleway":{"category":"information","name":"non-compulsory cycleway","elements":[{"type":"square-rounded","color":"white","transform":"scale(1,.3)"},{"type":"square-rounded","color":"blue","transform":"scale(.95,.25)"},{"type":"content-4","color":"white","content":"fietspad"}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(0.707107) rotate(45deg) scale(.98)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.05,1)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(.4)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/no.json b/vendor/assets/iD/iD/traffico/signs/no.json
deleted file mode 100644 (file)
index 35fe6c3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"no_trucks":{"category":"prohibitory","name":"no trucks","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"truck","color":"black"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(.98) scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.2,1)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(.4)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/pl.json b/vendor/assets/iD/iD/traffico/signs/pl.json
deleted file mode 100644 (file)
index d4cc436..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_pl":{"category":"information","name":"European border crossing into Poland","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"Rzeczpospolita","transform":"translate(0,-70%) scale(.7)"},{"type":"content-5","color":"white","content":"Polska","transform":"translate(0,40%)"}]},"pedestrian-crossing":{"category":"danger","name":"pedestrian crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"yellow","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"pedestrian","color":"black","transform":"scale(.8) translate(0,5%)"}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(.98) scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.2,1)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"yellow","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(.4)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/se.json b/vendor/assets/iD/iD/traffico/signs/se.json
deleted file mode 100644 (file)
index 7d54d44..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_se":{"category":"information","name":"European border crossing into Sweden","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"SVERIGE"}]},"cyclists-crossing-ahead":{"category":"danger","name":"cyclists crossing ahead","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"yellow","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"bicycle","color":"black","transform":"scale(.65) translate(0,25%)"}]},"pedestrian-crossing":{"category":"danger","name":"pedestrian crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"yellow","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"pedestrian","color":"black","transform":"scale(.8) translate(0,5%)"}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(.98) scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.2,1)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"yellow","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(.4)"}]},"children":{"category":"danger","name":"children","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"yellow","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"children","color":"black","transform":"translate(0,14.43%) scale(.75)"}]},"give-way-to-oncoming-traffic":{"category":"priority","name":"give way to oncoming traffic","elements":[{"type":"circle-bg","color":"red"},{"type":"circle-bg","color":"yellow","transform":"scale(0.8)"},{"type":"DE-arrow-up","color":"black","transform":"scale(.7) translate(-25%,5%) rotate(180deg)"},{"type":"DE-arrow-up","color":"red","transform":"scale(.7) translate(25%,-5%)"}]},"no-bicycles":{"category":"prohibitory","name":"no bicycles","elements":[{"type":"circle-bg","color":"yellow"},{"type":"circle-o","color":"red"},{"type":"bicycle","color":"black","transform":"scale(.8)"}]},"no-pedestrians":{"category":"prohibitory","name":"no pedestrians","elements":[{"type":"circle-bg","color":"yellow"},{"type":"circle-o","color":"red"},{"type":"pedestrian","color":"black","transform":"scale(.8)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/si.json b/vendor/assets/iD/iD/traffico/signs/si.json
deleted file mode 100644 (file)
index 63268a7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_si":{"category":"information","name":"European border crossing into Slovenia","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"SLOVENIA","transform":"scale(.85)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/sk.json b/vendor/assets/iD/iD/traffico/signs/sk.json
deleted file mode 100644 (file)
index 64db3d7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information_border_sk":{"category":"information","name":"European border crossing into Slovakia","elements":[{"type":"square-rounded","color":"blue"},{"type":"europe_stars","color":"yellow"},{"type":"content-5","color":"white","content":"SLOVENSKO","transform":"scale(.8)"}]},"priority-road-end":{"category":"priority","name":"end of priority road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"white","transform":"scale(0.707107) rotate(45deg) scale(.98)"},{"type":"square-rounded","color":"yellow","transform":"scale(.6) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.05,1)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0)"},{"type":"square-angular","color":"black","transform":"scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(.4)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/uk.json b/vendor/assets/iD/iD/traffico/signs/uk.json
deleted file mode 100644 (file)
index 670f728..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"danger_contraflow":{"category":"danger","name":"contraflow","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"DE-arrow-up","color":"black","transform":"translate(0,14.43%) scale(.35) translate(-25%,-5%)"},{"type":"DE-arrow-up","color":"black","transform":"translate(0,14.43%) scale(.35) translate(25%,5%) rotate(180deg)"}]},"level-crossing":{"category":"danger","name":"Level crossing","variation":"other","elements":[{"type":"level-crossing","color":"red"},{"type":"level-crossing","color":"red","transform":"scale(-1,1)"},{"type":"square-angular","color":"white","transform":"rotate(60deg) scale(.05,1)"},{"type":"square-angular","color":"white","transform":"rotate(-60deg) scale(.05,1)"}]},"mandatory_roundabout":{"category":"mandatory","name":"roundabout","elements":[{"type":"circle-bg","color":"blue"},{"type":"roundabout","color":"white","transform":"scale(-1.25,1.25)"}]},"prohibitory_overtaking":{"category":"prohibitory","name":"no overtaking","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"car","color":"black","transform":"scale(.6) translate(-26%,10%)"},{"type":"car","color":"red","transform":"scale(.6) translate(26%,10%)"}]},"railway-crossing-unsecured":{"category":"danger","name":"unsecured railway crossing","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"railway-xing-unsecured","color":"black","transform":"translate(0,13%) scale(-.4,.4)"}]},"children":{"category":"danger","name":"children","elements":[{"type":"tri-rounded","color":"red"},{"type":"tri-angular","color":"white","transform":"translate(0,14.43%) scale(.7) translate(0,-14.43%)"},{"type":"children","color":"black","transform":"translate(0,14.43%) scale(-.75,.75)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/signs/us.json b/vendor/assets/iD/iD/traffico/signs/us.json
deleted file mode 100644 (file)
index 844cda8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"pass-on-either-side":{"category":"regulatory","name":"Pass on either side","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"pass-either-us","color":"black"}]},"yield":{"category":"regulatory","name":"Yield","elements":[{"type":"tri-rounded","color":"red","transform":"rotate(180deg)"},{"type":"tri-rounded","color":"white","transform":"translate(0,-14.43%) scale(.55) translate(0,14.43%) rotate(180deg)"},{"type":"content-4","content":"YIELD","color":"red","transform":"translate(0,-115%) scale(.6)"}]},"no-bicycles":{"category":"regulatory","name":"no bicycles","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"bicycle","color":"black","transform":"scale(.8)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-entry":{"category":"regulatory","name":"No entry","elements":[{"type":"circle-bg","color":"red"},{"type":"square-angular","color":"white","transform":"scale(.92,.16)"}]},"no-left-or-u-turn":{"category":"regulatory","name":"no left or u turn","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"no-l-or-u-turn","color":"black"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-left-turn":{"category":"regulatory","name":"no left turn","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"turn-90-l","color":"black","transform":"scale(.8)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-parking":{"category":"regulatory","name":"no parking","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"parking","color":"black","transform":"scale(.8)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-pedestrians":{"category":"regulatory","name":"no pedestrian crossing","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"pedestrian","color":"black"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-straight-through":{"category":"regulatory","name":"no straight through","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"US-arrow-up","color":"black"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-heavy-goods-vehicles":{"category":"regulatory","name":"no trucks","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"truck","color":"black","transform":"scale(.8)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-right-turn":{"category":"regulatory","name":"no right turn","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"turn-90-l","color":"black","transform":"scale(.8) scale(-1,1)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"no-u-turn":{"category":"regulatory","name":"no u turn","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"u-turn","color":"black","transform":"scale(.8)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"maximum-speed-limit":{"category":"regulatory","name":"Maximum speed limit","elements":[{"type":"square-rounded","color":"white","transform":"scale(.7,1)"},{"type":"square-rounded","color":"black","transform":"scale(.7,1) scale(.95)"},{"type":"square-rounded","color":"white","transform":"scale(.7,1) scale(.90)"},{"type":"content-4","color":"black","content":"SPEED","transform":"translate(0,-145%) scale(.8)"},{"type":"content-4","color":"black","content":"LIMIT","transform":"translate(0,-60%) scale(.8)"},{"type":"us_speed_value","color":"black","transform":"translate(0,45%)"}]},"stop":{"category":"regulatory","name":"Stop","elements":[{"type":"octagon","color":"red"},{"type":"stop","color":"white"}]},"t-roads":{"category":"warning","name":"T-roads","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"t-roads","color":"black"}]},"y-roads":{"category":"warning","name":"y roads","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"y-roads","color":"black"}]},"added-lane-from-entering-roadway":{"category":"warning","name":"added lane (from entering roadway)","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"added-lane","color":"black","transform":"rotate(45deg) scale(.95)"}]},"added-lane-right":{"category":"warning","name":"added lane","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"added-lane","color":"black"}]},"slippery-bicycles":{"category":"warning","name":"bicycle slippery","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"bicycle-slippery","color":"black"}]},"crossroads-ahead":{"category":"warning","name":"cross roads","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"cross-roads","color":"black"}]},"double-curve-first-right-ahead":{"category":"warning","name":"Double curve first right ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"reverse-curve-au","color":"black","transform":"scale(-1,1) scale(.9)"}]},"double-turn-first-left-ahead":{"category":"warning","name":"turn reverse left","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-reverse-left","color":"black"}]},"cyclists-crossing":{"category":"warning","name":"bicycles","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"bicycle","color":"black","transform":"scale(.9)"}]},"double-reverse-curve":{"category":"warning","name":"double 2 reverse curve","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"orange","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"single-2-reverse-curve","color":"black","transform":"scale(.9) translate(-9%)"},{"type":"single-2-reverse-curve","color":"black","transform":"scale(.9) translate(9%)"}]},"falling-rocks-or-debris-right":{"category":"warning","name":"falling rocks","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"falling-rocks-US","color":"black"}]},"emergency-vehicles":{"category":"warning","name":"fire station","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"fire-station","color":"black"}]},"flaggers-in-road-ahead":{"category":"warning","name":"flaggers in road ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"flaggers","color":"black"}]},"hairpin-curve-right-ahead":{"category":"warning","name":"hairpin curve","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"hairpin-curve","color":"black"}]},"divided-highway-ahead":{"category":"warning","name":"highway divided","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"highway-divided","color":"black"}]},"horizontal-alignment-left":{"category":"warning","name":"horizontal alignment left","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"h-align-l","color":"black"}]},"horizontal-alignment-right":{"category":"warning","name":"horizontal alignment right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"h-align-l","color":"black","transform":"scale(-1,1)"}]},"roundabout-ahead":{"category":"warning","name":"Roundabout ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"roundabout","color":"black"}]},"tram-crossing":{"category":"warning","name":"light rail crossing","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"light-rail","color":"black"}]},"loop-270-degrees":{"category":"warning","name":"loop 270 degree","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"loop-270","color":"black"}]},"loop-pretzel":{"category":"warning","name":"pretzel_loop","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"pretzel-loop","color":"black","transform":"scale(.9)"}]},"height-restriction-ahead":{"category":"warning","name":"Height restriction ahead","variation":"feet","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"height","color":"black"},{"type":"height_value","color":"black"}]},"height-restriction-ahead_v2":{"category":"warning","name":"Height restriction ahead","variation":"meters","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"height","color":"black"},{"type":"height_value","color":"black"}]},"traffic-merges-right-ahead":{"category":"warning","name":"merge","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"merge","color":"black"}]},"motorcycle-crossing":{"category":"warning","name":"motorcycle crossing","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"motorbike","color":"black"}]},"narrow-bridge-ahead":{"category":"warning","name":"narrow bridge ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"narrow-bridge-us","color":"black","transform":"scale(0.8)"}]},"offset-roads":{"category":"warning","name":"offset roads","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"offset-roads","color":"black"}]},"pass-left-or-right":{"category":"warning","name":"pass left or right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"pass-l-r","color":"black"}]},"pedestrian-crossing":{"category":"warning","name":"pedestrian crossing","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"pedestrian","color":"black"}]},"playground-ahead":{"category":"warning","name":"Playground ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"play-ground","color":"black"}]},"uncontroller-railroad-crossing-ahead":{"category":"warning","name":"railroad","elements":[{"type":"circle-bg","color":"yellow"},{"type":"circle-bar-rounded","color":"black","transform":"rotate(-45deg)"},{"type":"circle-bar-rounded","color":"black","transform":"rotate(45deg)"},{"type":"railroad","color":"black"}]},"road-narrows-right-ahead":{"category":"warning","name":"road narrows right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"narrow-road-l","color":"black","transform":"scale(.9) scale(-1,1)"}]},"road-narrows-left-ahead":{"category":"warning","name":"road narrows left","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"narrow-road-l","color":"black","transform":"scale(.9)"}]},"road-narrows-ahead":{"category":"warning","name":"road narrows both","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"narrow-road-both","color":"black","transform":"scale(.9)"}]},"junction-with-a-side-road-acute-left-ahead":{"category":"warning","name":"side road acute angle right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-a-a-r","color":"black"}]},"junction-with-a-side-road-acute-right-ahead":{"category":"warning","name":"side road acute angle left","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-a-a-l","color":"black"}]},"junction-with-a-side-road-perpendicular-right-ahead":{"category":"warning","name":"side road perpendicular right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-p-r","color":"black"}]},"junction-with-a-side-road-perpendicular-left-ahead":{"category":"warning","name":"side road perpendicular left","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"side-road-p-l","color":"black"}]},"slippery-road-surface":{"category":"warning","name":"slippery","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"slippery","color":"black"}]},"steep-hill-downwards":{"category":"warning","name":"steep hill","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"steep-hill","color":"black"}]},"stop-ahead":{"category":"warning","name":"Stop ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"small-arrow-au","color":"black","transform":"translate(0,-25%)"},{"type":"octagon","color":"red","transform":"translate(0,15%) scale(.4)"}]},"traffic-signals-ahead":{"category":"warning","name":"traffic light","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(.2,.55)"},{"type":"circle-bg","color":"green","transform":"translate(0,16.5%) scale(.14)"},{"type":"circle-bg","color":"yellow","transform":"scale(.14)"},{"type":"circle-bg","color":"red","transform":"translate(0,-16.5%) scale(.14)"}]},"triple-reverse-curve":{"category":"warning","name":"triple 2 reverse curve","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"orange","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"single-2-reverse-curve","color":"black","transform":"scale(.9) translate(-18%)"},{"type":"single-2-reverse-curve","color":"black","transform":"scale(.9)"},{"type":"single-2-reverse-curve","color":"black","transform":"scale(.9) translate(18%)"}]},"trucks-rollover":{"category":"warning","name":"trucks rollover","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"trucks-rollover","color":"black"}]},"turn-curve-left":{"category":"warning","name":"Turn curve left","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-l-curve","color":"black","transform":"scale(.9)"}]},"turn-curve-right":{"category":"warning","name":"Turn curve right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-l-curve","color":"black","transform":"scale(.9) scale(-1,1)"}]},"turn-right":{"category":"warning","name":"turn right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-90-l","color":"black","transform":"scale(-1,1)"}]},"turn-left":{"category":"warning","name":"turn left","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-90-l","color":"black"}]},"double-turn-first-right-ahead":{"category":"warning","name":"turn reverse right","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-reverse-left","color":"black","transform":"scale(-1,1)"}]},"two-way-traffic-ahead":{"category":"warning","name":"Two way traffic ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"arrows_both_bra","color":"black","transform":"scale(.9)"}]},"winding-road-first-left-ahead":{"category":"warning","name":"winding road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"winding-road-left","color":"black"}]},"winding-road-first-right-ahead":{"category":"warning","name":"winding road","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"winding-road-left","color":"black","transform":"scale(-1,1)"}]},"workers-in-road-ahead":{"category":"warning","name":"workers in road ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"roadworks","color":"black","transform":"scale(.9)"}]},"yield-ahead":{"category":"warning","name":"Yield ahead","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"small-arrow-au","color":"black","transform":"translate(0,-25%)"},{"type":"tri-rounded","color":"red","transform":"translate(0, 15%) scale(.45) rotate(180deg)"},{"type":"tri-rounded","color":"white","transform":"translate(0, 12%) scale(.25) rotate(180deg)"}]},"horizontal-traffic-signals-ahead":{"category":"warning","name":"traffic light","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"square-angular","color":"black","transform":"scale(.55,.2)"},{"type":"circle-bg","color":"green","transform":"translate(16.5%,0) scale(.14)"},{"type":"circle-bg","color":"yellow","transform":"scale(.14)"},{"type":"circle-bg","color":"red","transform":"translate(-16.5%,0) scale(.14)"}]},"dead-end":{"category":"warning","name":"dead end","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"dead-end","color":"black"}]},"no-hitch-hiking":{"category":"regulatory","name":"no hitch hiking","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"hitch-hiking","color":"black"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"share-roads":{"category":"warning","name":"share roads","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"share-roads","color":"black"}]},"end":{"category":"warning","name":"end","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"end","color":"black"}]},"skewed-railroad-crossing":{"category":"warning","name":"skewed railroad crossing","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"skewed-railroads","color":"black"}]},"lightground-railroad-crossing":{"category":"warning","name":"lightground railroad crossing","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"lightground-railroad-crossing","color":"black"}]},"national-network-lane":{"category":"regulatory","name":"national_network_lane","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"green"},{"type":"lorry","color":"black"}]},"national-network-prohibited":{"category":"regulatory","name":"national_network_lane","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"lorry","color":"black"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"hazardous-material-prohibited":{"category":"regulatory","name":"hazardous material prohibited","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"hazardous-material","color":"black","transform":"scale(.8)"},{"type":"circle-o","color":"red"}]},"truck-rollover-with-speed":{"category":"warning","name":"truck rollover with speed","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"truck-rollover-speed","color":"black"}]},"no-rollerblading":{"category":"regulatory","name":"no rollerblading","elements":[{"type":"circle-bg","color":"white"},{"type":"circle-o","color":"red"},{"type":"rollerblading","color":"black","transform":"scale(.8)"},{"type":"circle-bar-rounded","color":"red","transform":"rotate(-45deg)"}]},"one-way-left":{"category":"regulatory","name":"one way small left","elements":[{"type":"square-rounded","color":"white","transform":"scale(1.1,.33)"},{"type":"square-rounded","color":"black","transform":"scale(1.1,.33) scale(.95)"},{"type":"US-arrow-oneway","color":"white","transform":"scale(.6) scale(1.35,1) rotate(-90deg)"},{"type":"content-4","color":"black","content":"ONE","transform":"scale(.5,.6) translate(-15%,-25%)"},{"type":"content-4","color":"black","content":"WAY","transform":"scale(.5,.6) translate(45%,-25%)"}]},"one-way-right":{"category":"regulatory","name":"one way small right","elements":[{"type":"square-rounded","color":"white","transform":"scale(1.1,.33)"},{"type":"square-rounded","color":"black","transform":"scale(1.1,.33) scale(.95)"},{"type":"US-arrow-oneway","color":"white","transform":"scale(.6) scale(1.35,1) rotate(90deg)"},{"type":"content-4","color":"black","content":"ONE","transform":"scale(.5,.6) translate(-45%,-25%)"},{"type":"content-4","color":"black","content":"WAY","transform":"scale(.5,.6) translate(15%,-25%)"}]},"one-way-left_v2":{"category":"regulatory","name":"one way large left","variation":"alternate","elements":[{"type":"square-rounded","color":"white","transform":"scale(.7,1)"},{"type":"square-rounded","color":"black","transform":"scale(.7,1) scale(.95)"},{"type":"square-rounded","color":"white","transform":"scale(.7,1) scale(.90)"},{"type":"content-4","color":"black","content":"ONE","transform":"scale(1,1.2) translate(0,-90%)"},{"type":"content-4","color":"black","content":"WAY","transform":"scale(1,1.2)"},{"type":"US-arrow-oneway","color":"black","transform":"scale(.5) translate(0,45%) rotate(-90deg)"}]},"one-way-right_v2":{"category":"regulatory","name":"one way large right","variation":"alternate","elements":[{"type":"square-rounded","color":"white","transform":"scale(.7,1)"},{"type":"square-rounded","color":"black","transform":"scale(.7,1) scale(.95)"},{"type":"square-rounded","color":"white","transform":"scale(.7,1) scale(.90)"},{"type":"content-4","color":"black","content":"ONE","transform":"scale(1,1.2) translate(0,-90%)"},{"type":"content-4","color":"black","content":"WAY","transform":"scale(1,1.2)"},{"type":"US-arrow-oneway","color":"black","transform":"scale(.5) translate(0,45%) rotate(90deg)"}]},"single-reverse-curve":{"category":"warning","name":"single 2 reverse curve","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"orange","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"single-2-reverse-curve","color":"black"}]},"school":{"category":"school","name":"school","elements":[{"type":"school","color":"black"},{"type":"school","color":"fluogreen","transform":"scale(.95)"},{"type":"children","color":"black"}]},"school_v2":{"category":"school","name":"school","variation":"obsolete","elements":[{"type":"school","color":"black"},{"type":"school","color":"yellow","transform":"scale(.95)"},{"type":"children","color":"black"}]},"turn-curve-left-with-speed":{"category":"warning","name":"turn left curve with speed","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-l-curve","color":"black","transform":"scale(.9)"},{"type":"turn-curve-speed","color":"black","transform":"scale(.9) scale(-1,1)"}]},"turn-curve-right-with-speed":{"category":"warning","name":"turn right curve with speed","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"turn-l-curve","color":"black","transform":"scale(.9) scale(-1,1)"},{"type":"turn-curve-speed","color":"black","transform":"scale(.9)"}]},"hight-speed-limit":{"category":"regulatory","name":"night_speed_limit","elements":[{"type":"square-rounded","color":"white"},{"type":"square-rounded","color":"black","transform":"scale(.95)"},{"type":"content-4","color":"white","content":"NIGHT","transform":"translate(0,-100%) scale(.8)"},{"type":"us_speed_value","color":"white","transform":"translate(0,35%) scale(1.1)"}]},"truck-speed-limit":{"category":"regulatory","name":"truck_speed_limit","elements":[{"type":"square-rounded","color":"white"},{"type":"square-rounded","color":"black","transform":"scale(.95)"},{"type":"square-rounded","color":"white","transform":"scale(.90)"},{"type":"content-4","color":"black","content":"TRUCKS","transform":"translate(0,-100%) scale(.7,.9)"},{"type":"us_speed_value","color":"black","transform":"translate(0,35%) scale(1.1)"}]},"merging-traffic":{"category":"warning","name":"merging traffic","elements":[{"type":"square-rounded","color":"black","transform":"scale(0.707107) rotate(45deg)"},{"type":"square-rounded","color":"yellow","transform":"scale(.95) scale(0.707107) rotate(45deg)"},{"type":"merge","color":"black","transform":"rotate(45deg)"}]}}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/at-map.json b/vendor/assets/iD/iD/traffico/string-maps/at-map.json
deleted file mode 100644 (file)
index 309a1a0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_at--at":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.75);-moz-transform:scale(.75);transform:scale(.75)\">ÖSTERREICH</i></span>","danger--level-crossing--at--other":"<span class=\"t\"><i class=\"t-level-crossing t-c-red\"></i><i class=\"t-level-crossing t-c-red\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(60deg) scale(.05,1);-moz-transform:rotate(60deg) scale(.05,1);transform:rotate(60deg) scale(.05,1)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(-60deg) scale(.05,1);-moz-transform:rotate(-60deg) scale(.05,1);transform:rotate(-60deg) scale(.05,1)\"></i></span>","priority--priority-road-end--at":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.98) scale(0.707107) rotate(45deg);-moz-transform:scale(.98) scale(0.707107) rotate(45deg);transform:scale(.98) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.2,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.2,1);transform:scale(0.707107) rotate(45deg) scale(.2,1)\"></i></span>","danger--railway-crossing-unsecured--at":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(.4);-moz-transform:translate(0,13%) scale(.4);transform:translate(0,13%) scale(.4)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/au-map.json b/vendor/assets/iD/iD/traffico/string-maps/au-map.json
deleted file mode 100644 (file)
index 639f6e3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"prohibitory--maximum-speed-limit-5--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-1 t-c-black\">5</i></span>","prohibitory--maximum-speed-limit-10--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">10</i></span>","prohibitory--maximum-speed-limit-15--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">15</i></span>","prohibitory--maximum-speed-limit-20--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">20</i></span>","prohibitory--maximum-speed-limit-25--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">25</i></span>","prohibitory--maximum-speed-limit-30--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">30</i></span>","prohibitory--maximum-speed-limit-35--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">35</i></span>","prohibitory--maximum-speed-limit-40--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">40</i></span>","prohibitory--maximum-speed-limit-45--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">45</i></span>","prohibitory--maximum-speed-limit-50--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">50</i></span>","prohibitory--maximum-speed-limit-55--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">55</i></span>","prohibitory--maximum-speed-limit-60--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">60</i></span>","prohibitory--maximum-speed-limit-65--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">65</i></span>","prohibitory--maximum-speed-limit-70--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">70</i></span>","prohibitory--maximum-speed-limit-75--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">75</i></span>","prohibitory--maximum-speed-limit-80--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">80</i></span>","prohibitory--maximum-speed-limit-85--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">85</i></span>","prohibitory--maximum-speed-limit-90--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">90</i></span>","prohibitory--maximum-speed-limit-100--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-3 t-c-black\">100</i></span>","prohibitory--maximum-speed-limit-110--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-3 t-c-black\">110</i></span>","prohibitory--maximum-speed-limit-120--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-3 t-c-black\">120</i></span>","prohibitory--maximum-speed-limit-130--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-3 t-c-black\">130</i></span>","regulatory--yield--au":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\" style=\"-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);transform:rotate(180deg)\"></i><i class=\"t-tri-rounded t-c-white\" style=\"-webkit-transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg);-moz-transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg);transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-115%) scale(.6);-moz-transform:translate(0,-115%) scale(.6);transform:translate(0,-115%) scale(.6)\">GIVE</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-45%) scale(.6);-moz-transform:translate(0,-45%) scale(.6);transform:translate(0,-45%) scale(.6)\">WAY</i></span>","regulatory--yield-to-oncoming-traffic--au":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\" style=\"-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);transform:rotate(180deg)\"></i><i class=\"t-tri-rounded t-c-white\" style=\"-webkit-transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg);-moz-transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg);transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-115%) scale(.6);-moz-transform:translate(0,-115%) scale(.6);transform:translate(0,-115%) scale(.6)\">GIVE</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-45%) scale(.6);-moz-transform:translate(0,-45%) scale(.6);transform:translate(0,-45%) scale(.6)\">WAY</i></span>","regulatory--no-bicycles--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-bicycle t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-entry--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:scale(.92,.16);-moz-transform:scale(.92,.16);transform:scale(.92,.16)\"></i><i class=\"t-content-3 t-c-white\" style=\"-webkit-transform:translate(0,-80%) scale(.5);-moz-transform:translate(0,-80%) scale(.5);transform:translate(0,-80%) scale(.5)\">NO</i><i class=\"t-content-3 t-c-white\" style=\"-webkit-transform:translate(-10%,30%) scale(.5);-moz-transform:translate(-10%,30%) scale(.5);transform:translate(-10%,30%) scale(.5)\">ENTRY</i></span>","regulatory--no-heavy-goods-vehicles--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-truck t-c-black\" style=\"-webkit-transform:scale(1.2);-moz-transform:scale(1.2);transform:scale(1.2)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-left-turn--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-turn-l-aus t-c-black\" style=\"-webkit-transform:scale(0.55) translate(-10%, 5%);-moz-transform:scale(0.55) translate(-10%, 5%);transform:scale(0.55) translate(-10%, 5%)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-pedestrians--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-pedestrian_bra t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-right-turn--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-turn-l-aus t-c-black\" style=\"-webkit-transform:scale(-0.55, 0.55) translate(-10%, 5%);-moz-transform:scale(-0.55, 0.55) translate(-10%, 5%);transform:scale(-0.55, 0.55) translate(-10%, 5%)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-u-turn--au":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-u-turn-au t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","regulatory--stop--au":"<span class=\"t\"><i class=\"t-octagon t-c-red\"></i><i class=\"t-stop t-c-white\"></i></span>","warning--added-lane-left--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-added-lane t-c-black\"></i></span>","warning--added-lane-right--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-added-lane t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--bump-in-road--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-bump_road_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--children--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-fluogreen\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-children-au t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i></span>","warning--crossroads-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-crossroads-ahead t-c-black\"></i></span>","warning--curve-left-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-l-curve t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--curve-right-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-l-curve t-c-black\" style=\"-webkit-transform:scale(.9) scale(-1,1);-moz-transform:scale(.9) scale(-1,1);transform:scale(.9) scale(-1,1)\"></i></span>","warning--cyclists-crossing--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--dip-in-road--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-content-3 t-c-black\">DIP</i></span>","warning--divided-highway-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-divided-highway t-c-black\"></i></span>","warning--divided-highway-ends--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-divided-highway t-c-black\" style=\"-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);transform:scale(1,-1)\"></i></span>","warning--domestic-animals--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-domestic-animals-au t-c-black\"></i></span>","warning--equestrians--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-equestrian t-c-black\" style=\"-webkit-transform:scale(0.6) scale(.9);-moz-transform:scale(0.6) scale(.9);transform:scale(0.6) scale(.9)\"></i></span>","warning--falling-rocks-or-debris-left--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-falling-rocks-au t-c-black\"></i></span>","warning--farm-vehicles--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-tractor t-c-black\" style=\"-webkit-transform:scale(.45);-moz-transform:scale(.45);transform:scale(.45)\"></i></span>","warning--hairpin-curve-left-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-hairpin-curve-au t-c-black\" style=\"-webkit-transform: scale(0.85) scale(.9);-moz-transform: scale(0.85) scale(.9);transform: scale(0.85) scale(.9)\"></i></span>","warning--hairpin-curve-right-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-hairpin-curve-au t-c-black\" style=\"-webkit-transform: scale(-0.85, 0.85) scale(.9);-moz-transform: scale(-0.85, 0.85) scale(.9);transform: scale(-0.85, 0.85) scale(.9)\"></i></span>","warning--horizontal-alignment-left--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-h-align-l t-c-black\"></i></span>","warning--horizontal-alignment-right--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-h-align-l t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--koala--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-koala-ugly t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--koala-crossing--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-koalas t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--narrow-bridge-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-bridge-au t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--pedestrian-crossing--au--retired":"<span class=\"t\"><i class=\"t-circle-bg t-c-black\"></i><i class=\"t-circle-bg t-c-yellow\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-pedestrian-crossing-au t-c-black\"></i></span>","warning--pedestrian-crossing--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-school_zone_bra t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--pedestrians-cyclists--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-pedestrian t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,-35%) scale(-1, 1);-moz-transform:scale(.8) scale(.6) translate(0,-35%) scale(-1, 1);transform:scale(.8) scale(.6) translate(0,-35%) scale(-1, 1)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,35%);-moz-transform:scale(.8) scale(.6) translate(0,35%);transform:scale(.8) scale(.6) translate(0,35%)\"></i></span>","warning--railway-level-crossing-with-flashing-signals-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-railway-flashing-au t-c-black\" style=\"-webkit-transform:scale(.9) scale(0.8);-moz-transform:scale(.9) scale(0.8);transform:scale(.9) scale(0.8)\"></i></span>","warning--curve-first-left-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-reverse-curve-au t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--double-curve-first-right-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-reverse-curve-au t-c-black\" style=\"-webkit-transform:scale(-1,1) scale(.9);-moz-transform:scale(-1,1) scale(.9);transform:scale(-1,1) scale(.9)\"></i></span>","warning--double-curve-first-left-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-reverse-curve-au t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--double-turn-first-left-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-reverse-left t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--double-turn-first-right-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-reverse-left t-c-black\" style=\"-webkit-transform:scale(-1,1) scale(.9);-moz-transform:scale(-1,1) scale(.9);transform:scale(-1,1) scale(.9)\"></i></span>","warning--road-narrows-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-road-both t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--roundabout-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-roundabout t-c-black\" style=\"-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);transform:scale(-1, 1)\"></i></span>","warning--junction-with-a-side-road-perpendicular-left-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-perpendicular t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--junction-with-a-side-road-perpendicular-right-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-perpendicular t-c-black\" style=\"-webkit-transform:scale(.9) scale(-1,1);-moz-transform:scale(.9) scale(-1,1);transform:scale(.9) scale(-1,1)\"></i></span>","warning--slippery-road-surface--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-slippery t-c-black\"></i></span>","warning--steep-hill-downwards--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-steep-hill-downwards t-c-black\"></i></span>","warning--steep-hill-upwards--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-steep-hill-upwards t-c-black\"></i></span>","warning--stop-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-small-arrow-au t-c-black\" style=\"-webkit-transform:translate(0,-25%);-moz-transform:translate(0,-25%);transform:translate(0,-25%)\"></i><i class=\"t-octagon t-c-red\" style=\"-webkit-transform:translate(0,15%) scale(.4);-moz-transform:translate(0,15%) scale(.4);transform:translate(0,15%) scale(.4)\"></i></span>","warning--traffic-signals-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-traffic-signal-au t-c-black\"></i></span>","warning--truck-crossing--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-truck t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--turn-left--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-90-l t-c-black\"></i></span>","warning--turn-right--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-90-l t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--two-way-traffic-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-arrows_both_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--uncontrolled-railroad-crossing-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-train-au t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--wild-animals--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-kangaroo t-c-black\"></i></span>","warning--winding-road-first-left-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-series-of-curves-left t-c-black\"></i></span>","warning--winding-road-first-right-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-series-of-curves-left t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--yield-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-small-arrow-au t-c-black\" style=\"-webkit-transform:translate(0,-25%);-moz-transform:translate(0,-25%);transform:translate(0,-25%)\"></i><i class=\"t-tri-rounded t-c-red\" style=\"-webkit-transform:translate(0, 15%) scale(.45) rotate(180deg);-moz-transform:translate(0, 15%) scale(.45) rotate(180deg);transform:translate(0, 15%) scale(.45) rotate(180deg)\"></i><i class=\"t-tri-rounded t-c-white\" style=\"-webkit-transform:translate(0, 12%) scale(.25) rotate(180deg);-moz-transform:translate(0, 12%) scale(.25) rotate(180deg);transform:translate(0, 12%) scale(.25) rotate(180deg)\"></i></span>","warning--emu-crossing--au--left":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-emu t-c-black\"></i></span>","warning--emu-crossing--au--right":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-emu t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--slippery-motorcycles--au--victoria":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-slippery-motorcycle t-c-black\"></i></span>","warning--traffic-merges-left-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-merge t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--traffic-merges-right-ahead--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-merge t-c-black\"></i></span>","warning--wombat-crossing--au":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-wombat t-c-black\"></i></span>","warning--wombat-crossing--au--victoria":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-wombat t-c-black\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/be-map.json b/vendor/assets/iD/iD/traffico/string-maps/be-map.json
deleted file mode 100644 (file)
index b135ca0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_be_nl--be":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">België</i></span>","information--information_border_be_fr--be":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">Belgique</i></span>","priority--priority-road-end--be":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.98) scale(0.707107) rotate(45deg);-moz-transform:scale(.98) scale(0.707107) rotate(45deg);transform:scale(.98) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.2,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.2,1);transform:scale(0.707107) rotate(45deg) scale(.2,1)\"></i></span>","danger--railway-crossing-unsecured--be":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(.4);-moz-transform:translate(0,13%) scale(.4);transform:translate(0,13%) scale(.4)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/br-map.json b/vendor/assets/iD/iD/traffico/string-maps/br-map.json
deleted file mode 100644 (file)
index 484ad66..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"mandatory--bicycles-only--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-bicycle t-c-black\"></i></span>","mandatory--proceed-straight--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-US-arrow-oneway t-c-black\" style=\"-webkit-transform:scale(.6);-moz-transform:scale(.6);transform:scale(.6)\"></i></span>","mandatory--keep-left--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-US-arrow-oneway t-c-black\" style=\"-webkit-transform:rotate(-135deg) scale(.6);-moz-transform:rotate(-135deg) scale(.6);transform:rotate(-135deg) scale(.6)\"></i></span>","mandatory--keep-right--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-US-arrow-oneway t-c-black\" style=\"-webkit-transform:rotate(135deg) scale(.6);-moz-transform:rotate(135deg) scale(.6);transform:rotate(135deg) scale(.6)\"></i></span>","mandatory--transit-only--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-transit_bra t-c-black\"></i></span>","mandatory--turn-right--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-US-arrow-oneway t-c-black\" style=\"-webkit-transform:rotate(90deg) scale(.6);-moz-transform:rotate(90deg) scale(.6);transform:rotate(90deg) scale(.6)\"></i></span>","information--parking--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-content t-c-black\" style=\"-webkit-transform:scale(1.5) translate(0,20%);-moz-transform:scale(1.5) translate(0,20%);transform:scale(1.5) translate(0,20%)\">E</i></span>","information--two-way-traffic--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-two_way_arrows_bra t-c-black\"></i></span>","prohibitory--maximum-speed-limit-5--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content-1 t-c-black\">5</i></span>","prohibitory--maximum-speed-limit-10--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">10</i></span>","prohibitory--maximum-speed-limit-15--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">15</i></span>","prohibitory--maximum-speed-limit-20--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">20</i></span>","prohibitory--maximum-speed-limit-25--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">25</i></span>","prohibitory--maximum-speed-limit-30--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">30</i></span>","prohibitory--maximum-speed-limit-35--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">35</i></span>","prohibitory--maximum-speed-limit-40--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">40</i></span>","prohibitory--maximum-speed-limit-45--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">45</i></span>","prohibitory--maximum-speed-limit-50--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">50</i></span>","prohibitory--maximum-speed-limit-55--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">55</i></span>","prohibitory--maximum-speed-limit-60--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">60</i></span>","prohibitory--maximum-speed-limit-65--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">65</i></span>","prohibitory--maximum-speed-limit-70--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">70</i></span>","prohibitory--maximum-speed-limit-75--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">75</i></span>","prohibitory--maximum-speed-limit-80--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">80</i></span>","prohibitory--maximum-speed-limit-85--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">85</i></span>","prohibitory--maximum-speed-limit-90--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content t-c-black\">90</i></span>","prohibitory--maximum-speed-limit-100--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content-3 t-c-black\">100</i></span>","prohibitory--maximum-speed-limit-110--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content-3 t-c-black\">110</i></span>","prohibitory--maximum-speed-limit-120--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content-3 t-c-black\">120</i></span>","prohibitory--maximum-speed-limit-130--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,120%) scale(.8);-moz-transform:translate(0,120%) scale(.8);transform:translate(0,120%) scale(.8)\">km/h</i><i class=\"t-content-3 t-c-black\">130</i></span>","regulatory--yield--br":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\" style=\"-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);transform:rotate(180deg)\"></i><i class=\"t-tri-rounded t-c-white\" style=\"-webkit-transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg);-moz-transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg);transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg)\"></i></span>","regulatory--no-bicycles--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-cyclists_crossing_bra t-c-black\" style=\"-webkit-transform:scale(1.2);-moz-transform:scale(1.2);transform:scale(1.2)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-entry--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-US-arrow-oneway t-c-black\" style=\"-webkit-transform:scale(.6);-moz-transform:scale(.6);transform:scale(.6)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-heavy-goods-vehicles--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-truck t-c-black\" style=\"-webkit-transform:scale(1.2);-moz-transform:scale(1.2);transform:scale(1.2)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-motor-vehicles--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-car t-c-black\" style=\"-webkit-transform:scale(.8) scale(1.3);-moz-transform:scale(.8) scale(1.3);transform:scale(.8) scale(1.3)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-motorcycles--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-motorbike t-c-black\" style=\"-webkit-transform:scale(.8) scale(1.3);-moz-transform:scale(.8) scale(1.3);transform:scale(.8) scale(1.3)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-overtaking--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-car t-c-black\" style=\"-webkit-transform:scale(.6) translate(-26%,10%);-moz-transform:scale(.6) translate(-26%,10%);transform:scale(.6) translate(-26%,10%)\"></i><i class=\"t-car t-c-black\" style=\"-webkit-transform:scale(.6) translate(26%,10%);-moz-transform:scale(.6) translate(26%,10%);transform:scale(.6) translate(26%,10%)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-parking--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-content t-c-black\" style=\"-webkit-transform:scale(1.5) translate(0,20%);-moz-transform:scale(1.5) translate(0,20%);transform:scale(1.5) translate(0,20%)\">E</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-pedestrians--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-pedestrian_bra t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-stopping--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-content t-c-black\" style=\"-webkit-transform:scale(1.5) translate(0,20%);-moz-transform:scale(1.5) translate(0,20%);transform:scale(1.5) translate(0,20%)\">E</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","regulatory--stop--br":"<span class=\"t\"><i class=\"t-octagon t-c-red\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:scale(1);-moz-transform:scale(1);transform:scale(1)\">PARE</i></span>","regulatory--no-left-or-u-turn--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-no-l-or-u-turn t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-left-turn--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-turn-90-l t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-straight-through--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-US-arrow-up t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no_trucks--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-truck t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-right-turn--br":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-turn-90-l t-c-black\" style=\"-webkit-transform:scale(.8) scale(-1,1);-moz-transform:scale(.8) scale(-1,1);transform:scale(.8) scale(-1,1)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-u-turn--br":"<span class=\"t\"><i class=\"t-circle-o t-c-red\"></i><i class=\"t-u-turn t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","warning--bump-in-road--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-bump_road_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--cyclists-crossing--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-cyclists_crossing_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--domestic-animals--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-domestic-animal t-c-black\" style=\"-webkit-transform:translate(-10%,0%) scale(.35);-moz-transform:translate(-10%,0%) scale(.35);transform:translate(-10%,0%) scale(.35)\"></i></span>","warning--falling-rocks-or-debris-right--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-falling-rocks-US t-c-black\"></i></span>","warning--farm-vehicles--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-tractor t-c-black\" style=\"-webkit-transform:scale(.45);-moz-transform:scale(.45);transform:scale(.45)\"></i></span>","warning--loose-road-surface--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-loose_road_surface_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--pedestrian-crossing--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-pedestrian_crossing_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--road-narrows-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-road-both t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--workers-in-road-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-roadworks_bra t-c-black\"></i></span>","warning--school-zone--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-school_zone_bra t-c-black\"></i></span>","warning--slippery-road-surface--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-slippery t-c-black\"></i></span>","warning--stop-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\">PARE</i></span>","warning--two-way-traffic-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-arrows_both_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--uneven-road--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-bump_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--wild-animals--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-wild-animal t-c-black\" style=\"-webkit-transform:scale(.9) scale(.9);-moz-transform:scale(.9) scale(.9);transform:scale(.9) scale(.9)\"></i></span>","warning--y-roads--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-y-roads t-c-black\"></i></span>","warning--added-lane-right--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-added-lane t-c-black\"></i></span>","warning--warning--added-lane-left--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-added-lane t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--double-curve-first-left-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-reverse-curve-au t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--double-curve-first-right-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-reverse-curve-au t-c-black\" style=\"-webkit-transform:scale(-1,1) scale(.9);-moz-transform:scale(-1,1) scale(.9);transform:scale(-1,1) scale(.9)\"></i></span>","warning--double-reverse-curve--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-orange\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-single-2-reverse-curve t-c-black\" style=\"-webkit-transform:scale(.9) translate(-9%);-moz-transform:scale(.9) translate(-9%);transform:scale(.9) translate(-9%)\"></i><i class=\"t-single-2-reverse-curve t-c-black\" style=\"-webkit-transform:scale(.9) translate(9%);-moz-transform:scale(.9) translate(9%);transform:scale(.9) translate(9%)\"></i></span>","warning--flaggers-in-road-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-flaggers t-c-black\"></i></span>","warning--divided-highway-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-divided-highway t-c-black\"></i></span>","warning--horizontal-alignment-right--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-h-align-l t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--roundabout-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-roundabout t-c-black\"></i></span>","warning--loop-pretzel--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-pretzel-loop t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--height-restriction-ahead--br--feet":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-height t-c-black\"></i><i class=\"t-height_value t-c-black\"></i></span>","warning--traffic-merges-right-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-a-a-r t-c-black\" style=\"-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);transform:scale(1, -1)\"></i></span>","warning--pass-left-or-right--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-pass-l-r t-c-black\"></i></span>","warning--playground-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-playground-br t-c-black\"></i></span>","warning--road-narrows-left-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-road-l t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--road-narrows-right-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-road-l t-c-black\" style=\"-webkit-transform:scale(.9) scale(-1,1);-moz-transform:scale(.9) scale(-1,1);transform:scale(.9) scale(-1,1)\"></i></span>","warning--junction-with-a-side-road-acute-left-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-a-a-r t-c-black\"></i></span>","warning--junction-with-a-side-road-perpendicular-left-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-a-a-r t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--junction-with-a-side-road-perpendicular-right-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-p-r t-c-black\"></i></span>","warning--t-roads--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-t-roads t-c-black\"></i></span>","warning--traffic-signals-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(.2,.55);-moz-transform:scale(.2,.55);transform:scale(.2,.55)\"></i><i class=\"t-circle-bg t-c-green\" style=\"-webkit-transform:translate(0,16.5%) scale(.14);-moz-transform:translate(0,16.5%) scale(.14);transform:translate(0,16.5%) scale(.14)\"></i><i class=\"t-circle-bg t-c-yellow\" style=\"-webkit-transform:scale(.14);-moz-transform:scale(.14);transform:scale(.14)\"></i><i class=\"t-circle-bg t-c-red\" style=\"-webkit-transform:translate(0,-16.5%) scale(.14);-moz-transform:translate(0,-16.5%) scale(.14);transform:translate(0,-16.5%) scale(.14)\"></i></span>","warning--triple-reverse-curve--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-orange\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-single-2-reverse-curve t-c-black\" style=\"-webkit-transform:scale(.9) translate(-18%);-moz-transform:scale(.9) translate(-18%);transform:scale(.9) translate(-18%)\"></i><i class=\"t-single-2-reverse-curve t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i><i class=\"t-single-2-reverse-curve t-c-black\" style=\"-webkit-transform:scale(.9) translate(18%);-moz-transform:scale(.9) translate(18%);transform:scale(.9) translate(18%)\"></i></span>","warning--trucks-rollover--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-trucks-rollover t-c-black\"></i></span>","warning--turn-curve-left--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-l-curve t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--turn-curve-right--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-l-curve t-c-black\" style=\"-webkit-transform:scale(-1,1) scale(.9);-moz-transform:scale(-1,1) scale(.9);transform:scale(-1,1) scale(.9)\"></i></span>","warning--turn-left--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-90-l t-c-black\"></i></span>","warning--turn-right--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-90-l t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--double-turn-first-left-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-reverse-curve-au t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--double-turn-first-right-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-reverse-curve-au t-c-black\" style=\"-webkit-transform:scale(-1,1) scale(.9);-moz-transform:scale(-1,1) scale(.9);transform:scale(-1,1) scale(.9)\"></i></span>","warning--winding-road-first-left-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-winding-road-left t-c-black\"></i></span>","warning--winding-road-first-right-ahead--br":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-winding-road-left t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/ca-map.json b/vendor/assets/iD/iD/traffico/string-maps/ca-map.json
deleted file mode 100644 (file)
index aaa27af..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"mandatory--pass-on-either-side--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-pass-l-r t-c-black\"></i></span>","regulatory--no-bicycles--ca":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-bicycle t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-entry--ca":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:scale(.92,.16);-moz-transform:scale(.92,.16);transform:scale(.92,.16)\"></i></span>","regulatory--no-heavy-goods-vehicles--ca":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-truck t-c-black\" style=\"-webkit-transform:scale(1.2);-moz-transform:scale(1.2);transform:scale(1.2)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-left-turn--ca":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-turn-90-l t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-motor-vehicles--ca":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-car t-c-black\" style=\"-webkit-transform:scale(.8) scale(1.3);-moz-transform:scale(.8) scale(1.3);transform:scale(.8) scale(1.3)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-motorcycles--ca":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-motorbike t-c-black\" style=\"-webkit-transform:scale(.8) scale(1.3);-moz-transform:scale(.8) scale(1.3);transform:scale(.8) scale(1.3)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-overtaking--ca":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-car t-c-black\" style=\"-webkit-transform:scale(.6) translate(26%,10%);-moz-transform:scale(.6) translate(26%,10%);transform:scale(.6) translate(26%,10%)\"></i><i class=\"t-car t-c-black\" style=\"-webkit-transform:scale(.6) translate(-26%,10%);-moz-transform:scale(.6) translate(-26%,10%);transform:scale(.6) translate(-26%,10%)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-parking--ca":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-content t-c-black\" style=\"-webkit-transform:scale(1.5) translate(0,20%);-moz-transform:scale(1.5) translate(0,20%);transform:scale(1.5) translate(0,20%)\">P</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-pedestrians--ca":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-pedestrian_bra t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-right-turn--ca":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-turn-90-l t-c-black\" style=\"-webkit-transform:scale(.8) scale(-1,1);-moz-transform:scale(.8) scale(-1,1);transform:scale(.8) scale(-1,1)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-stopping--ca":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-octagon t-c-black\" style=\"-webkit-transform:scale(.7);-moz-transform:scale(.7);transform:scale(.7)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-u-turn--ca":"<span class=\"t\"><i class=\"t-circle-o t-c-red\"></i><i class=\"t-u-turn t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--maximum-speed-limit-5--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content-1 t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">5</i></span>","regulatory--maximum-speed-limit-10--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">10</i></span>","regulatory--maximum-speed-limit-15--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">15</i></span>","regulatory--maximum-speed-limit-20--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">20</i></span>","regulatory--maximum-speed-limit-25--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">25</i></span>","regulatory--maximum-speed-limit-30--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">30</i></span>","regulatory--maximum-speed-limit-35--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">35</i></span>","regulatory--maximum-speed-limit-40--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">40</i></span>","regulatory--maximum-speed-limit-45--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">45</i></span>","regulatory--maximum-speed-limit-50--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">50</i></span>","regulatory--maximum-speed-limit-55--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">55</i></span>","regulatory--maximum-speed-limit-60--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">60</i></span>","regulatory--maximum-speed-limit-65--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">65</i></span>","regulatory--maximum-speed-limit-70--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">70</i></span>","regulatory--maximum-speed-limit-75--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">75</i></span>","regulatory--maximum-speed-limit-80--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">80</i></span>","regulatory--maximum-speed-limit-85--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">85</i></span>","regulatory--maximum-speed-limit-90--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">90</i></span>","regulatory--maximum-speed-limit-100--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content-3 t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">100</i></span>","regulatory--maximum-speed-limit-110--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content-3 t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">110</i></span>","regulatory--maximum-speed-limit-120--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content-3 t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">120</i></span>","regulatory--maximum-speed-limit-130--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-125%) scale(.5);-moz-transform:translate(0,-125%) scale(.5);transform:translate(0,-125%) scale(.5)\">MAXIMUM</i><i class=\"t-content-3 t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">130</i></span>","regulatory--stop--ca":"<span class=\"t\"><i class=\"t-octagon t-c-red\"></i><i class=\"t-stop t-c-white\"></i></span>","warning--bump-in-road--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-bump_road_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--crossroads-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-crossroads-ahead-ontario t-c-black\"></i></span>","warning--curve-left-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-l-curve t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--curve-left-ahead--ca--ontario":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-right-curve-ontario t-c-black\" style=\"-webkit-transform:scale(.9) scale(-1,1);-moz-transform:scale(.9) scale(-1,1);transform:scale(.9) scale(-1,1)\"></i></span>","warning--double-curve-first-left-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-reverse-curve-ontario t-c-black\" style=\"-webkit-transform:scale(-1,1) scale(.9);-moz-transform:scale(-1,1) scale(.9);transform:scale(-1,1) scale(.9)\"></i></span>","warning--double-curve-first-right-ahead--ca--ontario":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-reverse-curve-ontario t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--curve-right-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-right-curve-ontario t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--cyclists-crossing--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--dip-in-road--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-content-3 t-c-black\">DIP</i></span>","warning--divided-highway-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-divided-highway t-c-black\"></i></span>","warning--divided-highway-ends--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-divided-highway t-c-black\" style=\"-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);transform:scale(1,-1)\"></i></span>","warning--domestic-animals--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-domestic-animal t-c-black\" style=\"-webkit-transform:translate(-10%,0%) scale(.35);-moz-transform:translate(-10%,0%) scale(.35);transform:translate(-10%,0%) scale(.35)\"></i></span>","warning--emergency-vehicles--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-firemans-car t-c-black\"></i></span>","warning--equestrians--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-equestrian t-c-black\" style=\"-webkit-transform:scale(0.6) scale(.9);-moz-transform:scale(0.6) scale(.9);transform:scale(0.6) scale(.9)\"></i></span>","warning--falling-rocks-or-debris-right--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-falling-rocks-au t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--farm-vehicles--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-tractor t-c-black\" style=\"-webkit-transform:scale(.45);-moz-transform:scale(.45);transform:scale(.45)\"></i></span>","warning--hairpin-curve-right-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-hairpin-curve-au t-c-black\" style=\"-webkit-transform: scale(-0.85, 0.85) scale(.9);-moz-transform: scale(-0.85, 0.85) scale(.9);transform: scale(-0.85, 0.85) scale(.9)\"></i></span>","warning--hairpin-curve-right-ahead--ca--ontario":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-hairpin-curve-au t-c-black\" style=\"-webkit-transform: scale(-0.85, 0.85) scale(.9);-moz-transform: scale(-0.85, 0.85) scale(.9);transform: scale(-0.85, 0.85) scale(.9)\"></i></span>","warning--level-railroad-crossing-with-barriers-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-railroad-barriers t-c-black\"></i></span>","warning--loose-road-surface--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-loose_road_surface_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--height-restriction-ahead--ca--feet":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-height-restriction-ca t-c-black\"></i><i class=\"t-height_value t-c-black\"></i></span>","warning--height-restriction-ahead--ca--meters":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-height-restriction-ca t-c-black\"></i><i class=\"t-height_value t-c-black\"></i></span>","warning--narrow-bridge-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-bridge-au t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--opening-or-swing-bridge--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-opening-swing-bridge-ca t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--pavement-ends--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-pavement-ends t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--pedestrian-crossing--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-pedestrian t-c-black\"></i></span>","warning--pedestrian-crossing--ca--quebec":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1);-moz-transform:scale(.9,1);transform:scale(.9,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.9,1) scale(.95);-moz-transform:scale(.9,1) scale(.95);transform:scale(.9,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.9,1) scale(.90);-moz-transform:scale(.9,1) scale(.90);transform:scale(.9,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(-10%,-125%) scale(.5);-moz-transform:translate(-10%,-125%) scale(.5);transform:translate(-10%,-125%) scale(.5)\">PEDESTRIAN</i><i class=\"t-content-3 t-c-black\" style=\"-webkit-transform:translate(0,40%) scale(1.5);-moz-transform:translate(0,40%) scale(1.5);transform:translate(0,40%) scale(1.5)\">X</i></span>","warning--playground-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-playground-ahead-ca t-c-black\"></i></span>","warning--road-narrows-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-road-both t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--road-narrows-left-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-road-l t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--road-narrows-right-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-road-l t-c-black\" style=\"-webkit-transform:scale(.9) scale(-1,1);-moz-transform:scale(.9) scale(-1,1);transform:scale(.9) scale(-1,1)\"></i></span>","warning--roundabout-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-roundabout t-c-black\"></i></span>","warning--shared-road-motocycles-cyclists--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-share-road t-c-black\"></i></span>","warning--junction-with-a-side-road-perpendicular-left-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-perpendicular t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--junction-with-a-side-road-perpendicular-left-ahead--ca--ontario":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-perpendicular t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--junction-with-a-side-road-perpendicular-right-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-perpendicular t-c-black\" style=\"-webkit-transform:scale(.9) scale(-1,1);-moz-transform:scale(.9) scale(-1,1);transform:scale(.9) scale(-1,1)\"></i></span>","warning--slippery-road-surface--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-slippery t-c-black\"></i></span>","warning--steep-hill-downwards--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-steep-hill-downwards t-c-black\"></i></span>","warning--steep-hill-upwards--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-steep-hill-upwards t-c-black\"></i></span>","warning--stop-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-small-arrow-au t-c-black\" style=\"-webkit-transform:translate(0,-25%);-moz-transform:translate(0,-25%);transform:translate(0,-25%)\"></i><i class=\"t-octagon t-c-red\" style=\"-webkit-transform:translate(0,15%) scale(.3);-moz-transform:translate(0,15%) scale(.3);transform:translate(0,15%) scale(.3)\"></i></span>","warning--stop-ahead--ca--ontario":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-small-arrow-au t-c-black\" style=\"-webkit-transform:translate(0,-25%) scale(1.2);-moz-transform:translate(0,-25%) scale(1.2);transform:translate(0,-25%) scale(1.2)\"></i><i class=\"t-octagon t-c-red\" style=\"-webkit-transform:translate(0,15%) scale(.4);-moz-transform:translate(0,15%) scale(.4);transform:translate(0,15%) scale(.4)\"></i></span>","warning--traffic-merges-left-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-a-a-r t-c-black\" style=\"-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);transform:scale(1, -1)\"></i></span>","warning--traffic-merges-left-ahead--ca--ontario":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-a-a-r t-c-black\" style=\"-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);transform:scale(1, -1)\"></i></span>","warning--traffic-merges-right-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-a-a-r t-c-black\"></i></span>","warning--traffic-merges-right-ahead--ca--ontario":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-a-a-r t-c-black\"></i></span>","warning--traffic-signals-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(.2,.55);-moz-transform:scale(.2,.55);transform:scale(.2,.55)\"></i><i class=\"t-circle-bg t-c-green\" style=\"-webkit-transform:translate(0,16.5%) scale(.14);-moz-transform:translate(0,16.5%) scale(.14);transform:translate(0,16.5%) scale(.14)\"></i><i class=\"t-circle-bg t-c-yellow\" style=\"-webkit-transform:scale(.14);-moz-transform:scale(.14);transform:scale(.14)\"></i><i class=\"t-circle-bg t-c-red\" style=\"-webkit-transform:translate(0,-16.5%) scale(.14);-moz-transform:translate(0,-16.5%) scale(.14);transform:translate(0,-16.5%) scale(.14)\"></i></span>","warning--tunnel-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-tunnel t-c-black\"></i></span>","warning--turn-left--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-90-l t-c-black\"></i></span>","warning--double-turn-first-left-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-reverse-left t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--double-turn-first-right-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-reverse-left t-c-black\" style=\"-webkit-transform:scale(-1,1) scale(.9);-moz-transform:scale(-1,1) scale(.9);transform:scale(-1,1) scale(.9)\"></i></span>","warning--turn-right--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-90-l t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--two-way-traffic-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-arrows_both_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--uncontrolled-railroad-crossing-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-train-au t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--uneven-road--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-bump_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--wild-animals--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-wild-animal t-c-black\" style=\"-webkit-transform:scale(.9) scale(.9);-moz-transform:scale(.9) scale(.9);transform:scale(.9) scale(.9)\"></i></span>","warning--winding-road-first-left-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-winding-road-left t-c-black\"></i></span>","warning--winding-road-first-right-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-winding-road-left t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--workers-in-road-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-roadworks_bra t-c-black\"></i></span>","warning--yield-ahead--ca":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-small-arrow-au t-c-black\" style=\"-webkit-transform:translate(0,-25%);-moz-transform:translate(0,-25%);transform:translate(0,-25%)\"></i><i class=\"t-tri-rounded t-c-red\" style=\"-webkit-transform:translate(0, 15%) scale(.45) rotate(180deg);-moz-transform:translate(0, 15%) scale(.45) rotate(180deg);transform:translate(0, 15%) scale(.45) rotate(180deg)\"></i><i class=\"t-tri-rounded t-c-white\" style=\"-webkit-transform:translate(0, 12%) scale(.25) rotate(180deg);-moz-transform:translate(0, 12%) scale(.25) rotate(180deg);transform:translate(0, 12%) scale(.25) rotate(180deg)\"></i></span>","regulatory--yield--ca":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\" style=\"-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);transform:rotate(180deg)\"></i><i class=\"t-tri-rounded t-c-white\" style=\"-webkit-transform:translate(0,-14.43%) scale(.55) translate(0,14.43%) rotate(180deg);-moz-transform:translate(0,-14.43%) scale(.55) translate(0,14.43%) rotate(180deg);transform:translate(0,-14.43%) scale(.55) translate(0,14.43%) rotate(180deg)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/ch-map.json b/vendor/assets/iD/iD/traffico/string-maps/ch-map.json
deleted file mode 100644 (file)
index 125d471..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"danger--level-crossing--ch--other":"<span class=\"t\"><i class=\"t-level-crossing t-c-red\"></i><i class=\"t-level-crossing t-c-red\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(60deg) scale(.05,1);-moz-transform:rotate(60deg) scale(.05,1);transform:rotate(60deg) scale(.05,1)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(-60deg) scale(.05,1);-moz-transform:rotate(-60deg) scale(.05,1);transform:rotate(-60deg) scale(.05,1)\"></i></span>","priority--priority-road-end--ch":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.98) scale(0.707107) rotate(45deg);-moz-transform:scale(.98) scale(0.707107) rotate(45deg);transform:scale(.98) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.2,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.2,1);transform:scale(0.707107) rotate(45deg) scale(.2,1)\"></i></span>","danger--railway-crossing-unsecured--ch":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(.4);-moz-transform:translate(0,13%) scale(.4);transform:translate(0,13%) scale(.4)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/cz-map.json b/vendor/assets/iD/iD/traffico/string-maps/cz-map.json
deleted file mode 100644 (file)
index b12e1fa..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_cz--cz":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,-50%);-moz-transform:translate(0,-50%);transform:translate(0,-50%)\">České</i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,50%);-moz-transform:translate(0,50%);transform:translate(0,50%)\">republika</i></span>","priority--priority-road-end--cz":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.98);-moz-transform:scale(0.707107) rotate(45deg) scale(.98);transform:scale(0.707107) rotate(45deg) scale(.98)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.05,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.05,1);transform:scale(0.707107) rotate(45deg) scale(.05,1)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0);-moz-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0);transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0);-moz-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0);transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0)\"></i></span>","danger--railway-crossing-unsecured--cz":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(.4);-moz-transform:translate(0,13%) scale(.4);transform:translate(0,13%) scale(.4)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/de-map.json b/vendor/assets/iD/iD/traffico/string-maps/de-map.json
deleted file mode 100644 (file)
index 4de9a34..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"danger--ascent--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-descent t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%) scale(-1,1);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%) scale(-1,1);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%) scale(-1,1)\"></i><i class=\"t-incline_value t-c-black\" style=\"-webkit-transform:translate(0,-25%) translate(0,14.43%) scale(.4) rotate(-30deg);-moz-transform:translate(0,-25%) translate(0,14.43%) scale(.4) rotate(-30deg);transform:translate(0,-25%) translate(0,14.43%) scale(.4) rotate(-30deg)\">10%</i></span>","danger--descent--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-descent t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-incline_value t-c-black\" style=\"-webkit-transform:translate(0,-25%) translate(0,14.43%) scale(.4) rotate(30deg);-moz-transform:translate(0,-25%) translate(0,14.43%) scale(.4) rotate(30deg);transform:translate(0,-25%) translate(0,14.43%) scale(.4) rotate(30deg)\">10%</i></span>","danger--domestic-animals--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-domestic-animal t-c-black\" style=\"-webkit-transform:translate(0,14.43%) translate(-6%,4%) scale(.25);-moz-transform:translate(0,14.43%) translate(-6%,4%) scale(.25);transform:translate(0,14.43%) translate(-6%,4%) scale(.25)\"></i></span>","danger--falling-rocks--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-falling-rocks-EU t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i></span>","danger--level-crossing--de":"<span class=\"t\"><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(30deg) scale(.15,1);-moz-transform:rotate(30deg) scale(.15,1);transform:rotate(30deg) scale(.15,1)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(-30deg) scale(.15,1);-moz-transform:rotate(-30deg) scale(.15,1);transform:rotate(-30deg) scale(.15,1)\"></i><i class=\"t-square-angular t-c-red\" style=\"-webkit-transform:rotate(30deg) scale(.14,.99);-moz-transform:rotate(30deg) scale(.14,.99);transform:rotate(30deg) scale(.14,.99)\"></i><i class=\"t-square-angular t-c-red\" style=\"-webkit-transform:rotate(-30deg) scale(.14,.99);-moz-transform:rotate(-30deg) scale(.14,.99);transform:rotate(-30deg) scale(.14,.99)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(30deg) scale(.14,.6);-moz-transform:rotate(30deg) scale(.14,.6);transform:rotate(30deg) scale(.14,.6)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(-30deg) scale(.14,.6);-moz-transform:rotate(-30deg) scale(.14,.6);transform:rotate(-30deg) scale(.14,.6)\"></i></span>","danger--unprotected-quayside-or-riverbank--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-cliff t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i></span>","danger--wild-animals--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-wild-animal t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.7);-moz-transform:translate(0,14.43%) scale(.7);transform:translate(0,14.43%) scale(.7)\"></i></span>","danger--double-curve-first-left--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-d-curve-l t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.6);-moz-transform:translate(0,14.43%) scale(.6);transform:translate(0,14.43%) scale(.6)\"></i></span>","danger--double-curve-first-right--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-d-curve-l t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(-.6,.6);-moz-transform:translate(0,14.43%) scale(-.6,.6);transform:translate(0,14.43%) scale(-.6,.6)\"></i></span>","danger--curve-left--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-turn-l t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.6);-moz-transform:translate(0,14.43%) scale(.6);transform:translate(0,14.43%) scale(.6)\"></i></span>","danger--curve-right--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-turn-l t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(-.6,.6);-moz-transform:translate(0,14.43%) scale(-.6,.6);transform:translate(0,14.43%) scale(-.6,.6)\"></i></span>","danger--crossroads-with-priority-to-the-right--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,14.43%) rotate(45deg) scale(.06,.32);-moz-transform:translate(0,14.43%) rotate(45deg) scale(.06,.32);transform:translate(0,14.43%) rotate(45deg) scale(.06,.32)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,14.43%) rotate(-45deg) scale(.06,.32);-moz-transform:translate(0,14.43%) rotate(-45deg) scale(.06,.32);transform:translate(0,14.43%) rotate(-45deg) scale(.06,.32)\"></i></span>","danger--cyclists-crossing-ahead--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.65) translate(0,25%);-moz-transform:scale(.65) translate(0,25%);transform:scale(.65) translate(0,25%)\"></i></span>","danger--cyclists-crossing-ahead--de--right":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.65) translate(0,25%);-moz-transform:scale(.65) translate(0,25%);transform:scale(.65) translate(0,25%)\"></i></span>","danger--other-danger--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-exclamation t-c-black\" style=\"-webkit-transform:scale(.65) translate(0,14.43%);-moz-transform:scale(.65) translate(0,14.43%);transform:scale(.65) translate(0,14.43%)\"></i></span>","danger--other-danger--de--temporary":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-yellow\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-exclamation t-c-black\" style=\"-webkit-transform:scale(.65) translate(0,14.43%);-moz-transform:scale(.65) translate(0,14.43%);transform:scale(.65) translate(0,14.43%)\"></i></span>","danger--crossroads-ahead--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-right-of-way t-c-black\" style=\"-webkit-transform:scale(.7) translate(0,14.43%);-moz-transform:scale(.7) translate(0,14.43%);transform:scale(.7) translate(0,14.43%)\"></i></span>","danger--junction-with-a-side-road-perpendicular-left--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-right-of-way-l fit t-c-black\" style=\"-webkit-transform:scale(.7) translate(0,14.43%);-moz-transform:scale(.7) translate(0,14.43%);transform:scale(.7) translate(0,14.43%)\"></i></span>","danger--junction-with-a-side-road-perpendicular-right--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-right-of-way-l fit t-c-black\" style=\"-webkit-transform:scale(.7) translate(0,14.43%) scale(-1,1);-moz-transform:scale(.7) translate(0,14.43%) scale(-1,1);transform:scale(.7) translate(0,14.43%) scale(-1,1)\"></i></span>","danger--pedestrian-crossing--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-pedestrian t-c-black\" style=\"-webkit-transform:scale(.7) translate(0,14.43%);-moz-transform:scale(.7) translate(0,14.43%);transform:scale(.7) translate(0,14.43%)\"></i></span>","danger--railway-crossing-unsecured--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-train-electric t-c-black\" style=\"-webkit-transform:scale(.4) translate(10%,40%);-moz-transform:scale(.4) translate(10%,40%);transform:scale(.4) translate(10%,40%)\"></i></span>","danger--railway-crossing-secured--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-secured t-c-black\" style=\"-webkit-transform:translate(0,14.43%) translate(0,4%) scale(.35);-moz-transform:translate(0,14.43%) translate(0,4%) scale(.35);transform:translate(0,14.43%) translate(0,4%) scale(.35)\"></i></span>","danger--snow--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-snowflake t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.7);-moz-transform:translate(0,14.43%) scale(.7);transform:translate(0,14.43%) scale(.7)\"></i></span>","danger--low-flying-aircraft--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-airplane t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.4);-moz-transform:translate(0,14.43%) scale(.4);transform:translate(0,14.43%) scale(.4)\"></i></span>","danger--strong-sidewind--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-windbag t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.3);-moz-transform:translate(0,14.43%) scale(.3);transform:translate(0,14.43%) scale(.3)\"></i></span>","danger--road-bump--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-bump t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.45);-moz-transform:translate(0,14.43%) scale(.45);transform:translate(0,14.43%) scale(.45)\"></i></span>","danger--road-narrows-ahead--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-narrow-road-both t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.6);-moz-transform:translate(0,14.43%) scale(.6);transform:translate(0,14.43%) scale(.6)\"></i></span>","danger--road-narrows-left-ahead--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-narrow-road-l t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.6);-moz-transform:translate(0,14.43%) scale(.6);transform:translate(0,14.43%) scale(.6)\"></i></span>","danger--road-narrows-right-ahead--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-narrow-road-l t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(-.6,.6);-moz-transform:translate(0,14.43%) scale(-.6,.6);transform:translate(0,14.43%) scale(-.6,.6)\"></i></span>","danger--roadworks-ahead--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-roadworks t-c-black\" style=\"-webkit-transform:scale(.7) translate(0,20%);-moz-transform:scale(.7) translate(0,20%);transform:scale(.7) translate(0,20%)\"></i></span>","danger--roundabout--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-roundabout t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.55);-moz-transform:translate(0,14.43%) scale(.55);transform:translate(0,14.43%) scale(.55)\"></i></span>","danger--children--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-children t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.75);-moz-transform:translate(0,14.43%) scale(.75);transform:translate(0,14.43%) scale(.75)\"></i></span>","danger--slippery-road-surface--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-slippery-road t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.75);-moz-transform:translate(0,14.43%) scale(.75);transform:translate(0,14.43%) scale(.75)\"></i></span>","danger--traffic-signals-ahead--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-circle-bg t-c-red\" style=\"-webkit-transform:translate(0,14.43%) translate(0,-20%) scale(.13);-moz-transform:translate(0,14.43%) translate(0,-20%) scale(.13);transform:translate(0,14.43%) translate(0,-20%) scale(.13)\"></i><i class=\"t-circle-bg t-c-yellow\" style=\"-webkit-transform:translate(0,14.43%) translate(0,-5%) scale(.13);-moz-transform:translate(0,14.43%) translate(0,-5%) scale(.13);transform:translate(0,14.43%) translate(0,-5%) scale(.13)\"></i><i class=\"t-circle-bg t-c-green\" style=\"-webkit-transform:translate(0,14.43%) translate(0,10%) scale(.13);-moz-transform:translate(0,14.43%) translate(0,10%) scale(.13);transform:translate(0,14.43%) translate(0,10%) scale(.13)\"></i></span>","danger--two-way-traffic-ahead--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.35) translate(-25%,5%) rotate(180deg);-moz-transform:translate(0,14.43%) scale(.35) translate(-25%,5%) rotate(180deg);transform:translate(0,14.43%) scale(.35) translate(-25%,5%) rotate(180deg)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.35) translate(25%,-5%);-moz-transform:translate(0,14.43%) scale(.35) translate(25%,-5%);transform:translate(0,14.43%) scale(.35) translate(25%,-5%)\"></i></span>","danger--uneven-road-ahead--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-bumps t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.45);-moz-transform:translate(0,14.43%) scale(.45);transform:translate(0,14.43%) scale(.45)\"></i></span>","information--border--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.9) translate(0,-130%);-moz-transform:scale(.9) translate(0,-130%);transform:scale(.9) translate(0,-130%)\">Bundes-</i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.9) translate(0,-30%);-moz-transform:scale(.9) translate(0,-30%);transform:scale(.9) translate(0,-30%)\">republik</i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.9) translate(0,70%);-moz-transform:scale(.9) translate(0,70%);transform:scale(.9) translate(0,70%)\">Deutschland</i></span>","information--pedestrian-crossing--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-pedestrian-crossing t-c-black\"></i></span>","information--deadend--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:translate(0,20%) scale(.15,.6);-moz-transform:translate(0,20%) scale(.15,.6);transform:translate(0,20%) scale(.15,.6)\"></i><i class=\"t-square-angular t-c-red\" style=\"-webkit-transform:translate(0,-15%) scale(.5,.15);-moz-transform:translate(0,-15%) scale(.5,.15);transform:translate(0,-15%) scale(.5,.15)\"></i></span>","information--first-aid--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7);-moz-transform:scale(.7);transform:scale(.7)\"></i><i class=\"t-square-angular t-c-red\" style=\"-webkit-transform:scale(.15,.5);-moz-transform:scale(.15,.5);transform:scale(.15,.5)\"></i><i class=\"t-square-angular t-c-red\" style=\"-webkit-transform:scale(.5,.15);-moz-transform:scale(.5,.15);transform:scale(.5,.15)\"></i></span>","information--limited-access-road--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-car t-c-white\" style=\"-webkit-transform:scale(1.5);-moz-transform:scale(1.5);transform:scale(1.5)\"></i></span>","information--parking-left--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-parking t-c-white\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:translate(25%,30%) rotate(-90deg) scale(.33);-moz-transform:translate(25%,30%) rotate(-90deg) scale(.33);transform:translate(25%,30%) rotate(-90deg) scale(.33)\"></i></span>","information--parking-right--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-parking t-c-white\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:translate(25%,30%) rotate(90deg) scale(.33);-moz-transform:translate(25%,30%) rotate(90deg) scale(.33);transform:translate(25%,30%) rotate(90deg) scale(.33)\"></i></span>","information--bus-stop--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-yellow\"></i><i class=\"t-circle-o t-c-green\"></i><i class=\"t-h t-c-green\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i></span>","information--disabled-persons--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-disabled-p t-c-white\"></i></span>","information--parking--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-parking t-c-white\"></i></span>","mandatory--equestrians--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-equestrian t-c-white\" style=\"-webkit-transform:scale(.7);-moz-transform:scale(.7);transform:scale(.7)\"></i></span>","mandatory--minimum-speed-5--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-1 t-c-white\">5</i></span>","mandatory--minimum-speed-10--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">10</i></span>","mandatory--minimum-speed-15--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">15</i></span>","mandatory--minimum-speed-20--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">20</i></span>","mandatory--minimum-speed-25--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">25</i></span>","mandatory--minimum-speed-30--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">30</i></span>","mandatory--minimum-speed-35--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">35</i></span>","mandatory--minimum-speed-40--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">40</i></span>","mandatory--minimum-speed-45--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">45</i></span>","mandatory--minimum-speed-50--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">50</i></span>","mandatory--minimum-speed-55--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">55</i></span>","mandatory--minimum-speed-60--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">60</i></span>","mandatory--minimum-speed-65--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">65</i></span>","mandatory--minimum-speed-70--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">70</i></span>","mandatory--minimum-speed-75--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">75</i></span>","mandatory--minimum-speed-80--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">80</i></span>","mandatory--minimum-speed-85--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">85</i></span>","mandatory--minimum-speed-90--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">90</i></span>","mandatory--minimum-speed-100--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-3 t-c-white\">100</i></span>","mandatory--minimum-speed-110--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-3 t-c-white\">110</i></span>","mandatory--minimum-speed-120--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-3 t-c-white\">120</i></span>","mandatory--minimum-speed-130--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-3 t-c-white\">130</i></span>","mandatory--minimum-speed-end-5--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-1 t-c-white\">5</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-10--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">10</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-15--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">15</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-20--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">20</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-25--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">25</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-30--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">30</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-35--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">35</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-40--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">40</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-45--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">45</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-50--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">50</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-55--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">55</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-60--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">60</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-65--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">65</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-70--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">70</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-75--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">75</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-80--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">80</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-85--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">85</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-90--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content t-c-white\">90</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-100--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-3 t-c-white\">100</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-110--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-3 t-c-white\">110</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-120--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-3 t-c-white\">120</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--minimum-speed-end-130--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-content-3 t-c-white\">130</i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","mandatory--pedestrian-bicycle-dual-track--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-bicycle t-c-white\" style=\"-webkit-transform:scale(.6) translate(-40%,0);-moz-transform:scale(.6) translate(-40%,0);transform:scale(.6) translate(-40%,0)\"></i><i class=\"t-footpath t-c-white\" style=\"-webkit-transform:scale(.6) translate(40%,0);-moz-transform:scale(.6) translate(40%,0);transform:scale(.6) translate(40%,0)\"></i><i class=\"t-circle-separator t-c-white\"></i></span>","mandatory--dual-path-pedestrians-and-cyclists--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-bicycle t-c-white\" style=\"-webkit-transform:scale(.6) translate(40%,0);-moz-transform:scale(.6) translate(40%,0);transform:scale(.6) translate(40%,0)\"></i><i class=\"t-footpath t-c-white\" style=\"-webkit-transform:scale(.6) translate(-40%,0);-moz-transform:scale(.6) translate(-40%,0);transform:scale(.6) translate(-40%,0)\"></i><i class=\"t-circle-separator t-c-white\"></i></span>","mandatory--dual-path-cyclists-and-pedestrians--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-footpath t-c-white\" style=\"-webkit-transform:scale(.6) translate(40%,0);-moz-transform:scale(.6) translate(40%,0);transform:scale(.6) translate(40%,0)\"></i><i class=\"t-bicycle t-c-white\" style=\"-webkit-transform:scale(.6) translate(-40%,0);-moz-transform:scale(.6) translate(-40%,0);transform:scale(.6) translate(-40%,0)\"></i><i class=\"t-circle-separator t-c-white\"></i></span>","mandatory--bicycles-only--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-bicycle t-c-white\"></i></span>","mandatory--pedestrians-only--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-footpath t-c-white\"></i></span>","mandatory--turn-left--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);transform:rotate(-90deg)\"></i></span>","mandatory--turn-right--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);transform:rotate(90deg)\"></i></span>","mandatory--pass-on-either-side--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:translate(0,-15%) rotate(135deg) scale(.6) translate(0,-32%);-moz-transform:translate(0,-15%) rotate(135deg) scale(.6) translate(0,-32%);transform:translate(0,-15%) rotate(135deg) scale(.6) translate(0,-32%)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:translate(0,-15%) rotate(-135deg) scale(.6) translate(0,-32%);-moz-transform:translate(0,-15%) rotate(-135deg) scale(.6) translate(0,-32%);transform:translate(0,-15%) rotate(-135deg) scale(.6) translate(0,-32%)\"></i></span>","mandatory--proceed-straight--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-DE-arrow-up t-c-white\"></i></span>","mandatory--proceed-straight-or-turn-left--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-arrow-s-l t-c-white\"></i></span>","mandatory--proceed-straight-or-turn-right--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-arrow-s-l t-c-white\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","mandatory--procced-straight--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-DE-arrow-up t-c-white\"></i></span>","mandatory--pass-on-this-side-left--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(-135deg);-moz-transform:rotate(-135deg);transform:rotate(-135deg)\"></i></span>","mandatory--pass-on-this-side-right--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(135deg);-moz-transform:rotate(135deg);transform:rotate(135deg)\"></i></span>","mandatory--shared-path-pedestrians-and-cyclists--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-footpath t-c-white\" style=\"-webkit-transform:scale(.6) translate(0,-35%);-moz-transform:scale(.6) translate(0,-35%);transform:scale(.6) translate(0,-35%)\"></i><i class=\"t-bicycle t-c-white\" style=\"-webkit-transform:scale(.6) translate(0,35%);-moz-transform:scale(.6) translate(0,35%);transform:scale(.6) translate(0,35%)\"></i><i class=\"t-circle-separator t-c-white\" style=\"-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);transform:rotate(90deg)\"></i></span>","mandatory--roundabout--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-roundabout t-c-white\" style=\"-webkit-transform:scale(1.25);-moz-transform:scale(1.25);transform:scale(1.25)\"></i></span>","mandatory--turn-left-ahead--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-arrow-l t-c-white\" style=\"-webkit-transform:scale(1.25);-moz-transform:scale(1.25);transform:scale(1.25)\"></i></span>","mandatory--turn-right-ahead--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-arrow-l t-c-white\" style=\"-webkit-transform:scale(-1.25, 1.25);-moz-transform:scale(-1.25, 1.25);transform:scale(-1.25, 1.25)\"></i></span>","priority--narrow-location-priority--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-DE-arrow-up t-c-red\" style=\"-webkit-transform:scale(.8) translate(-25%,5%) rotate(180deg);-moz-transform:scale(.8) translate(-25%,5%) rotate(180deg);transform:scale(.8) translate(-25%,5%) rotate(180deg)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:scale(.8) translate(25%,-5%);-moz-transform:scale(.8) translate(25%,-5%);transform:scale(.8) translate(25%,-5%)\"></i></span>","priority--narrow-location-no-priority--de--other":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:scale(.8) scale(.7) translate(-25%,5%) rotate(180deg);-moz-transform:scale(.8) scale(.7) translate(-25%,5%) rotate(180deg);transform:scale(.8) scale(.7) translate(-25%,5%) rotate(180deg)\"></i><i class=\"t-DE-arrow-up t-c-red\" style=\"-webkit-transform:scale(.8) scale(.7) translate(25%,-5%);-moz-transform:scale(.8) scale(.7) translate(25%,-5%);transform:scale(.8) scale(.7) translate(25%,-5%)\"></i></span>","priority--priority-road-end--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.98);-moz-transform:scale(0.707107) rotate(45deg) scale(.98);transform:scale(0.707107) rotate(45deg) scale(.98)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.05,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.05,1);transform:scale(0.707107) rotate(45deg) scale(.05,1)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0);-moz-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0);transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0);-moz-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0);transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0)\"></i></span>","priority--give-way--de":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\" style=\"-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);transform:rotate(180deg)\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg);-moz-transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg);transform:translate(0,-14.43%) scale(.7) translate(0,14.43%) rotate(180deg)\"></i></span>","prohibitory--no-pedestrians--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-pedestrian t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i></span>","prohibitory--no-pedestrians-or-bicycles--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-footpath t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,-35%);-moz-transform:scale(.8) scale(.6) translate(0,-35%);transform:scale(.8) scale(.6) translate(0,-35%)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,35%);-moz-transform:scale(.8) scale(.6) translate(0,35%);transform:scale(.8) scale(.6) translate(0,35%)\"></i></span>","prohibitory--no-bicycles--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i></span>","prohibitory--no-mopeds--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-moped t-c-black\" style=\"-webkit-transform:scale(.8) scale(.7);-moz-transform:scale(.8) scale(.7);transform:scale(.8) scale(.7)\"></i></span>","prohibitory--no-motor-vehicles--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-motorbike t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,-35%);-moz-transform:scale(.8) scale(.6) translate(0,-35%);transform:scale(.8) scale(.6) translate(0,-35%)\"></i><i class=\"t-car t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,35%);-moz-transform:scale(.8) scale(.6) translate(0,35%);transform:scale(.8) scale(.6) translate(0,35%)\"></i><i class=\"t-circle-separator t-c-black\" style=\"-webkit-transform:rotate(90deg) scale(.8);-moz-transform:rotate(90deg) scale(.8);transform:rotate(90deg) scale(.8)\"></i></span>","prohibitory--no-slow-vehicles--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-tractor t-c-black\" style=\"-webkit-transform:scale(.8) scale(.7);-moz-transform:scale(.8) scale(.7);transform:scale(.8) scale(.7)\"></i></span>","prohibitory--no-trailers--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-trailer t-c-black\" style=\"-webkit-transform:scale(.8) scale(.8);-moz-transform:scale(.8) scale(.8);transform:scale(.8) scale(.8)\"></i></span>","prohibitory--no-buses--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-bus t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i></span>","prohibitory--no-heavy-goods-vehicles--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-truck t-c-black\"></i></span>","prohibitory--no-trucks-and-buses--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-truck t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,-35%);-moz-transform:scale(.8) scale(.6) translate(0,-35%);transform:scale(.8) scale(.6) translate(0,-35%)\"></i><i class=\"t-bus t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,35%);-moz-transform:scale(.8) scale(.6) translate(0,35%);transform:scale(.8) scale(.6) translate(0,35%)\"></i><i class=\"t-circle-separator t-c-black\" style=\"-webkit-transform:rotate(90deg) scale(.8);-moz-transform:rotate(90deg) scale(.8);transform:rotate(90deg) scale(.8)\"></i></span>","prohibitory--no-parking-or-stopping-left--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(-90deg) scale(.3) translate(95%);-moz-transform:rotate(-90deg) scale(.3) translate(95%);transform:rotate(-90deg) scale(.3) translate(95%)\"></i></span>","prohibitory--no-parking-or-stopping-left-and-right--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(-90deg) scale(.3) translate(95%);-moz-transform:rotate(-90deg) scale(.3) translate(95%);transform:rotate(-90deg) scale(.3) translate(95%)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(90deg) scale(.3) translate(95%);-moz-transform:rotate(90deg) scale(.3) translate(95%);transform:rotate(90deg) scale(.3) translate(95%)\"></i></span>","prohibitory--no-parking-or-stopping-right--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(90deg) scale(.3) translate(95%);-moz-transform:rotate(90deg) scale(.3) translate(95%);transform:rotate(90deg) scale(.3) translate(95%)\"></i></span>","prohibitory--no-parking-left--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(90deg) scale(.3) translate(95%);-moz-transform:rotate(90deg) scale(.3) translate(95%);transform:rotate(90deg) scale(.3) translate(95%)\"></i></span>","prohibitory--no-parking-left-and-right--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(90deg) scale(.3) translate(95%);-moz-transform:rotate(90deg) scale(.3) translate(95%);transform:rotate(90deg) scale(.3) translate(95%)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(-90deg) scale(.3) translate(95%);-moz-transform:rotate(-90deg) scale(.3) translate(95%);transform:rotate(-90deg) scale(.3) translate(95%)\"></i></span>","prohibitory--no-parking-right--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-DE-arrow-up t-c-white\" style=\"-webkit-transform:rotate(-90deg) scale(.3) translate(95%);-moz-transform:rotate(-90deg) scale(.3) translate(95%);transform:rotate(-90deg) scale(.3) translate(95%)\"></i></span>","prohibitory--speed-limit-zone--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-circle-bg t-c-red\" style=\"-webkit-transform:translate(0,-10%) scale(.65);-moz-transform:translate(0,-10%) scale(.65);transform:translate(0,-10%) scale(.65)\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:translate(0,-10%) scale(.65) scale(.8);-moz-transform:translate(0,-10%) scale(.65) scale(.8);transform:translate(0,-10%) scale(.65) scale(.8)\"></i><i class=\"t-speed_zone_value t-c-black\" style=\"-webkit-transform:translate(0,-30%) scale(.7);-moz-transform:translate(0,-30%) scale(.7);transform:translate(0,-30%) scale(.7)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,150%) scale(.8);-moz-transform:translate(0,150%) scale(.8);transform:translate(0,150%) scale(.8)\">ZONE</i></span>","prohibitory--vehicle-weight-limit--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-weight_value t-c-black\"></i></span>","prohibitory--no-entry--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:scale(.92,.16);-moz-transform:scale(.92,.16);transform:scale(.92,.16)\"></i></span>","priority--priority-road--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.98) scale(0.707107) rotate(45deg);-moz-transform:scale(.98) scale(0.707107) rotate(45deg);transform:scale(.98) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i></span>","priority--give-way-to-oncoming-traffic--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(0.8);-moz-transform:scale(0.8);transform:scale(0.8)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:scale(.7) translate(-25%,5%) rotate(180deg);-moz-transform:scale(.7) translate(-25%,5%) rotate(180deg);transform:scale(.7) translate(-25%,5%) rotate(180deg)\"></i><i class=\"t-DE-arrow-up t-c-red\" style=\"-webkit-transform:scale(.7) translate(25%,-5%);-moz-transform:scale(.7) translate(25%,-5%);transform:scale(.7) translate(25%,-5%)\"></i></span>","priority--stop--de":"<span class=\"t\"><i class=\"t-octagon t-c-red\"></i><i class=\"t-stop t-c-white\"></i></span>","prohibitory--end-of-limits--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-black\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.025,.99);-moz-transform:rotate(45deg) scale(.025,.99);transform:rotate(45deg) scale(.025,.99)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.025,.98) translate(150%,0);-moz-transform:rotate(45deg) scale(.025,.98) translate(150%,0);transform:rotate(45deg) scale(.025,.98) translate(150%,0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.025,.97) translate(300%,0);-moz-transform:rotate(45deg) scale(.025,.97) translate(300%,0);transform:rotate(45deg) scale(.025,.97) translate(300%,0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.025,.98) translate(-150%,0);-moz-transform:rotate(45deg) scale(.025,.98) translate(-150%,0);transform:rotate(45deg) scale(.025,.98) translate(-150%,0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.025,.97) translate(-300%,0);-moz-transform:rotate(45deg) scale(.025,.97) translate(-300%,0);transform:rotate(45deg) scale(.025,.97) translate(-300%,0)\"></i></span>","prohibitory--low-emission-zone--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-circle-bg t-c-red\" style=\"-webkit-transform:translate(0,-8%) scale(.7);-moz-transform:translate(0,-8%) scale(.7);transform:translate(0,-8%) scale(.7)\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:translate(0,-8%) scale(.7) scale(.8);-moz-transform:translate(0,-8%) scale(.7) scale(.8);transform:translate(0,-8%) scale(.7) scale(.8)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-50%) scale(.8) scale(.8);-moz-transform:translate(0,-50%) scale(.8) scale(.8);transform:translate(0,-50%) scale(.8) scale(.8)\">Umwelt</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,150%) scale(.8);-moz-transform:translate(0,150%) scale(.8);transform:translate(0,150%) scale(.8)\">ZONE</i></span>","prohibitory--low-emission-zone-end--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-circle-bg t-c-grey\" style=\"-webkit-transform:translate(0,-8%) scale(.7);-moz-transform:translate(0,-8%) scale(.7);transform:translate(0,-8%) scale(.7)\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:translate(0,-8%) scale(.7) scale(.8);-moz-transform:translate(0,-8%) scale(.7) scale(.8);transform:translate(0,-8%) scale(.7) scale(.8)\"></i><i class=\"t-content-4 t-c-grey\" style=\"-webkit-transform:translate(0,-50%) scale(.8) scale(.8);-moz-transform:translate(0,-50%) scale(.8) scale(.8);transform:translate(0,-50%) scale(.8) scale(.8)\">Umwelt</i><i class=\"t-content-4 t-c-grey\" style=\"-webkit-transform:translate(0,150%) scale(.8);-moz-transform:translate(0,150%) scale(.8);transform:translate(0,150%) scale(.8)\">ZONE</i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.02,1.35);-moz-transform:rotate(45deg) scale(.02,1.35);transform:rotate(45deg) scale(.02,1.35)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.02,1.3) translate(-150%, 0);-moz-transform:rotate(45deg) scale(.02,1.3) translate(-150%, 0);transform:rotate(45deg) scale(.02,1.3) translate(-150%, 0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.02,1.3) translate(150%, 0);-moz-transform:rotate(45deg) scale(.02,1.3) translate(150%, 0);transform:rotate(45deg) scale(.02,1.3) translate(150%, 0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.02,1.25) translate(-300%, 0);-moz-transform:rotate(45deg) scale(.02,1.25) translate(-300%, 0);transform:rotate(45deg) scale(.02,1.25) translate(-300%, 0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.02,1.25) translate(300%, 0);-moz-transform:rotate(45deg) scale(.02,1.25) translate(300%, 0);transform:rotate(45deg) scale(.02,1.25) translate(300%, 0)\"></i></span>","prohibitory--no-moped-vehicles--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-moped t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,-35%) scale(.7);-moz-transform:scale(.8) scale(.6) translate(0,-35%) scale(.7);transform:scale(.8) scale(.6) translate(0,-35%) scale(.7)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.8) scale(.6) translate(0,35%);-moz-transform:scale(.8) scale(.6) translate(0,35%);transform:scale(.8) scale(.6) translate(0,35%)\"></i></span>","prohibitory--no-motorcycles--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-motorbike t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i></span>","prohibitory--no-parking--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","prohibitory--no-stopping-or-parking--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","prohibitory--no-traffic-both-ways--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i></span>","prohibitory--no-u-turn--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-turnaround t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-55deg);-moz-transform:rotate(-55deg);transform:rotate(-55deg)\"></i><i class=\"t-turnaround2 t-c-black\"></i></span>","prohibitory--no-vehicles-carrying-dangerous-goods--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-square-rounded t-c-orange\" style=\"-webkit-transform:scale(.25) translate(0,-25%);-moz-transform:scale(.25) translate(0,-25%);transform:scale(.25) translate(0,-25%)\"></i><i class=\"t-lorry t-c-black\"></i></span>","prohibitory--no-left-turn--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-turn-l t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>","prohibitory--no-right-turn--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-turn-l t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","prohibitory--no-overtaking--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-car t-c-red\" style=\"-webkit-transform:scale(.6) translate(-26%,10%);-moz-transform:scale(.6) translate(-26%,10%);transform:scale(.6) translate(-26%,10%)\"></i><i class=\"t-car t-c-black\" style=\"-webkit-transform:scale(.6) translate(26%,10%);-moz-transform:scale(.6) translate(26%,10%);transform:scale(.6) translate(26%,10%)\"></i></span>","prohibitory--no-overtaking-by-heavy-goods-vehicles--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-lorry-left t-c-red\"></i><i class=\"t-car t-c-black\" style=\"-webkit-transform:scale(.6) translate(26%,10%);-moz-transform:scale(.6) translate(26%,10%);transform:scale(.6) translate(26%,10%)\"></i></span>","prohibitory--maximum-speed-limit-5--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-1 t-c-black\">5</i></span>","prohibitory--maximum-speed-limit-10--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">10</i></span>","prohibitory--maximum-speed-limit-15--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">15</i></span>","prohibitory--maximum-speed-limit-20--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">20</i></span>","prohibitory--maximum-speed-limit-25--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">25</i></span>","prohibitory--maximum-speed-limit-30--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">30</i></span>","prohibitory--maximum-speed-limit-35--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">35</i></span>","prohibitory--maximum-speed-limit-40--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">40</i></span>","prohibitory--maximum-speed-limit-45--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">45</i></span>","prohibitory--maximum-speed-limit-50--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">50</i></span>","prohibitory--maximum-speed-limit-55--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">55</i></span>","prohibitory--maximum-speed-limit-60--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">60</i></span>","prohibitory--maximum-speed-limit-65--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">65</i></span>","prohibitory--maximum-speed-limit-70--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">70</i></span>","prohibitory--maximum-speed-limit-75--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">75</i></span>","prohibitory--maximum-speed-limit-80--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">80</i></span>","prohibitory--maximum-speed-limit-85--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">85</i></span>","prohibitory--maximum-speed-limit-90--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content t-c-black\">90</i></span>","prohibitory--maximum-speed-limit-100--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-3 t-c-black\">100</i></span>","prohibitory--maximum-speed-limit-110--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-3 t-c-black\">110</i></span>","prohibitory--maximum-speed-limit-120--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-3 t-c-black\">120</i></span>","prohibitory--maximum-speed-limit-130--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-content-3 t-c-black\">130</i></span>","prohibitory--maximum-height--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-height t-c-black\"></i><i class=\"t-height_value t-c-black\"></i></span>","prohibitory--maximum-width--de":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-height t-c-black\" style=\"-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);transform:rotate(90deg)\"></i><i class=\"t-width_value t-c-black\"></i></span>","supplementary--destination--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-45%) scale(.8);-moz-transform:translate(0,-45%) scale(.8);transform:translate(0,-45%) scale(.8)\">Anlieger</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,45%) scale(.8);-moz-transform:translate(0,45%) scale(.8);transform:translate(0,45%) scale(.8)\">frei</i></span>","supplementary--disabled--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-disabled-p t-c-black\" style=\"-webkit-transform:scale(.6);-moz-transform:scale(.6);transform:scale(.6)\"></i></span>","supplementary--glaze--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-snowflake t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i></span>","supplementary--left-pointing--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:scale(.6) rotate(-90deg);-moz-transform:scale(.6) rotate(-90deg);transform:scale(.6) rotate(-90deg)\"></i></span>","supplementary--both-directions--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:translate(-15%,0) scale(.5) rotate(180deg);-moz-transform:translate(-15%,0) scale(.5) rotate(180deg);transform:translate(-15%,0) scale(.5) rotate(180deg)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:translate(15%,0) scale(.5);-moz-transform:translate(15%,0) scale(.5);transform:translate(15%,0) scale(.5)\"></i></span>","supplementary--pedestrians-use-opposite-sidewalk--de--left":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:translate(-20%,0) scale(.5) rotate(-90deg);-moz-transform:translate(-20%,0) scale(.5) rotate(-90deg);transform:translate(-20%,0) scale(.5) rotate(-90deg)\"></i><i class=\"t-pedestrians t-c-black\" style=\"-webkit-transform:translate(25%,0) scale(.6);-moz-transform:translate(25%,0) scale(.6);transform:translate(25%,0) scale(.6)\"></i></span>","supplementary--pedestrians-use-opposite-sidewalk--de--right":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:translate(20%,0) scale(.5) rotate(90deg);-moz-transform:translate(20%,0) scale(.5) rotate(90deg);transform:translate(20%,0) scale(.5) rotate(90deg)\"></i><i class=\"t-pedestrians t-c-black\" style=\"-webkit-transform:translate(-25%,0) scale(.6);-moz-transform:translate(-25%,0) scale(.6);transform:translate(-25%,0) scale(.6)\"></i></span>","supplementary--railway-only--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-train-electric t-c-black\" style=\"-webkit-transform:scale(.45);-moz-transform:scale(.45);transform:scale(.45)\"></i></span>","supplementary--right-pointing--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .45);-moz-transform:scale(.95, .45);transform:scale(.95, .45)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:scale(.6) rotate(90deg);-moz-transform:scale(.6) rotate(90deg);transform:scale(.6) rotate(90deg)\"></i></span>","other--entry--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-arrow-oneway t-c-white\" style=\"-webkit-transform:scale(.75);-moz-transform:scale(.75);transform:scale(.75)\"></i></span>","supplementary--priority-road-bends-left-3way--de--1":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,-30%) scale(.1,.25);-moz-transform:translate(0,-30%) scale(.1,.25);transform:translate(0,-30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(-.85,.85);-moz-transform:scale(-.85,.85);transform:scale(-.85,.85)\"></i></span>","supplementary--priority-road-bends-left-3way--de--2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(-90deg) translate(0,30%) scale(.1,.25);-moz-transform:rotate(-90deg) translate(0,30%) scale(.1,.25);transform:rotate(-90deg) translate(0,30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(-.85,.85);-moz-transform:scale(-.85,.85);transform:scale(-.85,.85)\"></i></span>","supplementary--priority-road-bends-left-4way--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,-30%) scale(.1,.25);-moz-transform:translate(0,-30%) scale(.1,.25);transform:translate(0,-30%) scale(.1,.25)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(-90deg) translate(0,30%) scale(.1,.25);-moz-transform:rotate(-90deg) translate(0,30%) scale(.1,.25);transform:rotate(-90deg) translate(0,30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(-.85,.85);-moz-transform:scale(-.85,.85);transform:scale(-.85,.85)\"></i></span>","supplementary--priority-road-bends-right-3way--de--1":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,-30%) scale(.1,.25);-moz-transform:translate(0,-30%) scale(.1,.25);transform:translate(0,-30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(.85);-moz-transform:scale(.85);transform:scale(.85)\"></i></span>","supplementary--priority-road-bends-right-3way--de--2":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(90deg) translate(0,30%) scale(.1,.25);-moz-transform:rotate(90deg) translate(0,30%) scale(.1,.25);transform:rotate(90deg) translate(0,30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(.85);-moz-transform:scale(.85);transform:scale(.85)\"></i></span>","supplementary--priority-road-bends-right-4way--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,-30%) scale(.1,.25);-moz-transform:translate(0,-30%) scale(.1,.25);transform:translate(0,-30%) scale(.1,.25)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(90deg) translate(0,30%) scale(.1,.25);-moz-transform:rotate(90deg) translate(0,30%) scale(.1,.25);transform:rotate(90deg) translate(0,30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(.85);-moz-transform:scale(.85);transform:scale(.85)\"></i></span>","supplementary--priority-road-from-left-3way--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,30%) scale(.1,.25);-moz-transform:translate(0,30%) scale(.1,.25);transform:translate(0,30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(-.85,-.85);-moz-transform:scale(-.85,-.85);transform:scale(-.85,-.85)\"></i></span>","supplementary--priority-road-from-left-4way--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,30%) scale(.1,.25);-moz-transform:translate(0,30%) scale(.1,.25);transform:translate(0,30%) scale(.1,.25)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(-90deg) translate(0,30%) scale(.1,.25);-moz-transform:rotate(-90deg) translate(0,30%) scale(.1,.25);transform:rotate(-90deg) translate(0,30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(-.85,-.85);-moz-transform:scale(-.85,-.85);transform:scale(-.85,-.85)\"></i></span>","supplementary--priority-road-from-right-3way--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,30%) scale(.1,.25);-moz-transform:translate(0,30%) scale(.1,.25);transform:translate(0,30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(.85,-.85);-moz-transform:scale(.85,-.85);transform:scale(.85,-.85)\"></i></span>","supplementary--priority-road-from-right-4way--de":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.95, .95);-moz-transform:scale(.95, .95);transform:scale(.95, .95)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:translate(0,30%) scale(.1,.25);-moz-transform:translate(0,30%) scale(.1,.25);transform:translate(0,30%) scale(.1,.25)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:rotate(90deg) translate(0,30%) scale(.1,.25);-moz-transform:rotate(90deg) translate(0,30%) scale(.1,.25);transform:rotate(90deg) translate(0,30%) scale(.1,.25)\"></i><i class=\"t-bending-priority t-c-black\" style=\"-webkit-transform:scale(.85,-.85);-moz-transform:scale(.85,-.85);transform:scale(.85,-.85)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/dk-map.json b/vendor/assets/iD/iD/traffico/string-maps/dk-map.json
deleted file mode 100644 (file)
index 0037591..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"danger--danger_level_crossing--dk":"<span class=\"t\"><i class=\"t-square-angular t-c-red\" style=\"-webkit-transform:rotate(60deg) scale(.2,1);-moz-transform:rotate(60deg) scale(.2,1);transform:rotate(60deg) scale(.2,1)\"></i><i class=\"t-square-angular t-c-red\" style=\"-webkit-transform:rotate(-60deg) scale(.2,1);-moz-transform:rotate(-60deg) scale(.2,1);transform:rotate(-60deg) scale(.2,1)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(60deg) scale(.1,.5) translate(50%,50%);-moz-transform:rotate(60deg) scale(.1,.5) translate(50%,50%);transform:rotate(60deg) scale(.1,.5) translate(50%,50%)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(-60deg) scale(.1,.5) translate(-50%,50%);-moz-transform:rotate(-60deg) scale(.1,.5) translate(-50%,50%);transform:rotate(-60deg) scale(.1,.5) translate(-50%,50%)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(60deg) scale(.1,.5) translate(-50%,-50%);-moz-transform:rotate(60deg) scale(.1,.5) translate(-50%,-50%);transform:rotate(60deg) scale(.1,.5) translate(-50%,-50%)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(-60deg) scale(.1,.5) translate(50%,-50%);-moz-transform:rotate(-60deg) scale(.1,.5) translate(50%,-50%);transform:rotate(-60deg) scale(.1,.5) translate(50%,-50%)\"></i></span>","information--information_border_dk--dk":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">Danmark</i></span>","prohibitory--no_trucks--dk":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-truck t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","priority--priority-road-end--dk":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.98) scale(0.707107) rotate(45deg);-moz-transform:scale(.98) scale(0.707107) rotate(45deg);transform:scale(.98) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.2,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.2,1);transform:scale(0.707107) rotate(45deg) scale(.2,1)\"></i></span>","danger--railway-crossing-unsecured--dk":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(.4);-moz-transform:translate(0,13%) scale(.4);transform:translate(0,13%) scale(.4)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/ee-map.json b/vendor/assets/iD/iD/traffico/string-maps/ee-map.json
deleted file mode 100644 (file)
index 9fc596a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_ee--ee":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">EESTI</i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/es-map.json b/vendor/assets/iD/iD/traffico/string-maps/es-map.json
deleted file mode 100644 (file)
index 4d3325b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_es--es":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">ESPAÑA</i></span>","danger--pedestrian-crossing--es":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-pedestrian t-c-black\" style=\"-webkit-transform:scale(.8) translate(0,5%);-moz-transform:scale(.8) translate(0,5%);transform:scale(.8) translate(0,5%)\"></i></span>","danger--road-narrows-ahead--es":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-narrow-road-both t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.6);-moz-transform:translate(0,14.43%) scale(.6);transform:translate(0,14.43%) scale(.6)\"></i></span>","priority--priority-road-end--es":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.98) scale(0.707107) rotate(45deg);-moz-transform:scale(.98) scale(0.707107) rotate(45deg);transform:scale(.98) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.2,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.2,1);transform:scale(0.707107) rotate(45deg) scale(.2,1)\"></i></span>","danger--railway-crossing-unsecured--es":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(.4);-moz-transform:translate(0,13%) scale(.4);transform:translate(0,13%) scale(.4)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/fi-map.json b/vendor/assets/iD/iD/traffico/string-maps/fi-map.json
deleted file mode 100644 (file)
index e192e13..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_fi--fi":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,-100%);-moz-transform:translate(0,-100%);transform:translate(0,-100%)\">SUOMI</i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,0);-moz-transform:translate(0,0);transform:translate(0,0)\">FINLAND</i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,100%);-moz-transform:translate(0,100%);transform:translate(0,100%)\">SUOPMA</i></span>","danger--cyclists-crossing-ahead--fi":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-yellow\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.65) translate(0,25%);-moz-transform:scale(.65) translate(0,25%);transform:scale(.65) translate(0,25%)\"></i></span>","priority--priority-road-end--fi":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.98) scale(0.707107) rotate(45deg);-moz-transform:scale(.98) scale(0.707107) rotate(45deg);transform:scale(.98) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.2,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.2,1);transform:scale(0.707107) rotate(45deg) scale(.2,1)\"></i></span>","danger--railway-crossing-unsecured--fi":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-yellow\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(.4);-moz-transform:translate(0,13%) scale(.4);transform:translate(0,13%) scale(.4)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/fr-map.json b/vendor/assets/iD/iD/traffico/string-maps/fr-map.json
deleted file mode 100644 (file)
index 3aea843..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_fr--fr":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">FRANCE</i></span>","information--information_city_entrance--fr":"<span class=\"t\"><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-angular t-c-red\" style=\"-webkit-transform:scale(.95,.45);-moz-transform:scale(.95,.45);transform:scale(.95,.45)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:scale(.9,.4);-moz-transform:scale(.9,.4);transform:scale(.9,.4)\"></i><i class=\"t-content-5 t-c-black\">some city</i></span>","information--information_city_exit--fr":"<span class=\"t\"><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:scale(1,.5);-moz-transform:scale(1,.5);transform:scale(1,.5)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(.95,.45);-moz-transform:scale(.95,.45);transform:scale(.95,.45)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:scale(.9,.4);-moz-transform:scale(.9,.4);transform:scale(.9,.4)\"></i><i class=\"t-content-5 t-c-black\">some city</i><i class=\"t-square-diagonal-bar t-c-red\" style=\"-webkit-transform:scale(.9,.4);-moz-transform:scale(.9,.4);transform:scale(.9,.4)\"></i></span>","priority--priority-road-end--fr":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.98) scale(0.707107) rotate(45deg);-moz-transform:scale(.98) scale(0.707107) rotate(45deg);transform:scale(.98) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.2,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.2,1);transform:scale(0.707107) rotate(45deg) scale(.2,1)\"></i></span>","danger--railway-crossing-unsecured--fr":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(.4);-moz-transform:translate(0,13%) scale(.4);transform:translate(0,13%) scale(.4)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/gr-map.json b/vendor/assets/iD/iD/traffico/string-maps/gr-map.json
deleted file mode 100644 (file)
index 76204ba..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_gr--gr":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-yellow\" style=\"-webkit-transform:translate(0,-50%);-moz-transform:translate(0,-50%);transform:translate(0,-50%)\">EΛΛAΣ</i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,50%);-moz-transform:translate(0,50%);transform:translate(0,50%)\">GREECE</i></span>","priority--priority-road-end--gr":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.98) scale(0.707107) rotate(45deg);-moz-transform:scale(.98) scale(0.707107) rotate(45deg);transform:scale(.98) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.2,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.2,1);transform:scale(0.707107) rotate(45deg) scale(.2,1)\"></i></span>","danger--railway-crossing-unsecured--gr":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-yellow\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(.4);-moz-transform:translate(0,13%) scale(.4);transform:translate(0,13%) scale(.4)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/hu-map.json b/vendor/assets/iD/iD/traffico/string-maps/hu-map.json
deleted file mode 100644 (file)
index 3e3bbb4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_hu--hu":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.75);-moz-transform:scale(.75);transform:scale(.75)\">Magyarország</i></span>","priority--priority-road-end--hu":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.98) scale(0.707107) rotate(45deg);-moz-transform:scale(.98) scale(0.707107) rotate(45deg);transform:scale(.98) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.2,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.2,1);transform:scale(0.707107) rotate(45deg) scale(.2,1)\"></i></span>","danger--railway-crossing-unsecured--hu":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(.4);-moz-transform:translate(0,13%) scale(.4);transform:translate(0,13%) scale(.4)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/it-map.json b/vendor/assets/iD/iD/traffico/string-maps/it-map.json
deleted file mode 100644 (file)
index 313a13a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_it--it":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">ITALIA</i></span>","danger--cyclists-crossing-ahead--it":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-yellow\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.65) translate(0,25%);-moz-transform:scale(.65) translate(0,25%);transform:scale(.65) translate(0,25%)\"></i></span>","danger--children--it":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-children t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.75);-moz-transform:translate(0,14.43%) scale(.75);transform:translate(0,14.43%) scale(.75)\"></i></span>","danger--level-crossing--it--other":"<span class=\"t\"><i class=\"t-level-crossing t-c-red\"></i><i class=\"t-level-crossing t-c-red\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(60deg) scale(.05,1);-moz-transform:rotate(60deg) scale(.05,1);transform:rotate(60deg) scale(.05,1)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(-60deg) scale(.05,1);-moz-transform:rotate(-60deg) scale(.05,1);transform:rotate(-60deg) scale(.05,1)\"></i></span>","mandatory--pedestrians-only--it":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-pedestrian t-c-white\"></i></span>","priority--priority-road-end--it":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.98) scale(0.707107) rotate(45deg);-moz-transform:scale(.98) scale(0.707107) rotate(45deg);transform:scale(.98) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.2,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.2,1);transform:scale(0.707107) rotate(45deg) scale(.2,1)\"></i></span>","danger--railway-crossing-unsecured--it":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(.4);-moz-transform:translate(0,13%) scale(.4);transform:translate(0,13%) scale(.4)\"></i></span>","mandatory--turn-right-ahead--it":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-arrow-l t-c-white\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/lt-map.json b/vendor/assets/iD/iD/traffico/string-maps/lt-map.json
deleted file mode 100644 (file)
index 5295078..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_lt--lt":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,-80%);-moz-transform:translate(0,-80%);transform:translate(0,-80%)\">Lietuvos</i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,20%);-moz-transform:translate(0,20%);transform:translate(0,20%)\">Respublika</i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/lu-map.json b/vendor/assets/iD/iD/traffico/string-maps/lu-map.json
deleted file mode 100644 (file)
index fac12a9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_lu_fr--lu":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.85);-moz-transform:scale(.85);transform:scale(.85)\">Luxembourg</i></span>","information--information_border_lu_de--lu":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.85);-moz-transform:scale(.85);transform:scale(.85)\">Luxemburg</i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/lv-map.json b/vendor/assets/iD/iD/traffico/string-maps/lv-map.json
deleted file mode 100644 (file)
index 6ca8d55..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_lv--lv":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">LATVIJA</i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/nl-map.json b/vendor/assets/iD/iD/traffico/string-maps/nl-map.json
deleted file mode 100644 (file)
index 36c1fb5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_nl--nl":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">Nederland</i></span>","information--information_cycleway--nl":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(1,.3);-moz-transform:scale(1,.3);transform:scale(1,.3)\"></i><i class=\"t-square-rounded t-c-blue\" style=\"-webkit-transform:scale(.95,.25);-moz-transform:scale(.95,.25);transform:scale(.95,.25)\"></i><i class=\"t-content-4 t-c-white\">fietspad</i></span>","priority--priority-road-end--nl":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.98);-moz-transform:scale(0.707107) rotate(45deg) scale(.98);transform:scale(0.707107) rotate(45deg) scale(.98)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.05,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.05,1);transform:scale(0.707107) rotate(45deg) scale(.05,1)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0);-moz-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0);transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0);-moz-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0);transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0)\"></i></span>","danger--railway-crossing-unsecured--nl":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(.4);-moz-transform:translate(0,13%) scale(.4);transform:translate(0,13%) scale(.4)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/no-map.json b/vendor/assets/iD/iD/traffico/string-maps/no-map.json
deleted file mode 100644 (file)
index 4b1b82f..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"prohibitory--no_trucks--no":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-truck t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","priority--priority-road-end--no":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.98) scale(0.707107) rotate(45deg);-moz-transform:scale(.98) scale(0.707107) rotate(45deg);transform:scale(.98) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.2,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.2,1);transform:scale(0.707107) rotate(45deg) scale(.2,1)\"></i></span>","danger--railway-crossing-unsecured--no":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(.4);-moz-transform:translate(0,13%) scale(.4);transform:translate(0,13%) scale(.4)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/pl-map.json b/vendor/assets/iD/iD/traffico/string-maps/pl-map.json
deleted file mode 100644 (file)
index 7518f40..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_pl--pl":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,-70%) scale(.7);-moz-transform:translate(0,-70%) scale(.7);transform:translate(0,-70%) scale(.7)\">Rzeczpospolita</i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:translate(0,40%);-moz-transform:translate(0,40%);transform:translate(0,40%)\">Polska</i></span>","danger--pedestrian-crossing--pl":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-yellow\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-pedestrian t-c-black\" style=\"-webkit-transform:scale(.8) translate(0,5%);-moz-transform:scale(.8) translate(0,5%);transform:scale(.8) translate(0,5%)\"></i></span>","priority--priority-road-end--pl":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.98) scale(0.707107) rotate(45deg);-moz-transform:scale(.98) scale(0.707107) rotate(45deg);transform:scale(.98) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.2,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.2,1);transform:scale(0.707107) rotate(45deg) scale(.2,1)\"></i></span>","danger--railway-crossing-unsecured--pl":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-yellow\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(.4);-moz-transform:translate(0,13%) scale(.4);transform:translate(0,13%) scale(.4)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/se-map.json b/vendor/assets/iD/iD/traffico/string-maps/se-map.json
deleted file mode 100644 (file)
index f84dace..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_se--se":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\">SVERIGE</i></span>","danger--cyclists-crossing-ahead--se":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-yellow\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.65) translate(0,25%);-moz-transform:scale(.65) translate(0,25%);transform:scale(.65) translate(0,25%)\"></i></span>","danger--pedestrian-crossing--se":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-yellow\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-pedestrian t-c-black\" style=\"-webkit-transform:scale(.8) translate(0,5%);-moz-transform:scale(.8) translate(0,5%);transform:scale(.8) translate(0,5%)\"></i></span>","priority--priority-road-end--se":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.98) scale(0.707107) rotate(45deg);-moz-transform:scale(.98) scale(0.707107) rotate(45deg);transform:scale(.98) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.2,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.2,1);transform:scale(0.707107) rotate(45deg) scale(.2,1)\"></i></span>","danger--railway-crossing-unsecured--se":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-yellow\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(.4);-moz-transform:translate(0,13%) scale(.4);transform:translate(0,13%) scale(.4)\"></i></span>","danger--children--se":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-yellow\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-children t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.75);-moz-transform:translate(0,14.43%) scale(.75);transform:translate(0,14.43%) scale(.75)\"></i></span>","priority--give-way-to-oncoming-traffic--se":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-circle-bg t-c-yellow\" style=\"-webkit-transform:scale(0.8);-moz-transform:scale(0.8);transform:scale(0.8)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:scale(.7) translate(-25%,5%) rotate(180deg);-moz-transform:scale(.7) translate(-25%,5%) rotate(180deg);transform:scale(.7) translate(-25%,5%) rotate(180deg)\"></i><i class=\"t-DE-arrow-up t-c-red\" style=\"-webkit-transform:scale(.7) translate(25%,-5%);-moz-transform:scale(.7) translate(25%,-5%);transform:scale(.7) translate(25%,-5%)\"></i></span>","prohibitory--no-bicycles--se":"<span class=\"t\"><i class=\"t-circle-bg t-c-yellow\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i></span>","prohibitory--no-pedestrians--se":"<span class=\"t\"><i class=\"t-circle-bg t-c-yellow\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-pedestrian t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/si-map.json b/vendor/assets/iD/iD/traffico/string-maps/si-map.json
deleted file mode 100644 (file)
index 4046630..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_si--si":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.85);-moz-transform:scale(.85);transform:scale(.85)\">SLOVENIA</i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/sk-map.json b/vendor/assets/iD/iD/traffico/string-maps/sk-map.json
deleted file mode 100644 (file)
index 9bd05a7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"information--information_border_sk--sk":"<span class=\"t\"><i class=\"t-square-rounded t-c-blue\"></i><i class=\"t-europe_stars t-c-yellow\"></i><i class=\"t-content-5 t-c-white\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\">SLOVENSKO</i></span>","priority--priority-road-end--sk":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.98);-moz-transform:scale(0.707107) rotate(45deg) scale(.98);transform:scale(0.707107) rotate(45deg) scale(.98)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.6) scale(0.707107) rotate(45deg);-moz-transform:scale(.6) scale(0.707107) rotate(45deg);transform:scale(.6) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.05,1);-moz-transform:scale(0.707107) rotate(45deg) scale(.05,1);transform:scale(0.707107) rotate(45deg) scale(.05,1)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0);-moz-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0);transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(150%,0)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0);-moz-transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0);transform:scale(0.707107) rotate(45deg) scale(.05,1) translate(-150%,0)\"></i></span>","danger--railway-crossing-unsecured--sk":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(.4);-moz-transform:translate(0,13%) scale(.4);transform:translate(0,13%) scale(.4)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/uk-map.json b/vendor/assets/iD/iD/traffico/string-maps/uk-map.json
deleted file mode 100644 (file)
index 6bf250a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"danger--danger_contraflow--uk":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.35) translate(-25%,-5%);-moz-transform:translate(0,14.43%) scale(.35) translate(-25%,-5%);transform:translate(0,14.43%) scale(.35) translate(-25%,-5%)\"></i><i class=\"t-DE-arrow-up t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(.35) translate(25%,5%) rotate(180deg);-moz-transform:translate(0,14.43%) scale(.35) translate(25%,5%) rotate(180deg);transform:translate(0,14.43%) scale(.35) translate(25%,5%) rotate(180deg)\"></i></span>","danger--level-crossing--uk--other":"<span class=\"t\"><i class=\"t-level-crossing t-c-red\"></i><i class=\"t-level-crossing t-c-red\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(60deg) scale(.05,1);-moz-transform:rotate(60deg) scale(.05,1);transform:rotate(60deg) scale(.05,1)\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:rotate(-60deg) scale(.05,1);-moz-transform:rotate(-60deg) scale(.05,1);transform:rotate(-60deg) scale(.05,1)\"></i></span>","mandatory--mandatory_roundabout--uk":"<span class=\"t\"><i class=\"t-circle-bg t-c-blue\"></i><i class=\"t-roundabout t-c-white\" style=\"-webkit-transform:scale(-1.25,1.25);-moz-transform:scale(-1.25,1.25);transform:scale(-1.25,1.25)\"></i></span>","prohibitory--prohibitory_overtaking--uk":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-car t-c-black\" style=\"-webkit-transform:scale(.6) translate(-26%,10%);-moz-transform:scale(.6) translate(-26%,10%);transform:scale(.6) translate(-26%,10%)\"></i><i class=\"t-car t-c-red\" style=\"-webkit-transform:scale(.6) translate(26%,10%);-moz-transform:scale(.6) translate(26%,10%);transform:scale(.6) translate(26%,10%)\"></i></span>","danger--railway-crossing-unsecured--uk":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-railway-xing-unsecured t-c-black\" style=\"-webkit-transform:translate(0,13%) scale(-.4,.4);-moz-transform:translate(0,13%) scale(-.4,.4);transform:translate(0,13%) scale(-.4,.4)\"></i></span>","danger--children--uk":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\"></i><i class=\"t-tri-angular t-c-white\" style=\"-webkit-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);-moz-transform:translate(0,14.43%) scale(.7) translate(0,-14.43%);transform:translate(0,14.43%) scale(.7) translate(0,-14.43%)\"></i><i class=\"t-children t-c-black\" style=\"-webkit-transform:translate(0,14.43%) scale(-.75,.75);-moz-transform:translate(0,14.43%) scale(-.75,.75);transform:translate(0,14.43%) scale(-.75,.75)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/string-maps/us-map.json b/vendor/assets/iD/iD/traffico/string-maps/us-map.json
deleted file mode 100644 (file)
index 23f68b4..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"regulatory--pass-on-either-side--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-pass-either-us t-c-black\"></i></span>","regulatory--yield--us":"<span class=\"t\"><i class=\"t-tri-rounded t-c-red\" style=\"-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);transform:rotate(180deg)\"></i><i class=\"t-tri-rounded t-c-white\" style=\"-webkit-transform:translate(0,-14.43%) scale(.55) translate(0,14.43%) rotate(180deg);-moz-transform:translate(0,-14.43%) scale(.55) translate(0,14.43%) rotate(180deg);transform:translate(0,-14.43%) scale(.55) translate(0,14.43%) rotate(180deg)\"></i><i class=\"t-content-4 t-c-red\" style=\"-webkit-transform:translate(0,-115%) scale(.6);-moz-transform:translate(0,-115%) scale(.6);transform:translate(0,-115%) scale(.6)\">YIELD</i></span>","regulatory--no-bicycles--us":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-entry--us":"<span class=\"t\"><i class=\"t-circle-bg t-c-red\"></i><i class=\"t-square-angular t-c-white\" style=\"-webkit-transform:scale(.92,.16);-moz-transform:scale(.92,.16);transform:scale(.92,.16)\"></i></span>","regulatory--no-left-or-u-turn--us":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-no-l-or-u-turn t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-left-turn--us":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-turn-90-l t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-parking--us":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-parking t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-pedestrians--us":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-pedestrian t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-straight-through--us":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-US-arrow-up t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-heavy-goods-vehicles--us":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-truck t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-right-turn--us":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-turn-90-l t-c-black\" style=\"-webkit-transform:scale(.8) scale(-1,1);-moz-transform:scale(.8) scale(-1,1);transform:scale(.8) scale(-1,1)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--no-u-turn--us":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-u-turn t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--maximum-speed-limit-5--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-145%) scale(.8);-moz-transform:translate(0,-145%) scale(.8);transform:translate(0,-145%) scale(.8)\">SPEED</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-60%) scale(.8);-moz-transform:translate(0,-60%) scale(.8);transform:translate(0,-60%) scale(.8)\">LIMIT</i><i class=\"t-content-1 t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">5</i></span>","regulatory--maximum-speed-limit-10--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-145%) scale(.8);-moz-transform:translate(0,-145%) scale(.8);transform:translate(0,-145%) scale(.8)\">SPEED</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-60%) scale(.8);-moz-transform:translate(0,-60%) scale(.8);transform:translate(0,-60%) scale(.8)\">LIMIT</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">10</i></span>","regulatory--maximum-speed-limit-15--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-145%) scale(.8);-moz-transform:translate(0,-145%) scale(.8);transform:translate(0,-145%) scale(.8)\">SPEED</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-60%) scale(.8);-moz-transform:translate(0,-60%) scale(.8);transform:translate(0,-60%) scale(.8)\">LIMIT</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">15</i></span>","regulatory--maximum-speed-limit-20--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-145%) scale(.8);-moz-transform:translate(0,-145%) scale(.8);transform:translate(0,-145%) scale(.8)\">SPEED</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-60%) scale(.8);-moz-transform:translate(0,-60%) scale(.8);transform:translate(0,-60%) scale(.8)\">LIMIT</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">20</i></span>","regulatory--maximum-speed-limit-25--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-145%) scale(.8);-moz-transform:translate(0,-145%) scale(.8);transform:translate(0,-145%) scale(.8)\">SPEED</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-60%) scale(.8);-moz-transform:translate(0,-60%) scale(.8);transform:translate(0,-60%) scale(.8)\">LIMIT</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">25</i></span>","regulatory--maximum-speed-limit-30--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-145%) scale(.8);-moz-transform:translate(0,-145%) scale(.8);transform:translate(0,-145%) scale(.8)\">SPEED</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-60%) scale(.8);-moz-transform:translate(0,-60%) scale(.8);transform:translate(0,-60%) scale(.8)\">LIMIT</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">30</i></span>","regulatory--maximum-speed-limit-35--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-145%) scale(.8);-moz-transform:translate(0,-145%) scale(.8);transform:translate(0,-145%) scale(.8)\">SPEED</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-60%) scale(.8);-moz-transform:translate(0,-60%) scale(.8);transform:translate(0,-60%) scale(.8)\">LIMIT</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">35</i></span>","regulatory--maximum-speed-limit-45--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-145%) scale(.8);-moz-transform:translate(0,-145%) scale(.8);transform:translate(0,-145%) scale(.8)\">SPEED</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-60%) scale(.8);-moz-transform:translate(0,-60%) scale(.8);transform:translate(0,-60%) scale(.8)\">LIMIT</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">45</i></span>","regulatory--maximum-speed-limit-50--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-145%) scale(.8);-moz-transform:translate(0,-145%) scale(.8);transform:translate(0,-145%) scale(.8)\">SPEED</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-60%) scale(.8);-moz-transform:translate(0,-60%) scale(.8);transform:translate(0,-60%) scale(.8)\">LIMIT</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">50</i></span>","regulatory--maximum-speed-limit-55--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-145%) scale(.8);-moz-transform:translate(0,-145%) scale(.8);transform:translate(0,-145%) scale(.8)\">SPEED</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-60%) scale(.8);-moz-transform:translate(0,-60%) scale(.8);transform:translate(0,-60%) scale(.8)\">LIMIT</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">55</i></span>","regulatory--maximum-speed-limit-60--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-145%) scale(.8);-moz-transform:translate(0,-145%) scale(.8);transform:translate(0,-145%) scale(.8)\">SPEED</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-60%) scale(.8);-moz-transform:translate(0,-60%) scale(.8);transform:translate(0,-60%) scale(.8)\">LIMIT</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">60</i></span>","regulatory--maximum-speed-limit-65--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-145%) scale(.8);-moz-transform:translate(0,-145%) scale(.8);transform:translate(0,-145%) scale(.8)\">SPEED</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-60%) scale(.8);-moz-transform:translate(0,-60%) scale(.8);transform:translate(0,-60%) scale(.8)\">LIMIT</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">65</i></span>","regulatory--maximum-speed-limit-70--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-145%) scale(.8);-moz-transform:translate(0,-145%) scale(.8);transform:translate(0,-145%) scale(.8)\">SPEED</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-60%) scale(.8);-moz-transform:translate(0,-60%) scale(.8);transform:translate(0,-60%) scale(.8)\">LIMIT</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">70</i></span>","regulatory--maximum-speed-limit-75--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-145%) scale(.8);-moz-transform:translate(0,-145%) scale(.8);transform:translate(0,-145%) scale(.8)\">SPEED</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-60%) scale(.8);-moz-transform:translate(0,-60%) scale(.8);transform:translate(0,-60%) scale(.8)\">LIMIT</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">75</i></span>","regulatory--maximum-speed-limit-80--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-145%) scale(.8);-moz-transform:translate(0,-145%) scale(.8);transform:translate(0,-145%) scale(.8)\">SPEED</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-60%) scale(.8);-moz-transform:translate(0,-60%) scale(.8);transform:translate(0,-60%) scale(.8)\">LIMIT</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">80</i></span>","regulatory--maximum-speed-limit-85--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-145%) scale(.8);-moz-transform:translate(0,-145%) scale(.8);transform:translate(0,-145%) scale(.8)\">SPEED</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-60%) scale(.8);-moz-transform:translate(0,-60%) scale(.8);transform:translate(0,-60%) scale(.8)\">LIMIT</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,45%);-moz-transform:translate(0,45%);transform:translate(0,45%)\">85</i></span>","regulatory--stop--us":"<span class=\"t\"><i class=\"t-octagon t-c-red\"></i><i class=\"t-stop t-c-white\"></i></span>","warning--t-roads--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-t-roads t-c-black\"></i></span>","warning--y-roads--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-y-roads t-c-black\"></i></span>","warning--added-lane-from-entering-roadway--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-added-lane t-c-black\" style=\"-webkit-transform:rotate(45deg) scale(.95);-moz-transform:rotate(45deg) scale(.95);transform:rotate(45deg) scale(.95)\"></i></span>","warning--added-lane-right--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-added-lane t-c-black\"></i></span>","warning--slippery-bicycles--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-bicycle-slippery t-c-black\"></i></span>","warning--crossroads-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-cross-roads t-c-black\"></i></span>","warning--double-curve-first-right-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-reverse-curve-au t-c-black\" style=\"-webkit-transform:scale(-1,1) scale(.9);-moz-transform:scale(-1,1) scale(.9);transform:scale(-1,1) scale(.9)\"></i></span>","warning--double-turn-first-left-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-reverse-left t-c-black\"></i></span>","warning--cyclists-crossing--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-bicycle t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--double-reverse-curve--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-orange\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-single-2-reverse-curve t-c-black\" style=\"-webkit-transform:scale(.9) translate(-9%);-moz-transform:scale(.9) translate(-9%);transform:scale(.9) translate(-9%)\"></i><i class=\"t-single-2-reverse-curve t-c-black\" style=\"-webkit-transform:scale(.9) translate(9%);-moz-transform:scale(.9) translate(9%);transform:scale(.9) translate(9%)\"></i></span>","warning--falling-rocks-or-debris-right--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-falling-rocks-US t-c-black\"></i></span>","warning--emergency-vehicles--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-fire-station t-c-black\"></i></span>","warning--flaggers-in-road-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-flaggers t-c-black\"></i></span>","warning--hairpin-curve-right-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-hairpin-curve t-c-black\"></i></span>","warning--divided-highway-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-highway-divided t-c-black\"></i></span>","warning--horizontal-alignment-left--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-h-align-l t-c-black\"></i></span>","warning--horizontal-alignment-right--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-h-align-l t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--roundabout-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-roundabout t-c-black\"></i></span>","warning--tram-crossing--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-light-rail t-c-black\"></i></span>","warning--loop-270-degrees--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-loop-270 t-c-black\"></i></span>","warning--loop-pretzel--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-pretzel-loop t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--height-restriction-ahead--us--feet":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-height t-c-black\"></i><i class=\"t-height_value t-c-black\"></i></span>","warning--height-restriction-ahead--us--meters":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-height t-c-black\"></i><i class=\"t-height_value t-c-black\"></i></span>","warning--traffic-merges-right-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-merge t-c-black\"></i></span>","warning--motorcycle-crossing--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-motorbike t-c-black\"></i></span>","warning--narrow-bridge-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-bridge-us t-c-black\" style=\"-webkit-transform:scale(0.8);-moz-transform:scale(0.8);transform:scale(0.8)\"></i></span>","warning--offset-roads--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-offset-roads t-c-black\"></i></span>","warning--pass-left-or-right--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-pass-l-r t-c-black\"></i></span>","warning--pedestrian-crossing--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-pedestrian t-c-black\"></i></span>","warning--playground-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-play-ground t-c-black\"></i></span>","warning--uncontroller-railroad-crossing-ahead--us":"<span class=\"t\"><i class=\"t-circle-bg t-c-yellow\"></i><i class=\"t-circle-bar-rounded t-c-black\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i><i class=\"t-circle-bar-rounded t-c-black\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i><i class=\"t-railroad t-c-black\"></i></span>","warning--road-narrows-right-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-road-l t-c-black\" style=\"-webkit-transform:scale(.9) scale(-1,1);-moz-transform:scale(.9) scale(-1,1);transform:scale(.9) scale(-1,1)\"></i></span>","warning--road-narrows-left-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-road-l t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--road-narrows-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-narrow-road-both t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--junction-with-a-side-road-acute-left-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-a-a-r t-c-black\"></i></span>","warning--junction-with-a-side-road-acute-right-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-a-a-l t-c-black\"></i></span>","warning--junction-with-a-side-road-perpendicular-right-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-p-r t-c-black\"></i></span>","warning--junction-with-a-side-road-perpendicular-left-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-side-road-p-l t-c-black\"></i></span>","warning--slippery-road-surface--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-slippery t-c-black\"></i></span>","warning--steep-hill-downwards--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-steep-hill t-c-black\"></i></span>","warning--stop-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-small-arrow-au t-c-black\" style=\"-webkit-transform:translate(0,-25%);-moz-transform:translate(0,-25%);transform:translate(0,-25%)\"></i><i class=\"t-octagon t-c-red\" style=\"-webkit-transform:translate(0,15%) scale(.4);-moz-transform:translate(0,15%) scale(.4);transform:translate(0,15%) scale(.4)\"></i></span>","warning--traffic-signals-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(.2,.55);-moz-transform:scale(.2,.55);transform:scale(.2,.55)\"></i><i class=\"t-circle-bg t-c-green\" style=\"-webkit-transform:translate(0,16.5%) scale(.14);-moz-transform:translate(0,16.5%) scale(.14);transform:translate(0,16.5%) scale(.14)\"></i><i class=\"t-circle-bg t-c-yellow\" style=\"-webkit-transform:scale(.14);-moz-transform:scale(.14);transform:scale(.14)\"></i><i class=\"t-circle-bg t-c-red\" style=\"-webkit-transform:translate(0,-16.5%) scale(.14);-moz-transform:translate(0,-16.5%) scale(.14);transform:translate(0,-16.5%) scale(.14)\"></i></span>","warning--triple-reverse-curve--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-orange\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-single-2-reverse-curve t-c-black\" style=\"-webkit-transform:scale(.9) translate(-18%);-moz-transform:scale(.9) translate(-18%);transform:scale(.9) translate(-18%)\"></i><i class=\"t-single-2-reverse-curve t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i><i class=\"t-single-2-reverse-curve t-c-black\" style=\"-webkit-transform:scale(.9) translate(18%);-moz-transform:scale(.9) translate(18%);transform:scale(.9) translate(18%)\"></i></span>","warning--trucks-rollover--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-trucks-rollover t-c-black\"></i></span>","warning--turn-curve-left--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-l-curve t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--turn-curve-right--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-l-curve t-c-black\" style=\"-webkit-transform:scale(.9) scale(-1,1);-moz-transform:scale(.9) scale(-1,1);transform:scale(.9) scale(-1,1)\"></i></span>","warning--turn-right--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-90-l t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--turn-left--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-90-l t-c-black\"></i></span>","warning--double-turn-first-right-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-reverse-left t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--two-way-traffic-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-arrows_both_bra t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--winding-road-first-left-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-winding-road-left t-c-black\"></i></span>","warning--winding-road-first-right-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-winding-road-left t-c-black\" style=\"-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);transform:scale(-1,1)\"></i></span>","warning--workers-in-road-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-roadworks t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","warning--yield-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-small-arrow-au t-c-black\" style=\"-webkit-transform:translate(0,-25%);-moz-transform:translate(0,-25%);transform:translate(0,-25%)\"></i><i class=\"t-tri-rounded t-c-red\" style=\"-webkit-transform:translate(0, 15%) scale(.45) rotate(180deg);-moz-transform:translate(0, 15%) scale(.45) rotate(180deg);transform:translate(0, 15%) scale(.45) rotate(180deg)\"></i><i class=\"t-tri-rounded t-c-white\" style=\"-webkit-transform:translate(0, 12%) scale(.25) rotate(180deg);-moz-transform:translate(0, 12%) scale(.25) rotate(180deg);transform:translate(0, 12%) scale(.25) rotate(180deg)\"></i></span>","warning--horizontal-traffic-signals-ahead--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-angular t-c-black\" style=\"-webkit-transform:scale(.55,.2);-moz-transform:scale(.55,.2);transform:scale(.55,.2)\"></i><i class=\"t-circle-bg t-c-green\" style=\"-webkit-transform:translate(16.5%,0) scale(.14);-moz-transform:translate(16.5%,0) scale(.14);transform:translate(16.5%,0) scale(.14)\"></i><i class=\"t-circle-bg t-c-yellow\" style=\"-webkit-transform:scale(.14);-moz-transform:scale(.14);transform:scale(.14)\"></i><i class=\"t-circle-bg t-c-red\" style=\"-webkit-transform:translate(-16.5%,0) scale(.14);-moz-transform:translate(-16.5%,0) scale(.14);transform:translate(-16.5%,0) scale(.14)\"></i></span>","warning--dead-end--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-dead-end t-c-black\"></i></span>","regulatory--no-hitch-hiking--us":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-hitch-hiking t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","warning--share-roads--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-share-roads t-c-black\"></i></span>","warning--end--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-end t-c-black\"></i></span>","warning--skewed-railroad-crossing--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-skewed-railroads t-c-black\"></i></span>","warning--lightground-railroad-crossing--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-lightground-railroad-crossing t-c-black\"></i></span>","regulatory--national-network-lane--us":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-green\"></i><i class=\"t-lorry t-c-black\"></i></span>","regulatory--national-network-prohibited--us":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-lorry t-c-black\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--hazardous-material-prohibited--us":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-hazardous-material t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-o t-c-red\"></i></span>","warning--truck-rollover-with-speed--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-truck-rollover-speed t-c-black\"></i></span>","regulatory--no-rollerblading--us":"<span class=\"t\"><i class=\"t-circle-bg t-c-white\"></i><i class=\"t-circle-o t-c-red\"></i><i class=\"t-rollerblading t-c-black\" style=\"-webkit-transform:scale(.8);-moz-transform:scale(.8);transform:scale(.8)\"></i><i class=\"t-circle-bar-rounded t-c-red\" style=\"-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);transform:rotate(-45deg)\"></i></span>","regulatory--one-way-left--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(1.1,.33);-moz-transform:scale(1.1,.33);transform:scale(1.1,.33)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1.1,.33) scale(.95);-moz-transform:scale(1.1,.33) scale(.95);transform:scale(1.1,.33) scale(.95)\"></i><i class=\"t-US-arrow-oneway t-c-white\" style=\"-webkit-transform:scale(.6) scale(1.35,1) rotate(-90deg);-moz-transform:scale(.6) scale(1.35,1) rotate(-90deg);transform:scale(.6) scale(1.35,1) rotate(-90deg)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(.5,.6) translate(-15%,-25%);-moz-transform:scale(.5,.6) translate(-15%,-25%);transform:scale(.5,.6) translate(-15%,-25%)\">ONE</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(.5,.6) translate(45%,-25%);-moz-transform:scale(.5,.6) translate(45%,-25%);transform:scale(.5,.6) translate(45%,-25%)\">WAY</i></span>","regulatory--one-way-right--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(1.1,.33);-moz-transform:scale(1.1,.33);transform:scale(1.1,.33)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(1.1,.33) scale(.95);-moz-transform:scale(1.1,.33) scale(.95);transform:scale(1.1,.33) scale(.95)\"></i><i class=\"t-US-arrow-oneway t-c-white\" style=\"-webkit-transform:scale(.6) scale(1.35,1) rotate(90deg);-moz-transform:scale(.6) scale(1.35,1) rotate(90deg);transform:scale(.6) scale(1.35,1) rotate(90deg)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(.5,.6) translate(-45%,-25%);-moz-transform:scale(.5,.6) translate(-45%,-25%);transform:scale(.5,.6) translate(-45%,-25%)\">ONE</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(.5,.6) translate(15%,-25%);-moz-transform:scale(.5,.6) translate(15%,-25%);transform:scale(.5,.6) translate(15%,-25%)\">WAY</i></span>","regulatory--one-way-left--us--alternate":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(1,1.2) translate(0,-90%);-moz-transform:scale(1,1.2) translate(0,-90%);transform:scale(1,1.2) translate(0,-90%)\">ONE</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(1,1.2);-moz-transform:scale(1,1.2);transform:scale(1,1.2)\">WAY</i><i class=\"t-US-arrow-oneway t-c-black\" style=\"-webkit-transform:scale(.5) translate(0,45%) rotate(-90deg);-moz-transform:scale(.5) translate(0,45%) rotate(-90deg);transform:scale(.5) translate(0,45%) rotate(-90deg)\"></i></span>","regulatory--one-way-right--us--alternate":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1);-moz-transform:scale(.7,1);transform:scale(.7,1)\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.7,1) scale(.95);-moz-transform:scale(.7,1) scale(.95);transform:scale(.7,1) scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.7,1) scale(.90);-moz-transform:scale(.7,1) scale(.90);transform:scale(.7,1) scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(1,1.2) translate(0,-90%);-moz-transform:scale(1,1.2) translate(0,-90%);transform:scale(1,1.2) translate(0,-90%)\">ONE</i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:scale(1,1.2);-moz-transform:scale(1,1.2);transform:scale(1,1.2)\">WAY</i><i class=\"t-US-arrow-oneway t-c-black\" style=\"-webkit-transform:scale(.5) translate(0,45%) rotate(90deg);-moz-transform:scale(.5) translate(0,45%) rotate(90deg);transform:scale(.5) translate(0,45%) rotate(90deg)\"></i></span>","warning--single-reverse-curve--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-orange\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-single-2-reverse-curve t-c-black\"></i></span>","school--school--us":"<span class=\"t\"><i class=\"t-school t-c-black\"></i><i class=\"t-school t-c-fluogreen\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-children t-c-black\"></i></span>","school--school--us--obsolete":"<span class=\"t\"><i class=\"t-school t-c-black\"></i><i class=\"t-school t-c-yellow\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-children t-c-black\"></i></span>","warning--turn-curve-left-with-speed--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-l-curve t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i><i class=\"t-turn-curve-speed t-c-black\" style=\"-webkit-transform:scale(.9) scale(-1,1);-moz-transform:scale(.9) scale(-1,1);transform:scale(.9) scale(-1,1)\"></i></span>","warning--turn-curve-right-with-speed--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-turn-l-curve t-c-black\" style=\"-webkit-transform:scale(.9) scale(-1,1);-moz-transform:scale(.9) scale(-1,1);transform:scale(.9) scale(-1,1)\"></i><i class=\"t-turn-curve-speed t-c-black\" style=\"-webkit-transform:scale(.9);-moz-transform:scale(.9);transform:scale(.9)\"></i></span>","regulatory--hight-speed-limit-5--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:translate(0,-100%) scale(.8);-moz-transform:translate(0,-100%) scale(.8);transform:translate(0,-100%) scale(.8)\">NIGHT</i><i class=\"t-content-1 t-c-white\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">5</i></span>","regulatory--hight-speed-limit-10--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:translate(0,-100%) scale(.8);-moz-transform:translate(0,-100%) scale(.8);transform:translate(0,-100%) scale(.8)\">NIGHT</i><i class=\"t-content t-c-white\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">10</i></span>","regulatory--hight-speed-limit-15--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:translate(0,-100%) scale(.8);-moz-transform:translate(0,-100%) scale(.8);transform:translate(0,-100%) scale(.8)\">NIGHT</i><i class=\"t-content t-c-white\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">15</i></span>","regulatory--hight-speed-limit-20--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:translate(0,-100%) scale(.8);-moz-transform:translate(0,-100%) scale(.8);transform:translate(0,-100%) scale(.8)\">NIGHT</i><i class=\"t-content t-c-white\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">20</i></span>","regulatory--hight-speed-limit-25--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:translate(0,-100%) scale(.8);-moz-transform:translate(0,-100%) scale(.8);transform:translate(0,-100%) scale(.8)\">NIGHT</i><i class=\"t-content t-c-white\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">25</i></span>","regulatory--hight-speed-limit-30--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:translate(0,-100%) scale(.8);-moz-transform:translate(0,-100%) scale(.8);transform:translate(0,-100%) scale(.8)\">NIGHT</i><i class=\"t-content t-c-white\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">30</i></span>","regulatory--hight-speed-limit-35--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:translate(0,-100%) scale(.8);-moz-transform:translate(0,-100%) scale(.8);transform:translate(0,-100%) scale(.8)\">NIGHT</i><i class=\"t-content t-c-white\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">35</i></span>","regulatory--hight-speed-limit-45--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:translate(0,-100%) scale(.8);-moz-transform:translate(0,-100%) scale(.8);transform:translate(0,-100%) scale(.8)\">NIGHT</i><i class=\"t-content t-c-white\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">45</i></span>","regulatory--hight-speed-limit-50--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:translate(0,-100%) scale(.8);-moz-transform:translate(0,-100%) scale(.8);transform:translate(0,-100%) scale(.8)\">NIGHT</i><i class=\"t-content t-c-white\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">50</i></span>","regulatory--hight-speed-limit-55--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:translate(0,-100%) scale(.8);-moz-transform:translate(0,-100%) scale(.8);transform:translate(0,-100%) scale(.8)\">NIGHT</i><i class=\"t-content t-c-white\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">55</i></span>","regulatory--hight-speed-limit-60--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:translate(0,-100%) scale(.8);-moz-transform:translate(0,-100%) scale(.8);transform:translate(0,-100%) scale(.8)\">NIGHT</i><i class=\"t-content t-c-white\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">60</i></span>","regulatory--hight-speed-limit-65--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:translate(0,-100%) scale(.8);-moz-transform:translate(0,-100%) scale(.8);transform:translate(0,-100%) scale(.8)\">NIGHT</i><i class=\"t-content t-c-white\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">65</i></span>","regulatory--hight-speed-limit-70--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:translate(0,-100%) scale(.8);-moz-transform:translate(0,-100%) scale(.8);transform:translate(0,-100%) scale(.8)\">NIGHT</i><i class=\"t-content t-c-white\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">70</i></span>","regulatory--hight-speed-limit-75--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:translate(0,-100%) scale(.8);-moz-transform:translate(0,-100%) scale(.8);transform:translate(0,-100%) scale(.8)\">NIGHT</i><i class=\"t-content t-c-white\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">75</i></span>","regulatory--hight-speed-limit-80--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:translate(0,-100%) scale(.8);-moz-transform:translate(0,-100%) scale(.8);transform:translate(0,-100%) scale(.8)\">NIGHT</i><i class=\"t-content t-c-white\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">80</i></span>","regulatory--hight-speed-limit-85--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-content-4 t-c-white\" style=\"-webkit-transform:translate(0,-100%) scale(.8);-moz-transform:translate(0,-100%) scale(.8);transform:translate(0,-100%) scale(.8)\">NIGHT</i><i class=\"t-content t-c-white\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">85</i></span>","regulatory--truck-speed-limit-5--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.90);-moz-transform:scale(.90);transform:scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-100%) scale(.7,.9);-moz-transform:translate(0,-100%) scale(.7,.9);transform:translate(0,-100%) scale(.7,.9)\">TRUCKS</i><i class=\"t-content-1 t-c-black\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">5</i></span>","regulatory--truck-speed-limit-10--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.90);-moz-transform:scale(.90);transform:scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-100%) scale(.7,.9);-moz-transform:translate(0,-100%) scale(.7,.9);transform:translate(0,-100%) scale(.7,.9)\">TRUCKS</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">10</i></span>","regulatory--truck-speed-limit-15--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.90);-moz-transform:scale(.90);transform:scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-100%) scale(.7,.9);-moz-transform:translate(0,-100%) scale(.7,.9);transform:translate(0,-100%) scale(.7,.9)\">TRUCKS</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">15</i></span>","regulatory--truck-speed-limit-20--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.90);-moz-transform:scale(.90);transform:scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-100%) scale(.7,.9);-moz-transform:translate(0,-100%) scale(.7,.9);transform:translate(0,-100%) scale(.7,.9)\">TRUCKS</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">20</i></span>","regulatory--truck-speed-limit-25--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.90);-moz-transform:scale(.90);transform:scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-100%) scale(.7,.9);-moz-transform:translate(0,-100%) scale(.7,.9);transform:translate(0,-100%) scale(.7,.9)\">TRUCKS</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">25</i></span>","regulatory--truck-speed-limit-30--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.90);-moz-transform:scale(.90);transform:scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-100%) scale(.7,.9);-moz-transform:translate(0,-100%) scale(.7,.9);transform:translate(0,-100%) scale(.7,.9)\">TRUCKS</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">30</i></span>","regulatory--truck-speed-limit-35--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.90);-moz-transform:scale(.90);transform:scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-100%) scale(.7,.9);-moz-transform:translate(0,-100%) scale(.7,.9);transform:translate(0,-100%) scale(.7,.9)\">TRUCKS</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">35</i></span>","regulatory--truck-speed-limit-45--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.90);-moz-transform:scale(.90);transform:scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-100%) scale(.7,.9);-moz-transform:translate(0,-100%) scale(.7,.9);transform:translate(0,-100%) scale(.7,.9)\">TRUCKS</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">45</i></span>","regulatory--truck-speed-limit-50--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.90);-moz-transform:scale(.90);transform:scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-100%) scale(.7,.9);-moz-transform:translate(0,-100%) scale(.7,.9);transform:translate(0,-100%) scale(.7,.9)\">TRUCKS</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">50</i></span>","regulatory--truck-speed-limit-55--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.90);-moz-transform:scale(.90);transform:scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-100%) scale(.7,.9);-moz-transform:translate(0,-100%) scale(.7,.9);transform:translate(0,-100%) scale(.7,.9)\">TRUCKS</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">55</i></span>","regulatory--truck-speed-limit-60--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.90);-moz-transform:scale(.90);transform:scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-100%) scale(.7,.9);-moz-transform:translate(0,-100%) scale(.7,.9);transform:translate(0,-100%) scale(.7,.9)\">TRUCKS</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">60</i></span>","regulatory--truck-speed-limit-65--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.90);-moz-transform:scale(.90);transform:scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-100%) scale(.7,.9);-moz-transform:translate(0,-100%) scale(.7,.9);transform:translate(0,-100%) scale(.7,.9)\">TRUCKS</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">65</i></span>","regulatory--truck-speed-limit-70--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.90);-moz-transform:scale(.90);transform:scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-100%) scale(.7,.9);-moz-transform:translate(0,-100%) scale(.7,.9);transform:translate(0,-100%) scale(.7,.9)\">TRUCKS</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">70</i></span>","regulatory--truck-speed-limit-75--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.90);-moz-transform:scale(.90);transform:scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-100%) scale(.7,.9);-moz-transform:translate(0,-100%) scale(.7,.9);transform:translate(0,-100%) scale(.7,.9)\">TRUCKS</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">75</i></span>","regulatory--truck-speed-limit-80--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.90);-moz-transform:scale(.90);transform:scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-100%) scale(.7,.9);-moz-transform:translate(0,-100%) scale(.7,.9);transform:translate(0,-100%) scale(.7,.9)\">TRUCKS</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">80</i></span>","regulatory--truck-speed-limit-85--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-white\"></i><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(.95);-moz-transform:scale(.95);transform:scale(.95)\"></i><i class=\"t-square-rounded t-c-white\" style=\"-webkit-transform:scale(.90);-moz-transform:scale(.90);transform:scale(.90)\"></i><i class=\"t-content-4 t-c-black\" style=\"-webkit-transform:translate(0,-100%) scale(.7,.9);-moz-transform:translate(0,-100%) scale(.7,.9);transform:translate(0,-100%) scale(.7,.9)\">TRUCKS</i><i class=\"t-content t-c-black\" style=\"-webkit-transform:translate(0,35%) scale(1.1);-moz-transform:translate(0,35%) scale(1.1);transform:translate(0,35%) scale(1.1)\">85</i></span>","warning--merging-traffic--us":"<span class=\"t\"><i class=\"t-square-rounded t-c-black\" style=\"-webkit-transform:scale(0.707107) rotate(45deg);-moz-transform:scale(0.707107) rotate(45deg);transform:scale(0.707107) rotate(45deg)\"></i><i class=\"t-square-rounded t-c-yellow\" style=\"-webkit-transform:scale(.95) scale(0.707107) rotate(45deg);-moz-transform:scale(.95) scale(0.707107) rotate(45deg);transform:scale(.95) scale(0.707107) rotate(45deg)\"></i><i class=\"t-merge t-c-black\" style=\"-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);transform:rotate(45deg)\"></i></span>"}
\ No newline at end of file
diff --git a/vendor/assets/iD/iD/traffico/stylesheets/examples.css b/vendor/assets/iD/iD/traffico/stylesheets/examples.css
deleted file mode 100644 (file)
index 8a9b776..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-.examples-container {
-  max-width: 1200px;
-  margin: 0 auto; }
-
-.examples h2 {
-  background: none repeat scroll 0 0 #35af6d;
-  color: #ffffff;
-  padding: 0.5em 1em; }
-
-.examples h3 {
-  color: #35af6d; }
-
-.examples .t {
-  font-size: 75px;
-  margin: .1em; }
-  .examples .t i:first-child {
-    text-shadow: 0 0 3px rgba(0, 0, 0, 0.3);
-    transition: 1s ease text-shadow; }
-
-.examples .signContainer {
-  display: inline-block;
-  padding: .5em .5em 1.5em; }
-  .examples .signContainer .label {
-    position: absolute;
-    display: none; }
-  .examples .signContainer:hover .t i:first-child {
-    text-shadow: none; }
-  .examples .signContainer:hover .label {
-    display: block; }
-
-.examples .categoryContainer {
-  padding: 0 10px; }
diff --git a/vendor/assets/iD/iD/traffico/stylesheets/traffico.css.erb b/vendor/assets/iD/iD/traffico/stylesheets/traffico.css.erb
deleted file mode 100644 (file)
index 15044e8..0000000
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
-  Icon Font: traffico
-*/
-
-@font-face {
-  font-family: "traffico";
-  src: url(<%= asset_path("iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.eot") %>);
-  src: url(<%= asset_path("iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.eot") %>?#iefix) format("embedded-opentype"),
-       url(<%= asset_path("iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.woff") %>) format("woff"),
-       url(<%= asset_path("iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.ttf") %>) format("truetype"),
-       url(<%= asset_path("iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.svg") %>#traffico) format("svg");
-  font-weight: normal;
-  font-style: normal;
-}
-
-@media screen and (-webkit-min-device-pixel-ratio:0) {
-  @font-face {
-    font-family: "traffico";
-    src: url(<%= asset_path("iD/traffico/fonts/traffico_d596ae6150aa5c55ac14b1e060efc523.svg") %>#traffico) format("svg");
-  }
-}
-
-[data-icon]:before { content: attr(data-icon); }
-
-[data-icon]:before,
-.t-DE-arrow-up:before,
-.t-US-arrow-oneway:before,
-.t-US-arrow-up:before,
-.t-added-lane:before,
-.t-added-lane-entering-roadway:before,
-.t-airplane:before,
-.t-arrow-l:before,
-.t-arrow-oneway:before,
-.t-arrow-s-l:before,
-.t-arrows_both_bra:before,
-.t-bending-priority:before,
-.t-bicycle:before,
-.t-bicycle-slippery:before,
-.t-bump:before,
-.t-bump_bra:before,
-.t-bump_road_bra:before,
-.t-bumps:before,
-.t-bus:before,
-.t-car:before,
-.t-children:before,
-.t-children-au:before,
-.t-circle-bar-rounded:before,
-.t-circle-bg:before,
-.t-circle-o:before,
-.t-circle-separator:before,
-.t-cliff:before,
-.t-cross-roads:before,
-.t-crossroads-ahead:before,
-.t-crossroads-ahead-ontario:before,
-.t-curve-r-l:before,
-.t-cyclists_crossing_bra:before,
-.t-d-curve-l:before,
-.t-dead-end:before,
-.t-descent:before,
-.t-disabled-p:before,
-.t-divided-highway:before,
-.t-domestic-animal:before,
-.t-domestic-animals-au:before,
-.t-emu:before,
-.t-end:before,
-.t-equestrian:before,
-.t-europe_stars:before,
-.t-exclamation:before,
-.t-falling-rocks-EU:before,
-.t-falling-rocks-US:before,
-.t-falling-rocks-au:before,
-.t-fire-station:before,
-.t-firemans-car:before,
-.t-flaggers:before,
-.t-footpath:before,
-.t-h:before,
-.t-h-align-l:before,
-.t-hairpin-curve:before,
-.t-hairpin-curve-au:before,
-.t-hazardous-material:before,
-.t-height:before,
-.t-height-restriction-ca:before,
-.t-highway-divided:before,
-.t-hitch-hiking:before,
-.t-kangaroo:before,
-.t-koala-ugly:before,
-.t-koalas:before,
-.t-level-crossing:before,
-.t-light-rail:before,
-.t-lightground-railroad-crossing:before,
-.t-loop-270:before,
-.t-loose_road_surface_bra:before,
-.t-lorry:before,
-.t-lorry-left:before,
-.t-low-clearance:before,
-.t-merge:before,
-.t-metric-clearance:before,
-.t-moped:before,
-.t-motorbike:before,
-.t-narrow-bridge-au:before,
-.t-narrow-bridge-us:before,
-.t-narrow-road-both:before,
-.t-narrow-road-l:before,
-.t-no-l-or-u-turn:before,
-.t-octagon:before,
-.t-offset-roads:before,
-.t-opening-swing-bridge-ca:before,
-.t-parking:before,
-.t-pass-either-us:before,
-.t-pass-l-r:before,
-.t-pavement-ends:before,
-.t-pedestrian:before,
-.t-pedestrian-crossing:before,
-.t-pedestrian-crossing-au:before,
-.t-pedestrian_bra:before,
-.t-pedestrian_crossing_bra:before,
-.t-pedestrians:before,
-.t-play-ground:before,
-.t-playground-ahead-ca:before,
-.t-playground-br:before,
-.t-pretzel-loop:before,
-.t-railroad:before,
-.t-railroad-barriers:before,
-.t-railway-flashing-au:before,
-.t-railway-xing-secured:before,
-.t-railway-xing-unsecured:before,
-.t-reverse-curve-au:before,
-.t-reverse-curve-ontario:before,
-.t-right-of-way:before,
-.t-right-of-way-l:before,
-.t-roadworks:before,
-.t-roadworks_bra:before,
-.t-rollerblading:before,
-.t-roundabout:before,
-.t-school:before,
-.t-school_zone_bra:before,
-.t-series-of-curves-left:before,
-.t-share-road:before,
-.t-share-roads:before,
-.t-side-road-a-a-l:before,
-.t-side-road-a-a-r:before,
-.t-side-road-p-l:before,
-.t-side-road-p-r:before,
-.t-side-road-perpendicular:before,
-.t-single-2-reverse-curve:before,
-.t-skewed-railroads:before,
-.t-slippery:before,
-.t-slippery-motorcycle:before,
-.t-slippery-road:before,
-.t-small-arrow-au:before,
-.t-snowflake:before,
-.t-square-angular:before,
-.t-square-diagonal-bar:before,
-.t-square-rounded:before,
-.t-steep-hill:before,
-.t-steep-hill-downwards:before,
-.t-steep-hill-upwards:before,
-.t-stop:before,
-.t-t-roads:before,
-.t-tractor:before,
-.t-traffic-signal-au:before,
-.t-trailer:before,
-.t-train-au:before,
-.t-train-electric:before,
-.t-tram:before,
-.t-transit_bra:before,
-.t-tri-angular:before,
-.t-tri-rounded:before,
-.t-truck:before,
-.t-truck-rollover-speed:before,
-.t-trucks-rollover:before,
-.t-tunnel:before,
-.t-turn-90-l:before,
-.t-turn-curve-speed:before,
-.t-turn-l:before,
-.t-turn-l-aus:before,
-.t-turn-l-curve:before,
-.t-turn-reverse-left:before,
-.t-turn-right-curve-ontario:before,
-.t-turnaround:before,
-.t-turnaround2:before,
-.t-two_way_arrows_bra:before,
-.t-u-turn:before,
-.t-u-turn-au:before,
-.t-wild-animal:before,
-.t-windbag:before,
-.t-winding-road-left:before,
-.t-wombat:before,
-.t-y-roads:before {
-  display: inline-block;
-  font-family: "traffico";
-  font-style: normal;
-  font-weight: normal;
-  font-variant: normal;
-  line-height: 1;
-  text-decoration: inherit;
-  text-rendering: optimizeLegibility;
-  text-transform: none;
-  -moz-osx-font-smoothing: grayscale;
-  -webkit-font-smoothing: antialiased;
-  font-smoothing: antialiased;
-}
-
-.t-DE-arrow-up:before { content: "\f100"; }
-.t-US-arrow-oneway:before { content: "\f101"; }
-.t-US-arrow-up:before { content: "\f102"; }
-.t-added-lane:before { content: "\f103"; }
-.t-added-lane-entering-roadway:before { content: "\f104"; }
-.t-airplane:before { content: "\f105"; }
-.t-arrow-l:before { content: "\f106"; }
-.t-arrow-oneway:before { content: "\f107"; }
-.t-arrow-s-l:before { content: "\f108"; }
-.t-arrows_both_bra:before { content: "\f109"; }
-.t-bending-priority:before { content: "\f10a"; }
-.t-bicycle:before { content: "\f10b"; }
-.t-bicycle-slippery:before { content: "\f10c"; }
-.t-bump:before { content: "\f10d"; }
-.t-bump_bra:before { content: "\f10e"; }
-.t-bump_road_bra:before { content: "\f10f"; }
-.t-bumps:before { content: "\f110"; }
-.t-bus:before { content: "\f111"; }
-.t-car:before { content: "\f112"; }
-.t-children:before { content: "\f113"; }
-.t-children-au:before { content: "\f114"; }
-.t-circle-bar-rounded:before { content: "\f115"; }
-.t-circle-bg:before { content: "\f116"; }
-.t-circle-o:before { content: "\f117"; }
-.t-circle-separator:before { content: "\f118"; }
-.t-cliff:before { content: "\f119"; }
-.t-cross-roads:before { content: "\f11a"; }
-.t-crossroads-ahead:before { content: "\f11b"; }
-.t-crossroads-ahead-ontario:before { content: "\f11c"; }
-.t-curve-r-l:before { content: "\f11d"; }
-.t-cyclists_crossing_bra:before { content: "\f11e"; }
-.t-d-curve-l:before { content: "\f11f"; }
-.t-dead-end:before { content: "\f120"; }
-.t-descent:before { content: "\f121"; }
-.t-disabled-p:before { content: "\f122"; }
-.t-divided-highway:before { content: "\f123"; }
-.t-domestic-animal:before { content: "\f124"; }
-.t-domestic-animals-au:before { content: "\f125"; }
-.t-emu:before { content: "\f126"; }
-.t-end:before { content: "\f127"; }
-.t-equestrian:before { content: "\f128"; }
-.t-europe_stars:before { content: "\f129"; }
-.t-exclamation:before { content: "\f12a"; }
-.t-falling-rocks-EU:before { content: "\f12b"; }
-.t-falling-rocks-US:before { content: "\f12c"; }
-.t-falling-rocks-au:before { content: "\f12d"; }
-.t-fire-station:before { content: "\f12e"; }
-.t-firemans-car:before { content: "\f12f"; }
-.t-flaggers:before { content: "\f130"; }
-.t-footpath:before { content: "\f131"; }
-.t-h:before { content: "\f132"; }
-.t-h-align-l:before { content: "\f133"; }
-.t-hairpin-curve:before { content: "\f134"; }
-.t-hairpin-curve-au:before { content: "\f135"; }
-.t-hazardous-material:before { content: "\f136"; }
-.t-height:before { content: "\f137"; }
-.t-height-restriction-ca:before { content: "\f138"; }
-.t-highway-divided:before { content: "\f139"; }
-.t-hitch-hiking:before { content: "\f13a"; }
-.t-kangaroo:before { content: "\f13b"; }
-.t-koala-ugly:before { content: "\f13c"; }
-.t-koalas:before { content: "\f13d"; }
-.t-level-crossing:before { content: "\f13e"; }
-.t-light-rail:before { content: "\f13f"; }
-.t-lightground-railroad-crossing:before { content: "\f140"; }
-.t-loop-270:before { content: "\f141"; }
-.t-loose_road_surface_bra:before { content: "\f142"; }
-.t-lorry:before { content: "\f143"; }
-.t-lorry-left:before { content: "\f144"; }
-.t-low-clearance:before { content: "\f145"; }
-.t-merge:before { content: "\f146"; }
-.t-metric-clearance:before { content: "\f147"; }
-.t-moped:before { content: "\f148"; }
-.t-motorbike:before { content: "\f149"; }
-.t-narrow-bridge-au:before { content: "\f14a"; }
-.t-narrow-bridge-us:before { content: "\f14b"; }
-.t-narrow-road-both:before { content: "\f14c"; }
-.t-narrow-road-l:before { content: "\f14d"; }
-.t-no-l-or-u-turn:before { content: "\f14e"; }
-.t-octagon:before { content: "\f14f"; }
-.t-offset-roads:before { content: "\f150"; }
-.t-opening-swing-bridge-ca:before { content: "\f151"; }
-.t-parking:before { content: "\f152"; }
-.t-pass-either-us:before { content: "\f153"; }
-.t-pass-l-r:before { content: "\f154"; }
-.t-pavement-ends:before { content: "\f155"; }
-.t-pedestrian:before { content: "\f156"; }
-.t-pedestrian-crossing:before { content: "\f157"; }
-.t-pedestrian-crossing-au:before { content: "\f158"; }
-.t-pedestrian_bra:before { content: "\f159"; }
-.t-pedestrian_crossing_bra:before { content: "\f15a"; }
-.t-pedestrians:before { content: "\f15b"; }
-.t-play-ground:before { content: "\f15c"; }
-.t-playground-ahead-ca:before { content: "\f15d"; }
-.t-playground-br:before { content: "\f15e"; }
-.t-pretzel-loop:before { content: "\f15f"; }
-.t-railroad:before { content: "\f160"; }
-.t-railroad-barriers:before { content: "\f161"; }
-.t-railway-flashing-au:before { content: "\f162"; }
-.t-railway-xing-secured:before { content: "\f163"; }
-.t-railway-xing-unsecured:before { content: "\f164"; }
-.t-reverse-curve-au:before { content: "\f165"; }
-.t-reverse-curve-ontario:before { content: "\f166"; }
-.t-right-of-way:before { content: "\f167"; }
-.t-right-of-way-l:before { content: "\f168"; }
-.t-roadworks:before { content: "\f169"; }
-.t-roadworks_bra:before { content: "\f16a"; }
-.t-rollerblading:before { content: "\f16b"; }
-.t-roundabout:before { content: "\f16c"; }
-.t-school:before { content: "\f16d"; }
-.t-school_zone_bra:before { content: "\f16e"; }
-.t-series-of-curves-left:before { content: "\f16f"; }
-.t-share-road:before { content: "\f170"; }
-.t-share-roads:before { content: "\f171"; }
-.t-side-road-a-a-l:before { content: "\f172"; }
-.t-side-road-a-a-r:before { content: "\f173"; }
-.t-side-road-p-l:before { content: "\f174"; }
-.t-side-road-p-r:before { content: "\f175"; }
-.t-side-road-perpendicular:before { content: "\f176"; }
-.t-single-2-reverse-curve:before { content: "\f177"; }
-.t-skewed-railroads:before { content: "\f178"; }
-.t-slippery:before { content: "\f179"; }
-.t-slippery-motorcycle:before { content: "\f17a"; }
-.t-slippery-road:before { content: "\f17b"; }
-.t-small-arrow-au:before { content: "\f17c"; }
-.t-snowflake:before { content: "\f17d"; }
-.t-square-angular:before { content: "\f17e"; }
-.t-square-diagonal-bar:before { content: "\f17f"; }
-.t-square-rounded:before { content: "\f180"; }
-.t-steep-hill:before { content: "\f181"; }
-.t-steep-hill-downwards:before { content: "\f182"; }
-.t-steep-hill-upwards:before { content: "\f183"; }
-.t-stop:before { content: "\f184"; }
-.t-t-roads:before { content: "\f185"; }
-.t-tractor:before { content: "\f186"; }
-.t-traffic-signal-au:before { content: "\f187"; }
-.t-trailer:before { content: "\f188"; }
-.t-train-au:before { content: "\f189"; }
-.t-train-electric:before { content: "\f18a"; }
-.t-tram:before { content: "\f18b"; }
-.t-transit_bra:before { content: "\f18c"; }
-.t-tri-angular:before { content: "\f18d"; }
-.t-tri-rounded:before { content: "\f18e"; }
-.t-truck:before { content: "\f18f"; }
-.t-truck-rollover-speed:before { content: "\f190"; }
-.t-trucks-rollover:before { content: "\f191"; }
-.t-tunnel:before { content: "\f192"; }
-.t-turn-90-l:before { content: "\f193"; }
-.t-turn-curve-speed:before { content: "\f194"; }
-.t-turn-l:before { content: "\f195"; }
-.t-turn-l-aus:before { content: "\f196"; }
-.t-turn-l-curve:before { content: "\f197"; }
-.t-turn-reverse-left:before { content: "\f198"; }
-.t-turn-right-curve-ontario:before { content: "\f199"; }
-.t-turnaround:before { content: "\f19a"; }
-.t-turnaround2:before { content: "\f19b"; }
-.t-two_way_arrows_bra:before { content: "\f19c"; }
-.t-u-turn:before { content: "\f19d"; }
-.t-u-turn-au:before { content: "\f19e"; }
-.t-wild-animal:before { content: "\f19f"; }
-.t-windbag:before { content: "\f1a0"; }
-.t-winding-road-left:before { content: "\f1a1"; }
-.t-wombat:before { content: "\f1a2"; }
-.t-y-roads:before { content: "\f1a3"; }
-
-/** Base */
-.t {
-  display: inline-block;
-  font: normal normal normal 14px/1 traffico;
-  position: relative;
-  width: 1em;
-  height: 1em;
-  line-height: 1em;
-  vertical-align: middle;
-  font-size: inherit;
-  text-rendering: auto;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-.t i {
-  position: absolute;
-  left: 0;
-  width: 100%;
-  height:1em;
-  line-height:0;
-  text-align: center;
-}
-
-/** Content */
-
-.t-content,
-.t-content-3,
-.t-content-4{
-  font-family: Helvetica, Arial, sans-serif;
-  font-weight: bold;
-  font-style: normal;
-  letter-spacing:0;
-  top:48.5%;
-}
-.t-content {
-  font-size: 50%;
-}
-
-.t-content-3 {
-  font-size: 40%;
-}
-
-.t-content-4 {
-  font-size: 22.5%;
-}
-
-.t-content-5 {
-  font-family: Helvetica, Arial, sans-serif;
-  font-weight: normal;
-  font-style: normal;
-  font-size: 15%;
-  letter-spacing:0;
-  top:50%;
-}
-
-/** Colours */
-
-.t-c-white {
-  color: white;
-}
-
-.t-c-red {
-  color: #c1121c;
-}
-
-.t-c-orange {
-  color: #f60;
-}
-
-.t-c-blue {
-  color: #154889;
-}
-
-.t-c-black {
-  color: black;
-}
-
-.t-c-yellow-dark {
-  color: #f0ca00;
-}
-
-.t-c-yellow {
-  color: #fecf33;
-}
-
-.t-c-grey {
-  color: grey;
-}
-
-.t-c-green {
-  color: #008754;
-}
-
-.t-c-fluogreen {
-  color: #A2FF31;
-}
diff --git a/vendor/assets/iD/iD/traffico/transformations.json b/vendor/assets/iD/iD/traffico/transformations.json
deleted file mode 100644 (file)
index 08d9a95..0000000
+++ /dev/null
@@ -1 +0,0 @@
-{"fit_triangle":"scale(.8) translate(0,5%)","fit_border_circle":"scale(.8)","fit_diamond":"scale(.9)","top_half":"scale(.6) translate(0,-35%)","bottom_half":"scale(.6) translate(0,35%)","left_half":"scale(.6) translate(-40%,0)","right_half":"scale(.6) translate(40%,0)","square_to_diamond":"scale(0.707107) rotate(45deg)","center2tri":"translate(0,14.43%)","tri2center":"translate(0,-14.43%)","inner_triangle":"{center2tri} scale(.7) {tri2center}"}
\ No newline at end of file